From bd9df9a6ec1d3153e5882b03a011d92a48dc3206 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Fri, 24 Oct 2014 20:49:30 +0200 Subject: [PATCH] gsdx: Add some comment on GSTextureCache + schematics Note: docs/TextureCache.odg was created with libreoffice. Not perfect but give a nice overview --- plugins/GSdx/GSTextureCache.cpp | 29 +++++++++++++++++++++++++++++ plugins/GSdx/GSTextureCache.h | 2 +- plugins/GSdx/docs/TextureCache.odg | Bin 0 -> 41692 bytes 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 plugins/GSdx/docs/TextureCache.odg diff --git a/plugins/GSdx/GSTextureCache.cpp b/plugins/GSdx/GSTextureCache.cpp index 29cd59090a..b4607af7b7 100644 --- a/plugins/GSdx/GSTextureCache.cpp +++ b/plugins/GSdx/GSTextureCache.cpp @@ -288,6 +288,8 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int return dst; } +// Goal: invalidate data sent to the GPU when the source (GS memory) is modified +// Called each time you want to write to the GS memory void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, bool target) { if(!o) return; // Fixme. Crashes Dual Hearts, maybe others as well. Was fine before r1549. @@ -298,6 +300,8 @@ void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, boo if(!target) { + // Remove Source that have same BP as the render target (color&dss) + // rendering will dirty the copy const list& m = m_src.m_map[bp >> 5]; for(list::const_iterator i = m.begin(); i != m.end(); ) @@ -341,6 +345,7 @@ void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, boo if(!s->m_target) { + // Invalidate data of input texture if(s->m_repeating) { vector& l = s->m_p2t[page]; @@ -361,6 +366,7 @@ void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, boo } else { + // render target used as input texture // TODO if(b) @@ -419,6 +425,8 @@ void GSTextureCache::InvalidateVideoMem(GSOffset* o, const GSVector4i& rect, boo } } +// Goal: retrive the data from the GPU to the GS memory. +// Called each time you want to read from the GS memory void GSTextureCache::InvalidateLocalMem(GSOffset* o, const GSVector4i& r) { uint32 bp = o->bp; @@ -443,6 +451,14 @@ void GSTextureCache::InvalidateLocalMem(GSOffset* o, const GSVector4i& r) { if(GSUtil::HasSharedBits(bp, psm, t->m_TEX0.TBP0, t->m_TEX0.PSM)) { + // GH Note: Read will do a StretchRect and then will sizzle data to the GS memory + // t->m_valid will do the full target texture whereas r.intersect(t->m_valid) will be limited + // to the useful part for the transfer. + // 1/ Logically intersect must be enough, except if we miss some call to InvalidateLocalMem + // or it need the depth part too + // 2/ Read function is slow but I suspect the swizzle part to be costly. Maybe a compute shader + // that do the swizzle at the same time of the Stretching could save CPU computation. + // note: r.rintersect breaks Wizardry and Chaos Legion // Read(t, t->m_valid) works in all tested games but is very slow in GUST titles >< if (r.x == 0 && r.y == 0) // Full screen read? @@ -527,6 +543,7 @@ void GSTextureCache::IncAge() { int maxage = m_src.m_used ? 3 : 30; + // You can't use m_map[page] because Source* are duplicated on several pages. for(hash_set::iterator i = m_src.m_surfaces.begin(); i != m_src.m_surfaces.end(); ) { hash_set::iterator j = i++; @@ -595,6 +612,8 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con if(dst->m_type != RenderTarget) { + // GH: caller was modifier to never hit this code. I don't think a zbuffer + // can be reused as an input texture // TODO delete src; return NULL; @@ -700,6 +719,9 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con GSTexture* st = src->m_texture ? src->m_texture : dst->m_texture; GSTexture *dt = m_renderer->m_dev->CreateRenderTarget(w, h, false); + // GH: by default (m_paltex == 0) GSdx converts texture to the 32 bit format + // However it is different here. We want to reuse a Render Target as a texture. + // Because the texture is already on the GPU, CPU can't convert it. if (psm.pal > 0) src->m_palette = m_renderer->m_dev->CreateTexture(256, 1); @@ -734,6 +756,7 @@ GSTextureCache::Source* GSTextureCache::CreateSource(const GIFRegTEX0& TEX0, con if(tmp != NULL) { + // tmp is texture before a MultiSample resolve m_renderer->m_dev->Recycle(dst->m_texture); dst->m_texture = tmp; @@ -1159,11 +1182,16 @@ void GSTextureCache::SourceMap::Add(Source* s, const GIFRegTEX0& TEX0, const GSO { // TODO + // GH: I don't know why but it seems we only consider the first page for a render target + m_map[TEX0.TBP0 >> 5].push_front(s); return; } + // Remaining code will compute a list of pages that are dirty (in a similar fashion as GSOffset::GetPages) + // (Maybe GetPages could be used instead, perf opt?) + // The source pointer will be stored/duplicated in all m_map[array of pages] const GSLocalMemory::psm_t& psm = GSLocalMemory::m_psm[TEX0.PSM]; GSVector2i bs = (TEX0.TBP0 & 31) == 0 ? psm.pgs : psm.bs; @@ -1222,6 +1250,7 @@ void GSTextureCache::SourceMap::RemoveAt(Source* s) { m_surfaces.erase(s); + // Source (except render target) is duplicated for each page they use. for(size_t start = s->m_TEX0.TBP0 >> 5, end = s->m_target ? start : countof(m_map) - 1; start <= end; start++) { list& m = m_map[start]; diff --git a/plugins/GSdx/GSTextureCache.h b/plugins/GSdx/GSTextureCache.h index 55a54ef40e..2a748bf19e 100644 --- a/plugins/GSdx/GSTextureCache.h +++ b/plugins/GSdx/GSTextureCache.h @@ -93,7 +93,7 @@ public: public: hash_set m_surfaces; list m_map[MAX_PAGES]; - uint32 m_pages[16]; + uint32 m_pages[16]; // bitmap of all pages bool m_used; SourceMap() : m_used(false) {memset(m_pages, 0, sizeof(m_pages));} diff --git a/plugins/GSdx/docs/TextureCache.odg b/plugins/GSdx/docs/TextureCache.odg new file mode 100644 index 0000000000000000000000000000000000000000..1c7203d897140a71dc583f3f7c1d0820f64032d9 GIT binary patch literal 41692 zcmbT7V{m3o7^dIY<|LU|6Wg|J+qUgYl8Nn!HL-2mw(-W!=Bus!v9&+8c28BG>UyfH ztGcVtbGq;QY6WR9aC86w8UXn4)ey}EqZ^_))4|lx!NJDT*wDq& z-j3eQ&V)z;L`h0ff`(80pe*jeF!>yS91?M%uN0Qj$9e|M;2 z;c9DSXJ~2TOz-l)s&o!^=8+0=;s~%fu-{D(Bqc8kru_}Te)PG)YIvt%eXl8)CM5NkF$42JIg!G@;!^QR3CZdJBUlFc>o zi-PD6nI>Ci$Rv3nDJeKE=#YVSQ?FBVrJi`zMJy8XrG|giEq}R0@sk^faSc; zHc#mkK|ke>D45_xI^q6mSnccHJJBE2rE((sD-@6%S(V@VdE^gT^PC9wGXpo51Br59 zS#`8b`CtIXY53+PG`ML$L|EJzAk021KxoWy-ww(CuIZdQ@29|eZP={n-vbqe+mh|>+>3&B?~ z9-oX{4rwbMZ-3w?|Cf0r;2AA7Sg7S}hDa(+9G^%$PALa@2+Gdw`O?N&F`k+V1C)jW z&v|C)cuLXY^XW@&ZEb{k`VSZsrJn!Q@d*7F(`sAt`&vzWrX6u0;AJjVLK*EPkv~5N z=~!45!?AVbfb@m_E7Zk3QR6pe!24@WqIBwrIKR~6RnbG90F@~9Fqy)a|NC$fJTBV| zw;wP%iGqYAiJ|+B`@Wu7U4kmkX%LhZ-r{qgKjF-3Zc#MwE$2z0F@`ylJ+b>4u6*I^ z25GeODdFp*J91c<&F=4*w^`WxX>P)_U&?#Qm&oheDE&L=OE7=lVfUx&?V9z$=i8_- zQv9x=lDhcUrUyyuA*R-maxO9dGsw%C`l$Q|dU{5|eZOuGi%z>WmgkM&SU4;~b%+Z7 zUR3BC=gcI*CxhqL+vwMuKWQQn|JU7t{b!iZrL{^USXa--d5!YSKEcy93|x@nZL<1^ zIiIlG6)F3+%$}nc>b=K{sg)$?Gx!J#62 zad9X&Kwgc9M{Jwpx8G%*mUWYu6)q!?72vBCi3KY{yTQqM9?(@^o;MmSo2(xS}?vIodg}|G)%# zSu!iAQrxtpwWVVT=wB2&(C$bG@>2yS?|SJ)&^eI2`}(i!eWTkx4RFAlcb-7YT2w#-s7aHL zpGn|`E1VhN0*Ut(0B&y9d-6%Wj7a8}K=5M=#)WR@l@?|CsCMsTa%(YOp=-sqh239reFys$;6f-EE-65yCbi4dueAcN(J8H z)HiFN;c^PC__sCtB1GXc0h+kQ@Lz{~{N3Naz-Ha=7EFD!S(E1qANaD8roWy0v4+w1 z`)j*u2LxpE$~Zf!S=Z*&w5!SqVPvza9d@k#z=Bl&c3^2|{gp}Lf49KT=lprSH|Q+N zOeZBONTVejWm;OUp?tY@+jZIP^3;^M`?L1<5$x->SsC)q7_{@-E>Jr6>xzKa71&$> z%2!h!8MI!c15bv&e^dhoMCp zDQ0H{mFTQr5Tdw-ZQJDzJGQCgs6Deqww!O&SwFEVm#1|+{ASBjKF7M?^6Sk-6CcU7 zIR4@8R0d*Yy6d+yPH|-?N7#T~^$o2&=*RQ@7*A65R|1;I>N2}5Qnr9AHvP^jn|>}3 ztyh@9)l38ZeD@phRy`0;J){jlpnsblkMHd=!B0pLO-?j^1c9pdHBdKIw$nSr+nch# zw6;A-glN#bpUA}A5J(z1k>tgqNYE<1Qrh@5Vat!prPC-*%Snp19G&|;bgnTQr2|oi z4#Hss2?bSAUOso)uza3OYU$(C(blGA6iq}O<#c;6nvs!V!ICj*vSH`Wm%HrxlTt+$ zV;d(7C3;XnSXvrxY==5l6rGak2QIF)ot@aO4O@k!7F9A1KK|9|>FN17?$4i_wZ_8- z2c&fN_V(ho@5O-v1|}w?spGps3)AbtR*EoEVf}_I>&JJym=tnZJ;z}PxC*#dTTQmO zbi<(luB*`Eg5DPTu|l(~ms!q$Xq30P&zV0KC#0#QT~@4)LoVUEtu2Zp8qlyhg0oEi zNtr4KQe#Ts031N-agMj$`BD`Yz1}?&NO@4N0V(QggC$zt*AT8fz&4ZJ-tV$;d8tYp z>Y0s&MMhS(Rj0bRxL94^7b5~ZsidT2eQnJFegKRhfE5{LCx_b|v2;+q6cZVWGVuEK z^))}AC;&CLL@pato=&%|!TaedG7`oobQ(*~!|>zvp+r6x(#nxu1uk#f^Ei8&?~Nuc zMS}G4Y7;I29TuYD>;2`fMOs}Q>+0>}+Mj?H`1VnXw_R|vT5m3huM#cocV8lz?WK4l zMrI_LLbNlzU^0t=Yzzh=FT!-%7A7S6qOV%_8xH)hn~Mv;U*Sdo<`Y~12$KZn7Jx+v z%?BtB;DZK$3zG?-gUOpuW&Oa$22A1L;s$!_Ag* z7Z-N{c_FQU2vg0iR%Z%nmQ-|0FBaXAv>*>rJB@e()f6H?5?KTHA1G@;7DzOJT>;S_@&qPS$N=;LpkBZc z30A6VVJd(uh1D|9Oo^1XC$AD@lm{LWSYse;W@e^_~zYaiId1Q-rr zbwDx({RcWvNXh{T7jR4Y8`J_4Hm{KqsRnX82>Th+M0j$;3gqe8YJVt(Nm~VZGQd!9 z@;M93@QadIO30~!!;xHh^Vbhi<-6#sKPKpv@g$sSp%cF~Wl(gf!ph;}y_}Qv@|yMO zqye!orRE-^J!r8&7)mgCfrOvdSF82m;jj+#Kp5KSTL7^S{0h_#d=kLFB`!8053PET z;tNgVxH))ln1TZ43e?V_1TWX&K2Xb#1RA>MI&|#V^YY!PMUMl?)PG)<9oPi424X<> zO9%Z~3Q{bkMg}LzQh;z*5ZWAd^nL%0VxuCGe!^+J(?~2(({?COB16U4qe?RF5)4|Y z|8b^{gvSA3>Bo7$3Fi-KgP01CrnFBAgaD-Nfc6H5r-(`bx*^Vfgn{ZIOc54@*2j8z zK!Z3G;)@jJfiI8U^a(;z+F&Dujz-gWL0=S@#VR_C8fhkVsE0rO;o|1a-V~pzme&LH z)sV$j6JVjS4(gVZi#=OSJFQ5`yTXtiqmZ3dSA18Grr8JW zO$R~F^*Z~-K^4$A0v^kHgRl*T7vKZ|f=Ivzk1YJL&(pyD3~=ag4;UK!5t0w!?YP<6 z+Pb>3`$IAOI1%I-nCtxh?D!7z6#4HDm>#TL0gs_a9k*f8?NL+*fu&+Pl>Qs)n}K1; zWqF%*D*D+pHX+6AreI@vzv)>RVPGvOZ`qr5(V1OUTD?j$lNUJ|CFEFSGEH8EKuRqD z;K+jyl@aJl=@(Mc!@EF%=PRTR&EIW0j+vL@&Aq|O<$i^i25?2>$CqP!`b3G`6S6Sk zV8DxwaNPas(HGkB-tB`JXrz$O33&>FbJRyR$d7hng(Hc>c!1PyYuh`35v^tx37w8E z)4K*mq6xOJvx?cMI;GN&p`3xwmx8}(8fRhz7qUG)9`+_KV9B@D`3Bu!n z?ZxrjLL<>VeP}cpPyciOfNaFe@Y+@0CqTg zIO!e!9Syfj;pH9s<}fr+H;+KUfw5Nl)><$#bbstwgx8I%G#j)8rHB4d;y3{q}2wF+61I^OPj`|BLqqG*|b-xB;mYsXYeJnI-?Ui@3ALLc#(gb z(zN3gC(j@*vTQR3Ba4z|Py+9YG)F+k2hH5cpDp(mxsjZ&t}#X`n}{E8JWpjTgJzQr zAGA+wr$0&iHEgA&U+xqP0?5I}QPq!O+or3ybfAqGAm|krC3Z7MPnCfeH!f_+)V~LB z=SMrJqR}FKh%2O3$g~kqnyD0_imR4Nei<1L;KEp_f~1OMv#&X*NMPTO9MWpPkoxnY zkDt1{p6h?TTGw>PNR53x z@-i75)C0Se^Fq?6G3l}knps?asZ=evW`tH!E1j2FJHEZ=w+$Jr{8TUzvop&^h(=sa z?i^3XW&dnnF*bM%Z~l|ynsY;5#`;w?NiH~bex8|X1w(5Ly#2jbzh=^Si-~Hm6!tIA zO|=RQFL(TtDb_ErYQ%u)WV}Fw66YAwxFmc}I59mxU56M7K{}aBqnChDfe1vK%QvG$ ztZpOQqmy5<(=)I%K>=&wtp6&OYkMfgL3TyBgh#2$giaPrsR`2OWWVA&eWJ4^?*Q_PAOZ89y!-+k;r~^$;&7_S}e~oQTAc?K;Qu&cv5JlKRg18|^*y z__9C1Y6tS2nekmqOM1Vxg3Yic212NmNa_eR&J6<30~F+){BV5Y)b4@PyR?l338N`g zxu1ND_x<+T=187KSUzfO#F2I7$dXMyI8it$srsreI@JuS<;Xrz8b1m+tzr?6pmIj} z3UhAQ@NB#Dt(J8&?OMtHjwXRa#t~o+Bh(;M4%AA=mmU*I&wKh7xRbK86y=@`dwL32 zwAWJ2;8g*wiSIZg2VR3y7Z9JpW2LS7_V~)v#?W&(xtyE``8W`I`W1lsBEt?Iqgd0^ z4kd_mAQP_21C6zu9_ve9x#FzmFfCTp_bF(E@xM;=pF0hlDtj)oKB`C$n&dx^WtH-yo@N*>2|58_pL9L*okM@JW81ROuZF#g~>`R zk{;ml(RW;`ntjm}L9j@#D+aF;U#mHg*PYy%ZJGTXB&gPw0(W=Km+Q^>CGG9ryuY~N zqTQ%gFyR+5MNda|mBF?@wWrgs7vqx(S_3?U9d>sy(%yQDe`NmUN$6>y+s*Y+m+~>6 zBLFYauUCX9vk_r}k|qx+UWl6l4vn!h|r`8fNmM&YrH?suFMZp;J4LU zZZAPvL8-Ow%xOyj)<9?XVK)83KkfZ-I}Qa54Mrvo?@ujJa>Aw2NPp0Un}3K^DD=Ec ztTHF88xQPD$r{`F3@o?Kx__{h`<`GH)F-FB>jum51p2c4vJ2^oe?G?NMtB0mS5zxw zrQUSKYtCeL@ZR@OosTJzNT=j4EGh&w_INq99D<~tNH$Y>u`V0e#K@Mw5wzE5uEuCS zudPaTgb4}y?>*!n%gLS0rEEXH^|L>ST(8ZZ&_bQFbrAZPAV0-ng&u$1FBcAf4*smB z(y%KhtSsnvVA{@1GSs&+TXjpxsO`x~n9E%-z~;&*rS38a0iW`{i`nKj|7`wRUs7PL zInHQ~3a5U~VwAja|MXkmMN@MfnMn^fOG@!OkpH0=akA7_LhkK z{58x@jS+HlpM0y0h5a}kt~;;N;z)ESp_Wf-{uUONc;L_r-LMqRlrDbS?c0Q)z$ zr$}`$@26sYe=r49->bcm(xnaJSDqK?4~Me@2UkA_j`wPJ$zFl8!BpMspS?rwr!^hq zuOIi3)FIw9ZiA1`;70;pB7yq+3-(cU+f_=J!ZA&P+wk;-Silm}dfMeyESTSQpc_j2 z+M0`{vFVdc1xK1{8-qe}ik4hdNInovne?E0!sf;9uCjJ^ac2Ta8f(Ov-W8Ri#oEeU z&nvaZ(-SO9kYsCK57g6ocX`LWIUiZSD{`+u-HWmD=d$7VZpDM38@wi8N5pN0T+?;lfO*MM3x%(M9wd zh}_3zli_Cpn6L|v%mcj!@$WGp=)L3tx~30aj(C}L59K_sTxAdBv8*6#3K z_QE`Khl}aGCHhyryid2F3~KjvsGF(7HCC0K-BE~jdz(}ib-ljN9`_^Y2Don59%H1M z@7z~(IXv`~sh4XniJz?}G8djclWwivOMDF!&2t2MiM`3$toR~LVcls8FIUhgsV={7 zlI;66`+Qxo;Y3DID}5ad?||-#m&6fNt#)$z-i90iP3RvzaoK-FiZ~kS+%;&43dhN6 zi|XcPD3ue>6ew|!s*5IBxW9u3U= zI}38fWQimALuoQ!oKIms6f`TAHXFZX9RJEDdiU3Ch$oOrG9}QyW6HpFf59P_UPpPt zl(LZ&1*>>pSwQQ&coQp*pxo+YXJXWRz9pMqr_k~YEnHjx5b0_SOC$cUzWw?5c)5;? zi>r9F$ZRYQHMdCQPM-bXr3(~kYovP~5_oN_-(Rk&G2Fae@Bv1OG;jNH&+sRcFw1}X zW~z^384k#(IbIn`9TIh);<)=A&6ZIl?L;O09yBKX!2O zRq;lKe0Ml-l_gI+d-x2|fp!A*KX|vVU^BeBhOU8KPEI~do0tzlJ_Q`d$*YT?AJ2wR zaWP>ZcDl=(T{rh5gYftq4XBqR%p#I*P<^$)z$RLDiefS3^5Z$65FZ>|Kxz>4i%Xpb zO$$$;5z(|P5i~ZiU5|s=^%`N)H2SrvU0~uC=hS6yRXCA3m~&o5$dHiFd5^Ti$EWJy z5o;)X7e2#FZowzC7G)J{!I=34?xQW|Ze;9$c{=NDr~Sig%0a`Wbfvt!eA@r>E{^Z@ zB&Pl8ePfv4Xla{rEXvem4-G8TMy#M!imucLTRA{aEy*Zn3M{N?gw)JzD0T;>-52e2 z1$@H#yf`!9Vdc5#`2bl9)mAe%3qSZ3M0F2M*kF91sJ`sfaYaw3$P-kdJ4Sb1$hGRj zc)kXo59hu$&%M?6`B4A!FdB<~%VYma-fxd2y-_+L3seCimvK;TQsja zC(|Tgt3rzEc~Lv;ce(6m`z<#Syzh{-yInuY=CYE74jnji58k-Tv403SH#xX`+c|TP z`!BOD`LrigbCiP_6X0k>pJ?tl#0KpCec13sCqFs%EAfssIM2bDaA!rP+Tvb^lP8SL_yF zA2t^k7g>lUuZ{R%l#!EJ1zRp?k5q80=nf-+ zJHI#BB+P=5A z(Y^)+fekAw6>PNjy}H-rL|4MaCGDExZPCJvE$(+WtZ1Q?gyZHC|!RIsp>=GS7HmDZbnWyZF5 zg5az5_x)u~kJb8`y43y&mcEoI&$l`=lh>+aL8+71AMC3c*j2K2W??`2fp@427A&dRE9I%5om|J~00VPQPw0436pIWW#m)q62ddQ0zE8VjEC zIa52x;aoKmlCU;Q@h~1{-c#GU^Tss+Vn3`{fTyG%loa+g%xd~QwNJ<_9eZDD@wM}* z(z?p|5n{4wj0LU0qxkA2_EVbsgVi-?=@Pd8Wj2DNxW9Yh{B)$rp}q$35v4SwEaT>- z?QshlYs95R;I90za4sAYN&ZlVtw-SANKUOGefCqvhf86Rfp;!7Cp`dUxG=1ppV2`s zv=3?duMt}LI-ER42EuEp>pXtsBk>s?Zku5!kCSk6_@Cr*|660NAJvtZe*?DX=d*nd zS>30-sv0ryMzXk#ixZ?8#H=kx^>Jp54fe13-a>2AT0J?|byC=a!8T3YM0_I1bQaF$Ry@rsv zF~F2sx+w3?+yNN(+;sO6YPSILKNol6f?~o^X(&DiEXJOXK#Qx4!7tn!HJH0q{PSy>$aT;nX z!ZiRlphSh)Z>nOZoBiDN3UjTrt@N%lK~uqm?)a$DL<8qH2ljrSe4cPo6Jo0_=YS&m@aiYMf33tKrM$K!-`Br4Az zw?Bi`@fTvhDyVg2?*KIYSHrX!hxsr$oaU2m2RK8O+r4ozkEVgTM*gGkXenrL?%F95 zR#ub^p6A~Du;4R2-8@1}C8`;)2X6ir+oy>i%OCyS(hn#&U6~zs%MBAs?3DRp>VVhj zhUSI$R}%aT8DdH2cERjL;;5eFW}E8kpR&CEZbR3L77Pj_P!*YZYjCSBy2EB11v`Mt z2?KW_vPoX{zx#>b<^h}GDskNzn~bp0hw--z)|E5j+g_@MI=;D09eAwGhbX{*vhRom z2?dw>8i366=lvO(H{dB{`qt=m0-ct|$zi4!sTIERCHa;HeF<)46HH_M@pY%B!@Pgn zr`w%F5Bf!A#dJ&e1p5V5(sN^Zmg8OA=~J<5@ZH8cLy#1DH7I`El%OLAF+}q)gyBta zU3L%4s{Fktr^#3QjADP)V&><)r2x|9whR0`hr0FOFriwz&uRbXG4-`N`A^LO677uC zBiVXBcQ$Z?N&6F~xGf?c+7!_25ia7wgNY%i>bC>?W-iFSi|y~}3<22Lc7Fzvtm+)Q zBS9$sLEPbRvNr^)f060E*sLRZ{_-vOwYNK)gcdYq<+nld_6SzJ2vvygWhsah&lo`mmhyEpha!Y%KKAQe!6YBh zA_bjlFDF8d&czzO;zu3QM@Nf97WQK^<-d5KTl|v&*fLzxmfr;ILX`Xi6#ssU?^mZF~# zL3^s-yeUcn41uO^F|2RNwZAY*8`pQaredv&u6zX5f5yZPb-jbYE_wbjy~Kc#-LTBv znEA(=a?|fjyKU}z^Xb*)xZmA=Gdy=46mGr3PIQFAY7vy$&rn)gLGxnCt+KjuY?c8O z{ins%$I*jHMa7*6M`60Xwr}nm4#vXCxn%vCZcH18TLz;;THsqlDcnsm+jWKo?lu$g z@W)n_<=2%lGZ$Qm?V{;6y;IY=1zLd!_4|fxx??2G?w8$&_O|Z>MFSe3^1ksV9BhyJ z#LRvF)&knf$U53fio3?#lgaymZauHvPwxIeSe1r@)GRO_@eaB@-|5M&H@8`r6J}vY zj*R_CA1diPlC0C2a-pC4;|H8^#l2xvAnrMcRij2Dw9PE9%ZqR0r!(lk;0W#y0kRQ4 z2Vn1}^smA-9)sw@@SP;tw_G|M@1}sy^a$B}%+6OM1EI!!Cb>yDE~XY-4Vgv4`^y1| zP36UOm^?CqQ`!kc-nUu{mDEMT%|I86M`{Ir+3=K<@aRby9I0oas63`V(#Mlj2yYr?eYv^#nu&9Y#n^9=Nn_bnfxj@(2*K z&68#iA^7ySoV07h(YlthPS~#-b2j~~sN)M5M&>fmfBZa&v?q|60~TzmmLSc)E3(jx zi2bmpwF4(j(TpN^qZ9tUP@5!Adui4h3OXCg<^T;Bp>$o_o8ons55bA9(vX?w-KGAR zkgzG@brMRjlqiSv0gcAenOqYa>e4ACD9<@m$J2<_2{-j&+Z!=lyU-Aruks2*2g*dT6LoMnjt@h*s9(&_b zYIXc$t)*ESbpvGbcDd5JqWE>UNm~IOMYSvIi@Yu%IVm`xZY>~a@g+$@O5d~VvQDr* zNDZh56E2vk99DTtHobJ=V{Nm`yvE;rkR*|!c@Uwu)qvj&q7M_FFea}P%ej~g6T*?pqQQ21-xPn>?mA{4is!gIf^BFM1gJ z6ig8Z;<@TxD%u14wL5;y!^};sH|n>gMQ4&$fV=YBJz@-| zN(@aDkRuQyBBqd5Wx3E>Sc10dR5x%(KsJXNGw?yrgv~mqKYl;i?n7ydEA)#KDgJJ! zYruzcIB7(*8g&J<(2WG^b0tb=y^a|4=CJFVwE%B=G|g9l4)5RJ-v>y^%EpWz7K}?+ ztu=Q&RQbL=g2?+Uqjg2k-ru`8J3Dh_KYH+do38_^?%TfZRLOn0XlQ8PoQ9RX{nOir zcr4yG1fpzfdud(MnKFK;V6Li)aiv6q>A0PflViff$;P%cH@A29;y{lsJjv~T#p8Sg zKj!Y{R@Yb~(!3sH<>z5pqxeNKiK;vx$fQRx~OF#4loptcuF63|52^(pTaZ zAGD-Ycs8McY>Tut(EKHwOW@KrQBDzQYCz1dG=%${88odKcs#!*)D)$kIhxE2l zLf--F*jWK^0T?@e3YZVa{_H^xXZ;5;3~3&qBJkDqb|vhYhaj_3Z;k{DxOcEufE<2? z&4E{lz2$&p58%InRfA}OvJxa}k;(GN!|Xu60k;i^8`wtE&m?dkK2D+4X0zLf09$~k z4oTU;mK9Yk1%Eo+3404kumGG5Sa1C^1j`6-PaL;$B+{mQ=B0`vIKTetUA>n7OOHS? z<&mVI>>xa#?QJmMN!uvcwD4;B*q|wM5gJL;W{s`88KUC{wMRy(&%z>_PZt9 zyJpCWZ2kqVaI{v#&45XHVY1AGFTF?_S`CUNjvRtVN;tWM=%Tvj7P159n%u#z+t1e7 zph%E`FA%@)0`L#f9kd6uV`ol)QJ5M`)j?MQHBW@`6DBa9&<2a}lQPiE0Hqi(vR``m zARK=;rU>sA){g@{M6oj!4djObLl_aj(`A1SsUKL(nS}kssP3a^>6O2gHFdBdpaCWx zM;*Fa^7HuJp4o7zOtO+a{ zDHuq}?`BZl!6nKZLU#$0Ph2bK<&6p4visf#l+!{fNT50!Q32+1F~bRkNnfvI)S2a%eOp?)kxSQhL+0Zns|( z;||XGrrkOLcO6maoH%hQTgNSV4B_c^oNy;}b^Hec|L!m+z%o67@MC9ScH4I^M}Xn< z?gc_g6*fq;cTjDOW%PM`-~V~8`{RzF`??)B1NZXEpyY z#XirU^Lf(VCXtRoy&G^>0_1NXdeI~ME0X&@)xJoZR|YSPDs z2C^X^V-lw$#S0ud>5^S+)?e;f#!DUBoL?q|QWFFOU?XogS}*VH5H4IsqEX~!dV6{8 zpn!DsuzZGW-yS5&FMU&Ihl1z*tU@Y(BuH~S_Fy~|b|Ck(X294EicM8zm>kNZZ(*Zlk#bbku*p~LkVcMkBqZLHDf<9$p% zeyxWDwzD?(U}YDzFQ*}z_ENJ*2SyLN7xXbsL`+wqBizlZi|b!zzpVVsu5tw_`PuSl z;!4sRz^#MxyiMP61B!=Dh@DRg3Wh%t1Szl>2nL1xx9>VUvPZd}qOuo(ePd>EG1Rz4 zpyQgd2mB-#%Tce&Dy-FHOM?+ha=1_An=6q+c2%UBxx(lNyZ9k$-+QkqrsRwvVaeD( zNL8o4WqLx8Ddl?_>AY{re6V;cx_PYzx&MmQ<#{%bWb-$3>>txO7ZK<>CJck`?L%+P zrvu@MGXyKn?AjYiBpmXD4_TMnKVv|M9jmzeV>xU~3DavXkK0-5wQhG8=S1P1^&E6% z0TwhN`NanjcFWsU`-}R_q0W9E`3>`pC#IGRhuk|LFPubVtbBwD37~H)zw~|P2#=$S zrH^!|b5+0TAa2CCwd2JST`w~iahGS`sgH0{dqA+%8VL;pCt^g7J#XrlmUi>FYua#T>?=(6Zjdj?fh`**xDPY7Z8Dm3O64s5 zKKLjMX1G=-9mnG6rsFEdt{^an7&$+QU@wDsR@p!KKd&?u6$@NtMO;ReED0zAIP)~n zPB#d?&S!Hw+e?a;rhA)bB%NdHNTQxog;Rt4?72|nW#V3i7JV|STx^t_y)h=0C(JG1 z(DD7!UR;P1vk=8_$yCu+a-4}jip0vGqG_Y5pvB55Kjxi%zg{}Et0nIfRUbfUFH31I z%kB^kQo3#~QE`Q*_-(a5&uTuYHk!b$+X}0aA2mU+(J6}+wpcLi*cqyBtS!6ugE|ZH z{{ruFeIHl-UsC;FPQ>}!9Oud7)<5oXgY~&tl49e6VbBJ%^k~w=6kR=)YbDzv3kxuq zB2mJ=fn_#4$-&yLvSA>}E+_)Ce*ErKHlRKa75amoc<*x*{1`2qCYT`} zpmbej5F(Pn8R$&RT$|PrXLcMvMIIxDZ@Ei3S9L*)(n&Jqe2sl@2m+-*+-?^h*WTN2H}W0+PqErv&l|b&Kc^%mCsE=3vy~RhPBg9GRknV{!&)jY z4G6GySUKM<{cLyN7-{-f2o*PeM|i-wt0k7zS7M)*%bjusltwq}*vSk;01 zA-P#u__ik-u<|mBx&|5A7=<8we9vxOdCd~vcQtfux=&`s3CLK?7EcKiBm-_0L^;O=4;r8ORjb(8H1<6WBzNtEf|K3>WqsOHe~I)YGwy&|*~g@TuK)-ffm6%8?O$! z)CiFXoz=$7pVZ@2X#q6`{*=_ejZ}rbE!Q39kt5P+v2_=(tQWtCzNvoBky|y93b%n) zi^J%!66(r%yPLUY4M|>wX7Y20plyQE)Q)nKNYYe>aHM1OxRZ+bV1%d(OaWM4TiOgT zMf^J^k68BW%Tvq9_rA@(T>oR4{L&WmS_@1aeE(g%Nbsh5ePZ{i5j z3J`Y`PfgR9Ek`ClK%pN=3O6^8F#Mruq@_EuTyTeo(#e^ws;{T|7iJ(Y8m3nlA;xRdLONXq^ z?Wwo`^^W$cXWhp{5*;#V5)=zb`79$Jo{yDePyUd`(u#O+D(mcES(`he8H(+Zr z&$xvJ#A&OPL9>VVvmW7$b_TaVv_M8ju+6)@S1hws&Xl{Xpi@-0nO;*Pd6JqC_qjU8 zga4yPj14sl$-B{`cm_|&54g#T{$U35k$TQmAH#gfZ5rH#bY(Y=F%e8bu1mKFAwAf1 z+Eg_x#C+nD_WpZ-O+orFs=(CezG-O__e_nC@Ix*MqeZ}F-xPSx|J7ctuK%xtua^aH zJM{vL-b#CAmH+t0^s`wZ_$58$%beeFo1O=L9Imn60ym0_B!DYgk%BC3jh$j|^;E>q zf-9Ro18Z0*z_6Dgyrlj&zgiEiI#ffDo!GmUt;AjHLRdsQ)yZRv30ImbX!9vvp~g+! zX>R-46Tjcor7IbF?|1_rEfoyeSC*Zfy^OY(uQ%;aG#yYnwj&OxfQMl*kW93`LDF<{itLA&5^BHWKkcNN=MIeys-N1wZ#71?4lxVqpYgrhJDm&ld@;O)ppvJEB*el z9Q*FJ!9gu0nkODFIs>SVw(NCXKI3)wdA!=*UQv>7*49O(Zn`!5HB-D@;d?PfcfB9Z z_s>6^mng8=kgPqIdp1(sMcDoFaq48;d?=Tnl@WEEf~f&bmFhZlqE68Bs}kmrI7uw& zw0Pc6c5Uupv%APn*gCCbn6o**>v2Y2jSE?<_iV_UVE_Q~Gmov5B5%GkJy1s&3nNu? zBvs+^A@c=~K)vK`33Wz1KlMga;Xup2YprG5VTRF5f=;ESJy2 z=KkJ+N|^z~y+cuSo+aN#CyjUjYLhy35+dGYRFyb5o0;Z7_U>Ne>e=B4*k5?*ie_c= zx2iMo-?l?Ki@{i6Zp+J+cDub7@ZI`Dxx{#Nc6UHiQbntr{Y^JMr|pv6&GwRaEfAQ=wn#$N!`#M@kS239Y}9&cqL(}vDPqYN zunpCJ@(Wi?eWAvc1squh4c0e0#sQAnWQSW_Z396H4S&}bJ0)4!S{tJIV6%hO`Sq`o zviVSgm9w&;$-;z5jE78AND%ub%j=UrZp*1z=}6ym3m>!X5mUige7|9RT0i$#7Vj?& zIwRDp1pTWVx&5ic&MEi_pX0^e`F_h4*Jf#icJP!%QAPWt`AkjE!MvD7Yj(5`v{NBc$ z*TWUj#BY7OC0KNxyMIMsL{SB_Qy_V6t*-Bf5nY;=AhUk`LHwZ7Dq0{cCo~QHk`xDE zyMX-iG)z5Yifh;)&7o`f2c-6qYHB>_1G7jJ?*+Zbnm1Tz6>1nv*$r?$zrZsNhx5fR zdpD@zeUMj^1*C{toJa~L&xvo}Ty}JEFl%D}KxKiLu47=a`OEwd?36^DNBf(w$cYa| z`Gqb+z+bJRPNDC``OiEq=Xd7l0_sz?>Pr!e<Jb|EV3JBD9w=`wA5Kit@3l11cg`~%T6V5c$?!P9m;#{Ja`ISf+Exdsa$od=;u~F zA*>wq=d$7R*VoarZp+IPu^er-v7lud|VwsBe zQ>Z_(Fl#0zhP^xpf8_dZFO7HBdOn(LNgn6&v(;jrGm*#QGpiNhvMs9i(LET(h`LiOyHva>@P80=G;)KBui5=o)yr6dL1vG5FG;d;Gzaifyt)pcmy` z0aPm+qiM^~S{NGI8!)N91~t;B&c))@BS}m$>0a7O;9ZuM9+Pr-LvW%@XSSUS1 z*wY+?jmdl<&UR0Tl?Pq@bhw%zYGmNZr;ryGQ z413{5d=*%?&&M_8nfR^9m3BsqT#Qkk!pI+X-{|T@WLKH&rRoN~e@R6B_)6Yz<*T9gl%!7y=n_n)x%`s$T+aeiJ=Rt5tOD#!g#fpJ~puo-#9$`pBlpNmUNUH$ld zj1K7!DJsl@eZ8~+ntO0>Ub#}pz`kQv?`BOJL_o>TnHEKxZqWZ=?VN&R?V>jy+qP}n zwr$(ClarjB*miP)6Wg|J+cu`Z|I}R0T+Lh67hT=e-PL>VcdfnF^Za&cJI@Ar&x};b zkr9#q>t7YaleNWztxoZ{Au#djoQt8BNTmLkEz!3;xgu{J-RJ~46~|(w^!HG1IRKzon9P zzBV?J9kYiBTpvV1+;T@&IDE80>Ds^c3k<^W_&0gLz}wWJd7t36ztuE?YkeDEejZEC z%HsY!D_WRnXR7eDu&UL&T`Wqa&cyg#nS==Fn*XK9->z%&(DaOB3RSh=`PpM0Dls313i7p&NDqQne*ubN0ujhM5h#_KO1-nt)hZf?!fdh>>dC4^l4 z{P38%u9`P`Q%y%=-@d+`xb$>&qh%>5DOIW0?fp-3JiiwNzZUR4H-k-+d%m7Gl(D8- zo%TS4;`;qcvX76CzrO?gVq;?9;o;rg+yD!kf8BeA|7F)G>ZI8RlPXJ;3)auK#ok;S zPUHR1d8Iw}b2t8Pg$vmqrhF#8c*65E5drGc6`jl&FOsDd$QnpEVDI~{G@-;2N!Z)a zJFvURJGxs_us%sw?MITwmh)$j>$*Ex_={>;g*eeE$f6h^2O^!kSouP@sehbLhmTsS zGqJC)NS}mMuNigU0KMnvThX-;S6232xGi9_DDG;=bsy@aZ|i5Widn6}-!0TA%y4>(~j04CrrYz>? zL+`D!cME=t-LDR#E*mC6jw1NJNHWeQ6T%MI)l2w4Z)(U&jiDevKRoR0@^S_QOvPSCgPDxO*=4{EZqvbJLAi5PcR;5Y=g1P;J+?p^`99tQ1h z(2jeN@4}047=q{#ID6U-$I%^nTPy=~sSbS@$AAOxOEmv@)id$n zeD!`j43MrJl>L#DSY-PP+P(}zyjQUf*wbpbH|=U+fhay_?R-*T&1kA~KRb>v$YB)5 z;M*a|xqOfg>8&4u-}71rI2KRO!qx)Kz6|L>5DjzE<9d37sDD@Z@MzIeXO85hzCiYgX{zuf_Ait^?f82d=&WpX^cnV59`!A_7PhfytE8mUGtF0T=^ zDBhPKCcoVzEQG3Joi=ek?Z5(~ zkSw1sRAz@>YS!|r6+wb8I)z=Sg-Yifc6kd~oSBRMmZJY1Om<0A0jeA~LTEu>&>Bxp zoIzh*nabHBNqF&_*PSn$NnayO+mAE9=;-JMpF z^+og*&gCS8jSE6c7-A9V(qXMWT+?a<`X=z_<1Q-8WdnTn!JR7@$pFHwUKb?ut^^B1 zpm2hJV5waQH+E!Y7t_ULeq+EOfkZj%VnwgrS+Yg_f&`zu1)UYwq_O$} z&TUF`Ru%7G1EGxB(Mw`}?R~#a;GX%!zFYIr$h41I%qYeAFvIvMd_f`;N=S@WlTjbh+N-ZsjxrUk9ZmaH^@U4)}Und7BT4 zq;(>O$#-eoD=*8n0XV&t?*W!|WkfirD%5eLW-8p+nqu(uA<(Np&SWb#-|s(_MFZm( zZQBBEG$hmvIMi{m#A;CZt8qx$k3KM>1C6pQXc*uzx9m_1J7m1sdHOWb{sD)v)sX=A z$FC7RhNXWpcE}U;3Z^$}1W>4WPm?t(cdX+ItT(b4WU25RIW%lwDRDivMXp44DRHM$ zkzbWpV+*v%)pSA4CwYOn9nldEczgnTsZ&t}0%BZ^2Ym;UeIgw2kpPwcDV>)%{u#f< z(kw%yi;GWVsX6~XRcknrgq@!epnfUu>M4*#b6n1vF5T!2gv|B5=Du#v=JQ5r45kDfu>kY}{}Rp-{e1#7S$Bcz`U*sUAyM{n?V^(Pp$e&g zGW^BR+#B1a&F*~J_WcJ=E6;s2H4O#I6`3mFH`ro{$&^Egt8`&2&*j&yjYYsxkRBEP z+DAM%I5g)>npbjAT6L3Hc2IM!L5@lh{|itH_~Y~al~PckrJ-!rBB6s+q%PWx# zF*~5i|AO8j(97qr&|tL01Qj!u57Yi!1Zm0h5OTg*7hF+(#|j0kS3a1jF-b930@Mhe zMK1sNjSBu2Qb1_xfEEbn23&{m7{osKSi%Sh=|Fd|ev@%u0?tktVC}a7bkh+HZQ!dU zq_cl*gv#9dDkJs-1>vsTZxf&exrRUN;zovP6aWJ>0KwAQ&)C)JKpc^rS~&|xFM2vlYb6#_4si={=7}e3sGO9gC1o$!aR3ey0QHq_|d$K$-mf3Hfbw@{^&2Y7Qp-dEJye6t(ZTxg zP6wWaf?%W6O1<%5S~PfLj+-=v(R*tXQLT$ASkI-87B`KaTaiK!mv%g+hc6+g%pqD22 z;eC-%TTeEF?juwn?OPRs&w?0E{B|#5`{Fz^9lkGasal65`0>X1m}+-mV|8_Oj?btG z7#>DMFt|Wq&B4Kppp)L{IS~%0z)?*C$btuCDF+*Gom|T;)_a0!Esno**@+e9SGyc( zuX?f+jscpk{2Nqlf0Bf>(?tQ*l%WV7o*KqWReV$vJqP(ZUh-9*F;@vHZ;gkP_d3~V z^=VUW`a36pR79!L?I5wRx?)`M%KoFjCr_P?afv?CRy}k3j~5UD!dH0d9=wFNA=1rT z@IImjXFdDzqmsPq8!=O;ynQquvh2<>epQs$+oxPm)(g|~%ZuYy`_o_)s#D*dT@WEJp@OtkW63k9D{NjJs;?|LO2?Jdte=w4kfxuD2{F$G8GWs*K znROmdiR0$kQoB9LlI~SO`lFgaUcY;Gi{AStRi-vQ*yz|;QFTnHd|6$qu5bR5e&?XH zZfc=}4_^?sGxsgnO`=Bw zLnBAG`9frRL!KfTE!wz(NSMV%44*dJNqUb)%G%%f4^hWBBG{Stz9n5C0#?+?&rI55 z=*6AnGSE!@iJYq9>q5WMPj*%MZ-vS^M9(d@r?34{aQY`-y#8~U&rS7U0D zg39qm{;YT$+BXra)g@jZVy-+6=?IRaVO6#*mg5nc!(MaFAZYRUurgD&cQ2io+SD#S zHt{vo$aa3$n)2ZZa8RrK+-Ka8`q%Yk*wM(k>S}BD*=b}OCxakL=iBCm@!voF>%;A+ z?8p+q$RawqMzHgOyZ)z_e*9r!1btz56Z z?vpUpSjg&;e$#Z?m~}5EW~CvZ=`{xe_vJSA_&qlmK6lvtkImMoDGO~)Dg`Utscol- zV0F%Kbk{nMB$0Lbh? zphSFbhI33b!xWRE=hJORP6D8i53mX>lT|&o|7o>*7`2ncxS^!hPKn<^f3*JRo;C&V zF(|vZ=dJ+Tt#>d6;@e@BQK=1R%q2KEk+FK$=vr`W;bct4j!;6DF?zEb+BV|923;5P zUeBAGk~xE4cfe~PD81h7cy-_0aSnG9{Nt$Vo=?L|=XfqrPf!(O9%O*2(X1YQ2MMWOvRsNr^V{2twV<{%g7WnQ;`f;<__XVfbU@H^r zD}hpX;CAsp__*G9?}q;euMoKFvVWPIxJKa}_~LeR@ii8i=a8*Og##SNlENq(6@MQ`#-;?mOLu#Ozax5=Ly&H;D@Y|x@F@4J^!qWje_hTg8hDSw{k}R^I=O~ z@Zro?@M^i3+=+GPj8OJ->SZR5JfZ31>CR=ZLG1l$EP0g`#scGM|o{r6r_3d z_ZVhO*oOdH0?$0Bd>VudI*PVFM!4Gc=-J{um|h84Vtf2Vk#v@>h<;38MgE3~Dk+#` zv9J7mzDN){wC=OmdkbbR568m^{GN_}98M$SAd8GJlRP1mRlpqQR~KxL>p)b;c9SXW zj<&lne?w9SeY5hstK_erx7i>nTBSGffoxvuXpD%P?<>w>#y_P30h*elC+&JtMv^!p z-rcZHIpb&u1lR%JlVl+C>+v&0x)sBc; zT@B?7`|K0=sw)+eYQ()XWU0Bx54i69!eM^~`wf?WOzXl+%Tt(OiJ1wH0!I6pAH4l@ zZkvA2+PcePW8b^n{29CXiyB%I!c$4~ULtqg9Y|gze_TEfAbHv|NuwjcN=$>D@+foY z`TWBWKn7h)SN^?s!N9X%#a%fk&U@V2Nx^wOSn%r4U};K73!TjY0ZQc}#TGCM_gbv7x= zyD`U?#r%FG%)QPbrvGO@Bw~PM-d8yBscRF!Fee_G9_nZuQXia|N3+9vpMd={Oa4SYIubCX(s!Ycf2maK2^QX#mkTtxFDz$dI+tg|%nsvvdojd?<2Om(d;{&)1mTW}@bfp?BY|me>7J z$Gtm(6(>-e&86*5fym+$8^EX&W35e3G1WS0^j;=oWSV!vH9!e*s-JfE~iOk z5(Xe)7#dnGpSD-QW;AO*OhrjcNmt4YRFbI%o|YFaR7fZy5U7bsesD5V_PcMAjU&ia zC`qEf;y+XSoR7k6h&q#V(RqL{*Dkl;c^y{$p&OG?eNjl`jGrkjl)tz=vD$Ga;==m( z(k}M;7>YV(*jht*$#|tVc&(yxV)(N+)YnSjl<+#4yg>+3<84xaTc1%M&i7f78sXgj9gsdi z?Dn`M{n*&chJ#1^*}nO{{(2Ft^}M04-w!x2q1$yg^g1Bgt@iOF2wa^tR!HnSF9p;V zX*jkQ{r&A41=lxAFz-Rj4DP^+a)nyspT+byDZkNXz@O%JdM}gn>j6d}ql@BL^54!D*+8pkS zJpn5@j(kr|vXq7Z^pQ8Hdan-$`U6-6Kv*N`6DRXKf;S}iuanDPPNZt_vGrzn(ykGl z_UZ{sm3-l!JJGpe_k>J|-2gWVSA6QVj+O_0{r}Lr$>sGaQU3D?7-_2%?Ca&ni4uNN zjK%-v4!i^D^}S)TR~yYgt}i?vs&fJ9pWx^1K;G*hB@fSf6j4X6z)ydh7T0d!1j0JL zK%v|BQ`y!xRL-E(Q?u>vBQ3zOZDJalYczONFb3;nbcx2s^?nvopfzksuwGkI^#1vF z&hP6Xct1*d<3Hp3**ALg`M@me*5}Fd9Xi4mSJUp@C1c6=4lWH+>I_#Y(qarh-_+69 zV!{#bc;A-HsK)QJ7e=Wiu8DNPkMJ@|SpG7nZie)&<8IvCzsQaW2B3>tVZ<0&V$e0o zSIEZShgi>M%wOlLjb?7g+hISeDf8UFubRfKc?!D|_EdIo^W2_J3}nhCtzG+n$_k-s z<^*1qXD;VvF2e&D&7D7!lc(Yt|1N9qN4dqmM$vTo$4721%cH%N?JX@w0F{XG zD8&BdCy!uRy_(YA-8a-iI5y*a&SD*1td)(zMyeT>)R_Dl2;G!vqZ0o z2n)`tqW1juHeI2xf4Bznmw#VSMFwr*e*nPWRPg~siw1Ot2Kn<@TkR!E2wZehM`)G= zbsHHKpSd+vhZIb%LjBY#%+u-|di$pD9>0CP>G;ixVq7AklR-|#< zZSGwu${P$9qsZQ4g+Z0JtacGWe@RUDq;XrWhPG)4R`dA}N9zk*Ugp%gkOV6M!~AG` zYlm)QM1G@Ov=h)Ag|lbm)ZSt%g2jT?&B-m6H8XFXDhOWoB&narZVjN^x0$mJFMvmM#i61Up} z@9t}!tDU|@kuu#Eu0^ zoBQbDZ#_v?{pMm{V9n(1R5H%zoNSX=YXs;GtNy z=nTqWIi?Y2Ga+_*MKYz2d~LS)Fh^TIm(iPZfFU<=auAvWZAGausZz>L8IC~aj+Dro z6HydL8&+NXx!bGZt|I5n>br-1XP#oV=#48AVbzdD>ck;Ece=g`FyFh`@qGJ_SlF~h z)res1(*K;6mYl%6iOhFYeq%aZuL;ZWRx(tTB^&AK{4C}td0tfV1wMQ|)Kwwh{`K(= zDI7}WDBNhGZ1~_54|FkvoKmsKaFRVdKR>26Ez+xQFkTt;|{^L zN+u$bQ-&R;Bp3Z!2yy!G44&1=18}6e4x)q>3u~L6w>1w|j2pVOs_xS8a-`BW2?|_> z!r{p@WbLXSkZ&1%=9lxoc76rGpoOc2Cq_U z)d3elf&rCyQufqWpKupp{rK(q_cT>n-$UFWq0(p|Ss5t zKao~m&Flz3eO4!K&Jvbc@P6B`sdVDjxUO6!zhYS_c5Dy<(2#AAA^oDLy0KYBFjfg6 zm*14wcXGo1<%}OsG?XLIJs(Av=#(6FEhCTvP{tC2G>n!a)td@;X3cR{vEh3xGrOyh z4-DGqX&CFw^}Ry$HW$Y^WUgsO%2>yDn`~XsFaUmDJVSSz8Pz) zM>`ZK&^0U3jt6(GGbaZhppy**&jfsaN}J`KSH63!X%lz<;*Y6alIPs{^JWetG`tb{ zd|^QZ;L&&HAq%Z#1zP~nXk=#_y$kwP>ReMtKflk#a@CxioT8#4AWo(gz_qoIgAqHrZmg_J`~?|5w38@`QeUUxnyD1@e_Vr-)A#txbIP1GKY#Bs8-ySuyR2>9bb zzGA2sX!-l|pWXpnRNF2S^nTjUzhN6GirLyCtY^$Ue_N*4dRL+AV`oP@1mzY z`2Pb|QiEFDUr$I#5F&EA-fVliSSeyEgJF=PNNODd@GGGEcWIH%04AX z=9UpMFKi}*wB`DQK!c(J=rXukMGDrUqzUg3rJHY=mmlOUu;pwk5Vn)HzWx*^H7F0T zgO#%$9F-{K04^{mkb~7rZZ1LG2&f~NPghY9s0R>b!I?8LQ@im1#Ho9B@Ha$$AN(fN zF(4BdG`4qI0yvRw7hVIZxZ-eu_iKs&!sJ<@<1le>L?n5k0XoG3zRz^VzTRA4)#8BF zSE>AJ%gWf|oh0gYDEYt*UZAyzE*@}yy9+=J&gGZ=W!0GdnPB_TPJJ{n&;U?k*1qGz zL=B6h^>GuaxX;;E#jt^inDj>Pxic ziJ_HzCo!VepBcFqabn41Qd&xU*luvneI=5C^8^ACNP@sY)T;3k)YS4yho1BMzYdIq zv_UtAbBA|g&7Nd+-PCfc5}mUPP8>n3YQRAuKuXU}rcSw)_Ew&LAoX0(&H3s~uzFty zBCY%Yn;_^3{rCWT$V{lot$`E7I{s5{XYX6vP4~y{+5w=K#0OdtMAnL52-RJNB@~By zlgFm{VEMw|^$Sq}E*sr^Xz^)o+qC|;!ghzv`3$ZVm^MD0ASw=# zqiQ2Hvki#CZq+qTfir;N$TwZAl`9hr7$xd(K~WGM3SuobBz{J#CQ>DFrw85pG8JwbEp1F$`!2{rY;haw6@P6Xdm=6Zqn zg?5CSs)3XSV^PH^DnT8ejwX=i13S%dqCn_+@lAPd5BJq8b^s=sRI4ar3zk%fhHf)1 zt`vxs(WCPiJ|u$QZCQZJfxB+p7n6jgUE;h>b1l%DoXzRwg_|(1HnbXNKWqqcZ;OMW z6e9*QPw@e&L><&Pn#-A+Nk#m`EcEzM$#FWW{oAU-9h6GJ`WwQH5HS%#4D3xHfF_+? zd8?RzjC@Zb1^!s@A*`HD_Gi_K$#uJpguG2=W1(OxXxMo;s1sX1F$_MsT-tC69ljylZzFKR53$in@W2+~@Gsexwp&dZs==+L#e( zezU5kj#{AqJCRJp60}tCfmKj+1uNw&Lb;O=m2H;+8;vP5Oc21P9ocVR!ov}R zV1kc#+sZzI`to|s_q{!w>=h001VcEv%plXEQjx9`IivSMy zw-5H$2|qJ4up~HM(6jj8csUBdK>$kWm6p6a#s&l%D9*7B;bzr5d7duYHMN{H22tq$ zkajasqUCGBAayQ4evZ1bUgw1t&L*zW6j!T4C$7+bl3JQq)V(KMS*TTlt&@SPkkk7? zc7dQAY;8j~KpzKK`=ncU|6Ad#8FFkmIhmRJqN565T~wukZgsSV>R*7V!E53Ro(&2R zSeAJHrlhlOWXo(G1^n&00)5rkv0nD}^gZ~6iU_t~`O{UcasHR4e4vmZ{j2uAz69g{ z9X`TN-ps1BPQ9&VQ}*iB9@+nd>^WMAbzI0hr0Yi#%>S1DvCMZ{i;oqMxPyO<^i#q2 z6o9@xx)g&6G821EVC1*F)0{bI-!HScj|p)L-NZvxYgRlz_KX?h6rYrA1Ym ziD1^{d(U11BpW_yL(@>jY=num?o?1W%=+9;SC28__O1V=n6`QtVG*#xZBTL(wg!41 z|6hFk|IZKk{HfNC2_LZ*SNrd%Bx!L4v1$>ckpF%D5)>5F{~YM_-z)#;`kw=x%-xI` zyzK2_l9c1JiO|A#K4|}JX@ZO4|Kf6(XOkyvwoXz=>XyedDrp0LN~ zDrYlWUk~p}6O>reXtkHiRSdRr_f)nN2)jC5J+PK1a z-NH719Cz<>;2Waag(t*^6JiEo<)!H4TpVQ}b6a z4`u>i_>s%fV0+<-wG&g{;GQvUXkXCz{k+XW`a$y~&APm4^Lye?aL3d7@?7-pz=jh$ z#E;8y4QEVOC&OK9>L)a&A)`c1epBjq zDLf~7#LsTp6SRQySdPxwxilX8&*co_JXQywg|;U>`tA2>aQKT49%Hm%;heGzqZq6C zc2A!X2csZ*VW%)@>}f93nI{IF?e^lFE7b{gQTBodC<#f8TIYVPJ{?O^Hp-xN5~*>KtCLh|3Kky8Gs)zuA?Wl0hum&?#4 zB8J9t^+#<6!7&>n9|N6Si8CXb2$ILbcD!1?j}M~DSxD5`l7#m(Ol9bPg}|0f-Yj!T zTU!Jt<8VjH*e>(Y;P=mZS9!mR?d~GR#lW}uU?3xzDnP1-?TH_NW~?UMDf5%~jpj5M z4b~cu8LnSUK(=8#w6#4HWVcm67&&>P%1Yd6LeZc_$AGDsmMqWOCQ=X&o$Juy1Lpz_ zE@pIV9oAv$VQnw7J^QGZ?0&O#mpt!Tv=sC-2r}@ncIj^M<-L*B0hKpi@?L6x?lXT3 z{cZgZNcg&(sp6)uYDELTrR&z=!=k}Mk1UVI{>%6RqNHPLzv`zXA*lL3AzHqn{!W0L zI(i35uhUnN#%^=Q^gXf?oCymI<4I-Xm&wuCugFL>>YRyy_O1y$kS`Q3*zPE$$E>W4 znYua1QRD`u*Ne&v)?QAc%xRIS8AJc>sodXr9>Hl6gTb<=m#%%{uMXg*#RGLq)EEQe z3u~-NuoU{l>MF4b3%XH|5!nW~aBADR`)(&WI~8_)Bc|nMYO^ z%-ATx%+JQ$-H;^^aXAoH6jx*Nlr%Z;k>Mhd!N-$%QVLu5$7)u2cds{dtz`^U)2mbg zM0V~_{d_{a+Q@8%z7>rfQk-Isiw#)V9AXqL)6HL%OHdw@6!MA$>0Wf_8!Hi&YgH|6Vj8Hsx8z_Zvj_VRineLc6@7K zNw=97fx#1(nL1JL8*2bIG`F(so5+lvc(Opi&p;Z)XB+Y8tvpK4paQHq_I_v$pEmIrL5* zbJRnw_|6ZBPagx>3Uk3jp1L(CDL4EH%}?aNUDc(}z;MB#Alnd6VU;%63dqVs^!8ym z&ats^xMG6SLA}B#avz^^Pa568VgCZHEZfUpp;=6v+D`2AR{I5gN}@H#RhKeYN?hTR z$`Nl+l7smb_rE(PoEzuyv&1OY%__2ieej{>;ay3DNh1q?lO~Ax^cKt-Cek=T!eR6? zt-04LkvvyI(SVkFaLtvJ^fD7WQT2U9o#8e3LtZzmtCvE9njj>g zHveZ8_sBQga^T|8#=<>OlViqaepnkk&GNu+2SgOHXPR7NV6Zvc*IuVuXHBncfpcfl zr^j^Zy~vnjg~PT>v&iDvx5?aJiShAYn^%*|bfpD2VE^>>bR%pa4X&CimVdJjG+;K) z2K;zOlSJS&<67LBa6i_Rf3Zg@La9R{mMX#m+0!;A_C-_q2>M@WflWWGCWZh4S|R^` zg%(&qXfbtkaQp8ZNI+z{($`HYlJW?6sUfl%_@EFoXkAixiQq?N?LgkTcy^nqUO^av zATK~+O;jQ(uE-SJll&3tX_dl)%+8s`cdWBAQ^ za~*HJg}rBiF;g^k(9x0C?I(D5{r&o#*Byl!ZH2KtbFdbG?=U|`w_SW&18nK&@$xq3 z>G@&iN(k9u<=F$hymu{-vo*5eq?+qKGt)hDof3CBpO*4`wr2Ky$>yivu4v&J?ivdD z#cP@L)^H+yTkOk{1)G0g#%QvYl;>GFMgp<8vOyGMQ|VxhL^AUT`-;-1?%sms&5ME<_YZj(L)}3bCs{;PJib9?yV&vyv4M z7P^)fM;PmtQssU#bPS_3m1tG@mHuY;{mB(uSyGScVlk5%O&_iBu(NqtwtS{2og4wp z>A%e5k5OfTzJI3!fio$pn$8T3_~($8!bIp2jdIsIpf$5IiIlxOp$rJ zLAf{efuES|>9c|Hj_7lSej;o2N%Bl2H5-WYk z&dm3{>bHT3K?jC6e6Q`4PslGUyC#?^Vosvp(QQF&n>P~FBoGY)vg=JzOYeot(LML& z@cmx88*N>JqKz;Vj`!@Ee1GJt^D2xgvJ=}a4J-m#*VofEk zzN%tT&m~Oa!V~@hkn1l3AVyG4V~`duu;=3}a9#y;!+*0%)s5`coDv(-l4R-+RZ} zq%%|->*~6Y(?6jJyM6glcr{hbwZI`{3L_)rJ~M1e06ingAjt@wKP3LmyGOQYNY;Np znBK%AJ9T)&1P0XoK7CLz$sCKHLAaJaWC>xpHu7d=t`vv7^q{T5o&6haDkJ7J9ig9T z(tr@s8n^qE?KL)Rk_W_|@EL4`CCZYs5BOwQ;;WaK5{$B}R=@N2u?tETs$GnPi6um$ z0cnadG-QZ*$X3AW>Q`M9VE}^VnQAh_f&ciZMdV*y$T3D^7GTt`t*sui+ufME`@JB7 zRn!S^Gt72=B0PJ@c8X0??(~rxgLqS z78L**{2ft9BitRE#NBYxd5_7wr^&}}n#RHJQXyn4 zbvKV<_kWr{C!6Um_By3V781@xI5yKd6s;#uB5cZM$Vw|yzBnt=x?wQOQKs0|I13nh zC*qc*Jz8D7!zG>G#>Ht+63$FJD0#{r5vDEgR5QAX{IwsFA%04XLqBYSG_meh%u~43 z_BFamOoFTD8J$W3fP*A_CDatpaQ)CzA)1s>rR`KUS#2T}&m^;FChA9&!(M4bUtkz6 z>96jzO<&T8uFxSg9j)UGjc*X)m0&f#kA{YBu}z+%!_C#VC&5KrNE$j}qZlybvwSEN z+=5Web6f0DT53jnWIhN!R6uvm?Y(m5dwZ(Ts?15|(>xTc8>1zt^7K1vFRLVd){zfk zNWYB0UQyhb(o6ZZW3!p(1F^di5*M^@{?c%}7ylHlx{AScuD#vsCE31AvL{s1%_|?q z>8-2!C#pgm4OK}FRND)v?F{AB6&|w;HnP2i%g>x^Ge}p@gS0eM%>F)&}1K2>@i?aKY3f9y|-*uKy?c8@-0 zgy-jmi>uM63A8@F34Xjwfjwk|U)sw0*8@|R`edOk-mwn`9Ex}vn^y~ixL477JrK|Y zqe?0`I&2K?`8M-88^(U%<@o}z!w8~VY>IOo*1M*oHoy?7G3-oPI#mnw zRPCXsVO@F>>)EnG8q#EGE7_{^jd#)8{J2KQZX`YT0weYsx0ve&5cZ2_hmk|A{6fNp zCpO!!6pM_FjQ31|S}P(BllMu1;w~ZR9_;9RW1iDyDq=a_a$o`V>G$(l|kQ9r_+_+tgD+5tN?IKdP>aN?KuTEBXtQz}H(2+f^}zD<_<*N0VYk|0_cY#MXy zkIrx)PT&|+0dN^bzgCpfcJY-!X6Ok=OSJVqBl|1e-S6{V(9lEh1j$?Kdhc6gxLJ=| zXKy4f*9E?BaJ*s0Jy+p(JB2ZbjY@Azv6~#_y_`AKE>@Fu2J1k};*T7E7!A#@X|^{w z*c-UGhiRr&0koW;nUF(fIma6MOw_%mgaiXzW`4;-HW^;Eq+#6;hRxE6$^dJ%n-b!^ z5_ep*Rk1e&hVK&M1rdaw`JkpqBEmZ9s=fO=UagH)#w+J0M9K}W^U?5&cUv>(^*#kE-5r!-iU= zMZ(;77NBf6lq~giDP{}(volntYL`Asypn6OWs(qq!|>RDScxxD)UM{%f_dYQqmRaz z2?e^TJq*I9KDh{8LqF{jcaWq$NhxY&K#jH5jQ34!&v=KFgBARK;V@M1UvH4+l6yJA zQ!ppchEPjMWXn6_&lAcTLXgizB=)u=G{>bi|00)KCt$YA%Z8Vp7;J-0_~_|eJ~gy1b_d1-R9 zrT~o2qLp5_t`Ud8q?qdy)D$YzlrMe3Tk4jGRc}}9${xJ6meobzq$iA})u{Oo?Nn#g zPdD=22C8#b#GOHp8YhkBCbZ}vWvV2!M4Jjf+^C1Qjh1iR^L z9g5G|$56NXW0ndhl8ocz_gDS3G(WiQz^vr`-(P7sJM7$C6wXU72U@$>gB)0njX{sC z%rSF)aNI1Dl~0snv8g2E16r$?fyoH>AY#xLhN_-RLTIy9AtujO@`Dy(4>hLle4|eV zaMD35wP4(FO6>dWkQi@W3#Ip6Is;#iKD$i)Z*`~_F7Kv`+_4M4%g|abkK*hPVXtgg zD5nHdqh3zr=XLLjVjybOHW}r^XJby9+ARCm+6qvRP$`OxUi1g|K^4uAX_Z2%;dQ#; zxr)3ld2R-W_enpn2~RPFhIrmp+gDXKA2r?arZ0QCEN%KV!o%JBnh?~JJvx(}PGwy! z@|q|L4OjW28sWVr;7^G4rqT~#ojW+ndEn!+QLJgrivVxD0hQY9sX9Em#6Gbx6gI4s zJ3Ob70#jl4yKEj>hWqUFM)56eT|1rP1QtxJyNm`znOx9;i3iAsO~tG&)yIpP%G>dx z%?m2&{jiOH+E=xQh-toTL!l?J@jaR0`U_82IIt%nnWn}oWrZ`M{_avMD)me$E=-u} zuEz91(3^rS;*^w}5(ySK$lN3&JUDp1jW_BtC|Ha4@uPK%eWXs899rSlIA1u^j&i>I za#?ZWSx)sIbX1!G?~aZM>u1mE7np~}K4#wFz3uasRU74@vnf^4 zb=-)4Zr*2Fjo5;0-JVQ&F`i}p=UG1gtoR|OVINAOODubG+8Wu;mrHZLb}W(RBMa$?LzO zME4A}v9=%R2j-y9bHL=7ePX?eWteO=gg7(L^P}+OtK-p$iI{@m8G4dOg!CzRXChL; zX%L~Ef{Bly#+KLdCZh_woup~4k<^h0(;USy==y-@@Nag#yV>?&+&qPuQi+Xn&*RfY z8ie8hDyyY|OeiW3pUlY4`l|}UY2*)MLw%CVqhpj zfW4*yRu0Xq?04mZ++{BhEM7wRXQ-%If!nUTQp=zqX)b~UzTIW!_FMxE82h=8)H!N@d>{)CAbN;(>*ZfFyq%`JLxw-X6apPGCka?m|PwlxY^6mGW*49Br) z%1m%=mym!W)*|2d9a2?d`WD1iXhc8$EW)ilh0CAUwknkko5EloB0rji`9X2$RM8?L zy>N_YqrJR2wOdc$ncb^D*Vlxv{XSW`>SUjDxMuA|ki~%B9FOkY$Pp{~Z#hsy5GI`tLl5G?&^kc)#~cyN&^J*IiChWN%pP_8NNTV3gQd-Ow%H6 z{h+#L7jBp4|DmWev1)qOga=0V3|`Xh<1CEWd`b?RlL&gGLrrdYcyiKJZ~A8 zUY%U{E;G%nb)*8Xt4pLIp<$QTuzwmq!tI&>6Ib0cN6vWua1~)hHznyfUTD(`r$BNy z(jSX-hBtJ!FR$iXn^g8oCF(ud$iI-pGd4}rS@_yv0kJ}1>`fg$H!;XX+r)vS(B-?G z#`@r6vLlbQdy0_!BoujHe_xx$hm1$iQ8kJRUztlY_yx!q`6|;@{U#*hH0yAO1sb+V zC|;D1HsU#5q2iKzsG~gDM4S0IQe@hNHT%9^1U#P5;&W(1+j!Gq!azE>|+0HziyVBWx5i*NRJC zQmmHcYI!85x6hF-8MfO+u_mo{udJhP^a`I^iP=;4n=+4+Y`^Gnk9`!{y@-@1$m*MA zW7KIS?o=HmiuusKPQL}6*qK!2IjzR5A>{UOot=eo6CEfM@Lao+g)l#Zjeu*TbE|jw z9vNwTHA4f_XEkQDpk1tx=VqrbnW|)IbK{~a@o*!d2XjbMYp-nCiUJcyJsyYq-p>ea zxlH>?N`ue(_u`;NlPU4_IQVQC9cBJ7K^Gdw{f}PkG2KQbcUL8#TKy=TD`~crI=Z2+ zG=k}g!Ao1eAr2P46_>sXX)s-BxwOrVBiM@6GqX@JzE7QIWedHN-a#kYcsIg0kU;ip z(qz^RL;P+AU20@&xg+}VvPNE;h6|GswK)kaRoX%?036qs>Dza3>^Wx*D!yxT%#M7fwRWYcUd z-x!_|SErpH$D3tDk)pS^>)0M9;fKSjY_yT!Gz#ObM&#SL#cg`4o!Q3uR$7GI)Mvo! zQfpKFVMaZ`=Y3X`YhyS+IsV|8d;hMNj|yQJ?AFoew=6~~+stHgZIu?gLVAd!nyqg> zqNK{z6snU(G3JdGM%Oi{beHHq1+NM<$bIYlPN5Y%ZoL-ms5p*=#&8afoH)vHBWRAQL&$wRUk{(kDdjnG_>{1?Nzpt$c@2HYMQD~6X0 z{1P_o&or)#*qdLq@mY8^R6V?%f#3MyL)_vEtBNkNRYc9O+gQcb$Q%~O{=-=DHSn*> z7@Qb65M=RQ=l&w0=vo|jbw{$6P%)UrtsZXkDGu;UB9W8<_*D9*0bzA5NMvmhprMlQ5 zDAed^>_(ppBD<_*bmo|dkv{k0MajlYuivN-7@Rbj)Jk11eawR(niLZ=2~M;2n-!)X zd~mLjp3c5=PzSx|`uxq{X`@}L@!TsSwbj3{BM+@g4UzR!Xf=|bYTp7QW z!BXAVH3xRM9<-_>pZiXcT}4Y?vD;fw4jHkLO+uEE>r}^mQ5j$?DRiAN z^6+YtEicq)&3YT~rt9UDmtjrEv)c;#xzitVAeygA6}n1VxIF~*vx6v7>uuh6<) z>C(a6J}lpMU=){-Je2ayQj~5v4$nToCo@1})mRXa&!2`4d^MY_H*J4 zJg25}sw`8#l;RADQeGI~tD)dQsaF#|Uh1&4>d`fAoH9}g#A^!nJS4alplKy)&GLxp z1G6O=`?A*e%l_bPCFd@5#1)b?^~&^2L}c@i5$tM45bawJYfMv7_2mBS@#a3qw_Kol zr`N#B?(M~arTz6c!Yv2)3K%$KEic3|*gYVW%9_jD4p__CnTzweGO;IC$B&pD^C+fv zqjvq;h$qMkb(uMHqwcHIM2XGOSnx~D7(2p*+}Ra^7oTlE6VGhE313JKCOa(c&E`r|{iZ8FLJEac+^khwi#WsYMhx#$Uos#?H#=b`ud zdH4oi@~>ygRAH?|=C~s%aJ>@qoT=T@<;igVhN3y+`4X80&4k!XU0O*l9@l45{RiK= z?Gx0D3MaC*!F%97oa(jIzAr_YEu`{<&n)#%`^P8kM;rIcvobwy@H~W<<m!`}Z)A-ri?mnO z9HiOlIa7KSrZ>{79;?8;Lve3`u1f`dm*pO>kUS@p;Ot>56AP;d$v~A^8>P6U4)LwQ zyA_(nJl?LS-`&Y$I}n(VaL!#c zm~C+9XZtqeaAA6D>QdpB<=MBbepm2mWyz)6wrMw9r63RMArKYJ$vrCwSo(4lV5HKY7rbeT2Z3O}eBhqd4Ld7@r@M`ZfRNztBK*$+b_*4h zP!&?*cXhUnyrHE=MnX>l^vJHNE9-zQGxkdaz#z)`Q5_Hn9^}S#Jrz)dK!U*s5*&>E zIo^QX=H_My1Oq-033jpM9Qy&P;V38y1x2Hvm}9pm;%@U3}}PqpdK6mf`Y@*a5&~TLSPt_ zQ7AYX1;-o*4EzAqC^Q_6hGUN72X2AZC=48pfn$#80Biwz03Uz=5HSc5!~}u>UIRCQ zU%(My89)PU00y){b5IWs070Wrm}4qIgupN;qtPhLF|#0G;0LHiV^El5qCvNSegMP+ zrUA8pOF$lA3(y1j00e-DL5RRhw;IqpKx|DeM`4})s#=)rao=o8Qh*w%n)KrP@B&;h&z%770*0Eifb2%H93z-!

