yx_X*&=BK|O zJN4}`0Eusa?1{rS3HeJazNyR}4k!PAGY%fAs;XS39x!;tmN4DLmvaVqa+a8s8WG%$lEKgrRU|m~6@!v+#<27I?@8wrkj$>*x zMlqj6D2Ex?*~+Mxq81fT+f;0whEl=ZFpKGsE1| -nz^n;KC y@G3KIQwRE%vqQPw*^`$&SuALv z7sPLRM%02IuIm|1+jgYCC>WefCme2hqr=Cve3oSd1SH}D<>HtGeHrIT4*QmXz!%~# zyXN}`?qCz`x(oX fL1;j3B)~YwqjUD|~|7s;8dG z2*b9U9mcu#%`oKz1Re pbDFv=2%Dg@ocy`f{R{! z(}DJTau#^fMds2K0fEMkb!)oEgt7)cPnRJOXd>t^7FWR3zIT+1Uc;}V(HaC`(v1&x zz0W ^Iq9gO?(E~fAS#Of^K@H~uAw1%OVG@cm2vOHOK^c6 zKl-5S0YbXd!r=91Al>ZQT*vM5LEugAW32!zA0*lbmb0zB{FJmV-*>U|<7~})V+xJz zU5wSlTvJs^Q05Z~>Dj3l(6J|F(BC|wSFQ^-xi1J61uYP-LmYBqj32ATQhUr4utVkw zxJ*e8=Ago4ZLx;lX6P;&se5RYIZU}P_%d17Nu^L4F+PaYc;iH&%5r7K(!Jt>+Y zo`M?bTfHE3r@PF35bpzZdUNE3EElZ<0VqS`_0+oB+8uHaF!v*qym<=x7WrPx;S{VP zDCd~6XR6%9cG0XOV *WVHXp*x6rM6@uo7~wovgrJEH@~HD8lt33 z5yecm$0qpVaMMi py!0bcBifWuUPS%mh@^C$k(4rQ8%u{$o#`(} z)9~#*rBG%a)QXpzdLw+=!dSf}SsYGWqVvY5vZ%%jw1tDIoP+XGWF)FjC)>}GbS=hj zd?!+KbwEe32cz7U)fT7_Y>!cYl-*6%9bb|Y77#f5af+KLCLkb@sz-d5Zq8wMHkCSt zUH$Ex&5;H-r(dGCwsE9p+V(3}6SQYE&70$C-pePrZWOj6uwNLax4MpvGQ#Ls+>9%F zt69~W-%x>`d;ewMjb+s6%oFHR)1$#1R8F8l8)=J F+i!dQ zx!xQmm%yYP#{a%LgMP!^VZ73U3x|c_em4`wwJYeGeyGzEqK;S{piVU;cYc;_4cy;# zjsCKpfz6bajb*Id(&V-%x6K{f3c)?5f{-s`@vfX}Fh2u>GnYLd>qBmuXOqY#PQxiI zp{Q#S@kj9Qj_?tHbqM#}3Mvqjc4BZgTo_PL=TeTEjIi z{gq>50b}bIH@KCizh68Yc9@poWe4+%s0I}HYeG`-Wbc70C|g-}&@tRKD|wM^IhYHP zOL%7$W=2zN5qA!&$L3d@GHN{X%D6r-Ac;A!)w=C9H3pK7jy##RsvA2{vwc~U>wi0< zkh=3T?A!!%lOZ_pfqB1F&%NhWRA|Y@!r;@Y+*_S75Wv`4ChciV0T+Qbgvk1=y>7^S zd_S%W3MCQa2Mv0w7c;v#f4V@t%2{iJj)=^;wL^e8iKIPqv|GNJ5$GJF8EAM^2$pNf zm7Mp6sqoh3Yz`pzv7jR~!(uH~5Iecvk?Dg06Sr{PWGiwj1r<6q=|0n?M;WYlq&s@~ z=_dV_8mJqFSurNapJo?qi_4;Y#%UOpv_844Dq%3OO&u6xvE`oK_*6Oif#!DDUTn;= z-@(c*!erQ@Btf!6CG=vY + zb*4c@Oh&(`(H5J1f?Egm(*9-j;G=o4ziSY_KBYjC4Ydn~W1^e-XW^lvfPgN0T|I_( zPoczxcDUl!Z9T|6#xlvOfi$S0JYeu(fzIWu*$>|1qxxU7WnWk7t-Unlke@EH0h@j= zIt8#G$k&N}z~ITh(iX>{JX!}=@w%LHOz;hryp+IPJ2TQOe?qS83FQ^3)SYA@Lc|3< zB3^ZdPqT9h(2?U92RVq7fnw(A`K(8)-bt*A4!iPhM>yP7rMJOy_=qy!!8z(pXGty2 zX=LNQR^4F6As@<8l4_f-6r<(3d* 3Bn`w1`Ez{U!hU znORXv?iy0G&~!&sE`~(ChLooDX@nI~?Yh_tID6c_u`wJ`abMuC_*eaotrg1lvT7TV z%Rc$cv<-!8(k+Z)!GaC)DIfO;C(Txv-*oW8d-!NjiSj6?TmutwYljd-(h_keZI3WV zCBw@G)~_KIvla4GvK644tEB8l)Sjhio)>2Zfa@dg9H2dFdd*j{ul!EBK0oes@2!Hi zu>P+#Drv4d8$0ixOX_ILWkBqRtTY6ADfLFx+`-iqC2*@}=kLC!I~P%waX)BmTL1aN z2RbMS_ytgz6fZKfbq2i_8^u)}wy20-B;+1bt}IP@3@y0kg-l!!Qo!PR%#jZ$tMRJx zAy@m~)!?y}gwjM0htU?Wd;Q$!4fOquot>+$(VwnYv~Gl8SVhT>u0B#T-QAAtrLK)s zMk_N{%SBJke%e4$dq9#mFs<6QtlRwC#_AaZ?7JGD0_ITR?{_|2=3@W}$Ubd-R6syi z=d?wfMT1p*nn+sL#`{zz_@b+uXrl7w_KA9s-iyS8X`eyTu(0%Ox8TtDBVlzKr#tth z9|j$6kkL(5bm<{hGEgYV4xWd-n2ww4FOg!ofiyswFTII_lgDuDt7yH esla(b%kKn7=zTY>&=v(8Id^*0Uwd1g% z0V9&-KBHk)u;DBSwRoc#Iq>lvYY!u%U5x&$QK(Os7!N0 uo z!>&->+B3<2NKvjH8j$vs>bt`#D5#Uy_A@-zBZn}Q8f%l=Cg`5MbN;CE 3v*zm8 n5r*dmSY0nZAP;5NskUS1nQ$)^~l2+QGjkvV7I`MU`=; z@Iu*@5PXq^V8L8`<@j~?CfkqQJC#CfoHL2 d}jJVHykzr%mgc1sEH=tK*@N7dssU!R~Nr1h4!^f zYB*O`c7yJGFQw qhKsJdI! zswU{ry(jjzotajn*!(wzMJa}Y-OBl|PD4P%rLiYj_Q6j_lgHN+>qXLU7nA0PZShGj z%(L@igTLa+aM*keC$)-x(7eIY3ThN^kdw |quORC6wHGND`y}B}cVs5^ z`W{l)?HjxNe6q1v4FW2yP!=-^)6Il$u8M2{(sU8ME;xf$CIq)sH-^$PO8OcS9$Q*P zTyuadeI1(=l}0U60-Xa_bi0216nn@HZ%lwz|42_fdSu1hxqKWPWzZBx{4rN)OErhn zsweJKRhsP4ad`g v;62G@qiv>;wUWX z_a!ZW8R?04<8hm?w9NK8bxiHjbxotluYKh3mEZ{8z4EA)TfI@Q4KX2&_x!+bL06 mt1#2<9_WI_3wMCgvoms@xG%n#8GIIaxVXMaWjT@!4SZwm{z$W55|kAvv3TKW zj+y%stN;1Xox@?2LpJW)*--_5LcM%7jV5e1n_`MfZ_^vYS&tswC-^>r@?g#R=Lu0Z zPUW1=c@aXHPA#@NFr>37%J=Q70WLCo=`XH-*a4~xU0n@DpC#yhSi%S+a?s1q_BI>Q z(#xL1I65jRu}Onl{O(j9d#d4!p$PFA b3E5)_Bc`g2Q4kM_YF*RrjM5uGAVd= zG4Ben^IGN1;X%o|fuvSFg>GMWrh*S?v^$EuD)lhtJ1=xd->2g*&pZ4D=A}J?=Vqtk zcpa2grHHzbo?&omL=?@^p+K< 4S&iEjYgvLtsWz5#uw!yCrl3M+ z5$-5nZY` 8=FvHsP?SdtYFllRx)&YykG zU)ha4peGec?hC3fpaZHT_rB~>_dD6(kk|Gmw;>i0DlPeXqnw_f(B%3q^x|W1u^a+7 zjN8moz~)*F f0R^Sc)1shg9zxp@rcFyOd=c5hVjpU}?#Zy~M! z$szl{!)@8H?d@%*)E?AlZ2{mh`wJ4!bj3Y4>58B&E;#S~<2`t)-e2UDWZgBwZXyO~ z|CgeRT_s}>dpU$%-Jqf8jS!S ~6*f zh%6l4-CJ#uDfeba03mCMplw#z3>gMot##q?#@QI`po6vDxW>;UrAR&Zm4^^)p%p^D zG`U62gWHPbiX*G5ftSS_#*WQIGF#mLNaFEIR`g`jIa|))jfLWZe2RDU*}aYmX6pT? z@(T-35q=*uNx5_B{LGn%kk6t)>#`suUC{wIzE8b#d<+s-J)2APcNHlzp)62Q36=B= zRw5oc%_A4I6xW1L#U2-W&XzWod*aoq _R j^`w_^xd5Er+=}#xV%Lkvm}G;ov;S zBjp#@ud@Nt3$%WXp@wt$*_&Gx% jMO?HEsXyeRU){EKH^=1t z>~avAYS`w4{KH8?WhIHX*`3isdjh^o<|hXUhM8_{AC_UvI&YGyeYNQ(F(#oK8C?@W zv4kvc(Z$#)NX*!i0^e(M=mP_)i79nY=$*Z*G15>5|C}Dh6U)O9;x4AUIqVpUVxgtN z)WkRXyc5fAtSh!*GD`cgDlThqYCe&cP49&zjCC5wPWbAcD*)47*v{4wTi36#u{en~ zhB&igZ$e1VqCgK#K$)y9DVfhbJT@kqjim% uL%kj4UXt zF7$kcbQ<5&76uPV$~zjW&eJ^&_|>f6)-wsn g2woLO;m7ysCtBYhn6?r(v+^v^C^n`sV(}}93AxGMS*-r{ zV3(hts7F9ts<|=PM#O*##3K}Z9ivSy053UMiOI1+1@-GKHMd?SmG-8HM>}Y r zn3uQFLuk~=ZCj$DDUc}b!~MMLL6;W56OrUUmIlE=p5Vil;R|^MtdG9dGrUNoy59h+ zt0{xt3$+fd)tW47Et6p2+BRt=1g>q+JT!FbVa5*8Dnb4v95*b!&qGY2=GV-me3>EE z{cGXdd5Mgw6$2TBsNJB^LO1bp*H2YE6 =8 zIY#o x4GbGVZ8Eye3HFw+ReAm_)u1${s>OSxlP*8R(z zxfOoPOHSF6pm%$q2J5RR_c9_>#;*}f*NJY?O}(pKcvoB0H>?j=0BAR+6l@LuI#Oa( zZQRXbCp^@Uw$5-xfwRull{e_?EvqN;x-%t)Hr<1^Je&fpzy_XUr7{hC<{2s_x!^@* z+!}b_SZuGUm%XT56@7h{Ghq^B>q+i3Pmn*Z(88j*m-o6uBLW?QSfd-U i=|k4798n;>(R{4yTzE;Z4D#U zr)Q6(=9pRPRxSg}Hyf%M>7!sekP$x!^4N!R(hXQg&y0v9;J56PlGcK3h@U*hOaL>J z(DTf^QnE2{4(4G~Pxq2n8@Mi}tFSuh5-vQ7?_DLR8Bs5$w-oQNs|Pc&&$9PMEI^Jw z(-m9LX50;La`&Mzh}{Z2Jx@OA5tyRjTTn{7UTYBp3%S;mFF~$0NdEz=BIh|&n0Egv zUNqXvsXqH8%cI~-&5}E#B`|1(_nwMh6INALQ|C^$CF~0}qT^`EFAUOc?8D1d@{@Z^ z;bNmxMg7USlRsg-|MG+PFmcaa-YPXsCEB2qXZTUzQIDb5bURzKn7R5{;ITI@HP#7* z2W50H^Fb4u i~@|u*Ebc3fO(Wwb%;LRgtJt$OpUyztyJyHsU`9 cp0wq11#$7;TBrQ;Q46Q`ykmTq>sI2`Tmp5iDLySxKFGe;>Rsq zJEA*L9&9DXEuDg(&{b5m $)QOi|e`V8_kLM z&|!$%j;u%la5G253pZy@Hf8*A7kk`^@!2ZBx}dJH4Kb;oc;r4nBobepd%^8Bb@gnM zPt0;c_T~oCIn|#gz=bE4VaB2)`r4WOLw=>>1uvxY;nVXaXQtJgsrRZCZ`X|F8S+=q z)z(?uRIS);bK-jWJFJ90ecKfv6R3hx?yczE;JSc-X^jH}p|v}Gvh&%dU3w*P0UKux zfq-a>eLW497G^VryR;{6tg=awpz&u*nIR6tyWqka=Es%Rj}?^jcPK_{&8$Ul#c6e+ z1pKwA4Lo=u-KulPa9|PsSSH=#r>P-Pja+6-LBN;|_Q#j8xQ_G|g~Khrzk$EEyvut+ zyxjXiPoXz%AC-4G=%lCE8I2J$I{r1pP|_wWs!c*d!|Bot;JgzkL%9*<5=Q1q%F4-2 z(`<~%;Qa}9f!E6G-v+4Ef&kbYvrhJ-@E%XRRSQs7=i1uZd0 t{Ml)H>CiELN;9TUu3JAKv!C29w4J6*p5z+osRMEe+J*)0=C_?ci8a!q{__ zL|y{mHoE=3hel|-E Tc$F zw>|&+S%C+ycayif?YQD@SZud_du$JeZ-DH<@J&MYVECpof5Gt0ID9h>-*n-dE_`DS z->B3#()btS{-z7xbm5yWeA5Mh6?~(|-{|o-di+0)9(Uiod6Pv8)uk>|DA3uK2qsWS z4m9!7+{ySsZI3V@p0Cn`vr5d({Atj^N!EkQ1+q?ZcB_K<^iO5r#rKsG!S`U%Rf#|Z z@V_Q-kNjow)ck @=q4L1Ty4%r#FBixC~a0az2oS^={>Gv4x2475BI( zWslYw>yhZQyGg=fYP1qgZpRKt7Ip`=HUhCo&&t0m8cvQt?2pVq6|lTA<0I@@xVa2w zzP0$+Ne!;39d KblgWp*k0aDsIgab&izv~H}+In$MVgKA=tw2y~;BDsY5bVyP z7P@VNH2C@6MU0??>fceq<1dLR73r CoQvjA9-u*JLiRryMjMHr2nvl|a}&$WVq z(bJqCJln0X-fhqC=H2(GbqhlPnPVxghX-?3W6W8@XtJn9<7Q uy2ZZo9HI zY>A}5p(fB3YiNdEW{iv`T}|JBjhippPa+Thd#snHYGJ1AdFA|u$ZHt#%GaurgtZMI z=TkT))}e5A^Y8PGzaBMHa6K|ZDqeKkP<#%FSrqH9bd9 zcjz39ugPyH)h6si-ub5=?K&UG_IMO!Wm#Pr1*DZ+Y>t}#^mmZ-a(-2Hk#3*QQICbe z^rYu1RUcsj@-P2BNBJ5k^z&dYPmDpLI4gqxWk{l~tJbqaF9UO2cSUR>NVl8SL^FJU z`SicXWZM9WOGv)R9G$Qm9h262LcbINGXwDN+Lhpgex98rRaL0J$|zh^n()JTUk60X z+q8fS;-+cc?V#5-S#1uSeLx)dfza5)^Pr@$MUJV=OCtqBFx@r;l%zO-FfKBr&6F5! z`Cu6BfHc>8-@V(_a4Q7J wfHnesT-k-dgn+&MJsnaV=risYO+qJvZ!a#d)2e%qybQ;46!Gwm{f@Z~S!gw|* zjEskZrb7Ql{&e#nX56)6_jYBzj0eIHkSB*J*45#*#tI3&p2%ie>-)?9UgIv?kUIQ0 zcK|yq%ZDHd4F!#eA|K(_qub5($I?sbkF3SGOx6E9e#K7KKZzwCBeR?CMiOX#wso>V zHHM9}meVK!BsyaT?foDQ{VbFP{alrcL|3i$2LAA$aaFdky{|>A34%#^p!h4z4W@l_ ztyt?93$3o!z*-K*_zgp2z?VF2YSLh^OCIbG63zVdShj!MU1Po_(r~?uqkBv9Z;SFE z*ptH}Lq}0 nU*v8~jKpc*lT}<0%i0%WVE=|HgH()uKfa=lVGcvfS7$=z% zP7{Nf#s|($?q*yv?!7!xfWa6o_GP69es>S;owu1B9=4Gu&P%`Ign1(5`uEaecB*az z*f;8K16f9(-s0;UNf1z(k>6IW2b6XkXgG*`UjB6nnb2QfvSM&7RrZPCTFA5ik_!3v zIl1iM31iy|qv|$YS;`-V1AAoyq3Qw3D#pq2RU8%E>eP|C3ZVGl-ou~&H%xI1sE6tL zw-q}$pmj>J;y;Orp@zRyR^Wf&Nld%Z&!0c%RqX>Rdj0u4?nVwZO2I91sW3`7aLgm! zRV czV*GM^*YOSGWdw@ USih7!MR}$5sUUJCw6NT@D8U zR;I>cw>ng)52F=?uPAeetHcc;w&%ik+7OCj5VW$r>P-m-g1__Q1*xGJ_QQ5|ZY$$a zx*#zaly^iw*HIMK>nu^0+aqj5mP0Mj*5b6 D=0=X73S%b_BYLyj zai{JGec<~^?aoOvc^@C2U*xzq%Og$^fCFvo+Iw}*uO{9ZYKuqrGTT6Lq7AAECV9Ei zLxKTwGH>$WHgkx9S@wsX95gY;FIn7v##YxIKFz>CGJVzOCYL2FhkOL-3m{#%-{B>P z6y$I2cx=lXCmA~1cV@S*I`h5l{FWtk!%mJflB%$zSiZXozoV!mz5-1jL@-s!S1+pY zZ_hQ~yBE5ny?d0>WDgSy^PXQ _mvBzf9VAHehtj zSrAdXZ>+!%nQGhxJ4i2pCz3nct6H%oc&|3Gvg%)1OR?xbHy=B);95tT9k9y^`vZ)u zy;gQ`)jCxW=bgaMvcdsLqh>WUzZ)uW6=Rj)gevH`?^UsZDJFXP-RL;$i)_$L?}@g+ z?~`^b1g`F?=`GFh06UcypWD;yK0`2BV`BS&1D=~#8E+ATFw<0X5!FxN7jt?YcNB#2 z9WcW6mL4=k%4prWO;niEAn1NY`w3<1RP1&;m`|T1g0lsUCuE#!^4heGEm?{yQ6=jy z)sxhXgESX;ztNqHezp)r9jh{97UnR)_y~hFrRgvT?GTz+CX8R^*PfIL3yfnMMfgv% z3ph{T!9?Y}B909_6;=W18XKLj2^S$d4$#Lrcj~K;i?y^hk}nxLlQ8ebu(C1SkYU7q zlk$E{Go;lxvl2DV>w`mY4`u46Nd`7?`%4u4Dkk0<5@ J$B%oZA;*UWLwTFq=+<>YD!V3lO_+?MtE(Y>(}mCT zG~LYZs-i2`2^Fz1bqZqKrT5%)7qqhWoi?fvHt-lw(AmDLS!ao>iCTHh>h<*Acv0s} zC@F7RGSR5@WLivUaLZfIE5n?5j3X <_kJ^RY`(DeF>2^a(_^7ZM4-yfmPOEN zN_)TJ7|vp1`%o1uwJW%?Sc7heRx;Xlh9tXMi(Bw9ODD%zE68m~3+$s;wAVC$X9!KN zj~mrdGd=I<+u7$!id8LxGW`?XyJpIuG=BF5JKu8Vl)+?grgM1q57q`3rNj LtQY$ zpNeT-1FKoS?ue=Pl{yCOU#HpI2y5Duu&^FkE;%pYow3wSlr$?mvZ~-U0*xSBpu>7_ zjeNqv>6mR{zS^2f%i?HNmF$mPz+%Mh($@Ev8-o4IyNj$^{5_)9X7)8FziD2mbk`i; z-mb$x`LVwYYD1Q5xRxcElt@jq(9-E7j~dDfM{`bs?-3>)Y2I_>J_c@+WJGIfTte9& zM1~lA*lMH^W&u<8R9GEp5(~;{hGE~zzL+27uRW#x`L;J|z>GK>NL6-o*rZ~b=644C zo@Qo&kc) Rjmf~gdb9wm<;K}z=5^86Bv3D34bntOP$#IFa%}t>%Q)gA>kGbeimt9 zbtqC+0n8;#i|QQWdBl#jd`W8`=ugv~IM@il@p125&*cWv(ns8HmedKr$h6-6xEZq2 z!?R)`rl9ywqu?5f<3lZA`=}P%$KCz}sjLIWi&5*3bx*kV zH)&VO)_b{$9!g& i~hVjb0Xl;Xk9aa2$0{zMbyup|%=>BH@?qp+gNdZ=A)k#4M|$AB6TNm&F%Zsefb~ z%z*pa1l?I3 y`{d)w)w9!?6|Gzpgfiu!D4n_a53Jjk~PB6pfwqiRZzDu^qadt@ cMvRY;sLqI4Yr5n~`$pN(trL XF>FB^Ma*>_88@4i@8Z!csVnxKW-}1 zy{nOUq{G)4B fmd4#reSLnR)6EFhzi5!+$Rq%%hh>>A9 z7 R_?f&BOC$E}!TKZnEPJ77rzC!*G)zZM+ct0AZV}-nnQdhb$_iJxbP4NShtK z-Uu~{r7%Wutde;Bz_z -eyU&!LDLjPr{oo(Dx%6)oXk@5hE$LNi z4w^JEXZ8E}wl;%+GnR8rTH1z~6Zu7oY0 _C^9dd&7zx|12@MXe~`0Tbd=LoI@d1svEemYBDgInE{HNsFjC~cG_YNzhrJnJ!dsjM0W&iwWph}{s zvD7#`KhtqDZ*zcy!*MiX&aAQLlh9jPfeo|0agY7Jt~OwfF`|Pn`bAn6$-VS(AEbK7 z`!cYlr-VqDHpQqwA@cifLJr75E&5Cme=@rr%yu99Y3zB9Tq56Y?jW4L(H>(gmA^Fl za4FAxg7J0IeLkSk|Lz@>ZcBSGb1R=X`M9c5ku&;x88t~TpenIHaOQ}^Y@>?3Xn*0h zuv#J$)D-w7GA&SdX!pw{F5bHvG~FsaD7#^-GqXy#p*(3(o_QOfiN@j4P=k9@z2h5o za8hzitI8UCbT$J%wGX|qG!kUv8trmL3q6klAx&y-LOaB%ar#CL+F=U~_mca35(N1t zg-j|oKDD_@PQmww<=qOK)8I2Z(3}paI~(Ga$81Fx(L^@Z>z_ccguy#{Gn@?8L;8}M zK~HG^}%sr)2&-nAlHH%sHu{mDi-P)?4I?@Ue?pogn5m z-W?f2Z>XnrP9rEJO#8dq6{`kQ5<(hE0(qdc45d8p;B%OJ;-d1;2WVV|d0SR|O ntyZ*h;DVrQ5_CuVarbay*vz&d~Mg^!6AKqHyR(u^(IhHeI7N%CVR$ZzUEv zhJUvoc+r>My%=|L=|=&i*U#t+kzX1*)1`6?HsxM~XjF6i1<=MDw~AKmXxEDcZRo zraIYv{v00#yENmqmT-!+Id#;#kvW<%)g*7Pnh7%JYc?+eAIRxyhR(r(&0a+)dR~1^ zuS-h_I3b?6XUxtLhdV7|&fjarywo2Ps~Sspwb|^k8pS ;BaSA= zRK{zeR^yf$3?!ua^N%@?FL|n?lBVR67eL7IO-QwG?(C5sOrthkOAYm;K?}c}McBO1 z0C;B;)7^NaM7$D(_;{c^8Kg;#e zcuha;&V&UQuZZE z=0qZqX9iesHjPI6lDo4c&%ozTm~H^O8-@Q@)ssAa*xI=61&ITH{^|0) -8Td zPKDeO)(H6mUtDXEzH*=twBh+r0Og+#xBaJzbN58sdyiZ)+JCB!B-zh4pl++pZiQz2 zVDw=o7ziLxS17v4RNq4a0{ltRh6JT489}HLiKcME+f;foik9@4&j0Q4Yk!Av1#U$D z`>57`?`$`0C-9%z(Z9p50>A!KYx %>4t~|6$zUUiA&DT^Tt3}z^w{qo;1UZey Vw>CQ*irnq?iizc=$_uxC|6c&@kdy!b literal 0 HcmV?d00001 diff --git a/117-CatchTheBall/index.html b/117-CatchTheBall/index.html new file mode 100644 index 00000000..e0756fc3 --- /dev/null +++ b/117-CatchTheBall/index.html @@ -0,0 +1,22 @@ + + + + + + Catch the Ball + + + + +++ + + diff --git a/117-CatchTheBall/script.js b/117-CatchTheBall/script.js new file mode 100644 index 00000000..0ed5a936 --- /dev/null +++ b/117-CatchTheBall/script.js @@ -0,0 +1,135 @@ +const canvas = document.getElementById('gameCanvas'); +const ctx = canvas.getContext('2d'); +canvas.width = window.innerWidth * 0.8; +canvas.height = window.innerHeight * 0.6; + +const paddleWidth = 100; +const paddleHeight = 10; +const ballRadius = 10; + +let paddleX = (canvas.width - paddleWidth) / 2; +let rightPressed = false; +let leftPressed = false; + +let ballX = canvas.width / 2; +let ballY = ballRadius; +let ballDX = 2; +let ballDY = 2; +let score = 0; + +document.addEventListener('keydown', keyDownHandler); +document.addEventListener('keyup', keyUpHandler); +document.getElementById('leftBtn').addEventListener('click', () => { leftPressed = true; }); +document.getElementById('rightBtn').addEventListener('click', () => { rightPressed = true; }); +document.getElementById('playAgainBtn').addEventListener('click', resetGame); + +window.addEventListener('resize', () => { + canvas.width = window.innerWidth * 0.8; + canvas.height = window.innerHeight * 0.6; + paddleX = (canvas.width - paddleWidth) / 2; + ballX = canvas.width / 2; + ballY = ballRadius; +}); + +canvas.addEventListener('touchstart', (e) => { + const touchX = e.touches[0].clientX - canvas.offsetLeft; + if (touchX > paddleX + paddleWidth / 2) { + rightPressed = true; + } else { + leftPressed = true; + } +}); + +canvas.addEventListener('touchend', (e) => { + rightPressed = false; + leftPressed = false; +}); + +function keyDownHandler(e) { + if (e.key === 'Right' || e.key === 'ArrowRight') { + rightPressed = true; + } else if (e.key === 'Left' || e.key === 'ArrowLeft') { + leftPressed = true; + } +} + +function keyUpHandler(e) { + if (e.key === 'Right' || e.key === 'ArrowRight') { + rightPressed = false; + } else if (e.key === 'Left' || e.key === 'ArrowLeft') { + leftPressed = false; + } +} + +function drawPaddle() { + ctx.beginPath(); + ctx.rect(paddleX, canvas.height - paddleHeight, paddleWidth, paddleHeight); + ctx.fillStyle = '#0095DD'; + ctx.fill(); + ctx.closePath(); +} + +function drawBall() { + ctx.beginPath(); + ctx.arc(ballX, ballY, ballRadius, 0, Math.PI * 2); + ctx.fillStyle = '#0095DD'; + ctx.fill(); + ctx.closePath(); +} + +function drawScore() { + ctx.font = '16px Arial'; + ctx.fillStyle = '#0095DD'; + ctx.fillText('Score: ' + score, 8, 20); +} + +function draw() { + ctx.clearRect(0, 0, canvas.width, canvas.height); + drawPaddle(); + drawBall(); + drawScore(); + + if (rightPressed && paddleX < canvas.width - paddleWidth) { + paddleX += 7; + } else if (leftPressed && paddleX > 0) { + paddleX -= 7; + } + + ballX += ballDX; + ballY += ballDY; + + if (ballX + ballDX > canvas.width - ballRadius || ballX + ballDX < ballRadius) { + ballDX = -ballDX; + } + + if (ballY + ballDY < ballRadius) { + ballDY = -ballDY; + } else if (ballY + ballDY > canvas.height - ballRadius) { + if (ballX > paddleX && ballX < paddleX + paddleWidth) { + ballDY = -ballDY; + score++; + } else { + endGame(); + return; + } + } + + requestAnimationFrame(draw); +} + +function endGame() { + alert('Game Over! Your score is: ' + score); + document.getElementById('playAgainBtn').style.display = 'inline-block'; +} + +function resetGame() { + score = 0; + ballX = canvas.width / 2; + ballY = ballRadius; + ballDX = 2; + ballDY = 2; + document.getElementById('playAgainBtn').style.display = 'none'; + draw(); +} + +draw(); diff --git a/117-CatchTheBall/style.css b/117-CatchTheBall/style.css new file mode 100644 index 00000000..947a5710 --- /dev/null +++ b/117-CatchTheBall/style.css @@ -0,0 +1,36 @@ +body { + margin: 0; + display: flex; + justify-content: center; + align-items: center; + height: 100vh; + background-color: #f0f0f0; + font-family: 'Roboto', sans-serif; +} + +.game-container { + text-align: center; +} + +.game-title { + font-family: 'Roboto', sans-serif; + font-size: 36px; + font-weight: 700; + margin-bottom: 20px; + color: #0095DD; +} + +canvas { + background-color: #333; + border: 1px solid #000; +} + +.controls { + margin-top: 10px; +} + +button { + padding: 10px 20px; + margin: 0 10px; + font-size: 16px; +} From fea918a2b50122fa7156bb20d4862bd8a37cd8e2 Mon Sep 17 00:00:00 2001 From: shruti110503 <118251562+shruti110503@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:45:46 +0530 Subject: [PATCH 02/10] updated the index file --- .../assets}/catch-the-ball.png | Bin index.html | 13 +++++++++++++ 2 files changed, 13 insertions(+) rename {117-CatchTheBall => 30DaysOfJavaScript/assets}/catch-the-ball.png (100%) diff --git a/117-CatchTheBall/catch-the-ball.png b/30DaysOfJavaScript/assets/catch-the-ball.png similarity index 100% rename from 117-CatchTheBall/catch-the-ball.png rename to 30DaysOfJavaScript/assets/catch-the-ball.png diff --git a/index.html b/index.html index a00f72b4..88258c21 100644 --- a/index.html +++ b/index.html @@ -1382,6 +1382,19 @@Catch the Ball
+ ++ + + ++Maze Game
+ + + From 9ee969fe9e0a9211a98f3367361995b67b851cf0 Mon Sep 17 00:00:00 2001 From: shruti110503 <118251562+shruti110503@users.noreply.github.com> Date: Wed, 12 Jun 2024 00:04:56 +0530 Subject: [PATCH 03/10] Update index.html --- index.html | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/index.html b/index.html index 88258c21..4bbbff68 100644 --- a/index.html +++ b/index.html @@ -1382,20 +1382,20 @@Maze Game
- --From 09c6b37e197a95a387f48526ea1aa96d5f135881 Mon Sep 17 00:00:00 2001 From: shruti110503 <118251562+shruti110503@users.noreply.github.com> Date: Sun, 16 Jun 2024 14:32:10 +0530 Subject: [PATCH 04/10] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 4bbbff68..df6a6ea0 100644 --- a/index.html +++ b/index.html @@ -1389,7 +1389,7 @@- -- + +Maze Game
From c33aa9cce077552485206679c29a484aa9ca6d4e Mon Sep 17 00:00:00 2001 From: shruti110503 <118251562+shruti110503@users.noreply.github.com> Date: Tue, 18 Jun 2024 16:09:26 +0530 Subject: [PATCH 05/10] Update index.html --- 117-CatchTheBall/index.html | 206 ++++++++++++++++++++++++++++++++++-- 1 file changed, 196 insertions(+), 10 deletions(-) diff --git a/117-CatchTheBall/index.html b/117-CatchTheBall/index.html index e0756fc3..ca8f8d91 100644 --- a/117-CatchTheBall/index.html +++ b/117-CatchTheBall/index.html @@ -3,20 +3,206 @@ -Catch the Ball - - +Catch the Ball Game +-- +Catch the Ball
+Catch the Ball-- - - -+