From b412563ee36d454d88f07ec21022a759b86b82a8 Mon Sep 17 00:00:00 2001 From: oz Date: Sun, 6 Dec 2020 16:21:56 +0300 Subject: [PATCH] Fixed timer. --- Doc/FuncStats.xlsx | Bin 37399 -> 37414 bytes SpaceCadetPinball/SpaceCadetPinball.vcxproj | 2 + .../SpaceCadetPinball.vcxproj.filters | 6 + SpaceCadetPinball/high_score.cpp | 16 ++ SpaceCadetPinball/high_score.h | 8 + SpaceCadetPinball/options.cpp | 22 +-- SpaceCadetPinball/pb.cpp | 64 +++++++- SpaceCadetPinball/pb.h | 2 + SpaceCadetPinball/timer.cpp | 144 +++++++++--------- SpaceCadetPinball/timer.h | 22 +-- SpaceCadetPinball/winmain.cpp | 14 +- 11 files changed, 185 insertions(+), 115 deletions(-) create mode 100644 SpaceCadetPinball/high_score.cpp create mode 100644 SpaceCadetPinball/high_score.h diff --git a/Doc/FuncStats.xlsx b/Doc/FuncStats.xlsx index 91b9aa8a3b1e3cba34b8c69e6cc030e448c65c4c..05242d5089e3283ce202f6e5bef4289b3e667dc4 100644 GIT binary patch delta 28963 zcmZU3Wl)~m&US&~?(R_BT?)nB-JK%E-FmmUySqEZ-Q9}2yGx5(f%l>N?DL(OZzlZ8 zlO@SYt}D4o$_FpZ2d}DvgCq-%WcwIb54Q#Qx*oH?XfTY=<-K}7J(u168o7UNJ$_cp z5Xa=bKbO0CS;O}%%!GDx@I>T2XuQ(G#8S)9LFs-tU>=cvdN{pQA-Uupp8wO@HniyW z8hm+7D^IJm=q^NhSzhex(hRqg&-flfIkcE@`WzBLNBidu%w*{~l$l3xrU ztMo1Ik8P*@*P$hYz?+BbeOC{)uNsvAXXRkT-TU?RKNv9o7 zco}nPjc;~yW22ELpkjI=9KR=(u1@fizg4Q|^WpRBY%UfRK}HaBL?7Yxqe@~hypp;D zUabBlMVw~-LUJ4oEkgnBwkJ4UjQ~e4w40-5LS1TGgIAqM=Xa|K;#vpQSo#(Kp12S9 zWj%=>AeyhWPou)A-Kw8UW0Rd16Dkx}2)pAR-!5%K4Y1l0L90}m315>$6Tj$2>-ZBNUW>jTn9brX?qta%d})@IUr$SB{O91;3=rt$Cy=0mXG9(Yqt1fo5Qy}>-c#4 zu~(~IyPLSLa~QTU&@+Gpuxbd=nA_-g@-XfUq{LZ$Dx(-T+OX{hufC}<+Ry<;PqTlo zy@Lz*7Auo>$D!j`>Iey=%vU`-zD&eVg2a7QrcE*6(oQ&DjCJcKVFUmew^@-rFIP&7 zg5f=xds-aRb^tG?f8dsvO|6Z{ABdw;Q8 zs+e8k^q76B`{>-CsHrM$Q=6MS8%ohw4!Q`}xYpD2*DU*yBwvSPJ?Zil8hKuu|4_1Rdrkd=FxjMXf$S=wASzrq3VVSA{Y{=A=ZSMNE2!8(!WU}hWpyGoH5 zMgAtj-bSbt;j2+~3zpy~LRyUrKioc4(VAuYKLh9~A<#y^{HTOtNLJ)NJws5`=aC_d zJ{NZ;UhDU9rrDi|RHPQRW=0Tj`KD1-?F;^b(m3EuM1reU&Vz&nXJ$pWUiWk2^QFWpqC)?#FT(b z7!|H_5GXRFEBkCy>=BqU4X-Ei>eP~I)GjwHhyDHBcw}R1HI!Or2BqcGsAq*Jghvo_ zwYvc0dXv~Wp=hMTQzIFw5lxaQFKdGfT2I*K3mj4`Fzc$|sRi~`o|rmQWc3bn6#RV< zg=Mgs*47a6zD?0*OFBz7eMM)Vl zVnQn^T5^*Ltn*^S6V6`7u%@FA@v5|z38qFar7r+CQz6VV8JktcscKmAo_>7Y@RyEY z&k&sf0Do+9jv^#2*)ckFVpA9?bx_NnAu+F<`HL>tO3|N72~nwm66BLFX(JURt@5o& zJC=W#aDp=WluXfNk5Ru`1~RZ}`rP|d==j50UdjbTaOmKPLed3P7z!nZLQj70Vuaf) zPNu(H$1HS+?N&(6Im1fp9AR>BEJB}oSFm>_2835U)%S*tacZgiXqxPC*?J)Sk;rIZ z{#bWL1ZF8u&DBkR9h1$>!x(`@}8vsh*6Sm49?Wh&XfqBpZ3+%4PC3 z-)vRT^Dz7Mf%|%^qyv{SdV&TuDt|<;WtFM+J%RTpjGJ#B#=F8Df(kX$50}D<+0Dq$ z%7E=-YoAVoeZuTsAjy|Am0w18yItIri6~i0R$Iq{M~mzGou)af?Bpt2U%va2uR+%e z)OpFkwyxOYj>_FB&Bsu$28app%24j?FbhTajtET)G_5IpNi@W_Tlun$boKtmSb?MW zl;!7ea?>r$ew_?khJJ7OOlIn8QIdN9aRCt6hRO4jSU8kkzr~Q^FoZ@YxLHS;0p=%)#x7H$pgokTMNr{Ih-(SPtaCLxDZC>4qKN~yUjdtH;o3I@wcKGk2cKy zJr$yvfgDqci(taQRhTUKiLGn1l*y1?$lB4nmi7}1**`}@oR*IohoRQF?7<6t){8*% z^4*{IuzqvAaL)@e6*BC3>oo#&-xO?B7SOI$6okJKW2Fu#X38S3>d z=9zO$+1~E$Mp(;eaIsf0T)=TQQP5INR}Yx|^BiERVRP0^IJqPkdHJMUay#&3E! z@LQZ^&i~vm<(Zq}9ayXPmwg84W(FnfRx&p4`&l|8*fL(w_o!e^-9mJs#J2Che^HSu zzyi2Sv>=vjTzM%Q>O*+BzkZh;8VxDWl`jEXo?Nv1;a24+bPjQ9qK>&#xg7(zI>+Fa z6x&9X7brmRVwR{#3*b0eP1sGVO?;IPs*(_TVh-jU*S9yu^r(bY%)WwuJQ>D~5S|fr zcm{WP{<^PFEC|&7p(N(XnK5aA_IYB50+^mM7jK==KOD9YRjttDZ}n z$>6i|{E1g14^NI@1TCn`2mxjbrG`bX-Oi7(q9v-%9^pfKoD&^)f}qBmKN++snJ&IZHf?3e^bjZ&O;kt z975^6gU`?xRMBSox%U;+Aw(I`)$~j zOX@3Sk!T|1Bcz?2T^CKr{wU>IAdtLJ$KK<>-W1fc0rmUNoS$(x7J?)KziD?`j{4`; z$qyvn*s_J-#A^Izrkp82h-D}D_Tx`sCu)(;T%IS_w~5jdB@OM#&uMI243Uh-I0O3G zQIr+04OY=aD%Hx$IQ~a?mK;IwXUr6g5ER$w>?#A)pAx7`JE0#BYkAM=c4@q&S*tp6 zM6HU*huGXPG9VlI#FlIY&D5fu9(RfgRk>~*1I3l>0zQ9n{?ND%oGQ_o5=Z5b99(}M zDt=}_Kl4=n_Qx@Oxqg#vlkj@=&ozG2ccR!G^7Qf_`mU!n-(!5IohOrAYFL{61ZCe- zWbSf*bwD_%WtV#uuXAPYun2zY$8v0(m`Jox9Hx@EE)d$kWEw=#DMJi(V^t%cB;7H~ zFiZfGHSX-al=;m@08r5Nc(Y}s8oZSMLj4_6LNp>2nIbO)&sPk=-9*kprg_XRZCO6< z=i~H|KN3ckRA|h`)quFL? z@9(tK6`V$RJE{VZu}>Hhce3WcQH*dg1n8|NViQS2Ix9`gUxACgwvf}gAGmhUYdO?X ztgl2QvQTEcV#>IDbUmNp&*0^k5OocywJ%H(Z1C_ z`5iVS5#GiKN%R#D9H7_lgddvR|8W$yIGmV67Q|(hBu8_Ex-o1reD|CS>7yf5JGzC< zy{Ksp(N5aOvJ1q^l`i!mMNWx#k5O>LC1Rq>wwl-tisOyuZk$bB-l}lXEUe8Oy^O$# zs6ePR)6`sO&W-4(+@BgJy_mJ+pQU{Gy4+g1A(rqVA+&jbZ;F5?2BMr zroY@@Xp#a1*JW_0(TFpO`j~R9-yRBFvs@YOhmMgvZNGXtDjKBv4S5ig5pUy!lS(xc zMoQ-k_S9W+@pBMfPWln52~uX$ap=p#Vz^{^sJy*zE(5%7uer)iWUFBCt6jn$DPEQ) zAFb=R`UkQ8cn6&h&v4cVe%8?pdRPI!-D8!WDgtKk-z!HRieedv+^C|uQr(K`k>k%= z#-l0~A;fiTmd4r6jYQkTaE3gb6F>9R^!gE=7H>ClKK?ojeCQt|7_ML|#o`@Q>h9@& zf`Wl8!8keYTB+x0gm6pZ;$#-MTz@xlQz?M`@UW5N5$55?YV5GF>3bGh_Ow(YA&{{i ziV3iO!(TxAgl^r1=+euhw|p{$t-ZJzQ2uF^4q48`Z|kIZ?#;F|$KukrbClFWJkPk(4zJ7x9QKoT)XaiW7r+Yh ztM8+`WYmKt+^;WbRwUwDs*-qw!?;eFLEM07lf>%jos)L%F^}RU3 zYChY?<8g9k@H_cqHnpEQ48DCIQO25C&kd6TV?K{kO9iH35q_>)j($9)a*`bVGz<@K zpO8j2uueY-t#;5$pE6~5`6X2Y`N)%9*ciFS(u#O5gl@H@3R%*1XpVR_F~QR%=$#zk zc6%WdsCzrix3+~(P+E;Vf0V>VOEL(B?N@Q`!&z&Hyx%n}>J(Hl&y(QCdY&^Z&*st& zRqgU{W{B5~Yg;F2x0}Nz?|MYL7v^L>D>SJ~6miyeNR%So@-fvfUSbmba`n8?v^u5n zLwdwvrnn1=v9HJ}tHTR4uEQh`@%ugi10y3gDXT3rz3oN3^Kl>*LB!szY8$29XSV0v z0r47iYVTg9ix#8@>Q0+lfVFY?IeianWLJv=)m(W5V_HYK#b_>dNfP)|i}|q%(nd(pvj~=eaHt zTL&G~z~pUnv%HUvK3x{_s-{g|c)e!yyta>t2b0BzItw=$bykaRf(+(qJ>6(XLwuq#9uB3U87n$zk8X{pOHtlPcXnZZbh_pp7i*f#T{X<__?3!VU${$> z)DpeA$@v&7`IZ;V zeIacv;|}J14NH7v^Ad4faZ1<8IlJ%(0ld#i>$<)PP-JzWNBA&4i*XBdO7}PBe5+fog9V@yb3VRNH z;j-_5){gb#?+X#bxL?Kt$h4@d5}Lbi*!ViGcGa6?@)r2G(kw#iM{-k}yG1yy@-ytD z=g=RV;j+L<+pCAOpUHf8;*F0yBboxnwVjs5A>5mg&-~eHiyi z(}jl!MB+pcL&8H|^NmoJuBw!AwgVfj$2ybnS5pqK5#D3ff~K5<9y;gM5e54y_BAX$ z$+7&m%Fihi{sI^*V7A&3)2k$S#!3%!GUrFdQU|o%f-H%zeL!StBVv*qf`+Rhahq^P ziH*Oeg}dT&N&IFG5S{|tf1}#u!G|KYbuSwP6W`6ni3g#r{X1Vl`-Xe1W)`^$6?D?m2hwR6s*(%Vg?Va&=P_^pP`{%{SYtAhhRNC+QePXJ zrsva5w8UrHG1QrH9GjaV6g>(z)iyQ7v5HD6mXw;n77B>cbm)~n5;%X~cniJZ&=Nh5 zk>98uq)vxM21p*-3#8#`{DLoqScl%Ey&uEsoYrQ`Hfg$#2qzl#g20;M3OB7!(Q3RC zq@DE>m8#sK4Iwf-$Qq9?`5wE#2$My0vKfpjA!043x2rn&PH`!VVN6af`#3C)7&;8P zHXW{P^qXu`q$19mwa6JbW{?wS7t#Y)CF(dm>uR=58h{N!ijBl--RC6frsu1q#XKsG zC^{domxtHEE-=ll$!q9IE`$^=)zh^7NhCOtH%N;CTU1WA>9c(47r7!>9$Y08r(0z*tacX(`5! z=WSt8;syLCY;nDv=D?xlt*bd0xSEp6ny4>mNN0C*Wte}_BTNgX>*m(BE~ab6Z?&tk zMSchm)O}o;Mxt*sW&7oxFcd{7NmSz__ZyRGOBa64%X*YFWM5sX#|sQeH7#>%uz$iq6!8I zW_9`|c79FaO>zA5_R(|0wy4Xpun@^y=6=up=hg>71$vFLs1Xm&c%?^N9Tm$1Pf5n-|4uds%ga)??Q zBfuqz_1>qNGE0=gOP&Zd^k+0j+Ry81Nwz8#b0)f68a6jjBaM^dibeBM`ZMJoyVQYy z7B5GQPvd{THwi5#(xIjv6~(|oz{u5Ywk8egKgj2ljs~iba-T`e<<`U&Oz_1%MVP#& zJ))aaBZuj;;<&FECTJ-v&yV_2qO~Syk_u5J-Q=FBTN;;}u2QqjR}*BUgA0XSCG*6Q zc0B9$^(1|RM%V-8tRBj-#GjvmO+4Yd^7LqF7`SHaf}y`wdp{%Dxu;9#floqDLQD_P zpxaxkcssG3;5+@(tvx}AgnF_lTW)Xhcv-R8buWj!%w7t=2 z7}9FXhs$wBszC+emF5?y^rB7((dd4q-s8qq3#nNn7&cnSJ^kP*B>15()U1xVGX%ee z^{nwac)$^V{2a*4DS1Z0<7e|eI@lWlaEI5)RBshLZNf6(RL{p~)1uO4Ki!pIx~hFo zJ5x^ht-P?sLoLH5ZlJg(Q3(deskPn2q*5;%y;!JIcGV9Z@&X4Ds$fQFrQ_+1_d@y! z)1riWiRd@fiA%q=Q>FIj+Ua$hdMU*OB4a5Gk#uf-+Pfonsk>mdSm|!=`1wT#0J>(B zc7bM=Xo)1@WXY}L$9GjNVkX7K1s{75^#o_h;;^Vq66AYQ-1giv zeC^pP@WXNExhTqrr@LsbVvvk6@i~Z9VhKn#$Bg_HT2R%crrv^F$tLzZNYl%Z@#WBO zU)?TdpY&t_TDDfIA#+Iowfeh}^vxqg+82-+E0u;$neaAYW!ajb}% znqU-^8-dHpI#U@|n&S2dR{Dai?bqW87l3r@q&YZDn>DH3u7GsHuBG@zq?eB2-SYw)#opt@?nT#HFPE8C z`zrtzR}Fz#OG;^h02i^NVE$SC-8%y0xHuM4z>Z+JdhZGRiTJ$$4kt5Fb!kglK7Ss( z8)k&{soq9^efwR?ygk1!rGt9z=Tp5?U}GpeIJ{C;eXv83jViBfVmN#RT}_Yhd93r# z&Q6eq;K#2omoG;%jT$ox3mTO~g6&?9=g&o*U%hS)1fS0r8Z|0A_yxTm&$oJKiU#c} zftQE-y<>y*mxb5Mu?dB&*W10I!NCI!dw&Ikj`qi`hlfF~N&~>-u6JiJh{-_k`TibO zyaRarbFqc{a(88506bh=?ex0ch!G36WmZ-yR0;~Ty*dX-xL-ZQn(+I)K0modt<1D` z0^WbF!=WGk+;45+-UAO?&rt^V7Q`EXo?}xKGHBa7V&M7wXeY`(xU=o`_sc`pO}0j* zK!?}WQ|DLD$3MT5kh7nNXSTKoiCbS3xc>~^{SpxL@pycBu;yO1roiLaXz%bsl<<5S zbNeMElya+)Mcny%d)zpa_B3;JetffHcZ~2naTg^BD7`)(KWs69&hz{J`~kS&(=0C2 zm{1UWS=qUpIN1q8{(byl?{;$x2!8bWv(p;XjhjpRE6AH0AHTl-zC)gP zy|}*W6zF(8L7w=%FOl5I8UfgKJRRKL?-7<0w>>OeRa<<$y9Pr70}On;4bV{cU$=;F zHnKK=yFa~+8dsM$7yF(mBm`)eSz9>;(CZfYOI@=#-X0CdJxHLN5@9%f)^q&ViUk``@55V0? zP|v{N^?2c=^YsB40C-|TFwy#KR*b7$B2aKzAY>dfnN^;pyswZ60J6NPxo<{9QW zwDEeLbkLjTRxI~^iXu`)k&BFNm zTsnTIbXRy&p7yOaQ7$tFzHjmQO$1%fFXcpz+zw~^vFmisYG{jvv^R$w&+d% z&QCCVY3dr@raYtnMG<7LPxWEwq|bluKdSTPQydQz$L2P)HmXW=^j#NYU;c31pI+9&EB#4=I4@TXrxvNRnEM#48R9;ba2^P*4tU%L)Pnjp|y)!)C zJS+0(X1c$Lsk1Rnb!}=!c5yAbGZn5xS%^@+6WRoM26wrO^!&;kJ!a2d*%FPEuqB%d zXcy2*pdVaP!;8^6XqI8zRnr18DfZ1H@_J}$u7CCRLyidyJouwu3Fc|%0wNN$Mgm67 zTubAqYtb>xTz!2LWN}2pj^GLL=4cCM>&axM?3*P^1q}g}mGaU2tJ$znRvp#mXQdwj zTwk|x<~JmGhN(r4FgKac){w)}E7Ub#S8@~@g*2G}S~zPZvTzc#{n7J~ zz=|rN3(oG+5B>=jzi@2H1s6nGvZ=$OC`wUs2y|DKejOE~%obkTqa2yn@2g6w#O5@r)z>RCNH(|t!EI4hhMugUQ4#IiC5X0AA+Q**} zO>hw{Skicx&nnXZx{R17q0Q@g^q*fmZin!qBTyDMM|~pue|fMYJmpGrNx{i9azE}l zPrY*JMU~e|a0&;Xlgcu7bWJA^PE0e*d-LdBJ|x}MG-G3;mxv9+3Zs~hvCD`n&QCUt zr~1X(C1CP(=;Ed}>cd2p-!L+)GTJrQqYA^b7zFion;a$p$!7KRYuhbJGYnH-(_-~9 z{nx2@F$|5@%mA@fZhRRO75?)rp2G;2o(jF zztYS%%DO~Jt?$93=d3QbKz?!>6M-V&qK9j*&>L7mUGpVOOnO7^lARv7yrppSuSD7hv_CQ zES?qmwRkqB!$R5+@S3+XG-lvuiLu)rN{1JuIWF{j9r2J@f8rG8KCt`KAitA(&Pu(X zXl#Q`L z3D8RM6e3&?rqdC(5Sv#Vk_C)T>o0HPv8y&Gw*DS1q{7l0$*5fM) z+rs{H`dXpO*h6s*mCt!*@VIfwYiKr~L7wOaxv%dQXK@>Tvod)(+nhU}ze2oqG#X!{ zI^9cXi!~pz{zP5)Fx8|Z(J3PF-7|)(1!_TNZxvu2UDF{_)$#XCTL^c=ZtF8mTJKY6 zWf~X9_o(t4>zzD$rYNS~5+j!{K*tjlY$8)cgbkCCC#yP{RC|baY>e1K$ohOz|6jum z3ePNN7PI+3l{n?gXw0G|?1KKe?bZxuJTbfN{3pFm%?_F{eoqm8=)XP%E)W~REEcB; zPuT|J#pW$)>HhI`(LIGKH6brniGXy?Oxop8o?G8PuMuT~a<#G0fvwX|`!%^{2+yWy zA#ESe_$@67W^#67lvS6OAmx(m+y~KYxT4dnc_L1>Gx>yyn!f*zF@+HF=R|q+KK)2I zcTSSWA*po)u;>!~vtz~gSJRWsK%qGId{uo{SY<2^1T5TW4iZo>Hn%@G3v3G^t_Z=p z(<8Z6i_BZ3ZFG~0{1k^dxKnaW`WxSpwx7G1%1~N)h-?2ib2wodd}+GMhz{Oxsj&PP zMmf{p+*sb_Eh;n`b2Xj43B$$)ii9H?oK7n2-=f~9u9q~qIv~>PE8L_Cmo+}sw0<19oy}>ayzegT3~qR)Aa zJ0~zVTUZQ4M16Nh}BYv%W zn!()VfiYyh@Vv0+?#!Fj-82s;7hj;I!02P^;P>{8{696~C!!z!343+MY|Z+(!(?r7Ynj{|4l=%vQDRmKkESVlw2#05o|+e6{Ur_LgWQMY(x znuWIR6J8tUi^ptqj7nr}MJGAoA-NAOGf_2A8~Ec9=C;r-g5&9NT>T!50#w#@dXUbH zJTeP!$y&DQ#*a52mQ8e5|3wAZ*XUHST=L}8eTyblv!`*KId)XeQE6L^GbuGoGv)I1 z&5-8~sLte;C8OwggZ;5-&ZZx%k!#+Nv+w*TlN)MVG^Cxq&Z%0%_tG3Y@vmuogfndm ztV-;FbI5?uN^Fcw^&FBP_rlHcJC6h(5ouS_j2)A*a@Wx&Zh#x!%C{nGj}`KLre;$} z4oiyEP<@ZnER93kiSIwoQcHuZDKHwl&6Y<1)sVEtb&3fvEr=S_9;shcNr4P{OB4)i z@s{hJVgE_0i65qvV~j+z(+MOpTze^vhdSGo|Ky=jON|za9)EFR8IfVt7ZrU?pu@qg z@#OD4aBKSg@EZKW5?11|=PkT)A(`GPZ+f$lEuT8|lFb1YgI^QORLkf%vOTFZJ>b^nB{WpcQ04I|qj4nTlVXqEBMj&OA=oNJjwe_n-$qx6BdT3GZ~eEwm} zyK^hlTNP3_TG}h+zryiuFG*)ZFJv8a4mLEGTT+x%ICnNrlL9WNqFBke0O1npY*N>| zKjHYjm{JDG>z8M7yFo6=ou)%bbV^fH*14kiDnCSp$SJztJErl%m5 zp%Dp=FTtmwM;xqRFKNuEQx#&>GZCwysz9HM8BmhO6Hbrrz{kC=>U~#XgU7w?oI$J4 z>@7%qfwm(1NdixT#u6r`jz_oh;>p@_lCV0X#&${C(*EM(&{3)k@)D4*kP&_=N(05w zuFjJ<9muq6rjilFP07+_g|8bSzfhtK)qA&4p;F{r=MX;~h+=s)kuNO1-4w&w;+XM+ z)Q)vjz2~mLC6{-aTUtsaI7!ZjqJK0HOnqfjp4$69c?P7d2Wgjil?d$ysbld=*)TTC zeVkwBJ~G*&E$zU0!0C7~t3wM>L7Tg}CCIxQ)pHB7UHOJ;F< z!Y6Bg&cH*~8=MZT0kA3;_W5HE%WW3E4UpwMTHxMRtPNdtUY4JDIDgd8YvhsmFHCk(D?XY zJl3-+#3V%xRJ7%!VP+`|<+T_o=rfg*gR~z0)%;r6^Acd{S*F!G9ov6EN2fkL`tRDa z*d17$N>_Ag8OJB->iTE2F3tSsO7-M%vLb|lf<8~_h6&%Lc5d2X+G_8lImXprBeEhA27Ia0pRKWZ$~1{0bUbSMTlVMzJ_+m7app6IM)@kN5?d?i z^QD5;uwxWXzft-&$3?4WMOW_Mq5h?8ddzUjl=$gvCLMrdG=NV)};cN zch}MbUGhf&jf;Oy%Wol+m!1GF*PA)Vr1S!L$sy~4fzeA(BSH@b*yR@p27Z?TT7EsM-lv|<=X;1nuRReEt)Qpj=f8KF!=c&Yi0 zNzC$OP3U06a%;B;(M_W(nw3azB^!~DU|N;9g-NijNby9tWeBfNH&Q82jb83@!pS8i zoK5F9_Ia$wb*XRP*wsiDf3h~r7dkA`Y3r|r-v%$I(skpG8Nh&lM(!2`ykNLh=DwxR zol#|45OAgM`8!oCy3)U{DVz z*&R0D$$7e4##m!>2Iw0`6C5t&LP&bSNXC_^2tReK-Vqo|hVitd1Q!34O|o~R;$5f9 z`(Vh2Zx)6&x&xdW|EXoJ*>XVJdRnn@aIRML@}jJPc~&(i#_AKPA_09GBqc9&ZDzT0 zSS=rnc5-Nbe}HyAFOp)M!4W+b5;`!KJL|a#|6uNMcsn4`a6*a=%eWBA_MtAp{!EGl zv;q;4@6D&+2`ecdc`|~969>i5F_d~JG*y;3^G{K&=DMM zd%#YwOMb5l`UVnqVNpDR!aHn53`4D`^YHzac)1)%+^So3xblzh%OhGDk6Y>DN#2xJ zzRQyIEDP&A-|K_EfrLYtec?)~El$hin;An|%xLtsH|+d6-+#4zkGm`3z^c> zL+(~D!*bP`(Kmqf76_L0s1lnOt;b2lqPe2` zrAA2){nH@tTldIsk_d6I{}L0-I29gd?So z(I<|a0a)grmY=Bqahzn?yjolTX44iwEwoiu^(YnZH4C2tm^OJGOCPQe;cdTsZ!I5e z4X)lw1f}E?ofOF#KuU5(N)n+sie%t6)s%Ahwx}0pK%sfp5(f?B z#;FY%xalpVLBF53;?)8ch5#$RYJX028MU7!&9$p-ojv9+4N%?teIKsxDWig%71^BO*w*o;0c6vxayE zL^jB)O5jV-*ucazP}Z?$77ye3*VpmT+ST#t*f_X0a~=mn)hOa@uRp3Kv+Bhon+VoqYFHff2)x9A%x3r~5uoG*d=4|_zRb2a;C0%0rWFS&U5r}_G zf%pf$aK2pq^^RGu1G(Hs@?ZIwp8@UG8DTB^`E?CNWI3WDToarW|cG(n4 zR~jox!J;?UPywXR137@x-(qRD((JNkt0{rARLV-G$)EiPxjw-84Rrs%%;!Qp_uROe z6QOEZTukchGI0_LzQJy_{l$sU#+$wXk#xFn`CSb=LF2SIhtvMa!g{vze!t}nhy(I){eIz53cKnPO(^(#!sNAU(yxE zn@4ygQauFh8s)*3akk4gG`~2vtP64ZyOLTqb}q*He=~ad)FGlZGT58=2XpWnE#5O*BUF`3aBB0-QflUj;m;F+zX=S-ys`zT zRDo1bDJOwk0qSlCFksf#_ES*h!@&HJiOg%oh8Ge@y{^GGO}UR3d2CDO&*YJ3HYolDoOghlew1#7YoSb)_+Y%2fAha*(Ii8nm*HqK?wR05Qklj8cYzu18jg#m^b7A2`brq5uo`| z83Ygizizu(9e30z0xa<6ccH|YMUvrJ1?tV?QzEPf zaQdwhP!hwy)XzbU-t!5XP>9n!sH2D82as<8T z2J|_lFr~JpQba-~MyM_W2jE6ULi{}4dMs$`kdwD6@O(JjA2a7BsmKMPqumk%x+ckzWnC`uBeq1tU-tT zFe56-r_{e#_fIvSyBg)6;kK15YlVw+X1RWEX@K_bFVX@as13fRIc*@w))FbpcOBrJ zM@cl&>(NvGPY6ZJznkpzf&%foF(Y(_-M)`!p%kf?(3;(FN#!rfKX9+_aR(qXad*`a zt?nf|=^Zk!R*UCxyhV68GUled!+!!~o>*TV459$$A#LJU=%LXIM80niSR4p;LorMK zi3dS%y)?~mvg~>0I6qq=SBo^s3k{-onj#RmSqs;Aqn@TL%|!N27Wb}^AgefZo33RX zlY1p1qQ?CG;8oQF?-;x)SVEFBIh4QnHCxF0lRZ*rx`qhE49Y~mX18~H%(xc03t9%o zGSB8#A6hA$eMRexmIg+C_hS+Tp=Y;0E4d)LPKR1k=6e|U-~2`?4+=8;h_cP_@y{j; z^dTe&7FiWKbLfCyJwVM>UXF#>qv3=Q^o)nSLP2pcCVs-W&5!Zsqu%5*o1Eldi zOn$H|%Mwo9=I8LG6-Tm1Do+pHDrs9_^xE0wmsGat*p;7+qLt0FTsK81D%5?n^rn9U z3d!c?(XzlD^;A(F%l=68>B)A)qsTgW)z5Q(yUTpgKV6$22bvc|So!I))inn`>G-nR z)IHpR+RrN8rgr7&V&7~hIp9`6p956W`<_=zF%RU+@$h^~Hdb!ELK|QA^))4QnSQ>$ zTj9K#`hA-5LnfZ8RQ=mBNj&W(oB^$VvL1FF|5o(cJm9~`D3_+m^_do` zYs2-DV6MM%P8~m5FSB^I^5%f9C%H zxMrK81_uZo+jf^r$7Ts_6!4NLW4SMcP1^HEBeUiz)qH zyeY0TbPnFxAWS{0FUEjd^Ru4%GORdv(hRmNdiipwK`=X=ZDuG)HeIA6om5EirD|jJ z6bIBl5@e!Bg8wv2c}x)~s?>BBCf0x@`?V{0!96jXGrntf@MRk?p>cqjTFRHKW+7!MnkN#=hNaYHh-BrFreY6`6G zTKw4=(exAlbqneGdO`fA+F!~fGe_hGqD-jCwZ%?9{++@A7HwACwgtoQo174PSP!&8 zQ1*#p>14NubNXLOmbicRk{N|yWRoNi`SmMi2T|O#IO4V8?Q%7rj_H3NCR8Wh;aLQD zIVX!yt8G2y`X0?v%XxeGS*~v$p^RlMq(qy-Cc$d(gnP|#nzR%RVD!@~ zgS>$w+%_|i3haSnzR-*#BhmOc#KkJWPoH|pQA-A1MH?JS8%BiTSOeS=d)FaPY%R@6 zJ2Zrt$%@E?$> zj7^JN=v2b_NdvtB1z9H9jCzg`V3Weis2mqGnF!lMyYB#vHqiEWF>B?A$bW6bE%YRF zS-dSCK2Iw^HVCHvvpBg}?g`C!=GV-NYd`Jwg>Ty>;XslmXp(lkGx&@h^atg2%`4uSUgZAMO zN5qHfW==?35UJ`>JV49_-~Hjy0lO#T<|MHHI-a=z83~b+ioZgG$lb4!=bQ&L1UET;J;&(&j#=+moRyAt>{7fwV+{@z>;Z3hcY(Bb^Y|V z8E6tVe))G;HG5EY{FIW$qV2&7FRxDnk9MhTc2Uy?s+an2_97nJmTm6rU*?9-&t?;Z zNppV8;W3qg#!<5%>qutl@%tNOs|U@@3%i9jK;q^jSy3ehIIK^_e6(MdH&n*K^6x2t zyehAfQ10zE8QYgrO$k&+^7ef=8q5kj0&_XqyA>>3K-cEjNWXo2GXD2tfwHR~{a6Z&n6>3*z!aC1*@PyiSMlK**`+uRy}=GoUd;g0r|RH}aT) zh*-ulZ~9%9R+{nICy7Axs`giB0KZtUdzU+3V%D*i=dbby4%^gDJy(6 zpXS1d-)s`hn77vXVA>|L11KI#Huu%iNLBir%O_59_&JC|re~yvAc;V!7U;u2#dv4L z5LKw;mD7AHEeq_%RKkqAzyJ9Bx1mts>TBI^&x|NN_%8FZJqrU+#ke>e6J`mk3kXBUk=JQ}fL=+lD(?w7W-6 z;^jn;lKCi)Ifb|s;qS12xl&0Z(HEGTWkXeO%>Y<3)~eCxmI!s?Pb1%7oa4BCh5P1W z`KuBbpR16(81m<=Qys?DL`Cinb%#-ZPbyEoaetBt@r5Yj_IjC?r5kT-`aezLhopY% zZogMJs;Yr^z1lwEoBJ*I+P)mi*+&1~eyqO5pldj4C-M5QrqxwiHahYa7kFd?w6f21clueYDb*cSUZ}e@=BG5y1l_>{t%<+GkaP%|&@wKB;_ZA{^ zor^AifV1xBN1J~ed}EtNN9&{oM2Jnh(c!p9J)O8XnI8dUflr^A3j#|J#@C9o<#JOw z10~ar-TbEAL5RqIS~H6jh|Po__)Df2-ln$cFIAbs$yCN6F--bS7mAD@CKV4Sm4_)f1rV*n<+s&|+7E@mTr8}ayxB|9X#cp{CoW)T| z%WN#9h!NiZC9(dJcz+6uyqX}7zIvI}54-LpR^WIGy)ZVIL2ZXTyY^!c3(?o8IKkad=dyVF=3 zWM#wX587qEOv(VZm?>SYK6MCZB4aMN`Y7gEjQqZ^24Li&ygZUvBFUB3#gqf3%lrOQ zR^h7bin*oKe}kBGZH@D^M-T7>4q+035NJt+91zF3)PF_Qu4YJh##dgOM<%>$lS8}C zLr8S>c%p#@EI7xi-t%L-(=&qF}jfNpo<8>Ot-B)_wMpyHxTOVi` zwU*vf-l}%TGK6T)t-47 zVF2!`EsQ?%6_fQh`OtOkt)M%N$|a-?iy43)Viox?d?`RANHNs|ox9DX*iQ2W5+~r6 zh4n}8o`>O&+Q>Zd%wvoeL(mnp$g42r*&VyQ|_U++(80V8R>pD(qCy z#f>tc%WYs8>vGIi3Gfyhh{|huz!MrGgE)9%Ybm7YW{zP)b(F^F^m(GtKm$UU&Fr=!4a8QyK>6nFgMWsxn~HvsytP zR^9)C{|^OEeN+$u0xKZ}-;!adSMz0zJjzOoJ#=?_NgE86J@`9M#z)!tsW zkphgTc+LrIzOlFK1)n^M1f;4mkiHb(8fumrA0NXbGBeiEN|pUZ-i99D@hWiiHvxft z8-Jc*n$~5Ey9D{Weqv@1C711E?t=yEPE7C%2DbBWxxUIupiq|E&>yj{aK_o0g; zMbe}i+4?*8mXop~Us_vxc1rov0(Q zCl%x&oHa>|k$l!DgW|@OA>OU@$KbL3h$A|3ZMw{KuQEYzGGzh6k2A7g{+<74`_CCs zx!efDz^1&n;*+a353Z!9WTa9{NHe<*ECgY~z;P37v0N1f>+23qRt29kw?u>Qo z$g`+Qz;saz`*f6#JN36LlfYEu!WaM5Nqi(%xph)<8;CInmALuak_%f8e4&8l2Sjl6 zKl^p;zUqmM>1&1zjlpMK{|wDyqe?v|4gQZ0u6G838ob`Mw?O-v!tk&ZIJE1bXfPf-@CbqW(+_yvtKC-NwOl3r6SCQt2%FWIJKLEpoD;3;d)2`X3md>j_COU|I6WIA) z;qG#qeDWEMjLgshnX?8x>Ao`Hb_I_jW4(bPOaU&#U6%3cVI1E9(WMOcG0nRqwAO>TY}tCP+pb7 zoE~mbdl~`+oHQ)AivFR4>pMHR+g;$wx2fU5Fnq!}O0Wa_1ny9mlfcM!d!k1epjqQN zYh@iREs_d@&d=+d#k6r8dmIz=nTg*J1zCrglBzChcXoXT(|l|v%huZFB~^glqoc>5 z!;6hN!NZF*pi_@)I7EB;;gECweB&i~XN zNhDw713V33>{t?^1Z1FsKN$!*ibuL}f_693U?|tCsOIWvjC`Ol%C$oocg#Z{TeF-( z<1SuIm87njMgzwg^56bfCvDcb^Ih)tK#A&l@&mdJQ@2~AtC4U2MqRs@o7DnJA`~ur zh43Q9dn?|S_Drka`1GV38fn*?lnrXVRqlGKsUgnyTuf?%EDPYSgdiuMfB{>c4YigJ z8~cbCRD5ld#)O#Hg@=bvqD<*ElTdEBy!o)$Sd(q`tlnE;u@os(o=$m3D*5HZLMJ{@ z9{3jiaP*NGEMHf8_Y)SLu7VkBs37YB^2eC&XxwF#t3ZkDOYd)(qfk`QBA{MARF{EL z&-*(GFdUA-$pZHsyJ@As+0AS2cIx~6Q?o>s)9ye2}Ab^l1 z@-zSvG4zJ(ldhfEPpTA`#uw4htu5%?8nSk>jNkoR+wEkSUqAzma2&d5C%Kl5jgooW z%b{u&Bp;*ti(K{X)886@hc^}TWrD%3c?DupQes{lPtq7FeFwfOE?VXj=PooJ)jW+k z%J+E7ua5LpfBfDH;PuuaN>N6Avm&~0AF-{5%4+DRlcDzdRnw(Jt$ z+q@1#{T>DJ*-l<4Xez>Wp{q_BpdnE7j=yFUUq#Jc(*jTAu{t*52C*G|8lWanOlDav zu(&C#3k~lYBnT0y^^vKzl`kXNwZjg6SweCDZnlNAqtC6K0FQ!jd%pvAn-)-&-$Xrm zQfcqbD+ocqXq!}s_6V>qTI;?DUOmA7iDZ^!^-pd-u9LCQ|m$=$l9{%H%)%@{PE@M(ytQ@}&0-bl2Q%=4b^Z z4{%`&KzxlYLgM_tsqv}p5*-R=m54uG#B3Y{%{%1JLnBLgzXFL|?NeY7P7Tl%Wy*Rw z*ol^DQPX0JrZ*n&@HPFUFIxoo*pG;ijRhTGVs`(Xm`_{q{#Os50RON%sc-PP>uxcY z?G8{&`@>r^z}-6Rk-((-@CJvo88zNDQb|dn?;hznCAlu|%R=>i?G#{ZoGI16mE;t} ztRj#lT`@=Wc&Js03%g;as)1h{}Q-jHC;$6!R#z0dUQBLMqvz~Jp_R@*N)ExTjDRcj(GL&yx3E(pFZ`? z%D4`hSm&DJF5Y`xX-l|WjJTLM+;Vp>xt^Usb>Y~$0=bj9M@mm&OsqfH0F%vwRO;Cm zsoN&3><6B<=-Th>KJx7{N(zSQwDK!{Qqkq#)xT?t;~SLSEHjO?0nY!_Yi#90PW9EM z@=Rm+*-)pXR9j`~&Dxe0(TY{`TlkFa>k|f6BHrvX9e7@!4PeW&Gpmkv*O%-of@*}b z82LPULTzt2_9(lb9FB@6$rsI-|zCL$#8U>h{>A%b@1ALhG=sOrynAOtW>P~n?s35EZ z?Q`Vv`YR}s2gcuGGCs>Y?CN!H$|TAzCa;ipPh7)AiItx%2QfkGs;JUf(qR_@{4KBD zFxLuS?hisfw-g5opGk*~ReYm~uOd~f{uD1++C59@p+D-s0sJfqPeXVAkH9zFU9Y&DPGeqV%85nj9a+? z6a3`cp7z!0guAS8d!^w6pJf8$)+LeU-{@v8)mQs<^ahCit~<81IaoHY-Txvcu$~!( zsCIvbAq><4s@=s=bnIF@LRTQqh*1c<9cLR3!P|=ZPKw$hvM{R&Do)Vqm$wInOf5`f zh?(7{Ux z(}B-+wi_3a?B4#DS+K&6Q#ijoLwLdZ9DESuYCtdkW_D;Ki7Mi(o@cTQ#ixzFAhqQH z8e@DFji{Q6{Ha*>tN8ZvQ;c^bLfu^7@rKZ*e%>7oZt}0@mr_oU)fK08;q-LRoaNwV z=3-GXcW_7h^vlEbLBpw>rFKTiXX_H&^Bk|seCV;fzpOLz2Tm*f$PR<meVglSkBQrM)bu&iV6h&6%Dw-o#OqBE$Ui0W`l zRqb%B|_#UFd z78|9b)X+Uts)RG+&gjKTgwJ7AH*@=mXg`-!75CpZZ;M^dCSeDaxg`sSHGI&2lVVSb z1DUqIO z&E)`N=ggjFEpwt?=jo;>_;PcoxH^w{woR;E??#4>`<{`zRpm-sRn2Et z>0yW{f1&KoS3Hs<#6xa#41_kELbcwc&=LPTW42yYgBZ+*n~u{x$9D=R_N4mAfR4J} z|7wWSj`}_1Rq>ogmgO)euxOUIkiemxCiK+NA^L19D@=r#v<_UFBx^S$Ko7M#5is(f z%yYsc{)(WfNA}o$_(pwYxZosIlYyf2dx`dhp~xy|L0=7qBsSO$^r8w2xJdVDSIjsG zm@3fJ?g;)Zqdc-FS(YqV!0V!ByP|EO6~H7O>pIO(;h&_|H}GbrsgCb>w!oijlMsBLpFC4lhnMqbQu%zZn=p5n2;e*Z5MN z7d_TXq_h^*lcUFfdXna}mSi=68k=}?X|pPN3NP`^_Q5r4xApP)UI;wnrcyC-eD6io z5^Bc*1BgAk6_=F zRDJ-Om~{5WcyrEoYgTBh-OTvF4G>=OO)>%(*w_%|;_dUzEgovS#LQx#JT zB<6-2% zCU-wl%bn)wS<0{B6aBmwX?(dafcP+i1k)Pjt;==t%$To@vKmy^oBzTk__e_>n>syq zR0n?D5sZ)7>PL99&~obQBk9m7p*Ubc#a&9Y9yL5YjF9T1CqgZ?ov))9b}o9x*+Tr9 zBR$l>GaEywInfR@B7`BNfUeJ4b-3Y|VTvU4haL+bw8{-uI}jOWEeq;FZZ;qD*07gk z&u#rl7RVeenUHn`K7=4zyigN~H$aPR9a~bouOSA+m6gh;5h^YSLf2yMXLj))xG6L` zG}*Adg@>%79<8g>TeH1I4E0UVLq!%0xi%S(P+0B8sI)r_`MwRl#bNFAY4+UT^47q5 z#8C>_>k%GCb=AjE_{gI;$DCys17P9TJsPH>AADdKrO)R0HmlCv49)CNBc|K!HpJx%uWgt|-;qVkvD2 zLXn{GLQ=QircKuMIetIrfEOL*Nr=9PF#q)#0tCuJrhxe;-+e9!8Dg z+pXDmAMY^(D3vOqmYn9KB>YaQPXrG&;b{UCVwFc|pyGrYJM2&(9+Pl^9`=!C$qkkH zLC182Hf(I72jZ2tl}iU=gU)Yx_YOTza(G^OI^VO(d6+dc*ij<=vr>yu>~paOAWmk=47jDJ>okI~UtyBB@mj(_HpZcu960osW9yF6n$l#1U^SY&c zuuSYFkaOw0M{r8mp3My()aUl^W$VZ8U5)Gj@Lr~1y1MpJXvEV0mo#7v zo|GhT4l1?e(sq^X^1m;1t?t+!5_tjxNikTGn-^!fNI;4PT@2$O@p%UEn=dwX6ezr2 zbg%3USgEBk7+|MkKt!M&nl-pU6t2Dshp#puIx{k!uj{jA$`S0ndb=HRiV&PGof>#Wv1>b zc|Wsv6R;`1(74O8JFQ^`T!-r=C_m>liYjS2h(CHiX}7OgEK?1`m(g8|u^Lx3Df<|- zOVTZ(dRh4n8W~b;rg`>sg_1A@+*SHuMBih2H!nxVf0+|Vivv`rVxc%#U>&o2>SOq% zy!9k%Ne-0|+c>r3V1-7n7on?rrZt3c3TA!vuxzs=v~)TUCG%5Zr7f21f*CI%ZjojRN{PW52XmeM`BvJsmi^^QZy&&P!(npjaV;! zH^LpKWw|u~P(Lh%Q1Mq*;=lBpa^$`dnJA5a_NIebe&5W&L5-64#9cxH=V)u2ZdlWn zUjMF;i%I9>E;|z8uHGC&OXi7u?)r=*`S3uIDTqB=7(U!2DLy+I$DTx3u`kCE%&Z3m z`!-dca&7_nVq;{Tg;#%h73m{X>}Do@eM8GYyzshl^oPUjywh=?>igEFjRg;AWCCJpE|Muuy5p&P&R%zyS;d-e#*mcUDqu-`)~P+@4K%x_=_g)xh>JwugR6 zU5Q#G_}o4OL_)w7b{st--BA=?4u24`X{7!9rU{_rLvf3THp%^}Wp_ZXZ3- zr=ksJgHsmsxH32TrkaeucU6+%GQpfz5$B<>Cx+J%bUKZW;A`>ftFE`J&*pk@={3%L zelEYn+*H<#+iqxCQ$3O>1|8D-rw9t-0re~eM7PsnIjcQ)_M9TV4W*;BjfVFc+Hi|# zDO%KCKoR9t_}UWlBTdsyv9mm&-Usq-CRdJi&-i&aNtq;%t7)D$S}p`%wC|sHBrV2; z8=9lbi){zHxn2{H5M5 z4~~yq2>;V4LL*P*wTiw}{Fo;Z^iT4%nHj@LXAH#GP2Tp@3vd{9^V2Dq)b^)z*=!;P zk|b~3lLGt`N|Hve8k+HS6^g=+c`@c2aiDFRa4T*{8PF-)n9@c@`yHAS_ycwUs1CMJ z?IXPHqX&G)o(=Rx0T3Vc7vhIb=kaSMU`a<3c%Uhhks@PW{dRoi@omhp?e4TlG|$kE z!vfkET;(pAbae(F-SgWuvaD#_{l7c;X7YsAeSaFPT~eyJkKo2}PVUU((2`cmhXL?{N~>rvw}3|umR9@SRr1ZRA$HFeqyLQOl0UTm%T(8*7cE-gbO zOY>Mh{$qfy?{oieyVCn?1;hZYIcHWK=&QmXFm<{SA%HBNH0r5*1aP4Sah@llnA}nk zbJ%~#SLIrZxHtrXg#|wLQG(5eE2pcLA_^b7#@%*EVnq?s`ez}2tnrFILeN+|Q0fR` zPfMBWnQJduRu#wBJ*~iuq-fdI4^4J*x%lxZGpHe?u=NthZocRhO-IqF8U_O`IEL`l zAI(XW|9X%}S7P%H-Ku|XFnC&qA>~Fs=du^izf=UVUq34)Mx& zH?;kVV^SS(DsVQre<8RBD@unIPPM)0*yk)DK&rVU*gMEQ&$dON6;mx|5`A+1>?kiY zX4f2(;XtF3CyGatR~u4)pgDYSmQZz2JyYPm<`?2W)W%v2kZT)V`P~2RfUYhUAdP1o=_&9Uj@)n9hZQz zM>&*t+H|)&zx5=G#e|F-hxV-CLUTD^eu*vBho@yW>U?p1X(Nu~%+cUn9-&^-*ZMtE z$J?p$_e`!`2bHRYc<6$cZBAmXS1YVG7m-5tn=ynMxo;*6O4*%to=7cz7Y6tq zyNuRBT3H4jpYX~%+RomgUkmx*@2MvC3JKx?Rx}~{VIN%yIIKksfq}37Xemp3b68#N zz3O`8c-BC1$n}i)W6x~qd-^{<-Egk4D3GK9r9-1^&{y`~ODUDIi9@zE0plhEdbWN) zw~T_=z-71M#+1l)lPO0AuAAua)p~G_7KN0;`NjnRmvLot7!L`~KPxHNSISND2foBu ztcnyCeIDE*#p^ak`UH@OBX@$&VltMi{H1&cxlKu21uOPf5TnQIp;?v$C>M%S$x5-P z2@Jq^`6|}TbRnRi=1|AX)r9)T9J0U+@ZxEgI$H>{Xl`+2{wm$CvbAZVu!tX7Z32z{FbA2T5-Tg)^0|!X&w2x>^#MCoQ%|K%H9fIYYUw%6wdb=!$<|bPsM{S?qSxv zQU*x=;0aqjrAjpZ?KnUt!~rrPO)({n8^au~)Tj!z zPj9lTa}dtKUu3uR08itn1tNKR^4R0@MeYjQM8ls`m0G?DMz#y6=Ak?SUY3` z#Z;k^x1#;g(6)ZD7TbIQ2kUPU)v4>uK;Essp_9lX43NX~k2T+C7maKY#jF?RVEqDo zqfNX9h1Y4KZ95Ac7o#~sQ!)Y)zYn5=AqA?s_7t%1nJ|4v;JX5GF^aP!g|K4ZW}2cc zU9ltj250xZ1utE0a|Ad&{!0)Ql$!uxBuA%5aYvpRyX;+ICFm6WnU$ zst1_fzfX4O|7?_)u$yK@yV`zRoxebC?ECxh_wUoA?bGc`(M*QS45&x5cQf=5x;V3P z&af@%=jY*fvPe&y-Q;%&x!SKSzw$X0wmcKRxUWXg#jo9Doy;ru^VY@rjm5*_#q7(uMx9QA3yvb|Pxcg$U)`CXuP$rP zb^5PPu&{jk_Gj8U`=L!&=ldHvP|3^7l^wshkVOd)=&=Oo@fGG3cDeTjfUhkS!k2>1CRLm zG`otZ1G|_>Wi}U&{mKd2?>#sKUi~=mCS4JJ@9`i05>|Gv`am?WBhv}PPn+Y_baQKq zINq=fLUr$tc6`PnsYl3PYjzdN+Y^iks&C8d7F9OxWU5wy!*MsaBqjGPKRymJIs)Di zVNum=Ct}r5(7(*)4#nWN&F~PrO#47ti@`4{LZ$Wj6mtCS5;_aI3@9Bdp4*0gWnb^h ztoSMcy4Wke+*#>VO$~25|ICn?$#7+Pb+~akqk23Z-gHWCIo2N?-G9U|&Rnx|Isg0g zShZYY#-#tKtxfV{x9!)n1IOs}ms8q)=RhsugQ`36_^(U+Oa4rIf|IGOf{@q7#x>ls z&}m7K<*4FtI73wRk*iAiNw31c-gbJZU1Lviu z-t=V9;%VQRlXkAfP8DJubhw(WPDcbX{bV~%JD-VH4nI^A?G}AluCKwILYm-DTB>Pj zoHOPXKbzf->%jV2ACpb&jl#zIQ9emh*l0_YEpJ`c7mir-$K*A#AtXF);}MwF+f}Rg z)us_D`y}NK(Y#cdKEw|>%)^ASpnRS`>TvVjm~#Zx!*AJqHWWmIeHrk_A%C3zPX}}s zP363pFz|s3m_kLQd5zZndy?rLj^n}N?r~S6QQo(A1tdFmrV5hh;qV8SWms87F#)%5 zA6J)g{kkBd8gpc*aq1Mu-ur#$kX!iP+d393b27{df$j3W8V`>W(ZY52_i>e^)c18S_7|btmgdd}I zFi6?r`PqQKF0<}yA*eKE$;4Cw79#w!;j(=m*Vd3uEi-7cQ01l-QV4w`<(x?*1J|d z?JzS*W|HelHoK_ceR9G3ni@FBfsF)b!GuP*P2lpSTsm{`t!$vx>ssHw8@PGZ#pwn< zcXpS}l!!oYbe67ndy7uYUj1TJs21LPb`vP?%`0<;C*^v>m(a8n%+~dT6CETr6fOm1*P=@m!rA zgnhTKx1Z;&DDZPnT0;vB@?C}1(Sc{v8W2F_3wM>yrR%@zeCY7D8@h{@&-WS4;nKzG z5ko>v9fj@gmP78${;Q2{SRG&Z%-6tFb57}dgwD5Yt=X-h{412AxRyXYU{m73p(6$1AFr zOYZ9TA$sk2jy01{6taHolkytLQC%!Tp7Hz%N_-o$-%`wzP0@dgylxk(t_Dv8YI>4* zkr!$b$X5jI`BG|^Ads-Whh_PIaZHqvAk`CGh$i%NHPaDWn%NoXI~`>4}S zLjC%+|3@J42O`yp)|6*xgn1xaOA-4LjyvV090|VG=7VMaN|;VNH{n$N>ye;e!y}}uE#Nw`sTF~qlrhJ4IwGN5c z8x>t$9e}I+Gu?gQJtz0({HJOFMQn`YqU^EVgHiE#p#~z*8~E1GeY{esLENOraqN9$ zpGtt@7PL9Gf**orD?S#u>2y8oTIpIStJOI33p&Rp;7DfRJLOz-QA z(jp)L_Y|tMSkG53@puxmsop>uCA$S>5JLtp_b=^_<*oX##_*sQpZu%J#w62ON8X z$=yNH9nVhAFAqfSM1DZ43HB|g*j((mV-lYFJcAwn%e zJbiVgM*9lgY&G0(6(FUa9=zc}%6b71|MYr*p}m-y$|&4D zzmUU84QN3+6E}}Ch)1|yxFm-dtE9IP`jU8z+H{w8F6niA)KZ}H%RyJkLvsJY^_d(F z4($i}3ZHP%$MHBW+Gs;LQ4@OiESgw<6>+IA!A|t7CN}Pfzbb_!;xBacSs#9@+o0Au zpid4fwWg&PC@hcxHoxV+xR8GjDEQj&-fxU0TIKqay#d$Xs%9p(> zC04y9mFuJ##xcH!Zew~=fyh3=tm2hxy$>jSX02$ZX+0pF)RlYS&Co_QwZs*{ve2yl zW+QX43Lo!bSsT`ju0B6dD4e<&;pQ~>09|3VuH9}PwM&$vWysbQ&w~sx zU*1Y)FpEN)*2sv*V0S4~f(7d87R$ISEiZN&r_Idl9o&ehU`y0Z#6rv;c=r2ddL zJ-d(|vl}9xB#{ZO1&Klh_~tnCAuhQow&GM<2X423HQK`5AS*%D1eil>sj~G8v zDCC*t;OMop0ugtN{91L4`MZl=6gVZ))P$uZ?wR?%v4r(H`#^bAHIF@#aqY?oBb>YN z#5Cu%_>34Yb0tQS6V~>{;%&|xaA$PUf8dGhFmQX&Yj!7y3K!%brj&n!({+?jgt|!c z01$aUKfPwzut){A)?uoBA~lW~K-Q+oZ)eFQJ=uWbGyP`mM~J0FTBL$jDbUwA(XhKn zJauan801CU*ofe&_B7%~pfHp1>iE%qQhS%T7**XWWn3#fJhFU+cMb`Wt#d@Fh4d3D zRz(E1_iP2_@>o|!hokMmVaV@q)nTm8hCoAsA+bwk?h4;dfBb?59#)-LaM&oR5B~S@ zjaI!DGtp$bADKjg-m{T%+dgAu9yiDKrjPggw(TGAySaWhI~L6VdC%lujv3=dbENPE zV{OYyXSa~4*sY1%#}tbDn>du9hnQkvJ-Or5W@*@k@Nl2TZjjU&hkgBhf0mIxsR4Y` z(TpF-Fy>C;8m}#dib-8%en1;5oIJ?49WG5Apxjbh5J621F2O5Qke;!>gLCl{2Kc%2 zl`PVztMrMhHYR+Wc+HnS$R)k*qTE59X44X|iuK{HZt&x_BB_XZg@soc#nCe<>3&cv zY#Q%$=;MH%RgU=Xx93rom$uO95e!6x@wn^~yU?9bR4IJs&M;1fm^~oNAmdVGfp~aV z&j+FcZO(i0F`A4OaSQOd4Tw}J7^O}sMh$p0ta4+?;%81A#&ge*b4^(Ffb;L7fhlo< zzD4-!+Jc)6b;N07T6Gz?KxSRC%HIyT1R?#V{y}~LW+T{;C1~O|cS1zI>cyE!e8Gy+ zP`6ltQYS7Do=`D)^}pPTsaH;lE8v_Ifalr7!$H0AN$SJO^T??29bi74-zxZcn+1I* z;}rp?vD-9HR}n5&KU$?7(+8>}Fe^RV51eyS)X66(VQy|TT9<=a`BNIwW1RvArTckk zxPN~F{t#32rcYAQ!A96T(jXS1WA~!S>FvW38Y1n(PFNS)u+Hl)wvlzC@P$H=6$Fn- zN5zMVkN(of?izluen3c|iFk^Ak;>I*_6`4gfsb>d+`}w0G!}-?u3*saQW$Knx2+5v0qX0|ylbz1#A-{@KxI?R`pQU1EWZX ze%<$U$I-?tRh(A}vqep|{kNniAN2WcLodN~A6ryII$!|E4sju@M*Q{s1GEwc-Kf#= zl~`lS<~Ubwp#`1NJ}C4^svqA_WN{+THf*Nb1DMQn)1f+cW+HRiHMuQ_Ia}^SC>@4> z?X~fb>wKI}-F2-Ruj(M)SdQ|zsET6lUV5?a&w2jrSn0+We@$Q^*si$8t{*-6^>NrI zOeAZDNRSYq3kvj8`$AA>h&xiAXNkq!J$pJ+1xcj2COk2wsEBkZ>x{yECb}bvAIL&Z z)7+;Nel3}z{u)wTBueO2lYdwY;Zis_O7kV}l-2(4`~EFU=288K@hps}WRTU-$L`Ez zTVY9|f;YT?u|OjELKyyOc?x_Q(D5~w}TOT2ZiF?YA5lC`=@%!%xA(Q0sc zY=Gqwe>2i0@M!1QbNh9AIS4fuEKRPc?L&7Q^nlLY-Ko=%OfqpKkA&2aII zHc%@9<*=>w-ogm6CD)FtSk{~1K?EMJBNijfdpFn827xGS#g7IChgzgmt>&a~7HR;H ziQodnbRS2#zkAN~u0CIXnB)}$XIfwoUz7UL)dm5{T`VZdb4v8P917_X5%TvQ%d0)! zZ~ae1$OkNf@|z$cgV;|U0VkbL#%(-)1)zk&+=ZpT_$kP$3J|%PTr&0(Kp(WZB5s5Q zrn?kLu6aU8{92dxE&9scARgNSoyYxokl=Wl`O*f5;)lab-gcxqo^tk!36doawWr~` zDkqix#dOHWoI{@!3RYaXEcvTL65SXHsbgUd`ICG;$6#KJ+jl>ZS|0;f>XfTbQGlF- zaRGth*iiw`VqTv>QTE#&o);$x$eqPsMm2Mt6K0slJ@{Oy7N<3HJjG6*2Km{REQ_iZ zh?^L@3FOGQ`l2uoqWD|}e=zD6`Z$h9^1!5x=GSIot&yonH%mIlUczVzWv#p<(Q{nQ z2i2pl&6FUC$T@`RQjWh7lOgf!1p@vl0eLEymkA3A2@4zhpEooT3}H@@)baD0W3;e; zJ?B3OIk!AFGL{oF8D%t=Imk!OWr}MIqH1uS7Nj*!na(6**lMCv+$bC9H&@uai}@rH zX~OvRn)}`Nosbgd5Gx2sMmw{~-Q!VP@z!KK`lYKz)T$^Ja}`aD0rVMeUuPh>r5hK! zpTUl<7e!^Y!lps83K@GW{40XHqH#;4_>la@B|a{O?@?P zwtL>|KIw&?<8!GZfoG@%4U>Xet+Tha%G+rY|5KbI8NO#oU!v(HpX96rL}p|NvkLGX zISd?AlBUUSA4;Q@lHXTMst_oH8k@O|KCl+Ld9`(P2p;{(*@XuWrGW|MPX*_?Kty#@ zH{!(PVKTJqdO22Wul*(cX`Lh(ojS(?9SbQCewBg+k=Z0NDTz6Jk)>X(>`R|HyaPHa zm7b-oWz5hua_w&ph2~9_jH-`=BW%}Ozdg9Z1<0Ne3wT0~?c(9Y9dCi0L64;;6+96L z7|N}WF?~5Lftr|^8e>(-1EMwGD+iG>=gwAcg9-G&q4$ETc_+mO6zpLwi$u>bf5o)M229bN>~ax z^#p4CPDs`%Hk7M2?7cpqElLg#+4K>s#m{WWJ!=)t-SXON&+G$3t-7WvE2qb>L{!6- ze5n^{w!)?gaRDa>PJ_OfLxwWFZZ&H2q^7mPiUk<*T~DV6lCq~QJSUd8IEALkyZ6l4 zf=a2;;DWZ&4QcDYdesh-+b*;=@XSPWf65YGV7?o72yGcl?*i)q&x9H%{W9yNaU!6cYd({3Rd7p#4GQ%GB~duE+;A<6y( zTys^cWe(CO^svG^C6Z*E#90DP0*#w397nv<4Y*#ovgYrduU41370T2O11{BHonztP znllk{N)x?+c4SA*azoaU>ZRgk_1Jg)jc7V9xnFjl{C|(i12qb;i%k|Q4v3ol%3n4E z5vtuU<-XhsUnFsPYS`jF4PIMDB+R6+7D8gy&uUYfV@|d8W)VU97t}pb$iZ&b<1dx9 zYo?ioj()V=HpREG)~agtY73;!jFXFqL=Zi>K*OLpcpxn~N2RmVpjjKr{5Ajji&p__ zIxXOO{&3Pt91wwkB^WnX**^3YcK!YYrUTi%wDnob8p;I$t2=JW*wg+y>0?M-1qbWV z?W<(4S1k2`s}98!`0?{h>PPlZm&=fwGsXn?EL#>9m8B6GaJXQ!PxXbZrEsdgj+fg8 z7Y0cxhORiVunVYg`QElAx;a}8<4}tvZ@<}lQ^iB@8UWiXBjTN2VY4U?q=PD1W?Fc& zrIIhhZ8biseaVB8xX`lDa`xoIUs$BEKjT}#Oeya%m+uCYgu~wbl>SzEz(ztvW@R(} zYCw_}(A@!@Gd#(DNmRK>I4KU*9bmnu>Oz?wl~NC4w+(xxQ?b*~ z7z{D^6*4&lS{7#2qOa3^i6HV$$Yr`yKf$|l{18l$Gj zFz@MrP*OiQ7c0kdM!AJ>%y!>i|JRX3&ZEyx0Ujb-wz9AWaMfH-B0}9Hn*j#elyMay z)bf$Sn{^i0`UwcXrCi@x@((w)ur8pEr_sS%a>C6G)+rFuFJKPzaFgf5C>IBvi>r1< ztN;2L#vb655SoMkm}5EIJaTwZTNu)}OW9HZXqPtm74XomVb2RU5cOA-w(on{Sj+BT}b?P9ml|4{$wua45ki?HIX3es+{O7qwXVl%WOl}_v^iz zWw)71=Hs}1<`u6vHF93(yb$BJ*kaScl8>Kcyfj^vz+^9RBbm#a7sdN^t55Gbs+C(l z0?La?)*hH6ubLeoUjI(irdhP_Ij z4-Og$IR}IO`qJ*sy|e}I!iN9VwYxt|9ha5HOA;PKI1hrML}AVi>z#oL?VIaAxtkFfDSj=l6KI@t8}$(t;&~?PEFIRxCGe!EVcD2 zT8DbwGBmwI9zJMO%fWs4vZsA^p&m+E{5#XKBv`Z+7i-t9d*Ug5L!pb(3Q=3x7{xw8 zh?4gV7!)hu>js@w9=4}yM>guq?Ufv`Wz(Yc;YMK}hGcgI2$&8C9VL`$utTSD0p3#~ zH_ct1;AJwr0w?~b@dfr++M{hqxTiK`1!ojZ;@|a9wzrq&=0q|&)vGRPGH}Wr!3j3ILv=1N3e~i z$=?h^C0A8gq2&8A$eapR_2!O@3s~CGCGHz(d0=T;`N}*yTlosD&swsnDMWYZzd5Qv zE&+y3nNJgHb{%imEc8_O4Q)3X{R4GxpMFz6A$$Mzq|8!GQ9e7cwf^?Ox zx?y=-+AWsW+`OvyrRAo@r9x);dLm-|NkcJrvd0hUh)Z+#gI4+755t$>>Stw3tvAFI z)Vu5-o4rPP=lP(o7oMu+*}dK#$fSP;#Rt7`!klo-FG?#u`Aay(smsP|)8jsY?N6qQ zw`8Cj*`nHDyEzbly_=2wS}G zi|EVm-k87=YQZt;i6|@(;2MD}A~kg|uui0eI2IBB)PUBmwUa#)p*-cpl2RMB?-{$3 zpmDOTmDltxv_;eXxbuW$6b}NUN34+gf%N8Xu4bn0r)KNEo($m!^c_7sK0ZHg_dO|o_6Xw4zQf->cskqY_SVT> ze|g#7E;i>I-Wx(jp7{PYihKq<_ewt9+W`}s0s=m-D;vP`O?z>SU@yt*iryiL?F;arL?AV$A&w&>`yX2)qg8eDe~(7(2@n_)hZctUTsSmbCX-@HzkW z>FVh$3%I|v67cbDYZZ_~L4tjl$h&a3Ib@2_&jRkc@ShLo+PeWyzsGwbY=J4^3kOyL zq}Ree`GwBDP6rr|`VpAdUD1s0F8<8uy_NJgghDa`|+S+41N5Pq#q_ zh$u(Z-1KhYFSf8%vak{NyAP~8TX*)=uh-Yl=bK}5OoRfj_vxSCUhUs5hV<8oHdYlE z78bf6Z!YbD*S>7Vx5pJg@Y(%cx97{tioKs#1QT!e#74(!>3RNLi_3;_@Jr-+9^vI( z_tWm~{cq* z=e@qY3FNnqUItjBbv*_m!Y&`rXOX-S?{}3Ogd5LI9WP7*d~d(80N>ZKxw+3X)>-0& z&xaUq3)Nj-t}k?1@&dnnRsz|s`TEIrTR@jqrGQ%(7&3Q zArqO3#FZfF9_Ec7;ww|q0FM2I8Ttt_=@-M7%oO694<8_m5MVPXHM4mn@3<-;M=XsY zdIehb4Pe*N7QT8jT;I576*Qsz7f^l9uuIP4{} z88I^Sru~Y}?1AO=H)Z$k@3@_XHCX86w*jX}jG{Ca#PJeQGD|-zN46&0>s>?yL-8$V zux#_N(A5C9Xcwv{h^$bTf;btzASD{f8rocP#S;3dbn7M9ue7|vJq$VMboP?8=5hXZ z!hKr5FPOQgHnDLsHDqim%&4djk0I8i2dAuzP!2NsucWAutTW?p+}LGDZ1~k%k6y>daT5B6^Zaq!G?}XO*d})SGFkg5np??5@E=I zu%L%J?>s{~IpqboKs9+7x~X-RRSCaT9$_U+=x|ywYG~xsk~} zW_;`}I*K#B9hQNa;t%;TfTht^x2@SWkajmikqvkz+6~UY!-V0Y-QYB zd2)G$9dWp%)Zd{l7m57f*{)eH`YjB}jP-e~8kS$9=uTO`n#ux(#Z`3Rr#UlDZPUFN?1v`uu`weCM0k6AqrlrUm8{Ik7 z$hJM9OJc?3T(2!Cl2*1 zCVb)~rD+z`RF6l`+FudGyw)C=A=%IARWxl43JV+QL1OA#JcE|RkO2*{^Bjl7ACz?jTe2UT&ybi*IA}C>#dIf#D&{5R=lilo) zn%jh3RFg~R3O=4ZV>!oXrKw`DZ!XPptSVS?c*~ zro&O?8jPJe4mi^R%dT`JE^D}iv~9(Xi@D;7UPyga!XuB-J&%7j1}K79SAkVe#ceZG zlQQ}>Bi<)PDSPYWe91qTjj~3wI-Tz*ddIbRra*I6KE-I+i+HW~Nh%F8s)5_~pU^3;eDa%Y(FAvWF?uMXzuZB*K#Tq3WIyLBRF0vn zd(A|KGA5vze{$_Lqa*TD2B!F)T$P%D2eVW_rfw$va#-bj*q{ELCM-!;sKZ9u;Mg;g z)r-mqsdYo9o_(5Z7)a6PEEgIrDWha+j>UGeajrnIY)8zw;Doy{(CHE|?g+j~_5&&a z#+LZ?VbPnXY)x3gI<{_FrG*dSZ``y3S7L!pk57~2gf!ohbpsN`vjW7S{w4rbOABmf zjK`-ww@>f0zV@BC4ddEg@p74f4&8hfkUmAzO4Yh-H?m-*E7CWWi4WD zTn-!4cl0ZXH<>Treo+w13aN`M@9-2C8IHM`%m%mJ>jV+@47 zHQ%hAd7EiAc=JVjJg3Gtt}-*e->flp=G4qI<}}Tq_7*DNyF?G(sJq9%41ASI-NqSn z6ji07{(1lpnng=KMJR-g=;t`?HEIhkAwLB_SUblq*%S{D#X)+@`d9`n+NenyN zul$!fc_-nUaTK5|1I~-Ko276$s6zTRnrNE&pqu}RjhQ!6!b+`d zKSjXdGE4W1pW=4X88wk|mFEXtRy`t@fUO&0c&jRDnART!c8^N)zr6cer|_RjPKQ#R zFN?S)PMzx{R@8*{;_F>tS?EYQ;QWU24Le~D9rZ^!O#N>R_x*9+A-)`-;;?kf ze=6;$a}icCa*}N*Jc`>L1XU)n&nzTO_wVmloP;%_P1Bva(|`H>&k=Li>csuqRYf-( zQ0?*K+*djOOu40Am3FkE?rkC}s6kWmbEuuuE@m z?r*guU8=LxJkOy7A_`EL%bn8e#&9cJ|Cj2EWn=G`rfbZ+RjEP>K^krQ_~gHduvu`I zAlsKzWfKo7Zfy3Q;(Gto2J_E#@n%@aRtGY%h3S_+wXYd2;${C6$A9dGUDCPHkYQh`J!?!hqR@lLIpDNF)#Oy(NCa#1}o`*uBbf`p+7Tl*kOI@oB z*kU|=GXedB z!}y8j?kI`FQ)r#3Kz?QpbwVJyBr1u#GxZkjjD0n+Or~exKwyz1jwW_jVL2W~kZXSL zdnfd2gXi}iY6iPy)rzUUW^D@Gf+6j}9ms$TCVcHthB#aL~+Z;&h47@s?5X0;?iLUn382kKXlhA6KoF zjEh{>CVmW(N^OhlopxB2N$^^cmc<~SVOJ;Dp5{>^u*5GcAnAuaXpa*{=0%uXF8V^I zuu!@M+1Gr93XjP8?w>ypoBr+4Ie1oGDD2+vHqvHFSJ-pv9XrFGOjsv9G*W?Ah&_9) zMJ{8>>I%r&APiR5E<=6JpK&cq>^VPiJ({HWY>9lil?n(HDqhnQV2^IV13;NJG zC$07(?Gu=4|H-1{w+{;X7uP`ow5SLd(Or5PRNGo9(~{VCjFg~NrIjz0U)c#UAAG&d#RNYFNrWPevWxePu@OUEM4ygBZysa`{a-K0eAjVXT$9x}%XF-s%7fa}t$~h; zDy(^>h2BISmDV8SfO9Oyj@t6-r1l+pR}m3CI(EGz(CT4Oj0g=|JPso=eNLxZbonnN zsj3s-fzF@y(9~n9Agd0h@eES38>|c-tn5%)Q`WYm*fE>}16D8=xcQu5kbOTJGb<4| zW|o{!k`P7M6NV${$@9Uff=2;UO1>vcpl%5l&8l{gnTN-USBao8vm{z8lC&|`bWV(* zk631Q9g*;|q`NWU6CSRg?m5ikQqbQAh9}}{CMP?40Pm(c7I%U+SEcimOx^JEep*9& z-<#^)`)SoL2CSotTIqv^)fTM2tjlCp)>RPZYyb&N20z4y6OvzYfEu`ydULi%p5v-R z(uct@=c*zY#P9yBnD0ozxx8VxR7(9b?1Pb<2Oaw~Z`p=g7oCiJP&T_DPE*5sIL^mdZ(6XpdnocI#^4)IN9+;??3su|gk<3pv{Mn80 z=(~{;*pwxOZ3$p0um2JzPuCGi(NhlHpm|_wK;-1)+hm9zZ9Ovl7KsK5a!)`k>UKa7 zk{zGjyzy{ri%tM*T3)K9=~wm$VF{|TdP4ldd2o_0O~SU$i?|c7VetUo@`yc(hHnlh z(!~9uHH3r#H$q_(R?@x#rH(q)LrR(ANiHX_P1!CMJZ``jA~t89B$!GB)Pt0V%ykpV z8&mVk`3}E;zk)tzk0Bz#>{jr~7+r1u=&aS9WD2^sI9ft9IVGhB!61 zO5brw1aQ<)M=MysUYle->+Wz(56qycoamw!{b#jrc@~txG`4|MjNSKHOhee|eY@pz zQSFb!C;9$tOQg60t9bz83LzBsbf0c@i&8+t9dC*y^1DA0WKpy&`Is4E+MLf{&GCL^ zBK0xkARKA(Bcz3CSiL9*s|=D?c&a&U9gc4L7YeTY#vYNTgxx{GNzc@hzLe-gpZ&GG zf;!T$>bHDnWiWaz@3(|y{>-K=3s~Fr55i%g2K;;wM_*7XfgybQl9?Vkwft!3+Hwf< zv#{?=qJIR3l5Q zB@tu+DzHWVRgqlTpM+tqX7t&}5_Wo>-LUAN8$czU&cy+X!5hz4w6i+;V}MYq+OK1h zKN5-J9L*vAF66p|aM+bQT?C$$_{0}o${R+COsrrV8kNnCD`w=&vboKhSg3$mGL4XI zka`GLesy2hqNRr$l`u!Xb$cy@B>+(Td*7&5OPfcGxSSvO%b=ZnCyFL#5xBeqA;t;c zj}Nk*1tC2kN8ybdRoG=ke5Uxl)K2nW2JUI@Gn?ZtWGF5;We>zLa(p8mlb{M#JQiTR zNy{0~)?$#6n`vSVRN>q~>FU1yIdkrf-?*Y7lHM!|N-m%$zyk)eKdp!f`IP&6)$p*t zm3A$JHCLJQ*yIlcjVEe@D3r4ZmK#U>*D_r99ihetjR3YZqD5)mTTS1YL@TC43$r{P z%l;u{OR@E@jmgW{4+uSu>EdMBWxgY5)01R~2hj}*s*<>pG?p-p>E{;+Jz(Xw`{o09 zAC_fWfLTCSIUpGX$x|Rm#uF(xLD9lhoHar0)mqL-H_l!fg!%=JiJ-2u*reijDM7{@ z2Q9f(ePd9QhSaq}Gsp!zNg7)iN13k+m!QSpING8sqgK$SYw#Dfn*QgYs_kS{@co$H zA**@g4}_LPddBR@5b>U*Kl;C`r|L@eM|Vv79O>i{hNbBkvtxll*Zxtc$?!v|ZE6Zc zl69$BUHbWucj_x8)TO%XXv+pYO;PO&KvjNJ42aQ)Evw=QC53FOFPBjMa4k$P>A~;l zi|9f;JE6)Ui^@-A3zAw!f9$$^(zZ4Fz(HXR-uf~s@$#Fa;U+Jy36o+OhSc^#m=d>n zT7p8_mLnO&Sb)GTXpF}d1{Htxko!YUOuWo0_esQDU8y!mn%hi+C_8%%ZR(mhPuIS5k@9xgAb)nR7Qh00-sI@Iw(xEKj2{}b@~oWT0L>Xu(v=fc1dGoA zRH@iS*cR#^alo^z5&XMpt0k+{d1ojz@{LF6dv*S2n^;B6MLrH(O@(C0H|u!LU?h+4 zxGzdUV1J8jifaevpW}R!(u)6l&NX#Z-%H#n`X#8KhO+<0QP?&003bC zw|We^fo8=2PZ#7-r8an}W9)Cp-*KRXw@#tqZ4L2fPml}>Ay0j!{$7`qIXK21Wcs@; z=!rMKF4}cnNQ#P9{jihzO_*S6A3piw}c8t7}iriY4nzDzPb2)5`wEAwN0M+0kg zJu}7GcGNtpGYX{!sS#Xs$9$8Hn9oicSthjgwjTtS;_u`@kFO!rpiKS%g|X9fH6C-w zkyRIgS9o~=;y?UOv%Go!XwDvuH!YJ!ri;KYyqx?$B>+Nq#_3+W(RXR=4Kh~d6~>5$ zIP(;%6#w_Cxi|#)7O+8Fu9Qn2Tr$JC@{oD8RsuYUAM#ILB*bj%Mmyi12Y}Nb_2@=( zF9aj?5m>Wn^(~8jPdmoeoH&%d2Q4?y9R1pYKx3CQY|SQ^3*&i0lJfU)%6P1(g#4&r z0o^3ST3uD;!fkz#f^C|se-gJ4ooGKU?(ls_(E=zhB7WTXr;GMA|4Ey)3{ch#V)w;d zp0`l&*QMwnx1^@EC)6ll0E~iP^(ijFPY}n`n|KGFq*)V#axtUCKSx;ICEN$ADu*yt zopWV?ot!9^S=S_}>(G&mJ&{&~{)@-<2b<6_+(Jyl2h1Nyx#Ye!a!MGSko=J-l;^A4 z^z8KzCXNfxp_jQjZ;h=XD+K&PLb&TI9`vyi7IL^l0K-8XqWr)t+QX(Ts@cCpgp$Eo z>WMo_dzuU@?W-w;RDR#V)lG#Tb-_n4g3OZfhY_ViAMvp9h4bxm9|P|$q{^~;EfL)1 zUrGNVM_j{s`d8LQsX*#RjHu@d4*V6SsK*3bsUvZ5O9q(&RI%w^-`>>0N}wU`Xim=< z)^fk)zjiY&cUy&H1b1I2f80WSc^J<*YRc@;qlp4>ZRwwqFVPe;Es~Gz=S?Q>ySwIP zY|E0Q(HNaOWE=FDWGlUG3_>nPk&!W7J$C%&Y4QrETZ9WR`By*yi9hOf|z^Qkc*&2RmK8cYNOt4}J(ecU~Tv{Eodq(-t1pjM*= zYaUh3kgSKz1~P^=S*O0CbpeXOXQCc&E)L!taPQ=-ipL`1Vag?_?*5v0*StihWXD26 zU!Ov;nwdiIA4FO$_qTDY{NauXdj*Vsl}*e3Hb96BshqTkxMTL)Petp zh1)3|HrNJ@QDw=?#tgYpbkWI;ppY+f$ykbpH3SpUWR#L+eB&t7vx097Vyi%JQULyg z;xGflB3hKcS0>>u?S!~tcDMq%b2{k%wg2DnsVnQPxa`8VW#Q2x zsm(+SSXnFOMG>z{&f143aKP0pOF&AWoHPMzB^VjpF?o$QAnT2UMVNM6BRIopzFU28 zc0W?L@(<#m$GP4k%RO8D2o2)br_H_5JF-s-bUbVJBejgTSqAcRU~*=%yW>>ks~!rW zuCz3;DzK7gLJSpid*>Mr=mw0VvlG|cz5_t-hsPEf6i@TF@FCM8Bv(o%UYwyJyv z(9a<>@uJg%R5;Z#8jLPrEp^B{=>MCAkjt;78e9H}hE?fuG9yV;L{M@eDAdzjGSZ@9 z1;O^@W3%EDGI(>!jo!K&`#8sC|PRukp&?*WCLvK@P5q8clOiuu|4!PP?rx2RS*=9uJ+ zpqTy>(rKt}-2IcN_Z1v0!tIjtNghuNm9A?Eo<}xsoh8vt8V-~2n%W(JqR=1ilv0*? zg|@s;7<^$e$N4Qj{^>^kME(Awq>U~18sCk6ul4qPktzEc&+Z6{-DGoNp&DI=eh!5} zPB8Oqo*zYQN5oJRh(C^7(okk;V3ol(H8e06{-Z|oer*DyGjka#YFd{K%cV7tm4jC? zdJkm;Bgzu0!3;S1W03JyYNs0Qz_RQ-X&ZSNX1?SE*P2aAVlyPoB4l{5+3iZFBz*qK zM-tNk8h*eVuREYYA~c{#SYr^yZG*N}m76W{1ueeSHquH#`@oDMiv2Zp=lEA}u4B2W zD*vpRA1s5(nYNafVb>T|g&Mr^58@c+MEA>V`t@copj^?;X0d;ioj9XZKIh3rr7kU_ z1P}8@I%VG&;U;tL4#M(<>-!;|8fv5Duh*OHq(Ho*1;mJ_kRTdg2a6J>&8dz{7d)Th zA6U}Qq~-Ri(zAX6u)a^Uu%|{Pbm3u@tj5%oK6tfJ+6?(JdAB5T7M8pIj1NYPx4k^p zbG@@#Klp;E(=zGnNy>EGMpyztQYSr)bvmgYGmlb^$IZdH1H5=YK<@56xQx z`G(~RR8@w#((!ngR1_x!u)`v$e3=(L; zCxo`2jrPVbMnoS%St~meS%$@WKmFvc!T|Y$_PYVSThYRjqHh!w+RR3)KNFt@b!80) z+Ub^WREFw$C(14Qgzo&S=jO1+>!bL!jfN$=)ReMX_w4Es8cj3G75uru0PPnB1_n7x zSZoUtghu@5Gnchyke_V4EUgn_cDERqXhr=E$shkdm&4>34?~MpD;x~W#xnyWLoJ%~ zEpD+jgj`Is^;naW!pJX}D&qI%O9r|Ys}@QptE+A3=?b8L_xv%?QLuy`XABeOa=);F zX!u8utoXM2dPx;9+$fPz%AWg5%_vkutAQtlUQ^`suG_>3&ksHp{QKtt2i2(^%)&)` zBc;j8;0e>N3zR=I42duSA-)oQo6R4CVD~E;iic>RvQw3A5JhSGfApW%oE1dv^QY+- zN*#&_gMNR#k+^Xz{Q!Nn5vgNVbyZs&RC)!h-23j8-#wFhLq&eA*J06NB;X3e&7JLlvY~^^jn(ex(@~Pd#`~?*8n*`>mA#7U%<*+zD!sbyb!`p(9 zMuv>i)?f3NH@#k$Jg)D$(RT;3Ijzwvx|DjRF44+FeG2u%7#CHQ)^|O;>V|jr_Ap{Ej~Kg;6r#J|#9^8^H;16u#fSQr-9` z&8TN^j`T9VnBNAanUdry^OA5^26>c1w8RpXrq7*7**$$(q zK^OIB=)*W=;%+j{WhX70n0ctv-p_q4(II9LJ~@ICCs2M0H1)U5Fgm75Vs$jiZoZZl z6@}EKoJ1ZRM}v6Q>0+LVJ9(Jg=hZ-xOb4HJ_>s8UbV#I}s>+lo@o{-*qG=oJj`A1XFW>=cWOLO(uz zUzP+-!z{{Nuk8PJc_$_rv(->-5Hw9m22qS9oN4t;Nxz`U8&TNHc*z6)*_*#D2imd2zNS%jj(wdN--bbDxzm?G-PvS z`dnm%-tO-_!zEZj{{x)9&ab=XWhhQOq()9dKm>2O-jJXPjjtsAOEiZ-(zL{B%dM6?gnHI$3-|M95t zVd_8MfhftIh*oKng|rjo)yEvuNdM(%($RGf7iF%rXs)t-6y)?mlq9nEO(527KKB>+ z)hnH=Hd}NXg&(|2Ua&vF!b+}@{2ymHp*BaY#*OaNFO`%y5&i$l`s%Q#zVB;>#-NmN zkS;+6rFC@ZMnoD0kWh&sltvIPd;sZAY3c3(DG>pYlA57IQM#m&koOLX-{14RJo6W4 z?z#8uv-jF-uYI^spt-+$0alogR9tG|j8{OdCI@{ZN}f_F`Qv_kROtj;p1PFA`YyL% zPj3}w!Du;lq=$2L{D#BuSL-|PTJ_b8Lj)`A3}qV|?LhN@QqGF`g=ohEecA)L zes^U(+pJ*1+#6^+J;Bd8b90X(GM@ADQz5U-7O9>RrFxKiUw;1#IC7#lH>lWe3pNok zIfpLUVl~%q$9bRxkf_j}c%^utNu28RUwaR<|i$W-C+VZ1;p?91x?qW_O5B_y-RTy+vi^TFSAxQlc zWoGOEM(HwvVr)Vj<4Q`W#=cxDv`K^IPYqU~vwwU;!g4Y?p2$8sgpo5BI;BGYm>jdD z&T=N|+DXeIJsgSREu9K9a_z?NUtU%%Gr%Ln-`czv}p!bBppbOT#A$ zf`^4%=B)H4fPZLksLbYoA7%9vjP-hspBt$ki|oosr!WR&sck@jIE!$B1C$u)N^0nnB@i$@qGKu75`2zwX6HB=uJL#l+=O$B_B#Z zODSmsA*NdRkB_}eH-0Dg`?xfrS+2KdpUp!#+Xe@ezq~Lv^`>DnNWFreA}Fo=4px=F zoz7o{PguO^|MVm^m9E1ytc?*%=gVl-AJ1y^k-E8+@s&#}hgs~f?@JT_# z`u-&;#g5AL8!YIy^3$Wnr7A7nq7!l+FD5F!3J6aM(qumjoLTgj{?I3K?I zq_lR*$9;lKhGngn`pg+EQnX@t(v~g54#O+EBWD$Z8uxNZ{cHP9A($op+?4~&*a?Fvc6CSP~5GIfY z{xM^&6&NBn6zUJO|EqSrkBgkM;OVPgwE#7a%S!`U0|DcqFsbn)#=j;JEhTLh{oa&< zFTA4Ue8W-GXqC5RoBz2SNr`&V3~vW_de zj|JI4#B#1-ObvmvcFaqn!D)P-YETrjZzo?0=P69%SqHTE%wrR+p1YnaVsAGee1Dg^ zq<*5#5WmK)deXb|fW*?rE0}**_x0=SCC>P2n?;vgYr0CX4d$9auq$u{?B^*!teyl5 zAVBnCip#4rw-&)>VQvM5O~2@Wd<1W1y+S$ctZF}X}X zrm+T#@ArwX&B?k#gXCb!FL|TS=3p4>!d=={0E*yAvUOU%LN{YjoRc#haYGe?-kPto zFw`$e<4IZTPp^fzL2KdiE;@5A5i~T>--{i@EdEt4`rFctK0~DmIrI??Ciy` z4}09S&X;@(P#x=T$|2OO5F`a*MdTyo&^s(Ecb01LI1}Gn0?(H!3fx^YC4fFT=FNi* z)5+pX`?tqZZeT6-Zr&?;SnyE4V%kq|Z#zLZFbi|xC8-W6E0T3lVCj}HkL1NSc28MT zBU9EiXKwS9^9SIy{K$H%axv*D*mND3*Q0Ay271u7jom(QlORf5M*%G)ukTTq zdjprBYpWQ+X~~ACxBgi#mh~++M+C!Q*2e;uGUXSqeeH~G9;xt+rYCo{460%uDEj+JRau&88-cPWYWEcj#h1;WnOf9%;!a?a0TnX8Q+J7eZ%lWS)%-f6)ngvlmZ#-i5X=yl9wa zg`@MkCZ)c^tUI6Z2d6pC@MW`ilp){~%!-F>avfqCgt%1=j?IxCc5?i|%hbS4gILg= zdZ~fF*0OmFmrl^mPjiyLGlSjL3i@n&RrmTh#HU`TibC*-UC!}|m5q_1*dByD-bP1Q z8M%ldH$nLxF)422!?-^gEDGBx77+<(diLyAetaPVm&SEh-3nWKCCG0VW7(5H%2hT+ z=1^=@a^3p5_lNN-IND`)*_hLHzY(^82~|`<4BK7?wvN7^9UZ`3=vK&S4CXrP z!EN*;x-#3EF6$(_U@6M5#4!A(M;gN zB9I2&H|pkmJqu&OMJf)HBCqGAoV&}_Ak+|b<>hCz%4GP4Ml+E|dBoiRb%*@r(6qJA zQ8)GRLMxiT6}mLD`gDsAMV-Z2w-V&9=W9gX3d- zRKIQ_k~qF}!a-<{)SQ8-Z=(GG^6C~Cqd;M;?Dck(6jZue_FFgMeY>1a!aG(kDxYP? z{XCq|iXIpHttojY46O3)VGjz}F9B8@ua>doC4kjao&EikMzgG-IQ9{L&%)F?#7kJ{ zOBr(FOFF@~54972R%l!-HJ~O$ zh0OCk{k!Wj>3O(AIffctqVh*>dAmc!@Eq_=Mgmwkd~!~`a(MsGfdjU|Zw8_F$?q8% ztiHqmom+Yaf?)VdF`REX)e_H6_;=h{5|WX$2Vm{pab9~%x4|DP;OYkLuzx#8J2?iy`#L*8n8j^C~EE zsL8*PNwR{90omH?6P{%*GRl#A;jVWzBsgVoEaQ8~Pa`|PAO)XqWxy_VrNJrtv63_x zg>-%exC1wz=r`O4!9W`?c0|O7W9T{~_qfjRD(sevA{c=%Y+QGQnL^O<&u|izZeA>r7QxRm|d-SDj1}b6aOILPTmvuui$e!Bp7ODKUws4 z3OYk^HbnP($t5Wg(QF0aGFdp9X5jZ5@~Lp|>U{|uZrZ}sOCKZ(gT2baof>YlQqDmE z;d>zFp5jt;HM;H2&>cHPW_b~3TP={%Z8-mh%<(&B2hw$C<26k)PMxZN=ZQ z7l}Z=8(qK0qg=k{@{gjM4UcR>t_7D@D;OvOrR;+OJMj8H0@gryjUvt}eG5$1+?gki zjP8t(e{f|M;M75THk6kMW(v1|nc`ujTUii(k5-Yw`06L!dsJYTyo2DpOHOC8>!@FC zgd@-O-UTJWpjOpvB4L@l+>5^6AczOB3KVWbq(h?nDBjsqd%n@zL&U!(d3~j!>E!rS z|6cR-yKwdpfJRD9v^-EGrB0@^oam_{Y?z_}vib^AsyfjI&y3G(QW8H&d#~->u&m{3 ze&MSO{fd+QLDBkq&%@tE_G;xr-og{S*`GcI-q-u+UG4{=>dcKQ;;_O{QxdlUMrGV6 zKka;jcVa4!st8f>lCWr)kY}w$|6q7}Y0;54rITZcv~HCEeiEl-6`^I+Rd^HX=^9mi zo_v2V_Co(^h_^XeKOY3ik<7frX?QUZQ>FS1*`F`j`<@h>td}}puJV^u#{r2oMgKZY zz$n(bCA0gjrc(A0tCE<0y$H~maYQc54Ic9yjGO4CblNV)7j9t7(8m{6@uuy}7}~eh zms~`->c`|K7trL7(Mo|c>f@somDdah>XG9F)gDIP8OeDx8Dlh%UTW~VYQ6iAD)x|9qBP%CGfTszO1F$OFN1rYI)wb1*NT6KF03< z9wYUZiWPXbwF4C3??+xBOPN1Lird*Nv90gp%zP{w`v{%Y6|{HXoM$SEF!irV#z%hr z_c0@~KhC2mB_sJ6xaT`~fA?IpWJ)F#UP9vUcg(7S>8-ecS$+9u2}q8d_YSU2p-B9X zgmr1EE9ehuK1m1)aB<)UkyrqR^>f#%t3huGe-4|`^fvD%06h80k^o~WA*p9b0B)ZYMX(S$B9Ul zgR9{CY%}th=Hj#D>-1y0RXMuXRMU?|?WidolT(d~VKRNY8O zR!lMwpBbu`3mpG_Z128QqZ7ZFf%W~8EgA^Tu94ftXbobHZ|cKspp=d)B+m>vh6|+< zD3WQf0q}(6cU2M4IdgS>F|>2tuego3%jppXy~VjY-xnhb=~645VsZ>(YzF3|TbTJi zlmTwf9SkO{B$JY9iTzHXf9x2NjZtv@Z9Alh&$heTQ=v1r7`aRbn)y1;hei+iCGxW% zX@|@1%2TV={UbJ`=UcP30<4Jd3}XkG-dZd)SigLWFDxEsgTM;o3oC$-QnkC{m1c&) zSrY0#muZO=Q;#ebbON0n^lY|k=pu0&PZ-1paMx*t(uv*lgnfGp{>24usj+Y)kIFq# zguY}v`gec35$qcwEPTX+8HaM71CKRlOOl9WmxC5=q2UVD4>7OoE`mVEsOEa4&b8eN zM#|GM1Jtu{j+BfsLL4Od-pVZ_tO4g6`;QOJ3trK`>VtEz0ot;|&jx_5ie&b>_|^EP z9G!W^k3mU@vj`t$>*60Yvjt&8flA~fzi}}gOcz7Zs2MLgC5~AjMn&0-b=Q92V>8Tiq2wt({p8pm!N2Ad;5Q@T5JdKS>YqhCmvs_Fm1A_>E5j5$nN@cJa}K*Qk+ zvI(xvg{Fik7by_pmQ6yJbh6MLrRxOL+`CA-e7xRp63ckpyx`KsIEoR{eZv%nB>Bb6 z)^~a-M5VwqviLP*>G~(oRy_cnHBksHOz_9ZG6w{Hl&K6a*nGr)FO*nz`AzHBC(1^> z;Q_x|K=_i@4e>kmIPGQLm}+fu;ZXMQTQ3;Mme*@BuFib4xV%T^)rAM9sF3Xbd;9T8 z>MD3%dqZ-rwL$sG*J#M)_U@hUJkPGlNu&!!lPjGvS-p8MfL!Eu61m3$;+fO!_QtUx zaHAZz(AU-8=8diQ5Ai|H=0tcp$E`0R{W{(|wAVf{F4K16?-XD^O8nJ zj_q36Bp4eX+{7(3t_5~!pj&s!VV=P%G#9N!@Bg6#jJ6dG)vAE;d9P$NkKPk!3^!}0yBzEoLC1v3;J`kWWs@)qMs!}p4 z`cY-s#MslncDvc-b%P57-1zzzn)Y7mtw-sx9@*H*Co%P&)3xEmn);#0M3CC_D2gZ}5h;eBq}$tep&)1>RRsh=4G;vA6qAxB zYDe<{C65Os%zClNs(NYEZ0G_w=KD##joLh2F{#73#`JPv(9W|k>Xrc=rELF>TRKdP z@^?|f^0d#E*uOO=RI3AlMSBJq2&V7bHkgx*rQB(~L zmsKge?H5P>^7YBpd8i6KMU>4p=2rJ8;HG#_KBvsdZXl!J^(3!m35ZF?yzoDmbip&O z%-2#f!$l;X&AEhfAo?QJvn4K-TCQu(#%|R`B>sVWx>dHHkt~Z_1?kF{Qscp}xL2=C zJQemKV@_9Et-&HVKQGyqHlzL736Z~+Gim>I|1^*(O?5lU!yr-aH7^SRZ8l_e24#5i zTHxKSkV}gvA;%se%SEBe_1;YPs&lxQL)o8#Z>1<2BX86xvmB_DSpl#_3F~<#MHgqg5mqsx3N9`jN2yt#OlX4pj_EA*L)VvhNZei5!IG&vK+SuipRs&&b~k-qc)rmAk2rw zgoQ186)tX9_@^^hgI5cMIJ^nU_I;ga^=sKz2N_(q%O33@qsLiG`*3a}^;z*Y@x>o3 zsOr$rkCRs%R`Ob?gdgyJTJWG8UcdNh1AGIEz&B)AuAB-FfIiBfNJ_cFBzKv5-PH4r z>X7@v*aja<_JWX2dSp~l;b!6zD@+if8{ z3G+MthE5AFxDsGp@1j%&BSTQpD&i4Udx>4E?w^q_3L=AT2*32!!@6>!g|jo0R4b~@ z^dx(7CLotpfbA`5{(7N1LVUjY160-i`dx}@BC35x-4*(I5P>G~yF5+v`~Evl9xu3> zq%b#{U_Ci`NjW2RFvR7+rQRMJ*s_+QS}m!?;6!F91Bv$FZLLBj{-vPN5=8FcRI+^G z%U7&4Q`9L+&p>N)TrSAZZQXL2*A7S-Ug>P(Sj2>O}W~>x~q~a@^K5UT8~G zb<5z8Ue9HmscI!vQU-g!F>=bp;`WOvSXa5gO7v?jtr)FItAL!$HC7teZ+CJvZfc<| z5d}gjFC&%~9~%t4Q8vBvdoonqgA;nn-)7qLFK9=Bt@WXj)A4vfxiOiy{;{IQVcl4UjW zpfNJt?S1p_=wKsAO4e=Odi}_NqAhAfK7dZw<~1Dts7Yigu>3bq!5hU-Hy$%p)p0<| z({1URC3?OD4R>h~p*CkE|FB$WE#QLo*lo?{WYOs3&mZA6ffY<*c~mlJTi5G+kO;&4 zZB!wSFd!{;#3J~d(0Zs2$REzfwxr#j>hZm|9trXo8w#{e8t%cwY)<5h*wd!=SfXrw_%d>dRy+CZz1U8#0YKdECKp3c2|%m2ZohQb?6%H6nO zI1H?gsLOqYHYV9O-2E#OKWQp=YCZs$S-moK0BfZbT zU;B(BjHwGoW;GHttzo=ssoBY#O0`@(&R)E70A~#H6?o*A%3ZW*q*BBGSBsr1Qlo@d z((!6N+-)`^F9#%FtIuFiZEy41bCxjnHt{(eSAN+_3>Rt;p=$2^&GZihntzpm4mW=b zy{xTLs6u3U{Pt@MZt-km+3Q1CE_C&G3o$uYpQP|Ma~=OQ^M*fD#$5Eg0eI@NN{I>K zxX=0XUxjOX)b8P}m8y{}J}GgD^9x9Q9B)_YWF0M?SLRs@60N&bcZN~AN_V8H2ypTO ziROcdT73_17w#6!5U1Mx+)S-J(BEHXDvb|$2HesdPh#JGnkqib3tr+Ze8ilnFRehL zVt80-(ob+n#mO-cUayaB@AxJV^WM`Ikf>$4yY=u&(51{l-!F(RequJUUvf=bVu^=? zqJ1Tr&VGn5hOa9pcb#`%sPw4IGK*{NU`Zo63|WFdtiGZ} zw0Iwtm7g+Bi`CTZEFH;3G@hJ9P82^Ju0V)tCq`KxjF~dXU3R!)>{3hYN37Nitk~x7 zT=gOHo17##+_Wr;8-k;>iygmnJ!Z^2SRPP4YB1U<6NC zvflFyrk+kIjL9Tl*Bn>$T)be+e4@StmlY=I+vE50C`gIpo1l<@d?|C(KtWC(#da0Brl>)mEZLG$d-Zsq?3@hh>3wu znNiSd=Tz~|yup>*zxcB*Ixa04N9Hk4(HRvH={4Oxb^6-k*?R4=QPnSL_j=nq3DYb# zvD38kgPN*CE1F*hhg{O9r#&ekIRQ#KN@e~-<)QM=DMgi^gYy*Rg0BV3y~1)+igswl zG?r=p1!ohjmz2A2xw^YSqKcY`(({E2f@43eBzwv>#GiOsQha<{O*C6AbV{}qtx;G_5$cX<`N^+HHUmQU> zYsb!|utJ9v9C0N2GlJdPkz5UVqe=lX@b%;xGqn-kC`Qe(3e7*Ev?rWS>Q%l+I;HFQ zU+LXU+N-U4b{*YOx10eMii&2+xIPMb^+s=Y1GL6n3D+|36-ujn#3*+7yAe5_33Jng zzM_&l`lqYvHM1cLm5j3XP2x{)s=NOe+ZR!dFrUbSJ)3AOi-a}YB#!2Mpcsz_i!RZ% zio&``utuyysinj=Zc0`)oGXL#{WxnEg1X=ln621LamK_6gTCwCd5o9Nc7js)BX2+K z{$sz9SyRs`qL>dpSAp-)hy6D1a9?imHM&c%Vr8}8-!ay@)Pc^|HFXcv-m`1pG5ISo zGM&^1Nr7OQHl>HOb^-G!?>VUP?AVQ@cI9(^&}4QIT1IY`KjCMJ&q?N+N_vX1TLc{m zvHH~^Bw!YaUD?`LfV@2 z@D@mjTo8X?9h5G)Eim(+?>l}%&tv9#keP+IdbwZe-&WnhnFn}^SmSN5R$J+iT~0Gd z!CE^P;EQ-LfqEghL|UZ+*Q44dhRX(QY5oHY`8&SlcRWO!p_BtC6T{2+9ubKFw z@m#Er*Q9C%@>hhcuH8ns+D7yXJvX$L1MRZ=&n|M6otEHJ>VF^PE0Tnf0|9cVs{gV) zKAJJwa0mu=(LJuo_i|L^Y!EnFAFZ%u>Qs0lHI7HV{);h5VbNFF0hYqFNzWk`2<5O) z=f4{zd{>w7vqp?d`ndgG!TJw+olRfiCU4s8dSxjz7F=^#m6F`f`3w=(a$k*@6){|9v z_kg?5veA~t>1VP8aC-E7zbx%^lZ^BraiJj~BK_3;bbn!_4DdQU>YF*?py=>)cXxZ` z?)IDHH&L0#vD2y3{_#Ou^UqM@qrKg=?;Reme)fGmIH_&eKiy4e_S&4HV19r4`_>Gw z*%}}L0Nc#Qil3WPU5vec&50T7e-$$(yC}$z>&V|-oAAuHh=-rS=}_g__MTjo)px+l z=JuMQpyFCi^h;nrv-7L!Yn93t_+XV3>Q-FOdT+ORRl^MizC{E>_MX{T&LoTltA{bVq+(i}F+AGJJZA8}!zHN`0BuwJwi0}ROtjfxjy3fLQ zC_3%3hDU`>d_wQM;J%;H-k&L6joI)!sipU-tOJCPhwpDX9dZi6?1&!Q*_0M~Z7;1S z9Gy0L91d0{^$m(bBhxks}xX#fYQ4g#hNJt({#07k{;xlWMPkPTkY}gB^*Ly}gsui?}zj z5>f0ha!6M31PVg{XBn9ZpRTm)q∈q#bH$l7%@2>`tevQ_;SxKREYOj;3N%wy;tn z17do*we^z1tT*ssNc|NfpT|YcuR_=s>f#%%M6NE9l9zO?6dBTUAusmTh?sa@=D)zP zmUx?J+~Ya@r-!Rj_6dXmUsJ0dVX@bRcevUZF~j)Oet{ z{VW;6LiC#Ws^!LQ)f>OJ-OIa-Z0KX(Xkvd`eoTI7zhJ{7Z|}fth`82Js#0$gNVTPT z{Qjl;wKV8R{Y)I5*1X1TQ=g;Z_`7MwA7`QK$6Tv!2EL6F#3$0K!K~|~kZb;UHlasF zjn60|u+X>@@+UVP=!TxjkurQykk~42rVysZSp95ni)|AQ>r|Da<5SVENu&ZGPu929 z9{oOhiEUCaE79NoK=>g-7yk-p42+XAMm&-ipN1>u78gwn5XlP}k132~Vff#xZt?Nx z@&50RN6cL0O@^~wfZ*Y& + @@ -219,6 +220,7 @@ + diff --git a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters index 146dbad..ab37c36 100644 --- a/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters +++ b/SpaceCadetPinball/SpaceCadetPinball.vcxproj.filters @@ -210,6 +210,9 @@ Header Files\TPinballComponent + + Header Files + @@ -386,6 +389,9 @@ Source Files\TPinballComponent + + Source Files + diff --git a/SpaceCadetPinball/high_score.cpp b/SpaceCadetPinball/high_score.cpp new file mode 100644 index 0000000..e00ab80 --- /dev/null +++ b/SpaceCadetPinball/high_score.cpp @@ -0,0 +1,16 @@ +#include "pch.h" +#include "high_score.h" + +int high_score::read(CHAR* table, int* ptrToSmth) +{ + return 0; +} + +int high_score::write(CHAR* table, int* ptrToSmth) +{ + return 0; +} + +void high_score::show_high_score_dialog(CHAR* table) +{ +} diff --git a/SpaceCadetPinball/high_score.h b/SpaceCadetPinball/high_score.h new file mode 100644 index 0000000..667905a --- /dev/null +++ b/SpaceCadetPinball/high_score.h @@ -0,0 +1,8 @@ +#pragma once +class high_score +{ +public: + static int read(CHAR* table, int* ptrToSmth); + static int write(CHAR* table, int* ptrToSmth); + static void show_high_score_dialog(CHAR* table); +}; diff --git a/SpaceCadetPinball/options.cpp b/SpaceCadetPinball/options.cpp index 5fe9486..cc5ff64 100644 --- a/SpaceCadetPinball/options.cpp +++ b/SpaceCadetPinball/options.cpp @@ -53,14 +53,14 @@ void options::init(HMENU menuHandle) Options.LeftTableBumpKey = get_int(nullptr, "Left Table Bump key", Options.LeftTableBumpKey); Options.RightTableBumpKey = get_int(nullptr, "Right Table Bump key", Options.RightTableBumpKey); Options.BottomTableBumpKey = get_int(nullptr, "Bottom Table Bump key", Options.BottomTableBumpKey); - menu_check(0xC9u, Options.Sounds); + menu_check(Menu1_Sounds, Options.Sounds); Sound::Enable(0, 7, Options.Sounds); - menu_check(0xCAu, Options.Music); - menu_check(0x193u, Options.FullScreen); - menu_check(0x198u, Options.Players == 1); - menu_check(0x199u, Options.Players == 2); - menu_check(0x19Au, Options.Players == 3); - menu_check(0x19Bu, Options.Players == 4); + menu_check(Menu1_Music, Options.Music); + menu_check(Menu1_Full_Screen, Options.FullScreen); + menu_check(Menu1_1Player, Options.Players == 1); + menu_check(Menu1_2Players, Options.Players == 2); + menu_check(Menu1_3Players, Options.Players == 3); + menu_check(Menu1_4Players, Options.Players == 4); auto tmpBuf = memory::allocate(0x1F4u); if (tmpBuf) { @@ -247,10 +247,10 @@ void options::toggle(UINT uIDCheckItem) if (uIDCheckItem > 407 && uIDCheckItem <= 411) { Options.Players = uIDCheckItem - 407; - menu_check(0x198u, Options.Players == 1); - menu_check(0x199u, Options.Players == 2); - menu_check(0x19Au, Options.Players == 3); - menu_check(0x19Bu, Options.Players == 4); + menu_check(Menu1_1Player, Options.Players == 1); + menu_check(Menu1_2Players, Options.Players == 2); + menu_check(Menu1_3Players, Options.Players == 3); + menu_check(Menu1_4Players, Options.Players == 4); } } diff --git a/SpaceCadetPinball/pb.cpp b/SpaceCadetPinball/pb.cpp index 5d161d4..047d077 100644 --- a/SpaceCadetPinball/pb.cpp +++ b/SpaceCadetPinball/pb.cpp @@ -1,6 +1,7 @@ #include "pch.h" #include "pb.h" +#include "high_score.h" #include "memory.h" #include "pinball.h" #include "proj.h" @@ -11,12 +12,14 @@ #include "options.h" #include "timer.h" #include "winmain.h" +#include "resource.h" TPinballTable* pb::MainTable = nullptr; datFileStruct* pb::record_table = nullptr; int pb::time_ticks = 0, pb::demo_mode = 0, pb::cheat_mode = 0, pb::game_mode = 2, pb::mode_countdown_, pb:: - ball_speed_limit; + ball_speed_limit, pb::state; float pb::time_now, pb::time_next; +char pb::highscore_table[32]; int pb::init() { @@ -58,8 +61,7 @@ int pb::init() } render::init(nullptr, zMin, zScaler, tableSize[0], tableSize[1]); - gdrv::fill_bitmap(&render::vscreen, render::vscreen.Width, render::vscreen.Height, 0, 0, - static_cast(0xff)); // temp + gdrv::fill_bitmap(&render::vscreen, render::vscreen.Width, render::vscreen.Height, 0, 0, '\xFF'); // temp gdrv::copy_bitmap( &render::vscreen, backgroundBmp->Width, @@ -84,7 +86,7 @@ int pb::init() MainTable = new TPinballTable(); - //high_score_read(highscore_table, (int)&pb_state); + high_score::read(highscore_table, &state); //v11 = *(float*)((char*)MainTable->ListP2.ListPtr->Array[0] + 154); //ball_speed_limit = v11 * 200.0; @@ -97,7 +99,7 @@ int pb::uninit() score::unload_msg_font(); loader::unload(); partman::unload_records(record_table); - //high_score_write(highscore_table, (int)&pb_state); + high_score::write(highscore_table, &state); if (MainTable) delete MainTable; MainTable = nullptr; @@ -128,6 +130,52 @@ void pb::paint() void pb::mode_change(int mode) { + switch (mode) + { + case 1: + if (demo_mode) + { + options::menu_set(Menu1_Launch_Ball, 0); + options::menu_set(Menu1_High_Scores, 0); + options::menu_check(Menu1_Demo, 1); + if (MainTable) + { + /*v2 = MainTable->UnknownP48; + if (v2) + *(_BYTE*)(v2 + 5) = 1;*/ + } + } + else + { + options::menu_set(Menu1_High_Scores, 1); + options::menu_set(Menu1_Launch_Ball, 1); + options::menu_check(Menu1_Demo, 0); + if (MainTable) + { + /*v1 = MainTable->UnknownP48; + if (v1) + *(_BYTE*)(v1 + 5) = 0;*/ + } + } + break; + case 2: + options::menu_set(Menu1_Launch_Ball, 0); + if (!demo_mode) + { + options::menu_set(Menu1_High_Scores, 1); + options::menu_check(Menu1_Demo, 0); + } + if (MainTable && MainTable->LightGroup) + MainTable->LightGroup->Message(29, 1.4f); + break; + case 3: + case 4: + options::menu_set(Menu1_Launch_Ball, 0); + options::menu_set(Menu1_High_Scores, 0); + mode_countdown_ = 5000; + break; + } + game_mode = mode; } void pb::toggle_demo() @@ -151,8 +199,8 @@ void pb::replay_level(int demoMode) { demo_mode = demoMode; mode_change(1); - //if (options::Options.Music) - midi::play_pb_theme(0); + if (options::Options.Music) + midi::play_pb_theme(0); MainTable->Message(1014, static_cast(options::Options.Players)); } @@ -388,6 +436,7 @@ int pb::cheat_bump_rank() void pb::launch_ball() { + MainTable->Plunger->Message(1017, 0.0f); } int pb::end_game() @@ -397,4 +446,5 @@ int pb::end_game() void pb::high_scores() { + high_score::show_high_score_dialog(highscore_table); } diff --git a/SpaceCadetPinball/pb.h b/SpaceCadetPinball/pb.h index f103533..18bc3f2 100644 --- a/SpaceCadetPinball/pb.h +++ b/SpaceCadetPinball/pb.h @@ -35,4 +35,6 @@ public: private : static int demo_mode, mode_countdown_; static float time_now, time_next; + static char highscore_table[32]; + static int state; }; diff --git a/SpaceCadetPinball/timer.cpp b/SpaceCadetPinball/timer.cpp index 2280e70..2420868 100644 --- a/SpaceCadetPinball/timer.cpp +++ b/SpaceCadetPinball/timer.cpp @@ -4,128 +4,124 @@ #include "memory.h" #include "pb.h" -timer_struct timer::timerStruct{}; -int timer::set_count; +int timer::SetCount; +timer_struct* timer::ActiveList; +int timer::MaxCount; +int timer::Count; +timer_struct* timer::FreeList; +timer_struct* timer::TimerBuffer; int timer::init(int count) { - auto buf = (timer_sub_struct*)memory::allocate(sizeof(timer_sub_struct) * count); - timerStruct.TimerMem = buf; + auto buf = (timer_struct*)memory::allocate(sizeof(timer_struct) * count); + TimerBuffer = buf; if (!buf) return 1; - timerStruct.Count = 0; - timerStruct.MaxCount = count; - set_count = 1; + Count = 0; + MaxCount = count; + SetCount = 1; for (int index = 0; index < count - 1; index++) buf[index].NextTimer = &buf[index + 1]; buf[count - 1].NextTimer = nullptr; - timerStruct.NextTimer = nullptr; - timerStruct.LastTimer = buf; + ActiveList = nullptr; + FreeList = buf; return 0; } void timer::uninit() { - if (timerStruct.TimerMem) - memory::free(timerStruct.TimerMem); - timerStruct.TimerMem = nullptr; + if (TimerBuffer) + memory::free(TimerBuffer); + TimerBuffer = nullptr; } int timer::kill(int timerId) { - timer_sub_struct* next = timerStruct.NextTimer; + timer_struct* current = ActiveList; int index = 0; - timer_sub_struct* current = nullptr; - if (timerStruct.Count <= 0) + timer_struct* prev = nullptr; + if (Count <= 0) return 0; - while (timerId != next->TimerId) + while (timerId != current->TimerId) { ++index; - current = next; - next = next->NextTimer; - if (index >= timerStruct.Count) + prev = current; + current = current->NextTimer; + if (index >= Count) return 0; } - if (current) - current->NextTimer = next->NextTimer; + if (prev) + prev->NextTimer = current->NextTimer; else - timerStruct.NextTimer = next->NextTimer; + ActiveList = current->NextTimer; - --timerStruct.Count; - next->NextTimer = timerStruct.LastTimer; - timerStruct.LastTimer = next; + --Count; + current->NextTimer = FreeList; + FreeList = current; return timerId; } int timer::set(float time, void* caller, void (* callback)(int, void*)) { - if (timerStruct.Count >= timerStruct.MaxCount) + if (Count >= MaxCount) return 0; - /*timerStruct.LastTimer->NextTimer = nullptr; - timerStruct.LastTimer = timerStruct.LastTimer->NextTimer;*/ + auto timer = FreeList; + FreeList = timer->NextTimer; + timer->NextTimer = nullptr; - auto lastNext = timerStruct.LastTimer->NextTimer; - timerStruct.LastTimer->NextTimer = nullptr; - timerStruct.LastTimer = lastNext; - - auto prev = timerStruct.NextTimer; - auto current = timerStruct.NextTimer; + auto prev = ActiveList; + auto current = ActiveList; auto targetTime = pb::time_ticks + static_cast(time * 1000.0f); - for (int index = 0; index < timerStruct.Count && targetTime >= current->TargetTime; ++index) + for (int index = 0; index < Count && targetTime >= current->TargetTime; ++index) { prev = current; current = current->NextTimer; } - auto last = timerStruct.LastTimer; if (current != prev) { - timerStruct.LastTimer->NextTimer = prev->NextTimer; - prev->NextTimer = last; + timer->NextTimer = prev->NextTimer; + prev->NextTimer = timer; } else { - timerStruct.LastTimer->NextTimer = timerStruct.NextTimer; - timerStruct.NextTimer = last; + timer->NextTimer = ActiveList; + ActiveList = timer; } - last->Caller = caller; - last->Callback = callback; - last->TimerId = set_count; - last->TargetTime = targetTime; - timerStruct.Count++; + timer->Caller = caller; + timer->Callback = callback; + timer->TimerId = SetCount; + timer->TargetTime = targetTime; + Count++; - set_count++; - if (set_count <= 0) - set_count = 1; - return last->TimerId; + SetCount++; + if (SetCount <= 0) + SetCount = 1; + return timer->TimerId; } int timer::check() { - timer_sub_struct curCopy{}; - timer_sub_struct* current = timerStruct.NextTimer; + timer_struct* current = ActiveList; int index = 0; - if (timerStruct.NextTimer) + if (ActiveList) { while (pb::time_ticks >= current->TargetTime) { - --timerStruct.Count; - memcpy(&curCopy, current, sizeof curCopy); - timer_sub_struct** nextPtr = ¤t->NextTimer; - current = current->NextTimer; - timerStruct.NextTimer = current; - *nextPtr = timerStruct.LastTimer; - timerStruct.LastTimer = current; - if (curCopy.Callback != nullptr) - { - curCopy.Callback(curCopy.TimerId, curCopy.Caller); - current = timerStruct.NextTimer; - } + --Count; + // Advance active list, move current to free + ActiveList = current->NextTimer; + current->NextTimer = FreeList; + FreeList = current; + if (current->Callback != nullptr) + current->Callback(current->TimerId, current->Caller); + + current = ActiveList; ++index; if (index > 1) break; @@ -134,18 +130,14 @@ int timer::check() } while (current && pb::time_ticks >= current->TargetTime + 100) { - --timerStruct.Count; - memcpy(&curCopy, current, sizeof curCopy); - timer_sub_struct** nextPtr = ¤t->NextTimer; - current = current->NextTimer; - timerStruct.NextTimer = current; - *nextPtr = timerStruct.LastTimer; - timerStruct.LastTimer = current; - if (curCopy.Callback != nullptr) - { - curCopy.Callback(curCopy.TimerId, curCopy.Caller); - current = timerStruct.NextTimer; - } + --Count; + ActiveList = current->NextTimer; + current->NextTimer = FreeList; + FreeList = current; + if (current->Callback != nullptr) + current->Callback(current->TimerId, current->Caller); + + current = ActiveList; ++index; } } diff --git a/SpaceCadetPinball/timer.h b/SpaceCadetPinball/timer.h index 2834896..d06b34b 100644 --- a/SpaceCadetPinball/timer.h +++ b/SpaceCadetPinball/timer.h @@ -1,24 +1,14 @@ #pragma once -struct __declspec(align(4)) timer_sub_struct +struct __declspec(align(4)) timer_struct { int TargetTime; void* Caller; void (* Callback)(int, void*); - timer_sub_struct* NextTimer; + timer_struct* NextTimer; int TimerId; }; -struct __declspec(align(4)) timer_struct -{ - timer_sub_struct* NextTimer; - int MaxCount; - int Count; - timer_sub_struct* LastTimer; - timer_sub_struct* TimerMem; -}; - - class timer { public: @@ -29,6 +19,10 @@ public: static int check(); private: - static timer_struct timerStruct; - static int set_count; + static int SetCount; + static timer_struct* ActiveList; + static int MaxCount; + static int Count; + static timer_struct* FreeList; + static timer_struct* TimerBuffer; }; diff --git a/SpaceCadetPinball/winmain.cpp b/SpaceCadetPinball/winmain.cpp index ec8631d..16c7a5d 100644 --- a/SpaceCadetPinball/winmain.cpp +++ b/SpaceCadetPinball/winmain.cpp @@ -131,7 +131,7 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi picce.dwSize = 8; picce.dwICC = 5885; InitCommonControlsEx(&picce); - + WNDCLASSA WndClass{}; WndClass.style = 4104; WndClass.lpfnWndProc = message_handler; @@ -167,7 +167,7 @@ int winmain::WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLi if (strstr(lpCmdLine, "-fullscreen")) { options::Options.FullScreen = 1; - options::menu_check(0x193u, 1); + options::menu_check(Menu1_Full_Screen, 1); } ShowWindow(hwnd_frame, nShowCmd); @@ -331,7 +331,7 @@ LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LP { activated = 0; fullscrn::activate(0); - options::menu_check(0x193u, 0); + options::menu_check(Menu1_Full_Screen, 0); options::Options.FullScreen = 0; SetThreadPriority(GetCurrentThread(), 0); Sound::Deactivate(); @@ -359,11 +359,11 @@ LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LP auto voiceCount = options::get_int(nullptr, "Voices", 8); if (!Sound::Init(hinst, voiceCount, nullptr)) - options::menu_set(0xC9u, 0); + options::menu_set(Menu1_Sounds, 0); Sound::Activate(); if (!pinball::quickFlag && !midi::music_init(hWnd)) - options::menu_set(0xCAu, 0); + options::menu_set(Menu1_Music, 0); if (pb::init()) _exit(0); @@ -432,7 +432,7 @@ LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LP if (fullscrn::displaychange()) { options::Options.FullScreen = 0; - options::menu_check(0x193u, 0); + options::menu_check(Menu1_Full_Screen, 0); } return DefWindowProcA(hWnd, Msg, wParam, lParam); case WM_KEYUP: @@ -640,7 +640,7 @@ LRESULT CALLBACK winmain::message_handler(HWND hWnd, UINT Msg, WPARAM wParam, LP if (wParam == 4 && options::Options.FullScreen) { options::Options.FullScreen = 0; - options::menu_check(0x193u, 0); + options::menu_check(Menu1_Full_Screen, 0); fullscrn::set_screen_mode(options::Options.FullScreen); } return DefWindowProcA(hWnd, Msg, wParam, lParam);