From ee3c4d8374a146a1f4eed7b001eea5f9dd01f80f Mon Sep 17 00:00:00 2001 From: Mario Frasca Date: Thu, 12 Oct 2017 21:39:04 -0500 Subject: [PATCH] Revert "windows installer" --- bauble/__init__.py | 9 - bauble/connmgr.py | 11 +- bauble/images/ghini_logo.bmp | Bin 25818 -> 0 bytes bauble/images/icon.ico | Bin 94601 -> 16958 bytes bauble/paths.py | 3 +- bauble/utils/web.py | 9 +- scripts/Add_to_PATH.vbs | 31 -- scripts/build-multiuser.nsi | 609 ----------------------------------- scripts/build.nsi | 51 ++- scripts/bump_version.py | 6 +- setup.py | 75 ++--- 11 files changed, 54 insertions(+), 750 deletions(-) delete mode 100644 bauble/images/ghini_logo.bmp delete mode 100644 scripts/Add_to_PATH.vbs delete mode 100755 scripts/build-multiuser.nsi diff --git a/bauble/__init__.py b/bauble/__init__.py index 350a42d29..27d073896 100755 --- a/bauble/__init__.py +++ b/bauble/__init__.py @@ -2,7 +2,6 @@ # # Copyright (c) 2005,2006,2007,2008,2009 Brett Adams # Copyright (c) 2012-2016 Mario Frasca -# Copyright (c) 2016 Ross Demuth # # This file is part of ghini.desktop. # @@ -218,14 +217,6 @@ def main(uri=None): if not os.path.exists(paths.appdata_dir()): os.makedirs(paths.appdata_dir()) - # a hack to write stderr and stdout to a file in a py2exe environment - # prevents failed attempts at creating ghini.exe.log - if main_is_frozen(): - _stdout = os.path.join(paths.user_dir(), 'stdout.log') - _stderr = os.path.join(paths.user_dir(), 'stderr.log') - sys.stdout = open(_stdout, 'w') - sys.stderr = open(_stderr, 'w') - # add console root handler, and file root handler, set it at the logging # level specified by BAUBLE_LOGGING, or at INFO level. filename = os.path.join(paths.appdata_dir(), 'bauble.log') diff --git a/bauble/connmgr.py b/bauble/connmgr.py index ea57e4078..c8f7e0acd 100755 --- a/bauble/connmgr.py +++ b/bauble/connmgr.py @@ -2,7 +2,6 @@ # # Copyright 2008-2010 Brett Adams # Copyright 2015-2016 Mario Frasca . -# Copyright 2016 Ross Demuth # # This file is part of ghini.desktop. # @@ -224,15 +223,9 @@ def __init__(self, view=None): except: pass - from bauble import main_is_frozen - # Don't check for new versions if we are in a py2exe environment - if main_is_frozen(): - pass - else: - from threading import Thread - self.start_thread(Thread(target=check_and_notify_new_version, + from threading import Thread + self.start_thread(Thread(target=check_and_notify_new_version, args=[self.view])) - logger.debug('main_is_frozen = %s' % (main_is_frozen())) def on_file_btnbrowse_clicked(self, *args): previously = self.view.widget_get_value('file_entry') diff --git a/bauble/images/ghini_logo.bmp b/bauble/images/ghini_logo.bmp deleted file mode 100644 index c5d018e05d7e4763cac26a87cf4c19648719a724..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25818 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 diff --git a/bauble/images/icon.ico b/bauble/images/icon.ico index 7267fc638a3ddfc6e6ba1523ac28285db2bf1235..16baae9aa7e292693581caf799c9c30024337b2c 100644 GIT binary patch literal 16958 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 Q@5yiBpZ|aSKWu^j0qsr|C;$Ke literal 94601 zcmV*JKxV%H00967000000096X0K4h{0A>IH06;(h0096X04PEL03quD05C8B0096X z0H`GZ07)$Y03aX$0096X0H_cE0P#`*02mkm0096X0Eh_y0GVR}01yxW0096X0B8gN z03mGw0EtjeM-2)Z3IG5A4M|8uQUCw}0000100;&E003NasAd2FfB;EEK~#9!>|J+! zRYmsyo|(Dj)l>qZ_aap~h=?ePYp;l%#j#@{7_DeU}*%6pmYT|vg-YFrpO_{Qh@F#;)X&b z45o7xQVM~z|Dx}3FtO^jtrOgcG!d8ex6#`1ZvspoFrGQTq zU@BnkUkqU%!e2war%;RFH2~FSaby$9dlQ0^u*ApEy*X)-3PMb0()3Z5G?{dC27tMc z3^8I}Zw5&r8KT5ACpGw+8zli^uq+E? zaEZ801R)iqA~=faT)D2J6qr;b6~UHFBN>ajiYZ8DC>c{RsX&quB*_Xz4#|=nTe7Vc ziZX0znSO;OTNJuQB*IYeuTsE91xN)H0nij+|HTmYF#a0irbJDmUkgGz02M)k79yC( z5|lw$s~DO!Cs8Jt;u^~mV2W|(vH&v>V8kO_x(4I6#+gTF%4S?poGS`235#o_F=;E# zNDv8PO6W|}O-N~Td(~FMDGcdUQlWbe-oHZHaRw$prmpN2n+3XEg zB5?`Babr-DyXBH)nr;zXNd*lr)(AMB5H2JXv}DLLh)-Df*H)uCFh(I z7Xar_5Jbee)VLxpNJ^oY#yJT_aZ7U|jz)1y6hAbjZ{*9_hdJ9yx~fpLW%Z_syv${- z-@E_bvR6LpS@zD<(`0$1#m;n%G!f!C!KJ)K_A;$Y%ca4;A2Cnl2P4SzTO!*NcP-mx zoLq;w4lLUY4K}jqvR_M4{LT|31 zCM&FR6gnw@p#EY4O@qINv@uad{FUQMC_jl1EFmD9VXcp$wazjtG8oA$<_L}Z9SEBQ zH+6$cTNj*!a2=&_#sqV8!3+p;xTcg4Oe4X#F5I=-{Kbzen5!ID32Bp5j#6<)I*#Ki*Kq~eTt*#R*^Y3T8}q~*-Gx)3 zTqzvOWm$2zXv=1axFyjhBEicfw)zzECMy66{{e8tU(BE}@z*dm7OE3HP9Y#lSm8T$NX1<(9+QPs>LMg1v?7Vt zBmqr9y{$l`fWIVz#=u`gx4THKR1XD8B803q45~fDmJ*(u(}KlgiU(oxxWzTYlf_xc z)?LjIjC7qTt~1g!BdY~*h10YH$Hy8TT;ZQY1>kU z!*Ii4xTR&}l$Epa&-1fFQ-A0XowK03jK=(Rwj(cVVdv#<-r%^FMcj!yu4{wKxKfTS zm2J69*@7(FwPTKDO51W`j&hY7lX2HFOI>(NB`6|+wGzk!ZvI%|b|_S5zkgw;@Yk^I z463j1*MZO$1dJx2BOwZgQjK{79?qOhu1j5zX$r$4!C`6+Cyl$Bp)o@f!4}+uo@(8N z=Z+42HtQ%^Sl&fO!88!!)KR=6OgCR^G1V=z)5E|oNogAiXLf4I8XNoRgm{V}p11Hy|UyLPonDN53M@_(wfTuJLCl8hkn zzfvm602BdILP;Ve0Z65!n`8p6f^-2mfOHg;1GqMzY$eDdoyQ8Fezi?>!J>?^Po{Nu zwiRWkwO!XDJSSt7(W~Q}HlIE49yp@$;zEa*6L-jsD`m$OEK8AVOJ&(MMQuxvEq!4( zR8rz1S|-t4bFp-`!hUNM-YZp@%7CY3;|%Vf9Dgx@?V*zJ9S(4p@Y@JNpSA>4Fci1s z&|5JNi}9e7C6p^Pfa`*EjZ0G(UaxMN{ZRDy<2}k>{`@d|`NmOhX{b{@Pm+4O*4y;< zZOV=Its`2i)-kDi%40Dk;MX@Ncg8Y-hzjp>00{1=e^*%qUJzo?egaZjvoGb{-d{i z7Y}W6l@p1(%8p6cahI$(NLemyE5^%h!-ZY0m$^}oa!?j^v38wAd%r|*ox<cPk z+nvfE`{c;@?`w`%(RgmnYRNQWX7^5;{09wNmv!oKn}S0}L}V=NgXNmaay^htCy)*z z0mU^U5~N4~i~~#%hymbGi~+=mz!Zo`5d#wR4S=AC0f{L;A^IooObE(#z51kLO%hTJ zAR!ne=socxp)X)c5|mU55|9$4q*8DJ>4KCCC|9K<0%;SZElFBRNt=X<^X$yfraSI$ zSM)*9h931DI{4k(ThII27}#N}TUum0kWnZ*=5QybT+4E`NSwKrWsz-% ztcb&u<3@rdE{tLq@JrxFg{_Mf@|Xh2zw8O>z+b~r9o5(PArSnn2qgy-Jj4*m;kse) zK-?o-=@+KKG{FsnY{TH>F+{MXD8A|0ex=WRdYRl-+OKBSq-$}{eqA@@{qrAlb51*@ z*e$6Dz;QhUVG>AJiW@{sBgJ$O6HrVeVjL<#{6xf{h=UkQ5H_*oIZ^5 zBlwFEr0~};R7a(C`tv!2iH8$lFxc6QhlR*geqp;p^O$~JFioe3X)@De@KW1Xbo(2F zD_;EK9_6@ZT75)PYmrydY|^$mW^LX~+%Spx1JE+Fz`cI(>>T2OOhwWmm00^L zC`Hwm{UkW7&6}uV=J&Mqt(RGJ^>U@8B%@_(Px#^PO#q zUV5XeU9inp^Yxhfb()>`$Uk54j_SF|DJzY;%8f7)kJ{3XDzaiyS#d|Bcr;RB3$4U1 zjmI6?!g8=UCeg!{z&8?Dm1sKqOGN@>7KGQbft-UG=H@c=HyE}VB3t9aX1SV2 z(=}mv4CauB^ngLdkwD2EZw{|`;md#5tco<@_zoPhxXYJseJ4vp83f^hN)SFInM6V- z#dK0!S40{E7XT$K{*++EnUadjiV9XS>nBn0@^gCWSD!X`?_bN#McbSHt#Xb!LGeHa zkeuO_?I5;t2^Nh%l3AP9H>fUO?*XdwBQLj18;NZE?qI3VNDc#QdtaN$d@Wp23kwt-G@iMM*2 z^p33;w|@V=$F)w)i)1_=k#NG2B2kCQ2)TC5=CPQgBOWv377rEM7=xwU4Mq-l2Rhi?5e`^-~{C@%dV;UUR9MBD_JNs8-4T!$i^6xTq+NihL1 zPDC71F=e@Y!vlBdn;!i?tueYuT%hAUk14033~TSWHub(4V~`1%zkwAIdcOUo$~f?l z)ZnQ~gPf$AfRalE5GClHpp=55Br{M-Dk3EnlmaPNN$G+qw^A}tkT#UG6}gsDjs;RN z#bh)*XRfy5q%()ha3pPcptWqiw*B|d-G?l*RKW==IAO`Gh@;{Wl5W)YhGKRoYQ>G1 zrP;P!l2v9aJJW?eL&9B^*h1v)|Fl8T|6rGqZnFDpZ$hXYLu)?+%jdaXO;~yhO^=f< zG{YcQn1Z|>&6jBwUH$y9vd5(>u2z4X#fmo-|p#(;V2 zRTTrR-d0tMDI|z1@mD4OQ%S=jr6{RLB$dz;K)H%s7fRWRTw6iL0mo91agdA_zVlvS z-6dBIsQETUi`;}{#Tj6|5$gEPzmiAmL1N}wHd=&jdOo{;T5`OTBat1#~>k0;ds2l8!#(g z__|x+q$eLzaVu>PTWiy@pyQP1r<(0M5Gm$k(7ce`1L7X0xItisQe3B`QjdXiKnVh8 zV1nCQ3)s>#kJrNse`U(H_x7lyLDzMheDcYdJ9jRYELoCvjTpmz?|h{)MvP9U|EdA5 z_N!7NNbVvg6^Y3mMwQ%*lt~q&R3s~zfurEM3a$-Oaits!T*hQP7GHPm4Xuh^f4hBp zqezM7x$8T8{mg@`b@n#b4Tm9}u;lTOi+IEqP82*8b?m4Wb;DLX%eF0q9TaVm_-V7m zk>4s*Zh!s{F@pb*ZdQW=p?D-ib}NGFz)>K029IkdW$BzeI+MBy5%6$kc(pP+b9KK9 z9&t-5x>c`2v}jh;;oWDy^7Za5VW|Lt`$%yQfqMX9Bo%xbDXsw|D6w_N0nSM1EVAGi zzUulQLXy7&OuN8s+?(|K%|sXNVhpi>?BA)O39Q1DP1sG zX;)xLI2JfX<7-#S3UPdlYlg<=_i<|7C%DP|J5 zNs8+rt|w-DCP0isF-{7cm|)RmOZbY*{?0@5Xa8x&z1p!Ma~K~);w5mlf5xARhx z%mAonV+09ONITzD>AnWlvEj~ce3 zm?! zMn&T})vI7$Gv4lr`@YXQ<)jJ~vN96lzDN?jFi0_-z!Fh7L7c!i6mbF(85(VS^Hsk5 z;)Nn1+kC~__0 zh(%W{m8;G_zfEMp!dl*lTFYh|T0Vc<)1DE%*En{lLLpvZ$#{r#D;%d-1R@%fRx}=p zN9?E(vl0B&MXW@^TqJ>T!jkY$h(8|#NE7)-0EHbm3=cyfOJo)YHN`xJa5Tddevcl^ z@PuE`)&NID2~(cN$t&4hH|et(u=vU9Uzpc!{7= zcO)f(q~0+3k5mcsV;9PG6-ir>w3Tu!9`r>Do_)r<{>B?yxuH-kUxSSCf1A?k`I|p; zBV`p1cghr^A*o^^TeHG(t2}D6c#KOGFE)xDm|+KYM8bSs;zvti#Gh}c;7`;QBtIw* zfG7b27#6l<$nL}q%`5!6UlYt{kn(tR@_CIw3v<)aH=Y>&_^0dZs;b$=6Bo3-`}Peg zE(4^JvwmVf-yp@c#FifC1mdKKDKJI^A|@!hVj2B9syCCCg;uRv;lBIs!|A7=zTKwx z?b{beAAL0Lyz|bzJ&L=G)|cIY_BY=J)qo9+hAk12r>iLr6B2<^N+t9KP%61|;JS(_ zTPeo^Tnk=3vV7br`K6zIo>j9}k)2W8`n7u=F-P@X?L^B%O2x{Ru*>5t9+ol`aRrOo zW_dhhg>4%l8^!A-oOKfIW=i1CwIukHbR!8RfEN_Q-_IwkvN&lzE{uTYH3Pb^P1BvoD!mgYc=+CZ9N? z(&fbFmpM~_MLaCOp5xq z!w9PWtu!*IVg!lZ1SJ)7o#Ymx4RS2SWZc@e+5UaxL7kk!qFT~G=2^%7H~*olzH}*8 z;=(GoRlHmoR)uZHBd!~c+L|4U+Qn8pr^3Qk*G1r03C}VKlqgVaZx3~&;LpPVQd<5a z7~D<_c0goD4c*bR^?+r1lw>}WXZRvh7qr`Q${lYff?}jYZ7h;ya5U__);l`{?i0x@iO=nl62-kbOKNbFSv`VT?BuYZEv1^P&*eo{NQ ztBMgMoDXEe{8+jK=}Nc`AZ^8D98AWyJoboZ!<~1vRF0GO&GVeh;?BRke;0gI?8tZ- zxK(C3(F$oqDwG|MhTTw#iwH$whCUrR z!dzsyUc+?A0P}k^N+v>@ zNmo@e0g|>nk+1H-_qf)U_3A@xmyj*Hlg>9Eb9I~U9 zFBB_tEeoYf9pra$f!ib`6!;%|tMHG@04h0eIS7Gc7?8n$EbcAzY98bo%=8+j3V2yu z1(=rUU)$--r({uCo%_X|UU_z2=GebEB$r?N`N4hlnM;4f-3>n zQBbymV<|YXqRH=St1r5!P0gCjo?RAqob}ohPPDvCs#vMZ-7+9nZXp(SL@W|kkr=UJ ztD-PuqkXxH*GnZ%pDh2#lE5FZ$*7T8XDkB@2B)9!g&a*+d4@rThmpr?N>4z=ROXuY zr@yBxr>^*Vs@I$uv(2_0G*l}3AasD~3`{_A0Z?MbCq{`d8HoTp$uL{k{Oo^d_03o8 zv94cx?X}P}4fox5A1uq-+i#*?^qw*u!J!8=T73;-1SvvPm8Qoj$0I;G5>Dl^Am)@8 zTMLE`Zs!yhrP+J1j6msrr9a(j7jLbQDpu;kE^~OaOmaJ9>Cv!jm&Gi<6|X2*WutVf zi*Ak!eENq~4*tQKi{vnyz>{%?USk-Vbz$i45g95=6GdLr(0m?2ULU7GAo9jHJ+@x* z=;O+9JvFP*S~QRDH{;udnm@}+N_dd4<}(OfBXCZNaS-ujtPN7hfErXSnoe}}GRz;| zZI6uMl~-Pg9zA;Cjyvwax^?UJ_FLE?g2N6%pO2&9-Oe5C)_mA&ZS;khW;-!*eC5{T0yKu@Ci$%h+ zG~)1RydqL=Bj4{J_OlD~QwazKIDaUr`U5pJiMB+Ts}uOa3|So+3bM3-$EODz)0FUg z1@rjK%oe_F6COOg?4{3csjG_M!6OShzxC!iri713^N`{ulD7M#h$q~08B6Tzr)WMo z|0JX5#AEoWy=RY%-|45HUZ+z|V%@*2L6uix$|F%J zs6?nEa$O162BZa@#Wp>3zh}c8x96o*L4x#X zpUINizVyU9^M-XMx4f*;yEu02SgcsFBJJFQ1q)DESh&No?c2A<$tRzTdGqG&)H6qq z7=nlIz5%bl`%$Cz#oAVYoUz9?`WOKKp)&Mg^=L=cuO>CL!~ms;hyhTHh=>yJHL?&Mcl&`+Ug1| z1Hez)fXibFOaBEB{TvPNQB`cB1YAed}#qRNdTK3e}IZUdbd%# z7YGD!%{ABHg%@5(J5RLZsbuu%(YWTCYvA|$@ys*N?DVru)5N{ET!j~2pN#T~P^0z9 zD%gy+S6$uc%Yd};sm=tbuB)k#=twXDB7j&jVj=^GK}zoF-rWrzG_s=bjn~tdK*iJ_ z`#`c-#^EEkNz36Z@qGYXC?OO`nTo?fyn+K|QlV!iaC#{)B?1&QUB4R(e+(OSMU+UP zJ&{3m;hqeiZWc4cWQIrQ8GZ(DhMAQg*mT6z=R~H>olsX5?f&on)va#4B@CMdNNGM& z!bElA2jftjR3cg&RS&LP9kI1*vF7%FHl)?{!teK^XV0Fg?| zB?6IADgbJ&tCdmFLCJ{7lrZGtoD|mxnog2=f`bkay?>fpYiniezn?m8%XN>A);!s{ z1hW};J-M1~X2bDh=u-Eaw$GbkXBy<|qG4k*0c#+`ui1ny4dC8;8T)(#6T~kF(aRZ3 zKlg02bkpNCc)Xd%&^^z%EmYmG6ZhU0{z55tiDy%7lb5s5@WL|C_BGfq4IYAj#1 z7U4*Aw_jhzfrp~kJA2Z?v2y(n)Tl_9^9_%sdmwy%4lQW7{>-A=UmaEa@LSi_D$khe_2c(T z&5qr4g7A=J29cJS@fG6;JzkE?IT>a`noxjiB?3qw~FH|a8< zE>uM#s`ErpExz|_KUuA?MRVJ(PD?& z#f}{+l`LLi85N;eG!!jY<#9BN+pvChpnod?M*?!6q_%yqN!8k>K=|!kjy`RfFA~#@ zXr5s*&C8_EuL)m}yWY&mqUETFqkOG}jvHKHT4i3veGdCzlalRH zAmBy@=-j_8uIsFsVQ|CCrQfe9Zw4c8ru+N)c54p0;E7r(AvsqAR;^mfjDUwAJfMW@ zE=v$Ug95A4?`?Y(Gu4QRoJYeBI3lN+=#@>3Rc+YvcUnSCzwFxK<*>hhnj-wzWfXr z#UO|CKrwV3%?uKT*CYLY4u1xRkx51I7Av})@O)kQVEZj!u}lkOd7y;JNaz69nBp7& zPXx)Q%H();i~LBW;;z&vDc8k})&hS7y|B=q<$j8(iN*QVDw21E+c}O z7_zivuZ~L<^;0cbAo*{#_~t657f|HdGF)cQ>C!qEHKd=m&pq%#;FyCJNW=;i#R^@D z7RR+%iED?-Z7os(vLjmq@iwivO){ycnP|Pk*EyET^X$>Mf_AbyH~G*08}Q= ztUS+v<(Hkkw@0Tz_Aze`%?AT5Dq` z>C9PaGXP5FRAf96%#~~0m#Oz(xT>gTo$JoM`q=2~C7n6<<`Oe=iFvYh*OSRbAfTzB zAFl58hYSOm`5LGX!_b2n&^$S-?A`IG#J<4*DhI;}5P?GT z*f#m~y*)zP#r0R5kJ42?W5|F$O`TF8F(wKybRE}SejZLZYRr!BcN|0(E!^9~1R$Z$ zNu)}vbtUm#B)q$mV2o6P3251Q`u_8l6xS@Z>c}%sb=GZb!=`?4c&Tjpl{NXbl+ z%Yown1d{rm8ds3q z8mM9dV4NfgPq#k2`#T?&rxlSBOZp#i2EuN0ri@%6^;|)oEXF*U1JuVtn7z$do6OyLxu%(;p5j zeeu7i)hyoS)z>%r`t;|J%tH_wDW*|E+fSs@W`5LK?^9AFtOrXbHr}59E3dqQ(@s0B z!LxKA5Wut5;kXWLR*n#W*Xei@^I7dGn6ODT~D@< zo*Z{WNt;yz#^0}MXklAUy0WC6 zkMDLj4?FBI1OfrP|Ni?8F7xcO&*HrE&PzMjpHaslD-1_l^Xh07N_h z7-36S25QZ9-KRTRwjqpwN4Q#ml##(;W(rS6)|!zM|5cOtgQE@(x4yn^;>T_hKLD({ z;mSrK{y-pr@#DwWB7V+!EdsB^q)C%%T^l}lf2^8675Y9%`~cuM4nBGNX$1VfdhaRy z_RGCJ<Lp{ikNp39{- zTZ5jdDQ|`buiqzy#}v7SCzhc>%N4+IhVP8MwllDIya8_opgDvkV>w!9ans1uJrp$j zai5n%4`>Kv=;X`RJQ>-`x*T(pTU3(ft8I4eYW4c+`yx2-FbKUS@nbiM9|SBp=Qt>L z_v7>5c;k(@;)*M3oxl0!oAKa-57t@cr=NaGJ05$;2u%C$O9+L+d*bcvGAzqRhxTpo z-%qC2d0i=q++$DKXSTpB_QFh2qOr<}wK7 zA3ms<6e&PS#UMG9MAFKL3rMn}%8oFF0;SM=(_Wd5_YOZ+AmAVd?8m(oZ8SrfrpGmW zLivIkGBb!7IZT?(Hc!0kl#2gOJ*;|Bk=x7}xMtI48H#!nuDo1JnD(X-Kh?SBZwT=N zD4F&d7M=dL-R@@h?%lCw%^JjF>1*{HZ@du?J@gPFksSxk>({G0W>0+=u||+a_5{3M z5BeN*fOE$|;)I-pc>9}eTef0u)+#je?3?_C5;7HML_TpON*@~miI7*oQEJmJeMrJmVnZ@A=>bfUjaMS0B z>Sj>-bhP0DbG;14zv^*mZaVBa22ed^*Llqe=q)n5e%)gS43FdW3g-0-(lSYE*}@ED zE+2T(jWw(2{oRaBAl)Qzom4U<7u6vC-`>W~G66lWCGYzD8)=8tT9eAo9$j)G7 zW^*#L8O$swZ;-?E5lk;pj*&&V8d~NF{Ia>qNN5i&llB|~s3d+mn6Sw&{KZ^DOfz6) zct~n~U3r5{c{4b9vX=EZev-26v@gHYv(In!blFcMu!Pv3GV-a4&0nW!?@kauF<|M1 zXD4+anDv&W5l8UulV4+jk&Sm!m>NX&IlV7pA9<`$tMo_)+XiVGr&H>^TPT z4hR^<5bnf%z6_xoS-M~MngWK8lNkVv3{GZN`Fr2=wpOigSG{P~_T4{C%Mn|$Ja_YL{~63-WOFjJh|Ek5BZFH;knw;|*Zroc3>~4i z0_%D+s4;uYTzJng00lzJ0~pqN80=<(R8Zr#VG<8|HCGQXsb>nMXCY+gZn)s4wEeHl z!^ei({Ok58EY~1#jV0FnRpz}3bxrzU?E>+GfY9&1?2+MU2zqqsu(zAATR3pYfI82I z7yY)+ZUxqd`k6qb*>I(MDLCS`=s9_6jD$$z-rF91c7J=trk14iZ03q=A|sQN5!9s_ z&>Y>%ynZ8~d^$8ufU+4XKv1H|mjX@802F}f2PMW(wPa}5g=b2S=92-#gxABB?&q!% zFp z*gR+u9_!c<0C3LuwI+CBJ5q;w_QWsOrVU{0Wdt?l^&1hxr^mC69J7r;Nehm^u?%SXu=7pJ z00_WA-x5AKmSKO!jPh(DdC(x;@DMycu8aU9GlMfvX4#AX?HgONvVB#{nCd-q&K4rg z1PLu++s_yjC4zPWKuwkDE)qWgSev&Zx_Wt2k9VDTwsU8+&~;2~-W&jM$Mu*0Va5MS z#NrmNz5Lu-=cB8a|KTKnO4P>$5`U6Gq!lrMxWC^ZYIEZqwYG1TjXvo}MrI}{J&VK0 zVZUY!6+MMcn&EQ|L$`G=S7v}o zBZDcCg)nkAUV8gk)r|LX>>`wRlplTmvakjTZIGW2OA;s*g`KYr7sL$N&^nVayY zGdV{F=UBLS88#Pe!;%$iFn8e+tXQ+YLE*voB}gf8=*VHU&PP`*`@=E-pl&9RvLdWf zMl)r*y!90~xJJ7UX(p_(CChTQ-0`0QLic8p(z6(unVdX9;c5XUbuTB)G(>X^8-;+c z3j;bPBAYkSe9**UZiuj^J0VZ-EK}1&+|&uWm$=u@r5+S8GKD8IxbCb;M^-P@_RhPu z87?X;yx_L;L`k4y?WRrluW=dZ1JKN~WjJha<*a03E=Q85uY( zCl{}6Ex_W;AXfbR>2`y8?rZ4Qr2}%ZGEh`fl|aSXvgr@a0DzQjV2yK0ze2?TNFpMp z99Q(7Iy*L}ORl&2y<7kDbpMP)M{Y8P^t2e;+@CKT?$?+!JeuzFYDy0<7#RdTv;5tuJ<31*CZ#d* z^w=-f;@pd@L?j=sk*coouY>rjy_8)=d~+dUt5@uD`G%skuH&(e9nng!ie+L|7xk6G z$vHWAp-UIUM~uMaUcGQuehYlrzd!5^oAK$??{?v-dk?nl;Po0_f=+SKF4nehfod7- zRC*95e*;8dObY~g?=OC=W&E(>gmaGMx;KNMXED+aP&HZyh2?;)l6nbLzCMuwh~@7s9QT`8Yi=JCj0 zGiDV4!XU+T0^>*#ze>gNODBFsw43{;p?N3{*aI6og71`Wbn-MUrlLKPFZ zqGd}=$jeLjomUD4P#8L}?;dGqV?ilZD?FJ~QTB(I04kCA?o|3ZH04HIDcUjS>pO@A z4;Y!YHK=TxR-by|C}sqLT6$oTtguj=+cd0IuiPTMwSB_ zp8-^w;vGJSVgJ4?OV1UW2X;wDiu?wC!gI)mNW@W z2XPJ%ha#quIr?gg`D(XU#!Lscy#8FH4?|suRr6>Z*Q^;PHgAsRNo~KS6i!&Or1r)J zV>o=l0!%#fBxGe&CEEO>=mgw4!ifJdTD}uVV*yo6Ah|ujpcw1%&KDMm^c8pc=U;a$ ze&OByi1bXRj0`6A3?ehgmF_ofpJ`ZR2$mu5v(bE1R9qCC;-1P!n`gFQNgrr zx^RVGXO7ntQuhMF&!J~9sb?@xMzG|i_eNG0H9B;(vyMJaLNNo1C)WL7m0>$-j&rqx z-5e1H6o3BT#vRpqaNvRkRRpdSE^N^PD+Ue(To-NU%z;!2cT`XP%{j&{T!3|X*?9ck zo8Y)Egy8t`=XvNf@Nf)0{8W57eFi)pbDv}gM1*B4*6i(OG;JU2QVIeoNtK8tEQJ{7 z`+YdA*4E&LYi=DWvYPp!v`m7Q$zcQunqMjSnC>%ux~m(_^Eg`fV8H&=*j9p#%K!*K zZwchKV{qGXllwK@_34Jvyv#NI8ax4#Mh4e>87oJga&mRmX3sCC6~I;o0~ZNnAF6KV z+o(#v>Zq7Azfp%^dsq~S;P1>e7*Ni6N!{%vtNtz40nk02CvX?Z=SQk?95#x?$?3t9c{|uV99sDLu%f zo)Me*Tl>h|-#S$m%|8CbkjTo>39K@6PujXanc=nepf>_4=Ki$%mFxswEGU5IhaZsl z(@(IK0yxLFWo7Va8veau1J20HLxtlY$T_y!HU{?Vh3u>h0D!J(c=hcMYWJZcjG424 z!QW230RC3}aLDn0$A6xF6{Ter@cVt>ylHoPg%I$1O!$KVIF5_omn_GBKm8i_KlTD9 zfBa?oy}^t>9|u5P-(yXEK*DLQ&(v9QW}0au5S}@!b@|8NbY@b^Bxo6o8$peXfN;G& zjd@H`hOU{-1xm9yrVVCLtkHAPQkWJ03cmggSV7yf~C9!VL)*~AP!1(vW|6s<20KzV9B}TQTX4t8g&?U zgdpd*wQXBWYSjvx;&HT|JsT(FlLkL4zj-r^I$$uypLisWK716yk!YhB8F@S=R<2%$DW6Qm%-O$S`O39e zv1T1CYy0lL-flh7|Hp-UJXheJf+D2F5l9>-laWG6rKDT%%2QZ_bpxe zl2x>+&|#4+QpL7dEVR{;p<-JLmBrlha9O-O26MTM%y*r}QU^As1V9*;Mc}QtX=V$G zdJSkElf(2u8UZHtAcK)n`pO6URT4h{w7l|~GT71pSk;yvv84Mj)wAwz955ZI`1yy% zt#k({9Xb?c2ONM&ty)1Th0~WUg97kHX(=MZhvWB92vf_-0Hx5;H1S2xo)|Ok0vNgu z+qQAzl^5*P^EMZ3!<&;o!7-;_gkbwYc;fjt!P&0AcGEEM)$|z{GUgO?8}c_?cl(3* z;InC1v~1-Li5~!bJ^NKA$og}lmXT0O3IHiaAmS}Ayi|F6^hz5Ax4gnwbH-%{0$K)F zdXPa62r~VGn_ez;lOsd(1(<-*oFP1tCBl;Iesdd#q!a+;Gb|Y?c#HisKbam6<@gLY zkjbQxt1EwV#(XVwPj=pK*?lIdSX>7H9tg<6o68DhMIyQnz(m5oKcP8ks&#*=^BV9& z?w(Pe_4InNaL^z?O00`U@%pxHxS?7i(2>C)zU|W|IiA(ttfqmcPsh67rXedMnA})m zc}^0SifltHf$=uhD}=<+!n*o@!dzSpjVHs4Nmr{34tXmR^znuug0RKD|dMu zx;*>>^2Sg2Q!|0u5rq^KNF`H(Nu{K+wybyN?cdQ;y&Q3_`fU95HCNc1T|_rK2yKxp zS`b&^B8SS$Vp@5qG`ul}=44^XWEVZw$=%%yDNDtH*k6RdW*r`~# zdR>Fs&Kbk~kG+6?2OYm##18-&BMyO1Qg>)xKh=~;FEd?k!t*zx?=9kTIVjk z^wLIu4v-+`X9@~XQAZLFP6SAa3fIMi<;&4#_H59PKO*DTUvS`^*W#H6Zbsa)>a5ps zT`XL(49l0UK>Ic=v1a{7O#ko|ew zqE>=L1|uWDnGs+P_j70-)9@MOVH)LkV_1~QQR?6AWx(z+00p1|1Po%>+=_YQrlvE$ zPOfQkW_Y0tKj)?&(1Tm9y7NFtnHrK#Pd-5xN6fcMYpG0(>!oH_$?d;7(=!Y31$G`@%wK^c==2mJ$4jqyMFuskG`0W=UgxOn3Jf8o)mU&ZbBKMq6J@#3R*qj<$nc=yGJk(-@`c-#W9`UhAD zj{XOqh@a>FR_FDh1N)$3yVfvt9Y-9R;O)Z(^-GLz9d-%a9|RB7A2$3?hnic1)g6Wi zB+G5l^@X=!c$w0@g7g4fo`H&3X3?wfr|kWi*DJICcB~6+Za1~1Xj=g z3NJl&_jVO`6E3|8%T}(b^V*b`AHi4ezkqn$!iI&@v2pWOeDc;)`0nFZ0RWHOT`Qy` z+Dy6$>Q65ISI2gj0*VMkENj$ZD(9FJYrTZ^=Uy|42~U8a2f5S&f*C&M8XhkNbg!17 zp_p?lqRLSCyV1tofdqj@a%}D={N83}z{&A(9>~z#K#pMkX3RD7HO-&D;qNydT{`)b zK9$9KeDHZuaL9q26gMif_tvTSYl3xuB}4}BonJu7Dv^BLxN&&iJVKeC&Ai?cD={b8OsFfH$9c0Czq3G`t=YZCd5y%nPqg zt8?he5V-e$NCHSAeQQu9yjN60AqYt6l$W}*yEgOGEZ61pH{US^bXn$7WRru)7Rka} zUX^qG| zo}F#Rp93|P0x2_LfB;4!Ba3xHFaKRk@EV zr62^ybFaRO99?BpTiq56?(S~IU0U3o7A+L_V#VDdxI=L%t{+m|-Dz=$;_edM;a%QZ z{0J*yk=&ef_Uzd+bAc@m#*)nraQLuV=rhb5H?QsP_6=Uoec`)Z9KCS~HSAEi@-sts3|{)wI0#@WPP%i&GiLFiIa_XM|K%Ts|z+@z7!#lP)XKqNcP-v9#UF zoI!z61L5KQ@fY;EC_Pa3kQ1@)08wGFOIL^2XS;t0Id=-KnVk3Dcl2PSqHtOs6(nJq zv48&V`abT#wdpf6vA!Y{5_u|LMQW8?PG?0L=H2xOViVbt2}5JA=vMyG*vH(w zuwA3L>Q?*FgPVw}8=~Zp>H^g^2&#lJcBGeBcVk)BkRS?WOEY#LG$?kVFb&N)F1A1R zRW7kDbN4Z}^n}FRJ*!CI^Z)i?VK~2>E5-*}_PnOW*2h)wOz@ zVz%89cHUiwu^Jn8)=EAj>O-W|BjIz^Gt#_q;>dvpW4&Onz>L#m`{n7Ce#K)>)U8Fo z(UgXs8E1DFFMMztF^s19SrYh-C;)4e<5Oss3q6*f3k9T++Tk) zfY!YbvjjMkeyr5KWDtdoQ+`2T9m#!a#`Sa8^>n+iJ}=^V>xT=JlmR73N#K9~3r146 z2+pDNB_hULul{tZ_W`>n5>Jr=??1X$H=C|LZcti4J2PoZ`47 zNIznQXT$r(K+KyA)FHOJE!Q^%9(h*Wp>p3 z1M6hbS3x1CJG7XD*Cu2t4_X26bSf-A zv^1=1ItN~&FZ+u>O=SE1tr_8M!(|MwyR_w``F5m}ry>uzBh(rl)U0adtJquuXGI}b zfO0=Vi4RhX+hH%H6_6NZ{7pME`*O!c`~1tkUDWn;eXI9#pMrRGQirG<)W=a@RoV8g zV)1_%Gt;rUjW!X_&(AXcO5NvutP6V4%P+w6V zv_-4NtM$+TQiIUHH@obm%TdyU zYD7>RHic>(j_?t2=o8Ntc@X!iq{3Cg?6Zy=O2N+D9efG7QAXJ*>z!1(NuavPsUhQ| zCc4;ej&L$Ti_f=K6o=#a-!M#Zg#{Qm6M4QG*)aNV;`qyL!-KaQr=_>~O@ z=xXpH&i$|Fl#*#cquVbzwa?ZJh^}MKa|tnlHEV`%q*MmFVRc6v+)8+p9fi%BIy)cr zs*D|`16xGU?}_&8S4vmGS*D=%04QVZ-&g4)9TE;X=ya%Ry)Z=&X(pYlO+xiux>yRV zKVT5ZaZ_v3;HC9cf2>z2X|41>(~UGEg! z=T>WNR@A_~?NN>hlpqvEcN88pIQ*g4C+=pn9C?y)5H1Y5jchpKm)?mn!Udtx*^nLb zN*?xj$Yr!m!NIQkbghJ&@69SQv@+dwVTZ{zFkwUID;lucS5QzOE;^Ha^Q95--zRGJ zPKS`-q?nmLBgt-!9CE9CQ=Qsy0yg*x$6EsENZeOVOd~;j(5wAUzTW(UF@w=RDEe## z1prI8J18bPf8`A{pyCl7sx?RTF$xL_I}3)TL@I~JmUs~2E)Je-hpyyk!KP!}+g0<} zt|MrypSSz-o5k4e=)_@c1LO!-EztCGyK@p3j0XO?#0P6g_Ljzho|@?nU-*2b=t-bR ziUIQ2s39P65ydh-ZAF7L*uJI0RtwJ}f6&=wMU?(BNS5uoQ`2D6Qs7K*&EuqV0K2yv z?U`0UL|u7E#KG_6i+V5&5$nsS#zD;`pwhMQf;XkMLzXG7)U)HDZ3pjBVRznWu8P!p zMLb8bMKLU66=I)tE{@cR{;Y;_7zP+%p_{E`%LR8HzwD=F5uD_v8Zi*MuqENz!^Ty; z2lS0N4)nT@AdYsyTVvC&PUQln?c8CNEf5Xd+HSh0b*ZYx3fCt+pAqpdL@oC#zA9WJRxuyKyghCaK;G7ce{bIwY!{;?mG1@5p1Vqjr5OBi`&mg!vRrV# zRjq>2exbN|beS!CoX=QUI_~}RZaefB`>&siNFK)+TWCMnv7r_&`FyVr2Sl2vju z>5~1bnr4d&cMdTciw-?mTJeoJ1H(ro>@;BVMQmPv5aYUf~eY?|QWfU7UA$Qj|{v^MNm*6dT zAi(RBk%NlP9Mm(G8yak2O$lQu{)Z!tv5t>2c<@V1+sbz}4>=?Z&b?Ka8Q;G0R7=l? zIV`zC^EY+7uA{}iI#CrtWR8a~I03bg*Jo`u#jLCN!K6UT2bT|3&_u7+-exLW- z3n@Phdg$Z!2d=e||4K2x*dftTzd4crG2$P}(ff?7E z2ZDgO&l3up8xGOM7xyHT`n2tsCqM0K654~u8xfrPON6G;!;=Z6FlAu{4V|PCF`8DG z{HXfD-Yapv74y+`oZNdJ=$C7To)*-BT2zt^;bqZj#cu5+gEu0)KU*gHBXl3$vAQFQ z`hy=uQ+hywaCEWK((^F6p%8pO+(7onn7lHW@dG!}43DzFkMTJd|H1<808nduYOGxLc9Ih-qWR=+T?gD{o;SYh7AcNr)0tS zCoSqmB)kORE73R!$OabDLTsGKTk)Fr))XPN8Wo?VoMib6idY6uX6;YK(JWXFWK`lZ zAz?3pk0VJP51zb(A2D)&edmVBMB?7rXK>`hw^77gb4wG0`2fP?OH(FZiPsBnE|zqX z#Z=z6l>J#v++bHM&v-d|3e{5X(7Xq~zo}YFObYIj~B=ypYDE!kE-0a;>zI%J! zs;Ts=vtEcsbX4CWU@sw>y~#VPok9V7Yd_l)dyic&Ved?rY!}a1C2ZXP_nSM8#>j5) z5MIDV=C)GV$1*P5TS03St_Y+=J+8Dq*F=Pn1y25-=_|hF6w4N%NJP;Jx*cm4qj*dO zoSh>98as}n^upl3u5nZ}HA%N!{|<3Xn22$ZPW{zxtKyGMt43e{T8!vN$2T!^xcpYV zgnYz*b-b|+AKYrwGhhsP_4Ud%(xs~RvLU0MVrV}Vd>H__;eAXB`0Mdc3OU-_hvhEm zqQM1pjAHQbvW)x`CZFR}8>yS)8op%h#}9@g$YUGDsax?z?5Pe7 zZsctFG6N%PSc(47pam!iajW(+14V_?olb7~h3W3&EOLxSx`7_;Gfa}%)t-M>?l;Kf zR>`_Zwx^JQc-oGW{-WND4Th|C8q_MH`$84M;>AMs#~@Enuyx~j%NS2gGkP&eKhM{A zb9|xaFAB?j++2lC6R(logpAcXTW7eAQs*!? z<$ISCm@9>X{1mQgu6ViL&y%7K4!?<{2e)Nx&Zf=3IFWro9S_-aVDrKK4(@^2&k8Et zaD!9Dx-FskT0U8*#czCB*yIXg%vJ#n79EC4n485vM^zz~YGu;9u@f@6bC$W=RYko0 zT`Lnl_%AUrtL5%d2Te_Z)T?*h@!x|*G3N&=KA;EYUAy6Ur0}5@dhiuX*B4J;g)}+t zFZ8wJ@=#SfjXetFH2C~exEDN?aWR8VOQ(FiOkX#-&>q@)(i5G3Tek&)Hvu|7)zGhJ z@)PTYa~x?!`2$v7{;(3H_Zu)yzXT}tk9ye_Bcv5k?f`cVI z0uMZD1#ghb3+jdqh(r;7D%$LTm_Uty32Vd^R%K$mb zx{Y>8rG|PEcK61~!j{uQM zTH}%I!t*lpule+q{wN8SWqB~8f#gTlex~t2IQnRb3jzuWnch-w3eO#^Yru^@sR#Q3#(w}>9%T-Av9_BxW|p#8HpTe-4? zXoD%meZF631e{Q^F03#yimkv2qhM)NJQ+c6>DbbM@)^uXnPeV69`R4jfv#C5+8VXj z$OxX(*rxL)Aa5?}{`R;CWb)TaM1Qpj0|IKZv_87Knh=d^TJtKG&uMa);zF!(9}8d| zk-0MGw@h9q6{8+q0F>WT#dnrI&jY-Kob~=4W;tGmw&BF6M%Ko?$*pWiVhgS;+O?$S zPi|;-6o=iHpC>LJmGIZ9nw0hPAuyE2+TIYEJ86;{pW_bVv(v$=mgAf> z5|TZ|{k$8>Ts!R75pXc0FbpBL&H}li_tpIK{q&7CYQ}i@aUe<$>6RFZ#Q1AlH^@os z!0IP@7D;i>-z{iNfkX*O~7Od*iCeH_%D1t<{iX zX>QxaAPJVUy3UW^9Z+#r8}~FA1GUN49H#R=dTy($gdTtX{)ZTb6*1_r*h2%kNg@Ca zZSC@thE$~ryhrQ9%Q+A>R^X3Ef#%qtU9+hyoWHax_fu_Xt*(Gm$u--5JBAkmSa`Z$ z@5x3jSye9QhK$-MEL^Mdl$cbFq+r#I`uVLr=RP)2vxatMPNm>-1NneklieM9Num5E zP@zSx%+SZ?Amr}wZSWjjB2$oj6v~!_Y2>ldDA**l?KcnWU)>P^{L==3diX2bo`v*$|E|wSL>{(=lAL)Ff;euLiTIB5k2$Q@ zpp!I%#iTrT{w-`S`*X}H+0+O7y%hD_WqX*s82^=xAr9&7mC*CK7|?Rsn@Z!&r#RW_ z6}9Bb&miw*6j1mu<49}o_&U&Fo)W3tb>7$RC%z#t!=sqmub4gX6Nk!WLWvJy&Ir0< z4Zm6~aN@Ig7N?Q`y)-drF(;$TV6egE_)u0E0mS8eSAyF3IZ^%j9A!{+F3*iqaef?F zckhZ`5cuT8X6358FYRvm+`A%9D!7RGTfy>A8V-kRd5_nIJ7V>-($qBxV@GPG!0lEB z7N(vIR}$cx-e_gZpCYX6eDHhb*mS%p6ZkIO?Z@6v|dWw9Yl| ztKGQ6SmFRwp7Y<3k&k(V`wV-i2hv6jA&^$0ZZb-izebcCx>lr8f#M6z*aEmjg+w|R z<>#k{9pO{?a2omF`0_ifo)hO|i|zaNbNsX2eC{{Hwx>zn>{FeuZ81L1gfkX#+$LRd zLVhOJ_-&`GmOZsBto8Zz#YtS9(fs`9hfxTH(%m9rK(>jpCL0Vbf?>~xgST$Yu}c7bm_?$a&An6j$W46rwdR9 zOgO(}wZ2447RbhhZu1d}`U&lkEy6g%yMv=oDV027me*$g6E-e8A_@)%&F>X2|A4cq zxZn6y`Grxx<;!+|%lAx48fa!JEuG&6bH#`$*Gq?LN^0`vT!Tn@KSw^&wTu(ZY%?#I zsk2XSwWIVotPZF7&)v_9h~LdU&ex-ERMd@^U9}q%YPH#sJ;n*-sb&S4`@gW+z1|f- z8i>HoY%O{6PxC6ze#3;LHr881_`&&c>+5G7{Q;2kE}s9^`p^YgPVZ-wMF-M2O(y|| z?x|=HqJ8@Xd}L%~cN8*5T>-{>QCG4;N=rw?th+xkg*eCAJkQd?a0}c+Om%TY8?Q{v zQz`vkmN6HX-ALg|<#T`VAruK6h3AHI&h-5VMaS?Ltzw@THR(^I(=R$SVhQTr*u!#} zoraoSE8xO4KB5YarTc3HZmAqZ`wNFOO(_p^sN=DuY*lbZA*7c;&H6jJ^famr7txzU z#;<&}>bqd`>*Fz}`DmIz)$Z=@=1tT30M(FkcN0Zt!Z2dH;K5o8Oz-g?HE~>DBiUjj z+Jft*0um!$Qj$YaU=o|2ri22Lrh-(ys?F-RXn?@0X)$8{R-ql2T)wcG3KunF0|fZ; z3gZ0M-KF6s6f>6r{nI9z{9$9;`8Xa{T1cg!aQ}2I8<#2q2DHeH1j)tE`-W30v!o0A z+1}`x&IhgN#1VcYg-|aE9eIkjSiO+FZ9? z3SFPKQCvDXt6iY8j11CDv`3aa)r*yQ=ZL-X6G+H|4?#rW==?)pazvzjMGlydesrp@ zlrsIE8(^%>%kxe}#+~gh*5j%xAFah=PBRBh4mK3 z+ZF@K33Ozl(J6HqXDGwZtD{yeCX0V@Xu4jqO`u^k?OC^q*FPY}ggY|GXdHt(Y+h2= zc%K(*9hZCgf+`w24eQL&mKw_aDSU>L7@MDN{Wph{*THjAen`^3vn@db@^M5o)#D;PEKtT9@2H_P*z}8YC5t?YS* ze+yQ#Z+LkPqn>YIZxy=4mg2yn76i?KqK?txR$?0NR+{^sTHViM2cl-`_;Ikz$1+01 zgW!#UszWH`!Qpj#5|QKoN+gnF-*%&&64K(lzqNE+*(ceg7n!{(Ajzb$pN2$L?Qp?` zDsYW^?Q`YKXI7-;e0LLGrHfXltBm^WXB^~8-WFJ<7l<60i>M&KD}Y@2+ep@wL{rL- zWKr}q$ogei|Lu~r;Z5jQ7%~eUTcr`)E?&T#DlS{y&!-q&U&(6n^kxEMX46UGQCC=c zL~$wN04vx^4SGM&206QG?`v4X!}y&%Pw`*N1%uxg(*$q*EBQk+q&DQIhmRC}1C63U zK)Iv{O4^KaFwGP(ZD{F6^HQ*(-#-~EKaEGC(kKqH`EJ*}f)6}$YS2*_Jd!pM0@-`aQm00kO+<^7PhN=OvPUhXEL=WIG8 z4c@N#it73P@Yv(I)8F_xLU!vY(1+B^VE$ECpBi)^{6=kE|{EDkzF2w-FDyCVude-0+H<#}EaMiJe??zD~%NM6u~ zE&=4S2vYd$Vt;3qt8Z2{F|})}jd2nbPzW>X(JJ-e!Sb3;tn~D@RM<~ue_wUJp-2Y; z=TbTkq0V;@oG>BI=4p=dq7_sSNRb2?Gs22n~A!$chP;sJ{0oop_VP=x_0 zvz445%it$mjGv&Zd$-d6ujr+E>x;prg@W}-rErZ5kE0`} zfyZXZ>;>l#X%O$aC&g;mE7~!yot^rwQOT|CWQ{(v$B#m?CL5AG2Uw^s40;N0J`vw1 zMjPEvFjB$K*))!iaBuyKlIZ;t&i;~3d9o(A&mmfE#yFL2FXHcFDO7$N(oc4bVi#pO zkTDF=AZK_*MD?WP9?Lnmk|ix6Tl1j1{V;UJI=-P4R$ai?f861|+-OV4Yey;*O&Cx& zE`Ty+xtj52#1ZcQyiLLPHvG%lwsc-alKd^k3E1%Kh%?=D?B#Jd}E)S|DH`QO|%sQKg$!h(clfkgH0HU`AwwLnCi&d zk2oo*o`?q8<0^_>iQCb&5w|flkBhw}!-&|C$RS;I#~6}=89No=;H$w5Ek#QI`ksBt}V1UTLeq)YVm9r=pc_Dc~}pZ zG+(`C_eTCRq{Od!#P?96F0*b&(;temSL{ih@ssk4GUq!Bmvs0e-e;s8fmC?Kn3}h` zbGWQQN0$UD#O_K`a6ns#-|5HW$GWtp6@6+KE=xtqcI*E-M*cG7?MS}Ll$Aft!Ct{I zgJR0yGcL1i$>eR+3d^AbMN1F!TevW(@52nCo+iguW;l|am*@BKDvgS4&YzX4)JF1L z_a$ZNFQ)4fQQQ;ulfKbdu|%S%qIMpLG;s%Y`dbL#&OQO-+4aZb*f^ofKRS0iySqj5 zP@u_tX%rxfVEfsBEkrik_jk(GSfz=@7A8XxW`vaE)cTO=7`tJC$tvj=zXz;m$Y1Nl z))QGhuQeh>jbJ0~PlTrT=Or_cEmL<%g$Qo;c674yXJu;W?=U^lOGFvReMPATI>#&A z6GA~K?Cl(`LZ*YLEC%g_ZfHe6%D?@tHW@$`x?MEoyBg(w&pVha*IX#G2Y@)l z7pM^*e}Op$?pXvEFLi!;wYgH)x}EtrTo+$Sa8s`RdU3URzgV7-D;Gl|kAr0-)K-ws zU5lNiZRcDNKe_xA1RdcJ04oFHH2atF=db*+&-K%TWXQxsT7sTa5GD_z7pmp5kn!=? z2exT)F0|kZTi9&Ha2zC(%m8N~&#nJ2hqled<*b2@$>D@{k#C^dQ#CwC#4{4XIV9Ws zfhbM?p3u(wlBM4iZD#hf=2kjJ6?h^i?WRQWS11s5s$BXK=l=|&splx2wYyMZ5QFz? z*s;GEC8PgGbshr~Q&0RhTd=L*!9p7Xb-c@k=S?e`$4SeA<8X~>&5tp!;9ldMET?g$ z-*3q%QkqqklN~QlCEm>V`1twt^*m#2M)#0SkKJU=++%_F)Gi(Bw*dmfXa~ONPT!|| z)1lb^TM20$^c#NQ#R|T9xDW$E0{=T2zF6HTEL{9#YTQ_(nUvF~B!@xBcEy9>EF92C znJkLgWL?sEz-Sg1mgUKZaqLthO1zHj9f}F}rOIlve{6Q$sw#EE5KD0sj9W)z zoq1f^_%!US={s#8g_(G~)|IOb4N>^}EZq$Mv*`;(b4~HzOSgbbnkpA~#$km^xf|8Y zgH9@%XiS6s*B(KgzxYYE$2+hWRvyKOu@HM|%vb4ro~D??hgh$L8Ky*+BI-9m)vtN} zya%0)w#)h2b>>$4_$*o~B^MLIcPojDVKu<}E~?z!+ml$h(eYlIn*#DegZr?q1@Ccv zp0;f`8my-wl3yAVdBKT$-6<#@rF?c!l(263l+na#e>;e_wum)Jxc%(+tr6a-J3B6#KFml~frot<|TcU5PIyI>1Nk$UrUAa`z3FYUsL>bb8-4nY?D zhY#tynwcnS(Lo|0P+RM`hSGyxC?Vb<*+rEt2%`; z6*=4%nL4bbM|`o0B48hU*w;KHYd1JYhlvNMC94_0*lE5Q{&hU8Gm-n`87^wdV#g5# z?%h&*KF*e%Y`yD2bR!HlUqu%i$u5{Ip6Ib$eKM*)aHQlCL>GVcqq*4JpE)|2C?t79 zvp;@`UpC`&YD1O%R+7h1j<~t%z7B^)b-mmU-{mz8J}5IoYrV@2LN9YY1BzB3@NAab zS$-5-V6heB3o_Owqz@zPxRsFK=>r!R7l-{?d)X&UzUv7+$2a9CIWh_gRd8sZvH-!dags= zasxR$C6u02_aKLvbD~}qC0we!OeVlkZ{LP01{{UF1cfdoTcP4a4u|@}dc%x@Qj{~o ziwL4WXN?S_87&PzInI{G{2CZ^)LVI6)IQ+mGp2{U`_zIx@U5wm=S}( zj}alf$ioiKcXRWtejMfgY5!=1j~tMxr8YaDbpHGI@6Xtnq9Cs?V8#XP1wBSfLcs(E z9#C*_aEM`je?~_7M%cShDaHT5AfQWWYZC#1Z{dC~k44Ei5D}a*|E;^Q;q{)bX#dI{PU1=Ec3--vqor2@M`aq!OYa}KJ>FjUcZi2P&UC5X zibD}6UJlmH7;0Yh-oBr=LQ$(54m(!FwIgbbU1TlSLLJ-Dwf%O<`o?b8%)(-O`ZN0g z@DDhB?jbr0aUzeF&%g>#-L)A>0fgFP#6pm67`~mKk{l-e;iqgc&d$y?PP+h+ zw%PD5ayl{_josc@8lf{;4PA00pXj_~ixqjHPW$_3D)u;Ec0uWWLF27^`f6w{7D;Vp zKm^Y%N{-QFSc8Sn#KUTdm6Q2%Zc9>O8gg2HIL@#Mc()KX@&}Y4sNLRy)T=cmppv|5 z82tda)5zatz0~xF-e1d3V|f-iWEq_F$#9l(jul{*-4GLansJ=7ZWg>(Z~NnSw_@ui zlZ}snFWLS5Q|d-8&0}xltynH%k;9ia-D9PQhr{yJ(w>Q z2Bt?64nohf%+0T{VHusGbCbo2Bo&5+f}e6zvZ6MA!c09^piG`D_HC+zeuDMu(dxW* zKmK?2c)|dv9f#-rH+w_glRDrr$fKXmyC@9o`!3^s0pYKMe$zOnDX^mX9uEpQy>D$+ zypDf2@22P;{oV({2L`VXXQrAodB41E>IgjsAbk0RrO8S>o1TQY3bZ6)+i5YTNphuwUkc~x4y;&h(zcj(URxJA8y0bz+~ zI}qqJDHB+HR#0$jWt!o+*hy60`j@)idq}VvjpZ*$w*JaT(zNn)PY%!{u7J^IaUg`@ z(FPemh9Zh0!@_9Hb|LpZ3gcoV?S(|$9$0tQSZ_dpK>!pCd?Eki_0b$koyEi;6kxqk z$`W`#gOzoU7s7(j1^!#R4;=f&J5-@v2U&5R*aSlBzSQyl7wi9em6ImoD*(F>$n32q zkL1%0xa~}60n%-<;j4H1-Bha8zHo5_VBKO7xMJ{0Eh@NPE_GG-D%NWkr!H|x2R4f) z#iF8`zU3Xsek(ZFc7-^@u-~d>7;I|!~0HZoq4$CBI2p$ zKGW3Lc5N}Y)xh^=PG_Io@7`F??_t+<&40P{SX9wz(iKgb z*)Ooe3~G>^54J0gBnXl)&>&wieGtopfoQjaZ{EbVYc-MHl^;aSu`5^1Ad_TQyE(%QpbL*`*Z)26F1?Q0LHJyliCW4I?O)a=%L?^fS0-^H@M1}EH5G*J-k z=ah|fi|igOS<-+SK&RT=+^qVZ*@0=I#Qx_uyWg9iAW#HT`XLZX zbiQ&uiA$93gBuv=e@rg;M1EaT14{eP6QZ=6+JD3gp$fSFl6 zW>z9!XMB9x;t|fOGyjTU#$8M)7ms1%`%@)DR!#v=qhg;G)CkLi#!&Z144l+Q$VXob z+&P4KSqX{eLw(uCTSEsPvFjuWEHr+WpAf*X*&nG>9`p=#twtCX6O=w@mjnPqfMs z+vO!C=|nokvIhLF%}^3xHuZjNy*KGcv!#SwA8LNhlqgeF7~5Ddj%~#s0Un{Q}H+h>ONE^3N&{@QGnk%;u~%aO2MPK5ezuzu9-a ze5&kvebm|K-+xcOXJTT40HM^ml40nJtqsFp+#wr13~X#lr^l(uA6J$t=~CGABM~Tk zFx~b1i3D61YxZfdHlNa+AvaCjoDOf<4QU}(g!guPq|t=a6c^2K7$Z{5UXO1mT*K@7et=dqQ!l-zwLg)c5>Yvr| z%arV0-#atPSMQ$aG#f112a`t|{2vjwIgdh?vgnJ;(gp82&*)GmWA%@@GM#<5(5VL> zk!V6rAOf_sBs&to9wNJMT|nu#%m@WyaRg%i%l3P;dQVP#Z`Ihlo)f+e{fVc!*iAL; zt*y|Xe_L_rLpzu*C9_MbH?`oR?%jzi*{V()m;PpsY1r}R^V|E(``Q!W6}D2W*#gy& zqn(AWF59eB^LZ4FjvJ{#NCeJ|v;fip@G+;^FfOoSYf?&G6!#f-b-)tk+qbhyF9|rTo`p zqxAy1w6wIxPP}Y4VIR=BP7ASwp^<#EfB6_;X2Ah$gB8aYv(m*d*MM*poo}(5vYDZ- zB%cbrQ_<6|ZoI22TvlhUDJ(XZmR~XMo~^N6g!7WvSeRryr4eN=)51BVK29vE{Ib<08R;NzD_r$Vkz zY)g4m{V{O5)b2}l-H0#NUru13Un2YNB5wTje^v$#>6*>!s;k%Q-n3Nej+EQlQ;Uj< zo;KIl7 z2H;gv2u+PWmNQbOT#J;Fl@&1zSS#J2b*-YbjHO$}*L58Bv zUk5zyi>AQnax{gl%bN-*)?3UE>7$UW22{kh_3J$$eKTr@S4}9AITn4%OY~SzBy>D_I zAc=`Cdoj~)$Z7E^QK3^OqR7Re2=kR*G$)cvN{WHGyc)GdaeXrwt0@Vn zHp@Mw`}#5O5dJ*^s9REL@F$cn1hBsY^>-hq-7+Jk*gIlO&j9jstk{shxE zW3K?zbX3(sN|VeaIuMcxtP^vumHonUTMn8!{qu(mEebJ#YDkjgj7fv&=f-!Vow! zo(aCASMJG|j#AOliNvCjFLkI zb9j?6UlFW7!N((W`i7sO{LAy-+CP?U#J+ua<{LF%V7?q zQ9$G5Py0z&-|WWiDbZqkaVG3zgs}ftqkrcloM&J`s1J=zM^2urL{bG)@V~mxkhD^g z6JWp0*g)9CTyfSF-f2>RD3MNO(|?DNMQPAKwO)mQI}|j(+%5yjxDbH3Dga(kdJGg# z`rMA0US0@1lg^>$jZR9KGh`7$Tn2q3%rgI|zkge}%uDk}|#%&g>p-4X2$myD( z5%VCvS6@3jyT{7})ppkb>keCO^~!dVK3&bqCY8s~pq`%^*xe|*up?A>$ceS9-bdo-Cl*4mQ?v0dvS z-8=ma;P;`QRFaU*FpB)@YRsV=Cpw{YR*u(tZV1rp&&ogRHrYv2Vv70siNpdO>5BJx z$NK~=N$q{~%hvVmB=q)t^)4TICs(xVus_i?NMtY;^^`M;X@--4Con$Debf*D52uMp z{fA2T8HrkX7Av+e1@!#@dAdl(G1s1QB@&rMpg`dZDSspHc-!qC(cncxG6lx_XS&`z zLVQ-8`sJHb6oqb}G2VWUFb8S? zmvY~Mei~qZK3hE_pb~wd!jb!OwzHAJ-vWqT-Y2sj8XfFbGz(7%NO17Tog zx@(;Qhl$pY$vs@x(A5B%3EDL1!IX8?A|q6WG-KMb?C2OkE{V3V<4WE2+478Ly$ zjSorwi)CWwLelrOmkK=JXrT^T0~6GfYyU$cf`U3e>mtE(#%9-9fD?H=9j|YG_WuAd zzM@(U=Ire3>oH5%?^C*1fusMDwycy3+|PsKB*(&s(0UeYOx;^Y-*Gz-)@<~6eF&)0 zqqCMY z`r*H(&_f##k@x|Q!w!~f9q(Jz^zo8%>Ji(4-|u2Ekm|; zNH353Jdnd#`;D#ZG_Mm;R4~ZxbjcVHgaShoiMQ96_v6S12nTQbpl^c_h0odxNQKlY z$LBcR&sNkcds~67fp4F&pje9~6hMX8UC);&@1J^W%Y>mw&2CFu8>vKOhG+A}YpTuN zUe9Gp8tsRLJ~lY=pDh+G?tHWQ&0Z@sVimkJoZP3cu%)@*sd0!b6b36?Xmb-NvCDp3 z+CS%lb=Q4yHsP+IK(Dz7?jpYECR3tkCx#K(a|tb{*(;kagY~w zq_JkZRFA~F;vfkKPTzZEqhhIG;6;49MOs;wM5d+TW6_)r<1?2+XNazBFl0?|=@}By zQ2%-H9(IC6DjOe!nAl0-ObnX8Fex%hXUeN5f;=cUK!ucvUO~9TaYzoL)mukQ7m!U} z_UEsdq9B*!uXqc7+k>HSe=Qk+QgN~O%iiSq{z7pr?rL1HYCL?PFAQS{5F)qqUA}MF z#QJi@U!Szv+*pD6%DYIJhMOD5(C0#0C;T=mL=733x9DY!OL1F_2Oqb-^L0n8Pr&ZR z2?+@)bq+P2Rd86+`cD}{YLnwXPbn%?%F@uX)BoC~1B8UApfHovE7bx&<299~fHL6o z3;*UyG-#Q{goV(PqY%lTIK~NEQHI8x)hG+xpCAjk+NVG2r^1Y#y-ywnBIvWj0sW2L z0>8PtQ3hSM*HNiJ)yLrby4u=CW-eZMue-CD$Vgo#ce|7ZlzaGw%&=M1joE`@C5c?E(e~-8PMQi?dCY8fFeoafZX?Kt%{p<}ku(m^OBa z2)>c+3jNm)AoYJAUMf*c2cv=eqfCfAvAhGD%fIy7fC6`gvF0(9#IF1K;p({k76_HM zU3lAAG>sborfiuR=|raCG6lfT{o8G&pitz|X|{KXjk0~PL6JhTU7lPGbYw1N;3>VE z7%cNAb*XA_4w*ErxVTh29VM9+RG~W}(xGjg>u|?9#fV+)_e2}ZK(B22t?{+=tgNi3 zaqo4f*n9?~Xet13M05UEhTOCq^Ze`s)L0sT8?kF5$tV_|;Q`cX8X7SFLc_xmT@EIp zI=pTq0EP{wOPK*vf1l$I>1jUy+Lds75Smyh2$4RIh$P@|u((+!*inITJ5q-$#Q}Z1 zhkxJC>2i7lHZ#*&8MME+)}ku*>EW;DBh@EP=vKGg-RF^@%ER!;25RPxjeH`IXeb7S zUk}>*aU7qNgnQZX-e*^sX0ramM_1QiP4(d>6}q03eBXB*b}M}0`QZ^b^xvB8?zVyQ zDha$hNj54qHMI>Fff0QtJX~BO07r{+eRn;YMPjlRF=U8@jvIn$S|*!hLqrO25`(`) z;y^~EgY|?WZAj$%A>~8}SLsZKD`2`29dM+l3Zt3Lp9zgfh{*pHwSOW!Y2%qIu)l=3 zd@rSW;7(}zh2rA_lp(8_dh`TY`y#4{c^%QZ@16d}4WN(oHPCPbCQ>pJ*}@~fZ#LsE zDweCQuIcle!$8N&3*0yprW5f6=o>KSYv>d+f}^8R0cAQYU1I4p?FgWAH$21f>jpzr zYq7{FDWN~S3ZAzI5g0JYn=YTaovf6nkPLu8KiuS{#MN7H5HQFqrthi{YguThsi`?0 zMm`5&tM2Ftk73ot20gUrB$PZ#K|x+oafOjhK4dy@DB?DYn?-|<^jI%IE+vUh97+y@ zI3WJd`1hm~uNk4Mz=Cb}+wAZ*;u_KPSvt2lAeP)Af^iVx(b(L|_CD*W)NgaR+>vj; zTl4lf@3>O|fTkF&2_NeK78cfGtE+X$;JXU~>0nJWxX!AasV|DX6H#$y_#-g@_j-W2 zSj^(0mXx&gyQU+VoSTsm2|&Vqk$B7w0OZXBXxe*#cNrE+2MQ0|I3W2xYvme(cnHZU zDh^(4X+3vV1>> zt4%?ZLCQ8%`7<3bN;WdZ%mfIxa|IS|x&tFTJCZUPF+T(liaE&SmZ^$M1XP>{G5@tA zTG^!FeSpeAz$9`#L)J-ML8yS#K1d_17%@9O%&Jx2FskX*=02eduqxCmA%}*!#8K=6;4#Gh=!lbJO`eSJjflrj-?v0EVoHo9B# zVnSKq&)q+@9 zey`6zUPq5Qd-mRI-Rq9^EYN&^%5+kSRZ4gTRn$!A%vxuC^eOH7r?E&S_s#J=#U8va zIK2ZIr&{gA@EHn$#KpMGe7U@J0&`2G;nKhV9=aH=W`fl#>iq1)8raEujXrL}{_h`r zYAd|+Cd?oLj(>O<^+3QxSL=CdDne^9!kx#N<>Vm4Ykq$Jqn%#QA)uPr%*;$BLoT37 zYfdr;OG^kBv2?2~CB-N-u5%{060MzlPK(>X;pGas9#75M-lR@(!qp1GSf`MJ3_EzD;7^kk;bC=RY+;=Z5nok|Go=O{_5zpBNHvIF~R#M6PpLOv>xbD z+1yvRv9U>ZAAwKw;2qXZDVuRriRhHgqepWv&uhSxpqniZ^*x%Lr46P=@}%x?xKmch zsVzWIwO!)u?djo_EZl+rdEvPRYiRqN5R7@l7@%1v zr==07>CL*=L2=EsXUxmX!`?@!=To`4xfMUG*^(B28fk*9`sOL!igsf7m0>YSVRk7p z`qfz}rDV44IX6oBMb$9|TN;DqvX=z2`*&l)$kl8!JK4m`JU+0Rm5V8{w^ zT>|_r6#f3-C_TH2kEyLasuDqkR7~$T9cslG(+Zl<7e5lB$d&m$*!9u=TS0_5iB=UW2pJ*Ak*?Ox*#`nC`r^@o6ZNp<5fpbsJn`WI}^6pcA1@MlT4aY-HbNg5ijz*+?QAuW)$4mBXjw92VSJn z=@oOh*crwuKToJ}Di$tra`ev8*_pf(p46K9k7VRh0EdX(Fh+EeR)E($Yy;|F`F9Iy zNQH(|7#*89H*9`Z`foNrDPVLSD$rz&OE)Zs)-^DQ08j%b&I$K-$E^hAJ2cI0Esi^0xKO6pNuP^rGKT>dX zX}G(K!rvMN|4&DEx3SbQkPIyD{xP>n=@eO0$&EVnh6rEs-y=Ohy+HjAR}pqsTe`i3 z-(|28QtY1fD&bM4aCA6zPr`{!NPwVH3(oAEJuW5t!n#G%QPPrmK;TI~R>5kkso>a5 zpbVPua)EiJ1r}n7N?vH6!_w5!;?F-~BIhlLNl54z%#y|F)JPB+cq1t^{5$34%ZS!+ zf@rTs7(~M@?{V|#_3vtB$?k!@9 z^R2Fp>&kivChN|HVWV$#>wo7DrpGS*-m|s4siSl+DBA)({By?PMy^}`gW>PZIZJC+ z?I!%~ZhU?nrPz8j9E8fr*QCMWfeE{!n8+-B$w=(Pzen&*7w`T$Si~n5b4}nuF`SjxSq6lNM%tW+{H{RkU8dI>*(kg;NirfIzi? zme6Lkz&d*Oz zqVY&*F)-!A2PI_mKRt2-gC^&AwJk+?)4_vA7|%JTPhifr(yOA3lo0H%4M zEtX2z15F2`aY?duB_JHbQI%R6_7ACeVO+w(gO-%xQ{fgkEm%`ZQg`*GQ`Ur&20Y{Q z)|d_Ugf`Dywgs#)Yu*`rRqa3Q4i`gI&!b3R<};?l{jg@q(V^30jVINeY9QA}?J`=8cfRj1$x ztV}RFF7bst#q!Ck4W|=bJ8->1T#v67&5rxL@rjz+6~ZyB752>Iu#la-h=01Rfm!Ff z{^$y}fTgP|7gum*1q82i8}84Jcd8eAn%Z;RH8kAqyH;V~mkESs^zTz4icAkV5Ls3x zYlI}6enx!%ZgBgJ1ewGeGGy4+^{+0p$Lg8_XiN<~j`-~?%DgCBvAs>2;&x(jF)xgJ z`0l535;k8mrKw>;e|MM3%`o}Zt4Qz$WYSf;X51zWHQIZlco2FQKdA@Hc(_bpefgPz zbR31d>bp$Ful406GLb4gdGs`^b0zBN*sfOkIZXAWh%gal6yV$iaD0GLn*~_#W)B?=9AG^7;XvWUbLQ+1I z*V)W==NfC^Ow#53C6MX2<;%I8bODXW@}L?ZJ){66FiDalu=3+h(BBb_(DW{ta+nNo zX|$cf%pC@F&fRh?YbIe(iU3**0~X5VGJ3-(%ec`nfijw0DXD~_{(;Ua{1$AC6PHF| zmcNgPzIakOCRx9lqqr@slpkyE^$^MI03FG!<&Sec2G@-#MxW^q{`yiIX@$4{xTB5y zdi9sJL{LgM#T1#d&R#w(dUf!lBncdiw zMvaDsMoEtbpfa=}B4|RP-3vrwR||@YtXsqIeCA_$uuonIx?@w)stnVa2VmV#Emie- zaCr(2YtX!T6K!Nfdskl{$!r1Y6I{TGQ7$oSjAxG(u^ZtQFtep}M4hsn1+Zwi-|4DL zA$ozi<|kwKa^G%P*RX){9rh7vOU8iWA=?)*;0^H58P#FmZXPDB1>P?Y7rH8{vq*40 zqeI}uJqsguCp4ROEz>9!yJ zjr*zJRa$*#(v}PL+`(L1w^qmRO(tXeR&*&3zE67}L`$Eae(RC`CY4SuY%U)ngiolb z7qeYkkcx%dbM$YarN8*zH5u=hyD?M0;G2Icy_kZ1HjpW*;77(#>{e7e{4Vb8i;NySU(_U6Z5g4JO77 z%@eMn5wGUW?j8}m-e~4>PqpwFlcYLa#5LxHoRxE;C0lAg5PfjojQ~ew4TKhuxh59P z05nCf*JjChwf*i*>EGwt^p@qisSM2>3TY&igpFTKOx_Jmquk>|iWdp#>FM#xRx$v{ zlj|uXl0E*!fo7@yM;UYcytXroA`44`-0o58$|JH67gTqsNx6sX^K12kV%JOjFG#Ik zhPM?QcroQ;m1CPMRDqxDz=%@tmN_FML(2WPW&w8LGNPN!f^32{ zTPnyb>n(sX|1YluPuaUc-flt__jPuXi<;}8Zlx@jy~c`;53Z6mr^<)6%&I|8*Xd{Z zs%2EoxqpR+%A2jEEctnE<56vGAM@-J zH(apbUruP{q3_X(jZFO@lQHuu^S3F58AZ+B%;GtY0tH5RD9!MUhcN^?U~S(C((wEb zw?f6(XX9s2PBw3SOSZMKX<6S-B_fuvAH_XBKE|>}pg4PE9&!%Otu(>+qrPV_A_>!z zVs+(~uuDqPi9396fhjjZ@%$)%-~__2>g=~fZF(qmwZM$kjN)AlFD4$`8W)of?jO67 zFXMhgno$t;7v$$cG=ZfIXZ*?sO3!mCkKK0xHb1j=c(!ESpGEcH&QqB;v*V~uCruao`;fAOvG9Jt$Ma(qn6Z#m=inW%sDu{dG~g7+-PLlO==aWb@Er zU!G(1@Z6#UbbeD7u;j|4+?OgIljBgQU-9)+$6$pi=R2W&qfYTiIMKCjxld4Iu|lX8 zY@@dZGL^H3kFf6VUOa19G^aZ|v|cWJA!g`{%@iy-_ydPGi7Q_&0Y-x0vwb?V;4?4C z_u#EAAB#Bs6hjgI?o?r*2ZaC7xo$DcEF2^t+{NYgR(Nz{U`}P|?CeB?&y;ZBv4_R8 z;FVzxfrp<-0SrOQVpCwo!6#LMJ*mR*@Fu_O{ng~pdHp(>v3a0Z#^GS0P5w=)YjJVf z*jy==caBd}7KN|~r8<0+Za=EWtabd>yPUan_sjuJ)F0-nXuKS8Ez{!__0~1As|7x7 zTGN_EirI{nXj6aji!rr}v+-Tqn|FRJI-myeUT_)mGP+CPlQYKzo*c}9?>)TJ3JthG z7^LWA!x)4LD>J$V4KfV$A1fgIDkmH@Z{O}nV7OsXGg(SARZ0p)u4ibd!u{r!zK(n( zII6DMF)cF#WI*fbQN0$k$5zt=8!<(TqeQ#ahn6|l|9Q88(P@>Y=oJSQfXxE15}++5 zWo6}z!y)I|sxJ~2U)cF&Hk_k2#DfM0MT@zHD$~Phgj@4gS!+t3;HlN;8a83n9hY+^ z9bAQl2=!Y6%}^~2SVH=w7Bf}kDE2t)HHi{N>EDWYFE3@v-MwqbLLR#K3OiWl8Z$zA zrc1i80w+XL`XdeoaG$1M7@1(j?BH|XGLyPXuxb^GB`zv~Ri4qifd#IP9&{tT3qj}* zc(bKf%7|Y;wQOyG2M*t+2cgek?hCsc$K+g#1(6oXOl=-`RO8~~5vw!;NZ`obhdtOB zgm!}7tYKtiq&Xd)!lRSgNE!LD!(U<0lh-*ain#sjV$GtVBg)g&?y8xIPaH{D8G6`I zrKq&8Sb2@Sp^r#k%Ce+_KY4wMj!4ylp@rcnRBP`=j+ zqpcngfBY8;P)md}ZXbdA|G}~yA2yHRz&ojHc)34KD7w&oyg4{na|m(IARRJ6-CFnE zKDCZqsGw;*#<0{VUB=5H^oRz!%Exx%u-l@Yyga8DtD0 zv;-V+4KXg>0z25h46fNZ_tnPs)lMmJq|xoc0~CNRb{Za3Ecz^1=IJxRPO; zAXs^loRSg_yvjhP^bMuFf4~ASfCWLr&rjx;?{b!Cmv37H5xOGs-|nrZB7JGx$Xvba z3GJCJ@Gq6r^7yAG z#um3>0>R0Owzs!O+r0VoWULFcd&DxV^kWK$mk)4~cS%;y{he=_S+}+nnJJZBq4EGm z7S17s^mFHB?-e7n zCq8{x=`AK4@hM^)Ty1B~gexOtRc%e)a8zWPORMl|FJKQU~2x47rn z6(YRUO!b78fFMTj?d`vjs)nhknrUw)E9+~Wb4V+my<0F ztyRM`EB&>bca`qPh(rNW{JTA)*ka(h_f>KM0wC8pd-N_Bm&EB8Y3G6lzxcx0jL@LM zj0M&^w7`HFf;a_$u)vy2fgyn);yx1og;59nf(uXtEaSytY;9#a@Vk z;;u5bFG{ro&{#?L{ok)Te4Rj555ou}U|LTDDv9tfIH-`AyQ94oI>6<>+nuT~s3FA? z16npJ0Ihy!H?fWZW}sW6s`q^j|TTF+yOKT;~(*K+&FP?pS@ zqRjfWFIGke!tRSJewV)<{GATn-neQn%=P1da_b?nt8j+!6{;)3{(Va!MQ)SH+86v= z&FqvGll3pGv=l`a7h_x>>b((vLhCK^4J3`^>}>MzR*l%~oE$cb&dr%-#d`0}I3Q2( zHuu&_EAZ`_2i3b1Sz4tvEG;cD`8xqE^dvMFFL{`}%g3AipC(s5X9JTA*Oap)AqUpM zm1au=Lvf{GqhH6_cl!8E$1KPWAFuBGWN>h~E_t@B;j^iJO0PRK*ccb@>s9C$Kl^IU zki=?#hgnVlRZkF+MTEch^InQ0MyL6Og%3}+&Ayiyk_4Y0+hVxKlfZ67M?^#v$}b7#9k=-o4Etnc zN#WmWGI_8a(Y-vZ0DIC3SW)V#7NKX6uyAXT^Z5Tg&`iV!tHPGi=GsI z3KfnJpZ}BJTyH?B%BYIJR&$ibq%2+@0gX|)ZazJ?MVcZ{slvQjA?V*K59A*3lN8UT zUQ4}&BSR&d$Kcdna16xjllIhwDtBbIvT!os!^ zEFN4uJngHVQ3bgu_7*+e3@VuhmFHIx@0Gwl}QPql@Ds;fB_C&sMgr(XPa$NJA3 zzt6<#5-a8E-v8L-d2I_G{#NO3U=?xHXAz4Pcz6;u*aB$~gYnjM1JtX>;F%Ia$~4Rt zWDV2*yFB>hKJfhS0+P309WA&A5)Yhxxres2O>*_^`)rzz=~T2T1%Q zA~Qep0!YciY$LSdskQRa(p6KW?xF$gv@kmx&2mX2ky^IIYXPBwf4~9= z>sAY43lQJ{vWEI}BhQhY?|bv+Aj;tE`U2(#X487l*6;81anyvu*m3VZ%H4r<9|l-2%iwJ|UcSXf)UfVv zjT|Cm0c%0lw->GQ=N&JxcDCGo`_S=;<(pOlIY0G`(e9tg4{R9@X8urq!D2^I4n5E4 zj>9YD6V)ecdT0~Mz7sKY@-O;x*jL?wx+VM(`Q#W$m)0bF6g#eP`rw_!;~dnWuP$oG z-Rt7yaNB$}9jdx0X+ufLe2R`jE0To=c4QWw_3=te9E8OuJVovU5Q(9{vWpFPZcQ=N z%mn#kx@M9fR*1JY37Fp4b#Ts8#%;C*YamCFEsr<#L@W!cUZGA7t9JrB*lrrUH;Jt{ zWz3Nw?)KApm|CvAJi!lv^h7Qc2XyOb_4C)SA4IKcZcNQyv*1kLe7wWDqju4bS*c)L zB%J9QDdGEO;wvNG@y;Yg4mka%sn**#s0ZrWFFc0K9Lgq!iB^o7cxOr;Kh6{p{r#fs zf{#1xQ5IGKm*x>Hv-v@X1OD_!c{{n3{EG)b3|qlak8D#o*q%v()}IHPau9LQLX1%l z=5q`tHTcTFYjG0P4gfjp#lBZQ&^sX_T#Rv0Qe+K2bsNZ%rGvi_(9R?G*&sPs5CGXJ zzYwQd(IX-WumnCumoI<_fQY{YzIQYCLPBo(0t!UFw*rTL{leRP)nEUNgtSK{2H@9( za&lzaHdD;`qk_zu6FQk+bY&)*nBL&kI@K9Uye2PT`_p*8t|gPSzCUooZZ@&P-|!MH zhro{=kFd_i9Zz%uqY0c}$4PbvBzg6Fw_Cgf`+_B3vx(#B?xZMfO0i3Y3J}009RB1cjKMcVy&ReJOkz#0i_7h6AeG- z0)N24qd0qQ(0;mJ{9tRE1WgH@w@B0)1n?Np2oTWV156>-(Ha?Wh?E8*#*D~@tPg8$RmM6 zCJZqv}2w`>LkY#@EG}m!WQL&{HTcZ@pnUR>10|d^ zmMOg&{xg=7&7J17iZ_{S%k9Zg8UJ!vnj(FeeZ}<-w&u-<(wBd|*FHGDW$o`8vc0my z(jeY?JzRGFGY3m6Lo-)Do~iBlhh5j<&wHyz4fKRO|D0eWk{=O_D;~2^Gf*uM2E|9- zd*hy}x_TI8nA<`Zp2*n7&rc*^&Tat`a~E*)|BH4jqXi`3T?>=(TEl20v4-x#!NvD# zT`gxnHB%P;9nA~AI0vn^3&#Ig`)`FDP(eTyTY(N5ZAGGkWAplPSSZuI%=m*G@KN!y=j{I`*pPxtcISVM3_ zY+W~c7Ud+g#vWBa$gKI!&ZT;N^v0iUEYx*L#h^n&V+!28NEFxoMy|i+^t*QO>35+5YwV?#}oZyU~&ZJPNLQ z(^jfU_};RpH}^V~r9u@^i$*=y&A%|iaIFD@g6{hV;+ii&CdP&6j^**6#TC%^*{#g$ zbArKAmaZ7AK*#~cGI)1^jX@04VF8+JD#(A0%9!52I`RBYFsHmxN z!dpYYVL%Ra=yk~*3EM&D;u6O1eoW+uhzKt@3jP6#OAC$LUrrFYv2A@H=_H|x!_eRU zN3%5_A|#f1&@s2bYW2;Ot65DqZv;xZhPOX&#rzh%H(GM4Sy4~Wf~AD|qeLaEtJ?a* zz3lM~jZSkXIjwR<1_!$MuQB^Yze;~Dn{f5u6S1bznQNOyMb0=YX+Nf-aoI_^Sfq%a z?+S9FqFH%;6L7Tt!e4c%F8V?g`2{P&;F zYCA_vfsn)~`|Xb*^YlEk3|=$;rtfh)blSgIz>~3ciLIFzKEikIeiB#?u?0vX{jDkU|Q>CytKDG)D3>xSV%nPnKpO>RjUF< z1ZQC1!A2rme7_owm)VR1Z%gZ{XPcu0!hY_rk5SO593!9~A>~LLjF5#JtzuTVT5=Dm z-+279Wr;p4u04O+R5jSFD<#SHU5N8spH$;kS6qI)7|w)1tD`2G5NEjT>*D1d;sCO) zIX6DLr%s#!%}c(N%JBNO{az00$lI2*UaXL<{4>T96Zc_u0Z%8-t>43TJNM;$G?@_W ztI;A#+>m{S6P%@tG!>S9^v_-9x7j^tG~dW@l_HN&%1z4z4$u|A((>q~r4UV50)xk3 z3fs=}2S=|0!Aao;mCkx3Ppxutvv#edbavklhOp6sTZoIqbr5Nx1XoV4rVz0v@yw#7 zv$PSKLvv-pal1rxyGO|M019gKK8rV4)DWp0@gv~6I!Q1gd%qhX$FRH z;2YU3%KjZ}GQG7&9brd;uBiX&b;jTlCD-HjA!+G&LgH^;A0L|Mbv_+QLlv~zV2|Ec z`nT_n%a#9U_*6TaTb4FUeq%Syr5h*zBy&u|)Iqo_*T*1WXAOJc*i#(EmNNstVex$( zr>|^%h^gby`l$A0;9cU4f#%G;8^HzVGdx|1Q)O3vKbq7_URN^nrXt?U>=_hLbuMJ# zfritOTec_IJlNACCG_vl)RYMq7ZWkPnf(J-B7*QCx=`}> z)XOxQH*Wk(pe*8h86TtvBM%6``8kE2wDq zjL6oO;Q3-vBsLKxHMy?W1@+AkD-#*0wU6L1&@0a0%9P3^x_N2%t>N{6(>?u|7%`P^ z=Z~YTv6Dv?x%u|nFPY=zO|Gh;%|!4&2EW&uNQ7asM$2<17x;D&h^iy5DoVmzz`;Xy zGXe;pg;&OASh`h%XPY%Mh>IOM2V7MiAYBB+g3(XxPWXf)dEcskli5l=t1ve3V@lv5 z=@$ZDidH2XuRoW z9r!igJYo1Nr0+nhDCr_%{7LElk3~kDVt&<|O6m@*OM#!rbDFB@Ln?+>&PSR=j)JFW z-T2bHs#7K$lx|IOqTjxKH3uv}v3c{kZ(up(I05P7pcPQaHVt+{Y#Hy37}zaN0#y~= zs@#$$yFHwXgXGS@MuK=IrMx%jX@$%ZAmatwoS}^16zSxsqtRGE)q^)H7T^puZG6F0 z85$lLR}il&O?DtRZ87@xCYD-Gbt^r5iGunq)}J1TxcriXCy@ZG;w(|*EOBb_v~!T) zC?EYqvitY2qx!v@^y-YLfg;ALTa@L!@2k7P1#ah-zrV24OQz5B$I~;I-YOJ)(@Sgm z?X?y@{%;rDP%DiQp5covo<+Pc_Pe}hWTkZ5ZEtOZm9*741dKSHYmXh|_WMxZOL9<$ zkFNTw^R^Bm8i&U| zkySnpmKIyV9j6B`1k(Azi-#{t4KEBk0HZ`;ljy++ri!G0ELyRJyDD8~6r{4WedJid zMVUVmGd@1felROK7M6^mS5YfAYmy0qgb=YT2~1Sa;M6EGuw0-}h!+^KC_p|i0@kF> z!&h|#tngiV3LS> zw}kK`N#6s$eWeE>%PT*BUEi6bNQy$=^?cN7BVy6NhI91zA92~ebZnH}c$v&UiuEvm z)>U%!Tl5{JU;;vp^xa>g0Y`md{F^lZz(uLw0p0|WN(0hsTsPZb$2IHct24E33y^~6 zN1kJdZ=t%9*w}R2@K80AWMFCroL~j>rQLWX2Uw^gHz#WrpbHVq#)n3vd={VppFr1C zorj*Tt}frJ^yb2rO>bjAlj;f5qHnRrX1;i!JkZ~GjCfWn;mcvy4k?)h?S*vZ3O0(D zuehlCtu=!V$$0QxwWT4MEuxC`3ON&Y93?EVf}SV*eIK7YKF_~1@2p{>T||VoTm|41 z-gz+e7B|I)D)N{-K*5)2Dd@Az?Bf~try8VwJANh}PWdEkQltd9nzGsP4<8!d`S>kZ zB~2arD>MnJ^Z@9JqXJ5m*5f8Ul~vuIU)pm5e5Okt~)zA-I`J zx_N#ODJq@DVxSh@>CjO;hHp`HMx79NB4|*-60bIM5$o@NTRBO6q0)QRSyv0aQqVwH z-&Z0B@eT8T6ZGN^2FVUiz`yOnz&{5HmolP0Pde2=J|@3y0iJHwgb%21E~~UA6=U(> z`@z3jWG*;mzP|QX3HHfe|CxdzFQ*Iw?yqbLlx|ZrItI{G_%C?PeVvNv20_mf6&vrev9%D8r4^1oT(GT}{R3@kRI- zY!B2=Df*XO!smY|MUp%{RzXwpUQNsnBtJP0^C$pt33Y!2CU()*Pl!+qQzb&*0ZK-= z9W5M35E{EPr9Ff#+i;l`0_YJtBgi~JU?AOuE<}em(<2edVvL!1kiqc4e3wzygp^65 z>@I)xC~VOpeNY46U%kn70!Z3awXVa=720Xl3aVi!jPS^=DS8P<`c#4Ycej>*ZhC`k zDr)y;yz1XYp>&R9u5ecFeXa&wicu1Kl+=8U8_ij#+|HU{NeS1_6|sYLsoKAla5IUm zy3TmoH~;2&72)4I9a9zfB~SIk;h(!W@B8}`{rix5V}32+6!-Qm*9Hg>#Rh(mYK26UsOTlo)Ir58(KWY#Du`GjKxlwU zO{`3apjiOo;M*hUQ2{-}`&S?mlXGpDzO3C?J?CB*MvQ?f)wg*K(1L&R?7JL-U2wPH zEHfjKG~kzY8@!zm#3ecHsn1}GZs-PAg0-$Pb#i2Oia7?Uq@tG zkSk&hQs0e;VX*f1xKyDZCvw zvPKVS9N!og$9vJcw*GVw`bg0?Vk=GXpQv4AeLG?2!_4IDH@I|Q?osBOSld9Z}jXnNNPC{&?Rl}5E zd477#VT~#nd3%!@EQzzwOhPlyC&Ye0lU9amzBX3DCV}%ppdU&A&1dIn;yd43=)=p` zm&K1w1?iBk2G;9n`D3gZuIns2)%OHo?=>Z~JzBAHXbD*VJ_vm|!Ukm@HdT_{4(g(Z zk~hMBnQhQF;~dp6ZT9%jw~iRPm1T-d<%oyv|D}+&MSjgUJyPSvA|Q8rOD8JcmCyHD z1D)CX+{eOCR`=3T7lC(HJ#YE;tFRt=658$Tm>KV;(D4pJfcag;6DyggG~OO%?LYMCcr0*djT3)}#4>lp(&w+sc(4OWX|FlC9hdUY$ zRg4M5QZmYHY=t2;N?a)QyfJtswYBt!k9~Og6R4vD(yF%Fr#)E>DL8ec*ALxe=>9{Q zWHR)iXC1ZC<(F|q&{h0KDQfW_s;DD(Gn}#~a0l^FK9+0Kwd<|xLbomr-2#P!eDh{I zPGAvkdia}~_u<=P3g(N9VXvCET5cQ$8LierMYZ0Vs-je1&dYA zr}B2|Ws&~)gu$dO@8z7kZUGI6pPREh+I7@wrF?nGQ7_w@VmXe}%l$mWD_R!~J-=qv zI{v|Cbei5``?tdK%|fWyM0jonWom2pt$@ROLb0=-ja<#_Gm8%SKgGWef0#d4D3Yes z1(@Q6-)#Fhrgij3OYz5c!?ptAs{toC?BX(feHx-u+`j3Z54a4WL6x$K5-%VgUvfr4hqlSK~{Oi7Y0oQDX}B zFAoeTI~fabCncG?jtIV}9;~*tcq_VfMk2Z;LS<$`#1Ns_I4RvFv~v`mvC8{l;J+Wm zXn2`w00Rm67G@*2fx66fDCW=F+S*9+jv*~bg*23_DSRvb4JLxfWCE)(lOHia8Wlz^ zBax?M)aG`;p5O(mNqd#@W=YeXPX9l!gRKrod+ z7n|HmQDurMYD4*JJhmFu+`$s7KBvY$NpkF)DUdVFMuV;${ zztsB=_LHl2g`FE6$5exK{}ZXj?A^^$6oJx#KZ##JlO_8Ual*&L zOV4@r>Q&t`5BL@u|MXo$Mpih(^wQgc0yxg?gs*q!A4UXlh+ zI;9%c)%b)?MaNFtl%V$Pm(2pB!& z_P^`5Mjzg;2AlHLlUSc210=AnT`=8-|2mYs ze7sH!gmxsH#ef$U@@fux-lIrO+}CFM9^!JZ{z*`}-BbB)!h#{y75sU-sg@Omr6ksZ zO->`?;$JEijvDIdW64w3;wi>Ih?~g84?#_8cP8MJeL%fe}tgD#J z96Hz(E-s{|3eANZ)3#VX4Ht=;zam+_In6v%;m=x{)Es{>W*YhX!Izai*yxO-#RuyL zD2pp)%^_g601iGMh%_M3Lhkr?%4Jr#B|muu1Ug`H0@Q^wzIo8%AGDYa{#F*)&mpz# z;SX-m5s3VGygo(1l!=K6rY86A??b;PMC(V^GhM!Bgu6xzIvSKg+W&qNC>Nf7v~ybe zQB?H{qdDrSdRbU$ft}9f4^CQ@c(gvY36D~PQDxnu`?K(DjL<$*C1}r$c|yBuWgMbr z*H?Ctd-DFh;KVyqd-e!+q3*<>O*6DxE@+`05kd3^K02CJlpRdGG1z~qH|c*aIK5>N z${o)}C?#;(7P zmRG{OmCfJF(>zcw?;Q5B(xVjba}acXCcyn3MSt1UT!OAUqmK9I+W^Lt2TwcHU0J1a zDpC{C>)K?3C7I)|$dw6~0zNaQbbTem#cO`>kMw~T>DO6(gIU#P?+T1?#alhwxwc5U zkC9%m%=~}nQ9yNVJT&Vx*m+%us91=B|3)s7*nyQ%)*vVwDnui8RV3{V%1%k+Hn_n) z1RT3NPSsL@0u}y&PqCZu#R1{rct2XD@iarF{;2m%l0X7Bwl>_$6_U zyA2gIV!KkX|4Eu~hZt){Fieb!Gk*S=x`RZ#Tw9l9(U{cqlhZ$=?ZH!jFENVU{PMQQ zr@+c$S<=-eCn=!Hy5{PU!|ILPYJO%ZZ(eE@XP;|3U%ozWhx;-D;banbLFgGOa95D> zs2X#h6>`pDpo6F8;(|e%0l`A2p#B*C3s5F}JebMw*1%H%dDy_yzvsT#p5wnIjVk_V zatwj}Zg7M%2b5p+Rm)so#*$v`_u`T%FZK|eyMzi73PDNU#eA^nk9+Yb z{s*CWn^h!t+u2F0-$eM;a}&QB^QVnbj9v>u6ZU5Bz_~n=m{PlpKXb=UtT(-G{=UhN zMs>|>9Nwf3#K9MMN`$O6RY|4fsFB5D{wSStoKtLCx?kLroe*=_A9Z^|*|J36Lx z2aljh`HymBdR*wl*McPky%{UN*N~m|ht4o0m(%GtEaf^2rIEMJ6AJFx%zXRx2jef~Sq>F`;jq?(p-q3a3~#wa|7O9wv}g%5tvvtkUwbTQ z-iipjXg;#|YZampTm{zN8sStyU5DysItQoj*5dH-@d0xelzh66*a?90j#ir?JGvJz zI4EpFcnYdCk}0YL8y{v95oQXMegEg&?4?kyb=ul-)*7)&91tU$OcQ;ZlX05nI^nE8ZOM=Y*EY_@UlkKiKcr`f-$9)3h+P(B<20d6BG#t4nzs5}FuGM3QzEk_q1EhD@igj_EUHfjIPKZ$*7Bv}bxFY5_PMPVU zs;bHkFF*L37Zcwby=O!=Fv1&;YK{8(nB*Ep(y}c=X?dnIgf|XhPFej{IFOYO5NN%u zeLgicl`Kd2XY+k|O@Q3*^pvI2O1hPp@&1s^=7OWe?Z9k7Ty(cHO_U6_TjwpRLi+HV zHLtm)N3{&C4MuKNyYQYihl7xno@bebbQ5TIw@xc?Pd*=- zAx>)#|C{2gshB|$Jxx|~D^z}lh#U9jEyzeAA|-O-z;d7hvIGdsWGaOhS}@gf^79je zLPCl=VPMz^UWTxr4rlj1+EF3Vaxi+c^ z;&6}YoF;cfz`C=w#_~hP`PPl*JPWa2pTlFe-Nly$%K-_X;!b%_I;{X(i0P6Cm=BM) zq0AuSdP8h`ppLbxP{Nd?DmBCQihc*L<|9=LxQ;prYb0;>ZD3F%nC2oOA@21np+ zI3k~%bS`=-uPc11Is2q{OF)-?)bJkpYD-_U6LiOLtl9HDdUUROj4RJgqh32Pd)n%^ z4;?S1I&na2z#agJ{{p4U5{8b!@Y5c5l zNrKg)9Ds~$40)EB!Af1MUqlXDVOR$OgJ}_514=SI{4zbHpn#4si1Gw=9}h-PH8V4_ zIvSHSVqafhAea3zdWFnhiT(VzpWza>7$CIK$v>}SKdX3SxY?L*K~w~FW#@CGmE*&> zzuHzW?I$dBn?CNy9lgBh4i+cZvD;gE*i!@7D4O@oZ?oU-!Kb<|KtXWjEay((@)zDBeCVI_z&OeQtR@^rJZr!^c&Vi)KMJ*&tqO2Gc$blVv{3o?EQ}+^J{sp(jO63 zjg)CTzzy%b`p%t(`@iD(j9ZhB6JIk9H#z+JOukeej1_k{Qy@txSY9fR->LRxtF^|A z^%)NvBV&g@1q$B!{hw1Ycr&+E(#YQnFUkB^KoFzroX_Ka1>lk^asNs($S6m z5`c?^AGjZOuoYa8ZPF0pvYVQWpj}uz+B}zV9US49 zBPzC)d#gwr^vwJH>onPesL80gpW2(k$FDx@@YAK0+_|J?v%I*F#$CE|R4a)>A!b)_ zy7f=<0L_lr;24gR5)->hE51D7Agk?O2<=}Co7{|o?JJOX8XX;lJSbLlduUO%AAd3x zQ6!k|@&Nce`ut{l!!>@fyXdoz+&e9is>?0!TBVE$h}BfL*MJ8F?t zgj1Kc_?zH7@$PI1hFXeI(Dq*TAmvjnFMG8TD}e*4x^D#{IwHoKktMTVmuXXf9DV<{ zeC6NaJwo`<8V5O1L`i`-)jxKg2FEwEM4)bHT}FvFlwe)qEW5n5u+N{qJEuA|dg3Rx z<#S^yyU)H?1^q(xo|6%1kp3TVUYEBsT1Iv{@~fz~(E}}iIOR*i{BF{11~cip`DqLh z^U({?N2B0iLklpxKAOh{pLH#mpIpJ`2)=@!Y2`GyV0+I8CKTB!di8dC2;8GoCf71T zNS@rA=oQk{m`b~NVxR7Q5~PDpou{n2Txms?dWEIun%jv`b#HJ+_Fcj{?V73 z>%J)Cfb&ROhi0{=0M(VWeB7%V`gal(e+Ko??;AXRUrk|MMejN(pXIu+`F^DK(e;jw zNeur_#RpkE3r5559$;#S3C>T+ew1<>tc4W4=+WLxaWs%rry8NRPq>|^$t35k zG&jX9Y3SL*=ru3A(aSXQ&R^f4lmTag{XG9(ED^`O<9_mly2EcR5>Nk;+dcRp&tBad zd5+aR*_Ej=$zl$|>>9j*&$?YWjZ(w%1U(mU zQ09A-FALSlXeZ9ODdes=mcuaLS~baK@=l5T!eOUnmF?z+oiwn&P*=9l@%7tgtM)ZH zr=@RQm?>*z)iBrXj4%J* ztlM`b%}%w6>)gEb+<~R;|6?JO9m9dD7UipLs4*k-S$?U7dqO8&VrS z=Mb<{dR561;sYzqDGHS_Oi(}E)nvMU*$t1j0JX=TC%e2k%9v@K7_`OH!tCK^c{V6=cl9-A^Xz|DPc;4atZbdz@zy;`d|Bpno?xfFH+~K6WTX_XdTg= zc2U>2Y+lZ?*{~`=g2V(BGB%j5v>-L5+ z&KTWeE1!)?nKx!+?#NA})UCQ-vYUCvuQ>ZEUHqEhM!9RP)!P*2-sDU*3v3orVk4cI zs%Mo;{62rm_8*4pdEO=Q%i<Ebfedz4H%Z;;EAtc&@hKZh^S_-d5ty{qI!eeyX{^xrXqF3hHOb4*oY=MD^RW9} z=jMDpHCt4K9%}94{;+$c^pH*KSh_xJP}vk` zNUj!nQaWkuGSXVieB8$^`k|XIXxFpRLTn^)v(J6bU1q=TFw@dALgHMVsr}=)8#;^DoG{wMbOXU63-n zBxnOi&%=OR$;`>i*b};>V|gC>E*%;XXBV+>CA%SKjD1w}c%Ddum(Co8J`BUDYD>b7 z8#qo8eb{4G)~4i@sL6A4NNdbW-Fyz=UGFU9&uo6fPK8CL zDKBoX+0l1BcCzN_hy;n=DD;~)t_!^PcIZi45&J47U%?P-8?JlJdy>=Eb}xC@^-=Qd z^!9lVX5$*^WSS%8s~iCr-~<3JgG>Tqf{D_Qg&D}#dECjkuhslI#PpL%f&E7tSg7mn z^%}ERJNFdVkN1ebG0w%SQ|973ORFLBi*IH6D))+i%r~P>Twq}v;m`Kyh}gQ7!Bds* z&R4U2BA!&7AL(#syhQ$Z2`7V>TzgdPrIfQjY37NDAFZ?S9?^aH@oUM4-B%tSdm=IG z&O4Qi@>3pNHm=hq35^%hvU3S4_;@e6H+fk=yVltmS2=6<)o&|tEgSnHQ=7YRdWp@h zH`9;i@Q>d;NslMOBXhnfmxc7!s^_1sXVreF+#DWNuV1(By7DAjYp(3K3HwW%mn}^k zw|!VgV9l8^6C$@C+orEWbZeho0L3XFpL2A!#s$+kW>=5bgzSS$YPTNKB(Mwe3AlTCd(^J5;YcT$pDnt!bS43uk)h`1ItlN& z(nX)S3%$=y-##-VTyVjmts%PSioA}eX>R8*^>X}FV;tS5v-t}vn6Oe*sz^xGGPcF* zL_bYu_caW2SaET_(SwUAV;op7#MwAYoE|qUTE<`5%uZx(m{^#Y)`J&Z6)$ER5}w%Z(E9p9)9zGR@1GH?%yLOgz!e8$vmWDUKEK zoFF;j_+f{I(>X3)T!CW{8JSX~Gv;m2cq$#3yZi8=T^~G_24%kFrf?vI1ft7RYF(Q? z+xSl}zZX|nK6jz_{t}fnH_vM(^XxjFlkU#BTuQz7o?&19L$0lNMm?q|YCl7h?e!J0 zsOe(5)6!&gmFIB0QqGl1blFq2x6sXCn%$B#;RnL8(kkp>(PGP0#hrzh2Od*v4VOHx z6*uDcseLmioz$x%$h-hZd0+MN9QVy3Cu~cO2(i2(xLvinSDWMxO=-B_wsSjbUA*O# zDcL6{B&nJ#m?pY2_59Y?{34SwSIO0Q?`0zc>F&i@*B=)N*-~XIlC;zUEHYo-HWp8q z=pFfd$GGW!8n-PacJV2M-j@2;v=*kr>O^MO<5D3>$M3y4GCOF?Js<=2~~pLgucr ze6gcc)ApsAf;~xd3rAI*i47SwE=`hce1d9`U&KRy#tSYbp69CbW3m;e@{1TA&?0}5 z=VIo5m1a@47m`w8*LM&ZBfKr$&$Z2Qrdi&a+RS|m*Et-Ry3{$If9Pg&F|y{y7XR2g z=arAMY|Sn$a9A?+f}oD%$DKw?J;Y3KD-`!lj;Z0R9OLp&{88-2xb5`r&R1#VaNM&$G&TETe^|E z$K}!N@iJex@ZFiqAvW{syA72)Hoq+4X3UJ-7u2q9K0h&Rf%8P z>w1S(qp!#q`b2uX+9+wqGfl!q^WN3g?P+rg8UEfIsRIi-11xU_SXecs$7-LDNuIcl zyPf}5Z)2aht*w~7x!i=e?HwzoUT>RdwGQ4%Jxdi_sH&l4bjDKysW^t;Jt%bHxa z<=znJ$!0tj_jv0n-XqHwB)CBFrFqb?xvKVFdqX@VlaA>s2OjdD;>RlfP(50<3F z&yHK{5Y*BV(dRnWn!RR4D?88l;$>@Q%0$WM-zn~`HorKO)v-Onfj}rud$h1iK6cZ8 z{~|;7*1&-G&Q{wcE|uo5ee}Y|y_ZsWJI!Q!e@TyWc%a zDQ6MO_eE^i1R8?oHG;^Mg)b2Oh#xNTs2eYo;(N$aFn39JmB++lfhl4KQf*f*d|6;V z{drL^w;WjSzg;({!z{azUpFII`MQiv=9uiNu`#M!oQy=0bQegl+GVR6z0wUhWB=*d zSf4Z({WqGbvU6f~3TcG|WIM$9oj6uJIo)U3xo64uz0M6k?3*%e$xefhovS&^bNd!= z)Ec_3S^xS{`8wVy>pXcR9=;B{o^UR=IY&Bu=_K;ql$E-EPJDsay#$I@%6q4Vq*nGs zdZ=$?yH>&)khtWW%$k)w<&#YLXSlYNCfgT8A3h|Qb>H&s(HXO?S}LrcE%M}do)>4b zO21;mEz9^_pYG0`KBaKvimA(rH|-3MsJU!zD);covc361Yj1^vVE7l0ZJT#7G&47q zD`qLOJWG7=P+Uk_8@wS9L+EBtEvu51Z(;YvYv=9`q+Bf zAWoHU^9{*{^<@rZAb!M~i9W9v@kZ})4<)XhjA?4rzWUmaH%5Bo_?yO`l5dh8e(y|q z#lE4+8cAtSRtU+uAM)w0xs_UMQmj>FvGDx;T9x`R%Twik^4ne~?04?jT)J+QSReb$ zW?i;cksxZKsN&8$UZWEy#|l*&IB^8$g)B4_dgmMDXAtf-%td{MrrA`kq+vWs_CbD0 zLg(VShmBR^opsDUF=p%f1MZLY(&mnbvlH4XjTgEFYRBjj@Ptd|1i2*{87fO;o-w$e zD<9SDvOlG$8XB}hVBQ7J?QO?DX6*8q)%#>)SlaXe4;Y!gG+>nH(;F6U?k&+P+_DY0 zShiYk4LY9{b-QiWy96yV^e+2i>Db_RAKA+J#=m)CmvMe)QGLa}6c@8097$|@Ufq8! z_H4;|^&H`j!mP)BqqsSx0RseMjcW`reW`0+$JpDWTk;~ZEMHtH-Z zJDoH$FMn>@?2A5<@vGJPlsJu=H7BJ?R8|DL!8eA=~)-0vaUA{ zH+bZ7V9$81U`_7bbA+WAbjGzmU#HvEH<5rpaz3B6I-~R=YIA~)_lUBb^&^jGE);un zZi4&sw=#Z`tVYsNi~U~478riY*RLF*&@=9Kn>5=^28*?Fz;jje;`lofLn*_MsfF5h zYYJl$!!9aH`Q?x2h!z(8sJ1)V>0%l zO^CnH$5rbt%D`m5R*gunGU=4@gdCc)q^X1^lzK;n+QaqwfVNn_LnvYnNrxKqNp zE;_U4?H&as>32?yo4rF~=+5H9k5)uI3L> zKDI7QvzMB6RVvy|McrURjQ#x6ORr}?vN|v><6~b)QjE^%kR@?X7=_l9(WF?{8mK-{ zqDa0xDE3K0WmK}1qoAK}Wr8Cjy964C^RJeg*g8ouCT^&zeV_8M^H+^lb=GdKO7uR_ zq_`q3^K{wDnly>(muupc`h-UBEa#j1DE01(cRPYNca{w0l%pDyg7&b4i-jFuetw35 z;si0(Gh;GibjPaaDGITcJamW-b70A{yY6Fo$;yD&(}*?XKtQo`nEy$k@u9qPgJigq z)vXOC>q~|E$FlDj|3%Kq_e!d#{O67pD?-V5pK@}$EB9L4G``uU*+9Kpg#cU472 zcRB>~s`C`H=^y0Y{sK2AJNKHOy}_K59|8e0_3zZJ}3MQFwim#K~&s z73-zlZ)$HnCc6E!Q;}F%v6$L^C8IrzCEJd%ZF|s2eG#0yafD#cq9w;yY#U{Dcesd< z3S;5q`O#v&COaRB+r{~Z+`X>4;G&)BH1!xiA(K4oFh6Q7MtiSQU{C2r28F9 zR1e7JvK=2f&cQY%I3RnBHUB)m5NE{)K6V^RBIbKj6vLnSh^6?8d{xfyyzINR@Ya&d zd)F5qa?;TiTbbciv?GG8qS^DpZLMfE!7B$=@UUwsBsDOa(A2N>VD38%lSq2E+HKE9;ImY3APdA(_^7gJZdy<`WWW0=DxJ;zy35Q@F z2bNc3xJ^UCIF9kEk4=dV$j%C%pBOL2Wyf0i%$hqo`;>FKVz3BzVMd?5?KR)0y`Ow@*`<3I=3IJ}2|>|otzt9Y#ghLCqtEr;qlDRaK8V@j zF!hU`*YsZLmbYQ1FRq?57FTn0J#4Q%>$IcF4N1FpgEg6+&&0>KYMwrO+O6`mSZocqd&4YKj7gkB%586CY>2YV-DAoY|QpGi*Y~;&j))I^|%?TdKVaCOA zzL!$+V|?bSN1uvOby5!((H8bH5F&rt1S%D#5`J4LnKU*MTlF8#oX=@doabK6uaD7k@_4z$yQVC7?&+Ok5kaT zy=s!@rY_d$o4wesSm8|4*JH}jwKBnvxGLjIZN=Gz?{J^si!~6slcKx+#F>Q(R|Dr? zAG)cBbw=pH3#%%YojQ2`l!#aBLbuk*cdWEs#kn39tW5QgjLW}1quAO_dAM7$*Hg9Y z);eL6Ov0l1UgiYJZR^aFTm7(g+!Cl=-dVW?^q*c=OpoIt^Lby7SH;xr88&geP-OUN zpTKb}^Kben-q6${{S2jWgRsy%BQ>{^mZn14iY^?iCH7l1okZe%O5oYxdbVUNUZ&{wo@<^JsxtFU=oMe%kL*UT#lR-xIPY>*$kREO9psaG#?uf8+dG_vD5cae0>s994V)My1=Iw06Pxo)uY}_t$zZYb!jt zB}j^Ej7G@l_{3S{YcEIbOegv7I_~mJF-70&vYi8W$mubB5-uWP58^ak^~c1H5eals zjx7icH#+L3?!22#d2A?`(Y)PSY|*YZEJ-oeVGp>(!yVL=g&2_$p`%qpCkZG|;$q=U z4&AbREcb|VVM_6>nHLv3_wF-Bj~F}?HhhQ_70A_;nq^rTTE!M=JT~yofk)XZA01_N zE)QK0Z@hEz{P-&Ea!>X^eot5F&phSM?6b9#J%bZ<;urADj^M}_*ALig?Ed-Su>~>5 zctl)HD_(dyKeIb&lu`DimF?Oi;|S@~7E)_Y4xOoW_G8c;#vPkARUgVng>D7?S6hRi z;t+SKrO>krj7i)t+BN1Ma+_CJVP*Yr4*xIoTrPQ+@ry6+bChMA^WBjS;$>D>h{E1oO{|vCD0RfdY3tc@29HV!h(wMZ&;PA<|ipY8dSJFzyhS}0xM`~v4v%Pf=m&Lv^z zg{x#F;~dOOOi#`ibM}~%s$S!{dQz&s_5=rKiOj6S1u2emv`_FokB|z8n7woF$F3`K zZN5=lL$fruH#MGrogvlnnDXR_ovS}(kx-a^$kP(hEbB=lBCHKvT}KKBW{)|ioXnzp zN?mB7a!8igv>??2O3g>Zq%Jyiy+wp^0N|O$AxhcmkpTxr-J2`kc z!Mw6uSrhMKn?Avs{f^Tq(WeZ7TtfnFX` zCp=5c1C^^RlOwAmj){g>ojz$~(^M5H9k}&I+ylAD18SL4-s)oOufI84Wgu>Jd~U$A zh{~+V0&_nqo|-4Kg3B6sD`q_P#2?cvDRrblPW5zylHr90Rjc%Rb^DBZ4d=`{jY;%Y zuQ@*Ri-yC^c8w92+Ek2>*2`<`Ym$)-{UR*1u!WOzTsOr^wJ@Lj|86eufnvCQq1b~P zg#-`QODmmgP%^(>ukM;ttF`z=i~iQKPQ$onFin0@KJ@B|^J+Ppx63`6<|FpP-Ba}W zn2AC!M%eK`AK}1XFlrqCbqhz{Gd}CZ)}DB)H2NKADBcA*LGK1OPOUmpod1s`L9!k{ zonBFlxnI~gcQuNNCpRbzO|MgTE&i&zrn1L4KJk>w-9<|zK8zgB*`z4P=p@$zuapdM z3JQaqo)#F4w*~WQ<`yn%?g_4R)>zk$PZe%&3)Bmj}IZ_Aq_d z23ULh1gyK04Eq`%!7+Fb@jWFFlyersZ=}J&+qdCr$$L0k@C0_JUVy{-_aNxvNmzgL zBy4?|4jUhwf!T@S;JDlu*f=5t?q$`AHKlO11Yd|*I_uFo(JJ^$6?l{4KRJ`R8UY*Bo>A$ z({W_iodU!@kYqB*{`6D%-~Kmv-v7KAbrf4vgP3FjcM&`)Z~cyMlmni-^`snPj-|r! zD>+co01%gQ6;^Bxhvd|&aQy5g@bQ}u8#Zi!xpU{z^+V5|%Nc;|rcjhi-+#+9^J&gK z{d)^)Sve0k%P5~IQSnkz=X^(67ch2lfRVoLU_Ey#EJ@uDdusCGQ2TRQ2T%`w+!FiV z0I#3`yd=C0F8lls%@7rT3X;?B6FIcO>P=hW+}Sg5`O-xY6chyVVKcaLs>b9wJiCRY#K2Z0!kmeIf`|o66T0v2!^yHkTT5P% zy6qmm29Clznr|jg|1@8A=@85yb)dMS6B1H0;d1Va0bM94{Q}SH0N%F&oV)!976+~c zEa#&~kJ5Y-a5HS#vIWSOQ{mmachJ<-M4u;NTquLe1y}gQsZ0O642D*dr-@S3(odY+ zr|K0A`Gpu|>+hZhEWdxs?~m7G{g9HBh3Ld{G~XrlK=XX>buC06O@l2_`ylRMJa|lT zr+GVb<_w*a4}8!$mif=p$&)A10yH{p;*gIiDDuyBGmTVOoK8gAdZ^&L-7pFSPX^@4%|n)mbP&ktOan3y=Q-`Cei?>~I_5GpGx zfvj0ZACu4SpdOS1h>*6?=pPF}x|L#-fszn$Hb1P-N$LAhfB)$*mia`|E_y_)hK={n zf~}ti?23q_X=U<&2S<(^f&2IG)8|j0J`Jy5zXqby^fB`v*89O}+qP{`RaFI8H!fek zJn$1)K_7jk8~=!T)EsIERRf}&+=_XJD?ESx9LP7( zfqWDX$gDZ2si^_47|Wtg@>bK|^bO_{e@fAieSxXlSUA-7>|gPIn3Q*5dIA^`-vD#w za}KsX1IK__vFG4jcn!*c#PQRY6L>K&SgEsr#rxpjxcI3n6V@+;{ls4V zPCY-^`jnQ{)Sc^K(&i@y-4VN4SVYz4)Bjs$3%ko=p6qc z?RboOFnjiFKpsmM|9o5Yp}g%CX^8-^bK+U(xpqxpXi*ElM5s?S#&5$crdF2 z`@%>~D@B=2;m}8VJa(-4CGXh&BY%5p@?gg94KR9G=$UQM0GOX2K`-Yks_L%!=8tXU`t`-GB9O-@bh`|6E*L z^kr!4$B!QmJ9g{aHt=}#6ELA|&Ck!L z_fZDSgypK@$SVI6*6C9K-fU!tI3MO0oam0uJ zoy5k*M)P;*&>>pCXUv#E^O%s30E>vq$K(|%=64P z5ud{)z=%L*74VINl4?7}qBV-sU0a{~b7#BRGb26jUhJp+SgyZ&e5m~yh>x0WW;Ii%4Ht_HC0NZ;x6P@qctO3G)*ulOW@{Su>J!arn^l6#ph;{<& zG`5j7H8lg*;0}{F=E=gsLfQske;Lah{Ylg(vO+Q}T(}SfBv=BegQS0mZ@ffCFq$bw zEvQN1``g>hin}Wvunj~X z814I+rdmIBeWgZXF%Oz_80IxS)>TL&LrDF8r?~;j+(~f z&cVTe-d2l`y_FWd&}h}Cr^0~f%KQJ?222QA0{3(KeR(ErKg)mQpRD;ca2d8`*v_FG zP#@;cpAXK?&a|$ezk~iArk~kCJdeDiECwgSINm>yylWU-N;({oI(pnKJ&hK1eU%n{ zP&pj7t{nodTLb?!|32~CApPpK!LR=5K9heeQ$iHIp)ZUH+cMN|Y|rcJ>d5-$k+5>* zN?HygA|kMP^Je-wtRKvK=o8=mq09!ifp{9nPUVeQ20Dc+8+iEDbU6<>Itn)Q)LDFm zN=usmhF9jmDkx6-Yd_WTpN#DdzHae_IJlUaHkh2B?xT*9@7dA6G5H_tJKQ4uWAy3J z|3Uu`$9u}l%W0XQ-_J};J3v-sfYj7fAj@>n{xsG>w5QBO!m>%9h_R$!(i9a^FCe0C z&V4i>K)R-@(!7K44_N+CZw0pI-1NBpV7`8Lf5Dj;xN$9=`PyIR=-)E!9Qu7I1ExHf zH<5MTX@1d;G21@02ZPhPb?fLurXPgu2DXnlc7isL=@XMLL!%!M#pFM_QB2a@j`zfx zRk97l_H{wkH~xtX-shXZ5K9ZvfBW@#?yuzGwqrHizn43h#DRTm;~N?pXuC{e0|)%M zZ*4R!gTZA>f_~|Hv0Tw6Fcazq8S9|i1}t~<8PRV*8T>d-z`Td7JqT=^)NR@TkT>nE z7niej5jeSJvwUMur9}^2_E`S7)mnj@BQFF$y7-Unfa99EbozL4Q#)M^!_n_{hJc^2nXxX3*v9YlsV{X(# zn*VBwaiB?BVS=~N@r`TczVudE_Vh9J|C}<9Qqt*PCcNKp#!i zw|`1XN`K;=DF?hnS67$*ot2e!@NM)yj*TF%WXYQEe#5Z>kG>+h9pXu?J^BRL?faAMz z#@Yk#WbTm9$^4RclmYtw`uh3<*D(3OGDJTI}i_Z0@gs# zj=eC&XFjaj6bf6zBA~0Ylh%J67efA})!9NuH&ATE1~LvbO3JT}l#aHt5a@yW;Xmge z_2A1$@SZFLmcCO-|L@Oz-ofRMzdPED{*g=&5D*yX^D}uIoa1;MCLtlA0U6*i+C6N` zQ3jaM)(uXlPoILjuWI3WZ6EACaS>vUo`cAP$#CpaHk`|P48u%~Vf*%7kaM>Xl$4ag zb|&v6+h#H%;7d`ljbhRf$K|&S)#L4hhT-4Y|3B$M;|Mqqp#+lJ+Wq5WjenlsJJ3=L zUVDRJRp83OB*M+xSztKKa)7VFd^7h=$?uaUPK3$MfAEj}KJE7HrMFmYycd5C#R?0KxU9h+Sw!` zcB52%kpMrjH(!R6_Wzsh|5aW!9IBoU11V`9SatL0z}P0U{1=ls(Dkd=z|NgJY5FQF zDj+XZaml+`GGsmd1UupqpdekJbSQ`Sp>4aL zqx%W@2QZMNi0woEH#hMKR>9E8^!awHuRq%VpUR_Y1gI);)AX5njHBBH952H8enSI8 zx{r!BIy>hcTq1LOILFDH>wQ+!1J7!D>AB9=%>dJ9`xCm`;7DpVoIj%3-|iCG2e15N zj1>9DzAyTHINpn692prI^cd(KGFP7UyaJ*QpQiQy=HpVh{j3IFl4-$<$)k{W`kCDo z7TqC1@^xa;Y>#t5PMr3C2-C}(xVRsImYtXsTlM3dp{?-E|Nkl9Or2=A{*xY0+_V^m z4AUDJpSyJRI%L178sHoGM_j{|2QTS)&y5kWureePf_EK)*yCyRTxWdTRDhO|G`&x< z2#Si76>i8oj_qOJAN?InUt5UG(ulqjy^1+{1~%`Ehv4-FaQ37-Tso=*X-AX+8mzv_ zllb%v7Hww3_}WKKse-z;9%$$c1x~Jh9l~b_2+^akkPuC5 zU=5+Wb=1Ifaf}H2|LEUgij4__v+?S1;($4vIyM1{Gf7+Xh0t8hT2@P?_rLO<=!uZ zJz=J#Z}KC5e|2ox*GtMYF;4X>2N&aOIp`R8v{LLe|M-ufvUb&rN_>W)zU=G_qFBS* zhz`(wz@L>peU8{DioyF+8L$z59_O=}_5H^jZ2@8(&<3pCx*Ik`?12|`eX!?P8WdOd zLe_;5-*k33^n4l)MYjyWce)6KZuW$d9AY1SS;oJT0pX?2vddw#P=}rw_wD2!S!K~r z{kESegVjykJUP9Zj+*-1@3ODxVjUp-|3w`bq?_a!f0Dzi#$WS~^0-IZ>cMh(Q3nu0 z>;SeAsVU9_{13<DA!c0r9r_h0Hj^9WFo3-M0>%Z51rY!uwuyLigsg4+7&tI@}n?hS(6&VNol?#cVfRtezppd@ z5BMkLhh@K3zKg*^K>=vHZ2!V1$mI9OT%n9&InW?AGHFzFBdydD(YHYDx0 z0FY0t573V98ocS~&xIi3m!NL%ICv8H_ys^)-w1L_s^CW9JKFENbniLH4p9Ur7Z327 zx0KGM#L*Y;_k;c&|AgjR%U(Y($!-M|&YBX?b&G5e5kcy>bAK%W)mn<>V1tx=W|>9+ z4>t=yv*i~u9{lrqKCvqneyxT^cU^VU)p_Q^C~R*p5z$NWuN{`Bm8)SoX(VnL2dr8 zML_vCv2$N+Q8IUQ6(k>;muu;*Vzvc8&_mh)#UcHD6ei7sb2YU@f>A774J+ij#U$8TUV;9CgY_~B zqs#g+(tpAFcRx+2px6%A%c!o4l?f9UV~3u4^X8w`gW_8TKjoh(2RYeb2-~+8iaviC zu=h;6|Ev6J-Yfc<*vI~7b-!QlA7>4v;|wl6Qs0?Ur(opY!pij>bANY$ZzpL<0|)ml zP%$#F^oM_x!_sx3^nL%# z{t@0uzqS37c?S!b+1wl@n|irX#V)9xw0ER74edsbem_~2l55F*A&vZk4?uk+uK-Kk zteFxm&|pdW2H)Gmy%*)fOG{vK-**DUx@$L&IfvqlknO>D&E2*MGiJwS{8rs1p!9QKC4W{Mx%? zyFz_$tp)K52Fak#3edk|@{T!KA{TI81NV7}-D4#>p=)SD{QjEn#zF@3j$?P&2I4)= z_GBECJooSQAIqKaPsXiA4j1S#GUt8$9CW6}HHphQHT<(WPu}~}q~A=jL{y1LtUM^` zO)h}wU5eFYp0I_UC&qVIS@uPR{CrHGiEY9AnA_ZC>i{v{MW6d)KhPJ%{?O>L69=w2 zKzyse<{jH2TIYL7y=)sdMz~W&lk4LP(4D%!L1Kt={qMDPKV|qQCr9^CEIXTo#ip$m zo`Za>UoThH+hox|=8JHwpbwfy^hrzh*LNnLh-tz)pr@xt^M$g|CgY~e-)+WBfW!;8 zV3?K7z&Yk`O>h3n|0VAu@1*5V{1Ycfp$<7Ej?%}V;~G~lDL=XH8}Ink|1haOrC6eR zg@oKz2~8)D1y^^Gnx0nkvaU*t4y5H>o-ra!|HKROjq{nJqN4O~C>Q2+Sl5~R%-qUM z;1_+}{xV12ah|fZ)~wdhfVWFkmy679X*=w05R>w3L!B3+cw))Z{(ndc9VG6likolw zNij=yPDYiQ23Jd6y~&fWmBX5Psw}#)Qgvt|1`gQ-g7|JPXP8BQX2T+wz)aE#ZV@78$tKV;K zG=1GxW!C)mp+T3KN&na_6W{oEJTrgybd?}uTR6@^m-V+gZb`mle2#u#o1n%*!|O`s(XK=a?ksR#yz3yjJ zDcPHqrqctB!@D}G%sbjD&A)!B8dmqEVc6R@rG^Ew=Sh4Nm0+v3nK&bh$k&3zD*gSX zs#mX)soS$#skXD-{6*Urvo}5M7H_{co4syqG=1LqWmsWjyJ=Qcn{n!ft+EAn&H{M? zVyyR^=L#;a0v+WYWS+{Wk(EP<%-JKmwqO1)G5wR*j&A#Ql9Yux!II9c;o^D-Lx>?a zmaGPSJlCy(&I*XIz93fu8yf@Eb-2nDlsH<|wYln*)i@i}bhw^r7;;?_kz+lo zZo#>_4)lgx09mo6_53`JM8~M||8sTxCoKN+Q$!Zp#4b&3Vz4j&!pjo_q5>~LO$fkH zxCitl>On{5F{sPG2Td6=`cE7_J;4Hy=U-jJ&pYcY2ge8^N2(sBrP=>(8nN)t$@r@~ z07zixD4bC#r6^9!gD8p}b8;7BGyOAtK?go%6adbk;Dx1_lQEhs%*mWV5awjul+Gx? zMv$b<-@-#yIrX{?ZR_apX5BHSx4_FddA+AbB(wr zZMW`>nDNRhLW;*hnx9~kiBI=`CXM{2z|6OKHBlV#Z8FltzqBNFY<9{Gx#*A`B9|5~ zbIzT$WlRIfNR$ z@G`dm^SPK0uN{2!zwbL&{_zZ#Hi~_Ji+8QV4QNJy`L zN)&8)aus%#--Up*gRuGBafrK_3Gp|xV9SXl*nBn#7AEb6W$A~(`%rL?!;+a_h-dwY zg^P+HC~~^}p{VK9^qN23`EU1h2FcunwCN{_FLCVUkWq(ks7JW@sJzv6vV~Qd$#C%N zGuU2|4n7A$!DoLc44X0*T)chZ;rnKIOyb2Km9^4a5y3zdkhKHy$^3I{!g+{Kxej}i zQek0m5ZI5l0}(Od7G816npA;re2@sqf4RPhQ$LE1W_<~XpLq+)@-B0@HtCu0Jl7pP z45sfUIGCGBbPU|e>xr--_cV!pDxl-VF^0%xtv}p;Qbv!B;rvJ;;Q{AO5Hk^dfNYX)Pj zx;#mIF2=d+{CEfUROivLV2JM+9211GPP3CDU~lq8dK^FdMFkzxo?qGwyW*2+JY&k) zRM@yVgv24N9>A?4ZU^y;h*>5$ygN+#|5Z+OCmDFzw_X=EH+9l`y`?yvjxRp=^~v93 z6$w9KuQOnZ-#mEmt^v;8Dx}w6z;y`n-Zv7gMhC4o=^2@H+`-3>A0a3xh{lsMV=xet zAt22ASZOTjbkgYwW%X^Hh`-`z;a4{L=i4C6razLJVBoEzdE5zCDD#=&u*825m2kce@{_&@<6-htX^_R}bz@7Y>< zjzw0}}FnI0W1U_UtI4Bka<%#%I#NHw<4RP0qS;d6- zHN@~?Li{tvV<3i?8M7T48j5k6=f0=%`y+jv(ILrUBPA%WEq^!s^-W?I|6XU%)3u<%q29oMlYGYRyE4y9u!5L;7LRz}BCA?}(PON@LV-kym$N85vCfyd;tnKXY` zKFBl1n~-?kUP9h9q;X02fO*Bkfm8CoyC|Bj0wV+ZsY?of0(c?U|C=s z48{fE`UsdXmQ+B5V^%-u1I@z#C!#Wp4F(RTuxk+gD9f$SuE8uKW4|NeuppVV{g)2X z>lI;L-9Xm0nZ15F97#C=r!Sm`^OrBeIf6;Ocs>nsiOdnBC@wAzXxmYjwr}4~$08#w zUS3{wS)hDT*AbJAu~@i<1=d^S4Rr`{+PGmok&%%m=si1HflP_LnT+U_Z%JB~t!mZQ zp|8SUXZ|67LO-@w7<-IsEMS}_vn-Ie;G&B#b*2|BpP&81cmeWwIt~Hr zIisnmN%MmB0OgE{8IOQ^gk^v_g!`ypxDJEA|6+XJw=!T-PEj&CtgfyeB4r16OV>ue zx$y`6e-lfCapg*ST0bM5K8JdX{_1 zfEm+-dV+FA%pc-iF{Yh~`9=GQ^&J!Ph4ljU3wg!*j`e@oFw;8Xv&u1P|CX1xeI53K zU;+C^PBQyj95>T8VGO&|+6D08UB4~=8U5zw<~02{*3FDd!x$8_{}_XBZ*NcgJ>+Al zG|kvPpzdIsfplY>7RGO28-a1`M~)nBCp052mrkQ*a_eyOFsh()cm;eJ0n^6uz>W_& z1A5M+^=CQ8?@ZgX5eoA1eos3O+KO?3B<7)D*>VS#&^xujv!**a%+J4Bq-e2Z} z---K3zln(nO%r(^9Y=xdWS}fjwrG=ZErGPOG&+tF?JV-Zj3q#GUzi@k}Rc z;Giyy9z7axj)WQKinbB$4%#J5=qE4}a}5NPHPVaq1bq%{6EG%5eu!Kip}eY6_td3*=mLeC3PL7S;x;4^bTAuQ$^?> zh|%dNHHRe|MnVkngZGoQ^?s)Ncn<6DShA)?O;vvz$@FI?l2`+zmARn~p-!V6WyT^i z*IGhf2w3ljppfsVKT1rHc|WkA+P9Gs?2n>IiFJ3$_*M`0^>J-*hq#Jn~+zwO{ zoq0?Ap!&L6=jBW8Q@oBSXOVkof`5*Kn4vFBj zb_Gkrlx-_uUo-LNNPGKZIV6y^1cp013?`q}@xgR6_pu#7JBY`)t{KV`^#$uO`bEry z`v;TGz~17$G=>E1LmL0L?$M>m%+p6iXyDI;?waw6f*in85<}4<-)NiT2z8-`~tP+#v!MTIu z1X#6lA+Qk4A;xQC{lNY%`l8rQG4<)ytCw)<(ha!r=mWjh-+@zC;e1vxY}>H}uAH0F zcO!j8i?9sW$t4fCxu>>pvEJ!aA0a2tQ3q{SolM%l%ZV7s~rUvrUGPcii`Fg z(Dy{0K>bD@u_d@1`Xt_?^v6lF#cVXp~BM`S|FYT}2x|iP{Q$fZ`5I2W7 zYs?XEzvtLF8b5zEMUUv@2sj?6K|crA7((9x>m&9FZj(5q3s*DX?Cm1hm5>U#uRg-H z`}y#=tP*n4&Bz=anR~1s-t9L>vPQv}eNhuAvQVEWstUAahnn+b-MXmLf$i5%c_8%5 z$^3zf9%7&kCL=7Nx2G3w=RJkow~aKtxo_&>z^QAncufend(Q!jQFdTOWbZ*@);wI* zq4}*DbXD}nN}+F!aezfd#qhZ31?1h`2ZxS_z@_UuAv0qEWM49Xl3Y`Gc1xu{-UIcy z!|JQBC|iBNKJnq*{rxTK4h#`o8Y;1K)lylE@Bh9IGs}R~WqFzJaSVbaW-TF^tf@lA zMVNRM#Bbat>r`%z+z+w}%A}o?r`M<)ZSkcU>aM_q#tt}Z%Z$DLu2l@#~y}@cb}3NqzowjR0VJIhz=84dWbAj z4yi)a_VMtsP~-P7In7o*Q(Q#*%pLg-0BCU&+t8l~RRl|=H_=_VDDQ?|FX8#mF%~4Q zLSMT-=7Zccz{e^QCxo#hgXzb8EC|4!L)7Ot{7D8=@PiiXC^Zr>OvM`Cm=|Exnqe>~kJ2Ixi}hMJhuu^t$k z_C5Xmbr{cKSsc4~o5V0ylenQec#t!%UpJU~`MY_wWncIv1u(Yaz54`I2YmmbWPTQt z^;e2LCR={oj2U7d8{Q1-$LDS;XF4$axB< zZx#UJ_mTcnH}2Chm%GWB^Y!#4KrpyJw-JNi_ual_U;RtdULynEzOZw0bC$NU(7H3@ zhk4#}ee&`n$Mc`OdRD6y2*2Oe1A-a5m8whPOvOq2(~m@0%cC!#0ptQUQHqb8s3r9BNZ3Yc5`wu+ESmW`bPJP@by#s z{r|~0#!lv09)YsNlm)_Z8&}J9keJ!;pyvh3w z{UNy1*ZD@>h9*1}Cmt!!3~dznWqir^)b}5eewmP&GtZV$)&gI;s?EP*ybAKr{=ot! zI{o2aVqCn8Oh49KO;a0E?-bGcf;z*b8*?m=<5%tiVt_yY9e%pTvagoddL?Dfme2&* zP00kY&ZKeJpz${5xxu+96YtSUF$`VXW})0o!~skeRPZn zjw>)2{l`3H-MfW>o8VS)86C5WSWv|OV~m8TxD@E?a6=PWe}-9}f69s7D=jkW8fMDZ zxp=E&co}F8F)8oYc?W_|`<*oL+ax?$- zi04H-C;IfrlZuK8ja8mFbtW7oI8GyTE5c`g+dY4lH1wh$Hn@(``~5iW=CWZe=4Slu z>-I};ybMDW^k4PUKC|(kO?6Ler-w+%U^~T#Z4(m}l4d4hztEUDCuQ>;D zQgR*rw9l^o&QsH<)%Hel&@J>#F-;+O%qgOq-4gch;P6QCHG0;iazi&jBy`@=cCRLjGay$gB_K zJ^*=^u`7AiwN1EoIF1$i^uFBieoLMCr@cFsI|T*4j}^enG1i67iJz>i!9)CFqW47h zB<`lSr`nq?^UW%QRAwfx>$Jm?&s1fyFq}qkw~U{-M^DN-uq*k$!xO;MFf+? zvM@qt4G-r?sh(Ulyp-qF`& z`L(^qys7?^Y4w}ehHuVZP%ju}#aC=Hnr9nXS5ZC&__(RP{crWH`DeQRBdxzWHZK3Z zEJ>%AGIin7;FV#_HM8N};^8N9Wc*~|g3)$@byKH`bw%z}sMr~)SifVZLgkil`B&Rx zhTNDJAdxb0w$KJKEmq$xcO(@Ej*X4l@CRPN^FP2n{EB`&Z(R5Pm3Ad?RTXReASjC9 zf}()P1zE(%+z^XBeU>PN$}9PAX}a3yE=66jM1|g zI!pfz?~rx_rzdtE6tKq7Ib>BQhsjGj_8vaJt(8MSE93YlhPqG5vPBVkmqr)`gzkR~ zT!q{pI5I)W9Vw5U(9*#}(ncB!78s|TFH$A_h@ELdj=LlYo|Bv^BuNatJX2QUd)=2( z?iS+zoR;8wIpt;*pE-@i|K$|d|7VC*-7iu(Uk!OB_+BoDTt1C*i|66b@^gvj<>!>2 zUryzEA>_w@P=BJ{D!Cf)nQv4eN# z**R2EUtiw)AHMl}i}1?q8I+}S-RfLNn{WB|9=>xdSCkAm9&qtWwoHx zY;MSG!$T9oTpx{|`$5CVrBUP=GlM2CkEPk4C(-1^pO9C02)PE0;j>}fE3|Z_cncp% z@TaE!`p?F@pUBoQd{xJoi3^7Rq_eFWZFW&%j1-Zc1S0YI61b7acxyknaC-kNs7h7qWp<%9s)in85a6i#NCI zRsxw3)k-dnrhHs021qtIXW-9d!+$UM1Rv)l)9|QZ%HEob>;*0gn=@p}a)G75<_nuM z>H#)g)QJxB;a-+2e}2=~^B!;q`8nkj)q>xYWWKjkg7luE2U>m?G5#_o7J`5ZUWk9g)X?;kR>!Vr+d3v=yH8mqa$VWYg zZBM1Z^pyga2j@fJNwcPj`!)Xr1_lbB$H0K`Y_n#~68?{YDFM3xJ_igKb%W2aNvEW& zBkqQlav3^UYq?})+1&g%DMZcdfel}-e>oj7FGN$cxJLe*kKnh!){Qm>{)T!-C@wA* zDgFR+Lp=Zk<9n9L^0_Q=wRatVTCv83eda0spvy8f)5+<}>GxlMQ|E^Z;CGM@TRr#$ zXk%c1u(v}FWTGtKqT##)_{D;4-f#Ta3$pyqrrJNS50}SzUnpo~2toy&Uj8??$v7CgidD# z#>TeH#HH4>?(wU~o|(JS=oiMgAWdHf)&q3jU_xTM+mv-T`oh&^LhR z0KW%Lo1VS_?KY{JZ1wyDjm|-L6uRFd7xIlBr^aG5>%ebatSnmK)o6D)0#C&?uu$MF zcvi?lc*x@rxJyW@xliDI1y6|k-Iz0Et~Yv|Av;NRRog;-D(g!=3qlA!sWs&XB`;CS zm*vVS{LbSVe&_K{V7!yL7g+`0Q}TvvidmV==W}K9vu~z(^A?iAMe6e<>Fc@;GuThR zx~l!?0bhH3*?|J)zDp^pKA3p-D22?KDde9jzd>IA9#7EiV6%k&zj}!i1&lMIe*OB3 zJ`eeL-%CqRP$6?J;p=WgelcZaC9#g(pM1v}JSQ5W*X_Qf-P^UzH@p|P89tD(xCeXr zZbd;Et0;J3glNwn%C0aT^SkiT0emANjnA7pex2?AF2ws8MIC@cfLKv+m2&s;oUw5y zWIi(Tv^Muc_-_^aJjTk<*p?p;52?lP1x@ zi?@Ug=fsT~VOzHDY0vMS4h`mgq0x~;i0VCr{PpYk9X!5|PVIH4iwB*lzKZQqz^GIh zRPA-gr(LXcGDYv<%xkI7>yfj%u^+!i{T*dk8m;7+K|W#y+Ztut5$fQ`Z> z^LaZbvtZw+=RY~q&MZfIRyE)iwhU$d%Rf=j_?V7kIZqLCcn_5OFoR=^(KNwX;n$0Q zAR^lPBKv=8l&?Gs4R)Z+qJy+;|51LvzhQrV?DC?gUF%1@r^XP%UBId5^STyhmgZGY+>%_-4aCWdD!mkpGMYbmuht&1+`AX#{(3w*yrz)lBK5(Zp>dM5qM(}(?D4SMi07zvBlyJN zZ$<3XX(U-&eNVGuk|~9KM#47*?9lMbb(HbR$>U7beXLnMJaBH9;@5>T4qFCF*Om4k z$kq&>lYZ-g|7x3Aeyp$3r!x1)=uk5uTebtf(ce?pyybo%r#pH5`_ZKKN(`%68#py= z`^JvOh8TXcvaaK+Nt&vH5WUtxVWWGY=7uBuT2t+1B}a?DW-P&sbeQJ>-vsbUD9gq^ z{2?QJD2?0p<>zj=SOw24=-MW8mU=97^ zOw%ScVoS0u(bTLvMJ-L>zIcS3-+o8b(fx}&wlsNmC%RVFzplTNUg>S>rGV_E%5kdn4o>{6LvEuKy~G)TkdrOYO*+bB!<8JsxyDY`Xa~V8eWGlh~q#7TrGW zz|W2`&Z+*|x&GDOqdQg(4b-1}iMp|tElCp|{yo{RD%UPD)9-4lJ%4(5*WK&Z^|&`T z%=EWUS6Do`bJgLO>`k`!>ucV;^Q3lAMNY2m)ycs|#eBXZ6F;2Qq(ivv0Yqr=#w2TSwjKuCHs48#=EoJ8*0i=JhxB3sH$K?!fl1g=|W2 zhdF_}A@?bpp zB&jb)wVi@h#Q%2gaP7l4`3_~^2hch5xQ#BMraypKDb(JgDbx=W*5r{oc1o zHnNfY`Ip^QKbI`s{<<&3Jk}FGB?_0eUhd)&5M{sp!*z3Nr=~7>_F=|~7t3-p8w$(H zX?tloZ7ezbA}()BePGPIKNMEx*^-ge8aEsDY;JQ1eFPJ%smObJnyKON4|^^j672IL zV&7)=7hWjVT3G+jSQAg@?$isvkKb-TK;PvR3Xb;q^A{*8I^s^RK_-1fCNKRlRfw)G z87U;wpw#d}aGRk|LSKds1)T=xPEJi-!RLkM(ed)zv~AA;%E>RHbIkvRu7LI9hK%$F zZbKc1B71#P{a|O=Eiu4)NK*XFWALKW_fvY_`9AN68O(?}@z~eZlAX zK(E9)8}(CNXEgFcDavMq0FQwD8+f8Dv^8^fQaJUk`NdRoZ) zRB*N_Y$fsgbLr0Yo9gxRVm`wJYh~zz;L9Qf=MiN`J;82(HT$%X;Bt|Ddr3cTiSdrK zywT579-dU{$r?K9=jHo^ULy-Yp5W)AUZ4{~??c_7USvHH966Q?4ZN3=uU^;B;w|p% z-fTmORVB?hd7oe1PvS{5iY)GZ^mv7Qu_Eij@ckhjzLUFN!X+Lu}tgL%;Jyfx-d7ARJ z714J^+iAywQy_w=TUW5T*X@-jQ$ADoTdFvl)1~9@(Y*^i*RoI9rSr|J-;C5X z|LUGu%jHSktZcuxJiI6>6h4z#hUU79vAAC@IMN3b3=i>qE#?E{ zk1%|u!H~_VHnq$*Z1|lqd)ppLUx+PR+R&)6Iqa9Yh&FNEpq>hkTp|C7tW(suG|B(j zt+yyC-lBSWb~g{?Nk5Ng`~SPR6k%jghp?P<=7Q9FG|2wu+O%m)0|vbC5p)Cpy zRnW{}tETHVF8jWG`?~QnIz^^EF~Nidf7c@4sE5iW4Uvu3kdf_H?=O1&Ir9!1;QJE% zXZYtsQt~WJl%`#eYY}7|gj9Spso7`7;jeP&oKq}bMvvR-?z4`o#i45tM zn8F$}S6#(DRLSTlwXkz*<(#nAA~9yZ`PGr$hR@%2Ye#cFHf`{q(B;L!?|VPJaely) z?9H~Nr}@QO>OPoU1ggx^do;|KFIZ=SxYuo1`1Fv8(a)I3ri)I>ihb(Qd6@ zVCO{t8Aee75uH7wH+MC*o5&|@r~*A2BaHxWNFy{z3mF?yFkaMNs$>AHgkNgJSb$n0 zYW%p_rIz>|ev5l5MbzcI6pXXEGxoMn;6)wyJ`0ZOb(qedufsxBHgvA)7V%%T_MV;K zoIdl5F$bnD8hgxpws(CDvTgzc#h`N2>afi?`(Nx5V$(yhFLPlE=7DzTF_! zJv(_X^QS3kv?V)-#`un0#Q8|Cjpo8=gkdv1rotu;yD;W+tUu=LPN%dj1$6S_RVqDM zCgz{|`e*cE$ka`^brdf`5o}$%JFlrcpuP|L9I=;e4C6;wL%?x zxBmBX^*+q7y%}O&z#r@{fc+5meAo%GF935B%Al||9cgT>Gx_QDz6~*@J4E^M>~YtA zpvTp0(%=AJ@7RL|TO-Z@#To+hJ?7My1<}cjWq-uBK1$7>%zJ8;Si`(hC5{2!GyKpE z9z0m&g*rg_f8=?*wwC#RVWIgRqYZ+@cz4^8;I_2earV!kzku8PYNFwvR!#jO`M z*fO4P*XI=T{K0$hgIp5(yw}>}(PgEcdSXX!YGZ6nnc2B?lsVz>%ReDFf-1|L$klx$ zohi+u;(edcm9s%Sh72MTJDrI{o-K>AdI>)JnY~JX_pzUTDRgn1EZcw=n|j7$7Ad2qy>#*D(91$WcAwt zvTA~h_88o9P)VWv^Y!soVoWn+j!-f`KgP`|ehQ_0p5yjzwSVR_zg?rU!(|v-qk0!i zrM};7vi)(&q^_(N165b*#pl`2E}z{%>(}=9alpjZy-@DJztDf(M;dr8UfF%k@;LKd v%%LgTl5Z35FhWl~cnS_9GT~4I44y~s5+3?udFVm>vmk$u-{PL93Q778_j@pK diff --git a/bauble/paths.py b/bauble/paths.py index 2cb9601ac..0a49615b8 100755 --- a/bauble/paths.py +++ b/bauble/paths.py @@ -2,7 +2,6 @@ # # Copyright (c) 2005,2006,2007,2008,2009 Brett Adams # Copyright (c) 2012-2016 Mario Frasca -# Copyright (c) 2016 Ross Demuth # # This file is part of ghini.desktop. # @@ -90,7 +89,7 @@ def installation_dir(): elif sys.platform == 'win32': # main_dir is the location of the scripts, which is located in the # installation_dir: - d = main_dir() + d = os.path.dirname(main_dir()) else: raise NotImplementedError('This platform does not support ' 'translations: %s' % sys.platform) diff --git a/bauble/utils/web.py b/bauble/utils/web.py index 97a15386a..5d6358756 100644 --- a/bauble/utils/web.py +++ b/bauble/utils/web.py @@ -2,7 +2,6 @@ # # Copyright 2008-2010 Brett Adams # Copyright 2014-2017 Mario Frasca . -# Copyright 2016 Ross Demuth # # This file is part of ghini.desktop. # @@ -32,13 +31,7 @@ def _open_link(func, data=None): - # windows generates odd characters in the uri unless its in ascii - import sys - if sys.platform == 'win32' : - udata=data.decode("utf-8") - asciidata=udata.encode("ascii","ignore") - desktop.open(asciidata) - else : desktop.open(data) + desktop.open(data) gtk.link_button_set_uri_hook(_open_link) diff --git a/scripts/Add_to_PATH.vbs b/scripts/Add_to_PATH.vbs deleted file mode 100644 index 38dbb83f7..000000000 --- a/scripts/Add_to_PATH.vbs +++ /dev/null @@ -1,31 +0,0 @@ -' -Copyright (c) 2016,2017 Ross Demuth -' -' This file is part of ghini.desktop. -' -' ghini.desktop is free software: you can redistribute it and/or modify -' it under the terms of the GNU General Public License as published by -' the Free Software Foundation, either version 3 of the License, or -' (at your option) any later version. -' -' ghini.desktop is distributed in the hope that it will be useful, -' but WITHOUT ANY WARRANTY; without even the implied warranty of -' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -' GNU General Public License for more details. -' -' You should have received a copy of the GNU General Public License -' along with ghini.desktop. If not, see . - -' a simple script used by the nsis installer to prepend to the PATH -' EXAMPLES: -' cscript.exe Add_to_PATH.vbs /path:"C:\TEST" /env:"USER" -' cscript.exe //E:vbscript Add_to_PATH.vbs /env:"SYSTEM" /path:"C:\TEST\" - -Dim wshShell : Set wshShell = CreateObject("WScript.Shell") -Dim strPathToAdd : strPathToAdd = WScript.Arguments.Named("path") -Dim strEnv : strEnv = WScript.Arguments.Named("env") - -Dim wshSysEnv : Set wshSysEnv = wshShell.Environment(strEnv) -Dim strCurrentPath : strCurrentPath = wshSysEnv("PATH") - -Dim strNewPath : strNewPath = strPathToAdd & ";" & strCurrentPath -wshSysEnv("PATH") = strNewPath diff --git a/scripts/build-multiuser.nsi b/scripts/build-multiuser.nsi deleted file mode 100755 index 44b8079e6..000000000 --- a/scripts/build-multiuser.nsi +++ /dev/null @@ -1,609 +0,0 @@ -; Copyright (c) 2016,2017 Ross Demuth -; -; This file is part of ghini.desktop. -; -; ghini.desktop is free software: you can redistribute it and/or modify -; it under the terms of the GNU General Public License as published by -; the Free Software Foundation, either version 3 of the License, or -; (at your option) any later version. -; -; ghini.desktop is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -; GNU General Public License for more details. -; -; You should have received a copy of the GNU General Public License -; along with ghini.desktop. If not, see . - -; -; NSIS Install Script for Ghini -; - -; Command line options: -; -; /AllUsers or /CurrentUser -; /S Silent install -; /D=PATH Set $INSTDIR -; /C=[gFC] Install Components, where: -; g = Unselect Ghini (used for component only installs) -; F = select Apache FOP -; C = select MS Visual C runtime -; -; EXAMPLES -; ghini.desktop-1.0.??-setup.exe /S /AllUsers /C=FC -; A silent, system wide install, in the default location, with all components -; -; ghini.desktop-1.0.??-setup.exe /S /AllUsers /C=gF -; A component has failed to install (e.g. FOP mirror is down) so you rerun for that component only - -;--- -; Plugins, required to compile: -; - -; nsExec (included in NSIS v3.0) for executing commands -; WordFunc.nsh (included in NSIS v3.0) for comparing versions -; FileFunc.nsh (included in NSIS v3.0) for command line options -; MUI2 (included in NSIS v3.0) -; UAC (included in NsisMultiUser) -; NsisMultiUser (https://github.com/Drizin/NsisMultiUser) -; nsisunz (http://nsis.sourceforge.net/Nsisunz_plug-in) -; Inetc (http://nsis.sourceforge.net/Inetc_plug-in) -; MD5 (http://nsis.sourceforge.net/MD5_plugin) -;--- - -;------------------------------ -; GENERAL - -; Global -Name "ghini.desktop" -!define VERSION "1.0.68" ; :bump -!define src_dir "..\dist" -!define PRODUCT_NAME "ghini.desktop" -Outfile "${PRODUCT_NAME}-${VERSION}-setup.exe" -!define PROGEXE "ghini.exe" -!define COMPANY_NAME "" -!define license_file "LICENSE" -!define readme "README.rst" -!define startmenu "$SMPROGRAMS\${PRODUCT_NAME}" -!define UNINSTALL_FILENAME "uninstall.exe" - -; FOP -!define FOP_MIRROR "http://www.apache.org/dyn/closer.cgi?filename=xmlgraphics/fop/binaries" -!define FOP_VERSION "2.1" -!define FOP_BINZIP "fop-${FOP_VERSION}-bin.zip" -!define FOP_MD5 "http://www-eu.apache.org/dist/xmlgraphics/fop/binaries/${FOP_BINZIP}.md5" -!define FOP_JRE "1.6" -!define JRE_WEB "https://java.com/download" -Var JREFwd - -; Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022(.8) -!define MSVC_GUID "{FF66E9F6-83E7-3A3E-AF14-8DE9A809A6A4}" -!define MSVC_DISP_NAME "Microsoft Visual C++ 2008 Redistributable - x86 9.0.21022" -!define MSVC_FILE "vcredist_x86.exe" -!define MSVC_URL "https://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/" - - -;------------------------------ -; COMPRESSION SETTINGS - -; Compression -SetCompressor /FINAL /SOLID lzma -; default is 8mb, setting to 64mb reduced installer size by 1+mb -SetCompressorDictSize 64 - -; Other -SetDateSave on -SetDatablockOptimize on -CRCCheck on - - -;------------------------------ -; SETTINGS - -; Multi User Settings (must come before the NsisMultiUser script) -!define MULTIUSER_INSTALLMODE_INSTDIR "${PRODUCT_NAME}" -; registry keys address: -; [HKLM|HKCU]\[Software|SOFTWARE\WOW6432Node]\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} -!define MULTIUSER_INSTALLMODE_INSTALL_REGISTRY_KEY "${PRODUCT_NAME}" -!define MULTIUSER_INSTALLMODE_UNINSTALL_REGISTRY_KEY "${PRODUCT_NAME}" -!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME "UninstallString" -!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "InstallLocation" -!define MULTIUSER_INSTALLMODE_ALLOW_ELEVATION ; allow requesting for elevation... -!define MULTIUSER_INSTALLMODE_DEFAULT_ALLUSERS - -; Modern User Interface v2 Settings -!define MUI_ABORTWARNING -!define MUI_UNABORTWARNING -!define MUI_ICON "${src_dir}\bauble\images\icon.ico" -!define MUI_UNICON "${src_dir}\bauble\images\icon.ico" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "${src_dir}\bauble\images\ghini_logo.bmp" -!define MUI_HEADERIMAGE_UNBITMAP "${src_dir}\bauble\images\ghini_logo.bmp" -!define MUI_HEADERIMAGE_RIGHT -!define MUI_COMPONENTSPAGE_SMALLDESC -!define MUI_COMPONENTSPAGE_TEXT_COMPLIST "Or, select the optional components you wish to install: \ - $\r$\n$\r$\n* Extra Components marked (Download) will require an internet connection." -;!define MUI_FINISHPAGE_NOAUTOCLOSE ;allows users to check install log before continuing -!define MUI_FINISHPAGE_TEXT_REBOOT "Rebooting is recommended but not required to start using ${PRODUCT_NAME} immediately" -!define MUI_FINISHPAGE_TEXT_REBOOTNOW "Reboot now (required before using Apache FOP option)" -!define MUI_FINISHPAGE_REBOOTLATER_DEFAULT -!define MUI_FINISHPAGE_RUN_TEXT "Start ${PRODUCT_NAME}" -!define MUI_FINISHPAGE_RUN $INSTDIR\${PROGEXE} -!define MUI_FINISHPAGE_RUN_NOTCHECKED -!define MUI_FINISHPAGE_LINK "Visit the Ghini home page" -!define MUI_FINISHPAGE_LINK_LOCATION http://ghini.github.io/ - - -;------------------------------ -; SCRIPTS - -; NsisMultiUser - all settings need to be set before including the NsisMultiUser.nsh header file. -; thanks to Richard Drizin https://github.com/Drizin/NsisMultiUser -!include "NsisMultiUser.nsh" -!include "MUI2.nsh" -!include "UAC.nsh" -!include "WordFunc.nsh" -!include "FileFunc.nsh" - - -;------------------------------ -; PAGES - -; Installer -!insertmacro MUI_PAGE_LICENSE "${src_dir}\${license_file}" -!insertmacro MULTIUSER_PAGE_INSTALLMODE -; this will show the 2 install options, unless it's an elevated inner process -; (in that case we know we should install for all users) -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_COMPONENTS -!insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH - -; Uninstaller -!insertmacro MUI_UNPAGE_CONFIRM -!insertmacro MUI_UNPAGE_INSTFILES - - - - -;------------------------------ -; LANGUAGES - -; MUIv2 macros (must be after scripts and pages) -; TODO add more languages? -!insertmacro MUI_LANGUAGE English - - - - -;------------------------------ -; INSTALLER SECTIONS - -; Install Types -InstType "Base" -InstType "Full" -InstType "Components Only" -; Custom is included by default - -;---------------- -; Main Section - -Section "!Ghini.desktop" SecMain - - SectionIN 1 2 - - ; Install Files - SetOutPath "$INSTDIR" - SetOverwrite on - ; package all files, recursively, preserving attributes - ; assume files are in the correct places - File /a /r "${src_dir}\*.*" - - ; Create uninstaller - WriteUninstaller "$INSTDIR\${UNINSTALL_FILENAME}" - - ; add registry keys - !insertmacro MULTIUSER_RegistryAddInstallInfo - ; create shortcuts - CreateDirectory "${startmenu}" - CreateShortcut "${startmenu}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PROGEXE}" \ - "" "$INSTDIR\${PROGEXE}" "" SW_SHOWNORMAL \ - "" "Ghini biodiversity collection manager" - ; desktop shortcut - CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PROGEXE}" \ - "" "$INSTDIR\${PROGEXE}" "" SW_SHOWNORMAL \ - "" "Ghini biodiversity collection manager" - - ; Register pixbufs, immodules, pango - ReadEnvStr $0 COMSPEC - nsExec::ExecToLog '$0 /C gtk\bin\pango-querymodules.exe > gtk\etc\pango\pango.modules' - nsExec::ExecToLog '$0 /C gtk\bin\gtk-query-immodules-2.0.exe > gtk\etc\gtk-2.0\gtk.immodules' - nsExec::ExecToLog '$0 /C gtk\bin\gdk-pixbuf-query-loaders.exe > gtk\etc\gtk-2.0\gdk-pixbuf.loaders' - nsExec::ExecToLog '$0 /C gtk\bin\gdk-pixbuf-query-loaders.exe > gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' - -SectionEnd - - - -;------------------------------ -; +Components Group - -SectionGroup /e "Extra Components" SecOPs - -;---------------- -; --Apache FOP - -Section /o "Apache FOP v${FOP_VERSION} (24MB Download)" SecFOP - - SectionIN 2 3 - ClearErrors - ; as its a download we need to inform of section size. - AddSize 103424 - - ; Check for FOP - nsExec::ExecToStack /TIMEOUT=9000 '"where" fop.bat' - Pop $0 ; error level - Pop $1 ; output - DetailPrint "FOP check - error level: $0" - DetailPrint "FOP check - output: $1" - StrCmp $0 0 0 DownloadFOP - MessageBox MB_ICONINFORMATION "A working version of Apache FOP was found on your system.$\r$\n$\r$\nThere is \ - no need to install it now and it could cause conflict to do so.$\r$\n$\r$\nShould you wish to upgrade to \ - version ${FOP_VERSION} or to install for all users (administrator only) you should remove your current \ - version (including the PATH entry) first, then re-run this installer.$\r$\n$\r$\nYour current version of \ - Apache FOP was found here:$\r$\n$1" /SD IDOK - Goto DoneFOP - - ; Download FOP - DownloadFOP: - InitPluginsDir - ClearErrors - inetc::get /caption "Downloading Apache FOP version ${FOP_VERSION}" /canceltext "Cancel FOP Download" \ - "${FOP_MIRROR}/${FOP_BINZIP}&action=download" "$PLUGINSDIR\${FOP_BINZIP}" /END - Pop $0 - DetailPrint "Apache FOP Download Status: $0" - StrCmp $0 "OK" MD5checkFOP FOPFail - - - ; MD5 hash check - MD5checkFOP: - ClearErrors - inetc::get /silent "${FOP_MD5}" "$PLUGINSDIR\fop.md5" /END - Pop $0 - DetailPrint "Apache FOP MD5 Download Status: $0" - StrCmp $0 "OK" 0 FOPFail - md5dll::GetMD5File "$PLUGINSDIR\${FOP_BINZIP}" - Pop $1 - ClearErrors - FileOpen $0 "$PLUGINSDIR\fop.md5" r - IfErrors FOPFail - FileRead $0 $2 32 - StrCmp $2 $1 InstalFOP - DetailPrint "Apache FOP MD5 check failed" - Goto FOPFail - - - ; Unpack and install FOP - InstalFOP: - DetailPrint "Please wait... prepairing to extract and install Apache FOP" - ClearErrors - ; determine SHELL_CONTEXT - StrCmp "$MultiUser.InstallMode" "AllUsers" AdminFOP - - ; Current User install - StrCpy $R0 "$LOCALAPPDATA" ; Dont use $INSTDIR or FOP will install under Ghini. - StrCpy $R1 "USER" - Goto UnpackFOP - - AdminFOP: - ; Local Machine install - StrCpy $R0 "$PROGRAMFILES" ; Dont use $INSTDIR or FOP will install under Ghini. - StrCpy $R1 "SYSTEM" - - UnpackFOP: - ; Unzip FOP - nsisunz::UnzipToStack "$PLUGINSDIR\${FOP_BINZIP}" "$R0\" - Pop $0 - StrCmp $0 "success" ZipFOP_OK - DetailPrint "Unzip Error: $0" - Goto FOPFail - ZipFOP_OK: - ; if no errors unzipping then print a list of the files to the log. - ZipFOP_next: - Pop $0 - DetailPrint "Extracting $0" - StrCmp $0 "" 0 ZipFOP_next - - Call AddFOPtoPATH - - Call CheckForJRE - - ; $R1 = 0 if java versions are equal, 1 if newer than required, 2 if older than required, 3 if none found - IntCmp $R1 "2" +1 DoneFOP +3 - MessageBox MB_YESNO|MB_ICONQUESTION "The version of Java Runtime Environment found on your system is an \ - earlier version than is required by Apache FOP. To be able to use FOP you will need to upgrade \ - Java. $\r$\n$\r$\nJava Runtime Environment is only available directly from the Java web site. \ - $\r$\n$\r$\nClick YES to be directed to the Java web site after this installer is finished." \ - /SD IDNO IDYES FWard2JRE - Goto DoneFOP - MessageBox MB_YESNO|MB_ICONQUESTION "No version of Java Runtime Environment, required by Apache FOP, was found \ - on your system. To be able to use FOP you will need to install Java. $\r$\n$\r$\nJava Runtime \ - Environment is only available directly from the Java web site. $\r$\n$\r$\n$\r$\nClick YES to be \ - directed to the Java web site after this installer is finished." \ - /SD IDNO IDYES FWard2JRE - Goto DoneFOP - - FWard2JRE: - DetailPrint "forward to Java download site = true" - StrCpy $JREFwd "true" - SetRebootFlag False - DetailPrint "Reboot flag = False" - Goto DoneFOP - - ; Error with FOP install - FOPFail: - MessageBox MB_OK|MB_ICONEXCLAMATION "An ERROR occured while installing Apache FOP, installation aborted \ - $\r$\n$\r$\n to try again re-run this installer at a later date" /SD IDOK - - DoneFOP: - -SectionEnd - -;---------------- -; --MS Visual C runtime Section - -Section /o "MS Visual C runtime DLL (1.73MB Download)" SecMSC - - SectionIN 2 3 - ClearErrors - ; as its a download we need to inform of section size (Approximate only). - AddSize 12186 - - ; Check if the correct version of the MS Visual C runtime, needed by Python programs, is already installed - Call CheckForMSVC - StrCmp $R1 "Success" GotMSVC - - ; Download MS Visual C runtime - InitPluginsDir - ClearErrors - inetc::get /caption "Downloading ${MSVC_DISP_NAME}" /canceltext "Cancel runtime Download" \ - "${MSVC_URL}${MSVC_FILE}" "$PLUGINSDIR\${MSVC_FILE}" /END - Pop $0 - DetailPrint "${MSVC_FILE} Download Status: $0" - StrCmp $0 "OK" InstalMSVC - MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error, $0 aborting MS Visual C runtime installation.$\r$\n to \ - try again re-run this installer at a later date" /SD IDOK - Goto DoneMSVC - - ; Install MS Visual C Runtime - ; TODO there seems to be a bug in the installer that leaves junk files in the root directory of the largest drive - InstalMSVC: - ; run installer silently (no user input, no cancel button) - ExecWait '"$PLUGINSDIR\${MSVC_FILE}" /qb!' - ; Check for successful install - Call CheckForMSVC - StrCmp $R1 "Success" DoneMSVC - DetailPrint "error installing ${MSVC_DISP_NAME}" - MessageBox MB_OK|MB_ICONEXCLAMATION "Installer Error, aborting MS Visual C runtime installation.$\r$\n to try \ - again re-run this installer at a later date" /SD IDOK - Goto DoneMSVC - - GotMSVC: - DetailPrint "${MSVC_DISP_NAME} found, install cancelled" - MessageBox MB_ICONINFORMATION "It appears you already have ${MSVC_DISP_NAME} on your system and \ - there is no need to install it" /SD IDOK - - DoneMSVC: - -SectionEnd - -SectionGroupEnd - - - - -;------------------------------ -; UNINSTALLER SECTIONS -; -; All section names prefixed by "Un" will be in the uninstaller -; TODO include a FOP uninstaller - -; Settings -UninstallText "This will uninstall ${PRODUCT_NAME}." - -; Main Uninstall Section - -Section "Uninstall" SecUnMain - ; Remove registry keys - !insertmacro MULTIUSER_RegistryRemoveInstallInfo - Delete "${startmenu}\*.*" - Delete "$DESKTOP\${PRODUCT_NAME}.lnk" - SetOutPath $TEMP - RMDir /r "$INSTDIR" - RMDir /r "${startmenu}" -SectionEnd - - -;------------------------------ -; SECTION DESCRIPTIONS - -; Language Strings -LangString DESC_SecMain ${LANG_ENGLISH} "Ghini.desktop - biodiversity collection manager - this is the main component \ - (required)" -LangString DESC_SecOPs ${LANG_ENGLISH} "Optional extras that you may be needed to either run Ghini.desktop or to get \ - the most from it." -LangString DESC_SecFOP ${LANG_ENGLISH} "Apache FOP is required for XSL report templates. No uninstaller provided. \ - (Java RE required)" -LangString DESC_SecMSC ${LANG_ENGLISH} "Microsoft Visual C++ 2008 Redistributable Package is required by Ghini.desktop." - -; uninstaller -LangString DESC_SecUnMain ${LANG_ENGLISH} "Removes the main component - Ghini.desktop." - -; Initialise Language Strings (must come after the sections) -!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN - !insertmacro MUI_DESCRIPTION_TEXT ${SecMain} $(DESC_SecMain) - !insertmacro MUI_DESCRIPTION_TEXT ${SecOPs} $(DESC_SecOPs) - !insertmacro MUI_DESCRIPTION_TEXT ${SecFOP} $(DESC_SecFOP) - !insertmacro MUI_DESCRIPTION_TEXT ${SecMSC} $(DESC_SecMSC) - - ; uninstaller - !insertmacro MUI_DESCRIPTION_TEXT ${SecUnMain} $(DESC_SecUnMain) -!insertmacro MUI_FUNCTION_DESCRIPTION_END - - -;------------------------------ -; USER FUNCTIONS - -; Add FOP to PATH -Function AddFOPtoPATH - - ; Checking before adding FOP to PATH, this may be a reinstall? - StrCpy $0 "$R0\fop-${FOP_VERSION}" - StrLen $1 $0 - ReadEnvStr $2 PATH - DetailPrint "Checking it FOP is already in the PATH" - StrLen $3 $2 - StrCpy $4 "0" - PathFOP_Loop: - StrCpy $5 $2 $1 $4 - StrCmp $5 $0 PathFOP_Same - IntOp $4 $4 + 1 - IntCmp $4 $3 PathFOP_Not PathFOP_Loop PathFOP_Not - - ; Dont add FOP to PATH - PathFOP_Same: - DetailPrint "fop is already in the path, not adding it again" - Return - - ; Adding FOP to PATH - PathFOP_Not: - ; copy the script to a temp dir - SetOutPath "$PLUGINSDIR\" - SetOverwrite on - File /a "Add_to_PATH.vbs" - ExecWait '"$SYSDIR\wscript.exe" //E:vbscript "$PLUGINSDIR\Add_to_PATH.vbs" /path:"$R0\fop-${FOP_VERSION}\" /env:"$R1"' - DetailPrint "Apache FOP added to $R1 PATH as: $R0\fop-${FOP_VERSION}\" - SetRebootFlag True - DetailPrint "Reboot flag = True" - Return - -FunctionEnd - -; Check for MS Visual C Runtime -Function CheckForMSVC - - ClearErrors - StrCpy $2 "0" - SetRegView 32 - Goto MSVCMainCheck - - MSVC64Check: - SetRegView 64 - - MSVCMainCheck: - Push "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${MSVC_GUID}" - Push "SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\${MSVC_GUID}" - - MSVCCheckNext: - IntOp $2 $2 + 1 - IntCmp $2 "3" MSVC64Check 0 0 - IntCmp $2 "6" NoMSVC 0 NoMSVC - Pop $0 - ReadRegStr $1 HKLM $0 "DisplayName" - IfErrors MSVCCheckNext - DetailPrint "MSVC RegStr: $1" - StrCmp $1 "${MSVC_DISP_NAME}" FoundMSVC MSVCCheckNext - - NoMSVC: - StrCpy $R1 "Fail" - return - - FoundMSVC: - StrCpy $R1 "Success" - -FunctionEnd - -; Check for Java RE -Function CheckForJRE - - ClearErrors - StrCpy $2 "0" - SetRegView 32 - Goto JREMainCheck - - JRE64Check: - SetRegView 64 - - JREMainCheck: - Push "SOFTWARE\Wow6432Node\JavaSoft\Java Runtime Environment" - Push "SOFTWARE\JavaSoft\Java Runtime Environment" - - JRECheckNext: - IntOp $2 $2 + 1 - IntCmp $2 "3" JRE64Check 0 0 - IntCmp $2 "6" NoJRE 0 NoJRE - Pop $0 - ReadRegStr $1 HKLM $0 "CurrentVersion" - IfErrors JRECheckNext - ${VersionCompare} $1 ${FOP_JRE} $R1 - DetailPrint "Java RE version $1 found" - return - - NoJRE: - DetailPrint "No Java RE found" - StrCpy $R1 "3" - ; $R1 = 0 if java versions are equal, 1 if newer than required, 2 if older than required, 3 if none found -FunctionEnd - - -;------------------------------ -; CALLBACK FUNCTIONS - -; On Initializing -Function .onInit - ; Initialize the NsisMultiUser plugin - !insertmacro MULTIUSER_INIT - ; Check the command line option for components - ${GetOptions} $CMDLINE "/C=" $2 - CLLoop: - StrCpy $1 $2 1 -1 - StrCpy $2 $2 -1 - StrCmp $1 "" CLDone - StrCmp $1 "g" 0 +2 - SectionSetFlags ${SecMain} 16 - StrCmp $1 "F" 0 +2 - SectionSetFlags ${SecFOP} 1 - StrCmp $1 "C" 0 +2 - SectionSetFlags ${SecMSC} 1 - Goto CLLoop - CLDone: -FunctionEnd - -; On Initializing the uninstaller -Function un.onInit - ; Initialize the NsisMultiUser plugin - !insertmacro MULTIUSER_UNINIT -FunctionEnd - -; On Closing the installer -Function .onGUIEnd - ; Open the Java download page on exit if user selected to do so. - StrCmp $JREFwd "true" 0 +2 - ExecShell "open" "${JRE_WEB}" -FunctionEnd - -; On verifying install dir -Function .onVerifyInstDir - ; MS Visual C runtime Section is only avaiable if administrator - StrCmp "$MultiUser.InstallMode" "AllUsers" AllUser - SectionSetFlags ${SecMSC} 16 - Alluser: -FunctionEnd - -; On selection change -Function .onSelChange - ; prevent unavailable section selection due via instType change - StrCmp "$MultiUser.InstallMode" "AllUsers" AllUser - SectionSetFlags ${SecMSC} 16 - Alluser: -FunctionEnd - diff --git a/scripts/build.nsi b/scripts/build.nsi index b3a8d4091..38d0bc9e5 100755 --- a/scripts/build.nsi +++ b/scripts/build.nsi @@ -10,19 +10,19 @@ !include "MUI.nsh" ; general -Name "Ghini" +Name "Bauble" !define version "1.0.74" ; :bump !define src_dir "../dist" -Outfile "ghini.desktop-${version}-setup.exe" +Outfile "bauble-${version}-setup.exe" -!define prodname "Ghini.desktop" -!define exec "ghini.exe" +!define prodname "Bauble" +!define exec "bauble.exe" !define license_file "LICENSE" -!define readme "README.rst" +!define readme "README" ; icons must be Microsoft .ICO files -; !define icon "${src_dir}/bauble/images/icon.ico" +; !define icon "icon.ico" ; file containing list of file-installation commands ; !define files "files.nsi" @@ -44,27 +44,12 @@ CRCCheck on SilentInstall normal InstallDir "$PROGRAMFILES\${prodname}" -InstallDirRegKey HKCU "${regkey}" "" +InstallDirRegKey HKLM "${regkey}" "" ;-------------------------------- ;Interface Settings -; MUI Settings !define MUI_ABORTWARNING -!define MUI_UNABORTWARNING -!define MUI_ICON "${src_dir}/bauble/images/icon.ico" -!define MUI_UNICON "${src_dir}/bauble/images/icon.ico" -!define MUI_HEADERIMAGE -!define MUI_HEADERIMAGE_BITMAP "${src_dir}\bauble\images\ghini_logo.bmp" -!define MUI_HEADERIMAGE_UNBITMAP "${src_dir}\bauble\images\ghini_logo.bmp" -!define MUI_HEADERIMAGE_RIGHT -; allow users to check install log before continuing -!define MUI_FINISHPAGE_NOAUTOCLOSE -!define MUI_FINISHPAGE_NOREBOOTSUPPORT -!define MUI_FINISHPAGE_RUN_TEXT "Start Ghini" -!define MUI_FINISHPAGE_RUN $INSTDIR\${exec} -!define MUI_FINISHPAGE_LINK "Visit the Ghini home page" -!define MUI_FINISHPAGE_LINK_LOCATION http://ghini.github.io/ ;-------------------------------- ;Pages @@ -72,7 +57,6 @@ InstallDirRegKey HKCU "${regkey}" "" !insertmacro MUI_PAGE_LICENSE "${src_dir}/${license_file}" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES -!insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES @@ -104,12 +88,21 @@ Section SetOutPath $INSTDIR ; for working directory CreateDirectory "${startmenu}" CreateShortCut "${startmenu}\${prodname}.lnk" "$INSTDIR\${exec}" - ; run gdk-pixbuf-query-loaders, gtk-query-immodules & pango-querymodules - ReadEnvStr $0 COMSPEC - nsExec::ExecToLog '$0 /C gtk\bin\pango-querymodules.exe > gtk\etc\pango\pango.modules' - nsExec::ExecToLog '$0 /C gtk\bin\gtk-query-immodules-2.0.exe > gtk\etc\gtk-2.0\gtk.immodules' - nsExec::ExecToLog '$0 /C gtk\bin\gdk-pixbuf-query-loaders.exe > gtk\etc\gtk-2.0\gdk-pixbuf.loaders' - nsExec::ExecToLog '$0 /C gtk\bin\gdk-pixbuf-query-loaders.exe > gtk\lib\gdk-pixbuf-2.0\2.10.0\loaders.cache' + ; have to use COMSPEC because of the redirection + #Exec "$INSTDIR\loadpixbufs.bat" + ExpandEnvStrings $0 %COMSPEC% + + ; create a .bat file to run gdk-pixbuf-query-loaders.exe + Var /GLOBAL QUERY_PIXBUF_CMD + StrCpy $QUERY_PIXBUF_CMD '"$INSTDIR\gtk\bin\gdk-pixbuf-query-loaders.exe" > "$INSTDIR\gtk\etc\gtk-2.0\gdk-pixbuf.loaders"' + FileOpen $0 $INSTDIR\query_pixbufs.bat w + IfErrors done + FileWrite $0 $QUERY_PIXBUF_CMD + FileClose $0 +; MessageBox MB_OK|MB_ICONSTOP $INSTDIR +; MessageBox MB_OK|MB_ICONSTOP $QUERY_PIXBUF_CMD + nsExec::Exec '"$INSTDIR\query_pixbufs.bat"' + done: SectionEnd ; Uninstaller diff --git a/scripts/bump_version.py b/scripts/bump_version.py index e29acaf22..92e2b18fa 100755 --- a/scripts/bump_version.py +++ b/scripts/bump_version.py @@ -3,7 +3,6 @@ # # Copyright 2004-2010 Brett Adams # Copyright 2015 Mario Frasca . -# Copyright 2017 Ross Demuth # # This file is part of ghini.desktop. # @@ -125,11 +124,11 @@ def bump_desktop_file(filename): bump_file(filename, rx) -def bump_nsi_file(filename, varname='version'): +def bump_nsi_file(filename): """ bump NSIS installer files """ - rx = '(^!define %s ").*?\..*?\..*?(".*?%s.*?$)' % (varname, bump_tag) + rx = '(^!define version ").*?\..*?\..*?(".*?%s.*?$)' % bump_tag bump_file(filename, rx) # bump and grind @@ -137,7 +136,6 @@ def bump_nsi_file(filename, varname='version'): bump_py_file(os.path.join(root_of_clone(), 'doc/conf.py'), 'release') bump_desktop_file(os.path.join(root_of_clone(), 'data/ghini.desktop')) bump_nsi_file(os.path.join(root_of_clone(), 'scripts/build.nsi')) -bump_nsi_file(os.path.join(root_of_clone(), 'scripts/build-multiuser.nsi'), 'VERSION') rx = "(^VERSION=\").*?\..*?\..*?(\".*?%s.*?$)" % bump_tag bump_file(os.path.join(root_of_clone(), 'packages/builddeb.sh'), rx) diff --git a/setup.py b/setup.py index 2f22c1dcb..e0d910647 100755 --- a/setup.py +++ b/setup.py @@ -2,7 +2,6 @@ # # Copyright (c) 2005,2006,2007,2008,2009 Brett Adams # Copyright (c) 2015 Mario Frasca -# Copyright (c) 2016 Ross Demuth # # This file is part of ghini.desktop. # @@ -52,17 +51,17 @@ # relative path for locale files locale_path = os.path.join('share', 'locale') -gtk_pkgs = ["pango", "atk", "gobject", "gtk", "cairo", "pangocairo", "gio"] +gtk_pkgs = ["pango", "atk", "gobject", "gtk", "cairo", "pango", "pangocairo", + "gio"] plugins = setuptools.find_packages( where='bauble/plugins', exclude=['test', 'bauble.*.test', 'ghini.*.test']) plugins_pkgs = ['bauble.plugins.%s' % p for p in plugins] -all_packages = setuptools.find_packages(exclude=['test', 'bauble.*.test', - 'ghini.*.test']) +all_packages = setuptools.find_packages(exclude=['test', 'bauble.*.test', 'ghini.*.test']) -package_data = {'': ['README.rst', 'CHANGES', 'LICENSE'], - 'bauble': ['*.ui', '*.glade', 'images/*.png', 'pixmaps/*.png', - 'images/*.svg', 'images/*.gif', 'images/*.ico', 'images/*.bmp']} +package_data = {'': ['README', 'CHANGES', 'LICENSE'], + 'bauble': ['*.ui', '*.glade', 'images/*.png', 'pixmaps/*.png', + 'images/*.svg', 'images/*.gif', 'images/*.ico']} # ceate a list of the data patterns to look for in the packages data_patterns = ['default/*.txt', '*.ui', '*.glade', '*.xsl', '*.xsd', @@ -78,36 +77,32 @@ # setup py2exe and nsis installer if sys.platform == 'win32' and sys.argv[1] in ('nsis', 'py2exe'): - import py2exe from distutils.command.py2exe import py2exe as _py2exe_cmd # setuptools.find packages doesn't dig deep enough so we search # for a list of all packages in the sqlalchemy namespace sqlalchemy_includes = ['sqlalchemy.dialects.sqlite', 'sqlalchemy.dialects.postgresql'] - py2exe_includes = ['sqlite3', 'lxml', 'gdata', 'fibra', 'psycopg2', - 'encodings', 'mako', 'mako.cache', 'pygments.styles.default', - 'pyparsing'] + gtk_pkgs + plugins_pkgs + sqlalchemy_includes + py2exe_includes = ['pysqlite2.dbapi2', 'lxml', 'gdata', + 'fibra', 'psycopg2', 'encodings', 'mako', + 'mako.cache'] + \ + gtk_pkgs + plugins_pkgs + sqlalchemy_includes py2exe_setup_args = { + 'console': ["scripts/ghini"], 'windows': [{'script': 'scripts/ghini', 'icon_resources': [(1, "bauble/images/icon.ico")]}]} py2exe_options = { "py2exe": { - #no compression makes for better NSIS compression - "compressed": False, + "compressed": 1, "optimize": 2, "includes": py2exe_includes, "dll_excludes": [ - # GTK, included elsewhere - "iconv.dll", "intl.dll", "libatk-1.0-0.dll", - "libgdk_pixbuf-2.0-0.dll", "libgdk-win32-2.0-0.dll", - "libglib-2.0-0.dll", "libgmodule-2.0-0.dll", - "libgobject-2.0-0.dll", "libgthread-2.0-0.dll", - "libgtk-win32-2.0-0.dll", "libpango-1.0-0.dll", - "libpangowin32-1.0-0.dll", "libxml2-2.dll", - # windows dlls - "DNSAPI.DLL","MSIMG32.DLL", "Secur32.dll", "SHFOLDER.dll", - "CRYPT32.dll", "MPR.dll" - ] + "iconv.dll", "intl.dll", + "libatk-1.0-0.dll", "libgdk_pixbuf-2.0-0.dll", + "libgdk-win32-2.0-0.dll", "libglib-2.0-0.dll", + "libgmodule-2.0-0.dll", "libgobject-2.0-0.dll", + "libgthread-2.0-0.dll", "libgtk-win32-2.0-0.dll", + "libpango-1.0-0.dll", "libpangowin32-1.0-0.dll", + "libxml2", "zlib1"] } } @@ -146,39 +141,21 @@ def run(self): if not os.path.exists(dist_gtk): ignore = shutil.ignore_patterns('src', 'gtk-doc', 'icons', 'man', 'demo', 'aclocal', - 'doc', 'include', 'emacs', - 'gettext', 'glade3', - 'gtksourceview-2.0', 'info', - 'intltool') + 'doc', 'include') shutil.copytree(gtk_root, dist_gtk, ignore=ignore) # register the pixbuf loaders - # populate loaders.cache also exe = '%s\\bin\\gdk-pixbuf-query-loaders.exe' % dist_gtk - dest1 = '%s\\etc\\gtk-2.0\\gdk-pixbuf.loaders' % dist_gtk - dest2 = '%s\\lib\\gdk-pixbuf-2.0\\2.10.0\\loaders.cache' % dist_gtk - cmd1 = 'call "%s" > "%s"' % (exe, dest1) - cmd2 = 'call "%s" > "%s"' % (exe, dest2) - print cmd1 - print cmd2 - os.system(cmd1) - os.system(cmd2) + dest = '%s\\etc\\gtk-2.0\\gdk-pixbuf.loaders' % dist_gtk + cmd = 'call "%s" > "%s"' % (exe, dest) + print cmd + os.system(cmd) # copy the the MS-Windows gtkrc to make it the default theme rc = '%s\\share\\themes\\MS-Windows\\gtk-2.0\\gtkrc' % dist_gtk dest = '%s\\etc\\gtk-2.0' % dist_gtk file_util.copy_file(rc, dest) - # copy the gnome index.theme - stops stderr messages - gtheme = '%s\\share\\icons\\hicolor\\index.theme' % gtk_root - dest = '%s\\share\\icons\\hicolor' % self.dist_dir - dir_util.mkpath(dest) - file_util.copy_file(gtheme, dest) - - # copy LICENSE to dist\share\LICENSE.ghini (for help>about) - file_util.copy_file("LICENSE", - os.path.join(self.dist_dir, 'share', 'LICENSE.ghini')) - class nsis_cmd(Command): # 1. copy the gtk dist to the dist directory # 2. run the script to update the pixbuf paths @@ -423,11 +400,11 @@ def run(self): scripts = ["scripts/ghini"] if sys.platform == 'win32': scripts = ["scripts/ghini", "scripts/ghini.bat", "scripts/ghini.vbs", - "scripts/ghini-update.bat"] + "scripts/ghini.lnk", "scripts/ghini-update.bat"] # TODO: images in bauble/images should really be in data and copied as # package_data or data_files -setuptools.setup(name="ghini.desktop", +setuptools.setup(name="bauble", cmdclass={'build': build, 'install': install, 'py2exe': py2exe_cmd, 'nsis': nsis_cmd, 'docs': docs, 'clean': clean, 'run': run},