From 9976ae4aa4308e49893d3f214e0dad3b22c47723 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Sun, 16 Feb 2025 12:36:43 -0800 Subject: [PATCH] Added CDA JSON Create and Pandas Iloc Rows DataFrame nodes. --- __init__.py | 6 ++ docs/images/iloc_rows_dataframe.png | Bin 0 -> 86687 bytes docs/ug.md | 42 ++++++++++++-- modules/cda/cda_json_create.py | 45 +++++++++++++++ modules/pandas_wrapper/pandas_create.py | 4 +- .../pandas_create_with_index.py | 5 +- .../pandas_iloc_rows_dataframe.py | 52 ++++++++++++++++++ pyproject.toml | 2 +- 8 files changed, 146 insertions(+), 10 deletions(-) create mode 100644 docs/images/iloc_rows_dataframe.png create mode 100644 modules/cda/cda_json_create.py create mode 100644 modules/pandas_wrapper/pandas_iloc_rows_dataframe.py diff --git a/__init__.py b/__init__.py index 4c891f4..8cbf839 100644 --- a/__init__.py +++ b/__init__.py @@ -1,4 +1,5 @@ from typing import Dict, Type, TypeVar +from .modules.cda.cda_json_create import CDAJSONCreate from .modules.matplotlib.mpl_bar import MPLBar from .modules.matplotlib.mpl_line import MPLLine from .modules.matplotlib.mpl_scatter import MPLScatter @@ -7,6 +8,7 @@ from .modules.pandas_wrapper.pandas_create import PandasCreate from .modules.pandas_wrapper.pandas_create_with_index import PandasCreateWithIndex from .modules.pandas_wrapper.pandas_head import PandasHead from .modules.pandas_wrapper.pandas_iloc_row_series import PandasIlocRowSeries +from .modules.pandas_wrapper.pandas_iloc_rows_dataframe import PandasIlocRowsDataFrame from .modules.pandas_wrapper.pandas_index import PandasIndex from .modules.pandas_wrapper.pandas_join import PandasJoin from .modules.pandas_wrapper.pandas_load_csv import PandasLoadCSV @@ -27,6 +29,7 @@ from .modules.pandas_wrapper.pandas_to_string import PandasToString T = TypeVar("T") NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { + "CDAJSONCreate": CDAJSONCreate, "MPLBar": MPLBar, "MPLLine": MPLLine, "MPLScatter": MPLScatter, @@ -35,6 +38,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "PandasCreateWithIndex": PandasCreateWithIndex, "PandasHead": PandasHead, "PandasIlocRowSeries": PandasIlocRowSeries, + "PandasIlocRowsDataFrame": PandasIlocRowsDataFrame, "PandasIndex": PandasIndex, "PandasJoin": PandasJoin, "PandasLoadCSV": PandasLoadCSV, @@ -58,6 +62,7 @@ NODE_CLASS_MAPPINGS (Dict[str, Type[T]]): """ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { + "CDAJSONCreate": "CDA JSON Create", "MPLBar": "MPL Bar Chart", "MPLLine": "MPL Line Plot", "MPLScatter": "MPL Scatter Plot", @@ -66,6 +71,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "PandasCreateWithIndex": "Pandas Create With Index", "PandasHead": "Pandas Head", "PandasIlocRowSeries": "Pandas Iloc Row Series", + "PandasIlocRowsDataFrame": "Pandas Iloc Rows DataFrame", "PandasIndex": "Pandas Index", "PandasJoin": "Pandas Join", "PandasLoadCSV": "Pandas Load CSV", diff --git a/docs/images/iloc_rows_dataframe.png b/docs/images/iloc_rows_dataframe.png new file mode 100644 index 0000000000000000000000000000000000000000..894bca5d3aa9aa54c81d1243a75f9b45f57e37f1 GIT binary patch literal 86687 zcmcG$1z1&KyC%Hp5b5p|R2u0LX$1ih>F(}M0qIt{1PnT*8>FN|LSoY?-97I{zwewm z|2JpmoSA=LTo=0cT6?Ycd7r%Rdl9PmQu;nRDLMoKxi2dt@d^S#)Pq3abx@JPJD0_d zFTpQF$7iyyQNha#)hGn~pTtR0%}LqT#K~3P!5Cs{V{2{9;%Mk#Y;5CbX6v+z&@2KD zVu2kb?qIC%WNvFi{o35x7^3WKL(RcMEoE##&B@NmP0hh6z{w-P!B4FyPpzo@`q>BW zO$dYmuNuNailW+bBvFg}spcFn-Zm zmsNSKqVesb!h)!>vZ{(OyyLSXfuhpWgr_m6fee8$-i&B8o}8}dH?adT`sFjS4velQ zIto?hnFP*n_RH5Oi1DSD@R9;R-ZR9IyVMohIg2lzfv6nd>ADv~83zYF;(bA}!x6VgcQ3CLVpVmBv+R{ zRckq2?G~u(f^XuL9v}9ET|&VTcD)`7CTGN}%f{k0aMS+gmdDLvL^#^{^ z&ru$$JkKeP`--^7KRqPF`TKGvA!C>L`w}oj2nzZ0k}!J)x*-XoEZTkp>#CPDvMH>8(nZKDudiTa%45Qpq_=o4KYoIb%wLGa82O zXt@7sC;y9!{P%9M&D(c^ke@H$>wKlNb@;8*lXUuGVvbZ=)uH;P@~c5TC+2vWXRYS# zFXb|Al3*Q2`aAF8L~pij$<0TvKwF1O2lg|!(8Bv$1W}_>E)P-enlnRY9k#foB?;gl z53&yNa=n~kQL582>G*+wpuaq<(}W=28TU0RYd@*NiP)XTj*SM^)bN#f$20%2e97-Y zT6j7X6tP$%AH$dUPbJ>_nV|A%j-ami+ImYPbV5lv=0u9)ME)&G|D&58(-X_a*=q*0eMEZm9)60|+(QKC97|n^=2^#Cl3rR#qLLN^$To?Y zFPyiMMgz(+Iz6{*eg%{@rTizU<$t+Z*ETphDk>aL+Ax%2sb4&|#R?Abh&4(aoF}zr49YNr0g6BeWhqt4cJQeB;m3zG_Wo3CIjz+HCty%^?uTx9-KF` zU-n)A0gg8PwDI?&>Ss#$rg(pnLU-y_J{%sQk-t%*AQpYL9~~3Af1%L5KOcGoL!aoq zR*}s8TrDjoAw@Vl*tvS|&X11Kw|kK;;dMMDBq-R!{j!+`1ZntF*l%1cE&l8?Wivkl zGNgIfj8NQ^il*JPd^Yg<*7Osa}Td1{ih1L!x z{lt_|H}K{nl`h%9*MD-K&>O6hpB?zg*dV&tCHHK#XN;1V=hVh#>QSjn2{yv^g> zACBF835z`AJ~**Se1>qyQc~hbimzfK4N+XOvx)xl8B1Wg%;xy!;u z?cAah4J5kqu^xE)Q-jnVk_~K$@xBKU{D@%-iLAOg{674-lz-PffcD^PZ6v33&NAi) z0r;D1oe4*f!A>1KbD}g3FBi$xyLMK1evsca5M;30Jx)qiYTA-i#B)R;RCvf2e%~9V z%hg@<-4w|>8BXZX8_Sd~FYm-?hb{Ec=Nl=-Ir}Eh`X_f@uqP zA%Uk88%{{ZUZ?7T25?2Ia!Zj)l)yecf50<^Ft!( zQQ?1@kle@cRd9y)$D3}RE1FGASUhB7kuVgeFu?8PtL~tW5HlCUr0+Q{O!vVFP>gdW z3_kUW8u7QnH~PFJbD&!K%O87=t&N271uo{!6~6k{s6{RN3`b8HGh$X<2eKb8&|?pd z8C!0PE67s$5F(wqCvQ8tfT6$lv|q-!UzPSYb!qdE^+(>HtZ>Fdui%RDTt#e}szb}t zUyvadBr%qBk1F{CIH&v z+FBwi=5hfNzKOx$2^RGWmk8Oksg0Vy{aGEY9vOQT_O_{@ntz?WNnn09yC6bY(fHd? z5T@tq8#Y;{QB<9CgQEUSDZ^~ExZ=_g;%)1)5J;<2+3U)mYc#qe4IIf5eZUm{;urJv z-nw-&8w>_A%+JxwwX3x2ZbN9wfHeY{b+!0%SD!KD|LA3B62L5H&T8PJiXCR@k9j+6 z&!?Ied}!Q3Ow5fBVW;PzWN=q!z0AvJa=y_~!hgccQJ0KoJbU5z?fY2minUd)Bahtkg9;7-djY=$sm{Ey zYp?~9uV+wE{r$v-+hJ*ebB=bZzDI+KHxaKP?a0t!RHZeO>eq=pUtt&gedS^xv6}8J5F@1kC^3+C`T`^y? z@m1t~RCJfwL>8v+D}yJi52}ej8W$zj{Yp4b#5XcL`2850gO60-8)aTg77k=z4x3FY zj8J*MDJ!w5Tf%!g4+%cM$N9l4*a{vfAr6f|!otWFuDBo)9g%kKJ|N9z2S+;9 zjxiSMB3@vTM;ye#L!KU=JBaFKE^m+4_(KK#;`0a#v6NhKBbw0|P= zVk)xpLO?Ffr?$)RjS3Qk`l`g-xtNa%IENxV+S*_|pRZIzGe%i^m*1ZS$zZ`v`@#9; zFItVM#8+O{SlK?4Y~7%oQq_Nn4C0m=JbbJ$G|FhGDV9DGxTGPIN8N1VT~k(6sQ z!yw~^O9VCX;+KWdS1QNOc*13BP&_{nR5IT@?q!LL0ELK&WnCvHUl>Hht5csH7xmZ# zj_NdX#E6unz*dfZrf!kQd-29e)o%Q_oi97*ClTdzOA*lwag|htZ=gtj=CbS^)OBPG z$cGH!po0cw)~yDalLuq3@#$_QI7#y#dm4!{AWeaM^;xoZJA)yv?$q)12SS6+wk>ww z9tVuj$gYf{)S*emV7S=flv5QYjldZ$Mt0yffkDTT*3JYjz84}A6(kjevmyF9j0@AY zRrNw^&sO+rEg0 z9a@|d*}cx}65p}G#`{8Vb7F3s@t=@!-{xI_)+tbqY(& z=hXr6(C#%<6TB!BRdIaDq<)hmxd-3})qj4UqwBq4W(lS0U9AQKv~WLcnr3kQIEJ&g zds>(A2Noc6M*MgVmC;T8S0mLs*xXSh^awV0SXC0rDk!N`qL8vnEKf+lLDP%;nZgFB zy0*K$<1@Nc4k-VR;DF*ZFo%!fh+(Hi68Z8YNDcm9v=w`n|2FDJ{b|Sl6 z{uxk0Lb~t$JN)B68s%?d`F{nj;Nj(*oKSoC=jYe>*u1vI3JAeq{+f#%{4yheDGXZ@ z=fQh4nAHO3C`s?aODU6luwaW2&dkEuxIkPx6Vv<~Xrdv)vi#JVCErH}PzO=;K zej`qPUkN2AP>zKEPn%ZAlUuS4OArk803&mJ0t1??KL~6lYg!ggS@G0c#n7WA+HBoj zRL~{=Vad1}q;z^aWs%&4Tx3^C2!~`e`_oN|A(EI~#XU<>_16H@-LLeX7l@Syec?HsiV5ShEx*Sof`&>Uv$8n8P4& z`b5P0LT|Rt`Ro#U8^sIt!UN6@ric!IA{{q4NK8^vNTRM!?TgFf@83i5_J3KH)LK_- z6uBMrFz!z@-w^CJ9AfU&?}|h_+CrNs9^lgYt}<}x)Ljl5uDVrt0}4|bX|H87xUI$OL~z5Q6VSi;2QfzN)p zuHM0N&)L+VPY?=~7dB7o{iV*xQDf$ex|IY?$hU}}CKU_usybpG9s+Ui-+Q_nN$k8< zdB@y4AR3;HDyc+`>hGAU)5WMOTucfBAo~R_q<5a?!f;PcOku~0sGC?#aB~?;;f_y! z@E!HRKDQY!dk1p};f)dN^lb^te}Gwrdm4_@+b;6<=^LY8u`Dbs6qS_`AWW>Rori;> z(H9pUkd_+zrM)3>tX7N4?BZg~lI9zM@`?&=hi^o91O)FgZ;rmMLz_i^y9my?E#1eU z5+Uc{;JCBojN@QdY3We1>1toHT7}7d$o%?nPU)0YNO*Yrb~QBW<45X-v&C??-NsXF zO3Enbt#KL}8o0H=%r3`4;oz_^^hAzG3PD0Fkuz$4e}C8^z|#7?2`n;la^HndX95n_ z26KFGZxmGswkArt&JWkh^jhIz?qFtR<&>HuuAxEdvi%E5MJ3%H0RQe>DWR*qcBY39TZ5^5LV)QEfw!quS&@*Ek?p5KuaL=jte(or zVI;6iQJ&rA|ptsjllwNycYsR8EQju+BwheE)C_ORWy?dutZiIGm zvK=l>>5ix%di~^0iO#G|z+)Dc`;wB95I-C`DZPuM4L-YhKwB^~V+3PTw2dl=M*7}f zLTlDCJRuMTk#l+;>tBH=lx~o&XsTeQFzZ!H4g`ug&e?%_i;2)pqQ{IT(IgSJ34R7}jyQvG(jgJoHvy%q$w)nwDX9I9*7 zyu3VOVGk!p-+O-wNr*?n$r~lV7-JH)<}1#&_V!qiQF`7pE=BUrwS==Zg?#z)0E6@i z>ehIXVL-3iI#ml=1>smw~-=vxicsT~GL? zfI#`{%Z@H8--w6GUs^0G7xxz074eZgPj@;jOB#cgmyPHd8JD_a>9z;{4k$8MRxMfv z=Laj@{r!^9pQE4b%!W65p3({mlD$Y|?f4>}s;H(h|%aBvn}%yA%KU=;K%$4Vs#RRhIB9|k09Yf&SnBF7(AEhfW*s}m|#OW-1hWf8xLVO9U!k3#I7XDVL~4n z8L{giP=!FGqR2yaZ!ac5E(^;Bs7_5J0|Nuniv(skh-uT+m6uH1vR2o#d#U|FFgJ_# zy`pQnxv-3&6efM}KCgX^O4Ns(PAUSHaUk>g1;rLzHa|W*goVf6dQNm5x9+c3s;a>e z5g2P*u*(Mq20C3djE%k4^1VK0PnLuEy^5;#yBz6gcnBsrpC7^FH}hZ%y9WoQZ*Q(+ zKYR!T2Txk@SWT9~{rvg!Y(4;MFZ1>a#jrDC!^!tAF(n*o+M>1iUO`06&W=69eU(H) zN(xpn1YLK&LvL?f!Ir_Yq}zH{upVdf(AZcYNcpvCKVNBTPTTYqlr)8LTaN2Zl^e&< z_e}Z8f}OlL-rE0NF}S$g^L_x_>Xz>Qq+#@et?wmSN=gbWldTz4o12?Y*4Wc!_}-kq zTpI&ldOGKc)qFX-s|Z#+GV%(akkFtzhGtvj>z6OcY>h{_8J;`*liMz7BHnfVHSv#C zX$1sGLBWr5oDRBAR%$-_#l^81R+d0BV82yVP0PhKx`L5?0$aN1&3^R$xTdWbzU1$@ zMlwN{-;kk^Tn|uI(h~_Oz#e#C9EkxRfXsscLV>v@xX{?opRi*7@9ZQCBSL?91Y{JT z{(BB|aL50fTf*fp#_cKlvxZeQTFzog*=z2uRl!X%6Y1tupohqE*I&@udUp z9zlRF{dm43oS~=^4~7&ZYK3vXo`?CZ3rFZ{+TTHkS}R${HgZ_=e6IbUJZh_wv|r_s z@!fR5wn*}Ck6w3pd@e*TisW~n`e+@|Jx(fs&>rZ;0wX<|9>_= z{fkjS4s+FO1x^lL^MC{vRLe#L;&_xL2xRJ$eX}9h(2VRl|R4 zE*?vP60LO$xUk)^=3pWKJQrXy#?^HE|Hi9C>VpT)|Ih;bpRmgR#g6@41wl&bCv5Wk z^NJ;-VPze#)V}xc?YLKtia7mkWzPQ0D?0jZNQ14?E8qUIua0c<5^o6P9^gqR1%ix!7qWWcgtv$lTz^s_u?Lik&!@N9f#_ zuhM>H|L7|r!O#9iVR~9lzY3(E-H!^L&71c6i0;1cfTvj_kjTvZ`;!;wP4XpeLtb8@9sjip$G7*pr5{mroYtCwfLC-NbbS=!{0;-&2Xp72-%EfU|h8% z56k8oWEwJLmP*Qrb*PBS=&H6U=OblrIQ-+9#}AquJZo&as@j9#VevvXtp6^Dt>b%3vC(n;b2a zWWhObIcwy?kw_jcQQD!$Pv-2ABRUL*KM=9+kTb}bDUyE7Wif3;)e!moes`}l?a^zQ z80u6bL>g3@FEK8Lkq17%x0ftb4ZOMkXGq4+w|U}!kH}nfsx}CJIMMv>sY0h!}q3pmD%}^NQY6C2=wu+8imRKxF$ja(PJcLG+d+Z zbd*<5Uu9*BnXhl_|MBlkJ%k|mHx<8Trp2iPl(Phgj33;cw28^1$E4SjZ<}#lZg_}U zc(brMM;T<}Q@+VKd9!dr+2gFfXq@{a@8HZv9rMTS4c(u!SYc*m#3z6JMFoT9z8DI&xut0P|T}T!_IZ*SjT~W8i9$q1z&V|D0F=fxgmN|BN*h* zg_jS`BExMZq)d=+supZ(6dmCns}_F$;>xq&$?Jo~IH~{-Nr2YRtPCiH;^FRJ+};X^ zTwf{g%G0+j6D;c=8{T+U{o#$zF*D%AKec{)IBGY)2M1{>G_Qz>OIbWPi_Sdb$k4uJ zuJWy<=y}+qR%t?DVPR?av#lVFW5aYL)`heG{QVOKH0hD3`Ln#G?Hyh)6WBJM5QZrb z&|T{ZyqT@|!LmBlmDy1(*eogQfflvHA698OF2Gh>yObcfSJCAYRLiv{Fj!N2^1~8` zk}#^;_m<}+1>d{4Bi!H6CMsT*+Pu+;g;g?}&Vkz%!;7lEqQT z@Z`Z9A$}UuQ}A^F*CxVcq=&a_M$F4myW3P+VW58*i@MycqjEQQ?|#uMJ{H5|b+fPr z`=^!_`ORg?EiD@hmZ4OX`C)CgY@qs+oQCX%{;mLjf4knuYQ6R^_bHOl*F$VgR4~Ky6x?TgnciZ33JpqD?f;&-+YkyffE=-4R{K5>zFnxJ=qjD)fJ>D6`w{3u#?97L+Yk5m2t!@x6COMrjiEqnbHDSmUXf zidcC8@GumXlG!b`=BT#CXIeh9D@l&qAp2t<~u)BQdne=k=UO6=8o4i zbIf3)?eW-zzQ1Kj)R!FW6PhYZ13H%IIpB-I6nre9Qdl zh}z4O`u(001-q<^XZ7xjON;s(np)$j4<9}j(`njjvaLBm7CKq#Vz)SB3JeN@e;T}m z01?C9J8O?#LgBrIlyQ^|ya>EGUT99^zrDGDrtkN@VQ%NWY;OH-kGJ1j+5Fx3J*#7_ z6_bS>{=vONIEZ?!I&1h`g6aoDi^bP#nU%|C+oGA*C~VgU49rRO5W&;m-_xsSLT|lJ zsKzEH5Fj^K1DX4sy|(jFnmaAU-u0#D75&{kz2=T{8Q%qD;>LFT`@KY6gvV9yfI>m+ zI}KWd_}~m^-Iw10^Q@gMlK&G(Om()>Z#p_DjH7pV>V2cIXsiyjU@40f0TU_H@9o$5 zr4GBq>#WH6cQPflo7i~C00n;j^ zWk6Vv<8pIq;Or{f3-C%_XQxMp+eNXorh-&W0v znwlu7d@neB><+Q)=(kaeYY#{hCt&{F>RWwHG{IU&7*5FC#wF^F>{`-9Htkvi{qgI) z8Vb;y;ABs`G*Q)4ZWa7@>*)T*R8w0f}0k`b(8`6laIA$~tIo z{(z{0d|KGdm6p|&8Qp+tdT@Sz(i5M!7a1m=ToUgs5%fV(vYIU;0Cgg_r~nC)xb}1W zC+(6|(BaptEV#1aGGb0QR2}yv0(=4@AP}XGI<Pv}6x5H}1m z@O|F9dx(CJ7I_ciHot?imwLO)t9Cjf0ETD%kuzCvySUjo+1dvw{U$R$hudcp!M6?> zK@%Cj>NKpb?C3JQuhavN(E$5$)`8dT_tRrP>RGaSa!7b+`=pW~9HipQV4HUJ+)5lH zuP9NDR76`+tRXfBH9TPjlIcK3YvCt#)Ga(@5T!%jSo(`Kp%hVHe`}F|f>~;|Knr>5 z^!iE0`36^dbCPfj9RoK~EmEzUMZYquWp_w+2=wNnI!V}&2izZr^TBJa1UHhGrWr21 z3;)c$K;D~+PyuFw3~LV43-aGDrY1~gMz#{#j5rrQuj#a96nUnJDqJn2CDs%)xf0N# zNY!cAjb)hn9Akt%53{2^M||b_Ir~c$GW4_enwJo`0k)eRNvpY162>@%`8??i2lWp` zkSd=t0#B^p9Z~&)c09+-#aea@b6#umQ%U#RgMC9X zZ_d8*InU$sTwCM$oPLFxr${R-yX^*?Qm05H+5<(MkN4#QTgf$&bQ8b7Z{snWSLNm7 zhJ%a8HiM`133uIh?pL(-U@X^jQk_A|TmZ@dYND6-jA8}p>QX>ZH$A6$tn69w(3RGv z_u%c7djy#By<{XVqxk#8Ii5=^ymrR~s!P|=b6w+X)gI2!Z0cwDGrN9&M&sp&u%o9C$x_C? z%uymcFYf$wJ^j_xFC=lt11VuG)E?uPGW#QmJyQhiAI5WhiNK_19-hQ^r!O;}9kU{R z!&XL>3qy;vpu=YZ{VgX14&Gl*3>6oQD(l+|e_LAYe*!Mmh1E1+TFR}7=Y|vnOfl4A zIQUE!dQS{qSFRN8s>KQoq4`5_Xyx*IzOo7*be$Sf8~p1j_i$ z1Vrw_<3wxg8(aEiYFbs*u0b(MtCN~tKX+ioGiPjg^iIL-fbyII?$)PdiyxfeS=*>2 zU3Bhk|F6XO$6H)5rK+MLwiOQ<80+)%8)p1NetpV+1m1OYQaA-6%4c^Q+&XLrp zsAy>1;RihAFet&;&)8_QS#Cre7KY1 zI@g1nP*MOaFk$#R)7C$$NrcVjMx6VeD?ZOZACGeT0xP$$?ZeB0v98nvgp#AUp=J z_5gcWvs1UFmBHA{X<=y@o17dZp0EtUA`&?7Y;y!xxXb%u5wc848 z3kwS{7OBc+b~FAuw#@D?__!J7XWN27!ifmhU^8uKXc(KB8C_mp&bpQ%?8);$J|%E* z(STgg1tX50hKGj`5ED<0jOb5(Pc7m4UY*&S8nzjfQ3GmCR#ujn(+CwT3vh>8i(p_K z0<6(%6&3xyBo4rE>>Q|31YuHy0ltNBWo3oWI4AE~0!;xSVHegU-1_!JK(9y2l zxa`b?_VxAIG$W^z@K_NeV^J1f`uqvHZeK(vgfES&;q60N;#o}SKYDwG2ZRm2qspZ` zK|{f!{0>Z?KCO_(_x95#dU^&1n#Ygt0kUtP3)n;P)vLugQ^2<+3A(a&Mv?^sX0=9$ z$K%NCLwr098yi+=XsC>=tof-NNf9m{o|3wHXn!hiy;ra9t5^Pj=B0b|2)(1D1E7N8 zge>q7ud{_<;9CA%Jlxy__lQ`(7phm-?ac5e@^b^mVSOlznBU=3SASeGm#M+fN3pY` zQ3dS*7k-!D#Dr`*5wPzQ6{V7wm)A}g`GW?P{$YncI3LiqQjU%l(&u>K zW|WlP8g@n13cDFT1aYZr%y8wCMPEov+MaCUUUJC5=c?=y==`+=1mZmM6=&h6)3~Q!%3XR z=vB7R9WQ2ZcYqjA685Z;?#BfT5QkwWwXpE)_A5FS75lw;G5QA&K$;{5D^P224 zzyVbG`nnl8ASA#}1pc(>=u75`jfsH?AmZY{blyw_Sa#P{z)=%_kxTXu34sYIfBbm< z>C>l=rKQ-)U*uW=g$02WyeVoMNEftU?IV$Q|I@-T*&W}o2zi8#3qAm7AfU+IKTKOx z!t4szJ!{7zRP}`Y;|X10QeEYyh6W)FV)hnerOe4mHAKLJa&h5tb8|DXuyg>bO_HH!nJrW#P0$tdX|DiBIWrv_TS>nVh!{pjl(Moio5(M= zP3OpfhO98@9}z015f1{cy1cyn?c7aL5((z9Af2pLl^J$Di=&4v74U~JPa$HHdiD(d z)vH&fhFzGD7Qobo3=JtlSS*LNypMn878ZUd()D_qF6b&Scv7auETf>{TKw*?6@`kL zmseF;=TCh=w}SITmb0@f1vq6IRUMnQSych3TQsQf{s95${1k~)`~xEVj;k1}{i(sF zrKL98r(mIAw1r6)0@3jFs;8BJ52vM(8yOk#vDu^FyC?4L?H!ybq@t<{gi$o0VXv&L z9M~pe)p}}S@#u>}W)$$E#NN_hOK$Q71qIxLl3-OcwWIFiFTrv^L`D>8R%d_w2!Q|+ z)oB&HwoxB5f>AKd#%y|)Eo8jKv+U9;zhjMbjb?x zQxM>SVfPG_7+vMYz1aBp%MsgF85F`kN9#&yqP~=etNo)+Y;Mx`g=%NroSiEx&fy`z zxq$?U>Cq#9YE-Z@VA2P-58i}m5I(!PIvk`4gBhD0fS9knHw{)0Ha9Kg!&gr>Mp5$fv%&NRfk_bo{0y>Xdo3jx0m=+xQ&N7d zOfQGs$!B^w4-OC06J>$EK))xBq2_maZ%kTR#IIi(-@ktcvMrZW0!qpq&Yf|5$yOj9 z3IJjS9FUXKb)r`I0v<3k7tU7bfjd-GSKlBX{Cs&I9o@gfpcRNGW;3>O%a&N>0Tt^< zjSA9+%iLUj<7#vQsN1j?{v=2&jtgx_-#a^9NEv10q!Sw_lT8MN=XR^+%E*e&(EI(6akA%OR?$c+f{7udjf&> z1?WYpJs-%Kn?HmlEx<2VPkk~k`t%7A1RpDFasP`1WDH`zRNE$!o}M0?>LwR68yhKY zZHhZlQx~~m!_`4A4h2Od&_dt>lY+ekOg=U)F77Xi)PGxfUlH4|of*Jjjv^*-3-TW^ z6NXD00-=tCkB*Uv2lL^NVgZnETIeu&7x)0U2OS+9!qeUQX7%##?!mOF{i}Tpy_`U}R%W;GY{utuyZgtFXWrhzKqtdtHOUTe7;=6G#HYQM zH=s}$f&e_bIc<&x;sl^nY6G=oxjPorMhGUQ(E2!i-G^D5E}+J+@8_Oyx=5iEa6$!z zq7$4MU0BEr_7%v|435@^L3`Xaq3b)lz#uv`HI*df&Iv2-K(zpq_IwY)A?7lPI2@1! z?GiDldcZjqH8sOQXvw7u5VUkOhr85M01Zf@whM`agTs>*hFj{e>_cf46_7^c?-T0^ z6?+I^3a^33kN>9!i2jutGV--F!K2qo@3bq$-@+4Y`-&*5s2mchp|fVl&&_#6X!mcM zGk^3Je%{!re>6iYk%Yv>T-rjfRhXzW7yajPqeN(q@as(x@pSGLjwwp$!c4wk;KZ4ee!6bQNO+FBAIR)Jmd`Sa&b8ealW?;aS~ z+2f?@vIHWEOudm$FvSBOh$0$UT+k?%Sx&GfRv7#O+GCOHBjvsn?t5G&eSRGVVqh^% z7n_fbjE&(SFqx41;i~>Z+dJUKpy8jabAC+7q7ewxPB5PYnl=!CNdnG~jMO{9eF*de zv=>a1DMN_$7Qu*UVILvsY)BK&{7lRC*ma`SgdM?*+I35@^~6SuP>-;Wy*+}Orh7#k zJ(kTvitD#OMciVmDPs{dv--k|t$-A2mf^*_yK#Ev0iFlrt4p576#Q8A!~o3jrD!~; zLvs*x#5N#(($?V-7L)TQJJaG{}P(~l+VP~HOikF zh=RVkOZSgMYbl!Z{(_5n;gFT z#ZbUWI(9NqO6LlCRxpR}7p&eJa*$GRbK|q(fu6N&)}+Pd3WGYWZoRXuPYeSD!AoG# zSbB^^b|qM?2vO`Q=wxiM#8tDhvVf3X-s^aGI~yrHCNW`Rx_wAxxQCWGt$GN%_DRVs z-d`chNNkCZc*Fmf{Bsdse)aL`iJ9|Ki*cpK^-f>n3pD?a=CdhttQ zr!%(^QTe{j;t;RrjeQAY&Blw>3${ceHpe!U&m7hg8-*kMK05Df>aN+!e<{o9$}Vog z8NkRj3fy&SN^haT&>$RQlGFm(R|Hqqv=BCbK16>#xblk>~_0- zY7gMz- zI0BTi<&vr~I??AAx43>&z?AEey%#N*YxjDId_yBDNcfIsX&TNacsYzmK46l)nb2`( zfdQw>PG~%~lM(B=W{F*RjP#33zCIC!yX7&yLR6Vew+|mgrJ_PY!Xw*Hurvm23V!50 zQ+Y|?b6uf}0I_LWF!_D8`w~BcNuslwZ1C zV5G0;CqQM<3Ne%0-riWl7RRu`Fxl)aYNO$x{Ix_}`Vt;?m_e_n=HBh3;9+U*faBX+ z6VplKSPDd>L~0;}9Ily9`A%HX^}u|Dxw^61bCkt=bncUE9m7W4r)v4sC;i#-@9R1l zl5*|gaIleF6;CKW7$@mhIo^JBZ0qI;$o>f3b$4?ba3Az+avbQZZdlXKxVm_s)-Bvx zo9)8Q+K%>Af@(KRSo5S?M;HwcZ}MzTDnD99*|9KaHr4gLlQ`}W zFQU2oxWkDpRN*?$V}Kytu)UtF_`HE32d7a-0SIuxv}gjf%wQg_Sysm-An5Quot4(m z&}hB{OtD&-0TO^2mJ>8>0E|-=9r5z3;ar2e(8;8sA#Ix3CnkQyXU6sn%{Nfp3T8`^ z_>Oqk{eh$v^JDS(&F<%0vOTr*m(soGg!FlgV;kLNbf6`oY&aEr{fNM)$!Dha;HAjy zVIH$1hZ2s`)za-vYo|3?k6KEr=)~=NQ=h$v_YsMSM7O{8*le2CObBPILgJPfy!KX6 z+}4G13yY1;XM5rHGUuaj5q*6Qt`z(->}qsxb`tv<-C0k4R&<_q1t0u4EWz*)MHW=G zZQB3Ndp4lZBrf*~V@p(LFxA&hc?YWX6Ha(#5_-8Oywkkp^L1OdZtI2BWZm21V%Bn- zAB)qvmpssm;p!v~TjWz=7pjh~@Js94_qx7ud1%VDORa)3>M?EAK36QjWXO#sZ@IGP z(w|aeqawn$sw@wqP_CGYUXehWM4En|*#%$S%J15OSv{dpr!8+p**i+*p-QfbMT%z1 ziZw4=ZL<6{PuY&`R#LoBc>d<2o4rKQQlH)nxaqyC(LpZLaq^wB1B$d}y9^@V3tHu+ zuL3mjhYkKIiqiKe`Z6kR5-2 z=eXHh6CE0#>y%IC-Ct9^k=vMh6_qZ;qvwe%m>3Z84dVd)P^Rf&^2Zixk@Hi=59DkM zw!1g|#uS($Ge=lIs)hfe+~mf(pJUsr^zT z_hr=zz44eYFU}55GUry4i8AyLqx#R>&h3`c$WR*IfSx)&Ueei_8w^oQ_~6O=udQbKCYw(`9SD*RF3<*QZI@4;hb*({A|^j9HdW*k&=0 z+|I{%#}C~H)_`hab90O75$k64^>FMkxv}E%uFdNx8WUm|=;D3n-vT>zq%s`b3IEd$;aqDMy93oECwp67xTnaY{2lsys zd3R(kVJm;Y;_-TVvSYPVdrdiF@_Bz*A=Bt*e}P)L9-8iL>jWI~k*Bg^pJa3`Go7Q%ab_Q2ZOy4*gCcTQ){Ya@egzx!5*R$;Rl zIHHnQ%lZBF-jZhK+vf7RxI|sgWKd4(bpwI|z9c-*IUgmm4TPSr34(sWZ~Dy)PcB?% zydyv~4;LS^8B|Z_@Y3q*mF+Wor6%R)lk;_A`BM8rU%0cV#Da3Jwee z!}~KA7X=$i**HGuO?)7+216p&ItRe6o_Tr-y3W{3H(xR;WJI*;#YD15<-`K)FfJ}` z+0oh6wZeLuhn9{`R_?dx6C);O!h0r%Lo1#otBq9;t;IW)Ur)Sw&&Q1uKGjy-SRWD@ z+R@$~pdfOISl@Vir3SYIf406$RVL~x>U-5om0oqb^A1|(era-3wnKGxezAW@b)D9H zvr{s2dv<-j`8+9UsOvp@3H4wP1dpB7&(!ydS)JDyhf_r2B#`V;t?lBNgwIV*CYR%d z+}EL;(inCOZRCOF%-HJdlb_H7V8=SIVlHD{@@ez+Pt!BhF!T7U75b8?wK z$lN*qP&B1^IRg#1U$?(n)k@!rs1)f^Q9tfrwU48(jX&z4a0fu{vn;!Z?g>k9wb`0+ zpWpy#{m!`ibsE2PrlJHtoh z6i!YqL&H<8eV>xOu6nv&zftA%{^eA)J@bI==5lF)8|zRP>z2q>$PHziVjIFlAiOrv z)4RaydvzZo9ZkW&#qwU7%IljhLSNuIn%NlXS1+#P$m7><_%l6M4&q^vDD9=ypp|S? zdLpLad$>H2xqKtI%g9Ol$|cM9w*3_DY-P}=X9-J~wKrOUIJ)1&aYM`W@qhr!JjmU$ zvd>9eJfY|F6e1p%bY2bK>?sj5-j}mNhiybz=)OK%gAF&+6Y7o=q%OPA{-9`HMIH4y zX@!m2SLLpzj_af1M!P>uCYrRZX6jM{HB5Mu;vDl*}J`ucTgVGCpUFFtX6&3<;n>vN0TOUNRgGyZYdESI@hqUcr5=mwMMtCxn3bb0rb z)1%PPQ4N+Z$@m>lFrvM;IKD#95_c~-=jP_TZj*O=q3O2Q>zco(tD^JXe|1><1OPB%0f=TxQ%bMnlKw|%#E6pykX3*%I>&-dl;MF_{EYpn7R0dU2 z6~*uBiz_3TtD7@7nA3nT*grUAJ3Q`c8eln{9qIa5YI;lgWiWlR1AFPYeTa6fYmId+?PFP7@VBsvc!S~J zKApz|NJ;#2hFgB2U9AnXE`#Px8$qdqJEuG#pZzJUQ4D;w>CvEl43WX;7rFO%LLQ#( z74w})LZ@SnZtfoTTO*q1`>sBH(V5pAyVqO7UzeH=K9}tMRvvViXm{mr^nRk*r)5^( z@;{h*4|uHmzI|M2A}Y$3A|#|pc11`;vQkzV5!u-*87U(aWmZ-tWN(rpnUU;GR>;o& z9pA3!dH((Iq)*maD&eq0LiGO43b@U!E_+rN(x;&V^ z@lYw5v~Rdo_g9@m@6+MCLQyp%Aszc8&;RbFHxe z3kyr8!|yAg&ip@qJeO>0?n^Ycgv_1HtdQFsL#9e`%~zZLwm&`_c6|Ns>M}L`jL#YWFJ07k-XQo0$@$9d zX8>N4UZ#j=(iq0x20CD(nX1T!Pm?YvD6ms#HtM!Vg@?qNo?@I(%n6B^qsi+@7Sx@Y zc^SMejOm+`_sAS*_aCC|wOoh~|9P-ywbi9~DSgRtwA9b>*UkotJDw`s&y)sVrr7?> zXp1X2;!^i{@?t1E)h`?}tAerLzl%FABWbs?CK@Hy>YR))4NIOu<@(`wnvr5a%vU{+ zP0fQnxqCf-&edCX#{He87N2`?JAb0T=&QujPPvhCuLp{cVurHsUhPWQLc2M_U4Jv< z`twNsXQWO$J!55lA?jr+Ub;$lK>dJ{2vw4D)Ko&1`N<_GgE*n%fvIA7qQl3ZOWrLk z<~KFBcuIR>D%y<8H)XJ!s>i5K$IRr8#jW-51-d}lL=* z?;RcAK)1zthL1LW=Z%#y~qqS|zpPw$4GiQU>sq*-W zp7Dz1@*j04qe^#blmAuQE?`*KaI50y9yC$zt6i2c#V+seyaSNWqm%s4kDU7Xcn|B zY7YuLYk77-PS&=saSM0KasNjT2hQm>Y#vWJJ|^gTlf-@PRn;<)g0jlo4?ZaWIB(kg z0^gUaR*Pn@8>N&2k3h1Jbol&WjaGc5MeJF=#$O}nVbBjyfA9}|;ad2dJj7#9uk zl9bo@T4HSXe6hM$y!m}Kfg?H7b;hP=^$&SE+p|kw6v`a^(K>vp_#}^F87X@Gm;H+n z;Rn+mgR8X{qtBaM>`GEJMM*K3YOrQH=soWZjqSa+G*rbr=WH<`xM} z-kSbdGOO2@AG^U`#uevRy14g+>5JbT*^hHPZeZ4#91UTQJM}GT<+lEc&2|0;i3O(Q zIpw)3z0Hu;jg`o-+OV^3q502+m6*iK?=$b@;^KZeZ~nHpETbS~M9(?4x9qRWCGty7 zD@Do%<3cmf(mi~pHyRv7LR`G4de%I9H+!f3iVsQ0)EvOgDe)-rlT95PRB7*Nua{nu zxUjeq+gP3WINYW|bIO{*h3Oj4LHET6an}5+tnCw7hz)D44jVP8i+a=A0xbLp3PcNO z@GPL6{`cAZL!PzmFMc<4_NI4D=5-ORPV45XS@NW1$>zacr*Sco-*xRZ2EDEUhdh?5 z#MeubMKs-m}2AT9diLben`AyNWG7!J zx-Kr?e!p%q`BJwg?O(8nFMSn@wy^T^Zt9rg$Ixi>HpHEAU)q8E-i*8Mo66|8oD;D+ zIx1*)it`?&viRCIG{tHyYBTe;%5%&28+0tn`kFxCvO?Jqqr~ZVWc#*ljosaKKIF8% zsd=TPu}}{r-^H+ZSlDc#mux)d)uW*ens=7Sy4_$560mr#UaVDHw?;KF`C;4vs(Ct7 zgRs@`-#gkOil{bsZ%B`KW*U&+us63(*>fW+FY~lZN^@>cwOd1YoY5DFCnt?LF8V3i$M)pmLFv)a-}=pq zmz6s6rn`F5IrTgW(aaoI@^9Hb6^}_e+m&a*h7{@!4rj=GK8*!_(|0akVB#n9@%s4j z<6)!iTkq=&XJ=>Y^V3D!d_;ki5=&~Fu%hnJdGh*zrQFpe6Q`i5aTeZI;p=vKfg^3V z%&eDPy;2%R4tdm9rZTSb$jC?> zwO?Ob!&vi?vuDec^V^vny3V8Tc5eUFQxHyj>)h{)_?g=M^i+9+kb~#mhFAt7(-*@&}YwlG*S}N(t^O$d?o5oOx!}@ zaD-7G1lL0-nmRk9z~H&Mx(d7g{h+=4)kH88?U`{yY~Xj3&&|zYn1L6g*ZXnjG>Yel z6iZ(1{3k%Rp2Wpb%{z`@j+>f+;Snrc(p%@olH-CzrfG+B!s-Shf4y2|8TfKrcc`&n zdTo5EtZ-mN^SF2Qt23WSWpPKf&pCe7mTb>>=aMZh=Ws7L+>D90Ful_D_Xh|4@LE!) zqjbE{60QdmuU0GT{T(}S=Hr_y{pmK8V)-m9zeDCd=_dlVQ^Da=_(aShTVJ;FXJ6#T z9vFsu@2vIM`-|(pDB!j4LP{eUX)PVAg>hG-6r1;@R}9xLveFp=IDwY~t3N;c`AtVI z@kZ`!yJm^(Kli-;Fj515!cWtk&nDv){qj-%_V(5@cYcf>SV`#)I4M1?&Fz&E?DvT@ zbtrNvsc%Kfhpgo4{9W4khe1K5w&H68bV zEu(x-Hxm&I`I)pQD`?1k%w4UAJXKO!G$nS{Ui{Z9W`FJtN|^fo|Et9#8&n>LTfAj_ zY*_wCy;e{5SWuT2n~&71b3SA_Qh_^JNMk3QN3;BF11}|BRdRRXJtDt<$Aj`=Yd3s> zdl=@qC7{1Kwqv@p>-$|HkA0<1r)~YTsmiKqUfnpnuxZnDQqs$8$x2XfF!39iZ4tWI zDHBV}iG!fZ&5vb%=c+X2HS})9g#}r z?x}Bu9ljyvRo5E3S6ys*UEb}9FiWn&7qpf3O-c$#)X3!%^_=eN;ywL6KWKksEsd1` zZu0VO^PcEAeYLUd_V7hzyPcxb!;KRAGY!<27G{~`q{U>fE?v|cyf{9ktif}&3+#D- zESqfnzMSj4!JVW&yNYZ)x@TN%G=Dx55+1S>Wk%|K@QpH=dFos6=hKvOdHB!TX2u^T zxkBc6^*pIp@JRq*qKu|{N|5kzfkBuv z{Q1j!Bll(N#OhZ}GIVrwKwdQrAqxp4S2G_;ss6x*q0s@I& z&qJU8Osj7ujbAxHeS~vfi9fA z)AfSO^*=T=1Vet81%D8jR475=VH^vVIFIPhce4Qn+S$JeR=_?6C6vz z-)p9{AoSM4(E~cBWbnVeb1p6}S#WFFSfBQw`pbcfFbj7ASQ)jKxSXl0t9#Qz_}vl` zgyd$GYuAMPPD3UbGMhugIjCS6UR>(k%BIJ8N-$F|!r0HKw|}LlyF2iDYWSx2NNpRm zR>dVH-%SK>*&wXR2K2--h{jN+v|PG}H zqp+w5z01?p(;=&hbO`C?9=piN4M3VhwY){b=_*ux^~FwejV6M4W+EKzH8td(_4P^= zJ064qaEsobgh}Sb$xiSM3}90l^!Quk>C33?})RdSis5F= zbqD>)`z(wmf(-M{CHyaUZ}U1HbUn4Qp@Ay?`@?d5x&ti>m1LppI$8dX+r7-T$0+$p zy?Rm+>K&r>--i;m8QKM&gacY>2(Tb_F}1KTUSC;=NYG5Y3XzhR)T@`JrS9hnf`TZC zkBr253E3AqU^hdgCuAh6vg$FW9+3yHt;!dyJtIuq2iG13JpSwveYSL?6sIJTF;c`~ zg(*2WE~(%ZeN^2~&YGe>Z|K$?ot+=$C2zgo_wLmdF0|91F)b&^FuXD9td~FmRE=&n z@iF2&GtRB6o13YnrQBOJ-KGAEpGesD?jj-dpT~|LXFGiO{!xW+ev2+)$c)>eUQkz8 z=bM;WSQzf?-N;?jO4VrY>Z*l1$&PtYuR71$glENxbPFU`!nDk;&~_&qsU zXAms$i+v8pIeV^2e3TwOf7gPyxl}NMlI3x8y&$nhv) zw>81rL2<9B2Q5_-%8?n zEAN0uF6?^)m~kv|^#Fz^TO~|<-^E6Oj6gD)p%f7jp{lD(>FMXU6Nm@~ zT;Nu0Wm^wyMj1H&T8$gp*;k2)GHE*;O6u?XY(aGaXZx!0mK3M;h1OxZ%VE_Qbah#d z9Xp1wSYYm%(QZzt4n6S+o4Q|6$Xhe}TFIYh+w4cq5Tp^Z>hqv#yxJw@YUf&36&}MA z&zk3nk9g!Y+r!AcGE%p;zUqJFW(Y)V_ZjvlR?=JZdfbkW)JMlBeDIFnE;nW}VfBqM z{=13cG+p_#LJzNopgf5Pci)1h0%G`lJ}oJ$Y@h9sw)CtH66-C-#i zv+UH*XM=~qjoGxXmqOV^4es~tfAi)|-`etAmvt30lc?Rp@bH7;;^Kr_8143>M~`k! zq`iNS(#;R@C>(5^Q$z4wnQOltmti+{HF*+lHk_iOk?>0LgpTSeCR(q)g@D)>N~!v| zv%Qw`4Lx|2{lmjw`XeZ_M&w+c{NC?;R$`-cLoqN)v=8t#d)pE^z!eO z^Hvx6XPO7(^AF$uYdW*OD3dXh@wu`pbGGMMG`Gl??_TjVv@`~%BH{c6*dqQ4mti{H zvrG3{R$D^COF9aV%I}|=z_nLj^Ex|jryMV zbxPxh^t^8M!{G;rZjdCZuCfqj?$D4EqVLX5#>ZczE??dQ^P~9q_`y)vGFy3~`qfC& zt}dD`ooG5K7sPZEs&jUB_OG3g?GY|-aCS;aN*b7+4o0*}O!R@(4xXW};Ky^yJyd#n zdJm_@xK@vgxSiyFc8QYSCSPf*;Az3{KN>&Z*V##O@p(8aqv59`6)U4JqJ>{n`-c^* z);OqYUsJSpKPlt)=n1?3)RaZ7aaMG(rs65NgEu|*?b=2Z5tkhtmhMd_^&UFHqrgg6 zq%H1Os;lz(%NLREEt<4!6(J7A!!37m_{O$tH%-z-ZzUzwx#NfCH(xH80bjB7H_vK4@2kMuW9h{95{(Y4&BJ+FDj_+L_mQ z0vOLI6~El8eVR#jTlpVhhbbncz?|!WSKmG@(dRRMzj!u)%%^Ll z%QVctXC9%4CXR?kije_|g}oFzGpy(skqDC4PPDpI|ExiI`l-2@`awB-CCk`#AUo=^ zso_=XWHN9-`v$FhLQ2X+Xnj8!OyZMB$%lF) zQf6d?eEK8>iFH>K=Rrz?unDL8r}pCn1VKZKC^K{yTpxsk1+zb_5Ob}`S{D}s?Z?hZv?(fgX#)(Gg2ZSkxjl-Jbc)TE!hj9RO+aGSxQf49f0=E8JdSjlll z`as!s=^ZbBtI-=Je{1_-Pby&Cps!KMv)|&PRnzd;aCO%g+ZRQSe7BY3h8s(znIs+Q z2=gq%&^;&n3MX>=$bH4=f8NPK^WHx_J)PZsC+DiVx{R6G#L=9$OBYn$s_kcDs>Nye zekTV*1RiaL+a)X-pq+hoHl^i`l(h5<=nfHZVOTfMott(7Ebr_Ey|-!uV`J5@lq{Ic z?QF}v%LpYV-^70Mo#hMlQ2(!7R!2eqLeO;o!omWqswi%3wrAabo1X5_@e^L4@E%W%fh%EmPj24B%zE3xwSPxl+u)htyT^k}TCu}pitNd_zf?)#xaf5>>u#}t! z_76N%cxcc*StFc1y?5slOF~vj7$O$9@jE%!(_XXFiDX~r#XP~f?-rENw+swW3R}2v z&L@@az7CZP=0y52F=TOjnbx%&kQ6lQwjK84KaP>0zH2LS$y1OoPNzY@ax106><=LY zu8lhz2iGs1ki|zn5A@#)Sajtdp1a`d>)X`R<6bSZ(|M5ptE0=3V<9&U84@(1%bK~;}Yq>mPPsu~)yN=iX%E}C!EK=KJ#4_u%j+YU+Ux~}bi zH8g5mQBhH0_qF`B8yeit@U{8@IKzQPI2b|YV-weQ=z1zJ%q#yaR#tjOVLa>Mt6aU z5~7&x=@+(0iZqr^i$YgTtz-onh5O2@T9>->PeB2wghRv~OX< z<+07@$o*cG%B7v^@~MFG8W?7LLIUB4haMM?*RVBBM=@GB7u;-{EB$aJm2z3hbcCc(lP_0>{Bpz#HTX3d-n_CA6^!D zr3%rT=TJm!tP;i}kk|~@{?71R`{0R6=c{ix?ixgCGN^osp5L;!|3Gr{SUzG7Uc+c< zsvGwOHxPq=FA>lo4Kl8eu1=5-1B8&6l@*4g5C2PLFy)@QJP2t=@x(FW5(2Y4OlJ<$ zD$u%^ylc6GsRjiMj&yf-Lk9N&#Up`mA~fJ~5H~sV=DAdju*k@7n0r}<$>5uJ?+DHK zp+kpo)fy)j{w^)`1o&^F)%vP+ngD;DWiWTd#6jc*S z$Q1+5|Oz7zs~n99YJ7U;$Yf9#NZp78+Z0$Anh;$($IUJ>*UJlC@yHk{pz zMu&+{)G+Yn@!0tIt=>{MG)9;#gBt2-#b-=9;`=3RDg^}v_fk_=G$ksum%53e-LvRb zzVGr6nAod*6HuCJJzYx6qjvL3b0JbI!A-8CK1a6&Qr$9MQT$aK^&l_ZHtqQjMpgNe zlg|V=>!0ME2_EpeC6esJCN7`c>@R*YVmB34u;fiS((f)uTt)sYEy;zlqpQC`oe3*c ze++%0fWRQwP$i>f0&x z5`Ltk+fX)Qas-1j7tfs|!5j`AEg2bESE*c3wY7-}7mmBMWb(#A$|=`iS)2a7d-tA$ z-!Uv7Az{fhZ$AY$*UK0nxRGb^1sV;!b%Nv!VUq)g_WoMNR-6qSeSU^O^dL5!ck^aY zU5Vz%vwE^vhV+Q&?WkyOwrv~vKCv)6eIZq&rfd#hwNu8_;GndMN{G4l`?qh)5l`p^ zjD^SEy?>9%5w>&6T(>Y8hce{p)2DqC6AD01To!+a1j=Br4wIp>l9H^fo`^u0nmATQ zfgvqp^aMC^O^uD`@PUw;ZH{yl7K+vy&%G?D3}TUZbUl^h*fD=bi~KFEm++eH# zZ&ftL3|}1FMB7cHzMBliIP`>^O;O{P++4FQ@Sq?kXUx1@5*KJ-j*KTvC{>C0A83j( zRaOxZ`qAYyj-y9a)YRBVKE8eTF0{nSdyDbVKUk7A|I&O~($F;~*leId3T6M^)uy)I`l{Zj@W{K^z&C^PY9pe8?p;mdlk6}u& zwxqb&*Dbb(TqjinQyJTEzJ@W^ic-EZ_|WvM_xm?*F4jBQV0abyiY$hpd3kv;B#b`f z?@*XB`X;zP|G1OWEXB&t{{-SP%z_-Z6krH^uU)Vo2pdAk?mc^sa&pQoeiruF5J!n( zlGAaMUf(zJDJ?B+7~FWfEp8K!UxZ!$2#iz%Wd-`2l9l7?VYnNUi-~wlp%9Qy<6M;D z<;%kuizKFQN3|$0(@MlffE@TzEqEz#^U#zqNjTHUhXPKv{kD6U??1fe1h=2F66QYK zaP$>_%h~kz38y6{Zui7H7h%FIzxBqN6N(li%Qw5JIUuO}1oXv-?KblFQn$k)*yg?E>LO1+hENo4N=lghMzUv^XMh^=b8xvwWJPpmP$R9}tF3-p3i7@urKSd=g2!Jx#>bbGmRA2Z zE;S{k0)gSf2mXS%)c5a;c@FcYb^X&0ns?>z8>L@bUtiz7YuCrBD!D0JX4vu0&!mkv zkT!j%E$mF{>7}o#Demz-metNPvIpWVnO9fv-lm3@wRCjqP%wWVv%@D^a;fvGdBFb> zkWe|-ONWP{2B&^@9_R4zkX&A!dx3^2YoyLt_T3y~mgh?njjjx@_ct=XwuebiO=;KX zMJE>(F@iUcjX$4w)!)0M;&aTJXhlgC%7)eHva*InBtm%GlH{K`JRuR1)j0{QeOVOI z@Ga&vBl9t$|FfDz6$(dKD5KlghZhk=hs1I1rdXvT1MWANZCaE-3gE!=jv| zvRYbNacg|Es6Z>>0j|PDgP*a%L;d=A_fFKUj=0-LC+>Ac0p+GXc#s$(zd`;06G2y1 zA(IXg!&o>EUKXQwx7wCQZ}~bat@qb2nXuDR!k>Y6KLI3&PicwqRV%~>W&W>I#(a-40Tc&G#JjT=-2GFIVe?1E&vfE;*O*%oU1yf#Mr=C8=}q8F&;3 z=zHCLcF70Rc*a>O>gq>bE&(U9o~t_}fbyk%7aE4u(*g7KfvtLP(!QHKtwLzwMi%#s z?RCF-^Dtf+6X`gouujNSF%xzKp#N;wq4C%SITU7?IV%T0k=3rKs;XM1dtq{Na-Bn9 zIxxP&$Wr^Rsz-19eVaz%mFAWd&84E==4MqoeObDb)I^)3;$5*9fB}#rq`I%Zbl^C~ zs;^#B4xg>|RemnvAY^LW{AYgSR#Re&>5DQu$+?Jn&dqa@B1N`u-o7a(z`y<6&&W!2 z&+40Mo!`tC@IPch=glr}vn!BY9#0t$ZKYV=_MX(w-Xl&Qsx7Dex#sC&P#PWQbT+rN zjG(Qdlt2-K3JJKR9P$ooW@rmPz?S~z(TDepu1Y?sy^@`mS3~ZLFov2MT3XaV?H~KD zb!oevVDismE@N~!xZ~cvd+5_2;1Cfd6@rnenVA9jpiGxiG2yNr=DT*oA`5;gz40O1 z!t;3-8GpMFx-QxH{){S?iL7axUpo7>#qfS{`c?n-pVM9|a`3}BkW_!-9IwV*u>32E zsEmNl6V!TM=ZljDvT;_=%B^?;7Mx2|U6|cyKVk|HQ3+%AeozoB=RwTjDia>U?vHW9 zM~@%R02>t&3P*K%>eQ)~J;QcG2Uq_N2Cu5w;ULE6=GuR~P*nmU@wy~6NFqj0{Au;q zudJ92M~VkIfM1V5?1S08A9of$q$rFnI76>K)ODK(B8VIMGXr0cR3qAc=z$NIzhYj3(Up6~G%n}w40==7ua?DDTyfR53r;9I*+ z$Mx*edySNuYKs$zdiT7!bfU8zCgg4`!+lLYE>7v!Cq=+@(RK;ONuiN1zRkQIWNLHs zY_3u=$hi*AhLGL1-0>6qtUa~ioIPsaYE+PtLY~qx9_mn&s5szveN;DX_ls)7ae?I$ zVdYPk&vaivD#!PqStXA~4E6+>is;!eW{sY0FM35+*JAB=*=66Dr2D@m6z9o#lLGw1 zkD$ny9kSuV_`iQ(;86jAFfb^n6xTGC2RJHk$93jq>mGp-<)eL>*2(7*3-z6Ru?RJCk7W-rA`6ABdX2 z8U>*9Cgw2tssm}D6F^`JiHML>RShfd)@evZFhiac64Fq5hr5faFG6}1fe}x{Zv26? zloU9?%$o#thrv*r(Z<85OVD21c>Fw+nwt6_WeGaYA(G0;(Gea1fq7X=6$rAle zOhkMbQ|tF*pZrAaM&wgE3OhTy#+H_&e$hW$Td8VP0o6T;jivku=x0moRQs3SqP{+T z#0vap_HP2-5G5sxy>4Vrep6C^AHOdMKQW)oZmWtth_;!~%_-c;J1!hsP*G&|vh;5D zyhy|i4YwJ?rk35mtcD=-Tr+MxP_k*-_ayUm^fMe3Qzm~~W{*(z>ft!Q0h@&shQJ*q zy3h6oFU%x@o4j2saE9vv{Q4l`cI+mvlz4Yt2uo*B{lUZ`g!mJ%H9CHR-;og zGn?M>7~v~yoO1!`Fc2g*rH{4^4lm!Enxp{og7$C=%`JR%JZu(Oi*SwsB{@PyU~6cX z;BekxL>ka-F#^vQ0s*a!m59RhZgYFPf4M#@OqP!&RA)Ha(n)k_(E$;m29$-K5^ovv z(yv6h(6Im>@I^luuv9QqRY52LAZ$p0Lo`(sB}pIk-ovE%8WQ%`Gj% zG&@d*TL+w>WHP9`GFaC#rRjH^Jk8JII?utplr_{!DtdZn-z3XlzFhZ^!+HwzXPB(m z!HFe3u)Ga7 zUf!l4nsRd?aBzxfJg7Mo;Y{+Ocdo-+2m{*JFkVlTQRrS1aYNBH;;dbPn6y7yniy0@ z*HKq@rdLs3-ap!^Br8i*=+U|0443gAZ*4O5F^hwa1mmgFzusFniY-NeEW_*Tcja4y zP`S8x-Fi4yWMv#F5wrf6@diWLPhz}1=+N09-E?A^$*5gn%>Z5Br6}JA<@$Z7Uhs^e z6o;7sJGg6roz|$%Z#tzHDoiiWpWE>~qXXjB<5Eu`KhdWEWoZ~p2kaB~UHllAh_+O9 z|9&8GU#~qWpVzA2EoU%j;2#)lG?V(c8l_GB6jQr|*eRh~NAfI$eMW&mnFg4_i(_^ZE@%ZWcaI&^?JpFDl~82~0h z9Y7}mY6?kS;LXgJ&dwXU!id*EQT&60<>J2sueWc1bLxk!*9I*m+sOS%Jg)QRq|mf8QGN@r4eXSh*#=cPBm51j-LE$eEW7-NJu#j zK|rz07RxXrF<7^e@Ir*Km$*J=zySd7g@w%2?XACb_0P5p&8wL1od^X zcfEv(50H4|Q(@P?e_qNyMTT!|ZQiHB0e1InUr$gulW> z46C=?NzBX)1=S|H@E9#O>;_tn6{kS5_2kLkh{_v2Qs-r5cQhJ26ndeUotqmP5iw$z zZ9g1)&(4n6LIUW60H9GBfXaZQMJ-SqLb*{~tj*UdaqX(3rd8tQ3M1@j0KE$f3@OkV zfP`oc9N1&xNv*9*1GG^oT}HOa>jz{F#JtIpXAuj;cArw)qzTH#4rqTY{>JK)y>_xtcpRDV(52uc}>;hfMxpiZ}3(4V6aXJB73F# zY_w3(@v~Q1_$!zNpq_)C8R@0k_aVVq%(}jS^%a1(;+aau2j7l8yM*!q09qKQVO0=w z80`UYvf%~`t?7ExL*pBXC*1s-la*^K?;`dQvzEPqncZhttL^(-DLBTE|5d%{ow7v)|!!WiYE!>dA9uPR*VT2H-hC7t%!y_ikq3Vpon;a>9gQuWzWHfeIG@fp7*-4?6r$F{X`lNpcSwZZ3|}Rx zt{r#{s6OB&1~87f(ajx6)h37f@9W>T($b^^2--CH&DJaSN+OI|P(uy-^y&Aqd1A@X zbM(-AuIq4#h`hkD-GF6AO{ey9Z2j|-4{()xoF{mf^MUwsC_euPR&?ktS`$>nfAD!p zC3MdLxB*5DmY(4Gpa7EQxXGeG)TK^zm^!_ls^R!?ZRg`JpMU`IwO8opw*;XDOSE46 zEgU8o{=ZrPEgj?ln3%1!bg4V&mZ5}`bUoiuzw;E;E$*wWEg3bpGZg}SVoV7|MyB!nm+ZDC`(*iYN&q% zEm8t-nCn`KHE1rpj18qliDIIBky>Z!8T^gO|7rM$senC4cK+ks4Cd>p0jrEoO@&v4 zExHv3lNM3(+tw={OuP2=FMsR6!z#bPWZZA1wh4><7jWna#lihPXF11zedg&$@#E15 z9=Q0R@`6l_o*kXp6?QwLYJsUe2Z0cQ`F!7xwAuQep5$mq}WlcWL)D%$z^YkmQL=?@c+Gq zHks}swYLv8a`*WDUo9Qa^j<7GJAdPsCdkaFd{y6Tq3p?57|~C++_@)0KWQ?l>F~by zyq&fn2qe;Pw7(ASXV`biQ7ylD@qd8PLAjtXym8f|$>94l-S#K-6Ax@2jED8X(s4zG?lJ$ zmsu6sjWEa!Z1`{cgj}6HKxfG$Tp9VQGAgAzol^6lcGNT}Zm)`uGArHSe5^8+p(lOH z`itY4|8o>auGJpQ^~jFVIW&Dl@CZ#wMC{7AGs6TUWGTpV2th~v6o`y(?#e??e(K_- z%Qj8a0w;Z+`=8_~y_XTqS!t1FAjkl~37Bv8_0$^=68@dml6^bupsEYsm({n)j|j7Y zrB=;9etcF{mXI+r8df*0iYQw%vM60P26OxO*O@XW^$r};H08p}-D*$Ozs8~TM3IY{ zL!>>e&Umovg>AH$ZBWb&`_K&52LapZm7Kk#yskM-Upm;G`LL_IV8}gILGFg%d+AgS zaOU2J2~qFLc}IJypl%CVS#bUQ#{05*brA@O#c(2bo5$?Lmxsc@Kw&ERBl(Hqb6Q&M z9~xi^Rp+s}$Y;hLLPetZNo)qv?pRhc!d=3AVX;F7%;wKO8r>)8KVeWbj?DZP@!|tc4IQ=K# zxKGQS1LVwjcjJ32eacbpDjmL#^Tr>(cgOR?`KX!+2PvX#By`*mH2*?mW?oF_1~85E zIs@6)LC_bvj{Vyap8@Q)8d((J3(%Hi@}-lzr2|q4%^d*v`XD6)s4TMyK7_j`rK~Z1 zPxO-qRRvV#>l72gNc$}^zvj=|`;TufywfkA#*ssV4|&}G%dLWr%XBTm;sS)so#zMz zzcjzYlr}-Eh>D4|V~tU;`0OsYN5cMxN}(4Pir~PwNPztTf(Ny7f{=OX*S@^M1yKSR zS+Fs9Vral{v{uh{Hf%I3hDC=fR(es~;;0m67PFqcz@ZfTHB-IjYiC5&D>pw#0iRZc zL11GZKyNzuu&8B@2!)rdPK$5FJ341&v{zznFZ@`r1h4|@40lmbB%o9QkyMj(7S$e# z8f~Hfxx#9CvryiFHN&xLH@W&$^K+d0I%kjL@}5Vtk5-t(_)M5;Ec7as-B+on9REP$k^3uW2Cc>I_c75j*lh6Jk4d`HX)IB^?9?w!?)r$ z{JVQpzjfg41DY2X{J(g6O^Qz6_hnL&FYFe-efx%P1pu0gj*gqWDD+Cp{Zt-b8{8KK zz!CAODiG(xuCa4(e9N6-@spGgs=7H5xAN1T-L)^y_>E;Hi7}^tH+gQ`%=D{E(C^(W zHyI_(mFG7e7IgAxD%%XbvR*@a`7hbUGvD;2_kz^l76c1H^MG4|Rx|1KYpI^I?rV-e z-)mI>Ayqao7<{q73aX8eihWsInfL^(MuR&htF$tAR zWBymyNY`FGJNfvs?pCP)cXkV+X9tguw--M0#W6}Mj|Chew z_ucc@P1$|fc{He)t$JYi2d{k7!;&pJSXziKcWo|ilc30my>)N5-P6}+&FiuuXFOwJ zC$EQk87zqSQkU&)E{MaYdKPXV z<3rQ#b3IiyRfFoUtMk$zo&tX)#^S(ZplbRfv-#_rqrlbmRg)%Osio~+8G#0pyz=`m zCE9%a|8R&-Dd0yx880~egCc}}{0|fnVQ>W7kU?w}1DhkZ6ea`c@r3w-SjtG@s0~yU z>Sn_DFLBPiJ<|tbaEg2nK(!Fptc6xYqjneui2f3DPiJ9opwqWx%(I9=@rrIUH7*)_ zN9ICN(Z^*&*_95)4H?eJ=l-?43HsjHsP+ig=l0{3Rjq!tJ}(UUY7=taJ{zd`LNh|E zs-wa?GG*f}Awq$xAgf#J`TQet?f1tOPkw(q`IF*wPk>>Z#MQ!X<_Kt;E>`mG4X}1@ zNZxtsV?fJB?Ex*=%0-7Q++siRvS@X)y=d<5n{gM9wRBr!ju+J|TfIqk?`7Q|?&+y= zMd&ckkt281v-z}t95j8KTjn?EmYvsYc4PYPWX_`{U9-3OY`V19&(YLy?AKENxNFOP zsjXYKwhM$AhG(s9Tx_uBs2NfWl{XG;otydkz)CW1xppK>+2&XD(lQU9+nf9ln=OM| zu*MdBr{NnG61W4J3a6h{mRO*H5+eZg%6o-xY_F%NM@8aGOM5s;2xBgB66*JJcU~@x zDl+D<7B0Om={Z$ttlzW{#((qMwz7EU8ou!UT7Lmyw*kTWSkaV2tt%IAoRMAqcnCWS z`&ahwyB7f!#-}m6ttN#k5HXB~kSNYRF{C(jn(2Wrg%=hh+su&F$4WjPe>BdQx^wR} z5)K#u!}D_THplBHs@JaVN@@8emoGO*GHBo9>6X(=}?Qd_N zBOzH`^4OZ3_3Dcmy=VUs*ksa3MV{!GurKPj6J0pHFX)g+5Gu-wJ6X3r4efr;e{UHvnZVv9v*$3V<{tPrd-o2WCu+5_Gw@=oMJ*6abA1t~H?dKqw+kd9Vk*&vd?y|H|FQ7g67E++9`!ic}Vy9aAR5mOXzh(w7i`mcH zsY~f%n{bj+%%d%&JI<-l{LczZE*_o>00gkX_K}dD3q*{B&EMIT@4;|9pC5ep4ySbB zlMgv&Np>Dy;+_yTF$r6JOzwhkmNDXlUS+A zCPWqd$QbhztyHL*L0Vu#WYsHazkCtJC&aP6aJb6lxEXxOAH8n)R8lX?8RTlcO|Def zE8kmK@%gDOtpQ~_;sxaLR@ja7zn!B{q<&j?`|x7z0x(T@OakidpK-LB8IWNTcibDnr!(7G30VQGMh9YxlxF-AW!V45!sk z^ERoepVp@0)zjn+h~*b4=lnZR$7CQ|xfyXkon`r*LQl$R*fm)3S7U?+ux4AfDK#I| zHQA!~e1O<3*d6%v343lo;4l$;EP>_2y^vVTi^^aI3i&>q56SzvSdMuM925@JHj=o$ zfgonF`35l+8p359LXMkIhF}x7Le#zIl5V09k54Z-+yRRN1&NG>1s{GNyr56&e`s!l$=5@B$E2m7~B0+5=6`4zt$@K^@ z4wfyi&>YnYSJ71UJ7Mp3AOCL2`VtV*8u0n_U|RX8b^J+Ir*kPr*Y9eSO~07Q%C+3s z&v8`$GaH-L)B%IX=?=+oimtTk0r9wg%te?`YP@^*uA`3jVv(cjcLCruWH77FD_h@# ztNSoGxQe)jkgO1VcAWdlTb6TCaJd8wMXWX+PjB7Ii39JfznuiiLw?gHcBqebL40{v z=}fS{e>v2c#PU!f%e62#pSmvF5F{#Eo;Ppbo(Fpa*vkrwu5V#|c|H~qN8K&fcBjvB zKU>53_qBXfjBk5GedYI&pj-w|dBsZ?q&Byq3THi%IaYHk_ne@=^A*{>+jkKQSGu-P znnY#}#U$;Srj^MUHd8!u;rx#pYMFh~O}^Rf9G1q9G19TY%5;x1PSpSPu3et;f@8gp zy+&1OC)XF8b5zcjDE1c}BMar}AKi!-UcNVRzip#=HP2a_I_^O5n|>7&E(?* zgd&+R?}pZb__b9PGD!mzyL^+o6wj6 z&Nt7a>}Q311i&pJ9(Df>ebI;OsSg7K?>dthE-~L9wiCUiftmEUc#zDavRmzYLD zki0&$U=I;9_&PeALE{v+sMy#bv~$FQ=s(MfV9kgJgwRa}&7lL0qLfr~j=F(?gn6zB zJ3EDEvldly)_LWuPP6>}^Ne)x?0o&O9<&iKWG8G5eu~B_Y5@Ixsqa(GTw+f$h8y#te$s2&?w_ef)^SB%W|0AW{GcRE=98 zUf2o-l*m&wGUuWFl3e>ET{iq{XowZIf2ieG-Xvh#^K1A?ldS35$z8ahzp=JVC+RAT zzm8uG85aE?npXw3BjarPvcW8Y5Oc9|aO|M;BLzZS0Z(6MtD<5{?zI+GnlD1DX(zhW z>~es3ns*l-KxW#}NOO@;^FhlGb=KD8=C{4V`Pyk3me)x}i(*Z?EY8^2+QRKR@ce@v zIrN^@*k}v}ig1gDU3F%QI4FxMz`z7fI#I<$xid|>U~5E8%hZt%iwt72y+Va`^C}9m zH>Vqxwwm%bpQ<#{Z)`mOP&q)(RZ9Hzt=D@^1Luo$%#`V(Me}d;DyyrX`*W6oOQ?CX zfRSY2)Zp308$E{`=mPuN>`^KY1@b4 z6XIqOuEgnO8=@qAxt$i$7>p!5Vb1U6x9kz`a-FMl#9m@z{qY(`(JHaE_==8BAim*S z*i}HJb!;j2c!|wTy_*|Lovsoj#65)zJ~8-4YQE)IaT#UcAS8E{{?wf4 z`5)kxmK$gF&7SRlxkDR&z{x!kp3@^dA8spiIqR9^sd(uQ zS*U7gCr_tP+fU=`tWJ@77aNeNh%`v7B*!Bq_G_Tcq|$X;PzS-F4;yJ>*9IQIybMRq z_6LCL+h27r5*sY?dfgczg@odikZ=-K{8)<=4;6@&XpC<%YakvL#!L75#r)zN5ZrJ&dg%#435X>_fzAjoCH_$Btmc)zG5~e~5&PfQF42#6Vj!)}ODn zH0$*qd(<>x$z9k1GxC!-7xUA-htM%XgD)*3L9FpK|srS(O{8hfT)(g z@biW>ER_$kX`vS8#}|Y#+f9>&1)PY*8&vY4FS)sI?WoFr!D(zop{BmaapvM|gUaZ+ zfqVXwzf2WCd4a;uFm2{Q#DlN#07#POP?KVFU_Kr32_bpIwm=Z%gw=Xm+fUN7pj~{s zE&OFlMB=)HiW-=$4&Ut<9_!ycx+^CupoCI1E%o+G>OE+ z6*z@YkpGT&`gD|Pm-7Q0viEvrEFgWVKy?uJ34Uu}sRtgPC^d0dKVpdk{QOM1>G>Py z_X2f-()Gjb29~n)Fe7?G!uo(p@*%FuNgV@4$1W@3JHU5>Dl47yyZIynQ$qu!nSQsZC$|@f!DZ0ax z<%x>=fq1#R4ZDum-i@t+Im?rJ?}f^q#KNv05fXaHB<2^TYqJVay%U)dTqptv=2-|2 zYG^sV377e!M`gx%?|!i(bj%n){F5H!2b|E8<=n_+k&S0DMv#LNJ4Z5Q12sd z^}4Q|nQe`LfB=4gSS4Y9r)1}(lpSs$ZZnG3PaQdCVkN%bWzH)TVs}$RdR$e%w-A{f z1|zWfBgONAr1^8ALd27(sK*eS((!TP%TpGg@!s$Nzy>)a;ETlWZa!SD2N+X72=LW3 zL;sx+?^l-}bOUIWE!--cEC&3I+q2c1cBaHPqf*dBy#X<;l+tb@lYYM`SYU^9CAG2Qp?RgO6My6j7+5 z8>yJliTzdX4>6Vj6vb9W-CQS5Sl+ARyo}RNxbF~~gs@CrDY2%4vrO~kWlvJwckim z5Z(jdP2ZGo3a0pBpE=2k1zDYwmHicdgq%S_I4&&g0qR)u&fGdHEj`zn?KqiOEp?yR zkARmU{zN-%(P8#oT3RJ6q)vKlxT4WmNoZ+p&3nF*kNdj5}n-)Hp_OI5^mAN7I@m7Xl_pWtYy8xb=m5AI0Q!_Q0FNv2U z`2Pmw`nBq{_bhf$F-()2s?gxNtEdhZ=^Nd>%S*J^Sm24R07T9~2$VyiWvC^KnHl^y ziUB|Sqkl?;TXik%?tlFisl4TT?B`sE?{3f(VX-t3Z;7QyD2<5XtW3FeZN^c&4X`)@ zvaeB1csVwtU~U6N%S^${F0~sAJjagBbUH--JCvx(vC--M&I6eAMXmCuWZI1iO`2>` zIW=M6QYuu7l9Lc}AlSTm`SN4qgu`?Xye}L{Aab13I{OxzL(ZwP%93**JaB+Wfh3KB z_jpg|Oh&nqJPZ!1D%G2+_&}PvQ-ASn$)VlWyHk^xCG2Pd<4%uHBmsi&i(48>-F`J& z--lg(%cSIw>pdIQ>od(Bo2Es>!oMlsyI3$YFkV;6n#-%WYUZ?MaO9|r3J@x9fD9VV z#}_sF2K;DG4%Po`%{=Bk zLJVf$RO~@2_QG06gbRpV+kUM&EG}$xY$rhxQ7E~tx_2AY)!S*F&~Dp848b6=X4sA> z0m{*b@`G6CfZk4DC~D#DE0ouTb;fhcuA_B?*%S`Zc)S|Y(r`_LHFmnV(L7VZ1pmrK zLgO&#(!0tsRk~_HV3@wLO++b({-y#+%Tb2OL#|2ZisFG)ov5>V~d3*+h} zjmd}iAXQ-G*$>qW9t}x0omAI>t;{Ez*8H{5%Anf98iq00=2S+n~Q0 zSnRZ{B4VH51ra1?P>_1mhw%&%y~>BG!?1U$oHE#ZMzdjYB`82aS(#XW^QTGS#Mqe+ zO3Bnjd4<0P7ld2FBy2UA?hmf&=8af!)nznZ`Exw+#&B{`>1)2Zbz7%$Gt_C zf;L?i%XjZ`8Q+Vn`!&Bg@vf@T#qS9BX|i|kUr$|Nt`~Pm>fRTG=|y5y6GRn+GN;Y_ z1D~kz|7rn*2$;heN994yuowQ}dPHnu!2O@M=X&(|ME;$OYplDrf|tT_KQslfDHg3L zPeRgBD(Q*BSB07uSj%Imaw>*x`Y{o6K||x<|0C=@z+FG2wFsydk|d;C#Ox5ni(mRj`=k;QeTji?kds!s7RX_4(oVwf0O>+hAfFhT;>Rm`zUr z?QM3~<0`yr&uO1)G9CMw^jTeuX7=N+*nx2UQ^E-G{axa5a0>L;MEij3N&g#NYe?_m5lVaw^zR=MpixF z;kXtbBSfn3he-(h`Uw&lF;*H@=V_JYnKaijV4t_aoMAYLkg#wU@wxyb(Cyq=H|nop zXc*VgNI4iAC{Y6RXdJmW14DRZ3x9X z$leXe(J_%N4-d<^S7!tv0~iL{YNc&#gc0$OOhcyYMU3!C9EK3oiFmN+8^Af|hr7sF z+LP7dkEE?@b!lwwQ~_QokYNTWf3iD0nWr7l(!hZ1+rsv9?dnS8@<*pb!?Sy|vXv8* zq%r+3HB-_xKP|q6s%U!JT3=v_3K}5^SGr;|H*9D2%_9=__1`J{DD~2>-;>+zoO4vl6a?`&bD;c=*dnap~4t0CV{9K-o)Gz)SpMqn}vvjO7fsDhedYh zrVGym$S|H08T;>C+cXJDOrI{ z$udk)B;jR<+6<3tD!Do{V!##g5((5m;)g5h3&K>ka$L0C4W-YUT z>yH6myUWtiTvs*-w5bSh6o}@>K}lE1A)`hf%|fG@9J{q4V>y z3FF`xz}g=+Hy7nPKVhPOu^pP!6h%L5ZBi zsfFBrN;d$4oxm;zZ!fGi$C+1XsH&E|pyC*;LnGlI5=VilvPw}^jZ9r z`Le`|3;M_2+7QznGY*V9|M)k;(%YMheQVMBfL8nk#qN#kqiFC#WTd~4wh}*#Un-BE zA2?@n=Us-uD)|##)dsgo=5PO|mvsvIcyEYH#Pp$GYy7@|G_h$sb=dypECU}@RktOG zam0+qa8cd3hC*!vY31XWuYDIS#f=;<(;tZX;KP+}+*p^Gcp9))m3j2tp96z=d&$6| ztpB3Far0x7?IDwMPpX%nN#6e(X1Lp(o#}g;Y@pxYp5O}{RKn7kF3F&+ zS^sn72uDWkP)XP!tHQRjL251e*4WgW_^Kq9N@}Jxtw}pET3HFngH%TCjdkY!Zd)3s zo(JWLJ@|LGcnr@cl!@DBGho&~V|J4#`S8`>QzHqhA9CW8)-UY3@A}id`noOBQ$=!j zkJS&C?*Z4M-8Co!OAEaSTelbjN?^tmtU!6~}Y#7M&BB+wY_A znbwvj1j;w9E`z1o#U$yH7oArT#$S#MeOpgPlbPM0`;_A!BUiR&wL6#=%?v8y6z2jG z@0hcPxCn7~PCak$geoKizA-rY7b{OJ`qY@ek)3{2G%oKMJHAkoni}yF6xGicFrp$R zABL#uNMj;v^CPnBm}w`t_HQS}+k<5Nyy>L7c;gU9i)bfYewIj+^+CQg8vcA;Bhi9|RvF z7$egsSD{zY(C|gZgRXZXkwMD4KKTrpv;mGG&@7*UNf7nZ+EU@#85{vH1bl=z2Z#dE z{yN&s|7Ad!EsO>M#2>d9E&{hEehiH{q>J~1OG@6jT}Hk|h{3k9iZStpQFk~^Z9{L^ z4P*HdfUF!Cn}su%%LSgK1+GK>$8tdM&2>VZ=t^6=H!tU{u-sdTh07l*Pp zE|cKuK&KG1C_$CoY1Fp8j!;TON!F+Hkc%XTNn*Gh;dTY!f}rv~eEj(SPPZJe*Xw_Z z?q>tKR0d80!hj?N+7#dEHaU40*diMOG^4P2^TR;NRVL`UOCT}EcWy>AHIc0&TPf~X zTeXFJmUz855&-+%n(KRmW+(LzH?~O3|Jg`DDiGRd_eD4Y`Xga1D^7o+P z7SRWW5@jO^Snbx_wp2i+q>F|k=!%472gU7%#Erxjwe8-F zfIg^tMb!hTN!>twd>Jt_j?l^hpWb>cv_+e{r!~hag|CE~l=!-<#FN@Zmu=_HSW2OE zk%nKt2G_DQQizd`uvS!t;}y4BDv2cXzQ>9V1SL!+TCuw^qt$`EtmkgV!m3SfTi+UF z=;cU#J8g1R(5HHgh03ie{A6O{qTl`+7f*L~^gghHo00_7K64LH;pPnhY+|@vT>16{ zmOt=kKB3>7ev3fD@!;`#-UCDg(X_OjOo9Sz6VymolQLwT4L==L|J7WDM8%uy>9hYh zXPCFQhZrU$Qaviu&%VGBBXx`Oh)@g{4(JshC&!YJygkEt#au0puNZk~HzEtZJkek%XWtU3wXI!DYjY15L5KaO1fz?DsfeFm+7hecVhZ-XB zSsLE{cf~OzC@5NKU#+_clvWCl*w1VJ2joB_w(^HkQee8d7YxbZ;2^{bA}i`>+lI)f z^UtF>(|`2DW5ilm>gl2TB>@bVoSdi9D#BO3rH_NCtO|R@ht(6Q&cB!z^0vfV*~m{( z-c2P7|EVcMFLpmbsv$KVObC~+c|^5=JVO=bAp*KTfJsYF@9(>K=?pdOSShn%&#eLyS&63Fifr14q&N5_wz? z6&(~9>=lC84FrBf>hSNvnnu$(-kV#4i3bp}i=V-#KMo4I4?Z+QlV&6zCkcMbsC-6S zB^@K9(Mh-Nl!S!MMBa}cbOO|K=4F&s83*~Yhp!wp11e;~APG|`cB89XT7@3P1~Jzc znoAiR1;kiHA_O61&I6j*STMmsB@cpp+1VuW_=t1+!@5%~qWpTxR^PfOZl^P=Jew+r zu;3=`Ozk_yX@80Wms%3OK1Q-SzLJ=0UbxgYCIBFf!5%qTVBvBPKNlBQQGboO=w7ANibriis7DA;4$vrs6L$t`4~Ro7J3?$HqEJTMMtcTW+!$nhz)9snfLi1X z93-%%st9p-*_0A>4mJgRqli9wPWb?#D`60r5cD}jQ=Sz)r(wB+&xWpm{&p_j8ccM= z(bC2&x!g%ZMuOLIDIm>_N6I^I>!GJV8=WM?WKo=ou#@?NdhC8;q8+?;;2ye{7@dn4 zgxNHoQMPSJB~ninE;@|DboLA+Kj!}T?kDV3#M!MO)J$w-oSRQeF$Mz-_ng|HGDiPT z5oSd0SEfHOK_^fwlD0`BFv4LGOaP9K^0EeK}H>=bVfVZhIbtwa>5l7-|LUSvcWj~{LT03TPczghCqM=6o$Yh8r=)= zNoQp0QFT^0y$hYb; zGM$RF>l27^_@D9IicYaRfenUuQ$)uX*rIh90g95nWHR*n|H$ml{NH@l>G=>f75YIw zwD|WLe8`B`PP)igjxm}YCC}VJOU=tGsonQZXo1tinNUMqxxxH+r}!SX8k>!I_Xdb} zf-%8gNn2ICI|aL-9b*Wm)Fn_$r|BAbiQ+Jv_3+Fg;Vh1jXyZcnaxo)n3txch-MAbA z+QJd-m?MId5UCu9eR$Xm4h+(&9Lv8+ej!Rz#rDP=CC6ZH_K0DX39FMml2XFuDN>9; zIuccrZsRyZ4I1D8em;sBjCR4wtS0b~Ey&IYvI|n@!1^9AxEo18x3T0?KgrU&J5;jB zMj?lek(#cLai|xZpM-`!V{-w)OA)CEtSK;09H%vt6Y;qpG*U3m`wQx`KQ_5IKtotr zC_cioA#c2dn&5#S!vq{n-Kv$e zrND2cN__66QpDPF)!Jv`@sciTX3D{`APh-6RZe=k5Ds%MR)@_}b;r^FyAdsq?FQDD zRChrD0enmvFg{@tX<)rCCiF-1MUSjs0Sh~SEZ_fY{YeY$9%Kz3-U;H({nQYERS3Gh zdBii~$XPOzw`p%v zqx_opwF#!A2)*LY_~Yv6F!{1g+t90)&jz)15jgH~I9ZYzYdoGqymbF|gQ|Z|bkb&b zk_tWOlRzvb0&i;5p^TX|c4huQYb&CjqV?N<&e$b6|HRR7-KFcy-_lgujhnD1!8M{h z&5Jr1!`E~BB)cyMz!#j{_)RZ+)X9aaams{!rhia4F_9{(B_+`57VrFIZpX@YS0EJl zY5byPVKL9+V`k zP9?OpZ9wlJauVc#Kp$dShNS9QM>Lvm2tuszuQtoSNwuR|Xu}t99|sS$ICUIHkaQX_O z$jm}vVj^#Vbr@!wf0SWM6lG3bz12Jw8L4sOD@`%~D-Z2SPDl=KiOx6+WM;yu` z$j3f|8-|i7F}@HU+4CcouGCRe#f+eWoQtTlQ0SfkUxg!DUTX*4jDEh!WbT~T(@f28 z@R&dkBtmgCe{+v`dfjFe@_jTymQxOMGU6L5)BJe^KWx^>&J0@l{XvU;xtXcI>P*Y1 zx~i&kCF2-rE5G*xdFle=;>T(__7p(!YU*rJZnCZP%ag(xOmWSF(~eZ`xKje4LUJ_A zO*g|7U$+I5=%%ir_|I2LqbeftJ`j+q^M@jc^NMOi)-3f6ikaS|8e2mhk~DXVal6!% zqZlgyXyb|Rx6L`1-Wz_Bn$I{|o#)Oz&y$%%p~vL3MFN`*UlMi8Hn!{$KTd{r&xla}R_yE>V}@`R&6Pb>SB&mwR^5QIw3>z{-Jvpfr!k)61^xEvsVTh-r^) zq|kE8WP6heTQnRNR!b(QQhh&^t*lHV*_0 z!I_Li)b!nflBw|_AU6=ZV4?GXeKV9;gSEV8GhAlu#2}9Y|0s zSyz7*q^pE!RlFOz#>0RDlwDk$1%(5f>+(^ANKw^Zz}K)12tWx!z_cEvo&8trk&_dO zp2z#n{JHzdi6LfAZA~xT-#bSqEx%-1C;Nx!c#Jb!f0;G=!kIYY`g7SgdpLM~uM&A? z_>nC)%Z!(_ah`9q@{hu8g2j0F0>Kr1K#Q-}kpC7zCo~L1*VD;VMD=se4wO{n+IIGiJUI>@Or5sKp zNjl~<6PY1SQDULMLNL20RC64q+2Gt37L*(T1WJt)apZ$T1SD)|*#zG|dulXowb+=M z&N^R**^SIeGCh4vRn`2?^|lD9Ny_lXrH+V1`KX2b_?t|J@h_>#luPfe7McQir%cu| zZAPO~`||r!p(=scp?{~|LPMI12juWuFNcl~XTI`ufE;dZ8>o93Ebh+>r0u#>alr zd^pv`%w@E*PkH>n{{3)s+yfOG*KxiQ0fJrq&=+nXBfA6&C}HyEu=|L}DFnI0pSA0L_m+ca$wURpUU*{eR;?>tx& z=rYZTt_>|EQP^?8nINSjL7gYmt(nnSJ8w#uCP#=Zhb7si-s0=&XiN8n+&xDO=R917 zsb@A{ZE9-@OcDQM%<6Pq(nY@ILM&%`R5(Z~w6URs2(%EwR890`&WplDFUOVy%R9Mk z5J^i6@ns&Q|9PtTtEmO+dz#+RclUq19ieV%_cUcD*20F)M!8voiaa7_>|KHY4d4SZ zNy6W3ZGvqrIv!rI$4!6rmriG}1m-N+zRox`6Y~+ z32aP|nlz=`$GNcal`HdEardS#QvZ2%2(g0vv@Ygbvs~(JR;zzqumi&2T4?oxoezrPgTzOC<%rWS& zp5#~CTb_CaPc#CpkQgYOFXNxSbq+D#%j6smoag1;#V9;;(tm&(jZ&!C=++nMTF}tF zI>_diNvG1-O}`(>p-5OooaL#NrH(aLfJ?vXR>!?0_29G!;W%-6Of3<`u=nX*X?K0R zxe|bh$Fqu0SD%@0pDT!u2j)rRI$z3061phf75bcjaO*YKVMFQI5r@|haBbW35EZ(H z(q(#C-8l>bxig4@2~W!8-wj}eVk6ZlN%|w&i;wh4uAKsP8>b|0V$OV;NWWs*-5-tP zp()#qIow12vUowf8A?dJH5xZf#hr92bA;X!fr*H?!2O1sGpIqbu<-F8JxT}Fk_@Ch zNXuYQ;scR!%;j7f|2@a4h*k`U39e_gfX{Ft8YD<)IDHI04~Q3fyPcLN$_Z`I34ia? zUXMdVf0-`@fBUdC>Q=%j5B^z$u_BjYmeZfu03Q&0b?43ppr@92@*Lq1_6N})d)3>= zXP{Wa(^Gj=UNB(gx9B^zGhvB|s1KnNO73g~HoLL}rm7p5B*A+VED->!yw$}amQ+mK zgg4IyP$zV|cl&5se4>D0_6!ULyeftp(;{`o2;7^HF%U9SP0dHp3SEbwn-Ca0h71%- zm(Xn}t2S8fQ4yfH%c8apdV-P!QoYYtKa!aY<~h!k#VE9U%a^z8|8EH9+>>-Fo8Fhc zxBgoTVE@1G+y<9>xos%OW4O8?v`^vS5Cm;!5~{+=$Pj>Rl2=bVcH88l0{q>% zNQSG18KW(a3v{)bRj#U3S-M3 z(GWt43e5cW^QRm1Yy>|ShG#;IV@ck_Z*Ai;*gNgVY}1KkG(}nP;>PMK+Q;mt)k5!PO14= zmDt9pftc!>AFbCPS!&^`10fv-=7enpH22jW|L4dKQS9Tf>f_}-gYPy@O%c^{tbFjs z#2-W62PJy8&P_lt(2POe-~)MQ2{JqUTbmFE70WsrFH-3^U4bEC_t#TtHkbK*2$-9q zZdE8MiX-+!2*8tu=p%rQ^Wu9nF{E7PlqKL(RH zb)k=N;~@P33L;bJvNDd18Izj2J<@5?r=T*ukofxb@E3oJddxSb|Jb6e3cd3*FyT&j zH#`pmXha(0dJx8isO3Zqr6o{W3 z%zX&3!Q#bUt_nd?(G5ZCM$JpK@7NqE5$&q$R{Cvnq5IuTvO@^IUBR2xe~ZvhORP*^ zMuGtnCv~MuUTKcgdfR$%+^P-FU=fi$K*T(CyKkR#SLfvL_3=6SG7F0ks|m0fKyUgo z30vo{bi@kSN36F%6wO^bo$R3~pFk7;1`^s6BA0F-ATH13XRFiMYzXkS?WFlXX13LFO1?bo zf85PhVpY=%m`^JZFTeh>(m;6?l%YnE&I}~R_VxRjTqmL_WS;CtD+{Rzh7TU=2OvNY zh!k-4BI^}bl_hRH=5Z-OTJP@7ADMJyw^2Pm72MgSUu58R()Qi)tXYEq*PE z5F7j}EegzQp=2bsH^T9>t@j*TQ-3698|d<)_hWugO!b!8GZ*B=JnkI+6iG{YW( zn9pL>a*McZ4#{;y(B_jCAD8cjBHL*NWNNF^@sec5dsg%XpF6yE`S(dbdCpyW^dN<0 z>d@om#KcWcCFv(UO`C?x+f{^@-rGK9`MHvicmz0oRN@ij*#5vk2M2(5?FC%{#P`Qd zEA`do({ZfJj>82XmQG8ed{urcPgJd*7ER5iBn~R2=6g0MhkZdq86Ve00-qy-wtwL) zJC!Mek$j(;){uP$cK88;US+sI1_3kgZl zk`r`~pUYuPm|0sLTRTlJ3x*7L!gQoDcR2MY^AD^hwvD`^SDKlS?}xaMmy9_v95KH^ z6w&uHYq}?-=uf#ta=nBh?SGtAyZyYqoAjLP54y7fmj zvd(BXzvj&oz44VcvWB0ab_tG^1c=joJKOroiaEF*T9P1JXc^g5oj#sw`&d@fuJL~s zLJ--%A4vaGfwT$Tq*N>OfZ-&g-Izzh{7sjD(?lCRCM;b?vTe&S)m?ezyOMICq8Bpxc795G@{?RNFj3~ z%-shJKbu4R1f2&rvEt75i7y%s)W$tKZWxUV$UzsUW#U zt_&MVlxMsO1eb`{A6UP>cDb~kXI$@X*AVShVqXBX!{y5LcUvQhw)|K#1SKxfy^E-b zz`fvbCJd?}rgCV8e{vv9F@ZCFY-%;x9XcF<=C$uU?saKeYx5-+}^J0Z5 z$B^51hjNn)y+%5vGXX%#Zg#IWDNsJuch6eKYAXKOll>IaH;z4CUrl5GzpKem(&Ta= zSR{<^h-QNphKfi_ykpQV?n`JX8%|X(BP1nE8$=m;o&Ud9KMrE7-W-(UJ3WpCe|znk zvFkq+A3;^k{KU8rP*>CGNcvd;gSxY)?*Zeg^NG^O+n(jt!PzHY~ zl90J*<)Og!m&{VieG5m3q6+p??=hy^hcKYQ+? zXd$R9m>Dci5EKs1#0}L#i*YHkwd+5b;7lyNnd><7Oba2a+XP0zp&4Ravj2Y5YQz#x zps91`M`P*u?v+WPlb!i;HZIo%KtU zZtf35TOR>!El$8QofynXDte11H~i8*3-;@B?oj28Ysl`dgp@EMQ0Ym|Zf6-NN8c4E zx+h>eSVT1Bfw>YN`K4(|G|mEghQJ{=ub^IJReW|kBHVo}E68ZUz(Inst?*0dZSwbW zGW6)`IBAK*1?w9?HTY*PUt02g-Wk;5fVzjRAlnd>h=w2{NaTHebjGX7hefaae;$KM zMJG(}x9;7ca(jzA>Hk=5Urf)-$Xp-68!AOVPRC6L)GZ{m7~pq5;}<-u=+mmX=Hn7{ z*82j>>*`cDZz1xo1R6UOSSy=!NqWd4?fRp=vS)EfdGJW=Wv5cw8Xx3Dg_S>Jd#I=|? z1QX%Irz_JUy19;#*emrFuTI`68NWS(SOKX7WuDMM%y6|wKSbF6vu5Bj}tu3%ei1H$Xuc1_&qWkk;*`4e@EmMAvXb5uuh2c z$`wpEu={%ks-~`>V-QqyJJslF2>(cZuA~?ByHvq4O z1QkUO$|s0fB6%(STl?Q8n#_9&ROiVJ(f)8C2PB-OQtGmGa>T6iO9&o zu_Y$novx7Ff|{i*b6?i%bcm?g!xR5iB`?p!CME(xfp!O4SbiOs1w-)>=w*neU2HHI zYMxsL_h6gV@LZ#-<6mX{JFrtaci&Zd3S@1{+Gy``_a7KT>x-6ik66~vkM=1n78Lpgfj}TR#RUUcPFs3 zgprpU-?5cO4`*%=fM|*)>Kad|O~v+gK^`HRtEYyWtYystM8yU_o*i{)25jq%R{)L< zu|Fb_0}C?VSm{?rnRxz2!R9)fB0IN3k6&c3WAjLE-hH2CCBxf@{E#2N=lEJd+WHn? zy!%OOQMLk6db%6^v%lh*A=J2gl3;L-k1>mkEcKExaYkAkH!aGrSDtjPQS`jA|+ zP1+hnhh{<;mL=Zz!QgL3)5N3^;-#-2ZQqF?UC({IqxaX>i+b!z{TnMy)3+BVBV8L! zB`ze_%%o&}8^mz=N-P@UAOS`Cs}4g%siOu4wjr&sehE1myR_$4*%b@t4cE*xUaMT% zf2M~^nf=J7NTE&77^SMe3x}T|@N9p%#hU%k^ca57s&4w=j!Z5lMybDx^`;Lxcs4D1 zZqIqDEw{*PgzRrEm9eaP|TOFEfKV>y~>coK~M-DbTl+Dmn zO_43Ual|cYj3*%N_UP9zkL29RfI=6wzubDvyXdEVS!r@9+kH=n#7*YE1yz1>|KM)_?xsaKj_3gQ}X-f$5Ul4hlhJEot%9X zZ`6}d*|-5Nt;;JbmiLaQ9^PIRUQ{H7G9EI^6FKL1J#orq(tY^keUc52`jHti&du)Z zTH+yV!SC4VOWbAs_)qM!8UCC2NnN#ZgTYmqz3u$gL%(`F7Eu8jlJd)7vHswFarFHt;S?vTLeXD@ZaNs0#Pert7Y#^uCx8 zWKdNcR;w#jQSosw)xwJmSi(_7Loi?OL!UHvu3S=SQU8@==~>?zkbN|+Ez-9=&`^cu zQRQUS)eDSFr}Xz%z7Xnb3X3qDHz@TPrL7zfD$SUbXj>W|4z8-rRMkw}q!!n)apiZ8 zb5ihjekJ~c`4T?TwlpOz6)y@K*D4j#3S~?j5;d)D!(=6S^($t1FDz6&70g$(|2tk& zYUiN!iSm(bM)tIsYJK4Y-vmun)vTXyz0G;}XSfvFY6C;gWKA28c`D3hYo=Vyn$6GU zwEWnlwOz13AulPX?XCQ^%o^=$33lem2`k2#;nbHDa)R@v6R!N;CA!IZqUwUZ!_~GG zN1+#$aN~rAt`xGtj1TaDBTQT|qChTIMO3Gz*)IQ{qn%y0lfUnUTXSy&rwy*vpGj-% z4(Pt&mC2%>?{b{P(qesMDRo4#M=mz#m7|TI>x9!yr<1YjENiT5mYdp7JvNe)Jk#rO zLE`1~zK*Kph*g?d+k6gp&18)%U)7i64B6tic78VJX*y+rnsdX9(%CNQmUR&+qSRsFcU2~ z7AV<$h4l|xk=ojdZ>c6tu+#qMl@%wfs@xpYC!g2dtX&Bm^aFb z1pQdME^){J1mdBe_j2E)w5>K`Bc<@`3>_AcyBZ22kw4h0wOl9ulF z-l;%|zUlV5z0G&MI|H}bD#%}tu=~4ZyQR3+=V0@;$RVZ^4tq%}4s!-|lNa~1UF@xo zxXiPBXJ31JyHpMD*|={g+cuYkuy11Od{f+(&2ME?W%%{M8PfdhN6X!_Uj^bPNoyp$ zn&`~O+S7F$9DC%nk_JP+a`P9IJkbq%x?ugCb71$tj|J!LHjWF&Ubk&Viz0?LRev;6 z8qFEvOELTT@|0PJ&Uk~i4pXW)MsZA!w!M&WUaT&3bwx(Y_d@%;3cZNU@L51F{dMs) zn7qcL&xB%V4>}LxQREQgRqNAq3%yzS`T0@se1TM`?ffI&r@Ttr?0vIW?tC5zjFnU0 zcJ+s*bnEKL!TQ8fHpw;O|Aq^hbUjJ^+8bo&X#de=%3Tw!`q3L+lHF)e zpL*6UmdmThJfa+=$s4FS4jrO|^RSENJo84@y;5npj(7f4ll8hBW3)`GEf0m#NXKr5 zLS%N}YlUUrk60S9@4+B`_D@Y$$6re~qubUjtoK=g^V#CBE8%iN)(Tz^>|K9watU~| zW=&TI95=1?!;)AQ8#CIlym8*5*VbvRVoqkpJEkMbW%>PZpuY7dPHu$H&8ZyM9+O9t zH)mLs4+ZN`MqSQT%v<}mq}X#z;-z$*_ZzWey}K{fU9xwXpCaBp%i=xuLx=k0u6(N9 z8Ae-f#jn<`_hb~VwC^=ixO^{tUNVIDqLlR2$QOpDl{2r=!~+o_(SA=a+xb&;?6XP6 z2g{Cv9aXm)Q(20Oi;3!7RdwL^d(M1^8U2Mxcm7f0J&$!n7OpNn!m-oY-CY_b{QySG z#DE_X27uPZDKJ8NlBys|(fB;~HXnCm>fd5Vw$}!^0e;R_Jab#Ky;>Yvzfh+!kbhA; zuXy*I+Sv?R(xtkW-TANI#9tDB?eM;DeqnK<|3Tp7=P9Lk2X0a;>nS%C+85R>)EOx@ zx~z3Jvh~+wP}2;nRb$WAVmzG}npD3q@&h?4dC zjHf%V-WgV=k}oODJ__EkcOHDPvv-&%pOj25IO))3{N9>o+ZO9}9@Y||9J{db=3OP<6gNlD2~ZQ==6+6;7= zDtxpLojv)iXxcWOabbf_cMIzyMsHP z{fI1F-XbMax|v}m-TUE#E&Ew7+!*P~kjeBW_qC8daxwD*s)JCQMYOraBh%Dq0&#E( z)?B_ZXM1A>*)fg>uH8iMF8y>Fss$fEKb{(DxwOW*7+Gpqs>M)56O2xVNdw2plT2=K z#s`HLyIT_tL+IAv6r7AS5|NaQM1y(I)4$D+@@}tu{r;1KZ(jfc__fJK!kyo^A#Yd3 zRbEc~Azm8KuOub1Q9BpDIGtAxc1&U~yDIm`@88MD7Qd3pMU|E}PnG*?l%vOv>UsRJ zPiv`5c)Xla(!B#0N)o+PxbqlDmk%oL6BpKA>Kp%&lhmP| zteqG7`GF6@^Nq#ax(utmFHhQ+49unb2_>qgyjdCb4JcU_n4=ucTTxtIS;jmKvD;%C zm#15lC>lkq-9t>(KCFz5{8+swe1?tnyq=WadxzGbU04j{YIGa@*y+0}0t@$Bxb9^R zHDkx7M=Ud2G373h(^VW3uZ);+B#lpx%c#)f>7-ksmwutw3FlH+f@^i#1E!@eb)Cp* zk*xMR+>lFbb+$_gzHn>wmt@t_^KW$rKi+CNSSjwb&{4rZbX8{uxED-21c0IXl!N5oHIN2eMH={@4XkR6~a*Wp}>#U`7*^;(6@4 zJR(n$SQTKpd_~M! zG&W9{byQRg_%&7*%|!(~=M93;y|MOJFxaa`Z_bV$57RSKZz?lJ#&xz3~&y{gA`jVisc)!vMV?#c75-|E87lt?dmSNzI;schhjNP3q6_VHr6kf&qQ=B zs71z0zu1IO-sPq1nmv4SqPS2p%3>sEtCJafXJyHjM8?l=kHrg(9^{j~}x z8o|0JY0agKvBO2WLQ~^XoXajbzuosS^ocVqyRV6^v`m%7qbc2dr%`Z~;P}t`(*re> zv4KId6%1q)Uy>*z?H)@9(s0b)m9}j2hdumj%}t+wE6a0wTqJ+FBLVG59`b6l}_{WsHqvu591v`0Zq5v6Ygz{MiQD z(@9>T39g@aa?a28SuR)?r;+j&Mqf-1w3naz!eVPmsWy03qHpe$VqqZStfrbpnVx|0 zeQii0?JO4^!KC92U(3F+ug!AcXQQOc$Oo+O@gbVL)!HE|MHOKUhn`6$C47yE<5KOVv*#4nd)r)| z{*C?C`m0-5*u3S+pu#1YQg4odv;5i@a)&IoS*9Fl{BJElm@Ri9LYU%cXO_*UU2dV3 z8iHfF_Mb<64@})V*rH}BpVoMpGu`ve(%^w^b`mwTa=_G(JbWO|Of=`-G&T|1~Y zj9Ro8JV!`3X-ux{eOB2#8$0~c>|%RIRU{tot>T-^_2yDZy(tL{TJL5Ko;VRU*6UQx zY|s&GijCtSXCuzM6h;&_hK5O1wm!>4?5ZEQQ#aCL%078<=eT=hC5cc4zj#rxEZKK#ezo|@mc-K??ar?l zzOq%$d-u1*T+6W7C2lbw{iEaP^iW-zy7uVTs|>?7xxLOuZ~kDy9$eIU-jjFT zw1;foTXsu?%L;LKm7VM!+KmZsHYshg!>Q^Rz`T2@SA9>tc~PgiS5uz;G10kUo*lV8 zm-KDQ1ZKM55{WTo*51DvL20M#?Q%*&2G2@_{TSSq?QEBxCGz-dOK@ z+ftoX@zstzi2>_)v&;YUhBY6Pcea9MDYo-N??JTfkX2_UZ#FDNQ>t-C zfjA~Qhacs^{3IOf==6Ogeh7NsM`fp#l^pv($~Cn2T`!vSw2+LLig1at$L}gcA`3%W|!m0yTR*36_Wsg;PAlF7OFm8Q!^x~f5`*=D1Av(M(Hhc2HDC@(* zNJ+e5KPF*!#Oct%Bd?x>pGKkK>@eNgXD_)^hx6qGzrXEJg!bEjXWBg-EOUso2J!mA0W|I}W6k7bGQ%OjKj}u- z2?(owN8Ou?AT=;7>%3o~)dB0n{02W~sz=WI?cx$Bf)i48`mM{D_4+7=OUS(WDN1ou zxd5PeXuNBJnh!4rww2pi#m?emd>%altsE|FeqLWchQY2e=-gX}nL&KUpYHB6Z8_H0 zKHZJ0Fuzq3Lvi!ta|n}>4wj>jAwe@MHQ2B6X70@@uiVKV*{s|dbgpRKEcaJdOxU9p zlDpU@8~o+sJPNtgp$t_mP3C_nSIg0Zxeki5W(M{^u<*W;_vXa0Q4478S!g%O$O$=K z%3_cH@E9(>Z=y%W5-n^8RYJ}0sWBYUVdlOonR6NeynUr#o0M~JxNABtMF7$BPV5&t zJYgsa3)XrZ-z*!Qf1A_C_fjEWWJZ0lJ}S|?p)mh&SVE^hNmT?zl3xBvC}4M z`~vMpefor06xKAp7m05AVA6R6b%6c+Td(J*91mXP4F6!-#s^9;sWI*5&oQg>ZJzqy zPfYx!R+?=8JZEP${Ni<_lF_2yfYZviM!vTAq=tz)OUa2}rk1Ddml6`sE9=qfuJ$P; zdR;lh$@#!TfpN0NNLKr28(wR%o|IC}Z?2w^YrKjQaN@!QIZUyGhPYv#IJs;r6p_sSexTCVq#;wZArw8aAL`Fs&IrR(Qur-!LIuCFv?JX0k@@u7t_m zTl?2wm(XpAuE1YEi5cu@#k|*FeIJ@uOo)FWY+fsNBPwbP_8tLgY5XK$Hv2I;5l(6( ziZ9XV;HG6@fNd6W&KIt&wtQQXO=}G6-*$QT;(MOK&geO*_uO%NEIlTRXA7w_e+M{Q znFSRU8T!X}`AF+7ezZQ8yt6`qnPo^-ZAR_0@Oep{SEG})UnXk<4d3Rj<9#-&S8r8E z-LEr=;bDG^*7z7MMY7KGb<`nC`_dBD;mi-=UsdjEg))8*we4^UyGd8cH2=G3$f1qh zS=mFV2m+7~AF18#08IsZu`ZU6tVTGFUWZ{8W_JO#R%oE^$?`v;k%bZ7p+O0PRxlvh zv8^^Fnyn&{_4(`tGm~$Jiztc}CQ6k0)DnMGzEkAkH@}yxMi$nXyesAZ4ozC;zX>6a ztszEtBlH3R$-Nhhp52Njnbr`B?-#N}cPqCBWvTPCbP29jHNnJ?| zVasoiDZR#r6%Lf2rCkMU&+B{#K4UNa_@S7+0TDjN3~b5c-fZZd)par8h@4Zj-E{xN zFMC}bWg^nO{d9P%0JlcITIcBG{oJ}#JFqlB}?ro!s9R@2M337U`5lezF0_ri7AQ{u$5r*^J( zi%o085TDE1iY}t{ax6b6AZ28X2PcLRgZ8dCgx0c zN^`O5zT)51AQcdPdEXbB=;4~^Qu&!;&7h;|#A6Z*`9+$7z~eUDmWak`NLOX=-W5zt z)X!?s-u`7U>UMRMDKGWY=N4*)X;-qiAI(qxlH<>3yjtd~ns3t-{LuHlSC_QD8OL*# z=NDdygs3K6CAyTuj&-zhp+oFyIRuFpMJ-_9cUD(F!kKcUZ~vKwX;(ANL@P6&h0HKH{uw^NIgpPwdQNB8j9TO|571Vc>R zR6v((^cO|Yp36w|Qf%n-nX-y$u6Hjyr{(C9Y{R|j)gzrqi|-o@-?XSUeW=$)0FGxX zi#klyw`bx6i+~9ng?T*$-S!~!AQ2TjN+m16wQ0l5{byHpUTyH*)^c&-WkTX$D5Z+* z85Mf^T=)3)otAkjT*gV5wFwds4p~9a$wWW_d(80r)4QJze7o+1N#xd(E|}xm6B|fX zYwqaakdqO2iHk*5_1pLFC3*sXIy%wLHP(3m4q+N(|3wb)FotRPM4X+HdvHJ(T7-nE+#CNcEgRHKW}_P_ZNRo z$-?E&n?I=YfWeQ_8&c`qDvw4Z3M#EJ?$~%a`yyy!F)nP6|1ODwfNl@vt=8_h%_nAO zVaWzNjaQeF-I?@p84tVOfK=Bfj*0Jm$AW))ah>1mS)m7qIuOeMqY@6=nMf&|3t+y6?mc8qA0!9m%^MCDz^3 zoILd2gVFY%l+T1F1=`C?%Cb6D5HCxg)M zoN(fP(qwiJtIiF!sC7wd{3*$Rn+b2le4W6^NZsfDNhgl^#we#~WH4)Qlcqhw1VO`S z>nW1?tHY+1%<`Q#wh78#)q2gwO$h>6FS|aZkSA;7N%zhij(wU&3HT6NZd7O}J zv+sL_Lkq3$SM^1jN_6<$*;}1XZas?Efjn&3#xZE*9K1C4i;BL0Q_7O3MlZ`Xlf3+V zdwBM~3cwk>BqjYvn}#NkS+(rEe_Gnu#Wh1Y+K1fbrKKA|U&Pz@$~meML{N_xRpIwM zI1^ucuP^JPo4m5Ty#H(*`(`O=EgDzXHGRe}Ho31LAhm*|xK+R)rA)tO16d(_03LdI znHs{gg#*4dvMT#$6?R7_CNgCrM42FCu*ubaVT$ESUM%e)T=dY>v-aKfGe|V94U_kc zjPO3XB~AMh*dTI}kLsL1a1OlHEtEKJQlC94_pIc;ZA*q}dEx2|e~KAYT^M3;IjQi* z$HUAw3c%xP{27ng$&Vp3~Xx9EL%x-}9~-@SS2O8ymW4K) zIj;`?JxFFtAg3td#f3WRA@t<@78=e3d(v43|nIwksq7 zVelfF8Ms?=tdnLp9Jp^=aRP-aPL}JKFg7u<4+s(1H*}gQ{HX3bf%8_p&+Nu69(wTbwe+^nn< z)`RuYU?s^nZTetPzCFyEf}Fhi^|_sp`~S5O$3W!YS(cG4eOn9z&BS-$etct3GwVg& zm{WW{P0l6o`P)Z!dav%X?D45P`H>++im za%NPc_MK{rgqgW34;cg*gS~$lT!U9AsIX4d-6X!6H3;E!^Mdk}A z%^@7DPf&S)I*eJpwChv4uFddo=`@{uyd7TX{M8!9QlaYhtv|z6_|-uM$wb2Vre`0d z(i$=NZ~}qMOc>)c(8RQ=Ismt)7j;K-+Z16bf*05YgpTYjR8na>C-Q6+%K_BW9C+r0HJBBXIkP$|X5LFUgsMen%l<$0^d!+xUEXJQ3 z+SAu)iqdGpYi-IjXZDRj?P%3DbTFHk`iTa!1ECNZ{6DpQ2{@MR+O9d3WJ*LTbLLcr zA}K>sqLLvYN+m)m^VA?2OQBK}NeG#V%tIwf$doyA#te~RpSSN@>tAc{^&k8A_i^m^ zXnlR3h4*=%=f1D|y3Xso&Qm+tnB3uXYm0{K;H@K0?>Hi^s)NZH(Ch^Xmjy{J+Q%m| ztvVszPN4vi5YSt-v34!Ly}r|WNeIdl;wLlDmmh#~A4r_gq(yrLWsmlcX5IMX&moS4 z1=QKusf;a0R;n}=seUm^gsK2$kkAFVjw0tl|C%2I0~+wxxK~huOK0NdetmYu6(%+| z75q|AScS0oP!rigTP86NNH#>g?-9-PyLayvVpIee+H=V5*Cn0|lfTk?eqycSBom~L zE+la%I7(p}=rkP2!$$8eVLl(CkpyEQSAh#RnvS^T?R^Jpr8c}j0mhHiX{aIF69Pbq$(V$@z7Ag%nKbF0>n|le&FjZ%w$Zz zvv<-3f!f<3*ba#>)SDJ*ux|yC4Ql6j*h)%EspjFk%}q`lAOozbDziwd$+>b4S$#~% z#$EPAJ|3*K(71ui=Diu*ddXo{PPJ|Vzr018Qc*hNqTvkoO}sUxb9gua8y{UZigfFi zPz)R)s_e&Q;bbS(6arZaFinI#Mn*Va8Nb`5=sdZ3`}Sko(`0dO{aTCl{K8B-=C`P6PqI)`QKjdjhsP%(;`{Tbl~D9u9765w1qaBE zMfVIg(hPLe@C~dB%!w}mO_nS$jDG<_fCGgar~zk@6a#f|o*6j|wfl5yGkic|j}CLG zD@g7Jza>^8ZT*aaK6sQn{Bb{V1{k$W1u9?bK(C4ICql!VAH-a`eY&AuK9x5!C9f`8 z3~a6wj37eMa!3S-c3iqEMXdi2T(TcrD6UbC831Dy8KrS@#igu^sd{reb3rRb09bdD zotxV~GIG<3wLEp~QX?Qc>~UY51(XPZRHD-jhbcv*A-{YlLxq5kKfZ-JU zqESvTHiu5l>O*F1YzkQI}CwF4N33%>so zcJJv!Tmj{k#@&WN2{HA53_pabw~l-!muvMV=kddRINq99XX3V2R|nzDqNL^F)n;02 zjXAr=>jAy-f?kE-vU>pYWaiLuqcF<0^}>>}Y)GoYYM`g52L*!;IY}UbHI?o3PXivO zAI!t^crwtBdkgANMXW6{rq`hc(dcMMkIpaN3-8~jh`4GzEOl} zOn!00bdbjHK6&y9-2oJx`uEB{AtTsnt_4atU_JpXU}zyWXIlGxIAexck!B~v72-ie zq8Yy7bXpVr+O>U;8!zQJ*1>!A;cf>B2s!NaI#-Jp1gyuoJx|Wf z47bE`YT=w#!5uRwaDSI6@Do%bkpAf?5H|_3nRYISomvRfj=wTjHD2GU9Em33jArR!qWUN`=M`#Px2?hMwPU1pyrc}Aiyboh8~9;GSCP@(1Fy{gY1VqNGIrS zcp)HX`DA^;)1QUcR=VnGFtLd95auIHAwY%=3c;LxmX;zxiqjl0spIA6zX@S9sVlvQ zu=rvJEF0f!S;7=8$uh7YfiSxN8J4Xo%y9Z;fv3i~(~=DZl@g(r`$id^NVdJw$*~`X z+A^2q7^LWKJg>7WeVUT|=5?7FWH6r94mi&Cgn?NUEjWYSmEt^Q$);L_PI8RZr3Pms z@wm2zqnQeW*Bshx&s}_2WLj8K5`COcMFWQh3n%A*{ijYid2j3DC;`iXe$^^oVPT)K zu`yn?QY3q^?Y{uKOij^#QIJ{X;s#Bt-DSoa$XSZ6(+d0UL-$o9P13c9LoLFN3CM>V8bo>y9^g0OlhQ8Be zKRuD}K9f!qtwFoTf=|O7I}ny93{u!x$X$*_tF5V`fZdnF;Y`7|m#Za^fDsgzLOfI( zu^XZIaY{MzlF-chIH@o}VYJl?co%L(a#qN^E%x4uITQQQb*i06ptL+Rv5j|FH8M#` zCMPt1K2;;EP{20r3IEtj0Y|iRDt@L~nRnV1B2GqS=**1|+J}Y7goe3`X`=Q-;hB|? z%0k`i!KSrfxB>Ya-Yv#T)v z^CkaTtJ_Q~B&8o?xD^MjIRG5aO#}(5II7+r5I%0)CNtGc$8MZqa zAPolb17c;I(C@+l*p0^2bHpBK6yIcRk1<-6cA@?*dHa2!z_QXR}9aYab;c>#5 zfy0Y1!y$o7vPV@Ntm6WalDx>s$Xc0}%GR{5SE$3E?z+mmc{2v?4p~}SrnF@t0zs2A zEWXk#g)Qe?(xBvsyvPO7Og{bJ(4+Mem)#H`8$zjuf`Z9+KZDd#$6Nb9GTN07qLp_F&O<=3v4+Amq+kDK!!nMih2c7d>1YaL6Kb$jS29znZv8f zlTPJ=f?g(ZY2(eCH{T#2WsOwAmg6HhiC)(`?vTZTj7X8>qZG)Ww@69dB^V=8=o-Kk zNcv_Ami{OWYko(h8)!-sLMlgu0iGy0v7k1B{3qgq!~oVv>1kIx4jV-E!Q*>y{b&Gz zANMVK6(lOJ&dr%@hzWQU){TH4lW#g?zY8V^dyyEfW)~yEO88CK1Cm4a1{@WBDSQE$ z)VEL5J;PqZCrW|Z94fzzYx2E3EAVDW&PcI>2ZZUIs3Vaud@EV2%CI)jG#Ty~TefYh ziGwf89qfRk8J4sfLx~4yrM~JW=`Tht+E{vv8%MeNhq}y?WZxxveA6>6U zifB1Gea$t)gNmYu5Q5z1COaW2kMio!YTFjjcf-DCO7?tpaZjAuZOb8m5f}G z#)Wh8XWP4Q=+#*ki4Wl#AiAurn^Br?rnFViE>QyhHsjW-uF5Q}WxjR+I6^a985hjU-J4xmWG@=U1rX;vPjR&J@6x^H9@3^oJICJ_#wIr)YRUbZdLO%kP7{FdqH6xH~sSV@jHte)iL8e3~ z5y1A)DlPi(8$v$^kSF75b|bn1SVpg$3sJ})TNNs{C;G3~`S z*9_Q`&(QNH1xp$hLhmsp2^nY4P};4#cei|KjJ$hyFBT~=Z95T!1RE=zuvjJN- zWI7F%D#S0MaTQkW`KNw~*!4unk7(jVL5j|S)B|m0+;KUuaIub2&$6Qo&Dz5rqGB*m zjgNp#_QVmn5jQ4+167amrQb8`wM-16tC8C(!?VX zMRf<%-A^MdEua*KV1$aR6@aL3}csZjQv_`%7F5L!3fZ}QEv6pfo1#^Q5$ocRf zzc;Vi`d}^M>dMutqfr5BRp{yp?Ag=yK{Q4T7V~g24n{h>9WJH_Re zQJP_17^3EOzDn1&LRUu!=sln&ETtE;7XyNV&fz|uIeRw8Rf#|Zd5+r<=c7OY#*y`cLYWOG*`=O?o`e>RQKHSmv162 zb`K1E@Lea`i0dX`1e!;9T9@J3EPiSxgwFmNr2O0s7W6(sp&5OU=fLG~^xOl142dqR zdmGjbu@Rv5<4q3J#R}9+*gs#S_dQTCh}E&GeF;p>%C>pWkN3e{gPAwM+>MGC!C1go zvjlLlFz}JSBL%osF0?9Tu zHnDP)jL>HXS$F>sQ#1KcFWDwzB`-Id88UtEB67s! zEhqbHXz1uJBjd&pY`G6JAMpla_q&CFL&k#$K5=cd?J)Y1PI$(^6hGY9j7?(v&iP(M z#AleBNhIhoCGEU*1Z%l0i7M zn88m83R;V_6mTT~D#!!mN(`_fWBa(Y(7tqGAmj)#cue`ecNu-Bj=*m8S!xn94_DwJ zPKtB1)(qa-Z$*k^D02sJ$^=d;0{Eb1qKVoVDMrs|!BVfu(%gDPS=cTTO9f(NPpFXS z_Ujk8Dw%r28EIIuY#tNxX2;PT~GOV=9)+)_w^H*K4yL#mC;U24W#<56Bn20I-s7)pWELOn`QxP-g5rAVAs}2Jf!h zilg1yT;X-8@e#j#>PLJJLn5f$gQrbA46Xoeybl42DE>++$!GpxTpj9DBw-qiRO^_YyCzx|K)%-AEwtSuVQN zh@1e)FBTUUr%%9B;~@y1RI~#>6crRM9oPNm8z}$v1|r(JfH}CuAJkNWZ_(DNzzRc4k#fx^IkZe}z&1Q9q4Gw9T`%3W_+VIRHCfShz)`9jDmD!ttDo+!z=;o<#@DX=1CP5W z0wB-@`OC^zU;m_eyMkVYU9kaV9t53jHWJztL&m9e-~s#l{(F)T0)V z(4d)_H*i8%S3!tYIom?67gh#PiFv9OTeZFC?CZZqfdlmwk|K^Vx9A<W=KcBsd!Xuo>)HKO??b8reBZ2QY|$!IhF{8= z-Wew!UgZqk+gR@Lz35+JGyo|HGJi7m0ik8Pud)}u@Eh`8HiLZGB67&p% zQmwi{GIdl&XEd9gEy4ul*siCHsyZNk{u7#tHg~tz_4w}~*0ULSnA%i~)xn4r)+f6W zaQrw-NbeMH$jIiH&nA=q*KNl?_X-5USm3(tPPEd?%+M0n`xW?TkK5a0@fSSN{lS42 z3Buy~m0co#|HwYO<-PEn1DPH`5ehIBCIB$h0+SVb1d;Ch0HPR}y8Zrsvh*>0;Pf-y zTFg1;nb$f4ee0^snoy&w{%L$D4F<~o&l(Yxe++>7?-o6EAHcB!jdMWMIBc#Cme zb^;w`71bM~H@4$nR9X6jjMH|7sR2BNTw%6E0}BnMW!)=Hef?9ZY1`%9T{l^`w5=)} z?{E@h!P~Ic_A__I-T3Z;|%g1O4vL8&vYRz1sAas#9_= zGJO@jN!`t8T9x_M{_u*!k9Ryr$j0F@l$we}ce(!tP{2XM0cR>qBEWO~g>nW;MuR6> zlhzZZNQ*R>+kNCZwXWzeDzyQE0bcx8YAOZc&krC+;OqzG1m`yo;Lw8#9)LIT^kaSe z!GJ=Ri0?&*g<&r;6OuzA8mv(BR<_%>2rG=xz@L9+|+ z&pqH@mvM9-ZRsB#)(jEZLczhn(_BsAdvUs>$?sBwXW&bYIb11d;3MM_8Yf0Hr}Y8OJ_|9iXYfR-w#nYmKRG zoYyn{5*3X;OvynGFitu!Qk;FYZxrY!njsDxg7fq9zXAH7)DoR`C!Nu|cbVYi{7qE) zOtx?CTfbk%IT4Px9M^5jm!luyI8@q5&-m`@t4~Rz-QC^a7OX)c#{)piM{Tw6DIOFb z)d5M@ZE3OEf5E$fV7Ey3akdDGiTR_C4DLuF;=6u|87-*HbkBg$@3{EQpKPq!d*LTd zvrz}%y-)eMy*(1ga0t-k320?K=zj#^I>lY~{qPVxbZ3fT&6=~IdXZiXOm&E2D~K78 zLQ??TMv{pqyB(5Bf1%eae|6QNm)x&Utd7;%NCyTVnrs(RQzh<(Ty2};62j*HKFP64 za$@6Oq7x3TTi>z2-Dq-dqjccXsjC9(X`Xjof$~q+{jRvC7{Nrk%woy!K|h{;D0O8j zDSPc#mvAz<@fQ-X{<=5}s@0o8WR@GoW{}#z2~R3wobhsKQ`G)gLq`oQ;P3A~?P6d} z3QRyy-dgj!>lx;13AYP-<@tO4c<|N6#tK1;92mGmxJ*lbb=9;gxC=}Suf;tvPIeFx zH5w7V!rg!r%c-+{qms#7@|Yd+CSwy*ZL||$4HJ%>g5Bka<#*j^{cgV-ZzxZfe)bVi z5-3o4m z07gxqKbr!35VZ8RZ3rNb4W(FZ#zj3WKBUQKV9*5C96s$pP4o)F0g0_8vPNJ&c7JU@ zh&DQoBUFFKfSFz@Shxm04%Eo|fZ-sI-2lBet=MP`wWpu2p+cuYXzfaMH@!qdRa6Op z0r}+RAAuitKP=3lX&3znD;mjRVe1KFKGV)P&yg9#6LeK6AWiK;N9?FthEd|LtBHw^ zzfUQT3>cqC8d`zaW`2q*OhE)e2QL6UdbEmsLvlczAuta5DD`A)mh{E(OZ+%mB?TlU zS5WxHJad2ah&JNPiG*8uc~(|3q83-it8>f);)Pem$6L0A()NY5?#g|AMig@qeeZo6 z%O{QorPhfr=*!zf_ykPJo@UDo<8N#J9PHW1dQWsB@MD_ky8VzTYGV=i{nx>Lqn$%GZ2k?-B^v|9fIv#sW!=Z1%IYL3>t(Myy zH=}&)pW4{L{<9f(0$<72w!Oj8M#S+uZ9BfkXf~qmMV}jGU?BP|SuTs{^D^`Bw8g`v z7UJKfz-R1!Hg2PU5j7Q$>zHyLcz$p>s{pf=RF(w8UV6YvLDa56TqCGeO?%_*n>S6N zAI>3vnIF1uV7r12N8AGy-Cb~mmlgXxoUG8`So-0(FwT5M-Sj(a_gK?|YWU1~B5-8x zl9iBPq|i1nfV@x#tV`&r@Ms`dO|E0v7lp`}25fzLYGYT#=JTSI&jsjlAe$Pvlr_oy-83e{D@s1+mlVk=P$t1=3w;t6X*OFZV z5i0;<9Yogws1T7;R+xCtM*u<;#&@B~2iCx8v?P8HCM0V^{2cVzH?6_!0nEq`ObA{D1#aMvu%|9Yv)z{X1){A;=kn|W{*#Pv z98p?eLpUYHznVV>88RW{5)QNhiGCGT<_&ibUsnH*a8UbMz^4&T!yN8twP|NXn$oT6#|!Zoho`^RdsM)$I@ z_wq@OnkHPyXm~ZU(ggN%m8qR}b?+~BhW1nmU$n5=-ty|*sMH1}rk3~alj4~L=`|*E zHJ=(6zXn;9%NWZ1Hr8Ners#MXeu=cyK^*e_`t>N{9wHYi$T13HI*Tfrh-*@Of#V}F z(S?&o1FPWF)D%Dqc(aWt^+DjLp(y}RCkH^#NTy1W|sEDPta1E?PY=D#!c;u+rZL4 zDWHjeZUe^yM9H;)(V-(wtSjMYO$=m!Z=6UFGfa9(zjEb;Q0)t|J^8`=|Hx|xm$3WA zl!QpXyOZ{H;MgPR~nOK!*hYBRlP+X zm<%lS_4Rl&*dyZoK=iXJxTGZn-uP63Dqo)m+5o6^;7Teu)SU41(Fos_U)_y zq=p4e0Wguv!=~uyDEb!3NOf3)mx7EROueNztodbVXb6R-LS{;vPEg8>zxB-T4vibk zJX~$P;hK;ZyqJ_jhqPY>krOcUm)IklP~Bn6A<1@fy)?K>E0$FvOmnI2TlGl6MU!TM zSIygI+FK=c>hnc?zy5R>4%WA({eWvawODH<3{u%!_O#z zOpatabzROO^FU%o*-QW&tkcY!jo3GCOcYuHCXpYKD$4V3=dF<;@^nY;cHr*&ykKtw zrv(qg`jGo+)!KhR#QVODazEP(1XMzlfdV(s&uB<%V^O1hl6b^UKw}^B9N2C;ygIK5 zeM1?WHh;peKw4wn){jHzo}BA%TkK4=lTW+v9J|JQ+4N839JOac5!9zef)c2yo`NPK z$L*XN)f0A2Oi{7*%fx#`PU2@?#j^R#)5Z9IZ~;bAzDFKu`J9`WI`U!NjO1_xll7FF zrbT;)UJLD38JQCWI}&3m6C|VCpDr+kH%-U;-cNpV^K0WG*XO}OOI$iSp$n`|GfVe@ z(yGAobkFP$R=0{MG#wXsc8+{tov91~{ecoF4T%?{?FFrUGgGcdhN(P3zu0Rsg@Y06 zO8dkK3%S6}^dyFWL~{q61(<5lAs&@u*^i^>j)pxax))U=Q&_FUO*?t$P(IpmEJ%eO z4}a9v(eVN%ZVEmt;=+!+RpkTrQF(a-YMH>pz2oB_%G&UtAHILT2FLKCDl%X~$e60A ztgO_5XFHBWx2ygoonKh*3=7D%uHjMOzOf=`@7c3k12_I*mu=m_N?|+MPdPan>9e@7 zqI0lbQ_gKygZ4=XcR%#pvg)YP{1`RyrNkQfZdS`+p3bZI_H+2LP^$8X0|GCkwaN~3hT5{ZncPHz zk$!T;xu>jlB_|8wlH%fukX3ft%4zHB(qg<7RTG*rTX0a}N^ayE?)!6jsdd0!#^rU7 z2!r?lj-iM*W9g|S3w`C~AzYl&wmJ-n{$R0K!MH-XwUN_4h1F9mv1`V1aIfn z1xpK~3ufzId_JEu_dKzlso6Z3pVM%g-Q=xkj@e{BW{-v=VHRYNyCA#2=I&@l2nSrOU9t~fu-ICn z#U<|Z2Zh_A2PrHfLOgQO+q#WruNj)C#tn~L!{81wl$6Ve&KGIRiHM3~A(840lQQWp z-9~(b?oW~%P_y*&U2~puZRqXoHG?q+$94+_36sSE8#}aYi37G2if!&at{hO}$7U`B zREhbu-xe#wGxf!`(69E}>*gjd#x7c1%u7Mx%M0mOmeZ%1-x%)S-FgB_{cg)k28LKM zF)`$%@O)XS0VW>-tWfA7F7d3Ct%w=NTbmPmHZ<2SjY}y0S z@EVX+uWR!>0+JGuVCQk}e{RvDp7rC%$sI0N;>w5uJh|beKGXM4{Fxc8h=ky~MJ`Q_ zlKM#{gmbZ#bvm=5vQbvau9c~3ETXAmS>bmr4UBV7!@|^hQR%{o%<@~^OEYqx^RCkA zY}K*VeXAX!*JIb?mrD+BV%-bc;*}jcc66ZrBaAGH4%`7u1{4D(VT3j=tT@PxB{tC% z9f)>Ns?|?F&kSdQ>%ddUqrnM}WCxwdBG7*W(I5?ym7slmg28cDdy9Ah@k|Bzzw@3t zk5|2A8K7|zJGcy6e-Lk~hhPLnI1d6cBtrMyL&*hn6okPVAK!&;jyjSJi#FxLqF@$}Sve+)F~9S`zkFa3=8 z)GvGw@oO^iImYsryh- zUyxK@O1yAWMsn;}&>tF>+wiWOox(OJ%A zQ;NMoY_JzB9;;j+_?| zgS6|cwhIYrXwI4f_WKPs*qW#JF{}xu&0tFa)#2RNM5_;u-;gZ^w#7iByqt&gDEQzo zw}0qK`B)-=`1ZhOhII8z*ZMQ$!_g6fM z#$YDc)|bL7(lkN`zI~Dk?IoZhPghi+9xyEM7;X`YvxbkXzth z^7UJ5Pr!G({Inij-KqGz*i>kY@4l5C2H%>o&#P7Hc3-A1jEp9(Cr>XeKKe3gmxnJI^QOyJT4Jl1Q zMa=YT4RxnTPX_kXD zImKSK@QE6@Z*)Jn_FD1O&d^!Ie9?;f5s@LAzdq;JUQA5F_d`Xeu8-4$Q*ATMq=k2s#E+1ebhSbCbXB@FVM=fsIdOeO`&?R7(c)D-(+c z3WLyh8zMbBc+#q@qGgme1Z?twm&Y7?i%E08HIib~be2Ec31%_<3)a0=(JKr?>&DSJ;Xn9^DNKYv8*|9{#Gop787zWhPRy!U}^I zB|9V=MpNFB*;4R>N?1)Zu3M`zy3ZFs!*!o(!P66$YQEB4-z{jUwOH}vc~|LIe3 z5B4?tE${Pcrlx!)ag2#-wAU0vx@LE9_qT|o4VA9q?IGQk4k1%njf-+Nq+U-IBLV=R z6%5zV_(RM4EGI23EwD6@sm@V(zo)i#XQrWC_SbNW7!OPNYBG4*!b(^7-7X=fmVU`8 zsqHd4+V6UGkj9v}*e5<+7A)b6#MeXB7vfkKK4+PWrl~Kjk#)Z`j?lL)` zv9=?_f#+6FbYyqjx^p!(m6x|%VqbJ9D=^K|y%oRX+0UPpubmgJzE&`%t&e@obdM92 zQw5Vo@T3MzXx*N$&^&Mb^^Wro)dizrE5%P%<_?fObBaz_vvC(2*jc49nqjtohO=hu zuOgy@kw@qtV5vkTG2Sz|5@`Y_7GmH)nJVV8a}Q;aqD6Rhv%@c9q7vYJO>~rH`kuMs;*^^{?CgSP_W~xES>y z9&&s@X$60fpt`(}06~cI%VgXlYzSZ#*TOfod3hx)PT55kFhxmS+9$1*WDsDkF~DJC zvvh2%_xP(+sxqB`EA2dL%I(Sr7afm30T$kwfBk3V{)79nq%ial@%||F-E&ji5|Mst%R-OB!o|aJyh#a04r!fV^|3;FZQ6P zwEUq!IY;}S5>1w&d(O*uNIJ>$f(Ey*|Ky_2!MP)^^EXnc_X2HT zsCL*QD!SUhVS&Lzfyr-j<&Dh)x4cb1vQ~HGPxiCVcr$N4z^kGuHy4<*hP6x6Zb~F; z?_aT=cX0Tj=LI!Sw|N={`CsCUAqj`q#_7uCEzz*lRzxRHCkqIe7W<1G;^uBvpfvwb zm=<}dxOXaH>@)nEYbNwkf@Qt_K4k`{99JIQE^<&d&ohV1P$6?%_4~W=SoIe-&+x;) z!0yP_^hsaCw>;J75=YD5!jqG{be?sr;z(ZUb4Ww^cVI}PadEvkc^G)rZS$+_v79nJ z8RXP;7^H`HBBODyqlE9CHIR&U)6-q&Yj)zYifT`2*jOX`{bE*~tS{v&tu;+_tUjt& zroIk3w$XZ~Mc4dMa!>AMqv52~MfR5OPB(mFPji80*Ku~rkmHQXDoiMeqoo9HYJr7(8}D>;6yCy zz>NaGSB;=EaJvPDp;bZcxqBp=8uV;<|CNJ}22a55V|hTG4u#9CLB|TF8>L{7oqM%t zkscu2`2TQ9iP0jY2O*Eg3iLwUB7)N>Xn9y2)qr7|BW2&XezF)%xHs6@CxTq!3plM& zfAS6nEGG~XHK(&CJYznFj(SMMHZrq5= z=p?tQT;7OyUe36*fBR*1&outECqw5s6OPCf*u^qk6^)qhQTb7@$T8y9zgBMNqJhHB zt#tcVRKW9W>B3BhU5*i{)j>jeq9uero%35uZ^w9#XITMAdfrD$QPz5wZ_iB`4=>5q z?iuS6;|wck^&Gyf75!Sr`WnC3u*Hio_W;SYAteSOev$ZjJrs$%x2$7-X5q-r^C;Z6{QACE)T}io z6ZWrThYqW#sOcU*UU(^s`h4?3sYP0bQ}Q~Go`3!L{sYHvdf(o6ZI`L$JJwpEn8Fdu zndet$8;;1M5pLTso>dwu{r$%hqHj0*_3sv@+*d?t6ms^}Fwf9{Gb{5w9bm?w1^0h_h%))- zS4WC5^pY}Xv;S+kz3;l5(bgCHR~CA0e?gKDlvChcTY0`6R~9Ag9T~k&=ceweTe>V1 zAFkhJ5T{c4Ark~Tj-p?va-gB+^JcH1jfz^8h@YD zOY?MX&i#*Hat#?}v2eLR3Xt98%wxhfT6{7&u++~_sc?NwhFs3<&iUzZ-K_g6KpKhSM?Zs@cHS1w;>@-I5(d%I_5RfG9q^0M5s z((7hr`fi^2$hxjqJ$jrvB>*npW`8uf7GgG4`42Cr&CzF_RvzUtYD(_*8c5D^F* zTvmo9u#%;Nm0FQaRen)KBrES`MdqZvBKE8aWI8&C|CXz(0{R$lQ0Yc?m6ewhzdCia zB(TpRd*BNJyE(RBk1r+_t&#msfv&~l#~Uy;u>w39Dhl)~Fjcq?VVR`V#BClEVjo zOp3er?va^lu~To^zz-wV=gIZc_V5Dq@$p|S&EBgM3n(-|J-xlXCGI#3d=>cd_}+Ha`lVOf2)h8rePEF1Gja;oX`l z-%EwYDta!y8Sz^?{_(zSR3r^G;--%$dgI+6Lqt!pOQJE0HsM^13UGGF5vT*rhw%T6 zj~@?0HpAZWA0O+bz&5IFUoX5~Y&BDuFJ%3_P~_$KyM2?&!4(db%=^rlu3cSi{AVg! zf2`l;&CVZ}=3AC>D48j4zB)PnLsE!$X{y3@biYSo+<0|YoW?e$U2^zL_QM$sRG#hy zp-Hwa)>#9hR_WHCPD!jsH;g*BmEeLvxPr*l`n=x_V>bTv9pP)0%4D5rg_A`}?@cWg zHZ`8+*w7;{5OspP@LXjkZ{NPH@dqc~xDV;5Flefotfbe>8{-0V|${ft1@}j z-D|(D(%SBP z^jA%J=QJY%AAKXf-4y7X68a_~D8UL-;*LC48AuJLV2M?+?1FhL_*WDZuscm_(#C20 z_k#V5=98gf<2Un&hX!rO3{-W1?HjB8Ns6}&b3H1o;$LuHlwr z!c|8ux}eQYvNt#fKR-5(0Y2PpLZn|v0Xx8|Eib3`>LIk%(ZC^EH47=EEhQ_v9zqZ* zR#sx*u){-51iAw&4gt5MV902wv zWtR4V4CyfUa`PLO#FKH~u|2b3GWtpVG+$e1c7XmhJ2RE1_Y+0A?+((vFDeRI zcCuf2xklx4n^m2I?Q)#KR=-XyscfmS;Z~eM+<|^2cALamrNcoVlsa047HK1me{Z`Y zv|P)*hqDp;%Jxn!w`9<5*t@q(e?9=h7eyJiuNc;89e1URDaLWZhXaW-nZ;R zvIXAl?!UTMaUNL?D0m}bVQk~zCjqjHPIPT!+A9A%%l74NjB;HxpLZ><7=H5nnf(%r zLYBv!uz&s>#~2I$zZ5)Of3%hjgb||I=Ks&53=nNs^TlLU2(ywl1BN!DvEOUQk*-1+ z#0z`~m`_95p4(;m=lF%0=cs49d&6zK(f&q}L6liXzYBL@5sYx+9<&m`5O`xhaFjfFG|(ru8Y8PGOb>EUK{1DuZY_^LTHb%y(%?#tuvgN) zI4w)ovBP(}6~G=SHUmq>i3|erRzmv;35gk{>P3=-7iR@2=I;d&WElWFnmHK4;R5gs zMs4l*;Ly+%9Qm%I`Hc9rr#=O5aQ5t3{O7BW$jIm)7jJyM zF8IrefwfB}3X10ZbmjD~qa=YbEF&G%vBU5Q*~Q>! z6!lytQ;B;T#8L92e4<~oMiq%IDj-UV|2q4SZ-Bma2UEQ012`)Db@bZN9@30wrCkx) z?GfQd|7+BZX(>~!==*w}(ua)4bYtWuW;cx|2ek&dEY2F_>A9|saG9r5pf5VVWAeRd zzKjE1F~g&hgS`r}9z@|XGcRzcaE3s)g5)X@*@GIGgr(%u^&7$t0mBVG>rR74KrnAo#8 zlZzKG0_XB0NeO6B#SqzZ_1#)Y+CaARzwJIf-Myal2J!9G@Bu_W9jv%b6eMW?6L7C? z{k0%woj-7ftsS@te1Tsh(mdU~t$c7G)oa7aT)UhadFlThh2+<;oc09J-D*@FK9MT6 zpNYoDtYWoII^zV}NhX@*=!ywI<8Li8>4IjZHG{@Xha-8M=l%tqoOWxY7|HHt1jK8GhTNXA3x4tOD9v^X^nyT#Y=9CeZdaEX z@^uV{BxjE!sK>Q@zEpQ@inQQ@+5_)@a}uR7lzn10CB&nEd$W%UCGXY#09B|zyXe{ zpFMul^mm&;QH?^|YH9%7r}E)Q_i`sV}$VNCxo|y*8$e z8w2dR%eP=syLO7&6FdN;oXfO;5y0Rr1(sN z$^_IhB5HcZVA|4^>blD(nY4hBNENQ9eAJ2mxwc_#yY_xcS2!`bIA3>#l-)pqY3~P* zin*@9R4M5V@gKiv>v~^pspzUQsV*5Pi;POiXAZ9SE#6sux@be;u5qWEa(*?!^myE_ zPd)}fdaC2?P||*|ort#LP|!OFaPCQD%K=FVdS28>Z_yd=hEnIRxIhRv5Wx$Qcas|C zdk!lQYMNyp8WKj*3kR{}4HQchoqqf?9v@Oa&gpwq%A22lZ;EVR9Mg(5C7U(Miz-#` z3hg{~!d{uZ#zC9v=5^|9kxK0rMGHeeBtd@f(6TsW2{7OqC4~Lzk$i~ZdtrrFR=6; z*>w9wwy;WhfZDg~ao}*TcoOFIpHKRdU&}QZ>aA6bMmT`upH=(hj?XU?>{}9kHdoAS zHQ#FTCb7;sC*y(V%I&FNMn9g@ze=x7S$MXr<3d59+Yy06iwk>e#)loJf=s%i7@j$= zZ*#uNZ)`MAneUTS_Ms}dGpqghj;DQp-6tGfw6ubzhDWu!E0<>1yAC|}d2rXCe~Mma zWb3U=2{nmEZ@s0fCtZ|v-g>NzXelVIL~XGAVqu{tbCD zPhB&j?B2O98z*=rlrWRa;8zA2!5ZRvl`5EBmL@h-pqhkeNZVUyFq`7MDfGwO;Dy3la@~XyYWU@`p@#o@fcJJlRvtMz$O#Uo2jFLq`UTL(pg?*_ELLrRyZ@tcMd+zRZCbi3Q z7i`+xw$wsNCPiPYYJCwb+5Z7Xhn}UsZu)Au<0&d4!i3U4p?=lvlILMPt1s|MD&)eWo`|d|CMr^cizZh+AvfqS2|Zbo6>ua-a2D1)ZMJ`C%xt@n2huI#y9(%C;? z$)w|XWs`b3ztVm9wA0WyQuSg`ssi-4mOQVd&GfJX@AkXEYxy!Mi4ifo%9!n<2~tW> zZwd2U@5|ItFV_aPz`!HU4S|ijgAdoYF?rSQTFZIw`lV*({2Xys%l&FC6`0R zOw9KLpRr0&06~|)Fh+)a&dTdRZ|J}rm0G#Ku5zpIbr9`|SGeqc`*vSLCK~XsxFDj@ zzSMLfq3&f zPEbb@#N}H^sO#$L(hugJZy$wSCWuOaVaF$;jkVZ7>p%W1D(ZSz3X9HdKtwvnkKaU> z(&EaYN`56I!(?)A+p1SMupC7Rp3RNH)jmgkOTu|VA`-@RYHBdjp9L- zBK6R-s5fw_LkXPe>q|#YUSD;ch@+S-&d-twsnMkxznlVP7FA}zQg}Z5F;)P=(YxlZ zyFS+=D|_~#C_%|T)et^%g+Z?Xk3&;=-10Iwum=twF56zMa3jpvS;K?6exhv07yEN_ zxG%_85UM1Pu&G|ieEU+g@@+$60($R5)=t(JRW*Vc%4n&G?fo}9ufmJbQNoGF^jT9M zexRjjhp`Ksg|)Vd!g3dugwmJHeWRYm$FIUdm|GHx{xs(@DU+$Rpg6bR%7atyT|g^W zuYkve=zH$R*RKa+VXNR>F}YGBZCQls$z zXgYKJt^IymZ7Qjx#4}}W*pL@3gmcdBkkbZd-)iG}`aBuSv#pXER!*lDF+jdXBX|r& z8ZaWe5NgWb7p7iJLk)GV-M=Q}zP0t$HXQ?-wnNTbxe1kYmOn>c-Bz09Go248C|LNz zDZct)i`tQe{)lHa?$=<4vq;Rf*|%)n8rPCkG(LU!Nfs(YqU2Bba*`gitHCgxG9QtA z(#k5CNAtnOVutT(P+MKlNaQ|C699LPP(1@~c)J|}!k|D7b{byOvKg!x>D^@kgNS2_N-(bmZS`^58{PDeEFIFf3Hq_P_@I@SEwu z;NQl!UTS(E&qa}6qZpqz0A*wMjkS9UF&Ww*(u8n287MokuQ^=C`6T;Te!!_y-&!Wn zV!pl^18*CASJN1S+LG8!<<+1zvrek;h@>~9O@h=nxv@drshG2Pm^%Jws=SA?)Lr;jsxlYyVIrcs}r+xHj@$kzJZ$5vo zE_z*1@wt3t5Eqr3H5tA9VIQUBMh93dgkuknu6wYOBa?^$3h-TgZ}N7GBJ(pzaIW8LySqNR!rh!TeX8})g^iHB%3LN=)bk)90L zWIYxnnLyN~_30})0y1y)gIiBTjVKN`j7$x;tcT|D7^9TewT09Iqi&v8py^}=uBOrA zTBoXv=#^yrE?&q0l7@$~2&K&DRRxV3l^X0v7X?#M(}E}|3>?Q^!lt*5+h(rmtr(M| z_0Kg6m>SMW+(E9JdG?m^!spWd*v>Yq-GkN!93rp;%-Wpqb;Bhx}=GokJ@ z*Z;74<#Nx;I$cas`L8_m|2u*1?t=#}t~K2Mkjg-Dmp?8yBKT0DI|C!K p@_+y9*%V)4KEs*iug`y2TC0D5#;TR!*%b=BG*q=zlJ=Qi|6e>Y@UZ{@ literal 0 HcmV?d00001 diff --git a/docs/ug.md b/docs/ug.md index 65494c4..2902f4f 100644 --- a/docs/ug.md +++ b/docs/ug.md @@ -11,6 +11,8 @@ To connect the DataFrame JSON string output from one Pandas node to another, mov ### How to add a node You can right-click, select **Add Node**, go to **Data Analysis**, and look for the following nodes: +### List of nodes +**Data loading, creation, saving** | Node Name | Functionality | |-------------------------|-------------------------------------| | **Pandas Load CSV** | Load a CSV file | @@ -19,21 +21,43 @@ You can right-click, select **Add Node**, go to **Data Analysis**, and look for | **Pandas Save CSV** | Save a DataFrame to a CSV file | | **Pandas Create** | Create a DataFrame from CSV text field | | **Pandas Create With Index** | Create a DataFrame from CSV text field containing index | +| **CDA JSON Create** | Create JSON from a string entered in a text field | + +**Selecting subset of data** +| Node Name | Functionality | +|-------------------------|-------------------------------------| | **Pandas Columns** | Extract column labels | | **Pandas Index** | Extract row labels (index) | | **Pandas Select Columns** | Select specific columns from a DataFrame | | **Pandas Select Rows** | Filter rows based on conditions | | **Pandas Iloc Row Series** | Select a row by row integer position | +| **Pandas Iloc Rows DataFrame** | Select rows by the list of row integer positions | | **Pandas Loc Row Series** | Select a row by row label (index) | | **Pandas Loc Cell Str** | Select a cell by row label (index) and column label (index) | -| **Pandas Join** | Join two DataFrames | | **Pandas Head** | Extract the first few rows | + +**Manipulating data** +| Node Name | Functionality | +|-------------------------|-------------------------------------| +| **Pandas Join** | Join two DataFrames | +| **Pandas Sort** | Sort DataFrame by a column | + +**Displaying data** +| Node Name | Functionality | +|-------------------------|-------------------------------------| | **Pandas Show DataFrame** | Display DataFrame contents | | **Pandas Show Text** | Display Text | | **Pandas Summary** | Extract DataFrame statistics | -| **Pandas Sort** | Sort DataFrame by a column | + +**Converting to displayable string** +| Node Name | Functionality | +|-------------------------|-------------------------------------| | **Pandas Series To String** | Convert Series to a displayable string | | **Pandas To String** | Convert DataFrame to a displayable string | + +**Plot, chart** +| Node Name | Functionality | +|-------------------------|-------------------------------------| | **MPL Bar Chart** | Generate a bar chart | | **MPL Line Plot** | Generate a line plot | | **MPL Scatter Plot** | Generate a scatter plot | @@ -52,12 +76,14 @@ CSV file path is relative to the ComfyUI installation directory unless you speci ## Saving data Use **Pandas Save CSV** node to save the DataFrame to a CSV file. -## Creating DataFrame on the UI -Use **Pandas Create** or **Pandas Create with Index** nodes. These nodes display the multiline text area where you can enter the data in CSV format. +## Creating data on the UI +To construct a DataFrame on the UI, use **Pandas Create** or **Pandas Create with Index** nodes. These nodes display the multiline text area where you can enter the data in CSV format. If the data contains an index column, use **Pandas Create with Index** and specify the index column. ![Pandas Columns and Pandas Index](images/columns_index.png) +Use **CDA JSON Create** to create JSON from a string entered in a text field. For example, if you want to create a list for a node that requires the list of integers for input, this node is ideal. + ## Extracting column and row labels Use **Pandas Columns** and **Pandas Index** nodes. As these nodes output JSON-serialized Index object, to display the value, use **Pandas Show Text** node as shown below: @@ -70,7 +96,13 @@ Use **Pandas Select Rows** to select rows by a filter condition. ![Pandas select subset](images/subset.jpg) -You can use **Pandas Loc Row Series** to select a row by row label (index), or you can use **Pandas Iloc Row Series** to select a row by row integer position. Both nodes returns a JSON-serialized Series object. +You can use **Pandas Loc Row Series** to select a row by row label (index). +You can use **Pandas Iloc Row Series** to select a row by row integer position. +These nodes returns a JSON-serialized Series object. + +You can use **Pandas Iloc Rows DataFrame** to select rows by the list of row integer positions. This node returns a JSON-serialized DataFrame object. +You need to pass the list of integers to this node. This can be done by using the **CDA JSON Create** node. +![Pandas Iloc Rows DataFrame](images/iloc_rows_dataframe.png) For **Pandas Loc Row Series**, data type of the labels needs to be specified as shown below: ![Pandas Loc Row Series](images/loc_row_series.png) diff --git a/modules/cda/cda_json_create.py b/modules/cda/cda_json_create.py new file mode 100644 index 0000000..f0fb9bb --- /dev/null +++ b/modules/cda/cda_json_create.py @@ -0,0 +1,45 @@ +from typing import Any, Dict +import json + +class CDAJSONCreate: + """ + CDAJSONCreate: + A class for creating a serialized JSON object using values entered in the text field. + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the `create` function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "data": ("STRING", {"multiline": True}), + } + } + + RETURN_TYPES: tuple = ("STRING",) + FUNCTION: str = "create" + CATEGORY: str = "Data Analysis" + + def create(self, data: str) -> tuple: + """ + creating a serialized JSON object using values entered in the text field. + + Args: + data (str): String value in the text field. + + Returns: + tuple: A tuple containing a JSON string representation of the DataFrame. + """ + # Convert to JSON + json_obj = json.loads(data) + + # Serialize to a string + result_jsons = json.dumps(json_obj) + + return (result_jsons,) + diff --git a/modules/pandas_wrapper/pandas_create.py b/modules/pandas_wrapper/pandas_create.py index f7184f2..9299c84 100644 --- a/modules/pandas_wrapper/pandas_create.py +++ b/modules/pandas_wrapper/pandas_create.py @@ -5,7 +5,7 @@ import pandas as pd class PandasCreate: """ - PandasLoadCSV: + PandasCreate: A class for creating a pandas DataFrame using values entered in the text field. """ @@ -32,7 +32,7 @@ class PandasCreate: Create a pandas DataFrame using values entered in the text field and converts it to a JSON string. Args: - file_path (str): The path to the CSV file. + data (str): String value in the text field. Returns: tuple: A tuple containing a JSON string representation of the DataFrame. diff --git a/modules/pandas_wrapper/pandas_create_with_index.py b/modules/pandas_wrapper/pandas_create_with_index.py index a14b2c2..777503f 100644 --- a/modules/pandas_wrapper/pandas_create_with_index.py +++ b/modules/pandas_wrapper/pandas_create_with_index.py @@ -5,7 +5,7 @@ import pandas as pd class PandasCreateWithIndex: """ - PandasLoadCSV: + PandasCreateWithIndex: A class for creating a pandas DataFrame using values entered in the text field. Input data is assume to have an index. """ @@ -35,7 +35,8 @@ class PandasCreateWithIndex: Input data is assume to have an index. Args: - file_path (str): The path to the CSV file. + data (str): String value in the text field. + index_col (int): Position of the index column. Returns: tuple: A tuple containing a JSON string representation of the DataFrame. diff --git a/modules/pandas_wrapper/pandas_iloc_rows_dataframe.py b/modules/pandas_wrapper/pandas_iloc_rows_dataframe.py new file mode 100644 index 0000000..2836c86 --- /dev/null +++ b/modules/pandas_wrapper/pandas_iloc_rows_dataframe.py @@ -0,0 +1,52 @@ +from typing import Any, Dict +from io import StringIO +import json +import pandas as pd +from .utils import series_to_jsons + +class PandasIlocRowsDataFrame: + """ + PandasIlocRowsDataFrame: + A class for selecting rows from a pandas DataFrame and returning it as a DataFrame. + Rows are specified by the list of integer positions. + """ + + @classmethod + def INPUT_TYPES(cls) -> Dict[str, Any]: + """ + Defines the input types for the `select_rows` function. + + Returns: + Dict[str, Any]: A dictionary specifying required input types. + """ + return { + "required": { + "dataframe_json": ("STRING", {"multiline": True}), + "row_int_pos_list_json": ("STRING", {"multiline": False}) + } + } + + RETURN_TYPES: tuple = ("STRING",) + FUNCTION: str = "select_rows" + CATEGORY: str = "Data Analysis" + + def select_rows(self, dataframe_json: str, + row_int_pos_list_json: str) -> tuple: + """ + Select rows from a pandas DataFrame and returning it as a DataFrame. + Rows are specified by the list of integer positions and returned as + the JSON serialized DataFrame object. + + Args: + dataframe_json (str): A JSON string representation of the DataFrame. + row_int_pos_list_json (str): A list containing row integer positions. + + Returns: + tuple: A tuple containing the value of the row in string. The string is + a JSON string containing the serialized Pandas Series object. + """ + # Deserialize JSON string to DataFrame + df = pd.read_json(StringIO(dataframe_json)) + row_int_pos_list = json.loads(row_int_pos_list_json) + df2 = df.iloc[row_int_pos_list] + return (df2.to_json(),) diff --git a/pyproject.toml b/pyproject.toml index 04aa882..fda45be 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "data-analysis" description = "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib within ComfyUI" -version = "1.0.13" +version = "1.0.14" license = {file = "LICENSE"} [project.urls]