*ub*)Lc-|M!|T?Ahjl@O88~Ua~Z0I^{l5L;ZSF_s+{fEkB$sHFwJ*H?O+- zq^Z8P38%^lt#WA!VvW%Rd_sIaDS?6B*XG&zpCS0f8u{1R-7{W6ts=w;gcCEMrGTw^k&?I_0{k;YD9w8*$_1QV9y1J{A`8xlkaU@KGbq=&wsa-zf_5ZdSk3r=}F&Kv>9q_J;zofOIzri$0#Zu%zn@N#KwG?ahC{s5^|GF+V5kSF1T-zMKnf(#52 zJ;LKt-v2BkJ1Cxs2v-e!0h3TaoyD!9x=pUuqK{v(hSVraS&lWQCq>1WTo4Y7YY*rQ zEWnh+SuK8vG1Boh=SBwfJepSTAfTB~VDvbJvD}~Gd4x&VF7st;pC{}f99W){xu7wf zz%#VI2su2U?jRy^7g?Omq&l+3-+%2~PkfY~s;d;~Yn;E6g^=Jt-paO`Yiob%I6lh; zsaN5imEQT_zx6Sc-<}eGIXq!0TZ<`+2bp>c=T^ujW_o!@`|&=3?cQqVs|2B}mf(#K zmd;$w^F813t~3{&vmw1}^YUU+4v$s0TUA}Dp(LH!z{Nq_pv8!r24dG>{fNNIvU^Xs zLf*Q*nQRYuqpuo0S8!gE|9ZBYp=q~;)Q?EDXQ3WBgk9otkGH)y1ZMDO`l9@;>Yp7d z_9j!`4I6M;py}rzC4W)jlq)Er-^}&3I<({M0hD_Nx?FZ7pc9o@;Wv4q>8v;NW?S~X zpVk}cUgG3tgzu0KAs4D2V;-M>uBX#L7+qkac6+7;8hth~{mWN^k|T~=)3cv)X_?>1 z?z0O1w0p6%qWwaBOiM8Z$LQgqx(?Fi%h1>W!^2j7Tk+=F@*f=bZM={5O*j*VBUYb6 zoQ)iPMP4=RLb=%1Hgw$7#n0B#XPOlc7Fu%&ys@DS(Pg)M754bS<(P$q&{>cAr=c3p zI9IP1T&`((W-F^vyBJuv30IQUT1qGg##o?0cc#l@&3oMAySp^E!_ zh=?eSR4!+EqTUP3OcgSx{@|B|sXy@Ey-|6LFeRxd!rdbX>hV;<=VW77SZHdHqDyUt zAr}u19eTs8Oc|j{WNtE%1p%Wb8ZznZ{)eCDGJG<$$ENTquiR?fzB0r&lU>VlwA*P{ zoE;}%)Ls(@vrsjRDvEjXq&}KT)8b;{SD%%-cX6HLo&zpSUwNtKAB?3tb{emKWw?t! z9F-m~G(e8$Z1HAlH*0k8{83$^#ps~uDb4iI;>6N~A7RZ(V&XhA!7D+f8tqAbPGP5F zD|%F#ZC$w(d_tn#h#VfD<46p6nar+n`nh(3f2HSTRUA|LRpr!9A<5uD^;vNpVU>-# zJBY}=MrEGEf_O|b3Brx%e%H0Q(S%;4B6$Wq{6*RO2_ENcr{2Rv$Wj3MO&rIf?hw@C`>ZWKJK-ReAhlkL1G&XcA_g;M1qjt8>E?J z`$e?Ov&bH|Lt_Vfp_g`~KOttb$#SD-4061>JUbT2*v-_yS}!qcDR6Ji`m86(O|fy( z+zI;^$9X5Fqja#kO9&a7WHPU=W+m0% zp6$=iLN=# zi29TV8!gqEOi0=Hpz1-^ z@C2FI4`g{x)M1}ptWq4#&d4oj#AlnYCXJjP71BnMxDZkH5eS&dW+Rkp!)g=PrfoBL z3%dzl-(t~LPpI3EeM_&_+M<7u9|DVE5uo8bFC2AF`u_E>YLC}rm2%tr77es0su3g4 zdryj4{V#g%Fz6qB8?VR6qxETVhs2I2N_*!-30 zKvmyUvksfi>9bcsiw{k>L>25GzODKV4Sp|^hJggai1RzBBDpIn5;Hs2^v zk9Qpkf#el0e*Lx}m^0LRsl#sue@X0MJa~ZK&Y`t0x~A=B+4lPbMx+^LB()rK20No0 zgu1+@2o&x_^7=JPo zJkh~!|D@-EfFV3REMe~diyrom+`rpHxVSj}_gYv7|9dUCqYDgSbK>Ejp7`MWgNHCH zD;q}}K#+^OfR(4a`#;xgf~hMY8cPQ*_6Nv+M;JD6SD3SnJblM!6gcS? zF9_#X`~p2;b-t`P*DA88y=W$ix^QJ2Y@` z&q2;XPR^!mJpMKwz%urGJchvbmpIuu*&uvfZT_xx>0#Z9h8+Zg{bJ9hUvd-d>fP~l zvUG;oIeG{nPIj@EVNOs^diwW=U;b))0N?`4$Im`oH?~E7$&~D29JP`IUSBQVR8{($r^nftGt{hn#Cx%-!N1F%14@*CGq5n!901)oHaphUB