From 1e02e9ab84f4cc25b8096c195c6c109c5a0facdc Mon Sep 17 00:00:00 2001 From: Zack Maril's Game Closure Account Date: Tue, 25 Sep 2012 19:00:39 -0700 Subject: [PATCH 1/4] Update README.md Added in reference to Clojure library --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 42ff1a0..bb9f088 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Wanna code? Get a Neo4j Driver - [Neo4Django - Django](https://github.com/scholrly/neo4django/) - [Neo4jClient - .net](http://nuget.org/packages/Neo4jClient/) - [Neo4j-GO - Google Go](https://github.com/davemeehan/Neo4j-GO) - +- [Neocons - Clojure](http://clojureneo4j.info/) References ---------- From c87eca8c785138b80a3e325f8870f71d003db9a3 Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 29 Sep 2012 10:40:06 -0700 Subject: [PATCH 2/4] added limited importer --- CODE/fecGraph/src/importer/Tool.java | 11 +++++++++-- README.md | 5 +++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/CODE/fecGraph/src/importer/Tool.java b/CODE/fecGraph/src/importer/Tool.java index 8a14a8b..a42c66a 100644 --- a/CODE/fecGraph/src/importer/Tool.java +++ b/CODE/fecGraph/src/importer/Tool.java @@ -3,6 +3,8 @@ import org.apache.commons.cli.*; import java.io.*; import java.util.*; + +import org.followthedata.importer.fec.LimitedFecImporter; import org.neo4j.kernel.impl.util.FileUtils; @@ -13,7 +15,8 @@ enum ImportImplementors { AKOLLEGGER, RAW, CONNECTED, - RELATED + RELATED, + LIMITED } public static void main(String[] args) { @@ -78,7 +81,11 @@ public static void main(String[] args) { selectedImporter = new org.followthedata.importer.fec.RelatedFecImporter(); selectedDataDir = "FEC-DATA"; break; - default: + case LIMITED: + selectedImporter = new LimitedFecImporter(); + selectedDataDir = "FEC-DATA"; + break; + default: selectedImporter = new org.followthedata.importer.fec.RawFecImporter(); selectedDataDir = "FEC-DATA"; break; diff --git a/README.md b/README.md index 2fd5644..350d6be 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,12 @@ Follow these Steps 2. `cd FEC_GRAPH` 3. `ant initialize` 4. `ant` -5. `./bin/fec2graph --force --importer=[RAW|CONNECTED|RELATED]` - - choose one of the importers, like `./bin/fec2graph --force --impoerter=RAW` +5. `./bin/fec2graph --force --importer=[RAW|CONNECTED|RELATED|LIMITED]` + - choose one of the importers, like `./bin/fec2graph --force --importer=RAW` - RAW: imports records with no modifications - CONNECTED: connects imported records based on cross-referenced IDs - RELATED: replaces "join table" records with graph relationships + - LIMITED: only imports 2012 presidential candidates for a smaller dataset 6. `ant neo4j-start` Indexed Nodes From d3e9bbecaa4443d16078e9bf1dfb6cb705427b5a Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 29 Sep 2012 10:56:38 -0700 Subject: [PATCH 3/4] added limited importer, updated data model descriptions in readme --- .../src/importer/fec/LimitedFecImporter.java | 302 ++++++++++++++++++ README.md | 16 + 2 files changed, 318 insertions(+) create mode 100644 CODE/fecGraph/src/importer/fec/LimitedFecImporter.java diff --git a/CODE/fecGraph/src/importer/fec/LimitedFecImporter.java b/CODE/fecGraph/src/importer/fec/LimitedFecImporter.java new file mode 100644 index 0000000..80f0599 --- /dev/null +++ b/CODE/fecGraph/src/importer/fec/LimitedFecImporter.java @@ -0,0 +1,302 @@ +package org.followthedata.importer.fec; + +import org.followthedata.importer.FecBatchImporter; +import org.followthedata.importer.Report; +import org.followthedata.importer.StdOutReport; +import org.neo4j.graphdb.RelationshipType; +import org.neo4j.helpers.collection.MapUtil; +import org.neo4j.unsafe.batchinsert.*; + +import java.io.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public class LimitedFecImporter implements FecBatchImporter { + protected static Report report; + protected BatchInserter db; + protected BatchInserterIndexProvider lucene; + + public static final int COMMITTEE_CAPACITY = 15000; + public static final int CANDIDATE_CAPACITY = 6000; + public static final int CONTRIBUTION_CAPACITY = 100000; + + enum FecRelationshipTypes implements RelationshipType {CAMPAIGNS_FOR, SUPPORTS, CONNECTS, INTER_COMMITTEE_CONTRIBUTION, CANDIDATE_CONTRIBUTION, INDIVIDUAL_CONTRIBUTION, EARMARKED_BY } + + Map cachedCommittees = new HashMap(COMMITTEE_CAPACITY); + Map cachedCandidates = new HashMap(CANDIDATE_CAPACITY); + + protected StdOutReport createReport() { + return new StdOutReport(10 * 1000 * 1000, 100); + } + + protected LuceneBatchInserterIndexProvider createIndexProvider() { + return new LuceneBatchInserterIndexProvider(db); + } + + protected BatchInserter createBatchInserter(File graphDb, Map config) { + return BatchInserters.inserter(graphDb.getAbsolutePath(), config); + } + + public void finish() { + lucene.shutdown(); + db.shutdown(); + } + + public void batchImport(File dataDir, File graphDb) throws IOException { + Map config = new HashMap(); + try { + if (new File("batch.properties").exists()) { + System.out.println("Using Existing Configuration File"); + } else { + System.out.println("Writing Configuration File to batch.properties"); + FileWriter fw = new FileWriter( "batch.properties" ); + fw.append( "use_memory_mapped_buffers=true\n" + + "neostore.nodestore.db.mapped_memory=100M\n" + + "neostore.relationshipstore.db.mapped_memory=500M\n" + + "neostore.propertystore.db.mapped_memory=1G\n" + + "neostore.propertystore.db.strings.mapped_memory=200M\n" + + "neostore.propertystore.db.arrays.mapped_memory=0M\n" + + "neostore.propertystore.db.index.keys.mapped_memory=15M\n" + + "neostore.propertystore.db.index.mapped_memory=15M" ); + fw.close(); + } + + config = MapUtil.load( new File( + "batch.properties" ) ); + + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + db = createBatchInserter(graphDb, config); + lucene = createIndexProvider(); + report = createReport(); + + try { + importCandidates(new File(dataDir.getPath() + File.separator + "cn.txt")); + importCommittees(new File(dataDir.getPath() + File.separator + "cm.txt")); + importCandidateToCommitteeLinks(new File(dataDir.getPath() + File.separator + "ccl.txt")); + importInterCommitteeContributions(new File(dataDir.getPath() + File.separator + "itoth.txt")); + importCandidateContributions(new File(dataDir.getPath() + File.separator + "itpas2.txt")); + importIndividualContributions(new File(dataDir.getPath() + File.separator + "itcont.txt")); + } finally { + finish(); + } + } + + protected void importCandidates(File candidateFile) throws IOException { + Reader reader = new FileReader(candidateFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + LuceneBatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(db); + BatchInserterIndex nodeIndex = indexProvider.nodeIndex( "candidates", MapUtil.stringMap( "type", "exact" ) ); + nodeIndex.setCacheCapacity( FecCandidateRecord.Fields.CAND_NAME.name(), 100000 ); + + while ((line = bf.readLine()) != null) { + FecCandidateRecord record = FecCandidateRecord.parse(line); + if (!keepCandidate(record)) continue; + long nodeid = db.createNode(record.getMappedFields()); + Map properties = MapUtil.map( + FecCandidateRecord.Fields.CAND_ID.name(), record.candidateID(), + FecCandidateRecord.Fields.CAND_NAME.name(), record.candidateName() + ); + nodeIndex.add(nodeid,properties); + cachedCandidates.put(record.candidateID(), nodeid); + nodeIndex.flush(); + report.dots(); + } + nodeIndex.flush(); + indexProvider.shutdown(); + + report.finishImport("Candidates"); + } + + private boolean keepCandidate(FecCandidateRecord record) { + return record.candidateElectionYear().equals("2012") && record.candidateOffice().equals("P"); + } + + protected void importCommittees(File committeeFile) throws IOException { + Reader reader = new FileReader(committeeFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + LuceneBatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(db); + BatchInserterIndex nodeIndex = indexProvider.nodeIndex( "committees", MapUtil.stringMap( "type", "exact" ) ); + nodeIndex.setCacheCapacity( FecCommitteeRecord.Fields.CMTE_NM.name(), 100000 ); + + while ((line = bf.readLine()) != null) { + FecCommitteeRecord record = FecCommitteeRecord.parse(line); + if (!keepCommitee(record)) continue; + long nodeid = db.createNode(record.getMappedFields()); + Map properties = MapUtil.map( + FecCommitteeRecord.Fields.CMTE_ID.name(), record.committeeID(), + FecCommitteeRecord.Fields.CMTE_NM.name(), record.committeeName() + ); + nodeIndex.add(nodeid,properties); + cachedCommittees.put(record.committeeID(), nodeid); + nodeIndex.flush(); + + Long candidate = cachedCandidates.get(record.candidateID()); + if (candidate != null) { + db.createRelationship(nodeid, candidate, FecRelationshipTypes.CAMPAIGNS_FOR, null); + } + report.dots(); + } + nodeIndex.flush(); + indexProvider.shutdown(); + + report.finishImport("Committees"); + } + + private boolean keepCommitee(FecCommitteeRecord record) { + return cachedCandidates.containsKey(record.candidateID()); + } + + protected void importCandidateToCommitteeLinks(File cclLinkFile) throws IOException { + Reader reader = new FileReader(cclLinkFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + while ((line = bf.readLine()) != null) { + FecCandidateToCommitteeRecord record = FecCandidateToCommitteeRecord.parse(line); + + if (!keepCandidateToCommittee(record)) continue; + // add relationship, if both nodes found + Long candidate = cachedCandidates.get(record.candidateID()); + if (candidate != null) { + + Long committee = cachedCommittees.get(record.committeeID()); + if (committee != null) { + long relid = db.createRelationship(committee, candidate, FecRelationshipTypes.SUPPORTS, record.getMappedFields()); + } + } + report.dots(); + } + + report.finishImport("Candidate to Committee Links"); + } + + private boolean keepCandidateToCommittee(FecCandidateToCommitteeRecord record) { + return cachedCandidates.containsKey(record.candidateID()) || cachedCommittees.containsKey(record.committeeID()); + } + + protected void importInterCommitteeContributions(File interCommitteeFile) throws IOException { + Reader reader = new FileReader(interCommitteeFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + while ((line = bf.readLine()) != null) { + FecInterCommitteeContribRecord record = FecInterCommitteeContribRecord.parse(line); + + // add connections + Long toCommittee = cachedCommittees.get(record.committeeID()); + if (toCommittee != null) { + String otherID = record.otherID(); + if ((otherID != null) && (otherID.length() > 0)) { + String entityType = record.entityType(); + Long fromCandidate = cachedCandidates.get(otherID); + if (fromCandidate != null) { + db.createRelationship(fromCandidate, toCommittee, FecRelationshipTypes.INTER_COMMITTEE_CONTRIBUTION, record.getMappedFields()); + } else { + Long fromCommittee = cachedCommittees.get(otherID); + if (fromCommittee != null) { + db.createRelationship(fromCommittee, toCommittee, FecRelationshipTypes.INTER_COMMITTEE_CONTRIBUTION, record.getMappedFields()); + } else { + // not found? perhaps an older identifier. TODO - look for FEC identifier master file + // System.err.println("inter-committee record failed to lookup otherID, for subID: "+record.subID()); + } + } + } + } + + report.dots(); + } + + report.finishImport("Inter Committee Contributions"); + } + + protected void importCandidateContributions(File contribFile) throws IOException { + Reader reader = new FileReader(contribFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + while ((line = bf.readLine()) != null) { + FecCandidateContributionRecord record = FecCandidateContributionRecord.parse(line); + + // add connections + Long candidate = cachedCandidates.get(record.candidateID()); + if (candidate != null) { + Long committee = cachedCommittees.get(record.committeeID()); + if (committee != null) { + db.createRelationship(committee, candidate, FecRelationshipTypes.CANDIDATE_CONTRIBUTION, record.getMappedFields()); + } + } + + report.dots(); + } + + report.finishImport("Candidate Contributions"); + } + + protected void importIndividualContributions(File contribFile) throws IOException { + Reader reader = new FileReader(contribFile); + BufferedReader bf = new BufferedReader(reader); + String line; + report.reset(); + + LuceneBatchInserterIndexProvider indexProvider = new LuceneBatchInserterIndexProvider(db); + BatchInserterIndex nodeIndex = indexProvider.nodeIndex( "individuals", MapUtil.stringMap( "type", "exact" ) ); + nodeIndex.setCacheCapacity( FecIndividualContributionRecord.Fields.SUB_ID.name(), 100000 ); + + while ((line = bf.readLine()) != null) { + FecIndividualContributionRecord record = FecIndividualContributionRecord.parse(line); + if (!keepIndividualContributions(record)) continue; + long nodeid = db.createNode(record.getMappedFields()); + Map properties = MapUtil.map( + FecIndividualContributionRecord.Fields.CMTE_ID.name(), record.committeeID(), + FecIndividualContributionRecord.Fields.SUB_ID.name(), record.subID() + ); + + nodeIndex.add(nodeid,properties); + nodeIndex.flush(); + + // add connections + Long toCommittee = cachedCommittees.get(record.committeeID()); + if (toCommittee != null) { + db.createRelationship(nodeid, toCommittee, FecRelationshipTypes.INDIVIDUAL_CONTRIBUTION, null); + } + String otherID = record.otherID(); + if ((otherID != null) && (otherID.length() > 0)) { + String entityType = record.entityType(); + Long fromCandidate = cachedCandidates.get(otherID); + if (fromCandidate != null) { + db.createRelationship(nodeid, fromCandidate, FecRelationshipTypes.EARMARKED_BY, null); + } else { + Long fromCommittee = cachedCommittees.get(otherID); + if (fromCommittee != null) { + db.createRelationship(nodeid, fromCommittee, FecRelationshipTypes.EARMARKED_BY, null); + } + } + } + + report.dots(); + } + nodeIndex.flush(); + indexProvider.shutdown(); + + report.finishImport("Individual Contributions"); + } + + private boolean keepIndividualContributions(FecIndividualContributionRecord record) { + return cachedCommittees.containsKey(record.committeeID()) || cachedCandidates.containsKey(record.otherID()) || cachedCommittees.containsKey(record.otherID()); + } + +} \ No newline at end of file diff --git a/README.md b/README.md index 350d6be..7e5bfde 100644 --- a/README.md +++ b/README.md @@ -85,3 +85,19 @@ References - [Neo4j](http://neo4j.org) - the graph database - [Neo4j Cypher Reference](http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html) - [FEC Campaign Finance Data](http://www.fec.gov/finance/disclosure/ftpdet.shtml) + +- [Candidate Record](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCandidateMaster.shtml) + - CAND_ID Candidate Identification + - CAND_NAME Candidate Name + - CAND_PTY_AFFILIATION Party Affiliation + - CAND_ELECTION_YR Year of Election + - CAND_OFFICE Candidate Office (P)resident, (S)enate, (H)ouse + - CAND_ST State + - CAND_CITY City +- [Committee Record](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCommitteeMaster.shtml) + - CMTE_ID Committee Identification + - CMTE_NM Committee Name + - CAND_ID Candidate Identification +- [Candidate Committee Linkage](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCandCmteLinkage.shtml) +- [Committee to Committee Contributions](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCommitteetoCommittee.shtml) +- [Committee to Candidates Contributions](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryContributionstoCandidates.shtml) \ No newline at end of file From 768a3993dbf72d97b3392c95e1106f083b6cf44a Mon Sep 17 00:00:00 2001 From: Michael Hunger Date: Sat, 29 Sep 2012 11:35:28 -0700 Subject: [PATCH 4/4] added relationship-image --- FEC-model.gif | Bin 0 -> 31799 bytes README.md | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 FEC-model.gif diff --git a/FEC-model.gif b/FEC-model.gif new file mode 100644 index 0000000000000000000000000000000000000000..d1106b2860dbfcadd7999414a795cba46f496d7f GIT binary patch literal 31799 zcmb@tXH-*9)INGn5|YqEkzPWTDph(3z4sy_YG?ui5|AbehAO>x5CbArq$40|sM185 z^b!OC0hKNy$o2Ps?^^G=U+(>KXRUM2v!B_sXXdn-J!c<116>70$2q7wi&Bx0pbXiD5L_|_TQbtBbL0&;wSs9~_(bCe=*V8vLGBP(a zx3aRbyJmOe#trOktc#0_yPLb0mlw_lcmMwV;Gp1#4zbOHT3@%ex3?4D6T7;)`akp!4GoQc8l9Y+oSB|k zm|q|*lh#((Ha9l6x3+hG?j9T*ocucZ`}gm^#`FA!!T#$6&&8R6mX@WSrk<3flr#W9 zBsH`(bs#7J@V@8o_m4;0UAIRgMgb&12`~UMfU=|WeVm55x$%Fc@A=$w{qOkyOvh6I z_#ZPN{-3S?XWsv(MB$9{^Z%!H_HUDRalP*h0HEYQ>>1>b`^STY|1hJI=l{WV|6xCC zORax=&p%A#_CI*?KkW2Bco}`~TzazYFm{<_;|W&j|*ZhX0rQ--?_A`~v@P353W1!2g?!`A^}0jTEu~ zfY}QGfSvs>Cz}KS1Tg@h&H7(XPznH05&-b75crn^0RKG{0Q>^;45u%~meOD9H{hl8 zY_!7Pu*SZ2=4If}_mKCbx?tlg1)nyXLO$Mmv%K5-$h3C;=SfG{r=Nc=@Zk}WQPD9^ zV&mcy5|ffsQq$5iGPAOCa`W;F3ZE7|BNUfBFMUx~UQt<9{j%m&ZC!msV^ed>>(;jR zHyv*sRfwHk-95d1ANmIdhlW3nd>S1apP2mI|8AyzYJOpHX_>V0WmUyxZDaG>*7nZo z?9aOI`v-?d$1ArwrMcM7*;oK51&4kep)(T6AmY$pSKR#s#b;QkU;hR3n8O+t`C-gj zl9}V|yivcQbRa{>s>k(-H8WaApK;iz@!a!sBr;BHpND5BFri!uW`WYfO zDgNDt6iWDjLJE;w1OUsuyExcfJzb0Kj(=+a0Ek@Mh*=aiylP%V5Xgb`tZ(1{%KdKol6Wl>~BWICuevcT^gXgcuf)^gesVoIU%9-kYHz}mK$6lN8O9#($a!0uJ{!iPmUqQQb zm6e|A_ZQ&snfXfTpdTj#zHHaJt7=3>*WpsA4A(<`wi9GANz>C$5ySlz^s`oxG#T(%v{Q}-ou z%7S|_Cq)Fxkq2c@V_VYQiY4-YZRD|(&Ta}vF|mGoK|g5cmQ$F&zgf`DGfPSovu3Lj z$z!{|RrPCN6GBOkr>GWs&L-kKd+~8!+?ZQNki+^pf$gdq@E7xx8<6i5}$-+2odkp8K^&v7+(G& zGoov^aL6nFN%^Xr@$H-a6SnLe{%!VrmI0lPo)c0HuH0Q$XLaSuAl+|o z>I%j)qtTBbKqnm<4KScU#J`b@A|9^^R$!1weMbs%BEaxUB3e-h@;r(FDaWUPyyyrR z$}Vb|Dx8cP_6+oDjba%zj}bi#rx8NqcZG>$+U7(CG9o}(;lt?l=eAJEh5&dPi!Wy> zA&bUC8Y{vhn0g5Cls*mfo(mmNC^wv35CEtcJK?1JMDotd;k?5zz+!k1$ut1M0X$4= zh8oZ{kK&U26VT$c(;>w37tu*^h7%-MhX2|4Ki`4ht*9zG!E z=PuSOtcZot?2?6Ym;)dhXTog`kO^U}P&!0_tZ?G#Ze}^{riU5NC>|nb9?r*!iI_&B zBQzyJn2fUqo4&|HXp!aaJ~KHSLutB)`m5&XGq@SFZ|4Or{kjPz;b1bziF>V zA;8-=+PqhS4G-C`F$xWjzujF#o2;o&eJkX_4Km_rrHqtd8GyxSEk%J;ID8c6ZUH1q z7s8SakjZs8QU=d-Gt-eHbXC4wAEbu~>DD7{sUUQzq+Wi>@I+UtPi)nsKKVQ0$pJeN zT)$Z082El%jB%tVT@HE7ioF;){54wyc$RZ}!B@qeX7=?g%y!TCW7wmxP}>23%Sd+fX&x9qpfrhREL% zB712FrS!LeJCaqXb9#gN&#VyWU2*u%UGu0@Ofgk}PRK^A3S-pP?6vBlK&M9uOujQgu-D17%gO`#uzS|x_lCSwrtC;(3J9Dp*GN%BvE)btO1 zm|q6>iV$BzNYfv>wCxbe#Li#t5D+zkWrd-LhL?YUT-IAFJ+Y#aR9HOYLqY}%NrN_o z7>TC+jnTQ%kZW7?{o(UIxrd{T4VQq3^L|2JHLjXIPzz*uIoo^$2VJ8?BJ*98q92U~ zjCq)9f`yIs90XCE`r=I0T~;7XfT!r1)WzMy=nO{h%mb&7R3L8!P#HvBTl3-3jbeJt z_r$b-S7S6J$_D?HnHL)DzY-V7^#1(B({_-c>fSI(^nC1XO1M}lGbNrK;GPLW;xMk= z=|oM}G#+Y+l*qhC?1*a?oy`WZ?|W_)K&4@LsMs3d`34Rw$4Is~0ub`d7frExDj=04 zih)F^ogO&Gimx#yvy+awT91VhpU%YTNxwhIt9`iq16zn;>0-#nML*7Pq`KeQ&HZD$ zQ2+xetS)(LfCv1WhrhmAw?$qP{(#!1&nbN#`j`A%nqtowpgy!mLIpjq_fg!ucDEE~ z7`g$4qxEat+yH`_k37uxiRZ;DvLG*c&vx4&H&+mX4}KE^nZ2X_tnRv{zt3!o-$j}q z;OD0ScTt;iRw;8<2z0&*HrEBwq8<7}>{gH&E+@POr?>)(RC`4kE zNqsoeV%qka=Su2BSY60u*%Kx|BmJY`VdmHfh1g*|fDv`O3U}887j3_0za11PON5$f zz;3VKPVWy?+jSMzfeNC1E;gX=nY;k}-AZ%(Z9NKKS7Tq$z{JU>aQHp9aK8;G zYrkjUWtguV%-_}M;^S8{l(`YTjvnJza&~Fk76k)M5`avN%xZv`zyXa(-LHY5nk2L) z;F?aeJ!5Jl6&eU|ym7>Ib@s>rs;_a#uP=`W=$g&ytV~Jd|IMo{tX2z3#ZI2QFR)=dYm|0z*;R43h}EaYX2+*E&%`!H`j0KqQ5u8_anF zdSs#VS7ss&~o;+^CAfx0~no)^{)-bBw-GGYV9+p4IWS9vojmu=L@KhT${EL8^ z`l?B%Y8UbAe95^fPcFvr!nQz?frbE)B|@HNrpF6u1G}u_La@-!VKa8Fx_E%v9Hxv9 z(8S)j0|(f5At&A8x|0gO*twl7(RxuEG@f zCNCrjlqQOg!>SdmEc|cqR|W#vPqeTp1Ho#7gIc#^LIQYfWCkqX>;E~^>7}_hZJhD*#*N*dHAV<3(`RWKki}2(WCfw zPbOH|ct4P~1?@95+i1c;FpxK6g`YeO$A1?%AgbmRF-rDTcW_ln=^m87*)2eZ$dH^(_6IvP!JAqbjL!sV=>f0G?T2)mgF*SyUcgy>0oJcjX>HK;pB0qr; zikNEo@@mKpxT0d!!-F~(OdTUT`Qwm!D^$JLi+X55>CM&p;5|29b~uMol>jB2sh}Y~ zwO(upc3HVzqMGdK8o-NxE+a~QrJzwC)!5qIXoL59bf=bwvMHgiQP&8j_D99w4NQ|= zZH}zeL=>s7+-#)WY)cg6AXbwm5-k&&L(Q8_9yVi@$u53(L2Btt{B&wv*^$yE5Q;1t z?}soK<=1AZQgT>`LjmjF-PggG2V!^#FA-!S-FTgI*>C%`mig=W?Iv`B9a@_`Nfe<( z02zsicL%-Tc*vGgoBwvL&QP7ucH1{Z!&eep-i@qKqjoo9^T#`Y2&wMn4OpV`8*PGu z5+tuL&HJ56|mqa=9jDsmTSGtm0%r~>KViMQ+w=kx+oml#$3?)B=9>+ zH|Ak)d_k{TL+=<2Bwy%INiEwF?Umu{(01r}z*nz+YXE;Z!zNY^@1qrzKMPz}!l%LcdJP0yV zVV?eKifVd)BXvl|GaeQq=&J#4t2E0LgWps>x&v&NsWjJeKGv*4xNxH+t^3tO=-ijY zQz{{my3X;OF}Am39E)RI=VNHjabDGN{+r{1q2oeN$3@36%4G*YG zH+=7lkf!mRGa5pv!;1?e=L>B3_f){*UK1Y|F`J;cE~JQa;$jXi`_FifmxBw4#zQ1gV>d`32s8&&fzmoKy0SYrWZC(m zL(ED^7lGM5Uv*fimrM@Ybn>rVA8&h?hJ{Mv9Fnt_tfE1|-6>a+@D=>~;>D(Pq}>Vlx{s$AHrLeVO>f3f1ys@mUG!F9$0>NV|KYYmLE$1ZDzKUO~(fkuDV zRDXLuik@kifqe3doNZqs<|^wg*a~p#r;)RwI>TF2hWC zAqi_=A1Q7GEM1HE24zmYDTIa!@2aBAnb{!_;u@&xr74{1M2-T4nY7C@4XY;&Yh93d zPY4>@7D=|wsZ#Ar5VDtMpvU_jprQW0v=v2LRkvtO&h+=in>UK{q|{bbW+Gd{wl7+X zwp+Mn{a$Rp`@2mna>CAacHY|QTZ*&|-5I3WNn6AX{oQGQ*EyzZ^XadTl-!gU3DVv0 zHHh?FkO0!-x^ot-<3EDDSV;7j^2Xc=O6rM%)mjQ~)2Wl7lsvXSg>WA_Y z1}bKU`aTEfS6*zXhcfH4*YAl-q<;y(Kt<5T^aP!c*Sw=mKo+d&5!CXcSrEpFy@sRt zdHnY#03_|bIvx!M5TnrVvtfU4Sv?5JAv1O8%fi>z$m1w$&amJUJ2M1-ETulkks8H+ zk0Ux<0K?SEiwBXFsZ@EP*^htcKKq>`@ic$=chSXf0{3Z&`f2Iy)3V2>70*t~K83Q~ z0eMNYj?#j~>{kyoxMd)bqUw?D@Befx|LO4g$V>XurGD097MYjuwfEWCV2X3vTaTfO zv+k6oQT6j~vrn}NpgHZiO4)az58O&drTX4&H5>09UxxI&W@e4|RwO`AL^-1Cp)m-m zEWa(4QG@15es{s$OECSZsynnum>LacL*~>A7#b6zlZ*xosqS8^&3eh^8^iCn*@;{l z)TWQaa3#Z?i}leoF0V=XnC0d#UUiCqHpJdt72qkW#{C+^dQ(D=hbf4uRlI1 zJ0q#4p{1i|U?8y1VQ6#hx(%znqqD1LVu5iU9fT&pDh13<=r*02X~Pyu}y1;zDujY#k=`|-t#q=HXU&VK|iO1 zkS9z_Hv|B>?zDp+Cs$u{AwGmYpNf#2+iab#cYC587sJe+E?7^(GGK6=iq;KYzopB8 zUl0`5JVtB%;mLj|goTHZ9|?#h{_`_Hy>^f4?9wl^2o_8#9#Dy(5Pn&Qlq3njhf4r) zni#1SF6Q)3N1pHcVrj(&BD0VfNpr~ys01xG(V~yltxOuxb61LuRuJt07L+oGQ* zPHeoNFHL*Dvou}S@A8PgPz)K0)Y*NO}uqyd`O~`>i#oT4&=nJ%-EqNnVN(C z#7Fr~{uDBWZ~pgJEh}Dw#PLg(~jO|+5B`GjmI~PYH=RUi?!YZ7oaJNUq<(4);#>fL~2rWo! zK6y;QMUZo#B*FL~d-U~hFN}JmuS;~XK*^-@Yv#79>qkzvq{1iXwre|&L$EYmSLSyb z$4qa0Z=StkiVvDqdwBO#oiEQ!)XT`&3A^7v=6}9--E#i?o?N2PhaJ)z33jvks7zkX z!a4YL`L=fB2c*hXeASS^RW=S|v;-}=on+xeUY_Yw3nl;!#wR5P=RyU;{1%_&U+R2I zaglgO^X8>QmJ&BU6#fFenU#Vf1`Fx}1o-FTlqJ@3n1#)F}AYkN+qWyy2`GyHX{{PP*_8EerJtV9Lg~|(SoCCm2*!>Ni7yg2|awy z>D-M#ouyr*Mz2}lXLQonS=!UPVzV6J0>pB;YfH_Uh;UL2F#E4wb0HX9ul zhtB)xzb=yym#l&T@;^7NU#-tG@xC{a_je46Y|S&d!UOZ+JQH9PSw~O_d0U5VI&MKW z8YXQLGsjjt*Hgz)T)CtK$S9tAgmv@@iA44UtIa%|_mp)MXQ7fBPJtaY3O8*k?qn2X zI$SH`)<8e!JWr>j{{W;UXO;?F{ia`=g&-@GHMUn`ETK2B5Zc6KgyQhykPQSIrWW6F z;mih1f77t|Q5;0=t6{i@0dEXuR+)DjP56V;uSwW)S!(EEov+P9-uC45ZNhjpCQqFIVAo zf>OgoxXc4~oO#%1cM54DqC}J7BHQXd`5( z+$i8J5kiWs>ZZHmN-6c)&bJ&j1|sj;H$@p{xAtEB;mlLnA80Dj_L0m?`41YpVVcwa zx%m~(&nm>XTfb6zukO4)CPt(seWo=sxp|)uR5PV(25EdQz=cAO#q3(q!hrCLM=1rj z&wotkEPS>0RUzHhNxw!bhT09MDYItl_`vU>fD7DTOy=wN1}D zXZWQ)*qSbS`LKnCKrsHn z+S5+&{7n`YU6kErsRKJcAuq&}41 zsgh~6+VJ8?A6QWAes#WQaucKa*pJlj)}O8#=EsTiy;`M#f{?@O@Ve;bVsjaJJNQ$wlipgi05i5F&ZnIq6@tg&X@Qb*ht zq1?$@GGt340QR$iDY~V%okPVHw=Uc5BlvQZ{fbY`btvihpBo@1mE+Z`B{(M z`AXP$eRr$t%MV1QdBCW~N40^0D%?oj=rX@?99ptpjW*=or}});!?HSy`0pZ1QNrG$YIuFj)V^<@ueYaTc!wJ;M7h;pnd6s2-F5tdjgd zk-DgRC2svwh9OPJrep&>EiK$EBvyi!_zA^Y&shIlQ2`alUvWW&Iu|mHupIj(_A^5^ zYQ^2HC0K$DQvv5bCbh^~2qT+&D; za$C7bfySfeDIMTk4LeybYWTF=E<@&jf# zy(Gyon^Y8BtMZ7P-llvyz8VjZ*wteZ`q*a1F)q#qy7*Pj40rzEQR>e_%TXg4T&29K z9t<{m+)0#QEq~--@kdl>Auefw6jDDD&uCNrdtsM;-kU$)A|!JxgF>G@Z=E+u6n90E zfCFHf)C0Wc0?~VV>7zM}8`P@li-UU^??y5nnFr8cd4DGr`8bX&)exfqh$f}eiGJW- zlME5D|JZ4w@4M-dmoJ@*JrQTw1IHw`&yW zcO&`7a(0XZ0!`ls6BO-@%k1z+Fd}3NCvjg=j0`K57b9MsdU|J^Tg?L!`mO&M=Yhn% zkG->#Phn~6Y2Gm|eIbE6^BYXxqNbe?R^7{BIykdF7$4kkRie97L;;s2lmSFg7AZ%a zIxL-0a<7pByuWy6A>y-_lRZ8Si|X^2dPayxSYt(BV8{+F6{~6bI7V{fPy{ZMk_%FzO)!^wA}IYoOJcz=(X zy*_N>71l=MUjRfOe`$ho3Y(~XdC=r>oqm1IQ$v|JbJ;j!f3!|*|H!UXjtQ9_elKrfqIMu59Khp26`)pS`&;vQ!C2Mift5z zS;Z}7i0q-6eo?}eAac6C#KqSk-*)J8@;^_Pnu}iq4?M7Y2xXPv$UQ3Tdhv zijc7RO$k>4#{Tl$+W6e(MZf^{YLBz%m>H)!3@&GFDykbu79;$A9Q08&=!6?1tO2Ok zrAsOVf41XRr_Ywf6t}A-wKI}b{4Rx{F8#&xhR{z8ng6&7&`X9?w#nO2#mdgcv)bKK1@Y&O@cewJ1+z2(we76c}!K^9n=l% ztTrqXj1l?WEX7Q4Z6d@}uJ2Yj%mItL2yE~(gv7|oQvRY|W}0&9z8|Nf^Vq=IN)Poh zagf7z(Vs|m}A!&<(_z8G-sSN)tpsIsJznRt=C>2;`xLr$5;`$W&RtaUMw+kO~CAmP=? zYr3;*vd0(OTC8JsM&EC=zqUim$Gw_3$i$9?xfmbai#UjW_z)dgj76+h^{E8Y-Tpk8 zEasF^;Uwj28TaY|l)8@*8)fz#t|CbP3Tp}ovR#>p&Co|+Ne`Ghiy;c{U*^)ew+awW z3h$jzZ#PYjTN2ip)S68~!oH8O9o#01hlq^B>b|&3GbDfSR_mbzw`NqOO~9>OP>d9R z-yj2p_Q=Hu9S{Ks)#Ct+D?eVHg_WO0(WkTok_eE&h-8}zDP$Nj*;&=8IH(dU0dqYA z{7ptQ0w(FI z1fGJ1ZtgvSC;-&O7U^K1aC|iD3Zobag+a@o?Lh89$Xw85rXWN&>dqds$eb_)!z)Jv z5CAzGNQFU~Psdp8$MRZ6uXiMu=*E+td%&iN8lX8AZj6Nhq*_Z1MjwFNV{TGm zEBo3C#g(33%YPb*F4}ki+xlJPw)5l|gynzr3m-w)A)G(=!tb#?4}uWF`VsbXz%8XR zG8jAnhxWE5f0t@k=LqC=^GOA(Qp3VrnKyvK1HV@_n>h2?v z1d9|jihvK8VdRiBM!*TY%bh!uIv?dAn&C(_el*)UQNdm_2Zb;8C2?93<9>Zp=XHE> z8ws$i2yyWu>L3Bu`4sf-zPVWIK;2j6nS~%4vC}U7JD>clo!s^gcdWT!Ji4+NTj~5K zIFZ!!unf@-5yTO}9m4l_bB^T?=vafsbgc;vLC2T_a1Z1A{w4m=ap9L!bqIEE>l7JQ zB7Klgcjpf>odD%n0ZQe_f(H;ZB*2M<0!5hL7tc>2f?^m@kcj*-Phf}!g|H18UpUPP z0#qCbk(r3%@Wwo#i5cu-cS2H3z>gIvlmd_r7jOX4E!hTM1^2oG;u&jKp!8S#NrO z_nt$0F$)N%Lh`|fbR+Y~B8SK}E4p;_Q4B!Xr{-AT4Yvcp(|JT!hvg%5xHSN32O-4R zJ8w8>q!S^SUMm3G%3sKXCd@O1gSJOVC(H@46W*}U?0BO?=TUjm-e~k`ZwdyEB8~^o z2cd6{iCVd{9eh2B4CtZy5DJW5TR;RC_B}d7#5s(<>h(!;m;YpN=a0xevm}*Zg~BAl zXeb7x!Sa+m8r)-3`=U7WQM_pEVix)@>MEFyLRSFBQY?zw<8%;QcBu){#sDG2;qx1~ zO9h2BobxXp@n1eg%PSaVVuV~GFvuvVn4MsR>P+o4k_Ho7jZUt{Oi2?FxSP`t&YK?> zkjI8zPUM`;``t6-j1l`FE^>~1#6D3&3S%hsCFpcGx@c1?l)Phc`u$s)M&?I+>B{>=b%M$1Nzn`w0 zbM6Kc4onuB<0Q$azLDAM(KBARSvw;h6tObmPm;KIYe)k6oG-6W?Xvn77*T&+Vx!u_ zxQLp4d|n;}HFAp=^pIj3t$xTtkfqc|eOuK?UH3t|Q{!JfbfI>6CoBmZYp9F@U zE-E$-x4j+Kt#jc=PvR9>HsJyyCxLt|6`%4y8zdwRJ;j$c#wq|$G6#r^U+jR6%~+u4 zY=uP<56tXF?dJk@u`z54g~^cIC`07ggFAP>pj1diz>ZPVm@ZxHJo=PKVKOf32=Hq; z{B8weWjVfGzwPYi>EpQ#0Q$Iul#HB$XU{Wa9+kg-^Il%@kyYok{0i7V^OI81bT8+? z4T|oJm=gRqE$t>LI;-hZGj{Rv;5l#$XdcW;J{`X_klN2Q45MR*R6XD|=z#*4T&pZ_ zMB+$(&biAt2Os~4j-vkN=t9N^wj!_cv&~c=t!jEi+8K8t=!+7xv z;mj)YCR79(iCXihCb%cc@zhDh!a+p0X4<}R4-Ykti_GhAB{7x^tYqQ+aV+ler7xNL zR{`QdgMt#daE=xW-GSW4!Y8loSFK&dr+qQ6%Y%_2AY0!p~mn6xyjzP$j(vCCglSsh4#kuYS` zm)>c|QhX%BsF=|(bSj;`C=dCvJ3czXj)t*>65;kDI`T4C>?i>aLt(mUUSfz4Y9S#s zK&2o2ItS452LPzhC@K;O;m1XyBB_g^;8x9@RQa%8yXQ%oU+?p|F@P6@@Z^va1fE8n zzMe|vMcOz;T6NxGlHt{sV{$qLq`8F|YiPz-`MW!EFixa@sYbiQTTKAU-8-9vJBzsSSu@KF>IVOpJ1)=`R^#N2r)O*vZwU0sv%V0^qLDcW}M)i#xY zsM={N6E(oGGnhyJFFMD#;p#pbN~L8l6Y2K}Vh!b;ULZp18O7b z`dS*IEIe)%=igU0*}B^_ZY1MLs?aa{Z9Ubc zbCab~vgd0n`kQEZ{ha$tZ5vuFe}7LeCq4{JNAr7%eQL2C(e|iHp!q1@+k5NHcc&*| ze_V8x5?a)$BxZlq7^wZez8D^N&tW9};zv)*hfudY- zXkBdM)3k++_Xtf%sf`4z@{C(U6UY&=(fUhnwBrFL$4Otw`@LDWiO&YQ)u<{+UkHHlOcwGtkhO zfU0)ym1*6LUqiFa`Pp>b`25LtIo8SJPE*H>YBC@@$;-}D(JU9=&AhKvz%k@6+Sa>k z%k*+AVLw=zFO4oaVse=skw;AvUtI;l#Lz*3%AC%u)LgfOv5&0Ara#j>>IfhiNP zzNtgDy5Pkh`>gNE3oB01F16nyx8=S+-^zDvzz00X^yunJ;xez6xPEXs@-JUc4W~L( ziefv=^1vU7UYB@M>wP!VL&heDKBJ%J;XkL(XC@qg6EsA!@C}d|F*o@kN*e!`M(7^K zoem8~JFSwfI8RAO15m6KrKlEK!_`CohV@t=(6aav6@mt+-Q}7JdI7O0(aWQ3%=ETW zKXi`>k!XQIFC_vdOLLuJ(EivW@9Ga+C}wUXKhQ5N6q=><5FkG^<pX7hUTKX7Ugq0`ahf0lkaI@1n*i z_5AgV!A_*o4mdf}KwfGNP~5>rkduU!07-xxI||8W!P`AOb#e}sbmpIIMFij^qjX@7 zO#kAy$dN!4gS#V@9wR260HmuD9J*Pwto1If+o-4cy-fz6 z^8qZ6(Ue6lZAHEuSfMP``O_e$-Czhg0PPjOhG z{}&9NJIw>TJ`sYf;fhZ-nY!>m3y&alJR%G(h0l5GqX9N+&0eluq-iZ5Yu@LWk0Us;LseJUjT`c_oxk~om`hcNv$ zxlAj{iH(D$fP>qY*FBgC+W!Eiva~BtynfT$tblz*%lyPta@?Euus2`@e%h)x!jsss zP{3UeeF4F%1b=vQ*En>eG^xcdz$8`wi7T`2ouwRo3XTofhw#oL!ht&99viBai=Ks~ z$J?P2p0hcW!G;C1FT4tWXw@k%X@z~i-6%NI{g-?&Lom6+!C5?n6h+&S+*9Yg7vc8) zI{*9vJI@+HGJ)+BweNK(D*TQ-@k#9E4){@py!i6Z!q;OvZC649ci3s(`%gdYrr%#u z*%#;i!%IhcxLkWhmJ44;)`0ck=fFM->6fTab6yqJ2XLoO8p{&lk(-DP#!%+p#2O1f z9@5IM_rEZvmo$JqKFsesIq6rk!SQDKrDL^Es-${q{EB+(2?gQFS88WK!-QsoJbWWy zIji*<7x9^=&_DO5=UZ{nxN#E3CVw3EvHp9!l7Nwk?;`uKL;vq0tFhbhUniwyuP;T# zfE+~7-4wQ)b3w}wDDi{?TXXd)+%&|&)WX;x>gc0ILQ-h|@%hs>>ds%}^XEKy6q&dG zps#y=1C2PIp&W=Dy;@WOSlUPEwa?FJ3$YZh(9L#5FcKW`GIDhB`fWRFrhRS3(=2FD zs%HmBg8~VW#uz0wCLiy{UaPqLcm_vig z>cy@Cxy$brl$e$*aHxZ%lblXFG9Mi&%@KEWDH6J1T!|w9W>Gx6DcQW*{Br(4oG8i?6B6@pZCut_4u)nqoh$8{sIiAQu z(Mf&AP2oPouWx;0g!f(-{vHKpY4`;#5q@hu(Xx|)bILe%!KR^Uq|t%zy*D4-3BoBP zF3mlTT(#`+OG_PIieeUulBQ1`t0*Y-jN#Sr|WS`wkyhJ1Yn!d)IF4q{=}yasX;S9RLt;emvVtcfs3HzVMynMY!VgK zUIJV#BO)xuYK2I{7}cUuOq)5ht!kr0!r&YtX(sh3v*ENT4`r6h);ghuo*|thtC2cd z5!Hn20z=Oi`>*9ib}FD-x)fjI6~Q7Q#ERy z>;D{^tZw(MDSi8DKlQw~mHa>=J8Mh540HGNUUyed!)ePLpp8sR|9f zF2pjcxAbcPE0R~26V7W$w@>kwb%T9k3505A(NJTtpH63-w23*9#5cC@)Y_XFg>Uua z=!otf4V%Tu*5vI~)HFQ_kS5R3TXz>vJUPQ6tEwn-L8@TEgpX6P>ch9@NSG5AOp0Yq z)0G5`E`}ss>0_M)Mlx&96~4M9BpdD-`-2vMVz(TjmK!@;7V2XmA0;sc4+&u9Aa z1T--BL%fcjdUS+-L^m;*m+I@^L1(%+4iE2<3QWNF<<)y)tH9@R-QhO5;pV_?fph)z zQP0V>cx(MvoAz7ZfJ-w|JMZ2l7^w{vGQC_WqNY93nj3r7_1Dy#GqY#6f4hhhtDC%X zuAiD%GZyTgUFW@LTFooPt7~$z2X?Q!!t5Xnnm^UwP~kF6n%;32J^mt^QutF&+_UE- zQnbqG0nHD2$)Ceb6FYK=yHhz!4H9*11E)^bV@ktgyj0vyM&o~D)1vH#T8VcZfeUyY z;ax0XE-Ci=%6n~WcdIv_L0OVY@@X>_ZR|jR?e0b2e*Xx>M%K`{EIW(5k`f|8UT6Gs z{uPr-*=`>%40N7c)*Vi|YCO77_mabIx6W&56VQ}2D*Stc zjy*1<@^+1*QQzwlB)7bo`3*u<=dzpPwR=GEBgvnFQa+KA$ONk3Sjt^0`QAcc<2bo^(j%SNKg#RhB)8N(y)y-HNVmyI%i7^X+Y6ydhJHxxueVs{oq_wPTyX@!Vc!M0N5i}LA%{|kD zgrF9eY<-N;n@E~mJO{Z9d~MJC;_hPWjgCtqU4;6c$*nj1~ISju@CuK-@SR% z-oM#S!qX?k$)-orm_KuUNP%#<>crf%jy<-X-9H~E^uXdwYhyUt?(e#f?BE@-aas?9 z0kW4<|5rt49uLL;$MKoH?6O$*%{p_Xb>yaXqgh=T-yY72)m!nnWND-2w zW8HESMJ4N~+(#6m{QUl%$2{gSkD2+*d_MDjzMk(}+5oyk%_l@r-|4!Ch&&zGv}gIz z4Qz|u%}kkUMMe(-g#$L<@JLwAi7%_l7SSs@86 znhnBsZD}P-MSbTjQ<5GeAKPtDep03c8COcB4Py6`2 zQSC?V-7S`yj-8ClT3)-+pij8vWMlJ!7muY19WkJAW$)e@lWNV_`@eUN0)`z`$_=`M zCXa3wYM7Mu>}E16-U$h5|Dy5MwWg5ekEc}PZpq@)PnF*-upDQahOvJh2^kl!Z<%$i zH_>)+eT252bUUNSvUKa5l?c_f9l0wabWKerji+T#v~?ZXsO*&*r_?USS9L#*cwGJG zX{OO|;~(0;rju+FJ$a3f54E3h?W;E)b9=JLw4S8@AZ5$Kx{~kKVf{y*P_0dxj9LTk zN$2pc%E$WpTRN;&AAC+N*52A5!(Fw)dsmz0U$zr(V!1xOscvRTFK{w6=6U!A-% zoYU|$PdWI^-}G&Z@^C$qKHy3SvAxXKb3KV_s?u+fA|3qqlcf3~tFQ`UrJ*hDPrCoD zj_u}lM)arU*CL+*t`qjjA&L=_!BGxpUrtBq6h_TD9A_oyCwl}IaJ_rsl2WIE)!$b8 zUPizo)Id7Z{^-^|HKf1)R=ZQiRQ^A%M}U7Z22KB4E#K1gxw$jz^^Q!`YF#y@Tmwd> zufY`-rY&Z4u-!X>@?8G`Ep+i@Goj0YHS0+~()~Ln`)eZ(w-u@=iW=K1yUd*q>v2Q$=s??8xdbP{j@3Ho7ztVJwqv>HU5$#-!BY>UdzVn4+5Q5uWSn>3{HW zlc=exy0IJ5(LYv_q5OWraj6CIf)f!WK4nkfG7pQ2P0cPuz5p*2a@P<`SAT^)Qf|*H zCA9Aas3@x%+{sYQ^vx-H{H(#Gq^VFXlQ`3aVn0=@T$h(kc+asDe9z^C%IV!ZWz{d= z#%FKR3q$dC-F!8CY^vPe1_ad;!dd`oRZI4m?W}PU&x^)k5=jVPl1RINXi8+dAF}wB zwK@I~7Vs8#dlPfv3==bp!v5V|eupa(s%#c8K-MM$xGg_OpSb6^Xm6`#O#C9-YHa)X z>@+RwES5MJw9qj7o)kxyed0AxH1N;}iAw#9cCsx##I1f&a=PsMjX5n^zdr}??_2bhI`O=)Y-4q5y|vhI-vof+6B2&AAMRf80Ov1uD{QPNTk!v7GbXSIMeYYk zGU+ZT80?%Ax5#-7`1p%BIML9ts@F0J#vI91gZc*bOAwqlPH04%`HHf1TM#p%Sc1LD zx{&Zz1$7d~v!L>=<#&Eh*2Xli4SCqdlukL+Cl!JokWLeKK@A_AKHdLi%} zHA^U_>0EeeoFi*n$r*r2)0S-EzGrNoLjw5YijI^W^U|Ca3R_NoZZl*@EL3_1#99q+ zeZpOgjitq{U^35=eHf;&%bl^|?4tgV0g^+Pu5mHyv@IAHK6je><$Te%D$zsDm_(+- zrFJYSeuhD261h$9VMZSwu-oN&f6HAzacGF(hP@(NlM`WTM4{u1QImigCGx{B?D+u5$^`Tr8GfI z|H&PX_z!_%anYa6Ki*2<6Xd3KNsxdK^#xYA59t0d;+>rlJ32`I%tHg>?#U4cnfhJM zlcI0B62{Ot#9>YG%^zAFcXnr|q$wdo@qpgXLiYk>0H9e~mcsnxsDz|?REQX6#Ido| zFbGeG{2Xl^JTcU2H0wqpdkTfjk-~s?+S0`$=~d#~k0=rh`rZ3yV~~GnOn9RBCw{6S zTkPqJdz3F6S;YW%KOMovVBqYJ>Jn4{bsUGtk0afSV>K|}?&SlwzMX*c<74r3;^IHL zmLv>7$PmcrwGAn;loi{JjdrZP6Bb)SV0Ro7XOBV~i+(R7KZ0lnp=}S8?-eI(FSO6( z8Nv^PCCS&1G%H`rqCw9>BH=r*7-RKio=Hg5YWRaqEKLGk7DZU+%m;l@<7q#wUvx)b7Cd3&-6 zu0vK=N>c4vZFa^cC@EqdqY3*d9r`LuXT{^5RUwi|5Y5SMfTw4RKvzzik&%>#Is>mb z?=ahPmQ@OvOUjy}b5>}1NyBiM6b-%N2on5_MaaNcGHLE$QHMFeu?hWKYAU|4v-5vbh5PXe<3kct3?&mjwd)4BZz$oz$X z4DT;Rm+_KmrwKmX3-vJ-Kc8Nb+ydCL5O4$H873bG8S7+*-KIxa36J1+oF@dt3v;F1 z^zx24u6?YZclGR(3I}R^9514sNvWrai#NiHlbdLOJ^ul7TFC6$ zm(>=fdiyLUxyawy6;r9hXFAt_OrFLFy0ydt(DD3uIdr89d`Y1x;J)% zRr(vfG*a3y$U(CVNTHS>d@gxn0bDz0aj9{HFUN4+D@n~`@Tb}1I2p^yB&don=XJc? znpv*1J~L~%fHUFutr!e{28i7KqOg-;F(F76&Re`1ka&oL(XhpIW@7@!;GfSnZ*c#y zeFI^F!!I69GF=v&d#dtt*h$-Qr&-022(S_68Y0q4#PA@-n23UZp))zVRj?20#B4WI z8@^YA87$z&#T6$i4NI$uD-tZOjLR30w^Fd0wvMWJB3!|K(#**+=BG%z7U*+H5+pTs zbFzZsenA{2ys7Br%)CjRko%JD-VgWAW!?BE^-iHXddx#>p*=&)SHJ=xOvU)_cxDmd=jS|YI4o6B|qCbhGgI_3Egr&HMQ|T^06!D z&T4*HPhM9f0^-_Wk zM40MLbYIblDpey+=iOsovxL}ky}7KnL<{@bBUs#@?v51Rsh%ciin%hGzvVPQf;5}@ z#0x*u+CxQk^3wX;9}5S%C_b8f3}(dRKyX)+-&Kl&eJs*rnc~lrE%UQf=l**eMBV#G z3kVt(f=;s=Fzu?t=uuGD10jP2HcV5K>9dW*Jj>vkn(26s?$p^02)R|v4oWe|mo}Lt z1dlW=R>M8I#(K;00d?bj#Oti2!@G!H54!GBN~fYaJ&6*gI3l5bynq1-553O2UX;*= z8^&Kc`&QW0kqGC-mn4Wlyv#m0I0qUJ>br+?)Kj+qQ;7QdfLGMKI-!#d2LWQ6IK*ZaV~w*M0p}!@fVRWq2czFke>NI08+NbCD3dH%at=l5uSi)<#~PW{H~K|0RtFU4F=AT<-xNu z+oE|CV8RL5Pw$&QFRK=bSC|u_AM!AyZZw=ooc}C_i6q8Cr}l20Tylwbx*+dF&w?7M z__{Pv5X6*c1{@xx4~gJ%aHjuet9C-(JoC%@Tle!F1VsV8%QE$GWa zZSj{|sR^w`D!AJbD4GsV$QER$w>pfRVyXdf3$5}oxjB;!5^9Fkn3q!hu;J(JIvs6_ zV@8tv_qrb;f0&&j52Ha+`|qO|^{@mAUFN_6AgPebl7W!yshuFBXT_zOEBQe}ZPMG6 zpskLS$#z>$%E}f}6(@VE5w|MDAw)FBlB86>pkcNEnhvnzL7tu#!`mt1^~R4{jRTJq zQQVy#p-5@)l{=#Xa^g+DmFfSSkCh56k~&@Lc^Wm5dwl#knfNL za^peV2GkY;UUwvO6UpH*-4R*cH%m-;NFW~s3eZ5IiBfZ^uK(0x_&1Slt?>kdm*-kR zfungV4Pau_`g(R;^*pLc11!S;+Xiq{)Z!wNZ}oRa&6}oz!p^mzAkLJZWXeqdMT|^Y zkEBF2038INYyo(WK|;s7KSU_81YqsyNs9pk5k18PsQ4{p^={YIJYIlb6&eALo?31| zoP`QiICm6u^ak*YOk1kXFqc;&ENi%x5N4{=LWNbveFdQ+epNlmit4lya*0%L(>Ahq z0qLq`b`Qt0H$#pIJ-S#D>=EXeAn5+9clE~o9gh8@H|r7)tIV);vw#@O;*!4J`h>R| zrpAppy;`QHwmPwyc^Sgp*Imsyh^A~o=6P8FhWhT_K`-N~#B`>0onqnSe6P&U-n7dA z6Hqu_0J)W`lf&wJ(ZXx4zZ0byPqZ0%AuYa*8Lz@wqGES%CwhqkO)Fy#BBRrJsDCku`Zacr zvE#>(#@^ep@F)y(OsdoPS=rTgz7-_#_L=0G2c)U-OJO6{#VEtD#2a%gm%}~?#WFh} zV>hvhLRy_yIzOPM?p+i)pmc;LEvdRr?kM0 z((}J!n0c*{>A@J+PHN<@^DDP={7$2!r!befC;mI_1S#S!{zb}LClQo~VzMXx)8+T8 z=__=~A?Ht|@^ns99Zd)prG!|_w}}j7i9!oX?Q9aRPBJs>f>YfC!YWeBE9n;wxE(cF z5SGVT8@Eu!>}p_N$m9H2na?>JW#q;zQvSTy>r?TC-h@(=eO1!0-So#VoYVG_UuDJp zR7_^Uq&z{o1S|82K1JCbPbSEHtU2pqtZY)gntk(WQmSgSmfPp%zZnFr5%-!mbu}r| zb)Vn<<%}bI@~t^rH=IO6e(7N4*goWD>epr|9hd3M{({)F38sChjEKv>|79R7U0+wn zuco@m$pRd99y~cUzQNr5G>-dpvOW>;)tj35CT2k!jwodjMRQ%so|-C5W(of6mtYs@ zjG3LCnmx@T>V%odMp8;yDv`ExvF?SyNMz7NE5QT=#uvuFCY29IZj81qL_eSSx*3}Y z6Q6t-6W0wTeUzU5{UU*2H|2*j>n7G0?K#5Z$&aah{6i{Bo7TtgKtpf5$=9O z=Wbkck2C}IEKXl{LSWKyi1ukal)#*SCs=ugr*<%&ITI;|3mx zNT=!J06v>pIaGA$*{|N3=f4ay&pnz|@`k%oC&Px%k59}>{+?CMfjQu3h{}nx8&v`( zbDHjyl;du7~IEUZAs|vcc;~`ZDwPD36miE-nXw93;;{#d*WWpS0gF zRlH7nQFLjCf@Flgw>ad{h(Uz8d=)ATtY+qlPcvmPo)5bdOAHhQhFK znv}wnrHW@)k9OFu1?ImVgc^vTEtxOo?a+91Is zJ1&m*7bEz4EtixSAw`F^eyG=q)5@~BD7~U8T2AE8quB#-un-jmVH~S?p0dqK`F28O zM4MdReYqYFpoqMhz#4br;p*$!RnCq8F`p{Fl^Bm8wvLE32HV_B!x>lcsS<(%73HsR zU1@=LZBd5eYf*ivcH;thrRq~<7IUq5JMa@toK*=tW?OltmS3x8o^_4&CZ;g=k!Jcq@47@rBc_j!NAS{PUWO9Rlf5u@zj9uv3 zaJW^veKkJEmJ`?ulB6Erh*MiBN<|V%xC3FMhLqe*szDL2BT41s!{9&v%4{r(@7qG@ zP{7CM@1)H&{#z~=|4&(ru_5X71pabGfp1ObqOHR)qcFk|V~RYzPG&5DitKhhNi+#n zh$3ed`F*YD+|w46iYG;l-CSCXMsT+ck-^nSs#?=MyrrDtJJs6fSLgTqxDmup~LMLDeoJ9xfFq9d40;S;0 zkMQLWzE3-~Pn(7Z#Q*krJJfX{C^=|I?m^I&W7-YbMVyF$j9e|L=VA54wLf#^R}_9l zEo-oJb6s}m2#nZ~2Gk{S4VQh4lR2K8XV!{&66|(m)%$@A+4M=x=ptGG)7i9|D=6?X zAfDal_r%v-liY~kCA+owOULOqT3uq(((~^-u2|-qeXZYG`+hA;l2QSG{X~KPl{{?E zAv*6oB}IXfnvAdCOt5V5m%-?KSS*bZJK19ZQ8*$cYP$TzRM`(Ft4lsAAaNI2Emz7k zhMs)>Q}J@hOYY(D%)5$7X4;M;Y}A#SrTeG zW`|;{Q7<4-TKZaEhu|MxKw=jRj(meGW;GJjH$~@nB%Gl0lz?@*1Wq%R$8V_=7lA@_SOx^g!9ae#Xl;w@agM; zsnx%%qVD(V6tC%jo9PH2bl-!4V(cft=DLFS@1MOLnqEI-C(!8R>(kI_<^ z*S_aH#Fqgm-uj8A#7h=uK>3J22>Gn?5fK>vd8h}Su7ofQe7HHoR0d*>socd?l8pF8 zQ2e$YB&eiO2ap|>l8ugW=OnEC`OBhNbI5>Y5`!hK4gI*ZtUS{fbu1CZouk09b%K=NVm$v-L(wC#F<7|e)@c9pLqum$cg7%w*FC`_PSxWIhC|^t0QoH| z`@jK_2@pt-5e{a$ymS-&FhL*EIGuPb$Lv8A{7u8O)L-!tIEZnTz;mXo;t{MzicMoB zm8C~9WWh+u=;(JRRlIVX53ju|)f7HQ0YUvS=u7Nj_%E?B@h9QksqS15k_O!p!-Rcl~o@W<*RUta>*H-xD5s?nVGOu zp2QJpoRYKgy$t-X11SY#k%fr*|AJ8TqzBILzi^>Tw5~NTJ?r!JsJ#g!;^I2+#_0Ge zK05eEkkMiDqR6|06{w*-xw7@))_Tg`+Hwq2Z5A4W$ro_=z}6#4-1X?bv#v>zcHhft zO>rQd1vo535G_`IsuXi^t~6fnR~f=i?v%#KG?YUdJnh64cj`;?}E`ennq0Eee z@xidTvS?PeE_%B!7CqW3X@>3<0~|>ke$t7|b`nE|va~O!?v1!6v$kuCLrnK;t;45o z9P_NR4_iGAgTsa|{osg`3hTCsW6SxwYC5ow-w}bN{XzBPrupeFf-G*qAj}ZqO-` zREjoYGwv}hV^>2!!0`fy;$ZSZlAbna;Ghy>3HA*||MD{Vx*Rtu;ntn~wYSyG9Q=nH zPjk7^YJ^TUz~_4lyR@ObrudkNRaZX8KPv6i06!h<9PUxqsRE|ZhI`J9|BQehpK^uAyzv`lxk;>>@{V>ITla^vHbcIioD#S)g+ zUh2xJAEm2qX_H}+QPWEW_c6i=(Cy?6;_;U;mLg+yl}@SVLWk;~#%e#ovLfh^{`qq2 z^OfWO;TcO@#48jf@5Be%L}KOlrQF6v=n-_%TvV(Bd_7vj@>#)Oy1vp{SN6zgN?pFb zE5`yS4L(;^2BJ_p)`QpE5QCd-qN|$E(MdU++C(za@DBoI`=R#Ei~^fKZF2m^Ik+j} z=`{l~oIS=7bn=&Uv)Xa7>Y+W;uu4POZk(f&J{*a|=-!$897Cda1$;Z7T{pr2XtfXN z2NY`fiDEb}<8c#!hY&>DRJ!AFUNtH?Y>0&uPJ&RcSC#HmK(Ln4nbJE|668b6*zISz zuU)uXO?*|R{(R+Y6&|U^?)JGc*Y&_x5D;jyeE5zaYT8Z?1<`4p?qc=;LOwys^!qKB zOICRu{K^ng>C5!+bzaojl;e=@o(%J79+x_ijKXEj7CR9Uib2W-mFE-%s=hZH@g}5t z;G>1-a+yjx+a*VCK9!F)M9FB@I_5v|DUGBk@8VRbXWj8?|M*sb@ zD+-V1J+&^kq2xD?xQVPw>_$Ym6a4T3P#>mWSjNi}F++ODW3H{o7 z_xB4+`r?2z1pm%A-Te8>;S%qugF(5P^`a1A>gg^bV_hEP9G+^Cg|W047<^ zKS1aX&mOn>w^p{(^;KiKYrClN7uyDO@=1!~)`x#$?+M^%w=^bD6N1Z9y~kwJf6eU7 z{&sjP#O4%qY5tVQo?^NF4Ts%Zi*QeVuQ=lJ=N2EXM#fSE-`nHmZ`*vSjGiCiC(xoP z>tp}M|MEBKqh)DPHV}ZrX&l6}Zd}o+cp3RF$EUX&d>$WKHtLR=;8^?y%HA+qH6>R; zklLfr$}%uH_nPSMNSx2jv)p%tCU7sa_;?{7!E#E)FnNx0T^JnyTVruc%X!;=t7p(QXq=HU#%;yX-DbH?Q}Q&B||D)p82GT=#9+@mY;a~}3L_;I29QB+yxi)OgnvH}0`Cqyp*%%tP-c|J8D$V&$$j%0l# zc;rHyz2}XrM%D~;biM@K?}kp!E-T6aPGH1CJs?FEEZj|`X;L1}9)$xzQBqP^SHiO% zOrFZ6{t558?%1heg#xOJ`sP_lNnkS1rM^M;tOtk?Qpno%+DmzBGecEt4A7!`keT z%42V0eEx3caB30GGLs1ZFiTRRfe$HE5}4*lgjqdIE3}Q_tx03`NPd7j*}NOSyPN!{ zC*4;T_=lz*eNo{TsEy~+SZ}h-8-*IaW35?W%^24F? z5eS+ww+huojR?lbfD-m5O2j-9Fi#`LMP)<9G>G4n1dEpeeWegWT8GF$`)qwWc=x&- zv#oZLok?pafW^rP9^I1*Ch7pplLQN+rHRsy3ldqLyfo${gj>{{)`!5AN3eHsXH03i zx0^)VN?^P-#JIBXp9>+fOgW+u7{i~UfkFCUsDe<63=I~jl@Zp&&bh0>@Xck{N_>sK zTeImQO5jeC0GI(7!U;M?P8#7lt4(~MkB6@dJkYQcpCe2A&%#p-z^3G1HnP8e5GF8UxmA>+;r56GiBK)=)Wgajw9(NNW@L#78KLiV) zOI6P#;^{?STlqydXuVske;SfUedEBqxDHvcWa2P~$-Ia%f*gt{$+=YIa)D*h9B8Go zdC*Yx!w8;?2X;=!tTG;)l}DUkf&=oX9wewMd8`PNT{NkeMM5tFVAXX_Jy?h}EG_UM zAU$8Km!)2CS4JulAtR4C-T3hFjGyTdhu$h^@2sy+1A4yY+gxQq)TFmhl!J>jc_?YR zsYKb%-nXv8>d)=^_}qF!Kvz|HbUVS&R%UM!(Xt_9Pkf-)A?qda*mADi5P~b=xbNM2 zyhse^#@~K*_erNDu{SvTkGZfuwXD@h-D|ci4X;GGFV9t{2Rc@o2349vf~W7X{^|z0 z7HBAetOtVPpXzDz@>uKpStZVL>#f3K%wlURaRF@Z#_?{#C%DhKQ z(qjMxT>J)8XainqE056(LzilLEadv`i|{xy4KW*x2+BqG3Jm~2g(0viDDilPX*Cv{ z6RZ&Z5F|W&btvxHQik*Wk=ntaT#k3oW;rCnAuXG%2P6a3l-UE#{j&N`HTppKl@KKg zz37z%GSJYAB@|zjq%}(eWn&w_VG*6W17gN`Ihy);fTGame(#ak&%ArOWI|ZK)d&-xkQ>7 z2@WFyQbg?H29LBM7(I^A32tH+I_u~C!nCH!@KLdk~cYGG=~X6s4s`s^Wur>fY)VN0{w+B*SYJ@-uTNuN$HDh zx;0P=2-0A86#E6hGt!g&j;8(3Tf$^apdMY9kpsR@j@Liw_FG`@Mksc?oQH`5ZOOF$ z{*{3P+e3TUa9_;rzA@cF7n-|4uCUUd!DU4`hti?x+aZ>UgVj2{|2Yq>cwLr(djEc5 ze~gX)BRmx1(&gI+{#Zfg-b-a>#cg;3l|EhUe;ZQz;ooi#40J{EzDbgio_}CPCdI4defAskBXch_nTrPI?m%9>uL~WIsVXyb8;Qd1L`-M_>ZV{Iu zo_EGmEOM!1@3A9WUziEN`;}5LHuW)kJ?8hz2(FgVbALyirqoS--`pwb-@|@*RD(k> zJ|GIl=9|YJ;YPcw`nVaSzyTJy(9jasj}Ib0mJ#94n?5}M1%<4BBzsCzd%L1vSHwmI zDdG+lGM7AVM~$S4FdLXuJy)Exw3vJrG*Og$sW10ffi<&-qaZEd!|~J)DF%mpIe`Cj@rY6pAAIn?uZgL6^D^;xm z59bY(=8bITPhXoiO`A7=Hg7pNZ@o5uhV7f3(l>{%^Osu-!*cwT|8a^(P5P*RH9S79 zOS5JsjWRG^k%p`-vam}STi$Qq1KEBAEBy$u`4PruCxAR5L8RV0*84`9U!`VT%KE}# zYDZMIu$O4=759rOdqNTnkT=cluF_(r&0_Yo#oV;Td(Rg02Nw(179X%J6)P>>yEb#P z$l#PYeJYs+uhR$7%-+HF=O?(kPX z{PATmN3+W<<_(AYl}}REU%#ffD1KXE#T)@?%WsO8C2GD`!`5b$*5+*1zFk}Uk+!z@ z>~L*)aBX#MZJlj>Q)zumbnR==iYyIwEz!?8NBj;`#LBnc{M2_JR}pMMtHbEahyAcy ziOWrC2JGyc949up&TR4oZt|sX3RG_j4Q-07Z;Gx9?LJ%YU;A-kc0G|*TM9QG?CMtc zue%{E#P`jHJOn!#xTTT4rB%J9Gqk0*zIBRy+u+2u(V6Yjf!n6(+vab#ZY}1lTQj7G zq=%Ja@07xrF6JH=Q{HjQ%?oq+bs9T{4^YJazI^7lSK#j}>A!uefBOyn4p{#k$i5SN zVkhLxPFUcM_uD%!k;9hR}-o5I*{Gq+V^}Pq|e~JV5>Uwsfs+Zo)ZF7 zrg!TS_M58rTZZ;uukXKQKWII1(0=BiGw`50{oq~oL0|R$y7M2&nVpr422zL-EgDu| zMAf!+hT-Ckb@vrF2`^6kn>+LGTj0MR>Hik1|1A&wTV4OR&VIOg;&AKC;nD+(dpG{5 z7{MimeQf}cNE+QsI6cR4&r#`~^$#w=Y@3R+%RI^BT7a89uP|@=JFhK)0f(*7RdqJe z+@Zy=eUS$r*Y~0h#R#@R)Q!QX0jW#@cb{`4GIdgD$((>;kFrBZX5IVu-4y$|%=)pz zZSEJco75NMzj)No-Nc<_1vNgMKt%PuyJ#Z8AKzL{>A_PV~*tn#ZLWSqN^5x^Jt?G zQp7KlB=QUsxinhy5JU)*B&2m?dzZtr$3saGUH$`%H_KMYWRQp$xaB=n-w*XSRfX8O zPAGWPkh#hYS+n>Lu#w!p_NA7Yz36dOX@`mrws{@p!B@{cb!oa0_PD+MbPE1e&ab14 zdHq%I$%e3f-Zc(Ue1|-mpD&PC)To6&=q_InsWtjY&}eIp@aVL0O6aV)5$yTyFjKCq zwzbrd+ggOb2Q>A1#kFI=3j97tDmohrdTL4e#aU0f?7ADYud2G`D1C~=coTbYlKrMI%AXSAwX zaHFl;ai zvfKdU_|I7RBe{==4>;hGvpf(E!?fE%a`3cJ~uE#&B$Jk~-v$A3@A2}O;?OM$kT_PF$ktTqW(G?9V?Ytqns4brfa@I)#eu)D?D9&2`L zjy`zv*Hn1s#e1@MnULJH99w^pAOMC=38KT0G-()#j8Uh6@Sx$=5r4_BaC_j@N!S<3 z^8M>$A*tw`%P3~s7|qZ3%h^77xQQ9#Xz`_czlDx0e(_FD?FLi?UN}RI z?tW6|sCUgP0X${dCze%65{_+Lm}@soEM6mo0v=i^YZZk%U#DMjcVMuxhTmF20t13C zB+~9jM^T9$V*LEh*Ck?(y#eO#o`1uF_A!&Q2OWt-NHB#qX0P?svM|AE(@4S=W0v#1G@TaRQMPF{lY!#u1v`5(eX!ISvB z=>vdJuVbEy*2WQ=WOn665fDNGDrT?b>k!YNC5R{*KEcxxQaEPdIjY6o4JasxN1R)a zRM>Z$!2NsM%3ZIDV)HMa16yF1cC%`jJ(UJ=@*2Qkwus?02wKn@V&V=0;A#$fr$oi6 z(Z&ziualtju{amwh{O<^1jO$OJYeEVnMk8Smb_qEBm&O*os5M!0qK=lUU%ZIcZ$z4 z{1cTaho`W{W|E3fK!TM4pRie{!MC62SGu##Hz0VT2j@8$fsT`n1zj>2C-O(33NxYz zY9%N+TO}JqB)#Q_;nV6$C@j|!u%Ht$ekrT$<}L*baKnMUPvolG7_$c_@1k{abnev2 zuG^v>515y)Jo>lSDUk&L-yUY^X_Z!3AOIMipTPk;n+PM)wM@*u>DJLH853MEDYIkd z7o3R_u(X7%v)lo;iBf zd`|co+IaH0B3g>}Y5Y2Xd||y78k`~W^;LSadFxRDXxa6v)ft2m`r3_mmK>Z3rLy0q zl2{uR$o0*fu+K5z^>LT!+cc8a>*s+NLg_G^Exj>bnt1!U*4MwHnmn@T8stJUqoM~u z3Pbc;Q(AhsatM_gwh=dUIeV3`xzHhEb=|uhKWf0QA4L!erG@e1QW)$CZAlH z|Jh5+&aQz%Ut0-?5FbzDKY@&CwTz53u3a`n3X)`oUThUFrwPkpNSS6B@oG3 zBC$rNc94C7{Pksa$Gh9Sc_0Zw(9_lsZ(dsE==`mdDp)#zc7os%L^6v{&{cOoGu<0u zVZl{MbWV zF13FTpvlodcG-NS3Ss+IOZ(R~=Da5@GP|#8S7F=XAJ78txsLLYBLGv7a6 zkw#iRTiy+6ZV2RxXqbCFM`k6}1mKQd%((K29=SmwcwPpKAFqM2qQUt5b-%g3+bSAQ z@x??yNMZJ7;lGmb_)I!nFk!FX?~S+b9}bw-5Bl3%gE0PKV9Ig_&F+KuwQ%_~q-xmQ z*12|0q^1DLp5Bah>@g72{@Tapl(O^6@hGW-%O(+5pTu^3grGM0G*K}LhJk(z}Xh)4z z|FuCP9zOfGb_UEz|6VWzPGSB$JVSb%{-=^1{wy8d@GPkI%)S*8X-ogxJcM*g*YzZ# zhS?9=)-T~^4xKKsvWc?|vj4TR{TmaAXc_vekNamMoix7==;7ffp?}mN7+?vbF~N8- zhrBq@H6F-Y2gL~Q4~1#dMAGDaR-lf`H9`D67P!l({tZ$8B@r;2)tF)e^Lty?r)$PV z1ejY{=!OaD`*1oxoo$^8V>e;np|bA}A8B~m;lY?61h)Jj@)z5)HlD0}cR7sC+{e); z>XqhRDXr8GbG94l`{Vz{RR5*h{_EI)CF3H2V6br5SdfFq!H(zrU7m{r#zi=`V^o+p z0}b}Us?MNQYl4hvaD$qC=Q9UNcKk@A${@zU)eY3=^}qBQCRQdJiY?k`lQ(q({htN< zI+bn9n_Ph7C@kTT>oxy`<9Nw&w1sUmi2c7MwDk~g;3lkkXgxF-t`(G^i$gR8ZkPn= dTH%mfXNNbOgZSb0c%}?I%P9V{1R4Nz{s*pG7dQX_ literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 7e5bfde..e77057c 100644 --- a/README.md +++ b/README.md @@ -100,4 +100,6 @@ References - CAND_ID Candidate Identification - [Candidate Committee Linkage](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCandCmteLinkage.shtml) - [Committee to Committee Contributions](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryCommitteetoCommittee.shtml) -- [Committee to Candidates Contributions](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryContributionstoCandidates.shtml) \ No newline at end of file +- [Committee to Candidates Contributions](http://www.fec.gov/finance/disclosure/metadata/DataDictionaryContributionstoCandidates.shtml) + +!["RELATED" model](https://raw.github.com/akollegger/FEC_GRAPH/master/FEC-model.gif) \ No newline at end of file