From e431f9e47e0488f467a223891b47c972224baaec Mon Sep 17 00:00:00 2001 From: Kristof Roomp Date: Thu, 12 Sep 2024 17:58:35 +0200 Subject: [PATCH] Work on optimization and simplifications (#16) * make input streamable * work * work * fix * work * final touchup * add missing file --- Cargo.toml | 6 +- samples/compressed_minizoxide_level1.deflate | Bin 0 -> 231855 bytes samples/skiplengthcrash.bin | Bin 0 -> 322344 bytes src/add_policy_estimator.rs | 210 ++++++ src/bit_helper.rs | 1 + src/complevel_estimator.rs | 158 ++--- src/deflate_reader.rs | 3 +- src/deflate_writer.rs | 36 +- src/depth_estimator.rs | 274 ++++++++ src/hash_algorithm.rs | 49 +- src/hash_chain.rs | 638 +++---------------- src/hash_chain_holder.rs | 395 ++++++------ src/huffman_helper.rs | 5 +- src/idat_parse.rs | 2 +- src/lib.rs | 269 +------- src/main.rs | 93 +++ src/preflate_container.rs | 274 +++++++- src/preflate_parameter_estimator.rs | 81 ++- src/preflate_parse_config.rs | 2 +- src/preflate_stream_info.rs | 10 +- src/preflate_token.rs | 15 +- src/process.rs | 357 +---------- src/scan_deflate.rs | 64 +- src/skip_length_estimator.rs | 130 ---- src/token_predictor.rs | 64 +- tests/end_to_end.rs | 2 +- util/src/main.rs | 49 -- util/src/search_signature.rs | 185 ------ util/src/zip_structs.rs | 237 ------- 29 files changed, 1405 insertions(+), 2204 deletions(-) create mode 100644 samples/compressed_minizoxide_level1.deflate create mode 100644 samples/skiplengthcrash.bin create mode 100644 src/add_policy_estimator.rs create mode 100644 src/depth_estimator.rs create mode 100644 src/main.rs delete mode 100644 src/skip_length_estimator.rs delete mode 100644 util/src/main.rs delete mode 100644 util/src/search_signature.rs delete mode 100644 util/src/zip_structs.rs diff --git a/Cargo.toml b/Cargo.toml index c6729c9..4865f8f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,4 +35,8 @@ libz-ng-sys="1.1.12" miniz_oxide="0.7.1" [lib] -crate-type = ["cdylib","lib"] \ No newline at end of file +crate-type = ["cdylib","lib"] + +[[bin]] +name = "preflate_util" +path = "src/main.rs" diff --git a/samples/compressed_minizoxide_level1.deflate b/samples/compressed_minizoxide_level1.deflate new file mode 100644 index 0000000000000000000000000000000000000000..55136bfc5c763eff69874ad0edc451794e7d2821 GIT binary patch literal 231855 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%0AP&a z!QtQ-+Za8e4!hoW>i}`?q!+3pZ~uY8t0yD57_=#zJ5`^_3<%ubiPhb*duY#up~oQe z)G5HVpI8hea7MA3%(m{Pm)lwolAGf{Xm8mZiXqxQ7&7<|I{v^K7>n|@o*0j9Tf2;* zA`foc6|F!3aL~^6HOC(ZK}Pp4qV>q*5GPN43S%3qqUZZEo6VIQwqM>V)~!y|96BPr*(>{5wY;mpzNqVk}T*)s&*6PwWY z8JLLO*fU}(V@CF^6Jv6lk$tr+R{K&++Z-$3YP9Sd2TUZukT=Liakgp*h~FjZpXc_{ zAq??D<@v&YQpm;nL_={HFmv-ia40ic`brJH=1CfK+v~B4r=vh?F#Jw6j|(Xv#MLmk z3h12;deK!AY6j@NT^{r(%<$&zQJBg#LeAIcMdflGvYfArSn9RJDN(1b0eXO)%C{n$ zVzSq;kDl3lW&XxMWm#{ey-O<~p{dTGR~gH*unzT>oI6LaF=d|@ebe_Rg?Q>iC?b{N zYceFXiTwndP8GFp3BTQ{Z*StrnZQP8!A57*@E>N4@+~~|J@iwuSOvxu??j-^u>B!T z=PRKZWr)5UoCZE&rv8vbAQOds;(v>+Xe+!?z{A$KQ8>%>nyAcIbgUYCfpFuRsNc$M z`tJi)Ex$kmAVeo*XzK0o0Cx)K`BLI*zFu>&@534@o{X+qd~OImN>p#v0fwgf5V>o)RhEE8w=qjtG6h>U8 z1lCW?u#ajyl?GkY&%|9z_xU))tFX5VKr<%Wjn+MWKxYlSInf!_Z!-N<(AV@gB|Gy| zz;!B^WDbnmw~G0>nztB8dgmjBm54s(}~%4%VDVvol!lC4lEYgzyHn~VX0xB-V8u) z8(EA4iViwPorE6E(LJ^Ud^@88FEfftgXLIy!7xyoh~No-`{O62qmketwyLy3(D}fk z^+*9(RBx~|eKu~0UP@S0DxifC|Y2jO4B1vD7u}f8D>@riEgw^o|2l@n zWxwQfhf1V#Oc<8?S)zRo9Qx00>6Sdf`EH1_xvbY8D%#V?sXgg7xq_bOfZt z7j_3$1C0a~2dg2nKjIf`i?aMJ7#Qc;VJ{*V(0OMaq=LRo47~MgX^mmAmf;UJHztBN zfBidYUm@!g@(H!w$u_m!rFZhw4}ohrQGJo=h#HaJlo%$QAI=74Ax8)p={%OW9URbJ zor2EqV~m;3?68n8irQyI{b5rcwfNNcj=!*JRny-t>wq+PKTKm5IIc?DS%bgzvPtkffpfVFwz-77V zG=z)Pn>o7d9S@sqgrlRM+33f?lt!n0Dn<{toPo5 z0^nN!SO{vbEMhEDfP-Fl5#wtBtfTOXV$O9%=$S<*aq=4l-Lgg4duwo@Ea5BGK;E(R zCZ75&3P$Te*1{NH`4?28+KMn{Eu0mM9+T;l+m&cB?97qqs?t!giSif6Aic@3)4Nyt z(N&{98L6F+D1ykBM^}vv2|pm=tSBEe++TszJ%NY}hEhJfr83mwe`geMlV^3Vpl3O7 zi!8~2Na1CyXY;fY#vd-7DkfJ$0L_;-`lSZUtfm9H>zq2s8vgQLL0_8&L+>dn^626{=+*UjIB)Uv0@wA)kpm6NP;#OI$0QsaR`QlndD*YM+WaUz=dnziRSnf2SZm zX3CdM?U|-K%=(Rdeuwf(eA|!nr1FX>XZwyEmhU7XH3`B@v5k z%AZ7i4DBCLc~gy1`}e5)+5{o5C~vuA8sm3o=p??Ty}F&ZwOjIY>PrU*lk5%E^euq- z{jZvpoq%;?$@jcj#WhUl6BxUY?cQd!#xQjaNNN?3EFV(PEn5cWuih`A7beNMNlTxn z?hsaxGi+J+eQ2hXugMrK2TS?gS$iG18x~#l9ctj|bwe1d&hqqM@Qlk&%Uwy`?Dgcr z7*Bs^B*WFu4?qKz+fcEvHHfwT6~o!5R??|qvev-h50~o`dHTnoVLCI$&^^WtA`P$G z9A->7SBw$PP1Q(J7_F~S*aDnt!l{Wx-WE<&ud!;qn@@rd=c%VLM9X?&jqy|l6-)j` zrxdEOo`IHG`>a*p2fOY=UWLM$*_K?cFA~zy>v&52hbr#a+WdKRelS~~VOaRW89LLg ztP`!clnTLJzUSTE9b&jVH*4SJsW!%#AzwCH-yp^wXXs$n{?n>I0#kX{bjO|#CtlJD z_hDa&Goz4i!5H|8Yf(1kbK0JY;r!K7}O>0VSLw$o#+uW{ zT6)H7d#(B>F_R}RFK~yUMeD&}uroo@lI?1+8kB>P?ySZBkgG*KF85kaLSJN+B=owq z0oT0{bd9L*5`0=#$QdmIE(e!+^zwS zk1+g+r}rn%$z6x6N+CaEIX4G-^fwrR9)ZGBO{EMf9*QJYs+zG7^H(;&T7>gG+T}4J zh8njkF!ZV@uM_@C1$VxuPM7e_s`&_X+r60A`QMA84(GR$o`LfV2+5!Wg>?$R+cFq~ z4lc@V;rQjus1fjulNkw;Pur+u;6Ec;*VBl7K9qQ80|aPE%tPJ;3p{AaL$OH43-$Uw ztTlb^35?;UI5iSjxhhl;UN-i}m&N%*f+hUU?GTJ`PL9f5TIREQ?84!^z+lgb#a zyL`@2+GJ#NBVv*4bpG&~nGDlwoGSmU3WoGzwcRoPaF$hMx*|%xIC(i>InwnCvMKse=!I3kl_1GUXS|2 z5ag}8=f7de_dxJ{!5`a{&6PxJ_h_5#LnQ+PG@WF?aH^ru6|XSH(8kj*pm6+%^cKc{ zGa|jzKt{*gy4GPHu;P^kdlG>i3P%}h^0dwYbCfHU;lj|QYSey2<}SAi?P;_28BuaY z4NVwQz%qOW`$3JNJy%#RVsc=Fj~?;;j~d}^ZwE%Wx+*Y27g)Jf!?88hzi04iFC0I) zhk+M$XCi2^u&fHpt$%qC6VMU2>D@rX?}{op1oNR)5-=|&Gli4|Ef`;ypRhOHD#>l2z`$6CDTuHkb zfH-VK^?98Q<*MAt=#S`Zfax-pI|?b9&WtgUO+v2Lp&LfKPq0Jn#5o*o@CMk2gmd#4 z;Vi7?Z7c7BU{*!-bDWh+P?9(UMxEa$P!#TrIw4c~Dhv^eyq*7S@jk(l_tVxXlzUkS zf<^c8>%8wD*scyYr(`O+d3p!N6b=rXR&DO)lltBBjRa2b=cz>~tfi$TYI{X}R`97= z<=eG=!af+{E8fGt&s(Ta%&^GOm&EFMH0K@4q-+C7!BDEj3;M%G%(K}I$%GZ@F`WU8091At`zgzUM zvqxi*Og^mQ0Y78aXLxD@5HaSQGB({Es~N4Yl29tQwg@FEPuTh2m+ zhhvAB+D_B&Fzv&kr4PiA#Z(mRj-!L9xEE=L|4bpEn9kcCQ$$gC=t81yX5T1_M_w@O zH^&*-H;2U|2c~0R_%X%^C6)qxDUaM$~zj zVmspiuFWeDh+(rp)@GBE^G}c|iOSybjFmHfhpb;<}qfHrYq2`46&DXU_M^4SzFFy^DFtIeG#HKaD@U`Z5}@QLfhS zVvNb0r5%j%hf~9SUt^~041?y$JJ6R_u?1cxTC+tEtz0YvOCF5M>-9RdS43-j4EdHN z=je+J*`xFWPgi+)8mG>iY224;H%Ixyd(8R`eC6&^#sUG*RnelE?xOfvRy$4P?_a%+7s7&Zfgq*K06V4i) zL@l(V9rf}w*+GjcU=%hpQ!a1k)CFg*~dqiVpCveSHKd8KdisQu{Z z4qN>lN1cYH7nkqGWe2oMOs1~Gx{PZ_O?%^^eC6OKid%Z(wMVmWl~~$)0%wFp!oifI z4ko{}UOpdnqI$xp?>6{UkKZ{B7B1h4yQL?aewW$Wr`C_{V|iHGA+k_q5;3{kIPg*+ z&lR^G@%{X$$lEYV`$&laqo?UHkVBQ@sMmUsQFMgGAm7WrHNrkJ#Nhv)iKg0pPRPu>5&yH1vW%hjwBivCpj0)y^h&MIB3T@P7A>?;HM>sN5Bcyrx1hvf zBWgEto04U@|AIT==K>4U*Zz;b>>VW8Q1h{4Bk`}>#~Z?p7srmnJ1 zt`os|07w*8^&_nS($wz7Cl?L`Jar$qRJ{=Gi`FC1A8R@vvU_5@crZD5$PGg;44o6LaK+S zF2XaX;X~PG?%OcUe`Q+GKTRyqBww-csE-Kld&&r%zyb}Nn``&_KISgH+zQZjux#X$ zF}YhfYB|BTs5O-vf<}M?4i0|k`;iPqXb=fDh_|VN*v>+Ck^3iO2!NLB6Rl&THA*s{ zvufpC5D@ShDFb7DVNX$6LD6y07<6wAA?zXe^fo4Ir3MVEsGOipDn!c} zAPOaakCG>LA%AoCfFM%XnI0p8_8nueBpyW3s;4p2zeBO*F}(#3G^oMkK?_G?+2y^t z%lFfnMBTt#h4Ukt1FU==xD-whc9Rr@3=1j3x$l8cx`(g&DV{Jo;%8DRU$c_3NRx1k zi|QhIF+7&Wu(pJjHB>p$?S5vaeu6Llpk(K(|A#8^=nV9q;&sM<;Cv{Oo@2;r>O zDa)@|B1U*P5ECE4MC%61j~$ahk2-~J-wWpRqyG6sWdrht_&YnCf3l$40RcEaBDD{m zznooeN#uG&IR8US?z5cbI;B^Hvsg!dN@)itL8QfQs?OaHTeaM>ubo%OuX=OU{{{%q z;(pN7B4`AGXhRU4S(30YmzY)LV}fZ2Qw9lcw25etP@ zdV8Y=&~-E+@10ku35fqmvozDM7tNzfZorG zpx**SJ&zOtYXA^(t8l32%?c{qs^5LKgjsIcvv{mi*B0mPEHE@5AR_RXLIuv{0Q3|1 zY!P}opoDgJ5l{(0KN>GW&j!?z2L;l(-zdUH0;agehU>llGL1_{yKKCVbCqx_$3T|D zEVt~?ry*t%jh6|Kv>k<(UHvV;3tF70eoXg~=>BLwQfq*ux>L(9`&+)IT7cXJo-mz2 zN>?iAmSg`I*BtYG#ve1rcN=C4593-HcOa3djG1j+L3v z=Ly%+>*BJ{c(By_lSi8n>Spa0zG6SvA+0o+xFc9`5Vfci)h7z%d9)|h835cI<*94Y zf|Acu*99ewr|6eDh4!q_Hd^vkvv#ABDo=kMYdDgL^jHq~&V2>w!R*Ca6xm_4nzB^S z5uK@S<&zA51bkzt1e*dA+dSN)+I?kw+LM&NsOHz~S2KR4a6bCi=W9V8!g4IV+I#rT z{yF0kGz30`6V)5yve&H5@D&7z0`b^sAH=lj9ecw*h-t3`nN7#^~bVI_>EV+x<1eS}9 zfeiWD>yG&WfU+eQAxR})^0vQ3ixbOZh5}?Q`JT5y!M1F%50>5>7GKEuI-^=6 znGVI&I^wxQ$Zn^?P;dC!*&+79vYW>XcXT6A#h@QYzYuj}?NCS#&LFq;YuEwZ(c=N6 z>K}q?C8~ycp_qVc0^kQ1maqZf9RYBs0xENn+1%FyU`7Fl6o!}^0DlJ{QJaoxu+EQJ z-}c^#jr@*;j%&4yDZ8Wm;adLiw?d}On)dDw4djpPJtZRR4H4@e{_$5H{oT4-G;v^$ z*!q^Z@ukewjK$?MX6?(O^)OW|IY%GUJc520;@#I8`MW)lOs+D-aBY;(vCCR|I12rg z#%}y4VFMupOJD!3mZ2?;{HD=!z$u=m&&M+s*%_A`O!*JeED(v>rh@&Oo$U>OK-5}X z|I?6a7)1oNEQ*hf%7U$^_R2II`bV{++{nM_HS$IH_a*#0x>wt*9cko8pPq(O!l(^E zK$7U5QBR_vbs5^>X-FZA+K3wZ?MA;{jr>dacl33wJ*xc!9k-ZvdwEitts7`iv-L^h zCaUd+u;Tpw7tQQj7sPJt*@yT#TH76yFC7Pr)oyF#H|=fYAH3Dbm%RNpK0f#-YVV=2 zAGI&P)5x2i=cxUYzsCGc>w46Emn0UG;Q9F&dm6mIr+93m(p~R`E zM$5HAJ(L)x>LIGjK9k?yA+p{DH)hnhosF_yb{_|9ZjQAeSg}8YaXE{ph$)j8nvE|k1wA9l$qRcD&@2b zSO1bw6lwuwETL4P(}N7DY=waqg@HP{Hk}5HTPuO_2*YItFdiXH_pqB?a5s;x|CB(kYxfZSTDAULBL*?bs)4%8oE6BxtDUkn)$ zsz1o;f*xAL!&pCI7pdk`W0CiP-O461rofXJlh5$BCwbdJ^lmyan;T<9o&nLBr(jZ& zjZxihts%%51p%YL{PH;jIaxuf70wsWCdf$&5^y_nJP^M=8Up?U1GiKer7B=G`%bul zx9um`NWcPiBmV@6CLQ%Z6!>i#VMI2f{vZRxXq+03^i8|)o<|tCFfLrv%D_MBzhvM+ zzR26&fjr;KzBLAPZ~YWLzC6W==26F=TPZ;={c46r+p=im#84zZkg^#Ny z1M(mPd&Y&S?=u(&0VieO4Xb)!Bv+k@Fe%ghppD;2IGU{L|GwVU&s)?Yiq>ShHnVJ<$3$sGw%u4{23{#`ZXYp~>#R>xU z@%%mm>+&Vu_AD6MiPokIv-vTRmr=U)BD5=$$i5ZE%?WCOgkg=JiM*hy;0l;mMIxI~ z{XQ!&RR`u#mkcbJb|!;uwgC%y3ST)BsUF0eiDqMeMoSL2I&uYBr-r7Hk2jspoh8?x%R zCVLKaAMbLmzUK47-dioyZ@dWS^y_aaMK+@ZmnMmG?h7Tja8&v1KQQP#c`jW>9x`Pw zyjS(L3m4?#hkf6>Z)1qv7fL>t-|hVjMTMGp{&>{CFvbeMzgr{ZGs2nNw~WRbN@JaN zpBhV*PgMkxke$i#+_~C?`{xwJJg@ah_%n1 z8=V7e)+qQl5sBS&-ptw(Hjuw<4A!{gm&sLMY_G#dQf9iV{FD4_N30cv=D1ZZGyzG)xTFb2@na8Fai zGorvHtPO_xEu34#+U_5nk{ryhLPt-2(|PySfOGKrBy}e4IxymPqWpJoe`!>~0eiO{ z@NR-XHvk9h-7E$QH+^>SeunuCGwlovtUWxq*Sip9fnqy)@tbKDRc919=+Y3OZ7;{< zNZOn5?7?s+beD*=`j?*mN|ArX+e_e~d3z~vh_wP9u%n}2Ij4kS&`VF)`k`2B4Efg1 zVn4)omqs_E-@8;gX_IzfE3M!&c+EvRuYom0c?~QBpO#(+TN1g8`(RgHpV&TNV!3NC zre#sE)-7A+UJZ+zNWYC-Cpu&7DCt1P`@H8afr&fuKHg@OPYNZ6Vw8ysuIms^B$Y{y z6i(T-Nm@)yY~6+RltfMw*X|pDBK+|+FNB!)*GEGPsBdnZUasYF6ez?Gl$Z#sL2HEj z^*Z6i`h-)?+h&)0BN$_MVI2Ce*82G)_NrSBg_1+iQoR7@#b;7Iih-9BgBjpL5(Cu> zF#dhdWBdz)@jW&Eo_>0B2M%zb7p;4{aHbUQpLMmYYX4S8)y{Mc9)TpD_0A_&a?*(6tFYhiy{Qeggdtz9C(LmKDO$}c)A+HM)||LEcZW& z6e!*cPLVVz#(TmotH%~2WK@ThlpUeoDAx%$269oo8aXMU=%dh3EMS9UEGlt)xtoMx z%I%ix?jm0O7wtZcr!Q6q+no20Um$NG_X*kV^(fMcUt?``Fe6L8<^A*bYDyXOCdVt> zH2t0~9|7CBIxH@`x;$A4-FxqU3IcQhxpDJE>RfVyu~rr2A@46l!k->S>dyNHMih># zbXN~fP9uwV(xgCPPlQN@DZuow@H4gFN0~##%w}fc9kAFn|fepO&8T59m{u8+L9_K{L zV?haVD8bUJ#m5LgC!FJi?|0iI`$rgKmfY=q>F52jzgm$^ldS}@x9DzTk9W)OLNuNK zN%l9N1?E0R_7-ISSt6lizuSBFXOu@9ko`C%>a>!vO|m~h0X|9gy@Bl2npi^%$8~90 zdNmg^#@o`gI46Y?XA9?V1WpBh>aR;mnQ)4JN*8jUKYHcX5aTt$YR8?&P{t5j7=`zZ zuj}v*w1vobZBxGEX{4_H>&q$+e$7{qY9`zE#%~C*{1~*X30lVYw+u%MAKo7?1^#ZZ z)3Ns=)%wT4;Ux6gFec(w{eMurh5+`48;)TI+tt8+{Xf%llu&q^a#r4B2sl20EFTwz z+T-?_o7q-x=Rs32fUqndRdWf{x4132l8elGZ5BZV`hVb!FtfbHk#8xL5bIG`{l`&xYlvdyO>F<6*4E}aHf|FXF*uhZWr}^O}cPS5ZVsm&e12Bvd>%kE4Tpdu#gMF zxFfbV)WJ48u!@9yiJJHR2F>W5?}G5~*SI>6P>m%w3b{?lXX$@{v7B#(t=e9zK11}m zrNQH)d#^VJ)J<)_C2tO>*MPb~yF9K|-!o;ew;J><=jL#cKBAQxPz;Ou?xvGTPbZ+X zv;sP8nH0_}uMqOeFd~JT4y?`0BDHFBc&vlFVBSp`toz~Ma^NpI7Bm~cP#6B9@}PoG z8qdC^yd-%NTKw5H*oU$I!bD_OFpQlo7saw$bvMSc+_E8Gf}R1SK#fck@4D#O#~ z6HR%W5DxYkC$`<6U5Cl@)YaI$Oo^$ zOs>V)?*s!4OwBF((}Kd-7??VOcR>tzzq*2i#?#k?;Pvd=GR)+$qliBRWP=zq)`h1h z8=?jVb!yCVAfp^zN{8=2h~YO2hS z5OxP)hMI>)Hs#VF1~qzk1b2n8URYuGe2Bu0ms@Vqv*deTZxn0Qg)Za{Pe)QCm9d=L z1W(_CZa4?UkRQJTQ*~nWpEfUocwY=;Sq{>H<+zir>p)Z9HU`I;%=`R~m{P7K4|>yP z1@of+j6yic*}}PQk+2Vkn@$GlA&opy76Chr{Kd><-)AgwG3fu|c={hl_^mh*PMn{+ z6YEL9iz;Ka+^TO;Z#O>MSPT9c;;@D@pt$1D6jZ+CO+F1E7u?8wUKY6n*bS|YH?D?{ zmN8l#&1yoifjJg*X~|^29?5=ajtc`;E)ve%dE|RIjH@ub_v=-@|DYyu21_mxts7`z zlP~KJDhhpgDvtF%sNXlxFIP`6x9S>52zu+nW1aFIPpl*FA>6XZuO+b~+!k(CEy|W# z)vg|~2i75OX5I$nXBzMNxczscaQowpYVffuvdJ4&*v_lr#U>uZD0cI~>rZ|(J~)=1 z8~3~+(}K=kImUJ%Pq%1&M0g8yWo=t|0Vw{fFqS`EWO%0gmCUI z%&JED^|^F_1jCEv+)$0(F`Y?3j|e)_J&C=- znN=>d9%C*18pFJ+7vxS>eS-Ea)NZIH5;Pu4`~H9gDc%VW8ZWmK%}R0s4#^fCC#iM7 zNheMd4z^c}x=%nU{iEi7hfc+&7pN&1F!x=+13JY|(wF5_U<)sgBh(se*ax-bMFM`! z&m>2{y5Ij|3G-ffT-m+DEE>--)!oSHrrb)mBFV9qQ;|P8k{Q&Pd=)U$&n9ZE`mUR+ z%=)c2kGAAy%ove?%%bRxR5UHQ$@}qRin?3%3mWT>3SQ*znElz_i%@;BzG%R5o*~9X zy_P5ua)@xt{`m!3mqUb{4ijyxh96JdCY;;Dma}w>aAx57%^It|m!~JdMihVLo!DXG+5zG4neM2Fr5%jRU0(T5Lf9*B52yhvO@~@b zVt3jRmq!tWS+#HRG^NaPOVD4a!EdjzoTb<|-?wTHs}Y=Q5Z`r+`t5uL+y;x+AKO5=;i>$j33XYtdDuVLS~KqG63nq3Eh;I7FoqDwPPky;RuQ zQmcMn^6A{Y=n5f_xb8CR|G`r~0>E_VYC>LJ6XR_$28x>SXJE*TDW5m%Hzr@CXCT}3 zZ^)ZUL`pkM`41sqf`pRShM@vB+zd6Z0UY z>Ly{ygH~q>O?MeQ9Iaybw5q}eA5qHjVev48Rc+R9 zN$!f*?@CtWmk|YLZl57{7`0g;v*N&31o28^)uge(`eK;Vj8&!QnEnQ(FAQDM^x4Au z0lckz+N#QPc$?6st+LM1PzX^WghB}wN=$o0sjxGpqJDdFD~<(-^!qFg0orYdpyqa4 z@-|35whK#vr`olAak(lyAqXg*U;kiTjDaC++)?} z6W0a42$J^v7T?duO}X8)cR|3FLoK&5WZK!VrM1T*J$zgPo5sVXC*#99IXsPzh>qyR zXXOafZm*8lcPDpS^&LF@8g5i9xfExCYoLe?$DYjf{D#=JpDi+-12{zn@#e5Tx!3SVHpV z=y=8iZSYT?$&g}+^&-FWDMWW(A-Qt(!oi#5NI}V!Pvek9JT)vtzS#ToZ$p$yd0nMa zUMa>Wim7T$1B}Hz?;2#UsY^9=`MCKH!gt~xZ=2iey_ySlQ`LuN8vG0V_Z&Kew(eE2 zXyJ5)$x_Rw&)x36YnAgS`+IvBv*Bed|rtB~wQ|yZozG^G<$=k|CK{V@7gemXymfj8@ zfK{2!Bu6RXQaHZ#0aCZB!coi?a8xoW;lp3KUo_Uky`Z==afy)IMb`TqPt*ThWy-&s+TRmrfu+_3@Jobc$=%+o zw}B;cOBaAixTSmvIVMTx?zr6L-SO`srhm267WD|5)na>3Aw}jIf$Sy z7)XvOOyni+;Qb+%dmH>2>j}?NG)=6Db3s#y`Cd!jcAt>fJ%E2}v0%J6#xN#349HL( z^yF>?=S~~~iB}6Jj`LX@OD#U2j@no+sX$&Aj>_aH85<+#jun)C?9aiRR0X>wh=WbK zvIj1t4hyNPf!CmGO`P!>Xt4&`95KJE0Odd$zmAWX(^bt!SY2U0qO?mOUxWCaOea`W z3yg)=b$A=blCr$V@yL&QBoN{r?*vRWU*`QDP(GZKKf*A@^{R}}#$9I+eZyMr_5O2z z!D15$T@9MB#{X zapNJ1VT7B|Ywi;6Pl8HoHTnt}r9t2GV(P56L$r2wVbLacz{drNC%5XVD@)*{$~y1} ze#-7A|3#_+FZ6dVv4b=EVtqE&O5r}MTex#~#T^m0WW3klVa7+qb_p5VP7z2o_L7!c z#)Pm2`z#*YBxKfm0r@$J({{YibHEnXlf7Zywbykt7S2~RNDbTeUJp~ZTmY`mE4zq8P0^rVEjzt3~^&O zwHj+_4p?k`5VU}8UYFZ;OJHfL)^S`uo7}6tmn6_2oZEKctdBuo!N$;sx!w2_krdiK zZy}B8cZmAK$s7n%at|^jj*qkVW9Y@e-t2N>#(Uv7k3LlCEhj=;-Ls5p*VxAuk#DH;NmQ@ys)rt3d|5)bx z>)?!7zeIL{@rLVi8_-bH+KEs`ptYdwKD5!YXt=JUU>{&I*xeB531>FW22dN(ubKfZ zIPqQHYtw_7RR_~5Sj(0z(7$NiOW)ThrUhZfW3UE%T9Z!MhI!a=?LLjCo@I(OLF$fXP1#x9on%4Qt>&h_IUsoL`f{%HNJE;W8xmy3ve%Ja!+ReW*WxC*bj3 zZ`*F{kM?c5SmLuVl?SlJB}!3Pi_sMI!fPN9N;e-d9p)5=N125r#q^qu)9YA%yc%o> zx@@PuCqV+;$E-H*TT3y5?8Rn7>ZZ_#k7I%VzxtZMf>hcDJyj6wJ#c=(W&+$6%=f>= zZ}}JT-FUZ`IvgzbYNFk5jj+eTS68ij=Rx2DhMDdL3y`rdC|#|5R2nG^I?`VPi+t89 z!8#&q%vYiMCsiGdEE1yM83S*lrNgK&+-*tpe{G=Q=X`#xjeGda+6(_+~<9J z3uCLU^I#oc0zU#94pwR~o;+m8?Q!6ob2gTitAO6&?MM9-a^Zi)%*`7+6+sOq^E3Kl zuH_~hEcZ6Jl=NESxPBu~eF=!T)FWm+6+g=~p$d6-7oj+J))4|lUazY96KdmgOEZ=` zq4O@Q9?1cp8odcrBg-9mKIeMM6^coq} zs}bl~a!*|Lk!Ti=hiL3h0gE(YjHI+({P&oc;wYt|;K^UL@@# zPl4m>@^&4hFE!>*Mq>tqy=v<3#=E>uG(4bvjLCHfH%*Fy5TMc+^cchDQg)O2`CPDP zxmAyf5`-JE2IQA#BNdZN9Ko%*TUH4a@0CALZiJaE6x}a;_OCE4wCC6$YRNs=% zMiKT%c*SRgeJK;pRajsR;lzoMZ@KpXE&)fSM^Wxg8e$f>g$P1xraeTN6`oxv{}!RQr=k3y^u(Wu& z_x*ncW>!sR1`d^psGVgVQgwkhQ9*@KF5F5c>bD9$V=FfOvfy5rPdg+Y>H5~#PW;s( zJ)-_u{_pL;JVLBlZs{i6ke86StA%rd$nGi;aAJbIhQQLUqYYQUe@x6*s5eB}aR4PAg2v6NJ3I9MRT1oIHdxN1yHe z;Fr|0Wzc+ng1$mNBOK$una|hn8ge84vf_NKf=kctQBxU5Q@JrSkzDk@I+KH^|0^@G zPau9jZYG;>qUXbvcD8K6zF$Mui@~AH(HBq0N`la;z4vQFjDpPITBCry1@oul0#M6F z&H$=&C2ad!)#9=dLTW-n66yVk2@pwGI9HAl?lL^*g+={Ki4nrVwZUegAxYZn{b~j5 zQ+r>?aS$>Yj0(0f%GE-4!Tfm&ON)UqQ_Bda>WO$M%b$)^?53&vODhnJl1=b&QO3;r z3{QOkO<1xW?ZS_xHZ2=wxl?`AHs!wz=XBLkqvcTMwzE+D;t`|eaOSo%(f%QCYx>ZB zV`%n`A%^|x6r8Bl{|v_e_aZykune3^7`EPa(RoimgWL zLB>X~#J6Mal?QN5P{vnamHLK#u$reDu~vXUn`P77nA~h+-zo>rxI4~>rF(elLTa`T zos_I6q?3^9N?im{{?ovzPK?H9UGfYxu{vrxg_<}GOOp@rbU6T`wtYcIq^JK}4AH5- z!O4c+7jYsV|Gvn~u`r(?SJCkQ2k(naZy`%MjKpy8Mn`aLm-~c#$&`KGV=K_?EI8(U z4ww~=Z{#ar$D^lCgB>fAXXkv>psmG^WOg%t^ed}^dc{=ggTaVkj!m_d`Ey>-jBSo zfNVLpEx{(xEjnZLrG0D&acm#)2T)huQegiuwF8!0_Q7Q&wfKDyv-jiI5NydA$ZGeB z+HI!x0{BH}a~)mlZ?|L;2bJ5fPbHC>ybZ20zTF%0I(j%UY+%VgaanA;2)stj6V6-& zMxW$07T+FXBJdim8%SJgr=fh=arpv@he)U@XHeXswtG_!2Rl?vf4?o{|AbS44Md03 zSYgTVRdaORP*cv)cWPyK>mgRoSo3LFZ%8G*L#4OunbNYk1$g6)wIOuPe-$W9W6d>L zFL;AWm)*cFycIRRAOCD)Ek&jIi?jXjPbtje`%~iwcRRbk+d0PCQVb(paOO=%DR9oj zzlrF>(FFEBvgerwX~xp4y*mA)_KdmaFcGGl1wKep##{rrLu9gA_jZABTs}$XE5`^E z$(q7ase@BTY!%ff3hWg)P#a@bMfFd`B7Q8gAF14;1oN>1qu6C@a0+`5F}SyMLWpey zwtCBF62v8H-x1mo)9<9sxJJmgOxf$r1{UJ{^l3nFqPi|Ss8)rVCI4BtFN)XiBreIdqf_Hu4-ONu z-TU1{7!rZ2bAJL@DVorDn*NV81laxgBGbKSl&L+3yDO{yo#xh-NtX=cX(R>w;(X)s zjh5y5r&w}K{uVxtJ)l7ix+&kW$_jutRi@Qnh6>?O(21gg)1jyum5nJq zgNFusr-Df`ltrR5s^6f9xdCAzQ#x&dL}V3Vp2!<1QI0`44rk@w9{ zW3Jnd`2Mjr^k1KY96m#BkD(1mf;AZg!(^-1Ubk>T@j$Oa2;q;<{U+3J-dh6yU2v`x ztliomoG(HmSRg_kGUayf5oHX^^=f83LF^}yWu2qfSdeKQ1(4O=$+Zkz;(P`h2_@iz zEq$Jlt96nd4@dPH9=7y}JUmAiympOFbLO>{jze)&Uu4RS!YK-5`b1s>7_YI=T2nwB zadizJF>4IcI^~x9tdO@iU^f#&QmUrk%caV1wmh$&CVA8uk~p{XKXI3Pv*|gR+m8LohqUuZ{tQUMY$*4Dy+zm_b`<@cWa_WPe&I6KOwz zAoJilEJ(Pnj6XX2E6m#|drviHlH-NE4I5uo2uA0R{xdbovgdDHlT@*@DD z(#sf&WODR=Jr9@tY;p_RL$Qgw@i1$)tPHp5bjh2A|r! zYEIR&vK?`zu(L-eVP&#_o-5iuCxS|Bhn~ z&Qv^=2VX*VMl!vEKREgMsim0P^W;UyNDlg=w_yT89>`@C3=(pxx_~5bZ2A;j)vig{ zb!65bP3I&bvx??(ie}Zl!1K3)j#KtC6w#E_5!AO**&Y25dita17x`GH`jjQmXg^ab z_xatzx%iu?Ax21^gKjga?2dL+xAD{slqtRSAFAiYQ_=2^UacCkksd=icmIWrW#wql zA~;Um#`2>TG>>B*rnVLbB2|Y&fT@x3P*xIA&Krnw)}2XoJF{dj-sHPOj1L!X)s{<3 zDBhY&2fda-!qQ%~YTryg0FlV|aK@WB*i+|D(it3yr6agN;*Y3&a2`=fls=&4 zL(q}E;g}8`mRmLzjN&30I`UrpA!z}#$9Ytcpd4d1tST`C1642R5aj2PZ5jPr2;3j7 zK{(Wkoqzi507H!cO!yB95uLKr8^|+c5@l$w>425JHU$88^hJuo`kzA-SiO}(mc366 z_68uiRh<)+5wrj)xEj12H_rV>YsDWn$e*A`(LHU!$mvZ9-crvtYK*s;8jp6#E~jd- zQOdq5oKfTFF%nJX=8di8C~2!&RievP4^Y8$AvCRJBEyY*;xo7)KMmv`2?KW>b@0Bu z0HHN_jfhUb7~9xT&cOC^Um)Sx%V$BPhqp~HPi2yg0{gkWK_D@PLH~(3CLoq4 zd4gEtuNz~&Cft}WWXyxv?18-tNkNBOwGl{`TXli5x0n~{@h-CAZd$y@ah$})@tzip zlK2lHlin&iLzS%?)c?O!$Ep|ABjyEK*M2}sZd8BH@BjXtRQ^YqnfrAlr{kX22WHi2 z1H6;C>!61OQFq}&j7NquSS)hx+L;glo_`337@^lKAbWLIP-;;~qrB4?MQ%elD`+zZ zWMZcgEkG#t1f-_ZxQHN)Yp=f(owo$`Bji?r*s>bqFgpKK$0FFaFa2pS%&`e7#rVhK z4+DN7c){ugY4x||mWiRn7$mD|kabFM;h5FNS`8!RrXu0lu|))-qqKCr^&kay&6TT$ zshBJG8(_5_WH908v9c?x4u&Blh*~zateUB*a4bhXfWvSuoJe!1q1l;sUx?p%C%RKN zIxL2$Fhm^{r)otKp+^Wg54(=)HKo8tzmla_5$Z^tzIda01;@sz8i5NG`k5$sgt}Sv z*_+F;uaVR{gj;sXM0hRPZpw^zRIMRPMs-BG7=`R@B2boIMXHSI&_5zVNit5VcwS@*%;2^z&;c;x5no<5w_h?S_GHF8#m=#;|B{eejGWI}yT~@)@sWzw&!L zy&rQH^6?)7Nyxw5g-1NSAGcvGC?&=V`!Z%ZX#xu;O-PB0gmXCp&UWwKGRAU$r0(wJ zzDVyBJo=Py?k1!{7wvCdd|_fUq%TJmm|bKar)QWj6Y ztzwoRqAc9eXTrGs(ck)Uh?zKJQ_PY8DNCOB4BGwC+tEP0AXjYXG{L8BjXL%y7^CP+ zKY)=SN!WjUElD0*_iqVCp_aUR8Riz1>D73|a^Y_h^<9Eb z?Xui|tE8La+Vs8f^t?8GSMX>F9!rA9qTn$*cr*l$y5LbAJi=jyNH@)bM=#g|v0cHV zJ9uP*2eE0nlj4<(F;jcjSc}!bBKspd8<@_n#QgVF@_3*Z)oC}0%p7(nr6a&g~jDYv-arHnU>t+{rs@+o7#s$ zI~0x2*b{ugIJS4ym`D21-9;{Pm$eqs>tpRi;ApR3)&#an9#DhJn%*9VGW~m z8;+L+%IywAM78N%c))mi@t{tfX@cVrhb1un%a@RSzNYMR|7S~KS)+dxDZx=?D`H#| zx4`KPPrU=WmK^_C;QFH{BJAo+S3^BS47Z*{jf@d_9+$vWt`;&YoV%4pI?5trkxhpG zoU%xA2vO&^#Fp8)5wr9y=W!3*H5T>JIL%&ubBM*=rCRcR;Us%848w?)JOmMWKSQb? z>oyFCkm(G1;!c{{VSEoztt~wUZH{{iKBfB`d^+w}d`kEC_*{qSFy+1T!-)6;AtA}GCdnOye6$EjYv137Io4@B8=)0K0vAhHzYRGng8ACVzHy%j48DlsH2;cMHNx z_aqR0xx|y9HYo3xb9^8D$glaMKfq>wmuTHUF7w)j3yL|B>pHMkPrR^%tz($FkUPBL zaI^@@-Kt^dV;gYGIxaw?I>BUDBBU52+^XL5RLdXwTYit0kG^lHvWB0>hKn7ekYiO= z;N4evy>{X;j6lV>uL;gK1E-W@`a3R7#+&#~kfuGhzuK<19J4=+q5a`I*M*p<9lSq~ z2(c`%KWr58MIoOOZv4;v&iXXus5)bPfwR6ZaMl-Jd=V{%{c17fE>w#l2Ko4-Hz1yJJc0>{$27e0{M8SG_51%FuZ%@Q{9EpX_=i}GruMe6mh2?5GZxw3nBJKfaTomY zcVT|{QwHTCJM)(pJa2hqXZ|uit^xjfukyE} zRA0IEqyF~Met)Y59vayhmwT~HGvXM33%5)zwgtj(8msbl@Uw&b?Gw-!6ZXrDLWJ4_ z(Rj9($6IZ`Xc`UX)1@U*jcE5--m$EeadZZ~kacKKJ+Wpa4G<2rP8`}*asG8zzkel4@UP^( z;9nJ`5ovOl@UKK9>ZtxvnKnTtDqRZ?A@8PHTk>)8=|cXDJf(EW*~-T!0AW>Hxkfil zRt$d0eOvNxn{u|UA^|t4mYtJcf^Pn7xL4{KQtovkKotCwdnJ~Pz`ahrg1k`c z268gTI5K$1XAs9*ZrRFD7ky`XMF@EzfVRMQDqo94iua2<2}%J+f4uQ={tw${(SOo> zy&K-Ak&$CKX4t_03E3so?SKr6&W15iIE$`osJ5g)2rI%JXpi)C1i17G_e_VLB~fRN zzAP%|1g}_iM)f-C>Q&*B&T69AWw2*%-P?<1OFnB!(0#^o&a|9cFw7d=0~{hto@C&T zqnag8F#S$T-d-NbT@nqqH%q&n_W_4ct{&@*({$ zG>OiX{$o5nMt2Q&t`quh0X(hn<-A&6>m%k&r)oeX#*DGV?HDr(4y%3*az^^ar1 zE&BnS1j#Vqg{DxD*GCz$+&?RZEcs`h7$RmV@&a2B{2YCWH)KSJk%X@(W2`9QC&36Q z4icU*p%m#k;1)D30};bj#nC~aN+L#ex?*aL{{K?MZrMMul8&35{FsRyHzAS&B?Oju z7bEng3Ed7M+Lx7JyT)V<-WJuXg^jaNYBTM@X&4oKQG|!5HSpS~zKDlQc=+-#4}ZRz zhp(;Uwe$7aympR`R!c`Us#hzKxG0b^w=)K*l>O)}L|!tb@1iO+wnQ<~nbJwx#WI-* z+L>5ejR*LGvrg$`G#gX;y#STq+&o^*yI?;cKyn4=7=&)fFa%w4k^Z{TA!tbHiVL)@ z1&rFru!FWhPu@A4)SHOrZo;gC36#BB8!WeD*5GFgz`EiZBxzQAZ=OK?gCB_sx{rPc zm<7l9heGQ}5Vs%GXJcqA&_g)N2xq8`)JEzZl%1454=rGm*ex2_X0WU%I%RumOPNs1 zxEi#{sA#ER8Sgmxm}R_&d@abR+2TpFJ$40Qm|z7J3k?`WK|X02i=skFNhCs2i|Xwb zbb*0Lnbby0M=8~%rSlZ-qsh`n0iLLbCSXH-`LvE0S_5=$=D>qvZo&vWPK)m|Us7@}{0J`}nL4=s7E zlhSWMNd^K5rW%xmq;Vw;C=>d}jU+!h$PWsG{GGADk-KI0DiKBXK@{Zt;{|pt`pN7A zT51zd{qUgg=YGa;wEcg&fXT$L>|S^ySirR0Q2oW(q$`>fWVH;FhVcY9wipX*u{iBu zffsE;;X!~)yoZN}$epITKlFX|-Y@N&gEsHt=86qjIGXSq#`HsQf0L^@xp;e{@}2Vl z6LvjIR0w;+yxit6&DSVbCZRM(Oo7n`dXm);aJH(rmR|E0&HLJP#%Ncchy10z7xx9n zzuz)?)f`<9mNSi%ygo;Q>3_@R%pjQ=)j#rA&`_3-wBvqLZR# z1_2?o>B#;+diw=pNj@COShbMHzh{Kh9?+T|K++b8eay%^Vc79GVS)LZvYW&%$ zmyU&h>>0@nuc6qXa!Z?K&C`ZCM; zjjlYHeFQ-fg;}YN5{ASh0=1XpwXX=bvOyp%C@o#6+?7?^IgPhfo@DZ0Z)q-z%ct^J z#NDx)aEPq7L)35O_C8DxyK3bLgw%ANRf5iq^rt_*H3@Aq&`hmk8pxesYFU#gz7cub za=?aJ?+KYR`HU`6pKXp@;g+6ZO8Rnjkk7lq9W~sf>7Fr^u^GH=P8FMR>8SGLY}3zL z^p)NhS1oma|-M5HOoX>ZH``{Tdfm zmXpvIA-l{||E81!*%PfL!kMEl3zipYmedeWZ{jJXYIn4ERtaml^n9LPiC(kZvBQkN zoo}wcgE4kH{+aT*Sn6#q|AKPkT`~EV(XwY8gib#syj<7pH>VgaM_yTaHRd%(4`ts} z@246ShXCzuS_J4~y~KWfX!iAy2EDOrzdj{a@w`#-w$XZou@RWlSd41g8%ksD+*b_y z&?(LH^WR2tCXhcGLfO}cR2(tn+x-Za<-b_W&!N2}`+B8O@m5Se-;Z!=zP^wjF#Qc+ z;q78e)0s2@dk+R`Uys2~Z3?4lBT8rAd`6uA`o-ok@%q2>6d6DIP0%s*TOQ2~@qOR0 zpKLYkBOf-u9E)U-LqxcF|CuFNDo{iocMhv{ij4}|D657AI4K2EhiLVmDmkllikoOv zsUSoh>_{UNxW%E7^f#ew(9Va0F)Z1WFH@?vWQir4aoCv_7V`2jmi%_Lkj*the!k9< zm*X;nUdN}^KKNd{1Ll;&nGZ}_`V9iZ(;}teX;D)&y3CZ_G;r!4qy&^}yZD_?p**!^ zQbmTl8&S-q5iDZ1+3FG&uth!69Y=gWHyeU6vDnS}j3wvmv$;**U9;S=^dD0Cad*;m z(|>lBTUtwgM$F)Cr6|I2Zl4WuGtkblK;uAZemyQXn+JL>cPE@+ zIZ?e1CJ|-qa`z%l)W5*(JK;R0@wP-6n|diel5us@A&$1I@vOE73 zTm^qE_XnV%X4t#NP33LND}q&hXjjuk=rN}vG~as}{RLiU<=W{9%u#CfP$wV9=#n$|LD==wX( zK=||HaV3mmIvlv`l_H`iJ06Dh|o5?v)w)(9oul5E<;l z&UV`ehjDxNA>TLaGd%Tuhz>Iz1CRAoYSS_fGYNV$KbL>G@h-X9-b3DO8BMw6;44di z3*_0yPdI|!qQu@aG`mO5*4{lOTCufaD^h%LVTn4hQyNg^_N|b6J_Sfgb`ShgPqfG) zw-=%**N6`+pu{M%eqZxRm^EL2`)Er(lRFwWrVEK8sE)6k0 z+-U6!yyrUyeP8(zKw2=@rZd(;+YB{U&RA2J3QS|c%ewYaE8?lMjz0q3u|D zovA%#)xTu%87~24ltS6z-J?**(1Z0b4&y63jcZ+IJ=XpC;Gdd@#A(s*F1|3@eMEiD z>}O+X{_WmeMFs--Kmnq9bzF9ta;vvENzy$CZY1$BJH)zy5&tS}!jBtNwH?N-@~Sa;EajxASTBZ9Y(g?vHC zXDM>zDaexvcSboGDO~VAuaSiq#aKZIj96GSOy#iQggzV6OHr6YN4y5=Fpo;;71eRa zU3Sk0J|d;4K9RaF3NfbWV762U;(NfDSc?sX!4HFIN~hgvV@jvPVhLpOVjXv;l<51OW$Fs2#RfftYizxTaQa}M}K zb;oHK5n<>e5&<3Y7@cUymO%xRDD(qHkZUS18Y(baXStZBx9y+(TqdeTdQ;*w;g0?; zNE>TMfsT;-yq2RHOJ$Nn@>Qu!qVxeRKN@(+(=d}d%w!^=Tn7}ow(3Hcg$p{s-A_S+ z)K)Frs?VcrxmB|VL^f$gLRnb|4ySM>588!$GlNoAfv)KF3)gF56+o zrrlT4Ty5HiLOeYi^E3Fv+T<_Jg0D~0A$Tp>MSclEFJAaX#thzeWypSSR%1nb;&Vn3 zH!%kUO8E*-1X}ACF8tywo(`e1wiJw@t*q%hqve*;_58bUf}m-)f0(~mz59>0(xwq; zD?!^Ig0>_1Q(}>x{3t*}fYQc;9!C``rk1_J9XleDX}rs4cmPru4+o0Xjn9Z@V2)aQg1Ii!F0c+*+*i@Z{$u2F(y6iHE^|thFxSz14WRNfqi4h$nF|~ z7%^J$WXqvmzG6H0N6%8UU0Gu98k*fT65*h|XG+Ce747nQB6w=<$p9&YuF;B&d=gNe zdH}#6#Dt1FQDIm+U0BvN*IqYpA=we}AEh_o?I*kKBNaEl5Xt0E!iF zmU1^qQD($}SC`yx$agHQx9Rs*{mY48MS0uV;P1Iq&n?~ZdHeNo0DKekdVNaEp;wlE z4z=4ct=AD4zllBaU8Cj0-llrqc6EPP{N@l$C|Yr-;w?JIQcQd~HVI*GEX}XLX9zQn zR=h3W%6%&Umt-m8eK#r(15vaO)v^>UdQ%!#ArEM;1ig%m-kCPTG3u)^jDw@7EALu z-)}_cT|;6OeNow-ZvnK#$nL6yCgoeXZxZKzC&Y6o#?#+Luly+JwFC$iN?+;OfJJ<> z_I*oMSn^6Z*IN+kehZ=Q7pikp(J0)qA*TecqS{ys8)Es9fDIdfA>zZnw8@e^akFo#%{vjHzDH<;Y2gc873v5sQcynw`F%pZ6_=j( znM34F=xEiz(?eiG;PPU>w+Vsnn3 zUt;ebn%zCp$nG9u?}FC4D!L{!Hi9Kj%B=(wcL5%)$jYu_yd4a7^E}i3FvM3}4-`d4 zn}jvK1U1v&V){?Q)5|YIW4V9B2bROY`8K;7G0mo^>i(7N1qr^ zznwsg^Bi9}8FUe8oR1+sgQAez1U8u2LcT|GJak5g;dDEjA-{{(S?;9sDP*4~&_80; zzus&KxAc6YWqBC`0Rt$aHgDDD1x9Mf2d~czjBm+(-u6BXdb(b35YBvkV(vz){eF21 z>51Cymge#F{&L158G(HzK%}leLstyUQx~C=AcgXDEs79G>P$S1mMJ&z^vNg*`$(v% za%#)+^EI%w7;MdSp)r6pA#=js%7nJh(sIYiN7QF|ivHIHEXFVvV^6AQ*=fShMBS-a zkbQ77e`Jj1w-@y_uukW}8eW}39%UB#3RuId@F=^d#42_eaFtDSdE4wkAvx?}5A0!c zbYQJsITS9?&Xg9%YM!d}E9?x2?ZU#{9+mC=jpNnf4vlIR$11W>xw+WLS6l?c;5bj& zo2%{iU)YC+@D*nQbeBl`iPMAC33*~GoOV(P^M)LtwZhY{ApZdgg_^Ot-_2jh$6+gb zc&L!?PF|=pmOQH{&ZogC8G`9|3imdDkbMaaj`tl)9x>$+jKxz9#KqfU%c5~E zyYKwuEhewt+it zZ#jq!C|b&J;)<6R_MSaMumCHzR&-$)o_ZF2a&^EMY+sh<#mKI59P&~6?!@sbE;nGj z3aET5R6fRXP0c=}^Yl-_f9_BC0EsALM!#SFLchMJqvMrO5$Ssm^!<_n&YG}!UO7nL zU~CWc-4h+q_iPM{aY`{x@{;^a6hWk@X9Av;zZgK8F^*~NQP~4vLjA&J|Na-3yUg0I zxYlLKP4=PldHP&vIi7wkfxOeZR_&WhlhE0CTA7>52E5}gZxq5YESmJ25RSsg@YNfE z0k!3q4AN(yC>Qf@xs4XmX2OBW^LLQ>$hRO#uj>Pi8I(Xl^p?0Vw+1BD8odU%@%q=UgZ? z;#=-lwHO|9k16}|V~XqXa(C1u0OGZMd`0g;-$&#YZvJ#+6CJNd!JbTdxQ=Pa;qS4b?#39tMePxdHNny;WGN=Z@Qz9A$XP+ zLj9rURzzB(U^Gji1d?3SZ~*iSU%eTu$Lrs19%8vuL-`YVn%=ZEWjBtYA)cZv4g_G; zb}qdh%21B<73v{7^YeqCiOf0Oh~+bQ?XJX?nm6FU$e-WB#CEm4clP-2GK64&)1m)0^#PxAErC{hcz z5kIorH$jo+GYyJ)3`6tOpJ5jS0j>?)NKdYsSmY0v>cII0a3+6#Hr8j#Cd2}mxSl)} z;KUN60BR=8t8fdExUL9VNFZwtV~LqX(B%Z0L7+>Dpi2m35iPw4`V@h#BG8C+uoR~F zOWdB@a{%*FnuIBOqux_eOI?LEnA-!UDbT?_e?CwB$I(HEm_`K%davzM`00m%ij@HQ zJ`dui|1`ua{3l7WLqSS(wxhSN#smzFJbfbuhDzY#J_Eld{LN8pdpH%vLfAMz4F?{g z+($M3ZHc8eEgNR~ncNzPu<@dEf0akC=*I zK1Gy0H9MIYoVpKjZ-oz3Uv*g}vd1V-6WOJO1E=5@xw&kKqw~-C@sy5aYuw?H%EkJpm{M zB8Y3DeaL4Wooq8AMM{eEmUoGHCHMm$YX1+hO4H0Lbkh^hI*uMhz=|N7YGxZD*7PyZ-3 zmtv32j|CphJAYy@;uQ4B&jRoav>r2G8iD%%tk^#R)Q`b9=zUvZ1oY0qk2*xUpg zS1Tk86f2U+{}i>A#aiIx@+;RVX}e{g9cUnkC3l;0s~1*OwjA?E<%8Bj;g(~Rq%5puL8*p4nAul(#Q4qpRlV6B=QO z=P|Z1s$YPl2>?RQ(d#IuGLhyK?0UjY=mI9>&G}Gc0ylnwC2BC85iB zP1%+E7Am0E%k2}v&N@(M4`?4@+;ZpZ6D&DjuM^;YqG|Vq_=@?Mx#?aRio5fU3OT}( zUnnErfhl-9ulSnfL*#k3F8{Hf$#SsHg|f2ihvCC&d^Are4I)Lj5mIXn!e@=Ue8 z@fY^SVaB60Lzv3ThJ6@wd;~PzrtUyaMJW{I^q!K_kAOiFoCqnD@D*Q1)yTYB8ZCdB zppZgSD3#&qK4L`4Y10veKCUqYUi*-cnk5Zl=}Jn|m}Tx%Y;=Pqt_)n+H@G<$#G|eO zrm+rAw>MS8qubeGhC%| z*b$Xo`4dpbHnO`iREKW9`#4d(V%48gHc%24ODU=g;g;>X9E(*(_1Of)@{Q`qMVEcC z_NY&|xWbI;4OF@TxTU9uunk4^B`7Zfd0OnN82Wbxd1o?FO4Hs482uIUA$@TE84SQN zjQ%Qhbyw@u)th|{v3-m?-Ev(1rKaT;gYoopq-#{1??h04R&E5K*a09HMDszm z6{9x}&@;8?On-wVzgBJ5|DCU(e2Q6*nOu)0YPn@UD~C>%EaeW5T}$#gw!h;4en|L# z!T-4*<-aEX^&tKu{wEgsADN%i&wSG4%P` z{Nzw7&(8~a(6c`sVyR5hMDf01R7`vhjcO?R38vhypM}!UGm$?P@V|UBeuu6f{ zNvC@0ULlUlUxd~Wwf-ly+MOZLfdf@^noqX0ry?1$@A{5Jb<3ooSiB9|E&Dc3FUM`n z5ZE8QK`-XL=vp{4A(!j$DoCzTc+tS{r!%SxJb(=ULInWk(UZdGx=4@rm1@Rl51B=y zJCkd7HY&Q!?5=8Oj$Ut7wA04hAhLVPMMb+= z-_32x#v*fBs?qG4Z+VZ0qq?B51bofWCt5P9H}De)21amLV+_w@80r}pFce&74Pqz} z{a-Lc?&Az0ah;l3dK!|P+WI?A&CyMPuC1D0p36YOXr+r)3Y9DkX7D*77a;#ND=g&n zF}dFohFdnFtOOE{>eWWDBIQ9#ZuY*b+&NtE_>FR&6UO z!KQ&=a2+-z=KTiNLq8Nz_I_z$AX9Gj&My+Uy9hPbD$gAZ&sFm=27QdbZr!^I+z9ys zPC~*Byu7g%=?w;jPs16?bf%9%XvkAHlrb<(+lfr*ivY&tvHd{O43%<)Loer>&Iv;6 zitL25A`LSJj8hEWwk_4OOh;Blv>qlo^7KQDvE1rX#+17p@VAECY9KD-ZQs)DH>Oaw zRDi^lp)CEZ-kvE&#d}7};ohbzcpD|pb`Qj2d!|GykUZNQTx=x1DeP=%VYKAT+*ue2 zkPw9$M#a9U++1usKQ|<38wfjk3T-@!tW6ES)M)}&J)>_ox&m6 zILq~ULhGYFc$sjg`9h|2nyzq5e}+LAHDF7haF1wxQc;oH#ewYvMKT@5ZYm1&)TmIs z_A#ZMs9s|{N{iEYoQN5ZoC?_?EhVFRU1ZZb9W|@=C5ls+K#(S|lL@<<;d$y4glh6> zS;L+EiKjF!w>QP~bx0~v3&>bsWKS=uJPf>NoL`)zR1WmWWv ztXIubbT2GqSER>0aKMy3ISL%$Z;Z7xzFC_w))R}!KlE9(+kD)75sj3 zcUm@*85DmwbJ8EmIcbL5K>1S5X2`|fQzEqXbq}#Yr6dN8fAciHXg;)qELq=yAh=`6z$u-V^9AFs;Bu5~raYA@dNx(l$kQiq?Z&pxk_Fe!8LnWgOem zbiOG!9lO3P*<~JhRmiO(n=2D`hi_|`JfqhZ_ z@OD$%Dg2E>CUiuS*f~mt{bZ@|Eqyk92$Lc>u)Q|K7!wi;%94jIXR&^R1$U#?Q|_S; zeP1}s^(DBKAnhzl+$`MDRjh;=YbzLa+voZJ&{)IYa7a$Z;?DH)I1bG-+!8NtC`(h8kId(#b#08g)3IzM|m3^@s^z_{7lRZ z@`X*$dn=IuPnV1y^+|Y7gt}!265P++m$Z@_&+2zd5T0O zaG_QllCQYV_x=23fMKWDgWTq!nA|$hI)z$KM{9|Z?ay=;*e%?j88{FJInL~`7@yju z_&pfrD@xE;xK&+8LfF>J-o_(13;uK_i8|6FWUsI{)F3)LX1@;N&pL?Ba;Aob6B5o< z<)*tto8^vTvB=KL-AQ9a{fo^rr}4H)r_OZ8o?*%_gx!VRrr*(mtimhq!e6u;9@6w; zLyNyKsbAq%jxqgB@%pZt&n5F6ijaq`zkQtPKV``g7BVyW;TsK#8KD)%z!AmM9bo*a zqjaFO^lBlq9-`ZR`!Hp<<&3nPFP2-*%y7JZNAs!8W2UuC8n!Sw!t}FoDZ--DC};SS zzde$90*jdq_$R`j-#k>|CuU$0qlO{j17?Rco#o#83lvUm9^TUahy2J!PWJ5Hx?aI* zTH0TgFBa(^cw@=Q4ZQ6|p>;R^XTGus_A|-yjfTb^(DFlsG|D5HRoZa^zWN$)jYQzo zuvOpH{F!D*nxlA2MY_IFiZHaw*OY)#Z#X zq=O0aaY6hOuYaofOEj%hTMjKuOfSyu?Bd)w&F!QCc@*b&USWP6G`u+Q#*(oE^MhCe zu%Ahk2|tsB%4m{max~A}O)$2=jF93Ci_5MoZ>~maled+Ih2JjZm0?$`Z#j5s^C^){ z0#UlC=;~0*8ev7DTAGgZL^e%&ga3OLp~VP<7E{}cr~zs9*>9iQg!35-wn=6hukUUi z1IrqcBooNQ<+O0a!y2GX75U{6ABE;51^+`zyC+rL{B_e;D5*@M9+A88$S{TjRKNVX zo5urp?2wj@?v}$9H^Y1tws~Op5}ZM{k;-4npB>2%)e~sYg~_1>igB4WwQN>wV?p zZe0NIKo7rq;>Vaab*rRqncIfvPJq?(bU8lb=}igh(>xq)C*btBvQr#*B^KFaxn*beg=j@8ht==z1U4FNCr|wd-G#frH?b^l_ZJHJa`H7x zzAS1tnsT3cV27cO4Q72uVwPFIwfVf3%P{7H=w#OR<}b742q>*w;QrwNEklEr)EKm~ z+(l4zJiU{r$=*zfbq{-hJL$}z!Ox#0usmxsODkc$q4l?$mTb?5l2a|MCk|ZMBV@a} z)!Tz(j3to>G|MfR2Syu{+W{Dc%pIa3qdHbTt~GkRM=mFig$8!G(10z&lv}-fiw(~f zd!Qi}$#^SOL&09KpG*|;8R6VgjkQzF@CT=j(vgg%z`2mOR||W?L@ZN`@J5l4aH~c_ zyp~(_=>8BKXjH!>I2WxJ#Ec@XJ_37ezyOw`!Nc(sWwk8lYOL{DSmRrpPr}+RUzp^= zH8h;yXdVBKc*v|L&t%G{NP+$OGaiK9ZsYb2pwKcN(}HFEZ|)bn$+>>Y{UV&}sm;S^ z5swP|(-+sb96puXe*iu$;cZa3B^QLnfj4;zUD5G2WwO7|tptYUOs`f-tTJ?#DPWsS+~16pcRvPyKS^g_d`+u>iKx(4vwf#pt%BA}Z5 zWBw(j9DH1T&0I`$EZmCmL#c&r-<)QQd2CI;djG7@AF2DhY$Q0l(mNZfm`)6JU&TTxxat1veXog z)7BsIJD{k--~Ze7^%&g6vHE&xr^bpp|39a%Xw|=_uh;&m7T4Q&e3HKE!Qdw?uK!VA z#?=LlHK^1aS*?5?3ufIpuwUD7RsIkCHVKvq$++#%oc_*=g3MDdT!{P;ofy0e(>1NV74 zlmPnZ^c@g~r=QreT(4`6?iuL5N`ph7ctX zF(EiYq*NH&IIWyTeAx#sDRwp%7z;blW##)JR-`?sDR((~o3?*y^Qng2`K2f_vpS_* zbs^vLZh8qTw=@4&bQgoVdncn0M*OJ->>9$ZA?y()AtpQXY0PrqFU{AO6U-P`*mf&m z7>T*?Yw)(yu_I=hYg;C1Gm;2)1@`}0h9_rs#uu(0tLHjlk{_IF;OjmmgJZ^g9#frbOV?nVei;FmW;@`o;I4kT6*Ay09w#N{X&3 z>}4CLm$S%Dx&0WnJBpnzMdzhKfOjNn8b4T5#NV~9#g^LYxF&ObjVLY z(=jx2=bgmZ;C|PkpXqNw*H)|k&BS<0pCw){j{N+(5csvQmygD%sZ3%+?ixgSg=U`m zh6>oKp4o?)5vKPJRt45@>MAtkCIB_KultBS@DzQG9(4L`BBE^KT+8jZ32xK>_oeKD zr;!_DgKXmqFo=R}z+{zeI75&WPTYnpkURNXV2F=v0q;yW(AQTT@TFS5tfucBpQjHg~h4`JuErZcQy8%~T?FCGYa&^s}hTHwbZk@rud0FtLEP7rGF z;B2^$?*Jnt3k^Yb5LpHq&p&&Xdj#oRZ*gz&Qhc3fbWg!wVX``N-2=!-E`KYJJK zhryON92}GJ^7NTRDG0^_1I}?kioIg6+6SqZvfAfyLmTwUgUDbD+dQ+K5PO-@3MgIHi_rs_~j|u&Jhnp_6zs)-@hHg zTHOzY4Xi)s3h;l$zr_D!(|$*5!USdvngB6WHZ}@OEfnfqy%vkTg$cI%H zvB3EiVKAb0bhQWIr$T-KErL=Y_JD4^E4g3Ew_Ik zY96Kbpk!5X|H)Bg63H|U`0LX_82)-x1rCEeMQORHdldqULpTwl^b3PRh%!17jzD!i zRk`gk##-7DR`e8{uX*4#-qHgof{GqG5&k;20X1+*<{q$YJdUA)xDK294su@rHo?60Dy*l`^D~|HB zIgauTmh(*v{C46~SYj3e>Bt_RVvH-5Y%RGjEWT<%I!S>@wTz$7Lq#_9DdZj{0YN8crstvg%-;l zy&491#aAl76W6vH{%*6ro7=k)w!@@YGf%&OqOh|ef!&zm>T1%>DLLQAVTDxlN3_$N z&n(V463L`?^1Cy_9X-rbC%Y5r!K0f+F<0{Srwiu@p8g~D-hs*Ieu8R|&{)W9`TaPaEiD0BN8T%UwWqxerD&q1X43oXOpRne@-_ zfY(36{jld_W_W?p>UkIi9DbG_$7%IDTl(jxeiW^92qev*+}tBHh8p#3SRF=1D4PBq zfDNg)6K54CaSG_31-imf~XL#BIKz;dx zprufnkRAIwG@gDQ3;~AO|NMxWJq>UMu!a3OthbI3WBsDo`({xT>3@Rh0Amv{EGMDY z^rMv#c^f_v{THKEWb@UyYW>KXZ9PoKXr6wKaGaG9NI%nL#|{SBxe zc+9)xDO$xmeJg6hxw;yjm8THrDK;Cti7)$pj&{*(zP#mCtw1LcXv%(Fnc-@B9H*&W zoBK6YO_T>T#iuQ}MdvZ}r`kAc(4hd_C z=lr8z8Ow@!5}gT+z9E60NM>Jh*oSB4>2>HhxX)G8 z2h1>UZlTYQff0zC;xd2Mm>i`Ci+#Qgt2q2BtU~oU6Mb;Lzk!x#(dqK^bszeEZY4g7 zou;Ex4|Rf0nYR}=@Yn(_RD+~P!~TnSX8`Z#gh#}24}BL{p@gQfAonmjsT4-*h5=|t zWM`o(PY=NabDzOS0g@OEVhf2Fq{h6P(I108VIQ8B7;7K?eDcB~o(VjI@JMp`(M2%Q z&Q+fx@K7+}O+@$n$z)4%z7A`lU#f=stG$Jg07?4GILQi_Yp|M#NFo-83rIakOV+J= zbx%=dZ+DWx@N}K(0W+e6v!k#qy}^6ur9e?5&`e|$k;SUH>KFY)?kf<D* zo-zocSX;9%7^oAFeoAMdf(iG$5@NYhl(ENME$IK3DF#`ItAJZxh&}$YQ<9?K1#~@wSV`S?)KG$ogj3aHs!b(y7fO zkXKx{{_tZZ{MVcLiZ27pnLftP$mwGye}D>Kc`80JmyLF2z1?>rUwJ)N4%C)~LH572 zTAUR5jV78D`Y`XiPxkwb%VE)&gh$`}FZhj#02wVujpQZ8-XxN1sW(Po-fZ+Ha}EO! zUC{e4ns*u!$pk!%l~m})Q?H@|jt;?)0*5skU2_`&?MK;!3Q)EbQ6N^8ew=SyXCMWc zdv$}x3djkX#I=N|G_wgU7@h{blZXV{!p7<4ESEriaHr2wCl#Tr8R&E+kOqPcEjI=A zLMNP_Q4#zJ1V~lC#KeVDnHBEnji4i(QSG^_vG9bm0E>JlPvHd3Fog@zsAg%(?cRie zadHqE#5tR%&qfJ|!wHe1jog_46oyojd+TMGozl?Wj(!c%4`amZU+4BhU{7nAbb-aw zb5Im^M@Yy8VcM_MW>@n{F$PE-0TJ@I{Q+OF$({lFVBj2j9Jk4SdtktcL_Cltg+p{I zf{wi}yz2Y8Vbn&0%6-@{hWrzt0~l-YBrXBpSK5IZUHdBg^(|Ke?nvs?6z{B_g(C;xeL%(>`s=pn7RYTyoKmqV48k34ivmU zzoWtfit*EQ?@k?seMn25t$guY@L>@2r~65a1qrg$zoUV071jn+fK}FywLhz|9DNZV z&|QBA_asIW=JXG0SON6@zEwvMKDt#FVX5V?4k#EQ^#S(O{4#oHt45@I66X=OParx} z6G$#B5J=F@x12hw8Q!KkCk@!?Rf&G183Q)HKsdyP_XXetL{24|r(zoos>5lMPLv=D zP@Av4VekSjBy^NNRQcQ1y>#w{LljPML<&Jg*fik~XN7SXYCgGTQu*BE2;pbxID;Vo zY^umlL9VENYx6|3UY`6+@t|bZcXOMz2y8fPTJkp0e+oLiZ6~5E3O8AfzUifW2N87h4`@E%@qO->-pV%U^`ZD^6w4e9}r15paE{7fnTl8Zm zuE>3r&|OPkB5(on^M61&&U{pez|{~jh2hI^AH!2WLQU9@srTJr!mCgv*3w^7wyYRS z-c9ef*D(B{JsZ2ne0?I78VD``W>lL^wRz~z#M*@b(m%S%T0~#Ty8*X_V5i0#`80S* zXLt&U97gjvQOGQ@FOiCa!KA+p3KW$fhmz9i7nvwXuAxKxL>``_3m%@Y&*QcC==Wj_ zUb{x8*oxP#)(668479}i!b#~W*^W}n|Qhn;}@Jid|V`x`z-)PN|auBe|w0nQw!@$gSy=TtU@>1XwdK92;xH3 z$VLvjKg86$A3vo8l6;?}J`PM>0jAV(k>)oHWK)^M&w*J#yi5n;tB32da&%1W7N+HH4fxQ-BIO$BY}HqEb(<==a0FZ zfQ3UD2fd{jj%0oV*&<~A*#o{$^?6iRLnnV2$ym(N?bK<;S!_5SAE$ke?jL zwd%K&5FvC3x$k&b?za69y<0W%d9t~(^)S74=fb+Y*RkXB;fT;EUqg|ZfFmltal;^B z%eh)PB8##z@1lzV7N;i9wcIag7WTb({Wflsp<*K*vyi9X1d4Et5baQrOiq9V^)Pvw zez&wRF>r{@a>v_&Frjy56+}qe)VnW)f=rxu;L%{4x(8GsLUMiSOyb+I$bPJ!zW_}X z1lLp%QCa$7`4PulJgr7Y(?)W8(8W`r+a2D26o{)6CUpDh4+3^*+rwZ`O!D454_G}P ztjf*?=1aN`79{Hh9g&QB(+DAXlriJM;Qb;}#WdbFY7A1A2?J4i%V8ud-7o&4AqW{Y>IZqQ0y73o3WkdN2rh>8x3}t|O1m|C^VF z#vb*3*~x1t9a&@Pb$rASK4MmQQi!K(V9fbRm_Vfe^&wm`m4#p{FuLJ*e9{{Z*TB-T zWKV8*IF#Fi0id8*WRn%>GWlr1F*K~Yy*%RQvOo~Q9+vwX$}qY?f7O0C*T9a5tf9RZ zzV})0h9kb;(58XM)Zd^;`6RU7^Bh@lLa(;mszG8C*m-QJ7H zuK**(0nE``P8grYO|GIjfW^e^&|vGf;(Gc$@a4w*H`MIDQpEWpa9a9tY~Vnru{@4o z2qcS0=c>)*ot_W__5pevx0zgyeo$5_ldKe-L%}jzwXnSKmdCNlW?<#L!rLtq;ckRe zp;YseGKP81Di?@*t@Y2QqqC+y%1ZUuI#4jTKPEy~D#SYxo` zREDP~fFXgr=S$uhLs$`bG68MMHx5S$F=fectI3f?&M>I=)1i#z9ip3pP0(pK@^)?|EUyScqJjZ*5`;wf-`MW^ zIog+s?Q~2*yM=b5@J&2X?Z7rlCx;pe%f7Z1X6aaZji58f91y24xz2m`S-|Z+q+BJ$ zi*1spZUnz7p1+mo!?bv6KNc~J;ioiRw6fe~`0S@W{21DOM8}z<*LlrE8(#b~LUxO+ zSDmaaeADYp*?lqF&KRWmu0Poy`mVq91mVo8_VyvUle-;*S%VaIeK&+0234;IzM-J7 zZ`0)Zh0Jm{qE4M?{=dNNF#ipB5J=77A`rz49)j|7w*XfGk(MSKf0_mWGV{JQFu&*~ z;-A%z{N7*tC-+kz5!K@4=$q#ty!jc}0-Bh&aRB!w0CME{fsBQg7*8EBf?Dots0XZ- zd20rGOhyl|gvEsP&3v5Za#4c(O#{T6up4{P!|H&R9tCiL8XPhz;Ncul%wL1C2zmV= zWD1A~SuLL6FdY00ZPn@M66l133351(!k!5iZ1U7osDNW{ z7VL3!_6VYu#2n!Sv2XKPysflc1beRC_j#Ur0=@0NIYHLm?wgyq(F)cSPi^=RYu>G@ zq~X-Mx)sBLsnnm)kk<=%Dj8TuIG8p=ZfYW>nsc*&TR7_~KnGYPLBIzGelz(h?uvM- zIbL*ZS55-2u$9Dc z+CSFw?@mBnNE{g7^C~w75=bcz?kq(@Y>o~;zn`ZLV7z`e{hODtx>VGXqHjy*{*Fd4 zTTNss>GL6JN7=*IA1Gp`9|qFEX2x<9(iA!c@99Iz!=Hkb!4LBy4`@t2nOi}fh>`UE z#LYmsi4aH)rtI~qfCHOJWs(bm2@tUFe$r~vB8{&8ohpB>r9(y1^Kc*iNRSK8HeW9I z6CI#95fqV)%%XTi6)Uqu=0T7NXon(iOAkg{M@DNbK%cV5a3?5aRIm2_cxs5zH?ynW z?hGM-DC?n_t3y&|6t$3+2mVpKT8Lqm3HfX>hWQd^ESzh~EoVkS-(x?bZ+e@H^nGEV z?<@XWee<;XKM7ze1)cX|1X4~>=etlh_HV>qOk28j{K zpHYTn5eZ$m3BBQ%^Z7pSzBb>V%-9Ilv=6>;1WVo^oI4Pc`aDI~aZt>yNO6 zHVw`p{S(yxg|RHX!JA3cHBe73?WZ&yl;p`

%2R*E4D7yh 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

B`XSklLhHIT$aKQ|ia4R$sCTdZn7 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ⅅ7%#V7H|n(HJ$|O9@5J6n`Flk(=fGw}Ev;(~ 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%0Di>r=6;%|DTcn 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

t{{o=p#J% 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� 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

HAlVcfN2@|^@h%ilRwwEc zU#sWOh)ee!mUsY?jg&_FxqL*XZ6=!+({FX3N&>1}EcW7<4+`D%m4=(mP*R=3ra46# z^42qKVr;o;RQ;v_; z^t}IfjXRBb$y_U;(C+eYaA)-V@94(P=my#&4M_$OZsz4h*7@=Aux5w^vEWM(DhM=I z!LBlo8W)#GNK|w;I7*Y_LT=)6d3C&TJ$gPmTKxu$b}_f~EDdmM3@|h{G=wydN*D=v zPxvHl&&0%}9vMCocZ#2yi@Gnm%%+v^MDZ9Fw-_E~5km7PZ*{HfL3#7`-uAt#$@_fy zyxzDo=m3XZvmClX<5kQCeg0M^E_Rql;aOP`KZ%HUkLKpy!Jv?|RC}-n;BI9F0RYQI zTh}8sI&FrV1O$%wn^FTp=<@>xu?>MW{s&bCnc1OjyoFdibZ6yBI-K>DxGh-n=0@BZ z3H;U{S=X?<-&GG*U`xDZ2AWqHDH~0#!{}1+N^B)C7@Ep4u3c@C zbJ$!phO)WWtfaH)P^joDCJ)fo9{NCOC7b$hDa1Ha%`nl`BgqiB8>j^X`yp5#D=vXt zQqkm+?fGZ}L>0|+gN|Pe1+$Owcc=ag4M=e}tl(XG0%jPK;?OBa;)3k|O+X}opFKn5 zCqXY10>9#7uLGLUr}yX6K^U<@;J#%o%{$PPen$ z?d9}w@eH`^aJilB(BW0(=G5R~)nVgSS<^hRf*vno4w`&>3^gol862EN zxWo>`bPmwx^5ZJtYT=&z*SrG(k&pnNzq#rC{ir67#E8N!AzoQtSwFA8^Wdgy09?2^ zT!h7w4xESkS_2R3jh&sJpRKQ}wYBlrGsjNKME7?#7J=M2)Am}63P1g8rGQEHK?1AoW(5s0z{&o~mef45Zp&ZS@;dL-`^V=&w*G=^9v_fuwXlavx_PUn$W&MZ%iX2Q;8g&d0*CxrEg+oR0KJrgJ8QtBd!NnDR&t^@vSt}-+n01pGbBW7 zAI%;;%=NllSz9NWU-`s$+`<0#z?=a1k zA7l)AnHpmbA_)wQwOn2|+7%Z;}v~IJt zcPuvbE_JkSHAK7An7FlI1^{q?_KdC@+O~Zyf8A}+g@Az6PMow(K$=f#nh#f7xVAPm zAD@Nyn*uWOlY*R(_sJ>v^GRdd)8-(KTf@=mapQIMj^JpzE)Uq}1=<^aLCoTDI_dz_ z3V!xK0Q5Uw_GIpud%Lf1=@ILCdVO!^reD1S6rQfZ`W2$BxjBNdre-?~K~`4Q!$ixx z=W{9;FFG?bQ&(g6jjf}#v!Sz*m6J21Aj@9ZT!VS(!`ALkRtw;~zms7`@a=qpxvvpS zQR?hu;HI-B%R19sdpb;47SHYp_Bvqpa@M}($H)rGP1-z zt;8jM%;i4AD9f2AA)}v~okup*IgBBZ%Tt~~bwlgQC{f)N3eGXCly_OR{XG?OS2Y+p z1bORh2_-1K3k0+W82M5$e%G?C`-YWce*857em^tgJ3pDKT{D+&z5rVK>(ncMnqH#o77IsHV0uM0!nQ&WVP^f}7dhhD4+HoSY0kR-m7={oz8C z*1LdLzaID)5aFgfoz3@ho$(7b$Ngw>;hDpoJv}o!XnkO$?|Qf!G0pFMcrU{9pOjGsJ1XhZ0);P4Y|J1T>n}{q z`AcJGj4EBh$K!R@tII?Q;{VhYfsc5J>=s*G>^_HsV-duD=R{Ypeg@pEg8KUvM+@&Y zF9ij=GHJCt-C&Wl9R)XpQ^WE8(cMH+*1^ETAmFK`Ds6d5edD*hN3F@vG6Kf==!@>* zEwE=(0Q79)_o2DlM6l0)13$nss|A5%1QqoS|LQnVw&qZhw~`|}ok`g|NxAIUuS!*U zo<~OYB}Kk5ReLJdx`mG2%peK2Rw?nqTl>aHl4>GdxOYU6L*}q5cBzovFAU4OnOf;F zi_KyTqJrA2IPdgNwY;;mGS{N=`t^bZq?lUt4wjLb>%RMIC!Iq$)a`uthwPPMS{|J^ zTS`$8eeD(}%3nxy6m8=m_s+}nLD^fhaZILdJ@Nv&XG>nim=h&o_!yG*`I?@qjf^77 zQeC^D=O0Hmku|&B8v7f7TSIG~nM4yTMd6(*S}UP8+$p3uFiY{u}x-PAA@*TJ2i!KOv|Uy}yMB17%3 z0+qy#XZtqek^aHq-qIeCu2F7kr~1dLzTWD*C5uW>4V!hUYstJcY__CIe2hlQM>QEV zxuP|+4iC~CtyZ+TELABlGD)`jIyna-sx&X^G>zCK45&4(rpy%czucv0B}(en)O?~A zQTHNSgE6yZJp9F-rrfZcC-#*B6v$p>m!mvCBNTag24thHhIGHta=;bIV^6fJ`&_cl(g?|b=+ zng47$=E$Je5mX{`WYBp$oyMH)16E#SaG|^|PQig7X8m5*$Nn&GaQ)Ke5TaB2kUZCB zN0bRvbpd6}HOc@P(^=LTI3{41L-cGtx3)Apw}ui3LGXu|O-H9IO9yyHu)Z>7=;r5Q z=H_Q*_CL%nFEF+X@ABJAAs9V4a6D0CSG)C=$OKN^{uQKn_daT~4b21Sv_MZRfX_;~s zmK5!6G1nT0E>9Q2M%iv~8M(Mzmc8Ak@;*L42%C+tzgYP_tTtH)J=zFu zsxpQ%34$IySk@SgmE1URpxB|1$N>=`7v=}D8VOnFO+0xFUeGP-ESa5rS9w8mslbk+o>L^9q!I+!_y2TiC{r)f>t6Dwzqntas z;aqOxrPbk$i|(Jmm6w7z9C$-i>n`K{6Cw0&qDg|t9V8N&bfOGjL6PfgGMzX|37nri>Xf3O04 z%l1B=?Wn78ujm|S#U~&BG>USK@(4i;w%$jFp|P=jM{PnkH}UZon>i1gn^Uci(}}x+ z4Eezgi7qZz(8z-Q3crkVD)u{Bd}X~#zB)6S>{Gix@tK>;8@0J|5V9P`CLU&hVKS5OG}`;8G*MA7v^8pRw5MY=DPbR zC+ro-3*eM!RxPgpJwxcl!e8cF(&zI z(5I>U!a=WWR6=aNguhAY%xC^jCPktT(a4|F8-`v#UZ_N5QQi$`YxE%! z8i5U`WQFBH?p}33a-fY7#4JpkWRi50**P5cVNsPOxr(uSO+5`%ac5vpH~3FvXp z=q57pzy8XBiC}vdQJX|+2g>FY_={yK0 z*A=0@S~-Ku^V#JiUwfPY{A|1cH`j@P{riyTNb8gLkM|-uEQA5ZzQ%qgJ#A$kc78Q= z9=~Z%LB!tX20rZJ;9?)LzdOO`&4pC{EwkD$^%*@m$g$(TCmup>2OBo~Pre}Z#)vUY$z|>Dnnjxq420ypy@P#u9==C;ukk{!e@&@ntNT1~ebhgu`aTl2 zp5(5cu8Lcim|~YMe)CWz^k%Y^9_howsQ6_wOzMajpqXc4t8DmEUuLRJ{&kTW@TSHp zq~G9@Hq-+e_>b4uP|Ie!_B)hY*jO_@2nmPPvyrJ{CLw&Y*#>hmA$fQn6!-}!d9AkCf%(Evnt zD6S;U50xJ}g$Zm_bTT{OQu$W23|VDL6>V=GN&#iOlQQWd?aWsz7qG|A_!yt$6JF z1eW`50`}jvnxuv8?bXfAtz|^&8e}{Oo}kA>#QN46?7C8-K!omzwfEJv#>K|ImbNxt zZg5@ZU_Q;g(>E*Ab|1%lKhJU(&vq9RaL3;RH#hgz#+t8<#ohViVaH~T3y_EVW4opa zw0FKVoOLwgZ*8?Z1q$-NjEbHS_XJ#iGmXIWIGV{Bx|WIM@jJ|57JAxnG2GvX`jt+| z17r`O^-T|l16&S9Rc!Uvx*W~yiHkt)&2>~)d{nhGNP~V#8RWE(608OtDCb{=PDV~#rk7YH8%dEMt$8|Z83D&jJJ{L zg~pmKy10B(j3DI-PI+&1T|3%GIhl5Py_ac?qXc^vG+vsRLg&`6a65?aj;=ILS)@#v zT%g4zq#z5bFc7QYLz#gv6hAV{U*6sfnhA6u!|e;~MLbj56=>}4J|CW}t0gOi<{u|< z_3V-JB#M0A9l#S@?tPw%dG>}^UMUfZSNwNf-QAOoqUr8_SyLCVi)iq?n)jjA4kvWS zE_C-FaRiKbEbDz9Vix>-zuURcap-Y-xiu4gtkvs+joRUi9s38yQKS7uWbVHHPs86x zz(0xqtnb_bHvlD+01GD))2jV+mv8N&(^D=X+?yl_&s^(DZR!+0EFc%4T#$==Wdg=E z0(~LgpOD0`cAEyMTt~lC$JVZy$VK*&@YFBn(K`@bvC}g5y_kdwvEl9_9GmiCf`9+D zI>P&<>FS52nve#}5gC2OGe~=~I+)8T5Wl@cpl;dHdZ1v*xg?jjgrq}d%ANTp?e0&K ztzc-)^BT#*k#&ECA)q8Y;8yZ2xYGdk{^wf#?P!ebe4!#I!UTnBbN(-zHh|a92!OEH zbe^DJCI?PHxPziXx_f@^Y7nZI zZtt+Y7_{nnQ4<2?c&A9@D;BFI(YKqld#}Y}f(N2D1`}-@c%HyjnNbN@TcrcTUuoEz zJ+>hXx&^qo+umMT>m2rOMshtr-vpn7o&wP9*B>9L!Yz%X@c(wyd*1Dp#6%AFyx-b@ zD_RDg&cS8PeV-pBgTbtlC;cb>ys2$l-pC}G!m-;d0>1DbNzr~2iqc}Y%1ohHWXDIE z(Xth;%BjEqpdA3TWD@ZS)LOBO#@lxD7Dg((i?)Iv=qbD^x7et%cMB@%e78A&9b z#NR^ew3f9ep3vr%HdtS>0w&w~`MEec8af-hT07fXTN8@lL^Pay7wV+|v*Ppoz>t4%P^riD(Fl!P zxA&&uEBE5GU!m}GEm8d5^Yir}g`mje(~}93g+Ty`yUXuYiJ1JqQV{_@yvwu5(zbSP z@%k3jvbM&?mWKHrj`bu}WjjT%jBwIrLfKH!2dblpZlK~ju^a$`h(s6vQ+9In<^KaT zLCd~{9Qc+~r%r$#O#8v$rLOLFxOSNO_xc+zzxn3tU;V0ES!SSrXn((Rbab+WU&YW1?6rWzU7fwJyz=_k*a(X9{hl9n76y@r>Kh6| ziJPr}dI0_zRXqFDDuy%xtL@4_lxav}ls0BGP(7lIlGOU{zd=MX!yjuhl1ubd)hn|o z6OJ;+av;Sql~PtMIlxq@c4f>zWBXi)QnOU6Q~j0g&1}h0MY6J{D(I!DLOmIsNtsC% zEXsEv2Yu>3Vz;{u+0b{QH%9La&w;+%xsQDq(2s5oL-_px->(?hNdxckjlN@eco=zk z{5HC~N=D_S0O%eDJG8ZdlY8sklZ!+uD} zg?KDR#-sL~-5oXLtvpFp%6rNI4dnfhK-y)24(t)ol%qF`(T{HUqeFh)!Q;MwK2$p& zhL%^MwF`vb7rtbBh!aL~${p~;9s^-mXpxsoCO64X;;D^pr1usL&UE|WIS@dg^EbI|>T_k~#BU_UnD z>mR^Ye0}``2-2ZsdiNvXcJjp3-0als%rpj^3=LtAKAaeajx{ooeUMI9Lg76+*Ae?0 zbYniAo9gCWwbr4b9=M%&pW!{{Qu-_|Z}2<;QQYCN3jR9Kg8xwtmgEF<@dH|P9}1JY zcmV@2uk>{H;Y;-S^Jno{6bleM_v}|O+vLN;OY)X-F0qU?%F zE!AhL0&Slr$*|Q$RZi-UZGOI6y4kLqgn=MYQqH{(Sd7l-hY$DeEPLuV)WW|n=x=$=s@IDiJOZ9?rXV&WiFQIqf_|Pl+(08 zmUBpgPvV1P1t)7S2_F>mbK86{EkxdE3Vq?q6t5=w*A3wGS$GpX_u{D^GUPiQ9>W)j25KSV3Vtp#U=v~3u3ZFFmi;kKnNuH`-*pr;q;HehDx>}annxMsoc*UxG+&QvW zNrAp17V63%ztMThg|QJNjrX+zQqul`P+uJXImDcSyh`xOv#q0NdKl%wkjV6DQ_Q zO-;^?W4H9-DV*3xeRybMcxZfRaC~qOeIOZ+}MlqQf8y}GAVPf9fAH#-t zr{OY9PtT5yOpcCDVAu8GVVo0#L#~97ad6aMAm}&N*Efu_w+CN02cYNx7+8#RZVq|J zMzP!7*!a-U=%Du)2M0$7oaad=IiKzV?kK#_{(iWiLtS0YV+3dk-%3LC(lH#aqyPM~ zH-GCYK7+!$9DuLd*Z1gSkM+7(qZ^pIuy_kmz~yC3Tv>z@c=qg@TiaNgA+t+ENbr=+l+QQWX1MTz9F0|Dn4oZs+VZk zZ$yP|r7y`#kxHFInf^^COKFkpmNTuky)oZ`xiuuFN|56Ky>#4K9qw>FcJXbRFWA}R zp<^7oDWyNP(ip~XE zeF}buhyjqbIdLJ@7Y2UTZ9-6JcFpIhjnbqrSqQqhgy@oJC@Ia<^FuVf7wQ~Qy=^*` z%pty-vs&{$Yq2!vW(sH3)lBYaSgS=WA}Zdc)bPT;tof0_b@Y1p}j86If$v$T@!g=kVm< z!1w^l=^gEbv)4OJ_B$~#GB!2^$7+0h)_aM?38!&n3c13G(uPr>I|p$Nj`#PEc6SeU zcJ*V?PLAoZuLqMlbLKRxnFHpY`EEHG-&J|@+TEs&TBz&7=$cV@btBH@#0uo=>nm$( z%h>0AWo2<~eHo)~+~(=)t8Up+w{qzwzRbFj)diNK3yZ(i9jiR4EL>nJi`635Rh3uj zuq2oiQazPcAX}uaIj?H9)Ya4@rrds`iK@CElM%j{a00orbCiejW*G}o+>7!dDq_Wo zGWBMd7A4g-uwl0um0h$PRio7hnLu{JH2_fV{nSt&%802-(~tumTKHEgeL*fFceE@wvMp2~~pNtq~(=K}K|0cm)SgFQ!D2UC;~&PGFcCk!`i-bShJJ9uBh2V>I7nJorthIkrd zd~*KeN+&MrRfOH@00bdBzdWULhurDLCb(CWU&_+^PM(XtbT_Z2D7m0kIC7N2pF{x- z3iYLhLr&y#eV;t35}#f=q9Kc4%q7gV^V1q>F--{9jneds(Fb3iIaa(s(FFLY9W>?> z(~*wbArXVc3iK3hW$+rhMU zP-`39F#H{A>lkkD7-{bu?d%@i+wa@m$Fh^y>jLxNX8Q-H28U-xMo;t)&I}Ar_YckV z<1fwue-2Lhi>bci#C31~WMBV8Pv2Ni?`Ti&2qt}CWAurs*>Z*ombF z+?EMg<=6%Fuy~A{e27n_j<@bBwfpRXxe(Y_VgBYV%t*we9;C!P#r{D`=A}!$gxjAG zeGc7-$~UAJ2so-mEG#yJs1kB%T!^)ZsDklLCQ?x=?<><#3Tc~}(pXuJGzUckJ&G2q zD3NJoi&X2RB}yx>+*39iEl0{L+Vw_>wC0~7*w!nB7*!!FWoDygyA`?>x6CdDiu=lu ziOIwU`h zm!qvpbuT$k2+!>z6=HgREML>k)uR5I^^%8U@~BIm!&dXFibz+Ox5gts>w{?&5Ub5? z^HbK`AXc1SM6NUPLA+x95)R+d@W;X#3&R)WC&#)KGF?&1`Sh&{n6Y@-s_~qm$1K8b zo(xY_0qEJWq@kp=w>u4cpdqWS9Ysrc*r+SEc#~5T7gN}-URk+%b?MrbwQE=4#dL3M^kPf7jg9`z%>lTATie4OowGeXCtBP3u(amb z=-WEG=Jxg{*4FwLm%45(cFx~wpTE_C^X9F#oAa$V=G$;Fzkr+W{=!n{{6fdla`*CT zFV=$D*&E;5?!$gUqvJEZy|Z22Q|%q&d;7!t`y=};BYS%zxZc?v+}U;BW^oR;why(r z(|Mt7ZA05TJzLw|*dcFc7u!TRse0>iHn_a9^7Y^F^(!l@^YcsIB;DhYks&NRgUNVU zlx2M#Yt1bqWQV|=`>TT}nUb~Ta3*_(Dps(3@6?cQ7!7{V{;f)%;6Q+9 zgso`J2gX?eC;6U%qfC$v$IqdtC)o~0tQ176JQGsAZh~z)0i(ni@ zuILN{5epwCtO6+BTI}b9K8A1^ebp#JYUKF&Zb(dT^D9BoCIqzDXILslj2A^&!E$&3 zm0~2PbUvxVFgY+xjtmQU@=Bh?dY-jKQk*a9!*1k}%B5MH8&?Dp$qOV;wb;`;*eN@i z#48aY2w_GU;cObIAApdC@AXt!hemP|4@vN0L8L-0QG7!sSdb*|L`k&?EOuvj7e(hK zkyArq6oq4tyY?4f_`-|NfATBOeC%_-^Y4H2H-F-zzx1QO{fQ5M<}*L}xzGNa-}}N( zJ^j?reECZs{?eC!=F^}2kx%{hk9_)5Kk}JR{Y!U#lFlD_>I*+{>B3j=iTCL*ed>2U z{qs*h^@&e^`d6R)_%Hq1$A00-kALKIpZ%4mpZc{gKm8leeEH*FdFJEKe)Y*`zxs*i zpZmmx3$L6%|H{P+uU@+N>eVZ6-n?;s;nwAi^%X3qg1tpIHnz96+i%WqT)wR4FrgwwbPk8!=ftLMbz%sbxxjt{{3 zq=;TInYRUNc0P3GAFv;g>BINI-)%T?(D@beBnSEZ1K6FXO z$%$LX#>WurL$`79`~{YjC@qM^YEDX{Y$2?8N)xOmD@CHZu2UetW7EL1txzHB*)hmvm%n_ON@sw0Y8w3Ucrew1TYK#J_T zZ;8GR$rjZF)qEvc834qi^7N$iykXB)C8#)XtT~`;gxW%Ql`f8T>nh^wIS`4$hUHgk zZjPMm)=d2KuZ7@~$d{szwuQ-NVZ35MO2sJ3-~_tu8EAJqchZZda2lOc=kL40nOGyw zpBOO};@y6*GP{4?Bl3|pzj_Ld`7GXBG^9&FAKHS210X+>4I*Qrrgni2X;Dp_B8}2(~Z^SEh35`6@}?zjjU!8egj&@ z#>OP7$fQmI2$e;_Qwd6>?y;b4?NOj6Yf+dZigzUvisn^FH&cF!Cl;hOq&!oUe-u;^ zQ_HaI7jzVc1og*Cn1h2|y*-`1JzZFU4eOL3L3dXNd@!v3g~d{6D?EROy)oV35ln*h zap@~pUO9jE+1FqD;)U~Hn!owN>dI>i3$H9Lyt=sX%F5DfbS^KxcH!(N&%gEC=g)rf z9L~3X8|PbZJo(m}pTw32SPJFkmwxx-zwvK==@)+FGoSpwzx;b2{_;~e|Lrqh{P0(B zKKtS*kw&DYIKtFXp>cf6cbe8(b`k}KuP|~?9vTO z@iyAuS~XMZo#K)dkS&DaY^vj`?pGYRe>hNhZVVWu{zq?8+bgf{{?UP0OTq${LCiFW zuPNPo3TK6hg!C!GFDpVy8s^JUyemZ9{CD@F&B0;v8U4DQbssS(-W5WE{;h?4zRX%w zExbpu=T2Dgs(Ne})aMI*i27$yO_d4Rzq^&`Yw1YHzJ zZY|Pm(~LpyW%`Jp_XfTDr{bJGi?6g;(uzl=7W5Wmgtj-O24oE}1}X2w4i7bVEm4F+1GpD7HG7n813JU48vM zSeFvJ;rTuA+_ri6{iHYF>?7i-az$#(9 z6&_X%3mf10?eE|~hLxoe+zzu~eV2h^hexnYUPpHic8u+ETj#muF=^|(y0f16Yye;>8PCOWg4mJ<0C2=V#bglX;7kHtBoS`1lyc zZQ@*CU-iqeU=%CHZ7xxF;tL5=cww>_8VXO6X6Qpq>om4temk6S(mL& zX_QUOOtZRI<7X_UEeXzCE6wMhDM}P8tWlK7nCe@kDP`CaIqy19vhZIGNsAeersg0LcqaFPaI zhIm)8P9{xY3nQ+46&UpB(sZ z#2+G|5ivu7Mo}a|N+KkR0J_oWrKp*UHL0-@fO3%W)6C5pnOknYF!FeQ$Z) zj2Ab;!^6Y<#QFT3^PRHJnmYSls6MFk`i&d5dSPO0!ZMC5Nu%S(j^z|NV_{e>KM+yqqP+Qi6+iG@(t(W3`WASd79gFG_|D^ub-X1qWie6?q8)y|vor zOfRp}lo+i|Z4QiPCFRra-DAzZstuT$WUGyk+Fgu&eC#0kK>Avc5tU zKaGdoPU`x5YYp9W#OD58waIQ5&MHw&uWD7Z%B$4WwQd?=^S-bLl#ut_QQ>+xGz9$^ zCaksfO&IYG9-2RN@Zcfl6*vMOl6gQaq^e_4&N_ZOe>ye}aAW?!+$=eu9k+%LoT(2V zIe7p5_dWRFNmPV1eK~nLPr>oZy^f+9l!tu=FmetE3Pod_Fl%Cb1o_*sANBiSZA6)e zhpB6eN_b4l$qt(&0Gpk-***B@?AdeQ_~zH2efA@dKKjH1_dmS0wuKB3$B#ew^iv;U z^7ol}yV9($Z!)vr^Z{gdKzZuP=bm`tnJ1ro4(0IS`=$W!7+*UAIW#jhd-TXj9(Ls9 zv7;xC9=ZScu@k5wNwmtQ=LWQniu{v*EvQa^)|o3W2T8Yab{$DG8RHPR-aUMfEJ`Q)+rU0S+@mhPRgNFTO4W6|*cOmH#dQll?i z3ksk@0aI&Jz63|&<;fZL!2~s{NW6+}v@%X+b0Mxk8>UOn2WXVJ4PhxL>1e)rq|{Gb2R8#k_9xpML5%`2~- zdhzYI&tH1$+}FPL#x81 z?QeerhiNH^1^%38&%S{Ju3mrp*6kbDZ(RBHfBsLOc;a#9W~h9{bu(#5u2EBYQ-OycauI*`5ux}pB2i(wv^sEO3&ACc(MOE20s@A-~nkaYDG5Tr}I5OA6=9bd8hJ%*&`#~(Oy2xaPblxIN_TL*G+)NhaP_9fd?Lb;DLu8dhj6t zNXUSt57cm7ZhQ^4WysgMzZDSfuYMS`w(Nl{ z_@Ds!m7nYn!h3u1lbe{{)#0L9AeJ2KZ7fu|Xv#+uz{XCGIemEDMUyWCMvV9qZkPGb zVrE1Sm0p^KM`nwcW|~0ZrKuDMqP`q1^8p&9C9W2tHfA#~xHQWcz|dOw4L9c;XzRpV(p{7`LlYrf{u5S8hZw;@hTh#Q$ z=HlO0=%Z;o} zuI2${JmbWoU^^}G~Y$H6Pq2|?J3k|aqFya_D^k&*IHXv(xbvw0n%eg^fgi`xUbI+c9 zfReCSoe_smKYOr#P2 z=XO?(n!>s{ze1JV)DcBN6_ao79!J;*cv`Fava71me}kJ!Sk^Y0N?ukka{XCT>82j} zfSN*6YkyfuSx@ucYrod6-mMM&_eOc-{rBI`3N=5LSJr;;lRtW3{*jTt z%5vz?LsL`t&&)hHJbYwm_{g2%!z##l&ZOttcaUcN$k^nO@rfhj_?|jCF?D2O65rgI zM43K1I&pA&`_6#_QzuS7I(P8oykI9bW)IxQGJoG(QRe3X6j4qdmyL^eLdb<>ghxI%29JAaG}U`1b9k>(_4_J9huG z&wk&757E%~#1l{5y0!4uTW_5|f9~|@(>HD|AWg&OCVJ-j@niQt^w2|x4jsDx{zs6f zVuS+8rhg8!av*u&^%xB0Sgjq_90|1{SB~n|0crV{FHvr^R$jKYHlBOWpw@hk7;5v{h?Eb1IcXy;fVtXMQl7fqo(0w1px87^jcBluQu zXX>>X84FTK9na!Pm7Y-eW+vau(o0k9m&tG%XB8mRITf;(<{c$v_g5%VKF7Y7fj0G+ z)bh$HTl!!{;8}svdOE&pgxIoIDhHMVSa^e};ciFLUO2wDe%2IiJrt=@W9xQnyJ|B{ z6|kE+QfgyOO{*MmHC3;vd(|%5tqu8#o&npMUE&|K)G|t6%@^-};wd{@vgB#@GM#i{Je>ue|h|ufFnyQ!oGash7WS>Xk3N zb?Nk5mtMPc@wLmBUcYwb-0I4;ndym*jZKW{Teok&cKY<2Z@%^V>zCd<^VZonFQJ?} z`_{R0ET>MLKYi-L>C+cqJ9Y7`OKX?kT7UcPjVo_&-n=ogxH!4GI={7fXk>Kk$kE3Z zm*y_Lb?5wr%{R}kzwyS(>#r}r@y7C*Gs|zNy!g`9mtMK{@~byqK6UezQ#W6I{r0Ih z7EZsu@Y)-TXU?vkJHLMI`u5h&cuc-nA9Eg+?Tz)dD_7rIURs6&=gRULa2mX>uUxru z;lg=LTVzy#k0(0j*3DbnTSI5ho`3u8x9`9I0jx*48;>7{)9D<_{U`6c^wuR9{oa22 z3PSsqmY3{hpb1}zkvtxnL#3S2J%)Gfp*R0*J;2w^Q=>W3IwWJK%Uo?}#Z5IJR`b?s zgTM8nwSFjPQ$D_Rw$=n-ZBjIaKzaMU#X{|VYZJWLn5G1%b#d<+3AOjt*2QCAwWSVSw)Nc(nP=z$xAp0h46w%T$`- zNLjaMDMWLcfR$HUw!$Xy>{xKzjo@^UqAipZ@l&|UO)XW z`2E_y`1UvdyKjBt|D*EXedC4y7Uk>D|NU=$<5xk2a_!pNzx8i^?H~Qx-~QMC`d@tO z8~@vxH@=)0y`Ngwme&_6)ELSdnuo?WX>YJJk2aX1|;vi(eoTHp3=SnJg8HeqX%w0TFhu~Dn1+wskNujzcXq0;RJ zn-8&ecg;uBO%#_Brk?@XTaq^sU_Z~Xx0D^f0zP0-ELk!U7ZOGQOyst>tx@!uCq2S#idQ zN;HxO8l9$84n8JWI{7MA<^B{Pwb3v4Fu*>5Q^IwyusPI}hW_92J(jp?I#a8PleL_z z7`3Xlz0WOGr5=h}O`~e<_g00etTSs}WrOeS5qjR>gTw|VL)uv1Tv}SWd2{9Hk=X+W zW)2>lJ#+}XmdIC!1a%XWD3gdy8%MwZbDd9)O-zi9Pw0DmbanLt*KSzR2td*8+ba)0 zbQHPQXJ?Txoq6(f7!US_il7qmVRB=1Y-|MI2tsg2F^&7y_T{&}GctThQ1jv%3vlK| zme@YOx_Taf^Xl7Qz4G=~-oEVeWt1zIzr4P3UR8Of580silb`>Co7?Mfxjc6K$b%0( z_5@rrpMK)lv7?|`nV1~?{_p<*WQBlS1)SU1*q)y|^w5Kk{@^En80C|n{2}nxy#4m& zH_yDbu&{Xc?1eYZoLydCf8)#>OG^vL&2Z!TwU=Lh<%Ji%j&EG|*s>Q+hVJK@wGKCM353HxpSP7pT#&jpGAT*00Pk-e^aa^cIDFJHWPF^`c~UU}tDbKhQFxq0@@v!i2Mk3W85 zN|;cIKzv?pg4(y*oSh!>G%7y!QsRS7*+gnVy~ivVz|! z+Ii#p&4tC~sj0F1Pu{<}wzjgey0EY`ISFI`F!uP;i%ZKB6NIxM?Zkk@o-0?b;t?R& z@8->`pg+a6R#w)LweQ>C{PvSiJ^P+cN|+@*n2UR_U-0J5n|Uhb@#8V?v#wpcmdAM> z+oh=S#DRBfdPW?3l7~UwfYbA2^nA<{&6kFq4Orio^Nh&T#|Pj$&k{ZVQl9Ic^oiwT^|`et?x&Mwnje#U&z0nQ+(L|SKbQOnd`GUw zKV^xX#gvGvntRos_4Rf9>PzI0t9s;-M}G82e>5NYfp1_ye)5x_ z{J@)WPYuA(f+PB!t5+_+b@?LJ-O%A6^YF94%J#;_#@glvw(%_ZI2gb@fAPXwrWHqG zU_Nv`VkjOz`XhcQdXq}6%75Nd+dfn$p`%j@Y;5|k5eIQ=#%>G^Z~xA}{3pNm5B}cl z*v{1G@b=IsL^}E$((?AgA|AnslPBS{j4ZP_@dtkI?}5L`?c28(mX{74I)cU5jrFaC zm9^Ea;lJ{q{})4d#)n2Gw(wja_cV`H{Ah}cesCT9tN-9ve&%QY++AJ2_bEUB^FRN~ zzx>O0RpEPmFeKQo{K~KV`~UvGk2ylde!U9ug^(7Ik?6zug~Pz${iWai;-C6={?s4; z>7RJ?IM%_ZW~UE==ln1K)&Js$KlS^DAAk7q=bwN6fBOIaD#x&y zZohnLNRMwC=^55wtQ%2QbwPSo0M-! z{Azv6jm)~58*g1F*O2ch!@u$Y`DVSR-1cbq*su=mKixCl$baIPK9Sz?@-om}ZUDBw z@P#k@@jvm$4g={e-@10?^sSqhPn|lAsMY)KL!$E;miZYN+ywJ9zB}9p*h%UrZD`(1 z%zWzHo8P=~{q57IU;pf9o`ww&NKYUw1GD-(s%lV|LN>0gZa)0zA3SyX)ah5B-`QFD zJwNamDuI3xGt3Q%21NvKx~VKAWD?xoo}7B%!G}LP38c3OM$N7N{eS=0;Kuy%AO9TQ zk!x$4k3II}tFONDv5$TX-UfOEz&tnJeDmDnk3Dki*bzLL1Z1Lm81`Rz<@A*+mrtBH zdEbd+u)euJP&uH*Cf>T+8@J^EuRu`0!wHk-v(J3=+u!=ulTSUjU#8?cZ>M3WN3Vx; z`KPzRe3K7oy&^&)JvTFq^kI1>qH>U?<{9k^l~@JO0$|V6(6hC+k^jWGH3aC|eCZP4 z<=T9JKW>;0&XcsfaUYh^RPz|$l;w}bQNDN2ao>0;46~HW=VpkQfm48_4`;O^J=X~xXkua_rm;@<??NzM4IJ zFHw*4m^%$auCvwsGP#L%=nB!zej77~UO1ao-S3}LCy4H)`Z(RfJ9t(f%&A#r$vRVO zJMv+z8}5_x#O5CV+B_`pto>ALMz>$f{mo;%r}d)E+ic!iYn%JI&AWe=(a_76ue|lv z)y=J)M;?9f1k%`@xbNhBCz160028AhQaQ-)*@LrHL6-A_voqLpV0Pxf!~|)90CH~J zxc$jbK6UUQydV!F{%sD~%vE^U?0i{}w*Y_6%%IH8%wl_PVti(Nd3w# zi%Uz)3Zu|qtP$ao$By53_m5*Ap8;YUf1sM+Q~T39pVa56?w`+m<};uE^rwI1M}7nw z}NmwXaDS<{h6QnnLquf|MZ{H2OHS)vp@T@_{Qh=|Nh_KV@BV@T+5H7oYZAK z-RkTnVM-a*Dk!>1!u%H4Rd)3dgS`b;d9$rY?%Lqq2N-si@+~(N8~I((XCwFVY#B6t z&;zLldaFPeYwATpkYWF@d7#)#+0O6dAgCbcTaw#T9K^M5qd5gDoU#WMNS#v z67?mST99i&!8ye#TPY*C@gdeY&1~8F3C2s4od^mCeMz+jE9+j^*+iWZ>Cu()91t^L z8v$W;QhqZTbMoWWU#FnyNNcXMvJEi3)lz4E|^GfyIb4wjW;#}DBEl$|@9 z*pFl8=H{4h@A^$xc0ths{20POhIq;8jx~t>p2gs(ciIC8hWv@2_=y^vC?`u3MU>zq z3;1%Q6fz|;=>bS;6SF+4CR=Lqs@9mAd~3a8HzClJ7^N`5ui4ypSJgHJX)8i&O6GS% zSiRHXF*sj6P`L^bI()}B^COhpL_H`_6NW_!tT=!OKB=Uo-(B`wExV` zM>xe9`LLH3_%`pe!L!(RJrIe2iIRkg1ZVc5J^`Ku8^mZ6lTl33K1x1LHOizW*<2>N z%SfXa;=+nj&KQ?mwj`IBsjn(ZZD+u?Em#P8JtJYIAQvD;XC?GVW5MR;*18L}nm-)!^`jux;jOz%=KxVYBga zb;fq$UfV?X-B2zY+|-J?{n~sjm1e`gN%GHQIBat2;N;Z&#N-?x6DH-yKk?j=BPUP*I0JL?U_i~IK#!>) zNjkR$CXGVzC&1y6g9ne{#Rn0RCLNvTA9&z?xQ9jj2@G$;bdB=|09Rxv#C7Rmv3FpE zu&hE{A3h)X$g|jkf&i8iCypFHapdI56F3Xegp_i0c2$(b0OsBEpnS(CX0TVztZudT z13$9d=r$8;v%V&#TF)wFQL9+%CP_57^bYF$^bk$mPHBqA9ulvI#P0o5YY(@!zsHNL zM+EXa9xsCm20icr^}ueLTR9_Yvtz$&eIHPd?~ltyfY7E*Vt^h1AA8cKSJ||RD7-5F zLAXlEozgkPE3;S_wIch1fFicR>JTLX$O=h1p@Ll~5idMCG69M|l(A8ie3<<(sfUSF z(?&TnWL8|7ToQ@mz$AQRLiDROyPXJV8A%4t6dKGp6Mw`{HJnL+4xG86N0?2QruSsD ziGt&ePU|Ip4dkg%&&be>cE-BS{usv0NS5F9y^VPN=wa_fU)fa`%t}>LyXviqwLXfn zwi2UuQ`++WS~JSVfF<(Y9=qC4ipy(PuYK-E|KMYfee8h;o<4Hy(WA#6o}NBBHFb1q z`p6VEP-c!!&m3o&Wto{dF*AE&b}kAso=;5T$Rn5(f9MZ>?%451P{Wa956{gj>A4b} zGsU?xo)bNK&xr%TkW77kV*cQX=^4~;XmW}L6ZPnk15ZBr?2%&+A}cy`qeq5xVon@f z6re|8Y6u`(kLsMH@Fs?=4;9kL41A87;PZ>Lim8h`^LpaNT(srI!rYM{sBv@K3 z>sXqKjG;+@rC@joj?I-@OXt45bnaUyYuC@OU%#+^~Dsvp)LKk3RFvGd<8+(u2GHQ1(D`va}la1~BhK`Sg=^Qop$o zN4NndWU%L;=e_oE5FycvUvH&d+I~$oX(b%x`|?Xd?u+3;z*8#57es_A_Dq(* zcTCEc;Lvaf*9kg~2muy)T!Nkv$R{jHB6#A)%1~KaESV2bc1tG)HU_ zqnZNOO&6?TvmPpA)_cmDTlK=GGS{u0{q#N}rj8yxhN1t&<4+zr_R#dq(K|zPD=SDP zw{qd)%K3}S=gy-nox8Ba@AHc&=ecM3l~Y$FcLozxmqhx6YnhxpH-9VQ~`q zQ|9I$zIA&H$GrCXjni*jd;N_YZ=AV#=IpJr=NEAL#Y-!f-dekSW&Qfi&6~G(ZZD23 zua2&*Pi$J6#5BA&f$=a$f^e(~(r7T^5p!kb^+xcCCgC6}+?c=><3$?~srx%KkDE(;*#VpYDmcs7@B zES~+w;+x-Cy>@Q(>e;GXIlCI=&DAR`TPwF!7PeMV0(LInzL`ru<7$r_^N0WNA1-HB zH(28R`Mcc6r*{)3t@5V{RI(`OcCBUunl+d5q-vdg8HyPe~ z^%@#1<>9eo$M(p$8Z=|j1Mhkd6V2GKup&w6iCMpMkQ z592MG#I_-dOkRr9b3mO=$bO7D2#+`>bEPC$m`?=kX+oU*dLRx|HavEg&7X8;PNXaZ zltn;Y=}wtoCvG4|;J)ro%E1C5JKkx%~nx2@N(l|Gqf&I#!)T8tB2j=GwA~X(}!L|GXNWQ>7}KMFD_pA?u}Qzc=OfYxq0e$Zk_twTc^I{vijy%SKs`K z%2%&{`(IuE_HUrv_)aeW>&@>1fBu_Wum1M!)4#Lw)+=RMeoL3|RW5#4|3H zTk~?Y`tP=9x}9F@u~KN~Q!MaXjeh;e+diNB;IKgt?C~C`%?Qusrs1xpK-Q+u9>2#y z^X|C^Qkx_E7BLstR@Ce6RqeBkO`2CQ-TAMCMpQW4W^Ulx^YF3TvimT0+e@*DNynA-B8L zM&Eq#SEf;Elm?L>0xp)OHq+F}N>!%+Ia4Yw<+CVj=yvr|JMq=?o_^G?=Hu&Miz-#d zZa3S{F@1IvqVkR&g%NKED@MyJD;rx|8(W)csb$y;F@TQ#Ah!=D5CcL-#x!H;PrbCf zy0nDcWvffe0MI}$zbj+oQ&@r+p^Y4i4r4NzPvF<3rM2ay)#arXtWgZ(04`G?8y(yx zCq{


177kXC(~^qcgMBv~)5?BGQj8Rh{d@C2J9{$(mo)JsW%Uq=ocIP}QFk3Ray z3Vm z0HudTC-D$==rn`~GWEoClb~ zg*7=@qNZ*#s$2cNWksLu%x~wWxURLQhs^I&Y7Gt>^uULp2YRdQt(swNXFuBGhoGar zXKw*o1=WYdD`}ju7ri&F1Xalr(p#&f9ud+DKh0Wlg1nMZ4QN9o8RcaDqArmh zw5oBXikT0nDUPLDnSa{#X1gCiPiC5kMM;U-BL#j)fKFj(L{-38WHv!@UI8qOfI}Ax zDF{v7*j(R4F1d|WrrX^DMj~cZASyQCW6nJ|24x*kY8{8+Pkvz!02eZXE-o#iur91# z-LZwAa|0L)`9^QvzKtB^C|>eF`_LM!enJv3ohZu+3Xvr6;V5n)1=r~w0Ol}Fne=6N zXmxe-=FP>oFJHTG{;fA&fAh81&YV8=#;H@UpL+H6S6_V%g&VKDhVshGr(b>L^eeBN zdimv7UwQcyHjqj0)mKlydg^tQQ>R}){n{I^z5d4QZ@h8-!i9^M&YwGX>B`&JkcnYo zVHuhFfDzH*2PQ_g)>gLGmbY0}w%1p-*4MT-*3oBMNWQnRwza;x?Xt19y@~znJ6jt& z+ncy`bO5na)(9+(DCX>FF2p6TaTee%LoeL^7|H}dbd-syq4CKfB$FH_GaI?6@R-(D zRnQm}UH1+y3h&zlOf8T@TFSvyR|LFF_z_O9WdY-=6EALW-9d#LYcx^D4Z>DQbLGzF z2F;b5TUcGdBN@g+;h0j{zLSc~n3AwGS4Pxy1aCK4h&vr>M;ES~yZq*>L z8d-a*_PFbsmE#=k3T=%XolEF`jf3Tf2mIUQ?4Z~AH14t-ObMW&(NG8GLV72YL#OG|&Y^V;E!#O$HouOW5rvE=Si4|U{C@)kU46cJGsFFjUZTj4T8+E;Zd6pv*`%NLgbbuAlZU_(R{j_NZJxK zy3F1JcnKMx7-nEg0864S8~kCp1J1;LLP&YPi*`4W?2_Gzrzab~oF<&{1>lG{6;{7> zq~ylND(!$YX2LLd^X9GV*8xZuU>rnGPEJlEO$7{rDZ_21A5RnqQSbi6aLqN4K zg>9kLDBBwwgo5kqz=ToO*0$DGffzSemp50J)|VI8R~9#x7g&~9)|XM1HddC=tPLKP zN;+i=CjxK+(QR#t_bFNvAS=Z%%dvrdVtfub%HBn*a2Ctf4jM@VCpP5M07OS%?j^4z zpD`c+|6sR-aS~-_W^!hBau#K7a&B(QWqy8&mczM;nOPPesWLu=0!t>1nW$uJVrq0^ z@*~eYf$a7*#RyAJhmGQ%`jKOEn z1K;C4u&)u|`Sa%oNUxs(97xY%rSNY?GhEh)BP8>T@i>krBGPJqmJ@Dm}74ukOqMjGM*{7^;28Bfal5otoxx!mJzuI)tVtFuhX zq!ljSn1)=$5t#}gr2(UZ@btI-qT?a9IeB+>j6?AQr;02=)w)s4EY2$Rd6o@fT};l` zymNp*Ct+b`&@f;|#+Ho@!azXH!-wbj$VSG7Mp4EQv3F-=48~I!)|j8c%S|+u8pQ(9 zvNR|_)y81`_b##^9a(*(j+h1q7LSyf6IATdPxu@IgKp#h$$$YN@6rvGC@!dj%i zI-Y>g#Li`Log1*r?QF_M2b19X3T>4#S^`gQtu7H&a)aL+D@z-|rAxQh7jCUD++1J0 zwYGGNe*&YfE^Ziq0>rMb1K-M9Ho;3Ea9j&_fi?pM?`%K)*aNyl4T=ED>^=4{x?+?Y zcSc5Ox4eV3fSq&S{SqSj%JKh^k9?#yU%E+#=6v*t-2_o{Zk9*ZS?}N(aQ$*)6K^e$E#h!x@!`aAn6`2Sjm3*{i1~-`0@~Tx zK;T8z09}8q*X-pU8MLjn2O7#dm)ofvRpgX=RKKr+2<@*(#n0$1J`w8H`KNR!(@S<_ z3C!wDemkNzQ>|bn-&89yve|+cy;FASE|{&6)ugcuLNO-Se{%%vd)C@vG*&9{@YuDF&?SNKAp|z4$jU+d+ror@< zOQo)suT|S9FW2p+YWiPI-)e1ed6ixJs`p)BEWu6B;il;cL^!K=u>QE!6rL85vCG`p$*nquFZU?RcvY?Jib9Ee!+FW4z>olzDmFP%5b|_kMVR@7Kjrqw z1F#L`0;v!{DDuxHqa_7ta{Y52h3vRp5%HQAiLAO+HWp@ku{l4deM!k&;LbQP2`|{$ z*%=OFx|ol_eLM;f8Zk+^U;}?k*)GHDQofht6Lh~U%jg6TKoNAr#>g1L_F(dwR-x@n zWpZp{f(220P|x3kx0)kLymZcxkHT3oJ4X6;k`@>XiowN_tX@(i<0F7~2QHeX zTCowYG~D4hgTP#h?B_wdVppmJK2rwvI5C}@*;b^=hWV^m+|Al=wf?U*#=)`|__^$2 zy%hC@oi7uTOc<~6Tzz*PV6qz=+=FAHOOw*G)mmdi5!qD_=&eTd?uHUCHLu>hbgLqm zPpqk8JyfgmT0Qj0rp8v*dCv-H*(apbU%oXApTC7$V$#3C?}cF1U%GX3>DG;GIbySu z>tR}asmvYeIr<@LUOT8&A7e&cI<|ONGTqCD?*i+h@Si@i@5PC($d<(Xe_lDthPc#4 zJkUbY2vd`j4Kt)o;8cPj8Szwk+>w8XDP74R?+ZwraI9xJzx^99qwbS-Hkmt9v9(m* zo3bn>J}PHk389`TcT?^Mdn%#`s;N}l$@5ilbSavS?vCRVBjb}J6O-BicZ-9X(=u2< zvdXYY`zUIjm;w{)$mI0!1S0(q;5RWeHg3x#H&`YZ_&2WbzxbZSkt!3iUXDU2!yPz1 ztHKHgG)_xqESlwaLW<|MvxL%B023y+U3tI{J@eQDf!NiVvO*?qQjVDz7^$oIkls4; zYB|)w&hjHa@*}O&y!S*aE6Ktti-Ou*u8D}&!4{bo|UBB%j?p_dWFAYu0hptAy~Kwq91>f{!hu!Q?Ojy zTl<=cHu>q^C;h4J@=i}bKl1IipuKw@2*{V zY4hgg?OSheEnMAJ*;=@^b^D6T=ItwYHdgLztgbBHPGw15)=D-JDO&D?H`X%V<_?l!$683LPVn zLBWxDh`w_`-O4ik7+qw)+Fawt<{BAO$l3z?706m}ib-6wM?rKOq;F9W9o;M?hEmiV zp=4F$CW<2G#$m_fF(6Qpc=GlXkuaH`AaEg7CxQ3ICZ|Uyrbj1%`cetd2uoc~KPr)0 zq^L+DSUYVcB~J_tn-y3EASCjfZ~+jV_LM z15ukfC9I#+j<@NJJ(zm2iuB8DF3H8oHq_*i88eiCHs$E!hE}R`DY0%okym0+o_=Jwp96s+AwX6-HBr=HX?Hrf>M=H+TN_f}b&2iKIX zZuQrcvr^e=>Tuokt=j%>%2Pj@Q?s43v$N&S?bXG#tEZW%4e?zrwm6Y#Q|^4Q3y}#U z8;h7k0s1!!j74@Y9G%!%Ti98>y|Z?Ed-e7uRF5M@T09T| zLF2_R@r8{q*#Xgun36{iA5;gj0PToAgxH3jmSh}Bj+a0R*$LF;m^y+zhR+%PsR$VcrHXhy>DfrL@ zSa^|JTE(JF@~l;^8I`bGT4K?dsm9x+8DW=l0(AsJcI%Y@%ub}T=W*;A8G6GmwA>>$ zSjSivyghW0)mVk^E4y0Jk6NNT|I(M6V9%Dl8dU4HCm+`1fZAMZ#aFH;&*)NIl$Yox zopzn_rK~8g)szES@b(alwY#oK-TwdV0o7^^=8)XYtg+XWoI!gAJ@Aft;BE|hzL4ig zo+)K~&^v0$;N%am2kh$9`LUxSKud&Q@V&Svy*EqyRpm%ohT#>rmz=t?QXMdc055xK z3gaaPz?N{iP`&g5>F{q%v!VVz&P)4Uj&A|bGQMRU58K9g;Y8a>4cb7ULAWC4F@sO@ zOIUg7Fi0lg$0pYXTNHU7g68T$6XkLC5JsK&kB(;i`#1p zDExD6VdMI_jcez2Ru>M9Z*ASUuy*Cl`c*)_H?gsJ<{Jxdym0&V7uL^zb0d}Y^WRv% z@J)W7`}*~7|F0<5zWJ}Ned{-_f9p4{eG}z>x%Q2Jh41U%_+N11?bmSn*HISEd~@Lp zpyqd%&%eBK@zlzt*I=%kn3<0jZe>xPtA@^&5Xr2HfBa)Lj!&W zTJFY?-1WDsa=4ee~=dl(!1b9-2ioBoZmb5=g3hLq&Y zfst_S&gSZl46P{KSYK7X1gA+*9tcsk@NtOo#db?1PEf2}m@(%3x%>lJoWH>=84hJN^4vKP?48GuCY;sSkHd< zOSP$iOp;GL@kA*i%K2VS#^#i7on@^M&U3Se5NJKCdX@!6E zqtV-{6t?}#oaVW{N^76gq+;#WaPs8IUFF;0fI$!JmmX;9mb)%<)V#Pd%%gx+1F< z5k%6F1>D=;&Cb58;5{O};@c;&RF=TueV0!!s}ZfLRqr9))D?PYR85tRkGr$qyPe+D zOPU%aoFx1^Y$3 zk(eZPj75&rHnXEdHD0%H%o$Bs%A9~y>2RpSH;avg%D4@ZPBK|CE`BA9cHx`*LeD%tiM0aVHm~15zW>Ywt5>Ox;xB(w>|`zjcx4TU>VxlLXWZ$^7VAf6$;o<;ATnd<eauX2f0Hm-_&K(0HPq!PyxrwQWFg~u^?JtOfH;2*b- z&au5K;upOxp1UV8EQFqD6)_Z6YdWccRr&`q zviqjo583$9q0l5#Vfbo>qh_q*1gL9!$l2#=-%avvdW?Fh8qx-Y-R|yg_h;Rro0isk zt$c8+PS&d2WZkIN!XEch>OI}I@A)a8K7D#&VZqg|T|d9Ecr~+xpiU{$o&fmPXr|c& zKug|$KwQLK*l=JNbp0?E!Aul}z>H*s`ULc#(j($)0tI>5Sr}49pL3g|tA&bq+=|5Y ztRVW(qDmg~k%fT-j}_lz%3B~Sm8OmpyQ?G{lfr4uR_zjrA>>m?>*XlqDU!#d1d9pm zmf$0qAS;Osm>|7$d%eEGHp(3_R)eFrGSg{5V1d};d{ud5T#xgU_&63@mQyj{%&%5c5-Gumx94ojmv-Haz4gXa(+2j;*wVbex3a8#B|o~7PXril;Fr`wCasf{)7 zxyQLZ4(_dcwdy)erKi-=nu=Pt0e;u&-CLhcR$0$9RPwd-ybl6^nKz z7V-W^%$wYzb7UCp>4GZB4i>1!QE4_%GUuPon_=P1VnfzT+tTfE?VvIiNGzEyfqz&g z!3birm9h)4wRlpnU?L4W?3T>M?!q+hOjgcZc6LY9GEo{5$(F^x(+ZW5r52!w1Cx-D zsMy*WGSIa>Gc1{M0Y{faNO5#>GGj7rgYcoArnow@4O0mohG4@S8LxWGtg1}E$5ik1 zx0Gw87X@f!i>wLa#w6~_uBVBhMflU*h0D=xm6lBT29uXX@Rhmp#$;G7ZJ5|I_Usdn zaeraAY;H$H0LG6jzGuJt#kbD9QqBwba02Xg69~;&)?0Kmr*>-%9X`y$p^&x3;#Rrsd}g9c1^b4~{6hmzzxVI)Sc6Poh`-rtl$t z$>bS?g;N}mQy}_yoLDV+MH(TmK@L9qy9fN>8K*}&7Jc?+oSvbn#C#fgrQ}F32H?&K z@i1nc5HC@!7;e>{R<6TZPmr3VGQ?bQUTP=%(M~VbDCdrdl->xTfY;)^-oNPH$DRM~?yKUA%bF2Y`cQ_3c-+JQVOp z3F%yNQge^h6cC!^3`epcLaZ*yU(=qSa{jE`KGVA;#EEeL0RQw!L_t(1o4|6$JWa=F zYbb&RC6T61GAYuc$QVESaKcuW=tdANwy}Yd-8*SAx79o^ku+k^Dg$Qe{z+ivNJ5$8 zY{1N;hX%ZB(wL~VuFkptIRmtsb!vrO!ZJ0D;=1dICsh~m|CetdA z(IhXc6|zyVTS!xWp6E2J5jgRka^Hm+69Jjobg8gR#AiAV6Shs+FqvQ-HcUidnnaXl z%$zD6frWIhWdk@2Ny?&ct_U!8bad?5Cm&0x2$hg9EfCN`CdU{fx&N~%^wSG!{Km>!_+t|V0t z;n|dmt^JU7SwoK2ZtU}oFgR?`10TvBC}&xVTKu8B=kKYTYM^uRmhok67sa6R*n@py zCCa{wh_{2iPJ#5Xy|J~mzKMd>Y^BfAM}Z>>!Jv@}`j<yk+&O; zl-YV&VRIWWX~R_3^1_T+*)U^Kh-AP_w7_Q+m*BO+4>iIyZN@a5R}K7K0Ru+#IkqsF zF;fsGY?#h%&@^M>0YS`fuEUZEbEa*Wh{FVo2Z~OtD&eUcehf*3$8#3=PhRcvV36Cr zWqd^&%a?$%@Pzm`k*o({VC<1gufJHEP|rU5tf`^=*>(Pwhc$&ybGDWfzc$}nMM|q| z$pWFZovnhd$Bnc$vRO%=T~TXNKC7vZHt(Xf<+Z2K?U=#-K@WT{_rL(}eYl@KH441@ zlhdKH2J8YrK9~*x4};_DvVRkqV~|ld(#=tWr{a(@A22XKOn}*6D^~dBED)LNs)c*& zdPb5i2}YW(lVuaEf8ul~;_h%{bwEDS=jtc&z=Zph0A%_&B+reBQaMyHkdKy0c{QZ9 zd-Z&m87WxEs(gs;mwBV*y=yH*Z%Z$!s{>P>37s%KJ@dgl?DycRH9dpiIazpj#fQCh zg_?p@gIFaJ+f~8ZRV~Zc>ULypf7zIBDpa|@xAFv-_sT1k$J)~QZ*MJMtt`J>k4TBU zgIEP{O-{#R=D1^W3t4QG;SKrU6nnM;gA7-EFm$@PHXm}(AcI^ zpCYYnu7Q;Xfn<&%BgyCJB%=FVkUT9FP*YA#jZRG?sW&pbAd#Vi*z zjap^EEI0V#uo=^qOng86_yZl`mzkT#D-Xu8+$LIeK<4f17cZZCttPI1?8knr+f2{< zTPJ31CYA?xlToGcsZH>v)ao|7YprU^kk%7x64h7lElazhwc3qmTU@P|@}IlbvujJ< zgE!2e%0Un8rygjEjse))PtUKvw&qu1*z}V3pY?{l=(d;Wzaxbm6HMvlj{AiUFabv= zhO@xqi7rlNYGB&iyd6PwLEm6Zh=a-OkPgddm5|c;3c^Q9?x5NFX_B`nRlgTn2UHO0 z2ia<1Fquo;z*yl)!9%S)<11ii!k;x@3411JMFBxst+XA($CN0m%CxSXRk}REU1wTP z>(t4p3JTJEfUJzD=?_W=mZ$C&I`Qy!KpeA#AWaWo5g!wJtm>W8g{v(8dDW zk%=yqAlt!y;Y?_v5t+O=bvZO#)OZ*RxAUGbVlli9&=LD#d<%b4*(|f^Qh!*)cmYZ! zyZ;H+(ZY$?Fr{KMqm$FJQRK>Nz0@W+$S2QM8`PM zIV&r{nxAnzn(Rg(8D$`y=p_Ndm5qSO)|HEb*$5)FddjpeW2SAGF3FOaLoruZ5R!$$WTn0G4(_O)P+@(T|^!nn=z9mlNlYv9}~Xlkq0lIUPfakHc!jhi(4qq}ho64@;f@Hse0T%~%FZdHXk6jWo%63g-voQvhtsmZ6%@6~ zjoOi|GqgFcGqCA%M!QL6!@3E#Zi2C!G%F!iuD>R8n){nqZ+1?%meh_c56fb==LcymLo0nS;61}I~f=`@|b zyd@)^Zi8c5+Kx3KY}gHwv<3~Q#vHCz4Sn;o0TvP&R(3^40Or&bnU2MnSs8l0HcdJO z;m?4e2A?GyHL#4<=wSqfOoF9FOkYw}(yj5PgeT*pdrTDK3D+fTX@VBQOG8TevKkp; ze+eL=YU9(V-mrH@OKxzhYSsJKrZ&*J#8uOfeDAwzPGuLB3Ra){^HuV-S~a1pQT5pm z&6c;`ov&50upmkL){QfW8{=xk)IadOMfiDs83dTQK zqJTP(8bQn)kqnJl(eS6f2}oREIKn7a=58+D7;9xNUT`W2U)d3nV$BO7vD|@-aI`g% zU_+=YlP($@1p*KPODi^EM=GZq&6rVy4ZdS|d4IFKHi>u`XI}qdo4oZpH*XDH0OMh6!8cL^fK68561YWX8mwsbG83>G)vD zlraSg47(`VlF2dra*{b_Hg6 zp{--0bbn8Dd(pIt@!q|rn^KtQz7#AnK__D?Vhvc@vS~mKU}_(ZOxuC=q_j#DrAc zNan^&15DsXM#m~QH~-v3*;K+e@jaq2uey?h%TyMmBoVJ=a}gyXb|JmCVCq6_Wntt=|Z?yo50aP*FFVFLtP8;PVikClebgeX}d8w9Ne}Qd1f;>71$~Wz4kaLZZ%5pk08lk|HOwcL^ROUkCY`lAhFL zIb1Rj`-?&=pLpO%xSlc#2pwMq3t7TL)nS~em}BYvIUwFIhdiMKx05l(5EoaWkvR+25U|t9cH!A^& z&IB$^@=lE9;tu;udZPyMW}=+SL2Cwh#qw^f?dLZ!FP^TCCK-KY@X*^fDi1Dbo6I`Q zTcdB2JZG!6*87*Q$3xG#c!I`E^{zH`aXm5)`pl-1i7Dzw~LiZDq0v^V{D-^rlc zRlwx~nyN$Vb$cAvs&93xq#NR@RnpX!nhIa@l$ru(C8_m0?=0I>V`164c|N%*Dk6?W zdBDe+{u^+CQ;&rCqRU@j+eB0zG->ggh?rz8(&$B$oe)=~rrRd7O17LxPfw}XXerXL zP9~p3ED}p5$sAt^u{{04Mi<7T98AZ_>exEX4f*gnB|;()bsBhuuM(=#9?2|zDq+UV z$vH(wV~0+;jR!y~oI4e7CdgzsL`PEM4>5uws!ayWWU*XZ-9Q{80~)chw!!Zx*n^H$ zxG*PkSTac<87OOHWSkJoklQ9r!XP6c<)xq{)1i2UC6fpFZ6Hi0hslUd^B z@=^3&lEd+CG`L7!p%KU^!)El&rOu=aIJ(BplHXY+kjp!38?~9(O>ni!pWafglm_KR zThHnyUYc@jS8>2TU7v_)Uj-2)XjB+l-WudYy}A%b}?!u%}$LE za)Z4;gi{MooH)@0LN$fy9lq>q0I7t9xu2Q}&93mQc5aWVT5qR$dQ+JzA7c-g*X*Af z3k#B@uid)5X;Mm(;3JVYb9qB|=eN{%*hxr~!bJsT5|2XblT0)s%!J;~2(gs*z`6L~ zikUs@1WO|7G|_-$5GawA2ppAB9g6$-E7J zYI>aCQ#yDCC#s+x7F0MkHANptx|l`^JK;=0KPB#yXQP*QlI308A+})}7>-X)OiWJZ ztEd4mUCvF-%}>wH<9ljuZh8)OOByp}$%N^WO~o-XU}8HgpEPN*+rh z3tzFAl#Q9rCFpLkJ7s$45>7$GQaa8?o=-zLv0!nqi!K19CO2*aHVvucRVku=nvbAyd0nO_DTks#$qcPGV09 z+wyizRNgI|E9G9kM346GpO@QyXldtKdLDRLeWH3Mg{S;vO-_sRn&E>__a1;erH4b? z0nxW&!e*4Yq7)#_aIC!_au1`E@q)rP10T|wZ{Cn#)fLk78a$K_!H}%R%w9GCj6ie0 z=%J$>e3PwMnW8R*+G&+n3)1-DFo)HNu`}?YND{QxT_l$?=D~lC+@t5DS@Tl3NfpYM z%$?au$o`f-pRqofIWrNum3Y$IScl(Kn4G*&1ENs^O2$PEoyaoMOBB>89mp=f#~K^1 z)6{ZW{dX5pMebpxG{#eEhrJrF*>l=;(-nG1tJa@tN<*oxwO+q=-Tu|MZm+jytD2W+ zZDihAwxPDOc?;$6DSs_lSk|tdUA^>@IXqHUI&LSxCVCIj)~Am)BQU)>rrq!zRn>DvLXlPY`B6s*G|@AoUI+6~()w ze0Opr&Wtz;(G36kY?L!4tSpuhdZ&(8=gXe??Bfq6+h(>Q>pf99zS!((@*bHt@9doY z&hNZ+rVjT0=pX%~S$g!=7-}NCc5thp$TFc-{_LutlysmoaCA}NgRPVYed_8oX=H2BsmuGdW;gLrk$roK% zSn&4t>cZyr*U5U16%=Xm(&(ko+oYwBcBjP>4%x(ksPQU4Jz47PkB1OAttb#raPl~$ zt158UmgNP}fO51fOe#Re6v`nx2KdHg zJW~4&Il{M9ISHbq?CMT0Ve3{f=q7rlTq$4FL`s3b5cD`X2@51`hWHK}=G6Gi^hA`I ziP;&)Ku*ri!J;@0>*X|!naPG3hEQ2VVac3^F;lrHkXvF>@Chh4TnG~242~8)XUAn0 zVS6-XA`Ww66789so|d69;w`7=4ouA*!1oNk=jW$s)pTU0ESWI9PESuxO;5q3i4B=s z5r>%zEw>X>sGjsN7&quE*e!wfSC@Cz!1igvPa}EtB=J1iYwR2BygI3P;SCX+$=y`O zOqnztpSkn&qxai2BY08m&RRLgS9u-NQzno-_u`jo>C{20|3tgw>gC zC5_Jd`zf=nq_aGNtyT7bh0@yil{i|e_33!;?=}_;u9#B~PD8RB`if0xSMB6mH0q^$ zku8m}j@}Vj7uYg#NKj7>KQq-YD`i2u5=k^VFD>;sZcu8s8pf+nO-}80b9?Le96-^GbXxy3NVKhhc$%1q@|uY-n^0ekAblgiS<>x9oi3%4eNC zh!n%!&tx7lP0>chR?;~ztZ-}zt|&Y(F^w`YF~u^DG6^?I^Wd5fH~cE6Ch4w8FHKQR zqDjv0mOq>ril((Cb2Dt1G-Eo697F63)o7(;M42C-7ov>!_?I&)&|xN>m=j3IylDy+ z=R6Q&CyVTvJIY~@?V0A7k%e&0_DR!AGJ!bRN=Z)|uCQj9WUK5dE-RuP+6%j-9369U zupu9oxSq_mLI*|JGgGd@iDb{5lu6V51~JF1=IaW}RECBWp9yO!L-KG(0K>5;r!KZ8 zB150D*+j8LP6j#^HP1AyD&mNd&pZ7~iR!Dw4?Amsf9y2iz@2sU;RcCzz`;Wcr~OgM zf#V{2o~k%x6fYIiZ2AGpxEGC!L>bOs=;A~T$s&v!xpewFwdwQBGtd0+5C3p6raCmL z{5s2GC(p{-RP81i%9&o9^*w}1t0bw3zNVz=b{EasnzChAA>4XEuDR9R*Q3rJwcVAt z9vpnnJ<#px)JE(**FQM1{~oBVj5LKtDTw;7c5vjr=z)EM^eVzSXS$Wy$`~)WWC|>o zhb%T~Y%3{!T;ckZhJ1j@^5hIAwPa{Lq#G=(J#RV&-C+XsjPdLgTEz6Vj1V?B_+`=+ zo69nd^FphXW+F|KeG-OBH8)C7@8lXY!$K%sDQ`r8$#B=+7X!IxBWtTxrT)~<&6TgK znj)38kaE;mTWTsv{k-0~sYj*8mfK%zSiWxSg?ejIxz3;Zsh?^ln_9c{k|NU-n54Yq zBXC@#2O|@d({T}&53Xk@6F~M(WHJ<~&Ki<5ZBc87rAUR9&}u~dK$Iow$caf%XbgiY zV?t~hV*k%YS0z!^oL+FB&|*nv$dyHujb)Uj&E@3{l%=JO zrN#B7g|)@oYm2wm7H_UC-GmKuW9ilgY@5s4pkZ@i9W~Ga6$vep?UCsUVw)6{GN3ue znetfoFF>zUq2$cc}(kTx}W~Px62LAs_Q@L4On|~HQ!l-u6uuapta{)XJu`g z?0t{F_ooB*^;Px_(zD`Y1DitJBK*Va?^z)ThsFqsBOr7JIp&U2L~2&e={lxTkB&>E zod#(cOgaWIU#K_diYQ(bj7Lt2PJEb>b5&N#&@E;96U^h?W$R>5WLd*_I2WxHEkalS z)uhS>?TWoSY2GXXfA-^;?v@O9*SC8Q4WpZG)VqJmv#J4;&gr3zb$bgo_qX0uw;O4` zYg<)D?EKWHK6Uu;;o9A8+`PE8a-DHVQssjwL&HXPDt|lbo38=oR1;5GoKJO)X!qE8XEMynT1 zm%8Hk1WOna!|hOXEJPqgBRC9DmL|kzG6R7Srh*d5{-Sj1&I-sAV+=)Lpb|Kc2t`9B?3xbLB;Iz|XJzfQRa1sd z=Egw5292D&1oE(NX`2y`4A@JneUUX$b~qDp37U%|CuORU<8jcV>c(Mh=HpWb$|x;E zv;gEJ$I?fheL~@yjMCI2!#AECEYcGwiF+2Tvtt~QyfW|a{ENT)_SsXlc?7W6#9diF zUKd-LuFt?IuA_7Tzx?Ewl7*;ZPU z1XMW#!Y$Kq3E$AvCgjIRjmEEjX_5hNY~@N|G6MKRSx88$bCv{9tkZasa0PY(*&F>7 z!fT5vlTl^cN7^xA9#3#Mh;*e`GVM8E?ZV1b4bY^F)>=7NI&Gfe_!@D8cVVmSe{8+~ zN7m$&yDcv&H`~)&t~G1xrbgWJotE#pe7RQb&9b=J;F=oL?c8qnUS9Nve&~mue){R! zk?YsbtzLem9#lpzK_*TR+2%@c<#YHtGA)IrDN2pxhDxxO!_}&AFXz3ESy%+K231K~ zw*d*{5QdQwdu7f&ug^AHB12C(u^rfCJT{+SsVo(P&3n= zPY>rZK5YURUw3Gn#>|}&aI6he5XnmEWDNpN_})b7c?K5RtCQHw>EPrYOK(pcN6$|h zV8dC_j*2nHlU38}QTF*v$R3Zw`34;b=UBK9Z`qhCA!vG4UeqM3+)xCa7XnQ0Nsmgc z2Kf1kD`ObQ`Y97?nIumn;H|KtNd{gZ7v@#4jdq4HSK00BXk2IR^W@5Cco$h1Y#Q{VqxC@!IVPN_C!LFwz==X45}ik*WKwfZa(p9`zkD5 zbabSzBX7r!0Yq1MJ1dYWe==M7`|u{ zWGE)09vPoWt0{?LqQJ~(J{9De5KRkBXSikNFkm)3FGwk40$pJ3>>zK|D2jw5d_piM z<2hZz5b89Cx@F?_$h1MvOtH>j0~|AG5<)bUhJkiWAnovxwWtr0l|*6ch-y>IR<5c~ zK6sof9l`EX?Pm%^W+o=6O<=VxhI_FE9AFc3;ML$y7z;lmpee^|;RpKo!}@gA~C1z`W0X_Os1rxq9VwuPVs$qeAqR3!L2YHfM%uGwhy+%x{Q5tDLGG?`5l46oCPUX^DT5 z*7{U{xZolfbhVt50Smq>dGFr;289`s<8lf=|@I&O5!e-_jacT!Sd^`TwZmUXWm!jTC z>n}&vgp%ZYO|L>?9z!p3&Lp?Y%5F(U96Gq-JBpcdBH=ib2eOD^ zfEz&9_-1+tj5%5j@t=xVb8O+%C#XzKzo{`)O)p0gnhZIoKt$IC15G>v%Fd@ByI=C! zYZi&FvodUoJ1EjWYWSv9kZ(28sl$g8#`9L7)zp1!NGTuCs=)Ol)|#>?OM|8?Y870q zn9azlTl;G_+bZj7$K=|wzLLRPzRhm+H1DWZc{e}*ee*Kgn+;8a(yL>5a7AL3N(suZ z*P1d~KDC;Xx;JlkueAyij7{3vL3{x^5V9}NM|XAZ;d0xmPX2`NeG%ovO7_~V4%&0~ zJ+N<(UbkDTp*5;nic;%g`t#WJxGznADeyip-maY~R4HN@urdgAF*+{6>246w3aI1p zq-2CZlv>y86RXfEKLif#Ob*d8V<~5|2{DE25&p`;*_nnuC5kB0LS(?XYbWgS1NwPq zGyzhnvh?`1R5g0QyjI;P>s7e}%Nm-s^{AwqLRPD=Rzvw`E7|7Cxo>YT-vogx@yRe0 zYjB^yawRQ1sAy$N7A~%kSjtc4qzWGERdJA?abSQznCu83;l)RG6I=`i8gguyEkgyd zbK=Y(4l%VRY+vMS;YJlLs z^l}WIlH}7EoK&PX0iy{RWsq7Rr5uC-GhAv3S%E@bB89rmr^y*I@VSAy;dO{c2D(u^ z2~<}+PL6$(wUM!Eky?;mtTGS6Fvz5Wc%HysFm2J~CC(K`AUe_FwkiQ4mF19yagxI@ zJklpt1<{OC@KePeT!JfGl392h30sQ3mH5yeu*#>W5?I>oK@6*lEQqwe+9W6!V%uZ6 zLC_chgiNL&T33Ejm>&h9gCRXyj0n?cVW4Ahfp)Nh=216x;ia!!ZlqI(@w{f)D<@-C z$odolO##(fTdS1l`c~Dfu0f`zr0OB`Y6o{~WR|oECKNzC2YYsUYP1UERw-KU>{EX3 z@z>ctYF@WtypL|-L)p}FqV=9iAIjVRp1rAkgY?REg^bgLn!+B1N9Y^|J=ihrhGm3T zV!V{?t}i1VE<_*5f>cu%4M)fxaIL_2p)%#h?uzl;Z1XhG3ruE$UZg9&)6TQ1xWwL& zQg3-{>HBM9Jo)64rFPOy5$Q+3)t0Dxs9&`%YHdIhWwo}g_s(wWU=Mw(^-gO$KmYm9 zx3I9>xVW>nkWx{b;~wtFa0{d>Ac!|d#_8I}4MdKGZHne8xdPgLCAUU8>1FejBVkKp zxu68rET})j$qoq*Kr1pkF@wx+O#bE~e?0D-oSC1ToyW%bG#FDrmttm4e4`|yPP7VU zB53)6wUSGookATRM#L4tU>fL1>*qhU0SFr0`i``dPc-qEtd}-v!b-WlH4Fo0*f4Ey zCiakU68|}Es)3uxWQmHrHl@?mpSS$rvwa2l_Z~t*%SD$R0|F~6@f=!D8M9|6Um5^9a+7R zhCuPMl_)adWhtIxlEwob(fuvccS+!b;4 zmcvaL(?j6gtyFAcu;waN25kKxuBK2b*W=1xn?iV3w7KgGs~_RNYbApN?y3j!5Xzn3 z>H$qMPY}fDKZV;{BuKOe`a5EWLs%J zNPO#dN>n;xQE_@3$5;LX$*ZTgotl~jvwnqJql|~tF3bke8{@e#O$|eK zgOp{fnpf$jjadULkFTkKKlp<`*o1l8tBY$_Pb-xPvY$m*sIswj7ZVMh_N5odk7bqq#iy)MFaqk!^$LGB{OZ&qO<1V$d@Z zNl!9;Z=ZkZOHHW)LwY$GYm>B9lH}uSv$$0_w2Hp6hEmkjF4s*Swo1a9gek#TS#3A> zir#hhxYHh}ug6)BJ@#0iFNMKj@1zIvE2%j=YEP$i0KAh+e{Y^!c4PL&Y)TbBj_jp5 z===}kXsML^j7s(m(u*Lpu)Y~tMP_gYux0F&$9R|yvSmwYixcB}cw>d-DnUW#E)GaZ zBxz6=d%T3rc#NQ^ix;`0f$}84;c_Zzb{ zm77}qwG&&lu7p4C0OmDWShiLd7T^4;9qo)!N+v{(E`S{=xbPkh?>H*NQg%t~0mgY2 z0tO7ez(yL*e8W^#Cc~7LUWkswWgZvTD_}%ivZ2Y0i>bge zw!FQHLNgT1Vr1vHkD_iNIVF0D#m<>PfTBf_C6H+tCTB+`XPm5$MoSn5X|bH9d*Rr$ z3N`?rsLd+}AS_X#*^^l`Tp5$1FN4D59M5^X_7)o;jd!ubTdS(%RD<}vn}~R?n>48Z zz3qYUoa(s9zCn6=Lj)Z+^bIOQ4!!BHDHOqJq-_%!U_dH{2t$M6Sxkr}1*TGCvObd% zFD2Sc1?hyA-Mnt*Oh{|g#p~Y`msAO8CD+2Z^b=Z16k?N1lrmKM&#KUFDV4%Hg&vxr zV`llz>9#sIQs!u!z@>Y2QSX5ji{r^e!OPiZ(&wA}y&bl9SNpDSjttVe9a+=2x@kY% z6pLna%a>ffdU;rnmXumxsh>6X_r7lPat}ZJ@KaAc)jVtM#+x8QR8nvtI?bYr1yYet zPA`^d9>bd9lmj``3ZYYC7O}n?7Hk@mLIDm&p$Kb>R?wJZTenwoV$p(W1eg_oIB;!a zZFPNhWo>1N1v$Y<-Eg?C-lO6 z?6&qHj~|o6YdaYeY0R;sU>MwF6H6uA;*=d>cx-BDZ1RqfaF~5;sZ;8C?-41BJYdN& zBhyf2s8noNE^ zK;=RkFN)EZJVl*oA-*$hkC=PXVZ>mBWM-5x)FkQ?7b`R4t&ysSY&|6G!MEvo?zqs% ziQ{dAGfijYk`KsfuUUr_%Dl!tMDjoecB+Wulwo@uQ_AV*Hv(o|aKqX#YlkMStLd(_ z`cS11q`7iq?a2p^D$5^%AKYSP#r3z@V#V8OnjahxQIS|~7`l1+&9~0HTAOZIXUXg= ztr~C>$YmkW?Wa;o)TB-A68#I--a@sh#5a#`t)WNr+_wDwX+6EwKce-faQZ%cmG%F8 z_TrJX@tGB)+FPvk&%Jm*d%I13Ro2>wF<)vsO~|*avb48vdeFLVJ)m{nPFvExL3*@` zNnSf{qaP5GY;K$YUYiaws3KG-#|$+$aF&g708+lLjfcsxD6z^#9)*hWA-z*6RPGWeoXw33faOuF&$+}NhunX#QCC-QeD>;JT9u(n8;aBc7^O~n$n@&%PSlq ze6S#Gqr^mk{odQgHnAO)j^QF`CVdGPuPQk!f);-wt$8HkBddq<@|oDfSs7Few-TR? zVGurGl4NAvDoju7D@(9#GRYgwn~R&aYRWbRlO`=->&jgL+ES((caa|{-Cywt=m@I$ ztgFkOnKC_q4Mlc8@u_4M(D1f}!>v&$fvC#J#K_3x$S}UWhn7q@--;fSOqldn1SaM) zaLgi0b$6yvjc4X)!@~c;?v(NrwUIEmYA}Q}av1kXGbcjqoI!z9Jr!q97-l1r1o167 zdrT#Y;WUX{3mjLGO)(f#^h&VhQl799*GgX@=9LJviy&3QY}D}FlaF|r(23^bg&OXl z!lMz6YTi`hQy+wM>aFZ7Fs=8g@7BaZtCVO8oNgjzS9w?-uH6{qo&}E^oa=SF~$p<0&jjdpUM1s2vSWtYC3U3CIhIfgv}wvD~GpbsLFvYlcAy; zu(WN%wnKjCA4gb7^1rNz6p%9W2ugo6J0R~3fDmWp9P!S+P?RdapOqWlf;2D<4QcpR zdJ>Y}UvYX5Jn%qGfp{m=zMEdsT4!^Cxrb&`{?tu->#bUqDo$%VduW09=_h~kC!2S% zcKyQU;|@_TMwXiN>{3FQ{-Qt$YA` zV!UJ?^B}R1R;{$<9EY6KcDp8gE14jrNJqq1>JjH)2%ifBK;{lsHigLgps>KijFOT-DB)h12W5CnR6SrcnS%SP2y$jf)uRmW>gQiQwADXjg+*CdI2361W%*6B@3#odD17*x) z3AP?E_t4HcJBosK!fI-wAYyEcZSjH{+h>|k`D27hGm<)rB{kB!+qvG-GqJFm(I*82 z4i_6iHam3Z+>0&g)NAZ4SqWu00R^aa5aw@d$hF9^>W6ItJrKqW0iU>22Tgi83r?j2Bk1 zz6@jXB+985VyU^OO)XU$W<6Y&Fi#mKN^4vlTblSl8ge$n_?S@k=(d_7bow%#?yb2{ zQ$f0EA*H12ww-URA5EfEm3HlsT7{+llohg4K-W~I^7z)DY8BR`JRHWFEG(NVx0f!x zD91AqDw<`nDl!%cX)yn|=ov-g4_`aD-qEat;44KmtpS`+{e_NBtd_IJP7S+uUH;+E7}#Ag;3e zc(6f*2`%NkNYFiSPB>dCXi|th$H)nJvdF@Dha^3CW@)FmOvTotusw=R$NV`sFs*S} zx~OE+B5j6tUQH#D_hiBznGIzvRJ&m86rm`5BfZ36NNmCw3eb|U$1=@CK_X3YzCqG# zI$a0snegqDVY9GpW=a)XT=ia2*Hwf)Pe1lhp!KvE(6%;U3uO$)$TP9Eb>Y=-Hsu2h z?BztR34!v@nm}t6cg5?m#iwgmU{;fRwM%pphP6i4uF{WxNKFp+kh(qE&_n(=f7(@0 z4-V+32ejtFM3)Gvq4XOa;WFM1rmZ-_hsU{r)g-z85ATeQ?u?9XkBq`Qesg4aa|nNq z-5JF)8(urkM`~6`h}j_C;?BWGeKNE)6a{@WvNJTYslV6pJuPlHw2To7&Hb3D#1Bb#A>rU#K}OC0?0QIL*9ZnAoTBbJs@hsRNq&K`X{<;;0^X z(bUgc4{l<)nqt)LfST6T?a!KCpxprSOD{Go&J(IGnhpnXe8+YC;+DDDPcKh zfpaPXx#-CPXzn2;#M{Q3Ly>*f^JO4Tgq*?E={*V9#7I}{mi;_~DG_mWL)(svGpVMM zm=#&?;LpiHFSp4Qy=AnPdP&3>IwC3JY_krK^Ca93N5>I6$M8AlgwVke31)j__P~?L zDH*`S%*lfDR@&FRAgl2S{XfWcXl=e z?Fx(++W{S&e^1U61sxTUR)lxbluE;?JXb}I3ZRY-XCgkbQ-Va4a;{i*OhZW>lG&(4 zlSO(@C4@+XJ*)6&MY+APEW)1UMKJelfwm_T_Sl%of`k?;;Al}Hix1-fX?D&j1evD+ zV}?(cV-ql&A(WBs&(V*hx)D#0XnXL0o_*#?dAHhPImuI^5TA>oM;qpqRq}UX{?Xf4 z&Nc(~aCKzZYf7Hp@NZXv)HP@rDeuPkKe1J4Mo)O}o2cLJ=12qjEZ?91=x9KxR(ZuL_ z(KvJE6;coDV_qT?#k13jDv_)G;q+Z=R2xp%H`w8wb@2W>+dwbvgpGVSfSVo1Yy|kt6Wmfx^JkZ&b#0k9Rb1(6030m94Z^O2_}go0Vy}u zfG54Z9+0vVTVkP^_|P=!#F@5*BrsXx$to3=wd06$qP*i;ecu=_fkPSxB7b^+;LxE} z17&#DrxX}29T;#MYX+sfoGBmLuYzYxiQxov1V-OUlqXU>69!CnI zaEr8yW#>mulM&DbE19+b5weCDbdfv*lf?PK$;2r33$a}APnsV^eX+T=wZ(5|>n2B{ znG#`Ogk}$4N9K!js=Bo;9LywgtNM2GI;M#eYe+b8no2QKW(w~iI~+4W#QZfoiL-$_ ztz2#o*+l4RiEp}GqG52GM3^Gr58bF|mFC|Wm>TSj1{nJvwYNgvm+X?hihdu-lf zR3Yu3k@s9-i>ZCyFc8b%DJU+*GA4>lr>g5HRSHA^NHVM%q&XM4u&}MC!B3NTCY91I zyk|vM!>~X)wK~5!3SnqFa%P64j0fXz3XnQma_|P}DJaRmcs>BR_n%IM0m76O9O=YE&p)!oV zdIaJYb=yqIWouvIJ`tW1UhIh6dgj_8%g%*YzIyrWshSAN>@2PGy0$ivJ`Cvmtzo2_GvInBuReJA}x7LTCnO_Ad2+H3hGtriJf)^QdCl7oMk%FT;O$>juoD z&y$xgq)$~LY7BTA2MAP|NQEw7Qm=5NkmUGuE|cTaD#DY5l#}D56R;?d8$$MofXv~6 z6+$V(1dZaf*3Y645aLOhB{w(MPy#pNPk>B9P3>%flr&@Vtg@gs@~05BdJ*3C$smxc z$PP-)+IBosc~Y?2B`(DQerP0WH$5rOp?)0QjvUBMBQ+1ZyP^;xH42=Nqx2Li$jH0hrfQG>Bsu2MTcD6yI{> z1!drz-8<#(h*|1(CUQlm#RMcn*xL${H^3saxqNeT=@vJF`-Jo-EKDYj1P|ieXMx+Q zLf~W|lEW%CnD^X{tN?iQMG>o= zOJGG(Q?edx6V!#;Bp=8~qbG~s)Yz1YlY`Ux6eKJ1epHB{7rw#))&8ylQ>1HmSVgUY zM~?+W5ARkZ9lb^}_e@8%w4i2_vZ1D(9|fOHmJ^aYDvFRrMhsfVu(xZr{RUEk{G}z6 z<~0(H%KcKy4NO!LjvBfL zbI+5H+!yX6au7+GCzHFZuVuGV6koxFJ;TH2U;f(i?Hjep2(VXUXQ>IRays|;Da#qx zU!GO_srhH~_*T(W6E!_9(HpERtMFZ|T2enzdI67PMlK7_q|-vRWhrILMv^vYiK zI&~;c!JZ~>s;(t$*?EOnAnhoJd zw0)ou83G>)C9>EiIbl1be#M`GCjlvmC&#gqMV3h+Rk>6<-X)f{y}E3_2xoF9!KSk^ zRA3VBtOAoOsjLz)Mmh(>LK;iLCl-#cfh1|(6!^3+>-faPULMc8wk^Nl^UCqAr<6KG z6FYS~Js(+9DN2Q`A8n(bV|KlTCLqKq$kg0CaqY(Wm8+*YqGFLkAy1JZ-N~jChl*Sk zvxg^X^pW;JDaf3B3c#B@iq;9NYk=#X9`D49;*?Zru~ZEvjK@_zMQ=uqc%eQP1AX_QQLA-JN_*45grSa6msOs3 zWsIbYFBZHNeo5#nr&1cKX{*MLrysvRBK2IQ;jrhD9+1qk(thRFY7bEY@6nN$zWN)@ z`3SIw6`4|Kl;X(Ra264@!+J;_pP0X0XKPip%JY$B4c%mvD{Nw|ZVfIgFWc6vzu79w z^YX}igJm0Px4f(592{^jJwPc~jVO--Kb^#8oYuYNG94V>`APxyd`2(3?!C0_!*)*A z*gGtHw&{uGOB85)2{6?S7x-x4Lm=J=a}_}#I|x!4K#jwhc9xQn#L?lvDd64q$pBB` zlpnUf{gB*Gw&+E0gl=o!AU&@C1mOzT^Q9EovgQ|cUmuDdAsk{n*cTj}mTD>crB zhpd?>nl9puIsjw?XLiC%zL}U$kITDGj+{dBtSQ=R608MgE@0cd@*l(oSg@u|61dTb z5d|FeEaNVAY7OIL7$gBKb5aLx5Sjvi5|IX&B%VypuAx=tMeltzn@^lLQ9ig`UmK-z zV4a}bDf!68z-ZAn%GX{^)yS8qRoLgBrN&ck=c_bt!Fxcq*<@islJxZ}ry?0avZvT& zXVMYH)4PPWoOEUzd^GJcNECI2jW~Q?D@M*K&d8g>gk}T}cj##n<~|#TV*2W&%EvQB zn(1dx5Lv(k!xBHFv-Sy(aqc@H=SXfoAWKn@v=s7gI?B{oQb3QB;H-Viau%$KPS zEYk+c{6}wC(yy3XweZk%)zzyeGWezJ8sc%KUn|F7it!Z0R|%?5xzuD9pSRDy)_iZ( z4Da0}PphD7o&HS`)cUfl$&*r~^f>-*uUHeXwLhyRXi4MpPq)W=%CmY1`C8k2Bofy5 zr7H{$y1O0#eNhF{(AC?58X=p~2E>6TEuxmUcR;)XPjqg>RXtof@9vu4qequYJ60P* zDrqlQWA(2SY|*71ye#;@wH@1d3#_lME-x?94uCa2@pY9mNFE3b8)&N3#Z~tWYWN-< zAYsu;E12qqee=wm*_JJi%y^+C_KESr5l72Ow&R5h=5Axbb~9d^bb`Ekcy4yS_Ip2q3{-y?FU7?$buo+l=pfz@Zs9#3djW&H=!?jlZ_et*Xfda5mpNX`7+SK>#7b5g zXoTWSQDe8A)u2kbZTpT5V74QP4@O6#*o>+8Je%^2NM+YiB~Bed2AaS(K~bZe;EWk_ z`fR7tZYhzb6Rn_yhq>a4k}yC*}Qd&PnLgoTC6gaqU61IW<2mMb-YgVWTU(5_qw$z!7M|hsTtu!?|@w!-oNE1qU zCgxApgOiZ%B5`cO?nji4?+M&5Z+1Kpr6l@R(Z)F0ppC{%!;l1@!5$Y0oC49g5V>-o zNAvV!4_htr5D~!S{=9}^TWu7ZbZzt8**g33*DjxH0eheS{O6m(q@3eD=rdqPuo$wLYxj#{R|i;K;suK$bl|9XW6sX3%Rx z*u$j4@MV%0cZ=b!^>O!g-S4G?Iv3vKuR@8}n@f?9G}htG3u@-I)wPvni1CTBVJLM& z5SlB%dbih?7ZI-xKnPb)I@Q7l1dmHE{)`L4b)@X!WWU{4CV&sa5V72g@Dnm`=f&Y* zM9Vi>IwxkxzHg8omuYSGy33F8(tZDpc+tPthJ) z(XMa4ySk%V3tP!Ham?n;b95p`I%<5l1#KFx$gzWd#PHmOofvE@D3ko=_9VY2{F$7X z#Gm|W3Wd4ORK(gsHb|y9H=n1z&3HllBeRmze9Mt97&5f&H09J2B0)l^1(ku$dCE-; z60ob{=3rv9T*T+OgVkm`)1~J?Flt9b_m$voRzC8~&}jl#wpDpTavd~GZaz~%UinVt zGZRbLwyJ>}hLkX}m?6y1F@75>G^r7&@HRzFr+!cv7zt)uC$TF#{;^EZl$TzvRawif1hL7v)I9yxl-3k`a z*>G)j4K!fNhAEU7VR8``O|NsOLbOYQ{wclt28H z5qf5Dk>h)qG^42mdt4`>m0Kl`DeZKyK?*sjOt^YMpMB{oZ=HqvbjJtlG7i|wa-)9< zP}7*pKYL4|T_szGzL(}sQ%KhAa;+k>_cY1p8INssYbOwr|64?*eEQXP^WZB9;%9Gagy za&T^L8p~aG)?8Wual;l@=k7~iRGHLwd!F$tl8#rPmen))xnx#*Ntp* z^X7%^1A7W@o48=BE!FoH=l4dj7!F>^u&bnwjIqEWYP>JaS=AGHR9a z`#IQp@k)+c=m z!z@T!1?J zF#a?Sfn>sA>+9>-4-mMzx{5szkd*xTK#LvpdD#OEV`!MxtgWS2)!53~`t93G%WLbf z<{dk7`2PD&96fO0!IQ@yd-#Ee??3VIgC`$-@cswxJ2pK9uXtufg5ZJ_hleMq9KiK} zR|04{7nc_K(m?LK&Gx6zVwoL0t@oe@u<&>5)-5^lkCT@c)DMH`K4d`M}PM{Xz;yP z`N9h?JoD^x9p{%`;aZQEZvd1Ac1Q9tE1ZpeyXDyIhI-nLDUR(6Ealc2Qul|j)H

5E-i3$0adB2g1A#l9!OYvYQ4aPfKU1s{GIkg)AA_(vOOyGVY9ud{!|*wV8~5 zzNBZ5+g!CYu9vPBcN5dY-K&poq!N#=&R^AK-I{z0eklIVpAfH10OCL$zi}Ro=1)E= zF4SCQ%adPbEgP?NTDly&f;f|YjC5;^JaxR7AZfBd>ha{x*AKEoDF86_h3|@i$2wmz zX@0B%Qqh^krBko!9y+RVFO?6c{?IBRSja|Qw_0{|mEn65y_7&|>hJVy+2DLD-b^jf zO}X3BV0GVDPa+;!*|&Nq3gy%ws&2>a&5u7@f78QqpYQCPK6|Mg5~-Iv#z}41#QhEp z9e&`+kN)saG*3T$`ZV5smJgoYep2P0Qd}@!mZV&kHZk0iF!BC!0%jqT>-2@FbEhL+ zr^j}#5L&pUmUp^^*a@xOH{t{MFhK2>WU~MCWWzC8B>H%ZYu5=3fU0~^3)tKP_{sO^ zBXg^KE`IgF{xe?!#{=p8fj{sES{~CL*o9_)@{^z30}bic1dEPtwgJWtU%P(g;>Gho zZoqO#i>^^b#f%S&%Z6Nzfj&AncK{Z?S6)5^nFK!)KBMiSmDP1<1rI#%0Ib<~cJSEV zN3lik+f!p$b7jHHPb8+{F!(iBZoT-zm;e6X{jWwgmq)fYkDt8HE3{(*ZCQX!PE4DP@fAZwXKAZ4Q{)b=tnV(*Y{_4cHn{cq?Y zeE`D>gysu0)SvpbvPNBM!L{}!m8qW*ne@5>WTt+5FOXht64om4>8FK#9`kqq?%&Po zLJjF!@?X|_V3*SsIFJ9ZB`AOF|ByiZg?GFJO81Vn|1HUaQoct2Tt@$No*aU_cR>FI|<@#3V2h zzGI`(|4A$uBvh)t-){#%-BdL(LOadliTG9{2v zP4+QR-K6$(;Lmi4gy=;251XFv%PowD;p7H>4)F+zJIGT{AgJ>b7s+>BKE-sM0tT}i zQ-`@nIcUo&1ItiLj620`(*CJ#DdC&j8qhw}{d8vu@KeDw>#1VrB6VA?ry2n9#?Z6R z{o@AK?l|p8!ypDaK=k&hGv}*uQaoU{GJQHK%=iB2$3J`juYBRq6y)a4+gIPF@sznn;XXiW7O}AG++J7!HQy(G;P>2KT)wez z>&mt3hmRZq*Wc+gR~~xg@uxoW@z4L;e+o!%d1I4w@PX*^Dxp@lb+K5~`GDrn_XyIv zdiARPpR=tyzY#)BQ2$%RVY%er`7=ND_(^(2%}gFRIDhmn{>T3hAiZjZCYCOnFSZZp zDfWL^Em}|`*QdH?>pxAXWvwO`zt=-Kiv@jmTK$v4>T`U3wPF1*8N%p*6`zhvm6y#+ z=vsK@|LKm^V(rK}ruE0-V{KdoAJZLnD5OzIc}}gm^3T+F4SlEor*Lma9y)XgZ-sk1 zx7%4U2>Pouy^0zdY}V`>_4KH}M{U*U+^u1`l5(T<^yUG1Pb__MQtGg6bokc2A?10$D4MTY6T?K!JE{{;Cg!wD5YI5kE7 zSw$D}n?;A@=t3SQvRW_>xgK)YBA(5}{Y)gM%yhOBmfJ-aERs z+MU&2h4gxbi_RupTSd_+rjsa%Nkxy@o}ZC8AmJ{_GJG6JZSPZMSZ8dqX}-hngv2nT z<99~Jc1&tws9-(O{69f|McgcC$-okOXNE>5RGsm*I9HAZCRye5h4P{Q{Ww61J2f+V+wb{GSr98^e4;VvLrQPEnuh+!2- znX*0v>r8fDbvpI&a|qabvz|^J6BZM>6c|kjlSRBr5O14%i9LbEY+hN7?-RLHU&(z=pQxXJ+Q6r)Q_8 zW>A3c99D!FZ+v5&cV%U5Zf*`B{K+SueCVNv(79X}h((yjI?MNR-*>-vJOD^2ymIj% z7FRcp9>4#<(fg(k9Qnxi|G-B-{{7E<%ibP^ z<#KgeSm#=4yaTGm=)HX#ovnkgNRB05qxK881>iOBD)5tVRxHu$%mmr`>W8utoKQ8O z0FyO@m;NlS693#jBKvmL1Z04 zCdx7r@qvw#Xp`H7oeYIyMsiZN;2U%%%Gbw~ecoWW6!xdED6_nn*2Q5_vHroxLu5!( zNE-}a=9Y|f>f!eoad(l&+|h2N5#eD<-={J;JU%r%figWjISsN(Xd+st#^N>jLX}Q% zJzB{217-1!*iPOB$sv`|F8n9MK$m8yN%uWhz0cOCNC!bw857mdBk{o$X2TdxF`bJ= zAf?fZ&IiC_PJ+mN7t2dZ*Ps$dI-n6j8r&J7auGDl><|&PXAnb5mH3!XnDR-Cr@>81 zsiUCBoP`}#X(XuFNf=E^946K3lv6cuylrDB4&P8&U)A^8>IODYR+iUS zme!V#&T$cht_)pA6PV`%e4F5^i5wUS1Tx+-$2WSz3FRwkDVJDT4pSp_cYJA5yhhGF z-8Y}pGmkx(%)ef`^MXM6LP`6LCrL}FZ&9|M{m$Ck@#9r8WfHPNDN2|a(;n9d>ZRmbMx57%!a@|eCX&iPd^98TEM)iNiO^Lr@jrI zN%Vjh#UQwpU}0?Y&M?B@hsGv1wuj!nvGn%sm0N3IWtkWS`aXL6*!>UR_t0YxKK8`? z(Gx@CGb59;H&-{V-CjQa(4&9m&;9wI`gi}#v4A3|7+yn0y~(F09i1JhFQ@rdx-$?(c@0qOS`R z->yne4~6L-?xOc8O{J|H+2;DSb34n|Q}Re?u2$ulU0|3mWTz(Mie2PNaPn&@+%5!E zh|b0~zX8KYo~c(lcukzEfHFicogh{8nu`;RB`bAoSrt~g0vTw0S=K`sfI7u*q2%n! z&n^|8IB;_nWqEUD8Jaydn7?6_%DoD5IV^83uWT+aZ!9gYFD$IxzO{1e#>&m>tGBMN zEnHt)yt%$~Yh(HL2FS;d-klq_d7`pDY~qT7xUtTWky4Pg*eB4OA6&zZJEM|M77*sr zwk0spu^1$nRbN;)QG-VMawZc`navYDqs;WOf5!4lS^_|?CbAZ7M09o}))a@T&6}`o zPT^YxRz&_uL*n=p=rm`8OLJ;wtSpnWNWCyJffxVG*aV8`I*~1qjGZLy92uJwfr`vu zNt}f3(gd6Q$Z#g|C$YD%HKJpMC3DJDJ%}QonVUzM1u@Uu95%?%gJMdanK?4|kdku3Y40VRH-Xymd5#t%o1vjUpPbZ2{mCe6qIsIGNP zU$}-^G#7{z{;oSnr=cW|)`~mkWEg<*%3j zUi|HU)|~HVXK5m+{3ggUsv8h0B~q=PeuPykcoA0uix5SiX4W#&=#lbNIvqlLwEye(tS1W3xZ|=YRhH_#gbj zgHL{xZ(%rgtY9IP&ziQ{!eEdLdIPiG9v^nu98>`YGLS4J{}V zCx}!tefsMCZWyn6Bll5Ffzy&++XqgI7jw9Zh8lNwjZX-#{{E_*PWxzm!uFNJYJ?`m z+H>8RQbQf@X=B+Q(doW(bEbS$<~S%-%q3gCni zg_B27T#dF|C`Gl2?o}f99OCfl`AP0dWWXC99~*W;GqOa|Z;d80A{V5397D!4Cny)O zCxSSHTX4lh?1@G?tvQPlLy)1wNz*IaNu}PY73?#G3ki#ceNw4cSY+M=pFSz|1Jer4 zD)Dy(GMC`jy163n*0sXBRW><0otmH1?3XegjtlhxBbZ#qwo~UHS3ZgGZZ#dbiyJBK z+XSA&fMft6dQ4f97^kPKaY~Z_JVtDW6bN)f0NOw$zg6Y~B_aok28KC2nX4mty87vJ>=CkJ5E?YXuXTP>$Z!J4kOf$AehS{La|dVW=6ZmL5x%lW zpa)v+o5bgQ-^j<6Zm#$hZmt_l7NVSi z$`=yQ-G<5p0-fxEYaemfp}BH)gy(AVAn`gOG3;A!zS^9>Pd)V%4E6B_X`q)LBCb^~ zcY{^A{+hsPt)%o#$U>>Cp;h#?O32nDYv#dH*!t2<5!y}I=Jp>yetZwTs6G@;f#~vm zVC?cOGN~1vshNWZj-VVqbmZufL{804LdwCNPH7EA~Vl%9l4NXoDO->CTJaYJfM^8TX)ML+n?AhP* zgWvz@&;7oi_{kstxBl24`l&zhZ~v)3y)`^>`P!`?`SCye^S|(mpZwt;-MllpgRnaQ zJcwVo+D=dFIZ%2*>~*$(VA6XppXWQSJC+u$hNVw%yD@Y}A1`UY<7>V96@*H*wY?4< zOipJI^tg|#NhEt@eo2LPk(X=ncdU~q6I`rTWCYnqt6MOhVNxIG>OB-%54MF3@9x}i zvMlG_-5N71oXHl4F|^Ot_jiwb`KWFhOplf0-l|DbVXMXCQvWD_t?e&+DIaD{rFO+0 zf7ZGh;q0IN>}Q+(4;Gfq>u(SnIE2h86H)*bW2l(o@^J-tu#f8+11ZDD zm2R#yW}?756j{sZ=DHRRu5=&uuRx^uuH0Nn<!l z*GRo6qiQy?72c1@w_eiIz&`sc6w=j?i#ZjPlp)fx%g3_tits$4@HZaQgUCLs`K1tO zRm);>cJ)dD4SmYzQJoS->7Az^x!-P^LT{Q|_6gRcQv|2nT+_+~mq)6F^WpO^e))16 z*ux5rqnM)MNtV?lNp1SKN{=jyn&PW@dJn;6dG*c(eiO6ZTeT$`e7D;6&hPGfqz0M7 zLv^G~hsB$-kGchHdJ|Z!nVOx!0?hmYpuUG6e&h#!;0I3JcOQO*!$kSXXZVs$@`(->PkeB`ip#l-m`UW^xH#RoO z&a*csn228aUctK^Iww~Dv7R4#XEq`fhURKHIjtyHHbK4MYlx6iDtuRaZ6x^E;Y(hC z$>f$$CBF9)`v5U5~7- zMwiOduIKhRpik|j|HFD8S<}++=f^(wvDW5o-Z;<1Yj^?BfHpQ1v1fA0!}bU?ax&v3 zRuv|RX4-BclSo8nl%k{ujOv6%LNpRCOw}#xoWk3r`YX;2JC(wFYIJHwWp-p5Wo~q4 zZWQ0s^YAAbMPlyhnbGN);i>7NiOHey$va~Rgd^9BlyJ2w(Y*w8Boric0Z`l!T*NmE zzt%U`);GXEwYq{-Lf~{;UtU6iKc`GLASMBvFe{0`Rq%^MzRmDKly@KvXmaF}gDVot zmJY7=$P_q8X1dbHRo<QYE zas=g*GKY#1f5TaEV-09Z;f{)dgm)_)T!{eX+G-zH>{;1Fp^xhl-CP%Muid^$H`iO& zS8v0ymA6IR!EUnAUmA<>l4w+zT^rwR)*?Ad220;tdj^yTQsvG4x4^~Xv z8*x+$EOa!fZZLp1p{bmNm1#7yQ6;9I%77mtRu@%rLazzXnhkO}8#cw(19CFxpUKU& z?&&&XXV)<%j+dwF56Y`Cr?+|RF$3{WB%DE9@UIf+J^9$2(}i3KCiCC zM?17m5kx_kPQ7sDTs@sSM#4uw`q3tUX~Lw|V`{==S1HsypavS7qNa%nn-}d?ZR=h5 z5`O9D?Oml}Hxa$-Ex!}t|2=Rn(jGYTK}Vtm3}xRtu*C>K1&;w;2Yumyf)Em=xbO@b;#7v z=)s|pgUE=?GK{RqvqQu4L&FD$#tsin9q0GRfuW&!9WXUA1mQI^j%PPAh2XtmyoiT} z=HNP$ufaO;bo?AA6rlV86K}ph9lkHGlC=8Ls0YUuuAo9QT3uTO-7P+)pY-0jPb`9? zF~oSbE+mRGvgK9&VwEdrM4TB+RRIx=khSWJn$u$Wr(Zb9dDInVb7BqL)e)rr7L1HH zO;Y4qfn{-ail2;KosYumgKTpBtf^*GB#%ypyu!4*cb@aR+>+L}d&Wqu7i(2$%2T=> zkZbFqwUo#7R&L6+)f(J-Q=k9*=UZ7=*57(*XZ5D=ge(Wvt;thj;3xk{t^$tHXaUPw zVmc8}fu+Te&+dn^ldukQmIR}q+&GE!xcUNUN0P}@CgF{Vg&El_K)Jq+ROl)@NYc(c z?J~J2_Ko9NkzSnJqG}XdqfB-}jI3Fe)3*}^w47$nGnOTx#M z2jCv~u$-GNR0YeUEIdMrO0E&VW*!%Fy4cMXs8tjxgxM^%zS3qWPuCPnNn_p0!q#eX zbA@vwVlVli!)dePaYg<#apZ`{HHX4wPggs;V)0Sd-B@?fii2@xa&Wa@ZW>BnO3R+E zFrU#-$@K_7@faTRbOlR<9=ejhS0$b}V+F<6iUBZL_jHBbI6PhL5v@!=_K$_vaip#H z`>9$_(*!iTtl3-@wqyujzGW`F^0lUP%IqxNKuZ%@)hfAXc~}#A`A>_cjKuOrd0qQq zHpOOHiHC;I>L#D_@qTIh$ePrBm){?Q>IOY9=z&2G?5iG-7#j?X}_1t36Fc zA@A8$+vxv3yD3{`4Xu}J)nl41Y~sN3#M;%nk!^0=IKQ!YH8~zS{{a>B2uouq8vdjO zPeweB5fawJ9+E5)hKN$E2r`l#52W@8NRu^>Ha#bHqbVItX|J&JPtH1LVV!1JbaKod!QC z#?KiV6b*<%FbT*Z6I&(>6dE< zS3*AGm6TzE0deF^L2M0R>g?>)+#Ee!Nr*BB+z5=ycGA<;l$w?u_R_+bg4r$cxC)GE zEkM6?c)Dgr)}V3?0?~*}6pU1SqPADJrPeE2OxUz3$*$%=XQw^zqIZ`V&S7KBZWgk(IBQ(l$Pd}j% zB_3Dp*AUW%^OSJ?LQ4-?v!JtU*o5Y=l@Mp9GRV^1UcOVMc&^;Sv81Nf~DF| z{Ybgon3}k2J-1thwf(iKj1}Y6*Xh~PJh23UwO`>k*uR7y969KLK@SXiU?28CSfWZp z(1?Ab7M74fadByRX=P<)V>4&Z*hBXyjMrCtDqqKB%nNtPVr8|TitM4~SH<1>TY9bB zRDBghl)l_nx|kx>%FHcgA4BH@GNe#&y$A==f z?^KjUEyYho5;R#_lKSqzGZY4)$<39S<#7|4QYA&-$t^Q%P0AT4>>`gOVPJa6+MPAK zxrV2!TS)d4UTAU}?yM^Cah)HXIWRhnGCw*s2jADx>FH61z)i!u<__Ilk(dsM5!tTA zHbd}b>sR=W0w3DDbrUX~8*3ZHjjQxpC^-~a6geOyIyXtI*c(Mpw3eU1toPLO#qxS)j4b&+E&G3n#whKx)Qr8 z|A$g#5bQ-Ii4L0X3t=9MrLg2qVPl@{Vwug=VouKCTNeW|HoO zNhuc}zyAm$Q5}p*B&>kUoVmm+bNLM;Ltl!P#A?gf?aOB`pJ`!d$zZRCJnaW%)zDN^ z`1D3!7CxBu^uVA820idW^gs$ud^oorWAPbH1=SYznN6ZQ+GGsySWkd7G1rrrk`xz8Lcq-3Ox{hR5$D!} zDTXSzX-G&k;s`XQR&xPZHI2TC*)pTZP-ACQM;?YJs@sz_?oM?zR!a~b-YP#aSfRy7(7QJl{$k&cEvCrmmcli)IeQ5277 zo1U)W=DIyHEKgTDT^iFGWru4kOo)7TGNqcE#<)?Qib@BsJaWTmyyC~?vzpys^{c%Z zd0!~wM6(&_8lwuP;s8c<+JQDoq@G92TSUGoE4@PCa&iUGw9ZVRWM@|;i>G(%v{FGR zmwhCM$b_zD?~J@0#F62N;1w=AxN_WT=)#*HWdf|N<6wE`WAc-tXR=6l82-b+Zg-A) z306(}yM|?$e!uqJrTvrf0YT_0w`0$7Plbk5(J!`ea$Xp$GH+yrXgYq9U{B7jCVEx+ z5WBo`s3WdY<9r*Ot{cw5h*?9zyK^sosRuhtP55+^Mc!W%JG(-orclbzu6Ay&x!k|2 zJS=;%_2AN()0eK*-*^@k^1Q2-yu0t6L2ZK`81%rP2R`5)NLqW=-bYN0cXQ$9?S2A${;VRi&C#~E*`|TIqK)e_47HU@B zoyl0TzXGEld=UAp?&Z_e8?t88)H7Ny&`p=>XMd|+Rck=)qB!N@haYYw+r*LUSI>kF zs*HIkw5`$DvN^Q9IjnDh6&YTT(azlcw)`rqUQVy440|lB2XGFCk<~k!t3w+rch*;S z)?pGv%7JAX2G>@1)}XeoZ^J0W4bnoAk7Sb&Zf9fb4hpxGR*s~F!B81)hn{w}-HFCf z2ASl%Cm%;ANmrdP2hmi;BzW}1Lvn58SSLq|RB9AjY=Hfge-Ct&^xsovc9zJ)&b)l9 zux@Q3I9Yk*mE*wSU~-WZU!^k#3NEI+2<9ANXE{Q?hMQkS$L&0JRmQ*miCJ$0TA3D3zV2Q+sB;ujD65s2an`;|p;(^6dPjh{X*d7lu zp|D79p;3et2c>9Z?>gVM}>Lfw~CkA z&Tay+Jgfw4O>xvsKKYd5s^{%iR3dL2Bn|s&R4h|Ufz@P^PJ+QxfK(FQe zcD70n?@hh~!=?wMN1NVWM0%0?%G3b14%kefM8~n-7ceDxbu~Q{3sRMa-fV0XZ;Ax3 z`hDVUuAX-X5seW$_*IfgvQM{F0fV@Uf_Wvy*Yt5K5xnP42wP-HC(uU~d*F~B3%Vto z>wn$1n{IKp`*Yv)sr}TBZ(`AIWSfg`etmu6Eg_T08poVqB7sbvhe_jPOq6VNRZcKD zdCCz^#lR1rNJ3!uJenP3%^TX_1UUei1~BZZ4)DV*5N)H<$i^0F*_50O($4HPb_uWWuslU8xh0Vk93a`7pz;Dp z=_yjAS*F!V_CR#LIVx$mbC6^rED1e=S=E>=*GCVaqJUKgz zEb#aVDIX95hk(P;iJg%#goGl!ItHdp$jQx>xY3}ISaBU?b;Sj=rQ{loKM})@pYXi` zmskFZq!C&sP^=)=FM!p!Ji#&TS;GnN^rQEOgKPB!bpY2goU9L1N#CACUX($hw=*C8 z`B%T$Dpnn^SAM$5w7bG-wf9!*x#i9r7uQX?mIriet>$Zo`^eo2$vyDq88l(g1A`tI z^uXTf0ZCMS6>)lkc`Kmg-rS4cn>hq6Jb4s?A+@2N{m<{4_D|v_sgsvvtZ0OzCl#=# zJ)o`Q*D9RN4x_T8_4%o+k!8q3h4K2Ws%8?*ro29z;rq3Z46PO6``Z86d+W%WmQce; z{bRh=yJ}TvTxYlIHnpYN@lCa+c1o?y`14br`cymF=C$)X%Qr`cmFhssF^LUFki~nH zh2Cfp)|C`)Q={ai2FIBCW1fsiD3H^S#M(-Zk@J*^_%yK~f?X2^FQ6HiZ)5}^WhDq9 zqktcUPJ<#!v9U;rxf6}20Y3?%(NM>87rRbgpiE4^NoUV=&afKl;ncR_^V zDeJd_*5r$8ZWZNocYZ^)(2lrab~4Z`V}Wz@Z^bo2C~jw0h8+TEjZMLA6*!Fz4`x@o z)XMACJV10R3GYX`EE4Pi+GRT%LmbILif{9mXdz${sXL}erw~Pn5sr2wULVt!%9JQS zPpvO7oxN?IhK?~Xs@#CibYBte@GveYpydFW3FxDzgk|idQ083(CF)0x- zJlmiV%0VkqoNPhOS?uM-3ZtP4{YzQM`nq)Wd^aD?4ECDxp(&1U9E9coGld{k)Rz&WRQ^*?qUiNfnE8_V zsuu5`Trzur#|ov1nXXg?-rB(ohQ@qbw`W-HniC-@X&CQN2f1YNou@h@3Fz zU3{AFLsh#f1g&jot}E|aPZPy;ySv_1Wo4)pN!IEF%xe$NLr(3R7ntK~e0prmMKMUC z_yfhftQ=$+0noDfg<7m4yJ(X!TVTYNM)qfp#mEGmtbBka!W$_iog75(Y!BbrM%os# zkiabuzHVgvXN(r|lEK4GeuFB?R5me#GB+_ZuQE3dzDMRR0~%z$1QHU4ZY|gV`;1)U zXk;YNRN4oE1XES62b40b5UNfBeVg(-$qB9Z$JUaUJ? z!*@`4cia6gb|TcC1J_&)rsyl?rZ{6t)Sf5SQ%P}zw7eOI&6cA$XbQJE5Z@w z?~3B&do(c844d6t!OrOffE{_{*aNt=*R9ng9Qh_4N8VkITww6FLg&9r~7b%lO__!LdIg^K00jgBwGBMhDR3$NJ$%Z=| z?#E(w6_aQ-!3Of8V{P!YlF-!-t}GKXC>XbS=pv7WTwdWEOSGm%3dQ)Pr39J~xu(F9 z(|Alj_so;dvuA!+Ehi>EqZB@^IVZ1A4XyBcO{)@@UVY*1whVhnA6i=WT34F7EkD)p zRf()RUoP=p>Ibdem0)j`ho$t3_hGSa+KLj(hUEs->e*F{-&M;82M>B+&;x@W*sDE| zDN3paj+mKXMfvpLn*!$*ysY=;4M@ogJ07;v>%9U-;k4B+VM&5#HpBIqJE7n72~}`S z25iY6F5|xBFWTX1KpXv~4!GNNvgwO%QQcQ=|@0>Q>ZHn)3R#O76MA((R?* z%{wSN7j@HhO6{R`w|&CAZs4sN3T?gEtlY>m%Jk>6~e^WK0J`P+PrRY(5GQ zLMv9JhNtT~`C1Uxr6Py|aK!?jI=a<4u!^3X@}?7nD}3!t6e%A|2Q;RHc?6aWcLWBe zkE?iV;4T4XV|=^vP3+XS3Zl>i=ZXcMgskO1n>_yPzllP+5!!5N{$i#$fMi6A&BEUm zJSar)lnG8<%4 zMzPmx%4rb`6HF#t3OwINAr{lx9bJ))Clh*c)&yC7z$C$l_?Q^E!rLN$rtr>dQHG|q8+Lpv8<{>t+0 zn@u@^6(7XwwnCt$u>npTkJiAHW6(;GhUwK`>Z*I(dAuT^g zBwKJ9+TXG&VMc7G-Sg%ADG%>ziL6zei8JhPnbf|hvA6xPLXg}_@r~)V7-V-=km5yO zm>Tc;k$tcyWKE@;+EF&IrWyFp5*gk@ZM&Y*Y*;@{1=;2^&pgxGx9iv51lJ|aToKC3 z)MUy|MoW?HZ}P;Gdu{}-CAA;7oCCU&2eOz8l_x-9S7f1diDc`Qrmie_&a6O^5>zHe z6Gym_G=(IYG#QbmB?wMn#bP1fCW7Ts0aXm*onWM*%`kXbr0;6N;1dwhoRDIJl>KCk zWyA!MZl0BCHik3>CR23N8_+A=E5W15N&2hApxd2Jn2Uoupx*j37&J7 zKW!8^L|6o1DM(NXJY#=CyS(~aPK@qY@=~UJ^t4CGye168r0vceC_`GLTa2}>#L~jY z6*fEfpiGe7XQ7o=zQUV;K%INtf6DHlo)LkH4YPsfJcbiy4A)_rVRJH%>~tDN+T^j| zm`BbDfq!ve?huH2aKdQGXiPHq#8|~}UE?u|VpTMqiYAmz$A*rUrreG!k%|c=V`@%2 z;-?l-j-79coM$ijzJ`rm!xak|yaKMa_0kvrY3s!Q%x69m(>NhmcCtQqD}-yOl#s0T zr?UQX$*hE4z1z@iXS3Pmi>p>!?cfsT-R->(jvw^Epa%v$@S*GhB0anmlz>S-H%j}n z2XB=;WrZE@ongGt<15aQ{%*L_NispizJX?(ZYRm&(~&`;ju`7W&j`|Lx<5*5Z2r5J z($$xhdUM%`jwV&+N826u&*#L66S=WH-ukU-(5|XXuDL{U{p&PkFScqkP5rEdpx*wG zANi5ir?GVITN{gSD~*AZ9MC)jRW!xeIT*~T&|p%il6OTAn)pHlkPMRmgy1SE`5^Yr zK#2t}i_v3bwN`ck{Rx|xN#vm-+ab_&mrD#Jqwk`)Iu$ksC7b?@W}Me4vKqnT5h)W^ zc8Y8YAoe5`3PQ`Az`)L#$v7hbC}%$+9D1TgE&)!!bPAS*r*@)0A(>s#U5d{vebZzCv^!((^{N(Jx$+<%lbBC}oF>?UE zg=14QOmuF4SNOOF$*1}O##Nh%*usRp484Gh)Bw4*x}6nTLuv;xd@Afr`8X00OR{bW zaEe7Hd=b+Hn9+^{jYdaQ!b4=eOBOOg9vc@W`fR(xfMqnJtb$kz0Qy?i@Bqsz3%20| ztNqILM-r4oBb1y-V=W_wqLvAab_B+T2I9S=y^|28&hnPfDhQ+gQeIje{99;}xh zz{?vbK!b98m0PS_URfL`$wBTDbuP(!$o{GWK>G5;!zY>Xo=h-kVs_oHz*Jzy5H4Io zB#kE*EXG9f$_13x410J4KlM{T)lEp3XwAoDk#*0qtCUMUq*lIGc}zbqlq|ZNGPzb~ zZ=qWLdi?nD{qr6hv~TB^*o8J$< zR8lMvPR0+m@hfiDhxx3$IE_F3#BqFBX>~ATMU%qhZ5-eua}B_PRFu8qPRhH|q6VE^b3;)*&r@8SKjjih+=uT@=f`FsjfTrXas6cU zVwFXXb+L)k&g1Tg8med6(S+!H-$cHAHk%RSaC^0D84^6_UokKpeR~~=j8K|iz zPoC_vwg2RQ__d$;*+19q;Gh5bpa11w{^dTadVdaEUthm^^(sW@1o-46QT?%aw=~Xs z@aNjv+Q0iVfBeb&rza4?F?Ha;{IQ?=OaGT2`oT{j#C`0A=U@2zAO0zGeB;0M(W$GK zPQO35(dSiw^qzh0BfPz~6M7)M(C)1FBrW!CF`l)SU;M@Y_|Tz4zw}GLG&eWbXR~XE zRcct)Qtqjuto+>5*?pa~w6yfs{@P!=b?esO`dfbsCt&pW?fV{m-fN`iiBUs(R%o)~ zl7U~T9%W>hwHzGZM0!?(GSYJmCDL;P+=e_k%Rg(XSXR`0u&>^Yg=K4Xaq0ZmLOJ#1 zr~W9d+Ni@LU)DS+Sv0A5e?qs|pj42;3yas=`~?GBJh@ z4PcdYY`ZB2t7k@Dg$AB9GqR-A=6hVl0H6TXwPC3qFtRm_$-!xzC@a;Y(+iZ=KFV8U zPlYG~`}oW_GLS;p^r}jYMT-9P!>RoI)O*qX5LyKWDg~J_RjyiFB{I~dY|E0jA;GF) zoJ;9U7A)zW^38?(DWRQZ zl*LyDW|oSUIr#P(mXFC@l~=xu192^1F|Tc9=?6GBK0fZ5lJTKywjhm(rv`XGPN_-e z)FB?2JklrDke**sxwW~?7AXUymj>$K-$4(27xQ3hNRKf9@dC75EcAvw zH5T+Hzl)FFlksARUPzXPK5NORTaCr5<9< z`rDt5o>cUkpd>Al49TLmC&@WgHny?Nvd-`7PwYX5uusJ2S(V7#DW5<2I8xP)!X~+J zPqK^!0x|HekZzJi0dbQLrzu{t<05nS$qx{j+(>}Avbesou)cD8WBK;x$|BPzga<4g z3+Wt4S4QPaP`Sfz(4{zSeSDKcWt0A{737YXV0mQXDUi({3@$TBV2FZ^Q8K%b4hL?o z*mi-ND>!(DnVt?s9<6i@1tkx@O_xFvS2Byx*){xKBVZEYi?(s{*(n;(X$IMEnk|lH zOoXB-NnodsqhM={z{IDTNV-J*I<$kaKF;OONs_+G{Z-7F=BaE~} zUI*1vd_0t*MCE)yA{~w5OAnua>33VD86tR_N%oq;FblC(G1ZiuHKEt1bnPbYYW3Hq zaGx)ZW|Okmyjzjp=M@Ks4SHbE1A`ver#(-eVPe z;IvkhWtE~Ig`gE{)lTfDPt>l`qcdt(skOQM_0dNk?Z(2gcKxiZ8j0}{@jOCwOcUT_ zc!oUs2+NUHL?0#!XErvoQ$|`dVL4(C2Ad7j3dAU~WamlA6$+rjU!lM=!c3$fQfHH* zEOpr|g-Tgh0itBYN_HcKo5~8A(-jnR*j$AX?^UY9+)u(4xH~dWT4dICE_Ik1oX|Y* zSO#XoX5Ai)h%|DE-0x<&)P;t|q^6VZ-!!2r!B$ELqMQkL4Bmw@39!bqAlo9t%ibmy5zA3#kB;SlClMUym2aJMp&lQS{X(g+Zqdf~TP zhcKu(`-E71il%PBuROh!T{Xd&fn1McddTGFVi{k8oszsyAGm^=?TU{x=3UY8;J~Nz)j|4p-%6V1E$Mok=0Ha1;nkwq-{VNWWz`LIJrng zITc`ossP$QIg=Rj| zv-agY2SFn0^a)Dv&D7peMW_9g57_Ps;diQxfI^IB)n{sKAUAA-cN4r9$h{qOH8$N; zRHDI#ZzB%DgcC*RTvp}U1pk=lO}Irym_(5jY$n+zB*IJ^d}MkJ(`2wV$`>(b-^QU% zKM*)oScAN#n;VlnkhktNLC+uAG$(GMxf@kozMUC%qUvTYnYMP zL~ZF+{GQ$aY?c&frdV54OcP3!1&=%~DlnyoOJsyM^NB+N)vxY30Y%@r^VA#H2}}w) zCW9dX^K`Zx%6=$Qp>un5{^YbABwQ7T5OAOQW%Le6UY&vYbGkaU$SgC;v#z!&eS!&H zCnv$&1MCN*-#CobAoXF+k7;JlBdis&)dmS~6btG+A0EJlgG7WR`ShgAAW&A^lz@=7 z^cp@iO>QJn^n#5DTml4g2>=z|ymtQ{lS#xCy zeVT<^{|jDjLuuK|m9$>H)dtuK2>X}(`{nI6Xy>2@20bw7f&P0SuV_0HQNvNH|C-*f zBjH2iY)9b>Bd;2lnj2RvNz1Womr^vo!yZ_@Cp%m~t@S*VEPIPfOWso)p228GK*v2} zJU^Lta(cYW`*=*Vt}mnMN;An~Y>cQUJEjsxIkTUPKaRq4up1pK6$DkenA)8(%(*mdCg0jL zMXNw2Rb>cZ9EQv3612_$q(EE0C6C<5S8hlu<7sRJQq`sX69KEBrcI+vq9Ey%{QhV+ z^X)*8(Tg&&8Za9nyVr@fg+@|t31T5Il*=n>WOQ7%{!Aax4p? zJ|)s!iOO!0vwA;v@vCo2?9vjr>pR7#`;@ynao3s$2Ml^(&;x@W*uOoHvBNO@s}RHe zlYi**8BlDDO<&u4j4aQIk)`!BIXRh$0d!-ntA4#6mR5h0-)e9m)Q|rwf8`fVPvQ?a z9{;mn{7;7`JB(d->-w4(LAx~$vFuQ$c}w>?)_MTN;ji7S)w=!k?BD*Czms?V<-h!w z|N3A5>*yTlbNJkA6LvrEU1Vgz#s1FU`8y8ENB5deAP)${`e$xB9GRI^O)%iNL~{xF z(PX{>D--zuFD_VH^0j;+->NT-?;PmpJ#J54?KY`EMt8X$?{`&y<0!gEB%I}4g_x*#dQuZxg^x{xt)kZFbx0l$26m3Pg51q<>GCqwi^UZst9z%7R}VX2HYUocH_m&HjgM(i=2=(PZ&4vbspeOnydV3KKQVW(g^w3hoL~Lw zSMvkPV#lJXltN}k@t%@yDhnu|5*H1b6GJKUwPcP>{9q}Ug_|q4*QZjz7`P&CQMXZrZ;`NDmFRGLaD%-lotYyuSp2Rv=0sXDz3uXOstI zeZmN>RCKIJ`P(BhqsLN_%KB4or*)%@^nUnFTe=q; zqikN6M(k_G=nNe?IzCWRWzI8nu$CX+p$(h)!?-o$uIM7|OI;KL^swP%VaApv`c!v|;a%h~M6DXfx`Vdo z9r7$7RzRzGjMb<}edWsF|OlNbq+z@Tbrdd?j()MJDgEDc&&72_#XeGymesI8j_ zPDaT*M)`z+KW>_7MYBx6FG_PyEn*k3REz+jDG!iW4c6Nh0PrL->%2@HC1)Z>mH zAiZ+p4Ymh8@V(pv1Ekj#>7ASbEm?{5N=BBXr|pNa1I5P#EqL!qIq@>>T{JztF})z` z_q^WvcTq>yJ?;$s`lX#e!kiw}a&cO9l_t?rDt#)crh3mMg(}@l(!Jx~pv|l8t^UlW z4P7&-SFH`W^G8pP{QBj5zgcauTGzSg-xF5eO^>~A$Cj9+cG2>u9*6a4>aJ(CUSij? zd_^DD4d&sewHxQmdZH4Jlyd)5h>;y5MSU?cRut|@3?d>C!6^|UM>vT{gjRy#5&?UR*;77gcmUG( zk26~t(!qKW?t);Bfr}l#nJ;@g<<8#5ws=aEy_zn0BrIW?b>_k*U**c;RwDFCjMTb1#U0{LthDPiHDXfC11F`?B5uR+l7F^4;50hfX$tN1z` zBcoA7JUVMaAbTOK)FH$0LskioP!CQKVV{K#IWj(%;?i^GrOm(iXQqk2GB_hOa zs=_B3Sz~ZJ-j$J%j*wJdcs)w}sg;kXAA8VCAP$U_C$OA>74*1+@0ekU^VW7k_IH-( zL$}{Pd-?3CR$+y8qLNt4*eM^G|MbqL$Z8&6o?APm*??AYmv=TV+FD@-nYH74i}%*b z-?vxK;6j5Q81%rP2lhe_WN{xz&#!Aiox6fdAHcnEozEB#j&mYU$UakjwkD~hdL0Bp zOxi)8Riwk>)p=%V_{D`gKYqg9XV`dG{aC@y)SljmGZxX2 zXHkWW6WbU{V2-Q#d7%z@s zzlmXqw24S#)Wz^qyeHZl&$<3)@T|jk0-4QMhqHZ%n1w-)O6-ADA8SnS!9w8olB~9BHf+$7k=}7$iGh zdYky49&ThY2t=&-7P9Bug2Bwzkg=rU%b8ZpFW!~-d$tmzysm7CC8zAFfB%u zQ)N|5PGG%y=g$B6+2Q~G{P5p9Q!Mp%1lXj`xhqTO-8_%?>)7bz&ZX<764UW;(^7YW zEA^G{{@dO|DJk_ZUkEVoM}PE3TPt6?aen36YXR4+0n6g#A`l{VkS#Y>(|1bRCQ5y> z>Qmz+J3pBEK~SNxhBR)>+z(+9?;k>77F(dC=|ghY!Vk|CE&m_|kJ#Kxr*<~B##;1tj^ z<5w9#)VsE?&_v~8jLU!Yw?>$~4TbM$GPSQ@9+2rl+fP$c*l5|%NS|2D3eQO=YzW*Q z?wuJjN1h4~1Hpz&^q)8$Z9!#%4VVq%vC7V5(~(Axxls_xih>*(cT6!VU@y3c8-e2; zOS0vOiBlaW4jS7+m8vm5iIFm4AGJ-!E<(Nld&bh@1r3*1tpv!%m?>}~Q=+p(_)gQ( zhVm|O!2uD@M8d+oG^I{)P+@3cfZ?ag5>B%!f5nkNeSE3-L--hS*!{t7u~C%_u6&Ms zOium*I+e80z~u(x=X@ z=rs|Y_mrTnM+@(2Ik|@}()tsY;ae{a0JeVhHANJ~Vt`Bv^pq=80!Rn7gP)XDA%%Qv z0v=MGrE_ND#+=qo_|T&unfZeP(RQ<}vnD=3)t$^QPT5D_OXX3Zu|f`(^tZGT15l7G zl*B=HZgfUz`;poz=seNkgeZ;MpeynqNJ=GJ3foo|o=7)6D)Z3kspw0^r|k;_ZMv{Gi%omB=OWyUkTzS6{nD{NxYSB^NPiL)(;3AG7$5&`K1l69jPI`VeVQ^MM^ z_eK5zadz4rulnTiX1`aF)&M-9tH*~%Cx>i4mA#ZZS!66FDg!wrKs(JuboESrq(p9X zaE0@yoK)f3N+Xi8#ygW< zL5WENpbByx&=QzoveBdR1-KU!EGtZylRC=QhxG!slMa&{D&}i-hikOhHIzGr&jrs6 zk1Edfw0P_pyYhxNuhuCHR+-2Z)fx}Wn>W%VuzqDk z4C7m1Wnr}dWAsoJ{DY6KP+8&f$}AnvJo#u0ep;t>fQ}IZXLj4Lk(_@9k!+5fv?uJy z0Fpp$zsQBtUvHHg@Zro7hd>dKl#V#G9f{`HZuA4g;)2~{eT_xu_vBZ4&io3`OdS? zKKl#5@C)58ky;XWr?vl3()(|fE0INT=&%0OU;3MW^Ka&J!N~GA{>Iiwk z^KOrPcNtlJ<2Qcewbx!V#3?BO&?=L&S^2MHq~G0TQ+NlZNNd;^9D;ve209(=s^TQwvQLm1D{jy8$oSa57tYxF$%hI@$I_U!+OoB3Z}lnu z;Mu;BbVWBHA6%)()q;f^6J}f|N=Wc9`h?eyzGn9%SQg+c-<^1vf|(4C|@(`^wU!R$|aWuwxTmT9%Oo& zNtVS^pvQ$aW8j6?MLgQLdwGHidb>BO#n5<2F%&vSb%>uTAdz`2cm_0(Fch)CZM4IdHC7id*8!P75!9gf{ODiU-^pvwtOp* zQYoFVZLt}{BW+|MR{okFU`a^@(P~**qhKkiU+@zjuB51GUEDV8FNJE}&c9{>jw8$A z_vXI`?#=1(i77C$ z9GE})AN-~N>ks|lr@}%2`N)sfN~@5Ky)?wQ%I~0ix2j03Y|XXXN18?P0{6kTK~$EA z^6c`rIKqxZr5f=5SiYPRp!u<$o8D)k5`_(>@28e-$Nf=i5%nrCGWxD{4;|Qm9PhMk zy(_%8%avz=g{3v80@}TD?puOK@v%Cba>vO(&{262EhgeeC9e*mhuANlJ!K37*#-?x z_IyjmCbLH*ON+=RptXUTVtsXUZFzHT#bsk{naRqq!BDrvW5En&s~amwUxtHOZ~(J- zZ@^Rn%N8sTqX-^@D;-T|^aiwt8-ZVk5t0#Wa`Uv6rcm&mB0lE76k>w|t8;S&UdGRT77qcgC)O>>?x^Q~}9KxTM-qmK`YT6AWKl^n+zl5Fl7v z;2BF>8Tw7;HFC*>g$jXKjJ3nX=$e2WacrmTbxzzTdu*g!ub`Cgl4lt}rCy5!?l1td zDDPjuB3Xo@TeXwb()Oi@$C0V&5g0b%-3m8XIlD6Mk-5U{>xc+I9OlqIe6xrblqtg5 z&Fm!S`$nJ0_$Hbh7RE!05r;+WHFO3>=%a%k7vUR>?2fjcg^Q*m9^->ev62u9dJM~> z)HZ0|kb)jDat!G$wkiv@EPGB7A~Tn*!SNio@eo}Y4#&7hJZPHD6o`ztM;L+W?I{mo zI&<3jli_@ha!lc=c|#tp_G?99^rI5HBf~qMrl6OGqGLyun-S^VVXf8kqEDaH0Z4FT*Xotf@qLF{uiSl;4Q`3(X#< zWZYHOX0(}sS^pO*Tbs8_L3+=1-fbHO#}9g7&;x@W*!w*&JTX22i`oC-kNq^nu3d9h zhQ=V$DUf6+Q>?7 zqY1s9VOsvqi}mcDU-~P5rPZc~ik6p`-@764?%MQTdg-O#{LSAi*QE2xZno)BqukzZ zwdv)>X54ShrdO>q6gItV-19Ov&hpYVHoT}@?x{vXkiDPq}DHQ)qvFb#i^a}IUbadUPR5=Y?klZ z&2ux--gJ!)0Tp-Y$KdXcw$+y!)nJ>MeQ2(yoR77B(g;;^HNZRW$j>#Nth%7;RoAWV z&$mttrbHQhk`+Fx`Yq&gjJCL?WXVkOSq+boZwwfF+!WM%nn@ROQ=`?LjgNsDV@+4e z4RSBy|3^OZsrw&&y51rB`&WPUSG~V9++~xRjdd1BS$<~umYz}kT3nZat!9_AFf8S* zt)>=?_>_(hINirvEa$^YQ7rLPze*PDI7QyT9j+7Egos}UHoeyIFxWZhf&JS91Djrc z17_h|+4RPzW~K|9o@J$j)bT$Osb^Wde@B4zRU<0iUKm3{$+W8J8;^DGawBM7;w4hk zPSUxdZTKKvq6J4VW4X>+H7^TCXt~9mAJ4@nL7|D71nmmrLe;V{9|@Fs%J3!(9*?1au)@L zF-rlXzeEzlz^BYQNCwLxk-NwcmoP=n=|GNpu zl3pdOCUUnk%aamUkRisrBVi4TphrD2o+B1Y3z3uxT+K<3CvqC__QRwj?}=dPkQI*m z9eSszHd!FUcTqSXjaE^WxTu$cvqZe9h(?2Hku0oy=89p9;^@BQcI*2V5e&INXfb2| zV4DGuG7T%*&Nr7!IPD6p!|bKX$yYfco=?+$nkI({By0yuT$e@Aqs(QDha}*4dJmTr z6)8R*bGoYih;@vhM{Z+4+k|JwPaET0B8;vr`Z29wm{&$Igz9aQ;@~@i2~#i0jacdX z!ca-7Ar=fySs)`MQW1{`XjBkmihh(y)5j+hu9JT-`jKIfwDHEDNTH$AWdT-rB#ojR z=Rmi|#$i%tn#}-3HEVCwLI{V`9c9Y&^z+RSzrMl3RS3OxK@TcqE0HfSZ;M*DQ+#6 z>|;$|@S}n#?TE2LFg4(rwAOe}+O|>uWa!vWzwP~FtS*$gMK|@LhuTroTDk$nZpuwl zmx5Q-kNwz>wf5fj+T!N*H$>z>#r+P7fq@f_$(zoE^CF)2a1GOe?FVjNT8oe`TkyU+ z6`nIF$kokx*b-Dom=$KndS+r8fDnb~aeDT^^c)Le=1PZ?DWzD@Uv4p0PIDM2XlBvary@`veFYWaaWRuhHRxE{G`*P zJyh-Knn+(#YK_Rh7kNJH+ZpS5fseBF)nd+qG%X_NwuivlN$l%Xf{{rvCCWqJU)asRo;gY@?Pt8>u8K@SXiVE^`jZCb-vt;a&W&>pfU z?@OeYF;B*Lm9tFW&nIbje5cq#W-YIDH|x7H>)BKYvbG(5L!JI>1zaqxj$uudM_||> zeQBE_vpF);&Q(!dt=KVMfT51WU36L7@L=Nc9Rfg4V;9L2`S(HRB zbjP)v!P!Z)b8MbF$hgpO#RD%ojXUx(g(AvQVW#yMNaj>@Zs?TmSs+yNNS_MRn8r{5 z4A^WFdMesao!G^R{)pxL9g&AX9cG>c#&gmLXH>_x0iG(1>;g8+I12^yv(cbuM?e$l z#{x~H;S+s55kM{p4MxPHf*x})q_HJ)OQ3}rH!9U$YAw5i#y2K5@ZBNkkwJ_McXUoa zru9<{B!V6{HdZ&*5#NZi#)7ysF%ya+?heiH5M$&Ut&@QU z@h1~SBp>6#e=@v1y!Mu?)NpPP!9xo+|OxXn;@n|nx7aj)qjaWy7J~99@Vj!6s z1jf%u_5edD^F62_JIK`NIKM~6r;zY4$3Q;)$Vq2tjHH4&he}?^2x3(j#$_1vq$Va@ zQ)gnF^SNBVc>2;CFSm-jCfKV1s{cQG{{biKRo;i=+jn;N76C#Hp>|b~M70r^CW-18 zhzk(hh_V0JKRYpQ*u;R#&wqyy8-tA#$HDCr7mQ0Bz$H!`kiihZG-D({0(C(B)-5x$ z?e{IuIq#X7o!QxPuXgX9S4VSaXWn_sIp;m+`JV6dd>>6)?L%e%gJ;`G%O7^mqdgA0 zCQ$5WCf@X=_BlHYb{o{dpauptu#;<`)6%tj{78m*;`DZz{6>YQ95|!}_`*c(t3_<} zRM4ivcsgXeZ|3^POqNvTL>eY^$4_6|Wiz-+b8Z0_;}$C)FWWekZJw92)0?p0(y6U| znCVW)H7Ki?Ua*gu6W`fVH>#1P?o8|Q z?kiX?Ko?o|qK{La0N+~Ps*26MFh4SStb`YsNe}rCNbH0Y;ABeqjW^1OK)+BVJwt&h z4F1aU7&43bNmY~_-1))j7Kr2rCb-0XP2yD^fD_2KfHFFwKgCSimsRepbZEt<1unWX zgjWOJ$?uh(uUGMs_RcLosLTJ>d(_NGv3$eaqKU8EYM{$-n3%%G))SR|y%&Mq~1><6g zE6)_kBixuTFCoQf!?}adPnY357;>sD$TFir=go^Od6H4F_bUTD-LG=qc_Qb?$H*)l zOw_>?j>-cOr8&RSm|LpPg8NED;ziXKL;D^7{Nb3$iHGsYI&O2}2 z@o?SYD?`K*D{f+_Eb&{9@wwZP^C+|?4(#W8cG%oCxST-^3~FFd1KU{x!+U1-e(IB- z{DD{h5GGrs!GcBj(8A&^U--xEJjs@i)lHEFgE$NyWm&KdqyG~L(dTKCA<7vchrb70 zEDo5nEcmbwJn+Dq-t?w^mKeKT228{@;L*0{%*@Qc{kQ-2oO2!%b5(gwecqdPOa4l6 zbH>6^S*^!;U3Wzm1bRAF{&;NLuE_F%4}2hp_@nkptrT2;r?fZf#NsP>Qz{2!Wdh%| zo7?;NJq~W`H>Y#(q4I~0dM)L}vsHwzp7yk-A(6(KRm$)@_-zI;?LIBDTT3&(ocu#) zpjI|*K{CUw*kTPMU%WoHl81VNn7klw;xu9Lry~T#7spITj?Q0LQk5rQs;hLojy0yR z^|g!=UzV4kyEFNe+>>1as`R*Me--RhYN7J^_oexI-CV(0))@yd>3)O_RV z!s0m5?mjzjz!HzXReSRJEjMY&${QC)Yfa8^{2i@XH3pj`I)Aj0I(*bX>X~e-^xla;1o-%>$E|9tXrpMq z+`K^-woX5JLg5{>wN8A%Zq_y;-+b$x>2#^i{g4*jEA_VAC~LhL9=hsT|8md%N3OZk z@BjYqdn8l?^WsV=sdA8XUA0Yi{xI*B$JqQi4p?ScusVy+l@lbe){7Ji_zKAevj2z` z%kru7xa#q??UG9Mm;Bgx96oU1!1JE>yq-1n@P9eTvheV?!QcvZRSgUjS;{flW1SUQ zE;@T^!ip?=9`%Di!Ym8Jd-v@7}AKOta-ih?Y<8gf( z*9n0M&y*X*cwr0#nb!jI!e*^}*M{1V9)6qC&6RbPY&m|Gn_;sTmaT|RW1z40$v!w? zL9T}tPY$H_;DZmo``z!hp##qJ6M@-gInJRrp`kr3P|U7I-3RIbp397+F+= z2al-95=i+6W>*z2r*2S!uYj{_4T zG>&!vLZRkddx5ouXwtG9Gc2Ua&h^b(U=LwlASd53UJ51Bq8g)FeOu*9MC(5BR~jc( z?WqIgMF(dvOcxwC>08ZEHGk_ni*<+qkyYwKRkqH;TMhSS`klH@uC9Lh_PYsCRr4*+ zVs+SP6*peK9d`Q|4Wes3^78z*7d}ABr03w3H7Cm*)E_W@1K^Q7vdD-Odu(tX-;%y#g(O%e%J;BDl1hxTzKJy-C!OvkJazJS>BX#cfd3`%I0N!~6%jR| z?HWdo9XMr$g_yqxKZemo(!7WTG9Soe@oYR{I$A!UvK@pPA=CxoL`O-96-H07EHzOW zGQ?LzPg!QuqJp}%@}!Dq0HKSl=##lmII1)w=4lqFIMY)bjw1W~gIfhgdcV_6Lh#<;=z%h>jR0w?>sll@jS^{#il@r`fvC&eOkFDeg^uk9dhm)!~z zHcREnkgzquH|gGFBJ|pNaC#8>SZp@?ujCEwxxL<-=JbphY^G$dA!82zS*}BS$+=t- z_F`}VkuX++)62gtckrHG*zWY+#JA=3;QjY}&-ZkzqGPvxdTI84eH+bHu|kQ}a_dIl za}P`$a<*?00~5O?1Ji38Fq-jC#dT%7N~q%y&f6>U`1qdG*w= ziiork(|kl)w?qNK zjTlCx{d_@rE5?F!u?5+f4<5swt}!*MualQaD3_PhSXEwpurslfl?$?_&d7b$(@e)! z_pBY%EU7-L?j1)>kTs2lu5O%-r}Xvd&}lKOy7P3;>ELl_?QUSKCp0Q6njvmhNL+z% zk_k0_3y5CTWi(t=i?1fNht^S;lRbJ%)db;G8u#wSyJ({HMn1_o10?pm`L?_Dd_|v2 z^~SsBu5KgOMAi6#BlA`H$LC%34QF4twwL%Vx7_makAK`(>S4<7^WbU!%yI%f1ZzqHy%i_If0&!?-A0Umz*9BWsgl?4BngH^Tm`$@LBRf+J2bt#XCIv+0VY> ziYtoN*okik-kUqIRd)R~EvE?%oQOmyQ!KFD&47U|x?_cb)CTZqenM z%3hq`Z?0>vd8mBa9>?tbDt`hMmTr|ff7fSM>j#|{FOt#`y@c8Y*ZWnJOq?aDU|0)L za+k`f1!}_D?o@rmQzP|96g)Fgl!rhhfKx3f+9~AmnLSN%FCn&R{SVur2?PZDrU$08 z_!)~_aQQ5{>o8BrG{Rg{wgX9ch>zk`;U(} z3@Wo(m9oq{3jFJsDIrqMMfQuVydtvB7I<)LSp|m-n|M*bDe2P~boJmD18}M*gA^4K zeMxnfTqW{exOlUo4CP}c$H%HNF*Z3dR>R0YIbNHDl*l;Bl+;8ZD?)KdmL!BTIi^Go z&WsmX@9-x-jI?-2qR6}skqu9&5#+YZzE={Ppq}G)Lh{GFmV25ub#domU?x{yI8|=AHEic@JV68u!ZmTY9*MgR;-3VX^!$zwbSOuengNxiNni&2)oH9n`=^YJf9H z_x*Ph%-hIapUV5jkPbm=S|%`jPK0$ zP$d2`szK?cYeFBWw4iw zho#N}3z()k(p6)<#$}AJQxlU@lg@63Om~yWcQ-jfTbbrE->6t5Qu2NDH-naf+(Gpm zFcwPgo=gJg_bHV&W$Ni9jc1RtnG@q96B8)IF!v!TL~(yg0wTFwq#cK-CdCPrN}C9Q zikH~adYhEov;gMV1d22DF_X2BOv(h!p6mCzn&`}_OS5rG2z>I6#AuT|n znq#Xq_=-;~apMCI+`n(%zWAh#atxYLmsU9!37QrxN{?<^Qi9t><%QAdD6!qMoqqc1 zzSuRdyUmE{wrAUKyB(@LOPjf~=1-pf^rv?V&s$zN)_mYgve;y%*_Dfg8?CxXV;vL- z00vax!(IoxE;c%9lag~B&{U#m?`as$|a4UgLz18^ncCGI5(0R$Np=7g3#b1=}|PM)F`{jW$c zVaS~FEyoNRhH(Lj1f4K0EoZTPxDWAu24&i>TGP=p8IPMls9F6CO8sP4=+4+Kz)B0Y z<6$HHfKx9h834lnP!I;`fIuZ?$jJs$ssOVXy*-_|BN_wj_`u@nR`K4ajIW zuW_hT_(uH{(v>%OU|bcc=EibEg>SH4P!)W;y4VCtWWLA1a)NVA`KX3w^ds_~E7PO% zM(QiwFB1$h1BbJrh+$T?K+2`&iOUS6*YTpS^Q!5RU8RDI6%dn(T>iM_lYifB6#u4g z`lkF<8$w%mSnGs&Y3`Wjs6pazad4YWbN z9@y`AoPBW2hq(q2LPL9l23-PsI}_=7%I@u2Sz^7`m10gJg}Y`#bfJ)tTx43HVRlJN ztLkgDR3AXGLXQgz3#Xm7zY5Tx!4<_ui>gWE=873qoEsA>tUv}*(mE;Jh|<8%P4KEa7mrwDg5?f-lq?3k!|9iaunHY>J(z(C%*nYDys{ zxM|tAvTcnt$mn1LaWetH;c+24yX%DG1uglgNRpS-9Z61=)O2$Cb*D9#5g(Z7XEi+cLsB`I?ILQS@`* z1h@+V5>Wbuzz^I}Fp!~zvqG@3u(UASoQDhRq583h>PH{qtK3%WQQ+5#a-=bTtT{j1 zgcoZhZHIRv4hV@Id9l)`v~nvo3^q%uR#pn~oQ|AbRDTi*R=LFm?Fq9&U#BHyr!qh? z5RT5S4u@lRLTiZz1>oUj5Z@Bwst@RvoAWFbzd=3VYEdU}m9&#>;W;TDEEmyYOcGc* zQWla$-PU)C0a!XH>~q4jyxPbE$>kC(sjwh*UiN6UcdJQkd%YF~uCTep=UA9fR?N0+ znUM%lxe)nO4qtNqIr5y&{T?i)S#kU9Mk+{>v}8D|WP3@BDBw8mqw#YxTEqU+D!gw>YqfH5S;J|l<-Xf+n>dD1D6 zpkOwqhc>j3*omP?_zW`mPLzef7)*0=EZ|a@*P98x3n4-AGdQDCkSj(@1#}shz^Rc5 zq*TbG@;<9X3h7#Hm<8003Q0C$R0344Uj)r%Cvk#L<4+bbIYfu_EC?%K zfq9J0BZUaW*no)Q!hCaHuf~Ub1Fy?^hGKM5nb>Sg%nt~p!U40Fu);~~JnQX~=!LlBjs9c-b26BQ}xd5BQ7hA?)$ zzEp24p+4v57w6{|=jNIUfLu6oXyM4gg`0H+uDHiyy_wLQ^m2r!5k>+Kjw_?WsC|6xXq;j@ zBPull=OP5bL3HeN(&}7$Q_Yu4WYuMu{UgXTb6x~PrkF@9GKgEwMPAd)sBRZ)8h3(WegTjUmUhZuEpr37ieja;5k;UwTwwSzZ{26)nU($(#&cNYpL$14J zNr%pzs~h1J%HYf(uYVq}pXxZV`}B{^`rk9(LH@~_tJ-_J0%g(L^Ey5F_Nrhz1#HhPIST8)Ne*rAS*= zWCcR(?98bmk2}QR$tx1{#SmiXMwa2*NcETDl@XE)AO$P&TY;zK?k2r><**LC>SM~4 zj^?Jg5ik;jlvX&T*QJ8}Z1*eMfxptX4DAy`0?T+5SXZHFBS4RI)D(~k2T>oNMlF75 z?vdb@TKTfYAx6SzM#MC-)S@t~5uuEXW@Lef=-9YkB~k*$#=&aT3E_Jg_a;=hi9~Vq zn&mGNUvFevIB28(NsOU+^%H^z20f|_PaygcWn#33!VpImRz5r)Q8@<8a>69d6TyKB zkmG4t|5*an!$(Rrq2)1XZdE8zSvrUlwa_EDRCoj=f7V!x^4b~_8!*QP5u?&(5J)FK zLv*tY9f2On$8rV{3}&B{veA1XFHpX}zG;DZo z$ng^0Qof*0p5X>n-aL1I+iJh4*z)CC1C{n&#bXhqZcj_H|5}09(d6ciwp?;>XHpI!D>) zg3=`1@8xK}g0b|Z7>C*jTr7cQ#UKRCV;{*(g_RFidWvmV&2&4B2%Gd2MQagcBR z=5OxSwu^_qy1a16wk%PUfs>0I0aoCl)AKfooG^^p;RQDQy5+2Yt z1wmozAOe|&#{eEw3@54u03FQID3PBa#SPj`j;xn81DA$}Ae&Ao2pEc+7$p>xm*_Cj zmP}>QhSY0ea2=2gbY)a1Fe3t_(t!kp7_M=oH3aJ?iihON@C)WauTQ=0UGiezsnUdi}IK|aP7vQY3QAR_*x`7V4YsgH?i zihST(Ts8yJ2+zhC11W||;x~ZH3<9LrgquMF9(El@6dRDtX}5 z@mlsO)Fw1QJOQLCnaWAZR6<`wVwHPOo7($`+TQ(Ct%U9fq9SWEleL-J)J%&^^s={(y1Bt!hhzV!Jx<)W$K)_hQ&Vo4hO-*SJgYc9f zim70}h8|be^Kn({_OS*b)E%CgiVGc?@V!TvqEv8FD4^-|Y7}yGqo6mR2Rs#8EQ#Wv zM=b$p*&u7^#Dg<>`6U;`&d%XseIP&VTB(VJ643r!sX<_*il1?hhDqcT^>ELvH+CD2 z!0cUc!37x&_cJ4PW7~QUl^LNK&UHIuMt%88`Wb=y*{7dd8|*Wvfs>;K!d0a8W_k;8 zo*XxRs@_Gr^=qUD8HTiJ#@&szlN}CY&M4e969)3a?Z&nU@Y^!fyX&sI4jedOD<&^k zW|+63Ybx)Qcexd~m`*HkXYA-PAuXpCxN$=lxnpfgS*C9d){))^ZAYVB9*Uc|B5LGpY*eYngFWc!3)C!F@Gjmxg-m-_< z4DC!05)lD)I4HAKUR0N zm=X9{mb;^`1p8zti#y^?$t?E(sUIa5fV4QI1H~Fyx_8wyeqfLQ7)B68E)h8#hsIDW zb}GG7)juJM-9h93063-ZZ9o=^!dT~qLo$NS6w?P}#282x`rJbx2fml`z-%;@8U&3D zaa5e7ibS?3YQlWnC|Qls$U$V3YBhqtp!PZ;;no^7Dr?g-DnN-VYlqzLj=GE`CV`>f zW*gGONEs3T*#ca}1Tw$o#qUx?u%jB{gkH>A90xr;&<#TP+snps_t;%qif%D(jWL6E zTu^y3-8Ozpu_&u~c`MtUcilBTJ-vVbX}-R#V6*a0Ws_E{;HIz8w`l`JTY`C8z3)w5 z(N=%hP2Vyfw{2eO(}L;tt8RzI=YVtzJt^2)ZWs zMSFxw;@<&OqWcV2l2C>4qkpSy+#aMdf5!w=oF76yqO2VJIU&l3&SN%+75(TM$f@Dd zBWKK}Bmk-k1og)B) zA#aOD^Z^|TNVuqoM|rMN>@;Pq#MO|DtrPw+GY4}pEV2Lx9&66|^=M;G0gVW2^oMhE zOLOx}42GO<&dsKBtUi0Re(Xr&C^U8WLqwlqxd)3rXv(Bdqx=oQ>xvgu#rZ*rWa}nc z^U_ZiTvebW89$;vk&p~`9J%Yp|Jx1hb*i(p4aaQ|3xBpeyv5$V&3Da)U5$;-!*)AM z+oaWY%!@C+c&pRN;P)G^0f+3m5!2G4mKujJ`f|e?<2{bfh!@zzGW^D`>Qws$m7T0j zR^-vcpO_9+;TZ8at*@*s;!mvaY2J@5*A+ct2HWncfeyf8r=}G5p!H?UW;^hvJpblW z+Sa~t6 zI4=&l>ErFhA9fC2eO~372(Z)8>2|b>F1n}(=4?KAyH)JneQk1@P4cW~sw19If32;2 zqdw~U3v)R>338TzMBfXLK!8LVBrUolRF==Su(F)d&(8ZtF0XJM^zdLZEcX+e#oV2~ zi7J#@Vd@3QBvLXF3CCQBRD%1!5j@ zZ550spmi$kD)mA{aLJogOlCp_RjQ@vb3zh1qkw7vnm0%rK!05QrRGpH$2Q7I5u1t576v)9#m+Lq=+H<_4!m9TjaY5qnuBOP z!Z1qU_}OF)!gwSpcM-W*%pwBDH<9*4xsmv+DKyt9ABaD}L#EPP5JZP~51wx8Gw~s~>!y#+9yz$? z*o9FG>MX8I4=&}K7=_jXY3111dF0;TreUz0(tX0Fh= zb&@vjNA+ksDbN?^J?+E#}Q8Zgxlg zq#UGrEEc+AhoaXc?NP%c~togR#V zb&_b1?s{avPI?g1!B8EF{2!XwH;3LH!T z;E=HBAQkcACyJ4KPPCr<4#k12G9@1X8^9hA5xw2Wcu>(1@AXFH23QWz9ZpbwY|$LZ z!m-A}Yy)0!@S39&ol2x$AXT+!|GMTJ9qpLP4@^sBn$|>R+AVQB)R5r?CU;HqgelgG zHoXJSoFTvtmS*|L?^W?&zWs;;ldT`l?ZTHlAL>dJmVuDNv0MVn@G~J8hnz_aRhiHu z0F8fA3lz;1xf7W_Q5h7YBtjKSu&XOroWnA$=vQaua1m)JZ%nJUG8&U<04yy-4OK-y zrUE$1_uhf}uAzLBa|4XmhEb>wSsO+MJSM?|fMk-3O8Yksy(Pa5~H6z(+I+f*u7I5e7LqrB}W|y7Ot}J;zs!>I7^C zK8K^Ma(=j41)FHwkmbarL0Q*`&|9S2C%u_8hH}v$0^X!dYd_wMfmNHlU}sYRWTm$- zPU>ush>FDP`1H&;qBKquB}9ZmH)WC1o<-bA^RS>59`&VAWVMfQJa``9 z1+C4uk6m)Xxq9ODu-mCM#BA-4BdJ(2%~GZbeH!@tN+4&kPK{Z)^7=A9{}1o$Hb4RF zeZx0=LqDUs$GzUeWB#_9Ti5$Z+o^ku#_NvE{oKW1pY5%Iwken?ap)Be*YF^Yj04>t z{9&Ga%TBVrS9Pi#ZEP6y9Tv3|(v9Ima}fuam1P(dOctuuG|VF$J~8hU+qw_+saBc0 z=zcp#uRIV zXPe>DHtUooOF21}5Yg|S@PsFHJ2hZlb8vNxNh)E-8L|(XgddJB@4k-cnrjC?xP8^2}0mqKiktzV# zl5mmCo9Z^5$hjQok?6eSyfwLNdbdyqQS*iLNVdeyAEq$|bq$zdr4Yb$8R2+1DM2H1 zKj<~*WOG_J%Zf&FLg)CFCaQ|LxX=zQ7jm4iftoh}uxetc$Ry=abqPm2QWliLD)wtd z_+kocWN@R>0F)&FOaw!6e}(I*hd;YVt|x1jP>YgiigSP=I`xDY8yN}T;rGj`aqOgI zIPLx^Wl+X9nyg)1Y#_>!Ngt8SgHeuLK7dv&^9-58Q`Qgp#47WL_`^u0$R5ngb|r_t zDfcQ5nXK)ZoSd1Qtl>ZC;0QA^+rmU`a&ijskSGGQ1hIg)EJDsT zxaq>VO*Cw#PGibW)0mbX^h_z^BR6(Vb9Y*kkxRHENkgqBMGW%Eyr+A>9>CuD=bzs> zvh^?l`v+Z}!))7OyB%uH0l6HO%O4If!$zmS?b_ccF8O1ZBdREOgfR~dfsqEw*MFbc zu4_A`j$;P{RyQ|AA|Pm)q3QS&3D)W;@#P|Dy=vR}px~5h$Bo@=8>7cnP0zL&h-~b5 zCvNW)eqOO_7(6g1dv&(uF3NR@?(coTq)!mNIvjJ%e_dzu`EiNp-#5!>Y>Aj zKK8MX0p?9lO=rky?p#~uAJUr+(3lxk@2?qrTd2GYfa91MJ)XE0J)URkJxKLGwe+wy z^5wUgEdKmkzU5nbsIV;D_XQiDia5$~K>%jPQ38A9sT3Dyn~w0qP=smpEO{UCQ6iME z$j{8>A_zimFJh9&HObcF5N~pCXbFX<6Qs0mK0GZKR~ZwCPppSwhM?-JIvz=r)OAJa z$r((flEqgHW>RVdW(EuT$O#o>xxxqt#}P|mrhvoLZeGg>h~On0VcW_f)3;+DGT)sO zXQK|Gy&+#vh(Mx5y-9kJB#-$GdAspF{YxpQ5iWDb;5!Ed=o|MFSIAvh`Nl#uB5jz~LE zYqQSB9mOGzlHMtYx*R#9Jc^-bQ%U1wjU4CYw(q4FttigcO;G6|NTqwQBWC!EMrwp2 zY)nX4Ub2XXR8DZ+XwkjAHkSD=`-SSLL33ee^;o4nRIjE9L*+?CEh-dE0jR8V9be1T z_EF(ep?N}Lm1ERLbrK7u^l<3o&zF^~>%R8mL8H#X~y z2H(sz77zxBH}j2o#X~O4H6f>Dj+*Q=bJkjCG^PEMUQQBgQ8$Q32sJCNo&YYwW%a0` zTyo(#x)niaBRmC^vQC&f!wD57hoi*{Wf}}8@K}KK4>ft+@wpG*bNd&&4aU!T&U4y; zQ|GwXHb_>}n|5vcvpi9cak&2>+NX$_F&(}9`C}gQnBzIs436Ek1~kmYmJN)Bg$4fr zZ3GYN0GL2$zgn$^J@8>x-_0glZrMQzSuXFIj<5UBALXAikxg6QN+PRx%Y<4_iJUDGqO|D7G4j*aye}mr7>Tfn!3fF1E3*iiGnXV`J=uH~cX85hhh2sAUwAqvUf8`| zGpb6Gqp)Y2p-7<}68woQX*mzt)RZkOmty`Ta*I*@Uj_NZz+z0PC|eyfM*}(V!!fuN zj!!#bG+86#lTc3yc1x<5whUme1JA(gl7JzyOIu1lxSbH2QRp4Ohoi}CYv%hi>4x!+ z=c2b?_@6otoAbF_(Gezi#6HTmm28?>o+r36cs90`?4c^CS8N8BLjIvXsu)EU<_QF!r8g47k^GP7Tv4o`)Ts56 z@Q-Pz815n|A@dSO&y;JZa*>0(L>E%Ung%2@$#aosiv)?-EfR8|zsYlz{;0~yLGc?z zPU6i3g>Vo>>D1?lrG!#}ieO>Ra2Rqstolrs`2n;@Pbh~bA4_|a;_gH$Qa2TJhGcI- zFJ}>%>rteX1NB{S*NAt;!(M3CAcKW?^_7)N9($HoI@lwfKr#BGh;r#CArYb@0Au+h zGNXi(ww_sYNn%zs`+LD1-es zS_65=Dv=uwGBq{je!_=Zieq?#4=Xx)qh}iI-@OL37-uN}4pe%fW6oF&%Wa$*Ij3R$ z7w{X)XQRWQSkWT+c!LLOmv^oTw+FuSM7@)-o`(iZqfYKls}J5zN`GaNYjYsgu!lyJ zZL@T!PQ{kH^rhx8C}Z4}awGkAK4X=bc}{&phU>^`;Fm#v*>$c5!JzGupmO zWMjGo*HE%e9a~hXj%VW0wtv`%VdtlX*EQzO?uc<$JOe$3Dp%K=Z@XD1<6toOi-q?tCVx-%lEPfeu3_Oc$*Zf4C*7(Aa zKGNPKZD$aPMf+V6GD_6+yb}W@S3>ch_oLR=?m?+mh`4BoA0F*z76=~uNHt>>iE^|8{ z>ZhceLIlLbQ}r}P=7j{xOw&0`D=qTm3+J=uIKW`=BYj&I2Jz>9_);1GX95stG*7E= zJAY^u(;*efnU=pYPDl>1QGd?Q5YiyvhQJZQ^On;8^NVwH$U@#ccBpymaC24(07CtL z7Wp|C_ZUe#82SiZ9IAI{Wg&c4xq`s=1h@G*19=+!SAD2uNhus3JUUhG5wUXYj+Poc z_%vxkDy@aEZeoCe_f&IIB~e5fJc{Y8%lB|6mh7jqw6icu6IV-wio-DiMIzDxttGE2 zu20^uDq6Z8mM#mkU!*Woxx(_9Bc8Q#D#=!PKdNX}U_7TUSXb`+b$WzziH8E%QXeY$ zhm?N&D@K8)^pD&}@;~Gfp{6r3IyuauFj1^x$Qf9{m-e|~joF2b=fr82dsrM#h3qH1Zgeg80Dc;A%zw-HybsMtan~($c)*LYNhvkU6?ts}j#&(XS z-ltrDUh`Ky2KikvNu87zX?qgJ+R>v&zxvg$-gMJV@Nc@|h8y1d-uM3IZ~o?6-tv|= zzVVGOd)dn{UB2cuule&o|MOxo>!hrYhwG;3_K!8D`T4nn4?cMJop*lumRr8~g_}P4 z(U1PkU;M=%{Pu6Z^BwPa^UweM8-Dur?|AE5|Mz>}%S^9>j291ATOH5y4kKmKCqD6s zm%sE|&GMqm50BsXm0OPINjH4#PkriBmt1lg%%2ECV3uR%4fgW-)KqQ5M>J3h)3=&S zdceiEz3pvq$tzFvu6Ml)qm@5NkYV+K2Ohln<}YI1_Q_9v(*Dy<+XP3N(T9OZLZ4fQ zT(BAMB-2E#rpU7#B_%eTDZZ1w5I~#xchjDpvANjQD z-cr>@^P~lyI6xs_IAd0VZKm_YE zPLOUldR^OyzzQSll26>;LavZ}XTEYaeyT22xj8_dH+OEqFa6RmEN(6;*l1Qw=X*@= z^)C-7)ass5__?PJ7C(mrrMjj&S@hEkk$B;z3NzLZ!#&r6E)P!`Q%WLYM=3q*YgsmC zTle=p5bY2_5lX3f)TV|Teme5T?}}rVD;{Mxh$%r=o92dm!BL;CsQ8sg?bMI-n5Kn| z@&>ERNV}%y^9Y|GpoC-834Q%u;>r8u!GP;QU%KNft{9)J+^?!X-bW&Y<5_UWsD9+@ z+jqu!7eDElMWwa8z4_*wVX5bV(RR59Rg8NMyTaY$y&p|qzu)+C@0|DXJz~q@-+U5u zDF4>uYQ6|eKKU#*1Il3>pX8C;*Tz9mXMDvgUeUwDqTBtR_|IWsKjkS;Iq~P+!Wr2L z|L6bwT^-c);^MI*hwr=ZzJmu39yxO4@ZrOU4jqC|=CNbPW@l&d24sEn%gK=~Q6Fg^dK1W0@S^*9Bz{;M-UwYwF9(Ul$PkH>%S?3N-KWb?7k+aKKOJ)7T%X1u; zKwp5-m7%dE`nx}z+aLbH?_GG&rDvag_E~40)#r8m#ee^k@A~dnciZ`ge&~mO<2Qbz z&qJM<-Oxr4Jn(=8jj|D24z2kzJn-Tvd-->~_@c9?CZKgTwQt|v(|_=_Kl9YDf9mke z6p`L5{^iRMd@kv}<@w=>`@VAXiMfqF&jO@({)GoT^=WxCvVnN4M~>eB&Un-gn-Gw0U>U&&^$N#pBL9|Gf2%xArCbqOu_xmP4A$H+q}i-&aWU zC#;8v&g?wePyXcVaGUw_AN#Q%d+S?&CI3l9gX5!ye7un!ZXw$lrIk?H2iOOHdL^E#D38#kpLV`Bxc7hZVbbD#U%Zf&%9=$^%g?qpMhjc$7}3`%1OVk)+if^Cv1pL%G~ zkkP8y)=%gpj3;_E+a8r2nR;ky{dTP3Gb_4`S;*nT2DZU|oqE2K$?SiNUw3x#+|_iS zW#@BGOkjy|L|8QdhvQf({m#mtekw^&8noskd!bj%AG`Q#(~u9u9O(JgJ{M{%0s4JD9Cv%RInIs;+>=QPIX6 zxt@vG(^b3GqMF%j;s|lt>PI}OJRw=ifO7m zOdJqDzvcG3b#2w%yH}MBhS#dVhDtGn;I3%;5!e9?_@%`!!e+@Hn~`ZOR&{NR<5He}Fl{3~Lf=z8d^V~+TuGZ-@<%M(mu zCnMui!xJdeEO_rvD3K56F-9fnRr%Hwq(nUo(jYGMNmFPOkQ@1<(X^5_CVe?vf z1u(!KhEf4#%031+!V57a=BC05uupADVJ@=fP zCxiRYFOmCL4oAHv~t3Z9(ZpjzTck3X->{Un1lX%RsPN9>}+U_$&x zvOS3lEr$h9wXAama60x?ZpIFwP>`V|PpNv-B8%#*6;3>@92PLx?31iMlPgM{Bs@I% zh&h!=${A>QZ}^U9LV7LsJ^soU|M9-NzSM0HvpP#21~+XgtU2W7Bj>Z1$1i`9FCg#P z`N@fyUj}DE4WO&4FL5-bafN7RjVkD6_)0>*aHZ!sA)oxwX?T%MPlG|)s}1jg_psqN zr=4~h_!*E+AN}Y@-}%mW;;6ez?)zcv51`{7dT0@x>b>{gi&tP~z_$7M`TOpB;K2tE z9z8lcR|lbowR+BwBvchQjA@LGGR{Z`yn&o(oNyxTX^zC`5kAM8*uha(T@^9Am`Okm; zi(mZW+}zw*XPy0m7ryYB&wQ3K-Xz@Kk$Un_W8%7IB0Fw}c+MCP)T^OA~M940a zK_(f7pqR{9(WtaRE^&WlgcEGD046eP6Zjzzh!{_{G7uNB-{=@|9W$+sPXROzjZNU9 zC<3_=>vXqg_Lm>B~&sqH~>wvovhDz%K&@NL4Su%tOs*`-iN0~9n0l8AKHcuWgb zHXM~I(4md4Ju-<*v&KZS(m9a^Kkkbe9iV>U`;vbPr9p)5ETy5iIn+1KWw3|v z5ulf}Zz?PhgKL=LVdV!$mH|MHXAlnA7VgP{BG0EsCv2gAS3dl^_x!Dcd%Lj4Qmcca4 zN+{ozk$`jHQg!mYup)`t)`Cwiz4&~w@dkT=yVFP&O9pw7NJ>Qx7gUs>b&MDxiRZvw zeetdvKQh-PojMMSS+Cpp**4y;JARhO$vbzV#|;hR@ziTT&WG9+uA6<%N;_~jU^e9$ zQHmDH-wM$MuCux(_@e#$_kpb2w=Z7t1{;2BpENWUKppmkGz;(^HZj0-uGxXNyaO)@ zH9S2%WC)F%8)%M8MwgfID7t%rnpQnbtKFHe``>JK!^)`OF^n#Oz(4U0#Ny6-tv9RZvV;=M#D> zY<`JhRqj@XbT)m1EDGMKO75Ywd;}zt(@+*~6cSJtSQmvt^ddfr>=r30u`b}gQbIq{ zWhn`PXfcRhFzHxxq1l*i){iaL=a{%05+DudBmfAcR3JZLp*qO&0t7;$EaNLk2reLV z`W)Ufcc0`yq^^Oq5TKWGXV9(5dWW$p2^L~ey@H$}SY-hy1xZx{6vUfpz(SM}{y8%` zf#hQv^^~| zF_pY8mAEXP-e^Y~oXMD{HLq+GIXAsqM5>GiCqO^U6=w+?%FIyzCW(tuZ-#O>(2A61 zDQ=C#9RQm?!Ow!sNtV7${?fb9(jEaxTFsg zIq6>7lqEa?R_(7%x;O;|XckKQk-RcGMZ-I}d=QI?(xpnI<#0$CQnV%HaIBR|^&0hj zQ-z^DOU^K|KAN*iD=byU0@JKgs%#O_Nif|_$UbSRLUg6L;zh1{Al?WoAe6&7);xAl z`%%AmM3ldwsWXobMQYwGten>8cBFiK1|)P+Ax_&T(*vd zGCb%Q+f2{_NMJLfz|epnc%=t#u%{#a@ct2xcm#bPHe{lmGIid0qZ*u9w;AlAZc*(> zg$tMlcMi*VV?2itajiBz%DI)xg3@rpBxsFg4*GM)W>M{PbH^4I=3M_%3ev;Y=0Up& zGx8K}q7!%PYqpCd%VIF?Y8junYwUieO*>iAI-L*9LK--Co7>wfVn}|Yl zQYiqWWiO9PaVdl)O8g~}cj-*h4^ys~a?#`t$Wy0y2^@xIvAVd!n|K-;yA)@auV6A* zgM7&8`;ea<>h_J*CHT=n;oYS^wAdJ0ZbE_?&=KB}tK5Nq!pEOw6%3@+LH$bH;=(g7 zH&^i!I#t4=Z2;rZIHqu7osO5py*TM2ew*xdAV8SxO3^39!K~hIZ$l=k7Sc#5vz3y8 zE6FC5P*`uP@=YaB3|3RpprA1c8u=kM$T8-5r4&r{%&5a2N=a@0kyP znZeayVpipW$pnUU&SY-4pfm}YoB>ZM*<_}QbSg>`!KXJRDOoxxfo+>$+6nq$qD<6g zoJSkZ_IM9(Onx%GM`dPwYG!PTACA}Pv1u<&Ich399C^7&zit}GJw&>!|F zP6K|dL7)S`xhIz_6DqG%HZd9q?L~UZ$s5}o7zE(xE~u=7RbA;xDN5q%c>9U#4HzPR zG5AP3Oj${PV+o1^>CHD;>dj^y8mdUr z2kgf*ea!2)&>*Qk-<+QXP^=$2#4>xhF?*y=^mq)PC)`L$)r%hUXc*ee+#sr&jJp?( zs!6VDBi&+Z3NHp26o%}l9J$$cqxas?HBcYo4Nrgi)AJyi;g+q4JkXUpl>2OM66tn? zb+O#KJ8bTH2EWQR0OqHLm>?$IByz*&@Rz`IHa!hUK}44wjL|VE2cpahhIZIIHDg0J z2I+?-TCADkC)fcViOI`)P~Yp+fa-P#G76|h6QQVEG{?;J{;AqtOd{ixpikk=0iBN8 z#1u4KG!TeNg|i%_h5Zu(@73k$8hF9UsY#Hr({!Y1Kl$dY$U!5Xuo_sySm$E4X3iXY zaKf%;V<*bcB|ffS|rHvmi{o|^_|7KIppJi1V*;c6( z%D}vhRe9{4VBRj9G_!HgW|XwmLGDMLb<_F7PE+Qb;oxDN*=F&~4HJIhN(yoy8M=#A!X?L!4GNB~B|op?;p(n|}; zcn#jkT`;;~qOWMUrRDU12I5l`2q(`*WIxkdt_#gfK!sf7=P4J-j4K=qB;qbuFs(+2 zesS(Ektei|7mYUS0H4Z3AXUkr+EPqlJjTi~A%j~8ONMI>8%%+OX{p(S6DhAiW@4~% zHHJifWao<*D#uKQQopL*j*G^V1eQpT;UP3vq}V5YV0*gCHQ^?bA1iaN+u=5WcIB>M z$w@5ajVa1Ys8<19$yth5%L2xaBKt~9$Q*I>%*3mTBljR=N59QUMD$@P7ha2M2>BBl z`3ELp3!3Z=-YmayzHe`tD>H!>gH1{@p`OOVDxks_dyD&wSY?&)TSfwOl!AzM;9~f~ zsz(YThwGzyq*gH8Y-S}1aQf&~l0zlD{?{ECw)Z}Oo40Q#y)L_t(cAUiW? zXOYq>SaiT8Im5UdlAUTCe!R^b4$52>1kGv6(`|3ft4e zEb5E|vZ!@qZ9gXR>Gnzodx`sqo!Hbs%r}T@rXRHm7fn{0^SDPOpHR3X%Q6W=J)0;< z)J}NWWWEZfZYK#3LY`?V_$z$Eg7?IteBAASJ$%=VAMFkHAdb%wqJVZSb5NJh%YAI+ z`yly^cj!E9=fK-`x=!-PKe^M|hETSu~4mL(MAo^7aLF3ZMx=bN;;88b+lNO~Z{u3zO#2`X=EHPk}oMNCP! zTy5pRY{3GvYsFTPDw_?#G|aPS=^6_KTe;Tb|Jxph$VP3HHTMV1yZ-v?yWPi9{n)~T zUt)AkO4sF#T_mQI8cs3^Aw#02^ql@ne3rA5D{&SRSW}gQLGC#fb;=kH%aWbeHm8Di zYzNyBPr10_EW#FGNJ7HFT(m>K*t+~nXjAl=L$D-(feVXN>5LYWhZk4`kPr*?xw-n> zEXzDgV}1^W0e+1-gj(s1mNU-Dg4e9?!s)|-e6VZ*B=DKdwZePO{;gbpH1{okzv}wK z`OvE*2Dy=3(A1kfR!}T~BNZIM8V20i#gVHbws6CnFp0!uu;_$rgx?|w=?jYZ#*uMQ ze^9}hL81F7%N{1(2197yQI|<1=0=>Ph*>iyg&Yo*JeWMqY8e!~Q5>Tt-Eg8z9;ETP z!_NFnr|_(Zeq>tnoIB34J=DVSa)AE?@#{Z>6b-jew{;@oVv)cWcWB`#c9G7#fJOoj z%*ZFw%v5c>#|{j4lz*eqUHAqI$q1-hlV!-wlD(GmszOp~DYS5WK&~-NV}Yo-d``L*;ih1Tk(qrQEsLCeLo0aYv&?jYN)f3nLG)MVu{}5h7n+nz z)fqfQcz?y!>%om@d}Q>}iykY_O!XSvtk}g+#7X|2DX>xVfR}a?+6RVYs(OHA;BfD+ z?amwjZx67Sy%_o#V{PcC$+xd*#6QU((1XRAAh2!tEq`+SXPChmh7=e^DaXv+xv^@s zv8ky^Ks&$>e4;GK^zbY^y~!tKyywrM(E`6s5K4$KLm$UHGpOQzYQXDoei;4Wh*>4j zmQXF{eMvZxdc`YhSYdkHn0qz?b5<7S=J7#uv5p;TQxjNihNkKO)b-N@JA5An$I~p* z&~JXJj|I6Ce^;I;Dw?4PQ(6=0c`6ImB9UBaQ93&?Rd0I0#RP%F;0zNnCaxeG!dmXd zF1BFESjsd3({jYkSFLY0{By#Nj=;vv)9nf7af~jq8*Tn7AC6yUbELFOI&GBR-*#U3 z6Q1yd9(PlJ==N-yB>N+2L{#gUMk})6fCHGm~%N8B*y*up%WqG+?)=pqV%PS z5s^H0G{eFo7Y>(z7HF(<2%;?@&q)6%KSTM#nKabi!c4(a#AHJrw z4qsJVR0L>+7bU#u%r5~gEK&%^wC7qSyKCChHpfhYoq_326P@&&wEo4o0uWjeM?RA^ z1q3=70AL<{M}-v$7v&?09ma7JO(0~#=D7yS{CpDuV2F6M91g?kT}Yn>4aI6n7zRq7 zg%%E*Ioe%1lae{Lex|%S>HX_#$XYm~3VLJ#K7k`EBOBorJUN8IB?%sZm>5ShCJZ;f z2=`LlmssUcOjTn5y3-HWL!ErK>|hu~uQ~|(h2?PI>#Md7Ih>@3BfmsZUdH30h$ETL zv_P4C7*bH1+MPW;I=Q>QS2m*4vV-};Jl`4Uo4gGMRnLV`Ry;(eqSZ-45l3pegjQs4 zd36?@(SagN(Q27cjOO|d46SkcP}LwrB#+{d5*;0}B96V0$>?Gorvl`ZS)vOrIt;~% zsl?snJ&BNu@t*!vUn8VY)qGaPKz8r)=iRD&QF^&`kgYjta-;c7BjA2;bwV zc*UR!5Dx5zH)aCyLwpVZh$UPchY676h+7#R9n9VU0dAy;PTamh*Kt^^>_%l+wyl=E zCbsU~cpPqOa)KG1Q6?uK7c@3G4lOwp>IPM2v*&Vqv85PcDHjLs?sdJ0P zPwKPBR)V^OH~T=0CD5x#jYPKTGByAg(}gF)rPX6IDSU65$}4Bz%onwJAs&ZD-nK)Y ze){P>j#U~QoyJFLH*^{w*^Yq(YcCa+uim&ccQ7m}lTkJqoo~qOK~+T5Ft!T@tZ|c6 zBEpSL!BpW;XNrRca)?8aU8%1&6%L1>AS}=4&>;E31vt?&pTV7?vBw#ZRs$IY>Pfbv zLeV5!FC*C;kz^Iacn!MGd>08xv429UrILFN60?1sPFp>vs)sO(tAkWeYG8(hTy2I5 zE5PmtRmfXLu;0?+0t-Fy=##eC0G&wj7)Z!0F3vA6K@0!|K1HE|lc1&`sIg>f&b5Sa zLW4i_R02Qxi6<{8A)Ih$O-_l;RW(5*V^E})@nq=VC?Za6r$P*)oDj+w;WibPV;XUU zY&Gk+BixQYxSA1>Y$e{$ep6$Gj$ zR0(g=ki&7HBl-!vKx+tSq=>8jG>wUpC2%Z<6QVfO!l5WmDB^_LrxbA_#B`MLrHVwQ z1UtDXEeH^R88T&*Wg!4gP+qh)Em)4m)vXw36l;8V>uAFqL0So<+WXYmGSJy2GmZss z1aPvz6}Aw?v1jZgV>=m6Nt7;i9LkUiKa1-tXPsb~{g0jjF5`svGCv9Y?S~`@Z&pgO z88wQCmkV#W{8}1EVm1`T5gB4XV5{bkmkz9-ASXX})N6%#gElU-USoiYKmx{@-u#Kb z?>3M^odrIeog-v#47TRjn`W_cl8yK49>326Zrju{I8bX1cu}Eq(pyA0PPatZ)=ls+|#zwA|Wxg1%V!ey)13 z&vC1P4!RDuW$<44tIhL2$L+FXP_SZ~r=zrZT69y5IG#b}wzhW3eLQ^~%inEyF@Z)S z$F6nK0UEm^#u60DxRN(pa2FdzjK$(>)qZZlY+1`Z>W&@@oZF+_Sf3)IwhkJPXYW|! z*u71JelDh*z1k+TXFcm#Jz!q_p}Uuk-ETiZ*>?7p^6G!eURAZdfSm9{3fm!575gO; zsjyzXR3oQQIzFxp!##u6Do>QUs+aT`1t(ip!A>DRNQRJ$d=$W*8lOUe_{W~{>Afz< zc7WH(nSB#ed*y@%yA}pIh#+feQv_1Ru0CYMS`k7PGlwUSaQ)Bl(x6d}g7!*{)C=rk z0e~%L(rN{CJebCT+A%t(IZN}8Suisj61lBott&J%rGi6V%px{e(u5P8WC=yS(KnBB zorMaHP5($-VWk|w6>8ydHWdfU%P6#PvciW0u_O-ZTysjZp@JBC;&W)>Kv`sUY2I2m z5VL`#%`nzh!?_MH(&{*s?_#vC-4~03{vfWBn3G6SVO{dH#3`tS6Gd`3#zNAu#FfC) zRoec-4ON0T;Q{KS=!@`ZHKfmqIB-)OL--;i7^MnRDdI>&)iSEojA8Bv04jhbDB@5E zXBt8{T675aS0{mVQ3zsI#EC)E>?>p7LYY&pm|j^?3rN&Qe`pC)qD1i^q+h|YlerKT zvkA{iTpF@a5Wmp_a{@v*Qy zmm!LS%8ASq#-n=f6|2`p7blD25UdWvJ(aSYl+59u6elFLj(&gHMd!vuWfM9-Ujn|C znTbt&YhK{AEKqus^el38h-I8(58id(owsxwEuqc=+2KxGzit1#I@W8VS<92C#|T^= zst3$?%wrzY&rm zNx#26q5BoHcm-xspLQpAFZb%H{_9@CBFKh8C+*-vr{&n>c+h@K`}?>gN4d2iqmPw9 zV|8Jfnp+Ps=I|!7hdBbtPIB2}Q}(@)MbM1hkY~)k8RmC5?N+!^>;FOfp3pYmwv+W^ zYIHkUrx^j5*Gp{k;8z($<7BW93*Sqc1~$wW_He7r7czl7U51 ze)J@SH7_BPAmm~DwkxxjtXw@2<%vwe+agovv zcvW_Cg<~lw2yg}0Bbt$KsZ#b_CxdVxa_RLRh@uQ6)EAxX}EO$|v}%*jN~ z5~GfGtKu8&T&HOA%mVQf&0L*pk>Qm_*wD@~pEKj=UD_ zSw}4#Um-6>;Z@5#w6h!%nDDH3I8H{B!(!CA*CABN<|TH=x9}|6S3fd%Az>xU9qsD zCqwNLmm6(lJd=iQ99_I3KFx8Aa-OvEXS*m4kgn32TN;O=I3xh!UZP|e%vDHT9J^19@=+^l7V%l20fRkJ2UQpBb+}Z-l>)B^NvGGn1+RDA)JvTOBcatIXTfz05j8zS|qX-RVh{5PE zqV>3#$yF^TqUE>Bz)Bwg$N;#el=wC_tOpJJGk0qTO1x|4U!y4B;vPAZZXW` zptA~$*Yo;2aAO7G((f{Kq?OWjO(U6%VL5h!(CWDfcZC8Qs?Kfu#MTutW+2%HUpw#8 z_H-^4L`)G&*&nqNF_yp0lXoGW2sMEi5q3%MSo<3k4u(#Oe(!#NY`)_s5 zgcLU>-G@{nc1e;DDYS}Od?`H5kf3a2N%mzedOfG;Q-=FYS#F_Z@FbMq2*QLRKu&ii z=dMC!#96H3cX6PtJusNx; zqNyCM#UMTlLMV})2@ai$|3pw1FG-9?z(|2iO1deoE&`-DM=4Gz@?tYN8#QclvT3|e zS~voV$#quw5Tt}*&oWU$ z69|`=Y4%gCkR=){g`eq|WPa57Vs$`$z$hX{lVHqZFG){fq!=bAyT%GOkZ2T{=*$~BZLgm9Qskr^_E@gcKfFaVOT z^fd)5$TvfD7G?UxB#MJPieT8h?4l?JtamH#T!^E@GIwYuX+a?s1+98$cO@pj#}-{2 zb{Is{Ngvg^IL<@JPXP9)gBotn>MOi3MAo3WMM@THYg!<2LO&_fN*5QJWJFVpetL{!jX~t|^5R{e`|xb{bm{TL;wA+hS57(ilAYeSMgK5CxxB@+IymI2wS}!zL$muC;ghf(i{4K_Cz9XS$v@k$@ zySi&djI7gCg){%|vF2eYVwqb5M2s>)!)>-rOk`=XwHkK}3)kGz>iF9HVfvYDCy!!w zgX~&t?Rm5-hsWxDc1dj;5NYuz+$d3i!h5x#8@nOKqTWhVy#$Rk5{n4W%~tUV{9W6W z)9ueSKM#AiP>u72Kks?Z>v0G3_kEcu>6SrxDOsHI#VJ{wUS;N{)M^UiqGw%_N=GnN z6Y*4drEGf08%pF5j(icB7OLoAUEtlPm@9S^uNXi84N*o+sO>-_6}$(Bph9lJ!9^2v z(V)p_&X8=Oih{?KirNgL@)sDraoVsah~x)_ixR9Vv)g5a$!q~4-)y#ql1Y$DY3b3? zP0)b$Q^7=n1h%yKMUw?tmXp^RJ>z?2=nnqg27=YYWUzao!+(`qG9-jhDlXoVhVoNM z3nUJkQbRjAUi_s;m}hov#KRnBfASE}aG{Gca5T0HSEYbc?nBAk37>$tuH@8YJym{} z6N?*B;n?AD%Dc1spEYo_Sr`=ojR2ZJWxpo+qNqbk|0HyaEr-LnM>cvsMuaZ1ApLiC(FTEXyk5ggX>*5)rJMj0|`w zxKgBGG!NZ6El$)qraBC37p&%**X85P|ax6%r1oVu!18AHCF-XOjg}Fs( z;WR0VgPa5?7R8~EY?Y4B>lDy%H5=M0hf^)#(3+BBr}*l$njl0+#t-ME@(sOMC*UT% z2W4yu1)`k*u0XT6$Vpx>Fe(U4K27SVcKT%h0ZbjGgt|%6;gL%(gbru&9`RGaHdA0@ z^li4Oq>P*eC019Gmq;X%kk*Y81DaP{`pOqS(_`GTHdV%QodD0j?KaZ-t2Ug_cC_;B z<#Bq$!V@^#oT8`77^A#@H)R{ZTic*XxUR%_ZSe0Dt=Wy-c8RyW7M#pTx_mRW3!PM! zM;*Aq0g3Y^Uc8`)4>8A5;M)zS)l0Wv%Gea6TwD~_sRu5d8)>13X;57Sj`;Ix>Du%?O0iguLxqiw}aZ=MHRyg;`WoE8j60*!w7)_pvBLq|{Iah1u) zz$bpRJ>A>hY}twjKYzYP5F<@zU0@z1=;7Uh7`IZxn{JxT{ji6F<(dcVXCe9JFMoND zi#hb=Pb?g~8?qTN5S70RCZo$7{#>rlK^ub#8THwv23{evF}Kv5qrQk&+(X(iC=Q*- zqiuE0pv*)OhKdWDpQMKcAxw(dye=+PElPGos6phthI&IViBd2C43S`F`JDF|xKwGf zVZbxZ!x-q1v8ibqqY!D7Njg5IIHeloIuvu|xHTmbNaB;>ai0&`y)+QPd*_Slh$Hz^@cab8(L3cl$p3CyHiG2HaOEW67-8)3SHviAxsIE zXGPG3=BMOC9qr~~@lUzbs)PiKak68m1ejBXK(BTiFBy!)Gjp0$qR$fqI429jf60s@lS9TU{iO zAQf>4BO!#-oLg+pFXB~NI7N{(4*T|k0xa z9BZnkal|9KE7>hXA!6Z!nfhEzM!9HDp1{7a@~ZX9OR&?FzzNMyWuIdLI_9H8G9RS$ zsUrtnb78hQe+&XSx>=+wXJR_&qY@C#&n?dLVOPGsI#c%Hjou@V-!clcaPT=^xu&Ch z?$qpov>gcJSY?QD+if1nMDUP;^i!mwidahG($N|?OlI$ZKn@}sEt(2elSw|tr!T+w zV*aWsM7-oeM_ekp*wUSqlBzR6un#ERAN{VadCSM>@V&R*bNd&%jeb^V>1Uwsw%pdw zZ~NKDD?8qE00R4|u`TY?$?2_mz&r}6H??nDyoSNg^XOgHtePgWn=+}4d>0J!xKN5$ zJp5F1QXF42OO+5s7>^rPk_OvuuL1Xvk;%xp2t7+UknCs=Jq+KGLgpx_|Sn^5?lywD?tf6Kvoe#x~A%~)RW{7sR?HVdHEEx$NColqYI^y2Pz!S zZ~R`F2Kh#r$`O>sR}dprBp#tC>zRi(dbI$5;xR<-2?X1Z)c=-sV&7528UIV^{IDAR z>uQTyl_(B?B`FoPivsM@mu|-vpVi3xMt~!qQ#jmC%AaYNFTFij6DOHq>+-0QOv;x!;_Y80_deQecmB2lKDw- zZ^}zPsW+8N4tXueFg$$F)t&O#J4Rv~;%*N_bPZ{=FA(;52|b7dXJZL#W23zOn>HeSUcn(l{v6 zupx|e7C|IrC&w;n9HL5Pey4+RQp5=oO@Bf#3A`n6opKK{autxzMN+6ZpygQY0wB&` z&XyL)SwgqAh!LrBCE@g13B5qQ#A%Sv+zbwF9UGoNDCwvQ+>EJ?V~16X#8i-v*e`M| zYQaS*91vuvgpg!GA<2tn2qxQzRFHSw^s#$xzq#A+Z*`WoZ`U1N%K<9?w)d~vzAXp# z@~b{iz1wE99e2Iu^t$H7xs$eiRRTZHT6u@gop;G7ivw1Wf zte}>b`FxPDS9{#!0Ql{^4$yK%g&C4Rk7eQ7L~RoJ3zSF^2IP*t5m;eO%z&$_j+3vP zqBeWQ$*hsZ8T^3>!cA^Ipydm;<$&dNguR*?vRbj<rx$Tq&!q@n2OFK(?x0p2CjILmf~;iGD;g46h{MvsRC9SO>p!|%uSXii9?bZOSsH) zkWqy!*OA)DC~Q+Yx#6;55gT)8IwML9$GIHjCWp#|L=*Be|0!7-d#O1jk*n2o6owCC7&Mxn4DI@2P^?)m8{HOh!(JR6M}a#(dE2=yiqN=x)FTc431AO zq+CA;rc)qawUjbCSesF~%fro5AzSPXzT&`jtW2#*s8$%QuWW3=G?Fi3gd1YXl8j_@ z62*e%6bPnUotDkxT?#ce2;r6%o!kl2GKkKfBH#E%iMQ+)OQ%G(U`XRINU}J4Tv8Ur z8AZ$+)Gv_)f)~cqiHXWN+SNZ(O2)MQmH0~IG7F;=n<-U&6k(-_NVM#b(#QL8P=5x; zs~nHUY{_Gm05ZkM1w|YkPm_eY0fSxDi=?N+KmakceFr!j4|b_j>|*vBC*PdiAva&wZ4Q<(7_EnP zdYmsGFbuXdfNdH#mgf>nkxW4g0&LB{lvA>&WgT@Fd1m(6)& z5>bHb;D-z#OfX1~3M)&-5GNn>9`U$|s=t;0l@ z=pYe3s3e`pJE{4Wnn>seFU>{!I~ul{B-IjudsAYP1G9;S1sBJ>3ufV%$U90%q)HjU zIx7aUtyobbCwS5X7!xxoEJ}eKlsJn$mUG&@NZmmqi>KC_b!q}(WfjJ-c+~kB}$v%gxnE`+YxBIQB9qv&V&2_ z81y+UZtrex+_uW^(c&5MwV}K1y{c2~Xlu4YTP5TQM`PtyDBV8u{%y-8r&?v6l=mAR zAOP_u^x(a@GkF`tVqm6XcuRP#Y@T*A!m&w_`t&xWjLQc!YT7ysD;_*Mqg603EXFN> z(o_j8$2=*!c<-CaRz(85v3vgW;)^eS+~XeC;~uJXfsl(8qB`Kj0}p4iuF9c57GY+|A3u~4UZ-u8c~Vh7X8?)yy3X0v^f;YuYRNV z)DqNt(1y#8G)9xz!j$ z3cK2;!Hf-kaKs@iMS(k>w{Xt!XczvgmG>%*^3;nAD)Xoc(o&5~3 zTmrIhtIp#77oZ_^Mngm)MscAbBc#Z~V3y2alH5zb4GfLy6*3fISn5rs91MXQ`LG0j z%MRyB<|fuOC3nev61kXc9#N*L_%6(^+Qq}#tg(WlgBY`m7iGnW%tBqds4+&ovOfyI7|L4tAhk4&Q?k$8RW&!)QjvF*@i}?Z5{ok52L?R%Qh-Cu#y+ ztJGQW>|_qv7+fn2LEZ-93fGOGbpxnJj?E;56M0rLwHVU2iIdIsbKjj`>M_JzfBp64 zx7`5P7J=Coe|`$ibjRtIMcT*K4d9jNu5IT5-rJUTDO(}zTEV%D*)pQ@w`nv?9^h$R zrmY1xx<<1t_cA!hcGf_ej-#cKKhcUTHVd}%OxtuUI+ehN@#^K)j=B9*UaX5cdOgW+ zuV-}kc@vz=wW#a;lV@G50QY&2&fW6jyo?!bn?BZ#{NZCC``EVYDvg6a?GNnsq$fS8 z$Ne>wBpsv{co-y|Q?LM+Kxn^K>Z=XO^9BAu=%{ zgCVy=b)?JVdPN=ekKNlnojUI0+rI7FJbtnsRqNJIr)eR-xYk5sE zRcS&5=Ce&uws=ooUB9TMY=4MX3?wOu&$IWF8mwiq1uZ2=wL~?4!K-LESCHp z;T1{56#}5qx4pgq+)|35jKceu`RLr67)?k(WHJ)<6Cr@khLC86P zI1|%*g{2`U8#&O&Cea(|dadfUCJG(41MekgYHw~$nP z9myyWr%+V7`wO4Aw>z_kF*B>Plml-Yy6ba*Zv%>LsG#?seV$^l+oo%v%;c75(h~Cd zecP)krjlsd^aTulh#FAl^a`zc*ldG*Yc`6TAVw86Q-*o@!$A%2!Wxh#esSH2zSDxM z*ID~qMLWSaA1kJn_lX47BY;F92*G_-{z-X<9Ile~DIJW$L|hv#u6L6%4P_zPWZrV% zTs|S~oba*o1Rs*=p7^)2C75URj*a2c9j?pTRxNEtK>2N(^{{4rUVH7eJzyS^q|ZP2 zWm0%FJcI2KFQg{*>S@`8tY3VvH8k-|>}M z_`qV($&h-0P53&B0)j6h(~&zPIe{N&5Jg_4G-x`PR3+>;m@@~Y;5vN8gBT-?tS&SA zD!>eB9~L_GITkBq{UTuiEMR8vn}oDejd>Rc=Y;4CKcMhY;t+y2>Pbpc5|GaY`ORjc zD7~1<3`FEdnb%?O*!14<>3uACkAw4=gfuxVbyq zhXCC+xN?(mG+}Zz))=Y?zMxJ|pYx)Ndy>p#kr;sJBmCb8`Xj(nNzXfcW2&h&oCNhC za*H(X;(xu~8rL2N!FmC-B2)JusTippvhGNB$-^6_6EMP|b`I`^gK62XX22Rq;3@X-)j6sl^T^~%^D4_8m3cfMG4+S z4-5cCFGLZ#={2e2I7?t8@vA~mWB9kbBf$uXv@dLF7fF=FEQvA?N2k zx#8#8)=EO*r0q0-l9mku91oh6Nae^~m4cqNKWh8TpcS2K3;%Jb-D02;5DSe zTuamf62S9u;t1Xcmvr|npXxCUAz<%W&w5sm9lGJSY-pA{bhAl%4C6fp|E#f2vd)KGjk#b&z@MkmQf^bqIgHSfe{*2+JX|#bKge@w^Fj|}>;w&ek5FDv-IENU$ z8okOc7c!cR(nQHlVK^dV{HUYF;sj}xaFO}!=)cj;*%$0DDRw-8L;J`{c9LL#=#k=$ z_8zoTn_yG&{fpqJoS)6YxQ-Wd>O93Jv_8;L_w)rP`0S@tHfidizAU!}0g99J39Zlr4}l~kn| zg>O4f9cc`diztdvg;qf&fFp*;I6j0=E#2bas~mz=j6JMSJH)O6I6)+aq$R*oa<~Ob z)Nn*NAQh=7!qB9a^l!4Pf66`J z=)nMf%rOAk6Da|twwf}q69B8P8ck?ewaX$&LiqAJorW|~nJt4%Y)X^B#BNMqK0Puv zh2-YYQ1vad*cF-bn?@LX!lK4dwG66MNT+f?N&{2=ob*>z(gKE=QcYH3EncoB*JvG? za&AlTQw@fppFA-1fLLiF-c?KP_9{ZXRy`twR(^#=r+}ySCgSntk1fm{ZXkTrEV0x5 zxpkD{FJ*VY{w#>m--?CdF*R3Dhvd;71=MQ5r zOq54ki}W^@w*BG<2Rs2afG~S*aQTO!=dhTa+035vv(rjHZ_*N{orq|D$r$l^etU^! z{wj#7#EN*I&6#l2(cOQ zE>0eZ(8uKws!lx9IxOFp*BqDEr{Hx*K-fLn@k zgiOvDm2w2=62q3Ly_iQm4j3<3-!QH6SWqQ&6KydUn+<5mYbw8vzPcpE{Z~rnE^|QA{a#&=_xFTqqGn!^34M@qKXcLLx?3n+cJfBsN*=loU&Xf zrG$&g{TGe8D*tHyabDU|s@yBJR>~X6D<^ zbuMB8rIf=!vvN#(8dz}`I=q}^W`58EB&3U90V+&blhlaXG&+%?-Px6~%MiifQt1}E-P10$w! zp%;e8Zp{Bge40^Cf-PYq&Hk<4m4O>$EjqwkPxROUv>a|tSE}bG>}W% zR@gwrQj1w1a|0E@xGr2wYc^HvVz@XJ%W2zy9d}_b>4yFC=a*b^$@8A~ydHN}f9S5o zqxVMgH2X;^rxpqn^KBhkO~j)1+1L#uHM4L;DRw2auha+t4O5B>);N!bg2ZyZGUXBw zmQYZUAR?j21Y)kZY%f33u$0|71BvoLq6vxT(t3$K7Gcks0dqhdNigtZu#D-eR-0yV zGUYLFFO#I|WFgYEi`S_BWZnD>ah0fmQjmTnSL5{7@<1yB{CrumUj>u`5a>xrOFLvX znRR+W>8dSINdP07MJhO;{Y(-jsxU1%dsgI~6a?i=B8BgVe8FW|` z9*&^I2vK7)jP%=}p_HRS*%~5F&(3(2p`32H(jC!#w+}c4P&RtZo(4&&hR_*R5H~M| zClyLRR^p8e0tBKb8c%ALw$y_aGV%(lG2o()m15iEglwTy=30mXj7KNWB$V1%Zp zS2)3^Xh|}JB((h+c{^|x1*1Bm z5+XX}6?Jwi);O;tvzbF{r`ecq)}_vhGg8(P44oq>r3hr{6-kn&V!Ss=P1K1RUdM?B z(aFbHM>*wVa%z<$w4{1eU1=>&511AdluOf`WXdhUr5`;ghD=g4HL#>sYb*fic~W;T z25lu5RHtQ!rw6!g9;46&77^(0Re1-I0Fg(M()o*lx6c0ta=g@pxtXqz83?*RvYHk(cCgNE=7f z4!mv+6wo}sMeZrKG#V9P4=oL-hjDz}L+$(>Y$<8clNTFdr)wdsjoyooY?du7=r+XY zKeI($y^-Z!1x8c^Vish`)1Q`H$yju_r1k?B+XELv+?>;+AMNC9)=DsTR)uH&Tz1jm zd)8TJbpv(XtOtL-p4jGHjr(qK<3}4O@Ep{!I2}g;X<1$tb4a9wJfQt3jceQ#B-9l( zN7WX&du7i$5??7CE8f@~Pp(Zo1gw0l)j+SMzQ97s7HGP_{9V8+9NU`B1_}~?L90(% z@OX>&$oQO$c#--{0L=m>2be-c3-AE$1o#dyZ=+(Ff&p-+2&sk?_a;xH z0g>-JJv^BW@tR4sm5-^s_w-dzLGow~uf=d|i$oD3(VSe4w5D1inD=mg#EH-Z;15;L zQ9?3D#;b@YH=kVf*g}%FkH|&@`lb%o*q2P)966L6VI{IkijSZyMY)l&LPuqd$*DCJ@~f!^)sbU*&MtZe)%rCZeUUd8j=mEk z2t2DH^SI(9je+R|s1yr1om!+7^tfhxQH*go88486H$zzLkZ@>DFV2J+^sc0XB}?w2 z3lLBRFypJ<%q=b)i-If~NEZ%dNH5b^VgUK8o;W(O{V0|bK%9MwmK)~KuZDxE5 zVWoS4#cWO3n%KpygUglNFPvr+st*;S5XIclQ@R zId}9>w`sIgXUY5Ik-5hZz2+$0d;hlMpK-<+8=c$-`){-cGK?>OxaNm>hu+_A^a2L^ zdjxYm^i#LJ_bDGS?wO7}sOQ~P12Qo^MRLPRAke1$CtGmz`7yPngNftO}Nt?Jss z+4^SFF?arLIi@Dv7LQE-o$~Q_qB)Kbv zy;ZK&ZM`y2*b!1+So?%|XhRLX@|Cabp~A8ZWAvfhoFdObXt6nPt<|rub$vW_zp{QE zYbPurhA^DC5(g+0E`Q%}S~KTE!G~Yzla>g$)3pQ+PdDf-4CeS{R zW)ZqG(sPPuN_tY&Q>h3@n^2Sm-fYO$fIv9QpO^t7i)a~45r8HGfl_ixG;@7kx=;sp z<$E)*^;$#vf+lDlk2G0jphrtoB*`R_R>Lus&X-b(R0J68U90B@tO@OpI939Btiy;p zQ;eBo9ld&CdLnzi0kAnmp0ek$Ah9@s%Hkr>GBLAIbiirob}GvsJ`|M%c8jmn$dMXq zl2EMnbB9>6%0^WcWbl4@ZDKSSY57HzVWI zAbu5S2R~kP(r0e5byJ5&LE))}1SxVRV3+^Us@h{3&)(6K*farvYBm8 z5?e%UB>jzD#OdWO(PPSQ`|8?juRZao8V%$FQWRVjbVmwNYLgWI3}uc0pL7ofGYNW?T?CP4k}YL| z3Mr#9>!>I!0z7sj2+E9)g1DPR3O=T8w_vH_{hVKsE`m5v*7K16s=+)dN5XqLyE@-M zDv==r_;3c~71I*z**~%8wDFnK#-{g=)%FrYj-?a@@CT+#F#5a%awy*#3a)lgR2oKS zw@V%0h&GK&%FyTqDiMgub&!6U)lafY5V4)=x^hc(xTLyxU-FWdfJA!bw}1P$zw+BJ zK5*b~{`#+9_1)k7r+@k<+rmJ4*0hzfEv)8lXY$+3h&JQky6dic+~XeC<1wm#?MCNC zPzezeVJFH|$YTwv2~Lt0epgCLA=K=TM6C$pO#lP>Rba3-IWsf4XK!uK-l;wNYJ2ug z@7+JO_p~YeIkTsR0s;4_sfnrS$*Jjy+LT^v@rn-66G33y!;45x zfK(2QyYMo8XdF__k08x=MtBF?G29Uamc*7&anW|FJW>5&iX=6bOX`jWlVT%C+Z3Ak zlIXB>Nr1fQtcFF|rP!X9w2YHGtnAltYnJFdBcR;D6Qvz%7;;E6vBTW*sHJfLad|BY z{G=dBSDHmMU003~41YjXp-={`dBbT+FH*SD+LbDD5?3+#BA;l&~sq|E@27@}BM)_HbTEapuvr z&7kZA+im0Ung(dMqpfcW4ffc+8o=XcIFTWQ-}gR48{SxV|Lwcplk-S!g|;W6tkn|c z^{(yS&)UgZeW$=(C8VbXWT~`qV%&{49^P15pWUvgJo^^WR^7hs9q)L@4L98ItH1iI zKl-CTdd)RYyXvZ|u12}~s+YXvrN8!TzxG?d^;;kKzz6>1-S6Jw2}NgkF*@x1tS zq;U*l8%LKGW+}1AP^-q0{6g*M81jrJugtVKUpd7*$ale(jB97&g&=9X@DPPJT$!Ab z4Ta7pEMq}RzE@%P^OQCqaJ4k(rAjZdF$v-ehex{*ZV_?G7$vy@m&GJ=O63eEh|j*J z1a!R2khlyXnK4izV=GP{C(l)T$A#Ewa+s7)9dpE!6SD*h0UrHYbrJG5g)-_8T=H1( zMgtYW3B*E-$`UNJZVj=Gg7+e+gFZ~+__Emr%2tP$0LI900?<0p&VXMIoaSoi`>G4j zFhJ(hP#fru3}J*Xn!2Q_kkS~eE^-IKS{L9z?i^u|l*7T#QLra;R=JOyHi0~O60djI zcT^6~(j$?AsPBt!BG+N%Vj2=SriCpM8&0Q!8Pdy%obT57k%wxMRJ9v*qW{t(u91)w zxR<_M1;+DfsllICPbG2ik`gaCcLsYGJC$bxV|p*4z3SI93MJS+XetWAl#KS>&*vCct|;Av-T(I2h|gDnez+98$_koCxn?`W4SZA9a>t zkaQ}pA2|2XiAc1cFfn9$cBBQ11#{HOcy01|zU}H{N*DFaF{$ zo_Xe(ey0BDkN)VL?|i3_0IM6Hzu^sU_`nBl0N&eN^&6csrepgMZ!xoO?xG%sU*&0j z-8HI9FTM2n&wqZ8OI$qk)#kz56GfxE;f#r5o`bZyAAxE(h(pkvJ>9;NexND>Cyk^s zg(b=dq$5{ADI!rji&iOdfilb4kPXVh`O1Q{Fn3o`L4}!?9&(*F!NhQrlTv>Y9t2i| zTm%px2*a7$)ZVG-{gYFBCx8RNePN*=9*i*K;5oK1zXTNxXe!RnEzU!65k}-3K3Ss5 zB83(ipQcyp!61N*v1)KR3lR=}wJ^U@hX>jMUD045GHQ-;CLv@myEe2>lE9|nu6;#~ z9g<&Yl2~D7D$87wyC`BO)H+4nN%h!6idrYwU2?HI^}0327AaHwTuoB_}zSJbus zwQp$niYrZkW>+*B0U^}rs9wX}6b)##M!R~(`U}rxw4c|KObFWbP8~xfg<~npf-}z3 zosya8NqkA!1&A>NKUEc1ALL*t4{RsqHYY~<%dZjBMSP+hgO0$Y7>S&O31E0s9nT&O zfo?n|vI58>F$&bOsQFHTh(=bIm?2|`;;8ah1RNzjXbM&lZ0^|VozkKt*BV(6LLyZH zHs%A9Be_7VF|s;CEU84tU^)uirkTLVmZ5;skggFE6{K89q*@szRAECKR`s7f+`~F8 z`DYFnns_44Ht<^L#`spvA6nl>&$kthvu3XwBk4UlbvvpgKIePHITtxAieloW9f;%nys8sb6(JH+ePKkUiWNj z6GveSTi+0y_wIMU`$vA{wKIG680O)Bka*Z`zwNes{EIHS=nZf9Y3zCb{r7M5q_#V0 zaQZplo(qqwNC)5OMLnGRuM6{ValOShSL(+W0rRj)Ue8(x=3ev$5l6C*Cnkp{Ys0mv z5fob9W5j$*WWbi3Z`yJo$>NuxmV6+k@t`vZ@u!^8#xP967;EkJyb4#m6k8VINiq!; z^p;qW7Kko#lsW25>_mhl$?Hs%MVPATbMS|-J}E7O5+B<14E#`pp|Zy(aGP8@ zSuggcjI?3;JCTrLCj=z}v{k;Nk)#{^$ue?eQ>!!Q8E1w-D>3SGi@1c;P1FqQ2Nhxw zRH>l?022dK4Yj_|tk;_jXrih#poaxr9H^(dG#2YX$hd22=g74lVbthLqHZLQ%mE5m z0#TIgmI&G#Ss}4JyvkhbX|xhBjd38nH_L@xngj+Hc4=CQKY& zi;NMmOr;zSN%kt~108?^siztiJTRLUP)UBp!asZ>RG%wAkM-51`Ve1DAk(c;v=ZBk z&X9V7{7Iez0fNe?wh#?@_BV;7=f1)lOvNgmKyYL zB#|nWQ~+{(8!D+JOO+RdYeQZhN+Xrlk^%)iMlm18Y_M%T$PKX9V4Cb$S7jA1e zQnD$vOKG5~LuzqD!FA!NX1_-y2eamW*7>M%f<^xH%*f%7Jx(%0EUtN|HkBl7cAE#vBv5H;&8=O8Bn#p_NK8OxLiBBFe(6 z(|4J;NwbTAJ-psW|76opt|WuTs&nyZ1VZu-RkT(rqNucfk=C?wdT!NpEFB0N+BK1g zLis9M!Uv21h0qia=~oGsS|1h2AAA%RQ;6u8STCe#U1>-kM9!+dzzpx^vKrvBNMu?38=(MgG; zQd@PJ3aflSbLmAFs8{gOVhQi^78)}&bTfvHyd(4&(GUc}&|!xb^Gs!B_4dzv=xevF z1NNTtoaf{b$ZtyPvzysk8n2nV>t?oIcG+bo!92C|Z=vM$*q@34#1mrKKy82KyVFA+ zK|^@Mhlqh^=%BldcsSneg)x@?C8JD>H#{^IgYn4R*zn}U$X<*wtE-1Gp^UEX9T}Qf zSvj(Tbb2Eb7*wY*A&fTmO|OoREKK4E92l37V`p_`4D~%WF^Of@rJ?4;*cjFvF&H83 znxg*^x6d}s3sLz7L(=Ma-|*o0o2r3M&Mquhsr_-2Q_U{00`U;{qO(4wbxyD<&{^0zI)&M-dDEibD#U%kAM8*{kL+0d9pUP z3G|i&F>6LOyc^^6N>Ec)>2=p#w+_s^mnMr~o)-JD1_YXx*}Mj6_{ zeg*kZunNK6+5Do&{J7$*@H#$5l7S9{Ws&5g?Nnne6@_Ne2{6)^XS-J6WG;!3FfYm@ zE6mIV$PlR=R3>J|Cijfj_Kr`?jN=W;1k@cN_<^59pqC^ZnH)Q-pZYRF)lq|+zmg&< z1W{`!laqLrGAdMUQo)~A%Ar^eUZtVx;^ga;S!E>%yNc1JUCvj9=dl$8p(H|+yzDAv zRD&5A${@WK!Qf#a%egeP7)Sk#5aFOoiZZsD&9xCEnODlM66;IXQT~$%Zj6{K9$YC3 z$l<1t*+8?9hH2Dm{NQL$4x=Q=)KWxT85+q*%ScSVw7PFQcRt4KTsPbLFsBx zvF~HcAj57e#u(zLr~q-)F4kV*?F)e$`zbMlAcvGu6-wt+lkpJgeWG(20=hV4eN+Kv zsbwnmjFlzAH{iX2JxEC^qXN5!jHk6c&1u_blC-4~DkdVDJh0p*hv~cu&K2VUdLFa1 zk3t`nWgI1SekZ`-^QF%x#wI65C)pK4%!WP63r(W#9i|wi%E%YpFQiSio>D!e0E(ai ziS)*i+;4jC_%wu4PeY+K_fP;Jq#98XTls4a5_eEMZxfVHL0W z6E9A8Ypi^eD3wv&&p>+F+=Fy_If|pWCE4XovjUz6L+}G$h zzM{J&&+28b=kiLc%OS;u3-=q~nq&YQiVxqp;A3Oz!Yh^u33ep$Si^VA@fT zn89fh;A5$nqKFU6RK1~w)<%*fChyHTFi-&Q012n3Cua6cS_E}w@6=u>qpIxL1KArY z-$3d{S~w8A!7DUxtc>cCl~F?+HRp3M$LNJ?wltzTEqo%Nl}W}})~1Jn!@ZP%fu61m zLF6q*ESI4U)oUt+*vKRA#2T56NvXrbvjA0SA+CzkGie#MV{1HZ^7u;$GqO0UX&vX{ zjtqX*{|tjdQF-Ck=zpse3LuS{$sHA?#R57aQXkb?vJu8-MOizN`hk)ka$sLC_a%K) zs%?5ng;i>CROL|&>7$4+WDKoclrB*2v)l7}*!qe69@-ZbevfXm3UaKSx5+$5n!y zsJgpu`oFyg=1!k^_pr99$J24QLsjcm9f)zgX<_jF_S8TI6a)CZJr%mCqh#1t0=ym% zj`#0GgO%x9eB0wVo4VM+kB)N^W_Ft5c&X^WMSFl3&?WU&klfyBG+y6d0zw5Q#8 zqZ4p`;5JZJ6YW>Ke=Imi~JSJ^dKw5~S(hV{fvR=f)icS<7 zl$>L%SO}R(|1&4COQJMp(*!+|9>3K^LJ(CHViHHCKC0DjBI!uDLDC?jI!bIdq zil9^hU}8|3HrKJNlk%*knr^)QFL%6JI^YqM0zQ~Bh`kqmLZi?FB61H>MA5v zQ+f;uz*HKlO6wOWF}s}F(as25v55J;1orf_vy+Qi^}}y(cH-8;$3farf_&pQfAWJp zri)UYrE`>CbKG7N2X>jz2VQ?CXsWgoSZ+U`wp2C!q{@F0{BqLKYy_aC8C<)k(+a?vwZljFRIhaz@szj@mmY9uz zd;);7nq8dLiz~6|BU?c7BT61k_MdCTikqtunVprkUTN6haKjDHeeU)7u;2H6--op6 z8#;?IB(9tmiY>AY{l1T#y~disz_uU1k4xD6E*ZOcw=1)pcn@(DZ zS>*T!cTGE`X(=Oo;Ns6fdr=lQn0>kT~j|+SERZqfYN-o(%A)XbK=YM4iIEl1-f7fOe`ZO^ z6Y<>2+f#nmkq$8=Ou6)N^nttYT`!$_r#ed>tJ`eQjZOpSp3CHcgY9_NKxUKBUb}HE z_;}aPi8+1-b)LvFVC(1XrFCSRH%3_9dON@Y|E7}7*$=0m^=A{nUQ zIN5^|Qd^MFs6v1)l7{Q@lE;e;;0*T*I+6DgOpz-y<;D;gz>QlR)nBz}qJ}SDt2n9} zDT||;vB~x6D{_UWu_=v5m6W36$0UwQd6=XSqh3Kk#q4c<1RrvDWg)Pgs-WD zGOG1aBe$D1Q6yo~fUwY_bT1`zX#o|b?PfKWL$CfyY-qX#60-s(>e`ATOe(1YB!xt3 z7Ryl$$xRpc5|N78k&?;BDdx#=K1zC8_cgRSsbVSt7zs{FDhaZvN(y4}8%d<%jwFs+ zUu-rIQrT=uCABHX5*BEy;)gk%owZV_tEAN*Nqur%5lIzNXQDKV&|OX{>9IRg=T=E& zh-7r{)bZHqG)E<&RCYH{FRn3e?Y3FA+q@JK2;3z2(j^z1&B#W@9a`E{A({#7#Z%Dc zN?gr>NT`T#L}jx?PRo#@g}e}|UBl7Joi~2$-aBsTF^gG>vu%j(+`ron>;7;DS~4fu zCAASp#s-6SIl--5R(rN!ds>g&t6DxzRNk7u9kk{NZp|&9&eH@NHG=}V#1K9aU)fuQW%iEGF3moOJ{CkoLVK=}1OwC?BwQh@-_~hdMdlu2+>|_B zphm7(L}~+zZa9UtJOX7sE2u2!g(UnCBeFR@Y2T%wEN2*3fkzfZAZT^rPZ+fn@T6TU zQ9+V3P)J{d!K!?BaQ~wrJKwC&FD~%aX#ki3nOcS7g_v_0&ZsK&Sr+IPLSUWRp_V07 z;sobYmM2~b)!d0(DKS-u9!N~0HR4EMq2#H4TzM}3&*IB+MHXYtbFK0vU)>-(5V-a zqd+CWVjxZEsK#ZSSn8#n16bnyeA``IaCyK`YH=(d_LPRc5_VVOsCKtY#o`&N>PW~Q zY4ix@t%Vb`ZK9zZwMAvrkzoa233kY((@mn@ZW7Jh6dsL0ViIO#uMmpEZK^(FV$E2-=urB`7NuZG!i14ZF{|Ks`As=Cq>Yq(o80u0MGdV^ zzYn2QMuE40+l+NXa#Ij776_OM9e6K_I}dseo+hxSK)iTBa9+@K(9E138?Rv!vn;Bq za?*YLQ*pkiu)jCV*C$6k8Y}O$(E1x=&kEX>_ z^~TDi>b)q{@JhNsk%<~r$jW+UM0;q-g;yCppVGm1eD1@uM-KKFp8@ue(KPRXU!%Rt zJ1xITb5o2eZ3b@nEmltZnG^>5Y_SGB*v7QD#bXVAzS$Zm9~lo6#dNdALA^tM&CTZz z+n&Aw(%WpaJUqWM$V>BQT!WpOI1k6RQ{(iAK`|>8AayIXXv14XMx@JI+xUtorjCWu zbncQ)%vg~mX+f|lP>VF91UJAVAssNo@65sZmcOiyeJ71>X{Wm7>`*70Hs`?-=W?$b6%LD94~%v-qs z&c&nma!pz`I{mC{U0a8*DSCu4ax@B=4j}+>)REWQ-6)AR%luhD|I{c{7?fNDqsMT% z(9+CRAIk=^Q&kdPisP$MtL1i^-Lh!I4o>4ZZ$Rtr>bZBIe9~=xyYG z#B>q-fZqThTwDOsJGKPKH$U5)KZepkoY>saI$mdwH0Dr_)@S)AUK?}A8rWw67zugR z>nO|AbZ+96#RMZW#R&{J<(f@#h}_WYQZNI)tjg%E{AO0Nv8yE9?NH#K89L7bbt!3B zq6X8d4CA_zGHR6o%~|Bay-;c7%#@fwGbs_ggh4hl0XPCJ@Ga+2lYVK4FsVWg(7td~ zdJI7ndB-9A3&l=^0sA|r)jY+z+nY`=x8iXKYagG`uU&C=!{eirGlgrr#BZF1+>W>* zoFj2mg%l=FQTvM)CFPEz{~>jB0t!+bHOcBgcZW`iOy|G?niLX_Go#}`GEhlH;s^XW zH9Cg$57VQgkak3amNA_?U0eaf8l~=|kWOz|JykJ}RK-a}=`;c^@<#lV_$U3)NWRcq zWxDwgcXf7n=Y@BWf);Divl^mD;o+N=Ha)Ov(S$&bofc@8zcSPmKc->AL_fw2hsN1K zlU|}+ptN)l9(L&iSvV&i;n0@RM3FjFxO%JqOCg4d>~ShHZgWWCvYSMsNUG4)h2+EK4Y={J4o zJ-vtV=Rg1XHcvCm+vu<#vtb2sH+q1<{+q0UyezfJ-w%Fv9BN=)Y}N+z@+Axq`*CQE zhw+ek$&c&hHYuuYXBzhXQ+d7XRjbdOmpK#prnmKmjm>DfmbRJz^_gd$@sgLkFg!7Eg_O?ybVIG=HRi&y5m1fLV|A_=RPZ#krM55Lr-Wr;8ds zS5X`hb&ssI8oJEqh$jt&$QdNDRU^kwKmDM}Uxa8zjG!U{5l}bi)-lrM_Ar zK_$A$V|wn`W-#(sh9a@pZiPMtH6e>ulvP9q7K)Cz7mLWqcGMRa~=i2lJIf~uS|wEM{hbD0sLDeUaL~QNdN=zk44HHMv3FA;=2Mg;u8wTkBdTN zap+|7oHNZRf|1cvmZqSj2ML+cNkj+xDNGEC>c^C?4Q`JtZ6Kf3UFxt z%|bd78mTBjd!@$b4lERwi#W+tZy*erNJCW`qfuIERJC}7BuVJ3df{?xx{?emV>*MI z)krN`Hp$)q^)Vj?@?_LdrYLwbGhN%Wr?z+B)ZYEIJ^Q9y_U@gsO6s&!QYDd!{ax^L zYkn%JonGb)vDT!BGMT(2GF4Upz$g zel%<=h4C?ZV9$vb+twGvE=CKm8Y1t7=y68Oqv^#iJ3^v#%2li3itf4n=H8?C%U}NTZaZ|t z66>0?TbwTjKkugo@Q`8>phFnnpm%ZV38(sGKg28|jbHal?B8rQ(X#jneuz)-6MXCU z*dM_}8Y4Sb;QP6#Q*NJR$;OSl{=IJET1AjKKJ+U-NA==8S^TEYJqnE4OQ5;+@2pcss>ZE1-B+dw404j@Iw~ zG^7rZlGwS4$02@Lb28!@ZA!5RVf#k>Rd!btWXP0`g$;)F>QENZg0QiK25sBrV#Yu| zZ)R&9Efdran*}XN`eIVb95PR7q1ITC*Z}4`v>C|cC{I_U>T;Bw-1Z25R$VZx=VV~w zCM5{3R%Y+z2i(BvNqvN0r5Yq1Rpm{i*)1^!W|jm028cz(XuWKG0tfeq%Wm zgt7%1I+7ktLa9km6kkZM%enjndSM(;iKNX-*5-bUJ@WdLH>%Kwo%)=@E_9BRo{nh) zn7>;>sWe3Lpkp6Z%iBa|1^Y4-?2UFe_>p_FptS*8cE&JH6iQ?k4JTD(L4bO#MwEy= z88b7)gf7H~d#Cs8RU(ZUDx;!AvJJ?hVw8Y>nUjm)4WV-IjY>aYc%wug2_I8Tm&>2{c(6MHeNkuKv2^Q0Rd38k@Hazkx5rQ+avzxd%H{ zlk>*RvNmLxTd-|aWzbB!vWp2OX!PgAU`t}ewudb~d0>>r-LAaNH81*jQ+e{@36D^l zg`N;Q!6Z`WAyxVt-}uIV|L@-n*_C{?z<7WB$AA2q*SrQW4?3J3b6#?8NwFsDKG|Me zZY{|cEG@#&2ozsrv#N4P!(F8CCL45~?04bTTWk|Iv~>6@%5DrfdzidPJ5s|dU<~zt zBH3|Ht_{Nu@0l`g95~R(a2%P_00?UnAQ>c%5BrZkY0Rj`ylVQ8NxCCXx6*Jcp&TP) z*;TSgiR?C+dbH7qzaXs7xS+-oP!J;S6eC2r3uX+HStbZ(A;1856n+?8#Va|kkrk|! z;#`wc`_4S?F;_h0z*DZh^4TxB>Nzhx@RaM$yXvX?&pLl>YQ`!i)RPnmhMxyl6XGIX zE->Rk#7K%#Sj$?WT!Y{>$i|KIYLx}xIl~i-`jB4jk157G7-)9DU7D7_Z?yPtfeI7Wk1wf`psqMq!;WfW#x=~<+FcC-w^P1nzGM}->V{)rO#T$@+aH~@waX%&@skzC^b zsXdRF-t)*kdmn`|wdXW^HGw^G3+#>1N`(|ERwY#U9z9b@Tof*g{>h@aS%%kgrGS`_ zDOD(nQ^gZfq;!#LG<;RyoHJ?=r^)kNF2v5K7*V5sT2j_YYZ(n+cHv{}o*5-lQzkvq zz~@d1Z_!jMvN{w~NjoBMhh126 z;D>EB(Ays9gbF2YA5`Y?tAXAiEn9P)t=SF&i#4_5ceR5fZ)*)iP=E(?ADL;Uur;+X zZmW$J=E=2%$(0Pv?WOW$NOkep?BaX?AotF9z7vS<*M9BSUYa&wy!-CE@9l4YdoP$5 zM)EfEYS|?1bY$(sihT>>?1(<(@$Ngm<2!m^P2;OKF3&y?GAELrOWCMM%JFk&ppv^E zy~-+P1pENQhX4zS=mh`9K)XQ%pM2mHH5eFcM8PANdZJLk7Gj4fl5+5xqdy_id?6dS zW6}Vz>_8}YMEh8-3^NB7BLodzBo>cCtVM}GydgtJ@6gZ}fm9&11R)i;SfAea$ZP(^ ztG@BoKmCGN{nRu5<@Y_|*)P59>#jThimyYt{Ohl~>KWhk^q0K)x!?KYFL>4KulX0> zz4uY)(CZJ^3I1>ziQPmb!t)Kr>%K?2)b=6;+Hj#B0I#W zT1h=bA_qycqe)usNQ z)6p64$>vrtn8QKM?&hFA4$F)!Tm`!rv55Ja+@D40Tg~5KkAu_nv|EZ?3pen$b|F+n9FPd zqArDH*&8L7%B!_&M*PYtF*Tn=14X+=U!qes(jKZvcU15$csxDlE-|cQ4I7 zNL#IAlL6<)#`bQk@e^#comlY1aKY{@Ve5D)#e^G8(eSyljp)Y39$~H0wilxcYZx{$ z_Enq|jb`l}@j1d5X3~;QryvXk-WO3Q1rKF-hO{j{_VT9y<~{PvzOqZ5_ULn-^1PRw zbKvn>xTjW%2YtKb#hQkx5p9eOlca`ZFyz2h=prF79~<7Y7tZCrI1w5X*I%~xeEVdj&S8w^`-}fG|t@`>b-h@7RLaagF5)XVaVN~vtha5PTe#VnPT20iLJiQefpfNolcV8_yLjI7o(Esq z9=EkzKh}KcHv7hTrC-_}VY*1*Ac9W>%;*e7!!S4=L!g!|roG@^)E%T@9&0T0gOWhG zlqcygjb(8~ywHG#r7Ix~@H137z}aJQJS~qGf*(Ym@~%skq9_!*-;Io%cE&l+df5-Y z^ap?O@y~k6L~XkNh6Nyd+*6eAFz@l4=Y=k^8GbLBP7l=#Ny5wpSqz?04b}*nC%w^$20X?3P z0y})e&jl0WesjE2TlkZl3d`1!XeZ*Sm?~o!fY91Mp?0Gji6MJKAyDNOZz4buay88b zXrdme&mL~fLf+T3b)Lq!Sy8Oc)0AM^Gze`@gUHbJ2q8nl6EV#PfKxByP$h< zhx;W=$VcD$Hl}ye(|h>7J9_(YqOxA`idVR9U9r{bL+g{$2`BO=mtA&Q|0CXD&#lye zTDEGewnKHcT}BsMIqBfHoi)$~_Id;9wl(d}Wt8$0FBcBB-BJUIlkn&nSFP}OdT$!$ zaibl(`?upNzLMr4+IW6Xb5uxSyI`K#$Ycp6N_|_~CC1$3j?+Ip#k{|*7jnD~21V1} zFmI(k+x*(+q%9#|I8aH+{8BhpQlAgiL1nvA6O$WamIS#?%AHI;&x!F%Myovu4IR~> zTs(JVoe3v<17fpsj?J2ga*1~Fs=v98xE@()3ey^AlCF`->ERm6l*^D_zu{kg?<3Ew z1Zg%=#g91SG5a6=7yurCfknBEMY=g=kp?`dBcn9aNh_~(ld705kk-VXgoaH4!a82- zDEOq_Xb?9lns1Z=8 z{!&ko3Th@ms+pBNBFUqwcVws)jYw=sU5!Y(Sam#;^AaWjA4{H4XppbOhmq$^Il;vo z(jk!KA%P!6ZV*@?Vl;2o1(s++HJ z`{Z3GJY>X6G{htsR5KOcV@?Prv2d0PDyC9(iD@$!Ma)2AXU>SCg`x1{Wrh-Ju`0^c zDPo;UQ8Zxaqf$tTh2sfch4+}{uQobfyZn*^PWOlRBcqez61`v%(_C41Ugk<3#;AUB z$R5ggV?u~RhD@UoPV5tt_k8Ko_uuuU9wSl@brz41Y5uKLZ8tH#4SupMHP8ky@}C)L zbV802?3IXOTdwESJjg~ly%OoQHAj1UousZ_CwD*b%A{>fZ-Mj_p~qs!mR(&7TB>Jv zJ$_W4<{M4_ZS!9>CvK?A*atKnPhEd9uQWBr=07jJQWu7foK0 z2{K;gLKe<+OpTW^+EK;ci3BAhL03s!3EU<}lw}@osQJmf5k^f+nBh0!!zS-O6$jQ? zS6`W<6%r`|(=am9nvu#>Ag5T4BwZq_x)Ld|XpP}sff;!J!E;j9QfUBF28hIY1xrXj zM8>T_dq#RZG_ScBkoc4A5NNRFAVBqRFsR89)}E-5IU^};$d$2-HdNMk^0Z1TiHccV zWNJj9K@y3|EI&(S)H;+=K`I_yL_v}aB+QsS)C9G7l#C+sXEf%IHqqS7kdY=DagwIE zbBaYJC8yMoL&Z2@iCE$i%-96N_UKJo7$3f=te7g*N#SEEuMj-NvPfE?sT_3etf)t| z@>;CGYI0%>-%di;0DE1Yt1iY?#z`eD8u<@RdZnmFN;47b`Jrb?p3!t)&4~w@dk~tR zQhTyS6a}JCltqIZCooJ!!KeZtNAVmIcVO@&nrb)laKet<64{}Yk)`l8@XCm& z@9fpdXC!$zgIP^IObCqQL&W$cd0o$vY)d)Dx>djO#ZSx~J=9}>Lcrd&*IwIghc&^& z)`z>n5jIf+Xxqk9eXkM}aVYkQR1fOr1~95l-gs{v2^5l@tn z9(?$dL_!3$?Xb)4`*LE{HBu358^hLi{u1W(8JO4i9aLUIUQGN*}U!kZEpAp0DKPbMAVsFEjOBjyCo zb<6aTL)4sg)nTAV2oPEqIDz{!YZm-BgW!`j9yWOvk5IVO7&R)!Cy;MwXdFJDu-}=P z%dTv=u&ch|1=qajm6tvF+3VhZ|2tfM%?qx4#!Hy8oJ`AvqlQ2oD1U>3xa@QqivB5i zH&Q+@>qBjLVhZkLDwALd#34v{hDq&WBnqS^7QoSeq5r6m4-#mwL8A6}X}v~=v?;w;J`tPAigB2y!!8=u_D*E;xf2fyX8y5xy% zBeNjl(i0GiUIubTBROq`_({iVw$6;UklJXy#MMTY1CA}>2Cg|bd8j7u*6O?JVJuc* z;|}zlsypS_Uu*z=qeg-n2OC$1iC6-Qx{4O4hiNt?H=~T4i*74 zoWM`;6-EXe2OmyOZo^9D$=7P56nJ8!^y1J6l+3UkSmQ$8$nwPaAq=}%Q5+tfY!2@m zt09r>-01M)>ip0c2psG_0xylBk=pVS+$-odLLK1Y#fdRA8P}p~V>645VOS?HQ-;Py zVWZ$ZA7@Su!D&r z&e*gu!xMmllYA8hgWH(Y7Xf&t zMj+6FBo?)qv8g@dD3jAVG974T1Y6>UC`y?sd?JO77^jIJ0k|RoGC46`n+zyuKnPiU z7iQ2FGEAwo@!_OOtu{SL=%}J^DXcol;h8h=a-)S7zr@sj3hrNgTf*4U-0b_WxA86mJLY4NxNUeKUs#NB@`$Y_Vk{%or#JVFr{2 z*5bVjdW9A!nuiYy9-m1Rwk89>#82YT?8UGu6v=51Ph;cc{A`lb@X1vm_J~;%#Js7x zm_@@Rxgn{ZIFrGCbv345ZG@Tv;;OZ0X`*11fQc^k&a0B6_8oub?t#y zXoDTf8fa^UJXE*slZSMTmDSLpA!2ROfk8d*x*9Nbo@TJPd`|@oZt$Ce+}K$+SZ^*t z9%2ES@p#i*YAi-UuusxDOH+TE8It9a(CwCQNVS*OHKO9Skr0a^FnMflhfZ*nl>N6Go~+2ZfHp70r=I65_+69yC(YcvV+!1nnAiE=R>Akh-{gYFtO-=2cs!ajiGW#QbXUAcxgeb-eY-EUQ#2Yf(7Gj}@ z2;dw=cLF9Q`YYkW7&47d3J8@`&wB^WLdx7n^ytQvexwONb8B+qZ3&hWO=*zouVSIn z=Dt3&=b#>0uLSB;!bc*W657nMD=DN>2ctKzPvYH`hcwLY}I98DXp$vjxe<3JIWq@xvHh((+cFx7aEuELZ~^!`=7vESeI z`H$Xr=PkX5tXIDBm22*>CYDx=4=A3V!8NF$JY~DO1`W5xZi5QU=&rSH zD`nJj(I(l*+2joM?;LQRR)}_;dAP-jJSl#j2|XFGz9n&bh;pc+1vtg*z}uzSp{R8W zJ6F&}>Il)xHT}rB&SL2q1BT{8rJ$aZ{Zv_hQiMS|SV@4=uIHA=DKqMcmPBb72-*g^hW11NJ6OcY(% zBuoe}FBp#~GC_3asaNAEF$NtTQ~tn8$=_W>?gud{N&H_Sfdq6ZttsE=SD3N&V`N{aP=cE!(;J!}1~7^UQ~5bRmJq z(v#qaMLWduR|aoE#7Tlx2UfLu^bZ|TdDI#;s#PhIsuTihXQA*&w;(iV&ycnZ8I(e; z3gbK#|H)8KzUol+T+N!Fh(}e@bGmI)(?~L>7;2Cnok}*8z@fYlBOZ}I9pR40pq`3w z$Na70TCIsHRa;$i$*l%wr*7T(?0eiv{-d!B!9TSm;T(_hPR|bNezM#nhAuw<9Zro- z#&#W>A3~ODU51^%+%X(OrLe0$M+XNrkf`0I#XE2O$lMXQ(0AR|RA=$ypMTSdD9$?T ztm8cx4vwG3&#LdWP0(%4L4GOL~ zs%+&V2fsa0HQ@Emm@$1)<0dTMdP*0Vq7k{{HU*`#AkusSiJjq)#kFQkAT%Fj5^%vY z1+vHqrEPlZ;47m(T33mU21}G^Go+{yPlYU%VUTBFS8r?SU7NzDe9_E$TrgOm;p2IV zsvqx4Q;2ICy9=eAl@WOvg$IB+s$0{;YG zM1MAYuBVI(?GAM#TV*;AKKF^BvIm>VM9-$qQ{-n@7ca~7v`3$N)ze;ZTL_)_hd@i7fkIZPX%rjJ3F)F%G zbr@DD1t**zJXMxVWU7)>oA>tLf!F0!Yn#*`5-x~^P)-HApJ~;{^qm5eENMu1r+0YB zlv>X^tHKR=g-8PxfT-z?B(8{rgGwA1>?nm0gBT$aD=wMv6vqefLtX#?Ptt)+%AX>e z93@Y)@M#mdF(7nG;nR7ShTqK3H&~F8VYY!)3;+xukQ_b=phz4kfN4w?R9L`8|7kqt zTzd%2TV6ykDue3)QC6A@kV~a#sD}=`o06MZ4n3vlI@*Y!{i@ z9_}9vCjB4iSALO%*Zj zhh$KW=q+al3j#s%hnX9Q0~x+Z?Vq9LCJQuy6v`NCKwe)U@ONc#vwsP0pbnqsn#9cnoITSZTI*a)}ZA zLCPVHtA;AE;uf2ufO%e^-DPZE+e(!ODWsl1`|Puy@PsE^ef8BBYCCY?z>}WzB>ag5 z-93BuWV}~`z50W9HILpGIElasgJAe8Inc}S0PP6BJB)zSdr!OgiO+e~xBcL?-~J;{ zdhW|Ey!x8+E_>qD&-@q9`qm$K-m6}B;7QNff7S(%QbDmI3ICQmKJ z0m80Az_eo39Ihh*gtk89MyRBhA_F4=jfR&pE7;f6aY{-6P4WLHKI@yd*hBjNIUb{{ zp8g^m!|tWtVlhNamx9(Jh%V1S+?Na(JzB+vnPeajri^-WKlJiUdKSZdGSpJCM*>GenCaN%xQ}RRiyo8cwn*dgOz+2$dDn zcH+dOViH7MkmlhU>c$PfP{)Eg=QU*{6^^JfHo1zBzwyb{@kwg!=oOKQ3|yqVKK>ks z+yM$C3zkPmmPb^EN2L8i`4_?>c@xqPRF0s;e$Fu7TyO#m=NZQ<;e>V+dq`F=WggcX zW>5shtqd8!gbQy`K`yne`dw_sA>J?EreU7l-96s}b&!!lzvAZ;=yCj}kDif|9${XAl|Pm2UV65v z-|Ng8p~N?m#x*PyGE}vQ<#VnPirIkrBY6l_TZk#>l{Bvk9Tw`8w`KB-`9&c7`D69j zqYFn4&L4bm;qXHXN11f7Id^1n{ur?(kw3{s6v(SWFPGlJgrFhHol`|-XdApA#hIws zB%fZcUTGabgI<;9LD@3&kP=eb8C6gIy|>@IF4(*7y6e{5C(jQ34`PEox3LDw#j zR2X}i#0fLCO}eZbo!H`G(?%zzfzh5vUP!Ns%#~1pYxyF(8uerp{Zt3Y6P(GAq-tPEB?UE-w^O_fZ#}lvnmdTm@ z3g3|*7{(K_jtRKv0VM@_4N= z`{E}&vo^igmshXXk5jX}=RNO%uA>jW7ik7G>0B5mwHI~xfe2UGP^PV`pdqO?hDVoKC}N2W za>yemN(2TjasvR{yNp5Qk`ZT$F=XNUDt9*tAt`;L;g^<&n@d9|b!ezHmggEvb9il{ zETPOdR~A@S7Zz9QO_l|G*jSpcFXq>U#*#i<#D@-V#wT_99}^tXlOVbCvG&}}6!s}5 zS#m4vtHLDAYRJTf@Htd!K9Wdy10+UCQjIGSOJ)TTc?zn??SkS*a07)VD$5uP5_v~W zI<1HWSB(ISywh|gfTuJVUGph?qn2=ohh$BtAS3amM88t z>ncqjEg*1EtDCNYHoRTTyk6q0f~Y+d_>l<{MYF1{pweC{AFEAY*x-i`TMblp885*O zj^y+(3BxkR{IVRJLcbB z`PAo~bJ3NEATphVS9r~efuWNaP^&^hSp?ZKU~BR5%3Zv?o;K9Yv8mX~Z#hh5Ih;_| z;Yi?f7^gU+fE*^h9uy8^@~M+&prkL&S~$BJITq^v!)6Wn6Tm;BK7c@eOOTm>$Ja{+yP=of%g`XUBjyb$TTyzynu2H zuUIvR)d4Tkj11lV`H$Uu$2!d33trI6N4=aZFzjz)lpFkH6E#p`ylybNZ5}T{-~gF# zqRzYhq^&Yj(*)g@2Re)fo=JHeDRAm9=Dlbc42w0^ZM?|Ap-xB*7$VU0^67^6?b-LK zPk!o$zyC+j{E`D$eqf>T`Okgigj`L(C;8N;K6Ux!)D={WJxyn=+6Ts~)wVPBN_aD; zUhbI)+v{HU6K{X}+siBdu^;=fU-^|^>GvL5_e+5wTMf+Xco^Nf+T6(UJ}O*JbIefd za+-F2{p)|~ZNKuie5F7B<3ILGzx>O_(dD`{x=N$5o%GQicigdNHRdUSICgm%Zke5l zlJ2?Zp3i^&^YpZwo<>9mBKX@5^`$R;>E3(qUAXll)=~`5%49#e0=<$?^IahS$_^Up7LfZhMu55Dj2TRtl%M23%Akb``dB8gLDwYY@mI^43I_H9mufFEA)6d?L;E_+z8O3Zbs&7?b=saPT4F zt;j7qMDi@rfAZ+%a8~!Ic+sK6Am*NyTvpt!xy!|U>34EJmcEW9K0ONf&~ZdHxGuMB z*?>>JnU+3NtT*are0|)Xx1wYYvGHNyp-pw`(lfJ~>WtTC=8?F|V91A5&3LqmW%+a} z*MZkKbW?Hr`8r!}L{%LRLR=|-5}~$X1#+PV``vQKS99&a!SClGAm#V{g zm2 zw(=W%i0RwC6i2}4b8~a2pK<05H~f8Z>YeUrc7hrXD~$}~uP<{Ea{^U7&S!1mZ~ow| zfB0X2xyDo{dz;N#b7iQ$x-c>huZL0et362EN*{&c$?={`aUTPj)XzV@b(%1fn|Fk^%2+W#17hM!MfyygqVo{$wjN2dn z!S7vo(WQvu>0g2AFaG&pRFdnYHQZeW&et^pF4ao1b>g)4isLrAF$k#foU_+_pn*8P?cB2!+I8s-TR81A8m{z!3 zq7$_yuPRMOTFmvDz{|@kEZ@yubbr5VgL&ZS+F%}B3jf`|`*%O^13&OU;fJv|L_mL;SF#2$VaLL5!4?zz?prIBvu2c z7>2$-C={DuQLEEhIB~vh=;tAP!OeYYpWWWN8J52GM1CRT<>%Mt=VIFH1rVmIrZ7-kuFaNsn zpTBqMH@8^6r}-PNs{f~J=l}cJjhjC=e$7XQpH|1h9{MO2b#d>~+jOc7$>&6#3@K-3 z^;9Kji(!M~iqc~^Nrp>+pOzsb{t&ZjZ_wB*WNMjEqdP_7h37Ip7lQ;gn}&rUgYc6b zY1vrOa84n>jdDJ8)+IA3Xyo{8-Vx(qC!qK*mr>Z7^nO%U13Oxh_@g3agpWq7Cde^9 zd~&Q#?$tzyqJcSZs3}zj1rRjCNCN@nZAz6Px8Vj|r>vF5u{8;d zu?d{v1MHGDJjxCcs}) z#s*ZtiR>9(5xn4n3-U>i9z6<{>34tkcd^6^67RXseeMfi_`+vB>sfpE?uDNrARn+_ zd4(50{_B~qjM8@UqywOWjRp@ryYMOgN4|WGN1c1%{KtJ={w+wnANi3V`QQgX2;1oy z&v?f7e((4Gn}73fzVREs@zIZd^o=*(2<%s$2$s_&PkuI53e$m>#AOErc-+uM0Uj@1bkLsU1>H3#F_OhoK z_Egh+W+h|Ufbt9uK!WL~NJFLw0Me_?M1*1g7qFo{YtwtqIsejm$`u}ixCn(<@-j|9 zJ`E&##Kn`qkX6{6{7$3cVleO=3F%9jz*;0Y(067FfMm2({}+#dI@2ETL&KWoW42?X zg3+VuPaOXe4twMHH4s$+B*EQ?>bCl_y!Z9ipBeR4$@KDipfI6RWhhSuWk)S66lpWu z^~*6d-+TZzRklk39yktjfy6l^l|9_SXYv&k=@eVU^ObdKkm18A9i~_A2tHO<5jTnW zNG+YvL0XbYFoYDft85t-bag^Y#~3<4gl`20i6A)56Lyu1DI;8!X+9aoYEdb+qzPlR zql6i7oz*gk61W2xLO}=KyV6#1!VGu-YhBa&G3l@&CzAmfk!BxTYn zRb|_F)ZGW>3(hXJGtr-O2AZD?*99%EsL57V4&HOyJ$$)WKu-`eZ+F2Hk$I643B(p~)>qV;{+k38T(1^*4gKwJ6>((M^p)6_ac7b^h zdxQ3K0eK{Xy_=b97*N0TOTPqXLcpz`{^_6oz2EyifH45DpZv+6{BQs5zk%X|4fFo@ zzrS>>J^Q?i|Lglc@lCJ!xo`ZwpMBx0f9Cn$^QJ%js}KFjUw!c1@4MlT-}nAMe(wj~ z_1^b?>c*Qt^|@Ofb9t4O4lwVhe(I<0yYIdyKl#bv3}65H*MIXje={KE5B}f}0wBHS zHLvlBe*M>fJ>LtIIUjMxxrLxPF_7dPNmcMU3wUkcF5059a=4c74xtfSoG+#HT^#l% z^J#hY@~?m1Wly=*XZ)vs`X@MTf_3btGO^FWg9m@{7k?1|^{@Z>uYo;42L9z={v|#E zHlCfG?eieu^Z@qobMOE7XT9Y7$9+BVt=!Orn>>v0eyZqGnWChPsVl=9I(}?kc_U!< z>R=J)jv@mA?CNlPGwC4HIEMjJNHa7}sou##-3w;OP?8L$&7l8nN?naOx2YK>_E>j= z@%yX4`m4YBo4;w7vvoJr4=5tX9R~Q@(F|R61b> z{~seYZ_-f_w8s76Dw_Q^F(2i4Jkn=m;RLQE01J^=CCnIN0HkgO#6vfCR(6YN<*p11tTM8hC_fOI5@ej zSbipH&pO!)ZgUx{OLJ6VVY)xcZ#rkj5cO}Uc4PTd$9+dQF-9f9UZt0SSDA8VpteF8 z#|a*AWUZz-(@C*XOaD;(>H1w+z2kEq?g#8$cG+dQxz~N520I+T8ZgGlPhW}OI&oe3 ziIz&Z9lvWkb&i}{p9d^^lNqi-2h*pnH8GtE}WSi=tf_Y)}Y~EwD#}#?x#D4~p5dyJIw~!B$ zy<4~Yz-t`OYveFq^LKEhhFuGi(ih9^zt__H^1qdzUeJ*c?)9pK*Yh*GJpG` z7rm(5^PPYCx9|MZ|Mkv4``^FyXMgwGfBtvB^XLEP-@Wzs|L&i@cIIQw&%6EhZ~r#l zf9tn?>(BrE&zBcqQ}QJ*c?nP!&iHqK_jjNE^rx%JsXgkR`yagbzK8C;|Dk&xc<8gMfL|l8h8vT+)|x0moZK2nO&kh>#TM5+kp~_l8HVe8!6}x;kzd)EtP-EQ#4q zTfF(rZ(ftZgTE`j>gNdF2T_YZ^D{pKBY#8U;h-WHH@nG- zu7TGalz#X0p{djV_4MBJtVf;ph`lp2@O?v0bwX>yhLB!WPKYQtPM~ce5QQNrff!u@ zo%xUy78obUY(ikOv~qe}!{7ex-vSt8!<+tY3Mz&TugF1s2q{BAR(IQgXMX?pfB)kj z|M>m)-~Y9*eGPqn%{`HA5;-S<8~5)cj|vJ4Ko2;A=@x`PlM!YyQ_`@+?gZ~X-Rlc09CF3pm9%d-0kD-dhRFjeR(AhGA4`ezD!6YK3Dsu+Em8=eFSITCB z_!7$<*)o!iVhrKtQ*uic$vhT*Ai6K1e2ceO$R!}9DaN>U(t46_g(D?1!aFAllX*Dn z39oj%hGZC2uR+8qv{)v^hWRypj`#2#rEm*eDp?TlnTo|cosK2CqC6)BG-<3kC%f}2 zIK_fo1CXqO@HOi|F=qxHM*$h5Fdqi8EC4PN95#Uxi42)|qbUrjY#CL~49Y1b1ebEf zrkoi|ix;1FhTR_|$D&K}wNc82+MANu#4B=ds4P=KNC~|sR@^!tr9Pj>{+_|XUVYU-tXTIXf;u5zLK-QKrLR*BcIs6FB|+!? zDj+T2=@MEem}jufNP$E>bP#$2D8AeJU3kj0UbYOfA%wtLHxP^7)-K<1TSRGW_jTFe z%XchNMKEt$y+b2}AwN#XhiB7SI8z^Qn0LZDh=(e`wwz4?euF?(uo~gAn59A5ItB78 zfZ4-`H{5VT{tB_S>-L>zKJ%G*pTGEvzqsX=TX3jXz3Nr|5SBXhNM8Q(mjgpOpTXlF z|M*wF@|Ae=zW2Q^|8W0V7ry3a{`0Hf_>Nb-{_WrWy0?AjkN?Vd{={3K_o_EN_f>DY z{$I1a>n}g}$DkAc>O=4TYm|TZlfU`UXFh-HXTEUTXKuRn(>HzjGoSzReGeYK_kn}= zJ$T3^kJnGQ_FEo%*%N&taETz|9LV11hVVk%QMaApj0(We=b^A0bT|QY0lEE?OP+G= z#ZSHtzSW5QkxlF(=P_qHu;Grv&?8DO_J6J|?%BS0tnTX^+~GAQx-@tjep^^3PSq_} z&LAByWGG)8q)_|0FgVu!!5{pA_r#m5U)uY(@(koIpw2)YBZj`)2DK^(804ct+z1?R zx1I4QK_kIC1LRrZ(fM2Q5psXC-5ku1$1Z2VuCiq~aL$}`dQ*O)R2gKh<)BxbLa})k zMhVdoKuGyf7&qEwlw_(?O$uM}brNYUfD&;iX3JPoZVaT#u%9y%%E>ny_=i4_@Q0K$ zB-y-_Ed#%d_)PXmbl0)*n#$Dp_|(`~4Fy>=crI~t%+;Z!_RMvO0Kdsl4TZoa3VXGg zLBm}7H7dUXU&sAkaf}dxN+p39nGbW%MydWe!Mtih_tWFcxTJ*0_B87x`C z7n1FyQh7)6oxKMbbO?l&)A0e1Syz@x5tx0kj%eYgyq7hNINVN!f36N+eBL?XRDEM` zWX&6IY}@9>wv&w}wylkAI~&{FXv2xKv2EM7o!q?td%xVOsX8^E>pX&-BwjT^V0s zH()C9pQ4}!b~<@pgSGvTVv3Y`i@KFy(PYD+iGJpS7s>A;?899_tvqN9Y62;A=9>gSZrl5!SLY;y(XAYbq>YU zmIt^zc^>>aS0VI$xw4Bn0$gwH=#s_UJUfc%C?xO$$icMg>H z&uo*&iL5~silBoRJUsm81$y4Ic>E86>I?Tz0{Y!A5zvH)Cz=}nv#XBJH2cD7u*t@hoZyl%n2=*iYI=-)lx;C-5%oio z7%?)MicE}FVjJ_zxhb`t8LlF}_Q3j^e_e%pI{tpS-1FF-*O2XG%@n-3aR}x$cNme` zMVmQYkVVj6!XAiVkSt30Y9VDGVvuMfU&~lraH%y#8_0Jw=tX}fB1V&?j;aN*vEU>( zfA~!K7)3OdI8ts4|H34a9p-z_#nghn|I-NG4?ydHsG=~BB%?{zRqni!Vw!}}G>Zzh zAct3qna)RFk@zQ5Hx(d^7BI8Y4|ke-hgPl{jX3~K#fGxFd`c6rcnb$FP?aE!I{BOS znCS(I+G-V|kDj`yc1pGEHF$rIksL7fjaj6Eg!{M!?Njt+z!TGbJL-e6`6yBr7u_c& zn~KPg8EYJtrQ;D*NQiJswWh;G@J15<&2EM@QFJz9&T|=Bz+wpUKaP`$)tIb{sEqeO zxVfg#Ey)R~l`0KHhJ|@Khi1)ACPJ{9O>XGh1MeXp6=)us-nj4#q^kpebUR$V{}=Zn zT`vavxN7$|dq`GMqqi%mgotPme?+Rr2WvGK-eO^IuOqduDx<^h;(>W{b$cGa3be{J zTsq0*VLM|=3v*Hw0WJS7-1%qDe%3a_?<@5BtfE^^sJ>W+s?J-WSb%i5l(p>+&`OVk zq4!mHt*r`_ipwc=$K40l(Dk7>Zl~kk^bFyyec2nVi66K7hCXl7;h_w*mO!vsfk z3*C+!?Ed1r=g7%RcvJ58!O<5=$a34(haGcNt(fqST?O&W9p~L)Kc=qo=k~|G||*4HU(>5 zf6QR+{%u+k@TkuyzWmjHTV3+YX|nhZ-Pror*oyIx@}PKZF`wsmduy_P-FgD; zIQ}n7Y)tlb>+8+G2EG;Oe?!tlR2(Ta-{3F$>6j& z^^A`%1pUxYCJ{vClA@vXQ@$)IT-Cl;E%z}2p*7Ij?jDBVPEG;^gAQY*=2tDPZaLqb zalFn@DcV!%E1>LYPQJrq|z@aP4xfm;vi6sMb{r-y9v4uPXwdrEcg&Ecwg|pQ`qnS z9hPiDg`p$CC!Xg}G7`AFBk;p@@aI1a3!94-G-8TUcI{_+SF8P?s9H-?HJpETPQZ;n zhZC9MCyKxK^xOKW&`KB=gss?rLVCb1C5DXUy0N zQwD{)8y|hbi9-4I9T2SMqQxhZbRo*!5ustyLy#BK!9-=vgf^U$$^fGYrWK_dH3#_n ze|Txo8eaRqDtwhY=lT87x)n~?S;@4YR>}#4Q%kT$HpbM@b5)BYeodrj?M=RkZWj%~ z>?=#Q4EYz25VH3#PnS3Y2gHsz9!lhI^vmHp@D)gYCy7)@PaqJ&8s~IA-3t_RObP*z`dU5k+X zD(kx2-n8LTMuvME)xfg)ohFk|uvnFDuw2H(zkhuQgl z54R0Y0HKyaohu08Z!kH}qqnM&;+U%P!xcEw!miDI2u7Ypiwi~gYN4q)KLr7f=?xu4w#V?VVqR+GN{qNULF@Cns9JH1fVB#B% ziJ{Z+@@>Y^eN7myd2*l}ijC0UWb}hDL|a@YIGrLVBBkGUF zM+)LJ23;WUqHoA#jPUIW`1`Sph?sEFVtyOgt592^dTCu@uig3TzmJ92Uu7IcSJZUk zIl4rQwlLdz#3@|!bcSY8>dPjl6VflWx1jCgFq6EG5G68s^uX)C?_&48pu?c+PNU~u zLwF#HBtYgJiKQ@>;F}FDR#hVVKlg1y>zCKsEN*l;hi^_+d;0h7eR2U#g>KM=0vpgj zN1i^9r~HQEK4zQi-zAfeI!{Z-ZY8hYy4yCN0);*+y1weWKBo=dZDl9LzWBrAcLYSq zYFc)qTx%eDnKkr1%{Hs}ML%m-gq0Bk06aCr-UBc9Ey3&DRYScK+`W-2i5^AKp6>x* zF9^=sAO`J>4RR`YSh;y57BsjRFcs5#Q^b+@{O4@B1S6+m4A$?kG09<3QDU@bheu13OPWo3 zMgnWb?Fy<<dOg zeNDcatWXPj?Lq$Bgum>8S+4bH(UJLWa1z*^gki3k8fFUnfqdEi->0fp9)Q@L^%w#xw>&rdDbrtu zpEaBBBd*Ya91B{D9}9-zwl#r?i(@A8`iE{s6>Sv{jXND}PfZ5n(w^PfLYtFl>&yYp zFOYO9d-JgPL}JPh#RW413r712&@x#BTDb)JIRyGd;M(~5ga&#F8Lp-_XA_+2OdteQDb(y0z z+QCfPFKq3Du_=QV+jj&6dybwT7j^6h=mHEnMJUXV9qTo9A*_!G9oz$O)58f4p;uA< z(dWwvFZM(P83kfoT;um2Eg!vgUcJ>K4;TAfBbt@zG=BoY3GRd`b`eQv?m3;s)rGnq z1ckxQM8#1=6ur*B(#zl|lqJXi_y>)KSIWlaeNE;m?cG0pzJ0yeU%hk_cV1obJ+XHW z(j9(&1Hc!eo3%#-!2`ifX%cK}~R;!qfrOtN{4b zsC}8woE9=kH_FPEOG>+6(5K7RV^HXtTI=+}gdyE~F1I9fwsE3ebt1yHwgFIrrr3v&XRvKr#GHQva?!qqd&(PKSl|?WQ z6QJyjlf-)3+;H2}KBd=9Kprbi)~nAb&WbpSPtoqDN7V4Gp<*8u5}T1Q z8ccl7(iNp>Q@tQ>NAJmrK7hneoP}ZDN%?kL49QHSL+hGojDU^c4EV z_DGUBnibC3!*%lbY!e>AMr2dhWj>)P`KR$f4&EVgbzzaG@dveu*$U#zSuCe&+rE)y z?t(}auI>TJ=F-wpBD`MUp{bQW#q=-qB!;|A!v&pxnp=NlC?wEI1A`IVx6z$MZ-&8s zk!o}k0au|Uos4ku0W>8ljRJ-ZRNVQB+#QwO7}x#i3iNuEQnW=&xC;S%SQgB%`ZwSG z(~s8+NR^;cP)$pIvLn~C#g8lEObDqo%apYXB1TfR@y2k@*NzpFc6(vSsj>bKsz z{9hi#o<4)fXg1&OwgeuI)adf`8gHkVDt#V9UGbYLw`x861}E@2Z3eNk(U8eGMZ+}r z@lmoNZlRs=gu*E3f4FR)kQ*Ce(4d&sXljtA_Jq?firk@yq3LN;EO1YMk)B|x>FbK) z4YL(ABa}e%2|I{tvF!xVyscQ|bzC&98E!`Yra-9E;uA@N$?<3jQpa4}>32*ojLZ%# zg;gI%XQJXCb|hdYl^tx4as8-7h=P=?G?A948d*g8LKP6VqoOupH%@(aQ?8>J2oZ=+ zP$gSIWy*)4-CKxDOVW=GO8}pkM6gqIwZ8xNx|&H14H_*c2QQ zoZyc8HY=dt+wDFDSeZ8KyerFiKpj>iDCIW(kgct(Q8Kvii3`%x(|-B00G*H#;srAF z$Xr0!@>!6QOFtQ1Qg-2HmqX|yBCui&pR7?(F42@ghMU}HyGhQZzJ@WAH-pjGKMf0C zQ2(^}@suES9(cdTDqEJCxlB=FUrP|DrVs9`;YlF+0>*=!05(fg0`hcAA=zx};|d^@ zKi=dE7VwF?eYDEVB-wuC(5-PJSLmVZy*&241`LZ!OImHFD?qSvWs`!^biIj@-<&)6 zSh5R31nSdsU|3Iy;&bLknHll(<52TLCv2do+U${^?_=p??AJ#bmnqJppJOUd@}pgc zVX-?{JtK2gQIXK%pkKhocPD^(?922jJe`zg2kxl5xwsD`+P9;%q*;b77KYtDg*ptn z@RxAdF*R4U{eBNyqY8aSLYvX;=@cjE!2G4k$QSen#tBLU+)W&2e50!gd5{iNaJbnW zVOLd*Sz4}q^t>ryN+1myB$MAAZ#Rw)cBJ^5RQ>V5HC(NOWSzp@rIvbS7jFHWU1`cn z0$*XYYQcLyEv5%1&K6#Fk?lO000Rw){QYGM;~E9RBp!mq@a|}eNzbUvvbU=EPhcRi zagoUhn0Dy!38Z~UFSRMXR3s*6@1-=J_?;O4lQ!wz5jYA8q4%Q=TAy*MI6kU%j{-;& ztUUo`)X!4aO%*9A4R(7hz(Ane&xuPK42 z07G&&NXBgug8N0tx65XKD+>GeoiP8FZLsHaP!fZ08*dU57f_z{m`xY89TT3fadd>a zZO9KlXA2V^-gLsx*=GOaqlgd4ekI{){&+^1^>u}15#e*mci4*wO4-zwvv>rt8SHh0 zTca%lI#H7?uZ>$i3*9W+tM|d4sfo;0@E>PQq}N_ivxoELDl>hQKZ&J^=5&288kf3Z zd%y>ds7-xwgbw)hanEJ4za&MULrN!eIwh~}1*jAPK#g@H#Vvn$WkA_QJr(=8JM!qaA3-Vp zx$$gce{Y$FP+rmzRvMXw7pY<726qxfnL5iIiEO+@)I4CJo%W?1+Q#2JqbN0+skGhI zdLX|vv`s9o%=mm*=@r@B0Fi2ly%4~3Pz%ccL>f1;wr;}(_b*9NKM@?LsK-m}`#I6u zXFdskPX)IK?M;A##?*FR7u3c1A^|A>jm7ZmRwk@M^6GFw!++=7<(G9?Faosc3kr%g z9$J>m-2vClP)9}mGUN#xC0lt4Ko2F+^ z2?bm4*Oy+JQ7;2px;a^6H*`m%p~d=99OCmt01 zgXYMZ4kWoq(?sk4Aoq5*E#EBbOxC)O_i?>_A1e&Rs%?R$Iy$`;-V-E~ZD()ISM^t* zny3<76CWdS{vMZ-g8B%SfN8~$$Xgt|RHzy#Q&@~qs!*5)&{NjLH>QYjs_O{9(b>I2 z`C#(>*lKyeB^zVcEnPT+Uz(9uY3Gwm-~DzHL#p=E>9^_+e^H(mhAxHYF6!T0IxEk0 zFO!Ptw;(HpOvNk%@8Val{`gB*hOTIp3qZk=D1FfH?c%7^p(4nT_>UlSM$j+HnEM~F zTsVsNPNv9!tAA(JTw|zOk}Lf&MqY(`fpvz?S8l%wMrlaLZp7iDnn3*z@nfMKrC-!2apv$HHU~9g-ef9A*UtY#W7v2SOl+AdDVFhqe&|JDT*iw}X+x zaE6rVX%0owrZ8Ek=EP*4E5sjszF2T*j4a&;aV?U|{!ZPa45IvWne3Ptz&1eWtB1?X z=%Pu<*fa}WAnJ#EzI$A=^W2{qdME3=iOHf;*aX+8rE=M=$zIcYePzJbMW2>63V<&8 zkvWKy%=EpGH9$jH`u{@u2e|}Vww`^bAwGo!h*)9u^wiFfn3oxPHS2w~Udeq?Gk4fC zzBaGSQIWcldEvcMx6d0Yg?@(Fg-M15DiHw5MC3iBBaZ_D!W}?@R|wg0jFlr=zAMQ3 zU2Z;a_VauzTZw!wui0(#$i{}ARb}saHyOOM_prku5bLw&hu17v?oXIX3LJ|=1oJtf z5lh=`0m~5yU6)!tk{ebuBA^_hHy1}yDWymW7S(G3%!H<~Ic^ypDjH;GBSYl|3j zN_hNjl}erlnDk>j<1rE?CA+t_cQn(9=KGfOP};alT7KV$GDu6qL?_?YnE?8*FjGr! zLT(O&fEfNi=ICZ+fgOzO3RE&T&Ybt#ahETLF-w#v$*e@s3PdE1ggjc(1MVOS<4gpH zG*Ed>ip7`{*vydpFf1Ir*H!Q=7BhJ|`VtXoB4y6Zb7vdQ_U2yKz7hcB(8Gww!L%#d zx!;rbmTpJV0j~RwEywl~JOn?>Qfw0%=q!-c8S!LcR>KdHeE-T`(|bpq1h`A5B1l-} z(u0`BC`}dlu_HGQUVDAM9GNV@6aW{u5+@Lbs5i||F?he%MtT#Rg!#pdw68I>Fp%SX=4@XHGc-XR@hxmW`wb`fM|FbjfD zkqSJyNz(3W+PJ-2P@BooJ?p?TdVULj3Ej}f^pakLt|L3%bsyJ41|LPVt{~oPQvLgI zdI_S$@S-|Tiw7hZIT$`W(PYrD@sr?1^+!i^=}bs63a5uO_MqV+N=Bob$?+Wn&4`q^ zSYpua-|n0F#7W~_NUW0g9rmulMd`X!(Y^x$yV2s+Ak569!fWx5GDGIEX^+9eQIDi{ zbxWqHA1lT5-DoDE>GEW*5!iNRml2K}vxnRZWA{~m_Woc6-aL%%w+YZs)Z?YHn$?+? z6l5|6wChr5DL5bgs7e49sxG{=C#+vnmun;TdHI<-SaP$ahdyQItg-UFLNz~`H9a9- zF7v_+aq=}I_4Z9XR<(#SDpW1a75Lryv&}1XDnReRK*uVu5lA>#qS!eNL$UHfr19)? zgtu4K5miPeiR2qaA~Bf7-gMj9>?c6Y2~TqbU^)mnba_4&j3w1s_3@{ii)$*Sx>yb< z(CPvGWCj9D-$y`Sw-1v=1xZ+NmB29Tc6=^EEus)NF8^KSS&jE+=7+%y#|Ern#cT9y z9UDpY2ac#B)uJMJJtr5y*0gpNDB3s|gf-f(RQhB}4&Ss4UHZ^wT0*6I*scW5OHpAG zpGG4G)si|2~s@1TfjjN=Sk6p6y>ZmuZj~M^ogmg9W`;AFzoO9LZNHjsA2IL9^@j| z*~y%5z<%$0#~++x7m%ieV74Bj^G~JwVLMhoBZ&4)=I&2_z_~3oB8#?Z=+ixAhEAx) zN+DYF*bj9qB!|hJq2RDwQdK(OeyBBEJQi$&!(oO+&|Amz?r-MxAh=@tg73QFH{+>8 ztG9zmrylVun?O@}4}|KP0}K=oLlWo}hQ@SEaL8~iETypx)u&(}BurtktSe$Mb#fb6 zmE*qYX@(iaAP|y^{-7~!z9nFF;?tcCTDdnBkEDjOQd9Z2NqiUYFAJZ{As(Y3CZ*lb zYNK@l144&-Wu9VLJgGG7i1W5-pI@Im1S>>R_`S}f%=Yx~i?WyJ#Xkn$HO`J!*S*xL zGp^27yFDzv5+1*xVSABm1S9%>h~=cHhfEqY&RZA~FfOtmqCl{Xal;oTKf7!Efnh4| zRyU+hsq6@tQqqL5&X+cG(Z}d;X(_1hrA{{HXv(?!8zUhL06Kyfzb@s}&v`_y@)Nzl zkwBq0d+}|IhC&Jh4tX$xybK)x`@$~P8i8RJr%sTdSO1q+JKi_+GjIo+g&K6?^ykMr{Ah1>y#|=Z2LpoRtri z+|j}CXq&_r^hT^*oR_VQ#%7R2@Qn@p13V&Jgi+Z&;3v}gvJCYzg{Sm}^rZsNI=>=W zq0~TvEiyDivKI2U^8qgMl0Qra44<$Mbiy7`VTGn&$_>^XltQ+f*YQVjbGpGb6(yuva4Wu90Jk#ixpbb>ZTbBV)~T@ucN@($ z-96f0ErudWX=j9lC&H8xyi{!LPdFJ>7&viGR#l|dp~PR9c^~8R<#U==^<_j>8HA-R z&rI*|R`u84NEvv4SWV~cX;t$km=KD=+v`$!e|wk_6Arms#sxzr|CYQ$E*X*=)bATh zn2)>KKBT(?PLv+faYC$4GJFxRkHiEHP)H(l{A z@&UM*PJ@8~Fe@2xN_*))(h!lhPJK?y=aAKq349G5r&O~J44GN#l zEc{tt9~soc9($jJwaC2uTzGCO_2!1}7)JTga%`nnJ^WP3wm^v>Uz&n~0fgbhOw_p- zryxTDiZJjZZq7#&VB!3{FUw(oGXDg$x$q8FWK>at4)21zIzEMcybaI}18<_%=8XCLq0c3qSm zl|3@V@O(8{hw;FfK_YB0I_(!JWO^0#Nd zqSwt$nV4p=%4=_-LfGi|5739kC9~Wji$E%5Q&+v0` z$bSd1SPPr)ry53Sewc20+XZmL$VldMCltA0^V};(bkavBYPB*Z&#+s-4w@uBvXWj6 z<~N_Xz1=3;wRoaC`o|{b`Zkzmh9~wjRiiVI6A9P%r+f!eP&pU`syRFT+Irx*U zSFYx%+_tNfrH%Qp2qCNIUd4+EUV#PW6?Lo9B|fV`i+*{9^v%Si^pl&JD8Q5mrIU2t zVa$mMn>|CK7{1)*Seii~L)nJKae~@_oWYy6h~O%7iKNc;c@Zu+x+PSyvs3bYHmsHi z9mn$;|Lbwln6F4dFWebb-Z?3>R5yh<_b!|i3G`QlF|?)~#~=VXJnH(CbYyz=TQ&|K zG{kcCmjtx(&2a3fJ#5`^h_HGc&M8UfHiL)=c%@L>va+;)#>=%uV)#b5UfxN4JZhbRd*f`*b>w!Vg(G$Tcp)hJutMHD@>_{v3y9y0YZ zJIKp>CQeoI5o#OwS#%yKj`0Gblr0ck9vYATy6pUl;eWU6{VNq8HkcIxiajKzMO|D#I~dhmMy8%0tWwULR$C5Tt%)#JRvvI6@0M*Ai8`8pG1Wej%q{Uq`vvS z$I2nWx&owx_q|!pKhn_(Hl>2;aK@hK5VB`&q zEGs$qAU(Ds>%!bGnqmm^ik{4oIVDW;;5+D(*0{D5P&2yJl)ZN1``(K!7$^5rbLQ!4 z87V9*l$HpTN(N!fqb0qKh5ok=$IQfFV!j)^}(!P;I@6>Q$qJ=c|Ko@m;J-n-LaRdU?96%ATPENWkV+95^{tk zZUPZc@(H5_2l; zssQ!`|5P9W_9NdNZV$O^T~UR#li(a*Xotj{<^

)X`GqhHNPLWTa|vei|@Wr$g%< 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 literal 0 HcmV?d00001 diff --git a/src/add_policy_estimator.rs b/src/add_policy_estimator.rs new file mode 100644 index 0000000..1d37d07 --- /dev/null +++ b/src/add_policy_estimator.rs @@ -0,0 +1,210 @@ +/// Different versions of Zlib use some length criterea to decide whether to add all the substrings of +/// a large match to the hash table. For example, zlib level 1 will only add all the substrings of matches +/// of length 4 in order to save on CPU. +/// +/// What we do here is walk through all the matches and record how long the matching +/// substrings are. The we see what the largest string was that we fully added to the +/// dictionary. +/// +/// This will be the limit that we use when we decide whether to +/// use skip_hash or update_hash. +use crate::preflate_token::{BlockType, PreflateToken, PreflateTokenBlock}; + +#[derive(Default, Eq, PartialEq, Debug, Clone, Copy)] +pub enum DictionaryAddPolicy { + /// Add all substrings of a match to the dictionary + #[default] + AddAll, + /// Add only the first substring of a match to the dictionary that are larger than the limit + AddFirst(u16), + /// Add only the first and last substring of a match to the dictionary that are larger than the limit + AddFirstAndLast(u16), + + /// This policy is used by MiniZ in fastest mode. It adds all substrings of a match to the dictionary except + /// literals that are 4 bytes away from the end of the block. + AddFirstExcept4kBoundary, +} + +impl DictionaryAddPolicy { + /// Updates the hash based on the dictionary add policy + pub fn update_hash( + &self, + input: &[u8], + pos: u32, + length: u32, + mut update_fn: U, + ) { + if length == 1 { + update_fn(input, pos, 1); + } else { + match *self { + DictionaryAddPolicy::AddAll => update_fn(input, pos, length), + DictionaryAddPolicy::AddFirst(limit) => { + if length <= u32::from(limit) { + update_fn(input, pos, length); + } else { + update_fn(input, pos, 1); + } + } + DictionaryAddPolicy::AddFirstAndLast(limit) => { + if length <= u32::from(limit) { + update_fn(input, pos, length); + } else { + update_fn(input, pos, 1); + update_fn(&input[length as usize - 1..], pos + length - 1, 1); + } + } + DictionaryAddPolicy::AddFirstExcept4kBoundary => { + if (pos & 4095) < 4093 { + update_fn(input, pos, 1); + } + } + } + } + } +} + +pub fn estimate_add_policy(token_blocks: &[PreflateTokenBlock]) -> DictionaryAddPolicy { + const WINDOW_MASK: usize = 0x7fff; + + // used to see if we have the special case of not adding matches on the edge + // of the 4k boundary. This is used by miniz. + let mut block_4k = true; + + let mut current_window = vec![0u16; WINDOW_MASK + 1]; + + // tracks the maximum length that we've see that was added to the dictionary + let mut max_length: u32 = 0; + + // tracks the maximum length that we've seen that was added to the dictionary if the last match was also added + let mut max_length_last_add = 0; + let mut current_offset: u32 = 0; + + const LAST_ADDED: u16 = 0x8000; + + let mut min_len = u32::MAX; + + for i in 0..token_blocks.len() { + let token_block = &token_blocks[i]; + + match token_block.block_type { + BlockType::Stored => { + // we assume for stored blocks everything was added to the dictionary + for _i in 0..token_block.uncompressed.len() { + current_window[current_offset as usize & WINDOW_MASK] = 0; + current_offset += 1; + } + } + BlockType::StaticHuff | BlockType::DynamicHuff => { + for token in token_block.tokens.iter() { + match token { + PreflateToken::Literal(_) => { + current_window[current_offset as usize & WINDOW_MASK] = 0; + current_offset += 1; + } + PreflateToken::Reference(r) => { + // track if we saw something on the of the 4k boundary + if (current_offset & 4095) >= 4093 { + block_4k = false; + } + + min_len = std::cmp::min(min_len, r.len()); + + let previous_match = + current_window[(current_offset - r.dist()) as usize & WINDOW_MASK]; + + let match_length = u32::from(previous_match & !LAST_ADDED); + + max_length = std::cmp::max(max_length, match_length); + if (previous_match & LAST_ADDED) == 0 { + max_length_last_add = + std::cmp::max(max_length_last_add, match_length); + } + + current_window[current_offset as usize & WINDOW_MASK] = 0; + current_offset += 1; + + for i in 1..r.len() { + current_window[current_offset as usize & WINDOW_MASK] = + r.len() as u16 | if i == r.len() - 1 { LAST_ADDED } else { 0 }; + current_offset += 1; + } + } + } + } + } + } + } + + if max_length == 0 && block_4k { + DictionaryAddPolicy::AddFirstExcept4kBoundary + } else if max_length_last_add < max_length { + DictionaryAddPolicy::AddFirstAndLast(max_length_last_add as u16) + } else if max_length < 258 { + DictionaryAddPolicy::AddFirst(max_length as u16) + } else { + DictionaryAddPolicy::AddAll + } +} + +#[test] +fn verify_miniz1_recognition() { + let v = crate::process::read_file("compressed_minizoxide_level1.deflate"); + + let contents = crate::process::parse_deflate(&v, 1).unwrap(); + + let add_policy = estimate_add_policy(&contents.blocks); + + assert_eq!(add_policy, DictionaryAddPolicy::AddFirstExcept4kBoundary); +} + +#[test] +fn verify_zlib_level_recognition() { + let levels = [ + DictionaryAddPolicy::AddFirst(4), + DictionaryAddPolicy::AddFirst(5), + DictionaryAddPolicy::AddFirst(6), + DictionaryAddPolicy::AddAll, + ]; + + for i in 1..=4 { + let v = crate::process::read_file(&format!("compressed_zlib_level{}.deflate", i)); + + let contents = crate::process::parse_deflate(&v, 1).unwrap(); + let add_policy = estimate_add_policy(&contents.blocks); + + assert_eq!(add_policy, levels[i - 1]); + } +} + +#[test] +fn verify_zlibng_level_recognition() { + let levels = [ + DictionaryAddPolicy::AddFirstAndLast(0), // 1 quick + DictionaryAddPolicy::AddFirstAndLast(4), // 2 fast + DictionaryAddPolicy::AddFirstAndLast(96), // 3 medium + DictionaryAddPolicy::AddFirstAndLast(191), // 4 medium + ]; + + for i in 1..=4 { + let v = crate::process::read_file(&format!("compressed_zlibng_level{}.deflate", i)); + + let contents = crate::process::parse_deflate(&v, 1).unwrap(); + let add_policy = estimate_add_policy(&contents.blocks); + + assert_eq!(add_policy, levels[i - 1]); + } +} + +/// libflate always adds all matches to the dictionary +#[test] +fn verify_libflate_level_recognition() { + for i in 1..=9 { + let v = crate::process::read_file(&format!("compressed_libdeflate_level{}.deflate", i)); + + let contents = crate::process::parse_deflate(&v, 1).unwrap(); + let add_policy = estimate_add_policy(&contents.blocks); + + assert_eq!(add_policy, DictionaryAddPolicy::AddAll); + } +} diff --git a/src/bit_helper.rs b/src/bit_helper.rs index 6442962..37ce304 100644 --- a/src/bit_helper.rs +++ b/src/bit_helper.rs @@ -13,6 +13,7 @@ pub struct DebugHash { hash: u64, } +#[allow(dead_code)] impl DebugHash { pub fn update>(&mut self, v: T) { self.hash = self.hash.wrapping_mul(13).wrapping_add(v.into() as u64); diff --git a/src/complevel_estimator.rs b/src/complevel_estimator.rs index ee31944..3187e05 100644 --- a/src/complevel_estimator.rs +++ b/src/complevel_estimator.rs @@ -8,18 +8,15 @@ /// Getting the parameters correct means that the resulting diff between the deflate stream /// and the predicted deflate stream will be as small as possible. use crate::{ + add_policy_estimator::DictionaryAddPolicy, + depth_estimator::{new_depth_estimator, HashTableDepthEstimator}, hash_algorithm::HashAlgorithm, - hash_chain::DictionaryAddPolicy, - hash_chain_holder::{new_hash_chain_holder, HashChainHolder}, preflate_constants, preflate_input::PreflateInput, - preflate_parameter_estimator::PreflateStrategy, preflate_parse_config::{ MatchingType, SLOW_PREFLATE_PARSER_SETTINGS, ZLIB_PREFLATE_PARSER_SETTINGS, }, preflate_token::{BlockType, PreflateToken, PreflateTokenBlock, PreflateTokenReference}, - skip_length_estimator::estimate_add_policy, - token_predictor::TokenPredictorParameters, }; #[derive(Default)] @@ -40,8 +37,7 @@ pub struct CompLevelInfo { struct CandidateInfo { hash_algorithm: HashAlgorithm, - add_policy: DictionaryAddPolicy, - hash_chain: Box, + depth_estimator: Box, longest_dist_at_hop_0: u32, longest_dist_at_hop_1_plus: u32, @@ -49,44 +45,18 @@ struct CandidateInfo { } impl CandidateInfo { - fn new( - add_policy: DictionaryAddPolicy, - hash_algorithm: HashAlgorithm, - window_bits: u32, - ) -> Self { - let params = TokenPredictorParameters { - hash_algorithm, - add_policy, - matches_to_start_detected: false, - very_far_matches_detected: false, - window_bits, - strategy: PreflateStrategy::Default, - nice_length: 0, - max_token_count: 0, - zlib_compatible: false, - max_dist_3_matches: 0, - matching_type: MatchingType::Greedy, - max_chain: 0, - min_len: 0, - }; - + fn new(hash_algorithm: HashAlgorithm) -> Self { Self { - add_policy, hash_algorithm, - hash_chain: new_hash_chain_holder(¶ms), + depth_estimator: new_depth_estimator(hash_algorithm), longest_dist_at_hop_0: 0, longest_dist_at_hop_1_plus: 0, max_chain_found: 0, } } - fn match_depth( - &mut self, - token: PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> bool { - let mdepth = self.hash_chain.match_depth(token, window_size, input); + fn match_depth(&mut self, token: PreflateTokenReference, input: &PreflateInput) -> bool { + let mdepth = self.depth_estimator.match_depth(token, input); // remove element if the match was impossible due to matching the // the hash depth or because in fast mode we can't match partial words @@ -140,6 +110,8 @@ struct CompLevelEstimatorState<'a> { /// candidates for checking for which hash algorithm to use candidates: Vec>, + add_policy: DictionaryAddPolicy, + blocks: &'a Vec, wsize: u16, reference_count: u32, @@ -155,74 +127,56 @@ impl<'a> CompLevelEstimatorState<'a> { wbits: u32, mem_level: u32, plain_text: &'a [u8], + add_policy: DictionaryAddPolicy, + min_len: u32, blocks: &'a Vec, ) -> Self { - let add_policy = estimate_add_policy(blocks); - let hash_bits = mem_level + 7; let mem_hash_shift = (hash_bits + 2) / 3; let mem_hash_mask = ((1u32 << hash_bits) - 1) as u16; - let mut hashparameters = vec![(5, 0x7fff), (4, 2047), (4, 4095)]; - - if !hashparameters - .iter() - .any(|&(a, b)| a == mem_hash_shift && b == mem_hash_mask) - { - hashparameters.push((mem_hash_shift, mem_hash_mask)); - } - let input = PreflateInput::new(plain_text); let mut candidates: Vec> = Vec::new(); - candidates.push(Box::new(CandidateInfo::new( - DictionaryAddPolicy::AddFirst(0), - HashAlgorithm::MiniZFast, - wbits, - ))); + if min_len == 3 { + let mut hashparameters = vec![(5, 0x7fff), (4, 2047), (4, 4095)]; - for (hash_shift, hash_mask) in [(5, 32767), (4, 2047)] { - candidates.push(Box::new(CandidateInfo::new( - add_policy, - HashAlgorithm::Zlib { + if !hashparameters + .iter() + .any(|&(a, b)| a == mem_hash_shift && b == mem_hash_mask) + { + hashparameters.push((mem_hash_shift, mem_hash_mask)); + } + + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::MiniZFast))); + + for (hash_shift, hash_mask) in [(5, 32767), (4, 2047)] { + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::Zlib { hash_mask, hash_shift, - }, - wbits, - ))); - } + }))); + } + + // LibFlate4 candidate + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::Libdeflate4))); + + // RandomVector candidate + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::RandomVector))); + } else { + // Libflate4 fast (only 4 bytes or more) + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::Libdeflate4Fast))); - // LibFlate4 candidate - candidates.push(Box::new(CandidateInfo::new( - add_policy, - HashAlgorithm::Libdeflate4, - wbits, - ))); - - // ZlibNG candidate - candidates.push(Box::new(CandidateInfo::new( - add_policy, - HashAlgorithm::ZlibNG, - wbits, - ))); - - // RandomVector candidate - candidates.push(Box::new(CandidateInfo::new( - add_policy, - HashAlgorithm::RandomVector, - wbits, - ))); - - // Crc32c candidate - candidates.push(Box::new(CandidateInfo::new( - add_policy, - HashAlgorithm::Crc32cHash, - wbits, - ))); + // ZlibNG candidate + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::ZlibNG))); + + // Crc32c candidate + candidates.push(Box::new(CandidateInfo::new(HashAlgorithm::Crc32cHash))); + } CompLevelEstimatorState { input, + add_policy: add_policy, candidates, blocks, wsize: 1 << wbits, @@ -230,14 +184,15 @@ impl<'a> CompLevelEstimatorState<'a> { unfound_references: 0, match_to_start: false, longest_len_3_dist: 0, - min_len: 258, + min_len: min_len, } } /// updates all the active candidates with the current hash and advance it fn update_candidate_hashes(&mut self, length: u32) { for i in &mut self.candidates { - i.hash_chain.update_hash_with_depth(length, &self.input); + i.depth_estimator + .update_hash(self.add_policy, &self.input, length); } self.input.advance(length); @@ -251,17 +206,13 @@ impl<'a> CompLevelEstimatorState<'a> { return; } - let window_size = self.window_size(); - self.candidates - .retain_mut(|c| c.match_depth(token, window_size, &self.input)); + .retain_mut(|c| c.match_depth(token, &self.input)); if token.dist() == self.input.pos() { self.match_to_start = true; } - self.min_len = std::cmp::min(self.min_len, token.len()); - if token.len() == 3 { self.longest_len_3_dist = std::cmp::max(self.longest_len_3_dist, token.dist()); } @@ -270,14 +221,14 @@ impl<'a> CompLevelEstimatorState<'a> { fn check_dump(&mut self) { for (_i, b) in self.blocks.iter().enumerate() { if b.block_type == BlockType::Stored { - for _i in 0..b.uncompressed_len { + for _i in 0..b.uncompressed.len() { self.update_candidate_hashes(1); } continue; } for (_j, t) in b.tokens.iter().enumerate() { match t { - PreflateToken::Literal => { + PreflateToken::Literal(_) => { self.update_candidate_hashes(1); } &PreflateToken::Reference(r) => { @@ -303,13 +254,12 @@ impl<'a> CompLevelEstimatorState<'a> { let mut match_type = MatchingType::Greedy; let mut nice_length = 258; - let add_policy = candidate.add_policy; let max_chain = candidate.max_chain_found() + 1; let hash_algorithm = candidate.hash_algorithm(); let longest_dist_at_hop_0 = candidate.longest_dist_at_hop_0; let longest_dist_at_hop_1_plus = candidate.longest_dist_at_hop_1_plus; - match candidate.add_policy { + match self.add_policy { DictionaryAddPolicy::AddFirst(_) | DictionaryAddPolicy::AddFirstAndLast(_) | DictionaryAddPolicy::AddFirstExcept4kBoundary => { @@ -349,7 +299,7 @@ impl<'a> CompLevelEstimatorState<'a> { matches_to_start_detected: self.match_to_start, very_far_matches_detected: very_far_matches, max_dist_3_matches: self.longest_len_3_dist as u16, - add_policy, + add_policy: self.add_policy, match_type, nice_length, max_chain, @@ -357,7 +307,8 @@ impl<'a> CompLevelEstimatorState<'a> { hash_algorithm, zlib_compatible: !self.match_to_start && !very_far_matches - && (self.longest_len_3_dist < 4096 || add_policy != DictionaryAddPolicy::AddAll), + && (self.longest_len_3_dist < 4096 + || self.add_policy != DictionaryAddPolicy::AddAll), }) } @@ -369,10 +320,13 @@ impl<'a> CompLevelEstimatorState<'a> { pub fn estimate_preflate_comp_level( wbits: u32, mem_level: u32, + min_len: u32, plain_text: &[u8], + add_policy: DictionaryAddPolicy, blocks: &Vec, ) -> anyhow::Result { - let mut state = CompLevelEstimatorState::new(wbits, mem_level, plain_text, blocks); + let mut state = + CompLevelEstimatorState::new(wbits, mem_level, plain_text, add_policy, min_len, blocks); state.check_dump(); state.recommend() } diff --git a/src/deflate_reader.rs b/src/deflate_reader.rs index 6ee61b1..6f0ff32 100644 --- a/src/deflate_reader.rs +++ b/src/deflate_reader.rs @@ -79,13 +79,13 @@ impl DeflateReader { if (len ^ ilen) != 0xffff { return Err(anyhow::Error::msg("Blocllength mismatch")); } - blk.uncompressed_len = len; blk.context_len = 0; self.input.flush_buffer_to_byte_boundary(); for _i in 0..len { let b = self.input.read_byte()?; + blk.uncompressed.push(b); self.write_literal(b); } @@ -129,7 +129,6 @@ impl DeflateReader { blk.add_literal(lit_len as u8); cur_pos += 1; } else if lit_len == 256 { - blk.uncompressed_len = cur_pos as u32; blk.context_len = -earliest_reference; break; } else { diff --git a/src/deflate_writer.rs b/src/deflate_writer.rs index 13c85d5..5e3a8dd 100644 --- a/src/deflate_writer.rs +++ b/src/deflate_writer.rs @@ -16,13 +16,7 @@ use crate::{ preflate_token::{BlockType, PreflateToken, PreflateTokenBlock}, }; -pub struct DeflateWriter<'a> { - /// original uncompressed plain text - plain_text: &'a [u8], - - /// how far we have gotten through the plain text - plain_text_index: usize, - +pub struct DeflateWriter { /// bit writer to write partial bits to output bitwriter: BitWriter, @@ -30,12 +24,10 @@ pub struct DeflateWriter<'a> { output: Vec, } -impl<'a> DeflateWriter<'a> { - pub fn new(plain_text: &'a [u8]) -> Self { +impl DeflateWriter { + pub fn new() -> Self { Self { output: Vec::new(), - plain_text, - plain_text_index: 0, bitwriter: BitWriter::default(), } } @@ -55,16 +47,11 @@ impl<'a> DeflateWriter<'a> { self.bitwriter.flush_whole_bytes(&mut self.output); self.output - .extend_from_slice(&(block.uncompressed_len as u16).to_le_bytes()); + .extend_from_slice(&(block.uncompressed.len() as u16).to_le_bytes()); self.output - .extend_from_slice(&(!block.uncompressed_len as u16).to_le_bytes()); - - self.output.extend_from_slice( - &self.plain_text[self.plain_text_index - ..self.plain_text_index + block.uncompressed_len as usize], - ); + .extend_from_slice(&(!block.uncompressed.len() as u16).to_le_bytes()); - self.plain_text_index += block.uncompressed_len as usize; + self.output.extend_from_slice(&block.uncompressed); } BlockType::StaticHuff => { self.bitwriter.write(1, 2, &mut self.output); @@ -95,17 +82,14 @@ impl<'a> DeflateWriter<'a> { block: &PreflateTokenBlock, huffman_writer: &HuffmanWriter, ) { - let mut index = self.plain_text_index; - for token in &block.tokens { match token { - PreflateToken::Literal => { + PreflateToken::Literal(lit) => { huffman_writer.write_literal( &mut self.bitwriter, &mut self.output, - self.plain_text[index].into(), + u16::from(*lit), ); - index += 1; } PreflateToken::Reference(reference) => { if reference.get_irregular258() { @@ -148,12 +132,8 @@ impl<'a> DeflateWriter<'a> { ); } } - - index += reference.len() as usize; } } - - self.plain_text_index = index; } huffman_writer.write_literal(&mut self.bitwriter, &mut self.output, 256); diff --git a/src/depth_estimator.rs b/src/depth_estimator.rs new file mode 100644 index 0000000..65de3ec --- /dev/null +++ b/src/depth_estimator.rs @@ -0,0 +1,274 @@ +use default_boxed::DefaultBoxed; + +use crate::{ + add_policy_estimator::DictionaryAddPolicy, hash_algorithm::*, preflate_input::PreflateInput, + preflate_token::PreflateTokenReference, +}; + +pub trait HashTableDepthEstimator { + fn update_hash(&mut self, add_policy: DictionaryAddPolicy, input: &PreflateInput, length: u32); + + /// sees how many matches we need to walk to reach match_pos, which we + /// do by subtracting the depth of the current node from the depth of the + /// match node. + fn match_depth(&self, token: PreflateTokenReference, input: &PreflateInput) -> u32; +} + +#[derive(DefaultBoxed)] +pub struct HashTableDepthEstimatorImpl { + /// Represents the head of the hash chain for a given hash value. + head: [u16; 65536], + + /// Represents the number of following nodes in the chain for a given + /// position. For example, if chainDepth[100] == 5, then there are 5 more + /// matches if we follow the prev chain from position 100 back to 0. The value goes back + /// all the way to be beginning of the compressed data (not readjusted when we shift + /// the compression window), so in order to calculate the number of chain positions, + /// you need to subtract the value from the head position. + /// + /// This is used during estimation only to figure out how deep we need to match + /// into the hash chain, which allows us to estimate which parameters were used + /// to generate the deflate data. + chain_depth: [i32; 65536], + + /// the hash at this particular position. This is verified to make sure that it + /// is part of the same hash chain, if not, we know that this was not the correct + /// hash function to use. + chain_depth_hash_verify: [u16; 65536], + + /// hash function used to calculate the hash + hash: H, +} + +impl HashTableDepthEstimatorImpl { + /// depth is the number of matches we need to walk to reach the match_pos. This + /// is only valid if this was part of the same hash chain + #[inline] + fn get_node_depth(&self, node: u16, expected_hash: u16) -> i32 { + debug_assert_eq!(self.chain_depth_hash_verify[node as usize], expected_hash); + self.chain_depth[node as usize] + } + + pub fn box_new(hash: H) -> Box { + let mut l = HashTableDepthEstimatorImpl::::default_boxed(); + l.hash = hash; + l + } + + fn internal_update_hash(&mut self, chars: &[u8], pos: u32, length: u32) { + debug_assert!(length as usize <= chars.len()); + if length as usize + H::num_hash_bytes() - 1 >= chars.len() { + // reached on of the stream so there will be no more matches + return; + } + + let mut pos = pos as u16; + + for i in 0..length { + let h = self.hash.get_hash(&chars[i as usize..]); + + self.chain_depth[usize::from(pos)] = + self.chain_depth[self.head[usize::from(h)] as usize] + 1; + self.chain_depth_hash_verify[usize::from(pos)] = h; + + self.head[usize::from(h)] = pos; + + pos = pos.wrapping_add(1); + } + } +} + +impl HashTableDepthEstimator for HashTableDepthEstimatorImpl { + fn update_hash(&mut self, add_policy: DictionaryAddPolicy, input: &PreflateInput, length: u32) { + add_policy.update_hash( + input.cur_chars(0), + input.pos(), + length, + |chars, pos, len| self.internal_update_hash(chars, pos, len), + ); + } + + /// sees how many matches we need to walk to reach match_pos, which we + /// do by subtracting the depth of the current node from the depth of the + /// match node. + fn match_depth(&self, token: PreflateTokenReference, input: &PreflateInput) -> u32 { + let match_pos = (input.pos() - token.dist()) as u16; + + let h = self.hash.get_hash(input.cur_chars(0)); + let head = self.head[usize::from(h)]; + + // since we already calculated the dictionary add policy, we should + // always be on the same chain as the the head + let cur_depth = self.get_node_depth(head, h); + let match_depth = self.get_node_depth(match_pos, h); + + debug_assert!( + cur_depth >= match_depth, + "current match should be >= to previous c: {} m: {}", + cur_depth, + match_depth + ); + + (cur_depth - match_depth) as u32 + } +} + +/// this algorithm is wierd because it uses the first candidate of the 3 byte match, +/// but then continues with the next 4 bytes. This is used by libflate. +#[derive(DefaultBoxed)] +struct HashTableDepthEstimatorLibflate { + length4: HashTableDepthEstimatorImpl, + head3: [u32; 65536], +} + +const LIB_DEFLATE3_HASH: LibdeflateHash3Secondary = LibdeflateHash3Secondary {}; + +impl HashTableDepthEstimatorLibflate { + fn internal_update_hash3(&mut self, chars: &[u8], pos: u32, length: u32) { + debug_assert!(length as usize <= chars.len()); + if length as usize + 3 - 1 >= chars.len() { + // reached on of the stream so there will be no more matches + return; + } + + for i in 0..length { + let h = LIB_DEFLATE3_HASH.get_hash(&chars[i as usize..]); + + self.head3[usize::from(h)] = pos + i; + } + } +} + +impl HashTableDepthEstimator for HashTableDepthEstimatorLibflate { + fn update_hash(&mut self, add_policy: DictionaryAddPolicy, input: &PreflateInput, length: u32) { + add_policy.update_hash( + input.cur_chars(0), + input.pos(), + length, + |chars, pos, len| { + self.length4.internal_update_hash(chars, pos, len); + self.internal_update_hash3(chars, pos, len); + }, + ); + } + + /// sees how many matches we need to walk to reach match_pos, which we + /// do by subtracting the depth of the current node from the depth of the + /// match node. + fn match_depth(&self, token: PreflateTokenReference, input: &PreflateInput) -> u32 { + let length3hash = LIB_DEFLATE3_HASH.get_hash(input.cur_chars(0)); + let distance3 = input.pos() - self.head3[usize::from(length3hash)]; + + if distance3 == token.dist() { + return 1; + } else { + // anything length 3 should have matched before + if token.len() == 3 { + return 65535; + } + + return if distance3 < 32768 { 1 } else { 0 } + self.length4.match_depth(token, input); + } + } +} + +/// Factory function to create a new HashTableDepthEstimator based on the hash algorithm +pub fn new_depth_estimator(hash_algorithm: HashAlgorithm) -> Box { + match hash_algorithm { + HashAlgorithm::None => panic!("No hash algorithm specified"), + HashAlgorithm::Zlib { + hash_mask, + hash_shift, + } => HashTableDepthEstimatorImpl::box_new(ZlibRotatingHash { + hash_mask, + hash_shift, + }), + HashAlgorithm::MiniZFast => HashTableDepthEstimatorImpl::box_new(MiniZHash {}), + HashAlgorithm::Libdeflate4 => HashTableDepthEstimatorLibflate::default_boxed(), + HashAlgorithm::Libdeflate4Fast => HashTableDepthEstimatorImpl::box_new(LibdeflateHash4 {}), + + HashAlgorithm::ZlibNG => HashTableDepthEstimatorImpl::box_new(ZlibNGHash {}), + HashAlgorithm::RandomVector => HashTableDepthEstimatorImpl::box_new(RandomVectorHash {}), + HashAlgorithm::Crc32cHash => HashTableDepthEstimatorImpl::box_new(Crc32cHash {}), + } +} + +#[test] +fn verify_max_chain_length() { + use crate::{ + preflate_token::{BlockType, PreflateToken}, + process::parse_deflate, + }; + + let zlib = HashAlgorithm::Zlib { + hash_mask: 0x7FFF, + hash_shift: 5, + }; + + #[rustfmt::skip] + let levels = [ + ("compressed_zlibng_level1.deflate", HashAlgorithm::ZlibNG, DictionaryAddPolicy::AddFirstAndLast(0), 23), + ("compressed_libdeflate_level1.deflate", HashAlgorithm::Libdeflate4Fast, DictionaryAddPolicy::AddAll, 1), + ("compressed_libdeflate_level2.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 6), + ("compressed_libdeflate_level3.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 12), + ("compressed_libdeflate_level4.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 16), + ("compressed_libdeflate_level5.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 16), + ("compressed_libdeflate_level6.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 35), + ("compressed_libdeflate_level7.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 100), + ("compressed_libdeflate_level8.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 300), + ("compressed_libdeflate_level9.deflate", HashAlgorithm::Libdeflate4, DictionaryAddPolicy::AddAll, 597 /*600*/), + ("compressed_zlib_level1.deflate", zlib, DictionaryAddPolicy::AddFirst(4), 3), + ("compressed_zlib_level2.deflate", zlib, DictionaryAddPolicy::AddFirst(5), 7), + ("compressed_zlib_level3.deflate", zlib, DictionaryAddPolicy::AddFirst(6), 31), + ("compressed_zlib_level4.deflate", zlib, DictionaryAddPolicy::AddAll, 15), + ("compressed_zlib_level5.deflate", zlib, DictionaryAddPolicy::AddAll, 31), + ("compressed_zlib_level6.deflate", zlib, DictionaryAddPolicy::AddAll, 127), + ("compressed_zlib_level7.deflate", zlib, DictionaryAddPolicy::AddAll, 255), + ("compressed_zlib_level8.deflate", zlib, DictionaryAddPolicy::AddAll, 1022), + ("compressed_zlib_level9.deflate", zlib, DictionaryAddPolicy::AddAll, 3986), + ("compressed_minizoxide_level1.deflate", HashAlgorithm::MiniZFast, DictionaryAddPolicy::AddFirstExcept4kBoundary, 2), + + ]; + + for level in levels { + let compressed_data = crate::process::read_file(level.0); + + let parsed = parse_deflate(&compressed_data, 0).unwrap(); + + let mut estimator = new_depth_estimator(level.1); + + let mut input = PreflateInput::new(&parsed.plain_text); + let mut max_depth = 0; + for block in parsed.blocks { + match block.block_type { + BlockType::Stored => { + estimator.update_hash( + DictionaryAddPolicy::AddAll, + &input, + block.uncompressed.len() as u32, + ); + } + BlockType::StaticHuff | BlockType::DynamicHuff => { + for token in block.tokens { + let len = match token { + PreflateToken::Literal(_) => 1, + PreflateToken::Reference(r) => { + max_depth = max_depth.max(estimator.match_depth(r, &input)); + assert!(max_depth <= 4096, "max depth {} too high", max_depth); + r.len() + } + }; + + estimator.update_hash(level.2, &input, len); + input.advance(len); + } + } + } + } + assert_eq!( + max_depth, level.3, + "max depth {} for file {} is incorrect (should be {})", + max_depth, level.0, level.3 + ); + } +} diff --git a/src/hash_algorithm.rs b/src/hash_algorithm.rs index 29b9754..0fa6357 100644 --- a/src/hash_algorithm.rs +++ b/src/hash_algorithm.rs @@ -1,14 +1,20 @@ -use crate::hash_chain::{HashChain, HashChainAbs, HashChainNormalize, HashChainNormalizeLibflate4}; +use crate::hash_chain::{HashChain, HashChainNormalize, HashChainNormalizeLibflate4}; #[derive(Debug, Copy, Clone, Eq, PartialEq, Default)] pub enum HashAlgorithm { + #[default] + None, Zlib { hash_mask: u16, hash_shift: u32, }, - #[default] MiniZFast, + + /// Libflate 4 byte hash only + Libdeflate4Fast, + /// Libflate 4 byte hash with 3 byte secondary hash Libdeflate4, + ZlibNG, RandomVector, Crc32cHash, @@ -70,14 +76,37 @@ impl HashImplementation for MiniZHash { } } +/// Fast version of Libflate hash that doesn't use a secondary 3 +/// byte hash. This is used by level 1 compression. +#[derive(Default, Copy, Clone)] +pub struct LibdeflateHash4Fast {} + +impl HashImplementation for LibdeflateHash4Fast { + type HashChainType = HashChainNormalize; + + fn get_hash(&self, b: &[u8]) -> u16 { + let hash = u32::from_le_bytes(b[..4].try_into().unwrap()); + + (hash.wrapping_mul(0x1E35A7BD) >> 16) as u16 + } + + fn num_hash_bytes() -> usize { + 4 + } + + fn new_hash_chain(self) -> Self::HashChainType { + HashChainNormalize::::new(self) + } +} + #[derive(Default, Copy, Clone)] -pub struct LibdeflateRotatingHash4 {} +pub struct LibdeflateHash4 {} -impl HashImplementation for LibdeflateRotatingHash4 { +impl HashImplementation for LibdeflateHash4 { type HashChainType = HashChainNormalizeLibflate4; fn get_hash(&self, b: &[u8]) -> u16 { - let hash = u32::from_le_bytes([b[0], b[1], b[2], b[3]]); + let hash = u32::from_le_bytes(b[..4].try_into().unwrap()); (hash.wrapping_mul(0x1E35A7BD) >> 16) as u16 } @@ -95,10 +124,10 @@ impl HashImplementation for LibdeflateRotatingHash4 { /// as a secondary hash value to find 3 byte matches within the first 4096K if /// we fail to find any four byte matches with the primary hash. #[derive(Default, Copy, Clone)] -pub struct LibdeflateRotatingHash3 {} +pub struct LibdeflateHash3Secondary {} -impl HashImplementation for LibdeflateRotatingHash3 { - type HashChainType = HashChainNormalize; +impl HashImplementation for LibdeflateHash3Secondary { + type HashChainType = HashChainNormalize; fn get_hash(&self, b: &[u8]) -> u16 { let hash = u32::from(b[0]) | (u32::from(b[1]) << 8) | (u32::from(b[2]) << 16); @@ -122,7 +151,7 @@ impl HashImplementation for ZlibNGHash { type HashChainType = HashChainNormalize; fn get_hash(&self, b: &[u8]) -> u16 { - let hash = u32::from_le_bytes([b[0], b[1], b[2], b[3]]); + let hash = u32::from_le_bytes(b[..4].try_into().unwrap()); (hash.wrapping_mul(2654435761) >> 16) as u16 } @@ -227,7 +256,7 @@ const RANDOM_VECTOR: [u16; 768] = [ ]; impl HashImplementation for RandomVectorHash { - type HashChainType = HashChainAbs; + type HashChainType = HashChainNormalize; fn get_hash(&self, b: &[u8]) -> u16 { RANDOM_VECTOR[b[0] as usize] diff --git a/src/hash_chain.rs b/src/hash_chain.rs index b28e019..f3c1934 100644 --- a/src/hash_chain.rs +++ b/src/hash_chain.rs @@ -4,53 +4,23 @@ * This software incorporates material from third parties. See NOTICE.txt for details. *--------------------------------------------------------------------------------------------*/ -use std::cmp; - use default_boxed::DefaultBoxed; use crate::{ bit_helper::DebugHash, - hash_algorithm::{HashImplementation, LibdeflateRotatingHash3, LibdeflateRotatingHash4}, + hash_algorithm::{HashImplementation, LibdeflateHash3Secondary, LibdeflateHash4}, preflate_input::PreflateInput, - preflate_token::PreflateTokenReference, }; pub const MAX_UPDATE_HASH_BATCH: u32 = 0x180; -pub const BAD_DEPTH: u32 = 0xffff; - -pub const UPDATE_MODE_ALL: u32 = 0; -pub const UPDATE_MODE_FIRST: u32 = 1; -pub const UPDATE_MODE_FIRST_AND_LAST: u32 = 2; - -#[derive(Default, Eq, PartialEq, Debug, Clone, Copy)] -pub enum DictionaryAddPolicy { - /// Add all substrings of a match to the dictionary - #[default] - AddAll, - /// Add only the first substring of a match to the dictionary that are larger than the limit - AddFirst(u16), - /// Add only the first and last substring of a match to the dictionary that are larger than the limit - AddFirstAndLast(u16), - - /// This policy is used by MiniZ in fastest mode. It adds all substrings of a match to the dictionary except - /// literals that are 4 bytes away from the end of the block. - AddFirstExcept4kBoundary, -} - -trait InternalPosition: Copy + Clone + Eq + PartialEq + Default + std::fmt::Debug { - fn reshift(&self, delta: u16) -> Self; - fn to_index(self) -> usize; - fn inc(&self) -> Self; - fn is_valid(&self) -> bool; - fn dist(&self, pos: Self) -> u32; -} #[derive(Default, Copy, Clone, Eq, PartialEq, Debug)] -struct InternalPositionRel { +#[repr(C)] +struct InternalPosition { pos: u16, } -impl InternalPosition for InternalPositionRel { +impl InternalPosition { fn reshift(&self, other: u16) -> Self { Self { pos: self.pos.saturating_sub(other), @@ -69,12 +39,12 @@ impl InternalPosition for InternalPositionRel { self.pos > 0 } - fn dist(&self, pos: InternalPositionRel) -> u32 { + fn dist(&self, pos: InternalPosition) -> u32 { u32::from(self.pos - pos.pos) } } -impl InternalPositionRel { +impl InternalPosition { fn from_absolute(pos: u32, total_shift: i32) -> Self { Self { pos: u16::try_from(pos as i32 - total_shift).unwrap(), @@ -82,206 +52,80 @@ impl InternalPositionRel { } } -#[derive(Copy, Clone, Eq, PartialEq, Debug)] -struct InternalPositionAbs { - pos: u32, -} - -impl InternalPosition for InternalPositionAbs { - fn reshift(&self, _other: u16) -> Self { - unimplemented!() - } - - fn to_index(self) -> usize { - (self.pos & 0x7fff) as usize - } - - fn inc(&self) -> Self { - Self { pos: self.pos + 1 } - } - - fn is_valid(&self) -> bool { - self.pos != 0xffffffff - } - - fn dist(&self, pos: Self) -> u32 { - u32::from(self.pos - pos.pos) - } -} - -impl Default for InternalPositionAbs { - fn default() -> Self { - Self { pos: 0xffffffff } - } -} - -impl InternalPositionAbs { - fn new(pos: u32) -> Self { - Self { pos } - } -} - #[derive(DefaultBoxed)] -struct HashTable { - /// Represents the head of the hash chain for a given hash value. In order - /// to find additional matches, you follow the prev chain from the head. - head: [I; 65536], - - /// Represents the number of following nodes in the chain for a given - /// position. For example, if chainDepth[100] == 5, then there are 5 more - /// matches if we follow the prev chain from position 100 back to 0. The value goes back - /// all the way to be beginning of the compressed data (not readjusted when we shift - /// the compression window), so in order to calculate the number of chain positions, - /// you need to subtract the value from the head position. +#[repr(C, align(64))] +struct HashTable { + /// Represents the head of the hash chain for a given hash value, or zero + /// if there is none. In order to find additional matches, you follow the prev + /// chain from the head. /// - /// This is used during estimation only to figure out how deep we need to match - /// into the hash chain, which allows us to estimate which parameters were used - /// to generate the deflate data. - chain_depth: [i32; 65536], - - /// the hash at this particular position. This is verified to make sure that it - /// is part of the same hash chain, if not, we know that this was not the correct - /// hash function to use. - chain_depth_hash_verify: [u16; 65536], + /// (We start reading with an offset of -8 to avoid confusion with the end of + /// the chain, so the first offset will be 8) + head: [InternalPosition; 65536], /// Represents the prev chain for a given position. This is used to find /// all the potential matches for a given hash. The value points to previous - /// position in the chain, or 0 if there are no more matches. (We start - /// with an offset of 8 to avoid confusion with the end of the chain) - prev: [I; 65536], - - /// hash function used to calculate the hash - hash: H, + /// position in the chain, or 0 if there are no more matches. + prev: [InternalPosition; 65536], } -impl HashTable { +impl HashTable { #[inline] - fn get_head(&self, h: u16) -> I { + fn get_head(&self, h: u16) -> InternalPosition { self.head[usize::from(h)] } - /// depth is the number of matches we need to walk to reach the match_pos. This - /// is only valid if this was part of the same hash chain #[inline] - fn get_node_depth(&self, node: I, expected_hash: u16) -> Option { - if self.chain_depth_hash_verify[node.to_index()] == expected_hash { - Some(self.chain_depth[node.to_index()]) - } else { - None - } - } - - #[inline] - fn update_chain( + fn update_chain( &mut self, + hash: H, chars: &[u8], - mut pos: I, + mut pos: InternalPosition, length: u32, ) { - let offset = H::num_hash_bytes() as usize - 1; - - if chars.len() <= offset { - // nothing to update + debug_assert!(length as usize <= chars.len()); + if length as usize + H::num_hash_bytes() - 1 >= chars.len() { + // reached on of the stream so there will be no more matches return; } - let last = cmp::min(length as usize, chars.len() - offset); - for i in 0..last { - if UPDATE_MODE == UPDATE_MODE_ALL - || (UPDATE_MODE == UPDATE_MODE_FIRST && i == 0) - || (UPDATE_MODE == UPDATE_MODE_FIRST_AND_LAST && (i == 0 || i == last - 1)) + for i in 0..length { { - let h = self.hash.get_hash(&chars[i..]); - - if MAINTAIN_DEPTH { - self.chain_depth[pos.to_index()] = - self.chain_depth[self.head[usize::from(h)].to_index()] + 1; - self.chain_depth_hash_verify[pos.to_index()] = h; - } + let h = hash.get_hash(&chars[i as usize..]); self.prev[pos.to_index()] = self.head[usize::from(h)]; + self.head[usize::from(h)] = pos; - } else if MAINTAIN_DEPTH { - self.chain_depth[pos.to_index()] = -65535; } pos = pos.inc(); } } - fn reshift(&mut self) { - for i in 0..=65535 { - self.head[i] = self.head[i].reshift(DELTA as u16); + fn reshift(&mut self) { + for x in self.head.iter_mut() { + *x = x.reshift(DELTA as u16); } for i in DELTA..=65535 { self.prev[i - DELTA] = self.prev[i].reshift(DELTA as u16); } - - if MAINTAIN_DEPTH { - self.chain_depth.copy_within(DELTA..=65535, 0); - self.chain_depth_hash_verify.copy_within(DELTA..=65535, 0); - } - } - - /// sees how many matches we need to walk to reach match_pos, which we - /// do by subtracting the depth of the current node from the depth of the - /// match node. - pub fn match_depth(&self, match_pos: I, input: &PreflateInput) -> u32 { - let h = self.hash.get_hash(input.cur_chars(0)); - let head = self.get_head(h); - - // If match was not found, what happened was that it didn't get added - // to the dictionary due to the dictionary add policy. In this case, - // we know for sure that this was not the right compression setting - // and we will filter this out of the possible candidates. - if !head.is_valid() { - return BAD_DEPTH; - } - - let cur_depth = self.get_node_depth(head, h); - - let match_depth = self.get_node_depth(match_pos, h); - - if let (Some(cur_depth), Some(match_depth)) = (cur_depth, match_depth) { - // if we have a match, then we can calculate the depth - debug_assert!( - cur_depth >= match_depth, - "current match should be >= to previous c: {} m: {}", - cur_depth, - match_depth - ); - - (cur_depth - match_depth) as u32 - } else { - BAD_DEPTH - } } } pub trait HashChain { fn iterate<'a>(&'a self, input: &PreflateInput, offset: u32) -> impl Iterator + 'a; - fn update_hash( - &mut self, - length: u32, - input: &PreflateInput, - ); - - fn match_depth( - &self, - target_reference: &PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32; + fn update_hash(&mut self, input: &[u8], pos: u32, length: u32); fn checksum(&self, checksum: &mut DebugHash); } /// This hash chain algorithm periodically normalizes the hash table pub struct HashChainNormalize { - hash_table: Box>, + hash_table: Box, total_shift: i32, + hash: H, } impl HashChainNormalize { @@ -289,26 +133,32 @@ impl HashChainNormalize { // Important: total_shift starts at -8 since 0 indicates the end of the hash chain // so this means that all valid values will be >= 8, otherwise the very first hash // offset would be zero and so it would get missed - let mut c = HashChainNormalize { + HashChainNormalize { total_shift: -8, hash_table: HashTable::default_boxed(), - }; + hash: hash, + } + } - c.hash_table.hash = hash; + fn reshift(&mut self) { + const DELTA: usize = 0x7e00; - c + self.hash_table.reshift::(); + + self.total_shift += DELTA as i32; } } impl HashChain for HashChainNormalize { + #[inline] fn iterate<'a>(&'a self, input: &PreflateInput, offset: u32) -> impl Iterator + 'a { - let ref_pos = InternalPositionRel::from_absolute(input.pos() + offset, self.total_shift); + let ref_pos = InternalPosition::from_absolute(input.pos() + offset, self.total_shift); // if we have a match that needs to be inserted at the head first before // we start walking the chain let mut first_match = None; - let h1 = self.hash_table.hash.get_hash(input.cur_chars(0)); + let h1 = self.hash.get_hash(input.cur_chars(0)); let curr_hash; @@ -318,7 +168,7 @@ impl HashChain for HashChainNormalize { assert_eq!(offset, 1); // current hash is the next hash since we are starting at offset 1 - curr_hash = self.hash_table.hash.get_hash(input.cur_chars(1)); + curr_hash = self.hash.get_hash(input.cur_chars(1)); // we are a lazy match, then we haven't added the last byte to the hash yet // which is a problem if that hash should have been part of this hash chain @@ -338,43 +188,19 @@ impl HashChain for HashChainNormalize { if let Some(d) = first_match { first_match = None; Some(d) + } else if cur_pos.is_valid() { + let d = ref_pos.dist(cur_pos); + cur_pos = self.hash_table.prev[cur_pos.to_index()]; + Some(d) } else { - if cur_pos.is_valid() { - let d = ref_pos.dist(cur_pos); - cur_pos = self.hash_table.prev[cur_pos.to_index()]; - Some(d) - } else { - None - } + None } }) } - fn match_depth( - &self, - target_reference: &PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32 { - let cur_pos = input.pos(); - let cur_max_dist = std::cmp::min(cur_pos, window_size); - - if (target_reference.len() as usize) < H::num_hash_bytes() - || target_reference.dist() > cur_max_dist - { - //println!("dtl {:?} > {}", target_reference, cur_max_dist); - return BAD_DEPTH; - } - - let end_pos = - InternalPositionRel::from_absolute(cur_pos - target_reference.dist(), self.total_shift); - - self.hash_table.match_depth(end_pos, input) - } - #[allow(dead_code)] - fn checksum(&self, checksum: &mut DebugHash) { - checksum.update_slice(&self.hash_table.chain_depth); + fn checksum(&self, _checksum: &mut DebugHash) { + //checksum.update_slice(&self.hash_table.chain_depth); //checksum.update_slice(&self.hash_table.head); //checksum.update_slice(&self.hash_table.prev); //checksum.update(self.hash_shift); @@ -382,34 +208,25 @@ impl HashChain for HashChainNormalize { //checksum.update(self.total_shift); } - fn update_hash( - &mut self, - length: u32, - input: &PreflateInput, - ) { + #[inline] + fn update_hash(&mut self, input: &[u8], pos: u32, length: u32) { assert!(length <= MAX_UPDATE_HASH_BATCH); - if input.pos() as i32 - self.total_shift >= 0xfe08 { - const DELTA: usize = 0x7e00; - - self.hash_table.reshift::(); - - self.total_shift += DELTA as i32; + if pos as i32 - self.total_shift >= 0xfe08 { + self.reshift(); } - let pos = InternalPositionRel::from_absolute(input.pos(), self.total_shift); - let chars = input.cur_chars(0); + let pos = InternalPosition::from_absolute(pos, self.total_shift); - self.hash_table - .update_chain::(chars, pos, length); + self.hash_table.update_chain(self.hash, input, pos, length); } } /// implementation of the hash chain that uses the libdeflate rotating hash. /// This consists of two hash tables, one for length 3 and one for length 4. pub struct HashChainNormalizeLibflate4 { - hash_table: Box>, - hash_table_3: Box>, + hash_table: Box, + hash_table_3: Box, total_shift: i32, } @@ -426,9 +243,12 @@ impl HashChainNormalizeLibflate4 { } } +const LIBFLATE_HASH_3: LibdeflateHash3Secondary = LibdeflateHash3Secondary {}; +const LIBFLATE_HASH_4: LibdeflateHash4 = LibdeflateHash4 {}; + impl HashChain for HashChainNormalizeLibflate4 { fn iterate<'a>(&'a self, input: &PreflateInput, offset: u32) -> impl Iterator + 'a { - let ref_pos = InternalPositionRel::from_absolute(input.pos() + offset, self.total_shift); + let ref_pos = InternalPosition::from_absolute(input.pos() + offset, self.total_shift); // if we have a match that needs to be inserted at the head first before // we start walking the chain @@ -439,20 +259,20 @@ impl HashChain for HashChainNormalizeLibflate4 { if offset == 0 { // for libflate, we look once at the 3 length hash table for a match // and then walk the length 4 hash table - let curr_hash = self.hash_table_3.hash.get_hash(input.cur_chars(0)); + let curr_hash = LIBFLATE_HASH_3.get_hash(input.cur_chars(0)); let start_pos = self.hash_table_3.get_head(curr_hash); if start_pos.is_valid() { first_match = Some(ref_pos.dist(start_pos)); } - let curr_hash = self.hash_table.hash.get_hash(input.cur_chars(0)); + let curr_hash = LIBFLATE_HASH_4.get_hash(input.cur_chars(0)); cur_pos = self.hash_table.get_head(curr_hash); } else { assert_eq!(offset, 1); // current hash is the next hash since we are starting at offset 1 - let curr_hash = self.hash_table.hash.get_hash(input.cur_chars(1)); + let curr_hash = LIBFLATE_HASH_4.get_hash(input.cur_chars(1)); // we are a lazy match, then we haven't added the last byte to the hash yet // which is a problem if that hash should have been part of this hash chain @@ -461,7 +281,7 @@ impl HashChain for HashChainNormalizeLibflate4 { // // In order to fix this, we see if the hashes are the same, and then add // a distance 1 item to the iterator that we return. - let prev_hash = self.hash_table.hash.get_hash(input.cur_chars(0)); + let prev_hash = LIBFLATE_HASH_4.get_hash(input.cur_chars(0)); if prev_hash == curr_hash { first_match = Some(1); } @@ -473,331 +293,39 @@ impl HashChain for HashChainNormalizeLibflate4 { if let Some(d) = first_match { first_match = None; Some(d) - } else { - if cur_pos.is_valid() { - let d = ref_pos.dist(cur_pos); - cur_pos = self.hash_table.prev[cur_pos.to_index()]; - Some(d) - } else { - None - } - } - }) - } - - fn match_depth( - &self, - target_reference: &PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32 { - let cur_pos = input.pos(); - let cur_max_dist = std::cmp::min(cur_pos, window_size); - - if target_reference.dist() > cur_max_dist { - //println!("dtl {:?} > {}", target_reference, cur_max_dist); - return BAD_DEPTH; - } - - let end_pos = - InternalPositionRel::from_absolute(cur_pos - target_reference.dist(), self.total_shift); - - if target_reference.len() == 3 { - // libdeflate uses the 3 byte hash table only for a single match attempt - // only legal location for the 3 byte hash is at the beginning of the chain, otherwise - // we wouldn't find it using the libdeflate algorithm - if self.hash_table_3.match_depth(end_pos, input) == 0 { - return 0; - } else { - return BAD_DEPTH; - } - } else { - let mut d = self.hash_table.match_depth(end_pos, input); - if d == BAD_DEPTH { - return d; - } - - // if there was a valid 3 byte match, then the hash chain will be one larger - // than the 4 byte hash chain - if self.hash_table_3.head - [usize::from(self.hash_table_3.hash.get_hash(input.cur_chars(0)))] - .is_valid() - { - d += 1; - } - - return d; - } - } - - #[allow(dead_code)] - fn checksum(&self, checksum: &mut DebugHash) { - checksum.update_slice(&self.hash_table.chain_depth); - } - - fn update_hash( - &mut self, - length: u32, - input: &PreflateInput, - ) { - assert!(length <= MAX_UPDATE_HASH_BATCH); - - if input.pos() as i32 - self.total_shift >= 0xfe08 { - const DELTA: usize = 0x7e00; - - self.hash_table.reshift::(); - self.hash_table_3.reshift::(); - - self.total_shift += DELTA as i32; - } - - let pos = InternalPositionRel::from_absolute(input.pos(), self.total_shift); - let chars = input.cur_chars(0); - - self.hash_table - .update_chain::(chars, pos, length); - - self.hash_table_3 - .update_chain::(chars, pos, length); - } -} - -/* -/// This hash chain algorithm periodically normalizes the hash table -pub struct HashChainAbs { - - head : [u32; 32768], - - prev : [u32; 32768], - - running_hash : H, -} - -impl HashChain for HashChainAbs { - fn new(_hash_shift: u32, _hash_mask: u16, input: &PreflateInput) -> Self { - - let mut c = HashChainAbs { - head: [0; 32768], - prev: [0; 32768], - running_hash: H::default(), - }; - - // initialize running hash so that it has the first bytes in it to start working - c.running_hash = H::init(input, 0); - - c - } - - fn iterate<'a>(&'a self, input: &PreflateInput, offset: u32) -> impl Iterator + 'a { - // if we have a match that needs to be inserted at the head first before - // we start walking the chain - let mut first_match = None; - - let curr_hash; - - if offset == 0 { - curr_hash = self.hash_table.calculate_hash(input); - } else { - assert_eq!(offset, 1); - - // current hash is the next hash since we are starting at offset 1 - curr_hash = self.hash_table.calculate_hash_next(input); - - // we are a lazy match, then we haven't added the last byte to the hash yet - // which is a problem if that hash should have been part of this hash chain - // (ie the same hash chain) and we have a limited number of enumerations - // throught the hash chain. - // - // In order to fix this, we see if the hashes are the same, and then add - // a distance 1 item to the iterator that we return. - let prev_hash = self.hash_table.calculate_hash(input); - if self.hash_table.hash_equal(prev_hash, curr_hash) { - first_match = Some(1); - } - } - - let mut cur_pos = self.hash_table.get_head(curr_hash); - - std::iter::from_fn(move || { - if let Some(d) = first_match { - first_match = None; + } else if cur_pos.is_valid() { + let d = ref_pos.dist(cur_pos); + cur_pos = self.hash_table.prev[cur_pos.to_index()]; Some(d) } else { - if cur_pos.is_valid() { - let d = ref_pos.dist(cur_pos); - cur_pos = self.hash_table.prev[cur_pos.to_index()]; - Some(d) - } else { - None - } + None } }) } - fn match_depth( - &self, - target_reference: &PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32 { - let cur_pos = input.pos(); - let cur_max_dist = std::cmp::min(cur_pos, window_size); - - if target_reference.dist() > cur_max_dist { - //println!("dtl {:?} > {}", target_reference, cur_max_dist); - return BAD_DEPTH; - } - - let end_pos = - InternalPosition::from_absolute(cur_pos - target_reference.dist(), self.total_shift); - - self.hash_table.match_depth(end_pos, input) - } - #[allow(dead_code)] - fn checksum(&self, checksum: &mut DebugHash) { - checksum.update_slice(&self.hash_table.chain_depth); - //checksum.update_slice(&self.hash_table.head); - //checksum.update_slice(&self.hash_table.prev); - //checksum.update(self.hash_shift); - //checksum.update(self.running_hash.hash(self.hash_mask)); - //checksum.update(self.total_shift); + fn checksum(&self, _checksum: &mut DebugHash) { + //checksum.update_slice(&self.hash_table.chain_depth); } - fn update_hash( - &mut self, - length: u32, - input: &PreflateInput, - ) { + fn update_hash(&mut self, input: &[u8], pos: u32, length: u32) { assert!(length <= MAX_UPDATE_HASH_BATCH); - if input.pos() as i32 - self.total_shift >= 0xfe08 { + if pos as i32 - self.total_shift >= 0xfe08 { const DELTA: usize = 0x7e00; - self.hash_table.reshift::(); + self.hash_table.reshift::(); + self.hash_table_3.reshift::(); self.total_shift += DELTA as i32; } - let pos = InternalPosition::from_absolute(input.pos(), self.total_shift); - let chars = input.cur_chars(0); + let pos = InternalPosition::from_absolute(pos, self.total_shift); self.hash_table - .update_chain::(chars, pos, length); - } -} -*/ - -/// This hash chain algorithm periodically normalizes the hash table -pub struct HashChainAbs { - hash_table: Box>, -} - -impl HashChainAbs { - pub fn new(hash: H) -> Self { - // Important: total_shift starts at -8 since 0 indicates the end of the hash chain - // so this means that all valid values will be >= 8, otherwise the very first hash - // offset would be zero and so it would get missed - let mut c = HashChainAbs { - hash_table: HashTable::default_boxed(), - }; - - c.hash_table.hash = hash; - - c - } -} + .update_chain(LIBFLATE_HASH_4, input, pos, length); -impl HashChain for HashChainAbs { - fn iterate<'a>(&'a self, input: &PreflateInput, offset: u32) -> impl Iterator + 'a { - let ref_pos = InternalPositionAbs::new(input.pos() + offset); - - // if we have a match that needs to be inserted at the head first before - // we start walking the chain - let mut first_match = None; - - let h1 = self.hash_table.hash.get_hash(input.cur_chars(0)); - - let curr_hash; - - if offset == 0 { - curr_hash = h1; - } else { - assert_eq!(offset, 1); - - // current hash is the next hash since we are starting at offset 1 - curr_hash = self.hash_table.hash.get_hash(input.cur_chars(1)); - - // we are a lazy match, then we haven't added the last byte to the hash yet - // which is a problem if that hash should have been part of this hash chain - // (ie the same hash chain) and we have a limited number of enumerations - // throught the hash chain. - // - // In order to fix this, we see if the hashes are the same, and then add - // a distance 1 item to the iterator that we return. - if h1 == curr_hash { - first_match = Some(1); - } - } - - let mut cur_pos = self.hash_table.get_head(curr_hash); - - std::iter::from_fn(move || { - if let Some(d) = first_match { - first_match = None; - Some(d) - } else { - if cur_pos.is_valid() { - let d = ref_pos.dist(cur_pos); - cur_pos = self.hash_table.prev[cur_pos.to_index()]; - Some(d) - } else { - None - } - } - }) - } - - fn match_depth( - &self, - target_reference: &PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32 { - let cur_pos = input.pos(); - let cur_max_dist = std::cmp::min(cur_pos, window_size); - - if target_reference.dist() > cur_max_dist { - //println!("dtl {:?} > {}", target_reference, cur_max_dist); - return BAD_DEPTH; - } - - let end_pos = InternalPositionAbs::new(cur_pos - target_reference.dist()); - - self.hash_table.match_depth(end_pos, input) - } - - #[allow(dead_code)] - fn checksum(&self, checksum: &mut DebugHash) { - checksum.update_slice(&self.hash_table.chain_depth); - //checksum.update_slice(&self.hash_table.head); - //checksum.update_slice(&self.hash_table.prev); - //checksum.update(self.hash_shift); - //checksum.update(self.running_hash.hash(self.hash_mask)); - //checksum.update(self.total_shift); - } - - fn update_hash( - &mut self, - length: u32, - input: &PreflateInput, - ) { - assert!(length <= MAX_UPDATE_HASH_BATCH); - - let pos = InternalPositionAbs::new(input.pos()); - let chars = input.cur_chars(0); - - self.hash_table - .update_chain::(chars, pos, length); + self.hash_table_3 + .update_chain(LIBFLATE_HASH_3, input, pos, length); } } diff --git a/src/hash_chain_holder.rs b/src/hash_chain_holder.rs index 85d547a..18bec33 100644 --- a/src/hash_chain_holder.rs +++ b/src/hash_chain_holder.rs @@ -6,13 +6,10 @@ use crate::bit_helper::DebugHash; use crate::hash_algorithm::{ - Crc32cHash, HashAlgorithm, HashImplementation, LibdeflateRotatingHash4, MiniZHash, + Crc32cHash, HashAlgorithm, HashImplementation, LibdeflateHash4, LibdeflateHash4Fast, MiniZHash, RandomVectorHash, ZlibNGHash, ZlibRotatingHash, }; -use crate::hash_chain::{ - DictionaryAddPolicy, HashChain, MAX_UPDATE_HASH_BATCH, UPDATE_MODE_ALL, UPDATE_MODE_FIRST, - UPDATE_MODE_FIRST_AND_LAST, -}; +use crate::hash_chain::{HashChain, MAX_UPDATE_HASH_BATCH}; use crate::preflate_constants::{MAX_MATCH, MIN_LOOKAHEAD, MIN_MATCH}; use crate::preflate_input::PreflateInput; use crate::preflate_parameter_estimator::PreflateStrategy; @@ -32,37 +29,32 @@ pub enum MatchResult { /// Factory function to create a new HashChainHolder based on the parameters and returns /// a boxed trait object. The reason for this is that this lets the compiler optimize the pub fn new_hash_chain_holder(params: &TokenPredictorParameters) -> Box { - let predictor_state: Box; match params.hash_algorithm { + HashAlgorithm::None => Box::<()>::default(), HashAlgorithm::Zlib { hash_mask, hash_shift, - } => { - predictor_state = Box::new(HashChainHolderImpl::new( - params, - ZlibRotatingHash { - hash_mask, - hash_shift, - }, - )) - } - HashAlgorithm::MiniZFast => { - predictor_state = Box::new(HashChainHolderImpl::new(params, MiniZHash {})) - } + } => Box::new(HashChainHolderImpl::new( + params, + ZlibRotatingHash { + hash_mask, + hash_shift, + }, + )), + HashAlgorithm::MiniZFast => Box::new(HashChainHolderImpl::new(params, MiniZHash {})), HashAlgorithm::Libdeflate4 => { - predictor_state = Box::new(HashChainHolderImpl::new(params, LibdeflateRotatingHash4 {})) + Box::new(HashChainHolderImpl::new(params, LibdeflateHash4 {})) } - HashAlgorithm::ZlibNG => { - predictor_state = Box::new(HashChainHolderImpl::new(params, ZlibNGHash {})) + HashAlgorithm::Libdeflate4Fast => { + Box::new(HashChainHolderImpl::new(params, LibdeflateHash4Fast {})) } + + HashAlgorithm::ZlibNG => Box::new(HashChainHolderImpl::new(params, ZlibNGHash {})), HashAlgorithm::RandomVector => { - predictor_state = Box::new(HashChainHolderImpl::new(params, RandomVectorHash {})) - } - HashAlgorithm::Crc32cHash => { - predictor_state = Box::new(HashChainHolderImpl::new(params, Crc32cHash {})) + Box::new(HashChainHolderImpl::new(params, RandomVectorHash {})) } + HashAlgorithm::Crc32cHash => Box::new(HashChainHolderImpl::new(params, Crc32cHash {})), } - predictor_state } /// trait that is not dependent on the HashImplementation so it can @@ -73,24 +65,19 @@ pub trait HashChainHolder { /// If this is a literal, then the update policy is to add all the bytes to the dictionary. fn update_hash(&mut self, length: u32, input: &PreflateInput); - /// updates the hash dictionary for a given length of matches, and also updates the depth - /// map of the hash chain. + /// searches the hash chain for a given match, returns the longest result found if any /// - /// If this is a literal, then the update policy is to add all the bytes to the dictionary. - fn update_hash_with_depth(&mut self, length: u32, input: &PreflateInput); + /// prev_len is the length of the previous match. We won't match anything shorter than that. + /// max_depth is the maximum number of hops we will take in the hash chain + fn match_token_0(&self, prev_len: u32, max_depth: u32, input: &PreflateInput) -> MatchResult; - /// searches the hash chain for a given match, returns the longest result found if any + /// searches the hash chain for a given match, returns the longest result found if any. + /// + /// This is the lazy matching, so it starts at offset 1 /// /// prev_len is the length of the previous match. We won't match anything shorter than that. - /// offset is the offset from the current position in the input (can be 0 for current or 1 for lazy matches) /// max_depth is the maximum number of hops we will take in the hash chain - fn match_token( - &self, - prev_len: u32, - offset: u32, - max_depth: u32, - input: &PreflateInput, - ) -> MatchResult; + fn match_token_1(&self, prev_len: u32, max_depth: u32, input: &PreflateInput) -> MatchResult; /// Tries to find the match by continuing on the hash chain, returns how many hops we went /// or none if it wasn't found @@ -104,145 +91,78 @@ pub trait HashChainHolder { /// get the new distance based on the number of hops fn hop_match(&self, len: u32, hops: u32, input: &PreflateInput) -> anyhow::Result; - /// Returns the depth of the match, which refers to the number of hops in the hashtable - fn match_depth( - &self, - token: PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32; - /// debugging function to verify that the hash chain is correct fn verify_hash(&self, _dist: Option); fn checksum(&self, checksum: &mut DebugHash); } -/// implemenation of HashChainHolder depends type of hash implemenatation -struct HashChainHolderImpl { - hash: H::HashChainType, - params: TokenPredictorParameters, - window_bytes: u32, -} - -impl HashChainHolder for HashChainHolderImpl { - fn update_hash(&mut self, length: u32, input: &PreflateInput) { - self.update_hash_with_policy::(length, input, self.params.add_policy); - } +/// empty implementation of HashChainHolder if there is no dictionary +/// being used (for example the file is stored or huffman only encoded) +impl HashChainHolder for () { + fn update_hash(&mut self, _length: u32, _input: &PreflateInput) {} - fn update_hash_with_depth(&mut self, length: u32, input: &PreflateInput) { - self.update_hash_with_policy::(length, input, self.params.add_policy); - } - - fn match_depth( + fn match_token_0( &self, - token: PreflateTokenReference, - window_size: u32, - input: &PreflateInput, - ) -> u32 { - self.hash.match_depth(&token, window_size, input) + _prev_len: u32, + _max_depth: u32, + _input: &PreflateInput, + ) -> MatchResult { + MatchResult::NoMoreMatchesFound } - fn match_token( + fn match_token_1( &self, - prev_len: u32, - offset: u32, - max_depth: u32, - input: &PreflateInput, + _prev_len: u32, + _max_depth: u32, + _input: &PreflateInput, ) -> MatchResult { - let start_pos = input.pos() + offset; - let max_len = std::cmp::min(input.size() - start_pos, MAX_MATCH); - if max_len - < std::cmp::max( - prev_len + 1, - std::cmp::max(H::num_hash_bytes() as u32, MIN_MATCH), - ) - { - return MatchResult::NoInput; - } - - let max_dist_to_start = start_pos - - if self.params.matches_to_start_detected { - 0 - } else { - 1 - }; - - let cur_max_dist_hop0; - let cur_max_dist_hop1_plus; - if self.params.very_far_matches_detected { - cur_max_dist_hop0 = cmp::min(max_dist_to_start, self.window_bytes); - cur_max_dist_hop1_plus = cur_max_dist_hop0; - } else { - match self.params.strategy { - PreflateStrategy::HuffOnly | PreflateStrategy::Store => { - return MatchResult::NoMoreMatchesFound; - } - PreflateStrategy::RleOnly => { - cur_max_dist_hop0 = 1; - cur_max_dist_hop1_plus = 1; - } - _ => { - let max_dist: u32 = self.window_bytes - MIN_LOOKAHEAD + 1; - cur_max_dist_hop0 = cmp::min(max_dist_to_start, max_dist); - cur_max_dist_hop1_plus = cmp::min(max_dist_to_start, max_dist - 1); - } - } - } - - let nice_length = std::cmp::min(self.params.nice_length, max_len); - let max_dist_3_matches = u32::from(self.params.max_dist_3_matches); - let mut max_chain = max_depth; - - let input_chars = input.cur_chars(offset as i32); - let mut best_len = prev_len; - let mut best_match: Option = None; - let mut first = true; + MatchResult::NoMoreMatchesFound + } - for dist in self.hash.iterate(input, offset) { - // first entry gets a special treatment to make sure it doesn't exceed - // the limits we calculated for the first hop - if first { - first = false; - if dist > cur_max_dist_hop0 { - return MatchResult::DistanceLargerThanHop0(dist, cur_max_dist_hop0); - } - } else { - if dist > cur_max_dist_hop1_plus { - break; - } - } + fn calculate_hops( + &self, + _target_reference: &PreflateTokenReference, + _input: &PreflateInput, + ) -> anyhow::Result { + unimplemented!() + } - let match_start = input.cur_chars(offset as i32 - dist as i32); + fn hop_match(&self, _len: u32, _hops: u32, _input: &PreflateInput) -> anyhow::Result { + unimplemented!() + } - let match_length = Self::prefix_compare(match_start, input_chars, best_len, max_len); - if match_length > best_len { - let r = PreflateTokenReference::new(match_length, dist, false); + fn verify_hash(&self, _dist: Option) {} - if match_length >= nice_length && (match_length > 3 || dist <= max_dist_3_matches) { - return MatchResult::Success(r); - } + fn checksum(&self, _checksum: &mut DebugHash) {} +} - best_len = match_length; - best_match = Some(r); - } +/// implemenation of HashChainHolder depends type of hash implemenatation +struct HashChainHolderImpl { + hash: H::HashChainType, + params: TokenPredictorParameters, + window_bytes: u32, +} - max_chain -= 1; +impl HashChainHolder for HashChainHolderImpl { + fn update_hash(&mut self, length: u32, input: &PreflateInput) { + debug_assert!(length <= MAX_UPDATE_HASH_BATCH); - if max_chain == 0 { - if let Some(r) = best_match { - return MatchResult::Success(r); - } else { - return MatchResult::MaxChainExceeded(max_depth); - } - } - } + self.params.add_policy.update_hash( + input.cur_chars(0), + input.pos(), + length, + |input, pos, length| { + self.hash.update_hash(input, pos, length); + }, + ); + } + fn match_token_0(&self, prev_len: u32, max_depth: u32, input: &PreflateInput) -> MatchResult { + self.match_token_offset::<0>(prev_len, max_depth, input) + } - if let Some(r) = best_match { - MatchResult::Success(r) - } else { - MatchResult::NoMoreMatchesFound - } + fn match_token_1(&self, prev_len: u32, max_depth: u32, input: &PreflateInput) -> MatchResult { + self.match_token_offset::<1>(prev_len, max_depth, input) } /// Tries to find the match by continuing on the hash chain, returns how many hops we went @@ -272,7 +192,7 @@ impl HashChainHolder for HashChainHolderImpl { let match_pos = input.cur_chars(-(dist as i32)); let match_length = - Self::prefix_compare(match_pos, input.cur_chars(0), best_len - 1, best_len); + prefix_compare(match_pos, input.cur_chars(0), best_len - 1, best_len); if match_length >= best_len { hops += 1; @@ -312,7 +232,7 @@ impl HashChainHolder for HashChainHolderImpl { break; } - let match_length = Self::prefix_compare( + let match_length = prefix_compare( input.cur_chars(-(dist as i32)), input.cur_chars(0), len - 1, @@ -351,64 +271,129 @@ impl HashChainHolderImpl { } } - fn update_hash_with_policy( - &mut self, - length: u32, + fn match_token_offset( + &self, + prev_len: u32, + max_depth: u32, input: &PreflateInput, - add_policy: DictionaryAddPolicy, - ) { - debug_assert!(length <= MAX_UPDATE_HASH_BATCH); + ) -> MatchResult { + let start_pos = input.pos() + OFFSET; + let max_len = std::cmp::min(input.size() - start_pos, MAX_MATCH); + if max_len + < std::cmp::max( + prev_len + 1, + std::cmp::max(H::num_hash_bytes() as u32, MIN_MATCH), + ) + { + return MatchResult::NoInput; + } - match add_policy { - DictionaryAddPolicy::AddAll => { - self.hash - .update_hash::(length, input); - } - DictionaryAddPolicy::AddFirst(limit) => { - if length > limit.into() { - self.hash - .update_hash::(length, input); - } else { - self.hash - .update_hash::(length, input); + let max_dist_to_start = start_pos + - if self.params.matches_to_start_detected { + 0 + } else { + 1 + }; + + let cur_max_dist_hop0; + let cur_max_dist_hop1_plus; + if self.params.very_far_matches_detected { + cur_max_dist_hop0 = cmp::min(max_dist_to_start, self.window_bytes); + cur_max_dist_hop1_plus = cur_max_dist_hop0; + } else { + match self.params.strategy { + PreflateStrategy::HuffOnly | PreflateStrategy::Store => { + return MatchResult::NoMoreMatchesFound; } - } - DictionaryAddPolicy::AddFirstAndLast(limit) => { - if length > limit.into() { - self.hash - .update_hash::(length, input); - } else { - self.hash - .update_hash::(length, input); + PreflateStrategy::RleOnly => { + cur_max_dist_hop0 = 1; + cur_max_dist_hop1_plus = 1; } - } - DictionaryAddPolicy::AddFirstExcept4kBoundary => { - if length > 1 || (input.pos() % 4096) < 4093 { - self.hash - .update_hash::(length, input); + _ => { + let max_dist: u32 = self.window_bytes - MIN_LOOKAHEAD + 1; + cur_max_dist_hop0 = cmp::min(max_dist_to_start, max_dist); + cur_max_dist_hop1_plus = cmp::min(max_dist_to_start, max_dist - 1); } } } - } - fn prefix_compare(s1: &[u8], s2: &[u8], best_len: u32, max_len: u32) -> u32 { - assert!(max_len >= 3 && s1.len() >= max_len as usize && s2.len() >= max_len as usize); + let nice_length = std::cmp::min(self.params.nice_length, max_len); + let max_dist_3_matches = u32::from(self.params.max_dist_3_matches); + let mut max_chain = max_depth; - if s1[best_len as usize] != s2[best_len as usize] { - return 0; - } - if s1[0] != s2[0] || s1[1] != s2[1] || s1[2] != s2[2] { - return 0; - } + let input_chars = input.cur_chars(OFFSET as i32); + let mut best_len = prev_len; + let mut best_match: Option = None; + let mut first = true; - let mut match_len = 3; // Initialize with the length of the fixed prefix - for i in 3..max_len { - if s1[i as usize] != s2[i as usize] { + for dist in self.hash.iterate(input, OFFSET) { + // first entry gets a special treatment to make sure it doesn't exceed + // the limits we calculated for the first hop + if first { + first = false; + if dist > cur_max_dist_hop0 { + return MatchResult::DistanceLargerThanHop0(dist, cur_max_dist_hop0); + } + } else if dist > cur_max_dist_hop1_plus { break; } - match_len = i + 1; + + let match_start = input.cur_chars(OFFSET as i32 - dist as i32); + + let match_length = prefix_compare(match_start, input_chars, best_len, max_len); + if match_length > best_len { + let r = PreflateTokenReference::new(match_length, dist, false); + + if match_length >= nice_length && (match_length > 3 || dist <= max_dist_3_matches) { + return MatchResult::Success(r); + } + + best_len = match_length; + best_match = Some(r); + } + + max_chain -= 1; + + if max_chain == 0 { + if let Some(r) = best_match { + return MatchResult::Success(r); + } else { + return MatchResult::MaxChainExceeded(max_depth); + } + } + } + + if let Some(r) = best_match { + MatchResult::Success(r) + } else { + MatchResult::NoMoreMatchesFound } + } +} - match_len +#[inline] +fn prefix_compare(s1: &[u8], s2: &[u8], best_len: u32, max_len: u32) -> u32 { + assert!( + max_len >= 3 + && s1.len() >= max_len as usize + && s2.len() >= max_len as usize + && best_len < max_len + ); + + if s1[best_len as usize] != s2[best_len as usize] { + return 0; } + if s1[0] != s2[0] || s1[1] != s2[1] || s1[2] != s2[2] { + return 0; + } + + let mut match_len = 3; // Initialize with the length of the fixed prefix + for i in 3..max_len { + if s1[i as usize] != s2[i as usize] { + break; + } + match_len = i + 1; + } + + match_len } diff --git a/src/huffman_helper.rs b/src/huffman_helper.rs index ce039ac..d50b56f 100644 --- a/src/huffman_helper.rs +++ b/src/huffman_helper.rs @@ -152,10 +152,7 @@ pub fn calculate_huffman_code_tree(code_lengths: &[u8]) -> anyhow::Result( - bit_reader: &mut R, - huffman_tree: &Vec, -) -> anyhow::Result { +pub fn decode_symbol(bit_reader: &mut R, huffman_tree: &[i32]) -> anyhow::Result { let mut i_node_cur: i32 = huffman_tree.len() as i32 - 2; // Start at the root of the Huffman tree loop { diff --git a/src/idat_parse.rs b/src/idat_parse.rs index 01131a6..d460dbe 100644 --- a/src/idat_parse.rs +++ b/src/idat_parse.rs @@ -118,7 +118,7 @@ pub fn parse_idat( deflate_stream.extend_from_slice(chunk); let mut crc = crc32fast::Hasher::new(); - crc.update(&chunk_type); + crc.update(chunk_type); crc.update(chunk); if crc.finalize() diff --git a/src/lib.rs b/src/lib.rs index 8ace1f1..e4f70ef 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,6 +4,7 @@ * This software incorporates material from third parties. See NOTICE.txt for details. *--------------------------------------------------------------------------------------------*/ +mod add_policy_estimator; mod bit_helper; mod bit_reader; mod bit_writer; @@ -11,6 +12,7 @@ mod cabac_codec; mod complevel_estimator; mod deflate_reader; mod deflate_writer; +mod depth_estimator; mod hash_algorithm; mod hash_chain; mod hash_chain_holder; @@ -19,7 +21,7 @@ mod huffman_encoding; mod huffman_helper; mod idat_parse; mod preflate_constants; -mod preflate_container; +pub mod preflate_container; pub mod preflate_error; mod preflate_input; mod preflate_parameter_estimator; @@ -28,202 +30,14 @@ mod preflate_stream_info; mod preflate_token; mod process; mod scan_deflate; -mod skip_length_estimator; mod statistical_codec; mod token_predictor; mod tree_predictor; -use anyhow::{self}; -use cabac::vp8::{VP8Reader, VP8Writer}; use preflate_container::{expand_zlib_chunks, recreated_zlib_chunks}; use preflate_error::PreflateError; -use preflate_parameter_estimator::{estimate_preflate_parameters, PreflateParameters}; -use process::parse_deflate; use std::{io::Cursor, panic::catch_unwind}; -use crate::{ - cabac_codec::{PredictionDecoderCabac, PredictionEncoderCabac}, - process::{decode_mispredictions, encode_mispredictions}, - statistical_codec::PredictionEncoder, -}; - -/// result of decompress_deflate_stream -pub struct DecompressResult { - /// the plaintext that was decompressed from the stream - pub plain_text: Vec, - - /// the extra data that is needed to reconstruct the deflate stream exactly as it was written - pub prediction_corrections: Vec, - - /// the number of bytes that were processed from the compressed stream (this will be exactly the - /// data that will be recreated using the cabac_encoded data) - pub compressed_size: usize, - - /// the parameters that were used to compress the stream (informational) - pub parameters: PreflateParameters, -} - -impl core::fmt::Debug for DecompressResult { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "DecompressResult {{ plain_text: {}, prediction_corrections: {}, compressed_size: {} }}", self.plain_text.len(), self.prediction_corrections.len(), self.compressed_size) - } -} - -/// decompresses a deflate stream and returns the plaintext and cabac_encoded data that can be used to reconstruct it -pub fn decompress_deflate_stream( - compressed_data: &[u8], - verify: bool, -) -> Result { - let mut cabac_encoded = Vec::new(); - - let mut cabac_encoder = - PredictionEncoderCabac::new(VP8Writer::new(&mut cabac_encoded).unwrap()); - - let contents = parse_deflate(compressed_data, 0)?; - - //process::write_file("c:\\temp\\lastop.deflate", compressed_data); - //process::write_file("c:\\temp\\lastop.bin", contents.plain_text.as_slice()); - - let params = estimate_preflate_parameters(&contents.plain_text, &contents.blocks) - .map_err(|e| PreflateError::AnalyzeFailed(e))?; - - //println!("params: {:?}", params); - - params.write(&mut cabac_encoder); - encode_mispredictions(&contents, ¶ms, &mut cabac_encoder)?; - - cabac_encoder.finish(); - - if verify { - let mut cabac_decoder = - PredictionDecoderCabac::new(VP8Reader::new(Cursor::new(&cabac_encoded)).unwrap()); - - let reread_params = PreflateParameters::read(&mut cabac_decoder) - .map_err(|e| PreflateError::InvalidPredictionData(e))?; - assert_eq!(params, reread_params); - - let (recompressed, _recreated_blocks) = - decode_mispredictions(&reread_params, &contents.plain_text, &mut cabac_decoder)?; - - if recompressed[..] != compressed_data[..contents.compressed_size] { - return Err(PreflateError::Mismatch(anyhow::anyhow!( - "recompressed data does not match original" - ))); - } - } - - Ok(DecompressResult { - plain_text: contents.plain_text, - prediction_corrections: cabac_encoded, - compressed_size: contents.compressed_size, - parameters: params, - }) -} - -/// recompresses a deflate stream using the cabac_encoded data that was returned from decompress_deflate_stream -pub fn recompress_deflate_stream( - plain_text: &[u8], - prediction_corrections: &[u8], -) -> Result, PreflateError> { - let mut cabac_decoder = - PredictionDecoderCabac::new(VP8Reader::new(Cursor::new(&prediction_corrections)).unwrap()); - - let params = PreflateParameters::read(&mut cabac_decoder) - .map_err(|e| PreflateError::InvalidPredictionData(e))?; - let (recompressed, _recreated_blocks) = - decode_mispredictions(¶ms, plain_text, &mut cabac_decoder)?; - Ok(recompressed) -} - -/// decompresses a deflate stream and returns the plaintext and cabac_encoded data that can be used to reconstruct it -/// This version uses DebugWriter and DebugReader, which are slower but can be used to debug the cabac encoding errors. -#[cfg(test)] -pub fn decompress_deflate_stream_assert( - compressed_data: &[u8], - verify: bool, -) -> Result { - use cabac::debug::{DebugReader, DebugWriter}; - - let mut cabac_encoded = Vec::new(); - - let mut cabac_encoder = - PredictionEncoderCabac::new(DebugWriter::new(&mut cabac_encoded).unwrap()); - - let contents = parse_deflate(compressed_data, 0)?; - - let params = estimate_preflate_parameters(&contents.plain_text, &contents.blocks) - .map_err(|e| PreflateError::AnalyzeFailed(e))?; - - params.write(&mut cabac_encoder); - encode_mispredictions(&contents, ¶ms, &mut cabac_encoder)?; - - assert_eq!(contents.compressed_size, compressed_data.len()); - cabac_encoder.finish(); - - if verify { - let mut cabac_decoder = - PredictionDecoderCabac::new(DebugReader::new(Cursor::new(&cabac_encoded)).unwrap()); - - let params = PreflateParameters::read(&mut cabac_decoder) - .map_err(|e| PreflateError::InvalidPredictionData(e))?; - let (recompressed, _recreated_blocks) = - decode_mispredictions(¶ms, &contents.plain_text, &mut cabac_decoder)?; - - if recompressed[..] != compressed_data[..] { - return Err(PreflateError::Mismatch(anyhow::anyhow!( - "recompressed data does not match original" - ))); - } - } - - Ok(DecompressResult { - plain_text: contents.plain_text, - prediction_corrections: cabac_encoded, - compressed_size: contents.compressed_size, - parameters: params, - }) -} - -/// recompresses a deflate stream using the cabac_encoded data that was returned from decompress_deflate_stream -/// This version uses DebugWriter and DebugReader, which are slower and don't compress but can be used to debug the cabac encoding errors. -#[cfg(test)] -pub fn recompress_deflate_stream_assert( - plain_text: &[u8], - prediction_corrections: &[u8], -) -> Result, PreflateError> { - use cabac::debug::DebugReader; - - let mut cabac_decoder = PredictionDecoderCabac::new( - DebugReader::new(Cursor::new(&prediction_corrections)).unwrap(), - ); - - let params = PreflateParameters::read(&mut cabac_decoder) - .map_err(|e| PreflateError::InvalidPredictionData(e))?; - - let (recompressed, _recreated_blocks) = - decode_mispredictions(¶ms, plain_text, &mut cabac_decoder)?; - Ok(recompressed) -} - -/// expands the Zlib compressed streams in the data and then recompresses the result -/// with Zstd with the maximum level. -pub fn compress_zstd(zlib_compressed_data: &[u8]) -> Result, PreflateError> { - let plain_text = expand_zlib_chunks(&zlib_compressed_data) - .map_err(|_| PreflateError::InvalidCompressedWrapper)?; - zstd::bulk::compress(&plain_text, 9).map_err(|e| PreflateError::ZstdError(e)) -} - -/// decompresses the Zstd compressed data and then recompresses the result back -/// to the original Zlib compressed streams. -pub fn decompress_zstd(compressed_data: &[u8], capacity: usize) -> Result, PreflateError> { - let compressed_data = zstd::bulk::decompress(compressed_data, capacity) - .map_err(|e| PreflateError::ZstdError(e))?; - - let mut result = Vec::new(); - recreated_zlib_chunks(&mut Cursor::new(compressed_data), &mut result)?; - Ok(result) -} - /// C ABI interface for compressing Zip file, exposed from DLL. #[no_mangle] pub unsafe extern "C" fn WrapperCompressZip( @@ -269,8 +83,8 @@ pub unsafe extern "C" fn WrapperDecompressZip( let input = std::slice::from_raw_parts(input_buffer, input_buffer_size as usize); let output = std::slice::from_raw_parts_mut(output_buffer, output_buffer_size as usize); - let compressed_data = zstd::bulk::decompress(input, 1024 * 1024 * 128) - .map_err(|e| PreflateError::ZstdError(e))?; + let compressed_data = + zstd::bulk::decompress(input, 1024 * 1024 * 128).map_err(PreflateError::ZstdError)?; let mut source = Cursor::new(&compressed_data); let mut destination = Cursor::new(output); @@ -333,76 +147,3 @@ fn extern_interface() { assert_eq!(input.len() as u64, original_size); assert_eq!(input[..], original[..(original_size as usize)]); } - -#[test] -fn verify_zip_compress() { - use crate::process::read_file; - let v = read_file("samplezip.zip"); - - let expanded = expand_zlib_chunks(&v).unwrap(); - - let mut recompressed = Vec::new(); - recreated_zlib_chunks(&mut Cursor::new(expanded), &mut recompressed).unwrap(); - - assert!(v == recompressed); -} - -#[test] -fn verify_roundtrip_zlib() { - for i in 0..9 { - verify_file(&format!("compressed_zlib_level{}.deflate", i)); - } -} - -#[test] -fn verify_roundtrip_flate2() { - for i in 0..9 { - verify_file(&format!("compressed_flate2_level{}.deflate", i)); - } -} - -#[test] -fn verify_roundtrip_libdeflate() { - for i in 0..9 { - verify_file(&format!("compressed_libdeflate_level{}.deflate", i)); - } -} - -#[cfg(test)] -fn verify_file(filename: &str) { - use crate::process::read_file; - let v = read_file(filename); - - let r = decompress_deflate_stream(&v, true).unwrap(); - let recompressed = recompress_deflate_stream(&r.plain_text, &r.prediction_corrections).unwrap(); - assert!(v == recompressed); -} - -#[test] -fn verify_zip_compress_zstd() { - use crate::process::read_file; - let v = read_file("samplezip.zip"); - - let compressed = compress_zstd(&v).unwrap(); - - let recreated = decompress_zstd(&compressed, 256 * 1024 * 1024).unwrap(); - - assert!(v == recreated); - println!( - "original zip = {} bytes, recompressed zip = {} bytes", - v.len(), - compressed.len() - ); -} - -#[test] -fn verify_roundtrip_assert() { - use crate::process::read_file; - - let v = read_file("compressed_zlib_level1.deflate"); - - let r = decompress_deflate_stream_assert(&v, true).unwrap(); - let recompressed = - recompress_deflate_stream_assert(&r.plain_text, &r.prediction_corrections).unwrap(); - assert!(v == recompressed); -} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..f42af21 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,93 @@ +use std::{ + env, fs, + path::{Path, PathBuf}, +}; + +use preflate_container::{compress_zstd, decompress_zstd}; + +mod add_policy_estimator; +mod bit_helper; +mod bit_reader; +mod bit_writer; +mod cabac_codec; +mod complevel_estimator; +mod deflate_reader; +mod deflate_writer; +mod depth_estimator; +mod hash_algorithm; +mod hash_chain; +mod hash_chain_holder; +mod huffman_calc; +mod huffman_encoding; +mod huffman_helper; +mod idat_parse; +mod preflate_constants; +mod preflate_container; +pub mod preflate_error; +mod preflate_input; +mod preflate_parameter_estimator; +mod preflate_parse_config; +mod preflate_stream_info; +mod preflate_token; +mod process; +mod scan_deflate; +mod statistical_codec; +mod token_predictor; +mod tree_predictor; + +fn enumerate_directory_recursively(path: &Path) -> Result, std::io::Error> { + let mut results = Vec::new(); + + // Ensure the path exists and is a directory + if path.is_dir() { + let entries = fs::read_dir(path)?; + + for entry in entries { + let entry = entry?; + let path = entry.path(); + + if path.is_dir() { + // If it's a directory, recursively enumerate its contents + if let Ok(sub_dir_results) = enumerate_directory_recursively(&path) { + results.extend(sub_dir_results); + } + } else { + // If it's a file, just add its path to the results + results.push(path); + } + } + } else { + // If it's a file, just add its path to the results + results.push(path.to_path_buf()); + } + + Ok(results) +} + +fn main() { + let current_dir = env::args().nth(1).unwrap_or_else(|| String::from(".")); + + let mut totalseen = 0u64; + let mut totalzstd = 0u64; + + // Use WalkDir to recursively search for files in the directory + for entry in enumerate_directory_recursively(Path::new(¤t_dir)).unwrap() { + // Check if the entry is a file (not a directory) + // scan file for compressed data + println!("Processing file: {:?}", entry); + let file = std::fs::read(entry).unwrap(); + + let zstdlen = zstd::bulk::compress(&file, 9).unwrap(); + + let preflatecompressed = compress_zstd(&file).unwrap(); + + totalseen += zstdlen.len() as u64; + totalzstd += preflatecompressed.len() as u64; + + let original = decompress_zstd(&preflatecompressed, 1024 * 1024 * 128).unwrap(); + + assert!(original == file); + + println!("total seen ratio {}", totalzstd as f64 / totalseen as f64); + } +} diff --git a/src/preflate_container.rs b/src/preflate_container.rs index 7405b99..f2871aa 100644 --- a/src/preflate_container.rs +++ b/src/preflate_container.rs @@ -1,11 +1,16 @@ use byteorder::ReadBytesExt; -use std::io::{Read, Write}; +use cabac::vp8::{VP8Reader, VP8Writer}; +use std::io::{Cursor, Read, Write}; use crate::{ + cabac_codec::{PredictionDecoderCabac, PredictionEncoderCabac}, idat_parse::{recreate_idat, IdatContents}, preflate_error::PreflateError, - recompress_deflate_stream, + preflate_input::PreflateInput, + preflate_parameter_estimator::{estimate_preflate_parameters, PreflateParameters}, + process::{decode_mispredictions, encode_mispredictions, parse_deflate}, scan_deflate::{split_into_deflate_streams, BlockChunk}, + statistical_codec::PredictionEncoder, }; const COMPRESSED_WRAPPER_VERSION_1: u8 = 1; @@ -174,7 +179,7 @@ fn roundtrip_chunk_block_literal() { #[test] fn roundtrip_chunk_block_deflate() { let contents = crate::process::read_file("compressed_zlib_level1.deflate"); - let results = crate::decompress_deflate_stream(&contents, true).unwrap(); + let results = decompress_deflate_stream(&contents, true).unwrap(); let mut buffer = Vec::new(); @@ -193,7 +198,7 @@ fn roundtrip_chunk_block_png() { // we know the first IDAT chunk starts at 83 (avoid testing the scan_deflate code in a unit teast) let (idat_contents, deflate_stream) = crate::idat_parse::parse_idat(&f[83..], 1).unwrap(); - let results = crate::decompress_deflate_stream(&deflate_stream, true).unwrap(); + let results = decompress_deflate_stream(&deflate_stream, true).unwrap(); let total_chunk_length = idat_contents.total_chunk_length; @@ -271,6 +276,11 @@ fn roundtrip_deflate_chunks(filename: &str) { assert!(destination == f); } +#[test] +fn roundtrip_skip_length_crash() { + roundtrip_deflate_chunks("skiplengthcrash.bin"); +} + #[test] fn roundtrip_png_chunks() { roundtrip_deflate_chunks("treegdi.png"); @@ -290,3 +300,259 @@ fn roundtrip_gz_chunks() { fn roundtrip_pdf_chunks() { roundtrip_deflate_chunks("starcontrol.samplesave"); } + +/// result of decompress_deflate_stream +pub struct DecompressResult { + /// the plaintext that was decompressed from the stream + pub plain_text: Vec, + + /// the extra data that is needed to reconstruct the deflate stream exactly as it was written + pub prediction_corrections: Vec, + + /// the number of bytes that were processed from the compressed stream (this will be exactly the + /// data that will be recreated using the cabac_encoded data) + pub compressed_size: usize, + + /// the parameters that were used to compress the stream (informational) + pub parameters: PreflateParameters, +} + +impl core::fmt::Debug for DecompressResult { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "DecompressResult {{ plain_text: {}, prediction_corrections: {}, compressed_size: {} }}", self.plain_text.len(), self.prediction_corrections.len(), self.compressed_size) + } +} + +/// decompresses a deflate stream and returns the plaintext and cabac_encoded data that can be used to reconstruct it +pub fn decompress_deflate_stream( + compressed_data: &[u8], + verify: bool, +) -> Result { + let mut cabac_encoded = Vec::new(); + + let mut cabac_encoder = + PredictionEncoderCabac::new(VP8Writer::new(&mut cabac_encoded).unwrap()); + + let contents = parse_deflate(compressed_data, 0)?; + + //process::write_file("c:\\temp\\lastop.deflate", compressed_data); + //process::write_file("c:\\temp\\lastop.bin", contents.plain_text.as_slice()); + + let params = estimate_preflate_parameters(&contents.plain_text, &contents.blocks) + .map_err(PreflateError::AnalyzeFailed)?; + + //println!("params: {:?}", params); + + params.write(&mut cabac_encoder); + encode_mispredictions(&contents, ¶ms, &mut cabac_encoder)?; + + cabac_encoder.finish(); + + if verify { + let mut cabac_decoder = + PredictionDecoderCabac::new(VP8Reader::new(Cursor::new(&cabac_encoded)).unwrap()); + + let reread_params = PreflateParameters::read(&mut cabac_decoder) + .map_err(PreflateError::InvalidPredictionData)?; + assert_eq!(params, reread_params); + + let (recompressed, _recreated_blocks) = decode_mispredictions( + &reread_params, + PreflateInput::new(&contents.plain_text), + &mut cabac_decoder, + )?; + + if recompressed[..] != compressed_data[..contents.compressed_size] { + return Err(PreflateError::Mismatch(anyhow::anyhow!( + "recompressed data does not match original" + ))); + } + } + + Ok(DecompressResult { + plain_text: contents.plain_text, + prediction_corrections: cabac_encoded, + compressed_size: contents.compressed_size, + parameters: params, + }) +} + +/// recompresses a deflate stream using the cabac_encoded data that was returned from decompress_deflate_stream +pub fn recompress_deflate_stream( + plain_text: &[u8], + prediction_corrections: &[u8], +) -> Result, PreflateError> { + let mut cabac_decoder = + PredictionDecoderCabac::new(VP8Reader::new(Cursor::new(&prediction_corrections)).unwrap()); + + let params = PreflateParameters::read(&mut cabac_decoder) + .map_err(PreflateError::InvalidPredictionData)?; + let (recompressed, _recreated_blocks) = + decode_mispredictions(¶ms, PreflateInput::new(plain_text), &mut cabac_decoder)?; + Ok(recompressed) +} + +/// decompresses a deflate stream and returns the plaintext and cabac_encoded data that can be used to reconstruct it +/// This version uses DebugWriter and DebugReader, which are slower but can be used to debug the cabac encoding errors. +#[cfg(test)] +pub fn decompress_deflate_stream_assert( + compressed_data: &[u8], + verify: bool, +) -> Result { + use cabac::debug::{DebugReader, DebugWriter}; + + let mut cabac_encoded = Vec::new(); + + let mut cabac_encoder = + PredictionEncoderCabac::new(DebugWriter::new(&mut cabac_encoded).unwrap()); + + let contents = parse_deflate(compressed_data, 0)?; + + let params = estimate_preflate_parameters(&contents.plain_text, &contents.blocks) + .map_err(PreflateError::AnalyzeFailed)?; + + params.write(&mut cabac_encoder); + encode_mispredictions(&contents, ¶ms, &mut cabac_encoder)?; + + assert_eq!(contents.compressed_size, compressed_data.len()); + cabac_encoder.finish(); + + if verify { + let mut cabac_decoder = + PredictionDecoderCabac::new(DebugReader::new(Cursor::new(&cabac_encoded)).unwrap()); + + let params = PreflateParameters::read(&mut cabac_decoder) + .map_err(PreflateError::InvalidPredictionData)?; + let (recompressed, _recreated_blocks) = decode_mispredictions( + ¶ms, + PreflateInput::new(&contents.plain_text), + &mut cabac_decoder, + )?; + + if recompressed[..] != compressed_data[..] { + return Err(PreflateError::Mismatch(anyhow::anyhow!( + "recompressed data does not match original" + ))); + } + } + + Ok(DecompressResult { + plain_text: contents.plain_text, + prediction_corrections: cabac_encoded, + compressed_size: contents.compressed_size, + parameters: params, + }) +} + +/// recompresses a deflate stream using the cabac_encoded data that was returned from decompress_deflate_stream +/// This version uses DebugWriter and DebugReader, which are slower and don't compress but can be used to debug the cabac encoding errors. +#[cfg(test)] +pub fn recompress_deflate_stream_assert( + plain_text: &[u8], + prediction_corrections: &[u8], +) -> Result, PreflateError> { + use cabac::debug::DebugReader; + + let mut cabac_decoder = PredictionDecoderCabac::new( + DebugReader::new(Cursor::new(&prediction_corrections)).unwrap(), + ); + + let params = PreflateParameters::read(&mut cabac_decoder) + .map_err(PreflateError::InvalidPredictionData)?; + + let (recompressed, _recreated_blocks) = + decode_mispredictions(¶ms, PreflateInput::new(plain_text), &mut cabac_decoder)?; + Ok(recompressed) +} + +#[test] +fn verify_zip_compress() { + use crate::process::read_file; + let v = read_file("samplezip.zip"); + + let expanded = expand_zlib_chunks(&v).unwrap(); + + let mut recompressed = Vec::new(); + recreated_zlib_chunks(&mut Cursor::new(expanded), &mut recompressed).unwrap(); + + assert!(v == recompressed); +} + +#[test] +fn verify_roundtrip_zlib() { + for i in 0..9 { + verify_file(&format!("compressed_zlib_level{}.deflate", i)); + } +} + +#[test] +fn verify_roundtrip_flate2() { + for i in 0..9 { + verify_file(&format!("compressed_flate2_level{}.deflate", i)); + } +} + +#[test] +fn verify_roundtrip_libdeflate() { + for i in 0..9 { + verify_file(&format!("compressed_libdeflate_level{}.deflate", i)); + } +} + +#[cfg(test)] +fn verify_file(filename: &str) { + use crate::process::read_file; + let v = read_file(filename); + + let r = decompress_deflate_stream(&v, true).unwrap(); + let recompressed = recompress_deflate_stream(&r.plain_text, &r.prediction_corrections).unwrap(); + assert!(v == recompressed); +} + +/// expands the Zlib compressed streams in the data and then recompresses the result +/// with Zstd with the maximum level. +pub fn compress_zstd(zlib_compressed_data: &[u8]) -> Result, PreflateError> { + let plain_text = expand_zlib_chunks(zlib_compressed_data) + .map_err(|_| PreflateError::InvalidCompressedWrapper)?; + zstd::bulk::compress(&plain_text, 9).map_err(PreflateError::ZstdError) +} + +/// decompresses the Zstd compressed data and then recompresses the result back +/// to the original Zlib compressed streams. +pub fn decompress_zstd(compressed_data: &[u8], capacity: usize) -> Result, PreflateError> { + let compressed_data = + zstd::bulk::decompress(compressed_data, capacity).map_err(PreflateError::ZstdError)?; + + let mut result = Vec::new(); + recreated_zlib_chunks(&mut Cursor::new(compressed_data), &mut result)?; + Ok(result) +} + +#[test] +fn verify_zip_compress_zstd() { + use crate::process::read_file; + let v = read_file("samplezip.zip"); + + let compressed = compress_zstd(&v).unwrap(); + + let recreated = decompress_zstd(&compressed, 256 * 1024 * 1024).unwrap(); + + assert!(v == recreated); + println!( + "original zip = {} bytes, recompressed zip = {} bytes", + v.len(), + compressed.len() + ); +} + +#[test] +fn verify_roundtrip_assert() { + use crate::process::read_file; + + let v = read_file("compressed_zlib_level1.deflate"); + + let r = decompress_deflate_stream_assert(&v, true).unwrap(); + let recompressed = + recompress_deflate_stream_assert(&r.plain_text, &r.prediction_corrections).unwrap(); + assert!(v == recompressed); +} diff --git a/src/preflate_parameter_estimator.rs b/src/preflate_parameter_estimator.rs index 834cd79..a7a7187 100644 --- a/src/preflate_parameter_estimator.rs +++ b/src/preflate_parameter_estimator.rs @@ -7,10 +7,10 @@ use anyhow::Result; use crate::{ + add_policy_estimator::{estimate_add_policy, DictionaryAddPolicy}, bit_helper::bit_length, complevel_estimator::estimate_preflate_comp_level, hash_algorithm::HashAlgorithm, - hash_chain::DictionaryAddPolicy, preflate_constants::{self}, preflate_parse_config::MatchingType, preflate_stream_info::{extract_preflate_info, PreflateStreamInfo}, @@ -43,12 +43,14 @@ pub struct PreflateParameters { const FILE_VERSION: u16 = 1; -const HASH_ALGORITHM_ZLIB: u16 = 0; -const HASH_ALGORITHM_MINIZ_FAST: u16 = 1; -const HASH_ALGORITHM_LIBDEFLATE4: u16 = 2; -const HASH_ALGORITHM_ZLIBNG: u16 = 3; -const HASH_ALGORITHM_RANDOMVECTOR: u16 = 4; -const HASH_ALGORITHM_CRC32C: u16 = 5; +const HASH_ALGORITHM_NONE: u16 = 0; +const HASH_ALGORITHM_ZLIB: u16 = 1; +const HASH_ALGORITHM_MINIZ_FAST: u16 = 2; +const HASH_ALGORITHM_LIBDEFLATE4: u16 = 3; +const HASH_ALGORITHM_LIBDEFLATE4_FAST: u16 = 4; +const HASH_ALGORITHM_ZLIBNG: u16 = 5; +const HASH_ALGORITHM_RANDOMVECTOR: u16 = 6; +const HASH_ALGORITHM_CRC32C: u16 = 7; impl PreflateParameters { pub fn read(decoder: &mut impl PredictionDecoder) -> Result { @@ -81,8 +83,8 @@ impl PreflateParameters { let add_policy = match decoder.decode_value(2) { 0 => DictionaryAddPolicy::AddAll, - 1 => DictionaryAddPolicy::AddFirst(u16::from(decoder.decode_value(8))), - 2 => DictionaryAddPolicy::AddFirstAndLast(u16::from(decoder.decode_value(8))), + 1 => DictionaryAddPolicy::AddFirst(decoder.decode_value(8)), + 2 => DictionaryAddPolicy::AddFirstAndLast(decoder.decode_value(8)), 3 => DictionaryAddPolicy::AddFirstExcept4kBoundary, _ => panic!("invalid add policy"), }; @@ -124,12 +126,14 @@ impl PreflateParameters { max_chain: max_chain.into(), min_len: min_len.into(), hash_algorithm: match hash_algorithm { + HASH_ALGORITHM_NONE => HashAlgorithm::None, HASH_ALGORITHM_ZLIB => HashAlgorithm::Zlib { hash_shift: hash_shift.into(), hash_mask, }, HASH_ALGORITHM_MINIZ_FAST => HashAlgorithm::MiniZFast, HASH_ALGORITHM_LIBDEFLATE4 => HashAlgorithm::Libdeflate4, + HASH_ALGORITHM_LIBDEFLATE4_FAST => HashAlgorithm::Libdeflate4Fast, HASH_ALGORITHM_ZLIBNG => HashAlgorithm::ZlibNG, HASH_ALGORITHM_RANDOMVECTOR => HashAlgorithm::RandomVector, HASH_ALGORITHM_CRC32C => HashAlgorithm::Crc32cHash, @@ -149,10 +153,13 @@ impl PreflateParameters { encoder.encode_value(FILE_VERSION, 8); encoder.encode_value(self.predictor.strategy as u16, 4); encoder.encode_value(self.huff_strategy as u16, 4); - encoder.encode_value(u16::try_from(self.predictor.zlib_compatible).unwrap(), 1); + encoder.encode_value(u16::from(self.predictor.zlib_compatible), 1); encoder.encode_value(u16::try_from(self.predictor.window_bits).unwrap(), 8); match self.predictor.hash_algorithm { + HashAlgorithm::None => { + encoder.encode_value(HASH_ALGORITHM_NONE, 4); + } HashAlgorithm::Zlib { hash_shift, hash_mask, @@ -164,6 +171,9 @@ impl PreflateParameters { HashAlgorithm::MiniZFast => { encoder.encode_value(HASH_ALGORITHM_MINIZ_FAST, 4); } + HashAlgorithm::Libdeflate4Fast => { + encoder.encode_value(HASH_ALGORITHM_LIBDEFLATE4_FAST, 4); + } HashAlgorithm::Libdeflate4 => { encoder.encode_value(HASH_ALGORITHM_LIBDEFLATE4, 4); } @@ -180,14 +190,8 @@ impl PreflateParameters { encoder.encode_value(self.predictor.max_token_count, 16); encoder.encode_value(self.predictor.max_dist_3_matches, 16); - encoder.encode_value( - u16::try_from(self.predictor.very_far_matches_detected).unwrap(), - 1, - ); - encoder.encode_value( - u16::try_from(self.predictor.matches_to_start_detected).unwrap(), - 1, - ); + encoder.encode_value(u16::from(self.predictor.very_far_matches_detected), 1); + encoder.encode_value(u16::from(self.predictor.matches_to_start_detected), 1); let good_length; let max_lazy; @@ -205,8 +209,8 @@ impl PreflateParameters { } } - encoder.encode_value(u16::try_from(good_length).unwrap(), 16); - encoder.encode_value(u16::try_from(max_lazy).unwrap(), 16); + encoder.encode_value(good_length, 16); + encoder.encode_value(max_lazy, 16); encoder.encode_value(u16::try_from(self.predictor.nice_length).unwrap(), 16); encoder.encode_value(u16::try_from(self.predictor.max_chain).unwrap(), 16); encoder.encode_value(u16::try_from(self.predictor.min_len).unwrap(), 16); @@ -275,15 +279,50 @@ pub fn estimate_preflate_parameters( ) -> anyhow::Result { let info = extract_preflate_info(blocks); + let preflate_strategy = estimate_preflate_strategy(&info); + let huff_strategy = estimate_preflate_huff_strategy(&info); + + if preflate_strategy == PreflateStrategy::Store + || preflate_strategy == PreflateStrategy::HuffOnly + { + // No dictionary used + return Ok(PreflateParameters { + predictor: TokenPredictorParameters { + window_bits: 0, + very_far_matches_detected: false, + matches_to_start_detected: false, + strategy: preflate_strategy, + nice_length: 0, + add_policy: DictionaryAddPolicy::AddAll, + max_token_count: 16386, + zlib_compatible: true, + max_dist_3_matches: 0, + matching_type: MatchingType::Greedy, + max_chain: 0, + min_len: 0, + hash_algorithm: HashAlgorithm::None, + }, + huff_strategy, + }); + } + let window_bits = estimate_preflate_window_bits(info.max_dist); let mem_level = estimate_preflate_mem_level(info.max_tokens_per_block); + let add_policy = estimate_add_policy(blocks); //let hash_shift = 5; //let hash_mask = 32767; let max_token_count = (1 << (6 + mem_level)) - 1; - let cl = estimate_preflate_comp_level(window_bits, mem_level, unpacked_output, blocks)?; + let cl = estimate_preflate_comp_level( + window_bits, + mem_level, + info.min_len, + unpacked_output, + add_policy, + blocks, + )?; Ok(PreflateParameters { predictor: TokenPredictorParameters { diff --git a/src/preflate_parse_config.rs b/src/preflate_parse_config.rs index 48cf9e8..a12c695 100644 --- a/src/preflate_parse_config.rs +++ b/src/preflate_parse_config.rs @@ -4,7 +4,7 @@ * This software incorporates material from third parties. See NOTICE.txt for details. *--------------------------------------------------------------------------------------------*/ -use crate::hash_chain::DictionaryAddPolicy; +use crate::add_policy_estimator::DictionaryAddPolicy; #[derive(Debug, Copy, Clone, PartialEq, Eq, Default)] pub enum MatchingType { diff --git a/src/preflate_stream_info.rs b/src/preflate_stream_info.rs index 65a777f..314aaa7 100644 --- a/src/preflate_stream_info.rs +++ b/src/preflate_stream_info.rs @@ -11,6 +11,7 @@ pub struct PreflateStreamInfo { pub literal_count: u32, pub reference_count: u32, pub max_dist: u32, + pub min_len: u32, pub max_tokens_per_block: u32, pub count_blocks: u32, pub count_stored_blocks: u32, @@ -19,7 +20,7 @@ pub struct PreflateStreamInfo { pub count_static_huff_tree_blocks: u32, } -pub fn extract_preflate_info(blocks: &Vec) -> PreflateStreamInfo { +pub fn extract_preflate_info(blocks: &[PreflateTokenBlock]) -> PreflateStreamInfo { let mut result: PreflateStreamInfo = PreflateStreamInfo { count_blocks: blocks.len() as u32, count_stored_blocks: 0, @@ -28,6 +29,7 @@ pub fn extract_preflate_info(blocks: &Vec) -> PreflateStream max_tokens_per_block: 0, literal_count: 0, reference_count: 0, + min_len: u32::MAX, max_dist: 0, count_huff_blocks: 0, count_rle_blocks: 0, @@ -46,18 +48,22 @@ pub fn extract_preflate_info(blocks: &Vec) -> PreflateStream result.max_tokens_per_block = std::cmp::max(result.max_tokens_per_block, b.tokens.len() as u32); let mut block_max_dist = 0; + let mut block_min_len = u32::MAX; for j in 0..b.tokens.len() { match &b.tokens[j] { - PreflateToken::Literal => { + PreflateToken::Literal(_) => { result.literal_count += 1; } PreflateToken::Reference(t) => { result.reference_count += 1; block_max_dist = std::cmp::max(block_max_dist, t.dist()); + block_min_len = std::cmp::min(block_min_len, t.len()); } } } result.max_dist = std::cmp::max(result.max_dist, block_max_dist); + result.min_len = std::cmp::min(result.min_len, block_min_len); + if block_max_dist == 0 { result.count_huff_blocks += 1; } else if block_max_dist == 1 { diff --git a/src/preflate_token.rs b/src/preflate_token.rs index 2c1cae0..d6cc96b 100644 --- a/src/preflate_token.rs +++ b/src/preflate_token.rs @@ -14,14 +14,14 @@ use crate::{ #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub struct PreflateTokenReference { - len: u16, + len: u8, dist: u16, irregular258: bool, } #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub enum PreflateToken { - Literal, + Literal(u8), Reference(PreflateTokenReference), } @@ -34,14 +34,14 @@ impl PreflateToken { impl PreflateTokenReference { pub fn new(len: u32, dist: u32, irregular258: bool) -> PreflateTokenReference { PreflateTokenReference { - len: len as u16, + len: (len - 3) as u8, dist: dist as u16, irregular258, } } pub fn len(&self) -> u32 { - self.len as u32 + (self.len as u32) + 3 } pub fn dist(&self) -> u32 { @@ -68,7 +68,8 @@ pub enum BlockType { #[derive(Debug)] pub struct PreflateTokenBlock { pub block_type: BlockType, - pub uncompressed_len: u32, + // if this is an uncompressed block, then this is the length + pub uncompressed: Vec, pub context_len: i32, pub padding_bits: u8, pub tokens: Vec, @@ -100,7 +101,7 @@ impl PreflateTokenBlock { pub fn new(block_type: BlockType) -> PreflateTokenBlock { PreflateTokenBlock { block_type, - uncompressed_len: 0, + uncompressed: Vec::new(), context_len: 0, padding_bits: 0, tokens: Vec::new(), @@ -110,7 +111,7 @@ impl PreflateTokenBlock { } pub fn add_literal(&mut self, lit: u8) { - self.tokens.push(PreflateToken::Literal); + self.tokens.push(PreflateToken::Literal(lit)); self.freq.literal_codes[lit as usize] += 1; } diff --git a/src/process.rs b/src/process.rs index 3fe5450..f5ecdc1 100644 --- a/src/process.rs +++ b/src/process.rs @@ -11,6 +11,7 @@ use crate::{ deflate_writer::DeflateWriter, huffman_calc::HufftreeBitCalc, preflate_error::PreflateError, + preflate_input::PreflateInput, preflate_parameter_estimator::PreflateParameters, preflate_token::{BlockType, PreflateTokenBlock}, statistical_codec::{ @@ -29,7 +30,7 @@ pub fn encode_mispredictions( ) -> Result<(), PreflateError> { predict_blocks( &deflate.blocks, - TokenPredictor::new(&deflate.plain_text, ¶ms.predictor), + TokenPredictor::new(PreflateInput::new(&deflate.plain_text), ¶ms.predictor), encoder, )?; @@ -114,10 +115,10 @@ fn predict_blocks( pub fn decode_mispredictions( params: &PreflateParameters, - plain_text: &[u8], + plain_text: PreflateInput, decoder: &mut impl PredictionDecoder, ) -> Result<(Vec, Vec), PreflateError> { - let mut deflate_writer: DeflateWriter<'_> = DeflateWriter::new(plain_text); + let mut deflate_writer: DeflateWriter = DeflateWriter::new(); let output_blocks = recreate_blocks( TokenPredictor::new(plain_text, ¶ms.predictor), @@ -167,7 +168,7 @@ fn recreate_blocks( #[allow(dead_code)] pub fn write_file(filename: &str, data: &[u8]) { let mut writecomp = std::fs::File::create(filename).unwrap(); - std::io::Write::write_all(&mut writecomp, &data).unwrap(); + std::io::Write::write_all(&mut writecomp, data).unwrap(); } #[cfg(test)] @@ -230,8 +231,12 @@ fn analyze_compressed_data_fast( let params = PreflateParameters::read(&mut cabac_decoder).unwrap(); - let (recompressed, _recreated_blocks) = - decode_mispredictions(¶ms, &contents.plain_text, &mut cabac_decoder).unwrap(); + let (recompressed, _recreated_blocks) = decode_mispredictions( + ¶ms, + PreflateInput::new(&contents.plain_text), + &mut cabac_decoder, + ) + .unwrap(); assert!(recompressed[..] == compressed_data[..]); @@ -299,8 +304,12 @@ fn analyze_compressed_data_verify( let params_reread = PreflateParameters::read(&mut combined_decoder).unwrap(); assert_eq!(params, params_reread); - let (recompressed, recreated_blocks) = - decode_mispredictions(¶ms_reread, &contents.plain_text, &mut combined_decoder).unwrap(); + let (recompressed, recreated_blocks) = decode_mispredictions( + ¶ms_reread, + PreflateInput::new(&contents.plain_text), + &mut combined_decoder, + ) + .unwrap(); assert_eq!(contents.blocks.len(), recreated_blocks.len()); contents @@ -376,334 +385,6 @@ fn verify_longmatch() { } #[test] -#[ignore = "doesn't work yet due to excessive hash chain length"] -fn test_treepngdeflate() { - use crate::hash_algorithm::{HashImplementation, RandomVectorHash}; - use crate::hash_chain::HashChain; - use crate::hash_chain::UPDATE_MODE_ALL; - - let compressed_data: &[u8] = &read_file("treegdi.deflate"); - - let contents = parse_deflate(compressed_data, 1).unwrap(); - - let decoder = miniz_oxide::inflate::decompress_to_vec(compressed_data).unwrap(); - assert_eq!(&decoder[..], &contents.plain_text[..]); - - let mut input = crate::preflate_input::PreflateInput::new(&contents.plain_text); - let mut chain: crate::hash_chain::HashChainAbs = - RandomVectorHash::new_hash_chain(RandomVectorHash {}); - - let r = RandomVectorHash::default(); - - let h = r.get_hash(&contents.plain_text); - - println!("hashx: {:?}", h); - - let mut mismatches = 0; - - /*let mut o = 0; - for i in 0..20 - { - let t = &contents.blocks[0].tokens[i]; - println!("{} token: {}, {:?}", o, i, t); - match t { - crate::preflate_token::PreflateToken::Literal => o += 1, - crate::preflate_token::PreflateToken::Reference(r) => { - o += r.len(); - } - } - }*/ - - for block_no in 0..contents.blocks.len() { - let b = &contents.blocks[block_no]; - println!("block: {} {}", block_no, b.tokens.len()); - - for i in 0..b.tokens.len() { - let t = &b.tokens[i]; - - let pos = input.pos(); - let chars = input.cur_chars(0); - let depth; - let mut chars = chars[0..chars.len().min(10)].to_vec(); - - match t { - crate::preflate_token::PreflateToken::Literal => { - chain.update_hash::(1, &input); - input.advance(1); - depth = 0; - chars.resize(1, 0); - } - crate::preflate_token::PreflateToken::Reference(r) => { - depth = chain.match_depth(&r, 32768, &input); - chars.resize(r.len().min(10) as usize, 0); - if depth > 5 { - mismatches += 1; - if mismatches > 20 { - return; - } - - //println!("back: {:?}", &input.cur_chars(-82)[0..82]); - - /*println!( - "depth: {}, {}, {:?}", - depth, - input.pos(), - &input.cur_chars(0)[0..16] - );*/ - chain.match_depth(&r, 32768, &input); - } - - chain.update_hash::(r.len(), &input); - - input.advance(r.len()); - } - } - - if block_no == 1 && i > 6900 && i < 7100 { - println!( - "offset: {} token: {}/{}, depth {} reference: {:?} chars {:?}", - pos, block_no, i, depth, t, chars - ); - } - } - } - - //do_analyze(None, &read_file("treepng.deflate"), true); -} - -#[test] -#[ignore = "doesn't work yet due to excessive hash chain length"] -fn test_tree_paintnet() { - do_analyze(None, &read_file("tree.paintnet.deflate"), true); -} - -#[test] -#[ignore = "doesn't work yet due to excessive hash chain length"] -fn test_tree_treepng() { - do_analyze(None, &read_file("treepng.deflate"), true); -} - -// test binary deflate generated by MS Office -#[test] -fn verify_docx() { - do_analyze(None, &read_file("dump571.deflate"), true); -} - -// test binary deflate generated by starcontrol -#[test] -fn verify_savegame() { - do_analyze(None, &read_file("savegame.deflate"), false); -} - -#[test] -fn verify_zlib_compressed_3() { - let i = 1; - let v = read_file(&format!("compressed_zlib_level{}.deflate", i)); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, true); -} - -#[test] -fn verify_zlib_compressed() { - for i in 0..9 { - let v = read_file(&format!("compressed_zlib_level{}.deflate", i)); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, true); - do_analyze(None, &v, false); - } -} - -/// with the right parameters, Zlib compressed data should be recreated perfectly -#[test] -fn verify_zlib_compressed_perfect() { - use crate::{ - hash_algorithm::HashAlgorithm, - preflate_parameter_estimator::PreflateHuffStrategy, - preflate_parameter_estimator::PreflateStrategy, - preflate_parse_config::{SLOW_PREFLATE_PARSER_SETTINGS, ZLIB_PREFLATE_PARSER_SETTINGS}, - statistical_codec::{AssertDefaultOnlyDecoder, AssertDefaultOnlyEncoder}, - }; - - for i in 1..=9 { - println!(); - println!("testing zlib level {}", i); - - let v = read_file(&format!("compressed_zlib_level{}.deflate", i)); - - let config; - let add_policy; - let max_dist_3_matches; - let matching_type; - if i < 4 { - config = &ZLIB_PREFLATE_PARSER_SETTINGS[i as usize - 1]; - add_policy = config.dictionary_add_policy; - max_dist_3_matches = 32768; - matching_type = config.match_type; - } else { - config = &SLOW_PREFLATE_PARSER_SETTINGS[i as usize - 4]; - add_policy = config.dictionary_add_policy; - max_dist_3_matches = 4096; - matching_type = config.match_type; - } - - let params = PreflateParameters { - huff_strategy: PreflateHuffStrategy::Dynamic, - predictor: crate::token_predictor::TokenPredictorParameters { - strategy: PreflateStrategy::Default, - window_bits: 15, - very_far_matches_detected: false, - matches_to_start_detected: false, - nice_length: config.nice_length, - add_policy, - max_token_count: 16383, - zlib_compatible: true, - max_dist_3_matches, - matching_type, - max_chain: config.max_chain, - min_len: 3, - hash_algorithm: HashAlgorithm::Zlib { - hash_shift: 5, - hash_mask: 0x7fff, - }, - }, - }; - - let contents = parse_deflate(&v, 1).unwrap(); - - // assert that we don't get any mispredictions on known good zlib compressed data - let mut cabac_encoder = AssertDefaultOnlyEncoder {}; - encode_mispredictions(&contents, ¶ms, &mut cabac_encoder).unwrap(); - - let mut cabac_decoder = AssertDefaultOnlyDecoder {}; - decode_mispredictions(¶ms, &contents.plain_text, &mut cabac_decoder).unwrap(); - } -} - -#[test] -fn verify_miniz1_compressed_perfect() { - use crate::{ - cabac_codec::{PredictionDecoderCabac, PredictionEncoderCabac}, - hash_algorithm::HashAlgorithm, - preflate_parameter_estimator::{PreflateHuffStrategy, PreflateStrategy}, - }; - use cabac::vp8::{VP8Reader, VP8Writer}; - - let f = read_file("sample1.bin"); - let v = miniz_oxide::deflate::compress_to_vec(&f, 1); - - let contents = parse_deflate(&v, 1).unwrap(); - - let mut buffer = Vec::new(); - let mut cabac_encoder = PredictionEncoderCabac::new(VP8Writer::new(&mut buffer).unwrap()); - - let params = PreflateParameters { - predictor: crate::token_predictor::TokenPredictorParameters { - strategy: PreflateStrategy::Default, - window_bits: 15, - very_far_matches_detected: false, - matches_to_start_detected: false, - nice_length: 3, - add_policy: crate::hash_chain::DictionaryAddPolicy::AddFirstExcept4kBoundary, - max_token_count: 16383, - zlib_compatible: true, - max_dist_3_matches: 8192, - matching_type: crate::preflate_parse_config::MatchingType::Greedy, - max_chain: 1, - min_len: 3, - hash_algorithm: HashAlgorithm::MiniZFast, - }, - huff_strategy: PreflateHuffStrategy::Dynamic, - }; - - encode_mispredictions(&contents, ¶ms, &mut cabac_encoder).unwrap(); - - cabac_encoder.finish(); - - cabac_encoder.print(); - - println!("buffer size: {}", buffer.len()); - - let mut cabac_decoder = - PredictionDecoderCabac::new(VP8Reader::new(Cursor::new(&buffer)).unwrap()); - - decode_mispredictions(¶ms, &contents.plain_text, &mut cabac_decoder).unwrap(); -} - -#[test] -fn verify_miniz_compressed_1() { - let v = read_file(&format!("compressed_flate2_level1.deflate")); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, false); -} - -#[test] -fn verify_zlibng_compressed_1() { - let v = read_file(&format!("zlibng.deflate")); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, false); -} - -#[test] -fn verify_libdeflate_compressed() { - for i in 0..9 { - let filename = format!("compressed_libdeflate_level{}.deflate", i); - let v = read_file(&filename); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, true); - } -} - -#[test] -fn verify_miniz_compressed() { - for i in 0..9 { - let filename = format!("compressed_flate2_level{}.deflate", i); - println!(); - println!("loading {}", filename); - let v = read_file(&filename); - - //let minusheader = &v[2..v.len() - 4]; - //let crc = Some(u32::from_le_bytes([v[v.len() - 4], v[v.len() - 3], v[v.len() - 2], v[v.len() - 1]])); - - do_analyze(None, &v, true); - do_analyze(None, &v, false); - } -} - -#[cfg(test)] -#[allow(dead_code)] -pub fn zlibcompress(v: &[u8], level: i32) -> Vec { - let mut output = Vec::new(); - output.resize(v.len() + 1000, 0); - - let mut output_size = output.len() as libz_sys::uLongf; - - unsafe { - let err = libz_sys::compress2( - output.as_mut_ptr(), - &mut output_size, - v.as_ptr(), - v.len() as libz_sys::uLongf, - level, - ); - - assert_eq!(err, 0, "shouldn't fail zlib compression"); - - output.set_len(output_size as usize); - } - output +fn verify_zlibng() { + do_analyze(None, &read_file("compressed_zlibng_level1.deflate"), false); } diff --git a/src/scan_deflate.rs b/src/scan_deflate.rs index 26ff09f..8610aa4 100644 --- a/src/scan_deflate.rs +++ b/src/scan_deflate.rs @@ -1,9 +1,8 @@ use std::io::Cursor; use crate::{ - decompress_deflate_stream, idat_parse::{parse_idat, IdatContents}, - DecompressResult, + preflate_container::{decompress_deflate_stream, DecompressResult}, }; use byteorder::{LittleEndian, ReadBytesExt}; @@ -11,6 +10,9 @@ use std::io::{Read, Seek, SeekFrom}; use anyhow::Result; +/// The minimum size of a block that is considered for splitting into chunks +const MIN_BLOCKSIZE: usize = 1024; + #[derive(Debug)] pub enum BlockChunk { /// just a bunch of normal bytes that are copied to the output @@ -34,7 +36,7 @@ enum Signature { } fn next_signature(src: &[u8], index: &mut usize) -> Option { - if src.len() == 0 { + if src.is_empty() { return None; } @@ -67,16 +69,18 @@ pub fn split_into_deflate_streams(src: &[u8], locations_found: &mut Vec { if let Ok(res) = decompress_deflate_stream(&src[index + 2..], true) { - index += 2; + if res.plain_text.len() > MIN_BLOCKSIZE { + index += 2; - locations_found.push(BlockChunk::Literal(index - prev_index)); + locations_found.push(BlockChunk::Literal(index - prev_index)); - index += res.compressed_size as usize; + index += res.compressed_size; - locations_found.push(BlockChunk::DeflateStream(res)); + locations_found.push(BlockChunk::DeflateStream(res)); - prev_index = index; - continue; + prev_index = index; + continue; + } } } @@ -84,29 +88,33 @@ pub fn split_into_deflate_streams(src: &[u8], locations_found: &mut Vec MIN_BLOCKSIZE { + locations_found.push(BlockChunk::Literal(start - prev_index)); - index = start + res.compressed_size as usize; - prev_index = index; + index = start + res.compressed_size; + prev_index = index; - locations_found.push(BlockChunk::DeflateStream(res)); + locations_found.push(BlockChunk::DeflateStream(res)); - continue; + continue; + } } } } Signature::ZipLocalFileHeader => { if let Ok((header_size, res)) = parse_zip_stream(&src[index..]) { - locations_found.push(BlockChunk::Literal(index - prev_index + header_size)); + if res.plain_text.len() > MIN_BLOCKSIZE { + locations_found.push(BlockChunk::Literal(index - prev_index + header_size)); - index += header_size + res.compressed_size as usize; - prev_index = index; + index += header_size + res.compressed_size; + prev_index = index; - locations_found.push(BlockChunk::DeflateStream(res)); + locations_found.push(BlockChunk::DeflateStream(res)); - continue; + continue; + } } } @@ -118,14 +126,15 @@ pub fn split_into_deflate_streams(src: &[u8], locations_found: &mut Vec MIN_BLOCKSIZE { + locations_found.push(BlockChunk::Literal(real_start - prev_index)); - locations_found.push(BlockChunk::Literal(real_start - prev_index)); - - locations_found.push(BlockChunk::IDATDeflate(r, res)); + locations_found.push(BlockChunk::IDATDeflate(r, res)); - index = real_start + length; - prev_index = index; - continue; + index = real_start + length; + prev_index = index; + continue; + } } } } @@ -291,8 +300,7 @@ fn parse_zip_stream(contents: &[u8]) -> anyhow::Result<(usize, DecompressResult) } // read extended information - let mut file_name_buf = Vec::::new(); - file_name_buf.resize(zip_local_file_header.file_name_length as usize, 0); + let mut file_name_buf = vec![0; zip_local_file_header.file_name_length as usize]; binary_reader.read_exact(&mut file_name_buf)?; let _path = String::from_utf8(file_name_buf)?; diff --git a/src/skip_length_estimator.rs b/src/skip_length_estimator.rs deleted file mode 100644 index 6fe853c..0000000 --- a/src/skip_length_estimator.rs +++ /dev/null @@ -1,130 +0,0 @@ -/// Different versions of Zlib use some length criterea to decide whether to add all the substrings of -/// a large match to the hash table. For example, zlib level 1 will only add all the substrings of matches -/// of length 4 in order to save on CPU. -/// -/// What we do here is walk through all the matches and record how long the matching -/// substrings are. The we see what the largest string was that we fully added to the -/// dictionary. -/// -/// This will be the limit that we use when we decide whether to -/// use skip_hash or update_hash. -use crate::{ - hash_chain::DictionaryAddPolicy, - preflate_token::{PreflateToken, PreflateTokenBlock}, -}; - -pub fn estimate_add_policy(token_blocks: &[PreflateTokenBlock]) -> DictionaryAddPolicy { - const WINDOW_MASK: usize = 0x7fff; - - // used to see if we have the special case of not adding matches on the edge - // of the 4k boundary. This is used by miniz. - let mut block_4k = true; - - let mut current_window = vec![0u16; WINDOW_MASK + 1]; - - // tracks the maximum length that we've see that was added to the dictionary - let mut max_distance: u32 = 0; - - // tracks the maximum length that we've seen that was added to the dictionary if the last match was also added - let mut max_distance_last_add = 0; - let mut current_offset: u32 = 0; - - const LAST_ADDED: u16 = 0x8000; - - for i in 0..token_blocks.len() { - let token_block = &token_blocks[i]; - for token in token_block.tokens.iter() { - match token { - PreflateToken::Literal => { - current_window[current_offset as usize & WINDOW_MASK] = 0; - current_offset += 1; - } - PreflateToken::Reference(r) => { - // track if we saw something on the of the 4k boundary - if (current_offset & 4095) >= 4093 { - block_4k = false; - } - - let previous_match = - current_window[(current_offset - r.dist()) as usize & WINDOW_MASK]; - - let match_length = u32::from(previous_match & !LAST_ADDED); - - max_distance = std::cmp::max(max_distance, match_length); - if (previous_match & LAST_ADDED) == 0 { - max_distance_last_add = std::cmp::max(max_distance_last_add, match_length); - } - - current_window[current_offset as usize & WINDOW_MASK] = 0; - current_offset += 1; - - for i in 1..r.len() { - current_window[current_offset as usize & WINDOW_MASK] = - r.len() as u16 | if i == r.len() - 1 { LAST_ADDED } else { 0 }; - current_offset += 1; - } - } - } - } - } - - if max_distance == 0 && block_4k { - DictionaryAddPolicy::AddFirstExcept4kBoundary - } else if max_distance_last_add < max_distance { - DictionaryAddPolicy::AddFirstAndLast(max_distance_last_add as u16) - } else if max_distance < 258 { - DictionaryAddPolicy::AddFirst(max_distance as u16) - } else { - DictionaryAddPolicy::AddAll - } -} - -#[test] -fn verify_miniz1_recognition() { - let f = crate::process::read_file("sample1.bin"); - let v = miniz_oxide::deflate::compress_to_vec(&f, 1); - - let contents = crate::process::parse_deflate(&v, 1).unwrap(); - - let add_policy = estimate_add_policy(&contents.blocks); - - assert_eq!(add_policy, DictionaryAddPolicy::AddFirstExcept4kBoundary); -} - -#[test] -fn verify_zlib_level_recognition() { - let levels = [ - DictionaryAddPolicy::AddFirst(4), - DictionaryAddPolicy::AddFirst(5), - DictionaryAddPolicy::AddFirst(6), - DictionaryAddPolicy::AddAll, - ]; - - for i in 1..=4 { - let v = crate::process::read_file(&format!("compressed_zlib_level{}.deflate", i)); - - let contents = crate::process::parse_deflate(&v, 1).unwrap(); - let add_policy = estimate_add_policy(&contents.blocks); - - assert_eq!(add_policy, levels[i - 1]); - } -} - -#[test] -fn verify_zlibng_level_recognition() { - let levels = [ - DictionaryAddPolicy::AddFirstAndLast(0), // 1 quick - DictionaryAddPolicy::AddFirstAndLast(4), // 2 fast - DictionaryAddPolicy::AddFirstAndLast(96), // 3 medium - DictionaryAddPolicy::AddFirstAndLast(191), // 4 medium - ]; - - for i in 1..=4 { - let v = crate::process::read_file(&format!("compressed_zlibng_level{}.deflate", i)); - - let contents = crate::process::parse_deflate(&v, 1).unwrap(); - let add_policy = estimate_add_policy(&contents.blocks); - - assert_eq!(add_policy, levels[i - 1]); - } -} diff --git a/src/token_predictor.rs b/src/token_predictor.rs index 9186de8..33d6d75 100644 --- a/src/token_predictor.rs +++ b/src/token_predictor.rs @@ -7,10 +7,10 @@ use anyhow::Context; use crate::{ + add_policy_estimator::DictionaryAddPolicy, bit_helper::DebugHash, cabac_codec::{decode_difference, encode_difference}, hash_algorithm::HashAlgorithm, - hash_chain::DictionaryAddPolicy, hash_chain_holder::{new_hash_chain_holder, HashChainHolder, MatchResult}, preflate_constants::MIN_MATCH, preflate_input::PreflateInput, @@ -62,7 +62,7 @@ pub struct TokenPredictorParameters { } impl<'a> TokenPredictor<'a> { - pub fn new(uncompressed: &'a [u8], params: &TokenPredictorParameters) -> Self { + pub fn new(uncompressed: PreflateInput<'a>, params: &TokenPredictorParameters) -> Self { // Implement constructor logic for PreflateTokenPredictor // Initialize fields as necessary // Create and initialize PreflatePredictorState, PreflateHashChainExt, and PreflateSeqChain instances @@ -76,11 +76,12 @@ impl<'a> TokenPredictor<'a> { pending_reference: None, current_token_count: 0, max_token_count: params.max_token_count.into(), - input: PreflateInput::new(uncompressed), + input: uncompressed, } } pub fn checksum(&self) -> DebugHash { + assert!(VERIFY); let mut c = DebugHash::default(); self.state.checksum(&mut c); c @@ -103,11 +104,11 @@ impl<'a> TokenPredictor<'a> { ); if block.block_type == BlockType::Stored { - codec.encode_value(block.uncompressed_len as u16, 16); + codec.encode_value(block.uncompressed.len() as u16, 16); codec.encode_correction(CodecCorrection::NonZeroPadding, block.padding_bits.into()); - for _i in 0..block.uncompressed_len { + for _i in 0..block.uncompressed.len() { self.state.update_hash(1, &self.input); self.input.advance(1); } @@ -128,7 +129,7 @@ impl<'a> TokenPredictor<'a> { codec.encode_correction(CodecCorrection::TokenCount, 0); } - codec.encode_verify_state("start", self.checksum().hash()); + codec.encode_verify_state("start", if VERIFY { self.checksum().hash() } else { 0 }); for i in 0..block.tokens.len() { let target_token = &block.tokens[i]; @@ -170,9 +171,9 @@ impl<'a> TokenPredictor<'a> { // println!("B{}T{}: TGT({},{}) -> PRD({},{})", blockno, i, target_token.len, target_token.dist, predicted_token.len, predicted_token.dist); match target_token { - PreflateToken::Literal => { + PreflateToken::Literal(_) => { match predicted_token { - PreflateToken::Literal => { + PreflateToken::Literal(_) => { codec.encode_misprediction( CodecMisprediction::LiteralPredictionWrong, false, @@ -189,7 +190,7 @@ impl<'a> TokenPredictor<'a> { } PreflateToken::Reference(target_ref) => { let predicted_ref = match predicted_token { - PreflateToken::Literal => { + PreflateToken::Literal(_) => { // target had a reference, so we were wrong if we predicted a literal codec.encode_misprediction( CodecMisprediction::LiteralPredictionWrong, @@ -250,7 +251,7 @@ impl<'a> TokenPredictor<'a> { self.commit_token(target_token, None); } - codec.encode_verify_state("done", self.checksum().hash()); + codec.encode_verify_state("done", if VERIFY { self.checksum().hash() } else { 0 }); Ok(()) } @@ -276,11 +277,13 @@ impl<'a> TokenPredictor<'a> { match bt { BT_STORED => { block = PreflateTokenBlock::new(BlockType::Stored); - block.uncompressed_len = codec.decode_value(16).into(); + let uncompressed_len = codec.decode_value(16).into(); block.padding_bits = codec.decode_correction(CodecCorrection::NonZeroPadding) as u8; + block.uncompressed.reserve(uncompressed_len as usize); - for _i in 0..block.uncompressed_len { - self.state.update_hash(1, &mut self.input); + for _i in 0..uncompressed_len { + block.uncompressed.push(self.input.cur_char(0)); + self.state.update_hash(1, &self.input); self.input.advance(1); } return Ok(block); @@ -305,7 +308,7 @@ impl<'a> TokenPredictor<'a> { block.tokens.reserve(blocksize as usize); - codec.decode_verify_state("start", self.checksum().hash()); + codec.decode_verify_state("start", if VERIFY { self.checksum().hash() } else { 0 }); while !self.input_eof() && self.current_token_count < blocksize { codec.decode_verify_state( @@ -319,11 +322,11 @@ impl<'a> TokenPredictor<'a> { let mut predicted_ref: PreflateTokenReference; match self.predict_token() { - PreflateToken::Literal => { + PreflateToken::Literal(l) => { let not_ok = codec.decode_misprediction(CodecMisprediction::LiteralPredictionWrong); if !not_ok { - self.commit_token(&PreflateToken::Literal, Some(&mut block)); + self.commit_token(&PreflateToken::Literal(l), Some(&mut block)); continue; } @@ -338,7 +341,10 @@ impl<'a> TokenPredictor<'a> { let not_ok = codec.decode_misprediction(CodecMisprediction::ReferencePredictionWrong); if not_ok { - self.commit_token(&PreflateToken::Literal, Some(&mut block)); + self.commit_token( + &PreflateToken::Literal(self.input.cur_char(0)), + Some(&mut block), + ); continue; } @@ -382,7 +388,7 @@ impl<'a> TokenPredictor<'a> { self.commit_token(&PreflateToken::Reference(predicted_ref), Some(&mut block)); } - codec.decode_verify_state("done", self.checksum().hash()); + codec.decode_verify_state("done", if VERIFY { self.checksum().hash() } else { 0 }); Ok(block) } @@ -394,27 +400,27 @@ impl<'a> TokenPredictor<'a> { fn predict_token(&mut self) -> PreflateToken { if self.input.pos() == 0 || self.input.remaining() < MIN_MATCH { - return PreflateToken::Literal; + return PreflateToken::Literal(self.input.cur_char(0)); } let m = if let Some(pending) = self.pending_reference { MatchResult::Success(pending) } else { self.state - .match_token(0, 0, self.params.max_chain, &self.input) + .match_token_0(0, self.params.max_chain, &self.input) }; self.pending_reference = None; if let MatchResult::Success(match_token) = m { if match_token.len() < MIN_MATCH { - return PreflateToken::Literal; + return PreflateToken::Literal(self.input.cur_char(0)); } // match is too small and far way to be worth encoding as a distance/length pair. if match_token.len() == 3 && match_token.dist() > self.params.max_dist_3_matches.into() { - return PreflateToken::Literal; + return PreflateToken::Literal(self.input.cur_char(0)); } // Check for a longer match that starts at the next byte, in which case we should @@ -436,7 +442,7 @@ impl<'a> TokenPredictor<'a> { let match_next = self.state - .match_token(match_token.len(), 1, max_depth, &self.input); + .match_token_1(match_token.len(), max_depth, &self.input); if let MatchResult::Success(m) = match_next { if m.len() > match_token.len() { @@ -445,7 +451,7 @@ impl<'a> TokenPredictor<'a> { if !self.params.zlib_compatible { self.pending_reference = None; } - return PreflateToken::Literal; + return PreflateToken::Literal(self.input.cur_char(0)); } } } @@ -453,7 +459,7 @@ impl<'a> TokenPredictor<'a> { PreflateToken::Reference(match_token) } else { - PreflateToken::Literal + PreflateToken::Literal(self.input.cur_char(0)) } } @@ -479,7 +485,7 @@ impl<'a> TokenPredictor<'a> { let match_token = self .state - .match_token(0, 0, self.params.max_chain, &self.input); + .match_token_0(0, self.params.max_chain, &self.input); self.pending_reference = None; @@ -497,9 +503,9 @@ impl<'a> TokenPredictor<'a> { fn commit_token(&mut self, token: &PreflateToken, block: Option<&mut PreflateTokenBlock>) { match token { - PreflateToken::Literal => { + PreflateToken::Literal(lit) => { if let Some(block) = block { - block.add_literal(self.input.cur_char(0)); + block.add_literal(*lit); } self.state.update_hash(1, &self.input); @@ -510,7 +516,7 @@ impl<'a> TokenPredictor<'a> { block.add_reference(t.len(), t.dist(), t.get_irregular258()); } - self.state.update_hash(t.len(), &mut self.input); + self.state.update_hash(t.len(), &self.input); self.input.advance(t.len()); } } diff --git a/tests/end_to_end.rs b/tests/end_to_end.rs index 020f0df..ad44920 100644 --- a/tests/end_to_end.rs +++ b/tests/end_to_end.rs @@ -10,7 +10,7 @@ use std::path::Path; use std::{mem, ptr}; use libdeflate_sys::{libdeflate_alloc_compressor, libdeflate_deflate_compress}; -use preflate_rs::{ +use preflate_rs::preflate_container::{ compress_zstd, decompress_deflate_stream, decompress_zstd, recompress_deflate_stream, }; diff --git a/util/src/main.rs b/util/src/main.rs deleted file mode 100644 index adaa8f2..0000000 --- a/util/src/main.rs +++ /dev/null @@ -1,49 +0,0 @@ -use std::env; - -use walkdir::WalkDir; - -mod search_signature; -mod zip_structs; - -fn main() { - let current_dir = env::args().nth(1).unwrap_or_else(|| String::from(".")); - - let mut totalseen = 0u64; - let mut totalzstd = 0u64; - - // Use WalkDir to recursively search for files in the directory - for entry in WalkDir::new(¤t_dir) - .into_iter() - .filter_map(|e| e.ok()) - { - // Check if the entry is a file (not a directory) - if entry.file_type().is_file() { - // scan file for compressed data - let file_name = entry.path().to_str().unwrap(); - let file = std::fs::read(file_name).unwrap(); - - println!("File: {}", entry.path().display()); - let mut results: Vec = Vec::new(); - search_signature::search_for_deflate_streams(&file, &mut results); - - totalseen += file.len() as u64; - totalzstd += file.len() as u64; - - if results.len() > 0 { - for result in results { - totalzstd -= result.compressed_size as u64; - totalzstd += result.zstd + result.cabac_length as u64; - println!( - " Found compressed data s={:?} c={} u={} zstd={} cabac={}", - result.signature, - result.compressed_size, - result.uncompressed_size, - result.zstd, - result.cabac_length, - ); - } - } - } - println!("total seen ratio {}", totalzstd as f64 / totalseen as f64); - } -} diff --git a/util/src/search_signature.rs b/util/src/search_signature.rs deleted file mode 100644 index f80e2b7..0000000 --- a/util/src/search_signature.rs +++ /dev/null @@ -1,185 +0,0 @@ -use std::{ - collections::HashMap, - io::{Cursor, Read, Seek, SeekFrom, Write}, fs::File, -}; - -use anyhow; -use preflate_rs::decompress_deflate_stream; - -use crate::zip_structs::{ - self, Zip64ExtendedInformation, ZipExtendedInformationHeader, ZipLocalFileHeader, -}; - -#[derive(Hash, Eq, PartialEq, Copy, Clone, Debug)] -pub enum Signature { - Zlib(usize), - ZipLocalFileHeader, - Gzip, -} - -pub struct DeflateStreamLocation { - pub start: u64, - pub end: u64, - pub uncompressed_size: u64, - pub compressed_size: u64, - pub zstd: u64, - pub signature: Signature, - pub cabac_length: u64, -} - -pub fn add_location( - list: &mut Vec, - signature: Signature, - start: u64, - compressed: &[u8], -) -> usize { - let ret = decompress_deflate_stream(compressed, true); - match ret { - Err(_e) => { - //println!("Error decompressing {:?} {:?} at {}", signature, e, start); - return 0; - } - Ok(r) => { - //let mut dumpout = File::create(format!("dumpout-{}.bin", start)).unwrap(); - //dumpout.write_all(&compressed[..r.compressed_size]).unwrap(); - - let mut output = Vec::new(); - let mut encoder = zstd::stream::Encoder::new(&mut output, 9).unwrap(); - - encoder.write(&r.plain_text).unwrap(); - encoder.finish().unwrap(); - - list.push(DeflateStreamLocation { - start, - end: start + r.compressed_size as u64, - uncompressed_size: r.plain_text.len() as u64, - compressed_size: r.compressed_size as u64, - signature: signature, - zstd: output.len() as u64, - cabac_length: r.prediction_corrections.len() as u64, - }); - - return r.compressed_size; - } - } -} - -pub const HASH_TO_SIGNATURE: [([u8; 2], Signature); 6] = [ - ([0x78, 0x01], Signature::Zlib(0)), - ([0x78, 0x5E], Signature::Zlib(1)), - ([0x78, 0x9C], Signature::Zlib(5)), - ([0x78, 0xDA], Signature::Zlib(8)), - ([0x50, 0x4B], Signature::ZipLocalFileHeader), - ([0x1f, 0x8b], Signature::Gzip), -]; - -pub fn search_signature(src: &[u8], index: &mut usize) -> Option { - let signatures: &HashMap<[u8; 2], Signature> = &HASH_TO_SIGNATURE.iter().cloned().collect(); - - if src.len() == 0 { - return None; - } - - for i in *index..src.len() - 1 { - let mut signature: [u8; 2] = [0; 2]; - signature[0] = src[i]; - signature[1] = src[i + 1]; - if let Some(s) = signatures.get(&signature) { - *index = i + 2; - return Some(*s); - } - } - None -} - -pub fn search_for_deflate_streams(src: &[u8], locations_found: &mut Vec) { - let mut index: usize = 0; - while let Some(s) = search_signature(src, &mut index) { - match s { - Signature::Zlib(_level) => { - index += add_location(locations_found, s, index as u64, &src[index..]); - } - Signature::Gzip => { - index += add_location(locations_found, s, index as u64, &src[index..]); - } - - Signature::ZipLocalFileHeader => { - let _r = test_zip_stream(src, &mut index, locations_found); - } - } - } -} - -fn test_zip_stream( - src: &[u8], - index: &mut usize, - locations_found: &mut Vec, -) -> anyhow::Result<()> { - let contents = &src[*index - 2..]; - - let mut binary_reader = Cursor::new(&contents); - - // read the signature - let mut zip_local_file_header = ZipLocalFileHeader::create_and_load(&mut binary_reader)?; - let signature = zip_local_file_header.local_file_header_signature; - if signature != zip_structs::ZIP_LOCAL_FILE_HEADER_SIGNATURE { - return Err(anyhow::Error::msg("No local header")); - } - - // read extended information - let mut file_name_buf = Vec::::new(); - file_name_buf.resize(zip_local_file_header.file_name_length as usize, 0); - binary_reader.read_exact(&mut file_name_buf)?; - let _path = String::from_utf8(file_name_buf)?; - - // Extra field - let pos_local_header_extra_field_max = - binary_reader.stream_position()? + zip_local_file_header.extra_field_length as u64; - while binary_reader.stream_position()? < pos_local_header_extra_field_max { - // Expect a ZipExtendedInformationHeader - let zip_extended_information_header = - ZipExtendedInformationHeader::create_and_load(&mut binary_reader)?; - - // Do we recognize the type? - if zip_extended_information_header.header_id - == zip_structs::ZIP64_EXTENDED_INFORMATION_TYPE_TAG - { - // Load the Zip64ExtendedInformation..this will consume DataSize bytes even if there is an error - let zip64_extended_information = Zip64ExtendedInformation::create_and_load( - &mut binary_reader, - false, - zip_extended_information_header.data_size as u32, - zip_local_file_header.uncompressed_size as u32, - zip_local_file_header.compressed_size as u32, - 0, - 0, - )?; - - zip_local_file_header.uncompressed_size = zip64_extended_information.size_original; - zip_local_file_header.compressed_size = zip64_extended_information.size_compressed; - - // No need to skip forward as ZipExtendedInformationHeader.DataSize bytes were consumed by load above - } else { - // Just skip over it - binary_reader.seek(SeekFrom::Current( - zip_extended_information_header.data_size as i64, - ))?; - } - } - - // Handle the compressed DATA. Currently only Deflate (8) and uncompressed (0) are supported. - if zip_local_file_header.compression_method == 8 { - let deflate_start_position = binary_reader.stream_position()?; - - let amount = add_location( - locations_found, - Signature::ZipLocalFileHeader, - *index as u64 + deflate_start_position, - &contents[deflate_start_position as usize..], - ); - - *index += binary_reader.position() as usize - 2 + amount; - } - - Ok(()) -} diff --git a/util/src/zip_structs.rs b/util/src/zip_structs.rs deleted file mode 100644 index ae9744f..0000000 --- a/util/src/zip_structs.rs +++ /dev/null @@ -1,237 +0,0 @@ -use byteorder::{LittleEndian, ReadBytesExt}; -use std::io::{Read, Seek, SeekFrom}; - -pub const ZIP_LOCAL_FILE_HEADER_SIGNATURE: u32 = 0x04034b50; -pub const ZIP64_EXTENDED_INFORMATION_TYPE_TAG: u16 = 0x0001; - -#[derive(Clone)] -pub struct ZipLocalFileHeader { - pub local_file_header_signature: u32, - pub version_needed_to_extract: u16, - pub general_purpose_bit_flag: u16, - pub compression_method: u16, - pub last_mod_file_time: u16, - pub last_mod_file_date: u16, - pub crc32: u32, - pub compressed_size: u64, // only 4 bytes in the regular header but can be 8 bytes if Zip64 - pub uncompressed_size: u64, // only 4 bytes in the regular header but can be 8 bytes if Zip64 - pub file_name_length: u16, - pub extra_field_length: u16, -} - -impl ZipLocalFileHeader { - pub fn create_and_load(binary_reader: &mut R) -> anyhow::Result { - let mut zip_local_file_header = Self::new(); - zip_local_file_header.load(binary_reader)?; - Ok(zip_local_file_header) - } - - fn new() -> Self { - ZipLocalFileHeader { - local_file_header_signature: 0, - version_needed_to_extract: 0, - general_purpose_bit_flag: 0, - compression_method: 0, - last_mod_file_time: 0, - last_mod_file_date: 0, - crc32: 0, - compressed_size: 0, - uncompressed_size: 0, - file_name_length: 0, - extra_field_length: 0, - } - } - - fn load(&mut self, binary_reader: &mut R) -> anyhow::Result<()> { - self.local_file_header_signature = binary_reader.read_u32::()?; - self.version_needed_to_extract = binary_reader.read_u16::()?; - self.general_purpose_bit_flag = binary_reader.read_u16::()?; - self.compression_method = binary_reader.read_u16::()?; - self.last_mod_file_time = binary_reader.read_u16::()?; - self.last_mod_file_date = binary_reader.read_u16::()?; - self.crc32 = binary_reader.read_u32::()?; - self.compressed_size = binary_reader.read_u32::()? as u64; - self.uncompressed_size = binary_reader.read_u32::()? as u64; - self.file_name_length = binary_reader.read_u16::()?; - self.extra_field_length = binary_reader.read_u16::()?; - Ok(()) - } -} - -pub struct ZipExtendedInformationHeader { - pub header_id: u16, - pub data_size: u16, -} - -impl ZipExtendedInformationHeader { - pub fn create_and_load(binary_reader: &mut R) -> anyhow::Result { - let mut zip_ext_info_header = Self::new(); - zip_ext_info_header.load(binary_reader)?; - Ok(zip_ext_info_header) - } - - fn new() -> Self { - ZipExtendedInformationHeader { - header_id: 0, - data_size: 0, - } - } - - fn load(&mut self, binary_reader: &mut R) -> anyhow::Result<()> { - self.header_id = binary_reader.read_u16::()?; - self.data_size = binary_reader.read_u16::()?; - Ok(()) - } -} - -pub struct Zip64ExtendedInformation { - pub size_original: u64, - pub size_compressed: u64, - // Also in the Zip64 Extended Information Extra Field, but not - // interesting to us currently... - pub relative_header_offset: u64, - pub disk_start_number: u32, -} - -impl Zip64ExtendedInformation { - /// Loads a Zip 64 extended header based on the existence of a proper record type and - /// the values of the current header fields being 0xFFFF or 0xFFFFFFFF - /// # Arguments - /// * `binaryReader` - /// * `f_local_header` - true if this is a local header which must contain both original and compressed file size fields - /// * `extended_info_size_in_bytes` - size of the extended - /// * `size_original32` - value in current header - /// * `size_compressed32` - value in current header - /// * `relative_header_offset32` - value in current header..pass 0 if current header doesn't have this field - /// * `diskstart_number16` - value in current header..pass 0 if current header doesn't have this field - pub fn create_and_load( - binary_reader: &mut R, - f_local_header: bool, - extended_info_size_in_bytes: u32, - size_original32: u32, - size_compressed32: u32, - relative_header_offset32: u32, - diskstart_number16: u16, - ) -> anyhow::Result { - let mut zip_ext_info_header = Self::new(); - zip_ext_info_header.load( - binary_reader, - f_local_header, - extended_info_size_in_bytes, - size_original32, - size_compressed32, - relative_header_offset32, - diskstart_number16, - )?; - Ok(zip_ext_info_header) - } - - fn new() -> Self { - Zip64ExtendedInformation { - size_original: 0, - size_compressed: 0, - relative_header_offset: 0, - disk_start_number: 0, - } - } - - fn load( - &mut self, - binary_reader: &mut R, - f_local_header: bool, - extended_info_size_in_bytes: u32, - size_original32: u32, - size_compressed32: u32, - relative_header_offset32: u32, - diskstart_number16: u16, - ) -> anyhow::Result<()> { - let mut unprocessed_extended_info_size_in_bytes = extended_info_size_in_bytes; - - let result = self.load_without_seek_forward( - binary_reader, - f_local_header, - &mut unprocessed_extended_info_size_in_bytes, - size_original32, - size_compressed32, - relative_header_offset32, - diskstart_number16, - ); - - if unprocessed_extended_info_size_in_bytes > 0 { - binary_reader.seek(SeekFrom::Current( - unprocessed_extended_info_size_in_bytes as i64, - ))?; - } - - result - } - - fn load_without_seek_forward( - &mut self, - binary_reader: &mut R, - f_local_header: bool, - unprocessed_extended_info_size_in_bytes: &mut u32, - size_original32: u32, - size_compressed32: u32, - relative_header_offset32: u32, - diskstart_number16: u16, - ) -> anyhow::Result<()> { - if f_local_header { - // Local Header must include BOTH original and compressed file size fields (see APPNOTE.TXT) - if *unprocessed_extended_info_size_in_bytes < 16 { - return Err(anyhow::Error::msg("EndOfStreamException")); - } - - self.size_original = binary_reader.read_u64::()?; - self.size_compressed = binary_reader.read_u64::()?; - *unprocessed_extended_info_size_in_bytes -= 16; - - if *unprocessed_extended_info_size_in_bytes == 0 { - return Ok(()); - } - } else { - if size_original32 == 0xFFFFFFFF - // Only expect this field if 32bit field is 0xFFFFFFFF - { - if *unprocessed_extended_info_size_in_bytes < 8 { - return Err(anyhow::Error::msg("EndOfStreamException")); - } - - self.size_original = binary_reader.read_u64::()?; - *unprocessed_extended_info_size_in_bytes -= 8; - } - - if size_compressed32 == 0xFFFFFFFF { - // Only expect this field if 32bit field is 0xFFFFFFFF - if *unprocessed_extended_info_size_in_bytes < 8 { - return Err(anyhow::Error::msg("EndOfStreamException")); - } - - self.size_compressed = binary_reader.read_u64::()?; - *unprocessed_extended_info_size_in_bytes -= 8; - } - } - - if relative_header_offset32 == 0xFFFFFFFF { - // Only expect this field if 32bit field is 0xFFFFFFFF - if *unprocessed_extended_info_size_in_bytes < 8 { - return Err(anyhow::Error::msg("EndOfStreamException")); - } - - self.relative_header_offset = binary_reader.read_u64::()?; - *unprocessed_extended_info_size_in_bytes -= 8; - } - - if diskstart_number16 == 0xFFFF { - // Only expect this field if 16bit field is 0xFFFF - if *unprocessed_extended_info_size_in_bytes < 4 { - return Err(anyhow::Error::msg("EndOfStreamException")); - } - - self.disk_start_number = binary_reader.read_u32::()?; - *unprocessed_extended_info_size_in_bytes -= 4; - } - - Ok(()) - } -}