Jagdish Vankar                 Mouse Ray Caster               jagdish_vankar@indiatimes.com  06-13-03 (  :  )       Qbasic, QB, PDS        276  18148    MSECSTER.BAS'>>> Page 1 of MSECSTER.ZIP begins here. TYPE:BINAA TLEN:12838ă'-------------------------------------------------------------ă'                  INSTRUCTIONS FOR DECODINGă'If there are multiple parts to this file, merge them into oneă'file using  COPY PART1.EXT+PART2.EXT FILENAME.EXT  Remove allă'message header and footer information (everything outside theă'">>> Page x of..." lines),  load the result into your versionă'of Basic (QBASIC, QuickBASIC, etc.) then RUN it. The originală'file will be decoded into the current directory on your disk.ă'-------------------------------------------------------------ăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"MSECSTER.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%'%I-%L48pSSb1o[h87%%Fz%%%-%I%%A0DHBS1;0BfaV:BS'l+X,^uxIăU"D?J2m3U)v.XnmR+RZ%+((]kX0ucAe5,r3*_'n$=5deY>8VLA]CE-Vbl6*'4*FEpăU"BDpbcLhH%%cBqQ(D-1D.1--(%t]tUopRu-qk(ocRa,<H:%%9Eu7f7]5phQ*EwZ:ăU"g[8V'pGjiE?D^^svHgU<S&U-T8WDk9b1-Kg/dIbmr3Y]py9;P;&G>gE/4E5hL.'ăU"I1]UHwA:OmACvsXD?Z5;o>hZqJGl)lLuqTN2TUlSIFfnHE+2+A13qR<u4>je\pPăU"b8<j.8?dr$s7*YB.2Eg5slwEkb[9gQ-*dNoVa*HlC,eHKR)'H'2gU^qQ:QBvmuCăU":XH_;4_$O?&802'm.14(#B>P%3UIZkQ6QqFH]H*,M_R*sg]JA?$t:JOZtIfX;n*ăU"]S-8O9_Z6m*&C;L%.Ge,/rMG%YtU4,+Hg9(;]6%,YC<3YYOngL6+\P<MguM/iI-ăU"iAEc0+f1Q_e;BH_XZ6_kW]P-t?%\fO9V$uC_7JbQ;fc&&]krm_C&\Y+Y)h$ZC>*ăU"_UkF>4UF%k-75)v7<8JsiIq7N(j?fEbkS5gFsz:Vjh9:TSjQj;C9]f>aqt)32x<ăU":Lpr(l+Jh$:cH?yAh;nPq&_r^kuO>O4X)0kdW*.c-:iR8A?vxkHNPuOioQh:-dNăU"0ULLU6gdI^+7ibq9BJ'Ij9.s&]5UHsaok8>:G#h2ZZTC+TI)5Ej]Mj1IY3K5:fgăU"pqz7U:_1h3=f)t$PO<em=11i\TbkGf]9.mA)4oT7g>G=qF7I[jQ#iGbv#lmuhm_ăU"ZN'^&<:\/VFNMc4W'c1QGEBB+UXlgaMmHbYS/-1>ib%=<Q']5oV5[aC[i+7P]BuăU"[?qGa%tMR2KcZ*v3MUXOYeu<dH;I&>k(f3_vB9U>MH+6X0U['&<&v95hP##nNX*ăU"8uLI0^mq]T'E[;mF&2eBo0<53YmwDR9WDY/0<j$(\i+?DSWa<P99esc=>[AX&-=ăU"#L;/uB9O6Cnpr0Xie]eti15vXRY=C1haimDwP9s(6lL_9GH9qD\.U>i96*<H[apăU"2iGA:Ws9.OX<eS43bVo?.Jh%FLovuRACAKb&&\<Op[o:Xn6)f\091<&>CR,o?=xăU"kKIqT(M7Zo>.?X#oe:fuTEsOK?&m;?$F8CCX,#I2'%(Zex7E\/u4YtwK+YtF+PPăU"I4_2aZ.C0EQ0/Km1ZkNSLepC#<D$h#9i_>hN_RWA+SLfkyKPPk>ZPHllg#I*=+7ăU"_#cR-LUL[+dy5:;bq^k/DSZalMQ^Vp\ANTQc/ni*IsnbG#J+n';Bj-NVshF6MAQăU"/1GS9iU0UDT]If_/'9GNBh6jSsu6Y17A#M)1f<;n239TL4$.nP+f:e=q8^0xn%3ăU"\cc)bt9gw9,ImK7*4$n?2wIU_nnUAOwQUp.:UZI0MxcnS/F2xfd,3UE5/W550twăU"vBmLF-lA6d.T]9Ln.R8b&2K#TB'uKA2pW,Dp]JVXkL_H^_-WQ:9H:cSJ(eEKq0păU"T3z182iDqXxd]#r\dN9G6K>Um\ZjIx;N_3Kqct^VeEj)tAW22bk'(7?QU^X$[ALăU";#;P=:fc3z*C_qrU<YCZ:=U*tbIJ<ER;OGjVkpRjlgJEZZ?<9$_f/rEtgXI<B=]ăU"W)Q9eWI=WeQ4IRlP2#j52a1]#;O+kcG,q5Yu%$P$J.^O;0L2QP113b^#f.A;6SeăU"iIUh_/aL$t<a0FKo%96VNt\Ia0<\mgD=ogR.i8X;dnFRj(UXYbm,nOgCm7YHJ#PăU"^-Y:gC9]e7sdJIqrHPDy)'O9R8c+(j;;q^P7CBds%;u:2MIvvnr^xoJ5F7EOWH5ăU"Q>^jx5AS(#H;jbl%fAahsUbY2m3Pb],i_3op,DFY*I:L_%OTP[nF#o;%m(<W8p,ăU"KiUzH5mtA'QhZqs4f<Xs[T0?-*[Zz2YIjRTj+3>Ke0VsM,<w>t?*5u6mS];w9hDăU"qgbAxm7#eOL)\fQRxQ*hZ\_wH4vJ^MuUKEb>/Zld-\B7kNO9c:PVCNcfWooCsVMăU"),NbW&-]7Zq/LR(KZ++IBQ:7Oq7IIT&&?j_G/gQ<n^6\ZRH.%s[l<#g1e4?)j+SăU"+$2>[WG3^qgm%vp>FA[qg:m*x_09V-rJ<uR9sz45KtCu5JPy3%w9LfZgSz;;$_)ăU"AI=-;jpCo82:GNboW/2GIx:/Dgx\N-A(zVefUR[-MWj_k&a<)41sCLvvfKPI4[DăU"CsRY0:hzP-AuuedknvP(D'qxnMcb?X9qwl;*Sl&hm1ccfcFo%-,$YwYS4:ZzETrăU"=d_$Uo.*NggwdK.q0F#jNmlYuNi>yHA[j+FJ%nx_f\#H1*K\ajH3oduU9i6U8Q_ăU"5'w6lVk9/\>$udin9^vK0$.aWUj?2r4EX%gp>JkH%Jnei6qW*mkB]'dN^/;/hNnăU"A.uNhR>&(I<B'/^wWnpN8TXn)M0,R:r#.a-:R%n%yVw%MF32owPC]7=P#FVVGq6ăU"z2VqzMtotB&P%uV-m6e%bJvSPa8G42,TaM1JXyPNC5u>Z^0j8hSUP7%<VC9OD/PăU">bijv.de#.%Ivs?,-5JUnx9<]ge4g<*nG+\Gl,q'.0panDB*W/mE]SIZsZ72jc<ăU"SGJD)5;=1m-P6=S2GU13oXqKu)EtV3+5++AG\OHjSD;c^[j&x$A0X0BRl$rCMpIăU"D/aF$W=E<L]e-r<2Xd?sS/)8'=$;GVbOQffnnQvmuJmr+;RMzesj_Rj0aM^ta6tăU"A2*7nOrm&SuFin+q9,Cbx5qh2WB&3+I3kfLqqu.hbL=:Y4R2/kLAKi^3O6^_1rbăU"i,C2:1SIH<riI.zy+%7_p6[cIj1d17]<=iNeOY0$4wo(3?WmA#+O-A+G_t)c:sQăU"0#lYuW*WWSA8c.jebQUgWPYqymosj;k2=;2I52M\[+Pw.W5SAZ1HIi)0OIpJT7găU"gsOCg\6.6,Tase6LHf7wY=6:ez11Fa(hAiUVs51DD=_;[8;'A7Sg66>)+;zg[JdăU"+DxljAuYX6ZEJ*poxN6p'4&VcaU\xtyDQ%7)BC$W,3q+F-ArA85#Yh5CTq3bTk+ăU"IkeUBX71+faH6gVk?9&5Ph$(Pf3&RtoSJB)S9fZhcI3=GOdf%I]GqdF*Hs&)cn_ăU"RmZsz9O4S43m&gP'(OJ)fC<>0IVH'</5PclLsftpSAa;>9nt>F6GhH4*li'T/g;ăU"Kwm%F?PR<=5cH8u.qRvpm&4<NVQ>P0]5?/U)LxzZX_i^2T,j+;;6jft-s\#qGL&ăU"sveJ2Gfepb7/cKP[,QXP#>'I*YrP7m9.uY/R<X?x/&u4P0*-xR7TfV$E-G:UQJcăU"Hk)LQZF,$e]U=na)fq>ge4UkMHP=z0J>=JY)v\rB43oZ?/*leeKhQ#1lC.lX+8lăU"qXa\YG5D:Jf6adFYQ\hyC([fqD,=m$1aMpZumEFv5bz;grGmW#gro;Ul]hxn6'6ăU"j4+DxXb;B[n)w*j:>UMdPcw]=vhKss?Vw#t=3.P>j*]'\LBI^\a9D5f/$)t_AiJăU"BZ>fw]]62wLAu\DF=hmbAz=D'f6##GCgkI^K^YZzY3Xll#c_b0R8B7y]Qs8*frmăU"h:exLuk(;Zr\kcI8iN;Uq10p0x>%[>7v/W^W<PSB+>cbn&V6#MXPX']\qkk-\g'ăU"jZQlfGEzkItgW&hkC3j2fZ$CB<GI\hcQ^kW6if&3G0)mi$&dKggPT[h_Da=O.D&ăU"X7GFm;-'\9LMqj;C6tGMkrJIgu88gpM+2T3NfnN=kd2)Cu&S_9BH.JvajN&$El4ăU"h$Ec4x[BMcdNz%'VO3b8ep,XVqAS[oz^;_pb3onzBPM>X8(w53rBbi-KsA_acgjăU"5auMz$>BA)JqoaU)Mr$FWFEp0g5^xf[Vnj3?NgAo&tvD_u00)#C[dgDsGF)-UVIăU"O#&nCE\cJZ$k,-ST;nAW*J4VXUN-C\ws&5[_SNL#(]],Nz'EN-8^/zY4yAZKh6JăU"XYb[8Zj%rKnSk#*Yw^t([<*6Zf7Lo_oHr3,a<vyU3p]Fp9^t1:P3HwfW6-7GqFVăU",qK+6AHkx?IB\ZaUXc?TZg8h:bQ1J$iYa)mHDuu0$calqFkqeRiA*Lwy4YiX+5săU"RLrlq]2eh_A&L$byW_-LBShrapFaM73F7M9lI,6hpF=d'St:%3wN9k?OeE\ZYg\ăU"QhabP(+ATpC:Z?ISsoQf,Ej]5cLR4cbgh7L3BSE9]^'Tx]GJvAN:.H2DS9yRLdbăU"JAd'0PIE5g,uFuE<z?Zf>*UVU5o?FIP$MQ/B$8ww'6,6cE7I]sxU%UbTjK3-t+7ăU"-l;J>xn=&%T*E4VWfN7eUu,TIU*&O1/]%t/QBkI%Fo16^'nR&#lWCQ5p-ywS+.EăU"1.Z*)qAR;\RqMO[>j?QZc[_;w9JtY?s&xi_fV2=/Dcwv%<\W;F$NGqp1gZvTcA)ăU"kMt.6o*6iC8Sk)%So?Gp+:pJikwup5aO9,tbkfL9bQWWa9j,/QtC<S+x?iCpbOtăU"Und/_(O<FzCsbO>7FzWg)yaKzfRgy+&TyZrGy3dx.]z>W=imDwBK=TWMIHjo_f?ăU"oTY?Cd#6CT?O$d#OTV?yd#Ayp]SI;JEDKi3yX%1D2KCxLY'd/.c<'ZG4LHK8gY:ăU"+zDxfB$*u;J(xpT&#gh#Zu$8U?f^nYUxK&$b]f1Y^X+tXJhTF.hPNY4uT4SMY?:ăU"hVwVM5A[+dwC2v1QHcqb,2)xt/Z=ZYp<Pe8bqUjodYw/6-Vy7(40flZ_lRo9bbnăU"n;I%4nL$,.c,L-1K%S$iN:xqr692ls'yj51kNFr=q,;Ymxb5J8a&0E#K6%q8D'căU"s+sBjh1HD'oC+%]YG*k,idyMPt+X,%kzhaY'pQOZ3L-amCG,N2uRr6T&o,=0UCIăU"sMd;rN=)S0cDM#Rk,_UJir$\ykk*2[,SsYn7ULY?xx]pk?xn>(c6?Cb>KDWNDvBăU"XbuY%,op(jJ&'Y**GEA%p3M-&4,v%gnX5vGW]FcV6);Gjq8wKnv?:L$iL=r^<]măU"BA.Q2w;F0,'30z,>4nr^\[7]=BH8Bm%+I8k$*X8JvnLuJ;VF1]adl3p]ddLcuA=ăU"Pn:^^8.CLoy*<i[_?wld&3&)edVih%Am)VaB7K97^3Ifj4%k)n7J:Fc&Q^DsBm3ăU"+.CoS=3>dF>ee%pIS4%AN)al%VAD)aqRde-Va1Z/[K,XRS<K>RShAE3$0hAgT7CăU"E3%4XND6E]/KQ4FsALUbRhKeWbg-[:o3)%aC^1c)9V;?K=4js'HJ9,]+:hY9%)=ăU";3V>caP1DD<S'?E#2--dQx7i%grZq,RTt*HkZI75DsRd;<i-L)uQD'bt/Km0M<qăU"vKT3?x\T)=(Nc8pt7lh12jgmFi<uVZ4R\PdC0at^s%\Qtc2\<yj''&z4fs#2c*ZăU"PQvDjwFD]#FCbY(hjg,nkcr>rOe<t2ZD>$)3KJ#qhVEIb&mo'_]Ia^H\S4Ni7o)ăU">oA'lWmO(<1QsGXu,2<fY3qBQ(qi)\3oY$R&=ZIkbHAc3llL$erYPko(*8N<[TiăU"o4c1sIGq%#hN(p2jy#b6iyJoLDVKlE?#uFuq'XaZ$#P.rB$AKw_nV'=oPr4krmbăU"K-6ninpv(;7DHgKEmDu0d)eX1\;J&HlR-XG[kNUHmtX9D<RgNY?c+0kX]]T>BB?ăU"o[HV8GRmZuY7#K>yPuMyYX?*)OWFXdbjCqP[L:28]Pr.R)(TFK7f7T*P:]OKi_,ăU"k:2(H\_Pf%7_Hg$>oY7Rvi7L91,fcPc_n27gkc_jt,%KafzqeKIS>6a&+P6>PGWăU"A41)RaIZl16]8ry14?b/V$*sK;#4\DCq8wc0MuPnCQ17r.Y.IJsCoEA\677lcK-ăU"F1)IQPbXRSG;q1h7K7OdT:BH$obMOd6A$<XxdIRJgd*lA#YRd5?W/vSf/caRH:PăU"zo(=d.L*P$64ha_pw:02poM%eXk1rk'dTf#C3p\>1WLz9BvAo6at*$KYURa08cDăU"DFq=f*3[xU&BEmCL\b?J*ppoHAg+4;XKrJ)<I\5gL.5T[3LXR<mN3?w[/R0ftd.ăU"\IF*HIT>[dG_V'OhD_/<b^?0\lqUtmGZ5pgNP0AW,oT;Q%';.]C&S70p%YaBw(dăU"6Qhx&Gbedtr+n$7<u73[in'gGlf9iR-U(0t+T<zN2d?J=Ab4nkn?+kj)v$?O9>hăU"d92fC%nBiWf?n$K1QbjYo5ZXIE7]BCJE5aCfgpK3Beb\1:?cEnRcNr_Z8-I\RoYăU"slQ8+7F=(*o*xI[WBZ8_[RV?\/hZx5A;-3YcnUxKYc<zj.un0f%Zun\JQPBKEd<ăU"*4n\yI/\P</$X8.4%$xjP5q'[WRUj6AXqcK_Qv^Uj+XsyV3n:\+IJV9aE\2Y?1băU"90maBI;kt0VLF5^]qm\3h\g;ce#*:2T:R7t82cSMkuBE&V,yAnwS99[i[E^Sa<căU"$.%PgMBi-u/uuBp-krdu%p()9%%'%-L%^4p.SOC:-d6B%1%k:%%%-%%#%wf(#xSăU"j'=jeS4[yzz7l9jLx/?JSH)xh>6*wX?ZJAq>OWA5E=_35\m\xVS?%mBGX%xgXJWăU"x\Bn&[AXb/h(+Xhv+8OL]7]qun-Ef,wHVlLBnx2/1cUFd7XnpnLTpU_NQs%YH,OăU"JY::kBKg^Jnol$tx.^<KI;BTBS7OQ;YXl1VjT<iqF-pe8x-F*g-)bW5#6<g4T%6ăU"(V-(41MC9<muA\2VC2JG;HgDTfvQa\)/8f>k;:=se:F[Ajb7ClSnW)7Cg1c3ZsmăU"JV(^1%)Cl;Ami3mT:QETC0:uT\Nl27^j*X*0J:LVF5b=]L.gQ.9ZZuCb*)0x&P_ăU"YEBCGiJ4I\Ma;S0Ak:c->7]5*<OfYh;<(<wh(c;&gUVQma^BtV'(p=^2q1Ze0ROăU"c95;*<6u]DSr]\59Mp&gG[NI]I&Va;Ym1,&X=-,+C?-a;];u7'LV00pu[Pi1++GăU"4sDYpq:).Y5l7;HuC%zrWC#?H18?Lgf%dIF:B<UA^[H0t[R*9Y4kc[D%?#h)B$tăU"?9XEYQLM+#?.w.U=^G.8tp9Eh0TyP#RB=015EaASV=VB$V(BKjWerR/,JO'/\-6ăU"eZi[?9LM9'E5P:'YTX[2ou>#j:29jb6'YU-(F=gT6m:7a2P.1Gb5ZZ%df:E\e^]ăU"[\L]T)+nQ#O/l==\a;S*J(^nG9\fjG-<4$QU(oq/$J^Va_Z;03ZN^aZG5>\p*BCăU"l#&0^vcDVfixsY(63F<^Tq-(T\R5R,Dq',&#/ZUD8c#,(6^Ia5U*G;.XuWJh'TDăU"QGUV]Y8>6Ws>WG12BvV)hKq*up#)Pu]jrQZ\(]TD5%BRiA'get1o;ME<UgcZF:]ăU"T,5d\wFUh^C[>3l?02GyiL']Sx[Q'j=KE.DT1NZW<#w9;vMg2Co<65VwG%%hUCXăU"guS&*FCtuVSj_KFZA=,gMUhgR475TZfq5dq1(E/<-7=Vynr+X[XG'9IF8dTq]J.ăU"VaPU4_O&Mmk?.A=Y1\[k;?IF<b$M^hgZ2T'SJfIvUND'Z2wN=%KY6VQVh1]Ub]năU"Z?M\%7iLFD;WiJACkQInoLs9&]91g1_U0)%WV;8%U6xUIB*g^1Gc1ND%o':]iccăU";/5y0L-oY%3]\]s\1A9#&Vf07h%V&2BKJ*#W:l>mj%GwV==hY=mA[f[AIU.HgPPăU"R'O77Q?Wc%=O5YZnQWjRQPHB)<,#.)L?+K$vVZK1':6osDJaeS=C<&,med%IH23ăU"%1j+kRH0\_tZBA#=qE>gaQ;7ajM<9%B>+y1RPc>=-e<FA0<nkj42c#.9[;sDh$7ăU"^G\Wj4mRiDQ$\Qfm#(U[eK*?1'KJ1/urF%lvS7wQ>/^y/2WT#lQ[=Oe=C4A90A3ăU"#8kh7RSYWWE,aN57aWSAWhaIArT7$,Y:='.Lk113+$RncA<1EK?'c/1Ve0Jk%Z,ăU"%f#k;:g3KU6(]WH]APX]^:_+=:h'>txC6\sWRf\UT+)mhW?KY9u_3/Y+RU32gq[ăU"KE=8+Q=G1QP]WQ%?);meJ/[=xe?cFA;VkW=(MoCCfE1EaNiq%b_H;FbI8L&/l/+ăU"7FB<UC'h=Z1.gWN_g]'E[l6o*#9PuP(ZGDDe0Xy)18J?%DV#Avn#3.1bODUX+kxăU"hh(lCfAH[J#L)$Wy1'?5]VL72_\%AqgC)5/[;eo)Z*71P*/*h1b[e10EY=Xe>fFăU"A:.kr:HMZsG'9CD:N)q]J.VaPU4_O&Mmk?.A=Y1\[k;?IF<b$M^hgZ2T'SJfIvUăU"ND'Z2wN=%KY6VQVh1]Ub]nZ?M\ka$zB-fmdG0JCl6SZCaX+c)H*MR_]0C=Pq[]>ăU")q=%9ql&E_r-tD'Y:wT9?5^,^)>z$QXbq47#?+^6#g-mhl=Y4smUBbhq*?J0Gu0ăU"7K;Yr_cp7tn?AN1R-\%,/xP=k+1[V)\^G8RZA>lgPPr'[:W;?[_K]Tjk&10fE?JăU"==Ri13q:<aiE,m9)a_\xM9.a9r9KDv]\]q=zqs1tro'aYrZLdT2'M3m9MI8nexWăU"_\Q\co[T_+ZQ.r:yUn<qFjh#+uu#KS0?_op-qn$k.mbv=q?HC7DC#4.PvCz6M4iăU"\o6OCt<2-,+Rs[H]lMHggs[dXv;bjCIZZMX4<#(2XrCx8gdt\XcMvTFFnFy%l0WăU"OvcWTn2-qBacM_fHSM#TXSY/:zaz;n;oA]8LaZioUST<b\ZnXJ-L<dd5t(6k^eDăU"/WoBB/W?gI1/-8qXM6?%r8$b[#_=zM4UCDMWCJfphwULV;zm0yEX59Ftr_M,3vdăU"[8gFDMRp7wYk:16^0mB^tdJoi64;s?sdBFCK6$^0O,9;<BxG^fI)RbLk(U8kRGAăU"8$HS6Nq[ZCg(]*27&T/#XWbpf3)6gu+nOS;Y,/)gkQ$IJvVp>LEpn5?jfS(MxX)ăU"S9J=;o=RVo)rF<h&Bb(mA-nO/$^J7FRYLBg2b3pF40(;wpGc03mMaUMS(XAc\1,ăU"\fz?;8tPuZf)k&Bv2.WBi>e,qfdvqKGdZOMDgWpjRF/iZI-I^ur-B^?j9FNL3IFăU"ux91?u^>X?3HbQcWh7UAJRUU,>o$DxK-Y&Y[[Uw5h3xMG'frpKFRRmJKEBw3h*răU"rS&I$Rum'tcNA$b:Km[uPZ^k,btqE.6TA:2.xd9a\H^sK3k/%e7r3d.mkYpK-PSăU"%viXI\FdSgy</%:M'fr7=i;E)</$vCu71jocv74UkG?#$r/rHApTyqE/*xX0o(iăU"?;w^jK=AJmaKoWkIhT6q?X3OonNSN9:k\Jej;T<[0%l>j>EE\+:4(0j/XO5l4N8ăU"x#=?p0G$1D-KqaJVsU3/%.hJk1m9Dd6g]sglEf*'l<<,a$-^ei9A-j]]7\2D1UCăU"sB]E$IqfB]D-4[UhCC,ip^t32V#8tkL;:++u;6vvlFPtFc]$ZB3X4B)V5235ckfăU"3JuE?9BOVn1i*3U?XlFfEcY>sg-IB;5k[dqPpY,cMms57kd?Kk\;Q-KzfbJHEh(ăU"Q[+-O>b=JMUu^>oU>ZVCV=aa1ZvAIOPw73J11FgQWFw-;Huo8qem?v;Hx%fRXRNăU"<36(BmKHVHF7xb4T_T3R4G1UEZaZ%WdAi\=z=2Yer05xhCDif_iT09H=tIpf:mBăU"xV>kgZEFOZO*i6kJiPWT&);]FiT>\JpxW=tlE>g$BAx,X)A8+8Ld#QUL?.T\wQZăU"Qnp%erCU<l13WUHW'#%[48-o-Z>*ozo_wANtL13(cxcA'KG2,EMB(EBl-?8RD_?ăU"SyoIvhD8heG];>]>v?XESle47[o(>v:xl%Y46LaVs+^RGN(3g=[$qv6*fX7f/FtăU"]OXjj412x[B=HNnB#TD]ER_0bw6Q-n&,CIr;U+I[uBM$cxf;SJK^wT*?iaR,3Z;ăU"HjrwHN0m.80\Hg70'k;wsfqL2A,spac/5*mO.t)mOQxSv2Q:+u^H?bf^Q?I&SkYăU"?F4qoC\FW;jw2:ClGo]ppsv>b?lLS9fhWVP&.9,2c,[P=T3>UT<fq<VJM==h4S=ăU"r$$q*,(qxr/Py:E]NAm.#*wRPHMiey(Z_?6[m2877JKePi0:Y_$RX8NM>VJJJ9xăU"]XZ$$kUihZF1<kKdsP-aQg$$*5D3lijqW><[Zglh,rt[CbWX->*Hb&FA\/k>kXoăU"L=E6a>Eq41'a5#CnLm1FoFJ8r75%,10K^IK\BtOhB5:6>;r%xBLhTnjpOK+)5_ZăU"X1I[jU.FxCcg(/=,(xC[^+*FtvP9Z)7iU:pO<1_$?h2=IQ<kUM*qizAA+SKQzT'ăU"7\mB\iT*k$_)]ezw8YjN4gVb,/J7=)W2bM:%X6urj7Q^St7DK5<=YL:mkUrh,3(ăU";rCFiXlVZZkutmRkk$L,<cv>ip\M:jC:UAZV<$_)Vpddih:t%7CmzC1IRZ)x9M<ăU"1y_Z4k>L0NX2G\9p8N\4i:OV>)1mQf0r?h2Ug/T__6&kDyV$0L.&u4QT38THd0UăU"BDUNc2>vPV036z0EM0>8,mROhK4xI]S*k\dS#V;]AN0FsNl^ELF6lGINI:lUTz[ăU"y0%/.;.j>/p*O'DDIZZlpZgtUEhYCk/R1smKG:KtjhLZS49j$$v-Xk>WDjRH'n*ăU"7:O/+)*p(GS\<+F5J61GiZ5*j2HY3Xk4rbj,V/RLq\F\$wRFKtj30]a<6H6vw0xăU"efZ<cMzrVhpjZ[ThiZ>4^sKpD*[V\<adu_j0&RZDWJ+uWrxlq^#P^T(*\8aTqD4ăU"\l[Hw1)?&IQNWxpsUi?LuV'ddY\+;CPa5LZ;_?4Orkbd^DH$'_EOSe)*,:HW&J=ăU"f;(6+I5Jf+G'6I\q*fuT(?><l;;Sx,w)rXCLs*)64RKop57C9g>Pz55vQi^0>?IăU"o?qnh8.K'DY?GY6I>lhn(A;xaRZARYLrSkutgz>(^JbZ&Ucja=:fR>)YJhump92ăU"kqC34bLtb(v;x]3YMqhf7m0t.lnXSM((Jtt&TOY<d/DlT3<Vi/=*0u&TOfQxl<DăU"-3Q9Sum8rx5[[w\nM&2D7vL=S4l&6xFH=P]GI$P]4_MqK]a4Ds14;E#=,F=XTvxăU"jegZX6u=OmS&GYlHZLBDFg4iTyr4g]hC^O[YKmHab_Yub/1Ilr)p'N]/TbEM?8=ăU"p,#jqzM/G3W.w>pLGD$<tJGm]*NG-hKqTn:REM<a_G#4f$h:xnjKJT4)c7rpTCMăU"rHDe^ysZGkXl(?NH-9v-7+Su27+A=;7c]5TANr5QSI[g5bOs+Y_JQZNVTd;LJ[,ăU"Hsn1H1b^Ba3JVtRw/Q'qdg;T,xaw6pw%X4dKlDHZG4F-$Ta\9IH=vqB7*4>.lx-ăU"qL#N*GaNom=xKV&+.1ltc][TQidRnc:4?=sM.LgFN$-Lc_FvDsW<]t_Swto5FIbăU"X[=-Bsab>K%6Q=4bq=I0-N9RkB#2c;vIQpfw3ILJ>%l+(apdOn/[L7ewX#oKNhYăU"u]Hc:As](Io_cK4uBCJIDwAW&a4P^IqnvaJ^Nhp*]?Jl[O^oB]Joc'23uade&W*ăU"BCLdAv*]GJLgMhr]7xo_O6r-a8hdks]/3Jnx2AYaxbdExkSHJld;ku]0[oSukA4ăU"JpcSKjB&\dQzkdZJN&B]7J.M&Axa8>M2q*BAJP_cCN2XoB0dnKtB.Fo'xA*6aDMăU"92fB4bdumBIro=%2AjazLo=&A2VanMNrxan4P2*nMi;^aJNyAn5atdaPw]ncUasăU"]fdoC%k'HoCvikwa#PcuZa<#dut#JtMHY)B(d:az]\gom&k<8c%v$k>oO4OrFJWăU"dcu%$BIJ8OxkQa.2o-y*kJJTBJ>KG4_>QUfIR=s0>B]-]-jI3)S[<\?V^7.3mhjăU"s;BF?R]1:V1=2*1BP#aY=$a]C1=(j18bFZLaVX-a\T4h#v%zn/iAHMschaiaJ^oăU"]zk..Jnv2AUaT[O^xB&(oSy9+uBGLJZd+5s]AJ8DJXyMATa>+Nr#JiDc+&H]#o=ăU"+vk4o8=zkP#JtOHXoB8yWx8XM_OqQlU]OxEMPT_%B[)&#kHbg&)/(<;0OjSl*wmăU"?G%F?li_1ow1GGDS(N$G_mRxS#GKO]m2>-w2W<?BEH%hUJv?Mkjq;j11U9HA$zfăU"EX<Ap9KhR:*:8\3PcB\)BBXaZ)t7nrpLW$6rvM4mT0<;7S3HL/yGYG&9GoGi+NOăU",a5Gi7IGr$4(I6Gt;$uAw.INA9(NY1jAQGd$,mAsICLA8xGXEi1IGT$%p'6[okiăU"=h1B&7^jE;(?6$[Em$^QRX?/([6^5k^B[YZ,RkC:B[fT,WGml]%k,ev]*=e(R6DăU"p]*:Re>]:Y<%$,<p^*BRjOGMD9R_G[GBoK6I$]JZo,;GwcERSG6WZ;Tk6hAOc?RăU"6G]3^$C9RVG]&6L^$cFR>G_=B[A$R_M8_JXjF.:v:j^9*6p\wGO'AWgMqC7Y-'%ăU"66PGS3jUgGY1Xd?%xerhFTh>QLL\4hmNbtOD0RL0cR9Wb=,uu$JC//ct-vi-&_tăU"#^4nq1l6w^?Pfm%)?8k;BqnrTMcMM:XZlFX),6k=pkb'$/X=A+<U\Xv,e3^yRgnăU"\3wkA)x#f1RduqQx2#\t2F&Bx<6^OB*[rYR*g&ed#Nsqt-*=D$Goq#4\czeyx*/ăU"pYY7F,l?R;^7b=P>'%-VUsKt;U_4UejqS7rFfNPAJToM,IJD&<gpvf<4=6vMrk%ăU"nDf?YaHbyE(kefO(k*RaK'WsU/stZF0-VTXF<PAHu'jqm0#ZXvsrp_]tnb^h-PiăU"mVCaXZvpF<Uvb4ua1^PlhL$',8(x\up/WPl7#^#o-TPia=P>*dxOESFyraueDkIăU"duEmObCausb[Cesnr0,bw>1Lxs3x*TjJi^If$g*W7]%pL*tFT6#fa.L,'_#W[/8ăU"ik,=9xK7J2x'u:]tHKpCBDQ$eUpYEoug<l-O./_azl'XLrhc\ynL$(hxGzV6[DlăEND SUBăSUB V2ăU")5zOzq;k\])zCeI7dmkIhD*n3r2v].I4T(cY\V7D0cVl3pdH%3+S2hjV<c<2%+3ăU"Z]e1DDUn7TP-KWLah1j<PfCa5t/Vzi#gHx/k&+e8$]tjsX8GCgsf-2l4rML1\+BăU"P4k$)KZ?XL'7%xKlF&'jUrSbA7p9X6l*3C#]=qAsT&EIbb?>)jW\0p:$23Si6LvăU"6?lw-U[H^(S,WKZyrhBbFj$gz>P&CJLb9PVl8OP<moj\^P,wD:;Ui>tl[^DTGW#ăU"V>$?dITfn6S8ftJ_UCn[ejlDkN'xJLYPq<\DPr?ljZEsi0p^6rgZJIWD>r+Q*m>ăU"S#9x^YL7Mmjn&[#rQ(St-G-^SJ,[tLA-<]5i9x:eocx#pHrmZFN2Chs1t4D&9skăU"xc6.w$n5INsLO9&ek&VzkBhx[#MYDbc_k=g2_f\DlxTaHhV3HxdDq$6CKl_7LPmăU"9V+SWn&HcV01C_o?HCQ$qjPH>alU=Z>rRbiJ,f/74:GNQKq\tDdvn3^KZ1H$tk7ăU"BGKNFeBiThDr^86oju24Amc\fAeB&8V;E.PZuPf;EuwH8AqBlnraa7\&lH'Enu2ăU"3\H#_gD<3geNbV3N=LG#vu,5[uzFJJyBv;z&'??+xEJDfsB#fqZFCo>h$8KoTLqăU"tsdKQ&pp41H.H;0kvlg'BO16zV'wtV$_h$>*+zZ*u])sU2+bzqLRB[lF_BV5fc9ăU"Vx6g+e$l[EP^2iLzZBjLn*me\/DG<CP1=zfwj-k4oxJ>nNGo#qKFS$h=^cXGE2PăU"iU.JUjT+ifCdkdT3Wh#NV$I.l&8g>MKK6/JvH?9)i2qpl_cBvD.htNV$'iTl54;ăU"CO^#gU':n3rH<Y9V&yj\tg8LFKj#TNX+G$Or_nflTcp6G$OMd+n[kdzw0]F.7.hăU"#jZ/xI=R^(h$FiCP+S]$l\W8?)fxtcd4mS%d$d5MXuhW'r[YsSC.Tb:fw.gryx&ăU">w%/RMaYY6Lr$16dzRx.[dTzMHMMc,rZw'.Rnzg]-*R:[G*&h)2'<z9[tZzgsPVăU"X(h2Byd2md5qSibK>YU&7qVu)mxK.Tx?6=GE_ksSTKj7Hw*X^,$[]eKyQ_z;:XkăU",lCfhat1/g*1+4WLeYw&-wJRkx&COay>?h#49BeqY#w^S[I''dQGu%bq2*BXN?UăU"aA+NfYdRNL;9v,rTpnhenFhgNrUGipFuq7xc64$RNjRtx5=>r2tTFMAjuv<v?LvăU"22rFon(6\*iyRb?]y;,2?2.cT.RSd8.0cg_D6;ci#.j?ZWgDljwSVp.rhSLD<r<ăU"r-\/Ja[SkTJ7#<rk<-\/Qx8uuk%&Msq'9PG;yDOzpnmX6;:l/olpB8dk1hj_ZbOăU")?eGp:>Eoq[k^S:Jhp[:oUX^2RhMBYBZ[GnXOQtM+*q4dvj-UEGN/*WhDksQ$,NăU"rm:s?%[['Yr4Fyl&(ak>9fHz0QPNs.XlI:Qv4-([:tdd]gk7R*#I*Es:Fq>$m1tăU"8;1vVK#:zT)ieWun'ILd\Y>1D?PnuyTg3Ysoo4v>\Y[2Dy:B$M(7>:Oy(zWwb8&ăU"vf5gb17Yl4,ToGy3_xu;o5mY;Nla2r%)u<.wSKa_2pAQE_&gr4yWn%4wnNIN+:yăU"CF&a6.>wA2Vu;p]b8+F>GCpmu'p6/6MfWR%uH:54SLQglaiJlIS9mED?pHGV5gFăU"U90lmC4)He]Lf,]b;szKp,qtI?/>IF_^IWgzVqHstgU7ZtW)JyAhVEu4RoBi0?.ăU"nwyf/aKZlDYGIZMV43j^WAaJ*t0G/aBWZv0=l1GJ8gV6=VvAq3X,aiUf-,suu9AăU"W9#8F9][ZpkU4+[LdaVh;0hZf9?KVdQL9J^xnswU6$OZqpAgmO(?5_qnYxLM$[PăU"wl71;MCp;(pgpo&+p,hXuV3&FL4D_oQupQgivdJYftmPmO$mZlZ3T/o?_B9-1-'ăU"o-/-?\:cP&3nY4WN&VBjZY3&oLBo,oA%u$w+8M2_[&_2cBjw7l0nM8iR<g>=5qBăU"BEJXSVIc/<,aiSWUH^2WznCo?5xU3b7nA3W*SsnW.JMIgg1oiaL11U#R=*gMwIRăU"wgc$^+37KbYEe_(E6G0P$l_4oA*A>Rm#KPSK&ROh+\;3\*_t^rOHPNmi#)c5j</ăU"rK/H*_N4$J#Ywv1OMVUHFL&^0[(L$DHVJ$$_L<$&_EP$\$qF_7\VPPA/&3=W/TrăU"Ek0Js6h[2kQk[.Cof\.C/jd4CC-Y.C;t)n(cWlV<L]bgOV8noIoHYIup#q6sj?0ăU"FS#E.Oi7S;jk7YU_WKBrC+ALAF4+2H^%H=ra&k9kj8]6ABlm>HF:rZeBg;;eW;păU"eiM?'co;?'+5%a#C3Wdz<pP1<0q$1?-<#93f)J_x$(?AbA'83V+97^D25;(R-H/ăU"fF&E8&FPE9PGPH7\F0GVF/bEh00**?ef1MGl<A(FZcC-UfZ$WnTsYs>m?Gb4]J(ăU"1B\'+H(>H2^AOAiy(HO&m(RAAW[7NFn%m(W./8j5EDB_X$kTAHA]+-MV\Q-Me9[ăU"-HOFqoyMFWRG/[vA6)\3Ti9Bs[E&+l9<h78s-36<QOf/=k=l0/EFH9pGpH.4F^FăU"%tGdk9oGHF7TG(E0(H>G0hELH-jn<>.A.t0;ZS;k7jgRDD[SjH(=8iK:HvYu3L?ăU"qa#1HDR.QgeEiD$dAD6_p$unA^A(<$TF;j$(G.\G.lW7PUX3UR;h[CeC?NKLOTgăU"bT4x7)<^XN]Hs[E5YhLn\8V;(U7')&xf+F:h_Zm%BW;>&VYFR<AxAQ3]C3&K+=(ăU"YMk^+WT%fS$]DKebe%qO;E'i%4&.X&;/4RAb/A8AP+3.(LiST0-q1_fA^s3\ka)ăU"kY+C,H;HC&H>H.2^OAgiyri0n<xj&]hkGCJsC8;WQKJdjf0&Rvuo[1M'cA0]q3FăU"&AC3z\U8R9IU;2_^[s(ra'+&2O?RS+kVUOUP[U];afgkg+jglC#gChmgiM[epjmăU"<KY,=;-l:+.#jj2X55Rml-(1k-hI*tSX';Kg=mv8jp>.]<m%HW>^#*^2h,VEl;dăU"Fp_^9Ao]XWAtAIW]A]ZiAf_FWA&*Cs#*)(t2RX9jjRXU)R;hC$9p3\.iD/=8vUAăU"t__nFH:H4]zZ]PA*smKZd%TW->\Q1lc>_*A]/s.8f.sj5FPvdoC#*_M;T*3C-DyăU"Rjhh^+W%OfS#w84]J/(12:+92+2;92C2.92:2(T20RY/;lEGE4$L__v$bAc,A0AăU"lDA:AF&]Ee#sB2Tg2WU+2:r0vB?FH$.7w^hL>?qs87-<?>\8xGDB_X$kTAHAaW]ăU"']_1s2bOe7O;+e'k[+FPF\[E\H0gH*_4i*CJ*u)t*eDV?v][F:jnaxw;7QAl.[EăU":m4F'tLup%&'9%%9%'%I-%L48pSSb1o[h87%%Fz%%%-%%%%%%%%%&%RE%/P%%%%ăU"%MA0HBLS10B%up&'%9%9%%'%-%2^4pS^OC:d'6B%%)k:%%%-%%%%%%%%%%%E%<xăU"P88%%%wf&(xSj&'jup%*+%%%%%'%.'%;%.%%qV%%%%%%2/ăEND SUBăV2ăCLOSE:IF S=203AND B&=12838THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\12838,219);:END SUBă'>>> Page 1 of MSECSTER.ZIP ends here. Last page. TCHK:203ăAndy Amaya                     Display & Rotate an Elipse     aandres1@msn.com               06-13-03 (  :  )       LIBERTY                264  10711    Eliprot.bas '----------------------------------------------ăAndy Amayaăaandres1@msn.comă'---------------------------------------------- ă'BEGIN CODE:___________________________________________________ă ă'Demo showing use of 'ellipse' SUB and rand() FUNCTION in graphics applicationsă'Programmer: Andy Amayaă'Date: 5/23/03ăă'Released to Public Domain AS ISă'End user accepts ALL responsibility for using correctlyăă'FUNCTION rand() returns random number within rangeă'SUB ellipse - plots a user defined ellipse or rotated ellipse in graphics windowăăNOMAINWINăDIM dx(360): DIM dy(360)    'arrays to hold COS() and SIN() resultsă                            'used in SUB 'ellipse' and plotting elliptical pathsădegree = 3.14159 / 180      'constant for converting radians to degreesă ăFOR x = 0 TO 360            'calculate and store the COS and SIN resultsă    dx(x)=COS(x*degree)     'in their respective arraysă    dy(x)=SIN(x*degree)ăNEXT xă ăDIM c$(3)                   'hold color stringsăc$(1)="red":c$(2)="green":c$(3)="blue"ă ă'Initialize line drawing mode at start of pgmămode = 1ă ăRANDOMIZE TIME$("ms")/86400 'seed random timer for a fresh set of random numbersă ăWindowWidth = 800ăWindowHeight = 600ăUpperLeftX = INT((DisplayWidth-WindowWidth)/2)ăUpperLeftY = INT((DisplayHeight-WindowHeight)/2)ăGRAPHICBOX  #1.g, WindowWidth-WindowHeight,0, WindowHeight, WindowHeightăButton #1.btn1, "RGB Ellipses",[ellipses],UL, 1, 5, 120, 25ăButton #1.btn2, "Spinning Ellipse",[spin],UL, 1, 45, 120, 25ăButton #1.btn3, "Atomic Smiley",[goSmiley],UL, 1, 85, 120, 25ăButton #1.btn4, "Atomic Orbits",[orbits],UL, 1, 125, 120, 25ăButton #1.btn5, "Toggle Draw Mode",[drawMode],UL, 1, WindowHeight-100, 120, 25ăButton #1.btn6, "Exit",[quit],UL, 1, WindowHeight-60, 120, 25ă ăOPEN "Ellipse SUB demo - by Andy Amaya" FOR WINDOW_NF AS #1ăPRINT #1, "TRAPCLOSE [quit]"ăPRINT #1, "FONT MS_SANS_SERIF 10"ăPRINT #1.g, "DOWN; FILL blue; FLUSH"ă ăLOADBMP "smile0","sprites\smiley.bmp"ăLOADBMP "smile1","sprites\smiley2.bmp"ăLOADBMP "smile2","sprites\smiley4.bmp"ăLOADBMP "bak","sprites\bg1.bmp"ăPRINT #1.g,"ADDSPRITE s0 smile0"ăPRINT #1.g,"ADDSPRITE s1 smile1"ăPRINT #1.g,"ADDSPRITE s2 smile2"ă ă[loop]ăWAITă ă[quit]ăUNLOADBMP ("smile0")ăUNLOADBMP ("smile1")ăUNLOADBMP ("smile2")ăUNLOADBMP ("bak")ăPRINT #1.g,"CLS"ăCLOSE #1ăENDă ă[ellipses]ăclr$ = STR$(rand(160,224))+" "+STR$(rand(160,224))+" "+STR$(rand(160,224))ăPRINT #1.g,"CLS;COLOR red;SIZE 2;FILL ";clr$ăcentX = int(WindowHeight/2)ăcentY = int(WindowHeight/2)-15ăinc = 2     'play with 'inc' value to draw faster or slower (1<= inc <=30)ăFOR i = 10 TO 280 STEP 10ă    k = k + 1ă    IF k > 3 THEN k = 1ă    PRINT #1.g,"COLOR ";c$(k)   'cycle red green blue colorsă    j = 290 - iă    CALL ellipse centX,centY,i,j,inc,mode,0 'rotation angle = 0ăNEXT iăPRINT #1.g,"FLUSH"ăGOTO [loop]ă ă[spin]ăclr$ = STR$(rand(160,224))+" "+STR$(rand(160,224))+" "+STR$(rand(160,224))ăPRINT #1.g,"CLS;COLOR red;SIZE 6;FILL ";clr$ăcentX = int(WindowHeight/2)ăcentY = int(WindowHeight/2)-15ăellipseWide = 280ăellipseTall = 40ăinc = 10ăFOR h = 1 TO 3  'make 3 full rotations of ellipseă    FOR rotation = 30 TO 360 STEP 30ă        'draw a red ellipseă        PRINT #1.g,"COLOR red"ă        CALL ellipse centX,centY,ellipseWide,ellipseTall,inc,mode,rotationă        FOR j = 0 TO 50000:NEXT j   'adjust this delay loop to speed of your CPUă        'erase the red ellipseă        PRINT #1.g,"COLOR ";clr$ă        CALL ellipse centX,centY,ellipseWide,ellipseTall,inc,mode,rotationă    NEXT rotationăNEXT hăPRINT #1.g,"FLUSH"ăGOTO [loop]ăă[goSmiley]ăPRINT #1.g, "BACKGROUND bak; FLUSH"ăPRINT #1.g,"SPRITEVISIBLE s0 ON"ăPRINT #1.g,"SPRITEVISIBLE s1 ON"ăPRINT #1.g,"SPRITEVISIBLE s2 ON"ăcentX = int(WindowHeight/2)-16ăcentY = int(WindowHeight/2)-31ăPRINT #1.g, "spritescale s0 300"ă'put big smiley in middle of graphic windowăPRINT #1.g,"SPRITEXY s0 ";centX-32;" ";centY-32ăellipseWide = 280ăellipseTall = 100ă'if mode = 0 then plot smiley every 3 degreesă'else plot smiley every 1 degreeăIF mode = 0 THEN inc = 2 ELSE inc = 1ăFOR k = 1 TO 10     'make little smileys orbit big smiley 10 timesă    FOR x = 0 TO 360 STEP incă        'get x,y coords for points on 1st ellipseă        x1=dx(x) * ellipseWideă        y1=dy(x) * ellipseTallă        'rotate 1st ellipse by 30 degreesă        x2 = dx(30)*x1-dy(30)*y1+centXă        y2 = dy(30)*x1+dx(30)*y1+centYă        'get x,y coords for points on 2nd ellipseă        x3=dx(x) * ellipseWideă        y3=dy(x) * ellipseTallă        'rotate 2nd ellipse by 150 degreesă        x4 = dx(150)*x3-dy(150)*y3+centXă        y4 = dy(150)*x3+dx(150)*y3+centYă        'move smiley 1 along points of 1st rotated ellipseă        PRINT #1.g,"SPRITEXY s1 ";x2;" ";y2ă        'move smiley 2 along points of 2nd rotated ellipseă        PRINT #1.g,"SPRITEXY s2 ";x4;" ";y4ă        'update the screen with new sprite coordsă        PRINT #1.g,"DRAWSPRITES"ă        FOR j = 0 TO 1000:NEXT j    'adjust this delay loop to speed of your CPUă    NEXT xăNEXT kăPRINT #1.g,"SPRITEVISIBLE s0 OFF"ăPRINT #1.g,"SPRITEVISIBLE s1 OFF"ăPRINT #1.g,"SPRITEVISIBLE s2 OFF"ăPRINT #1.g,"DRAWSPRITES"ăGOTO [loop]ă ă[orbits]ăclr$ = STR$(rand(160,224))+" "+STR$(rand(160,224))+" "+STR$(rand(160,224))ăPRINT #1.g,"CLS;COLOR red;SIZE 6;FILL ";clr$ăcentX = int(WindowHeight/2)ăcentY = int(WindowHeight/2)-15ăellipseWide = 280ăellipseTall = 60ăinc = 3ăFOR rotation = 0 TO 180 STEP 30ă    k = k + 1ă    IF k > 3 THEN k = 1ă    PRINT #1.g,"COLOR ";c$(k)   'cycle red green blue colorsă    CALL ellipse centX,centY,ellipseWide,ellipseTall,inc,mode,rotationăNEXT rotationăPRINT #1.g,"FLUSH"ăGOTO [loop]ă ă[drawMode]ă'toggle drawing mode    (mode=0 plots dots, mode=1 connects dots with lines)ămode = 1-modeăGOTO [loop]ă ă'**************************** FUNCTION rand() *******************************ă'** Parameters are: lowerLimit, upperLimit                                 **ă'** All parameters are positive integers, error occurs IF strings are used **ă'** RETURN VALUE is the integer random number generated in defined range   **ă'** Source: Can't remember it's been too long ago.                         **ă'****************************************************************************ăFUNCTION rand(lowerLimit, upperLimit)ă    'eliminate error checking to increase speed of functionă    'just make sure that parameters are correct or program WILL erroră    IF lowerLimit < 0 OR upperLimit < 0 OR lowerLimit > upperLimit THENă        rand = 0ă    ELSEă        x = INT(RND(0)*(upperLimit - lowerLimit + 1)) + lowerLimită        rand = xă    END IFăEND FUNCTIONă'******************************    SUB ellipse   *****************************************ă'** Parameters are:                                                                     **ă'** CenterX coord, CenterY coord, radius1, radius2, incSize, mode, rotate               **ă'**                                                                                     **ă'** CenterX, CenterY coords locate center of ellipse to be plotted                      **ă'** radius1 is width of ellipse plus or minus a few pixels                              **ă'** radius2 is height of ellipse                                                        **ă'** incSize determines spacing between individual ellipse points                        **ă'** mode: 0 = dots, 1 = lines                                                           **ă'** rotate indicates rotation angle for ellipse                                         **ă'**                                                                                     **ă'** All parameters are numeric, compiler error occurs IF strings are used.              **ă'**                                                                                     **ă'** Source for parametric ellipse formula: http://www.wikipedia.org/wiki/Ellipse        **ă'** Source for matrix multiplication tutorial:                                          **ă'** http://people.hofstra.edu/faculty/Stefan_Waner/RealWorld/tutorialsf1/frames3_2.html **ă'** Sources for rotate using matrices:                                                  **ă'** http://www.lab3d.odont.ku.dk/~sporring/teaching/graphicsF02/2dtransformations.pdf   **ă'** http://www.ocf.berkeley.edu/~horie/qbrotate.html                                    **ă'*****************************************************************************************ăSUB ellipse centerX,centerY,radius1,radius2,incSize,mode,rotateă    'use mode=0 to plot single dots, use mode=1 to connect dots with linesă    IF mode = 0 THENă        FOR x = 0 TO 360 STEP incSizeă            arcX=dx(x) * radius1 + centerXă            arcY=dy(x) * radius2 + centerYă            'if rotation angle is 0 or 360 don't do extra calculationsă            IF rotate <> 0 AND rotate <> 360 THENă                x1=dx(x) * radius1ă                y1=dy(x) * radius2ă                arcX = dx(rotate)*x1-dy(rotate)*y1+centerXă                arcY = dy(rotate)*x1+dx(rotate)*y1+centerYă            END IFă            'change to handle name of graphic window used by your programă            PRINT #1.g,"SET ";arcX;" ";arcYă        NEXT xă    ELSEă        x1 = dx(0)*radius1+centerXă        y1 = dy(0)*radius2+centerYă        'if rotation angle is 0 or 360 don't do extra calculationsă        IF rotate <> 0 AND rotate <> 360 THENă            x1 = dx(0)*radius1ă            y1 = dy(0)*radius2ă            x2 = dx(rotate)*x1-dy(rotate)*y1 +centerXă            y2 = dy(rotate)*x1+dx(rotate)*y1 +centerYă        END IFă        FOR x = 0 TO 360 STEP incSizeă            arcX = dx(x)*radius1+centerXă            arcY = dy(x)*radius2+centerYă            'if rotation angle is 0 or 360 don't do extra calculationsă            IF rotate <> 0 AND rotate <> 360 THENă                arcX = dx(x)*radius1ă                arcY = dy(x)*radius2ă                x3 = dx(rotate)*arcX-dy(rotate)*arcY +centerXă                y3 = dy(rotate)*arcX+dx(rotate)*arcY +centerYă            END IFă            'if rotate angle <> 0 and <>360, use coords for rotated ellipseă            IF rotate <> 0 AND rotate <> 360 THENă                'draw rotated ellipseă                PRINT #1.g,"LINE ";x2;" ";y2;" ";x3;" ";y3ă            ELSEă                'draw plain old ellipseă                PRINT #1.g,"LINE ";x1;" ";y1;" ";arcX;" ";arcYă            END IFă            x1 = arcXă            y1 = arcYă            x2 = x3ă            y2 = y3ă        NEXT xă    END IFăEND SUBă ă'END CODE:ăAndy Amaya                     Tree of Pythagoras             aandres1@msn.com               06-13-03 (  :  )       LIBERTY                156  5573     treOpyth.basBegin LB code:ă_______________________________________________________________________________ă'Tree of Pythagorasă'ă'based on Wouter van Oortmerssen's [http://wouter.fov120.com]ă'SHEEP example [http://www.osnews.com/story.php?news_id=169]ă'based on an old E example by Raymond Hovingă'ă'Liberty BASIC port (with gradient fill) by Andy Amaya June 2003ă'------------------------------------------------------------------ăNOMAINWINăDIM c$(12): FOR x = 0 TO 12:READ x$:c$(x)= x$:NEXT xăDATA "255 255 255","239 255 223","223 255 191","207 255 159",_ă"191 255 126","175 255 95","159 255 63","143 255 31",_ă"127 254 255","111 254 223","95 254 191","79 254 159","63 254 126"ă'WindowHeight MUST be multiple of 160, 200, or 256ă'to perform gradient fill correctly.ăWindowWidth = 640: WindowHeight = 480ăUpperLeftX = Int((DisplayWidth-WindowWidth)/2)ăUpperLeftY = Int((DisplayHeight-WindowHeight)/2)ăOPEN "Tree of Pythagoras - LB port by Andy Amaya" FOR graphics_nsb_nf AS #gă#g,"DOWN; trapclose [endPgm]; WHEN characterInput [getKey]"ă'red gradient  'un-comment a gradientFill call for gradient backgroundsă'CALL gradientFill WindowWidth,WindowHeight,1,0,0ă'green gradientă'CALL gradientFill WindowWidth,WindowHeight,0,1,0ă'blue gradientă'CALL gradientFill WindowWidth,WindowHeight,0,0,1ă'cyan gradientăCALL gradientFill WindowWidth,WindowHeight,.15,.65,.65ă'sky blue gradientă'CALL gradientFill WindowWidth,WindowHeight,.55,.75,1ă'gold gradientă'CALL gradientFill WindowWidth,WindowHeight,.85,.75,.25ă'copper gradientă'CALL gradientFill WindowWidth,WindowHeight,1,.55,.35ă'purple gradientă'CALL gradientFill WindowWidth,WindowHeight,.65,0,.75ă'slate gradientă'CALL gradientFill WindowWidth,WindowHeight,.45,.5,.55ă'no gradientă'#g,"FILL black"  'output identical to SHEEP exampleăCALL pythTree WindowWidth/2-WindowWidth/12-5, WindowHeight-40,_ă              WindowWidth/2+WindowWidth/12-5, WindowHeight-40, 0ă#g,"FLUSH;SETFOCUS": WAITă[getKey]ăkey$=Inkey$:IF key$<>"" THEN [endPgm]ă[endPgm]ăCLOSE #g: ENDăSUB pythTree ax, ay, bx, by, depthă    cx = ax-ay+byă    cy = ax+ay-bxă    dx = bx+by-ayă    dy = ax-bx+byă    ex = 0.5*(cx-cy+dx+dy)ă    ey = 0.5*(cx+cy-dx+dy)ă    'c = -1-depth*$100020      replaced with values in c$() arrayă    #g,"color ";c$(depth)ă    #g, "Line "; cx;" "; cy;" "; ax;" "; ayă    #g, "Line "; ax;" "; ay;" "; bx;" "; byă    #g, "Line "; bx;" "; by;" "; dx;" "; dyă    #g, "Line "; dx;" "; dy;" "; cx;" "; cyă    #g, "Line "; cx;" "; cy;" "; ex;" "; eyă    #g, "Line "; ex;" "; ey;" "; dx;" "; dyă    IF depth < 12 THENă        CALL pythTree cx, cy, ex, ey, depth+1ă        CALL pythTree ex, ey, dx, dy, depth+1ă    END IFăEND SUBăSUB gradientFill width,height,redPct,grnPct,bluPctăIF height/160 = int(height/160) THEN n = height/160:mult=160ăIF height/200 = int(height/200) THEN n = height/200:mult=200ăIF height/256 = int(height/256) THEN n = height/256:mult=256ădecrement = (256/mult)-.01ăc = 256ăFOR y = 0 TO height STEP nă    c = c - decrementă    #g,"BACKCOLOR ";c*redPct;" ";c*grnPct;" ";c*bluPctă    #g,"COLOR ";c*redPct;" ";c*grnPct;" ";c*bluPctă    #g,"PLACE 0 ";y-nă    #g,"BOXFILLED ";width;" ";yă    #g,"FLUSH"ăNEXT yăEND SUBăă_______________________________________________________________________________ăEnd LB codeă ăBegin QB code:ă_______________________________________________________________________________ăDECLARE SUB pythTree (ax!, ay!, bx!, by!, depth!)ă'Tree of Pythagorasă'ă'based on Wouter van Oortmerssen's [http://wouter.fov120.com]ă'SHEEP example [http://www.osnews.com/story.php?news_id=169]ă'based on an old E example by Raymond Hovingă'ă'QB port by Andy Amaya June 2003ă'uses same palette as SHEEP example, scaled for QBă'------------------------------------------------------------------ăDIM c$(12)ăDIM clr AS LONGăDIM blu, grn, red AS INTEGERăCLSăSCREEN 12ăPALETTE 15, 32 * 65536 + 4 * 256 + 24ăLINE (0, 0)-(639, 479), 0, BFăLOCATE 1, 24ăPRINT "Source - http://wouter.fov120.com"ăLOCATE 2, 13ăPRINT "Picture at - http://www.osnews.com/story.php?news_id=169"ă'scale SHEEP palette to QB formatăFOR x = 0 TO 12: READ c$(x): NEXT xăDATA "255 255 255","239 255 223","223 255 191","207 255 159"ăDATA "191 255 126","175 255 095","159 255 063","143 255 031"ăDATA "127 254 255","111 254 223","095 254 191","079 254 159"ăDATA "063 254 126"ăFOR x = 0 TO 12ă   blu = VAL(RIGHT$(c$(x), 3))ă   grn = VAL(MID$(c$(x), 5, 3))ă   red = VAL(LEFT$(c$(x), 3))ă   blu = INT(blu / 256 * 63 + .5)ă   grn = INT(grn / 256 * 63 + .5)ă   red = INT(red / 256 * 63 + .5)ă   clr = blu * 65536 + grn * 256 + redă   PALETTE x + 1, clrăNEXT xăhz = 640: vt = 480ăCALL pythTree(hz / 2 - hz / 12, vt - 20, hz / 2 + hz / 12, vt - 20, 0)ăa$ = ""ăWHILE a$ = ""ă   a$ = INKEY$ăWENDăSUB pythTree (ax, ay, bx, by, depth)ă    cx = ax - ay + byă    cy = ax + ay - bxă    dx = bx + by - ayă    dy = ax - bx + byă    ex = .5 * (cx - cy + dx + dy)ă    ey = .5 * (cx + cy - dx + dy)ă    'c = -1-depth*$100020      replaced with scaled palette valuesă    LINE (cx, cy)-(ax, ay), depth + 1ă    LINE (ax, ay)-(bx, by), depth + 1ă    LINE (bx, by)-(dx, dy), depth + 1ă    LINE (dx, dy)-(cx, cy), depth + 1ă    LINE (cx, cy)-(ex, ey), depth + 1ă    LINE (ex, ey)-(dx, dy), depth + 1ă    IF depth < 12 THENă        CALL pythTree(cx, cy, ex, ey, depth + 1)ă        CALL pythTree(ex, ey, dx, dy, depth + 1)ă    END IFăEND SUBă_______________________________________________________________________________ăEnd QB codeă ăăDavid Drake                    Pie Chart Creator              foundrysearch@mail.foundrysearc06-13-03 (  :  )       LIBERTY                125  8198     PIEPIECE.BAS'>>> Page 1 of PIEPIECE.ZIP begins here. TYPE:BINAA TLEN:5371ă'-------------------------------------------------------------ă'                  INSTRUCTIONS FOR DECODINGă'If there are multiple parts to this file, merge them into oneă'file using  COPY PART1.EXT+PART2.EXT FILENAME.EXT  Remove allă'message header and footer information (everything outside theă'">>> Page x of..." lines),  load the result into your versionă'of Basic (QBASIC, QuickBASIC, etc.) then RUN it. The originală'file will be decoded into the current directory on your disk.ă'-------------------------------------------------------------ăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"PIEPIECE.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%%%7-%*eB1Sjt2$yv%%%%%&%%%0%I%%4GM0<?;J4S?8n4JG:+/<E1s+YăU"4YF$m&EXu4KI?e3l=GCpGa1w8zjpBJv>nG5jDkn=&i<9h]Qo48K[ZZ0=?a?XM:'ăU"R8S8'l.c\],^EVkijYgN9i7xkxNi,)HBVL&I0IN%/*evqSy#IQTqa8:Nr)Ut<GgăU"Y?JgNolX#d/J]eEG1dqR:,x(IJNFuDiampM:Wg48y7D=)WYLPn?c7ieSTZ>&T/căU"']Q?bsVd%up()%9%%%%-%4eo1Sb'.mB28I%%j)%%%;%I%%?8M4.?8M424.M>.33ăU"MA0:4LS10BNf+:>oTm+vXc9uVpC=g?Os]S>4oo3+b]fI?1_E_]?l9UEhose>RZjăU"ca[yATo*#>zdKQIjsP7F/Ec*1neb_VzN/vs&dZR]\FC6lvA<ng9*L^(U(jfWU0XăU"YtojQ#LJAg?MX_0]YR9Fmqeb^^(vq>f$Z2KFn'_84v%4Jnd^rjNFYt_8gl,k6,CăU".=m,FO$#z6R']YpgWI2OSmVUpokmIsABg.-bn1nBRsTPhHNWm$b&CCJ\JWK]8kAăU"<tDrEzLluDP]]uFj>>?R^dX\As3A-4lXq)HNrsEWnB.G.6Lon#A#%eO-_'C[HfuăU"Vc;O#X?Gbk[9NPkcNn$+;W1mJArF&f<XuBaB5LnCK,Qmp=>ZZYYkKT6Fv+m:oGWăU"^$WjCjHpjbF,54*YvBb:IREH/\.2ujG3,4Xi.32ZYJaPpSF6_='l'ME^G7&KhM9ăU"2rK$-E7lY)QeML7Xn=XeA2hKJ3=R9tcE[F2ka_UAYfJX550?2';Dwmqp.<N%?UCăU"Wp;p=HhzJev_^7rC2c&jIQ28cirYhEs\JodHTK^Fs]uzg'#\Yl]2%8eeCj\mgc9ăU"8IV7IX3'??:F]Xk/P8G-I^F:T]k'_'U1-^1#;F2qDg9<rW*'6rB<SnyJCAd_p>+ăU"I5gWkOkr;bK$vic)E8Wpd\>SYou$-o)U59>52E5#_?ezUm&^<i+OdcIfY5h*C=năU"f<C</wejhgeJn;NRE)htj?-#bB],W?;E68B7cLgYPmUzgUb2CPQP01,&&f[Yu%HăU"]LYp^5dFco$Qw:EkIxo%'wfhFe]HkC>c*Xcl)-TL:$$kE?C+gTL]FA#MQt6Rv-=ăU"AE[7]*8AxTRMP=Cb%%8Vi\B1NvESFpi>?VRWgrBYn$<xh'^*fH51QHS;g4]Q]DiăU"5XWa*eLICGP-hX0V5%O:Z;et5QY\0t/HoUeU4YrmgWIMSJ^WnT\2i/]Z=s/eMHTăU"4*wB;8Ua6Kn)Zj\97g9A_fTT<7TeI?:hUN-BWkP?e]>Wk\*;<d:QQa,EIBM6P\jăU"P=.U5QP0g*IPZ59EFA&Dck-85]HM6f>]ITtofu45w9.H]kk8#yUh(Nq/9:T'YY-ăU"Eqr.04y$UeHcB+b,aKsCwxroN0WYg-c+O7tpQRfRr+fLuGr='(owh5*%pNr6L(LăU";IeFP.-Z%w3:'0g&=)$YY)Qm)#JL=b?36u0;+K,3yOpaz2BqN-3[f.\QF.*/(,TăU"0ut%5g*k&./R5a_ZA4?>4iC,[IT9KdxcO&&xY%KV8:.eZQ,jia]'<lwojXhA);OăU"1dT(9:g2Hd.fGPdEl7j?V7G-6nhHDUP&Bko=0auEQH(5Ka.\2Vez.BcRfu0_d\7ăU"fb1<iXYDe)P7bn5E?Xb>?>R5RT5cRLQ61p)ABVejJHppmDki_0ETtmh*u:ZC^RhăU"hMxUIF5?+[epp_?1Mg5JgUPj8[wVPts-Mhs9Z-FZg<O+94YIJN:hR$hso<R*'?4ăU"?^t*[$,]>VY,qt[6i>ocYjWLjPu5RZ-T\6C+quX=9F#_P7J?Q6d>NG<)GMJQ)L5ăU"b'M+rg_OeS.E><DGuOiF%ql_mznEka?:eE\-&pg0c?)5L7u.c^F,suC0IED;6i;ăU"iLC?adXLV/5BahiU[t00,cuAJclms/bt#,q0$JjTo&gqnHs\^cAXG)6:GtPn5YRăU"_HO92hn;rH*)ium8OHKXu3[;WK7ora)F7LoYHZ-weQLSY.-sex60I,X]D+AWXpdăU",:ztZHfvu-C(Z:b-Af.pip=N_-eB$^.%P\GH3NYpYP7)K%U/j^[syQ[Ym7u>sL8ăU"h<0iP-Yyo>NgfymVRql=1?x9rv_dX(P,;Qcpr_i^OW[#W*$D4N5]=6VweYV8Yo>ăU"J6\mP11tA\*#sPK;kz#Zry%U/FeU3^LOVXq^ZW=KlwNr,#wndWO%ZV)Y5+E&zw6ăU",Nv?V?nxTiN>vEgT5-5IW2X[H5XjY2ls%vP,dWe0(Ug[YIT=CA4y<5F$hh0#IxAăU"Hy[PRN?nAcbE30_iGRlkPAHF9F'$/aU$.-^3V#Pv6/eOqA-c92Yd;z]AG-W]ph.ăU"<,([Lu:LU0VS+eQ9F1g/t-uvYYxv\bdGK:p<83wYSGWTIv&LW>'b)a[[E<;a[DlăU"^gW'gSp$i*GgKk0>JoS6Z+*S-kMJg_f<*uRw9JZU=I4t4\9&=$v^=v\=09qkDH)ăU"=h2e3aH/K?/-W4:Yroind8C22%(;,b:J53^x_Y>9mcBOG%V7TFxVMt:/cfY*l>3ăU"'P^:C$\y,s7F0$mGeB8*r-YN3BE8Xk2?nOG,3mNb7OX>Aj-N-)hk04jsnK);BCaăU"cZ^OZ7<a/v/.6;((UPfnBb$_jNrC2uc(8G,40nn?*>$3m,?O;o.l3*ThQ:&q]f8ăU"p*6osb/YxRkaB3m>h^6)YjWn0>oh[[Yce+L1R9ykw_5+kw#5+Myw<Dqcs)*Ie^DăU"BArvfAY;q6DFItwgk=K135),T;Vc0:._F17\nw_-sV5JFA,)rW789<eah9%<-nwăU"yepmd5<9MX&qw7fJkgj.NAQukHYQ2gL$2TDs)+H$di0Y0WE\kv,4?+K.td;RwsHăU"61>_IZ?LKy,12[%uo+E?stB+MgED/$1n-3#_ugDobO3sr&9T9P><*K9rTQ1utJrăU"juo[y&bNQM,^*:&]eIk.bT3R&A094o]?;=aF/6?:(=ZlAGp/.5Ab$OM_7<qGo&<ăU"<J,oH9I**#dOzA2LMLvs:q9Y$p'9djw7H<0T2B3:S&L9LKL/-oQc23i1I.Slg*HăU"7=Epb+&yWNeavSSKSA&&GqLBnLHRtc*Cb(drTv5o%T;^X/_rZ*Q$u$$FDZEsp=GăU"be;=AR*92=[FYP;<0sq>+98<)aC#pe^Fbabm\).r/o>*C?2#\.U.;#BVc$BX6QjăU"mkE#%]J'9CZo=*40Du<Y.XZPAZW?mhq7r.bd'bgd[4-k1$Q2060V=GtM#.cDpQSăU"*j=FV9;51L<cK,I^0Ve+TGB%1+1No*EEbNi?Oo+36YQI*g(q<$i9gj;LJHc4BZYăU"%p8M'*/b12S/P(it.?,EkGcNAe<HW/ZUPVfBW/Vg/:%PPU>zT\df+b9RgH4:Cu$ăU"-c6B(DMBTm4+b)et7OcMh\.OcMc>*u-#D/Z_IJcckSXQjp1c)u&m/E(r&G2OU=iăU"iQxrT>TE-+BQhDRM)7r21-Y(kd3#:hoQeLi/O'N5-8c)1#\mZSZKb50/,SV<(<[ăU"/JgKE2A.W4\SC-jYPQ#+KUCWLFG=,1]0qF(E9>0TDn?76,o8C4=*#d0m*[$<[rYăU"t=2Q>1N?6[/5$pRf[/]5n1H,g/#fD?5Wbbk(J0twME9ueC4]=d;k9oeu8[Nd58\ăU"4o*F/P8kO6hILUAH(FW)g#PVRxs9dL7j;)krc5w0w-E7W)B,go*ta8&V6J$1JBZăU"^Q4Vk,+X$,hoF^f_qki2Bh/C=4j^05Go++<lQSfHDtJ<RlZTfrD>J<b0HSf*D>JăU"<r#c0T#PueR<rYj-TjcMf2$BHW$qlR%*%jU1D%/N(ja*QyAUNG*dx8)z2?7yoDTăU"EQu1r^Qj>1%ocZ7#;0m#J;8M\?*j\tSnv49$M=?.JjkL6JWvv9EM8?DSik#RG_3ăU"zrk=LwTLY9(RDoIzzP-LyvS(B?y>..c\l&siN,0-+zSzfL9_o(B?Qd19DHU-_=kăU").VjL_x)l+Y&sYkz<G.*E)#UK.k/9VU:MEd\od_5/mYjN'PRch;o;O*5L2,9$^AăU">?T\B4**Pta]u*r#rf<YGk+1ek\qB]t3jxE0#sF/;ZSaLG\OtH2?RBO%[%,<P:AăU"YP$olx4Y/qmn*98^%q$.iK%DV3aonT.tb/lcWRNsI^zVGGr)-o2S\;'E2(2yuQpăU"daC/Ah+kdjXc<e'evNCkK-HgJ/D3vW5^Xm>p1[)ZAi:#1nnqbl[2jvq>wU08:.dăU"c<sNY$#p08W>37A/:<i9#l=#5Ob0e4',c7>hUmaiX'XS(Bju,pC2^V:,\Q&G0hTăU"CX5zr1T0CsL-Nmdn\Zx,.v2#?^XI7*84kulF=U'=K#VK+siuzU15qTXY>hg+^-yăU"\3p_B'$q7okeM/UR:3val:?^%pJ/A=HH4n6C(NwCdcP5Mp_pip>lk-dQ(L:S#s-ăU"t(EJ=sOW-:d;AVo.Z$L4NAt3=rTa5s.^4Q?QRj>9#FRU9,i;O.H=VM6BG4hEBDIăU"s&HOYoRBieM-G]SZ$-<Ba]5W4Z2SaOW$7ik(3GsTUa&;B?TZ2AV-hV+W6C9B1ZGăU"=,Fa0<mjLZHf]ia3(EE=SU4_YH?Fa((mTP0HfQiuEGLcV&54\P%BEiK2moX&HhAăU"T<mGRf$5OT<P,jFp.3G\P+TanO<m;d#pG\2EG23l(E='Tu_Y\:ZG\3PG\-Gd8.>ăU"Kp3>;ZYdRFTS3,5X:+>K&b>K0HaW.x)$SMsl?e%/[6fcjr$6B[4VI6,S7NzCX[4ăU"R?G_+WXZf/n2nd9*fK^KGrQ^G(odX8'?h)]uE#O^NH]i_(wSfw8$pYE\W8QU4\JăU"<(#h\rgR?v*1#dN-hd$-=r-nZ(c5\<-rC*r6AOTAXrAJTn+rAN\TarA3LTKr6APăU"T'RrMITW?iI'1<i7g%8rmR(;znwgqzOSpO[Mg_JsVkS3K?rI]&rq8A)PUS6pQ\)ăU"9mOvqkK:2A2Xz(G0Fv7h:Vmn%'+Y8eMoubq%BFN<E>'zKSsD0L#f6<rMx:bL/]aăU"AtsN?5^3ZJsd%L\W6Z^-jjim5^BjDFFL.flA+^0]wmoHjcFgBbE*(Ja2t5u_wOcăU"rPg:2QnX9$_m,;D)q,-XF(?TY&k\CV9<RhfCw13%m*e#6Wt8n]NiGd#Q$8(XIPwăU"i'hG3rwwHq&=K3I6vA]FU?yMA)Oal9NTUx<s[Mc[a*\#l:$U,v.^Ss.d#?g.\yVăU"c7MdOG]9/vCo*M$i0-g=0ckQ*Y'^R,=bTN9,:0FWW[E4f[JU5<oEuSe:-uRV-ROăU"$J5:l-RL-L^R7B2I8B+QJ_;vBF>qjfLrj,18<]kGjLlj^$W[0/f[F5k<gESuU:-ăU"2?V-2$lJ_9-W2L-HVR7lIb8l+Ji_<vFd#qjP:rj08D<mkj0PljdSW[8fC[N5<rwăU"ESuu:-rVc-r$Jr_:-rGL-*RJ70I870+J;);vR=:q*IrG*)8<ePk*I4lTG5k<\-SăU"3?R7#2>v<a5g/#\P<\l7U#:-\3t7j1;q<KpET35<>bf-ra+L[b;u<+8e<8\/InDăU"<e^^W\DKeH=zVdAP51$De^\g$UPFbbZFA14q9WL-,Rpd6w)+7];w\(eZ>HeWby1ăU"VzajPPs%apsnAY:#)N,jINrL$c8otRPtsI2&48Tu#E[5Nsippj.)T0h#seW\i)CăU"FA6:R;ZidkKi*o(sNuL2l5)0Tu9)Yn1=zaB=9eM3t%lRSJ>g?+:pUX0*i4OXp=VăU"PY8K>\W]/_t+*0<G'Tbs'.(6?9j-qFGW4m;:5><w[b_Hd%I?j/HQ<otnHf[(J2$ăU"38pmaXtPs.N\w)O?sc9KINOpj;>%ksnNR%OO]MJ06+OsV-jxxuK\/t0cotNPb;7ăU"2O04v*Z^yO<#Hi26)I&O'=:pUFRY778/n9XjPJei=)Y4mIoaxJ?:%_ca]*i3tO#ăU"b,wyaFU<C-kT&l;\*\mL,t-]0Mn;FnvXpPWW+bahyevKHJ$[7Nnd8Jgt5878&VmăU"A5h*n]oHQPkOKtl_*1ACJu6C33WWYY8ftxParAwVxES*LjKnva5->k-c:Pc9V=7ăU"haK#*qlBfoz]WJaHY,j>5k[8gKwe)xYb+RgWQw7zcY1fmoIlaDaj2qp&wJ5j/9SăU"7tPbhdQN[N0JkQu:B]W^DFDTI3PqB3jq\^jqom,S>,eSzYO6ktlThNYH_/4RttCăU"wxJFAN=-#j$?:s.Ub<5zQBOlR3E5=5t*oNAxaO;Qgu$/K\$NH7xN;G*N1B/.G-BăU"j?DNQgo(Z\Ssbn)$uBy&FyPd6d-rSMK_9&4lZ2uN4cY.cXSjhJFETdfS3i428x>ăU"y3b9dt#=1=Ein-84gONX$Yw&Lx2v8\fDLdgL,<ZtD<5I#S:a_t$m+TIW,0m7DJBăU")L+sY;2[4L.Mo(x_#Df)cL-ULcpn+?x(D)[_1\tc3P.fU;Mx79;,7Y+6S92sM>,ăU".K+;REjV<?:Q)(rtlWkc%e9.<q]'CbBJY)]u\0;*??TjeGTBPO'Zc-kEDSH7Iq]ăU"Q0d83'r/2:;TIg3oN<g?(u6iH'ZqFwYL*/;#qhlo/#OEOC%8=c77+hq*r1Oh;a.ăU",aCr(3y$6Bi&xE5y]<YH(Q?T(Hz_<(c.mf&35dASq5)q#;jrJoxU%m:=fN:R+C*ăU"e/-Uf;][kCoZqp3S7-UfbJMfoy=CPCchG_ZX,MlTu%p&'9%%9%%[%-%*+e1SjMtăU"$yv%%%%%%&%%0%%%%%%%%%%%%E%%%%%%%L%4G0M<?;4LS?84%up&'%9%9%%%%-%ăU"74e1S-b'mB&28%%)j)%%%;%%%%%%%%%%%E%7%%I%I%%?8M4.?8M424.M>.33MA0ăU":4LS10B%up*+%%%%%%'%'%&L%%%&69%%%%%2ăEND SUBăCLOSE:IF S=222AND B&=5371THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\5371,219);:END SUBă'>>> Page 1 of PIEPIECE.ZIP ends here. Last page. TCHK:222ăAntoni Gaul                    Sitting Budda Fractal          agual@eic.ictnet.es            06-14-02 (  :  )       Qbasic, QB, PDS        95   3216     BUDABROT.BAS'Buddhabrot by Antoni Gual 6/2003 agual@eic.ictnet.esBă'------------------------------------------------------------------------------ă'This different rendering of the Mandelbrot Set, created by Melinda Greenă' reminds the shape of the classic sculpture of the sitting Buddha.ă'-----------------------------------------------------------------------------ă'The number of calculations needed to obtain this shape is much bigger thană' for classic mandelbrot set.The complete drawing can take hoursă'Good news is you can divide time needed by 5ă' if you load qb with ffix library, a patch by V1ctor for the QB slow flotingă' point operations. You can find ffix in my site among many others.ă'    www.geocities.com/antonigual/qbasic   ă'ă' You must uncomment the two lines invokking ffix,then call qb with:ă'  c:\qbpath\qb budabrot.bas /lc:\qbpath\ffixă'-----------------------------------------------------------------------------ă'Classic Mandelbrot is drawn by plotting the points in the complex plane whereă'the Mandelbrot formula leads to a convergent series.ă'ă'The BuddhaBrot is drawing by cumulating all intermediate points of theă'diverting Mandelbrot series.ă'----------------------------------------------------------------------------ă'Two sites about Mandelbrot and its variants:ă'http://mandelbrot.dazibao.free.fr/                     'Mandelbrot Set in QB  ă'http://www.superliminal.com/fractals/bbrot/bbrot.htm   'Melinda Green's siteă'ă'Have Fun!...E-mail me yor improvements on this program..ă'------------------------------------------------------------------------------ă'If you are using ffix, uncomment the next two lines to boost speed x 5ă''DECLARE SUB ffixă''ffixăăSCREEN 13ăă'set palette made of shades of greenăOUT &H3C8, 0ăFOR c = 0 TO 254ă    temp = c / 4ă    OUT &H3C9, 0ă    OUT &H3C9, tempă    OUT &H3C9, 0ăNEXTăă'plus awhite color for the time displayăOUT &H3C9, 63ăOUT &H3C9, 63ăOUT &H3C9, 63ăCOLOR 255ăăCLSăă'If you increase niter you will have a crisper but slower renderingăCONST niter = 300ăă'set up arrays to save intermediate pointsăDIM real(niter)ăDIM imag(niter)ăt! = TIMERăăDOă  'seed the mandelbrot series with random points of complex planeă  x = 4 * RND - 2ă  y = 4 * RND - 2ă  im = 0: re = 0: re2 = 0: im2 = 0ă  diverts% = 0ă 'iterate the mandelbrot formulaă FOR iter% = 0 TO niteră  im = 2 * re * im + xă  re = re2 - im2 + yă  'Save the intermediate points of the series to arraysă  'IF re > 1E+21 THEN EXIT FORă  'IF im > 1E+21 THEN EXIT FORă  real(iter%) = reă  imag(iter%) = imă  im2 = im * imă  re2 = re * reă  'If the seed point leads to a diverting series, we are interestedă  IF re2 + im2 > 4 THEN diverts% = 1: EXIT FORă NEXTă   ă  'Plot to screen the points of the DIVERGENT seriesă  IF diverts% THENă    FOR it% = 0 TO iter%ă    xs% = CINT(imag(it%) * 80) + 160ă    ys% = CINT(real(it%) * 80) + 120ă    ă    pp% = POINT(xs%, ys%)ă    IF pp% < 255 THEN PSET (xs%, ys%), pp% + 1ă    NEXTă    'To display rendering time, not really neededă    np% = (np% + 1) AND &HFFă    IF np% = 0 THEN LOCATE , 1: PRINT USING "####.#"; TIMER - t!;ă   END IFăLOOP UNTIL LEN(INKEY$)ăăăDave Navarro, Jr               Display All Bitmaps in a Folderdave@basicguru.com             06-14-03 (  :  )       PBDLL                  264  17322    SLIDE.BAS   '>>> Page 1 of SLIDE.ZIP begins here. TYPE:BINAA TLEN:12223ă'-------------------------------------------------------------ă'                  INSTRUCTIONS FOR DECODINGă'If there are multiple parts to this file, merge them into oneă'file using  COPY PART1.EXT+PART2.EXT FILENAME.EXT  Remove allă'message header and footer information (everything outside theă'">>> Page x of..." lines),  load the result into your versionă'of Basic (QBASIC, QuickBASIC, etc.) then RUN it. The originală'file will be decoded into the current directory on your disk.ă'-------------------------------------------------------------ăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"SLIDE.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%'%#-%sMSiSY2,7*#L#%%3p%%%0%%%%nx%tzwh%jSnsLhs'<,>\[7iw-ăU"oxn05Y)Cn0PX-6(R/^yE9(i/YlS<G=TT^0)?T05msoXwj3V?th#F(J*o[^j#Z+NăU"Rgk6]W^X]tZhwRQ$T>-fQDO1KQQ3tLwS^w(Yf'+r:4,rqXZZ9ba)2;FZH6=AdqvăU":IS[?dRI2R';eJ>\e*(vb%>1SS^S/v)#al*p-YoT2+02[$bu),*(mRHu^=e?4N/ăU"ey/kU=NhnE%-\boFtwF4>av(Edjrf*ZuulwuK0BT*t8uG2Ai+p)ZjpH;2^bi-+tăU"$X)F_>JA1[bY(O<A%^+eg'0,^MHnt3sJU\WR7$)_1KOG2VJ(:e7bE)Lec$=/]+WăU"u+Xbr#)=)UmASiuOG;wk$11NAokCz?r]Bh&8h3V3UY6]Om2<D*'OCo:C)*]%C:EăU"#%%h6/+d&Q2/kO;d4GxT$x#o=61_om#u1*.Qu$c.R3%ljSYPDoU,<+LW*CGpp+aăU"7G+pP\;?y*JI^u5LZ_-X(3.0Tu^OxV.*c4,(ZsgLYKuhl>sk;&UJp?TZ/G1zbM+ăU"$Nv*ePNJ,Jif*V?iRt_n%qlJCxxYr[J_Q=IESw\d>XqgbSt[d^1-pIM*V\DsxYwăU"nLw.=&37Z*C:Cze%w>evF:s>4_f*I#[5%KjDDR.KjoRn%7gW\sY?6P_Kl9TZACOăU"jYmoaHPD638HA;]8%L#5G9,h&9x9tC=0_dM<Q-(6KL$F%FD<si&V8OUH&qdaCj[ăU"GUg?p1RLTub]u<ff)equ>mYc[[+SO0KLul&sWh2t7KYE)tO[w/0khukZA4CGA#SăU"OVWtTIZV*Qo?J9fd028exl2(b_,zS)5^#nI%CQ$N>&V)aW0&tO$F)=kY5KX;ZT$ăU",B:'H^:RYz*Nn5jhjZ?C0UOTll>SrZNsULKzp_L>.B:re)B;YA6uTpmI)S-P9P9ăU"3;9aE3;8UGalu.LADu>x&sUWmcRRvCkVT7[fr_Ej\V.a5n-*ngZf-6h?iN&Z9_WăU"1-8UZ:W?77gw4QrI2=4<YzQi+ph/SRaJpTsRgt0=n/n$Ww..jUaP9qE0gapjgL;ăU"m4S5qU<;$d/[p;LH7hS/N43.q^w*SefkIEjL]?>K1J#zee-U'-\qU:/tg&3XbnhăU"m+n6rnG=fjnc+)xU%=9yXYmL]_LIFii2go1%?&51]F(P8Y#o#O+V+?<(uGx=E7zăU"qqAXT[<i&>64Q*(KrQkhOeIki_9s037xpW&QfX#>JODO+4.XV+up=5TsUh7\*)căU":TcKU-(dWw?+Tvh=jVi,(9]sF<DX&tkzAARgpPO2<?u.^G\MCg3QJ<.i1VkX#DBăU"'?GH_b)+W>/Y[IRhF(\Q>P(cdg#am0q:GF'O[ZtSeB\>]R,fMgOsk_Q7$kh6r,ZăU"+&7NhqaLcs>U,d)Re*gQG=u1+#m:Qkb[T*Z86t%eJPNFYyU-c^A'Jh6[bA]+E\=ăU"1+,v:\[u.wM.:NR#jy#)EKYI$1nBg^dc\A$bQ\aTUPbQbm15dzO7(=fN4Ds-c[:ăU"ANvZYJK/\7Z=Fk5B.CKh^R,HL83b=jM,7N5z784^8Z'I-\[Z9WfOx1j:PTZ&9r3ăU"QmD,G?^b-vCz9OT']Dswkh/Klb+g_BG;oJ))YiC1fTY;w.xx'p_M*km?8S%kDHTăU"dK2<2q5i>&F_ngb,'7vbQr38BM3eYNi)1O\(2iq>2MI4l\.&(xtc>N_;1%,LB,7ăU"d/h6ckSgW:taRM9%Hkc)k-J6Mt,PTYs%Hxn.vK&ooUB^,Y^FRir+WPL;r34W1o,ăU"3IOJWZ__qd6Cpa(>MF=ID^HyoD<8=3-Gx(Z%FGvzZZ1'Hl.Z#hkOD_)rR:phjt%ăU"$Su&-#Q'J'amq5+/'-o3CV+<s\H.ND_(DI,Tl^(sVS+)iUmMor<EH2/](4/+%JeăU"O&oLm(/S0<FZSlRN%?[&iNI<2lqR$4_Xn?*(h*hSRTSYZutf]aMm2?B$0'[\Ni$ăU"PvgBII#W98b6j9kgopb-,6kE+hOIzvJ[=N>=+#09Ko]Fk&$:[%1Nips3bUb5-LZăU"KkJ*Couq%AzAt]hd[QtQSt:l7pk,z38c+=m5z*cGsO$15_KsuNIGaleOy?kbe)LăU".o$4GR;<H3Jf>/erMR-d3W5r'lc]#?4&GEK]]VpM(Stz%3m^?\j5e']PQr=tnCcăU"eZiFzTc/OZ*Rm5)=(BPPSmNnKbuoVjN>Z6RVKAML]v2'q6S&WYTNm%S:c^AoK-WăU"8/rphKKzsHkdJx0V)kxNRDg;G<DS9AU/uh:hF'l?Zh$JduN=c\97r_v=Y.X+cgTăU"M2qZ7h^gdeM5I9j=]J<9?j>n\>)^2,cuqu:K7ke1r_F$3kF&z]eR]IYrKW$-V5<ăU"bu=DXUXp7syo\8R#csfdfBWHWJKwHp^^<]e2Y.=$,xT-?OMwJ*5OIC<:]rQnHW;ăU")r<<H'uU\wA,?oXa-wu-<&/>/nllt$k4K3HoJHncCtv-osCoF)+]#nY4_\uB9SOăU"%w-#e(C4A[QvCavlM53coUtsvwoJgkLi#B7#Zw&ftvY+T[6[j/(=<;HGL63oY/PăU"-_#Td[?B6jim2g=h&rjTO;[DRho4aL2a?B$Ctql-SJhm=:=q6,Yu14^_7n<#7PNăU"/QJklZ7owV33/;XIpS[yVHVjxm$;yCj$FGWZyiKA&N5zj&wuZk[Y(hfn>+ci9N/ăU"62MV^R?as^/g7,LyAd29JI[)h\ttTOGnPv'o2_1g+N0X_C5V'-s-6hG^i,fPK2eăU"d57r#A+KBMABxa3v0\M8udTRYm/p[,Dn2PIF5#Iv1szw?A;%^;wC$hSEdRJ-NpsăU"u^'YbfCG:CTVii6K<bG8GvQf^3clj:%?DFC1y%5P-MJSzD2o,M^'B<eQ/S*D7c2ăU"_b=1Wb'W*P[Ny'8Vcg3x;w0fHEtF*+WHuDv1fM:*4=^iSJs/,Nbt#VDs7]cX)%1ăU"ljYF>fAPGPwGEiPHAKCb#D+#xH1:SkdCG'GX^6csJ_tr>]p(tlGiqH(8:?^2D7HăU"p1es2LqD2G-<N,(;Ju.Mi0:.::wbC,HoY*??8/jg1)IJ;e2Ro^hf)f%WgEob-_lăU"C/Is+05IB/+lVdnZ\zAlU49%SZN,U5<1pbG?=R3'Bgu1rAR_xV=pptI8>sI(AftăU"^\;g>mv#lTp$l(I)ccWWelz:h0AO9^hWMSM]\<Qf'q^-,TlaXMhdYck]^GDyJaFăU"j/xw1lklK$,qvI1qn='Ts7W-;H)\GrKtwPUdbOLJ?fkvrH51.fc\p,%Lp;YPKdAăU"D>Z&(csL59FeQ1b6'hi<zac#Dv+YKe)FklY]1O>^u]P1d[\lg'f,,hNInt)vh;?ăU"0R+WrFcV7Gy3$RYBD:23&$0[f4.v8V\6B;]7]U5/CBmCpb4.RqQa+ir(LQA\x,xăU"KcN6+seJ4\?oSdEq_*;\&&jX_.lTVjG4gUkvr4DvqnWs;^lt4jJLY[jY1asrUhdăU"]K2N&Yd/^a>Ye=+(bAu<G=iBkT_VLdKlki/W&HdDcfFTHA3E)8x^vk)LIp[eZX5ăU"GJh\lOS+WaP75k\pcCQ5obM-9[AxXtjDp%pfT[]=oX<QxtPFD?X,#Vsrb=\<Z[YăU"Q=,9%8#heB8h2t_<[d;se-=GNM0QUxMi[>3nBnA7-gLC?H8RR38U?<ru61:y'h3ăU"q^:6N#RU+\Ez=w<Jy1alP6jW<N?_tW>qw=79),cm)b^xO+</=mY]$21U7p9eenCăU"Z<McCZAHDa6?H<51OK\p><i/;0*7*a3i%FpKP'cuR:/Uv^Z258XElnPK'*L9m1?ăU"xMk3:?M\c32CGGJYJ-,]_&1hA)2'N7Za:/xh_reCtg6O<(.-65:;v)zq7#K?az[ăU"8HJnU;(&?q>BqSabb$Hm9Wth+(Zp_lNT_40#S8B>ql<b66#<HmTl+0sl$TslGBXăU"Kd(rDx>KUsvbcR5Wfe:[dw.nzKyi3d_61PqGjATFmw-KHYhZP/:-I+(NmY.u.dXăU"r#LD8yx.sW,%VT#/+\b*2(PkYQIx&V-vf&3'?#g4z>lZ<ty8dftUlP,gv+2oL7KăU"LN)4Eb'+yNU?:aUVoPvtCL)Xp[7uSOXPK<ju9jTIQ?Tjd73In+tY6<9Z'kES&?2ăU"pnnW6&2dtI8+PpN<>dTp240ovconrt:XPnPKaM9:91r7;iBW<FBOIk\;I$SHh^oăU"c(5fD.J:X8^]sa7SZEJuncEVUUG*MxrtMlWRzJ3RapYgtFBF.]SoRJqUhx<J+8măU"x>pAA%AGadPgJ5W:YeorJ>Q:l,-oL3.=buoXL0g,>:rv8SvE1rG/HUg^td:Sgo0ăU"3X=HY)LgJCxd-elp8vvX2HX:kmxQTARfXNVgPl#Zh\)XcYMH1/<G/;0WZm&CiYaăU"Q-$%y-%q/nul'IuY<TgK+$&VF5SbJO_JgHiNng3>t#RJHN0ufWTeq<W:6]oAahSăU"n*x6$i5E;oRf]7/+LvAOX'#+vwGkpgv4B5;9.d:YM6ru9'1(HwqdLCb+i/*K:UCăU"g#oWB/jsZa^pdIUdknOS/np*yUBQ[^gn*iE5(-w2^'H;D3v*T>iJb6uC&,+2ZRGăU"2+?Ca,yT.ZQyYTr\Q_.w*]TdZ=a+uNwT*7mnT5Nu0Uie^J,/p-=T?du;I?VJ#6ZăU"BDR886:#l\q\Cn4'u+Fmc7#-?&+*<KmlrNK.3AKW4kxYQ\TdPZxT\BruI?jX^[hăU"EhKkAW_FI3IRFyrBB*:V?)Vd8<C$o72%:;MX5v#o#Zq_p'BNW(1p-Tn,+63x^B1ăU"9#hW%s::%eZmp8tb],::mLtP)S86hg*B;s&xlK]d,^3-00\9jRMAmBH]cu7b7#RăU"gtNMd92^ueWLx2%r]l:tjA]1vsS0g?DgP>XMODOR0V9>8=tiRv0;BP:uO'AD5>[ăU"DEPDX3A2jg,[W,/TS-(6#y,:lHBjQm1vMIP44)&K5TqxiY;\;jM'^ryY$mjUvFAăU"GnQK>EEv&Dnb+V\$NV0AYy;VSW$+&*,B5^M/]/6im6+n-3;'XuTUM1^P<s^03tgăU"3;R+M[&bC5&KJ7k9O<P*mZx&bF+qQ7(9dMsj[cpDSAD:tNOzKHyH<1I%<Hq7z.WăU"DS_4I%o(dfin=E*][gQVsrW)CZ#ALqQzHS'))_YVx1)[V8%-6<-BPg-(s:\+?QdăU"3#Y+CfhWsnVF^lK%v.K<^PRWI)\V'%Iha2heZaL90q2wntsc[P=;kDw)5)a%8q6ăU"sFCY>joDyVm(YGI=Yf.N-(dwoO[SFe^h#NMF8qZ&Ip;wHkHK;'u<.x#LeKitp3qăU"4:7q5BnjO6CC/,%yvSLUy'<Q#6F/Q;AcRGq-fkLYL1RSmm%<WB$u-y*U%eg9wvAăU"aGa9<2Fy6TINR0=+='k-AbLT+R'JCAYFsLqsJn>NpESMPC].l+xibWFbGRu1?+FăU"5\[0w)?&X>K8dq3wDK&U8UuL0kYuMM[L,#/v53oN6v.'-%YHpa3<.B[A3E;]1R[ăU"'2az]s%VaL.C.3-:2dDUDT+RgF&c&D$a2zlQ?skhKsh)cflK5(Ggs;j^YXY_o6văU"IgaF4&cHArV]DNE0%BnK70rT?DYW;olal3jlu%6u+_j#r6hbwZK_GgU5p#e=62CăU"'P54sWjm&8TnDA%wy3JY,J5W/If2hC5.4HGZue8XUATYtwN667N(u3e0dm-7EshăU"?;IUEf^fle9+IuevlT\Fo:8Fu;[tRd^31Gslu[qk<LdJ2^aXeR/+*.]C,?D&'&OăU"nK89A#L7,ju#o2VRX+sl>M:1NXN=e&'u8_P/5fV7aZR2QAyQnS7QWH<<P02aegiăU"4f-9m]N'dq,w(=TCdIC7I)d]QqM+gOb_dy%%I92qoB(46L]SGGdviddCtXndg?KăU"+DsW$a;PN#bjDz><XJh1&gMgkvR3J4bmg%Tzw$[0Fm9%IXV<o,KfB7<A9IR\h%$ăU"=:'m(o&=*uHHq#%ywC*)&Ty/[[bTTP[:[w*Gp5t4N8SU^-i#89ei.KAw]o8Ze%QăU"S4n2;QDGUotoDMM]&_#e.jS[gIooZW0O_?7$7^KS[^tYB^%<2TZ-ART1tcTfK-găU"IWOh(I.*430_Wh#,%1aftxjEdh*M6FmiPiACDi4qI4e]dkM#=UDkY#(y5E0nW[AăU">KYlGIcESkkUmK=oY[Jj)wL)$)$S%X2BZ80J2ff?Av9_>4SH=p<Tu9A)izsjp:6ăU"*1C3;uirY%9T7CrUi[fh\EL':wW9A;DF1UzinPK&])p#ENx+mPyZ_[dsl;s5HD5ăU"'wYs5<P#--ttgFa)sh]r-W^'SSbO(T4P=[e6DUjr^Jw5>BUOTN^25e?ZHdU5(J9ăU"f(vWcFARu8Rbn]UHqGpo<5m2ic[._,OoDzNp;c-'w8*073fkJ:\U(y^A_YHoa*^ăU",#r?P<U1'1Gc'6t9fFq:O_N/K]+,fK;FJOo(F78<oO%hWOWafXnKn9r]v?)XEi3ăU"<w/T[V&QhN.aVJC?/w9gT>,pc%]VB=VG/*$,k/UaGC82^.3T2X_xqd^9TMOW%D>ăU"K[D'NEA3on[Yuc++TBBG)r&fHvjMrzD)FevCm]BQIR(k[=8#BJj)&w82eq6UCFKăU"'SJ7Y)hl?_zeF=G_^\Y)q*BV,oa.Y.,?=4V3>?Gh05V$kiV,EK:+QM+:<(s#Uj+ăU"zSSt:kPP=Lg,1:s/CRRxL9j#w$jNmP(R>1WsMT80%??pUUB3x5U%x;&nejTf44săU"5bB)Ydy?D-,jk>s:Zo<CuB2QWD-9ho:iR?I2R0AK$Zd9r9,63o>PtYyC&?>m[q:ăU"%_5M35vq.tLms-1-o&E^6WRZfQLlr?3jB&QoKTud0-PCCeT%1]gt6,jjSU;5kaJăU"z'B1/0tRo_wC_-]GFIPaGT0M:fL%O(=I5NstPGe>G)1/MhMGM^T6Hu^r&k[<3r;ăU"6yq&Yv1aY]dmTPlWYv^/azcQlfhAJBh5)57L$>jpLX0arLANv+u$Nd,.hN69?4ZăU";5,ane*0)%,YGEZeFa-uw.qSrto^_<qacFH6<W/3&f6uAUd<uvZCipBTE'0l+a;ăU"32#AFT8hVV#Twm/JGB,DG6WGGs/.:IYtYajvv=^%4O#2+sIRe37VrLb9i3b4(J?ăU"VB>F7:dn5gcPaFFBxRC3jATa3;YC:^U_X4PBE#3m0Dz0BaSIr1>+EX=DTTZw45=ăU"(/\Km)Ku\oa5\=j1ra)QkAARj?$*D74.C;:[-%.%u$Sp6paIYK$nuZ,M1'QI-B3ăU"_c;#qAd^W')Ue?-D5cx9&luUUov2_?rYGx$FGafadN_17I-acb:hqs4HAfZFha?ăU"yL;$*',jN$1>sKFhdfpL%e^%QY*$Xmz7zxnVb[S^5PD_'C:e#N8Jh?.4:de'68VăU"nUyaysFls\FtQGb=>/?6q(qlZY[HaqY%fTptX+b,grU\'.V(s':F=#ilJ-<q:u=ăU"Cwk:F)LnPxm07o2:V^?+&=fKY<rn#*AKutymnhpXZo'nxh<2ZxgP*5gM[8TR%2năU"-\,3?5m9aed0Tm7st^H;.dT?m7apAVxwTcaop]No;:ssKokhp\t,qzdoeZRlu<iăU",CCD6,.(/sJ\X>D9&NQ+9U&BbsM=WVUy89HvW?V2vuPjB-ds:_X1pEP2b=X0?fkăU"lfZ(G4/C%.j9uuVO.?Am4ed7(uMKFIqsYA[$6H<Fo/JQM3ANvdn6<Hr4CoBQMggăU"1tKp#ZXPZ$c$-ljl'x/K*\,=D-+-c8D.IM)#SmKH+qrp7Cn6H75\^:BFZ*r'\pdăU"f:P+6I#=)\5?qMF]AYo[=5E/vG__c/4(r89E]OhcGSU*tL.rQE(R:E.%5'0]nsgăU"cdAY&y^-K]xiPtLwZ)y8'Zh;RY0<$8)F0DcoPI/s5XQkcA/I2'd1]ZH8$SopsY&ăU"kjKM>R\[D_(m+wLb[l9?KJ^JG2+]I#AE4]G2Fg\/uPM(2wyK3>d^L,T^r?eeY/căU";4Q3n&,?FGF\3-OM6$.Tz'7G.pEG7udC.<%A#7mPT7R<iHEq4WyW#P?7Fk$0CcnăU"[(IBgw[Ka'1a;)vw\,^np5L)A+wInaBkKpP:2?J('3UF838d]'nLvc;#.:IWe(KăU"5+dd\%c<'&Xmw5l'$S,biK;+61#;GkBjCl^5J4qxZUSees=S[_Ht]8J]Q\m^7F<ăU"Q+-40NBbqugYloaYDI)R[$h>QdAA;<3-SoDjoQk/l=<0ZBB9/9ge5RFN7e%+\E^ăU"Ac3gKuaKVJ]K;OB6f0COm$Y^-)f4d;_/<4C(Y?Dt1=Dq&pWAC_6HfhkLN&311Q^ăU"mNaX<>C#xj,VZax'*6yS&b:wiRAKY/Q>#Ou:M%i=7hM\trnUK*ZA]K++9.3i,YLăU"r3cs].WqNDf+P')0m<[ES:MZjh=7tm^B6&+P>+8bgSw(nK'vBi^tDE;gd\MAdA$ăU"Ji5Dze]&lX\tSb/3%(sJMJT.S2k/0-AhC:>(9,kvLpC8Ca<>z0Jni#garvv9N'ZăU"(aajiE1c7X93?RW#n*jpE345w3hWJ$\I8BE/\tj3afm0K>fA>Ytpn?qnM?M-8TpăU"soFjf(L,RL.SkQC$YCy=f5_f&KH4+ZilkkA\eL:7EtQ_a\8p^=WFd?DepFW\kkDăU"Us[pO.JG(9dWgub[eoY.j81/Q[K+I*\1;BI1dFGMD?_a60Ww*u.*CA'd#vo==2*ăU"z]3)i8Gpc1=Evg?Q'rUci$N0fSp.JIh93/3xS]$3jeD(_%U,<wljh4#x^GlM5OFăU"9O69hEVtc8Xl:-w0+2D*kL$WTg&$eq(fMhqJS2r/X__e2MOsSY$Kqfs7VmBSfD'ăU"XTgLFFaS1?=Ffr)vba?k]E$9idGP[j/eF0['3tkEDVpf*/PMC:7Tc\[-0^ZQY19ăU"pH]VWSl$#ICr\;-kWKVO.mo-4dCSg.E*[e>g09tkZtvYnx%%L#w'd8#_&:T\gylăU"B+AicP0Pbx\>)6'Ik\Ge8)=VlJaEh/=2Z]Y?k=3QkrG/5Ve73da\tuC92vtc)+iăU"2g:&\*A>eAAcFey7Ku;[0IykoH=UiX<;&G#ICd\xgJ9<X:'/3i=ZIVdQ%=+<k9lăU"m=<UJkck['2-E,hfjp\i$;J3b54h*tlU(7JFy0n+U*vpFr;lg;f>[Mg?45Q2XPDăU"o3I\SwNZFBO$usqd&d\%ZQd*-153:_U6$;/,eg0ye,5w3L9HDlFvE3RG]&=pURGăU"5?jEFxS0I.tAgSV+Gsmh7+p57oPFOIpxWhMy%%E<K[%bl=[iG.N8P&[Rpta,/CaăU"kSfG;sRImQ$&n+:(FlOfN6Y=QV<1Uk,%<>9kBXQLrpo8i29?%J04dQ*nsJWnb5HăU"YZB7L*vXdMth1PXsi7_C.L?4m^0M0\:ZBf2ofBRBn$%/HyS;O;NfSjWM42=OedKăU"G*063kmBB>LZr/M->s>^=JdmXZbf/Y\3uhJ+N8vKHgIJ9&sSN)exwE)]L$0_Q,măU"t%3jy%IP*8BT'=ul1r-*Jb_H14uO]v,v%$I/j(fpY0,I[98E,4s[EvF#WCs6FMXăU"'=V6[%Npr%q0/zBY02LYdgMN0wgq?V6,v92[m4:.Nkp;\rk'US.m>PcnIg>ONA)ăU"w^](j>*B)n+;gm[<jtDY^s&>vcE]PiKE%s0l,/i+<:VQOy*^O;'Re4Nc9,Y2tDAăU"dT>e_Gh/a.^xdG;;ISP9h67>QFuM*Fiqa?RR\qdazRr\C8t6Lr\X&iU>0[JhyuXăU")6-\rsalsXHH=X3YyDErLwaS\Z3+ayhiDa3esNeA,Es+>&&,g+9*h9S48*NFfZ.ăU"[XCgG;3cd+4PdLaHe&k<vLRc^hA2UT99i/&o'/AvmI)8X3-IW)4qoX)(7jRBND\ăU"'E%VB)Ee0.uR5x&q7>5kbS4W\Pb'9Os:v%2sCN<hC$l7E&uu't+Bh88z0BN=Rc=ăU"('D(p=/'h$M&tBkC=MRG9-l[XMa]BAc/ot$hKQTOV?;)dYG$trJ_XqW[N7*xQceăU"Tg%O%V&bRP_v%OtAyLmygS8ESS848xHQx6NlEbT/Ged/:#GgMzCQ]JZx(AF=J[lăU"7J=t=+,,EC$<HXc%EZ+k^'6,i1.G?o\.rBHp&PBKLB9]QK?H:+t1+a6U;*h(?0păU"Mn:6tC#TA];hGp5oxa^+QZ$>TBg]+Nxc^ZS\/dc=y1'm:weJ*K*yF,/yn.rY<ubăU"0PbHSww>>XKthpfauLl:5K=^e$YD/qim)L+=dAk&M;5_C,^9VPVV?9[n1LdYPZwăU"_j<xP=dNmDLG60RZr4XO+n*Y#WM9Kiqu[N%lb=cF0=mK.*;H#,jZC'Ry6D$,ZA4ăU":-l(eO^I3B;:1F,?Bm[4XbSoCC;G7[teOChnn^p-Z3c=V>DU$1pdfVY<%mkD%q3ăU"gdC#cU4'WM'mDAxnRLVBPPAbe\Q]l'uJD6oan_;O7jLa8L,JJ#>E5$Eb*)hw/1CăU"ZXj1kX\m=U[?Z%K,n)bIVpdYrm.pBddi4z/?Eam3zrCOrl<23KbL0VzEwu,NJURăU"1W:vP_&MnQL'XiYL'cn9q8BY=:*rgJp[Ns%uXDjGv=z*K:kS^E<Q^dp:UKb;Me=ăU"f\kDkrD*C'bJBv=egHHN8VHPhpc-=jC+*.wTQ'xromutUG;5)+Sp:f%>:kp12KkăU"*O)]muda:dNZZ+dhf;op%]9?m:OD#Et:4'j7v;];fM0D[bcP:AbM8<TWUVa'EWEăU"r_V-h9#-$>S9pSRko=Bl,/-gG?>,nJXV<,k'-L3UPg_XMKjTkyGl[DU?3.]XEgAăU",*$wC[jjbjQ3C>wLVoh5J%<kVGW#g$HgOsq9pR6mL24,Rbggo1Huf=VR*5Nxa3JăU"0&a#UhKh$mvcj^RVdZ[:%Y^v4eZ[.5Y^#f%v8J9&.9L9-F*hir^ImGl4k<0bTdnăU"KB&$i7X-UcuS:0NUK+tJVc',en,A/CluDfXM;Yo3zGrk_Am+J,.R)JN5q>GKcPEăU"tgdj$Mij/.:&;hmU(OnC3I1OYf'VV\(TE-HV9,T;4N5Q-QfeS=sn6hsvmv,M6J8ăU"^DQV4]S_UrcMmA9M\n>Iakq&\,sR'OBh.A?(1%bg*g(>9IgBwg?LFb(,fKq'qHMăU"pE0HF(?gEnN8W/JqbJxr..q2y*ZdE(T_Pf1ap?(-tf8nBLI[lVJ>MQ\(yF+19OQăU"#S6UD1V17PZmLZfTiVH+WWYU52VNTPZ?_u[N_-0F7c*ZRDQt0cR'-An0#sjAWdCăU"T]adwcXHp.CRU$vfpTF=7=5$w-?GtBK51a^c3KH-pZT7SL:&<X+KZ99f[$)\lităU"(CT7z=khg5dW'63rN:B<wVI[PwVsP<Kbk1x7tQVL2>s5\p)6E'*Z8lbSEb%GQYCăU"AxNa,/&=Oj2UY[.:l%J=_UShDe%)nN=hiK75<9AQE'?(;qZl]W9?AAn-g&pH#<^ăU"qxiCZVwRMtKI\Xl2]T?*n'cVfkK*PqLa#az/RFe0N[mK3+%c*N&/+'Jc&^UjkS[ăU"\m#>''LYTK\Z&9S(q1;:b*]t#lwM:Nm)l.;x%w;)pYcs2RU4[Y/xA'KKOWpai4AăU"m%?$)N4K*dE0O14[fJLy-(nR>z\(h6^SRa,YiRjI>,Qk=CFjIkgphS6bJ6]?[bIăU"4'9uj,(2lO.<Jgk<<6o_pdwGj'&b1be10=?-X6;]WSt13d3^ao[anQ,5#B7^t?%ăU"W7PA2\yJU$IXaxUGIYH9c8bs,P%gR4/xd+^?^MqOu\xE,7Aerjq6zPfQwM2DgZcăU"n3GIY*,tE0uoPA8U())<'Z;<&*H.=oiM;::_Q#zadIX?O,ZS+suCF;=2z/XN9;năU"Z#]kR$wPm*-OC*MG(CH(;K/AhmP-0+0.]>8LnQ?nveq&hfZmtVt4fY;ADCvFBuCăU"L<<DeJe>xNJl9a?4l=^SF%]3cjSr%^-$i(Xq[:;C\B&Y-RgYt[5BT,VH;Js<x\CăU"_WlClgqvoB'_xM1?HD)K#Y=&-w-J%X&?SP]wGJus#ZbQNr/'33)+_4a4ah+]^9EăU"RCj^7^v9umNjQb8ECvY2^3TSnF%uqTBBNDPsNT\MK#VR8)UmR1XVBLr4]<Thb>%ăU"5C[8P6c%BOv=HO#<OWfnY8Ohh8?bC]3/CgvOQGKWg67NdAD5\_xd_IoAoXMLai1ăU"U?MXSg1mM,XdMC(hurJ,_/w<*c$pG:nO</'DYmV42%V^Vqx87fff<hFZ^YjF4<IăU"B41ZR&0qfXZ(OFkKZaU1*KWQ<(SV'Emo'q7-59(y:cSqojUX7.rR3oq5dB4jM1]ăU"Pd,**kUSmQIkn[#%If>ecwiY51+];+asn_qm=H$7Gx3laK^7TYt;xEE:E+LZV'FăU"FKezz0g_*P$vRSNCQlJKdk%cd0i)S+uu$^N'>N1VVzOT5L[y<8rEqqP/$a;eTa$ăU"kI2IF:AUho(V^9uTnqSv.=#K?#+DtmB/),V\lf83>M_*;'j'bnflre]f'9WDxgrăU"LLuZ'moVRM+QrRI&,$m.AknR#mTFPJGIsfWQe=?1?x#i>[Y0^k?<Ujr1W_n1#P6ăU"XXh^cI(+FF4Clpor1=QU1R#O]CXAa3LdkQbl>=E0l;tVmUC8B+)WID>-F,UX+YUăU"*dFJ(T*.3snQ[e;rFKu4T+t'U9*iOW'R3CC&5hZVd9K^%NaF)bA%R)6m_$0)uMBăU"J[tBsUoq*lpLn_bkfk[PQi=z&'A^59;vFu,)SdoX/](g5_q^ZZ>*6(W-R?^4J2hăU"0ufa#J.2T^mebPcK#-Hmig:h2oM?mm9l^UL;\3am?=LXXew+2&0c%%U3;6?,xk5ăU"q=VYXk]=]][Zhi-Nh_i8,:4plbTgvGqmF)Y$/Y#&:>NSn&Tj?L=n5Dbrp(J]J9dăU"cmFg'4]e*<<ZR^*=Cqlx*6sp^k>vUobVzp^dgIVK9f.PRbdY>D/_\tvcYzq*r&eăU"z:t>m_/kJ7S*DU$mQBmnt2A9e:nd%up()%9%'%I-%fM8iS)]>?uG,.%%k<%%%.%ăEND SUBăSUB V2ăU"%%%xq%nijS[gfx6k'b>[mm;xW+wx4t*e3(ReiJhNA9c1zaZ/.WO[Q:jM_=\SCOEăU"*9lSQ;2U-_8MZdk:$mqpL6q%cQhuqN4cNNz+Nuu7Ht>FPu,m%gP*?eWI-fZNvYjăU"4x52jSurP4,wdG)Ux7X+N_D.7aC9gfH=ua.>vihj$Z.xAIi*Xqf*3f?>r3xh0*săU"Q,sa%-_YcI1b'^$A/n%tN?uT8(B+kp+j%BO&IU97\K228QCNog_R9-S;%w7HkckăU"%,Y%MBiV1u+_<n=7DZ)X?m.d7x[,M-4P\][:U;8$.\/Bu0p7*9(Gq+6(NN;'&jdăU"MA$s_g+9u-:v0jj5??\QWYX_:oBz_OTD^)r4^<kld/MAws<*KF4]XuaVMg8;I-\ăU"j3EU?yISkdl.GdH>534kM:*'<\.;aW13k16oHJRuO,N=7RTFYW8%nB(uX+RZ7OVăU"907tW*?p$(GIusWeE4-Z*_w1JYW=7))W1OPOh,?uhXv>eAK/1^SNX6>Xh1[]Q4[ăU"xukuAj2u?>,XFxtFLs#uuO$,;7rFlbHr0UhmU]tN3(]p\0:q*LRbJ]sh1%LK6O0ăU"v3uJwMuqSq+IaaJW7m+$P#?gS;Q4[F=F1?Wm'GPanAM&X]cH7;V6mV;wx_3i\5xăU"4x?8s'+.G>i-Vnh-rKPLRP=CGP=>r<ua;[vd$]J-SUtjB>tn/kT3VPXRpWUo&#2ăU"HYaB$0q=vi_oJSPV1fX\<d[Y(*uQF]abY1R=6,7BNZ_JfJ*gmy5Ho,i_QcWPG>păU"ploS9;4ipN8e(#c>?OCDWY>$:Zu(UenTGx:&M7zIc]pb%6kuoS-U-)+Jj3X<DDhăU"VdRmm:],G\fIAe,z_Y*_S&ZDh&Dun&S9G<T#9.pH$+l;*$2sDU+M?4UZM#/*P#VăU",T_tnpcl7mRVaS4AIv8HQNq6H+Ho'Tu7$.LKhN.4^rmc&KdZkA&&2B#z_w,zoiOăU"i_Pyv2?Bc-jw4ehagD45l49g-OsE*hq*)]mgm($Se?Zl2h=&&^2d2h0mH-5r+N;ăU"HBYqqdac_TQZ.-aNFuD\(WH\h]5:A4a?<_v>U;gT\8$NCx5Uq?/d&8:>5(0mnY1ăU"XN>)FGO21]$a;Z6sf'y[3^0<<p,#YV3ZawS1/ia[91x6e&O;>?6O#_4EQ$Q<BF)ăU"ROm/cV42Ni]F&&&9ol1-Kq+9QtHoNa+fQ4ZA0lL-=VD0J7j'POp(16.l+vkE09năU"w85Ft6<]A0oU<Dt9)h0UWN3U-<=+fj?YiZEpuhLdFueI\dPyjuWCbECkT5;p<RHăU"G2_kv*O+(vn<(o)TB0kuOZXWCEq=mJR58OnH0$rc3jK9R7Q$u9kHw(+3'0RM$G'ăU">cj:CaP>2&ogTxwCjWr)\;Bt,m\X2/1SW-pra8qZpv6p->VgqESGjJ1'eCM#g?,ăU">J?X+qn3::lvW]k1lDZ(OkTKE?RX#H7Qg/XK#<UZARG5okq<H:GYu\=b9FRm9]GăU",Li<9D]a2E=sq7/N.oa[\l0vM8VJ36Qqn^>e;EVR)d<*)[Nos'E9D;DZBsB:X;WăU"q%5'0-R,Ksm&&s(=[N1.2=t-&K(0:<[_,3R\s8PQuXsJxW'*hxszJS7%d1?RTrGăU"q]Q>j\9K,NPrL^miIuGHmkI>^\SK?$H^ZL[b[AVDdpg2c[M>L\Cm2GIM<YHTi7NăU"TG(OI=*Lsbbk]H$\0Z8MuI.y/;X9KXH-hk?31;p,s95\fxoKsB55:o??'.AXleMăU"y'AKRC%f4U&(''[jAP[^U6qU7pYCI+t/NCKb0((\GArH:mX'dq#)2ojMsxFkHGcăU"t6PwGHp**8.C_)m+:omS\l[sCL-hp$OR7WqDLeOV8'9j(3g*NTOYVWhjA4pHwufăU"YSL4[dcRN9hiPA]enI;9zh3[l7E%;3cI?arg&j+kCFoay*XK:&e9_TM)wH^C5rIăU"B3u:rBg4L?CHDB983NFD.v_q=OpGxQYcO<W/'me^YF&LdS&MrJBU^PUnbjW-Bb?ăU"'Hl0(>Y<caH?)FK^N\#$iZfA[uWl#[LHfX:Q-T)RO=P)PT,(<%Wz:<kN3iCZT5IăU"93/v]XjZ'<-:RXgoX77M\1=CTCSUk$onDVJCQYEWC0VDsQ,7T*v0HOPj=(NR]ADăU"X\y8vr=zfR_StGc<+ntMJa_i#U&-M\>r#.N_H'.4)tJ%-#bf.hZbrA4pT&0$HWVăU"FZ?jqJ2q]x\8^cfbgt7TX*8lpV>2qzz,e#ybbqkE9MiT6E3cmvd%3$->]LLM[QhăU"Y7ON#h0hfHm*?,l9oCSS8N,L-k<bQ+h*M-F[L0X)G\ASlf*DkasM_#+e2Hw3W^wăU"mBU%&pn1;E7?-7VM4*jS]p*CHftmh'?n(g*rBQN3\aA8Q=M.3r>WXVCoI3/?7OiăU"-bD>L>p5$er^z::c#-GG./huQZAS&hisIGG)^VGIbjYe7Q$]H;0:-vcxZhkWxe.ăU"gFmp%U&GnWDV$[b8]H4$.aqNmM.[$(\CpsGcSY2OjNr]kXsBM;(H2nKU_4VvYtLăU"'>vr5/xR_aA5&G:YGahWhyYu,*J;RtO41l\coei]'zcVrz0+l$5fu%4up&%'9%9ăU"%%'%-I%sMiOSY27'*#L%.%3p%%%0%%%%%%%%%&%E%%%%%%%%%n%xtzw%hjSn%shăU"up%&'9%%9%'%I-%fM8iS)]>?uG,.%%k<%%%.%%%%%%%%%&%%E%%%%iL%%%xqni%ăU"jSgf%xup*%+%%%%%'%'(%?%%%%^T%%%%%ăEND SUBăV2ăCLOSE:IF S=191AND B&=12223THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\12223,219);:END SUBă'>>> Page 1 of SLIDE.ZIP ends here. Last page. TCHK:191ăDieter Folger                  Psycodilic Circles             folger@bnv-bamberg.de          10-19-03 (  :  )       PB,QB,QBasic,PDS       21   442      Circles.bas '-----------------------------ă'CIRCLES.BAS for PowerBasică'Something psychodelic withă'only a few lines of codeă'-----------------------------ăDEFINT A - ZăSCREEN 12ăRANDOMIZE TIMERăDOă  FOR a = 0 TO 160ă      K$ = INKEY$ : IF LEN(K$) THEN ENDă      x = INT(RND * 640)ă      y = INT(RND * 480)ă      FOR i = 0 TO 64ă          CIRCLE (x, y), i, (i MOD 15) + 1ă          PALETTE (i MOD 15) + 1, iă      NEXTă  NEXTăLOOPăăăRasheed                        Quantizes Uncompressed 8bit BMPelectronic_fanatic@yahoo.com   10-19-03 (  :  )       Qbasic, QB, PDS        250  13731    QUANT-03.BASTYPE bmheaderă        descriptor              AS INTEGERă        filesize                AS LONGă        reserved                AS LONGă        bmoffset                AS LONGă        headersize              AS LONGă        bmwidth                 AS LONGă        bmheight                AS LONGă        planecount              AS INTEGERă        samplesize              AS INTEGERă        compression             AS LONGă        bmsize                  AS LONGă        widthresolution         AS LONGă        heightresolution        AS LONGă        colorcount              AS LONGă        essentialcolors         AS LONGăEND TYPEăDIM header AS bmheader, row$(2), offset%(2)ăCLSăCOLOR 15ăPRINT "Input file: ";ăCOLOR 7ăLINE INPUT ifile$ăIF DIR$(ifile$) = "" OR ifile$ = "" THENă        PRINT "Error #0 - Invalid filename or file not found."ă        ENDăEND IFăOPEN ifile$ FOR BINARY AS 1ăIF LOF(1) < 54 THENă        PRINT "Error #1 - File smaller than smallest Windows Bitmap image."ă        CLOSEă        ENDăEND IFătfile$ = "temp.fck"ăIF DIR$(tfile$) <> "" THENă        KILL tfile$ăEND IFăOPEN tfile$ FOR BINARY AS 2ăGET 1, , headerăPRINT "Length of file:"; TAB(30); LOF(1)ăPRINT "Descriptor:"; TAB(30); header.descriptorăPRINT "Filesize:"; TAB(30); header.filesizeăPRINT "Reserved:"; TAB(30); header.reservedăPRINT "Bitmap offset:"; TAB(30); header.bmoffsetăPRINT "Header size:"; TAB(30); header.headersizeăPRINT "Width:"; TAB(30); header.bmwidthăPRINT "Height:"; TAB(30); header.bmheightăPRINT "Planes:"; TAB(30); header.planecountăPRINT "Color depth:"; TAB(30); header.samplesizeăPRINT "Compression:"; TAB(30); header.compressionăPRINT "Bitmap size:"; TAB(30); header.bmsizeăPRINT "Width resolution:"; TAB(30); header.widthresolutionăPRINT "Height resolution:"; TAB(30); header.heightresolutionăPRINT "Colors:"; TAB(30); header.colorcountăPRINT "Essential colors:"; TAB(30); header.essentialcolorsămaxwidth% = header.bmwidth - 1ămaxheight% = header.bmheight - 1ăcolorcount% = header.colorcount - 1ăIF header.samplesize <> 8 OR header.planecount <> 1 OR header.compression OR header.colorcount < 2 THENă        PRINT "Error #2 - Unable to process Bitmap image."ă        CLOSEă        ENDăEND IFăDOă        COLOR 15ă        PRINT "Colors:";ă        COLOR 7ă        INPUT " ", colors%ă        IF colors% < 1 OR colors% > colorcount% THENă                COLOR 12ă                PRINT "Enter a number from 1 to"; colorcount%ă        END IFăLOOP UNTIL colors% > 0 AND colors% < header.colorcountăremovecount% = header.colorcount - colors%ăREDIM pal%(colorcount%, 2)ăpal$ = STRING$(header.colorcount * 4, 0)ăDEF SEG = SSEG(pal$) + SADD(pal$) \ 16ăoffset% = SADD(pal$) AND 15ăGET 1, , pal$ăFOR pal% = 0 TO colorcount%ă        pal%(pal%, 0) = PEEK(offset% + pal% * 4 + 2)ă        pal%(pal%, 1) = PEEK(offset% + pal% * 4 + 1)ă        pal%(pal%, 2) = PEEK(offset% + pal% * 4)ăNEXTărow$(0) = STRING$(header.bmwidth + (header.bmwidth AND 1), 0)ărow$(1) = row$(0)ărow$(2) = row$(0)ăDEF SEG = SSEG(row$(0)) + SADD(row$(0)) \ 16ăoffset%(0) = SADD(row$(0)) AND 15ăoffset%(1) = offset%(0) + LEN(row$(0)) + 4ăoffset%(2) = offset%(1) + LEN(row$(0)) + 4ălocation% = CSRLINăPRINT STRING$(60, 254)ăCOLOR 15ăDOă        REDIM translate%(colorcount%, 1), newpal%(colorcount% - 1, 2)ă        mindelta# = 130051ă        FOR first% = 0 TO colorcount% - 1ă                FOR second% = first% + 1 TO colorcount%ă                        dr& = pal%(first%, 0) - pal%(second%, 0)ă                        dg& = pal%(first%, 1) - pal%(second%, 1)ă                        db& = pal%(first%, 2) - pal%(second%, 2)ă                        delta# = (4 * (dr& ^ 2 + dg& ^ 2 + db& ^ 2) + 2 * (dr& * dg& + dr& * db& + dg& * db&)) / 9ă                        IF delta# < mindelta# THENă                                firstcolor% = first%ă                                secondcolor% = second%ă                                mindelta# = delta#ă                        END IFă                NEXTă        NEXTă        translate%(firstcolor%, 1) = -1ă        translate%(secondcolor%, 1) = -1ă        pal% = 1ă        FOR index% = 0 TO colorcount%ă                IF translate%(index%, 1) = 0 THENă                        translate%(index%, 0) = pal%ă                        pal% = pal% + 1ă                END IFă        NEXTă        GET 1, , row$(0)ă        GET 1, , row$(1)ă        count& = 0ă        rsum# = 0ă        gsum# = 0ă        bsum# = 0ă        IF translate%(PEEK(offset%(0)), 1) THENă                rsum# = rsum# + (pal%(PEEK(offset%(0)), 0) * 2 + pal%(PEEK(offset%(0) + 1), 0) + pal%(PEEK(offset%(1)), 0)) / 4ă                gsum# = gsum# + (pal%(PEEK(offset%(0)), 1) * 2 + pal%(PEEK(offset%(0) + 1), 1) + pal%(PEEK(offset%(1)), 1)) / 4ă                bsum# = bsum# + (pal%(PEEK(offset%(0)), 2) * 2 + pal%(PEEK(offset%(0) + 1), 2) + pal%(PEEK(offset%(1)), 2)) / 4ă                count& = count& + 1ă        END IFă        FOR column% = 1 TO maxwidth% - 1ă                IF translate%(PEEK(offset%(0) + column%), 1) THENă                        rsum# = rsum# + (pal%(PEEK(offset%(0) + column%), 0) * 2 + pal%(PEEK(offset%(0) + column% - 1), 0) + pal%(PEEK(offset%(0) + column% + 1), 0) + pal%(PEEK(offset%(1) + column%), 0)) / 5ă                        gsum# = gsum# + (pal%(PEEK(offset%(0) + column%), 1) * 2 + pal%(PEEK(offset%(0) + column% - 1), 1) + pal%(PEEK(offset%(0) + column% + 1), 1) + pal%(PEEK(offset%(1) + column%), 1)) / 5ă                        bsum# = bsum# + (pal%(PEEK(offset%(0) + column%), 2) * 2 + pal%(PEEK(offset%(0) + column% - 1), 2) + pal%(PEEK(offset%(0) + column% + 1), 2) + pal%(PEEK(offset%(1) + column%), 2)) / 5ă                        count& = count& + 1ă                END IFă        NEXTă        IF translate%(PEEK(offset%(0)), 1) THENă                rsum# = rsum# + (pal%(PEEK(offset%(0) + column%), 0) * 2 + pal%(PEEK(offset%(0) + column% - 1), 0) + pal%(PEEK(offset%(1) + column%), 0)) / 4ă                gsum# = gsum# + (pal%(PEEK(offset%(0) + column%), 1) * 2 + pal%(PEEK(offset%(0) + column% - 1), 1) + pal%(PEEK(offset%(1) + column%), 1)) / 4ă                bsum# = bsum# + (pal%(PEEK(offset%(0) + column%), 2) * 2 + pal%(PEEK(offset%(0) + column% - 1), 2) + pal%(PEEK(offset%(1) + column%), 2)) / 4ă                count& = count& + 1ă        END IFă        FOR row% = 1 TO maxheight% - 1ă                index% = row% MOD 3ă                GET 1, , row$((index% + 1) MOD 3)ă                IF translate%(PEEK(offset%(index%)), 1) THENă                        rsum# = rsum# + (pal%(PEEK(offset%(index%)), 0) * 2 + pal%(PEEK(offset%(index%) + 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3)), 0) + pal%(PEEK(offset%((index% + 1) MOD 3)), 0)) / 5ă                        gsum# = gsum# + (pal%(PEEK(offset%(index%)), 1) * 2 + pal%(PEEK(offset%(index%) + 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3)), 1) + pal%(PEEK(offset%((index% + 1) MOD 3)), 1)) / 5ă                        bsum# = bsum# + (pal%(PEEK(offset%(index%)), 2) * 2 + pal%(PEEK(offset%(index%) + 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3)), 2) + pal%(PEEK(offset%((index% + 1) MOD 3)), 2)) / 5ă                        count& = count& + 1ă                END IFă                FOR column% = 1 TO maxwidth% - 1ă                        IF translate%(PEEK(offset%(index%) + column%), 1) THENă                                rsum# = rsum# + (pal%(PEEK(offset%(index%) + column%), 0) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 0) + pal%(PEEK(offset%(index%) + column% + 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 0) +  _ăpal%(PEEK(offset%((index% + 1) MOD 3) + column%), 0)) / 6ă                                gsum# = gsum# + (pal%(PEEK(offset%(index%) + column%), 1) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 1) + pal%(PEEK(offset%(index%) + column% + 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 1) +  _ăpal%(PEEK(offset%((index% + 1) MOD 3) + column%), 1)) / 6ă                                bsum# = bsum# + (pal%(PEEK(offset%(index%) + column%), 2) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 2) + pal%(PEEK(offset%(index%) + column% + 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 2) +  _ăpal%(PEEK(offset%((index% + 1) MOD 3) + column%), 2)) / 6ă                                count& = count& + 1ă                        END IFă                NEXTă                IF translate%(PEEK(offset%(index%) + column%), 1) THENă                        rsum# = rsum# + (pal%(PEEK(offset%(index%) + column%), 0) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 0) + pal%(PEEK(offset%((index% + 1) MOD 3) + column%), 0)) \ 5ă                        gsum# = gsum# + (pal%(PEEK(offset%(index%) + column%), 1) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 1) + pal%(PEEK(offset%((index% + 1) MOD 3) + column%), 1)) \ 5ă                        bsum# = bsum# + (pal%(PEEK(offset%(index%) + column%), 2) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 2) + pal%(PEEK(offset%((index% + 1) MOD 3) + column%), 2)) \ 5ă                        count& = count& + 1ă                END IFă                FOR column% = 0 TO maxwidth%ă                        POKE offset%((index% + 2) MOD 3) + column%, translate%(PEEK(offset%((index% + 2) MOD 3) + column%), 0)ă                NEXTă                PUT 2, , row$((index% + 2) MOD 3)ă        NEXTă        index% = row% MOD 3ă        IF translate%(PEEK(offset%(index%)), 1) THENă                rsum# = rsum# + (pal%(PEEK(offset%(index%)), 0) * 2 + pal%(PEEK(offset%(index%) + 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3)), 0)) / 4ă                gsum# = gsum# + (pal%(PEEK(offset%(index%)), 1) * 2 + pal%(PEEK(offset%(index%) + 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3)), 1)) / 4ă                bsum# = bsum# + (pal%(PEEK(offset%(index%)), 2) * 2 + pal%(PEEK(offset%(index%) + 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3)), 2)) / 4ă                count& = count& + 1ă        END IFă        FOR column% = 1 TO maxwidth% - 1ă                IF translate%(PEEK(offset%(index%) + column%), 1) THENă                        rsum# = rsum# + (pal%(PEEK(offset%(index%) + column%), 0) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 0) + pal%(PEEK(offset%(index%) + column% + 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 0)) / 5ă                        gsum# = gsum# + (pal%(PEEK(offset%(index%) + column%), 1) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 1) + pal%(PEEK(offset%(index%) + column% + 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 1)) / 5ă                        bsum# = bsum# + (pal%(PEEK(offset%(index%) + column%), 2) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 2) + pal%(PEEK(offset%(index%) + column% + 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 2)) / 5ă                        count& = count& + 1ă                END IFă        NEXTă        IF translate%(PEEK(offset%(index%)), 1) THENă                rsum# = rsum# + (pal%(PEEK(offset%(index%) + column%), 0) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 0) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 0)) / 4ă                gsum# = gsum# + (pal%(PEEK(offset%(index%) + column%), 1) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 1) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 1)) / 4ă                bsum# = bsum# + (pal%(PEEK(offset%(index%) + column%), 2) * 2 + pal%(PEEK(offset%(index%) + column% - 1), 2) + pal%(PEEK(offset%((index% + 2) MOD 3) + column%), 2)) / 4ă                count& = count& + 1ă        END IFă        FOR column% = 0 TO maxwidth%ă                POKE offset%((index% + 2) MOD 3) + column%, translate%(PEEK(offset%((index% + 2) MOD 3) + column%), 0)ă        NEXTă        PUT 2, , row$((index% + 2) MOD 3)ă        FOR column% = 0 TO maxwidth%ă                POKE offset%(index%) + column%, translate%(PEEK(offset%(index%) + column%), 0)ă        NEXTă        PUT 2, , row$(index%)ă        FOR index% = 0 TO colorcount%ă                newpal%(translate%(index%, 0), 0) = pal%(index%, 0)ă                newpal%(translate%(index%, 0), 1) = pal%(index%, 1)ă                newpal%(translate%(index%, 0), 2) = pal%(index%, 2)ă        NEXTă        newpal%(0, 0) = rsum# / count&ă        newpal%(0, 1) = gsum# / count&ă        newpal%(0, 2) = bsum# / count&ă        header.colorcount = colorcount%ă        colorcount% = colorcount% - 1ă        REDIM pal%(colorcount%, 2)ă        FOR index% = 0 TO colorcount%ă                pal%(index%, 0) = newpal%(index%, 0)ă                pal%(index%, 1) = newpal%(index%, 1)ă                pal%(index%, 2) = newpal%(index%, 2)ă        NEXTă        SEEK 1, header.bmoffset + 1ă        SEEK 2, 1ă        FOR row% = 0 TO maxheight%ă                GET 2, , row$(0)ă                PUT 1, , row$(0)ă        NEXTă        SEEK 1, header.bmoffset + 1ă        SEEK 2, 1ă        LOCATE location%ă        progress% = progress% + 1ă        PRINT STRING$((progress% / removecount%) * 60, 254)ăLOOP UNTIL header.colorcount = colors%ăheader.bmoffset = 54 + header.colorcount * 4ăCLOSEăKILL ifile$ăOPEN ifile$ FOR BINARY ACCESS WRITE AS 1ăOPEN tfile$ FOR BINARY ACCESS READ AS 2ăPUT 1, , headerăpal$ = ""ăFOR index% = 0 TO colorcount%ă        pal$ = pal$ + CHR$(pal%(index%, 2)) + CHR$(pal%(index%, 1)) + CHR$(pal%(index%, 0)) + CHR$(0)ăNEXTăPUT 1, , pal$ăFOR row% = 0 TO maxheight%ă        GET 2, , row$(0)ă        PUT 1, , row$(0)ăNEXTăENDăăEdwin Knoppert                 Adding Pictures to PBWIN       ebknoppert@hotmail.com         10-19-03 (  :  )       PBDLL                  361  10000    Picture.BAS 'Edwin_Knoppertăă'ebknoppert@hotmail.comăă'==========================================================ă'=================== IPIC2BMP.inc =========================ăă#If Not %Def( %PICTYPE_UNINITIALIZED ) ăă%PICTYPE_UNINITIALIZED = -1 ă%PICTYPE_NONE = 0 ă%PICTYPE_BITMAP = 1 ă%PICTYPE_METAFILE = 2 ă%PICTYPE_ICON = 3 ă%PICTYPE_ENHMETAFILE = 4 ăă#EndIf ăăDeclare Function IPicture_CreateStreamOnHGlobal( ByVal hGlobal As Dword, _ă                          ByVal fDeleteOnRelease As Dword, pstm As Dword ) As Long ăDeclare Function IPicture_OleLoadPicture( ByVal pStream As Dword, ByVal lSize As Dword, _ă                          ByVal fRunmode As Dword, riid As String * 16, pvObj As Dword ) As Long ăDeclare Function IPicture_ComMethod0( ByVal p0 As Any ) As Dword ăDeclare Function IPicture_ComMethod1( ByVal p0 As Any, p1 As Any ) As Dword ăăFunction IPicture_LoadFromMemory( ByVal pData As Long, ByVal nDataLength As Long, ByVal nBackColor As Long ) As Long ăăDim hDC As Long ăDim hGlobal As Long ăDim pPicture As Dword Ptr ăDim IID_IPicture As String * 16 ăDim hLib_OLE32 As Dword ăDim hLib_OLEAUT32 As Dword ăDim pCreateStreamOnHGlobal As Dword ăDim pOleLoadPicture As Dword ăDim pvData As Dword ăDim pStream As Dword Ptr ăDim intImageType As Word ăDim pHandle As Long ăDim nResult As Long ăDim hMemDC As Long ăDim hOldBitmap As Long ăDim hOldBitmap2 As Long ăDim hMemDCTarget As Long ăDim hBitmapTarget As Long ăDim hBrush As Long ăDim nTPPX As Single ăDim nTPPY As Single ăDim R As RECT ăDim II As ICONINFO ăDim EMH As ENHMETAHEADER ăDim BM As BITMAP ăăIf pData = 0 Or nDataLength < 80 Then Exit Function ăăIID_IPicture = Mkl$( &H7BF80980 ) & Mki$( &HBF32 ) & Mki$( &H101A ) & Chr$( &H8B, &HBB, &H00, &HAA, &H00, &H30, &H0C, &HAB ) ăăhLib_OLE32 = LoadLibrary( "ole32.dll" ) ăIf hLib_OLE32 = 0 Then GoTo IPicture_LoadFromMem_Close ăpCreateStreamOnHGlobal = GetProcAddress( hLib_OLE32, "CreateStreamOnHGlobal" ) ăIf pCreateStreamOnHGlobal = 0 Then GoTo IPicture_LoadFromMem_Close ăăhLib_OLEAUT32 = LoadLibrary( "OLEAUT32.dll" ) ăIf hLib_OLEAUT32 = 0 Then hLib_OLEAUT32 = LoadLibrary( "OLEPRO32.DLL" ) ăIf hLib_OLEAUT32 Then pOleLoadPicture = GetProcAddress( hLib_OLEAUT32, "OleLoadPicture" ) ăIf pOleLoadPicture = 0 Then GoTo IPicture_LoadFromMem_Close ăă'// Copy picture data into hGLOBAL ăhGlobal = GlobalAlloc( %GMEM_MOVEABLE Or %GMEM_NODISCARD, nDataLength ) ăIf hGlobal = 0 Then GoTo IPicture_LoadFromMem_Close ăăpvData = GlobalLock( hGlobal ) ăIf pvData = 0 Then GoTo IPicture_LoadFromMem_Close ăăMoveMemory ByVal pvData, ByVal pData, nDataLength ăGlobalUnlock hGlobal ăăCall Dword pCreateStreamOnHGlobal Using IPicture_CreateStreamOnHGlobal( hGlobal, 1, pStream ) To nResult ăIf nResult <> %S_OK Then GoTo IPicture_LoadFromMem_Close ăăCall Dword pOleLoadPicture Using IPicture_OleLoadPicture( pStream, nDataLength, 0, IID_IPicture, pPicture ) To nResult ăCall Dword @@pStream[2] Using IPicture_ComMethod0( pStream ) ăIf nResult <> %S_OK Then GoTo IPicture_LoadFromMem_Close ăă'// IPicture::get_Type ăCall Dword @@pPicture[5] Using IPicture_ComMethod1( pPicture, intImageType ) ă'// IPicture::get_Handle ăCall Dword @@pPicture[3] Using IPicture_ComMethod1( pPicture, ByVal VarPtr( pHandle ) ) ăăSelect Case intImageType ăCase %PICTYPE_BITMAP ăăhDC = GetDC( %HWND_DESKTOP ) ăăGetObject pHandle, Len( BM ), ByVal VarPtr( BM ) ăăhMemDC = CreateCompatibleDC( hDC ) ăhOldBitmap = SelectObject( hMemDC, pHandle ) ăhMemDCTarget = CreateCompatibleDC( hDC ) ăhBitmapTarget = CreateCompatibleBitmap( hDC, BM.bmWidth, BM.bmHeight ) ăhOldBitmap2 = SelectObject( hMemDCTarget, hBitmapTarget ) ăBitBlt hMemDCTarget, 0, 0, BM.bmWidth, BM.bmHeight, hMemDC, 0, 0, %SRCCOPY ăSelectObject hMemDCTarget, hOldBitmap2 ăSelectObject hMemDC, hOldBitmap ăDeleteDC hMemDCTarget ăDeleteDC hMemDC ăăFunction = hBitmapTarget ăăCase %PICTYPE_ICON ăăhDC = GetDC( %HWND_DESKTOP ) ăăGetIconInfo pHandle, II ăă'// Get the bitmap info. ăIf II.hbmColor Then ăGetObject II.hbmColor, Len( BM ), BM ăElse ăGetObject II.hbmMask, Len( BM ), BM ăBM.bmHeight = BM.bmHeight / 2 ăEnd If ăă'// Destroy the bitmaps. ăIf II.hbmColor Then DeleteObject II.hbmColor ăIf II.hbmMask Then DeleteObject II.hbmMask ăăhMemDCTarget = CreateCompatibleDC( hDC ) ăhBitmapTarget = CreateCompatibleBitmap( hDC, BM.bmWidth, BM.bmHeight ) ăhOldBitmap = SelectObject( hMemDCTarget, hBitmapTarget ) ăR.nRight = BM.bmWidth ăR.nBottom = BM.bmHeight ăăSelect Case nBackColor ăCase RGB( 0, 0, 0 ) To RGB( 255, 255, 255 ) ăhBrush = CreateSolidBrush( nBackColor ) ăFillRect hMemDCTarget, R, hBrush ăDeleteObject hBrush ăEnd Select ăăDrawIcon hMemDCTarget, 0, 0, pHandle ăăSelectObject hMemDCTarget, hOldBitmap ăăFunction = hBitmapTarget ăăCase %PICTYPE_ENHMETAFILE ăăhDC = GetDC( %HWND_DESKTOP ) ăănTPPX = 1440! / CSng( GetDeviceCaps( hDC, %LOGPIXELSX ) ) ănTPPY = 1440! / CSng( GetDeviceCaps( hDC, %LOGPIXELSY ) ) ăIf nTPPX = 0 Then nTPPX = 1 ăIf nTPPY = 0 Then nTPPY = 1 ăăGetEnhMetaFileHeader pHandle, SizeOf( EMH ), EMH ăăR.nLeft = 0 ăR.nTop = 0 ăR.nRight = ( ( EMH.rclFrame.nRight - EMH.rclFrame.nLeft ) * 56.7! ) / 100! ăR.nBottom = ( ( EMH.rclFrame.nBottom - EMH.rclFrame.nTop ) * 56.7! ) / 100! ăR.nRight = R.nRight / nTPPX ăR.nBottom = R.nBottom / nTPPY ăăhMemDCTarget = CreateCompatibleDC( hDC ) ăhBitmapTarget = CreateCompatibleBitmap( hDC, R.nRight, R.nBottom ) ăhOldBitmap = SelectObject( hMemDCTarget, hBitmapTarget ) ăăSelect Case nBackColor ăCase RGB( 0, 0, 0 ) To RGB( 255, 255, 255 ) ăhBrush = CreateSolidBrush( nBackColor ) ăFillRect hMemDCTarget, R, hBrush ăDeleteObject hBrush ăEnd Select ăăPlayEnhMetaFile hMemDCTarget, pHandle, R ăăSelectObject hMemDCTarget, hOldBitmap ăăFunction = hBitmapTarget ăăCase Else ăGoTo IPicture_LoadFromMem_Close ăEnd Select ăăIPicture_LoadFromMem_Close: ăăIf pPicture <> 0 Then Call Dword @@pPicture[2] Using IPicture_ComMethod0( pPicture ) ăIf hDC Then ReleaseDC %HWND_DESKTOP, hDC ăIf hLib_OLE32 Then FreeLibrary hLib_OLE32 ăIf hLib_OLEAUT32 Then FreeLibrary hLib_OLEAUT32 ăăEnd Function ăăFunction IPicture_LoadFromFile( ByVal sFileName As String, ByVal nBackColor As Long ) As Long ăăDim FF As Long ăDim sBuffer As String ăăsFileName = Trim$( sFileName ) ăIf Len( sFileName ) = 0 Then Exit Function ăăErrClear ăFF = GetAttr( sFileName ) ăIf Err Or IsTrue( FF And %FILE_ATTRIBUTE_DIRECTORY ) Then Exit Function ăăFF = FreeFile ăOpen sFileName For Binary As #FF ăsBuffer = String$( Lof( FF ), 0 ) ăIf Len( sBuffer ) Then Get #FF,, sBuffer ăClose #FF ăăFunction = IPicture_LoadFromMemory( StrPtr( sBuffer ), Len( sBuffer ), nBackColor ) ăăEnd Function ăăFunction IPicture_PaintBitmap( ByVal hDC As Long, ByVal hBitmap As Long, ByVal X As Long, ByVal Y As Long ) As Long ăăDim hMemDC As Long ăDim hMemBM As Long ăDim hOldBM As Long ăDim BM As BITMAP ăăIf hDC = 0 Or hBitmap = 0 Then Exit Function ăăGetObject hBitmap, Len( BM ), ByVal VarPtr( BM ) ăăhMemDC = CreateCompatibleDC( hDC ) ăIf hMemDC = 0 Then Exit Function ăăhOldBM = SelectObject( hMemDC, hBitmap ) ăBitBlt hDC, X, Y, BM.bmWidth, BM.bmHeight, hMemDC, 0, 0, %SRCCOPY ăăSelectObject hMemDC, hOldBM ăDeleteDC hMemDC ăăFunction = 1 ăăEnd Function ăă'=======================================================ă'=======================================================ăă#Compile Exe ăăOption Explicit ăă#Include "win32api.inc" ă#Include "IPIC2BMP.inc" ăăGlobal hBitmap As Long ăăCallBack Function DlgProc() As Long ăăDim a As Long ăDim R As Rect ăDim PS As PAINTSTRUCT ăDim T As String ăăSelect Case CbMsg ăCase %WM_INITDIALOG ăCase %WM_PAINT ăăBeginPaint CbHndl, PS ăIPicture_PaintBitmap PS.hDC, hBitmap, 10, 10 ăEndPaint CbHndl, PS ăFunction = 1 ăExit Function ăăCase %WM_DESTROY ăEnd Select ăăEnd Function ăăFunction WinMain ( ByVal hCurInstance As Long, _ ăByVal hPrevInstance As Long, _ ălpszCmdLine As Asciiz Ptr, _ ăByVal nCmdShow As Long ) As Long ăăDim a As Long ăDim hDlg As Long ăDim Result As Long ăă'BMP ă' hBitmap = IPicture_LoadFromFile( "c:\windows\setup.bmp", 0 ) ăă'EMF ă' hBitmap = IPicture_LoadFromFile( "c:\Program Files\Common Files\Microsoft Shared\Grphflt\ms.emf", rgb( 255, 0, 0 ) ) ăă'ICO ă' hBitmap = IPicture_LoadFromFile( "c:\windows\Winupd.ico", RGB( 255, 0, 0 ) ) ă' hBitmap = IPicture_LoadFromFile( "c:\windows\Winupd.ico", -1 ) ăă'JPG ăhBitmap = IPicture_LoadFromFile( "c:\windows\Chateau.jpg", -1 ) ăăIf hBitmap = 0 Then Beep: Exit Function ăăDialog New 0, "IPicture to BMP",,, 440, 480 _ ă, %WS_OVERLAPPED _ ăOr %WS_SYSMENU _ ăOr %WS_MINIMIZEBOX _ ăOr %WS_MAXIMIZEBOX _ ăOr %WS_MAXIMIZE _ ăOr %WS_THICKFRAME _ ăOr %WS_CLIPSIBLINGS _ ăOr %WS_CLIPCHILDREN _ ăTo hDlg ăăIf hDlg = 0 Then Exit Function ăăDialog Show Modal hDlg Call DlgProc To Result ăăIf hBitmap Then DeleteObject hBitmap ăăFunction = 1 ăăEnd Function ăă'==================================================================ă'================================================================== ăFunction IPicture_ResizeWindow( ByVal hWnd As Long, ByVal hBitmap As Long, _ă                               ByVal bCenter As Long ) As Long ăăDim X As Long ăDim Y As Long ăDim XX As Long ăDim YY As Long ăDim R As RECT ăDim PA As POINTAPI ăDim BM As BITMAP ăDim nLBorder As Long ăDim nTBorder As Long ăăIf hWnd = 0 Or hBitmap = 0 Then Exit Function ăăGetWindowRect hWnd, R ăăGetObject hBitmap, Len( BM ), ByVal VarPtr( BM ) ăăClientToScreen hWnd, PA ăănLBorder = PA.X - R.nLeft ănTBorder = PA.Y - R.nTop ăăXX = BM.bmWidth + ( nLBorder * 2 ) ăYY = BM.bmHeight + nTBorder + nLBorder ăIf bCenter Then ăX = ( GetSystemMetrics ( %SM_CXSCREEN ) - XX ) \ 2 ăY = ( GetSystemMetrics ( %SM_CYSCREEN ) - YY ) \ 2 ăElse ăX = R.nLeft ăY = R.nTop ăEnd If ăăMoveWindow hWnd, X, Y, XX, YY, -1 ăăFunction = 1 ăăEnd Function ăăSteve Gartrell                 VGA ANIMATION SPRITES          VGA,ANIMATION,SPRITES          7/11/92 (00:00:00)     QB, QBasic             194  4828     ANISPRT.BAS DEFINT A-ZăăDECLARE SUB NoBoxSprite (StartX%, StartY%, NumRows%, NumCols%, Sprite%())ăCONST C$ = "Created 7/11/92 by Steve Gartrell.  No rights reserved."ăă'this constant is the color you won't use.ăCONST NoColor% = 1ăăSCREEN 13  'VGA 320x200 pixels x 256 colorsăă'paint with color you don't want copied!!ăPAINT (10, 10), NoColor%ăă'Draw a spriteăăCIRCLE (165, 100), 9, 4ăPAINT (165, 100), 90, 4ăCIRCLE (165, 100), 8, 4, 0, 3.14ăCIRCLE (165, 100), 9, 90, 3.14, 6.28ăPSET (162, 99), 122ăCIRCLE (162, 99), 3, 6ăPSET (168, 99), 122ăCIRCLE (168, 99), 3, 6ăCIRCLE (165, 103), 3, 42, 3.43, 5.83ăă'Copy the sprite into an array...ăăcell% = 0ăDIM Sprite%(1 TO 441)ăăFOR y% = 90 TO 110ă   FOR x% = 155 TO 175ă      cell% = cell% + 1ă      Sprite%(cell%) = POINT(x%, y%)ă   NEXTăNEXTăă'Borrowed this random pattern generator from Rich Geldreich!!ă'Modified to prohibit use of color 1 for demo purposes.ăăFOR A = 1 TO 400ă   RANDOMIZE TIMERă   IF RND > .05 THENă       LINE -(RND * 320, RND * 200), RND * 254 + 1ă   ELSEă       LINE -(RND * 320, RND * 200), RND * 254 + 1, BFă   END IFăNEXTăăăStartX% = 160: StartY% = 100ăă'There are actually 21 rows and 21 cols,ă' but this makes it faster by eliminatingă' some math!!!ăăNumRows% = 20: NumCols% = 20ăă'First call initializes (places) sprite...ăăCALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ăăDOă   DO: t$ = UCASE$(INKEY$): LOOP UNTIL LEN(t$)ăă   SELECT CASE LEN(t$)ă      CASE 2ă         SELECT CASE ASC(RIGHT$(t$, 1))ă            CASE &H48                  ' 72d = UPă               StartY% = StartY% - 10ă               IF StartY% < 0 THEN StartY% = 180ă               CALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ă            CASE &H50                  ' 80d = DOWNă               StartY% = StartY% + 10ă               IF StartY% > 180 THEN StartY% = 0ă               CALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ăă            CASE &H4B                  ' 75d = LEFTă               StartX% = StartX% - 10ă               IF StartX% < 0 THEN StartX% = 300ă               CALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ă            CASE &H4D                  ' 77d = RIGHTă               StartX% = StartX% + 10ă               IF StartX% > 300 THEN StartX% = 0ă               CALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ă            CASE ELSEă               BEEP: BEEPă         END SELECTă      CASE ELSEă         IF t$ = "Q" THENă            EXIT DOă         ELSEă            BEEP: BEEPă         END IFă   END SELECTăăLOOPăăToggleY% = 1ăToggleX% = -1ăăDOă   StartY% = StartY% + ToggleY%ă   IF StartY% < 1 OR StartY% > 179 THENă      IF ToggleY% = -1 THENă         ToggleY% = 1ă      ELSEă         ToggleY% = -1ă      END IFă   END IFă   StartX% = StartX% + ToggleX%ă   IF StartX% < 1 OR StartX% > 299 THENă      IF ToggleX% = -1 THENă         ToggleX% = 1ă      ELSEă         ToggleX% = -1ă      END IFă   END IFă   CALL NoBoxSprite(StartX%, StartY%, NumRows%, NumCols%, Sprite%())ăLOOP UNTIL LEN(INKEY$)ăăSCREEN 0ăWIDTH 80ăCOLOR 7, 0ăENDăăSUB NoBoxSprite (StartX%, StartY%, NumRows%, NumCols%, Sprite%())ăă'Static definition means location of sprite known ată' start of routine if it was placed previouslyăăSTATIC OldStartY&, OldEndY&ăă'Calculate vid mem offset addressăăStartY& = StartY% * 320& + StartX%ăEndY& = StartY& + (NumRows% * 320&) + StartX%ăăcell% = 1ăă'Vid mem segment in screen 13ăăDEF SEG = &HA000ăăWAIT &H3DA, 8, 8  'Wait till _start_ of vertical retraceăWAIT &H3DA, 8ăă'Note that this FOR/NEXT won't execute if first call-ă' since both sides of the FOR/NEXT = 0.  After firstă' call, it restores the background and retrieves the sprite!ă' (Which means you can't overwrite the sprite, or ită' is saved in it's overwritten state!!)ăăFOR y& = OldStartY& TO OldEndY& STEP 320ă   FOR Addr& = y& TO y& + NumCols%ă      IF Sprite%(cell%) <> NoColor% THENă         CurrentPix% = PEEK(Addr&)ă         POKE Addr&, Sprite%(cell%)ă         Sprite%(cell%) = CurrentPix%ă      END IFă      cell% = cell% + 1ă   NEXTăNEXTăăcell% = 1ăăWAIT &H3DA, 8, 8ăWAIT &H3DA, 8ăăă' Place the sprite at the StartX%, StartY% location bută' ONLY AFTER storing the background!!!ăăăFOR y& = StartY& TO EndY& STEP 320ă   FOR Addr& = y& TO y& + NumCols%ă      IF Sprite%(cell%) <> NoColor% THENă         CurrentPix% = PEEK(Addr&)ă         POKE Addr&, Sprite%(cell%)ă         IF CurrentPix% = NoColor% THENă            CurrentPix% = CurrentPix% + 256ă         END IFă         Sprite%(cell%) = CurrentPix%ă      END IFă      cell% = cell% + 1ă   NEXTăNEXTăăDEF SEGăăOldStartY& = StartY&: OldEndY& = EndY&ăăEND SUBăăSteve Demo                     EGA ANIMATION OF MAN WALKING   EGA,ANIMATION,WALKING          Unknown Date (00:00:00)QB, QBasic             318  10532    MANWALK.BAS 'Written By Steve Demo for Public Domain !ă'Any and all source may be mangled, distroyed, burned, copied, or deleted asă'you see fit :-).ă'ă'I have only directed my intrests in Graphics with in the last month or soă'and this is what I have come up with so far.ă'The moveing images were created by a program I wrote using Rich's Gifă'engine. It is fairly simple to make for your self just study the POINTă'function and you should be able to make one to. As you will notice I amă'not much of an artist and this is just a quick Demo anyways.ă'ă'I have also been able to make a space ship move and fire a laser. Andă'distory the object fired on. If you would like to see this code drop meă'a note.ăăăDEFINT A-ZăDECLARE SUB ManWalk1 (newx, newy)ăDECLARE SUB ManWalk2 (newx, newy)ăDECLARE SUB ManWalk3 (newx, newy)ăDECLARE SUB ManWalk4 (newx, newy)ăDECLARE SUB ManWalk5 (newx, newy)ăDECLARE SUB DrawScreen ()ăDECLARE SUB Pause (ticks%)ăREM $DYNAMICăREDIM BackArray%(250)ăăSCREEN 7, , 1, 0ăăDrawScreenăăXpos% = 160ăGET (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), BackArray%ăold.Ypos% = Ypos%ăold.Xpos% = Xpos%ăyes = 1ăPCOPY 1, 2ăDOăCOLOR , 0ăcount = 0ăPCOPY 2, 1ă GET (old.Ypos%, old.Xpos%)-(old.Ypos% + 13, old.Xpos% + 18), BackArray%ă Runcount = 1ă FOR Ypos% = 5 TO 290 STEP 2ă   count = count + 1ă   yes = yes + 1ă    IF LEN(INKEY$) THEN EXIT DOă   KeyPress$ = ""ă   PUT (old.Ypos%, old.Xpos%), BackArray%, PSETă   GET (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), BackArray%ă  'LINE (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), 10, B   '  To test GETă  'SOUND 700, .05ă    IF yes > 1 THENă        ManWalk2 Xpos%, Ypos%ă        yes = 0ă    ELSEă        ManWalk1 Xpos%, Ypos%ă    END IFă    IF count > 30 THENă        PUT (Ypos%, Xpos%), BackArray%, PSETă        GET (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), BackArray%ă        ManWalk3 Xpos%, Ypos%ă        PCOPY 1, 0ă        Pause 12ă        count = 0ă    END IFă  PCOPY 1, 0ă  old.Ypos% = Ypos%ă  old.Xpos% = Xpos%ă  Pause 2ă NEXT Ypos%ăă FOR alarm = 1 TO 15ă   'PLAY "t180l60<<<dgdgda>>>"ă NEXT alarmăă FOR x = 1 TO 320 STEP 5ă    LINE (x, 205)-(1, x), 10ă NEXT xăăPAINT (163, 148), 12, 1ăPAINT (250, 24), 14, 3ăLINE (162, 147)-(188, 178), 4, BăCOLOR , 9ăFOR Ypos% = 290 TO 10 STEP -3ă  yes = yes + 1ă   IF LEN(INKEY$) THEN EXIT DOă  PUT (old.Ypos%, old.Xpos%), BackArray%, PSETă  GET (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), BackArray%ă  'LINE (Ypos%, Xpos%)-(Ypos% + 13, Xpos% + 18), 10, B   '  To test GETă  'SOUND 400, .05ă  'SOUND 700, .05ă   IF yes > 1 THENă      ManWalk5 Xpos%, Ypos%ă      yes = 0ă   ELSEă      ManWalk4 Xpos%, Ypos%ă   END IFă  PCOPY 1, 0ă  old.Ypos% = Ypos%ă  old.Xpos% = Xpos%ă  Pause 1ă NEXT Ypos%ăăLOOPăăREM $STATICăSUB DrawScreenăRANDOMIZE TIMERăFOR xx = 1 TO 300ă    x = RND * 320ă    y = RND * 200ă    PSET (x, y), 15ăNEXT xxăLINE (1, 170)-(320, 200), 1, BFă FOR x = 1 TO 320 STEP 5ă     LINE (x, 205)-(1, x), 7ă NEXT xăLINE (263, 165)-(309, 189), 7, BFăLINE (265, 166)-(308, 187), 0, BăLINE (267, 168)-(306, 185), 0, BăLINE (270, 171)-(303, 183), 1, BFăLINE (160, 145)-(190, 180), 5, BFăLINE (162, 147)-(188, 178), 1, BăLINE (165, 150)-(185, 175), 4, BFăCIRCLE (250, 24), 25, 3ăPAINT (250, 24), 8, 3ăăEND SUBăăSUB ManWalk1 (newx, newy)ă'$DYNAMICăREDIM F(190)ăF(5) = 6: F(6) = 6: F(7) = 6:ăF(12) = 6: F(13) = 6: F(14) = 6: F(15) = 6: F(16) = 14: F(17) = 6: F(20) = 6: F(21) = 6: F(22) = 6:ăF(23) = 6: F(24) = 14: F(25) = 14: F(26) = 14: F(28) = 6: F(29) = 6: F(30) = 6: F(31) = 6: F(32) = 14: F(33) = 14:ăF(34) = 9: F(35) = 14: F(37) = 6: F(38) = 6: F(39) = 14: F(40) = 14: F(41) = 14: F(42) = 14: F(43) = 14: F(44) = 14:ăF(45) = 14: F(46) = 6: F(47) = 6: F(48) = 6: F(49) = 14: F(50) = 14: F(51) = 14: F(52) = 14: F(53) = 14: F(55) = 6:ăF(56) = 6: F(57) = 6: F(58) = 14: F(59) = 14: F(60) = 14: F(61) = 4: F(65) = 6: F(66) = 6:ăF(67) = 14: F(68) = 14: F(69) = 14: F(70) = 14: F(77) = 14:ăF(85) = 11: F(86) = 3: F(87) = 3: F(94) = 11: F(95) = 3:ăF(96) = 3: F(103) = 11: F(104) = 11: F(105) = 11:ăF(113) = 3: F(114) = 11: F(115) = 11: F(121) = 3: F(122) = 3: F(123) = 3:ăF(130) = 3: F(132) = 3: F(140) = 3:ăF(142) = 3: F(148) = 3: F(151) = 3:ăF(156) = 10: F(157) = 10: F(160) = 10: F(161) = 10:ăd = 0ă   FOR x = newx TO newx + 17ă      FOR xxx = newy TO newy + 8ă       d = d + 1ă       PixielColor = F(d)ă      IF PixielColor <> 0 THENă        IF POINT(xxx, x) <> 7 THENă           PSET (xxx, x), PixielColoră        END IFă      END IFă      NEXT xxxă   NEXT xăăERASE FăEND SUBăăREM $STATICăSUB ManWalk2 (newx, newy)ă'$DYNAMICăREDIM F(171)ăăF(4) = 6: F(5) = 6: F(6) = 6: F(10) = 6: F(11) = 6: F(12) = 6: F(13) = 6: F(14) = 14:ăF(15) = 6: F(17) = 6: F(18) = 6: F(19) = 6: F(20) = 6: F(21) = 14: F(22) = 14: F(23) = 14: F(25) = 6:ăF(26) = 6: F(27) = 6: F(28) = 14: F(29) = 14: F(30) = 9: F(31) = 14: F(33) = 6: F(34) = 14: F(35) = 14: F(36) = 14:ăF(37) = 14: F(38) = 14: F(39) = 14: F(40) = 14: F(41) = 6: F(42) = 6: F(43) = 14: F(44) = 14: F(45) = 14: F(46) = 14: F(47) = 14:ăF(49) = 6: F(50) = 6: F(51) = 14: F(52) = 14: F(53) = 14: F(54) = 4: F(57) = 6: F(58) = 6: F(59) = 14:ăF(60) = 14: F(61) = 14: F(62) = 14: F(68) = 14:ăF(75) = 11: F(76) = 11: F(77) = 3: F(83) = 11: F(84) = 11: F(85) = 3:ăF(90) = 11: F(91) = 11: F(92) = 3: F(93) = 3: F(98) = 11: F(100) = 3:ăF(101) = 3: F(107) = 3: F(108) = 3: F(109) = 3:ăF(115) = 3: F(117) = 3: F(123) = 3:ăF(126) = 3: F(130) = 3: F(133) = 3:ăF(138) = 10: F(139) = 10: F(142) = 10: F(143) = 10:ăd = 0ă   FOR x = newx TO newx + 17ă      FOR xxx = newy TO newy + 7ă       d = d + 1ă       PixielColor = F(d)ă     ă      IF PixielColor <> 0 THENă        IF POINT(xxx, x) <> 7 THENă           PSET (xxx, x), PixielColoră        END IFă      END IFă     ă      NEXT xxxă   NEXT xăăERASE FăEND SUBăăREM $STATICăSUB ManWalk3 (newx, newy)ă'$DYNAMICăREDIM F(220)ăăF(13) = 6: F(14) = 6: F(15) = 6: F(16) = 6: F(20) = 6: F(21) = 6: F(22) = 6: F(23) = 6:ăF(24) = 6: F(25) = 6: F(26) = 6: F(28) = 6: F(29) = 6: F(30) = 6: F(31) = 6: F(32) = 14: F(33) = 14: F(34) = 6:ăF(35) = 6: F(37) = 6: F(38) = 6: F(39) = 14: F(40) = 9: F(41) = 14: F(42) = 9: F(43) = 14: F(44) = 6: F(45) = 6:ăF(46) = 6: F(47) = 14: F(48) = 14: F(49) = 14: F(50) = 14: F(51) = 14: F(52) = 14: F(53) = 14: F(54) = 6: F(55) = 6: F(56) = 6:ăF(57) = 14: F(58) = 14: F(59) = 14: F(60) = 14: F(61) = 14: F(62) = 6: F(63) = 6: F(64) = 6: F(65) = 6: F(66) = 14: F(67) = 4:ăF(68) = 4: F(69) = 4: F(70) = 14: F(71) = 6: F(72) = 6: F(73) = 6: F(74) = 6: F(75) = 14: F(76) = 14: F(77) = 14: F(78) = 14:ăF(79) = 14: F(80) = 6: F(85) = 14: F(86) = 14:ăF(93) = 11: F(94) = 3: F(95) = 3: F(102) = 11: F(103) = 3:ăF(104) = 3: F(111) = 11: F(112) = 11: F(113) = 11:ăF(121) = 3: F(122) = 11: F(123) = 11: F(129) = 3: F(130) = 3: F(131) = 3:ăF(138) = 3: F(140) = 3: F(148) = 3:ăF(150) = 3: F(156) = 3: F(159) = 3:ăF(165) = 10: F(166) = 10: F(168) = 10: F(169) = 10:ăd = 0ă   FOR x = newx TO newx + 20ă      FOR xxx = newy TO newy + 8ă       d = d + 1ă       PixielColor = F(d)ă      IF PixielColor <> 0 THENă        IF POINT(xxx, x) <> 7 THENă           PSET (xxx, x), PixielColoră        END IFă      END IFă     ă      NEXT xxxă   NEXT xăăERASE FăEND SUBăăREM $STATICăSUB ManWalk4 (newx, newy)ă'$DYNAMICăREDIM F(200)ăăF(12) = 6: F(13) = 6: F(14) = 6: F(20) = 6: F(21) = 14: F(22) = 6:ăF(23) = 6: F(24) = 6: F(25) = 6: F(29) = 14: F(30) = 14: F(31) = 14: F(32) = 6: F(33) = 6:ăF(34) = 6: F(35) = 6: F(38) = 14: F(39) = 9: F(40) = 14: F(41) = 14: F(42) = 6: F(43) = 6: F(44) = 6:ăF(45) = 6: F(46) = 14: F(47) = 14: F(48) = 14: F(49) = 14: F(50) = 14: F(51) = 14: F(52) = 14: F(53) = 6: F(54) = 6:ăF(56) = 14: F(57) = 14: F(58) = 14: F(59) = 14: F(60) = 14: F(61) = 6: F(62) = 6: F(63) = 6: F(66) = 4:ăF(67) = 14: F(68) = 14: F(69) = 14: F(70) = 6: F(71) = 6: F(72) = 6: F(75) = 14: F(76) = 14: F(77) = 14:ăF(78) = 14: F(79) = 6: F(80) = 6: F(86) = 14:ăF(94) = 3: F(95) = 11: F(96) = 11: F(103) = 3: F(104) = 11:ăF(105) = 11: F(112) = 3: F(113) = 3: F(114) = 11: F(115) = 11:ăF(121) = 3: F(122) = 3: F(124) = 11: F(130) = 3: F(131) = 3:ăF(132) = 3: F(139) = 3: F(141) = 3:ăF(147) = 3: F(150) = 3: F(157) = 3:ăF(160) = 3: F(165) = 10: F(166) = 10: F(168) = 10: F(169) = 10:ăd = 0ă   FOR x = newx TO newx + 18ă      FOR xxx = newy TO newy + 8ă       d = d + 1ă       PixielColor = F(d)ă      TestPoint = POINT(xxx, x)ă      IF PixielColor <> 0 THENă        IF TestPoint <> 7 AND TestPoint <> 10 AND TestPoint <> 12 THENă           PSET (xxx, x), PixielColoră        END IFă      END IFă     ă      NEXT xxxă   NEXT xăăERASE FăEND SUBăăREM $STATICăSUB ManWalk5 (newx, newy)ă'$DYNAMICăăREDIM F(200)ăăF(12) = 6: F(13) = 6: F(14) = 6: F(20) = 6: F(21) = 14: F(22) = 6:ăF(23) = 6: F(24) = 6: F(25) = 6: F(29) = 14: F(30) = 14: F(31) = 14: F(32) = 6: F(33) = 6:ăF(34) = 6: F(35) = 6: F(38) = 14: F(39) = 9: F(40) = 14: F(41) = 14: F(42) = 6: F(43) = 6: F(44) = 6:ăF(45) = 6: F(46) = 14: F(47) = 14: F(48) = 14: F(49) = 14: F(50) = 14: F(51) = 14: F(52) = 14: F(53) = 6: F(54) = 6:ăF(56) = 14: F(57) = 14: F(58) = 14: F(59) = 14: F(60) = 14: F(61) = 6: F(62) = 6: F(63) = 6: F(66) = 4:ăF(67) = 14: F(68) = 14: F(69) = 14: F(70) = 6: F(71) = 6: F(72) = 6: F(75) = 14: F(76) = 14: F(77) = 14:ăF(78) = 14: F(79) = 6: F(80) = 6: F(86) = 14:ăF(94) = 3: F(95) = 11: F(96) = 11: F(103) = 3: F(104) = 11:ăF(105) = 11: F(112) = 3: F(113) = 3: F(114) = 11: F(115) = 11:ăF(121) = 3: F(122) = 3: F(124) = 11: F(130) = 3: F(131) = 3:ăF(133) = 3: F(139) = 3: F(141) = 3:ăF(147) = 3:  F(151) = 3: F(156) = 3:ă'F(160) = 3: F(165) = 10: F(166) = 10: F(168) = 10: F(169) = 10:ăF(159) = 3: F(165) = 10: F(166) = 10: F(168) = 10: F(169) = 10:ăd = 0ă   FOR x = newx TO newx + 18ă      FOR xxx = newy TO newy + 8ă       d = d + 1ă       PixielColor = F(d)ă      TestPoint = POINT(xxx, x)ă      IF PixielColor <> 0 THENă        IF TestPoint <> 7 AND TestPoint <> 10 AND TestPoint <> 12 THENă           PSET (xxx, x), PixielColoră        END IFă      END IFă      NEXT xxxă   NEXT xăERASE FăEND SUBăăREM $STATICă SUB Pause (ticks%)ă    '**** ticks% are 1/18th secondă    DEF SEG = 0ă    DO UNTIL TestTick% > ticks%ă        LastTick% = GetTick%ă        GetTick% = PEEK(&H46C)ă        IF LastTick% <> GetTick% THENă            TestTick% = TestTick% + 1ă        END IFă    LOOPă    DEF SEGă END SUBăăFred Sexton Jr.                SCREEN 13 GRAPHICS UTILITIES   SCREEN,13,GRAPHICS,UTILITIES   Year of 1991 (00:00:00)QB, QBasic             167  5996     G13UTIL.BAS DEFINT A-Ză'$DYNAMICăDECLARE SUB changeclr (ary(), oclr, nclr)ăDECLARE SUB mirror (ary(), bry())ăDECLARE SUB superimp (ary(), xpos, ypos, mode)ăDECLARE SUB scrollup (ary(), xpos, ypos)ăă'***************************************************************************ă'                       SCREEN 13 GRAPHIC UTILITIES                                                                 ă'                            by FRED SEXTON JR.                                     ă'  CHANGECLRă'     Searches an image array for a color and changes it to aă'     different color.ă'     syntax =>  CALL changeclr(array(),oldcolor,newcolor)ă'ă'  MIRRORă'     Returns a mirror image of first array in second array.ă'     ****DIMENSION BOTH ARRAYS TO THE SAME SIZE****ă'     syntax =>  CALL mirror(array1(), array2())ă'ă'  SUPERIMPă'     Puts a graphic image at specified location.ă'     Depending on setting of mode varible the imageă'     is either put in front of or behind the imagesă'     that exist on the screen.ă'     syntax =>  CALL superimp(array(), xpos, ypos, mode)ă'                mode = 0  => put in frontă'                mode = 1  => put behindă'ă'  SCROLLUPă'     Scrolls a graphic image up onto the screen ending upă'     at specifeid location.ă'     syntax =>  CALL scrollup(array(), xpos, ypos)ă'ă'ă'***************************************************************************ăăSUB changeclr (ary(), oclr, nclr)ăăxwidth = ary(0) \ 8                     'get x-axis widthăyheight = ary(1)                        'get y-axis heightăăbytes& = CLNG(xwidth) * CLNG(yheight)   'find # of bytes in imageă                                        'while avoiding overflow errorăăDEF SEG = VARSEG(ary(2))                'set the segmentăaofs = VARPTR(ary(2))                   'get starting offsetăăFOR t& = 0& TO bytes& - 1               'search the required # of bytesă IF PEEK(t& + aofs) = oclr THEN POKE t& + aofs, nclr   'change as neededăNEXTăăEND SUBăăSUB mirror (ary(), bry())ăăbry(0) = ary(0)                         'make bit width the sameăbry(1) = ary(1)                         'make height the sameăăxwidth = ary(0) \ 8                     'get x-axis widthăyheight = ary(1)                        'get y-axis heightăăaseg = VARSEG(ary(2))                   'get the segment of array1ăaofs = VARPTR(ary(2))                   'get the offset of element 2ăbseg = VARSEG(bry(2))                   'get the segment of array2ăbofs = VARPTR(bry(2)) + xwidth - 1      'get the offset to start atăăă                                        'the two sets of "FOR:NEXTă                                        'will effectively step thru array1ă                                        'byte by byteăFOR t = 1 TO yheightă FOR tt = 0 TO xwidth - 1ă    DEF SEG = asegă    value = PEEK(aofs + tt)             'get a value from array1ă    DEF SEG = bsegă    POKE bofs, value                    'put it into array2ă    bofs = bofs - 1ă  NEXTăaofs = aofs + xwidth                    'setup offsets for next rowăbofs = bofs + (xwidth * 2)ăNEXTă                                        'return to default segmentăDEF SEGăăEND SUBăăSUB scrollup (ary(), xpos, ypos)ăăyheight = ary(1)                      'get yaxis heightăypos = ypos + yheight                 'setup starting ypos valueăăFOR t = 1 TO yheightă  ary(1) = t                          'modify the value that PUT will useă  ypos = ypos - 1                     'move ypos up one rowă  PUT (xpos, ypos), ary, PSET         'put image to screenă ă  SOUND 32767, 2                      'use your favorite method to createă                                      'a delay hereă                                      '(I use an routine I wrote ină                                      '            MASM but this will work)ăNEXTăăEND SUBăăSUB superimp (ary(), xpos, ypos, mode)ăăDIM wry(UBOUND(ary))                  'dim a work array the same sizeăăxwidth = ary(0) / 8                   'get x-axis widthăyheight = ary(1)                      'get y-axis heightăăGET (xpos, ypos)-(xpos + xwidth - 1, ypos + yheight - 1), wryă                                     ă                                  'get the target area of screen in work arrayăăăIF mode = 0 THEN                      'mode 0 means put in frontăă FOR t = 2 TO UBOUND(ary)             'search the source arrayă ă  DEF SEG = VARSEG(ary(t))            'starting with element 2ă  lb = PEEK(VARPTR(ary(t)))           'get the lower byteă  ub = PEEK(VARPTR(ary(t)) + 1)       'get the upper byteăă  IF lb <> 0 THEN                     'if soucre array isn't zeroă   DEF SEG = VARSEG(wry(t))ă   POKE VARPTR(wry(t)), lb            'put it into work arrayă  END IFăă  IF ub <> 0 THEN                     'same thing for upper byteă   DEF SEG = VARSEG(wry(t))ă   POKE VARPTR(wry(t)) + 1, ubă  END IFăă NEXTă DEF SEG                              'return to default segmentăăELSE                                  'nonzero mode means put behindăă FOR t = 2 TO UBOUND(wry)             'search work arrayă  DEF SEG = VARSEG(wry(t))            'starting with element 2ă  lb = PEEK(VARPTR(wry(t)))           'get lower byteă  ub = PEEK(VARPTR(wry(t)) + 1)       'get upper byteăă  IF lb = 0 THEN                      'if work value is zeroă   DEF SEG = VARSEG(ary(t))           'get corresponding byteă   lb = PEEK(VARPTR(ary(t)))          'from source arrayă   DEF SEG = VARSEG(wry(t))           'put it into work arrayă   POKE VARPTR(wry(t)), lbă  END IFăă  IF ub = 0 THEN                      'same thing for upper byteă   DEF SEG = VARSEG(ary(t))ă   ub = PEEK(VARPTR(ary(t)) + 1)ă   DEF SEG = VARSEG(wry(t))ă   POKE VARPTR(wry(t)) + 1, ubă  END IFăă NEXTă DEF SEG                              'return to default segmentăEND IFă                                     ăPUT (xpos, ypos), wry, PSET           'put the resulting array on screenăăEND SUBăăLucifer Productions            WORMHOLE                       VGA,WORMHOLE                   05/11/1995 (00:00:00)  QB, QBasic             247  23328    WORMHOLE.BAS' Wormhole:ă' Lucifer's first productionă' Release Date: May 11th, 1995ă'ă'   This scrolltext string exceeded Qbasic's limitation. So we had toă' rewrite the code to accomidate it. Pretty damn good, eh? It took about fiveă' hours to write the text. That's longer than it took to write the code.ă'   So I suppose you are going to want some technical info. O.k. Wormhole isă' a looping scrolltext demo with a palette-rotating wormhle, and a movingă' logo.ă'   The story of Lucifer:ă'   It all started way the hell back in October of '94 when Psycho BFG (whoă' called himself gristle then) started a demo group called IBMLAND. You mustă' keep in mind that IBMLAND was only a joke, that became less of one when ită' spread. Anyway, IBMLAND's members became too lazy and were kicked out byă' Psycho BFG and I.ă'   Instead of releasing demos under our own names, he and I formed a newă' demo group, Lucifer. And so now the only pure 100% Qbasic group is the oneă' that rose from the ashes of IBMLAND: Lucifer.ă'   The only problem is that Lucifer has only two members (Psycho BFG and Iă' obviously), and we have not been successful at finding motivated members.ă'   So in conclusion, if you would like to contribute to Lucifer's productionă' and are willing to actually DO SOMETHING, then write to me at:ă'ă' 4727 Holly Lake Drive,ă' Lake Worth, FL, USA, 33463.ă'ă' Remember: if you want a reply, use the password found in the scrolltext!ă'ă'  If you do not feel like sending a letter all the way to Lake Worth, FL,ă' want to ask questions about these demos, or get the old IBMLAND demosă' then write to Psycho BFG at:ă'ă' 518 Jennings Street,ă' Greenacres, FL, USA, 33463ă'ă' IBMLAND demos available: Anarchy, Spectrum, Art, Mystic Circle, Dominoă' For a limited time only, we have Art version 1.2 with new texts and colorsă' by ThE DaEmOn of ex-IBMLANDă'ă' Note from Psycho BFG: You KNOW we're never going to get any mail, right?ă'                  666: No shit, Sherlock, but it would be cool if we did!ă'           Psycho BFG: So prove us wrong!  We'll even pay for our own stampă'                       to reply and actually we're lying about the passwordă'                       requirement.ă'                  666: You may think Basic sucks (if so, your right), bută'                       it does have some advanteges like: the source codeă'                       comes with it and uh... well... like... yeah!ă'ă' Lucifer is:ă' 666 - Organizer, Bugs, GFX, PRă' Psycho BFG - Main Bugs, GFX, Noiseă'ă'ă' Psycho BFG's guide to reading this scrolltextă' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă' The entire scrolltext takes almost 30 minutes to complete, so get someă' refreshments and a comfortable chair.ă' All texts in fading red are just highlightedă' Usually Red text means I am talking 'out loud'ă' Usually Blue text means 666 is talking 'out loud'ă' If it's just our names, as in a red "Psycho BFG" or blue "666" thenă' they are just meant to be highlightsă' Also there are places in the demo where we switch typers without anyă' visual clues; you have to figure these out yourself.ă ăSCREEN 13ăLOCATE 24, 5ăCOLOR 255ăPALETTE 255, 63 * 65536 + 63 * 256 + 63ăPRINT "PLEASE WAIT - INITIALIZING DEMO";ăVIEW SCREEN (0, 0)-(319, 179)ăREAD scr$ălinen = 1ălinep = 1ăă'OUT 968, 0ă'FOR i = 1 TO 765ă'OUT 969, 0ă'NEXT iăăOUT 968, 12ăOUT 969, 63ăOUT 969, 0ăOUT 969, 0ăOUT 968, 9ăOUT 969, 0ăOUT 969, 0ăOUT 969, 63ăăn = 0ăx = 5ăFOR i = 200 TO 40 STEP -1ăn = n + 1ăIF n = 6 THEN n = 1ăx = x / 1.003ăFOR j = 1 TO 10ăCIRCLE (160, i), x, n, , , .5ăx = x * 1.003ăNEXT jăNEXT iăăVIEW SCREEN (0, 0)-(319, 199)ăăDIM c(265)ăFOR i = 1 TO 6ăc(i) = i * (63 / 6)ăNEXT iăFOR i = 7 TO 256ăc(i) = 0ăNEXT iăăFOR i = 1 TO 49ăCIRCLE (160 + i - i, 70 + i - i), i, 200 - iăCIRCLE (160 + i - i, 71 + i - i), i, 200 - iăCIRCLE (160 + i - i, 72 + i - i), i, 200 - iăNEXT iăăLINE (0, 0)-(320, 10), 0, BFăăLOCATE 1, 32ăCOLOR 1ăPRINT "LUCIFER"ăFOR i = 248 TO 320ăFOR j = 0 TO 10ăIF POINT(i, j) > 0 THEN LINE ((i - 196) * 2, j * 2 + 50)-((i - 196) * 2 + 2, j * 2 + 52), 15, BFăNEXT jăNEXT iăăFOR i = 100 TO 220ăFOR j = 49 TO 75ăIF POINT(i, j) = 15 THEN GOTO skip2jăIF POINT(i + 1, j + 1) = 15 THEN PSET (i, j), 50ăIF POINT(i, j + 1) = 15 OR POINT(i + 1, j) = 15 THEN PSET (i, j), 49ăIF POINT(i - 1, j + 1) = 15 OR POINT(i + 1, j - 1) = 15 THEN PSET (i, j), 48ăIF POINT(i, j - 1) = 15 OR POINT(i - 1, j) = 15 THEN PSET (i, j), 47ăIF POINT(i - 1, j - 1) = 15 THEN PSET (i, j), 46ăskip2j:ăNEXT jăNEXT iăFOR i = 100 TO 220ăFOR j = 49 TO 75ăIF POINT(i, j) = 15 THEN PSET (i, j), 32 - (j - 49)ăNEXT jăNEXT iăăFOR i = 1 TO 5ăn = i * 12ăc = n * 65536 + n * 256 + năPALETTE i + 45, căNEXT iăăLINE (0, 0)-(320, 10), 0, BFăăFOR i = 1 TO 50ăr = i + 13ăG = i - 1ăc = G * 256 + răPALETTE i + 150, căNEXT iăăFOR i = 0 TO 15ăc = i * 4ăn = c * 65536 + c * 256 + căPALETTE i + 16, năNEXT iăăLOCATE 1, 12ăCOLOR 255ăPRINT "LUCIFER KICKS ASS!"ăDIM ass(200, 8)ăGET (50, 0)-(250, 8), assăLINE (50, 0)-(250, 8), 0, BFăax = 0ăav = 0ăăDIM text(312 * 8)ăăDOăOUT 968, 1ăFOR j = 1 TO 5ăOUT 969, c(j)ăOUT 969, 0ăOUT 969, 0ăNEXT jăăPUT (ax, 0), ass, PSETăax = ax + avăIF ax < 50 THEN av = av + 1 ELSE av = av - 1ăăb = c(5)ăFOR j = 5 TO 2 STEP -1ăc(j) = c(j - 1)ăNEXT jăc(1) = băăz = TIMER * 100ăDOăLOOP WHILE TIMER * 100 - z < 1ăătm = tm + 1ăIF tm < 3 THEN GOTO skip2lăGET (16, 180)-(311, 199), textăPUT (8, 180), text, PSETăLOCATE 24, 39ăDOăat$ = MID$(scr$, linep, 1)ălinep = linep + 1ăIF linep > LEN(scr$) THENă linep = 1ă linen = linen + 1ă IF linen > 16 THEN : linen = 1: RESTOREă READ scr$ăEND IFăIF sl > ln THEN sl = 1ăIF at$ = "*" THEN clr = 1ăIF at$ = "@" THEN clr = 2ăIF at$ = "#" THEN clr = 3ăIF at$ = "$" THEN clr = 4ăIF at$ = "%" THEN clr = 12ăIF at$ = "^" THEN clr = 9ăIF at$ = "&" THEN clr = 255ăLOOP WHILE INSTR("*@#$%^&", at$) > 0ăCOLOR clrăPRINT at$;ătm = 1ăskip2l:ăLOOP WHILE INKEY$ = ""ăCLS                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 'If you are reading this, we told you about it!!!ăăDATA "  *H@e#l$l*o@,# $p*e@o#p$l*e$!  &It's me, %Psycho BFG &of *L@u#c$i*f@e#r &typing.  I'm here at ^666&'s house, and he's about to go get us some food.  Scrolltext writing can be a strenuous task, even for the experienced, so we r going with the preventive medecine trend and stocking up before we really get into it... wait a sec... I just realized that this scroll is pure white... I ripped some code from a demo of mine from quite some time ago, and it seems to be missing the vital code for 'scrolltext commands'... here, I'll fix it now.  Ah... as I'm sure you've noticed, these texts have neat colors now... let me show you those again: we can have *R@E#D* F@A#D$I*N@G&...  and of course the standard %Psycho BFG red &and ^666 blue.  &So... here, before I forget, let's hand out some credits and greetings.  This demo was coded by %Psycho BFG, &and of course the scrolltext was written by ^b%o^t%h ^o%f ^u%s&.  ok, since ^666& is begging to write the greetings, I'll let him take over for a little while.. i guess... "ăDATA " *D@a#m$n *i@t#!$!*! &What a fucking liar! I wasn't begging. Anyways, greetings go to: Coolgrease, Sinner, and Satanic Majesty of ex-IBMLAND... Cascada... Pilveveikot (I have no goddamn idea how to spell it)... Future Crew (nice name (@N#O$T&))... Electro Motive Force... Type One of TFL... Tran (Hell was especially coool)... Bill Gates... <-- whoa look back there! Sorry about that bug!... Stefan Gagne... Pis and Egor of Future Wrec... Dr. Sbaitso... Icecoldhacknslashdeathbladerunner... Topaz Beerline... All of those mental floss people... Mike Judge... I gess that about does it for the greets... Now for the fuckings... They go to: That guy that said IBMLAND sucked because he saw a Future Crew demo that was better... Nad Rotezc (for hosting MTV Sprots)... Jay Leno... Sonic PC (for screwing up the *A@s#s$e*m@b#l$y* @'#9$4&)... Steve Wazniak (for the sucky Macintosh)... Bill Gates (whew we finally got it right this time)... All cobol lamers... Gerber King (for those sucky anti McReynalds commercials)... "ăDATA "Well, ^666 &went to go molest his cat, so I'm resuming the typing... hey, he just kicked me!  Damn it!  Alright, let's have an interview.  %Psycho BFG: &Hey ^666,& tell us about yourself...  ^666: &Well, ... uh, well, there's really not much to say about me... so lets skip the crap questions.  %Psycho BFG: &Ok, ok ok... did you have any trouble coding this demo?  ^666: &No.  I didn't code it.  Dumbass.  %BFG: &Oh that's right... I did... well um... do you do any coding yourself?  ^666: &Yes, I do. I'm working on our next demo, Loser. It will be featuring some better effects... like crossfading, dotmorphing, a mosaic. Other than that I have no idea what will be in it... %Psycho BFG: &Ok...- ^666: &Will you stop typing 'ok'?!   %Psycho BFG: &I'm asking the questions here... ok... hahaha okokokokokok  hahaha!  Alright... now... ^666&... you said some 'better effects'.  Did you mean better effects than the ones in this demo, or just good effects in general?  ^666&: better than this demo, dumbass!  %BFG: &Alright, "ăDATA "I'm going to kick your ass now!  %Wham! ^ow!  %Pow!  ^Quit it!  Slam!  %ow you assmunch!  ^666&: O.k. Now the keboard is all mine and you can't do anything about it (at least not when you're lying on the floor, unconsious (%if I'm unconsious, how am I helping you with spelling?&)(That was just me typing to fool you))... Uh oh %Psycho BFG &just woke up... Now he's whining about how when he stomps on the floor, his nose hurts... Whew he shut the hell up... Oh yeah, I guess that concludes this interview. See us in our next scrolltext demo for another one... Now I will pass the keyboard over to %Psycho BFG&, who has been bugging for it, for quite some time now. *W@h#e$w*!&  I thought he was never going to shut up!  So now I'm going to talk about Loser a bit... if you ever get that demo (you got this one, didn't you?), then just remember, all the SUCKY parts were coded by ^666.&  And  ^wham! %Ow, quit it!  ^Give me that fart knocker. &Now for some @R#E$A*L& info on Loser. %Psycho BFG& was lying again... ^cut it out, "ăDATA "asswipe& he just hit me... excuse me for one moment; I h%gfsds&a%gfsaghh&v%gfdg&e to%gfsdgs ^quit it! &I have to settle something... %Ah... that was easy... &Now let's get back to the scrolltext.  This text is now about 4200 bypes (^bypes? %bytes, assmunch!&) long... that about one quarter of what we want it to be total... so be prepared for the rest of it... or if you're a *T@O#T$A*L @W#U$S*S &then you can just skip out and read it directly from the .bas file.  But then you wouldn't see all the *C@O#O$L $E#F@F*E$C#T@S*!&, <- like that one.  You'll just see garbage like VS%$TW#BH T^WVYE^# %G& (well actually we can't show you what you'd see exactly because it would cause effects in the scroll!!! @d#a$m*n #i$t*!@!#!&)  Well it doesn't matter anyway because you're still reading this, arent you?  Unless you're being a wuss.  Ok, now if you want to contact us, send mail to   4727 Holly Lake Drive    Lake Worth, FL   33463   - that's 666... i mean ^666&'s house... and remember, if you want a reply, the password is: "ăDATA "$#@%%#&D$%@$%&O$#@$&R%#%$#@*&K!!!  Got it?  If you did not, well *F@U#C$K @Y#O$U*!@!#!  &Alright... now ^666 &wants the keyboard oh he just changed his mind but TOO BAD!  Here is ^666!& Asswipe!!!... %Ow! Cut it out!!! ^Well if you're going to bitch about it then O.k.& So like do you want to see some anagrams... if not, tough shit!!! Here it goes... The four seasons-=> Fart on Sues shoe... Santa Clause-=> Satan's a clue... The mind is a terrible thing to waste-=> Broil tainted semen with great shit (no racism/offense intended)... And the big one...: You rob dead Zack Braggwelsche of his fatty pit-=> Go get fistfucked by a psycho %(BFG)& with a razor blade (offense intended)... Anagrams *k$i#c@k *a$s#s@!*!$!& O.k. Now I think I'll let %Psycho BFG& type... i am typing this with my nose... no really!  i am typing this sentence with another part of my body but I wont tell you which... hahaha!  So let's talk about cool people vs. dorky people.  As you can tell, I am a cool person.  ^666, &on the other hand, is a total dork.  Uh oh... he's  "ăDATA "starting to lurk behind me...  ^you don't know when it's coming, dude...  %Ow!!! &ok, just to get you back, I'm gonna give you the keyboard again!!!  Muahahahahahahahahaaa!  ^No way it's your's %Ok, I'll type as long as you promise not to hit me... ^I'm not going to make a promise I can't keep... %Well fuck that... here you go, ^667. ^O.k., Sane LFG... %ššš... ^Chopsy G(oat) B(utt) F(ucker)... %6(IQ points) 6(years old) 6(times he masturbates each day)... ^iD-ripper-offer... %90210... ^You forgot to make it %red^, dumbass!... %look again, dork!  ^That's just because you change it, BiFG... %Enough of this.  Let's quit insulting each other, ^999. %It's time we got back to the real scrolltext.  &Do you really think that the public wants to hear about our arguments? ^I don't give a flying fuck about the public &(<-=-= sorry about that I really do)...  &To tell the truth... I think they really DO want to hear about it...  %POW!!!  ^Yeeow!  %WHACK!  ^Ow!  %SLAM!  ^Smack!!! Eat that Psucko BFG... %Say what you want, ^90210%, but @G#O$D% is on my side. ^What a wuss!!! "ăDATA "*G$O#D^ isn't going to save your ass every time... You need to learn how to take care of yourself!!! &A message to @G#O$D&: Don't zap him yet... give him time to repent... ^90210&, this may be your last chance...  Oh BTW!  This text is now about 7.5k long!  Half of our goal!!  @L#U$C*I@F#E$R& @F#O$R*E@V#E$R*!@!#!  ^Do you really think *G$O#D^ is going to save your ass if you keep doing things like that? %like what?  Being nice to you?  I thought we were supposed to be friends or something... ^We R, it's just that you keep bragging about how *G$O#D^ is going to save your ass but not mine... %Well if I didn't warn you I would be a real jerk, wouldn't I?  I'm far to noble to lie about such things anyways.  ^Noble?! Ha! You've got to be kidding... The only thing that makes you noble is your amazing ability to be a dumbass!! Ow that hurt!!, %Psicko Butt-Fucker^!! %Quit standing behind me, ^90210%!  Look... I just am sick of fighting!  We've been fighting for the last... lets see... almost the last 2k!  I just want to get on "ăDATA "with the demo... even if you suck, we're still in the same group, ^90210%, and we should cooperate.  ^What the hell does 'even if you suck' supposed to mean? %Um... nothing... ^902%... ^666% i mean... it um... it's nothing, really!  ^Yeah-fucking-right, %Psycho Boy-Fucking-Gomer^... %Is that really me?  ^Didn't I type it, ashino baka!!! %Do you wish that you type it, ashino baka?  ^I *d$i#d^ type it, Psucko... %I see ^So do I... %I need more data... ^Tough shit, Dr. Sbanking! %Move your hands of my keyboard. ^And if I don't... %Don't you think that you can... ^I know I can, Sbanking... %Are you glad that you can, Sbanking...?  ^Fuck you!!! %90210, you are getting me to GTRSEY24... parity warning... ^Fuck fuck fuck fuck!!! %YOU YOU YOU YOU!  @I#'$m @b#a$c*k@!#!$!%!  Heyyyyy... %Psycho BFG& is back from @H#E$L*L&, where I've spent my winter vacation... Hell really is nice in the winter and you should visit sometime. -^you have been playing too much Doom&- Anyways... hey, ^666&, you spelled DooM wrong!  ^bite me& Shut up!  Anyways, "ăDATA "this text is almost 10k long! Remember our goal is to get past 15k, so there's still a bit to type... ^666, & do you have anything to say?  Not right now... I think we should go do something else and then come back and finish this text...  Alright... lets go...  3:00pm signing off for now...       %Psycho BFG& is back!  Its been 80 minutes since we saved the last time... what?  You munch!  Just because no time has passed for you, doesn't mean it hasn't for us!!!  Here look...           See I just @l#e$f*t &a leak... it took about a minute... you see... the only way we can show you time is holding down the space bar             and that gets boring for both you and us.  Did that clear anything up?  Now... I believe ^666& has something to say...     Yes it's me, ^666&... I'm back (%no shit&)... O.k. I got a cool joke. There is this little kid playing with his train set, saying: 'all of you mother fuckers that want to get off, get off. And all of you suns of bitches that want to stay on, stay on!.' So like, then his mother told him to go in his room for two hours. Two hours "ăDATA "later... he comes out of his room AND says: 'all passengers who would like to get off, get off. All passengers who would like to stay on, stay on. If you r angry about the two hour delay, see the @b#i$t*c@h& in the kitchen'... Cool, eh? O.k. now it's %Psycho BFG's& turn to tell a joke...  Well, I was going to tell the one about the jew who won the lottery using his concentration camp tatoo as his numbers, but some people might find that offensive... so I'll go with.. the Tennis Elbow... alright... see there's a guy who has an injury, so he goes to a doctor's office.  The doctor tells him to piss in a cup, pour it into the machine in the hallway, and insert 75 cents.  His result was a card saying: 'You have tennis elbow.  Compress with a hot towel for fifteen minutes a day for two weeks.'  Well, he did, but he couldn't stop thinking about that machine... finally curiosity overcame him: he got his wife and daughter to both piss in the cup, he dripped some radiator fluid from the car into the cup, and to top it all off, he ejaculated into it.  "ăDATA "The next day he went up to the machine and poured it in, and entered 75 cents.  The machine clanked around for about five minutes and finally spat out a card that read: 'Dear sir: Your wife has the clap, your daughter is pregnant, your car is about to blow an axle, and if you don't stop jerking off, you'll @N#E$V*E@R &get rid of that tennis elbow!'  Let's see ^666& top that one...  No problem... This story/joke is entitled 'Italian Goes to Breakfast in L.A.' (No offense to any Italian people). So 'dis one day I went out to brekfest and I ordered two peese of toast two eggs and two pancakes. De waiter only brought me one peese of toast. So I say to heem 'I want two peese.' And so he said to me 'the bathroom is that way.' So I say to heem 'no you don't undarstand. I want two peese on tha plate.' And he say to me 'you bettar not piss on the plate you sumanabitch.' The end... Beat that %Psycho BFG&...  Damn, I don't know if I can... well I'll try my version of a foreigner in L.A.  It's a short one, so you don't have to read all that setup crap.  'Dear sir... could you tell me "ăDATA "the way to Grand Central Station... or shall I just go fuck myself?'   Um... I gues ^666& wins... but it's not my fault.  I was going to use his next anyhow.  Yes I won... That's because I 'm... (%WAIT, I JUST THOUGHT OF ONE!!!)  &Ok here's %Psycho BFG's& joke du jour... What do milk and elephants have in common?  . . . . . . . . . . . . They both come in quarts!!!  Of course some of you might not get that one... 'wait a few more years, kid'  Now back to the regularly scheduled broadcast.  Anyway... as I was saying, I won because I am cooler (%That just means he didn't get my joke... I wonder why...&) *F$U#C@K *Y$O#U@!!!^ I got your damn joke (%yeah, I just explained it to him&), but I still won!!! Besides elephants come in gallons (%how would you know? ^I asked your dad! %that was stupid... hehehe)& Hey, I just thought of something... 1961 upsidedown is 1961!!!  %Psycho BFG& is back.  I figured I better take over or you'll die of boredom (actually, he just had to @l#e$a*v@e &a dump.  Anywayz I'd like to talk about stuff now.  "ăDATA "For example, this text is now 13.5k long!  This is not something I'm proud of, but it's split about half and half I'd say between me and ^667& typing (he's not here right now so I can say @W#H$A*T@E#V$E*R @I #W$A@N*T&).  This equality is something I am going to fix right here and now... I will type... say, until the end of the line.  Alright... now I'd like to send a few greets myself (I helped with the above greets, but some people were left out).  Since you've read for so long, I will reward you with all the @C#O$O*L &greetings.  Greetings from me to ULTRA2KRAD4U (2KRAD4U was a KICKASS demo... try again in basic though)... INFERIORS (do some @R#E$A*L &basic!)... Daemon (both of them...ThE DaEmOn, and Daemon)... Sorcerers (keep up them cool demos)... Zodiak (try a few PC speaker tunes... if you want, I'll send you my PC-Tracker)... The Flamooties (or whatever you're called... Kukoo2 had a good start, but the second part wasn't as good)... 508537 (great name, guys!)... Ford Prefect (all of 'em)... Sand (eggs and oisters?)... Ok... that's one line... want to try for 2 in a row?  "ăDATA "Here's the second!  Now for the list of least used hyphenated words, in descending order:  OWL-FLAVORED...LICK-PROOF...PRE-SPANKED...HAT-RESISTANT...CONDOM-FLAVORED...MOOKIE-PROOFED...PLUTONIUM-FREE...FLY-JAMMED...POST-OPENED...FART-FLAVORED...and finally...@S#U$G*A@R#-$F*R@E#E$!&  Now... hey did you know that in some versions of battle chess you can see the queens nipples poking at her shirt as she goes to make a kill?  Hey I just typed the longest sentence ever known to man but when I tried to copy it to get a byte count it just was truncated at the 256 byte mark and I KNOW that there was more than that, probably because it was cut off in the middle of the word 'dumbass'.  Lets get a byte count of that.  On second thought lets not.  If it's less than 256 bytes I will be unsatisfied and if it's more then I'll have to retype it all.  Instead, let's just count the number of bytes in the entire scrolltext.  <-= @A#T @T#H$A*T @M#A$R*K @T#H*E @S#C$R*O@L#L$T*E@X#T $I*S @E#X$A*C@T#L$Y @1#5$9*1@3 @b#y$t*e@s @l#o$n*g@!#!$!*!  @W#E @H#A$V*E @S#U$C*C@E#E$D*E@D#!$!*!  &But do you think we are going to stop here?  "ăDATA "Well, whatever your answer is, YOU'RE RIGHT!!!         "ăăRich Geldreich                 3-D WIREFRAME PROGRAM          3D,WIREFRAME                   Year of 1992 (00:00:00)QB, QBasic             404  13852    3D.BAS      'Well, here you go! This is an improved, easier to read version of myă'fast 3-D wireframe program. I've done some things that a coupleă'people recommended and I've also sped it up a little.ă'(The number at the upper left corner of the screen is the number of framesă'per second that are being displayed. It's updated every 20 frames, soă'it will be a little choppy.)ăăă'3DEXP1a.BAS By Rich Geldreich April 16th, 1992ă'(This version has some documentation...)ăăDEFINT A-ZăTYPE LineTypeă    X AS INTEGERă    Y AS INTEGERă    Z AS INTEGERă    X1 AS INTEGERă    Y1 AS INTEGERă    Z1 AS INTEGERăEND TYPEăDIM Points(100) AS LineTypeăDIM Xs(100), Ys(100), Xe(100), Ye(100), Xn(100), Yn(100)ăDIM Xs1(100), Ys1(100), Xe1(100), Ye1(100)ăDIM X(100), Y(100), Z(100), Pointers1(100), Pointers2(100)ăDIM R(100)ăDIM Cosine&(360), Sine&(360)ăCLSăPRINT "3-D Craft"ăPRINT "By Rich Geldreich 1992"ăPRINTăPRINT "Keys to use: (Turn NUMLOCK on!)"ăPRINT "Q...............Quits"ăPRINT "Numeric keypad..Controls your position(press 5 on the keypad"ăPRINT "                to completly stop yourself) "ăPRINT "-...............Forward exceleration"ăPRINT "+...............Backward exceleration"ăPRINT "Arrow keys......Controls the rotation of the craft"ăPRINT "F...............Excelerates the craft (Forward)"ăPRINT "B...............Slows the craft (Backward)"ăPRINT "S...............Stops the craft"ăPRINT "A...............Toggles Auto Center, use this when you lose";ăPRINT " the craft"ăPRINT "C...............Stops the craft's rotation"ăPRINT "V...............Resets the craft to starting position"ăPRINTăPRINT "Wait a sec..."ăă'The following for/next loop makes a sine & cosine table.ă'Each sine & cosine is multiplied by 1024 and stored as long integers.ă'This is done so that we don't have to use any slow floating pointă'math at run time.ăa = 0ăFOR a! = 0 TO 359 / 57.29577951# STEP 1 / 57.29577951#ă    Cosine&(a) = INT(.5 + COS(a!) * 1024)ă    Sine&(a) = INT(.5 + SIN(a!) * 1024): a = a + 1ăNEXTă'Next we read in all of the lines that are in the object...ăFOR a = 0 TO 44ă    READ Points(a).X, Points(a).Y, Points(a).Ză    READ Points(a).X1, Points(a).Y1, Points(a).Z1ăNEXTă'Here comes the hard part... Consider this scenario:ăă'We have two connected lines, like this:ăă'   1--------2 and 3ă'            |ă'            |ă'            |ă'            |ă'            4ă'Where 1,2, 3, & 4 are the starting and ending points of each line.ă'The first line consists of points 1 & 2  and the second lineă'is made of points 3 & 4.ă'So, you ask, what's wrong? Nothing, really, but don't you see thată'points 2 and 3 are really at the sample place? Why rotate them twice,ă'that would be a total waste of time? The following code eliminates suchă'occurrences from the line table. (great explanation, huh?)ăăNumberLines = 45ă'take all of the starting & ending points and put them in one bigă'array...ăNp = 0ăFOR a = 0 TO NumberLines - 1ă    X(Np) = Points(a).Xă    Y(Np) = Points(a).Yă    Z(Np) = Points(a).Ză    Np = Np + 1ă    X(Np) = Points(a).X1ă    Y(Np) = Points(a).Y1ă    Z(Np) = Points(a).Z1ă    Np = Np + 1ăNEXTă'Now set up two sets of pointers that point to each point that a lineă'is made of... (in other words, scan for the first occurrence of eachă'starting and ending point in the point array we just built...)ăFOR a = 0 TO NumberLines - 1ă    Xs = Points(a).Xă    Ys = Points(a).Yă    Zs = Points(a).Z            'get the 3 coordinates of the start pointă    FOR B = 0 TO Np - 1         'scan the point arrayă        IF X(B) = Xs AND Y(B) = Ys AND Z(B) = Zs THENă            Pointers1(a) = B    'set the pointer to point to theă            EXIT FOR            'point we have just foundă        END IFă    NEXTă    Xs = Points(a).X1           'do the same thing that we did aboveă    Ys = Points(a).Y1           'except scan for the ending pointă    Zs = Points(a).Z1           'of each lineă    FOR B = 0 TO Np - 1ă        IF X(B) = Xs AND Y(B) = Ys AND Z(B) = Zs THENă            Pointers2(a) = Bă            EXIT FORă        END IFă    NEXTăNEXTă'Okay, were almost done! All we have to do now is to build a tableă'that tells us which points to actually rotate...ăNr = 0ăFOR a = 0 TO NumberLines - 1ă    F1 = Pointers1(a)   'get staring & ending point numberă    S1 = Pointers2(a)ă    IF Nr = 0 THEN      'if this is the first point then it of courseă                        'has to be rotatedă        R(Nr) = F1: Nr = Nr + 1ă    ELSEă        found = 0       'scan to see if this point already exists...ă        FOR B = 0 TO Nr - 1ă            IF R(B) = F1 THENă                found = -1: EXIT FOR    'shoot, it's already here!ă            END IFă        NEXTă        IF NOT found THEN R(Nr) = F1: Nr = Nr + 1   'point the pointă                                                    'in the array it weă    END IF                                          'can't find it...ăă    found = 0   'now look for the ending pointă    FOR B = 0 TO Nr - 1ă        IF R(B) = S1 THENă            found = -1: EXIT FORă        END IFă    NEXTă    IF NOT found THEN R(Nr) = S1: Nr = Nr + 1ăNEXTăPRINT "Press any key to begin..."ăa$ = INPUT$(1)ă'The following sets up the rotation & perspective variables.ăă'Vs = the screen that is currently being viewedă'Ws = the screen that is currently being worked onăVs = 1: Ws = 0ăă'Deg1 & Deg2 are the two angles of rotationă'D1 & D2 are the deltas of each axes. If D1 = -5, for instance, thenă'Deg1 will be decreased 5 degress every frame.ăDeg1 = 0: Deg2 = 0: D1 = 0: D2 = 0ăă'Spos & Mypos are for the perspective routines...ă'Spos is the screen's Z coordinate and Mypos is the users Z coordinateăSpos = -250: Mypos = 0ăă'Mx, My, and Mz are the coordinates of the user.ă'Ox, Oy, and Oz are the coordinates of the craft.ăMx = 0: my = 0: Mz = 0: Ox = 0: Oy = 0: Oz = -260ă'main loopăNumberOfFrames = 0ăDEF SEG = &H40ăStartTime = PEEK(&H6C)ăDOăă    'swap the viewing and working screens for page flipping...ă    SWAP Vs, Wsă    SCREEN 9, , Ws, Vsăă    'adjust the angles according to their deltas...ă    Deg1 = (Deg1 + D1) MOD 360ă    Deg2 = (Deg2 + D2) MOD 360ă    'fix the angles up if they go out of rangeă    IF Deg1 < 0 THEN Deg1 = Deg1 + 360ă    IF Deg2 < 0 THEN Deg2 = Deg2 + 360ă    'get the sine and cosine of each angle from the tablesă    'that were prepared at the beginning of the programă    C1& = Cosine&(Deg1): S1& = Sine&(Deg1)ă    C2& = Cosine&(Deg2): S2& = Sine&(Deg2)ăă    'now we must adjust the object's coordinatesă    'based on how quickly it is moving...ăă    X = Speed: Y = 0: Z = 0ăă    X1 = (X * C1&) \ 1024: Y1 = (X * S1&) \ 1024ă    X2 = (X1 * C2&) \ 1024: Zn = (X1 * S2&) \ 1024ă    Ox = Ox + X2: Oy = Oy + Y1: Oz = Oz + Znă    IF Oz > 32000 THEN Oz = 32000ă    IF Oz < -32000 THEN Oz = -32000ă    IF Ox > 32000 THEN Ox = 32000ă    IF Ox < -32000 THEN Ox = -32000ă    IF Oy > 32000 THEN Oy = 32000ă    IF Oy < -32000 THEN Oy = -32000ăă    'if Atloc is true then Auto-Center is on...ă    IF Atloc THENă        Mx = Mx + (Ox - Mx) \ 4ă        my = my + (Oy - my) \ 4ă        Mz = Mz + ((Oz + 200) - Mz) \ 4ă    ELSEă        'adjust the users position based on how much he is moving...ă        Mz = Mz + Mzm: Mx = Mx + Mxm: my = my + Mymă        IF Mz > 32000 THEN Mz = 32000ă        IF Mz < -32000 THEN Mz = -32000ă        IF Mx > 32000 THEN Mx = 32000ă        IF Mx < -32000 THEN Mx = -32000ă        IF my > 32000 THEN my = 32000ă        IF my < -32000 THEN my = -32000ă    END IFă    '(Wait for vertical retrace, reduces flicker. This was recommendedă    'by someone on the echo but I can't remember who! Thanks)ă    WAIT &H3DA, 8ă    'erase the old lines...ă    IF Ws = 1 THENă        FOR a = 0 TO Ln(Ws) - 1ă            LINE (Xs1(a), Ys1(a))-(Xe1(a), Ye1(a)), 0ă        NEXTă    ELSEă        FOR a = 0 TO Ln(Ws) - 1ă            LINE (Xs(a), Ys(a))-(Xe(a), Ye(a)), 0ă        NEXTă    END IFă    'print frames per secondă    LOCATE 1, 1: PRINT a$ă    'rotate the points...ă    FOR a = 0 TO Nr - 1ă        R = R(a): Xo = X(R): Yo = Y(R): Zo = Z(R)ă        X1 = (Xo * C1& - Yo * S1&) \ 1024ă        Y1& = (Xo * S1& + Yo * C1&) \ 1024 - my + Oyă        X1& = (X1 * C2& - Zo * S2&) \ 1024 - Mx + Oxă        Zn = (X1 * S2& + Zo * C2&) \ 1024 - Mz + Oză        'if the point is too close(or behind) the viewer thenă        'don't draw it...ă        IF (Mypos - Zn) < 15 THENă            Xn(R) = -1: Yn(R) = 0: Zn = 0ă        ELSEă            'Put the point into perspective...ă            'The original formula was:ă            'Xnew=Xnew+( -Xold * ( (Spos-Z) / (MPos-Z) ) )ă            'Ynew=Ynew=( -Yold * ( (Spos-Z) / (Mpos-Z) ) )ă            v = (1330& * (Spos - Zn)) \ (Mypos - Zn)ă            Xn(R) = 320 + X1& + (-X1& * v) \ 1330ăă            'The Y coordinate is also multiplied by .8 to adjustă            'for SCREEN 9's height to width ratio...ăă            Yn(R) = 175 + (8 * (Y1& + (-Y1& * v) \ 1330)) \ 10ă        END IFă    NEXTă    'draw the lines...ă    '(There are two seperate cases, each puts it's coordinatesă    'in a different array for later erasing. I could of used aă    '2 dimensional array for this but that is slower.)ă    IF Ws = 1 THENă        Ln = 0ă        FOR a = 0 TO NumberLines - 1ă            F1 = Pointers1(a): S1 = Pointers2(a)ă            Xn = Xn(F1): Yn = Yn(F1)ă            'if Xn<>-1 then it's in view...ă            IF Xn <> -1 THENă                IF Xn(S1) <> -1 THENă                    X1 = Xn(S1): Y1 = Yn(S1)ă                    LINE (X1, Y1)-(Xn, Yn), 14ă                    'store the lines so they can be erased later...ă                    Xs1(Ln) = X1: Ys1(Ln) = Y1ă                    Xe1(Ln) = Xn: Ye1(Ln) = Ynă                    Ln = Ln + 1ă                END IFă            END IFă        NEXTă    ELSEă        Ln = 0ă        FOR a = 0 TO NumberLines - 1ă            F1 = Pointers1(a): S1 = Pointers2(a)ă            Xn = Xn(F1): Yn = Yn(F1)ă            'if Xn<>-1 then it's in view...ă            IF Xn <> -1 THENă                IF Xn(S1) <> -1 THENă                    X1 = Xn(S1): Y1 = Yn(S1)ă                    LINE (X1, Y1)-(Xn, Yn), 14ă                    'store the lines so they can be erased later...ă                    Xs(Ln) = X1: Ys(Ln) = Y1ă                    Xe(Ln) = Xn: Ye(Ln) = Ynă                    Ln = Ln + 1ă                END IFă            END IFă        NEXTă    END IFă    Ln(Ws) = Lnă    K$ = UCASE$(INKEY$)ă    'Process the keystroke(if any)...ă    IF K$ <> "" THENă        SELECT CASE K$ă            CASE "A"ă                Atloc = NOT Atlocă            CASE "+"ă                Mzm = Mzm + 2ă            CASE "-"ă                Mzm = Mzm - 2ă            CASE "5"ă                Mxm = 0: Mym = 0: Mzm = 0ă            CASE "4"ă                Mxm = Mxm - 2ă            CASE "6"ă                Mxm = Mxm + 2ă            CASE "8"ă                Mym = Mym - 2ă            CASE "2"ă                Mym = Mym + 2ă            CASE "F"ă                Speed = Speed + 5ă            CASE "B"ă                Speed = Speed - 5ă            CASE "C"ă                D1 = 0: D2 = 0ă            CASE "S"ă                Speed = 0ă            CASE CHR$(0) + CHR$(72)ă                D1 = D1 + 1ă            CASE CHR$(0) + CHR$(80)ă                D1 = D1 - 1ă            CASE CHR$(0) + CHR$(75)ă                D2 = D2 - 1ă            CASE CHR$(0) + CHR$(77)ă                D2 = D2 + 1ă            CASE "Q"ă                SCREEN 0, , 0, 0: CLS : PRINT "See ya later!"ă                ENDă            CASE "V"ă                D1 = 0: D2 = 0: Deg1 = 0: Deg2 = 0: Speed = 0ă        END SELECTă    END IFă    NumberOfFrames = NumberOfFrames + 1ă    SOUND 32767, .1ă    'see if 20 frames have passed; if so then seeă    'how long it took...ă    IF NumberOfFrames = 20 THENă        TotalTime = PEEK(&H6C) - StartTimeă        IF TotalTime < 0 THEN TotalTime = TotalTime + 256ă        FramesPerSecX100 = 36400 \ TotalTimeă        High = FramesPerSecX100 \ 100ă        Low = FramesPerSecX100 - Highă        'A$ has the string that is printed at the upper leftă        'corner of the screenă        a$ = MID$(STR$(High), 2) + "."ă        a$ = a$ + RIGHT$("0" + MID$(STR$(Low), 2), 2) + "  "ă        NumberOfFrames = 0ă        StartTime = PEEK(&H6C)ă    END IFăLOOPă'The following data is the shuttle craft...ă'stored as Start X,Y,Z & End X,Y,ZăDATA -157,22,39,-157,-18,39ăDATA -157,-18,39,-127,-38,39ăDATA -127,-38,39,113,-38,39ăDATA 113,-38,39,193,12,39ăDATA 33,42,39,33,42,-56ăDATA 33,42,-56,-127,42,-56ăDATA -127,42,-56,-157,22,-56ăDATA -157,22,-56,-157,22,39ăDATA -157,22,-56,-157,-18,-56ăDATA -157,-18,-56,-157,-18,39ăDATA -157,-18,-56,-127,-38,-56ăDATA -127,-38,-56,-127,-38,39ăDATA -127,-38,-56,113,-38,-56ăDATA 113,-38,-56,113,-38,39ăDATA 113,-38,-56,193,12,-56ăDATA 193,12,-56,193,12,39ăDATA -157,22,-56,193,12,-56ăDATA 193,12,39,-157,22,39ăDATA -56,-13,41,-56,-3,41ăDATA -56,-3,41,-26,-3,41ăDATA -26,-3,41,-26,7,41ăDATA -51,7,41,-31,-13,41ăDATA -11,-13,41,-11,-3,41ăDATA -11,-3,41,-1,7,41ăDATA 9,7,41,9,-8,41ăDATA 9,-8,41,24,-8,41ăDATA 34,16,41,34,-38,41ăDATA 33,-39,41,33,-39,-53ăDATA 33,-39,-53,33,15,-53ăDATA -42,-38,19,-72,-38,19ăDATA -72,-38,19,-72,-38,-41ăDATA -72,-38,-41,-42,-38,-41ăDATA -42,-38,-41,-42,-38,19ăDATA 33,42,39,34,16,41ăDATA 33,42,-56,33,15,-53ăDATA -157,22,39,-127,42,39ăDATA -127,42,-56,-127,42,39ăDATA -127,42,39,33,42,39ăDATA 159,-8,-56,159,-8,40ăDATA 143,-18,-56,143,-18,39ăDATA 193,12,39,193,32,30ăDATA 33,42,39,193,32,30ăDATA 193,32,30,193,32,-47ăDATA 33,42,-56,193,32,-47ăDATA 193,12,-56,193,32,-47ăăCarlos E. Diaz, Jr.            MAKE & SAVE BMP                MAKE,SAVE,BMP                  Year of 1994 (00:00:00)QB, QBasic             112  5604     BASICBMP.BAS'==== BASICBMP.BAS by Carlos E. Diaz, Jr. (XTDD74A) ===ă'==== Copyright (C) 1994 ===ă'==== Though copyrighted for proof of authorship, ===                      ă'==== I, Carlos E. Diaz, Jr. have denoted the source code of ===           ă'==== BASICBMP.BAS as PUBLIC DOMAIN. === =ă'-------------------------------- NOTICE! ---------------------------------ă'---    This program, written by Carlos E. Diaz, Jr. create BMP's of screenă'---    12 only! Use this program at your own risk! The writer has taken goodă'---    care to make this program safe, but he is NOT liable for ANY damage ită'---    may cause.ă'---    The file name of the BMP must be specified in the SUB makeBMP.     ă'---    The program will not overwrite an existing file with the same name ă'---    set in the SUB makeBMP.                            ă'---    This program is only fast if you have a fast computer.             ă'---    The white line that creeps from the bottom to the top of the screenă'---    simply shows what horizontal line the program is working on.        ă'---    The only known side effect is that when the file is opened by      ă'---    Windows' PaintBrush, the colors may not match those of the BASIC screen.ă'---    If you have trouble opening the .BMP file from Windows, change youră'---    Windows display driver to 640x480 16 colors from Windows Setup.     ă'---    This program was written and tested with QBASIC interpretive BASIC.  ă                                   ăDECLARE SUB MakeBMP ()ăDECLARE SUB BMPheader (Hd$)ăSCREEN 12ă'-------------------------Draw Something on the Screen -------------------   ă                                   ăFOR t = 1 TO 25ă     x1 = RND * 640ă     y2 = RND * 480ă     x2 = RND * 640ă     y2 = RND * 480ă     c = RND * 4 + 1ă     LINE (x1, y1)-(x2, y2), că     LINE (639 - x1, y1)-(639 - x2, y2), că     LINE (x1, 479 - y1)-(x2, 479 - y2), că     LINE (639 - x1, 479 - y1)-(639 - x2, 479 - y2), căNEXT tăLINE (0, 0)-(639, 479), 15, Băa$ = "-=This BMP file was created by BASICBMP.BAS, a 100% QBasic program=-"ăLOCATE 15, (40 - (LEN(a$) / 2)): PRINT a$ă'--------------------------- Make the BMP fileă'REMark the next line if you dont want to change the screen to a BMP.ăCALL MakeBMP    'This is the heart of the program         ăPRINT "!Program Complete!"ăENDăăSUB BMPheader (Hd$)ă'**** This Header Creates a 640 x 480 16 color BMP format ONLY!! ****ă'**** The exact meaning of each byte is unknown. ****                        ă                         ă'**** The only known side effect is that colors will not match ****          ă                                    ă'**** their BASIC equivalents when the .BMP is opened by ****                ă                                 ă'**** Windows 3.1's PaintBrush. ****                                         ă        ă    Hd$ = CHR$(66) + CHR$(77) + CHR$(118) + CHR$(88) + CHR$(2) + CHR$(0) + CHR$(0) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(118) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(40) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(128) + CHR$(2) + CHR$(0) + CHR$(0) + CHR$(224)ă    Hd$ = Hd$ + CHR$(1) + CHR$(0) + CHR$(0) + CHR$(1) + CHR$(0) + CHR$(4) + CHR$(0) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(128)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(128) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(128) + CHR$(128)ă    Hd$ = Hd$ + CHR$(0) + CHR$(128) + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(128) + CHR$(0)ă    Hd$ = Hd$ + CHR$(128) + CHR$(0) + CHR$(128) + CHR$(128) + CHR$(0) + CHR$(0) + CHR$(128)ă    Hd$ = Hd$ + CHR$(128) + CHR$(128) + CHR$(0) + CHR$(192) + CHR$(192) + CHR$(192)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(255) + CHR$(0) + CHR$(0) + CHR$(255)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(255) + CHR$(255) + CHR$(0) + CHR$(255)ă    Hd$ = Hd$ + CHR$(0) + CHR$(0) + CHR$(0) + CHR$(255) + CHR$(0) + CHR$(255) + CHR$(0)ă    Hd$ = Hd$ + CHR$(255) + CHR$(255) + CHR$(0) + CHR$(0) + CHR$(255) + CHR$(255) + CHR$(255)ă    Hd$ = Hd$ + CHR$(0)ăEND SUBăăSUB MakeBMPă    DIM Header AS STRINGă    DIM X AS INTEGER, Y AS INTEGERă    DIM a AS INTEGER, B AS INTEGER, c  AS INTEGERă    DIM filename AS STRINGă    DIM Filelen AS LONGă    WINDOW SCREEN (0, 479)-(639, 0)ă    '======== Set File name from this line ======ă    filename$ = "C:\FIRSTBMP.BMP"ă    BMPheader Headeră    OPEN filename FOR BINARY ACCESS WRITE AS #1ă         Filelen = LOF(1)ă    CLOSE #1ă    IF Filelen = 0 THENă         OPEN filename FOR BINARY ACCESS WRITE AS #1ă              PUT #1, , Headeră              FOR Y = 479 TO 0 STEP -1ă                   FOR X = 0 TO 639 STEP 2ă                        a = POINT(X, Y)ă                        B = POINT(X + 1, Y)ă                        c = a * 16 + Bă                        Buffer$ = Buffer$ + CHR$(c)ă                   NEXT Xă                   PUT #1, , Buffer$ă                   Buffer$ = ""ă                   LINE (0, Y)-(639, Y), 15ă              NEXT Yă         CLOSE #1ă    ELSEă         LOCATE 2, 1ă         PRINT "*Attention!! Cannot make file " + CHR$(34) + filename + CHR$(34) + "!*"ă          PRINT "*That file already exists and this*"ă          PRINT "*program will NOT overwrite another file!*"ă    END IFăEND SUBăăUnknown Author(s)              SCALE DOOM FACE                SCALE,DOOM,FACE                Year of 1994 (00:00:00)QB, QBasic             113  4967     DOOMFACE.BAS'Here's a code to draw the face from DOOM in any size you want...ă'Takes a while on slow computers, but you could BSAVE it intoă'a file and BLOAD it into your program.ăăDIM HALF(66)ăDIM ONE(221)ăDIM TWO(810)ăDIM THREE(1771)ăDIM FOUR(3104)ăDIM FIVE(4964)ăDIM SIX(7072)ăSCREEN 13ăPALETTE 14, (256 ^ 2 * 8) + (256 * 12) + 17ăPALETTE 22, (256 ^ 2 * 30) + (256 * 30) + 54ăPALETTE 48, (256 ^ 2 * 55) + (256 * 58) + 63ăPALETTE 49, (256 ^ 2 * 52) + (256 * 56) + 63ăPALETTE 50, (256 ^ 2 * 49) + (256 * 54) + 63ăPALETTE 51, (256 ^ 2 * 46) + (256 * 52) + 63ăPALETTE 52, (256 ^ 2 * 44) + (256 * 51) + 63ăPALETTE 53, (256 ^ 2 * 41) + (256 * 49) + 63ăPALETTE 54, (256 ^ 2 * 38) + (256 * 47) + 63ăPALETTE 55, (256 ^ 2 * 36) + (256 * 46) + 63ăPALETTE 56, (256 ^ 2 * 32) + (256 * 44) + 63ăPALETTE 57, (256 ^ 2 * 30) + (256 * 42) + 63ăPALETTE 58, (256 ^ 2 * 28) + (256 * 40) + 59ăPALETTE 59, (256 ^ 2 * 26) + (256 * 38) + 57ăPALETTE 60, (256 ^ 2 * 24) + (256 * 36) + 55ăPALETTE 61, (256 ^ 2 * 22) + (256 * 34) + 53ăPALETTE 62, (256 ^ 2 * 20) + (256 * 32) + 51ăPALETTE 63, (256 ^ 2 * 19) + (256 * 31) + 50ăPALETTE 64, (256 ^ 2 * 18) + (256 * 30) + 47ăPALETTE 65, (256 ^ 2 * 17) + (256 * 28) + 44ăPALETTE 66, (256 ^ 2 * 16) + (256 * 27) + 42ăPALETTE 67, (256 ^ 2 * 15) + (256 * 26) + 40ăPALETTE 68, (256 ^ 2 * 14) + (256 * 24) + 38ăPALETTE 69, (256 ^ 2 * 13) + (256 * 23) + 35ăPALETTE 70, (256 ^ 2 * 12) + (256 * 21) + 33ăPALETTE 71, (256 ^ 2 * 11) + (256 * 20) + 31ăPALETTE 72, (256 ^ 2 * 10) + (256 * 19) + 29ăPALETTE 73, (256 ^ 2 * 9) + (256 * 17) + 26ăPALETTE 74, (256 ^ 2 * 8) + (256 * 16) + 23ăPALETTE 75, (256 ^ 2 * 7) + (256 * 15) + 20ăPALETTE 76, (256 ^ 2 * 6) + (256 * 13) + 18ăPALETTE 77, (256 ^ 2 * 5) + (256 * 11) + 15ăPALETTE 78, (256 ^ 2 * 4) + (256 * 10) + 12ăPALETTE 79, (256 ^ 2 * 3) + (256 * 8) + 10ăPALETTE 144, (256 ^ 2 * 24) + (256 * 32) + 39ăPALETTE 148, (256 ^ 2 * 12) + (256 * 20) + 25ăPALETTE 162, (256 ^ 2 * 16) + (256 * 46) + 53ăPALETTE 163, (256 ^ 2 * 11) + (256 * 38) + 48ăPALETTE 164, (256 ^ 2 * 7) + (256 * 30) + 43ăPALETTE 165, (256 ^ 2 * 4) + (256 * 22) + 38ăPALETTE 210, (256 ^ 2 * 46) + (256 * 53) + 63ăPALETTE 212, (256 ^ 2 * 30) + (256 * 44) + 63ăPALETTE 213, (256 ^ 2 * 22) + (256 * 40) + 63ăPALETTE 224, (256 ^ 2 * 63) + (256 * 63) + 63ăPALETTE 225, (256 ^ 2 * 53) + (256 * 63) + 63ăă1ăCLSăA = 2    'Change this to a higher number for a bigger face.ăGOSUB DOOMFACEăDEF SEGăDO: LOOP UNTIL INKEY$ <> ""ăSYSTEMăăDOOMFACE:ăCLSăFOR X = 1 TO 29 * A STEP AăFOR Y = 1 TO 24 * A STEP AăREAD CăPSET (Y, X), CăFOR Z = 1 TO AăFOR Z2 = 0 TO A - 1ăPSET (Y + Z2, X + Z - 1), CăPSET (Y + Z - 1, X + Z2), CăPSET (Y + Z - 1, X + Z - 1), CăNEXT Z2ăNEXT ZăNEXT YăNEXT XăRETURNă'Color dataăDATA 0,0,0,0,0,76,74,74,74,73,72,72,72,72,72,73,74,74,76,0,0,0,0,0ăDATA 0,0,0,78,74,75,74,73,69,64,65,62,62,65,66,68,72,74,75,74,78,0,0,0ăDATA 0,0,78,74,72,69,68,64,63,62,67,65,68,68,68,69,69,72,72,75,76,78,0,0ăDATA 0,0,78,72,70,72,69,68,65,70,66,69,67,72,72,72,72,74,75,78,78,79,0,0ăDATA 0,79,77,74,72,74,69,68,69,69,69,69,76,69,74,76,74,76,78,79,79,79,79,0ăDATA 0,79,77,76,75,74,69,75,68,73,73,69,73,76,73,76,77,74,79,78,78,77,79,0ăDATA 0,79,76,76,72,72,75,69,75,73,72,73,73,69,69,69,70,70,73,76,77,76,79,0ăDATA 0,79,76,75,72,69,72,75,67,75,72,69,67,65,68,67,69,69,69,73,76,76,79,0ăDATA 0,79,76,74,69,66,65,67,67,65,65,65,65,65,65,67,67,65,66,69,75,76,79,0ăDATA 0,79,76,72,68,62,63,63,65,67,66,66,66,66,67,65,63,63,62,68,74,76,79,0ăDATA 0,79,76,72,68,62,58,59,62,64,67,69,69,67,64,62,59,58,62,68,72,76,79,0ăDATA 0,79,76,73,65,59,50,56,59,59,62,61,61,62,59,59,56,50,59,65,72,76,79,0ăDATA 65,73,76,72,73,73,75,67,60,65,72,65,65,72,65,60,67,75,73,73,72,76,73,65ăDATA 65,73,14,69,66,66,68,70,72,73,73,69,69,73,73,72,70,68,66,66,69,14,73,65ăDATA 69,73,148,65,72,163,225,224,162,163,165,61,61,165,163,162,224,225,163,72,65,14,8,73,69ăDATA 73,74,70,65,69,66,163,162,163,164,69,62,59,69,164,163,162,163,66,69,65,70,74,73ăDATA 70,74,70,22,61,64,66,69,66,63,61,213,212,61,63,66,69,66,64,61,22,70,74,70ăDATA 69,74,69,62,60,58,60,63,213,55,59,213,212,59,55,213,63,60,58,60,62,69,74,69ăDATA 0,74,70,67,66,64,61,213,53,60,61,212,210,61,60,53,213,61,64,66,67,70,74,0ăDATA 0,74,72,68,67,64,58,57,61,66,68,144,144,68,66,61,57,58,64,67,68,72,74,0ăDATA 0,0,72,65,68,61,55,59,64,75,72,70,70,72,75,64,59,55,61,68,65,72,0,0ăDATA 0,0,74,63,68,59,57,62,62,61,64,67,67,64,61,62,62,57,59,68,63,74,0,0ăDATA 0,0,75,66,67,61,59,62,61,57,54,60,60,54,57,61,62,59,61,67,66,75,0,0ăDATA 0,0,0,70,66,63,61,69,72,165,165,165,165,165,165,72,69,61,63,66,70,0,0,0ăDATA 0,0,0,75,69,65,63,63,63,61,59,213,213,59,61,63,63,63,65,69,75,0,0,0ăDATA 0,0,0,0,73,66,62,60,63,66,69,71,71,69,66,63,60,62,66,73,0,0,0,0ăDATA 0,0,0,0,0,73,66,62,60,63,63,59,59,63,63,60,62,66,73,0,0,0,0,0ăDATA 0,0,0,0,0,0,75,70,65,61,59,54,54,59,61,65,70,75,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,79,73,69,67,67,67,67,69,73,79,0,0,0,0,0,0,0ăăMatt Hart                      VIDEO MEMORY SEGMENT           VIDEO,MEMORY,SEGMENT           05-18-92 (21:02:00)    QB, QBasic             32   961      VIDEOSEG.BAS' JG>   Is there a way that I can determine wether to use &HB000 oră' JG> &HB800 when doing stuff with the screen?ăă'A word (2 bytes) at 0000:0463h tells the port address of the CRTă'controller index register.  It will be 03B4h for monochrome and 03D4hă'for color, MSB last.ăăDEF SEG = 0ăMonType$ = HEX$(PEEK(&H0464))+HEX$(PEEK(&H0463))ăDEF SEGăSELECT CASE MonType$ă     CASE "3D4"         ' Coloră          StartSeg = &HB800ă          NumBytes = 80*25*2ă     CASE "3B4"         ' Monochromeă          StartSeg = &HB000ă          NumBytes = 80*25*2ăEND SELECTăă' JG>  And also, how do I saveă' JG> and load screens with BSAVE and BLOAD? ăă'For any screen, you save the number of bytes of the screen beginning ată'the segment and offset of the screen.  For text screens, this is:ă     DEF SEG = StartSegă     BSAVE "SCR.BIN",0,NumBytesă     DEF SEGăă'Bload is the same:ă     DEF SEG = StartSegă     BLOAD "SCR.BIN",0ă     DEF SEGăUnknown Author(s)              PCX VIEWER                     PCX,VIEWER                     Unknown Date (00:00:00)QB, QBasic             182  4778     PCXVIEW.BAS DECLARE SUB SetPalette (pcxpal$)ăDECLARE SUB SelectScreen ()ăDECLARE SUB ReadPCXLine (PCXFile%, TotalBytes%, ScanLine%())ăDECLARE SUB ReadPCXByte (PCXFile%, value%)ăDECLARE SUB OpenPCXFile (PCXname$, xsize%, ysize%, TotalBytes%, pcxpal$)ăDEFINT A-ZăTYPE PCXHeaderStrucă    Manufacxturer AS STRING * 1ă    version AS STRING * 1ă    Encoding AS STRING * 1ă    BitsPerPixel AS STRING * 1ă    xmin AS INTEGERă    ymin AS INTEGERă    xmax AS INTEGERă    ymax AS INTEGERă    Hres AS INTEGERă    Vres AS INTEGERă    ColorMap AS STRING * 48ă    Reserved1 AS STRING * 1ă    NumPlanes AS STRING * 1ă    BytesPerLine AS INTEGERă    PaletteType AS INTEGERă    HScrSize AS INTEGERă    VScrSize AS INTEGERă    Resreved2 AS STRING * 54ăEND TYPEăDIM SHARED PCXheader AS PCXHeaderStrucăDIM SHARED PCXFileăDIM SHARED ScrMode, ScrMaxX, ScrMaxYăDIM SHARED ScrMaxColor, ScrBitsPerPixelăDIM SHARED byte AS STRING * 1ăDOă   SCREEN 0ă   WIDTH 80ă   LINE INPUT "PCX filename: "; PCXname$ă   IF PCXname$ = "" THEN EXIT DOă   OpenPCXFile PCXname$, xsize, ysize, TotalBytes, pcxpal$ă   SEEK #PCXFile, LEN(PCXheader) + 1ă   SelectScreenă   SCREEN ScrModeă   SetPalette pcxpal$ă   REDIM ScanLine(TotalBytes + 1)ă   pbits = xsize * ASC(PCXheader.BitsPerPixel)ă   sbits = ScrMaxX * ScrBitsPerPixelă   IF pbits > sbits THENă      ScanLine(0) = sbits + 1ă   ELSEă      ScanLine(1) = pbitsă   END IFă   ScanLine(1) = 1ă   y = 0ă   DOă      ReadPCXLine PCXFile, TotalBytes, ScanLine()ă      PUT (0, y), ScanLineă      y = y + 1ă   LOOP WHILE y < ysize OR y < ScrMaxYă   CLOSE #PCXPileă   BEEPă   i$ = INPUT$(1)ăLOOPăENDăăSUB OpenPCXFile (PCXname$, xsize, ysize, TotalBytes, pcxpal$)ăPCXFile = FREEFILEăOPEN PCXname$ + ".pcx" FOR BINARY AS #PCXFileăGET #PCXFile, 1, PCXheaderăpcxpal$ = LEFT$(PCXheader.ColorMap + STRING$(768, 0), 768)ăIF ASC(PCXheader.version) = 5 THENă   SEEK #PCXFile, LOF(PCXFile) - 768&ă   GET #PCXFile, , byteă   IF ASC(byte) = 12 THEN GET #PCXFile, , pcxpal$ăEND IFăăăxsize = PCXheader.xmax - PCXheader.xmin + 1ăysize = PCXheader.ymax - PCXheader.ymin + 1ăTotalBytes = ASC(PCXheader.NumPlanes) * PCXheader.BytesPerLineăEND SUBăăSUB ReadPCXByte (PCXFile, value)ăSTATIC count, CountValue, BufferLOC, Buffer$ăăIF count > 0 THENă   value = CountValueă   count = count - 1ăELSEă   IF BufferLOC > LEN(Buffer$) OR LEN(Buffer$) = 0 THENă      BufferLEN& = LOF(PCXFile) - LOC(PCXFile)ă      IF BufferLEN& > 15000 THENă         BufferLEN& = 15000ă      END IFă      IF BufferLEN& <= 0 OR EOF(PCXFile) THENă         EXIT SUBă      END IFă      Buffer$ = SPACE$(BufferLEN&)ă      GET #PCXFile, , Buffer$ă      BufferLOC = 1ă   END IFă   value = ASC(MID$(Buffer$, BufferLOC, 1))ă   BufferLOC = BufferLOC + 1ă   IF value >= 192 THENă      count = value - 193ă      IF BufferLOC >= LEN(Buffer$) THENă         BufferLEN& = LOF(PCXFile) - LOC(PCXFile)ă         IF BufferLEN& > 15000 THENă            BufferLEN& = 15000ă         END IFă         IF BufferLEN& <= 0 OR EOF(PCXFile) THENă            EXIT SUBă         END IFă         Buffer$ = SPACE$(BufferLEN&)ă         GET #PCXFile, , Buffer$ă         BufferLOC = 1ă      END IFă      CountValue = ASC(MID$(Buffer$, BufferLOC, 1))ă      BufferLOC = BufferLOC + 1ă      value = CountValueă   END IFăEND IFăăEND SUBăăSUB ReadPCXLine (PCXFile, TotalBytes, ScanLine())ăzero$ = CHR$(0)ăindex = LBOUND(ScanLine) + 2ăcount = 0ăDOă   ReadPCXByte PCXFile, pixelsă   ScanLine(index) = pixelsă   IF count = TotalBytes THEN EXIT DOă   ReadPCXByte PCXFile, pixelsă   ScanLine(index) = ScanLine(index) + CVI(zero$ + CHR$(pixels))ă   count = count + 2ă   index = index + 1ăLOOP WHILE count < TotalBytesăEND SUBăăSUB SelectScreenăSELECT CASE ASC(PCXheader.BitsPerPixel)ă   CASE 1ă      IF ASC(PCXheader.NumPlanes) = 4 THENă         ScrMode = 12ă         ScrMaxX = 639ă         ScrMaxY = 479ă         ScrMaxColor = 15ă         ScrBitsPerPixel = 1ă      ELSEă         ScrMode = 11ă         ScrMaxX = 639ă         ScrMaxY = 479ă         ScrMaxColor = 1ă         ScrBitsPerPixel = 1ă      END IFă   CASE 2ă      ScrMode = 1ă      ScrMaxX = 319ă      ScrMaxY = 199ă      ScrMaxColor = 3ă      ScrBitsPerPixel = 2ă   CASE 8ă      ScrMode = 13ă      ScrMaxX = 319ă      ScrMaxY = 199ă      ScrMaxColor = 255ă      ScrBitsPerPixel = 8ăEND SELECTăEND SUBăăSUB SetPalette (pcxpal$)ăversion = ASC(PCXheader.version)ăIF version = 5 AND ScrMode = 13 THENă   FOR i = 0 TO ScrMaxColoră      r = ASC(MID$(pcxpal$, i * 3 + 1, 1)) \ 4ă      g = ASC(MID$(pcxpal$, i * 3 + 2, 1)) \ 4ă      b = ASC(MID$(pcxpal$, i * 3 + 3, 1)) \ 4ă      PALETTE i, b * 65536 + g * 256 + ră   NEXT iăELSEă   PALETTEăEND IFăEND SUBăăJeff Benson                    GRAPHICAL SPHERE               GRAPHICAL,SPHERE               11-19-91 (08:31:00)    QB, QBasic             53   1110     SPHERE.BAS  'Here's a program worth trying, people . . . all you need is QuickBASICă'(of course) and a VGA graphics adaptor. Give it a shot, you mightă'learn something. This program was found on a local BBS.ă ă' Program Creates a moving sphere by shifting the VGA paletteă ăSCREEN 13ăDIM Sphere(700)ăCLSăPAINT (160, 100), 201ăRed = 1ăGreen = 1ăBlue = 1ăRadius = 25ăFOR PaletteRange = 15 TO 40ă  Red = PaletteRangeă  Green = PaletteRangeă  ToColor = 65536 * Blue + 256 * Green + Redă  PALETTE PaletteRange, ToColoră  CIRCLE (160, 100), Radius, PaletteRangeă  PAINT (160, 100), PaletteRangeă  IF Radius > 1 THENă    Radius = Radius - 1ă  END IFăNEXTă ă' Get Sphere, store in array, clear and repaint screenă ăGET (134, 78)-(186, 122), SphereăCLSăPAINT (160, 100), 201ăX = 4ăY = 4ă ă' Move Sphere around screen until a key is pressedă ăWHILE INKEY$ = ""ă  IF X > 259 THENă    Xadj = -1ă  ELSEIF X <= 4 THENă    Xadj = 1ă  END IFă  IF Y >= 148 THENă    Yadj = -1ă  ELSEIF Y <= 4 THENă    Yadj = 1ă  END IFă  X = X + Xadjă  Y = Y + Yadjă  PUT (X, Y), Sphere, PSETăWENDăENDăăRich Geldreich                 SHADED 3-D POLYGON             SHADE,3D                       Year of 1992 (00:00:00)QB, PDS                648  21792    SHADE3D.BAS 'Shaded 3-D animation with shadows [solid5.bas] for QB4.5/PDSă'By Rich Geldreich 1992ă'Notes...ă'   This version uses some floating  point math in the initializationă'code for shading, but after initialization floating point math is notă'used at all.ă'   The  shading  imploys Lambert's Law to determine the intensity ofă'each visible polygon.  Three simple  lookup tables are calculated ată'initialization time  which  are  used  to  eliminate  multiples  andă'divides in the main animation code.ă'   The hidden face  detection  algorithm  was  made  by Dave Cooper.ă'It's fast, and does not require any multiples and divides under mostă'cases.  The "standard" way of detecting hidden faces, by finding theă'dot product of the normal of each polygon and  the  viewing  vector,ă'was not just good (or fast) enough for me!ă'   The PolyFill routine is the major  bottleneck  of  this  program.ă'QB's  LINE  command isn't as fast as I would like it to be...  On myă'286-10, the speed isn't that bad (after all, this is all-QB!).  On aă'386 or 486, this thing should fly...  [hopefully]ă'   The  shadows  are  calculated by projecting a line with the lightă'source's vector through each of the points on the solid.  Where thisă'line hits the ground  plane(which  has  a  constant Y coordinate) isă'where the new shadow point is plotted.ă'   This program is 100% public domain- but  of  course  please  giveă'some credit if you use anything from this program.  Thanks!ăDEFINT A-ZăDECLARE SUB CullPolygons ()ăDECLARE SUB DrawLine (xs%, ys%, xe%, ye%, EdgeList() AS ANY)ăDECLARE SUB DrawObject ()ăDECLARE SUB DrawShadows ()ăDECLARE SUB EdgeFill (EdgeList() AS ANY, YLow%, YHigh%, C%)ăDECLARE SUB FindNormals ()ăDECLARE SUB PolyFill (x1%, y1%, x2%, y2%, x3%, y3%, C%)ăDECLARE SUB RotatePoints ()ăDECLARE SUB ShadePolygons ()ă ăCONST True = -1, False = 0ă ăTYPE EdgeType              'for fast polygon rasterizationă    Low         AS INTEGERă    High        AS INTEGERăEND TYPEăTYPE PointTypeă    XObject     AS INTEGER 'original cooridinateă    YObject     AS INTEGERă    ZObject     AS INTEGER 'rotated coodinatedă    XWorld      AS INTEGERă    YWorld      AS INTEGERă    ZWorld      AS INTEGERă    XView       AS INTEGER 'rotated & translated coordinateă    YView       AS INTEGERă    XShadow     AS INTEGER 'coordinates projected onto the ground planeă    YShadow     AS INTEGERăEND TYPEăTYPE PolyTypeă    P1          AS INTEGER '3 points which make up the polygon(they pointă    P2          AS INTEGER ' to the point list array)ă    P3          AS INTEGERă    Culled      AS INTEGER 'True if plane not visibleă    ZCenter     AS INTEGER 'Z center of polygonă    ZOrder      AS INTEGER 'Used in the shell sort of the ZCentersă    Intensity   AS INTEGER 'Intensity of polygonă    WorldXN     AS INTEGER 'Contains the coordinates of the pointă    WorldYN     AS INTEGER ' which is both perpendicular and a constantă    WorldZN     AS INTEGER ' distance from the polygonă    NormalX     AS INTEGER 'Normal of polygon -128 to 128ă    NormalY     AS INTEGER ' (used for fast Lambert shading)ă    NormalZ     AS INTEGERăEND TYPEăTYPE LineTypeă    P1          AS INTEGER 'Used for shadow projectionă    P2          AS INTEGERăEND TYPEă ăDIM SHARED EdgeList(199) AS EdgeTypeăDIM SHARED SineTable(359 + 90) AS LONG 'cos(x)=sin(x+90)ăDIM SHARED R1, R2, R3, ox, oy, ozăDIM SHARED MaxPoints, MaxPolys, MaxLinesă ăDIM SHARED lines(100) AS LineTypeăDIM SHARED Polys(100) AS PolyTypeăDIM SHARED Points(100) AS PointTypeăDIM SHARED lx(256), ly(256), lz(256)   'lookup tables for Lambert shadingăăDIM SHARED s, XLow(1), XHigh(1), YLow(1), YHigh(1)ăDIM SHARED ShadowXLow(1), ShadowXHigh(1), ShadowYLow(1), ShadowYHigh(1)ăDIM SHARED lx, ly, lză ăPRINT "QuickBASIC/PDS 3-D Solid Animation": PRINT "By Rich Geldreich 1992"ăPRINT : PRINT "Keys: [Turn NUMLOCK on]"ăPRINT "Left.....................Angle 1 -"ăăPRINT "Right....................Angle 1 +"ăPRINT "Up.......................Angle 2 -"ăPRINT "Down.....................Angle 2 +"ăPRINT "-........................Angle 3 -"ăPRINT "+........................Angle 3 +"ăPRINT "5........................Rotation Stop"ăPRINT "0........................Rotation Reset"ăPRINT "Up Arrow.................Forward"ăPRINT "Down Arrow...............Backward"ăPRINT "Left Arrow...............Left"ăPRINT "Right Arrow..............Right"ăPRINT : PRINT "Initializing..."ă ăMaxPoints = 4  'Pyramid.ă'Points follow...ăDATA -100,0,100, -100,0,-100, 100,0,-100, 100,0,100, 0,-290,0ăMaxPolys = 5ă'Polygons follow (they must be specified in counterclockwiseă'order for correct hidden face removal and shading)ăDATA 4,0,3, 4,3,2, 4,1,0, 4,2,1, 3,0,1, 3,1,2ăMaxLines = 7ă'Lines follow for shadow computation...ăDATA 4,0, 4,1, 4,2, 4,3, 0,1, 1,2, 2,3, 3,0ă ă'MaxPoints = 7 'Cube.ă'DATA -100,100,100ă'DATA 100,100,100ă'DATA 100,100,-100ă'DATA -100,100,-100ă'DATA -100,-100,100ă'DATA 100,-100,100ă'DATA 100,-100,-100ă'DATA -100,-100,-100ă'MaxPolys = 11ă'DATA 5,4,0, 5,0,1ă'DATA 6,2,3, 3,7,6ă'DATA 6,5,1, 6,1,2ă'DATA 7,0,4, 7,3,0ă'DATA 6,7,4, 6,4,5ă'DATA 0,3,2, 1,0,2ă'MaxLines = 11ă'DATA 0,1, 1,2, 2,3, 3,0ă'DATA 4,5, 5,6, 6,7, 7,4ă'DATA 4,0, 5,1, 6,2, 7,3ă ă'MaxPoints = 15 'Wierd pencil-like shape...ă'DATA 0,0,0, 250,0,0, 400,40,0, 400,60,0, 250,100,0, 0,100,0,-20,90,0, -20,10,0ă'DATA 0,0,-50, 250,0,-50, 400,40,-50, 400,60,-50, 250,100,-50, 0,100,-50, -20,90,-50, -20,10,-50ă'MaxPolys = 27ă'DATA 1,0,7, 1,7,2, 2,7,6, 2,6,3, 3,6,4, 4,6,5ă'DATA 9,15,8, 9,10,15, 10,14,15, 10,11,14, 11,13,14, 11,12,13ă'DATA 8,7,0, 8,15,7, 8,0,1, 9,8,1, 9,1,2, 10,9,2, 10,2,3, 11,10,3ă'DATA 12,11,4, 11,3,4, 4,5,13, 4,13,12ă'DATA 5,6,14, 5,14,13, 14,6,7, 14,7,15ă'MaxLines = 23ă'DATA 0,1, 1,2, 2,3, 3,4, 4,5, 5,6, 6,7, 7,0ă'DATA 8,9, 9,10, 10,11, 11,12, 12,13, 13,14, 14,15, 15,0ă'DATA 0,8, 1,9, 2,10, 3,11, 4,12, 5,13, 6,14, 7,15ă ăFOR a = 0 TO MaxPointsă    READ Points(a).XObject, Points(a).YObject, Points(a).ZObjectă    X = X + Points(a).XObject: Y = Y + Points(a).YObject: Z = Z + Points(a).ZObjectăNEXTă'Center the objectăX = X \ (MaxPoints + 1): Y = Y \ (MaxPoints + 1): Z = Z \ (MaxPoints + 1)ăFOR a = 0 TO MaxPointsă    Points(a).XObject = Points(a).XObject - Xă    Points(a).YObject = Points(a).YObject - Yă    Points(a).ZObject = Points(a).ZObject - ZăNEXTăFOR a = 0 TO MaxPolysă    READ Polys(a).P1, Polys(a).P2, Polys(a).P3ăNEXTăFOR a = 0 TO MaxLinesă    READ lines(a).P1, lines(a).P2ăNEXTă ă'Precalculate the normal point of each polygon for fast Lambert shadingăăFindNormalsă ă'Precalculate the sine tableăa = 0ăăFOR a! = 0 TO (359 + 90) / 57.29 STEP 1 / 57.29ă    SineTable(a) = SIN(a!) * 1024: a = a + 1ăNEXTă ă'Some light source configurations won't work that great!ăl1 = 70: l2 = 40           'light source's spherical coordinatesăa1! = l1 / 57.29: a2! = l2 / 57.29ăăs1! = SIN(a1!): c1! = COS(a1!)ăs2! = SIN(a2!): c2! = COS(a2!)ălx = 128 * s1! * c2!        'convert spherical coordinates to a vectorăly = 128 * s1! * s2!        'scale up by 128 for integer mathălz = 128 * c1!ă ăFOR a = -128 TO 128         'precalculate the three light source tablesă    lx(a + 128) = lx * a    'for fast Lambert shadingă    ly(a + 128) = ly * aă    lz(a + 128) = lz * aăNEXTă ăPRINT "Strike a key...": DO: LOOP WHILE INKEY$ = ""ă ăR1 = 0: R2 = 0: R3 = 0      'three angles of rotationăox = 0: oy = -50: oz = 1100 'object's origin (this program cannot currentlyă                            'handle the object when it goes behind theviewer!)ăs = 1: t = 0ă ăSCREEN 7, , 0, 0ăOUT &H3C8, 0                'set 16 shadesăFOR a = 0 TO 15ă    OUT &H3C9, (a * 34) \ 10ă    OUT &H3C9, (a * 212) \ 100ă    OUT &H3C9, (a * 4) \ 10ă    IF a = 7 THEN OUT &H3C7, 16: OUT &H3C8, 16ăNEXTăLINE (0, 100)-(319, 199), 9, BFăLINE (0, 0)-(319, 99), 3, BFăSCREEN 7, , 1, 0ăLINE (0, 100)-(319, 199), 9, BFăLINE (0, 0)-(319, 99), 3, BFă ăYHigh(0) = -32768: ShadowYHigh(0) = -32768ăYHigh(1) = -32768: ShadowYHigh(1) = -32768ăDOă    'Flip active and work pages so user doesn't see our messy drawingă    SCREEN 7, , s, t: SWAP s, tă ă    'Wait for vertical retrace to reduce flickeră    WAIT &H3DA, 8ă ă    'Erase the old image from the screenă    IF YHigh(s) <> -32768 THENă        IF YHigh(s) < 100 THENă            LINE (XLow(s), YLow(s))-(XHigh(s), YHigh(s)), 3, BFă        ELSEIF YLow(s) < 100 THENă            LINE (XLow(s), YLow(s))-(XHigh(s), 99), 3, BFă            LINE (XLow(s), 100)-(XHigh(s), YHigh(s)), 9, BFă        ELSEă            LINE (XLow(s), YLow(s))-(XHigh(s), YHigh(s)), 9, BFă        END IFă    END IFă    IF ShadowYHigh(s) <> -32768 THENă        LINE (ShadowXLow(s), ShadowYLow(s))-(ShadowXHigh(s), ShadowYHigh(s)), 9, BFă    END IFă    RotatePointsă    CullPolygonsă    ShadePolygonsă ă    XLow(s) = 32767: XHigh(s) = -32768ă    YLow(s) = 32767: YHigh(s) = -32768ă    DrawShadowsă    DrawObjectă ă    R1 = (R1 + D1) MOD 360: IF R1 < 0 THEN R1 = R1 + 360ă    R2 = (R2 + D2) MOD 360: IF R2 < 0 THEN R2 = R2 + 360ă    R3 = (R3 + D3) MOD 360: IF R3 < 0 THEN R3 = R3 + 360ă    oz = oz + dz: ox = ox + dxă    IF oz < 600 THENă        oz = 600: dz = 0ă    ELSEIF oz > 8000 THENă        oz = 8000: dz = 0ă    END IFă    IF ox < -4000 THENă        ox = -4000: dx = 0ă    ELSEIF ox > 4000 THENă        ox = 4000: dx = 0ă    END IFă    a$ = INKEY$ă    SELECT CASE a$ă    CASE "4"ă        D1 = D1 - 2ă    CASE "6"ă        D1 = D1 + 2ă    CASE "8"ă        D2 = D2 - 2ă    CASE "2"ă        D2 = D2 + 2ă    CASE "5"ăă        D1 = 0: D2 = 0: D3 = 0ă    CASE "0"ă        R1 = 0: R2 = 0: R3 = 0ă        D1 = 0: D2 = 0: D3 = 0ă    CASE "+"ă        D3 = D3 + 2ă    CASE "-"ă        D3 = D3 - 2ă    CASE CHR$(27)ă        ENDă    CASE CHR$(0) + CHR$(72)ă        dz = dz - 20ă    CASE CHR$(0) + CHR$(80)ă        dz = dz + 20ă    CASE CHR$(0) + CHR$(77)ă        dx = dx - 20ă    CASE CHR$(0) + CHR$(75)ă        dx = dx + 20ă    END SELECTăLOOPă ă'Shades the polygons using Lambert shading. Notice the total lack ofă'floating point math- only 1 divide is required for each polygon shaded.ă'(This divide can be eliminated, but the shading won't be as accurate.)ăă'"Culls" the polygons which aren't visible to the viewer. Also shadesă'each polygon using Lambert's law.ăSUB CullPolygonsă    'This algorithm for removing hidden faces was developed by Dave Cooper.ă    'There is another method, by finding the dot product of theă    'plane's normal and the viewing vector, but this algorithm isă    'much faster because of its simplicity(and lack of floating pointă    'calculations).ă    FOR a = 0 TO MaxPolysă        P1 = Polys(a).P1ă        P2 = Polys(a).P2ă        P3 = Polys(a).P3ă ă        IF Points(P1).YView <= Points(P2).YView THENă            IF Points(P3).YView < Points(P1).YView THENă                PTop = P3ă                PNext = P1ă                PLast = P2ă            ELSEă                PTop = P1ă                PNext = P2ă                PLast = P3ă            END IFă        ELSEă            IF Points(P3).YView < Points(P2).YView THENă                PTop = P3ă                PNext = P1ă                PLast = P2ă            ELSEă                PTop = P2ă                PNext = P3ă                PLast = P1ă            END IFă        END IFă ă        XLow = Points(PTop).XViewă        YLow = Points(PTop).YViewă ă        XNext = Points(PNext).XViewă        XLast = Points(PLast).XViewă ă        IF XNext <= XLow AND XLast >= XLow THENă            Polys(a).Culled = Trueă        ELSEIF XNext >= XLow AND XLast <= XLow THENă            Polys(a).Culled = Falseă        ELSEă            YNext = Points(PNext).YViewă            YLast = Points(PLast).YViewă            IF ((YNext - YLow) * 256&) \ (XNext - XLow) < ((YLast - YLow) * 256&) \ (XLast - XLow) THENă                Polys(a).Culled = Falseă            ELSEă                Polys(a).Culled = Trueă            END IFă        END IFă ă    NEXTăEND SUBăă'Enters a line into the edge list. For each scan line, the line'să'X coordinate is found. Notice the lack of floating point math in thisă'subroutine.ăSUB DrawLine (xs, ys, xe, ye, EdgeList() AS EdgeType)ă ă    IF ys > ye THEN SWAP xs, xe: SWAP ys, yeă ă    IF ye < 0 OR ys > 199 THEN EXIT SUBăă    IF ys < 0 THENă        xs = xs + ((xe - xs) * -ys) \ (ye - ys)ă        ys = 0ăă    END IFă ă    xd = xe - xsă    yd = ye - ysă ă    IF yd <> 0 THEN xi = xd \ yd: xrs = ABS(xd MOD yd)ă ă    xr = -yd \ 2ă ă    IF ye > 199 THEN ye = 199ă ă    xdirect = SGN(xd) + xiă ă    FOR Y = ys TO yeă        IF xs < EdgeList(Y).Low THEN EdgeList(Y).Low = xsă        IF xs > EdgeList(Y).High THEN EdgeList(Y).High = xsă ă        xr = xr + xrsă        IF xr > 0 THENă            xr = xr - ydă            xs = xs + xdirectă        ELSEă            xs = xs + xiă        END IFă    NEXTă ăEND SUBăăSUB DrawObjectă ă    'Find the center of each visible polygon, and prepare the order list.ă    NumPolys = 0ă    FOR a = 0 TO MaxPolysă        IF Polys(a).Culled = False THEN 'is this polygon visible?ă            Polys(NumPolys).ZOrder = aă            NumPolys = NumPolys + 1ă            Polys(a).ZCenter = Points(Polys(a).P1).ZWorld + Points(Polys(a).P2).ZWorld + Points(Polys(a).P3).ZWorldă        END IFă    NEXTă    'Sort the visible polygons by their Z center using a shell sort.ă    NumPolys = NumPolys - 1ă    Mid = (NumPolys + 1) \ 2ă    DOă        FOR a = 0 TO NumPolys - Midă            CompareLow = aă            CompareHigh = a + Midă            DO WHILE Polys(Polys(CompareLow).ZOrder).ZCenter < Polys(Polys(CompareHigh).ZOrder).ZCenteră                SWAP Polys(CompareLow).ZOrder, Polys(CompareHigh).ZOrderă                CompareHigh = CompareLowă                CompareLow = CompareLow - Midă                IF CompareLow < 0 THEN EXIT DOă            LOOPă        NEXTă        Mid = Mid \ 2ă    LOOP WHILE Mid > 0ă    'Plot the visible polygons.ă    FOR Z = 0 TO NumPolysă        a = Polys(Z).ZOrder 'which polygon do we plot?ă        P1 = Polys(a).P1: P2 = Polys(a).P2: P3 = Polys(a).P3ă        PolyFill (Points(P1).XView), (Points(P1).YView), (Points(P2).XView), (Points(P2).YView), (Points(P3).XView), (Points(P3).YView), (Polys(a).Intensity)ă    NEXTăEND SUBăăSUB DrawShadowsă    YLow = 32767: YHigh = -32768ă    XLow = 32767: XHigh = -32768ă    FOR a = 0 TO MaxPointsă        'Project the 3-D point onto the ground plane...ă        temp& = (Points(a).YWorld - 200)ă        X = Points(a).XWorld - (temp& * lx) \ lyă        Y = 200 'ground plane has a constant Y coordinateă        Z = Points(a).ZWorld - (temp& * lz) \ lyă        'Put the point into perspectiveă        xTemp = 160 + (X * 400&) \ Ză        yTemp = 100 + (Y * 300&) \ Ză ă        Points(a).XShadow = xTempă        Points(a).YShadow = yTempă ă        'Find the lowest & highest X Y coordinatesă        IF yTemp < YLow THEN YLow = yTempăă        IF yTemp > YHigh THEN YHigh = yTempă        IF xTemp < XLow THEN XLow = xTempă        IF xTemp > XHigh THEN XHigh = xTempă    NEXTă ă    'Store lowest & highest coordinates for later erasing...ă    ShadowXLow(s) = XLow: ShadowYLow(s) = YLowăă    ShadowXHigh(s) = XHigh: ShadowYHigh(s) = YHighă    IF XHigh < 0 OR XLow > 319 OR YLow > 199 OR YHigh < 0 THEN EXIT SUBă    IF YHigh > 199 THEN YHigh = 199ă    IF YLow < 0 THEN YLow = 0ă ă    'Initialize the edge listă    FOR a = YLow TO YHighă        EdgeList(a).Low = 32767ă        EdgeList(a).High = -32768ă    NEXTă ă    'Enter the lines into the edge listă    FOR a = 0 TO MaxLinesă        P1 = lines(a).P1ă        P2 = lines(a).P2ă        DrawLine (Points(P1).XShadow), (Points(P1).YShadow), (Points(P2).XShadow), (Points(P2).YShadow), EdgeList()ă        'LINE ((Points(P1).XShadow),(Points(P1).YShadow))-((Points(P2).XShadow), (Points(P2).YShadow)), 0ă    NEXTă ă    'Fill the polygonă    EdgeFill EdgeList(), YLow, YHigh, 3ă ăEND SUBăăSUB EdgeFill (EdgeList() AS EdgeType, YLow, YHigh, C)ă    FOR a = YLow TO YHighă        LINE (EdgeList(a).Low, a)-(EdgeList(a).High, a), Că    NEXTăEND SUBăă'This routine initializes the data required by the fast Lambert shadingă'algorithm. It calculates the point which is both perpendiculară'and a constant distance from each polygon and stores it. This pointă'is then rotated with the rest of the points. When it comes time foră'shading, the normal to the polygon is looked up in a simple lookupă'table for maximum speed.ăSUB FindNormalsă    FOR a = 0 TO MaxPolysă        P1 = Polys(a).P1: P2 = Polys(a).P2: P3 = Polys(a).P3ă ă        'find the vectors of 2 lines inside the polygonă        ax! = Points(P2).XObject - Points(P1).XObjectă        ay! = Points(P2).YObject - Points(P1).YObjectă        az! = Points(P2).ZObject - Points(P1).ZObjectă ă        bx! = Points(P3).XObject - Points(P2).XObjectă        by! = Points(P3).YObject - Points(P2).YObjectă        bz! = Points(P3).ZObject - Points(P2).ZObjectă ă        'find the cross product of the 2 vectorsă        nx! = ay! * bz! - az! * by!ă        ny! = az! * bx! - ax! * bz!ă        nz! = ax! * by! - ay! * bx!ă ă        'normalize the vector so it ranges from -1 to 1ă        M! = SQR(nx! * nx! + ny! * ny! + nz! * nz!)ă        IF M! <> 0 THEN nx! = nx! / M!: ny! = ny! / M!: nz! = nz! / M!ă        'store the vector for later rotation(notice that it is scaledă        'up by 128 so it can be stored as an integer variable)ă        Polys(a).WorldXN = nx! * 128 + Points(P1).XObjectă        Polys(a).WorldYN = ny! * 128 + Points(P1).YObjectă        Polys(a).WorldZN = nz! * 128 + Points(P1).ZObjectă    NEXTăEND SUBăă'Draws a polygon to the screen. Simply finds the start and stop Xă'coordinates for each scan line within the polygon and uses theă'LINE command for filling.ăSUB PolyFill (x1, y1, x2, y2, x3, y3, C) 'for QB 4.5 guysă ă    'find lowest and high X & Y coordinatesă    IF y1 < y2 THEN YLow = y1 ELSE YLow = y2ă    IF y3 < YLow THEN YLow = y3ă    IF y1 > y2 THEN YHigh = y1 ELSE YHigh = y2ă    IF y3 > YHigh THEN YHigh = y3ă ă    IF x1 < x2 THEN XLow = x1 ELSE XLow = x2ă    IF x3 < XLow THEN XLow = x3ă    IF x1 > x2 THEN XHigh = x1 ELSE XHigh = x2ă    IF x3 > XHigh THEN XHigh = x3ă ă    IF YLow < 0 THEN YLow = 0ă    IF YHigh > 199 THEN YHigh = 199ă ă    IF XLow < XLow(s) THEN XLow(s) = XLowă    IF XHigh > XHigh(s) THEN XHigh(s) = XHighă ă    IF YLow < YLow(s) THEN YLow(s) = YLowă    IF YHigh > YHigh(s) THEN YHigh(s) = YHighă ăă    'check for polygons which cannot be visibleă    IF YHigh < 0 OR YLow > 199 OR XLow > 319 OR XHigh < 0 THEN EXIT SUBă ă    'initialize the edge listă    FOR a = YLow TO YHighă        EdgeList(a).Low = 32767ă        EdgeList(a).High = -32768ă    NEXTă ă    'Remember the lowest & highest X and Y coordinates drawn to theă    'screen for later erasingă ă    'Find the start and stop X coodinates for each scan lineă    DrawLine (x1), (y1), (x2), (y2), EdgeList()ă    DrawLine (x2), (y2), (x3), (y3), EdgeList()ă    DrawLine (x3), (y3), (x1), (y1), EdgeList()ă    EdgeFill EdgeList(), YLow, YHigh, Că ăEND SUBăă'Rotates the points of the object and the object's normals.ă'Avoids floating point math for speed.ăSUB RotatePointsă ă    'lookup the sine and cosine of each angle...ă    s1& = SineTable(R1): c1& = SineTable(R1 + 90)ă    s2& = SineTable(R2): c2& = SineTable(R2 + 90)ă    s3& = SineTable(R3): c3& = SineTable(R3 + 90)ă ă    'rotate the points of the objectă    FOR a = 0 TO MaxPointsă        xo = Points(a).XObjectă        yo = Points(a).YObjectă        zo = Points(a).ZObjectă        GOSUB Rotate3Dă ă        Points(a).XView = 160 + (x2 * 400&) \ z3ă        Points(a).YView = 100 + (y3 * 300&) \ z3ă        'IF y3 > 300 THEN STOPă ă        Points(a).XWorld = x2ă        Points(a).YWorld = y3ă        Points(a).ZWorld = z3ă    NEXTă    'rotate the normals of each polygon...ă    FOR a = 0 TO MaxPolysă        xo = Polys(a).WorldXNă        yo = Polys(a).WorldYNă        zo = Polys(a).WorldZNă        GOSUB Rotate3Dă        P1 = Polys(a).P1ă        'unorigin the pointă        x2 = x2 - Points(P1).XWorldă        y3 = y3 - Points(P1).YWorldă        z3 = z3 - Points(P1).ZWorldă        'check the bounds just in case of a round off erroră        IF x2 < -128 THEN x2 = -128 ELSE IF x2 > 128 THEN x2 = 128ă        IF y3 < -128 THEN y3 = -128 ELSE IF y3 > 128 THEN y3 = 128ă        IF z3 < -128 THEN z3 = -128 ELSE IF z3 > 128 THEN z3 = 128ă        'store the normal back; it's now ready for the shadingă        'calculations (which are simplistic now)ă        Polys(a).NormalX = x2 + 128ă        Polys(a).NormalY = y3 + 128ă        Polys(a).NormalZ = z3 + 128ă    NEXTă    EXIT SUBă ăRotate3D:ă    x1 = (xo * c1& - zo * s1&) \ 1024 'yawă    z1 = (xo * s1& + zo * c1&) \ 1024ă ă    z3 = (z1 * c3& - yo * s3&) \ 1024 + oz 'pitchă    y2 = (z1 * s3& + yo * c3&) \ 1024ă ă    x2 = (x1 * c2& + y2 * s2&) \ 1024 + ox 'rollă    y3 = (y2 * c2& - x1 * s2&) \ 1024 + oyă ăRETURNăEND SUBăăSUB ShadePolygonsă    FOR a = 0 TO MaxPolysă        IF Polys(a).Culled = False THENăă         'lookup the polygon's normal for shadingă         '(128*128)\15 = 1092ă         Intensity = (lx(Polys(a).NormalX) + ly(Polys(a).NormalY) + lz(Polys(a).NormalZ)) \ 1092ă         IF Intensity < 0 THEN Intensity = 0ă         Intensity = Intensity + 5ă         IF Intensity > 15 THEN Intensity = 15ăă         Polys(a).Intensity = Intensityă        END IFă    NEXTăEND SUBăăRich Geldreich                 DRAWING ELLIPSES               DRAW,ELLIPSES                  Year of 1993 (00:00:00)QB, QBasic, PDS        94   2632     DRAWELIP.BAS'Callable all-integer ellipse routine.ă'By Rich Geldreich July 1993ăDEFINT A-ZăDECLARE SUB DrawEllipse (ox%, oy%, prx%, pry%, co%)ăăSCREEN 13 'the DrawEllipse routine is screen mode independentărx = 51: ry = 51ăDO 'test for DrawEllipseă    DrawEllipse 160, 100, rx, ry, 14ă    DO: A$ = INKEY$: LOOP UNTIL A$ <> ""ă    DrawEllipse 160, 100, rx, ry, 0ă    IF LEN(A$) = 2 THENă        A = -ASC(RIGHT$(A$, 1))ă    ELSEă        A = ASC(A$)ă    END IFă    SELECT CASE Aă    CASE -72ă        ry = ry - 3: IF ry < 0 THEN ry = 90ă    CASE -80ă        ry = ry + 3: IF ry > 90 THEN ry = 0ă    CASE -75ă        rx = rx - 3: IF rx < 0 THEN rx = 150ă    CASE -77ă        rx = rx + 3: IF rx > 150 THEN rx = 0ă    CASE 27ă        ENDă    END SELECTăLOOPăă'Calling parameters:ă'ox, oy   = origină'prx      = X radiusă'pry      = Y radiusă'co       = colorăSUB DrawEllipse (ox, oy, prx, pry, co)ă  DIM xe AS LONG, ye AS LONG, e AS LONGă  IF pry = 0 THEN 'special cases for horizontal & vertical ellipsesă    LINE (ox - prx, oy)-(ox + prx, oy), coă    EXIT SUBă  END IFă  IF prx = 0 THENă    LINE (ox, oy - pry)-(ox, oy + pry), coă    EXIT SUBă  END IFă  'work with largest axis to avoid rounding errorsă  IF pry <= prx THENă    x = 0: y = pryă    xe = 0: ye = CLNG(prx) * prxă    e = -ye \ 2: c = ye \ pryă    DOă      IF e <= 0 THENă        DOă          PSET (ox + x, oy + y), co: PSET (ox - x, oy + y), coă          PSET (ox + x, oy - y), co: PSET (ox - x, oy - y), coă          x = x + 1ă          xe = xe + pryă          e = e + xeă        LOOP WHILE e <= 0ă      ELSEă        PSET (ox + x, oy + y), co: PSET (ox - x, oy + y), coă        PSET (ox + x, oy - y), co: PSET (ox - x, oy - y), coă      END IFă      y = y - 1ă      ye = ye - că      e = e - yeă    LOOP UNTIL y = 0ă    PSET (ox + x, oy), co: PSET (ox - x, oy), coă    PSET (ox + x, oy), co: PSET (ox - x, oy), coă  ELSEă    x = 0: y = prxă    xe = 0: ye = CLNG(pry) * pryă    e = -ye \ 2: c = ye \ prxă    DOă      IF e <= 0 THENă        DOă          PSET (ox + y, oy + x), co: PSET (ox - y, oy + x), coă          PSET (ox + y, oy - x), co: PSET (ox - y, oy - x), coă          x = x + 1ă          xe = xe + prxă          e = e + xeă        LOOP WHILE e <= 0ă      ELSEă        PSET (ox + y, oy + x), co: PSET (ox - y, oy + x), coă        PSET (ox + y, oy - x), co: PSET (ox - y, oy - x), coă      END IFă      y = y - 1ă      ye = ye - că      e = e - yeă    LOOP UNTIL y = 0ă    PSET (ox, oy + x), co: PSET (ox, oy + x), coă    PSET (ox, oy - x), co: PSET (ox, oy - x), coă  END IFăEND SUBăRich Geldreich                 GIF VIEWER                     GIF,VIEWER                     Unknown Date (00:00:00)QB, QBasic, PDS        140  4906     GIFVIEW.BAS DEFINT A-ZăDIM Prefix(4095), Suffix(4095), OutStack(4095), ShiftOut(8)ă ă'The following line is for the QB environment(slow).ăDIM Ybase AS LONG, Powersof2(11) AS LONG, WorkCode AS LONGă'For more speed, unremark the next line and remark the one above,ă'before you compile... (Change back when inside the environment.)ă'DIM Ybase AS INTEGER, Powersof2(11) AS INTEGER, WorkCode AS INTEGERă ăFOR A = 0 TO 7: ShiftOut(8 - A) = 2 ^ A: NEXTăFOR A = 0 TO 11: Powersof2(A) = 2 ^ A: NEXTăA$ = COMMAND$: IF A$ = "" THEN INPUT "GIF file"; A$: IF A$ = "" THEN ENDăIF INSTR(A$, ".") = 0 THEN A$ = A$ + ".gif"ăOPEN A$ FOR BINARY AS #1ăA$ = "      ": GET #1, , A$ăIF A$ <> "GIF87a" THEN PRINT "Not a GIF87a file.": ENDăGET #1, , TotalX: GET #1, , TotalY: GOSUB GetByteăNumColors = 2 ^ ((A AND 7) + 1): NoPalette = (A AND 128) = 0ăGOSUB GetByte: Background = AăGOSUB GetByte: IF A <> 0 THEN PRINT "Bad screen descriptor.": ENDăIF NoPalette = 0 THEN P$ = SPACE$(NumColors * 3): GET #1, , P$ăDOă    GOSUB GetByteă    IF A = 44 THENă        EXIT DOă    ELSEIF A <> 33 THENă        PRINT "Unknown extension type.": ENDă    END IFă    GOSUB GetByteă    DO: GOSUB GetByte: A$ = SPACE$(A): GET #1, , A$: LOOP UNTIL A = 0ăLOOPăGET #1, , XStart: GET #1, , YStart: GET #1, , XLength: GET #1, , YLengthăXEnd = XStart + XLength: YEnd = YStart + YLength: GOSUB GetByteăIF A AND 128 THEN PRINT "Can't handle local colormaps.": ENDăInterlaced = A AND 64: PassNumber = 0: PassStep = 8ăGOSUB GetByteăClearCode = 2 ^ AăEOSCode = ClearCode + 1ăFirstCode = ClearCode + 2: NextCode = FirstCodeăStartCodeSize = A + 1: CodeSize = StartCodeSizeăStartMaxCode = 2 ^ (A + 1) - 1: MaxCode = StartMaxCodeă ăBitsIn = 0: BlockSize = 0: BlockPointer = 1ăX = XStart: Y = YStart: Ybase = Y * 320&ă ăSCREEN 13: DEF SEG = &HA000ăIF NoPalette = 0 THENă    OUT &H3C7, 0: OUT &H3C8, 0ă    FOR A = 1 TO NumColors * 3: OUT &H3C9, ASC(MID$(P$, A, 1)) \ 4: NEXTăEND IFăLINE (0, 0)-(319, 199), Background, BFăDOă    GOSUB GetCodeă    IF Code <> EOSCode THENă        IF Code = ClearCode THENă            NextCode = FirstCodeă            CodeSize = StartCodeSizeă            MaxCode = StartMaxCodeă            GOSUB GetCodeă            CurCode = Code: LastCode = Code: LastPixel = Codeă            IF X < 320 THEN POKE X + Ybase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă        ELSEă            CurCode = Code: StackPointer = 0ă            IF Code > NextCode THEN EXIT DO 'bad GIF if this happensă            IF Code = NextCode THENă                CurCode = LastCodeă                OutStack(StackPointer) = LastPixelă                StackPointer = StackPointer + 1ă            END IFă ă            DO WHILE CurCode >= FirstCodeă                OutStack(StackPointer) = Suffix(CurCode)ă                StackPointer = StackPointer + 1ă                CurCode = Prefix(CurCode)ă            LOOPă ă            LastPixel = CurCodeă            IF X < 320 THEN POKE X + Ybase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă ă            FOR A = StackPointer - 1 TO 0 STEP -1ă                IF X < 320 THEN POKE X + Ybase, OutStack(A)ă                X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă            NEXTă ă            IF NextCode < 4096 THENă                Prefix(NextCode) = LastCodeă                Suffix(NextCode) = LastPixelă                NextCode = NextCode + 1ă                IF NextCode > MaxCode AND CodeSize < 12 THENă                    CodeSize = CodeSize + 1ă                    MaxCode = MaxCode * 2 + 1ă                END IFă            END IFă            LastCode = Codeă        END IFă    END IFăLOOP UNTIL DoneFlag OR Code = EOSCodeăA$ = INPUT$(1)ăENDă ăGetByte: A$ = " ": GET #1, , A$: A = ASC(A$): RETURNă ăNextScanLine:ă    IF Interlaced THENă        Y = Y + PassStepă        IF Y >= YEnd THENă            PassNumber = PassNumber + 1ă            SELECT CASE PassNumberă            CASE 1: Y = 4: PassStep = 8ă            CASE 2: Y = 2: PassStep = 4ă            CASE 3: Y = 1: PassStep = 2ă            END SELECTă        END IFă    ELSEă        Y = Y + 1ă    END IFă    X = XStart: Ybase = Y * 320&: DoneFlag = Y > 199ăRETURNăGetCode:ă    IF BitsIn = 0 THEN GOSUB ReadBufferedByte: LastChar = A: BitsIn = 8ă    WorkCode = LastChar \ ShiftOut(BitsIn)ă    DO WHILE CodeSize > BitsInă        GOSUB ReadBufferedByte: LastChar = Aă        WorkCode = WorkCode OR LastChar * Powersof2(BitsIn)ă        BitsIn = BitsIn + 8ă    LOOPă    BitsIn = BitsIn - CodeSizeă    Code = WorkCode AND MaxCodeăRETURNăReadBufferedByte:ă    IF BlockPointer > BlockSize THENă        GOSUB GetByte: BlockSize = Aă        A$ = SPACE$(BlockSize): GET #1, , A$ă        BlockPointer = 1ă    END IFă    A = ASC(MID$(A$, BlockPointer, 1)): BlockPointer = BlockPointer + 1ăRETURNăăEli Bennett                    OUT COMMAND                    OUT,COMMAND                    08-15-95 (20:34:00)    QB, QBasic, PDS        51   1909     OUTRGB.BAS  'Date: 08-15-95 (20:34)             Number: 583ă'From: ELI BENNETT                  Refer#: NONEă'  To: MICHELLE QUINN                Recvd: NOăă'On (11 Aug 95) Michelle Quinn wrote to Olivier Dagenais...ăă' MQ> DOES ANYONE KNOW HOW to use mode 13 vga Palette commands to get colorsă' MQ> OTHERă' MQ> than shades of red. I know how to use the palette command, and how to useă' MQ> QuickBasic, but i cannot for the life of me figure out how to get somethingă' MQ> other than 0-63 shades of red!ăă' EEEEEWwww... Never ever use that ugly disgusting palette command...ă'        use the OUT command..ăă'       The vga card has three unique ports for what you wantăăă'      &h3c7 in basic or in asm 03c7H           (READ from color)ă'      &h3c8                                    (WRITE to color)ă'      &h3c9                                    (RGB to read or set)ăă'      here is how this works......ă'      lets say you want to change color 0 or black into the brightestă'      blue possible but you want to save the origenal rgb valuesă'      just do thisă'----------------------cut-----------------ă       DEFINT A-Ză       SCREEN 13ă       'get origonal rgb valuesă       OUT &H3C7, 0     'read first colors rgb valuesă       Ored = INP(&H3C9)    'REDă       Og = INP(&H3C9)    'GREENă       Ob = INP(&H3C9)    'BLUEă       'the first time you read or write you are reading or writing toă       'the red register, and then the green one and so on then it loopsă       '(if you read again) back to the top or to REDă       OUT &H3C8, 0             '(write to the first color)ă       OUT &H3C9, 0ă       OUT &H3C9, 0ă       OUT &H3C9, 63            'highest blue possibleă       PSET (0, 0), 0ă       SLEEPă       'restore old rgb vals.ă       OUT &H3C8, 0ă       OUT &H3C9, Oredă       OUT &H3C9, Ogă       OUT &H3C9, Obă       SCREEN 0, 0, 0, 0ă       ENDăăThe ABC Programmer             STAR/CREDIT SCROLLER           STAR,CREDIT,SCROLLER           08/02/95 (00:00:00)    QB, QBasic, PDS        105  3142     STARS.BAS   '==============================================================ă'  Star/Credit Scroller by William Yu 1995ă'  Simple use of page flipping to create a star trek effectă'==============================================================ăDEFINT A-ZăDECLARE SUB ReGenerate (X)ăDECLARE SUB CenterPrint (Y, MSG$)ăDECLARE SUB ChangeMessage (Message)ăSCREEN 7, 0, 0, 0ăăDIM SHARED Stars(100) AS INTEGERăDIM SHARED StarColor(100) AS INTEGERăDIM SHARED MSG$ăăX = 0ăDOă  X = X + 1ă  RANDOMIZE TIMERă  I = INT(RND * 320) + 1ă  C = INT(RND * 3) + 1ă  IF C = 1 THEN C = 7ă  IF C = 2 THEN C = 8ă  IF C = 3 THEN C = 15ă  Stars(X) = Iă  StarColor(X) = CăLOOP UNTIL X = 100ăăLINE (0, 45)-(320, 50), 8, BFăLINE (0, 46)-(320, 49), 7, BFăLINE (0, 47)-(320, 48), 15, BFăLINE (0, 156)-(320, 151), 8, BFăLINE (0, 155)-(320, 152), 7, BFăLINE (0, 154)-(320, 153), 15, BFăCIRCLE (160, 100), 10, 10ăPAINT (160, 100), 14, 10ăXCor = 160: Ycor = 100ăY = 19ăMessage = 1ăChangeMessage MessageăăDOă  V$ = INKEY$ă  IF V$ = CHR$(0) + "P" THEN Ycor = Ycor + 2ă  IF V$ = CHR$(0) + "H" THEN Ycor = Ycor - 2ă  IF V$ = CHR$(0) + "M" THEN XCor = XCor + 3ă  IF V$ = CHR$(0) + "K" THEN XCor = XCor - 3ă  IF Ycor > 140 THEN Ycor = 140       ' Disable this for UnderLapă  IF Ycor < 60 THEN Ycor = 60         ' Disable this for OverLapă  FOR X = 1 TO 100ă    PSET (Stars(X), X + 50), StarColor(X)ă  NEXTă  PCOPY 0, 1                          ' Copies Page 0 to Page 1ă  SCREEN 7, 0, 1, 0                   ' Write to Page 1 (Hidden)ă  LINE (0, 45)-(320, 156), 0, BF      ' Use CLS for Over/UnderLapă  FOR X = 1 TO 100ă    Stars(X) = Stars(X) - 1ă    IF Stars(X) <= 0 THEN ReGenerate Xă  NEXT Xă  COLOR 11: CenterPrint Y, MSG$ă  LINE (0, 45)-(320, 50), 8, BF       ' This is an overlapă  LINE (0, 46)-(320, 49), 7, BFă  LINE (0, 47)-(320, 48), 15, BFă  CIRCLE (XCor, Ycor), 10, 10         ' Move the Circle aroundă  PAINT (XCor, Ycor), 14, 10ă  LINE (0, 156)-(320, 151), 8, BF     ' This is an underlapă  LINE (0, 155)-(320, 152), 7, BFă  LINE (0, 154)-(320, 153), 15, BFă  PCOPY 1, 0                          ' Copy Page 1 (Hidden) to Page 0ă  SCREEN 7, 0, 0, 0                   ' Switch back to visual pageă  Y = Y - 1ă  IF Y = 7 THEN Y = 19: Message = Message + 1: ChangeMessage MessageăLOOP UNTIL V$ = CHR$(27)ăăSUB CenterPrint (Y, MSG$)ă ă  Row! = 20 - (LEN((MSG$)) / 2) + .5ă  LOCATE Y, Row!: PRINT MSG$ăăEND SUBăăSUB ChangeMessage (Message)ăăIF Message = 7 THEN Message = 1ă  IF Message = 1 THEN MSG$ = "Credit Star Scroller By William Yu"ă  IF Message = 2 THEN MSG$ = "This Is A Cheap Page Flipping Technique"ă  IF Message = 3 THEN MSG$ = "You Can Slow This Down By Adding Delays"ă  IF Message = 4 THEN MSG$ = "Modify This Code As You Wish"ă  IF Message = 5 THEN MSG$ = "USE Arrow Keys To Move The Circle"ă  IF Message = 6 THEN MSG$ = "Enjoy This Demo, L8r!"ăăEND SUBăăSUB ReGenerate (X)ăă  RANDOMIZE TIMERă  I = INT((350 - 320 + 1) * RND + 320)ă  C = INT(RND * 3) + 1ă  IF C = 1 THEN C = 7ă  IF C = 2 THEN C = 8ă  IF C = 3 THEN C = 15ă  Stars(X) = Iă  StarColor(X) = CăăEND SUBăăUnknown Author(s)              SIDE WRITE FONTS               SIDE,WRITE,FONTS               Unknown Date (00:00:00)QB, QBasic, PDS        74   3665     SIDEWRIT.BASDEFINT A-ZăDECLARE SUB SideWrite (Mot$, PosX, PosY, Couleur, Opt)  'this is for QB4 onlyăăSCREEN 1                                            '320 x 200 x 4 graphicsăDIM Temp(13)                                        'holds upper left cornerăGET (0, 0)-(8, 7), Temp                             'save upper left cornerăă'SCREEN 9                                           '640 x 350 x 16 graphicsă'DIM Temp(57)ă'GET (0, 0)-(8, 13), TempăăCALL SideWrite("Side Writing", 0, 120, 1, 1)              '90ř upăCALL SideWrite("Italic Side Writing", 20, 160, 2, 2)      '90ř italicăCALL SideWrite("Vertical Writing", 40, 10, 3, 3)          '0ř downăCALL SideWrite("Side Writing", 55, 10, 1, 4)              '270ř downăCALL SideWrite("Italic Side Writing", 73, 10, 2, 5)       '270ř down italicăCALL SideWrite("Big Side Writing", 90, 190, 3, 6)         'big 90ř upăCALL SideWrite("Big Italic Side Writing", 115, 190, 1, 7) 'big 90ř up italicăCALL SideWrite("Big Vertical Writing", 145, 10, 2, 8)     'big 0ř downăCALL SideWrite("Normal", 10, 0, 3, 9)                     '0řăCALL SideWrite("Normal Italic", 70, 0, 1, 10)             '0ř right italicăCALL SideWrite("Big ", 180, 0, 2, 11)                     'big 0ř rightăCALL SideWrite("Big Italic", 220, 0, 3, 12)               'big 0ř right italicăCALL SideWrite("All This DEMO", 180, 50, 1, 10)ăCALL SideWrite("was done", 195, 60, 2, 9)ăCALL SideWrite("--> with <--", 180, 76, 3, 11)ăCALL SideWrite("SideWrit.Bas!!", 180, 100, 1, 12)ăCALL SideWrite("______________", 180, 102, 1, 12)ăăPUT (0, 0), Temp, PSET                              'restore upper left cornerăăSUB SideWrite (Mot$, PosX, PosY, Couleur, Opt) STATICăFOR Nombre = 1 TO LEN(Mot$)ă    LOCATE 1, 1ă    PRINT MID$(Mot$, Nombre, 1)        'print word's letters one by oneă    FOR X = 0 TO 7ă      FOR Y = 0 TO 7                   'use 0 TO 13 for EGAă        IF POINT(X, Y) THEN            'read pixel on/off for sideways copyă           IF Opt = 1 THENă              PSET (Y + PosX, 8 - X + PosY - (8 * Nombre)), Couleură           ELSEIF Opt = 2 THENă              PSET (Y + PosX, 8 - X + PosY - (8 * Nombre) + Y), Couleură           ELSEIF Opt = 3 THENă              PSET (X + PosX, PosY + (8 * Nombre) + Y), Couleură           ELSEIF Opt = 4 THENă              PSET (8 - Y + PosX, PosY + (8 * Nombre) + X), Couleură           ELSEIF Opt = 5 THENă              PSET (8 - Y + PosX, PosY + (8 * Nombre) + X - Y), Couleură           ELSEIF Opt = 6 THENă              PSET (Y + PosX + Y, 8 - X + PosY - (8 * Nombre)), Couleură              PSET (1 + Y + PosX + Y, 8 - X + PosY - (8 * Nombre)), Couleură           ELSEIF Opt = 7 THENă              PSET (Y + PosX + Y, 8 - X + PosY - (8 * Nombre) + Y), Couleură              PSET (1 + Y + PosX + Y, 8 - X + PosY - (8 * Nombre) + Y), Couleură          ELSEIF Opt = 8 THENă              PSET (X + PosX + X, PosY + (8 * Nombre) + Y), Couleură              PSET (1 + X + PosX + X, PosY + (8 * Nombre) + Y), Couleură           ELSEIF Opt = 9 THENă              PSET (X + PosX + (Nombre * 8), PosY + Y), Couleură           ELSEIF Opt = 10 THENă              PSET (X + PosX + (Nombre * 8) - Y, PosY + Y), Couleură           ELSEIF Opt = 11 THENă              PSET (X + PosX + (Nombre * 8), PosY + Y + Y), Couleură              PSET (X + PosX + (Nombre * 8), 1 + PosY + Y + Y), Couleură           ELSEIF Opt = 12 THENă              PSET (X + PosX + (Nombre * 8) - Y, PosY + Y + Y), Couleură              PSET (X + PosX + (Nombre * 8) - Y, 1 + PosY + Y + Y), Couleură           END IFă        END IFă      NEXT Yă    NEXT XăNEXT NombreăEND SUBăăUnknown Author(s)              ENGLISH SCRIPT FONTS           ENGLISH,SCRIPT,FONTS           Unknown Date (00:00:00)QB, QBasic, PDS        159  7844     SCRIPT.BAS  '===========================ă'   English Script Fontsă'===========================ăăDIM a$(122)ă     a$(32) = "BR8"ă     a$(33) = "BR2G2RED8BD2D2HR2HBU2U3LU3R2D3U5FBU2BR2"ă     a$(34) = "BRBUGDRND2RULBR3DRND2RULUBR3"ă     a$(35) = "BR7G2D6LDU6L2GR3D3L3GR3ND2R4UNL2D3EU5NL3UL2NUR3UD"ă     a$(35) = a$(35) + "5R2EL3U3R3EL3U2EBR5"ă     a$(36) = "BR5DND15G4D4RNU4E3R3D6LNU6DLDL3HL2NDE2GR2DR2U10RF"ă     a$(36) = a$(36) + "URUNL3EBUBR3"ă     a$(37) = "BR4LG3DED2ED2EDE3LEL2EL2EBR6G2RDLD2HD3HD3HD3HD2UB"ă     a$(37) = a$(37) + "R6REL3EL2ELE3DED2ED3EUBU7BR2"ă     a$(38) = "BR6RF2NG3L2UL2G2RGDEDRND3G2NR3G3RGDERGDERGD2EURE3"ă     a$(38) = a$(38) + "H2R2D2F5REUGLNH4UH4E2R2D2RENL5BU8BR3"ă     a$(39) = "BRD4UHR2UL2BUBR5"ă     a$(40) = "BR6G4REG3REG3R2UG2ND5RD7RU4D5RU3FDBU16BR3"ă     a$(41) = "BD17E4LGE3LGE3LGUE2DHENU3LNU5HNU5UHU3GDBU2BR7"ă     a$(42) = "BR3D3ND3NL3NR3NG2NH2NF2E2BUBR3"ă     a$(43) = "BR5BD4D4ND4NL4LND5NU3DL4R8UL3R4BU8BR3"ă     a$(44) = "BRBD13D3GE2UL2RBU14BR5"ă     a$(45) = "BD9NR6ER6BU8BR3"ă     a$(46) = "BD15R2GU2BU14BR5"ă     a$(47) = "BD16E2LELE2DHE2DHE2DHE2DHE2DHE2BR3"ă     a$(48) = "BR4G3D8UHU4E4NR2DNR3FNR3FR2GR2D4LU4D6G3UNE3L2H2ED"ă     a$(48) = a$(48) + "RDRBU12BR8"ă     a$(49) = "BD2E2ND13GR2UD13H2R4GE2BU11BR3"ă     a$(50) = "BD4E4L2D3HUR2ER2DRND5FD3NG3LNG7LG5D3GUENR6FNR4FR2"ă     a$(50) = a$(50) + "E2HREBU10BR3"ă     a$(51) = "BR3G3NF2RE2RNG3DRF2DHD2HD4H2ED2R2D4ENU2G4H3LE2D2E"ă     a$(51) = a$(51) + "D2ED2EBU13BR6"ă     a$(52) = "BR6D14FU14LG6DR8FL8R6D3FDEBU13BR3"ă     a$(53) = "BR9G3L4U2R5GL4D6E3RG2RERGR2FND3L3FRD3G3LHNR3HNR5H"ă     a$(53) = a$(53) + "LR4H2GRBU10BR10"ă     a$(54) = "BR5F2RGH2LF2DH2LG2D9HNU6UE5D2EUD3EUND5FD3G5U3LU3B"ă     a$(54) = a$(54) + "U11BR9"ă     a$(55) = "BD3E2R7GNL7G2RG2RG2ERG3ERG2ERG2D2FU3ED4E2LBU13BR6"ă     a$(56) = "BDBR6L3G3R2DL2FRED3HR3HD2R3HD3HR3ND3GD3G2NH4L2UR2"ă     a$(56) = a$(56) + "NH4L3ULULUE8L2DEUL2UBR6"ă     a$(57) = "BUBR4G4D3FNU4EUD3RU2FE4ND5GD6G2NL5G2HRU2L2EBU7BR4"ă     a$(57) = a$(57) + "R2UH2LF2LNH2LHU2BR7"ă     a$(58) = "BD7R2GU2BD6D2HR2BU13BR4"ă     a$(59) = "BD7R2HD2BD4D3GE2UL2BU13BR6"ă     a$(61) = "BD6R6EL6BD3R6GNL6BU9BR5"ă     a$(63) = "BR3G3ER4HLD2R3DL2FRG4DBD2D2HR2BU13BR6"ă     a$(65) = "BD6U3NE2RE3NR3DR4G3L2DEUR3EG2DGDG2NH3NR7DNR7G2NR3"ă     a$(65) = a$(65) + "DNR4DFBR3HR2E3D3FNE2U14GND9E2BR3"ă     a$(66) = "BD3UEDRUR3EG3D4L2GDER2D5LG2NDE2REU9FED8EU8EDER3GR"ă     a$(66) = a$(66) + "2D2HD2G2HUND9D2R3ND5FD4LG2L5GE3R3DL3BU13BR8"ă     a$(67) = "BDBR4G3RG2ND4RD6FNU4RNU2ED2NR4UR6NE2NUL3U12G3D6EU"ă     a$(67) = a$(67) + "6ER5GLU2LUBR6"ă     a$(68) = "BDBR2NR7FR8GR2GRD2NL2D3NL2D3GNL6GL6GE3U10G3D7G2E3"ă     a$(68) = a$(68) + "U2L3GE2R2U4E2R2D5RGD2RGDBU11BR7"ă     a$(69) = "BR4G3ND8RG2D4RED4RNU2FNU2NR4ER5NE2NUL3U12G3D6EU6E"ă     a$(69) = a$(69) + "NR7ER2D2R3G4R4UNL3BU5BR3"ă     a$(70) = "BD6E2DR3UL2EU2D14L2GR2ERURUHU11R7NUL2UL3ED13GU8R3"ă     a$(70) = a$(70) + "EL4U4BUBR8"ă     a$(71) = "BD6D4FDU8E3D9G2U2D3NR7ERD2R4HU12L2ND8R5HD2R2GR2G4"ă     a$(71) = a$(71) + "R4HLD2R2ND3LD3G2BU13BR6"ă     a$(72) = "BD3UNR5ER5EG4D9GRENU9FRNU11EU11E2NRG2D4RE3D2END9R"ă     a$(72) = a$(72) + "D7G2LEBU13BR5"ă     a$(73) = "BD3URUR2D12L2GDR2UEU11EBR3G2D12L2DRE2U12EBR3"ă     a$(74) = "BD5BRRUL2U2E2R3DL4R6DL3R5LG3D9GL3G2ER3DRUR3U2RU10"ă     a$(74) = a$(74) + "ED9BL3DU9E2RERBUBR3"ă     a$(75) = "BD3E2R3NEGL2FD8G2LGE5DU8BR2NE2D8G3R4HLD2FURE3D2FU"ă     a$(75) = a$(75) + "2FRDH4LF2EH2E3LEL3GE2RBU3BR6"ă     a$(76) = "BD2E2R4EG2NL4D11L2G2ERENU9RNE3R2F2RNE3HRNE2UE2LHB"ă     a$(76) = a$(76) + "L3NU7FU7EBU3BR7"ă     a$(77) = "BR6LG4D11LUREU5L2UR2U4ERD11NG2U5R6D5EG3H2R3GNU12H"ă     a$(77) = a$(77) + "U6LNR5RU5LHR2DR6H2GRGND5R2DR2D12NEHU11E2BUBR3"ă     a$(78) = "BD3E2D2R3H2D14L3NDER2EU10RED11NG2U4E3R4GDGDGDGDR4"ă     a$(78) = a$(78) + "EG2L2U2RHEUEUEU3L3FRU2L3G3E4RL5E2RGR2BUBR7"ă     a$(79) = "BR9L4G5ND6RD8R8LGL4U2LUE2NU8LU7ER6FL3HGD10UE3R3DG"ă     a$(79) = a$(79) + "3REU5FUL3NG2RE2DHULBU3BR6"ă     a$(80) = "BUBD3E3D2LR2HD2LR2ND14GND13DG3R2GRDFGLNG2DR2D4R3U"ă     a$(80) = a$(80) + "3NU13R4GU2L3R5EL2E2DNU7HU2L2G3FRLHE3REUL3NGR"ă     a$(80) = a$(80) + "2EU2GU2GL2E2NDBR8"ă     a$(81) = "BR8L3G5ND6RD8R10GR2EGHL3GL4UHUF2R2NU13R2E4G2DEU9L"ă     a$(81) = a$(81) + "3HR3D2LFNG3DERD4L3G3UBL3NU8EU8EBR11"ă     a$(82) = "BD14E5U8EG2L2GE2RD10G2E3FG2R5G2HRU2LUENU8ENE4F4DN"ă     a$(82) = a$(82) + "E3H2R3H3LNF3UE2U4L4E2D3FR2UL2U2BUBR8"ă     a$(83) = "BR11G6H3UE2R3D2REL6GF3NR6L2HG2DED2ED2NR7ENR5RE2L2"ă     a$(83) = a$(83) + "R8GR2ND3GD3G3UGU4RNDG5L3HU2R7DH2RL5R2UBU10BR13"ă     a$(84) = "BD3E2DE2NR5DR9EG2L5D6G3NU3LU7NE3RG2D3F2E2NU5G2NR2"ă     a$(84) = a$(84) + "DR8NE2NULGNL4U12BUBR7"ă     a$(85) = "BD3E2R6EG2L6R4G4ND4RNED6FU3FD2FU2FR3NE4GNL2U13G2D"ă     a$(85) = a$(85) + "6GU5EBR4E3D13E2L3DU11FRBU3BR4"ă     a$(86) = "BD3UE2RG2RD10NLENU11D2F2NE6H2R3GUHRUNE3U3NE3U6H2B"ă     a$(86) = a$(86) + "R7NG3D9ENL3U3NL3U3NL2UHBR4"ă     a$(87) = "BD3E3D14H2RU9LE2RFD12GU3FRE2U10GE2D14HUF2DU3RD2NE"ă     a$(87) = a$(87) + "4U13BR2UED11EU9HBR4"ă     a$(88) = "BD3E3D4FU4LGR2D6L3ER3U4D6GDG2ND2L3NDERFRBR4R4EG3R"ă     a$(88) = a$(88) + "EL2U2LND2LU5R3GL3D3R2UL2U5EUE2LED3FU3FDE"ă     a$(88) = a$(88) + "BU2BR4"ă     a$(89) = "R3GRD10NG3LG2D2ED2NR3ER4HR5DGBU3L2BU2RL4U10FRUD9U"ă     a$(89) = a$(89) + "E3R3D2G2LEURU4L3NGR4DU3GU2GU2GUL2BR8"ă     a$(90) = "BD3UE2D2LR8U2GNL7D2NG5LG3L3R8L2GLDR3L8R4G2RERG3UG"ă     a$(90) = a$(90) + "D2GUR8GU2R2L7RER5EBU11BR3"ă     a$(97) = "BD6NE3F2G2D2F2U3HD2RFUR3D2EL2NU9EU8NEL3F2DGNLEU3H"ă     a$(97) = a$(97) + "BU3BR6"ă     a$(98) = "RD12NLFNU13FU2FURENU7RU6L2U2G3U6EBR7"ă     a$(99) = "BD6NE3RD5GR5EG2LGU3LRU6E2D2ED2EBU5BR3"ă     a$(100) = "BFGDERGR2GR2G4ND4RD5FU3FD3E3NU6LNGU5NE2ULURBU5BR5"ă     a$(101) = "BD7RNE3D4GRFNU6F2NE3UEL2ELU2E4L3FU2LBU5BR6"ă     a$(102) = "BR3G2D12LR3GU9L2R4L2U4EDED2EBU2BR3"ă     a$(103) = "BD17R5EL5E6D5L2EU2L2GLEL2NU5EU4E3D2ED5EU4EBU4BR3"ă     a$(104) = "BDFD13E2NL3HU10NE2D6E4GDED9G3ERE2U9BU5BR3"ă     a$(105) = "BD6ED9FE2LGU9RHBU2URBUBR4"ă     a$(106) = "BD5ED2ED10GE2U8H2BU2URBUBR4"ă     a$(107) = "BDFD12HR4G2U13NE2D6E3R2FL3FRG4ER2GR2D4EUL2U3BU10"ă     a$(107) = a$(107) + "BR5"ă     a$(108) = "BDFD11NL2DFELU13EBR3"ă     a$(109) = "BD6UED10HF2ELU9FNRE2D10FU10FNRE2D10RNE2U9FBU6BR3"ă     a$(110) = "BD5NE2RED9FE2LGU9FNE2RED2RU2D9FE2LGU8EBU4BR4"ă     a$(111) = "BD7NE4ND4RD5F2UHUF2E2NU6LU4H2EDFU2BU4BR4"ă     a$(112) = "BD5E2D13LR2NFU5NL2U7FE2D2ED9GH3R5DL3FE2U6BU5BR3"ă     a$(113) = "BD6NE3ND6RNE2D7FU2FE2D5NGR2HU9FG2DU5L2EBU4BR6"ă     a$(114) = "BD5NE2RED8HF3E2LGU2GU8FE2D2ED3EUBU5BR3"ă     a$(115) = "BD13NE8R6GLU2NL3BR3ENU2LU3LD2HL3EL2NU2EU2E2DR4GN"ă     a$(115) = a$(115) + "L2E2BU3BR3"ă     a$(116) = "BD4NE3RD9HR2D2EDNE2HU10FRBU4BR4"ă     a$(117) = "BD5NE2RED8FNU9FU3FDEF2E2L3FU10G2R3G2D5U8BU4BR6"ă     a$(118) = "BR3G3RDEUD10NLF2NE4U2RL2ELU7BR4NHD7EU5BU5BR3"ă     a$(119) = "BR2G2D2RU3D12HF2EUGU9FE2ND9FD8F2E2RGNHEU9NG3FND8"ă     a$(119) = a$(119) + "BU4BR3"ă     a$(120) = "BD6E3DGRD2RU2D5G4U3FRE2RD2RD2E3GLHUHUE4D2HLE2BU3BR3"ă     a$(121) = "BD5NE2RED10GDFR3EUGBH3RNU10EDE4NU6LU5G2BU6BR6"ă     a$(122) = "BD7UE3D2ED2EDG4R4HLD2R3DL2D2EL2DL2GDFR2EBU16BR5"ă     SCREEN 9ă     CLSă     w$ = "Quick Basic 4.5 now offered in English Script!"ă     DRAW "c 14;s4 bm80,70;"ă     GOSUB loop1ă     DRAW "c 15;s4 bm1,100;"ă     w$ = "!#$%&'()*+,-./0123456789:;<=>?&"ă     GOSUB loop1ă     DRAW "c 11;s4 bm1,130;"ă     w$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"ă     GOSUB loop1ă     DRAW "C 14;S4 BM1,170;"ă     w$ = "[\]^_'abcdefghijklmnopqrstuvwxyz"ă     GOSUB loop1ă     DRAW "c 11;s4 bm1,200;"ă     w$ = "Wasn't I a nice guy to crop all those lines for you?"ă     GOSUB loop1ă     DRAW "c11;s4 bm1,220;"ă     w$ = "You know those lines that go A$=A$+"ă     GOSUB loop1ăăENDăăloop1:ăFOR x = 1 TO LEN(w$)ăy = ASC(MID$(w$, x, 1))ăDRAW a$(y)ăNEXTăRETURNăăMatt Hart                      PSET ON ANY SCREEN TYPE        PSET,ON,ANY,SCREEN,TYPE        Unknown Date (00:00:00)QB, PDS                36   1199     BPSET.BAS   'Here's a PSET type function that'll work in ANY screen mode:ăă' BPSET.BAS  Matt Hartă'ă' Do a PSET in any screen mode using the BIOSăă    '$INCLUDE: '\BC71\QBX.BI'       ' Use your path to QB.BI or QBX.BIă    DEFINT A-Z                      ' For IDE, load with C:\>qb /lă    DIM SHARED InRegs AS RegTypeXă    DIM SHARED OutRegs AS RegTypeXăă' ------------------ Sample Codeă    InRegs.AX = &H10           ' EGA 640x350x16ă    CALL InterruptX(&H10, InRegs, OutRegs)ă    ' We are now in a screen mode unrecognized by QBă    ' No graphics command will work - QB doesn't know we are in graphics.ă    ' This'll work with any screen mode - Super VGA, etc...ă    C = 1 : Y! = 0ă    Slope! = 350/640ă    FOR X = 0 TO 639ă        CallY = CINT(Y!)            ' Y must be an integer in the CALLă        CALL BiosPSET(X,CallY,C)ă        Y! = Y! + Slope!ă        C = C + 1 : IF C > 15 THEN C = 1ă    NEXTă    WHILE INKEY$="":WENDă    SCREEN 2 : SCREEN 0ă' ------------------------------ăăSUB BiosPSET(X,Y,C)ă    InRegs.AX = &H0C00 + Că    InRegs.BX = 0           ' BH is page - set to 0ă    InRegs.CX = Xă    InRegs.DX = Yă    CALL InterruptX(&H10, InRegs, OutRegs)ăEND SUBăRich Geldreich                 ASM FADER                      ASM,FADER                      11-16-92 (00:00:00)    QB, PDS                150  4934     ASMFADER.BAS;Some noiseless VGA DAC fading routines for QB4.5/PDSă;By Rich Geldreich 1992ă;Assembled with TASM v2.0ăIDEALăMODEL SMALLăDATASEGăPalette db 768 dup (?)ăCODESEGăPUBLIC GetPalette, SetPaletteăEVENăPROC    SetPalette              ;Sets the pallette retrieved by ăGetPaletteă                                ;to a specified brightnessă;DECLARE SUB SetPalette (BYVAL Brigtness, BYVAL Start, BYVAL Num)ăBrightness EQU [ss:bp+10]ăStart      EQU [ss:bp+08]ăNum        EQU [ss:bp+06]ăParameters = 3ă ă        Push    bp              ;set us up a stack frameă        Mov     bp, spă        Push    ds si di        ;lets not get QB mad nowă ă        Mov     ax, @data       ;get start of palette bufferă        Mov     ds, axă        Mov     si, offset Paletteă ă        Mov     ax, Start       ;get start coloră        Mov     dx, 03C7h       ;get ready to start changing colorsă        Out     dx, ală        Inc     dxă        Out     dx, ală        Inc     dx              ;dx=03C9hă ă        Mov     di, 03DAh       ;di=VGA status registeră ă        Mov     bl, Brightness  ;limit brigtness to an 8 bit valueăă        Mov     cx, Num         ;CX=# of registers to changeă        Jcxz    @@Done          ;if no registers to change then exită ă        Add     ax, cx          ;calculate the last register to changeă        Cmp     ax, 256         ;if too much then exită        Ja      @@Doneă ă        EVEN                    ;color alteration loopă@@10:   REPT    2               ;change Red & Green colorsă        Lodsbă        Mul     bl              ;calculate (Color*brightness)\256ă        Mov     al, ahă        Out     dx, al          ;do ită        ENDMă ă        Lodsb                   ;precalculate the last registeră        Mul     blă        Mov     bh, ahă ă        Xchg    dx, di          ;dx=status portă        EVENă@@20:   In      al, dx          ;wait for horizontal retraceă        Test    al, 1ă        Jz      @@20ă        Xchg    dx, diă        Mov     al, bhă        Out     dx, al          ;let the change take affect where it'săăsafeă        Loop    @@10            ;'till doneă@@Done:ă        Pop     di si ds bp     ;pop us some regsă        Retf    Parameters*2    ;bye byeăENDP    SetPaletteăPROC    GetPalette              ;Must call this routine before ăSetPalette!ă;DECLARE SUB GetPalette ()ă        Push    esă        Mov     ax, @dataă        Mov     es, axă        Mov     dx, offset Palette ;es:dx addresses paletteă        Mov     cx, 256ă        Xor     bx, bxă        Mov     ax, 01017hă        Int     010hă        Pop     esă        Retf    0ăENDP    GetPaletteăENDăă'The OBJ file(for those poor guys without TASM) and a small demoă'follows this message.ăăă'To execute this script, save it to a file and type DEBUG < filenameă'where "filename" is the name of this script file.ăE165"FADEIT.LZH" 0ăE200"XEP9gVKBhkH...UI/...9urPN.G.8MIE2JIGItmH0do2jr2..2.4W7qk2lu7j"ăE23D"jTiZD/gp2W3NkSJ8W2fEnnnB3MdbOdMZEWibIAGfMlKPQBQ1FEQF.qaJ66gML"ăE27A"OkIVM83ZdW1DVW2kiZOgUi0KDE4EdPhl75ebKOb8nUI9GtkA8k0gpAZqQD7Az"ăE2B7"oLT7fQCynCmNunP0vTUsxC6uZVRThglk8jvihWLcgYKWm1IJcHxBLUfhI6VAG"ăE2F4"AX5QFwJUsaAp3MVHzN96U6d/pcEnkgEAluEL.P1/QURQWqWkUR1uhekJ.3/nI"ăE331"63W2GWI7l/kRsz7LIjBmlRxAwEi7ovlyHU.mQx9XTCR/ivsI9EqCc0qhQ6vzg"ăE36E"iwhYZ9KhgBSbETs0wa5BzSPPpiTUDzFLfGbb08w33hhOMDxJGGtB8rcJXeTJ4"ăE3AB"Ie6UMtHjru0DRTzvc80TKjVFZCPbEgKANGYF/pY3w8..."ăE100 B8 0 3C BA 65 1 33 C9 CD "!rC" BE 0 2 50 BD 62 1 55 BF 88 90ăE117 "W3" DB B1 FA 8A F0 80 C1 6 32 E4 AC "<9v" 8 "<Zv" 2 2C 6 2CăE12F 7 2C 2E E3 E8 D3 E0 A C6 AA 2 D8 92 "IIMu" E0 80 FB 33 75 9 5AăE147 59 5B B4 40 CD 21 73 7 B4 9 BA 58 1 CD 21 CD 20 7 "Error!$"ăGăQă ăFinally, here is a test program for the above assembly subroutine:ă ă'A small demonstration of how to use the noiseless palette routineă'by Rich Geldreichă'to link the OBJ file into a QLB & LIB use:ă'LINK /Q fadeit,,,bqlb45.lib (QB4.5)ă'LINK /Q fadeit,,,qbxqlb,;   (PDS)ă'LIB fadeit+fadeit,,,;ă'Load QB with QB/lfadeit ăDEFINT A-ZăDECLARE SUB GetPalette ()ăDECLARE SUB SetPalette (BYVAL B, BYVAL S, BYVAL NC)ă                       'brightness   |        |ăSCREEN 13                        'start color |ă'draw some garbage                        'number of colorsăRANDOMIZE TIMER 'wow the circles are different every timeăFOR A = 1 TO 100ă    x = RND * 320ă    y = RND * 200ă    C = RND * 256ă    CIRCLE (x, y), RND * 50, Că    PAINT (x, y), RND * 256, CăNEXTăGetPaletteăDOă    FOR A = 255 TO 0 STEP -5ă        WAIT &H3DA, 8ă        SetPalette A, 0, 256ă    NEXTă    FOR A = 1 TO 255 STEP 5ă        WAIT &H3DA, 8ă        SetPalette A, 0, 256ă    NEXTăLOOPă ă'    If anybody spots noise while the program is fading up & down, tellă'me and I'll go back to the drawing board and find a new algorithm! I'mă'pretty sure there won't be, however.ă ă'    RichăRich Geldreich                 ASM FADER FIX                  ASM,FADER,FIX                  11-21-92 (00:00:00)    TASM, QB, PDS          150  5539     FADEFIX.BAS ;Noiseless VGA DAC fading routines for QB4.5/PDS(works on 286's and up)ă;By Rich Geldreich 1992ă;Assembled with TASM v2.0ă.286ăIDEALăMODEL SMALLăDATASEGăPalette    db 768 dup (?)ăNewPalette db 768 dup (?)ăCODESEGăPUBLIC GetPalette, SetPaletteăEVENăPROC    SetPalette              ;Sets the pallette retrieved by ă                                ;GetPalette to a specified brightnessă;DECLARE SUB SetPalette (BYVAL Brigtness, BYVAL Start, BYVAL Num)ăBrightness EQU [ss:bp+10] ;0-128ăStart      EQU [ss:bp+08] ;0-255ăNum        EQU [ss:bp+06] ;1-256ăParameters = 3ă        Push    bp              ;set us up a stack frameă        Mov     bp, spă        Push    es ds si di     ;lets not get QB mad nowă        Mov     ax, @data       ;get access to palette buffersă        Mov     ds, axă        Mov     es, axă        Xor     ax, axă        Mov     al, Start       ;get start coloră        Mov     dx, 03C7h       ;tell the VGA some DAC values willă        Out     dx, al          ;be comingă        Inc     dxă        Out     dx, ală        Inc     dx              ;dh=3ă        Mov     si, ax          ;add start*3 to the palette offsetă        Shl     si, 1ă        Add     si, axă        Add     si, offset Paletteă        Mov     bl, Brightness  ă        Cmp     bl, 128         ;limit brightness if too highă        Jna     @@Ok1ă        Mov     bl, 128ă@@Ok1:        ă        Mov     cx, Num         ;CX=# of registers to changeă        Jcxz    @@Done          ;if no registers to change then exită        Add     ax, cx          ;calculate the last register to changeă        Sub     ax, 256         ;if too many then limită        Jna     @@OK2ă        Sub     cx, axă@@OK2:        ă        Mov     di, offset NewPaletteă        Mov     bp, cx          ;save cx for laterăEVEN                            ;color precalculation loopă@@10:   REPT    3               ;repeat 3 times(for Red, Green, & Blue)ă        Lodsb                   ;ă        Mul     bl              ;new=old*brightnessă        Shl     ax, 1           ;new=(new*2)\256 or new=new\128ă        Mov     al, ahă        Stosbă        ENDMă        Loop    @@10ă        Mov     cx, bp          ;multiply number of colors by 3ă        Shl     cx, 1ă        Add     cx, bpă        Mov     si, offset NewPaletteă        Mov     dl, 0DAh        ;wait for vertical retraceă@@15:   In      al, dx          ;wait for end of vertical retraceă        Test    al, 8           ;(for very fast machines)ă        Jnz     @@15ă@@20:   In      al, dx          ;now wait for start of verticală        Test    al, 8           ;retraceă        Jz      @@20ă        Mov     dl, 0C9h        ;dx=03C9hă        Rep     Outsb           ;output the new colorsă@@Done:ă        Pop     di si ds es bp  ă        Retf    Parameters*2    ;bye byeăENDP    SetPaletteăPROC    GetPalette              ;Must call this routine before ă;DECLARE SUB GetPalette ()      ;SetPalette!ă        Push    esă        Mov     ax, @dataă        Mov     es, axă        Mov     dx, offset Palette ;es:dx addresses paletteă        Mov     cx, 256ă        Xor     bx, bxă        Mov     ax, 01017hă        Int     010hă        Pop     esă        Retf    0ăENDP    GetPaletteăENDăăăTo execute this script, save it to a file and type DEBUG < filenameăwhere "filename" is the name of this script file.ăE165"FADEIT.LZH" 0ăE200"XcK9gVKBhoK....W/...uWJRN.G.8MIE2JIGItmH0dY8Mo2..2EEW7qk2luCj"ăE23D"jjztZC5Bsl1Kc.SmKO2t.OSnLBMZeYtcaMGaWGDeLkKQoJ//u//ctc6gI/M6i"ăE27A"M3VRO/oIGBCMElJM6eG6Y2DQ.gsqHrjTkXVV8.G8NFOMMaMZTAnAmqX2MTKh2"ăE2B7"Q06b61vQEM2hcy3GzWLIEAUFYXNqNa3OQhxKma.gCdivVWQwzK457fagSl0MN"ăE2F4"kqOjZddVEBtGBAXTDv77qiPAtd81dEnjImHFoo2MuU/cQga6Ll0StISrvXy1J"ăE331"XBBRgzAKI4S2YaRGyKoxa2BG1x.Pjj55cTBtv47HCIf0fKPgU./3obnn4gkX9"ăE36E"kLwZfnbdYiywKIehfehzZWIhQwZ8B/cq03gOOSQeY8ozyJZRSh2wQA3v.MJd4"ăE3AB"HUrjSG9TZzw5txbme4RNac7jUkXzSjzV6m4i5rykLbP13KkSwvuk/lgfHOS.6"ăE3E8"Xwd5zgeOhYdxxahgIw.U7Nzb0ZVDZ16mQV0OjOVacvCZzitF.."ăE100 B8 0 3C BA 65 1 33 C9 CD "!rC" BE 0 2 50 BD 93 1 55 BF 88 90ăE117 "W3" DB B1 FA 8A F0 80 C1 6 32 E4 AC "<9v" 8 "<Zv" 2 2C 6 2CăE12F 7 2C 2E E3 E8 D3 E0 A C6 AA 2 D8 92 "IIMu" E0 80 FB 97 75 9 5AăE147 59 5B B4 40 CD 21 73 7 B4 9 BA 58 1 CD 21 CD 20 7 "Error!$"ăGăQă ăAnd finally, here is the test program:ă ă'A small demonstration of how to use the noiseless palette routineă'by Rich Geldreichă'to link the OBJ file into a QLB & LIB use:ă'LINK /Q fadeit,,,bqlb45.lib (QB4.5)ă'LINK /Q fadeit,,,qbxqlb,;   (PDS)ă'LIB fadeit+fadeit,,,;ă'Load QB with QB/lfadeităDEFINT A-ZăDECLARE SUB GetPalette ()ăDECLARE SUB SetPalette (BYVAL Brightness, BYVAL StartC, BYVAL NumC)ă'Brightness, ranges from 0-128 where 128 is max.ă'StartC, ranges from 0-255ă'NumC, ranges from 1-256ă'Before calling SetPalete, GetPalette must be called so SetPaletteă'has something to work with.ăSCREEN 13ă'draw some garbage    ăRANDOMIZE TIMER 'wow the circles are different every timeăFOR A = 1 TO 100ă    x = RND * 320ă    y = RND * 200ă    C = RND * 256ă    CIRCLE (x, y), RND * 50, Că    PAINT (x, y), RND * 256, CăNEXTăGetPalette  'Retrieve the screen's paletteăDOă    FOR A = 128 TO 0 STEP -2 'Fade the palette downă        SetPalette A, 0, 256ă    NEXTă    FOR A = 1 TO 128 STEP 2  'Fade it upă        SetPalette A, 0, 256ă    NEXTăLOOPă ă'That should do it! Remind me to think twice before posting an earlyă'version of a routine... [hate when that happens] .......    RichăRaymond Keith                  MASM V6.0 FADER                MASM,FADER                     Year of 1992 (00:00:00)MASM                   71   2421     MASMFADE.ASM;Some noiseless VGA DAC fading routines for QB4.5/PDSă;By Rich Geldreich 1992ă;REM Assembled with TASM v2.0ă;CONVERTED TO MASM 6.0 by Raymond Keithă ă;Declare statements you would place in QuickBasic/PDSă;DECLARE SUB GetPalette ()ă;DECLARE SUB SetPalette (BYVAL Brigtness, BYVAL Start, BYVAL Num)ă ă        .MODEL MEDIUM, BASICă        .DATAăPalette db 768 dup (?)ă        .CODEă        EVENăSetPalette PROC  USES ax bx cx dx si di ds, Brightness:Word, Start:Word,Num:Wordă        Mov    ax, @data              ;get start of palette bufferă        Mov    ds, axă        Mov    si, offset Paletteă ă        Mov    ax, Start              ;get start coloră        Mov    dx, 03C7h              ;get ready to start changing colorsă        OUT    dx, ală        Inc    dxă        OUT    dx, ală        Inc    dx                     ;dx=03C9hă        Mov    di, 03DAh              ;di=VGA status registeră        Mov    bx, Brightness         ;limit brigtness to an 8 bit valueă        Mov    cx, Num                ;CX=# of registers to changeă        Jcxz   @@Done                 ;if no registers to change then exită ă        Add    ax, cx                 ;calculate the last register to changeă        Cmp    ax, 256                ;if too much then exită        Ja     @@Doneă ă        EVEN                          ;color alteration loopă@@10:   REPT 2                        ;change Red & Green colorsă        Lodsbă        Mul    bl                     ;calculate (Color*brightness)\256ă        Mov    al, ahă        Out    dx, al                 ;do ită        ENDMă ă        Lodsb                         ;precalculate the last registeră        Mul    blă        Mov    bh, ahă ă        Xchg   dx, di           ;dx=status portă        EVENă@@20:   In     al, dx           ;wait for horizontal retraceă        Test   al, 1ă        Jz     @@20ă        Xchg   dx, diă        Mov    al, bhă        Out    dx, al           ;let the change take affect where it's safeă        Loop   @@10             ;'till doneă@@Done:ă        RETăSetPalette ENDPă ăGetPalette PROC USES ax bx cx dx es  ;Must call this routine beforeă        Mov    ax, @dataă        Mov    es, axă        Mov    dx, offset Palette    ;es:dx addresses paletteă        Mov    cx, 256ă        Xor    bx, bxă        Mov    ax, 01017hă        Int    010hă        RETăăGetPalette ENDPăENDăCalvin French                  GENERIC FONT DESIGNER          GENERIC,FONT,DESIGNER          Year of 1993 (00:00)   QB, PDS                318  7478     GFONT.BAS   DEFINT A-Ză'ă' GFONT - Gerneric font designer for QBABBS. Calvin French 1993.ă' version 0.0 - pre-releaseă'ă' Press "c" to see a palette of colors. It can be configuredă' via bpp to show anywhere from 2 to 256 different colors (bpp isă' bits per pixel).ă'ă' SUB GFontDraw (bpp, w, h, wc, hc, xg, yg, xc, yc, GfxArr())ă' bpp - bits per pixelă' w   - width in pixelsă' h   - height in pixelsă' wc  - width of one cell (for color selection, as well)ă' hc  - hieght of one cell (for color selection, as well)ă' xg  - grid x startingă' yg  - grid y startingă' xc  - color selection grid x startingă' yc  - color selection grid y startingă' GfxArr - Integer array (w,h) containing the color of eachă'          pixel.ă'ă' It's very integrateable and you should have no problems changingă' stuff. Have fun and I HOPE that this helps (at least a little)ă'ăDECLARE SUB GFontDraw (bpp, w, h, wc, hc, xg, yg, xc, yc, GfxArr())ăDECLARE SUB GFontDrawScreen ()ăDECLARE FUNCTION GFontColor (bpp%, wc%, hc%, xc%, yc%)ăDECLARE FUNCTION GFontMenu (MenuArr$())ăăCONST true = -1, false = NOT trueăăSCREEN 13ăăDIM GfxArr%(1 TO 30, 1 TO 30)ăCALL GFontDrawScreenăCALL GFontDraw(8, 30, 30, 5, 5, 30, 30, 32, 32, GfxArr%())ăăFUNCTION GFontColor (bpp, wc, hc, xc, yc)ăăSELECT CASE bppă  CASE 1                ' 2 colors   [MCGA]ă    h = 1ă    w = 2ă    MaxColor = 1ă  CASE 2                ' 4 colors   [CGA]ă    h = 1ă    w = 4ă    MaxColor = 3ă  CASE 4                ' 16 colors  [EGA]ă    h = 2ă    w = 8ă    MaxColor = 15ă  CASE 8                ' 256 colors [VGA]ă    h = 11ă    w = 24ă    MaxColor = 255ăEND SELECTăă'ă' save the backgroundă'ăDIM BackArr((w * wc + 2) * (h * hc + 2) + 2)ăGET (xc - 1, yc - 1)-(xc + (w * wc) + 1, yc + (h * hc) + 1), BackArrăă'ă' draw the boxă'ăLINE (xc, yc)-(xc + (w * wc), yc + (h * hc)), 0, BFăLINE (xc - 1, yc - 1)-(xc + (w * wc) + 1, yc + (h * hc) + 1), 15, Băă'ă' Draw the color paletteă'ăFOR y = 0 TO h - 1ă  FOR x = 0 TO w - 1ă    LINE (xc + (x * wc) + 1, yc + (y * hc) + 1)-(xc + (x * wc) + (wc - 1), yc + (y * hc) + (hc - 1)), NextColor, BFă    NextColor = NextColor + 1ă    IF NextColor > MaxColor THEN NextColor = MaxColoră  NEXT xăNEXT yăăoldx = 1ăoldy = 1ăx = 1ăy = 1ăă'ă' main color choosing loopă'ăDOă  'ă  ' update cursor position, et ceteraă  'ă  LINE (xc + ((oldx - 1) * wc), yc + ((oldy - 1) * hc))-(xc + ((oldx - 1) * wc) + wc, yc + ((oldy - 1) * hc) + hc), 0, Bă  LINE (xc + ((x - 1) * wc), yc + ((y - 1) * hc))-(xc + ((x - 1) * wc) + wc, yc + ((y - 1) * hc) + hc), 15, Bă  oldx = xă  oldy = yăă  'ă  ' inkey loopă  'ă  DOă    key$ = INKEY$ă  LOOP UNTIL LEN(key$)ăă  'ă  ' take actionă  'ă  SELECT CASE key$ă    CASE CHR$(&H0) + CHR$(&H48)   ' [up]ă      y = y - 1ă      IF y < 1 THEN y = 1ă    CASE CHR$(&H0) + CHR$(&H50)   ' [down]ă      y = y + 1ă      IF y > h THEN y = hă    CASE CHR$(&H0) + CHR$(&H4B)   ' [left]ă      x = x - 1ă      IF x < 1 THEN x = 1ă    CASE CHR$(&H0) + CHR$(&H4D)   ' [right]ă      x = x + 1ă      IF x > w THEN x = wă    CASE CHR$(&HD)                ' [enter]ă      GFontColor = POINT(xc + ((x - 1) * wc + 1), yc + ((y - 1) * hc) + 1)ă      PUT (xc - 1, yc - 1), BackArr, PSETă      EXIT FUNCTIONă  END SELECTăLOOPăăăEND FUNCTIONăăSUB GFontDraw (bpp, w, h, wc, hc, xg, yg, xc, yc, GfxArr())ăă'ă' save the backgroundă'ăDIM BackArr((w * wc + 2) * (h * hc + 2) + 2)ăGET (xg - 1, yg - 1)-(xg + (w * wc) + 1, yg + (h * hc) + 1), BackArrăă'ă' draw the boxă'ăLINE (xg, yg)-(xg + (w * wc), yg + (h * hc)), 0, BFăLINE (xg - 1, yg - 1)-(xg + (w * wc) + 1, yg + (h * hc) + 1), 15, Băă'ă' draw the image (if any)ă'ăFOR x = 0 TO w - 1ă  FOR y = 0 TO h - 1ă    LINE (xg + (x * wc) + 1, yg + (y * hc) + 1)-(xg + (x * wc) + (wc - 1), yg + (y * hc) + (hc - 1)), GfxArr(x + 1, y + 1), BFă  NEXT yăNEXT xăăx = 1ăy = 1ăc = 15ăoldx = 1ăoldy = 1ăă'ă' main drawing loopă'ăDOă  'ă  ' update cursor position, et ceteraă  'ă  LINE (xg + ((oldx - 1) * wc), yg + ((oldy - 1) * hc))-(xg + ((oldx - 1) * wc) + wc, yg + ((oldy - 1) * hc) + hc), 0, Bă  LINE (xg + ((x - 1) * wc), yg + ((y - 1) * hc))-(xg + ((x - 1) * wc) + wc, yg + ((y - 1) * hc) + hc), 15, Bă  oldx = xă  oldy = yăă  'ă  ' inkey loopă  'ă  DOă    key$ = INKEY$ă  LOOP UNTIL LEN(key$)ăă  'ă  ' take actionă  'ă  SELECT CASE key$ă    CASE CHR$(&H20)               ' [spacebar]ă      LINE (xg + ((x - 1) * wc) + 1, yg + ((y - 1) * hc) + 1)-(xg + ((x - 1) * wc) + (wc - 1), yg + ((y - 1) * hc) + (hc - 1)), c, BFă      GfxArr(x, y) = că    CASE CHR$(&H0) + CHR$(&H48)   ' [up]ă      y = y - 1ă      IF y < 1 THEN y = 1ă    CASE CHR$(&H0) + CHR$(&H50)   ' [down]ă      y = y + 1ă      IF y > h THEN y = hă    CASE CHR$(&H0) + CHR$(&H4B)   ' [left]ă      x = x - 1ă      IF x < 1 THEN x = 1ă    CASE CHR$(&H0) + CHR$(&H4D)   ' [right]ă      x = x + 1ă      IF x > w THEN x = wă    CASE "c", "C"                 ' [c] or [C]ă      c = GFontColor(bpp, wc, hc, xc, yc)ă    CASE CHR$(&H9)                ' [tab]ă      REDIM MenuArr$(4)ă      MenuArr$(0) = " GFont Grid Menu:"ă      MenuArr$(1) = " Save image to font"ă      MenuArr$(2) = " Load image from font"ă      MenuArr$(3) = " Return to editor"ă      MenuArr$(4) = " Quit GFont"ă      SELECT CASE GFontMenu(MenuArr$())ă        CASE 1: 'GFontPutChar    ' [Save image to font]ă        CASE 2: 'GFontGetChar    ' [Load image from font]ă        CASE 3:                 ' [Return to editor]ă        CASE 4                  ' [Quit GFont]ă          PUT (xg - 1, yg - 1), BackArr, PSETă          EXIT SUBă      END SELECTă  END SELECTăLOOPăăEND SUBăăDEFSNG A-ZăSUB GFontDrawScreenăăLINE (1, 1)-(319, 199), 32, BFăăEND SUBăăDEFINT A-ZăSUB GFontMakeFontFile (FileName$)ăăDIM GFontBuff AS STRING * 80ăăPRINTăPRINT "Creating font file: "; FileName$ăPRINTăDOă  INPUT "Width?", w$ăăLOOP UNTIL VAL(w$) <> 0ăDOă  INPUT "Hieght?", h$ăLOOP UNTIL VAL(h$) <> 0ăăOPEN FileName$ FOR BINARY AS #1ăăGFontBuff$ = " GFont font file for QBABBS. GFont [PD] by Calvin French August 1993. " + CHR$(26)ăăPUT #1, , GFontBuff$ăăwid = VAL(w$)ăPUT #1, , widăhie = VAL(h$)ăPUT #1, , hieăăăăEND SUBăăFUNCTION GFontMenu (MenuArr$())ăăLastOpt = UBOUND(MenuArr$)ăăFOR n = 0 TO LastOptă  IF LEN(MenuArr$(n)) > LongestLen THEN LongestLen = LEN(MenuArr$(n))ăNEXT năăx1 = 32ăy1 = 32ăx2 = x1 + LongestLen * 8 + 32ăy2 = y1 + (LastOpt + 1) * 8ăăDIM BackArr((x2 - x1 + 2) * (y2 - y1 + 2) + 4)ăGET (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), BackArrăLINE (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), 0, BFăLINE (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), 15, BăăLOCATE y1 \ 8 + 1, x1 \ 8 + 1ăCOLOR 13ăPRINT MenuArr$(0);ăăCurrOpt = 1ăăDOă  'ă  ' Update menuă  'ă  FOR n = 1 TO LastOptă    IF n = CurrOpt THENă      COLOR 15ă    ELSEă      COLOR 7ă    END IFă    LOCATE y1 \ 8 + n + 1, x1 \ 8 + 1ă    PRINT MenuArr$(n);ă  NEXT năă  DOă    key$ = INKEY$ă  LOOP UNTIL LEN(key$)ăă  SELECT CASE key$ă    CASE CHR$(&H0) + CHR$(&H48)   ' [up]ă      CurrOpt = CurrOpt - 1ă      IF CurrOpt < 1 THEN CurrOpt = 1ă    CASE CHR$(&H0) + CHR$(&H50)   ' [down]ă      CurrOpt = CurrOpt + 1ă      IF CurrOpt > LastOpt THEN CurrOpt = LastOptă    CASE CHR$(&HD)                ' [enter]ă      GFontMenu = CurrOptă      PUT (x1 - 1, y1 - 1), BackArr, PSETă      EXIT FUNCTIONă  END SELECTăăLOOPăăEND FUNCTIONăăIan Remmler                    PLASMA GENERATOR               PLASMA,GENERATOR               Unknown Date (00:00)   QB, QBasic, PDS        154  4395     PLASMGEN.BAS'PLASMA GENERATOR By: Ian Remmleră'------ ---------ăăDECLARE FUNCTION Rand% ()ăDECLARE FUNCTION PntClr% (x%, y%)ăDECLARE SUB Dot (x%, y%, c%)ăDECLARE SUB Adjust (xa%, ya%, x%, y%, xb%, yb%)ăDECLARE SUB SubDivide (x1%, y1%, x2%, y2%)ăDECLARE SUB MakePal (col%(), x%, y%)ăăDEFINT A-ZăDIM r(-8 TO 264), g(-8 TO 264), b(-8 TO 264)  'For the palette values.ăCOMMON SHARED F  'Graininess factorăăIF INSTR(COMMAND$, "/?") OR INSTR(COMMAND$, "-?") THEN GOTO PrntHelpă'REM above line if you are using QBasic.ăRANDOMIZE TIMERăDEF SEG = &HA000ăF = 10: ra = 1: rb = 255: d = 1: s = 1ăSCREEN 13ăăStart:ăGOSUB PalSet  'Get a random palette to start with.ăDot 0, 0, RND * 255 + 1ăDot 319, 0, RND * 255 + 1ăDot 319, 199, RND * 255 + 1ăDot 0, 199, RND * 255 + 1ăSubDivide 0, 0, 319, 199ăBEEPăăRotate:ă  DOă    a$ = INKEY$ă    IF LEN(a$) THEN GOSUB keys  'Check to see if an option key was pushed.ă    FOR a = 1 TO 9ă      'This loop is needed to keep the palette from screwing up when paletteă      'rotation speed is > 1.ă      r(255 + a) = r(a): g(255 + a) = g(a): b(255 + a) = b(a)ă      r(1 - a) = r(255 - a): g(1 - a) = g(255 - a): b(1 - a) = b(255 - a)ă    NEXTă    FOR t = ra TO rb STEP d  'This loop rotates the palette.ă      SWAP r(t), r(t + d * s)ă      SWAP g(t), g(t + d * s)ă      SWAP b(t), b(t + d * s)ă    NEXTă    GOSUB Set  'Output the new palette values to the VGA adapter.ă  LOOPăăPalSet:ă  'This routine uses a technique similar to the plasma generatoră  'itself to create a smooth palette.ă  FOR a = 1 TO 255ă    r(a) = -1: g(a) = -1: b(a) = -1ă  NEXTă  r(1) = INP(64) \ 4: g(1) = INP(64) \ 4: b(1) = INP(64) \ 4ă  r(255) = r(1) + Rand: g(255) = g(1) + Rand: b(255) = b(1) + Randă  MakePal r(), 1, 255ă  MakePal g(), 1, 255ă  MakePal b(), 1, 255ă  GOSUB SetăRETURNăăSet:ă  'Dump all the palette values to the VGA adapter.ă  OUT &H3C8, 1ă  WAIT &H3DA, 8ă  FOR c = 1 TO 255ă    OUT &H3C9, r(c)ă    OUT &H3C9, g(c)ă    OUT &H3C9, b(c)ă  NEXTăRETURNăăkeys:ă  SELECT CASE UCASE$(a$)ă    CASE " "  'Reverse direction of palette rotation.ă      SWAP ra, rb: d = -dă    CASE CHR$(13)  'Make a new random palette.ă      GOSUB PalSetă    CASE "F"  'Change the "graininess" (Amount of randomness).ă      SCREEN 0: WIDTH 80, 25ă      PRINT "Current = "; Fă      PRINT : INPUT "Enter new graininess factor. - ", Fă      SCREEN 13: GOTO Startă    CASE CHR$(49) TO CHR$(57)  'Change palette rotation speed.ă      s = VAL(a$)ă    CASE CHR$(27)  'Exit the program.ă      ENDă  END SELECTăRETURNăăPrntHelp:ă  PRINT "PLASMA GENERATOR - By: Ian Remmler"ă  PRINT "------ ---------"ă  PRINT "[ENTER] : Create a random palette."ă  PRINT "[SPACE] : Reverse direction of palette rotation."ă  PRINT "1 - 9   : Change palette rotation speed."ă  PRINT "F       : Enter new graininess factor."ă  PRINT "[ESC]   : Exit the program."ă  PRINT "/? or -? on command line to display help."ă  ENDăăSUB Adjust (xa, ya, x, y, xb, yb)ă  IF PntClr(x, y) <> 0 THEN EXIT SUBă  q = ABS(xa - xb) + ABS(ya - yb)ă  v = (PntClr(xa, ya) + PntClr(xb, yb)) \ 2 + (Rand * q * F) \ 10ă  IF v < 1 THEN v = 1ă  IF v > 255 THEN v = 255ă  Dot x, y, văEND SUBăăSUB Dot (x, y, c)  'Fast replacement for PSET.ă  POKE y * 320& + x, căEND SUBăăSUB MakePal (col(), x, y)ă  z = (x + y) \ 2ă  IF col(z) <> -1 THEN EXIT SUBă  q = ABS(x - y) \ 8ă  c = (col(x) + col(y)) \ 2 + Rand * qă  IF c < 0 THEN c = 0ă  IF c > 63 THEN c = 63ă  col(z) = că  MakePal col(), x, ză  MakePal col(), y, zăEND SUBăăFUNCTION PntClr (x, y)  'Fast replacement for POINT.ă  PntClr = PEEK(y * 320& + x)ăEND FUNCTIONăăFUNCTION Rand  'This returns a value of -1, 0, or 1 and is much faster than RND.ă  Rand = INP(64) MOD 3 - 1ăEND FUNCTIONăăSUB SubDivide (x1, y1, x2, y2)ă  IF (x2 - x1 < 2) AND (y2 - y1 < 2) THEN EXIT SUBă  x = (x1 + x2) \ 2ă  y = (y1 + y2) \ 2ă  Adjust x1, y1, x, y1, x2, y1ă  Adjust x1, y2, x, y2, x2, y2ă  Adjust x2, y1, x2, y, x2, y2ă  Adjust x1, y1, x1, y, x1, y2ă  IF PntClr(x, y) = 0 THENă    v = (PntClr(x1, y1) + PntClr(x2, y1) + PntClr(x2, y2) + PntClr(x1, y2) + PntClr(x1, y) + PntClr(x, y1) + PntClr(x2, y) + PntClr(x, y2)) \ 8ă    Dot x, y, vă    IF INKEY$ = CHR$(27) THEN ENDă  END IFă  SubDivide x1, y1, x, yă  SubDivide x, y, x2, y2ă  SubDivide x, y1, x2, yă  SubDivide x1, y, x, y2ăEND SUBăăRich Geldreich                 ASSEMBLY PLASMA GENERATOR      ASSEMBLY,PLASMA,GENERATOR      Unknown Date (00:00)   QB, PDS                461  13238    PLASMA.BAS  'PLASMA.BAS & PLASMA.ASMă'Input graininess on command line. Valid values are 0-40.ă'Try running with a graininess of 1, and zooming in on areas withă'very little overall elevation (ie. areas that are mostly the sameă'color). Some very interesting "non-cloudly" patterns will showă'themselves if you look at the right areas. If you do get some wierdă'looking patterns, make sure you try color cycling with a randomă'palette.ă'ă'Keys recognized:ă'"C"        = Toggles color cycling.ă'"R"        = Sets the default palette.ă'"1" to "9" = Introduces random colors into the palette while coloră'             cycling.ă'Array keys = Moves zoom box.ă'Enter      = Zooms area inside zoom box.ă'Escape     = Quits.ă'ăDEFINT A-Ză ăDECLARE SUB SubDivide (CX1%, CY1%, CX2%, CY2%, CC1%, CC2%, CC3%, CC4%)ăDECLARE SUB SetPoint (BYVAL X, BYVAL Y, BYVAL C)ăDECLARE FUNCTION GetPoint (BYVAL X, BYVAL Y)ăDECLARE SUB SeedRand (BYVAL NewSeed&)ăDECLARE FUNCTION GetRand% (BYVAL MaxRand%)ă ăTYPE StackTypeă    X1 AS INTEGERă    Y1 AS INTEGERă    X2 AS INTEGERă    Y2 AS INTEGERă    C1 AS INTEGERă    C2 AS INTEGERă    C3 AS INTEGERă    C4 AS INTEGERăEND TYPEă ăDIM SHARED AStack(511) AS StackTypeăDIM SHARED Clamp(-4096 TO 4096)ăDIM SHARED F&ăDIM SHARED P(0 TO 40, 0 TO 40)ăDIM SHARED D(0 TO 40, 0 TO 40)ăDIM r(255), g(255), B(255)ă ăa$ = COMMAND$ăIF LEN(a$) THENă    F& = VAL(a$)ă    IF F& < 0 THENă        F& = 0ă    ELSEIF F& > 40 THENă        F& = 40ă    END IFăELSEă    F& = 8ăEND IFă ăFOR a = -4096 TO 4096ă    IF a < 1 THENă        Clamp(a) = 1ă    ELSEIF a > 255 THENă        Clamp(a) = 255ă    ELSEă        Clamp(a) = aă    END IFăNEXTă ăSCREEN 13ă ă'Set default palette.ăGOSUB PalSetă ă'Seed the psuedo-random number generator with the current time.ăDEF SEG = &H40ăSeedRand PEEK(&H6C) + PEEK(&H6D) * 256& + PEEK(&H6E) * 65536ă'Draw plasma.ăC1 = GetRand(256) + 1ăC2 = GetRand(256) + 1ăC3 = GetRand(256) + 1ăC4 = GetRand(256) + 1ăSetPoint 0, 0, C1ăSetPoint 319, 0, C2ăSetPoint 319, 199, C3ăSetPoint 0, 199, C4ă ă'Plot the starting plasma.ăCALL SubDivide(0, 0, 319, 199, C1, C2, C3, C4)ă ăC = 1ă ăDOă    Xs = (320 - 40) \ 2ă    Ys = (200 - 40) \ 2ă ă    DOă        FOR a = 0 TO 41ă            SetPoint Xs + a, Ys, GetPoint(Xs + a, Ys) XOR &HAAă            SetPoint Xs + a, Ys + 41, GetPoint(Xs + a, Ys + 41) XOR &HAAă            SetPoint Xs, Ys + a, GetPoint(Xs, Ys + a) XOR &HAAă            SetPoint Xs + 41, Ys + a, GetPoint(Xs + 41, Ys + a) XOR &HAAă        NEXTă ă        DOă            IF CycleOn THENă                IF RandC > 0 THENă                    IF GetRand(10) <= RandFreq THENă                        r(RandC) = GetRand(64)ă                        g(RandC) = GetRand(64)ă                        B(RandC) = GetRand(64)ă                    ELSEă                        r(RandC) = 0ă                        g(RandC) = 0ă                        B(RandC) = 0ă                    END IFă                    RandC = RandC + 1ă                    IF RandC = 256 THENă                        RandC = 0ă                    END IFă                END IFă ă                WAIT &H3DA, 8ă                OUT &H3C8, 1ă                D = Că                FOR a = 1 TO 255ă                    OUT &H3C9, r(D)ă                    OUT &H3C9, g(D)ă                    B = B(D)ă                    WAIT &H3DA, 1ă                    OUT &H3C9, Bă                    WAIT &H3DA, 1, 1ă                    D = D + 1ă                    IF D = 256 THEN D = 1ă                NEXTă                C = C + 1ă                IF C = 256 THEN C = 1ă                WAIT &H3DA, 8, 8ă            END IFă ă            a$ = INKEY$ă        LOOP UNTIL LEN(a$)ă ă        FOR a = 0 TO 41ă            SetPoint Xs + a, Ys, GetPoint(Xs + a, Ys) XOR &HAAă            SetPoint Xs + a, Ys + 41, GetPoint(Xs + a, Ys + 41) XOR &HAAă            SetPoint Xs, Ys + a, GetPoint(Xs, Ys + a) XOR &HAAă            SetPoint Xs + 41, Ys + a, GetPoint(Xs + 41, Ys + a) XOR &HAAă        NEXTă ă        SELECT CASE a$ă        CASE CHR$(0) + CHR$(72) 'upă            Ys = Ys - 5ă            IF Ys < 0 THEN Ys = 0ă        CASE CHR$(0) + CHR$(80) 'downă            Ys = Ys + 5ă            IF Ys > 200 - 42 THEN Ys = 200 - 42ă        CASE CHR$(0) + CHR$(77) 'rightă            Xs = Xs + 5ă            IF Xs > 320 - 42 THEN Xs = 320 - 42ă        CASE CHR$(0) + CHR$(75)'leftă            Xs = Xs - 5ă            IF Xs < 0 THEN Xs = 0ă        CASE CHR$(13), "0"ă            EXIT DOă        CASE "C", "c"ă            CycleOn = NOT CycleOnă        CASE "R", "r"ă            GOSUB PalSetă            C = 1ă        CASE "1" TO "9"ă            RandC = 1ă            RandFreq = ASC(a$) - 49ă        CASE CHR$(27)ă            ENDă        END SELECTă    LOOPă ă    L = 256ă    h = 0ă    FOR Y = Ys TO Ys + 40ă        FOR X = Xs TO Xs + 40ă            P = GetPoint(X, Y) - 1ă            IF P < L THEN L = Pă            IF P > h THEN h = Pă            P(X - Xs, Y - Ys) = Pă        NEXTă    NEXTă ă    'Maximize the scale of the new plasma to take advantage ofă    'all colors- this will usually cause the zoomed plasma's colors toă    'appear different from its original colors, but must be done becauseă    'there are only 256 colors available.ă    IF (h - L) = 0 THEN 'avoid overflow erroră        Scaler& = 256ă    ELSEă        Scaler& = (255 * 256&) \ (h - L)ă    END IFă ă    FOR Y = 0 TO 40ă        FOR X = 0 TO 40ă            P = 1 + ((P(X, Y) - L) * Scaler&) \ 256ă            IF P > 255 THEN P = 255ă            P(X, Y) = Pă        NEXTă    NEXTă ă    CLSă ă    FOR Y = 0 TO 40ă        Ys = Y * 5: IF Ys > 199 THEN Ys = 199ă        FOR X = 0 TO 40ă            Xs = X * 8: IF Xs > 319 THEN Xs = 319ă            SetPoint Xs, Ys, P(X, Y)ă        NEXTă    NEXTă ă    ERASE Dă ă    'Fill in the black areas.ă    FOR Y = 0 TO 39ă        Ys = Y * 5ă        Ye = Ys + 5ă        IF Ye > 199 THEN Ye = 199ă        FOR X = 0 TO 39ă            Xs = X * 8ă            Xe = Xs + 8ă            IF Xe > 319 THEN Xe = 319ă            CALL SubDivide(Xs, Ys, Xe, Ye, P(X, Y), P(X + 1, Y), P(X + 1, Y + 1), P(X, Y + 1))ă        NEXTă    NEXTăLOOP UNTIL a$ = CHR$(27)ăENDă ăPalSet:ă  'Alter this section here for another palette.ă  FOR a = 0 TO 63ă    s = 0: r = 63: g = a: B = 0: GOSUB Setă    s = 64: r = 63 - a: g = 63: B = 0: GOSUB Setă    s = 128: r = 0: g = 63 - a: B = a: GOSUB Setă    s = 192: r = a: g = 0: B = 63: GOSUB Setă  NEXTăRETURNă ăSet:ă  IF a + s = 0 THEN RETURN  'to keep the background blackă  r(a + s) = ră  g(a + s) = gă  B(a + s) = Bă  OUT &H3C8, a + să  OUT &H3C9, ră  OUT &H3C9, gă  OUT &H3C9, BăRETURNă ă'This subroutine subdivides the screen into small areasă'and fills them in with psuedo-random colors. Areas close the eachă'other are very similar, but as the distance increases between twoă'areas they grow very different.ăSUB SubDivide (CX1, CY1, CX2, CY2, CC1, CC2, CC3, CC4)ă ă    sp = 0ă    AStack(sp).X1 = CX1: AStack(sp).Y1 = CY1ă    AStack(sp).X2 = CX2: AStack(sp).Y2 = CY2ă    AStack(sp).C1 = CC1: AStack(sp).C2 = CC2ă    AStack(sp).C3 = CC3: AStack(sp).C4 = CC4ă    sp = sp + 1ă ă    DO WHILE spă        sp = sp - 1ă        X1 = AStack(sp).X1: Y1 = AStack(sp).Y1ă        X2 = AStack(sp).X2: Y2 = AStack(sp).Y2ă        C1 = AStack(sp).C1: C2 = AStack(sp).C2ă        C3 = AStack(sp).C3: C4 = AStack(sp).C4ăJag:ă        'Find center of area.ă        X = (X1 + X2) \ 2ă        Y = (Y1 + Y2) \ 2ă ă        CA = GetPoint(X, Y1)ă        IF CA = 0 THENă            CA = Clamp((C1 + C2) \ 2 + ((GetRand(128) - 64) * (X2 - X1) * F&) \ 256)ă            SetPoint X, Y1, CAă        END IFă ă        CB = GetPoint(X2, Y)ă        IF CB = 0 THENă            CB = Clamp((C2 + C3) \ 2 + ((GetRand(128) - 64) * (Y2 - Y1) * F&) \ 256)ă            SetPoint X2, Y, CBă        END IFă ă        CC = GetPoint(X, Y2)ă        IF CC = 0 THENă            CC = Clamp((C4 + C3) \ 2 + ((GetRand(128) - 64) * (X2 - X1) * F&) \ 256)ă            SetPoint X, Y2, CCă        END IFă ă        CD = GetPoint(X1, Y)ă        IF CD = 0 THENă            CD = Clamp((C1 + C4) \ 2 + ((GetRand(128) - 64) * (Y2 - Y1) * F&) \ 256)ă            SetPoint X1, Y, CDă        END IFă ă        CM = GetPoint(X, Y)ă        'Set center point to the average of all the pixels surrounding it.ă        IF CM = 0 THENă            CM = (C1 + C2 + C3 + C4 + CA + CB + CC + CD) \ 8ă            SetPoint X, Y, CMă        END IFă ă        IF X2 - X1 > 2 THENă            'Recursively subdivide the area into 4 smaller areas.ă ă            'CALL SubDivide(X, Y, X2, Y2, CM, CB, C3, CC)ă            AStack(sp).X1 = X: AStack(sp).Y1 = Yă            AStack(sp).X2 = X2: AStack(sp).Y2 = Y2ă            AStack(sp).C1 = CM: AStack(sp).C2 = CBă            AStack(sp).C3 = C3: AStack(sp).C4 = CCă            sp = sp + 1ă ă            'CALL SubDivide(X1, Y1, X, Y, C1, CA, CM, CD)ă            AStack(sp).X1 = X1: AStack(sp).Y1 = Y1ă            AStack(sp).X2 = X: AStack(sp).Y2 = Yă            AStack(sp).C1 = C1: AStack(sp).C2 = CAă            AStack(sp).C3 = CM: AStack(sp).C4 = CDă            sp = sp + 1ă ă            'CALL SubDivide(X, Y1, X2, Y, CA, C2, CB, CM)ă            AStack(sp).X1 = X: AStack(sp).Y1 = Y1ă            AStack(sp).X2 = X2: AStack(sp).Y2 = Yă            AStack(sp).C1 = CA: AStack(sp).C2 = C2ă            AStack(sp).C3 = CB: AStack(sp).C4 = CMă            sp = sp + 1ă ă            'CALL SubDivide(X1, Y, X, Y2, CD, CM, CC, C4)ă            Y1 = Yă            X2 = Xă            C1 = CDă            C2 = CMă            C3 = CCă            GOTO Jagă ă        END IFă ă    LOOPă ăEND SUBăăă'---------------8<-----[ Begin PLASMA.ASM ]----->8---------------ăă.286: : :ăIDEALăMODEL MEDIUMă;----------------------------------------------------------------ăDATASEGăLABEL           LookUp  WORDă                Y = 0ă                REPT 200ă                dw Yă                Y = Y + 320ă                ENDMăRandSeed        dw      0,0ă;----------------------------------------------------------------ăCODESEGăASSUME          DS:@CODE, DS:@DATA, SS:@DATA, ES:NOTHINGă;----------------------------------------------------------------ă;Sets a point in the 320x200x256 mode.ăEVENăPUBLIC SetPointăPROC SetPointăXp              EQU     <[bx+8]>ăYp              EQU     <[bx+6]>ăC               EQU     <[bx+4]>ăP = 3ă                Mov     ax, 0A000hă                Mov es, axă                Mov bx, spă                Mov ax, Că                Mov di, Xpă                Mov bx, Ypă                Shl bx, 1ă                Add di, (bx + LookUp)ă                Stosbă                Retf P * 2ăENDP SetPointă;----------------------------------------------------------------ă;Grabs a point's color in the 320x200x256 mode.ăEVENăPUBLIC GetPointăPROC GetPointăXp              EQU     <[bx+6]>ăYp              EQU     <[bx+4]>ăP = 2ă                Mov     ax, 0A000hă                Mov es, axă                Mov bx, spă                Mov si, Xpă                Mov bx, Ypă                Shl bx, 1ă                Add si, (bx + LookUp)ă                Xor     ax, axă                Lods    [byte es:si]ă                Retf P * 2ăENDP GetPointă;----------------------------------------------------------------ă;Seeds the psuedo-random number generator.ăPUBLIC SeedRandăPROC SeedRandăNewSeedH        EQU     <[bx+6]>ăNewSeedL        EQU     <[bx+4]>ăP = 2ă                Mov bx, spă                Mov ax, NewSeedLă                Mov (RandSeed), axă                Mov ax, NewSeedHă                Mov (RandSeed + 2), axă                Retf P * 2ăENDP SeedRandă;----------------------------------------------------------------ă;Returns psuedo-random number between 0 and MaxVal-1.ăEVENăPUBLIC GetRandăPROC GetRandăMaxVal          EQU     <[word bx+4]>ăP = 1ă                Mov ax, (RandSeed)ă                Mov bx, (RandSeed + 2)ă                Mov cx, axă                Mov     dx, 08405hă                Mul dxă                Shl cx, 3ă                Add ch, clă                Add dx, cxă                Add dx, bxă                Shl bx, 1ă                Shl bx, 1ă                Add dx, bxă                Add dh, blă                Shl bx, 5ă                Add dh, blă                Add ax, 1ă                Adc dx, 0ă                Mov (RandSeed), axă                Mov (RandSeed + 2), dxă                Mov bx, spă                Mov cx, dxă                Mul MaxVală                Mov ax, cxă                Mov cx, dxă                Mul MaxVală                Add ax, cxă                Adc dx, 0ă                Mov ax, dxă                Retf P * 2ăENDP GetRandă;----------------------------------------------------------------ăENDăă'---------------8<-----[ End PLASMA.ASM ]----->8---------------ă ă'That's all! Although I haven't timed my plasma implementation againstă'the one posted here a few days ago, it's visually faster on my 286/10.ăăSteve Demo                     PALETTE STUFF                  PALETTE,STUFF                  10/10/93 (00:00)       QB, QBasic, PDS        58   2126     PALSTUFF.BASDEFINT A-ZăDECLARE SUB SetPalette ()ăSCREEN 13ăFOR x = 0 TO 255ă LINE (x + 20, 10)-(x + 20, 180), xăNEXT xăLOCATE 1, 12: PRINT "Press any Key": a$ = INPUT$(1)ăLOCATE 1, 10: PRINT SPACE$(18)ăFOR j = 1 TO 6ă PALETTE: SOUND 30000, 14ă SetPaletteă SOUND 30000, 14ăNEXT jăSetPaletteăDO UNTIL LEN(INKEY$)ă LOCATE 1, 10: PRINT "Now that's Simple"ă LOCATE 24, 10: PRINT SPACE$(18); : SOUND 30000, 4ă LOCATE 1, 10: PRINT SPACE$(18)ă LOCATE 24, 10: PRINT "Now that's Simple"; : SOUND 30000, 4ăLOOPăSCREEN 0: WIDTH 80ăă'This program was created by PAL2CODE (c) 1993 SRD SoftWareăSUB SetPaletteăREDIM F(768)ăF$ = "#####M#M##MMM##M#MM8#MMM88888b8b88bbb88b8bbb8bbb": GOSUB MKPLTăF$ = "+++...222555999===@@@DDDHHHKKKOOOSSSVVVZZZ^^^bbb3": GOSUB MKPLTăF$ = "##8##=##?&&B**E--H11K55N88Q<<T@@XDDZII]NN_SSbYY3+": GOSUB MKPLTăF$ = "#8-#=/#B2#G4#L6#Q9#V;#\>#\B*]F2^K:_OA`TIaXQb]Y33#": GOSUB MKPLTăF$ = "66#99#<<#??#BB#EE#HH#LL#OO#RR#UU#XX#[[#^^#bb##8%#": GOSUB MKPLTăF$ = ":(#<,#?/#A3#C7#F:#H>#KB#ME#OI#RM#TP#WT#YX#\\YbYRb": GOSUB MKPLTăF$ = "QJbJG^GDZDAWA>S>;O;8L85H52E2/A/,=,):)&6&$3#YbbQbb": GOSUB MKPLTăF$ = "JbbE__A\\=ZZ:VV7RR5NN2JJ0FF-BB*>>(::%66#33Y^bQ[bJ": GOSUB MKPLTăF$ = "XbBUb:Rb3Ob+Mb#Jb#F\#BV#>P#:J#6D#3?#/9#,3YYbQRbJJ": GOSUB MKPLTăF$ = "bEE_@@\<<Y88V55R33N11J..F,,B**>'':%%6##3/@$2B#5D#": GOSUB MKPLTăF$ = "8F#;H#>J#AL#DN#GP#JR#MT#PV#SX#VZ#Y\#]_#bYb`S`^N^\": GOSUB MKPLTăF$ = "H\ZCZX=XV8VT3UP0QL.MH+ID(EA&A<%<7$73#3-+&1-'5/):2": GOSUB MKPLTăF$ = "+;3+=4,?5-@6-B7.D8/E9/G:0I;1J<1L=2N>3O?3Q@4SA5UB6": GOSUB MKPLTăF$ = "VD8WF;XH>YJAZMD[OG\QJ]SM^VP_XS`ZVb]ZZ##X)#W0#U6#T": GOSUB MKPLTăF$ = ";#S@#RF#PJ#ON#CN#6M#*M##L(#K3#K?#KH#FL#>M#5M#-N6#": GOSUB MKPLTăF$ = "Q>#QD#QL#QQ#NQ#FQ#@Q#9Q#1R#+R##bbb": GOSUB MKPLTă  DEF SEG = &HA000ă      FOR Colors = 1 TO 768     'convert this to load a PAL fileă        OUT &H3C9, F(Colors)    'from disk eg. GET #1,,a$ă      NEXT Colors               'F=ASC(A$) ect...ă  ERASE Fă  DEF SEGăEXIT SUBăăMKPLT:ă    j = j + 1ă    FOR jj = 1 TO LEN(F$)ă       count = count + 1ă       F(count) = (ASC(MID$(F$, jj, 1)) - 35)ă    NEXT jjăRETURNăEND SUBăăRich Geldreich                 MAKE GIF FILE                  MAKE,GIF,FILE                  Year of 1992 (00:00)   QB, PDS                368  15032    MAKEGIF.BAS 'ă'-----------------------------------------------------------------------------ă'    PDS 7.1 & QB4.5 GIF Compression Routine v1.01 By Rich Geldreich 1992ă'-----------------------------------------------------------------------------ă'QuickBASIC 4.5 & QBASIC users: Use search and replace and change all of theă'"SSEG" strings to "VARSEG" strings for this program to work properly.ă'ă'If anybody finds any problems with this routine, or has any questions,ă'then write/call:ă'Rich Geldreichă'410 Market St.ă'Gloucester City, NJ 08030ă'(609)-742-8752 or (609)-456-0721ă'ă'This routine is in the public domain... do what you want with it! Justă'give credit where credit is due! Thanks!ă'ă'NOTE: This version does not currently support EGA palettes.ă'V1.01- fixed up VGA palette messups with some VGA'săăDEFINT A-ZăDECLARE SUB BufferWrite (A%)ăDECLARE FUNCTION GetByte% ()ăDECLARE SUB MakeGIF (A$, ScreenX%, ScreenY%, Xstart%, YStart%, Xend%, Yend%, NumColors%, AdaptorType%)ăDECLARE SUB PutByte (A%)ăDECLARE SUB PutCode (A%)ăCONST True = -1, False = 0ăăDIM SHARED OutBuffer$, OStartAddress, OAddress, OEndAddress, OsegăDIM SHARED CodeSize, CurrentBit, Char&, BlockLengthăDIM SHARED Shift(7) AS LONGăDIM SHARED x, y, Minx, MinY, MaxX, MaxY, Done, GIFFile, LastLoc&ăăShiftTable:ăDATA 1,2,4,8,16,32,64,128ăă'-------------- Only for testing purposes:ăSCREEN 13ăăFOR A = 1 TO 40ă    x = RND * 320ă    y = RND * 200ă    c = RND * 256ă    CIRCLE (x, y), RND * 80, că    PAINT (x, y), RND * 256, căăNEXTăFOR A = 1 TO 1000: LINE -(RND * 320, RND * 200), RND * 256: NEXTăLINE (0, 0)-(0, 199), 14ăăMakeGIF "temp.gif", 320, 200, 0, 0, 319, 199, 256, 2ăă'Puts a byte into the disk buffer... when the disk buffer is full it isă'dumped to disk.ăSUB BufferWrite (A) STATICăă    IF OAddress = OEndAddress THEN  'are we at the end of the buffer?ă        PUT GIFFile, , OutBuffer$   ' yup, write it out andă        OAddress = OStartAddress    '  start all overă    END IFă    POKE OAddress, A                'put byte in bufferă    OAddress = OAddress + 1         'increment positionăEND SUBăă'This routine gets one pixel from the display.ăFUNCTION GetByte STATICă    GetByte = POINT(x, y)           'get the "byte"ă    x = x + 1                       'increment X coordinateă    IF x > MaxX THEN                'are we too far?ă        LINE (Minx, y)-(MaxX, y), 0 'a pacifier for impatient usersă        x = Minx                    'go back to startă        y = y + 1                   'increment Y coordinateă        IF y > MaxY THEN            'are we too far down?ă            Done = True             ' yup, flag it thenă        END IFă    END IFăEND FUNCTIONăă'ă'-----------------------------------------------------------------------------ă'    PDS 7.1 & QB4.5 GIF Compression Routine v1.00 By Rich Geldreich 1992ă'-----------------------------------------------------------------------------ă'ă'A$          = output filenameă'ScreenX     = X resolution of screen(320, 640, etc.)ă'ScreenY     = Y resolution of screen(200, 350, 480, etc.)ă'XStart      = <-upper left hand corner of area to encodeă'YStart      = < "                                      "ă'Xend        = <-lower right hand corner of area to encodeă'Yend        = < "                                       "ă'NumColors   = # of colors on screen(2, 16, 256)ă'AdaptorType = 1 for EGA 2 for VGAă'NOTE: EGA palettes are not supported in this version of MakeGIF.ă'ăSUB MakeGIF (A$, ScreenX, ScreenY, Xstart, YStart, Xend, Yend, NumColors, AdaptorType)ă    'hash table's size - must be a prime number!ă    CONST Table.Size = 7177ăă    DIM Prefix(Table.Size - 1), Suffix(Table.Size - 1), Code(Table.Size - 1)ă   ă    'The shift table contains the powers of 2 needed by theă    'PutCode routine. This is done for speed. (much faster toă    'look up an integer than to perform calculations...)ă    RESTORE ShiftTableă    FOR A = 0 TO 7: READ Shift(A): NEXTă   ă    'MinX, MinY, MaxX, MaxY have the encoding windowă    Minx = Xstart: MinY = YStartă    MaxX = Xend: MaxY = Yendă   ă    'Open GIF output fileă    GIFFile = FREEFILE                  'use next free fileă    OPEN A$ FOR BINARY AS GIFFileă   ă    'Put GIF87a header at beginning of fileă    B$ = "GIF87a"ă    PUT GIFFile, , B$ă   ă    'See how many colors are in this image...ă    SELECT CASE NumColorsă        CASE 2              'monochrome imageă            BitsPixel = 1   '1 bit per pixelă            StartSize = 3   'first LZW code is 3 bitsă            StartCode = 4   'first free codeă            StartMax = 8    'maximum code in 3 bitsăă        CASE 16             '16 colors imagesă            BitsPixel = 4   '4 bits per pixelă            StartSize = 5   'first LZW code is 5 bitsă            StartCode = 16  'first free codeă            StartMax = 32   'maximum code in 5 bitsă       ă        CASE 256            '256 color imagesă            BitsPixel = 8   '8 bits per pixelă            StartSize = 9   'first LZW code is 9 bitsă            StartCode = 256 'first free codeă            StartMax = 512  'maximum code in 9 bitsă    END SELECTă    'This following routine probably isn't needed- I've neveră    'had to use the "ColorBits" variable... With the EGA, youă    'have 2 bits for Red, Green, & Blue. With VGA, you have 6 bits.ă    SELECT CASE AdaptorTypeă        CASE 1ă            ColorBits = 2               'EGAă        CASE 2ă            ColorBits = 6               'VGAă    END SELECTă    ă    PUT GIFFile, , ScreenX  'put screen's dimensionsă    PUT GIFFile, , ScreenYă    'pack colorbits and bits per pixelă    A = 128 + (ColorBits - 1) * 16 + (BitsPixel - 1)ă    PUT GIFFile, , Aă    'throw a zero into the GIF fileă    A$ = CHR$(0)ă    PUT GIFFile, , A$ă    'Get the RGB palette from the screen and put it into the file...ă    SELECT CASE AdaptorTypeă    CASE 1ă        STOPă        'EGA palette routine not implemented yetă    CASE 2ă        OUT &H3C7, 0ă        FOR A = 0 TO NumColors - 1ă            'Note: a BIOS call could be used here, but then we have to useă            'the messy CALL INTERRUPT subs...ă            R = (INP(&H3C9) * 65280) \ 16128 'C=R * 4.0476190(for 0-255)ă            G = (INP(&H3C9) * 65280) \ 16128ă            B = (INP(&H3C9) * 65280) \ 16128ă            A$ = CHR$(R): PUT GIFFile, , A$ă            A$ = CHR$(G): PUT GIFFile, , A$ă            A$ = CHR$(B): PUT GIFFile, , A$ă        NEXTă    END SELECTă   ă    'write out an image descriptor...ă    A$ = ","                        '"," is image seperatoră    PUT GIFFile, , A$               'write ită    PUT GIFFile, , Minx             'write out the image's locationă    PUT GIFFile, , MinYă    ImageWidth = (MaxX - Minx + 1)  'find length & width of imageă    ImageHeight = (MaxY - MinY + 1)ă    PUT GIFFile, , ImageWidth       'store them into the fileă    PUT GIFFile, , ImageHeightă    A$ = CHR$(BitsPixel - 1)        '# bits per pixel in the imageă    PUT GIFFile, , A$ă   ă    A$ = CHR$(StartSize - 1)        'store the LZW minimum code sizeă    PUT GIFFile, , A$ă   ă    'Initialize the vars needed by PutCodeă    CurrentBit = 0: Char& = 0ă    ă    MaxCode = StartMax          'the current maximum code sizeă    CodeSize = StartSize        'the current code sizeă    ClearCode = StartCode       'ClearCode & EOF code are theă    EOFCode = StartCode + 1     '  first two entriesă    StartCode = StartCode + 2   'first free code that can be usedă    NextCode = StartCode        'the current codeă   ă    OutBuffer$ = STRING$(5000, 32)  'output buffer; for speedy disk writesă    A& = SADD(OutBuffer$)           'find address of bufferă    A& = A& - 65536 * (A& < 0)ă    Oseg = VARSEG(OutBuffer$) + (A& \ 16)   'get segment + offset >> 4ă    OAddress = A& AND 15                  'get address into segmentă    OEndAddress = OAddress + 5000         'end of disk bufferă    OStartAddress = OAddress              'current location in disk bufferă    DEF SEG = Osegăă    GOSUB ClearTree                       'clear the tree & output aă    PutCode ClearCode                     '  clear codeă   ă    x = Xstart: y = YStart          'X & Y have the current pixelă    Prefix = GetByte                'the first pixel is a special caseă    Done = False                    'True when image is completeă    ă    DO 'while there are more pixels to encode                        ăă        DO 'until we have a new string to put into the tableăă            IF Done THEN 'write out the last pixel, clear the disk bufferă                         'and fix up the last block so its count is correctă               ă                PutCode Prefix  'write last pixelă                PutCode EOFCode 'send EOF codeă               ă                IF CurrentBit <> 0 THENă                    PutCode 0       'flush out the last code...ă                END IFă                PutByte 0ăă                OutBuffer$ = LEFT$(OutBuffer$, OAddress - OStartAddress)ă                PUT GIFFile, , OutBuffer$ă                A$ = ";" + STRING$(8, &H1A) 'the 8 EOF chars is not standard,ă                                            'but many GIF's have them, so howă                                            'much could it hurt?ă                PUT GIFFile, , A$ă               ă                A$ = CHR$(255 - BlockLength) 'correct the last block's countă                PUT GIFFile, LastLoc&, A$ă               ă                CLOSE GIFFileă                EXIT SUBă            ELSE 'get a pixel from the screen and see if we can findă                 'the new string in the tableă                Suffix = GetByteă                GOSUB Hash        'is it there?ă                IF Found = True THEN Prefix = Code(Index) 'yup, replace theă                                    'prefix:suffix string with whateveră                                    'code represents it in the tableă            END IFă        LOOP WHILE Found  'don't stop unless we find a new stringă        ă        PutCode Prefix    'output the prefix to the fileă       ă        Prefix(Index) = Prefix  'put the new string in the tableă        Suffix(Index) = Suffixă        Code(Index) = NextCode  'we've got to keep track if what code this is!ă       ă        Prefix = Suffix         'Prefix=the last pixel pulled from the screenă       ă        NextCode = NextCode + 1   'get ready for the next codeă        IF NextCode = MaxCode + 1 THEN  'can an output code ever exceedă                                        'the current code size?ă            'yup, increase the code sizeăă            MaxCode = MaxCode * 2ă            ă        'Note: The GIF89a spec mentions something about a deferred cleară        'code. When the clear code is deferred, codes are not enteredă        'into the hash table anymore. When the compression of the imageă        'starts to fall below a certain threshold, the clear code isă        'sent and the hash table is cleared. The overall result isă        'greater compression, because the table is cleared less often.ă        'This version of MakeGIF doesn't support this, because some GIFă        'decoders crash when they attempt to enter too many codesă        'into the string table.ăă            IF CodeSize = 12 THEN       'is the code size too big?ă                PutCode ClearCode       'yup; clear the table andă                GOSUB ClearTree         'start overă                NextCode = StartCodeă                CodeSize = StartSizeă                MaxCode = StartMaxăăă            ELSEă                CodeSize = CodeSize + 1 'just increase the code size ifă            END IF                      'it's not too high( not > 12)ă        END IFă        ă    LOOP 'while we have more pixelsăClearTree:                 ă    FOR A = 0 TO Table.Size - 1       'clears the hashing tableă        Prefix(A) = -1                '-1 = invalid entryă        Suffix(A) = -1ă        Code(A) = -1ă    NEXTăRETURNă'this is only one of a plethora of ways to search the table foră'a match! I used a binary tree first, but I switched to hashingă'cause it's quicker(perhaps the way I implemented the tree wasn'tă'optimal... who knows!)ăHash:ă    'hash the prefix & suffix(there are also many ways to do this...)ă     '?? is there a better formula?ă    Index = ((Prefix * 256&) XOR Suffix) MOD Table.Sizeă    'ă    '(Note: the table size(7177 in this case) must be a prime number, oră    'else there's a chance that the routine will hang up... hate whenă    'that happens!)ă    'ă    'Calculate an offset just in case we don't find what we want on theă    'first try...ă    IF Index = 0 THEN    'can't have Table.Size-0 !ă        Offset = 1ă    ELSEă        Offset = Table.Size - Indexă    END IFă    ă    DO 'until we (1) find an empty entry or (2) find what we're lookin foră                                  ă       ă        IF Code(Index) = -1 THEN  'is this entry blank?ă            Found = False         'yup- we didn't find the stringă            RETURNă        'is this entry the one we're looking for?ă        ELSEIF Prefix(Index) = Prefix AND Suffix(Index) = Suffix THENă            'yup, congrats you now understand hashing!!!ă    ă            Found = Trueă            RETURNă        ELSEă            'shoot! we didn't find anything interesting, so we mustă            'retry- this is what slows hashing down. I could of usedă            'a bigger table, that would of speeded things up a littleă            'because this retrying would not happen as often...ă            Index = Index - Offsetă            IF Index < 0 THEN   'too far down the table?ă                'wrap back the index to the end of the tableă                Index = Index + Table.Sizeă            END IFă        END IFă    LOOPăEND SUBăă'Puts a byte into the GIF file & also takes care of each block.ăSUB PutByte (A) STATICă    BlockLength = BlockLength - 1   'are we at the end of a block?ă    IF BlockLength <= 0 THEN        ' yup,ă        BlockLength = 255           'block length is now 255ă        LastLoc& = LOC(1) + 1 + (OAddress - OStartAddress) 'remember the pos.ă        BufferWrite 255                                    'for later fixingă    END IFă    BufferWrite A   'put a byte into the bufferăEND SUBăă'Puts an LZW variable-bit code into the output file...ăSUB PutCode (A) STATICă    Char& = Char& + A * Shift(CurrentBit) 'put the char were it belongs;ă    CurrentBit = CurrentBit + CodeSize    ' shifting it to its proper placeă    DO WHILE CurrentBit > 7               'do we have a least one full byte?ă        PutByte Char& AND 255             ' yup! mask it off and write it oută        Char& = Char& \ 256               'shift the bit buffer right 8 bitsă        CurrentBit = CurrentBit - 8       'now we have 8 less bitsă    LOOP 'until we don't have a full byteăEND SUBăăPeter Norton                   DETECT VIDEO CARD              DETECT,VIDEO,CARD              Unknown Date (00:00)   QB, PDS                66   1821     GETVCARD.BASDECLARE FUNCTION GetVideoCard$ ()ăăTYPE RegTypeă        ax      AS INTEGERă        bx      AS INTEGERă        cx      AS INTEGERă        dx      AS INTEGERă        bp      AS INTEGERă        si      AS INTEGERă        di      AS INTEGERă        flags   AS INTEGERăEND TYPEăăDECLARE SUB INTERRUPT (IntNo AS INTEGER, InRegs AS RegType, OutRegs AS RegType)ăă        CLSă        PRINT "Your video card is a "; GetVideoCard$ăăENDăăFUNCTION GetVideoCard$ăăREM This function returns a 3-letter string: "MDA" (monochrome adapter card)ăREM "CGA" (color graphics adapter), "EGA" (enhanced graphics adapter),ăREM "PGA" (professional graphics adapter), "VGA" (variable graphics array)ăă   DIM InRegs AS RegType, OutRegs AS RegTypeă   InRegs.ax = &H1A00ă   CALL INTERRUPT(&H10, InRegs, OutRegs)ă   IF (OutRegs.ax AND &HFF) = &H1A THENă       Code = OutRegs.bx AND &HFFă       SELECT CASE Codeă           CASE 1ă                GetVideoCard$ = "MDA"ă           CASE 2ă                GetVideoCard$ = "CGA"ă           CASE 4 TO 5ă                GetVideoCard$ = "EGA"ă           CASE 6ă                GetVideoCard$ = "PGA"ă           CASE 7 TO 8ă                GetVideoCard$ = "VGA"ă       END SELECTă       EXIT FUNCTIONă   ELSEă       InRegs.ax = &H1200ă       InRegs.bx = &H10ă       CALL INTERRUPT(&H10, InRegs, OutRegs)ă       IF (OutRegs.bx AND &HFF) <> &H10 THENă           GetVideoCard$ = "EGA"ă           EXIT FUNCTIONă       ELSEă           InRegs.ax = &HF00ă           CALL INTERRUPT(&H10, InRegs, OutRegs)ă           IF (OutRegs.ax AND &HFF) = 7 THENă               GetVideoCard$ = "MDA"ă               EXIT FUNCTIONă           ELSEă               GetVideoCard$ = "CGA"ă               EXIT FUNCTIONă           END IFă       END IFă   END IFăăEND FUNCTIONăăRich Geldreich                 SCREEN COMPRESSION             SCREEN,COMPRESSION             12/26/92 (00:00)       PDS, VBDOS             577  25954    SP.BAS      'SCREEN 13 (320x200x256) Screen Compressor (SP1.BAS)ă'Public Domain By Rich Geldreich, December 26, 1992ă ă'Anyone  may  use this program in anything they want,  as long as theă'original author(me,  duh)  is  given  credit  where credit is due...ă'Thanks.   I'd appreciate a little cash on the side if you  make  anyă'money  off a product that uses this program...   :-) If you make anyă'neat modifications/optimizations to this program or the ASM decoder,ă'I would really like to seem them!ă ă'Description:ă'    This simple SCREEN 13  compression  program uses an LZ77 variantă'to compress SCREEN 13 images.  A FAST assembly subroutine is used toă'decompress the image back to the screen.    The  compression  shouldă'always beat  PCX, and should come fairly close or beat out GIF underă'most cases.ă'ă'    The assembly decompressor's  speed  is several magnitudes fasteră'than the quickest GIF decoder I've seen, VPIC 5.1. (Look how  simpleă'it is  and  you'll know why!) BTW- The output stage of this programă'was optimized for  decoding  speed,   not for compression.   Severală'optimizations could be added to increase this program's  compressionă'performance,   such  as  entropy  encoding  on the distance & lengthă'tokens(which would slow the decoder down immensely),  increasing theă'sizes of the sliding dictionary and look ahead buffers,  and furtheră'optimizing the  non-greedy  aspect  of  this  LZ77 implementation toă'choose the best character/match combinations to store in the  outpută'stream.ă'ă'    The assembly subroutine is for 286's and  above,   only.    Thisă'program does NOT work under QuickBASIC,  only PDS and VB/DOS becauseă'of the use of BYVAL.ă'ă'    Any  questions,   cash/and  or  death   threats   call   me   ată'(609)-742-8752  2:30pm  -  11:30pm  eastern  time  or  send  a  selfă'addressed stamped evelope (SASE) to:ă'ă'                     Rich Geldreichă'                     410 Market St.ă'                     Gloucester City, NJ 08030ă'ă'Possible  uses of this program:  Use a GIF or PCX converter(or SHELLă'out  to  VPIC)  to  display  the  image  you  want  to  use  in youră'application on SCREEN 13.   Then encode the image with this program.ă'You  can  then  instantly  recall  the  image using the fast Decom13ă'assembly language subroutine.ăăDEFINT A-Ză'Declaration  for  the assembly decompressor.   If the area of memoryă'passed does not start with  "RG",  the compressed image's signature,ă'then this routine will just return without  doing  anything.    Thisă'prevents your machine from hanging when you pass it a bum pointer.ăăDECLARE SUB Decom13 (BYVAL InSegment, BYVAL InOffset)ă ăCONST True = -1, False = 0ă'A larger buffer size would surely increase compression.ăCONST BufferSize = 4096, HashSize = 4096ăCONST Null = BufferSize, Threshold = 2, MaxMatch = 273ăCONST MaxCompares = 300 'Controls compression ratio vs. speedă ă'Arrays for LZ77 style compression with multiple linked listsăDIM SHARED RingBuffer((BufferSize + MaxMatch - 1) - 1)ăDIM SHARED NextCell((BufferSize + HashSize + 1) - 1)ăDIM SHARED LastCell((BufferSize + HashSize + 1) - 1)ă'Temp. holding buffer for compression tokensăDIM SHARED CodeBuffer(16 * 3 - 1)ă ă'Misc. stuffăDIM SHARED DoneFlag, xp, yp, xl, yl, xh, yhăDIM SHARED Match.Length, Match.Position, Match.DistanceăDIM SHARED IOBuffer$, IOPointerăDIM SHARED CodePointer, CodeCounter, OrMask AS LONG, BitAccum AS LONGă ăSCREEN 13ă ă'**COMPRESSION EXAMPLE**ăRANDOMIZE TIMERăFOR a = 1 TO 100  'draw us some garbageă    x = RND * 319: y = RND * 199: c = RND * 255ăă    CIRCLE (x, y), RND * 60, c: PAINT (x, y), RND * 255, căNEXTăFOR a = 1 TO 200: LINE -(RND * 319, RND * 199), RND * 255: NEXTăCompress13 "coolfile.bci" 'compress the screen to coolfile.bciă ă'**DECOMPRESSION EXAMPLE**ă'Allocate 64,000 bytes for a worst case scenario, decrease this ofă'course to match the image's compressed size in bytes...ăREDIM image(32000): DEF SEG = VARSEG(image(0))ăBLOAD "coolfile.bci", VARPTR(image(0)) 'Load the compressed data.ă ăPRINT "Press a key to decompress.": B$ = INPUT$(1): SCREEN 13ă ă'Call the asm routine to decompress the image.ăDecom13 VARSEG(image(0)), VARPTR(image(0)): B$ = INPUT$(1)ă ă'Compresses a SCREEN 13 image to a BLOADable file. Use the ASM subă'Decom13 to decompress the image back to the screen. This routineă'currently crawls, because I didn't optimize it that much.ă'The entire palette is also saved to the compressed file,ăSUB Compress13 (F$)ă    OPEN F$ FOR OUTPUT AS #1: CLOSE : OPEN F$ FOR BINARY AS #1ă    'Store the BLOAD header and image signature.ă    a$ = CHR$(&HFD) + CHR$(0) + CHR$(&HA0) + STRING$(4, 0) + "RG"ă    PUT #1, , a$ă    'Initialize a 4k disk output bufferă    IOBuffer$ = SPACE$(4096): IOPointer = 1ă    CodePointer = 0: CodeCounter = 0: OrMask = 1: BitAccum = 0ă    'Write the screen's palette.ă    OUT &H3C7, 0: FOR a = 0 TO 767: WriteByte INP(&H3C9): NEXTă ă    DoneFlag = False: xl = 0: yl = 0: xh = 319: yh = 199ă    xp = xl: yp = yl 'coordinate of next point to compressă ă    InitRingBuffer   'clear the ring bufferă    InitLZ77         'initialize the linked list poolă    'prime the look ahead bufferă    S = 0: R = BufferSize - MaxMatchă    FOR LookAheadLength = 0 TO MaxMatch - 1ă        IF DoneFlag THENă            EXIT FORă        ELSEă            RingBuffer(R + LookAheadLength) = GetPixelă        END IFă    NEXTă    'find first stringă    FindString Ră    DOă        'if match too small(less than 3 chars), the just outpută        'a single characteră        IF Match.Length <= Threshold THENă            OutputChar RingBuffer(R): Last.Match.Length = 1ă        ELSEă            'output a string match tokenă            Last.Match.Length = Match.Lengthă            'Send  the match's distance,  instead of its position ină            'the ring buffer, because the decompressor is not using aă            'ring buffer to store the decompressed data.ă            Match.Distance = (R - Match.Position) AND (BufferSize - 1)ă            OutputMatchă        END IFă        'prime the look ahead buffer with more charactersă        FOR a = 0 TO Last.Match.Length - 1ă            IF DoneFlag THEN EXIT FOR 'exit this loop if no more charsă            'delete string at S, then store a new char at Să            DeleteString S: RingBuffer(S) = GetPixelă            'keep a "ghost buffer" at the end of the ring buffer toă            'avoid using a logical AND on all of our buffer pointersă            IF S < (MaxMatch - 1) THENă                RingBuffer(S + BufferSize) = RingBuffer(S)ă            END IFă            S = (S + 1) AND (BufferSize - 1)ă            R = (R + 1) AND (BufferSize - 1)ă            'if not last time through loop then just add string to theă            'linked list pool, otherwise add it and find a matchă            '(this could be optimized so the IF/THEN conditional  isă            'removed from inside this loop)ă            IF a = (Last.Match.Length - 1) THENă                FindString Ră            ELSEă                MakeString Ră            END IFă        NEXTă        FOR a = a TO Last.Match.Length - 1ă            'this loop is active when no more characters are availableă            'from the input streamă            'Kill string at S, not sure if this is needed becauseă            'we're  not  storing any characters in its place. I seeă            'no reason to do it,   but  this  is one of those littleă            'quirks that all LZSS implementations I've seen have... ?ă ă            DeleteString Să            S = (S + 1) AND (BufferSize - 1)ă            R = (R + 1) AND (BufferSize - 1)ă            LookAheadLength = LookAheadLength - 1ă            IF LookAheadLength THENă                IF a = (Last.Match.Length - 1) THENă                    FindString Ră                ELSEă                    MakeString Ră                END IFă ă                'Limit  match  length  because the look ahead bufferă                'is growing smaller.   This is another little oddityă                'I've seen amoung the LZSS compressors,  they all doă                'this check outside this  loop  before they output aă                'character/match token...    There's  no  reason  toă                'check  outside  the  loop because the string searchă                'function always  limits  the  match  length  to theă                'look ahead buffer's size.   We only check when  theă                'look ahead buffer starts to get smaller.ă ă                IF Match.Length > LookAheadLength THENă                    Match.Length = LookAheadLengthă                END IFă            END IFă        NEXTă    LOOP WHILE LookAheadLength 'loop while still more chars to encodeă    OutputEOFă    WriteFlushă    'get (compressed size)-headeră    a& = LOF(1) - 7: SCREEN 0: WIDTH 80ă    IF a& > 64000 THENă        PRINT "Image could not be compressed."ă        CLOSE #1: KILL F$ă    ELSEă        PRINT "Image compressed to"; a&; "bytes."ă        IF a& > 32767 THEN a& = a& - 65536ă        'store the compressed size so BLOAD loads everything ină        a = a&: PUT #1, 6, a: CLOSE #1ă    END IFăEND SUBă ă'Deletes the string at S from the linked list pool.ăSUB DeleteString (BYVAL S)ă    NextCell = NextCell(S): LastCell = LastCell(S)ă    NextCell(LastCell) = NextCell: LastCell(NextCell) = LastCellă    NextCell(S) = NullăEND SUBă ă'Attempts to find a match at R+1 that is larger than the match foundă'at R, to get rid of some of the encoder's "greedy" characteristics.ăFUNCTION FindAlternate (BYVAL R, BYVAL MatchLength)ă    B1 = RingBuffer(R): B2 = RingBuffer(R + 1): B3 = RingBuffer(R + 2)ă    'hash out the first three characters of the string to locateă    P = (BufferSize + 1) + ((B1 * 14096& XOR B2 * 77 XOR B3) MOD HashSize)ă    MatchChar = RingBuffer(R + MatchLength)ă    FOR x = 1 TO MaxComparesă        P = NextCell(P) 'traverse linked list P for a matchă        'if we struck bottom then search failedă        IF P = Null THEN FindAlternate = False: EXIT FUNCTIONă        'compare string P to string Ră        IF RingBuffer(P) = B1 AND RingBuffer(P + 1) = B2 AND RingBuffer (P + 2) = B3 AND RingBuffer(P + MatchLength) = MatchChar THENă            FOR SearchLength = 3 TO (MaxMatch - 1) - 1ă                IF RingBuffer(R + SearchLength) <> RingBuffer(P + SearchLength) THEN EXIT FORă            NEXTă            'if we find a longer match then exit with successă            IF SearchLength > MatchLength THEN FindAlternate = True: EXIT FUNCTIONă        END IFă    NEXTă    FindAlternate = FalseăEND FUNCTIONă ă'Attempts  to  locate  a  match  in the linked list pool for  R. Mostă'other LZ77/LZSS  implementations  I've  seen  use  a  binary tree toă'locate string matches.   In this implementation,  I use  a  pool  ofă'linked  lists to locate strings.   Each linked list contains stringsă'which all  start  with the  same 3 characters. (Well, usually. Sinceă'hash collisions can occur,  sometimes  a linked list contains two oră'more different strings.   This isn't cool,  and can't be  eliminatedă'unless  another approach to collision handling is used.)ă'ă'    To locate a string,  its linked list is located through a simpleă'hashing formula(which was home brewed,  BTW,   so it may not be thată'optimal),  and then each string in the list is compared against  oură'target  string until we either find a string which matches perfectlyă'or the "bombout" variable is decremented to zero.   The bombout rateă'defines the number of string  compares  which may be performed untilă'the algorithm stops searching and settles with what it  has.    Thisă'decreases  compression  slightly,  but greatly increases compressionă'speed,  especially when  the  input  stream  contains  large runs ofă'repeated data.   (ARJ adjusts its bombout  rate  with  command  lineă'options:   options  -m4  to  -m0 vary the number of compares it doesă'against its string directionary,  therefore "dialing" in compressionă'speed  vs.    compression  ratio.    PKZIP  1.93a  does  this  also.ă'Normally, PKZIP 1.93a will set its bombout rate to 50 compares.  Theă'Continued on page 4ăă'-s option brings this down to 10-7 compares(can't remember exactly),ă'and  the -ex option increases the  bombout  rate  to  500  compares.ă'Obviously, the -ex option slows down PKZIP 1.93a  because it can  doă'up to ten times more string compares than usual.)ă'ă'    One optimization that I have not seen anywhere yet speeds up theă'string  search  by  skipping  strings which can't possibly be largeră'than the largest string found up to that point...ă'ă'    For  instance,   let's  say we are searching for the string "theă'president eats peanuts".   Let's  also  say  the largest match we'veă'found so far is "the president ", or 14 characters.  The next stringă'to  compare  against  our target is "the president finds coolness ină'compression".  Since the whole point of searching is to look for theă'largest match, there's no use in doing a whole string compare if theă'match will be smaller/equal to  our current match.   A quick compareă'of the character that must match for the match length to  be  largeră'will  tell  us  if  the  string  *may* be larger.   If the characteră'matches,  we must do the compare.   If it doesn't,  then there is noă'use in doing the string compare because the match cannot possibly beă'longer.   Since the 15th character of our target string is "e",  andă'the 15th character of our search string is "f",  it can instantly beă'discarded because the  match  cannot  possibly  be  larger  than  14ă'characters.   This especially speeds up the search when large stringă'matches  are found in the input stream(such as in text files).   Andă'since the optimization is relatively trivial, it shouldn't slow downă'the string search loop much  at  all  when  input stream is not veryă'compressable.ă'ă'   Finally,  using the linked list pool to find string matches makesă'finding the  closest  AND  longest  match  very  simple(finding  theă'closest  match  aids  entropy encoding in attaining more compressionă'because it can  favor  close  matches  over  far  ones).   Since newă'strings are always inserted as the first string in its  pool,    theă'entire  list is already sorted in order of distance from our currentă'position in the ring buffer.ăSUB FindString (BYVAL R)ă    B1 = RingBuffer(R): B2 = RingBuffer(R + 1): B3 = RingBuffer(R + 2)ă    'hash the first 3 characters of the string to findă    LinkHead = (BufferSize + 1) + ((B1 * 14096& XOR B2 * 77 XOR B3) MOD HashSize)ă    Match.Length = 0: MatchChar = B1: P = LinkHeadă    FOR x = 1 TO MaxCompares 'MaxCompares is the bombout rateă        'traverse linked list P for matchă        P = NextCell(P): IF P = Null THEN EXIT FORă        'If first 3 characters match, and the character ată        'P+MatchLength=R+MatchLength, then compare strings.ă        IF RingBuffer(P) = B1 AND RingBuffer(P + 1) = B2 AND RingBuffer (P + 2) = B3 AND RingBuffer(P + Match.Length) = MatchChar THENă            FOR SearchLength = 3 TO (MaxMatch - 1) - 1ă                IF RingBuffer(R + SearchLength) <> RingBuffer(P + SearchLength) THEN EXIT FORă            NEXTă            'if matchsize=maxmatch then take it and rună            '(MaxMatch-1) because our look ahead buffer is oneă            'character longer than the maximum match length.ă            IF SearchLength >= (MaxMatch - 1) THENă                Match.Length = (MaxMatch - 1)ă                Match.Position = Pă                EXIT FORă            END IFă            'if we find a longer match then take ită            IF SearchLength > Match.Length THENă                Match.Length = SearchLengthă                Match.Position = Pă                MatchChar = RingBuffer(R + Match.Length)ă            END IFă        END IFă    NEXTă    'make the new string the first entry in its linked list poolă    'so we always find the closest matchă    a = NextCell(LinkHead): NextCell(LinkHead) = Ră    LastCell(a) = R: LastCell(R) = LinkHead: NextCell(R) = aă    'Attempt to find a longer match at R+1. If there is a longeră    'match, then set the match length to zero so the current matchă    'is ignored.ă    IF (Match.Length <> 0) AND (Match.Length <> (MaxMatch - 1)) THENă        IF FindAlternate(R + 1, Match.Length) THEN Match.Length = 0ă    END IFăEND SUBă ă'Returns one pixel from the display.ăFUNCTION GetPixelă    GetPixel = POINT(xp, yp): xp = xp + 1ă    IF xp > xh THENă        LINE (xl, yp)-(xh, yp), 0ă        xp = xl: yp = yp + 1: DoneFlag = yp > yhă    END IFăăăEND FUNCTIONă ă'Initializes the linked list pool arraysă'Page 5 of ENCODE13.BAS begins here.ăSUB InitLZ77ă    FOR a = 0 TO (BufferSize + 1 + HashSize) - 1ă        NextCell(a) = Null: LastCell(a) = Nullă    NEXTăEND SUBă ă'Initializes the ring buffer.ăSUB InitRingBufferă    FOR a = 0 TO BufferSize - MaxMatch - 1: RingBuffer(a) = 0: NEXTăEND SUBă ă'Stores the string at R into its linked list without scanning for aă'match.ăSUB MakeString (BYVAL R)ă    LinkHead = (BufferSize + 1) + ((RingBuffer(R) * 14096& XOR _ăRingBuffer(R + 1) * 77 XOR RingBuffer(R + 2)) MOD HashSize)ă    a = NextCell(LinkHead): NextCell(LinkHead) = R: LastCell(a) = Ră    LastCell(R) = LinkHead: NextCell(R) = aăEND SUBă ă'Stores an uncompressed character and its flag to the output codeă'buffer.ăSUB OutputChar (BYVAL a)ă    OrMask = OrMask * 2 'send a binary 0ă    CodeBuffer(CodePointer) = a     'store the characteră    CodeCounter = CodeCounter + 1ă    IF CodeCounter = 16 THEN        'if 16 codes the write 'em oută        'write the bit flagsă        WriteByte BitAccum AND 255: WriteByte BitAccum \ 256ă        'write the codesă        FOR a = 0 TO CodePointer: WriteByte CodeBuffer(a): NEXTă        CodePointer = 0: CodeCounter = 0: OrMask = 1: BitAccum = 0ă    ELSEă        CodePointer = CodePointer + 1ă    END IFăEND SUBă ă'Writes an EOF code to the output code bufferăSUB OutputEOFă    BitAccum = BitAccum OR OrMaskă    CodeBuffer(CodePointer) = 15ă    CodeBuffer(CodePointer + 1) = 0: CodeBuffer(CodePointer + 2) = 255ă    WriteByte BitAccum AND 255: WriteByte BitAccum \ 256ă    FOR a = 0 TO CodePointer + 2: WriteByte CodeBuffer(a): NEXTăEND SUBă ă'Outputs a match and its flag to the output code buffer.ăSUB OutputMatchă    BitAccum = BitAccum OR OrMask: OrMask = OrMask * 2ă    'Favor short matches(3-17 characters).ă    IF Match.Length < 18 THENă        CodeBuffer(CodePointer) = (Match.Length - (Threshold + 1)) ORă_ă(Match.Distance AND &HF) * 16ă        CodeBuffer(CodePointer + 1) = Match.Distance \ 16ă        CodePointer = CodePointer + 2ă    ELSEă        CodeBuffer(CodePointer) = 15 OR (Match.Distance AND &HF) * 16ă        CodeBuffer(CodePointer + 1) = Match.Distance \ 16ă        CodeBuffer(CodePointer + 2) = Match.Length - 18ă        CodePointer = CodePointer + 3ă    END IFă    CodeCounter = CodeCounter + 1ă    IF CodeCounter = 16 THENă        WriteByte BitAccum AND 255: WriteByte BitAccum \ 256ă        FOR a = 0 TO CodePointer - 1: WriteByte CodeBuffer(a): NEXTă        CodePointer = 0: CodeCounter = 0: OrMask = 1: BitAccum = 0ă    END IFăEND SUBă ă'Stores one byte into the disk output buffer, and flushes it when ită'is full.ăSUB WriteByte (BYVAL a)ă    MID$(IOBuffer$, IOPointer, 1) = CHR$(a)ă    IOPointer = IOPointer + 1ă    IF IOPointer = 4097 THEN 'if buffer full then flushă        PUT #1, , IOBuffer$: IOPointer = 1ă    END IFăEND SUBă ă'Flushes the disk output buffer.ăSUB WriteFlushă    IOBuffer$ = LEFT$(IOBuffer$, IOPointer - 1): PUT #1, , IOBuffer$ăEND SUBă ăă'---------8<----[ DECOM13.ASM begins here. ]---->8-------------ă;TASM v2.0 source code for DECOM13.OBJ. By Rich Geldreich, 1992ă;A LZ77 style sliding dictionary decompressor for SCREEN 13 images.ă.286                                    ;<-sorry 8088 & 8086 guys,ăIDEAL                                   ;it's 1992 get a real CPU!ăMODEL SMALLăCODESEGăPUBLIC  Decom13ăPROC    Decom13ăINPTR   EQU [dword ss:bp+6]ăP       = 2ă        Cld                             ;clear direction flagă        Push    bp                      ;setup stack frameă        Mov     bp, spă        Push    ds es si di             ;preserve important regsă        Lds     si, INPTR               ;get pointer from stackă        Cmp     [word ds:si], 'R'+'G'*256 ;is an image there?ă        Je      @@OK                    ;nopeă        Jmp     @@Exită@@OK:   Inc     si                      ;get by signatureă        Inc     siă        Mov     [word cs:ISeg1+1], ds   ;a little self modifying codeă        Mov     [word cs:ISeg2+1], ds   ; can't hurt(I think).ă        Jmp     @@10                    ;empty the prefetchă@@20:   Mov     dx, 03C4h               ;sequencer registeră        Mov     al, 1                   ;clocking mode registeră        Out     dx, ală        Inc     dxă        In      al, dxă        Or      al, 32                  ;set screen off bită        Out     dx, al                  ;go for screen disableă        Mov     dl, 0DAh                ;wait for vertical retraceă@@30:   In      al, dxă        And     al, 8ă        Jz      @@30ă        Mov     dl, 0C8h                ;dx=03C8hă        Mov     cx, 768                 ;prepare to set the paletteă        Xor     al, al                  ;start at attribute 0ă        Out     dx, ală        Inc     dxă        Rep     Outsb                   ;output the paletteă        Push    0A000h                  ;es=screen's segmentă        Pop     esă        Xor     di, di                  ;di=output offsetă        Mov     dx, di                  ;dx=# bits left in bitbufferăEVEN                                    ;-decode loop starts here-ă@@MoreBits:ă        Lodsw                           ;prime the bitbufferă        Mov     dl, 16                  ;16 more bits nowă        Mov     bp, axă        Shr     bp, 1                   ;character or match?ă        Jc      @@Match                 ;go for match if carry setăEVENă@@NoMatch:ă        Movsb                           ;store one characteră@@MainLoop:ă        Dec     dx                      ;any more bits left?ă        Jz      @@MoreBits              ;get more if notă        Shr     bp, 1                   ;character of match?ă        Jnc     @@NoMatch               ;go if character(carry=0)ă@@Match:                                ;-handles a string match-ă        Lodsw                           ;get match length andă        Mov     cx, ax                  ; and distanceă        Shr     ax, 4                   ;shift by the match lengthă        Neg     ax                      ;got -distance nowă        Add     ax, di                  ;ax=match positionă        And     cx, 0Fh                 ;get low 4 bytes for lengthă        Add     cl, 3                   ;add in length thresholdă        Cmp     cl, 18                  ;is this a big match?ă        Je      @@GetMore               ;go get 1 more byte if soă        Xchg    ax, si                  ;save si and set si to matchă        Mov     bx, es                  ; positionă        Mov     ds, bx                  ;ds=es=0A000hă        Rep     Movsb                   ;copy the stringă        Mov     si, ax                  ;restore ds and siăISeg1:  Mov     ax, 09999h              ;<--self modifying codeă        Mov     ds, axă        Jmp     @@MainLoop              ;go againăEVENă@@GetMore:ă        Mov     bx, ax                  ;save match pos in bxă        Xor     ax, ax                  ;get one more byte foră        Lodsb                           ; match lengthă        Add     cx, axă        Cmp     cx, 273                 ;end of image code?ă        Je      @@Exit                  ;if so then doneă        Xchg    bx, si                  ;save si and set si to matchă'Continued on page 2ăă'Page 2 of DECOM13.ASM begins here.ă        Mov     ax, es                  ; posă        Mov     ds, ax                  ;ds=es=0A000hă        Rep     Movsb                   ;copy the dataă        Mov     si, bx                  ;restore ds and siăISeg2:  Mov     ax, 09999h              ;<--self modifying codeă        Mov     ds, axă        Jmp     @@MainLoopă@@Exit: Mov     dx, 03C5h               ;turn screen back onă        In      al, dxă        And     al, NOT 32ă        Out     dx, ală        Pop     di si es ds bp          ;exit back to calleră        Retf    P*2ă@@10:   Jmp     @@20ăENDP    Decom13ăENDă'---------8<----[ DECOM13.ASM ends here. ]---->8-------------ăăă ă   Oops. Here is the OBJ for the assembly decoder:ă ăTo execute this script, save it to a file and type DEBUG < filenameăwhere "filename" is the name of this script file.ăăE165"DECOM13.OBJ" 0ăE200".q..9EKNXxKPlAX9/BJHhXs5....IJbQWx46/BrQZpaMgJaQU.WJZ7rQdxaPU"ăE23D"6X9kY9WH..Edjf0dUl0YJqMjpKAnsGEHp2g6C...ZCHK8...U4W1..EVGdZA."ăE27A"E/TFJFMF3/1x2F3N7a5..Gk0U.12kMKm..3w3F/FJE2EIEI3YkMS..6/..2IE"ăE2B7".DM70.M.F57pHJ/pWOG..4wj.P/d1..E.5EIF1xIHlA1...UX6G...7O.F08h"ăE2F4".2...kTJ9mi54MpJ3Pb//mXI5Fr.df6.4NY9AuFS.s0XSU7.df6.uGw.k4Uv0"ăE331"lC1UsigOnC76ErymWQi.AUA.viEnv4O..u/nwzWLregEg6uFriQ7.7d8FbwFr"ăE36E"yQsruW65Au2QDq1QwUVz.U/D.Ut9/RFM7X1vsqnHuWkXPaNu6qfHBY9WxA.nu"ăE3AB".65MyF2.RFQcrA0gXMDDd9CDiNadXMjShuKw.gHmrizZL5wFL8H..dDrz2kN0"ăE3E8".EQ4I3.lSEJ.mfc....R"ăE100 B8 0 3C BA 65 1 33 C9 CD "!rC" BE 0 2 50 BD 7D 1 55 BF 88 90ăE117 "W3" DB B1 FA 8A F0 80 C1 6 32 E4 AC "<9v" 8 "<Zv" 2 2C 6 2CăE12F 7 2C 2E E3 E8 D3 E0 A C6 AA 2 D8 92 "IIMu" E0 80 FB 0 75 9 5AăE147 59 5B B4 40 CD 21 73 7 B4 9 BA 58 1 CD 21 CD 20 7 "Error!$"ăGăQăMatt Hart                      DEFINITIVE SCREEN SAVER        DEFINITIVE,SCREEN,SAVER        01/14/93 (00:00)       QB, PDS                486  15579    DEFSCRS.BAS ' DEFSCRS.BAS  1-14-93  Matt Hartă'ă' The definitive screen saveră' Works in any screen mode, compresses and savesă' multiple screens or screen portions per file.ă' Screen portions can be restored to any part ofă' the screen for window movement.ă'ă' Compile with /AHă'ă' Storage method:ă' --------------- Each Screenă'             x = Screen 1 dataă'             x = Screen 2 dataă'             .....ă'             x = Screen (number of screens) dataă'       4 bytes = Number of RLL bytes for screenă'       4 bytes = Number of actual bytes for screenă'       4 bytes = Offset into file for screen dataă'       2 bytes = X1ă'       2 bytes = Y1ă'       2 bytes = X2ă'       2 bytes = Y2ă'       2 bytes = Screen mode numberă'             ..... Continue for number of screensă' ---------------------------ă'       Last 2 bytes is the number of screensă'ă' The seemingly backward method of storing the screen infoă' after the screen data is done so that offsets for screenă' data do not change, and a screen's data need not be movedă' when adding screens.ă'ă' RLL compression is:ă'       Ascii 0 = RLL code followsă'           Ascii 0 = Just kidding - actually ascii 0ă'             ORă'           Ascii 1-255 = Number of repeatsă'           Ascii 0-255 = Character to repeată'         ORă'       Ascii 1-255 = Characteră'ă' I use the backslash division (integer division) with ratheră' than regular division to prevent linking with the floatingă' point library - and it is faster anyway.ă'ă' Note that the compression and (especially important) the decompressionă' can easily be done in assembly and would be, by some previous RLL stuff,ă' about 27 times faster.ă'ă' All of these test screens took up only 18K in a disk file - but manyă' contained repetitive colors, so actual compression will be less.ă'ă' MonType = 0 For MONOă' MonType = 1 For CGAă' MonType = 2 For EGAă' MonType = 3 For MCGA or VGAăăDEFINT A-ZăDECLARE SUB HSSaveScreen (ScreenFile$, X1%, Y1%, X2%, Y2%, MonType%, ScrNum%)ăDECLARE SUB HSRestoreScreen (ScreenFile$, X1%, Y1%, MonType%, ScrNum%)ăDECLARE SUB HSRLLCompress (Store&(), RLL&(), ActualBytes&, RLLBytes&)ăDECLARE SUB HSIncAddr (DSeg%, DAddr%, Num%)ăDECLARE SUB HSRLLDeCompress (Store&(), RLL&(), RLLBytes&)ăă    TYPE RegTypeXă        AX    AS INTEGERă        BX    AS INTEGERă        CX    AS INTEGERă        DX    AS INTEGERă        BP    AS INTEGERă        SI    AS INTEGERă        DI    AS INTEGERă        Flags AS INTEGERă        DS    AS INTEGERă        ES    AS INTEGERă    END TYPEă    TYPE HSDefScrsTypeă        RLLBytes    AS LONGă        ActualBytes AS LONGă        Offset      AS LONGă        X1          AS INTEGERă        Y1          AS INTEGERă        X2          AS INTEGERă        Y2          AS INTEGERă        ScrMode     AS INTEGERă        MonType     AS INTEGERă    END TYPEăă    MonType = 3ă' ----------------------------- Sample Codeă    RANDOMIZE TIMERă    ScreenFile$ = "DEFSCRS.BIN"ăă    CLS : PRINT "Test Screen 0"                         ' Any typeă    COLOR 14, 4: PRINT "     Test Screen 0"ă    COLOR 6, 4: LOCATE 25, 1: PRINT SPACE$(80);ă    X1 = 1: Y1 = 1: X2 = 80: Y2 = 25ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ăă    CLS : C = 1: A$ = "Second Test 0  "                 ' Any typeă    COLOR 7, 0ă    FOR Y = 1 TO 25ă        COLOR C: LOCATE Y, 1ă        PRINT A$ + A$ + A$ + A$ + A$; Y;ă        C = C + 1: IF C = 16 THEN C = 1ă    NEXTă    X1 = 1: Y1 = 1: X2 = 80: Y2 = 25ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ă        ă    SCREEN 1: LINE (0, 0)-(80, 80), 1, BF               ' CGA +ă    PRINT "Screen 1"ă    X1 = 0: Y1 = 0: X2 = 80: Y2 = 80ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ăă    SCREEN 7: LINE (0, 0)-(100, 100), 10, BF            ' EGA +ă    PRINT "Screen 7"ă    X1 = 0: Y1 = 0: X2 = 100: Y2 = 100ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ăă    SCREEN 9: LINE (0, 0)-(639, 349), 12, BF            ' EGA +ă    PRINT "Screen 9"ă    X1 = 0: Y1 = 0: X2 = 639: Y2 = 349ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ăă    SCREEN 11: Red& = 50: Green& = 30: Blue& = 10       ' VGA +ă    Colr& = 65536 * Blue& + 256& * Green& + Red&ă    PALETTE 1, Colr&: LINE (0, 0)-(100, 100), 1, BFă    PRINT "Screen 11"ă    X1 = 0: Y1 = 0: X2 = 100: Y2 = 100ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ăă    SCREEN 13: Pal = 0                                  ' VGA +ă    FOR X = 0 TO 318 STEP 20ă        Red& = RND(1) * 63: Green& = RND(1) * 63: Blue& = RND(1) * 63ă        Colr& = 65536 * Blue& + 256& * Green& + Red&ă        PALETTE Pal, Colr&ă        LINE (X, 0)-(X + 19, 75), Pal, BFă        Pal = Pal + 1ă    NEXTă    FOR X = 0 TO 318 STEP 20ă        Red& = RND(1) * 63: Green& = RND(1) * 63: Blue& = RND(1) * 63ă        Colr& = 65536 * Blue& + 256& * Green& + Red&ă        PALETTE Pal, Colr&ă        LINE (X, 76)-(X + 19, 150), Pal, BFă        Pal = Pal + 1ă    NEXTă    FOR X = 0 TO 318 STEP 20ă        Red& = RND(1) * 63: Green& = RND(1) * 63: Blue& = RND(1) * 63ă        Colr& = 65536 * Blue& + 256& * Green& + Red&ă        PALETTE Pal, Colr&ă        LINE (X, 151)-(X + 19, 199), Pal, BFă        Pal = Pal + 1ă    NEXTă    PRINT "Screen 13"ă    X1 = 0: Y1 = 0: X2 = 319: Y2 = 199ă    CALL HSSaveScreen(ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ă    NumScreens = ScrNumă    CLS : SCREEN 1: SCREEN 0: WIDTH 80ăă    ScrNum = 3: CALL HSRestoreScreen(ScreenFile$, 80, 80, MonType, ScrNum)ă    DO: A$ = INKEY$: LOOP UNTIL LEN(A$)ă    ScrNum = 6: CALL HSRestoreScreen(ScreenFile$, 80, 80, MonType, ScrNum)ă    DO: A$ = INKEY$: LOOP UNTIL LEN(A$)ăă    DOă        CLSă        ScrNum = INT(RND * NumScreens) + 1: X1 = 0: Y1 = 0ă        CALL HSRestoreScreen(ScreenFile$, X1, Y1, MonType, ScrNum)ăă        DO: A$ = INKEY$: LOOP UNTIL LEN(A$)ă    LOOP UNTIL A$ = CHR$(27)ăă    SCREEN 0: WIDTH 80: CLS : ENDăă    ' Good candidate for assemblyăSUB HSIncAddr (DSeg, DAddr, Num)ă    IF CLNG(DAddr) + Num > 32751& THENă        DAddr = DAddr - 32752& + Numă        DSeg = DSeg + 2047ă        DEF SEG = DSegă    ELSEă        DAddr = DAddr + Numă    END IFăEND SUBăăSUB HSRestoreScreen (ScreenFile$, X1, Y1, MonType, ScrNum)ă    F = FREEFILEă    OPEN ScreenFile$ FOR BINARY AS Fă    IF LOF(F) = 0 THEN CLOSE F: EXIT SUBă    SEEK F, LOF(F) - 1ă    Z$ = "  ": GET F, , Z$: NumScreens = CVI(Z$)ă    REDIM Scrs(1 TO NumScreens) AS HSDefScrsTypeă    SeekPos& = LOF(F) - LEN(Scrs(1)) * NumScreens - 1ă    SEEK F, SeekPos&ă    FOR i = 1 TO ScrNumă        GET F, , Scrs(i)ă    NEXTăă    SEEK F, Scrs(ScrNum).Offsetă    DimSize = Scrs(ScrNum).RLLBytes \ 4 + 1ă    REDIM RLL&(1 TO DimSize)ă    Z$ = "    "ă    FOR i = 1 TO DimSizeă        GET F, , Z$: RLL&(i) = CVL(Z$)ă    NEXTăă    IF Scrs(ScrNum).ScrMode = 0 THEN WIDTH 80ă    SCREEN Scrs(ScrNum).ScrModeă    IF Scrs(ScrNum).ScrMode > 10 THENă        SELECT CASE Scrs(ScrNum).ScrModeă            CASE 11: NumPal = 2ă            CASE 12: NumPal = 16ă            CASE 13: NumPal = 256ă        END SELECTă        DIM Pal(1 TO NumPal) AS STRING * 3ă        FOR i = 1 TO NumPală            GET F, , Pal(i)ă        NEXTă        DIM InRegs AS RegTypeXă        DIM OutRegs AS RegTypeXă        InRegs.AX = &H1012ă        InRegs.BX = 0ă        InRegs.CX = NumPală        InRegs.ES = VARSEG(Pal(1))ă        InRegs.DX = VARPTR(Pal(1))ă        CALL INTERRUPTX(&O10, InRegs, OutRegs)ă    END IFă    CLOSE Făă    DimSize = Scrs(ScrNum).ActualBytes \ 4 + 1ă    REDIM Store&(1 TO DimSize)ăă    ' Good candidate for assemblyă    CALL HSRLLDeCompress(Store&(), RLL&(), Scrs(ScrNum).RLLBytes)ă    ' Actually, the array could be decompressed directly to the screenă    ' without the need for the incremental Store&() arrayăă    IF X1 = 0 THEN X1 = Scrs(ScrNum).X1ă    IF Y1 = 0 THEN Y1 = Scrs(ScrNum).Y1ă    XDiff = Scrs(ScrNum).X2 - Scrs(ScrNum).X1ă    YDiff = Scrs(ScrNum).Y2 - Scrs(ScrNum).Y1ă    X2 = X1 + XDiffă    Y2 = Y1 + YDiffăă    IF Scrs(ScrNum).ScrMode > 0 THEN GOSUB RestoreGraphics: EXIT SUBăă    IF MonType THEN TSeg = &HB800 ELSE TSeg = &HB000ăă    FSeg = VARSEG(Store&(1)): FAddr = VARPTR(Store&(1))ăă    ' Good candidate for assemblyă    NumCols = X2 - X1ă    FOR l = Y1 TO Y2ă        Addr = (X1 - 1) * 2 + (l - 1) * 160ă        FOR i = Addr TO Addr + (NumCols * 2) STEP 2ă            DEF SEG = FSegă            Char = PEEK(FAddr): FAddr = FAddr + 1ă            DEF SEG = TSegă            POKE i, Chară        NEXTă    NEXTă    FOR l = Y1 TO Y2ă        Addr = (X1 - 1) * 2 + 1 + (l - 1) * 160ă        FOR i = Addr TO Addr + (NumCols * 2) STEP 2ă            DEF SEG = FSegă            Attr = PEEK(FAddr): FAddr = FAddr + 1ă            DEF SEG = TSegă            POKE i, Attră        NEXTă    NEXTă    EXIT SUBăăRestoreGraphics:ă    PUT (X1, Y1), Store&(1)ăRETURNăEND SUBăă    ' Good candidate for assemblyăSUB HSRLLCompress (Store&(), RLL&(), ActualBytes&, RLLBytes&)ă    RLLBytes& = 0&ă    FSeg = VARSEG(Store&(1)): FAddr = VARPTR(Store&(1))ă    TSeg = VARSEG(RLL&(1)): TAddr = VARPTR(RLL&(1))ă    FOR i& = 1& TO ActualBytes&ă        DEF SEG = FSegă        Z = PEEK(FAddr)ă        CALL HSIncAddr(FSeg, FAddr, 1)ă        IF i& < ActualBytes& - 2 AND PEEK(FAddr) = Z AND PEEK(FAddr + 1) = Z AND PEEK(FAddr + 2) = Z THENă            Num = 4ă            i& = i& + 3ă            CALL HSIncAddr(FSeg, FAddr, 3)ă            DO UNTIL PEEK(FAddr) <> Z OR i& > ActualBytes&ă                IF Num = 255 THEN EXIT DOă                Num = Num + 1ă                i& = i& + 1ă                CALL HSIncAddr(FSeg, FAddr, 1)ă            LOOPă            RLLBytes& = RLLBytes& + 3ă            DEF SEG = TSegă            POKE TAddr, 0: CALL HSIncAddr(TSeg, TAddr, 1)ă            POKE TAddr, Num: CALL HSIncAddr(TSeg, TAddr, 1)ă            POKE TAddr, Z: CALL HSIncAddr(TSeg, TAddr, 1)ă        ELSEIF Z = 0 THENă            DEF SEG = TSegă            POKE TAddr, 0: CALL HSIncAddr(TSeg, TAddr, 1)ă            POKE TAddr, 0: CALL HSIncAddr(TSeg, TAddr, 1)ă            RLLBytes& = RLLBytes& + 2ă        ELSEă            DEF SEG = TSegă            POKE TAddr, Z: CALL HSIncAddr(TSeg, TAddr, 1)ă            RLLBytes& = RLLBytes& + 1ă        END IFăă    NEXTă    ERASE Store&ăEND SUBăă    ' Good candidate for assemblyăSUB HSRLLDeCompress (Store&(), RLL&(), RLLBytes&)ă    FSeg = VARSEG(RLL&(1)): FAddr = VARPTR(RLL&(1))ă    TSeg = VARSEG(Store&(1)): TAddr = VARPTR(Store&(1))ă    FOR i& = 1 TO RLLBytes&ă        DEF SEG = FSegă        Z = PEEK(FAddr): CALL HSIncAddr(FSeg, FAddr, 1)ă        IF Z = 0 THENă            Z = PEEK(FAddr): CALL HSIncAddr(FSeg, FAddr, 1)ă            i& = i& + 1&ă            IF Z = 0 THENă                DEF SEG = TSegă                POKE TAddr, Z: CALL HSIncAddr(TSeg, TAddr, 1)ă            ELSEă                Char = PEEK(FAddr): CALL HSIncAddr(FSeg, FAddr, 1)ă                i& = i& + 1&ă                DEF SEG = TSegă                FOR j = 1 TO Ză                    POKE TAddr, Char: CALL HSIncAddr(TSeg, TAddr, 1)ă                NEXTă            END IFă        ELSEă            DEF SEG = TSegă            POKE TAddr, Z: CALL HSIncAddr(TSeg, TAddr, 1)ă        END IFă    NEXTă    ERASE RLL&ăEND SUBăăSUB HSSaveScreen (ScreenFile$, X1, Y1, X2, Y2, MonType, ScrNum)ă    F = FREEFILEă    OPEN ScreenFile$ FOR BINARY AS Fă    IF LOF(F) THENă        SEEK F, LOF(F) - 1ă        Z$ = "  ": GET F, , Z$: NumScreens = CVI(Z$) + 1ă        REDIM Scrs(1 TO NumScreens) AS HSDefScrsTypeă        SeekPos& = LOF(F) - LEN(Scrs(1)) * (NumScreens - 1) - 1ă        SEEK F, SeekPos&ă        FOR i = 1 TO NumScreens - 1ă            GET F, , Scrs(i)ă        NEXTă    ELSEă        NumScreens = 1ă        REDIM Scrs(1 TO NumScreens) AS HSDefScrsTypeă        SeekPos& = 1ă    END IFă    ScrNum = NumScreensăă    DEF SEG = 0: BIOSMode = PEEK(&H449): DEF SEGă    SELECT CASE BIOSModeă        CASE 3ă            ScrMode = 0: NumBytes& = (X2 - X1 + 1) * 2 * (Y2 - Y1 + 1)ă        CASE 4ă            ScrMode = 1: BPP = 2: P = 1: GOSUB CalcBytesă        CASE 6ă            ScrMode = 2: BPP = 1: P = 1: GOSUB CalcBytesă        CASE 13ă            ScrMode = 7: BPP = 1: P = 4: GOSUB CalcBytesă        CASE 14ă            ScrMode = 8: BPP = 1: P = 4: GOSUB CalcBytesă        CASE 16ă            ScrMode = 9: BPP = 1: P = 4ă            GOSUB CalcBytes  ' P = 2 for 64K EGAă        CASE 15ă            ScrMode = 10: BPP = 1: P = 2: GOSUB CalcBytesă        CASE 17ă            ScrMode = 11: BPP = 1: P = 1ă            GOSUB CalcBytes: NumPal = 2ă        CASE 18ă            ScrMode = 12: BPP = 1: P = 4ă            GOSUB CalcBytes: NumPal = 16ă        CASE 19ă            ScrMode = 13: BPP = 8: P = 1ă            GOSUB CalcBytes: NumPal = 256ă    END SELECTăă    DimSize = NumBytes& \ 4 + 1ă    REDIM Store&(1 TO DimSize)ă    TSeg = VARSEG(Store&(1)): TAddr = VARPTR(Store&(1))ă    ActualBytes& = 0&ăă    IF ScrMode > 0 THEN GOSUB GetGraphics: GOTO SaveItăă    IF MonType THEN FSeg = &HB800 ELSE FSeg = &HB000ăă    ' Good candidate for assemblyă    NumCols = X2 - X1ă    FOR l = Y1 TO Y2ă        Addr = (X1 - 1) * 2 + (l - 1) * 160ă        FOR i = Addr TO Addr + (NumCols * 2) STEP 2ă            DEF SEG = FSegă            Char = PEEK(i)ă            DEF SEG = TSegă            POKE TAddr, Chară            TAddr = TAddr + 1ă            ActualBytes& = ActualBytes& + 1&ă        NEXTă    NEXTă    FOR l = Y1 TO Y2ă        Addr = (X1 - 1) * 2 + 1 + (l - 1) * 160ă        FOR i = Addr TO Addr + (NumCols * 2) STEP 2ă            DEF SEG = FSegă            Attr = PEEK(i)ă            DEF SEG = TSegă            POKE TAddr, Attră            TAddr = TAddr + 1ă            ActualBytes& = ActualBytes& + 1&ă        NEXTă    NEXTăăSaveIt:ă    DimSize = ActualBytes& \ 4& + 4096      ' Extra 4K just in caseă    REDIM RLL&(1 TO DimSize)ă    CALL HSRLLCompress(Store&(), RLL&(), ActualBytes&, RLLBytes&)ăă    Scrs(NumScreens).RLLBytes = RLLBytes&ă    Scrs(NumScreens).ActualBytes = ActualBytes&ă    Scrs(NumScreens).Offset = SeekPos&ă    Scrs(NumScreens).X1 = X1ă    Scrs(NumScreens).Y1 = Y1ă    Scrs(NumScreens).X2 = X2ă    Scrs(NumScreens).Y2 = Y2ă    Scrs(NumScreens).ScrMode = ScrModeă    Scrs(NumScreens).MonType = MonTypeăă    FSeg = VARSEG(RLL&(1))ă    FAddr = VARPTR(RLL&(1))ăă    SEEK F, SeekPos&ăă    SaveSize = RLLBytes& \ 4 + 1ă    FOR i = 1 TO SaveSizeă        Z$ = MKL$(RLL&(i))ă        PUT F, , Z$ă    NEXTăă    IF ScrMode > 10 THENă        DIM Pal(1 TO NumPal) AS STRING * 3ă        DIM InRegs AS RegTypeXă        DIM OutRegs AS RegTypeXă        InRegs.AX = &H1017ă        InRegs.BX = 0ă        InRegs.CX = NumPală        InRegs.ES = VARSEG(Pal(1))ă        InRegs.DX = VARPTR(Pal(1))ă        CALL INTERRUPTX(&H10, InRegs, OutRegs)ă        FOR i = 1 TO NumPală            PUT F, , Pal(i)ă        NEXTă    END IFăă    FOR i = 1 TO NumScreensă        PUT F, , Scrs(i)ă    NEXTăă    Z$ = MKI$(NumScreens): PUT F, , Z$ă    CLOSE Fă    EXIT SUBăăGetGraphics:ă    GET (X1, Y1)-(X2, Y2), Store&(1)ă    ActualBytes& = NumBytes&ăRETURNăCalcBytes:ă    N& = ((X2 - X1 + 1) * BPP): NumBytes& = N& \ 8 - ((N& MOD 8) > 0)ă    NumBytes& = NumBytes& * P * (Y2 - Y1 + 1) + 4ăRETURNăEND SUBăăCalvin French/Victor Yiu       FAST SPRITE ROUTINE            FidoNet QUIK_BAS Echo          Year of 1993           ASM, QB, PDS           166  5812     SPRITES.BAS ' Here is the self-extracting script that makes a QuickBasic/PDS callableă' OBJect file containing Sprite manipulation code in assembly.ă' More information (source) on next page...ă'ă'>>> Page 1 of SPRITE.OBJ begins here. TYPE:BINAA TLEN:142ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.1ăSUB V1:OPEN "O",1,"SPRITE.OBJ",4^6:Z&=142:?STRING$(50,177);ăU"&O-%+%xuwnIyjje%3%%)%htij%+uzg#qnhGAg,%/%n%'(4&+_5%%%&.%uzyx%uwăU"ny%j%%%)Uor%%&%%zGZeC%5&>E/K1%o]*9Zk3]4e&p3\ZM5O&#Z%(+Zs-kXDXvcăU"u%/9eC6y[WqXRPB>e&X0hoC.6dd_lu[$df2_.-D,,C1%*AY'%(%CăEND SUBăCLOSE:IF S=158AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBă'>>> Page 1 of SPRITE.OBJ ends here. Last page. TCHK:158ăăă'Here's the rewritten code that does exactly yours should do.ă'I've included a sample program (posted after this message) to demonstateă'its capabilities (and what it should do).  BTW, it is FAST.  (At leastă'fast enough on a 286 to be acceptable.)  It is on par with games fromă'Apogee (DUKE Nukem, Cosmo's Adventure's...)!ăă'BTW -- it is twice as fast as PUT (XOR/OR), but half the speed as PUTă'(PSET).ăă'Performance on 100x100x256 sprites:ă'    10MHz 8088:   7 updates per second     <--- pretty acceptable, consideringă'   34MHz 80486: 150 updates per second          what it is...ăă;=================================================================ă; SimpleSprite v1.1 (SSPRITE.ASM) A simple sprite routineă; in asm to overlay GET format images.ă;ă; Calvin French, 1993  Victor Yiu, 2,348 B.C.ă; Released into the Public Domaină;ă; NOTE: This routine handles sprites of all sizes *****ă;ă; DECLARE SUB PutSprite (BYVAL x%, BYVAL y%, BYVAL imgseg%, BYVALimgoff%,_ă;       BYVAL imgWid%, BYVAL imgHei%)ăăCODE SEGMENT PARA 'PUBLIC'ă    PUBLIC PutSpriteă    ASSUME CS:CODE, DS:nothing, ES:nothing, SS:nothingăăBytesPerLine    EQU   320       ; ****** CHANGE to other number is neededă                                ; defaults to 320, for 320x200x256 res.ăPutSprite PROC FARă        PUSH BP         ă        MOV BP, SP      ;set up stack frameă        PUSH DSă        PUSH SIă        PUSH DI         ; save BASIC's needed registersăă        LDS SI, WORD PTR SS:[BP+10] ; very fast segment/offset loadingă                                    ; using LES/DSă        MOV AX, 0A000hă        MOV ES, AX          ; set up vid. mem. addr.ăă        MOV AX, SS:[BP+14]  ; get Y addressă        MOV BX, 320         ; *320ă        MUL BXă        MOV DI, SS:[BP+16]  ; put X in SIă        ADD DI, AX          ; add rest -- result in SIăă        MOV DX, SS:[BP+6]   ; put height in DXă        MOV CX, SS:[BP+8]   ; put width in CXă        MOV BX, CX          ; save it in BX (width)ă        MOV BP, DI          ; save screen pointer to BPăă        CLD                 ; look into the futureăă    ; ============== main stuff startsăEVENăNewPixel:ă        LODSB               ; get byte [DS:SI] -> ALă        OR AL, AL           ; set flagsă        JZ Skip             ; if zero (lesser common case), then jumpă                            ; Jumping eats processor time and is BAD.ă        STOSB               ; if not, write byteă        LOOP NewPixel       ; next loopăEVENăEndOfLine:                  ; fell out of loop (end of line)ă        MOV CX, BX          ; reset count for next loopă        ADD BP, BytesPerLine; increment next screen lineă        MOV DI, BP          ; place offset into DIă        DEC DX              ; reduce heightă        JZ OttaHere         ; finished?  YES!ă        JMP SHORT NewPixel  ; nope -- continue...ăEVENăSkip:                       ; goes here to skip pixelă        INC DI              ; skip byte (don't do anything)ă        LOOP NewPixel       ; next pix.ă        JMP SHORT EndOfLine ; if end of loop, jump to handlerăă    ; ============== closing procedureăEVEN ăOttaHere:ă        POP DI              ; restore registersă        POP SIă        POP DSă        POP BPă        RET 12              ; and remove 12 bytes of passed params.ăPutSprite ENDP              ; from stackă    CODE ENDSăENDăăăă'Here's the DEMOnstration program I made to show how FAST it is.ă'BTW -- the asm., although acceptably fast, used jumps and no-in-lineă'code. I don't know another way of doing it...  Good news is .. IT WORKS!ăă'Here it goes:ă' ========================ăDEFINT A-ZăăDECLARE SUB PutSprite (BYVAL x%, BYVAL y%, BYVAL imgseg%, BYVAL imgoff%, BYVAL imgWid%, BYVAL imgHei%)ăDIM ScreenCut%(5102)      '100x100x256ăDIM ScreenCut2%(5102)ăăSCREEN 13ăăCLSăRANDOMIZE TIMERăFOR Z = 1 TO 50 STEP 3          ' make demo image to pasteă    CIRCLE (50, 50), Z, Z + 16, , , 1.1ăNEXTăăGET (0, 0)-STEP(100, 100), ScreenCut%ăLOCATE 15, 1ăPRINT "100x100x256 Color Circle"ăPRINT "saved into memory."ăPRINT : PRINT "Press any key to change backgrounds"ăPRINT "and print sprite."ăDO: LOOP UNTIL LEN(INKEY$)ăăCLSăLINE (0, 0)-(319, 100), 5, BFăPutSprite x, 0, VARSEG(ScreenCut(0)), VARPTR(ScreenCut(0)) + 4, 101,101ăLOCATE 15, 1ăPRINT "WOW! Notice it DIDN'T destory the"ăPRINT "background!"ăPRINT : PRINT "Press a key to something cool!"ăDO: LOOP UNTIL LEN(INKEY$)ăăCLS : T! = TIMER: x = 0ăLOCATE 24, 7ăPRINT "thousand pixels per second!";ăLOCATE 25, 6ăPRINT "updates per second!   WWWOOOOWW!";ăăDO UNTIL LEN(INKEY$)ă    PutSprite RND * 219, RND * 79, VARSEG(ScreenCut(0)),VARPTR(ScreenCut(0)) + 4, 101, 101ă    x = x + 1ă    Z! = TIMER - T!ă    IF Z! >= 1 THENă        LOCATE 24, 1ă        Z = INT(10 * x / Z!)ă        PRINT Z;ă        LOCATE 25, 1ă        PRINT Z \ 10;ă    END IFăLOOPăScott Pessoni                  LED DISPLAYS                   FidoNet QUIK_BAS Echo          10-02-95 (18:36)       QB, QBasic, PDS        228  9481     LED-DISP.BAS'LED-DISP.BAS: Version 1.0ă'Scott Pessoni - August 1995ă'ă'These are some subroutines that I wrote to simulate differentă'kinds of LED Displays.  This is the first version so it's not filledă'with to meny fetures but they are handy at some time.  The Ledă'Display does not handle negitive numbers or decimals.  You also haveă'to watch out for LedBar so that the formula doesn't overflow with largeă'numbers.  The Leds aren't very pritty yet but I'm working on digitizingă'some!  The Leds are handy for showing the status of something becauseă'all you have to do is change the the led state and not remember theă'X and Y locations!  Have fun and tell me what you think.  Look foră'version 2 some time.ă'-----------------------------------------------------------------------ăDECLARE SUB Leds (LedNumber%, Status%)ăDECLARE SUB LedBar (Number%)ăDECLARE SUB LedDisplay (Number%)ăDEFINT A-ZăDIM SHARED DisplayLedX, DisplayLedY, LedDigitsăDIM SHARED GraphLedX, GraphLedY, GraphElements, GraphNumăăSCREEN 13ăă'This sets the default colors to use for the Bright/Dim led panals:ă'Red Leds:ăPALETTE 16, 65536 * 15 + 256 * 15 + 57ăPALETTE 17, 65536 * 2 + 256 * 2 + 19ă'Green Leds:ă'PALETTE 16, 65536 * 15 + 256 * 57 + 15ă'PALETTE 17, 65536 * 2 + 256 * 19 + 2ă'----------------ăă'-------- Led Digit Display Setup -----------------ăDisplayLedX = 0 '|- Upper Left corner ofăDisplayLedY = 0 '|  Led Digit displayăLedDigits = 4   'Number of digits to have on displayă'--------------------------------------------------ă'-------- Led Bar Graph Display Setup -------------ăGraphLedX = 0  '|- Upper Left corner ofăGraphLedY = 20 '|  Led Graph displayăGraphElements = 32  'Number of graph elements. Maximum 32ăGraphNum = 1000 'The number when the graph is 100%ă'--------------------------------------------------ă'--------- Led Lights Setup -----------------------ăTYPE Ledă     x AS INTEGER '|- Upper Left corner of LEDă     y AS INTEGER '|ă     s AS INTEGER 'Current Status of LED (-1=Led not used 0=Off 1= On)ăEND TYPEăDIM SHARED Led(5) AS LedăăFOR Temp = 1 TO 5 'Make LEDs unused until you assign themă     Led(Temp).s = -1ăNEXT TempăăLed(1).x = 40: Led(1).y = 5: Led(1).s = 0  '|- Make some LED'săLed(2).x = 60: Led(2).y = 5: Led(2).s = 0  '|ă'--------------------------------------------------ăă'============ DEMO:ăLedDisplay -1 '|- Any negitive number will Clear/Create displayăLedBar -1     '|ăLeds 0, 0     '   Draw all LED's at there set statesăăFOR Count = 0 TO 1000ă     LedDisplay Count   'Update Led Digits with current numberă     LedBar Count       'Update Led Bar graph with current numberă     SubCount = SubCount + 1                          '|- Every 10 numbersă     IF SubCount = 10 THEN Leds 1, -1: SubCount = 0   '|  toggle the Ledă     IF Count > 500 THEN Leds 2, 1                    'After 500 turn Led ONăNEXT CountăăDO: LOOP UNTIL INKEY$ <> ""ăENDăă'LedBar: A simulated Led Bargraphă'-----------------------------------------------ă'LedBar Numberă'    Number = The current number you want to update the bar graph withă'-----------------------------------------------ăSUB LedBar (Number)ăăIF Number < 0 THEN 'If Negitive then blank Bar Graphă     FOR MakeGraph = 1 TO GraphElements * 2 STEP 2 'Make the Bar graphă          LINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), 17ă     NEXT MakeGraphă     EXIT SUBăEND IFăăElements = INT(Number * GraphElements / GraphNum) 'Calculate Number ElementsăIF Elements > GraphElements THEN Elements = GraphElements 'Check limtsăă'----------------- Draw Bar Graph --------------------------------ăFOR MakeGraph = 1 TO Elements * 2 STEP 2 'Make the Bar graph (Lit)ăLINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), 16ăNEXT MakeGraphăFOR MakeGraph = Elements * 2 + 1 TO GraphElements * 2 STEP 2 'Make the Bar graph (DimăLINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), 17ăNEXT MakeGraphă'------------------------------------------------------------------ăEND SUBăă'LedDisplay: Generates a simulated Digital Led Display.ă'------------------------------------------------------------ă'LedDisplay (Number)ă'    Number = The number you want to display on the Digital Displayă'------------------------------------------------------------ăSUB LedDisplay (Number%)ăIF Number < 0 THEN  'Setup Led Display panelă     FOR PlotX = DisplayLedX TO DisplayLedX + ((LedDigits - 1) * 8) STEP 8ă          '----------- One LED Matrix digit --------------------ă          LINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), 17ă          LINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), 17ă          LINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), 17ă          LINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), 17ă          LINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), 17ă          LINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), 17ă          LINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), 17ă          '------------------------------------------------------ă     NEXT PlotXă     EXIT SUBăEND IFăăNumber = FIX(Number) 'Get rid of the decimals incase there are someăNumber = VAL(LEFT$(STR$(Number), LedDigits + 1)) 'Chop Number to LED sizeăăPlotX = DisplayLedXăăIF LEN(STR$(Number)) - 1 < LedDigits THEN  'Clear Unused digitsă     FOR ClearEmptyDigits = 1 TO LedDigits - (LEN(STR$(Number)) - 1)ă     LINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), 17ă     LINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), 17ă     LINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), 17ă     LINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), 17ă     LINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), 17ă     LINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), 17ă     LINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), 17ă     PlotX = PlotX + 8ă     NEXT ClearEmptyDigitsăEND IFăăăFOR PlotDigit = 1 TO LEN(STR$(Number)) - 1 'Plot each number to a LEDăăWorkDigit$ = MID$(STR$(Number), PlotDigit + 1, 1) 'Get 1 DigităăSELECT CASE WorkDigit$ 'Find and select which elements to turn onă     CASE "0"ă          E1 = 16: E2 = 16: E3 = 16: E4 = 17: E5 = 16: E6 = 16: E7 = 16ă   ă     CASE "1"ă          E1 = 17: E2 = 17: E3 = 16: E4 = 17: E5 = 17: E6 = 17: E7 = 16ă  ă     CASE "2"ă          E1 = 17: E2 = 16: E3 = 16: E4 = 16: E5 = 16: E6 = 16: E7 = 17ă  ă     CASE "3"ă          E1 = 17: E2 = 16: E3 = 16: E4 = 16: E5 = 17: E6 = 16: E7 = 16ă  ă     CASE "4"ă          E1 = 16: E2 = 17: E3 = 16: E4 = 16: E5 = 17: E6 = 17: E7 = 16ă ă     CASE "5"ă          E1 = 16: E2 = 16: E3 = 17: E4 = 16: E5 = 17: E6 = 16: E7 = 16ă  ă     CASE "6"ă          E1 = 16: E2 = 17: E3 = 17: E4 = 16: E5 = 16: E6 = 16: E7 = 16ă  ă     CASE "7"ă          E1 = 17: E2 = 16: E3 = 16: E4 = 17: E5 = 17: E6 = 17: E7 = 16ă  ă     CASE "8"ă          E1 = 16: E2 = 16: E3 = 16: E4 = 16: E5 = 16: E6 = 16: E7 = 16ă  ă     CASE "9"ă          E1 = 16: E2 = 16: E3 = 16: E4 = 16: E5 = 17: E6 = 17: E7 = 16ăEND SELECTă'Plot the LEDs to the screen------------------------ăLINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), E1ăLINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), E2ăLINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), E3ăLINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), E4ăLINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), E5ăLINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), E6ăLINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), E7ă'--------------------------------------------------ăPlotX = PlotX + 8ăNEXT PlotDigităEND SUBăă'Leds: Updates Ledsă'--------------------------------------------------------------------ă'     Leds (LedNumber, Status)ă'LedNumber = Led to change (0 to Setup/Update ALL LEDS)ă'Status = -1 Flip/Flop State  0 Led Off  1 Led Onă'---------------------------------------------------------------------ăSUB Leds (LedNumber, Status)ăăIF LedNumber = 0 THEN  'Update ALL Led'să     FOR MakeLeds = 1 TO 5ă          IF Led(MakeLeds).s = 0 THEN  'Make dim Led'să               LINE (Led(MakeLeds).x, Led(MakeLeds).y)-(Led(MakeLeds).x + 2, Led(MakeLeds).y + 2), 0, BFă               PSET (Led(MakeLeds).x + 1, Led(MakeLeds).y + 1), 17ă          ELSEIF Led(MakeLeds).s = 1 THEN 'Make Lit Led'să               LINE (Led(MakeLeds).x, Led(MakeLeds).y)-(Led(MakeLeds).x + 2, Led(MakeLeds).y + 2), 17, BFă               PSET (Led(MakeLeds).x + 1, Led(MakeLeds).y + 1), 16ă          END IFă     NEXT MakeLedsă     EXIT SUBăEND IFăăIF Status = -1 THEN 'Flip/Flop the state of the Led.ă     IF Led(LedNumber).s = 1 THEN Led(LedNumber).s = 0 ELSE Led(LedNumber).s = 1ăELSE       'Assign Led's Status if not Flip/Flopă     Led(LedNumber).s = StatusăEND IFă        ă'---- Update current status of the selected LEDăIF Led(LedNumber).s = 0 THEN 'Display Led OFFă     LINE (Led(LedNumber).x, Led(LedNumber).y)-(Led(LedNumber).x + 2, Led(LedNumber).y + 2), 0, BFă     PSET (Led(LedNumber).x + 1, Led(LedNumber).y + 1), 17ăELSEIF Led(LedNumber).s = 1 THEN 'Display Led ONă     LINE (Led(LedNumber).x, Led(LedNumber).y)-(Led(LedNumber).x + 2, Led(LedNumber).y + 2), 17, BFă     PSET (Led(LedNumber).x + 1, Led(LedNumber).y + 1), 16ăEND IFăăEND SUBăăDave Navarro, Jr.              PB FADING ROUTINE              dave@powerbasic.com            Unknown Date           PB                     71   1683     PBFADE.BAS  $CPU 8086                 ' program works on any CPUă$OPTIMIZE SIZE            ' make smallest possible executableă$COMPILE UNIT             ' compile to a unit (PBU)ă$DEBUG MAP OFF            ' turn off map file generationă$DEBUG PBDEBUG OFF        ' don't include pbdebug support in our executableă$LIB ALL        OFF       ' turn off all unused PowerBASIC librariesă$ERROR ALL      OFF       ' turn off bounds checkingăăDEFINT A-Z                ' default all variables to integers for maximumă                          ' speed and minimum sizeăă%FLAGS = 0ă%AX = 1ă%BX = 2ă%CX = 3ă%DX = 4ă%SI = 5ă%DI = 6ă%BP = 7ă%DS = 8ă%ES = 9ăăSHARED Target$ăăSUB FadeOut() PUBLICă  IF LEN( Target$ ) = 0 THENă    Target$ = STRING$( 765, 0 )ă    REG %AX, &H1017ă    REG %BX, 0ă    REG %CX, 255ă    REG %ES, STRSEG( Target$ )ă    REG %DX, STRPTR( Target$ )ă    CALL INTERRUPT &H10ă  END IFă  FOR J% = 1 TO 32ă    CALL FadeDAC( -4 )ă  NEXT J%ăEND SUBăăSUB FadeIn() PUBLICă  IF LEN( Target$ ) = 0 THENă    EXIT SUBă  END IFă  FOR J% = 1 TO 32ă    CALL FadeDAC( 4 )ă  NEXT J%ăEND SUBăăSUB FadeDAC( Inc% ) PRIVATEă  LOCAL Buff$, N%, K%ă  Buff$ = STRING$( 765, 0 )ă  REG %AX, &H1017ă  REG %BX, 0ă  REG %CX, 255ă  REG %ES, STRSEG( Buff$ )ă  REG %DX, STRPTR( Buff$ )ă  CALL INTERRUPT &H10ă  FOR J% = 1 TO LEN( Buff$ )ă    N% = ASC( MID$( Buff$, J%, 1 )) + Inc%ă    IF N% < 0 THEN N% = 0ă    K% = ASC( MID$( Target$, J%, 1 ))ă    IF N% > K% THEN N% = K%ă    MID$( Buff$, J%, 1 ) = CHR$( N% )ă  NEXT J%ă  REG %AX, &H1012ă  REG %BX, 0ă  REG %CX, 255ă  REG %ES, STRSEG( Buff$ )ă  REG %DX, STRPTR( Buff$ )ă  CALL INTERRUPT &H10ăEND SUBăEarl Montgomery                IMAGE MAKER                    FidoNet QUIK_BAS Echo          09-29-95 (22:21)       QB, PDS                174  10697    IMAGE.BAS   '>>> Page 1 of IMAGEMKR.ZIP begins here. TYPE:BINAA TLEN:7669ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.1ăSUB V1:OPEN "O",1,"IMAGEMKR.ZIP",4^6:Z&=7669:?STRING$(50,177);ăU"%up()%9%%%#-%7f.RDI5(0Wr&%%%)k%%%/%%%%ht%qtwx%Sgns*fhfoB<eăU"9U/n/D8p??d?[H)TIGzm-,c3e.[n$Q1Ps(1BK7jJR>,7B]1%J[Ug0?\gFGăU"MXG>^gid5*(cKT:\fp'NY24c3-BX]fcHi2=iEAjPpvT3-19*S8?VWjK^;&ăU"l?VQ^W--]rGU6Ta,ZMGdpE,NOEKr7)-AjiGIj<?C2.Vz?>r17f+I1R^RIkăU"K[W<Z1h'/=Z\Is6J4QBBG8(m,<d[E<LH>JikaWdMS+=I3<#,H-ku>Z(DIAăU"6WAs6E*,aLqep>LuA:m#slfveu[mbZOn722/,ajj</9u*=<19*1S?P0,+YăU"'<tN_[t=oxtCDk6X+ZY;h1NH+zFCvnK\2*$F$\&3RrlR)AKVWg,.B>edX&ăU"W=SOrW^iWm1<19d*SMhT[sMsU6pOH5cRO0%%%%%#%%%O%nlz(%['%%d%%XăU"k%*up(%)9%%[%-%0B+bDd9]J,2#/%%u%C%%1%%%%n%rflj%rpwS[gfx.h(ăU"<BTo16w'j>vV&Kdnsmf[7KLOpKC3Gj/Zv#mcph<4Cs*JaEX\aqcmCYekdZăU"[*e7-toM2/enq0*THcQ,RQ;i*d]D['VUn(RXC5vL\EV0XrO:P:EF/YTlw4ăU"NiHh:LgHUnDQJ:-rS*&od&BwL$;S(0[,e%ByP8M37YkWNSjDw-#^4ExH$;ăU"mK7)m;R[^1[X&.tL][t$bOt2'et'EunS]c%F-keWeIf9:]xPCAQtU[KbG[ăU"%,_&>Q\8Yd9)U4>p3KI\Kd.bsZ.\+N(-X+QnCzX#T3-XE]iehaiI:k6?gXăU"MODr:wxiX*Bxh5*#$b&VGUBghp,('V+xSJ>fzO<WBAvHiT98e]^DMH7xaTăU"=+j%;<QeNQZ_/YM.7qB+5*3Y<Bm9&L=b<jrnRYZ(G/DzT;^C>OY:sHCAtsăU"n%.uiUSR79Kk\m9^':n%'vUS1/*=bKalj<j.JovSXhC5m1RBYC?M[xJy6(ăU"+gx#pRv_j.Ks/kL8G-VolZIf,eJI*8i.jQ?G+q6W[tqd9G8?GA]Gb#.ZC]ăU"D7K<U&7Kt9N_&?3_,_;NL,PBpETV)^Asf1>ni1&k;4P>y<:.L?zN(a?P&9ăU"mC_K3z1pY,H+/4W^Mh*R?U/Po*>PNVKVNVk](hfGZ<MGB3lIFA**JQ'bE,ăU"'uMY:GttI[UWW0(d=l8:oBlvj(zN?%QPkJ?rxO>ae;gnQcRtwQ3JT'LSCFăU"*D-bNKnIPw.f++tUhVx1nH*44.a2SzD+tfj7YoNSO^O^UEVZ(D<D*r=8HDăU"B(%?aJaLjCS)%A#[%]AO<7:CoqlTCEnBN^o-p1-uV^aV8fw7W=<<Jk1,C-ăU"o(B[co<T+ScBF1B%BZhQ&I6G]:&/iQtIvG]2BYiQ.J$G]<n/j%/AqjAAJiăU"<UyuCDh]H53lz:j-UhVY&0<Z[N/Aq-,X=JzrA-,,hYT(qa/T-T*:T0Td)TăU"Of2rG]RcVif+B&j6+vr18?ugNY-/PLQ:dmUgvE+;Ow/0BBUq<'j1sgUm2DăU"L>3>OApYeK84ehuv)\\8yA1PkU:9<%_YMQS<x*QutQ^vA0ji*UL\Pm)iy7ăU"eZ5S8ig(5+0LuQ3djX/0j)f<b;Kl3<RWs)Hbh$imUJ8Z#K0;a\v[NFHB%?ăU"m-NenO,qk51#aF=HCqkz0]i8r7l_W*L6FkhCB1H]KhhHEPN<9Vxr$'/u9]ăU"]'COJ0zar_lu-4Rt73$*Y^[oLY#?UO1^eB%wS*8op//aHq9h[w+4j5]4Y$ăU"4k-1<C9zTF0]zN]4)GnJ3B=jZ6WU0'JXNHZ3Oc'N*D/BLcZ0]CKa+5gBSYăU".(8iHG:tqu.95.7<zle.NI]W8p+;?MS?2x'Bbr41&l,2OiGjRQagp[hCOmăU"Q+[N_:BY^\pxDJ_dj]WfoOeAg4')j\D.=QE=BOEC5\;_S5YTt8Ao1ymO<,ăU"vTX-_)m)#/E>//DW#cdq0T4pP;h0g=DEbX]RS-VX$il6#/G%Lx''LL+X3?ăU"VBZex](#WHYtK2fs#w;#QloOLY+4tN7(P=3^H*9x^1NlBBM_.S=xPf9QpJăU"qK,(V2]v2MUgPesnsLMpoi&U'=,vJZHxwMia8uciV#v\xWh^QI5cIqiDwyăU"uonCo>/OzaH%+&fyUXwg/CAmiKL$[c%=g_TOff^nS'5UYJL=5_[1saO/6jăU"s2?$>cvcBVZrYC-Pn0=BPTzX&<za=QG8Y,bR2WvouU;1<a=f:>WQh.*FKGăU"KWP,1//yy,BULfVR\&J<0A?dC[5uQ#C)i'))&.Z+d7&N?ZHgDU)GsT]z6PăU"MHHE-*U>J06x=5CB%zFx%5(1grCh(X%CT^]Yr81]dm^YGuEhbY*B/\W7hgăU"oJZgw)HkiQhHH(9Z&Zo/6FxGS-p98W<YN$vAemWzR]$ImAElGqDpE$lhqpăU"]qc)_77B=.CB]d;aj(:AP-o8kH]BPLYJ'Y(BN<\udZ+YvILXNd[^+=Yc<dăU"dcA42I+J%E:?7O6Q'QN8ITXJfN/983+GwSlUo*Y,?P1k_G#6vabI9GKWhCăU"MmYnocSbNxB>JW9+lU*jh4*h0U89i$r^s,V8U1Qtmh3+=$/[b=H?sAG^jvăU"=^]U,.vhu1E[+e3G,#+Q6.\OQQV8TOxRT6fHB7k5%I#q<*/5T=[1VS*a)GăU"LP?<]<c1XFXdm4gf1_A,3(NOer$g(Ac^NtZ;e:=zpR7oV;V]\YUh$A&V#păU"dc=<3fvfw:s/Aar4-&AO0mr6eP=)m%Ks8mf(rFHJ#=kEb)e?0(eUVZ8+OrăU"R=2=uVrdVS/=9/rmBi^IAcKSRXC[.5RJDJi.;zA086FA,=WJ4Ub=w\K1wYăU"+[fpxgWT$i<ngg=Q)QX7VJ^H;?lq-nG']x%DcuPS>C6G1r;,YeI4)T6QjoăU"*(9bh(nBI<qzj09Z>'S1DfQBkmW3o1u8Z07/M#1qubd/0(G7>pp61cwXbwăU"i5GCsl8^DB,O7a[\w][m<Me(sM9jnK8COLCh^#di3l\Gz6CHedPcgN3hLUăU"bM;?1_Zc7c%dBA&l:(66Hp.eB^JdlQPq>eM.oVAa/>N^V&=Xk0Jz0mBHXHăU"KL;a8.GDQDd0vFfH;KD7hGsLZRZA=B$(5&6bY4%Npb+?:,nEa4p'h40$9AăU")8&hiZ()1eEUkS/UHIN5;1(Q<gc)&7:]/Z)#,OY=6mA2:LC5+(Q8:iiZhSăU"]UY%>5aHFg0i?;WUY#C5K8QnrjLJ,rR[EE-\-)#YBbi[B(g#_WojL<JrRZăU"(ECr-B';r&&^KVJIJV5ttz>LNK\n[8G8Ep&qZwTO.VqXnV[hb9FVnQ.0<UăU"tK4V_ulBU7h^%OVJLLV5vvl>Nz%N>cmshin4J76lv_7qFBT=,rFeneaR.WăU"e*q1qcU[^G)/&#B+-HkdKVeqZk9$>bFq3jEqW<S\;rXedC]Qa+BklRqym+ăU"k[.7fATQg61,C=((2&m#hsQZ\,7hS3e'[jVT;>7rCZ>cDNEM:tS\NZ3iatăU"aYZ7TAlLUaLO1hC.]7f<vDv%IiB>&1;6./Y*Frk)iShJiP(>^p.?>N3ZZ%ăU"r3F3n3A6:2.5N=&Y6Q4/LdOFTAKU_N*H<p^oIr;a'[%1#bkm'?]2n-,68<ăU"VTH&JlK3j&lDslr^5b-t*Tl(H&vpn?Wq<^+Whu>QRaaq+W+cBTVX,ff=AJăU",b-tMuJwI4(:=F)*yJ<sR[NV*<H(Dk..%[EFl#'?NP4nZxs3pBd\P^;>>găU"q*HV[^8=d_Y7n3D2Y,6:;avH$qm$:Tg9FB:C&t7prB^By)OHv\qt&u$PZcăU":N?6;vFBcU9I1N^.q.?(Pw2%up()%9%%%I-%Kk7$D_G>caZ%%%%9&%%%/%ăU"#%%r(%wjfi%Sgfx+xi4-?jmpxD?A1EmzU]^Lw?#D-lm0v5?M\'MAQ+LC:QăU"wB1xBbw\Z9Ol.p:a8Bl9oZIx:Yb\ZwxlSY:ED(QCQ:+7lw9g1\OcMRlR+GăU",vE;'x%Ep&xEVb[dJvH-BLtn-:Fdm4&A?1/Yy?1\%u+RE_'ycJ'>k(Mdy/ăU"zZY\huM0wxoo(%Kfl[bzYMhjgmJy&&q%.9+>#v&y:Sw5[^0I1cu1u?F2L&ăU"ixrSo(N&m&wh$#?6'sVkLuP9W(T=I5?qoP0%r/]%.zAND488>xYg4mY5AYăU"?^[^'%%up(%)9%%#%-%'Am$Dk=CbBM[&%%6%&%%0%%%%r)(&wn%yjSg.fxăU"Dv3D=Qej9Vjqg(,lQI2I7sB*6<,Do]2XI'&i7_Frqf8sUL1rQ/87R<IfyeăU"j$Fg,HF(vAk*vW_tnW1T<&O;^8S>u0jP<7'/hGodvCT:gz.?[(/foEJ,J[ăU"TjN_]$+Q9z3<pp$DPW?\OBKZ/(WC)]w^Z5CoP<rc\7MOi/MT%6)VJ(dmBdăU"szj):zMY=L^4eZ>8Ar%_>F9&sGMM3r(cDYuP78U($D)5ylSk60<0f'f[->ăU"CQF_DFe>C*QgErE-_R3C[BQ\=ZZ?i:FJ8*mpUn/PS',4*kSnZRgYM5RDN-ăU"BJ%]Ew9XxmawGjBvy#6[vQn45sBg&MYt<oTJ2I#oB$:jNjB+)=T>TjAmu2ăU"%2Fe-Ao>Z)z<iD-Ns1,&Fdup%()9%%%%-%(OKbDlxSO-&9)%%''/%%%1%%ăU"%%nrfl%jrpw%SithVT%X>BT[5MOTIN/Rt<mpUTP/C+PO>j%&$v7h2DaRHWăU"3%Jqpx,>#jG:aVYrxM;Fs%i,aJ.+q;(p\?4h7$X/w$igTu&bu[p^TU\>XKăU"<#;Oe(O;&0YrvGcV7jhir0fIREI;/Tck7eAN*w/:.r.4hfX/D_<97i^';DăU"Xe)hj8+T>&g9/*>V8&'#5j>0o:O1hvE?'E;yN>Eaat'Zf/2U#S;W[1XuSeăU"jCS?TM;E-VB]Ci/l:tp)1eJcQOC1X-S4.QG9$^_KQ5'>7Ex'O#i(P8I6ZkăU"L-YcE<Ct3't/xB]>jvSH;_Z('PD5^t7+(i;S%f&/Kja/o#(&-z&Pzl4iZWăU"9(v/nsN032x?n'N]IU/<.f9c&/mi2>[Vw-a_Ic&glIo0hK?C\B/OB>qm?[ăU")cnvkpVSQK%y2x2/*zo#['HY$hbNQnS'\l<Vw;(+WGU/](bD)z(wtKHm''ăU"v8RIDrXdC+/h,aRLsuBg#(f)Lz94*Z>P*656=jmxm((L?tCAp8dRiE\aaAăU"a(10.6Y#FKa(.>Av<Haq\TNm<(cNuJ%cET?Sjg1;3p](J:WL%bmek'0hc_ăU"<I_,f6FdnWE9R3Jlr'</G#bU&niLjD3QuKz#4gO:G')zPM1l+Qx\4zEEV0ăU">mJ%4$8jJa,fMC[uvHo;,]f_9Q<ts834\tJ''ormfHN\oB'/f1,VKia[(NăU"N+w(aS+J0DgHkaV4InL<lpXelVDiEuezEy>KvWl-<i<;:F6%hcQ\wV%A?&ăU"y*Ij5RaGwL>__LdxcDEgkRowWbV5g<CL.yu28gW^7eI,]?iJp<y7eFxh)HăU"SW8Fp4i1W6lC0#Pbml6U)ELOiETeqAqi1y8l*KgK#0s9cs'JHh54kh<O0FăU"_8[s5<g(hB?aUU>22wyUXGSfo(kbZKG3\owh=D0Ewa=k.U;XlBi0+F]]LhăU"JjXR&T,IS&/Vhc.0H,OZ*Zpo6JuD6\U\x.=1E2&BBL&I,LT>(OSOE[]q*HăU"]KKIdT_)K6G^SNr=BlT4V#B457O[A'K[JI'RFAAXXLwNCE^n1h&)zMCGQnăU";a-RuKEdsSud5e'pbKHMjTqvl+tIWBWSP,3O_ejGBjJ38-Oak]+j+/>oMsăU"B=XpbFjQsPK.k.SK>.I?o$N)_%ui([o/DA7c-*2HB^.?2^DS$_;0a=%AmxăU"5q4n[mc.?KU=:1nq6IDbH(6]IR[j($]Adxv\>uo56+98%9H#WQ[5c.Lz(găU"c7LR2Lh0=u/;+%ilG]Dd0D79;/&QLc0oe$D[vFP-Q;Cc_*KB_&aZSh0sEnăU";>dGGj5nK='8Ou]Z_El[-lw]Wqm0&EoXd.U4_g.Cb3AI.,X;1d-Oaap-x-ăU"DhniW5<-)EJbQo/e-q$R-CgPx+rP9nS<lLpN6tIKldTT6A:Zo4%DWpMoAfăU"VJz/Pb(]z:pZqRiiC0;FF<,]AWTe$\bIks'Zdup%()9%%%%-%(:HaDKu1PăU"G%d&%%&K*%%%/%%%%gzlr%fsSgRnsFc<*9<U:5UHMB.$=JOO1_1(4l_9G6ăU"lui11L_aCgnEEDpTaYFD<h.Dr/MC=Qb_rJdsVL#/^4p1hN[3ivnDKjn+&)ăU"2Q2d/gi4pE*['ijng*%4*OK_%6>E)\(8z%G;59VrBe&E6Gu#1G2c'YhXllăU"$bK*M(%uEuw9u)1-&H33Ph$b\xB<+/_]EX1(/X/8Vo<r=<SS<q4FP;xAGiăU"+0f7q)%$=+S%.bJU_Njk'd'dS'pE<Dl0vVU&J-nHg=++MVH0/gK+NZBZ)băU"6NGSjJf#/3cB9qmefAM6IIX8qY4Xagn\(k+EAsQJ,I+7tEt(OS41\ci9q5ăU"?G>Yk6IBFD;[7=iOrpf\Wr/d7x'wD8hzY=*?q-u^ZILtyu6o3m;'Hhd]4uăU"m6HlXa,sdm\u\AP#UHbr&.up(%)9%%%%-%:\HaDE[K'Jm%%%%%%7%%/%%%ăU"%g%zlrf%sSif4yfff+7<E-#jX1j;=ilD<0Za9m159I:[l9OX0X#>py+g1măU"HB)Mo?\rHAeXZGr?IrInAJR#/1p83CUsrfcr3'(k.\*CqiQe8sijIf1^'KăU"D8jPa?#HPgvJKr0CdPgN)Ac:azrfppMcrWZ.*aJ*-lOWl_HGaO_*s6MD[răU"*-t]7Nuw(_KHv6igtvFf(Dh^gUSt_^3ch^>4tdu6X6goFTgKk>l##Gnnl)ăU"J.a<Lt:xHS0vzLcgyn>Nu$l$gtfstjiqEn4<X:t8XsP3*u&8COZglt7P&DăU"Cxu4Fo00lT_=rx[P>tN88'l98M5%%up(%)9%%[%-%tAH\DquR<LL%%%%%%ăU"7%%/%%%%u%flti%fSifsyNQJ+/<E1#*u,Hp6YvwKHRB;kg=3S-^CqCA%OAăU"ZPDOg[(M8ju];+*nn?gv,i_In99\X_Dqlzj0nJq^%b]pv\Xh<w;s9)HnOBăU"v%^cp2c\c$mu8hAlfs-(w\buKhbSu0tnvf7Sl$_l+x0PH7tBVRSH*Y<XO*ăU"QZ&fio3,DpYCg$^-wcF4uq7GlM]^MMZuqXnsdQrxk.x.UZsL'pm-D2wl(xăU"MfrxL#hGNic5?xRO&Qjt6(Z#%i#K\8(NYpdXl,LhI(QxugW:$l2%%up()%ăU"9%%%R-%tHR\Dq3:.&q%.%%K*%%%/%%%%uf%ltif%Sgns<Nb6sB<U9T*(#JăU"T5$K=mIE_E<T_3br9i-5fLRmW$*J;akICF2U:MvwNW/>c5&p(ANR_^w1HtăU"sO=DwpM,N+sdLIiUnyri1f:_jKtbjJ)7CnsyF%Kgwi:HTlQC<+EA88$YBsăU";2mqagqKmLa_Q+AC7f)CY8Uns%+_68)>2012T=I&DgwQ4I>qhlh?J1d?QaăU"HKo(ON;F2w6ujqGsGY(nchoM*ouYe,N$'[LgDLc4+iEa#D)S8aTLYJ/fN6ăU">qMtjDrM,7_<GupBB/Ma<o0SqQcw*idj#43PF0GfU3-DO<Y90]esO'8H>uăU"LEt0f6%up()%9%%%#-%)ddbDq6(>Em)I%%o[%%%0%%%%qj%yyjw%xSgnXsăU"fS>.q#4As,iX<_,7Z#+v?7sHLJ8eHef:'qESC3&8IVq>.q?<PZ4)bH>=<4ăU"5g9asi'EX5015-'Mqg7G3bnFI6s[i?K^jD5AJVia^:,)\e1OJLnSj5d>\BăU"Qq_mici?;h$jnBb7pW6vZ]ZWV<(%[i%%'idGxEL0*HfbxCmKw7Tu&RJjLAăU"E%f=1Hna7.QJxj(4e_T*J$(-PAtL$p9to4A#Ht'c:3xp,EpGYrAZv/IMPlăU"p<isEO4K,Wr/JP.^B(]i,qQRuW/+ydxT&D%xN]5(y#rOD$6b??qCFLqCE)ăU"]VE:]fS<uwc)VqHewkJ9^pIJ\LcA,5T;AN%2[r/Y6FoJry?';I6R_<X0X=ăU"kM'tkpzKx'R#B%2n[b.?+C8VZSJZ^[i+jF3HNmq+5C)]VcoN?ttQ?u3QL<ăU"=dP1Ch8UhC)]:Vi.kll:vgNl]m==JpJHi4=C)o'V?t_:\J(BJn^u3Pg=NWăU"1^RDV2Ru2ouId58BqrSqj*Wmg?vQ?:vDVBm<B]/'6>pi?NapVDy3gxuRHOăU"hG4f#>mrMbThRqRU''yyZCGzJdsQvBm6e0h$4V3(?G'AyrqqRUEK+QJfRxăU"nhT\)0d7ez4ze$\x[N*ASj,K2jaJ<79fn2qHh:M3aD,YGi8.&3y4R0AryAăU"&)5%%%%%%%I3zawKVK>=->)4_lqhFx$t=V6nm8W&oiv35ue6VLcSqEp5\măU"U#=9,Vl#/iT%c5bC3Z^6ghNj8K_;*71A[qkZfR[?oyfwkf;EG4G,U7$xC&ăU"ur/0=-kH8?'5'lVCj%56+.3sb5LHoG++_uFm$1B,;AbC-fKH(Eh8'Q*uy<ăU"Xi_WL5iSiBF4gJ0pMFBBNkiT]PtgVBLlqY'?<5AF9s6]/sokwo'($=ZpZ^ăU"D>\s4RSBQUt*)iU>kh?FLKps8NP-E[zGQWu2E:il#JB;9eDt>N6gULLmj2ăU"D)+.,lq;X$jJfjWSGnD:pGQU$9nt>[S>pF9S%Q&c8yZ'w'Nug8ljt\?0+KăU"8'tQu$nV9if>c5GY<+$;DY-wY\[OcAN-+dSmdT0dU'NOsWOn/B#\Smk#>răU"ep&mZE1X'fk#Nn.?8aSsGAfsi>+xXS>y&v0MyX^C.iM%s,6?Hp\nVaZ'7VăU"J\APK2pGQU'PtDjvVNxW%MValp[X$w>Js=*Z(Ks0kPu8''mVlF%<cN$[XcăU"Av?SMF$5e]:%?(hH$OERNu(HpOsU-N_NxY^]ehiAO0CdrGQUeisb&,Vf>hăU"b1wz9*lca#&kpF^E[N)b-S50>\(<5]4d(b9P;aHul/_T#TE+Ae_O/BxYJmăU"HUuV.^=^hNcD6:H,&r:I(I/9#EC%k5%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăU"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%^%oVw%+up&%'9%9%%%%-.%7fR(DI5ăU"0&Wr&%%%)k%%%/%%%%%%%%%%%E%%%%%%%%%h%tqtw%xSgn%sup&%'9%9%%ăU"%%-=%0+b:Dd]J',2/%(%uC%%%1%%%%%%%%%&%E#%%%D%&%%n%rflj%rpwSăU"%gfxu%p&'9%%9%%#%-%K\k$D_pGcaZ%%%%9%&%%/%%%%%%%%%&%%E%%+%%ăU"0%.%r(w%jfiS%gfxu%p&'9%%9%%#%-%'Am$Dk=CbBM[&%%6%&%%0%%%%%%ăU"%%%&%%E%%+%.1%I%r(&%wnyj%Sgfx%up&'%9%9%%%%-%(OKbDlxSO-&9)%ăU"%''/%%%1%%%%%%%%%&%E%%%%+3%%%nr%fljr%pwSi%thup%&'9%%9%%%#-ăU"%:H7aDu1)PGd&.%%K*%%%/%%%%%%%%%%%%E%%%&i7%%%gzlr%fsSg%nsupăU"%&'9%%9%%%#-%:H7aDEK7'Jm%%%%%7%%%/%%%%%%%%%%%%E%%%%&9%%%gzăU"lr%fsSi%fyup%&'9%%9%%%R-%tHd\DqR?<LL%%%%%7%%%/%%%%%%%%%%%%ăU"E%%%%B:%%%uflt%ifSi%fyup%&'9%%9%%%R-%tHR\Dq3:.&q%.%%K*%%%/ăU"%%%%%%%%%%%%E%%%%=;%%%uflt%ifSg%nsup%&'9%%9%%%#-%)ddbDq6(>ăU"Em)I%%o[%%%0%%%%%%%%%%%%E%%%%]<%%%qjyy%jwxS%gnsu%p*+%%%%%/ăU"%%/%[#'%%x%#%%%%%ăEND SUBăCLOSE:IF S=73AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243 ELSE ?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJoshua Dickerson               3D ROTATING CUBE               FidoNet QUIK_BAS Echo          Unknown Date           QB, QBasic, PDS        164  5029     3DCUBE.BAS  'By Joshua Dickersonă'ăDECLARE SUB InitProgram ()ăDECLARE SUB MainLoop ()ăDECLARE SUB Calc3D ()ăDECLARE SUB Rotation ()ăDECLARE SUB DrawObject ()ă'ăDIM SHARED Lines, World(500, 3)ăDIM SHARED X, Y, Z, sX, sY, Xa, Ya, Za, sXs, sYs, DăDIM SHARED R1, R2, R3, Sr1, Sr2, Sr3, Cr1, Cr2, Cr3, mX, mY, mZ, Eyeă'ăREAD LinesăFOR I = 1 TO LinesăFOR J = 1 TO 3ă READ World(I, J)ăNEXTăNEXTă'ăInitProgramăMainLoopăSCREEN 0ăENDă'ă'CUBE LOOKING THINGYăDATA 24ăDATA -90,-90,-90, -90,-90,90,     -90,-90,90,    90,-90,90ăDATA  90,-90,90,   90,-90,-90,     90,-90,-90,  -90,-90,-90ăDATA -90,90,-90,  -90,90,90,      -90,90,90,    90,90,90ăDATA  90,90,90,    90,90,-90,      90,90,-90,  -90,90,-90ăDATA -90,90,-90,  -90,-90,-90,    -90,-90,90,  -90,90,90ăDATA  90,90,90,    90,-90,90,      90,-90,-90,  90,90,-90ă'ă'DIAMOND LOOKING THINGYă'DATA 26ă'DATA -90,0,-90,   -90,0,90,       -90,0,90,    90,0,90ă'DATA  90,0,90,     90,0,-90,       90,0,-90,  -90,0,-90ă'DATA -90,0,-90,    0,90,0,        -90,0,90,    0,90,0ă'DATA  90,0,90,     0,90,0,         90,0,-90,   0,90,0ă'DATA -90,0,-90,    0,-25,0,       -90,0,90,    0,-25,0ă'DATA  90,0,90,     0,-25,0,        90,0,-90,   0,-25,0ă'DATA  0,-25,0, 0,90,0ă'ă'EMPEROR ANDROSS (STAR FOX)ăDATA 142ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄNOSEÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăDATA  5,-4,10,    -5,-4,10,       -5,-4,10,   -5,-25,10ăDATA -5,-25,10,    0,-52,0,        0,-52,0,    5,-25,10ăDATA  5,-25,10,    5,-4,10,        5,-25,10,   10,-18,2ăDATA  10,-18,2,    10,2,2,         10,2,2,     5,-4,10ăDATA  10,2,2,     -10,2,2,        -10,2,2,    -5,-4,10ăDATA -10,2,2,     -10,-18,2,      -10,-18,2,  -5,-25,10ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄMOUTHÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăDATA -10,2,2,     -28,26,0,       -10,2,2,     0,14,5ăDATA  0,14,5,      10,2,2,         28,26,0,    10,2,2ăDATA -28,26,0,     0,14,5,         0,14,5,     28,26,0ăDATA -28,26,0,     0,18,6,         0,18,6,     28,26,0ăDATA -28,26,0,     0,31,6,         0,31,6,     28,26,0ăDATA  0,14,5,      0,18,6,        -28,26,0,    0,36,5ăDATA  0,36,5,      28,26,0,        0,31,6,     0,36,5ăDATA -8,47,0,      0,36,5,         0,36,5,     8,47,0ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄOUTLINE OF FACEÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăDATA  0,-52,0,    -26,-47,0,      -26,-47,0,  -37,-32,0ăDATA -37,-32,0,   -37,-6,0,       -37,-6,0,   -28,26,0ăDATA -28,26,0,    -8,47,0,        -8,47,0,     8,47, 0ăDATA  8,47,0,      28,26,0,        28,26,0,    37,-6,0ăDATA  37,-6,0,     37,-32,0,       37,-32,0,   26,-47,0ăDATA  26,-47,0,    0,-52,0ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄFOREHEADÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăDATA  0,-52,0,    -23,-33,10,     -23,-33,10, -5,-25,10ăDATA -26,-47,0,   -23,-33,10,     -37,-32,0,  -23,-33,10ăDATA -37,-18,0,   -23,-33,10,     -10,-18,2,  -23,-33,10ăDATA  0,-52,0,     23,-33,10,      23,-33,10,  5,-25,10ăDATA  26,-47,0,    23,-33,10,      37,-32,0,   23,-33,10ăDATA  37,-18,0,    23,-33,10,      23,-33,10,  10,-18,2ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄEYES + CHEEKSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăDATA -37,-18,0,   -23,-26,12,     -23,-26,12, -10,-18,2ăDATA -37,-18,0,   -23,-13,10,     -23,-13,10, -10,-18,2ăDATA -37,-18,0,   -23,-17,12,     -23,-17,12, -10,-18,2ăDATA -23,-33,10,  -23,-26,12,     -23,-17,12, -23,-13,10ăDATA -10,2,2,     -23,-13,10,     -23,-13,10, -37,-6,0ăDATA  37,-18,0,    23,-26,12,      23,-26,12,  10,-18,2ăDATA  37,-18,0,    23,-13,10,      23,-13,10,  10,-18,2ăDATA  37,-18,0,    23,-17,12,      23,-17,12,  10,-18,2ăDATA  23,-33,10,   23,-26,12,      23,-17,12,  23,-13,10ăDATA  10,2,2,      23,-13,10,      23,-13,10,  37,-6,0ăă'ăSUB Calc3Dă'ăX = -1 * X: Xa = Cr1 * X - Sr1 * Z: Za = Sr1 * X + Cr1 * ZăX = Cr2 * Xa + Sr2 * Y: Ya = Cr2 * Y - Sr2 * Xa: Z = Cr3 * Za - Sr3 * YaăY = Sr3 * Za + Cr3 * Ya: X = X + mX: Y = Y + mY: Z = Z + mZ: sX = D * X / ZăsY = D * Y / Ză'ăEND SUBă'ăSUB DrawObjectă'ăRotationăFOR I = 1 TO Lines STEP 2ăX = World(I, 1)ăY = World(I, 2)ăZ = World(I, 3)ăCalc3DăsXs = sX: sYs = sYă'ăX = World(I + 1, 1)ăY = World(I + 1, 2)ăZ = World(I + 1, 3)ăCalc3Dă'ăLINE (sXs, sYs)-(sX, sY), EyeăNEXTă'ăEND SUBă'ăSUB InitProgramă'ăSCREEN 9, 1, 0, 1ăWINDOW (-200, -150)-(200, 150)ăVIEW (8, 9)-(632, 341), 0, 15ăCLS                    'PAGE 0ă'ăSCREEN 9, 1, 1, 0ăWINDOW (-200, -150)-(200, 150)ăVIEW (8, 9)-(632, 341), 0, 15ăCLS                    'PAGE 1ă'ăD = 1200      'View point and rotation valuesămZ = -1500ămX = -5ăR1 = 0ăR2 = 0ăR3 = .3ă'ăEND SUBă'ăSUB MainLoopă'ăWHILE INKEY$ = ""ă  'R1 = R1 + RND(1) * .05: IF R1 > 6.28 THEN R1 = 0ă  'R2 = R2 + RND(1) * .05: IF R2 > 6.28 THEN R2 = 0ă  'R3 = R3 + RND(1) * .05: IF R3 > 6.28 THEN R3 = 0ă  R1 = R1 + .1: IF R1 > 6.28 THEN R1 = 0ă'  ă  CLS : Eye = 7: DrawObjectă  Page = ABS(Page = 0)           'Page switching is used to hide the drawingă  SCREEN 9, 1, 1 - Page, Page    'process so the image looks smooth.ăWENDă'ăEND SUBă'ăSUB Rotationă'ăSr1 = SIN(R1): Sr2 = SIN(R2): Sr3 = SIN(R3)ăCr1 = COS(R1): Cr2 = COS(R2): Cr3 = COS(R3)ă'ăEND SUBăEarl Montgomery                VGA SCREEN CAPTURE TSR         EXECUTABLE                     Unknown Date           QB, QBasic, PDS        101  6519     VGACLIP.BAS 'VGACLIP.EXEă'It is a TSR that captures any 320*200*256 graphic screen alongă'with the palettes in ONE Bsave file. Basic loader source to follow.ăCLS:?STRING$(50,178):DEFINT A-Z 'Created by PostIt! 6.0ăFOR A=0 TO 6:P(A)=2^A:NEXT:OPEN "B",1,"VGACLIP.EXEăT$="abcdefghijklmnopqrstuvwxyz":T$=T$+UCASE$(T$)+"0123456789#$ăG"nPfIbK(zbaiaGga$$pib(bqdm(icaE*e(caq9aSd*r*Cb)ug*D*6b)qi*M*Xc)yăG"l)GW*hd)mn*2*Hd)Oo)W8+e)Kq)qfb)Ke)0s)Gob)cf)8u)qvb)Ff)Ww)WEb)bgăG")Sy*Mb)Ig)WA)qTb)Kh)yF)W#b*i)uG)Gcc)ti)GH)q(icaAaGiamcaI(maCca4ăG"aWjaieaNaGyaCcaGaGlaihaUaGFa4caLaGn(ca5aqmaKdabcqoaKia5aGtaieaQăG"bGqa4baGcaC(ka4baOambaOcWiaKkaBdGqaeCacbG4bieaVhGqaySacbWIdieawăG"(Ra8baScqnaWkaGbaRamhaScqlaml(bWSaqba3caCaClakaqWaubacdqnaimaL(ăG"ZaycaodGd(nax(0aWbavd//////////////////,GySz1rbnetjbfi(GKb)M//)ăG"d/+8$$acbUW(u4A(qPjdaCca4A(qPjWeieaJQ(HQ(JY(hBGda8cc4YfaqPjdaWkăG"a4A(qPjdaWkaHY(JaCDdKEAaOP(ydaqPjcaimaqHly(LMo(OamcW1nq6$(Um(u4ăG"A(qPPdcieaJcbaHcbaJkbaJaCDdKEeaGRz(LMm(RaOzvaicaP7(46haqPjdaWkaăG"AwfaIaq6o(UqcauAY(ScGMvbGiaGRT(LMm(RaGR4(LMm(RaGlebaLMm(RaGRpbaăG"fUu(uAY(N(Uu(uAQ(PcWOy(Uu(uAY(#cqOyaWiax3aP7(Ak(U(UofauAY(ScaUoăG"(u4A(qPjWaieaP3maAk(cbW$gOba$BJgaOjcaClaqPPcamlaqHlh(LMmaWjaGlEăG"bafUC(uAs(OcqUcaWkihfUW(uAc(bdauAI(5(u4ccaqPjdaCca4ccaqHlh(LMiaăG"qo(fUcgauAI(5(u4ccaqPjdaCca4c6RqPzea8ja6E8aZaS7Pxba6M8aSdd5l6bjăG"a4ObQgGjiEqOK(qJsca98Va#noU(kuAgbaFcaUG(uZamu4Yq$ZinuAQ(UaGMmaWăG"NaOP(4caAUcacbGMPhGqaGRb(LMEbGqaOzvaic/4UnaoInJgWAa67i08cfc7tlmăG"nhYOUgaJaVlybSc20QuZHSB9a44WMSOhcaGJdBYIoicadgSclY#kHNOjXgGhhWOăG"hQgWVSpqUOaWmaZ$8RovUWaquldkSbqltnhsvlYUvxTOFgKOpypWI2HWImmop7YăG"#a7mVCwm4WmTZ839GMgaW0a8VDiOjda4laR$YvbfKMkaq1aG1G5lGDHS6I2HWI0ăG"jqkoyAab4aPbKus$Bd2dOjda4laj#qI$jW8K#LxDPmb(qv4EGdndrxlx1ISpi7băG"D1XgGC)WIgPqJw9RMeaq2aqlpYKCZHSl(iNtlI9V4gWIxFuOQgWQlAecRUOrgSkăG"u5E(0cuZHKLCV4HJEOAalAfc0cuZH8HCGStWZvGXgGCa9SW20raT#0Ci$BNcAQ(ăG"mdWxlwExkB(A6(ldW6IB1vE4ObSgGjk6aGait7#giaMOib8acDeWtc1nGrIlVbAăG"Q(qdWbJJGbmITJa$X8KU4WF8Lxlx1ISB1vlAhclsWI#zWIvymb$BCb$RPda4maiăG"wbIeSiYdO84nfuqAQ(vdWvlAhclsNal6Nbl2Naj6J2d81G5lGCVKyhP4GPbeGdKăG"gqsjD0rj#qI$jqu7eSDcSyWlI88KM1kiVt02jWIrVOYlAJ2dmpPlo8$2HGMk(ZaăG"8VDgOPcaWmaF5vxkt)mdW5yG0buhiocSjHcjaMSOhscWOshqIEqDa6BYXgajalbăG"Gjm6GKaS$YZaCogiDa0DHJaVi2hAG0bCOhuhG#MmkKaysIEija7VmuEG72a4i2hăG"BaYbCeaFGLma$mavTi7lANblsNa3tHUGfqOSgWkqFSbZgW$$tBmGcBanhY$$$$$ăG"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$d///aqvlYUăG"vx5YG#Wja$thchBaYbahaRlX$2zGMatGqaCSbihWBaSaW0zWxE1LYe(JoWdbl6făG"cl#Hli6rVa4cI#4lalAebUmkSaSOrcuW(4YOUcGdFqlnnhsIEOkamAaRa4WbWIWăG"V#bGUyma6NgaSq8RHaOBLdGoNba7e$Qia6U6aOhzaWsXVocGUbpa6ggaSw8RKaOăG"71dG#Eba7f$Aja6kbbOdxaWgYVAcGUOqa6LfaSL8RNaOlweGUwbaRj$kka6IhbOăG"$uaWIYVMcGUysa6efaSj8RGaORAdGEobyXhhBaYb)Pl0$UySb7cW$7ZjutfLuvzăG"1vEyGlmAHSa4sIMqla4UnaoI9G#mB(qxm67i0lAsSbSFVqHaTr1Cij6XSbOjNfiăG"eaU8VlUcWGetGMaxGqaOVloAHSa4YIMqla7FWhF5vxAL1wy1PlgBWU(WWvTi7w5ăG"XIEHWIFSW20jGJB7Oh8qWma7iWZMGVccGUQna6YcGCbnlc#6ha6IXaOxkaYrZSqăG"4RHaOBLdGoMai3jZoHVkcGURoa6lcGCAmlf#6ia6g8aO7haY1WSw4RKaO71dGECăG"am3b4c(FSovqo7f#Aja6kbbO3faYX#SH4RMaOlkeGouai33ZwIVEcGUyra6dbGCăG"spRj#kka6IhbOBdaYv8SO4RPaOlMeGEkaihUF8VDi8VDgOPbfiea9)0Dk#E1LYeăG"(u0wtZHKyhmwKayrBjnhYWdYZ$1ja#dlZ$rpE0JBYoxq3a5VE8mITj7CKa1v$IeăG"SitcOVjjEGjj#Ka7J7$$NibjsKaRd9#UaOp$c(0nKla6ZUa8FDi4IXg8l(S#mUaăG"Op6c(1TIht5sXEOk(#daB9bDi4cG#Wla$xheUySb$c(C6Y$E4haOFK$p7I$o8laăG"67Y$U4ha7df5G5Iog0la11aTc0SfK8Gl6yGVaqNby5Y$UiiaAAybcbGlgBWVaibăG"wpZPl#BGUa4Y$EyiaC6I$oOlaDUVYc(NU4Vb6cGl$7HIaWPl#7GUa05#kl(C6I$ăG"gOlaU8VhocaNU4Vd6cqN7RS(WjG8daDeWde1TX#nJcu#tSl#BGUaWPl$7HKaWPlăG"#7GUa0jw0vU#U4Vb6cGl$7HKaWPl#7GUa05#kl(C6I$gOlaU8VhwcaNU4Vd6cqNăG"7RS(WjG8dqDoqltUySb8c(D6Y$UOj(Ypd39UlgBaVa8FN7ZPl$7HMa4IXgWl(OSăG"(WPl#BGUa4Y$E4jaC6YJgyladsSaU4Vd6cGl$BJTa05YC6I$gOlaU8VhIcaNU8OăG"b4cWGelGl#7GUa4Y$2GlaDU8#UaOp$c(1zG#U8VlMcGla6ZUa8pDY7IXg8l(WPlăG"$7HPaG#58$mavTi7wD1IEzWI3jWG#mB(uNa3tb6dcWIqZi2c5OW7iCDumdWlENaăăG"d6ZSbaqDcCpfF5vxkl(lENal6$IpmVP1P9IcV#3au1IStBunhYul6fclEXcsxNaăG"mQTJcBYIEWAa0cvZHKl(Goma4iWMSJhbaqDjaKJatBsnhICtG#kamx6ok8IEzGjăG"l#LaMC$f3h9w0cvZHSyWDPmbamLb0kvZHyYIh5$O#qWbBnShH6dboInG#)Av3a5ăG"$XWdyW)KnJ6db4VU8KhMIGZaGMhMIeVoaMhM#WcI5GS$YamOpwh(1HdTV0Cij6băG"qeWObcraTr1Cij6H1bSOhSgaTq1CilpOpwh(0rHhZS9HEyDa0cvZHuSfaraTA0CăG"iFSmJEOAalx1ISVOrgmQQb0LYcaqvlYoUb(u$Bhc$BNbAscaGcqxkt(vTi7wDf$ăG"ECWIgPWI2zWIuSiDcOeEWSOFiSydl2Nal#ns4LZa4VcY2ndRY7ADUSJYYPYcsthăG"dwDvulQ88MM1xEvh6RS$Ih$VDiOPcaWma$BNbAQ(mdWxE1LYgaWmaVU5vTi7tTOăG"xgS4b$BNbAQ(mdWwDPS(u1ISpi7Vnvus1OvrsRgnhYIgzqJw5RMeaq2amZ25EcaăG"06uZHixalT4WAL1wlwExkl(vTi7lAKbqPPqaWka4cCaqPPqaWkahBa0be(DPS(uăG"1ISVOrgaLMcbaRa0LYcaWXgaDabaWYvTi7hBaYb)l6Lbl#WIxjWIEaDa0cuZHm3ăG"bA6(ldW6jStWZvGXgGCa98VDgOPcaWmaDPS)qvlYUvxTODgSidJtr$lsNadeVtSăG"QaW0zalGqNaRlG4ZRPc(nalANblsNaZt6IdZ$$2zGMk(Za8LxDPS(u1ISVOrgKPăG"uqPPgaClaDPS(u1ISB1vl6LblAecgBW6daWcaNhdZi99BVb0lkS$oS#a#U#a5Q(ăG"Z8VthnJ03h$IOV4W3h$IyVyXakmmisXcax35lSDDJdOpRpW$1vGthzmbTS4ZAQ(ăG"qdW8KU4WF5vxkt(vTi7wzSbghW$l6LblEWcatxd5hn0lENajsK$hF)4vxkl(vTiăG"7xTOtiOPc(nalAKbZR6Id$vxkt(vTi7wD1I2zWImOPc(naJtXI2zWI0jaR8eMCgăG"WJE3jajFPQ4YV4W$BNbAQ(mdWxE1LYc)qnvusz1vvXVhhaOpgh(0zKVyhWIwpGfăG"KgWoYpxoTIAa1zWIypWnRhVtoTO$Z0#oYphjlYH9dhaDse96dn0aZpW6b4HPbKIăG"hKgW6JV4dbf08KMYBcSo2D9LxAL1wyTm(6dYbaqDdmkYbSmavTi7qn1USpqoEzGăG"Cqm4WmLJxgChc$BNbAY(#cWwy1LYc)rLlfaSl7dm4paqNddombIB$USpWuAY(#căG"qwldLMoaGZamUibfKMkaq1amy#cmhbRKmwlV4WRMIdMgqaoqAajLuIpK4FcG1YtăG"TibhwqIeSixcCyxcKixcSaW0nqI35$G9(DgSyxcK4F#V1Y87XbhBaYb)74GPbyNăG"iA6(fdWooyAa2DXkoyAa74aQbyhbj6aQbSOdMgGXgGCao8l2bmGpKgWYaeLvxXVăG"hhSO#lc$ImSiDcmpPi2WxEL1Y///////.kaqdawDuqdXusqbIDX4cmWac8GGYqPăG"asm5KdmGuuyYXgin9MB0D2BTvMC5b(GbG(qgaVu1eaOgatv3yJv2CMvhBSLhiYvăG"wBVzxzKbGdaiiadfMBU9gDGixzT9MDLfsiaqjabXMCLfgz5bsAUnhDHXgBLrwiGăG"0ciVufi09gi15gBVfgzaGca6cGvhfeiZnMCLvMBGmwyWrxDYvgiVzgiZidm4jdmăG"WGNm1ydiJ9gBVj3CPaG5aq1usbcAH5gzSvMCGKMBJ9MCW9MCHrxzKbIy5bstPngăG"AHvgBGCvzSngAWOcaueGvhf0qmLeuG8svGq3BGixzT9MDLXciVjhibXevTyfi09ăG"giHngDPzxy0v2caiuawDuqtnKuQ4Yqbbf9MaGubCvyY5wAUDwiGy1rbn1qsPIldăG"feuGugEPnhDZbYBUbczPn3AHesig(Fby1rbn1qsr(ggGldfeu.$$F///G//*0p/ăG"c(Xb0Gc+ytnmn0s0e/"ăN=4488:K=255:IF LEN(C$)<>5984 THEN ?"Bad script!"Ksum!":ENDăFOR A=1 TO N:LOCATE 1:?STRING$(50/N*A,177):IF L=0 THEN GOSUB G:L=6ăW=T\P(6-L):GOSUB G:W=W OR T*P(L):L=L-2:B$=CHR$(W AND K):PUT 1,,B$:NEXTă?:IF C=95 THEN ?"Ok":END ELSE ?"Bad checksum!":ENDăG:I=I+1:T=INSTR(T$,MID$(C$,I,1))-1:C=(C+T)*2:C=C\256+(C AND 255):RETURNăSUB G(A$):SHARED C$:FOR Q=2 TO 9:DO:S=INSTR(A$,CHR$(Q+38))ăIF S THEN A$=LEFT$(A$,S-1)+STRING$(Q,97)+MID$(A$,S+1)ăLOOP WHILE S:NEXT:C$=C$+A$:END SUBăEarl Montgomery                VGA CLIP EDITOR                For use with VGACLIP.EXE       Year of 1990           QB, PDS                244  7068     CLIPED.BAS  ' $INCLUDE: 'qb.bi'ăDEFINT K, PăON ERROR GOTO errorroutineăDIM B(500)ăDIM d(100)ăDIM PIX(1000)ăDIM inreg AS RegTypeăDIM outreg AS RegTypeărestart:ăSCREEN 0: CLSăPRINT "CLIPEDv6.BAS": PRINT "Copyright (C) Earl Montgomery 1990"ăPRINTăGOSUB keyboardăbegin:ăSCREEN 13: DEF SEG = &HA000ăDRAW "c142;bm100,100;r4;br2;bu2;u3;bd5;br2;r4;bl6;bd2;d3;"ăDRAW "bm2,2;r6;d6;l6;u6;"ăGET (2, 2)-(8, 8), dăGET (98, 92)-(114, 108), BăCLSăOUT &H3C8, 0ăFOR k = 0 TO 767: OUT &H3C9, 0: NEXTăDEF SEG = &HA000ăBLOAD n$ + ".cap", 0: DEF SEG = &HA000 + 4000ăOUT &H3C8, 0ăFOR k = 0 TO 767: P = PEEK(k): OUT &H3C9, P: NEXTăREM Main Programăx% = 160: y% = 100ăcursor:ăPUT (x%, y%), Băinkey1:ăi$ = INKEY$: IF i$ = "" THEN GOTO inkey1ăIF i$ = " " THEN GOTO inkey1ăPUT (x%, y%), BăAA% = ASC(i$) AND 223ăIF AA% = 0 THEN GOTO mainkeyboardscanăIF AA% = 71 THEN COLOR 15: CLS : SCREEN 0: DEF SEG : ENDăIF AA% = 83 THEN GOTO preparetoexităIF AA% = 72 THEN GOTO helpscrnăIF AA% = 90 THEN GOTO zoomăGOTO cursorămainkeyboardscan:ăIF ASC(MID$(i$, 2)) = 75 THEN x% = x% - 2ăIF ASC(MID$(i$, 2)) = 77 THEN x% = x% + 2ăIF ASC(MID$(i$, 2)) = 72 THEN y% = y% - 2ăIF ASC(MID$(i$, 2)) = 80 THEN y% = y% + 2ăIF ASC(MID$(i$, 2)) = 71 THEN x% = x% - 2: y% = y% - 2ăIF ASC(MID$(i$, 2)) = 79 THEN x% = x% - 2: y% = y% + 2ăIF ASC(MID$(i$, 2)) = 73 THEN x% = x% + 2: y% = y% - 2ăIF ASC(MID$(i$, 2)) = 81 THEN x% = x% + 2: y% = y% + 2ăIF x% > 300 THEN x% = 300ăIF x% < 6 THEN x% = 6ăIF y% > 180 THEN y% = 180ăIF y% < 5 THEN y% = 5ăGOTO cursorăhelpscrn:ăDEF SEG = &HA000: BSAVE "temp.bin", 0, 64780!: CLSăăDEF SEG = &HA000 + 4000ăOUT &H3C7, 0ăFOR k = 0 TO 767ăA = INP(&H3C9)ăPOKE k, AăNEXTăSCREEN 9ăCOLOR 12, 0ăPRINT "Command from main screen:"ăPRINT "<G>=Good Bye  <H>=This menu."ăPRINT "<S>=Press this key before saving the picture using VGACLIP!"ăPRINT "<Z>=Go to ZOOM Edit Mode."ăPRINTăPRINT "Commands from ZOOM Edit Mode:"ăPRINT "<D>=Pen-Down Mode."ăPRINT "<C>=Increases color value."ăPRINT "<->=Decreases color value."ăPRINT "<F>=Changes color to the same color as one block to the right."ăPRINT "<L>=Return to the main screen without saving the editing."ăPRINT "<S>=Saves your editing and returns to the main screen."ăPRINT "<U>=Pen Up Mode."ăPRINT "Use the arrow keys on the keypad to move the cursor. Home moves"ăPRINT "the cursor up and to the left. PgUp moves it up and to the right."ăPRINT "End moves it down and to the left and PgDn moves it down and to"ăPRINT "the right. All keys are repeat keys. Just hold them down!"ăPRINT "Press any key to continue."ăinkey2:ăZ$ = INKEY$: IF Z$ = "" THEN GOTO inkey2ăSCREEN 13ăOUT &H3C8, 0: FOR k = 0 TO 767: OUT &H3C9, 0: NEXTăDEF SEG = &HA000: BLOAD "temp.bin", 0ăDEF SEG = &HA000 + 4000ăOUT &H3C8, 0ăFOR k = 0 TO 767: P = PEEK(k): OUT &H3C9, P: NEXTăGOTO cursorăzoom:ăGET (x%, y%)-(x% + 19, y% + 19), PIXăDEF SEG = &HA000 + 4000ăOUT &H3C7, 0ăFOR k = 0 TO 767: A = INP(&H3C9): POKE k, A: NEXTăDEF SEG = &HA000: BSAVE "temp.bin", 0, 64780!ăCLS : PUT (50, 50), PIX, PSETăFOR y = 4 TO 164 STEP 8ăLINE (100, y)-(260, y), 142ăNEXTăFOR x = 100 TO 260 STEP 8ăLINE (x, 4)-(x, 164), 142ăNEXTăx = 160: y = 100ăX1 = 59: Y1 = 60ăi% = 1ăOPEN "r", #1, "zoom", 1: FIELD 1, 1 AS O$ăFOR y = 50 TO 69ăFOR x = 50 TO 69ăLSET O$ = CHR$(POINT(x, y)): PUT 1, i%ăi% = i% + 1ăNEXT x, yăCLOSE #1ăi% = 1ăăOPEN "r", #1, "zoom", 1: FIELD 1, 1 AS O$ăFOR y = 6 TO 164 STEP 8ăFOR x = 102 TO 260 STEP 8ăGET #1, i%: i% = i% + 1ăIF ASC(O$) = 142 THEN PAINT (x, y), 143, 142: GOTO skipoverăPAINT (x, y), ASC(O$), 142ăskipover:ăNEXT x, yăCLOSE #1ăx = 176: y = 88ăflag$ = "jump"ăLINE (170, 180)-(190, 198), 142, Băc = POINT(x, y)ăIF c = 142 THEN c = 143ăPAINT (180, 185), c, 142: LOCATE 25, 30: PRINT c;ăinkey3:ăi$ = INKEY$: IF i$ = "" THEN GOSUB putcursor: GOTO inkey3ăAA = ASC(i$)ăIF AA = 0 THEN GOTO keyboardscanfromzoomăIF i$ = "d" OR i$ = "D" THEN flag$ = ""ăIF i$ = "c" OR i$ = "C" THEN c = c + 1: IF c > 255 THEN c = 0ăIF i$ = "-" OR i$ = "_" THEN c = c - 1: IF c < 0 THEN c = 0ăIF c = 142 AND i$ = "-" OR i$ = "_" THEN c = 141ăIF c = 142 AND i$ = "c" OR i$ = "C" THEN c = 143ăIF i$ = "c" OR i$ = "C" THEN GOSUB printnewcolorăIF i$ = "-" OR i$ = "_" THEN GOSUB printnewcolorăIF i$ = "f" OR i$ = "F" THEN c = POINT(x + 8, y): IF c = 142 THEN c = 143ăIF i$ = "s" OR i$ = "S" THEN GOTO savefromkeyboardăIF i$ = "l" OR i$ = "L" THEN GOSUB bloadscrn: GOTO cursorăIF i$ = "u" OR i$ = "U" THEN flag$ = "jump"ăIF flag$ = "" THEN PAINT (x, y), c, 142: PSET (X1, Y1), căPUT (x - 3, y - 3), d: FOR d = 0 TO 50: NEXT: PUT (x - 3, y - 3), dăi$ = "": GOTO inkey3ăkeyboardscanfromzoom:ăIF ASC(MID$(i$, 2)) = 75 THEN x = x - 8: X1 = X1 - 1ăIF ASC(MID$(i$, 2)) = 77 THEN x = x + 8: X1 = X1 + 1ăIF ASC(MID$(i$, 2)) = 72 THEN y = y - 8: Y1 = Y1 - 1ăIF ASC(MID$(i$, 2)) = 80 THEN y = y + 8: Y1 = Y1 + 1ăIF ASC(MID$(i$, 2)) = 71 THEN x = x - 8: y = y - 8: X1 = X1 - 1: Y1 = Y1 - 1ăIF ASC(MID$(i$, 2)) = 79 THEN x = x - 8: y = y + 8: X1 = X1 - 1: Y1 = Y1 + 1ăIF ASC(MID$(i$, 2)) = 73 THEN x = x + 8: y = y - 8: X1 = X1 + 1: Y1 = Y1 - 1ăIF ASC(MID$(i$, 2)) = 81 THEN x = x + 8: y = y + 8: X1 = X1 + 1: Y1 = Y1 + 1ăIF x > 256 THEN x = 256ăIF x < 104 THEN x = 104ăIF y > 160 THEN y = 160ăIF y < 8 THEN y = 8ăIF X1 < 50 THEN X1 = 50ăIF X1 > 69 THEN X1 = 69ăIF Y1 > 69 THEN Y1 = 69ăIF Y1 < 50 THEN Y1 = 50ăIF flag$ = "jump" THEN GOSUB putcursor: GOTO inkey3ăPAINT (x, y), c, 142ăPSET (X1, Y1), căGOTO inkey3ăsavefromkeyboard:ăGET (50, 50)-(69, 69), PIXăDEF SEG = &HA000: BLOAD "temp.bin", 0ăPUT (x%, y%), PIX, PSETăGOTO cursorăăpreparetoexit:ăREM blanks cursor and saves-endsăPUT (x%, y%), B: PUT (x%, y%), Băinkey4:ăi$ = INKEY$: IF i$ = "" THEN GOTO inkey4ăIF i$ = "g" OR i$ = "G" THEN CLS : SCREEN 0: ENDăGOTO inkey4ăerrorroutine:ăSCREEN 0: WIDTH 80: CLS : RESUME restartăkeyboard:ăDIM inregs AS RegTypeX, outregs AS RegTypeXăfilespec$ = "*.cap" + CHR$(0)ăPRINT STRING$(75, 196)ăinregs.ax = &H2F00ăCALL INTERRUPTX(&H21, inregs, outregs)ădata.seg = outregs.esădata.off = outregs.bxăinregs.ax = &H4E00ăinregs.dx = SADD(filespec$)ăinregs.ds = -1ăCALL INTERRUPTX(&H21, inregs, outregs)ăcy = outregs.flags AND 1ăIF cy = 0 THENăWHILE cy = 0ăDEF SEG = data.segăf.name$ = ""ăi = data.off + 30ăWHILE PEEK(i) <> 0ăf.name$ = f.name$ + CHR$(PEEK(i))ăi = i + 1ăWENDăDEF SEGăPRINT f.name$ + " ";ăinregs.ax = &H4F00ăCALL INTERRUPTX(&H21, inregs, outregs)ăcy = outregs.flags AND 1ăWENDăELSE GOSUB PRINTNOCAPFILESăEND IFăPRINT STRING$(75, 196)ăINPUT "Filename to load"; n$ăRETURNăPRINTNOCAPFILES:ăPRINT "There are no .CAP files in this directory."ăPRINT STRING$(75, 196)ăINKEY5:ăi$ = INKEY$: IF i$ = "" THEN GOTO INKEY5ăDEF SEG : CLS : SCREEN 0: WIDTH 80: ENDăputcursor:ăPUT (x - 3, y - 3), dăFOR d = 0 TO 50: NEXTăPUT (x - 3, y - 3), dăRETURNăprintnewcolor:ăPAINT (180, 185), c, 142ăLOCATE 25, 30ăPRINT "    ";ăLOCATE 25, 30ăPRINT c;ăRETURNăbloadscrn:ăCLSăDEF SEG = &HA000ăBLOAD "temp.bin", 0ăRETURNăăZabudsky Aaron Scott           WINDOWS BITMAP VIEWER          FidoNet QUIK_BAS Echo          Unknown Date           QB, QBasic, PDS        279  8837     BMPVIEW.BAS CLSăINPUT "Filename to load: ", filename$ăOPEN filename$ FOR BINARY AS #1ăăheader$ = SPACE$(14)ăsizing$ = SPACE$(4)ăGET #1, 1, header$ăGET #1, 15, sizing$ăbmpinfosize = CVI(sizing$)ă'bmpinfosize - Is the size of the information header for the bitmap.ă'              Different bitmap versions have variations in filetypes.ă'              40 is a standard windows 3.1 bitmap.ă'              12 is for OS/2 bitmapsă'The next routine reads in the appropriate headers and colour tables.ă'nbits is the number of bits per pixel - i.e. number of coloursă'1 bit = 2 colours, 4 bits = 16 colours, 8 bits = 256 colours, etc.ă'the 24 bit mode does not have a palette, its colours are expressed asă'image dataăă'Design of a windows 3.1 bitmap - Taken from bmp.zip on theă'x2ftp.oulu.fi ftp site under /pub/msdos/programming/formatsă'Specifications for a Windows 3.1 bitmap. (.BMP)ă'Email any questions/responses to me at zabudsk@ecf.utoronto.caă'or post to alt.lang.basic or comp.lang.basic.misc.ăă'       | # of   |ă'Offset | bytes  | Function (value)ă'-------+--------+--- General Picture information starts here---------ă'  0    |   2    | (BM) - Tells us that the picture is in bmp formată'  2    |   4    | Size of the file (without header?)ă'  6    |   2    | (0) Reserved1 - Must be zeroă'  8    |   2    | (0) Reserved2 - Must be zeroă'  10   |   4    | Number of bytes offset of the picture dataă'-------+--------+--- Information Header starts here -----------------ă'  14   |   4    | (40/12) Size of information header (Win3.1/OS2)ă'  18   |   4    | Picture width in pixelsă'  22   |   4    | Picture Height in pixelsă'  26   |   2    | (1) Number of planes, must be 1ă'  28   |   2    | Number of bits per pixel (bpp), must be 1,4,8 or 24ă'  30   |   4    | (0) Compression - 0 means no compression, 1,2 are RLEsă'  34   |   4    | Image size in bytesă'  38   |   4    | picture width in pels per metreă'  42   |   4    | picture height in pels per metreă'  46   |   4    | (0) Number of colours used in the picture, 0 means allă'  50   |   4    | (0) Number of important colours, 0 means allă'-------+--------+--- Palette data starts here -----------------------ă'  54   |   1    | (b) - blue intensity component, color 0 - range 0 to 255ă'  55   |   1    | (g) - green intensity component, color 0 - range 0 to 255ă'  56   |   1    | (r) - red intensity component, color 0 - range 0 to 255ă'  57   |   1    | (0) - unusedă'  58   |   1    | (b) - blue intensity component, color 0 - range 0 to 255ă'  ...  | ...    |ă'  54   | 4*2^bpp| total range of paletteă'-------+--------+--- Image data starts here -------------------------ă'54+    | width* | Bitmap data starting at lower left portion of theă'(4*2^n)| height*| image moving from left towards right. Moving up 1ă'       | (8/bpp)| pixel when at the right hand side of the image, startingă'       |        | from the left side again, until the top right of theă'       |        | image is reachedăă'Note that this format is slightly different for a OS/2 Bitmap.ă'The header is the same up to (but not including) bit 30-ă'The palette colour values follow at bit 30, with the form...ă'1 byte blue intensityă'1 byte green intensityă'1 byte red intensityă'For each colour of the picture.ă'Bitmapped image data follows the colour tablesăăă'Special note: When storing 1 bit (2 colour) pictures.ă'8 horizontal pixels are packed into 1 byte. Each bit determinesă'the colour of one pixel (colour 0 or colour 1)ăă'4 bit pictures (16 colours) use 2 nibbles (4 bits) for each pixelă'thus there are 2 pixels for each byte of image data.ăă'8 bit pictures use 1 byte per pixel. Each byte of image dataă'represents one of 256 colours.ăă'24 bit pictures express colour values by using 3 bytes and each has aă'value between 0 and 255. The first byte is for red, the second is foră'green and the third is for blue. Thus (256)^3 or 2^24 of 16777216 differentă'colours.ăăIF bmpinfosize = 12 THENă   infoheader$ = SPACE$(12)ă   GET #1, 15, infoheader$ă   nbits = CVI(MID$(infoheader$, 15, 4))ăă   IF nbits = 1 THENă      palet$ = SPACE$(6)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 4 THENă      palet$ = SPACE$(48)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 8 THENă      palet$ = SPACE$(768)ă      GET #1, bmpinfosize + 15, palet$ă   END IFăELSEIF bmpinfosize = 40 THENă   infoheader$ = SPACE$(40)ă   GET #1, 15, infoheader$ă   nbits = CVI(MID$(infoheader$, 15, 4))ă   IF nbits = 1 THENă      palet$ = SPACE$(8)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 4 THENă      palet$ = SPACE$(64)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 8 THENă      palet$ = SPACE$(1024)ă      GET #1, bmpinfosize + 15, palet$ă   END IFăEND IFăăăft$ = MID$(header$, 1, 2)ăPRINT "Type of file (Should be BM): "; ft$ăăfilesize = CVL(MID$(header$, 3, 4))ăPRINT "Size of file: "; filesizeăăr1 = CVI(MID$(header$, 7, 2))ăPRINT "Reserved 1: "; r1ăăr2 = CVI(MID$(header$, 9, 2))ăPRINT "Reserved 2: "; r2ăăoffset = CVL(MID$(header$, 11, 4))ăPRINT "Number of bytes offset from beginning: "; offsetăăPRINTăăheadersize& = CVL(MID$(infoheader$, 1, 4))ăPRINT "Size of header: "; headersize&ăăpicwidth = CVL(MID$(infoheader$, 5, 4))ăPRINT "Width: "; picwidthăăpicheight = CVL(MID$(infoheader$, 9, 4))ăPRINT "Height: "; picheightănplanes = CVI(MID$(infoheader$, 13, 4))ăPRINT "Planes: "; nplanesăăPRINT "Bits per plane: "; nbitsăăPRINTăăIF headersize = 40 THENă   PRINT "Compression: ";ă   comptype = CVL(MID$(infoheader$, 17, 4))ă   IF comptype = 0 THEN PRINT "None"ă   IF comptype = 1 THEN PRINT "Run Length - 8 Bits"ă   IF comptype = 2 THEN PRINT "Run Length - 4 Bits"ăă   imagesize = CVL(MID$(infoheader$, 21, 4))ă   PRINT "Image Size (bytes): "; imagesizeăă   xsize = CVL(MID$(infoheader$, 25, 4))ă   PRINT "X size (pixels per metre): "; xsizeăă   ysize = CVL(MID$(infoheader$, 29, 4))ă   PRINT "Y size (pixels per metre): "; ysizeăă   colorsused = CVL(MID$(infoheader$, 33, 4))ă   PRINT "Number of colours used: "; colorsusedăă   neededcolours = CVL(MID$(infoheader$, 37, 4))ă   PRINT "Number of important colours: "; neededcoloursăEND IFăPRINTăPRINT "Press Any key to continue."ăWHILE INKEY$ = ""ăWENDăăIF nbits = 1 THENă   SCREEN 11ăELSEIF nbits = 4 THENă   SCREEN 13ăELSEIF nbits = 8 OR nbits = 24 THENă   SCREEN 13ăEND IFăIF bmpinfosize = 40 THEN ngroups = 4ăIF bmpinfosize = 12 THEN ngroups = 3ăăIF nbits = 24 THENă   IF ngroups = 3 THENă      FOR c = 0 TO 63ă         d = c * 4ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d)ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1)ă         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d)ă         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d)ă      NEXT că   ELSEIF ngroups = 4 THENă      FOR c = 0 TO 63ă         d = c * 4ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d) + CHR$(0)ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1) + CHR$(0)ă         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d) + CHR$(0)ă         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d) + CHR$(0)ă      NEXT că   END IFăEND IFăăFOR x = 1 TO LEN(palet$) STEP ngroupsă   zb# = INT((ASC(MID$(palet$, x, 1))) / 4)ă   zg# = INT((ASC(MID$(palet$, x + 1, 1))) / 4)ă   zr# = INT((ASC(MID$(palet$, x + 2, 1))) / 4)ă   zc# = zb# * 65536# + zg# * 256# + zr#ă   cres = ASC(MID$(palet$, x + 3, 1))ă   PALETTE ((x - 1) / ngroups), zc#ăNEXT xăăIF nbits = 24 THENă   y = picheight - 1ă   x = 0ă   dat$ = "   "ă   WHILE y >= 0ă      WHILE x < picwidthă         GET 1, , dat$ă         p1 = INT(ASC(MID$(dat$, 1, 1)) + ASC(MID$(dat$, 1, 1)) + ASC(MID$(dat$, 1, 1)))ă         PSET (x, y), p1ă         x = x + 1ă      WENDă      y = y - 1ă      x = 0ă   WENDăELSEIF nbits = 8 THENă   y = picheight - 1ă   x = 0ă   dat$ = " "ă   WHILE y >= 0ă      WHILE x < picwidthă         GET 1, , dat$ă         PSET (x, y), ASC(dat$)ă         x = x + 1ă      WENDă      y = y - 1ă      x = 0ă   WENDăELSEIF nbits = 4 THENă   y = picheight - 1ă   x = 0ă   dat$ = " "ă   WHILE y >= 0ă      WHILE x < picwidthă        GET 1, , dat$ă        LOCATE 1, 1ă        p1 = ASC(dat$) AND 15ă        p2 = ASC(dat$) AND 240 / 16ă        PSET (x, y), p1ă        PSET (x + 1, y), p2ă        x = x + 2ă      WENDă      y = y - 1ă      x = 0ă   WENDăELSEIF nbits = 1 THENă   y = picheight - 1ă   x = 0ă   dat$ = " "ă   WHILE y >= 0ă      WHILE x < picwidthă        GET 1, , dat$ă        p1 = ASC(dat$)ă        FOR p = 0 TO 7ă           PSET (x + (7 - p), y), (p1 AND 2 ^ p) / 2 ^ pă        NEXT pă        x = x + 8ă      WENDă      y = y - 1ă      x = 0ă   WENDăEND IFăăCLOSEăăThe ABC Programmer             EARTHQUAKE EFFECT DEMO         EARTHQUAKE,EFFECT,DEMO         07-23-94 (00:00)       QB, QBasic, PDS        95   2764     QUAKE.BAS   '==========================================ă' EARTHQUAKE by William Yu (07-23-94)ă' Creates an Earthquake effectă' Works on any graphics modeă' Here's a short demo, modify as you wishă'==========================================ăăDECLARE SUB EarthQuake ()ăDIM CRAFT(500)ăCLSăSCREEN 12ăOUT &H3D4, 9: OUT &H3D5, 1ăDOă  RANDOMIZE TIMERă  Clock = Clock + 1ă  X = INT(RND * 640) + 1ă  Y = INT(RND * 280) + 1ă  Z = INT(RND * 15) + 1ă  PSET (X, Y), ZăLOOP UNTIL Clock = 150ăLOCATE 3, 25: COLOR 14: PRINT "JOURNEY TO THE UNKNOWN DIMENSION"ăCIRCLE (320, 120), 20, 13, , , 11 / 22ăPAINT (320, 120), 13ăCIRCLE (315, 122), 2, 6, , , 1 / 3: PAINT (315, 122), 6ăCIRCLE (323, 124), 2, 5, , , 1 / 3: PAINT (323, 124), 5ăCIRCLE (320, 117), 2, 6, , , 1 / 3: PAINT (320, 117), 6ăSLEEP 1ăLINE (610, 12)-(630, 4), 10ăLINE (610, 12)-(634, 8), 10ăLINE (634, 8)-(630, 4), 10ăPAINT (630, 6), 10: PSET (617, 10), 10: PSET (616, 10), 10ăCIRCLE (628, 7), 2, 9, , , 1 / 3: PAINT (628, 7), 9ăLINE (632, 6)-(634, 6), 12: LINE (630, 4)-(632, 4), 12ăLINE (634, 8)-(636, 8), 12ăGET (639, 2)-(609, 13), CRAFTăX = 609: Y = 2ăMOVECRAFT:ăX = X - 3ăY = Y + 1.1ăPUT (X, Y), CRAFT, PSETăIF X = 333 THEN GOTO CRASHăGOTO MOVECRAFTăCRASH:ăPSET (330, 115), 10: PSET (330, 115), 12: PSET (325, 116), 15ăPSET (330, 114), 15: PSET (329, 113), 12: PSET (326, 115), 10ăPSET (331, 115), 10: PSET (331, 115), 12: PSET (325, 113), 10ăPSET (332, 114), 15: PSET (327, 113), 10: PSET (329, 114), 10ăPSET (330, 113), 10: PSET (328, 112), 10ăLINE (333, 114)-(380, 110), 12ăLINE (333, 114)-(380, 105), 12ăLINE (333, 114)-(380, 100), 12ăLINE (333, 114)-(360, 100), 12ăLINE (333, 114)-(345, 102), 12ăEarthQuakeăLINE (333, 114)-(380, 110), 14ăLINE (333, 114)-(380, 105), 14ăLINE (333, 114)-(380, 100), 14ăLINE (333, 114)-(360, 100), 14ăLINE (333, 114)-(345, 102), 14ăEarthQuakeăPUT (333, 100), CRAFT, ANDăLINE (333, 114)-(380, 110), 12ăLINE (333, 114)-(380, 105), 12ăLINE (333, 114)-(380, 100), 12ăLINE (333, 114)-(360, 100), 12ăLINE (333, 114)-(345, 102), 12ăEarthQuakeăLINE (333, 114)-(380, 110), 0ăLINE (333, 114)-(380, 105), 0ăLINE (333, 114)-(380, 100), 0ăLINE (333, 114)-(360, 100), 0ăLINE (333, 114)-(345, 102), 0ăLINE (341, 105)-(355, 110), 0, BFăEarthQuakeăOUT &H3D4, 8: OUT &H3D5, 0ăSLEEP 1ăLOCATE 3, 25: PRINT SPACE$(32)ăLOCATE 3, 29: COLOR 12: PRINT "WHAT THE HELL WAS THAT!!!"ăSLEEP 1ăLOCATE 3, 29: COLOR 14: PRINT "HELP! HELP! AHHH...I'M..."ăSLEEP 2ăLOCATE 3, 29: COLOR 12: PRINT "       NO RESPONSE       "ăSLEEP 1ăLOCATE 3, 32: PRINT "WHAT HAPPENED TO HIM?"ăSLEEP 2ăăSUB EarthQuakeăăDelay = 5500       ' Increase this or decrease for earthquake delayăăFOR X = 1 TO Delayă  OUT &H3D4, 8: OUT &H3D5, XăNEXT XăEND SUBăăMatt Hart                      SAVE/RESTORE GRAPHICS SCREENS  FidoNet QUIK_BAS Echo          07-28-92 (21:55)       QB, PDS                293  9721     GSAVES.BAS  ' MK> Does anyone know how to save the graphics screen for 640x480x16, VGA?ă' MK> Also, using a binary file?"BSAVE", not a text file...ă'ă'ă' GSAVES.BAS  by Matt Hartă' Save/Restore multiple graphics screens ină' any mode to a single file.ă'ă' Compile with /AH for huge arrays andă' /X for error trapping with RESUME NEXTă'ă' The data is stored as follows:ă'   1 Byte  :  Monitor Typeă'   1 Byte  :  Screen Mode (0-13)ă'   For VGA monitors, the palette (long integers)ă'   is stored next for screens 11, 12, and 13ă'    Screen Mode   Number of Bytes   Number of Attributesă'       11               8                   2ă'       12              64                  16ă'       13            1024                 256ă' ă    DEFINT A-Ză    DECLARE FUNCTION CalcBytes&(X,Y,BPP,P)ă    TYPE RegTypeXă        ax    AS INTEGERă        bx    AS INTEGERă        cx    AS INTEGERă        dx    AS INTEGERă        bp    AS INTEGERă        si    AS INTEGERă        di    AS INTEGERă        flags AS INTEGERă        ds    AS INTEGERă        es    AS INTEGERă    END TYPEă    'ă    CONST False = 0ă    CONST True  = NOT Falseăă    ON ERROR GOTO ErrorTrapă    'ă    REDIM NumBytes&(0 TO 13)ă    NumBytes&(0)  = 4000&ă    NumBytes&(1)  = CalcBytes&(320,200,2,1)ă    NumBytes&(2)  = CalcBytes&(640,200,1,1)ă    NumBytes&(3)  = CalcBytes&(720,348,1,1)ă    NumBytes&(7)  = CalcBytes&(320,200,1,4)ă    NumBytes&(8)  = CalcBytes&(640,200,1,4)ă    NumBytes&(9)  = CalcBytes&(640,350,1,4)ă    NumBytes&(10) = CalcBytes&(640,350,1,2)ă    NumBytes&(11) = CalcBytes&(640,480,1,1)ă    NumBytes&(12) = CalcBytes&(640,480,1,4)ă    NumBytes&(13) = CalcBytes&(320,200,8,1)ă    'ă    FileName$ = "SCREENS.BIN"ă    ' Example 1 : Screen 0ă    CLS : PRINT "This is Screen 0"ă    COLOR 14 : PRINT "     This is Screen 0"ă    Mon = 0 : ScrMode = 0 : ScreenNum = 1ă    CALL SaveScreen(FileName$, Mon, ScrMode, ScreenNum, NumBytes&(),Ecode)ă    CLSă    CALL RestoreScreen(FileName$, ScreenNum, NumBytes&(), Ecode)ă    ENDă    ' Parameters are:ă    '     FileName$  =  File to save the screen toă    '           Mon  =  Monitor Typeă    '                     0 = Monochrome/Text Onlyă    '                     1 = Herculesă    '                     2 = CGAă    '                     3 = EGAă    '                     4 = VGAă    '       ScrMode  =  Current Screen Mode (0-13)ă    '     ScreenNum  =  Screen Number to Saveă    '                   Will return with the last screenă    '                   number in the file if ScreenNumă    '                   was greater than the last screen + 1ă    '   NumBytes&()  =  Array containing the number of bytesă    '                   needed to save a screenă    '         Ecode  =  0 if no error, 1 ifă    '                   ScreenNum already exists andă    '                   is not the same ScrMode and Mon,ă    '                   or -1 if some other error.ă    'ăErrorTrap:ă    Ecode = Trueă    RESUME NEXTă    'ăSUB SaveScreen(FileName$, Mon, ScrMode, ScreenNum, NumBytes&(), Ecode)ă    Ecode = Falseă    Buf = FreeFileă    OPEN "B",Buf,FileName$ : IF Ecode THEN EXIT SUBă    CurScr = 1  :  CurPos& = 1ăDOă    IF EOF(Buf) THEN EXIT DOă    M$=" " : S$=" " : GET Buf,,M$ : GET Buf,,S$ă    M=ASC(M$) : S=ASC(S$) : CurPos& = CurPos& + 2ă    IF CurScr = ScreenNum THENă        IF M=Mon AND S=ScrMode THENă            SEEK #Buf, CurPos& - 2ă            EXIT DOă        ELSEă            Ecode = 1ă            EXIT DOă        ENDIFă    ELSEă        IF M=4 THENă            SELECT CASE Să                CASE 11 : CurPos& = CurPos& + 8&ă                CASE 12 : CurPos& = CurPos& + 64&ă                CASE 13 : CurPos& = CurPos& + 1024&ă            END SELECTă        ENDIFă        CurPos& = CurPos& + NumBytes&(S)ă        SEEK #Buf, CurPos&ă        IF Ecode THEN EXIT DO       ' a DOS Erroră        CurScr = CurScr + 1ă    ENDIFăLOOPă    IF Ecode <> 0 THEN GOTO SS.Endingă    ScreenNum = CurScră    A$=CHR$(Mon)+CHR$(ScrMode) : PUT #Buf,,A$ă    IF Ecode THEN GOTO SS.Ending        ' DOS Erroră    REDIM Saver&(1 TO NumBytes&(ScrMode))ă    SaveSeg = VARSEG(Saver&(1))ă    SaveAdd& = VARPTR(Saver&(1))ă    SELECT CASE ScrModeă        CASE 0ă            FOR P=0 TO 3999ă                DEF SEG = &HB000 : Z=PEEK(P)ă                DEF SEG = SaveSeg : POKE SaveAdd&+P,Ză            NEXT Pă            DEF SEGă        CASE 1,7,13 : GET (0,0)-(319,199),Saver&ă        CASE 2,8    : GET (0,0)-(639,199),Saver&ă        CASE 3      : GET (0,0)-(719,347),Saver&ă        CASE 9,10   : GET (0,0)-(639,349),Saver&ă        CASE 11,12  : GET (0,0)-(639,479),Saver&ă    END SELECTă    IF Ecode THEN GOTO SS.Ending        ' Wrong Screen mode probablyă    IF Mon = 4 THENă        SELECT CASE Să            CASE 11 : NumPal = 2ă            CASE 12 : NumPal = 16ă            CASE 13 : NumPal = 256ă            CASE ELSE : NumPal = 0ă        END SELECTă        IF NumPal > 0 THENă            DIM InRegs AS RegTypeXă            DIM OutRegs AS RegTypeXă            REDIM PalInfo&(0 TO NumPal-1)ă            FOR i = 0 TO NumPal-1ă                InRegs.ax = &H1015ă                InRegs.bx = iă                CALL INTERRUPTX (&H10, InRegs, OutRegs)ă                A& = (OutRegs.cx AND &HFF00) \ &HFFă                B& = (OutRegs.cx AND &HFF)ă                C& = (OutRegs.dx AND &HFF00) \ &HFFă                PalInfo&(i) = 65536& * B& + 256& * A& + C&ă            NEXT iă            PSeg = VARSEG(PalInfo&(0)) : PAdd& = VARPTR(PalInfo&(0))ă            FOR i = 0 TO NumPal*4-1ă                DEF SEG = PSegă                A$=CHR$(PEEK(PAdd&)) : DEF SEGă                PUT Buf,,A$ă                PAdd& = PAdd& + 1ă                IF PAdd& > (16*1024) THENă                    PAdd& = PAdd& - (16*1024)ă                    PSeg = PSeg + (16*1024\64)ă                ENDIFă            NEXTă        ENDIFă    ENDIFă    FOR i=0 TO NumBytes&(ScrMode)-1ă        DEF SEG = SaveSegă        A$=CHR$(PEEK(SaveAdd&)) : DEF SEGă        PUT Buf,,A$ăă        IF Ecode THEN EXIT FORă        SaveAdd& = SaveAdd& + 1ă        IF SaveAdd& > (16*1024) THENă            SaveAdd& = SaveAdd& - (16*1024)ă            SaveSeg = SaveSeg + (16*1024\64)ă        ENDIFă    NEXT iă    IF Ecode THEN GOTO SS.Ending        ' DOS Erroră    CLOSE Bufă    EXIT SUBăSS.Ending:ă    CLOSE BufăEND SUBăăăSUB RestoreScreen(FileName$, ScreenNum, NumBytes&(), Ecode)ă    Ecode = Falseă    Buf = FreeFileă    OPEN "B",Buf,FileName$ : IF Ecode THEN EXIT SUBă    CurScr = 1  :  CurPos& = 1ăDOă    IF EOF(Buf) THENă        Ecode = Trueă        EXIT DOă    ENDIFă    M$=" " : S$=" " : GET Buf,,M$ : GET Buf,,S$ă    M=ASC(M$) : S=ASC(S$) : CurPos& = CurPos& + 2ă    IF CurScr = ScreenNum THENă        EXIT DOă    ELSEă        IF M=4 THENă            SELECT CASE Să                CASE 11 : CurPos& = CurPos& + 8&ă                CASE 12 : CurPos& = CurPos& + 64&ă                CASE 13 : CurPos& = CurPos& + 1024&ă            END SELECTă        ENDIFă        CurPos& = CurPos& + NumBytes&(S)ă        SEEK #Buf, CurPos&ă        IF Ecode THEN EXIT DO       ' a DOS Erroră    ENDIFăLOOPă    IF Ecode <> 0 THEN GOTO SS.Endingă    REDIM Saver&(1 TO NumBytes&(ScrMode))ă    SaveSeg = VARSEG(Saver&(1))ă    SaveAdd& = VARPTR(Saver&(1))ă    G$=" "ă    SELECT CASE ScrModeă        CASE 0ă            FOR P=0 TO 3999ă                GET Buf,,G$ : Z=ASC(G$)ă                DEF SEG = SaveSeg : POKE SaveAdd&+P,Z : DEF SEGă            NEXT Pă        CASE 1,7,13 : GET (0,0)-(319,199),Saver&ă        CASE 2,8    : GET (0,0)-(639,199),Saver&ă        CASE 3      : GET (0,0)-(719,347),Saver&ă        CASE 9,10   : GET (0,0)-(639,349),Saver&ă        CASE 11,12  : GET (0,0)-(639,479),Saver&ă    END SELECTă    IF Ecode THEN GOTO SS.Ending        ' Wrong Screen mode probablyă    IF Mon = 4 THENă        SELECT CASE Să            CASE 11 : NumPal = 2ă            CASE 12 : NumPal = 16ă            CASE 13 : NumPal = 256ă            CASE ELSE : NumPal = 0ă        END SELECTă        IF NumPal > 0 THENă            DIM InRegs AS RegTypeXă            DIM OutRegs AS RegTypeXă            REDIM PalInfo&(0 TO NumPal-1)ă            FOR i = 0 TO NumPal-1ă                InRegs.ax = &H1015ă                InRegs.bx = iă                CALL INTERRUPTX (&H10, InRegs, OutRegs)ă                A& = (OutRegs.cx AND &HFF00) \ &HFFă                B& = (OutRegs.cx AND &HFF)ă                C& = (OutRegs.dx AND &HFF00) \ &HFFă                PalInfo&(i) = 65536& * B& + 256& * A& + C&ă            NEXT iă            PSeg = VARSEG(PalInfo&(0)) : PAdd& = VARPTR(PalInfo&(0))ă            FOR i = 0 TO NumPal*4-1ă                DEF SEG = PSegă                A$=CHR$(PEEK(PAdd&)) : DEF SEGă                PUT Buf,,A$ă                PAdd& = PAdd& + 1ă                IF PAdd& > (16*1024) THENă                    PAdd& = PAdd& - (16*1024)ă                    PSeg = PSeg + (16*1024\64)ăă                ENDIFă            NEXTă        ENDIFă    ENDIFă    FOR i=0 TO NumBytes&(ScrMode)-1ă        DEF SEG = SaveSegă        A$=CHR$(PEEK(SaveAdd&)) : DEF SEGă        PUT Buf,,A$ă        IF Ecode THEN EXIT FORă        SaveAdd& = SaveAdd& + 1ă        IF SaveAdd& > (16*1024) THENă            SaveAdd& = SaveAdd& - (16*1024)ă            SaveSeg = SaveSeg + (16*1024\64)ă        ENDIFă    NEXT iă    IF Ecode THEN GOTO SS.Ending        ' DOS Erroră    CLOSE Bufă    EXIT SUBăSS.Ending:ă    CLOSE BufăEND SUBăăFUNCTION CalcBytes&(X,Y,BPP,P)ă    C& = 4+INT(((X)*(BPP)+7)/8)*P*(Y)ă    CalcBytes& = C& + C& MOD 4&ăEND FUNCTIONăDave Navarro, Jr.              PB GIF DECODER                 FidoNet POWER_BAS Echo         10-21-95 (18:53)       PB                     208  5318     DECGIF.BAS  DEFINT A-ZăăDECLARE FUNCTION Getbit ()ăDECLARE FUNCTION ReadCode (CodeSize)ăDECLARE SUB PlotPixel (A)ăăTrue = -1ăFalse = 0ăăDIM ByteBuffer AS STRING * 1ăDIM Powers(8), Prefix(4096), Suffix(4096), Outcode(1024)ăDIM MaxCodes(12), Powers2(16)ăSHARED Xstart, Xend, True, FalseăăFOR A = 1 TO 8: Powers(A) = 2 ^ (A - 1): NEXTăDATA 4,8,16,&h20,&h40,&h80,&h100,&h200,&h400,&h800,&h1000,8192ăăFOR A = 0 TO 11: READ MaxCodes(A): NEXTăDATA 1,3,7,15,31,63,127,255ăăFOR A = 1 TO 8: READ CodeMask(A): NEXTăDATA 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384ăăFOR A = 0 TO 14: READ Powers2(A): NEXTăăF$="TMP.GIF"ăăOPEN F$ FOR BINARY AS #1 LEN = 1ăIF LOF(1) = 0 THEN PRINT "File not found!": CLOSE : KILL F$: ENDăăFOR A = 1 TO 6ă    GET #1, , ByteBuffer: A$ = A$ + ByteBufferăNEXTăIF A$ <> "GIF87a" THENă    PRINT "Warning, the "; A$; " protocol is being used in this file."ă    LINE INPUT "Proceed anyway(Y/N)?"; A$ă    IF UCASE$(A$) <> "Y" THEN ENDăEND IFăăGET #1, , TotalXăGET #1, , TotalYăăPRINT TotalX;"x";TotalY;"x";ăăGET #1, , ByteBuffer: A = ASC(ByteBuffer)ăBitsPixel = (A AND 7) + 1ăăGET #1, , ByteBuffer: Background = ASC(ByteBuffer)ăGET #1, , ByteBufferăăIF ASC(ByteBuffer) <> 0 THENă    PRINT "Bad file."ă    ENDăEND IFăăPRINT 2^BitsPixelăăGET$ 1, (2^BitsPixel)*3, Pal$ăăFOR I = 1 TO LEN(Pal$)ă        Tmp? = ASC(MID$(Pal$,I,1))ă        SHIFT RIGHT Tmp?,2ă        MID$(Pal$,I,1)=CHR$(Tmp?)ăNEXT IăăGET #1, , ByteBufferăIF ByteBuffer <> "," THENă    PRINT "Bad file."ă    ENDăEND IFăăGET #1, , XstartăGET #1, , YstartăGET #1, , XlengthăGET #1, , YlengthăXend = Xlength + Xstart - 1: Yend = Ylength + Ystart - 1ăăGET #1, , ByteBufferăA = ASC(ByteBuffer)ăIF (A AND 128) = 128 THENă    PRINT "Local colormap encountered."ă    ENDăELSEIF (A AND 64) = 64 THENă    PRINT "Image is interlaced!"ă    ENDăEND IFăăGET #1, , ByteBufferăCodeSize = ASC(ByteBuffer): ClearCode = Powers2(CodeSize)ăEOFCode = ClearCode + 1: FirstFree = ClearCode + 2ăFreeCode = FirstFree: CodeSize = CodeSize + 1ăInitCodeSize = CodeSize: Maxcode = MaxCodes(CodeSize - 2)ăBitmask = CodeMask(BitsPixel)ăăGET #1, , ByteBufferăBlockLength = ASC(ByteBuffer) + 1: Bitsin = 8ăOutCount = 0ăX = Xstart: Y = YstartăăI$=INPUT$(1)ăMode13 1ăăREG 1, &H1012ăREG 2, 0ăREG 3, 256ăREG 4, STRPTR(Pal$)ăREG 9, STRSEG(Pal$)ăCALL INTERRUPT &H10ăăDOă    Code = ReadCode(CodeSize)ă    IF Code <> EOFCode THENă        IF Code = ClearCode THENă            CodeSize = InitCodeSizeă            Maxcode = MaxCodes(CodeSize - 2): FreeCode = FirstFreeă            Code = ReadCode(CodeSize): CurCode = Codeă            OldCode = Code: FinChar = Code AND Bitmaskă                                                PlotPixel FinChară        ELSEă            CurCode = Code: InCode = Codeă            IF Code >= FreeCode THENă                CurCode = OldCodeă                Outcode(OutCount) = FinChară                OutCount = OutCount + 1ă            END IFă            IF CurCode > Bitmask THENă                DOă                    Outcode(OutCount) = Suffix(CurCode)ă                    OutCount = OutCount + 1ă                    CurCode = Prefix(CurCode)ă                LOOP UNTIL CurCode <= Bitmaskă            END IFă            FinChar = CurCode AND Bitmaskă            Outcode(OutCount) = FinChară            OutCount = OutCount + 1ă            FOR I = OutCount - 1 TO 0 STEP -1ă              PlotPixel OutCountă            NEXTă            OutCount = 0ă            Prefix(FreeCode) = OldCode: Suffix(FreeCode) = FinChară            OldCode = InCode: FreeCode = FreeCode + 1ă            IF FreeCode >= Maxcode THENă                IF CodeSize < 12 THENă                    CodeSize = CodeSize + 1: Maxcode = Maxcode * 2ă                END IFă            END IFă        END IFă    END IFă    A$ = INKEY$ăLOOP UNTIL Code = EOFCode OR A$ <> ""ăBEEPăIF A$ = "" THEN A$ = INPUT$(1)ăăMode13 0ăENDăăă'This subprogram gets one bit from the data stream.ăFUNCTION Getbit STATICă    SHARED Powers(), Bitsin, BlockLength, Numă    DIM ByteBuffer AS SHARED STRING * 1ă    Bitsin = Bitsin + 1ă    IF Bitsin = 9 THENă        GET #1, , ByteBufferă        TempChar = ASC(ByteBuffer)ă        Bitsin = 1ă        Num = Num + 1ă        IF Num = BlockLength THENă            BlockLength = TempChar + 1ă            GET #1, , ByteBufferă            TempChar = ASC(ByteBuffer)ă            Num = 1ă        END IFă    END IFă    IF (TempChar AND Powers(Bitsin)) = 0 THEN Getbit = 0 ELSE Getbit = 1ăEND FUNCTIONăă'This subprogram plots one pixel on the display.ăSUB PlotPixel (A) STATICă                DEF SEG = &HA000ă                        POKE Y*320+X, Aă                DEF SEGă    X = X + 1ă                IF X > Xend THENă        X = Xstartă        Y = Y + 1ă    END IFăEND SUBăă'This subprogram reads one LZW code from the data stream.ăăFUNCTION ReadCode (CodeSize)ă    SHARED Powers2()ă    Code = 0ă    FOR Aa = 0 TO CodeSize - 1ă        Code = Code + Getbit * Powers2(Aa)ă    NEXTă    ReadCode = CodeăEND FUNCTIONăăSUB Mode13(Bool)ă        IF Bool THENă                REG 1, &H0013ă         ELSEă                REG 1, &H0003ă        END IFă        CALL INTERRUPT &H10ăEND SUBăDave Navarro, Jr.              PB PCX DECODER                 FidoNet POWER_BAS Echo         10-21-95 (18:54)       PB                     108  2578     DECPCX.BAS  'Decode PCX filesă'by Dave Navarro, Jr.ăăDEFINT A-ZăăTYPE PcxHeaderă        Mfg    AS BYTEă        Ver    AS BYTEă        Enc    AS BYTEă        Bpp    AS BYTEă        XMin   AS INTEGERă        YMin   AS INTEGERă        XMax   AS INTEGERă        YMax   AS INTEGERă        Hres   AS INTEGERă        Vres   AS INTEGERă        Pal    AS STRING * 48ă        Resrv  AS BYTEă        ColPl  AS BYTEă        Bpl    AS INTEGERă        PalTyp AS INTEGERă        Filler AS STRING * 58ăEND TYPEăăDIM Header AS PcxHeaderăDIM ByteBuffer AS BYTEăăOPEN "B",1,"TMP.PCX"ă         GET# 1,,Headeră         IF Header.Mfg <> 10 AND Header.Ver <> 5 THENă                 PRINT "Not a 256 color PCX file!"ă                 ENDă         END IFăă         Tmp& = LOF(1) - 768ă         SEEK# 1, Tmp&ă         GET$ 1,768,Palete$ăă         FOR I = 1 TO 768ă                 Tmp? = ASC(MID$(Palete$,I,1))ă                 SHIFT RIGHT Tmp?,2ă                 MID$(Palete$,I,1)=CHR$(Tmp?)ă         NEXT Iăă         SEEK# 1, 128ăă         Wid = Header.Xmax - Header.Xmin + 1ă         Dep = Header.Ymax - Header.Ymin + 1ă         Byt = Header.Bplăă         PRINT Wid;"x";Dep;"x";2^Header.Bppăă         I$=INPUT$(1)ăă         Mode13 1ăă         REG 1, &H1012ă         REG 2, 0ă         REG 3, 256ă         REG 4, STRPTR(Palete$)ă         REG 9, STRSEG(Palete$)ă         CALL INTERRUPT &H10ăă   FOR Y = 0 TO Dep - 1ă                 FOR X = 0 TO Byt - 1ă                         GET# 1,,ByteBufferă                         ByteBuffer = ByteBuffer AND &HFFă                         IF (ByteBuffer AND &HC0) = &HC0 THENă                                 Times = ByteBuffer AND &H3Fă                                 GET# 1,,ByteBufferă                                 FOR I = 1 TO Timesă                                         PlotPixel ByteBufferă                                 NEXT Iă                                ELSEă                                         PlotPixel ByteBufferă                         END IFă                 NEXT Xă         NEXT YăăCLOSE 1ăăBEEPăI$=INPUT$(1)ăMode13 0ăENDăăăSUB PlotPixel(Z AS BYTE)ă        SHARED Widă        STATIC X, Yă        DEF SEG = &HA000ă                POKE Y*320+X, Ză        DEF SEGă        INCR Xă        IF X > Wid THENă                X = 0ă                INCR Yă        END IFăEND SUBăăSUB Mode13(Bool)ă        IF Bool THENă                REG 1, &H0013ă         ELSEă                REG 1, &H0003ă        END IFă        CALL INTERRUPT &H10ăEND SUBăBrett Levin                    3D CRAFT WITH COLOR            Rich Geldreich                 09-19-92 (00:00)       QB, QBasic, PDS        448  15482    3DCOLOR.BAS 'Well, here you go! This is an improved, easier to read version of myă'fast 3-D wireframe program. I've done some things that a coupleă'people recommended and I've also sped it up a little.ă'(The number at the upper left corner of the screen is the number ofă'frames per second that are being displayed. It's updated every 20 frames, soă'it will be a little choppy.)ăă'3DEXP1b.BAS By Rich Geldreich April 16th, 1992ă'ă'Modifications by Brett Levin 9/19/92ă'ă'    I've added another option to the DATA statements that defineă'  the lines, the last option is the color of that line.  To makeă'  it easier to change and/or create new objects, there is an addedă'  data statement near the end that defines the number of lines.ă'  I've also fixed some spelling here and there and messed withă'  the interface.ă'    The next thing that I think needs to be done is to add a D3, soă'  you can control the yaw (?) of the object.  We could use pgup/pgdwnă'  for this.  If you have any comments/questions, be sure to ask.ă'ă'    Rich- Be sure to tell me what you think of this.  I'm working on aă'  addition that will allow...  SCRIPTED ANIMATIONS!!  Cool huh?  Tellă'  me what you think.ă'ă'(This version has some documentation...)ăDEFINT A-ZăăREAD numberlines   ' First DATA statement near end of programă                   ' WARNING: Make sure you have less than 51 lines!ăăTYPE LineTypeă    X AS INTEGERă    Y AS INTEGERă    Z AS INTEGERă    X1 AS INTEGERă    Y1 AS INTEGERă    Z1 AS INTEGERă    LineColor AS INTEGERăEND TYPEăDIM Points(numberlines) AS LineTypeăDIM Xs(100), Ys(100), Xe(100), Ye(100), Xn(100), Yn(100)ăDIM Xs1(100), Ys1(100), Xe1(100), Ye1(100)ăDIM X(100), Y(100), Z(100), Pointers1(100), Pointers2(100)ăDIM R(100)ăDIM Cosine&(360), Sine&(360)ăCLSăCOLOR 15ăPRINT "3-D Craft v.1b"ăPRINT "By Rich Geldreich 1992"ăPRINT "(Slight modifications by Brett Levin 9/19/92)": COLOR 7ăPRINTăPRINT "Keys to use: (Turn NUMLOCK on!)"ăCOLOR 15: PRINT "  General controls": COLOR 7ăPRINT "Q...............Quits"ăCOLOR 15: PRINT "  View controls": COLOR 7ăPRINT "Numeric keypad..Controls your position(press 5 on the keypad"ăPRINT "                to completly stop yourself) "ăPRINT "-...............Move forward"ăPRINT "+...............Move backward"ăCOLOR 15: PRINT "  Object controls": COLOR 7ăPRINT "Arrow keys......Controls the rotation of the craft"ăPRINT "F...............Accelerates the craft (Forward)"ăPRINT "B...............Slows the craft (Backward)"ăPRINT "S...............Stops the craft"ăPRINT "A...............Toggles Auto Center, use this when you lose";ăPRINT " the craft"ăPRINT "C...............Stops the craft's rotation"ăPRINT "V...............Resets the craft to starting position"ăPRINTăPRINT "Wait a sec..."ăă'The following for/next loop makes a sine & cosine table.ă'Each sine & cosine is multiplied by 1024 and stored as long integers.ă'This is done so that we don't have to use any slow floating pointă'math at run time.ăA = 0ăFOR A! = 0 TO 359 / 57.29577951# STEP 1 / 57.29577951#ă    Cosine&(A) = INT(.5 + COS(A!) * 1024)ă    Sine&(A) = INT(.5 + SIN(A!) * 1024): A = A + 1ăNEXTăă'Next we read in all of the lines that are in the object...ăFOR A = 0 TO numberlines - 1ă    READ Points(A).X, Points(A).Y, Points(A).Ză    READ Points(A).X1, Points(A).Y1, Points(A).Z1ă    READ Points(A).LineColorăNEXTă'Here comes the hard part... Consider this scenario:ăă'We have two connected lines, like this:ăă'   1--------2 and 3ă'            |ă'            |ă'            |ă'            |ă'            4ă'Where 1,2, 3, & 4 are the starting and ending points of each line.ă'The first line consists of points 1 & 2  and the second lineă'is made of points 3 & 4.ă'So, you ask, what's wrong? Nothing, really, but don't you see thată'points 2 and 3 are really at the sample place? Why rotate them twice,ă'that would be a total waste of time? The following code eliminates suchă'occurrences from the line table. (great explanation, huh?)ăă'take all of the starting & ending points and put them in one bigă'array...ăNp = 0ăFOR A = 0 TO numberlines - 1ă    X(Np) = Points(A).Xă    Y(Np) = Points(A).Yă    Z(Np) = Points(A).Ză    Np = Np + 1ă    X(Np) = Points(A).X1ă    Y(Np) = Points(A).Y1ă    Z(Np) = Points(A).Z1ă    Np = Np + 1ăNEXTă'Now set up two sets of pointers that point to each point that a lineă'is made of... (in other words, scan for the first occurrence of eachă'starting and ending point in the point array we just built...)ăFOR A = 0 TO numberlines - 1ă    Xs = Points(A).Xă    Ys = Points(A).Yă    Zs = Points(A).Z            'get the 3 coordinates of the startă    FOR B = 0 TO Np - 1         'scan the point arrayă        IF X(B) = Xs AND Y(B) = Ys AND Z(B) = Zs THENă            Pointers1(A) = B    'set the pointer to point to theă            EXIT FOR            'point we have just foundă        END IFă    NEXTă    Xs = Points(A).X1           'do the same thing that we did aboveă    Ys = Points(A).Y1           'except scan for the ending pointă    Zs = Points(A).Z1           'of each lineă    FOR B = 0 TO Np - 1ă        IF X(B) = Xs AND Y(B) = Ys AND Z(B) = Zs THENă            Pointers2(A) = Bă            EXIT FORă        END IFă    NEXTăNEXTă'Okay, were almost done! All we have to do now is to build a tableă'that tells us which points to actually rotate...ăNr = 0ăFOR A = 0 TO numberlines - 1ă    F1 = Pointers1(A)   'get staring & ending point numberă    S1 = Pointers2(A)ă    IF Nr = 0 THEN      'if this is the first point then it of courseă                        'has to be rotatedă        R(Nr) = F1: Nr = Nr + 1ă    ELSEă        Found = 0       'scan to see if this point already exists...ă        FOR B = 0 TO Nr - 1ă            IF R(B) = F1 THENă                Found = -1: EXIT FOR    'shoot, it's already here!ă            END IFă        NEXTă        IF NOT Found THEN R(Nr) = F1: Nr = Nr + 1   'point the pointă                                                    'in the array it weă    END IF                                          'can't find it...ăă    Found = 0   'now look for the ending pointă    FOR B = 0 TO Nr - 1ă        IF R(B) = S1 THENă            Found = -1: EXIT FORă        END IFă    NEXTă    IF NOT Found THEN R(Nr) = S1: Nr = Nr + 1ăNEXTăPRINT "Press any key to begin..."ăA$ = INPUT$(1)ă'The following sets up the rotation & perspective variables.ăă'Vs = the screen that is currently being viewedă'Ws = the screen that is currently being worked onăVs = 1: Ws = 0ăă'Deg1 & Deg2 are the two angles of rotationă'D1 & D2 are the deltas of each axes. If D1 = -5, for instance, thenă'Deg1 will be decreased 5 degress every frame.ăDeg1 = 0: Deg2 = 0: D1 = 0: D2 = 0ăă'Spos & Mypos are for the perspective routines...ă'Spos is the screen's Z coordinate and Mypos is the users Z coordinateăSpos = -250: Mypos = 0ăă'Mx, My, and Mz are the coordinates of the user.ă'Ox, Oy, and Oz are the coordinates of the craft.ăMx = 0: my = 0: Mz = 0: Ox = 0: Oy = 0: Oz = -260ă'main loopăNumberOfFrames = 0ăDEF SEG = &H40ăStartTime = PEEK(&H6C)ăDOăă    'swap the viewing and working screens for page flipping...ă    SWAP Vs, Wsă    SCREEN 9, , Ws, Vsăă    'adjust the angles according to their deltas...ă    Deg1 = (Deg1 + D1) MOD 360ă    Deg2 = (Deg2 + D2) MOD 360ă    'fix the angles up if they go out of rangeă    IF Deg1 < 0 THEN Deg1 = Deg1 + 360ă    IF Deg2 < 0 THEN Deg2 = Deg2 + 360ă    'get the sine and cosine of each angle from the tablesă    'that were prepared at the beginning of the programă    C1& = Cosine&(Deg1): S1& = Sine&(Deg1)ă    C2& = Cosine&(Deg2): S2& = Sine&(Deg2)ăă    'now we must adjust the object's coordinatesă    'based on how quickly it is moving...ăă    X = Speed: Y = 0: Z = 0ăă    X1 = (X * C1&) \ 1024: Y1 = (X * S1&) \ 1024ă    X2 = (X1 * C2&) \ 1024: Zn = (X1 * S2&) \ 1024ă    Ox = Ox + X2: Oy = Oy + Y1: Oz = Oz + Znă    IF Oz > 32000 THEN Oz = 32000ă    IF Oz < -32000 THEN Oz = -32000ă    IF Ox > 32000 THEN Ox = 32000ă    IF Ox < -32000 THEN Ox = -32000ă    IF Oy > 32000 THEN Oy = 32000ă    IF Oy < -32000 THEN Oy = -32000ăă    'if Atloc is true then Auto-Center is on...ă    IF AtLoc THENă        Mx = Mx + (Ox - Mx) \ 4ă        my = my + (Oy - my) \ 4ă        Mz = Mz + ((Oz + 200) - Mz) \ 4ă    ELSEă        'adjust the users position based on how much he is moving...ă        Mz = Mz + Mzm: Mx = Mx + Mxm: my = my + Mymă        IF Mz > 32000 THEN Mz = 32000ă        IF Mz < -32000 THEN Mz = -32000ă        IF Mx > 32000 THEN Mx = 32000ă        IF Mx < -32000 THEN Mx = -32000ă        IF my > 32000 THEN my = 32000ă        IF my < -32000 THEN my = -32000ă    END IFă    '(Wait for vertical retrace, reduces flicker. This was recommendedă    'by someone on the echo but I can't remember who! Thanks)ă    WAIT &H3DA, 8ă    'erase the old lines...ă    IF Ws = 1 THENă        FOR A = 0 TO Ln(Ws) - 1ă            LINE (Xs1(A), Ys1(A))-(Xe1(A), Ye1(A)), 0ă        NEXTă    ELSEă        FOR A = 0 TO Ln(Ws) - 1ă            LINE (Xs(A), Ys(A))-(Xe(A), Ye(A)), 0ă        NEXTă    END IFă    'print frames per secondă    LOCATE 1, 1: PRINT A$ă    'rotate the points...ă    FOR A = 0 TO Nr - 1ă        R = R(A): Xo = X(R): Yo = Y(R): Zo = Z(R)ă        X1 = (Xo * C1& - Yo * S1&) \ 1024ă        Y1& = (Xo * S1& + Yo * C1&) \ 1024 - my + Oyă        X1& = (X1 * C2& - Zo * S2&) \ 1024 - Mx + Oxă        Zn = (X1 * S2& + Zo * C2&) \ 1024 - Mz + Oză        'if the point is too close(or behind) the viewer thenă        'don't draw it...ă        IF (Mypos - Zn) < 15 THENă            Xn(R) = -1: Yn(R) = 0: Zn = 0ă        ELSEă            'Put the point into perspective...ă            'The original formula was:ă            'Xnew=Xnew+( -Xold * ( (Spos-Z) / (MPos-Z) ) )ă            'Ynew=Ynew=( -Yold * ( (Spos-Z) / (Mpos-Z) ) )ă            V = (1330& * (Spos - Zn)) \ (Mypos - Zn)ă            Xn(R) = 320 + X1& + (-X1& * V) \ 1330ăă            'The Y coordinate is also multiplied by .8 to adjustă            'for SCREEN 9's height to width ratio...ăă            Yn(R) = 175 + (8 * (Y1& + (-Y1& * V) \ 1330)) \ 10ă        END IFă    NEXTă    'draw the lines...ă    '(There are two seperate cases, each puts it's coordinatesă    'in a different array for later erasing. I could of used aă    '2 dimensional array for this but that is slower.)ă    IF Ws = 1 THENă        Ln = 0ă        FOR A = 0 TO numberlines - 1ă            F1 = Pointers1(A): S1 = Pointers2(A)ă            Xn = Xn(F1): Yn = Yn(F1)ă            'if Xn<>-1 then it's in view...ă            IF Xn <> -1 THENă                IF Xn(S1) <> -1 THENă                    X1 = Xn(S1): Y1 = Yn(S1)ă                    LINE (X1, Y1)-(Xn, Yn), Points(A).LineColoră                    'store the lines so they can be erased later...ă                    Xs1(Ln) = X1: Ys1(Ln) = Y1ă                    Xe1(Ln) = Xn: Ye1(Ln) = Ynă                    Ln = Ln + 1ă                END IFă            END IFă        NEXTă    ELSEă        Ln = 0ă        FOR A = 0 TO numberlines - 1ă            F1 = Pointers1(A): S1 = Pointers2(A)ă            Xn = Xn(F1): Yn = Yn(F1)ă            'if Xn<>-1 then it's in view...ă            IF Xn <> -1 THENă                IF Xn(S1) <> -1 THENă                    X1 = Xn(S1): Y1 = Yn(S1)ă                    LINE (X1, Y1)-(Xn, Yn), Points(A).LineColoră                    'store the lines so they can be erased later...ă                    Xs(Ln) = X1: Ys(Ln) = Y1ă                    Xe(Ln) = Xn: Ye(Ln) = Ynă                    Ln = Ln + 1ă                END IFă            END IFă        NEXTă    END IFă    Ln(Ws) = Lnă    K$ = UCASE$(INKEY$)ă    'Process the keystroke(if any)...ă    IF K$ <> "" THENă        SELECT CASE K$ă            CASE "A"ă                AtLoc = NOT AtLocă            CASE "+"ă                Mzm = Mzm + 2ă            CASE "-"ă                Mzm = Mzm - 2ă            CASE "5"ă                Mxm = 0: Mym = 0: Mzm = 0ă            CASE "4"ă                Mxm = Mxm - 2ă            CASE "6"ă                Mxm = Mxm + 2ă            CASE "8"ă                Mym = Mym - 2ă            CASE "2"ă                Mym = Mym + 2ă            CASE "F"ă                Speed = Speed + 5ă            CASE "B"ă                Speed = Speed - 5ă            CASE "C"ă                D1 = 0: D2 = 0ă            CASE "S"ă                Speed = 0ă            CASE CHR$(0) + CHR$(72)ă                D1 = D1 + 1ă            CASE CHR$(0) + CHR$(80)ă                D1 = D1 - 1ă            CASE CHR$(0) + CHR$(75)ă                D2 = D2 - 1ă            CASE CHR$(0) + CHR$(77)ă                D2 = D2 + 1ă            CASE "Q"ă                SCREEN 0, , 0, 0: CLS : PRINT "See ya later!"ă                ENDă            CASE "V"ă                D1 = 0: D2 = 0: Deg1 = 0: Deg2 = 0: Speed = 0ă        END SELECTă    END IFă    NumberOfFrames = NumberOfFrames + 1ă    'see if 20 frames have passed; if so then seeă    'how long it took...ă    IF NumberOfFrames = 20 THENă        TotalTime = PEEK(&H6C) - StartTimeă        IF TotalTime < 0 THEN TotalTime = TotalTime + 256ă        FramesPerSecX100 = 36400 \ TotalTimeă        High = FramesPerSecX100 \ 100ă        Low = FramesPerSecX100 - Highă        'A$ has the string that is printed at the upper leftă        'corner of the screenă        A$ = MID$(STR$(High), 2) + "."ă        A$ = A$ + RIGHT$("0" + MID$(STR$(Low), 2), 2) + "  "ă        NumberOfFrames = 0ă        StartTime = PEEK(&H6C)ă    END IFăăLOOPăă'This defines the number of lines...ăDATA 45ă'The following data is the shuttle craft...ă'stored as Start X,Y,Z, End X,Y,Z, Line colorăă'  Note: I have added a little description to each section of theă'   line data to make it easier to experiment around with the colors..ă'  Don't ask how long this took me... <G>ăă' topăDATA -157,22,39,-157,-18,39,7ăDATA -157,-18,39,-127,-38,39,7ăDATA -127,-38,39,113,-38,39,7ăDATA 113,-38,39,193,12,39,7ă' bottomăDATA 33,42,39,33,42,-56,8ăDATA 33,42,-56,-127,42,-56,8ăDATA -127,42,-56,-157,22,-56,8ăDATA -157,22,-56,-157,22,39,8ă' topăDATA -157,22,-56,-157,-18,-56,7ăDATA -157,-18,-56,-157,-18,39,7ăDATA -157,-18,-56,-127,-38,-56,7ăDATA -127,-38,-56,-127,-38,39,7ăDATA -127,-38,-56,113,-38,-56,7ăDATA 113,-38,-56,113,-38,39,7ăDATA 113,-38,-56,193,12,-56,7ă' bottomăDATA 193,12,-56,193,12,39,8ăDATA -157,22,-56,193,12,-56,8ăDATA 193,12,39,-157,22,39,8ă' writingăDATA -56,-13,41,-56,-3,41,12ăDATA -56,-3,41,-26,-3,41,13ăDATA -26,-3,41,-26,7,41,4ăDATA -51,7,41,-31,-13,41,5ăDATA -11,-13,41,-11,-3,41,5ăDATA -11,-3,41,-1,7,41,4ăDATA 9,7,41,9,-8,41,13ăDATA 9,-8,41,24,-8,41,12ă' topăDATA 34,16,41,34,-38,41,7ăDATA 33,-39,41,33,-39,-53,7ăDATA 33,-39,-53,33,15,-53,7ă' hatchăDATA -42,-38,19,-72,-38,19,4ăDATA -72,-38,19,-72,-38,-41,4ăDATA -72,-38,-41,-42,-38,-41,4ăDATA -42,-38,-41,-42,-38,19,4ă' bottomăDATA 33,42,39,34,16,41,8    ăDATA 33,42,-56,33,15,-53,8  ăDATA -157,22,39,-127,42,39,8ăDATA -127,42,-56,-127,42,39,8ăDATA -127,42,39,33,42,39,8 ă' windowăDATA 159,-8,-56,159,-8,40,9 ăDATA 143,-18,-56,143,-18,39,9ă' bottomăDATA 193,12,39,193,32,30,8  ăDATA 33,42,39,193,32,30,8   ăDATA 193,32,30,193,32,-47,8 ăDATA 33,42,-56,193,32,-47,8 ăDATA 193,12,-56,193,32,-47,8ăăJonathan Leger                 PB MODEX ROUTINES              leger@pc2.pc.maricopa.edu      Unknown Date           PB                     328  9144     PBMODEX.BAS '*********************************ă'*** PowerBasic Mode-X Routines **ă'*****************************************************ă'All routines (except SavePal, LoadPal, and ScrollPal)ă'converted by Jonathan Leger from the VGA Traineră'TurboPascal 6.0 code.ă'*******************************************************ă'If something doesn't work, or if you have any questionsă'or comments about any of these routines (especially ifă'you have written some additions to it!!!) _please_ letă'me know.  I read the comp.lang.basic.misc newsgroupă'often, or you can e-mail me at leger@pc2.pc.maricopa.eduă'********************************************************ăăDeclare Sub SetMCGA()       ă				'move to 320x200x256c modeăDeclare Sub SetText()       ă				'go back to 80x25 text modeăDeclare Sub ClsMCGA(colr%)  ă				'clear the screen with color colr%ăDeclare Sub SetPixel(x%, y%, colr%)ă				'same as PSETăDeclare Sub GetPal(colr%, r%, g%, b%)ă				'return the RGB coloră				'values for color colr%ă				'into variables r%, g%, & b%ăDeclare Sub SetPal(colr%, r%, g%, b%)ă				'set the RGB values for colr%ăDeclare Sub Blackout()      ă				'Set all palette entries to RGB 000ăDeclare Sub SavePal(pal())  ă				'Save the palette into an array ofă				'p(255, 3) dimensionsăDeclare Sub LoadPal(pal())  ă				'Load the palette to be used fromă				'pal()ăDeclare Sub FadeIn(pal())   ă				'Fade from current palette into newă				'palette.  To fade from black intoă				'a palette, use SavePal(), thenă				'Blackout(), then FadeIn()ăDeclare Sub FadeOut(pal())  ă				'Fade from current palette down toă				'black.ăDeclare Sub WaitForRetrace()    ă				'Waits for verticle retrace to removeă				'flicker/fuzz from display.  To seeă				'the effects of this, try taking oută				'WaitForRetrace() in the example program.ăDeclare Sub CircleMCGA (x%, y%, r%, colr%)ă				'draw a circle at x%, y%ă				'with radius r% and color colr%ăDeclare Sub LineMCGA (x1%, y1%, x2%, y2%, colr%)ă				'draw a line from (x1,y1) to (x2,y2)ă				'with color colr%ăDeclare Sub ScrollPal (p(), stp, startp, endp)ă				'rotate the palette over STP entriesă				'starting with entry startp and endingă				'with entry endp.  See main programă				'for an example of how to use this.ăă$CPU 80386      'For extra speed.  You can change this ifă			'you don't have a 386+ăăDEFINT A-ZăăăDIM p(255, 3)       'Make some space for the paletteăăSetMCGAăSavePal p()ăăcolr = 1ăfor r = 1 to 150ă   CircleMCGA 160, 100, r, rănext răFlipScreenăendăădoă  ScrollPal p(), 1, 1, 255ă  WaitForRetraceă  LoadPal p()ăloop until inkey$ <> ""ăendăăDEFINT a-zăsub SetMCGA ()ă'---------------------------------------------ă'--- Go into MCGA (320x200x256) Video Mode ---ă'---------------------------------------------ă! mov   ax, &h13        ;13h Video Mode (320x200x256)ă! int   &h10            ;Bang! We're there.ăend subăăDEFINT a-zăsub SetText ()ă'-------------------------ă'--- Go into text mode ---ă'-------------------------ă! mov   ax, &h03        ;03h Video Mode (text)ă! int   &h10            ;Bang! We're there.ăend subăăDEFINT a-zăsub ClsMCGA (colr%)ă'------------------------------------------ă'--- Clear the screen using color COLR% ---ă'------------------------------------------ă   Clrs$ = STRING$(32000, colr%)ă   def seg = ActivePage%    'MCGA page mem locationă   POKE$ 0, Clrs$       'Fill half of screen (160*100 = 32000 bytes)ă   POKE$ 32000, Clrs$       'Fill second half of screenă   def seg          'with the specified color.ăend subăăDEFINT a-zăsub SetPixel (x%, y%, colr%)ă'------------------------------------------------ă'--- Set a pixel on the screen (the fast way) ---ă'--- (x% = x-co, y% = y-co, colr% = color [0- ---ă'--- 255])                    ---ă'------------------------------------------------ă   def seg = ActivePage%    'MCGA page mem locationă   POKE (x%+(y%*320)), colr%    'Set the pixel to colr%ă   def segăend subăăDEFINT a-zăsub GetPal (colr%, r%, g%, b%)ă'------------------------------------------------ă'--- Reads the red/green/blue values for the  ---ă'--- specified color (colr%) and returns them ---ă'------------------------------------------------ăOUT &h3c7, colr%ăr% = INP(&h3c9)ăg% = INP(&h3c9)ăb% = INP(&h3c9)ăend subăăDEFINT a-zăsub SetPal(colr%, r%, g%, b%)ă'---------------------------------------------------------ă'--- Assign the RGB values for a pallete entry (colr%) ---ă'---------------------------------------------------------ăOUT &h3c8, colr%ăOUT &h3c9, r%ăOUT &h3c9, g%ăOUT &h3c9, b%ăend subăăDEFINT a-zăsub Blackout()ă'-----------------------------------------------------------------ă'--- Blacks out the screen by setting all palette entries to 0 ---ă'-----------------------------------------------------------------ăfor p = 0 to 255ă   SetPal p, 0, 0, 0    'Set each entry to red=0, green=0, blue=0ănext păend subăăDEFINT a-zăsub SavePal(p())ă'----------------------------------------------ă'--- Stores the palette entries to an array ---ă'----------------------------------------------ăfor p = 0 to 255ă   GetPal p, p(p,1), p(p,2), p(p,3)     'Save each entryănext păend subăăDEFINT a-zăsub LoadPal(p())ă'-------------------------------------------------------ă'--- Loads the palette with entires in the array P() ---ă'-------------------------------------------------------ăfor p = 0 to 255ă   SetPal p, p(p,1), p(p,2), p(p,3)     'Change each entryănext păend subăăDEFINT a-zăsub FadeIn(p())ă'------------------------------ă'--- Fade in to palette P() ---ă'------------------------------ădim tmp(3)ăăfor p = 1 to 64     'A color value for R/G/B is 0 to 63, so we onlyă			'need to loop 64 timesăă   WaitForRetrace   'Keep the program synched with the monitorăă   for e = 0 to 255 'Loop once for each palette entryă	   GetPal e, tmp(1), tmp(2), tmp(3)ăă	   'If the current R/G/B values are lower than they should be,ă	   'increase them!ă	   if tmp(1) < p(e, 1) then incr tmp(1)ă	   if tmp(2) < p(e, 2) then incr tmp(2)ă	   if tmp(3) < p(e, 3) then incr tmp(3)ăă	   'Set the palette to reflect the changesă	   SetPal e, tmp(1), tmp(2), tmp(3)ăă   next eănext păend subăăDEFINT a-zăsub FadeOut ()ă'-------------------------ă'--- Fade out to black ---ă'-------------------------ădim tmp(3)ăăfor p = 1 to 64     'A color value for R/G/B is 0 to 63, so we onlyă			'need to loop 64 timesăă   WaitForRetrace   'Keep the program synched with the monitorăă   for e = 0 to 255 'Loop once for each palette entryă	   GetPal e, tmp(1), tmp(2), tmp(3)ăă	   'If the current R/G/B values are greater than zero,ă	   'decrease them!ă	   if tmp(1) > 0 then decr tmp(1)ă	   if tmp(2) > 0 then decr tmp(2)ă	   if tmp(3) > 0 then decr tmp(3)ăă	   'Set the palette to reflect the changesă	   SetPal e, tmp(1), tmp(2), tmp(3)ăă   next eănext păend subăăDEFINT a-zăsub WaitForRetrace()ă'----------------------------------------------------------------------ă'--- Wait for verticle retrace before continuing, that way when the ---ă'--- screen is changed, no fuzz or flicker occurs.          ---ă'----------------------------------------------------------------------ă!    mov dx,&h3daăl1:ă!    in al,dxă!    and al,&h08ă!    jnz l1ăl2:ă!    in al,dxă!    and al,&h08ă!    jz  l2ăend subăăDEFINT a-zăsub CircleMCGA (x%, y%, r%, colr%)ă'-------------------------------------------------------------ă'--- Draw a circle at (x%, y%) with radius r%, color colr% ---ă'-------------------------------------------------------------ădoă   tx = cint(r%*cos(rad!))ă   ty = cint(r%*sin(rad!))ă   SetPixel x%+tx, y%+ty, colr%ă   rad! = rad! + .006ăloop until rad! > 6.4ăend subăădefint a-zăsub LineMCGA (x1%, y1%, x2%, y2%, colr%)ă'----------------------------------------------------------------ă'--- Draw a line from (x1%, y1%) to (x2%, y2%) in color colr% ---ă'----------------------------------------------------------------ău% = x2% - x1%ăv% = y2% - y1%ăd1x = sgn(u%)ăd1y = sgn(v%)ăd2x = sgn(u%)ăd2y = 0ăm = abs(u%)ăn = abs(v%)ăăif not(m > n) thenă   d2x = 0ă   d2y = sgn(v%)ă   m = abs(v%)ă   n = abs(u%)ăend ifăăs = m / 2ăăfor i = 0 to mă   SetPixel a, b, colr%ă   s = s + nă   if not(s < m) thenă	  s = s - mă	  a = a + d1xă	  b = b + d1yă   elseă	  a = a + d2xă	  b = b + d2yă   end ifănext iăend subăădefint a-zăsub ScrollPal (p(), stp, startp, endp)ă'-------------------------------------------------------------------ă'--- Scroll the palette up one color so that pal(1) = pal(255),  ---ă'--- pal(2) = pal(1), pal(3) = pal(2) ... pal(255) = pal(254)    ---ă'-------------------------------------------------------------------ăincr endpăăfor cnt = startp to startp+(stp-1)ă   for rgb = 1 to 3ă	  swap p(cnt, rgb), p((endp+cnt)-stp, rgb)ă   next rgbănext cntăăfor p = startp+stp to endpă   'Switch all 3 values: red, green, and blueă   for rgb = 1 to 3ă	  swap p(p, rgb), p(p-stp, rgb)ă   next rgbănext păă'LoadPal(p())   'Make the changes take effectăăend subăUnknown Author(s)              BACKGROUND COLOR PRINTING      PC Magazine                    Unknown Date           QB, PDS                28   1515     COLPRNT.BAS 'I put this together from a short article in PC-Mag: by using theă'ColorPrint subroutine, I can display text against various colouredă'backgrounds in screen modes 9 and 12.  It does NOT work in screen modeă'1.  In the CALL below, the CSRLIN and POS(0) are the location at whichă'you want to print, and the 14 and 5 are the foreground and backgroundă'colours.  NOTE: I have this coded for PDS 7.1; in QB4.5, replace SSEG byă'VARSEG.ăăCALL ColorPrint(" Status Bar ", CSRLIN, POS(0), 14, 5)ăăSUB ColorPrint (TEXT$, ROW%, COL%, FC%, BC%) STATICăREM Prints TEXT$ in EGA or VGA graphics mode with both Foreground andă' Background colours specified.  Doesn't work in graphics CGA modes.ă' Achieves result by XORing text with a solid string of CHR$(219).ă  DIM INReg AS REGTypeX, OUTReg AS REGTypeXă  C$ = STRING$(LEN(TEXT$), 219)       ' String of solid chars for backgrndă  INReg.AX = &H1300             ' Video service 13h, subfunction 0ă  INReg.BX = BC%                ' Background coloură  INReg.CX = LEN(TEXT$)         ' String lengthă  INReg.DX = 256 * (ROW% - 1) + (COL% - 1)      ' Text pos. in "origin 0"ă  INReg.ES = SSEG(C$)           ' String's segmentă  INReg.BP = SADD(C$)           ' String's addressă  CALL InterruptX(&H10, INReg, OUTReg)     ' Output the backgroundă  INReg.BX = (FC% XOR BC%) + &H80   ' BL=ForeColor; BH=&H80 uses XOR to drawă  INReg.ES = SSEG(TEXT$)ă  INReg.BP = SADD(TEXT$)ă  CALL InterruptX(&H10, INReg, OUTReg) ' Output the text, XORing w/backgrndăEND SUBăThe ABC Programmer             STORE COLOR PALETTES           STORE,COLOR,PALETTES           11-16-95 (13:27)       QB, QBasic, PDS        114  3053     STOREPAL.BAS'=======================================================ă' STORE COLOR PALETTES IN ARRAYS By William Yu (11/1995)ă'   Demonstrates the use of Palletes in Screen 13ă'=======================================================ăăDECLARE SUB ChangePal (Colour(), Reverse, Start)ăăDIM Blue(16), Red(16), Green(16)ăDIM White(16)ăDIM Yellow(16)ăDIM Purple(16)ăDIM Cyan(16)ăDIM Orange(16)ăDIM Pink(16)ăăFalse = 0ăTrue = NOT FalseăăSCREEN 13ăN = 1ăFOR X = 1 TO 48 STEP 3ă  Blue(N) = 65536 * (X + 5) + 256ă  Red(N) = 65536 + 256 + (X + 5)ă  Green(N) = 65536 + 256 * (X + 5)ă  White(N) = 65536 * (X + 12) + 256 * (X + 12) + (X + 12)ă  Yellow(N) = 65536 + 256 * (X + 15) + (X + 15)ă  Purple(N) = 65536 * (X + 15) + 256 + (X + 15)ă  Cyan(N) = 65536 * (X + 15) + 256 * (X + 15)ă  Orange(N) = 65536 + 256 * (X + 1) + (X + 17)ă  IF X < 28 THENă    Pink(N) = 65536 * (X + 10) + 256 * (X + .1) + (X + 10)ă  ELSEă    Pink(N) = Pink(N - 8)ă  END IFă  PALETTE N, Blue(N)ă  PALETTE N + 16, Red(N)ă  PALETTE N + 32, Green(N)ă  PALETTE N + 48, White(N)ă  PALETTE N + 64, Yellow(N)ă  PALETTE N + 80, Purple(N)ă  PALETTE N + 96, Cyan(N)ă  PALETTE N + 112, Orange(N)ă  PALETTE N + 128, Pink(N)ă  LOCATE 1, N: COLOR N: PRINT "Ű"ă  LOCATE 2, N: COLOR N + 16: PRINT "Ű"ă  LOCATE 3, N: COLOR N + 32: PRINT "Ű"ă  LOCATE 4, N: COLOR N + 48: PRINT "Ű"ă  LOCATE 5, N: COLOR N + 64: PRINT "Ű"ă  LOCATE 6, N: COLOR N + 80: PRINT "Ű"ă  LOCATE 7, N: COLOR N + 96: PRINT "Ű"ă  LOCATE 8, N: COLOR N + 112: PRINT "Ű"ă  LOCATE 9, N: COLOR N + 128: PRINT "Ű"ă  N = N + 1ăNEXT XăăLOCATE 11, 1: PRINT "Watch while I switch the all the"ăPRINT "palettes to green with CHANGEPAL"ăăX = 1ăFOR I = 1 TO 9ă  ChangePal Green(), False, Xă  X = X + 16ăNEXT IăăCOLOR 47: PRINT "Now let's go backwards!"ăăX = 129ăFOR I = 1 TO 9ă  ChangePal Orange(), True, Xă  X = X - 16ăNEXT IăăCOLOR 63: PRINT "Watch while I reverse the process."ăăFOR N = 1 TO 16ă  PALETTE N, Blue(N)ă  PALETTE N + 16, Red(N)ă  PALETTE N + 32, Green(N)ă  PALETTE N + 48, White(N)ă  PALETTE N + 64, Yellow(N)ă  PALETTE N + 80, Purple(N)ă  PALETTE N + 96, Cyan(N)ă  PALETTE N + 112, Orange(N)ă  PALETTE N + 128, Pink(N)ăNEXT NăăLOCATE 17: COLOR 95: PRINT "Play around with the palettes, have fun!"ăăENDăă'ă' Colour() can be any one of the defined array colour typesă' Reverse  can either be TRUE or FALSEă'          if True, the palette changes from high intensity to lowă'          if False, the palette changes from low to high intensityă' Start    can be any integer from which you wish to define the palettedă'          color to (Remember that an array has 16 paletted colors)ă'          So if you start from 1 it'll stop at 16ă'          The next starting point would be 17 and so on...ă'ăSUB ChangePal (Colour(), Reverse, Start)ăăIF Reverse THENă  FOR I = Start + 15 TO Start STEP -1ă    PALETTE I, Colour(I - Start + 1)ă  NEXT IăELSEă  FOR I = Start TO Start + 15ă    PALETTE I, Colour(I - Start + 1)ă  NEXT IăEND IFăăEND SUBăăCoridon Henshaw                FAST PALETTE                   FidoNet QUIK_BAS Echo          12-22-92 (12:50)       QB, QBasic, PDS        31   892      FASTPAL.BAS ' > SUB VGAPal (Attr%, Red%, Green%, Blue%)ă' >   PALETTE Attr%, (Red%) + (Green% * 256) + (Blue% * 65536)ă' > END SUBăă'Ugh, that's SLOW.  PALETTE takes forever, not to mention all thată'integer math...  Use this:ăăDECLARE SUB ReadPalette (Attr%, Red%, Green%, Blue%)ăDECLARE SUB SetPalette (Attr%, Red%, Green%, Blue%)ăăDEFINT A-ZăăSUB ReadPalette (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Att%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB SetPalette (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăă'ReadPalette is for reading the color values of a attribute, andă'SetPalette sets them.  All using direct access to the VGA controller,ă'so they are very fast. If I wanted to, I could re-code them in ASM foră'more speed, but I don't quite need them THAT fast ;)ăMichael Teator                 QSTAR                          mhscards@aol.com               11-06-94 (12:11)       QB, QBasic, PDS        438  18763    QSTAR.BAS   ' Press SHIFT-F5 to startă'ă'ă' Sorry that most of this code is cryptc or messy.  Most of it was writtenă' as 2:00 in the morning.  Most of this was actually written back in may ofă' 94,  I'm just now getting around to releasing it.  There's not musch foră' internal comments in this thing, its not very elegant code anyway.  I don'tă' really suggest for anyone to learn by looking at this.  If you want to seeă' some very well written code to learn from, look for some of my other creationsă' like:   QPlasma - 256 color plasma generator: Has very well written code,ă'                   I commented the heck out of it.  Get this if you want toă'                   see some really nice pallete manipulation.ă'         StarField - Simple 3-D starfield - Good for startersă'ă' coming soon : QTris - 256 color tetris with raytraced (wow!) backgrounds.ă'                       NEVER before has a QBasic game accomplished whată'                       QTris willă'               QDraw - 256 color drawing program, uses my new file formată'                       that I'll introduce with QTris.  Also can load GIF'să'                       and QPlasma style palette files.  Mouse support too!ă'ă' If any of you want to see my Path Generator that I used for the 3-D tunnel,ă' write me at Skream@aol.com and I'll upload it.ăăDEFINT A-ZăăDECLARE FUNCTION ComputerType ()ăDECLARE SUB Fade (ty, tx, text$)ăăDEF FNMove (xp%, yp%, xr%, yr%, n%, vstop%)ă     ul = yr: ll = xr: bl = vstop - yr: rl = 319 - xră     SELECT CASE nă     CASE 1ă          IF yp > ul THEN IF xp > ll THEN FNMove = 1 ELSE FNMove = 2 ELSE IF xp > ll THEN FNMove = 4 ELSE FNMove = 3ă     CASE 2ă          IF yp > ul THEN IF xp < rl THEN FNMove = 2 ELSE FNMove = 1 ELSE IF xp < rl THEN FNMove = 3 ELSE FNMove = 4ă     CASE 3ă          IF yp < bl THEN IF xp < rl THEN FNMove = 3 ELSE FNMove = 4 ELSE IF xp < rl THEN FNMove = 2 ELSE FNMove = 1ă     CASE 4ă          IF yp < bl THEN IF xp > ll THEN FNMove = 4 ELSE FNMove = 3 ELSE IF xp > ll THEN FNMove = 1 ELSE FNMove = 2ă     END SELECTăEND DEFăăOPTION BASE 1ăRANDOMIZE TIMERăDIM SHARED ScrollDelayăăScrollDelay = ComputerTypeăăSCREEN 7, , 0ăFade 9, 17, "QStar!"ăFade 10, 12, "by Michael Teator"ăFade 12, 7, "Please wait... initializing."ăăStars = 100ăNumBoxes = 4ăDist = 5ăLineClr = 9ăDelayClr = LineClr - 8ăGrid3DClr = 5ăCounter = 1ăNumDelayVectors = 8ăNumCircles = 20ăăDIM ReflTxt#(124)ăDIM BoxXradius(NumBoxes), BoxYradius(NumBoxes), BoxX(NumBoxes), BoxY(NumBoxes), BoxDir(NumBoxes), BoxClr(NumBoxes)ăDIM StarX(Stars), StarY(Stars), StarSpeed(Stars), StarClr(Stars)ăDIM LineX(2), LineY(2), LineDir(2), DelayVector(4 * NumDelayVectors)ăDIM Colors(4)ăDIM ForeCircles(3 * NumCircles), CircleR(NumCircles * 3 + 1)ăăRESTORE TubeDataăREAD NumFramesăDIM CircleX(NumFrames), CircleY(NumFrames), CircleC(NumFrames)ăFOR num = 1 TO NumFramesă     READ CircleX(num), CircleY(num)ăNEXTăăFOR num = 1 TO NumFramesă     clr = INT(RND * 2) + 1ă     IF clr = 1 THEN CircleC(num) = 9 ELSE CircleC(num) = 1ăNEXTăăCircleR(1) = 40ăăFOR num = 1 TO NumCircles * 3 STEP 3ă     CircleR(num + 1) = num ^ (3 / 2) / 2 + CircleR(1)ăNEXTăăRESTORE ColorsăFOR num = 1 TO 4ăREAD Colors(num)ăNEXTăăPickClr = 1ăBoxCount = 1ăDOă     BoxClr(BoxCount) = Colors(PickClr)ă     IF PickClr < 4 THEN PickClr = PickClr + 1 ELSE PickClr = 1ă     BoxCount = BoxCount + 1ăLOOP UNTIL BoxCount > NumBoxesăăLineX(1) = 62ăLineY(1) = 53ăLineX(2) = 120ăLineY(2) = 198ăLineDir(1) = 1ăLineDir(2) = 2ăăFOR num = 1 TO Starsă     StarPlane = INT(RND * 4) + 1ă     SELECT CASE StarPlaneă          CASE 1ă               StarSpeed(num) = 8ă               StarClr(num) = 15ă               StarX(num) = INT(RND * 319)ă               StarY(num) = INT(RND * 199)ă          CASE 2ă               StarSpeed(num) = 5ă               StarClr(num) = 7ă               StarX(num) = INT(RND * 319)ă               StarY(num) = INT(RND * 181)ă          CASE 3ă               StarSpeed(num) = 3ă               StarClr(num) = 7ă               StarX(num) = INT(RND * 319)ă               StarY(num) = INT(RND * 163)ă          CASE 4ă               StarSpeed(num) = 1ă               StarClr(num) = 8ă               StarX(num) = INT(RND * 319)ă               StarY(num) = INT(RND * 144)ă     END SELECTăNEXTăăFOR num = 1 TO NumBoxesă     BoxXradius(num) = INT(RND * 20) + 1ă     BoxYradius(num) = INT(RND * 20) + 1ă     BoxX(num) = INT(RND * (319 - BoxXradius(num) * 2)) + BoxXradius(num)ă     BoxY(num) = INT(RND * (158 + num * 4 - BoxYradius(num) * 2)) + BoxYradius(num)ă     BoxDir(num) = INT(RND * 4) + 1ăNEXTăăRESTORE ScrollerăDOă     READ ScrollTxt$ă     Scroller$ = Scroller$ + ScrollTxt$ăLOOP UNTIL ScrollTxt$ = ""ăScroller$ = SPACE$(30) + Scroller$ăTxtLength = LEN(Scroller$) + 1ăăFOR Frames = 2 TO 6ă     SCREEN , , Frames, 0ă     SELECT CASE Framesă          CASE 2: RESTORE Grid3DFrame2ă          CASE 3: RESTORE Grid3DFrame3ă          CASE 4: RESTORE Grid3DFrame4ă          CASE 5: RESTORE Grid3DFrame5ă          CASE 6: RESTORE Grid3DFrame6ă     END SELECTă     FOR Grid3DLine = 1 TO 8ă          READ x1!, y1!, x2!, y2!ă          LINE (x1!, y1!)-(x2!, y2!), Grid3DClră     NEXTă     RESTORE Grid3DCommonsă     FOR Grid3DLine = 1 TO 15ă          READ x1, y1, x2, y2ă          LINE (x1, y1)-(x2, y2), Grid3DClră     NEXTăNEXTăăSCREEN , , 1, 0ăRESTORE Grid3DFrame1ăFOR Grid3DLine = 1 TO 6ă     READ x1, y1, x2, y2ă     LINE (x1, y1)-(x2, y2), Grid3DClră     PCOPY 1, 0ăNEXTăRESTORE Grid3DCommonsăFOR Grid3DLine = 1 TO 15ă     READ x1, y1, x2, y2ă     LINE (x1, y1)-(x2, y2), Grid3DClră     PCOPY 1, 0ăNEXTăăSCREEN , , 0ăLOCATE 12, 18: COLOR 10: PRINT "READY!"ăSLEEP 1ăăDOă     SCREEN , , 7, 0ă     PCOPY 1, 7ă     IF Counter < TxtLength THENă          LOCATE 18, 5: COLOR 4: PRINT MID$(Scroller$, Counter, 30)ă          TopLine = 136ă          BotRefl = 151ă          DOă               GET (32, TopLine)-(270, TopLine), ReflTxt#ă               PUT (32, BotRefl), ReflTxt#, XORă               TopLine = TopLine + 1ă               BotRefl = BotRefl - 1ă          LOOP UNTIL TopLine = 143ă          IF counter2 = ScrollDelay THEN counter2 = 0:  Counter = Counter + 1 ELSE counter2 = counter2 + 1ă     ELSEă          GOTO Part2ă     END IFă     FOR NumStars = 1 TO Starsă          StarX(NumStars) = StarX(NumStars) - StarSpeed(NumStars)ă          IF StarX(NumStars) < 0 THENă               StarX(NumStars) = 319ă               SELECT CASE StarSpeed(NumStars)ă                    CASE 8ă                         StarY(NumStars) = INT(RND * 199)ă                    CASE 5ă                         StarY(NumStars) = INT(RND * 181)ă                    CASE 3ă                         StarY(NumStars) = INT(RND * 163)ă                    CASE 1ă                         StarY(NumStars) = INT(RND * 144)ă               END SELECTă          END IFă          PSET (StarX(NumStars), StarY(NumStars)), StarClr(NumStars)ă     NEXTă     FOR num = 1 TO NumBoxesă          LINE (BoxX(num) - BoxXradius(num), BoxY(num) - BoxYradius(num))-(BoxX(num) + BoxXradius(num), BoxY(num) + BoxYradius(num)), BoxClr(num), Bă          BoxDir(num) = FNMove(BoxX(num), BoxY(num), BoxXradius(num), BoxYradius(num), BoxDir(num), 158 + num * 4)ă          SELECT CASE BoxDir(num)ă               CASE 4: BoxY(num) = BoxY(num) + 1: BoxX(num) = BoxX(num) - 1ă               CASE 1: BoxY(num) = BoxY(num) - 1: BoxX(num) = BoxX(num) - 1ă               CASE 3: BoxY(num) = BoxY(num) + 1: BoxX(num) = BoxX(num) + 1ă               CASE 2: BoxY(num) = BoxY(num) - 1: BoxX(num) = BoxX(num) + 1ă          END SELECTă     NEXTă     FOR Delays = 1 TO NumDelayVectors * 4 STEP 4ă          LINE (DelayVector(Delays), DelayVector(Delays + 1))-(DelayVector(Delays + 2), DelayVector(Delays + 3)), DelayClră     NEXTă     FOR num = 1 TO 2ă          LineDir(num) = FNMove(LineX(num), LineY(num), 0, 0, LineDir(num), 199)ă          SELECT CASE LineDir(num)ă               CASE 4: LineY(num) = LineY(num) + Dist: LineX(num) = LineX(num) - Distă               CASE 1: LineY(num) = LineY(num) - Dist: LineX(num) = LineX(num) - Distă               CASE 3: LineY(num) = LineY(num) + Dist: LineX(num) = LineX(num) + Distă               CASE 2: LineY(num) = LineY(num) - Dist: LineX(num) = LineX(num) + Distă          END SELECTă     NEXTă     LINE (LineX(1), LineY(1))-(LineX(2), LineY(2)), LineClră     FOR Shift = NumDelayVectors * 4 TO 8 STEP -4ă          DelayVector(Shift) = DelayVector(Shift - 4)ă          DelayVector(Shift - 1) = DelayVector(Shift - 5)ă          DelayVector(Shift - 2) = DelayVector(Shift - 6)ă          DelayVector(Shift - 3) = DelayVector(Shift - 7)ă     NEXTă     DelayVector(1) = LineX(1)ă     DelayVector(2) = LineY(1)ă     DelayVector(3) = LineX(2)ă     DelayVector(4) = LineY(2)ă     PCOPY 7, 0ă     SCREEN , , 0, 0ăLOOPăăPart2:ăăFrameCounter = 1ăFOR FrameNum = 1 TO NumFramesă          SCREEN , , 7, 0ă          PCOPY FrameCounter, 7ă          FrameCounter = FrameCounter + 1ă          IF FrameCounter > 6 THEN FrameCounter = 1ă          CIRCLE (CircleX(FrameNum), CircleY(FrameNum)), CircleR(1), CircleC(FrameNum)ă          CountEm = NumCircles + 1ă          FOR Tube = 1 TO NumCircles * 3 STEP 3ă               CountEm = CountEm - 1ă               IF ForeCircles(Tube) <> 0 THENă                    AdjCircleX = CINT((ForeCircles(Tube) * CountEm * 2 + 160) / (CountEm * 2 + 1))ă                    AdjCircleY = CINT((ForeCircles(Tube + 1) * CountEm * 2 + 99) / (CountEm * 2 + 1))ă                    CIRCLE (AdjCircleX, AdjCircleY), CircleR(Tube + 1), ForeCircles(Tube + 2)ă               END IFă          NEXTă          FOR Shift = NumCircles * 3 TO 6 STEP -3ă               ForeCircles(Shift) = ForeCircles(Shift - 3)ă               ForeCircles(Shift - 1) = ForeCircles(Shift - 4)ă               ForeCircles(Shift - 2) = ForeCircles(Shift - 5)ă          NEXTă          ForeCircles(1) = CircleX(FrameNum)ă          ForeCircles(2) = CircleY(FrameNum)ă          ForeCircles(3) = CircleC(FrameNum)ă          PCOPY 7, 0ă          SCREEN , , 0, 0ă     NEXTăăSCREEN 0ăWIDTH 80ăLOCATE 1, 1ăRESTORE LogoăFOR lines = 1 TO 20ă     READ OneLine$ă     Fade lines, 1, OneLine$ăNEXTăLOCATE 22ăDO: LOOP UNTIL INKEY$ <> ""ăSYSTEMăăScroller:ăDATA "Hi!  Welcome to QStar!  Like the graphics?  "ăDATA "Someone told me this was impossible with QBasic... "ăDATA "guess my poor friend was wrong!  "ăDATA "This is 320x200x16 graphics and runs at 30fps on a fast 486.  "ăDATA "Write me and tell me what you think!  "ăDATA "America Online: Skream.  "ăDATA "Internet: skream@aol.com  "ăDATA "Next demo: Flying into the starfield and some other tricks!  "ăDATA "Code by Skream.  Later... :)        "ăDATA ""ăăGrid3DFrame1:ăDATA   0,144,319,144,   0,146,319,146,   0,151,319,151,   0,160,319,160ăDATA   0,175,319,175,   0,199,319,199,   0,199,319,199,   0,199,319,199ăăGrid3DFrame2:ăDATA   0,144,319,144,   0,145,319,145,   0,146,319,146,   0,152,319,152ăDATA   0,162,319,162,   0,178,319,178,   0,199,319,199,   0,199,319,199ăăGrid3DFrame3:ăDATA   0,144,319,144,   0,145,319,145,   0,147,319,147,   0,153,319,153ăDATA   0,164,319,164,   0,182,319,182,   0,199,319,199,   0,199,319,199ăăGrid3DFrame4:ăDATA   0,144,319,144,   0,146,319,146,   0,148,319,148,   0,154,319,154ăDATA   0,166,319,166,   0,186,319,186,   0,199,319,199,   0,199,319,199ăăGrid3DFrame5:ăDATA   0,144,319,144,   0,146,319,146,   0,149,319,149,   0,156,319,156ăDATA   0,169,319,169,   0,190,319,190,   0,199,319,199,   0,199,319,199ăăGrid3DFrame6:ăDATA   0,144,319,144,   0,145,319,145,   0,147,319,147,   0,150,319,150ăDATA   0,158,319,158,   0,172,319,172,   0,194,319,194,   0,199,319,199ăăGrid3DCommons:ăDATA 280,144,319,153, 200,144,225,199, 220,144,275,199, 240,144,319,189ăDATA 260,144,319,167, 300,144,319,147, 140,144,130,199, 120,144, 95,199ăDATA 100,144, 45,199,  80,144,  0,189,  60,144,  0,167,  40,144,  0,153ăDATA  20,144,  0,147, 160,144,160,199, 180,144,190,199ăăColors:ăDATA 10,11,12,14ăăLogo:ăDATA "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżăDATA "ł   ú            ú         ú         ú        ú   .  ú       ú           .     łăDATA "łú      ŰŰŰŰŰŰŰ» ŰŰ»  ŰŰ» ŰŰŰŰŰŰ» .ŰŰŰŰŰŰŰ»  ŰŰŰŰŰ». ŰŰŰ»   ŰŰŰ» ŰŰ» .     ú   łăDATA "ł    ú  ŰŰÉÍÍÍÍĽúŰŰş ŰŰÉĽ ŰŰÉÍÍŰŰ» ŰŰÉÍÍÍÍĽ ŰŰÉÍÍŰŰ» ŰŰŰŰ» ŰŰŰŰş ŰŰş           łăDATA "ł       ŰŰŰŰŰŰŰ» ŰŰŰŰŰÉĽ  ŰŰŰŰŰŰÉĽ ŰŰŰŰŰ»  úŰŰŰŰŰŰŰş ŰŰÉŰŰŰŰÉŰŰş ŰŰş   ú       łăDATA "ł ú     ČÍÍÍÍŰŰş ŰŰÉÍŰŰ»  ŰŰÉÍÍŰŰ» ŰŰÉÍÍĽ.  ŰŰÉÍÍŰŰş ŰŰşČŰŰÉĽŰŰş ČÍĽ        ú  łăDATA "ł       ŰŰŰŰŰŰŰş ŰŰş  ŰŰ» ŰŰş úŰŰş ŰŰŰŰŰŰŰ» ŰŰş  ŰŰş ŰŰş.ČÍĽ ŰŰş ŰŰ»    ú      łăDATA "ł    ú  ČÍÍÍÍÍÍĽ ČÍĽ  ČÍĽ.ČÍĽ  ČÍĽ ČÍÍÍÍÍÍĽ ČÍĽ. ČÍĽ.ČÍĽ   ú ČÍĽ ČÍĽ      ú    łăDATA "ł          .  ú      ú         .         ú      ú        ú    ú                łăDATA "ł    ú  ÖÄÄÄÄÄż ŇÄż .ÖÄÄż  ÖÄż ÄŇÄ ÖÄÄż    ŇÄÄż ŇÄÄż ÖÄŇÄż ÖÄÄż  ÖÄż   ú       łăDATA "łú      ş ú   ł ÇÄÁż ÇÄÄ´. ÓÄż  ş  ş    ú  ş  ł ÇÄ ú ş ş ł ş úł  ÓÄż      ú    łăDATA "ł  ú    ş   ú ł ĐÄÄŮ Đ  Á ÓÄÄŮ ÄĐÄ ÓÄÄŮ    ĐÄÄŮ ĐÄÄŮ Đ Đ Á ÓÄÄŮ ÓÄÄŮ           łăDATA "ł       ş     ł     ú       write to:       ú        ú         .        ú      łăDATA "łú      ÓÄÄÄĹÄŮ         skream@aol.com           .               ú          ú  łăDATA "ł  ú   ú                     ú   ú      ú                 ú           ú        łăDATA "ł                ú       ú                  See ya later...       ú       ú    łăDATA "ł      Look for more demos soon!      ú          ú                             łăDATA "ł           ú      ú      This has been a presentation of Skream! design  ú  ú łăDATA "ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăDATA "                             press a key . . .ăăăTubeData:ă' Data created by Path Generator Version 1.0ă'    by Michael Teator in May 1994ă' Comment: This one should look great!  -Skreamă' Date: 05-24-1994 Time: 08:32:11ă' Number of pointsăDATA  474ă' ------ Path data ------ăDATA 159,99,159,99,159,99,159,99,159,99,159,99,159,99,158,100,157,100,156,101,154,102,153,103,152,105,149,107,147,108,145,110,144,112,139,114,136,116,130,119ăDATA 122,122,116,125,108,128,101,132,92,136,83,139,75,142,67,145,57,146,47,146,40,147,38,147,45,146,53,146,59,145,69,142,82,138,95,134,114,127,130,121ăDATA 148,113,162,103,171,97,185,88,196,81,209,74,220,66,230,61,242,54,252,48,264,42,270,36,267,38,261,43,256,48,250,53,240,60,230,68,218,75,209,82ăDATA 198,88,188,93,177,96,164,99,151,101,139,102,126,102,113,102,104,102,89,102,78,101,66,101,51,101,40,101,29,101,19,101,26,101,42,101,57,101,71,100ăDATA 90,98,100,98,110,97,124,97,140,97,158,99,177,102,190,105,206,111,216,116,228,122,238,129,251,136,264,144,276,152,281,154,285,157,269,157,256,155,240,152ăDATA 221,148,205,142,185,135,163,129,150,126,136,122,119,119,106,117,94,115,80,115,69,116,55,119,51,121,53,127,60,128,75,128,89,128,108,127,129,126,144,124ăDATA 160,122,172,121,189,118,212,117,224,116,236,113,249,108,257,103,264,97,269,87,269,78,267,76,260,81,254,90,250,96,242,103,234,110,225,115,212,120,200,125ăDATA 188,129,173,133,159,135,139,135,128,134,128,132,136,130,149,130,165,130,182,128,197,123,209,118,225,110,237,103,245,97,254,90,263,82,266,78,262,91,257,98ăDATA 247,103,232,108,218,111,206,115,196,117,185,115,172,110,164,104,154,95,144,85,134,76,123,65,113,58,100,53,84,48,74,48,62,48,52,51,47,57,42,66ăDATA 41,70,44,75,51,78,60,76,69,71,78,65,86,59,94,54,103,49,114,45,128,44,142,46,150,50,156,56,158,64,161,74,163,84,163,96,163,108,163,116ăDATA 164,126,166,138,167,146,170,152,178,161,188,164,190,160,186,155,181,153,173,151,168,142,165,130,165,116,165,100,164,83,164,68,164,54,162,40,162,36,160,44ăDATA 159,58,158,72,158,89,158,102,158,117,158,129,159,140,159,153,158,162,158,169,159,167,164,158,167,144,167,129,167,115,168,96,168,85,168,68,168,52,166,40ăDATA 164,32,161,31,158,41,157,52,157,66,158,82,158,98,159,113,158,127,158,138,158,147,156,156,155,160,152,162,148,160,143,156,135,146,127,137,117,122,108,108ăDATA 99,93,91,79,82,66,75,59,68,55,59,48,47,40,52,47,60,53,73,59,86,68,103,80,117,90,132,98,144,105,162,114,183,123,198,130,218,140,232,146ăDATA 250,154,272,161,280,162,284,156,279,150,268,145,252,139,236,132,227,129,213,125,205,116,199,100,198,79,198,64,200,52,202,43,207,36,208,41,207,53,203,67ăDATA 196,86,188,95,178,104,169,110,159,116,146,122,135,128,124,137,114,144,105,150,92,155,82,156,66,157,63,156,75,154,85,152,96,149,108,144,118,139,128,132ăDATA 138,124,146,113,148,101,142,92,133,89,123,90,109,93,92,94,78,95,61,95,48,94,41,92,42,85,49,78,57,72,71,63,86,55,105,47,119,44,133,42ăDATA 152,41,170,41,188,42,208,46,224,51,236,57,249,65,258,76,265,89,266,99,266,112,263,126,257,138,250,147,240,155,231,158,223,160,214,161,201,160,188,156ăDATA 175,149,165,140,160,132,150,118,141,107,130,99,116,98,111,105,111,113,116,120,124,127,134,137,146,144,160,147,176,146,190,141,199,131,205,119,205,105,202,93ăDATA 191,81,186,79,181,87,175,100,169,110,161,124,155,138,149,148,144,153,147,150,155,137,166,124,176,113,183,97,187,83,188,69,186,53,182,44,181,53,183,67ăDATA 186,75,192,86,204,94,224,99,238,100,256,99,272,94,288,91,294,88,285,90,270,95,252,98,239,100,226,103,206,106,181,106,156,106,137,107,122,107,113,106ăDATA 94,108,82,109,75,110,86,112,103,111,124,109,145,107,172,102,194,97,210,90,220,83,237,70,245,64,244,74,232,90,218,103,206,111,189,115,171,117,154,112ăDATA 141,103,136,88,136,66,136,55,137,47,135,56,133,70,125,81,112,87,92,91,87,85,97,76,109,76,119,85,123,100,124,113,126,124,131,127,143,125,152,118ăDATA 156,112,159,107,162,103,163,100,164,100,166,99,167,99,168,99,169,99,169,99,169,99,169,99,169,99,169,99ăăFUNCTION ComputerTypeăă     CLSă     PRINT "Welcome to QStar!"ă     PRINTă     PRINT "Please select the speed computer you are using:"ă     PRINT "  (1) 286"ă     PRINT "  (2) Slow 386"ă     PRINT "  (3) Fast 386 or slow 486"ă     PRINT "  (4) Fast 486"ă     PRINT "  (5) Pentium"ă     PRINT : PRINTă     PRINT "Please note that these settings only affect the scroller."ă     DOă          selection$ = INKEY$ă          SELECT CASE selection$ă               CASE "1" TO "5"ă                    ComputerType = VAL(selection$) - 1ă                    EXIT FUNCTIONă          END SELECTă     LOOPăăEND FUNCTIONăăSUB Fade (ty, tx, text$)ăă    LOCATE ty, tx: COLOR 8: PRINT text$ă    FOR n = 1 TO (ScrollDelay * 5000): NEXTă    LOCATE ty, tx: COLOR 7: PRINT text$ă    FOR n = 1 TO (ScrollDelay * 5000): NEXTă    LOCATE ty, tx: COLOR 15: PRINT text$ă    FOR n = 1 TO (ScrollDelay * 5000): NEXTăăEND SUBăăRobert Fisher                  RPG CHARACTER                  mhscards@aol.com               04-21-94 (17:20)       QB, QBasic, PDS        259  14342    RPGCHAR.BAS 'This LESSON demonstrates animation on a small scale.     ă'The smaller the image you wish to animate, the faster    ă'the speed of animation. You will see a portrait of a     ă'typical character you would find in an RPG game. The     ă'character's face is void of eyes and a mouth. When a     ă'charcter talks, the eyes and lips are animated to        ă'simulate speech. Below the portrait, you will see        ă'four sets of eyes & mouth. We then GET these very        ă'small images and use the PUT command to place them on    ă'the blank face. We use the RAN(dom) command to determine ă'which facial features will be selected. There is a       ă'timing loop to slow the animation down. You can adjust   ă'this loop to decrease/increase the speed to suit your    ă'particular PC processor speed. All the DATA statements   ă'in this program merely represent individual pixels of    ă'different colors. This particular RPG character is from  ă'the 'MIGHT & MAGIC' game by New World Computing.         ă'The four positions of the mouth are: Closed, 1/3 open,   ă'2/3 open and 3/3 open. The three positions of the eyes   ă'are Open, Closed, and Raised Eyebrows.                   ă'                                                         ăCLS :ăRANDOMIZE TIMERăSCREEN 13: CLS : DEF SEG = &HA000ăDIM M1%(300), M2%(300), M3%(300), M4%(300)ăDIM E1%(300), E2%(300), E4%(300)ă                                                            ăVGACOLORS:                                                ăC = -1: FOR N = 1 TO 768 STEP 3ăC = C + 1: READ B, G, RăCL = (R * 256 ^ 2) + (G * 256) + BăPALETTE C, CL: NEXT Nă                                                            ăREADPICDATA:                                            ăFOR I = 1 TO 30: FOR J = 1 TO 30ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = 0: Y1 = Y1 + 1: NEXT IăY1 = 39: X1 = 7: H1 = 7ă                                                            ăREADEYES01:                                               ăFOR I = 1 TO 6: FOR J = 1 TO 16ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 48: X1 = 11: H1 = 11: GET (7, 39)-(22, 44), E1%ăPUT (67, 39), E1%, PSETăREADMOUTH01:                                              ăFOR I = 1 TO 8: FOR J = 1 TO 8ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 39: X1 = 37: H1 = 37: GET (11, 48)-(18, 55), M1%ăREADEYES02:                                               ăFOR I = 1 TO 6: FOR J = 1 TO 16ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 48: X1 = 41: H1 = 41: GET (37, 39)-(52, 44), E2%ăREADMOUTH02:                                              ăFOR I = 1 TO 8: FOR J = 1 TO 8ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 48: X1 = 71: H1 = 71: GET (41, 48)-(48, 55), M2%ă                                                            ăREADMOUTH03:                                              ăFOR I = 1 TO 8: FOR J = 1 TO 8ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 39: X1 = 97: H1 = 97: GET (71, 48)-(78, 55), M3%ă                                                            ăREADEYES04:                                               ăFOR I = 1 TO 6: FOR J = 1 TO 16ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăY1 = 48: X1 = 101: H1 = 101: GET (97, 39)-(112, 44), E4%ăREADMOUTH04:                                              ăFOR I = 1 TO 8: FOR J = 1 TO 8ăREAD N: PSET (X1, Y1), N: X1 = X1 + 1ăNEXT J: X1 = H1: Y1 = Y1 + 1: NEXT IăGET (101, 48)-(108, 55), M4%ă                                                            ăTALKINGHEAD:                                              ăLINE (1, 30)-(175, 60), 0, BFăDO:                                                 ăT = INT(RND * 4) + 1: ON T GOTO F1, F2, F3, F4ăF1: PUT (7, 9), E1%, PSET: PUT (11, 18), M1%, PSET: GOTO F5ăF2: PUT (7, 9), E2%, PSET: PUT (11, 18), M2%, PSET: GOTO F5ăF3: PUT (7, 9), E1%, PSET: PUT (11, 18), M3%, PSET: GOTO F5ăF4: PUT (7, 9), E4%, PSET: PUT (11, 18), M4%, PSETăF5: FOR I = 1 TO 500: NEXT IăLOOP UNTIL INKEY$ <> ""ăENDă                                                            ăPALETTEDATA:                                              ăDATA 00,00,00,31,31,31,60,60,60,58,58,58,56,56,56,53,53,53ăDATA 51,51,51,49,49,49,47,47,47,44,44,44,42,42,42,40,40,40ăDATA 37,37,37,35,35,35,33,33,33,63,63,63,29,29,29,27,27,27ăDATA 25,25,25,23,23,23,21,21,21,19,19,19,17,17,17,15,15,15ăDATA 13,13,13,11,11,11,09,09,09,07,07,07,05,05,05,03,03,03ăDATA 01,01,01,00,00,00,63,58,58,62,53,53,61,48,48,60,44,44ăDATA 59,40,40,58,35,35,57,31,31,57,27,27,56,23,23,55,19,19ăDATA 54,16,16,53,12,12,52,08,08,51,05,05,50,02,02,50,00,00ăDATA 46,00,00,42,00,00,38,00,00,33,00,00,29,00,00,25,00,00ăDATA 21,00,00,17,00,00,13,00,00,63,29,00,55,25,00,48,22,00ăDATA 40,18,00,33,15,00,25,11,00,18,08,00,63,63,54,63,63,46ăDATA 62,63,38,62,63,30,62,63,22,61,63,14,61,63,06,59,61,00ăDATA 59,59,00,56,55,00,53,51,00,50,46,00,47,42,00,44,38,00ăDATA 41,34,00,38,31,00,34,26,00,30,22,00,26,18,00,22,15,00ăDATA 18,11,00,14,08,00,10,05,00,06,03,00,54,63,22,49,59,17ăDATA 45,56,13,41,52,10,37,49,06,33,45,03,29,42,01,26,39,00ăDATA 21,36,00,19,33,00,18,31,00,17,29,00,16,27,00,14,25,00ăDATA 13,23,00,12,21,00,11,19,00,47,62,47,39,60,38,32,58,31ăDATA 23,56,23,16,55,16,11,53,10,10,50,09,08,47,08,07,45,07ăDATA 06,42,06,05,39,04,04,36,04,03,34,03,02,31,02,02,28,02ăDATA 01,26,01,01,23,01,01,20,00,00,17,00,00,15,00,00,12,00ăDATA 00,09,00,00,07,00,60,60,63,56,56,63,51,51,63,47,47,63ăDATA 43,44,63,39,40,63,35,35,63,31,32,63,27,28,63,23,24,63ăDATA 19,20,63,15,16,63,11,12,63,07,08,63,03,04,63,00,01,63ăDATA 00,00,63,00,00,59,00,00,55,00,00,51,00,00,47,00,00,43ăDATA 00,00,39,00,00,36,00,00,32,00,00,28,00,00,24,00,00,20ăDATA 00,00,16,00,00,12,00,00,08,00,00,05,60,54,63,57,46,63ăDATA 54,39,63,52,31,63,50,23,63,47,16,63,45,08,63,42,00,63ăDATA 38,00,57,32,00,50,27,00,43,21,00,35,15,00,27,10,00,20ăDATA 06,00,12,02,00,05,51,63,63,45,59,59,39,56,56,34,53,53ăDATA 29,50,50,25,47,47,20,43,43,17,40,40,13,36,36,09,31,31ăDATA 07,27,27,04,23,23,02,19,19,01,15,15,00,11,11,00,07,07ăDATA 58,60,62,54,58,61,49,55,61,45,53,61,41,51,60,37,49,60ăDATA 33,48,60,29,46,59,25,44,59,21,43,59,17,41,58,13,40,58ăDATA 10,38,58,06,37,57,02,36,57,01,33,54,01,31,51,00,29,48ăDATA 00,27,45,00,25,43,00,23,40,00,21,37,00,20,34,00,18,31ăDATA 00,16,28,00,14,24,00,12,21,00,10,18,00,08,15,00,06,12ăDATA 00,05,09,00,03,06,63,58,55,63,55,51,63,53,48,63,51,44ăDATA 63,49,41,63,47,37,63,45,34,63,43,31,63,41,27,63,39,24ăDATA 60,37,23,58,36,22,56,34,21,54,33,20,52,32,20,50,31,19ăDATA 47,29,17,44,27,16,41,26,14,38,24,13,35,22,12,32,21,10ăDATA 29,19,09,26,17,08,23,15,07,20,13,06,17,12,05,14,10,03ăDATA 11,08,03,09,06,02,06,04,01,63,63,63                  ă                                                            ăPICTUREDATA:                                              ăDATA 208,207,208,208,208,207,208,208,208,207,145,145,144  ăDATA 144,144,144,144,144,145,145,208,207,208,208,208,207  ăDATA 208,208,208,207,207,208,207,208,207,208,207,208,146  ăDATA 146,144,144,139,139,139,139,139,144,144,144,146,146  ăDATA 207,208,207,208,207,208,207,208,207,207,207,207,207  ăDATA 207,207,146,145,145,144,139,139,139,139,139,139,139  ăDATA 140,144,145,145,146,207,207,207,207,207,207,207,206  ăDATA 207,206,207,206,207,146,145,144,144,139,138,138,138  ăDATA 138,138,138,138,139,146,146,144,145,146,206,207,206  ăDATA 207,206,207,206,206,206,206,206,146,145,144,146,139  ăDATA 138,138,138,138,138,138,138,138,138,139,146,148,144  ăDATA 145,146,206,206,206,206,206,205,206,206,206,146,145  ăDATA 144,146,144,137,137,137,137,137,137,137,137,137,137  ăDATA 137,144,146,148,144,145,146,206,206,205,206,206,206  ăDATA 206,146,145,144,146,146,249,249,248,248,247,247,247  ăDATA 247,247,247,248,248,249,249,146,148,144,145,146,205  ăDATA 206,205,205,206,146,145,144,144,148,249,247,246,245  ăDATA 244,244,244,244,244,244,244,244,245,246,247,249,148  ăDATA 148,144,145,146,205,206,205,205,146,144,148,151,247  ăDATA 235,235,235,235,235,235,235,235,235,235,235,235,235  ăDATA 235,235,235,247,151,148,144,146,205,205,204,146,144  ăDATA 148,151,247,245,235,235,235,235,235,235,235,235,235  ăDATA 235,235,235,235,235,235,235,245,247,151,148,144,146  ăDATA 205,204,144,148,151,240,242,245,235,235,235,235,235  ăDATA 235,235,235,235,235,235,235,235,235,235,235,245,242  ăDATA 240,151,148,144,204,144,148,151,156,238,242,242,235  ăDATA 235,235,235,235,235,235,235,235,235,235,235,235,235  ăDATA 235,235,242,242,238,156,151,144,144,144,148,151,156  ăDATA 238,245,238,235,235,235,235,235,235,235,235,235,235  ăDATA 235,235,235,235,235,235,238,245,238,156,151,148,144  ăDATA 144,151,156,156,238,247,238,235,235,235,235,235,235  ăDATA 235,235,235,235,235,235,235,235,235,235,238,247,238  ăDATA 155,156,148,144,148,151,156,156,239,242,240,232,233  ăDATA 234,234,234,235,238,235,232,238,238,235,234,234,233  ăDATA 232,240,242,239,156,156,151,148,148,151,156,156,155  ăDATA 238,241,236,232,232,234,235,240,233,235,230,234,240  ăDATA 235,234,232,232,236,241,238,155,156,156,151,148,148  ăDATA 151,151,156,156,155,241,240,236,233,235,235,235,238  ăDATA 240,240,238,235,235,235,233,236,240,241,155,156,156  ăDATA 156,151,148,148,151,151,156,156,156,244,240,238,238  ăDATA 235,235,235,235,235,235,235,235,235,235,238,238,240  ăDATA 244,156,156,156,151,151,148,148,148,151,151,156,156  ăDATA 155,241,236,235,235,235,235,235,235,235,235,235,235  ăDATA 235,235,236,241,155,156,156,151,151,151,148,148,148  ăDATA 151,151,151,156,156,155,236,235,235,235,235,235,235  ăDATA 235,235,235,235,235,235,236,156,156,156,151,151,151  ăDATA 148,148,144,148,148,151,151,151,156,156,244,236,235  ăDATA 235,235,235,235,235,235,235,235,235,236,244,156,156  ăDATA 151,151,151,148,148,144,144,144,148,148,148,151,151  ăDATA 156,246,243,236,235,235,235,235,235,235,235,235,236  ăDATA 243,246,156,151,151,151,148,148,144,144,151,151,144  ăDATA 144,148,148,148,151,246,243,240,235,235,235,235,235  ăDATA 235,235,235,240,243,246,151,151,148,148,148,144,144  ăDATA 151,151,151,151,151,144,144,148,148,148,244,241,235  ăDATA 235,235,235,235,235,235,235,241,244,148,148,148,148  ăDATA 144,144,151,151,151,148,148,151,151,151,151,144,144  ăDATA 148,148,244,235,235,235,235,235,235,235,235,244,148  ăDATA 148,148,144,144,151,151,151,151,148,148,148,148,148  ăDATA 151,151,151,144,144,148,148,235,235,235,235,235,235  ăDATA 235,235,148,148,144,144,151,151,151,151,148,148,148  ăDATA 148,148,148,148,148,148,151,151,144,144,148,148,244  ăDATA 241,239,239,241,244,148,148,144,144,151,151,151,148  ăDATA 148,148,148,148,148,148,148,148,148,148,148,151,151  ăDATA 144,144,148,148,244,239,239,244,148,148,144,144,151  ăDATA 151,148,148,148,148,148,148,148,148,148,148,148,148  ăDATA 148,148,148,151,151,144,144,148,148,240,240,148,148  ăDATA 144,144,151,151,148,148,148,148,148,148,148,148,148  ăDATA 148,148,148,148,148,148,148,148,151,151,144,144,148  ăDATA 244,244,148,144,144,151,151,148,148,148,148,148,148  ăDATA 148,148,148                                          ă                                                            ăEYES01:                                                   ăDATA 246,243,241,239,239,237,237,237,237,237,237,239,239  ăDATA 241,244,246,245,247,247,247,247,247,240,238,238,240  ăDATA 247,247,247,247,247,245,242,240,239,242,242,244,247  ăDATA 235,234,247,244,242,242,239,240,242,240,244,  3,148  ăDATA   8,242,244,235,232,244,242,  8,148,  3,244,240,237  ăDATA 237,237,237,240,240,240,235,232,240,240,240,237,237  ăDATA 237,237,233,234,235,235,236,238,238,235,232,240,238  ăDATA 238,236,235,234,233                                  ăMOUTH01:                                                  ăDATA 238,235,232,232,232,232,235,238,238,243,240,240,240  ăDATA 240,243,238,238,235,232,232,232,232,235,238,235,236  ăDATA 236,238,238,236,236,235,236,235,235,232,232,235,235  ăDATA 236,243,238,235,235,235,235,238,243,241,241,243,243  ăDATA 243,243,241,241,244,241,241,240,240,241,241,244      ăEYES02:                                                   ăDATA 246,243,241,239,239,237,237,237,237,237,237,239,239  ăDATA 241,244,246,245,247,247,247,247,247,240,238,238,240  ăDATA 247,247,247,247,247,245,242,240,239,240,242,244,247  ăDATA 235,234,247,244,242,240,239,240,242,240,242,239,237  ăDATA 240,242,244,235,232,244,242,240,237,239,242,240,237  ăDATA 237,242,242,242,242,240,235,232,240,242,242,242,242  ăDATA 237,237,233,234,235,235,236,238,238,235,232,240,238  ăDATA 238,236,235,234,233                                  ăMOUTH02:                                                  ăDATA 238,235,232,232,232,232,235,238,238,243,  8,  3,  3  ăDATA   8,243,238,238,235,232,232,232,232,235,238,235,236  ăDATA 236,238,238,236,236,235,236,235,235,232,232,235,235  ăDATA 236,243,238,235,235,235,235,238,243,241,241,243,243  ăDATA 243,243,241,241,244,241,241,240,240,241,241,244      ăMOUTH03:                                                  ăDATA 238,235,232,232,232,232,235,238,238,243,  8,  3,  3  ăDATA   8,243,238,238,240,245,245,245,245,240,238,235,235  ăDATA 232,232,232,232,235,235,236,236,236,238,238,236,236  ăDATA 236,240,235,235,232,232,235,235,240,243,240,235,235  ăDATA 235,235,240,243,244,241,243,243,243,243,241,244      ăEYES04:                                                   ăDATA 246,243,241,239,239,237,237,237,237,237,237,239,239  ăDATA 241,244,246,245,247,247,244,239,237,242,238,238,242  ăDATA 237,239,244,247,247,245,242,240,242,247,247,247,247  ăDATA 235,234,247,247,247,247,242,240,242,240,244,  3,148  ăDATA   8,242,244,235,232,244,242,  8,148,  3,244,240,237  ăDATA 237,237,237,240,240,240,235,232,240,240,240,237,237  ăDATA 237,237,233,234,235,235,236,238,238,235,232,240,238  ăDATA 238,236,235,234,233                                  ăMOUTH04:                                                  ăDATA 238,235,232,232,232,232,235,238,240,243,  8,  3,  3  ăDATA   8,243,240,240,245,247,247,247,247,245,240,235,240  ăDATA 245, 49, 49,245,240,235,236,235,232,232,232,232,235  ăDATA 236,240,236,236,238,238,236,236,240,243,238,235,232  ăDATA 232,235,238,243,244,240,235,235,235,235,240,244ăăSteven Sensarn                 VGA PCX VIEWER                 alt.lang.basic                 12-14-95 (02:55)       QB, QBasic, PDS        73   1382     VGAPCX.BAS  SCREEN 13ăCLSăTYPE THă  MAN AS STRING * 1ă  VER AS STRING * 1ă  ENC AS STRING * 1ă  BIT AS STRING * 1ă  XLS AS INTEGERă  YLS AS INTEGERă  XMS AS INTEGERă  YMS AS INTEGERă  HRE AS INTEGERă  VRE AS INTEGERă  COL AS STRING * 48ă  RES AS STRING * 1ă  PLA AS STRING * 1ă  BYT AS INTEGERă  PAL AS INTEGERă  FIL AS STRING * 58ăEND TYPEăăDIM H AS THăDIM DAT AS STRING * 1ăăFILE$ = "DEMO.PCX"          ' Change File NameăăOPEN FILE$ FOR BINARY AS #1ă  GET #1, 1, Hă  C = 1ă  Y = 1: X = 1ă  WHILE C <= 64000ă    GET #1, , DATă    IF ASC(DAT) > 192 AND ASC(DAT) <= 255 THENă      LPS = ASC(DAT) - 192ă      GET #1, , DATă      VALUE = ASC(DAT)ă        WHILE LPS > 0ă          PSET (X, Y), VALUEă          IF X = 320 THEN X = 1: Y = Y + 1 ELSE X = X + 1ă          C = C + 1ă          LPS = LPS - 1ă        WENDă    ELSEă      VALUE = ASC(DAT)ă      PSET (X, Y), VALUEă      IF X = 320 THEN X = 1: Y = Y + 1 ELSE X = X + 1ă      C = C + 1ă    END IFă  WENDă  GET #1, LOF(1) - 768, DATă  FOR LPS = 0 TO 255ă    GET #1, , DATă    A = INT(ASC(DAT) / 4)ă    GET #1, , DATă    B = INT(ASC(DAT) / 4)ă    GET #1, , DATă    C = INT(ASC(DAT) / 4)ă    SLOT = LPSă    GOSUB CHANGECOLORă  NEXT LPSăCLOSEăENDăăCHANGECOLOR:ă  R& = Aă  G& = Bă  B& = Că  G& = G& * 256ă  B& = B& * 65536ă  RGB& = R& + G& + B&ă  PALETTE SLOT, RGB&ăRETURNăăScott Mitchell                 FADING PROGRAM                 FidoNet QUIK_BAS Echo          01-02-96 (16:41)       QB, QBasic, PDS        153  3249     FADING.BAS  'Here is a fading program.  First, let me say that I make no promisesă'that this program is 100% safe.  I have tested it on my computer and ită'runs fine, but don't complain if your computer blows up or something.  Iă'would like to explain how this works first.ăă'First, to change the palette, we tinker with the ports &H3C7, &H3C8, andă'&H3C9.  You can see exactly how we change it in my GetPal and Pală'procedures.  For Pal, you are setting the Palette:ăă'       PAL(colornumbertochange,red_intensity,Green_intensity,Blue_intensity)ăă'GetPal just returns the current values of intensity for the coloră'specified.  SetUpPalArray stores all of the default values in an arrayă'(PalArray) so that when you're done fading out, you can restore what theă'previous default was.  RestorePalette simply restores you old paletteă'that you saved with SetUpPalArray.ăă'Scott Mitchell, 1996...ă'Use at your own risk, but, heh, have fună'ă'Fading program...ăăDECLARE SUB RestorePalette ()ăDECLARE SUB fadeout ()ăDECLARE SUB GetPal (col%, r%, g%, b%)ăDECLARE SUB SetUpPalArray ()ăDECLARE SUB Pal (col%, r%, g%, b%)ăDEFINT A-Zăă'MaxColors=the max colors per screen  (255 in SCREEN 13 (0 - 255))ăăCONST MaxColors = 255, false = 0, true = NOT falseăăăTYPE PalTypeă       r AS INTEGERă       g AS INTEGERă       b AS INTEGERăEND TYPEăăăDIM SHARED PalArray(MaxColors) AS PalTypeăDIM SHARED AlreadyHandled(MaxColors)ăăSetUpPalArrayăăSCREEN 13ăăRANDOMIZE TIMERăDOă       PSET (320 * RND, 200 * RND), 256 * RNDăLOOP UNTIL INKEY$ <> ""ăăCALL fadeoutăăSLEEP 1ăăRestorePaletteăăENDăă'------------------------------------------------------------------ăăSUB fadeoutăăcompleted = 0ăcount = 0ăăFOR x = 0 TO MaxColorsă       AlreadyHandled(x) = 0ăNEXTăăăDOă done = trueăă IF AlreadyHandled(count) <> 0 THENă       DOă               count = count + 1ă               IF count > MaxColors THEN count = 0ă       LOOP UNTIL AlreadyHandled(count) = 0ă END IFăăă CALL GetPal(count, r, g, b)ă IF r > 0 THENă       r = r - 1ă       done = falseă END IFă IF g > 0 THENă       g = g - 1ă       done = falseă END IFă IF b > 0 THENă       b = b - 1ă       done = falseă END IFăă CALL Pal(count, r, g, b)ăă IF done THENă       completed = completed + 1ă       AlreadyHandled(count) = 1ă END IFăă count = count + 1:  IF count > MaxColors THEN count = 0ăăăLOOP UNTIL completed >= 255ăăEND SUBăă'--------------------------------------------------------------------ăăSUB GetPal (col, r, g, b)ăă  OUT &H3C7, colă  r = INP(&H3C9)ă  g = INP(&H3C9)ă  b = INP(&H3C9)ăăEND SUBăă'--------------------------------------------------------------------ăăSUB Pal (col, r, g, b)ăă       OUT &H3C8, colă       OUT &H3C9, ră       OUT &H3C9, gă       OUT &H3C9, băăEND SUBăă'--------------------------------------------------------------------ăăSUB RestorePaletteăăFOR x = 0 TO MaxColorsă       CALL Pal(x, PalArray(x).r, PalArray(x).g, PalArray(x).b)ăNEXTăăEND SUBăă'--------------------------------------------------------------------ăăSUB SetUpPalArrayăăFOR x = 0 TO MaxColorsă     CALL GetPal(x, PalArray(x).r, PalArray(x).g, PalArray(x).b)ăNEXTăăEND SUBăStephan van Loendersloot       SNOW FALLING                   FidoNet QUIK_BAS Echo          01-03-96 (03:01)       QB, QBasic, PDS        109  4605     SNOWFALL.BAS'Code for snow falling dwarreling down.ă'Released to Public Domain by Stephan van LoenderslootăăDIM ColArray%(3)                ' Allocate memoryăăColArray%(1) = 15               ' Colors that can be used by theăColArray%(2) = 8                ' snow (dots) to some sort of 3DăColArray%(3) = 7                ' effect <g> like they're moving front/backăăScreenNo% = 12                  ' Screen modeăăSELECT CASE ScreenNo%           ' Determine the Width and Height of the screenă                                ' According to the resolution.ă  CASE 1ă    XReso% = 320ă    YReso% = 200ă  CASE 2ă    XReso% = 640ă    YReso% = 200ă  CASE 7ă    XReso% = 320ă    YReso% = 200ă  CASE 8ă    XReso% = 640ă    YReso% = 200ă  CASE 9ă    XReso% = 640ă    YReso% = 350ă  CASE 10ă    XReso% = 640ă    YReso% = 350ă  CASE 11ă    XReso% = 640ă    YReso% = 480ă  CASE 12ă    XReso% = 640ă    YReso% = 480ă  CASE 13ă    XReso% = 320ă    YReso% = 200ă  CASE ELSEă    PRINT "Unsupported graphics mode: "; ScreenNo%ă    ENDăEND SELECTăăDots% = 100                     ' Number of dot on the screen at all timeăăDIM XPos%(Dots%)                ' Allocate memory for the X-axis locationsăDIM YPos%(Dots%)                ' Allocate memory for the Y-axis locationsăăRANDOMIZE TIMER                 ' The magic trick for random numbers.ăăFOR Init% = 1 TO Dots%          ' Initialize the starting X-axis and Y-axisă                                ' locations of the dots.ă  YPos%(Init%) = INT(RND * YReso%) + 1  ' Random number between 1-YReso%ă  XPos%(Init%) = INT(RND * XReso%) + 1  ' Random number between 1-XReso%ăNEXT Init%ăăSCREEN ScreenNo%                ' Set screen modeăăDOă FOR TakeDot% = 1 TO Dots%      ' Draw as many pixels as Dots%ăă  PSET (XPos%(TakeDot%), YPos%(TakeDot%)), 0            ' Erase previouslyă                                                        ' set dot. Of courseă                                                        ' In the beginningă                                                        ' there's no dot.ăă  YPos%(TakeDot%) = YPos%(TakeDot%) + INT(RND * 5)      ' Determine by aă                                                        ' random numberă                                                        ' between 0-5 howă                                                        ' fast a dot shouldă                                                        ' dwarrel.ă    XRandom% = INT(RND * 6) + 1                         ' Determine by aă                                                        ' random numberă                                                        ' between 1-6 howă                                                        ' if a dot should goă                                                        ' left or right andă                                                        ' how farăăă    IF XRandom% > 3 THEN XRandom% = 3 - XRandom%        ' If a dot dwarrelsă                                                        ' over 3 to the rightă                                                        ' make it go to theă                                                        ' left 3-random no.ăă    XPos%(TakeDot%) = XPos%(TakeDot%) + XRandom%        ' New position of theă                                                        ' dot.ăă    IF YPos%(TakeDot%) > YReso% - 1 THEN                ' Now check to see ifă                                                        ' the dot has fallenă                                                        ' off the screen ;-)ă      YPos%(TakeDot%) = 1                               ' If so, then put ită                                                        ' on top again,ă      XPos%(TakeDot%) = INT(RND * XReso%) + 1           ' with a new randomă                                                        ' position on the x-axis.ă    END IFăă    FOR delay% = 1 TO 2000: NEXT delay%                 ' A *very* simpleă                                                        ' delay routine.ăă    Col% = ColArray%(INT(RND * 3) + 1)                  ' Determine theă                                                        ' color of the dotă      PSET (XPos%(TakeDot%), YPos%(TakeDot%)), Col%     ' And write the dotă                                                        ' on the screenă    NEXT TakeDot%                                       ' take the next dotăăLOOP WHILE INKEY$ = ""                                  ' And loop until a keyă                                                        ' is pressed.ăHauke Daempfling               RESIZEABLE FONTS               hcd@berlin.snafu.de            01/96 (00:00)          QB, QBasic, PDS        201  10193    FPRINT.BAS  DEFINT A-ZăDECLARE SUB InitFprint ()ăDECLARE SUB Fprint (text$, x%, y%, size%)ă'$DYNAMICăDIM SHARED StdFont$(94)ăSCREEN 12ăCLSăInitFprintăă'   Font Printă' Hauke Daempflingă'Jan 1996ăă'This program displays resizable fonts in any screen mode (exept 0 and a fewă' others). The font doesn't look to bad, but it took about 4 days to write upă' so please give me some credit if you use this program in any of yours :).ăă'    Syntax:ă'  Fprint text$, x, y, sizeă'text$ = any text (ASCII characters that are <32 or >126 will be cut from it)ă'x     = bottom left corner X locationă'y     = bottom left corner Y locationă'size  = any size from 1 to ??, if you use 0 the standard (4) will be used.ăă'Example:ăFprint "Aa Bb Cc Xx Yy Zz 0123456789", 8, 16, 0ăFprint "Aa Bb Cc Xx Yy Zz", 8, 64, 16ăFprint "0123456789", 64, 132, 16ăăFprint "Font Print - by Hauke Daempfling", 8, 256, 8ăFprint "R", 8, 320, 2ăFprint "E", 16, 320, 4ăFprint "S", 26, 320, 6ăFprint "I", 38, 320, 8ăFprint "Z", 55, 320, 10ăFprint "E", 78, 320, 12ăFprint "A", 100, 320, 14ăFprint "B", 128, 320, 16ăFprint "L", 160, 320, 18ăFprint "E", 190, 320, 20ăăREM $STATICăSUB Fprint (text$, x, y, size)ăIF LEN(text$) = 0 THEN EXIT SUBăIF size = 0 THEN size = 4ăscale$ = STR$(size)ăăFOR a = 1 TO LEN(text$)ă  locate$ = STR$(x) + "," + STR$(y)              'where we'll drawă  x$ = MID$(text$, a, 1)                         'the character being drawnă  IF ASC(x$) < 32 OR ASC(x$) > 126 THEN          'if the character is not ină    GOTO Skip                                    ' the StdFont$ arrayă  ELSEă    draw$ = StdFont$(ASC(x$) - 32)               'the drawing commands fromă    w = 0                                        ' StdFont$ă    FOR q = 1 TO 50                              'separate+expand the drawingă      XX$ = ""                                   ' commands from StdFont$ă      DOă        w = w + 1ă        XX$ = XX$ + MID$(draw$, w, 1)ă      LOOP UNTIL MID$(draw$, w, 1) = " " OR w >= LEN(draw$)ă      IF XX$ = "" THEN EXIT FORă      IF LEFT$(XX$, 1) = "X" THENă        temp$ = temp$ + "B " + RIGHT$(XX$, LEN(XX$) - 1)ă      ELSEă        temp$ = temp$ + XX$ă      END IF     'N=line, no move  B=move, no lineă    NEXT qă    draw$ = temp$ă    temp$ = ""ă  END IFă  DRAW "S1 B M" + locate$ + " S" + scale$ + " " + draw$ 'draw the chară  x = x + (size * 2) + 1                                'next X positionăSkip:ă  draw$ = ""ăNEXT aăEND SUBăăSUB InitFprint 'sets up the character variablesă'Set up the drawing commands for the characters.ăă'Please note:ă'These are not the normal DRAW commands, they are translated by the FOR-NEXTă' loop in the Fprint sub. Here you only have the direction (H,U,E,L,R,G,ă' D,F) commands and the next line is always started where the last one ended.ă' If you add "X" to the command the line will not be drawn but the locationă' moved. When you are drawing you start at the bottom left corner of theă' character. The commands must be seperated by spaces and no spaces shouldă' be used in a single command.ăă'            | *** Short reference to drawing commands used below ***ă'   H U E     | * [Direction command][Length]ă'<- L   R ->  |      Line, moveă'   G D F     | * X[Direction command][Length]ă'            |      No line, moveăă'The drawing commands assume a character box size of 8x8.ăăStdFont$(1) = "XR3 U1 R1 D1 L1 XU3 U5 R1 D5 L1"                     '!ăStdFont$(2) = "XR3 XU8 D1 XR1 U1"                                   '"ăStdFont$(3) = "XR2 U8 XR4 D8 XR2 XU2 L8 XU4 R8"                     '#ăStdFont$(4) = "XR1 XU2 F2 R2 E2 U1 L6 U1 E2 R2 F2 XU3 XL3 D8"       '$ăStdFont$(5) = "XR1 E6 XL4 D1 XD3 XR3 D1"                            '%ăStdFont$(6) = "" 'no idea of how to draw this :)                    '&ăStdFont$(7) = "XR4 XU8 D1 G1"                                       ''ăStdFont$(8) = "XR6 H2 U4 E2"                                        '(ăStdFont$(9) = "XR1 E2 U4 H2"                                        ')ăStdFont$(10) = "XR3 XU4 R2 L1 U1 D2 XR1 H2 XR2 G2"                  '*ăStdFont$(11) = "XR3 XU4 R2 L1 U1 D2"                                '+ăStdFont$(12) = "XR4 XU2 D1 G1"                                      ',ăStdFont$(13) = "XR2 XU4 R4"                                         '-ăStdFont$(14) = "XR1 U1 R1 D1 L1"                                    '.ăStdFont$(15) = "XR1 E6"                                             '/ăăStdFont$(16) = "XR2 R2 E2 U4 H2 L2 G2 D4 F2"                        '0ăStdFont$(17) = "XR3 U8 G1"                                          '1ăStdFont$(18) = "XR6 L5 U1 E5 U1 H1 L3 G1"                           '2ăStdFont$(19) = "XR1 XU1 F1 R3 E1 U2 H1 E1 U2 H1 L3 G1"              '3ăStdFont$(20) = "XR1 XU4 E4 D8 U4 L4 R5"                             '4ăStdFont$(21) = "XR6 XU8 L5 D3 R4 F1 D3 G1 L3 H1"                    '5ăStdFont$(22) = "XR5 XU7 H1 L1 G2 D5 F1 R2 E1 U3 H1 L3"              '6ăStdFont$(23) = "XR1 XU8 R5 D2 G3 D3"                                '7ăStdFont$(24) = "XR2 R2 E1 U2 H1 L2 G1 D2 F1 XU4 H1 U2 E1 R2 F1 D2 G1"'8ăStdFont$(25) = "XR2 R1 E2 U5 H1 L2 G1 D2 F1 R3"                     '9ăăStdFont$(26) = "XR2 XU2 U1 R1 D1 L1 XU3 U1 R1 D1 L1"                ':ăStdFont$(27) = "XR2 XU1 U2 R1 D1 G1 XU4 U1 R1 D1 L1"                ';ăStdFont$(28) = "XR5 H4 E4"                                          '<ăStdFont$(29) = "XR2 XU2 U1 R3 D1 L3 XU3 U1 R3 D1 L3"                '=ăStdFont$(30) = "XR2 E4 H4"                                          '>ăStdFont$(31) = "XR3 U1 XU1 U2 E2 U1 H1 L2 G1"                       '?ăStdFont$(32) = "XR6 L4 H1 U5 E1 R3 F1 D3 L2 U1"                     '@ăăStdFont$(33) = "XR1 U5 E3 F3 D5 U3 L6"                              'AăStdFont$(34) = "XR1 U8 R4 F1 D2 G1 L4 R4 F1 D2 G1 L4"               'BăStdFont$(35) = "XR7 XU2 G2 L2 H2 U4 E2 R2 F2"                       'CăStdFont$(36) = "XR1 U8 R3 F2 D4 G2 L3"                              'DăStdFont$(37) = "XR1 U8 R6 XD4 XL2 L4 D4 R6"                         'EăStdFont$(38) = "XR1 U8 R6 XD4 XL2 L4"                               'FăStdFont$(39) = "XR5 XU4 R2 D2 G2 L3 H2 U4 E2 R4"                    'GăStdFont$(40) = "XR1 U8 D4 R6 D4 U8"                                 'HăStdFont$(41) = "XR2 R6 L3 U8 L3 R6"                                 'IăStdFont$(42) = "XR7 XU8 D6 G2 L2 H2"                                'JăStdFont$(43) = "XR2 U8 D4 E4 G4 F4"                                 'KăStdFont$(44) = "XR7 L6 U8"                                          'LăStdFont$(45) = "XR1 U8 F3 E3 D8"                                    'MăStdFont$(46) = "XR1 U8 F6 XD2 U8"                                   'NăStdFont$(47) = "XR2 R3 E2 U4 H2 L3 G2 D4 F2"                        'OăStdFont$(48) = "XR1 U8 R4 F2 G2 L4"                                 'PăStdFont$(49) = "XR3 R3 E2 U4 H2 L3 G2 D4 F2 XR5 H2"                 'QăStdFont$(50) = "XR1 U8 R4 F2 G2 L4 F4"                              'RăStdFont$(51) = "XR1 XU2 F2 R2 E2 U2 L6 U2 E2 R2 F2"                 'SăStdFont$(52) = "XR4 U8 R3 L6"                                       'TăStdFont$(53) = "XR1 XU8 D6 F2 R2 E2 U6"                             'UăStdFont$(54) = "XR1 XU8 D5 F3 E3 U5"                                'VăStdFont$(55) = "XR1 XU8 D6 F2 E1 F1 E2 U6"                          'WăStdFont$(56) = "XU8 F8 XU8 G8"                                      'XăStdFont$(57) = "XR4 U5 H3 XR6 G3"                                   'YăStdFont$(58) = "XR1 XU8 R6 D1 G6 D1 R6"                             'ZăăStdFont$(59) = "XR7 L1 U8 R1"                                       '[ăStdFont$(60) = "XR7 H6"                                             '\ăStdFont$(61) = "XR1 R1 U8 L1"                                       ']ăStdFont$(62) = "XR3 XU7 E1 F1"                                      '^ăStdFont$(63) = "XR1 R6"                                             '_ăStdFont$(64) = "XR4 XU8 F1"                                         '`ăăStdFont$(65) = "XR1 XU1 U1 E1 R1 F1 XD1 G1 L1 H1 XR3 XD1 U3"        'aăStdFont$(66) = "XR1 U7 D5 E1 R1 F1 D1 G1 L1 H1"                     'băStdFont$(67) = "XR4 XU1 G1 L1 H1 U1 E1 R1 F1"                       'căStdFont$(68) = "XR4 U7 D5 H1 L1 G1 D1 F1 R1 E1"                     'dăStdFont$(69) = "XR4 XU1 G1 L1 H1 U1 E1 R1 F1 L3"                    'eăStdFont$(70) = "XR2 U3 L1 R2 XL1 U2 E1 R1 F"                        'făStdFont$(71) = "XR4 XU1 G1 L1 H1 U1 E1 R1 F1 U1 D4 G1 L1 H1"        'găStdFont$(72) = "XR1 U7 D5 E1 R1 F1 D2"                              'hăStdFont$(73) = "XR2 U3 XU1 U1"                                      'iăStdFont$(74) = "XR2 XU5 D1 XD1 D4 G1 L1 H1"                         'jăStdFont$(75) = "XR1 U7 D5 E2 G2 F2"                                 'kăStdFont$(76) = "XR2 U7"                                             'lăStdFont$(77) = "XR1 U3 D1 E1 F1 E1 F1 D2"                           'măStdFont$(78) = "XR1 U3 D1 E1 R1 F1 D2"                              'năStdFont$(79) = "XR2 R1 E1 U1 H1 L1 G1 D1 F1"                        'oăStdFont$(80) = "XR1 U3 D1 E1 R1 F1 D1 G1 L1 H1 D3"                  'păStdFont$(81) = "XR3 XU1 G1 L1 H1 U1 E1 R1 F1 U1 D5"                 'qăStdFont$(82) = "XR1 U3 D1 E1 R1 F"                                  'răStdFont$(83) = "XR1 XU1 F1 R1 E1 U1 L3 U1 E1 R1 F1"                 'săStdFont$(84) = "XR3 U7 D3 L1 R2"                                    'tăStdFont$(85) = "XR1 XU3 D2 F1 R1 E1 U2 D3"                          'uăStdFont$(86) = "XR1 XU3 D2 F1 E1 U2"                                'văStdFont$(87) = "XR1 XU3 D2 F1 E1 F1 E1 U2"                          'wăStdFont$(88) = "XR1 XU3 F3 XU3 G3"                                  'xăStdFont$(89) = "XR1 XU3 D2 F1 R2 U3 D4 G1 L1"                       'yăStdFont$(90) = "XR1 XU3 R3 G3 R3"                                   'zăăStdFont$(91) = "XR7 L1 H1 U3 L1 R1 U3 E1 R1"                        '{ăStdFont$(92) = "XR4 U8"                                             '|ăStdFont$(93) = "XR1 R1 E1 U3 R1 L1 U3 H1 L1"                        '}ăStdFont$(94) = "XR2 XU7 E1 F1 E1"                                   '~ăăEND SUBăăDavid A. Wicker                MATRIX SCREEN PAINT DEMO       david@fastlane.net             01-28-96 (11:23)       QB, QBasic, PDS        59   1262     MPAINT.BAS  DEFINT A-Ză' * Matrix Paint (C) 1996+ David A. WickerăăCLSăLOCATE 12, 1ăPRINT "MATRIX SCREEN PAINT DEMO"ăPRINT "Use arrow keys (with NUM-LOCK lit), and [CR] to paint region"ăPRINT "[ESC] to exit demo."ăPRINTăINPUT "", A$ăăSCREEN 1ăDEF FNR (A) = INT(RND * A)ăRANDOMIZE TIMERăăFOR I = 1 TO 50ă  LINE (FNR(320), FNR(200))-(FNR(320), FNR(200))ăNEXTăăAgain:ă  DOă	C = POINT(H, V)ă	PSET (H, V), 1ă	DOă	  K$ = INKEY$ă	LOOP UNTIL K$ > ""ă	IF K$ = CHR$(27) THENă	  SCREEN 0ă	  WIDTH 80ă	  LOCATE 12, 1ă	  PRINT "Matrix Screen Painter (C) 1996+ David A. Wicker"ă	  ENDă	END IFă	PSET (H, V), Că	IF K$ = "8" THEN V = V - 5ă	IF K$ = "2" THEN V = V + 5ă	IF K$ = "4" THEN H = H - 5ă	IF K$ = "6" THEN H = H + 5ă  LOOP UNTIL K$ = CHR$(13)ă  PSET (H, V), 1ăă  DOă	OK = 1ă	FOR I = 0 TO 199ă	  FOR J = 0 TO 319ă		IF POINT(J, I) = 1 THENă		  IF POINT(J + 1, I) = 0 THEN PSET (J + 1, I), 1: OK = 0ă		  IF POINT(J, I + 1) = 0 THEN PSET (J, I + 1), 1: OK = 0ă		END IFă		IF POINT(319 - J, 199 - I) = 1 THENă		  IF POINT(318 - J, 199 - I) = 0 THEN PSET (318 - J, 199 - I), 1: OK = 0ă		  IF POINT(319 - J, 198 - I) = 0 THEN PSET (319 - J, 198 - I), 1: OK = 0ă		END IFă	  NEXTă	NEXTă  LOOP UNTIL OK = 1ă  SOUND 800, .1ăăGOTO AgainăJason Plackey                  MODE-X SCROLL                  Prodigy                        Unknown Date           QB, QBasic, PDS        80   2413     XSCROLL.BAS '  Regarding the example code...  Change the delay% value toă'accommodate your CPU's speed.  The TIMER function isă'relatively inaccurate when dealing with fractions of aă'second, and I had insufficient space to include my own timeră'routine.ă'       ă'  If you have any questions, feel free to ask.ă'Happy coding!     Jason PlackeyăăDECLARE SUB ModeX ()ăDECLARE SUB OutPort (PortAddr&, vh%, vl%)ăDECLARE SUB Standard ()ăDECLARE SUB SetVOffset (Offset&)ă                                                           ăSCREEN 13: DEF SEG = &HA000: CALL ModeXă                                                           ăFOR count% = 0 TO 63ă  redval& = count%ă  greenval& = 256 * count%ă  blueval& = 65536 * count%ă  rgbval& = blueval& + greenval& + redval&ă  PALETTE count%, redval&ă  PALETTE count% + 64, greenval&ă  PALETTE count% + 128, blueval&ă  PALETTE count% + 192, rgbval&ăNEXT count%ă                                                           ăFOR Offset& = 0 TO 15999ă  rgbbase% = Offset& MOD 64ă  POKE Offset&, rgbbase%ă  POKE Offset& + 16000, rgbbase% + 64ă  POKE Offset& + 32000, rgbbase% + 128ă  POKE Offset& + 48000, rgbbase% + 192ăNEXT Offset&ă                                            ăOffset& = 0: OffsetInc% = 80: Frame% = 0ă                                                    ăDOă  Offset& = Offset& + OffsetInc%ă  CALL SetVOffset(Offset&): WAIT &H3DA, 8ă  Frame% = Frame% + 1ă    IF Frame% = 99 THEN OffsetInc% = 81ă    IF Frame% = 199 THEN OffsetInc% = 79ă    IF Frame% = 299 THEN OffsetInc% = 80ă    IF Frame% = 499 THEN OffsetInc% = -80ă    IF Frame% = 599 THEN OffsetInc% = -79ă    IF Frame% = 699 THEN OffsetInc% = -81ă    IF Frame% = 799 THEN OffsetInc% = -80ă    IF Frame% = 899 THENă      CLS : PALETTEă      CALL SetVOffset(0): CALL Standardă      ENDă    END IFă  FOR delay% = 1 TO 1000: NEXT delay%ăLOOPăăSUB ModeXă  CALL OutPort(&H3C4, 6, 4): CLSă  CALL OutPort(&H3D4, 227, 23)ă  CALL OutPort(&H3D4, 0, 20)ă  CALL OutPort(&H3C4, 15, 2)ăEND SUBăăSUB OutPort (PortAddr&, vh%, vl%)ă  OUT PortAddr&, vl%: OUT PortAddr& + 1, vh%ăEND SUBăăSUB SetVOffset (Offset&)ă  V& = Offset&ă  CALL OutPort(&H3D4, V& \ 256, 12)ă  CALL OutPort(&H3D4, V& AND 255, 13)ăEND SUBăăSUB Standardă  CALL OutPort(&H3C4, 14, 4)ă  CALL OutPort(&H3D4, 163, &H17)ă  CALL OutPort(&H3D4, 64, &H14)ă  CALL OutPort(&H3C4, 15, &H2)ăEND SUBăăEarl Montgomery                HORIZONTAL SCREEN SCROLL       FidoNet QUIK_BAS Echo          02-01-96 (01:22)       QB, QBasic, PDS        51   1512     HZSCROLL.BAS REM I have not figured out how to keep that horizontal line fromă REM appearing at the bottom of the screen. If any of you graphicsă REM gurus know, please tell me!ă REM By Earl Montgomeryă RANDOMIZE TIMERă KEY(10) ONă ON KEY(10) GOSUB endofprogramă ST% = 4ă PRINT "Once the figure is drawn press any key to RESTART scroll."ă PRINT "                                          ^^^^^^^";ă PRINT : PRINT "Exit this program by pressing the <F10 Key!!>"ă PRINT "PRESS ANY KEY TO BEGIN"ă SLEEP (100)ă PI = 3.141593: DEF FNX (A) = (SIN(A) + 1) * 300ă DEF FNY (A) = (COS(A) + 1) * 150: A = 0: B = 0ă SCREEN 9: COLOR 8, 0ă PALETTE 8, 0ătryagain:ă AA = RND * 20: BB = RND * 20: T = RND * 8ă IF AA = BB% THEN GOTO tryagain:ă IF AA < 8 OR BB < 8 THEN GOTO tryagaină IF T < 6 THEN T = 6ă FOR X = 0 TO PI * 2 STEP PI / AA / Tă A = A + PI / AA: B = B + PI / BB: LINE (FNX(A), FNY(A))-(FNX(B), FNY(B))ă NEXTă PAINT (2, 2), 8, 8ă PAINT (638, 2), 8, 8ă PAINT (2, 238), 8, 8ă PAINT (2, 638), 8, 8ă FOR H% = 0 TO 610 STEP 16ă FOR V% = 0 TO 320 STEP ST%ă LOCATE 24, 2: PRINT "This is a test of the emergency broadcast system. ";ăchoosecolor:ă f% = RND * 15ă IF f% = 8 THEN GOTO choosecoloră PAINT (H%, V%), f%, 8ă NEXT: NEXTăscroll:ă FOR X% = 1 TO 63ă OUT &H3D4, 13: OUT &H3D5, X%ă SOUND 32000, 2ăpickagain:ă fg% = RND * 15ă IF fg% = 8 THEN GOTO pickagaină PALETTE fg%, X%ă NEXTă SLEEP (100)ă GOTO scrollăendofprogram:ă OUT &H3D4, 13: OUT &H3D5, 0: CLS : COLOR 15, 0: PALETTE: ENDăăMichael Teator                 BOUNCING BOXES                 mhscards@aol.com               04/94 (00:00)          QB, QBasic, PDS        140  5669     BOUNCER.BAS ' Bouncer by Michael Teator    April 1994ă'ă' Sorry for the lack of documentation, this was written quikly as a demo toă' a friend.  The program could probably be faster with some creative thinking.ă' The move function could be used for almost anything, like a screen saver, oră' maybe a paddleball game.  If you want to use it, go ahead, just as long asă' you mention my name somewhere.  I have many QBasic creations, but now I'mă' planning on learning C so I won't have time to create anything new.  I'llă' just finish the programs I have now and release them on America Online asă' public domain.  I will, however, discuss QBasic with anyone that would likeă' to.  Send me E-Mail at:     AOL -         Skeptreă'                             Internet -    skeptre@f11.n3626.z1.fidonet.orgă'                             (alternate) - skeptre@aol.comă' Note: the speed checking routine can be deleted below.  I added that justă' because I was playing with the moving bar thing and thought it would beă' neat to add.  I'm not sure how well it determines the number of boxes toă' use, as I've only run it on my 486DX 33, on which it ends up with 16 boxesă' at an enjoyable speed.  Still, even 25 or 30 boxes are interesting.  Theă' maximum number of boxes is 32,767, but that is limited by the availableă' DOS memory.  I've tried up to 5000, but its slow and you can't tell theă' boxes apart.  100 is the maximum number that doesn't fill the screen up tooă' much.ăăDECLARE FUNCTION Move (xp%, yp%, xra%, yra%, n%)ăăDEFINT A-ZăăOPTION BASE 1ăăCONST upleft = 1, upright = 2, downright = 3, downleft = 4ăăRANDOMIZE TIMERăSCREEN 13ăă' Speed checking routineăPRINT "Please wait while I determine the"              ' \ăPRINT "number of boxes to use . . ."                   '  \ăPRINT                                                  '   |ătime1! = TIMER                                         '   |ăa = 220                                                '   |ăFOR t = 1 TO 10                                        '   |ă     c = INT(RND * 15) + 1                             '   |ă     COLOR c                                           '   |ă     FOR n = 1 TO 40                                   '  /ă          FOR i = 4 TO 25                              ' |ă               LOCATE i, n: PRINT STRING$(1, a);       ' \ă          NEXT                                         '   \ă     NEXT                                              '    > Delete this if you don't want it to check your speed.ă     FOR n = 40 TO 1 STEP -1                           '   /ă          FOR i = 4 TO 25                              ' /ă               LOCATE i, n: PRINT STRING$(1, " ");     ' |ă          NEXT                                         '  \ă     NEXT                                              '   |ăNEXT                                                   '   |ătime2! = TIMER                                         '   |ătotal! = time2! - time1!                               '   |ăscore! = 110 / total!                                  '   |ăans = INT(score!)                                      '  /ăGOTO gotans                                            ' /ăătop:ăPRINT SPACE$(37);ăLOCATE , 1: PRINT "Current number of boxes:"; ansăCLEARăPRINT "                                     "ăPRINT "Less boxes = faster display.         "ăPRINT "                                     "ăPRINT "How many boxes would you like (press "ăPRINT SPACE$(37);ăLOCATE , 1: INPUT ; "ENTER to end)? ", ansăIF ans = 0 THEN SYSTEMăăgotans:ăCLSămax = ansăăDIM xr(max), yr(max), x(max), y(max), dir(max)ăăFOR num = 1 TO maxă     xr(num) = INT(RND * 20)ă     yr(num) = INT(RND * 20)ă     x(num) = INT(RND * (320 - xr(num) * 2)) + xr(num)ă     y(num) = INT(RND * (200 - yr(num) * 2)) + yr(num)ă     dir(num) = INT(RND * 4) + 1ăNEXTăăLClr = 16: HiClr = 55ăCounter = LClrăăDOă     BoxClr = Counteră     Counter = Counter + 1ă     IF Counter > HiClr THEN Counter = LClră     FOR num = 1 TO maxă          LINE (x(num) - xr(num), y(num) - yr(num))-(x(num) + xr(num), y(num) + yr(num)), BoxClr, B'Fă          dir(num) = Move(x(num), y(num), xr(num), yr(num), dir(num))ă          SELECT CASE dir(num)ă               CASE downleft: y(num) = y(num) + 1: x(num) = x(num) - 1ă               CASE upleft: y(num) = y(num) - 1: x(num) = x(num) - 1ă               CASE downright: y(num) = y(num) + 1: x(num) = x(num) + 1ă               CASE upright: y(num) = y(num) - 1: x(num) = x(num) + 1ă          END SELECTă     NEXTăLOOP UNTIL INKEY$ <> ""ăGOTO topăăDEFSNG A-ZăFUNCTION Move (xp%, yp%, xra%, yra%, n%)ă    ă     DEFINT A-Ză     ul = yra: ll = xra: bl = 199 - yra: rl = 319 - xraă     SELECT CASE nă     CASE upleftă          IF yp > ul THENă               IF xp > ll THEN Move = upleft ELSE Move = uprightă          ELSEă               IF xp > ll THEN Move = downleft ELSE Move = downrightă          END IFă     CASE uprightă          IF yp > ul THENă               IF xp < rl THEN Move = upright ELSE Move = upleftă          ELSEă               IF xp < rl THEN Move = downright ELSE Move = downleftă          END IFă     CASE downrightă          IF yp < bl THENă               IF xp < rl THEN Move = downright ELSE Move = downleftă          ELSEă               IF xp < rl THEN Move = upright ELSE Move = upleftă          END IFă     CASE downleftă          IF yp < bl THENă               IF xp > ll THEN Move = downleft ELSE Move = downrightă          ELSEă               IF xp > ll THEN Move = upleft ELSE Move = uprightă          END IFă     END SELECTăăEND FUNCTIONăăRolf Genster                   SIMPLE ANIMATION IN PB         Rolf@ice.prima.ruhr.de         07-11-95 (22:01)       PB                     119  2944     ANIMATE.BAS 'Program Name     : ANIMATE.BASă'Description      : Simple animation in PowerBASICăăDEFINT A-ZăDIM Array1( 2000 )ăDIM Array2( 2000 )ăDIM a$( 40 )ăăRESTORE ShipăFOR i = 1 TO 20ă  READ a$( i )ăNEXT iăăapage = 1ăvpage = 0ădsp   = 0ăhs    = 3 'Horz Sizeăvs    = 2 'Vert Sizeăho    = 4 'Horz Offsetăvo    = 4 'Vert OffsetăSCREEN 9,, apage, vpageăGOSUB ShipUpMkăhs = 3: vs = 2: ho = 4: vo = 4ăGOSUB ShipDnMkăăd  = 1ăx1 = 280ăIdle:ă  k$ = UCASE$( INKEY$ ): IF k$ = CHR$( 27 ) THEN SYSTEMă  GOSUB movchară  SWAP apage, vpageă  SCREEN,, apage, vpageă  FOR Dly = 1 TO 500: NEXT Dlyă  IF vos > 275 THEN d = 0ă  IF vos < 3 THEN d = 1ă  GOTO IdleăENDăăShipUpMk:ă  FOR j = 1 TO 20ă    FOR i = 1 TO LEN( a$( j ))ă      t$ = MID$( a$( j ), i, 1 )ă      ' K  0 blackă      ' B  1 Blueă      ' G  2 Greenă      ' C  3 Cyană      ' R  4 Redă      ' M  5 Magentaă      ' N  6 Brownă      ' W  7 Whiteă      ' A  8 Grayă      ' b  9 Light Blueă      ' g 10 Light Greenă      ' c 11 Light Cyană      ' r 12 Light Redă      ' m 13 Light Magentaă      ' y 14 Yellowă      ' w 15 Bright Whiteă      fg = INSTR( "BGCRMBWAbgcrmyw", t$ )ăă      LINE( 0 + ho, 0 + vo ) - ( hs + ho, vs + vo ), fg, bfă      ho = ho + 2ă    NEXT iă    ho = 4: n = n + 1: vo = vo + 2ă  NEXT jăă  x1 = 0: y1 = 0: x2 = 74: y2 = 50ă  GET( x1, y1 ) - ( x2, y2 ), Array1ăRETURNăăShipDnMk:ă  RESTORE Shipă  FOR j = 20 TO 1 STEP - 1ă    FOR i = 1 TO LEN( a$( j ))ă      t$ = MID$( a$( j ), i, 1 )ă      fg = INSTR( "BGCRMBWAbgcrmyw", t$ )ă      LINE( 0 + ho, 0 + vo ) - ( hs + ho, vs + vo ), fg, bfă      ho = ho + 2ă    NEXT iă    ho = 4: n = n + 1: vo = vo + 2ă  NEXT jăă  x1 = 0: y1 = 0: x2 = 74: y2 = 50ă  GET( x1, y1 ) - ( x2, y2 ), Array2ăRETURNăăMovChar:ă  CLSă  IF d = 1 THENă    vos = vos + 3ă    PUT( x1, y1 + vos ), Array2ă  ELSEă    vos = vos - 3ă    PUT( x1, y1 + vos ), Array1ă  END IFă  Dsp = 1ăRETURNăăShip:ăDATA "                bb                "ăDATA "               BBBB               "ăDATA "               BBBB               "ăDATA "                BB                "ăDATA "              AABBAA              "ăDATA "             AGGCCGGA             "ăDATA "            AGGGCCGGGA            "ăDATA "           AGGGGGGGGGGA           "ăDATA "           AGGGGGGGGGGA           "ăDATA "  y       AGGGGGGGGGGGGA       y  "ăDATA " ACA     AADGGGGGGGGGGRAA     ACA "ăDATA " ACA   AAGGGRGGGmmGGGRGGGAA   ACA "ăDATA " ACGAAAGGGGGRGGmmmmGGRGGGGGAAAGCA "ăDATA " ACGGGGGGGGGGRGmmmmGRGGGGGGGGGGCA "ăDATA " GGGGGGGGGGGGRGmGGmGRGGGGGGGGGGGG "ăDATA " AACGGGGGGGRGGGGGGGGGGRGGGGGGGCA  "ăDATA "    ACCGGGRRRRRRRRRRRRRRGGGCCA    "ăDATA "      AGGRRRRRAAAAARRRRRRGGA      "ăDATA "       ARRRRAAA    AAARRRRA       "ăDATA "        RRyR          RyRR        "ăMJS                            STARWARS SCREEN SCROLL         Rolf@ice.prima.ruhr.de         01-18-96 (08:17)       PB                     130  3037     STARWARS.BAS$hugeăădeflng a-zăăscreen 9,,0,0                          ' To have some more pagesăădim huge Position(0400,0:1) as integer ' Array with Positios f. virt. Screenădim CharTable(0:255,0:13) as byte      ' ASCII-Tableădim ScrollScreen(0:400,0:79) as byte   ' Screen with Scroll-InfosăăCharHeight=14ăăy=0ăIncY=2ăfor z=0 to 400ă call r3d22d(320,y,z,x2,y2)          ' to get some "good" 3D'să Position(z,0)=x2                    ' outermost right borderă Position(z,1)=y2                    ' 2D-Y-Position calculated from 3D-Pos.ă incr y,IncYănextăă' Simple CharTableReadădef seg=&HA000ăfor a=0 to 255ă locate 1,1ă print chr$(a);ă CharPtr=0ă for y=0 to CharHeight-1ă  CharTable(a,y)=peek(CharPtr)        ' read ASCII-Tableă  incr CharPtr,80ă nextănextăădata 7ădata -1,"ÚÄÄÄÄÄÄÄÄÄÄÄż"ădata -1,"ł This is a ł"ădata -1,"ł  TEST !!  ł"ădata -1,"ł  written  ł"ădata -1,"ł  by  MJS  ł"ădata -1,"ł  in 1996  ł"ădata -1,"ŔÄÄÄÄÄÄÄÄÄÄÄŮ"ăăread WorkLinesădim ScrollText$(WorkLines),ScrollCenter(WorkLines)ăfor a=1 to WorkLinesă read ScrollCenter(a),ScrollText$(a)          ' read Text to scrollănextăăVisualPage=0:LastPage=1ăScrollScreenMax=CharHeight*4ăScrollLine=1ăScrollLineSub=0ăColorDiv=(ScrollScreenMax/14)ăăr=0ăfor a=1 to 15              ' set colors (black -> white)ă out &H3c8,aă for b=1 to 3ă  out &H3c9,ră nextă incr r,4ănextăfor a=1 to 15ă palette a,aănextăăwhile len(inkey$)=0ă screen 9,,LastPage,VisualPageă line (0,0)-(639,349),0,bf                ' quicker than CLS :)ă for y=ScrollScreenMax-1 to 1 step -1ă  y2=y-1ă  for x=0 to 79ă   ScrollScreen(y,x)=ScrollScreen(y2,x)   ' scroll 'up'ă  nextă nextă h$=ScrollText$(ScrollLine)ă select case ScrollCenter(ScrollLine)     ' centering lineă case -1ă  StartPos=40-(len(h$)\2)ă case elseă  StartPos=ScrollCenter(ScrollLine)ă end selectă for c=1 to len(h$)                       ' read Lines of charactersă  ScrollChar=asc(mid$(h$,c,1))ă  ScrollScreen(0,StartPos)=CharTable(ScrollChar,ScrollLineSub)ă  incr StartPosă nextă incr ScrollLineSubă if ScrollLineSub=CharHeight thenă  ScrollLineSub=0ă  incr ScrollLineă  if ScrollLine>WorkLines then ScrollLine=1ă end ifă for y=0 to ScrollScreenMax-1         ' show 'viewable' scroll-Textă  RealY=349-Position(y,1)             ă  OldY=349-Position(y+1,1)ă  MaxX=Position(y,0)ă  WorkX=-320ă  for x=0 to 79ă   ScrollByte=ScrollScreen(y,x)ă   if (ScrollByte>0) thenă    OldX=(((MaxX*WorkX)\320)*4)+320ă    for b=7 to 0 step -1ă     incr WorkXă     RealX=(((MaxX*WorkX)\320)*4)+320ă     if bit(ScrollByte,b) then line (OldX,OldY)-(RealX,RealY),15-(y\ColorDiv),bfă     OldX=RealXă    nextă   elseă    incr WorkX,8ă   end ifă  nextă nextă LastPage=VisualPageă VisualPage=((VisualPage+1) and 1)    ' switch PagesăwendăăendăăSUB r3d22d(x1, y1, z, x2, y2)   ' calculate 3D -> 2Dă' Depth=128ă' x2=(x1*depth)/(z+depth)ă  z2 = z + 128ă  x2 = x1ă  SHIFT LEFT x2, 7ă  x2 = x2 \ z2ă  y2 = y1ă  SHIFT LEFT y2, 7ă  y2 = y2 \ z2ăEND SUBăCarl Gorringe                  FLI/FLC ANIMATION PLAYER       FidoNet QUIK_BAS Echo          02-01-96 (08:34)       QB, QBasic, PDS        365  11569    FLIPLAY.BAS '----------------------------------------------------ă'  FLIPLAY.BAS - FLI/FLC Animation Flic Player v2.0ă'----------------------------------------------------ă'       (c) Carl Gorringe 2/1/96ă'ă' This program will play an animation flică'       FLI or FLC file in SCREEN 13.ă'ă'   This will only work with 320 x 200 flics.ă' Although I have speeded up the program someă' by using POKEs instead of PSET to displayă' on the screen, there is still much to be doneă' to speed things up. For example, disk accessă' could be greatly speeded up by buffering largeă' portions of the file to memory before decodingă' it.ă'ă'    Released to the Public Domain.ă'  You may use this any way you see fit,ă'  just remember to give credit whereă'  credit is due. This program is providedă'  "AS IS", therefore I am not responsibleă'  for any consequences of using it.ă'ă' I can be contacted be sending a message to:ă' CARL GORRINGE at FIDOnet's QUICK_BAS echo oră' Internet e-mail: <carl.gorringe@rhosoft.com>ă'ă'------------------------------------------------ăăCONST FALSE = 0ăCONST TRUE = NOT FALSEăăTYPE FLIheaderTypeă	Size AS LONG               'Size (in bytes) of entire Flic fileă	ID AS INTEGER              'Always &hAF11 for FLI filesă	Frames AS INTEGER          'Number of Frames (not including ring frame)ă	Xres AS INTEGER            'Always 320 for FLI filesă	Yres AS INTEGER            'Always 200 for FLI filesă	ColorBits AS INTEGER       'Always 8 for FLI files (bits per pixel)ă	Flags AS INTEGER           'Always 0 for FLI filesă	Speed AS INTEGER           'Pauses 1/70 second between frames (FLI only)ă	Reserved AS STRING * 110ăEND TYPEăăTYPE FLIframeChunkTypeă	Size AS LONG               'Size of frame chunk, including headeră	ID AS INTEGER              'Always &hF1FA for FLI filesă	Chunks AS INTEGER          'Number of subordinate chunks in frame chunkă	Reserved AS STRING * 8ăEND TYPEăăTYPE FLIdataChunkTypeă	Size AS LONG               'Size of data chunk, including headeră	ID AS INTEGER              'Data Type ID (see below)ăEND TYPEăă'-- Data Type ID has following values: --ă'        4  - COLOR256 : Change Palette using values 0-255 for RGBă'        7  - SS2      : (FLC) Word Aligned Delta Compression (Pixel Data)ă'        11 - COLOR64  : Change Palette using values 0-63 for RGBă'        12 - LC       : Byte Aligned Delta Compression (Pixel Data)ă'        13 - BLACK    : Black Screenă'        15 - BRUN     : Byte Run Length Compression (Pixel Data)ă'        16 - COPY     : Bitmap of entire image (Pixel Data)ăăDECLARE SUB FLIplay (FileName$, ErrCode%)ăă'---------------------------------------------------------------------------ăă'--- Credits ---ă	SCREEN 0: WIDTH 80, 25ă	CLSă	PRINT "FLIPLAY.BAS v2.0 - Programmed by Carl Gorringe <carl.gorringe@rhosoft.com>"ă	PRINTă	PRINTăă'--- Input File Name ---ă	PRINT "Enter FLI or FLC File Name with extension (Enter=Quit):"ă	INPUT "> ", FileName$ăă	IF LTRIM$(RTRIM$(FileName$)) = "" THEN ENDă	IF INSTR(FileName$, ".") = 0 THEN FileName$ = FileName$ + ".FLI"ăă'--- Setup Screen ---ă	SCREEN 13ă	CLSă	LOCATE 25, 1: PRINT "Loading "; FileName$;ă	LOCATE 1, 1ăă'--- Simple File Exist Checking ---ă	FileNum% = FREEFILEă	OPEN FileName$ FOR INPUT AS FileNum%ă	CLOSE FileNum%ăă'--- Play Animation Flic ---ă	CALL FLIplay(FileName$, ErrCode%)ăă	IF ErrCode% > 0 THENă		LOCATE 3, 1ă		PRINT "Error Occured! : ErrCode ="; ErrCode%ă	END IFăă'--- Pause to Exit ---ă	I$ = INPUT$(1)ă	SCREEN 0: WIDTH 80, 25: CLSă	ENDăăSUB FLIplay (FileName$, ErrCode%)ăă' (c) Carl Gorringe  2/1/96  << v2.0 >>ă'-----------------------------------------ă'  Plays a FLI or FLC Animation Flic File.ă'  Make sure graphics mode is set toă'  SCREEN 13 before entering. Also,ă'  this doesn't check if FileName$ exists!ă'  ErrCode% is Error Code returned: 0=OKă'-----------------------------------------ă'<< Done - Tested OK >>ăăDIM Header AS FLIheaderTypeăDIM FrameChunk AS FLIframeChunkTypeăDIM DataChunk AS FLIdataChunkTypeăDIM Byte AS STRING * 1ăăErrCode% = 0ăăFileNum% = FREEFILEăOPEN FileName$ FOR BINARY AS FileNum%ăă'--- Get the File's Header ---ă	GET #FileNum%, , Headerăă	IF Header.ID <> &HAF11 AND Header.ID <> &HAF12 THENă		ErrCode% = 1            '<-- Not a FLI or FLC file (error)ă		CLOSE FileNum%ă		EXIT SUBă	END IFă	IF Header.Xres <> 320 OR Header.Yres <> 200 THENă		ErrCode% = 2            '<-- Not a 320x200x256 Color Flic (error)ă		LOCATE 21, 1: PRINT "Xres:"; Header.Xres;ă		LOCATE 22, 1: PRINT "Yres:"; Header.Yres;ă		LOCATE 23, 1: PRINT "ColorBits:"; Header.ColorBits;ă		LOCATE 1, 1ă		CLOSE FileNum%ă		EXIT SUBă	END IFăă'--- Loop Thru Each Frame ---ă	DEF SEG = &HA000ă	FOR Frame% = 1 TO Header.Framesăă		'*** FRAMES: Displays Frame Number in Upper-Left Corner ***ă		LOCATE 1, 1: PRINT Frame%;ă	  ă		FramePos& = LOC(FileNum%)        '<-- Needed? --ă		GET #FileNum%, , FrameChunkăă		IF FrameChunk.ID = &HF1FA THENă		  ă			FOR Chunk% = 1 TO FrameChunk.Chunksă				ă				DataPos& = LOC(FileNum%)        '<-- Needed? -- << v1.1 >>ă				GET #FileNum%, , DataChunkăă				SELECT CASE DataChunk.IDă				 CASE 4, 11        '--*-- COLOR256/COLOR64: Change Palette --*--ă				  ă					Index% = 0ă					GET #FileNum%, , PacketNum%ă					FOR A% = 1 TO PacketNum%ă						GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă						GET #FileNum%, , Byte: ChangeByte% = ASC(Byte)ă						Index% = Index% + SkipByte%ă						IF ChangeByte% = 0 THEN ChangeByte% = 256ă						FOR B% = 1 TO ChangeByte%ă							GET #FileNum%, , Byte: RedByte% = ASC(Byte)ă							GET #FileNum%, , Byte: GreenByte% = ASC(Byte)ă							GET #FileNum%, , Byte: BlueByte% = ASC(Byte)ă							IF DataChunk.ID = 4 THENă								'-- Change Palette (0-255) --ă								OUT &H3C8, Index%ă								OUT &H3C9, RedByte% \ 4ă								OUT &H3C9, GreenByte% \ 4ă								OUT &H3C9, BlueByte% \ 4ă							ELSEă								'-- Change Palette (0-63) --ă								OUT &H3C8, Index%ă								OUT &H3C9, RedByte%ă								OUT &H3C9, GreenByte%ă								OUT &H3C9, BlueByte%ă							END IFă							Index% = Index% + 1ă						NEXT B%ă					NEXT A%ă				ă				 CASE 12           '--*-- LC: Byte Aligned Delta Compression --*--ăă					GET #FileNum%, , StartLine%ă					GET #FileNum%, , Byte: NumLines% = ASC(Byte)ă					LinePos& = StartLine% * 320&ă					GET #FileNum%, , Byte: StartByte% = ASC(Byte)ă					FOR Y% = 1 TO NumLines%ă						GET #FileNum%, , Byte: PacketByte% = ASC(Byte)ă						X% = StartByte%ă						FOR A% = 1 TO PacketByte%ă							GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							X% = X% + SkipByte%ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									'DEF SEG = &HA000ă									POKE LinePos& + X%, PixelByte%ă									'DEF SEGă									X% = X% + 1ă								NEXT B%ă							ELSEă								FOR B% = 1 TO SizeByte%ă									GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							END IFă						NEXT A%ă						LinePos& = LinePos& + 320ă					NEXT Y%ă					GET #FileNum%, , Byte      '<-- Needed? --ă				ă				 CASE 7  '--*-- SS2: Word Aligned Delta Compression (FLC Only)--*--ăă					LinePos& = 0ă					GET #FileNum%, , NumLines%ă					FOR Y% = 1 TO NumLines%ă						''LastPixel% = -1    '<-- For ODD Width Flics (not used)ă						DOă							GET #FileNum%, , Word%ă							WordType% = (Word% AND &HC000)ă							SELECT CASE WordType%ă								CASE 0: PacketCount% = Word%ă								CASE &H8000: LastPixel% = (Word% AND &HFF)ă								CASE &HC000: LinePos& = LinePos& + (Word% * -320&)ă							END SELECTă						LOOP UNTIL WordType% = 0ă						X% = 0ă						FOR A% = 1 TO PacketCount%ă							GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							X% = X% + SkipByte%ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								'GET #FileNum%, , PixelWord%ă								'PixelByte1% = PixelWord% AND &HFFă								'PixelByte2% = PixelWord% \ 255  'Don't Work for Neg #ă								GET #FileNum%, , Byte: PixelByte1% = ASC(Byte)ă								GET #FileNum%, , Byte: PixelByte2% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									POKE LinePos& + X%, PixelByte1%ă									POKE LinePos& + X% + 1, PixelByte2%ă									X% = X% + 2ă								NEXT B%ă							ELSEă								FOR B% = 1 TO SizeByte%ă									'GET #FileNum%, , PixelWord%ă									GET #FileNum%, , Byte: PixelByte1% = ASC(Byte)ă									GET #FileNum%, , Byte: PixelByte2% = ASC(Byte)ă									'POKE LinePos& + X%, (PixelWord% AND &HFF)ă									'POKE LinePos& + X% + 1, (PixelWord% \ 255)ă									POKE LinePos& + X%, PixelByte1%ă									POKE LinePos& + X% + 1, PixelByte2%ă									X% = X% + 2ă								NEXT B%ă							END IFă						NEXT A%ă						''-- Following is for ODD Width Flics (not used) --ă						''IF LastPixel% > -1 THENă						''   POKE LinePos& + Header.Xres - 1, LastPixel%ă						''END IFă						LinePos& = LinePos& + 320ă					NEXT Y%ă				ă				 CASE 13           '--*-- BLACK: Black-Out Screen --*--ă					CLSă				ă				 CASE 15           '--*-- BRUN: Byte Run Length Compression --*--ă				  ă					LinePos& = 0ă					FOR Y% = 1 TO 200ă						GET #FileNum%, , Byteă						X% = 0ă						DOă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								FOR B% = 1 TO SizeByte%ă									GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							'ELSEIF SizeByte% = 0 THEN       '*** Test ***ă							ELSEă								GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							END IFă						LOOP UNTIL X% >= 320ă						LinePos& = LinePos& + 320ă					NEXT Y%ă					GET #FileNum%, , Byte         '<-- Needed? --ăă				 CASE 16           '--*-- COPY: Bitmap of Entire Image --*--ăă					FOR P& = 0 TO 64000ă						GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă						POKE P&, PixelByte%ă					NEXT P&ă				ă				 CASE ELSE         '--*-- Unknown Data Chunk, so Skip Over --*--ăă					'*** Test ***ă					'LOCATE 24, 1: PRINT "Chunk:"; Chunk%; "  Unknown Data:"; DataChunk.ID;ă					'I$ = INPUT$(1)ă					'LOCATE 24, 1: PRINT "                                 ";ăă					'SEEK FileNum%, LOC(FileNum%) - LEN(DataChunk) + DataChunk.Sizeă					SEEK FileNum%, DataPos& + DataChunk.Size + 1    '<< v1.1 >>ăă				END SELECTă		  ă			NEXT Chunk%ăă		ELSE  '--- Unknown Frame Chunk, so Skip Over ---ăă			'*** Test ***ă			'LOCATE 1, 5: PRINT "Unknown Frame:"; FrameChunk.ID;ă			'I$ = INPUT$(1)ă			'LOCATE 1, 5: PRINT "                      ";ăă			'SEEK FileNum%, LOC(FileNum%) - LEN(FrameChunk) + FrameChunk.Sizeăă		END IFă	  ă		SEEK FileNum%, FramePos& + FrameChunk.Size + 1     '<-- Needed? --ă	  ă		'*** PAUSE: Uncomment Following Lines for a Pause Between Frames! ***ă		'LOCATE 1, 35: PRINT "Pause";ă		'I$ = INPUT$(1)ă		'LOCATE 1, 35: PRINT "     ";ăă		''NOTE: The REAL Pause should be Header.Speed * 1/70 of a second,ă		''      but because the frame updates are so slow, I didn't includeă		''      the pause here. (FLI files ONLY!)ăă	NEXT Frame%ă	DEF SEGăăCLOSE FileNum%ăăLOCATE 1, 35: PRINT " Done";     '*** Test ***ăăEND SUBăăJon Kreuzer                    3D WIREFRAME MODELS            FidoNet QUIK_BAS Echo          02-06-96 (00:00)       QB, QBasic, PDS        129  8494     3DMODELS.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"3DDS.ZIP",4^6:Z&=6102:?STRING$(50,177);ăU"%up()%9%%%#-%%JmkEx4)e,)8%%%U\%%%-%%%%Xi%ixSgRfx.*8<x\_-+ws:ExpăU"\f))aXn([EEeI/]dP9E141/hJhX?,4.D+i%5Th]d2Rseq^pf\zFDH/k+k>y6MqbăU"06bc7\nVR-*xRvipXgF/3%F0iqzYZV>XE-/3'9w;K->fGuLIco3.fDBDFaIZF<VăU"lcvJy=[4?w.1Y?q7ogZ0QV0KXSDNw15J1&he+E[j_+Z.UnZMEY/uh_#W15SUmVhăU"IlJk0sVj+]C'.0byiv3bbQM\[264:$5Iu[w(1,#$]22(h.[sRh:dBYq9&8a7&7?ăU"*COr23qlcVHa2Y+_zH?G];<>M'ZSpf)v09f/ggwF2$24I%8,WUF%bys+iNya#?;ăU"wW,sIN-e7DF9idKl7U5bt5;G[9'#3q(aeQyy4QxA#y/BA$m)gx)nbiFHrk;sWQdăU"1>zEm9vos6pECWF'xMC[];v-nw8I=Lq9S;%-n1=X3H)[.r)W9J]2%oBYNqvPu:?ăU"1gZPAq/J;]Dd=9yX'.FYLu*RxRE(hfU/Pq6]dHI(51)/C5n]2lAr#S1Pcip$=agăU"aXln2Yhc4B_(G[2u=TSMMP?L[&)VhF$;;sz3(Z%d>.W=/LMUJnOdRBbmb0;RWhXăU"A#TRxCkM40gA_cKJ;WxRdUJr,[enBhGv%F3P8'm32aRxl1HvhY^w)UAd*27;:u$ăU".mgf_8+UUS$RA?k&X.9vwxahwiCGw7QbSh&O/09<ohNMu$0.GLun'_MX:0Amr9VăU"[Gm+n[2$PiZRSXB;IZqMU^90pIGR8u1gVo>0qvHGsKeXRyg.UU2n'=jkIz<n4B'ăU"cb?T=NoZ\=7/c8+7G/M*^IG.T$XOSpLF=#MNB+&:banJWS<VPk,I6GhujWJwCmUăU"s^6$r=':Z[q5YM&Z5x4W\:m'pkqN3Sx%5(5,-_F8j'N[<_\e>K7g2GVvFk[f0l/ăU"EYb6B3%[C?l/B7>BIj9sQ1:G;8gXjE>ln-id'60]dpQjXWp$I);9-P3NV[Su8\0ăU"js_47UJ\3B0#a5TrqrfBhd-Y+tP8j[5$U.-T=GDrqU?,5X>\Gcg]P4TFGt#ThX\ăU"/.R/57mf?6vVln+=Bb(XwJL?$g&5BSW(k9.Xd<*Ju=Z(<'*IxaV$2Yan=I.gmXoăU"29;=jk39dIckPv7L(,<a:A-yyLpupvCHg?-7an.1e3g+L'ClvC[r7gODbz(5Y<CăU"H'CN-9,vNeBTeilE/snn=oq($3(X^*$-Uf3R:d:Q;tVauZqU-\+cV^]AkS8IwB(ăU"FFXnl&q&?whU.I0TvpI8Hn)zzGjXcNO5.D'ci(<ws:TSQb%#y8C)ckDVG[2yHY3ăU"snPZkbHZ0Nm<OM'1X#<EZO.CLGgD\doQ.U;xYCXyz:-XAa2Y^,Rl(qiZwM[2a<kăU"%Ev:URS%vO&-*,uqO4g/^kL-<duw<li4?LKx^Q_9i'63uL42Utoi&1ff;KAK:$VăU"V?fGCI\FvKPG5j\OhIV:=aC%64M^*V$D,s7gs0SWIg+a1^$[M,p\a\*UZIJCkhlăU"GZQV[m2K*KTmt#jELu3M;>Fsah7U'T$iR3v_Kk-Z7hyO5.sNgX+z06fVOa(nEY/ăU"C5k*L%RH'$9\>sp\Hbq=%]zn8KI:iU'pxH*_EC/$7Fm=q9YV0'\FkdN_zX>)&^wăU"y)_OJ2s[$Mp&q5GiBsI)EMVEF?PG[='4&Q-]R\&iW7LtvwXRLYlK\.CT?X6S:Z[ăU"wXAM_9Df\1+#7c0KQXj&KDnQb>Juih[T]b[BQ=9EEJF2<MF.zk>N?#CDB>lL,)4ăU"*KMl'<sd#kXDX4jTRQYwXDKKGp<PDI=&uGKbC)p[n82ngTBEz=vL-$wc-o5'I2GăU"=Kv.tk<.BtSxd&STOs'BZXIbocyE33)mc/'Q^Y0xxEG/.DFXX=n4?P4F8drWNbYăU"*X3SkivI5Irq[9lDlgM/AW8nzP\EYkS*?694U1,>kqQ=]_3Qck;noSX')Wny,qxăU"yPFuxzg-98#Hol.mVO)]ck8[eW#)=7:n(Vm?+']A*P*AGo$Zg^On7;M]W(t4YL;ăU"V+??mbTovBI,ZLJBtjRY^,[66m^9-?_XapFDs\fFUqinc6dvxu/pj3X48n=Q(i2ăU"GH/ohur#Vsb#^yO;_Hn,auxZJFms3m(hVL*DSVX(NMru'(Rl-NQdHU[::-Zml2LăU"$+a,a'T+r<94\WRRqI)GDhj)/-Si+YGGf4CP_a1\rQ0,tjXJAvpN]oFw.4nBb1aăU"t\sYNu:d;0,*mrP%<IEXo7gtLAlIb_&*ANZ=L(I-G,;8I>1KC8XN>13urea-BEAăU"m?e'XDma&8e4KbBGVTi<i]J*Zk2;S=q]Vv+ZPg>rxdf;9?X#<fM1<mX#GL<\0m#ăU">A10,a>AJ:Wn/$,j/FZVFtATIUA(3IhWX_1-s^zg'FFqb+SQ&n1H(%?QL3zGLf>ăU"9-8V3clXo[WL+R>6u(weg_WJ6?-VVB4tUvdwB>-SIf<cW6AK8;2s_b;QLMO\KO4ăU"f6a7JN'/Cf932$P6[e77m^-n,i(K_tB^AF:o=F'Jj/u==md<K/\)*pZ79;h%qs1ăU"<+Z79:2'%4Kquocm(1n-<cH89PXC[Qb)x0x;;W$uF8\P6/sJW-NdQl\J5JHNq02ăU"=vLm*6O6)B9yAeeQnJqj0.egPWjMG)hTo-A]km^krqs#^l;m)yjp4_<Nu[g2,$năU"<>vU.OH&O,,)I7_x>US[fk4weoFKYp>%R-QL7;16lvUusU2?^o+F5?b3GHgl]5GăU"ef[Aq4,5FhPoU=i=;_XYB/4+7FO.h2]gYEF%ArtxA^QOYQLuow40C[UvbPT\A=$ăU"TVJQAp]^#WwtDK$qFQR,rZj$V?(oHxO3F1-D]ZI.8lQ?GgKit[JgBCtHFCkJ-eYăU")O*l5CcU&v:5<0A*DKT]ETdj8^]^gg_DY3K8H:BJh>^,LD)#kN=WQa=X)Hi6,C9ăU"5fd)AK'(>+S8[YF)tL*y;RANVDsKf+7+#PD1mcNAopW>egZjR*<)\0s$bg,]:0lăU"F7s/V:XgCJ0j?v,mZss19naf7GUt:TDLUH>%GAYuSV27c3bhNESVsz50&[QN2':ăU"c-Fwo$Adrj:10^[C]5&D5%,dd.;ZBg;$,y.fW+k.'Kjl.22Dhc:Uk&a?lAYG%X&ăU"N?ZLB2c5$\s?4.76uY]$Gnlr>qDY7Qt+uRiJ?2W+NmU8Y:m3(V=Hb8G<fDpU_W?ăU"'9J?0]R5,Lc2AVPJS^rztj8nx0*lJ1MdB>ba/A]2L,n49ivQ_Q6>-^kC\bOXRh#ăU"Ml8mhD+<3Rh\>fIo$gllIWK3J7t#2)4*IXPuvFuWa,8dmA\AOWys.uJ)eFQ#w:SăU"$QA0irlaQ92p'^DWnIa='vjy-=p7hY*LLoBA90gW.A5pN(&fJ4z*&,2nkPDJ5cTăU"x?\UVPg7\hGC(T]jFjCqzf[_TaqSBj^PE(I[KRQey&.f]aaCQ:.7+9)T\Y*sGpEăU"d-4O?cn7MeuZGf]<W#_dt+(J7])=[]N?5N^UrqYp,U?&'YAQIZAfB$-fl-MZUbtăU"eU[]qlQhNdtQ\eS0N3vGFoHdk<cBI'Fx^[37NBOzs$23r*oL):^_Bd^anGO_/DVăU"(P\nx>dXu>..f&0,$^E9(I-Oi/N*Rgh[7d<PhQAr+5ZlQ+8hRuk,3akQTI2G-0SăU"=BU$rH%?(=2Qx<i\4+2scC+U[j.Qj>\of5lGe*_'>^u;OiTryYWK0XK9WH2ctS%ăU"5k)?%./.22*uESq&Oy/.pbA+g^tU=QdSsSpT59L:Y^4Xw44*8nsBx:_R.:_8<eKăU"ha51x%*2>naZRuqV]q_w+[rQuG8DT%B3.guhm<G'FhJ.c;&zq0;p1)#eI7N,)37ăU"CmH^nrPxNrVzRDx_NBnu>^k6;uvcX,1UT'bNj,]llmpBUBItdH6&l4,)l]3h5pQăU"r(hYw4O_]9U1&DOaxCf:&6),ivi>)j-aM4.^H33#iiLYHX,]by/QZC*lL2cnx[săU"tRgY2H,'WrkHUYf]=3l8ILxsQ;t8)Fd+j6\q(,UYF76d,XCN3,AEmscK34/g9wvăU"1Hg&t?h1P;CZN3+-E,De%PH;F4myB?GZ1o?#*FbH?3OEUN&C#c4dk(o-pihf)]ZăU"\L;0J6kL)a>2(5j3qyg#NEZ7V[lAT<cY0;,++DlTMuM>H/GK]6Meai_$n$4<jN(ăU"W8.k9(I4Mxq<RBx?jo.#I]V].9YY/'t#Ho?&m#_C/;G<hZ8<0',7]b$J>7(CgbIăU"ZC>q$j#S3w#&78%Dnk[^'X-WU)ks.pZ\XD1]B%SfCjVc$PVnjJ#$]4$_&&IZ[%WăU"mpbjN'2Bju,0L2:d^RasX?(*E+#1LE0#1P2lH,ks_lJ,&ZVtreuLnbGEV5/OpbbăU"13-E\2s'#Jp1&M&4eYtn8ObcL';2<LZe3fJ.Ux2N1pZLtMWtw?9Q=cr1VmyPyQ*ăU"KW%[OAuxU8vwshgxIe7qoXBqel$E$CTH?iplH2Y?54bjk>DpC4JJ4moIP[8<n7QăU"k>trh00\zNptAmw=1ao=m'/H%c44XqZO8*m0E,wYNnC-ptSLYtp-^7W^5fQh[,tăU"nA<b3ct9rprq6rFhmb.6x\.L^0o4,:l)g>Sgn_oR%h%:-,PU:5xNiU-\sq5)7f\ăU",/y*hq;M'2UC^AfKZAa:ISDcs=S'>E34XT_HK\f>]81C=1t'Uppv'44^V[BoiS(ăU"R*%;<O'48Ixay_Z2?-M(.B6QzC.Zm8>(6g;3KU0vCVFV#>ndqR5n,Wx&]6)[g%0ăU"J*#$^-[8jSp&l<rgIT^:R4AdiACbo7+v3SHGlg;_)Q6^Jf4X8[ri_^V[DN#(J<kăU"e6ktr3[RP&u?=><=RrEkt>hCU(L-M1p2hG$rT27#pOZL[5%vgsZohar'fzNWf7=ăU"KvuS42U_zBt<A82J,Wr;HLs\FjgW:.e/up+nfB:c4=kK+rlIlUjIo<,idhO=4GMăU"on6n,w;z27+hgHmfH4hPi;Bha=:bAE>+)C,P=S9+OD_gPH/Yf)+bByTmtJPPsPUăU"+:8l,H)Sz4)oYo\FFna2=eA8yMkRXPI*cy:uoSgbuY8Tk'aA]qIAs,zu4T83HCQăU",c-+A\hRNCt)Ck0J<chSkI$tUNW,b<7F^9tv$R/qS/L6d)jCRI9vRcnw9D)/^P;ăU":^9fYR4]GXaJE2HF8>>7ZW-D_)S-+S/:>XK%.E.'3X>(>;1[&KooE#%N2,m]XkLăU"ld;F7>i1#Cqz'j?xpSK0q3EHhmx1,<oD?Q>VDYx[KeYm;oNQoD*+mq&Q>hz&=^eăU"oOn#JAsVk:h1&.k7BvL8BWXQW?0m-1H$)jI>/q8uFvmw,Kn:#dyTd=Ms.)+GI'1ăU"u<p[.A;p0Mq>X6ubJ)bNIq5sDO5'vYTFahI4iu?/x\68sb,$i9?L8ISe:,DXd,eăU"g&>M-w,TCS84.N:QIY7pJcWYz]7q.IeM'k+WYQ)[=6f8oFV.JK7:>amfrCgaKeJăU"_A'eJO-6,SZ#qEu?m%fEVe0runwI4#Ly6/^FJ-/rQXS9gfKOKek%Z10]W1vWf$MăU"n:2BrKe^'Zkw.K)-?hPkvL3N'6#UVCmoSDslF4<o)1T2Gh^*%#^A9S+?/6]f>ZaăU"WS[?37/p*>&58NmT4a_eMZISJUj0Nt#ld7W;8'U#z#F%1(y&_jB8vLEBJ_HW&FnăU"Il<';(I\9=J$6pnTod2VRh->7>ioIfY$6FnWqJfa6YFBWNsxox6M?GBGspp0>'6ăU"1R]rL]ZBkU8bA4HZe8+.0[iH;11Ha1V3T\';Di1iAUl_i&kA%RLgKLQIV^ZmQAgăU"E(G*nKnm*]o:Tov.Wa=^]ZVfZ_$z:st&1H$C(L_YB,^XC*Y[aM=kC$KK5>yJUsoăU"gfV#FDX94.e$h>>aw81%0]mpn2B#VNB6DCv=\(7spPBwH<dm))<H6eb>x*miTy,ăU"UnRLT%L1:qYsBfu1\wr5d5$_RXhHR)#gR8QS*RE_;\XHO*-k+g%&B3>o^_3A)s[ăU"oE^5(;_R:2/T92'=D<P#+-NR'\<19)*D=?J;s0UYCoC;1:k4TBq<o+?bqVBX^$UăU"F]pP,GLV2BN8B:]ktSu$7<2<hAg$bktS$u7<2hGAg$kotS$7Z<2hAfg$ktsS$7<ăU"tHT^5_lBsr8k;t128CeOom<e_JOTzx7bzD0GSLbH8Sv1dDTFg7Y9+5_KCml=7lVăU"cnD8x#Iei[gvhPmt\:K'$>;l^[TsB;-gA+W;#ba6q?98aLx&dj&l4toP*XDmjL9ăU"jUIu5fx\/lVbz=Ks&]**sNup%()9%%%%-%)'iYE/xGO<%s%%%&n%%%%/%%%%xvzăU"f%wjSxmmu,Y]^WYK0J*1hCH-S,IY[cX3;Qyf+MOjw*&Zu384'*38_UKVc_^WO=VăU"Z^WoJV]^#W*65IE.B_2Sx]>LTfT](NWU&1ngRI)O=(%%up()%9%%%#-%QWm[E<măU"8EI/%%%%H&%%%.%%%%xm%nuXS%xmuXsYY^K=ZM,U%XUX[,#NZU-KJZY'MX[Y=[,ăU"M&Xo:Rw\9eWA)K3R-6va)1JC1C[.fO[q6mE\25\EC1=2mEq$E\e?qjO=F9nqFqhăU"[\DEKnQ[[#r2RO9[enEN^55USuE^u)5u;;a5^ENL;eeUseN_?#k;+5F5NE*Feg(ăU"y+UMV'aOLV_9^WO&/ArC1,H2qF/S6WU.+6/.(X-SX1BB-S8B5Pmi#QfDOg#af0DăU"7s3%%up(%)9%%[%-%/\rWE9J'5W$%%%%G%&%%.%%%%x%mnuW%SxmumXY\^u+IJ.ăU"]IVY[H^Kj5%f=-?CIXus10&t0.x+5==?ba?F>b=P>3JQu%K/0IW(Z%'7<n.SIg^ăU"g8n3%]c\O=_?<5+?_4K5+KU_U5+8uE;1CI03aaUN&tBB9ig8OIEfR7;5+/e_UE.ăU"81C1,Pc22qDog.C)aeBGOc2\/D1P_(1P+'\\UYL%V)?,%%up(%)9%%%%-%U\vWEăU"MGd1:.[%%%3%%%%-%%%%x%mnuS[xmu,-]^WYHKJ*1.HH-SA,Y[cGX;'zUf%%ZDsăU")<paAEYII&goW7>5d%]rk_?<5+?_4K5+KU_U5+\u_et0FeS^8WUN&>y,IV.*6/.ăU"2B_S*(TfJm]*6mE#)i=R%-%up%()9%%%%-%(bE]E>Z];T&e%%%&%&%%%.%%%%xmăU"nu%YSxmgu,]:%6iF-shhEI#._++nd'/wSi;i.foD/;#0o%u^[4oLp3wrsE/pqX<ăU"Ws6vjPoIribIUT0BnUYlhgM_t[nNF.[A^*)cd.w<Sij>LYz^42?ugSrqbHKdB_CăU"fJ8L>8P+BQS)p1qK^XrHROL;t0Y&NW12)fdOVEgG4)j8LX/XQm1eQ6LM=KcX_4;ăU"Vy,,6s&u%p&'9%%9%%%%-%%\JkEx34e,)%8%%U%\%%-%%%%%%%%%&%%E%%%%%%%ăU"%%Xii%xSgf%xup&%'9%9%%%%-1%'iYCExGO%<s%%(%n%%%%/%%%%%%%%%&%E%%%ăU"%O%8%%x%vzfw%jSxm%uup&%'9%9%%%%-.%QW[XE<mE+I/%%%%H&%%%.%%%%%%%%ăU"%&%E#%%%o%8%%x%mnuX%Sxmu%up&'%9%9%%%%-%*/rWEE9'5W&$%%%%G&%%%.%%ăU"%%%%%%%&%E%.%%L9%%%xm%nuWS%xmuu%p&'9%%9%%%%-%U\vWEMGd1:.[%%%3%%ăU"%%-%%%%%%%%%&%%E%%%%Z:%%%xmn%uSxm%uup&%'9%9%%%%-.%bE]pEZ];(Te%%ăU"(%%&%%%.%%%%%%%%%&%E[%%%3%:%%x%mnuY%Sxmu%up*+%%%%%%+%+%%n&%%&F;ăU"%%%%%ăEND SUBăCLOSE:IF S=108AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew Jones                   VARIOUS STAR-LIKE EFFECTS      FidoNet QUIK_BAS Echo          02-05-96 (22:04)       QB, QBasic, PDS        76   4997     STARS.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"STARS.ZIP",4^6:Z&=3473:?STRING$(50,177);ăU"%up()%9%%%%-%1UIdEz55$k>(%%%a.%%%1%%%%xy%fwkn%jqSg.fxdz;:>T[j9văU"=9?xZ-M2oGEwUN8+4fa+3/E57p39<w*SNX3Zy62C3LrJ#mhAFnoM6=o[?I+I,m>ăU"Jg24>aGN%J$oY[f,a<0bkXOU5X-/P'uF*Ph$#$]J/N&_s'WtD?dp0\&S0WyMAXkăU"N&4N;:kqq=k-ML[LWH$D6m+Z$^I*fVi4G(Im%U1KvG[*dX7kFCKTe#YbNA3pe%GăU"vqH9.PaT(j-F6Xi;lK2(AaEgX_3f_*9A,*(gL9Rvm5L2IZc<_;u-U3<Cx?%rxkYăU")hc^.2u/sKGf[0gG_DTBOM7/)Y;=>[#FeOTerqIq;6(K#^pm^:;&+Fnj6u?)^BMăU"jsMo%+KoF>r'*-3J2J/Odas0&T9J6*2QE=_)U2Nf+N(r:*.=s*8m&hsP+Me4cTBăU"OYS'k(;^s7Eofg6?B,]%=b+tsc[YJ5n-*(/N=SVlgGnS$&wdj9v5WzH4NDTjyj?ăU"2VW[G.-Y2S%0$vuaMz;pXDd9yojdwSk:#23F6W.z#muUc7&ejF,o:H+RY(<NPKvăU"^#looq_+Z))k4^(zRNMm4ZyW/st=Wb]X?1YPqIP+=rDFwf;x%wBWxa&GKZd%d_uăU"s33iSIRw1e'54S>C[O4=^(wQYqv2dxr<l7eH&2B<T(3SR+FOSS2wP'HgNpJc?QsăU"TXAd2)5snBEY+Q]XP*ik9aPh_[aW?Fwk8sU<]7LO6^eWi>H-IxAx]&l#;dHjMF:ăU"\]u=;6u7bngOKL(bwpL<7jps3SvB^6R>b)jL3KKHxq9k&CbWJ,vv3toJN8hYh+LăU";acr,<kEDX$7qt[oXG$s1b'QH7[c%Te;Cj)D5Xqu.mz0*Hflkhxs5r(O63niJ\yăU"?G0^FyJTN$HbRjJS(drO:fOT:..lksG,<6r6/:NCHaiSrdA_Vg;E0.tNAz/1OfGăU"mr/GCCCL$tT2MmXA(Wo,6K4/PrazkFe%.M>VdF4*s&p$F*M><0T(O.^JzQrF5J4ăU"*/;\KRl\==4[EeMLCs5wbxiv][vutB4,]DD$OcDxA=uI#:<87Y/,r<OK,KGl]U/ăU"2lP>u>\,0XJrk?Gn4$LN'DgV$RI,\:w24U.\gBXM,;=WZ%b7X<W'6#X#5r-8fnPăU"%,NV,4PDi^*jn0*x%&up(%)9%%[%-%l#hkElAhqq9%)%%L%5%%.%%%%x#yfw)%SăU"gfxNf&,>BT[9LU<ox?m<9,6NAPlo.hwsCrU''.3Ra0$Wf%eTM$7*ZCIIIdu=vn4ăU"7IJrHk#O<R*<U?-UI$$m>Jg2IF:Na'*=F9gLsr'Q/3Ef9E[W7/5B5^*K%]*?2aeăU"BInfp?NWeCOlfmbFQ2B;z[;dC.Ip>K981Fr(iB2m=bRL%,<d;[n\C1sI*+hC]*[ăU"F.,*#I6:Y2V3$oB,+6A\eIeh275OAhv'i%\0rJ%A(3Fu17c9zX6Z0c7$UH^(cAIăU"w95gNj;&#/%Pa);#GQ\DfUmw;&&k/&)t=bSJ7AK[cZ?%c%o;2D,.u*r-H77l-,YăU"^M'Q]RrOugt'$m$k4_D'oq$,V090k1qOZDoy8Ha9J1dJo4zS%jyzRAdMs4uG,;$ăU";g&bV)6FSVJ)SXClo.j=>YRi9QR>Y13[KtxA1mrH/hNeI/-Q4V)^\9Q^j<_F.:[ăU"?fH:8Cx'Os:Dsh2*/njhAK(z]1ZD0qvf4\PAWhyZSXX6d9>i2_T;AM#n5ra<RwAăU"+u&&r:7MnYJ(YUAU)ly8=ODy.LwU1LQf9dMx%KU_'(cHPz;_19e2VCSim<+2ajSăU"/re=Y<atgTn8E(W,QLdF))_<:hhP>*\tX$HY)7ymBo1fp+kWLJq)$4yA+&M+Y1năU"'T#d<zc>nlAROYCa32X].&^%(y%h6P(JcVuGNO<V.fOSp)TgJzJ^?ZPhR%cHfP_ăU"P=lb<OrIS/N]LA0<_\U.Cw.r+WPVohM<4H9QO\*7r0)/^HnZhFS'T&:E94,)#U#ăU"EK+030VLG'iy:Z_=>Tv&lJRH5[pS-+fZscmLtF.g-^,\PLJ6Ns>u\x;_i?Y9S&OăU"O<Q9[pyV+N>,uJ%Y7c?c2RCbd,8_a(1I:y(s8$LAM4_?QkSgw(a$2)V1Fc9Bc$]ăU"<+Z9BsZVFU(ft'i4+-Tw;]ejG's&#I/XRXvH&Eu)O9V4U.j0'6iufYeccU:q&d2ăU"r*JGk/[O70,#Vp?RHwuSals:C(+Nre#JfDZ9SK'CoXJiEcPu=/$46i_I;CjZSI:ăU"JPzs.%PGJnI'I4HJutZ_%j9Gk&Tcl]b,].Z%,/yIOP;$Osa=R[a#6OC;i*IjN^4ăU"d5Svb^Wbxeqb_L=B5A_JSU;ILT?atV>MT.?#WN=::rNH+jo9249ZWj%FfE^Hw(EăU"i5xN3R\05G[:AKu_I<BSrHNtu$/SxHKMwhf2CRWrFNg.UkFM=+NUS3DP56.80SNăU"cfXkCXsrdsw6>3u_uo2eQoG6,PT<hO;iB7N8OL=+^Fp4O7o$5-2#2RR7bdIb0HpăU"FM<nL?XU9:dPGY2Q_'l%eHvG^UN-gF.7I,0mxC.:ToL5<S.yql6IFpT(;TrwKVmăU"cx>rx<nTs'*DoqFU1&TcDyn_>Y$3uvcK9s*RdhHFDp]*ccuF(dQ^XN(/zTh\cNPăU"+;pdI6Rj%G*N5FH_mZCN#]rw5*&%d%up%()9%%%%-%'JhkE&6Iq&&m&%%%Q)%%%ăU"/%%%%gtzs%hjSgRfxfb98s\e45?6A)QQ'<CM_58A%'vu65[yh1L,PM&OG2't1[>ăU"jLN:*-&B<HF%JYY97EFja:ys[*2wwG.Ms4El^d:9js)0KGZGw?.nE[wu.3-ZU09ăU"Pk,eCoB^?Ck7w;joMb.'Yp]J=eO>0+c3EOlmi5_:cD;,&\33<mQ'3[<9oZW2o>$ăU"%b8X8cT3E6P-77U\x3&uCDNAOa,qsR/E=tBbm)M].Q_2G/2WD8cB[IkC8&me8E'ăU"B_N'3NHea+<0ZTF-EkT-vJ,HQ3g(dfY?p8m*f9Ipqd'/hdPob*PB(.^oNok'7K%ăU"87^S':#u#B)&AV$]m;^bfq(O8oorWENKhE%RG1^*/WYIf/mnAD>izA2cVi[rbC#ăU"BKB\Ayjt5S\&lU$IO\&b&/Nv6d+V?RxN(hvBI_)jYa6&>cDd0w$Yu[&M?_3(bQ)ăU"4gECUoC-N%ig3JsOk8>FV?HT1jHyWH*3AQZ]x]K\8k_0k>D[J*#1>tu3Q,67vGtăU"]0[\Yim.roO%a^<R&O-^&8Oz\<GBi(%up()%9%%%7-%NhdkEM96MrC&%%%)(%%%ăU".%%%%xu.wf(S#gfxD#vvtRIU5M>QKx?>[(\11;/qJJN1dW#])UCErW?Y/8V:LW>ăU"DxWPVtRFgscm74Z(pVLRB)5yN0tOYefuL9fw-.2'Qz,.Q+GTS.tv<iE7fHw]0$.ăU">&pMN>$5&,7RSJeGV,PU%,q?;^mTs*AirucPMYISOU<quUO<M_c$E'=>R>)GYJaăU"YW60Ba)V*Aq^p(N(sxr?1i?JcqbG\h&de]Z6aX<>VJA3]^T>94*#cG'pf#T?PGWăU"(l0ug1ngsuDrQ0(Gq=MX^gtwT7r7$xRWRCmJ(qXxK[;%Y]nP=Xu1QGiQ3u\zKk(ăU"tN4vj<=2QV>qrB&jX3?UUX7\JHj:H?N0;mFT7F>;Ms53*3>5'FsHT6%W=X\47VnăU"oZ4R'nb)bfPdL-=ccrb]0KUo0g?V_ctg$h+Y,f8>+\GuQFw]tFh4lK.u+Q(ZfoFăU".p9<^m4>?h[P?-b<lPY8RonZW=feRr]#Zn;c,wl0u%p()9%%%%-%%\ikLE,Ve,2ăU"1%%+%V%%%%+%%%%wjf%irj0'BmRs%zmQ'q1T-M;ATuY2Ta[ykT[a=LGTQqlumq=ăU"*U1*tqT[=+gyTauHCM9T6kEa1^b-SP?5%uo.j*TUJFlTquM;KE,qM9B5T=kA5S/ăU"soX*#5cLGox-irHx>DIIe<KG>XH3bx/$YallO6O]d9UP3_P(*/?ZDOkGWYrklA(ăU"OP)u7S:[CUr-'aqKT[KfE7TCHuKGTg%6T[eQyo,F7lwOR/wLOO_laPkejAj&A&%ăU"u%p&'9%%9%%%%-%1#UdEzV5$k>%(%%a%.%%1%%%%%%%%%&%%E%%%%%%%%%xyf%wăU"knj%qSgf%xup&%'9%9%%%%-+%lhk1Elhq(q9)%%%L5%%%.%%%%%%%%%&%E#%%%hăU"%(%%x#yfw)%Sgfx%up&'%9%9%%%%-%'JhkE&6Iq&&m&%%%Q)%%%/%%%%%%%%%%%ăU"E%%%%O-%%%gt%zshj%Sgfx%up&'%9%9%%%%-%'NhkEtM9Mr&C&%%%)(%%%.%%%%ăU"%%%%%&%E%7%%i.%%%xu.wf(S%gfxu%p&'9%%9%%%%-%\#ikE,hVe21[%%%V%%%%ăU"+%%%%%%%%%&%%E%%(%Z0%%%wjf%irju%p*+%%%%%*%%*%9#&%%6%1%%%%%ăEND SUBăCLOSE:IF S=230AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăUnknown Author(s)              3D SPACE SHUTTLE               comp.lang.basic.misc           Unknown Date           QB, QBasic, PDS        116  4382     SHUTTLE.BAS '> Years ago, there was a 3-d space-shuttle .BAS file on the local (dfw texas)ă'> bbs's that would draw a wire-frame shuttle in whatever angles you typed ină'> at a  prompt. Anyone know where I could get it nowdays?ăă10 KEY OFFă20 X=0:Y=0:Z=0:X3=0:Y3=0:Z3=0:AM=0:BM=0:CM=0:DM=0:EM=0:FM=0:GM=0:HM=0:IM=0:D=0:P=0:B=0:H=0:U=0:V=0:U1=0:V1=0ă30 DIM V(300,3),E(300)ă40 CLSă50 READ NVă60 FOR P=1 TO NVă70 READ V(P,1),V(P,2),V(P,3)ă80 V(P,1) = .12 * V(P,1)ă90 V(P,2) = .12 * V(P,2)ă100 V(P,3) = .12 * V(P,3)ă110 NEXT Pă120 READ NEă130 FOR E=1 TO NEă140 READ E(E)ă150 NEXT Eă160 SCREEN 2ă170 D=120ă180 LOCATE 1,1ă190 INPUT"INPUT  ANY 3 ANGLES (X,Y,Z)"; P0,P1,P2ă210 CLSă220 P=6.28 * P0 / 255 - 3.1416ă230 B=6.28 * P2 / 255ă240 H=6.28 * P1 / 255ă250 GOSUB 390ă260 XV = -D * CP * SH: REM ---SEE SUB.---ă270 YV = -D * CP * CHă280 ZV = -D * SPă290 REM ---PROJECT NE POINTS---ă300 FOR E=1 TO NEă310 X = V( ABS ( E ( E ) ), 1 )ă320 Y = V( ABS ( E ( E ) ), 2 )ă330 Z = V( ABS ( E ( E ) ), 3 )ă340 GOSUB 520ă350 IF E(E)>0 THEN LINE (U1*2+75,V1+20)-(U*2+75,V+20)ă360 U1 = U: V1 = Vă370 NEXT Eă380 GOTO 190ă390 CH = COS (H): SH = SIN (H)ă400 CP = COS (P): SP = SIN (P)ă410 CB = COS (B): SB = SIN (B)ă420 AM = CB * CH - SH * SP * SBă430 BM = -CB * SH - SP * CH * SBă440 CM = CP * SBă450 DM = SH * CPă460 EM = CP * CHă470 FM = SPă480 GM = -CH * SB - SH * SP * CBă490 HM = SH * SB - SP * CH * CBă500 IM = CP * CBă510 RETURNă520 X = X - XVă530 Y = Y - YVă540 Z = Z - ZVă550 X3 = AM * X + BM * Y + CM * Ză560 Y3 = DM * X + EM * Y + FM * Ză570 Z3 = GM * X + HM * Y + IM * Ză580 U = 135 + 13.5 * D * X3 / Y3ă590 V = 80 - 11.5 * D * Z3 / Y3ă600 RETURNă610 DATA 124ă620 DATA 0,-2.2,46,1.5,-2.6,46,2.2,-4.6,46,1.7,-6.5,46,0,-6.7,46ă630 DATA -1.7,-6.5,46,-2.2,-4.6,46,-1.5,-2.6,46ă640 DATA 0,-.8,43,2.8,-1.5,43,4,-4.5,43,3,-7.2,43,0,-8,43,-3,-7.2,43ă650 DATA -4,-4.5,43,-2.8,-1.5,43ă660 DATA 0,1.7,38,4.6,0,38,5.8,-4.4,38,4,-8.2,38,0,-9,38,-4,-8.2,38ă670 DATA -5.8,-4.4,38,-4.6,0,38ă680 DATA 0,4,32.5,4.5,1,32.5,5.8,-4.6,32.5,4,-9,32.5,0,-9.5,32.5,-4,-9,32.5ă690 DATA -5.8,-4.6,32.5,-4.5,1,32.5ă700 DATA 0,8,26.3,3.5,7,26.3,7.8,2,26.3,8,-7,26.3,0,-9.8,26.3,-8,-7,26.3ă710 DATA -7.8,2,26.3,-3.5,7,26.3ă720 DATA 0,8,21.5,3.8,7.5,21.5,8,3,21.5,8,-8,21.5,0,-9.8,21.5,-8,-8,21.5ă730 DATA -8,3,21.5,-3.8,7.5,21.5ă740 DATA 0,8,14,4.7,7,14,8,4,14,8,-8.7,14,0,-10,14,-8,-8.7,14,-8,4,14ă750 DATA -4.7,7,14ă760 DATA 0,8,4,4.7,7,4,8,4,4,8,-8.7,4,0,-10,4,-8,-8.7,4,-8,4,4ă770 DATA -4.7,7,4ă780 DATA 0,8,-12,4.7,7,-12,8,4,-12,8,-8.7,-12,0,-10,-12,-8,-8.7,-12,-8,4,-12ă790 DATA -4.7,7,-12ă800 DATA 0,8,-27.3,4.7,7,-27.3,8,4,-27.3,8,-8.7,-27.3,0,-10,-27.3,-8,-8.7,-27.3ă810 DATA -8,4,-27.3,-4.7,7,-27.3ă820 DATA 0,8,-35.6,4.7,7,-35.6,8,4,-35.6,8,-8.7,-35.6,0,-10,-35.6,-8,-8.7,-35.6ă830 DATA -8,4,-35.6,-4.7,7,-35.6ă840 DATA 0,9,-43,2,8.5,-43,8.8,1.5,-43,9,-10,-43,0,-10.8,-43,-9,-10,-43ă850 DATA -8.8,1.5,-43,-2,8.5,-43ă860 DATA 0,9.5,-48,2,9.3,-48,9.2,1.5,-48,10,-10,-48,0,-10.2,-48,-10,-10,-48ă870 DATA -9.2,1.5,-48,-2,9.3,-48ă875 DATA 8.7,-8.7,21,15,-8.7,-16,35,-10,-36,35,-10,-40ă876 DATA -8.7,-8.7,21,-15,-8.7,-16,-35,-10,-36,-35,-10,-40ă877 DATA 0,13,-37,0,33,-60,0,33,-69,0,14,-60ă878 DATA 6,11,-43,6,11,-48,11,5,-43,11,5,-48,-6,11,-43,-6,11,-48,-11,5,-43ă879 DATA -11,5,-48ă880 DATA 259ă890 DATA -1,2,3,4,5,6,7,8,1,-9,10,11,12,13,14,15,16,9,-17,18,19,20,21,22,23,24,17ă900 DATA -25,26,27,28,29,30,31,32,25,-33,34,35,36,37,38,39,40,33ă910 DATA -41,42,43,44,45,46,47,48,41,-49,50,51,52,53,54,55,56,49ă920 DATA -57,58,59,60,61,62,63,64,57,-65,66,67,68,69,70,71,72,65ă930 DATA -73,74,75,76,77,78,79,80,73,-81,82,83,84,85,86,87,88,81ă940 DATA -89,90,91,92,93,94,95,96,89,-97,98,99,100,101,102,103,104,97ă950 DATA -1,9,17,25,33,41,49,57,65,73,81,89,97ă960 DATA -2,10,18,26,34,42,50,58,66,74,82,90,98ă970 DATA -3,11,19,27,35,43,51,59,67,75,83,91,99ă980 DATA -4,12,20,28,36,44,52,60,68,76,84,92,100ă990 DATA -5,13,21,29,37,45,53,61,69,77,85,93,101ă1000 DATA -6,14,22,30,38,46,54,62,70,78,86,94,102ă1010 DATA -7,15,23,31,39,47,55,63,71,79,87,95,103ă1020 DATA -8,16,24,32,40,48,56,64,72,80,88,96,104ă1030 DATA -44,105,106,107,108,92ă1040 DATA -46,109,110,111,112,94ă1050 DATA -81,113,114,115,116,89ă1060 DATA -82,117,118,-83,119,120ă1070 DATA -87,121,122,-88,123,124ă1080 DATA -117,119,-121,123,-118,120,-122,124ăRich Geldreich                 GIF DECOMPRESSOR               QBTIPS_H.DOC                   09-13-92 (01:08)       QB, PDS                279  18404    DECGIF.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"DECGIF.ZIP",4^6:Z&=13541:?STRING$(50,177);ăU"%up()%9%%%#-%Ju#&>$.=V(-&7%%J'%%%/%%%%wj%firj.Sy'yDdar>BSe5U<heăU"uD_-#G;dZM.+Aa80S]3jn9u-Z3>U0-*Gblvm>Z8heaai6znb0^B8-lE$XV-:eT2ăU"R:sjt6mWi^HK,WTOU7<Y44H?BKC$8Z%<JV&RD)]6k^Qv_'XMG#<JpbGGV>L^IoeăU"wH=7jTgjXU8U.'XD(oY_tebYHI9_Qt%k4i%=iIqKuO3hsaog9jgEMXavl-q4qVYăU"f$AeB^'F5yBGVU#;'=Uljd1:Yw7c?6%_Q]DWkM]d#%vXJ4G>FSwHDKB[ck<VrxaăU"f&SQNnDHSHW7xL7HpV4JF,w(JHxBviEP_ReJ;mdoo]f=rEXt.T=y]YlpZjGDqV_ăU"-mhAJ/\2ykO?[.XWo*5XUS=P1R[3$TXs9jR:Yf/2>p$]%Nae,A8(Vy5l-Mi'67JăU"x[WI4d#z50=l[q4*bC[5pK&^cN=vP)m)2cFC.8FY'xvvX=jct5pvA,dJ]([URYJăU"4A##I*,0&[^<s2^?Hfp2s(hiEc68.&Z&M.=s7Z2%aJEOIv2aAF/*Sl[i^PYFj&CăU"LmNJDp2^d$^270%IDdC<y[Q?WK]4%up()%9%%%#-%lwd&>[*,St^(.%%e,%%%0%ăU"%%%zx%jiln%kSgfFx&y,,>[]9YL(=N1]R_-+HaKehgehg^OSe,aoL3I43e*%%4iăU"JVgok8rQpd^cg)udok0FVfYkd\bl\d*xruN/CFjvX59TU>cDpjIWB)K6\Cxe)[>ăU"sQK<(UYQJh/*Q*X$[qYOktSsJ8m2s0RWp>102AN2x+UM.p>e)RGQU$:ZMK)+vi?ăU"k2(SCt6Asb1%BAU.h&*[B)=l5VsW'(T:'a):=D)E[fbD+QeAlq-DXfI31)k<:WeăU"Ev2K]NZKfMZCUF*BX0JgWt;W5rRY_s[I)ghE7;Tx#sdHWJJy?nmdkVz:o))&.qSăU"P1a[+eN+znat^gE5;Hi]&gc3UuhmmP$gd3&.v%rlrXm2p[ca?%STpSwcO=xM3=căU"*]+$en8MBiSjgU=1j^[gtr2Z?3FrtUUBH6<i:Mj5rXG#W434TIIi9P)srtv&8/GăU"DwXJcq..Wa%\KPSE3->)I,*=gbcPGA$o%s4%3AjB#Q&+<UL^'I5d/9RtA#VHW#4ăU"F=]4>:=DRWyAP4805-nJ;$'m,OuM.J6:Y4o1G^Rhbocnit$b?7L>V$s3Y+xZ$.TăU"=T$[7,6rs0N()S9OIyTZ+W;u[WN-YXc%)_rpe768=zzWE=2G3'fB_cwiiApBNx-ăU"nNOG1XiRlvi*DY0p^-+wO\5BXTk.uUJF0MPX$$1x6O8ll)PzHv<&;G]X.oT?JdgăU"ku_C7ud:<p[BB26teev292s$Wvvp(MU3VmrY>:U/rhFZr8uTA%bqES03hW.)D_7ăU"<aA=9v>++KXntDY.Q&U/KL,^MMkBf+sQ;D]+R//o>>T[aH/^Md:81M<a;,HT5M:ăU"HJ1$m23H/*xK^h0i_K39l'KZU_;60f4o;uxOM9PXQcD8YW+B)J.RfojLGOmJ31PăU"a1>$%mjVP4]dl77:&SQw],L$Ra=]#<n]<T565:L?fCZro%.GM3e3fq4eMDZ)g40ăU"k.GqEqFr'Nax#D_?O_lIqpX&KIUTiiLz:y;5::7g'xtJXH8P*l$A[gA_J4O8^xAăU"n8Qs.'*CMDl9La?kVgw0$raxL17H(1Rd^0($=*$.up%()9%%%%-%(lw&>nmNk5%ăU";%%%%?%%%%0%%%%zxji%lnkS%rfp0L2ED#WpCLBnA1_^2A#D+*+\FA%%up(%)9%ăU"%#%-%s,Ej=6=ku)Z%(%%=%/%%0%%%%w%jxhf%qjSfRxr&e9Jt\]=5?XPinNg0T6ăU"('9\J7'k&?9;5^LP5RhVd%tcYQheP*#];nvRxv'Ssh2[rxCGLwduhlr^jjt64RJăU"Tx$?r]e-;OS1zA&rAj;a0?.T;k=.P(j\PFp$0Nt'm;^=A2z&G;,c<BoJ5UKj;lnăU"Hx.-W'.?#ZTGVNO^KLWlUv=V[2j*<ZL#E-cmp#oE/S2A'q&/11H*)ydHgW>6YrFăU"9q]k#iiSyS)GM18\7%Itet)8(e8Mudo0m5H[;_XK/r7.Lchnl8]lp1/XA^CXYlBăU"HUjs8H&9/NM%al^]UC,tVp^e\JKF7dN&;Y*dF[HF*HujL+6rH2xpb8(To;H'k#[ăU"<c[A;[,gjrTj,ZgPL<KYx2H'1;Z1,]e3B8'laTeGVs;(.;>4\I.R\F)e%6Qp&M]ăU"Ah*POtXw0_;3XY#$'\HC'rNPhjxpRXbs%tY,V.<jeLajwfUx]M/c]p:Ka</7SluăU"jEPf?Sv.Vt*D.t<K<8fjPIc;3i-cT=^xB22=%Oax[1&z#h6uo6S7cPUxM(l<bFnăU"*rLL_Li9'7E_,l(i?i,F]T07&y'rM+N'N0^sR2dRW&_+07&6UG/LHgu#>6KMUt%ăU"(XU/n7l8R)9KN8?1[&:(;/gf:f]bzgc/xwm%T\(E1*fhp)[So3Oq0lY7tJ**PfuăU"%SB7Mqcz=imA]4i1em8[4l2HO6*T%2,cV<+*[J\gUvx[ZzB'di&UearHaw$kA[6ăU"BQzn3A:$PIQuI(Q*-%m2-Y-Rc.HR^$$3?ngN6qj4iU&C$A[]&AAOA'j.?1%igMUăU"u#ihCL9G,Zir=Ab(MLW=LcR8z[J?(K0J,+%4MPq=g&WXM/DD&+e#eFmoP)Mm_M1ăU"BQM:6E0>H$dnRYV.;(f,flN1V[3Gii[B,B:6Pd:Ry2^X']lQ\]rUa$QpgZT#w$lăU"o.eu'7gLe8j'VADQmc)s[]LBIMPJ**+lSHp<^X*mR2<;%[Jyq*ya-/RfG]ab[UlăU",#A\a8yPm#t#\iLUr-%tk;'-<*>R,1IZk1J\Hk9p7x?A[l\YZNbx[IhH5s+0c\uăU"%p()9%%%%-%%>G+4>t1\'v%(%+%-.%%%0%%%%xmt&&wlg%SfxrT&zX>AjU5MY^=ăU"x?3H,e&Y8,-H3B^tv2u5xgdZrisF%q-w:+6QIufwsRC5Q031xz(oq;K$hNtK6nmăU"l<x0:>lJ*mq]#QSrTY3,-CW6XJAZe5ti4ce*Q>tZ6b=P<UBs'GjA40MPcswskOnăU".E&REP#hIgG\g]PQ9TbLy6OU2x%g0+AF*1.;m;xQ2(9Te-sIZp>6]LKVZb^wvpdăU"rL,eV(r,FIawr*,1)Na]*p^tVJ2H7a?r%+sA37RtrFsO,#<=,Db_-p9,Ji&&+d^ăU"68jEDaQtV04$1\V76r4NZfX+GB?MpHGB6^c_Ex=mGuT,^i2QcrWCAK&63W6aXy6ăU"0RfO[)2dt-+1Bw8)xU#2()341JMiOEPh2igS()^Oi2=q#VHts1^NAiKO^B3u4+<ăU"7ii#F.d7hMKh=M<C,;3aR[-HV0]j<?Sv$SlM\jLcqH53^AaQo#U*;O,.1in<Bw*ăU"zqr(5D2JhbStgNuP'XjdCWH:Ry[HYZ3gwrcLaqGj8DAEgIkA/ybI.FvLQ3HN2sFăU"K<eKHcV6Pdv/8%ffJ;Z&_Phm]FalcD=dG?8H0?6Fpg=Plj'5Wk]*leDxhg4=ZmCăU"eUorvM>)T%MstSU;&<mZ/b.\'2W(YeRV5&(]8TuMD0&lma\gx^B3f6whM'hMQG_ăU"ZXr/xLNta4i<c;\MIZOUCShG0&wrSS^.M)Aa)69YK#rF'+#(y?zAJVDv$KIp3TNăU"lO+cY$/e0%8LoyD$4VY7Uo/EUgSbA<fOhK><p;WP*NS=ggwMPlO>mlgr.y9)'u;ăU"7t,NY+Y\#O=qt]N0p:g&9Qcj*sqWi_SD$z*qP\,NUpXve8=rx^>gQ:o9=STmt_8ăU"uJgufk(GRvO?zH0BDk]:?O%MP]tf+dLWr3,%hk/FMY8gj'M31mcY<=])mn&MkAiăU"Zmc6)OCX&XOz(#6Lp?(eXaS/qJLrrurQDVCbp%N>Z,k'yBKwy[]GaF4S&t6k.U_ăU"N%%up()%9%%%R-%Ktd&>Q3-kp4+%%%QB%%%.%.%%&u(n'WS[fxrfk(V>T.]1N4PăU"_xPJi2<,'n?cs*KoJ(fm+RO'27Y,40>C;p2x\bRu<+T-GNvnAY;L/kpY,h^RU(&ăU"<DYqmYNu$A]tFWocME]F/%G)2Aoo)lMhXHiqdF:?C,2q_b2hll3bF8q_>ijD8>+ăU"t',+XCmqoNxxl0$&efR.asXd,\br#*a1EIRp\9P]d+A9;fI);gMZ0GWuJ4d';A:ăU"*=rUA5'DPJ?xooF<YSoest8Nm7vkxhl7g*DWJ0oiVUS48ae<i'6(_WCfQFPw4c1ăU"knW2i/*kwk0Gc\q.uQ]6O_1LO5d?J]Vlu2[gY>?8T^jHM5ViGTkG8/CQqE7C$&5ăU"x<K<o_Y2KtypM\)T%zclu^b=^x;</(#B%n5Z'gRP\fE/;DL\iX]^d(uac4iXpSUăU"Z6nV5bWaf]:>fb4xpJ>[oH/ZK*fBKheA8m'4PD0Bq8krhJibPUV6GU\N42.&WTwăU"lq;Z^]hZMTYT[UQx$8=5VQ3)rzjIQn#;ATRxx>/JUlr*3lDcsvGGnrAHMKX\l=]ăU"+89hw6aF4?F%3W9c'XzEl.pZf>S\Tq'&CqcMKS*Ou8Z+-l45]^M.NsmTs(r6T:FăU"ej9qoSzFO-8khws,iMV;^q[C-iH)Hx%G+eqeueCYvT0DC'8uD+5_kgGV^u3R=h*ăU":l5l4smxd-qRA<29kWH<[N+KMmPPWMa0/1=us^Pt[IqUG2>]Y]'.F>r;5NHnRmXăU"h;+#-/[.I[T&*:<lOMHQccN%bufRxWLe+=J=XWQ\eloerZqBFr%?g\jfi0BK\KrăU"'ESB#xkEW9pYV8NOU()&9pYo]*oKF4Ke=1bts,1si79=IM^f#9xFG%Q*nVhQR/uăU"a6uicXk;pXGks4TCEDbT5q/sSI;Yup7p:h>FU3mOh:HA3j9;r=44u6$WjH1*kFNăU"G5\VaJ&]U)uX(]^WpZpMeR1Hw,MAcXsxMp]2pe1?v9%Zr;_,\Ic9:#GT5h;[/-=ăU"D?vw6tbqe]CvrJ(,j7p9>=;V.QcZM<1J]VhP;LdR5VYGN;P+X0,gK+pa73:p5daăU"<_b$FH#:gH**7vnVQ<Odz8'aE;hFhaN(Gxw'e'fERk)$*_);opd:V2WmRjtXyR+ăU"D/C44b&\/xB1Zh/%E5ibJtoB)>7Yk[UWN%Vjurjog*&rvP:0&]AE:O^%g/#eejEăU"a5tJ6t.JF5daPx\[VkZ5'of8hK*QkeG$o[iFu<*[rK'#%#>uOoJ<RR0uMAljhGWăU"(led4.2JA8rU1;;HNJtk'xXA>U4p+3dZ'JiXLX9Slb3NM7WTcJG&6VGGaG^s]$]ăU"8w<c(2TW_;K%E/st#\bfKt]W:7c.;?1%'q'>2o0q_;O0gCihweD:u,\X&U/hV9[ăU"MK1w/sC[DU<IB&m&HmFZK)G,fUDRv.C\B%w\uQH$H5/m7SItRy)W^nN8h>(POfAăU"ydaY3c.B+MJ-4C[ZSY8+:lq>Om^Nnp8_XDVcYP^;2c'IAmhu*e*C<;OZj.ctIi0ăU"jbbV>a'2[HZ2b%>rA1<Zl+9echp>Lc+nbr.goH+gq#t;mV:-'7/94-AJ(O3#^RyăU"jUn8p=RVWMBbg:LB%^yR4p:>'sBjz#i.^b(2^X[&0aOM60?3gz4F*n.NpU,zZ7răU"sndT0/J<#k-F_F1u/yuhH-pU(\c9:b$.C-ZKm_$uv[/Ii&D$$iZB]CLXSk4ur4]ăU"Pq8WK4$=R&KVF*5(*T:>ektS&&o:bP4q.fB8sX^Pmn<hCnN*m2NOJimpaJ;ud&TăU"hw*gC=],M8Uk8Ln[eI;+%Z.22.HmRrkvI1^<m5T*XCsI?GR-V-+DR2Uc/_CW/*YăU"K?'<I$J'y4kk0y=mTtInu9t4KHwhO<8%t0ODv>vsDZC\k')\Dn1pluFeXOnh]nTăU"Y^U\Ln,bG44iH_VWl3-?E?c7U]^WPg[FG\ohz0,YkNuj#f/s4Z2P(qm?y:Acr'UăU"^6n*NN:Mm_'Jc'SG.TQXt_8=0HoLn#N^pH'x'up%()9%%%%-%;sEj=K)?w/%F'%ăU"%'%+%%%1%%%&'X[U&'Y]U%SfxrE&crZBTU5UTh+xV/0TTJF)Bskt3p+R8<8o5#-ăU"rNT*KRQNT*f/Qn3L4xi7al?:W%a,TNjkz26-\bmHdWxBX6+^Zp)MiL<xGVD,lO(ăU";&HBZN%sQ^qn-O(qzGu5'UfhcZ8<$kY5)_QLN=&G3*W+8QGYk&g>K(gg[?Y?X-RăU"VU'QOn^/z:Vo,Q_:yp>V(d4J]t6Kehkoc0BA6+jL)/HBq=%7o;)V#,6S/ehOq,jăU"43#4HTCX&W)%]gf^y*pARGj$VfV4#Fh-,^)rH7+*([86.+#2OD/&50OC;/*evGvăU"iWfA'dn-1*\+,4aB&zye$BQ>ua1GcT&s]<CLj*;h^%,#)j:CMGvHe$^iNqGQuA-ăU"CVcPGqgr2hfnEZ-iik>/]^.u>Q<,Ub]5Kr=?eZ+6;8TiH6Gcf\8kq9r=0TIKm9yăU"SG_kaE:(O5%ZxqJSxj49ow/WO(_:qY]aA_6V*<]x>hBT-8wCcq5^EmT*+?G6PEdăU"lfdzX20t8s1t<2IqUMOhOgu3vJ,:oI&HHdc?3QL7DM3(nNDuM_Y7H\Ns[e;b>2năU"Xkxd;fYxJ4dO>[4\<-$nJ75MMP-C&MRzXzhba,ncRw4E.>Dixr:UbceK)A8r0NBăU"_#\YIw?*?,UqGI;aGpT;ae8$N0I<(gMlIr^TQX)Za.l$*XZ$W-qT6Y&8i0tG.Q0ăU",pHWB]vJJ69*Q&nup(%)9%%%%-%'As&>gf.ZDo%%%%0%&%%0%%%%w%jxhf%qjStăU"dgo:YG4Y3Ag2EEm5#NB1Wo\c_26//-[NRoC)&?QSasFrC%nRwu%-pRO?GEHxaUKăU"XQoRFEY$iAnRIl.3L71BEe1vn8q%11>Ec_;NLeG='\(h+HgV'kv,V+vF/Y6ii12ăU"/15aL.e?#11#3&(6Ve7[11Q%>[uL]j=Q+U,Ruh(<36*UQ)v6Ytm9#9c9A3.s+a'ăU"a#3;+V(j[8<'qVUWgUSE8)0b00rh]\cZ'$cBk6c]\obS$c;Z6c3t2dG\l1qcrG,ăU"Pbr;>,xKYC*%AY6sMLssq,n]#7[f5BX>WYN-w)'mGcs8mbo9=,<5S,o4p%%up()ăU"%9%%%#-%'sR&>39-QNH&%%%d&%%%0%%%%xm(t&wl%gStgdor^H4p;/=N#nFJKNvăU"%RgSlAIMpjSl;Z<G9&x;_Z/W9SfdfJ;LD2[s2CTSf\oayJ:DRNeD&aa9f'm,i</ăU"RMWfrxO/^noSX$Kra.mG._=[0_XAN8f;\gVM4:Y^&OwP\yZsIqDD03Dr9A&dyZLăU"4c/#J[8B\OINin&\WhxxL8>;fzAfB//BDtT]/lMSOgo9,:(n(o^nv6AeI(jrb&.ăU"h79j&tA$##%]S[KA+;%w_L<HOA>UWiOS7/](omZ)?4:ZJ;9.;qrl([e%*kCZ,Q$ăU"=km)a^g%>+:9mb=c,lT0rpCLg$3qP/d$DctjLR;+$p-N#[[D>)J.8REfDY7l4>0ăU"Gd&?&wh&3(ihP3'PLt1tVWIhUo>,J8?d%up()%9%%%#-%'s7&>O:3U.j'%%%*)%ăU"%%.%.%%&u(n'WS[tgo>)b>m8S#=#nZ4XfESmWf,a)_ei]^:+6;y?-dg/jNk-UMwăU"h%U9onA6Tj(HZklALg[w-Y7S4-&[6v0?:ROd#M\lT1oC=65=R4)S95%64xdT+Z6ăU"dqLsCgpv?jUlacX4#EJVa&<Uz223_yFI6[J%Ep?p/p=1rLLBX<SHFfm?\Gt]W7'ăU"hm=22PCq$FdDysgt-s/x:tePpXu,t'tOGef3=D.&6aS3pkrEl%1V*K\omu2=E+SăU"^iI$Uj3^8f2,'R(%s9#9s)?YF/xmZ2.mIK,KU+b&9&:UHn;j>D'eZn14qR=uKr6ăU"]9vc)/0qN[ife:1z4ePb.*ue<^o[3RX[wPJ4%i#qgA)<sO?eNUe&rR+sPh=1DlpăU"(4*-.Ah<0xNR5xBi&cN8f'b?5O[=WEK/9cxxPu%Xnb<&Js_efGI;9$w-2L4t.2OăU"\B'<RcA.g;Q0[Y6.:4r[6_N8;w$Ya,:-J,k'_t)WSwQ_\Tw=tbIL>;'Q=\1;V5(ăU"Ei'4ho=9r7\JJ4eFN\oKh99:.q)rc*:GF7hZ6.LfcFH]Mq:nP/itqjMXOK$p=:+ăU"VFcf_p8<12KzZB)V<lY..IXaDs36d?QLIIA(qcjt>^8mZ37S\Hh_kH]<m\rhr>YăU"bj=K^]frL':^W7M-^9PjmRWGiH74Wi[wYjm]ksw]pSU$EH7[4#_gI9RU%G.NsqnăU"s_Q_R.?4Gxz5ULND2Su<ze=S4DaM2f+emZ>ROz0v.qXCLs$;/mQ(W<]Bbgt<4iuăU"T)GE*l\Ye.N<^52BpL%AmyTprYIkYaFB%h-iSU6g[<0/S^h.NlWOWAW4^SU]$,WăU"%KX6;dVEE]H+EaD7EXAXW]\Eks>:8O'v0up%()9%%%%-%('s&>[<q:3%Q&%%%U&ăU"%%%1%%%&'X[U&'Y]U%Stgo(z^$mB<u=T?Hf6n7Pytya$RE')eqGs3K7ZG:oL=7IăU":OWTDY^gy0'_UO)tQ)6[,:l>D]8,V'Kf5\#,\fVJqmQJmf8::*^?]DbVxdtq<?DăU"vJRvH/[M?6$&u9Z1FeSv%hAQgH/6[&[CWYEs.WoMR90JmjAq:ZWuQtNg5&a.VAsăU"wPm]MAeOT/<#iX#U+cA_J[i8[L-8jL?&Z>o]o<B=jn36/M;%1U]GYs<qqQh;AMsăU"iYcPx/EQdap%#vV0b+5y,UQJ^O_HQ'5^'b*]#GR+UY&Y*,l<RVrhVhS9x7a2tq6ăU"J:PF7Dtj3hZHK3D^-^b/n.UsD?jg_W(&rJA<)m(u,sFiDc2l],6H;g7W&d:D=E$ăU"P5_u7u_\u/fJ19<%8Td%up()%9%%%%-%?Fd+>J;=y#n;%%%fo%%%0%%%%ij%hlnăU"k%XSgfFxVa:AB?nahn#Sxgh]EG5OV7%VpV.eL[_S3-VBg0]Q;#l_to0JhvujdqVăU"3oPq.4O,I#I^6%Y8<l<='Vzk(ry%u%E%ckx7LBlXd&N<0?O$c61aX+cb3#iITj,ăU"jFe>0oY2ul>s,60nq0Gq(Y-Q82mu#'2.R;3W<G:p2juKVg.&S^J3*R/(_V0CTs.ăU"#vZOtp<9c?#^aQQ/k&ch[4^w'Kj,,;;Uj8a'-:7<JBT%)M2G_Gb/UNS*716Nv.iăU"pR[)hW#F:U(^Y#TG8'Iu)NHrdtUi,9acVKQA_-rl6XGXcoY;?XUYbc_T+ukGLghăU"B?8J;s8SIav:Qg4Tq#Uk+LQgS+9iI]J),GIfEC(Gs)2$4.h.U;C[.r;<jyi?#_PăU"TF=gXP^<rO?Q4*QQYp_SSN;;;Lb3(/<fI.NT1dX4r/5+p+Ku<AEqaNelx(^'nT[ăU"1m[6>It0;jQJI\%sUBhK/.i^5h1$IiAg)>VL]Px/-iIe;1L\i_K&KK1TBbH/JgnăU"d-_S#c^,8?8]42+d,cPx.FGR_sbhI:JFZpn?MbvV]QWX<8MZnsN(ZhukIs)V?8QăU"i&Ibo=xg$R.TDJMWov&]Vf4GLd.n]XStP?[:XD&r'Ew,(,.;Cs1$j\>7.]CHU?năU"?#<iC[?n<f5^L&YI-X3j\EuK'.4v]zEK[uz>rY2q*NxD?#H+VBMYAq9P7mvmeWfăU"3ut&J*\Q6eH5N'HaU2phM0Yq$82G1<v#=gLx=q>AJViuldF^)<J8jbmV)XMGg9iăU"Z0<t/Tbf0%fP=>n-<QFO:,d];9Ac>cWPwiHjB[:Y)6B2W/kKkl9My[?ShCmUkvVăU"zWs+/N[qQi]LpWZ%>Cfc>L,+llbpj4m0U$JF>;lR_+-u3prWY8xIC]Qva/B]Qk3ăU"DRB;tuqU-T6Lr;*?bPCTV.j],oN9d)o.zRXu+8/#+ctRGSt2gT]>q#jyF-8Myw.ăU"d/Kg_fa;#5?P^1?5k05+'I?8eAFDKziTjjc[8G1;5gwq-dK;zNS=_8u)E<^gi(XăU"_XzS:ZTl[w,pLk0?f.+sVxT=QB=#_CV'F]nj&3/fI#G+E+ajVhJP6&q$.C(]DA/ăU"&MA-FmdOdnezf>q]rx4'bJ0HK?8naf7Af?K7F<aSXSHH']?5nn48tE?9ta&ZWJ<ăU".)YQ$C(PFMT]tFY.oT5\lEsxuL:SN3inG%,n\B+z[ziouFILg^*x+GCtQ?6(.5$ăU"dPfSWkE5Lu(.df?-56Bu(NWp?S44]f[KM]OnS%;DCk6<st*+LHoo_1$EP=,u$f/ăU"SRCOR:#\$,-PvrM^Sw09l&R3/T2?9\8iKlQSCzbKB%Em-yV-bw<t$kWwL.J?_7SăU"h/o\pp#g:Q?/'a]x>0a^Ut)^b10'0p<S2=;eG&uw+I9U4PH2lm,k5Fb'%K>P_JsăU"u4r&Vs9xfgH:<BRVNmAm]Os&)MDs%n(&Sk97l'5v_O:DfJDI+:^4Y-T+*9Bh7>&ăU"2(i1.Odj5;lVYD1pA98>>O&g5]B%;.iUZAItI--J61^xP/g>bKf54?Ms4Y*S#;,ăU"<<>_[&1pg_GUYv;gvQW\64AK5K2[8$ceS]US0DH%Ur.>ZKW'jP8IJeD%L8]-Ib7ăU"$7p;kQ9\UZ'2dcQK_$Q>,sU28&H?/[[S4XUZ\nCo*:(^+E$*293XAVP3A41-\4/ăU"AHrFU3ff1,b_r0hF\.#m1m[%OwS^b%AInT#^[_QZQS2+Y0K,W:fp>K&B3%W/7DeăU"/%2fXjb_70TbvIt\UCZ)1fO1aN:,=yXN]Dtn/^],11u#7)X6RD*DoK+kY:D;A=ZăU"]4.v96/C68gq&]qegd]7m^.nIrg#;&l6Kd-gyV?SwiSD\Y8Ni>kWeSRG?DbC#I8ăU";_02\w][F/A;UPfi(+3mYlfVCb<*sI0gJS9'scg<7rDHu,]XQq1Xm.>-mu-'GZ?ăU"F5)df[j+PbY43_#70u$]W^G[M,W#/CD]h(t+U%fJY&cjF_5Z-aA('7WAeq]()d5ăU"u%>F''w+>hAUI1kdL0sw;>%Ki?,_Lgrt(S6>:)E<kLH\C4I]RwUCL[I_0]B+mNMăU"_xuiTUsVq,fj1jR[oP4<.+lF$<FuYl1*tQJ(F>CW)[axN_Sau\pHMOA&)Z7,.ieăU"BS4MuQ_Ru_NWFo3jCL.hX>&fY+DEbQ7YnS+(Terkve,AVI*\=be;tsTT?GuAT\WăU"%l)qC#PYn=s>LQ.4zi,TCDZgkCBv:dQ5/]1gu#C9s5>>d/bZl]A\HS&jl-.(6k>ăU"\f]:lK_k(9q+8h'])[vQ9oMg-/2tVy.+WR<fdCJQx<4Wm]phW%/)/b:GpbGHcO+ăU"X]1]BJks5-)7Jr*vCN<4KD>(\'_'2ZE+.iA'gme.0+XVQIF1?2A[a7hLp59il(EăU")lc(f:.^8[3tA\,Uvi*7cC&M4VQX'ihFWvLIa6RtOp/bXjsR#%GEG<;1z/2gAMOăU"8k#c)N5o9CE\slw9.Fr6uqk%:oosKZ,Ye*2r-f3=nHPk0Mm501wH)5Q\v28z\vDăU"jY2*^-=gDd(0kW#8IjL^OMcF)bSlW?Rkm#3_W>QKERTQh>_(viIZKjClun2%,yUăU"I#x2t\7We[FnZ8gX*CM$)Y2FdK4VZX,8fv?89%FqC7+DUgk0sFdWJn*<BfK.*EBăU"+yUQ+-hre(Ikra]#]J:FVB/8Z(,IA-=0&&)^6bmWl;uA1]?+V-.9*576M*d%'5IăU"U#]sRLCw3O<Ak96o-4Z5^dOS_7yUch%pYm2kFdqf7)?I_JS8IKbZIWR,wafr%?IăU"e+Q6ghl3A=L2,aIDM7eX&#R%JC]YQMO/%&vf=6B^$yVb+_$=t3qmm4'DrboP$86ăU"5c8*UyhhbZKq0[^lcE>^XW]p92T3jZ#^n?dYEzX6SWypmkco'[Vud;PNWXEVP/DăU"/E=oNg1>vV0Ga\[)HCNMjX:&v:'a2+g<AZ75iI5FQSDHboR/S(>1c^?7.dOh9[ZăU"f.VFOf:=-1;:3(FPp<b(#Y/4m.XrkjRzaMTNS%Lxxk-$nVb<JS=DJ7^W^Aj9k9QăU"oT%P4UcRDBS3]Z\JGNgd3sX/7.iQ(v^m,7r?]k3$F=4W>t/4sX)HiFCZU<JvNsPăU"^pid2kU7dRw0NBySadXVll9bb?NBC%'[:j74$3Q6Iv,%\mL2CQ,DZ,9D9I=gOpjăU"AOgmVuGimpfi^,U><YdpS)TiquJSt62/Vc*hq\w;kHYfEp6Nz4%t?1V*a_es6PCăU"Now62m;aqVq$fU5CD1Z1I5KkDjA-k-Lc42>6Gj??$/*i4qJQQTS0xt]:j?M/;*NăU"y&sn$XshpZSO0MpM?*UAmO;7HObi7EK$ThI:,as/2odNi]5&oF<3Lf4Uma#M(;;ăU"..Z)zP$4M8GTZUkUDnH'^C5_RlkY#GFWUZ4pQZnhO./yo[5B7fppIT>nLy+LJ9DăU"'n2QB#B*Xw1sVfBEatA4-Bhev9;5upF.*?2wAb;(FD'^39Ri1Z?L1W4)F(%Iet;ăU"i=ChLd-_^_(/SEeq1b=:MuYYk[LCVI30BA.Gm-m_ajK$ib$TN=i.29qzV1F-:7săU"?Sd^s+7a)DqaoMyD\om1P4il^SO+^>v4Q=kFqbX*.&0:i+;$[-))wx70:oI4W:+ăU"(0W;1[q]?#C5Rf[5AEI<Uj4gvUt#P0hyFp_QL'b/p0Gd0b$dfOZ/rUgY2LsHAg-ăU"bj1bh?g6*B52e7\*V]T<M,4<VPA(%+DZMru<^aJTW+yuM>\cW8sy*/t7hyTSiNEăU"PcUfhc-B$4v<(>q$t=8fuFO*LiL;Y9$JsiVRvofyJ'AtnNn$%a=#[-xCkY8?v1DăU"8[l#AM\T4+rKru5DYhmK=SX2VVpnT-2lH0',g3(H*pl/ALI*8-N-yo_rL>q00EtăU"Z=z:<Bg_krvYd[\nq:eF0iIUFg\Htx_%<msL7ejhwcJ#n<lgR(FPq#[6cQ4M/U]ăU"W8+\Cnmd]Hp3KX3M7wW9S4V]554'nUPNmLc'1dR/X_1]9a.\3bL)pijg'm_/T)făEND SUBăSUB V2ăU"UIjlTa,Mo$=RXRRuGsinc\^zHEF(Ue6j/_LjB$1BSrmq8SRhvcP_v32bqkc)25>ăU":+J6[1tm1OK$BJYh-/uWMR$H)f=5YNq>l$,[B^)]%GZsm$H(Qd89iUkI&t>&[$CăU"+[3GJL8IYICPdz,Mx+c_.^S(Jomo(W)Y$Gdh9AxGM:HbO/O)NWJVtgKp3He^T05ăU"$8(5j9IM<V^aaZ7QYksdwLmIucN9u#kTqf=s0?pY]-M^%yMzDt:=u\hh&d0'JjAăU"S8BIw.l?1of4?Y[<xD(2f=\(S^#<N#\#+5&',ZF5RR/O7%n-V,.M=Lrh5;sF43PăU"^;#Q4dDU#h74YJ4WaL=z^FC14ofstYE9P^Usslvgp+6Xrr:c=GM_MIv.puES0e)ăU"\2HI1)s:JavD7A,cyJ-UB7^Mg_uDyq8&Yt_jlB?j%U_Pu8;%<6\pVQ0V8.Hg7M*ăU"32*W9/E\GAW%W4dO<f_%Ax40%EzvKLyV2:)L)LSWOib<39i=A8XAnC%$+rk(v9CăU"x9,y:,e8r2p9>J8N,exvP_qa#?=w44$MJQF83Qy2qDEr?sU)]28mf:\>CJvLPS9ăU"[3;N.ry%0VhJ&?Y+';AhIyw&Fbb5+t&pH'&2=AqNxpfsj7n6^MJV2US%i:Oyf_DăU"L^hC1R.a?B0UyWbF0iEp1wdv)8cqHjRlAjn&m0D3V0Bw.QC,.omAG^;FMK9B:0CăU"o_qe[&pWS+71a0;JPCuOSvopOr=Z6ec.).06i0:G.u0If6uNHV%'8%B[n'N+BN<ăU"E^s1/#?Aa75h=&1;4uaPG9q[9agC4.QnPJMCKT4cbCN;[H&LD?Nmc+JBTmln=gbăU"48f2LQk-[m%;P^9GJ&Zj(__s>EF7G:Z]cc0'a#e_#Gm[]k21;%Md2=qt&jQb*1KăU"KBY\4CJb9DMA[0mGe*otk,j^\(,iB2bpi]CH,R+O:zVG+YU4;#R0&n<z/;+O1GhăU"a*jgZk/9h(^%3vW=v1%eq6_Dq]M4)Q7i+9]DFyMEqTv^ah2k..:y_<80n?a_;d&ăU"Co:v6D3TMw[iJaVHwpHd'hQ\ee8'RVq&:)$DPn)f]TK:R6smCFq]2$^N/F(*o[eăU"VnH-mSFFI:w-60bs6TL5kt#HZFQm-o(+pQam&wp-eA+:eI%m_]QzPTK]/BrY?$'ăU")CByj8Fv#yc[KzBC5qn7SU)l#p7T*:AHA;BfdeyLKiuyTt[GQrl8TQ's,?fInZ7ăU"EAFKn+'M8_<OmMJ6LwB_v;SE_K>^UIJvBN6QLmCv(e5Px]cg2+]C)Lj5V(CriJkăU"IR?GW'B8OH()X==l'IH?:YeO-QN41/.4f[lf7<L5.1]\<a0%VL%r,Q'Sz:sa8*#ăU"*EEB8$&D\M1^V+u*grhinig4l%3P:A3cWO-nb]mBY=/E_ert$4]Y%a-hLo##j>WăU"kCG?tf1bn3wzukuAu&1X7V0UpJ'CZgQjtZ;iaC#VncZF=-j59:[r%y44%]FJYDtăU"cb%B,>s1-C+g1<Q?\3VBo_oLu]ovz5YOy7#3qR.F_&C%2X,L=lZ5[\t_:g.YBORăU";YJAka+c7,U/ct05n*K:H4onT5>RSkL+%OrD01ZNj-=&zXaO<AfSzcd\H:>M/sXăU".Qmnw'+q$vWf_BP38Sd:rn0)w,.-ca4)W7pp*2+H<vP.Q8dJ4:SMW&IrRUF\p$8ăU"G+e%Gw$1p.nLC=g,em)O)R;WrZkIE=QsTp5H5Ael/;h4k0r'?-z,s4KL60]2&:NăU"t&yG0-it_j:B8(4nuK]j[Jo*R:L%e_Vu99W:x'xQb*=3]$=?VKmq#k;\-xS[Hy8ăU"-#ouLQ\B(_RNr+'THv8FAF88L1=r2AVVItv=VPvOG%j6dIanQYLU[*W]5Wd+l?QăU"/&Dis:<$UfsEl<3?/zmMNtN$&C\5Jx8j$h,PtQtvic'f>7+*f'i:KDK_Ff5j'l;ăU"5ud(6:Tr.KhF2ue1vM((RPS058:O#g[Sb8OOy]tCO]/L7,zJ(0+(xua.q8H-NhSăU"2[#Ww?Zg.YJDUO]I3BFbWYGdK?,>NEbOJ]CWV?xCf]gA=3)%=._TFkr+R'c]S,8ăU"ZS/odZpQbnLVJ;9i0Vc;9],IJ+>7tG?.eD-,\OpdTt1#?H5g6ANEXGi5tp#R9W9ăU"_JxJpI'&FM0Y&fsQqg]fPj1P\sEFrviE^)Cl8_NbT_y7jS#$,q(Dd2vYVx26mS+ăU"BTGWr$<lL_>a13bt<sfQJ1&BPrWxM:#Y13V'TvGZ3j&L+G%I?0-(V\L]W;Ueds\ăU"X5-51i.?dclY2.NIo?y?pmzRjUnYiit*sgMh%f0%Y]jARTvB/e$jAp_F*kg\]38ăU"E,O]rT]i'7SqLrg]zsw9d&GCpw,uGil>Gat'\%qnywPq(MaC-yG6NmY&^n/]cV[ăU"ehPq4.Pyjl4%*llw7JvXbw.qLoNAP*b2tl(F=wqLR/%QGo<8WNqrEvnA.dq#hmLăU"<OstzIDHDOr5DtZ8MW=dY[0Wr=B+EX*YmVCs<#.Xl<nrJu6N39xI(h.;+SgnJViăU"P#59HKlXHTo,7u.V.uPCv62U%OnB-N$)4B_6t^3tRD<T]aSJh#cTALJ7a=A.SgFăU"'n;AYq1F(+hX&D*]-_2\Pcd*6]>/L1cpNM8hu\3vE/ke&$Q6[N<VFV7b5Za3un[ăU"$Jp3(paSsw>:KLo&tH[fpNB:JdrQ^EvqVCxcP0%^d4Wrx-]?Q>(&B+kmxtUC0;JăU"dqIRC-;OSnn(duUg]<\.bRc9]PXqu(9'Jj59MUG8j(eIIv-[HJox*BL%Zxn2J#^ăU"S:C:wpC>s=7IX4q_G#5mUK0bDIElFNfn*KNXOVIMh]Ah+3LM^lCe&rNZ$^doA1=ăU"^tp3GLHjUQ_X9?b(5D$bZ*uCiirw%)Zr]e->l%ui,Jxl9^UR:d4t_3uu^H)nz*băU".z/IW>^vZQco2AoT4.sBHrrX8$q.z#&A/_#fcdtkY^,SnXSwu/Zf$0dkM7&r;HAăU";V:WI7Mji+N(6olq[Wl,4P]Xu?s,#4ONf;yRwe9xbN<<vCbtN)SlbC*lN2IYvT^ăU"#Y^ir61IbABJBO2\TofP>mH?6vsdz*Ppapj0<C<p^$3hOjpx1\L'e:g'UU_;R'uăU"+(j,#Yo$)GZkO5e.A/f)Ab$J,l:_Po08.MBhVjv8RdMB<CDRdr.4(YP8<VA:]XhăU":ND/2<>PuA\w0sudKFO'sIwnF3<WR*3</Ii4RFa)mP-Za762;w>Yx*x[Svhe^x%ăU"424Vb8E+a80wgCwfqd&uQ8u?XK7hqZF/7oaZSFGM:BycCA8;x?a(q*8cChm*_2jăU"CBdx\Lf21[nIfO/,hdI,DpqeZ5Y6jZgc:ndW.cPaev%tQ9Tp=Q35BNp/$u+VC*năU"g-KN+5E%*##s>K41#G8:0&\=:c7f_VxTvNSM]S(OL'v6-eRnP\t1OJTLfpnZ9MhăU"1c#2P3HZuy,*HDS^&7SoL;zj_z;f^VSHp[5<a.c1/umF=l6QF4AY:fn\6=M,I>răU"2;RF3$j>n-J+oKgsX_CzrE(+e3H8BND6(iZqZVSntI3'x<up%&'9%%9%%%#-%JuăU"#&>$.=V(-&7%%J'%%%/%%%%%%%%%&%%E%%%%%%%%%wjfi%rjSy&'yup%&'9%%9%ăU"%%#-%lwd&>[*,St^(.%%e,%%%0%%%%%%%%%&%%E%%%'U&%%%zxji%lnkS%gfxu%ăU"p&'9%%9%%%%-%lAw&>m=Nk5;%%%%?%%%%0%%%%%%%%%&%%E%%%%c*%%%zxj%ilnăU"k%Srfp%up&'%9%9%%%%-%;sEj=m6ku)%Z(%%%=/%%%0%%%%%%%%%&%E%.%%L*%%ăU"%wj%xhfq%jSfx%rup&%'9%9%%%%-%%>G+4>t1\'v%(%+%-.%%%0%%%%%%%%%&%EăU"[%%%T%-%%x.mt&w%lgSf%xrup%&'9%%9%%%R-%Ktd&>Q3-kp4+%%%QB%%%.%%%%ăU"%%%%%&%%E%%%%)1%%A&un'%WSfx%rup&%'9%9%%%%-g%sEjF=)?w&/F'%+%%+%%ăU"%1%%%%%%%%%&%E%%%%_#7%%'#X[U'%Y]US%fxru%p&'9%%9%%%%-%'As&>gf.ZDăU"o%%%%0%&%%0%%%%%%%%%&%%E%%(%T9%%%wjx%hfqj%Stgo%up&'%9%9%%%%-%('ăU"s&>r39QN%H&%%%d&%%%0%%%%%%%%%&%E%.%%s:%%%xm(t&wl%gStg%oup&%'9%9ăU"%%%%-.%'s&a>O:U).j'%%%*)%%%.%%%%%%%%%%%E[%%%i#;%%&.un'W%Stgo%upăU"&'%9%9%%%%-%('s&>[<q:3%Q&%%%U&%%%1%%%%%%%%%&%E%7%%+>.%%'X.[U'Y%ăU"]USt%goup%&'9%%9%%%%-%?Fd+>J;=y#n;%%%fo%%%0%%%%%%%%%&%%E%%%%-#%ăU"%%ijhl%nkXS%gfxu%p*+%%%%%1#%1%x%'%%K%W%%%%%ăEND SUBăV2ăCLOSE:IF S=90AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDouglas Lusher                 PAN DEMO                       FidoNet QUIK_BAS Echo          02-09-96 (22:41)       QB, QBasic, PDS        115  3372     PANDEMO.BAS '>I rechecked the horizontal scroll program I posted the other day andă'>it works fine here. But two people have told me they didn't getă'>anything. So since it is fairly small I'll repost it after thisă'>message. Maybe the code got scrambled along the way.ăă' I saw your code for scrolling and noticed that you wereă' having problems with unwanted lines on the bottom of theă' display. Well, here's some similar code that you and theă' others interested can play with that is apparently usingă' the same principles. Note that this code allows scrollingă' up and down as well as right and left. This is based on ană' idea I got quite a while ago from someone else in this echoă' - please understand that I have no good explanation as toă' *why* it works or exactly what is going on.ăă DECLARE SUB ColorShow (MaxX%, MaxY%, C%)ă DECLARE SUB PanVGA ()ă DEFINT A-Zăă Mode% = 13ăă SELECT CASE Mode%ă   CASE 1ă     Horz% = 320: Vert% = 200: Cullers% = 4ă   CASE 2ă     Horz% = 640: Vert% = 200: Cullers% = 2ă   CASE 7ă     Horz% = 320: Vert% = 200: Cullers% = 16ă   CASE 8ă     Horz% = 640: Vert% = 200: Cullers% = 16ă   CASE 9ă     Horz% = 640: Vert% = 350: Cullers% = 16ă   CASE 11ă     Horz% = 640: Vert% = 480: Cullers% = 2ă   CASE 12ă     Horz% = 640: Vert% = 480: Cullers% = 16ă   CASE 13ă     Horz% = 320: Vert% = 200: Cullers% = 256ă   CASE ELSEă     BEEP: PRINT "Bad screen mode:"; Mode%: ENDă END SELECTăă PRINT "Press a key to begin puting some graphics on the screen."ă PRINT "When you feel like it, press any key to stop creating"ă PRINT "graphics.  You may then use the arrow keys to scroll"ă PRINT "the screen right and left and up and down. Press ESC"ă PRINT "to end the program."ă DO UNTIL LEN(INKEY$): LOOPăă SCREEN Mode%ă CALL ColorShow(Horz%, Vert%, Cullers%)ăă CALL PanVGAăă SCREEN 0: WIDTH 80ă ENDăă SUB ColorShow (MaxX%, MaxY%, C%)ăă 'time the system cpuă Start! = TIMERă FOR A = 1 TO 5000: Nul! = SQR(3): NEXTă Modifier! = (TIMER - Start!) / 2.5ă RANDOMIZE TIMERă DOă  X% = RND * MaxX%: Y% = RND * MaxY%ă  SELECT CASE RNDă    CASE IS > .95ă      FOR A = 1 TO 250 / Modifier!ă        LINE (X%, Y%)-(RND * MaxX%, RND * MaxY%), RND * C%ă        IF LEN(INKEY$) THEN EXIT SUBă      NEXTă    CASE IS > .5ă      LINE (X%, Y%)-(RND * MaxX%, RND * MaxY%), RND * C%, BFă    CASE ELSEă      DO: Culler% = RND * C%: LOOP UNTIL Culler% <> POINT(X%, Y%)ă      CIRCLE (X%, Y%), RND * (MaxY% \ 4), Culler%ă      PAINT STEP(0, 0), Culler%ă  END SELECTă  IF LEN(INKEY$) THEN EXIT SUBă LOOPăă END SUBăă SUB PanVGAăă X% = 0: Y% = 0ă DOă  DO WHILE LEN(INKEY$): LOOPă  DO: KP$ = INKEY$: LOOP UNTIL LEN(KP$)ă  KP% = ASC(KP$): IF KP% = 0 THEN KP% = -ASC(MID$(KP$, 2, 1))ă  SELECT CASE KP%ă    CASE 27ă      EXIT DOă    CASE 52, -75  'Four, LArrowă      IF X% > 0 THEN X% = X% - 1ă    CASE 54, -77   'Six, RArrowă      IF X% < 255 THEN X% = X% + 1ă    CASE 56, -72  'Eight, UpArrowă      IF Y% > 0 THENă        Y% = Y% - 1ă        X% = X% + 16: IF X% >= 240 THEN X% = X% - 240ă      END IFă    CASE 50, -80  'Two, DnArrowă      IF Y% < 64 THENă        Y% = Y% + 1ă        X% = X% - 16: IF X% <= 15 THEN X% = X% + 240ă      END IFă  END SELECTă  'here's where the scrolling takes place:ă  OUT &H3D4, 12: OUT &H3D5, Y%ă  OUT &H3D4, 13: OUT &H3D5, X%ă LOOPăă END SUBăChurl Beck                     YET ANOTHER STAR FIELD         FidoNet QUIK_BAS Echo          02-04-96 (02:00)       QB, QBasic, PDS        161  5555     YASF.BAS    'YASF.BAS: "Yet Another Star Field"ă'Written on 02-04-96 by Churl Beckă'Based on assembly source originally by Draeden (with thanks to Markă' Butler for posting it)ăă'Notes:ă' 1.) Use the "+" and "-" keys to accelerate and decelerate.ă' 2.) Certain speeds tend to cause an overflow error while in the QBă'  environment.  So either compile or don't test your luck w/the keys.ă' 3.) There are no built-in delays at this time.  Make sure to adjustă'  the code to suit your computer's speed.ă' 4.) For those of you with masochistic personalities, I left in theă'  code for PALETTE USING.  Just REM the OUTs and unREM the rest.ăăăDEFINT A-ZăăDECLARE SUB MakeStar ()ăDECLARE SUB DisplayStars ()ăăCONST ScreenWidth = 320                   'Screen widthăCONST ScreenHeight = 200                  'Screen heightăCONST MinZpos = 2, MaxZpos = 4096         'Screen depthăăCONST NumColors = 5                       '# of Base colorsăCONST NumRnds = 400                       '# of random numbers definedăCONST MaxStars = 190                      'Maximum # of starsăCONST MaxWarp = 90                        'Maximum speed of starsăăTYPE Stară  X     AS INTEGERă  Y     AS INTEGERă  Z     AS INTEGERă  OldX  AS INTEGER                        'Where to erase last dotă  OldY  AS INTEGERă  Colr  AS INTEGER                        'BASE color.ăEND TYPEăDIM SHARED Star(1 TO MaxStars) AS Star    'Where all the data is heldăDIM SHARED WarpSpeed, NumActive, CIndex   'Make these publicăăWarpSpeed = 20                            'Speed of starsă'CIndex = 0                                'Index into ColorChartă'NumActive = 0                             '# of active starsăăă'------------------------------------------------------------------------ăă  SCREEN 13                               'Set video mode 320x200x256ă  'DIM Pal&(0 TO 255)                     'For PALETTE USING onlyă  DIM Table(0 TO 17)ă  Table(0) = 2:   Table(3) = 2:   Table(6) = 3ă  Table(1) = 3:   Table(4) = 2:   Table(7) = 3ă  Table(2) = 4:   Table(5) = 4:   Table(8) = 4ăă  Table(9) = 3:   Table(12) = 3:  Table(15) = 2ă  Table(10) = 2:  Table(13) = 3:  Table(16) = 4ă  Table(11) = 4:  Table(14) = 3:  Table(17) = 3ăăă  OUT &H3C8, 1                            'Begin at color #1ă  FOR M = 0 TO 15 STEP 3ă    FOR i = 15 TO 0 STEP -1ă      OUT &H3C9, (Table(M) * i + 7)       'Redă      OUT &H3C9, (Table(M + 1) * i + 7)   'Greenă      OUT &H3C9, (Table(M + 2) * i + 7)   'Blueăă      'Colr = Colr + 1                     'Next coloră      'Pal&(Colr) = 65536 * (Table(M + 2) * i + 3)             'Blueă      'Pal&(Colr) = Pal&(Colr) + 256 * (Table(M + 1) * i + 3)  'Greenă      'Pal&(Colr) = Pal&(Colr) + (Table(M) * i + 3)            'Redă    NEXTă  NEXTă  'FOR Colr = Colr TO 255                  ă  '  Pal&(Colr) = -1                       '-1 = don't change this coloră  'NEXTă  'PALETTE USING Pal&ăăDOă  DOă    CALL MakeStar                         '2 calls = twice the starsă    CALL MakeStarăă    CALL DisplayStarsă    Ky$ = INKEY$ă  LOOP UNTIL LEN(Ky$)ăă  SELECT CASE ASC(Ky$)ă    CASE 43                               'ASC("+")ă      IF WarpSpeed < MaxWarp THEN WarpSpeed = WarpSpeed + 1ă    CASE 45                               'ASC("-")ă      IF WarpSpeed > 0 THEN WarpSpeed = WarpSpeed - 1ă    CASE ELSEă      EXIT DOă  END SELECTăLOOPăSCREEN 0, 0, 0ăăSUB DisplayStars STATIC                   'Draws all of the starsăă  FOR Num = 1 TO MaxStarsă    IF Star(Num).Z <> 0 THEN              'Is this star alive?ă      'Erase the star from its previous coordinatesă      PSET (Star(Num).OldX, Star(Num).OldY), 0ăă      IF Star(Num).Z < MinZpos THENă        Star(Num).Z = 0                   'Kill this stară        NumActive = NumActive - 1ă      ELSEă        'Multiply by 256 and center it on the screenă        Y = (Star(Num).Y * 256&) \ Star(Num).Z + (ScreenHeight \ 2)ăă        IF Y >= ScreenHeight THENă          Star(Num).Z = 1                 'Star will get erased theă          GOTO Continue                   ' next time throughă        END IFă        Star(Num).OldY = Y                'Save coordinateăă        'Multiply by 256 and center it on the screenă        X = (Star(Num).X * 256&) \ Star(Num).Z + (ScreenWidth \ 2)ă        IF X >= ScreenWidth THENă          Star(Num).Z = 1                 'Star will get erased theă          GOTO Continue                   ' next time throughă        END IFă        Star(Num).OldX = X                'Save coordinateăă        'Calculate the coloră        Colr = Star(Num).Colr + (Star(Num).Z \ 256)ă        PSET (X, Y), Colră        'Move the stars inward at WarpSpeedă        Star(Num).Z = Star(Num).Z - WarpSpeedăă      END IFă    END IFăContinue:ă  NEXTăăEND SUBăăSUB MakeStar STATIC   'Finds an available slot for a star & puts it thereăă  IF NumActive < MaxStars THEN            'Search for 1st available slotăă    FOR Num = 1 TO MaxStarsă      IF Star(Num).Z = 0 THEN             'Is this slot empty?ăă        'Random starting coordinatesă        Star(Num).Y = ((RND * NumRnds) - (NumRnds \ 2)) * 8ă        Star(Num).X = ((RND * NumRnds) - (NumRnds \ 2)) * 8ăă        Star(Num).Z = MaxZpos             'Reset Zpos to the maxă        NumActive = NumActive + 1         'Increase the counterăă        'Increase the color counteră        CIndex = (CIndex MOD NumColors) + 1ă        Star(Num).Colr = 16 * CIndex      'Select a colorăă      END IFă    NEXTă  END IFăăEND SUBăTimothy Culberson              VGA PAINT                      culberson@itchy.mis.nb.ca      04/95 (00:00)          QB, PDS                392  8724     QBPAINT.BAS 'I know this code is extremely messy and makes absoloutely no sense to anyone,ă'But it was originally programmed for only myself. ăăă'-----------------------------------Documentation starts here--------------ă'VGA Paintă'Byă'Timothy culbersonă'For QBasic programmersă'April, 1995ă'Complete documentationăă'Welcome Quick Basic programmer to the painting program made in Quick Basic.ăă'This Program will allow you to paint neat logos and graphics you can use withă'your BASIC programs using the Bsave and Bload commands in Basic.  Actually, ită'won't allow you to do much of anything, but anyways...here it is.ăă'How does it work?ăă'The drawing screen:ă'This is where you'll be painting in.  It is an area 150 pixels by 120 pixels.ăă'The NEW button:ă'This will clear the whole drawing screenăă'The QUIT button:ă'This quits the programăă'The COLOR button:ă'This changes the color.  The color is shown along the palette bar at theă'bottom of the screen and the box outline at the bottom of the screen.ă'The left mouse button advances the color and the right mouse button decreasesă'the color along the palette bar.ăă'The SAVE button:ă'This button will save your waork with the extension .RADăă'The LOAD button:ă'This button will load a previously saved work with the extension .RADăă'The SQUARE button:ă'This button will change the size of the drawing square.  The left mouseă'button will increase the size and the right mouse button will decrease theă'size.  The size is shown at the bottom of the square.ăăă'How to Bload your work in your Qbasic programs....the source code:ăă'Loading you program from memory is very easy.ă'1] Create a drawing in VgaPaintă'2] Place the source code into your QB program wherever you want it.ă'3] Watch the cool thing!ăă'Source Code: how is it done?ăă'SCREEN 13ă'^^^^^^^^^^^^^^^ă'This sets the graphic screen to 320/200 vga 256 colors.ăă'DIM cub(1 TO 9000)ă'DEF SEG = VARSEG(cub(1))ă'BLOAD "c:\qb\" + "R5" + ".RAD", VARPTR(cub(1))ă'             ^^^^^^       ^^^--->filenameă'          Path of fileă'DEF SEGă'^^^^^^^^^^^^ă'This will load it up.ă'PUT (80, 25), cub, PSETă'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ă'This line will put the graphic at desired X,Y coordinates.ăăă'And that's it.ăă'E -mail:ă'culberson@mis.nb.caă'------------------------------Code starts here-------------------------------ăSTARTUP:ăDECLARE SUB ENDPROGRAM ()ăDECLARE SUB SAVE ()ăDECLARE SUB LOAD ()ăDECLARE SUB NEWSCREEN ()ăDECLARE SUB ARROW ()ăDECLARE SUB DRAWSCREEN ()ăREM $INCLUDE: 'QB.BI'ăDIM SHARED REGX  AS RegTypeXăDIM SHARED COLăDIM SHARED RADăDIM SHARED RADI, SPDăCLSăSCREEN 13ăCALL DRAWSCREENăăăYO:ăăREGX.ax = 15ăCALL INTERRUPTX(&H33, REGX, REGX)ăREGX.cx = 16ăREGX.dx = 16ăCALL INTERRUPTX(&H33, REGX, REGX)ăREGX.ax = 1ăCALL INTERRUPTX(&H33, REGX, REGX)ăREGX.ax = 3ăCALL INTERRUPTX(&H33, REGX, REGX)ăA$ = INKEY$ăIF A$ = CHR$(27) THEN ENDăIF REGX.cx / 2 > 150 THEN GOTO ODAăIF REGX.dx > 120 THEN GOTO ODAăăSQ:ăIF REGX.cx / 2 < 150 AND REGX.dx < 120 AND REGX.cx / 2 > 0 AND REGX.dx > 0 AND REGX.bx = 1 THENăLINE (REGX.cx / 2, REGX.dx)-(REGX.cx / 2 - SS, REGX.dx - SS), COL, BFăEND IFăăCALL INTERRUPTX(&H33, REGX, REGX)ăGOTO YOăăODA:ă'LINE (160, 0)-(220, 30), 32, BăIF REGX.cx / 2 > 160 AND REGX.dx > 0 AND REGX.cx / 2 < 220 AND REGX.dx < 30 AND REGX.bx = 1 THENăCOL = COL + 1ăCOLOR 15: PSET (COL, 194): CALL ARROW: COLOR 0: PSET (COL - 1, 194): CALL ARROWăIF COL > 255 THEN COL = 255ăFOR DELAY = 1 TO 600: NEXT DELAYăCOLOR COLăEND IFăă'LINE (160, 0)-(220, 30), 32, BăIF REGX.cx / 2 > 160 AND REGX.dx > 0 AND REGX.cx / 2 < 220 AND REGX.dx < 30 AND REGX.bx = 2 THENăCOL = COL - 1ăCOLOR 15: PSET (COL, 194): CALL ARROW: COLOR 0: PSET (COL + 1, 194): CALL ARROWăFOR DELAY = 1 TO 600: NEXT DELAYăIF COL < 0 THEN COL = 0ăCOLOR COLăEND IFăăăă'NEW TOOLă'LINE (250, 0)-(285, 20), 32, BăIF REGX.cx / 2 > 160 AND REGX.dx > 25 AND REGX.cx / 2 < 220 AND REGX.dx < 45 AND REGX.bx = 1 THENăLINE (0, 0)-(150, 120), 0, BFăLINE (0, 0)-(150, 120), 15, BăEND IFăă'SAVE TOOLă'LINE (225, 25)-(285, 45), 32, BăIF REGX.cx / 2 > 225 AND REGX.dx > 25 AND REGX.cx / 2 < 285 AND REGX.dx < 45 AND REGX.bx = 1 THEN CALL SAVEăă'LOAD TOOLă'LINE (160, 50)-(220, 70), 32, BăIF REGX.cx / 2 > 160 AND REGX.dx > 50 AND REGX.cx / 2 < 220 AND REGX.dx < 70 AND REGX.bx = 1 THEN GOTO WHATINTHEHECKăă'SQUARE SIZE TOOLă'LINE (225, 50)-(285, 70), 32, BăIF REGX.cx / 2 > 225 AND REGX.dx > 50 AND REGX.cx / 2 < 285 AND REGX.dx < 70 AND REGX.bx = 1 THENăSS = SS + 1ăIF SS > 10 THEN SS = 10ăFOR DELAY = 1 TO 700: NEXT DELAYăEND IFăăIF REGX.cx / 2 > 225 AND REGX.dx > 50 AND REGX.cx / 2 < 285 AND REGX.dx < 70 AND REGX.bx = 2 THENăSS = SS - 1ăIF SS < 1 THEN SS = 1ăFOR DELAY = 1 TO 700: NEXT DELAYă'LOCATE 10, 23: PRINT SSăEND IFăă'QUIT...ă'LINE (225, 0)-(285, 20), 32, BăIF REGX.cx / 2 > 225 AND REGX.dx > 0 AND REGX.cx / 2 < 285 AND REGX.dx < 20 AND REGX.bx = 1 THEN CALL ENDPROGRAMăă'color and SQUARE STATUS...ăLINE (250, 170)-(290, 190), COL, BăLOCATE 23, 33: COLOR 32: PRINT SSăăHMM:ăCALL INTERRUPTX(&H33, REGX, REGX)ăGOTO YOăăăWHATINTHEHECK:ăON ERROR GOTO fIxerITăDIM cub(1 TO 9000)ăDEF SEG = VARSEG(cub(1))ăLOCATE 17, 1ăINPUT "FILENAME(8 CHARACTERS MAX):", LOADER$ăIF LOADER$ = "" THEN GOTO PARTYBASHCRASHăBLOAD LOADER$ + ".RAD", VARPTR(cub(1))ăCONST badfilename = 53ăPUT (0, 0), cub, PSETăDEF SEGăPARTYBASHCRASH:ăLOCATE 17, 1: PRINT "                                      "ăLINE (0, 0)-(150, 120), 15, BăfIxerIT:ăIF ERR = badfilename THENăLOCATE 17, 1: PRINT "                                                      "ăEND IFăGOTO HMMăăSUB ARROWăDRAW "D2U3R1L2RU"ăEND SUBăăSUB CIRCLESă'***************DRAWING AREA****************AND DRAWING TOOLăIF REGX.cx / 2 < 147 AND REGX.dx < 117 AND REGX.cx / 2 > 2 AND REGX.dx > 2 AND REGX.bx = 1 THENăCALL INTERRUPTX(&H33, REGX, REGX)ăCIRCLE (REGX.cx / 2 - RAD, REGX.dx - RAD), RADIăEND IFăEND SUBăăSUB DRAWSCREENăLINE (0, 0)-(150, 120), 15, Bă'***************************PALLETTEăLOCATE 17, 1ăFOR X = 0 TO 255ăCOLOR XăPSET (X, 170)ăDRAW "D20"ăNEXT Xăă'***************************DRAW BUTTONS**************************************ă'COLOR BUTTONăLINE (160, 0)-(220, 20), 32, BăCOLOR 15ăLOCATE 2, 22: PRINT "COLOR"ăă'NEW BUTTONăLINE (160, 25)-(220, 45), 32, BăLOCATE 5, 23: PRINT "NEW"ăăă'save button drawăLINE (225, 25)-(285, 45), 32, BăLOCATE 5, 31: PRINT "SAVE"ăă'LOAD IT!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ăLINE (160, 50)-(220, 70), 32, BăLOCATE 8, 23: PRINT "LOAD"ă'SQUARE SIZE BUTTON DRAWăLINE (225, 50)-(285, 70), 32, BăLOCATE 8, 30: PRINT "SQUARE"ăă'QUIT BUTTON DRAWăLINE (225, 0)-(285, 20), 32, BăLOCATE 2, 31: PRINT "QUIT"ăăăăEND SUBăăSUB ENDPROGRAMăSCREEN 12: SCREEN 13ăFOR X = 1 TO 55ăPALETTE X, XăCOLOR XăPSET (X, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 50, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 100, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 150, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 200, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 250, 33)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 300, 33)ăDRAW "D10"ăNEXT XăăăFOR X = 1 TO 55ăPALETTE X, XăCOLOR XăPSET (X, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 50, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 100, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 150, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 200, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 250, 93)ăDRAW "D10"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, XăCOLOR XăPSET (X + 300, 93)ăDRAW "D10"ăNEXT XăăFOR X = 1 TO 55ăPALETTE X, X * 65536ăCOLOR XăLOCATE 10, 16: PRINT "Apoky!"ăNEXT XăăFOR X = 55 TO 1 STEP -1ăPALETTE X, X * 256ăCOLOR XăLOCATE 10, 16: PRINT "Apoky!"ăNEXT XăăSLEEP 10ăăENDăEND SUBăăSUB NEWSCREENăLINE (0, 0)-(150, 120), 0, BFăLINE (0, 0)-(150, 120), 15, BăEND SUBăăSUB SAVEăDIM Cube(1 TO 9999)ăLOCATE 17, 1ăINPUT "FILENAME(8 CHARACTERS MAX):", SAVIT$ăIF SAVIT$ = "" THEN GOTO YEEEE:ăGET (0, 0)-(150, 120), CubeăDEF SEG = VARSEG(Cube(1))ăBSAVE SAVIT$ + ".RAD", VARPTR(Cube(1)), 25000ăDEF SEGăYEEEE:ăLOCATE 17, 1: PRINT "                                         "ăLINE (0, 0)-(150, 120), 15, BăEND SUBăăDave Navarro, Jr.              PB PLASMA                      comp.lang.basic.misc           02-23-96 (20:23)       PB                     208  5563     PBPLASMA.BAS'PBPLASMA converted from Pascal by unknown CompuServe authoră'ă'Minor enhancements by Dave Navarro, Jr:ă'  Integers are faster than bytes.ă'  Integer divide (\) is faster than floating point divide (/).ă'  I experimented with changing Rough! to fixed point BCD andă'  got some really strange results when playing with FIXDIGITS.ăă$optimize speedă$float procedure     'use fast mathă$lib all off         'you don't need anyăădefint a-zăăMax.x=319ăMax.y=199        'screen sizeăMax.color=255    'number of colors to useăRough!=2         'how "rough" you want the plasma to be.ăăTYPE RGBTypeă  R AS BYTEă  G AS BYTEă  B AS BYTEăEND TYPEăăDIM PAL(512) as RGBTypeăăSHARED Max.x, Max.y, Rough!, Max.color, pal()ăăEXIT FAR AT FinishăăIF ISFALSE IsVGA% THEN Print "No VGA found":ENDăărandomize timerăăMode13SetăăMakePalette             'build a smooth paletteăăSet13pixel 0, 0, (rnd*Max.color)+1          'set the cornersăSet13pixel 0, Max.Y, (rnd*Max.color)+1ăSet13pixel Max.x, 0, (rnd*Max.color)+1ăSet13pixel Max.x, Max.Y, (rnd*Max.color)+1ăă'use Set13Pixel to plant "seed" pixels here, if wantedăăt#=timerăSplitbox 0, 0, Max.x, Max.yăt#=timer-t#ăăropal                    'rotate the paletteăăfinish:ă textmodeă clsă print t#ăendăăăăSUB Splitbox (x1, y1, x2, y2)            'this is the main subroutineă                                         'ă  if (x2-x1<2) and (y2-y1<2) then exit subă  if instat then exit far         'any key quits programă  x=(x1+x2)\2ă  y=(y1+y2)\2ă  Newcolor x1, y1, x, y1, x2, y1ă  Newcolor x2, y1, x2, y, x2, y2ă  Newcolor x1, y2, x, y2, x2, y2ă  Newcolor x1, y1, x1, y, x1, y2ă  if get13pixel(x,y) = 0 thenă    colour = ă(get13pixel(x1,y1)+get13pixel(x2,y1)+get13pixel(x2,y2)+get13pixel(x1,y2))\4ă      if colour < 1 then colour = 1ă      if colour > Max.color then colour = Max.coloră      Set13pixel x, y, coloură  end ifă  Splitbox x1, y1, x, yă  Splitbox x, y1, x2, yă  Splitbox x, y, x2, y2ă  Splitbox x1, y, x, y2ăEND SUBăăSUB Newcolor (xa, ya, x, y, xb, yb)       'puts a new color based on ăaverageă                                          'of surrounding pixels plus aă                                          'random valueă  if get13pixel(x,y) <> 0 then exit subă  avg = Abs(xa-xb)+Abs(ya-yb)ă  colour = (get13pixel(xa,ya)+get13pixel(xb,yb))\2 + ((rnd-0.5) * avg * ărough!)ă  if colour < 1 then colour = 1ă  if colour > Max.color then colour = Max.coloră  Set13Pixel x, y, colourăEND SUBăăSUB Makepalette      'this builds a 255 smooth color paletteă                     'note it does nothing with color 0ă                     'I didn't want the boarder to change.ă                     'this loads an array with 511 RGB values.ăă  for c% = 1 to 63     'from red to yellow, start with oneă    cn%=63-c%ă    PAL(c%).R = 63ă    PAL(c%).G = c%ă    PAL(c%).B = 0ă  next c%ă  for c% = 0 to 63ă    cn%=63-c%ă    ci%=c%+64ă    PAL(ci%).R = cn%    'yellow to blueă    PAL(ci%).G = cn%ă    PAL(ci%).B = c%ă  next c?ă  for c = 0 to 63ă    cn%=63-c%ă    ci%=c%+128ă    PAL(ci%).R = 0ă    PAL(ci%).G = că    PAL(ci%).B = 63      'blue to cyan(blue and green)ă  next că  for c = 0 to 63ă    cn%=63-c%ă    ci%=c%+192ă    PAL(ci%).R = c       'cyan to redă    PAL(ci%).G = cn?ă    PAL(ci%).B = cn?ă  next c?ăă  for c = 1 to Max.color           'copy array to second halfă    col? = PAL(c).Ră    PAL(c+Max.color).R = col?ă    col? = PAL(c).Gă    PAL(c+Max.color).G = col?ă    col? = PAL(c).Bă    PAL(c+Max.color).B = col?ă  next că  for x = 1 to Max.color             'actual VGA palette setting codeă    out &h3c8,x                'attribute   from red to yellowă    out &h3c9, PAL(x).R        'red?ă    out &h3c9, PAL(x).G        'green?ă    out &h3c9, PAL(x).B        'blue?ă  next xăEND SUBăăSUB RoPal         'this "rotates" the palette for animationă                  'rather than moving the RGB data, I build twoă                  'copies, and loop through both.ădoăfor i = 0 to Max.coloră  for x = 1 to Max.coloră    if instat then exit far         'any key quits programă    out &h3c8,x                  'attributeă    out &h3c9, PAL(x+i).R        'red?ă    out &h3c9, PAL(x+i).G        'green?ă    out &h3c9, PAL(x+i).B        'blue?ă  next x?ănext iăloop                           'loop until quităEND SUBăăFUNCTION IsVGA%                'test for VGAă  ' Function: returns VGA statusă  IsVGA% = bit(pbvScrnCard,5)ăEND FUNCTIONăăSUB Mode13Set    'set 320x200 256 color modeă ! mov ax,&h13ă ! int &h10ăEND SUBăăSUB TextMode     'sets text mode, resets paletteă ! mov ax,3ă ! int &h10ăEND SUBăăăSUB Set13Pixel (BYVAL X%, BYVAL Y%, BYVAL Colr%)ă               'fast pixel plotă  ! mov ax,&hA000ă  ! mov es,ax        ;es = VGA graphics memoryă  ! mov cx,X%ă  ! mov dx,Y%ă  ! mov al,Byte Ptr Colr%ă  ! xchg dl,dh       ;dx= y*256ă  ! mov di,dxă  ! shr di,1ă  ! shr di,1         ;di=y*64ă  ! add di,dx        ;di=y*320ă  ! add di,cx        ;di=y*320+x, i.e. pixel addressă  ! mov es:[di],al   ;put pixel in VGA memoryăEND SUBăăFUNCTION Get13Pixel% (BYVAL X%, BYVAL Y%)ă  ! mov ax,&hA000ă  ! mov es,ax        ;es = VGA graphics memoryă  ! mov cx,X%ă  ! mov dx,Y%ă  ! xchg dl,dh       ;dx= y*256ă  ! mov di,dxă  ! shr di,1ă  ! shr di,1         ;di=y*64ă  ! add di,dx        ;di=y*320ă  ! add di,cx        ;di=y*320+x, i.e. pixel addressă  ! mov al,es:[di]   ;get pixel from VGA memoryă  ! xor ah, ahă  ! mov FUNCTION,alăEND FUNCTIONăDouglas H. Lusher              VERTICAL RETRACE ANIMATION     FidoNet QUIK_BAS Echo          02-12-96 (00:00)       QB, QBasic, PDS        119  3858     ANIMATE.BAS  'Demo of 16 color animation in SCREEN 13ă 'by Douglas H. Lusher, 02-12-1996ăă 'Here is one method of producing animation in SCREEN 13.ă 'Use color values of 0 - 15 for the object which you wishă 'to animate. In this demo, these values correspond to theă 'standard 16 text-mode VGA colors. You can, in fact, sub-ă 'stitute any colors you wish by placing them in the elementsă 'of the Culler&() array and eliminating the loop whereă 'the standard colors are read from the palette. Your sixteenă 'background colors will be: 0, 16, 32, 48, 64, ...240. Theseă 'values will produce the same colors as the value dividedă 'by 16. Thus you have the same 16 colors available for theă 'background as you do for your sprite.ăă DECLARE FUNCTION ImageSize% (X1%, Y1%, X2%, Y2%)ă DECLARE SUB GPrint (X%, Y%, Culler%, Text$)ăă DEFINT A-Ză SCREEN 13ă DIM Culler&(15)ăă 'get the palette values for the standard 16 colorsă FOR C% = 0 TO 15ă  OUT &H3C7, C%ă  R% = INP(&H3C9)ă  G% = INP(&H3C9)ă  B% = INP(&H3C9)ă  Culler&(C%) = 65536 * B% + 256 * G% + R%ă NEXTăă 'specify the palette values needed for animationă FOR C% = 16 TO 255 STEP 16ă  PALETTE C%, Culler&(C% \ 16)ă  FOR X% = 1 TO 15ă    PALETTE C% + X%, Culler&(X%)ă  NEXTă NEXTăă 'create the object to animateă Bytes% = ImageSize%(0, 0, 15, 15)ă REDIM Object%(Bytes% \ 2)ă FOR X% = 0 TO 15ă  LINE (3, X%)-(12, X%), X, BFă NEXTă GET (0, 0)-(15, 15), Object%ăă 'create a background.ă 'the numbers displayed are the color numbers to use for theă '   background colors.ă CLSă FOR X% = 0 TO 15ă  LINE (X% * 20, 0)-((X% + 1) * 20 - 1, 199), X% * 16, BFă NEXTă FOR X% = 0 TO 15ă  CALL GPrint(X% * 20, (X% MOD 2) * 8 + 1, 0, LTRIM$(STR$(X% * 16)))ă NEXTăă X% = 100: Y% = 100ă PUT (X%, Y%), Object%ăMainLoop:ă  DO: IK$ = INKEY$: LOOP UNTIL LEN(IK$)ă  IK% = ASC(IK$): IF IK% = 0 THEN IK% = -ASC(MID$(IK$, 2, 1))ă  OldX% = X%: OldY% = Y%ă  SELECT CASE IK%ă    CASE 27                              'ESC was pressedă      SCREEN 0: WIDTH 80: ENDă    CASE -71, 55                         'Home or 7ă      IF X% > 0 AND Y% > 0 THEN X% = X% - 1: Y% = Y% - 1ă    CASE -72, 56                         'Up arrow or 8ă      IF Y% > 0 THEN Y% = Y% - 1ă    CASE -73, 57                         'Page up or 9ă      IF X% < 304 AND Y% > 0 THEN X% = X% + 1: Y% = Y% - 1ă    CASE -75, 52                         'Left arrow or 4ă      IF X% > 0 THEN X% = X% - 1ă    CASE -77, 54                         'Right arrow or 6ă      IF X% < 304 THEN X% = X% + 1ă    CASE -79, 49                         'End or 1ă      IF X% > 0 AND Y% < 184 THEN X% = X% - 1: Y% = Y% + 1ă    CASE -80, 50                         'Down arrow or 2ă      IF Y < 184 THEN Y% = Y% + 1ă    CASE -81, 51                         'Page down or 3ă      IF X% < 304 AND Y% < 184 THEN X% = X% + 1: Y% = Y% + 1ă    CASE ELSEă      BEEP: GOTO MainLoopă  END SELECTă  WAIT &H3DA, 8ă  PUT (OldX, OldY), Object%ă  PUT (X, Y), Object%ă GOTO MainLoopăă SUB GPrint (X%, Y%, Culler%, Text$)ă 'this routine allows printing text at any pixel locationă '      in the graphics modes without disturbing the backgroundă 'by Douglas H. Lusheră DEF SEG = &HFFA6        ' ROM segment for character shape tableă XX% = X%ă FOR Char% = 1 TO LEN(Text$)ă  Addr% = 8 * ASC(MID$(Text$, Char%, 1)) + 14ă  FOR Ln% = 0 TO 7ă    LineFormat% = CVI(CHR$(0) + CHR$(PEEK(Addr% + Ln%)))ă    YY% = Y% + Ln%ă    LINE (XX%, YY%)-(XX% + 7, YY%), Culler%, , LineFormat%ă  NEXTă  XX% = XX% + 8ă NEXTă DEF SEGă END SUBăă FUNCTION ImageSize% (X1%, Y1%, X2%, Y2%)ă ' Width of the imageă X% = ABS(X2% - X1%) + 1ă ' Height of the imageă Y% = ABS(Y2% - Y1%) + 1ă ' Size of the image in bytes.ă ImageSize% = (((X% * 8) + 7) \ 8) * Y% + 4ă ' The above formula has been simplified for SCREEN 13ă END FUNCTIONăăPeter Cooper                   SVGA IN BASIC                  comp.lang.basic.misc           02-25-96 (14:06)       QB, PDS, VBDOS         80   2831     SVGA.BAS    '<Someone's address>  (or similar) was asking for code that would go intoă'800x600x256 col mode. People suggested tricking the card or going and gettingă'libraries (maybe shareware - which you have to pay for remember)ă'Well if you have no money then you need this code I just wrote. It goes intoă'800x600x256 col mode on most cards. It works in QuickBasic 4.5, VBDOS andă'PDS7.0+.1 . You should load it  by going:   QB /L   or VBDOS /L  or QBX /Lă'to enable interrupts. Then run this code:ăă'$INCLUDE: 'qbx.bi'             'change to QB.BI for QB4.5ăăDIM SHARED inregs AS RegTypeăDIM SHARED outregs AS RegTypeăăSCREEN 0ăCLSăCOLOR 15ăPRINT "SVGA in Basic by Peter Cooper"ăCOLOR 12ăPRINT "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"ăPRINT "I will not be held responsible for any malfunctions in this source. It has"ăPRINT "been tested on a Trident and a Vesa card. If it doesnt work then wait about"ăPRINT "10 seconds and then press SPACE. It should return to normal."ăPRINTăPRINT "If all of your text goes monochrome then please turn off the machine and"ăPRINT "restart."ăCOLOR 7ăPRINTăPRINT "1 - Trident card   - 800x600x256cls"ăPRINT "2 - VESA(or unsure)- 800x600x16cls"ăPRINT "3 - Tseng          - 800x600x256cls"ăPRINT "4 - ATI            - 800x600x256cls"ăa$ = INPUT$(1)ăIF a$ < "1" OR a$ > "4" THEN SYSTEMăa% = VAL(a$)ăIF a% = 1 THEN m% = &H5EăIF a% = 2 THEN m% = &H6AăIF a% = 3 THEN m% = &H30ăIF a% = 4 THEN m% = &H63ăăăinregs.ax = m%                                       ' Set for screen modeăCALL Interrupt(&H10, inregs, outregs)                ' Change modeăFOR y% = 1 TO 480 STEP 9                             ' go down in intervalsă	FOR x% = 1 TO 640                            ' Go all-way cross screenă		inregs.ax = &HC0D                    ' set up function+coloră		inregs.bx = 1                        ' select page 1ă		inregs.cx = x%                       ' select x coordă		inregs.dx = y%                       ' select y coordă		CALL Interrupt(&H10, inregs, outregs)' set pixelă	NEXT x%ăNEXT y%ăăinregs.ax = &H200                                    ' This sets cursor posăinregs.bx = &H100ăinregs.dx = &H505ăCALL Interrupt(&H10, inregs, outregs)                ' call interruptăăinregs.ax = &HA48                                    ' this writes charsăinregs.bx = &H10Eăinregs.cx = 20ăCALL Interrupt(&H10, inregs, outregs)                ' call interruptăăa$ = INPUT$(1)ăăinregs.ax = &H3                                      ' change back to text modeăCALL Interrupt(&H10, inregs, outregs)                ' call interruptăăCLSăăSUB mousecommand (ax%, bx%, cx%, dx%)ăinregs.ax = ax%ăinregs.bx = bx%ăinregs.cx = cx%ăinregs.dx = dx%ăCALL Interrupt(&H33, inregs, outregs)ăax% = outregs.axăbx% = outregs.bxăcx% = outregs.cxădx% = outregs.dxăEND SUBăEarl L. Montgomery             320X400 SCREEN MODE            FidoNet QUIK_BAS Echo          02-23-96 (17:48)       QB, QBasic, PDS        93   3408     320X400.BAS 'The following post is a program I wrote called 320X400.BAS. It demonstratesă'how to set up SCREEN 13 320X400X256 mode. It is bare bones. No save or loadă'routines, other than the routine that saves the screen prior to displaying theă'HELP menu.If you want to expand on this program please do so! Press H once theă'program is started for the HELP menu.ăăsetmode:ă 'Sets SCREEN 13 to the 320X400X256 modeă SCREEN 13: DEF SEG = &HA000ă KEY(10) ONă ON KEY(10) GOSUB endofprogramă OUT &H3D4, 9: OUT &H3D5, &H40: OUT &H3D4, 20: OUT &H3D5, 0: OUT &H3D4, 23ă OUT &H3D5, &HE3: OUT &H3C4, 4: OUT &H3C5, &H6ă OUT &H3C4, 2: OUT &H3C5, 15: CLS : 'rem this clears (CLS) all 4 planesă IF flag$ = "restart" THEN GOTO loadtempă OUT &H3C4, 2: OUT &H3C5, 1ăbegin:ă position% = 15318: c = 15: plane% = 1: OUT &H3C4, 2: OUT &H3C5, 1ărestart:ă flag$ = ""ă POKE position%, căwaitkey1:ă i$ = INKEY$: IF i$ = "" THEN GOTO waitkey1ă i$ = UCASE$(i$)ă keycode% = CVI(i$ + CHR$(0))ă IF keycode% = 19712 THEN GOTO moverightă IF keycode% = 19200 THEN GOTO moveleftă IF keycode% = 18432 THEN GOTO moveupă IF keycode% = 20480 THEN GOTO movedownă IF i$ = "C" THEN GOTO changecoloră IF i$ = "H" THEN GOTO helpscreenă IF i$ = "X" THEN GOTO clearscreenă GOTO waitkey1ămoveright:ă IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO pokescrnă IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4: GOTO pokescrnă IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: GOTO pokescrnă IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: position% = position% + 1ăpokescrn: IF position% > 31999 THEN position% = 31999ă POKE position%, că GOTO waitkey1ămoveleft:ă IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: position% = position% - 1: GOTO doită IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: GOTO doită IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO doită IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4:ădoit:ă IF position% < 0 THEN position% = 0ă POKE position%, că GOTO waitkey1ămoveup:ă position% = position% - 80ă IF position% < 0 THEN position% = position% + 80ă POKE position%, că GOTO waitkey1ămovedown:ă position% = position% + 80ă IF position% > 32000 THEN position% = position% - 80ă POKE position%, că GOTO waitkey1ăchangecolor:ă c = c + 1ă IF c > 255 THEN c = 0ă POKE position%, că GOTO waitkey1ă GOTO waitkey1ăhelpscreen:ă 'Saving screen before switching to SCREEN 9 and the HELP MENUă DEF SEG = &HA000ă OUT &H3CE, 4: OUT &H3CF, 0: BSAVE "temp1.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 1: BSAVE "temp2.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 2: BSAVE "temp3.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 3: BSAVE "temp4.bin", 0, 32000ă SCREEN 9: CLSă PRINT "Key             Function"ă PRINT "Use arrow keys to move cursor"ă PRINT "C               Changes current color"ă PRINT "F10             Exit Program "ă PRINT "H               Help (This Screen)"ăwaitkey2:ă i$ = INKEY$: IF i$ = "" THEN GOTO waitkey2ă CLS : flag$ = "restart": GOTO setmodeăloadtemp:ă OUT &H3C4, 2: OUT &H3C5, 1: BLOAD "temp1.bin"ă OUT &H3C4, 2: OUT &H3C5, 2: BLOAD "temp2.bin"ă OUT &H3C4, 2: OUT &H3C5, 4: BLOAD "temp3.bin"ă OUT &H3C4, 2: OUT &H3C5, 8: BLOAD "temp4.bin"ă GOTO restartăclearscreen:ă OUT &H3C4, 2: OUT &H3C5, 15: CLS : GOTO beginăendofprogram:ă SCREEN 0: CLS : DEF SEG : ENDăăThomas Gohel                   SCROLLING OVER VGA-BIOS        alt.lang.basic                 03-03-96 (00:00)       PB                     84   2264     VGASCROL.BAS'**************************************************************************ă'ă'   Scrolling Windows over VGA-BIOS in PowerBASIC 3.0/3.2ă'ă'   entwickelt von / developed by   :  Thomas Gohelă'ă'                           Fido    :  Thomas Gohel@2:2410/301.12ă'                           InterNet:  author@pbsound.snafu.deă'                           Homepage:  http://www.snafu.de/~pbsound/ă'ă'**************************************************************************ăăDIM Demo$(25)ăVordergrund% = 15ăHintergrund% = 1ăă'*** Erklärung ***ăSHARED Zol%, Sol%, Zur%, Sur%, Anzahl%, ScrollFarbe%ăă'Zol%    = Zeile oben linksă'Sol%    = Spalte oben linksă'Zur%    = Zeile unten rechtsă'Sur%    = Spalte unten rechtsă'Anzahl% = Anzahl der zu scrollenden Zeilenăăă'*** String füllen ***ăDemo$(1) = "---------    Scrolling windows (over VGA-BIOS)   (c) 1994 Thomas Gohel    ----------"ăFOR i% = 2 TO 25ă    Demo$(i%) = STRING$(80,65+i%)ăNEXT i%ăă'*** String auf Bildschirm ausgeben ***ăCOLOR VorderGrund%, Hintergrund%ăFOR i% = 1 TO 25ă    LOCATE i%,1: PRINT Demo$(i%);ăNEXT i%ăă'*** jetzt wird gescrollt ****ăăFOR i% = 1 TO 11ă    DELAY 0.5ă    ScrollFarbe% = Vordergrund% + (Hintergrund% * 16)ă    ScrollingHoch     8, 10, 18, 35, 1, ScrollFarbe%ă    ScrollingHerUnter 8, 47, 18, 72, 1, ScrollFarbe%ă    LOCATE 18, 10: PRINT "  --- Scrolling Hoch ---  "ă    LOCATE  8, 47: PRINT " -- Scrolling Herunter -- "ăNEXT i%ăăENDăăFUNCTION ScrollingHoch(BYVAL Zol%, BYVAL Sol%, BYVAL Zur%, BYVAL Sur%, BYVAL Anzahl%, BYVAL ScrollFarbe%)ăă        ! mov ah, &h06ă        ! mov al, Anzahl%ă        ! mov bh, ScrollFarbe%ă        ! mov ch, Zol%ă        ! dec chă        ! mov cl, Sol%ă        ! dec clă        ! mov dh, Zur%ă        ! dec dhă        ! mov dl, Sur%ă        ! dec dlă        ! int &h10ăăEND FUNCTIONăăFUNCTION ScrollingHerunter(BYVAL Zol%, BYVAL Sol%, BYVAL Zur%, BYVAL Sur%, BYVAL Anzahl%, ByVal ScrollFarbe%)ăă        ! mov ah, &h07ă        ! mov al, Anzahl%ă        ! mov bh, ScrollFarbe%ă        ! mov ch, Zol%ă        ! dec chă        ! mov cl, Sol%ă        ! dec clă        ! mov dh, Zur%ă        ! dec dhă        ! mov dl, Sur%ă        ! dec dlă        ! int &h10ăăEND FUNCTIONăChad Beck                      PAC-MAN SCREEN SAVER           Kevin Smith                    03-02-96 (00:00)       QB, QBasic, PDS        215  5578     PACSAVE.BAS ' > Here's...my PacMan Screen Saver....ăă'     I love it!ăă' > Anyone have any suggestions as to how I could make it any better?ăă'     Yep.  This could still be much improved, but it's a start (>15Kă'smaller than the original).  Hopefully you'll find it easier to read andă'modify too.  Enjoy!ăă' ******************************************************************ă' **  KEVIN SMITH  ********  PACMAN.BAS  *********  JAN 14, 1996  **ă' ******************************************************************ă' **  PURPOSE:  TO CREATE A PAC-MAN SCREEN SAVER THAT WILL GO IN  **ă' **            ALL FOUR DIRECTIONS INSTEAD OF ONLY ONE USING     **ă' **            DATA FILES INSTEAD OF REDRAWING ALL THE GRAPHICS  **ă' **            EACH TIME THE PROGRAM IS RUN.                     **ă' ******************************************************************ă'                       Optimized by CHuRL 3-2-96ăăDEFINT A-Z                                'Use integers onlyăăCONST ArraySize = 242, NumGraphics = 21ăCONST Delay = 700                         'Set the delay onceăCONST True = -1, False = NOT TrueăDIM Graphic(0 TO ArraySize * NumGraphics)ăăSCREEN 7ăCLSăRANDOMIZE TIMERăă'GOSUB MakeData                            '!!!ăăDEF SEG = VARSEG(Graphic(0))ăON ERROR GOTO MakeDataă  BLOAD "Pacman.DAT", VARPTR(Graphic(0))ăON ERROR GOTO 0                           'I promise it won't crashă                                          ' from here on...ăDirection = 1ăX = 160ăY = 100ăDOă  IF Turns > NumTurns THENă    Turns = 0ă    Direction = INT(RND * 4)ă    NumTurns = INT(RND * 7) + 2ă  END IFă  SELECT CASE Directionă    CASE 0: GOSUB Rightă    CASE 1: GOSUB Leftă    CASE 2: GOSUB Down: Y = 199 - Y - 19ă    CASE ELSE: GOSUB Upă  END SELECTă  Turns = Turns + 1ăLOOP UNTIL INKEY$ = CHR$(27)              'Continue until ESC pressedăSCREEN 0ăWIDTH 80ăENDăăRight:ă  FOR Frame = 0 TO 6ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF X < 295 THEN X = X + 1ă  NEXTă  FOR Frame = 6 TO 0 STEP -1ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF X < 295 THEN X = X + 1ă  NEXTă  IF X = 295 THEN NumTurns = 0ă  RETURNăăLeft:ă  FOR Frame = 7 TO 13ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF X > 0 THEN X = X - 1ă  NEXTă  FOR Frame = 13 TO 7 STEP -1ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF X > 0 THEN X = X - 1ă  NEXTă  IF X = 0 THEN NumTurns = 0ă  RETURNăăDown:ă  Y = 199 - Y - 19                        '19 = graphic heightă  WINDOW (0, 0)-(319, 199)                'Inverse coordinatesăUp:ă  FOR Frame = 14 TO 20ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF Y > 0 THEN Y = Y - 1ă  NEXTă  FOR Frame = 20 TO 14 STEP -1ă    PUT (X, Y), Graphic(Frame * ArraySize), PSETă    FOR Stall = 0 TO Delay: NEXTă    IF Y > 0 THEN Y = Y - 1ă  NEXTă  IF Y = 0 THEN NumTurns = 0ă  WINDOW SCREEN (0, 0)-(319, 199)         'Return to normală  RETURNăăMakeData:ă  'Right Pac-Peopleă  'SCREEN 7, , 1, 0                        '!!!ă  FOR X = 1 TO 10ă    CIRCLE (20, 20), X, 14ă    CIRCLE (21, 20), X, 14ă  NEXT Xă  LINE (20, 14)-STEP(2, 1), 0, BF         'Sketch the eyeă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 20), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 19), 0ă  LINE (20, 20)-(31, 21), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 18), 0ă  LINE (20, 20)-(31, 22), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 17), 0ă  LINE (20, 20)-(31, 23), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 16), 0ă  LINE (20, 20)-(31, 24), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(31, 15), 0ă  LINE (20, 20)-(31, 25), 0ă  GOSUB SaveGraphicăă  'Left Pac-Peopleă  FOR X = 0 TO 10ă    CIRCLE (20, 20), X, 14ă    CIRCLE (21, 20), X, 14ă  NEXT Xă  LINE (20, 14)-STEP(2, 1), 0, BF         'Sketch the eyeă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 20), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 19), 0ă  LINE (20, 20)-(10, 21), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 18), 0ă  LINE (20, 20)-(10, 22), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 17), 0ă  LINE (20, 20)-(10, 23), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 16), 0ă  LINE (20, 20)-(10, 24), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(10, 15), 0ă  LINE (20, 20)-(10, 25), 0ă  GOSUB SaveGraphicăă  'Up Pac-Peopleă  FOR X = 1 TO 10ă    CIRCLE (20, 20), X, 14ă    CIRCLE (21, 20), X, 14ă  NEXT Xă  LINE (14, 19)-STEP(1, 2), 0, BF         'Sketch the eyeă  GOSUB SaveGraphicăă  LINE (20, 20)-(20, 10), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(19, 10), 0ă  LINE (20, 20)-(21, 10), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(18, 10), 0ă  LINE (20, 20)-(22, 10), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(17, 10), 0ă  LINE (20, 20)-(23, 10), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(16, 10), 0ă  LINE (20, 20)-(24, 10), 0ă  GOSUB SaveGraphicăă  LINE (20, 20)-(15, 10), 0ă  LINE (20, 20)-(25, 10), 0ă  GOSUB SaveGraphicăă  'SCREEN 7, , 0                           '!!!ă  'RETURN                                  '!!!ăă  SCREEN 0ă  WIDTH 80ă  PRINT "CREATING DATA FILE... PLEASE WAIT"ă  DEF SEG = VARSEG(Graphic(0))ă    BSAVE "Pacman.DAT", VARPTR(Graphic(0)), ArraySize * NumGraphics * 2ă  PRINT "DATA FILE CREATED.  YOU MAY NOW RUN THIS PROGRAM AGAIN."ă  ENDăăSaveGraphic:ă  GET (9, 11)-(32, 29), Graphic(Offset)ă  Offset = Offset + ArraySizeă  RETURNăTyler Barnes                   VESA SVGA SCREEN ROUTINES      FidoNet QUIK_BAS Echo          03-10-96 (00:43)       QB, PDS                341  12443    VESA.BAS    '                QuickBasic High Resolution Screen Routinesă'ă'                        By D. Tyler Barnesă'ă'             Works(Hopefully) with any VESA compatible BIOSă'ă'Introă'~~~~~ă'ă'        Ok,first of all,I'm not as heavily in to QuickBasic programming asă'I used to be,so I was a bit lazy writing this. I left a LOT of room foră'improvement. Second of all,when I WAS in to QuickBasic programming, graphicsă'was not a specialty. I was more in to communications. The point I'm tryingă'to make,is that there may be code in this thing that is extraneous,andă'there may be ways to do what this code is doing a lot faster... Infact,Iă'KNOW there are ways to make it faster... I'm using the BIOS Write Pixelă'command in all the graphics commands. It would be much faster done with directă'writes to video memory.. I'll leave the improvements up to you.ă'Just do me a favour and send me your changes so that next time I post this,ă'others will recieve these changes. I'll put your name on your code,so don'tă'worry about me stealing your credit...ă'Oh,another weird thing I've done,is I've used InterruptX almost everywhere,ă'even in places where INTERRUPT would've worked. As far as I know they areă'identical anyhow,'cept INTERRUPTX can use more registers... but perhapsă'I'm wrong. Perhaps INTERRUPT is faster or something. Go ahead and change it.ă'ă'How to useă'~~~~~~~~~~ă'ă'* Before doing anything,make sure you've loaded QuickBasic with theă'  /L switch.ă'* Next detect whether or not the machine has VESA compatibilityă'* Set the screen modeă'* Write the program hereă'* Use the CleanUp commandă'* Endă'ă'Commands:ă'ă'Border-This command is used when in text mode,and some graphic modes.ă'         It has one integer parameter. Depending what screen mode you're in,ă'         and what number you use,this will change the screen colour,theă'         border,both,or neither. Just mess around with it ...ă'         Example Usage:Border 9ă'         On my machine,the above will produce a light blue border when ină'         ScreenMode 3(Basic's SCREEN 0)ă'Box-This command will not work in any text modes.(Obviously)ă'      It has 5 parameters. 4 to define the box,and the last to define theă'      colour of the box.ă'      Example Usage:Box 10,11,50,51,3ă'      The above command would make a box with the left hand corner  on pointă'      10,11(X,Y) and the bottom right hand corner on 50,51.ă'      The last parameter is the colour and will have a different resultă'      depending on your screen mode.ă'CleanUp-This command is used to clean up after the ScreenMode command. Ită'          should be run before you exit your program. Also,if you haveă'          allready run ScreenMode once,and you want to change to a newă'          screen mode,you'll have to run this before doing so. Also,if youă'          want to stop using these routines,and use BASIC's routines instead,ă'          and ScreenMode has allready been used in your program,you'll haveă'          to run this before using BASIC's SCREEN command.ă'          Example Usage:CleanUpă'CurVidMode-This function will return the current video mode. The numberă'             returned will not always correspond with the number used in theă'             ScreenMode command,and will not always correspond with BASIC'să'             SCREEN mode. If you want to see what the number returned means,ă'             look up AH=00,INT 10h in Ralf Brown's interrupt list.ă'             Example Usage:A%=CurVidMode%ă'LowHigh-Crappy way of seperating two seperate bytes from a word. If youă'          don't know what I'm talking about,don't worry about it. The onlyă'          reason I have this in here at all,is because there are otheră'          routines in this source that depend on it.ă'Pixel-This is like BASIC's PSET command. It plots one pixel on to theă'        display. There are three parameters. Two for the X,Y coordinates ofă'        the dot,and one for the colour.ă'        Example Usage:Pixel 5,10,2ă'        The above command would plot a pixel at 5,10(X,Y) with a coloură'        value of 2.ă'        This command will not work in text modes.ă'        Pixel Positions start at 0,0.ă'ScreenMode-This is used to switch between the screen modes. Please lookă'             up the CLEANUP command after reading this explanation.ă'             This command has one parameter;the screen mode.ă'             Example Usage:ScreenMode 3ă'             The above command would switch the computer into 80x25x16 textă'             mode.(80 columns,25 rows,16 colours)ă'             So that you don't have to remember all the numbers,I built ină'             a bunch of constants to use for the more common modes. Of course,ă'             there are always modes I left out that may work,so experiment.ă'             If you find a mode that you want to use,try it on more thană'             one machine to make sure that the mode you've selected isă'             fairly compatible. Oh,and be careful. I've heard that withă'             older equipment,you can actually fry your monitor by going intoă'             certain unsupported modes.ă'VesaSupported-This function is used to detect whether or not the machineă'                that the program is running on has VESA compatibility.ă'                Example Usage:IF VesaSupported THENă'                          Ie2:IF NOT VesaSupported THENăăDECLARE SUB Box (TopX%, TopY%, BottomX%, BottomY%, Colour%)ăDECLARE SUB Pixel (X%, Y%, Colour%)ăDECLARE SUB Border (Colour%)ăDECLARE FUNCTION Curvidmode% ()ăDECLARE FUNCTION Readpixel% (Column%, Row%)ăDECLARE SUB Cleanup ()ăDECLARE SUB Tlocate (Y%, X%)ăDECLARE SUB Tcolour (ForeGround%, BackGround%)ăDECLARE SUB ScreenMode (MODE%)ăDECLARE FUNCTION Vesasupported% ()ăDECLARE SUB LowHigh (Register%, low%, High%)ăăTYPE SVGAă    Sig AS STRING * 4ă    Version AS INTEGERă    OEMPtr AS LONGă    Capibilities AS STRING * 4ă    ListPtr AS LONGă    VidMem AS INTEGERă    Reserved AS STRING * 262ăEND TYPEăă'$INCLUDE: 'QB.BI'ăDIM SHARED Inregx AS RegTypeX, Outregx AS RegTypeXăCONST GM640x400x256 = &H100, GM640x480x256 = &H101, GM800x600x16 = &H102ăCONST GM800x600x256 = &H103, GM1024x768x16 = &H104, GM1024x768x256 = &H105ăCONST TM80X25 = 3ăCLSăIF NOT Vesasupported THENă    PRINT "Fatal Error: VESA was not detected."ăEND IFă'Y=0 to 767ă'X=0 to 1023ăScreenMode GM1024x768x256ăColour = -.5ăFOR X% = 0 TO 1023ă    Colour = Colour + .5ă    IF INT(Colour) > 255 THEN Colour = -.5ă    FOR Y% = 0 TO 767ă	   Pixel X%, Y%, INT(Colour)ă    NEXT Y%ă    IF LEN(INKEY$) > 0 THEN GOTO HereăNEXT X%ăăHere:ăBox 50, 50, 390, 590, 2ăWHILE INKEY$ = "": WENDă    CleanupăDEFINT A-ZăăDEFSNG A-ZăSUB Border (Colour%)ă    DIM inreg AS RegType, outreg AS RegTypeă    'In Text mode(3) you can only set the border colour.ă    'With some video modes this will also modify the background coloură    'With other video modes,this may not work at all.ă    IF Colour% > 255 THEN Colour% = 255ă    IF Colour% < 0 THEN Colour% = 0ă    inreg.AX = &HB00ă    inreg.BX = Colour%ă    CALL INTERRUPT(&H10, inreg, outreg)ăEND SUBăăDEFINT A-ZăSUB Box (TopX, TopY, BottomX, BottomY, Colour%)ă    FOR I% = TopX TO BottomX STEP 1ă	   Pixel I%, TopY, Colour%ă	   Pixel I%, BottomY, Colour%ă    NEXT I%ă    FOR I% = TopY TO BottomY STEP 1ă	   Pixel BottomX, I%, Colour%ă	   Pixel TopX, I%, Colour%ă    NEXT I%ăEND SUBăăSUB Cleanupă    SHARED StartingModeă    Inregx.AX = StartingModeă    CALL interruptx(&H10, Inregx, Outregx)ăEND SUBăăDEFSNG A-ZăFUNCTION Curvidmode%ă    DEF SEG = &H40ă    Curvidmode% = PEEK(&H49)ă    DEF SEGăEND FUNCTIONăăDEFINT A-ZăSUB GPrint (Text$)ă    SHARED Col%ă    Inregx.AX = &H300ă    CALL interruptx(&H10, Inregx, Inregx)ă    Inregx.AX = &H1301ă    Inregx.BX = Col%ă    Inregx.CX = LEN(Text$)ă    Inregx.ES = VARSEG(Text$)ă    Inregx.BP = SADD(Text$)ă    CALL interruptx(&H10, Inregx, Outregx)ăEND SUBăăDEFSNG A-ZăSUB LowHigh (Register%, low%, High%)ă    Full$ = HEX$(Register%)ă    IF LEN(Full$) < 4 THENă	   WHILE LEN(Full$) < 4: Full$ = "0" + Full$: WENDă	   END IFă	   low% = VAL("&H" + RIGHT$(Full$, 2))ă	   High% = VAL("&H" + LEFT$(Full$, 2))ăEND SUBăăSUB Makecircle (X%, Y%, Rad, Colour%)ă    FOR I = 0 TO 6.4 STEP .005ă	   Pixel INT(Rad * COS(I)) + X%, INT(Rad * SIN(I)) + Y%, Colour%ă    NEXT IăEND SUBăăDEFINT A-ZăSUB MakeLine (A, B, C, D, Colour%)ă    U = C - A: v = D - B: Param = U: GOSUB Sign: D1X = Signă    Param = v: GOSUB Sign: D1Y = Sign: Param = U: GOSUB Sign: D2X = Signă    D2Y = 0: m = ABS(U): N = ABS(v)ă    IF m <= N THENă	   D2X = 0: Param = v: GOSUB Sign: D2Y = Sign: m = ABS(v): N = ABS(U)ă    END IFă    S% = m / 2ă    FOR I% = 0 TO mă	   Pixel A, B, Colour%: S% = S% + Nă	   IF S% >= m THENă		  S% = S% - m: A = A + D1X: B = B + D1Yă	   ELSEă		  A = A + D2X: B = B + D2Yă	   END IFă    NEXT I%ă    EXIT SUBăSign:ă    SELECT CASE Paramă	   CASE IS > 0: Sign = 1ă	   CASE IS < 0: Sign = -1ă	   CASE 0: Sign = 0ă    END SELECTă    RETURNăEND SUBăăDEFSNG A-ZăSUB Pixel (X%, Y%, Colour%)ă    DIM inreg AS RegType, outreg AS RegTypeă    C$ = HEX$(Colour%)ă    LC% = LEN(C$)ă    IF LC% < 2 THEN C$ = "0" + C$ă    IF LC% > 2 THEN C$ = LEFT$(C$, 2)ă    inreg.AX = VAL("&HC" + C$)ă    inreg.BX = &H0ă    inreg.DX = Y%ă    inreg.CX = X%ă    CALL INTERRUPT(&H10, inreg, outreg)ăEND SUBăăDEFINT A-ZăFUNCTION Readpixel (Column, Row)ă    Inregx.AX = &HD00ă    Inregx.BX = 0ă    Inregx.CX = Columnă    Inregx.DX = Rowă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, RP, Junkă    Readpixel = RPăEND FUNCTIONăăSUB ScreenMode (MODE%)ă    SHARED StartingModeă    Inregx.AX = &HF00ă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, StartingMode, Columnsă    Inregx.AX = &H4F03ă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, Support, Statusă    IF Status <> 0 OR Support <> &H4F THEN ERROR (5)ă    StartingVesaMode = Outregx.BXă    Inregx.AX = &H4F02ă    Inregx.BX = MODE%ă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, Support, Statusă    IF Support <> &H4F OR Status <> 0 THEN ERROR (5)ă    Inregx.AX = &HF00ă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, EndResult, Columnsă    Inregx.AX = &H4F02ă    Inregx.BX = StartingVesaModeă    CALL interruptx(&H10, Inregx, Outregx)ă    IF Support <> &H4F OR Status <> 0 THEN ERROR (5)ă    Inregx.AX = EndResultă    CALL interruptx(&H10, Inregx, Outregx)ă    Tcolour 7, 0: Tlocate 1, 1ăEND SUBăăSUB Tcolour (ForeGround, BackGround)ă    SHARED Col%ă    T$ = HEX$(ForeGround): T2$ = HEX$(BackGround)ă    IF LEN(T$) > 1 OR LEN(T2$) > 1 THEN ERROR (5)ă    Col% = VAL("&H" + T2$ + T$)ăEND SUBăăSUB Tlocate (Y, X)ă    Y = Y - 1: X = X - 1ă    Y$ = HEX$(Y): X$ = HEX$(X)ă    IF LEN(Y$) > 2 OR LEN(X$) > 2 THEN ERROR (5)ă    IF LEN(Y$) < 2 THEN Y$ = "0" + Y$ă    IF LEN(X$) < 2 THEN X$ = "0" + X$ă    Inregx.AX = &H200ă    CurLoc% = VAL("&H" + Y$ + X$)ă    Inregx.DX = CurLoc%ă    CALL interruptx(&H10, Inregx, Outregx)ă    X = X + 1: Y = Y + 1ăEND SUBăăFUNCTION Vesasupportedă    DIM VInfoBuff AS SVGAă    Inregx.AX = &H4F00ă    Inregx.ES = VARSEG(VInfoBuff)ă    Inregx.di = VARPTR(VInfoBuff)ă    CALL interruptx(&H10, Inregx, Outregx)ă    LowHigh Outregx.AX, Support, Statusă    IF UCASE$(VInfoBuff.Sig) <> "VESA" OR Support <> &H4F OR Status <> 0 THENă	   Vesasupported = 0ă    ELSEă	   Vesasupported = -1ă    END IFăEND FUNCTIONăă'Oh, that's it. And after all that commenting, I still neglected to say a fewă'things. First of all, if you try to switch to a screen mode that isn'tă'supported by your computer, most of the time it will give you an Illegală'Function Call... Of course there are a few modes that won't be detected asă'invaid, they'll just freeze the machine or something not so nice.ă'Also, In the VesaDetection function I'm using a TYPE instead of just a largeă'set-length string... a large set length string would eliminate the TYPE stuffă'at the top of the file, but I put it the way i did incase someone wanted toă'use the info to add stuff. After all this time I've wasted talking abut thisă'thing, I sure hope it works... <G> .. I still haven't tested it on any machineă'but my own.L8r,ă'D. Tyler BarnesăManny Najera                   QBASIC FADING ROUTINE          www.flashgames.com             03-09-96 (23:20)       QB, QBasic, PDS        108  2531     QBFADE.BAS  'QBasic FADEing - The real thing.ă'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ă'From Manny Najera of Flash Gamesă'--------------------------------ă'   http://www.flashgames.comă'--------------------------------ăă'How To Use This Stuffă'---------------------ă'To fade out, just use PALETTE.FADEOUT.ă'PALETTE.FADEIN will work after you fadeout.ă'If you mess around with the pData array ină'between, it won't work correctly.  All theă'other subs you don't have to worry about.ă'The FLICKERING?  Its not as bad as before.ă'Live with it.  It happens to the best of us.ă'Use this code NOW!  I'm tired of looking ată'those fake fades.ăăDEFINT A-Zăă'Just add this into your program.ă'---------------------------------ăTYPE PaletteTypeăRed AS INTEGERăGreen AS INTEGERăBlue AS INTEGERăEND TYPEăDECLARE SUB Palette.Set (nColor%, pInfo AS PaletteType)ăDECLARE SUB Palette.Get (nColor%, pInfo AS PaletteType)ăDECLARE SUB Palette.Fadeout ()ăDECLARE SUB Palette.FadeIn ()ăDIM SHARED Pal AS PaletteTypeăDIM SHARED pData(0 TO 255, 1 TO 3)ă'---------------------------------ăăSCREEN 13ăFOR I = 0 TO 200ăLINE (0, I)-(319, I), IăNEXT IăSLEEPăPalette.FadeoutăSLEEPăPalette.FadeInăăSUB Palette.FadeInăDIM tT(1 TO 3)ăFOR I = 1 TO 64ăWAIT &H3DA, 8ă  FOR O = 0 TO 255ă    Palette.Get O, Pală    tT(1) = Pal.Redă    tT(2) = Pal.Greenă    tT(3) = Pal.Blueă    IF tT(1) < pData(O, 1) THEN tT(1) = tT(1) + 1ă    IF tT(2) < pData(O, 2) THEN tT(2) = tT(2) + 1ă    IF tT(3) < pData(O, 3) THEN tT(3) = tT(3) + 1ă    Pal.Red = tT(1)ă    Pal.Green = tT(2)ă    Pal.Blue = tT(3)ă    Palette.Set O, Pală  NEXT OăNEXT IăăEND SUBăăSUB Palette.FadeoutăDIM tT(1 TO 3)ăFOR I = 0 TO 255ă  Palette.Get I, Pală  pData(I, 1) = Pal.Redă  pData(I, 2) = Pal.Greenă  pData(I, 3) = Pal.BlueăNEXT IăFOR I = 1 TO 64ăWAIT &H3DA, 8ă  FOR O = 0 TO 255ă    Palette.Get O, Pală    tT(1) = Pal.Redă    tT(2) = Pal.Greenă    tT(3) = Pal.Blueă    IF tT(1) > 0 THEN tT(1) = tT(1) - 1ă    IF tT(2) > 0 THEN tT(2) = tT(2) - 1ă    IF tT(3) > 0 THEN tT(3) = tT(3) - 1ă    Pal.Red = tT(1)ă    Pal.Green = tT(2)ă    Pal.Blue = tT(3)ă    Palette.Set O, Pală  NEXT OăNEXT IăEND SUBăăSUB Palette.Get (nColor%, pInfo AS PaletteType)ăOUT &H3C6, &HFFăOUT &H3C7, nColor%ăpInfo.Red = INP(&H3C9)ăpInfo.Green = INP(&H3C9)ăpInfo.Blue = INP(&H3C9)ăEND SUBăăSUB Palette.Set (nColor%, pInfo AS PaletteType)ăOUT &H3C6, &HFFăOUT &H3C8, nColor%ăOUT &H3C9, pInfo.RedăOUT &H3C9, pInfo.GreenăOUT &H3C9, pInfo.BlueăEND SUBăăDavid Carlton                  3D-VR MAZE WARS                pvhsa07@ll.kcts.org            03-09-96 (23:31)       QB, QBasic, PDS        429  12815    MAZEWARS.BASREM   Alpha version of VR Maze Wars (working title) by David CarltonăREM   Hard Core Software  Copyright 1995ăăREM   This is the alpha version of my game! Basically it's a super slowăREM   qbasic version of my program only allowing you to wander around aăREM   small room. This actually looks barely anything like the actual gameăREM   will. This has clear walls and no hit detection for the objects inăREM   the center of the room. Also, because this has no object sorting,ăREM   close walls will dissapear. Of course the worst thing about the alphaăREM   is how terribly slow it runs in non-compiled qbasic. Most of the timeăREM   you will have to wait about 5 seconds for each frame to be drawn.ăăREM   Below is a list of features that will be in the finished version orăREM   later upgrades:ăăREM   -Written in C++:over ten times fasterăREM   -Runs in WindowsăREM   -SVGA or VGA graphicsăREM   -Digital sound effects and midi musicăREM   -Full 6DOF enviroment (jumping,strafing,look up-down  the works!)ăREM   -Texture mapped surfacesăREM   -Gourad/ray traced shading and light effectsăREM   -Multiple camerasăREM   -Weapons like homing missle launchers and artillery cannonsăREM   -Helpful powerups like 180 degree vision and jet packsăREM   -Lots of enemiesăREM   -Liquid surfaces (dive underwater)ăREM   -Modem playăREM   -Large and a-maze-ing levelsăREM   -More cool stuff like level editors and cheatsăăREM   This alpha version is a long ways away from the finished versionăREM   described above, but I'm working on it. Not all of these features mayăREM   get included in the first version, but I'll try to squeeze in all thatăREM   I can. I plan to release it as shareware, and include more levels,ăREM   weapons, enemies, and sound effects if it is registered.ăăREM   I tried to spend as little time as possible working on this alphaăREM   because of the problems and limitations of qbasic. Thus, you can't doăREM   too much in this program. Use the arrow keys to move around, and q toăREM   quit. I also added b for bird's eye view and n for normal view. I mightăREM   use something like that as a map in later versions. Ready? Press F5ăREM   to start. If you have any suggestions write me on the internet atăREM   "pvhsa07@ll.kcts.org".ăăăREM   P.S.  If you want to see this program run in high resolution, changeăREM   the lines that say  SCREEN 8, , drawnpage, shownpage  to  SCREEN 12 andăREM   maxy and screeny to 479 in the line just below the first SCREENăREM   statement. This will disable multiple pages but allow 640x480 graphics.ăăăăON ERROR GOTO 1ă1 RESUME NEXTăăREM initializationăăDIM template(3, 6, 4, 3), objectloc(37, 3), objectrot(37, 3), objecttype(37)ăDIM playerloc(3), playerrot(3), playervel(3), surfacenumber(3), vertexnumber(3, 6)ăăshownpage = 1: drawnpage = 0ăCOLOR 7ăSCREEN 8, , drawnpage, shownpageăperspective = 600ăwalkspeed = 5ămaxx = 639: minx = 1: maxy = 199: miny = 1ăscreenx = 639: screeny = 199ăăREM reading data routineăăREM This should read out of a data file in later versionsăăFOR i = 1 TO 3ăREAD playerloc(i)ăNEXT iăFOR j = 1 TO 3ăREAD playerrot(j)ăNEXT jăFOR k = 1 TO 3ăREAD playervel(k)ăNEXT kăăREAD templatenumberăFOR i = 1 TO templatenumberăREAD surfacenumber(i)ăFOR j = 1 TO surfacenumber(i)ăREAD vertexnumber(i, j)ăFOR k = 1 TO vertexnumber(i, j)ăFOR l = 1 TO 3ăREAD template(i, j, k, l)ăNEXT lăNEXT kăNEXT jăNEXT iăăREAD objectnumberăFOR i = 1 TO objectnumberăREAD objecttype(i)ăFOR j = 1 TO 3ăREAD objectloc(i, j)ăNEXT jăFOR k = 1 TO 3ăREAD objectrot(i, k)ăNEXT kăNEXT iăăREM  keyboard scan routineăăREM This is the central routine in this version of the game, but it shouldn'tăREM be in later versions.ăăGOSUB 100ăăDOăăin$ = INKEY$ăIF RIGHT$(in$, 1) = CHR$(72) THEN vectorvel = walkspeed: GOSUB 50ăIF RIGHT$(in$, 1) = CHR$(80) THEN vectorvel = walkspeed * (-1): GOSUB 50ăIF RIGHT$(in$, 1) = CHR$(77) THEN playerrot(1) = playerrot(1) - .26799ăIF RIGHT$(in$, 1) = CHR$(75) THEN playerrot(1) = playerrot(1) + .26799ăIF playerrot(1) > 6.28 THEN playerrot(1) = playerrot(1) - 6.28ăIF playerrot(1) < 0 THEN playerrot(1) = playerrot(1) + 6.28ăIF in$ = "q" THEN gameover = 1: ENDăIF in$ = "b" THEN playerloc(2) = 100: playerrot(3) = 1.54ăIF in$ = "n" THEN playerloc(2) = 0: playerrot(3) = 3.14ăIF RIGHT$(in$, 1) <> CHR$(72) AND RIGHT$(in$, 1) <> CHR$(80) THEN GOSUB 55ăăREM   IF in$ <> "" OR playervel(1) <> 0 OR playervel(3) <> 0 THEN CLS 1: GOSUB 100ăăIF in$ <> "" THEN CLS 1: GOSUB 100ăăin$ = ""ăăLOOP WHILE gameover = 0ăăENDăăREM  vector movement converted to cartesianăă50ăăREM x velocityăplayervel(1) = playervel(1) + SIN(playerrot(1)) * vectorvelăREM z velocityăplayervel(3) = playervel(3) - COS(playerrot(1)) * vectorvelăăplayervel(1) = INT(playervel(1)): playervel(3) = INT(playervel(3))ăăIF playervel(1) > 4 THEN playervel(1) = 4ăIF playervel(1) < -4 THEN playervel(1) = -4ăIF playervel(3) > 4 THEN playervel(1) = 4ăIF playervel(3) < -4 THEN playervel(3) = -4ăăplayerloc(1) = playerloc(1) + playervel(1)ăplayerloc(3) = playerloc(3) + playervel(3)ăăREM customized hit detection -- cheapăăIF playerloc(1) < 0 THEN playerloc(1) = 0ăIF (playerloc(3) <= 30 OR playerloc(3) >= 40) AND playerloc(1) > 60 THEN playerloc(1) = 60ăIF playerloc(1) > 80 THEN playerloc(1) = 80ăăIF playerloc(3) < 0 THEN playerloc(3) = 0ăIF playerloc(3) > 70 THEN playerloc(3) = 70ăIF playerloc(1) >= 60 AND playerloc(3) < 30 THEN playerloc(3) = 30ăIF playerloc(1) >= 60 AND playerloc(3) > 40 THEN playerloc(3) = 40ăăRETURNăăREM  frictionăă55 REM  I disabled gliding because it isn't very effective when the programăREM     runs this slow.ăăIF playervel(1) > 0 THEN playervel(1) = playervel(1) - 4ăIF playervel(1) < 0 THEN playervel(1) = playervel(1) + 4ăIF playervel(3) > 0 THEN playervel(3) = playervel(3) - 4ăIF playervel(3) < 0 THEN playervel(3) = playervel(3) + 4ăăRETURNăăREM  main graphics routine (large)ăă100ăăăFOR i = 1 TO objectnumberăFOR j = 1 TO surfacenumber(objecttype(i))ăăGOSUB 2000ăăx = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)ăGOSUB 3000ăx1 = x: y1 = y: z1 = zăăx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)ăGOSUB 3000ăx2 = x: y2 = y: z2 = zăăx = template(objecttype(i), j, 3, 1): y = template(objecttype(i), j, 3, 2): z = template(objecttype(i), j, 3, 3)ăGOSUB 3000ăx3 = x: y3 = y: z3 = zăăGOSUB 7000ăIF sp < 0 THEN GOTO 105ăăx = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)ăGOSUB 3000ăGOSUB 4000ăsxa = sx: sya = syăăx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)ăGOSUB 3000ăGOSUB 4000ăsxb = sx: syb = syăăGOSUB 5000ăIF drawit = 1 THEN LINE (sxa, sya)-(sxb, syb)ăăx = template(objecttype(i), j, 2, 1): y = template(objecttype(i), j, 2, 2): z = template(objecttype(i), j, 2, 3)ăGOSUB 3000ăGOSUB 4000ăsxa = sx: sya = syăăx = template(objecttype(i), j, 3, 1): y = template(objecttype(i), j, 3, 2): z = template(objecttype(i), j, 3, 3)ăGOSUB 3000ăGOSUB 4000ăsxb = sx: syb = syăăGOSUB 5000ăIF drawit = 1 THEN LINE (sxa, sya)-(sxb, syb)ăăFOR k = 3 TO vertexnumber(objecttype(i), j)ăIF k = vertexnumber(objecttype(i), j) THENăă   x = template(objecttype(i), j, 1, 1): y = template(objecttype(i), j, 1, 2): z = template(objecttype(i), j, 1, 3)ă   GOSUB 3000ă   GOSUB 4000ă   sxa = sx: sya = syă  ă   x = template(objecttype(i), j, k, 1): y = template(objecttype(i), j, k, 2): z = template(objecttype(i), j, k, 3)ă   GOSUB 3000ă   GOSUB 4000ă   sxb = sx: syb = syă  ă   GOSUB 5000ă   IF drawit = 1 THENă     LINE (sxa, sya)-(sxb, syb)ă   END IFăăELSEă  ă   x = template(objecttype(i), j, k + 1, 1): y = template(objecttype(i), j, k + 1, 2): z = template(objecttype(i), j, k + 1, 3)ă   GOSUB 3000ă   GOSUB 4000ă   sxa = sx: sya = syă  ă   x = template(objecttype(i), j, k, 1): y = template(objecttype(i), j, k, 2): z = template(objecttype(i), j, k, 3)ă   GOSUB 3000ă   GOSUB 4000ă   sxb = sx: syb = syă  ă   GOSUB 5000ă   IF drawit = 1 THENă     LINE (sxa, sya)-(sxb, syb)ă   END IFăEND IFăNEXT kă105 NEXT jăNEXT iăăREM switch pagesăădrawnpage = 1 - drawnpageăshownpage = 1 - shownpageăSCREEN 8, , drawnpage, shownpageăăRETURNăă2000ăăREM sin and cos factorsăăREM playerăsr1 = SIN(playerrot(1)): sr2 = SIN(playerrot(2)): sr3 = SIN(playerrot(3))ăcr1 = COS(playerrot(1)): cr2 = COS(playerrot(2)): cr3 = COS(playerrot(3))ăăREM object -- adding "o" at the end is cheapăăsro1 = SIN(objectrot(i, 1)): sro2 = SIN(objectrot(i, 2)): sro3 = SIN(objectrot(i, 3))ăcro1 = COS(objectrot(i, 1)): cro2 = COS(objectrot(i, 2)): cro3 = COS(objectrot(i, 3))ăăRETURNăă3000 REM 3-d formulasăăREM objectăăx = (-1) * x: xa = cro1 * x - sro1 * zăza = sro1 * x + cro1 * z: x = cro2 * xa + sro2 * yăya = cro2 * y - sro2 * xa: z = cro3 * za - sro3 * yaăy = sro3 * za + cro3 * yaăăx = x + objectloc(i, 1): y = y + objectloc(i, 2): z = z + objectloc(i, 3)ăăREM playerăăx = x - playerloc(1): y = y - playerloc(2): z = z - playerloc(3)ăăx = (-1) * x: xa = cr1 * x - sr1 * zăza = sr1 * x + cr1 * z: x = cr2 * xa + sr2 * yăya = cr2 * y - sr2 * xa: z = cr3 * za - sr3 * yaăy = sr3 * za + cr3 * yaăăsx = perspective * x / z: sy = perspective * y / zăăREM cheap-o 3-d line clipping (That's why things look strange sometimes)ăădrawit = 1ăIF z <= 10 THEN drawit = 0ăăăRETURNăă4000ăăREM 2-d cartesian to 2-d physicalăăsx = sx + 399: sy = sy + 299: rx = screenx / 799: ry = screeny / 599ăsx = sx * rx: sy = sy * ryăăRETURNăăă5000ăăREM 2-d line clippingăăăIF sxa > sxb THEN tempswap = sxa: sxa = sxb: sxb = tempswap: tempswap = sya: sya = syb: syb = tempswapăIF sxa < minx AND sxb < minx THEN drawit = 0: RETURNăIF sxa > maxx AND sxb > maxx THEN drawit = 0: RETURNăIF sya < miny AND syb < miny THEN drawit = 0: RETURNăIF sya > maxy AND syb > maxy THEN drawit = 0: RETURNăIF sxa < minx THEN c = (syb - sya) / (sxb - sxa) * (sxb - minx) ELSE GOTO 5010ă                    sxa = minx: sya = syb - că                    IF sya < miny AND syb < miny THEN drawit = 0: RETURNă                    IF sya > maxy AND syb > maxy THEN drawit = 0: RETURNăă5010  IF sxb > maxx THEN c = (syb - sya) / (sxb - sxa) * (maxx - sxa) ELSE GOTO 5020ă                    sxb = maxx: syb = sya + că                    IF sya < miny AND syb < miny THEN drawit = 0: RETURNă                    IF sya > maxy AND syb > maxy THEN drawit = 0: RETURNăă5020 IF sya > syb THEN tempswap = sxa: sxa = sxb: sxb = tempswap: tempswap = sya: sya = syb: syb = tempswapăIF sya < miny THEN c = (sxb - sxa) / (syb - sya) * (syb - miny): sxa = sxb - c: sya = minyăIF syb > maxy THEN c = (sxb - sxa) / (syb - sya) * (maxy - sya): sxb = sxa + c: syb = maxyăăRETURNăă7000ăăREM plane-equation method of hidden surface removalăăsp1 = x1 * (y2 * z3 - y3 * z2): sp1 = (-1) * sp1: sp2 = x2 * (y3 * z1 - y1 * z3)ăsp3 = x3 * (y1 * z2 - y2 * z1): sp = sp1 - sp2 - sp3ăăRETURNăăăREM player dataăăDATA 5,0,0,  2.796129,0,3.14,  0,0,0ăăREM templatesăăDATA 3ăăREM template:cubeăăDATA 6, 4, 5,5,5, 5,5,-5, -5,5,-5, -5,5,5,  4, 5,-5,5, 5,5,5, -5,5,5, -5,-5,5ăDATA 4, 5,-5,-5, 5,5,-5, 5,5,5, 5,-5,5,  4, -5,-5,-5, -5,5,-5, 5,5,-5, 5,-5,-5ăDATA    4, -5,-5,5, -5,5,5, -5,5,-5, -5,-5,-5ăDATA    4, -5,-5,5, -5,-5,-5, 5,-5,-5, 5,-5,5ăăREM template:pyramidăăDATA 5, 3, 5,-5,5, 0,10,0, -5,-5,5,  3, 5,-5,-5, 0,10,0, 5,-5,5ăDATA    3, -5,-5,5, 0,10,0, -5,-5,-5,  3, -5,-5,-5, 0,10,0, 5,-5,-5ăDATA    4, -5,-5,5, -5,-5,-5, 5,-5,-5, 5,-5,5ăăREM template:wallăăDATA 2, 4, 5,-5,0, 5,5,0, -5,5,0, -5,-5,0,  4, -5,-5,0, -5,5,0, 5,5,0, 5,-5,0ăăăREM objectsăăDATA 36ăăREM wallsăăDATA 3, 5,0,0, 0,0,0,  3, 15,0,0, 0,0,0,  3, 25,0,0, 0,0,0ăDATA 3, 35,0,0, 0,0,0,  3, 45,0,0, 0,0,0,  3, 55,0,0, 0,0,0,  3, 5,0,70, 0,0,0ăDATA 3, 15,0,70, 0,0,0,  3, 25,0,70, 0,0,0,  3, 35,0,70, 0,0,0ăăDATA 3, 45,0,70, 0,0,0,  3, 55,0,70, 0,0,0,  3, 0,0,5, 1.57,0,0ăDATA 3, 0,0,15, 1.57,0,0,  3, 0,0,25, 1.57,0,0,  3, 0,0,35, 1.57,0,0ăDATA 3, 0,0,45, 1.57,0,0,  3, 0,0,55, 1.57,0,0,  3, 0,0,65, 1.57,0,0ăDATA 3, 60,0,5, 1.57,0,0ăăDATA 3, 60,0,15, 1.57,0,0,  3, 60,0,25, 1.57,0,0,  3, 60,0,45, 1.57,0,0ăDATA 3, 60,0,55, 1.57,0,0,  3, 60,0,65, 1.57,0,0,  3, 65,0,30, 0,0,0ăDATA 3, 75,0,30, 0,0,0,  3, 65,0,40, 0,0,0,  3, 75,0,40, 0,0,0ăDATA 3, 80,0,35, 1.57,0,0ăăREM other objectsăăDATA 1, 15,0,15, 0,0,0,  1, 45,0,15, 0,0,0ăDATA 2, 25,0,35, 0,0,0,    1, 15,0,55, 0,0,0ăDATA 1, 45,0,55, 0,0,0,  1, 25,15,35, 0,0,0ăăăăăăăăTyler Barnes                   STARFIELD WITH BACKGROUND MUSICFidoNet QUIK_BAS Echo          02-22-96 (20:58)       QB, QBasic, PDS        62   2239     MUSISTAR.BAS'Ok, here's a star field I wrote (The kind that has layered stars movingă'sideways) and it has background music. I can't say it couldn'y be programmedă'better, but it should give you an idea on how to do background music. By theă'way, when you run it, it'll ask for a bunch of settings. I suggest 75 star, 3ă'layers, layer speeds at 1, 1.5, and 2, Music on. You may have to adjust theseă'setting according to taste, and the speed of your computer.ă'Oh, also, make all the stars move left. It looks stupid if they move ină'different directions.ăă'By D. Tyler Barnes '95ă'Tested on a 486dx2 80mhzăON PLAY(1) GOSUB MuchMusicăCLSăINPUT "Number of stars:", StarNum%ăINPUT "Number of layers:", LNum%ăDIM StarX(StarNum%), StarY(StarNum%), Layer(LNum%)ăFOR L = 1 TO LNum%ăPRINT "Layer"; L; " speed:";ăINPUT Layer(L)ăPRINT "Layer"; L; " direction [L/R]";ăDO: K$ = UCASE$(INKEY$): LOOP UNTIL K$ = "L" OR K$ = "R"ăIF K$ = "L" THEN Layer(L) = -Layer(L)ăPRINTăNEXT LăPLAY ONăPRINT "Music? [Y/N]";ăWHILE A$ <> "Y" AND A$ <> "N": A$ = UCASE$(INKEY$): WENDăIF A$ = "Y" THEN MBuff$ =ă"T150L2O3CGP16L16FEDL2>C<GP16L16FEDL2>C<GP16L16FEFL2D"ăPLAY "MB X" + VARPTR$(MBuff$)ăSCREEN 13ăFOR I% = 1 TO StarNum%ăStarX(I%) = (RND * 319) + 1ăStarY(I%) = (RND * 199) + 1ăNEXT I%ăDOăCL = 1ăFOR I% = 1 TO StarNum%ăPSET (StarX(I%), StarY(I%)), 0ăIF I% > (StarNum% / LNum%) * CL THEN CL = CL + 1ăStarX(I%) = StarX(I%) + Layer(CL)ăIF StarX(I%) < 1 THEN StarX(I%) = 319: StarY(I%) = RND * 199ăIF StarX(I%) > 319 THEN StarX(I%) = 1: StarY(I%) = RND * 199ăC% = (CL * 4) + 19ăPSET (StarX(I%), StarY(I%)), C%ăNEXT I%ăLOOP UNTIL LEN(INKEY$)ăENDăMuchMusic:ăCount% = Count% + 1ăSELECT CASE Count%ăCASE 0: MBuff$ = "T150L2O3CGP16L16FEDL2>C<GP16L16FEDL2>C<GP16L16FEFL2D"ăCASE 1: MBuff$ = "P16L16<GGGL2>CGP32L16FEDL2>C<GP16L16FEDL2>C<GP16L16A+"ăCASE 2: MBuff$ = "AA+L1GL2G.L8<G.L16GL4A.L8A>FEDCL16CDEDP16L8"ăCASE 3: MBuff$ = "<AL4BL8G.L16G"ăCASE 4: MBuff$ = "L4A.L8A>FEDCGP8L4D.P8L8<G.L16GL4A.L8A>FEDCL16"ăCASE 5: MBuff$ = "CDEDP16L8<A"ăCASE 6: MBuff$ = "L4BP16L8>G.L16GL8>C.L16<A+L8G+.L16GL8F.L16D+L8D.L16CL1G"ăCASE 7: MBuff$ = "L2G.P16L16GGGL8>CP8L16<CCCL2C.": Count% = -1ăEND SELECTăPLAY "MB X" + VARPTR$(MBuff$)ăRETURNăEric Carr                      SCALE SPRITE                   FidoNet QUIK_BAS Echo          03-18-96 (13:23)       QB, QBasic, PDS        45   1712     SCALSPRT.BAS'Ok..Here is a routine (I just made it so...) that scales a sprite on theă'screen. It can scale to ANY size, and it only uses Integers, not floatingă'point math, so it runs really smooth on my 486sx when it's compiled..Feel freeă'to use or modify this for your own programs, but just give me a little credită'for it if it's used in a game or somthing..ă'The sprite in here is a 64x64 block of colors..You would have to load in youră'own sprite from the Harddrive and make sure SP is DIMed the correct amount.ă'The sprite data is stored in horizontal runs (X) from up to down..ă'For example, a 4x4 sprite would be 16 #'s long -ă'sprite>  0/\0ă'         //\\     _ă'         //\\     _   0/\0//\\//\\0||0       Except it would be in numbers,ă'         0||0                                not characters.ăă'One last thing, this only scales sprite bigger than the original.  I haven'tă'perfected scaling a sprite smaller yet.. Thats why it starts scaling at theă'orignal size, not smaller.ăă DEFINT A-Z: SCREEN 13: DEF SEG = &HA000: DIM SP(4096)ăă'Load your sprite into SP. The size is 64x64 but you can change it.ăă FOR T = 1 TO 4096ă C = C + 1: IF C > 64 THEN C = 1ă SP(T) = Că NEXT Tă 'End of sample sprite makingăă SX = 64: SY = 64 ' Size of original spriteăă FOR SF = 64 TO 192 '(192 IS 64*3 - scaling to 3x)ă LX = SF: LY = SF   ' LX and LY are the new Sprite sizesă GOSUB SCAL.SPRTă NEXT: SLEEP: ENDăăSCAL.SPRT:ă CT = 1: ERY = 0ă FOR Y = 1 TO LY: ER = 0ă FOR x = 1 TO LX: POKE 320 * Y + x, SP(CT)ă ER = ER + SX: IF ER > LX THEN ER = ER - LX: CT = CT + 1ă NEXT xă ERY = ERY + SYă IF ERY > LY THEN ERY = ERY - LY: CT = CT + 1 ELSE CT = CT - (SX - 1)ă NEXT Y: RETURNăăPeder Brynolf                  3D MATRIX ROTATIONS            pbrynolf@dataphone.se          03-22-96 (07:45)       QB, QBasic, PDS        164  3152     3DROT.BAS   'This one shows how to do some 3d matris rotations.ăăCLSăăPRINT "Typ 125 okompilerad f”r 1vbl"ăPRINT "Typ 220 kompilerad f”r 1vbl"ăPRINT : PRINT "P† en 66a ass†!"ăPRINTăăINPUT "Antal punkter:"; NOP%ăăSCREEN 13ăRANDOMIZE TIMERăăăREM NOP% = 150ăăON KEY(10) GOSUB QUITăKEY(10) ONăăDIM OX%(NOP%), OY%(NOP%), PFX(NOP%), PTX(NOP%), PFY(NOP%), PTY(NOP%), PFZ(NOP%), PTZ(NOP%), XP(NOP%), YP(NOP%), ZP(NOP%), SX%(NOP%), SY%(NOP%), SZ%(NOP%), KX(3), KY(3), KZ(3), CX%(3), CY%(3), CZ%(3)ăăRADC = 1.745328E-02ăăFOR I% = 0 TO 63ă   PALETTE I%, I% + I% * 256 + I% * 65536ăNEXT I%ăăFOR I% = 0 TO 3ă   READ KX(I%), KY(I%), KZ(I%)ăNEXT I%ăăFOR I% = 0 TO NOP%ă  ă   S% = RND * 6ă   IF S% = 0 THEN XP(I%) = RND: YP(I%) = RND: ZP(I%) = 0ă   IF S% = 1 THEN XP(I%) = RND: YP(I%) = RND: ZP(I%) = 1ă   IF S% = 2 THEN XP(I%) = RND: YP(I%) = 0: ZP(I%) = RNDă   IF S% = 3 THEN XP(I%) = RND: YP(I%) = 1: ZP(I%) = RNDă   IF S% = 4 THEN XP(I%) = 0: YP(I%) = RND: ZP(I%) = RNDă   IF S% = 5 THEN XP(I%) = 1: YP(I%) = RND: ZP(I%) = RNDă ăNEXT I%ăăăDOăăFOR I% = 0 TO 3ă   CX%(I%) = KX(I%) + XPă   CY%(I%) = KY(I%) + YPă   CZ%(I%) = KZ(I%) + ZPăNEXT I%ăREM *** ROTATE X/Y ***ăăSV = SIN(RADC * ANXY)ăCV = COS(RADC * ANXY)ăăFOR I% = 0 TO 3ă   TX% = SV * CX%(I%) + CV * CY%(I%)ă   TY% = -SV * CY%(I%) + CV * CX%(I%)ă   CX%(I%) = TX%ă   CY%(I%) = TY%ăNEXT I%ăăREM *** ROTATE X/Z ***ăăSV = SIN(RADC * ANXZ)ăCV = COS(RADC * ANXZ)ăăFOR I% = 0 TO 3ă   TX% = SV * CX%(I%) + CV * CZ%(I%)ă   TZ% = -SV * CZ%(I%) + CV * CX%(I%)ă   CX%(I%) = TX%ă   CZ%(I%) = TZ%ăNEXT I%ăăăREM *** ROTATE Y/Z ***ăăSV = SIN(RADC * ANYZ)ăCV = COS(RADC * ANYZ)ăăFOR I% = 0 TO 3ă   TY% = SV * CY%(I%) + CV * CZ%(I%)ă   TZ% = -SV * CZ%(I%) + CV * CY%(I%)ă   CY%(I%) = TY%ă   CZ%(I%) = TZ%ăNEXT I%ăăFOR I% = 1 TO 3ă   CX%(I%) = CX%(I%) - CX%(0)ă   CY%(I%) = CY%(I%) - CY%(0)ă   CZ%(I%) = CZ%(I%) - CZ%(0)ăNEXT I%ăăCX0% = CX%(0)ăCY0% = CY%(0)ăCZ0% = CZ%(0)ăCX1% = CX%(1)ăCY1% = CY%(1)ăCZ1% = CZ%(1)ăCX2% = CX%(2)ăCY2% = CY%(2)ăCZ2% = CZ%(2)ăCX3% = CX%(3)ăCY3% = CY%(3)ăCZ3% = CZ%(3)ăăăFOR I% = 0 TO NOP%ă  ă   XP = XP(I%)ă   YP = YP(I%)ă   ZP = ZP(I%)ă  ă   SX%(I%) = CX0% + CX1% * XP + CX2% * YP + CX3% * ZPă   SY%(I%) = CY0% + CY1% * XP + CY2% * YP + CY3% * ZPă   SZ%(I%) = CZ0% + CZ1% * XP + CZ2% * YP + CZ3% * ZPăă   IF SY%(I%) > 80 THEN SY%(I%) = 80ăăNEXT I%ăăFOR I% = 0 TO NOP%ă   SK = 300 / (300 + SZ%(I%))ă   SX%(I%) = SX%(I%) * SKă   SY%(I%) = SY%(I%) * SKăNEXT I%ăăFOR I% = 0 TO NOP%ă  ă   X% = SX%(I%) + 160ă   Y% = SY%(I%) + 100ă   PSET (OX%(I%), OY%(I%)), 0ă   OX%(I%) = X%ă   OY%(I%) = Y%ă   PSET (X%, Y%), 32 - SZ%(I%) / 8ăăNEXT I%ăăREM WK:     IF INKEY$ = "" THEN GOTO WKăăANXY = ANXY - .25ăANXZ = ANXZ - .5ăANYZ = ANYZ - 1ăăXP = SIN(RADC * BANAN * 1.7315) * 40ăYP = SIN(RADC * BANAN * 2.3125) * 40ăZP = SIN(RADC * BANAN * 3.2357) * 200ăBANAN = BANAN + .5ăăREM *** Wait vbl ***ăăWVBL: A% = INP(&H3DA)ă      A% = A% MOD 16ă      A% = A% / 16ă      IF A% <> 1 THEN GOTO WVBLăLOOPăăDATA    50,50,50, -50,50,50 ,50,-50,50, 50,50,-50ăăQUIT:ăSYSTEMăăPeder Brynolf                  2D ROTATING TEXTURE MAPS       pbrynolf@dataphone.se          03-22-96 (07:45)       QB, QBasic, PDS        151  2439     2DMAPS.BAS  'Here's a little program showing how to 2d-rotate texture maps.ăăDECLARE SUB TEXTLINE (X1, X2, Y, TX1, TY1, TX2, TY2)ăRANDOMIZE TIMERăZANM = 3.14159 / 180ăăSCREEN 13ăNOP = 4ăăPRINT "01234567"ăPRINT "HEJSAN!"ăPRINT " FUNKAR"ăPRINT "DETTA SŹ"ăPRINT "BLIR JAG"ăPRINT "  GLAD!"ăPRINT " ALTER"ăPRINT "  EGO"ăDIM X(NOP), Y(NOP)ăDIM TX(NOP), TY(NOP)ăăDOăRESTORE POLYCOORDSăFOR I = 0 TO NOP - 1ă   READ X(I), Y(I)ă   X(I) = SIN(ZANM * ((I * 90) + an)) * 50 + 160ă   Y(I) = COS(ZANM * ((I * 90) + an)) * 50 + 100ăNEXT Iăan = an + 1ăăOX = X(3)ăOY = Y(3)ăFOR I = 0 TO 3ă   X = X(I)ă   Y = Y(I)ă   LINE (X, Y)-(OX, OY)ă   OX = Xă   OY = YăNEXT IăăRESTORE TEXTCOORDSăFOR I = 0 TO NOP - 1ă   READ TX(I), TY(I)ăNEXT IăăDIM XP(199), TXP(199), TYP(199)ăăFOR Y = 0 TO 199ă   XP(Y) = -1ăNEXT YăăOX = X(NOP - 1)ăOY = Y(NOP - 1)ăOTX = TX(NOP - 1)ăOTY = TY(NOP - 1)ăăFOR I = 0 TO NOP - 1ă   X = X(I)ă   Y = Y(I)ă   TX = TX(I)ă   TY = TY(I)ă  ă   XF = Xă   YF = Yă   XT = OXă   YT = OYă  ă   TXF = TXă   TYF = TYă   TXT = OTXă   TYT = OTYăă   IF YF = YT THEN GOTO SKIPIT2ăă   IF YF > YT THEN SWAP YF, YT: SWAP XF, XT: SWAP TYF, TYT: SWAP TXF, TXTăă   XSK = (XT - XF) / (YT - YF)ă   XC = XFă  ă   TXSK = (TXT - TXF) / (YT - YF)ă   TXC = TXFă   TYSK = (TYT - TYF) / (YT - YF)ă   TYC = TYFă  ă   FOR YC = YF TO YT - 1ă     ă      IF XP(YC) = -1 THENă         XP(YC) = XCă         TXP(YC) = TXCă         TYP(YC) = TYCă      ELSEă         OXC = XCă         OTXC = TXCă         OTYC = TYCă         ăREM         LINE (XP(YC), YC)-(XC, YC), 4ă         TEXTLINE XP(YC), XC, YC, TXP(YC), TYP(YC), TXC, TYCă         XP(YC) = -1ă         XC = OXCă         TXC = OTXCă         TYC = OTYCă     ă      END IFăă      XC = XC + XSKă     ă      TXC = TXC + TXSKă      TYC = TYC + TYSKăă   NEXT YCă ăSKIPIT2:ăă   OTX = TXă   OTY = TYă   OX = Xă   OY = YăNEXT IăLOOP UNTIL INKEY$ = " "ăSYSTEMăPOLYCOORDS:ăDATA 113,154ăDATA 288,181ăDATA 245,124ăDATA 96,19ăăTEXTCOORDS:ăDATA 0,0ăDATA 64,0ăDATA 64,64ăDATA 0,64ăăSUB TEXTLINE (X1, X2, Y, TX1, TY1, TX2, TY2)ăăIF X1 = X2 GOTO SKIPITăăIF X1 > X2 THEN SWAP X1, X2: SWAP TX1, TX2: SWAP TY1, TY2ăăXSK = (TX2 - TX1) / (X2 - X1)ăXC = TX1ăYSK = (TY2 - TY1) / (X2 - X1)ăYC = TY1ăăFOR X = X1 TO X2ă   C = POINT(XC, YC)ă   PSET (X, Y), Că   XC = XC + XSKă   YC = YC + YSKăNEXT XăăSKIPIT:ăEND SUBăAaron Scott Zabudsky           COLOR BARS THAT COLOR CYCLE    zabudsk@ecf.toronto.edu        09-05-94 (21:40)       QB, QBasic, PDS        25   418      COLRBARS.BASDIM c(255, 3)ăSCREEN 13ăc = 1ăFOR y = 0 TO 20ăFOR z = 1 TO 256ăPSET (z, y), căc = (c + 1) MOD 256ăIF c = 0 THEN c = 1ăNEXT zăNEXT yăFOR z = 1 TO 255ăOUT &H3C7, zăc(z, 1) = INP(&H3C9)ăc(z, 2) = INP(&H3C9)ăc(z, 3) = INP(&H3C9)ăNEXT zăFOR o = 1 TO 255ăFOR z = 1 TO 255ăOUT &H3C8, zăOUT &H3C9, c((z + o) MOD 256, 1)ăOUT &H3C9, c((z + o) MOD 256, 2)ăOUT &H3C9, c((z + o) MOD 256, 3)ăNEXT zăNEXT oăăAaron Scott Zabudsky           COMPUTERIZED SPIROGRAPH        zabudsk@ecf.toronto.edu        05-19-93 (12:36)       QB, QBasic, PDS        14   350      SPIRO.BAS   SCREEN 12ăCLSăox = 300: oy = 300: r = 30ăFOR n = 2 TO 50 STEP .5ăăpi = 3.141592653589793#ăFOR x = 0 * 100 TO 2 * 100 STEP năREM LINE (ox, oy)-(ox + 100 * COS(x), oy + 100 * SIN(x))ăLINE (ox + 100 * COS(x * pi / 100), oy + 100 * SIN(x * pi / 100))-(ox + 100 * COS(x * pi / 100 + n), oy + 100 * SIN(x * pi / 100 + n))ăăNEXT xăCLSăNEXT năăEarl L. Montgomery             REVERSING SCREEN IMAGE         FidoNet QUIK_BAS Echo          02-18-96 (12:41)       QB, QBasic, PDS        29   742      REVERSE.BAS  'Noticed you were asking about turning the screen upside down. Hereă 'is a routine that does a mirror image. I had written a program thată 'will reverse the screen horizontally and vertically. Will have toă 'look for the source code.ăăDEFINT A-ZăSCREEN 9ăDIM bottom(1500)ăCOLOR 14ăLOCATE 12, 30: PRINT "Earl L. Montgomery"ăCIRCLE (100, 100), 10ăLINE (100, 108)-(100, 114)ăLINE (84, 114)-(115, 114)ăLINE (84, 114)-(84, 134)ăLINE (115, 114)-(115, 134)ăLINE (100, 114)-(100, 144)ăLINE (100, 144)-(90, 174)ăLINE (100, 144)-(110, 174)ăCOLOR 4ăLINE (0, 0)-(639, 50), , BFăv1 = -0: v2 = 350ăFOR x = 0 TO 349ăv1 = v1 + 1ăv2 = v2 - 1ăGET (0, v1)-(639, v1), bottomăPUT (0, v2), bottom, PSETăSOUND 32000, .5ăNEXTăSLEEP 100ăEarl L. Montgomery             BACK SWITCHING                 FidoNet QUIK_BAS Echo          03-21-96 (21:23)       QB, PDS                58   1394     BANKSWIT.BAS 'This program demonstrates how to use bank switching so that youă 'can poke the entire 720X540X256 screen rather than use the slowă 'ROM Bios interrupt SETPIXEL. This code will work with Videoă '7 graphic chips. If you do not have a video7 graphic chip bută 'would like to run this demo. Please give me the name of youră 'graphic card/chip and I should be able to furnish you with theă 'correct code so it will run on your system.ăă '$INCLUDE: 'qb.bi'ă DIM inreg AS RegTypeă DIM outreg AS RegTypeă DEFLNG A-Ză inreg.ax = &H6F05ă 'inreg.bx = &H66: flag = 66:   '640x400x256ă 'inreg.bx = &H67: flag = 67:   '640x480x256ă inreg.bx = &H68: flag = 68:    '720x540x256ă 'inreg.bx = &H69:flag = 69:    '800x600x256ă CALL interrupt(&H10, inreg, outreg)ă DEF SEG = &HA000ă FOR x = 0 TO 65535ă POKE x, 4ă NEXTăbank1:ă OUT &H3C4, &HE8ă OUT &H3C5, &H10ă FOR x = 0 TO 65535ă POKE x, 184ă NEXTăbank2:ă OUT &H3C4, &HE8ă OUT &H3C5, &H20ă FOR x = 0 TO 65535ă POKE x, 4ă NEXTăbank3:ă OUT &H3C4, &HE8ă OUT &H3C5, &H30ă FOR x = 0 TO 65535ă POKE x, 3ă NEXTăbank4:ă OUT &H3C4, &HE8ă OUT &H3C5, &H40ă FOR x = 0 TO 65535ă POKE x, 143ă NEXTă IF flag = 66 OR flag = 67 THEN GOTO bank5notneededăbank5:ă OUT &H3C4, &HE8ă OUT &H3C5, &H50ă FOR x = 0 TO 65535ă POKE x, 3ă NEXTăbank5notneeded:ăSLEEP (100)ăinreg.ax = &H3ăCALL interrupt(&H10, inreg, outreg)ăCLS : ENDăJeff Lawson                    TGA VIEWER (320X200)           x2ftp.oulu.fi                  02-10-94 (11:50)       QB, QBasic, PDS        30   639      TGAVIEW.BAS DEFINT A-ZăăCONST FontHeight = 23ăCONST ScreenWidth = 320 / 4ăăSCREEN 13ăă'display the bitmapăOPEN "BIGHEART.TGA" FOR BINARY AS #1ăSEEK #1, 19ăFOR Attr = 0 TO 255ă    Value$ = SPACE$(3)ă    GET #1, , Value$ă    Red& = ASC(MID$(Value$, 3))ă    Green& = ASC(MID$(Value$, 2))ă    Blue& = ASC(MID$(Value$, 1))ă    OUT &H3C8, Attră    OUT &H3C9, Red&ă    OUT &H3C9, Green&ă    OUT &H3C9, Blue&ă    'PALETTE Attr, 65535 * Blue& + 256 * Green& + Red&ăNEXT AttrăSEEK #1, 19 + 768: A$ = " "ăFOR Row = 0 TO 199ă    FOR Col = 0 TO 319ă        GET #1, , A$ă        PSET (Col, Row), ASC(A$)ă    NEXT ColăNEXT RowăCLOSE #1ăDave Shea                      ANIMATION OF RUNNING MAN       FidoNet QUIK_BAS Echo          03-24-96 (00:00)       QB, QBasic, PDS        37   2364     RUNMAN.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MAN.ZIP",4^6:Z&=1493:?STRING$(50,177);ăU"%up()%9%%%#-%/YnLE:;0M\j'.%%v8%%%,%%%%rf%sSgf4xfev):re5c#X*8'<uăU"mVV&*O,9PIKC2g3B6V[YRa]mVbsFy'4<ODK>NE,zK5g#pA##bA7W2hhn$1$N6[-ăU"G>Gs7JiPxETiJ:(-0bPSSm:2</dVpW1++h*hQ<'*9;z19Y3[Y2Fcj4^hw6g>eJ%ăU"eSb7TiCK(YVtZNg^UKIrDV0*lG1*7H(JV6QFA%[Z;P5QM8=Dg$kmaUeJsNxou:^ăU"vo>tH.HAE&LkMTfXoobL?c-$h3Tklnb8Y[qs=LX\VvKmC]77i$V_Y,?1''NXO]+ăU"<iVP3[B\AMOD3tsF2SX8NHo8b&uKr2JiZ85lKEovjKfj->>I5n;Bb_+mBYb9/s(ăU"RCHN-l+A/AV]#dkArq)CT+f&j%94HUpg#W(oWh<PAfA9<xL%15TE-H[y_#$<CV#ăU"=IEfgGTK&cOPsEcDr>o9o$;v._\lmDn(h4jp>%S>%r&cP.gQy0J$Cg[Z+B3/p?aăU"3.Bv\u5V'w+0%h6y6\Pp$kyZ;fk_<7S&%CJg#ovD]8vL[<oGhni:TfljTrYpy9.ăU"gqu4<;<pjJRq:pnwTk^&Nt1(Gb]:B1ZqRC#29FK_6Q*i\gH3Y7?BPqoii5gnXwHăU":aRFWms)eZ4;agMjDaype?2Gt>V3Y'YJn-Lt4\N<G4mvSV?M(/m1Y4E1zDL/-c9ăU"[PIguDyp:(FaXgDJJ87/%<+/HWzFAPxRZno7JGL#z4K57go#Qo#'S'>5Q4#MEH-ăU"mG[v(Q0W3\+=DoVXtsDf>zP'&meIiF6&j,Wm.IWE/8iJ)\]LnnZk%PiaGE/>7]xăU"L=?v*g]5rFWtFJjXK*jro?PaqcWIqJwWPwhrowacxZNs0rTwRtnM:c3(;=*8&%uăU"p()%9%%%I-%^SmxER905]?'[%%,s%%%,%%%%rf%sSfsXrfT,,ASU9d+u<=99SkOăU"RRN%w>:b+_NLhins+B\d%Eq(Y9$a_#Y(k#DrisLX]blobe&'-SF[mBrO#sZRn>=ăU"nLuXvsTQh<LmLdIKNitLXo>Hwa>fsP>N6jSRdJLYE*QF_2mfX7N37tDf<Y%bhypăU"MkSdjl,.6DuH&93pHTMtK-((Z/X#iGk#8;gTn?60HNibl;Vr-FRDvmq^iPXM:*>ăU"i5,N.cUCp3+'.tckAx)v+UwXg8dFo2+uFVJZeQfc[b9DIccPo\8uH*8c*jgqwZIăU"sj$eYCk>Zr4sEhvzAhp*v0U<()l[F/?J]1;%L7XjNWEi:ta[$JkkvgS:E4NqCF^ăU"W?3p4dv>ruFtt#]'vBs6OY**WZ[w[7?5TVXgit\s+BP1^t^X8fp0%,HgF[rarp.ăU"GZ-h8wsHtFkx9CSJ5dl0zG+tvgypDrXo1aLN\hnHNRbk;Tb>>u?.ni=Cb84HHc_ăU"XVMa9(Ao/qq8.v:K:_ofSQ[_;ulEP?tT/B-.vZBSLi<Htj1SR/acZ3cN_$obFrcăU"(f$T[?A?xL<MNjpMgbwrjc#<UE=i$+S,(tK<si<*S%MO0vh8rMZtib:vfvyNsYJăU"7w=isFyx%Z'%%j%YDuXqahPKvN?,PLs*&en+&/nvclpoQ&MYH3s7:/UtN+Hi:8wăU"l:TzL-Ys/8FP#tTt:CLZ[boq%s=9=3hv&RvlffD1l+=u:UinjNb58Lmup)smnvdăU"vb:tNattN(^v),L%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%dăU"%%nq%(up&%'9%9%%%%-I%/YLsE:;M(\j'%(%v8%%%,%%%%%%%%%&%E%%%%%%%%%ăU"r%fsSg%fxup%&'9%%9%%%I-%^SmxER905]?'[%%,s%%%,%%%%%%%%%%%%E%%%'9ăU"'%%%rfsS%fsru%p*+%%%%%'#%'%9%%%%z%*%%%%%ăEND SUBăCLOSE:IF S=134AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăUnknown Author(s)              COLORFUL WORMHOLE              sansbach@gpu.srv.ualberta.ca   12-14-95 (00:00)       QB, PDS                136  8958     TUNNEL.BAS  '>>> Page 1 of TUNNEL.ZIP begins here. TYPE:BINAA TLEN:6362ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.1ăSUB V1:OPEN "O",1,"TUNNEL.ZIP",4^6:Z&=6362:?STRING$(50,177);ăU"%up()%9%%%R-%DR\5E1Q>XQS'%%%y/%%%/%%%%yz%ssjq%SgfxNf%<>\jU5w5]=ăU"N]*n4X2HR).8LG<d[%rwY'(:uByZtvx2&F[5mrLCtWU4W\HVmJ:F-?aq:?+G9a,ăU"viyyX2)-Jn$*-0.F]z#^RD#qPmGEHiRO+7*s-Rpn,BkPU1iu_uN7pn1kFtaf]/DăU"rF&-+8qowC6_J=0R0)-i/fOVUS[zZmqR.b[J%%NcoaWkBSI4E_JKEoZZ&W-#hj+ăU"qks;-h.2Nb<?xB.0SaII-pj4bpicWtYqX8<K/?5<$rO9lW?.;V1BNaTH6-jit:%ăU"k^j>pAzI;*Y$ifE4:#I>a.1(7bX'(qg3+;'%t;&(0J$y<?k#=q;qm;*#)#02KS^ăU";.-U'-H9#$Qid&QO(3fIDlEO'[#h;3(C-'$R%9Am%vmOGMwX>jVODB$q#'4gW)1ăU"r(+.J;80a^Q?'4:wR9z]:77e6%9Ev4D48y;l0H^MU>D-/rt-[]%SZ\s&3?/>MXdăU"Sb?_a0#Is^]8lFB71M8(9Pk3Z3k\NEhaW_1,gf+l:B2=W89RmYFX4\W]mgV*\AhăU"RkLRA37wU3rW]k6/gQPKMr1/[hEa-?*[2()<[sa(:*.PvGsUq)T)#mPz<QgAVe4ăU":S&H2hKH[N.Ki=&;[t#J42_aRangUa2(GNC2ExVF?*pM:\+1*(t&LcOFPt7/GieăU".eqLd&Tp1G,NO^)B/.\(\('F1y3Iy8?wVW1T%r,e357%?W%M3xVL]V44djAXlk]ăU"v-V\nGXkprozI,cC*Y?jfxx-9M4adbe6u=&Kod5%U8ibNv5g,J6nH8WxL]Jq8N7ăU"nb,(K'>f/h,u'x)4b<</XS:4HTJ*+,LuGF$U\KY\hpAf<Qg=uxAnodAV3q;k+uUăU"HN]Vs+1BQ4flUixXP-3#EFI7H<$]sX,5xYllVK4iQ.QSZO5l[KCsdhqymYNp2-3ăU"r1y8+]g+p2c3kbX't0up%()9%%%%-%3NW]DN;fB%%W6%%&+?%%%-%%%%uqty%SvăU"qgNfgJCdyjm#>zh,r&1#X=$J4_AZZ=J7HmKQA^[UGH#sUIlFY]fU'-F.5<ARbl5ăU"QE[)W\QF\%fCWsQ(%Sw-dkuU)mheA<LpJE9*uI*O'EyO0\r)n%1oh;kBp&Nk\ghăU"jEemb66xUUtYNdjzS.zvyb=VoHY.-?_DW-jB/$3nVCCpL.l^I6AA[5Wo_.oVw)0ăU"/[UF<A&;7eNi]0)A'*K%+)OV6O$Og<Ol9P:9Moa#i(#/OV/AKY12K[95,Ua2U4uăU"^(_3E1(YOj097/*9Y)O%#t&#P^RO4Qa*e+W#)3&68P09UdU+[L8M]a,8g+E%EKPăU"G/F6))'.&]PZ99x9k8/0Y(SE&4P^\Ph9G0Y=?#7]0+1%UPVS/AYG0a4W(0g+u&BăU"p(XP(lPqE^4'%u^7w+c7%\i#3Y8o29Q+5-951e*9W'W+&]%D%Sn%$Pjp9&9-092ăU"e=5?q=&/7U*9YFOK.E;W($[PN91ICh<0I5>)D1O\$\QCf0,qreV'i]u0\k[MaFxăU"Yp/%)-&_^EB/3F218?DQl,'[0yfwI+Uh&'IoEoauI(9^[o0a(&]'<%&syu(8?=]ăU"%*Im/.o+e&A>&,PM1rQEL(]*o[1]3uux$xg9,uvooF\'4NW^i6GzRVxuQIu)S)AăU".=RA7puGK]W;0R]C%2xRLfn]D]HhCrlf/MZ*o(O]ntSKkG7.B[Gg)Z^>H>M9<t;ăU"izrvFnrV8Z%>I.r.WsBp;/3qPgm.V[\:qbTiKxFroNlbO[]$J#+yxb;A$LtI1EQăU"V#-CK'K8THbmY,:PG+]pV;\j%LEH0Ro$gMEBJ&%t_5G9&+&X&mb*a*7S=oo&1[LăU"C?ghV60YIYB6Kr;?+Z\>[L:$i.GQjm)XY1]QNk9)gi1\QR)H=Iqh.8mjiH+)HK=ăU"d8afY(YQX.BGG]j8/P:^+)$7a>^Yr).<5;H<1_YGAQ<7+^q?.:/t)f6W5WYADQfăU"5+^j?Z:%Z)TJnG^:.F)(EG4J:D)R\55Y$Y.6eaIQj)_j/4:%r)\8ou):dF.We?=ăU"#:H7r5XY$a-Wqi:;Q07r5\Y$a.WsiKh-MXEYl)Fj55ZYUsQxdcYV)hOHqDQ0XEGăU"dB:,-M,bYd7TUring-MVY;-Qv)Kp6Kg9Y%:lg.MnY&2)hq8^8uFB:D6K,QYt-0wăU"\Qtg6KiY%X)47VKeYB^)nLq9H)x$$:n7u4>:f-Nwa/\9YE:HC)^6KbdY5:*P/b]ăU"&O,i%>Q'D%1i-^+)1O$%^-w3Z]MD(k1%Wz3-JIFAF_=h>=g>T\Pz#QFL9zN%4,MăU"S9ol-$2/y3y*YQSExi_=s>OGN#2c<Y0Trr>Ef-$oJyL);ydVZeVu3OO_wf9ZN\#ăU"9wC8(3e+_BPP,ut8tmFheBxc,HnmwVnBORP#Axs^mNeGSsrKIV4bm[>1j<+NK6\ăU"?0>JT[osnsUnja;bdw-g;ZdBdd$aBC*Umn.-4&DprlAkMi#2m2F*<eP[HTol8p*ăU"It2ifeBcW#4tqZvgqc4cP<Np&6mO\LCF^/?x?pauT<umGFsU2eYO^jcZ(,s..VRăU"J0i-z$I#-RW5%B:UZE5\qAA5OJwIzcer_qso^.6U#PL)o\vSV.h:%9PuEM'a]MSăU"c.mpsfsM(9&=)9fYhp4%pAoH*(('dTVI$dF1%$dB=MW:3v-*VK=^:'Ik$mM?&ZHăU"P<06)T'FK<DMbST'vq)%=:qg[nTg:7xJ6A^/MyKpPoY*)a-.*;^cm?Ovila]WM9ăU"e4Sb\fB:\pImrM10&s\;*S.Rb\4h:lJ$6buI]P(3wJx,)=EhPKjtJ9/&^,[[m+eăU"fxb>bJ)B,QMXJ&qxH_Ubq8WBa(6L(]qXH7_$%52Q]'c3cajDU_Woju-H7pGiT9jăU"n)F:Kk:8ma,[\pxesBYt,eGB/2c9D+L:E]9:BjdsD>,$Yaab^gU1jhEJG^eED=săU"K9C&f_pQ4\wlE0/yf<[HfhAsLh4MKjq\;Y-lk+jt8PVh_Sdhooj[-rO^FF32RiMăU"(Q4M;oDG9cWY[,]'/Ke;y2;0mn=XU'h\nH[A#6(<VYo#)QqKF;ZNjV:3x_BfCzhăU"lEQ0t.k+%-jAi[O;,/SEwrPA&PsLUL.[QilJ]*vN+K:vwoHweV,]pc^SI7(JAL7ăU"NBg3cVizFyxhZ=ls%[qt39k$wIx48AvOrPbqeJf84C9H9GI(0(J(Tr<NQt^[JsGăU"1gj>-b1S6[LY01#Y82shGM*DUtydh:.av/dYv.U7Zf\5u4=W:[HjiI)a^.iasYkăU"WqgM-Zr=C;V40jgwDE?QuoT=Qp=Xw9Zm*&J_K$jJ_[/P]//>/_p]X'>h;OwoDU3ăU"1L*zi2BSTfP^XX]P>4=%&x%X\.6eAkkU=O,HX,UE5S&'&C.;ONsk*9G,DF^*QnRăU"Rjv31m+KB\+g\g78^lWcbn%/.TX2^/E9b8'Z>/-q8e*VAX;aG=O9-BOge7p8K#lăU"rvxB(NC2ud1IEt*u8XY9jDCgJoROK()GN2PfV3%]/4?gupIWE'mdGd/:QQ><7$2ăU"<0qOHavc>f/Z#XR+]RHI'7L$WgS+H/r[UFgTT'N,1k*G].LbFf>xVpZ&3I_AZD2ăU"=cp7be[-/wCO5Y9MD*QfSwW8o6FgjtE>095YpfYF%(NI(lUP9T%<fF28<+:cEv(ăU"r72?:8/AUmX[(4170Z9g;.H.,qE8qekRIw17mw_IuCn/QL+>c$C]/c$6<UbSSXcăU"OHij*vK9DE#:;NY%]XbhJ/-g)(#duG,_dU^Gb<mz9BVt$\uEk:v4oh-JfbhZx6=ăU"IdbsS<giO-[vq4iN;k>XfK9,3JFy'0BiRt&o-nc.5#ToW\HlA\_583YZV<kBp:CăU"Pp6YIjQb7d_Dp^WGFQe&0CR>z+4lD,ht?D$OF]\N[#BU-_g/9V#[jXqK]['IBRVăU"u+Y1LG]YfGqIVJ0*Ic7t9e_('/4S>9;)*W9:i;<i7bbkNKd]8p.:B:dGw_1C;$4ăU"CLNCN5+))QJsm'YE:hwd-e?FEckX+rdkliHUSQM,jH)2+zLNSQsUZ==FbL28RB$ăU"^l,UM?eA:ujtYDik73\v#)1+BmU_M^4#NF7U*48=KTLU=r,ElJsNlp/cf(05$-lăU"<z^a&[C)KR0Z7n^BYVHhGy^S)sokl^-r\;_jNSbl$Q3F_d1fmk$sJP<#3cnA=/+ăU"0Xb,biSBPLJ-%J^>$/U[LC[TfGnb7fNQ=UMut-b%evj4^8t(Z^XnM'=<5DGJVePăU"_]9j&DzT/wjCht-X%FyTEdN:Hm0N//Cua&D^([^;Ck:]-&e>9:ajmh%GfYpT#0băU".;VoZ=.&9i7cEJk_dT,XO?[VH#.Xe).Kqe;?Q2lCy7aC9b_6LOgljeY2m9D\B<dăU"xEJmb:iSBIdoSVVLD;2,5g'kFJNwAFyu>(v_._b'2D=tD-T3-buXN50QgCspIn%ăU"]#aA#+b'Wu-dgTP_3gdC2)3N7(*FoF3^ETdy)Mox,dKZ>vRr^-dRk?N;XQc^^j/ăU"&Pm6bl>D;Ea(K0Z-N6RyeujrYmD/N7m(vSSUu(jEr1&mag_LbX>iK$9[x'S<uOeăU"eY*^S1\Ex'j/SGOeB\GD29(>6^n,,:>7,DBHlB__y?jr.-G&(RJ^aEjz96u'H?răU"KqI%,FF4HA\h.Pl/:Zj*fLFP3#pFBaVgv,Qv&+A^tHgi4Tm<dHmYZEP(re-S%kQăU"4h47b-[8SP4WwvDY\IhWDim#cZfCGJ,Q8NbFsOs%h4]4>5W/9i:?cwfu<dbiopyăU"=sMmrF'A]/V$ms'hpU5r_N#?v7#wr3W';9,p#Bj:m,/Jg_q\BxVIMDQ;RB6'9XQăU"0tcvs5X^s[d?/]JeM/>ODkoZVs_7\MX8S#p]YmMtZ+7OBXLdr^u-#)tO._K/ca'ăU"uQ]YOXQWwR:bC89*v+;<Nba&h2.d&3yKXwnTRs'3kCT,ZPY'e(NUbLHB-bht[3ZăU"1)d1kHQGWleJP8NsJ/iJa.rI:9ohyU(ciwK-ElMP4:f\Du;Yd%fx>Y\dpx28(7CăU"M8gd8E2NxA/4RsXdkQh/xla$Nl4<k?Q8;IGx%\2Bf-BiGb+282QLWm5DEZ>(i.OăU"YR6'uCIY#Wr;1PhG[cev/04O1ZMe'H<;XS,9*za6UqdaHnr;CwuRQYVb?WQXFQlăU"Bb3F$-b8-TOV8JTgAu,;C?u,TtH%w)/_2Y5)V]0DE97jCCwg&N1(Y7u%eRyd.8wăU"FvNva\_Uh2E]mhF:A.xj1AWL*=8+/N]V>U^xsk[^x86b[xxH-Vh1SZgl^_Y0d2]ăU"[LA.S*Eg6cfCi=]ucSwjXL)J+%0N3kMVg<-k8:^8u#>/tuT=Pbgg5pH+oTZW4(wăU"DS#TL=:VYb6n#JL\j6x6>28;K<N>x;K).XXKZau'W#rTul45ZvaAw<JX*RjIHfLăU"$t$^2Capmm4,uALw\ZKPq8U5XSvmL$(HU]m9PHMf_nepTcO+_KdY\8fY8gTs+uWăU"G7.9]K<_xTNN>a5Z=LuEfBeNP.f$tkc_hzb88[8Sn8?Dp(m>U2%mtXB\_qqHW)MăU"Zf^l8bLaFb\%<VFK?Vuk5e>d#ARXq\^*h'KvD=r%wFAHBPngR.6l<EYQ<-C(XRbăU"fpX&_eFV&hfn3fY%D84TrL^.+XVEdi:CZeP2cb.G33p-i&k5HBc#W1SI5m%NI-(ăU"O$$\lv[6bSLYd[Jx_WM?J7pWE/DM\#ek\a:ILv(Q.<YGmBN]x-^3a\WGM2'TWKCăU"6\]Ea<6\2Z7KihN=cIF-aYrbO7&62^xOCMQIy^g=r'r_+21L3EW)H*sg6F3sz0FăU"(xSAZMz:yiq9wO3q$r7+B/&^+/zOj#&oULT%\d0^:AdRzrD&3UpP8+Wf.Q1dtwmăU"M2EUdsi$%Y9v_/&zT?YGERJUyDtc4Kz,#1w6jQerEze2f%b#'mT,l^%#Nl1Jy3%ăU"k\O1ip&7DmP-P22ldzEQJYxz2z)-x'.7rtoDeR2<oq;g&cbTQB2JywN.zE(Ch4BăU"i&m.kp#AZs6G4.Xk)wRnR8#QEPr'C3;jJn\NKZiRv,mGIXu63JNdq$rbtyC337JăU"P<hVwC&spX/ffstMTbCq9?yV$L:2X^-\iMUu)6S2(]ZYAl&H>(rO*L^WH=_s]PdăU"fU5_?7KLFyOR&<'iCYzcbzdEI4ZED](D]vJQq4hQe?^kgL+iU7b%P[JI92Uz&ErăU"2rtRZkS:mq'6D1$;]gj4dL<f#NyLh_=e1eb9<Fr1#&c2aaLSZ;_6#::f9-Bk?;făU"_JzKmXAo-5Cib6n=z.56/'iS)0rPaPpeH$I?M8yk#O&'M7CQH%KR1,[ERX,OMD=ăU"6W*z(CsTxJ/W/PR5=VT%*j0,Y,HkRW&8%j;3Td2tV%;jk)E,5v;2')*laLUeD+BăU"NZSNSQ\Xh8se3Y?3<T7Y2d>>EPa/g4ctQ4U;2R?CCDoc,L2w_zyZG9S+/$r:s*3ăU"l__;e3o+:c^PTN1S9#b17Y[NR3&z+;msZNIQ*%)%g4R^ms#R_ZaU<\VJU3Vv(CEăU"w8fet9]_+%:J\uD,4E-=>qS*dk;-)h1ls;LKr2EJe:)4v:^9KF3yFXL;sPpuTHeăU"HMkEk/Xt28T>mo+&Ip*$6#%m9Gf(AO%6CoiEC5EAKj;lO.CnnMef&_5P+=KcYg'ăU"I0T0SIFR\V3LTjn-e_,6]&N'up%()9%%%%-%3MW]Dl:)T:&w&%%%4+%%%-%%%%uăU"qty%Sqng9fyHp]TuAxH7_l2<EgIh/TG\<eF5se%U)6#,jO/JD<,QRdFWp)tP.K-ăU"d9a(6&ScMzCIW<zow*WmMu-S-lUQ4ws.V?QSE>T4'tKNwtslY*omhkk4crMcuX5ăU"pv?kkv.YO#2+_;YE%6(_Z8h>[+Q#9%s'2jY55hRIx)_af:<QA_%%f,*(Gn30?4WăU"uiuK1GC=3sf1n:o%*huY[BYzqSTBX6SLrb&:-+wqXs7%Ul.b;CIxkbit-WXDOVFăU"ymJ&0%sO3;S*<dB%n/^kMg7O&$1;aZNbI9'x?Pl3S#&5SmkgPq1i%>DU=)ZL3slăU"HDspEAOwTIF9eRPsTCj(p/+%5cK$)\^e%O;b&yp.dXP1umsVM8IUc#hYH%uwY]RăU"iMJRe2%*veS>T8Gqg*_L.>Y9<OY?^6bsRVL=#RwqOo8ei#g$45KaOviF]'nYW\7ăU"VB)W,BMV,9klEDbv9:T>qF$vZOO]3-Bq.V'^gr9Lq:VVreeei%60_Ece4<O'9ceăU"I(M5,Lx0+kk,SV\Etv8Qf6Rn+7w+.:-<s4%up()%9%%%R-%JW/]DZM/Mmk&.%%]ăU"/%%%-%%%%uq%tySf7xrfz1r>Qej56jq4D1fYe/8qWC97oQbn&L\I&;);Uz%JUQoăU"PfDGFV&%0)bgCZ]+RHgX>0We*k0Hiv/3R9'W)RA6[ud>MhRV_j\8SJ9#/65521$ăU"kmn,#sy?gaet9kA8rt'XmQX)an#FJbTAIa2\>OwjpFXAce26*#Jn/\xK#Z$/pMtăU"QUW#FfTc9J?$>?6L6cY4lPh7J'g$DkCY*M*7wPmio.%s?ew[rg?ukQ-'\hto3\răU"Laq<9t7Z9Uj>>a&2o<YCXq=)Rn?6qSgKJV7vGi;Xn-D0.R&HfY?/%W]:4PC,rnYăU"rPZCGg-MP7:#1EgA-iDOf$bf#=s7+/ZFz5,<p0bgU.t<y,ZS?lL<Qb;FR_9fjeYăU"kw,p8WUR7.]?orj%e;fvP(T9[kRh5:U;qcQoOptzo'UIaJ:06g_BdK]73uUH.,4ăU"l'tzbWIHL<Ghds-_xEBpC>BBhX)PszCp,,*MIB,d1dySZDScy'c/rl\3sQ8Rj#%ăU"dLk)GH,+4-4#pkDoZqUpoZs.R'R'q&up%&'9%%9%%%R-%DR\5E1Q>XQS'%%%y/%ăU"%%/%%%%%%%%%&%%E%%%%%%%%%yzss%jqSg%fxup%&'9%%9%%%R-%NWS]D;f)B%WăU"6.%%+?%%%-%%%%%%%%%%%%E%%%%'(%%%uqty%Svqg%up&'%9%9%%%%-%3MW]Dl:ăU")T:&w&%%%4+%%%-%%%%%%%%%%%E%.%%)9%%%uq%tySq%ngup%&'9%%9%%%R-%JWăU"/]DZM/Mmk&.%%]/%%%-%%%%%%%%%&%%E%%%%M;%%%uqty%Sfxr%up*+%%%%%%)%ăU")%'S%%%'c<%%%%%ăEND SUBăCLOSE:IF S=37AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBă'>>> Page 1 of TUNNEL.ZIP ends here. Last page. TCHK:37ăEinar Tveit                    GRAPHICS DRAWING PROGRAM       comp.lang.basic.misc           04-12-96 (23:28)       QB, QBasic, PDS        694  13266    DRAW.BAS    DECLARE SUB Refresh (file$, colors%)ăREM The intro was made with this program!!!ăREM Hi, this program was made by Espen Tveit (me) to make it easyăREM programming graphic in qbasic, when you have printed your filenameăREM push enter and start drawing. If you have any comments send them to me:ăREMăREM eintveit@telepost.noăREM ăREM I`m on the newsgroups:ăREM comp.os.ms-dos.programmerăREM comp.lang.basic.miscăREMăREM Notice: This program automatic sets .bas behind the filnameăREM (This program will make an .qtf file, if you wants to open the file laterăREM just print the filename and this program will open the .qtf file)ăREM ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜăREM I`m just programmingăREM ßßßßßßßßßßßßßßßßßßßßăDEFINT A-ZăScreenmode = 8ăVIEW PRINT 1 TO 25ăStartcolor = 10ăSCREEN ScreenmodeăON KEY(1) GOSUB helpăKEY(1) ONăSCREEN ScreenmodeăLINE (2, 2)-(2, 630), 7ăLINE (3, 2)-(3, 630), 8ăLINE (1, 1)-(638, 198), 7, BăLINE (1, 99)-(637, 99)ăLINE (0, 0)-(639, 199), 7, BăLINE (2, 197)-(636, 197)ăLINE (636, 2)-(636, 2)ăLINE (1, 102)-(638, 102), 8ăLINE (1, 100)-(638, 101), 7, BăLINE (252, 3)-(252, 21), 8ăLINE (352, 2)-(352, 21), 8ăLINE (249, 22)-(352, 22), 8ăLINE (249, 3)-(249, 21)ăLINE (250, 1)-(251, 20), 7, BFăLINE (250, 20)-(350, 21), 7, BFăLINE (350, 1)-(351, 21), 7, BFăLINE (2, 2)-(638, 2), 8ăLINE (252, 19)-(348, 19), 15ăLINE (349, 3)-(349, 19), 15ăCOLOR 7ăLOCATE 2, 34: PRINT "Qdraw 5.0"ăLOCATE 5, 31: PRINT "Espen Tveit 1996"ăLOCATE 15, 10: PRINT "Do not print somthing behind the filname such as .bas"ăLOCATE 17, 10: INPUT "File: ", fi$ăfile$ = fi$ + ".qtf"ăfil$ = fi$ + ".bas"ăOPEN fil$ FOR APPEND AS #1ăOPEN file$ FOR APPEND AS #2ăCLSăcolors% = StartcolorăA = 5ăB = 5ăPRINT #1, "SCREEN "; Screenmodeăbeveg:ăFOR o% = 1 TO 15 STEP 1ăP = P + 1ăCOLOR o%ăLOCATE 23, P: PRINT "Ű"ăCOLOR 15ăLOCATE 23, 17: PRINT "Using color:                                         "ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăNEXT o%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăDOăIF wh = 1 THENăGOSUB filăEND IFăPSET (A, B), colors%ăSELECT CASE INKEY$ăCASE "*"ăCLOSE #1ăCLOSE #2ăCLOSE #3ăRefresh file$, colors%ăCLOSE #1ăCLOSE #2ăCLOSE #3ăOPEN fil$ FOR APPEND AS #1ăOPEN file$ FOR APPEND AS #2ăCASE "1"ăGOSUB sirkelăCASE CHR$(0) + CHR$(83)ăN = 1ăK = 1ăwh = 1ăPRINT #2, "P"ăPRINT #2, AăPRINT #2, BăPRINT #2, "0"ăPRINT #2,ăPRINT #2,ăPRINT #1, "PSET ("; A; ","; B; "), 0"ăăCASE "+"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% + 1ăIF colors% = 16 THEN colors% = 15ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE "-"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% - 1ăIF colors% = 0 THEN colors% = 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE CHR$(32)ăN = 1ăK = 1ăwh = 1ăăPRINT #2, "P"ăPRINT #2, AăPRINT #2, BăPRINT #2, colors%ăPRINT #2,ăPRINT #2,ăPRINT #1, "PSET ("; A; ","; B; "), "; colors%ăCASE "3"ăBEG = 0ăBEG1 = 0ăBEG = BEG + AăBEG1 = BEG1 + BăGOSUB firkant1ăCASE "4"ăBEG = 0ăBEG1 = 0ăBEG = BEG + AăBEG1 = BEG1 + BăGOSUB strekăCASE "2"ăBEG = 0ăBEG1 = 0ăBEG = BEG + AăBEG1 = BEG1 + BăGOSUB firkantăCASE CHR$(0) + "P"ăIF K = 0 THENăPSET (A, B), 0ăEND IFăB = B + 1ăPSET (A, B), colors%ăIF ET = 1 THENăGOSUB lagreăELSEăK = 0ăEND IFăCASE "5"ăCOLOR colors%ăOL = A / 8ăOL1 = B / 8ăIF OL = 0 THEN OL = 1ăIF OL1 = 0 THEN OL1 = 1ăLOCATE OL1, OL: INPUT "", f$ăIF PEN$ = "I" OR PEN$ = "i" THENăN = 1ăK = 1ăwh = 1ăPRINT #2, "Tekst"ăPRINT #2, OL1ăPRINT #2, OLăPRINT #2, f$ăPRINT #2, colors%ăPRINT #2,ăELSEăPRINT #1, "COLOR "; colors%ăPRINT #1, "LOCATE"; OL1; ","; OL; ":"; "PRINT "; CHR$(34); f$; CHR$(34)ăPRINT #1, "COLOR 15"ăN = 1ăK = 1ăwh = 1ăPRINT #2, "Tekst"ăPRINT #2, OL1ăPRINT #2, OLăPRINT #2, f$ăPRINT #2, colors%ăPRINT #2,ăEND IFăăCASE CHR$(0) + "K"ăIF K = 0 THENăPSET (A, B), 0ăEND IFăA = A - 1ăPSET (A, B), colors%ăIF ET = 1 THENăGOSUB lagreăELSEăK = 0ăEND IFăCASE CHR$(27)ăPRINT #1, "DO"ăPRINT #1, "LOOP"ăCLSăENDăCASE CHR$(0) + "M"ăIF K = 0 THENăPSET (A, B), 0ăEND IFăA = A + 1ăPSET (A, B), colors%ăIF ET = 1 THENăGOSUB lagreăELSEăK = 0ăEND IFăEND SELECTăLOOPăăhelp:ăCLSăCOLOR 15ăVIEW PRINT 1 TO 25ăLINE (131, 28)-(131, 28), 7ăLINE (131, 28)-(506, 97), 7, BăLINE (506, 98)-(131, 98), 8ăLINE (130, 98)-(130, 27), 15ăLINE (130, 27)-(506, 27), 15ăLINE (507, 27)-(507, 98), 8ăLINE (505, 96)-(132, 96), 15ăLINE (132, 96)-(132, 29), 8ăLINE (505, 29)-(505, 96), 15ăLOCATE 1, 23: PRINT "Ď  Help for Qdraw 4.0  Ď"ăLOCATE 5, 18: PRINT "Push <F1> to get help"ăLOCATE 6, 18: PRINT "Push <*> to refresh"ăLOCATE 7, 18: PRINT "Push <SPACE> to draw a point on the screen"ăLOCATE 8, 18: PRINT "Push <1> to draw an circle"ăLOCATE 9, 18: PRINT "Push <2> to draw an square"ăLOCATE 10, 18: PRINT "Push <3> to make an filled square"ăLOCATE 11, 18: PRINT "Push <4> to make a line"ăLOCATE 12, 18: PRINT "Push <5> to set in text"ăLOCATE 17, 20: PRINT "Espen Tveit 1996"ăLOCATE 23, 18: PRINT "Press a key to continue..."ăDOăLOOP WHILE INKEY$ = ""ăCLSăP = 0ăPSET (A, B), colors%ăFOR o% = 1 TO 15 STEP 1ăP = P + 1ăCOLOR o%ăLOCATE 23, P: PRINT "Ű"ăCOLOR 15ăLOCATE 23, 17: PRINT "Bruker farge:                                         "ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăNEXT o%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăIF wh = 0 THEN RETURNăIF OK1 = 0 THENăOK1 = 1ăCLOSE #1ăCLOSE #2ăOPEN file$ FOR INPUT AS #3ăEND IFăDO UNTIL EOF(3)ăLINE INPUT #3, valg$ăIF valg$ = "T" THENăLINE INPUT #3, rec$ăOL1 = VAL(rec$)ăLINE INPUT #3, rec$ăOL = VAL(rec$)ăLINE INPUT #3, rec$ăLINE INPUT #3, farge$ăKL = VAL(farge$)ăCOLOR KLăLOCATE OL1, OL: PRINT rec$ăCOLOR 15ăEND IFăIF valg$ = "P" THENă LINE INPUT #3, rec$ă G = VAL(rec$)ăă LINE INPUT #3, rec$ă H = VAL(rec$)ăă LINE INPUT #3, rec$ă LINE INPUT #3, o$ă Q = VAL(rec$)ă PSET (G, H), QăEND IFăIF valg$ = "BF" THENăLINE INPUT #3, rec$ăG = VAL(rec$)ăLINE INPUT #3, rec$ăH = VAL(rec$)ăLINE INPUT #3, rec$ăI = VAL(rec$)ăLINE INPUT #3, rec$ăJ = VAL(rec$)ăLINE INPUT #3, rec$ăCF = VAL(rec$)ăLINE (G, H)-(I, J), CF, BFăEND IFăIF valg$ = "B" THENăLINE INPUT #3, rec$ăG = VAL(rec$)ăLINE INPUT #3, rec$ăH = VAL(rec$)ăLINE INPUT #3, rec$ăI = VAL(rec$)ăLINE INPUT #3, rec$ăJ = VAL(rec$)ăLINE INPUT #3, rec$ăCF = VAL(rec$)ăLINE (G, H)-(I, J), CF, BăEND IFăăIF valg$ = "Strek" THENăLINE INPUT #3, rec$ăG = VAL(rec$)ăLINE INPUT #3, rec$ăH = VAL(rec$)ăLINE INPUT #3, rec$ăI = VAL(rec$)ăLINE INPUT #3, rec$ăJ = VAL(rec$)ăLINE INPUT #3, rec$ăCF = VAL(rec$)ăLINE (G, H)-(I, J), CFăEND IFăIF valg$ = "S" THENăLINE INPUT #3, rec$ăG = VAL(rec$)ăLINE INPUT #3, rec$ăH = VAL(rec$)ăLINE INPUT #3, rec$ăRADIUS = VAL(rec$)ăLINE INPUT #3, rec$ăCF = VAL(rec$)ăCIRCLE (G, H), RADIUS, CFăEND IFăLOOPăCLOSE #1ăCLOSE #2ăOPEN fil$ FOR APPEND AS #1ăCLOSE #2ăOPEN file$ FOR APPEND AS #2ăRETURNăăălagre:ăN = 1ăK = 1ăwh = 1ăăPRINT #2, "P"ăPRINT #2, AăPRINT #2, BăPRINT #2, colors%ăPRINT #2,ăPRINT #2,ăPRINT #1, "PSET ("; A; ","; B; "), "; colors%ăRETURNăăfirkant:ăLINE (BEG, BEG1)-(A, B), colors%, BăDOăSELECT CASE INKEY$ăCASE CHR$(0) + "H"ăLINE (BEG, BEG1)-(A, B), 0, BăB = B - 1ăLINE (BEG, BEG1)-(A, B), colors%, BăCASE CHR$(0) + "P"ăLINE (BEG, BEG1)-(A, B), 0, BăB = B + 1ăLINE (BEG, BEG1)-(A, B), colors%, BăCASE "+"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% + 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE "-"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% - 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE CHR$(0) + "K"ăLINE (BEG, BEG1)-(A, B), 0, BăA = A - 1ăLINE (BEG, BEG1)-(A, B), colors%, BăCASE CHR$(0) + "M"ăLINE (BEG, BEG1)-(A, B), 0, BăA = A + 1ăLINE (BEG, BEG1)-(A, B), colors%, BăCASE CHR$(13)ăN = 1ăK = 1ăwh = 1ăPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%; ", B"ăPRINT #2, "B"ăPRINT #2, BEGăPRINT #2, BEG1ăPRINT #2, AăPRINT #2, BăPRINT #2, colors%ăN = 1ăK = 1ăwh = 1ăRETURNăEND SELECTăLOOPăăfirkant1:ăLINE (BEG, BEG1)-(A, B), colors%, BFăDOăSELECT CASE INKEY$ăCASE CHR$(0) + "H"ăLINE (BEG, BEG1)-(A, B), 0, BFăB = B - 1ăLINE (BEG, BEG1)-(A, B), colors%, BFăCASE CHR$(0) + "P"ăLINE (BEG, BEG1)-(A, B), 0, BFăB = B + 1ăLINE (BEG, BEG1)-(A, B), colors%, BFăCASE "+"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% + 1ăIF farge = 16 THEN farge = 15ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE "-"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% - 1ăIF farge = 0 THEN farge = 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE CHR$(0) + "K"ăLINE (BEG, BEG1)-(A, B), 0, BFăA = A - 1ăLINE (BEG, BEG1)-(A, B), colors%, BFăCASE CHR$(0) + "M"ăLINE (BEG, BEG1)-(A, B), 0, BFăA = A + 1ăLINE (BEG, BEG1)-(A, B), colors%, BFăCASE CHR$(13)ăN = 1ăK = 1ăwh = 1ăPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%; ", BF"ăPRINT #2, "BF"ăPRINT #2, BEGăPRINT #2, BEG1ăPRINT #2, AăPRINT #2, BăPRINT #2, colors%ăN = 1ăK = 1ăwh = 1ăRETURNăEND SELECTăLOOPăăstrek:ăLINE (BEG, BEG1)-(A, B), colors%ăDOăSELECT CASE INKEY$ăCASE CHR$(0) + "H"ăLINE (BEG, BEG1)-(A, B), 0ăB = B - 1ăLINE (BEG, BEG1)-(A, B), colors%ăCASE CHR$(0) + "P"ăLINE (BEG, BEG1)-(A, B), 0ăB = B + 1ăLINE (BEG, BEG1)-(A, B), colors%ăCASE "+"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% + 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE "-"ăCOLOR 0ăLOCATE 22, colors%: PRINT ""ăcolors% = colors% - 1ăCOLOR colors%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăCASE CHR$(0) + "K"ăLINE (BEG, BEG1)-(A, B), 0ăA = A - 1ăLINE (BEG, BEG1)-(A, B), colors%ăCASE CHR$(0) + "M"ăLINE (BEG, BEG1)-(A, B), 0ăA = A + 1ăLINE (BEG, BEG1)-(A, B), colors%ăCASE CHR$(13)ăN = 1ăK = 1ăwh = 1ăPRINT #1, "LINE ("; BEG; ","; BEG1; ")-("; A; ","; B; ") ,"; colors%ăPRINT #2, "Strek"ăPRINT #2, BEGăPRINT #2, BEG1ăPRINT #2, AăPRINT #2, BăPRINT #2, colors%ăN = 1ăK = 1ăwh = 1ăRETURNăEND SELECTăLOOPăăăsirkel:ăDOăSELECT CASE INKEY$ăCASE "+"ăCOLOR 0ăLOCATE 22, plass%: PRINT ""ăcolors% = colors% + 1ăCOLOR colors%ăCOLOR 15ăplass% = colors% + 1ăLOCATE 22, plass%: PRINT ""ăCOLOR colors%ăLOCATE 23, 18 + 20: PRINT "Ű"ăCASE "-"ăCOLOR 0ăLOCATE 22, plass%: PRINT ""ăcolors% = colors% - 1ăCOLOR colors%ăCOLOR 15ăplass% = colors% - 1ăIF colors% = 0 THENăplass% = 2ăcolors% = 1ăEND IFăLOCATE 22, plass%: PRINT ""ăCOLOR colors%ăLOCATE 23, 18 + 20: PRINT "Ű"ăCASE CHR$(0) + "H"ăCIRCLE (A, B), RADIUS, 0ăRADIUS = RADIUS + 1ăCIRCLE (A, B), RADIUS, colors%ăăCASE CHR$(0) + "P"ăCIRCLE (A, B), RADIUS, 0ăRADIUS = RADIUS - 1ăIF RADIUS = 0 THEN RADIUS = 1ăCIRCLE (A, B), RADIUS, colors%ăCASE CHR$(13)ăPRINT #1, "CIRCLE ("; A; ","; B; "),"; RADIUS; ","; colors%ăwh = 1ăPRINT #2, "S"ăPRINT #2, AăPRINT #2, BăPRINT #2, RADIUSăPRINT #2, colors%ăRETURNăEND SELECTăLOOPăăfil:ăRETURNăăSUB Refresh (file$, colors%)ăOPEN file$ FOR INPUT AS #1ăP = 0ăFOR o% = 1 TO 15 STEP 1ăP = P + 1ăCOLOR o%ăLOCATE 23, P: PRINT "Ű"ăCOLOR 15ăLOCATE 23, 17: PRINT "Bruker farge:                                         "ăCOLOR colors%ăLOCATE 23, 17 + 15: PRINT "Ű"ăNEXT o%ăCOLOR 15ăLOCATE 22, colors%: PRINT ""ăă  DOă  IF EOF(1) THENă  GOTO sluttăEND IFă  LINE INPUT #1, valg$ă  IF valg$ = "T" THENă  LINE INPUT #1, rec$ă  OL1 = VAL(rec$)ă  LINE INPUT #1, rec$ă  OL = VAL(rec$)ă  LINE INPUT #1, rec$ă  LINE INPUT #1, farge$ă  KL = VAL(farge$)ă  COLOR KLă  LOCATE OL1, OL: PRINT rec$ă  COLOR 15ă  END IFă  IF valg$ = "P" THENă  LINE INPUT #1, rec$ă  G = VAL(rec$)ă  LINE INPUT #1, rec$ă  H = VAL(rec$)ă  LINE INPUT #1, rec$ă  LINE INPUT #1, o$ă  Q = VAL(rec$)ă  PSET (G, H), Qă  END IFăă  IF valg$ = "BF" THENă  LINE INPUT #1, rec$ă  G = VAL(rec$)ă  LINE INPUT #1, rec$ă  H = VAL(rec$)ă  LINE INPUT #1, rec$ă  I = VAL(rec$)ă  LINE INPUT #1, rec$ă  J = VAL(rec$)ă  LINE INPUT #1, rec$ă  CF = VAL(rec$)ă  LINE (G, H)-(I, J), CF, BFă  END IFă  IF valg$ = "B" THENă  LINE INPUT #1, rec$ă  G = VAL(rec$)ă  LINE INPUT #1, rec$ă  H = VAL(rec$)ă  LINE INPUT #1, rec$ă  I = VAL(rec$)ă  LINE INPUT #1, rec$ă  J = VAL(rec$)ă  LINE INPUT #1, rec$ă  CF = VAL(rec$)ă  LINE (G, H)-(I, J), CF, Bă  END IFăă  IF valg$ = "Strek" THENă  LINE INPUT #1, rec$ă  G = VAL(rec$)ă  LINE INPUT #1, rec$ă  H = VAL(rec$)ă  LINE INPUT #1, rec$ă  I = VAL(rec$)ă  LINE INPUT #1, rec$ă  J = VAL(rec$)ă  LINE INPUT #1, rec$ă  CF = VAL(rec$)ă  LINE (G, H)-(I, J), CFă  END IFă  IF valg$ = "S" THENă  LINE INPUT #1, rec$ă  G = VAL(rec$)ă  LINE INPUT #1, rec$ă  H = VAL(rec$)ă  LINE INPUT #1, rec$ă  RADIUS = VAL(rec$)ă  LINE INPUT #1, rec$ă  CF = VAL(rec$)ă  CIRCLE (G, H), RADIUS, CFă  END IFă LOOPă RETURNăăslutt:ăEND SUBăăAndrew Jones                   BOUNCING WORM                  FidoNet QUIK_BAS Echo          04-14-96 (14:40)       QB, QBasic, PDS        63   1537     WORM.BAS    'Here's a trippy VGA screensaver of a WORM moving on a VGA background.  Heă'moves and is animated...  One problem is he starts leaving black spotsă'after awhile, you'll see ităăDECLARE SUB animate (qq%)ăDEFINT A-ZăSCREEN 13ăRANDOMIZE TIMERăd = 8ăv = 1ăq = 1ăx = 160ăy = 100ăxd = INT(RND * 4) + 2ăyd = INT(RND * 4) + 2ăIF INT(RND * 10) > 5 THEN xd = -xd ELSE xd = ABS(xd)ăIF INT(RND * 10) > 5 THEN yd = -yd ELSE yd = ABS(yd)ăFOR t = 0 TO 100ăLINE (0, t)-(319, t), 200 - tăLINE (0, 200 - t)-(319, 200 - t), tă ăLINE (t, t)-(319 - t, t), tăLINE (t, 200 - t)-(319 - t, 200 - t), 200 - tăNEXTăDOăIF INT(RND * 30) + 1 = 15 AND xd < 0 THEN xd = xd - 1ăIF xd = -1 THEN xd = 2ăIF xd = -6 THEN xd = -5ăIF INT(RND * 30) + 1 = 15 AND xd > 0 THEN xd = xd + 1ăIF xd = 1 THEN xd = -2ăIF xd = 6 THEN xd = -5ăIF INT(RND * 30) + 1 = 15 AND yd > 0 THEN yd = yd + 1ăIF yd = 1 THEN yd = -2ăIF yd = -6 THEN yd = -5ăIF INT(RND * 30) + 1 = 15 AND yd < 0 THEN yd = yd - 1ăIF yd = -1 THEN yd = 2ăIF yd = 6 THEN yd = 5ăFOR t = 1 TO 8ăCIRCLE (x, y), 15 - t, q + tăCIRCLE (x + 1, y), 15 - t, q + tăNEXTăx = x + xdăy = y + ydăIF x < 3 AND xd < 0 THEN xd = ABS(xd)ăIF x > 316 AND xd > 0 THEN xd = -xdăIF y < 3 AND yd < 0 THEN yd = ABS(yd)ăIF y > 196 AND yd > 0 THEN yd = -ydăq = q + 1ăIF q = 255 THEN q = 1ăv = v + dăIF v = 400 THEN d = -8ăIF v = 0 THEN d = 8ăanimate văLOOPă ăSUB animate (qq)ăOUT &H3C8, 1ăFOR t = 1 TO 255ăOUT &H3C9, (t + qq)ăOUT &H3C9, (t + qq) \ 2ăOUT &H3C9, (t + qq) \ 4ăNEXTăEND SUBăAndrew Jones                   BOX ENLARGES AS BALL BOUNCES   FidoNet QUIK_BAS Echo          04-14-96 (14:42)       QB, QBasic, PDS        62   1347     BOXBALL.BAS 'Sorry about that profanity in BOB.BAS, just saw it as I was cruisingă'through my programs..eek.. here's an EGA demonstration:)ăăDEFINT A-ZăCONST numstars = 30ăapage = 0ăvpage = 1ăx = 0ăy = 0ăbx = 6ăby = 7ăd = 1ăb = 1ăq = 4ăDIM sx(numstars)ăDIM sy(numstars)ăDIM sc(numstars)ăSCREEN 7ăFOR t = 0 TO numstarsăsx(t) = INT(RND * 320)ăsy(t) = INT(RND * 320)ăsc(t) = INT(RND * 3) + 1ăIF sc(t) = 1 THEN sc(t) = 8ăIF sc(t) = 2 THEN sc(t) = 7ăIF sc(t) = 3 THEN sc(t) = 15ăNEXTăDOăSCREEN 7, , apage, vpageăDRAW "TA" + STR$(b) + "S" + STR$(q)ăDRAW "c15bm160,100u20r20c8d20l20c15c8u20c15e10r20e-10d20e10u20"ăFOR t = 0 TO numstarsăIF sx(t) = 0 AND sy(t) = 0 THENăsx(t) = INT(RND * 20) + 300ăsy(t) = INT(RND * 200)ăsc(t) = INT(RND * 3) + 1ăIF sc(t) = 1 THEN sc(t) = 8ăIF sc(t) = 2 THEN sc(t) = 7ăIF sc(t) = 3 THEN sc(t) = 15ăEND IFăPSET (sx(t), sy(t)), sc(t)ăsx(t) = sx(t) - sc(t)ăIF sx(t) < 0 THEN sx(t) = 0: sy(t) = 0ăNEXTăx = x + bxăy = y + byăIF x > 320 THEN bx = -bx: x = 320ăIF y > 200 THEN by = -by: y = 200ăIF x < 0 THEN bx = ABS(bx)ăIF y < 0 THEN by = ABS(by)ăCIRCLE (x, y), 2, 4ăCIRCLE (x, y), 1, 12ăCIRCLE (x + 1, y), 2, 4ăCIRCLE (x + 1, y), 1, 12ăSWAP apage, vpageăSCREEN 7, , apage, vpageăCLS 1ăb = b + 10ăq = q + dăIF q >= 22 THEN d = -1ăIF q = 4 THEN d = 1ăIF b >= 360 THEN b = 1ăLOOPăAndrew Jones                   SNOWY RAIN                     FidoNet QUIK_BAS Echo          04-14-96 (14:43)       QB, QBasic, PDS        26   529      SNOWRAIN.BAS'Snowy Rain.  I think it's rad, tell me what you think:)ăăDEFINT A-ZăON KEY(1) GOSUB fofoăKEY(1) ONăCONST snow = 10ăDIM sx(snow)ăDIM sy(snow)ăSCREEN 13ăFOR t = 0 TO snowăsx(t) = INT(RND * 320)ăsy(t) = INT(RND * 20)ăNEXTăDOăFOR t = 0 TO snowăIF sy(t) = 199 THEN sy(t) = 0: sx(t) = INT(RND * 320): sy(t) = INT(RND * 20)ăv = INT(RND * 15) + 1ăPSET (sx(t), sy(t)), v + 15ăIF v < 6 THEN sx(t) = sx(t) + 1ăIF v > 10 THEN sx(t) = sx(t) - 1ăsy(t) = sy(t) + 1ăIF sy(t) > 199 THEN sy(t) = 199ăNEXTăLOOPăfofo:ăENDăUnknown Author(s)              MOUSE PAINT PROGRAM            pages.prodigy.com/gamersp      04-01-96 (11:01)       QB, PDS                1238 32348    DRAW!.BAS   'Click the right mouse button to open the menuăă'DRAW! v3.6    'Fixed I/O error, and a betteră               'printing routine.  Now to printă               'just press 'P' while in the drawă               'space and DRAW! will remove theă               'mouse cursor from the screen andă               'print it.ăă'NOTE: QB 4.5 user PLEASE LOAD THE QB.QLB library! To do soă'start QB 4.5 like so at the command prompt:ă'C:\QB45>QB /L QBă'ăă'If you have any trouble loading a .PAL(palette file),ă'.PL1-4(EGA BSAVE files), or a .PIC(VGA BSAVE file) please sendă'me E-MAIL. And just so you know:ă'BSAVE files are based on code supplied by Dave Gentry fromă'VGA LESSON #39. PALette files are simple text format thată'support 1 line per color and have 4 segments to a line. Here isă'the basic format for a PAL file:ă'Segment 1:     Segment 2:   Segment 3:   Segment 4:ă'The COLOR #    Red value    Green value  Blue valueă'(These can be read using INPUT #1, CO%,R%,G%,B%)ă'Once those values are read into memory use David Gilhams EGA/VGAă'palette routines:ă'OUT &H3C8, CO% 'Selects color to changeă'OUT &H3C9, R% 'Selects red valueă'OUT &H3C9, G% 'Selects green valueă'OUT &H3C9, B% 'Selects blue valueăă'Credits to:ă'ă'~Dave~ Gentry, for his BLOAD/BSAVE routines!ă'David Gillham, for his EGA palette routines.ă'ăDECLARE SUB PRINTIT ()ăDECLARE SUB PALIO (F$)ăDECLARE SUB SCREENIO (F$, flag!)ăDECLARE SUB SAVEPRINTER (PRNTRTYPE%)ăDECLARE SUB PRINTSETUP ()ăDECLARE SUB INTRO ()ăDECLARE SUB PAINTIT ()ăDECLARE SUB COPYIT ()ăDECLARE SUB TEXTFONT ()ăDECLARE SUB PALETTECHANGE ()ăDECLARE SUB WARN (RETURN.CODE%)ăDECLARE SUB CHANGESCREENMODE ()ăDECLARE SUB ZOBJ (SEL%)ăDECLARE SUB PLOT (XX%, YY%, X%, Y%)ăDECLARE SUB PLOTX (PX%, PY%)ăDECLARE SUB SAVEIT (OP%)ăDECLARE SUB ZOOM ()ăDECLARE SUB AIRBRUSH ()ăDECLARE SUB FONT (TEXT$, X%, Y%, stepX%, stepY%, CO!, Ang%)ăDECLARE SUB BUTTON (X1%, Y1%, X2%, Y2%, d%)ăDECLARE SUB DOODLE ()ăDECLARE SUB DRAWOBJ (OBJ%)ăDECLARE SUB POPOPS (SEL%)ăDECLARE SUB NEWDIR ()ăDECLARE SUB SETCOM ()ăDECLARE SUB SETUP ()ăDECLARE SUB NEWODIR ()ăDECLARE SUB TEXTBOX (BY!, BX!, EY!, EX!, ASCII!, C!, BC!, SHADOW, BS)ăDECLARE SUB BOX (BX, BY, EX, EY, B)ăDECLARE SUB Pause ()ăDECLARE SUB MOUSESTATUS (LB%, RB%, XMOUSE%, YMOUSE%)ăDECLARE SUB MouseRange (X1%, Y1%, X2%, Y2%)ăDECLARE SUB MousePut (X%, Y%)ăDECLARE SUB MOUSEHIDE ()ăDECLARE SUB MouseDriver (ax%, BX%, cx%, dx%)ăDECLARE SUB MOUSESHOW ()ăDECLARE FUNCTION MouseInit% ()ăDIM SHARED Mouse$ăDIM SHARED THICK%, CO%, SCREENMODE%, PLX%(100), FONTSIZE%ăCONST UP = 1ăCONST DOWN = 0ăCONST ZOOMHELP = 1                'Set to zero to disable ZOOM instructionsăFONTSIZE% = 1                     'Set to default FONT sizeăSCREENMODE% = 7                   'Set to default screen modeăăMouse$ = SPACE$(57)ăFOR i% = 1 TO 57ă  READ a$ă  H$ = CHR$(VAL("&H" + a$))ă  MID$(Mouse$, i%, 1) = H$ăNEXT i%ăDATA 55,89,E5,8B,5E,0C,8B,07,50,8B,5E,0A,8B,07,50,8BăDATA 5E,08,8B,0F,8B,5E,06,8B,17,5B,58,1E,07,CD,33,53ăDATA 8B,5E,0C,89,07,58,8B,5E,0A,89,07,8B,5E,08,89,0FăDATA 8B,5E,06,89,17,5D,CA,08,00ăCLS : THICK% = 10: CO% = 1ăms% = MouseInit%ăIF NOT ms% THENă  PRINT "Mouse not found"ă  ENDăEND IFăOPEN "DRAW!PAL.TMP" FOR OUTPUT AS #1: CLOSE #1ă'ON ERROR GOTO ERRORTRAPăCHANGEIT:ăSCREEN SCREENMODE%: PAINT (1, 1), 15: MOUSESHOWăFUNC% = 1ăin:ăK$ = INKEY$ăMOUSESTATUS LB%, RB%, X%, Y%ăIF FUNC% > 0 AND FUNC% < 6 THEN DRAWOBJ FUNC%ăIF FUNC% = 8 THEN DOODLEăIF FUNC% = 6 THEN AIRBRUSHăIF FUNC% = 7 THEN PAINTITăIF FUNC% = 9 THEN ZOOM: POPOPS FUNC%ăIF FUNC% = 10 THEN TEXTFONTăIF RB% = -1 THEN POPOPS FUNC%ăIF FUNC% = 99 THEN GOTO CHANGEITăIF K$ <> CHR$(27) THEN GOTO inăDATA G,a,m,e,r,s,'ăDATA P,a,r,a,d,i,s,eăDATA S,o,f,t,w,a,r,eăprintcode:ăDATA 205, 5, 203  : ' int 5  retf  'Machine-language codeă                                   'for printing screen.ă'ERRORTRAP:ă'PRINT "ERROR!! #";ERRă'RESUME NEXTăăSUB AIRBRUSHăRANDOMIZE TIMERăMOUSESTATUS LB%, RB%, X%, Y%ăIF LB% = -1 THENăMOUSEHIDEăXX% = INT(RND(1) * THICK%) + 1ăYY% = INT(RND(1) * THICK%) + 1ăPSET (X% - XX% - 1, Y% - YY% - 1), CO%ăMOUSESHOWăEND IFăMOUSESHOWăEND SUBăăSUB BUTTON (X1%, Y1%, X2%, Y2%, d%)ăIF d% = 1 THEN B1% = 15: B2% = 8ăIF d% = 0 THEN B1% = 8: B2% = 15ăLINE (X1%, Y1%)-(X2%, Y2%), 7, BFăLINE (X1%, Y1%)-(X2%, Y1%), B1%ăLINE (X1%, Y1%)-(X1%, Y2%), B1%ăLINE (X2%, Y1%)-(X2%, Y2%), B2%ăLINE (X1%, Y2%)-(X2%, Y2%), B2%ăEND SUBăăSUB CHANGESCREENMODEăREDIM COVERUP5%(7000)ăREDIM MODES$(5)ăMODES$(1) = "320 X 200 X 16": MODES$(2) = "640 X 200 X 16"ăMODES$(3) = "640 X 350 X 16": MODES$(4) = "640 X 480 X 16"ăMODES$(5) = "320 X 200 X 256"ăGET (14, 14)-(161, 101), COVERUP5%ăBUTTON 14, 14, 161, 101, UPăBUTTON 15, 15, 160, 100, UPăBUTTON 17, 17, 30, 30, DOWN: LINE (18, 18)-(29, 29), 0: LINE (18, 29)-(29, 18), 0ăBUTTON 32, 17, 158, 30, UP: LINE (33, 18)-(157, 29), 9, BFăFONT "Screen modes", 34, 20, 6, 0, 15, 0ăFOR i% = 35 TO 90 STEP 12ăa = a + 1ăd% = 1ăIF a = 1 AND SCREENMODE% = 7 THEN d% = 0ăIF a = 2 AND SCREENMODE% = 8 THEN d% = 0ăIF a = 3 AND SCREENMODE% = 9 THEN d% = 0ăIF a = 4 AND SCREENMODE% = 12 THEN d% = 0ăIF a = 5 AND SCREENMODE% = 13 THEN d% = 0ăBUTTON 17, i%, 150, i% + 9, d%ăFONT MODES$(a), 19, i% + 2, 6, 0, 0, 0ăNEXTăMOUSESHOWăăWAIT4PRESS2:ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăIF X% > 17 AND Y% > 17 AND X% < 30 AND Y% < 30 THEN GOTO ABORTIT4ăa = 0ăFOR i% = 35 TO 90 STEP 12ăa = a + 1ăIF X% > 17 AND Y% > i% AND X% < 150 AND Y% < i% + 9 THENăWARN RETURN.CODE%ăIF RETURN.CODE% = 1 THEN GOTO ABORTIT4ăIF a = 1 THEN SCREENMODE% = 7: GOTO ABORTIT4ăIF a = 2 THEN SCREENMODE% = 8: GOTO ABORTIT4ăIF a = 3 THEN SCREENMODE% = 9: GOTO ABORTIT4ăIF a = 4 THEN SCREENMODE% = 12: GOTO ABORTIT4ăIF a = 5 THEN SCREENMODE% = 13: GOTO ABORTIT4ăEND IFăNEXTăGOTO WAIT4PRESS2ăăABORTIT4:ăPUT (14, 14), COVERUP5%, PSETăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăăEND SUBăăSUB DELAYăăEND SUBăăSUB DOODLEăMOUSESHOWăMOUSESTATUS LB%, RB%, X%, Y%ăIF LB% = -1 THEN MOUSEHIDEăIF LB% = -1 THEN LINE (X% - 1, Y% - 1)-(X% - 1 - THICK% - 1, Y% - 1 - THICK% - 1), CO%, BFăIF LB% = -1 THEN MOUSESHOWăEND SUBăăSUB DRAWOBJ (OBJ%)ăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăIF INKEY$ = "p" OR INKEY$ = "P" THEN PRINTITăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăPLOTX X%, Y%ăXX% = X%: YY% = Y%ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăIF INKEY$ = "p" OR INKEY$ = "P" THEN PRINTITăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN GOTO ABORTITăWENDăMOUSEHIDEăPUT (XX% - 4, YY% - 4), PLX%, PSETăIF OBJ% = 1 OR OBJ% = 3 OR OBJ% = 5 THENăFOR i = 0 TO THICK% - 1ăIF OBJ% = 1 THEN LINE (XX%, YY% - i)-(X%, Y% - i), CO%ăIF OBJ% = 3 THEN LINE (XX%, YY%)-(X%, Y%), CO%, BFăIF OBJ% = 5 AND X% > XX% THEN COLOR CO%: CIRCLE (XX%, YY%), X% - XX%: PAINT (XX%, YY%), CO%ăIF OBJ% = 5 AND XX% > X% THEN COLOR CO%: CIRCLE (XX%, YY%), XX% - X%: PAINT (XX%, YY%), CO%ăNEXTăEND IFăIF OBJ% = 2 THENăIF XX% < X% AND YY% < Y% OR XX% > X% AND YY% > Y% THENăFOR i = 1 TO THICK%ăLINE (XX% + i, YY% + i)-(X% - i, Y% - i), CO%, BăNEXTăEND IFăIF XX% > X% AND YY% < Y% OR XX% < X% AND YY% > Y% THENăFOR i = 1 TO THICK%ăLINE (XX% - i, YY% + i)-(X% + i, Y% - i), CO%, BăNEXTăEND IFăEND IFăIF OBJ% = 4 THENăFOR i = 1 TO THICK%ăIF OBJ% = 4 AND X% > XX% THEN COLOR CO%: CIRCLE (XX%, YY%), X% - XX% + i: CIRCLE (XX% + 1, YY%), X% - XX% + iăIF OBJ% = 4 AND XX% > X% THEN COLOR CO%: CIRCLE (XX%, YY%), XX% - X% + i: CIRCLE (XX% + 1, YY%), XX% - X% + iăNEXTăEND IFăăMOUSESHOWăEXIT SUBăABORTIT:ăPUT (XX% - 4, YY% - 4), PLX%, PSETăEND SUBăăSUB FONT (TEXT$, X%, Y%, stepX%, stepY%, CO, Ang%)ăTEXT$ = UCASE$(TEXT$): T = LEN(TEXT$)ăIF Ang% < 4 THEN DRAW "A" + STR$(Ang%)ăDRAW "S4;BM" + STR$(X%) + "," + STR$(Y%) + "C" + STR$(CO)ă                                                          ăFOR C = 1 TO TăSELECT CASE MID$(TEXT$, C, 1)ăCASE "A": DRAW "d4u4r4d4u2l4u2"ăCASE "B": DRAW "d4r4l4u2r4l4u2r4d4u4l4"ăCASE "C": DRAW "r4l4d4r4bu4l4"ăCASE "D": DRAW "r4l3d4l1r4u4l4"ăCASE "E": DRAW "d4r4l4u2r3l3u2r4l4"ăCASE "F": DRAW "d4u2r3l3u2r4l4"ăCASE "G": DRAW "r4l4d4r4u2l1r1bu2l4"ăCASE "H": DRAW "d4u2r4u2d4u4bl4"ăCASE "I": DRAW "r4l2d4l2r4bu4l4"ăCASE "J": DRAW "br4d3bd1bl1l3bu4"ăCASE "K": DRAW "d4u2r2u1r2u1r1l1d1l2d1l2r2d1r2d1r1bu4bl4"ăCASE "L": DRAW "d4r4l4u4"ăCASE "M": DRAW "d4u4f2e2d4bu4bl4"ăCASE "N": DRAW "d4u4f4u4bl4"ăCASE "O": DRAW "d4r4u4l4"ăCASE "P": DRAW "d4u4r4d2l4u2"ăCASE "Q": DRAW "d4r4u4l4d4r4h1f2h1u4l4"ăCASE "R": DRAW "d4u4r4d2l4r2f2h2l2u2"ăCASE "S": DRAW "r4l4d2r4d2l4bu4"ăCASE "T": DRAW "r4l2d4u4l2"ăCASE "U": DRAW "d4r4u4bl4"ăCASE "V": DRAW "d2f2e2u2bl4"ăCASE "W": DRAW "d4e2f2u4bl4"ăCASE "X": DRAW "f4h2g2e4bl4"ăCASE "Y": DRAW "f3d1u1e3bl4"ăCASE "Z": DRAW "r4g4r4bu4l4"ăCASE "1": DRAW "br2d4u4bl2"ăCASE "2": DRAW "r3d1g3r3bu4bl4"ăCASE "3": DRAW "r4d2l3r3d2l4bu4"ăCASE "4": DRAW "d2r4d2u4bl4"ăCASE "5": DRAW "r4l4d2r4d2l4bu4"ăCASE "6": DRAW "r4l4d4r4u2l4u2"ăCASE "7": DRAW "r4d4u4l4"ăCASE "8": DRAW "r4d4l4u4d2r4u2l4"ăCASE "9": DRAW "r4d4u2l4u2"ăCASE "0": DRAW "r4d4l4u4r4g4u4"ăEND SELECTăDRAW "BR" + STR$(stepX%)ăIF stepY% > 0 THENăDRAW "BD" + STR$(stepY%)ăELSEăDRAW "BU" + STR$(ABS(stepY%))ăEND IFăNEXT CăDRAW "A0"ăEND SUBăăSUB INTROăSCREEN 13ăFOR i = 1 TO 15: PALETTE i, 0: NEXTăDEF SEG = &HA000ă'BLOAD "LOGO320.PIC", 0ă'PALIO "LOGO320"ăSOUND 2000, .5: SOUND 3000, 1ăWHILE INKEY$ = "": WENDăEND SUBăăSUB MouseDriver (ax%, BX%, cx%, dx%)ă  DEF SEG = VARSEG(Mouse$)ă  Mouse% = SADD(Mouse$)ă  CALL ABSOLUTE(ax%, BX%, cx%, dx%, Mouse%)ăEND SUBăăSUB MOUSEHIDEă ax% = 2ă MouseDriver ax%, 0, 0, 0ăEND SUBăăFUNCTION MouseInit%ă  ax% = 0ă  MouseDriver ax%, 0, 0, 0ă  MouseInit% = ax%ăEND FUNCTIONăăSUB MousePut (X%, Y%)ă  ax% = 4ă  cx% = X%ă  dx% = Y%ă  MouseDriver ax%, 0, cx%, dx%ăEND SUBăăSUB MouseRange (X1%, Y1%, X2%, Y2%)ă  ax% = 7ă  cx% = X1%ă  dx% = X2%ă  MouseDriver ax%, 0, cx%, dx%ă  ax% = 8ă  cx% = Y1%ă  dx% = Y2%ă  MouseDriver ax%, 0, cx%, dx%ăEND SUBăăSUB MOUSESHOWă  ax% = 1ă  MouseDriver ax%, 0, 0, 0ăEND SUBăăSUB MOUSESTATUS (LB%, RB%, XMOUSE%, YMOUSE%)ă  ax% = 3ă  MouseDriver ax%, BX%, cx%, dx%ă  LB% = ((BX% AND 1) <> 0)ă  RB% = ((BX% AND 2) <> 0)ă  XMOUSE% = cx%ă  YMOUSE% = dx%ă  IF SCREENMODE% = 7 OR SCREENMODE% = 13 THEN XMOUSE% = XMOUSE% / 2ăEND SUBăăSUB PAINTITăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăMOUSEHIDEăPAINT (X%, Y%), CO%ăMOUSESHOWăEND SUBăăSUB PALETTECHANGEăREDIM COVERUP6%(8000)ăGET (30, 30)-(170, 135), COVERUP6%ăBUTTON 30, 30, 170, 135, UPăBUTTON 32, 32, 46, 46, DOWN: LINE (33, 33)-(45, 45), 0: LINE (33, 45)-(45, 33), 0ăBUTTON 48, 32, 168, 46, UPăBUTTON 120, 87, 160, 98, UPăBUTTON 33, 122, 63, 132, UPăBUTTON 70, 122, 100, 132, UPăFONT "SAVE  LOAD", 35, 124, 6, 0, 0, 0ăFONT "OK", 130, 91, 6, 0, 0, 0ăLINE (49, 33)-(167, 45), 9, BFăFONT "PALETTE", 51, 35, 6, 0, 15, 0ăFONT "RED", 32, 60, 6, 0, 12, 0ăFONT "GREEN", 32, 75, 6, 0, 10, 0ăFONT "BLUE", 32, 90, 6, 0, 9, 0ăFOR i% = 55 TO 85 STEP 15ăBUTTON 70, i%, 80, i% + 13, UPăBUTTON 83, i%, 103, i% + 13, UPăBUTTON 105, i%, 115, i% + 13, UPăNEXTăFONT "PALETTE WILL CHANGE THE", 32, 100, 6, 0, 0, 0ăFONT "VALUE OF THE", 32, 106, 6, 0, 0, 0ăCOL = CO%ăFONT "CURRENT", 109, 106, 6, 0, COL, 0ăFONT "COLOR", 32, 112, 6, 0, 0, 0ăăMOUSESHOWăăWAIT4PRESS4:ăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăLINE (120, 60)-(160, 85), CO%, BFăFONT STR$(R%), 82, 60, 6, 0, 0, 0ăFONT STR$(G%), 82, 75, 6, 0, 0, 0ăFONT STR$(B%), 82, 90, 6, 0, 0, 0ăWENDăMOUSEHIDEăIF X% > 33 AND Y% > 122 AND X% < 63 AND Y% < 132 THENăOPEN "DRAW!PAL.TMP" FOR APPEND AS #1ăIF CHANGED% <> 0 THEN WRITE #1, CO%, R%, G%, B%ăCLOSE #1ăSAVEIT 3ăEND IFăIF X% > 70 AND Y% > 122 AND X% < 100 AND Y% < 132 THEN SAVEIT 4ăIF X% > 120 AND Y% > 87 AND X% < 160 AND Y% < 98 THENăPUT (30, 30), COVERUP6%, PSETăOPEN "DRAW!PAL.TMP" FOR APPEND AS #1ăIF R% <> 0 AND G% <> 0 AND B% <> 0 THEN WRITE #1, CO%, R%, G%, B%ăCLOSE #1ăEXIT SUBăEND IFăIF X% > 32 AND Y% > 32 AND X% < 46 AND Y% < 46 THEN PUT (30, 30), COVERUP6%, PSET: EXIT SUBăIF X% > 70 AND Y% > 55 AND X% < 80 AND Y% < 70 THENăLINE (84, 56)-(102, 67), 7, BFăR% = R% - 1ăIF R% = -1 THEN R% = 63ăGOSUB CPALăEND IFăIF X% > 105 AND Y% > 55 AND X% < 115 AND Y% < 70 THENăLINE (84, 56)-(102, 67), 7, BFăR% = R% + 1ăIF R% = 64 THEN R% = 0ăGOSUB CPALăEND IFăIF X% > 70 AND Y% > 70 AND X% < 80 AND Y% < 85 THENăLINE (84, 71)-(102, 82), 7, BFăG% = G% - 1ăIF G% = -1 THEN G% = 63ăGOSUB CPALăEND IFăIF X% > 105 AND Y% > 70 AND X% < 115 AND Y% < 85 THENăLINE (84, 71)-(102, 82), 7, BFăG% = G% + 1ăIF G% = 64 THEN G% = 0ăGOSUB CPALăEND IFăIF X% > 70 AND Y% > 85 AND X% < 80 AND Y% < 100 THENăLINE (84, 86)-(102, 97), 7, BFăB% = B% - 1ăIF B% = -1 THEN B% = 63ăGOSUB CPALăEND IFăIF X% > 105 AND Y% > 85 AND X% < 115 AND Y% < 100 THENăLINE (84, 86)-(102, 97), 7, BFăB% = B% + 1ăIF B% = 64 THEN B% = 0ăGOSUB CPALăEND IFăăGOTO WAIT4PRESS4ăCPAL:ăCHANGED% = 1ă'Special thanks to David Gilham(SP?) for these EGA extended palette routines!ăOUT &H3C8, CO% 'Selects color to change  \ăOUT &H3C9, R% 'Selects red value         \ăOUT &H3C9, G% 'Selects green value       /ăOUT &H3C9, B% 'Selects blue value       /ăRETURNăEND SUBăăSUB PALIO (F$)ăF$ = F$ + ".pal"ăPALETTEăOPEN F$ FOR APPEND AS #1: CLOSE #1ăOPEN F$ FOR INPUT AS #1ăWHILE NOT (EOF(1))ăINPUT #1, C%, R%, G%, B%ăGOSUB CCPALăWENDăCLOSE #1ăEXIT SUBăăCCPAL:ăOUT &H3C8, C% 'Selects color to change  \ăOUT &H3C9, R% 'Selects red value         \ăOUT &H3C9, G% 'Selects green value       /ăOUT &H3C9, B% 'Selects blue value       /ăRETURNăăăEND SUBăă'This sub used for demo, not needed for mouse callsăSUB Pauseă  PRINT "Press any key to continue..."ă  G$ = INPUT$(1)ă  PRINTăEND SUBăăSUB PLOT (XX%, YY%, X%, Y%)ăMOUSEHIDEăPAINT (XX%, YY%), CO%, 0ăPSET (188 + X%, 6 + Y%), CO%ăMOUSESHOWăEND SUBăăSUB PLOTX (PX%, PY%)ăMOUSEHIDEăN = 4ăGET (PX% - N, PY% - N)-(PX% + N, PY% + N), PLX%ăLINE (PX% - N, PY% - N)-(PX% + N, PY% + N), 0ăLINE (PX% + N, PY% - N)-(PX% - N, PY% + N), 0ăMOUSESHOWăEND SUBăăSUB POPOPS (FUNC%)ăTHEWHOLETHING:ăIF SCREENMODE% = 13 THEN REDIM COVERUP1%(31000)ăIF SCREENMODE% <> 13 THEN REDIM COVERUP1%(13000)ăMOUSEHIDEăGET (1, 1)-(319, 150), COVERUP1%ăBUTTON 1, 1, 319, 150, UPăBUTTON 2, 2, 318, 149, UPăBUTTON 5, 5, 18, 18, DOWN: LINE (6, 6)-(17, 17), 0: LINE (6, 17)-(17, 6), 0ăBUTTON 21, 5, 316, 18, UP: LINE (22, 6)-(315, 17), 9, BFăBUTTON 130, 132, 175, 142, UPăBUTTON 190, 132, 210, 142, UPăBUTTON 178, 132, 188, 142, UPăBUTTON 212, 132, 222, 142, UPăBUTTON 225, 132, 300, 142, UPăFONT "Tools", 24, 9, 7, 0, 15, 0ăREDRAW:ăFONT "PALETTE", 132, 135, 6, 0, 0, 0ăFONT "Screen mode", 227, 135, 6, 0, 0, 0ăa% = 0ăMOUSEHIDEăFOR i% = 5 TO 250 STEP 40ăa% = a% + 1ăBUTTON i%, 20, i% + 38, 50, UPăIF a% = FUNC% THEN BUTTON i%, 20, i% + 38, 50, DOWNăNEXTăFOR i% = 5 TO 175 STEP 40ăa% = a% + 1ăBUTTON i%, 53, i% + 38, 83, UPăIF a% = FUNC% THEN BUTTON i%, 53, i% + 38, 83, DOWNăNEXTăIF SCREENMODE% <> 13 THENăFOR i = 5 TO 235 STEP 15ăC = C + 1ăLINE (i, 85)-(i + 14, 100), C - 1, BFăCS% = 0ăIF C - 1 = CO% THEN CS% = 14ăLINE (i, 85)-(i + 14, 100), CS%, BăNEXTăC = 0ăEND IFăIF SCREENMODE% = 13 THENăFOR a = 0 TO 4ăFOR i = 5 TO 295 STEP 5ăC = C + 1ăIF C > 255 THEN GOTO NXTăLINE (i, 85 + 11 * a)-(i + 5, 96 + 11 * a), C - 1, BFăCS% = 0ăIF C - 1 = CO% THEN CS% = 14ăLINE (i, 85 + 11 * a)-(i + 5, 96 + 11 * a), CS%, BăNXT:ăNEXTăNEXTăEND IFăLINE (7, 21)-(42, 49), 9ăLINE (48, 22)-(80, 48), 4, BăLINE (88, 22)-(120, 48), 14, BFăCOLOR 10: CIRCLE (144, 35), 16ăCOLOR 11: CIRCLE (184, 35), 16: PAINT (184, 35), 11ăLINE (215, 30)-(225, 48), 0, B: LINE (221, 33)-(225, 45), 0, B: PAINT (222, 34), 4, 0ăLINE (215, 30)-(217, 28), 0: LINE (217, 28)-(223, 28), 0: LINE (223, 28)-(225, 30), 0ăLINE (220, 27)-(221, 26), 15, BFăFONT "PAINT", 248, 27, 6, 0, 12, 0ăFONT "DOODLE", 7, 60, 6, 0, 10, 0ăFONT "ZOOM", 53, 60, 6, 0, 9, 0ăFONT "ABC", 90, 60, 6, 0, 1, 0ăFONT "SAVE", 130, 60, 6, 0, 0, 0ăFONT "LOAD", 170, 60, 6, 0, 0, 0ăBUTTON 210, 60, 250, 70, UPăBUTTON 255, 60, 290, 70, UPăBUTTON 210, 72, 290, 82, UPăFONT "EXIT", 215, 62, 6, 0, 0, 0ăFONT "UNDO", 260, 62, 6, 0, 0, 0ăFONT "PRINTER SETUP", 212, 74, 6, 0, 0, 0ăăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăăWAIT4PRESS:ăFONT STR$(THICK%), 188, 136, 6, 0, 0, 0ăMOUSESHOWăMOUSESTATUS LB%, RB%, X%, Y%ăIF LB% = -1 THENăMOUSEHIDEăIF X% > 210 AND Y% > 72 AND X% < 290 AND Y% < 82 THEN PRINTSETUPăIF X% > 210 AND Y% > 60 AND X% < 250 AND Y% < 70 THEN SYSTEMăIF X% > 130 AND Y% > 132 AND X% < 175 AND Y% < 142 THEN PALETTECHANGEăIF X% > 225 AND Y% > 132 AND X% < 300 AND Y% < 142 THENăOSC% = SCREENMODE%ăCHANGESCREENMODEăIF OSC% <> SCREENMODE% THEN FUNC% = 99: EXIT SUBăEND IFăIF X% > 178 AND Y% > 132 AND X% < 188 AND Y% < 142 AND LB% = -1 THENăTHICK% = THICK% - 1ăIF THICK% = 0 THEN THICK% = 1ăBUTTON 190, 132, 210, 142, UPăGOSUB DELAYăGOTO WAIT4PRESSăEND IFăIF X% > 212 AND Y% > 132 AND X% < 222 AND Y% < 142 AND LB% = -1 THENăTHICK% = THICK% + 1ăIF THICK% = 25 THEN THICK% = 24ăBUTTON 190, 132, 210, 142, UPăGOSUB DELAYăGOTO WAIT4PRESSăEND IFăăIF SCREENMODE% <> 13 THENăFOR i = 5 TO 235 STEP 15ăC = C + 1ăIF SCREENMODE% <> 13 AND X% > i AND Y% > 85 AND X% < i + 14 AND Y% < 100 THEN CO% = C - 1ăNEXTăC = 0ăEND IFăC = 0ăIF SCREENMODE% = 13 THENăFOR a = 0 TO 4ăFOR i = 5 TO 295 STEP 5ăC = C + 1ăIF X% > i AND Y% > 85 + 11 * a AND X% < i + 5 AND Y% < 96 + 11 * a THEN CO% = C - 1ăNEXTăNEXTăC = 0ăEND IFăăa% = 0ăIF X% > 5 AND Y% > 5 AND X% < 18 AND Y% < 18 THEN GOTO ABORTIT2ăFOR i% = 5 TO 250 STEP 40ăa% = a% + 1ăIF X% > i% AND Y% > 20 AND X% < i% + 38 AND Y% < 50 THEN LF% = FUNC%: FUNC% = a%ăIF a% = FUNC% THEN BUTTON i%, 20, i% + 38, 50, DOWNăNEXTăFOR i% = 5 TO 170 STEP 40ăa% = a% + 1ăIF X% > i% AND Y% > 53 AND X% < i% + 38 AND Y% < 83 THEN LF% = FUNC%: FUNC% = a%ăIF a% = FUNC% THEN BUTTON i%, 53, i% + 38, 83, DOWNăNEXTăIF FUNC% = 11 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 1: FUNC% = LF%: GOTO THEWHOLETHINGăIF FUNC% = 12 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 2: FUNC% = LF%: GOTO THEWHOLETHINGăIF X% > 255 AND Y% > 60 AND X% < 290 AND Y% < 70 THEN PUT (1, 1), COVERUP1%, PSET: SAVEIT 6: FUNC% = LF%: MOUSESHOW: GOTO THEWHOLETHINGăăMOUSESHOWăGOTO REDRAWăEND IFăGOTO WAIT4PRESSăABORTIT2:ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăMOUSEHIDEăPUT (1, 1), COVERUP1%, PSETăSAVEIT 5ăMOUSESHOWăERASE COVERUP1%ăEXIT SUBăDELAY:ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăRETURNăEND SUBăăSUB PRINTITăRESTORE printcodeăMOUSEHIDEă    REDIM a%(2)ă    DEF SEG = VARSEG(a%(0))ă    FOR i% = 0 TO 2ă       READ d%ă       POKE VARPTR(a%(0)) + i%, d%ă    NEXT i%ă    CALL ABSOLUTE(VARPTR(a%(0)))ă    DEF SEGăMOUSESHOWăEND SUBăăSUB PRINTSETUPăOPEN "DRAWPRNT.STP" FOR APPEND AS #1: CLOSE #1ăOPEN "DRAWPRNT.STP" FOR INPUT AS #1ăWHILE NOT (EOF(1))ăINPUT #1, PRN%ăWENDăCLOSE #1ăIF PRN% = 0 THEN PRN% = 1ăREDIM PR$(18), DRV$(18)ăPR$(1) = "IBM B/W Printer": DRV$(1) = "COLOR1"ăPR$(2) = "IBM RGB Printer": DRV$(2) = "COLOR4"ăPR$(3) = "IBM CMY Printer": DRV$(3) = "COLOR8"ăPR$(4) = "HP PCL Default": DRV$(4) = "HPDEFAULT"ăPR$(5) = "HP Deskjet": DRV$(5) = "DESKJET"ăPR$(6) = "IBM PROprinter": DRV$(6) = "GRAPHICS"ăPR$(7) = "IBM Quietwriter": DRV$(7) = "GRAPHICS"ăPR$(8) = "IBM Graphics WIDE": DRV$(8) = "GRAPHICSWIDE"ăPR$(9) = "HP Laserjet": DRV$(9) = "LASERJET"ăPR$(10) = "HP Laserjet II": DRV$(10) = "LASERJETII"ăPR$(11) = "HP Paintjet": DRV$(11) = "PAINTJET"ăPR$(12) = "HP Quitjet": DRV$(12) = "QUIETJET"ăPR$(13) = "HP Quitjet plus": DRV$(13) = "QUIETJETPLUS"ăPR$(14) = "HP Ruggedwriter": DRV$(14) = "RUGGEDWRITER"ăPR$(15) = "HP Ruggedwriterwide": DRV$(15) = "RUGGEDWRITERWIDE"ăPR$(16) = "IBM Thermal printer": DRV$(16) = "THERMAL"ăPR$(17) = "HP Thinkjet": DRV$(17) = "THINKJET"ăREDIM COVERUP8%(10000)ăGET (18, 18)-(200, 90), COVERUP8%ăBUTTON 18, 18, 200, 90, UPăFONT "TO PRINT MOVE MOUSE OFF SCREEN", 20, 75, 6, 0, 0, 0ăFONT "AND PRESS SHIFT PRNT SCRN", 20, 82, 6, 0, 0, 0ăBUTTON 20, 20, 34, 34, DOWN: LINE (21, 21)-(33, 33), 0: LINE (21, 33)-(33, 21), 0ăBUTTON 36, 20, 198, 34, UP: LINE (37, 21)-(197, 33), 9, BFăFONT "PRINTER SETUP", 38, 22, 6, 0, 15, 0ăBUTTON 30, 40, 40, 55, UPăBUTTON 45, 40, 160, 55, UPăBUTTON 165, 40, 175, 55, UPăBUTTON 70, 58, 110, 68, UPăFONT "OK", 85, 60, 6, 0, 0, 0ăWAIT4PRESS6:ăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăFONT PR$(PRN%), 47, 42, 6, 0, 0, 0ăWENDăIF X% > 70 AND Y% > 58 AND X% < 110 AND Y% < 68 THENăPUT (18, 18), COVERUP8%, PSETăOPEN "DRAWPRNT.STP" FOR OUTPUT AS #1ăWRITE #1, PRN%ăSHELL "GRAPHICS " + DRV$(PRN%) + " /R"ăCLOSE #1ăăEXIT SUBăEND IFăIF X% > 20 AND Y% > 20 AND X% < 34 AND Y% < 34 THEN PUT (18, 18), COVERUP8%, PSET: EXIT SUBăIF X% > 30 AND Y% > 40 AND X% < 40 AND Y% < 55 THENăPRN% = PRN% - 1ăIF PRN% = 0 THEN PRN% = 1ăBUTTON 45, 40, 160, 55, UPăEND IFăIF X% > 165 AND Y% > 40 AND X% < 175 AND Y% < 55 THENăPRN% = PRN% + 1ăIF PRN% = 18 THEN PRN% = 17ăBUTTON 45, 40, 160, 55, UPăEND IFăăăGOTO WAIT4PRESS6ăEND SUBăăSUB SAVEIT (OP%)ăIF OP% = 5 THEN F2$ = "DRAWUNDO": OP% = 1: GOTO UNDOSAVEăIF OP% = 6 THEN F2$ = "DRAWUNDO": OP% = 2: GOTO UNDOSAVEăREDIM COVERUP2%(10000)ăMOUSEHIDEăGET (1, 1)-(202, 55), COVERUP2%ăBUTTON 1, 1, 202, 55, UPăIF SCREENMODE% = 7 OR SCREENMODE% = 9 OR SCREENMODE% = 8 THEN COLOR 15, 7ăLOCATE 2, 2: PRINT "Filename(NO EXTENSION!):"ăCOLOR 9ăREIN:ăLOCATE 3, 2: PRINT "              "ăLOCATE 3, 2: INPUT "", FILENAME$ăF2$ = FILENAME$ăIF LEN(FILENAME$) > 8 THEN GOTO REINăPUT (1, 1), COVERUP2%, PSETăUNDOSAVE:ăMOUSESHOWăIF SCREENMODE% = 7 OR SCREENMODE% = 9 OR SCREENMODE% = 8 THEN COLOR 15, 0ăIF OP% = 3 THENăOPEN "DRAW!PAL.TMP" FOR INPUT AS #2ăOPEN F2$ + ".PAL" FOR APPEND AS #3ăWHILE NOT (EOF(2))ăINPUT #2, RC%, RR%, RG%, RB%ăWRITE #3, RC%, RR%, RG%, RB%ăWENDăCLOSE #2: CLOSE #3ăMOUSESHOWăEND IFăIF OP% = 4 THENăCLOSEăOPEN F2$ + ".PAL" FOR INPUT AS #1ăWHILE NOT (EOF(1))ăINPUT #1, CO%, R%, G%, B%ă'Special thanks to David Gilham(SP?) for these EGA extended palette routines!ăOUT &H3C8, CO% 'Selects color to change  \ăOUT &H3C9, R% 'Selects red value         \ăOUT &H3C9, G% 'Selects green value       /ăOUT &H3C9, B% 'Selects blue value       /ăWENDăCLOSEăMOUSESHOWăEND IFăIF OP% = 1 AND SCREENMODE% = 13 THENăDEF SEG = &HA000ăBSAVE F2$ + ".PIC", 0, 64000ăEND IFăIF OP% = 1 AND SCREENMODE% > 6 AND SCREENMODE% < 13 THEN SCREENIO F2$, 1: EXIT SUBăIF OP% = 2 AND SCREENMODE% = 13 THENăDEF SEG = &HA000ăBLOAD F2$ + ".PIC", 0ăEND IFăIF OP% = 2 AND SCREENMODE% > 6 AND SCREENMODE% < 13 THEN SCREENIO F2$, 0: EXIT SUBăEND SUBăăSUB SAVEPRINTER (PRNTRTYPE%)ăEND SUBăăSUB SCREENIO (F$, flag)ă  DEF SEG = &H40ă  VidMode = PEEK(&H49)ă  PageAddr& = PEEK(&H4E) + PEEK(&H4F) * 256&ă  PageSize& = PEEK(&H4C) + PEEK(&H4D) * 256&ă  IF VidMode = 19 THEN PageSize& = 64000ă  DEF SEGă  SELECT CASE VidModeă    CASE 3, 4, 6   'SCREEN 0,1,2           ă      DEF SEG = &HB800: GOSUB ScreenIO1: DEF SEGă    CASE 13 TO 19  'SCREEN 7 to 13         ă      DEF SEG = &HA000ă      IF VidMode = 19 THENă        GOSUB ScreenIO1ă      ELSEă        FOR p = 0 TO 3ă          IF flag THENă            OUT &H3CE, 4: OUT &H3CF, păBSAVE F$ + ".PL" + LTRIM$(STR$(p)), PageAddr&, PageSize&ă          ELSEă            OUT &H3C4, 2: OUT &H3C5, 2 ^ pă          BLOAD F$ + ".PL" + LTRIM$(STR$(p)), PageAddr&ă          END IFă          IF p = 1 AND VidMode = 15 THEN EXIT FORă        NEXTă      END IFă      DEF SEGă  END SELECTă  EXIT SUBăScreenIO1:                                 ă  IF flag THEN BSAVE F$ + ".SCR", PageAddr&, PageSize&'Goes on above line'-> ELSE BLOAD f$ + ".SCR", PageAddr&ă  RETURNăăEND SUBăăSUB TEXTFONTăREDIM COVERUP7%(10000)ăGET (1, 1)-(318, 60), COVERUP7%ăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăMOUSEHIDEăBUTTON 1, 1, 318, 60, UPăBUTTON 3, 3, 17, 17, DOWN: LINE (4, 4)-(16, 16), 0: LINE (4, 16)-(16, 4), 0ăBUTTON 19, 3, 316, 17, UP: LINE (20, 4)-(315, 16), 9, BFăBUTTON 135, 45, 145, 55, UPăBUTTON 148, 45, 163, 55, UPăBUTTON 166, 45, 176, 55, UPăBUTTON 180, 45, 220, 55, UPăFONT STR$(FONTSIZE%), 145, 48, 6, 0, 0, 0ăFONT "OK", 195, 48, 6, 0, 0, 0ăFONT "Enter text", 22, 6, 6, 0, 15, 0ăIF SCREENMODE% < 10 THEN COLOR CO%, 0ăIF SCREENMODE% > 10 THEN COLOR CO%ăLOCATE 4, 2: PRINT STRING$(38, " ")ăLOCATE 5, 2: PRINT STRING$(38, " ")ăMOUSESHOWăLOCATE 4, 2: LINE INPUT "", DUMMY$ăLOCATE 5, 2: LINE INPUT "", DUMMY$ăFONT "PRESS 'OK' WHEN READY", 5, 50, 6, 0, 12, 0ăMOUSEHIDEăREDIM LINE1%(304, 8)ăREDIM LINE2%(304, 8)ăăFOR XX% = 8 TO 311ăa% = a% + 1ăFOR YY% = 24 TO 31ăB% = B% + 1ăLINE1%(a%, B%) = POINT(XX%, YY%)ăNEXTăB% = 0ăNEXTăa% = 0: B% = 0ăFOR XX% = 8 TO 311ăa% = a% + 1ăFOR YY% = 32 TO 39ăB% = B% + 1ăLINE2%(a%, B%) = POINT(XX%, YY%)ăNEXTăB% = 0ăNEXTăăOX% = X%: OY% = Y%ăăăWAIT4PRESS5:ăMOUSESHOWăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăFONT STR$(FONTSIZE%), 145, 48, 6, 0, 0, 0ăWENDăMOUSEHIDEăIF X% > 3 AND Y% > 3 AND X% < 17 AND Y% < 17 THEN PUT (1, 1), COVERUP7%, PSET: EXIT SUBăIF X% > 180 AND Y% > 45 AND X% < 220 AND Y% < 55 THEN GOTO PRINTFONTăIF X% > 135 AND Y% > 45 AND X% < 145 AND Y% < 55 THENăFONTSIZE% = FONTSIZE% - 2ăIF FONTSIZE% < 0 THEN FONTSIZE% = 1ăBUTTON 148, 45, 163, 55, UPăGOTO WAIT4PRESS5ăEND IFăăIF X% > 166 AND Y% > 45 AND X% < 176 AND Y% < 55 THENăFONTSIZE% = FONTSIZE% + 2ăIF FONTSIZE% > 23 THEN FONTSIZE% = 23ăBUTTON 148, 45, 163, 55, UPăGOTO WAIT4PRESS5ăEND IFăăGOTO WAIT4PRESS5ăăăPRINTFONT:ăS% = FONTSIZE% - 1ăa% = 0: B% = 0ăMOUSEHIDEăPUT (1, 1), COVERUP7%, PSETăFOR X = 8 TO 311ăa% = a% + 1ăFOR Y = 24 TO 31ăB% = B% + 1ăIF LINE1%(a%, B%) = 0 THEN GOTO NXT2ăi = S%ăIF i > 1 THEN LINE (OX% + a% * i, OY% + B% * i)-(OX% + a% * i + S%, OY% + B% * i + S%), LINE1%(a%, B%), BFăIF i < 3 THEN PSET (OX% + a%, OY% + B%), LINE1%(a%, B%)ăIF i > 1 THEN LX% = a% * iăIF i < 3 THEN LX% = a%ăNXT2:ăNEXTăB% = 0ăNEXTăa% = 0: B% = 0ăOX% = OX% + LX%ăFOR X = 8 TO 311ăa% = a% + 1ăFOR Y = 24 TO 31ăB% = B% + 1ăIF LINE2%(a%, B%) = 0 THEN GOTO NXT3ăi = S%ăLX% = LX% + 1ăIF i > 1 THEN LINE (OX% + a% * i, OY% + B% * i)-(OX% + a% * i + S%, OY% + B% * i + S%), LINE2%(a%, B%), BFăIF i < 3 THEN PSET (OX% + a%, OY% + B%), LINE2%(a%, B%)ăNXT3:ăNEXTăB% = 0ăNEXTăăMOUSESHOWăăEND SUBăăSUB WARN (RETURN.CODE%)ăREDIM WARNING%(6000)ăGET (20, 20)-(140, 80), WARNING%ăMOUSEHIDEăBUTTON 20, 20, 140, 80, UPăBUTTON 22, 22, 35, 35, DOWN: LINE (23, 23)-(34, 34), 0: LINE (23, 34)-(34, 23), 0ăBUTTON 37, 22, 138, 35, UP: LINE (38, 23)-(137, 34), 9, BFăFONT "WARNING", 39, 25, 6, 0, 15, 0ăFONT "Changing screen", 25, 38, 6, 0, 0, 0ăFONT "modes means lose", 25, 45, 6, 0, 0, 0ăFONT "PICTURE", 25, 51, 6, 0, 0, 0ăBUTTON 27, 67, 70, 77, UPăBUTTON 73, 67, 113, 77, UPăFONT "PROCEED", 29, 70, 6, 0, 0, 0ăFONT "CANCEL", 75, 70, 6, 0, 0, 0ăMOUSESHOWăWAIT4PRESS3:ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăIF X% > 27 AND Y% > 67 AND X% < 70 AND Y% < 77 THEN RETURN.CODE% = 0: EXIT SUBăIF X% > 73 AND Y% > 67 AND X% < 113 AND Y% < 77 THEN RETURN.CODE% = 1: EXIT SUBăIF X% > 22 AND Y% > 22 AND Y% < 35 AND Y% < 35 THEN RETURN.CODE% = 0: EXIT SUBăGOTO WAIT4PRESS3ăEND SUBăăSUB ZOBJ (SEL%)ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN EXIT SUBăIF RB% = -1 THEN EXIT SUBăWENDăăFOR XX% = 5 TO 180 STEP 5ăa% = a% + 1ăFOR YY% = 20 TO 145 STEP 5ăB% = B% + 1ăIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%: GOTO FOUNDITăNEXTăB% = 0ăNEXTăFOUNDIT:ăOX% = a%: OY% = B%ăa% = 0: B% = 0: X% = 0: Y% = 0: XX% = 0: YY% = 0ăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăăFOR XX% = 5 TO 180 STEP 5ăa% = a% + 1ăFOR YY% = 20 TO 145 STEP 5ăB% = B% + 1ăIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%: GOTO FOUNDIT2ăNEXTăB% = 0ăNEXTăFOUNDIT2:ăăIF SEL% = 1 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%ăIF SEL% = 2 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%, BăIF SEL% = 3 THEN LINE (188 + OX%, 6 + OY%)-(188 + a%, 6 + B%), CO%, BFăăX% = 188: Y% = 6ăMOUSEHIDEăREDIM ZOOMM(35, 25)ăFOR CAPX = 1 TO 35ăFOR CAPY = 1 TO 25ăZOOMM(CAPX, CAPY) = POINT(X% + CAPX, Y% + CAPY)ăNEXTăNEXTăăFOR X = 5 TO 175 STEP 5ăXX = XX + 1ăFOR Y = 20 TO 140 STEP 5ăYY = YY + 1ăPAINT (X + 1, Y + 1), ZOOMM(XX, YY), 0ăPSET (188 + XX, 6 + YY), ZOOMM(XX, YY)ăNEXTăYY = 0ăNEXTăMOUSESHOWăăEND SUBăăSUB ZOOMăIF ZOOMHELP = 1 THENăREDIM HELP%(15000)ăMOUSEHIDEăGET (1, 1)-(200, 100), HELP%ăBUTTON 1, 1, 200, 100, UPăBUTTON 2, 2, 199, 99, UPăBUTTON 4, 4, 18, 18, DOWN: LINE (5, 5)-(17, 17), 0: LINE (5, 17)-(17, 5), 0ăBUTTON 20, 4, 197, 18, UP: LINE (21, 5)-(196, 17), 9, BFăFONT "ZOOM Instructions", 22, 9, 6, 0, 15, 0ăFONT "To disable these instructions", 6, 20, 6, 0, 4, 0ăFONT "set the CONSTant ZOOMHELP to 0", 6, 26, 6, 0, 4, 0ăFONT "Using ZOOM is easy. To ZOOM into", 6, 35, 6, 0, 10, 0ăFONT "a specific region use the mouse", 6, 41, 6, 0, 10, 0ăFONT "to select the upper-right corner", 6, 47, 6, 0, 10, 0ăFONT "of that area. DRAW! will capture", 6, 53, 6, 0, 10, 0ăFONT "34x25 pixels from that point", 6, 59, 6, 0, 10, 0ăDO WHILE INKEY$ = ""ăMOUSESHOWăMOUSESTATUS LB%, RB%, X%, Y%ăIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN EXIT DOăLOOPăMOUSEHIDEăPUT (1, 1), HELP%, PSETăERASE HELP%ăMOUSESHOWăEND IFăăLB% = -1ăWHILE LB% = -1ăMOUSESTATUS LB%, RB%, X%, Y%ăWENDăLB% = 0ăWHILE LB% = 0ăMOUSESTATUS LB%, RB%, X%, Y%ăIF RB% = -1 THEN EXIT SUBăWENDăXXX% = X%: YYY% = Y%ăMOUSEHIDEăREDIM COVERUP3%(14000)ăREDIM COVERUP4%(5000)ăGET (187, 5)-(225, 33), COVERUP4%ăGET (2, 2)-(183, 151), COVERUP3%ăREDIM ZOOMM(35, 25)ăFOR CAPX = 1 TO 35ăFOR CAPY = 1 TO 25ăZOOMM(CAPX, CAPY) = POINT(X% + CAPX, Y% + CAPY)ăNEXTăNEXTăBUTTON 2, 2, 183, 151, UPăBUTTON 187, 5, 225, 33, UPăBUTTON 4, 4, 18, 18, DOWN: LINE (5, 5)-(17, 17), 0: LINE (5, 17)-(17, 5), 0ăBUTTON 20, 4, 181, 18, UP: LINE (21, 5)-(180, 17), 9, BFăFONT "ZOOM EDITOR", 23, 8, 6, 0, 15, 0ăFOR X = 5 TO 180 STEP 5ăLINE (X, 20)-(X, 145), 0ăNEXTăFOR Y = 20 TO 145 STEP 5ăLINE (5, Y)-(180, Y), 0ăNEXTăFOR X = 5 TO 175 STEP 5ăXX = XX + 1ăFOR Y = 20 TO 140 STEP 5ăYY = YY + 1ăPAINT (X + 1, Y + 1), ZOOMM(XX, YY), 0ăPSET (188 + XX, 6 + YY), ZOOMM(XX, YY)ăNEXTăYY = 0ăNEXTăMOUSESHOWăIN02:ăMOUSESTATUS LB%, RB%, X%, Y%ăa% = 0: B% = 0ăIF LB% = -1 AND X% > 4 AND Y% > 4 AND X% < 18 AND Y% < 18 THEN GOTO ABORTIT3ăIF RB% = -1 THENăPOPOPS ZFUNC%ăMOUSESHOWăEND IFăIF ZFUNC% > 0 AND ZFUNC% < 6 THEN ZOBJ ZFUNC%ăIF LB% = -1 AND ZFUNC% = 0 THENăFOR XX% = 5 TO 175 STEP 5ăa% = a% + 1ăFOR YY% = 20 TO 140 STEP 5ăB% = B% + 1ăIF X% > XX% AND Y% > YY% AND X% < XX% + 5 AND Y% < YY% + 5 THEN PLOT X%, Y%, a%, B%ăNEXTăB% = 0ăNEXTăEND IFăGOTO IN02ăABORTIT3:ăMOUSEHIDEăREDIM EDITED%(5000)ăGET (189, 7)-(223, 31), EDITED%ăPUT (187, 5), COVERUP4%, PSETăPUT (2, 2), COVERUP3%, PSETăPUT (XXX% + 1, YYY% + 1), EDITED%, PSETăERASE EDITED%ăERASE COVERUP4%ăERASE COVERUP3%ăMOUSESHOWăEND SUBăJames Tonn                     TILE GRAPHICS                  www.geocities.com/SiliconVally/08/94 (00:00)          QB, QBasic, PDS        306  13876    TILEEX.BAS  'This is a small program using tile graphics. This source code is the propertyă'of James Tonn. You may modify this source code and use it in your ownă'programs. You may use it in a written publication provided that it is notă'altered, and that you give credit to the author (James Tonn).ă'I hope this code will help you in your programming.ă'   -Jimmy Tonn 8/94ă'   sltonn@phoenix.princeton.eduă'   sltonn@eden.rutgers.eduă'   jtonn@nerc1.nerc.comă'   75022.401@compuserve.comăăDEFINT A-Z  'declare all variables starting with a through z as integersăSCREEN 13   'set screen mode 13, 320x200x256ăCLS         'clear screenăăRESTORE world   'restore data pointer so all data reading starts after labelă                ' "world"ăăCONST ACROSS = 11 'this is the number of across tiles that will appear onă                  'the screen at a time, the total number of across tilesă                  'is stored in the variable tacrossăCONST DOWN = 11   'number of down tiles on screen... total down tiles areă                  'stored in tdownăăDIM blankimg(116) 'create an array for the blank tileă                  'this tile will be totally black, all zero'săDIM grassimg(116) 'create an array for the grass tile's image, 116 bytesăDIM treeimg(116)  'create an array for the tree tile's image, 116 bytesăDIM playerimg(116)'create as array for the player tile's image, 116 bytesăăREAD tacross, tdown  'get these values from the big data block "world"ă                     'at the end of this programăăTYPE tiletype          'create a type called tiletypeă    x AS INTEGER       'the tile's x pixel coordă    y AS INTEGER       'the tile's y pixel coordă    style AS INTEGER   'the tile's styleăEND TYPEăăDIM tile(tacross, tdown) AS tiletype 'declare array "tile" as tiletypeăăTYPE playertype  'create a type called playertypeă    x AS INTEGER 'x tile where the player isă    y AS INTEGER 'y tile where the player isă    px AS INTEGER 'the players "permanant" x tile, the tile that he appearsă                  'in out of the tiles on the screenă    py AS INTEGER 'the players "permanant" y tileăEND TYPEăăDIM player AS playertype 'declare the variable player as a playertypeăăREAD player.x, player.y  'read player x and y coords from data block "world"ăplayer.px = 6ăplayer.py = 6ăăDEF FNSetlocs    'function to set pixel locs of tiles that appear on screenă   FOR a = 1 TO ACROSSă      FOR d = 1 TO DOWNă         tile(a, d).x = 15 * a  'set pixel x location of tileă         tile(a, d).y = 15 * d  'set pixel y location of tileă      NEXT d                    '(all tiles are 15x15 pixels)ă   NEXT aăEND DEFăăDEF FNSetAtts   'function to read the styles of all tiles from data blockă   FOR d = 1 TO tdownă      FOR a = 1 TO tacrossă         READ tile(a, d).style 'read the tile's styleă      NEXT aă   NEXT dăEND DEFăăă'this next routine draws the tile on the screenă'the tx and ty variables are the tile numbers out of all the tilesă'the cx and cy variables are locations of the tile spaces where the tilesă'will be displayed on the screenăDEF FNDrawTile (tx, ty, cx, cy)ă    SELECT CASE tile(tx, ty).style  'check the tile's styleă          CASE 0  'if it's 0, draw an array of zero's (a black tile)ă              PUT (tile(cx, cy).x, tile(cx, cy).y), blankimg, PSETă          CASE 1  'if it's 1, draw the grass tileă              PUT (tile(cx, cy).x, tile(cx, cy).y), grassimg, PSETă          CASE 2  'if it's 2, draw the tree tileă              PUT (tile(cx, cy).x, tile(cx, cy).y), treeimg, PSETă    END SELECTăEND DEFăă'this draws all the visible tiles on the screenă'it will draw from 5 tiles to the left of the player to 5 tiles to his rightă'and from 5 tiles up to 5 tiles downăDEF FNDrawScreenă   FOR rela = -5 TO 5ă      FOR reld = -5 TO 5ă           dummy = FNDrawTile(player.x + rela, player.y + reld, player.px + rela, player.py + reld)ă      NEXT reldă   NEXT relaăEND DEFăă'this function draws the player on the screen in his "permanant" locationăDEF FNDrawPlayeră   PUT (tile(player.px, player.py).x, tile(player.px, player.py).y), playerimg, PSETăEND DEFăăDEF FNDisplayImg 'this function will read an images colors from a data blockă                 'and display the image on the screen. Before calling thisă                 'function, reset the data pointer to the beginning of theă                 'data block for the image.ă   FOR dp = 1 TO 15ă      FOR ap = 1 TO 15ă         READ att                     'read the value at the point in the data blockă         PSET (ap + 10, dp + 10), att 'put the pixel on the screen with theă                                      'color that was read from the dataă                                      'blockă      NEXT apă   NEXT dpăEND DEFăă'* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *ă' * * * * * * * * * * * * End of Function Defs* * * * * * * * * * * * * *ăădummy = FNSetlocs   'set the locations for the on-screen tilesădummy = FNSetAtts   'set the styles for all the tilesăăGET (11, 11)-(25, 25), blankimg 'get an array that is all zero's, which willă                                'the black tile that we put around the edgesă                                'of the map. No data reading is needed sinceă                                'the screen is already totally black. Allă                                'we need to do is grab a block.ăăRESTORE grassdata   'restore the data pointer to the beginning of the dataă                    'block that stores the grass tile's image. If you'reă                    'reseting the data pointer to load the images, do ită                    'after calling FNSetLocs and FNSetAtts, because theyă                    'need the data pointer in a certain placeădummy = FNDisplayImg  'call routine to read and display the imageăGET (11, 11)-(25, 25), grassimg 'get the image into array "grassimg"ăPUT (11, 11), grassimg, XOR     'put image over existing one to clear ităăRESTORE treedata 'restore data pointer to beginning of the tree tile's imageădummy = FNDisplayImg 'read and display the imageăGET (11, 11)-(25, 25), treeimg  'get the image into array "treeimg"ăPUT (11, 11), treeimg, XOR  'put image on top of the old one to clear ităăRESTORE playerdata 'restore pointer to beginning of player tile's imageădummy = FNDisplayImg 'read and display the imageăGET (11, 11)-(25, 25), playerimg  'get the image into array "playerimg"ăPUT (11, 11), playerimg, XOR  'put image on top of the old one to clear ităădummy = FNDrawScreen  'draw the screen onceădummy = FNDrawPlayer  'draw the player onceăăăDOă  kbd$ = INKEY$            'get a "transparent" inpută  IF kbd$ <> "" THEN       'if there actually was a user input, then...ă    kbd$ = RIGHT$(kbd$, 1) 'get the first byte of the input (this is neededă                           'if you want to look for input from the cursoră                           'keys)ă    SELECT CASE kbd$ă          CASE CHR$(27)    'user pressed escape keyă              END          'end the programă          CASE CHR$(72) 'user pressed up arrowă              IF tile(player.x, player.y - 1).style <> 2 THENă              '^^^ check if the tile the player is about to move into isă              'already occupied by a tree.ă              'if you check for a tree, you really don't need to check ifă              'the player is going to go past the line of trees at theă              'edge with the other method, because if you check for a tree,ă              'it will stop you before you go past the line anyway I justă              'added them both in case the reader wanted to use a certaină              'method for some reason.ă               ă                IF player.y - 1 > 5 THEN     'make sure he doesn't go pastă                                             'the line of trees. You willă                                             'probably have to change thisă                                             'number around if you change theă                                             'player's view screen sizeă                  player.y = player.y - 1    'decrease player y tile by oneă                END IFă                dummy = FNDrawScreen       'draw the screenă                dummy = FNDrawPlayer       'put the player on the screenă              END IFă          CASE CHR$(80) 'user pressed down arrowă              IF tile(player.x, player.y + 1).style <> 2 THENă              '^^^ check if the tile the player is about to move into isă              'already occupied by a tree.ă                IF player.y + 1 < (tdown - 5) THEN 'keep player on screenă                  player.y = player.y + 1    'increase player y tile by oneă                END IFă                dummy = FNDrawScreen       'draw the screenă                dummy = FNDrawPlayer       'put the player on the screenă              END IFă          CASE CHR$(75) 'user pressed left arrowă              IF tile(player.x - 1, player.y).style <> 2 THENă              '^^^ check if the tile the player is about to move into isă              'already occupied by a tree.ăă                IF player.x - 1 > 5 THEN   'keep player on screenă                  player.x = player.x - 1    'decrease player x tile by oneă                END IFă                dummy = FNDrawScreen       'draw the screenă                dummy = FNDrawPlayer       'put the player on the screenă              END IFă          CASE CHR$(77) 'user pressed right arrowă              IF tile(player.x + 1, player.y).style <> 2 THENă              '^^^ check if the tile the player is about to move into isă              'already occupied by a tree.ăă                IF player.x < (tacross - 6) THEN  'keep player on screenă                  player.x = player.x + 1    'increase player x tile by oneă                END IFă                dummy = FNDrawScreen       'draw the screenă                dummy = FNDrawPlayer       'put the player on the screenă              END IFă    END SELECTă  END IFăLOOP        'restart the main loopăăăworld:ăăDATA 30,30ăDATA 15,15ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,2,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,2,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,2,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,0,0,0,0ăDATA 0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăăgrassdata:ăDATA 0,0,0,0,2,0,0,0,148,0,0,2,0,0,0ăDATA 0,2,0,0,0,0,0,0,0,0,0,0,0,0,141ăDATA 0,0,0,0,142,0,0,2,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,2,0,0ăDATA 0,2,0,2,0,145,0,0,0,142,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,2,0,0,0,0,0,2ăDATA 0,0,0,142,0,0,0,0,0,0,0,2,0,0,0ăDATA 0,2,0,0,0,142,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,0,0,0,2,0,0,147,0,0ăDATA 0,142,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,2,0,0,142,0,0,2,0,0,0,2,0ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 2,0,0,0,0,145,0,2,0,0,0,0,2,0,0ăDATA 0,0,0,2,0,0,0,0,0,0,0,0,0,0,142ăDATA 145,0,0,0,147,0,0,0,2,0,0,2,0,0,0ăătreedata:ăDATA 0,0,0,2,2,2,2,2,2,2,2,0,0,0,0ăDATA 0,0,2,2,2,2,2,2,2,2,2,2,0,0,0ăDATA 0,6,2,2,2,2,2,2,2,2,2,6,0,0,0ăDATA 0,2,6,2,2,2,2,2,2,2,6,2,0,0,0ăDATA 0,2,2,6,2,2,2,2,2,6,2,2,0,0,0ăDATA 0,0,2,2,6,2,2,2,6,2,2,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,6,6,6,0,0,0,0,0,0,0ăDATA 0,0,0,0,6,6,6,6,6,0,0,0,0,0,0ăDATA 0,0,0,6,6,6,6,6,6,6,0,0,0,0,0ăăplayerdata:ăDATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0ăDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0ăDATA 0,0,0,0,0,0,7,7,7,0,0,0,1,0,0ăDATA 0,0,0,0,0,0,0,7,0,0,0,0,1,0,0ăDATA 0,0,0,0,0,0,0,7,0,0,0,0,1,0,0ăDATA 0,2,0,2,0,0,0,7,0,0,0,1,1,1,0ăDATA 0,2,2,7,7,7,7,7,7,7,7,7,7,0,0ăDATA 0,2,2,2,0,0,0,7,0,0,0,0,1,0,0ăDATA 0,0,2,0,0,0,0,7,0,0,0,0,1,0,0ăDATA 0,0,0,0,0,0,0,7,0,0,0,0,0,0,0ăDATA 0,0,0,0,0,0,7,0,7,0,0,0,0,0,0ăDATA 0,0,0,0,0,7,0,0,0,7,0,0,0,0,0ăDATA 0,0,0,0,7,0,0,0,0,0,7,0,0,0,0ăDATA 0,0,0,7,0,0,0,0,0,0,0,7,0,0,0ăăMichael J. Kelly               SMALL FONT (8X8 SANS SERIF)    QBTIPS_?.DOC                   07-06-92 (08:03)       QB, PDS                52   3395     SMLFONT.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SMLFONT.ZIP",4^6:Z&=2268:?STRING$(50,177);ăU"%up()%9%%%R-%KEAaEsZ%dmc)%%%%-%%%0%%%%xr%qkts%ySks[yrzF,9]k5%SAăU"uSZ;o*08U=;c[e8h%MRgPL;V+oI&?uS2QjB8WQK/>H%*deSDHUQWL1CA7K5\2gqăU"0gLqf+=n5gGW%7XO.O*BsNzD5DvDzSX71jpd=WX]W]\%tVN\Y:q[*NY]b17[)<răU":P[_G3.YiyQ+:JUa''EduP(8L*SfY%=ZX88,.2l.D]v;g)V4,PthA9H3ZMs[HMFăU"DMDtMwL736L&cUceh=i(F,ePEPC?i1WZ<1(7Do92wN1XyLNI6vd;[Pr>H0mq6%qăU"<ckAfJ;5Ht2W.]BUwHEPpm&*KXQV/<()Ix4fn#10jB54#CjK'<l&OsB7=H-V^6făU"FVT-[hoKA,t:(tTNSO\ZayAy:^tVzyKY0iMK8cN^uOT%up)OtCHPNs&2io+AKfRăU"ZZw=6t+>m_.7+InHv:ZCc&j]5?$t.DLmx;9tQl2SdzTJ6Ya((<DJ7>T4Q0qNtZvăU"1OPengi#\>/%q[%6lhX=0Z&>rI+D6LMT$##Xc5Za4-Y64B-e0BLtA=&%cXN0kQ+ăU"Fbk2QAc&TQDWS3&kL^a%x9\Ub78NcRW&<)k6^[l?sg7G:76iTp^8:a3Zl(l#5W1ăU"/^H=/??pj.-s5N/N\X:\*^qI[,a&=QP#iHEpe%u,_w6-8<;onym)r_5tR8i9]lvăU"^1c>j]IP]PL;Y$x3IhU1-$t[<pF,m\lSl>H[?=)-&I,/]oFRE(p;kinJJc#jxC4ăU"eKf6Zv.xj:n9SK5:a'lQ&8jR1kSw$eqVMYTt=2%\$%.BSZdIVNqJi:66LIs/x\WăU".Q)aAb-;^iEnn[-:#O9s/p(]_Y$mw,0aO,j6=)T_2lq4S.ICV$<]J>*]29&dQ4LăU"tE.j,[Q/kW+Orj7u$oOUDDU\ceU9V-.RYNlLd.JTP)gm5h1<gG==pF.hk;2bnolăU"NECbFRPzko4><OAS96#vLy0MKc'ob1l/$]eXgqHNcixAGpyxM<9>a>z+IxI&jfiăU"w8Ih0SO]O.DtUroKgp*PFL2W?K]Npy4H+I7Bla'0P&kKQmOKZ-GLlolV(*KWG'oăU",c^\c%jjmufh\nr<n\.rw4v=b^s'3<m5ub'Y*4#_YQLw=p?u.W)iafG[#DN#V;băU"xj)3sx+iqo2#xxqKn#=m-bm1LBS^XJNVuf+:8xls8_\I+stcOH=nnfq5<GK/[aIăU"8KrP0+f1;'YV8rj^a]o,dD-gc[IM-]h9<'D2.iaDY^:LvQ8\TI6x=$I&;fGYBkLăU"iYPTmI>+_dW'QER2VVV0EEFeRWZN2$HleZfkZgt%7v7Uzf?apx.yHDib=6k6S3^ăU"\yr>?hSGyYG2WYhE&<s,maJnVlJ6w(/WEnC]j'6;'Am5F51P$2ft[3luLLI2Kc-ăU"$rlxcG&>x&7<uM#zoJO=c<xu%p()9%%%%-I%rFaXE*[s-G?(%%%I.%%%/%%%%xrăU"q%ksyS[gfx&e%rB[7]56x<>NaG'R.y^s)k.EA04+3*;[V98EwBvQ/^oYQ8?a6l;ăU"8..\[..WXqfOAs%Ucp6m3.p]^X%i.[1QQ,39*uoqvkY(*7?gTA02Te_J(8RooRzăU")SS.fJn:q/#yW&Au<S&,#MpJcVQT)0X*d0*dO+zK_^H%L(Qpa*&N00Ce;MZZn*DăU"7,a]W?iu$>f>]Ppq/7X?;TIS\?0#P^nQ171mWrAAB,Z-Vkm\%)/oFQ0^Jb;0%aAăU"zw4u:0B#HXX+?g'X50?)108[^d].W2O<Wj(VL;D6l=#CC$Y66^/'?o\;oK/o2KYăU"W2^0mo/%94S:DpD4(5UWn4bN\Uf9dKeo6L:';9>3b*]nQBEPRjeDAh:mfCdT8,oăU"lUX:$wc1aib0BA4N>;Q,+OWcwE/')mqW2mO<YL9H>A11gucL_7,wf[)Mrfb=4/XăU">=2=K#84Ku4pW8fSABMY+1aQKuc0SK;%C[4kto5iJek]fu((oD$=En.9cc2Cn(yăU"&'O[(i<2xvh'sNCNkC$PTFNPr:rdK$VZ*7yZ8+q;tC0+17m&BzEi,y)8bGq[%NtăU"29a1+PcX'eNPh1R-[-O;=kv'>nDW&6kOOf.HWpT(q(xU?Qi$26;iw+pVr>7I/Q7ăU">bE,XsGSB2R-Jd-UKh\5m3:cZaDu*5(Q;]UvZHfOARjAaW^I]wRWpxaOr.+<U5(ăU"VJ]SUL<Em0((a9>55JV+N><He2hE&(Lh(ksoI.em$mw*h_l4N$2X]lv9pMW2vVpăU"=CT<njkYC7E9PdkWt^K,4nL_;aF_G=FwIFYQ+OS')B*tkpz[4)r&t\nOR#zyF>HăU"BBWvsDx)/gPvbddNBu,L'6?-3NwUthOz-T>GA\IOeA(gDptm-[5O.bH-re8%EZlăU"1^:/pXx?a&uA/vX:pbzX7l^=#]A1iSKXhEcD8$'PD7\Va%GF?.6NTCig9JUgRwEăU",<%5-xFK7g346Y70'5&Ytupk_/;&Bq:$#wn)f[=r[l0l09R=Jr#+;5MchszX;2YăU"wXkPJiweefvS#)dvoopgB1UCVD,Jdbqw5U,Bfah(&mo=cK%Wb]PTOGqTFx4D,LRăU"1^]Q^&lCHdo>CUaNCkPP>3sd2d$V<tIR4URt2#(ws\#(GK:z<y/IHA;riW,[Ml2ăU"RNG3I+\\F+ff*INRvbn's$jXB%:p=c27/[E0n2%;F\-sv=TqXNv?sVR6:TIyXWDăU"Qu'c&.a'W#XTC5c_g5u%2up&%'9%9%%%%-O%KEa.EsZd%mc)%%%%-%%%0%%%%%%ăU"%%%%%E%%%%%%%%%x%rqkt%sySk%syup%&'9%%9%%%#-%rFnaE*[>sG?(%%%I.%%ăU"%/%%%%%%%%%&%%E%%%&6)%%%xrqk%sySg%fxup%*+%%%%%'%.'%#%%%%z-%%%%%ăEND SUBăCLOSE:IF S=59AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăEarl L. Montgomery             VESA MANDELBROT                FidoNet QUIK_BAS Echo          04-17-96 (22:32)       QB, PDS                135  4270     VESABROT.BAS' Here is a VESA high resolution Mandelbrot program. It allowsă' you to choose the mode. You can let the computer pick the values oră' you can enter them yourself. For testing I recommend you select <N>ă' when prompted and enter the following yourself:ăă' acorner -.114ă' bcorner -.917ă' side .017ăă' On my 486/50 it takes about 12 minutes to complete. I think it looksă' like multiple tornado funnels with multiple lightning strikes.ăă' BTW this is if you choose #1. 640x400x256ăă' When the screen is filled you will hear a beep and you can exit oră' run it again by pressing the space bar twice. Or if you have the TSRă' GRABBER that can be found on most BBSs you can save the screenă' to an executable file by pressing CNTRL= then <ENTER>. When youă' exit to dos you can view the saved screen by simply typingă' SCREEN00 at the DOS prompt. The loading takes less than a sec!ăă' To run this program you must have a VESA compatiable graphică' card/chip <SVGA>. Or if your SVGA card/chip is not VESAă' compatiable you can run it provided you have a VESA TSR loaded.ăă' P.S. If you let the computer pick the values or even if you enter theă' values and nothing appealing is being put on the screen you cană' press the space bar and you will be prompted to EXIT or RUNă' again.ăă' Let me know if you have problems. Enjoy!ăă '$INCLUDE: 'qb.bi'ă DIM inreg AS RegTypeă DIM outreg AS RegTypeă DEFDBL A-Ză RANDOMIZE TIMERă KEY(10) ONă ON KEY(10) GOSUB endofprogramă CLS : LOCATE 12, 30: COLOR 14: PRINT "WELCOME TO VESABROT"ă LOCATE 14, 23: PRINT "Brought to you by Earl Montgomery"ă SLEEP (2)ămakeselection:ă CLSă LOCATE 1, 1ă PRINT "1. 640x400x256"ă PRINT "2. 640x480x256"ă PRINT "3. 800x600x256"ă PRINT "4. 1024x768X16"ă PRINT "5. 1024x768x256"ă PRINT : INPUT "Select mode"; m%ă IF m% < 1 OR m% > 5 THEN BEEP: GOTO makeselectionă CLSă INPUT "Let the computer select values <Y/N>"; q$ă q$ = UCASE$(q$)ă IF q$ = "Y" THEN CLS : GOTO randomselectă INPUT "Acorner "; aă acorner = aă INPUT "Bcorner "; bă bcorner = bă INPUT "Side "; să side = să GOTO startărandomselect:ă acorner = (RND * 5 - 2)ă IF acorner > 2 THEN GOTO randomselectă IF acorner < -2 THEN GOTO randomselectăbcornerselect:ă bcorner = (RND * 5 - 2)ă IF bcorner > 2 THEN GOTO bcornerselectă IF bcorner < -2 THEN GOTO bcornerselectăsideselect:ă side = (RND * 5 - 2)ă IF side > 2 THEN GOTO sideselectă IF side < -2 THEN GOTO sideselectăstart:ă maxdwell = 150ă inreg.ax = &H4F02ă IF m% = 1 THEN inreg.bx = &H100ă IF m% = 2 THEN inreg.bx = &H101ă IF m% = 3 THEN inreg.bx = &H103ă IF m% = 4 THEN inreg.bx = &H104ă IF m% = 5 THEN inreg.bx = &H105ă CALL interrupt(&H10, inreg, outreg)ă IF m% = 4 THEN numcolors = 16:  ELSE numcolors = 256ă IF m% = 1 THEN numrows = 399ă IF m% = 2 THEN numrows = 479ă IF m% = 3 THEN numrows = 599ă IF m% = 4 OR m% = 5 THEN numrows = 767ă IF m% = 1 OR m% = 2 THEN numcols = 639ă IF m% = 3 THEN numcols = 799ă IF m% = 4 OR m% = 5 THEN numcols = 1023ă yoffset = 1: xoffset = 1ă highdwell = 0ă gap = side / numrowsă ac = acorneră FOR x = xoffset TO numcols - 1 + xoffsetă ac = ac + gap: bc = bcorneră FOR y = yoffset TO numrows - 1 + xoffsetă bc = bc + gapă az = 0: bz = 0: count% = 0: size = 0ă WHILE (size < 4) AND (count% < maxdwell)ă temp = az * az - bz * bz + acă bz = 2 * az * bz + bcă az = temp: size = az * az + bz * bză count% = count% + 1ă WENDă IF (count% < maxdwell) AND (count% > highdwell) THEN highdwell = count%ă IF count% <> maxdwell THEN GOSUB setpixelcoloră i$ = INKEY$ă IF i$ = CHR$(32) THEN GOTO restartă NEXT: NEXTă BEEPăwait1:ă i$ = INKEY$ă IF i$ = CHR$(32) THEN GOTO endofprogram:  ELSE GOTO wait1ăsetpixelcolor:ă c = count% MOD (numcolors - 1) + 1ă cc = &HC00 + c: z = numrows - y + 1ă inreg.ax = cc: inreg.bx = 0: inreg.cx = x: inreg.dx = ză CALL interrupt(&H10, inreg, outreg)ă RETURNăendofprogram:ă SLEEP (500)ă inreg.ax = &H3: CALL interrupt(&H10, inreg, outreg)ă CLS : LOCATE 1, 1ă INPUT "[R]un again or [E]xit to DOS"; q$ă q$ = UCASE$(q$)ă IF q$ = "R" THEN RUNă CLS : LOCATE 14, 23: PRINT "Make sure you rename any saved files!"ă SLEEP (2): SCREEN 0: CLS : ENDărestart:ă inreg.ax = &H3ă CALL interrupt(&H10, inreg, outreg)ă RUNăJoshua Dickerson               SPRITE(BITMAP) EDITOR          FidoNet QUIK_BAS Echo          04-23-96 (21:25)       QB, QBasic, PDS        124  2973     BITMAP.BAS  '    Here is a simple bitmap editor i wrote to aid in the design of my games..ă'You start out in zoom mode where you can edit individual pixils of youră'bitmap, and as soon as you press esc, it automaticly writes a qBasic file withă'data statements and a loader for them..use the numeric keypad to move aroundă'and the , and . to select the colors (Actually < > without the shift hehă'heh).. hit space to set the point to the current color.. An "X" will denoteă'where you are, but you will not see the changes to that pixil until you moveă'the cursor away from the spot you were working on.ăăDECLARE SUB UpdateScrollBar ()ăDECLARE SUB Display ()ăăDIM SHARED x, y, xMax, yMax, SelectedColorăăCLSăINPUT "Bitmap X size ->", xMaxăINPUT "Bitmap Y size ->", yMaxăăDIM SHARED Bmp(xMax, yMax) AS STRING * 1ăSCREEN 13ăăLOCATE 23, 1ăPRINT "v"ăUpdateScrollBarăDisplayăDO WHILE a$ <> CHR$(27)ă   SELECT CASE a$ă      CASE ","ă         SelectedColor = SelectedColor - 1ă         IF SelectedColor < 0 THEN SelectedColor = 255ă         UpdateScrollBară      CASE "."ă         SelectedColor = SelectedColor + 1ă         IF SelectedColor > 255 THEN SelectedColor = 0ă         UpdateScrollBară      CASE " "ă         Bmp(x, y) = CHR$(SelectedColor)ă         Displayă      CASE "4"ă         IF x > 0 THEN x = x - 1ă         Displayă      CASE "6"ă         IF x < xMax THEN x = x + 1ă         Displayă      CASE "8"ă         IF y > 0 THEN y = y - 1ă         Displayă      CASE "2"ă         IF y < yMax THEN y = y + 1ă         Displayă   END SELECTăă   LOCATE 7, 7ă   COLOR SelectedColoră   PRINT "X";ă ă   a$ = INPUT$(1)ăLOOPăăCLSăFOR i = 0 TO xMaxă   FOR j = 0 TO yMaxă      PSET (i, j), ASC(Bmp(i, j))ă   NEXTăNEXTăăSize% = 4 + INT(((xMax + 1) / 2) * (yMax + 1))ăDIM BitMap%(Size%)ăăGET (0, 0)-(xMax, yMax), BitMap%ăăOPEN "Test.bas" FOR OUTPUT AS #1ăPRINT #1, "SCREEN 13"ăPRINT #1, "DIM BitMap%("; Size%; ")"ăPRINT #1, "FOR I = 0 to"; Size%ăPRINT #1, "   READ BitMap%(I)"ăPRINT #1, "NEXT"ăPRINT #1, ""ăPRINT #1, "PUT (0,0), BitMap%"ăPRINT #1, "END"ăPRINT #1, ""ăPRINT #1, "DATA ";ăăFOR i = 0 TO Size% - 1ă   x = x + 1ă  ă   PRINT #1, "&H" + HEX$(BitMap%(i));ă   IF x > 8 THENă      x = 0ă      PRINT #1, ""ă      PRINT #1, "DATA ";ă   ELSEă      PRINT #1, ", ";ă   END IFă   ăNEXTăPRINT #1, "&H" + HEX$(BitMap%(Size%))ăăCLOSEăăSUB Displayă   CONST WindowSize = 6ăă   FOR i = -WindowSize TO WindowSizeă      LOCATE WindowSize + 1 + i, 1ă      FOR j = -WindowSize TO WindowSizeă         IF j + x >= 0 AND i + y >= 0 AND j + x <= xMax AND i + y <= yMax THENă            COLOR ASC(Bmp(j + x, i + y))ă            PRINT CHR$(219);ă         ELSEă            COLOR 15ă            PRINT CHR$(178);ă         END IFă      NEXTă   NEXTăEND SUBăăSUB UpdateScrollBară   LOCATE 24, 1ă   FOR i = 0 TO 39ă      COLOR (i + SelectedColor) MOD 255ă      PRINT CHR$(219);ă   NEXTăEND SUBăChad Beck                      IMAGE MAKER TAKE II            Earl L. Montgomery             10-09-95 (02:31)       QB, PDS                123  8060     IMAGE2.BAS  '     If you picked up Earl Montgomery's recent "Image Maker" program,ă'then pick this up too.  Functionally, the only change is that pressingă'F10 during a LOAD or SAVE prompt will not exit.  Instead, entering aă'blank line at these prompts will return you to the drawing screen whereă'you may exit.  However, the improvements in speed and code size areă'relatively dramatic.ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"IMAGEMKR.ZIP",4^6:Z&=5485:?STRING$(50,177);ăU"%up()%9%'%R-%gk7nDFX-^U_(%%%=,%%%1%%%%nr%fljr%pwSi.thTz;,>TkC5KăU"4_-x)kCEu1UD0SGXua9)B3s;c(CdgdO7_k]Pkk9ke2pbiZ8HHgv%%q6m.I&;xllăU"VRhZX>w$)WWkveZXu7IZvcnz3hcl4__ju<42r'wVR0q=crgW7#]Q$R6S>'Hpy'0ăU")+2MeXiA.V7\/E4*=gq\ANI%CsYs-:LL<)1+r9i9MOZnxy1eEt,3SQ:q&XQ4rC)ăU":a;(59W*O;YKsg.TP3O%MJlBJ+ORA8]#vl%iB$7'[aHjTYu\;w\EkfAkQ;2#*j&ăU"^C;emb?ss0,RCan7.YMVKG:#m>ri>GnRPcj[.hG7&rPye2ihW$-Kl+TN/OVZpzmăU"X;*tb4LODL;(HUC[[pg50;;tCd'O/v*Y'I=dA&\dQl4KGf001=6?J(No\d9+h(FăU"Q#Us<WeSfVtU&z/$4X.qjZ>8MxImjf^[<O=$'-U2CrvQ4y&;oeT-_]TxNt(5NjVăU"2j9VwsqqxM6N6U-ySa;;NQ0bdUSOExJ<2-9d\QmsuF-/G65$,6?dKEGJc;A,'chăU"GcF(iu%4V6N_iMUu\rUP1#jsx).,q^iBu)ZZw\5R7HLgM3UD'LDK8lpLm4WHo48ăU"K3do^R=))x)\N)V#N*Son'NSJ:1j;D.qT9%&v]siS(mB):oEj+]#Gc)G:S?0m.băU"r\I-J\x/y73_1gDFv#;'fBOLt[UJu]cI3(ACv=C>CBNq6/ZdbU)k5TQ?SD4jf;=ăU"VW[\RlU2F>=QRN#a.wr5iR7k>*[1d7;_nH>PKrUgd.e#3;#RuGh/BCIg_43h9EgăU"L]^==$><VbP^;J?,37OJxUw0+\clbzQ'V;Ks+$%jxmiJO9SN?PL;+aj/Fr2BlK?ăU"(u#k7>pMU?MB>ZPrc&6FCuPO#\nnM3_NXQaR$6rN<S[<o=&PQC31gmC7H(eW[1lăU"YsXK#Gfo_isPia>uu^*A+u\['UxRc6txWg\qk3sUIFl4#OWf0x4n#tsF9<^U'GkăU"L%g#+COh#B7as9xKVZu[c=k5Ld[mS$8xt&if3BHCW'2&].+]vWEwdJo4i&XwaZDăU"y5a:V*0:g;\l7'%up()%9%'%7-%#8%nD.7(Xj_-7%%5;%%%1%%%%nr%fljr%pwSăU"gIfxl'q:B[147vky0^dCvWM/XPINpMORnK0GhgS)?<)ge2-0g<(^++her%<kQq.ăU"NN+h\4/+N,biiuAcL&]L4n&um&:IemfvjWXzDzND)D7Bpk4L8z2.dC<.;M?fc+dăU"Bu+x>6\#X<l>I#it2owe2,,]LZ,ZQUY=#*O_+,_6;x4ReQaN4>N]?BrrI,r::+aăU"&,e:\'7c<GpIL3R[<,V&#jrgJexQ^:&7Ah+rf7#c2#Rt_A3^[:29c*g=c5^Gc2AăU"s9g3X>Pb]*?lcy1kx<k:$wM6(]hrj6Y]0+47Jd_duj$dKbWDga]Oq)^W#\Z?CvQăU"--SIsq&sGz$dL$ghBg\t=9iX_d3-N5&263(8S_1rK<ufZS;[/ZkZi3nfM*?nngbăU"f4M4r1G67Knq)iZiN>ZDAlQa(bCc<?.3Dk$OC?mpbi[cdpHp=:PXiuwccke1Um;ăU"+HDFFX/E?o%P/]XZ?2>3L<rp<YPmAaRH\if0SWgRsf=-c+q6&iJ8VW559>6/--&ăU"lCbXSIknR);$K=4Rg:.I\6P*S/rZJ1PhG(9y\I[qu'Tt:#LTjOPT')J/V2Sq_u=ăU"vSTjJ#n9W=wdFt+uC=b*)7lU9n\T)H3Z#9M?vCdr&Uga3a]pVgtiDaJABURRs9găU"RR:E>RM]i%.:h9*fdx^w]Y1;=S_XjK,M7mWhm(??1;XM/s0=Ou6W>;S7*wO4k5tăU"=VMJ)kWw'S^ki'JXoi4zH#G2Y$$GROb#Y4MF[;FvB4Gn0cC5q[%GDq;l^>:GcjWăU"2j6HZMdkf8>k^NI[^TxxR&T%Sd7TyK\[<Za(^-yz:X-ME*$Gvz*DGvhO^#ZykI?ăU"ZcYu9dqloF\7u$#;OlV&.V_FG3v.EN1l7rB0E#+tz7C_339K[GihHrUmV(ypL=băU"e-A<,V$U9Up.B&[w/^??ITq&nK0p*O,L?nTq&gRW<LmtPR$XQ,*5X?K:U/bHJw^ăU"$4cV2-.3]0MLXz]ff9[[uH8;E#>F)9Ar2$h>sJT6UnEVN#CNROvpAi8;6Z>Z7,NăU"r\1'AN(rDvv1)c89E:LW'H:bF8p+##G.P$a7OUXj13]kHa^(US6ZBp#z#RtU(i=ăU"=X+Ul/#=lwjFx_CX*S8wQV*_sqUFZKc><#Ue/*#[^KJ1E:j<1Scm7QWo77%Z:%EăU"W_,P>cn_gUD<TlcWI,z,/Y:zWqfBux?9Gy*-b_<u5<WOLj/ZZ*b+I6z^Q>o[UdnăU"X'[#T4:c=Rn#Q?*GUT=%qe>/u=S92qH8'H-$3>p=vK^7WoR8MbJ(WZZIwFit&r0ăU"pKW0&-G%f<]4Z+IX3a0.\i+;X:Y4'F6nU3<JiM)pQ&__stni3hgA6zywg($4'54ăU"RLmXR[P?g%QaJYQR646<VG[I+P'\$PbMU+igx#0Qt<eX9iWK\MQ&8G3#8G<)6<6ăU"%9c7CT1<;U/aYV+8wWu48)Wu0P)ih6)0j/DBRL6Sn\q0OrTIDhuY(,[JJ32nX<XăU"O\P02DR%2T2kY,[b8u)mAEbe=XMe/>aZ]_;9g=p_]A8=fL1oaUh$J?(ipHijHjmăU"LyBV8EC3UWjfXHtR>Dh3W6p^WS,#dgjNt+(=xlI,1c*6AqA-y[Rb#XR'RJBfvE#ăU"w6U4$<]0*h&0;FdCe+tL8hPuA)quf5>4s?(k(f*i8E.O8t,S#sH4c:j'-WIja&EăU"%JQNN*T2P9BEx6[k)B+3QMDk/>0q_]Qu\uXuwUu2J?D=#Umc$Ta_OIi(J*[.#g2ăU"g3GiO\p$MbT?tg=5fd1#P^3'nKi>C9VqdeZHIE+mZ.Oe0P9l].VW4OOOw/myN.0ăU"72OxG**M?2w+)R,bj2tLyXZbm%yts/]dSzpU6K#,Ollgx1tUP<A(X9L08r,MJ.]ăU"%n$V9K^:QhqV29l?lVv]p>OuCJcSjCKtDIZj9XH*OjDLHb/$Kr?1o?:T-m?irXVăU"gWX0iCF2tZ;6%QW>6P)8p=,>,)G&c_l[dQkYfmVRF,4LMjt(%9Sk/0^0paHX69păU"jakpP'eP8:TCT^VMkv*$M]o^hfC+8A^myR^IAEJnaKCN&hZGZngqBK\I(wdvoe?ăU"Pbn0u\M[n2MNNnsKl>QbpILFG7g],/.kVLzJm0N9G\8#T=Bkc,bzi:piAR_^Sb,ăU")oYfgCRt-wi=Q+9VvHBh^kl>tbiUnRH4h*'I=.#gU+V7ccDt__r0_xe\oY3E+QZăU"hN2k<g>w/)THBCIpzcnsp.WG;Br;^ITO75Ot;qYCrTRQj2*aSjSdn5Sy.spW.i;ăU"z+_pvj,$SY*Xvj[m)f,wcPC]?,u.L5$1\)I>oU%J+E]62s+G9Y&25c0iAOZ*g;(ăU"UJ'(kd'k/8>u/dUzOb_4gK971&OOE<C&5I;Udc&0k&x2TOwl(&8/U7FEcv(e)'qăU"1-WI9O5,O8Rge-r&O5F2\i56f[MGiA/RKSiS:CZS(i7gqbC>M\8Sqai(P?lf#FgăU"OCmFOsjQ3s0n4=q65Ewv/Q0hk\dMAZJ%=MRKrgFky]e?*%i9m/iQ*'+hcV8&jWRăU"r4c:VwO4ZUaFn]gR8k=).Y0-Zu]X?sX(T0Sd_u-cvJGR$J<=unm*_f7(CDzlbpyăU"EV+zQdQMNcGAxxOKRNB7K#0+.M0\jA]r)JpLVysAva4,tpMitkHKK_lM\.7RB>văU"hItrp6XRVcKMEDe=*xo)]Q2hjg6rfLb$Lq%+iko1XDwu/%Ml8N-sd%up()%9%'%ăU"#-%io7nDP,+L7&&.%%6*%%%/%%%%uf%ltif%SgnsENbV=B;U9U2n:yQDeohtso&ăU"AA%/Xh]7/la23)IYC_r2l,)#[AFmH(iPr**t6q/'CIowwm$op<THstjjjhl7L8\ăU"o*JRha4\uMrqT3r[Z04G/sRv;83BO_fb>QQ1F8wi3b(R5;FmLXGf+<R3aBHj]BHăU"6+KJC%DesY/SZZsmM[P%t=ITQ%Btg\R:%kC,bvCX1sWTYkN=u6VJ?[L%nxzvYgDăU"0d\pq*GE._U<0le^d,<JYKLBCSdDV)ia8:C*b'Gjf'z$4.V2cXl,XS>u$dCXg:6ăU"HPsGMCf.u4YNeu5>+gnr;gY0hcO+*sS))4$2Y:M4rwbv7%%up(%)9%'%%-%W&)năU"Dp1IE_,[)%%$%S%%0%%%%q%jyyj%wxSgRnsfi:t;TyjA#N(N/aO+^\(LNbo%VfkăU"sV_VMEizU.S#Wo)wR(<.38B-rKS=:2,_inC>LKbQa:yI/;ppmSoCrBAz),V=Ea:ăU"U0MC%obt2UJ[GK93_Zt3CPB5]<GOm'J<FPp^n'Tb$kLlzeX<8$f0Xcj(BiDd\pkăU"O<Z8?]xHLi7:d(mZ_*;V>0E7cB.IF:I&W3M[L%=wMCfo4?.34T9p(U5xrHI6Ix#ăU">=U]hY5mWXk*tn;^ys*v]-MoVQj=sW'c+W&nTL$r$,a(Ii<'s$/dj(_ZJjoU^1=ăU">^1xQNmYSNJ[F)c]:$*X?4/k0l0N8F0F[C:c2Ne64anGqk&P,E';Pq?qsNb]&SDăU"yR/J?D_RST5_s3,JvxBIX;jwl*($QR<K_64T$lGN3Ir&sSEa%0>K9A&7I3iDXdrăU"v:4,lWNKx8\H.Qi\mkHJ1El.4_hzv&+QXN'Z4rNw4#[7baHa]BRRI;SzQ'?)su(ăU"jv+cls6btz+65Ir7vqr=q5bhe'ZMie=6+S8^vD4+c%asdtZ_K&W-LADgO+(D5RwăU"_BxSDRnvo34UNV03,.)\:W?N#5))QY_:$?<#<jWlEC$(C4y8LhUBdJJdxN(,F7%ăU"j9Ya24=E.G7/&-iz6.iz4S-wtnk0IW$?GpWW$6<Z?]dA3V<*Z?]RRJ,IXYPe&7WăU"qo>Nt-vX0]=I^#9AwqU)++KTIVp$I=F6^kW:7x$F'9XDc+V(P9A6*9hxX^s$J5yăU"ThMqUP3NfJIbC?oom-%ZLMhc_/=EKh86'6sK.z151<)a,jdYbU$>A:1IkkJ[jj6ăU"p73[lr36\xU5bj.G*?#=c?CcQ'v&U^7bujbpz*rd_=k\-*o<i\e#bGY:gsY5v2tăU"Tkr03T?)x1b<dB-P#UM:slJ<=-rw/Q[b$65PwM-/XFKP'jv_D5b3?ix-JH\B?]aăU"oACwCNM$g2l(a-C<v*3vy9m;Gn16w'eG%b:XKMhYf>FI'hoanj.vqEq/%#-/($;ăU"M+(<6IvXP=mJA:SMLjjXUj:Zum\s(kXiL$<6X7G.I>Wr2+^FJ1_01D0e95o)0q<ăU"K]wm7,GQCgst5^5fg2UX+irWkpM_bTX&)Uq7OdSM1ez\G&-xqskh?(WMn+NqT^LăU"N-'oDH2gEqxbpA=e+<>s,;^9F?%z3P[qvke<Jg/R<xDoGTQ'VDs3%MY&?)698ODăU"VmSBS^AjWMMs\6a^hiF/K*5x8.$.'r'Y>re9ZQYNiAl]?^w+1(D93eYCq3id\PmăU"d'/B5DIjaOG$?b8R2#5r+1a88bsN,2>rtl6$drL^wgIW5jlApZ_ET0g]?4]xdd%ăU"%up(%)9%'%%-%n&onDg'N&?i#&%%6%*%%/%%%%g%zlrf%sSgnjsFc:+o<e5kUx4ăU"T'=hmseT-d]lYBR-o0A=o<YR]6MKQuQ7gD:lrA2]Y\:-&:5rM*Sg7F6P;3%3jE=ăU"RdpQ<w.6c+,$f-#e6M\vpQj\,0.(ZK9Hq<AZkEp:;2ccrd%BWEyX]B%%g5$oLX+ăU"IPE2uo<91o**Sw,llvT*^Um<E2KJuUO^JnAPE*/uSbL\HZGEZL/bZo?gd.brbs<ăU"KJc&e1TQVf>CTQIpi1zh4x2<qtuA44HzC2z2z#RXlvG'QuoAdbtB82BfhqLp\PGăU"GsofUH)G[bX,p<hA1AHOq=B1N/u7h>X)Y1I2X<dhPPh/HCPU'lRKuC;yF_+^2.)ăU"bo(+la7eDtFVc1d4,\4ZSSdzsg,so4pZfKT/1i^vbmob%;^b:l0,Yr?QDx\d1uOăU"up:KwdwHd9BM'%tup(%)9%'%%-%i[DmD-(qnwr%&%%0%k%%/%%%%h%tqtw%xSgnăU"4sfif+o<e=pkN&MmrUYOA\lM-OE4mrpl?b+CLW$>]Y^Q1oP(1Bi+ZeG]GeZ\(U7ăU"Y5aJ<1osL50a7\JF,flo8lYvhpFmGLll]\P&akr)$MM2xGZK(U2xL=$Z(]eLI<IăU"*S?P,ZZSO$8gYg9:RHg%H\oOXw1QHZ(t?L>x1^x&7a#JF:&0:>jUSO#]_S9]0QhăU"\0OMxm<Z1\0CS1[qhqqD*_a8K+R-3$1QdX$fMg\wwSgBrYm:SK3kw^50[aRh\B$ăU"k3)t$S><&:>?bs#RToiqo68Q4qKDWps72^h,aSh8%gwB9*S?eP0+Ym'<19u>82YăU"R\]P5Z19>.LSg:L64qiYRSjO=]'A?2Ivw$A]o#VIe&v$;a*pl1D>U0+'Y'<6%SSăU"J?[B:.wB(Z??%&%%%%%%%%,?Ivz2V:c'#%%%7'^(up%&'9%%9%'%R-%gk7nDFX-ăU"^U_(%%%=,%%%1%%%%%%%%%&%%E%%%%%%%%%nrfl%jrpw%Sith%up&'%9%9%%'%-ăU"%'#8nD#.7Xj%_-%%'5;%%%1%%%%%%%%%&%E%.%%3(%%%nr%fljr%pwSg%fxup%&ăU"'9%%9%'%#-%io7nDP,+L7&&.%%6*%%%/%%%%%%%%%%%%E%%%'A0%%%uflt%ifSgăU"%nsup%&'9%%9%'%#-%W)%nDpI)E_,)7%%$S%%%0%%%%%%%%%%%%E%%%'j1%%%qjăU"yy%jwxS%gnsu%p&'9%%9%'%%-%n&onDg'N&?i#&%%6%*%%/%%%%%%%%%%%%E%%%ăU"%F6%%%gzl%rfsS%gnsu%p&'9%%9%'%%-%i[DmD-(qnwr%&%%0%k%%/%%%%%%%%%ăU"%%%E%%(%\7%%%htq%twxS%gnsu%p*+%%%%%+%%+%z%&%%'%9%%%%%ăEND SUBăCLOSE:IF S=251AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJarkko Ryyppo                  LABYRINTH-ORIENTEERING         www.lut.fi/~jtryyppo/          05-04-96 (12:00)       QB, QBasic, PDS        562  32204    LABY.BAS    REM  ********************************************************ăREM  *       LABY-O              J.Ryyppo -94  *           **ăREM  *           m and n  =map                 *         ****ăREM  *            ,       =left turn           *       ******ăREM  *            .       =right turn          *    *********ăREM  *            SPACE   =move                *  ***********ăREM  *   Start   qbasic /run laby.txt          **************   ăREM  ********************************************************ăSCREEN 0: GOTO 1300ă99 CLEAR , , 1650ăDIM m$(75, 40), N$(3, 5), pe$(19), tos(19, 6), tyh(19), jr%(19), jro%(19)ăKEY 15, CHR$(0) + CHR$(51): KEY 16, CHR$(0) + CHR$(52): KEY 17, CHR$(0) + CHR$(57): KEY 18, CHR$(0) + CHR$(50): KEY 19, CHR$(0) + CHR$(1)ăON KEY(15) GOSUB 14: ON KEY(16) GOSUB 15: ON KEY(17) GOSUB 17: ON KEY(18) GOSUB 10: ON KEY(19) GOSUB 350ăKEY(19) ONăON ERROR GOTO VirheetăGOSUB 1200ăvnk = INT((.93 + tapu / 1.32 * .07) * 100) / 100: IF vnk < 1 THEN vnk = 1ăREM vk = .6ăCLS : v$ = "y"ăăLOCATE 1, 1ăPRINTăPRINT "                 LABYRINTH-O  (ver. 2.20)  "ăPRINT "                 ^^^^^^^^^^^ "ăPRINT "            ********************************"ăPRINT "            * Press Caps- and NumLock  OFF *"ăPRINT "            ********************************"ăPRINTăPRINT "            Control:          ,      = LEFT"ăPRINT "                              .      = RIGHT"ăPRINT "                          SPACE BAR  = MOVE"ăPRINT "                              m      = MAP ON"ăPRINT "                              n      = MAP OFF"ăPRINT "            Press 'Esc' to drop out or exit"ăPRINTăPRINT "            If you select 1 player and 1 event you"ăPRINT "            can choose the number of the course and "ăPRINT "            run the same course in several computers"ăPRINT "            simultaneously."ăPRINTă71 INPUT "      How many players (1-6, 0=demo) "; pe: pe = INT(pe): IF pe > 6 OR pe < 0 THEN 71ăIF pe = 0 THEN RUNăFOR i = 1 TO pe: PRINT "      Player "; i; " (name) "; : INPUT pe$(i - 1): NEXTă72 INPUT "      How many events (1-6)"; osat: osat = INT(osat): IF osat > 6 OR osat < 1 THEN 72ăGOSUB 500ăIF pe = 1 AND osat = 1 THEN PRINT "      Select the number of the course ": INPUT "      ('0' = random) "; raăăFOR qg = 1 TO osatăăSCREEN 12: CLS : PRINT : PRINT "                       "; qg; ".   EVENT": PRINTăIF ra = 0 THEN PRINT "                             Press 'n'"ăăIF ra = 0 THEN WHILE INKEY$ <> CHR$(110): pp = pp + 1: WENDăPRINTăPRINT "                          Wait please... "ăăIF ra = 0 THEN RANDOMIZE TIMER:  ELSE : RANDOMIZE raăb$ = CHR$(219): l = 0ăFOR x = 0 TO 75: FOR y = 0 TO 40: m$(x, y) = b$: NEXT: NEXTăx = INT(RND * 47) + 3ăy = INT(RND * 14) + 3ăm$(x, y) = " "ă1 x = INT(RND * 67) + 3ăy = INT(RND * 24) + 3ăIF m$(x, y) = " " THEN GOTO 1ăREM IF m$(x - 1, y) <> " " AND m$(x, y - 1) <> " " AND m$(x + 1, y) <> " " AND m$(x, y + 1) <> " " THEN 1ăIF m$(x - 1, y) = " " AND m$(x - 1, y - 1) = " " AND m$(x, y - 1) = " " THEN 1ăIF m$(x, y - 1) = " " AND m$(x + 1, y - 1) = " " AND m$(x + 1, y) = " " THEN 1ăIF m$(x + 1, y) = " " AND m$(x + 1, y + 1) = " " AND m$(x, y + 1) = " " THEN 1ăIF m$(x, y + 1) = " " AND m$(x - 1, y + 1) = " " AND m$(x - 1, y) = " " THEN 1ăm$(x, y) = " ": l = l + 1: IF l > 67 * 24 / 1.85 THEN 2ăGOTO 1ă2 FOR x = 3 TO 69: FOR y = 3 TO 26ăIF m$(x, y) = " " THEN GOTO 3ăREM IF m$(x - 1, y) <> " " AND m$(x, y - 1) <> " " AND m$(x + 1, y) <> " " AND m$(x, y + 1) <> " " THEN 3ăIF m$(x - 1, y) = " " AND m$(x - 1, y - 1) = " " AND m$(x, y - 1) = " " THEN 3ăIF m$(x, y - 1) = " " AND m$(x + 1, y - 1) = " " AND m$(x + 1, y) = " " THEN 3ăIF m$(x + 1, y) = " " AND m$(x + 1, y + 1) = " " AND m$(x, y + 1) = " " THEN 3ăIF m$(x, y + 1) = " " AND m$(x - 1, y + 1) = " " AND m$(x - 1, y) = " " THEN 3ăm$(x, y) = " ": l = l + 1ă3 NEXT: NEXTăăFOR x = 3 TO 69: FOR y = 3 TO 26ăIF m$(x, y) <> " " THEN GOTO 4ăIF m$(x - 1, y) <> " " AND m$(x, y - 1) <> " " AND m$(x + 1, y) <> " " AND m$(x, y + 1) <> " " THEN m$(x, y) = CHR$(219)ă4 NEXT: NEXTăIF ra = 0 THEN RANDOMIZE TIMER + ppă5 x1 = INT(RND * 67) + 3ăy1 = INT(RND * 24) + 3ăIF m$(x1, y1) <> " " THEN 5ăm$(x1, y1) = "m"ă6 k = 0: x2 = INT(RND * 67) + 3ăy2 = INT(RND * 24) + 3ăIF m$(x2, y2) <> " " OR ABS(x1 - x2) + ABS(y1 - y2) < 7 THEN 6ăm$(x2, y2) = "3"ă7 x3 = INT(RND * 67) + 3ăy3 = INT(RND * 24) + 3ăIF ABS(x1 - x3) + ABS(y1 - y3) < puoli * .6 OR ABS(x2 - x3) + ABS(y2 - y3) < 7 OR m$(x3, y3) <> " " THEN 7ăIF ABS(x1 - x2) + ABS(y1 - y2) + ABS(x2 - x3) + ABS(y2 - y3) > 1.2 * puoli THEN m$(x2, y2) = " ": GOTO 6ăm$(x3, y3) = "2"ă8 x4 = INT(RND * 67) + 3ăy4 = INT(RND * 24) + 3ăIF m$(x4, y4) <> " " OR ABS(x4 - x2) + ABS(y4 - y2) < puoli * .6 OR ABS(x3 - x4) + ABS(y3 - y4) < 7 OR ABS(x1 - x4) + ABS(y1 - y4) < 16 THEN 8ăm$(x4, y4) = "1"ă9 x = INT(RND * 67) + 3: o = xăy = INT(RND * 24) + 3: p = yăIF ABS(x - x3) + ABS(y - y3) < puoli * .6 OR m$(x, y) <> " " OR ABS(x - x4) + ABS(y - y4) < 7 OR ABS(x - x2) + ABS(y - y2) < 16 THEN 9ăm$(x, y) = "s"ăs = INT(RND * 4) + 1: u = săpit = ABS(x1 - x2) + ABS(x2 - x3) + ABS(x3 - x4) + ABS(x4 - x) + ABS(y1 - y2) + ABS(y2 - y3) + ABS(y3 - y4) + ABS(y4 - y)ăk = k + 1ăIF k < 20 AND (pit < 2 * puoli OR pit > 2.6 * puoli) THEN m$(x4, y4) = " ": m$(x, y) = " ": GOTO 8ăIF pit < 2 * puoli OR pit > 2.6 * puoli THEN m$(x4, y4) = " ": m$(x3, y3) = " ": m$(x2, y2) = " ": m$(x, y) = " ": GOTO 6ăăFOR tk = 1 TO 30ăRESTORE: k = INT(RND * 51 + 1): FOR i = 1 TO k: READ tx$: NEXTă31 i = INT(RND * 67) + 3: j = INT(RND * 24) + 3ăIF m$(i, j) = " " AND VAL(m$(i, j + 1) + "1") + VAL(m$(i, j - 1) + "1") + VAL(m$(i + 1, j) + "1") + VAL(m$(i - 1, j) + "1") = 3 THEN koe = LEN(tx$): koe = (50 - koe) / 2: FOR k = 1 TO koe: koe$ = koe$ + " ": NEXT: m$(i, j) = m$(i, j) + koe$ + tx$: koe$ = "":  ELSE GOTO 31ăNEXT tkăăIF s = 1 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x - 1 + i, y - 3 + j): NEXT: NEXTăIF s = 3 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x + 3 - j, y - 1 + i): NEXT: NEXTăIF s = 2 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x + 1 - i, y + 3 - j): NEXT: NEXTăIF s = 4 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x - 3 + j, y + 1 - i): NEXT: NEXTăă33  FOR qp = 0 TO pe - 1ăCLS : rtt$ = ""ăPRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"ăPRINT "XX  Labyrinth-O --------- A new way to improve your O skills ----------------XX"ăPRINT "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"ăă: PRINT : PRINT : PRINT : PRINT "                           Course is ready ."ăăPRINT : PRINT "                      "; pe$(qp); "'s turn"ăINPUT "                  Do you want to chance settings (y/n) "; r$: IF r$ = "y" THEN GOSUB 550ăPRINT "       !!!!!!!!!!!!!!!! Put NumLock and CapsLock off!  !!!!!!!!!!!!!"ăPRINT : PRINT : PRINTăPRINT "                           Ready for start."ăăPRINT : PRINTăPRINT "                              Press  'n' "ăăWHILE INKEY$ = CHR$(110)ăWENDăăWHILE INKEY$ <> CHR$(110)ăWENDăIF kl$ <> "y" THEN 34ă    scale$ = "C": scale2$ = "G"ă    PLAY "T50"ă    PLAY "L7"ă  ă        PLAY "O" + STR$(5)ă    FOR a = 1 TO 5:  PLAY "X" + VARPTR$(scale$): NEXTă    PLAY "L4"ă    PLAY "X" + VARPTR$(scale2$)ăă34 SCREEN 12: GOSUB 16: GOTO 11ăă10 CLS : KEY(15) OFF: KEY(16) OFF: KEY(17) OFF: KEY(18) OFFăWHILE INKEY$ = CHR$(110)ăWENDămm = mm + 1: tapu = TIMER: COLOR 7: rtt$ = rtt$ + "p"ăIF g = 1 THEN h$ = m$(x, y): m$(x, y) = "X"ăFOR j = 2 TO 27: PRINT : FOR i = 2 TO 70ăPRINT LEFT$(m$(i, j), 1);ăNEXT: NEXTăIF g = 1 THEN m$(x, y) = h$ăLINE (4 + (x1 - 2) * 8, 8 + (y1 - 1) * 16)-(4 + (x2 - 2) * 8, 8 + (y2 - 1) * 16)ăLINE (4 + (x2 - 2) * 8, 8 + (y2 - 1) * 16)-(4 + (x3 - 2) * 8, 8 + (y3 - 1) * 16)ăLINE (4 + (x3 - 2) * 8, 8 + (y3 - 1) * 16)-(4 + (x4 - 2) * 8, 8 + (y4 - 1) * 16)ăLINE (4 + (x4 - 2) * 8, 8 + (y4 - 1) * 16)-(4 + (o - 2) * 8, 8 + (p - 1) * 16)ăPRINT : PRINT " Paina  'n'"ăWHILE INKEY$ <> CHR$(110) AND EN = 0ăWENDătm = tm + TIMER - tapu: COLOR 7ăKEY(15) ON: KEY(16) ON: KEY(17) ON: KEY(18) ONăGOSUB 20ăRETURNăă11 REMă12 REMăKEY(15) ON: KEY(16) ON: KEY(17) ON: KEY(18) ONăt1 = TIMERă13 IF EN = 1 THEN KEY(15) OFF: KEY(16) OFF: KEY(17) OFF: KEY(18) OFF: GOTO 200ăIF EN = 2 THEN KEY(15) OFF: KEY(16) OFF: KEY(17) OFF: KEY(18) OFF: IF ml$ = "y" THEN scale2$ = "G": PLAY "T50": PLAY "L7": PLAY "O" + STR$(5): PLAY "X" + VARPTR$(scale2$): GOTO 200:  ELSE : GOTO 200ăGOTO 13ă14 s = s - 1: GOTO 16ă15 s = s + 1ă16 IF s = 0 THEN s = 4ăIF s = 5 THEN s = 1ăIF s = 1 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x - 1 + i, y - 3 + j): NEXT: NEXT: GOSUB 20ăIF s = 2 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x + 3 - j, y - 1 + i): NEXT: NEXT: GOSUB 20ăIF s = 3 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x + 1 - i, y + 3 - j): NEXT: NEXT: GOSUB 20ăIF s = 4 THEN FOR j = 0 TO 3: FOR i = 0 TO 2: N$(i, j) = m$(x - 3 + j, y + 1 - i): NEXT: NEXT: GOSUB 20ăRETURNăă17 kpapu = kpităIF s = 1 AND m$(x, y - 1) <> b$ THEN y = y - 1: kpit = kpit + 1: rtt$ = rtt$ + "1"ăIF s = 2 AND m$(x + 1, y) <> b$ THEN x = x + 1: kpit = kpit + 1: rtt$ = rtt$ + "2"ăIF s = 3 AND m$(x, y + 1) <> b$ THEN y = y + 1: kpit = kpit + 1: rtt$ = rtt$ + "3"ăIF s = 4 AND m$(x - 1, y) <> b$ THEN x = x - 1: kpit = kpit + 1: rtt$ = rtt$ + "4"ăIF kpapu = kpit THEN RETURNăGOTO 16ăă200 ERASE N$ăIF EN = 1 THEN PRINT "You dropped out!": GOTO 210 ELSE : PRINT "Great! You made it!"ăLOCATE 4, 1: PRINT "Times control by control:"ăPRINT "     You                                Previous"ăvam1 = INT((t2 - t1) / 60): vas1 = INT((t2 - t1 - 60 * INT((t2 - t1) / 60)) * 100) / 100: rvm1 = INT((t2 - t1) / 60): rvs1 = INT(t2 - t1 - 60 * INT((t2 - t1) / 60))ăvam2 = INT((t3 - t1) / 60): vas2 = INT((t3 - t1 - 60 * INT((t3 - t1) / 60)) * 100) / 100: rvm2 = INT((t3 - t2) / 60): rvs2 = INT(t3 - t2 - 60 * INT((t3 - t2) / 60))ăvam3 = INT((t4 - t1) / 60): vas3 = INT((t4 - t1 - 60 * INT((t4 - t1) / 60)) * 100) / 100: rvm3 = INT((t4 - t3) / 60): rvs3 = INT(t4 - t3 - 60 * INT((t4 - t3) / 60))ăvam4 = INT((t5 - t1) / 60): vas4 = INT((t5 - t1 - 60 * INT((t5 - t1) / 60)) * 100) / 100: rvm4 = INT((t5 - t4) / 60): rvs4 = INT(t5 - t4 - 60 * INT((t5 - t4) / 60))ăPRINT "1."; vam1; ":"; vas1, rvm1; ":"; rvs1; "   ": IF uusi = 1 THEN LOCATE 6, 37: PRINT vm1; ":"; vs1, rm1; ":"; rs1ăPRINT "2."; vam2; ":"; vas2, rvm2; ":"; rvs2; "   ": IF uusi = 1 THEN LOCATE 7, 37: PRINT vm2; ":"; vs2, rm2; ":"; rs2ăPRINT "3."; vam3; ":"; vas3, rvm3; ":"; rvs3; "   ": IF uusi = 1 THEN LOCATE 8, 37: PRINT vm3; ":"; vs3, rm3; ":"; rs3ăPRINT "m."; vam4; ":"; vas4, rvm4; ":"; rvs4; "   ": IF uusi = 1 THEN LOCATE 9, 37: PRINT vm4; ":"; vs4, rm4; ":"; rs4ăăPRINT : IF kpit = 0 THEN 210ăPRINT "Theoretic distance:        "; pit; " blocks"ăPRINT "You travelled              "; kpit; " blocks"ăPRINT "                            ("; INT(100 * (kpit - pit) / pit * 10) / 10; " % more)"ăev1 = INT((t5 - t1) / pit * 100 / 60): ev2 = INT(((t5 - t1) * 100 / pit - 60 * INT((t5 - t1) * 100 / pit / 60)) * 100) / 100ăPRINT "Your avarage speed:          "; ev1; ":"; ev2; " (min:sec / 100 blocks)"ăPRINT "You looked at the map        "; INT(tm * 100) / 100; " seconds ("; mm; " times)"ăIF pit > 0 THEN PRINT "                         "; INT(mm / pit * 1000) / 10; " (times / 100 blocks)"ăIF mm > 0 THEN PRINT "                          "; INT(kpit / mm * 10) / 10; " (blocks/ one look)"ăPRINT "                      "; INT(tm / (t5 - t1) * 1000) / 10; "% (looking time/finishing time)"ă210 INPUT "Do you want to see your route ? (y/n) "; r$: IF r$ = "y" THEN GOSUB 400: GOTO 200ărtt$ = ""ătos(qp, qg) = 60 * vam4 + vas4ăIF EN = 1 THEN tos(qp, qg) = 3600ătyh(qp) = tyh(qp) + tos(qp, qg)ăEN = 0ătm = 0: mm = 0: vm1 = vam1: vm2 = vam2: vm3 = vam3: vm4 = vam4: vs1 = vas1: vs2 = vas2: vs3 = vas3: vs4 = vas4ărm1 = rvm1: rm2 = rvm2: rm3 = rvm3: rm4 = rvm4: rs1 = rvs1: rs2 = rvs2: rs3 = rvs3: rs4 = rvs4: kpt = kpităeve1 = ev1: eve2 = ev2: q = 0: x = o: y = p: s = u: kpit = 0ăNEXT qpăIF pe > 1 OR osat > 1 THEN ERASE m$ăIF uusi = 1 THEN 75ăGOSUB 1000ăNEXT qgă75 IF pe = 1 AND osat = 1 THEN INPUT "Same course gain? (y/n) "; r$: IF r$ = "y" OR r$ = "" THEN uusi = 1: tm = 0: mm = 0: vm1 = vam1: vm2 = vam2: vm3 = vam3: vm4 = vam4: vs1 = vas1: vs2 = vas2: vs3 = vas3: vs4 = vas4: rm1 = rvm1: rm2 = rvm2: rm3 = rvm3: rm4 = rvm4: rs1 = rvs1: rs2 = rvs2: rs3 = rvs3: rs4 = rvs4: kpt = kpit: eve1 = ev1: eve2 = ev2: q = 0: x = o: y = p: s = u: kpit = 0: GOTO 33ăINPUT "New competition ? (y/n)"; r$: IF r$ = "y" OR r$ = "" THEN RUNăSLEEP 2ă256 SCREEN 0: CLSăăLOCATE 1, 1ăPRINT "Labyrinth-O   2.20             J.Ryyppo 1994"ăPRINTă257 REMăPRINT "      "ăPRINT "      See you in Kouvola! ( We will arrange FIN5, 5-event O-week -96)"ăPRINT "      Keep on practicing !!!": SYSTEMăă20 IF m$(x, y) = "1" AND q = 0 THEN : q = 1: t2 = TIMERăIF m$(x, y) = "2" AND q = 1 THEN q = 2: t3 = TIMERăIF m$(x, y) = "3" AND q = 2 THEN q = 3: t4 = TIMERăIF m$(x, y) = "m" AND q = 3 THEN t5 = TIMER: EN = 2: RETURNăCLSăIF q = 3 THEN sr$ = " FINISH":  ELSE : sr$ = STR$(q + 1)ăPRINT "Next goal :"; sr$ăIF W$ = "y" THEN e$ = N$(1, 3): N$(1, 3) = "A": PRINT "XXXXXXXXX": FOR j = 0 TO 3: PRINT "XXX"; : FOR i = 0 TO 2: PRINT LEFT$(N$(i, j), 1); : NEXT: PRINT "XXX": NEXT: PRINT "XXXXXXXXX": N$(1, 3) = e$ăIF N$(1, 2) = b$ AND N$(0, 2) <> b$ OR N$(0, 3) = b$ AND N$(1, 2) = b$ OR N$(0, 2) <> b$ OR N$(0, 3) <> b$ AND N$(1, 2) <> b$ THEN LINE (50, 37)-(50, 442) 'vasen pystyăIF N$(1, 2) <> b$ AND N$(1, 1) = b$ AND N$(0, 1) <> b$ OR N$(1, 2) <> b$ AND N$(0, 2) = b$ AND N$(1, 1) = b$ OR N$(1, 2) <> b$ AND N$(0, 2) <> b$ AND N$(1, 1) <> b$ OR N$(1, 2) <> b$ AND N$(0, 2) = b$ AND N$(1, 1) <> b$ AND N$(0, 1) <> b$ THEN LINE (170, 128)-(170, 352)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(1, 0) = b$ AND N$(0, 0) <> b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(0, 1) = b$ AND N$(1, 0) = b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(0, 1) <> b$ AND N$(1, 0) <> b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(0, 1) = b$ AND N$(1, 0) <> b$ AND N$(0, 0) <> b$ THEN LINE (241, 180)-(241, 299)ăIF N$(1, 2) = b$ AND N$(2, 2) <> b$ OR N$(2, 3) = b$ AND N$(1, 2) = b$ OR N$(2, 2) <> b$ OR N$(2, 3) <> b$ AND N$(1, 2) <> b$ THEN LINE (590, 38)-(590, 442)   'oikea pystyăIF N$(1, 2) <> b$ AND N$(1, 1) = b$ AND N$(2, 1) <> b$ OR N$(1, 2) <> b$ AND N$(2, 2) = b$ AND N$(1, 1) = b$ OR N$(1, 2) <> b$ AND N$(2, 2) <> b$ AND N$(1, 1) <> b$ OR N$(1, 2) <> b$ AND N$(2, 2) = b$ AND N$(1, 1) <> b$ AND N$(2, 1) <> b$ THEN LINE (470, 128)-(470, 352)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(1, 0) = b$ AND N$(2, 0) <> b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(2, 1) = b$ AND N$(1, 0) = b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(2, 1) <> b$ AND N$(1, 0) <> b$ OR N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(2, 1) = b$ AND N$(1, 0) <> b$ AND N$(2, 0) <> b$ THEN LINE (399, 180)-(399, 299)ăIF N$(1, 2) <> b$ AND N$(0, 2) = b$ THEN LINE (50, 37)-(170, 128): LINE (50, 442)-(170, 352): IF LEN(N$(1, 2)) > 1 THEN LINE (90, 220)-(140, 225)'vasen valivăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(0, 1) = b$ THEN LINE (170, 128)-(241, 180):  LINE (170, 352)-(241, 299): IF LEN(N$(1, 1)) > 1 THEN LINE (194, 227)-(217, 230)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(1, 0) <> b$ AND N$(0, 0) = b$ THEN LINE (241, 180)-(280, 212): LINE (241, 299)-(280, 266): IF LEN(N$(1, 0)) > 1 THEN LINE (253, 232)-(267, 234)ăIF N$(1, 2) <> b$ AND N$(2, 2) = b$ THEN LINE (590, 38)-(470, 128): LINE (590, 442)-(470, 352): IF LEN(N$(1, 2)) > 1 THEN LINE (550, 220)-(500, 225) 'oikea ylavvăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(2, 1) = b$ THEN LINE (470, 128)-(399, 180): LINE (470, 352)-(399, 299): IF LEN(N$(1, 1)) > 1 THEN LINE (446, 227)-(413, 230)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(1, 0) <> b$ AND N$(2, 0) = b$ THEN LINE (399, 180)-(357, 212): LINE (399, 299)-(357, 266): IF LEN(N$(1, 0)) > 1 THEN LINE (387, 232)-(373, 234)ăIF N$(1, 2) = b$ THEN LINE (50, 37)-(590, 37): LINE (50, 442)-(590, 442): IF LEN(N$(1, 3)) > 1 THEN LOCATE 14, 15: PRINT N$(1, 3)'kattoăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(1, 0) = b$ THEN LINE (241, 180)-(399, 180): LINE (241, 299)-(399, 299): IF LEN(N$(1, 1)) > 1 THEN LINE (290, 228)-(350, 228)ăIF N$(1, 2) <> b$ AND N$(1, 1) = b$ THEN LINE (170, 128)-(470, 128): LINE (170, 352)-(470, 352): IF LEN(N$(1, 2)) > 1 THEN LINE (250, 219)-(390, 219)ăIF N$(0, 3) = b$ THEN LINE (50, 37)-(0, 0): LINE (50, 442)-(0, 480)  'nurkatăIF N$(2, 3) = b$ THEN LINE (590, 37)-(640, 0): LINE (590, 442)-(640, 480)ăIF N$(0, 3) <> b$ AND N$(0, 2) = b$ THEN LINE (50, 37)-(0, 37): LINE (50, 442)-(0, 442) 'vasenylahaaraăIF N$(1, 2) <> b$ AND N$(0, 2) <> b$ AND N$(0, 1) = b$ THEN LINE (170, 128)-(50, 128): LINE (170, 352)-(50, 352)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(0, 1) <> b$ AND N$(0, 0) = b$ THEN LINE (241, 180)-(170, 180): LINE (241, 299)-(170, 299)ăIF N$(2, 3) <> b$ AND N$(2, 2) = b$ THEN LINE (590, 38)-(640, 38): LINE (590, 442)-(640, 442)     'oikea ylahaaraăIF N$(1, 2) <> b$ AND N$(2, 2) <> b$ AND N$(2, 1) = b$ THEN LINE (470, 128)-(590, 128): LINE (470, 352)-(590, 352)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND N$(2, 1) <> b$ AND N$(2, 0) = b$ THEN LINE (399, 180)-(470, 180): LINE (399, 299)-(470, 299)ăIF N$(1, 2) <> b$ AND N$(1, 1) <> b$ AND LEFT$(N$(1, 0), 1) <> " " AND N$(1, 0) <> b$ THEN LINE (315, 280)-(325, 280): LINE (313, 287)-(327, 287): LINE (327, 287)-(325, 280): LINE (313, 287)-(315, 280): LINE (313, 287)-(325, 281): LINE (319, 287)-(325, 284) 'rastităIF N$(1, 2) <> b$ AND LEFT$(N$(1, 1), 1) <> " " AND N$(1, 1) <> b$ THEN LINE (309, 324)-(332, 324): LINE (304, 334)-(337, 334): LINE (309, 324)-(304, 334): LINE (337, 334)-(332, 324): LINE (304, 334)-(332, 325): LINE (321, 334)-(335, 329): LINE (314, 334)-(333, 327): LINE (326, 334)-(335, 332)ăIF LEFT$(N$(1, 2), 1) <> " " AND N$(1, 2) <> b$ THEN LINE (303, 389)-(337, 389): LINE (295, 405)-(345, 405): LINE (295, 405)-(303, 389): LINE (345, 405)-(337, 389): LINE (295, 405)-(337, 390): LINE (316, 405)-(340, 398): LINE (306, 405)-(339, 394): LINE (326, 405)-(342, 401)ăIF v$ <> "y" THEN 21ăIF s = 3 THEN LINE (470, 442)-(445, 400): LINE (470, 442)-(475, 435): LINE (470, 442)-(457, 437)ăIF s = 1 THEN LINE (465, 442)-(440, 400): LINE (440, 400)-(453, 405): LINE (440, 400)-(435, 407)ăIF s = 2 THEN LINE (425, 421)-(485, 421): LINE (425, 421)-(439, 427): LINE (425, 421)-(437, 416)ăIF s = 4 THEN LINE (425, 421)-(485, 421): LINE (485, 421)-(471, 415): LINE (485, 421)-(476, 428)ă21 RETURNăă350 COLOR 7: INPUT "Dropping out? (y/n) "; kes$ăIF kes$ = "n" THEN RETURNăEN = 1ăINPUT "Exit to dos (y/n) "; kes$ăIF kes$ = "y" THEN 256ăRETURNăă400 CLS : COLOR 1ăFOR j = 2 TO 27: PRINT : FOR i = 2 TO 70ăIF LEFT$(m$(i, j), 1) <> "" AND LEFT$(m$(i, j), 1) <> b$ THEN COLOR 3ăPRINT LEFT$(m$(i, j), 1);ăCOLOR 1: NEXT: NEXT: COLOR 4ăLINE (4 + (x1 - 2) * 8, 8 + (y1 - 1) * 16)-(4 + (x2 - 2) * 8, 8 + (y2 - 1) * 16)ăLINE (4 + (x2 - 2) * 8, 8 + (y2 - 1) * 16)-(4 + (x3 - 2) * 8, 8 + (y3 - 1) * 16)ăLINE (4 + (x3 - 2) * 8, 8 + (y3 - 1) * 16)-(4 + (x4 - 2) * 8, 8 + (y4 - 1) * 16)ăLINE (4 + (x4 - 2) * 8, 8 + (y4 - 1) * 16)-(4 + (o - 2) * 8, 8 + (p - 1) * 16)ăx = 4 + (o - 2) * 8: y = 8 + (p - 1) * 16ăa = LEN(rtt$): tutu = TIMER: COLOR 7ăFOR z = 1 TO aăWHILE TIMER < tutu + .02ăWENDătutu = TIMERăs = VAL(MID$(rtt$, z, 1))ăIF s = 0 THEN COLOR 2: LINE (x - 5, y - 5)-(x + 5, y + 5): LINE (x + 5, y - 5)-(x - 5, y + 5): COLOR 7: IF kl$ = "y" OR ml$ = "y" THEN BEEPăIF s = 1 THEN LINE (x, y)-(x, y - 16): LINE (x, y - 16)-(x - 2, y - 10): LINE (x, y - 16)-(x + 2, y - 10): y = y - 16ăIF s = 2 THEN LINE (x, y)-(x + 8, y): LINE (x + 8, y)-(x + 4, y - 2): LINE (x + 8, y)-(x + 4, y + 2): x = x + 8ăIF s = 3 THEN LINE (x, y)-(x, y + 16): LINE (x, y + 16)-(x - 2, y + 10): LINE (x, y + 16)-(x + 2, y + 10): y = y + 16ăIF s = 4 THEN LINE (x, y)-(x - 8, y): LINE (x - 8, y)-(x - 4, y - 2): LINE (x - 8, y)-(x - 4, y + 2): x = x - 8ăNEXTăPRINT : PRINT " Press  'n'"ăWHILE INKEY$ <> CHR$(110)ăWEND: CLSăRETURNăă500 CLS : PRINT "Your PCs speed:"; vnk; "    (486/66 or faster  = 1)"ăPRINT "      Select level:    (spd is the speed level of the ghost runners) "ăPRINT "      1:         E      spd = "; INT(.65 * vnk * 100) / 100; "     distance 100-130"ăPRINT "      2:         A      spd = "; vnk; "   distance  70 - 90"ăPRINT "      3:         C      spd = "; 2.5 * vnk; "      distance 50 - 75"ăPRINT "      4:      SPRINT    spd = "; INT(.6 * vnk ^ 1.5 * 100) / 100; "     distance 40 - 52"ăINPUT "              (1-4, enter= 1) "; puoliăăIF puoli = 1 OR puoli = 0 THEN puoli = 50: vk = .65 * vnkăIF puoli = 2 THEN puoli = 35: vk = vnkăIF puoli = 3 THEN puoli = 25: vk = vnk * 2.5ăIF puoli = 4 THEN puoli = 20: vk = vnk ^ 1.5 * .6ăINPUT "      Do you want to change the speed of the ghost runners (spd) (y/n)"; v$ăIF v$ = "y" THEN 502 ELSE : GOTO 503ăă502 PRINT "      Bigger spd makes them less speedy."ăINPUT "      Type the new spd (0- ) "; vkăIF vk < 0 THEN 502ăIF vk > 0 THEN vk = vkă503 vk = vk * .6: INPUT "      Do you want to use compass ? (y/n), enter='y') "; v$ăIF v$ <> "n" THEN v$ = "y"ăREM INPUT "      Haluatko kayttaa apukartaa? (k/e, oletus 'e') "; w$ăW$ = "n": REM IF w$ <> "y" THEN w$ = "n"ăINPUT "      X mode. (Your location will be marked with letter X ? (y/n, enter 'n') "; r$ăIF r$ <> "y" THEN r$ = "n"ăIF r$ = "y" THEN g = 1:  ELSE : g = 0ăINPUT "      Beeps (y/n, enter = 'n') "; kl$ăml$ = kl$ăRETURNă550 CLS : INPUT "      Do you want to use compass ? (y/n), enter='y' "; v$ăIF v$ <> "n" THEN v$ = "y"ăREM INPUT "      Haluatko kayttaa apukarttaa? (k/e, oletus 'e') "; W$ăW$ = "n": REM IF W$ <> "y" THEN w$ = "n"ăINPUT "      X mode. (Your location will be marked with letter X ? (y/n, enter 'n')"; r$ăIF r$ <> "y" THEN r$ = "n"ăIF r$ = "y" THEN g = 1:  ELSE : g = 0ăINPUT "      Beeps (y/n) enter ='n' "; kl$ăml$ = kl$ăRETURNăăDATA Kun ei tee mitaan - ei tee mitaan vaarinăDATA ----> E X I T ---->,<---- E X I T ----,<--- Rastille ,----> RastilleăDATA UMPIKUJA    ----->,<---- UMPIKUJA,Killroy was here,Kysyva tielle eksyyăDATA Killroy was here,Turha yrittaa eksyt kuitenkin!ăDATA Neurovelho suoraviivaa,Kello kay - HOP-HOP,HYVa SUOMI,Johdat 15 sekunnilla min,Paina - paina  -Jalle karkaa!ăDATA <--- VARAULOSKaYNTI,  VARAULOSKaYNTI --->,Tupakointi kielletty,No SmokingăDATA Sahkopaakeskus,  Hairioita magneettikentassa - kompassi ei toimi.ăDATA Pyykkituvan kaytto vain talon asukkaille,Varo! Lattia vahattu!ăDATA Opaskarttoja saatavana INFO-pisteesta,One Way  ---->,<---- One WayăDATA Toll Road - 20 FIM, Pysakointi kielletty, Tyhjakaynti kielletyăDATA Tunneli rakenteilla - kulku omalla vastuulla.,!!! Edessa miinakentta !!!ăDATA Maali suljetaan minuutin kuluttua.,Yrittaisit edes!,Luvaton oleskelu kiellettyăDATA Tessun Baari- Auki aina 03.30 asti.,ALE-ALE- Kybernetiikkaa sikahalvalla -ALE-ALEăDATA Keijoa!! - Taalta sita saa,Hermoratahieroja Pentti Hirvo ark.9-16ăDATA Varo koiraa !, Paasy kiellettyăDATA Ei mopoille (<=386SX),Onko kadessasi Pro -kartta?,Onko elaman tarkoitus 42?ăDATA Porilainen paivassa pitaa mielen virkeana, Oletteko te humalassa??ăDATA Sotilasalue - Paasy kielletty, Taalta yrttikeijo - vain 41 FIM!ăDATA Muista hana!,Meilta teho-rasvaimu - jopa 5 kg/min!!!, <----- Vaestonsuoja, Vaestonsuoja ---->,,,51ă1000 SCREEN 12: CLS : RANDOMIZE TIMERăăIF pe - 1 < 1 THEN tos(1, qg) = (6 + RND * 4) * pit * vk: tyh(1) = tyh(1) + tos(1, qg): pe$(1) = "Ylermi Yksjalka"ăIF pe - 1 < 2 THEN tos(2, qg) = (5 + RND * 4) * pit * vk: tyh(2) = tyh(2) + tos(2, qg): pe$(2) = "Leevi Lahna "ăIF pe - 1 < 3 THEN tos(3, qg) = (4 + RND * 3) * pit * vk: tyh(3) = tyh(3) + tos(3, qg): pe$(3) = "P Saukko "ăIF pe - 1 < 4 THEN tos(4, qg) = (4 + RND * 3) * pit * vk: tyh(4) = tyh(4) + tos(4, qg): pe$(4) = "Pasi Kuikka "ăIF pe - 1 < 5 THEN tos(5, qg) = (3 + RND * 3) * pit * vk: tyh(5) = tyh(5) + tos(5, qg): pe$(5) = "Pentti Hirvo "ăIF pe - 1 < 6 THEN tos(6, qg) = (3 + RND * 3) * pit * vk: tyh(6) = tyh(6) + tos(6, qg): pe$(6) = "Klonkku "ăIF pe - 1 < 7 THEN tos(7, qg) = (2.8 + RND * 2.5) * pit * vk: tyh(7) = tyh(7) + tos(7, qg): pe$(7) = "Mr. Hyde "ăIF pe - 1 < 8 THEN tos(8, qg) = (2.5 + RND * 2.5) * pit * vk: tyh(8) = tyh(8) + tos(8, qg): pe$(8) = "Tri Jekyll "ăIF pe - 1 < 9 THEN tos(9, qg) = (2.2 + RND * 1.5) * pit * vk: tyh(9) = tyh(9) + tos(9, qg): pe$(9) = "Ariadne "ăIF pe - 1 < 10 THEN tos(10, qg) = (2 + RND * 2) * pit * vk: tyh(10) = tyh(10) + tos(10, qg): pe$(10) = "Ford Perfect "ăIF pe < 11 THEN tos(11, qg) = (1.8 + RND * 3) * pit * vk: tyh(11) = tyh(11) + tos(11, qg): pe$(11) = "Harri Hazardi "ăIF pe < 12 THEN tos(12, qg) = (2 + RND * 1) * pit * vk: tyh(12) = tyh(12) + tos(12, qg): pe$(12) = "Bilbo Reppuli "ăIF pe < 13 THEN tos(13, qg) = (1.9 + RND * 1.5) * pit * vk: tyh(13) = tyh(13) + tos(13, qg): pe$(13) = "Pirjo Piikkari "ăIF pe < 14 THEN tos(14, qg) = (1.8 + RND * 1.2) * pit * vk: tyh(14) = tyh(14) + tos(14, qg): pe$(14) = "Oiva Reitti "ăIF pe < 15 THEN tos(15, qg) = (1.7 + RND * 1.1) * pit * vk: tyh(15) = tyh(15) + tos(15, qg): pe$(15) = "Tapio Aarnimetsa "ăIF pe < 16 THEN tos(16, qg) = (1.6 + RND * 1) * pit * vk: tyh(16) = tyh(16) + tos(16, qg): pe$(16) = "Noand Rapidshill "ăIF pe < 17 THEN tos(17, qg) = (1.55 + RND * 1.2) * pit * vk: tyh(17) = tyh(17) + tos(17, qg): pe$(17) = "Matti Reijonen "ăIF pe < 18 THEN tos(18, qg) = (1.6 + RND * .8) * pit * vk: tyh(18) = tyh(18) + tos(18, qg): pe$(18) = "Sari Kallinen "ăIF pe < 19 THEN tos(19, qg) = (1.5 + RND * .8) * pit * vk: tyh(19) = tyh(19) + tos(19, qg): pe$(19) = "Jarl Gripenberg "ăăăRESTORE 1100: i = INT(RND * 13 + 1): FOR j = 1 TO i: READ ratam$: NEXTăFOR i = 0 TO 19: ii = 999999999ăFOR j = 0 TO 19ăIF tyh(j) < ii AND jro%(j) = 0 THEN iii = j: ii = tyh(j)ăNEXT: jro%(iii) = i + 1: NEXTăFOR i = 0 TO 19: jr%(jro%(i) - 1) = i: NEXT: ERASE jro%ăăFOR i = 0 TO 19: ii = 999999999ăFOR j = 0 TO 19ăIF tos(j, qg) < ii AND jro%(j) = 0 THEN iii = j: ii = tos(j, qg)ăNEXT: jro%(iii) = i + 1: NEXTăPRINT : PRINT "    TULOKSET:          Course setter: "; ratam$ăPRINT " The speed level of the ghosts was "; vk / .6; "   Level: ";ăăIF puoli = 50 THEN PRINT "E"ăIF puoli = 35 THEN PRINT "A"ăIF puoli = 25 THEN PRINT "C"ăIF puoli = 20 THEN PRINT "SPRINT":  ELSE : PRINTăLOCATE 4, 1: PRINT "   Event:"ăFOR i = 1 TO qg: LOCATE 4, 6 * i + 21: PRINT " "; i: NEXT: LOCATE 4, 22 + 6 * i: PRINT "Pos.": LOCATE 4, 29 + 6 * i: PRINT "Total:"ăFOR i = 0 TO 19ăPRINT MID$(STR$(i + 1) + ".  ", 2, 3)ăLOCATE 5 + i, 4: PRINT pe$(jr%(i))ăFOR j = 1 TO qg:ăLOCATE 5 + i, 6 * j + 22:ăttm = INT(tos(jr%(i), j) / 60): tts = INT(tos(jr%(i), j) - ttm * 60)ăPRINT MID$(STR$(ttm), 2, LEN(STR$(ttm)) - 1) + ":"; MID$(STR$(tts), 2, LEN(STR$(tts)) - 1): NEXT jăLOCATE 5 + i, 6 * j + 23ăttm = INT(tyh(jr%(i)) / 60): tts = INT((tyh(jr%(i)) - ttm * 60) * 100) / 100ăPRINT MID$(STR$(jro%(jr%(i))) + ".  ", 2, 3)ăLOCATE 5 + i, 6 * j + 29: PRINT MID$(STR$(ttm), 2, LEN(STR$(ttm)) - 1) + ":"; MID$(STR$(tts), 2, LEN(STR$(tts)) - 1)ăNEXT iăPRINT "                               Press  'n'"ăERASE jr%, jro%ăFOR i = 0 TO 19: IF i > pe THEN pe$(i) = ""ăNEXT: ratam$ = ""ăWHILE INKEY$ = CHR$(110)ăWENDăWHILE INKEY$ <> CHR$(110)ăWENDăRETURNăăVirheet:ă   ă       SCREEN 0: CLS : PRINT : PRINT "   Your PC wanted a coffee break !!!": SYSTEMăăăENDă1100 DATA C=64,VIC-20,Neuromancer,ESKO,Wintermute,Kannel,Mato,Mopo,Lisa,HAL 9000,IBM-PC,Omena,Lahna,,,,ăă1200 SCREEN 12: tapu = TIMER: COLOR 0: CLS : FOR k = 1 TO 10: CLSăPRINT "XXX": PRINT "XXXXXXXXX":ă LINE (50, 37)-(50, 442) 'vasen pystyă LINE (170, 128)-(170, 352)ă LINE (241, 180)-(241, 299)ă LINE (590, 38)-(590, 442)   'oikea pystyă LINE (470, 128)-(470, 352)ă LINE (399, 180)-(399, 299)ă LINE (50, 37)-(170, 128): LINE (50, 442)-(170, 352): LINE (90, 220)-(140, 225)'vasen valivă LINE (170, 128)-(241, 180):  LINE (170, 352)-(241, 299): LINE (194, 227)-(217, 230)ă LINE (241, 180)-(280, 212): LINE (241, 299)-(280, 266):  LINE (253, 232)-(267, 234)ă LINE (590, 442)-(470, 352):  LINE (550, 220)-(500, 225) 'oikea ylavvă LINE (470, 128)-(399, 180): LINE (470, 352)-(399, 299): LINE (446, 227)-(413, 230)ă LINE (399, 180)-(357, 212): LINE (399, 299)-(357, 266):  LINE (387, 232)-(373, 234)ă LINE (50, 442)-(590, 442)ă LINE (241, 180)-(399, 180): LINE (241, 299)-(399, 299):  LINE (290, 228)-(350, 228)ă LINE (170, 352)-(470, 352):  LINE (250, 219)-(390, 219)ă LINE (50, 37)-(0, 0): LINE (50, 442)-(0, 480)  'nurkată LINE (590, 37)-(640, 0): LINE (590, 442)-(640, 480)ă LINE (50, 37)-(0, 37): LINE (50, 442)-(0, 442) 'vasenylahaaraă LINE (170, 128)-(50, 128): LINE (170, 352)-(50, 352)ă LINE (241, 180)-(170, 180): LINE (241, 299)-(170, 299)ă LINE (590, 38)-(640, 38): LINE (590, 442)-(640, 442)     'oikea ylahaaraă LINE (470, 128)-(590, 128): LINE (470, 352)-(590, 352)ă LINE (399, 180)-(470, 180): LINE (399, 299)-(470, 299)ă LINE (315, 280)-(325, 280): LINE (313, 287)-(327, 287): LINE (327, 287)-(325, 280): LINE (313, 287)-(315, 280): LINE (313, 287)-(325, 281): LINE (319, 287)-(325, 284) 'rastită LINE (309, 324)-(332, 324): LINE (304, 334)-(337, 334): LINE (309, 324)-(304, 334): LINE (337, 334)-(332, 324): LINE (304, 334)-(332, 325): LINE (321, 334)-(335, 329): LINE (314, 334)-(333, 327): LINE (326, 334)-(335, 332)ă LINE (295, 405)-(345, 405): LINE (295, 405)-(303, 389): LINE (345, 405)-(337, 389): LINE (295, 405)-(337, 390): LINE (316, 405)-(340, 398): LINE (306, 405)-(339, 394): LINE (326, 405)-(342, 401)ăă LINE (470, 442)-(475, 435): LINE (470, 442)-(457, 437)ă LINE (465, 442)-(440, 400): LINE (440, 400)-(453, 405): LINE (440, 400)-(435, 407)ă LINE (425, 421)-(485, 421): LINE (425, 421)-(439, 427): LINE (425, 421)-(437, 416)ă LINE (425, 421)-(485, 421): LINE (485, 421)-(471, 415): LINE (485, 421)-(476, 428)ăăNEXT: CLSăFOR k = 1 TO 3ăFOR j = 2 TO 27: PRINT : FOR i = 2 TO 70ăPRINT "x";ăNEXT: NEXTăCLSăNEXTăCOLOR 7ătapu = TIMER - tapuăRETURNăă1300 CLS : RANDOMIZE TIMER: PRINT "                       LABYRINTH-ORIENTEERING"ăb$ = CHR$(219): l = 0ăFOR x = 0 TO 75: FOR y = 0 TO 40: m$(x, y) = b$: NEXTăIF INKEY$ <> "" THEN 1302ăNEXTăFOR i = 1 TO 6ăx = INT(RND * 67) + 3ăy = INT(RND * 19) + 3ăm$(x, y) = " ": NEXTăLOCATE 1, 1ăFOR j = 2 TO 22: PRINT : FOR i = 2 TO 70ăPRINT LEFT$(m$(i, j), 1);ăNEXT: NEXT: PRINT "                          PRESS A BUTTON."ă1306 REMă1301 t = t + 1: x = INT(RND * 67) + 3ăy = INT(RND * 19) + 3ăIF t > 1000 THEN 1309ăIF INKEY$ <> "" THEN 1302ăIF m$(x, y) = " " THEN GOTO 1301ăIF m$(x - 1, y) <> " " AND m$(x, y - 1) <> " " AND m$(x + 1, y) <> " " AND m$(x, y + 1) <> " " THEN 1301ăIF m$(x - 1, y) = " " AND m$(x - 1, y - 1) = " " AND m$(x, y - 1) = " " THEN 1301ăIF m$(x, y - 1) = " " AND m$(x + 1, y - 1) = " " AND m$(x + 1, y) = " " THEN 1301ăIF m$(x + 1, y) = " " AND m$(x + 1, y + 1) = " " AND m$(x, y + 1) = " " THEN 1301ăIF m$(x, y + 1) = " " AND m$(x - 1, y + 1) = " " AND m$(x - 1, y) = " " THEN 1301ăm$(x, y) = " ": t = 0: LOCATE y, x - 1: PRINT " "ăl = l + 1: IF l > 1000 THEN 1309ăIF INKEY$ = "" THEN 1306ă1302 l = 0: RUN 99ă1309 FOR a = 1 TO 1000: NEXTăt = TIMER: FOR a = 1 TO 5000: NEXT:ăs = TIMER - t: f = 100 * 1 / săăLOCATE 1, 1ăFOR j = 2 TO 22: PRINT : FOR i = 2 TO 70ăPRINT LEFT$(m$(i, j), 1);ăNEXT: NEXT: PRINT "                         PRESS A BUTTON."ă1310 i = 2: j = 1: x1 = INT(RND * 67) + 3ăy1 = INT(RND * 19) + 3ăx = INT(RND * 67) + 3: y = INT(RND * 19) + 3ăIF m$(x, y) <> " " THEN 1310ăIF m$(x1, y1) <> " " THEN 1310ăLOCATE y1, x1 - 1: PRINT "m": tutu = TIMERă1311 IF RND < .2 THEN s = INT(RND * 4) + 1ăIF INKEY$ <> "" THEN 1302ăIF s = 1 AND m$(x, y - 1) <> b$ THEN y = y - 1ăIF s = 2 AND m$(x + 1, y) <> b$ THEN x = x + 1ăIF s = 3 AND m$(x, y + 1) <> b$ THEN y = y + 1ăIF s = 4 AND m$(x - 1, y) <> b$ THEN x = x - 1ăIF x = i AND y = j THEN s = INT(RND * 4) + 1: GOTO 1311ă1313 FOR g = 1 TO f: NEXTăLOCATE j, i - 1: PRINT " "ăIF x = x1 AND y = y1 THEN BEEP: SLEEP 3: RUNăLOCATE y, x - 1: PRINT "*": i = x: j = yăGOTO 1311ăăMorry Kapitan                  PB VGA PALETTES                kapitam@ttown.apci.com         09-09-95 (00:00)       PB                     123  4331     VGAPALET.BAS'Here are some routines for messing with the 256 color VGA palette.  I wroteă'this early on while learning some x86 asm using PB's in-line assembler.ă'This certainly can be improved upon (how about using the les opcode?).ă'I compiled this into a .PBU and use it in a graphics library.ă'ă'ă'                       Program:       VGAPALET.BASă'                       Author:        Morry Kapitană'                       Compiler:      PowerBASIC 3.xă'                       Version:       0.9ă'                       Date:          9/9/95ă'ă'---------------------------------------------------------------------------ă'Routines to copy the existing VGA palette to a temprorary disk file, readă'a new palette from a disk file and load it into the palette registers, andă'reload the original palette.ă'---------------------------------------------------------------------------ăă$DYNAMICăDEFINT A-Zăă'---------------------------------------------------------------------------ă'Procedure:  SavePală'This routine saves the current VGA palette to a temprorary disk fileă'---------------------------------------------------------------------------ăSUB SavePal PUBLICăăDIM OldPal(767) AS BYTEăăArraySegment = VARSEG(OldPal(0))ăArrayOffset = VARPTR(OldPal(0))ăăă	 !    push ESăă	 !    mov  AX, ArraySegment         ; put address of where to storeă	 !    mov  ES, AX                   ; register data in ES:DXă	 !    mov  DX, ArrayOffset          ;ă	 !    xor  BX, BX                   ; set BX to zero -start at 1st regă	 !    mov  CX, 255                  ; get all 256 registersăă	 !    mov  AX, &h1017               ; load register data into arrayă	 !    int  &h10                     ;ăă	 !    pop  ESăăăOPEN "~OLDPAL.TMP" FOR BINARY AS #1    'Open a file in the default directoryăFOR posit = 0 TO 767                   'Write the palette data to the fileă    PUT #1, posit, OldPal(posit)ăNEXT posităCLOSE #1ăăEND SUBăăă'---------------------------------------------------------------------------ă'Procedure:  LoadPală'This routine loads the VGA palette with data from a file whose path andă'name is passed to the routine from the calling programă'---------------------------------------------------------------------------ăSUB LoadPal (palFile$) PUBLICăăDIM NewPal(767) AS BYTEăănewArraySeg = VARSEG(NewPal(0))ănewArrayOff = VARPTR(NewPal(0))ăăOPEN palFile$ FOR BINARY AS #1              'Open the file passed from userăFOR bytePos = 0 TO 767                      'Retrieve palette data from fileă    GET #1, bytePos, NewPal(bytePos)ăNEXT bytePosăCLOSE #1ăă	!   push   ESăă	!   mov    AX, newArraySeg               ; Seg of data array...ă	!   mov    ES, AX                        ; in ESă	!   mov    DX, newArrayOff               ; put array offset in DXă	!   xor    BX, BX                        ; set BX to 0 - start at 1st reg.ă	!   mov    CX, 255                       ; load all 256 registersăă	!   mov    AX, &h1012                    ; put array data into VGAă	!   int    &h10                          ; registersăă	!   pop    ESăăEND SUBăăă'---------------------------------------------------------------------------ă'Procedure:  RestorePală'Routine to reload the original VGA palette saved in a file in the currentă'directoryă'---------------------------------------------------------------------------ăSUB RestorePal  PUBLICăăDIM NewOldPal(767) AS BYTEăăoldArraySeg = VARSEG(NewOldPal(0))ăoldArrayOff = VARPTR(NewOldPal(0))ăăOPEN "~OLDPAL.TMP" FOR BINARY AS #1         'Open the temporary palette fileăFOR bytepos = 0 TO 767                      'Retrieve palette data from fileă    GET #1, bytepos, NewOldPal(bytepos)ăNEXT byteposăCLOSE #1ăKILL "~OLDPAL.TMP"                          'Delete the temproary fileăă	 !    push ESăă	 !    mov  AX, oldArraySeg               ; Seg of data array...ă	 !    mov  ES, AX                        ; in ESă	 !    mov  DX, oldArrayOff               ; put array offset in DXă	 !    xor  BX, BX                        ; set BX to 0 - start at 1st reg.ă	 !    mov  CX, 255                       ; load all 256 registersăă	 !    mov  AX, &h1012                    ; put array data into VGAă	 !    int  &h10                          ; registersăă	 !    pop  ESăăEND SUBăMartin Lindhe                  FLAME EFFECT                   m-35728@mailbox.swipnet.se     05-15-96 (18:00)       QB, QBasic, PDS        18   394      FLAME.BAS   ' Flame effect in QuickBASIC by Martin Lindheă' add DEFINT A-Z if you run it on a slow computer.ăăSCREEN 13ăFOR col = 0 TO 63ă    PALETTE col, colăNEXTăCOLOR 63ăDOăLOCATE 15, 18: PRINT "FLAMES"ăFOR y = 103 TO 111ă    FOR x = 136 TO 185ă        col = (POINT(x - 1, y) + POINT(x, y + 1)) / 2 - RND * 5ă        IF col < 0 THEN col = 0ă        PSET (x, y), colă    NEXTăNEXTăLOOPăJon Merkel                     SET BITPLANES                  FidoNet QUIK_BAS Echo          05-15-96 (15:41)       QB, QBasic, PDS        42   1291     BITPLANE.BAS   ' I thought you would like to see (and would not be offended) byă   ' seeing your code changed a bit. The speed increase is fantastic!ă   ' Noticed I changed the line command to a routine that sets theă   ' entire screen with random pixels. Change your code too if youă   ' want to compare speed. Compiled the new code takes 13 secondsă   ' to fill the entire screen. Your code took 2:31 seconds.ă   ' I wish I could take credit for this but a guy I know whoă   ' programs in ASM and PASCAL (Jon Merkel) looked over youră   ' code and came up with this. I am sure you would like toă   ' see it. I think I know you well enough to know you willă   ' not be offended. But rather amazed at the speed increase.ăăDECLARE SUB vPSET2 (x%, Y%, Culler%)ă DEFINT A-Ză SCREEN 12: CLSă Red% = 4: Green% = 2ă FOR Y% = 0 TO 479ă FOR x% = 0 TO 639ă   CALL vPSET2(x%, Y%, RND * 15)ă NEXT: NEXTă BEEP: SLEEPă SCREEN 0: WIDTH 80ă ENDăă SUB vPSET2 (x%, Y%, Culler%)ă ă DEF SEG = &HA000ă ă VideoOffset& = (Y% * 80&) + (x% \ 8)ă ă BitMask% = 1ă FOR J% = 1 TO ((x% AND 7) XOR 7): BitMask% = BitMask% * 2: NEXTă ă OUT &H3CE, 8: OUT &H3CF, BitMask%ă OUT &H3CE, 5: OUT &H3CF, 2ă ă BYTE% = PEEK(VideoOffset&): POKE VideoOffset&, Culler%ă ă OUT &H3CF, 0ă DEF SEGă ă END SUBăErika Schulze                  PB MANDELBROT SET              100775.2275@CompuServe.com     05-17-96 (18:17)       PB                     218  14225    MANDEL.BAS  'Please load/run under PB to extract MANDEL.ZIPăăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MANDEL.ZIP",4^6:Z&=10361:?STRING$(50,177);ăU"%up()%9%%%d-%E%T*EnM6bcO-%%%[8%%%/%%%%rf%sijq.Sy'yVD'h>]T]7vq-oăU"x9)LiS5BMnB<6e=j[Oj(jsTbZ9ufPrK05Vv?%+JJ[64omYwt;$(8+\uJJ]f*m\eăU"aAAqQ_FjpGXiX.(n)MRub_udqvzX+=d(8vP0c%wWSm6K-jk*T\qnk0P&$n=Z'+răU"NN_0;iC*jnE)#M<+Y^\YC(UG7,e^,R,(]GW=]uJ3GEu/=mE(cJ:+;fkYkaiHV\găU",zCJa[y,^vZ$QP%Mt7.oOdRK-ud;NQN6-1#Q0H*c%np2up4L?;x?I3*R;m5=P):ăU"5y^8zcZ,Q,>C3](2f\wQ0*(ZkFo$.]VslbwI5ZD%I_lS-Ji+J%U[glqJ%;z)uvNăU"Zq.*3OrCh5xvS<X79D'Ns)l.&E4hh5f?Wx_q6X(0jvAc4wjjZh]X,T)=yeDPf1păU".+]\_4z/[3LQHFkCJ8J.Ox*4J*HTu33zAebdJ^gA%(+P9DpSmic)tNSr1_KXZ3:ăU",GsG#Rc\gIwa>VA[Thcu))x1j%%tRzR,)U8M)hYiU60C<P6xck,:>RC%E[F?LF=ăU"\WoRCl+tc;Z;FCD?L$)2Rl4^Lk>UqVRX-NZ%^r;rLse&T$G7pe=Z%><^SWjak[)ăU"8;'0dV_*xu4=lVNa#k)xXdD+#^UNANe>KM'o?AB/L=Ar<Cy#4%P]Zf7hRZT4q*0ăU"qS9TC^^H(9qC*E^(mt0bqFuB:Vhr0r<B]wc,'='8lBbX+yna7Q1[1:R1gk/9r+măU"PeW>*LD.R=0YZt&21T/3_dy$Mk<9hL6,8(0ir/pB+k9t)B;JCJs$7T]&5%Tg:z6ăU"GSfgb,uO,-c[elxdRB;(4Elog57a-Vn=_81#jbgR&_=;$WXB'.w[HEHG+1+*WQ%ăU"WV&0P0Y;AN,x_C$^,^WqG;/NDiHy^J+A+sy.+jK5E<_1I[P*h*HA&K/wJqC-36%ăU"d')(?RAVSlUdAt'jvBMEU.[D-8VLH*e[8mb>/4hHBv?^t_Dewq8*mpY#U5u1X**ăU"Q+ER-h7)sG8)%jpDm880*srPTEn_Z#MYA1bga*[9cr99eA$di2XNSOHe-Hm03WtăU"(U)9A.S)2A+(%8D\\RSoLYp6-Cw3l0(Tb^6g4==Riicq\22/$^#;>N**po9pPoEăU";7RMN4l<es0slL08BIFR\E<%E34EtRM:A_(7:w.F+NZc[U&rITY3poh4/VH[p*răU"pmfVjq(o-+VzuT>ejca_Th*%z[-7V+?Sf1MkWv]&$ECr2QlneQX\F.zJeW'l*/*ăU"+nifsBcO.CTC&IR6+a:'j]=xN&#rVBC+5lJc5feQ:+0gn#Y\(NfQ,v:n2LRAi-păU"yL?A/1v0B3k)NlZ,Z#=HF/TfGe2QmF;3$\qpxc++&E-9*8?>s[AOJjW[p$%4F&=ăU":FgHClU>rY;v3L=jP7-eT_X3?=UqG>bY*V;qmcq-H:w;I%xBg//z4s[oG;J0uMjăU"BiYfTtUMjG+-M%THUtzR6EN'TVFEkKih&l=Na?;i2U&rZ/1&KKr>%'iE70ARL.lăU"Vw;A#>yA$$LM.Mh2trXpQP<4#:nBZEY$C-o7<LNQ=3.5Zj#_NtHACa9g8]TSDDwăU";ok'GJT#8#4qHRd*1c]eLBMqK+eV)#IdWA)4H?tgYb=.R2&(<[t2C412l,xjI#LăU",w2'=2YpwKY'hfA-GGB:aT2:<O+=qxBG1>GXto%#QPtPb0E'J=YVepw_tr-BAm(ăU"6A[Snw.I7thbV\3v6bNX(vXFWa1Ut(RZdoRLtYE:Zq]SO6TXFeV<o%'8wMi(38=ăU"\0Kn34%XhWm&]5d1ee+<=P+UJl/LwC^b]XvGoBO5&-oYQa$l9:4C[.ALuQdQ1g/ăU"-Iv&Dc7,fNCf<0HE9Dc1]/$tLh\dMgzF.T'dHVB;4b_<K66p<s*2%TsqscTeqsGăU")Iygt(j\F#-mlbyWe,>pr-:B6'2<Ik,NaA5$N+2GE&d:I93K/3%Q8nFCgSX%m&LăU"qLR-:pX\JSxk36[Mhp:Ww/(cF/xuCwbk[/Sbi*eE1X$wHT/n6D=W6,rK$QG<K]QăU"r5n&8WFHxNqH.=-Hu;,6rl,/CbM<%X:seRDv'&HS>xLEW#2UgekJ*4ag?u27BtKăU"umxYWb,MAZX<6H5,Gkq>CPIs'AdU32Os,F60:AMEm_fu0=mH[42Gz\s(,oav3')ăU"_ya^<*;s0Zp<E$*k5'=qsnET9tAya;B<\ff#5tAbT1PrlxIw?XQvMt-X>aL,_U?ăU"7qg744JnVUD>Z:A=p%?Q:b;B)KoN]apWIdpZ*tHL_+\pVAv'dM/WS(4-hI(pWimăU"w#tJwfDhvzN4h6(&2WCj=3Cx:Hq;9K7b$8kHjHJJVvudti/O=OUk*V(YM)0?YagăU"Ir56H_G'>c=?:sqidVP\Y273%j>'#%SB,w%;3Y0/E$.7IuiA(7-s\uKr<w$?4w*ăU"^_G:KVfA$tV/JYZ^-Fn^ER-^-$^o+R)_PTU*7Wc4$4rW4x(g2I,RR\WVktk>Qs6ăU"PF7W^]ul]I?qTu$G)S,p6afGJBP>]7a7SuInRYSxBs#WcN_7W.MUl$4nx#OKt3MăU"(_gdciF]6H$_^,lrLFRbumRuB_/MWDhub6lc,:aFZ+\08]wNwG_MarUrrR72Mt+ăU"cp-2oZQ]7.WsB]/&XXJS$^gtJ<pEi'F(]uP(vdW='XrLTBbptPSDd$Wl149jzU4ăU"zPtVe4_rhZY(jgpY:rem08_lEp+?Mmn7ELn&J'EXQ3?LM<r9M1MV>ZaQD98bWi4ăU"3ELtAMW&ANweJfF>>yLbpt\Dd4mXK#bEb;alGmGGTNs$.,Cl2^RgXKKr<[>x(%uăU"p()%9%%%[-%n%'*Ec3%s<9).%%73%%%0%%%%rf%sijq%VSgfOx.&<,>Sm5]w17xăU"M0TYkG_Kg]6\Kz]O.Ea'[*#>LYspFP&<UV[]jp8qBn\X:=#\msWFT%_u5,tEW\hăU"RhM(rC^.\O4jHl;MWW$$\J=Ftg,(Q)/[cpP##d:&JBXe/Pj_c\o21wMvsP5eqH0ăU"JF0]CWI;j;gUC,UXbLisV*-*fo\6LF.$(x_2[LS/WXMHRF(WnP,+#><;[ZUo0WbăU"Db63_K0s1C4Z^DWPTE0k&bcnq5i[uI)1di','+[VZ>L8=rfLU(XPgbR8J0vn\N2ăU"xxT+z\P\RF1PT<^xNxi83:a1ib5x)35R^Z0YNf_hO/$6FoT19A\6\HOMQqbUGyVăU"a?nrWND7^Jc/CeES,$)4lW695afWjG2)CjJX=CUEH$*pEpW+?f4U+RMX5/T<;kNăU"qBsv0[GHjQx2KZ)Q9U.0;*(5wJV%E;6iu]%f42=rdL'ScHGLu]7*#I7#IR<?&oWăU"=mTR6D=B%7OUfW2iaQxB/&8hNxlIQ1Pmg<3(>pXfe-kJ/d9k_emB;xUx2wZ$mB'ăU"8)SmYCVM$wP09TpLD\T5jY)0Ns%%K#%JDG$3LWQk)ei_Megj7hhi?:^2u78:v^zăU"#disD,FtW[5?lLf]+Wi\mu8o'%Lj)%T-BDmjMxMrx[\1P;HvDT_tQNkEyiYkd%DăU"e]%;DgLlE,lW77OV*lLR]ednC_x$zXobl9^GYaIxfUk%aevDP&[wss?KtFQ_L?QăU"n'p%6Ui/R*3u#IM.U*IdV6qg4)Gh>nsW#f?UUJgzQ8-xj.x([f.=Cv(%xc^nzf+ăU"Q,^&k_6xZADL&o7E&+gE$J2($XsL4peagtLaJCqjJTD$I7TZS>7c4b&\QYGGzhIăU"hI7Rl_rZ>6jYRAoqreJ[ODE+d]Xw0I#+mm;_.sJT*TqQH4.wR4f+MHnFDmMASINăU"uII/-t;gTbQ$F]c^>WqG_TtO]vzrLd#D>Jk[c9M6S0No*[,'013p520cI2SUg;tăU"0vZz;t?e7?o?+UHjBC]n^K]iGf,AeXA7;k<Xt9Z-iPUx%'l#0G2iYbNf0skSotzăU"fm0v7R#2YWW\$GbmECLd:x6IMxB$O*H6ZeMW7Q='<?Z94<RDGSNltPFg>L[&ICLăU"q$GYQQS._:OLeI\^O?f*SjuQng*M%k*v[(3q+l/.1u'RK7QxG;KO0l$hJ=:?\m7ăU"\$aJovSG(Qu$,M?NP&sY;neBWxA(OF0QAYeA8+o']PSd98/V1IvPW#;J/*q$4:dăU"6JaiAFoJbLa#x0HSsVN[WG-oZCKE.g6QVmCYmqL[OyDsaj+h?Ks*tLRF7'l)P&qăU"nvkL8ri>h3'NORv),/G(:;-X]iWwcx%&up(%)9%%%%-%nH%*E*-KPi[[)%%Y%3%ăU"%0%%%%r%fsij%qWSgRfx.&;<>Sm+5w17Nx0SY2k_a'9^ugO4s[4nN%Q\[t8Kt_'ăU"9[]V+[jp8lqnlRN.\#AGv_EzLmGEn&LaX$QH%rC&]\ojgjDRIk^_pfo2&ui/K-făU"AQ_W9<j$UV0^11$UMtCcYkt[Vw\3+<nGZ/UUjH6:;Z=It;IUXgg0LLu_5%x0UAlăU"U[_>Jmji.BV/\d7W/6fRJ[4j8IV<6EEsLVNbR$oS(U4h>.Epq;e,8k$&t_R:XsJăU"idrX2)6z8h$NExECUC(I'sq#qVBbS;TE1.n>jN8VO(L?lhjmiVQwPC]MQwZv%NVăU"hhpcjqc6DMo2<FIdgsK]4O:BzvYGr3+L9FAn1KOr8^YJ/COoHBD0,3VBY<WpggbăU"J>$nI'34==^lA6\M'rLJA5)MraBDbWMi$Nj5ceX]RSaPX;/HTne-?V&T%ZI++FaăU"ga5RPdK'x:3AX[TW[)Mh-oB8j.\G<^&\_*Tvqp8:,F,CV<1xiQg,^)k<H:tFIkQăU"<n:q\%0QF>/'kBK:9Ir-,DXlu$]r>>KH*TqRm1l#\>KRd/i*6a>]*H$dov#v<.[ăU"I<59V4a'3'NRdsC?5A>:Hi6L?Ca>rZupr>2'$iP\q,Fkd%np3[Az:4L4#d$-j.tăU"_#MuMsCml;f1Mz9VX7Z>hJG)52g1f%NYkd2#1C:65:D^Z?n9o2?Y&7Y.ejRusV2ăU"y&*<Nn9rLN3vcb;'I.y2xvn58f6Unl%k)S%9sdFD*x=nk[tbtDP7C-Be&CHHFl<ăU"'&<F<*+X=3s.j(u3iFew&G;B%/FvYp:\Ejw'TOvq9[f%5NnLqNwiuvOhTN<^-fCăU"OX*q9&GKNa1OWRQ.*IRD(A_p%xtr;=Ve?;1neR3*WE:3r3Vp<QE_7CTtL7GyTB\ăU"Gc(Ez/=Jh7aSf%at>.ou<IA<yj70efJGvgS4j*rI7?945XOBsT:G3rRMtCcf)sgăU"TT*kR)MLH<%2bnA_D*=liSaA(bCi^,mw4ZI&g0V^v3H^/XP5P8p*9_:LU#:a-b,ăU"wJvQNFs:v?3;9CmOUOjNO>6Y/4<(+ED=ybH+/H/6q.o318*2\(K5YVILx5m$U&căU"S5dL^p:o=9hq7k<S>M_GcH=BgiCNSeQNm-_Ysl4+(iV)AB6o4r6D+*=q\JllnVSăU"^[cUQGYj;[[>fGUu^SGd05*f>l%u:xu)A8:Bi*Agm2lfk<I>5fkcxg/RAwV4#poăU"sDE#JnJM^q:]LmB)IwwboWe/bi%f3ni9'XFi-QV8%/*G1^%>aT(6DB*bGnR&4%)ăU"**kCEe4Ap7^N/ljDvI6mrHWQ(wn/.irl,pY^E1aqh*Iae6+K5Aq*gDD<4ru<X<NăU"N2n)c_Im)rP&mHMcyL4fXdCCA4VJCLfT['VKLfG8ryu*%up()%9%%%[-%n%f*ERăU"_.8RG+%%%2:%%%0%%%%rf%sijq%XSgfOx.'<+tTm5]wAIw'<9Z)+gUKNAtAMdVaăU"/99iWcSKHWbc;_kT=uPaS:?Qsd>5*PEA,Q1/OTPcVlhq66$^$jiw\W^mF\baZ+;ăU"I4r0HJ=%&mp41?:Wmk24eBDM$sF-$4/ccj#ej#>T\R0]%mCCAB;8vXAW</Q>'dLăU"<h>,'n,h2r:uQ&<7oTdLCu'XB=B4Bm>oK^i>,8kf0^YOwb8;54Iwl8B9#n7&S'6ăU"GHiP\Bb\x4ol-_jbPVf1:H6UD-h#R5pJ*SQb<0N=-&wjNh3c*ie,CntpJG&?o8căU"hO1<4=eHY=/N8s:CDWyA\I->99sa?&H]K.>M5ztVOjEXJF-'JsHcShf4X\g-UJIăU"XTL6RUesE18Xnkx3JO0l/DLCQV\y(*KoKZ,FIeAM'Rb7]5E<1c6Eh>z8tmJ)8M<ăU"0258xZD$+f:m\4x&xyx_4]F:mjED0P42&e*,)%&n8t1IGX4=$A:TA3iUX'pVSeJăU"GY7w3Bq&0/J?0;A,)KhoAQ0FH?hV6QE/ao^9'guqp^UWNjsW>clH0*vzoC<1&yqăU")Q#.,_suy2=Yh:s%l2]8tUYx]9+_L8Vf3dXOKq6S;I#hfnDhnLDhDz;g3Q0G,UCăU"KfhC;H;jbiK%TYb$GCUy=H$^.Bm+0#ZZ;0);L-_C>Zl3b0Ix]$w=-gEbaDt'<YGăU"#e_ND2Y<H^+x;YK%NdXGg^Su/)_/l>v&arH=LaFb(Tb?$.s8_X.DKH%V>xlqSk>ăU"b(9/[$+klf>p'peFk&i;W6B).FRhD%lD.RVVduQXB4qpjbApbc24I:L_=7RfZxVăU"pWH/266ZP6\MUEH;Zsb9+JLaNY<%FyKtk$%xik/UVsT7Qi;KR&/03Zuiz:y_Ga%ăU"94;:m%fV=[u,Dw,acPZ4o*&2Vik*;s:pKL/49Y2*exB^mQ$>V3M'm_:^MrK([unăU"k.F[eO=>\1*U:M3wg1cl]DogOeLR#>XO>u;gnX.O7SQOx[Mp7DCM=k]0M7kl^UvăU"rkfV)\T*h;6\^q-4nl>s*kr;;v%hPNM]Qf2G<i4.,;TF9B3c:*;i?/4fA#OVZ)NăU"ezkg>Gc/3Y,hlgd2'y5A$Hk?9#]j6Ke=%uvG+hF'[Bq;iAo'8=FW]lXipo<u(_BăU"v8fo%FO47BIq#3V)'G>0l?rH0?g$Uama)5pwyW(3%2+kk^ChWbXD)$wb<Ad4Fg_ăU"(&GAM7Z;Y=%mGmt.GMZYj&J]lQWL;B:za<7*5ha6?bAC_fqMgN&%2)S^Oni(OnbăU"X1Sd;SoOPi*1WIo/:Dz<LLEa)+Ug/_2*xc5c6DdjQ)Rd1H3LWsol*)_M2a&J?mUăU"Q=TUGCtGmZaAI-E+7XH3s\2Rqzw'qGJs0(VEeWJL(]F)&gk:Y1)\85CM'YCI4RTăU"^Qy5&K?0p\<SwCmQ.U)oKtU&>?\%JIbyU5[O)NqUt13%UA[O8Q+.QBlL[pZ\[>JăU"/:fELOSQxF2K>TwwUX6,bcf=QY^cWNz9sjWT6:M2ZsrBrflY9.sxM?;uoOWax)căU"]r*L*'KOM8dtSh.oW3XHbUZFDX(yuCKGoV=*0DhiQs6SMwWv6$,+g/KHdg+VtSaăU"V=s^lE\o767Y6TU.-RJk37MA0Q2pD#8;<Wpw/K8s_)'+)Oq2Q:AB^<4-*(MQAY.ăU"sATP)PjA5wxyJi<g$]uSZgKfD$:Cpb?1\<rZ%.^Wni[0:vRj'28qU%dU<c5omnnăU"Em>Qum[^7+;;*?6Zho_[(,(>RcDT<6['g\^rdk(,q1+0R;uXDZE0BJH_4y2irUAăU"hS1$g*6h.$0f>OdVDE:XlTHE'>55B=k\*2KKQ$k7x&u.Hh/r<)vxh)GfZirRWM3ăU"LW_y5aD\IR<^-Y,z0dR0rG:\R$B13:mDgZ,$Yb3l^Td:1R.3SPQcjQFlQ$'JdI_ăU".?]jH;WsrT;Csn>2qSU?OgV<#5FZ[iti:%M,-qwndEAZTMR0L'L;hjqPcU;p^DfăU"J5<GCJoq?sE,7fS=(d&wuEeic00RKB<s^I<?3<&q:qX&B<yG'hCkV)+KXG=qH<#ăU"<Znrj+UvumDk6A^S/SiqtVG1qAH6sKmIwD^Z8pHb0kp6RebY9QrDBsHYjJtqqNNăU"TQ$Sap+1Tw_vX<0P-ugRUq%4up(%)9%%%%-%nH%*EGW=IH[#,%%#%?%%0%%%%r%ăU"fsij%qYSgRfx>(;(B[kL5MezKuD5,FFQ=EGPnfonc9?S8,O_MH9RAdDV$YO\[SpăU";XPoPv&Jk7HqPbn*+:6UXcVlrXfc64nWnm<RGAX2rD/<iei$U3g.*I)WM1G]>'RăU"QEtnH5f^pG4HZ?:Z:4H6jR8EN*<KlkZ5MVl$j3ZML'>.L?.#;\6vf0xt\q3#iERăU"$o[+\$w\k-oX*D.VEDt$4132WHsif)g>.XXPCnuNLj/>MQw*jjV:Tr>d]D5LOtSăU"sfPrX[632HNa9b40pES3Wiq_zJfNiI)'aAW3-On8&'4Bvur091n0lDL(0Wp:/UXăU"oMr75YAsF]?X]s82[:26Fs(pO=]^0YFIh4%;B2nn>]42;i7V1NoDL*375Urm(O[ăU"gOjHFWQ4AAg;)&YNa#M[Og[fbYUWa<WR+v9wQ&Oi>EH$p6F0DJ#cF-'?SB.RgM:ăU"AuUNYP8$/R((3V,w.U=1-R&][q7ISu-=KAM;/,T?>Rd(,f^sM]xO3&3Uo>,V=,6ăU"8X\$ZE:5V#EP]3d?:YE>Skw?pl^K/l]($q?WuaSw&B67'*))6pJ1FbpOI=[ee%măU"79MG,)V0EI_eFD.ng/l4[]iwi;[V28v-k)8fOqftM<?WSo'5++sJ#<IGPWpTQmoăU"$Hj'#mYaJcf1>VXSKL1C?=AVCjP*$qSOA4jOk5s)6?sn(b>Y:A0'kkf.B(7\<VSăU"aW5swc5$;tZe^mQmdBWDIKf4.etpbl6.W:-&fS)66DjxUzNF71K8WJ?(PJSj7NSăU"_?j5e*=D;.kNPP6&It2##apb^\IXM9(Im'5(cNiD]bMi'4dY0]BoB#CIsD^D'5kăU",YZJ7MON9-//gQi;[Vg,FMT=>\3[GFRXCcA]-6'jp)VO%haOCuGD-\ed-fw4s)căU"[v(tkb<Mi7J$2yx]:MzCi8.LVcy6A'2cK%]tb8;XP_Oz8Afk;?X=;_;_QcK_\=)ăU".Vpj0p:t8'K,k'2w#O:SS^383^u0[GD5,T'?zFDseYB]\Z:RBP&N_hGC8o2m]ipăU"TPyYexJpJwprN%8gCuD]OTd%T2?QG#WDR8zDrU=[oRBOA6J)et#_$9f_4Ou/XV=ăU">Bd\,1H'?G:RB((g/^\\q(ckiE=-9LRZWsuE1S4m$P68o=RAGl(Ij)AaJlN8BAvăU"/ZWXKNcW0*_t#f>#UxV6E8,:HHue?he:M:L_K][F8k5BVUj<qq$IU40-S%5O4$PăU"A2M4T%Vaf9A_Ok5;;<d#G,S>me#?21/MUi,N<t9%],\fJf/+AX0G'ckt-U9=Z>găU"/cC:\3+Q9=SH.\8sJW+qp;]pA*Hx0G3Y3'C->91Uufa[Jk7G&<NY/,a[)j9oYj?ăU"AC<K,T%6VbWofso13^LqzE,a/-&C1ZrQ=^T/=d$bxoL;Ygbb-j=rtk&;H.G>aQ;ăU"*4w6V$Owf2wn_Sgspe='389RaVR4(TlbLX:Gw^0=SLp)5ndlPllf4tE_BVn_]6xăU"D>$TA[GdG[RjG[#+3pi7iK?KUP['P&'6ML_N.;>\%*B_0NJ8B5&;<_4$M-Xk7X^ăU"tJYT1,bfLSPeqI<[+X]SOskQlGr?S))rd;QI5AA&EAQxqx-6(HT7Az7>[iYMG*3ăU"(KT19^**X8S$IQ&+grpj1OQNHG;h3PQUwxt>>EGqdnDo:cHxzlM=Sui'oCI]s)?ăU"'E&H;XhH)h[A^0FZoFpx\%;reXhHF96-%AoW^8,u1Fm&o*m3DGZ.n*D[u;k2TflăU"%VMck9qH8IZWj+G)0Bbp%u'a/>ze[2VZNk\Cj:Mkh**e#FZF^yXr^/9(#nVK#6$ăU"#\f4C;VWQ%<>yaFR0><:pI>[%.-T^k2eIgXE3cX^KF8KPHw'J6<'mQ?6bWK3#+MăU"oJ%?p$EDm\ImRTjPcc-6=LORRXU,,6q?>zDSc:K=+JU<=:+d1/#XBMfpV;Uz&7+ăU"[k>[A>=-,m;Ak\,vp+84S:Fd&9*&5G1WlP>6TT59$LSz,[YPPSy2Y_KSIX$&c,OăU"+MQu0%]iTMWE%nPlKH&S#P<Yh[4Y8DLC*jF40:#myTC,D3gC#g\.*#H0#0*73Y)ăU"jN0;&Di43jrO%]nTbwP*';B?D/2B&<?>pF;CY+^;d4grp:p*258(oK[[.Y,G1;săU"3'uf6/#e)1^?>js'AYQ;M_*<AEf0EZ$ulw$4r:n$CrMVxYEK$xcb)8xrX5W&MHmăU"0$D556sX3.X6%)*daKYhzcr8&PKr(-6g9F2rq?Zv^SK)eLP=FxAfNBY<sXP/q=SăU"R*OP\wi'x<chuA/Pair5LucX1(7qCkDiWGrJcZt%VaOCteUejdl#-8csp29XI(lăU"\f\$KXgM&-hs&-bf:z9N<3cY7X2w)<jmfeEZuA+L(/C&(wPwS'%u9FMVq/W5Vk^ăU"KFv&D)Uh(T)cx^SS>&:H]l'9n5_[,S]v9?P<dhU%TMA-RLcuV&-T:GaLU0UdN;NăU"X\s<.0.dMu;^]q7BH013WYT\:-(pAC'u(up%()9%%%%-%=n%*EsVg3F%p,%%'&>ăU"%%%0%%%%rfsi%jqZS[gfxFh(<B[m[5weHE]dw&hw7'/FeB^4/\E76[42?\-+m(aăU"TL4+jR)Qus7T]YhMLF^L<3b+ITr=uNwQs,jbS,f*,eqztN2$iSo_iq1]+*V6p6WăU"Q<u_=3:Heh+5+)_ao^f-$DjcdV^,V,XBpL\slLekDuG4djE>kquQ\7#DmXZ]Q&GăU"WD1C,N?3I[V[z53GG]^>+#=]qbv2dWS>WYbZ>S>[X6xdkKfB/>[Ib]1IU03QNNvăU"fa#twb>QD^oV4?-2._.tW_Tw/IWB[E4h?C_qmaDjQFa9%7?AV1P\bo.R?Bx5%qFăU"1Dsp<,rXjxPKg1l7C0O1$nUP8H06bpH,OL-j6AlIENJ[SURnMCJjbWmllQdDx#tăU"$<7eWW%(gCJ7mbr5JOla2kS_4SLj?.azZ/J:Rsl()VvA0>Y[hUkTW7N8IR)LK*AăU"^&;?[4Gh]7y4VHeo]&i,3\42.=>,3M#dR:74.,Id9Do<>W(*ARY$3Yb+&>43p)kăU"Qw.lBC0-%O[n%.K7NF2:Q/#6[&,8CORJdSB]&YXrgJ?-t>>[A2fj>CZt.xd%yHEăU"WK+A<ewI5?(3^-2bh%pd,WR)-6mWgkQrsoW?fHbIrR%?hGcj$43Ux3$6e(TDK[5ăU"&UOa)WSBwLGKRdeZ<V(7r1WfI2+5c^(Vt\/'D*[_hKmFEc'uC32xg^k*JZX-S)[ăU"7'kU3.WHE1]bUSaOst2:MAqG7KNK\Y/ci1(UICh6,$*V^:-&?p9Jvde(7%:e7?KăU"A#JK8J$On??PWAg%E*=DnJnZ:6Vl5&DeMwo#>#C0kjsHbPqov)e1]tEH]()L(=&ăU"fiETVyhm;T$%=_M9&eFt<4<REmE3lc7R+b\rk_G2Kcb5x'5#^F_t)27R&7dm\'#ăU"+4_7F1-DjgYlxqb.yTsKK?cp9N_2\&:sBh9_TY3eU_eFi8*^BLap(XpY:0b3]eMăU"/b23xqq$w])d?AJEe$LI66/6IS?1,'0yt_T5It\k'd3X:Cx+te(-h+hK[]*hcd2ăU"ey3+5D3Pj3EozL$SyY[SXY[,lvlmM/S*s4^UL(L_4*z)tHV=bR[sXb)QL[,ONVcăU"tgAgzBGTfrFaL':.mGLMejr6dn[hPiEZ58*k/tkl_d:%St68ca*h\11lnJCBKo&ăU"=\M&<vUKY,f.*IU_x[g=d-K6ecCxokOC6gOS;X(PhWjkt(FcFvdJ-U/*/-m3KODăU"?_Gs:^KM\0?N,-:E)w,\Y_2EZV44QdQU5Cu>5rKq]bB?J]Mrf&>d3/x=n=U2KuUăU"u-NuS+_+6vwS\K^Q7OL/sb49vkeQM/#(RnV=<9PW]Q)AvtJX)9VtnSe=4>13'rDăU"x_wA>vI1PL%4E4ApQMl[cmWsOUB-iakx07FywTSNBF9NoDthodqibwSt1f*h9hnăU"-?MA\'NkX1uK^+WM,UaQo)G9wSBuZC?cY&AhQO9&<3hmYZdHdb,J.WW*Jp2x6CXăU"PKIMMfG;X8hA-0SS(<T/Qca(JZDTd.%WS1dK7[VjZ=X^zT1#G?0_N&wSi1Tf*,BăU";S*iQMAo'_H=3[[*oecG+8Mkt4(70G<^CchfpFJ8)79?gYHGOI&'-.AV%EZ(kuZăU"8$J]d=SY9/%x&^lY*?FfVP)qyHP.JqCnTZ7+yBeY''FlKMSX9i<VKG0opIA<o6HăU"_$AH.'h/4.sxyhST_,xc\2/BMw>DHe_OS2B,X<GD:6s;h:f*A#p7I&C(D7k(D=6ăU"6%44#bL^NxAjP&Qkj%=25_G(^re_yu;?l#sNqMQw3;rAPqM2\ANE*O%c9&bVMdXăU"En&UYnX9#bP,d+^Vv\oJ7n0q)qk/Ej_w))Q)WVdbqY]N'5Qf1S\%$RL)c(4g7X.ăU"\Do#k*<VDR_e;.7+yJPm/O-HDbV754C9fPY/I,OSbHU=;LG\8i(Hh3ym1)FKu%-ăU"8Y>G4rk*dL1F\\#hXq5sv.7XN=1IJpHauA%5$j[lXDS+dUy1x'cE=&LCT#0v\0AăU"Nm5VL)sNhtj8NCc/YgA#]/?*(3Zy>.3Ld4lg?:h0*xWxXnl/'VY33eG%W:902e%ăU"1b)(7s&wWQ;c9&S20kV$8lwGwt_,8dp43A4wZfJ$xtCQDx9(0hS+axFG'faGMmBăU">8HI.?MG:Ej5w$5b[+RTkvZWd:k$Z;tD*;1Ps)OrrPO8a:TOZPL]j.,;'<]+7*kăU"VZ0sBF)o=QF+q>3+3IidccZ76nr><pD2Cy-aQ6:\S^V3IEj>(Opn-_t99\q[su&ăU"6UU(7,jfDQyHom:J_Xu.3iqUOAZ;gZe0&&mA/7z#D/n;Xn/8gG(Cdk>G:I_+g$măU"D$xJ^SS>(;2Xl19p5_KO'k7i-$\*F8SgCblo-^4<.fWZk4L_)7DdYdp(RJ(o?DXăU"d.llAm'k'8>qC0r?0DbV,'x%up%&'9%%9%%%d-%E%T*EnM6bcO-%%%[8%%%/%%%ăU"%%%%%%&%%E%%%%%%%%%rfsi%jqSy&'yup%&'9%%9%%%[-%n%'*Ec3%s<9).%%73ăEND SUBăSUB V2ăU"%%%0%%%%%%%%%&%%E%%%&w-%%%rfsi%jqVS%gfxu%p&'9%%9%%%%-%nH%*E*-KPăU"i[[)%%Y%3%%0%%%%%%%%%&%%E%%+%^1%%%rfs%ijqW%Sgfx%up&'%9%9%%%%-%=ăU"n%*E,R_8R&G+%%%2:%%%0%%%%%%%%%&%E%%%%i6%%%rf%sijq%XSgf%xup&%'9%ăU"9%%%%-m%n%*UEG=I*H[,%(%#?%%%0%%%%%%%%%&%E[%%%^%<%%r%fsij%qYSg%făU"xup%&'9%%9%%%[-%n%]*EVg-3Fp,7%%&>%%%0%%%%%%%%%&%%E%%%&iD%%%rfsiăU"%jqZS%gfxu%p*+%%%%%+%%+%z%&%%3%L%%%%%ăEND SUBăV2ăCLOSE:IF S=132AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăErika Schulze                  QB MANDELBROT SET              100775.2275@CompuServe.com     05-20-96 (18:22)       QB, QBasic, PDS        125  8232     QBMAN.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MAND.ZIP",4^6:Z&=5905:?STRING$(50,177);ăU"%up()%9%%%m-%K59-EAW.IuD(.%%;3%%%.%%%%rf%siVS[gfx._&<xS7e5wQ4XuăU"VBIkLO1g&:6%q26%?TCy:P>'f#5%s^2n[mS:qZnV6+;-G&R$b\3]?+H,TQ0tk9YăU"6r&1Of43ek<suYT'89%>ZQ/4:N(>gT*EqWo:>MPc2MQL0/g*kC43qopeg7i_h8HăU"+BOaa-='nRX)F/w#2?n().J9B+O/L'U%5/2;+VK8DYhH]xZ*OLCWBb;;fiY,mB=ăU"a:-&L*)YpWO^%_7*^T;[*i\QT][?lk6VbGRt)e4$k;[[&LAn\h4XB-)BRVWIJggăU"EwCH\B.rEe,3Q_57nXWKk_*3Q%_5nXY/ETr<_x(K$KcV;i2/9+m.]UT%YoYq6'făU"UcGhkdjhU]oKE1E]AN9E,^n?Th>6rg*')ILTMdnLP_nz\Sf_Hz22Q%xvTjkd%h?ăU"Kl>rD>2-i84XL,^V35Y[9V^Pr6Z''i0p#-s3m\TL^c^iWn9,]68#nO#0Ow]ENz+ăU"X9szY(5orko)d2bzkEmlek_3'Qi:Tvc3u1ME,dTzFS1dN+)NOhEYgeRz%s<yX#?ăU"B]9&kQJ^EXO%SAGn5\MbHSeS<aSW]NFn*=oavYg^4uK7oW%wP't8=D$(QIM%Y[dăU"LY1'W>-;$K=:W1=Z;eEYlI*5EUy;,cI];shMY6e#)oXF4DOMkm9d0L6ci]k6'I\ăU"^sW2WlvGAB&;Fu2G<4n;*C?1a>Uj'%'S-+<mzAQ=#fhwhS%Q+;95ECe;=6%S7ApăU"#t^W)'nZ:Oo,7,gJk$^a<q-?LZ]VU9VL[on0'Qk?j>18^J^J4*f+'3Cmi_X/DM'ăU"K88WPD&*+z^<nz0TrJFuUBOD2sSZDhIf3&47MFO<'I^E6h'[+qmDE^tgRoi;.gIăU"+M^MJZ)P;tZxWt141R>9XV#H4^k4Z>b6h%a_]8,-RYHg=D',')y8&UHF9smG6]'ăU"$T9#cd(oc))<I&#/OFrO5lCGs5pM2y*SoiERQogA:sTGlNKBfBW&eXa^<0Z8qT;ăU"6tl(iO6<9l$RIPl;U4>5Ms*0W]%?5K2R]4^1i/=Di&bo++MCLuXtfo$+FiOA?CXăU"w3/ZP)p>0(7*L9G(3RaXK/tO(*hqBu5P;78^G;BWoFx,azlcLNE$a=Ua+0=kCMQăU"hBst7Tdwn=C:Ns*fh:9zX%up()%9%%%m-%K59-Eih+GQ>(.%%.1%%%.%%%%rf%săU"iWS[gfx.b%ht[7e5vQX.x<S#m/OF,O$J<]<Jkd4BBX+MiZ.:q(4*8_7f8qid>54ăU"3T1*?L8?rPVeHl57CX(=PR<lIQF10]n:l/YSPD<-YV+f.pwIc.JIr?^o:%34RM2ăU"#EDltPz%,/Ku+Qemi$EE6R<bN2M;OmQ0Wp0Nh*kW^)RJ9lv+/LPgC-T&HV[3[m]ăU"vgq68lqd',b;yU-&lqQ4y^Dp(E/u%j94qTGY%?fH\Ty$.6sMC,1t5aJR8Gp<D%YăU"T]6L;:Lk5wq8t1m^Qpf7,Yh?Rvd5l5QK45h5'*tF0;h0hgD3iN2M0bUv;*mAuT:ăU"-$QbxFKY8[uVH^aU81K:WqjW5(..r-0:K'#Y5*,>Y+f:morlsfA,mTu9$M+9pAiăU"^E51[-.$V62#+BOVOA5MRYlSKLoN'FXWg'UmH]ArXa$-UkF_g'-(xqO#pUAffRoăU"CUI^K,/\Ab[FX6mGFtPww3kQOH8tJKh[Zx>pEiGB)SKd__I84#7'tU8l-2eE.:+ăU"lhN3OxP:951vNQ;YtH,\yiA(#s5r#/4)b8)MJd+XZIOL$BQ=T[h1E##6pf%[i::ăU":i^*YK#F)EyeHoDWrt$#7U#K3veLMd$)S'tXJ0ygaRIz$SAGsX,eaU<(UsUMm;lăU"3AZ=HZhaX&W1g<:5YI,7fs#+zTKpQ%&>r6cR;6U=1?2&odT1:G0tGG,WLjbrD-VăU"#dNKf00lYJLSee&Y+O]R&('M^Ck$U#i.'2.Xiv-3fN:y2^J*KU:g\YgL,4A&Hc,ăU"hpW%ZZ<eiXXus.X9sh\z4Y9]/&9U[Odq+D:lnolMRVTv2YAt4&dBNEiu?Nl#7$9ăU"C>(^K3f=L%bWDR(qvTD^Ku*&bHl1#E)Lk3>*[?q-Y(8-rrY2rb?0a5)nU8eGaFJăU"hPKDjHe&gpn.T[EaKYcECZUc.p0]=>[4t75#k-RIDti3)\,o)P&e-U4K9t-kU^CăU"]Qn.'2[Ve,$[R.9Q(zT\wOBC.\.r.TG=5[-JaqVRR7e'<aac?Z:jD%up()%9%%%ăU"m-%K5B-ESB7onb-.%%4N%%%.%%%%rf%siXS[gfxf_)<tToA;w5,dsDkjv2H:HeSăU".s/PMJ:2iCZSd*)8.FwN42&JgqAF$q*aHws$6gaE5ef*F_c<g,fmkW=h$p^6GT(ăU"AJa?AN]D-Y^JFf^xCr)?v:0.n9YX7/x4E\OMTW'dS3?]Nq-W-mZ+4OlffjJiR6CăU"lMXi0Sn?5Yn,-<]c_==iO]RzYn7(9F-h)/:_eG)(Mq%>XumglvJhX5w&WdW13+făU"5Mi%2BBE#kXeVWmVLDdie%]RQ-6sSfR(=P0PY,A5N)b%&9k]JW'Q,eYa7xAIy%hăU"u]OjI6c9E'&1&9uc=,^?%Mg%j+L]Vqta,90FEBMd]-Sm[\g/ndo5I+]-cb/-,y<ăU")ye+:+_3;y#^2H%dUZ9*XfYCrAnFwXSe(S(FT)-gIe1;2w7m01i4Q\Z/,+nl()răU"fdlM+F?AT+G0I-.>%G>pE*#_tjmT6umT6m8jrA7T7=3);=ldm$.EG;dx:O,N6yGăU"T5Wn,dg3/yl6mMgSdQePxVW+X.s'ag2#EOL-SG>GLmSSFTP?6'_LM?7U8P'9VANăU"Sl58aqu'\olk4+9CojoekGK\D-XHq]:c$cZR*S-Bq.Zun<iu5K,r9L,sj,gMv_0ăU"D?\:+_p+sG:c^(>cfrr^4ocep^UF\Fa9;wxZ_<nG2KP[s=>adDshMa-]n;RZc&oăU"v0AhPY\H-9Bo]%e[JS>ujt+gOmpCSn,ne0Ct_U#T^JR4Y&(Y#p2YGC^,M>/LC61ăU"6e#D+T(6t5tBtGk0d1s+E=7&([n(e#:Rg:[uAN<#DF5D;fXc=W#H%c_A?R&MQhHăU")LEDN2(=0?5)n,q?p;n1Q_:5YUV3hn)to#w?Y=;-[AUt97l+SgA'\<x5#lpp1C'ăU"sOVZQgv2M/tsr0jlCXEwR7K:B-L4a2W:aTFK>bg-\=9nJQAAsRep9*#2;-i[4Q6ăU"Mi+Z'B'%JW/f(N_/TtkLg0Gg;MA6GIVBHw4pW=EoIYYvNX3v4r8NSvp:;ujz;:KăU">?g\VUglrpJw^b-[lAZx2u;jX&^_,0WxY1u$S^oTTekr,fHIo?D88jgWVLl,Lh*ăU"5:=rF*vHE1G%]VVib._&i_O><nW%G3-/l;NFLO+k,L'Yfxu\G4>4G>#7#rgb%.căU"L2v^9\2S5jB]O%Y7X=f7v.BsU5o(vSk_Xdq*?ukjX_I)ugQaas/$I4AG3aNBNk.ăU"hVq;PoLP5]eh?N*3?LBZdEU]Mg6U,.Y^2,/))22k8OFd=wapA,r<HpwaIJW7hDLăU",rvb:$hk1)1rz6=Wk7W_g=4i%i->plhLrX2m_>]:no&'Ige&99Aznoqhf7/^FZ)ăU"eRXAQcwN:Gth4PZIDl$Nn7'PmT,_E7t:l9K4M*0&L#eKpq*:2\YA[r]0Y?86K1/ăU"XKk^]L->aEMX[7F$(i/RVYGrO($EeN[I,\oa^UCGiV'=hu0&=DHChRIWm\nc:*kăU"SLJUj8f/)>m(u\NCNOi;ro&Hnam<qmTCg[:q]bbj%oQn%mRwlp<UF%gtnO$OmsHăU".OX>;$4K61&n%FNJoWC:rY%W%1%WPPoa'50qei9li%a.TKm>R&TiCjffQxu3^wdăU"GyvLtTd[w269=N5MBB7bUssC2MwqX&PmopyZkE>y)B'?1GAN&z-Ep+E+Dj$;iGAăU"g,Fd)]mtd)APltmI9K/WeYRW4Qt%i#uj6+D2eM*zs\#u5JEqxwAfc'CS,0MS5t]ăU"L2rPI:)TA()EV+/u#b<LQRD6+yx,QiY.*FG^N>9RbvFtF5v^($N=n;Q]5qJ:MxQăU"hMd$;XOodlqHZbiuJ\OiBlSe*rOb.v-O?V_t?1gx5/ay+sgj1=ChK')_T0qGJ7jăU"xKRiPozOFe-f*Apf=jLt7??bn,H]Vq-Z(e4S)[t9/n%YsA7dgX[,[t&,YPnN[H8ăU"uF_rx9KMxJHup<=h-..N_-%qochlnQmx$*IXEQGRT<C?hh:Ge4Pld]BLw/i44ckăU".$^[,o'+t*;pQ'?psbU-1m7$_u\LLH>8fsYvB&,78S^[XP%GUWhlhoWSeA0BGmEăU"vQkCFr;8C4ptmB;CrbcDDsrv.^X/T<nw't,v,A5,L7AvM'&Y;k4<7$d#k*N^U=8ăU"N58HfCA8U'q?1x8pma>GudEo+J(s='7c0u4hm'[ZP[R4dbDhAd\SgQcwc<kZb<găU"evtJeO/(NAs5*R_P[U=#,n3tzE?gAf7;We,4mm/444*G:/x:/E_iz]ApdF;;+QGăU"/C^SO>Y\?0H/K0*8S564-L,HLK/K5dQ-9D4:?/[tT]mg/(aHG\$7$hbK)GccY^+ăU"g-Bs=PH]oTp(kwg<^AralK_[&7A_E-_VSp,eSJ1\F[BTcfc/aD=\eD2fUk=c'PEăU"n(OV49<bt(J0Sab8O1K$,R,#[KcW\*bc-wL4DInVzeS8'd':il32UCB8qs%hTmwăU"IP()eWV)+3k/?u3po>hp]pg26RMbZ\DQ?,n^Do8nB^tbu/%3pgoMdk$sd$n&dTnăU"Y<%NQS)br^pBTUJ%#\q.tE\,0MS41Hrv/4Hpt6;kl0.r/KK(?HjVXcvkq4;>2VyăU"*kJj6IpoHpGW:8,md5cQ)$,/SeknsYre';;T-+^EW.Osi;]EgI2mQr]>/#%;bEVăU"Q.n)*jB'dNx<8]Sd,o4#eAcxnYRqo;&Va2CK66mny&\;8AGF*T'#nwaY#V-AU(<ăU"BE_R$\7h$or6^1[jT=9&E>lG,,bP,<H2t74gLb2KHl0;(+MAvZGfW=Y:fSv/qpbăU"8WUy<;.IC6telE[1O>q:;)jF)[K(HC]bBh-)7<^=\s)'#<p6JXfq,#:Be;(huSDăU"]1E<o$HCMo)zU:Kn?<t7u$Rm))lP=KACn7_qOWm_x-BrQS\cfkd2>,Xtc$+Zx_aăU"t>Mwn8xk8WmfrG3lm$S*JQ[T&XtqZFPA[,L)=]/L6$\Z6'5x.D?X7rT%up()%9%ăU"%%%-%Ba90Es^*>4/+.%%L1%%%/%%%%wj%firj.Sy'yN.%<>]T[5wmSexZM)oglpăU"_if=$&jGd&a[j(+QRp'_Cn+I-MRGg&X?n^qEMvg>]+\1]t_&/t4Wjgl2$-Aulx$ăU"B9,a4%;:1--o*g$0-5mB&BYvZ$JMo+r8DR6NBsQzoFjLi+DpvJ>/1z2YniiG$MhăU"%%FS%j\i(%^I)b^CgLTN0mpDOZ%yj&Uw31J^^-8,YOaM0m$FSO#NcS7<W$eb$s(ăU"c:FVv#3.r4nC*Y5)(hkjs1]I4.?ym*sH?ihFsu;?_.pl;SUUVH.C6IrAgG,t7.hăU"B$3PS.Rk7hb%1USR%kO-LeE<G?[DV?3)Q%$(R%#g<Gi/P(9.XE\.'Za,v_Lzlu+ăU"W^bQ-YxjvY[ke8QI5ls3^Ue&SrSk[8[gmk^dOF%o*w*#\sJ3f=]=FX>^p%fI7gaăU"e\WO:Yu]fbJ6VhN18]L<F:Ls?7C;*u4)8i:vD?_113UPS1N&F4v=H1^pAdbNP\wăU"J9Wp^%C,BSYBH&C2;%&&;Zh2v<O2&4,*sPtO3iJKy3TdM3l'kmJeCEQ<Fdh%FP%ăU"([EpO=Rs..UwY)%o/h11'5#a2o:Y+/L><^*Jz?YJ'Y_t>9IC*>:7[dJNecNq'5$ăU"4tRltmIiCC1<3.5$U3nd5Gisc4)HG.79K9M-)f,fjK$'oiKqsO*EXXf%GLBWXotăU"9sW&h#8dEMH1[4pbZEQEW,=u-]v5eh(*?0uv_VCnz_itZF>ffLn#H#+,I*S$k'>ăU"'jU4AK\9UU5YdA/gDARfz_erW]G#(l-FS4-5C.*k&(P,v-ae/9uYHHews+_\b3uăU",mBH<C.?%jyYP^G-0Mn&1aO[b7hAdsJr%B\CM.INqp.YI[)F]hUwAeS$;dp?F>*ăU"u(0F*rSgIp.N^efB)T(uW2=4Wpw/]NFS2WH;vxN/8HDR[.JO]l>i8?K)AQq(-EYăU"y=_ccW_q]qo'tr8,jj#/DQQ]EjscZW&e+b,\>%bH>w:&.EV^=Sm)mpSDL=a4Uk^ăU"AQ5G/WI42\91frTfL1DA/M:pTrF7Q'dY_hD9-CvKa0O>+a*ew6V9McKoz.qbuARăU"*4nSD&lXjHI6K'#VC$q4k6LTCK$-UYwt-GW(9?,C06>Ht,RA=*=;r8f;d;S%):yăU"i[/#w1kU>t?M,,b*1NO+An(qioFgdIMOdOi+G7N(Fl6N,rh[??beH?eTj^tSbe#ăU"<BGU,'ItBsn<mFc3FyY9RqE\abyhavU)WMbOOPyXM9TnO61*E)Uui.$kh#):-3#ăU"6Q%_/cye5>FdqAija)7Ih$KW>,ism%G++aTJ&\)lfLr'.2ditQp0al$DAks)d%dăU"RqrqjaVtfPoW.AGnMJ(ft/bLBm>4*/lrui?Jm(4C*+mOkPdF*.:&fAAteuzOat?ăU"K_8148W(q=1/8a9^pKhA(2c7w*^v76DU)[D,Z%f$UAEJ;x1mHSY)J7*Xo7#oLlvăU"FOHfT\aAE>j'MNZXpqpId44K=XE-94ZXO[[Hw^W$rSk)lz\$E:1X)*mQ*.%;IUiăU"I>0oNgcej,l-b7*rXvfamhTOoKea#oS,lAWoK$wDO8x[ZH:l*6UXi]hKPcPpAF^ăU"5/-(2(kCcMIy)4%mL0mN.7dhw-tI[tRhYqh$eY?D6nO+uX[aLg;nSOW]aXCJwiBăU"k8NRpF/6)6aLtEi5u;fiQf*CVN?qQ<06'3Q<e8h*mTF:TjWm\W'%m-G\1;(GfDeăU"yd,hS:aaf1<66$9y/)+a+I=4l-c4,ViIVv>0dccl8X(gij/>toPELmBktJiuUSjăU"?xD4/CBW&n<L52a/IE2gKg<rllY]de%bLK[BSCJQj'w8CYxs4?Pn0Zq[q+X).kWăU";n'b?_oARChy%\-^eifvXzpYu<DU]yhD^cI9/d60NY5)Etm[$buB0(w7CA19iqCăU"u(F5q-2hfHE^3FRQ$M,De>r9n(hiGgtpih6rb6mv[tHb.v?hLJNnZ#fNLemJ0:iăU";n4k4)m:QWadFlBxdtm'v(up%&'9%%9%%%m-%K59-EAW.IuD(.%%;3%%%.%%%%%ăU"%%%%&%%E%%%%%%%%%rfsi%VSgf%xup&%'9%9%%%%-s%K5-+EihG'Q>(%(%.1%%%ăU".%%%%%%%%%&%E#%%%k%(%%r%fsiW%Sgfx%up&'%9%9%%%%-%?K5-E(SBon'b-%%ăU"&4N%%%.%%%%%%%%%&%E%7%%U+%%%rf%siXS%gfxu%p&'9%%9%%%%-%Baa0Es4^>ăU"4/#+%%L%1%%/%%%%%%%%%&%%E%%+%e4%%%wjf%irjS(y'yu%p*+%%%%%)[%)%V%ăU"%%%C%;%%%%%ăEND SUBăCLOSE:IF S=235AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăCam Spowart                    BOUNCING/ROTATING TRIANGLE     slyboots@supernet.ab.ca        04-30-96 (06:30)       QB, QBasic, PDS        111  2018     TRIANGLE.BASDECLARE SUB grid ()ătimesvar = 1.5ăbeg:ăCLSăRANDOMIZE TIMERăxinc = .1ăRANDOMIZE TIMERăyinc = .1ăRANDOMIZE TIMERăneg = INT(RND * 2)ăRANDOMIZE TIMERăneg1 = INT(RND * 2)ăăIF neg = 0 THEN xinc = xincăIF neg = 1 THEN xinc = xinc * -1ăIF neg1 = 0 THEN yinc = yincăIF neg1 = 1 THEN yinc = yinc * -1ăăSCREEN 12ăăRANDOMIZE TIMERăxcoor = RND * 640ăRANDOMIZE TIMERăyCoor = RND * 480ăx1Coor = xcoor + 100ăy1Coor = yCoorăx2Coor = xcoor + 50ăy2Coor = yCoor - 74ăăăDOăă gridăă KEY(1) ONă KEY(10) ONă ON KEY(1) GOSUB revampă ON KEY(10) GOSUB showă LINE (xOld, yOld)-(x1Old, y1Old), 0ă LINE (x1Old, y1Old)-(x2Old, y2Old), 0ă LINE (x2Old, y2Old)-(xOld, yOld), 0ăă xcoor = xcoor + xincă yCoor = yCoor + yincă x1Coor = x1Coor + xincă y1Coor = y1Coor + timesvar * yincă x2Coor = x2Coor + timesvar * xincă y2Coor = y2Coor + timesvar * yincă clr = INT(RND * 15) + 1ă LINE (xcoor, yCoor)-(x1Coor, y1Coor), clră LINE (x1Coor, y1Coor)-(x2Coor, y2Coor), clră LINE (x2Coor, y2Coor)-(xcoor, yCoor), clră ă xOld = xcooră x1Old = x1Cooră x2Old = x2Cooră yOld = yCooră y1Old = y1Cooră y2Old = y2Coorăă IF xcoor > 720 OR xcoor < 0 THEN GOSUB changexă IF yCoor > 348 OR yCoor < 0 THEN GOSUB changeyăăgetback:ăăLOOP UNTIL INKEY$ = " "ăăCLSăENDăăchangex:ăxinc = xinc * -1ăRETURN getbackăăchangey:ăyinc = yinc * -1ăRETURN getbackăărevamp:ăCLSăGOTO begăăshow:ăLOCATE 11, 10: PRINT "Bouncing, moving, rotating, blinking triangles ă(tm)"ăLOCATE 12, 25: PRINT "by Cam Spowart (1995)"ăLOCATE 13, 15: PRINT "Hit space to exit, F1 to redraw, and F10 to see ăthis"ăDO WHILE INKEY$ = "": LOOPăGOTO begăăSUB gridăăxcircle = RND * 640ăycircle = RND * 480ăradius = RND * 20ăseveneightnine = 7ăPSET (xcircle, ycircle), seveneightnineă'CIRCLE (xcircle, ycircle), radius, clrăă'FOR xJump = 0 TO 640 STEP 64ă'clr = 4ă'LINE (xJump, 0)-(xJump, 480), clră'NEXT xJumpăă'FOR yJump = 0 TO 480 STEP 64ă'clr = 4ă'LINE (0, yJump)-(640, yJump), clră'NEXT yJumpăăEND SUBăErika Schulze                  PB TGA VIEWER                  100775.2275@CompuServe.com     05-26-96 (07:08)       PB                     125  8181     TGAVIEW.BAS ' Please load/run under PowerBASIC to extract TGAVIEW.ZIPăăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TGAVIEW.ZIP",4^6:Z&=5823:?STRING$(50,177);ăU"%up()%9%%%R-%u/T3Eo91\%l&.%%;'%%%/%%%%wj%firj.Sy'yCr$t>\je5>KhmăU"KPhmmAbpD(M:tA&sMNM#*.A1NEtBP&+Ja9Qj4nZntbC$Z8x(,%$?c_6\8=RH[&GăU">TU$J2E%Rf,<81#&K.6pEk.ZL(hU+eRkKVt$meuO;?uX%3_WfHQ<_k:kI&;//B6ăU",AM>_xsJ=/m,I$KpebWy/-Kb>seC6m+)YK1e_Wd3/d_UiSioR2hmZurlRs:asV%ăU"1K3:3%eCcpt,YbEn0qQ)CfniktMd[TDXY=5Wdgq]xdwnw#r)Fe>Z\Pm\)8[W]V.ăU"s1M:R^VWv^3A0A7.'#D&MxB.D[?l&E=Q7X:eVB9T*)ur8V:qoki^uDM3l\%;>wNăU"m2rW'6B26WZPW[bwY6B36DOxQP,bc278[d;0YQbi?N/KOOz$oAR8c'$5#i[BmZ)ăU"/ctt+f%v.5yM/+g9h-0ZImJMkU%l%$u,Oq7Do.BcVuYkMnU=3+'N&b,>LIr0osmăU".^jLC4K8o9v]HU;esS5>ftA2R%U<H7(>vB:);EU<;hG<3*TjR7j5AOPqr(8kg%DăU"up(%)9%%[%-%Y,+3Eu[Z5qS[(%%h%0%%,%%%%y%lfSyS'y.%:f^L_j57&cgDGvZăU",OQjJLT<('e%'xD%GegEmf*[a??g?GS\PTpZftn>Z?\/8Hc)LIkw%G_Tl\X[&6aăU"T:?9uv13Y1=#O*XdD-SMU<No-+Q,En84;T(&PS,-(3F+lw(eT#/c/9,1]+Ehw./ăU"xQgJk[(0*?lC:k't7izkP'f?E'Sl'1,10?[4CtNpP#(+$Z/]q$_<xqR+vJn3/]WăU"\l-x42bCC(97LzXHOM9lAPTN:QIA3-V:DMfQr;^ulfu(SXufHr4')Eo-U268^EwăU"X('X#$mq%wHe_N;R'I11]gB2q2uN%-Kc/0_p,N=y(ogOxeD*C0'yu3qdtEo_JCDăU"9t%a%,o/'x)OxOr[JB)iQ;%F%*Xfc*'J_MH^eCJ[o5&Y5Aw.LO]p)w*'SVLNo_MăU"f11P<0OP2v=lec\vMr5P(h8>^vNSjVTS\LM*Cp+F,0'Y*KI[A^^D:KhoBj>.sQgăU"4X7#9KNA9IiDC36SMCd$%AsB%m+e/>^Mr7&/)9g17ir_$XgI)In[ywbcvP/]0rBăU"LGuIxqm88ZD9Q;kabi54[/GSydt\cxq-knSQj1Oo'?t.X=UP^KBmNn.VHPNw*H$ăU"jM>,Fb_3S%,[?T*WG2c\BT2X%(3KT)%d5T.-6r/VwQ8045xuB9SCk&QESq+KUQ6ăU"/)k<aZXCL*rlv-LI6yf^[gAT4#zBI(P7ha#YKLxT)EX:Aj1HSCt//X;^pcQX.<HăU"gaZ#u:C('C50GIV:CEt*y\'cv8p,LtQ=+%J.Aj;?J,.gJeYp_;F3$own6,mhq\HăU",,S$BV(iEqNXATLS$\eE7f+2&_nnnY(d&ytq-h3getqw'v%9#YD)?6^X\\*LQa?ăU"nF4nrhSUZ'RjhO&Z<Z;#R:&4N7YQ1Q]e#s.\1Qb'eFN$hBNhB]D7l-LnPW^;WTAăU"]X\ufHo76L/[&D]f?S_ci_5JwCg^RQM72O5NDn:GKA.YnZY%eJA4HD/IhLf*/akăU"QP$SLPRHm\oQ^Arf\:NEnpbR1t<g(fMHtm_sCx:.&(xWt=arQ<-AiJC=#tsVC?:ăU"[kC.V&0SN\.9^b#1whlmm#sf#&3o^m_c$0y>jXG#5]^uQQDdSxi#OhI\IXUZ-PDăU"[c66:aQb-E'a5[6FBq1C[d%>Ao5zPmpAkB+CERVK]sYQo0D<dQ\%GIZa/x->bNeăU"EslpBP;IkKH\GDfp\\YA=<$*E7,HJ1B':Gc\BSI6WWF#*>4cRmjHsrju4Rn](GaăU"g:MbX\PO%Tb'5<inx&%up()%9%%%#-%b,f3Ent'NV;5%%%py%%%0%%%%yl(f%njăU"&&SgfOx^*<+x\]7iw;yqX4S20>OV9KM0/6o,w2)1As+-dhShlTHS3w;kTq?e_c.ăU"ERV.NVIW*4#HbR)*.WwaA=r.)&gjl&e-ZrlcmZn.Fj>%l5z'4_Y_6$.>2llt=6'ăU"OKpc*Av;l&Ld]YZE92vVs<n2'pTks+?fhwgNfNtb<8y&Hw/df_\0Y5AW*CZjy6,ăU"%<p>DD41\_*^4;<w3G/?';S]De_aj_RlT&a&PEX^,njas:LbHCqacZDC_SI[bf+ăU"-)T:S1mbP?YjFP7MUPN\a9t.iOnd1D_4C$]Bn<VWkmxGF#3\[P_KN/RL?wKS^:hăU"l_p)DY+++13iKbnbmnZY>F53,91Z5UC/1PA&KTIb#dEvn[6p3aCwLb-W.;d:KhtăU"==WBvkv+(<U[%vM?^D,f.b-s6()V6fF)DVOhl;gv0R48AI]Bo91xLd/$2R&rlulăU"L19u9#If#'LaZ9>\^T1hj7-V#YSr1Ww=[vO&66/)u'IbBI&ukYinTB8Az4FZF,,ăU"s\Kx<8Q[V4rLsOb-4_(8JRXxsegN,g&O8&GHHLJo\Vj%\)f6U*&V5ZMjl0PvfrEăU"zdT=P,N]QB5:MLX*omihhffXsf]zVKRkes2e-$E\_41HH*M)s'b?6IC0Ou2\<$/ăU"^7T(c'319\6m<_4sha#a0H.<,[ib<==:k.c)]OI/jAh]1lE4Zsnk+T(/edMgMyyăU"s9=lM3luFw1'\,Zsi%82'_(30E>-*#CB[];&20I]JYCELkVhA3jPZ]]3B2(>hZlăU"R*dtGWFQf#+gXMJ^0#J'S.piI..)GL%brotcihok$FlNab9RfJV'RWq^HYX:*CSăU"Isuqe%t)/n.EG^#bCiF9UEX5&i\X=??d*:>PfP-#5JmTtOYh.wrGR9E;75,I>TIăU"$?XVQP-F'Pl(I9Y+'DOi\0)sxhK_58fSi\wC'CVxn0W>/:Ti5uL:G&I*Q1Dh\z2ăU"7tPTYnqF+is($GjYcQXjH&L1Z8m89m[UT/?REahAgG^cVJZ,,Srfqck+#mD$.>,ăU"0Fs8G7d1i0#\jidpl7<P%bhIo=Ekuo/-sH7#<mFm[+(CqU)pCKI?Q,d]6iNLCe[ăU"m7;N.:(]i;LsgXc$'DF&p;im^cCkE*^,Sygny&'g[c]P*9y[0-&9>k+U]jz[jpNăU"JEsi.7'T>4>k)t8\FoSY%cOEC%Q7$G(2r..8fxgEpu^Dj0M)z<mh>X&4Y7bTY?9ăU"hn)K:rvd[FU[p/y$D,ZjV:Gn_i7?pBTZ[;=;ff4InH$[P+l;d)W38qS,((*j1kUăU"rBx56OR85sao8;B_cKjOcUk)dB+Q.%+]*:yQO%DLs2$pp?#hG#6&D,-?>XZq#m,ăU"q04a5aF&OE:%MqGv?[wi0*>vf+2UfIS;O8jqWQUkV2H-'4Q/g#iIo<tBuc37+xtăU"a';x8hBFzN.xt$6<X_jCmuagM^dA8.z2.sN&t\#07C>SD[75<:A&qi'H0=-auTkăU"M#xBqiV-.\PMW3szIl=^/;%m>Pq2CL1hP/1Y([YkVn2BYP#'MJ8)['bBC_&CDb+ăU"N?P83JH0#iBLfk<'1I%K:c4O=?gfsZa/Ro2W(/nE3opupDYE75es5A0WW/R(D_$ăU"n-%dCn;q07cO5V(<rG6L86=f[<':&DVWOxyAO23h+\T^T2j6*:8PsY/#(*uZc2dăU">%C)9BOeoox3_l6VTJ\t9fbf])3k-$-)MtkD*K&NCf%I43j8Mn>x=L5h)TM0*y[ăU"Kvnh8*njQXNhXe&eC%s%0j'^%&Z8?jf5;*ay>[-mEk'RI[vfK6mu_:*ps*ART]săU">jr-)K2uia[&zqmHG6('<_8MM$eoIIr,(7mG)$.dnf7;D&TQjthjAJ8'nj[md_măU"+i?Aaf_#ld'l>/]1*BnYw78gI/v=6MSg'\%=#E\M[0i(Zve&-FctO(k-vx3I-?văU"p-nutXjd^;4s2(CdH)_ZND%yi>lCEULFr+<(Kff',6?h)2<-fFagsr,KPx9DS_WăU".'_tkwC*6cWPDtasgS=?bR*kxLIOtVd)?_A[.ku&1O\x.OOpq%YeHJ1B%:a^i;3ăU"SLv<(z0w400;db0=OSbmUeObDzS^5A&:v;1EQ.rB22A<Y,,K-Lo8C&moh2KSNLSăU"a_=\v11)\,6h2vRQP5Jd>aXW>)9,&uLkd6Z]+$_,>NaM0dga1TUMGuMo4NTN99văU"Peq;y/xV6.us[L%Ml)9p?[#;jFG($L1GK#*'CN=/EHq\^,DD<i;DsDzxUx$KZ&GăU"0*'%YA*Ze>I6'Brg/7w2_%yNc4Ee?BW9.gAYcU,cI':\1LP4Zt0wm9B#x?jB6t%ăU"HD'OST5O+ZY7:ZpIpgI.mHgKHOT>(eBq=Qc8BAF(dU20kbyus4ssluuDkX%0o<qăU",HGKc6DcAo&h<tjh<7*IB:2Uor:Mg&KS241K=/X6ukTA:8?_&iYwAZf>C3L8[HGăU"l+k2fO,c6E<HG_[3IF-R0LLuOzDdZj:3d+mdt'B,7Su2S%#<8[3QAZ$_&n%\C11ăU"R]oHi?U]?aai]Jze\Y&TJ_'=GaXVsBbNt&t4<DOd<vmDCTh,hL8mg:LgTG6<q?văU"8TeoMMa$BQ')-?EHdcX_aTY)Bu],eaRs1.C('3=Kg&rWKP3g+O$nCtA[]fJ\I*GăU"C*/+=/uf^13IT1qv[I<:C/R>[KZc'vL\3bZGv(?Amd,yY'p-u&KcpZ[<7h0VI:KăU"J/p%WaX8eG:\)LPS459up>BfojbK9=;M'BO?9tS%rgJ$da1l<J2R\sRj;3^5N1oăU"5H+]b)JclM/_OgJTI6C=6%^c][KlnzE>tN/k,t6OUCY]QOh\C,ofa,yl%&#?+g5ăU"V^9ZNnvpce2de4Jx[y:F')XPTi<pCgZ&wY(H<S71OMQj0PnSsOIpUOV*2=+Gq3;ăU"(3$(0FcIZ>VJ&$qXuZS^Ws'ZXK;Mvu^gi>&WH3<l^_L*GaB7K$MeRv($1\c,S6xăU"\7Ba,vaL2O4EO9<9Z]V^Fsdl*zA*SdhZrJPD2%J#Lq]7azMB[XiYcutLq[1p\+CăU",WBLs6Xw$1V[X)s$\Al74n+?%-w>J(jD*2Gufz\\rV3Kh3R>BO2NYB(NjOYOWbUăU"k/0]Dn#_Pml%V^T8\q;rGN)Aexbu>>eG<9W2/);=S#(*)8e\l#q&66.wL[AEN:+ăU")7-I%IXYl;B,v6VTg_NFzX;fg)lB<fsLNTi[=;)YBJQDR1T#J/%(&J81WYm5fG[ăU"?Y^M*s7#,RhWcb=5lQX;Hr&._],cfmsTjf?Q5UxX0x$+L.$RPJ&q;%[-(>#vRn-ăU":km\^Bt3,#Sa4t:%:.PSPw]1'rPc0<S?pfF9.sg3\;.KjIm*x;X0NnVy5g59A$+ăU"7dmrJPA%b:;BZmIc-H2_#Vq:Ob>bA1st%HIQ7?vi+HBO'Z^SPS]$'i\vK/j#i[7ăU"=9c22Ki(cf^0mWZ.:V7r=r6+'e.>l8;Cz*[&HC3uhd*YEg><R%o&4S^9W2vA5qbăU"Sa;+kt'[oTn++:t1lo_<%2SksJe:n78>$f%[feVHJ/i);tQ^C+bHa/saxB:skAmăU"</LnrD6<L:M&#(LRe^^[EAK+JHHF\L;K%7.4=eB+pOGZK$h9lD'_X]M2/ol[,j<ăU"e^hK2AdtFJW5i[[f/&X]XMXsx;G)e?qoPwP<#9=6;U\DCn?A3nyiVuhx1ZVj?#8ăU"Hoh[hVP>#\%i'x$j61v*=pbMD0,aBp'd*B8l/bYOFe<F9E#+xIV[PSDw/tp=;^2ăU"PYhjG?j$Gk1J[,-wEPR=CE5pnD/3hLNL(vX,5oZnI0lg#:=$W^77BJegBs%3WGPăU"-uVXE?W\7uZIV7yRm/U:XK8=bD&n]m<sgpjw69u>C%.=o_9eLwXTg=R=:S0E<5WăU"__q/qF</H\bP([kOf3u6>v=tT2Cwxg/#'Q6pSe)VcJ?T\2\n0aJ^*Ys2c]6>/yfăU"+5Gx>f0)jgb.F4x-lFdl0_Sc+X_\095aokD/l+L%m7p'm:^WAl(Xe:/,^Y'/l4kăU"xV:l'p31[j;q.e?qTS=[vlEApXmE?[-U1^R..*IN^&,K%4lwdlr)*=3^TATubjDăU">U>WUZ8]T+<_Bh9$&-Qd-tgn-v<B6GXmZqsielcrL8Fg[($1XhrO3Gog(StC1ImăU"lufD17zsu'J^>M8?tfd(VSB$b(c;K>l0Ed0iH7f^K^S]]n3j%aZ6Yk>86R7)v/*ăU"9Eu)uFt,]tr)GX_1NXuJ*oqwzTFrZSML$iy*]Y]rr3V#Mlvnruj7rQ<i[HmBOsiăU"3^FKVd1]pn$X*/chtNscS-9>r%y]qr3g&v&e3K89Y&.$KL9;l-1[H7m=bRpB5EpăU"h)$nL7o>cddCX9A$56Ts2nlOi[hvBbM5)qpTXvLK9DhwURiR[5Ci&Ls5N*=;TpxăU"zRTWmRehPTUKR]Zf5N9Q<_V'v?oi8DNan=:7T*MO9<V%iN.WO)E5YQg/fBdFVDaăU"[c\erSKGE/giweajxdp;LF?f(GEF_kD:Wc'n=MH1#(+1CC??HRfUzGf6LP6.'[^ăU"ZBr0L[gEbj<5c\rGGZ9;BLxlZc)B,/6DMNjC^o:>e:Sh9<BrdP4$PoDE+.GZ=HxăU"gdjbG,jr2uEnL]dUgVhVAn\QgaW6HZ#/OiB#togd^1ba3S-)cd;=S<K&,]rii?+ăU"p4gIoh3E_$k9F&N8SaYgE<hs%>ioymN&boH-,EfEPmy%cPM;#Mrf*<DVMAw.H9BăU"FE>5Fw\$L$+?9kRMIa.xOfdNWq#t$dxh.w+CIqL;%4'KXd-=^wa]=v]q=m7OVj%ăU"G+(0]#;*&&3we%o=4PsaE9,<vKBO*hdSO^xQp50+1%;JL/#8q(3E6rCQMK(UxeoăU"XQX6X,lD*Cg2s-Tq\XE^&-*x#%tgN3Feom0#/%5=F#F/;)a/jee%;%=2[_P:c*1ăU"(s#/+\,FEH>xu75=dp?J6UeD29lZdFKsN2VW*hz9Da3<aabL]%EBc8qK#ej*om=ăU"Oq+[,g0l.:e&mC<?yi?Zr5=%RKGC;Cvz$Z.00ra1zfQcOu#,K4>sYbmZB-&G0G&ăU"li%JK16a:R+d$k*6)6;Ms62J$XSW,a+l[s&Wn,c[2]bl,iMiIKN%H1By4BHaQBaăU"5^=-BnMt0Wtd<?H1dJqdC'5qLs]4h,q<=-VgM<K3qX+kcR7[h/SaFC,\w^r$jJuăU"Nw]k=*qmz3hxao\%rB5<g<<f.KW'2%F,=N=k0>-]311VPU)dp8pmUa)SgS#:$5TăU"C(l4rYGJmbrJ<(GNEhJT5pNvq#8.'+LZGN5dMrp]8[g<h.A+-x4u%p&'9%%9%%[ăU"%-%ub/3EoJ9\%l#&%%;%'%%/%%%%%%%%%&%%E%%%%%%%%%wjf%irjS(y'yu%p&'ăU"9%%9%%[%-%Y,+3Eu[Z5qS[(%%h%0%%,%%%%%%%%%&%%E%%+%>&%%%ylf.Sy'y%uăU"p&'%9%9%%%%-%:b,3E>ntNV%;5%%%py%%%0%%%%%%%%%&%E%7%%=*%%%yl(f%njăU"&&Sgf%xup*%+%%%%%(%((%u%%%%(;%%%%%ăEND SUBăCLOSE:IF S=252AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăThe ABC Programmer             COPPER BAR FADES               Converted from PASCAL Code     05-28-96 (09:43)       QB, QBasic, PDS        56   1665     COPPER.BAS  ' > howdie, nice fader! i was wandering if you would be ableă' > to comment the   program and repost it. i.e what the portsă' > are etc for us less experienced   programmers...ăă'Okay, if you don't quote so much next time.ăă' bar-fade in, copper v7.0, by Bas van Gaalen, Holland, PDă' Converted to BASIC by William Yu (05-28-96)ăăDEFINT A-ZăDECLARE SUB Incbars ()ăDECLARE SUB Copperbars ()ăăCONST Size = 20   ' number of text-linesăDIM SHARED pal(0 TO 3 * Size - 1)ăă  WIDTH 80, 25  ' 25 lines modeă  Copperbars    ' default = black -> otherwise flash of blue will appeară  COLOR 1       ' set text to blue (now black, 'cos pal changed)ă  PRINTă  PRINT "Is this what you mean?": PRINTă  FOR i = 1 TO 20ă    PRINT "Test line", iă  NEXT iă  DOă    Incbarsă    Copperbarsă  LOOP UNTIL INKEY$ <> ""    ' do stuff until keypressed...ă  SCREEN 0, 0, 0, 0ăENDăăSUB Copperbarsă  WAIT &H3DA, 8          ' Wait for vertical retraceă  cc = 0ă  FOR l = 0 TO Size - 1ă    OUT &H3C8, 1            ' set pal-idx number (1=blue)ă    OUT &H3C9, pal(cc)      ' set first two pal-value's (red and greenă    OUT &H3C9, pal(cc + 1)  ' intensities)ă    FOR j = 0 TO 15         ' 16 vertical retraces = one text lineă      WAIT &H3DA, 1ă      WAIT &H3DA, 1ă    NEXT jă    OUT &H3C9, pal(cc + 2)  ' set last pal-value (blue), and thus activateă    cc = cc + 3             ' new paletteă  NEXT lăEND SUBăă'increase first value in the pal-array (the one representing red), and scrollă'that in the arrayăSUB Incbarsă  IF pal(0) < 63 THEN pal(0) = pal(0) + 1ă  FOR i = 3 * Size - 2 TO 0 STEP -1ă    pal(i + 1) = pal(i)ă  NEXT iăEND SUBăăThe ABC Programmer             ROTATING SPHERE                Converted from PASCAL Code     05-28-96 (10:48)       QB, QBasic, PDS        114  3753     GBALL.BAS   '{A little rotating sphere, by Glen Jeh, 8/12/1994, use freely}ă'{Try messing with the constants...code is squished a little}ă' Converted to BASIC by William Yu (05-28-96)ă'ă' Uncomment the delay if you compile the programă' The screen updates too fastăăDEFINT A-ZăDECLARE SUB DrawPoints (Colour)ăDECLARE SUB SetupBall ()ăDECLARE SUB Rotate ()ăăCONST Scale = 50    ' x and y are multiplied by scale and divided by distanceăCONST Radius = 80   ' mystery constantăCONST DelayTime = 1 ' Delay(DelayTime) to slow it down..ăCONST Slices = 12   ' number of slicesăCONST PPS = 20      ' points per sliceăCONST Pi = 3.14ăăTYPE PointTypeă  X AS INTEGERă  Y AS INTEGERă  Z AS INTEGERăEND TYPEăăDIM SHARED Points(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED Ball(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED XAngle, YAngle, ZAngleăDIM SHARED SinTable(0 TO 255)  AS INTEGERăDIM SHARED CosTable(0 TO 255)  AS INTEGERăDIM SHARED Distance, Dirăă  FOR I = 0 TO 255ă      SinTable(I) = INT(SIN(2 * Pi / 255 * I) * 128)ă      CosTable(I) = INT(COS(2 * Pi / 255 * I) * 128)ă  NEXT Iă  SCREEN 13ăă  Distance = 100: Dir = -3ă  SetupBallă  XAngle = 0ă  YAngle = 0ă  ZAngle = 0ă  DOă    Rotateă    DrawPoints 10ă    XAngle = XAngle + 3ă    YAngle = YAngle + 2ă    ZAngle = ZAngle + 1ă    Distance = Distance + Diră    IF XAngle > 250 THEN XAngle = 0ă    IF YAngle > 250 THEN YAngle = 0ă    IF ZAngle > 250 THEN ZAngle = 0ă    IF Distance >= 300 THEN Dir = -3ă    IF Distance <= 30 THEN Dir = 2ă    ' Delay(DelayTime);    {I don't know why this is too fast...}ă    ' Try it compiledă    '--------------ă    'T! = TIMERă    'DO: LOOP UNTIL TIMER > T! + DelayTime / 10ă    '--------------ă    WAIT &H3DA, 8ă    DrawPoints 0ă  LOOP UNTIL INKEY$ <> ""ăENDăă'{mystery procedure}ăSUB DrawPoints (Colour)ă  FOR I = 1 TO Slicesă    FOR I2 = 1 TO PPSă      IF (Points(I, I2).Z >= 0) AND (Points(I, I2).X <= 319) AND (Points(I, I2).X >= 0) AND (Points(I, I2).Y >= 0) AND (Points(I, I2).Y < 199) THENă        DEF SEG = &HA000ă        A! = Points(I, I2).Y * 320! + Points(I, I2).Xă        POKE A!, Coloură      END IFă    NEXT I2ă  NEXT IăEND SUBăăSUB Rotateă'UPDATES all (X,Y,Z) coordinates according to XAngle,YAngle,ZAngleă ă  FOR I = 1 TO Slicesă    FOR I2 = 1 TO PPSă                     '{rotate on X-axis}ă      TempY = (Ball(I, I2).Y * CosTable(XAngle) - Ball(I, I2).Z * SinTable(XAngle)) / 128ă      TempZ = (Ball(I, I2).Y * SinTable(XAngle) + Ball(I, I2).Z * CosTable(XAngle)) / 128ă                    ' {rotate on y-anis}ă      TempX = (Ball(I, I2).X * CosTable(YAngle) - TempZ * SinTable(YAngle)) / 128ă      TempZ = (Ball(I, I2).X * SinTable(YAngle) + TempZ * CosTable(YAngle)) / 128ă                     '{rotate on z-axis}ă      OldTempX = TempXă      TempX = (TempX * CosTable(ZAngle) - TempY * SinTable(ZAngle)) / 128ă      TempY = (OldTempX * SinTable(ZAngle) + TempY * CosTable(ZAngle)) / 128ă      Points(I, I2).X = (TempX * Scale) / Distance + 320 / 2ă      Points(I, I2).Y = (TempY * Scale) / Distance + 200 / 2ă      Points(I, I2).Z = TempZă    NEXT I2ă  NEXT IăEND SUBăă'{sets up the ball's data..}ăSUB SetupBall ' {set up the points}ă  FOR SliceLoop = 1 TO Slicesă      Phi! = Pi / Slices * SliceLoop        ' 0 <= Phi <= Piă      FOR PPSLoop = 1 TO PPSă          Theta! = 2 * Pi / PPS * PPSLoop   ' 0 <= Theta <= 2*Piă              '{convert Radius,Thetha,Phi to (x,y,z) coordinates}ă          Ball(SliceLoop, PPSLoop).Y = INT(Radius * SIN(Phi!) * COS(Theta!))ă          Ball(SliceLoop, PPSLoop).X = INT(Radius * SIN(Phi!) * SIN(Theta!))ă          Ball(SliceLoop, PPSLoop).Z = INT(Radius * COS(Phi!))ă      NEXT PPSLoopă NEXT SliceLoopăEND SUBăFred Fortin                    FALLING SNOW SIMULATION        fortin@accent.net              05-30-96 (17:44)       QB, QBasic, PDS        54   1426     SNOW.BAS    DECLARE SUB GRAPHX ()ăDIM X(1000): DIM Y(1000): DIM STYLE(1000): DIM Z(1000): DIM SOLX(1000): DIM SOLY(1000)ăFLOCONS = 50: C = 15: TOTAL = 10: ZZ = 1ăSCREEN 13ăGRAPHXăLINE (1, 189)-(319, 189), 15ăTOTAL = INT(RND * 19 + 1)ăFOR A = 1 TO FLOCONSă    RANDOMIZE TIMERă    X(A) = INT(RND * 318 + 1)ă    Y(A) = INT(RND * 177 + 3)ă    Z(A) = 1ă    STYLE(A) = INT(RND * 2 + 1)ă    IF STYLE(A) = 0 THEN STYLE(A) = 1ă    SOLY(A) = 189ăNEXT AăA = 1ăDOă  PSET (X(A), Y(A)), C: PSET (X(A), Y(A)), 0ă  IF Z(A) = TOTAL THEN GOSUB TESTă  IF Z(A) > 10 THEN GOSUB TESTă  IF STYLE(A) = 1 THEN X(A) = X(A) - 1: Y(A) = Y(A) + 1ă  IF STYLE(A) = 2 THEN X(A) = X(A) + 1: Y(A) = Y(A) + 1ă  PSET (X(A), Y(A)), Că  GOSUB DEPOSEă ă  Z(A) = Z(A) + 1ă  A = A + 1ă  IF A = FLOCONS + 1 THEN A = 1ă  IF INKEY$ <> "" THEN ENDă  IF Y(A) = 1 OR Y(A) = 2 THEN LINE (1, 1)-(319, 2), BFăLOOPăăTEST:ăIF STYLE(A) = 1 THEN STYLE(A) = 2: Z(A) = 1: RETURNăIF STYLE(A) = 2 THEN STYLE(A) = 1: Z(A) = 1: RETURNăRETURNăăDEPOSE:ăIF POINT(X(A), Y(A) + 1) <> 0 THEN X(A) = INT(RND * 318 + 1): Y(A) = 1: PSET (X(A), Y(A)), CăRETURNăăSUB GRAPHX STATICăLINE (140, 80)-(180, 180), 2ăLINE (140, 80)-(100, 180), 2ăLINE (100, 180)-(180, 180), 2ăPAINT (150, 130), 2, 2ăLINE (100, 160)-(125, 140), 0ăLINE (110, 130)-(132, 120), 0ăLINE (180, 160)-(155, 140), 0ăLINE (190, 130)-(148, 120), 0ăLINE (130, 181)-(150, 189), 6, BFăăEND SUBăRobert Seidel                  ITERATED FUNCTION SYSTEMS      seidel@ifk.uni-jena.de         05-31-96 (16:32)       QB, QBasic, PB         330  21824    IFS.BAS     ' Remove the DIM in DIM SHARED to run under PowerBASICăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"IFS.ZIP",4^6:Z&=16074:?STRING$(50,177);ăU"%up()%9%%%.-%svn=ETB3U0B4%%%zE%%%,%%%%nk#xSy'gyD(Vb=Tm+T7L9F\w6ăU"3)rK[EQ(skn's1oQ*_lGXjD3qE--]'J[/xC$rMpj[2oV>inb-^rk(gj\^'nz\N3ăU"Rb2eTO4tvrsz8(GyX\BNf)i8,bdOru55x(LN%(6lFW.SSyQP8\aK<&;EyN^hlFEăU"Jti?Keu?03oLY-D=mh<$,j.?tBClrPIZRMd]tvQ'Vn7l2/gP<8'p2N%bbyZbHVlăU").y$KsQ^FklhFl4%*W?f&+QH>UZ<N&<xvJsbd5<Wa[VWmfGjr>a'.S8z$xoOpP(ăU"N^H,<<Ls,^D82ZdNC=G06XiQs8b\u%YJv8vuBK]MP7(83VGWJ'14R%=c]61K=H3ăU"gA^DXcll=05*:yK[8u^%(mXrQV2JJp>iGyKJNuI/Fn,1N7CFSrAe<;Ww=Yttsl:ăU"j3ZTg&ht[3OXwp-V.+pEm_7n\bcXAIes]DHhm>CO5Go,Zv.%'gcm<h_9K/)9iQKăU"jGprynIbsG1)yKTr5%5TXRZD42-Ufy)ci%/XYYW):Mxz5]O^xIFro9h5k#.1>Q)ăU"UNESyWf,j][jVqdK:k7ZsGoZ0%<Oj.-$Jo%F<DD:nKjE'u8<'u?;9Cj^Ul+X3YcăU"LdMNhl:Kw_Vd;$'o1JO.[eMr'YQ7?V]HmcK(<IgL4\u0al41Kn?tRWLZ.%-lNI>ăU"C?/?M^KZ-bK3l'v1bW-0>3Q%Ke-qjyI+$2vXTQ'N1thlvd+Me94R=Nk\YhhD:faăU"c7_W^(WYW&3L>buTXxk2c.VlRtL%Uhty)9GH&P%hU6S/4m08w.M%/QBj];ScWcwăU"F=Fn4o].#a*VI(<';=,'Xt1vk_gdSG'h*F&+0/9K2k'Lb<*vLcHFBui&\FshsXYăU"ZF/4)8zw)byOrnv/Arm+H0;>XIQYoQ2xTjUK8krsChMNqd=(HAWu:9OAO]-/%4QăU"T'_HW6;su'cRk3<&BkUr,mKP84420ZtMM'1+RrAds2OdbDl:ovKc_O-%FY^vkI:ăU"w*7=v#_M9VFX$7gK6.XWqVM9+8mjucq,Y?U8CTG#ED,4mAPtXc]ik8k5$9mYoreăU"x=%\3b/Nd%'^68J6rhEl<DF62*8'FMrB=+*&7Y)/h=*k*Jn?=E:?_\l>KsxL/Z7ăU"iWCb+Bqr*V+R-klGZR_m^g>,'=LzTOssOsnJElrYh,8<mAIAaHC_??YB#MG-'oNăU"7$i<5t*R3G'ER^sP->p'xh[YI%Q:]\JwA1kW;Fi3'I&4BD.zB5PHWtWWK.,#ry5ăU">R2<2uWGaE1Sc:zJWeWMVg$h78adCo*6L'3mz99g/Gc6BYC/=3c;X\sTk4wVp4YăU"_mt\8#(Gi722l]X>Zs(?Yd:T0UUN_u.6mf^?Uc=(*?Ssn'+gi[y4$h[6;XshXT\ăU"1uADd#V/EsI7,]99%,6GZY)lcnkQXj2OBf4b8L+)UF[l(mJVAb$qm8QjbMu^TYfăU"r;T^rXNVS^IU=B<2a;TVrAEqfS*.]$4aM*4[]*-k5XFhN1<<o_TOGU\ONwu8+P=ăU"%a;:>QU$II^#Y&lm=uS0Mm1/8J3(L?;VXL$zWi+JC208\FhH#m_>/eX&)%_:iKlăU"dNR'1(NX8u[F#k0(32-hl;m_6G2-nbLxvflpR8uXT1aHkl*],6=Sqpl+D.0^Rz+ăU"2Xf=$$i?7Y%>t4Td?pjw'hfYU06,^C>ZW(_%RYO[$8*;:XmXkH*EDX3K$.;NA,4ăU"(?\Zf*']jjE:EkgY(L.SO8*_N.tx7Gy+B?P=b)R,.e=oom&c8[R?txJtbUS6X7<ăU"lunwYa3$0Cd\8$ou)/'PQp7fuOL,/)M,D6Ty#:a<x1;xpW%#iNw5aJ1cKU_\7+LăU"a5kXV\*:t2vCeQ*C[-o%a+jlRt_A7>$Nf(Xe6z&,$r842E;PEDU-CqqBV.O%t)JăU"&<jx-h8%qK>]G-p.8uTBVuoT:Z^t%%'bT1_>;Aq[F(R5tFj:C=6VfG4.W+TU34zăU"?lnn#0MIs=)&nv.E_En,zO5Be6lX8QPyGQRU1%g#X_;j:d#U/jFdR-H4S?b4O:)ăU"G1TE[Fk/>Q4Mo_Z[m6&kTeale0JjfQqjc)O)ngyP;,'YHLDa)cl(jmJC\S6i1p)ăU"3e_[O;j/U<U^LXYR#<xcgmEWo=W_>*+b;4NSDJ8(cThCZqGJ54*^dXPRTfwu(eQăU"MOBjJDMI2u1_tFOI/ek0/EFPF.'I^btQD1K1LU7+D</)n6Tr[CAnc)Y<[?J,F7iăU"F7HkPmL#4J1:3$2fL)5H'S0ICDBq)P1(WfQkj^^iUpbjMcoeM=YzY[/^TM20,VvăU"3K%2ypBVc$JdRUUZ<H;Ni4*-nBC*jEM;Duw.i+e]'QS4*_DdRiX_AIN:dDlun/,ăU"B)7e1(?$N,)+/Sa*ZP>87$s);Co8w>.X;^V(KNHIC7:['j,k%a>*eGqHPak_u(<ăU"m['vjj>:G(*N8AM8SM:u)V2gQzC12b$hc\&)7b8&X*s;D?V_.ZtN.9fifxjmkESăU"O-dOsabg*L,6O,tsPp_zvWBk:LzbS%Wr7ew$.b>uO&h91g+^BDsX3j5W]PIBr8CăU"2+d\Xf&u>=_[fpNnS9X(IVgiatGROCAPN^S;]_gA7BXuP?Q-oYkIpaWJyw<[)d8ăU"ZbARD\nDD\uA?iur8ZKn37Luo3C[/2^&W(dLJ#(8Clf8dMruZ[k<&W'$qI8)QQFăU"Zh(CIw3.kcHo)]37Q*3/+k9'HTMZkj]S/A+k:pu:,gfc)WpH=Zbk'9mD]YGU3H$ăU"G9b\5QDZ<g<P*L(=1ubc1o+iN1q,Ld6cQI:;VxZXr'_2o^d/6bw#(+?krxB\qjrăU"]]d=q:6eP3PFRKp*bp8bc1E.+&K%#7oz\=7xEx0NQ<q2>u5uIg)Ve+6b6qDJZisăU"&c/8t*L3UDmVdf6c];B>S;XSuhbkUN:[,&O50Sz+RzwNGCiLNFpcDn98_J^hWpRăU"C(Zme]G1;AV-fqLN6tGBtYA_kpO[l.RR%<Fcrrq?pI]dEP68:=2Ueh4TIRV<cz%ăU"Can83I&R]^Ihn4B9tILE]1IPm2(WV7%KJZXi)9,4s-,Q5:^%T=m+K0d+O5_t$qnăU"\i<.^o:H4-$o5]u67<_]IgySO=W3gbd^9#Tgd2bfs6p>R*cgvjUrq>$1t^,vv3>ăU"R(tembtR?8bimK7bLa(bet,QH,R.7DSs]tJum:cm#avlmXCi^9.3pk^+R)uIleaăU"ua:e<tReB,hP#<-)0cRW>_M2g=+IMf[i4Q6)&[l3hQM<M=]?ohZO'R7Th#$tH\oăU"E=/m)eNSUFoFh+Hi.uC_C^GJK,7G>OhMDY0HIk%anmEfcnibKOsC<vESX0iojg?ăU"TFV7Bo8$#uibQ%iSA9ibHBNmg/uKFn.h[n5t4dWuv[k<rRz,ptJv'Yp$1c*uU[năU"Ku]VjeZ^jh^5-gl$j2<od,_;LFJW3]Sq%Omw3G6JV)Dtn%?4I7:eNSt^.Lw2#HXăU"9kF^]6vbLTUTF:>lrYdNBn.Dd;Q#F8:ra)drXPC)7IeQ7buPDzT?5G/u]Lsvc2căU"?SAndjfP1R]4VqEosEd&T_wNI1-:?Ppy*I-bit;ZPX^Gt((&IM<4ttK;9>T2oGXăU":HtV<3#GE<e^P<%dMXe:?1ne7e<QXvD^Alx\M#RrDci7[^Vu-+D\Y[oA1bz7YqTăU":34H\3m#pB0=4t=9C?Nd:x)Dp+2tDK:i]AhD#Hsu#NW6^?&aem,ts]p(R+3EL*măU"(B5^Mgtxd/H>cLWGpu/p>(3g[Dfa/8JGduP8:LL([Prj*4)tL:A+YgD5;_73R'&ăU"P*f;QlIZ1?Dp*j6DfI8kjv7=PYV3,(?-A'uobF%8HA](%:2x\sv(Gi#olU8DZWGăU"JDsbf4z$Ti&n_:?_ENTT7g.ufc(Puh2]6v.am#IQcoKi]kAPpXOB4&_DuF6#GfQăU"bk#q*>^<''N\L8tX'pMx&fJ<.9Ak0^6f6'he;Y6s,bDrun0dIy;d=tTX3=ESmnYăU")R/>.Q1KJQeEJZS/ja3L0>=T,nvS:8$m-#Il[,HD6t\l:Kt':&UdEw?6O0NF^o+ăU"r^-AP;9+\reP>&cd\B2xIY.OShP)T%i&_EQEg\PiBW3?o-+EXO9*\lTZnRxn;^qăU"tP0iFC^w6eE1:ha-71=,:sc#$ie/E*wJsC0)Pj%\#)IW4%5bU+VQC9;EDe($A:9ăU"h]Bka.gTzYs>6u\ufT\DcLx>Vk>fq/V3w?U)$4&16xKB#:idJd:k8;l4S-21dK>ăU"LcEqgefUjQ9pOm\ppCEV?F_R;DDOv6WCf6wA^I/U<-d/*PfJ;Mc1rpg^IqdcJZgăU"w6Y1J4e&FB.C/5aN%\V>]P;0fq,?6)\w=nRlg*jo<)<>MU>sw&ioD>M',U:=VZ%ăU"Da9;lgJ=<z%oA=o6Xw[2wHCK)[o-+XLWf5T,1/P,;B_NBnA5?$N8_H]PRkPO[EaăU"-lmdJ/+4*TQLY$l,FYK.5r>gyOd9<ATmTrTmR4aFF4.iRv_gUlM&DRc/v#u#I/1ăU":xctH;GLH3t<He/8,;v\j7)V+gQ_nY[vViinwKA:[O)X;oChT\M)T-W'Uk1:S]YăU"Ss0G2fBf3zuk]T31%)<v,FLj=73Zf=:B1xEALL52okmW+#Bds:,V;pOOZ/='$f$ăU"7YOXLlZ(:)VZ\]);eKDGjYaaWp8m=kEo0uA4o\bINRi9l-6>;qoB^_8n,sYr;OIăU"65\&kr,FFL=cs/SEn-ZO0-C/g63c?bK'B%Q0<jFL:/Fz4o)a?Il(-)3VBDoxhUvăU"h#;^M&,Z>e%eIE4U&[bI-3U/UBFj?nN<b6tT'<,UL$zHB>vN(#jKV<ZIZ2b11P>ăU"]se5/ky6DjF3l46CoRp^#r<OiN7lRm(=\TI,n[wk-hW;*MO5&arO0B'Ae+3RP7_ăU"<icM?2V\B+=&YyhvKb00pP/58#qowjkGMQ$Yhmg=iITS4naT=zb[?C6QS$v]R=^ăU"5y3ocpLiA03jjkSawaQd+,k?%GdI\6Z'o%#VV%)fbcO0W)a-9%$,KMQihc7$L'săU"\Y1JWU+$eNB5J(:uBRbiW,pJV:4\3F6jq\NwHmH.)T.s^)Dq,kA0Dd*P6hJKV:ZăU"L1R8Gdt8>tBx&%up()%9%%%d-%_*oqC%w7OgR'.%%H*%%%/%%%%gj%shmr%SgfxăU"S<yV=]So57Fl[BuNg$Ou,X[YY1oCI&T:sUO+fYM^Af0CadbV:-n-?Y'.wCp43UhăU",#JQ9.Gh656olt_60oJ2[dcT:n0gXPI&X6'MZY$23QpSyRlFga<gcxOeT<JDj:9ăU"'lp*'%y/FX.]X(_h+(9::[lNA9(8c:N5-(c4h3$/w0Rwd:knqN$?I#P#WUn8wi6ăU"k/mb0u,hF7:7YxMUW?QGX3[jM%;n)n?#eT?O$-66DIMsQjV/+R6PHop,kwfVo21ăU"XgC$Q<?>;zGGEK>'q?8AAC1(0]EJ7;0u,DMO<El?*6VL(x7nfqW,oT0NM:]<v5hăU":h]9$OF>R?m]K-JYL;)n;LJ'zXdtiDuhXY>[w=sx'#<xWWQJ3cia:CM,eaW<G%-ăU";jH;/NdL-Xg1>eZ'3.r/:vHm-752d_%'>%;57)e%M&KsGLf?d4l^dVntj%F>W$BăU"/BW=%o,RBr)C)K&Po,NgBo;2;?eaq94Aj'Z#Y0o%Vj.B9nia/F;KeU25:?&EWa>ăU"G>OCEv+Pg(e[AaKE)MAb38wLw>PD&>*H?<$p0IWr5^z0u8eq[cKkmsib>>q0cD2ăU"X3GtW[Wi\P=[DlFO#,TUIcr\#9LY2#T=u/p;KVtM^ciM1ONHcR/be9CQ6'8^w%+ăU"bOr?CCJX+=Y+25=G+D7NO$47nK3O<&kB+]\\mxdgs)H(nZu0%68Ap>-1CrS(&ktăU"zNC$&(03-+Ry;?f$_;dY$_g:KJ,M;tmkNTiO;Y689)D3Uwg:_<\Y6UnAhbm,(HQăU"m9B=mbpi>_nvqG8m6;\mbJ)Vb<]w2fDe-F(<p9M1VJUS/57HAGmirtM+392_Yy)ăU"$_fPOK.S(lod:HGx*tPv_&<Y.7/9SF9Ze5_(sjG+x+&dWRVv<ob6_3>$j,#/e#PăU"V7zX'd.V*TwDea9X*x<R6=Hmx5pw%'up(%)9%%[%-%TCv=EDuaJ,S%(%%?%,%%1ăU"%%%%w%xRnk%xugS#gfx<OzX>j.m5MlT[D1v46.3$8X84wqD9Md5XQ?J-.**i6bnăU"<VD2J#''%*?$Y>vH>J5FXz\ZDa4mUd7r67RtDW>r9^IlP,=].M/qe(OWC(9D2V0ăU"C1B=$uHZruqj<I?/sLWpTD2(RJ^*2-+<7arvOC/;;z$jBJW'FgcVth6LWnTfV)%ăU"JtAcFggG^LsA=xbYA,3>%N9TLhM24*PX4L^1<ZU,CSK+#P$]Z<SO;4Sqo9CunukăU"W/58HqBE/mkm<N;gez[M-81>=&<6nYOaPF/P3HZr:UZT:^4s-#Gny=5'g79$kOZăU"07i[]C.oy*RqNRo'UN)3CAHO:EMEm#-G>Xa9;9GM?O-an%j:t59EiF1gR&SoMtpăU"B?R13iX^XR%Ua=Wr158,J\r2Gn7bU7&=9-RLDBquX:(LmgbPPr$vMzm)Y:ZWFkUăU"OQ[uGxE>FmPzXN\)APQ6uK_nJSisg3$c-78B:BPav,LE/Q*W&.JD-eQSRD6Q,G1ăU"6:\lV#>:CEjGE;h&MTdomCJ8_Pt3BIb'JpTe9F1]5$1oVdrO3&:iO;),XL<:;^NăU"nV$A;k8%bw8DV/rK(D.vXalecZPrkX3)h?CM--,ppR&;8*VasrWTOACCXI2r1rWăU"kW*Mc4?jXEZCjA8b<d:m_PPDrQhim&,c^c-56DJ=5C(UUqqDt+>r$x*4OiTsCrEăU"7')yLx#5LP4ciZgE;5hFNuJp;DxfTXJrVA-F84Z,?hqi.l;IFw-6HN/Gfe_RQhmăU"CI:;2Zgx9=Ju91L0W:pe:wT3XjqW;1im&a=uEOf9]Zja-7ueVc#LrXqSD-iU-qUăU"EmBVSq+m%::&XOPm4V8SiTI8Q1;uN&D29Gc_=HC7)eB4QiGzpTnYH#bUGtSH5'HăU"(X>>^2Y2)aW^[^o=#.1*=O*1WHdmL\);HuOY]GGH\eOa7dBU/ZB^)podDnfg&4FăU"S$tFUS9kZ[:\>FQ3.5kcqDr#0U;GXQGS6t6YZOvTGw.aO=yi.QADK:.:0hI)+\HăU"..]rAM8+>wXUUqn06lY%ts]U1d2jBB<vVj*oj*Tu$:;A2_+1cLUVKM$9j9/AD4săU"V()TgpE->\-W]inC3F1cj,sgO(LL&SsmExs;b,q1l)jKe\gsukyv_e'qZnwW9[năU"tcK=Rj+tKpqEF7=pgmA^rnLxswMLJ-nR?20&6ZA<jSTgOOD)0x2lJblbY5vii0%ăU"bfs;'a/y'15^1b=Z/;+Fu23\.VbllJ2j3H*P#WaCXCGY<tVPoaSu\%dup(%)9%%ăU"#%-%QCj4DcgKe-h[%%%)%&%%1%%%%f%mtws%RgqS#nkx<k$F9<dU5Shs'6<UDiOăU"R3r#P10pg*aNoC0QBdK;%^\qQbqne\(ug8iccOGFo>V5TEfi^p=t0Y#&X%pvm&0ăU"&[*E^fyz*5\t;Ih's%rE[9qAbbVf0P*b.w99hM'aj_SdL\BVVhuKP_<jCwd_C:OăU"$Nw;ED5S_vQA2ruuCKlj._Yg\'pLk<NXpjj=lKPiBE[C2w#q?2K]pCzX^u/=+LlăU"A'4542,pZ*knp>TbeU8_l5fbVO8(:L3XON5T]18;j/JYNcVhM?sOfSuvH?3OFCnăU"%UwaCRcR,ZmF<eB63b.7X=/]s'q&up%()9%%%%-%/jj4DTpw;b'?%%%&d&%%%.%ăU"%%%gqfy%ySnk1xD_r,9<U5akp'VD0Enpm[X+]#]<-3j<[-9)u98UIW=bLV=mB[GăU"cIj&ZXLHj4to8?9OF>Y>A'O)8:%dKF]q)P'9u:MXLHmad&ea3mQ[^7.T8K;R?nPăU"D=O5OG]cA+u+0h+<pYLd+g-9qLXo=u77*cBzT>IM>A?IGqQx(Ave1ea=k%p$x[3ăU"<v2DnP)gewk:a.^*/(\f]r8KDb(BsamNPaUk_;NHLPBb.j;UT_)$HG[D/L<5M#.ăU"Z/-XV(4:Cu%p()9%%%%-I%^P1aDV[s*m]%%%%'&%%%0%%%%hqz%xyjw%Snkx,BGăU"NR[SnR[o^W_^7wUIX[zuuI%v%W1'91=2\f&.a.M=Qn[(bH)CC2x2[Et<?,OJ/-(ăU"&3bK<5+3]BnE.o9dVMX)SZ(j_Os6AeMpo,+9M:WLwBAaAA7pHT2aVQ)D,7p[wX:ăU"KC?Z9Q2QDP'U/4rH7/frn&xjJ/3:xhN&x^/?MUeeuki5+5&+%up%()9%%%%-%&^ăU"aVEF]eOG%Q&%%%V'%%%0%%%%infr%fsyS#nkxT\$vt<mE5#Xanq3p/uKee2P:HYăU"WR5o1NE9K6X;0>]jJ%DHqMB(.2*,1Gj4iR\HwpdgufuW#AeX0keP9TO4?gPmI'2ăU"q:'E60g24l?kr_SS]?;_QHkTn^E#^h/l2fuvqs/d%2A%Y+T+kPHR7g;_QW<(o^kăU"he1?L9cYWf6T\;#O0<ddNFj5N9.-cTD*cqBevwFsIvTDD'zLR-su?/Hfaj]/-uZăU"gJifts*_cO+L:(Au_v)<;L.<^k%2$?\Q)i8LckT+cOS6<p0olGsnVrktOb%y;E2ăU"w]r:Njr[?eYvPV\viHbW)_%1h9p/B4_Y?Vzk,F'm\FBcTIYf5?$4P)/mcg8SS/FăU"E::mvF5dS=bUihUBqZ*LVFS>;A-RDn+]t+u%p()9%%%%-L%3N1CDlM^,ZD%%+%făU"%%%%0%%%%iwf%hmjs%Snkx&BNoqoGmF\o^W[^=WI,U%WVU\]JvUI+X+UY9*UKv'ăU"I*W2_\[rEJC9OqC;5KU&e;ev%hb00%HHp(')'hh#(X(B/_SB0JB8B2&_n+eDHBHăU"_Mgx$PDtT*'hpXh*DTTJg)8;3)^;/hFdRq\FAOKN'Ka>'iMi*iQ'f\YWmZW$^0KăU"Z&%&z\*w1EupFLTfXQ,Q3gvAM.Tfqv*)'Cp1n9Jug)2\$gu)#Suep%QdtF[MdN.ăU"&wiF]%ZXJZmlf<IHKKyb&f0%u%p()9%%%%-L%rS14Dh6](Fe%%%%=&%%%0%%%%kăU"fs%yfxV%Snkx8BpEP7nQGq[rtrC'Ennz=U]^WcZ^WI9,uIv7uUIX7)w359CeH1#ăU"q?G$^kuE.A5-j?.>8WaIW.%:PQ>+W05VaB+5.k5'.+-/eu;13L*a)WCQWYS/aenăU"=AiMMwgPsv_OIjAHo3*d3LIes5(OsZ;[N)*d['*9CHkl9QEkbwZ.o9Qx#XxwB%9ăU"Y1R#RrZH'2%up%()9%%%%-%2cT1DcQr-6&^%%%%*&%%%0%%%%kfsy%fxWS#nkxBăU"+pEPn+QGqrmtrCE%nnzUc[^W_9^WIX[zuuI[vuUI%X%X57Yi;5NAVWQpm2[.1=qăU"7V[[Z+kDC01C.?rZ.(mZ&i/RN_WHK,%a*?I+e7\(&u/&M8QHCGQ%ZY^kC40ODn7ăU"QnFy(m:Qw7-/O*d/Mc^]$N)^CLt;dIM)v5;us_MJ7=))Vi9kA%&%up%()9%%%%-ăU"%1QU1DlD:yt'&%%%%a&%%%-%%%%kfws%Snkxq4^:CB;U5SrhP5<'UyUJPj?a-djăU"/-TdLu[x\.-R=UGGej(#j*jpThVFtKEgwg9V*i44Nsg#/P*C_pPR7%z<yR>qrFgăU"S'502Jzry')Hk6O;y[1AM1_luECsNf2.2M.*fsmsT[1\'Tlc?MW%4fj9)jB>;S&ăU":b+vkoffb'/nThhqZtB3vQPCc?i;K^dA*JEO2\?D,-?\R#.,lhTce/rD6]TmF>%ăU"8up(%)9%%[%-%)[aVE-mO5#I%%%%S%&%%.%%%%k%jijw%Snkx(b\btB<U5U8FpwăU"4B0:I1ERVda^6x2cc;IEo4i2u:8$P23lEuB'+3^;dPIXJKLR\cs^e_'-GyJ?G\QăU"oP%;\2[172c(y)JZqfm>BqNECi7?'<_p_sE'3>U$pnNW3EF\T5/^:>-KQ9W1,(kăU"YA9<aT88SN#/op0)/l21bB8m*k>49Tn6_<jOL:pz:]O(pPS<4ohcprl#mXagMu#ăU"^KbRKZLsa$+l8Mw)pJn90X/h7Ku*su]S8#OnpkksPDbM2g4rVDtP.\NM&%up()%ăU"9%%%#-%9/e_D+94.pl%%%%W&%%%/%%%%kn%hmyj%Snkx>\I:/&QUA+?i4Y$AK\2ăU"iZEbKl10pzc>POCfsN%NV1\>jgRgBS/=Dtwd2E'tsN6$WrtL(N<>CflC,<;E4U(ăU"ieO[Re8s:.&3XgRL3lY\jxGEC%a.hG5REBZo4YHhPb.1AMAO_%k;,b2UlB9VmQ6ăU"DR,6?-NL5+E#yFVfOmTD\sv\=1;G\(lc*bS;o$cQ)>WxFc1v;0'Xup(%)9%%[%-ăU"%R)#3DfDkcHb[%%%n%%%%1%%%%k%tsyf%jsjS#nkxBHDHP8oBp^^=W_^W'IXuu'ăU"Ivu%<J?Ce'H7nuBP1O7L1%>0[/7XI1XQwU7'p:).REQ;6acp/8DvMP_oz\Z-^KZăU"'o4lPQ%Ai>>(NOMhC(-So\Z99M#:WwB2AaA7:pH2aNVQD,%7pwXF:K?ZL9QQDAPăU"'/4*rH/f0rnxjRJ/:x/hNx^I/?Ueheui5&+%up%()9%%%%-%._yQDIDk<$'8%%%ăU"&z&%%%1%%%%kzjs%kjhp%Snkx;d\:s'<U5i<heu4&BPmYJ)$#*BXpI=bwZ,UG5TăU"yD^88#YoUd#=eW8V)qVlJega<Lhq^K1)&%sPO<C\>8[e*Fb-(]]N6&,(>:tb*XeăU"w:d^J3OyyfR9hK$xnWOr^.]5\jrzWBKD9(t3C]3BXIVxVc]qma*cEtcHIj-rhAaăU"IJU#-4R]n1-3*:eTDDrz)$D<=rP[\,M(wK1bPE<m4Xi<$edHC[pBgvPeHTAV]=xăU"^&P]iQ<g-.s'u%p()9%%%%-L%2k1.DDta(W$%%%%Q&%%%0%%%%lfq(f'nj%SnkxăU",<Dr/B;U9TEJHEJB1X:K7FNvnE$q]<&&uVgGo-uYg_DxgE=cI9pF>k:$\mxP/FtăU":]0D^bg+<Q(w)wt9?TXoA.ksAY(8Wp%*%Jj>i7Cigj'rLMF<[aO'm.fSxLOf4q>ăU"L.A]PzY=RkV*>G6G#e3EV;Q='(.rp<gPt]Ao>T5GiJ?JRZb/yE'ZB6%Dup(%)9%ăU"%[%-%OAYiEXaN^XL#%%%6%&%%/%%%%l%fwyj%sSnk1x<_V,:<U5hTFPw?<TKg/3ăU"AzVSGsdaqtc1-K,A.;I8lQZuUEv$/d:FUpyRgV?4pbeU$262Wn9QbAdgpPaYJ_#ăU".?fse.5x,lJJ#:m26p=g*(6dwWp?eDDkvXZsjshFU*twvVu,raqI)g3AZQw(&anăU"V>-Z%u?3'>u#iI[Ke$IgPW6R.;S[<AO.[TPN;Mtm\vCCvDmD,K$Z2RzXb+Oc#?HăU"i)NY$fr9=n&t<Y52]rpli;6+a=&L?OLj\;FXS[]Q8o>ysAfRp=SudT%up()%9%%ăU"%#-%>b7iET:7&ec%.%%#&%%%.%%%%lw%zsiS%nkxzauDs<RU55*9kde2Y_).jbFăU"g5M#0g2q/6<jK,9cm#VVmrBjq;rqB)X$m?R.5#m$dt<esCGoPet8a(Gd'u4HUQgăU"JllO.S'iK4)isj6)HyHw/diY__,R<OXdAP8)gczr,$$?N>zCkW6qXI^MUC$/YTRăU"3$IUh)Reh9yu5Hcf+/:lsng/SG'8oV5d)j=%$$l:,Osqi=\>PFb)NT%<ih%Y'MSăU"l.'VT04w%rZLm)4Bp](Z-'0=hO:yd]uk/#:x?<5O;DBviZm^GQ<eR2MG#KEQW?>ăU",3'Fjl?NEw=csJpj%.up(%)9%%%%-%T_lEDfq1ZMC[%%%A%&%%0%%%%p%thmR%văU"zSn.kx\t3D=RUj55*kadER&%yH-/F6p)x$Ct/v%&,[VYY:C1rKBx5^YP;Jao&44ăU"j$dHQefsf%GLN;U3)BTv<4](IB>o/SRfA#GdgdS9eC=>76jQf\KVBxX$:kd#rDNăU"_FTtYh:<&MsLjnkZg-h5v\;H6hCXk<xq'4S?[k0)e[5bSn*4WFV\S<QC]^0Rw0MăU"G0F1t,PQ$Tc^DtWaZS7dt:]hLa;#D=2oge*e$xzGa>hc)uzlN_W*tOos#^NX)QkăU"h%?Nc%%up()%9%%%I-%/_/EDm[<^A;%.%%]&%%%-%%%%pt%hmSn.kx\s3:]QUa9ăU"5\b+dErr:QpDwcZ'K?9Dko,&yypQLYHqmHvljYf4V+/5VPHXn>W,nR,P/&93>GcăU"%^hAJ(nQ^_s5\r_J>MWPO.xBM5sxFObt?sRqbqT,dqRQktZ]Yq$DM^>:pK4DO$#ăU"hl(Xe=WVV]+vUg*>(_w].OPioF<+BCPBdQoL:a<r8b?3?'5VjD:(a\=w0>u;jfLăU"(Zj>6)lJh#R/xd$?0OlLal#5caK?$uSw]Tpk'JR:Ykv%%up()%9%%%R-%%9A3D,ăU"m;&EG%.%%-&%%%0%%%%pt%wfqq%jSnkgx4]:+o=U5kUhT5c<Uy);0aEq^_F6=-TăU"o.OUk(a=np9h732bCPqQbD#fHd._MD(vHaS'p'a(m.,_7Sla*JB/I]3XnY+YeAZăU"J492/It=cb6jYT^n3[-opd&<S6,5imq=-CEo&8EDG$cD3hdwYFC:j0pjrT6+0#$ăU"&P?Wg+pp+sC]d,ra+,#ovYdPBFnu[\Z+sBvnwoBhi[g_U2gKYWLeod[2gW^HenkăU"u&kZi\JTLEQ*%.]D:sD)*(\=uDr6E\?Dyr*:Ddu%p()9%%%%-L%ZEF=D-f.,kI%ăU"%(%.'%%%/%%%%rns.pt&S#nkxdOu:]Q7U56\9bdErar/)QV<_4a\GUV).dufO)săU"TKhPd,N=I(7Pgu%oIBtJlW5k8p4&OqTwa.JMc:)iaZJEYJFVUT?NVq8LBtn-5kGăEND SUBăSUB V2ăU"TOfoccF^8u6-vf[Yx,-P(Ct3aaDpd0,L1ID?8vvTkX?*5nn;6q7n\>4Ws8X,s$aăU"*dTxu[c'gQE6DG;jpXF8Y.j&27YPO_[qnyEFQFSBM#+<T-Pmp]Viu:;NM2_iriCăU"0hQB_x0>=(V.vGH**w:0TnM0O4/w3+rBBu%p()9%%%%-L%Ql11DhbW*Ue%%%%Z&ăU"%%%1%%%%wjp%Rgfz%rSnkgxL^:+/;U5jihPvPV2x/#ow?8f(GQPK]0)[FuM;1QLăU"4N=;;yOGNg0V(ooR,Stm64NW6DQe'woQHC+$-/5\2Yimj6L'#+EpRr\r7u>*[c]ăU".7D/3ow(]h(mA?N%'Wi/=<Lu#U=KqPTQ+H)MoAt>SWBoUuhCGOa]VB-iZ0O7q<oăU"TCo33?O:lJ:w1;T)6+Ho%u%p()9%%%%-O%sm1^DgAs+'B%%%%h&%%%1%%%%xhm%ăU"sjhp%jSnk.xr\V,><E5_TFpuYV0.dV9CY/M/^yEN.VEDMaz;Ts7B:V-tHpAjGrUăU"4;F^hBNv#[KCaBAVB^OO79]kK\F22B-UvbMU7mxO#'2jm7_<VLdNkRw=$R%>\ihăU"Fw*3&EFwETlPE\2A:T2yDg'GH&yJi4rs;q):933#aLxP3O)ZVy?2m8?-<Gqy^07ăU"0W4XLtKxFa]s_#qK6iCf+(H.b#tL3GP%Wjfou>HP]=FIu.q..4<q,gJ1cvG31a2ăU"XL,C+Ij'n4up%()9%%%%-%&vaVE$-+3T'O%%%%c&%%%/%%%%xhms%zwSn#kxb]%ăU"ft(F:5ThIWuV2x/Xpe6[MArS)i-a9<\L0BHT?2jpu%Hw2B6xP8vThbLcWVB,i+9ăU"-.wezad?2^Io-/6/Fq9F9bKshhs1Ga&/A&0n5Rp[1t;Z4f4/j5VD'x/\8*Q&2RXăU"_hcF[OU9jDQ<*Y)_87k-jE'oegGuVV5>xd9+=$O3k'siQ<2,fg/,Y9\L<cm[A9PăU"_g/do\c0i3LA8OJgBQLY.lM.0I2hxj60,Qr*ws)xUOcZlfk\t\Scs.Mpsv'$r+jăU"')q,>[gK^zY.%up()%9%%%I-%Fx81D^V0$si%%%%1&%%%0%%%%xn%jwuR&%Snk%ăU"x0pR&yoRO#OnR%+-GqR=OAEPZGGMD7NoFqsrG_^=W_^w+UIXzauIvIaZIX)+)K/ăU"u%?I1GC2_m2FInUD93Mc2EjyluG0_HbT?K5+FElqpf_?RM+#b>O[eq[^'^Wv%L&ăU"DTq0u7-SOt0/,kf=aMpqT-?LGTo/2,oOg2(MmgCuMw9CvXg?D95o9M]QUp2ttxKăU"%T<%u%p()9%%%%-L%)x1:Ds(P(n[%%%%&&%%%.%%%%xnj%wuSn[kx0G[qROAoEPăU"GG*MDNo]FqrGc_^W_]^wUI[XzuI7v%K+[E?ibAO*6;(-8qeB.Fny.vn28J-S,oCăU"YW,qV\P-$8mF=y(x-Sh&o^//'c/?>\x^^3Pi^xh:4H2aNVQD,%7pwXF:K?ZL9QQăU"DAP'/4*rH/f0rnxjRJ/:x/hNx^I/?Ueheui5&+%up%()9%%%%-%2'y1D>EXq,'KăU"%%%%v&%%%1%%%%xunw%fqjs%SnkxRruD9]=U15a,u43r.T=As4Bk6U9IVK<:e35ăU"1?EfYQm7N-6BF0Z)f0k?g4m>DqE-T>F2B2ON7Wq]pUpHJ:UyQn%[KyJBD-5K4FZăU"+kA4>*h33,XN93f(hOYaumpxp;_%,W=h^oguXM0.1/0C;coqXXxfR=og\JQ=IreăU"_]#h,PNUcHQ9CTa(ok=DQXCRFKj&;eCxba3YVy\bybD9[Vt%tPLt-M?Uiw[st($ăU"6jRiDX'YYtO?9hn'bvdlTqEgTk3R%G36.KZ#'w%up%()9%%%%-%3Yz1DJrFBl&IăU"%%%%7&%%%/%%%%xyjn%sjSn.kxBo+qGSS=nFEpc^^WZ]^wUI7XzIv%%w+e./kiGăU"K*Fs$7Nc.kQQMi/eyZP,%2nU<Y(&'P/mF_(Stqm[39yOC%Vv%'<nqu7\-St02/,ăU"fi\oD:KC?Z9Q2QDP'U/4rH7/frn&xjJ/3:xhN&x^/?MUeeu5i5+%%up()%9%%%IăU"-%O9e3DaP97z2%%%%i'%%%0%%%%yj%uunh%mSnkgxl^:*GQU5bShrs(3Jx8%pM)ăU"GnFh[F1u.oe*xnkMMsomL/B<1ro])o)UXlefh8T%/WLu89JEv,v2ZYa(OJYJ0a=ăU";CI$qO_C$wbsZGfkE)XeFb47yA#dpu=TVTPv'BTV0PDg^9,PDkmMUU?\T7Ku-dJăU"':Y^JW\fi;;oc?eUO<w_mz2^F.;:5bVk<t>,4LeKBQN:c*Y/l^.M2NtotsZWX?AăU"S+fR&SKhty0D8bISv'k'up%()9%%%%-%5Z'1Dd=Ry#'5%%%%L&%%%.%%%))&jn%ăU"lSnk(xZOtfFq&A]FQvi-GDTSsmF\^sW_^K+ZIXV:X&Iv7uUIX%Uw%WJOGUU'?u6ăU"h#xE(w#if&T=[[^',a?;u8\K?/KA1,gI9upx(>g[ZRW'L5)/\KK/U54+JeUUP%JăU"yHy/p.c[dZURSL1EzPF.MKo'<E1pF=<'73/pP'(-wPMq3s_]&s<Z'=bbb;Q%da'ăU"Maix_3O's5+9%09muMDH7x-Ct%oROv7-sFqanFvI=U--Y?N]^'%%up(%)9%%#%-ăU"%_-*qC5&P+P,[)%%?%,%%+%%%%n%kxSuCg<z,,>Sm9tL0]x,?dG&Efu#y_5zkTAăU"dmUx78UAKOo0>2SKFLg&#YC\b_0ovj.tRpBW>#Y.9C/cuGE2pKUXf=[Q[-mL^V7ăU"ki7j.qe-\LMh1H^-.YTnun.1Laqae#.8IU+y]$U73^W'9.5)<^w(f3up]M+:-;oăU"yS623RY3C3:x91p$c>B:Ejh\2f$)?xUY/0rwxO,rX2cZ9b#^=DGY?bdibX*dSnWăU"Cp/]hE9;au*rGW#gS/mEXS<J<.7Wu$d79PR[bw=6#AZI'C6&9.drgGN0pbOvdY*ăU"8r\UNijFG5/b2EL(;aT'0nlu[In_WgD&0TyzLD#.e]4:dHWee*%7U<\ZA^[l3\RăU"v,wPUEO>f4U_Z-o<*a9o$b9p];n?kM5IhS/01va&mLi(C&R:?tAtTH+(WDlebUTăU"YfF$)0[0va8\t(<K4=URtb;.n]:Z5%wbH(5q1mnY8Hu*4V)1WlY0,^Twj6F>-V%ăU"6XjTFN1L^'>F)0UUu_p^AK_cnY5D'd&A=K9>^Dqi4Xj-:)qlCmv$Lo3hneFYNE%ăU"CPxMc;0eBG](N4>#VWm:i*z/n%xhS6R;G<q#E'nQ+z+y7LZ2ji?oaocV$3f/TR3ăU"kEkOf/NR3CfoiZjWu%\n?_S*.C.[wb,)_g#752Ek'tU_9bWMtrd][y_ob:-4XBWăU"h5/]#>o=yZ.Y[<_sP'F-,:2aA)cy5;T)2Yfbq^ZPFg,Y33q/M/+/GGL2909d2+4ăU"jbS+gqGPs.80XYSqUrfSn-0u(LOU)J#<qD:?aYgA5?p6DnWcJVXRZn&A7mN%kJkăU"Vx>iq=Y;Bp3O;D(XBNY<XlWk=2Z[lJe]1kJF5x5sP;7G#l%''ePyAhNx<l+^cNUăU"uqmbE-3_g;'r^)9uu:M7Jf1X2C?L00R6r<SeCJX7A2s?u+kIZsjHq%([ivye+$$ăU"U[sFC.FoCbfM+[1/Wb(:gIj=Ogd,nD,h2xKXK=FNuKNufnEX5-??^rrV#?Ymm90ăU"3<'RMXt%Aq,z.llk7Z5EYGu1eH4F[G-L^cqy_Dtp,c?Nlf2-JBnnaArLfFAbL#GăU"xn=OEfs-;(J&Q4]qV*5dsJxU)=7fO1N^plp>[BEduR0]QetW%2XE9%9UYsHU;r$ăU"510il]_DLH3MS2+(3hl7r>FI^G[NEb[*7FP9JEq<RFwgEcASD+/F<;N*\T1SvPLăU"KM^yU&k#bNGAOACdxw[a(,NBRIo\jvKZ'I*8EGQLJ*;<?s[sH)k<KA,lVZhU_T+ăU".XHdGj,WZZ?7RFr<]Up*N\gMoFvP6UVOn*k#w5VU-3?L)L8gBMi:H.t#P9][wD%ăU"up()%9%%%d-%_*0qCQ(9f99(.%%,,%%%+%%%%nk%xSvgA<yv>BSm5Mal[dEi2$OăU"ohaRy2>yJn&(7b_FbUSim?s/?(V;2O7E6=E>bds8gs,XE'72f;4o)$tFnKXXEA=ăU"P9:=)s'EF=?<.+,FkPEW7V.:Fh733s#?rMu0xm>[EN:0U-,=-E+wR<Z6'ECUwJ9ăU"/R/9uave-+dkj]vZK]SUP^kS/(5rqVSr8QN-p1e3dOz0mFjh(CUdMu?1.Fwi9,făU"A#XfJF=7h9f9.Zi'u8kE5BHrilv9R%1.RCeS'Kv=Q??cXsvq<n$R+n4uT=Lf>+măU"Vb+TgWY6*TCE>Q\D_DCR10oW9(HX4>pDdnmiSY*\q/]JsbkC\$l0UkY2iW-G_V?ăU"Q,?km3^(81g?:$/H+I?780'].NU)Eb_PWWn[k2=hFiDfY;W8q,)7Z#\.[JzHZ1BăU"Ge85U\wGttsWmm3^5b]:FW1kpY)#0B4KW6'M&mevBL&i7I#3J75ZT(ycodLn3eeăU">c8[Ap>s.QX:)qt(Fd-x2$/e6/PIp/JhPXif*z.S+96hIjn6gPPZ--/W6'MZD\,ăU"yKUH$7a;sq,BGosJK\UCq#S+)T](0:plRRB*C6-K$o#lNBpTe]p%P1tfo5S7)/5ăU"=S)??AI5=t+<?k\pW0M*Cdncq<UHU0664fTBu3c]im?M*;c?1HCe>4bPi8nXXK2ăU"xL-hiQlS8Fus,$I,V6px<'C?yxWRJX;0-kEc(odgq7>z31UnG<0gNP5\4E9ejuQăU"jHoab(M9dQ->?LXq<&VVllEeDmkNuE,G0Sw]n+rTFZao3hhL&vp$UL(ht&oYvW(ăU"9$]c8o#hiVqV8iY#lINxBl(xadT[Q;U]HYJK25(%uiA2Zc[rh2T-z2jX>T0v&OiăU";U4:-UJtusPuBBuN._Q$tf?7pxb[H&b(em.F$Yz2aD34,72*)g8p>x]+ymp\?tsăU"lY=)8R7l:HE=obdDodBHrc.t/#RJN%<9c/t>Uom#A':/b$xyF2lMpK6sXQN[$]qăU"V&0$i4<;72*bxYcHADO:.?wmieO$QeWWe+8T-&A1ntn1VG$f?dBR$gG^G_b6A_0ăU"$:rcs8JPnWUu&d8;ogs%0Q67=a$tdgNvFI%X8no-Jw_/E?GkhlqyA*rlKj[SPl0ăU"jJ>W76pp$vc3VIotvIWkpIQ6&DH%L6c,x1TnyQ0TpB=AE'$sY#*&XM0%a^=ZhsIăU"r<3UEDRpW7Xvp:E9\lP[[GkViGVt^v,/j]\*bWVH'><J2qd%up&'%9%9%%%%-%/ăU"sv=EZTBU0&B4%%%zE%%%,%%%%%%%%%&%E%%%%%%%%%nk#xSy'%yup&%'9%9%%%%ăU"-p%_*q=C%wO+gR'%(%H*%%%/%%%%%%%%%&%E#%%%g%4%%g%jshm%rSgf%xup&%'ăU"9%9%%%%-F%Tv=pEDaJ-,S(%%%?,%%%1%%%%%%%%%&%E#%%%h%7%%w%xRnk%xugSăU"%gfxu%p&'9%%9%%#%-%QCj4DcgKe-h[%%%)%&%%1%%%%%%%%%&%%E%%(%l;%%%făU"mt%wsRg%qSnk%xup&%'9%9%%%%-C%jj4aDpw;,b?%%(%d&%%%.%%%%%%%%%&%E[ăU"%%%/%<%%g%qfyy%Snkx%up&'%9%9%%%%-%1^P1DoV[sm&]%%%%'&%%%0%%%%%%%ăU"%%&%E%.%%r=%%%hq%zxyj%wSnk%xup&%'9%9%%%%-(%^aV7E]eO&GQ&%%%V'%%%ăU"0%%%%%%%%%&%E#%%%)%>%%i%nfrf%sySn%kxup%&'9%%9%%%I-%3N/1DlM;^ZD%ăU"7%%f%%%%0%%%%%%%%%&%%E%%%'(?%%%iwfh%mjsS%nkxu%p&'9%%9%%#%-%r_S1ăU"DhA6]Fe%%%%=%&%%0%%%%%%%%%&%%E%%(%r#%%%kfs%yfxV%Snkx%up&'%9%9%%ăU"%%-%2cT1DcQr-6&^%%%%*&%%%0%%%%%%%%%&%E%.%%1A%%%kf%syfx%WSnk%xupăU"&%'9%9%%%%-I%QU1XDD:y-t&%%%%a&%%%-%%%%%%%%%&%E%%%%?%B%%k%fwsS%năU"kxu%p&'9%%9%%[%-%)[aVE-mO5#I%%%%S%&%%.%%%%%%%%%&%%E%%+%fB%%%kjiăU"%jwSn%kxup%&'9%%9%%%#-%9/e_D+94.pl%%%%W&%%%/%%%%%%%%%&%%E%%%']CăU"%%%knhm%yjSn%kxup%&'9%%9%%%R-%R#A3Dfk/cHb%7%%n%%%%1%%%%%%%%%&%%ăU"E%%%&xD%%%ktsy%fjsj%Snkx%up&'%9%9%%%%-%._yQDIDk<$'8%%%&z&%%%1%%ăU"%%%%%%%&%E%.%%5E%%%kz%jskj%hpSn%kxup%&'9%%9%%%I-%2kA1DDt.aW$%%%ăU"%Q&%%%0%%%%%%%%%&%%E%%%%tF%%%lfqf&'njS%nkxu%p&'9%%9%%[%-%OAYiEXăU"aN^XL#%%%6%&%%/%%%%%%%%%&%%E%%%%.G%%%lfw%yjsS%nkxu%p&'9%%9%%%%-ăU"%>\biET[:&ec#%%%#%&%%.%%%%%%%%%&%%E%%%%)H%%%lwz%siSn%kxup%&'9%%ăU"9%%%#-%TlSEDf1>ZMC%7%%A&%%%0%%%%%%%%%&%%E%%%%:I%%%pthm%RvzS%nkxăU"u%p&'9%%9%%#%-%/D_EDmj[^A;#%%%]%&%%-%%%%%%%%%&%%E%%%%-J%%%pth%măU"Snk%xup&%'9%9%%%%-O%%93ID,m&,EG%%(%-&%%%0%%%%%%%%%&%E[%%%i%J%%păU"%twfq%qjSn%kxup%&'9%%9%%%I-%ZEnFD-f:.kI%.%%.'%%%/%%%%%%%%%&%%E%ăU"%%'$K%%%rnsp(t&Sn%kxup%&'9%%9%%%I-%QlJ1Dhb4WUe%%%%Z&%%%1%%%%%%%ăU"%%&%%E%%%'XL%%%wjpR%gfzr%Snkx%up&'%9%9%%%%-%3sm1D8gAs''B%%%%h&%ăU"%%1%%%%%%%%%&%E%.%%nM%%%xh%msjh%pjSn%kxup%&'9%%9%%%.-%vaRVE-+=3ăU"TO%%%%c&%%%/%%%%%%%%%&%%E%%%&aN%%%xhms%zwSn%kxup%&'9%%9%%%I-%FxăU"81D^V0$si%%%%1&%%%0%%%%%%%%%&%%E%%%&_O%%%xnjw.uR%S%nkxu%p&'9%%9ăU"%%#%-%)Dx1DsB(Pn[%%%%&%&%%.%%%%%%%%%&%%E%%%%xP%%%xnj%wuSn%kxup%ăU"&'9%%9%%%I-%'ye1DEX9q,K%%%%v&%%%1%%%%%%%%%&%%E%%%%+Q%%%xunw%fqjăU"s%Snkx%up&'%9%9%%%%-%3Yz1DJrFBl&I%%%%7&%%%/%%%%%%%%%&%E%%%%'R%%ăU"%xy%jnsj%Snkx%up&'%9%9%%%%-%2O93D>aP7z'2%%%%i'%%%0%%%%%%%%%&%E%ăU".%%sR%%%yj%uunh%mSnk%xup&%'9%9%%%%-U%Z'1#D=Ry-#5%%%%L&%%%.%%%%%ăU"%%%%&%E#%%%U#S%%)&&jnl%Snkx%up&'%9%9%%%%-%>_*qC(5P+P%,)%%'?,%%%ăU"+%%%%%%%%%&%E%.%%8T%%%nk%xSug%up&'%9%9%%%%-%>_*qC8Q(f9'9(%%&,,%ăU"%%+%%%%%%%%%&%E%.%%cX%%%nk%xSvg%up*+%%%%%%F%F%%a,%%&G\%%%%%ăEND SUBăV2ăCLOSE:IF S=125AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăThe ABC Programmer             VECTOR BALL ELLIPSE            Converted from PASCAL Code     05-26-96 (12:15)       QB, QBasic, PDS        91   3168     VECTBALL.BAS'====================================================================ă' Original PASCAL Code by Bas van Gaalenă' Converted to BASIC by William Yu (05-26-96)ă'ă' Places a large vector ball ellipse on the screen and makes it bounceă' to pieces = nice visual effectă'ă' Compile for best performanceă' FYI: Pascal code ran 5 times faster (About there anyways).ă'--------------------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB Putdot (X%, Y%, Colour%)ăDECLARE SUB Setcolors (Colour%, Red%, Green%, Blue%)ăăCONST Balls = 1400         ' Increase/Decrease accordingly to your CPU speedăCONST Startcolor = 50      ' I don't think you'll need thisăăTYPE movementă     X AS INTEGER          ' Positionă     Y AS INTEGER          ' Velocityă    dx AS INTEGER          ' Accelerationă    dy AS INTEGERă   ddx AS INTEGERă   ddy AS INTEGERă Colour AS INTEGERă MaxYValue AS INTEGER      ' ???ăEND TYPEăăDIM Ball(1 TO Balls) AS movementăăSCREEN 13            ' Try other screen modes if you wishăă'These few lines aren't too importantă'FOR I = 1 TO 250ă  'CALL setcolors(I, I MOD 50, I MOD 50 - 20, I / ((I / 63) + 1))ă  'fillchar(mem[$A000:(191*320)],320*8,Ord(StartColor));{line at bottom}ă'NEXT IăăFOR I = 1 TO Balls                        '{INIT the balls into the array}ă  Ball(I).ddx = 0ă  Ball(I).ddy = 1                         '{constant pull downward}ă  Ball(I).dx = RND * 5 - 2               '{ start it moving left or right }ă  IF Ball(I).dx = 0 THEN Ball(I).dx = 1   '{ not still}ă  Ball(I).dy = 0                          '{ the object is initially at rest }ă  Ball(I).X = INT(COS(I) * 140) + 140 + ((I / ((I / 4) + 1)) * 6)ă  Ball(I).Y = INT(SIN(I + ((I / ((I / 4) + 1)))) * 70) + 60 + ((I / ((I / 4) + 1) * 12))  '{ you specified }ă  Ball(I).Colour = RND * (I / ((I / 254) + 1)) + 1'{Each Balls color}ă  MaxYValue = Ball(I).YăNEXT IăăPull = 0      '{init the gravity degrading effect}ă              'Increase value for cool drop and die effectăăWHILE INKEY$ = ""ă FOR I = 1 TO Ballsă  CALL Putdot(Ball(I).X, Ball(I).Y, 0)   ' { blank out the pixel drawn on the last iteration }ă  Ball(I).dx = Ball(I).dx + Ball(I).ddx  ' { updating velocity }ă  Ball(I).dy = Ball(I).dy + Ball(I).ddyă  Ball(I).X = Ball(I).X + Ball(I).dx     ' { updating position }ă  Ball(I).Y = Ball(I).Y + Ball(I).dyă  IF Ball(I).X < 1 THEN                  ' {hits left of screen}ă     Ball(I).X = 1ă     Ball(I).dx = Ball(I).dx * -1ă  END IFă  IF Ball(I).X > 319 THEN                ' {hits right of screen}ă     Ball(I).X = 319ă     Ball(I).dx = -Ball(I).dxă  END IFă  IF Ball(I).Y > 190 THEN                ' { BOUNCE! }ă     Ball(I).Y = 190 - (Ball(I).Y - 190) + 1ă     Ball(I).dy = -Ball(I).dy + Pullă  END IFă  CALL Putdot(Ball(I).X, Ball(I).Y, Ball(I).Colour)  ' { draw the pixel at the new position }ă NEXT IăWENDăENDăăSUB Putdot (X, Y, Colour)ă  DEF SEG = &HA000ă  Y! = Yă  POKE Y! * 320 + X, Coloură  'PSET (X, Y), ColourăEND SUBăăSUB Setcolors (Colour, Red, Green, Blue)ă      OUT &H3C8, Coloură      OUT &H3C9, Redă      OUT &H3C9, Greenă      OUT &H3C9, BlueăEND SUBăSteven Sensarn                 MODE-X PCX DISPLAY             The Basix Fanzine Issue 5      06-01-96 (00:00)       QB, QBasic, PDS        212  7120     MODEXPCX.BAS'//MODEXPCX.BAS -- CREATED IN QBASIC 1.1 BY STEVEN SENSARNă'//SPEED HAS BEEN COMPROMISED FOR SIZEăă'//FUNCTION PROTOTYPESăDECLARE SUB X.PLANE (P AS INTEGER) 'USE THIS TO CHANGE PLANESăDECLARE SUB X.PIXEL (X AS LONG, Y AS LONG, CLR AS INTEGER) 'PLOTS PIXELăDECLARE SUB MODEX () 'CHANGES TO MODE X 320x240x256ăDECLARE SUB WAIT.KEY () 'PRESS ANY KEY TO CONTINUEăDECLARE SUB OPEN.FILE () 'USED TO LOAD THE PCX FILEăă'//STRUCTURESăTYPE THEADERă    MAN AS STRING * 1 'MANUFACTURER -- 10ă    VER AS STRING * 1 'VERSION -- 5+ă    ENC AS STRING * 1 'ENCODING -- 1 (RLE)ă    BPP AS STRING * 1 'BITS PER PIXEL PER PLANE -- 8ă    MNX AS INTEGER 'MINIMUM X SIZEă    MNY AS INTEGER 'MINIMUM Y SIZEă    MAX AS INTEGER 'MAXIMUM X SIZEă    MAY AS INTEGER 'MAXIMUM Y SIZEă    HRS AS INTEGER 'HORIZONTAL RESOLUTIONă    VRS AS INTEGER 'VERTICAL RESOLUTIONă    COL AS STRING * 48 'EGA COLOR PALETTE -- IGNOREă    RES AS STRING * 1 'RESERVEDă    NMP AS STRING * 1 'NUMBER OF PLANES -- 1ă    BPL AS INTEGER 'BYTES PER SCANLINEă    PAL AS INTEGER 'PALETTE INFO -- IGNOREă    FIL AS STRING * 58 'FILLUP SPACEăEND TYPEăă'//VARIABLE DECLARATIONSăDIM BYTE AS STRING * 1 'USED TO READ BYTESăDIM HEADER AS THEADER 'USED FOR HEADER INFORMATIONăDIM SHARED FILE AS STRING * 50 'USED TO HOLD FILE NAMEăDIM INDEX AS LONG 'USED TO CONTROL DECODINGăDIM SIZE AS LONG 'USED TO CONTROL DECODINGăDIM XSIZE AS INTEGER, YSIZE AS INTEGER 'USED TO MEASURE IMAGEăDIM TOTALBYTES AS INTEGER 'USED TO MEASUER SCAN LINESăDIM VALUE AS INTEGER 'USED FOR CONVERTING CHAR TO INTăDIM RLP 'USED FOR RUN LENGTH LOOPăDIM X AS LONG, Y AS LONG 'USED FOR PIXEL TRACKINGăă'//VARIABLE INITIALIZATIONSăINDEX = 1 'BE ON THE SAFE SIDEăă'//MAINăON ERROR GOTO ERROR.HANDLER 'JUST IN CASE...ăăCLSăCALL OPEN.FILE 'OPEN THE FILEăăGET #1, 1, HEADER 'LOAD HEADERăă'//BASIC TEST (NOT FOOL-PROOF) -- REQUIREMENTSăIF ASC(HEADER.MAN) <> 10 THEN CLOSE #1: END 'NOT PCXăIF ASC(HEADER.VER) < 5 THEN CLOSE #1: END 'NOT 256 COLORăIF ASC(HEADER.ENC) <> 1 THEN CLOSE #1: END 'NOT RLEăIF ASC(HEADER.NMP) <> 1 THEN CLOSE #1: END 'NOT SUPPORTIVE OF MODE X PLANESăă'//LOAD WHILE LOOP INFORMATIONăXSIZE = HEADER.MAX - HEADER.MNX + 1 'LOAD HORIZONTAL GRAPHIC SIZEăYSIZE = HEADER.MAY - HEADER.MNY + 1 'LOAD VERTICAL GRAPHIC SIZEăTOTALBYTES = HEADER.BPL 'USED TO TRACK END-OF-SCANLINEăSIZE = 1& * XSIZE * YSIZE 'LOAD SIZE -- FORCE LONGăIF SIZE > 76800 THEN CLOSE : END 'GRAPHIC TOO LARGE -- WON'T FIT ON SCREENăă'//DISPLAY STATUS TO THE USERăCLS : SCREEN 0: WIDTH 80ăPRINT "FILENAME: ", , " "; FILE: PRINTăPRINT "MANUFACTURER: ", ASC(HEADER.MAN)ăPRINT "VERSION: ", , ASC(HEADER.VER)ăPRINT "RLE ENCODING: ", ASC(HEADER.ENC)ăPRINT "BITS PER PIXEL PER PLANE: ", ASC(HEADER.BPP)ăPRINT "WINDOW X MIN: ", HEADER.MNXăPRINT "WINDOW Y MIN: ", HEADER.MNYăPRINT "WINDOW X MAX: ", HEADER.MAXăPRINT "WINDOW Y MAX: ", HEADER.MAYăPRINT "HORIZONTAL RESOLUTION: ", HEADER.HRSăPRINT "VERTICAL RESOLUTION: ", HEADER.VRSăPRINT "NUMBER OF PLANES: ", ASC(HEADER.NMP)ăPRINT "BYTES PER LINE: ", HEADER.BPLăPRINTăIF NOT HEADER.HRS / 320 = INT(HEADER.HRS / 320) THENă    PRINT "ASPECT RATIO MISMATCH ", " -- X AXIS" 'WARPED IMAGE -- NO BIG DEALăELSEă    PRINTăEND IFăIF NOT HEADER.VRS / 240 = INT(HEADER.VRS / 240) THENă    PRINT "ASPECT RATIO MISMATCH ", " -- Y AXIS" 'WARPED IMAGE -- NO BIG DEALăEND IFăWAIT.KEY 'PRESS ANY KEY TO CONTINUEăMODEX 'SWITCH TO MODE X -- 320x240x256ăDEF SEG = &HA000 'VIDEO MEMORY ACCESSăă'//DECODE AND DISPLAYăWHILE INDEX <= SIZE 'WHILE PICTURE ISN'T DONE LOADING...ă    GET #1, , BYTE 'READ BYTEă    IF (ASC(BYTE) AND &HC0) = &HC0 THEN 'TEST TOP TWO BITS FOR 1'Să	RLP = ASC(BYTE) AND &H3F 'SET RUN LENGTHă	GET #1, , BYTE 'READ DATA BYTEă	WHILE RLP > 0 'WHILE RUN LENGTH HAS NOT YET FINISHED DUPLICATIONă	    IF NOT X > XSIZE THEN CALL X.PIXEL(X, Y, ASC(BYTE)) 'PLOT PIXELă	    X = X + 1 'RENEW PIXEL POSITIONă	    IF X >= TOTALBYTES THEN X = 0: Y = Y + 1 'TEST FOR END OF SCANLINEă	    RLP = RLP - 1 'REDUCE RUN LENGTH LOOP VARIABLEă	    INDEX = INDEX + 1 'INCREASE TOTALă	WENDă    ELSE 'IF THE BYTE IS NOT ENCODEDă	IF NOT X > XSIZE THEN CALL X.PIXEL(X, Y, ASC(BYTE)) 'PLOT PIXELă	X = X + 1 'RENEW PIXEL POSITIONă	IF X >= TOTALBYTES THEN X = 0: Y = Y + 1 'TEST FOR END OF SCANLINEă	INDEX = INDEX + 1 'INCREASE TOTALă    END IFăWENDăă'//CHANGE PALETTEăGET #1, LOF(1) - 768, BYTEăIF ASC(BYTE) <> 12 THEN CLOSE : END 'NO 256 COLOR PALETTEăFOR INDEX = 0 TO 255ă  OUT &H3C6, &HFF 'INITIALIZE VGA PALETTEă  OUT &H3C8, INDEX 'SELECT COLOR INDEXă  GET #1, , BYTEă  OUT &H3C9, INT(ASC(BYTE) / 4) 'SEND RED VALUE -- ONLY NEED TOP 6 BITSă  GET #1, , BYTEă  OUT &H3C9, INT(ASC(BYTE) / 4) 'SEND GREEN VALUE -- ONLY NEED TOP 6 BITSă  GET #1, , BYTEă  OUT &H3C9, INT(ASC(BYTE) / 4) 'SEND BLUE VALUE -- ONLY NEED TOP 6 BITSăNEXT INDEXăSOUND 3000, .25 'DONE -- YOU WILL NOT SEE THE 'PRESS ANY KEY TO CONTINUE'ăENDăă'//ERRORSăERROR.HANDLER:ăSCREEN 0: WIDTH 80ăCLSăPRINT : PRINT "SOMETHING HAS OCCURED IN THE PROGRAM THAT HAS"ăPRINT "CAUSED IT TO HALT.  TERMINATING..."ăWAIT.KEYăENDăă'//DONEăCLOSE #1 'CLOSE THE FILEăSOUND 3000, .25 'SIGNAL USERăEND 'END THE PROGRAMăă'//NOTICEă'I HAVE ABSOLUTELY NO EXPERIENCE WITH PLANE BASED PCX FILES BECAUSE I USEă'MICROSOFT WINDOWS 3.1 PAINTBRUSH AND I CAN'T SEEM TO CREATE ONE.  IFă'ANYBODY WOULD BE WILLING TO DRAW ME ONE THAT USES PLANES, I WOULD GREATLYă'APPRECIATE IT.  SENT TO "txs53132@bayou.uh.edu" VIA BINHEX OR MIME.ăăSUB MODEXă    SCREEN 13ă    DEF SEG = &HA000ă    OUT &H3C4, &H4ă    OUT &H3C5, &H6ă    OUT &H3C4, &H2ă    OUT &H3C5, &HFă    CLSă    OUT &H3D4, &H14ă    OUT &H3D5, &H0ă    OUT &H3D4, &H17ă    OUT &H3D5, &HE3ă    OUT &H3C2, &HE3ă    OUT &H3D4, &H11ă    OUT &H3D5, &H2Că    OUT &H3D4, &H6ă    OUT &H3D5, &HDă    OUT &H3D4, &H7ă    OUT &H3D5, &H3Eă    OUT &H3D4, &H10ă    OUT &H3D5, &HEAă    OUT &H3D4, &H11ă    OUT &H3D5, &HACă    OUT &H3D4, &H12ă    OUT &H3D5, &HDFă    OUT &H3D4, &H15ă    OUT &H3D5, &HE7ă    OUT &H3D4, &H16ă    OUT &H3D5, &H6ăEND SUBăăSUB OPEN.FILEă    PRINT "<>/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\<>"ă    PRINT "<> PLEASE NOTE THAT THE FILE THAT IS TO BE LOADED MUST HAVE A   <>"ă    PRINT "<> SIZE NO LARGER THAN 320x240.  IF YOU WOULD LIKE TO TERMINATE <>"ă    PRINT "<> THIS PROGRAM, DO SO ENTERING AN EMPTY FILENAME.              <>"ă    PRINT "<>\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/<>"ă    PRINTă    INPUT "FILENAME: ", FILEă    FILE = RTRIM$(FILE)ă    FILE = UCASE$(FILE)ă    IF NOT RIGHT$(RTRIM$(FILE), 4) = ".PCX" THEN END 'NO VALID EXTENSIONă    OPEN FILE FOR BINARY AS #1ă    IF LOF(1) = 0 THEN CLOSE #1: KILL FILE: END 'FILE EMPTY OR NOT FOUNDăEND SUBăăSUB WAIT.KEYă  WHILE LEN(INKEY$) = 0: WENDăEND SUBăă'//ASSUMING CURRENT SEGMENT IS A000:0000HăSUB X.PIXEL (X AS LONG, Y AS LONG, CLR AS INTEGER)ă    CALL X.PLANE(X AND 3)ă    POKE INT(Y * 80 + X / 4), CLRăEND SUBăă'//USED TO CHANGE PLANEăSUB X.PLANE (P AS INTEGER)ă    OUT &H3C4, 2ă    OUT &H3C5, 2 ^ PăEND SUBăEarl Montgomery                320X400 TURTLE DRAW            FidoNet QUIK_BAS Echo          05-28-96 (18:29)       QB, PDS                92   3290     320X400.BAS  'Here is some code that I wrote awhile back that uses the 320x400x256ă 'mode. Press "H" to get the help menu. It allows you to sketch in thisă 'mode. But it does give you the basic code to do all sorts of thingsă 'in this mode. Enjoy.ăăsetmode:ă 'Sets SCREEN 13 to the 320X400X256 modeă SCREEN 13: DEF SEG = &HA000ă KEY(10) ONă ON KEY(10) GOSUB endofprogramă OUT &H3D4, 9: OUT &H3D5, &H40: OUT &H3D4, 20: OUT &H3D5, 0: OUT &H3D4, 23ă OUT &H3D5, &HE3: OUT &H3C4, 4: OUT &H3C5, &H6ă OUT &H3C4, 2: OUT &H3C5, 15: CLS : 'rem this clears (CLS) all 4 planesă IF flag$ = "restart" THEN GOTO loadtempă OUT &H3C4, 2: OUT &H3C5, 1ăbegin:ă position% = 15318: c = 15: plane% = 1: OUT &H3C4, 2: OUT &H3C5, 1ărestart:ă flag$ = ""ă POKE position%, căwaitkey1:ă i$ = INKEY$: IF i$ = "" THEN GOTO waitkey1ă i$ = UCASE$(i$)ă keycode% = CVI(i$ + CHR$(0))ă IF keycode% = 19712 THEN GOTO moverightă IF keycode% = 19200 THEN GOTO moveleftă IF keycode% = 18432 THEN GOTO moveupă IF keycode% = 20480 THEN GOTO movedownă IF i$ = "C" THEN GOTO changecoloră IF i$ = "H" THEN GOTO helpscreenă IF i$ = "X" THEN GOTO clearscreenă GOTO waitkey1ămoveright:ă IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO pokescrnă IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4: GOTO pokescrnă IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: GOTO pokescrnă IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: position% = position% + 1ăpokescrn:ă IF position% > 31999 THEN position% = 31999ă POKE position%, că GOTO waitkey1ămoveleft:ă IF plane% = 1 THEN OUT &H3C4, 2: OUT &H3C5, 8: plane% = 8: position% = position% - 1: GOTO doită IF plane% = 2 THEN OUT &H3C4, 2: OUT &H3C5, 1: plane% = 1: GOTO doită IF plane% = 4 THEN OUT &H3C4, 2: OUT &H3C5, 2: plane% = 2: GOTO doită IF plane% = 8 THEN OUT &H3C4, 2: OUT &H3C5, 4: plane% = 4:ădoit:ă IF position% < 0 THEN position% = 0ă POKE position%, că GOTO waitkey1ămoveup:ă position% = position% - 80ă IF position% < 0 THEN position% = position% + 80ă POKE position%, că GOTO waitkey1ămovedown:ă position% = position% + 80ă IF position% > 32000 THEN position% = position% - 80ă POKE position%, că GOTO waitkey1ăchangecolor:ă c = c + 1ă IF c > 255 THEN c = 0ă POKE position%, că GOTO waitkey1ă GOTO waitkey1ăhelpscreen:ă 'Saving screen before switching to SCREEN 9 and the HELP MENUă DEF SEG = &HA000ă OUT &H3CE, 4: OUT &H3CF, 0: BSAVE "temp1.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 1: BSAVE "temp2.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 2: BSAVE "temp3.bin", 0, 32000ă OUT &H3CE, 4: OUT &H3CF, 3: BSAVE "temp4.bin", 0, 32000ă SCREEN 9: CLSă PRINT "Key             Function"ă PRINT "Use arrow keys to move cursor"ă PRINT "C               Changes current color"ă PRINT "F10             Exit Program "ă PRINT "H               Help (This Screen)"ăwaitkey2:ă i$ = INKEY$: IF i$ = "" THEN GOTO waitkey2ă CLS : flag$ = "restart": GOTO setmodeăloadtemp:ă OUT &H3C4, 2: OUT &H3C5, 1: BLOAD "temp1.bin"ă OUT &H3C4, 2: OUT &H3C5, 2: BLOAD "temp2.bin"ă OUT &H3C4, 2: OUT &H3C5, 4: BLOAD "temp3.bin"ă OUT &H3C4, 2: OUT &H3C5, 8: BLOAD "temp4.bin"ă GOTO restartăclearscreen:ă OUT &H3C4, 2: OUT &H3C5, 15: CLS : GOTO beginăendofprogram:ă SCREEN 0: CLS : DEF SEG : ENDăRyan White                     VARYING WINDMILLS              BIGFOOT@SunBelt.Net            06-02-95 (21:50)       QB, QBasic, PDS        72   1678     WINDMILL.BASSCREEN 13ăCLSăC = 16ăE = 1ăON KEY(1) GOSUB ECH1ăKEY(1) ONăON KEY(2) GOSUB ECH2ăKEY(2) ONăăST:ăFOR X = 1 TO 80 STEP EăIF C >= 30 THEN C$ = "Y" ELSE IF C <= 16 THEN C$ = "N"ăIF C$ = "Y" THEN C = C - 1 ELSE C = C + 1ăăLINE (X, 1)-(80 - X, 49), CăLINE (80 + X, 1)-(160 - X, 49), CăLINE (160 + X, 1)-(240 - X, 49), CăLINE (240 + X, 1)-(320 - X, 49), CăăLINE (X, 50)-(80 - X, 99), CăLINE (80 + X, 50)-(160 - X, 99), CăLINE (160 + X, 50)-(240 - X, 99), CăLINE (240 + X, 50)-(320 - X, 99), CăăLINE (X, 100)-(80 - X, 149), CăLINE (80 + X, 100)-(160 - X, 149), CăLINE (160 + X, 100)-(240 - X, 149), CăLINE (240 + X, 100)-(320 - X, 149), CăăLINE (X, 149)-(80 - X, 199), CăLINE (80 + X, 149)-(160 - X, 199), CăLINE (160 + X, 149)-(240 - X, 199), CăLINE (240 + X, 149)-(320 - X, 199), CăNEXT XăăFOR Y = 49 TO 1 STEP -EăIF C >= 30 THEN C$ = "Y" ELSE IF C <= 16 THEN C$ = "N"ăIF C$ = "Y" THEN C = C - 1 ELSE C = C + 1ăăLINE (1, Y)-(80, 50 - Y), CăLINE (81, Y)-(160, 50 - Y), CăLINE (161, Y)-(240, 50 - Y), CăLINE (241, Y)-(320, 50 - Y), CăăLINE (1, Y + 50)-(80, 100 - Y), CăLINE (81, Y + 50)-(160, 100 - Y), CăLINE (161, Y + 50)-(240, 100 - Y), CăLINE (241, Y + 50)-(320, 100 - Y), CăăLINE (1, Y + 100)-(80, 150 - Y), CăLINE (81, Y + 100)-(160, 150 - Y), CăLINE (161, Y + 100)-(240, 150 - Y), CăLINE (241, Y + 100)-(320, 150 - Y), CăăLINE (1, Y + 150)-(80, 200 - Y), CăLINE (81, Y + 150)-(160, 200 - Y), CăLINE (161, Y + 150)-(240, 200 - Y), CăLINE (241, Y + 150)-(320, 200 - Y), CăNEXT YăăIF INKEY$ = "" GOTO STăENDăăECH1:ăIF E >= 1.1 THEN E = E - 1 ELSE E = E - .1ăIF E <= .2 THEN E = 1ăRETURNăăECH2:ăE = E + 1ăRETURNăăMartin Lindhe                  PIXEL SCROLLER                 m-35728@mailbox.swipnet.se     06-04-96 (00:00)       QB, QBasic, PDS        42   1448     PXSCROLL.BASDECLARE SUB PixelScroll (Text$, Col%, NewY%)ăă'         PXSCROLL.BAS, pixelscroller by Martin Lindhe, 96-06-04ă'                   e-mail: m-35728@mailbox.swipnet.seăă' This is a pixelscroller supporting mode 13h, if used on other screens,ă' it will need some modifications. Please use it for something lame!ă' The scroller will scroll *LONG* string, try it out!ăă' Syntax: PixelScroll TextToWrite$, Color, YPositionăăSCREEN 13ăPixelScroll "Pixelscroller example scroll, this is written by Martin Lindhe, do i need to write something more, i think this will be enough. But remember: QuickBASIC rules!", 27, 90ăăDEFINT A-ZăSUB PixelScroll (Text$, Col, NewY)ăă    DIM Move(1277)ă    DIM Temp(20)ăă    Temp = 255 - Col         ' This lines will take the xor'ed color choosenă    PALETTE Temp, 0          ' and light it down. I am not good at comment myă    COLOR Temp: PRINT Text$  ' work, so i hope you'll understand the principe.ă   ă    Tmp2 = 1ă    FOR x = 0 TO LEN(Text$) * 8ă        IF x > 319 * Tmp2 THEN Tmp = Tmp + 7: Tmp2 = Tmp2 + 1ă       ă        GET (x, 0 + Tmp)-(x, 7 + Tmp), Tempă        PUT (319, NewY), Temp, PRESETăă        GET (2, NewY)-(320, NewY + 7), Moveă        PUT (1, NewY), Move, PSETă    NEXT xăă    FOR x = 1 TO 320ă        GET (2, NewY)-(320, NewY + 7), Moveă        PUT (1, NewY), Move, PSETă    NEXTă    SCREEN 0: SCREEN 13   ' Resets the PALETTE changes, not needed.ăăEND SUBăMartin Lindhe                  FAKE PLASMA                    m-35728@mailbox.swipnet.se     06-08-96 (00:00)       QB, QBasic, PDS        26   573      FAKEPLAS.BAS'           Fake Plasma - Written by Martin Lindhe 96-06-08ă'              contact me at: m-35728@mailbox.swipnet.seăă'                     Another cool effect in QB :-)ăăDEFINT A-ZăSCREEN 13ăăFOR a = 1 TO 63ă    PALETTE a, aă    PALETTE a + 63, 256 ^ 2 + 256 * aă    PALETTE a + 126, 256 ^ 2 * aăNEXTăăDOăFOR y = 70 TO 130ă    FOR x = 130 TO 190ă        a = POINT(x + 1, y)ă        b = POINT(x - 1, y)ă        c = POINT(x, y + 1)ă        d = POINT(x, y - 1)ă        col = (a + b + c + d) / 4 + RND * 2ă        PSET (x, y), colă    NEXTăNEXTăLOOPăMartin Lindhe                  SCALING ROUTINE                m-35728@mailbox.swipnet.se     06-09-96 (12:44)       QB, QBasic, PDS        39   1058     SCALE.BAS   '                     Scaling routine in quickbasică'                   written in sleep by Martin Lindheăă' i wrote this one after i saw the DOOMFACE.BAS, included in a earlier issueă' of ABC. That routine was horrible, so i speeded up the code some thousandsă' procents...ăă' e-mail: m-35728@mailbox.swipnet.seăăDEFINT A-ZăSCREEN 13ăăDIM Picture(121)ăăFOR a = 1 TO 121ă    READ Picture(a)ăNEXTăăFOR u = 1 TO 100ă    a = 0ă    FOR y = 1 TO 11 * u STEP uă        FOR x = 1 TO 11 * u STEP uă            a = a + 1ă            LINE (x, y + u - 1)-(x + u, y), Picture(a), BFă        NEXTă    NEXTăNEXT uăăDATA 00,00,00,00,00,00,00,00,00,00,00ăDATA 00,00,00,00,24,28,24,00,00,00,00ăDATA 00,00,00,24,28,22,28,24,00,00,00ăDATA 00,00,24,28,22,00,22,28,24,00,00ăDATA 00,24,28,22,00,00,00,22,28,24,00ăDATA 00,28,22,00,00,00,00,00,22,28,00ăDATA 00,24,28,22,00,00,00,22,28,24,00ăDATA 00,00,24,28,22,00,22,28,24,00,00ăDATA 00,00,00,24,28,22,28,24,00,00,00ăDATA 00,00,00,00,24,28,24,00,00,00,00ăDATA 00,00,00,00,00,00,00,00,00,00,00ăBob Ellis                      EXTENDED PB GIF VIEWER         www.voicenet.com/~rellis/      06-10-96 (00:00)       PB                     341  22445    GIF3S.BAS   ' To extract GIF3S.ZIP, please load/run under PowerBASICă' Add DIM before SHARED to extract under QBăăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"GIF3S.ZIP",4^6:Z&=16505:?STRING$(50,177);ăU"%up()%9%%%%-%e>RFCR,(CLx&7%%S)%%%1%%%%wj%lsfr%jxSgRfx&c:r9<U:5TăU"p+*X0-RrVTwxdf;]\C+R#[Sle09^W\**RAI2pc$C&SRjTJmDuroDOgau\D6r48ZăU"mmmStLmrWt-6sW9J?/OhZUrYscC4vpEV8PhI&>HW+I\Q:PG[0.)?D*n^-.;%>U*ăU"1F3[vgIq+$<\':Mi7>J5yE.8',CESfaY;d>rM#c4b&C1oX&\J/2)+gR7NK9TadSăU"DV)kcN++T+p$r1zn%gRXSM]Fd:oA(hZILCY(QgC+XpX'Cm#0O7$+8hc92aI\<%>ăU"0C)cqWi46otTgWr*.&Sd1&dkv-Am;[l\_L=SCvH79U)cwsyMB>uutsF8b^67^Z:ăU"W1QVX.J<nrP]3g;NEqlNd.ubh&>lx:VhZrWZ,d71Baf:V#it/Gb:p.#XjpN#aqqăU"[GYq/k]^Rh.gH#Mf5>9urCE$5e(XHo#\7p%*up(%)9%%%%-%E-+BEa.KLcj#T%%ăU"Y'+%%-%%%%l%nkXS[gfxF2L:F#s^'Yp7cLx&T\s0t$/sm/rlA[]ZC/e7c?(PBpnăU"KhU$JpJSDy\yt8xOrVgL6Nt47YrmD%dQvOX4zm)XtG.#'E.O4%A)diXRrg4FM09ăU",T0asor='\n7+x2lPgFp^FX;j;WZ;VeVYQl<a]#yQkefD31IO(YEDZcHV+]]t9iăU"P11Fmni-\Y_5/OiR.+0#x3UfgkGTCk[0(U2\a5x:;VCrR^e9J(10'Kn5'1hC9-făU"vK5l[nUg=0K]i'K8tHg#)v-&<L7mreO5NQCyctrL=5;=%(:e72Qa[i$T85WQMYiăU"\Wb>+gEHr]TG:JQXA5A[.]7wus;n^SUF8=/'&\kh602<,f#l%noa3&KunD6;TD&ăU"'+l.>0u$^5BQv,^TM=Nj_v\dvYr[pT.7e+%9IrB$$T-?UVVZ]eOTw<0;pg9MBi)ăU"e(TWDJ'1*\ZF_,.tmvk5MNE#Is%(/ja,9f$E)J_OtEv8]lhX5e]w[=lI-6V,AGpăU"4rrd:j6jN8V[D:ZeD4tp^T73_)[AJm;&rBZ]o_UXT&]?:pO=9ug.KebsKh>#LFVăU"27pp4daDtG^Y4SXFDH2SMBU&N/j>.:z:I<OZ,.68Z9$pttNUUm;dp>Kp8eKkz-EăU"W:yDt8VE^HbHC_s:#pyGyGbFoBPv.,d\71SHa$i>b#_6ZVlb<k\;2ojfl%7knj3ăU"]b(dVtqb=G>BFO/3vR0GvvL]DSpD^_v,MRnkn6R[2?urDY<QXO/GrK\Z8%C#99MăU"lxM;/i/YzQuqg;OY5,1iG\sS;U[xSc^JxbS9F1vT#vac^k7&8wQ9rovhZ>H;JiYăU"kn?S6G&SK;8*>j<H\0%#-l5J1w15(3MPn.D*l(#/8z$d:27.KNZxijfV\g?+YxeăU"x,fm*Y0mdYVJnD9;xuB;SrQ'/$nZF..,zMO>>kVH<(XE,.LdSf>4zCA,532HG?DăU":c_dUZm\DNh]4]m2Ev,;)I%kZG2Wt&Q?Z8PET5t,n,%.Tfp]]gs?:8iN[cdad(făU"O(*/RX_h+4Ri48yym4s-)Y-ilDOXEeER;'pk[X2ZUiz_w,:c?&+/r3cB*[iOZx%ăU"oDc+8$.R4pt^tq$E5V74R2Z:0=U^i^]Y')U[/U]r-/OqJb;8dZ2r>VvZU860[)jăU"Y<Zh<<5Hl\lwfIiz;ft4WOkvGx;4oo#?InNzsD?2re(Cl.'#s;nI>$iH\sq(HgJăU"p0NZ?Y\mDH[uDYcwC_SD60=tE9a6^.x;S]''V4xGo_wYD_yHCT'<ZWL;)B:'+OsăU"iP6\Bv-Xg,\%Fp<Vpl+OiEB)Cp2=GZpaA)=+L;D'JJvfXNOr:b?O5xM%,RnC[t.ăU"7Bp4s6y&7:Bo,Q6$9s5kONl2<'L,A:2v8mMF9j,oPb6*Nlk'Mm=CASEeFoPi.(RăU"(EPPck\goN]Q9y[_/wf$N\d';\%Ws\8fTnHW2Q,6m><-iIat2NXwQ+#W0o7yinxăU"JU>Px)PR0]8NM9-Z^=GEETA+*fGk2Hv.kFixlBn^y;=5AFBpvsT\PIVnKaX6L85ăU"HnDjgfg)TJU1zNR[?jHQC'uK%RP8rn+*jW.X4+uYq:bMNH<1fSI_BxJ6Yl\Qtc\ăU",RBm3uQj.6mo&3ANSa7I4L6o;1*^N6#dQ_9)Mx5Sw2f*CSGZniR&rMb-5arcbQIăU")qw*Eu[.dopA.gcMC%;S-$-hM:N&NJ;byPM8LK[q+p()F#c54*&u,\sne)n8j-&ăU"Lg*/X:E#+cZt><6o#7[RaQG0>sEB_*pL9X:?S=O*X/#lg#Ln$Kfq#N9tMPBq\DdăU"lKJitoZBeBr'>G<ZUDY6QT((eW]-YPf=9A6D%B%2KKY(TCwPYquqEOMYN2WRjnFăU"/l]iKl]LOcaS%S;^5ljYn#0+[e>jj^aY>C=F9&g(Jh6=(+'H=e#]0jT0L:(hb'2ăU"6PrG8v0PcUhJcJV6r6bo9H^BkLWr6<yitL8fs2qgMBv3i^qt,+H>F(gxBYc2Vc\ăU"aK9hl(nemX]YBRM3_8j9x.=EZ7?,R.9o8q*F;_(dR42?s(qhJ4tPZ2dA2RqmEJ[ăU"W.H_c$C>tf<$v-6gt^8<b,Exvo&Swb9j^#z7&Rm&)S_+XU9Vx>n_;a)#)Z^X^>FăU"fun7dW9gb81M7fRK&_^6fABeV;_2<+%6p9)aYGyhCl]/,<6J]LQ.0<PG.HT)*jNăU"IQuMnK=ibm=sRE8e7kX2o,,N7C>frQ<<[NBkxIQiM6ZUj0oSQ\w$:%:3)r3q%90ăU"rFm4WQ]/o.Kr?=:$dN)<x#EfTn(q_S3PyG=rO$_0Y.3_x[t#[ICEavV6',+1K7făU"'PYs\In?,QIK1_j+,pSK10;?3Y)ScS(\eKWiFi:zDlRY+E'G^1Zi3j*(t[gl/2eăU"g$$LTGbOhBU;S:;LVRSvU5,<W-FRzU%2wQ4*rWL.&ZD5Y\RVlp^x;(<mS<Lbg(yăU"C%.pE$_fJlQi?i0F*/>*8W1sX[)#=ZG.So%SI-t/.$YycSj*P;rutM;)YHFd'*qăU"7dHS,j0)kYDi_<l/M^Ht]3tft2ahp(_lx]$aWTVll:(H#j?RvSAr%VeeMn,5gFGăU"O:MbfB;U]JUf\y^>Mk8=\Dt4NY$B/wg-T4nU;i/2)q3K4LLN+#W8H]_V)(,(?AOăU"MCr%)9zi'T9LC<rE*H01.=*fC-&;_YHW$\r9v;QwL7->nkdy(eXhCP:-=RC],-YăU";t>aB%c8]kQ1tC8(0u4'#I_]#WK+JE':jN/[0-JM/Rib\,nC.OOLlR738g]X<1FăU"]Hfk.4c/HB,oJ2.YVF'lMk\pRC>pU^^g3L=H\6ZQ%<%*.RL)>y3W^KYT6NGN-CMăU"JlRF?9hRM[:IlZE+(V*CIYr&;+C=8Ui6'Dt6jSqj&naP%Upzq8xmo-fr7[L:n%dăU"G1qQju4Xq#j9,y9SLf?B4d)d#SGnu=Qe*d[YVE5d3tN^$vd^#L\e2^'BI,4MnYBăU"b;(i&nf^b[Q8V?U=JGmAPl*p#]r6W'TSBK.S-d_F#CUTlN-t>_a*YPWe)z_C0reăU"gA.ENX[OW%=1Ir'/VxE(8I3f*Eb2'.-/FA9%^xGmh<T*qrb2uCucQv%\S+_'(v7ăU";u23r0>g6Tz&=SxOu6'F#)_ai;>D=L0nK4.^t7gNJ4[w#=J&Zs[JALbhrqGLNN\ăU"fJmRKUv\N^;%'&E+(wf2NQ?Q&?m6%h8.a,[H?2_^1*CG%$-IB'P)M&2Yo_B,fh8ăU".b?Y*,%>D,Qc^L,1V]uajKF4ctF4-VW5L*87+^97c*^ry?15s$).BNr>i&G,5'aăU"Z.3])A^K*3+/m:>xB)bD'(fAYppb=neAnDY+<<49=z1.GjM#su*eWN9,O3&Nkn/ăU"jM'Rd>/=;9<'QM%JJmHrrcz>H[mfGfK;Ko'1d\Yk%n3iwKlML3?v_rE3)n#;X+ZăU"Fc1LX2pGJK&#D8frg\QnwDp2&w,_CWWMB'<x6l.U%luk)'E;;3hzJ_K3OQE\/UgăU"+x[L*,*;qp64HA#l;k#J?8S;1Of#2/F3Z)_)9SDJH:B4HUA.a:m(a%18^#(17rDăU"aN^8yQXj?9d/gI)M3a;T$[C$mB=z;#ZhYN/F0I5vEf)6)%BL,^6;,GGUmC/CrUbăU"jFv&QQJ,RIbSIX[eWqIV0dD=TjH8-a+/KS;1T^9+AratYJ8\\RHMCge%WB*>X07ăU"L\=qt_aLwI6?:773[E;.89/t?,?U3-hy$^[K4f[U:*jUrCGFg7Z;J,:i)&%6go;ăU"h*'JI-Bg.M*.$M:B$[VFqoE07>fLn*c-jW/4ZNI,,)kjos/DqGqb$=QZ_cAo)N7ăU"kU<U.?0#dLWGgr$mmcMs9\)Zhl5JO3AQCBElNSGg]IwJ'wo/\TnUN;+2[Iz)ZUJăU"n__sn/u0'RS.AF+xo5]\+bkSiBA77jX3OD&A?>a[ok>\xSX$H8oC_P>r%Z&Q)m/ăU"2Y/>]XARcK.JRTLmb7Its(:3AI)I8fxB[>Fekgflq%;qko;:Aw6Lfdoo,Rb4,bvăU"EA,x9YjNncFO,V+NVt%,3D%y^;0p6W%H[BR2uI#o(^4(h2H[MSTfaAs.zCh+O1IăU"D_ha^bL+3R+J_4m;5/hadH2)Rg*^.Vr=lc8B_7%Fg=ZlIsn%+eln)WcQ^Lf''w2ăU"?#Ve^.9ZB;mXDW'B;[??JGtk/z:E:NVAA+CRu1apm=sNdyr/=9MqHn:jik\(_SZăU"xVhCSzje+WoKN5SQDUAX3o?iD>/+X00Vuk^<;asMMo2jD-mirPN]XEyMa;SNG\3ăU"MYEs?]PB\D7IOj-L;D^(Z7'D;DHqAt^oK(kV5/KwvCz&&Eo*Vx?3HPJ+KD]aJvrăU"L<^r9EF-/h-+;W,mC0f[KYK[16PnAp;UN:CK-3V;eckhh_BS6=Dcs?jZH\a-UupăU";m2(NI9&h):8jMn[1Ms&mz];#u=;[QNH&&l/rB>%,bPqG,O:fqB=m(^*mqgxn*&ăU"b0'$4aRToC&v[o-n+/TXMHJ:P\,yoATehIULX*&Uw=vBL6tPtgHW,dWWes]F[(]ăU"hX%PES<oZCRAxqiYXW4+a;$tggjwK3]e?sO#%zTloXaTW84>8t%q1f2In)$TQmLăU"K=j_hEs0>-5SsRL^8jPrBk,JUX:Q:uIT6[bf.2:zfe3U?\Ff#T.5P)F[w^K_)yPăU"MPMbu,HMbAkM[;Eu\Z9]88Kr-__lpsFoOor8crhB:AkUs(ONMTf8>tP'<vaqi'VăU"Xq?'CpSI,B(=ufm%oe(^\<1uA;Mg^5d$&BiXw?&MAA?vqX_dABnfi.^0x?eq%,tăU"RoW*U<h,kc.?DH\+jMpL#cj_(mrRX*]tW[AJ>y%RVDP>pu;O(G?i9wg=BqLmio$ăU"5S7yG;/4-+boQNRJdG:,T)P.NrIvEYio$xE%O#iJt'V$_nq*CO>VLSo<fY;_>TXăU"Iu4-oD:\E/y[-cmmPn(x_pf)#p+f59h0JXM.B-g3UW+R+GTx;,4ZbBwtY+#wtE9ăU"H$Vb;Ewrw=W7<-yKRWE,Wn6$RlgR8t9qB)yX?]ayFTY7)N>hF-VQ)cquxlwrV\,ăU"pr-u*pa]lbcG,IC$0M;6;X?#4ADM>AX?uUC9(g'KXD8M4PrO>edO7<^cRo/-;wCăU")?0'pV*C90(%KVJ.;1od[2bd+uXuZBM^.+qx^.w(&Au>]v=^(P.6M3PcD/J]90KăU"817E;YgvI+4\dka13^3,NL(nJ*=.\UD^rr)f&O>p*F9SirXjagoKv=s4Y:bFPAtăU"Rq'\Do&W]Ra/B&SU?'U=+#[WkkJ1I1n%v%oio7EAj7qEaxYzC_=3dEFfTz4'ufnăU"t_kE2e/%b(UzQ:yXZnx942'u16\2X%8&8xzOn?q?Y-EYP&b0?02*>iZEuN8J4^MăU"j(Oj/#Eqx',CdGscP:Fl)53W3MPV^M^zl9obY[+B]K(jq\pmAlJM_ul+>mz&3CKăU"cf6f+YgIM1_r3XdCbTj8RA=.5Z#F-gi0X\2-WvCgc\u*])IC0?K1<h:oS3&_:EFăU"_*=eGuiSf>c3ah%.g;S$-WD$NW>ZW]0\QaPvWv[FVcMf,Q,Tp+:lne^F/fT.y=[ăU"xjc%i/ceu6^253.z76MBC9]7;V27&1;KxA2BPnULa>u7xb;.D<+yO<7?LC4I?D]ăU"$'$HcJiRu8PEsZ;/*CAo'#y;2#kJgA'&oX/p4XBj%3gfC0*h=ub8ppR:HUJyeq&ăU"X[GU-&Jel8w<rF7oUDElqqWb's<+Jc+R/8-EtKSlltnh?2-Xd2*$U;Zke-Ejq16ăU"28?6<JH1Y[&XRVD#eS,_defTQb27<Topc0Fc]H0E.vn3]cG\I)Rh]32+9n>nG]1ăU"9meBC,K2\\qM>w)52;-b$,8K:Ou(=SK/9Nv2$VU7*),H--D0(1qp>$?J/GVAB('ăU"qbKf-ueDqSp5\K*7\#aY^38O9Xp>2ioV%]l_MpA4Clgp&\?pdh]i=7v=up^s4(RăU".QcR1FG[4vWoYL].Z.1>\62IDUui9D8o2j.PjHHgDOC;_RZ/,W)1b'WqY5#Jn=UăU"*0*<)?\Th\p0;Q#(=<O:du7>j,>Mbqkz-6&(%/G]Y;*1?)9Z1[blYXVcbVj8JCPăU"tI$YUN)OFkMLYtR;T;l[Xuvxc;(P^Kd&K>\YKRssdwTu+s/H5N2DT73:[':j_1năU"h\3a'Id>Okl5ACheB,.lGCnL7^/2q'W/e8tTRJ]8cfTeH5=O#vb9b='Sr#3d#bXăU"QS=8>5FR-DgNY:;Cjw>=X$Pavpim>.2apBezkQ:k.wybltI%EE2$P$hXm7#NgwuăU"%K=IzlC;n>?k&LzKoD0xVmneqbRaGBgPxikY7;3CPeRLlkKhMhhN>YxGwe$5%b7ăU"U18XA4L6),'[qU<k99CUd7_5adKJAntY6cD_9UkMA7iDXau/vpW:Q9c56iI&TNAăU"fA04G+Gd>'77%ikuxrF)XP#-*[&PQap3wSDTwvsMAC+#FivUbEGex]\y4nkDG]YăU"(tQd.1Fi3qZpospM^RhxwRyP$?gPEwrp-J'.g7ICckJ(Lwbx44th6vRWfRVC7d3ăU"_vvlgRxJ4b%0ya:3S:[_y)t$cI&\-2Cae_()QRAH7;4D0yY16-,g.-vD=IIcHv]ăU"'eK>jSBJXR?=3<e5>Xsl+cGgi.c=hS,\Do'E]Harsu42I^]_.NqZz3=T[.7ugw]ăU"oDh8]jTFVP$o%JipX)VQ8'^Vg+,<93f?2fiSxWStCx+z7SL6WAYb_,&2a*jNS'$ăU"-*y3nE(YF)*ez>:ZoxEFEV$%NBnE^1::TJlG*[*D,<X)dle;$RhVatK'Vfp6#eYăU"tn&+v<49J,%gW;,iAH'j(Gec45Sw;<.c[h$Y-1^=)Z>\evoa;4*;et_;OH-,]]IăU"%\E/BkvWul2+x'_FQakb-)0e5fd]QGoGQT#K#-TxtCJ?>\%vi;u?;TLn]RS)2?TăU"me(3Z/KvgfT4wg;2MW;m(?S*J\w;Ts3U8kPJM8SgRMlBo80KfRP//oD?Hb]s9$YăU"h\G*W;[Bkx0t#i3>LD0Q_bS$]Rx2tqJJ]EQeF?t<0^%AVzF&bNsk*YR^S0;J5ZkăU"/PxC*Dqk;UI9'Q-0Z=bBU=M-8s9u36;JCV$OxnwC'?sID'hFtZEWox?1&_K*%ltăU"k;P1o%Ho*>re&vRS#VK1=H#kutVse[3MhfHT.ILyq*Ag1=S8waKmPTfNTxED1E&ăU"1vnr,>ad8G%bvD-m_D.el?9p/+odEIY9qG(3aJ^Ocs)-+7[f%Cdrw*kfi*GH7(LăU"&]n,$jDD<N>'[R=cbmKaq2<K]f3MP/H^\[^*r<5RC7N5;7KT>QuO)EJ$%*C\'f=ăU"N4qDgN]2tiBy^Jn$-l0g3?mYK6?If96h2DI$9qttcHGEvZ$MWh.&??Lar6ET9sRăU"%<^'kY7#34Q)9epzlBB6h$czXPs2])18E+fZg/RmMq2-*eDTNt-.]K<'Fshc(7aăU"&5U\rwa>Mkv9;y-<hKa45Ah]\j*Hv_$ts+H[O]9l8J^070[2sGUaNhRKoM6jt>qăU"B0?riCM)+'?JPHt;fiEK2:J\eTn0YlV?9'ojC_c,%IfKnkH9D'02vc[2*<H\wwmăU"\j5?s[9z+,&b(pn2BWVe:]WJD+n;8XSQF;oUhaHxLy8dhBSCbc%tbKh4;3m172]ăU",t&mqyOcA/*%;kFxeO&Nt[7b0I8TG8]V=bX*?*vt>cZ&k/uYl</oA94ctPnSX2(ăU"OBsNMcs7b:lnBGOA#KkmsUQpPqN;%QB;PSM^q_3]bB0K*uI[F?%[ryh?C&?denhăU"LCb2'vUe-MbKD/$xkL?G)0mvEw]N?j.%#z>vT'5r.-swM8YAlPT\k;^o-slwLe3ăU"3k2J4/?D4RA%ee#b#GUz('JdBr[jEM;9aq$2+Jp/]hCVx2:iBbpA#_h*18YXMB'ăU"r.n$p^Odrkr6/.a3QB?rH)ALo?[2r*kh^6_ZeOt9DM^wfW<RbiBnN4>NKXCN(mZăU":8J]7Dab2es#)Ch,MrdHU)J,7WM+Dv^ji'l]^QS*6b=c5e^VD?qCdww_72rst)0ăU"_va)+OR;GR7lUAnXi2,]2Oe\Dkl;'Gq(U49j2P>TuOB[2TA/R\zL<BBRXu_SYQ:ăU"zAWdAl%S=w73]$Yp'uvPWJP,Cm59E\V:YWi/.FWUyS'4RtAa_R7#_<Vhb0e]Zc-ăU"[q?E,1]l]rK,-IC?Hz'J12tDJ1KwFXIshp.1,\-WC38VL6OducCdBAhtQT>_l*[ăU"J48EZcK\u4>8j)eF9OQSf+eM_A+y>tp16Cmmflqmf&qAHbaj+t/orqaVvs>f_b)ăU"b>S(eO0mG*'Z*Kl.%Qcm;e3ii)SSa,2r\DXYrc^Z#mtzH_-jybx>CKNiA$\7qadăU"P8i\;(Y5c258,1&0wV)PYkoujR9<Tqha=j\A-/m:GZAn:#i40jWPtCUl3ok1Mg$ăU"Z0.[2bWJ$rc;b=sZkU1<(bff25<6GW?Ewq4=R^K%B_7cnLoQ+^T>#.UvViSi_n-ăU"+EbG8W\.CxY4jlkQevt9v=+dH((gL]\l7<k2QzcZjz,?B-e,7<N.'jmj.DF1r'răU"R_ADjB:]RWk=j'Q*,eS?$]xv;d;UZHM(Az4$W3#\q+IlFQA7ReQ]b_]r(Gb=>%UăU"<N4EDDmhezfY/[o?Mf<g=_Q+5/d-#,:G%M'bT_71H%\M\Q-;Fprva72d^1QeXELăU"*FQyO#]o#C8+xam'RI&ZF_v5#82vBVHA[-g1vi0o^]%\E.qFjijlD-dKu?IWg9#ăU"y8YP2W)6c-\f'w.Q%'O2q>_A[C_g1Y\/2^Df3WxXZf)f<Fs&qw\j,2V>itwceH>ăU"Td=QiYS&^ZuRRU,89TD$cdq+V84w\Ds$3>XR%vIqL($1ib[/+n5Y6=ZKQW\/9c9ăU"4\wor3VV7&j8G?XZ*Pbk[$mzugj>1=\d)T%Pz)g&gN6;CUx-&x4(5Wii5gv/>p$ăU"9jQ^'Bt53S[WJ[.T1#'djF+MqrS%Cw+8&C/S.=AB-kMJTH;N0snD.Q0Hg8sM?IIăU"8a_hmSU3.OU7W;(TgHsBj]nrn>aBSTI+V;sEnrwM#_['gaefqC:$c?(7z5S8tiBăU"6GeT,>p9FU2pJFt_2kU[&n4f*uN[?jN\Yi6]sAZsqNQ1]0WZQ4?Kmq#pklX+E_:ăU"?V(W\lfF+$c+).fCIl&*T[zqmUXa=E%:fJC<i55yJ'agP<UrCS%d%M.S=(0,CtmăU"+]fyXPH:2(]4s]oHq]U9,YpGPg5z?c#bsH8;TN\4ID5C?D<Es5PhZ[\i2LoHX'păU"ef(cl%Df[=b-I$]JecVDP88EtHT1i^5?E9)2]PQdpMNi+,eJ:dQ,/BR>tWvDCzkăU"og$f_F]$tj(Q>p%$jefPe%(flAKt5Dl?As=r0Gl38at_&3.OLiRpqe7u5PDTma]ăU"9kG8?N3U<:SF2oNCMN>W%alVh.7o.qfE0fLKS&u\+)Czk9Mz_D?V\eI.d9Vl\/MăU"l&Y&O;X&u^)PbfYJm3-meAT_HDu;ut0p3>vfWJk9X.&lo_mR-(V&AMnll6p1apAăU"NC6slI$(v8U29OX#GpKpdMG>=bc(LO$ryE:<tT&[>\=7j*Sh&JGDm5ZtA59%XK8ăU"64h:%pFUN:o)UP5ixiTVR,[sDsH++IcdQh-JG4Xr-,ZSi2L9UJLiNW[9=XPuD)7ăU"Fu.Mp_CRN?s^3s8ViHFo&5oU93Mr'CVK3du\GZY_HTb(Cfz/CXZqSt/k1/R^i<lăU"bMx9#'\n3wRq9cn+0\W&CD(J,:mWpDK>f2_WgZuwv,RLCFHA%Q8[.3N(AKm$O>,ăU"Qd3_o1&iuG5NYbDNgZ?AGgotDo-5kN3J18s#.=%:=Af'Rmbudc,\'j)Y+7M+(UtăU"W3kqDK,/NVEOzOmlp-oD(]9+3kH_Fj+3OU2EC2=5Y6&ExB&l]Tu9E?DW$hVb0DQăU"cOj3,qI'<76DEGHac>=1Vlt(nS$5_;e7E:-mv.#Wx5u7L.3L,2Wv+9IlP\./uKHăU"Ghs.Dqp?*1bI/0]4ys2]VWywo9AO+US4\QgC4Pe3)J'M'Lu.M2(5x'r0A:JXthOăU"GDRhaKNekzD0Gvr,X7md:CivIrR#k)4X?.^zJPqwekE.rhD]N9L6x+GR_g8p%cfăU"d'6jLd,mrj3gSH(8[M>tHS$_6a;mn6DRo9AwXC%:_R0-ZU?NqlrAK-w>CAEjCmaăU"22GQ>5d]Fe6HT?nSV*Nm]KVBv3QTB[,Lg8O]LFzqOh6K6$Gaip_YL3(ca._<A8YăU"7^rtlGX4Qt4V=Hjm:3HH8%cq'8vcvKS1RY*HMC^fCIGA_K]Mh(3+q3>pBMjWMhmăU"[1w+I+JnDG:<LlZ#C*<(>Z*m=)\Olg2/ShOwIVeo3,He'p>ubo3NxiBflNC$NUxăU"fI\$(]>[VE#s0PI-R;l#Lr(cU,nE4OWOvHwA^C?1,qF%I/-[E'ypmmqK3s7&7=]ăU"J,1+>HYYi)mJ9hwh<hGOLo]pt<BqW]Ku&c><yC+[>O.t6e<*B[s;Z,AMna0XRjlăU"^9uVG_kqBBSu(Fe\0%1P-^SC#=P53,k:)pWtCKghdhJjTe7#=9;i\3bi54[)m,oăU"k=(Cc'^fh0)A#sZ3H#AlVqe++2LqQ06&l;V2rWTWgpr8\i,hv4<rSaKU2I:y83GăU"8[I82%wjkSBJd&&ggOUHDAWe>g5<NKusDtmuYO<;aMBeILI&x=RfjLpEY'KGO%CăU"T>\9lC6j-<55KJd%tojVIcE&p*/NNZT4rjtx7QUJo';Zz-0e,x%.-Zt/Qi2xCINăU"P,i#ooR+Syo/M&q8-o4L[#2rD-Gjmp^+nKW't&c'nwVT69%6NZeyBe+$qd:lDsWăU"Lie7Icf,T+;^fNYXx&=m[*W4In]=FkV%QpIl,NUZJdCUQo_[rguTN-&F%cR:c[păU"#PTcYH*Q>,t?eFz]_uDc+>T^=39GT^\+NO;*4u#^f2&+GC\GNiz:AL>686pp<BpăU"ftaZ*SfT_cKhzL^Rwg$Beu:6=zN%cf=as<5gtTIZPj29b7c6d]iri3(,I5+MxTrăU",>C;glg7SHFVkRT-k_G'kjr.qpuB2,3E3SnwLg^8mJNyDK?4='wSRtJCIqtmzE'ăU"b%Ls'(jPXNrL7(KmR)pZZIENER]o-P5V5Nf*aw4M_cO:uDEp1)Dlp2cA=B-r?f(ăU"Oj/r6tyNkB\hrcxgJZ]oZH6>xfqJ_DM+4,D+_TiE*M,6f-a6sQ1X'BT;39RTP3CăU"DcJNVb>bZQ[%7_sX7c=MRLN>P7_qf]-e-[FQ[kaZmek'_clYe;Kfn\naK8+0mp9ăU"L9RCSV(B0K%)DV7p*h0L0kf\jNvl(b26lEaXTB_?]e9q(z>ePmd>UWL0)6)Z5%6ăU"TM(0J6NqQK8tFIb.+,mSO68IL0G)rXPb1j59j,Si.eij[B>'lw,EQaVu>wn\q)HăU"[RpR>xEU(7UnH:*61P:]YiO]#N4ShNq.Z6bh/hp:Q=\QfqQ0/wY#zQ1(<CguB-NăU";Wn.O?u07x>2P5DIwH*LAfzzMZrxjKKiY)AF,_+.M%$gu.Dl?;ogGltsN]t$]oVăU"yQWly0ARP&5VS5:GI6qnR$jaNQjg^F.N4NR8nW+Kh^R8<]x(OsPdZWghK[5nB;IăU"jdaKUb9DJ^b90X8Ip(iZ%cSs+<saJ:2Sqf-^0Myr>mPGi0=,$jM7E)GThP;1Z*jăU"[P<O]--$ZMmY(<Fim[qjP>%FhPsPT'Z\3aDmCO7x&<,Q0ycIhAR7*Jhq&C-h0-DăU"/%y+KF>ais(V\cxsgrdpXhHg6TG6KBaJ8FTeg^K,VMDJ<V1whyp<?#GTu%[PX>făU"MH9hQN/4wZ%DX.nLBfgm+PIEOaQ-^5n>rc,ub1Yb805gtk'%mKJmths3?3hkMxCăU"GzE3HXtQ1<='omujgE<=krH4?X/=/\%m68/+#Jwz1^2TcHtbw'vkaOJhLKD,2PrăU"4'1Wi<q]N+#N:EG&%:plYKuWNGm>\'L1Ss4,V2x?tv'd[KS^O(=y;*c<1'h9I+eăU"G?X.vd^]RKmg,lBP'[Y8gc<e?u4vv(bF_T-9=PBOhk.F^+h1z,<dhXjAhAU4JQaăU"vmhFyOujkHo0Pf%bF)3NssZKtC)jj^&bT'j^*//7rNNTL37VLuN>NK\4wdi4vNdăU"8+cPC#hZ.3mF+BP>[IP2dAZ--Oh=gfME#ZE]kLjI[c_Y_3ul:LGP7$Pi[5GWFj^ăU"vhU$kE\qFCQ.UE_/(As/zOfEpDE,r-IDfK1i'e2J=s0:foi?+1n<<JIIbib'%]<ăU"r#twF53,RT0rDMq_^H/-Yq2AFZY-]Y*(i.ZsN*,<Iy_[Ke\/nPyfR;Q0POE$7u0ăU"&Hf<csS.BuDD_>Qm]Cc3)1gvP:?,cqdi4'2,mnbJ(UbTTMd&.jQ98M/e9q-Zx8(ăU"KaRa2,5,.\0gr$\tpX\jfFnCoZmdZNYFz<f5lT8Ep_Sh]kkM&/dej6<V_sgU>AuăEND SUBăSUB V2ăU"g&\5D;3,rX%xkfl_Kw4Z136CA='f>rO:Oap=UMsj^l&XeY[dwsHvn\wb7$nL=7măU"CHbLKb>F/]&$[>NhmCF*:#nRK:6Vf]^kPG3CJo4QaFQ114NMfENf2=NAxq6I5MRăU"bo<\Uqm6rGvC]a[/s-m;h2ln/Pf0vuEG=8/.c03X7_1/2M)J%+$ijY09G>k1-K^ăU"*tM14iG+&&urjaPI]ebW<Rj:O4k#(Jm,8iAqM1a\nU#N>EG%Gz:a0Ccd.Exe083ăU"H,EiM.fWF]43bh75:,DYXabne\Z_)y)poa$eOVNYTxk9)ZF/EpPg69,KwN(G:BSăU"K_e(naZCw.d5X_kZCNL&%/L?.q8*TrkWw[K;?6eCRLSvyjh>i4Wad:[ktF;C%P_ăU"oS2^t,',507Jd;2.xIrYKDt7qcJ*iDN2Q(D8o+IUA64/wUR.sIGPOun>odR-NDKăU"sSp\,MO0)SlGo<F^*KqEoRiy5x,0p=bV[W-X[l=',q=ceQZYoLQWw'5i$e2)zcCăU"9<S(%vQ:3C/J,?'a3j>iZ0jt$9h)vckG;FDSaPZuA*LnK/M7y,I+xF8*VHQfx25ăU">.p6JkBu3:y6J(3<o*QJrj6;NJ2iRsm88p*t6jW6Cc+p_Dm1<ry1mi69tC5EkgdăU"fc^IUcN+3PY;E,3YIFF/-LOT_u'I;FDsnAw[f*R&8rt3,3HPkj%Z-WbhktK-d/QăU"Km3Q]1v-_1AVe3?'rd>%HYZ4)xXA1>Rzp#FG2s3V#Q9+s7K65h/onfi[f3Hc;A0ăU"lY5H2::G#\NI#_RAO8NTS?,yBfhyU.R*BjjjEXFlK[%?e16u:Nmv20bUoV$h1X:ăU"JAFSSF.TS#UCS#Ve[_>B;N+h9>m)/6(HPPzfmYYvb\?5C4ke72.WW)cSNWhLg#(ăU"4#wNkuDoQGVF6?R+W>g06n(IH/6Nq,BFRfuKMF-+60wTdZ>3RydttLI4>6/8O]1ăU"sua]YfKx52=I'+([:\HgmI2$vX)T/n[ekXCNtd(5#Ojm-35q-34'TIDEu'KhenjăU"eHj9/CB>aE*wT#mGx]h7s#^pL,Bh9SvR.b1%;QmxvS;f;6ZXXe-slXpiFV5zN9săU"[B2N-xMbA:%<Y/PpMsYXSTWNeORj.M^ulxWAb2zsp;R*bQUjV<5R._$W<BWEAz&ăU"i\I=oahes4%>)ghOjOTTOED5X27SCWClKZ<CQPr7v(0(AkWF7*zSozD2V&0X^$\ăU"dDw3e)nyW^_rW#[Aijd_$uI$u#wNqEs:/S)?Ry(n3*>U\=LidngNMd5o6l2^^ifăU"9oq#+_95T,b<)?.KGQh-V6?JrV3i<ZWLL57a;oLX[q]Yr%2O9AV&VYzq?K/Xsc?ăU"rx]2Rt1JF4lGr_[UXUWYbX%6vx?:5'QeHifY\DRzjY[<hZvEc/L^kxpBAns#vO4ăU",\JY-1T.V<-VIJ67-H1kjftQ?)ew0bspL[]jJ-Ts^'1RC?qf%l0H>a.B8HxSG^UăU"%jC'KL/-][^N,s].7Wqq26>FB]VchF^Pp+(]g/-^#MZ#pq\vHx_kcEp1$pSvQ,JăU";M])?&=*$p'grFMebL#9Ay%(>TaS:Jri=[Wpk:euB.ray)'j^CR5hhX/2%pc]gwăU"Ke'CwaQbzm.mzMw2fU&l%V0<x#Kedc8XARH'CAxxrVrnL')un/ZD3Purlngp=0:ăU"<C,N0L2bpi,-qijT8:T6L,6(J9Q't%;FLdV#gU\JG2d>'NxF&W9p-[60%Hn##KWăU"je3XVtYO1aCUt:WhSHq0q&D#Pp0,SWW[c_CCj'-[fh=gGYC:8S+n5bdOJG_-YwAăU"cT[Z:QQkwWTQ#qmpWpyY:0(]>u9,;T68>85R)<YrPLsUxj:z&U#>tP&zgjv.d2%ăU"N^(u+),57xd;.nzr,i2kx2(c&^?Nbll%qs\ddR1TG'hnH-lokj3SATHhlhmipkcăU"oT2g$N]*0n*D'JJ-;Orw*1D)Z;ZXcrmiSrgTptF55:DE[eE3pXL^qqE*,xaZiS1ăU"%w6I:h^%UhQ_0t#-Kh_Bsx4FS;=f=5FRZ;o\x3w+mTfhsmNFeJ:W1SAKWY,SG#HăU"V_b-BLbiDnRCdX54'rScu)0ZML9fI8vE.d=/ffTLf7)%YZ3S_\PuI4/YsG,W-n[ăU"3H1gNDIPbOgW%PP,C_9sEPyUO/9#Zm/o3BP:FlS>Sd7g,7ou%[F2i^%6qnK3C)#ăU"C8poxax+WR(MhmJN+Bt:(ow]>CSm5D3#Ih(+xTQ(YUvDG&Gv:0:F6=%t+ck:\F=ăU"4x%U&?og7J=?]b59x)BNh=#lvN'JuS.w^3x?.sNNnb4iSqiM_amnxX'gHilc(#(ăU"iPpa\k:-bTr3,)ZYqTBnV4gL1WNAC3KFR,%9OuH_1g0,rIU/M3d1,Q[scPFYWvqăU"Q/f=LU?9Ys2N5eTG2bK(?xVzk&=Uo*F02Nuf,=5HCWJuk*0zrV#,[55x&u4oCX1ăU"UP<xAVG]\hAtOS0fffg*rKWY<t[Si>9plHcZBj:(qr/misZ6mTgl$hl1e*vOqP#ăU"Vef(;q/X4oGe9,q#d/FYS+K9&f45uSk%pLq6,e?b%U6AaDz)cgjC)L7UexE'd*xăU"/0vxQ),PfpOxpZF2vhRW)jO$kWILF5hlng^_m]xn:T:cQ)6EY=4(^Mo-P\Lm]v#ăU"FU^8t[J/CBz\<PA$tE0BRk#L*Rk31yDg#Z4N&<LR])&<Rmsp$Q]N=I\SD%tdDH(ăU"$O-#1J+)c3iemJg6jlO9D#NWJ0rut3B[,P/4r.B8R%E*PbOL($koQ;^AC%nA(P,ăU"AiPT7N2<)FGaS,1I8JGN-1Caoq?a#e(bLE%U&B+O(i4x,T)<u44niqc3dCVcfS)ăU"*C(pqi)XR>u^it7%vL<]lOb*cb(j%$#\eXPNV-#9r0KlNSoji^nrgeiDBc>>^f0ăU"J)^q:;6LSwSK</)G>6'Dm*edfe*$gv5*t:rc:HlQ[q*<fE5twE?9?9O7g](CnEpăU"obf>IyFr*D](Pm&'f;7(Nc^B7z.e]o<_cGK_J;L**Y9.s*>J%/y8meb3Y9fs]Q'ăU"L_Qd?J=\$TEq;S/YfuQ>.Q7To&Nx)Y++-)rw-an%GYR_/-3jrhw3mD5igcO#_O6ăU"bAU9gN0Q=/jqFF/dOZU?z:#]uD%up()%9%%%7-%H*K#Ek65-O7.%%%:M%%%1%#%ăU"%x%%lfxz%gVSgRfx^);<>T]+7wCENx0E#]VK]#dP$8/lV>qispKqY^rR]F*oO*'ăU"_)qR[#IvJxc174piT>UM,z&YTZff.FgfO%]_?5]l3ihp94%>2]YORnju:eV)BPBăU"35EqG1NoD7a6qID541xY3N2&OAEj7<dC#w(o5dkI+hugeguD4Acif7#n9HpuHZWăU"LWxp0qW0VcPV^LcXP*[u.G_sU4L43q5loklrVlLPF$rzQBTBgZZEFx6$6M25J0+ăU"XoH(mds?xPd$X+TRUI(A0jIvNU<YI74lL0r:79SW2qvbJg<GBu*01ch2*YePRgIăU"=tTBx*;(f[#IkH5i<'tALQLggygJB-z%?GHk+mj2WFYPV,rT*$dhL0,3+4pS6qxăU"ZU0vAS=a*BL<&f\1^C=/Pblzb6DDF<V&w)6<N8<qquJ1B>.fkb:Y6^L;v\2DTGaăU"h71&&6L'$Y0ul?b&9s5JQB;CE+Z<$C]'$$2y494hx;(G<FLqZJ<8).2]Vae*1qcăU"dPB)YJbNABi#s;aKZ+f[a[66f&i_BL(lA.gQS>LNKi^-R^Y;puKN4,HMtiePIX)ăU"eKszeCZ*n#nAQc+.1\QNP.'S</PYntINi41GY1mHE:A/eB_[Jl1>PdsGn?d\W(0ăU"k>jJkNWH+QN?;16*%'Hg#PTPAD%C1xyVw)2ha\ZY0B=2Rr.3^2#mP-:j2Jir_a5ăU"2KII4OV6Yj#qJRHD,Ms-66OwDRcJ7dsD>=iT8Cqrg#&HUm&xu<:28*i+]H;0<'=ăU"_i,JsNn#^/$oc,rf,j;^8KWeexw'1[w:OV0eB<,o>doD)OU>qIj4X>'\PV*oD+ZăU"[U%u[ZlgAjy)1q_7t0ZY-4i?*kE+&aX%NV)>fC4mkr2<Or2Y=[/^P3L6)+DPm>BăU"c&c0]c:_g(N(3E71'gek&)g_\'TM/DrLktwTE&y,%QMl+$eNQQ0QvwY?8+P$2jAăU"4pU-nMMOuf\XXM-]n%-?0vrqTlY5bhfb6'xY)d+-24h$eLm6^,p9'=]L?WIL8XTăU"D0Mg(75M'Z-YaO9\Mmu.J0Mp)F)YX/uSTVr73G'F15lix3X'H$<3x0V\NS_t_eBăU"\auA:Yb^MLM>1cg,Dae%4\EMVEEMp3+0Q/IZQ:R0r1?eoxLl)tqJFF%iA2b3#.DăU"+IsttMoqgKYj:FqoH=vo&[V^pJ>'JJ3E&TbX;FU6VhE'^7*oTQSh+/lIOC$YB<3ăU"-ES'ZT+t;_Onat/if)l[a'OQ:pE+WN0$O_J;0U&y<n\K7Q#w(vTFdXCI;9D2g<HăU"f=rc(cOxW(#LNb#u1wWSOH2n$wlWV\^xC#)v=^B4T#$I^RBL=AKd^h=MK<72q^wăU"KqQQhKH7gY5S<cL%p8_J;&pI:&=Y\?Dsqpg]/ZF+5qM#XDWAjiI9jwwO0I']$c'ăU"9BAd+9/e8?p1%zpb42IatZ+RnI<kt#SEd%O+ZhkLA(3WmbLkPI8=BOa%us]dO0]ăU"txm7Jqn6kqs*%4<CT:z7kID/)?Tv9YjPECX0%3ngna5_;6O:>>5aaYOQ?:D#[pxăU"xKE;/#EFcWM>+'ri.k[f39fw(WnfXxvmPlhb7J.PgG0AUo/gj$e7Ockm=\0o[1XăU"E>(n)V,YP:lS5;V:<Z5+Y]p+4gWbKirUJc5)+h/,WuJ68*^G?G[SZi(+a4Hu.IsăU"n&S6EXN.n?)LR6ckf'XvO<v'MTY5-rU-1/U%i?_[]E4*8E^;C#PKm(u1^8vY(9LăU"TOil4qbP7TBx1RL?m'ql(6dxpCa&ej>l%$vioq,j<b2)>g#b47T\S'+'tRZZ$anăU"ApG4s3)=6(5/Ss/j't>J&:HOL/#>r3p,j/g\yP^#s6rC2/4HKF-ANXqBx-XFca0ăU"We;u)#_yFV.IgI>YcfONm7yOAd__CM1QE70R9WF*?V$pEqbOuae,JMF#$$v8cn>ăU"/6mT3[PTltO32]lR/PUU6S=:BN,yOK2^z1osw&.j]\YAwFL=M$7KY2Wd#?E,=6/ăU"%T9GljyGwO6ZFYf-5DGRaN?G)'dMaIjoigMAn$^RNPx,VGEX0P3?45^+CuqN>]jăU"ohnuUn1M#n2qCBGrw,3/1FDp>$$*6:^T:0^IqAkjks-JSz+pH1g;r1\-K&S+GB2ăU"YeTBi^k80$CpL8)1\MV1pp#nr03-\<gz?nS<9/y;]^l]iGwQ.(<>_SiGyTq\5nPăU"59AwdR>.Ivt(J=TSo1j+e-^H[%^^1w/-UGCfd)2/SEf#mx$e2K-<(s>cW</\BnTăU"_>2T>I?dY=;rx\vg4FF?hi*.?116IWhox)h%Q:^&uq(GSjhk.VP+4&5JvNKn;SWăU"Ornw'[wP#AQEke<IgQcT-ti,AIlUs.T5<qx>+LAO2[31UqE<>ZH%R-+YAFN<>MgăU"ez:CrZb<5RQi1x:T^I:ofq57De?XgJ6TM5B4Ll:6TjLPWEJDd>^Q8^Qjj7;#bPdăU"/v*slw,HQ6'onhZGn'j,)fTe9GujWP95^hZD_7uJ-k(k$15E$23+9n?RNJrP)?\ăU"htq'QVrP[Wb>NA>W[IiaAdLJ&&73:uahM^iSTciH:'(8T#DD1UQI0;#2SG2Z*QBăU"v_#OJ1ES),zAW-.v>_A;$1&s>%KMaN>-Fn3qJ<gf<HU,fBgQ1X4Zd#:'JxU<Q\RăU"92U3(OTlNt:gtCO?>5YxB9<G#cP)Yx))R#4F_)IM/EfixA3wJ1PuO=(TW]OKCO)ăU"xCFldQEpZ0G&U[JpbDcVI/jO)[ZaA,j4KIA3Y+[FOfZmH71YhN8Wm$Db(UB/Hm$ăU"nrx(jDgRHPqaZf_XfZOfwyAh<$K,BZ&4a8u5N_QD'd^zF*&jTAJlXz4,t&]EWNWăU"(b]k(pUY>gA9]PCwpz3WU;$t(ND?j*2<IKJhWNt]J3*?nMA;pk6;Z]$R:8$4J]'ăU"R*&)81M1JLV$ZBus\11NjZmI=GwT]Yvuiauvt6de#dr7KxN:>]-SXBd/[yGzK]xăU"3woz_W3-1n?,B_[]U#JEghki_RPI#Kj#MbXog/O0nKs.=r2,t,pW<(EacfU[P=DăU"]M#N5Iz'CTo270B$vhHT[]by5U4;A'Qfk\2tC6COl_ZX.[i9C#64<T3KGYuVVl&ăU"N(up%()9%%%%-%;7/?EtvAH)%k(%%%e/%%%1%%%(x%lf(y(uV%SgfxJdz,>BT]5ăU"KsTIx)<AZh/Tm%$QU%H-14\ApnO)D?jhvQaO.[6X9amC^pcPXSn><D&t#e5mm2hăU"l,3.n%R^hKU7vUU*6UQL8Q(si(0iLtx/IqFFtj%h0N0#Ye]'7B/-Dadit=b(9?&ăU"Vg-x'k>>rSoaELB'T4l=7+%%<KJQa*1J+85.mc)R^DnDYs8UiHj811=7:z1&ZT[ăU"[Rf\?\9L?\d)BJ#.KVJ(Gp&LKC%ft?pC%akxVA.;t$.Xw<he6aBgPxZ9(#XhRdPăU"r'k5^Q'4'61pq5Q*EsbV70EE9K,a2T1B;-_uw&NS-?&AXy'gO7ddb9%#D(#/szCăU"c_;(9S.]qJ(3HX)4h2tlAnmUP_IUc[6]Xd#336HZF*(oVT+/Ry5;:0Ko_:X;FSmăU"OrvuX[nXu0%.=J+md%YAv^4lw[Hg,fxY-6Ub'7uqtEJt[\Kj#ut#g$q%f-;oYqrăU",yRNV)G,R_][$>N'hU#HI,<aR4VkR6PyES$fgU=2CK>$+<D\]tPSWB]n:.P.j?ZăU"e,9l$K1T%8?Pl&Y,04<kRX0uTtoAKu$MbNX1KJ)p<WN[s%d4k9J\%i8Jg_Ld/#=ăU"aqv2(A?pM9A-?fGi9kj.ArE%k,)qA7eOwK9q2wu%yR<Od:sj<8nzo%o7TJc<%CNăU"6=VWns+#rxP1lYuj>&mP0*aJYsmKH]hKp$0Ug0La(\SEGZJhJg4sY.MfZcKxno6ăU"h2VcNDzfEofrg^.DSU\yb6cr<oiYkI&s\nt/^82glzD+8?Tzi:w0ZCew\JGUP:]ăU"%>zD''W(D*QRRU:Gn2,D9$,P_KSvv-=.\08dm*>j6Ie2ST/=Knivd(B%M$aGGv8ăU"MHsZ^DD:YVbkELomp]0N]P4/X0S[2K3gJDkg\9=Q.r2QfgcI.$;>_'8w.7j+LoFăU"KjWUso_=]MMHp)92T%DJ9Pj'+DD6?PY_Fa]v?*uT(6%S.C1q_hAE$(#R8lkGH:HăU">7<_dI0da3J7C4fG&>V6lu%*WjoMS-OsOO\0rtb^58?Zd9kl3z;Z\,L+K)LiRMOăU"\-t:ro(&Ts^d=rwx8r=rx_DZU$<z'xdup%()9%%%%-%=o6CEpSJd\%V&%%'Z&%%ăU"%1%%%%Fwjf%irjF%SVxy;,^:s'<U5i<h$k4,BY%7%]2geEDT+I%Mgu&jzG=3A<QăU"JE\3$22uif%LnwgU5_mh\4*9&n]b*7b6E'n<?2-IyneJ,tZCpA)$TFdJ'Z,0+EVăU"_e)$,]/U?\,na+B&l<-t#]5*sl&gZ>I#-,EmujvJy/i''l+jN$nM-O<x0:$peQCăU"9#xV$'],Hy=[vA&DKV57HLrxJg?V1lNbD''Qdy)2<pn\-wmGaQg:ptph(c]/pGKăU"rJi_YGDi'1zCZa*duDi=<*qAp\Xjk2vVR>_nA*I;zt+Nq)XF5PEKHH680B_u;vSăU"S%DqM?_(_mnv\PbrN3MPo[xE#8:;.y0N1e'6ej/y:fi5M7qBMa$H6M6_>5nKVDlăU"qz7Ld#u77eb)XT&_m$b<Av%'up&%'9%9%%%%-%%e>F4CR,C&Lx&%+%S)%%%1%%%ăU"%%%%%%&%E%%%%%%%%%w%jlsf%rjxS%gfxu%p&'9%%9%%%%-%E-+BEa.KLcj#T%%ăU"Y'+%%-%%%%%%%%%&%%E%%(%L&%%%lnk%XSgf%xup&%'9%9%%%%-a%H*#LEk6-*OăU"7.%%%:M%%%1%%%%%%%%%&%E[%%%a%U%%x&%lfx%zgVS%gfxu%p&'9%%9%%#%-%7ăU"G/?Ev?AH)k%(%%e%/%%1%%%%%%%%%&%%E%%(%I_%.%x%l.fy(u%VSgf%xup&%'9ăU"%9%%%%-m%o6CdESJd'\V&%+%Z&%%%1%%%%%%%%%&%E[%%%c%b%%F%wjfi%rjFS%ăU"Vxyu%p*+%%%%%*%%*%C%&%%j%d%%%%%ăEND SUBăV2ăCLOSE:IF S=71AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDouglas H. Lusher              GRAPHICS PRINT REPLACEMENT     FidoNet QUIK_BAS Echo          06-08-96 (06:02)       QB, PDS                54   2157     GPRINT.BAS  'Hi. It was no surprise when you replied to my post ofă'the routine to print text in the graphics modes and indicatedă'that the VGA character set was at a different location on youră'graphics card than on mine. Different manufacturers did theiră'BIOSes differently and I knew that. I had also known a longă'time ago that there was an interrupt that could be called toă'find the location of the active VGA character set. But believeă'it or not, it had never occured to me to put the two together.ă'Duh. I get absent-minded sometimes. And when I first came acrossă'the idea, only the CGA character set was used, and since thată'is hard-coded into the BIOS, its segment and offset are fixedă'and the same for everybody and were written right into the code.ă'And it just didn't occur to me to do it any different untilă'I read your reply. Anyway, here's the same routine but withă'the interrupt called to get the location of the VGA characteră'set. Also, I modified the code to get the LineFormat bits.ă'This should execute faster. You will need to load QB with theă'/L switch and put the lineă REM $INCLUDE: 'QB.BI'                                    ăă SUB GPrint (X%, Y%, Text$, Culler%)ă 'this routine allows printing text at any pixel locationă '     in the graphics modes without disturbing the backgroundă 'by Douglas H. Lusher, 06-08-1996ăă ' 8 x 8 char box, CGAă 'CharSegment% = &HFFA6: CharOffset% = &HEă 'CharWid% = 8: CharHgt% = 8ăă ' 8 x 14 char box, EGAă 'CharSegment% = &HC000: CharOffset% = &H4ED5ă 'CharWid% = 8: CharHgt% = 14ăă ' 8 x 16 char box, VGAă DIM Regs AS RegTypeXă Regs.AX = &H1130ă Regs.BX = &H600ă CALL InterruptX(&H10, Regs, Regs)ă CharSegment% = Regs.ES: CharOffset% = Regs.BPă CharWid% = 8: CharHgt% = 16ăă DEF SEG = CharSegment%ă XX% = X%ă FOR Char% = 1 TO LEN(Text$)ă   Ptr% = CharHgt% * ASC(MID$(Text$, Char%, 1)) + CharOffset%ă   FOR Ln% = 0 TO CharHgt% - 1ă     BitPattern& = PEEK(Ptr% + Ln%) * 256&ă     LineFormat% = (BitPattern& - 32768) XOR -32768ă     LINE(XX%,Y%+Ln%)-STEP(CharWid%-1,0),Culler%,,LineFormat%ă   NEXTă   XX% = XX% + CharWid%ă NEXTă DEF SEGă END SUBăJohn Wantland                  3D STARFIELD SIMULATION        kwantlan@coffey.com            06-09-96 (20:50)       QB, QBasic, PDS        46   888      3DSTARS.BAS REM starfieldăn = 50       'number of starsăDIM y(n)ăDIM x(n)ăDIM s(n)ăDIM c(n)ăDIM x1(n)ăDIM y1(n)ăDIM c1(n)ăDIM s1(n)ăRANDOMIZE TIMERăSCREEN 12: CLSăFOR i = 1 TO năx(i) = INT(RND * 640 + 1)ăy(i) = INT(RND * 480 + 1)ăs(i) = INT(RND * 5 + 1)ăs1(i) = INT(RND * 5 + 1)ăx1(i) = INT(RND * 640 + 1)ăy1(i) = INT(RND * 480 + 1)ăIF s1(i) <= 3 THEN c1(i) = 8ăIF s1(i) = 4 THEN c1(i) = 7ăIF s1(i) = 5 THEN c1(i) = 15ăIF s(i) <= 3 THEN c(i) = 8ăIF s(i) = 4 THEN c(i) = 7ăIF s(i) = 5 THEN c(i) = 15ăNEXT iăDOăFOR i = 1 TO năPSET (x(i), y(i)), 0ăPSET (x1(i), y1(i)), 0ăx(i) = x(i) - s(i)ăx1(i) = x1(i) - s1(i)ăIF x(i) <= 1 THEN GOSUB 2ăIF x1(i) >= 640 THEN GOSUB 3ăPSET (x(i), y(i)), c(i)ăPSET (x1(i), y1(i)), c1(i)ăa$ = INKEY$: IF a$ <> "" THEN ENDăNEXT iăLOOPă2 x(i) = 640ăy(i) = INT(RND * 480 + 1)ăRETURNă3 x1(i) = 1ăy1(i) = INT(RND * 480 + 1)ăRETURNăăThe ABC Programmer             REAL-TIME COLOUR-MIX-COPPER    Convert from PASCAL Code       06-12-96 (10:56)       QB, QBasic, PDS        68   1686     COPPRMIX.BAS'=====================================================================ă' Real-time color-mix-copperă'  by Bas van Gaalen, Holland, PDă'ă' Converted to BASIC by William Yu (06-12-96)ă' Compile for best performace.ă'---------------------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB CreateTab ()ăDECLARE SUB MoveBars ()ăDECLARE SUB CopperBars ()ăăCONST Size = 300ăCONST Steps = 25ăCONST Bars = 3ăCONST Pi = 3.14ăăDIM SHARED Pal(0 TO 3 * Size - 1) AS INTEGERăDIM SHARED Stab(0 TO 255) AS INTEGERăDIM SHARED BarTab(0 TO Bars - 1) AS INTEGERăă  FOR I = 0 TO Bars - 1: BarTab(I) = Steps * I: NEXT Iă  CreateTabă  DOă    MoveBarsă    CopperBarsă  LOOP UNTIL INKEY$ <> ""ăăENDăăSUB CopperBarsă  WAIT &H3DA, 8              ' Wait for vertical retraceă  cc = 0ă  FOR l = 0 TO Size - 1ă    OUT &H3C8, 0ă    OUT &H3C9, Pal(cc)ă    OUT &H3C9, Pal(cc + 1)ă    'WAIT &H3DA, 1            ' Uncomment this to make bigger copper barsă                              ' Compile with this uncommentedă    OUT &H3C9, Pal(cc + 2)ă    cc = cc + 3ă  NEXT lăEND SUBăăSUB CreateTabă  FOR I = 0 TO 255ă    Stab(I) = INT(SIN(2 * Pi * I / 255) * 86) + 86ă  NEXT IăEND SUBăăSUB MoveBarsă  FOR N = 0 TO Bars - 1ă    FOR I = 0 TO 63ă      'Pal(N MOD 3 + 3 * Stab(BarTab(N)) + 3 * I) = Iă      A = N MOD 3ă      B = 3 * Stab(BarTab(N))ă      Pal(A + B + (3 * I)) = Iă    NEXT Iă    FOR I = 0 TO 63ă      'Pal(N MOD 3 + 3 * Stab(BarTab(N)) + 3 * 64 + 3 * I) = 63 - Iă      A = N MOD 3ă      B = 3 * Stab(BarTab(N))ă      Pal(A + B + (3 * 64) + (3 * I)) = 63 - Iă    NEXT Iă    BarTab(N) = 1 + BarTab(N) MOD 255ă  NEXT NăEND SUBăJonathan Leger                 COMPRESSED BIG BSAVE/BLOAD     leger@mail.dtx.net             06-04-96 (22:14)       QB, QBasic, PDS        829  54689    COMPBBS.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"COMPBBS.ZIP",4^6:Z&=40787:?STRING$(50,177);ăU"%up()%9%%%I-%7c]<EtI7v'w&.%%5*%%%0%%%%uh)'%nj&&SgfgxlcT,]LU5bUhăU"H^#Bk0QkETTm,_+yQ+w[s3_a:l/i4j+g[j*m9clXW\^Y8\R%/fyj]o\,x=X\M/hăU"Rw/*#/(F<4=1ug&?j=%Be8*XF*dqx5A1T*B<lY2JWo[0b)3V%2t4'O&V^?KrFWMăU"t5$HW9R+,]#1iSeTX)%hhO?-2(/dq-NMo#R[%zG,I1P.m6KL>wEE9<1ROUQdJOMăU"QR*3Cj,W'co=u(;K04t?,<6fwuXs=+s$btWhH8]8BFtcjl-c6rP$HACjh:K<W<wăU"'POV2ULM\t6$a7Z=,srv7/og272T/uPFtvQqA_rD:(;Ov#9V$VNH(=ZWC[+Zj.făU"viI:;nf/_uhb5qq4ALxdw)JN%((p_tp1r\oGo]C&Y:7iCiG5s\loFsq:qLXuP'dăU"oYx$TIq$<3utdYMBpz4<]T.z)>L4?,g:'ut)m-_*f4M\Iq10*=68hS[2tYitE#răU"wk%FDB0xNFEMd>.hQrRmC5DFe_/jQG5Sn[pLu\ro-PDJxi;VGn/+I]yOa\blsX6ăU"OLzHWbdHYZdW%t9P/v=9&fF%*vIOglptorXp;SB.Sg9UCQ(lqE60&uxsXjLmK&GăU"Ydshkh&q6mE3tc;SIxC/F8#P^+qgFJYi*d[<Ev8+nC36S*2F/(5Rg/9-Dq(u%p(ăU")9%%%%-7%x.LaA&a&%%di%1%cd%%%/%%.%g&k%fhjSIuh'kML(B2OlKls16PZBFăU"-%&_osPww:_:207%SVRn8IFAlXo18=^_>6U3b\Bgs5,)dl8])7jY>:uA%C^u]B%ăU"[uqgTcX#up.r7<7rVf>T>rwnxtro.7vrojxxZx;Xy%U/z=U3Un/7=+<kmD1;)s#ăU"uh4YNvwNTW2;,<=v$O(4N#17HDn508Viqh&j,S7dDKcXA[w_rpHPetFnw)6x_$tăU";Z661PU(RWu$stV>.7xD2FRs,8mU[.rHK*9#l=KK%J2?bWjG+)3\XNaR)aNp<WVăU"VLLc2w9Qw;D?uJl>4rqL1tQmvNvkSwwv7(/u.(dmIU'Xb4HqnHrqu/V>v^Pm_YNăU"2NB(SVugvB::dhujEVVZlpHFVR.ronsTqw<)Y7_DR;D64a\7a2.<Q;_PqgWrH_/ăU"Z8BK%;nM)8Wsw^8X$NF5pnJ-vXfg+nhj+f,?Hp1ormyj5(G)6aMJt>9(Jo(4mmTăU"\T=Q$71p:4'YPe-GjYk0q.jmGT7%.dvD/uO[^C>QiNd3ZxAZEcoj6C0]lsX?SG0ăU"SyklT+[,baQ7\$tOs=UM9RDi_hGhpW^G[HU#JcZ-HiC,MdD#,b$tc_Wa2w<Nhz<ăU"&hK'(KgS4d0D[1wW2VarR1iB&>iuKfZXksR/q5nq-bc1U2k5l6-A5kr96=t:.0'ăU"IWfd97q3$3\t9n2Gx/j_lxk:8if;<+k,^[GN,0IMdON\<R&<rB<P3/U&u;^TMFaăU"D6d4&aRl0RBVTvtFV<,3Jf?<.jovX>9NO\1d6r(wktpinBYK2S;]vJTmt$vZHeKăU"R*oWHI.n$U98XFd\.p*X7a?a\-/5coY08lJiTht-)OSKgsi%;r+NUYnTk:Ox,NBăU"pa*QDf$h_?i.X?WWLaGuOY0;GaC1Pw2KBs-+x[dm/iqua<::NHt)JYnigQNq5P?ăU",1W8-jd:$K&Z.vG\?':*4_;F#n/<49[*+_HcC-cpXJT3u1ZNhMoHg)Y4(-iEr^VăU":hmqH)R]m4qlK[\nsk\7]/\nCA^5&KixaiH4j8%AC]?&i:2*15J;b;tT1G-Vu13ăU"Iav?gC^cmQPMj<OGt^hJU2qdKYm#mTrsk;qEtc2e_qZ5)>;Ww?e]'ALL]RaQ;\KăU"V4,3b3kE0jI[PP<X(z;\wIeJER<<W8Wp_5b+DWO)2\%a7d_C'\)B'n.bBIY:'t3ăU"0*3_bkhUf<QDW[,Yj'&?J*BA4Wjq2SQIejnB---he#/HL#WSEAAgqLG^\]8^/[TăU"_zFf]*aR,*-;rK%<8ccp8]kZ)i]+PU3P$'L=Hp>W./tx%f,h3ST/Wt,*PHOuIc=ăU"*fUtI92a6AZe.fqz=295qO_4ME/0uCzcsA/$UGW9<Y&>O[a.l0K*qyYu#;WWkgkăU"^U7.R\%G2#Q<b;22+$0)aI_ozD(256$tXFvtilo$&#+/AYmp,gw7GTLO-5&EP3=ăU"mT^KwLHb6K'hCSlkkEQ/vY2N:s\cTon3F*QI*y=.C5v224v0rqK8jb_endL?goFăU"RmB+)Q_k1n<.<qeS(xW9\Z_0DN)Y>HmB\d##\-a.A5m2R42kikB:4dZ=t*BKQj9ăU"A=\ADh[J_T\ipVN'KYyKtV6EGW&[x?gU+xIi>KH\0:30Q.,)e?9K/*4dvfKKXCMăU"4Tw^M>#,>r;%KKjGY8D^^&<:bPRLDVoj*%RWW,S5p2QG+MLkA0wPPmUZy#(jkY?ăU"#I7Ms,UVmW[hO^LFRJsq98s2Y25AxsYYh)tXRkulN3.3eR1quW(^pWAOb0Lf]$NăU"A[HA_[qa)e&WvKUamuEjW^]nui2ZshfiXrVyqLu\B1%V;EYoDtlf'SoMsLGZECLăU"jj2#=[ZJg>ZW\fbd7/aE#&t4s(\.iof4s'Xu-DT).f)jTa<l>ED3iLa2hPvC%\YăU"5RM?\W_F9&S'$#NBI.KEAL)8R^;-XPq+b0+1T(BP>57DD),[E'oEhCy3]H*n;',ăU"b#P+FP1^fRZFD2ar\[<cQZ-T$^K;$0,?EU_T3HSrpwC\/IWdJ4,_D_ePq.tU2V[ăU"e:4N0Ys;iE.\Qg?o/$Xi6XheriXKje5_:^?;QhDQ2m*5.djGs<&/JzSWB*W6Ji?ăU"TUu75BJKZe4VI1>58?6*E#[t\QcE-E#m11<li$)%QeZE,f^n;K[i.1>LgaR9LSCăU"(y):o2O\\E(do<6o*(QYMhQ%m(qPQ)b&]r>57gq,G]sSGRMempITG9S5\=^Oj3KăU"M4Y(GL[R'H](RGnq8%a=:(uL[E[RE<p1b8QgXs*THePE/kV[5\_<-9G+$;QP4.;ăU"-D#5S1MRcb716R4ZAm$j7*83M4c3oX^o23_Uw6XQOUPwLGP)/:jETZR'GUE[;FSăU"oR'dDo_USVj*vpDW]J]a^_y.-2=pC*I)<XJnqbirXSqx)s49EZPc=jJJ:O&he:^ăU"WBxLn$f-W(GLzVR-&NU7Yl1bL<aCXNWCm_?R:&0/-d&.vBJX[4y-*#7'JK)coK:ăU"+G[d4BbLT-=UM0In)H$)])=P>5&kYM_Nm9-,L)?SQ2eGNjZRbOZvR^<9Dk]73TRăU"Q'+GH7SG$O5L7t-60k*]ri5UMsA+oX=x.yEbn.H8ji]2Oh/BY^<gfDR&grJyBX>ăU"N%]%3fr1';rh/W%X;y1[uxQZakNREDptSn9o.KMSngqZW#qSFQ<0PA[9rWO4I&RăU"<+)CB,%iMa.='OT/6_.'Ka]r=A4ECwGBuG-#e\O%VAGOJzFYs)j(N'U<:e7G%8JăU"yC8RSi'oT*z/o5^_gr?h$:d//vX,Dq]&S:T%;NCBS7uRWp6$nKICBEPI[;e=)[<ăU"?/Oi6O=S9hC%A>.fZ;W4liphK6*%[MMlT\amS5EaK;/y9[IbZ2.1oEECE2y0)LkăU"zE/*7$SmpkB1RpD;eQEfXylYd*:VVn&I7oJO?h_/K].8hd1dr%#UaZ[$V[(tuh9ăU"aD-Y%??WBJ2;Rc(u*)CAmhlq8GK8?*taPg3C'DQRQ?ab\J88?h/IK;8f#r\q+B7ăU"WmIgC[uM:uS-=#sm9wT_Bt_rBKLi/_Q>&]Nk8H384>$2w$rs)UB0:FI%Vw'Js.EăU"__0Q<OqU1O$JhC\>kd+(7F7Lh<'1t3^eI^';LH?qEFN5Z(qef.vEJ,>j[=$wpneăU"qqH?H#M9#)%vPl-#KaE?H=+LZ-*%qncl)u.Ij\.Oa.B:-4n:[OCrgZ7m[%^.WerăU"?v>DnMx;'S0TUgg&e1?G:+r$T5?KsIzS1?Y);[_2cJj[GURO$B9*N&CUVJaW\skăU"T%'^q?7W\cgj2)7-;;:VlrwgD#2CX<h4h9bf;F0/&2zr$s5b+\a]-5;&5mmtA[NăU"e$DYyNF<Rn3H*-n_U[jY_=&*I;+]<e_&zZi_45oT*eZqPDSC84PePMK[8f4f$_măU"2BX0K7PkFjAG2OtO'4rOuB)d6qP:g5ZlB#miP^I?=F_DO<.mCM(nMay87>*YV;%ăU"*nYLnVULV.DF*0d#ZnH4'W368?_>Q]MjvT9/\m[>8lWRx'cBaaXuW1V1f:xNTjGăU"Ge9E&q/ID6XHqevm=,+6/CGx+C06&^ekZFmmt%;czdB+KmSe,poS'S]Tc/9Q>W)ăU"#0;mYz)YU3K1H(-\qOV/+#K,7uEn>*0?kOe\=A=FH5D__x/_%5hkK.,JXiRaU<+ăU"<'siv_FN7FRZK'beI)7S9N_hx9F/KF]h]%y-X;I&]agF4CtC44esBdho9$Gwx*HăU"W[\2mcegb'9M7D+4RJ[iQ')QH%mQiI^qZ^6+>xaB/#q24K*g#>+cSh$d9&)\+:6ăU"cJky\8I=1XGDkI*^cy:;/r:WG_,xgK;R/bQ,JHEz$*_d<M7+XUBRZOlVm(<^3Y5ăU"/I,/)fmXE5NjPDvu?nV,kmP%'m,/EJ'M-nq[\Kb(t^FO479d=J([XC[uw4oNoN*ăU"LEIQfK\bfSU#Kzbk0R.jH70N^?kZf=_sb*9dNrT%\cm-.r)eehzyyY)D/PQke*kăU"l)[w(R+a-D43is<i.JUlRi6?+<4V/jz>Q8OXS(1=T2ghM?F*Z5:.6$(F%UD^t>găU"&72_WfElPUoW%[aR\CLkJZ$n\jk3G7JNB^KR(I/QoO:h0dlXe/#'Wa1pq;%+p*FăU"7QR7pQdKMOleZM)/MY,9G,*V8*0X/b1MQx1RB]:e)9)52NDEWdPKDqfMouqV#MgăU"3rAedN%l+c\i0^-QsTK8K'nwI6oSdDi#U:yZ-amI+t');d8f$mc_H[)ki./ziv[ăU"JM-TDVHV(#j63WNn[0:.f7QEF'djR#mo%s3CodhCqbvOOW17hj%YVmgdFps)XomăU">H9cX2L0e8f^/cch\)f(<NDG/&nMVT+Nv/E,J>?GzJQ28k^ZJ-9Z&4)p5/i%0]2ăU")CMJQv[OU&TF1IsZE*nM:c%9rAm5Ia50h9IOD,;C<s+.9\<)?-j15EEpQOg;nU;ăU"'JG%jK)z[D[57pS6JC)gGT&^IZ3jYR38/*u%(>ym8cH86X)5n$mNU;gV&yB53nKăU"PWuuYG7CVN,tVQ>+iN?m/&d.Qel:39M8H]\?QV3W8WdG3R57c676Y:0NnmvWI:)ăU"b<&6n17sHBtLE,\q#fw&N8x')(4e.7A.l9$&hK.]7J*-gA]VvSI>F[A56:mnYUuăU"?S52#m+RYj6J((qaq#rN<O3dhv^XD>qCgZYlF0T.3g\5*%6f,p\c%oLOMfCZo[QăU"3E>1onlHb%,>:/8p[mdZ?6ME%PiFng5'(bsCk3IiHz3fV;(LKj9]V[R2QHQadw%ăU"<F3/qJBwu5k,,d$N)?=p+WbzvIZ)$'Sn*u2,eq(MtJi^lOmm$q4OA<z/kt1XIWPăU"82,sZ4'X=JK,%Lgof:oius7BkU45oED[9UE\&9-m?o*9Ks1:kJ3(H+PGp7(kqo[ăU"u2JOfE:[^'630:Hx2]>+w&TlPg9Q'+BE.w^<#oVYmACx*h0$7)kgH^FhgjX;jxVăU":5)%sv6<&8:r,QdM4NQMSe4V-FSGh]:X:;%.Douv-=krPuM[d'\/L(CIPdmUD2GăU"KjrGXEW:'aBcjWk/wR&\R.n/Wl1JgWFQu#oymj55C&v%AkyKS\io-RPHD'/PK;6ăU"o<zFSL87l;=(5JNTVm-[GcaS=jslZq/rF83<Lu/?HQK_YB]rx9a(q^L:]2P_BZ,ăU")%5WsOzTYmq<,9\OZiCo1NHbE)rM_Lah/*%A2Ibof'^.K6PY%]pR9*#W#Ti_,yjăU"pPyJ2B$.5m45oRa>,+RQ>;P6W#.%FAu'gh7_m2i:h*JiGW19(F\_qP)G$zLQkriăU"T(v/)KAh2x2p,>H.50/^Y)1%kQ*]5IY,<<5CiQr0:4fs9[f>;lF0DOhNK/KdmOWăU"DsznFO>R4rq:mK<wyU:g6XOXw%aQZXBe5[0hNJ2[b/U'%cRB65)ymhCzR+,X7>>ăU"0188XQR<-pbj/LY_%*61&kg4WC'qRg/5;+%>uR2(nIKq%d[(cAM10PxO5Q)&%N$ăU"PFr1PFBhU/7$=U4i\iJcHi'TB23eYu\,\:%MH.*jC7m7.cqR&]SMLMCoWpg+Dq1ăU"qh#Dl1vGg>U_3'Egk845\6#g_Rr;q*.tE5f\f**69_Ei.H'Q8Z*YOS3D9Lk1kn<ăU"F('rEPVZQl#bFRcwQf4wEtQa<GJ_0<;u7M'MnTkCiusAm7e?SKd5%?[>h(%XOSOăU".ggM<oXY%iic_KU[w;Oq%Gx.&>k1&+$vlL**u'+M[(K5EOmIGDT)T$HiUi7S,/)ăU"eXh,MUs;qecI^$KWnOjfR#/DyH%QR^3Ted9,#6/0iKJ/;F)3MvjJxrn3,4;n9nRăU"+K)<:R02*z?9X$>Ig%9C.^Q>[w.GdQZYeekSX1qre5+qL=gh5?j?Rw6XF-9E1>păU"86b0o]'oc'si4'NXHh1]v?E,A]M+lE-d:VLk[g(jN8zZ^(0Q:jO#A4E%U1q1-T.ăU"*>4pu%CN9Py4Si6\GG8ryBRG&kC1]AR9blS9b%*Yf.1PJlMmkdoV(<>faF.ua_năU"Z\Pt5Oq*/aajtK*ucy[I*rRVzdmdAE6&IDJ$^i5m:b0%K-QP<L]EQO>V4e_$3ObăU";hlL9%i8M1;Yi9ve$fN,EnEIaj[*^3,N:9*;Wa8n#vfF0(->rvCvT7;_3v]H(T]ăU"^KAp-*PFmeKrN(ayUihQDiPQqH&a7/_0'9SY9M4XPj=hPIok&?lMeA#8EC:3W:NăU"WRIT_PGuU\4uu]*xpFOG?MgyW88*-8%t6p#gDy[LGa4K+yTz:C6jed-oeGA]As.ăU"LDHzkSEoA?ek-R.MfSvJePjhAhDgyUE1e9/aaNc>V+JJ[P(>$EWfZU:sa.PR'-0ăU"Q[5do,udAsM8[WG[_V+)h-t5#fX(<IY6EW3/-P5W.w)JqLTKG21Pv6B1HZs8=2+ăU"^7X]=UWBqw?QGu66YM'b>zt7p$O>H\'%N*aj_^P2G[Iw?S<$1,C6Tt[Bb'+-7urăU"%b[GDOUklm;AI6DbMKZuZ6N.E,R$9Ri8I+C=u6cgrM4.65X)9e]6VpQ4t*bX8vdăU"NpM4FvxiG:B[Modi=iDq6wLBs9N\\PGC,rI-oaaD[r>>oMIFJ<;qc,VeiOUHRE)ăU"(Ihf6jd'aa_1T7h-)yvmu0hVV+-&=73</$u=:=:.5X,G?Z$/>nv6P];6q.vO5)%ăU"TCR6\*0>gUJu/so'GO8jK66]qG<d^/H6q8,W3C7b%KJmcsKdW1fQ7^['KlgOx72ăU"fXRlA$B9]%_dwfL$+)yw2zpmYqs<e2bDINJ1kFuD3ebT=jQ,EfdC2zZ,N%z-XyAăU"j.s11lf%qh:)%6]3cfS5Sw;cjotD;OF5)=K8$/]Gx^Mcl7mX#X\dM1\<0;m5^YCăU"<G/O>Oe.TYbsg:O9b:t>P<>M<3G342v?nsgMYRdH/^EW.mAt.*G#)O1lAT)hsu$ăU"Qiv_AlQb1S$NSuvW8G#\LXk(]^4_O3yuD44&Hn3R+J=aaCcKC7t.rd2wl/7N&SaăU"#=q8MPO/%#Vay[3*^%j.'R.'<4dVhokit_wLh9Fi3;,L&]V0YbaErB']Tu^?4)7ăU">mNZX6ZD78he3N#Xg?BY8O0&w*TuC2Lxm#>A;lirk+c^*c]>X5Hd?Z[-'RH\3\1ăU"kH1;jj/IJ[9HK<QdzE)APiaP&D4[,xc^itVOfsp#v:AO0uB.wH4pdkXw'=YDO-CăU">)2w3sYE8HT/sjF+sgcSAZsX'T:qBKn49>jXNe=_RT9n>*HWA/B59ocB\]j(IlsăU"sktK%)Y2tVYD2;g5h^>?'Ev5Jr#e-wOh[vGxP?x_tTPfZR.j5QF(/AZ-jz:wZfEăU"b*%?GepE#CO\B'Ywy7Zq7ZW\0wrU-C#1KISD0$u*oFPmFiI]I1%u$S)Z;6r+XWBăU"ukj=0IM?8Z\1=h#6TFq([p7fLe'b]I?m'qM*7XOJt9>V+A.IGbOfKX;#li5?3c3ăU"9&1<MUL2:4rw?HQh<BGG.BsbnQD;uh=HY(e8y2xy\_-<,]$/\1oK:0%WNO><Z&JăU"7(XS55:=X%[k#Zb+%4q7COaZGVg==*XbPyKX,7cdtkuf(1*Fwl%+bsjnv)/.ALsăU"FUz-E$oC?Zu>5q,r'mW)[9]*6bNAIa-UIGm;#+<2:e?=y*s^*CfiRaPo(*qFo4LăU"D1-N?wihOcBs<RET^cjJfd*q95[tBl(YW>mq-8=I%_I68LsfC0W=JMh;FcZX,qgăU":<n*?pcjUO5&GUBlb&7S/;958a?,5(=6qnU_o%dxnxLG*#(xi$*JOuLgj]+Q2\păU"Jp/d)Jl<b1At3=GUSsU)uic<<4UDc7;5$^X62.uM:$lQP1V&]K]JK-wQ#4EKBu.ăU"##P;H9K1t13XN&DN\-AEa6z>F>Yiac044ZCE7?ygV)kUp%H)>\yE1slorcEP-QwăU"tF<SG$->QP+\gcY)M?NHwWhZ,;F\'/0BfiiNs,$_oY'n+k,*)sc^/Rg0t>))1k3ăU"vn6MUx[>C'P)GONgqtaWV2MUKdvOALIbcnU7;abK.Sf+F%][NBRO9,IScy%oQd%ăU"7I(;i^u[spR2:2vql8\/J98OYXjnXx\*VCFB]dv\8:#B0ZW2L$=.dcwmBeR/47+ăU"45SW?<QkBO)[si;%,4=FH1'0\a#U[US7E1VfiHM.MAUwpb,Hi&HY5rVHTMl%>,PăU"/R)eE\kiynl9KS%c'%IHrAh%8f7Jbh:b'D2^u[1J/a5s$sBd&6=%bQ>I2JzL]J$ăU"ot1mVR8)L01t9eM6:3t7g1uJ1eKY=:t$w9KP63Sgs$rgsp]o;9)t,Iv/ER3D#/UăU"?ly'bCGE,_9*VdP/xu^kI,n%kdnX]Ki.bG<_sxO7tXuYsCbzeV:aSW&%F)[IyYXăU"Ly6cxTSPDN87xT1JP2IY.'Azde%Po,K01LM>cpM,cJIZ])%Y1Lg>(KqmFF6=e-răU"EwCm=GoCLD+cN:;.fj1CswOW<)gh[AN31hK;x*vROZU88-](qEz%Iu]S,Bhz\XuăU"DIWQjQIF:ejW6o3t+x.Br47N1Pr3Ymk)FSf+xKD8v?j^C8BP*.wJHvo-t&%BM#:ăU"R?#Juj4t&P17KO9]\JXLx_kV\>Z%2m^*TsBOR/lTxAt-Hr:v;eHXp:wdrB2-MliăU"NvOP'%zZax[]\HVHL'[:?CFp6H_7BPlKf1CMWiO)vUP8yp-q;jLD?*-'?Q$&\]tăU"'1ru+/HXMu%I3##*TY[pePx%9\qI>3nj'nO^x$rj-k%%qKPM:=n^k0tBJ4PhbiLăU"L[[Vz//=lfv*m$w<Wjoss.t$xN*2[OM:_&]JJ%yBFV\AuEn<4Pjh9IN7*-iss21ăU"XEb&Z\0-tnRGJ:Ck>/gMu'eB1Y&iZ$hFR+6L%1T,J+/L#(Kh1=-tIwnR;Y^>Q(^ăU",h=X6xF1s5\m(znb'I_7lb%2n(scRF\W>)3rHIt6]fTgLb3adD:hL5w/&_A01_oăU"vHX;a+()(o<Kf0+LneY7-O\OI#rPIRjMMo3dtc\Vx.P)%XW&--KGO'7*Kx0c&5]ăU"(_fUo]v9KX&D/y_NwBub4\G[Ea$m0RNs;AB&r8)Li6eT&D\;o?Nccdy3xl^.9SSăU"ML3?uJG%lO(eEuXD+T*6:PNj$-_SFq?0)jlCfaN7z8G]t>pFpiR0C1eb8/[Vg.$ăU"t+yB]uqU;lCB_R>C_em&2BKrg>X?UiBogn]NX-O[Z21<8txZh_Ra(c%ap4(on4VăU"v9<>tw)zEF--L?i#h3ytIb]Ae_\;XJ7cJ?lQ&+1&WW,N+=swM_qE5]BQnJOt<c[ăU"E-eTeH\AQiGDXWORjq4,#TUFA:*_m[fF[cY3IL:*5o8e+(=wNIjd^7)Coa*Q6*AăU"0IYg&.2*JVAyVsg$Y+[/kk,Jbbbg?JIt3,a6fGhDDFu)]>h*MkN0GjKGUCkw?E<ăU"4$Od8q(*]X?$NK1=J;qe0Qh,,(quD,C%OTQXUT_;hdI6:ZQ15aV81w:/55_Uf9UăU"%)%rI8pO='4*#NmPzAMbtekVW$Gn/ZjOnK*0Vsgh)zcmQYETT<T/6bfg.6xFZI3ăU"iYL'W^Ht8g&\s)opcnbzc5khPDg8\zlVlxpI.<jYSCz;&u<),4[*K,IiQ5b0b-[ăU"&Y53#\Ui&&bPxG'YYa4jTl3CcKB4dus.ANXXS(##'&$hyUbU3[%ab(V.IK_Y.oQăU"e9R:-1k%k1^U6p[EQcH10i$$;jk)Dc_$rnUb,mcj1ocNcCV/4Bq1shb?VlIP%SKăU"%#TPycN-M5_nhgFE:FY)Ef4u87U=ATev5/\B7St*4)GkAn-eymXLtnV>\o65u^3ăU"]nlQh8/pW.Z\ZwukZ-^4XGDU70zHw75$qII,2;pO[QA5[L,8lkVZHem*fARdab)ăU"wh'$/UAd(h(NGlF+V3p>U.2a=(6#1IB-aQnS.6:sW]Z,8pcNb,+,0pBx#mU4v%/ăU"l_,Y,uwW8x*GTg&Izdhl;YNJyt'WIO+7_Nsr^6'.gudi7yY8+_HW;^43OML_y6VăU"b)5*eI36;icFsUU^28W.0We_K7n9t.s%j2Q\bbSC2QPI:,,MsF:AuvC4tqx(Ed*ăU"r-mQ6<W9_[et:$z:1Q]^'TJ>7:c3MF8UAGiaGpBy(%''n976ESSW506Z*bSMk_PăU"#Yu0GT<Q2j?)HH>[%&5VGI+Km6da:Lb$,4\(zR/g>uF=SIb7n\+,6$Zamf^'4:păU"i&$DnX&Zgbp*dE,TZ&Q?8M/5nJV;jt\D(c3\(mNBvdrG1HZkl?Hb&en&F%A[fj^ăU"2_oORW59umcrHI&/zE1ixq.e8.<#8]yYr[8?7-3T>eX'P*TKSFANEMktkQ2P>bmăU"Tw1dIio2eW5B,mojR,qa[_wrBCV^XrEjA=4*7[[jF6.6^4Gm$Lb-]4/(4(*G8[NăU"3V;xG[4bm-jZbwc+g5,Ln\<iH[g/]?y,a:DCE/XYa:O>k2'-P,vhrWx0+=bUS7YăU"V[Y6Gd0vBl-ZuF_g#b+mLYo6Ixjmt14&geU)#nImXPZmFPiFcFv[$G=0x=DB1dWăU"/G#+GAYQ$j<1tD%MLSaK%0SU\t4#l#?psr,[?(_c?<iF;vpRkffIy/i7_/Z^iAZăU"\M#:vvMsFdiUVCPpqfHI(qYgd/KacV'g*,stLS_NLTg$7;l9CtW:Z2;2i'5qG0oăU"4UO-,SK0Vu(kGb;B+Sm\m<I7a?rTGxq)6lYoFa8<1E)bXD>;X[\tE5Z9J9=POYZăU"5e7ZH1o^9onL(D/:t]873OmIxYn9S,q%)$u[&'qO=_3UT\rUF>&j-6,&.AE\>k$ăU"9gGMR[_Gud^[:?JilnVW&i-00QXv?Qq*GxnB6BpIGoTPT';i9^*c[EPy+=<puwFăU"e&2NIuhT.g//haQ6mL.nLd.GrI/v7PEKjf)wk0ABBYwR9GNd/'N3_4p6RX=L'26ăU"wgUOOT\$/;N2\5anmpQ#O5+;w\S]nMAR(XFA;>UyzW7V*)/,2gug2DRl&WSwhD5ăU"u]LH/a>#8bSo?7PGtR,6p=b$kN<=lDtZ>G_FLRVZDS6_%+%^;8[$::6#4icsj:oăU"r5TEB&ni8oXEi%*-5Og%u>kV]5:SAloZC-hhKOeErxa',?q\\K>+3.Z$0FcLP'/ăU"-iA.Sq7=T%AjInF<+.-5D)Rlf7_8bQdrqgMxl>m<b'6\Jp/#<U(bAIYlG5zSY?răU"?OF4vVo?T7)npaESUu^?gswF^l#1uZicnef$d?IsgW8OK88h&RZ]I+AC+3M4+7/ăU"*BF<VyJNdHhsEMoaHy)u*Q\tX)*L_c#8;RL*UIB]lACV,QSqV06G/U,T+k<3r]făU"8FCQn<iPNm6UY8f$,5h28OM6.S[\[q0-.;uYp%fFa%6)D6bCGA#7(>iOQV)p*?MăU"c&e6y]DGRSG9rD/m=R*l'2T.95Vu)KK<8Uw2l[G_ShC:8eOKO_*TH+;+7DKuPj6ăU"h)_-c]McV,b(sGDtb0N/W_Wj/fkTf2[*IF5ib][0B6DpRtUPm;9o,1daoRS+,bdăU"p5l?^0\cn-*?10T?e9%ANCRsHrYxIW,[^_qKas;<T_x4Xp/UXw(O<WkqoooAANZăU"FAS-pP,N*^D\N^t#^BI-7]9FreKPD/FC'eN_'E]r6kMcsZr4/Afz.Po$z.Arv=FăU"E?vgEO.w9bKl_YOj?/D8/4rLc-V8W*sY69bh%Vi=HV<4(YMe\Da9n=Wdpl<6*mHăU"Ids'e0-)cxBjBkD^T.zgbqt.M%C.L&>.?WXY5=RwioGg9f6MH:C>P\>+M+$*F(*ăU"LEpV3:tjHoe-8vJpKAY>qEl$*\zXv;)68>by*x%mk9r*]Kep*3Jkj4ND+5)9kr:ăU"i3.#6A'#q*v7YaO]He\1Vfw-SAco8WVqiT,LI7ZqAH-sl%;$[I2gWeU60+Dc%nwăU"j<'b=Z'0mp:EjH\CL4_xAYok6&JFmvGBF=K\'43pGhs4g<+UMKXHjLt+>n*vYOXăU"3pqou.yA.oMa4bq;H&tPYxMpXGi6]+:RJ<C-X<42kewK+b\JY=UgrBXk&:W7nyjăU"MpR2U\&D<ukp^yrYWPyX$:.[06X%Amk8_r1,RFZ;CIG=.^mK6D4ef*KWH?6#+LCăU"r^X-nU'_U+l\s;3HG^cX0PVIX:c2OX=i:p'nqXemTh?:0Sfjk=leU6u1Z/Ec#*$ăU";r:2BZqhxWT/gIO#n&bk?ITrd?rZLRJ'.iSh5NZCY5S_lFGE:>;+SpSrhC$LF1JăU"B<5%$U6P4O*%5m%wdJ%WvXO:,u5TUQ'Yb-MS'?13)xA_N/>LmHA4Lc?hh\Xvph9ăEND SUBăSUB V2ăU"n,R>Nrx9f,V#y&)e)[I>UlzIV\X06&3J_5M4v#vqA;8qn(ed7fkEev0oOp?A56hăU"-J%2u-3>3VCG?4+)NW_Yeyq]]cM'7Z.4C[N?4Rs$V4Q:B,-mMf=bd,37w+Zs)L%ăU"Z8hvagf6GpGtpGp_+mNada6N%D[BWUD\jK/;i==SP/DtlD)CgBM-m#NV1Gz<JB^ăU"L]2fzQ/7,*<:s&Q.a6g'G:2MrEPIRT3ULB'4.?iqHYA[D6j2*gQ3:+gj==DZ<p/ăU"Lw1W]/i5i+mz'MuaHn<teGXWoo&CW^R?O['PlhZE)':if%Sh7]siHLq,v*t4c.)ăU"B+Zf-(0[4lbzF6g$X^[3qf_rhq>k(nE6QYG2unIfM58YLV-kJh8?ICxb]H,Qb*\ăU"EW:$8;\ADzMHXa?[UU76eoXj&d_WSAkje:BG43R7%Sn2n4UTd6W.Q1C\IIsEs$hăU"UdI5Kx>\+UyZ'3by=*$W0'H'Arr8xk;_CWsSY9d<at+HRtU_[nhh8RjLsxaPTFJăU"VXCB-ME8o>FKLp<ZfHH9-t=5W>h[rbE-5.F5nXM]S8sx5Zb#;rgbGxiciSwdo'7ăU"Y.Z5lBHuLsf6>cuvyjMixEs]T)gX:*$aa?Q)k&X1<:lkl/>-KQ61&GEOIxedE9/ăU"ttYP\],QYSm1TmXO0Gr^IxeeI%s1OQeBTYrtwI47U,<<sqk71QYh+ZNJgr[\Ul7ăU"fyd3[\1qAid'Rb6f\P;d;H4rGT>)T0w7md-^#ewJM;*s9%$I'dw?>yt:CC=epx$ăU"ilCM5?kErNb-qWYld%4c*bUu=t>0sIyfy;%+4(M_>kK.1eFZ9WcdMs<#3<:oFf1ăU"Im#RfZ'uCZ3Np3e_'-]AY?.[Xl[TEp,Ble2-6$7gSW?Js$K,e[T0,z2Cu>^37NkăU"IW$1,]$_gi2rR,Cg6'#AURJQWlOSejPMdR81O9;[l/C,$=*^,MJ+K7Dw\vg7=F,ăU"Q,ZxM[>DiISCcL2P2mi.WbCAZDb9HIS%uu4Zs)2jFU,8^u%183a5Du/VUt1[RnWăU"G[#04-7L2V%(:<KOw%iR$G.W3X-/jLbu]o=D5O8Pma)4Gf$NOb;QeQfH[\krZsmăU":m'bHt$_JH;l4k*3Gv/p$BFaFP(?0T)fswEs_#EU[$192i]0/YNRR0UqRE4[u8văU"-Ikf_KD3kLRsNBNSjo36_Z#cRk4]ii8hpH$\ik\C4VJa6'AE']_Fc]rKM1zfEV1ăU"dp0PEhUR>:cwjkWWeD7t-saTv_7dn2cURHMpY2pT9-,u8eqQcRhWUVqehv3c4cPăU"_b&l:,\S)NkUZ4F_[EGCSL&&BV81S4sgQoGWHA-=MIv2a3)74#O#,W455L,HPd)ăU"wPd/;T#Il#/^JJDJjOoSyo,eE_#a>8>R$.MvV^$:Ro:7VW3n*T-<T')r%?M<D%6ăU"FMTr[t+R-bQ^Vr,),/^*rWCtIrHya(D:iQ0a:SO(#r]&bk,s)R)21PNvj]H\2obăU"mJmN&DN=X+ddCa-u)pYwj&amhW4Kfm3RDsWBc>4Ghk;^\SOMI1_WYw<RA%Nv?ndăU"FR\tE+2MmE?B?8H0Hve*T[d\]FB.WjGu_>2?\k7\no25VG)hD8CZS6YpQYcvAoIăU"WN4)glm_zXER(5.rpw_\F*R:I?aW+Wc1CW4uO+0M3Z[3:u&o,L:H9*\e>[-q_=1ăU"\[1X48jJ=BV0?U0D>HGvA\B'Rn%4SNdBo<8#$?0vjYTngmoIsk.<I)O(v:vKjXpăU"7O35^J8v]ie-H%AL0_/T+MZ4^T=/TLuu)rlCNz1.djNP+6sHwga(/LQbe*$=o+,ăU"*T&f+z9f)>R6$tDxahDG;V)YJqhWl+^V,8570YKBYL=BKAU4:65_I%m&tLGE'IeăU"7o[5v,'WCSAw^oPKG)<C;t4qMfZc73zWzDqat5^wU\CZssf[Y>39zpb_HKYPYaZăU"Xql_l6%58(aReWI\k-/e?YhjzeU6]&(G=7Rdq1RcE3D5hre_<S36>sHp1-qxQN;ăU"V%NMU6r>dH5(/O0zXlFYJR'iz(bnGul_tN2Gal44An#OjCU;akv;E%1<l>QH.4*ăU"Tlm:(>DH)Jk5-aFL7IaTG+rRuSt*8]t[1w>;<Nt\EZx-FXD/JJh5;+R3V+LVrjNăU"OdRZrmrFngC\L\?%l5),wXfUa,O'3-C)9j^TnHA*?DHBYc0<eyE_b\k^h7nX8>BăU"xl0I4KT+HpBuncZvnoto*)JDh&#*oV^ce<=[g%'5BX14[H20^tO#CO:<XIp1SZ5ăU"_r<P(Rp>WJ9?-kce(R=?5=N8KN8$^t4*J/#8mQ?X2eY%0eEw:gZFvKVsrv1WIT-ăU"U6qi^Q3<OW(M=2;Mk[Gz5jcc:knJq/Z/oLr:hF[-#:i<q[6(,zWyW#HF<I<Dl\0ăU"bwd6.)o]+fC09FI_iwhR>:VUXn[fWnx25bOs\^rtpv\2dUp%cXFq-5A3_k7>6w.ăU"bAEx2L6lcI660mU?;L6]j#pgB#KG,$22mo[?W*BN#lt-:p'v3JD3f>;#j#kLum3ăU"&=PZcEf+kNqvS-QB/7lQ5=UmLqCxNerE3dLs;EplmIfRxdo)mALLQUe6TtW60JnăU";UpTY>asE9u4V-dU+L0).LjY?N0U$'ROpB^'[)4cHn3NV,b__>eco2fq^^di'poăU"\><aLDkN3l-eg+QvVe-\TCif<k<3glZD']TL8f-Fy;5^Sh(JuzH?ht-d:2blllsăU"-kv3G?w2Q2?^AG:h%K>U<%*DRdLo0?)NjtXS$]GGUENvGuct'5^C3#,RLg,bCIaăU"Lnw]d&Dl<.mui;QdRfjPCMi%5b-*eoa:;b[6=_2-%<+8P=[t<R%blD[Ns;SK456ăU"h?prEkDJGp+nwo7?1uM/AM&/S8l2hhVZb%z>bZ^w6\t^jvM]3lIzP*])_6Z-LF-ăU"GHY&vt7#9'lJXLaE*-_)/)ao.(>4h_pC5PGQq2##hE\QU8h5>7T'Bf#)T5_ST[XăU"NN9Q]W1oTzPJP6Tszf>(mNsn3CJG-(qU1?&:::.dZv)ZI]M?0j:xo#8P#*GpBi<ăU"W9Bh<2.%uZo4%:B&IM>Q=e6pKG%6\.,lx8*u9kB5GPtQ<LyUW-x.g[erzj.aj.=ăU"H\Uz=chah2i+E'x'H3?4<(X2.274kTPO$DpZj6f1oMo$m'\UMz2;iZ^c%FvZ3-(ăU"1vZ'3lF^j,Kp;]CJ*lT.1+jM5b(UG-^5XtzpJ#g_D/e3%J\Wc'1z\'<PoqeB$6&ăU"CH$nL,8qqx/qj<[lEC=]Sfp_t7<?3'4SQ5b2IX3*-JG-k:BI$5o#GsFaR5<+HW8ăU"OL-Lx9N2C6]3Z*l?qk0sRNf2L4D#i?P\,LMC0Ro/(HI=1M7sXTnh[0BA+Gro].6ăU"1njdbK8?8e-VLIEH][93EQVvX:So;]gwPekQ>6g[yRLUg$,KYPcE-GUF<VrVgdKăU"3L1zh7Q7j^yJhnE33&DJ3uJkQ'LLo%<*2BGwdR#*ouR?aPW64V+l-v9\jyfC6k)ăU"3uXdtz64IeG*gMv0DiaOhRI?gC<Ok/e9HjPE<44]Cq=Ppd\Hj:L3MbMmLxR$/]'ăU"0Zw6$cj%#w,(&IH;YHNYpH,;%HNC,R.:D;pFcSW:Veprmr#WnfgO%0J$#*1L-InăU"sH^]A9sa.:k/$u;22P]9%o8p4Zac&'pQVGP#Vkg#9B0_\:5R[Y.ZiP+x3k,ZoDoăU"H^N/t+awWfFL9JEqAa#a7Qs^lorW9c$J0mDB^nrEdO-w)__Z^%IlT(PuQ\=KxvIăU"ZL(\=hf.p'8KCgCh_zD:]:?0]Ec#C*HN0yJxR,4V1[MQSu3g-[W87l3f#.&_RH^ăU"Si*1xa.Z^P+0K\Us$ktlJxoFfBRiI^2U99bVH;[^RwLYw+G.<>#lv5Ve(''g6O6ăU"gJH3#E[sjHn'-)LAA>I(*_?='oHOTvXECmAh\&&=Qw[Q,6Pb=64pD\)txN6W>9-ăU"2bC3:C[O/*$d=z&BvZF[g9)dPwl^Hj?lWP,L0cujmHo)do#uDs(>Mia,t.?dwZ-ăU"+4z#G,3jl0-V^[*prPFN0eE-%y]yD[YO\>0qJltH3BffLv0%,*LPwHPBSnftvq6ăU"5($EJ03w[%Et_b6:bj[BZAEgKHSZu,-_l.&OVj'IUCNwfXb((i)H43Y_q<mxBQ#ăU"P/0hg+z8R_Rt;)M1jJ#LM8FkuW*SZE3nY1,Y<I=cdC&bj4x-^/uiuW#'^.C=_LUăU"L#C%?nI4VRp]M&:4]VSxV\$PQV/k[\DfDl-pO1+8SA,e'^UlHrkO7r,^s+j&Tr4ăU"il5\1(#FYZ65IK.j5K0p#F/mcC8^3vuBh#U*[jm^LK0vurw&7/qLT,#V&8GCjEhăU".%h?;h(4]+qgkOaJ4pAYK;)f=cT?)u86?YB+2:4RTFT<W2UG\Z>'m)oc+?%[hoDăU"5Y*0J/6asnFH]wBik,<ZVoAHZToTs)V&=(4H,mu8v=vgVUGOD^$+p86_/iq&-[=ăU"^[s[sLW&qd*TrWH]v8$4MkHe18+*h;Q/dbuUX>TlyNDWq0rJP.Aa+[2k[v8\s-YăU"Z'T^[[5M#:U8he\^Q:l$pax<djvHcw,F?J&EuWfBZ4k<:)f6Fj%:DRA).fCJ[C?ăU"tv9e>#vhkBX^Yeer^ExW[YO2rt+jbr1Lo,S7);>(uk$W,(EoG2UT)t^_,/bFZRqăU"Jv$.t-4=pti1mI;HyNlGtMlyX\TlU*o.P'f:VKmCo(4;uJNxIo?DJKZDI(C\\J4ăU"=P$X28ICe*0axHKe&C&;54rM4Kk/iqRcv(+6Vy1p\$*.WtuO')m]/dq?iHz0j?\ăU"su;jae:o3Xh7CJl/Z8rnt0idcou:>^7KGnSiKROoT\)<-$/1R))B<5%F*=Q\C8IăU"dEJd%X5v(er;KG7fl$MeYw#rGb11qOFSD#-<oi^F4$2u:)4*#q5-2D#l5/#NiQbăU"B*i)SnD)K&(y56P]\t+b'iN2C%-Z(4mZUSkgI9-p4\'3-\w6k87f#OfwO^e0rwOăU"imHV$Su=cu+qZV_>[7*g%KdP\%BjDd&q'^Ig]7actd>rZq88LME\99MQ\Pj=_K/ăU"$3:xh3m/tf)#/X;>ZFn8Cd8qpXiUYC0FJpGK_Wm6*6x=29%Rpc#Z3UkuKhrrXY;ăU"WSuTtT5-Vl^dp$G+3mL<nMrUW&tj,D3nMKSbQ1UrSdUkERds3f/K<H/a+KYbBSiăU"kk8j&^tCvQ'NS$F>ID[2_H<(6jxD<\m:9.V*i=S(L*tum8cd.Uuex)=?)QBDuXmăU"pKAohxdkzdHL_j7iLUJ'_AVM3aSjNHN3C?:x8qX'L1Kf0NgIKDYd5/0fABf/([(ăU"/lt<%jr?4^hL+(BQhYg70;g*QHMAWZEwiQs)&DXANxJ(,WnWlmo,^ZVW7lrp_#4ăU"m6Tj0<mR+dwa9t?[144HAWkg=KujM##(u5nZN;*5sn;wjqS'm.6<,bQxtRLch?văU"boLX#.-wO7CO$P,le;WE:evtXC&N?Ovb]Okpv*cBl,3mL4#J5]gszP#NA7/kw-^ăU"_/07Ptyw\wZRHIvB&xu.oB?IwaSZ_QCzG)_nDZmwbK+X5eBdB\8jDCBm:g5r/%#ăU"Kr<h]RLki$4o7%9e?OQGYKToF3r4?+;HAKV+ql%$7a1wA]wguS:S0sJ;D,I[_uTăU"kljaYnuwbatv4w2$%6R)=0TTFT0()mfAv,HBO:o7pSZjl\]5%V;DxL&'K3Tt4q)ăU"/JWjvH*NwhAG%^[)mv)7VLP6>DAq2#-cTXMvso9]ZhPtH\<Aq8C3-US[F:h2<<năU">fgPdWrud8n8VPGnp1oX*_;IJ.)zB^Ra=Ud%de,)tHU]%l]pYj]eR3_nO%Qg,g:ăU"oe&hGKqdT,^bB9RU:tC4%kmb?OrF[s&Q2-.%.._E%IIIIOIaO_[Dem)#&&fV2SSăU"SIr5^gr\7..)Xjf+:\fr^;:>XDHQCpkJ2.F^Q6eV$Y[bXg0uX4h7Wt#gHLzzdS7ăU"[0OY<UG#^V]EQPo&?H?e4:#I:6G1sU\(HEn+$Srfhwn2163G*M:',\*q3+%9#<$ăU"_RGC\h+O*:6\gGkw(VPwt\<MvCMy5x&?Aj95l*n*$bR&Ct>RXcn\yiViGFsD8'*ăU"5/LoU+^t+ScXyR&i:BO:PF]s]dr]OR&\5B-[ODuSLX1o'HlJs&-1cBHPf^3%$N4ăU"pSW.rAWOnq(5<DFh,%CZ(u$;Nl.p\G?i47^i[W9dH(=Ld;lZYx]aSckqvE?J8Q?ăU"MLfiq7P.7YW%cxS=ETDDSN3^*7kX?qg=AQ[HD[lXuS9=i-Vc%I&&k]>#YAvHLPOăU"sjQd<(SGm9nQfE'kNq#[>T21hy?C?SeyONuvX\&Y^^>fEefwrLAA?P9IVo6mq][ăU"D3:5Uw0N=i&>RYf3sKBR%m4dJY:la-MKFHr(B+vjta,+xmu/Gq$tNx*EZf03N)JăU"R0XepLqegMZ)IQjp39cr<D$Y8/sB#uNhsn$.)VMTz$'dBlOP/hgYQFHFzW*<5a8ăU"'%C\wEl[+)5Q,C8bfVhak#bs:J%mAF%\sFysH,FSALkHAnd9-]4GQ/E.Fj?y3C4ăU"sCKK&IdP/P'KM69)\2VfkyF5*Hj3TU/d^mv%kNhnu89QAO2QZNYCj\27F1YCN=4ăU"m9c-WD7v15>sI607l71LuYKM_],-[0\\rjo%aDjNQIl7M*k3n\zvJ<[cL2%>$DDăU"msWatD*>ptocf4*ei4j8ZBD[Lw4?e7si9^bis0^PgI6-P7m+W#l.oiie'b(9r=găU"7_%fNX6uo.ijYd5)t=$Tzl.#yxIbU?ai1#osqY#dJY>cSoqAH7mRS9SY8?#I#.tăU"_$s=Dh--\1R[/RyH1)n%Faeh*MXdrcqC&\>C^^U_Kmr4Sk*=gET;ig/e]$Oq^q0ăU"zk9Ms7m)<j;9eH?pGYwQ0Glr3w3p8?MgIXw3JZw2.k<YEmUB'fGPBar,i/Z6HV)ăU"GnG'b;GzxoYKe,DqsZI#.Why'35hvRFRh?%dw+]Sq^nkAcOfw>pa82O9c2VF2>păU";'Le#f$B53x)c]d<gT>PDd\IV;]pru31&?$ks-8]o7/'OEG-6XJ9<8EaU)TpTQ7ăU"uFI.O&c-AhzI),4Yd%4wVybj<$ND0tfl:u)o9IV[0GkjRQhs$Jyd/PvrMtX<shEăU"87V>yMyUJ,E49h:f\V(Eka*3;ZThOrDdc4e\+^ZKLt_N6)*jX+S76qdp(Kk<dBQăU"ai2R_,jH?gwIB#ZMN0+W:hP.At=oJ93Io$WB:A5vX(Le2]Hkyo7xbt2Tik\*uK7ăU"lGpV(kLQk1;Ztsg.K;5BTe[YP39X0E]&d_?uMK$fZ?<t_GqrPkcTxU7F6vE9?lmăU"'DfU^JHsa:Ge,jN2jj>#<Qf&5Gf2AlBLzO;kX/H5?51XZKWXntJ,Kp]pRaa?#LYăU"4-bUhQ%Z3gk'6?6*MmDd(?b]G7CE7MF<X&xIc]Mr;B#X3_M>uFDET6M.;fIwSVcăU"/;mRY]xm[:]pRmtqG>Y9]I<]-UiT9wO7l#yph'JDbE=HDp,^abj$V9WRwe*8aGYăU"/ok(wPA+AScz#efh$*GYXt;TJ#dd\[f11^ov_kTJI2OV#CM'5f(zU]20?+(sD7IăU"S7*vq]b]x7H7-WoNqY3-jXiVJ4p[C^_'KpWLwBD0HgULgF0/Z1z8uNHVhk^fLrIăU"s08dsl*3o'uWfPV7HU2a6GZKOW\<cm95Ld6+%=%fndZnegr(+S+Ie'hVAhy)CR&ăU"ruw*n2ejj2YE,-_'&gsqT>knQLSX+3XP')?w6ZU.r-qLbng[F6Gu9.RUKDNc($zăU"pk[dqd<S/r?V2w8]N]w9;iOKN/&;d<DtY6<G:$>Loc>KImxwXg>>qxI^2u=OfAYăU"ns97qxgoK8Evn$;\UmuvfSjE[$&VCi;O(&a.=Q8TjZ(n)E[%\XjXmuV.%M[r/g$ăU"b9f3SgEMyVBA_li;E9YNL2m=M8m+[2_GnL3AS2f]Y4U]7/;Am*Sz:d2D5o[:wBZăU"qb41#r'v^qM6/.)<7yJt*&w2eGM\Ni*:,?:&jm)s/jR.%Np3<km(,i)qsEeWTflăU"CkU5<hsc,prq,\&1RK7?-<JtV$/'Jt)BF4(=\W9p2C4_*KPcT.MmsMp,sZKF>'oăU"3&#hg]*v=SmRQSZYD/xUOIuJ:DgB##2Z$,M-DriI$o3#;lKl&FI](VRHmU=zEG$ăU"B^Bg1RT;nkA5pl;/.b9TqORI<WQ%:_e?4=:'Nr[+uHNOB2H:LE?Q&X4YV#-2v$XăU"'?ii(gVTi+QaVxK'34(0?eY5bwnHJ]nFjE'k.5ns*f\Jo74><+eZHxBp)=X9+0YăU"HUs^29LB>fl61eHz(1P$aCc/2Zi])/qg9jFMFRH^a:/;jE,T/E7W[E1eCMGS[UcăU"JJE*Q.WVuUK7O0N%c^aXb2'LbYYf;UrHNA'5%XiI%C\1=%H+kQ'w3%W*Nq0>[T+ăU"1\OkL9/9N:9sU:?FxJLt+e2oi_]Y]:tu\.(o8\_%B<V09]QwlK[<Qd9r#g7Jc.&ăU":XLyBE2-48jw\C77Oo,?F1-EwR:Sj#.-EA^CLC,iCX5bRcyHk9X%<T)[FO&78O[ăU"B1eeI,e2?-g[3kOcmUj]bv')cBvq]L^cbu0J5n%.0OYvtzuemFuw9*8nGoL19z'ăU"jBJ3+;KUI%wL&++Mh&i+#%;$,3Wi0>7S#,4]7a^6;VFcV;B2<E:R(RS=\DIZPLIăU"0Xda:MVF3YQ%Kn7[-K'k'n-eco:*eN[:oK\&EASy$W)\EBDN5Df?y[_2TjaQkFYăU"^JZW-gewWPp7VN'?qDmc$-Z)\3b83_WP+tPtt-YLM/1T7Z+?,NKEPGC$0r7/7CEăU"f+*&[u>W/p?WZ7P?j*=f:1fi0stpw?6DW'ZGl-TJ;%,^BgACFn54dqH'b.i6]=MăU"6L_,j.cmSn;B2f&))ZrYPt'$5E;)O7Aio=g'r)*X.:j5[)G)vi>;R:Hw6[[4WweăU"G:R0Zi$br(=,y.W*2V>dablJ0<f:br6bQ8L34#>r+%.2K&+0X4ZQNYbY4G>>n%3ăU"dr1INAG>t#[U9rBp>\J]Zl2'14*3;:_6eYKSeNmU?^CG'*cqJM7d^$T7E;;;q*/ăU"Iac#61i/Ix>IG<oLAfY6\i1(K'IK^p9BP;Hb3aLA)s'^1W\MNkp=A&*Ik9Eqg.\ăU"3K]-J-P7Szb9P8Q,O9#o2^&wMZO5S#3kd-oIe\g%YY^E7kiaJ_*YaM+8fMXbsxCăU"D5m3K5jTOSV)NEOj5eER5E3Z?E^bMd,JEN\R]]C*3jH1EK9VbfvveR/69)45eMhăU":\jbQ8;]9>/O(e[D<Sv/b>qhv&;:Qe2SizmX&\/o11AoKm%T]PdWKvVlARUv;7CăU"sDF5u<pa7k1NY0jgZ*O6#NpdR+m?FSrwmCV+_b8PZ,m1H5jJ+R^ljbmPEJ+vKxYăU">+>dEE(BAE?+u)H%WACBle(sJRee\?'Cm#,5tp_CLU829G&l'Ujz11CLlT1U6L<ăU"4AmLsj_mpG/IPl^_cD6t0h(%[_9^O-tf1Is*73vGn_ssW/F=2+*)mu(/ERod*v)ăU"+HZOEIkW,Q(d'>7cuXUmPUnLqSOo_;#95ksa&\fFy3>8J]IR%f*Gjs#mL?Co(1săU"AAd_Ic*K:[ttbQ]PO0%8XrY\AJKm?dt(j-\Khao_sO\Uw(Kkin0->?Mq%E>VmTeăU"FD=5yR'd+JiB<1&oTb+bRE%jJ('DX6*P1Gd].EDzpg+bH$xDBJQ)e8UbW4Hb<5OăU"N\\*'KtZ:$rWNx4^Yd*gjtINm^8%\WCnfCja4>IOM1<''h[[g)[>-+#5ld$I,$4ăU"Et(\_])947w;LQu[B$pm$Hr'+2+u...0N0FGGtGl_Fk*0=Vr7LtGel$FhlW6FhuăU"WvtpdDaGi?iZ<lA^CbMZuqBb.LtnctLoeRul$HDr+Krki^z&(k-8Mv6_Fj5+gLYăU"DpdMuu6rlfTk.7MvusfT0?.uPYHu+D:qHc^3FN^lRA6#<KN?Zq'>f>3N-OdgSgoăU"+.k+w3sTu^r3AWP47=Hkn_>?O25ycYND7rJJ.ppke(,h;l6dgG*fRu3BOdi%(6^ăU"m_phvbn0\XldW=+?5B+KEHiG:lC%8+i+8.vTZ#6&$f\WD]DQPlo%Q++G;(THUN,ăU"\t4GDZQsPkoRf?*nBTpQ#fuvA^6RaTi4:dY5Mcl5Qk6+M6#L<KUZ4KHjGY>C58uăU"k+Jd^p-oPNbtq7NCq8Y+7H[SEq[<4ZRYDM=Yk%MUoKR^FwgBq5Z%AFMn7oVX4+kăU"vcbHd(FjZjtP.5G#)AAG<'x&up%()9%%%%-%>j*=ED2cxz%c&%%%%(%%%/%%%(găU"&kf%hjSuIfqTa:Fb;u(1SP6C6W8W%8mI7(6PiG1P$W-#Id%X%eE5P\$mI+AA*'XăU".iG$65fp7^X_<FDti0tf>%5GiVYqaCj_V=0uPdnt6v:/U#A3lrEJGammqKLbo-QăU"DRe;[nHU<Z>AW2+&%ldnI4oV'QhrpV<Z/Gams2vyyme-SfdrnI4Vugpt\ljiGAjăU"a.G5&O8FqT'*R4gUBgLBUR%X%di2\2$yj_<MxgoEPWQteN;>b8*FcG-'[K3q#Y4ăU"I[*SrpXtVgMD:YwS#OYFSj9idwP(5tD.&vWeR*K9Z#di2v]Air=Qm^)_M,kq8>9ăU"Jay#RrRu.+zg'jtPQeI7udu)Sa/cTrhM?(8h6k1?a:fAE>%uqxTZE__u;=i8vz#ăU"8,([0&ubQ*NX.j\?#;#orhE4l?re>4%up()%9%%%d-%g*]=Et5/m*8k[%%a7%%%ăU"/%#%%g&%kfhj%SgghVKLR=k;TaNie&bvuB?7/3Htw<,G\2.1Fpy0\W4e[%0MFCpăU"5Wsl\Ith=d=6BF9mc0CZO/0lHG.G5f-Hiu?DxuDYNr(NuxXwltNuXxudxuXYNq#ăU"N<uVxCrw.q4MNYB'f[AvQK;9)dsPCNeBtEdnHd8TNZ'x/Tg?*i[f5qtvLnMf?BNăU"^S#=<oZ7b=Z6Wcktf'rqeW<h*Hc0dKdzh4F=N/r1b7\LONHiYa5lNmMDnXfA$64ăU"fmBbU,0:8iP+*4Hh<miW\82$2iLdF397j2p__zc[TT.pWsx>XgnuzWxfhpy*tkdăU"8?iL>&fBXPj63rj;9^*KbE4nhD3WH?PJktpbUOP[-N_A9K6+o4r$fuzxx8tAcfHăU"WnBfgwAku;DxlzZw?w.0]S02FlkSQ,F:MwoCSk,kypi+>?5a$f/.KsItjm,o'EmăU"v=Prxj$'x:2UHG5S#^T..o<Yjbpe&<p/$LzYUCT?joIMpO>Jgiz$H;Lp(SsysrYăU"F2t<*nK2Vkb$ftvr4GpvL+,i5:$4iGoH/F8MPP55C[celuLS;35s;Gi^OlowI+lăU"a#gC]Bga<-Sxz22W?,n8bE17gtwk.6:;COIHP8(NkyCau_N&z3SZo+l$GEgJDGcăU"$^f;fmmoetS]:Nv0drdbZnSNPh(TdOh.S[82tl3YHmW5Y7>Kvpj?chU;2[dZPF\ăU"q,G(i,#THEWuQA+SpagWs?PWT4k2)bfqKPI>tpN\D#M75Q[7tmyjL[Ia.t_,Os\ăU"KaR2B]SXskiCjmIy5sAd;A$n^&$$Sa.Nw=Vv]2ewsZl%I#DLe$mZ<G/,Ke^=,9DăU"W7C0]c8nJ:uhn5jCvaf:yN</>#mO+YL=miT;KK#LPpl9lT$pnxOTdq%kOiGs^$QăU"bB.dfKks8nj$pq6EX1?yux88Q[/bhC:lal&+:4'R_zcC*pZv/CPt(<R#R.]2ccXăU"Q8>je28d]cPls6o&Ti4he1iLBX)F3ZbLcPp*HB7_R,.3H3[l[WMxd(I0*O89BxcăU"_&nfQn*w[lf^;nISg$'0jzmohm4$8+F&G.PqfVXY6/Vxp.6oiF>?2m7PIwj-tqzăU"tI3LsKm8n3K0_ipMTY/Iy)/cj$;pxDzR;0a)P(eL8;^+d[>h$6ybe\SfJpnvGS[ăU"LrI8Wo(a^h%C%QJ.nvn^xOp)>qLa3B9MvK-8+A-3_osf$src:n)DG<u_8N;K5nkăU"GIK$$<B:1l\pQ#.?dTJM(2,;N1(tB^oY1N,Pc:FdCSb>ALIM9n5c7Bc%Ju-OEnzăU"uipE.*v+Kw8;f1CTCF-4yk=OiY8NheTUmY$8rO9L[BP->*gjd]x^DMA,r+JnxH%ăU"28RgDNEbt$2*)QaoQ$q'nbsn6fEHcQB2PY#Oye&]Ecti&i>7:ZdWm8<\fQ99rR\ăU";-jgzH2Pq)+]rSsh\qcZ6Cm8;j^IFaAd8-\*3Dt-X5w\Xj3CvA&;cy5aOIaou[jăU"u=V6Ob(eX'<2+BkX/<X&->RLuz.xkDC0l40-4nD<Rcf'I]x'BbHQUgw*qMifdNdăU":1iBJmd\joqB,^wOL,URBeN*J4$,Wm1rwH)fL\Xh1+LyK;<[GGLRenge?P-[:X,ăU"DR&,j_mMlIZb'Q<^$8HJ%ghRf$8,)ma8IIs8Bf&s_1>[PwsdpF6Nh?-#o3LQd,/ăU"l:eq0f=3wdItxCMo5HpN%CHK7</k59xrV$IJue\[OdV*65H?r*0I<0FqcMphvG]ăU"-)loJGn]MI>55$bYmKUd:3XF:(PJx6pdiNw[e#N\-RX:/s^]<<p_2rY[eIxn/)VăU"tq7sRZusF>WOrS\-c5F^<1y.8GiiFONSyf/.\js;h,KkwkXlIPl)_t[l\l1PL4DăU"$]6&J<E[aa]:cqfS>q_\hZ5&u0Uo^_-fU3s_*_]WGr7n;On[XxLTR[vl:3vFZonăU"x>'/Vh_jz?k7/?soT-UkbcZk6UqSI&AvBs(aVNa/Pc:F5LX6R.d^:va4:MpPEM9ăU">>v><XZ7.?&,Jma0][,WKBhSW4APO0U&(5aSJh*OCN1*,d:-_EUj2mu%x%;oO,*ăU"GFkR^R;yGP]p>F2$#XM_u_R)rj=.cZQu'<P.0eO3[XG\L7r)wFJEXEdvNorQm^TăU"Zy=MmYc='$>+TDd+Dd<Srs]jodpdDn.zw?/1WMTHz\W#_ubmceA.4b^i#w_kv/căEND SUBăSUB V3ăU"Md=\\W[27y6]?LcaI*okB3BHa2QGVC[VCMLM#0[t6u&WsZUw1TYX)>FfQKI>K5UăU":2:1y78>I4,1<CA=VMJZRN4<vdXAvJOiDLOcv7V4KBUEBG^)7%X3#[Nabdu3ynbăU",>D^'4a&sCdbkH,<mme;mlWTFwO4*pAcEl9dn';ttJH%Wiz>1,1.mzDm16x2(I3ăU"#qhxeeW2?gI9?$DJeHZ3$f2x-3uxHABKkp;_FR,qrMV$F&14r-QtQH*l49u%>t_ăU"LPaCfxtoXUj=&fLi$vaeRU2KIX5+Yma&v7:>d=r2IWe$QOw%MKwu(b5PbgQ)8b7ăU"jhf*Hd>Z1AJ_(L=P51HW5fOP$$bT$,q?6cxq^=VmUI^jk]M'a\LRC(oc-:#UZb(ăU"[x&wyA6\6-\KOs\Kdba5t]tS_LLg'Z?e:^Iv64zB2eYbMW8>+d/GZJOf-u,NIn+ăU"e.c4X6vG7QF)IV=sT]LJ>_0#GUJ/-kyO.l;lhI/.?H13nXdGBA1O^2K*68f#Q'3ăU"V)5)D5MB3GoE;[<AnOXNxSFtniQ6M.M&%Y7;iWtT*\_F4)eX?f9sCK#:gkVVT;LăU"dP.05]ZTE+70cu(VGPkMsMcWmiZT7#jW^?\MT5C4wK3oijm^)qvTC[ms_9)=9[IăU":??MA1F9=%8]yn)&We1d8$mkQ;c[RrHR+AGgcm[?+&B]5%6&im;UlUX2gd9To/UăU"ohg:0aXrXp8?kZXWLMg.^Rd,MGCfQRQsWnS1TU7$8b_)nl2D&d.X;3SoxXcKKX7ăU"l5WJfQkZYmY/aJ&F'k'i(o$-$u3ZH^>O,^dS4:PO15=TnD[%&+=O;a1go>z7A67ăU"Or6'?JXde:Z/Ct[zHdVU$CaGfZk*brY78YsSC<\ubTT%ZQTQ&5*\tBe])yHl_b(ăU"Mh8,?)QvTl5r,Fw2_iW''uu2%.8M<AxKWLh5i?YsuI]e7mikSAT8>QA2q1>j)TOăU"Vz8)Hp6E(5p*rT\'O-.uDJoc?st88[ZMFtdbj#bs+sb#c?$Zok0W0I;V\A]*R<kăU"eo_KT+J=pAtz'iIfogizf_Nkz)PHA5WmqD8as#sd]jFj1=9L]mMq:,B-h&wrT6GăU"Prl?i9rFv\-GzL,U4Eo^2iUJs'A2>7C*=pT3KNF$nWe1$cRC?Dx&BW4sr]vF\-eăU"t^kMhf9AP^]&j:5E.)w,<W.[tf33O5'+iaOWG#>aSAjtkMqt2]R*jxlXcC/XGKnăU"18-LQ&m\C[bj^q#oXM:#denYwL,\HXfFmLtrId\8u+R,4Uh>>HkEr$H\kn9V?DZăU"iIj/8gOr2QqN3HlG7tLKu&<hb=T;m#\s$BbKlEPY8e#FfdteM/BSn;$?cRI&%^năU"E[Qs%IeI6^5Ki_P%kd1C]U[80dbDJYKv\BcM>'93son:iO_rq%/qkmKy+l%$)O+ăU"6^PGT$r^+ueSm[fT?A6s]6Ho'S86DM'9k9>Q^W2G%4'PA6)LOphjVxDxTb4Y3JbăU"Q/7*EOL=T$A9seUGTmJN&)mywMpLfGiWg&AfV-6K,fE_d^Ys*v9qh]u%5y&a-btăU"mXm1OdpHlk4z_<cZ?.UiI+H56Ke5Q('5XCP3z4>%n)N2<ehlRE_Zh5dpef$dx0WăU"\?<o=#cjm:Ts-1SXkJBs>A&+O\Hh6G>W^7K[$bkg%6cNQlE4qZB^>6K:wj8p9AjăU"EkI.b<WNA$tiRdkfV?o%P]CieZI6.EJB+G..7r4C3pcVdII+CtJ7*5B3IlSP6J?ăU"l6:?gn],']=9=(1P%wAI-D9to[BOi(k(KLiYHo20C^/RX\C-1P3BqdIkSw+a3UMăU"9^Pd#NE5>Wc6WcBk,L/pHTv*S*L1,X>MF$6v'4F?p]9s;N>]>fo.;?rmhw9;5_8ăU"cvVW47%p5IQz3Qj4_)Uk2CZkvavLCOg>3]=6<*u=:k+g-(5?hlWMJachQkKXVVXăU"f9eHwkj%nEAUrTG5bcDE)Er;pLIMUlY)hRwD-.uC85B%<;SmZ&jn2g%7dLFR'G*ăU"[qFJRVLcq]4*m97R^DzkUqJc6:QlGXH;g>%z;Ht_B#/r-:J?j._NX$.X80#=zFWăU"t/g-qWnBbQg^6D^3EJ#XmG%xnuf?6K/nJ%X$n,0a4RGGR._Xudea'J97L\3BnajăU"q8t1Btc-YlH<FrK,eJK6xgF7ziho+2$GPr[d\Ul;shb(<6L/G_Or1XTX%Fol;IDăU"24kkOD:>:m4s\*>vQ;&8eSxQ#Ma'--m[#>d)MOAVoRq6ciZsQlS(cBfL3I-'f;RăU"SQyRd:m$osJLzf.FhN3,dwy^>ey<5$aSdt.JLvLQV(V='gBhy_M9(rCQHIf8\4*ăU"L,VQ23$s1JK(O2+mObMXEdDHAqr6qd+C=C2#J0e>'I3E%mi]DbZwIy^GrR;1$^\ăU"GpJu*SmaZWN0LGFE)gv27Tq5nQb1X_R6p?8R-DKJK)fa55E_)/L,1=]qb]Zru[căU"d4=8glevL^ET$4b3u2vSlD(+PsnqQ'x?$Rl$2%EYF;QPU^%)iCXBc?81^uLGQi=ăU"p%<o(D&E/UsJItIFiVm*CjN6g#>i95<YX%gxb>UoW%dQoJ;sXFH;*Fhpiah>wjVăU"kWhS<OQuwwLx&k9L^7%b<5)-?9sPsU+#CxJr(JENN50E8FUMI*_--CtX$I2]+MxăU"0jfsmtb=f7^P/rs7Run\scQb<V5Z4s-YE<ikW7)J.kt]DatHUq?32rWZY2VRfUMăU"3)L.I_y^=9-W(?r'i)H<#mNAGlgkL20t[L)^+jt9tQmlmm)jYNA+Ow42%3V4Q&WăU"tD?\jCR,$Z(FMtc/CHEC:slk^_nkn-k>ehK8o_tjvO?xkhh2ebr2Rj4c)cLi*/1ăU"$kPNpyH-T0UC$[nHh&H[:s4bI#BGr[S5o&ocJO<KTXSrY,eQ7kwelZu]W?P-F)6ăU"-DM54P)-jIdyY:Fg%kw?nXT^9_1aF+SnIW09Uobt&WNZ<9HDj8,MY2;[sMm#c%VăU".EWrgB-6&/CiP]tKtDi-h1r>=xkc[-9Om^ywp/U1lrs_pB[AUbXHn3U2D/SHde,ăU"BIvx2IKWAl9r#;D(E9vUauFjg=&5lnf<#freh5'+I2dvC_?lqM,z(oa7wv8\XykăU"Bf=ZQ]>JLOoC;F%]&YLMOOtI^K*+WnIOM*U2_7%gE2c?NiXyCJB\3r0(L&Q9kNAăU"UOT5HPzDu=5+A5Vs^o\k0>,mlSEVD(6qiV$Y&ki3lCdEj5zZdepHSB1v2jJ2YhTăU"F#FXGBF7Y9&sT6.cAkON>t=elH\c(4=)5aAJ8?X$V-z44_zFhPQH>9,GWQzR8[4ăU"a2k'+D]sI]w%^s]ma2U?Jq2,Jvoi\LW6,E-X3qL+jJ^9zVd9cvO#_J9aSZQ45wBăU"Vu34Qn'c5oFS'A12>=vbq_ys*W9VT?=0=PLhbs)_JQ,*e'Am0$#j?<(kqfiJN3wăU"bn$<)-]97y?X3J[MN]4_dST;#?sf?P.V2RJ_9lB2H<5XYrM3+E\*?hOAYh4=7bdăU"hBK(7w$,mmakB$MD2RVa?]KZ*QD?tPu&n^DZTqs?J*%M)F4-M9+?n?%h?a3_+XFăU"_l((.BwBlEa4=KKK2lD]:F8WbTJD*5ki$1.T,O26[)3qEf3]-dQh:Gv#HJ>)dBiăU"N;IdjzIkdsv_7:ji')k'_,8gZi1VvZ>$c)/j*k4?'9GVk:MOjeFoD;O4$-aEbcFăU"#-5(]UVE#1-*6(jT\Q5#<X=)a#Ib:8UydsRmBv3gTf9E,12ojTFuea*oKU0W)vJăU"irF3aQ#Ga-XVl5OhX'T3:t4gnei,2n.G2ujKGY_H_<Sv#rH:mirK(iclj])9Kj(ăU"jUCs'e%>ij9TgI6>=e7s:.^B%M06-]%J3H.uj-tBp1XP9a5D2e4PaY3MMg8RSa'ăU"H.'(/rp8axPiXa4.M7XLmGRS\6373K_trSW;Tg=8d6TY=X.-kR3sU4ECohlp4DBăU"I%8,x-<+e2-CG+BTKG6+fh,R07N(o[rR-O+3;]Br>&aKslH;=-qV^&Jpl\WClQ;ăU"[5o(W.5be$VzBW>T*320wq%X2v[gBFr%76fok*o=_HOz;#]?FW#dlLahOgh)QbaăU"xk8iGfl[ni9&k*;[Q+'3%(M(z&fXPnU3;yCb9:Vjk;qPP1$tdYPD#lvjbqV,]j>ăU"%a71cm.^7knjQ^Kx,/E%t?E(8IK8t.iqN$4F36N$r2\c>e1c22lN6_%faU466k,ăU"^NJO>dPWbY95XGV&:OC&m'4+49:\Zg%B[86C\KDW9'l5\q3(G0kz?K=CmP8IFTNăU"6'uH'ns>Ne5ha+Z7Pr2&3%RV0)mp;ZfQKDX*lNT<%'GJ$QL-?FHBN&&5z1o31-,ăU"X2WPDxW2kYJMK26p^e&gI7mko8l.<DX><_FnQ='#Fa&rDqU/IU'.&Ejsb%D6(5_ăU"__WkV5.d][a_i,%a/J=ID>/<QpSoLD+6'PVNqDHR)jXvMN&[/b5COPx2UY\e_bmăU">QFDyLb_B-)cdLc0oL'aLjsHPWp<1A1<HBkiT0NLV4Z6]%eR:[gQpi3ras:b0GGăU"29mp;P]ntVP&8cVo^v((LvSDXWIM*&*[3Y=bi<qC6tg'6QW%fJX_m.YAD4i.pYyăU"g*q0K^GP2,4a,8+7YSqwB2e6y^>m]k,tc,#&#,?js,:kONIKC^5g^^2vOL^\2$\ăU"l=tpk#]*tP%(_(D\%4Cod-7Unr.$cIZ'd:3OzX3P-<?[7p,$wA-Y+y?aRUu1=E%ăU":\z1\M:WX3i??46C>q.4jKqWhE+*mJ6;^<a>slEbnB&rhPl/O^Y?7Fj(+jEywuYăU"d6DFY,'MjC\CS;z[Gu?N.m>]^GwX%RdOt6AT?<<SMqtMd'AIV>#'I\/o:IgR15%ăU"K>lZk,C?E(N.z]=_:s]H'OtvYqAq8hf1W2$0N_>$C_dAd3K=TzT,Tm-+lhUA?2năU"_9=LBA6X:V<ON0S\2lsCB#K[*2A8j6F$3/FIl,X(cPVAKZf0jOhQ;x^E4i(l(>făU"sCXs/gby#6(I6/jT&7O,mvj.cV]Pluj>%-r='O*+2'vX$,0AS#:#bnZ3J7SQp6EăU"/b(]ebYiJ<n]&(OGk2#3#9k$'z38Pbb_'8yelLuz=rT-0KMn6E%t-:Jl:KtsS#PăU"PenfbPK?Q(qx6p%s>5Gn8[J:ip*)Aq-EN5%v_$\GlZI00iMBKV(=eN4q%\XoJK5ăU"Cl\tw=EEcBU$f5f_]l^ND1ua'Ti>L,^;^w;2Ugk>KRK,b'C+baqHDbA6:F9abUgăU"KQs92E3boWPh]*<c>Q(ohO(+7R*l(3*#Src\,qr]uL;nq,P[7,$3U\^H=$([peQăU"8o-dg/jdFSaVw)0R^8wU*CA$'[fc7]32w#-LdT;Ev7v9]$=tg8i_8'*]1J;K%ymăU"kS2v,%3d234GW>eI8-<d\:hN&oJ&;]dEXRmeCyn1HD?+V*qT-2?;9,eAVP]tkDWăU"E7o&rKa,X#X^9JUqT4.kz,ZKm+(Y:#6Q4aEoaoY)+>mt,tQZ3/G.4*$E]Jr[%AnăU"ihlgke9;(W6$24,FgJJ?Z'>lmqvqcY?T>XfqLt?l%nYT.hNQ+^[8:_,N\I4/)$TăU"bx9?>&kfRaX[Y&$>vYT=,H*u'MJLw>guA3Vg,f5pQR,CU2yW:uM-M<>N/ZD6\:VăU"xd663-NV-]tA,4^yST:c'=_<A,tS.aR;;WEEYWNaIOE5PfZ,LOC5u%IMiAcXXR1ăU"rU73huLtEZ&Ll&/>B5Sr3V3na&oNObtDnvx^cX9L(#iDjQ_i4StefQuHsA)GI2<ăU"5dcJZW'<(V2[H8*vNWX$QJEQHUEnbPv+MevLzc3iDvi2H$WtSGeWL;r-j1XbpL7ăU"hO+x8Z#(u(r5UlaGhBz$qp1Nrc5,onHGil))%q8lMZaSET>&SKK0c[7Fc%Rp'HsăU"=DgS%(bX=B:C1MEja],wt5AECYG&W=MJ\(QhviA[_M]xcX).zyDz^pS09^nw0Y\ăU"Ooxv#mG6ZVGzk$qIK^.'C)$SUMOEJ)7\kPqih+Z3Jw518\b.6#B>,t]Kuh?U^klăU"Wt]fUKoYV,mH#bbj.wc'yioW%mc&,DKQ]fTI/IY3+bn,wxZJ\2*HHpvL=UHk;URăU"]bHO:q_tSIHjooalr,3aU+O%6iy_<c0VP3C^1b=0a>v'C]jrTC[uP7[:,+[*BP6ăU"Tty'lDL.K^/A]p5hCiXvTow^Unn;h<sOp]v=mV?k[qSZ(b7<g#Grn6-e-H7./]0ăU"qgo[e91o'C#Z%acW5k60x]b[cmuPLvyj3vHGy^nmIMS8vR.D5Ied^:1H$s]]g%]ăU"MjhO9$Dv#MYr8]%v__'2MG=m>Yg>5B_.ah>.+I1);DGojb=Jc4^[4h#pGt+$-1CăU"e=O-ho]]=b?$OBNLK.DIx?pF8\l^=fwI2Q_F<_*hepa9HrP[wUoO8GUA5s\O+&oăU"0$3BVq:w)UF;P3NiBsT?>&3BAIVt['[q$8KZks]YeI[;ANJEjq77XK#)M2VNP\UăU"\vC(,#/M?SSKm1$t'DlAN;;z0bw58_n\(rp^r\/iRSx0r5#<1Tc%EiD/i/s)Gd4ăU"b<8;e(DnA&aBL[4o#1-ulqD6k\6?ZL[Zh=bYYi6E*pc*Zva%uAuBH^ICEOZ.pZ2ăU",K,F3k:BSWCdkhf>[UZ,YV<8\\u_TfVPLsTt>5g68K6KW7wRsEQoIl#(>m0sC3LăU"R]t96(t4D/BGXmWl__0n<UT&a'SgpDsgBD[Mc'ez;2]R0'2Av(?91v&l.:XBR$oăU"mksY\sm=_vO]]a/dvJEl_dyWIxm5'iiZH>X^E7n(I$F7(VPB<N1OmuhOD7jnOHdăU"E>5zy39Ea,k#YPO4OT/f[lCy=OF=htM>?o.c1(X5$aMQ=*;PW(N8ASuIp+t2^f.ăU"yULOFU&alP)=u\Eq=(WKsd>3=(Gg^4dXe&k*C,fH%0.')Qb'eT]vc/ggJP?(7+făU"RnhO9&#:YkgN-L_h\pWs6l#KgWD:4B6Kv1TATD3r#=+IOJ#m8VK1i=a'hsT5kEXăU"8',&z_ZpLcPQg;f[V-Xo(?7Md__>7h+9AuK-5djYF)/zyXKCHI.NrF0n0i^GC8wăU"zG2+xuF^P)f>Z9PF/Pepdg6pz8ft8,Y$x.a<lg=(fpo.$0YxKlp:rW>z?,5)->OăU"in-6YpVnfdk[5Sa]9MPLK$OAp/A7IAFK3H#?JkYsYSqJGUKFdxrbLYJ.Ohsa'8măU"h7#D$4v3(E3kSVugdalSs(eRijwR3dk,qLmF#t?'(9O[h-wDuvml3g;Wm463TsKăU"FaM&;IdwnaabOrXQ]Y22z,8,(kJ]3\idKH_jX#8(w<CZlv)f%<D<oG#hP?7o0qOăU"0';aQpX?sr:3(ssF=S&e=L5s+vNJX#bE[7Ll'R8PLTfLT[P16iGU8dqUfXRE[u9ăU"tVXM='iIQpt3++miSvYz8]REO'T8r960rHU*pIhuVO]2:4nzX^<&^X[6$6pJBB:ăU"WIpoQ]KG#,iB7Eb6cv;'S9D5eX&mHDMcgzmeK:)L[<XRk=flIXPAIlk>MerMdPMăU"WeB=t9ABn;BB6-pd?>XkY5]4A58VWL/dW,+*FhAS-4S]Tj5(f^qXf6ee+HX)DqXăU"\F3/7U:9m_q:e+T5Bw5aZwAU-k>c2d:6.N<(RJDIa,f:2e:Pa%yhSY'p-K8ZB3păU"y;:n#Y]O<7(?*pqjr#J6DtkS+l\WX4VFSBI2WdjXE4)f,g4Af0Jh(1WUd62)=-răU">?;;3x=gJC+dL+;/$fjVGJ+9$i//h=wEUf=3cX^82PLg)j>K48PLn\]-6hszmmRăU"XHg$eU,6Np5rdUGb,e/l^N=s&f$C4pA<77<a(rGVQU&B\m[v8rB92(+kV10on\:ăU"O2+C0s75AY77#&3uf9,jF2\+uq_F\AeR9'Iah(W=Uk#t[tT?uWsOG47zy$E$A1lăU"s5G)d.2CQ<+:8HbK*lQIS,DW4P6MoU^g0Y?lYL1i#M;LZ'R3[J,;q<:7AM'$l+[ăU"(e\aWvULRns<8_wyu<4cPuB1+Adz6RP?(2Dll^8^M(^pZulFjapNO,JL9UVUltIăU"^#c3ugc,kZTU6lI&JJZKYJI0p)3W?8EwK<PSgJe/PJ_gN'c?$n-*??%UaX#WYgrăU"hR[wY,<i<x&^7Kh8L2lg?wDQve1LLF60n=AX?*q*6iRR0T^(v1Gswm(dmb%Q?vaăU"VuG*25lQ9xF-dXC2I*$%bNPg#kw+:VCihnn+tbK:.5oQ>CGo7woF.0DWv>3D1CGăU"R&q_s'^<36vE;I2v1rtCjMe=+c.0\lSEQN$<(h.Ke\I.',oCPF^_r+#W7_k,u'2ăU"0H7gRU8-1Nq'dtqOcn6fUBmkp(cgau*Vkzn8rkK+b/_<mi&3&.A+vHvYn5kU1R#ăU"5UUU]AO7l[<20W%-P;YUUxzqKw^%;g798hI^s]bojYmgHq5ghJXqkE9_P^UKeR$ăU"9hQl\0=XFB6vW9C[#4OkaScmV-3u+PU6Lo5-dtu.V#=eXDv:9lNF^%'iFxJKEj)ăU"RyuKhl9DbSMSVKX=R9nTW$dwL&J,IE$_eg^:2Bp2^yIXzM*n%ll+oN)+F7C[baqăU"6%.l]GgoLf90\U7y;sA6)#ebYm'6EJsa7[&7uhL#4903ANmkdUh<>M8WJK4A=ugăU"wOT>Ct=7&r'qQp$kE&i[?r;:USUTt3SrSZ$$e]b6ON2(,12n3ZB6.JMAtl(5u9AăU"YDM1Pvp\#)LypXRBcqA($l0OrT%RdY.xglD5j#/5X'&WTq^[Skh2Cp?q&IUH#.uăU"Pzqc\OXCZ3/kfMt5>lb\*Ma\yp9=e24C1RL_Sdh%gBLa6]r[aM)8T$rr5[fdQSsăU"$If$kTGZEO>t]40BDfELj/Q9O^3%$N]h_+pJ-db.(A6JeTp.lFU*7bn'L3hep'WăU"$dPLXiDm8CjzwK>RXj1Fq*?Ei59F3'D'a$[\OY<i,b8FP0oIO_DZ_'62?nBj1hrăU"v8+1>pg_>83uKr:gqV2;?&R]qn2;G4&4lmCZ$w%D3$tpTE<?FYwNoWz6XUjL.ldăU".T=.RQyFgLxT5^>.SWDpe24(J.'$D^TPx0P7(4Py)r=^xxHDJ%L26tXN4SB/$uCăU"5rWQtAf?d%PE1HNp/Jrp50]Wjk(KZu,eZJ))xT:B6f#wBiZB^hhzDr2\K-k,pz(ăU"'A[e$L%*GE0C5#7?hKHJnk=#BI=Bgev=7AJkon*)3fchcV&Anp*%(vK<'1WrKP/ăU",_O=KTkkWI^ZCHhD:P74rqq/5LJ)eWwIP;gqy7%#0IoS3RR;?Cj=JZl=)Z]Y5L+ăU"FWAQ?6S[dV='),rbL-9TWIT9F9$Tu\oW[<oAB:9IzP765GQUoL5hzF:n1YFXmdkăU"d6sW\UipWH,W>laBZiYx>3T%u,9395F_1OeaqrlUkBr9R\dE%iUH6Q3(-(kLQ3MăU"[X_;x_\M3TZHl+^9<KC8b$X:1c&F7qL82&X\8k626AOp]co_*TS1;BhiW&at-o1ăU"]m.n)f[C.h=.OAs=vsp-Bv3m7,KZCPV3RgNN)Fevy+__My.FFp]cj:.A,KgCnAcăU",7Ff?1)f%NCrb4>2D1pE-EIJ-+E0YMAjxEFCEBn=,[bxU&pTVZqF&:sH&URiELVăU"kM-kH)t#hv_GVRv9##>Ym/Vawl35g,Egk$OU.+j=6/RXyO-h:]7,OX+l=U%t1oWăU"f4fU6RP0/=OHBZ9[gS3f+4e\8uh_[i#G%TRK;<a8g[8l^v>a&+xsYeZbDc?Itg#ăU"1K-P:]c3dg4E?KDZ*SRwKH72M^-Md::$7o6Z8*Xw_nKZMQCuQnTpj$cba$<ojyNăU"8-cW9V+R[0)'n^ehm,5/fT5)0,,uUo3nT(b-QY,tb&qCm?Tb3mkT<xuNBe=E4H-ăU"2HG^D9vW.tI'*Z?KA<dm#Lue?].(K435or(Q[Ba>M+FQfSd$HlTr7Gk)Q*C:a?oăU"_[M$p6Jazh:':3Yjk;Q0,qNxw8<2u$C(TsFT=DrIIrbyQ4m.i[19Bb_qX9T+w&xăU"E_O2.6z13L&5wuvGaKMymQ6S5y>J;6yHc&:a+qLo:>XpzkZu;.6HmkFfBga<\hlăU"dR%2#l(T&c03v,JBp+;A00svsQnMEk>2.8Jo6S^NGsTOjJ.Lz)1vJ8(e9l,a>HYăU"\9lHvLpf>?\Z5ccPCQUvjJ/.?uj5ETExuXQS$6TVatq&$nB<0[rsKRcrokDq3$LăU"Q2DoO[vWQkimmT:YJXe2oL&x309Y$>9(D.4c7D/Tl0K5a9wcx^^oWJ3$Z_z()j\ăU"/8LHXU>fi+xY>TV<HvoB6i41r/V(NP:$((7(Q*uhvf4z=^lm34P5,[$XW35:aY(ăU")M4]rtDa8A7xsX>Ggz?W5?B9%X%/K.:h1OgP>p-HTO8BvIn8raJw6eU=LgrOw5măU"XCsPljw:4s?IHp[u?u.\B&_^fVNkj>GI$<z#RxwWQj.)NWKbdIEDWy#<M;mL3CzăU"Eo,q8JghajEu2oElQ7$sX22LF*r^Ok\E=Uv:^\6iMTbm1$G91s3n^VIL(dk,j0iăU"O6_Gtm;5NOK\C&Wc(XNAkVf+H;gsxXlARcHH\5pMH^*bJzE1jW45S(I(*0TN.(^ăU"be-rG+=EWlba*aLUKJo43Y)SB-LLnKWdhs>nN=0NZdtm3_c_W6rr)y&bA>etse/ăU"gs2P&gs&Lj49WZ#sui'h;Y2BEgd2mWbb%X8Oi,)2DJ2ee0MZ)jL/vmY$Z5a(t:iăU"M)\EuQFKx5OD%b.7GungHN+:%*N;T0L_Yvf]rCit#[.pz(:IYweJtYgFdl8&rsFăU"e9\-\4#1XnD<Mg'9\%fb\.Ih4YEjgKY(r69]3gBNk1rL+&;d5v<i<7e1r5&m=R/ăU"^giFeNh%:k\x5:T60<Ep:w](#eo++IH1$HUgscn\m7CasG9w.;jnxDDkMVlemcXăU"agJbM64K,HP;z\AufKu,nUCSI4,/\l)[tWu_IYsTwSD\XD1=I<]INyJ,l*Exp>măU"qW;q/,q7]rKYXXCCwx)Fnbq8u4/ZkglpUZD4Ts,Pt)yctdld[75$vfaAof0tkNPăU"Es_m:BtHcOXpd9Pp'NP%igSHRb6Hy%j[K[7Bowd2nT^R7o'hXS+=tQ7JF=U]p->ăU"t1YGk3nlf0.aaBHcT<_$VElvB7GAwAQwhkP%pEH%P43-eMds?.DdO^,UC0QIM,făU"VsUhmSh8AOfGMQnslhN^d0s=B$GuT,l1&[]*;9SnDWeZiB7jVXmJ[XWi#SA'f4lăU";#)&YYg8Iz+>4U6k$cl_i>0bp(k;RUYq'ck)jN_rP2Pv-0Qhnlp?o<,rMRL^kZHăU"j'F6HCkL2zFl+8=(3wK7YEhG<c#7hqlAMfHrppHgob*DFil&1lk9hRDqZ[Gns3făU"bGfX,i%jveK.^^44WGhzuMBtmo5Lq5;D[EhJ6%EOcSGlt()ujLFmtkJo<01F5?TăU"o7\JAcnCt7/,bZT06'WDVhqVdK.HDj19GL4RyOVmgLnqF6mGX=<YQLhJ'OapMboăU"psr%cU:PZNF_Gm0W2n+^V#,c_Z6DjLzz6.i?-1_sD,fnW%E3xXnE0<-29cyVm<răU"msejglhO8n]_botH0\7I'Xg(Tso#[>YYGUSL$4EnE-6HU]5lW0PrQXLlmTN6T=9ăU"'fmb1ho]i_ZBQ_5jF4$.*MO_;ICb(Ym[.,]/nL$B.[=8jaPb0_VS,3HCB?Pbs?^ăU"FNX=VC_Lis:X7T5tffna.ca=bl=Lu>YAv&HPjR?spaM?<O6H?F;J'E8Q8S1C;,oăU"TPokaN05zuIcP4kznk2.ot\Hz?8:>x\)V;II?HIWp[X3xgJMZ0wuSnGR4Vk<:kUăU"brfWN6FIas_J/X/1QCWn0HU3Y<pVuM6(n.ht^:3R$OS_*.kz#&.K-Me4j7SEn63ăU"no8f++HH?E]JjEd\[X(T$1jj*VkRI81q(=1TZeFG3Nk7c?A)KGIWa,gV,GeXWheăU"#^*,b$mr\6KqhFWb?uQOmky\3?P]i*M-9b,f\N&l=nYkf1H/R.-c&cc3JqO<p((ăU"<xAh):d;mQNlMq6hGfG(AHlJq,la#5W%Nq7gV]&-3M%kKWdfU59Nv&N0)SZb#^tăU"Hgi6fgjb#];*>m83qHJhnCr=X$7pB'W64dl=SDLrriu(D:e_S=_*g1kDa]7JG8JăU"KChEl?Jf*p$URX]:$$s*ga%oQSp;J#7'MXmgn/V*N*:]^cqt&,.vx4pg^Jkq^m*ăU"MRNq/Z(TkaTZV8]7c>/lACmjrhOimUV?VdMUOPMJjN\jJdp26-nqPD3[gupBsgGăU"1Aa[2sOTtEcb/)Lmq?>5\U;6]F2FK/nnmK*$yetK7d%,nkeO/X=tC0:qW_2jL17ăU"qrfRt<*MI>.,Ri+K-U)sCwIay4zTrshjmKo+Q[qLSr^pBF29BQ0H;#tAqE<k:n<ăU")pWW&FkH%nOjA1Q**#Y]2;&DHykW1d6)5sfAoNT#*1-XgD1>2R)<fMpsg3\nsf:ăU")<XXt\)rfPy+;cXC5(V7c2Le.kL8s[BxFVIiFYJ<ZJ/bIG6GN0a#?AXP'6bClv4ăU"zSDV>*5ni,Jgk8HA4Q51_PJpXkcj'l&3*JS[DCEPMSgq;Bi(y:5bqOQp0,s5f,&ăU"j1lTXd*^Q<%pq>UNG?3aO3>O,l:kmVne;PK/<ygr.<-f/t;&POfA)5rFIXswj6/ăU"FpHV)3X2l$euwff*]vFc1,t%4RmtXAH1,nV?Ut*ua:Nt16lHV>+Gi-OFp0yPo4;ăU"ix0rx:'F,lCpsH6ZgX?ZLt3Kj3:nqRL\Vv&Q5=>Gt448R6uCY0dQ+tLrbs#RrRnăU"2lg)tnMoVLs>2F1zCjaEe#xi>8dk0l&BqhRE8a5k6EIrVDOXz;k.ZLC3'KedIO:ăU"IijqA]=8,eRKTv66b$XTLLfM5/0oR1S3<2kbYm]qxS+tTP,RfY*TUqTUur'0tGXăU"4'sQ7w[L%g[H7#*+M.Lt_)=:w0#Fs$f-/7^VHW)9U2o.btyTAnE<u4t<Dx4d0<?ăEND SUBăSUB V4ăU"jWRK6TSG.*$>F5gJI<mDLxInGBcxKDEt+%t6g^B,/dszD6t'PcsH6Bg2;eL\5GUăU"(VY;LOUdAXZ.BG;24ZMfskRauH<fk/n7I\b;aMF>n$P_sC1ak0xW$G\cgfgx74MăU"F'L\SxhE-G^lB[fwNEdg9-rQQ:Lu=MLa4i8mLL',*0I5=F#HLl,KtPEkC3XBmW[ăU"\Q01<GQV6MqnttWr>[_&pe7[J-NYsj0M+=hDqQWVli(Jx/kLsDAX:\D6;V5^f],ăU"R]EL^J^xJnW2]]JoFs,JX8vWei50n2*a)/NW96P\AnJQlJeh>#gV^gVCM?*GZaqăU"s76FlGY2hzcW1j_Nm_/-nk643YC0g<$<O/=^cr5vpXxs$jg?fB*g7mfZa4V;rd$ăU"A?3;,>eg-q0[r/VQ,p$?Ddu/%ZSm[EM=p\,X_,7exjL,iN-nVDq8/0ig$AkqXqNăU")Xn<hdF#T6o_jQI)BBm1yZu\/<pRQOio.1RD=5\LFP4W^iWJTSeqBJ9o_>W'Ah[ăU"QVshew7lSXCMrUnkL=uCB$PPd7?1lY'TS<TOU9MY8?j^x88FrmsqI9renJ$QB*măU"1N/$-2\*PZWJxbUV>)O6Fw,IUBo%hKahM0u%Y&/Z<.I/RV?X.0>[D'>K[bKT#;SăU"Whl/lPVxkKce_TgNlqTSbe-ZoLrQsklrT[&UpB0]EO8aKu_GqR>qJpJO=VcRe;;ăU"pI=GaWhle(w6k^S$+q[gLs_a\(D^5JLq:&=MrVUfN0tA]nSMIECACM=V[t<YRcaăU"%f,7D9$PG>aIf0($vb]H/nr<BLidnob.\-uS$_;j[t6?U^&35AtS28oI&h?jo0<ăU"gPeu8la$BaANK4Se;v_<cANWkCWe+0,jaQUki;l.n#J1#E3&eUN3r1nh=:47AO;ăU"TVqot,vlEuWf-Jt4cneahC#O]=:<8td:P>fKLL.fwnoPSN3sp)S1W.UrBVYmCe9ăU"$_k0&p2GIYIp9lwP[BK*lA9^7iv0gFEv:WsTT3_4(\.+.'RRcl2Txeb<$%iit*]ăU"]JAaH.lj8%0MdC*&URR34T;q*\lW/]C5D6<XJ*X2t0[LWxH=sJ#Z[qNQh=$d1oiăU"?^7,Y(Bp1;1z%ma._Yl%dHHcS#v4m+ImdRObt2,UKF6Y?m5U]5DQ_2?f9j/Da4găU"Fb't<tmoSFMmOG;anMtHFj,L9K$OcFsLEF9vtg27GV>3D\D5XsYkD^8%Hb3<l4XăU"9j/Kq7VxlFIHmkz>hJsv*f8r%Qh5WSe_lcPYpc-TPGG-hESd?mEO<W4*4Ub1D6]ăU"kTN]KR6&OsJqnZr+'R64nnu=wkV]$NGhwdP4XsYG-Q].XM\1$7eD:rWJ*)HSjbJăU"].E8q\j%ZNb'ljQKiT1Pt=fQr)4pdY7nFp,WtQj]*]&;SmIP*$DK,:lMT-Fq(PlăU"oCrg/h7;L5ri1x3uT+v4nemzq4tob9-UM_H2HZ'D[ir9+'0l-,>k?Mcb4Utl=p.ăU"\4xai[A:DJGMS+CzqWg(;P-#0^e>'n1IpFAI*dgQ0%4\sY0>dcIn1?l94F^:CAEăU"A;?(Lhc:Qa#[Xf$vfQ4tB-%e=b(Wf2XY+Pr6E$k%p/Qj2okb<gWb<Zt[x>P)ZR\ăU",(1x5o4uR#>$6GN-xHb<NHv9Ls]r7R&aS#xKuj>Xmi)IH<6i*t;6IMk%3yGSGeXăU"$uOG8#Z6j-XjWZN*,-$W0Y)ZCzi*)Rlc+igajtf(MeA.YKEMS3j;>zD:Y,5f-qhăU"MX([P)pLEI3X:]DyycnueeT9H$6rM'syq?eq9nc2D3#>-+2iS//Gn;T/M35$7stăU"fhp6B/=>IMVplHF7rr%lR6.n^KE\8bEH9NG;RhAalE%ZJDqLW=Xn[430,.$d7#_ăU"b:DRv0be/1C1BV)YYlQC?Z3,vA/krvg8&cxCW5Er\6&EeD1^[U'Lr\IIAF/EA+OăU"64h4Q1wE[qtbb]A%(ko6AeFsm9F;T[f]b,v1W*Yr4iQbCIiC4qB\qyvXU/]M5fTăU"56#s#<e:RZ*NGO:GG05_82ZGI0/p6]hk1n>%JpL55nn]06N3c-cEKV)i[#<c>:IăU"B5Iq_bo:8]e-FcT*nASU];LSM[LWUe#2&)_]o''XJV'GCOc15(uf1>,h1&5\+^WăU"hqnNZAr)nUtXdo3zm3$KK%(>CGUc?Y(A/zGv%1DC:;qzcJe^pm^8*Jk:<P?T5C,ăU"=qLZ[;lfPQV-H0V]_Q7cPWPPRuEs=c[,,l1NblG]'J6\nwvFTIN'Biv4zT]:QhSăU"ku9/r_sN+*tkO8Cg^;wB5rHI0F,kbB:W6TDlGvealYu2hD_UM;4f>HWGy\pf/2=ăU"9Tjaxu,Isc<DM3Skm?Kxwi'^.L[m2_*GS0>pLaK$yh]+u3E<9?20(MZ)Z's,j/6ăU"]VD7pXJF4Yn8helF/NDhqjlHOT#f'.F4.X&F746=e+U[r4k(e>\JP:0uSBOG$LMăU"&NDpn=j8dZ5B#D9fA]9kjQL.;d5,pUmKa;c8MweEx?/HCmTYe-85uuZJ?-V$glrăU"rnFXt#qj&lW&]O;oQO6cbV9+Y\yvCd1#iYOZse<\Zrb]mNT\]btcB*\GLd8xIUaăU"eQIE00<3?bG>f8=/wYdp]c-ue$*2)^]Ju1e6?JlU=_6XN*thzIVGPO2NayLj4BDăU"F2h^zDiYj_PMEok(4T#g1%<Dkr.pZYjEskjP]]-k$r>EV/,L]1#O9#L;Ut8^QGUăU">IJzqXcxKStA4b922aM5lnN=p(>+g,nQ6k4yT55Fl3^*MeVb=*-S7&Q=Wf<]4UTăU"B]/M;vhK^M?jXhY&:Wlg&62TI?LZZykOman2mG;g/Xe#ddh,Akj%m;2&u2#ROB8ăU"oTrqnrJSWIlS-fG;%42n=-NrDQbdSv9m8bjui=ApZkKnI(I+u'ThvasUv3WbF4[ăU",nMGB+YeN>R$]8zRzj>.fVKHp]>_dJP8MzzkWxo<Z86a=L=K%eW2Yj3hb4R2h&yăU"1HU1(6i2I>6I]6c:moMNp]9R__mSasNOHWHFioRK;$3:EB4PRm>x:,Rhs3Q6sw-ăU"Ki^tsijDY?,lVLIn2$.91JKvh/%tK(ujnTE.spn$;70$nW8).cux$4H+W[imH]PăU"WdajXm[L^.kY_0uOdE-kX<xJkSsHLNNc6,I^(=HE)rJaEWYmbbr)yU_Sf?XP3^EăU"ERn6Q*U^c0q1$V3EAH9v/Ni>'v'tkH-L%.zT:Y#G$7doG_#,>E&0^U,^O>>dcZwăU"'QTnaiRpdJEUH(+^Smemk;W9WlxxD_YbciSUi$+:;:.bL5o0_]ZR;S_kv>[?^G?ăU"k7Y:Ha^'FsE44#H8aH#FnfBWlanswlVu0&=F1RtjO,g4M=#0nvW4c;GdM08aWWWăU"'k\AqRQu8X6NE[d^Wdlq6j>%2(y9b'j+0hsjCmKg=c:&gNFb:u;:&tM=exm7tb$ăU";*H%8_t3IEvYgYhm9W3'=,wo2ZPVdwW<KmK.urBiMM.#WjlhL>tp^AC3+e^P[W,ăU"E&C$;;mv1-]xVFasv(qF$V=57HTM%Rz_N[C(dmOxsbH3e,7LjV8*(_,HoL?tuL]ăU"8Qbm/8ErVw\&d_2hV9VM7u03<.*xeCRCql)2pU5[-Fp+xEqy604sGwH):.z7$G9ăU"p';6&qt?A:\qV;m]2%dw:wjy*B0j^NqlQe9s+S$vG(j.h%dZDCQBhTvD[SSmx2;ăU"r*2HVf[J+hh%+NQ[0]g5pK3ziag8XNl3Kq2$%=$pG.n$q:VIpq?FGmD8?I*+IsjăU"Q;*OOZ.p$CjF8%pmS^lT0m4;?jWKmBBm$jE9S6,#'J5xy2UtUOLG9hWIS&3Nu7tăU"iC8^0:)Z-LK$&_Ym)(hUx&FHG,X<F1(K6Kl0%9-\,ntoWD''.[WR;K82E&e[lo1ăU"cnP</k3L/ErG0hTY=rO.YHkLx&)X\/gX$BiH6TVIhDxb&JRWbDf$6:qTh2X8W_&ăU"Fd*F&ZsJ[l?Z;b86$n.\SsF$tYA>lOm_b.UOv#kxS+LQ:c+bsP1QNlZW[b#(q#făU"?TXaa[NID8:IR>t^$#1Eco?zFc33/P07sK_O0U6=*vbsIt0\Xkk#yGb8OmAX3rlăU"[:Y/&ZWd%mT6^^Jnp^z<4Bi64'V4Yhi.i<fP.RB[t6%/Sr;cGMmh%KYcI9*9Q]?ăU"k,K<nRNWOjD:Vb]uwdZkg8'qB4M2k$?W+NS3GJTo_TJOA]Dq08'I$PlbWkQ-#n?ăU"VMVZ.P\8q2FR/[yg2bkll=8=xjJrJC,++$oKmXrMr3'X'VF:L,\l1y_N-qVJXxQăU"(z(XIDtjQv]QRLO'D_QIv&j48PE8<p<duhupnGzaL>X==TNQHFJ)]:kGx1UTq?săU"5dJZoi5jnSkP?4V1V4/MTq]>1_dQ#f1Zz,)z#UX&.r_&Y-sR?jzxGiQX(.y^*b?ăU"=uhcp_8Hm&+QtI.o*W7u0Gxt/NOdj1(V#%QTB^8?Pt6a&+dSBX)dn2VS.UXyTtaăU"%P<]4;Jp)$jGUn0(wjZv06:u(bbt6&#bz.^Wl^Pw+S9/:os\BxstvP1:Ezr&0=NăU"siTTWMjoT=+]6ZpiFER=5vFj)Kluw57DLLuc6kxw9b\%2kj(^3i_0RsV-$Fw4kmăU"5;]miGt;yh/4-o,taTXrd\80vPZe=eTK7$vc611[zG*hx]5;(jO>FS_U8hn/L8măU"U<<x_G<QxPdX*za'r<bgs$Dt:9q*;?eUj_5dJhm+AaJbujtIUg?)/*^ktg/2T?4ăU"3]Y(Ia_b7I'4BbrMTn<F]kOc_4[BGa7bM7x\0nl^bfSA,Pt6t%?r_kFui5hFJY)ăU"G2m4k^M26npLr6JR/abR0,*^orVwP-jMiUql4>MJ9u3Tozt2kFay^C(=w[_u+W'ăU"CBtdNlZfE0?/*HYW&AlB?b:\B,CfGsuL9Q4oSbk'?Z&[bRtYQ(\9Lw$84Z+v7D^ăU"V;gq]dBU8&.cJZs'#KHt,*Nvpf(OinJEkz>&#<_b7[XACMKiF.'VE)4bei^#,*aăU"vv2oUuvQi8iNS^bkq<%YaTG<umN2ns]bmwY2o\t9#c7?^x#Elm]=orW&Ep?ah#%ăU"d<>AEGPyhbpZwUhpM03gdKhtqCZt.u^bWIZ8ZTttYRYs%&p$\j)5p$MT9qqbs<hăU"mdf4HuXo%a?J6Z:D$1h(Z3&Ze;&y^1Y+F,]/%_6hQl=PHi;3?g2LxG^jT<o%mUTăU"NX8,pQ8lUJ6tu[XZV(%(?1Nd7;\GC,q^G2BbILh-F4FxwEVkpPWnb]9E5VU.ZpeăU"'92M%2BT%8DJ-JRaBIqREX+cdOWU>S$.R[AMDqN[8)Zl>,<$fZ,?1\oRaT?VPAgăU"q*9kN9CVu-L6tqG<V^l<f9BtLYa0N<p6Le=A2lHDq+%yntdFNfonq#H2(>G0UPeăU"IQ1WP#uXXbB3\>3\_43S[HlJmTYRAr7':LOraqPAPgK$pjMym:i06>U=>'EPCP,ăU"MOv4MvTs*HDMIG4r\,lli#VE^vb9+orA*OxCMl_$ZoX[Qa_^hyM[?kfODr^P:t\ăU"WSHHE_)nHp_n(#VZSn%^Na69VC'(]hU)iNE&wGWX2dA)IBh6T0Itsv:ovcPV'UHăU"Hr*=A:y^>X:Zd,9HgulAfdny=+6o&nF&#9<QG%eERb]Do2;Q+n_zscR5d_3Nnr0ăU"x&b%Iz'c]3Kd%1*Nq&$=:Vi_g0(60NbO;Oedx*fQu&XqBbnI=P.$U:ScDeC5cR6ăU"YWOm\^+tms\[?gw46ZkJ$jy_$2(jOj(PqA?m\:*JhL<hn+&<bkGn(/+a0A1)XbRăU"8dBFGC8NDlg2f+k<5AFp)SbpW[WOKHD+T\&_lViSBq;qBbv8InZ--2Duf^hL[v8ăU"'OZEzJQq.Di3n4$oSi3';\9R.NlP2EUaiof,,64^Z[-BW=C\xX-Xf=jjWN+,5xcăU"7KNlX(Yh*z(;KIqgxP)ZE5&EA_$/(sNf0_99Q$A':SKt5KdCsvAPayxkOFoPubCăU"p/b.hiK/sqqI4HkkGY6dXcq6g1*Gb^#zI0%D[[je6.tS.JOW862?Wd]G?6<P4Y+ăU"ro49QLCPM+z:Bh^J.6$5LoV[48iVl5rt=#.rY:d:r)H;kIVc6t5Vb_%L'L0LPW<ăU"$dB$$GEn2&q4wMZ4lEH\0Jukvcv<DHw[[RWnts$3wiD):Fxc9,a8-?vBQG.fY]UăU"qvjhk6jZ=,uW(IMW5U_hU1:/z-RecYWc46%ex?25p0b&_Lf,i%VzX^Yu=rP'<M:ăU"OA<'I0sVlyV'5VNvb/2o&Rm<*LgY)ix8P5(Yr;0fRXdq4McZg7/$FLUzsivUJtZăU"ql<UePAf&jsAo7tK.WhMm-.C,ELqzKTL_l_lmj\TQHK[tK)(t>M:MU#GKIG_.GZăU"bb<+CFsvcOYpt/5lq5;k/u5*sen9ffLh79'<WlgGjJoEp*&%H8L>2BGzBQLxU,KăU"/=98>(JqAAS;K-W\*orXabd4s:-:Yk-%TU6;(SdOKHuPzJy5_yHx(X5V*xkbDlhăU"&349q#E)Zili4yf>d8emNq['BO^fQz-(]8pW(f,YX<d_0^?_4JRRt'q,/CPb;EEăU":sj+_tgA9f)cQ0vz5=)OPtNwJTW<JGTP%/+]\Hk.;laEf[*&:eDz\1wk0Q'O&B+ăU"&'VYEcc4M%K?kO*MGYzF4i&+kr#5=\ejj\Bco<dPkQ)RQLTr?3-'$NMA5^bRytXăU"[0$Eg0ZJ$gS5Px<vGj*GgjbeR(M8j=6A&Kx\X:^IC=$bZ%14\+Hf*DMh'R:B7tFăU"G,\.IQ:Ap7[+n'#b3O%7O\]Q7aKXQJp=sMLL\'Nbdi^oP.v\Q3(X:47x]dYF;X%ăU"fFt(vRLsQcJ6ZFY<fONX8zW'lekCH()D9_%_&Xx&Z9Hr=WxI8*ur/EuP[6[de8LăU"clNUSb3_ky:*Axo.y4cF'j_J>e2(iy0:<bd8JsO&oYIvr/2O(hz7Wpr]TPlMkZDăU")kuNhmeqp_ekKecn1Q,8pUlKt*;=-3.ZKh]dFBcIqMPN:<L/#EVa1Utom2#c0dzăU"-19I/>F8h7g#[/.uQ<WylGvS\zuvZ>_LB4e[0,QibJfhFi_z.Ip\DZ+qRMr*hlNăU"M9Putmj-o+KBR;9IV.]cZn2PAa(oPrdmPB_1GTeE_5)9?yh$QWGyVHZ0l3A6zkwăU"uc>pb7s*A5/(?<UI&])N'-y4:8l/MZ$1bCCEw4</q*r./?1sdN1Y+'kOjX42o<wăU"Iv[QvpmQ.Ll\AYDt[qWySn#l8RR6lIDl>]]R-.ORQ<m1ZQs.??C?cM%zZ5mAEjUăU"q3mT,G#(OF>b?et)tMHdKCeQK0twuF($^D'pM'h0J[m#mvL3bVD707[ElY(+1?XăU"6&)2k=7Pv-jh?][e82R0<B=4MI6j?V0m5/^VO:k\DimeXu3bO=OM/i_4l9P+8HhăU"Q(^1,lO)c.IU*7Z;>j)h5ek>8x:=PCe(TCK2s3]kJiHc[EibNC:K_2DgWHkaL22ăU"7ryF:nDT6D4gO:4^*SbNRqXm;+zZF^T?msLkQ&aU*8_Xu[LML&oc+Gha/3E^&o>ăU"xK]kZ%n9StGkdcwpnMq#P6_M6b71a$^+0hVvhGf;uA*CLOZV=KAva)d[W\5MA-hăU"B1lfhZu8rdC#,oNi$+<1My-ChAuA.*g(,ztlmb1+V&6TL_z+HYW[>pgkn[qqsn5ăU"M%8UvrRq5>P-56mT]??dD2YM_B$b%Kb6>qsY#60xwG1f>^fbSL4n?Zo0+&7YB+xăU"JJsme5^hVh)eGKNbm>u4sp$j\+P.RS%[+Nr2a*XIeKSLs-5[0N]z\pv3lehq;U]ăU"mqcn&$c8$87=1x)/\;(&GhOoluU6'sQ;>c'*dsyyK^Jqm_,^F%s1uslt/v9S6&_ăU"MumBiP$=:fX6$l5k%f_N5gj+nNO?g.+t/DO<>-OCDIIdq-ln5/O\WV0NzJ5h*VhăU"oU3PZ'gk]8Hz_B\16c$Zx=rxjOb4%P#*FxThR&MTVtv-$n'3)c2wam3ToQO8[]FăU"/_wc0.<Yzk/.9p2\t8Bpr],kS=&rM[u\2F^l1HxM5bB\g-.+>H_^#H2x%*up(%)ăU"9%%%%-%P+qJEpJMn=D#4%%2%\%%0%%%%h%trug%gxSg7fxf$q:FSAPaXL]Kxh,aăU"r6U*EC=6WFUKhE,<9AE3R&;A:H8]Yw(V)0n[P.(tld0y3G*V'kgn56p'eHc^Z*MăU"cItC643YLoV&Nukmk;PN*7b0m'w^NXj*m9Vm^YlEYf;WMvH_L:+>o/>D[V&kwD]ăU"Qtt'WvjW/O/fZN>p0,LUtm9CJfoWtC13%ZLIRFp<U[3Doc2vv:_XH/a5rb%.IQbăU"2JS*;aTecpo+,rKq.63V;5(+Qa5(B(7]eek23E0m)l+R;;ap=ZvO]k0I_JI'ieuăU"bOoR)KL#b>i?7\R;27Ql#VR3woJ]-Qbr47,dmLgYWZl5.t2?$rGUkZZF:kqR$T*ăU"o8\kg_/s$en&=qZ[L?Bt8bh/k6vo$*VKkg07qj-\kALzK_G]Yu0:Z_=4pND_Y,AăU">R%)6,5.JGOQ/(<0QkBKC09XkOL8>$I.fh_boR$DcZUUa*'*BvCO26d5WKH#VBuăU"t<o.+X0v7(ADdEb+uE,Raq[a5),YgA*u:Rg$p^%V]?B^=si0j+K_*GXvL+3djx$ăU"dFGZ,5b8KBtfw%)Hmst3vSXZa4Umu0)A$y[0[9fFg%J9pn)AejF>d*K%B*n-pllăU"wuVWnjm]\/?8D#[QE[MZSv&>u/tr=u=iD2H]a1Fo]3E]B_H]m?6:^KA$:[8.5-,ăU"If=_>*FfnS$b:=HDrDu46NIEyrG+E]P+%BmC#RMv2>aD9TYlqcNBN*V&h1cf8l*ăU"*9E1_*#nuvvd._T/HN['wT<K[,A+u(id_n6w?nN,q$>hA<^$UT41AS]fW4Bjin,ăU"0=yo'LUv50&CW:;W\AI%I0tv+h1r;:;9*j',&Uv/Qj0_eqGP_1WdhMVc<(_4K'XăU"qD+asZ.Jh8$Ay\oDAz*gmh7;PE#v+i])3TIt:ty/zDj<;1USjbKY*lej2W93t<văU"00bunZcK)Rz<Um?xe%Y\?w3g'2NseEaOp-0w%ko6S7q5?Tm%Nr]N,sP&j6[ah+găU"a7+/KM3wr7GcYe'W)<+8?)x3wksn'>YvZ5'gHuDGDg?Ch];o;D#IUx2ME9aG-A+ăU"[;3'58iGDOsgDJVX[<[ArE7X>fE>vY7sLNUr3ErzZ9lfvmFI=CJQ7ejD]b(XRRaăU"PQ:K_DeK2giqz]41K3H7XI(6Zf=R.L%=s[_/$nOF;$:)F*&qxg3vCO5;;#wtG%_ăU"2VW\L8Oy1md'oX4[<D?7I;e_ft8$i7c9:4%&<>tES1S?tV*kSGH/zWMDo'w+;PdăU"1bH3,#IW:Pm9P>goWuk?Obs6ts1\u):ZmW=S2LMzyQFH3Vo+Z:pLb[W/#QNR;=0ăU"f4Gi(LHA]YRJJBLH,;P+4%7(x19cvvmJ'g^R3]sntm58f<nLa2,Mldcjj9)f=*5ăU"p,fPsO6o=n6dTbRuCnxH&o)SmG/RGr,3GZ[O3W-z6S:SM&HH^?pw'^7Z9RyR5+LăU"W8&Z$((PJ'7LpkdJXO*8EbFx]^,*2#J*RA7DyY?R:BZA&OpKWXyH[j*&$tB5v>-ăU"3Wl[h3JAf%o2r5=h;y4Ek(%aAsjRO(e,GsD9r(b8w)SGXNLi%_$,bYcDS7qk:hmăU"mKGH7n9bQNVW((sMh>YE'FaLoR3#BE[Pu<rn*q)UIR0e4kHqQhKs/MYN0m'=m2^ăU"u]H(YI+*LRBAstUgHc.Fb5t?UF1#m23me:WX2;)S>dqf4P>cIkWD]RKWwH-l^sFăU"4&1+0'<f&C>i#,/ex5Wa*^ofAwof\t%07Iw4ig-2+lnY*W-*WYwO-6npA*n#dR&ăU"zHs_<Op1cgm4?*Xs:MQ)w?L4J_x(15$U^/Aio:td.0t#2d.vS%XI>-PB=7ceS-lăU"iCVDH[Ml;3)tluWML74Kx^)w/1+vIc^+v9o^n&J/FMaD0eZV35Sj0Y.Xaf6Y'9hăU"p'?727Dd7eI+$AhBooPfdLf)5&w:d(fgXSrK=+*wlov-'XuLjMV,+mKI'48_h$uăU",eUu<84ZRUi.OysNAgM>#PUq4M;:1p#;DH*%ECi=2X(sd#RjA?^%0IdWNpX'5eAăU"8_f6fJu,$5k(.5nIQ2Exs]r9-n-?WsBXIXQ&>/a,*WT<o'an;,25>*B1ER8zdRoăU"OXW+ZU9=NS\=xIuT7557II6#n?nNE3Gxz\dpWw:HmOD'2fcTpCO(QA?B.PJXw9:ăU"Ho+kC(-YKvhAa'3U/$w3AL52uoZL:oI7-Os2SUxiVj\n%<0&Mrm:^8Dh<70/PC]ăU"0v4Rh*9I3*_hPpNk]C%/stmKI)Ub&)UBg9XDMZ&+(Kx/N)&aR4%mm/YasMJ3;BkăU"*&'_z$d+V69)%lI#oW4_fYq5-o9YUCaMpCt.eJuQK_rZ0P1/+(/-M-h243[&RCiăU"-eFC]ja#v(GUYFfw*TxN<zUl+TjcWnx,LS^$G8oIbSLQbQqTbkca%GVjJ&6SOAkăU"7HR8EEmp<&XQ7zC.o/1h_(UEEb<m_peJK&$P929pfIeW;]nOTI#2*k8)Q5h?\vcăU"wPs],j_tEV.0[p1f;>PCRm<N9,X]k=,[k;wkXjJkS*W\:q:rh*?aEl)8XdjD&81ăU"zFbs5O7[Tanjv2O$;O-;1uYb\r8;:h49^'-mF2DmZdeNMW?wZ9%eRpd$Rk+$,aBăU"4OuijBu>2NQl:GlSv]+.(BFQDEHxJ2mKU^WI'jGUR'q,3]GS4HQ'%nHLI/9f**lăU"QjqKvod+_Ayu3Z[dMB_pbP77QcK/)=VT5r&Qf%*^Qc04GiO9Q]KvpddQnc0dp$PăU"bl'\sdNHMsqcVa9.4u4.xJ'?fY\)%.OnVHosroj)'CAIMuh3r<\Dh2(i0Qv*ZdkăU";%Sp8J54g[GYNwRy,P9Ci2s3OEs$tb.(dTL_;aHY>(/E'FNViw5S8^_0r)n<O3,ăU"Ex68HYA+589'=_*&sEF38C9rZNx;;[,)&QXiE+eV>dAEFMnTbMC*dbk+s0Udkq=ăU"EC5)2;][]-gO5m^O5AT'IljhdEdnC3c/t)Z7Or+g6=>.?)4=[1OrWE;]?:43TMwăU"gBskF71mey2CHu;rs[17SCD=v1'tU>K&n-]aGXI0:Q063Z&L1b'2Fx679lYb%=*ăU"$_.oWEhQgoCh,n34,(>ied)/Fms8:Z&ZTx<WpeP6g,T9,8v0OJxbhjEAoO)Y:e#ăU"Y*%f,*\ex,QR_slt.JwZi>-MMA\dLrDI0L;wm.,-Z0XJ:O)oAnR<H,R>AWJjJb$ăU"fui;SWIu5c\cb?kvXM)>Bvy6Zd'c,3\iF6d=Wg$57fv]K9Uu+n]?vEDRa[<$a+săU"uRX45W1Iw+*.(nI4ImhQd[Q#o<9z$d;qIkgUEs:SDcTs^7q=2J#wK*+)?u$C>koăU"So*3[Jb*,hv5/x[UzHK+&<nF5S0YUA,eI8'<:#fMjxJBH&l\4cIF1A900<$U'#9ăU"GqgS7p+K]g\lDB7yTJZfC=U+JL-bDM=AnRKCedu/OuhQWn&o\VEySi[nB(a\2:văU"RJeGlxEg2bb<1%+#+ylP?p\t^^)z%hl%96):7iR,nK,K&)1e(EN>B_^uOnVR4qaăU"%rZ4S'WG,'Z'FefVVhK+'#T5=Vob01+:pT85Ttgdf(ARZ[t+Px)wYGw9AwA\aZbăU"\CQw3j/2>7[q[VfJxDseBHc7v4QL61=-H4)E\aOS1=hxvD,O$GIA,y7]X^'k\O(ăU"/C(5Nxtn5J[V.cCz#.rm2;0ca1KaFA)'Mx-Yy$JCxsq-c-3U]&G/*:-Co]-?Zp>ăU"fuQ??p*aJ2&SweCD#Q^^t-3m:gLsqSuwaYS-:O9u$9F%6qG4NYF^YUr[aI\70c_ăU"#G5<_.&6>jw5VM$:Q0%FIe?nhDQ<*&?c^j+.rRC>]Gi5xamB;PT?+)WzkB%85aaăU"/$Y^]BM5Qv%zzrHRagrgx7>rp>jv;*Kx;uX8>pZxkq=uuYJ6G]LWH3rVj+Q/L*zăU"(BE/3_RB*=^al$**P8FaBSO]1o4?NDi65QGLbN1fW]NqQ><p]p]tL#BEZ_Hio3FăU"kXoRorK8jw;CZ7R4'>\X6MPth9Lf4JDmGeM<+8X_11ntvv*7Pv#SUhLr4X$c$uZăU"l&7xk'/Bn-j-&_$K?Waoo4pm%]fP_kV)iwD-zo\L7k9iA9iCn;wj0+J+5>ml_RXăU">O/UK/F<O3&aG+9o1buLL-;QxnVe=0q2mBL./%z[Mo_C^<9,'][h\?En?G%?h<0ăU"*];8tCf5,;06$(WDWQ]/H6Z8GFgr[HWHmMF39Y0CQ)#t*Y]Fi2%YrlK]Kg%DZyRăU"k7d&Nna1\cQZ7D2hDk$Td%x-a[X,>1Y]36%4jnDvKeE^?8X_d\]-zB6?\BpOH7căU"1''F\+=$YA3'HL+:wbHM^#1^KP;-Jml8&b;uACOgDns2I_l3K8l?T$]QOlhZV?BăU"$f_.44KLA,3KDsWb)A7YqW#NDtBX\D]m$iIObFl>#uh$ESJ]nm$Ym\ul$Hm-YqZăU"4OHCBi_M]8MnVv4h(tvc8EpG?\/Bc2k2c6'JletR3XxY]V'cb'#Tr*%a1E+SWM?ăU">[?$Ne)?tenn<jj+]R[qj1f(sFQj[EXm>$u-;W[V40bn#SL;]6TnPVoISsp(BWCăU"*gik_9Rwf#]C2b((xlh[eX_Hx_-,ZKbJ>IFH2Yi%bWhI_JZGC-pPECj;7]GPSKYăU"hmO>ctiTL-3%-aJ;RP0KuKVtoEDe<f&vM<(zjEU8g.*++TjCHr*LPqd>nEmdkB.ăU"(syh3dQ6)uA)oDVrf,dPFVa>9J:vlt+fd6WpX*kLb^7H*9N.e-g9cqVT/dTO_YqăU"F5Drp0l8aBI$HJzhd+oVsC:)d.<jM/A.gIEd&z/_:+>C><#)y^Y%$g*OH#\)69DăU"q>Tb0v:U*<'=rg5*LdH:'vmslT(Arq%P28KA8zk1Q#<f^A)c^ymk029n<fpnCVvăEND SUBăSUB V5ăU"af.QsZx;vosqRgHjd8i#k(wReQg*99k3D&P.AuNxctxD.Td%OrS*Wp#6+jwu;qZăU"$_N+A\d?D22slC^%=Qr?xqfF6>VsysgXLI#l;WK]70iCt>5S&PdzHecTdfoqpH-ăU"0(q^irNt3JGbs36I6<4Y-tV0SN]w+cWpdm8uKf$mETqHbmCW>7;N/i#^Mu]/cL^ăU"9+L#o8eD.I(+5r4u%p&'9%%9%%#%-%7,c<Et]Iv'w#&%%5%*%%0%%%%%%%%%&%%ăU"E%%%%%%%#%uh'A%nj&%Sgfx%up&'%9%9%%%%-%+x.LA9&a&%%di%%)cd%%%/%%%ăU"%%%%%%%%E%%%%L'#%%g&%kfhj#Suh'%up&'%9%9%%%%-%>j*=ED2cxz%c&%%%%(ăU"%%%/%%%%%%%%%%%E%.%%]k#%%g&%kfhj%Sufq%up&'%9%9%%%%-%>g*=E4t5m*&ăU"8k%%+a7%%%/%%%%%%%%%%%E%7%%ml#%%g&%kfhj%Sggh%up&'%9%9%%%%-%7PqJăU"ECpMn=&D4%%&2\%%%0%%%%%%%%%&%E%I%%T]%%%ht%rugg%xSgf%xup*%+%%%%%ăU"*%*%%?&%.%Hm%%%%%ăEND SUBăV2ăV3ăV4ăV5ăCLOSE:IF S=88AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMartin Lindhe                  FAKE PLASMA EFFECT UPDATE      m-35728@mailbox.swipnet.se     06-14-96 (02:11)       QB, QBasic, PDS        56   1470     PLASMA.BAS  '              Plasma Effect in QB/QBASIC by Martin Lindheăă'  I was exprimenting with some wierd effect that i've created some days ago,ă' (it looked like shit!), but i started to play a little with the source, andă' here's the reslut...        please e-mail me at: m-35728@mailbox.swipnet.seăăDEFINT A-ZăSCREEN 13ăăb = 64ăFOR a = 0 TO 63ă    b = b - 1ă    PALETTE a, aă    PALETTE a + 64, 256 ^ 2 + bă    PALETTE a + 127, 256 ^ 2 + 256 * aăNEXTăăDO WHILE v# < 4000ă   v# = v# + .1ă   w# = w# + .3ă   u# = u# + .001ă   x# = COS(v#) * u# + 159ă   y# = SIN(w#) * u# + 99ă   a = POINT(x# + 2, y#)ă   b = POINT(x# - 2, y#)ă   c = POINT(x#, y# + 2)ă   d = POINT(x#, y# - 2)ă   e = POINT(x# + 2, y# + 2)ă   f = POINT(x# + 2, y# - 2)ă   g = POINT(x# - 2, y# + 2)ă   h = POINT(x# - 2, y# - 2)ă   col = (a + b + c + d + e + f + g + h) / 8ă   PSET (x#, y#), col + 100ăLOOPăăaa = 50ăDOă   IF bak = 0 THEN aa = aa + 1ă   IF bak = 1 THEN aa = aa - 1ă   IF aa = 135 THEN bak = 1ă   IF aa = 50 THEN bak = 0ă   FOR x = 100 TO 220ă       FOR y = aa TO aa + 15ă           a = POINT(x + 2, y)ă           b = POINT(x - 2, y)ă           c = POINT(x, y + 2)ă           d = POINT(x, y - 2)ă           e = POINT(x + 2, y + 2)ă           f = POINT(x + 2, y - 2)ă           g = POINT(x - 2, y + 2)ă           h = POINT(x - 2, y - 2)ă           col = (a + b + c + d + e + f + g + h) / 8ă           PSET (x, y), colă       NEXTă   NEXTăLOOPăDave Navarro, Jr.              SPINNING DOTS                  comp.lang.basic.misc           06-15-96 (01:37)       PB                     156  2933     SPINDOTS.BAS' Spinning Dotsă' Adapted from original Turbo Pascal source of unknown origină' Converted to PowerBASIC 3.2 by Dave Navarro, Jr.ă' Donated to the Public Domainăă$DIM ALLăăDIM inPort1 AS SHARED WORDăDIM nDots AS SHARED WORDăănDots = 21ăăTYPE Recă  x AS WORDă  y AS WORDă  sx AS WORDă  sy AS WORDăEND TYPEăăDIM dot( 0 TO nDots - 1 ) AS SHARED RecăăSUB waitRetrace()ă  ! mov dx, inPort1; {find crt status REG( INPUT port #1 ) }ăL1:ă  ! IN al, dx;ă  ! test al, 8;ă  ! jnz L1; {wait FOR no v retrace}ăL2:ă  ! IN al, dx;ă  ! test al, 8;ă  ! jz L2; {wait FOR v retrace}ăEND SUBăă%tableWriteIndex = &H3C8ă%tableDataRegister = &H3C9ăăSUB setColor( BYVAL colr AS BYTE, BYVAL r AS BYTE, BYVAL g AS BYTE, BYVAL b AS BYTE )ă  ! mov dx, %tableWriteIndexă  ! mov al, colră  ! OUT dx, ală  ! inc dxă  ! mov al, ră  ! OUT dx, ală  ! mov al, gă  ! OUT dx, ală  ! mov al, bă  ! OUT dx, alăEND SUBăă'plot a pixel in mode 13hăSUB plot( BYVAL x AS WORD, BYVAL y AS WORD )ă  ! mov si, y; yă  ! mov di, x; xă  ! mov ax, &HA000ă  ! mov es, axă  ! mov ax, 320ă  ! mul siă  ! add di, axă  ! mov al, es: [di]ă  ! NOT ală  ! mov es: [di], alăEND SUBăăSUB plot4( BYVAL x AS WORD, BYVAL y AS WORD )ă  DIM f AS WORDă  f = 60ă  plot x + f, yă  plot 199 + f-x, 199-yă  plot 199 + f-y, xă  plot y+f, 199-xăEND SUBăăSUB click()ă  ! mov dx, &H61ă  ! IN al, dxă  ! xor al, 2ă  ! OUT dx, alăEND SUBăăFUNCTION colorFn( BYVAL x AS WORD ) AS BYTEă  colorFn = 63 - ( ABS( 100 - x ) / 2 )ăEND FUNCTIONăăSUB moveDots()ă  DIM i AS INTEGERă  FOR i = 0 TO nDots - 1ă    plot4 dot(i).x, dot(i).yă    INCR dot(i).x, dot(i).sxă    INCR dot(i).y, dot(i).syă    IF dot(i).x > 200 THENă      dot(i).sx = -dot(i).sxă      INCR dot(i).x, dot(i).sxă      clickă    END IFă    IF dot(i).y > 199 THENă      dot(i).sy = -dot(i).syă      INCR dot(i).y, dot(i).syă      clickă    END IFă    plot4 dot(i).x, dot(i).yă  NEXTă  waitRetraceă  waitRetraceă  waitRetraceă  setcolor 255, colorFn( dot(0).x ), colorFn( dot(3).x ), colorFn( dot(6).x )ăEND SUBăăSUB drawdots()ă  DIM i AS INTEGERă  FOR i = 0 TO nDots - 1ă    plot4 dot(i).x, dot(i).yă  NEXTăEND SUBăăSUB initDots()ă  DIM i AS INTEGER, j AS WORD, K AS WORDă  j = 1ă  k = 1ă  FOR i = 0 TO nDots - 1ă    dot(i).x  = 100ă    dot(i).y  = 99ă    dot(i).sx = jă    dot(i).sy = kă    INCR jă    IF j > = k THENă      j = 1ă      INCR kă    END IFă  NEXTăEND SUBăăFUNCTION readKey() AS STRINGă  readKey = INKEY$ăEND FUNCTIONăăFUNCTION keyPressed() AS WORDă  keyPressed = INSTAT < > 0ăEND FUNCTIONăă    DEF SEG = &H40ă    inPort1 = PEEKI( &H63 ) + 6ă    DEF SEGă    OUT &H61, INP( &H61 ) AND ( NOT 1 )ă    setcolor 255, 60, 60, 63ă    initDotsăASM mov ax, &H13;ăASM INT &H10;ă    drawDotsă    DOă      moveDotsă    LOOP UNTIL keyPressedă    ReadKeyă    drawDotsăASM mov ax, 3ăASM INT &H10ăENDăTate P. Sonnier                QB DRAWING PROGRAM             tate_sonnier@juno.com          06-14-96 (15:39)       QB, PDS                382  25323    QBDRAW.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"QBDRAW.ZIP",4^6:Z&=18747:?STRING$(50,177);ăU"%up()%9%%%I-%1E]GEMH-34H..%%SG%%%/%%%%vg#iwf&%SgfxKf?:>ZSAoJ5suăU"V6$SJh/i]9mo61KM->^-J78o)-z98veY)7l5>k7LN8l$E[f$jR[N<Wz4DOoMIKiăU"WB-ltO:m_\5_F0S>T$r(FHmCU4VgHBH3]]lOTC4rF?-XQeL3TPrVMdlfF/np^0răU"9k_X<KW]#n_HuKHR;0^%CGF8]8j'JR^Nf1IB3v0STZ,rn3b0Q,L%>ccqnv\qe=tăU"X8\uYgrb?BisKs\(]ObYKOG/iS8P2kFH$pgC2%4HU[jghTl&S=m+bt>;Vuei-k'ăU"gOp5SYoG6iWRf(R.SHZN;0com[c'9wTV3_rEJSUM\IW=XDmmqfs0kh0e1EPkIZFăU"3?aXx<rD\+t5e,)zl'PILvgbZlGrZdLLYbRf7+f3Q%#Raww;JMr,cb%ZBp)t]9%ăU"GowAT>]cOH?b=gZnbBGO_1+[+mMH'.1VbKYlTJG1Y''<b[_B-)E?bD/[loHF'^qăU"B#-U1CIx72/Lh'WIDjKnblvw1/t)x2C0[s,w.59aoF65G1?m-Tc>-=TbqH'f,*FăU"Bhk79B0kdyi,pb>AQTgc4j#qLa.q\P*e(s0sbh1l73N)B?^>,[?e\u4=p'8oFQIăU"oIhEQPc<h92VzE]9$Ypt%:Sj$RaYwca21[m%vhT2lSZk00;^ZUokrrcL-+wEnG5ăU"-<gH\?Nf'\9GQP;jEeqbkK,E8jr9rfQst^w$+RfT;w%/TUq,2=yN*b9_LHH]\Q4ăU"j0g7RnN2,V[5Y,DIIgWQ&S6_+K)N5$[y[EUY,d'fK9mZ+fK3G;BAk/,t$QJ1twPăU"lfa9mZUf7Yhb[WTA%X?ms4tWg3_0A2_5IJd&g1Th/V<DF]?mXaOJ+9TA$^%<km?ăU"m#P8b6sCcfZ6S,2Kj/9)lpm'xl_sr.,5d3(EjZgf<stWdNsfQ0$Nr>25d46,NfgăU"rS?w#Qrxu<MgCE8Vt]^*+*:NKE-_rS_#4#;Dc[-)j5-w6m;iM?20ymCChWHW2rqăU";F&&6aa)1dfi/08PZ0GN:G^GUAsO-;3&lFfQ.FtIFiQW.Wed./H=\XgiffCr,iTăU"Axw^n8JXagH5Zn-HaBdQdl6LZw%HeHs]mBVU:S]rU<+VfWAt3qR<3F]A21HJ,&JăU"jg&*>Y+HBIm41I,wWBqS+$&RCBCPtCBmoW'A(&mNa1d5+8((XB)UU/v&JCAr7G)ăU"ZlBn'w2il(XbfDsK*fp.9vZcfE]SD]H?iG/^3uX;e>R\xQ5S%k),qNN11'&Qoa1ăU"Ct/HQ+(YVV$r]CfHMa<:0JsXS2D'A:$NL4MAQ&ZvdNaPS-q2gB(yxV28hsZ.ZMEăU"S>]b(aILmbSenMe$Z#]AWKB)J#z_tmP<7u)+6c?dPlu'B[f271UvL&3qS(W()2;ăU"2Xfr_A;0H:KAF=L$1twOZ+6EM?5*MooKRhVWnT3fn=bV)MjJ$l+RbF=HRXLM3d4ăU"zT()PR-bU:ubheg$<B=(;c5sfWY,+WQ[qQGK36(Pin&inFACvi'2cp$tn<go(1oăU"Nxoil_yEUFWRBdbx,dC-7XRS_Av&THF^),VKj3l^6rYc>s;cAkyd6Wj5pvpL<>PăU":Q2cs0=qtqpDg7\5:jXbT*CtG]HcCq:_y[$gCFuIJiU%8nGu9A$gOvnVg)d[UDGăU"C2D0n,e_#&qG^a+bVPq\jf\=C8X#a;#MSc7lVS&EudCG:25I*)-Jd<'7PCqaIS8ăU"Vo=_amqBx$=LXhPH??i%tfTm0:oT)F*I=[5/rXJ3e]btnd^Wl2socb$Ic'l+_18ăU"4=<+po,CebuS8Vf_Q_$;gGsBcxNFnTcn+5,b1-K\GU6F[bU]OORaVsEJ87%X(9QăU"\T\*mOxmUY?cJiZ*kk4i(RqB=G4Pgr2uf+vs'kV'\o3.2HmTGXvPA1[*<CZp.IPăU"-N1*%,65G77\-Mr_B$ah?vuI,nE4:$Gh7(BL3/Y[e4+=GYCE9^pVBbg>ecAn_u0ăU"FRe&QA>IalVNLl*g:.xz#lc.bDO?_B<#X>'<)gjmLU1c&z$n5O\ceO^8[t:)rBCăU"<RIsSX4F:r$;6BEO8w=uPlE[25Ng\Hu2GL6qPG180YmDJ2=\*%Cp=RBv,UbP](%ăU"SL[BAdRhf$;2ofQ3DgiXGXB,2o%p0C?%Ue]%r?Qo(U=l^8?fx2Jqo;EX/)&=kYbăU"^++g%y\SKU]&iTxK,LKXZGJbm9>1m(*0l5#$XnEktxoe3*D4iskc1DoQ#>h&#XLăU"s:U4<V5>_:JZ7>n\SNnMOQl,:*8'HZigNh6\lgV>pG</%,[2z,pTQlEiL02R(F(ăU"i.,=9)J#N3&Cp5d>#J?:z^r#x.Z3]is]7isgTFfrji02O4fq89*,h<hsvqao2[AăU"MLERZfLP2[6>AoB#'W*lfo--ny6r)0Vcc]D*6*AKr=>,,I/*Q%yd?UHrx4'8:yEăU"q'e\Y5qTpVddB$%Q9(kEvmjM,j?iuYmS;_YA=HE[<NIUzgo2R$row46N&WdX.WiăU"i1Ga5u[#GLW=zEevd-G]CEADB7QgPu8&jCU-8[#lBTD]J3kvTMR;5'\K'<B0my^ăU"5U-EY>c1881YdGY'%+Qds?KsJfIA-1%s*C2M:pIx4B+AyDH$B]i^4E1f'TwR:-căU"#/2uU[Sp^Tx#>[G6Hs0$[>B-E<[]cG424EiEs8MJQLl7D..+Qi3a?1O-=fmra\eăU"EA0li'syJ21d7V3bl/FV+QjeR#*Z=U9)<d6,M=9H14v7b<BW=B(-zhQPoqpi.IZăU"(bIlse0/E+od1h3HLb4\U)T*2&+ldO%7v,A_CeL0o)AOzl8*UX;9OuPU;Wnt2o#ăU"l*)4kDCBj5NtJL_OHOkoGqc[%v,i._Eyr=x*SY(Vgz%5z,ou2BZ_(RuRp5qz[bWăU"h;d#0_6V/kQd&Y)/.Mz0N^DpqRSyOTqq)Z23I98qrX&Dde9j,&*%zzZu.OB7^u)ăU"<S=%)3;b-PGcqbbr]dqfATFz*EHh/7tt1rUxjjwwW9?wGY*T8W1kO1ZLGR*'W-&ăU"-tmLNG%.Y5Lo.u%p()9%%%%-g%'KGmEh?&-6WJ%7%<x%%%-%%%%iwf&&SgfFxfbăU":b&\]+fX^VxPoB<eS3$)XKlEsJ?QF<e)WXh7YUgr?0hVX#o5B[%Y2s*6bNuzbt0ăU"D/e4](MRoEYQ+%yzOn.zJxy#_ipNh=i<#Zq58F>G-FD#1T+.-X*DAZ\bBkko_&uăU"\-lH<XZJImTFQLX1TF<dRTqME0%tu(OJdw<bK+Ka-G/L$VoMm7mR5wXUeL<iu2păU"Gl][6RU'(x8r=A\,ZJJeB)s8mrJd?dq*LVzrp?jBEHBF[KHmYW81QqRihSH1(4aăU"^\NwDE=rvtHM-8T]vTkPi'hlPh_3PscTG#\+C2#2]DN4p>*H1PCDmN*F2/;#SsVăU"5O8mv<#dB(HL[Am6'A*O^UB.f6Zmm5?oJ,D:38vg/Gk:i)2vXbUoZ\^J:VMBc(6ăU"%s-(PB==1%U[1QIZQ3k.M8PiA-j,]$j3va*J\<bijkE(F:koCS[L+EU?DPi/jJAăU"SWc\iUG23okcWj'n:_As\OQ<qj_/n_a=BIhjLF;P.p+wXew6Up)3Kj4)uZ;[4kkăU"3cQRG&3:_]fQ(%*,b(?nq1+D$,K=gDQFQGYFw>rvZ($s/$AQ10n,Vso(uTZQAf?ăU"Hol9DI$VnX$_QQ#3.YL[EaJik\R&mi(6BZP)o;$d,_nE,h4e=ZU[rPet8'-:9ptăU"H.R\MYA5]0At<;%*IbV$I3m3'xMGNQC8+X<jbr?mvr8pWd>DM:di'=Js8#p8K&dăU"a)7VOfxS%+[K8MBQm6L8j/k*Rnv,._E0FKf<-:7g[LfI\r205\,e0JS&[JCx/[8ăU",rUV?'RaVDbxvLL,(YoGBt(+U);['kVzZdUuC#>5uXv?o9uP5^>7ue]c_EjFr:<ăU"hh8Ndo_+G?,nB^GI0W%C%0t7p_QbO7.mbZ6YDE3=3Ld[;7e)gU01e'e2X%YVA=1ăU"7flFTc4mZaf\?Z*#mcgab.VIiWrB&h#vx<UF9W]5_sV__G^XpISu*&,VasDqC#răU"/-SK?(I:2>jua/PO%v[<qTux8]5s.YMSzB]$5]x8RHudKksfh8#>(MWM>^3VSEGăU"TDd\?KqNo+av?_?sSF(*qnfb(ubmV0=F+t(s]r,87=$=MT/;WlxjDimD=[G9mBkăU"rXCYfpzSQZm-]JHMrHvbdl<HM*Er&F:Ocn?[8q]<K2XO.O]X>H;CRx2R+HuJ<Q&ăU"N[HwT</rJ9Cr?Ibra'8Fe-P[/[QP$s=S]+A(YK]JrH3Tyu'PZ>+#,?.stCzLW=-ăU"t(-RP#RV\gd?=aosX\B)sHJeKnkJH<'PSCFYguE-mw;8FO]K[Z1Z5Z]fGrvtl98ăU"XF=j'kK1o[XO+t&OKrn4*usn.W+h<p1ho\mE6RlB[)fv4/Ua\fxn<$i]>)gMY<YăU"8a?&]pC?DNwjG/'=nq_a,eL];m?6]ZP+&g)n88leux;ppNIbS\mjeEWVdNccsZuăU"6>.NlDa0IR))m7B#UA$uF^<Y:u<v6Gd^kOW)mpxYK3yJw/D.LS6l(J=&,>wq)njăU"Xg*[HlxSXsJ>^lL=?_u2QEX*su7U5l/?P<#kOki-+ml:*nI<M'1->6*e>RUnLVjăU"Osn[rwmW#AwWA5:+ld(+3-VI7^-2[se$2=0kwy?SL1.\9+4OLiL&V?[=(Fc;W_$ăU">UYSCk\k9+B^LtX,h+29vX#<v31]e#d[*2,N(;d4Vs'9;R?XLM6XBdaFpy/(&VPăU"YXY:/LN3KiphL6L>f#fAzpHtrp0iUk.MP*i4U=u*0v6.cal95dLA.o8Yi$M$YYtăU"35nG\Na[OD_HsAP)SCE/fPDW;6N5BQ8fyEi:R,L,faK*%JoHCFeXpRv((+Yc,hIăU"$jYgqxjgUOuWa=-V>RWeI)Gohc*KgHiR]B>44_C+K<Gl9Di'g'Rm]xjxd$BA<tPăU"J&UuXvvbg=0LF;_B1?F5d>OO&Hyc^3Fr9.0xO_V(0c&,jno:vqEwwJL>Eii(oOAăU"[BF,qjiXdu/7blHXiPia*[t#kh^FDU9SOSm$e]C\R83//'(>+MJ^J3UZa4^w>d8ăU":HM^DyHoW&_#CVAH[Lh8CIq/*.NQ\&0^A&alZTK6?b-5x9V/'ruGDX-&XhtUv6/ăU"M]=JrS]KiEtspdtVJiW9UeN?HEdW\)DlYbcF>/+ldKY(_=2A[\pMbDe3h$(9EdIăU"%k35.DVk'fO6YD(ij-GX?2<j*,NqM:.ifTzf6r.P1gL:J2NP_XT)q)vNFm78YSJăU"iqu52:9\d(wRElW,B1-bh7cee[_IHB,E/#+^>3oOXI>yHUq-*42jE,tYrj1pLLpăU"W)1a(aU7n56uAC,l)6#i3e*(,Lr+)L\Y6lRD]f>y+DH_05F;2hCI#q+m[f+8fa;ăU"YNw)YPglX87Jn;NMum6^/n)K2FBr8P?6[=:QFKSHKVyTNGHs=x.T6)Wy[ydHa]KăU"),W[)gk[$6)T#nUn/OGIgnP2oJmV5igN[iuSO2#\bhUvo;yj#*kqAK*HDfCi^XaăU"6M52$+md3y%urA.op<uv1+78k3MqmPp12q4%ZL1X?bf<8U2kudLSbPilqQ<]#l/ăU"D,D%=O-;q^B5sMNJABs?TfKCIfmv5LN't8G\Ky9M/N>o:3>(zsi^Ww5-MSro/gLăU"ctjv6</P.U5h&u:Pg0uqH<G;:K3)BjqDt_bZb>]hFH/$0u^l0Cf/'4^Sg?Rcm6$ăU";Qc.=Yh.Dcw,i's$f*:ES1;R]a05)bT\b*$SSQ,'>mTeXjX^7dD/CHFjl9D-iK.ăU"LkoDPENYlJ%_f+hAIt)&L)4aSs(O)0&kLy88$K\7ndxDL+n4yFIFFYpU7$DSS7yăU"'TK><>L;xGZ1]bu;E7BUn^uX,<*/2tv^iKxu_U,&?i0)O'sMf+jtNb4zF].U7b>ăU"'tif13.uy4'IWZ9va#Up-F?/mXHiIc6vJt6rJCqo;z3;Oo3&oD$0;ACR)r-V9&-ăU"m_3wNwK)Eggf-&f/s<.<1DKor&%-#OP00q1#\8i)dE:%oy=B>VKFgO%]BK>VjmHăU"l1G&fpjOh2/ASERaEg0c3wdh(5ypQ(lwja$C7kJ#jA3.m\2>H//qZ242I6Vfe,căU"WK:\rOUNnbo^y+at\?olWET7+mN)e1fI47s&M(xm]feB+BPvtL%\opoR142MBv+ăU"r.HAWt\-j#AG0DV_3oYUSN]3ifW+J1n:-bMF)'BbrSJN1'wj&w_Ro8fPD%<[QDoăU":'x6nXA;?Xexk<*MAC&[c[SBs-6R9Ja.hz?-[icN5<A:Fq3+]q1Na%BZ1:Zaj'qăU"W8qGLQC_KNf.t)lx6&K;Rcr5i7Sv>O^WKnDzk4RqDC^8l1%Ib.rY3>YU?Ex\0KqăU"RaQ$H4jYVBDdKq%E9$8cav6E2LGArtCdUOS6?*-Y/w5M3Wq;>lT^<;=ZUS>XU'yăU"u0FfCF00j=A&*nquM/Gf9c00j_=n/UmS:0?t<YmBs\\mG'Rywi:[d0Se?tN=ssrăU"6t_5xGAuVKBO#JfV8=[qXL#/oZPuV^;oQR6ZhuBHDg&Av5Nu^KoR'vWf.3)*k3MăU"Au=bBVT[BYOV[KW)K3LbE8=F+G4P*GPV:4ldeMJJc&=fLi=>4pgg'LTx\&QMS%*ăU"&cn;q4ux6>V)>#4pZUA/6k:g20g_ReM>jbi'c/d[VZ?_9gF0m7O^&V1:kvCb=e$ăU"b8d1h7:-_$r.__10saEg$.V74[SDJ)&4e$-U^BbtU.Xr:-qOX\6>,P>b%xiAAA-ăU"3=A$.PJ>;:?N/$vpDw--eXi<7[DB)0r5V()STSV;%?8cuM)0F_7o=7*jlUd\<j9ăU"=(sQ1*&m8t)9^;G%&.MD1#MZ<KjO8*7CVN*/Vhma4*cTSq)4w7Tp$=oH42dc#0?ăU"dX1G,.Bf?Q<ZJ^-Y#$.'l_/qYO\hPquw#V7*][ZGV)N^_]_;VU\][q)Je'k$[JQăU"gr4aFM4MHW]jk[]_EVTiV7kV'FX502D.CJw4QT\ZOi#IY6ckm$]gv[+F:WeD[u&ăU"lImP3\)7>k-&E#w#=w53d%9;d;m,7_#p[MVFNz[>r2PH]ve?Jj<Fhe(4'L895a/ăU"UoDr]5BUpO]m0]fOf^3ulG/+ot-5mKtHbfK,-r3cVI-2OOOWyVG-AJ5mxhatur^ăU"vSh=HsX;OxI*[hf$AH:'gPbIEhkmZs?>8HWj0bVRYGe)lf9$'WD\>^[S<um13EDăU"rzA#bXsnu$s1On=BUsw+8p($]nn$</UCL<]cM1*m:N2*s4X*$B>,]sI'Vo,K;3IăU"o6OQC%B?]A9LFi]to:%8Ejj&y]PRVWnSVP9x'0gfakAD^7?.QRs\+Cdmm(lQio0ăU"Xh-Omu[:ATxso;dTLohW/&a<Rg9NJu=Fpki8-B/l6X/1R%wUXAY$9>X;'H%]JXeăU"Q(:5ZIDoV?ZMr/n(+twM]tM:/(PB6eU.B3Zn4MJZR*^(ij7d8FE#)OdBApXOL:IăU"%BO^OuEJz+$eRP'KbTKwgmnHR#2,J-1Nu)0&XDX<?Z:ZU:GY%CYt/'NRxW\d,'făU"=p(5I9T0#L5<x'%7BU/(GbP'\bt0;/gMuNf(yTkaJWBq,g[G+Q<2Orfj*Sb(CGtăU"rfsiY9cBdQ1GVv:,Q]I:cpB_XNCot)8<F+iaGEXdqRk4W2VK;UY6R_l3+d];_H1ăU"V<]c6&$rDZWgHLe].1DMH$I;h-7qLT.ufsTLDVmqTLG=^Dk^Y6rPhhBu/FoD)mPăU"hlOM<WrvY8P?DB_:tHmsLD;HEJ)ril[KsqPMliIpl2]$2awt]=Tc12u3Qy&)7vVăU"-D-2/TwASm2j;(WM_G[Rz*0RosA<XiDj8?tND'DP$TdI?=Bhp4E$G]J9SUNHQ#păU")iV3#w)5O:2haqT:>_H=zU,-RvF0Y4JZ4G*[l2+Id53[D\fO57q=o+ltIzp[-N*ăU"bAL9w[Au]2h1qQ7]N*w<A&Q-PmFm+*8k/IPrsU-*v<B3G3X=QUEA+;Pcn;PLiY3ăU"=8OI94dup&L514bSP5T0,Nh(Gth.#swDo9PEUZ*kfNz4Vi]IRi8PJlOeRfda>S1ăU"XzmXAdG*N;'\7$2/LEaFMB&Yb]q.6'/wK,xU4Tm9(E+M/.k8c*=%cm'BZ-n_r-GăU"^b&xAzdS6?DF8dHdb[)A.&/clII[7:A9IaSZqT;TIOm^-wLM/.W0R).]sCbK-g:ăU"k$qMn0YN&8oF?<]rAV7d'9S*YnC*:P01)np(udfdFHZ:Lx]:aR*YV.pKZM85G%SăU"IT+t=KIs_b:hM#Z(Tu1EKKIFRnEc(XmR^oEXOeZ_V'*lgNRig+']p.9EA.KM?F?ăU"-4dU7L2_&W4D<Ch/aV7_6xLBH\,N^1Hl>'Mc)A<5kn]H/Cfc\Qh*MIa.VxgLfY&ăU"3NHokEEP>&oaa#FSfi90V1K9R1aInlT0&i-0<2AlG(q?[ea6R[R]AR<#2IpG=?XăU"cUlu(3\#f<?]tExO^9YzoOMxJlpiqy+^Iv\0S0*UE=RT)*RqX.e]2:hG4$#G2aSăU"Z[GWcdK]sPb;^Z%CB/Ch\Ur?GwL/U5U=D;Lo_'SC=LUXD<eY<lP.ns0O<B/MXvvăU"D]M#Z9>O&>&(x3Jp24+a<6nGSjNCe34]DLgROgI*<CVM*pL3pTd5bYSH%'aUKogăU"_fJ4JK745xjT8]ocAZmd<(+&v51YDV3dV+Rcp/n<%'n>B\:a/5uoVF,sB./7vShăU"Ogixt,:uxRr11LfEmo_lh-&LxAy3Z/LNsmSdZIud;T2ED-NR)BB[4-b<j3F1*P+ăU"A,,o.S#/Rk:iY1mKw*3(q:A7UR7]2gk98a^CmdO_K7k.1etHeK*v-$RA_#=)AU-ăU"Ass-CN;GHVG0<Zh':MK&*yy''Scg*88q(eG_Km_=l(Bm9b\w<D00pGJc=Ppb=k;ăU"J><D%]D[O\9MNgP077shY9(X2eaQH%q&/lxO2-./NMs4.r]EdWnP?hz_*WF]Ug<ăU"uZ_g9<mt%Ude<ri'XhT5x.AYpYnd3Pc\L/dANQYeDwBTg5OH9$U9;)7=_xD:5+PăU"\dOn9Rs()?A-&;YR'PPaAONo_E+)Q4k$/1+8ul)%C/^6V*&Z+,jX*nhnvK^YmI3ăU"Qh4V9O6B*joA9uZ8mNHEmUWl?fz+g4M&(&B-*/[N0Gk)E\*:ZJimKg>]b4-%e$năU"Sao$CeHW=pnV*?s0*w+B7ACjnM*qL9d%oo8/?exWAn[B\V+XdQv%kf9epE'jmE9ăU"b#92l9Ld?MZ#:BZi'Rgs5['CqSFc[<.:kZC+[HMuiUlpL:VzY_/Zb_t$7?b8m5eăU"]PWG-2mw(/7HB'PE0A\GrX$bPgA[=#wZG:&S]4i?qoxFjR8C#iFi%0/I1z0+Xo.ăU"'_9%3J?_0C^KeH'I;NN/Oqx<9;NEE*=w6ZBk<gC971-6tFI<v'[Y)PHm$6fw2>%ăU"%JfZvER0PgrQ.sls5hG+Nu)D-S9E7c/TKp>=iM[nlT9fA#&&b-aDV'tAOi>f]A=ăU"c8-wU3foBWjvPM5MpsW*AW.s**$^IJFvob:/iER$m3tE(mRumodUd7Xw1DoshnDăU"UsA4aDSf$OfWO1OL<2K0;5ngz*_p/yI5X<:8'r8T*qfZ:i+VR]Kp,El$VU21;pnăU"\'lXNawzM:Y2dRB9g?EJ'liEGn*/UiF*#,N=,cimU_VJhsmUJ4O$t2m'+GCxpEPăU"Bw[]#n^d&fENWb?^nkRrO]xYc5kxpABq%c9+VT5W\$BFm+Q355r<MoY*J#7l2/<ăU"B'b27m0\qVzW_kOWJ$,DMBsve%0OhB_Q_a23nZa,a)Fx1ZrcTe$g;H#vMq-r(C&ăU"6vlXIcT6-:%aiGUq<WOgY>5W'i<z[f<Agg],XHwF&_<fP[g2xte^;&mCi=fKa\7ăU"h-Gh#4RKWx8M],]/5wX19K>'#zRkNEU,pnUXPutJKrO<R,PIKiQRu6/cdh<>EX,ăU"\q#=S'Hi0TuLUpYBoYXc;'l+w<ioC-qL-'f4yWYatrq>_Sc^U?yY?WtfDU%93e'ăU"U-;,780c92&JvmrG'-ghq&rdwZja3g7Fp4'\p97FCJ;c(4t?RNhbcy1MOR1gt]EăU">Q8gp5j%SL3v)QqF64RF[-r#+QL>624:m(iw5?_i93R.%+5Me:$:Yf5rc'-s4k*ăU"T?2%F]e\)rcz%H_ok,Ei*<IWjZAq1Suped7u\Lre7ZA4khQ9<jk4l^PS_'z_$+;ăU"LlRur%;UVe;%eYXd=x;B;8'Y\^ssfRI,NH,OB4ZPk/VSUW9S93=p_7mS0sZ(1B^ăU"EYkEdFyb[isahqw)TD&glzMXle#&\HyP9j#'X-+GS5Sf;G(v2MC.(BluA19=;^răU"4s'nYQ9?a_MQ8NFZ9PpS\#fL&I*/>1K1+Deo+Bd:8i>L=To*ASp_/APbloP(-^kăU"=#TMVO*MP=.#KWiB$a.Q$Bj,/+fU:ci]%o_=XW*qp_f$'(i/7??>l_=AE0*$\'LăU"A-yi=kHYGoWBwO]=5k>m__dVb9n1m=a1Y7?9rv3kC#49m6P1AFKaFy/T)I4/$^jăU"AfRD]5*_Lrldx9+0a(]VCBwSv4r-#B>H+AZn6_/2]/..T&d^6+PaDoSaW3MCz42ăU"8BqX>YuEi6loG'43TH<pDs[6wj86SrDfu;c,t_Kv]02SED$TJw5'[TnG6_FO9W<ăU"bqttQ_t,;kj*KT)[T$1pGaemn][ues5:?EBn)KR2:^<u;\R[F1IZ.P5am^<bpamăU"<G*G$-U5(B\3/;Xl,mD^[gV(z=PZR=bL;2NpMgz:I1Pvn:^/^*2uSv]S_fYlVEOăU"TOQ[7zmC8VNBcVEGi*a2&7a%NJ#$/4-occD#q$G[j1(<bTJ2#B)feg<)v=_rWA7ăU"lXhAn\7qY+'IV\z)s\=tFMF7:_ttnEwem,b6\Vtr<7%z;L&uZ]ZMxk;AV-)'l4#ăU"wqRJ#5:GQ,V)]mOL.$6,:.,Cg1ZWT:Tiy8gL#H<>A)32fzB\8gxizclEP*Vb5;HăU"6;?g,[XiSq7fmb:CtN<HJpX)wXeDYS$06n.hMZ9Z_[OT;=-xrZ-G4gzMwB-cuNwăU"jVVa?u%Tjtbm(FtI]8kON8#nQr-*pOPEC$[QmlcnRJ&u,PAQwnVbThn=KFeRE[oăU"\z_1LbOlUeo4a$PV]6d;GhCa>dmT6iHrSvIoJ=vt08C5<h+$pi?'.AJC3$qA+yMăU"]?Q5JEPz*-_6jG]wYS;p'7Ipc<MD6c1hY5Z(/d105&-/Mva,#ZZ^I&daTpM&I%UăU"pQG=N2BSeYwC+,[jmH(s$$iN4yfER=jqJT]-ly?wRdH5'_QBGU%n+<D4[IfcgieăU"%lOj;]C8eBci=Z:Rz1v&\A#PW7FZJPCz]G_FJRBdIbP8,7xb.8H//g5QW.F?53făU"T.ex*d2jJ7Gm9r^<qX5)>=DJ<b3?397'A^]'*Q]_;1]FCGo>Ji)Y\Pa5)d]GeN^ăU"R9w%4zm[lo;2B=Rs7$jE#>FuhQ/w=c=rC%.7zl_;x>po&[7)uTkBMbgGA&6PWUSăU"DMx1Avh/gGB=g*3(;U<pw>ZhHUijiS[]b3=/rV_jX2l0p-dt$/QtEhjqBw1PXL1ăU"*I&]:?1T]grAXDn0z07mO.BRUq+^]sxXeLy/'x01(UnMLIM-DUd9$b0^BA$)O(\ăU"XT9)Y+E<oLO$a0*01/=:qM<9&sBU]/s38763Zi[u*sDlBnE,04c&L)XoW9wB;i/ăU".#QXO8Q_>>Pwn3r)S:R?dYo:[%HG.6>%K5B=\P5Q+LG=4:EuFKN'MO*v6q>2_wkăU"Bp;+YkQfE2PzC2:uLP>rJ4G]JG;xi9iyQ-B%OL*f3X$'^\a-Zo*F>Pr*Xv=^u3NăU"[S3JMs3a&Sr%YmbO6.=9%_jNL88.,49?R?(:fkmP_eJW6H'HoE3O0rHQ(40f5A#ăU"LuYAHy(.c=C.wDDAO\JtnID;'o=,NxsRO2S4uzh*%AnCe9NqVRYG7Tj2EjjpeH>ăU"Z+Ilc:xp:O>zWNnd[,e]EY*4X3Re;b7TP7&keYM#Z_P9E,IV9WDAhE\^De#-ADzăU"=kW.dh4srJOIUpP4Aq>nnr**kt#n?jmTIM;b46Os;&gTw<,k4bY?^kKNsM5jNfCăU"e_VC>J&7VMV/2?\TfhvH:['X$/u[UFY#T'C8Fdxax8\wQPc=:lm>7E5(/x?TcHwăU"%<\>bB3ot9Q%vL;JCSEF\&KI.QZDokT-Fi)$SoOol.gN#ubTsl%8,e#6(Aimc1XăU"$;G(I&Wr*VY:]_[(;>W?x[vW%;hSfctyBtq;W=>SZv;Iz99&Os%g6H(NaJo&9.PăU"D1zTz)Q35nb\-DS7OhdoNWi/b1:ZzMWc4sQms:mw3t;kL'i_oKh,)9.pHkdYk./ăU"(tHTJ_dEXskdJauriUq$'*(HA)VLrcF$X(v??>sg1()s4rRNYZz;u4*xMc(8l.)ăU"cqEcqdA+qP+Xus.3u*V:EfTQXV#<w)rc[iTnD<U)(y%x%?UofAgQNtCZfW3AyB;ăU"wma(__j\;iXr/uXL2j7K<8l_%PNBQEtR?[nF&P/7PFra0*pX4KP1z+.x;9*-l=lăU"c4vC;&-9gI':XBAsPd2SIds>ad.wC#]R6maZx^Z0\Gi%V=H^,x+ZfM^eZvrT:=2ăU"UZB,*57+_pgQ[C-V;wx9sL5Bsl4eWp02ZjQo;&hjWxM]_pRlm/%ciOhdsau2cL;ăU"dIs=-s>[c5]<+A:ftdTt;ms>;l\DC:Kk>/W:F<glUpT:k\y5?^vT-tmk(=;t=d7ăU"'R2%2P++eOcl:*l;978W.+]gZ?qJ+4-24#drak/hF5%3sD.TlTFvaF>]^;.)'RkăU"r,Z6NfMWybGe2g/H-FPg\a7<Sr_;6w>>Y2F3Sh+s(*E0vWm\f+B?BS1JE[sm]eWăU"w#KchdyAuLx]fibn^$S:0DSKYUKvatm=.MNMCG(Evx92JlBuaJaZ&:<w*'Vku%eăEND SUBăSUB V2ăU"]bI)$>4X5t15,fB/UE)p(dwHrD2$(s-YG-]_+d--%X6?Goj,3V+_A&1=sl/s1j<ăU"[M,6bfv8+jx(KRx46=\'Y=(Mu/HHf;Hu\c/:w;\%(pIDN+'G>3/.<5D>O*O4F83ăU"Q#/rbRg5AobD,]nlUg[:LW[k#PfVZ>V*ZI^OPRb*>/t-hfLSH(Jbsw0]p3qmg:DăU"i/lQp:WAM.g3'_AL+IV:hWqMdBiFar;nPX:wkHQn\kg&cSV1(IA3>yGI*$sM&WdăU"YZ-B\imo_hz:(+^L\dprfpM2d9CwC69ybW&)41=MmmZAYws:X9&beP:=&wanLp0ăU"7#[&gNkgc&#FYwrl$k?FM)<_;.oGdIs:M7;A3/ro/&g3p&Hi5.La:y9)N*\<dv%ăU"7.j^?F7ZWa^QVmndQMmfzw6O6YO5)&f0>]wtSU])^G(_CGgHsN7i-8nrn?w:my6ăU"#KtgVZ)SHq'v9.\Rz&Tlje;qs+s5;)Fxh;5GBB>K66dLNMbcL8wyYpO*7O%&xnKăU"'mIY'MBfL[WavS*:9vbXDlVLoZnh+YpdK?\WA_EN5KOU?-AqLRZ5mmr*^gYqMjwăU"?CsEr2L<84/=lhZa=wWl2HB7[?spQA_#yVU0<niG=KK#wq)7-(n]TWcnqOY&F?_ăU"A>Wm1A+*('U.ymNncaC-O$P/*;4ZN'E'AKiPPWuU;YY]#]'XtnhD.3+PQ]0,JQVăU"cQV0r5(^p7RT#lRq6LW>qO_1+#Oc-,*5B=;+[&>u+Ug\/Dl2WsGngI\g%th=&7UăU"z;i\In5HFmP&YTKgNW->93#H-Ls'[HID7C$B-MBQJL%ZSqKb(+q8-ItZ,S1[wy4ăU"ZHEJBjk7XtS'orqs+d1vAHBjc(ZB:Veg,Hbj>RQ+'O$sMNK<t35oFw>bZ.=2G+NăU"RN#RY_B]\<:[rU;wh_$gVDg1S'Y)*GA+L7v?g;.W&d'%lq9_3rcCJ?9bQQ%.tL:ăU"0=i:/7Ac$A$70.KEl>pxOq%KYgEB83uk9dCWh(C<VOGM+8v##)l?tU-[TJ_fh+(ăU"7$S0mf+,XG2p\G78\mRz%0LI-7[s;V\>[:p.1&-I=+MmjnyO2NcpRj*.cHCWo:RăU"#nErAGv>2FG>lx=q\n>0PcxYKg?9F/dmuNjO*[u4i:fwIXSZTqi1Mf:EW^\:-22ăU"n4EDxR:.22s1<+t(%SV8whUi,>I>c\#h_9['MO;Xd3)DCP.YeQ&n$GQfWcv-&0/ăU"G%zi#xRP?':QJ4k<^ie9qoRp:qG'^7Q[7(D;bC6fCUp,IdJjHQSyESYt-;o\EFOăU"1&V_[B'R]G_rG4hY>e7J(pfu4)V?b/QnZr'0<<_UH(:LJ,1Cn)9x\^I_^Oq_I=1ăU"mP>uMbV_=6c:H0'MFm[s3q4Lc6<j]Gfe\AlAjUJ=#XT0U&#:.bm%V[G]NZ64%G'ăU"0w)9]0c'__9&QM,xlBafU/#pa3t3j]*Z%jr;E+xNBPr<.W:m4>T1fm#..qOFWx.ăU")ovF0dMd=B()EV0,Ay_+k6[o98Po2_]3]Or2TjE]u(.<HU**Ppx,2ZWqg'^KokSăU"I_bL<dI?Sb0jY82\45tWINQiZBG7%\V'=pnmd'0hk'ae%)>VK5%>/(S3haaY5<OăU"N82UFdi'<Ym2)[+=ppxw\p/nID*Aq<5,h,KH_dMHSN])$deX[M<dMUjF;&d7bL]ăU"XK1B./6QN5:+=o*6p#LidklFg?Q]_*2Ti6F0<qhw3bSD.d.SV5-SX[4n/4Bl#00ăU"P;GK[<1_uodZN_H[n[Dh8;m9qo=.ah_T<>Xd5vN0J8pjc:tL,ts\q^LCifJV7-găU"pZrJgpuRnsVM==pHE2SK=X[hBKLGc*Ahhn;K#*R[h7r<kC9Z?[jOH57SU<\iq^6ăU"-Y;^tq6uOZRw5=Ed-arkuhk65_A'S\%a85$A)*m.=]#p<+l-M#/PsA_lz'mG&pkăU"dOdDeo(%K>XJc-,DXK:f8*l;7LqkrDFBbBElM0r,=8*mEBB&_Qed?\u-F^Fm'D$ăU"fzb]a/_qU-UZGDJ0L)s2g_O_p=L\J+)cX([;Im+Y+^Iro3VL7XbLFGr\(:*3N2[ăU"DhCjrN268KCw(ot#u\[%#Dg<q*ck]C-d/mbj.K5dx;y5lkIPA)6t%L5$YS[(pIrăU"hjJxxdEPDi+(^GV7inO4'QkE4m>hrlXraDMP%-4./.[1'a%K7k/p;#nTX6sD4AxăU"zKzoi-.'R,,=Bi8nT]F/meeMtav.0n&M*GOu)U\^c583%)o.*hHg>7LYip2.V_GăU"?hkab_?acY?]?wCe,\u8EbwJ$DwQiu[E6]xGfD[*o$Qk.f)+/#-8Y1aCsK4cs:căU"aVF$C9aX<x6s9(<mtnssirs7<agih$aqL<$L$o37qqF<r/wh#,p+pu<cl)Bhl<EăU"2rQP8UDZt)]w]]NHfct%kse&/T<c7'CXkWr&g#AWN^O;0h%\Lt_SfAj+IU;%NE?ăU"a4\sAf)W>wRbItR+L6*fTp8xBk:;#W$&[M0bl0(pPsIS;X(EegS.,2[d,JXZ]JgăU".2cGL(0PU+]DH8k8x(cs4IUT;&=B+]Y&Bfq(\BP?9W87:bO5X[U]'lO'f.\Je$2ăU"dD)Pxm,'47$/w0a-Mx,u%p()9%%%%-(%+h7=:][A'v3>%%%j[%%%,%%%%vYy%SqăU"ngEf*0GXyN.-PJG:5(WH5EJS/H_15HX&%''Fe.CX3EM^05AMOYXQ%vfC'P0]9\tăU"/1CmnSYpl$O)$fUBTSV'SwDJeqz_2JQ]p)*neGz%?H<FDA2iskWG,d/k^bXd.&JăU"6rXFTh?4iF^ute6HP-x):Zh.O-*ts$6/o%OfumX_ZjU%M_WKjd&W(,3=QRKjeV<ăU"'49n2hv=Sj[%-c-F+)6<%&RuT?:_JnQI71'O'[iH,,\[oQSjUy&MGifD-tJ1T.%ăU"9eR_pYzDeK;,X#HuMJl;\VJM0#&LUm[o%7Hj7.aA*,sli%Ujq66gs5X7-J2C]taăU"=Nqi[iEcsI-jQ(TGOl#Qj:p9Q6qZTP4,D$8%$3d-.>#5FItUVEpF%r%2OOd</wDăU"Pn::s?OXJaeU1X/5j=i]&G\C-Da=Tc6aZYa.GO(-T^z^9DF974h9q+k,Y'C[HafăU"(b:Fe-O;e;FN4:+-1i/\bdQk(H-J:LUL).rC(ZT_3d]SgZnCge:L/M.vl8*r2WoăU"1YJG](9n;HJ\.ttc;>XYbLnBOMczFW;?8]Ycgg97=VEG;wG>/2wj>2+<uhQ'/u_ăU"Hd-Y4W(zf_?asg,64S,n8<%'YdJIWY.wA6li8b[078ofn5tccGSFN7=Pt*vxWjQăU"20WAe?BR6A1tloUe?Wl9B#h-(B_-#(HY_4\.:qk\q7Zs*X#i;.JKV.DC^o($WlXăU"$GqLZVw?ml_SBFb]lR.=<0tsA3mor^mgdv>x[dy.?$c4&>]I'8Qd9l^G):o*M9tăU",Va0d;,/e8-WVQ0nLh'&/knrWceic<fDyjnR:T8lvE(IRyi<zJ$dHoMsl-cY+acăU"lvLTafK,j+<xq)X0'kf.]Q_bkw_;r)w^>EqO_+6&d?y:qV#4X]G#Cdm4s<U3N\#ăU":rP[nj%8KJlh1OC$=AkDLvtJJD2vwDe-z9_O\M9^GuNst=;$BndjctqfGM\V:r\ăU"$zr&mN-qI%P(W\k+u<DoNCgrzlwTS8wyhbMKVt#EhauktGqO#4j:]H[$Ght4=p,ăU"D/]S(O\<-:Y8.hn8a'b#TRXucPWo>n:wqvb$9mQ)iV_rD6*L:7\<W]j;SS0ObiMăU";ntkfH[EmkVsS6.7t0<knn:mH.]T7uHjw-uvPp5gQY<le-ptx4c>asfGK&;axVHăU"v8Mnbu8K-5s+4D]WyF0c?l(&ikXi)H$wPXOBClAu<%)co$bcN]6#\fKQx:fkv:dăU"O0Iu-YF.eNX>YLlbD.w_^2Vqi*do-Q%0s4OAqgCk6_D_fE/pDNhF;[jY6PqZfOaăU":]'HzXUDN>6&Xj=X*s(i$Kdkiy0cdu:pu\hWDrlfJkQ'ma$'<:v3I,<-ac<F[)dăU"SQ']K%Oj'swer.;53P:lU21FrF:/^;1VC:uDP(VQ)oeUE%T#&+Q8B$7^p,oZP'7ăU"2r>ysn\(*8l4x0(%N/cc%\&;q3_<j-iEasw(kIafa[Pood+ywpO_Yz;Iqb+eoBIăU"BBTRlQ,fqGf1a*_(wnB.IJxT=B4JR;QjWL]=4DXz%2yQ+1qqQ3M;^I;);?PGb))ăU"FjPW^Fm\<fa-crCBFj?E&^J\<DXcy&2GqyoiIg%jpbVs1_<tYE-=Ou.o&,#3N-aăU"d2>v*-.1EP2l^n>GQ-EePQ[R+m]6R$)N;X6$Yf&K:'Qk/#_XG)$xH=:EPZ6(.uCăU"/[vXbV:'4DWtQOnp7DN#ohieBpm_se$p\i%6FGkDsW^1)X'H.=6T2eC'cV+\T;8ăU"H(..Y4m+S01=9qUWT5/DA=\MX/g<R5);8i&eB$?+m6*_/&NFq4zpYe,+<YYxG,$ăU"FNlF'<Ec*7d4J&<:gNk*Fp%N&e_<-,N)\[Z4'*jIP-^USu4vlQ\PjRf4)K:e:qaăU"'9HY+X>5f]UCfsO3ou8;oUpO+S8;<uY\%58+;pa:Ak.,B,-Tmr\YTrZGT(GM%l\ăU"_N'%=;mbQ)Il(FjDE[ai;7FDE'kk=<?AlK.FucLs:0lWO?F\s>XkT(N68bLvGu%ăU"fc*:%Kd4.jYZ&:#E];k4&e-2eRnvFq.Y/K_gyAZp)sX-<Xsel^50?](Cg/dPr;^ăU"_6kHQJr9m>w6bMN-%L92Lem#h,Px*j'34VdLfexy3Pjohi?wcSharl8WHArhcI1ăU"?-O8+?fH__/j,qT3ai;c%:$W:#9ILYk+R'O$bwAoGPFT.VI3DXeCj]e&&;:H3jOăU"a?b01d/oRPg'i:nt<7HT]A<LETf$=f7Yi/QbuJ5R/7IU*aR9oR[&l<9)?yqhDduăU"wpeg._SGk&gD/%qu$bIQ'fQR\tJ;4\,%.k*v%1P6<N'ih\_K1Sd)JJ&UJKfj9(NăU"6[eo8x(U_AexRPIY-*47NYAdj';8+L^Kd;g.^$&C,?_*1k_hO&-tU;7gStET1*QăU"l3A6i[nbuUALMenv<+yI+Arg^pc5A:Nsu(KC^v:vNW5hlV'a0n/>^IWaQ'v&KRNăU"AhF/kyK[kk4<M4>$\m>3S-:BYMRFezPo-]Q0j:]h%$DAgXln(wWnBrqO\=jv5C7ăU"h[f]68G^wLc55<;lD*6i)AcolVmP/6krc#JcSJoTUB>41iDx<8b-&\7hpd_A*vPăU"A-*Hd8gC3N;Su$D/)&&;gp-aZK^CFKP%N%bTvVQ%)3kxTV%tv8&&)c+]r]+:qn<ăU"i#)&_f[n^NQs2N>\)8e]Q47o.<.J$b0XhQ2xC340-bFJHe(3[NvJSL1_1nrA?p5ăU"91*1.m#4p5JUB%%__T^.^.kiH4Jpaupi]Cch+5C[gKr[pKUNUkhj=C67O>Cp.ODăU"^VWCW$u%A?Oo-FlrDSJA\pK8Zu76Jj,J1<l/H\Jj,^KDLcZ+db)QdPO6wpg9CchăU"R7o3CHI^],3WJnu=wbaVagrS--vroMBX#%4lOPV1HKm$EIR:]iXO.;K6gHo;io?ăU"z.l;8BDWY)F[5I5=L$u]1=8'c[$GpJzKMxy&#pjK1p1^;S9<jD?H1asdGN72IViăU"<<(j/;iKl6[XHz_NvHo(ssSU+:;aW(X+s1A6Gh2])a6hNL4P%b817d=bq59uDDiăU"7a/d#]kS#i&XE2U979.P*J&&Jk0pB\LeNamugP)X)slIYt-K/$s0csF-5(4CsUuăU"Lc-gjgZsn<J=TmBT2[K3_-i]4Ahx:UV1QAWL:#5t\L9*[iOLMT>cb7ytlNddAk:ăU"^A/naCJ.OC*e<asO5s]VnCWA4bsDn<ca.TRLi=+?4C):)Iylso;&wTBV<LJe'tBăU"TO9;l=xfTJ$S:(X]T%7NG-F<CnjDWSQs3<Xo2]QB?+d<#^x>ec#0F0YbL_Icz9$ăU":/B)(rQFGcJ6'2qMsvT^w4dBPxFSB9q\6]bnO*vmYce;8.\ws$n%kZrfit<B9E-ăU"^(lGx6EWK9m7lsw\GQk(0[KYvq]i;gUXzaq<6\DiYd1ymM(,KWo3^[$o6-.WM/săU"GT6(m07wAgNLBgi0ZI4'o7mUv0(QGr:#P%27Hcl,s-;b-F4[Z,8cf;9d9HixxT5ăU"K_bByJM>ZVXiFdxNJax.$-SGlg$M]>N=OTuJIoGg2kA[U]UMK9$B/O)rNq:XG1$ăU"O9*6,qgsy1.5&*ynU.z*3]VC_6U#'p$2-lbXwNs/kajHjF.FQUhre<:BY$B/S)hăU".W<c9[Up\+nJF3mvaDANAg4*CMX/x[]7oiR.?b6&1;Yl=J$mqgknWt-WPiZ;YWGăU"t7YHC6j?H.t_g)ZW?jQ$lm1FGE5LJWK=m6/$VM]8o.P[DD^1K0;/qQpvRm.$/T1ăU"XGnO,ZKH4u1+sK+vwbXlV_M^iGo=(\0S::C1p-G9Z%z]9g*)epw;J:=ex#kIZ<6ăU"iiy-aBJ0$JM<T)GCb_20%fs3L$Z>=w-+i\;VNbj&,W8W^]r,i4p%3q6RKBt1#tVăU"AuMTERs^.E-Ugn:lBkx\wh^IgQv)fe*Q)zuBl*nqN%DJQ7'V86:+fS]toRO<uXOăU"GGI<^Af[AlY*#tpxLx6=c/xSt^g8.biV4^s#oXgZWv0tQ-Q,un=?tg-=lDkCEB&ăU"e6LgW[GN^pPa8RXJU1v9;Qc/kz;t<2ntA&PLj3TrT3kNL'ZdL*1[]kwXI'3r>.CăU"kO%.HfSq5o6k:E+#He1(X_0%NU?w*Z9=1\2E2?dg_[<f0K/h>:)$iR=*P18:c/qăU",UjU*8:/i_p:uZx(>?B9$[D[E&SwQ^A/;]p7-;9AAwiKy&o=;g4.1p135/V?9eFăU"<a;'S%Q$?mpY%cY&K:ZX)MIh;d)K,Wv),x.Ow02w:x/adg>LphK]$L^$xr_N/:]ăU"'a*l\qrD]g\L$XH9.f*hmaUHN(WcRrA;R4pX>TAJHBNdS9Xd=L]3Ur5PZ?U6<>eăU"hk7-ZF,VII<(pPuVrN3mB;vwr+2>DD*f^#EairUU._:&Rtbjk2g2iyQnNgNsKm(ăU"V&[0t*4*8EVE\jq5A7T:orU:0&G\gqoK<Qg8vKi<9\^N(h>OJFTb>7=#DXF=k3yăU"/RX;m=z,f4(Soai,jJ,=8a7fxpjYMEW6JJwl^ww0a+Vwt9M6fj8Yhe1&+hc([EIăU"MA8lj_N0]-,j9TyU]YVlIWJ.hm3O/g(vQDK>QP2'cmZ9i0SY[uv#h8Y1%Ooh:.?ăU"hMiA*[pfX_\eNM\F[SvY2&1?U=&cDerBjJAkfTI2ld=mtw%'jTQbW1_>\lTVq%3ăU"/^LTap4?^oVHSVcdK#)FJa&Xc.W/v6W.g?,)U/n,&tDn&6PL*&&8Jvtyml4w3eqăU"$IXZtQb3A/MJ9bS)r/&qy7uX=O)*B/brOnnft0+jTV$\z;QJGEE-:FI^$]dgD^&ăU"O7NLFNMBmM-0Nt^#'KLUXIU)U78U_>VyUOKR,^G+eD?\P\3_+wPbAEp-J6c]+C$ăU"Gx0NskGI4jLw.=]JA'LrF3KXlN7Z<QN)1p2^vQ#7iULAY5<CoBG'IzNf%[]p<9_ăU"i/K)qzh[ae]/;4]\)GhN=.VU<w5KC)I&Z7E7e2QJCoedpUlBp>+J2>CL&9W%4x#ăU"lhwlS\f(buPg\/UBS#Q:#XG:JhcYaubE'\iqm7gZiNZ>0[(XmIZ&(swx/&l/\CAăU"Y0R<LOv0eZv^BfssY$C)[uaE]csIf,.lNAZYDF^ULcGsXG#FpUev3+:&%8cCe:>ăU"=pg<8hfPlv+8SENfS-R?c#4,Q/k-7OOzjaRe_Z.8r'/nS8\#cd]tkC[5X8>4q0ZăU"+&C'+oU*U6f<P#\d,<=FAj,;tlqjn(]kek*&udlS1P)4+iS=r,+WD64d&S0]V<,ăU"rMecHY:Al(ez#a$?IrHFen(H)b7W<12ZE8*bE%LCAVNa0,x?rqlD>60tM=3_'/CăU"2Ab#Fc&qyvwJj4\s8vVCWR-t9vOn]>u#O25m8P+.qd;hDaeKgzbo+3\)9ikm_nFăU"NbI]q\J<?jmvNG?mi\]M31$PwFy;YQf-YSnjI^3ZOgkLjcT]XC.T7++J<y8->5făU"dTVKbCFIN[u*gv:qC/hI^prr6nljcuq/+$\EQHbDowmfE*pE[x?$4\_tn>G.Pg%ăU"3.Sy'>-mOLQu2L9M*5LY1Ou%<A4u,(\]DqUoS#4ZX2USo7:TYlY9gBSUCt/8h9SăU"lJFYI);v',BLQnOpryXhQ3<X)k?5^'TWP7]F+LelDRz^0E5qZ[/Y/P26%Gb>bUpăU"dmBCTWruZjx_6PF]+e>u6,x2yVOhAx'*:R&*uT?Wu.0lc^5j+>,m1U0''<6g[E>ăU"UPS&U=fX.JpeyU4+?=)P.vF2hh/CYXaBg)W5>jh32^<6\&xM.GR_MN&#Jy]Vn1HăU"[uukH6?Dw\Xk9MH7Qj'YNSiYqQrokRD)ij:lBRvCaZO;DRJIbqO7G2m-c%G=DmIăU"m',)lqg8YWCLS^$Bs*.F#Ir&%I2<J7[j1Yd07b%;I%p.z+N3]pX(%Pzzx[z+z6'ăU"?C%X845UKm:-Jp?Ra'voONY9JFxNf7N0<0luq06JXYlQ1>nmBGcp^zk-HwPA=zpăU",Vst'GpR8,\K49&iU9Dv(fB5oO$Kc9K/)O('_;ges6D#dc+r20\oHm2K&C(ajeTăU"[5>%jgoYS8o-qBk2oKm3<F\E&RvXd[zXo*>t:Z>4oV1I)zZu]xxRGGWLGFI>RyVăU"/3G&+.[zZi%Jpp&_B/v.%mzHz(RiC%FnNGFRJRWtq9$D;_3p<.$A$kEOVv,-\BwăU"qTP6MMvkwXxq&M4+/6tbE)1b5$k8BNfhLtbx#d_ZeJA2^Z%NAaI+k.B<Ii%/jBIăU"+4au5.ZCrk6>8S:Yg.=he:T,uKbnes[:eYHn93#R(OS9Xu-RoM7,hf]JI[h)[x5ăU"V^%n.L7m#RaO[Fvy1qmRN(ydpzWlwcLKG&bQ[hUw_&r/^#7zmHoS9DFv)oAL%*4ăU"]Lfrl#Dc2Orj)]VBTagzP[D+0sb?/G9.-N$x?g#8V<QZ+%\D<LF8vPe(rWmdVC+ăU"m?tne'fA9lj4t[TrEd:n<9=^2lk6kTs\CwJN1L6P]Q#oqor&TE8MG.W6YIKi1G#ăU"H:/,WXz%oJ;M91J6sl/YhCa-mD-pLDAOS_p:cer,z84rNDyT6q/-DZ1u^.zVH)PăU"j$wvIM4rk]gH*6.hUC](O88kPHah##%03v>):0uk,cXeHf5.b96MN4A2w*rUy>\ăU"j;/4d52c9qOpz&.#NbD%&6&]pHS'.e2&r1z^QZE79[a0V8Xochh_q5Vto?wQXiHăU":L)JBp/c^Km1FGM[Jnf=xO[;hPZw\w)Rb&L)o7FUj;kL.;iO2s'[y]o%X&:Dx<YăU"fn7W;5?3[I+WRmKP^A+ZY3MV1^6a^NCacK\\j'x<VfTi?Bica84Jku=$rpmw^1$ăU"dL5^u+ar*vaM-PNT]8t\L%l8rH:F)Uw:LphxHTh3<b*+NexKnzo;&/[/NL_lRv)ăU"CEJ4=gljNN-'h]+DuN8jE-mc,KCq-TXJT-MttMY(3;[80T#SrHqN6u\0cKof1=JăU"<o'1k]^9DDSj\W=:R(h=hVvTEwlXbsX^.3d*S=;:gFPTsy)#rU#[dgeRC;WmkV^ăU"bfXsNcWu=7+fy>4Trd)d<,2]U6diZkDDEM(k;fR2MTn2_;n;q$ZV=;-p1.nQIT$ăU"SWbZ>5$f#'PH5n;TXWAEWRO+L;jW8M$GUJc;8OiO#x0PTP%&?)FmO/bN>R)nP6=ăU"H)9Z';xU0ni8duju[2qwh/C8Mm9dU:6qLFuTUliU<p?Q6VabGBtlTK\UF?nTBaOăU"o#l3ISk8e#'T*sRIq\075s4PH=-eap%7H[ndS.:=nMoQ3b?]_<P0$SNcKjCSx2GăU"6D#l\/'$HyU%pKML$*KlK+RaRk9*-Kb<iU:TBZ&lD(jTo/W8MU9Jc0X/'Cy9f)EăU"N6Y-F?phj14ytDI,)Xksdza\an/HZ:]J'At'4I1n$a:3p+&(MJ(YA:r3++Z)Ct7ăU"C<1F043Lk9#oYxeM-q$M4L^7sq2j=<Pz=AVbsH)W-Akdp6DJ8=V'%Lh74m)mbB>ăU"C(UxB>dBGW)XjVfx7G1AB/#Ka4[/C($DkMw&88MU_wp<M]WWQ$Zh<W8Lr#DpNGXăU"5MmfD34DM3%slXtE>6QC7gZo/6C^?K#ndW]w]Ne6;e#2_(O_3$%s)VR_^*P?7CBăU"z68Ch-^<1nEXM,m#;$m.#^pn)UY9gl,B>.bTJF'$l]39pvVImbLr9F=Qlt*5.9iăU"JgxT;K=<??,9y0Ek3ERD8ihfG,6ZT,8h=i5.^rW;j^c(IDBp4N15vc48\dBSrX9ăU"6p-C/0gV;tY34TR=6:#7Ng=?t-xJAD46mMT:]*ND8lh#'%zwZ#4eN)#/E_w,=+<ăU"JXbV'Ff49K43Ax-XR?1L70K7y2(WD7uaEJPvy=Jgu#+N,pu7[2)-T-]Z&%9II6KăU"Bp'grR'('5TJe7du4Kfeev)Z/,X^r+M8:;2,MF#r^F=ua(aUCQHb#eOyQ^iEZ^(ăU"vP,P82bdmr4bMkyemtnwxoXd98eDWcw7+k^:u.5+t6>d?7RaU5Ina878pGBL:rdăU"f.h=196tasqhe$H>u2F;v4OT+>IPNJy7inMzhj^amobaDP$:4Av?dWTXt1]vtO?ăU"9Z]sD2=3^X<uH>]^hIZBj=Zq>bc-dOBBsWmJfA5/#qRB]THv=)r.leZu16QZgcJăU"W<]?eFo,u_D4l#2]<$ju+tB?RBKTOtrzSh^s0^fEZN;9n]TU'BmB-xejM5da#iOăU"[6vlV,6(1YaoNKtEvx/uC\wnVc/Cf*ZV)n9q6:]WuW9XCS26M.au^DR4y,8E)YrăU"VN<;%nfP=WcKNqv0-iXup%&'9%%9%%%I-%1E]GEMH-34H..%%SG%%%/%%%%%%%%ăU"%&%%E%%%%%%%%%vgiw(f&Sg%fxup%&'9%%9%%%I-%'K]GEh??&6WJ[%%<x%%%-%ăU"%%%%%%%%&%%E%%%%p.%%#iwf&%Sgfx%up&'%9%9%%%%-%&+h7:c][Av%3>%%%j[ăU"%%%,%%%%%%%%%%%E%%%%tT%%%vY%ySqn%gup*%+%%%%%(%((%r%%(%Qm%%%%%ăEND SUBăV2ăCLOSE:IF S=12AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăLuke Molnar                    ULTIMATE FONT V1.1             Blood225@aol.com               06-17-96 (10:08)       QB, QBasic, PDS        324  9699     ULTFONT.BAS ă'         Molnar \ Kucalaba Productions' "Ultimate Font v1.1"ă'            written by Luke Molnar in not very much time.ăă' Remember, "Gratuitous advertising is ok for non-profit organizations!" =)ă       ă' Questions, Comments, and all that other crap is very welcome!  EMail:ă'           blood225@aol.com, AOL Screen Name : Blood 225ăă' -- New in version 1.1 --ă' * Incredible speed increase!ă' * Italic font added!ă' * Very fast loadingăăă' This is a simple font demonstration.  Feel free to use the routines, bută' you'll have to understand how they work before you can copy them, or ată' least put forth a little effort into understanding them.  Or else oddsă' are they probably won't do what you want them to.  This font doesn'tă' include the extended characters (129-255) because we think it's a wasteă' of disk space for trivial use of certain characters.  If, however, youă' want to change that, you can easily edit the MakeFont routine.  Also, ifă' you think about it, the basefont data file is WAY too big (the 64 bytesă' we use for one letter can be reduced to 8) but it works and it wouldă' be too big of a headache to change it.  Oh yeah, using these routinesă' and claiming them to be your own is strictly forbidden!ăă' This font routine features the following :ă'  * Uses up to 63 colors per letteră'  * Evenly shades each letteră'  * Scalability (is that even a word?)ă'  * Extremely fast for QBasic (Well, except for italics)ă'  * More styles can be easily addedă'  * The routine itself is pretty small, because it's not a whole bunchă'    of DRAW strings or LINEsăăDECLARE SUB GetPress ()ăDECLARE SUB Border ()ăDECLARE SUB Font (text$, XStart%, ystart%, xscale%, Yscale%, Style%, Clr%)ăDECLARE SUB SetPal ()ăDECLARE SUB MakeFont ()ăDECLARE SUB FindFont ()ăă' Instead of *slowly* reading each byte from the font file each timeă' anything is drawn, we'll dump it into a buffer.ăDIM SHARED FontBuf(0) AS STRING * 10368ăăCLSăSCREEN 13ăă' If you want to use this routine......ă' Don't pay attention to this stuff, it's just all the page stuff.  Theă' only things you need to know are the Font routine and optionally the SetPală' routine.  And the FindFont routine isn't of any importance either. (Well,ă' it's very important to this particular program!)ăăăFindFontăCLSăSCREEN 13ăLOCATE 10, 5ăCOLOR 15ăPRINT "Hi.  This is boring text, huh?"ăGetPressăCLSăSetPal  ' Sets up the colors quicklyăBorder ' Draws the really fancy borderăăăăFont "Molnar \ Kucalaba Productions", 20, 15, 1, 1, 2, 126ăFont "on the Internet - Visit Today!", 20, 30, 1, 1, 2, 126ăFont "M \ K", 15, 40, 5, 7, 4, 0ăFont "FTP", 80, 100, 6, 3, 3, 190ăFont "ftp://users.aol.com/blood225/", 30, 125, 1, 2, 1, 63ăFont "WWW", 80, 145, 6, 3, 3, 190ăFont "http://members.aol.com/mkwebsite/", 8, 170, 1, 2, 1, 63ăăăGetPressăLINE (8, 10)-(304, 190), 0, BF ' Clear the non-border graphicsăăFont "There you will find...", 11, 15, 1, 3, 3, 126ăFont "Over a meg of the highest quality", 9, 55, 1, 2, 3, 190ăFont "QBASIC programs available,", 35, 80, 1, 2, 3, 190ăFont "including", 49, 105, 1, 2, 3, 190ăFont "GAMES,", 149, 105, 2, 2, 3, 64ăFont "GRAPHICS DEMOS,", 28, 130, 2, 2, 3, 0ăFont "and", 40, 155, 1, 2, 3, 190ăFont "EXAMPLES!!!", 78, 155, 2, 2, 3, 126ăăGetPressăLINE (8, 10)-(304, 190), 0, BF ' Clear the non-border graphicsăăFont "VISIT", 38, 15, 6, 6, 3, 126ăFont "US", 108, 68, 6, 6, 3, 126ăFont "TODAY!", 9, 128, 6, 6, 3, 126ăăGetPressăLINE (8, 10)-(309, 190), 0, BF ' Clear the non-border graphicsăăFont "Coming Soon", 9, 10, 3, 3, 3, 190ăFont "1) Sub Quest", 19, 45, 2, 2, 3, 0ăFont "2) Pieces 2", 19, 65, 2, 2, 3, 126ăFont "3) Fury!!!", 19, 85, 2, 2, 3, 0ăFont "4) Ambush III", 19, 105, 2, 2, 3, 126ăFont "5) Stick Boy", 19, 125, 2, 2, 3, 0ăăGetPressăLINE (8, 10)-(309, 190), 0, BF ' Clear the non-border graphicsăFont "Fury v1.0", 25, 10, 3, 3, 4, 126ăFont "* Digitized 256 color graphics!", 8, 50, 1, 1, 2, 190ăFont "* Sound Blaster music & FX", 8, 65, 1, 1, 2, 190ăFont "* Completely mouse-driven", 8, 80, 1, 1, 2, 190ăFont "* 3 levels of mayhem", 8, 95, 1, 1, 2, 190ăFont "* Two different enemies each level", 8, 110, 1, 1, 2, 190ăFont "* Unique soundtrack for each level", 8, 125, 1, 1, 2, 190ăFont "* Numerous Bells & Whistles", 8, 140, 1, 1, 2, 190ăFont "Download a test version today!", 20, 160, 1, 2, 3, 64ăăăGetPressăLINE (8, 10)-(309, 190), 0, BF ' Clear the non-border graphicsăFont "Bye!", 60, 20, 6, 7, 3, 63ăFont "=)", 98, 100, 7, 7, 3, 190ăăGetPressăăCLSăSCREEN 0: WIDTH 80ăăCOLOR 0ăSYSTEMăăăă' For those interested, here is how the Font routine works:ăă' Font Text$, xstart, ystart, xscale, yscale, style, colorăă' For color, 0 is red, 63 is green, 126 is blue, 190 is purpleă' Of course, that is dependant on how your palette is set up.ăă' 4 styles....ă'ă' 1 = standard.  Best with 1 scale factor for x and y.  Like normal text, bută' with a calculated blend of 63 shades of a color.ăă' 2 = circular.  Looks bubbly, kind of hard to read but still better thană' boring text.  Drawn with Circles, play around with the aspect for coolă' fonts.  The bigger it gets the worse it looksăă' 3 = revised 1.  Filled 1 style, slower but better with big letters.  Noticeă' how this font always uses the maximum amount of colors for better appearance,ă' there's absolutely no "blockiness" at all!  Also has kind of a "3D" appearance.ăă' 4 = Italic 3.  Pretty impressiveăăSUB BorderăFOR x% = 0 TO 32ă Font "$", x% * 10, 0, 1, 1, 1, 0ă Font "$", x% * 10, 190, 1, 1, 1, 0ăNEXTăFOR x% = 1 TO 19ă Font "$", 0, x% * 10, 1, 1, 1, 0ă Font "$", 310, x% * 10, 1, 1, 1, 0ăNEXTăEND SUBăăSUB FindFontăOPEN "basefont.dat" FOR BINARY AS #1ă IF LOF(1) < 2 THENă  NoFile% = 1ă END IFă ' If the file is there, load all the crap into the bufferă IF NoFile% <> 1 THEN GET #1, , FontBuf(0)ăCLOSE #1ăIF NoFile% THENă KILL "basefont.dat"ă CLSă SCREEN 0ă WIDTH 80ă PRINT "We couldn't find the font data file!!"ă PRINT "Luckily for you, we can make one if you want"ă PRINT "to see the demo (hint : it's worth it!)"ă PRINTă PRINT "So, should we make the font data file?"ă PRINT "1) Yes"ă PRINT "2) No"ă INPUT Choice%ă IF Choice% <> 1 THENă  PRINT "Fine, be that way!"ă  GetPressă  SYSTEMă ELSEă  PRINT "Hit a key to make the file...it shouldn't take too long."ă  PRINT "Oh yeah, don't go ballistic when you hear a beep, that's just"ă  PRINT "the seventh character of 128!"ă  GetPressă  MakeFontă END IFăEND IFăEND SUBăăSUB Font (text$, XStart%, ystart%, xscale%, Yscale%, Style%, Clr%)ăăpx% = XStart%  ' physical x and physical yăpy% = ystart%ăăLHeight% = Yscale% * 8ăOptimize% = 63 \ LHeight% ' Any constant math operations done multipe timesă                          ' in the main loop should, well, not be doneă                          ' in the main loop.ăăă' Instead of wasting our time with all this MID$ garbage to access bytes ină' font buffer, we'll just take a PEEK directly at them.ăDEF SEG = VARSEG(FontBuf(0))ăă FOR h% = 1 TO LEN(text$)ă  FPtr% = 81 * (ASC(MID$(text$, h%, 1)) - 1) - 1ă  FOR x% = 0 TO 8ă   FOR y% = 0 TO 8ă ă    Col% = PEEK(VARPTR(FontBuf(0)) + FPtr%)ă    FPtr% = FPtr% + 1ă    IF Col% THENă     SELECT CASE Style%ă      ' If you desire a y scale factor greater than 8, youă      ' must change the division to higher precision...very slow.ă      ' Or, you could find a way around it.ă      CASE 1: PSET (px%, py%), Optimize% * (py% - ystart%) + Clr%ă              LINE (px%, py%)-(px%, py% + Yscale%), Optimize% * (py% - ystart%) + Clr%ă      ' Notice how this style only uses 54 colors, so you can see the topă      ' of the letters where they would normally be blackă      CASE 2: CIRCLE (px%, py%), Yscale%, (54 \ LHeight%) * (py% - ystart%) + Clr% + 9, , , 4ă      CASE 3:  FOR sty% = px% TO px% + xscale%ă                FOR sty2% = py% TO py% + Yscale%ă                 PSET (sty%, sty2%), Optimize% * (sty2% - ystart%) + Clr%ă                 IF POINT(sty% - 1, sty2%) = 0 THEN PSET (sty% - 1, sty2%), 63 + Clr% - 1ă                 IF POINT(sty%, sty2% - 1) = 0 THEN PSET (sty%, sty2% - 1), 63 + Clr% - 1ă                NEXTă               NEXTă       CASE 4: FOR sty% = px% TO px% + xscale%ă                FOR sty2% = py% TO py% + Yscale%ă                 PSET (sty% + .4 * sty2%, sty2%), Optimize% * (sty2% - ystart%) + Clr%ă                 IF POINT((sty% - 1) + .4 * sty2%, sty2%) = 0 THEN PSET ((sty% - 1) + .4 * sty2%, sty2%), 63 + Clr% - 1ă                NEXTă               NEXTăă     END SELECTă    END IFă    py% = py% + Yscale%ă   NEXTă  px% = px% + xscale%ă  py% = ystart%ă  NEXTă NEXT h%ăDEF SEGăEND SUBăăSUB GetPressăDOăaa$ = INKEY$ăLOOP UNTIL aa$ <> ""ăEND SUBăăSUB MakeFontăOPEN "basefont.dat" FOR BINARY AS #1ă' Hey, change 128 to 255 for the full font.ăCLSăSCREEN 13ăCOLOR 16ăFOR ascii% = 1 TO 128ă CLSă PRINT CHR$(ascii%)ă FOR x = 0 TO 8ă  FOR y = 0 TO 8ă   pnt$ = CHR$(POINT(x, y))ă   PUT #1, , pnt$ă   pnt$ = ""ă  NEXTă NEXTăNEXTăCLOSEăOPEN "basefont.dat" FOR BINARY AS #1ă GET #1, , FontBuf(0)ăCLOSE #1ăEND SUBăăSUB SetPalăFOR x% = 1 TO 63ă OUT &H3C8, x%ă OUT &H3C9, x%ă OUT &H3C9, 0ă OUT &H3C9, 0ăNEXTăFOR x% = 64 TO 126ă OUT &H3C8, x%ă OUT &H3C9, 0ă OUT &H3C9, x%ă OUT &H3C9, 0ăNEXTăFOR x% = 127 TO 189ă OUT &H3C8, x%ă OUT &H3C9, 0ă OUT &H3C9, 0ă OUT &H3C9, x%ăNEXTăFOR x% = 190 TO 252ă OUT &H3C8, x%ă OUT &H3C9, x%ă OUT &H3C9, 0ă OUT &H3C9, x%ăNEXTăFOR x% = 253 TO 255ă OUT &H3C8, x%ă OUT &H3C9, x%ă OUT &H3C9, x%ă OUT &H3C9, x%ăNEXTăăEND SUBăăSteven Sensarn                 SPRITE EDITOR V2.0             geocities.com/TimesSquare/2609 12-27-95 (15:01)       QB, QBasic, PDS        131  8675     SPREDIT.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SPRDT.ZIP",4^6:Z&=6240:?STRING$(50,177);ăU"%up()%/%+%#+%\GnjDDe6>/V2.%%FR%%%0%%%%xu%wnyj%WSgfCx0/J%,+#+'41ăU"p(%.,0.%0.,;%,-+*%+,+*%[,;<%0/+-%/0*+%:)+<%*/-*%+:+/%J+-,%=/,/%ăU"-0,0%)J)J%)/+)%*9*.%Y,+<[.?Puuuutt't10Q%0Q0a[0QP%%1&GH%9:[\h7XiăU"T%a*+7mH9^oYep<FfMDFW;naQ#o.+VW.DjHl>07Bnc&Igr40TR52HR#fXv*KtqlăU"gsX?G1vK2^*lfua8I_YW]0fkwo*\q%1TfNiEc=k3)2]]$fT.=#3o4mb=$xfI1MaăU"^8W<Z[2bl[$Fpa5Bl3$2]ED^C]1:/J%hK2gYNt<#J:A[NS07]jq3GQauf.WGdTqăU"MTWf#Mfuj1OkK/7bK+,VsoA;fr;L3BnNn0dN$nF5WIkb4Xfk&dT1oB3dmhqAMh:ăU"&fUCYE;qT,2p\:]ZBF5Q<Il]iT^bT5RWo:,[f+Z&;LFcFU8:)6Kt*qnLvjxU'FaăU"NNUuw*Y>M0reA?iCRFkv]?D*0\rus(q[DIpP3_NWuLjId>/f8YsCMq^+5NS>L/\ăU"l>M%/XX/_k]YGs9?AG9xV+0WIF0n+Yg<s=WlxItbcAotwLfpjhHV1VUexJq>3(XăU"Q.RrMKtlRH?X0pL9Rj>NcVGD)QxB>D)N5kv,#$B4'x]9j]>vYO(vcsMj/<Ow&#găU"CJ]G4#_p</x]B:U9T;1BwDF-e'ysD>epQWI*Ns%mT:t']\0%;:4wtM(Ts(O>P/9ăU"u<cNZo1XF%M<s/F]G+Hq0=wHD4-X3PNmCj=xg5U\J7bxE$3l&Qr;Hv4:&w]/E$xăU"X,76dLjTpv7mv,6/ol52JtM]:)j:^v$9+DDfruC8P$s#-(<h?I'6b<G$t<6%a/^ăU"hCsNcCrEu?BB;hL978WVI<ouvf0P1CFIoo#.<x_<^a4av4/(2R&ox--72wm:Rv<ăU"f0bWScDxNhHTxN-X#gMyalmagPTo*Rr]&j0lthjmE,T<\U4(MDbPkhTi)0f]c%[ăU"#>6#nKV8yz7t+*\.Rj=x_qrJ2Qx^F<Q,Wx^rB1/M'ddLL*^snc35d[LaHI4.pn/ăU"h.H2[b:GdSC);^4vivdO$37m3l2^7#$B%FrLwXX*6w]YN1B776(P6_tSh&i-?sVăU"Y*Xk=uJV)EtKXB\,65s-geR$6,LBWIX(jR2qTrZSp_jEz8]FlM=rT>8)mrLbb]+ăU"2xr3JB3#C%3:WTgQQ%l72jk8<L/2CNE/E-)chIe\J2&ClPbij4-ItMe8iZ'g$.LăU")]EQL^XZO;2g,4B=iQ+ST.#GAm.2:&]-p:e%3wAs7r[&6_'R>\u7W2KBW^Vs]6WăU"_L0/W.VKeo+v&N7H?B\,^vHvbIU$dk/[mD2_=]Q8<V_T#m$%]*9()h$nV*^DhV4ăU"5<u=hCE]=09t1uL1'a$,]74hhY72'#sqYWs-:^<[EG%E&dt%.,\4]YEr;+F>$I]ăU"X+>W*B2iKq9X9<<uL=CEe-=9tW[M+URg%:]#uGGFBc#HwECW4U00j3Yq[XrAgqsăU"wQFC3[[FDnb3.40a$R1umT:#)H0(o+9cwETr9[kpEF9R:-7M[.gUkOpi'eTi2;3ăU"X_B*;QKhEb;M1(Z<aRwUZXI]3?GBIx,w1O?p?tN_9Z6QOH?FFho7#.D>og%)rrgăU"L.qw'l4QkxhhurbJlM.Tnitnr_$n]EWUY[uE+k$D']Zo31k3L,m9A]p1W8F'p^qăU"MIw]cn3ww'JUd$#$dXj]qI_j/bsK7tlqMpXY3h$NJLn0rw7%lc__G'g)+?YcfO]ăU".])UPPUEd$+(%).k4D]qv5euoTRE#C^LrJXL(B#Sd6s;Uk,310S13AV32A+t;XtăU"NoeBnqx%95]U[rwaGQfhLK>5>1*jeo3fI2GCzbM0LbT7^MNMBkp5:PA]C1aa\s]ăU"/)1gi/Ce#3fgX7AYU]orf;)->2ZcWP&Le8o$ezagHZ)1.&[pmUf7;<fMjKo8:>?ăU"1enB*2>6Y=H3*?3AV$ZPiYsFnr=_]^IiH=Z-mH<\9ER/AqFtIqu9#$[_Cl(9O#:ăU"_Vc<YC#a;0Z^CDQ$Ni9R>$fc4fx4a4y4/AZ?dGyZ]:/LE'TF)S_]9ZC0BtY%W=văU"CM9+_caIDqphvQLi)RJ0g=D-[E'4?/e[RCsn>+E^H5x#XH\CrAj'>hv]X7pTMHtăU"hmO-xQc[F9SzY#LsL]G#Z8goLCEZ'+si'^kD>#+f\mU-_*H#H=O$I)u-Y7',kq6ăU";l]?bkd#xLPRnD_4Qgl<R,XP/j$SNRr0()uZ;uc((_#VoAkaAC;OF08_i2<n,#qăU"=b6xh8w4OQVcmssc828r7F=ae/hA'w^]+SnsM7et,e)^VMk.b=#yR=4JIHT&ar$ăU"hGX6:=Te1Jqk8Tnq5_Be&UioW\G6#4yuW$qtHUubHtA==EqPVLnAk/,3-W]n:b:ăU"aT#.j.U=)E-I&j9g%9.Sq;Y3vC0\?)A1Iia[_Fddh_#1Lo2&YGU>h)4uX-__>#AăU"1X#V/<ipbJ8V+]*y:4dWa0xpM>aO[?x^j'J?LdD]\K)#,3lri3]g.,RBIDlfJEaăU"GwX*Lqhqmn&Q=K5ON5sC63BY.[e;yN'f_Ca82K2:^_2'CBdXK_MUZ/qdUBifKO0ăU"5Wk%Yn\Ce#\tM_cg+/iy4<9BY]DB-zaJ8G).y$eV^YA?,$09Bv?e[NH^P&A_Uv>ăU".8mMk.PsS[>yB?8B]j$dgwZ&4hlvGU_gJw1ocXo1i4Sr:zX9P)Ld-Mc((7J:[wNăU"2&D&si_B'2ak0PIs&QQ_67hk?aa.TKrVHgJEr-7uI(Y]FGJ9P3UQ>0:qOPITe8%ăU"STMg'0Lkgb>c''Mjt=qrRDBcE:O\sl90^pYCKU(kH)L99&VEMDOPAV_5)T>CiQRăU"42xE/p0:1P&Yxd,,iO'1B-2]V+O-2s'K+kRLoWIZ^M4y*1-+Wk^*ZeE^+Z3JDw-ăU"61'[:v>BD)qWUk<l/+9=wg<K]q0hcbl8TJ0vp4Qi#u7c+AEUE4=wUAMV\ZoZ%UYăU"7MQs;ott(M;]rh])f$)XF%%q=YikA%2X97hd#k(K6r]KH:SuVYPGKz'w],JJ'l/ăU"Y_om2JLr;x4q<K1Q:f8sEmoGY1,Q6hXc>V_s>S^>^?#A+^2#*LS?37]MGH9-O7[ăU".crhi'R=BFJ1Dk]B#Z5*H:T#=#>M9tSU+-\;If:obiM9*?bne[]J9'5)1q/[Ga1ăU"D*aVFj%fSZU3_un5Yi]5<W0a'cdi:9]wkju)0[$5A.=mDo>g53)>JaAN+kqwVHiăU"dMQGD<I)wKz%C,21]7W1RsM1'C.VbTh0Ii^fOC-m8_bx7YR_AVy3g'Lf(%l'L./ăU"'pq9)G-UEs/j)6^hXL-2/;K]0fiCuJA%jMd<'shPlZJmg%n$7oif,Vib;fIBQshăU"2d$mg:,?KDB^-FNth;o1e:$jn=h50AW%GuNQP3r1E+KQuF5FT$^7Gl_AU_,kWfiăU"2\\RqZ1AK*sonCL/Qvsc*v;.]F^7(lmFidTDK2l<6wcGW&u9JBtQ#SP1U#GA\9?ăU"Jln-ia)h*\A.=^YC6L$G&7DGsTmEq1g+7#6(i-]FH0lAj)J:^zNqM-8+&N8ucSEăU"CFG%n?,-NL=OcY1)_?0fg<K9:2O51v;%G_.3e2j%N-5Tpi4ANRA#fuv7]X5B-i;ăU"]GUM2JC3-7GOdm7BOmCE:-U#*UU&FO]c'_a]u5Q5q;^]XdfItk)Tp>H?3Hj/?$YăU"WKgjLN_yadjX<FSMbh#kR*%83hqFaGI;i4OERwbJB5x'12UYm&1P\MOr1S&-%+=ăU"Wr0b/W+Ls3V0:-BR]-:-QNl>7x=I4J)7GF$Bk_]MPGE-d0j-J(FwNiArs]g/Kd\ăU"8(OhI+pY*[p6(bWl9Z9Tft4I(3ga*U;4G,W2G-e;NUXhP46VQlQ]sCv>T30zYZYăU">zSW+AWrwT=j&'dk&hFCCgJw?R5*391Iu^RiAaga#i,[,o%Ul5)$7=9J1E4-Kh/ăU"7xbHr9R+5*r/4z5E]yh<JK]0K>(Fl]1%ZLm\BT]j8xkEp=mm_1?l5>Sl14G>#v3ăU"#*r^lHC9WJ%o10Aa=ITeq8E5+m3XeP=2zOo*XgI4y''S3)H'Vtt%eLZ>^Com;GRăU"Jm3C,rs%&%U?s^WRvXBZL_Khmnl:flXQJGZlXRfJU*Z<S&1iTBYp]cFr]mic04tăU"Sc;2vM)-*9uIFCE5n]3uK'N1-*#ls\K+S/BJ'Czy<[%RBDd#kufCe5$)5yQv#WJăU"k<9?/xzAh$Or?G5)1h$ljD=WAe.cDFW_T0g5IT113yGAG%X_\P7\dPrBF]o+MF,ăU"l\::Hig%m6I8O,>f&>3NY$Sm#7N<5G4_]#,9Z'#et#hW&Rf=mC2nsAOWR;vuxQ\ăU"w:E9hBHKShOIT-YblRB]g'gL\luD_=W=uZ<[Ju6fF#UC#8&;'YMUXe,k&1]*L/băU"i$p5C7uLA3$DG4jmip%xrtTNI$bi3[8R1%up()%/%+%R+%04&fDo^<r-U'%%%%EăU"%%%.%%%%mt%zxjSIry'0(/J,+7#+41%p(.,%0.0.%,;,-%+*+,%+*[,%;<0/%+-ăU"/0%*+:)%+<*/%-*+:%+/J+%-,=/%,/-0%,0)J%)J)/%+)*9%*.Y,%+<.?sPuuu?ăU"ttt1%0Q0Q%0a0Q+P%1&%GH9:I[\7X,iTa*%+7H9l^oepAh'lr.(cP(G_wvO;O.YăU"0s1.J8p*USQ8^_U&-(9&gJ/%xMo2*79mu=v\d'h0EbjsDg__wm9E$NG?*c#pi'MăU"icw,P\O,1T?o)=7Yv4$KsiY[;^Uw=lju0-KxMpdEE?n[dObn%d?7as)7xZL'fxNăU"dePuw=(WwW#:==fahtD)Xxx<uuwHMxs_.8sXD5GxEH$&n<e'vE&\s(c>$#xW]ndăU"gY?Mr[VA$^SC4aYbbg#[iX./<$\jlYzVg3fxBRZl^gHGZ'vVQVd,\AAt=>]-3MaăU"D0_KQ\[DsWp$cv))volTS3K0M_yR*aC'a1<=$Cl9SAgbQiwVj^4fDUMA_%R.$:săU"rFfc3)<%pv4N&IsCaht3%T^Fn]BtASJ$i9.bVA7xRSF=K1HY.+x%yEB8c-Ged4IăU"-3%af/fT7imZhd#Z'pc<v4b6X9X+_o+,S5q9yY_sG%f-NYb+P%4pDFbI;VAe_-iăU"a(f5:./Ax7$9Z1-;<Q/_k7#Qm%Du7,+fY%N>4\?[[mL<5K-2xC(m6D]_\S9m^fYăU"D-cx:0Sb_C&%nl2OFU&8\R,e*Er47%4Hof2U*AOw^?ei*xL_/DHYST#KH$YT30;ăU"[/FAiYS+I/q+GB=8-?ee*2)N=(b&G0627d%4)*8k=gO/0NeZK_7(D5eu1Q):*)2ăU"EDdL5+:Z_CCCuYGsf40G<4'(4%0OrWP4,9y:\GpDbBd&vKE1_(x;'/fB])[gIR3ăU"2S[^4-$;dj9_O:?sxfjo<owgw_w87Y]cT:*Qspp(pww:%w8d+%c#u%p()9%%%%-ăU"j%t8?REqjX,J>+%(%A4%%%0%%%%xuw%nyjx.Sy'yMt&(^BT]7M:<oxugmEEUK4?ăU"r^\;C']OfV%Fa#\P/aK\+oPT/7j6T+wFnx]wpJ*zs3O$R:E.1Y)G2ZDKzZn*-w_ăU"\A7+dg^<YE/N2ynQtp;AyZa9],<3gk^)?k5Z%/F%PPq:mldv#\.AbD*+Ulz^o'BăU"Z_6(zK?fYBmKrdk\/r,,^8(^tFq]=si9%4YYQe>zSP)&,2Ssr9q947Us'g85z#&ăU"k_rKIn-QF2?73Gp*7CFjd5QCBrOR>:^*D4l0l*0(wC,fJ0\(pCZSaf&6J/Ij?d:ăU")dUBy5Dp>zUFug'OpaNIj_PODOlVg%\TjBhNs?^Pe;_R3/Eo&[Y]wkq+#Q./=vtăU"x'IcdtOnpSax2-&kh]UZ22Pueh>OdvP.jAn='(E]5\:z<4I1ex-^^mpOPNr*78^ăU"NX^RopS%=AyaW%:#4%H'Pu2kL3Evj0+%6Ms88g](jigrDq]wZIg;g77e8n3Ci,păU"0%Qf>lM:,9KF3RU934BLEK%-3UYF(b$M?.f90voq'K;f-EP3r;>Gt87[I#zekX_ăU"MDUWtv)E4cJ:H+*3OuM_:pT1kLf%2]]1;#kGmdhSRA4'lx.o^p:F,b:oo9)-%rAăU"+BA2D/AD5Q-+YG8u7U8(W+#7[[H3q<G%<o/>/qqTP;F8LLS#xq5v*?kbLfh'M0SăU"grI7'pb(C$1JhRK2J5%&,xhB2g<$j;_H9Lnw&HKkE]g;-t%0ZFlRe/YLq(>u8]2ăU"?q^Z[z&B'i=-QW&S/NJ&ynL(Rml8uUTZ/5%MU7M>[;)p*bkap+ChMHKPsj2:'9<ăU"uaHEd31]ysIt^HoxcJ-OxG]:c6Ab[g(i.98n83Z1=4l7.(3YlHg1AS2v)XZF=O_ăU"Nv5Zq6fE&J:l0)Cd5?DsH/mtXK>i&pRNwVj=A*qYC&pLZ1Q#/m$guKohUw2eo&măU"3Ec)67CPvjS-J7VbKiNlS5T6y5:bZ,dRW\p9ZQ(iDn/NM3+;sMHYf22%fABlEVeăU"LzsB[+3'Yujb$?Hiis67'iu6vec;zAWTG,DpY<mlFBFvb('#n)y9^lW<;MX>a?;ăU"#c'J0c7JG./]7x5'Xe*LlKMQ'W0H3p<g;??a6(\c-p&lomUH+s.UU>EJ/]UV#iHăU"VuDWt4X)WX0I?DvB5GrG2or9Xv?dkm_-HK&aKuN]5eZQVW^WP<ElB$CMtJl$$j\ăU"i&UIhBb;bh<Wu;NpE8^/:v:eILy&%Tv/JP'$AxaY'?8FqB^UdH97NWe&K';a*kKăU"=O.38:Nc&pJ#1fk)w]u0l\SygPI6Dq/=ACM5_q0LIbBlrPh9y#U<K.v:S+B]sgBăU"guQhhf=b=a6WkC>AT\Ua0-.Jo.A%iSAI%48qhWdlOe?SeLNH*MOf%y[4j;]G6wKăU"VBwweVdq1+Mrs9+PV]a$lw2AN(Qi$;(7arAlK&q#)qxea51,7$v%7XrB<VkMgL<ăU">=?oqF/lqu^iB\ub7E#-R_L#tolZ7#%H.4ULUiCNLK3=1wcduRO3O\>&l_B>+tEăU"?qaOF2B(-kL>c35hsAf:#okhmvb:SC1bQm5#Zosl1n6.VAvtoR46TQd8,VBGmd-ăU"Jb*)X_rvQ#[Hn7=uK/kLp]iv;6VjA:R[8cf9I-_'P+Q98$:&E2^j0WPHnBBS;GtăU"V3.ozpy.MeQFb]ub<nO,q7LP/qvK6K-tsK3b<eWKo0o0.566<8F.sm0_C[FD$nfăU"7nZgR]#baTm2bolgK9HqB#M/+<nEl.lbS^sCx+ATTFiV\>mt27cQ2VrJETb(1BAăU".er#c3qHNfT97:\oh0h%[HV.DPng'Q:9LB8^-J4%CArU3i4W/K]7&HdwB%JUzrjăU"k,=/3,U^HI&1*Wb75'edYkQBX??Z2;2'fm=44=iwnkYnH&wigT]IhZ'[aMFcEC0ăU"^[ncFBLVq6Er?_(h_66e.uo0OTH+fWFm,L4P6e(44SpawDa+1Wt,&Ia3WLPV70măU"wwZZ\Z21%U[bqpG3Hmh\LQ]O7hhi_yNf$h>tOLCH=B7[CMZmznPh3Rd\[]Dg?q(ăU"G\J.M5M48%u-1Wn/z;7N;-A0gPfox8:fZ3uv]^.=N[>>('R#agQ3n,9rpwa8k)?ăU"Hj9=%[]b2Z#1&Lv'^-I*uBOmpMI+Y%9c4>*wT)M^mB:MahX4<)7&lUY0OZO^g&6ăU"]D).kv8l>hsK35oxD_u.fVP=3q7dEbr]]>mLH>(JIU*V[9jlPQ:KW^'rQHo,^?iăU"%tup&%'9%/%%+%+I%\GjsDDe>*/V2%(%FR%%%0%%%%%%%%%&%E%%%%%%%%%x%uwăU"ny%jWSg%fxup%&'9%%/%+%R+%04&fDo^<r-U'%%%%E%%%.%%%%%%%%%&%%E%%%'ăU")2%%%mtzx%jSry&'up&%'9%9%%%%-j%t8?REqjX,J>+%(%A4%%%0%%%%%%%%%&%ăU"E[%%%,%5%%x%uwny%jxSy&'yup%*+%%%%%(%.(%x%.%%p<%%%%%ăEND SUBăCLOSE:IF S=105AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDouglas H. Lusher              320X400X256 VGA MODEX (COMPILE)FidoNet QUIK_BAS Echo          06-16-96 (22:49)       QB, PDS                332  12622    VGAMODEX.BAS'Hello, everyone!ă'Here's some code that might be of interest to some of you.ă'This code puts the VGA into MODEX - 320x400 with 256 colors.ă'I have also supplied code to write pixels, read a pixel,ă'clear the screen, print text, save a screen image (completeă'with the palette) to a single file, and restore a savedă'screen and its palette from a file.ă'Some of you may have noticed Earl Montgomery posting codeă'that would put the VGA into this mode. Be aware that thereă'are different ways of arranging video memory in this modeă'and the VGA will not operate the same way using this codeă'as it does using his code.ă'The advantage of this method is that there are twoă'(Count 'em! TWO!) video pages available which might be usedă'for animation. This code has been written so that you cană'read or write to either page and I have included code thată'lets you flip between them.ă'Here is a brief(!) description of the memory arrangementsă'when using this code. Since there are 256 colors possible,ă'each pixel requires a byte of video memory. On the basică'VGA card there is 256K of memory arranged as four planesă'of 64K bytes each. In this mode, the first pixel (0,0) isă'the first byte of plane 0; pixel (1,0) is the first byteă'of plane 1; pixel (2,0) is the first byte of plane 2; pixelă'(3,0) is the first byte of plane 3; pixel (4,0) is the secondă'byte of plane 0; etc. Thus the address of any pixel is givenă'by the formula: Address = (Y * 80) + (X \ 4) and the planeă'is: Plane = X MOD 4. To access a pixel for reading or writing,ă'one need only select the proper plane and then peek or pokeă'at the appropriate address. This makes screen writing in thisă'mode a very rapid operation. Since only 32,000 bytes of eachă'plane are required under this arrangement, there is plenty ofă'room left for a second screen page beginning at offset 32678.ă'This is most easily accomplished by using a DEF SEG = &HA800ă'for the second page and then addresses remain the same for theă'second page as for the first (which uses DEF SEG = &HA000).ă'==============================================================ă'Note that this code *must* be compiled in order to run.ă'This is due to the two SUBs whose DECLARE statements containă'the word "ALIAS". These cannot be used in the environment andă'the operation of the screen save and restore subs depend onă'them. If you *must* have this capability in the QB environment,ă'I have SUBs that will accomplish these tasks without usingă'the QB internal routines and will post them if it is requested,ă'however they are quite a bit longer.ă'Please note also that two of the DECLAREs have been broken ină'half because they were too long to fit on a single line. Theyă'will have to be restored before compiling.ă'I would appreciate any comments or bug reports that anyone wouldă'be willing to share. Thanks.ăă DECLARE SUB Set320x400mode ()ă DECLARE SUB XCLS (Page%)ă DECLARE SUB ShowPage (Page%)ă DECLARE SUB PutPixel (X%, Y%, Culler%, Page%)ă DECLARE SUB GetPixel (X%, Y%, Culler%, Page%)ă DECLARE SUB XPRINT (X%, Y%, Text$, Culler%, Page%)ă DECLARE SUB XScrn2File (FileName$, Page%)ă DECLARE SUB XFile2Scrn (FileName$, Page%)ă DECLARE SUB QBPUT3 ALIAS "B$PUT3" (BYVAL FileNumber%, BYVAL Segment%, BYVAL Address%, BYVAL NumBytes%)ă DECLARE SUB QBGET3 ALIAS "B$GET3" (BYVAL FileNumber%, BYVAL Segment%, BYVAL Address%, BYVAL NumBytes%)ă DEFINT A-Ză DIM BitMask%(7)ă FOR Bit% = 0 TO 7: BitMask%(Bit%) = 2 ^ Bit%: NEXTă File0$ = "TEST0.S2F": File1$ = "TEST1.S2F"ă CALL Set320x400modeă CALL XPRINT(40, 0, "Hello from PAGE 0", 4, 0)ă FOR Y% = 16 TO 399ă   C% = Y% \ 8 + 16ă   FOR X% = 0 TO 319ă     CALL PutPixel(X%, Y%, C%, 0)ă   NEXTă NEXTă CALL XScrn2File(File0$, 0)ă CALL ShowPage(1)ă CALL XPRINT(50, 300, "Press any key.", 0, 0)ă CALL XPRINT(40, 0, "Hello from PAGE 1", 2, 1)ă FOR X% = 0 TO 319ă   C% = X% \ 8 + 16ă   FOR Y% = 16 TO 399ă     CALL PutPixel(X%, Y%, C%, 1)ă   NEXTă NEXTă CALL XScrn2File(File1$, 1)ă CALL ShowPage(0)ă CALL XPRINT(50, 300, "Press any key.", 0, 1)ă SLEEP 2ă DO UNTIL LEN(INKEY$)ă   CALL ShowPage(1): SLEEP 2ă   CALL ShowPage(0): SLEEP 2ă LOOPăă CALL ShowPage(0)ă DOă   CALL XCLS(0)ă   CALL XPRINT(0,0,"Indicate which page to restore: (0/1) ",15,0)ă   A$ = INPUT$(1)ă   SELECT CASE A$ă     CASE "0": CALL XFile2Scrn(File0$, 0)ă     CASE "1": CALL XFile2Scrn(File1$, 0)ă     CASE CHR$(27): EXIT DOă   END SELECTă   CALL XPRINT(50, 280, "Press ESC to exit.", 0, 0)ă   CALL XPRINT(50, 300, "Press any other key to continue.", 0, 0)ă   A$ = INPUT$(1): IF A$ = CHR$(27) THEN EXIT DOă LOOPăă SCREEN 0: WIDTH 80ă ENDăă SUB GetPixel (X%, Y%, Culler%, Page%)ă 'this is code to read the color of a pixel in MODEX 320x400x256ă 'this code is based on ASM code written by Michael Abrashă '   and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3CE, 4             'select the Read Map Select Registeră OUT &H3CF, X% AND 3      'indicate the bit plane desiredă DEF SEG = Segment%ă Culler% = PEEK((Y% * 80) + (X% \ 4))ă END SUBăă SUB PutPixel (X%, Y%, Culler%, Page%)ă 'this is code to write a pixel in MODEX 320x400x256ă 'this code is based on ASM code written by Michael Abrashă '   and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă SHARED BitMask%()ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3C4, 2                   'select the Map Mask Registeră OUT &H3C5, BitMask%(X% AND 3)  'indicate the desired bit planeă DEF SEG = Segment%ă POKE (Y% * 80) + (X% \ 4), Culler%ă END SUBăă SUB Set320x400modeă 'the following code sets the VGA to 320x400x256 modeă 'this is a translation from ASM code written by Michael Abrashă '  and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă 'start with basic SCREEN 13ă SCREEN 13ă 'change the CPU addressing of video memory to linear (not odd/even,ă 'chain, or chain 4) to allow access to all 256K of display memory.ă SCI% = &H3C4            'the Sequence Controller Index registeră MemoryMode% = 4         'memory mode register indexă OUT SCI%, MemoryMode%ă X% = INP(&H3C5)ă X% = X% AND NOT &H8     'turn off chain 4ă X% = X% OR &H4          'turn off odd/evenă OUT &H3C5, X%ăă GCI% = &H3CE            'the Graphics Controller Index registeră GraphicsMode% = 5       'graphics mode register indexă OUT GCI%, GraphicsMode%ă X% = INP(&H3CF)ă X% = X% AND NOT &H10    'turn off odd/evenă OUT &H3CF, X%ăă Miscellaneous% = 6      'miscellaneous register indexă OUT GCI%, Miscellaneous%ă X% = INP(&H3CF)ă X% = X% AND NOT &H2     'turn off chaină OUT &H3CF, X%ăă 'clear all of video memory - setting mode 13 only cleared 64Kă 'of video memory. Do this before switching the crt out of mode 13ă 'so that garbage does not appear on the screen when the switchă 'is made.ă MapMask% = 2ă OUT SCI%, MapMask%ă OUT &H3C5, &HFă DEF SEG = &HA000                      'clear page 0ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTă DEF SEG = &HA800                      'clear page 1ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTăă 'tweak the mode to 320x400x256 by not scanning each line twiceă CRTCI% = &H3D4          'the CRT Controller Index registeră MaxScanLine% = 9        'maximum scan line register indexă OUT CRTCI%, MaxScanLine%ă X% = INP(&H3D5)ă X% = X% AND NOT &H1F  'set max scan line = 0ă OUT &H3D5, X%ăă 'change CRTC scanning from doubleword mode to byte mode, allowingă 'the CRTC to scan more than 64K of video dataă Underline% = &H14     'underline location register indexă OUT CRTCI%, Underline%ă X% = INP(&H3D5)ă X% = X% AND NOT &H40  'turn off doublewordă OUT &H3D5, X%ăă ModeControl% = &H17   'mode control register indexă OUT CRTCI%, ModeControl%ă X% = INP(&H3D5)ă X% = X% OR &H40       'turn on the byte mode bit, so memory isă                       'video memory is scanned linearly, just asă                       'in modes &H10 and &H12ă OUT &H3D5, X%ă END SUBăă SUB ShowPage (Page%)ă 'this code displays the specified page in MODEX - 320x400x256ă 'by Douglas H. Lusher - June 16, 1996ă SELECT CASE Page%ă   CASE 0              'display page 0ă     OUT &H3D4, &HC: OUT &H3D5, 0ă   CASE 1              'display page 1ă     OUT &H3D4, &HC: OUT &H3D5, &H80ă   CASE ELSEă     ERROR 5           'illegal function callă END SELECTă END SUBăă SUB XCLS (Page%)ă 'this is code to clear the screen in MODE X - 320x400x256ă 'by Douglas H. Lusher - June 16, 1996ă SHARED BitMask%()ă 'turn off the screen while it is being erasedă OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% OR &H20ă Segment% = &HA000: IF Page% THEN Segment% = &HA800ă DEF SEG = Segment%ă OUT &H3C4, 2                    'select the Map Mask Registeră FOR Plane% = 0 TO 3ă   OUT &H3C5, BitMask%(Plane%)   'indicate the desired bit planeă   FOR Address% = 0 TO 31999: POKE Address%, 0: NEXTă NEXTă 'turn the screen back on...ă OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% AND &HDFă END SUBăă SUB XFile2Scrn (FileName$, Page%)ă 'this code loads a screen image (including the palette) fromă '  the specified file and displays it on the specified screenă '  page in MODEX - 320x400x256ă 'NOTE: this CANNOT be run in the QB45 environment, it must beă '  compiled and this DECLARE statement must appear in the code:ă 'DECLARE SUB QBGET3 ALIAS "B$GET3" (BYVAL FileNumber%, BYVAL Segment%, BYVAL Address%, BYVAL NumBytes%)ă 'by Douglas H. Lusher - June 16, 1996ă SHARED BitMask%()ă Bytes% = 32000                    '(320 * 400) \ 4ă ColorRegs% = 768                  'the number of colors * 3ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3C8, 0                      'blank the screenă FOR X% = 1 TO ColorRegs%: OUT &H3C9, 0: NEXTă File% = FREEFILEă OPEN FileName$ FOR BINARY AS File%ă   FOR X% = 0 TO 3ă     OUT &H3C4, 2             'select the Map Mask Registeră     OUT &H3C5, BitMask%(X%)  'indicate the bit plane to restoreă     CALL QBGET3(File%, Segment%, 0, Bytes%)ă   NEXTă   P$ = SPACE$(ColorRegs%)ă   Segment% = VARSEG(P$): Offset% = SADD(P$)ă   CALL QBGET3(File%, Segment%, Offset%, ColorRegs%)ă CLOSE File%ă DEF SEG = Segment%ă OUT &H3C8, 0ă FOR X% = Offset% TO Offset% + ColorRegs% - 1ă   OUT &H3C9, PEEK(X%)ă NEXTă END SUBăă SUB XPRINT (X%, Y%, Text$, Culler%, Page%)ă 'this is code to print text in MODEX - 320x400x256ă 'by Douglas H. Lusher - June 15, 1996ă SHARED BitMask%()ă ' 8 x 8 char box, CGAă 'CharSegment% = &HFFA6: CharOffset% = &HEă 'CharWid% = 8: CharHgt% = 8ă ' 8 x 14 char box, EGAă CharSegment% = &HC000: CharOffset% = &H4ED5ă CharWid% = 8: CharHgt% = 14ă ' 8 x 16 char box, VGAă 'DIM Regs AS RegTypeXă 'Regs.AX = &H1130ă 'Regs.BX = &H600ă 'CALL InterruptX(&H10, Regs, Regs)ă 'CharSegment% = Regs.ES: CharOffset% = Regs.BPă 'CharWid% = 8: CharHgt% = 16ăă XX% = X% - 1ă FOR Char% = 1 TO LEN(Text$)ă   XX% = XX% + CharWid%ă   YY% = Y%ă   Ptr% = CharHgt% * ASC(MID$(Text$, Char%, 1)) + CharOffset%ă   FOR Ln% = 0 TO CharHgt% - 1ă     DEF SEG = CharSegment%ă     BitPattern% = PEEK(Ptr% + Ln%)ă     FOR Bit% = 0 TO 7ă       IF BitPattern% AND BitMask%(Bit%) THENă         CALL PutPixel(XX% - Bit%, YY%, Culler%, Page%)ă       END IFă     NEXTă     YY% = YY% + 1ă   NEXTă NEXTă END SUBăă SUB XScrn2File (FileName$, Page%)ă 'this code saves a screen image (including the palette) fromă '  the specified screen page and saves it to the specified fileă '  in MODEX - 320x400x256ă 'NOTE: this CANNOT be run in the QB45 environment, it must beă '  compiled and this DECLARE statement must appear in the code:ă 'DECLARE SUB QBPUT3 ALIAS "B$PUT3" (BYVAL FileNumber%, BYVAL Segment%, BYVAL Address%, BYVAL NumBytes%)ă 'by Douglas H. Lusher - June 16, 1996ă Bytes% = 32000               '(320 * 400) \ 4 = 30,000 bytesă ColorRegs% = 768             'the number of colors * 3ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă File% = FREEFILEă OPEN FileName$ FOR BINARY AS File%ă   FOR X% = 0 TO 3ă     OUT &H3CE, 4           'select the Read Map Select Registeră     OUT &H3CF, X%          'indicate the bit plane to saveă     CALL QBPUT3(File%, Segment%, 0, Bytes%)ă   NEXTă   P$ = SPACE$(ColorRegs%)ă   Segment% = VARSEG(P$): Offset% = SADD(P$)ă   DEF SEG = Segment%ă   OUT &H3C7, 0ă   FOR X% = Offset% TO Offset% + ColorRegs% - 1ă     POKE X%, INP(&H3C9)ă   NEXTă   CALL QBPUT3(File%, Segment%, Offset%, ColorRegs%)ă CLOSE File%ă END SUBăDouglas H. Lusher              320X400X256 MODEX (ENVIRONMENT)FidoNet QUIK_BAS Echo          06-22-96 (08:34)       QB, PDS                351  10852    320X400E.BAS'Here is code for Mode X - 320x400x256 that will run in theă'environment.ăă DEFINT A-Ză '$INCLUDE: 'QB.BI'ă DIM BitMask%(7)ă FOR Bit% = 0 TO 7: BitMask%(Bit%) = 2 ^ Bit%: NEXTă File0$ = "C:\TEST0.S2F": File1$ = "C:\TEST1.S2F"ă CALL Set320x400modeă CALL XPRINT(40, 0, "Hello from PAGE 0", 4, 0)ă FOR Y% = 16 TO 399ă   C% = Y% \ 8 + 16ă   FOR X% = 0 TO 319ă     CALL PutPixel(X%, Y%, C%, 0)ă   NEXTă NEXTă CALL XScrn2File(File0$, 0)ă CALL ShowPage(1)ă CALL XPRINT(50, 300, "Press any key.", 0, 0)ă CALL XPRINT(40, 0, "Hello from PAGE 1", 2, 1)ă FOR X% = 0 TO 319ă   C% = X% \ 8 + 16ă   FOR Y% = 16 TO 399ă     CALL PutPixel(X%, Y%, C%, 1)ă   NEXTă NEXTă CALL XScrn2File(File1$, 1)ă CALL ShowPage(0)ă CALL XPRINT(50, 300, "Press any key.", 0, 1)ă SLEEP 2ă DO UNTIL LEN(INKEY$)ă   CALL ShowPage(1): SLEEP 2ă   CALL ShowPage(0): SLEEP 2ă LOOPăă CALL ShowPage(0)ă DOă   CALL XCLS(0)ă   CALL XPRINT(0, 0, "Indicate which page to restore: (0/1) ", 15, 0)ă   A$ = INPUT$(1)ă   SELECT CASE A$ă     CASE "0": CALL XFile2Scrn(File0$, 0)ă     CASE "1": CALL XFile2Scrn(File1$, 0)ă     CASE CHR$(27): EXIT DOă   END SELECTă   CALL XPRINT(50, 280, "Press ESC to exit.", 0, 0)ă   CALL XPRINT(50, 300, "Press any other key to continue.", 0, 0)ă   A$ = INPUT$(1): IF A$ = CHR$(27) THEN EXIT DOă LOOPăă EndIt:ă SCREEN 0: WIDTH 80ă ENDăă SUB DOSCloseFile (Handle%)ă DIM Register AS RegTypeă Register.AX = &H3E00ă Register.BX = Handle%ă CALL Interrupt(&H21, Register, Register)ă IF Register.Flags AND 1 THENă   SELECT CASE Register.AXă     CASE &H6: ERROR 52    'invalid handleă     CASE ELSE: ERROR 255ă   END SELECTă END IFă END SUBăă SUB DOSCreateFile (FileName$, Handle%)ă DIM Register AS RegTypeXă Temp$ = FileName$ + CHR$(0)ă Register.AX = &H3C00ă Register.CX = 0ă Register.DS = VARSEG(Temp$)ă Register.DX = SADD(Temp$)ă CALL InterruptX(&H21, Register, Register)ă IF Register.Flags AND 1 THENă   SELECT CASE Register.AXă     CASE &H3: ERROR 76   'path not foundă     CASE &H4: ERROR 67   'no handles availableă     CASE &H5: ERROR 75   'access deniedă     CASE ELSE: ERROR 255ă   END SELECTă ELSEă   Handle% = Register.AXă END IFă END SUBăă SUB DOSOpenFile (FileName$, Handle%)ă DIM Register AS RegTypeXă Temp$ = FileName$ + CHR$(0)ă Register.AX = &H3D02ă Register.DS = VARSEG(Temp$)ă Register.DX = SADD(Temp$)ă CALL InterruptX(&H21, Register, Register)ă IF Register.Flags AND 1 THENă   SELECT CASE Register.AXă     CASE &H2: ERROR 53   'file not foundă     CASE &H3: ERROR 76   'path not foundă     CASE &H4: ERROR 67   'no handles availableă     CASE &H5: ERROR 75   'access deniedă     CASE ELSE: ERROR 255ă   END SELECTă ELSEă   Handle% = Register.AXă END IFă END SUBăă SUB GetPixel (X%, Y%, Culler%, Page%)ă 'this is code to read the color of a pixel in MODEX 320x400x256ă 'this code is based on ASM code written by Michael Abrashă '   and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3CE, 4             'select the Read Map Select Registeră OUT &H3CF, X% AND 3      'indicate the bit plane desiredă DEF SEG = Segment%ă Culler% = PEEK((Y% * 80) + (X% \ 4))ă END SUBăă SUB PutPixel (X%, Y%, Culler%, Page%)ă 'this is code to write a pixel in MODEX 320x400x256ă 'this code is based on ASM code written by Michael Abrashă '   and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă SHARED BitMask%()ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3C4, 2                   'select the Map Mask Registeră OUT &H3C5, BitMask%(X% AND 3)  'indicate the desired bit planeă DEF SEG = Segment%ă POKE (Y% * 80) + (X% \ 4), Culler%ă END SUBăă SUB Set320x400modeă 'the following code sets the VGA to 320x400x256 modeă 'this is a translation from ASM code written by Michael Abrashă '  and published in 1989 Programmer's Journal 7.1ă 'by Douglas H. Lusher - June 15, 1996ă 'start with basic SCREEN 13ă SCREEN 13ă 'change the CPU addressing of video memory to linear (not odd/even,ă 'chain, or chain 4) to allow access to all 256K of display memory.ă SCI% = &H3C4            'the Sequence Controller Index registeră MemoryMode% = 4         'memory mode register indexă OUT SCI%, MemoryMode%ă X% = INP(&H3C5)ă X% = X% AND NOT &H8     'turn off chain 4ă X% = X% OR &H4          'turn off odd/evenă OUT &H3C5, X%ăă GCI% = &H3CE            'the Graphics Controller Index registeră GraphicsMode% = 5       'graphics mode register indexă OUT GCI%, GraphicsMode%ă X% = INP(&H3CF)ă X% = X% AND NOT &H10    'turn off odd/evenă OUT &H3CF, X%ăă Miscellaneous% = 6      'miscellaneous register indexă OUT GCI%, Miscellaneous%ă X% = INP(&H3CF)ă X% = X% AND NOT &H2     'turn off chaină OUT &H3CF, X%ăă 'clear all of video memory - setting mode 13 only cleared 64Kă 'of video memory. Do this before switching the crt out of mode 13ă 'so that garbage does not appear on the screen when the switchă 'is made.ă MapMask% = 2ă OUT SCI%, MapMask%ă OUT &H3C5, &HFă DEF SEG = &HA000                      'clear page 0ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTă DEF SEG = &HA800                      'clear page 1ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTăă 'tweak the mode to 320x400x256 by not scanning each line twiceă CRTCI% = &H3D4          'the CRT Controller Index registeră MaxScanLine% = 9        'maximum scan line register indexă OUT CRTCI%, MaxScanLine%ă X% = INP(&H3D5)ă X% = X% AND NOT &H1F    'set max scan line = 0ă OUT &H3D5, X%ăă 'change CRTC scanning from doubleword mode to byte mode, allowingă 'the CRTC to scan more than 64K of video dataă Underline% = &H14       'underline location register indexă OUT CRTCI%, Underline%ă X% = INP(&H3D5)ă X% = X% AND NOT &H40    'turn off doublewordă OUT &H3D5, X%ăă ModeControl% = &H17     'mode control register indexă OUT CRTCI%, ModeControl%ă X% = INP(&H3D5)ă X% = X% OR &H40         'turn on the byte mode bit, so memory isă                         'video memory is scanned linearly, just asă                         'in modes &H10 and &H12ă OUT &H3D5, X%ă END SUBăă SUB ShowPage (Page%)ă 'this code displays the specified page in MODEX - 320x400x256ă 'by Douglas H. Lusher - June 16, 1996ă SELECT CASE Page%ă   CASE 0              'display page 0ă     OUT &H3D4, &HC: OUT &H3D5, 0ă   CASE 1              'display page 1ă     OUT &H3D4, &HC: OUT &H3D5, &H80ă   CASE ELSEă     ERROR 5           'illegal function callă END SELECTă END SUBăă SUB XCLS (Page%)ă 'this is code to clear the screen in MODE X - 320x400x256ă 'by Douglas H. Lusher - June 16, 1996ă SHARED BitMask%()ă 'turn off the screen while it is being erasedă OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% OR &H20ă Segment% = &HA000: IF Page% THEN Segment% = &HA800ă DEF SEG = Segment%ă OUT &H3C4, 2                     'select the Map Mask Registeră FOR Plane% = 0 TO 3ă   OUT &H3C5, BitMask%(Plane%)    'indicate the desired bit planeă   FOR address% = 0 TO 31999: POKE address%, 0: NEXTă NEXTă 'turn the screen back on...ă OUT &H3C4, 1: CMR% = INP(&H3C5): OUT &H3C5, CMR% AND &HDFă END SUBăă SUB XFile2Scrn (FileName$, Page%)ă SHARED BitMask%()ă DIM Register AS RegTypeXă Bytes% = 32000                    '(320 * 400) \ 4ă ColorRegs% = 768                  'the number of colors * 3ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă OUT &H3C8, 0                      'blank the screenă FOR X% = 1 TO ColorRegs%: OUT &H3C9, 0: NEXTă CALL DOSOpenFile(FileName$, Handle%)ă Register.BX = Handle%ă Register.CX = Bytes%ă Register.DS = Segment%ă Register.DX = 0ă FOR X% = 0 TO 3ă   Register.AX = &H3F00ă   OUT &H3C4, 2                    'select the Map Mask Registeră   OUT &H3C5, BitMask%(X%)          'indicate the bit plane to restoreă   CALL InterruptX(&H21, Register, Register)ă   IF Register.Flags AND 1 THENă     SELECT CASE Register.AXă       CASE &H5: ERROR 75    'access deniedă       CASE &H6: ERROR 52    'invalid handleă     END SELECTă   ELSEIF Register.AX <> Register.CX THENă     ' incorrect number of bytes readă     ERROR 57                'device i/o erroră   END IFă NEXTă CALL DOSCloseFile(Handle%)ă P$ = SPACE$(ColorRegs%)ă File% = FREEFILEă OPEN FileName$ FOR BINARY AS File%ă   GET File%, (LOF(File%) + 1) - ColorRegs%, P$ă CLOSE File%ă DEF SEG = VARSEG(P$): Offset% = SADD(P$)ă OUT &H3C8, 0ă FOR X% = Offset% TO Offset% + ColorRegs% - 1ă   OUT &H3C9, PEEK(X%)ă NEXTă DEF SEGă END SUBăă SUB XPRINT (X%, Y%, Text$, Culler%, Page%)ă 'this is code to print text in MODEX - 320x400x256ă 'by Douglas H. Lusher - June 15, 1996ă SHARED BitMask%()ăă ' 8 x 8 char box, CGAă 'CharSegment% = &HFFA6: CharOffset% = &HEă 'CharWid% = 8: CharHgt% = 8ăă ' 8 x 14 char box, EGAă CharSegment% = &HC000: CharOffset% = &H4ED5ă CharWid% = 8: CharHgt% = 14ă ' 8 x 16 char box, VGAă 'DIM Regs AS RegTypeXă 'Regs.AX = &H1130ă 'Regs.BX = &H600ă 'CALL InterruptX(&H10, Regs, Regs)ă 'CharSegment% = Regs.ES: CharOffset% = Regs.BPă 'CharWid% = 8: CharHgt% = 16ăă XX% = X% - 1ă FOR Char% = 1 TO LEN(Text$)ă   XX% = XX% + CharWid%ă   YY% = Y%ă   Ptr% = CharHgt% * ASC(MID$(Text$, Char%, 1)) + CharOffset%ă   FOR Ln% = 0 TO CharHgt% - 1ă     DEF SEG = CharSegment%ă     BitPattern% = PEEK(Ptr% + Ln%)ă     FOR Bit% = 0 TO 7ă       IF BitPattern% AND BitMask%(Bit%) THENă         CALL PutPixel(XX% - Bit%, YY%, Culler%, Page%)ă       END IFă     NEXTă     YY% = YY% + 1ă   NEXTă NEXTă END SUBăă SUB XScrn2File (FileName$, Page%)ă DIM Register AS RegTypeXă Bytes% = 32000               '(320 * 400) \ 4 = 30,000 bytesă ColorRegs% = 768             'the number of colors * 3ă Segment% = &HA000ă IF Page% THEN Segment% = &HA800ă CALL DOSCreateFile(FileName$, Handle%)ă Register.BX = Handle%ă Register.CX = Bytes%ă Register.DS = Segment%ă Register.DX = 0ă FOR X% = 0 TO 3ă   Register.AX = &H4000ă   OUT &H3CE, 4                'select the Read Map Select Registeră   OUT &H3CF, X%               'indicate the bit plane to saveă   CALL InterruptX(&H21, Register, Register)ă   IF Register.Flags AND 1 THENă     SELECT CASE Register.AXă       CASE &H5: ERROR 75      'access deniedă       CASE &H6: ERROR 52      'invalid handleă     END SELECTă   ELSEIF Register.AX <> Register.CX THENă     ' incorrect number of bytes writtenă     ERROR 57                  'device i/o erroră   END IFă NEXTă CALL DOSCloseFile(Handle%)ă P$ = SPACE$(ColorRegs%)ă DEF SEG = VARSEG(P$): Offset% = SADD(P$)ă OUT &H3C7, 0ă FOR X% = Offset% TO Offset% + ColorRegs% - 1ă   POKE X%, INP(&H3C9)ă NEXTă DEF SEGă File% = FREEFILEă OPEN FileName$ FOR BINARY AS File%ă   PUT File%, LOF(File%) + 1, P$ă CLOSE File%ă END SUBăAndy J. Golden                 STAR TREK COMMUNICATOR PIN     YHBV44@prodigy.com             06-14-96 (00:00)       QB, QBasic, PDS        55   1847     STPIN.BAS   ' Star Trek: The Next Generation - Communicator Pin.ă' BASIC graphics program by Andy Golden - June 14, 1996.ă'    This program was not created, approved, licensed,ă'    or endorsed by any entity involved in creating oră'    producing the Star Trek(R) television series oră'    films.ăădim y(5)ăscreen 1ăwindow (-10,-10)-(10,10)ăfor z=1 to 5ă  for x=-10 to 10 step .1ă    y(1)=-x^2+8ă    if x>=0 then    y(2)=-x^1.5-1         else    y(2)=11ă    if x<=0 then    y(3)=-abs(x)^1.5-1    else    y(3)=11ă    y(4)=sqr(49-49*(x^2)/100)-1ă    y(5)=-y(4)-2ă    pset(x,y(z))ă  nextănextăă' I originally wrote this program on my TI-85 graphingă' calculator in Algebra II class back some time aroundă' February 1996.  Then on June 14, 1996, I decided toă' translate it to work with PowerBASIC and QBASIC andă' other BASICs for an IBM compatible PC.  The resultă' is the program above.  The equations y(2) and y(3)ă' had to be modified because BASIC just can't handleă' imaginary numbers; so I used a cheesy IF/THEN/ELSEă' statement to eliminate them because I just don't feelă' like setting here for a few weeks writing all my ownă' mathematical subroutines and functions to handleă' imaginary numbers.  Maybe some other time.  :-)ă'ă' Here is what all the equations do:ă'   y(1)   Draws an archă'   y(2)   Draws right leg of communicator pină'   y(3)   Draws left leg of pină'   y(4)   Draws top half of ellipseă'   y(5)   Draws bottom half of ellipseă'ă' Here is the original program for the TI-85:ă'ă'   FnOff                    Replace the word Square Rootă'   Func                     in equation  y4  with theă'   AxesOff                  square root symbol.ă'   ClLCDă'   ClDrwă'   Zstdă'   y1=-x^2+8ă'   y2=-x^1.5-1ă'   y3=-((-x)^1.5)-1ă'   y4=Square Root (49-49x^2/100)-1ă'   y5=-y4-2ă'   FnOnăSteven Sensarn                 SCROLLING CELL MAP             txs53132@bayou.uh.edu          07-08-96 (00:00)       QB, QBasic, PDS        50   3227     CELLS.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"CELLS.ZIP",4^6:Z&=2141:?STRING$(50,177);ăU"%up()%9%%%I-%aaf_EBa&yjm%%%%%(%%%.%%%%hj%qqxS[ufqf,a*2%%V-(b8ilăU"lM.91aWahu5m+NuaxMK$b_%4._(*I[KYi/i6^0'_uInRif-/_61DT.7uM^Sfd\%ăU"x6^Rfg*mi,'l'u%p()9%%%%-g%da_jEE1W'QJ'%(%K7%%%.%%%%hjq%qxSiRfyfăU"%2,FREj1&Yqu7Xx+DN(JG'G7E=UE%4M0%4rL)E+TFf2ICX5f(Z(B$/0.1J_0.AOăU"'U'_ISx9FBYN%*YLsC?HK34n2(<M#?&KYI%Bg-tQJ,V1eS+.l[pu.FZm>U4W60EăU"I#e9\,B-W4ei8&_b$)gdb09Ri\01T$d^fHXgYNVO>^M<i&r%(W,,('1KlUuX'd_ăU"hYL7D5;E?01S&tXhn[5lP$I^wWSLQRbzjV%(EVr%i5RC4NDiW5R6=\W\Dt,P*%[ăU"-51DBKRp].6%[fkOYCkk$PDq_Y%,M*t#AFTj]?DaBPzq*<mE%q0+Q^63?T%c\a%ăU"D'8tp8[TYf'udaH^<O#-)0p2mjcFm]D06)q#e::JB<stO[q^+POnI?mERQ+IgndăU"&-1,fV%Y&f;oUo4<O+rI.<ki/4pN(eOOE0SVOKXwXV1R4Qp\Ck)pT]r1i-11PWMăU"mX0x[FQ/]kZm#E?U?D=P,&#A4$+0OR0:28/I.zxdpHxpV_b)z8k4Ro.6o[[l?WvăU">.n9Z%NH3S89Hhab%4XNmz;J*2(kc4Q-<OsWv0n5KtZTS+FQ1Odm^uJlb$*izp=ăU"=p%-kJd<XTW&S,FvWF11MQlwY_:o+_]P$9Ox%lR$xzaMQ3oIN3x:LcO4&K2\,\VăU"c>FbB=>nvtR?/r=0?f'xh1?'^v:0)tBT-rIX0ko(zeNDe#oxBk7(aM%u%p()9%%ăU"%%-j%6a_OETZc+19)%+%n9%%%.%%%%hjq%qxSgRfxV';<>\[+1wCEWxPAYrN=+-ăU"OsP:=f1CoQIoHk2j#/A*BpRn>ZhtvnIloM$[A$n4#$1=JRT[BVAsmoqC#?d3gNVăU";,AOR8A2iAhW;nR\3(,uui4MEZHqM_+fQM$0g&DhmY*FaymiWr$)n_pR\P#FaM$ăU"4L+\n;??j2v\U3C,MA4#7yIM:A=Ov#+tUj6<.[J(0d%ohPtk?]T3r[2)9*6oA:băU"Vu:.KI9D*F<[6IG$Mp\(#6j5a-Hk_[wL9Cre1N*B/lB4Vdk7,-i49[4.9&z0Gs/ăU"[&*syh:M]wQW*U-H.12?YG(UcZ9.Q*ahRV+XE<]ROXZMH,Uc$is:=ec*J+3D?2IăU"Q3E#2J.FwM_P'h/B;?,iE$GE2-DI)?I;>BP_4ghBMnHIS?(SJVMyF2d0^;5U2UhăU"8z>v7PS0nNYW;hYa>c&NP/$-wXl'+\BXWw-4SmMQ=BN^XwXT;7]L,W;71L,hnA1ăU"CPFt1TgvmK;M[(=eD;jpsvLJe?u<F#H21&%m6lETRG]UGA,L^:Uyt(LKhp-bu'păU",CQ-pH5)hP7)b#N.bbX;i)hT#0n$<.W7KfPODCL1h^V:s&7oq:g'jXxpQm\DQm/ăU"AN,b_l)56Z9&*E(^iK;]047UFvCK9q-wON6A5^*g?%m7>42T$:6>B(Z^mV5ccl0ăU">2vm]2BN9YGW=7ZNp$)C\T*PY=.xwe^fgo__h=pE#Mt^mEXD]EI/9j6d(_EZPR*ăU"j\5o?.dPw#V],okK#m^_G8#j[CzrShBA)j3y,Mjh^Y86ioTOw;ro8;AvSFG-Mq=ăU"t51?+3;]sTMS/=G5&mjscp&fP-*Z2BoWsX3vs^eGrMrC;sa0zWcJM+jh+$Yh'V.ăU"gT48t?CPK<(6OrK\jNHJmXWOnkduu2VNbsn38+[7G&mp1nFXMpPITO2jLjdf]:XăU"rChPH8Etp-&#fChcI#AQJBxCEv&bLHdbcS0KOs*tl,FYvsEi/s[F]V4\G(pXnSFăU"a8UNZc5NJH;+qF.6-ksetbK+J&nO(oD73i:_8UD?d>lZva^s/6Cxn.L2l2=7bJ6ăU"znGxcSyl,EFOjG1AOLQhORacMc4?*pR=Mw0c3mqB\2XS76N*pecv;f+.yuBPBMuăU"3b.%T_d:75C=yDf#UIR6pxkk9g4vd)6_m$eq<svWZ?Q:FgG^nTtT8FoKTt,oAdxăU"gYs8w>rA.xa>sXGHDF4vEXT4<0PvdPN6o$$r^&:OdbIWL3DIbt9&m<'D\E?uLu0ăU"lr>Ka\j-G.HpL&imoONJZQ-oU.86MElI:_1Mmr2oa[cZp4D_TCtrwQ3Ya7R4+fyăU"nV<s$=']'yP<J:KP99j$5DQfE]pl06a92$-M%I8UYIaKl]VfJKU+DX(rnFDbERTăU"IZpgAd4KN$m:WI+h+]\Z<7=Z2EC:CiT[TWmqMYDh8jrYND^**/cVev9JI/p-^6'ăU"h.FB\i,m:qT*qJ:=Kw$;GJ]_Lb0h.$>>#,uGHXfo*#nduja?qC*e6NdZ>,ia2ICăU"Z3BI:QcL8x2k/Oq(SAwCjT?Om2Xptq2AX]yieOr/Wo:wUS'Cdup%&'9%%9%%%I-ăU"%aaf_EBa&yjm%%%%%(%%%.%%%%%%%%%%%%E%%%%%%%%%hjqq%xSuf%qup&%'9%9ăU"%%%%-g%da_jEE1W'QJ'%(%K7%%%.%%%%%%%%%%%E#%%%>%%%%h%jqqx%Sify%upăU"&'%9%9%%%%-%<6a_E3TZc1'9)%%'n9%%%.%%%%%%%%%&%E%7%%4'%%%hj%qqxS%ăU"gfxu%p*+%%%%%(#%(%t#%%%q%,%%%%%ăEND SUBăCLOSE:IF S=28AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăScott Tuttle                   SCREEN ART/SAVER               Scott.Tuttle@newriver.net      07-08-96 (20:23)       QB, QBasic, PDS        198  6816     ARTS.BAS    'Screen Art/Saver inspired by John Wantlands Black Holeă'but for faaster computers.ăăRANDOMIZE TIMERăDEFINT A-ZăăSCREEN 13                       'ămaxx = 320                      'screen dimensionsămaxy = 199                      'can be set for different modesăăFOR t = 1 TO 255                ' sets palette to shades of whiteăb = INT(63 / 255 * t)ăOUT &H3C6, 255ăOUT &H3C8, 256 - tăOUT &H3C9, băOUT &H3C9, băOUT &H3C9, băNEXT tăă                                            'rem these out for QBASICăIF COMMAND$ <> "" THEN                      'check command lineă        num = VAL(COMMAND$)                 'for number of pixelsă        IF num < 10 THEN num = 10          ă        END IFăIF COMMAND$ = "" THEN num = 100             'to hereăăDIM x!(num), y!(num), dx!(num), dy!(num)ăăăcx = maxx \ 2                              'center coor for current screenăcy = maxy \ 2ărr = 10                                    'diameter of black holeăFOR t = 1 TO num                           'init coors and speedăx!(t) = RND * maxxăy!(t) = RND * maxyădx!(t) = 0ădy!(t) = 0ăNEXT tăăt1 = 1                                     'some constants-for speedăt2 = 2ăt5 = 5ăt4 = 4ăt6 = 6ăăg! = .2                                   'gravity factorăăDOăăFOR t = t1 TO număPRESET (x!(t), y!(t))                   'erase old pixelădx = cx - x!(t)                         'compute distanceădy = cy - y!(t)ăr = SQR(dx ^ t2 + dy ^ t2) + t1ă                                       'play with the .98 for differentă                                       'effectsădx!(t) = dx!(t) * .98 + (g! / r) * dx  'accel * orbitdegradation + forceădy!(t) = dy!(t) * .98 + (g! / r) * dy  'dittoăx!(t) = x!(t) + dx!(t)                 'calc new positionăy!(t) = y!(t) + dy!(t)ăPSET (x!(t), y!(t)), r                 'draw new pixelăIF r < rr THEN                         'did it go into the hole?ă        PSET (x!(t), y!(t)), 0                    'erase ită        x!(t) = RND * (cx \ t5)                   'create new pixelă        y!(t) = cy + RND * (cy \ t4)ă        dy!(t) = t6ă        dx!(t) = t6ă        END IFăNEXTăIF RND > .95 THEN g! = RND - .05  'random the gravity-nice visual effectăLOOP UNTIL INKEY$ <> ""ăăSCREEN 0                               'exit w/credits to me :)ăWIDTH 80ăCOLOR 14ăPRINT "ô     Â         "ăPRINT "őcott łuttle '96"ăCOLOR 7ă______________________________cut here_____________________________________ăă'Screen art that draws water fountains.ăăSCREEN 13ă                                           ' you can specify the number ofă                                           'pixels on the command lineă                                           'ex: GRXFOUNT 1000ă                                           'for 1000 pixelsăă'rem this for qbasicăIF COMMAND$ <> "" THEN            'checks to see if there's a numberă        num = VAL(COMMAND$)                'on the command lineă        END IFă' to hereăăIF num = 0 THEN num = 100                  'if not-its thisăIF num > 2000 THEN num = 2000              'limit on număăDIM x(num), y(num), dx(num), dy(num)       'x-coor,y-coor,dx&dy speedsăDEFINT B, T, Z                             'pallette & countersăRANDOMIZE TIMERăăg = .1                                     ' gravityăscale1 = .627451                           'scaler 1ăt160 = 160                                 'constant intăpi = 3.1415                                'pi-duhh!ăt199 = 199                                 'bottom of screen constant intăzero% = 0ăone% = 1ătwo% = 2ăt255 = 255ămode% = 1ăăDO                                         'color schemeăbf = INT(RND * two%)ărf = INT(RND * two%)ăgf = INT(RND * two%)ăLOOP UNTIL bf + gf + rf <> zero%           'no black-outsăărand:                                      'randomizes and resetsăCLSădyscale = (RND * -4) - 3                   'rnd dyscaleădxscale = (RND * two%) + one%              'rnd dxscaleăda = RND * .01                             'init-angle speedăa = RND * pi                               'init angleăFOR t = one% TO num                        'sets all coors and speedsăPSET (x(t), y(t)), zero%ăy(t) = t199ăx(t) = t160ădx(t) = RND * 5 - 2.5ădy(t) = -RND * 6ăNEXTăă'ăDO                                                'main loopăăFOR z = num TO one% STEP -1                       'pixel loop for colorăă        FOR t = one% TO num                       'loop to calc&drawă        LINE (t160, t199)-(x(t), y(t)), zero%     'erase oldă        x(t) = x(t) + dx(t)                       'compute new cooră        y(t) = y(t) + dy(t)ă        dy(t) = dy(t) + gă        IF y(t) > t199 THEN           'Did pixel go through floor?ă                x(t) = t160                          'reset single pixă                y(t) = t199                         ' with new coorsă                IF mode% = -1 THENă                        dx(t) = RND * 4 - 2ă                        dy(t) = -RND * 6ă                        ELSEă                        dy(t) = SIN(a) * dyscale  'and angle speedsă                        dx(t) = COS(a) * dxscale  'constants scale speedsă                        a = a + da                'move angleă                                                  'is it OK? reverse if notă                        IF a > pi OR a < zero% THEN da = -daă                        END IFă                END IFă                   'draw new pixel with color based on distance from centeră        LINE (t160, t199)-(x(t), y(t)), scale1 * (t160 - ABS(t160 - x(t)))ă        NEXT tăăIF INKEY$ <> "" THEN GOTO quit              'key checkăb = INT((53 / num) * z) + 10                'brightness-scaled to num pixelsăIF z > t255 THEN z = t255ă   ăred = rf * băgreen = gf * băblue = bf * băOUT &H3C6, t255                              'ready to change paletteăOUT &H3C8, z                                 'colorăOUT &H3C9, red                               'red valăOUT &H3C9, green                             'green valăOUT &H3C9, blue                              'blue valăăNEXT zăăda = da + RND * .01                        'rnd the angle speedsăIF da < -.1 THEN da = -.1                  'see if new speed okăIF da > .1 THEN da = .1                    'dittoăămode% = -mode%ă                                           'another palette changeă                DOă                bf = INT(RND * two%)ă                rf = INT(RND * two%)ă                gf = INT(RND * two%)ă                LOOP UNTIL bf + gf + rf <> zero%ăădyscale = RND * -2.7 - 3.5                      'rnd dyscaleădxscale = RND * one% + two%                     'rnd dxscaleăLOOPăăquit:ăSCREEN 0ăWIDTH 80ăCOLOR 14ăPRINT "ô     Â         "ăPRINT "őcott łuttle '96"ăCOLOR 7ăErika Schulze                  MODE-X MANDELBROT SET          100775.2275@CompuServe.com     07-09-96 (19:15)       PB                     476  31377    MANDEL.BAS  ' To extract MANDEL.ZIP, please load/run under PowerBASICăDEFINT A-Z: SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MANDEL.ZIP",4^6:Z&=23240:?STRING$(50,177);ăU"%up()%9%%%[-%n6KbE\g:D/K;d%%0W%%%-%%%%rf%siSfRxrf,;:>Tm>evE%'r4ăU"*QJI$b%A5moqJ8#mT7in,>bCSfe'G+=)12YsR(s7wrLwXk.H8%<(+QNRv;]l=>CăU"/_8*SvSd#6cWBTmDgKdT(hPHfsIY(k&^<l?PaH2crPZTZaL^<.>:7B9^MHc2p&(ăU"=]6hhT-=8:t2ns#?GxEAF4W\?XiDD-RQUSu8dy;[c*xUFZN2xi_.(T>vVTJsstWăU"'XG25blht^ENLjLWjDgd-lH'_$DCS&D7\r,ZaSCEVWLfLY&N0JOB\Lv)q^J#=47ăU"Z223YEkvtmRcfK:E6(K#kOI4-(RncVX1s4P4l=U%*.8UHjxJA-W(t<)lg:C*gXAăU"0ERjy7]T0v+>mYAp'('E%^XUAlbiYnG'V6bDXKq^.bCt(Cq.r6(35nwnVrm6U_LăU"rC,':gjR94F<k4b&q<\BmKSQ7MnuY]C[*C4[^Ix;q6dQsTJI,q&NRfbcqG5EqB8ăU"tpfcP&gky%,lx<V.jRL)Z'<+n;VKWL:Cg*-<ISqjob>uZ3*jZ4EfIYVMueCHvGoăU"%_R&j9v7m*JQARVlMIqCb^0*sm1rVb/lwAW9;tX^jW+DIK_5?3biQ7_BHc$^#>6ăU"P'$((Kn=T#0ZTbM.)#]<0%dzQJ^d68fbLwEDynuR$JQr5$Io_C4_j>v5c[RzrxSăU"YZ+q/5j3b&27&;Q8dc>d-.;C</WbdnhSJ\l;#2E]gl,4g,62)>a'8+TPYW#y<E)ăU"9;sr8VYw=$^4AetjSZUmaGi%$;.JR#L2p,('+8;46(,)8M/ZbfLa5m'X7Eoo[9găU".88saCHQ]je.HW#?Biy):QO7IHT;oq0>'n7ePzqIt&8WxYTJtF+0eta*eM>6bH7ăU"<QcA\Y,imtQ,6$/k7SWrii\-3LqXPB,T4f0#DXk#/:JMLb,,#Nb3nL'Z=b%r?k^ăU"&ulb0BY1A(r\E(AY-U<f0*J<.BSmXQlrIqT3;JBnK>n_th4mPtt7*)a9oE<-W+jăU".naPQSsZRdU.l([oYAu8ATbUWAoH1qjx1>dN(hkH\-Ag0FZENt&,]gEp+.ACO9oăU"+g8mLvmdMPx<]'?mj<3q$<=6\.bdSfQ[5g''J*Y+Vrm=24gtd8fMI1PC*/-/>>făU"ed5<fMFTDa-G=Cm)Rxx4uMzPXd?>9-r-4s^YqVoP9DP4u\VH+vC_y$4EDr9i?^EăU"#P=i*H+vhkgbcQ$MkQ>7HmO6=Ekzsd$_5-s2U<OP%4zNP8ke:vms.,)tnybQDb+ăU"_WZg[;+CRd(K#vQ13$?f/e-+<W[kcTP+\D6\].c;&_[6Goc_;\%nxrQ/vcyc47AăU",QCq<WC^1Mb2CegW,umOm^'r*pq$1ZJT-CHHDs]IA[4,[x5'-AK7tOWr(7<%IZ,ăU"nT=qYP8GNGR_(X%+TSLA>SFZXMU%nMhNx_?882]tNl#dElZ3%[N;=KN-TlGnfTXăU"G$xGbrd,YK%/.>E[kJlV\k]?J&ok>v\b1'?SsSqn]?Pr^JlMVpBl*xT+OPM7K\iăU"#PTu1.vPf$TN4Q5Yh_n<=mqX3j7,9kD<UDCXs4pujSiEH8W2bWBqvJ$cLxP0CStăU"'wyovPG0FBt$3#t],43N]]#AK4Z<wr,EAN])EN;v5*fi\WMu44#/Ac,+%2&,M'ZăU"l;1e'5e6xPB-UMM:Q+o\0DihyIZ:h'#07Eu201=l%<e/?DG=v#WCObGPbi2%PPHăU"DRnBBP$e%9Rr$Zu33g48rzKZ_4]ZSDhRY9Ahh%L>[prC[NQQB,]q:c>R]'%dv/+ăU"kL^s7T3?OU:cA(y&B.*ev%/3;wbuF9gA7v[LG)RN[%fFY2J#-9<]R]#.5i]nDeyăU"D(4<vY*C^&s6dj>Kx;-?CCBfQ%dC5^>/erd$9N+fOVPgHJ&A*jHV2>(2*tt+lrAăU"LY*)\ip(7;K->>r2%2A$gvL#*80MM;V:vM&Xw4/mgwK'dRLc,2.hHg=EAA1ddg?ăU"AtNlr>qq_)^WN#r_k3b-TY%ccuF%r3umHlG/8DMwgigAs_EKRCTsMwfE&[murmBăU"#zmJ:Pe.g-KPM^$%*z+9W&,TIvmJ9t\F/v[tum6aicJKeLosG('8-0AsVI_M]FZăU"((dae?AiB)a,zMlH/rz7W_l-KnOWb?h3](LF'b,OI_L$qce)mio1Wxfn06qIEShăU"Y3j=qcdmTc_Kg-u*TJ9n?b$mRJv$V8s7cNM:s-aHn?bKg?8Kpl\]w01?xxINnp$ăU"858hZ24e'rN;cv>['\rN$.UGKJmUstahS8:Gu64(0Ty-jFnAY$Ts^SVN%<]D^m:ăU"QQVCCA%UddP>)aHDxJjIE/,s44^n+U]*13(p?hjbLArSukCIvgqT0Mt>Dc+/^LUăU"F*vk9hhO[j<t'#lPAQrhX&a77N7_L?oKmrA$Udv3QVb\:jQuI<Wk7Nj7]6N0(&JăU"xsIAHC<?O6N47]vz;\U6NO7_v&5pajGUfMSG+4J\jYQu-z+c+\jYQu-z+c+\jYQăU"u-6::Y7Nj7_v6+?)\jZ;u%]cEW9RVhnO-2MAs2QkLa$IEdzr*.$Ed\<>.k&BMHfăU"hMAsF&$Ed^HK[m_JnZa#oB+rBq$K8TIEdXv(6$Ed(.AFELfM1smRG.w&BMGf,MSăU"W7*]vJHLfM)u>SMkxmi3.j,lFNjG9\$jpxYM?/F[v9a.tt,66\UE%d>\#aIAt?]ăU"F+.k;b#,f6;wBFrRSv$h$SSv_v;8_)v;xD0Xjsc<72]6ph9\4jJ'uO\N7I04.kbăU"H(^fkEUdVM-nR)rB2F#\)fr^s\h=_)x1NAM)-tHH.a.dtRFK%d4hj)M/Y_)w3+măU"7kH_'NSS$4G)d[tC\2Lr_ne(90lE%d>\#PsONY_m0)t4t?t?j.kbd^5]A<-u-IIăU"'Etlg6;ukm#mRd*1m<KLUmeD[6.jlEpBUM?MFQ3ikE%\hGq'#:0\$jxYYM?FC[văU"9x5\h;sLNA>Kr($)x\kmmQ&N_77NoneS-Mkxi%_Ed^5a($(ck,k+hDF/v3B$[ppăU"3k8HZStVPrlFCF7+.tt-CF+.ottCFR+.kb3dHmD[^EdF[H..k5b]TGpwj80t_)xăU"m7IIedp^a^>+3ed>>a$)3Bed^a$rH,]M6\3yTk-G^:a1(fl;r$#2A<])BrnW,5păU";B)rkb$>mZ7GX]#77O)nB..-dHH.5x^604.lbH]R?B:cu]m/'glEdg^aBbO-]6\ăU",3ua'urB1R.EfMWA=[m_2n[j2j7G^__<jSE[tpg;'uApmVgn'SZMk,TYSrB$u%CăU"Z;KnJ]3tzb;ngJ]3*Z<NOf0=_g0fdt^O$:9I%adrS_OmQNI0-3%Hc.wx]950ttnăU"&g;wABQF0*x8nm[Rdj]:Vk8XLI.r2g]Nn0GFjVk$8BI\uK*/wXNgp2g]Nn,\)JlăU"c<vvY>;]0x^A6Zz]YSrB:\yA.l3L$_U(d,..*lBGFHnu9$HSqs_CqRB:]\$fkZNăU"M?F_Q3/in'#X>+?ni#6XRkwns[7,C^tmL_Kn-A?6j6k6;wBGpF0xbRomQN[_7wHăU"[t6.l8bHR?Lr/M]6S4G'*lbH>&fKUd=lfvcGPr^15:=$Uddl<H:UPr^q1+[AQ6năU"H-rNk;w\BIFn*$^iI'edb.a.lxgFLEtMLk[\L4/lbHHR3t0DMAI2TV9_v/Cc=/WăU"lbS:&_Udr/Ec]HV0MK#I\mgnt5te9O9OnmVSSnvdPF0vL^a_))MYmtV*n0SsZk-ăU"nJHp'Fgt*n0d)SHScs5JiuLLO$ERkwso/cH_ncG.n/H[v9a.$l'S38G^[K77G&^ăU"a..0$lB.5x^60a.tt7^$g'mY/xB$nKZ.$e^-areH4]hk5t+rLqNMBmGEZq*GFVlăU"Q;jl4\KZwdmdjGH-msxi?;umIXIEHXtSMk,qTSrBM$;\5mUdVopSm:uT]m?tp>kăU"84HfvcRTvLH07^wddFjHURTvL^5;RSvL04gRHu$)xm7IIed\677oAn0.x,^hGwXăU"DXjwk'&A'b^h=BP98BL)Kn[1thd\4Y?>D++DXb&;x^hXg&x^h70&2d$7BIENHTSăU"SKr^b_%Udb.Px^vWY+9uk</Fj']_Ll+hD.7(2.1BoM$?Kn?/pt'NoncjR27on)căU"j27ronL/h6'7H:DX$6=;slldGwNwmmicHpDXA6N$^9s6ouJ0u2ps3s?Rrsnt*_$ăU"ZgL5rmYQiXsbZ2eVJmk\8pdhCfNTYF(rSuu;k/=EmQsi:u)jL$lppy%,,ucJCtIăU"l.?u;OSZv[<XJPDY-DoA:pp7*?P>%xn5mPTLntu%EuDedPKG:IB-cQE^2Xbb=wUăU"$P+c$my-kRMo4iQr6WYAyXTNf4ierH8q?0M;R+=eLe6gYDNiQa>?_H='\CLVfrXăU"3.D2N$%E\:=tvwo]Y[up[m1$VUsQj,wW^M>8SXB80Vke2nC;&v]3C[[1tjEjN-^ăU"mmv4?'zVu518Pd(V(qea'C81q=L$H<Qf:?uIx'Er8mM:J&e<(Red%/b>#nk.g/_ăU"p$3+)D/9c*,kHRK[#k,g,Y/DDPRr2:r8[:FbnMq'k];gUTBLPN]3DglFdZfrtFaăU"'O4-(jdc6>\:Vkv$&V&F+E*(:OTaL_]w5fI+cEsIx/;LP;=Hw%uKMEbLs[_HCIbăU"*l5r3G_,EBm_2Z&bGkTWw]OMcgXiq$ofwv+EbE.9NKur)hp]2NkW7l7UK7vNP,năU".U1.pQoWoDh51;FT3**h9Qvibs-6Q,1R<tJzZO&Ece_M^'$\qy>XoWb?#$=+rtdăU"IbfoB>rDQ,se6r>RGd:V>jB5#FwtGZTY'3^(Y$.&alcrTcuIrw%L,_3/+ojsHy8ăU"Oa<247hymRQB;1XIypikVkLmbprS'+[A.km\LyaYb+47Fl&[KsI:4T=\\wZx2?băU"/$+=03?.yr7IB:VuBfIa)lKJ:Y>PsI]YTUnW#XeZGOOgfOa5P^Z#*$z1mkDH;P1ăU"*ZE;jQK^hHqdTgrkmO'%0MQ,>*9cT9HmIiL<t.=O/eb$5tQMVTDiu3:5=>sZJtWăU"#ZA'4E39_Sfn+Jjsf>za&lp%aYG[ROxnyP;/i+n*\fNT%fIS73*3Fc$%-9gzz#*ăU"7j7j5P>2*t#vO*SOX5_v#>tFnu^9&CS.R\V5(X,eVij7B2[&-t;[=%8:(z\;<q9ăU"*X4Eq9tujr;2K_Oqg9_Y+&sDH3]rDk;=f??NSLPdBZ0<x$7I'-3<)(3VIBwYTGZăU"7da;(b7&JBu8a]mMoex5;vEOe-bJbXK.BgN/&gL6sLniJj0X(D+VXr)nzOkqImMăU"6sN-qLzh(Yh(sy:S?)]pU14HZc*Ob/U,,MA;*\:p_sN9uVvmXIvHShn+yA0I]2găU"vjun6-TTDDxftH)?h)Hj^,sfW>IQjBvQDCeXhmTXaG#,ty+V>N2isew[W)\Vcg1ăU"DKB_jeo:cR=$A=)4jd-B+4#)_JRjevOJkFNk8t)u8nC:^gEKZhc$PAc>w;P'7gpăU"r5gMlhyyz4=_82,G,hUmWT2$*H1YEXiu+w2WbT*>X[CqcK'aJGL4zo9(bzo#]lJăU"1\.f=ZBMZYb_mIamJsRfh=^)XE4^Ha_L:itE5AHS5YI0imKDp,5&.=Nd\+f/F3dăU"=P<kA_AcC8+YOMVlqEYOtfWd9^6g3MlJ9tXpw=6OKfkR9&XO,=z7Ccc<js'l#)+ăU"q6JN3k]pxzU:xb:lEb:W.SpK<fTlPO3ce7KLWP3sigq.bb/:WLrtu(Bm:Zh7K3lăU"79WOHlp9OWQA.5bb:WeLru(NBKri41HTDS&r?HQqd3kfw_h(D%b6eTlPO3DULruăU"?(BmZbh7KLWP3sigq.bb/:WLrW_#M38k,4sZ?b(bEb:WLpru(BPK4i[\_0d3GiEăU"h.sL\mPWBKFi9E\1sY5MP3Esiq.5bb:WeLru(HBmZho7KLP&3CrrW_P'bY#sd3EăU"siq.5bb:WcX-Kl57(b>$2uaE6wWtlh+b#8eIr5UWP3sigq.bb/:WLrtu(Bm:Zh7ăU"K6LP3CRtr?Li)i[TWP3sigq.bbn:WX'aK\c+,iEjyc7?Pv^3&rgo6K\LI/1qh2%ăU"kqY1pRdDevvWW3w2QD5&vQaE'iy=0qXz:1ZhNRcP8]h#6_hzixxMI=[VtKKv.*BăU">X.ftZMS_u9LXQfq:er7gWCZ&r^hARGRdjCu;uk9bv<(n\qYh>M5h6j#WsH<sFeăU"Zd7jWN_3NZe?508+4s/F#:bE9<3TjjTnQGaA:*E=,f'D:7Bg>fg8dpr$;fX3qqnăU"IzWO$Kt_W6k/[/Z-?b%/uwR#7?G*LaidW$/3G<V)b7Uy$=yzGp$:0;EKa]+gg7wăU"&UDU5<uT$\/IYuO<VF1SmB1J*u$^ey[%U23oD0bMoL$1\zt)NxuVas+M&kO'-V7ăU"WexSD9=&\#9gV*9xBpoN:p\i.z,/OE9bb<,&w?66kZ4DDq-M9Xf*oDGpU7mNQ%\ăU";f#B+7/ZhuZ+4Icfe_eVPK3RkHp[=XZhNemD*kyeL^YYbnNR0hO4(h$/4c_F>H=ăU"-&D-/c?Qv[,htyhObR]X>IGokq+^>wcDpH9RR3nS^u.R]ua$7-Rmb9ZfMPQlryAăU"TYsrS-Rm9_p&065)as;5k#t;67Y1*r6)1EG_xVZmhCj'WvKb.?Ln=g3Z9b+24ktăU"*HkjO>,A%EW'K2ji6w-Y8rER+=q&LUI9dZcXObS>ZCx74N,TG5WMzn66MN6tuE%ăU"*u%im\',pJ:V_^xp;S8BxnOoD4*oCBz*hD9+RsA$oSO5]Zi^hc/b$Bqo4yOibfbăU"jB]fq_(NTBJQ4g%0]Wo$h+Q#J':bJ(hzDGnsf:a)l$sU3\gTk$1KG[:\=6af#pGăU"'jQT3.3ea4gV9F_=L:S#Qxn+,=\E*^t,&..Xn[t^(&qGMY(\s8CsMRT$E)=C<_?ăU"e%Sf*ds-[\s3RhJRlf(f[,ORkF76,e]:UJoCM\-)D8Ec4%_XbhE7AQQok\&C\[KăU"dc=9rPLYajpL++=o,B[M>8o.\F*2qA'#1_6(KsJhq20K^>LGr[PbL7fK=h<9.JpăU"&3R(+k.?<wEi[KGSq:N\clf<TBw1I\GxZ20ke>kYMveM\_923DK>5$XoshLO/lUăU"=?eM>qgL[7+SP^DWv=wGh%LsE:FzW=U9Nt+>Xj<5e*4))b.M'P1EH0*?%l.W\R)ăU"^daZVx?tmu9a\c#=Nt$<UxbsD()1V'QPD8alt.Fm>cWB^?l_IM7u:8Lbpq?vQYaăU"KjV6-A.0]n5<Q(u[Xwv=GB+ZqscNg_c.fiV6K\.cxpB5D0<E^-u]e(UH;YB'PHPăU"1c1=ePUHzu#]9LY]VbHqD6ZXfd^KkX70Q2b[39t3+K7aC7C=vfAqA%%[:P+PF[<ăU"<M'i8YYCjqf;c\zGMZm%tG58bZ;Ru)dtEEIU62*HX&6VDFFv'Hd(KAZzs)p)X+:ăU"3X=M'eqj,YH<'T[QX\2y\LDBF*Bh7E.q&Xa]FA5_$gh(0\m(%&Jk6QL[3ZvEYWQăU"Y-25S''S5)tJ2W*F-^6exLEw0gR/Fcj8KT*u/?nhx(%up()%9%%%#-%A6'$E?G.ăU"lBr)%%%H0%%%-%%%%rf%siSt7go6y)<;xzp=MG6l6f,hQf6v*4$dAgAZQUuVfd+ăU"[STDW]&<O-gFgVKX)[p1::>UZt,?JiK1Z'rF5iE3S#kqiT'>DBIW%/vW7-VC4%9ăU"8yipeff#MM/SOW$+?A*TC..t5p5hZBblkipLm53f<nDZc/'mev<DnY=de^1&/x<ăU";F;SCt:cfVr5<LlVjF=1h<jFm=c46Lk%87jc4v9BRPoPtrQCNJDMhhz9op9Xu[qăU"wTKtZG)\iwrG+[hBDXCJ6aUqW9j?P--_3T+PL_4^g7EDc(a3/iRpF?[BX-s1iU'ăU"]'8At[#698PG)cT'(h4dO^7'S:r&,ZJJ39QcogStm;TnHjqCo+_<pI5t28z]loxăU"?_Gp[8N,Z/0huQRs$f]B5<3&;p$>7huMOSVZm?Y?xFFqUrP#Ib9TfmjPP%nJ_.AăU"G>3'g&&S,_27<*oGF,#DeL(OH&d.3oscc6(_Ju:j(G4%2_'U;/Qw:ga'M7eqKSiăU"Sto^mg0$jYRbIiImMn([.XzP5Lna4^Rlv5-\ntzD6CuMrcLne9.Uqb[I*v=%1ESăU"'x+2iMUgU3Q5p'd0[DUG$[^35eWN[6k$8P^cx^XiAnXj2B3kPBPY5v^>]OKp&]uăU"U.B^HU]S/&vU>J:Sbp.hbD3C?]6mwtPB&]p.865cH,fR9d2E]OnDhs-p'r[t*QAăU"8oT(;]Xv0B&PTBb3MIa*5gYHK?:n)GIt^W.Bd;0R(U(\;3H4]WH:jgUG-VjI0XrăU"w8bk;._tY7C]suT]c:eOq3rfoIxq2DqeT?MOO_>vS)]kU>2lj:/<Ta^RskNTYqwăU"Myy8iS0=:/%U9/jRG6?'dQ;z'Q''xxB*QP$%mY[[4_p</7$/430u(^_[#v#-MW?ăU"ptVX7M-X5.dqQoKw<2Z'9lZdeaQOG;TeRKQD-G;R2eZ6E+<O6D;z-:/;<76S-YZăU":xJL//+'=)[X-X#=1c%sm1IKVS0)oH:;+ZL=[XWRUHE[8/6Zg.p8p58z1*m/WzTăU"=78v>g.6;yQLG+78('oCu#:y,tCGC/d';h0.1<)iuOzc&xB'wht(ySfz;lywG3;ăU"TeK:Y\c?p27MM.M:0w[ReZ6MW?ptL.JUVs3/Au?.AC].jt5PZ=WWEX11wH3eA-_ăU";af,E+8<L38]4$l.9q=DUcB1YEhv4fujv$*uZUAvrqF+$$S77tK7C,Pe$^gurYbăU"mprRH:7+#cstCKBHf1]FYC]rks]3?>k]GuDH_#jj;REtAp=OSB\ot>k\D6fKUs7ăU"FbYm$(grbb.ARb.kGsthb(cg_iac\4m(jr0bd#p's*nm,n>QoS>:K^Yv#K^kxbnăU"+q:#.T5Nu>njcd+d9trGo$]Vd1;nXmhuWrv7E%3ssmTcr&a<LZdQh5U2tVAqku*ăU"clw).&CG:8.iKmsv3FNHj4bu]chkZjmR*bDL_fnV(rV?WgmhXk0r(u't#D6Vl.xăU"?k4vACNFFlqqO[so9g]Fa9Bd#SBTHZjNkt;8BHHcPm$G-pp$(S1ws8TkNZEw%,uăU"p(%)9%%#%-%AH6bEIU&6Q^[(%%h%/%%.%%%%r%fsiU%SgfxN.%<>\jm5wmAIw<9ăU"A_#TS6we+/zydzb05n2\1e=0c6tkj6?R3&p<?\mZPX7hkO(FKrbkvYhlhL_2hLhăU">NUjm=ra)HB<CyQJ=:B,7G=l'y#$1nm8=.>*ruf:RFs3\,Ht>3%M?4--r60k.*dăU"*6)hp>rrmOiE[U,$,?9wi)1g5iB1'8-A<X&s;fr$7/3DPT:OhNL,do:qGKB__X/ăU"n-rf?M97wt2L98D(u7\yC\W?iL8S]F^UoUm:hgrPP>7;hH5N'Tt]V+rnnuAGQs2ăU"4+:kevv5(qMr%[T^Db[29*\/\o]r9XrT7:djDPm.?;8Dz7,o/<2,g5(YcTMTOj<ăU"\S?jXQ,bNS\<AuMYsG9>m*JpV1iewfQL?,E'dz+dy*]biMg+5W_g(G7hWQ#/:w/ăU"vjD3U,3.O[JVQxfDRfgKG7XZ?r)avH7g&8_-HOD/>mj97NXCPYG+DUM]))_;pdwăU"xknf1-*/4ZA>jS<x5Vh;fM>#*I1)pxln1Xm+1G]s\a$U$f*F^J-(F$,\f+1/>?văU"mOc/'A:d9aXn.f*k<t%T=mpiS<r]J9Ou]^[sZXcSHvjwaNL,ixUzI5I<a/^x5i[ăU"yEEep^h''bAH4.t$.pExKgWm9uE7'A<>oKB&Aee7+auSVtS>h_>0ZMF;ARa]BGSăU"XSeGQ/4iruG;k_9_*L_]eOMB+C=zX-V1J9'PJ;^d09AFqEfkOpM]N,RI*?h5',+ăU"<F;r?.ssEv=t3PT\uV.HMIFxVb*P>+AM&vI.*N\v<-RY:(j[ct(QCLw:kHiYJibăU"iI3'e$Sosvj2SR-I2$g<:a>d:SH-A:d)m8[5rU.[jUd;vq'&6Igc*.Zm&wkuT,năU";b3\mUsD(wOS#>40ka6SnV%AK1$k#mZ38OvS:%Gvu/dVm\Taq45RS*Art?wZ?6kăU"_o:(?i;;gU0O#n>fhUI-3XiGqi9GB*aa0c3MqJb(ZGdl$uB<hLbbGa5H(f$H(]>ăU"R8:djC:4Eavk8$uJVt/0x7&&3R2ywSvt3rct'ivCHUc2F]Ch.FGoa+m6Gb/QLP_ăU".L*dvnJ2w$;Z<Xu$qXqD=NiOn9UiSpdKaA;UCY.0.?P0&-*:GYCbh3Kwg5wx<i/ăU"X75H^VX1V$/SHo#H7dLQ#a66d+BAG*N8nA_\dHL(1k?eiKC[++m<u%p()9%%%%-ăU"g%E*$sE>Rd%UD&%+%Y(%%%.%%%%rfs%iUSn7sh&w;,:;Up9L/I3x?$f_DCGs3eRăU"<Xcb%v-b2eV.k0Di.rKsLwltVElSRGT/mb4ZW<UBH^qP'0fo:Y%>DcI(n63i>y5ăU"9&5XV\j9vEl=:$1)Rd8&C$Bp\YY&v0CfYMh6H(jaa[+LUZPFr[(FdaJ-DXY&:z8ăU"Z6W9J;TlKnXR.RKfYi6#)1f$9F8Pf;p.5/E^q&Y#FK6*9\Xl<<7s]=V,+v^&]DOăU"w)k]:sA1=yFf2NPz9?:yWC44K:vFVh$.L3&Bmh0K\\3*;yZFcGRCkZ%9qNh?ChUăU":cKt)7p_,T6CL#YTQG2_=ql(\=F*9wVsDpEOL,;F:rNW$ZDv[3>.7$lQ4]36FrSăU"(ys6c:kpC)quYb/,L%'up(%)9%%#%-%U-6bE]E5T#_[(%%d%/%%.%%%%r%fsiV%ăU"SgfxN.%<>\jm5wmAIw<9A_PTn6w\-UzyCysUW]1\1e=0c2tkj6?R3&s<i>b6(8LăU"Xg&.CKWbkv_hlhL_qh,_>]brt0YC&$3S4zea5Y](.$0H&N(BUIt<0S['ZwD[;jLăU"6j'*v1,PK1A.+VM/kd*d*6)hp>rrmOiE[U,$,?9wi)1g5iB1'8-A<s&3Z#JBY*,ăU"c<;/9l83ynJ/KF8)Bl>UN(uE<mZYMKu7/-X(u7\yC\W?iL8S]F^UoUm:hgrPP>7ăU";hH5N'Tt]V+rn.vAWQs&4+:kevjk(qL#2;.AcaU29*b/Po]u9BqV:JNjDPm.?;3ăU"nxK4J;TA6aF+9NSxXOj<\S?jUQzbNN&&wu2YsG_Lc2zf9=YRvS#tY5e,Pz1\w/AăU"LAxV^NoHVXj;U3)\WOs9qCdC26&:&VJVQxfBRfgKG7XZEKHBL6XAOYm)i$4T0RGăU"/89M^:?K(4=9A.RmZJSxNGI_+SR4X?]0q90NWho/p8\['7+&PxGI+1I(+afv#mlăU"W6$*F^J-(F$,\f+1/>?vdOcE'A:d:a=n.flb<tvTOmp_f5K#7/aMkl?hi>DfcwqăU"MBobSFM%Nbcb=q)kN(r#z5De7su8:4#m?;wA'J_y8FMI8MkO%#?U\ClP+\t)<3YăU"Ep2E;uHj/>L,)AR4s+-A2/$mZf'_wu,)52>HG-3Kt9c3+4[xX-V1J9'PR;^d09AăU"FVEfkzdvAz-RI*?h4],+<F;r?.sq?tBO$oHJYK3ohU_3c?Zkw<Oc\cwhbz7VcRKăU"#54o9k8mCzJ?D7T4WWC_,xx?Dw;j#N_c&(<PI\$k1r+H1;J^kE^V9&Z6GDiEXwiăU"9$wMZj%Sl+8o+boWCC4zA-M[]T]ypY?c;uMYZ$2A[^)e/6WZ\hZKv.MS,(i5Y94ăU"WDt.A<-p$w6>9,4hDfWP>'#Y%,>MP8GzDec6cOn[tj/gQ9-7a\DHtxgY$RY^)W+ăU"aSVrbMhphb$]BB7cDBKaDu(wB^-S2D]a<kglFnT0wp+*;3^b2ND=nC4lp,.AH>eăU"nR&A[pDjWJU[PgIVbEZ?k]peza*0gyI6Ti;dRWvEf7=Cixq\Wi7d7XRfk__:Z?dăU"s/:[FUl_k7%:[S.&.DBQB6\30K=k%Q7q$;nG=t\lJskM;,E]_2zs[=#k_L.Db[8ăU".sXMs:cIw+%up()%9%%%#-%'+]$EZp&L%M&7%%S(%%%.%%%%rf%siVS[nsh&\avăU"t;IU9Tnk(;N1%FK#+I.f.H_/*JA[Q)U[b2#?&WM\-lW)Nh,dzEbabR44FlfgFHRăU"^r_-$O&r#o6DK)^$u&uT4o.)K,ZlZ\7qL&dWGX3.Xd9Za?'9b++E0,:N1>y(vAFăU".kqZk96[:VJTX#(\Go_k*HIY<G0D7-j(DhUG>L/m3JJ2H9&S)+#q-OI)Lz+:m=yăU"pgvud3XTip>I1&JYOb%%,5<SOXQYpbf33Q6Y5%C3%mI>#jGIP[ba[lA5Bg'_dRnăU"c4bY)A+P-XA1$u(t]R2F6++uO?Tvi/Vg+XL&hix_Wck-VN\*L\e?ShZ,n(fUi#%ăU"so$oIJ,D;JsNo[B^w5?ckcr_&4Fc:GBMD&wk7O-L*wcZ0DM,lf(u%p()9%%%%-păU"%^6bdE<V%*(_(%+%f/%%%.%%%%rfs%iWSgRfx.%<T=Tk(5L[&Hw<ew&qpjl;ab9ăU"f[E)9.>ERi+nYoU7OVM)-&JnOIszDrsBgrYxd?*YCQtYlhLbB5fhB$J,fLR,d3RăU"((:E4sGHP%;<-1eDVFHBLRpr1Ox+a]TnhVu:8']:/S#C<fDgYK^q5R)fa*,7*/6ăU"H,qf364on-&e&g0s3pV9/E5o#bM5elTNZ15=%wNzf&,B2gpj2H_PHZ.P:,ppYeoăU".tEvUgz\p_fMcIeE-E6R&TnpD;UM.HZ4ZD]&+j9S%D*_NjFYJd0ee#>hOp<4ZpjăU"B,LBWr/;tSW*4%[G,s#ThSrZcxiqPl/Mvksb)5A;hVAyUyvG')>P8?X<*%uQx.-ăU"peiOa[lRq[&S-7L3Fl>bPqjD&%E[qO?pq6?mTub#Kf##a:3W'b'>ZwIZGk&*3#GăU"6q<An07a3?jhV)8aaBA$-mRMsD-%eGPqi>zo1+?#pYkl:JQ-h'ai[c%#jQE+zfMăEND SUBăSUB V2ăU"gPIj[pb34m#$SE0rIic%f#ja>u>L8Z+^X#>;J&[Z9IaT=:Izi+U<t[2?$3ox^FhăU"yT>MM/D3.\C4PHBF[DuOGNY3%r%QPg^^qakgKpqlK\-L<)PGnK9&g*0X_Y33o?SăU"[Ie^#Q%ndME6fb8^xY=WG_g7jj/cY=gPgc-PGYTM-p>+?LoYIfdZu)Wf(G9nP_'ăU"b:Ru$q-d)tf+noEcOZL\*Ug#V1P$fq_V:e,cV.\['&tJNUlG=hbX]Y_:\KVBhrXăU"\R$ufjbSP6c_x?<bt41(]zpu6(s?hwj;i\e&#vWK&f8HM6aG6DaCr8tSt0p<taqăU"D+,)a6UAZZHB[/f4aSdD#'TkW2Kg]jJTdfqo'&Ig&[*Zme&wuTb,ng*e#Iv3A&yăU"<bP^+Gm(Pfh%b3dBWR]IV.-dPZ%h>5e\5,pTajq4RSn*atiuwZ6kB_o(?Ki;gU*ăU"09n>CfhI-W3XBqkU9B,:aac35MGa(5ZAr:uL]p7]mCnWY$el$>;k:diY.]YFW_MăU"Hi:HCpu2f8=RzeoguW)eognFCX2d_f&9m>9FOC3X',11Gi$K<<'(FN4y2TMZnajăU"+2H]oH8>;KXZ&4dNW-'hPVXfQ387O;7]>eh6QB\7W?d5iq&e/<BElFi\Rn/j6Z)ăU"-,GLCKjx6XJba*fYl\QykbqU5->Bl4W\SL[)n&=b&N(up%()9%%%%-%<p+$E]8măU"jp%N&%%'Q(%%%.%%%%rfsi%WSnsah&wJ+s;U9MLUSN'1FK##+.6.2H/*JBAM)56ăU"=#]ZD)x#(g$0Nhn<z9>*aR$4rF<h2i$kjMc2%4&\uX#J/o\pc]u#k&rO;&_dj]păU"L$/Xm;cW;0T)\UHjo3*vECfY]62H8G&Zj<JaZ9cWRnWD-TUfq[);(q?<GGF7-AtăU"cUpjjs3R,J%:9&x;7=);H.g9:S$o*js_\Xh&:Drx?Lhu\eBA&G%[EdS&J)%8,SzăU"qDI>no;YOAYC\k\UngIWt[B+tQLFJ[UmvN;%EAP-XnGo_e6*5$X[DSiQ_R-LkFkăU"hUNUL)SSB_gm>d#\p;JR]gFWFdELf1Ptsmff^po5R'W3XJn93L2dYk3$z<u90boăU"S^<s2O9S+4U8T?scv)g,;hup%()9%%%%-%>f6bEY)Tf.&_(%%'d/%%%.%%%%rfsăU"i%XSgfjx.%T,=Tk5\L[&wK<ewq#pjla,2<fER)Y.EHRi+Y=oU7VNM)-J%nOIzuDăU"rsg.rYx?p*YCt3YlhbMB5fBq$J,\pR,dR_((:TJsGH%3;,-e_D^FBfL2p1>Ox+]ăU"TTvhuk:8':R7S#6\f<q7DEKXQ+EmRYM.UW(TuE+,Btt)ZC%p^V3t=/$+-IRdhmrăU"z^4215%lwnD&L,&Af=[#7'Z_NM=NEUU)lSPeoR#/&U'c)vhr,RIoBo+9UeM-&wEăU"KjT)UK>bq6I/)[]xP/RY*8.[tZA-7mM08hbgf0G%,8Sj4QQ\7^^?_wk?B.uqV63ăU"/etcdhbP^jG(zWqjkDe[nK_]p#j6D9sG.d2yAxGNmn\tQc[JVr/ayU81>(PCO^SăU"y'#)C5qt9H^_$D-b1EE?Y9'rmV'Z&;JE8hX/9t2+__Y5-H[nYb]rO%ie?Iu&l+;ăU"I#6T.-.#Z]'5,\/e];s>,aM9LRbS;U8,2k$cJT9hjETuXA#&.R'OyLb(SaQSbmxăU"2HurWBQTT7(O?_RSEq(TP1%M:D$6P.n/rBsSoYr/vwq<s4H4p74Y7*9r8b2F\3NăU"o?GcN]Cj5EccCmfgL'r;ku1O%-pYL?L.#hLI0N3d&my-O$4kKSk'#?)UCpP*+p)ăU"<r3Ex2hEuHjU+L\iB/,l(J>VT<NHAeBEM#r>qMEC-F3t9c;3^[x=XV1H+9PR;]RăU"S/2\5^0r0NM]z_)a'\Lqkh]p(=7;n6<\Vom(t5dbc,t#qBWD7]b8=h?+,c,LN\kăU"iV3RpX1QafE79trZg^:J1kv:OkDR.1mMj#$fcG_]:k-%mp;&1]?J'v5\GVg]*<3ăU"OOEut9DL2OE6^Qwf3SaWV;Mz&Y\RH^NR\q_$xUMZ$t&A^)eZ/Ww\shKv._M,(i_ăU"=5^Wpr.A<f-$w6u>,ph#DcM>B'Y%JM>P8G2zec6Scn[tDjgQ9a-5YDp8xgZo$QRăU",/Wa)V:rMhp<h$]B]BcDB7KDu(-w^%SM2]a&SklpnHTw0+g*3VbORD=nACl4,(.ăU"HBe\.%A[5pTWJ&UPgI<VEZ?-kpez6a0gyUI*l;[dVvE\f=CjhB\WiB'7XR<f__PăU"ZZdqeI>Fg[pKr*'_XN*M3O0FisYWi2+>*mU<dK[6(dD;]cB,zR:^[&_VX>Aj:DLăU"mUms]Gqs^sar%#up(%)9%%#%-%#b,$Er(^s]N[&%%S%(%%.%%%%r%fsiX%Snsh*ăU"&aftB;e5T<H_iDjK=s>Ryg=GT\eTd(E4FuRHC0C/rP:pbE0gx66LyeOOJRlr<5/ăU"lNFJ>b;)fnzDz8rVQMh]x=,x'gl&O;&B_jUuDbE6$=)V2#'-#2p_Y3(_DTR9$&1ăU"OT]VnG:?pf/rYsgAp?fgEw2fJJ7i405tV3(q^qC=$af0m3J22(1S)I+#mRHI)z+ăU"e:C&pquwN8Zff(>5I1JY%Oa%,45^OXEQYbfu336]D5-1%amSvwKGI[8dmk3Z>k4ăU"2tXFb-i.2Qz9;S'*BnwY<e?5E+Omrz3tcZ^V2-7xW.V5C]kW-V\*2L\?KkhZn(RăU"fU<%sI^fnpoubo>kw=cuCvZ]Skc_&u4F:GO?M&w^kw4,p$wZ0jDMlf%(up(%)9%ăU"%#%-%s-6bE:JKOP_[(%%d%/%%.%%%%r%fsiY%SgfxN.%(>BTk5MR[&wV&Pujl0>ăU"ia4I]-SO,uOS#h-ow=]f#h&Q^.fsRgw.k>.X6iDbyvobw54WkhR>7HR^AAV>E5tăU"&:b$P2z1jyaIHo1fD0wgdVIH3[F9<i/.;6$lcVCfd<P';u^qmkYQBP]A>k5Sr7TăU"_D.5VZDji/:x)X/6EjY$?X(2;,&Z3^#B>C.5&oP198u7'nYsogK_rQ&95kiS\R]ăU"Iupt6SKMhGpNulLE97Es5SWW>O;I4QZC.IoljD]^R,9SY%D_NdjFJd30e#6GhO<ăU"4cZpB,YL:r/3;tW*'4vG,Os#6fQu>NGhu:*cFxrC'P-]+T]Ayy#NG'>][8?<*r%ăU"ux.3WoiOta[Rq5S&-7$L3p>LbPjDZ&%[qCO?q6??mv^W#K#:Ya:G'e$'ZwfIZk&ăU"()3G61q<n0p7a?dJhV8a.aD_-LmRsD2-%GHkqizof1+VpoYk:JPQ-'aki[s#XjQăU")zCfMLIGj[B3-Tm$SUE0Ii<cs#jta>>lc8Z^XI$>J*9[:IaA*#IzBi?<tr[2$3BăU"oxFhjyTMMT/D.\kCpHBN0[uOgGN1%9rkPCL3^akG=LqluK<Lvd)PnLC9&*0kX_3ăU"33oGWI*e^Q%LndE62fb^xTY=G_)=8j[bcYgPogdPGRYTWoq>+Lo9YMdRYu)f(3GăU"A]_u'bFHoWX&<[c*JR>rqMqa\g->_DZj/SZg'(0GgMZMY2de,s9]8V6u\Otj(ibăU"3>GF[q5n0#Mv:nxChu3vB$<(]nzp6(Qs?wj5;iP&X#vK&rf8M6saq9a/CrtSBt0ăU"<tQaq+,p)aUAnZ:B[^/faS'.D'TLkWKge]jT8;cq'&6Ig[*.Zm&whuj<n4o*#I)ăU"vIuyGv$D4-j5ySnV%AO6T8#mu38O(n:%WFsQ#4bL0HgEX,.0Guowv<X,^Fd:+/hăU"RdU2>N/aWQW4n5C8Abj2P2f5HGTNbukCJJ;$dlPuB<hLbbba5HRo$HR]qRN98jAăU"94EjvkYllawBTMNPzOTeU64lRfbg*apPF9((a0AOhaCX#*=?gjWsT^S+hw^Cw/văU"L;bY3;:mfL:KYr7f<HM'766Wz;15)BEKKJK+BXWHU)bJ3aYOZj<(OS_ie]W?%#căU"\HI;.5lRta[vBG'LHB/O$V]*zLjU2Hlr8^C?.'#>dl.DbN(%up()%9%%%R-%L,KăU"$EDK'u\N&7%%S(%%%.%%%%rf%siYS[nsh&\aft;de5TH+YZdq8Wn:ypgqj?,P/PăU"f0Cgok:a=bkcP'RbV=TwJDvz'x.i4E3>jRG\Hh6r9J.[&<NDm\w*Xnu4Nw,d)trăU"RSOdjUpL.s:$)EvT#CJ)R*YmY&v;CfYM62H(#cWjQJaZ9c:Tk_hD0VVo[)7>u\<ăU"PGD1-dlDhI^GL[m(3J*j)yT)+%.TfM6Q_+NXCPp52wDL$-QX1+E1JYy%a%,5_dOăU"XQJYbfyZ76[I7v2OmVErklUngI_>[BK^2FBng3K:*R+QT-gbk,B]q(PR2HB+[utăU"H/tZo^V22]xW._kCek-PV\*LDR?Fh<_n(fQ)9%s6_oIJ3,;JsbNSbCZvZ]kjc_&ăU"43]/64&jPyH<MVrB=YiT4>jGo&%up()%9%%%m-%&69bEiy6rl$(7%%f/%%%.%%%ăU"%rf%siZS[gfx.M%*>r.k9M3s7xZAPyPfit,T2Aqzd.;qGaK>8OUWrZt?[XFXB%-ăU"r9\,8*7BX&^\yyN;hVE^Y67lls>G>bRqt0C3&2vjYhh[aD38&F8(3^b\U]p/bS[ăU"Aw6D[;Lr6j'vG1rPgF1HL&4q7Ea[X)di.QY.*)W(adT-<on(-ecg8B3p;-7fEeQăU"0uG]D5z#'egcGPrPdgHK]S<]7b(_zWP=EinU?SP,Uo#/r%icqn0r,v*9E4+.9)-ăU"%pX>^Gef2b4q)o9/7?[hPj/Q*8pZ[DI--7M0l8h_f+pG,H^STQQA\7^?ja5giX<ăU"xZiF0TwnWCB:A(h6;E.xvl_D2l^]_8cl+YiwPI)R9On;Qv<X0/_#i]\B:pp)=O.ăU";q[kW0#6l?6\pfA0lB>m1/J2r8AQsh<P?3;)_$iU*.HSmIm7<u$?wsk&KiGEUZaăU"?HXv[&Wu;(SZR?AXR%#*l(3K/XP,Y,3<>0D'+WRla<kYp_gGah]VAgfPy',3<nsăU"?^HxkU$KhP3e,PTPe,Cq2_-=C#k<Yq^ldS1tT3wb4tvR\My[Kac]JT^ViAkWeX*ăU"52*,J]^cYX3.pwDo&^t48*%Gs75+_SJqibbSf\Va)+d+%I4zKmsmkD#9^VkFR3JăU"a;Nu:2'VPN'k8be8fXRQqTTYb%0g6;/:^/z^9RgqFMr_m8Ro%NMnDi>v53\#lM'ăU"8)Q-<jMYi^OQ^&rI]w8XDB[x#&5_3Q]+Zc8+?gTKlelEqbCfW.uHMwqWky##1zxăU"FzBX=zbBncU/W&.3yLb\yfAJD=lW'xMt>NZ55LBnxZCek>(07K8y$[Ql4oo'Y>^ăU"-p,\70vZT2tw:%0-b4fO2KeciBE&7^w;AB\xC9NHr^l(daTdDmF%+nU3>ebuo(NăU"d29OFxiD#>3aggLfG-^RmhLGNxLfHBt.+]G0jqF*.2s[oqm7TV=\3vhY2t(mmAHăU"4dv$jPj]iJY7u2J&I4aIheoBre[H9hDiTCl?>B=58[au1xUm>.[KLJJq>(5E4sbăU"_G7pA9d%s']Y5<VAUQV+.6G8\j0P_8^,yg8^jsIbVU6tX;X17i3iWnPUiWptJg>ăU";VCI*0.?#,E5*:7U?^1Dru:Po/;f4HqJYeHF_gjQ8dU8^qxQ.=#eW'ZO#G;NnKsăU"hgu]hrV#;>8?H#;[m8&%up()%9%%%#-%t-0$Eyh%9YO&7%%S(%%%.%%%%rf%siZăU"S[nsh&\aft;de5TH,_iDK<=s>y#gGV-4]IEJ^m(-MbW#RVZaCSaZV&INHh-O_joăU"m/$W)hfKZlWTsiO4LN;9)LFln42c6:8zuJzZ*zeH6[b)s,iI:fFg+Tfk<aOGROHăU"BZEjsbgC0GCL-U+^5'c1s5k6*I$-9=\C.?ug'>8E,zaH87kIHJ66<-hAe=FP<:UăU"$E^Y;:Pti#N6gN9,XumovTFCgC\7/49&7i^Y1W/1Ht$'=T2/h<R:haEc8.X.2?/ăU"a6(]<$=gxRm_&5+(DO*1F%;,+OFU$=T,%oUxdgM_GHq'Hh8qQ%>B^LZfZq%/.HkăU"nY5q$:=5E):gnHJ6;a83bSvd*^)AN]^qv^rNq=B),F+n:ys6c<ep39qfg,D6t%%ăU"up(%)9%%#%-%EG*$EmW\zKl#+%%%%4%%/%%%%r%fsij%qSugOq6%N8;8PBHx5$năU"kL*ll(^#W\O_>5SO5;kg.Iprs-d>F.&sJ5RFKB_\79+g[[keIDSsnFk1)%RPDiXăU".<(7bWYn\ndO5QsVxks?CGrsR.SU+N)D4w4DB0Gepw7O:&:QWpllG?/AxR7:XJuăU"huW$ulv7hl$7F$bF\dm2ZJh%/WF3R:kL6H:\PU#uSRR),z\Vluh'G'?_OYu%xpUăU"$h=q#I^Y=.3Zs4;L.bh,$O/2e/auS?S?*nWOeS]&5>VA>Yn82Wle90);/,h0EM9ăU"VK7ZhAwUN6rVUD2MwuPT8NCNX0N7YCm9pGLX$?-MhD];?Cm$8VluR12*MCsxJ7qăU"_Rp#wrNw(>LiQEk;p:v[XDwkvS6A)CbU;F\6-w6[2;F)*J$V]>RJ*?8=B#Tj>Z=ăU"wY[x+-_[_-1$Uq/oq?&9r'9)Ja)&MVxnM/0X=m.=Bp,uCa(HMEuW/_RipK=wM=NăU"kHi0BLq^P)H4A:$irg-gZG-9$/Q*SDQF=MRbhp('Az=zmV0SH<*nEcm(+5HfO.căU"Qq1Taw:7URSeptk+hStwN)0Jyk+nK3,/kMT's<Mx3enTJ0Q5GRY:#dK<6Wp5eJ:ăU"-oGjmf%B$_a^;%)f9RR;n+)/<[(S=N*TBp3v,-.yv+SFZ]kh\zACqphD9\69RBSăU"r)8A-d9.q^%Ud$(DEidfKPio)6wOiG*$<c7$RmLkZ%tp4]H>GHsyGV0]A37r7YUăU"?j$sgn]=<2AkSe8r_\IHt]jfoDZO.jc4V^CK)*35J(mkJ&p1RA:%=tK6b0Hj-W,ăU"ZuV<VHT&%*kxZjV--,aL&rafNg*36=%,H'V<+]on/72A#jcJKT_o_Z$uKPR7:ekăU"\U^$D5Y$6,tRG8>dpoy?XA5bBw-((\kKn:K'K:rvrOgPD2es#l5IJna46RZ?MkYăU"[E4dbC^PcdNYFuhpPMuMMNNI*'Puquu//O[<.&5pto\8QKM?PDqCw(*S.RjsqKsăU"pknWaoLDob^_>4do7kV0E*OUp*>XeeTX7I*+(sH&>,$f64bIy,'/95K]-]fx0a[ăU"7/0-/7?&>:?9#2[Rn:Up>.XjJUYM%p7-jjLGlJ9oTu'10-8V)kiGf-o^_*n7zC=ăU"r\&o*lGZt/4&0gJZ8O9APOhDIgzHBDy_z'WMK;SI;L3(6.Dyx/%:(z\HxyR>xCoăU"'*;S;LmA3Nb#upByiDpy5B2ylx*c?;5FK-]pW(0c;8vm(jjg=*c&di^d7435'5KăU"sad/l7-snX.)TL<.LM3b19sZ;kZZ]PSyJ-rf0JtCwt&tZB2FuqXkA=Llf]6nSK4ăU"r_y*utzX>xVk'h]<Wd#QIXXFbXrh5tu7u3Qqc+3tBcPs#.3G^mb/oy+O^LkkphCăU"r0fbf0HdUtLO=mVlEOxxR4Fx0Vm<s<o%XxhFti75sghN_xx;R;cH.'tLB74UnfhăU"mIFu2%KvA3x*q4RDlefS>/[D9<RstmVF)8rwjmUM]F*:k2/SYo3BxYhj>)*X?l=ăU"68^FejQ/M#zW_,tJY^6A=*xP;VGQ[(En)QJGOcwfG(^Mb#i0i6igg89;1?XFPa6ăU"P0BQANCsNoSciB)8w5LgUHOSYtH=FgC:5,xhwd4nvRU2*_wd[nbovOBcnS]RD,;ăU"LQCa-K1VUV87TRLr'M3pZhga>ZadQ<AKjc=R#1nS2JE=(d3C0iMZM9Kg,2Qj2lZăU"J[nUFUED==^2(5\XX85vch%iC:q(f3sHZ_<+dj(^C]>(E)2ZA[d0(FvaHWar+;dăU"k8C#>Oo(giFWifQmbxxP77lX'?KLLn2xLLPbLbU+rJVb8HQC6>9JNnA]Zt7KEbuăU"uUNMs'*mGYsoaV,G4rRi/kgUmBUf%I5pi*rji\aStK/$u#:X-CKk,2TEtcol.74ăU"r\7<q[XTJ6Ds]Iud)[b6Y#mnSU-Kg<h\l5jbR/D-3uRU279&BiM3_'#acg7($=kăU"n'K,15$ueWXlo6=bvDnoh$4y#]]pMH^yVRM4jP#&U\>7#24$E/bslaBB/IxJ-q4ăU"ybO]i)F;i0j)cqDy.CU-BX\FGwdeIfYuu^6ANI$6$-GuS8,%mryTJ[Pk,+=0l[VăU"bbQ,;h2e0]\zkU<c*#v;44.Q'CfCO^7AZv[z0KC7mi5$f6FRS+8TegToHLl_mmmăU"hDFl_kTRXeJo\rSfWtJ4I'x4up%()9%%%%-%?s7aE0FZ1m&&5%%'AK%%%/%%%%wăU"jfi%rjSVRxy&)).B#\MaNnyor'pMS#zCaCX3mYLw;vKqJa%=Fo&Qnu]VFr<Zy9>ăU":1XL1%e(=vrmv8g#+UA)Gy.Dq8y]]1uIawn]x+d'OIMy$q?DswufqL^d,M\o:g8ăU"p_QHk[n5mW-&Ww\9i'GPRB7M2;^0RSiR%YgT$i*c#jHnRD0T*lC5rjN+m'Z%xh/ăU"q;esi?6v0c5moa#o[0:+aUo4O#^&?UYj91=0,B)-Ocf[^3?6E8]tk1cowoLs=dYăU"Yuou_[B[bq^)_okoW'*(\-n+GWaDG3LqpfhH5JwcSPj'aJI1W*0?jm4]DkNTVe&ăU"+^s?lX+\fvKJLpBJ,hq0>wVC%M,J<,>+\lT*FmchR$rcdJ$s(KJl$uo_X<iW.YWăU"rujeFGFeBN^<JTxjgo]8ZBWj]W6Z8^:dkvbpR=M;F/42Z#4w)P#cE5Bc0x]4o>băU"x96Lq25ihzwki:;s>U\f$#L:=OmJvsz,[Unikue_[mZfN>G,ItVQ(y]<vHusm.WăU"9hS>_Sd%mq<<F68yuq%[Jx+$/$l0P)wcP#hp)8V\:)PH_?r:S^P3592'O4L*[R'ăU"e.G.X4?^<3v=J+#pUyZX3mZ+q1mgci=&t:R7//K9P7Jh+Z(Bcgh0$IBF;it*mo)ăU"2cmi++8n$2bSHe9IZDLRg\UCi>1vC?-s]V-miIs&xuv.9.q9LMvdn1$4$.Q;ZCPăU"aEl>t'O9Ugem+^RZCYY9,SxdIGHMw8oZvwSAi;t#CIm)sFT5WI'EImU5eG>1>OgăU"S*(GW%.]+friJI]^;fW0z=.'nK/AA7ktY7C'0bQ%2dY,IHvYRBZj'lVF.J)cGKjăU"NP]GVI\huhV>7:Ft$jmeL_gJK0NLR*jG1*aSIdj(7\4f$sAA^Nn%dFI-xPv%0D>ăU"^&6.oh'[bI>3a3+f5>[baU8wCrGn_T=Zxt_/%YbQ%HNL+Fd7ztm:7T-wCY#,Gl<ăU"QrWYy'm/A9I&0:j);1pi*uE^e)hC#UZezYC$971^UZkYe=470kq9yJ[iU/+JgJBăU"'+gG->zdCzA1;OpeiRYvRTIRES]mc5#09)sE6&sUaxhjL[n]b44bqCm8mmHCkYfăU"7Vm-RZ9SC[H+V8tMV_2Op]jO'Tx\S>>vev<niQ\5O\&SkWhm9k5-1fx\VJ:9js2ăU"C3/QmO,(]&W-nJ/#bYp6WBp0#3'IqGdZ&A=f'c-qAu:(CGW-%)No$IJ,#/L/EcYăU".>;O=H+^VelT'%$\$>Rvqeia<*Bn7nkVDmUXN<YetnCsQf?XY6NKiQKrbntDY:wăU"J2If-nB.>?A==*W$xM%W<r&=g)P5PH_saVt9jGu0>Nf[=udB[,Iq?o#Ti8p\bjeăU"K1%$6^h*fu8NxO*'\5rhlK-,\oN?n3.U-4RIot0n^UY,$/(%H_$rdrwr2R\YJ]?ăU"(1cg#MMq5^QjbZ\\,$\.fqiYsa-eV0Q:G$>2GSmBxKUUl5gds3hf6aSK7WB:NABăU"^n5VcMBCB\z]E,/-iDT]-<prI\iq8p/wM6;1&;J0'Vj'^;w.0+w.4t3l[OKh2[WăU"g#UK;HJ4WEM/l5.#^9G1P>3KJ]aQgVoCSUA)06uiW,)K3l^]SxglZ<oeH4j-o/$ăU"C(;t*uE]e-s.FZWEwF/IYUx4;D$dXQ/uQ4*JW$IXO/I%Y_xv6G]V1sBg-+/[&frăU"bZ:#SM%/M2dugv5$3fn,3'OVDXhCr#X1x;4JHkS^h5KgKQGT]8F$+NI=:KCk2AQăU"y1nF(&2_v3Q>phP]arh&uuZsF<^q>Q>:kC07jUu;Lqm*SSoVZ5vq0+Nulnpur.;ăU";-8.1wfuh'/v^/;P]$F5XZHT,_m&lW,TetabEX0r+X<+HR\5FKuqGbmA96Q(GQVăU"',JowU21r_5S)yXQ0i(6M'm-LBobx+bf$>:D%#g+z5<\XFe&aF]kdmh[Rko[CR/ăU"LG%)qC:okvRHtt37DLhp'rhGcI&.N(&yCV88TVKu?$yn/H/%([t6+$JwT][DIDgăU"lG,d).zQMYk4lY%8cbPoMA*o1KAeZ6C_wy,(pZ17g/3K?k$)D&UosE8q2<-\%]năU";1Mf6&;V&UDoP%a]c6URg])tb97GR.Fcer7xI/-B9'sS2;RDp'gySaGTl&ugL>RăU"H0kG+pi%k40wseSO#>IURT^wIGweXaPk1p2wt]jW?U+GdB'8$Jae&y8+.Cn\v0PăU"U&YvHbVeub)Vl6HM4tSO4[vB-p3,?+]+a]5_*r^3F5j7IZ(*(Ncndwx,o09;X>iăU">[^Xwr<CV%Z_(SadO*C2dx-)d\Qua/^..G6:U-u$Req839kH2+XtOJn:+5)Ht$7ăU"+I^=]<fe]Iq+ND.JfArW/paZATn3XYPtqqw-?117-#\85Y3/5mXJ^Av*^U:fD9'ăU"-QI5J+F/Zkdu)h%E#FJ6k+'xUP2)6%zp(neCZ%7pkLNht4X7#T&3t]A>eqm#s7[ăU"3XcH\Er1J7L.GS*(>^nBe;70bKNm$3YBvaYvv3:#MXw-2%<w:sgRW[)RDQg7B#XăU"%_6+o5W<>4kP)),*L[#'D93gNXVmPdtn78P*Q;#NRH&$>Q:AKJ#,_G0)?F&[?P<ăU"mWTdF-Ih*$l*\m29rk#QI)ABC==qNK8fb/n$xp\80]8irG-eNA_h'9LYq/X6iWyăU"C*&lRH$*=\GQ8b\0N\+N5&Cu6$SC3'=$8g]epTd\%1?omM?:(yk)B_oOP\p;CqHăU"l<=4l-R4gVe]S[jZbf%uWWXHhq<N&eld#NYaFtHOCO0QRd68w)$Ma'g.*:;\mmNăU"T*p,<I?*PT2v=P+EjE6+tY'x'151hVsWgLDBL:[jSE)k_[uz*16^5hCoZbVdx4JăU"_Fqm8%abB?>[[#3Y0MFTF#A^py1T=sX#r<G'3sZPMoHK<O-xj)2&E(S]0aMrVupăU"e;LMrFVHg[LY9BuP'#I)ZJ13f/-'r<HIJHWSlr#D=36T_t%L%i\soh]n)tWkz.#ăU"h;$6POVhNt2X/^(\8xq\#6KJI8rJtV?.kKneJT2R1_NL):P2N<(?HYHA>k9?ewbăU"Z&F2pGL/WZc/=pL/qJdrXkYd<l2n.D$RFSR1BXd#ptBM9Yr*,UukRZd7*>Bag?%ăU"fSCo]nuNm2$ekrJcA6:dNM.lN?_.QQ0pegG6B8)9\aNU]?w$H]/^B#-msL:+xBWăU"NpD_4R%ukI(IP+WA669HbYo&B8-[1/*>nfa/P*'cfA+z540cmTBT<^6u6cMZ$-2ăU"dDGEQwO-?#A&v^N*3a\$KOSLvDXAFmL^3'Ao6?eFOw%fkQG0^3t7pPRJw_l*LujăU"FPLR&npPmTgZnY):xD<J/,>Quhm#RA/4nropCI=3S^pCq4Tx'7BuwPA\K[3ggTDăU"m2<.cE#6+<2);88WEtCB#[YVfGA0csVg%Cfag5-H3N&W;47kgVWDO5OogtWF:G#ăU"85ieGh?e:rczBgaNk-;DspF)415=R%o>p(T\j\/eEWRbhKm6Mdl89PaF;*FNLsqăU"WB,hR$Alb_986XUD,lE&Knb.0]^*;uIg:(QJeAiyjhzoCZ/VkKnMGa$fRVv<rLhăU"aT$nt$gxF._oG-:&XOEFi,A4QR;.^s3HEReg.yt+SCL=n#cUADb/ZCw[.V3O0E6ăU";]WNi\ywnp.0.whUzpg*qB^A?/pvtA29;Z4)SdGI^p53OP3fDr<O:G<qLrJKTqLăU"^xc7?>$9RA2c=4r):,0P%*(:CP=K^6yJ79gQg+]^g\phHO(s1NX[Y]QhCId7052ăU"HEuo6:,4jV<c4rV2Qn_/(wm2bRB5?FMe*,uHW::lBux2-omI2]+40o)W/&w]Yd6ăU"c09OYenQ*i==cwA3r0'P*R[CS0J>,]5b7M+2gcmoaBP_jdkeF#I8)aZq.(5ER:#ăU"PY9JHQ#l^k8$/,F,L8O3\_R*;S[OuMJUi+khl7Dx9Cop0^35_Mq;ddFva7IE3,\ăU"*.a__I3TC+N+:m2%7nV1,6I=vPP%:ccM>M4UD[1*JM9[/N,ai#lZgw02;y.x?f?ăU"BX7MQSK->/=*QKQEfa*LU,giYD#K&N9qERMnRH7.fe(<yvao3lRlo%v&kGRcc'LăU"u>P9Uuah/[0NP^hNQULgEdppRwPcdeb$u%_jqb4\,US+,=0W#%<G6\32RSnn,0VăU"E3m(%c_GxB^B$ul)_pfW_f=ar1*AU?$T0,NE3f?4u#[WPT'\^j)RS1JcYv+9$8VăU"m4*YSAllNCbPzW94MI8>6nUJH3%jJ6pzyBMPY5I((PE$RJJUW'YW2jv1gt^h8E1ăU"^aQl$R%B<VB%#)JK4D2b'nEDQg?o?Mpzv]8E$gN9W*$o%_i6hx\pvHtEGY,rkRSăU"4a'Ca5eTvy1#Of2PHGvb.(nO4&>8Mf=vR^5XvmbHd7I1(lA+jIyVSewdkQSc3UFăU"2nMK*L_K:Spd$H.wYLa)hv]JML-*H0(g\h=K?0wtfHhrcGDoJp[0Sg]\jzk'm5băU"=FV;9Q,E9v8h,Tfvmt%sXd%90URYGOzVWB%LQr/WI#gh:sFZpaLf()Ja#[%Ky/YăU"+2QL]nO)]\Fu%HTBx2._AU;f35s+cUt]qrs9aN=$.1\Ayo>2FNeg_=tnZ:td=w)ăEND SUBăSUB V3ăU"\$r8C;CmMVh:=43_uqIfe3x^a03t7Ol1b9^ANq<AGGAE#l)O.P^2jcMq*41GJ;?ăU"eX$4B/_>L8GmZmFio%<C?E#6Ls7h_MIluwkvhXd]R*o<O_T^m8:*pD5;4:;T_A;ăU"LZ[:rLq3.VtGPva[ruCq7TWYTJ9VH-):WJbH-gr*#C<ipXXCi;;Qg>#uYl&)k[VăU"2?'iI*i[Df)7<NKV5Z-*cQA+Zofn<ujMqXz%e'v1PQ'9Rw,qW-:7'T,9\hFJPGwăU":vm$f5OZaSG>F-Nps>Sou:d?[['-eu[s>P2HQ'E0Af&b#uWVL<S8<Cq8/XuLpXaăU"SM9G8BBRZXg9WM8s^vigHf>dXuP'f(nKP,JekqN4R^bxG6rw26(1f8hgr4zaXl<ăU":,aNT8%.?6v5IlrYfRAlGp[z4-lSU,t^_Mh8t7^y[[e,-OY;J5bzQBF)vn71'<eăU"lz7qeU8AP1t1F'a,DoeZ<mNG1+l5tRHf[\\lsx?5Rb3WE1kP/p/:]mh_1*4kTLzăU"0EiAWNDHQT??ZN4TqH%'MVijEve5Cp.eN=.uJHVGeWQp#H-oM))A/_cmAR#wqP6ăU"(-QHTf=]sKKTvUBJ8roa\gFdN%]?:lb(\cGr>g)G1/'gUrj,n>An=gmS]s-^a$\ăU"a3$H=ZHuJX6#\fXK[V+d>_FOor#GIx.MF]wKRj7XVu_:((g8S.GHAkLf19][MuuăU"=$'kaZ1FpBSCP0NlO<TANZM.3ml>.W7KX(q^f$\1[tW^g_s.Y7ecmbCL\$x1\]+ăU"fE=dl_RNu%dup(%)9%%[%-%BH6bE#ZQNCg[(%%4%4%%-%%%%x%zgxS[gfxFh&:>ăU"S7m9vaOmuVj[OFTK$k=j=\q)A>+/:M*MDFzMO=epE'iPC$=Jvn$D2;YEG;;HdeEăU"Iq2VmJHL/l$E3>JCvm%CmU>iC2SIl*c''807iBC=,tYYT<W7^'.On.TRMOBTcVfăU"7G$3>1M&2=#bMbxgdH_Q'r1xDr)6q3CjKh44_C7Q?XDxo*iDInSL9dwJ]kYTt1ZăU"qe]v;htO_2U>cQi2t=Le0]TS=LH%#F3mjF)L<().L5Ou[P]FN1Cphc7OfL<gbfbăU"^RM+Bf+cRm>_77)2+AkF.u56b^m]ESS7CQf*Bo:EMB'U=jaOMchSZ*q8rBn+eg:ăU"04%X=^XR^ZllmH0$W<Vi$+Ye<0'e4U8s;>>to&d=>7C[N$EQF.+N]OPX,LOXs3>ăU"6;+V;:Qp+Y8UBl#FoZmPS3NC7C%:^?6Uu'o-[p8*)<%\9.%<9;d0)DwB%DF#HNOăU"Rk-)\'$9exOqZ8V+?-7%X$MYBn&%I4D?q_uN\l=H%HiIuh297)cjsDXX-Zakc1NăU"wRr&dCL^<eJ1unN':nm\R(i>Mn4>v;>V1uI&(8gDjba$cyqT_%UOKcmrq&/-'2SăU"T#^P2(EyU2%o).jR2U^7aHNQG&d-,;y54hqD2?X;0Pf8(T%W.D4_a)Gu>oyj>f]ăU"dg=+T8^rfX+FwOMB;(5bVV4\/8Io^32-%%rv?b/N75r:ZWH,ss\FDE<-0-$h;=1ăU"T)'m86'wHDjY?JL4';9XZ\lXg0?DU*o,3E1ps4/e5#wf%YB;ttQ]Z_%2,.E,K<qăU">d#&yXX#ebMDc2XgZ\*3n\w7b?23G\UT?3)P45W]16*fphsEV%XC(s.QFbNqUf#ăU"xjlRvNSH3xnZ4=7d(u8/k:>c<(/a5r6,d<a-%3>YJvLT4)lqz>^r\%#gtoE[-+*ăU"T_1\B'xR6j1X1BodVE+F5#uW#Y?OcOUFiYNMsxdZ5Gbx\hne_FtE+TYMC$JUXvIăU"hhSK^tV=rd=grlr4oYZ;gAD;FT^_>wQ71+hVZ5J9<s]5$dLTQCi.L.zxRFvNA$2ăU"9(jlg9.IHa?L^#K.d)Zhqv>1$<G1gQ&sIkC:.Y%p/r<SXqn=SY'ldLh;VHQ+7%5ăU"B,JJg3\Jt4$.5c(hvZ3rLF)fIGfT0EZJ:uwH5s1't5J_;4usJADL0AOcd1Ms)KWăU")RaFIdm4TDNu%p()9%%%%-g%V*$pE^Zq-TF&%(%1(%%%-%%%%xzg%xSugjz&aF&ăU":8f=W?nR^Ju+</[(jpR%;Y6.R)oS-[iFr,*.7zmK.*pTkagt-:2t]=KoHPShOfQăU"x7k65.JihQ%gtaN9i\UOmfIh=\i4b<UtkflGZeGtJ2nF6;<_o=U=THL%[EVnBr6ăU")F\Sns*\*7.?6C+(ahfAQiT.ya$gUrsTq9$w439=N?yd<o/A]hhFLJg-,8B<Bh7ăU"IEu#S=W);_C$BA:n+D%3k<TD#;D<P;eAM+4P9rSUIZoQ9p]p.hV?+cFVz%F9j7&ăU"UHTrmF45.]mp<)nj%IrEQ(Vw9&u5yq>2+gd1cI2\\;b4P\Pt.'*If/\zDcIs;_iăU"=J8+Ni5t_b-B;)=Mg9$]3F1DQ96W.[tf&g,Q\&7Fm\VmD1nA.)#TY$e3l[loWhkăU"vrZt6hjvslO8:7Pt[LdHGKnrTu^AznafpTMo<7_L#DBa;)NflX3gbq>63v5G1]6ăU"+cW28&5_k4V;'o;q?GXzlP>B,$U4IhXb\aaS:6Uxmkz;lAMqA$n[u8Ro-xem6L*ăU"rleRnd'_DvT.Fnp]XO8b&It9y[Y_iL]i7AB9??aEUj?<B^P-VorwgheWG,ug[*/ăU"#r,\8up%&'9%%9%%%[-%n6KbE\g:D/K;d%%0W%%%-%%%%%%%%%&%%E%%%%%%%%%ăU"rfsi%Sfxr%up&'%9%9%%%%-%:A6$E%?GlB&r)%%%H0%%%-%%%%%%%%%%%E%7%%qăU";%%%rf%siSt%goup%&'9%%9%%%d-%A60bEI&56Q^(7%%h/%%%.%%%%%%%%%&%%EăU"%%%':#%%%rfsi%USgf%xup&%'9%9%%%%-g%E*$sE>Rd%UD&%+%Y(%%%.%%%%%%%ăU"%%&%E#%%%F%D%%r%fsiU%Snsh%up&'%9%9%%%%-%>U6bE4]5T#&_(%%'d/%%%.%ăU"%%%%%%%%&%E%7%%6E%%%rf%siVS%gfxu%p&'9%%9%%%%-%',+$EZ*pL%M[&%%S%ăU"(%%.%%%%%%%%%&%%E%%(%CI%%%rfs%iVSn%shup%&'9%%9%%%d-%^6BbE<V6%(_ăU"(7%%f/%%%.%%%%%%%%%&%%E%%%'<J%%%rfsi%WSgf%xup&%'9%9%%%%-j%p+$+EăU"8mj'pN&%+%Q(%%%.%%%%%%%%%&%E#%%%I%N%%r%fsiW%Snsh%up&'%9%9%%%%-%ăU">f6bEY)Tf.&_(%%'d/%%%.%%%%%%%%%&%E%7%%CO%%%rf%siXS%gfxu%p&'9%%9ăU"%%#%-%#b,$Er(^s]N[&%%S%(%%.%%%%%%%%%&%%E%%(%PS%%%rfs%iXSn%shup%ăU"&'9%%9%%%d-%s6BbE:K1OP_(7%%d/%%%.%%%%%%%%%&%%E%%%'JT%%%rfsi%YSgăU"f%xup&%'9%9%%%%-j%L,$gEDKu%\N&%+%S(%%%.%%%%%%%%%&%E#%%%W%X%%r%făU"siY%Snsh%up&'%9%9%%%%-%?&6bEoiyrl&$(%%'f/%%%.%%%%%%%%%&%E%7%%QYăU"%%%rf%siZS%gfxu%p&'9%%9%%%%-%tG-$Ey%h9YO[&%%S%(%%.%%%%%%%%%&%%EăU"%%(%_]%%%rfs%iZSn%shup%&'9%%9%%%I-%E*f$Em\5zKl+.%%%4%%%/%%%%%%%ăU"%%%%%E%%%'Z^%%%rfsi%jqSu%gqup%&'9%%9%%%m-%s79aEFZ/1m&57%%AK%%%/ăU"%%%%%%%%%&%%E%%%&ue%%%wjfi%rjSV%xyup%&'9%%9%%%m-%B6fbE#Q6NCg(7%ăU"%44%%%-%%%%%%%%%&%%E%%%%Jv%%%xzgx%Sgfx%up&'%9%9%%%%-%;V*$Et^ZqTăU"'F&%%&1(%%%-%%%%%%%%%%%E%7%%\y%%%xz%gxSu%gzup%*+%%%%%7%77%U(R%%ăU"O%%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=234AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJonathan Leger                 FAST MEMCOPY ROUTINE           leger@mail.dtx.net             07-11-96 (10:14)       QB, QBasic, PDS        204  10399    MEM.BAS     '***************** MEM.BAS **************************************************ă'*** These routines were written by Jonathan Leger:                       ***ă'***                                                                      ***ă'***                    leger@mail.dtx.net                                ***ă'***                    http://www.dtx.net/~leger/                        ***ă'***                                                                      ***ă'***    PLEASE write to me with your questions.  I would appreciate any   ***ă'*** feedback or machine language ideas for the expansion of Qbasic.      ***ă'*** What can other compilers do that Qbasic can't?  What can PowerBASIC  ***ă'*** or QuickBASIC do that Qbasic can't?  Maybe we can make it work using ***ă'*** Machine Language routines that will blow away the other compilers    ***ă'*** in speed... lemme know!  Write to me at the above e-mail address.    ***ă'*** If you'd like to know how the ML routines work, write me and I'll    ***ă'*** give you a step-by-step explanation.                                 ***ă'****************************************************************************ăăDEFINT A-ZăăDECLARE SUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăDECLARE SUB FillChar (segment%, offset%, value%, bytes%)ăă'$STATIC    '*** "REM $STATIC" keeps our buffer from moving around in memoryă'           '*** for more info, see the manual or the HELP screen.ăă'*** Dim a 64,000 byte buffer to hold the screen image (an integer isă'*** 2 bytes, so 32000 * 2 = 64000, the size of a SCREEN 13 image).ăDIM buffer(1 TO 32000) AS INTEGERă'$DYNAMICăă'*** Go to screen 13.ăSCREEN 13ăă'*** Clear the screen using color 200 (sorta bluish-purple)ăFillChar &HA000, 0, 200, &HFA00ăă'*** Draw some circles on the screen.ăFOR x = 1 TO 100ă   CIRCLE (159, 99), x, xăNEXT xăă'*** Copy the image (which is 64,000 (FA00) bytes and starts at memcoyă'*** locat A000) and dump its contents into buffer().ăMemCopy &HA000, 0, VARSEG(buffer(1)), VARPTR(buffer(1)), &HFA00ăăLOCATE 7, 7: PRINT "This image has been dumped"ăLOCATE 8, 5: PRINT "Into a 64,000 byte buffer() array."ăLOCATE 9, 8: PRINT "Press a key to reload it."ăăWHILE INKEY$ = "": WENDăă'*** Clear the screen using color 150 (sorta deep blue)ăFillChar &HA000, 0, 150, &HFA00ăăLOCATE 2, 1ăPRINT "I'm putting this here to prove that I"ăPRINT "actually cleared the screen. ;)  It"ăPRINT "Also demonstrates the speed of the"ăPRINT "FillChar() routine which was used to"ăPRINT "clear the screen in this spiffy"ăPRINT "color."ăPRINT : PRINT "Press another key to reload the image."ăăWHILE INKEY$ = "": WENDăă'*** Dump the contents of the buffer back onto the screen.ăMemCopy VARSEG(buffer(1)), VARPTR(buffer(1)), &HA000, 0, &HFA00ăăLOCATE 1, 2: PRINT "Tada! So fast you don't believe it. ;)"ăăWHILE INKEY$ = "": WENDăSCREEN 0: WIDTH 80ăăREM $STATICă'*****************************************************ă'***                 FillChar()                    ***ă'*****************************************************ă'***  FillChar() puts whatever is in value% (which ***ă'***  should be a number from 0-255) into memory   ***ă'***  starting at location segment:offset, ending  ***ă'***  at location segment:offset+bytes%.  An good  ***ă'***  example of its use would be for clearing the ***ă'***  screen with a different background color in  ***ă'***  a graphics screen (which is pitifully slow   ***ă'***  usint PSET).  To do this for SCREEN 13, for  ***ă'***  example:                                     ***ă'***                                               ***ă'***  FillChar &HA000, 0, 15, &HFA00               ***ă'***             ^     ^   ^    ^                  ***ă'***             |     |   |    |                  ***ă'***  Screen 13--+     |   |    |                  ***ă'***                   |   |    |                  ***ă'*** Start with first  |   |    |                  ***ă'*** pixel.------------+   |    |                  ***ă'***                       |    |                  ***ă'*** Fill with character/  |    |                  ***ă'*** color 15--------------+    |                  ***ă'***                            |                  ***ă'*** Do so 64,000 times---------+                  ***ă'***                                               ***ă'*** This will "clear" SCREEN 13 with the color 15 ***ă'*** (bright white), and it does so _faster_ than  ***ă'*** the CLS routine clears SCREEN 13 in black.    ***ă'***                                               ***ă'*** Notice that the 64,000 is in HEX (FA00).  This***ă'*** is the same as with MemCopy(), where a value  ***ă'*** greater than 32,767 has to be put into hex.   ***ă'*** Since BASIC integers are signed (can be plus  ***ă'*** or minues 32,767), BASIC does not let you use ***ă'*** 65,534 (64k) in an integer, and there is no   ***ă'*** way to declare a variable as an unsigned int- ***ă'*** eger.  Machine Language, however, does not    ***ă'*** recognize the plus or minus of a number unless***ă'*** you tell it to, so by using the HEX value, we ***ă'*** can trick BASIC into passing a number larger  ***ă'*** than 32767 to the Machine Language routine,   ***ă'*** which will treat &HFA00 as 64000 (even though ***ă'*** if you do a PRINT &HFA00 it returns -1536).   ***ă'*****************************************************ăSUB FillChar (segment%, offset%, value%, bytes%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85)                             'PUSH BPăasm$ = asm$ + CHR$(137) + CHR$(229)                'MOV BP,SPăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăasm$ = asm$ + CHR$(139) + CHR$(86) + CHR$(8)       'MOV DX,[BP+08]ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12)      'MOV AX,[BP+0C]ăasm$ = asm$ + CHR$(30)                             'PUSH DSăasm$ = asm$ + CHR$(142) + CHR$(216)                'MOV DS,AX       ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(10)      'MOV BX,[BP+0A]  ăasm$ = asm$ + CHR$(136) + CHR$(23)                 'MOV [BX],DL <------+ăasm$ = asm$ + CHR$(67)                             'INC BX             |ăasm$ = asm$ + CHR$(226) + CHR$(251)                'LOOP 0112   -------+ăasm$ = asm$ + CHR$(31)                             'POP DSăasm$ = asm$ + CHR$(93)                             'POP BPăasm$ = asm$ + CHR$(203)                            'RETFăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL segment%, BYVAL offset%, BYVAL value%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăă'*************************************************************ă'***                       MemCopy()                       ***ă'*************************************************************ă'*** This routine will copy the number of bytes specified  ***ă'*** in the Bytes% variable from the segment:offset in     ***ă'*** fromseg%:fromoffset% to the segment:offset given in   ***ă'*** toseg%:tooffset%.  To copy more than 32767 bytes,     ***ă'*** put the HEX value in Bytes% instead of the decimal    ***ă'*** value.  For example, in HEX, 64000 is FA00 (prepended ***ă'*** by an &H in BASIC, to make it &HFA00), so if you were ***ă'*** to copy a 64,000 byte screen 13 image, you would do:  ***ă'***********************************************************************ă'*** MemCopy &HA000, 0, VARSEG(buffer(0)), VARPTR(buffer(0)), &HFA00 ***ă'***           ^     ^        ^                   ^             ^    ***ă'***           |     |        |                   |             |    ***ă'*** Screen 13-+     |        |                   |             |    ***ă'***                 |        |                   |             |    ***ă'*** Start copying at+        |                   |             |    ***ă'*** the first pixel-+        |                   |             |    ***ă'***                          |                   |             |    ***ă'*** Segment of our 64k buffer+                   |             |    ***ă'***                                              |             |    ***ă'*** Offset of our 64k buffer --------------------+             |    ***ă'***                                                            |    ***ă'*** Copy 64,000 bytes (HEX = FA00, BASIC = &HFA00) ------------+    ***ă'***********************************************************************ă'*** For a full explanation of why we must use HEX instead of decimal***ă'*** for values greater than 32,767, see the remarks in the FillChar ***ă'*** routine.                                                        ***ă'***********************************************************************ă'    This routine was written by Jonathan Leger, and if you use it,ă'    please let me know.  I'd like to know if this code is gettingă'    any practical use.  I've wanted to emulate PowerBASIC's POKE$ă'    and PEEK$ for a _long_ time (also Pascal's Mem[] routine), andă'    this is my first stab at it, which worked out very well and isă'    very fast since it's in pure machine language (it was writtenă'    in DOS' Debug! =).ă'***********************************************************************ăSUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85)                             'PUSH BPăasm$ = asm$ + CHR$(137) + CHR$(229)                'MOV BP,SPăasm$ = asm$ + CHR$(30)                             'PUSH DSăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10)      'MOV AX,[BP+0A]ăasm$ = asm$ + CHR$(142) + CHR$(192)                'MOV ES,AXăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14)      'MOV AX,[BP+0E]ăasm$ = asm$ + CHR$(142) + CHR$(216)                'MOV DS,AXăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8)      'MOV SI,[BP+08]ăasm$ = asm$ + CHR$(139) + CHR$(126) + CHR$(12)     'MOV DI,[BP+0C]ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăasm$ = asm$ + CHR$(243)                            'REPZăasm$ = asm$ + CHR$(164)                            'MOVSBăasm$ = asm$ + CHR$(31)                             'POP DSăasm$ = asm$ + CHR$(93)                             'POP BPăasm$ = asm$ + CHR$(203)                            'RETFăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăTony Lieuallen                 GROWING FIRE                   marvin@mars.superlink.net      07-05-96 (16:18)       QB, QBasic, PDS        86   2053     FIRE.BAS    'Fire!!  By Tony Lieuallen.  E-mail: marvin@mars.superlink.netă'This is a demo I made (Evolved slowly from the file in the PC Gamesă'Programmers Encyclopedia) in my free time.  In the rem's is what youă'would have to do to make it run in PB (originally written for QuickBasic).ă'I like values of XMax=200 YMax=100 X and YStart=50.ăăDEFINT A-ZăăSCREEN 13ă' in PB make this:ă'      (or is that ah?)ă'! mov ax, &H13ă'! int &H10ăăRANDOMIZE TIMERăIF COMMAND$ <> "" THENă   T$ = COMMAND$ă   XMax = VAL(LEFT$(T$, INSTR(T$, " ")))ă   T$ = RIGHT$(T$, LEN(T$) - INSTR(T$, " "))ă  ă   YMax = VAL(LEFT$(T$, INSTR(T$, " ")))ă   T$ = RIGHT$(T$, LEN(T$) - INSTR(T$, " "))ă  ă   XStart = VAL(LEFT$(T$, INSTR(T$, " ")))ă   T$ = RIGHT$(T$, LEN(T$) - INSTR(T$, " "))ă  ă   YStart = VAL(T$)ăELSEă   INPUT "  XMax=", XMaxă   INPUT "  YMax=", YMaxă   INPUT "XStart=", XStartă   INPUT "YStart=", YStartăEND IFăCLSăăCMax = 150ăRed = 0ăGrn = 0ăBlu = 0ăCC = 1ăăFOR X = 1 TO CMaxă   SELECT CASE CCă      CASE 1ă         Red = Red + 1ă         IF Red = 60 THEN CC = 2ă      CASE 2ă         Grn = Grn + 1ă         IF Grn = 60 THEN CC = 3ă      CASE 3ă         Grn = Grn - 2ă         Red = Red - 1ă   END SELECTă   OUT &H3C8, Xă   OUT &H3C9, Redă   OUT &H3C9, Grnă   OUT &H3C9, BluăNEXTăăDEF SEG = &HA000ăDOă   IF INKEY$ <> "" THENă      COLOR 180ă      SYSTEMă   END IFă   FOR Count = 1 TO XMax \ 1.5ă      Y& = (YMax - 1 + YStart)ă      'In PB make all the "poke"s "pokeb"să      POKE (320 * Y& + (INT(RND * XMax) + XStart)), INT(RND * CMax)ă      POKE (320 * (Y& - 1) + (INT(RND * XMax) + XStart)), INT(RND * CMax)ă   NEXTăă   P = 0ă   FOR Y1 = 2 TO YMax - 1ă      FOR X1 = 2 TO XMax - 1ă         X& = (X1 + XStart)ă         Y& = (Y1 + YStart)ă         P = PEEK(320 * Y& + (X& + 1))ă         P = P + PEEK(320 * Y& + (X& - 1))ă         P = P + PEEK(320 * (Y& + 1) + X&)ă         P = P + PEEK(320 * (Y& - 1) + X&)ă         P = P \ 4ă         POKE (320 * (Y& - 1) + X&), Pă      NEXTă   NEXTăLOOPăAndy J. Golden                 CHAOS                          YHBV44B@prodigy.com            07-12-96 (22:42)       QB, QBasic, PDS, PB    26   565      CHAOS.BAS   1  ' CHAOS.BASă10 KEY OFF: CLSă20 SCREEN 2ă30 DEFSNG A-Ză40 COLUMNS = 640ă50 ROWS = 200ă60 START = 1ă70 FINISH = 3.999ă80 TOP = 0ă90 BOTTOM = 1ă100 MAXREPS = 10ă110 HEIGHT = BOTTOM - TOPă120 VPCT = 1 / HEIGHTă130 FOR R = START TO FINISH STEP ((FINISH - START) / COLUMNS)ă140 X = .1ă150 FOR I = 1 TO 100ă160 X = R * (X - X * X)ă170 NEXT Iă180 FOR I = 1 TO 30ă190 X = R * (X - X * X)ă200 XPOS = (R - START) * COLUMNS / (FINISH - START)ă210 YPOS = ROWS - (X - TOP) * ROWS * VPCTă220 PSET (XPOS, YPOS)ă230 NEXT Iă240 NEXT Ră250 A$ = INPUT$(1)ăAndy J. Golden                 FRACTAL FERN                   YHBV44B@prodigy.com            07-12-96 (22:42)       QB, QBasic, PDS, PB    26   566      IFSFERN.BAS ' IFSFERN.BASăSCREEN 2ăCLSăVIEW (0, 0)-(639, 199)ăWINDOW (-4, 0)-(6, 10)ăRANDOMIZE TIMERăX = 0ăY = 0ăWHILE INKEY$ = ""ăR = RNDăIF (R <= .01) THENă    A = 0: B = 0: C = 0: D = .16: E = 0: F = 0ăELSEIF R > .01 AND R <= .86 THENă    A = .85: B = .04: C = -.04: D = .85: E = 0: F = 1.6ăELSEIF R > .86 AND R <= .93 THENă    A = .2: B = -.26: C = .23: D = .22: E = 0: F = 1.6ăELSEă    A = -.15: B = .28: C = .26: D = .24: E = 0: F = .44ăEND IFăNEWX = (A * X) + (B * Y) + EăNEWY = (C * X) + (D * Y) + FăX = NEWXăY = NEWYăPSET (X, Y)ăWENDăSCREEN 0ăChad Beck                      PUT W/O ERASING BACKGROUND     FidoNet QUIK_BAS Echo          06-27-96 (00:00)       QB, QBasic, PDS        71   3091     PUT.BAS     ' [= As two common people in New York would say, let's start rambling =]ăă'> Wait a minute. Is the above an example of BLOADing a image? I think I haveă'> the idea of how to get the sprite to the screen.ăă'That's an idea. Draw a bunch of sprites, use PICEM to display it and thenă'code to save it in BLOAD format as maybe something like SPRITE.BLD. Thenă'the program can load it in another page not displayed, and GET the spritesă'into buffers while displaying a "please wait" message on the viewable page?ă'Just ideas I was thinking up while reading this.ăă'> Now for the big question "Can you tilt the picture after drawing it?".ăă'Well, if you GET the dartboard into a buffer somehow (assuming you can createă'one large enough) I guess you can PUT it differently? Or what about this: Youă'scan the visable page for each pixel, and replot it slightly differently toă'an angle on a non-visiable page, then flip to that page and its tilted! Oră'do this on two non-visiable page while the "please wait" message is on theă'visiable page? We may have to use the 320 x 200 mode, as don't that have theă'most pages to work with? I am not sure on the concept of this virtual pageă'thing, but it may be a key to this and other neat display tricks.ăă'As for animating, I heard of page-flipping techniques. Also you can do someă'neat things with the PUT statement:ăă'From: Chad Beckă'Subj: PUTsăă' > I think it was CHAD BECK who earlier posted how to PUT a bitmap toă' > the screen using XOR and AND to not distort the background.  If youă' > could be so kind, could you repost it!?  Thanks...ăă'     Actually it uses AND & OR.ă'     The ANDed image (which is PUT first) should be an inverse ofă'original, whereby color zero is used for the solid areas and the highestă'color in the palette (mode dependant) is used for the transparent areas.ă'     Here's the demo from an old mail pack.  The pair of images used toă'draw each sprite are left in the upper left-hand corner of the screen foră'your inspection.ăă'-----------------------------------------------------------------------ăDEFINT A-ZăăSCREEN 13ăPALETTE 255, 1024 * 15            'Change color 255 so it's visibleăDIM Image(0 TO 33), Scr(0 TO 33)ăăInColr = 4                        'The inner color of the circleăOutColr = 3                       'The color of its outer ringăCIRCLE (5, 5), 4, OutColr         'Draw original image--make transparentăPAINT (5, 5), InColr, OutColr     ' areas Color 0ăGET (1, 2)-(9, 8), ImageăăLINE (16, 2)-(24, 8), 255, BF     'Draw its compliment--Color 0ăCIRCLE (20, 5), 4, 0              ' for solid areas, Color 255 (or 15 inăPAINT (20, 5), 0, 0               ' EGA modes) for transparent areasăGET (16, 2)-(24, 8), ScrăăFOR Repeat = 1 TO 9               'Draw a background patternă  LINE (0, 20 * Repeat)-(320, 200), Repeat + 20, BFăNEXTăăFOR Repeat = 1 TO 100             'Draw the spritesă  X = RND * 310ă  Y = RND * 190ă  PUT (X, Y), Scr, ANDă  PUT (X, Y), Image, ORăNEXTăăDO: LOOP UNTIL LEN(INKEY$)        'Wait before quittingăăKurt Kuzba                     HAPPY TRAILZ                   FidoNet QUIK_BAS Echo          02-10-96 (00:00)       QB, QBasic, PDS        72   2907     HPTRAILZ.BAS'_|_|_|   HPTRAILZ.BASă'_|_|_|   Happy Trailz. This program demonstrates one methodă'_|_|_|   of creating a series of self-overwriting lines toă'_|_|_|   keep the CPU happy when there is nothing else to do.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (2/10/96)ăDECLARE SUB HappyTrails (l%)ăTYPE LNZă   x1 AS INTEGER: x2 AS INTEGER: y1 AS INTEGER: y2 AS INTEGERăEND TYPEăl$ = COMMAND$   '_|_|_|   REM this out if using QBasicăIF VAL(l$) < 1 THEN l$ = "4"ăl% = VAL(l$)ăIF l% > 20 THEN l% = 20ăIF l% < 2 THEN l% = 2ăHappyTrails l%ăSUB HappyTrails (l%)ă   DIM la(1 TO l%, 11) AS LNZ, C(6) AS INTEGER, K(6) AS INTEGERă   DIM dx1(1 TO l%) AS INTEGER, dx2(1 TO l%) AS INTEGERă   DIM dy1(1 TO l%) AS INTEGER, dy2(1 TO l%) AS INTEGERă   C(0) = 15: C(1) = 11: C(2) = 3: C(3) = 9: C(4) = 1: C(5) = 0ă   K(0) = 14: K(1) = 13: K(2) = 12: K(3) = 4: K(4) = 5: K(5) = 0ă   RANDOMIZE (TIMER + INP(64))ă   FOR ln% = 1 TO l%ă      dx1(ln%) = 9: dx2(ln%) = 9: dy1(ln%) = 9: dy2(ln%) = 9ă      FOR fade% = 0 TO 10ă         la(ln%, fade%).x1 = 320 + fade% * 2ă         la(ln%, fade%).y1 = 240 + fade% * 2ă         la(ln%, fade%).x2 = 320 - fade% * 2ă         la(ln%, fade%).y2 = 240 - fade% * 2ă      NEXTă   NEXT: SCREEN 12ă   Ky$ = INKEY$ă   WHILE Ky$ = ""ă      FOR ln% = 1 TO l%ă      WHILE (INP(&H3DA) AND 8) = 0: WENDă      WHILE (INP(&H3DA) AND 8) <> 0: WENDă      Ky$ = INKEY$: IF Ky$ <> "" THEN EXIT FORă      FOR fade% = 10 TO 1 STEP -1ă         x1% = la(ln%, fade%).x1: y1% = la(ln%, fade%).y1ă         x2% = la(ln%, fade%).x2: y2% = la(ln%, fade%).y2ă         la(ln%, fade%).x1 = la(ln%, fade% - 1).x1ă         la(ln%, fade%).y1 = la(ln%, fade% - 1).y1ă         la(ln%, fade%).x2 = la(ln%, fade% - 1).x2ă         la(ln%, fade%).y2 = la(ln%, fade% - 1).y2ă         IF (ln% AND 1) = 0 THENă            LINE (x1%, y1%)-(x2%, y2%), C(fade% \ 2)ă         ELSEă            LINE (x1%, y1%)-(x2%, y2%), K(fade% \ 2)ă         END IFă      NEXTă      x1% = la(ln%, 0).x1 + dx1(ln%): y1% = la(ln%, 0).y1 + dy1(ln%)ă      x2% = la(ln%, 0).x2 + dx2(ln%): y2% = la(ln%, 0).y2 + dy2(ln%)ă      IF x1% > 639 THEN dx1(ln%) = -(RND * 7 + 9): x1% = 639ă      IF x1% < 0 THEN dx1(ln%) = RND * 7 + 9: x1% = 0ă      IF x2% > 639 THEN dx2(ln%) = -(RND * 7 + 9): x2% = 639ă      IF x2% < 0 THEN dx2(ln%) = RND * 7 + 9: x2% = 0ă      IF y1% > 479 THEN dy1(ln%) = -(RND * 7 + 9): y1% = 479ă      IF y1% < 0 THEN dy1(ln%) = RND * 7 + 9: y1% = 0ă      IF y2% > 479 THEN dy2(ln%) = -(RND * 7 + 9): y2% = 479ă      IF y2% < 0 THEN dy2(ln%) = RND * 7 + 9: y2% = 0ă      la(ln%, 0).x1 = x1%: la(ln%, 0).y1 = y1%ă      la(ln%, 0).x2 = x2%: la(ln%, 0).y2 = y2%ă      IF (ln% AND 1) = 0 THENă         LINE (x1%, y1%)-(x2%, y2%), C(0)ă      ELSEă         LINE (x1%, y1%)-(x2%, y2%), K(0)ă      END IFă      NEXTă   WENDă   SCREEN 0ăEND SUBă'_|_|_|   end   HPTRAILZ.BASăKurt Kuzba                     ROTATING A BIG PALETTE SMOOTHLYFidoNet QUIK_BAS Echo          04-07-96 (00:00)       QB, QBasic, PDS        86   3329     BIGPALET.BAS'>   Can anyone tell me how to access the 256K colors that I'mă'>   supposed to have on my VGA graphics?  I would like to pută'>   some color cycling and the like into my graphics, yet Iă'>   can't find a way to get beyond the basic 15 even in screenă'>   modes 11,12, etc.ă'>.............................................................ă'   In mode 12h, which is a 16 color mode, you will be able toă'only use 16 selected colors. You may choose which of the 256ă'standard defined colors you will use, or even make your own, bută'you will still be limited to 16 colors of your choice.ăă'_|_|_|   BIGPALET.BASă'_|_|_|   This is a simple demonstration of a technique rotatingă'_|_|_|   a big palette smoothly in graphics mode 13h.ă'_|_|_|   No warrantees or guarantees are given or implied.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (4/7/96)ăDECLARE SUB RotatePalette (t%)ăDECLARE SUB PalPocket (save%)ăDECLARE SUB MakePalette ()ă'$DYNAMICăDIM SHARED PAL(384) AS INTEGER: DIM SHARED RGB(16050) AS LONGăSCREEN 13: PalPocket 1: SOUND 999, 3: MakePaletteăFOR t% = 200 TO 1 STEP -1ă   CIRCLE (60 + t% \ 2, 50 + t% \ 4), t%, 201 - t%ă   PAINT (60 + t% \ 2, 50 + t% \ 4), 201 - t%: NEXT: t% = 0ăWHILE INKEY$ = ""ă'   WHILE (INP(&H3DA) AND 8) = 0: WEND    ' Uncomment these linesă'   WHILE (INP(&H3DA) AND 8) <> 0: WEND   ' if compiling to .EXEă'   WHILE (INP(&H3DA) AND 8) = 0: WEND    ' They are for smoothă'   WHILE (INP(&H3DA) AND 8) <> 0: WEND   ' rotation if compiledă   RotatePalette t%: t% = (t% + 1) MOD 21400ăWEND: PalPocket 0: SCREEN 0: WIDTH 80, 25: ENDăSUB MakePaletteă   DEF SEG = VARSEG(RGB(0)): O& = VARPTR(RGB(0))ă   r% = 0: g% = 0: b% = 0: rd% = 1: gd% = 1: bd% = 1ă   FOR t& = 0 TO 21399ă      p& = O& + t& * 3ă      IF (r% < 64) AND (r% >= 0) THENă         POKE p&, r%ă      ELSEă         IF r% < 0 THEN POKE p&, 0ă         IF r% > 63 THEN POKE p&, 63ă      END IFă      IF (g% < 64) AND (g% >= 0) THENă         POKE p& + 1, g%ă      ELSEă         IF g% < 0 THEN POKE p& + 1, 0ă         IF g% > 63 THEN POKE p& + 1, 63ă      END IFă      IF (b% < 64) AND (b% >= 0) THENă         POKE p& + 2, b%ă      ELSEă         IF b% < 0 THEN POKE p& + 2, 0ă         IF b% > 63 THEN POKE p& + 2, 63ă      END IFă      IF r% = 70 THEN rd% = -1:  ELSE IF r% = -8 THEN rd% = 1ă      IF g% = 73 THEN gd% = -1:  ELSE IF g% = -11 THEN gd% = 1ă      IF b% = 76 THEN bd% = -1:  ELSE IF b% = -14 THEN bd% = 1ă      r% = r% + rd%: g% = g% + gd%: b% = b% + bd%: NEXTăEND SUBăSUB PalPocket (save%)ă   DEF SEG = VARSEG(PAL(0)): O& = VARPTR(PAL(0))ă   IF save% <> 0 THENă      FOR t% = 0 TO 255ă         OUT &H3C7, t%ă         POKE O& + t% * 3 + 0, INP(&H3C9)ă         POKE O& + t% * 3 + 1, INP(&H3C9)ă         POKE O& + t% * 3 + 2, INP(&H3C9): NEXTă   ELSEă      FOR t% = 0 TO 255ă         OUT &H3C8, t%ă         OUT &H3C9, PEEK(O& + t% * 3 + 0)ă         OUT &H3C9, PEEK(O& + t% * 3 + 1)ă         OUT &H3C9, PEEK(O& + t% * 3 + 2): NEXTă   END IFăEND SUBăSUB RotatePalette (t%)ă   DEF SEG = VARSEG(RGB(0)): O& = VARPTR(RGB(0))ă   FOR att% = 1 TO 255ă      C& = O& + ((att% + t%) MOD 21400) * 3ă      OUT &H3C8, att%ă      OUT &H3C9, PEEK(C&)ă      OUT &H3C9, PEEK(C& + 1)ă      OUT &H3C9, PEEK(C& + 2): NEXTăEND SUBă'_|_|_|   end   BIGPALET.BASăDouglas Lusher                 320X240 MODEX WITH 3 PAGES     FidoNet QUIK_BAS Echo          07-20-96 (11:19)       QB, PDS                184  5828     320X240.BAS 'Greetings, everyone. Here is code to put a VGA card into 320x240 modeă'with 256 colors and 3 pages. This should be a good layout for highă'quality graphics and animation. It has a 4:3 aspect ratio, so the pixelsă'are square, and it has 20% more pixels than SCREEN 13 and multipleă'pages. All with 256 colors. Please try it out and send me youră'comments and bug reports. Thanks.ăă DECLARE SUB XCLS (Page%)ă DECLARE SUB ShowPage (Page%)ă DECLARE SUB Set320x240mode ()ă DECLARE SUB XPRINT (X%, Y%, Text$, Culler%, Page%)ă DECLARE SUB PutPixel (X%, Y%, Culler%, Page%)ă DEFINT A-Ză '$INCLUDE: 'QB.BI'ăă DIM BitMask%(7)ă FOR Bit% = 0 TO 7: BitMask%(Bit%) = 2 ^ Bit%: NEXTă Test$ = "The quick brown fox jumps over lazy dogs"ă CALL XPRINT(0, 0, "", 0, 0)   'initialize the print routineăă CALL Set320x240mode: SLEEP 1ă HMax% = 320: VMax% = 240: Pg% = 0ă FOR X% = 0 TO HMax% - 1ă   CALL PutPixel(X%, 0, 2, Pg%)ă   CALL PutPixel(X%, VMax% - 1, 2, Pg%)ă NEXTă FOR Y% = 0 TO VMax% - 1ă   CALL PutPixel(0, Y%, 2, P%)ă   CALL PutPixel(HMax% - 1, Y%, 2, Pg%)ă NEXTă CALL XPRINT(0, 0, "This is 320x240x256 mode, 3 pages", 15, P%)ă FOR Y% = 1 TO 14ă   CALL XPRINT(0, Y% * 16, Test$, Y%, Pg%)ă NEXTă BEEP: A$ = INPUT$(1)ă CALL XCLS(0)ă CALL XPRINT(0, 0, "This is page 0", 1, 0)ă CALL XPRINT(0, 64, "Press 0, 1, or 2 to see the pages", 1, 0)ă CALL XPRINT(0, 80, "Press ESC to exit", 1, 0)ă CALL XPRINT(0, 16, "This is page 1", 2, 1)ă CALL XPRINT(0, 64, "Press 0, 1, or 2 to see the pages", 2, 1)ă CALL XPRINT(0, 80, "Press ESC to exit", 2, 1)ă CALL XPRINT(0, 32, "This is page 2", 4, 2)ă CALL XPRINT(0, 64, "Press 0, 1, or 2 to see the pages", 4, 2)ă CALL XPRINT(0, 80, "Press ESC to exit", 4, 2)ă DOă A$ = INPUT$(1)ă SELECT CASE A$ă   CASE "0": CALL ShowPage(0)ă   CASE "1": CALL ShowPage(1)ă   CASE "2": CALL ShowPage(2)ă   CASE CHR$(27): EXIT DOă   CASE ELSE: BEEPă END SELECTă LOOPă SCREEN 13: SCREEN 0: WIDTH 80ă ENDăă SUB GetPixel (X%, Y%, Culler%, Page%)ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3CE, 4: OUT &H3CF, X% AND 3ă DEF SEG = VidSegment%ă Culler% = PEEK((Y% * 80) + (X% \ 4))ă END SUBăă SUB PutPixel (X%, Y%, Culler%, Page%)ă SHARED BitMask%()ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3C4, 2: OUT &H3C5, BitMask%(X% AND 3)ă DEF SEG = VidSegment%ă POKE (Y% * 80) + (X% \ 4), Culler%ă END SUBăă SUB Set320x240modeă 'begin with standard 320x200x256 modeă SCREEN 13ă 'disable "chain4" modeă OUT &H3C4, &H4: OUT &H3C5, &H6ă 'enable writes to all four planesă OUT &H3C4, &H2: OUT &H3C5, &HFă 'clear video memoryă CLSă 'synchronous reset while switching clocksă OUT &H3C4, 0: OUT &H3C5, &H1ă 'select 25 Mhz dot clock and 60 hz scanning rateă OUT &H3C2, &HE3ă 'restart the sequenceră OUT &H3C4, 0: OUT &H3C5, &H3ă 'to reprogram the CRT controller,ă 'remove write protect from the registersă OUT &H3D4, &H11: OUT &H3D5, INP(&H3D5) AND &H7Fă OUT &H3D4, &H6: OUT &H3D5, &HD     'total vertical pixelsă OUT &H3D4, &H7: OUT &H3D5, &H3E    'overflowă OUT &H3D4, &H9: OUT &H3D5, &H41    'turn off double double-scană OUT &H3D4, &H10: OUT &H3D5, &HEA   'vertical sync startă OUT &H3D4, &H11: OUT &H3D5, &HAC   'vertical sync end, reprotect registersă OUT &H3D4, &H12: OUT &H3D5, &HDF   'vertical pixels displayedă OUT &H3D4, &H14: OUT &H3D5, 0      'turn off dword modeă OUT &H3D4, &H15: OUT &H3D5, &HE7   'vertical blank startă OUT &H3D4, &H16: OUT &H3D5, &H6    'vertical blank endă OUT &H3D4, &H17: OUT &H3D5, &HE3   'turn on byte modeă END SUBăă SUB ShowPage (Page%)ă SELECT CASE Page%ă   CASE 0: OUT &H3D4, &HC: OUT &H3D5, 0ă   CASE 1: OUT &H3D4, &HC: OUT &H3D5, &H4Fă   CASE 2: OUT &H3D4, &HC: OUT &H3D5, &H9Eă   CASE ELSE: ERROR 5          'illegal function callă END SELECTă END SUBăă SUB XCLS (Page%)ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3C4, &H2: OUT &H3C5, &HFă DEF SEG = VidSegment%ă FOR Address% = 0 TO 19199: POKE Address%, 0: NEXTă END SUBăă SUB XPRINT (X%, Y%, Text$, Culler%, Page%)ă STATIC HiNibble%(), LoNibble%()ă IF LEN(Text$) GOTO StartXPRINTă REDIM HiNibble%(255, 15), LoNibble%(255, 15)ă REDIM BitMask%(15)ă BitMask%(0) = 0:  BitMask%(1) = 8:   BitMask%(2) = 4ă BitMask%(3) = 12: BitMask%(4) = 2:   BitMask%(5) = 10ă BitMask%(6) = 6:  BitMask%(7) = 14:  BitMask%(8) = 1ă BitMask%(9) = 9:  BitMask%(10) = 5:  BitMask%(11) = 13ă BitMask%(12) = 3: BitMask%(13) = 11: BitMask%(14) = 7ă BitMask%(15) = 15ă DIM Regs AS RegTypeXă Regs.AX = &H1130ă Regs.BX = &H600ă CALL InterruptX(&H10, Regs, Regs)ă CharSegment% = Regs.ES: CharOffset% = Regs.BPă DEF SEG = CharSegment%ă FOR Char% = 0 TO 255ă   FOR Ln% = 0 TO 15ă     BitPattern% = PEEK(CharOffset%)ă     HiNibble%(Char%, Ln%) = BitMask%(BitPattern% \ 16)ă     LoNibble%(Char%, Ln%) = BitMask%(BitPattern% AND 15)ă     CharOffset% = CharOffset% + 1ă   NEXTă NEXTă ERASE BitMask%ăă StartXPRINT:ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3C4, 2ă DEF SEG = VidSegment%ă VidPtr% = (Y% * 80) + (X% \ 4)ă FOR Ptr% = 1 TO LEN(Text$)ă   Char% = ASC(MID$(Text$, Ptr%, 1))ă   VidOffset% = VidPtr%ă   FOR Ln% = 0 TO 15ă     OUT &H3C5, HiNibble%(Char%, Ln%)ă     POKE VidOffset%, Culler%ă     OUT &H3C5, LoNibble%(Char%, Ln%)ă     POKE VidOffset% + 1, Culler%ă     VidOffset% = VidOffset% + 80ă   NEXTă   VidPtr% = VidPtr% + 2ă NEXTă END SUBăBen Lloyd                      PROG-DRAW 2.2                  foxeggs@newrock.com            08-03-96 (10:55)       QB, QBasic, PDS        114  7405     PROGDRAW.BAS' Remember to extract the .ZIP with option -Dă' ie.  PKUNZIP -D PROGDRAW.ZIP C:\ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PROGDRAW.ZIP",4^6:Z&=5217:?STRING$(50,177);ăU"%up()%9%%%.%%:0'wE%%%%%%%%%%%%%%%3%%%%uw%tliw(f&Ti.wf&T%up()%/%ăU"%%I%%=%%(F%%%%%%%%%%%%%%%9%%%%uw%tliw(f&Ti.wf&i%fySu(i&up%()/%%ăU"%%%%)=%(F%%%%%%%%%%%%%%%%9%%%%uwtl#iwf&%Tity#iwf&#Sui&%up()%9%%ăU"%7-%;w9vE98&7IL%%%%O%%%%:%%%%uw%tliw(f&Tu%wtli.wf&S%gfyp$/YnB(TăU"]Nq7oQGq,%ITO'Fx%/R:9^vAv9JeN#OWA(boIT%<%up%()9%%%%-%&UI&F&Er]9ăU"'d'%%%N*%%%9%%%%uwtl#iwf&%Tnsx%yfqq.Sy'yS4y:='[U5bL<XNgI#<idPIeăU"8(uA/JKJOgyy2z-[Xm&0#GoSsLe6Ph[x))y:7X/oEJt>W5Y^vr1I_*&fhmi0.,(ăU"2SH'A%OeR\u(z<8/$)ka4Y6b#&fPRC.c;utbb]crc9de<ZI^i74\B2AnrL(]7P<ăU"d<nqE['rRD)=0CqE]-K'^)ptCLei^C_N(9pqTgcZv3wWUoer1Ht1'dAI-K3&C2FăU"(M,$^L/P::;/1gbVV#\,n\jZ%U92ow$T;l/Q;L51vk%CaW8QThA;n-6ioK$qUeuăU"0=eB^Yw%xskosab=PTfZn-p&]INO4HiB-S,')tvIEjr%/6dIJ]1g<,A*PDWM/:aăU"W_DoZsqBZL+xAdkUq<:GW0g8O+kp)Z\mN/8SxA'Pf.O56[.)'Zs,5a^HEWk\sKcăU"ac_w&CO)?DTLD&)'(XH)Upj5D5oJgF(HpEha,F>r[0mk.l/(3Gz%mfN^uGUc^f0ăU"X<(Y>8=#u-NYM60d]pjoFSzLqhH&LBp5%5XG-Bk1;dj/H3:qF4*ePu2j2g.a6$?ăU"g9waQ-C0]ZV)Kc^HcT>E-Hp&VY1X--OPcU)*#ak/&U62LR-6*CmQ53('l&scm)RăU"Tl-IHH3_$RP>]V9=k0X(uBW2GPKeA5h6#jxnznGCS2EIb/?6TVg:<k/<JEZGrC.ăU"OpgJC[mU2K(Q#awP^6]$rOIJ(Vf1yTgqE^*RUTH&2e/uL_1DKZKOALjlRE;$2<WăU"=Xu[ndlMf'RmO>(%TD]gDlxIoreWE/0tYH-J:+51wyYE2Tu1LuA0J:)[3yAAu?văU"Re%LiXe]YQ3$Aav<Cf_m>LfTh6FjoIUmp>B1Wv6TPMs:8X=okx3d5q<Xri?iXs2ăU"oGC.xG<X_l3ZMt++U]i^1(;4hC(iM1sumTR^bkTf8$rO>G:tUW)[C-kwSAf>P$9ăU"RC(8[-OYA3&yF1:;qb6Usk=x4,Gi4u%p()9%%%%-(%Uw&+F+E2&b9%%%%>%%%%6ăU"%%%%uwt%liwf&&Tzx%jwSn[snX$o^W[^IW%aU#;e'WI2f;-%S%up%()9%%%%-%%ăU"OI&FOt)PU&^2%%%^\%%%7%%%%uwtl#iwf&%Tiwf)&&SgRfxN*rd>T/j;x=9ox(ZăU"&Y7+QlWWM-FDObMX+vPWQM6,PL)#;JZTco'te;V?x?qD<\RNOFU>L1D,k*sl<0lăU"GHmdC_fjW>C5WLvIJ]qy<.DlIB84htqn,6Vw:BPMAyy(MEJJdqcom^+bSJscDPTăU"<VXd]Mv7kqEB;>.f#0\^?i1D3WHA%&urlm[EdMzecHky^?0#NFPzl+[8vxcPtJ_ăU"'YrPjDBU'DOrlXpV[h0B'vKr$KClS&85UiVt&BadM3^Tz25H2erNSLGHpjhX]]6ăU"F:><$Lcgp<T,oH1k:y[YzcFMB<Z'*5'\JQQ,<j<f7zguQ3)qQA>KQhf#XumgO(oăU"]SE^8,IgyM?E:yI\ZT&h?L.q.rJUgU/R/NL3YuiIfaD;S3t*&8%q.xAsrjo6<5wăU"T:m_D&ab09vfu493WheE4Oi-'VoTm;V/Hfn]*$IWsfbiRAaE6IN3?JrvvZ%[>.&ăU"u_2[HF5U3)?WY?5S#*>^kz#,nE_=zEpkW1H)x5-lCmg's\BWOI%WfUs^%(.=5T*ăU"aqm.KFo&XnYWDcb=c2+[fV$kkS;aO_0e=3cE<h#iqP)n.8PlW#nI)CaS$cfOQwJăU"<nSaPVl&+n^#+JVx9iw#+Wn7p?70_e2u?[h1<v+[HT8KL7u$9ES3;rqb1pmhyZYăU"VljN8hSSa<r[W-?SU&vRU738a(2_Y*a_X&WD>]35eMd&Qgeam+<W\)*qGZGlD([ăU"5&zUp()ymZxEW2;IL;Z1B[1(/m5f%i7n9G+dmA/?rc1<swqL4rR$N_r>ab]9<BYăU"'M(Wx0I>AB%Wnu4AFzto%ChVBbII0)_25pHu..m6?h--ZhA.oG>tcek._5NAY%UăU"gy25v6[Wm,&0q8<BfomRGnla15fUEw1.XFl8rp.ToebD+qICu,;kAEPi5I;Ybo[ăU"0X*V3GebN2Ybz8'pyIQ5;p3hOlJ3rfE*qB_&?t:7H*p:Z5(YP8Q,f;TrC-*g&aYăU"p:5av6jcA+TchAX=kO#\,EYWnm+x?i'o>*tx)o/NZf+ptSKpJ4502nWY.=kWpl\ăU"XL4#y_.hL*KYy.wZU&niKB5T7)s5chtkhZt+pL2q.Jze%\.aqiv*>[fApNeQFa<ăU"R7cH_G+]L&qCp%&[D]'7Q<P^v_&>v$<8l0I<(#&UptIAd\qgpX;aGo1J$5oH=XjăU"Egf]Od].T-62.)%hK+0ZqFD_Th.%ki[\Q_iG]fXTjoRg/N6CyD<o5_6EPq\vj>găU"7,[Ld=r5h]\td;.c9-wKQvSlC6yTXfP.;3O\4<mJ8P\vP$pz<5-R%G1o.>4rd,/ăU"*1R$c&-=X:tkIA'w,<0cSOKDg[7koY][BXdYZWaIE5l0C)bDB-;:4vi)lEqHMVHăU"zrjYDQ5CFB+jeGc,3*h1xt]'d1[^S35\f)._<kqA*?qACFbZ__mO]=Bc2Z:>''KăU"5tHsMjP'_;#Ul/$AV&jSA:6f5Gu?:CFkC6Qg1NfmiPbp\VX89sY,*wq/ieu_rR?ăU"+1P)tBScMwyXt]STXrg2F(4&pZrsUZPJuidqhckDXvm_xvkhki6<uZ8?0KAAZ6SăU"AQwQMKF7[pk[uXrs51o1Xj[aO0K>m&+]?oR,^]'KHPg0qv<M&/v6.nFXOXSJeE+ăU"L5bh)4g[gpM^idg*Q[f_HY*+e%Kkyy#/LJX=qeP(>^DC>I^avWgr%(O0k9YB5M3ăU"X%hL1ti7g*Z$Ippz'HG'P0]JsoZnNaa9]+pKvAQ\#BL_k9Q3C>T-&?*(/jY-79_ăU"d$-bQP>:/r;4WljLaM^IXBUa_u&7uANp03KtF-0PA[<.5;E?0PLLmSid6,WXdYjăU"'%/t.BC(\PR0iVzWVDrz4N.;l?fp^':'\c9&4L-uu<Q;M*_MiotPlPM/6TCReM7ăU"H$&=))i)rCr'&$g\p*eqEZe:Xkuq1dRww4mJ-'sH;0sk<XaIef+JnnF%T.?ZP),ăU"q1btuIBoKWRFP#\E,Ve>l51u7^/hBoz0tbjXO?(iiXf_lx[>CpNa&>[/8.BBh)găU"(LVk[l<?Px%Y<Ly3R#NIUPefY['<<$k7*Oyu0XD1s9Q*D9zV(kt_.f^Y-PjxDIaăU"6R833>TE-H)9Igm8o/RD-++i^8y/mu396mbdzQXZm]&+w-5CDWZ-&37;d>I\H97ăU"b=Jz3Zo/)Z;advkyKJZI(+(s5=t.v4t\HB#>g7q8,-+'TTuHR:m$4IHuBum'PJ'ăU"M_Tz.$pey6nX&P*v5q(szVrqT[b3-=I0,p.K3]DNmXv&lRGb;lLjVrRY;5/MS1oăU"vI^]GX&(hR/E0Z9bLrZ'd[v[=7fIC.,>6q%bA?eGDCXA*qSfA-aTnG7)-=b2ob5ăU"Ltqa(6c51KT:[4q%U)1ZHUJn1Npenemc,U[\(e9j'K'3-NZ_K);sN0TM'lgbsTAăU"sQ2l?r'9F^^Ilt#,nIra/lHiRDi;-:_1i'\(#lJQXVsC9#.rJ?3F?.AWIfeWYETăU"+a^kHHF#)t-g7JT0a3qze#kT&NOKkt#2W#NPCraGFcKh;RA**&x<=0sFt%PAz\*ăU"GAzvkS&T)YIk,3A#w20L>%e7ra=6*?*+.;Hk-Km)3o>652eP$LI?&#:nO3*WchcăU"$JwH.q%qiVz15RCVMP?SuMW.c3^*z^Ds#69Ojo^oX&6MAFOJXwV#?J,8W;c<uX=ăU"BePeJH?>e:^..-7wKsXL^c^L1=[dGJ=6)u=DT>=qX\8GRqSfB0?Z-ufcp8b;T:CăU"D,_i7o*z7li4,X)*4,*]oc7aVo')m4b,gr49>s'HW3T[j$mq7n>61kN:OMZxEAZăU"N#X4q[jjGO_V=2+sVTbo_]dQM&-k]wlBjCjq=#BRoZJ*S)cCE>uF.>M4.$?Yf,_ăU"[76N9Li6xf$G6mHEc;t/ATsZ#lWnUnyR%9Dt*Ww,XaNGJC#]D70gD]u_4i_Ox(<ăU"GWl$F93Ur6*9QTkQSf%F4)MH5.D;v7McFu<H_Nt%DBsv/lDzv9#Ni/TDhYunKP4ăU"uP[4k^&a$S^1mV_G5)0$^?;_P*z8W(2'PK22g6\/s(_P*Sig;68d\'a2U;3qI*#ăU"d;?gX&Oj+;1Y/L([0#U,k<MORG;jQI)LZ3#b5?E+D/PjVUr>X1V.7:QI+d;Ih<LăU"3s<Z*)c_Z.9b5'XQ2R1Q+/J0(.bpaAQ8>e\R^NflG?+5iAv4A,uDGfD/K=[NUe[ăU"e&#VR/9+]guoW>:hPsQAc/Y/*6oeh#;Y.TF3lvP5+_q'_HDS8OSDz8O1Vi,Spx0ăU"M5'p#u8^i8CITAX0pR+3fO5L6GP7X__swROwY?-g?29WvFav&:hmCllHK(FpUO1ăU"F%q]0AR9R6jA7^1?Lm(tJLFdtssc'C\aSg>z3)9Kl#F=dQZdh[A8';fCPknFMV,ăU"KJBl-8b4o_P=,M&Wc6%c4sVDn:S?5k]IZeX%+++=?Q9I+pk\F2aGg,m&l86dGKsăU"mZ%T?bIimp\gj#m_J'2w7a+W'H(ueT9Ia+s[ImZeP?fbOYQo9x4W.:hV:uQBNU=ăU"X2IB;S;G1RI9*X/teL[e:979(KX'2]RqW1Yq3%MG,\eV69'p3^*DS8OSDz:PCdEăU"HtDdv35^:ZG6J0B>jv^(M]I-km2D\p33j,[&EnDMyghP,5M.f4?^jDHs\DHG4S,ăU";d\<YSn5pkEAabp7B+%1^(/BdHLw2^kocDAK$3%>q;HuA]nm<b0<'%B#_2;'7:GăU"+0O\UB0&#'o)F<'H^EFh>4a*BNOIdN^Lte+foe]$88.U#7==g$<(>:G%0;?=,cqăU"(0;n>:app*P9MUD[;:O\/)(XD1R9/1d[Pb/U>FuAY2WYIn'H27Ju+hOJ+0_?KiLăU"C/Ms-bnB(VR93zS2E(UK:JX6)/L0;7nq%z(FXXQUzkC=5^RoGUzTTB;MU_dmhugăU"h^-jQlT+7iV?]Pqhga*Yt)$PE*hwVER,LNj6/M_;D=c\#&VMKU2Y2ipu9qXh-PEăU"fUTG0DIhnu;J8Z\O]U743swpiWZt$#K208M7v.TeMO.>Ii8H5wANSQgh<fkMu1băU"S5a4m6E'8b<Uuv1V\#-I]uk6=G=l,w/'9VSd?7yH,x]O?^:^:MS7MHX)f>sZZ#RăU"L&aQmhjUlU9>qCmuOo^ZviLZ+&ejz*fUMFgJjPfRpqCdi%5E%ziN_M-za/'aqQcăU"(+(__Pf(S,3^#wlqbQ%<(z<<$-QviMDd>sBM'p4PF3w+FD+Qf\mgJb]Zua_%#wGăU"Q/Z(F?MYhj<*7yWQitpZ+b9vkCRaex6lpQdHLqus48g;HSq4V)(>Ed\2cup/&RNăU"gR[$v:5rh^adulZOYwmMr4h[1JJI1Nmsi:?Tv9t7>CGiuu)4g/tl*WC^]AO*gcZăU"Z5S_^7>[fH)EQr7>4KMK+;tDR8Tj2x[xSt$YZ]3F02=NiBW#4Z1tv#a^LFD;O4WăU"_kRzj<zY#3e1nncE#R<pm:]5mLBmq-ic[KO+w%4up(%)/%%#%%%>&%(F%%%%%%%ăU"%%%%%%%%>%%%%u%wtli.wf&T#iwf&%Tijk%fzqy%Sgfx%up&'%9%9%%%%%%8:0wăU"E%%%%%%%%%%%%%%%%3%%%%%%%%%&%U%%%%%%%%%uw%tliw(f&Ti.wf&T%up&'%9ăU"%/%%%%%%)=%(F%%%%%%%%%%%%%%%%9%%%%%%%%%&%E%%%%Q%%%%uw%tliw(f&TiăU".wf&i%fySu(i&up%&'9%%/%%%I%%=%%(F%%%%%%%%%%%%%%%9%%%%%%%%%&%%E%ăU"%%&-%%%%uwtl#iwf&%Tity#iwf&#Sui&%up&'%9%9%%%%-%9;wvE0987I%L%%%%ăU"O%%%%:%%%%%%%%%&%E%.%%_%%%%uw%tliw(f&Tu%wtli.wf&S%gfyu%p&'9%%9%ăU"%#%-%U#I&FE[r]9d%'%%N%*%%9%%%%%%%%%&%%E%%+%c%%%%uwt%liwf&&Tns%xăU"yfq#qSy'%yup&%'9%9%%%%-(%Uw&+F+E2&b9%%%%>%%%%6%%%%%%%%%&%E%%%%,ăU"%)%%u%wtli.wf&T%zxjw%Snsn%up&'%9%9%%%%-%%OI&FOt)PU&^2%%%^\%%%7%ăU"%%%%%%%%&%E%%%%o)%%%uw%tliw(f&TiIwf&&%Sgfx%up&'%9%/%%%%%%)>%(F%ăU"%%%%%%%%%%%%%%%>%%%%%%%%%&%E%%%%.7%%%uw%tliw(f&Ti.wf&T%ijkf%zqyăU"S%gfxu%p*+%%%%%-%%-%0%'%%e%7%%%%%ăEND SUBăCLOSE:IF S=255AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăTony Cave                      BURNING FIRE SIMULATOR         FidoNet QUIK_BAS Echo          07-31-96 (01:12)       QB, QBasic, PDS        218  7253     BURNING.BAS 'burning.bas is a fire simulator followed by a palette manipulatoră'1 compile the program (Qbasic v1.1 users see REMarks in SUB getsizes)ă'  (you need to save this in QB to generate the DECLARE statements)ă'2 run the program specifying window sizeă'  EXAMPLE: burning 100 80ă'  where 100 is the x value and 80 is the y valueă'  executing burning with no parameters uses the default values.ă'  (you might want to use the defaults first to get a feel for it)ă'  for great palette manipulations try using:  burning 200 160ă'3 when you want to freeze the screen and go into palette manipulations,ă'  press a keyă'4 in the palette manipulations:ă'  press "P" for a different palette setă'        "-" to slow down palette rotationă'        "+" or "=" to speed up palette rotationă'        "Q" to quită'Feedback would be appreciated (especially on speeding up the fire sub)ăDIM ca(9, 256)ăID$ = "BURNING.BAS (c) 1996 by Tony Cave"ăscreenmode  ' setup the screenăgetsizes    ' get the screen sizesăfirepal     ' setup palette for fireăcircleback  ' draw circular background (REM this out if you don't like it)ărandback    ' draw random background to speed up fire simulationăfire        ' fire simulationăcolors      ' palette manipulationsă'NOTE: This program is not guaranteed to do anything.  The authoră'of this program claims no responsibility for anything that happens.ă'If any damage is done, it is the fault of the user of this program.ăSUB circlebackăFOR cir = 0 TO 255    'add this sub for a circle backgroundăCIRCLE (160, 100), cir * 203 / 255, cir / 2ăCIRCLE (160 + 1, 100), cir * 203 / 255, cir / 2ăNEXTăEND SUBăSUB colorsăSHARED a$ăDOă DOă  cycleă  delayă  getkeyă LOOP UNTIL a$ <> ""ă keycheckăLOOPăEND SUBăSUB cycle                    'cycle the paletteăSHARED red%, green%, blue%ărgb 1ău1% = red%: u2% = green%: u3% = blue%ăFOR t = 1 TO 254ă rgb t + 1ă OUT &H3C8, t: OUT &H3C9, red%: OUT &H3C9, green%: OUT &H3C9, blue%ăNEXTă OUT &H3C8, 255: OUT &H3C9, u1%: OUT &H3C9, u2%: OUT &H3C9, u3%ăEND SUBăSUB delayăSHARED m7ăFOR asdf = 1 TO m7: NEXTăEND SUBăSUB findrgb (x%, y%)          'finds the rgb of a particular pixelăSHARED red%, green%, blue%ăc% = POINT(x%, y%)ăOUT &H3C7, c%ăred% = INP(&H3C9)ăgreen% = INP(&H3C9)ăblue% = INP(&H3C9)ăEND SUBăSUB fireăSHARED sizex, sizey, space, ca()ăDIM x AS INTEGER, y AS INTEGER, avg AS INTEGERăDOăx = INT(RND * sizex) * space - INT(sizex / 2) * space + 160ăy = INT(RND * sizey) * space - INT(sizey / 2) * space + 100ăavg = POINT(x - space, y + space)ăavg = (avg + POINT(x + space, y + space) + POINT(x, y + space)) \ 3ăavg = avg * -(avg < 255)ăPUT (x - 1, y - 1), ca(1, avg + 1), PSETăLOOP UNTIL INKEY$ <> ""ăEND SUBăSUB firepal               'the starting paletteăFOR pu = 1 TO 255ă OUT &H3C8, puă OUT &H3C9, (126 - (ABS(pu - 128))) / 2ă OUT &H3C9, (126 - (ABS(pu - 128))) / 4ă OUT &H3C9, 0'((ABS(pu - 128))) / 4ă'LINE (pu, 0)-(pu, 25), pu  'This is to check out the paletteăNEXT puăPALETTE 128, &H20303FăEND SUBăSUB getkeyăSHARED a$ăa$ = INKEY$ăEND SUBăSUB getsizes                'get the screen sizeăSHARED sizex, sizey, hsizex, hsizey, spaceăspace = 1  'distance apart for pixels or boxes or whateverăsizex = VAL(LEFT$(COMMAND$, 3))ăsizey = VAL(RIGHT$(COMMAND$, 3))ă'Qbasic users REM out the above 2 lines and unREM the below lineă'sizex = 20: sizey = 20  'change these to what ever you want bută                         'larger numbers slow it down alotă                         'For good palette manipulations, change toă                         'sizex=316:sizey=196 and wait about 7 mină                         'before pressing a keyăa = sizex: B = sizey: c = 318: d = 198ăsizex = a * ABS((a <> 0) AND (a < c)) + 50 * ABS(a = 0) + c * ABS(a > c)ăsizey = B * ABS((B <> 0) AND (B < d)) + 30 * ABS(B = 0) + d * ABS(B > d)ăhsizex = INT(sizex / 2)ăhsizey = INT(sizey / 2)ăEND SUBăSUB keycheckăSHARED a$, m7ă IF a$ = "=" OR a$ = "+" THENă m7 = m7 - 1000: m7 = m7 * -((m7 - 1000) > 999)ă END IFă IF a$ = "-" THEN m7 = m7 + 1000ă IF UCASE$(a$) = "P" THEN nextpală IF UCASE$(a$) = "Q" THEN DEF SEG : SYSTEMăEND SUBăSUB nextpalăSHARED palnum, red%, green%, blue%ănop = 5    'number of valid palette sets in case you want to add moreăpalnum = palnum + 1ăIF palnum > nop THEN palnum = 1ăSELECT CASE palnumăCASE 1ăPALETTEăCASE 2ăt = 0: m = 0ăFOR pu = 1 TO 255ă IF t = 0 THEN count = count + 1: IF count > 31 THEN t = 1ă IF t = 1 THEN count = count - 1: IF count < 1 THEN t = 0: m = m + 1ă IF m > 3 THEN m = 0ă OUT &H3C8, puă OUT &H3C9, INT((32 - count) * 63 / 32) * ((m = 0) OR (m = 3))ă OUT &H3C9, INT((32 - count) * 63 / 32) * ((m = 1) OR (m = 3))ă OUT &H3C9, INT((32 - count) * 63 / 32) * ((m = 2) OR (m = 3))ăNEXT puăPALETTE 255, 0ăCASE 3ăse = INT(.03 * 127): th = INT(.08 * 127): fo = INT(.99 * 127)ăFOR pu = 1 TO seă OUT &H3C8, pu: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 32ăNEXT puăFOR pu = se TO thă OUT &H3C8, pu: OUT &H3C9, 0: OUT &H3C9, 0ă OUT &H3C9, INT((pu - se) * (31 / (th - se))) + 32ăNEXT puăFOR pu = th TO foă OUT &H3C8, pu: OUT &H3C9, 0: OUT &H3C9, 0ă OUT &H3C9, 63 - (INT((pu - th) * (31 / (fo - th))) + 32)ăNEXT puăFOR pu = fo TO 127ă OUT &H3C8, puă OUT &H3C9, INT((pu - fo) * (63 / (127 - fo)))ă OUT &H3C9, INT((pu - fo) * (63 / (127 - fo)))ă OUT &H3C9, 63ăNEXT puăFOR pu = 128 TO 255ă rgb 255 - puă OUT &H3C8, pu: OUT &H3C9, red%: OUT &H3C9, green%: OUT &H3C9, blue%ăNEXT puăCASE 4ăt = 0: m = 0ăFOR pu = 1 TO 255ă IF t = 0 THEN count = count + 1: IF count > 6 THEN t = 1ă IF t = 1 THEN count = count - 1: IF count < 1 THEN t = 0: m = m + 1ă IF m > 3 THEN m = 0ă OUT &H3C8, puă OUT &H3C9, INT((7 - count) * 63 / 7) * ((m = 0))' OR (m = 3))ă OUT &H3C9, INT((7 - count) * 63 / 7) * ((m = 1))' OR (m = 3))ă OUT &H3C9, INT((7 - count) * 63 / 7) * ((m = 2))' OR (m = 3))ăNEXT puăPALETTE 255, 0ăCASE 5ăFOR pu = 1 TO 255ă OUT &H3C8, puă OUT &H3C9, (126 - (ABS(pu - 128))) / 2ă OUT &H3C9, (126 - (ABS(pu - 128))) / 4ă OUT &H3C9, 0'((ABS(pu - 128))) / 4ă'LINE (pu, 0)-(pu, 25), puăNEXT puăPALETTE 128, &H20303FăEND SELECTăEND SUBăSUB randbackăDIM c AS INTEGERăSHARED sizex, sizeyăfy1 = ABS(sizey / 2 <> sizey \ 2): fy2 = NOT ABS(fy1)ăfx1 = ABS(sizex / 2 <> sizex \ 2): fx2 = NOT ABS(fx1)ăFOR y = 100 - sizey / 2 - 1 + fy1 TO 100 + sizey / 2 + 1 + fy2ăFOR x = 160 - sizex / 2 - 1 + fx1 TO 160 + sizex / 2 + 1 + fy2ăc = INT(RND * 50 + 206)ă'use the following two lines for a special backgroundă'c = (COS((y * .03515625# - 3.515625) ^ 2) * 63.75 + 63.75)ă'c = c + (COS((x * .0265625 - 4.25) ^ 2) * 63.75 + 63.75)ăPOKE INT(y) * 320 + INT(x), căNEXTăNEXTăEND SUBăSUB rgb (gluupin%)           'finds the rgb of a color attributeăSHARED red%, green%, blue%ăOUT &H3C7, gluupin%ăred% = INP(&H3C9): green% = INP(&H3C9): blue% = INP(&H3C9)ăEND SUBăSUB screenmodeăSHARED ca()ăDEF SEG = &HA000ăSCREEN 13ăFOR x = 0 TO 765 STEP 3ăx2 = x + 318 * (x > 315)ăx3 = x2 + 318 * (x2 > 315)ăy = (-(x > 315) - (x > 630)) * 3ăLINE (x3, y)-(x3 + 2, y + 2), x / 3, BFăGET (x3, y)-(x3 + 2, y + 2), ca(1, x / 3) 'put colors into array toăNEXT                                      'speed up the fire subăEND subăKurt Kuzba                     BOUNCING GREAT BALLS OF FIRE   FidoNet QUIK_BAS Echo          04-18-96 (00:00)       QB, QBasic, PDS        77   3098     RGB13FLO.BAS'_|_|_|   RGB13FLO.BASă'_|_|_|   A graphics display program based on a FIDO ECHO messageă'_|_|_|   From: Mike Castelli   ...   Date: 04-05-96 10:48ă'_|_|_|   Subject: Circle Burnă'_|_|_|   No guarantees or warrantees are given or implied.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (4/18/96)ăCRSX% = CSRLIN: CRSY% = POS(0): ScrPocket 1ăTYPE BallsColorDef: R AS INTEGER: G AS INTEGER: B AS INTEGER: END TYPEăTYPE GreatBallsOfFireă   X AS INTEGER: XD AS INTEGER: Y AS INTEGER: YD AS INTEGERă   H AS INTEGER: C AS INTEGER: END TYPEăDIM SHARED cr(1 TO 6) AS GreatBallsOfFireăDIM SHARED rgb(1 TO 6, 16) AS BallsColorDefăFOR t% = 0 TO 8ă   C% = t% * 5 + 22: B% = (t% + 1) * 2ă   rgb(1, t%).R = C%: rgb(1, t%).G = B%: rgb(1, t%).B = t%ă   rgb(2, t%).R = t%: rgb(2, t%).G = C%: rgb(2, t%).B = B%ă   rgb(3, t%).R = B%: rgb(3, t%).G = t%: rgb(3, t%).B = C%ă   rgb(4, t%).R = C%: rgb(4, t%).G = 0: rgb(4, t%).B = C%ă   rgb(5, t%).R = 0: rgb(5, t%).G = C%: rgb(5, t%).B = C%ă   rgb(6, t%).R = C%: rgb(6, t%).G = C%: rgb(6, t%).B = 0: NEXTăFOR t% = 1 TO 7ă   FOR C% = 1 TO 6: rgb(C%, 16 - t%) = rgb(C%, t%): NEXT: NEXTăSCREEN 13: RANDOMIZE (TIMER * 100): PalPocket 1ăFOR t% = 1 TO 6ă   cr(t%).X = RND * 320: cr(t%).Y = RND * 200ă   cr(t%).XD = (RND * 2 + 1): cr(t%).YD = (RND * 2 + 1)ă   cr(t%).H = t% * 2: NEXTăWHILE INKEY$ = ""ă   CircDrawă   FOR t% = 1 TO 6ă      IF cr(t%).X < 10 THEN cr(t%).XD = ((RND * 999) AND 1) + 1ă      IF cr(t%).Y < 10 THEN cr(t%).YD = ((RND * 999) AND 1) + 1ă      IF cr(t%).X > 309 THEN cr(t%).XD = -(((RND * 999) AND 1) + 1)ă      IF cr(t%).Y > 189 THEN cr(t%).YD = -(((RND * 999) AND 1) + 1)ă      cr(t%).X = cr(t%).X + cr(t%).XDă      cr(t%).Y = cr(t%).Y + cr(t%).YD: NEXTăWEND: PalPocket 0: SCREEN 0: WIDTH 80, 25ăLOCATE CRSX%, CRSY%, 1: ScrPocket 0ăSUB CircDrawă   FOR C% = 1 TO 6ă      cr(C%).H = (cr(C%).H + 1) AND 15ă      cr(C%).C = (cr(C%).C + 14) AND 15ă      X% = cr(C%).X: Y% = cr(C%).Y: H% = cr(C%).Hă      FOR l% = 0 TO 11ă         CIRCLE (X%, Y%), l% + 1, ((H% + l%) AND 15) + C% * 16 - 15ă      NEXTă      FOR t% = 1 TO 16ă         OUT &H3C8, t% + (C% - 1) * 16: H% = (cr(C%).C + t%) AND 15ă         OUT &H3C9, rgb(C%, H%).R: OUT &H3C9, rgb(C%, H%).Gă         OUT &H3C9, rgb(C%, H%).B: NEXT: NEXTăEND SUBăSUB PalPocket (save%) STATICă   DIM pal(384) AS INTEGERă   DEF SEG = VARSEG(pal(0)): O& = VARPTR(pal(0))ă   IF save% <> 0 THENă      FOR t% = 0 TO 255ă         OUT &H3C7, t%: POKE O& + t% * 3 + 0, INP(&H3C9)ă         POKE O& + t% * 3 + 1, INP(&H3C9)ă         POKE O& + t% * 3 + 2, INP(&H3C9): NEXTă   ELSEă      FOR t% = 0 TO 255ă         OUT &H3C8, t%: OUT &H3C9, PEEK(O& + t% * 3 + 0)ă         OUT &H3C9, PEEK(O& + t% * 3 + 1)ă         OUT &H3C9, PEEK(O& + t% * 3 + 2): NEXTă   END IFăEND SUBăSUB ScrPocket (gt%) STATICă   DIM scr(4000)  AS STRING * 1ă   DEF SEG = &HB800ă   IF gt% <> 0 THENă      FOR t& = 0 TO 3999: scr(t&) = CHR$(PEEK(t&) AND 255): NEXTă   ELSEă      FOR t& = 0 TO 3999: POKE t&, ASC(scr(t&)): NEXTă   END IFăEND SUBă'_|_|_|   end   RGB13FLO.BASăKurt Kuzba                     BUFFERED PCX VIEWER            FidoNet QUIK_BAS Echo          07-20-96 (00:00)       QB, QBasic, PDS        66   2566     PCXVIEW.BAS '>   ok, well the basic gif displayer I have is very slow, aboută'>   3-4 min. to display a picture.  Is there a faster way toă'>   display pixels?ă'>..............................................................ă'   You might benefit from the use of a buffer. Have a look ată'this. It is for 320x200x256 .PCX files, but the idea of theă'screen buffer is implemented. Where a greater ammount ofă'calculation is required, and multiple bit planes are involved,ă'the time savings should be considerable using a buffer.ă'With four bit planes, you would use four buffers set up as:ă'   DIM buf0(19202) AS INTEGERă'   DIM buf1(19202) AS INTEGERă'   DIM buf2(19202) AS INTEGERă'   DIM buf3(19202) AS INTEGERă'Once you GET your screen to your buffer, you can write to theă'buffer your data, and then PUT the data onscreen.ăă'_|_|_|   PCXVIEW.BASă'_|_|_|   An example of 320x200x256 .PCX display in QBasic.ă'_|_|_|   No warrantees or guarantees are given or implied.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (7/20/96)ăON ERROR GOTO OOps: '$DYNAMICăDIM buf(32002) AS INTEGER: buf(0) = 2560: buf(1) = 200ă'_|_|_|  init buffer for 2560 bits X 200 linesăBSEG& = VARSEG(buf(2)): BOFS& = VARPTR(buf(2))ăINPUT "Name of PCX file to view => ", PCX$: IF PCX$ = "" THEN ENDăbt1! = TIMER: PRINT "Loading file"ăOPEN PCX$ FOR INPUT AS #1: CLOSE 1: OPEN PCX$ FOR BINARY AS #1ăfin& = LOF(1) - 767: SEEK #1, fin&: pal$ = INPUT$(768, 1)ăp% = 1: fin& = fin& - 1: SCREEN 13ăFOR T& = 0 TO 255ă   OUT &H3C8, T&ă   FOR hue% = 1 TO 3ă      OUT &H3C9, ASC(MID$(pal$, p%)) \ 4: p% = p% + 1ă   NEXTăNEXTăSEEK #1, 129: T& = BOFS&: DEF SEG = BSEG&: CLS : spin% = 1ăPRINT "Loading PCX  "; : spinner$ = "//--\\||": rle% = 0ăDOă   PRINT CHR$(29); MID$(spinner$, spin%, 1);ă   spin% = (spin% AND 7) + 1ă   p$ = INPUT$(256, 1): fpos& = SEEK(1): l% = LEN(p$)ă   IF fpos& > fin& THENă      l% = l% - (fpos& - fin&): p$ = LEFT$(p$, l%): view$ = "done"ă   END IFă   FOR p% = 1 TO l%ă      dat% = ASC(MID$(p$, p%))ă      IF rle% = 0 THENă         IF (dat% AND 192) = 192 THENă            rle% = dat% AND 63ă         ELSEă            POKE T&, dat%: T& = T& + 1ă         END IFă      ELSEă         FOR rle% = rle% TO 1 STEP -1ă            POKE T&, dat%: T& = T& + 1ă         NEXTă      END IFă   NEXTăLOOP UNTIL view$ = "done"ăbt2! = TIMER: CLOSE 1: PUT (0, 0), buf, PSETăWHILE INKEY$ <> "": WEND: WHILE INKEY$ = "": WENDăSCREEN 12: WIDTH 80, 25: PRINT bt2! - bt1!ăOOps:ă   CLOSE 1: PRINT "error"; ERR: ENDă'_|_|_|   end   PCXVIEW.BASăDarryl Stokes                  DONUT BALLS                    FidoNet QUIK_BAS Echo          07-22-96 (16:33)       QB, QBasic, PDS        59   1169     DONUTS.BAS  RANDOMIZE TIMERăSCREEN 13ăărecalc:ă'CLSăăred = 0ăgreen = 0ăblue = 0ăăredbig = INT(RND * 5) + 1ăgreenbig = INT(RND * 5) + 1ăbluebig = INT(RND * 5) + 1ăIF redbig = 2 THEN redbig = .5ăIF greenbig = 2 THEN greenbig = .5ăIF bluebig = 2 THEN bluebig = .5ăIF redbig = 3 THEN redbig = .25ăIF greenbig = 3 THEN greenbig = .25ăIF bluebig = 3 THEN bluebig = .25ăIF redbig = 4 THEN redbig = .75ăIF greenbig = 4 THEN greenbig = .75ăIF bluebig = 4 THEN bluebig = .75ăIF redbig = 5 THEN redbig = 0: red = 1ăIF greenbig = 5 THEN greenbig = 0: green = 1ăIF bluebig = 5 THEN bluebig = 0: blue = 1ăăFOR i = 30 TO 92ă red = red + redbigă blue = blue + bluebigă green = green + greenbigă PALETTE i, 65536 * INT(blue) + 256 * INT(green) + INT(red)ăNEXT iăăc = 32ădir = 1ăăcircles:ăDOăx = INT(RND * 320) + 1ăy = INT(RND * 200) + 1ăr = INT(RND * 150) + 1ăFOR i = r TO 1 STEP -1ăCIRCLE (x, y), i, căPAINT (x, y), căSELECT CASE diră        CASE 1ă        c = c + 1ă        IF c = 92 THEN dir = 2ă        CASE 2ă        c = c - 1ă        IF c = 32 THEN dir = 1ăEND SELECTăNEXT iăc = 32ădir = 1ăIF INKEY$ <> "" THEN ENDăGOTO recalcăLOOPăăKurt Kuzba                     PALETTE MANIPULATION           FidoNet QUIK_BAS Echo          06-02-96 (00:00)       QB, QBasic, PDS        86   4033     PALPAL.BAS  '>   'I like this one alot. It uses the PALETTE statementă'>.......................................................ă'   The yin-yang was very nice. Here are some hardware paletteă'routines you might someday find useful.ă'_|_|_|   PALPAL.BASă'_|_|_|   This is a simple demonstration of methods of paletteă'_|_|_|   manipulation. Demonstration uses graphics mode 13h.ă'_|_|_|   No warrantees or guarantees are given or implied.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (6/2/96)ăDECLARE SUB pal (act$)ăSCREEN 13: DEF SEG = &HA000: DIM SHARED red(256) AS INTEGERăDIM SHARED grn(256) AS INTEGER: DIM SHARED blu(256) AS INTEGERăFOR t& = 1 TO 63999: POKE t&, (t& AND 511) \ 2: NEXTăSOUND 999, 3: pal "save"ăpal "fadeout": SOUND 999, 3: WHILE INKEY$ = "": WENDăpal "fadein": SOUND 999, 3: WHILE INKEY$ = "": WENDăpal "blackout": SOUND 999, 3: WHILE INKEY$ = "": WENDăpal "restore": SOUND 999, 3: WHILE INKEY$ = "": WENDăSCREEN 0: WIDTH 80, 25: ENDăSUB pal (act$)ă   SELECT CASE act$ă   ' "save","fadein","fadeout","restore","blackout"ă      CASE "save"ă         FOR colour% = 0 TO 255ă            OUT &H3C7, colour%          ' Set color to readă            red(colour%) = INP(&H3C9)   ' read red valueă            grn(colour%) = INP(&H3C9)   ' read green valueă            blu(colour%) = INP(&H3C9)   ' read blue valueă         NEXTă      CASE "fadein"ă         DOă            done% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if saved palette not in use.ă               IF red% < red(colour%) THEN red% = red% + 1: done% = 1ă               IF grn% < grn(colour%) THEN grn% = grn% + 1: done% = 1ă               IF blu% < blu(colour%) THEN blu% = blu% + 1: done% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE done% <> 0ă      CASE "fadeout"ă         DOă            visible% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if colors are still visible.ă               IF red% > 0 THEN red% = red% - 1: visible% = 1ă               IF grn% > 0 THEN grn% = grn% - 1: visible% = 1ă               IF blu% > 0 THEN blu% = blu% - 1: visible% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE visible% <> 0ă      CASE "restore"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, red(colour%)     ' write red valueă            OUT &H3C9, grn(colour%)     ' write green valueă            OUT &H3C9, blu(colour%)     ' write blue valueă         NEXTă      CASE "blackout"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, 0                ' write red valueă            OUT &H3C9, 0                ' write green valueă            OUT &H3C9, 0                ' write blue valueă         NEXTă   END SELECTăEND SUBă'_|_|_|   end   PALPAL.BASăPeter Cooper                   RAY CASTER 3D ENGINE           peco@trenham.demon.co.uk       08-09-96 (10:31)       QB, QBasic, PDS        93   2705     RAYCAST.BAS ' ==========================================================================ă' RAY CASTER 3D sorta ENGINE thingymajigă' ==========================================================================ă' Wrote this about a month ago, it's a sort of wolfenstien\doom lookalikeă' but all in native QBasic source! Uses an interesting ray tracing techniqueă' could be optimized x1000  Infact, it's being converted to ASM and stuffă' like textures will be added and maybe a bit of shadingă'ă' Anyway, this code is _public domain_, change it, modify it, whatever, ită' only took about 40 mins in total, So whatever.. you have fun with it <grin>ă'ă' Cheers, {:o)   Peter CooperăăDECLARE SUB screensetup ()ăDECLARE SUB makeworld ()ăDECLARE SUB maketables ()ăDIM SHARED st%(0 TO 360)ăDIM SHARED ct%(0 TO 360)ăDIM SHARED a$(1 TO 10)ăpx% = 15: py% = 15: sa% = 0ăPRINT "please wait..";ămakeworldămaketablesăscreensetupălp1:ăFOR t% = sa% TO sa% + 59 STEP 1ăxb = st%(t% MOD 360) / 100              'get incăyb = ct%(t% MOD 360) / 100              'get incăbx = px%                                'decimal copyăby = py%                                'decimal copyăl% = 0                                  'reset lengthăDOăbx = bx + xbăby = by + ybăl% = l% + 1ăk% = ASC(MID$(a$(CINT(by / 10)), CINT(bx / 10), 1)) - 48ăLOOP UNTIL k% <> 0ăă'PRINT l%        this would print the distance to wall from playerăx% = (t% - sa%) * 5ădd% = (1000 / l%)ăLINE (x%, 1)-(x% + 5, 99 - dd%), 15, BFăLINE (x%, 101 + dd%)-(x% + 5, 200), 2, BFăLINE (x%, 100 - dd%)-(x% + 5, 100 + dd%), k%, BFăLINE (x%, 100 - dd%)-(x% + 5, 100 - dd%), 0ăLINE (x%, 100 + dd%)-(x% + 5, 100 + dd%), 0ăăNEXT t%ăPCOPY 0, 1ăăin$ = INPUT$(1)ăIF in$ = "x" THEN sa% = sa% + 3ăIF in$ = "z" THEN sa% = (sa% + 357) MOD 360ăIF in$ = CHR$(27) THEN SCREEN 0: WIDTH 80, 25: SYSTEMăIF in$ = " " THENă        px% = px% + (st%(t% MOD 360) / 50)ă        py% = py% + (ct%(t% MOD 360) / 50)ăEND IFăGOTO lp1:ăăSUB maketablesă' Peters boring _yawn_ table creationăFOR tmp1% = 0 TO 360ăst%(tmp1%) = SIN(tmp1% * .0174) * 100ăIF tmp1% MOD 100 = 0 THEN PRINT ; ".";ăNEXT tmp1%ăFOR tmp1% = 0 TO 360ăct%(tmp1%) = COS(tmp1% * .0174) * 100ăIF tmp1% MOD 100 = 0 THEN PRINT ; ".";ăNEXT tmp1%ăEND SUBăăSUB makeworldă' Peter Coopers demonstration level. Change it if you wish! Each numberă'isă' a color numberăa$(1) = "1919191919"ăa$(2) = "9000000001"ăa$(3) = "1000000409"ăa$(4) = "9010005001"ăa$(5) = "1020040009"ăa$(6) = "9030000001"ăa$(7) = "1000078009"ăa$(8) = "9050087001"ăa$(9) = "1060000009"ăa$(10) = "9191919191"ăEND SUBăăSUB screensetupăSCREEN 8, , 0, 1ăCLSăWINDOW SCREEN (1, 1)-(320, 200)ăEND SUBăJonathan Leger                 LED SCREEN SAVER               leger@mail.dtx.net             08-12-96 (21:02)       QB, QBasic, PDS        274  8803     LED.BAS     DEFINT A-Zăă'LedDisplay() routine Original Author: Scott Pessoni - August 1995ă'---> Modified by Jonathan Leger <---ăă'All other code, including InitLedDisplay() and InitLedBar(), writtenă'by Jonathan Leger (leger@mail.dtx.net).ăăDECLARE SUB InitLedDisplay (x%, y%, onc%, offc%, digits%, v%, a%)ăDECLARE SUB InitLedBar (x%, y%, onc%, offc%, elems%, maxval%, v%, a%)ăDECLARE SUB LedBar (Number#)ăDECLARE SUB LedDisplay (Number#)ăăDIM SHARED DisplayLedX, DisplayLedY, LedDigits, OnColor, OffColor, apage, vpageăDIM SHARED GraphLedX, GraphLedY, GraphElements, GraphNumăă'This string, scrollmsg$, _must_ have a space at the end.ăscrollmsg$ = "REAL PROGRAMERS USE BASIC... ": scrollclr = 14ăăSCREEN 7ăăt# = TIMERăx# = 0ăDOă  x# = x# + 1ăLOOP UNTIL TIMER - t# > 1ăăx# = x# / 5ăăRANDOMIZE TIMERăcx = INT(RND * 280): cy = INT(RND * 160) + 12ăxd = INT(RND * 2) + 1ăIF xd = 1 THENă   xdir = -1ăELSEă   xdir = 1ăEND IFăyd = INT(RND * 2) + 1ăIF yd = 1 THENă   ydir = -1ăELSEă   ydir = 1ăEND IFăădigits = 1: fore = 9: back = 8ăsloc = 40: slet = 1: stog = 0ăăDOăăFOR Count# = VAL(STRING$(digits - 1, "9")) TO VAL(STRING$(digits, "9"))ăă   x2# = 0ă   DOă      x2# = x2# + 1ă   LOOP UNTIL x2# >= x#ăă   stog = stog + 1ă   IF stog = 5 THENă      stog = 0ă      SCREEN , , apage, vpageă      LOCATE 1, 1: PRINT STRING$(40, " ");ă      IF fore = 15 THENă         COLOR 9ă      ELSEă         COLOR fore + 1ă      END IFă      LOCATE 1, slocă      PRINT MID$(scrollmsg$, slet, (40 - sloc));ă      sloc = sloc - 1ă      IF sloc = 0 THENă         sloc = 1ă         slet = slet + 1ă         FOR sc = 2 TO 25ă            IF slet - sc < 1 THEN EXIT FORă            LOCATE sc, 1: PRINT MID$(scrollmsg$, slet - sc, 1);ă         NEXT scă         IF sc = 26 AND slet - sc = LEN(scrollmsg$) THENă            slet = 1: sloc = 40ă         END IFă      END IFă   END IFăă   InitLedDisplay cx, cy, 0, 0, digits, 0, 1ă   LedDisplay -1ăă   cx = cx - xdiră   cy = cy - ydirăă   IF cx < 12 THENă      xdir = xdir * -1ă      cx = 12ă   ELSEIF cy < 12 THENă      ydir = ydir * -1ă      cy = 12ă   ELSEIF cx > 280 THENă      xdir = xdir * -1ă      cx = 280ă   ELSEIF cy > 180 THENă      ydir = ydir * -1ă      cy = 180ă   END IFăă   InitLedDisplay cx, cy, fore, back, digits, 0, 1ăă   LedDisplay Count#ăă   key$ = INKEY$ăă   SELECT CASE key$ă         CASE CHR$(27)ă            EXIT DOă   END SELECTăă   IF (Count# MOD 100) = 0 THENă      fore = fore + 1ă      IF fore > 15 THEN fore = 9ă   END IFăăNEXT Count#ăădigits = digits + 1ăăLOOPăăSUB InitLedBar (x%, y%, onc%, offc%, elems%, maxval%, v%, a%)ăăapage% = a%: vpage% = v%ăSCREEN , , apage%, vpage%ăăGraphLedX = x%  '|- Upper Left corner ofăGraphLedY = y% '|  Led Graph displayăGraphElements = elems%  'Number of graph elements. Maximum 32ăGraphNum = maxval% 'The number when the graph is 100%ăăEND SUBăăSUB InitLedDisplay (x, y, onc, offc, digits, v, a)ăăapage = a: vpage = văăSCREEN , , apage, vpageăăDisplayLedX = x '|- Upper Left corner ofăDisplayLedY = y '|  Led Digit displayăLedDigits = digits   'Number of digits to have on displayăăOnColor = onc: OffColor = offcăăLedDisplay -1ăăEND SUBăă'LedBar: A simulated Led Bargraphă'-----------------------------------------------ă'LedBar Numberă'    Number = The current number you want to update the bar graph withă'-----------------------------------------------ăSUB LedBar (Number#)ăăIF Number# < 0 THEN 'If Negitive then blank Bar Graphă     FOR MakeGraph = 1 TO GraphElements * 2 STEP 2 'Make the Bar graphă          LINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), OffColor%ă     NEXT MakeGraphă     EXIT SUBăEND IFăăElements = INT(Number# * GraphElements / GraphNum) 'Calculate Number ElementsăIF Elements > GraphElements THEN Elements = GraphElements 'Check limtsăă'----------------- Draw Bar Graph --------------------------------ăFOR MakeGraph = 1 TO Elements * 2 STEP 2 'Make the Bar graph (Lit)ăLINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), OnColor%ăNEXT MakeGraphăFOR MakeGraph = Elements * 2 + 1 TO GraphElements * 2 STEP 2 'Make the Bar graph (DimăLINE (GraphLedX + MakeGraph, GraphLedY)-(GraphLedX + MakeGraph, GraphLedY + 5), OffColor%ăNEXT MakeGraphă'------------------------------------------------------------------ăEND SUBăă'LedDisplay: Generates a simulated Digital Led Display.ă'------------------------------------------------------------ă'LedDisplay (Number)ă'    Number = The number you want to display on the Digital Displayă'------------------------------------------------------------ăSUB LedDisplay (Number#)ăăSCREEN , , apage, vpageăăIF Number# < 0 THEN  'Setup Led Display panelă     FOR PlotX = DisplayLedX TO DisplayLedX + ((LedDigits - 1) * 8) STEP 8ă          '----------- One LED Matrix digit --------------------ă          LINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), OffColor%ă          LINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), OffColor%ă          LINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), OffColor%ă          LINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), OffColor%ă          LINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), OffColor%ă          LINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), OffColor%ă          LINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), OffColor%ă          '------------------------------------------------------ă     NEXT PlotXă     EXIT SUBăEND IFăăNumber# = FIX(Number#) 'Get rid of the decimals incase there are someăNumber# = VAL(LEFT$(STR$(Number#), LedDigits + 1)) 'Chop Number to LED sizeăăPlotX = DisplayLedXăăIF LEN(STR$(Number#)) - 1 < LedDigits THEN  'Clear Unused digitsă     FOR ClearEmptyDigits = 1 TO LedDigits - (LEN(STR$(Number#)) - 1)ă     LINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), OffColor%ă     LINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), OffColor%ă     LINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), OffColor%ă     LINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), OffColor%ă     LINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), OffColor%ă     LINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), OffColor%ă     LINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), OffColor%ă     PlotX = PlotX + 8ă     NEXT ClearEmptyDigitsăEND IFăăăFOR PlotDigit = 1 TO LEN(STR$(Number#)) - 1 'Plot each number to a LEDăăWorkDigit$ = MID$(STR$(Number#), PlotDigit + 1, 1) 'Get 1 DigităăSELECT CASE WorkDigit$ 'Find and select which elements to turn onă     CASE "0"ă          E1 = OnColor%: E2 = OnColor%: E3 = OnColor%: E4 = OffColor%: E5 = OnColor%: E6 = OnColor%: E7 = OnColor%ă   ă     CASE "1"ă          E1 = OffColor%: E2 = OffColor%: E3 = OnColor%: E4 = OffColor%: E5 = OffColor%: E6 = OffColor%: E7 = OnColor%ă  ă     CASE "2"ă          E1 = OffColor%: E2 = OnColor%: E3 = OnColor%: E4 = OnColor%: E5 = OnColor%: E6 = OnColor%: E7 = OffColor%ă  ă     CASE "3"ă          E1 = OffColor%: E2 = OnColor%: E3 = OnColor%: E4 = OnColor%: E5 = OffColor%: E6 = OnColor%: E7 = OnColor%ă  ă     CASE "4"ă          E1 = OnColor%: E2 = OffColor%: E3 = OnColor%: E4 = OnColor%: E5 = OffColor%: E6 = OffColor%: E7 = OnColor%ă ă     CASE "5"ă          E1 = OnColor%: E2 = OnColor%: E3 = OffColor%: E4 = OnColor%: E5 = OffColor%: E6 = OnColor%: E7 = OnColor%ă  ă     CASE "6"ă          E1 = OnColor%: E2 = OffColor%: E3 = OffColor%: E4 = OnColor%: E5 = OnColor%: E6 = OnColor%: E7 = OnColor%ă  ă     CASE "7"ă          E1 = OffColor%: E2 = OnColor%: E3 = OnColor%: E4 = OffColor%: E5 = OffColor%: E6 = OffColor%: E7 = OnColor%ă  ă     CASE "8"ă          E1 = OnColor%: E2 = OnColor%: E3 = OnColor%: E4 = OnColor%: E5 = OnColor%: E6 = OnColor%: E7 = OnColor%ă  ă     CASE "9"ă          E1 = OnColor%: E2 = OnColor%: E3 = OnColor%: E4 = OnColor%: E5 = OffColor%: E6 = OffColor%: E7 = OnColor%ăEND SELECTă'Plot the LEDs to the screen------------------------ăLINE (PlotX, DisplayLedY + 1)-(PlotX, DisplayLedY + 5), E1ăLINE (PlotX + 1, DisplayLedY)-(PlotX + 5, DisplayLedY), E2ăLINE (PlotX + 6, DisplayLedY + 1)-(PlotX + 6, DisplayLedY + 5), E3ăLINE (PlotX + 1, DisplayLedY + 6)-(PlotX + 5, DisplayLedY + 6), E4ăLINE (PlotX, DisplayLedY + 7)-(PlotX, DisplayLedY + 11), E5ăLINE (PlotX + 1, DisplayLedY + 12)-(PlotX + 5, DisplayLedY + 12), E6ăLINE (PlotX + 6, DisplayLedY + 7)-(PlotX + 6, DisplayLedY + 11), E7ă'--------------------------------------------------ăPlotX = PlotX + 8ăNEXT PlotDigităăPCOPY apage, vpageăăSCREEN , , vpage, vpageăăEND SUBăClaude Gagn‚                   ICON MAKER V1.0                cgagne@globalserve.on.ca       08-16-96 (09:25)       QB, QBasic, PDS        486  11658    ICONMAKE.BAS'****************************************************************************ă'*                     [ Icon maker  Version 1.0 ]                          *ă'*                   [ Claude Gagn‚, Toronto, 1996 ]                        *ă'*            [ You can Email me at: cgagne@globalserve.on.ca ]             *ă'*                                                                          *ă'*     [ You can modify this program but please, give me some credits !]    *ă'*                                                                          *ă'*                [ This program make 50 X 50 pixels icons ]                *ă'*            [ You can load those icon by using BLOAD command ]            *ă'*                                                                          *ă'*                 The mouse routines have been taken from                  *ă'*                        Le Grand livre du QBASIC                          *ă'*                         (c) Micro Application                            *ă'*                                  1992                                    *ă'****************************************************************************ăăDECLARE SUB fenetre (xup%, yup%, xdown%, ydown%, aspect%, couleur%)ăDEFINT A-ZăăDECLARE SUB initsouris ()ăDECLARE SUB souris (OnOff%)ăDECLARE SUB FormeSouris (SoftHard%, BMasque%, CMasque%)ăDECLARE SUB SetSouris (X%, Y%)ăDECLARE SUB TempoSouris (Tempo%)ăDECLARE SUB zonexsouris (X1%, x2%)ăDECLARE SUB zoneysouris (Y1%, Y2%)ăDECLARE SUB getsouris (Mode%)ăDECLARE SUB attendrelachebouton ()ăDECLARE SUB attenddeplacement (Mode%)ăăăDECLARE SUB ReadData ()ăDECLARE FUNCTION Interr% (Num%, ax%, bx%, cx%, dx%)ăăDECLARE SUB ABSOLUTE (Fonction%, par1%, par2%, par3%, adr%)ăăăă'**********  d‚finir les variables globales  **********ăăDIM SHARED sourisx%, sourisy%, sourisk%       '*** position et bouton de la sourisăăDIM SHARED PM%(45)                      '** tableau pour le programme machineăReadData                                '** lire le programme machineăăăăăăSCREEN 12ăinitsourisăCLSăăON ERROR GOTO gestionăăDIM tampon(1 TO 1432)ăăCALL fenetre(0, 0, 639, 479, 1, 7)ăCALL fenetre(10, 10, 270, 270, 0, 0)ăCALL fenetre(280, 10, 340, 70, 0, 0)ăăCALL fenetre(286, 16, 335, 65, 1, 7)ăGOSUB miseajourăăCALL fenetre(280, 235, 629, 270, 0, 0)   ' FENETRE COULEURăăFOR c = 1 TO 16ăLINE (c * 20 + 280, 240)-(c * 20 + 300, 265), c - 1, BFăNEXT căăCALL fenetre(280, 80, 340, 140, 0, couleur1)  ' fenetre couleur1ăCALL fenetre(280, 150, 340, 210, 0, couleur2) ' fenetre couleur2ăăCALL fenetre(350, 10, 629, 225, 0, 0)    ' FENETRE FONCTIONSăăCALL fenetre(10, 280, 629, 469, 0, 0)    ' FENETRE TEXTEăăLOCATE 2, 46: COLOR 14: PRINT "Functions List"ăCOLOR 15ăLOCATE 3, 46: PRINT "F1 - New Icon"ăLOCATE 4, 46: PRINT "F2 - Save"ăLOCATE 5, 46: PRINT "F3 - Load"ăCOLOR 7ăLOCATE 6, 46: PRINT "F4 - Not Avail."ăCOLOR 15ăLOCATE 7, 46: PRINT "F5 - Shadow (Up)"ăLOCATE 8, 46: PRINT "F6 - Shadow (Down)"ăLOCATE 9, 46: PRINT "F7 - Shadow (Left)"ăLOCATE 10, 46: PRINT "F8 - Shadow (right)"ăLOCATE 11, 46: PRINT "F9 - Erase/Fill"ăCOLOR 7ăLOCATE 12, 46: PRINT "F10 - Not avail."ăCOLOR 15ăLOCATE 13, 46: PRINT "ESC => exit"ăăăsouris 1ăDOăgetsouris 0ăclavier$ = UCASE$(INKEY$)ăăIF clavier$ = CHR$(0) + CHR$(59) THENăăCALL fenetre(286, 16, 335, 65, 1, couleur1)ăGOSUB miseajourăEND IFăăăIF clavier$ = CHR$(0) + CHR$(60) THEN GOSUB sauvegardeăIF clavier$ = CHR$(0) + CHR$(61) THEN GOSUB chargementăIF clavier$ = CHR$(0) + CHR$(62) THEN GOSUB changercouleurăIF clavier$ = CHR$(0) + CHR$(63) THEN GOSUB ombrerhautăIF clavier$ = CHR$(0) + CHR$(64) THEN GOSUB ombrerbasăIF clavier$ = CHR$(0) + CHR$(65) THEN GOSUB ombrergaucheăIF clavier$ = CHR$(0) + CHR$(66) THEN GOSUB ombrerdroiteăIF clavier$ = CHR$(0) + CHR$(67) THEN GOSUB remplissageăIF sourisk% = 1 THENăIF sourisx% > 285 AND sourisy% > 235 AND sourisx% < 624 AND sourisy% < 265 THENăsouris 0ăcouleur1 = POINT(sourisx%, sourisy%)ăCALL fenetre(280, 80, 340, 140, 0, couleur1)ăsouris 1ăEND IFăăIF sourisy% AND sourisx% > 285 AND sourisy% > 235 AND sourisx% < 624 AND sourisy% < 265 THENăsouris 0ăcouleur2 = POINT(sourisx%, sourisy%)ăCALL fenetre(280, 150, 340, 210, 0, couleur2)ăsouris 1ăEND IFăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF sourisx% > X * 5 + 10 AND sourisy% > Y * 5 + 10 AND sourisx% < X * 5 + 15 AND sourisy% < Y * 5 + 15 THENăsouris 0ăLINE (X * 5 + 11, Y * 5 + 11)-(X * 5 + 14, Y * 5 + 14), couleur1, BFăPSET (285 + X, 15 + Y), couleur1ăsouris 1ăEXIT FORăEXIT FORăEND IFăăIF sourisy% AND sourisx% > X * 5 + 10 AND sourisy% > Y * 5 + 10 AND sourisx% < X * 5 + 15 AND sourisy% < Y * 5 + 15 THENăsouris 0ăLINE (X * 5 + 11, Y * 5 + 11)-(X * 5 + 14, Y * 5 + 14), couleur2, BFăPSET (285 + X, 15 + Y), couleur2ăsouris 1ăEXIT FORăEXIT FORăEND IFăăNEXT YăNEXT XăEND IFăLOOP WHILE clavier$ <> CHR$(27)ăsouris 0ăCLSăENDăămiseajour:ăsouris 0ăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăLINE (X * 5 + 11, Y * 5 + 11)-(X * 5 + 14, Y * 5 + 14), POINT(285 + X, 15 + Y), BFăNEXT YăNEXT Xăsouris 1ăRETURNăăombrerhaut:ăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF POINT(285 + X, 15 + Y) = couleur1 AND POINT(285 + X, 14 + Y) <> couleur1 THENăPSET (285 + X, 14 + Y), couleur2ăEND IFăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăombrerbas:ăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF POINT(285 + X, 15 + Y) = couleur1 AND POINT(285 + X, Y + 16) <> couleur1 THENăPSET (285 + X, 16 + Y), couleur2ăEND IFăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăombrergauche:ăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF POINT(285 + X, 15 + Y) = couleur1 AND POINT(284 + X, 15 + Y) <> couleur1 THENăPSET (284 + X, 15 + Y), couleur2ăEND IFăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăombrerdroite:ăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF POINT(285 + X, 15 + Y) = couleur1 AND POINT(286 + X, 15 + Y) <> couleur1 THENăPSET (286 + X, 15 + Y), couleur2ăEND IFăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăchangercouleur:ăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăIF POINT(285 + X, 15 + Y) = couleur1 THENăPSET (285 + X, 15 + Y), couleur2ăEND IFăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăsauvegarde:ăsouris 0ăLOCATE 20, 5: PRINT STRING$(65, 255);ăLOCATE 20, 5: LINE INPUT "Sauvegarde [.ICO]: "; fichier$ăIF LEN(fichier$) = 0 THEN GOTO finsauvegardeăăGET (286, 16)-(335, 65), tamponăăDEF SEG = VARSEG(tampon(1))ăBSAVE fichier$ + ".ICO", VARPTR(tampon(1)), 1432ăDEF SEGăBEEPăăfinsauvegarde:ăLOCATE 20, 5: PRINT STRING$(65, 255);ăsouris 1ăRETURNăăchargement:ăsouris 0ăLOCATE 20, 5: PRINT STRING$(65, 255);ăLOCATE 20, 5: LINE INPUT "Chargement [.ICO]: "; fichier$ăIF LEN(fichier$) = 0 THEN GOTO finchargementăăDEF SEG = VARSEG(tampon(1))ăBLOAD fichier$ + ".ICO", VARPTR(tampon(1))ăDEF SEGăăPUT (286, 16), tampon, PSETăăGOSUB miseajourăăBEEPăăfinchargement:ăLOCATE 20, 5: PRINT STRING$(65, 255);ăsouris 1ăRETURNăăăremplissage:ăăsouris 0ăăFOR X = 1 TO 50ăFOR Y = 1 TO 50ăăPSET (285 + X, 15 + Y), couleur1ăăNEXT YăNEXT XăăGOSUB miseajourăsouris 1ăRETURNăăgestion:ăBEEPăBEEPăRESUME NEXTăăăMS.Data:        '***** DATA du programme machine pour Interr%()ă DATA 55,8b,ec,56,57            'sauver le registreă DATA 8b,76,0c,8b,04            'chercher AX … DXă DATA 8b,76,0a,8b,1că DATA 8b,76,08,8b,0că DATA 8b,76,06,8b,14ă DATA cd,21                     'INT 21 (num‚ro modifi‚ !)ă DATA 8b,76,0c,89,04            'r‚‚crire AX … DXă DATA 8b,76,0a,89,1că DATA 8b,76,08,89,0că DATA 8b,76,06,89,14ă DATA 5f,5e,5d                  'chercher le registreă DATA ca,08,00                  'RETF 8  =>  fină DATA #ăăăSUB attenddeplacement (Mode%)ă'** Attendre le d‚placement de la souris ou l'appui/relchement du boutonăă getsouris Mode%ă X% = sourisx%: Y% = sourisy%: K% = sourisk%ăă DOă  getsouris Mode%ă LOOP UNTIL X% <> sourisx% OR Y% <> sourisy% OR K% <> sourisk%ăăEND SUBăăSUB attendrelacheboutonă'** Attendre le relchement du bouton de la sourisăă WHILE sourisk%ă  getsouris 0ă WENDăăEND SUBăăSUB fenetre (xup, yup, xdown, ydown, aspect, couleur)ăăăIF aspect <= 0 THENă        surface = 8ă        ombre = 15ă        lumiere = 8ăEND IFăăIF aspect >= 1 THENă        surface = 7ă        ombre = 8ă        lumiere = 15ăEND IFăăLINE (xup, yup)-(xdown, ydown), surface, BFăăLINE (xup, yup)-(xdown, ydown), ombre, BăLINE (xup + 1, yup + 1)-(xdown - 1, ydown - 1), ombre, BăăLINE (xup, yup)-(xup, ydown), lumiereăLINE (xup + 1, yup + 1)-(xup + 1, ydown - 1), lumiereăăLINE (xup, yup)-(xdown, yup), lumiereăLINE (xup + 1, yup + 1)-(xdown - 1, yup + 1), lumiereăăLINE (xup + 3, yup + 3)-(xdown - 3, ydown - 3), couleur, BFăăăăEND SUBăăSUB FormeSouris (SoftHard%, BMasque%, CMasque%)ă'** D‚finir l'apparition du curseur de la sourisăă R% = Interr%(&H33, 10, SoftHard%, BMasque%, CMasque%)      '** d‚finir FormeSourisăăEND SUBăăSUB getsouris (Mode%)ă'** Chercher dans SourisX%, SourisY% et SourisK% la position de la souris et l'‚tat du boutonăă  R% = Interr%(&H33, 3, bx%, cx%, dx%)ăă  sourisk% = bx%                  '** bouton (1=gauche, 2=droit)ă ă  IF Mode% THENă   sourisx% = cx% / 16 + 1         '** position X (mode texte)ă   sourisy% = dx% / 16 + 1          '** position Y (mode texte)ă  ELSEă   sourisx% = cx%                  '** position X (mode graphique)ă   sourisy% = dx%                  '** position Y (mode graphique)ă  END IFăăEND SUBăăSUB initsourisă'** Initialiser le gestionnaire de la sourisăă R% = Interr%(&H33, 0, bx%, cx%, dx%)   '** initialiser le gestionnaire de la sourisăăEND SUBăăFUNCTION Interr% (Num%, ax%, bx%, cx%, dx%)ă'** R‚aliser l'interruption num‚ro Num% avec les contenus des registres de AX% … DX%ăă IF PM%(0) = 0 THEN                     '** PM%() est initialis‚ ?ă  PRINT "ERREUR : programme machine absent ! Arrt!"ă  ENDă END IFăă DEF SEG = VARSEG(PM%(0))               '** d‚finir le segmentă POKE VARPTR(PM%(0)) + 26, Num%         '** mettre en oeuvre le num‚ro de l'interruptionăă CALL ABSOLUTE(ax%, bx%, cx%, dx%, VARPTR(PM%(0))) '** appelăă Interr% = ax%                          '** valeur retourn‚e prise dans AX%ăăEND FUNCTIONăăSUB ReadDataă'** Lire les DATA pour le programme machine dans PM%()ăă RESTORE MS.Dataă DEF SEG = VARSEG(PM%(0))ăă FOR i% = 0 TO 99ă  READ Octet$ă  IF Octet$ = "#" THEN EXIT FORă  POKE VARPTR(PM%(0)) + i%, VAL("&H" + Octet$)ă NEXT i%ăăEND SUBăăSUB SetSouris (X%, Y%)ă'** D‚finir la position du pointeur de la sourisă'** X% et Y% sont en coordonn‚es caractŠres en mode texteăă R% = Interr%(&H33, 4, bx%, X% * 16 - 16, Y% * 16 - 16)ăăEND SUBăăSUB souris (OnOff%)ă'** Allumer / Eteindre le pointeur de la souris (0=‚teint, 1=allum‚)ăă IF OnOff% = 0 THEN OnOff% = 2 ELSE OnOff% = 1ă R% = Interr%(&H33, OnOff%, bx%, cx%, dx%)ăăEND SUBăăSUB TempoSouris (Speed%)ă'** D‚finir la vitesse de la souris (0=rapide, 100=trŠs lente)ăă R% = Interr%(&H33, 15, bx%, Speed%, Speed% * 2)ăăEND SUBăăSUB zonexsouris (X1%, x2%)ă'** D‚finir la zone de d‚placement horizontal de la souris de X1% … X2%ă'** X1% et X2% sont des coordonn‚es caractŠres en mode texteăă R% = Interr%(&H33, 7, 0, X1% * 16 - 16, x2% * 16 - 16)ăăEND SUBăăSUB zoneysouris (Y1%, Y2%)ă'** D‚finir la zone de d‚placement vertical de la souris de Y1% … Y2%ă'** Y1% et Y2% sont des coordonn‚es caractŠres en mode texteăă R% = Interr%(&H33, 8, bx%, Y1% * 16 - 16, Y2% * 16 - 16)ăăEND SUBăGerald Filimonov               ANIMATION FACTORY V1.0         kwmelvin@nr.infi.net           03-26-95 (12:50)       QB, QBasic, PDS        137  8847     ANIFACT.BAS 'Animation Factory 1.0, Copyright, 1995, All Rights Reservedăă'    This program was created using Qbasic, a programming language that comesă'with most DOS packages.ăă'    This program will allow you to edit a series of frames and play them ă'back in a certain order. You may choose between four colors and a couple of  ă'editing techniques, such as Cut,Copy,Paste,DrawLine, etc.ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ANIFACT.ZIP",4^6:Z&=6074:?STRING$(50,177);ăU"%up()%9%%%I-%:0/ICzA;:oK3R%%(=%%%1%%%%fs%nrfy%jWSg7fxfB):B?^lk4ăU"zuIDyczR3']5a+lo5?7;o5?,:9&ZW9OLd]OmF1w:R4n?'pdJ>I\52s%:5X3o'BPăU"ENUHE-)RDc0MTFY-qF%\6m?>&.44SQulErrhb:n[>>q7p+RbeWD<I+Fqg'arFxhăU"Hu$0l>WnLqk27NNhmeT_X&5-U%ZfVG&l6rC/0S3IZ]x?=s]#f#,;jEi#$=;'f=tăU"8u3\/6u</wqo=C.5u\%))9>&$.9>/$.C]Id45z//&p&5w8gQb2jm#9S.OP((sK(ăU"YZYdCuw)=9pr'6&.)M'&m]%vrZZgWa)%yJ1nC5u$LFgLenj%I?D;I\(e0]D%W:<ăU"iHmZ-7U(*iKe$VIeRq^zZv'?)0L,:+Yu;yPw_PnX(1$6'q7*.vX9RV'Sk-WW+\kăU"6lDsX1iB1PZ?AZN5EQ></b>=X$6.pf.bnUh'Q-XfXq%:-YlG-E-4h2reA'b2nP*ăU"4>zdRr6)9i%0I4PZgMlPOcV]pIJjTvz*b+K=qA:3538l;u/l&o1l\R3o(l:;GblăU"UsxL$X#VYo$Vz2z=V17Shq0YAw)'a),:Tmd/5b+MsB<U-n?$01-nIUhr4dnYPgQăU"cF_/BnllhGV>vp6?lB[ke>;$9DU%E:]0e[Z_N:Tu42x:QKh0$12VR7QC;b2QLg/ăU"6lqMiW%VMf33m4TbKMKG?GH9#mMRGJh,IYuEB/G5\[r5BDnqF1EZG<6CE%MvnF[ăU"34gCuq>Y5HhtBIs:KK35QMeB.LL-nlL$d\YvB]cZV\ix%Gg'mVi,(+kxPBS.0TMăU"6A\w<Q+50dID(vek;+$xm%8:3*Xo]ZP]%u9lXjpiOXoV#rt?m&G1lNKIFb1c>j1ăU"ureE#rANs]iTwWr_Iv.F%Nk6xQRqCcba0=t2>(*:Y==HV:F/IB%yuU+S'pKI5y9ăU"9;nf'C-+fO?J7D-&oU.EBeV'Z_D-gY\3$,;/J+G-W$ij1&35%C^#k5).(%2x7('ăU"oEXkRIO]9d(YQQMOO]8'e3'Fg=D99I_=)S;(m$*4f1^&O841ES:%Z1A/PD/,1l8ăU";R:+'xi?m[s-)x>sja#a)r-.Tlf\C.DW_?dd57%>8rv+*;k&=i>WP9%<-UZb]qxăU"88B6&sSV,f=90lP[iBWs0=9%NIBJgtU_fML:3a^)hc3XKQe)rMFQw^fYTV5&W'săU"7pDU4R4Ju)#A0C75G%t/sPe0on;=RXG4[TWGV]GcRy#ARbooEAP>b9%3n2*fFI_ăU"B5-goVFs\^hU3s;k84Ska'g;[u(N]h+Xr1.=$[PjNbI_+Vn.o^*+-Z,oQ8D0\0(ăU"w_O+V[c)XoH1=$\8jpwAE)aFjAeAS]+q+UMN=Y4Z;8JV$shco5Bf,v=R$$4_t:EăU"82)Q)Z59eVOp7sb[XM=4Os'hBJ&u<\f:t$p&+RJPHvXc;ll_Z8<wT(]X3.fqBF_ăU"A(P3?aiLJD8fZ094bJW=sB=P:Wrt]ms%Y/[=AUdD]H+#sPni/2<F(O2,XlrszC?ăU"FAl*etI0OH8\&E3%xL)pzDejxKfgVEz\b?%$3*gwFB>?%$Nh$Sl_.\a:tb7qYYhăU"bCD*[Fz>=4guKKMcEUc-N587v)sccY'$t??uV*>AJc5Z#:$3w-GFsgql1Pvs%IeăU"$6\.TAi]SHj+\EV5_*rTE#4/+#*nH_n5[4ct;%<Q7\<oMbr:mrZzUNs3cKSa>=kăU"m#j$QF6R&iTjz6VR&TXDV2TxE(EJMYJlMx;bi$RhIV2#qi:K)\I/f_4ic/sqqF9ăU"t8N'j,%hz\mY]\LKKj,5V+KDR2(SST8i9N$+ebQ(mtDp0X8e&f$.0u3h]A\IDmuăU"uo$-Q8mh-b_2NZ4#Km.E#E9^q)0bpH/wo$'VIdGI.'xZM]Yc8jr3-bnp+7--RViăU"\mBGHSS-gq%=(YT%k;aCSFZCl:nqij0VQ+MjzU,S7XZTM:&CAcB0Y^g2#$8Q4'+ăU"hd>_^<GTq,B]ZxWB4_Cvno4b1>GrRl*hFVGE5m?W]Q*\6h<nqvE3Wn?i=p.70q1ăU"hU>UCjdrkfRzuZY>.&_XsR+4b'Op_1jb==RWOI$=VuA$4:WrhZ6#\ICW%k\V*/DăU"D-^1eOW#y+]]qWE*4P6T,,)ASOaGkw%;7&xBI:ln4<q5:\<;&7m:;jvPLK0W7mgăU"<<ajd0iZZ\:)nTF]'&I_S&y3.Iu5$;jAZSwxobgl,044F56M_?^%pN[h>&+XJ:găU"H.vsejGF$L(yf^?4gT>3M^'RQ9MYRfi76+hInK;PMGAgb^)nvfCInS*/<?9EgLvăU"K]/=nqP]eHA:CT\[vX_Jcw1BLNgS+?Vo;fv=:Sm#iNl<0$mk7g<37&6Fk9.eU_-ăU")c>3.[(h9JpKENF>g.7(_e)k=HsvKa>qDQZ%m<Z<%sgs[s=*fP=\Q3g?l%,uNoXăU"/-GUqf.]^5)&-/'TLfovEp1y8h>xO_kPX9j&&o]VJO>*$rjMk(JbTef?KhO4o82ăU".;o+rS-*E5z$bP%\ExhR(X^b5mSlacCU7LLh#K+\__l+*?UBh#q0D;c[[N.>n0&ăU"5$hZS$]Gfu+3'_wFO)S(eaVK^2'nbDJfR8[%nWp$.Ull=nX^S=b[E8<Z1\:ha>ZăU"Xl5N?k<8oSH^gBL$u]x0pa0lRxn5mR1gEUAB9Fu63u,u]&rI74m>[qneNb9<y>/ăU",wMrHU#k#M69-QK[cM-/#lvgssE8)ORlV0)[hZTYE#u#5H<y?Sm]/sg_VXp8><AăU"n8^qZC%1P#6Uj9[PJ-q%#2'Pi&-9L%1mFUtiAfV]s&a%o9D+d/B[>DGlAI^DWU2ăU"s173b83h7=t3:Qk%X+Y+e-:/wNtq[)p>?=wZ97L;+;3g*KyY)QH_a=^wvW??xafăU"Cl4uAY<HN30FlK$TrAIK+8X_n76pu=;i[jK;f/XnL[[bnr)MN21oeE1PI5*wAkJăU"v/5#*kQhRhg#alE2c(,Y76&)N&]D$^t4iaTZt3MLs7+g9>O7F7Ne./+mr6pNBHZăU"K-5wqhGuij6RbmmhtCA/h<pM(%6wzi3zORDT2,\).KRA2*oX;,v3py=;[jYma7>ăU"qOMN1&q(?)m:I5QV#9pg,)uFY4%eR2whsub:<5Rr=*&evW7gwC4NjA8xQamSb/1ăU"sW%I8N;bahdk.YqAgDE$QzTj:A*P7P#)XWT$wjtVbmMuMC/riUe%:5z<d/>#BEXăU"MfX:t3['zMp^4]:Vx%qz1ts:bh$)(gmXq]8q$8JU5Qhu(Ae^UFH$3X;c.NWVV<-ăU"O/$kD_tbaMY<Mka%K3edr:,jlGikafV8/>=dsP]]Xv8AlG&f\IW76bsA(#K-HpLăU"?Ese4dhm]E<E+3YXwd&0$aya;V6jJiX$5m=p'*waL6k#^'jw'SR;co*UOLJnGpgăU"(=oh+n3>Pxw%1Jt$&WFLD$ZUOp:,FMfkzlpfr8<o(<qUc_nm-(mrbSb\DORzYJLăU"wdTU'a_C**+6+Mn$55Zp&LMr\S#0f)H+_T<sqP4LlpPluYdrr]fZmbfNWb;eABvăU"+,7WEU,xO=77D]tj[Bb*a2L+:?$rekc[SPLMmk8mT?YH]_87qIko0#&by5cJm88ăU"J;c-4c8LoUd3_74tqT:Itg:TMS17P0-:-AvT#u(+*pgz2f>PqNsO:Lc*El\kxJtăU"2$aPCm3X;<.p&[e7PIkqMR-+p:+-k[pbnwuaeFoM_LcYAwuLtXiDW:]M'ogGwJzăU"pNO?Gj7<T>B%b2uE&6'0Zqmym)5KBZSGt<+mI8w.z-LLYJ>9=2Sh7<HUQ?[w\p?ăU"R;<bZu),+;VJZpO1JVINN&;Xt+;shm[85R$KwCkD8],>f[BK'GJkt_e:Mr,z^k:ăU"0vlTtVtlI\0Lno)]3OlTAyo.CIrSPu\agVBkTh^<';Jkqkq^AsB1zX0K_Nxt%)[ăU"e)17[U4mA0KdER-RJi%$3CsK<86Bin0Gie\>As+8t[n5DO:/E^(zOZ^K)Bo?hSbăU"_6k95&o=X^oaZv(^c<RR2g2ZSd/6AU\\4gm.NhQWHo57bDJ[oo7OhOmxTqpPL7făU">[mfK7=CD>Rjm&[ZOJ%lHXW/gnhtJ0$De>uKa4$wC7;w7$tPtt434byvX>R?ziBăU"1t'Tgzb\G9-z4*<h_=XaNad#P^Y&N6D=7i_ShkQ5(0&5+^XPH^HiQIJG%Oe\%gqăU"J?8vyjlLn6FSF&\(/3(]$RrTNmJqGRZ)daZ=h6]#:/QWoS\7Ze\+W=sUbA%bEcIăU"AsE'RIqHHaO5Jr(dj0aMtas)v%a:3SlsG9;RDXB_VyHS<]%i$]xG+DwTJ)7cq']ăU"6BL06s'.ZgzU%F?N?CPsyca9?,5h\Z=&I3%CHqC:Pvm2(^u8iAbO'm(c/.;O%:6ăU"-/To4hhzxYQYXwr\ivba)spvEDNwJAabmmmHW\eNvJ[*1n>8K7#5gw4Il]tPb;-ăU"B3Aocowm7W.Pd8ycu<Z.9&K/;pnb#w,/&1qz\5:e?2s&#1P$)Gj-Qq5>h?#c0zNăU";)=\[,]rptat2AQsqfw%dTYoj\a94n5\%qD,eJ9ncjUYx:5;O;q:P.WZZ)(I<paăU"n3nZYvn$n=9bSlF]3U:f+[8Bj;^?+Rik'T[aZMgayGREglyeGdg[S0f9f;sG_2qăU">*=I%W'NN-WO2t_A%ROU':6J6ViMal6<12$ok(JaKvYIkn&s(Pq.r7Njb-D5&ikăU"+i?q:uW5&sf]XHCmr'Vfgorl]A(6WQl+ub,(M78W*YY^7\0_H[X=QJ+paTOn&1IăU"=gw%9L2:I$R7ttOOCpWUY0RfKbV;<ZqiAhYUX#\r9qF*'tCLiZ8y3OM.AlI/2I&ăU",_sAQ.USlsoP4sj9e+Da(9qi*.7X^R>[Nv?j);&[hN1_Q:;z^?jk7&DiFbMj2/ZăU"]P;d3x(%up()%9%%%I-%+5JICm.&;eq(m%%OA%%%0%%%%fs%nknq%jSngjVfl:/ăU"9809IkLTO;Cl1;P&jNYBY898OD>L?Gtl9#5%\L75FgL<c:xs-HWt28s..=q,n,MăU"A7$IlhE82?tZvjvLrPLt3cd/B-<>lIfZL-QO^vK5hW>Z1llRnMmGMnaI\-?%&4\ăU"939(KrV>>dBaka>^EWDZfl+u(P#LZ$Lth6V(mlBGp(o9r+AM.qk2W:ObJ:C>4TrăU"UB3Mrh[-,(uP#L$lLthXE(mLn\f+ed#2MWY\-kXAAwk>l'BMrkJ:W9blJH+(lP#ăU"b$uLtJtZNlaHn8%-WGOs<rifR-NM$K[-4l-XcBQ=lCjZS_U:on6TQRp8StBPd^uăU"jmrmkMmM^1aI-?a%F\Y2y]1<Tujn&Q:(Z\?ta62TB,dbh^%aTpK\gSRca[A06cmăU"cknW^U$(mlGdp(orX+MJ(qIDv3<7)W*lXM&L9Jp*c_H>JrLUuwck#A=Pj44-(;^ăU"vHLWprpzZ$B$t[&e(S/MpO+d%27t%R&?%pYof0^)7%I>O/X7&o&e(QSw=O#+%2oăU"#&Y%7.%2o&R5#)imcS/8Hxuyv[&Y%S>=9^Z8S+I%/W2'Do7A/VBvk<Fi06;;0l\ăU"S+fI%_pU(ekx0n[x\CFKwi_#H2jgrSUI^%o&S;OvsdWW_UOlN-har7xa7u2a7B'ăU"Q5?%=YY+?$kF#)ei[j5e=_HV3u#v&#e(s:T9w7Ke6c,8ec,^gAj-c<4K3>O$3>SăU"3S>W3>U[HVCuk3r\.s(O+kkOO>QmNJJlU0MvOOqn&7(,prU)NdjPXgjYigjZgVjăU"[gjCr-\lr5=w10L%o&nvZYihTKBUt>usafpDM28>Gq$fXqCXUyCX+PCX3CrX;k3ăU"lb]Dl%4]2%1??)(uObTxu2(cnuZTfbmJek3YXH:.QOFKY8-\nKYIVUfiaDbBrd5ăU",p=JtWCAA?%\-v4%#,M[4*i]F[95hxN%R#cXU&8%aps(Qi>_;g+90,YO2Hlt+pTăU"j+)0%?%r\8O2L%G75&;Ag+eZQ-tBS&7%2%%?%%Y(%O+%%%2%%%?%%Y.%%7%+%I%ăU"%\o&%i'xh(%\7%%I.%%o&%%e(%&O+%%%2%%?m%%Fi%8up(%)9%%#%-%+)5ICTVqăU"K;Z[%%%O'A%%0%%%%f%snkn%qjSnmgWfM%f2%ER1))beU&SEX*kqp\7.KqiJY7HăU"4oG->=&w^%8?%Y%09&O(%%,%3%%A%]^%?%YF%9&O%(%,%%3%A%.]%?%9Y%9&&O(ăU"%,%%3%A#%]%?a%Y%9(&O(%%,%3%%A%]%8?%Y%09&O(%%,%3%%A%]^%?%YF%9&O%ăU"(%,%%3%A%d]%G[%'up(%)9%%#%-%<)?ICNS%2aB%(%%7%,%%/%%%%w%jfir#jSyăU"'(yLyr,BT[5$6:kx\0Lbmduk2DN.,FuO,>])N4Yt'7sXB2(GfIKUEe:Vs=vtgg7ăU"qt?^st0jli)>pBf'Xz##:Y(Dgza_uT:b]LIR:9JFs&DuAYmcKcaRhFViEOnV,maăU"3/'[l-\JlY#^Z-P-Y>m8m5;ihH*OC)(ldx2bCChg%u*QEDI<PGf8v-$g>wPLg-9ăU"c&Dqy]MK&'Wa(D^_B;97A,W1('pFzr<5?qBDgkil%?#u,$Y&aK;_K)/fo0J(duUăU"W^8cCRoZ9T#wQ?0O#]0'SWZlI<9N$aPIrYO8#8g,fPiC20RphB-uwCDkpFfG1j^ăU"Yf&f$Y&?GP:O*E:z98km>rqgP9Us+#_>XZRoWrOR\FxVg*]E%hwXyOESDi1zBGMăU"X>(:_3gR\C92dZ/&<+6,.k+&6n[]<6XK=4SP#O=*R7tVMa59-A[S^1zr8Fc.,e(ăU"#P0#,XzasYZ1K9nDJ84m<?r7T*0_P0E7%3bMJLVWddB:%R1OoX48ji2Fq&AioE1ăU"GTtLZ-q/G&3J1'bZcU9v^C99.EaMzGtZ37wv/7eI4YARqWmusvjAS1,%um7hB?#ăU"e#1L-bpL_o>CG.HJe/<PNEkmPk9Q;iN7]xuLme#NE:r<pEj:\Lbk,-Vm-u.=',^ăU"'qMVrfu[oVk5Mr^uk^xL5TaAS/VE?tB[(W(eDn[;J-pu3smLLINF_(xR-.FrQ\?ăU"aw5Me=;d0L=EWa>HlmA8gBTUc;_\gSgb.<JgP*VDe6=0Iknf78rIWiimTt\KoM.ăU"e$ffbQbTy)3.0>j]()*LNlZC4AozkuVz>G..MRb&iEl=t_9gR$[pyF3Wv4&xAb^ăU"zHt]WD/PddI?A/a_MSVIiz_.-&uf:3Y]hVePPFl92&H<IzQ-WJ;df-X*mn^C\8săU"B\57ru]09(w7<,JG]HMSOCbih*V]Jn.4awHaR&$V+]-vlxV0]0m>FDs)K?Cgu'$ăU"/a'VLajC8T2$5D1&KoQV*arJ4iV,Qh1oL3I$C)LK9bGn[&TW_^#\/Q7/mEzE2<VăU"[%8i+%*UOH,Ss9_-)a/qmkZMM\7BiRINQM):*h1Lp^h[BBTw*WFSoST4tAu]r]^ăU"hvpzfh]&>K^o-zGW?/jUK7VKB>O^*b6U*N&%up&'%9%9%%%%-%2:0ICJzA:o'K3ăU"%%*(=%%%1%%%%%%%%%&%E%%%%%%%%%fs%nrfy%jWSg%fxup%&'9%%9%%%I-%+5JăU"ICm.&;eq(m%%OA%%%0%%%%%%%%%%%%E%%%'u3%%%fsnk%nqjS%ngVu%p&'9%%9%ăU"%#%-%+)5ICTVqK;Z[%%%O'A%%0%%%%%%%%%%%%E%%(%#7%%%fsn%knqj%SngW%uăU"p&'%9%9%%%%-%2<?IC^N%2a&B(%%%7,%%%/%%%%%%%%%&%E%%%%J8%%%wj%firjăU".Sy'y%up*+%%%%%%)%)%']%%%'9;%%%%%ăEND SUBăCLOSE:IF S=204AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSteven Sensarn                 RAY CASTER WITH KEYBOARD ISR   comp.lang.basic.misc           08-17-96 (20:04)       QB, QBasic, PDS        519  20378    RAYCAST.BAS 'Here is a new version (I merely added my keyboard ISR to the last).  Don't beă'afraid to hold down multiple keys! :)ăăDECLARE SUB screensetup ()ăDECLARE SUB makeworld ()ăDECLARE SUB maketables ()ăăăDECLARE SUB SETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăDECLARE SUB GETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăDECLARE SUB KEYBOARD.IN (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ăDECLARE SUB KEYBOARD.OUT (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ăă'$STATICăăCONST NUM.KEYS = 10ăCONST INDEX.UP = 0ăCONST INDEX.DOWN = 1ăCONST INDEX.LEFT = 2ăCONST INDEX.RIGHT = 3ăCONST INDEX.CTRL = 4ăCONST INDEX.ALT = 5ăCONST INDEX.SPACE = 6ăCONST INDEX.ESC = 7ăCONST INDEX.ENTER = 8ăCONST INDEX.RSHIFT = 9ăăDIM SHARED KEY.TABLE(0 TO (NUM.KEYS - 1)) AS INTEGERăDIM SHARED RAWKEY AS INTEGERăDIM SHARED OLD.ISR.SEG AS INTEGER, OLD.ISR.OFF AS INTEGERăăCALL KEYBOARD.IN(OLD.ISR.SEG, OLD.ISR.OFF)ăă' Just a minor change, but it's good for a speed increaseă' of about 30% on my P133. Changed the LINE,BF to draw theă' walls into seperate LINE's.ăă'=======================================================================ă' RAY CASTER 3D sorta ENGINE thingymajigă'=======================================================================ă' Wrote this about a month ago, it's a sort of wolfenstien\doomă' lookalike but all in native QBasic source! Uses an interesting rayă' Cheers, {:o)   Peter Cooperăă' Clean-up by Brent P. Newhallăă' Improvments by Nick Cangiani (nicksxe@gnn.com)ă' Sped up maketables by v Zoelen AA (vsim@xs4all.nl)ă' Minor improvement by Marc vd Dikkenberg (excel@xs4all.nl)ăă' Left arrow  == Move leftă' Right arrow == Move rightă' Up arrow    == Move forwardă' Down arrow  == Move backwardă' [ESC]       == QuităăDIM SHARED st%(0 TO 360)ăDIM SHARED ct%(0 TO 360)ăDIM SHARED a$(1 TO 10)ăDIM SHARED grid(1 TO 12, 1 TO 12)ăpx% = 15: py% = 35: sa% = 0ăPRINT "Please wait...";ăRANDOMIZE TIMERămakeworldămaketablesăscreensetupăm% = 1ăDOă  IF m% = 1 THENă    IF P = 2 THEN PCOPY 2, 0 ELSE PCOPY 3, 0ă    IF P = 2 THEN P = 3 ELSE P = 2ă    m% = 0ă  END IFă  FOR t% = sa% TO sa% + 59 STEP 1ă    xb = st%(t% MOD 360) / 100              'get incă    yb = ct%(t% MOD 360) / 100              'get incă    bx = px%                                'decimal copyă    by = py%                                'decimal copyă    l% = 0                                  'reset lengthă    DOă      bx = bx + xbă      by = by + ybă      l% = l% + 1ă      'k% = ASC(MID$(a$(CINT(by / 10)), CINT(bx / 10), 1)) - 48ă      k% = grid(CINT(by / 10), CINT(bx / 10))ă    LOOP UNTIL k% <> 0ă    'LOCATE 1, 1ă    'PRINT l%;        'this would print the distance to wallă    X% = (t% - sa%) * 5ă    dd% = (1000 / l%)ă    'LINE (X%, 1)-(X% + 5, 99 - dd%), 15, BF          'paint ceilingă    'LINE (X%, 101 + dd%)-(X% + 5, 200), 2, BF        'paint flooră    'LINE (X%, 100 - dd%)-(X% + 5, 100 + dd%), k%, BF 'paint wallsăă    FOR U% = 0 TO 5                                   'paint wallsă       LINE (X% + U%, 100 - dd%)-(X% + U%, 100 + dd%), k%ă    NEXT U%ă    ' Could be even 20% faster: FOR U% = 0 to 4ă    ' This will skip one line at the right of the screen, though.ăă    LINE (X%, 100 - dd%)-(X% + 5, 100 - dd%), 0      'top linesă    LINE (X%, 100 + dd%)-(X% + 5, 100 + dd%), 0      'bottom linesă  NEXT t%ă  PCOPY 0, 1ă  RAWKEY = 0: WHILE RAWKEY = 0: WENDă  IF KEY.TABLE(INDEX.RIGHT) THEN ' [LEFT]ă    sa% = sa% + 3ă    m% = 1ă  END IFă  IF KEY.TABLE(INDEX.LEFT) THEN ' [RIGHT]ă    sa% = (sa% + 357) MOD 360ă    m% = 1ă  END IFă  IF KEY.TABLE(INDEX.ESC) THEN ' [ESC]ă    quit = 1ă  END IFă  IF KEY.TABLE(INDEX.UP) THEN ' [UP]ă    Oldpx% = px%: Oldpy% = py% ' Save where you areă    px% = px% + (st%((sa% + 30) MOD 360) / 30)ă    py% = py% + (ct%((sa% + 30) MOD 360) / 30)ă    IF grid(CINT(py% / 10), CINT(px% / 10)) > 0 THEN 'Walking thru walls?ă      SOUND 80, 1ă      px% = Oldpx% ' Forget it!  Don't moveă      py% = Oldpy%ă    ELSEă      m% = 1ă    END IFă  END IFă    ă  IF KEY.TABLE(INDEX.DOWN) THEN '[DOWN]ă    Oldpx% = px%: Oldpy% = py% ' Save where you areă    px% = px% - (st%((sa% + 30) MOD 360) / 30)ă    py% = py% - (ct%((sa% + 30) MOD 360) / 30)ă    IF grid(CINT(py% / 10), CINT(px% / 10)) > 0 THEN 'Walking thru walls?ă      SOUND 80, 1ă      px% = Oldpx% ' Forget it!  Don't moveă      py% = Oldpy%ă    ELSEă      m% = 1ă    END IFă  END IFăLOOP UNTIL quit > 0ăSCREEN 0ăWIDTH 80, 25ăăăCALL KEYBOARD.OUT(OLD.ISR.SEG, OLD.ISR.OFF)ăăăSYSTEMăă' Level data (this way you can have walls colored 10, 11, etc.)ă' 12x12ăDATA  1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9ăDATA  9, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1ăDATA  1, 0,12, 0, 0, 0, 0, 0, 0,13, 0, 9ăDATA  9, 0, 4, 0, 0, 0, 0, 0, 0, 5, 0, 1ăDATA  1, 0,12, 0, 0, 0, 0, 0, 0,13, 0, 9ăDATA  9, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1ăDATA  1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 9ăDATA  9, 0,12, 0, 0, 0, 0, 0, 0, 0, 0, 1ăDATA  1, 0, 4, 0, 0, 0, 0, 0, 3,11, 0, 9ăDATA  9, 0,12, 0, 0, 0, 0, 0,11, 3, 0, 1ăDATA  1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 9ăDATA  9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1ăă' Old level.  If you want it, come and get it.ă'  1, 9, 1, 9, 1, 9, 1, 9, 1, 9ă'  9, 0, 0, 0, 0, 0, 0, 0, 0, 1ă'  1, 0, 0, 0, 0, 0, 0, 4, 0, 9ă'  9, 0, 1, 0, 0, 0, 5, 0, 0, 1ă'  1, 0, 2, 0, 0, 4, 0, 0, 0, 9ă'  9, 0, 3, 0, 0, 0, 0, 0, 0, 1ă'  1, 0, 0, 0, 0, 7, 8, 0, 0, 9ă'  9, 0, 5, 0, 0, 8, 7, 0, 0, 1ă'  1, 0, 6, 0, 0, 0, 0, 0, 0, 9ă'  9, 1, 9, 1, 9, 1, 9, 1, 9, 1ăăăSUB GETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăă    'GETVECT RETURNS THE ADDRESS OF A FUNCTION POINTED TO IN THEă    'INTERRUPT VECTOR TABLE (STARTS AT 0000:0000H)ăă    STATIC ASM AS STRING 'THE CODE FOR GETVECTăă    STATIC INI AS INTEGER 'USED TO DETECT WHETHER GETVECT HAS PREVIOUSLYă                          'BEEN CALLEDă    IF INI = 0 THENă        ă        'CREATE ML FUNCTION IF NOT ALREADY CREATEDăă        ASM = ASM + CHR$(&H55)                          'PUSH    BPă        ASM = ASM + CHR$(&H89) + CHR$(&HE5)             'MOV     BP,SPă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV     BX,[BP+06]ă        ASM = ASM + CHR$(&H8A) + CHR$(&H7)              'MOV     AL,[BX]ă        ASM = ASM + CHR$(&HB4) + CHR$(&H35)             'MOV     AH,35ă        ASM = ASM + CHR$(&HCD) + CHR$(&H21)             'INT     21ă        ASM = ASM + CHR$(&H53)                          'PUSH    BXă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV     BX,[BP+0A]ă        ASM = ASM + CHR$(&H8C) + CHR$(&H7)              'MOV     [BX],ESă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8) 'MOV     BX,[BP+08]ă        ASM = ASM + CHR$(&H58)                          'POP     AXă        ASM = ASM + CHR$(&H89) + CHR$(&H7)              'MOV     [BX],AXă        ASM = ASM + CHR$(&H5D)                          'POP     BPă        ASM = ASM + CHR$(&HCA) + CHR$(&H6) + CHR$(&H0)  'RETF    0006ă        INI = 1 'FLAG CREATIONă    END IFăă    DEF SEG = VARSEG(ASM)ă    CALL ABSOLUTE(S, O, I, SADD(ASM)) 'RUN FUNCTIONăEND SUBăăSUB KEYBOARD.IN (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ă    DIM RSGL AS INTEGER, RSGH AS INTEGER 'SEGMENT OF RAWKEYă    DIM ROFL AS INTEGER, ROFH AS INTEGER 'OFFSET OF RAWKEYăă    DIM KSGL AS INTEGER, KSGH AS INTEGER 'SEGMENT OF KEY.TABLEă    DIM KOFL AS INTEGER, KOFH AS INTEGER 'OFFSET OF KEY.TABLEă   ă    DIM BYTE AS STRING * 1 'USED TO ACTIVATE IRQ 1 IN PICăă    STATIC ASM AS STRING 'HOLDS ISRăă    RSGL = VARSEG(RAWKEY) AND &HFF 'LOAD LOW "BYTE" SEGMENTă    RSGH = INT(VARSEG(RAWKEY) / 256) AND &HFF 'LOAD HIGH "BYTE" SEGMENTăă    ROFL = VARPTR(RAWKEY) AND &HFF 'LOAD LOW "BYTE" OFFSETă    ROFH = INT(VARPTR(RAWKEY) / 256) AND &HFF 'LOAD HIGH "BYTE" OFFSETă    ă    KSGL = VARSEG(KEY.TABLE(0)) AND &HFF 'LOAD LOW "BYTE" SEGMENTă    KSGH = INT(VARSEG(KEY.TABLE(0)) / 256) AND &HFF 'LOAD HIGH "BYTE" SEGMENTăă    KOFL = VARPTR(KEY.TABLE(0)) AND &HFF 'LOAD LOW "BYTE" OFFSETă    KOFH = INT(VARPTR(KEY.TABLE(0)) / 256) AND &HFF 'LOAD HIGH "BYTE" OFFSETăă    'THIS IS THE ISR.  IT READS A SCANCODE FROM THE KEYBOARD BUFFERă    'AND RESETS IT.  THE BEST PART IS, BIOS CAN'T TOUCH IT!ăă    ASM = ""ă    ASM = ASM + CHR$(&H52)                          'PUSH DXă    ASM = ASM + CHR$(&H51)                          'PUSH CXă    ASM = ASM + CHR$(&H53)                          'PUSH BXă    ASM = ASM + CHR$(&H50)                          'PUSH AXă    ASM = ASM + CHR$(&H6)                           'PUSH ESă    ASM = ASM + CHR$(&H57)                          'PUSH DIă    ASM = ASM + CHR$(&H1E)                          'PUSH DSă    ASM = ASM + CHR$(&H56)                          'PUSH SIă    ASM = ASM + CHR$(&HFB)                          'STIă    ASM = ASM + CHR$(&HBA) + CHR$(&H60) + CHR$(&H0) 'MOV DX,0060ă    ASM = ASM + CHR$(&HEC)                          'IN AL,DXă    ASM = ASM + CHR$(&H30) + CHR$(&HE4)             'XOR AH,AHă    ASM = ASM + CHR$(&HBA) + CHR$(RSGL) + CHR$(RSGH)'MOV DX,SEG RAWKEYă    ASM = ASM + CHR$(&H8E) + CHR$(&HDA)             'MOV DS,DXă    ASM = ASM + CHR$(&HBE) + CHR$(ROFL) + CHR$(ROFH)'MOV SI,OFFSET RAWKEYă    ASM = ASM + CHR$(&H88) + CHR$(&H4)              'MOV [SI],ALă    ASM = ASM + CHR$(&H50)                          'PUSH AXă    ASM = ASM + CHR$(&HBA) + CHR$(&H61) + CHR$(&H0) 'MOV DX,0061ă    ASM = ASM + CHR$(&HEC)                          'IN AL,DXă    ASM = ASM + CHR$(&HC) + CHR$(&H82)              'OR AL,82ă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&H24) + CHR$(&H7F)             'AND AL,7Fă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&HB0) + CHR$(&H20)             'MOV AL,20ă    ASM = ASM + CHR$(&HBA) + CHR$(&H20) + CHR$(&H0) 'MOV DX,0020ă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&HBA) + CHR$(KSGL) + CHR$(KSGH)'MOV DX,SEG KEY.TABLEă    ASM = ASM + CHR$(&H8E) + CHR$(&HDA)             'MOV DS,DXă    ASM = ASM + CHR$(&HBE) + CHR$(KOFL) + CHR$(KOFH)'MOV SI,OFFSET KEY.TABLEă    ASM = ASM + CHR$(&H58)                          'POP AXă    ASM = ASM + CHR$(&HBB) + CHR$(&H1) + CHR$(&H0)  'MOV BX,0001--MAKEă    ASM = ASM + CHR$(&HB4) + CHR$(&H48)             'MOV AH,48--UPă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H0) 'MOV [SI+00],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H50)             'MOV AH,50--DOWNă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H2) 'MOV [SI+02],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H4B)             'MOV AH,4B--LEFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H4) 'MOV [SI+04],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H4D)             'MOV AH,4D--RIGHTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H6) 'MOV [SI+06],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1D)             'MOV AH,1D--CTRLă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H8) 'MOV [SI+08],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H38)             'MOV AH,38--ALTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HA) 'MOV [SI+0A],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H39)             'MOV AH,39--SPACEă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HC) 'MOV [SI+0C],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1)              'MOV AH,01--ESCă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HE) 'MOV [SI+0E],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1C)             'MOV AH,1C--ENTERă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H10)'MOV [SI+10],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H36)             'MOV AH,36--RSHIFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H12)'MOV [SI+12],BXăă    ASM = ASM + CHR$(&HBB) + CHR$(&H0) + CHR$(&H0)  'MOV BX,0000--BREAKă    ASM = ASM + CHR$(&HB4) + CHR$(&HC8)             'MOV AH,C8--UPă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H0) 'MOV [SI+00],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HD0)             'MOV AH,D0--DOWNă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H2) 'MOV [SI+02],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HCB)             'MOV AH,CB--LEFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H4) 'MOV [SI+04],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HCD)             'MOV AH,CD--RIGHTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H6) 'MOV [SI+06],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H9D)             'MOV AH,9D--CTRLă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H8) 'MOV [SI+08],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB8)             'MOV AH,B8--ALTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HA) 'MOV [SI+0A],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB9)             'MOV AH,B9--SPACEă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HC) 'MOV [SI+0C],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H81)             'MOV AH,81--ESCă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZ   ă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HE) 'MOV [SI+0E],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H9C)             'MOV AH,9C--ENTERă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H10)'MOV [SI+10],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB6)             'MOV AH,B6--RSHIFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H12)'MOV [SI+12],BXăă    ASM = ASM + CHR$(&HFA)                          'CLIă    ASM = ASM + CHR$(&H5E)                          'POP SIă    ASM = ASM + CHR$(&H1F)                          'POP DSă    ASM = ASM + CHR$(&H5F)                          'POP DIă    ASM = ASM + CHR$(&H7)                           'POP ESă    ASM = ASM + CHR$(&H58)                          'POP AXă    ASM = ASM + CHR$(&H5B)                          'POP BXă    ASM = ASM + CHR$(&H59)                          'POP CXă    ASM = ASM + CHR$(&H5A)                          'POP DXă    ASM = ASM + CHR$(&HCF)                          'IRETăă    BYTE = CHR$(INP(&H21)) 'LOAD IRQ ENABLE REGISTER IN PICăă    OUT &H21, (ASC(BYTE) AND (255 XOR 2)) 'CLEAR BIT 2 (IRQ 1)ăă    CALL GETVECT(OLDSEG, OLDOFF, &H9) 'LOAD OLD ISRă    CALL SETVECT(VARSEG(ASM), SADD(ASM), &H9) 'STORE NEW ISRăEND SUBăăSUB KEYBOARD.OUT (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ă    CALL SETVECT(OLDSEG, OLDOFF, &H9) 'RESTORE OLD ISRăEND SUBăăSUB maketablesăă' Peters boring _yawn_ table creationăFOR tmp1% = 0 TO 360ă  st%(tmp1%) = SIN(tmp1% * .0174) * 100ă  'IF tmp1% MOD 100 = 0 THEN PRINT ; ".";ă  'NEXT tmp1%ă  'FOR tmp1% = 0 TO 360ă  ct%(tmp1%) = COS(tmp1% * .0174) * 100ă  'IF tmp1% MOD 100 = 0 THEN PRINT ; ".";ăNEXT tmp1%ăăEND SUBăăSUB makeworldăă' Read in this level's dataăFOR j = 1 TO 12ă  FOR I = 1 TO 12ă    READ grid(I, j)ă  NEXT IăNEXT jăă' Peter Coopers demonstration level. Change it if you wish! Each numberă' is a color numberă'a$(1) = "1919191919"ă'a$(2) = "9000000001"ă'a$(3) = "1000000409"ă'a$(4) = "9010005001"ă'a$(5) = "1020040009"ă'a$(6) = "9030000001"ă'a$(7) = "1000078009"ă'a$(8) = "9050087001"ă'a$(9) = "1060000009"ă'a$(10) = "9191919191"ăăEND SUBăăSUB screensetupăăSCREEN 7ăLOCATE 4ăPRINT "     RAYCASTER DEMO"ăPRINTăPRINT "      UP ARROW........Move Forward"ăPRINT "      DOWN ARROW......Move Backward"ăPRINT "      RIGHT ARROW.....Turn Right"ăPRINT "      LEFT ARROW......Turn Left"ăăSCREEN 7, , 2, 0ăăCLSă'WINDOW SCREEN (1, 1)-(320, 200)ăă' SkyăLINE (0, 0)-(300, 99), 3, BFăăFOR cnt = 1 TO 10 ' Cloudsă  a = INT(RND * 319)ă  b = INT(RND * 80 + 10)ă  c = INT(RND * 50)ă  d = INT(RND * 10): d = d / 100ă  CIRCLE (a, b), c, 1, , , d: PAINT (a, b), 1ă  CIRCLE (a, b), c, 15, , , d: PAINT (a, b), 15ăNEXT cntăLINE (301, 0)-(319, 199), 0, BF ' Erase clouds on rightăă' Obeliskă'LINE (200, 20)-(240, 99), 0, BFă'LINE (201, 21)-(239, 98), 8, BFăăLINE (200, 20)-(220, 15), 8 ' Building (gray)ăLINE (220, 15)-(240, 20), 8ăLINE (200, 20)-(200, 99), 8ăLINE (240, 20)-(240, 99), 8ăLINE (200, 99)-(240, 99), 8ăPAINT (220, 50), 8ăFOR cnt = 1 TO 20 ' Lightsă  PSET (INT(RND * 38 + 201), INT(RND * 80 + 20)), 14ăNEXT cntăLINE (200, 20)-(220, 15), 0 ' Building (border)ăLINE (220, 15)-(240, 20), 0ăLINE (219, 15)-(219, 99), 0ăLINE (200, 20)-(200, 99), 0ăLINE (240, 20)-(240, 99), 0ăă' SunăCIRCLE (50, 30), 10, 14: PAINT (50, 30), 14, 14ăăPCOPY 2, 3ăăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 300ă    IF RND > .5 THEN c% = 6 ELSE c% = 0ă    PSET (X%, Y%), c%ă  NEXT X%ăNEXT Y%ăăSCREEN 7, , 3, 0ăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 300ă    IF RND > .5 THEN c% = 6 ELSE c% = 0ă    PSET (X%, Y%), c%ă  NEXT X%ăNEXT Y%ăăSCREEN 7, , 0, 1ăăEND SUBăăSUB SETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăă    'SETVECT CHANGES THE ADDRESSES IN THE INTERRUPT VECTOR TABLEă    'TO POINT TO NEW FUNCTIONSăă    STATIC ASM AS STRING 'HOLDS THE SETVECT FUNCTIONă    STATIC INI AS INTEGER 'USED TO TEST WHETHER OR NOT FUNCTION HAS PREVOUSLYă                          'BEEN CALLEDă    IF INI = 0 THENăă        'CREATE FUNCTION IF NOT ALREADY CREATEDăă        ASM = ""ă        ASM = ASM + CHR$(&H55)                          'PUSH BPă        ASM = ASM + CHR$(&H89) + CHR$(&HE5)             'MOV BP,SPă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8) 'MOV BX,[BP+08]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H17)             'MOV DX,[BX]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV BX,[BP+06]ă        ASM = ASM + CHR$(&H8A) + CHR$(&H7)              'MOV AL,[BX]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV BX,[BP+0A]ă        ASM = ASM + CHR$(&H1E)                          'PUSH DSă        ASM = ASM + CHR$(&H8E) + CHR$(&H1F)             'MOV DS,[BX]ă        ASM = ASM + CHR$(&HB4) + CHR$(&H25)             'MOV AH,25ă        ASM = ASM + CHR$(&HCD) + CHR$(&H21)             'INT 21ă        ASM = ASM + CHR$(&H1F)                          'POP DSă        ASM = ASM + CHR$(&H5D)                          'POP BPă        ASM = ASM + CHR$(&HCA) + CHR$(&H6) + CHR$(&H0)  'RETF 0006ă        INI = 1 'FLAG CREATIONă    END IFă    DEF SEG = VARSEG(ASM)ă    CALL ABSOLUTE(S, O, I, SADD(ASM)) 'RUN SETVECTăEND SUBăThomas Gohel                   HIGHSPEED RAYCASTING FOR PB    comp.lang.basic.misc           08-18-96 (00:00)       PB32                   519  14638    RAYCAST.BAS 'TWO Part Snippet (RAYCAST.BAS and RAYCAST.DAT to follow)  [Requires UUDECODE]ăă'*************************************************************************ă'ă' Raycasting routines for PowerBASIC 3.2ă'ă' developed by Wolfgang Bruskeă' new SCREEN 13 routines by Thomas Gohelă'ă'*************************************************************************ăăă$COMPILE EXEăDEFINT A-ZăăMinAbstand  =  48ăWinkel0   =  0ăWinkel1   =  5ăWinkel2   =  10ăWinkel4   =  20ăWinkel5   =  25ăWinkel6   =  30ăWinkel15  =  80ăWinkel30  =  160ăWinkel45  =  240ăWinkel60  =  320ăWinkel90  =  480ăWinkel135 =  720ăWinkel180 =  960ăWinkel225 =  1200ăWinkel270 =  1440ăWinkel315 =  1680ăWinkel360 =  1920ăWeltReihe =   16ăWeltSpalte = 16ăZellXgroesse =  64ăZellYgroesse =  64ăăDIM WeltXgroesse(WeltSpalte * ZellXgroesse) as integerăDIM WeltYgroesse(WeltReihe * ZellYgroesse) as integerăDIM Welt(WeltReihe,WeltSpalte) as integerăDIM Tantable(1920) as singleăDIM Invtantable(1920) as singleăDIM Ystep(1920) as singleăDIM Xstep(1920) as singleăDIM Costable(1920) as singleăDIM Invcostable(1920) as singleăDIM Invsintable(1920) as singleăDIM Vptr as byte PtrăDIM Maxx as integerăDIM Maxy as integerăMaxx=(WeltSpalte * ZellXgroesse)-1ăMaxy=(WeltReihe * ZellYgroesse)-1ăăSHARED MinAbstand,Winkel0,Winkel1,Winkel2,Winkel4,Winkel5,Winkel6ăSHARED Winkel15,Winkel30,Winkel45,Winkel60,Winkel90,Winkel135,Winkel180,Winkel225,Winkel270ăSHARED Winkel315,Winkel360,WeltReihe,WeltSpalte,ZellXgroesse,ZellYgroesse,WeltXgroesse()ăSHARED WeltYgroesse(),Welt(),tantable(),invtantable(),Ystep(),Xstep()ăSHARED costable(),invcostable(),invsintable(),Sichtwinkel,Vptr,maxx,maxyăă' F U N C T I O N S *******************************************************'ăăSUB Tabellenbauen()ăDIM Winkl as integerăDIM radWinkel as extăăFOR Winkl = Winkel0  to Winkel360ă    radWinkel = 3.272e-4 + Winkl * 3.27249234791667e-3ă    tantable(Winkl)     = tan(radWinkel)ă    invtantable(Winkl) = 1/tantable(Winkl)ăă    IF Winkl >= Winkel0 and Winkl < Winkel180 THENă      Ystep(Winkl) = abs(tantable(Winkl) * ZellYgroesse)ă    Elseă      Ystep(Winkl) =-abs(tantable(Winkl)* ZellYgroesse)ă    END IFăă    IF Winkl >= Winkel90 and Winkl < Winkel270 THENă       Xstep(Winkl) =-abs(invtantable(Winkl) * ZellXgroesse)ă    Elseă       Xstep(Winkl) = abs(invtantable(Winkl)  * ZellXgroesse)ă    END IFăă    invcostable(Winkl) = 1/cos(radWinkel)ă    invsintable(Winkl) = 1/sin(radWinkel)ăăNext WinklăăFOR Winkl = -Winkel30 to Winkel30ă    radWinkel = 3.272e-4 + Winkl * 3.27249234791667e-3ă    costable(Winkl + Winkel30) = 1/cos(radWinkel)*10000ăNext WinklăăEND SUBăă'***************************************************************************'ăăSUB LoadWelt(dateiname$)ăăDIM index as integerăDIM row as integerăDIM column as integerăDIM buffer as StringăDIM ch as StringăOPEN Dateiname$ FOR input as #1ăFOR Row = WeltReihe to 0 step -1ă    line input #1, bufferă    FOR column = 0 to WeltSpalteă        Welt(column,row) = Val(mid$(buffer,column+1,1))ă    Next columnăNext rowăClose #1ăEND SUBăă'***************************************************************************'ăăSUB RayCaster(x as long ,y as long)ăăDIM Oben  as singleăDIM Unten as singleăDIM Zellx as longăDIM Zelly as longăDIM Senke as longăDIM Waage as longăDIM ray as longăDIM xaufWaage as SingleăDIM yaufSenke as SingleăDIM distzuWaage as SingleăDIM distzuSenke as SingleăDIM Skalier as Singleăăresett=SichtwinkelăSichtwinkel=Sichtwinkel-Winkel30ăIF Sichtwinkel < 0 THEN  Sichtwinkel=Winkel360 + SichtwinkelăătempWaage= int(y/ZellYgroesse) * ZellYgroesseătempWaage1= int(y/ZellYgroesse) * ZellYgroesse+ZellYgroesseătempSenke= int(x/ZellXgroesse) * ZellXgroesseătempSenke1= int(x/ZellXgroesse) * ZellXgroesse + ZellXgroesseăădiffzuWaage=tempWaage-yădiffzuSenke=tempSenke-xădiffzuWaage1=tempWaage1-yădiffzuSenke1=tempSenke1-xăăFOR ray = 0 to 319ăă    IF Sichtwinkel < Winkel180 THENă       Waage = tempWaage1ă       xaufWaage = invtantable(Sichtwinkel) * diffzuWaage1 + xă       NexteWaage=ZellYgroesseă       Nexty=0ă    elseă       Waage = tempWaageă       xaufWaage = invtantable(Sichtwinkel) * diffzuWaage + xă       NexteWaage=-ZellYgroesseă       Nexty=-1ă    END IFăă   IF Sichtwinkel < Winkel90 or Sichtwinkel >= Winkel270 THENă       Senke = tempSenke1ă       yaufSenke = tantable(Sichtwinkel) * diffzuSenke1 + yă       NexteSenke=ZellXgroesseă       Nextx=0ă    elseă       Senke = tempSenkeă       yaufSenke = tantable(Sichtwinkel) * diffzuSenke + yă       NexteSenke=-ZellXgroesseă       Nextx=-1ă    END IFăăă    WHILE  1ăă            IF xaufWaage > maxx or xaufWaage < 0 THENă               distzuWaage = 1e+8ă               exit loopă            END IFăă             Zellx = int(xaufWaage/ZellXgroesse)ă             Zelly = int(Waage/ZellYgroesse) + Nextyăă            IF Welt(Zellx,Zelly) <> 0 THENă               distzuWaage=(xaufWaage-x)*invcostable(Sichtwinkel)ă               exit loopă            END IFăă            xaufWaage = xaufWaage + Xstep(Sichtwinkel)ă            Waage = Waage + NexteWaageă    WENDăăă    WHILE  2ăă            IF yaufSenke > maxy or yaufSenke < 0 THENă               distzuSenke = 1e+8ă               exit loopă            END IFăă            Zellx = int(Senke/ZellYgroesse) + Nextxă            Zelly = int(yaufSenke/ZellYgroesse)ăă            IF Welt(Zellx,Zelly) <> 0 THENă               distzuSenke=(yaufSenke-y)* invsintable(Sichtwinkel)ă               exit loopă            END IFăă            yaufSenke = yaufSenke + Ystep(Sichtwinkel)ă            Senke = Senke + NexteSenkeă    WENDăăă    IF distzuWaage < distzuSenke THENăă      Skalier = costable(ray) / distzuWaageă       Oben = 90 - Skalier/2ă       IF Oben < 20 THEN Oben = 20ă       Unten = 90 + Skalier/2ă       IF Unten > 180 THEN Unten=180ăă       IF int(xaufWaage) MOD ZellYgroesse =< 1 THENă          colorr = 15ă       elseă          colorr=10ă       END IFă       Linie ray,20,ray,Oben ,160ă       Linie ray,Oben ,ray,Unten,colorră       Linie ray,Unten,ray,180,215ă    elseă       Skalier = costable(ray) / distzuSenkeă       Oben = 90 - Skalier/2ă       IF Oben < 20 THEN Oben = 20ă       Unten = 90 + Skalier/2ă       IF Unten > 180 THEN  Unten = 180ă       IF int(yaufSenke) MOD ZellXgroesse = < 1 THENă          colorr=15ă       elseă          colorr=2ă       END IFă       Linie ray,20,ray,Oben,160ă       Linie ray,Oben,ray,Unten,colorră       Linie ray,Unten,ray,180,215ă    END IFăăă    INCR Sichtwinkelă    IF Sichtwinkel >= Winkel360 THENă        Sichtwinkel=0ă    END IFăNext rayăăSichtwinkel=resettăEND SUBăă' M A I N *****************************************************************'ăăDIM x as longăDIM y as longăDIM xZell as longăDIM yZell as longăDIM xsubZell as longăDIM ysubZell as longăăDIM dx as singleăDIM dy as singleăăModus13ăWriteScrn  1, 1, 11, "Raycasting Engine by Wolfgang Bruske"ăWriteScrn  2, 1, 14, "SCREEN 13 Routines by Thomas Gohel"ăWriteScrn 24, 1, 14, CHR$(24,25,26,27) + " oder 2, 4, 6, 8"ăăCALL Tabellenbauen()ăCALL LoadWelt("raycast.dat")ăcolorr=15ăăx=9*64+32ăy=9*64+32ăSichtwinkel=Winkel6ăăCALL  RayCaster(x,y)ăăWHILE  done = 0ă     kbhit=ascii(inkey$)ă     IF kbhit > 0 THENă        Taste$=chr$(kbhit)ă        kbhit = 0ă        dx=0ă        dy=0ă        select case Taste$ăă               case "4"ă                      DECR  Sichtwinkel,Winkel6ă                      IF Sichtwinkel < Winkel0 THEN  Sichtwinkel=Winkel360+Sichtwinkelă               case "6"ă                       INCR Sichtwinkel,Winkel6ă                       IF Sichtwinkel > Winkel360 THEN  Sichtwinkel =Sichtwinkel-Winkel360ă               case "8"ă                       dx=cos(6.28*Sichtwinkel/Winkel360)*10ă                       dy=sin(6.28*Sichtwinkel/Winkel360)*10ă               case "2"ă                       dx=-cos(6.28*Sichtwinkel/Winkel360)*10ă                       dy=-sin(6.28*Sichtwinkel/Winkel360)*10ăă               case "q", CHR$(27)ă                       Modus3ă                       ENDă            end selectă        x=x+dxă        y=y+dyăă        xZell = int(x/ZellXgroesse)ă        yZell = int(y/ZellYgroesse)ă        xsubZell = x MOD ZellXgroesseă        ysubZell = y MOD ZellYgroesseăă        IF dx > 0 THENă           IF Welt(xZell+1,yZell) <> 0 and xsubZell > (ZellXgroesse-MinAbstand) THENă                x = x -(xsubZell-(ZellXgroesse-MinAbstand))ă           END IFă        elseă           IF Welt(xZell-1,yZell) <> 0 and xsubZell < MinAbstand THENă                x = x + (MinAbstand-xsubZell)ă           END IFă         END IFăă        IF dy > 0  THENă           IF Welt(xZell,(yZell+1)) <> 0 and ysubZell > (ZellYgroesse-MinAbstand ) THENă                y = y -(ysubZell-(ZellYgroesse-MinAbstand ))ă           END IFă        elseă           IF Welt(xZell,(yZell-1)) <> 0 and ysubZell < MinAbstand THENă                y = y + (MinAbstand-ysubZell)ă           END IFă        END IFă        CALL  RayCaster(x,y)ă   END IFăWENDăăSUB Modus13ă        ! mov  al, &h13ă        ! mov  ah, 0ă        ! int  &h10ăEND SUBăăSUB Modus3ă        ! mov  al, &h03ă        ! mov  ah, 0ă        ! int  &h10ăEND SUBăăSUB Linie(BYVAL x1%, BYVAL y1%, BYVAL x2%, BYVAL y2%, BYVAL Farbe%) publică         LOCAL s1%, s2%, s3%, s4%ă         ! push esă         ! push diă         ! mov  ax, &ha000      ;' nur einmal VideoSegment setzenă         ! mov  es, axă         ! mov  ax, x2%         ;' Differenz x2% - x1% nach axă         ! sub  ax, x1%ă         ! jns  Linie1ă         ! neg  ax              ; VorzeichentauschăLinie1:ă         ! mov  bx, y2%         ; Differenz von y2% - y1% nach bxă         ! sub  bx, y1%ă         ! jns  Linie2ă         ! neg  bx              ; VorzeichentauschăLinie2:ă         ! cmp  ax, bx          ; Steigung <= 1 ?ă         ! jge  Linie3A         ; Jaă         ! jmp  Linie20         ; NeinăLinie3A:ă         ! mov  cx, x1%         ; Ist x1% <= x2% ?ă         ! cmp  cx, x2%ă         ! jg   Linie4ă         ! mov  cx, 1           ; X steigtă         ! jmp  Linie5ăLinie4:ă         ! mov  cx, -1          ; X fälltăLinie5:ă         ! mov  dx, y1%         ; ist y1% <= y2%ă         ! cmp  dx, y2%ă         ! jg   Linie6ă         ! mov  dx, 1           ; Y steigtă         ! jmp  Linie7ăLinie6:ă         ! mov  dx, -1          ; Y fälltăLinie7:ă         ! mov  s1%, cx         ; Steigung auf dem Stack speichernă         ! mov  s2%, dxă         ! add  bx, bx          ; Steigung berechnenă         ! mov  s3%, bxă         ! sub  bx, axă         ! mov  cx, bxă         ! sub  cx, axă         ! mov  s4%, cxă         ! mov  cx, x1%ă         ! mov  dx, y1%ă         ! call SetPunktăLinie8:ă         ! cmp  cx, x2%         ; Weitere Punkte?ă         ! jz   Linie3ă         ! add  cx, s1%         ; X-Koordinate erhöhenă         ! or   bx, bx          ; Entscheiden, ob Y-Koordinate erhöhtă         ! jns  Linie10         ; wirdă         ! add  bx, s3%ă         ! jmp  Linie11ăLinie10:ă         ! add  bx, s4%         ; Nächsten Punkt ausgebenă         ! add  dx, s2%ăLinie11:ă         ! call Setpunktă         ! jmp Linie8ăLinie20:ăă';----------------------------------------------------------ă'; Dieser Teil wird durchlaufen, wenn die Steigung > 1 istă';----------------------------------------------------------ăă         ! mov  cx, y1%         ; Steigung ist > 1ă         ! cmp  cx, y2%         ; Ist y1% <= y2% ?ă         ! jg   Linie12ă         ! mov  cx,1            ; Y steigtă         ! jmp  Linie13ăLinie12:ă         ! mov  cx, -1          ; Y fälltăLinie13:ă         ! mov  dx, x1%         ; ist x1% <= x2% ?ă         ! cmp  dx, x2%ă         ! jg   Linie14ă         ! mov  dx, 1           ; X steigtă         ! jmp  Linie15ăLinie14:ă         ! mov  dx, -1          ; X fälltăLinie15:ă         ! mov  s1%, cx         ; Steigung auf dem Stack speichernă         ! mov  s2%, dxă         ! add  ax, ax          ; Steigung berechnenă         ! mov  s3%, axă         ! sub  ax, bxă         ! mov  cx, axă         ! sub  cx, bxă         ! mov  s4%, cxă         ! mov  bx, axă         ! mov  cx, x1%ă         ! mov  dx, y1%ă         ! call SetPunktăLinie16:ă         ! cmp  dx, y2%         ; Weitere Punkte ausgeben?ă         ! jz   Linie3ă         ! add  dx, s1%ă         ! or   bx, bxă         ! jns  Linie18ă         ! add  bx, s3%ă         ! jmp  Linie19ăLinie18:ă         ! add bx, s4%ă         ! add cx, s2%ăLinie19:ă         ! call SetPunktă         ! jmp  Linie16ăLinie3:ă         ! jmp EndeăSetPunkt:ă         ! mov  di, dxă         ! push bxă         ! mov  bx, dxă         ! mov  ax, 320ă         ! mul  bxă         ! mov  bx, cxă         ! add  bx, axă         ! mov  al, Farbe%ă         ! mov  es:[bx], ală         ! pop  bxă         ! mov  dx, diă         ! retnăEnde:ă         ! pop diă         ! pop esăEND SUBăăSUB WriteScrn (BYVAL Zeile?, BYVAL Spalte?, BYVAL Farbe%, BYVAL Text$)ă        ' PowerBASIC 3.0 kompatibel, Shit Err244 Bug :-(ă        LOCAL TextSeg??, TextOff??, TextLen??ă        TextSeg??   = STRSEG(Text$)ă        TextOff??   = STRPTR(Text$)ă        TextLen??   = LEN(Text$)ă        ! push bpă        ! dec Zeile?ă        ! dec Spalte?ă        ! mov ax, &h1301ă        ! mov bl, Farbe%ă        ! mov bh, 0ă        ! mov cx, TextLen??ă        ! mov dh, Zeile?ă        ! mov dl, Spalte?ă        ! mov es, TextSeg??ă        ! mov bp, TextOff??ă        ! int &h10ă        ! pop bpăEND SUBă--- Cut End -------------------------------------------------------------ăăDAT-file:ăă--- Cut ----------------------------------------------------------------ăsection 1 of uuencode 5.20 of file raycast.dat    by R.E.M.ăăbegin 644 raycast.datăM,3$Q,3$Q,3$Q,3$Q,3$Q,0T*,2`@("`@("`@("`@("`@,0T*,2`Q(#$@,2`QăM(#$@,2`Q,0T*,2`@("`@("`@("`@("`@,0T*,3$Q(#$Q,3$Q,3$Q("`@,0T*ăM,2`@("`@,2`@("`Q("`@,0T*,2`@("`@,2`@("`Q("`@,0T*,3$Q,3$Q,2`@ăM("`Q("`@,0T*,2`@("`@,3$Q(#$Q("`@,0T*,2`@("`@("`@("`Q("`@,0T*ăM,2`@("`@("`@("`Q("`@,0T*,2`Q,3$Q,3$Q,3$Q,3$@,0T*,2`Q("`@("`@ăM("`@("`@,0T*,2`Q("`@("`@(#$@("`@,0T*,2`@("`@("`@(#$@("`@,0T*ăH,3$Q,3$Q,3$Q,3$Q,3$Q,0T*#0H-"@T*#0H-"@T*#0H-"@T*#0H-"@H-ă`ăendăsum -r/size 2742/458 section (from "begin" to "end")ăsum -r/size 47403/310 entire input fileă--- Cut End -------------------------------------------------------------ăAndrew L. Ayers                BURNING TEXT                   andrewa@indirect.com           07-24-96 (00:00)       QB, QBasic, PDS        59   1675     FIREPRN.BAS ' Description : FirePrint! - Custom text print subroutine foră'               VGA Mode 13ă' Written by  : Andrew L. Ayersă' Date        : 07/24/96ă'ă' This little routine allows you to place a "burning" textă' string on the mode 13 screen. This routine was based onă' a routine by Martin Lindhe. Both are essentially the same,ă' though this one is cleaner. Remember, the better the machine,ă' the better the effect. Also, smaller strings will look better.ă'ă' You may use this routine in any manner you like, as longă' as you give Mr. Lindhe and myself credit in an appropriateă' manner.ă'ă' I wish to thank Martin Lindhe for providing the inspirationă' to do this routine.ă'ăDECLARE SUB FirePrint (h%, v%, a$, tilt%)ă'ăSCREEN 13ă'ă' Set up an all "red" paletteă'ăFOR t = 0 TO 63: PALETTE t, t: NEXT tă'ă' Call the routine once for a simple "flame" effect,ă' or over and over (as done here) for a great "burning"ă' effect! Use uppercase for best effect.ă'ăDOă  CALL FirePrint(18, 12, "FIRE!", 0)ăLOOP UNTIL INKEY$ <> ""ăăSUB FirePrint (h%, v%, a$, tilt%)ă  'ă  ' Print the string in bright "red"ă  'ă  COLOR 63: LOCATE v%, h%: PRINT a$ă  'ă  ' Set up start and end locations for the burnă  'ă  sx% = (h% * 8) - 8: ex% = ((h% + LEN(a$)) * 8) - 8ă  sy% = (v% * 8) - 16: ey% = (v% * 8) - 8ă  'ă  FOR y% = sy% TO ey%ă    FOR x% = sx% TO ex%ă      'ă      ' Take the current color, subtract a random amount foră      ' red flame "fade", and plot the new pointă      'ă      col% = POINT(x%, y%) - RND * 25: IF col% < 0 THEN col% = 0ă      'ă      PSET (x% + tilt%, y% - 1), col%ă      'ă    NEXT x%ă  NEXT y%ă  'ăEND SUBăAndrew L. Ayers                STEEL PRINT                    andrewa@indirect.com           08-01-96 (00:00)       QB, QBasic, PDS        39   1022     STEELPRN.BAS' Description : SteelPrint! - Custom text print subroutine foră'               VGA Mode 13ă' Written by  : Andrew L. Ayersă' Date        : 08/01/96ă'ă' This little routine allows you to place a "steel-like" textă' string on the mode 13 screen.ă'ă' You may use this routine in any manner you like, as longă' as you give credit in an appropriate manner.ă'ăDECLARE SUB SteelPrint (x%, y%, text$)ă'ăSCREEN 13ă'ăCALL SteelPrint(5, 12, "SteelPrint! by Andrew L. Ayers")ă'ăDO: LOOP UNTIL INKEY$ <> ""ăăSUB SteelPrint (x%, y%, text$)ă  'ă  starty% = (y% * 8) - 4ă  endy% = (y% * 8) - 9ă  startx% = ((x% - 1) * 8)ă  endx% = ((x% - 1) * 8) + (LEN(text$) * 8)ă  colr% = 32ă  'ă  COLOR 15: LOCATE y%, x%: PRINT text$ă  'ă  FOR y1% = starty% TO endy% STEP -1ă    y2% = (starty% - 1) + ((starty% - 1) - y1%)ă    FOR x% = startx% TO endx%ă      IF POINT(x%, y1%) THEN PSET (x%, y1%), colr%ă      IF POINT(x%, y2%) THEN PSET (x%, y2%), colr%ă    NEXT x%ă    colr% = colr% - 2ă  NEXT y1%ă  'ăEND SUBăAndrew L. Ayers                PSYCHO PRINT                   andrewa@indirect.com           08-13-96 (00:00)       QB, QBasic, PDS        120  3497     PSYCHO.BAS  ' Description : PsychoPrint! - Custom text print subroutine foră'               VGA Mode 13ă' Written by  : Andrew L. Ayersă' Date        : 08/13/96ă'ă' What can I say? I can't seem to get enough of custom text!ă' Well, anyhow - this routine needs to be played with. It allowsă' you to create text that flashes (techno/house/rave style),ă' text that fades away, dot by dot, and random snow text (certaină' combos of which look like flowing puke), and even rainbow flashă' text. Give it a shot!ă'ă' BTW: You may use this routine in any manner you like, as longă'      as you give credit in an appropriate manner.ă'ăDECLARE SUB PsychoPrint (x%, y%, strg$, fclr%, bclr%, range1%, range2%, factor%, special%)ă'ăSCREEN 13ă'ăDOă  'ă  special% = 1ă  'ă  CALL PsychoPrint(6, 12, "PsychoPrint! by Andrew Ayers", 3, 0, 0, 15, 4, special%)ă  'ăLOOP UNTIL special% = 999 OR INKEY$ <> ""ăăSUB PsychoPrint (x%, y%, strg$, fclr%, bclr%, range1%, range2%, factor%, special%)ă  'ă  STATIC FirstTime AS INTEGERă  STATIC colr AS INTEGERă  'ă  IF strg$ = "" THEN FirstTime% = 0: EXIT SUBă  'ă  xpos% = x% * 8 - 8: ypos% = y% * 8 - 8ă  xend% = xpos% + (LEN(strg$) * 8): yend% = ypos% + 8ă  'ă  IF FirstTime% = 0 THENă    COLOR 255: LOCATE y%, x%: PRINT strg$: FirstTime% = 1ă    COLOR 15ă    colr% = fclr%ă    FOR y% = ypos% TO yend%ă      FOR x% = xpos% TO xend%ă        IF POINT(x%, y%) <> 255 THENă          PSET (x%, y%), bclr%ă        ELSEă          PSET (x%, y%), fclr%ă        END IFă      NEXT x%ă    NEXT y%ă  END IFă  'ă  '***********************************************************ă  'ă  flag% = 999ă  'ă  FOR y% = ypos% TO yend%ă    FOR x% = xpos% TO xend%ă      IF POINT(x%, y%) <> bclr% THENă        flag% = 0ă        PSET (x%, y%), colr%ă        'ă        SELECT CASE special%ă          CASE 3 ' Regular Fadeă            IF INT(RND * 2) = 1 THENă              colr% = bclr%ă            ELSEă              colr% = fclr%ă            END IFă          CASE 4 ' Psycho Snowă            colr% = INT(RND * factor%)ă            IF colr% = bclr% THEN colr% = colr% + 1ă          CASE 5 ' Psycho Snow Fadeă            colr% = INT(RND * factor%)ă        END SELECTă        'ă      END IFă      'ă      SELECT CASE special%ă        CASE 1 ' Psycho Cycleă          colr% = colr% + factor%ă          IF colr% = bclr% THEN colr% = colr% + 1ă          IF colr% >= range2% THEN colr% = range1%ă          IF colr% = bclr% THEN colr% = colr% + 1ă        CASE 2 ' Psycho Fadeă          colr% = colr% + 1ă          IF colr% > range2% THEN colr% = range1%ă      END SELECTă      'ă    NEXT x%ă    'ă    SELECT CASE special%ă      CASE 6 ' Psycho Rainbowă        colr% = colr% + factor%ă        IF colr% = bclr% THEN colr% = colr% + 1ă        IF colr% >= range2% THEN colr% = range1%ă        IF colr% = bclr% THEN colr% = colr% + 1ă      CASE 7 ' Psycho Rainbow Fadeă        colr% = colr% + 1ă        IF colr% > range2% THEN colr% = range1%ă      CASE 8 ' Regular Line Fadeă        IF INT(RND * 2) = 1 THENă          colr% = bclr%ă        ELSEă          colr% = fclr%ă        END IFă      CASE 9 ' Psycho Line Snowă        colr% = INT(RND * factor%)ă        IF colr% = bclr% THEN colr% = colr% + 1ă      CASE 10 ' Psycho Line Snow Fadeă        colr% = INT(RND * factor%)ă    END SELECTă    'ă  NEXT y%ă  'ă  FOR dlay = 1 TO 10000: NEXT dlay' Adjust this to your computeră  'ă  special% = flag%ă  'ăEND SUBăAndrew L. Ayers                FAST VGA SCROLL                andrewa@indirect.com           08-02-96 (00:00)       QB, QBasic, PDS        88   3093     FASTSCRL.BAS' Description : FastScroll! - VGA Mode 13 Scrolling Routineă' Written by  : Andrew L. Ayersă' Date        : 08/02/96ă'ă' This little routine allows you to scroll the ENTIRE mode 13ă' screen ANY number of pixels up, down, left and right. It usesă' GET/PUT to accomplish this, but the GET/PUT is tiled aroundă' the screen, so that the buffer used only needs to be aboută' 1000 bytes! When you use this routine, don't pass in bothă' x and y offsets at one time (don't try to go diagonal) - theă' program will bomb. Pass one, then the other to move diagonally.ă' I know this isn't the best way (jumps a bit), but it does work.ă' I made this routine for a game, and I only needed the foură' cardinal directions. When scrolling, be aware of the fact thată' if any graphics are on the edges of the scroll region (one pixelă' "in" if offset is 1, two if offset is 2, 4 if offset is four,ă'  etc.), when the scroll is performed, "droppings" will be leftă' and will need to be cleaned up. I know I could have did thisă' myself, but I felt that some people may have wanted droppingsă' left (I don't know why...), so I left it like it is.ă'ă' You may use this routine in any manner you like, as longă' as you give credit in an appropriate manner. Have phun!ă'ăDECLARE SUB FastScroll (XSpeed%, YSpeed%)ă'ăSCREEN 13ă'ă' Set up a Demo Graphică'ăFOR T% = 0 TO 500ă  X1% = INT(RND * 260) + 10ă  Y1% = INT(RND * 140) + 10ă  X2% = INT(RND * 260) + 10ă  Y2% = INT(RND * 140) + 10ă  C% = INT(RND * 16)ă  LINE (X1%, Y1%)-(X2%, Y2%), C%ăNEXT T%ă'ăLOCATE 11, 4: PRINT "FastScroll! by Andrew L. Ayers"ă'ă' Show off scrolling!ă'ăcount% = 0: x% = 1: y% = 0ă'ăDOă  count% = count% + 1ă  IF count% = 10 THEN x% = 0: y% = 1ă  IF count% = 20 THEN x% = -1: y% = 0ă  IF count% = 30 THEN x% = 0: y% = -1ă  IF count% = 40 THEN x% = 1: y% = 0: count% = 0ă  'ă  CALL FastScroll(x% * 4, y% * 4)ăLOOP UNTIL INKEY$ <> ""ăăSUB FastScroll (XSpeed%, YSpeed%)ă  'ă  DIM Temp%(502)ă  'ă  XStep% = 40: YStep% = 25ă  'ă  IF XSpeed% < 0 OR YSpeed% < 0 THENă    FOR y% = 0 TO 199 STEP YStep%ă      FOR x% = 0 TO 319 STEP XStep%ă        IF (XSpeed% <> 0 AND x% = 0) OR (YSpeed% <> 0 AND y% = 0) THENă          GET (x% - XSpeed%, y% - YSpeed%)-(x% + XStep% - 1, y% + YStep% - 1), Temp%ă          PUT (x%, y%), Temp%, PSETă        ELSEă          GET (x%, y%)-(x% + XStep% - 1, y% + YStep% - 1), Temp%ă          PUT (x% + XSpeed%, y% + YSpeed%), Temp%, PSETă        END IFă      NEXT x%ă    NEXT y%ă  ELSEă    FOR y% = 199 TO 0 STEP -YStep%ă      FOR x% = 319 TO 0 STEP -XStep%ă        IF (XSpeed% <> 0 AND x% = 319) OR (YSpeed% <> 0 AND y% = 199) THENă          GET (x% - (XStep% - 1), y% - (YStep% - 1))-(x% - XSpeed%, y% - YSpeed%), Temp%ă          PUT (x% - (XStep% - 1) + XSpeed%, y% - (YStep% - 1) + YSpeed%), Temp%, PSETă        ELSEă          GET (x% - (XStep% - 1), y% - (YStep% - 1))-(x%, y%), Temp%ă          PUT (x% - (XStep% - 1) + XSpeed%, y% - (YStep% - 1) + YSpeed%), Temp%, PSETă        END IFă      NEXT x%ă    NEXT y%ă  END IFă  'ăEND SUBăAndrew L. Ayers                BIG TEXT SCROLL                andrewa@indirect.com           08-15-96 (00:00)       QB, QBasic, PDS        123  3346     BIGSCROL.BAS' Description : BigScroll! - Another VGA Mode 13 Scrolling Routineă' Written by  : Andrew L. Ayersă' Date        : 08/15/96ă'ă' This uses my FastScroll! routine, as well as another routineă' to do a LARGE text scroller. Check it out!ă'ă' You may use this routine in any manner you like, as longă' as you give credit in an appropriate manner. Have phun!ă'ăDECLARE SUB FastScroll (XSpeed%, YSpeed%)ă'ăDEFINT A-Ză'ăDIM a1(32 * 64 * 11), a2(32 * 64 * 11), a3(32 * 64 * 11)ă'ăSCREEN 13ă'ăCOLOR 7: LOCATE 10, 6: PRINT "Please wait...Building font": COLOR 0ă'ăFOR T = 15 TO 255: PALETTE T, 0: NEXT Tă'ăA$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ!?.-"ă'ăFOR T = 0 TO 30ă  GOSUB DrawLetteră  GOSUB GetLetterăNEXT Tă'ăSCREEN 0: CLS 0: SCREEN 13ă'ăB$ = "BIG SCROLL! BY ANDREW AYERS - HOW DO YOU LIKE IT?...      "ă'ăDOă  FOR TT = 1 TO LEN(B$)ă    T = INSTR(A$, MID$(B$, TT, 1)) - 1ă    GOSUB PutLetteră    FOR X = 0 TO 7ă      CALL FastScroll(-8, 0)ă      LINE (311, 0)-(319, 199), 0, BFă    NEXT Xă  NEXT TTăLOOP UNTIL UCASE$(INKEY$) = "Q"ă'ăSTOPă'ăDrawLetter:ă  'ă  LINE (0, 0)-(8, 8), 0, BFă  LINE (0, 100)-(319, 199), 0, BFă  'ă  COLOR 255: LOCATE 1, 1: PRINT MID$(A$, T + 1, 1)ă  'ă  SCALE = 8ă  'ă  FOR y = 0 TO (SCALE - 1)ă    FOR X = 1 TO 1 * SCALEă      IF POINT(X - 1, y) = 255 THENă        LINE (X * SCALE, 100 + y * SCALE)-(X * SCALE + SCALE, 100 + y * SCALE + SCALE), 15, BFă      END IFă    NEXT Xă  NEXT yă  'ă  FOR y = 0 TO SCALE * SCALEă    C = (16 * ABS(y < 31)) + INT(y / 2)ă    FOR X = 0 TO SCALE * SCALEă      IF POINT(X, 100 + y) THENă        PSET (X, 100 + y), Că      END IFă    NEXT Xă  NEXT yă  'ă  RETURNăăGetLetter:ă  'ă  IF T >= 0 AND T < 10 THEN GET (0, 100)-(64, 160), a1(T * 32 * 64)ă  IF T >= 10 AND T < 20 THEN GET (0, 100)-(64, 160), a2((T - 10) * 32 * 64)ă  IF T >= 20 AND T < 30 THEN GET (0, 100)-(64, 160), a3((T - 20) * 32 * 64)ă  'ă  RETURNăăPutLetter:ă  'ă  IF T >= 0 AND T < 10 THEN PUT (255, 68), a1(T * 32 * 64), PSETă  IF T >= 10 AND T < 20 THEN PUT (255, 68), a2((T - 10) * 32 * 64), PSETă  IF T >= 20 AND T < 30 THEN PUT (255, 68), a3((T - 20) * 32 * 64), PSETă  'ă  RETURNăăSUB FastScroll (XSpeed%, YSpeed%)ă  'ă  DIM Temp%(502)ă  'ă  XStep% = 40: YStep% = 25ă  'ă  IF XSpeed% < 0 OR YSpeed% < 0 THENă    FOR y% = 0 TO 199 STEP YStep%ă      FOR X% = 0 TO 319 STEP XStep%ă        IF (XSpeed% <> 0 AND X% = 0) OR (YSpeed% <> 0 AND y% = 0) THENă          GET (X% - XSpeed%, y% - YSpeed%)-(X% + XStep% - 1, y% + YStep% - 1), Temp%ă          PUT (X%, y%), Temp%, PSETă        ELSEă          GET (X%, y%)-(X% + XStep% - 1, y% + YStep% - 1), Temp%ă          PUT (X% + XSpeed%, y% + YSpeed%), Temp%, PSETă        END IFă      NEXT X%ă    NEXT y%ă  ELSEă    FOR y% = 199 TO 0 STEP -YStep%ă      FOR X% = 319 TO 0 STEP -XStep%ă        IF (XSpeed% <> 0 AND X% = 319) OR (YSpeed% <> 0 AND y% = 199) THENă          GET (X% - (XStep% - 1), y% - (YStep% - 1))-(X% - XSpeed%, y% - YSpeed%), Temp%ă          PUT (X% - (XStep% - 1) + XSpeed%, y% - (YStep% - 1) + YSpeed%), Temp%, PSETă        ELSEă          GET (X% - (XStep% - 1), y% - (YStep% - 1))-(X%, y%), Temp%ă          PUT (X% - (XStep% - 1) + XSpeed%, y% - (YStep% - 1) + YSpeed%), Temp%, PSETă        END IFă      NEXT X%ă    NEXT y%ă  END IFă  'ăEND SUBăAndrew L. Ayers                VGA PALETTE READ/WRITE ROUTINESandrewa@indirect.com           07-24-96 (00:00)       QB, QBasic, PDS        129  3662     VGAPAL.BAS  ' Description : Mode 13 VGA Palette Read/Write Subroutinesă'               and custom palette setting routineă' Written by  : Andrew L. Ayersă' Date        : 07/24/96ă'ă' These read/write routines were developed from informationă' provided by Eli Bennett in an ABC Code Packet. The paletteă' setting (spreading?) routine is my own. These routines shouldă' make it easier to read/write RGB values to the VGA palette ină' mode 13 as well as in setting up palettes. If you use theseă' routines, please give credit to both Mr. Bennett and myself.ă' Have phun!ă'ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăDECLARE SUB SetPal (start.slot%, end.slot%)ă'ăDIM oldr%(255), oldg%(255), oldb%(255)ă'ăSCREEN 13ă'ă' Save old paletteă'ăFOR t% = 0 TO 255ă  CALL ReadRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ă'ă' Create a custom 256 color paletteă'ăCALL WriteRGB(63, 63, 63, 1)   ' From all whiteăCALL WriteRGB(63, 0, 0, 63)    ' to red, and thenăCALL WriteRGB(0, 63, 0, 127)   ' to green, thenăCALL WriteRGB(0, 0, 63, 191)   ' to blue, and finallyăCALL WriteRGB(63, 63, 63, 255) ' back to white...ă'ăCALL SetPal(1, 63)             ' Each of these linesăCALL SetPal(63, 127)           ' create a portion ofăCALL SetPal(127, 191)          ' the color spread. TheăCALL SetPal(191, 255)          ' two arguments are theă                               ' start and ending slotsă                               ' for the spread...ă'ă' Display exampleă'ăFOR t% = 1 TO 255ă  LINE (t% - 1, 0)-(t% - 1, 199), t%ăNEXT t%ăă'ă' Rotate palette - this isn't how you would do ită' for speed (for more speed, inline the read/write codeă' to eliminate subroutine calling overhead), but ită' does show how to do it. Notice the "sparklies" alongă' the right hand edge. These are only apparent if youră' computer is fast enough. I believe this has to do withă' the registers being updated faster than the video cardă' can keep up with or sothing like that. If anyone knowsă' how to fix this, go for it!ă'ăDOă  'ă  CALL ReadRGB(ored%, ogrn%, oblu%, 1)     ' Read in slot 1.ă  'ă  FOR t% = 1 TO 254ă    CALL ReadRGB(red%, grn%, blu%, t% + 1) ' Read slots 2-255, thenă    CALL WriteRGB(red%, grn%, blu%, t%)    ' shift to slots 1-254.ă  NEXT t%ă  'ă  CALL WriteRGB(ored%, ogrn%, oblu%, 255)  ' Write what was in slot 1 toă                                           ' slot 255.ăLOOP UNTIL INKEY$ <> ""ă'ăCLSăă'ă' Reset original RGB valuesă'ăFOR t% = 0 TO 255ă  CALL WriteRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ăăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL WriteRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăAndrew L. Ayers                VGA SINUSOIDAL PLASMA          andrewa@indirect.com           07-24-96 (00:00)       QB, QBasic, PDS        175  4887     PLASMA.BAS  ' Description : Mode 13 VGA Sinusoidal Plasma!ă' Written by  : Andrew L. Ayersă' Date        : 07/24/96ă'ă' Now here's one for the masses! This creates sinusoidal plasma, whichă' tends to be way easier to create than cloud plasma. This routine isn'tă' optimized too much (a SIN table would speed it up some). Play with ită' some. As always, if you use the routine in your own program or demo,ă' please mention my name. Thanks, and have phun!ăăDECLARE SUB SetPal (start.slot%, end.slot%)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ă'ăDIM oldr%(255), oldg%(255), oldb%(255), A%(300), C%(300)ă'ăSCREEN 13ă'ă' Save old palette, set palette to black toă' hide the build process...ă'ăFOR t% = 0 TO 255ă  CALL ReadRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ă  CALL WriteRGB(0, 0, 0, t%)ăNEXT t%ă'ă' TPI = 2 x PI - Do NOT mess with, needed for SIN Calcsă' FREQ = Frequency (Duh!)   - Go ahead and mess with these two...ă' AMPLITUDE = (Double Duh!)ă'ăTPI = 6.28318: FREQ% = 4: AMPLITUDE% = 15ă'ă' Create Sinusoidal Multicolored Backdrop Thingy!ă'ăSCALE = (TPI * FREQ%) / 320ă'ăFOR Y% = 0 TO 199ă  RAD = 0ă  COLR% = COLR% + 1: IF COLR% > 255 THEN COLR% = 1ă  LINE (0, Y%)-(0, Y%), COLR%ă  FOR X% = 0 TO 319 STEP 8ă    YPOS% = Y% + SIN(RAD) * AMPLITUDE%ă    LINE -(X%, YPOS%), COLR%ă    RAD = RAD + (SCALE * 6)ă  NEXT X%ăNEXT Y%ă'ă' Warp it sinusoidally in a horizontal fashion!ă'ăRAD = 0ăFREQ% = 8: AMPLITUDE% = 15ăSCALE = (TPI * FREQ%) / 200ă'ăFOR Y% = 0 TO 199ă  XPOS% = INT(SIN(RAD) * AMPLITUDE%)ă  GET (0, Y%)-(319 - XPOS%, Y%), A%ă  IF XPOS% >= 0 THENă    GET (319 - XPOS%, Y%)-(319, Y%), C%ă    PUT (XPOS%, Y%), A%, PSETă    PUT (0, Y%), C%, PSETă  ELSEă    GET (ABS(XPOS%), Y%)-(319, Y%), A%ă    GET (0, Y%)-(ABS(XPOS%), Y%), C%ă    PUT (0, Y%), A%, PSETă    PUT (319 + XPOS%, Y%), C%, PSETă  END IFă  RAD = RAD + SCALEăNEXT Y%ă'ă' Mask off ugly portionsă'ăLINE (0, 0)-(319, 17), 0, BFăLINE (0, 174)-(319, 199), 0, BFăLINE (0, 0)-(35, 199), 0, BFăLINE (289, 0)-(319, 199), 0, BFă'ăLOCATE 2, 9: PRINT "Sinusoidal Plasma Effect!"ăLOCATE 23, 12: PRINT "By Andrew L. Ayers"ă'ă' Create a custom 256 color paletteă'ăCALL WriteRGB(63, 63, 63, 1)   ' From all whiteăCALL WriteRGB(63, 0, 0, 63)    ' to red, and thenăCALL WriteRGB(0, 63, 0, 127)   ' to green, thenăCALL WriteRGB(0, 0, 63, 191)   ' to blue, and finallyăCALL WriteRGB(63, 63, 63, 255) ' back to white...ă'ăCALL SetPal(1, 63)             ' Each of these linesăCALL SetPal(63, 127)           ' create a portion ofăCALL SetPal(127, 191)          ' the color spread. TheăCALL SetPal(191, 255)          ' two arguments are theă                               ' start and ending slotsă                               ' for the spread...ăă'ă' Rotate palette - this isn't how you would do ită' for speed (for more speed, inline the read/write codeă' to eliminate subroutine calling overhead), but ită' does show how to do it. Notice the "sparklies" alongă' the right hand edge. These are only apparent if youră' computer is fast enough. I believe this has to do withă' the registers being updated faster than the video cardă' can keep up with or sothing like that. If anyone knowsă' how to fix this, go for it!ă'ăDOă  'ă  CALL ReadRGB(ored%, ogrn%, oblu%, 1)     ' Read in slot 1.ă  'ă  FOR t% = 1 TO 254ă    CALL ReadRGB(red%, grn%, blu%, t% + 1) ' Read slots 2-255, thenă    CALL WriteRGB(red%, grn%, blu%, t%)    ' shift to slots 1-254.ă  NEXT t%ă  'ă  CALL WriteRGB(ored%, ogrn%, oblu%, 255)  ' Write what was in slot 1 toă                                           ' slot 255.ăLOOP UNTIL INKEY$ <> ""ă'ăCLSăă'ă' Reset original RGB valuesă'ăFOR t% = 0 TO 255ă  CALL WriteRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ăăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL WriteRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăAndrew L. Ayers                CLOUD PLASMA EFFECT            andrewa@indirect.com           07-24-96 (00:00)       QB, QBasic, PDS        222  6227     CLOUD.BAS   ' Description : Mode 13 VGA Cloud Plasma!ă' Written by  : Andrew L. Ayersă' Date        : 07/24/96ă'ă' Now here's yet another for the masses! This creates cload plasma, whichă' is also known as fractal plasma. This routine is pretty damn fastă' already, but if you can speed it up, go for it! Play with it some.ă' As always, if you use the routine in your own program or demo, pleaseă' mention my name. Thanks, and have phun!ăăDECLARE SUB SetPal (start.slot%, end.slot%)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăDECLARE SUB PLASMA (XE%, YE%, SCALE%)ăDECLARE SUB DRAW.PLASMA (XS%, YS%, XE%, YE%, REDRAW%, SCALE%)ă'ăDIM oldr%(255), oldg%(255), oldb%(255)ă'ăSCREEN 13ă'ă' Save old palette, change to black toă' hide build processă'ăFOR t% = 0 TO 255ă  CALL ReadRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ă  CALL WriteRGB(0, 0, 0, t%)ăNEXT t%ăă'ăRANDOMIZE TIMERă'ăCALL PLASMA(512, 256, 4)ăăLOCATE 2, 11: PRINT "Cloud Plasma Effect!"ăLOCATE 23, 12: PRINT "By Andrew L. Ayers"ăă'ă' Create a custom 256 color paletteă'ăCALL WriteRGB(0, 0, 0, 1)ăCALL WriteRGB(63, 63, 0, 31)ăCALL WriteRGB(0, 0, 63, 63)ăCALL WriteRGB(0, 63, 63, 95)ăCALL WriteRGB(63, 0, 0, 127)ăCALL WriteRGB(0, 63, 0, 159)ăCALL WriteRGB(63, 0, 63, 191)ăCALL WriteRGB(63, 63, 63, 223)ăCALL WriteRGB(0, 0, 0, 255)ă'ăCALL SetPal(1, 31)ăCALL SetPal(31, 63)ăCALL SetPal(63, 95)ăCALL SetPal(95, 127)ăCALL SetPal(127, 159)ăCALL SetPal(159, 191)ăCALL SetPal(191, 223)ăCALL SetPal(223, 255)ăă'ă' Rotate palette - this isn't how you would do ită' for speed (for more speed, inline the read/write codeă' to eliminate subroutine calling overhead), but ită' does show how to do it. Notice the "sparklies" alongă' the right hand edge. These are only apparent if youră' computer is fast enough. I believe this has to do withă' the registers being updated faster than the video cardă' can keep up with or sothing like that. If anyone knowsă' how to fix this, go for it!ă'ăDOă  'ă  CALL ReadRGB(ored%, ogrn%, oblu%, 1)     ' Read in slot 1.ă  'ă  FOR t% = 1 TO 254ă    CALL ReadRGB(red%, grn%, blu%, t% + 1) ' Read slots 2-255, thenă    CALL WriteRGB(red%, grn%, blu%, t%)    ' shift to slots 1-254.ă  NEXT t%ă  'ă  CALL WriteRGB(ored%, ogrn%, oblu%, 255)  ' Write what was in slot 1 toă                                           ' slot 255.ă  FOR dlay% = 1 TO 15000: NEXT dlay%        ' This may need adjustingăLOOP UNTIL INKEY$ <> ""ă'ăCLSăă'ă' Reset original RGB valuesă'ăFOR t% = 0 TO 255ă  CALL WriteRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ăăSUB DRAW.PLASMA (XS%, YS%, XE%, YE%, REDRAW%, SCALE%)ă  'ă  STATIC ITER%ă  'ă  IF REDRAW% THEN ITER% = 1: REDRAW% = 0ă  IF ITER% = 1 THENă    ITER% = 0ă    LINE (XS%, YS%)-(XS% + SCALE% - 1, YS% + SCALE% - 1), INT(RND * 63) + 1, BFă    LINE (XE%, YS%)-(XE% + SCALE% - 1, YS% + SCALE% - 1), INT(RND * 63) + 1, BFă    LINE (XS%, YE%)-(XS% + SCALE% - 1, YE% + SCALE% - 1), INT(RND * 63) + 1, BFă    LINE (XE%, YE%)-(XE% + SCALE% - 1, YE% + SCALE% - 1), INT(RND * 63) + 1, BFă  END IFă  'ă  SIZE% = (XE% - XS%) / 2ă  IF SIZE% < SCALE% THEN EXIT SUBă  'ă  SIZE% = SIZE% + (INT(RND * 8) - 4)ă  'ă  X1% = XS% + (XE% - XS%) / 2ă  Y1% = YS% + (YE% - YS%) / 2ă  'ă  C1% = POINT(XS%, YS%)' ULă  C2% = POINT(XE%, YS%)' URă  C3% = POINT(XS%, YE%)' LLă  C4% = POINT(XE%, YE%)' LRă  'ă  C5% = (C1% + C2%) / 2 ' UL+URă  C6% = (C1% + C3%) / 2 ' UL+LLă  C7% = (C2% + C4%) / 2 ' UR+LRă  C8% = (C3% + C4%) / 2 ' LL+LRă  C9% = (C5% + C6% + C7% + C8%) / 4 ' MIDă  'ă  C5% = C5% + INT(RND * SIZE%) - (SIZE% / 2)ă  C6% = C6% + INT(RND * SIZE%) - (SIZE% / 2)ă  C7% = C7% + INT(RND * SIZE%) - (SIZE% / 2)ă  C8% = C8% + INT(RND * SIZE%) - (SIZE% / 2)ă  C9% = C9% + INT(RND * SIZE%) - (SIZE% / 2)ă  'ă  IF C5% < 1 THEN C5% = 1ă  IF C6% < 1 THEN C6% = 1ă  IF C7% < 1 THEN C7% = 1ă  IF C8% < 1 THEN C8% = 1ă  IF C9% < 1 THEN C9% = 1ă  'ă  IF C5% > 63 THEN C5% = 63ă  IF C6% > 63 THEN C6% = 63ă  IF C7% > 63 THEN C7% = 63ă  IF C8% > 63 THEN C8% = 63ă  IF C9% > 63 THEN C9% = 63ă  'ă  IF XS% = 0 OR YS% = 0 THENă    LINE (XS%, YS%)-(XS% + SCALE% - 1, YS% + SCALE% - 1), C5%, BF' TMă  END IFă  IF XS% = 0 OR Y1% = 0 THENă    LINE (XS%, Y1%)-(XS% + SCALE% - 1, Y1% + SCALE% - 1), C6%, BF' LMă  END IFă  'ă  IF XE% < 320 AND Y1% < 200 THENă    LINE (XE%, Y1%)-(XE% + SCALE% - 1, Y1% + SCALE% - 1), C7%, BF' RMă  END IFă  IF X1% < 320 AND YE% < 200 THENă    LINE (X1%, YE%)-(X1% + SCALE% - 1, YE% + SCALE% - 1), C8%, BF' BMă  END IFă  IF X1% < 320 AND Y1% < 200 THENă    LINE (X1%, Y1%)-(X1% + SCALE% - 1, Y1% + SCALE% - 1), C9%, BF' MIDă  END IFă  'ă  CALL DRAW.PLASMA(XS%, YS%, X1%, Y1%, REDRAW%, SCALE%)ă  CALL DRAW.PLASMA(X1%, YS%, XE%, Y1%, REDRAW%, SCALE%)ă  CALL DRAW.PLASMA(XS%, Y1%, X1%, YE%, REDRAW%, SCALE%)ă  CALL DRAW.PLASMA(X1%, Y1%, XE%, YE%, REDRAW%, SCALE%)ă  'ăEND SUBăăSUB PLASMA (XE%, YE%, SCALE%)ă  'ă  CALL DRAW.PLASMA(0, 0, XE%, YE%, 1, SCALE%)ă  LINE (0, 0)-(XE% + SCALE% - 1, YS% + SCALE% - 1), 0, BFă  LINE (0, 0)-(XS% + SCALE% - 1, YE% + SCALE% - 1), 0, BFă  'ăEND SUBăăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL WriteRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăAndrew L. Ayers                BUFFER TO SCREEN COPY ROUTINE  andrewa@indirect.com           08-21-96 (00:00)       QB, QBasic, PDS        93   4093     BCOPY.BAS   ' Description : BlastCopy! - VGA Mode 13 Buffer to Screen Copy Routineă'               Get ready for some rock and roll - this baby's fast!ă' Written by  : Andrew L. Ayersă' Date        : 08/21/96ă'ă' Ok! Here's one! I am sick of Mode 13h not having a way to PCOPY! So I amă' setting out to remedy it. First, a rather large buffer is created usingă' DIMension. Since the smallest data type we can use is WORD size, and modeă' 13h uses one byte per pixel, and there are 64000 pixels on the screen, weă' need a buffer 32000 WORDs long. Hence, the following:ă'ăDIM buffer%(31999), code1%(29)ă'ă' BTW - buffer%() is the buffer, code%() is an area of memory set aside foră'       the copy routine, see below...ă'ă' Now we need a copy routine. BASIC is too damn slow for this amount of work,ă' so I resorted to assembler (all right, some of you! I hear groaning!).ă' Noooooooo! Yes! This works, it isn't hard to understand, just get a goodă' book! I shied away from assembler myself, but was able to pick up enough toă' do this routine in a couple of days. So, anyhow here is the assembler code.ă'ă' Assembler code is as follows:ă'ă' 1E            PUSH    DS              ' Save the Data Segmentă' 55            PUSH    BP              ' Save the Base Pointeră' 89E5          MOV     BP,SP           ' Get the Stack Pointeră' 8B460A        MOV     AX,[BP+0A]      ' Let AX=Buffer Segment Addressă' 8ED8          MOV     DS,AX           ' Set the Data Segment=AXă' 8B7608        MOV     SI,[BP+08]      ' Let Source Index(SI)=Buffer Offsetă' B800A0        MOV     AX,A000         ' Set AX=Start of Video (13h)ă' 8EC0          MOV     ES,AX           ' Set the Extra Segmentă' BF0000        MOV     DI,0000         ' Set the Destination Index to 0ă' B9007D        MOV     CX,7D00         ' Number of words to copy (32000)ă' F3A5          REP     MOVSW           ' Move the words!ă' 5D            POP     BP              ' Reset the Base Pointeră' 1F            POP     DS              ' Reset the Data Segmentă' CA0400        RETF    0004            ' Return to BASIC Program, clean upă'                                         stack...ă'ă' I know, I know. Some of you assembler freaks out there can see some waysă' of speeding it up, such as using LDS and LES, or even using the fasteră' double WORD copy (on 386-486). Well, I used DEBUG, and I was learning, soă' this is what you get. Speed it up if you want!ă'ă' And here it is encoded as HEX in a string for us to use...ă'ăcode1$ = "1E5589E58B460A8ED88B7608B800A08EC0BF0000B9007DF3A55D1FCA0400"ă'ă' Where did I get the HEX codes? Using DEBUG! DEBUG is what is known as aă' monitor. It allows you to change/create machine code directly, without ană' assembler. It isn't hard to learn. Just pick up a copy of PC Magazine'să' DOS books - it will show you how to use it. They also have one for BASIC,ă' which shows assembler stuff. I used DEBUG instead of MASM, because of twoă' reasons: 1) I don't have MASM, 2) MASM costs too much. Fortunately, thereă' are shareware assemblers out there, but since DEBUG comes with DOS, whyă' not try it?ă'ă' Now we poke the code into the memory reserved for it:ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 29ă  d% = VAL("&h" + MID$(code1$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ă' This sets the buffer to "pretty" colorsă' Some form of assembler is needed here to speed this up - perhaps a newă' kind of GET/PUT style routine...Hmm...ă'ăFOR t% = 0 TO 31999ă  buffer%(t%) = t%ăNEXT t%ă'ă' Gee... What does this line do?...ă'ăSCREEN 13ă'ă' Wait for user inpută'ăLOCATE 1, 1: PRINT "Press any key to clear...";ăkey$ = INPUT$(1)ă'ă' Call our routine - MUST pass segment and offset of buffer using BYVAL,ă' otherwise you'll get the addresses only - not good...ă'ăDEF SEG = VARSEG(code1%(0))ăCALL ABSOLUTE(BYVAL VARSEG(buffer%(0)), BYVAL VARPTR(buffer%(0)), VARPTR(code1%(0)))ăDEF SEGă'ă' As always, you may use this code for whatever you want, just give meă' credit where you can. Thanx, and have phun!ăKurt Kuzba                     USING GET & PUT                FidoNet QUIK_BAS Echo          08-02-96 (14:43)       QB, QBasic, PDS        32   1835     GET&PUT.BAS '>   Can any one help me with the statements GET adn PUT? Ină'>   screen mode 13? Does anyone know how to display a spriteă'>   that is made with Sprite Editor and is appended into aă'>   QBasic program using the DATA statement? What it does isă'>   put a sprite that you draw in Sprite Editor in QBasic usingă'>   DATA statements?? I don't get it???ă'>.....................................ă'   GET and PUT in mode 13 is simple. You can actually work withă'the data in your array, unlike with mode 12. I have yet to makeă'heads or tails of the array data arrived at with the GET in 12.ă'You require one byte for each pixel, plus four bytes to hold theă'block format data, which is two integer values, one for the width,ă'and one for the height, of the graphical block. Try this:ăSCREEN 13ăDIM BUF(602) AS INTEGER   '(40x30 + 4 bytes for format data) / 2ăBUF(0) = 320              'set block width (in BITS!) 40 * 8ăBUF(1) = 30               'set block heightăDEF SEG = VARSEG(BUF(0)): O& = VARPTR(BUF(0)) + 4ă                          'set segment to directly manipulate BUFăDOă   Colour% = RND * 255ă   FOR T& = O& TO O& + 1199: POKE T&, Colour%: NEXTă                     'set BUF contents to another color at randomă   X% = RND * 279: Y% = RND * 169  'Pick a random screen location.ă   IF (Colour% AND 1) <> 0 THEN    'This IF/THEN/ELSE is just foră      PUT (X%, Y%), BUF, PSET      'fun, alternating between theă   ELSE                            'absolute PSET usage and theă      PUT (X%, Y%), BUF, XOR       'XOR, combining present imageă   END IF                          'with the imposed image. Ită   IF INKEY$ <> "" THEN EXIT DO    'makes the display just a bităLOOP                               'more interesting to watchăSCREEN 0: WIDTH 80, 25: END        'go back to 80x25 text and end.ăJonathan Leger                 GRAPHICS LOADER                leger@mail.dtx.net             08-12-96 (21:48)       QB, QBasic, PDS        935  26247    FX2.BAS     '----------------------------------------------------------ă' Requires Luke Molnar's ULTIMATE FONT V1.1ă'   Please refer to GRAPHICS.ABC of the July 1996 Editionă'----------------------------------------------------------ăăDEFINT A-Zăă'**** Screen routinesăDECLARE SUB LoadGif (file$)ăDECLARE SUB LoadPcx (file$)ăDECLARE SUB BsaveScreen (file$)ăDECLARE SUB GiftoBSAVE (gif$, bsave$, pal$)ăă'*** Palette routinesăDECLARE SUB GetPal (pal())ăDECLARE SUB PutPal (pal())ăDECLARE SUB SavePal (file$)ăDECLARE SUB LoadPal (file$)ăDECLARE SUB RotatePal (direction, pal())ăDECLARE SUB CyclePal (direction, pal(), numcycles)ăă'*** Palette fxăDECLARE SUB FadeOut (pal())ăDECLARE SUB FadeIn (pal())ăDECLARE SUB BlackOut ()ăă'*** Drawing RoutinesăDECLARE SUB ClrScr (col)ăă'*** Font routinesăDECLARE SUB Font (Text$, XStart, Ystart, Xscale, Yscale, Style, clr)ăDECLARE SUB LoadFont ()ăDECLARE SUB MakeFont ()ăDECLARE SUB FontPal ()ăă'*** EMS routinesăDECLARE FUNCTION NumEMSHandles% ()ăDECLARE FUNCTION NumEMSPages% (Handle%)ăDECLARE FUNCTION GetEMS% (numpages%)ăDECLARE FUNCTION EMSPages% (func%)ăDECLARE FUNCTION PageFrame% ()ăDECLARE FUNCTION EMSstatus% ()ăDECLARE SUB ReleaseEMS (Handle%)ăDECLARE SUB MapEMS (Handle%, block%)ăă'*** Memory manipulation routinesăDECLARE SUB MemCopy (fromseg, fromoff, toseg, tooff, numbytes)ăDECLARE SUB FillChar (segment, offset, value, bytes)ăă'*** MiscelaneousăDECLARE SUB WaitRetrace ()ăăOPTION BASE 0ăă'$STATICăDIM pal1(0 TO 255, 3) AS INTEGERăDIM pal2(0 TO 255, 3) AS INTEGERăDIM SHARED FontBuf(0) AS STRING * 10368ăă'$DYNAMICăăLoadFontăăSCREEN 13ăăGetPal pal1()ăăFontPalăGetPal pal2()ăBlackOutăăFont "BASIC FX", 50, 75, 3, 3, 3, 70ăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăFadeOut pal2()ăCLSăăFont "The font routines were written by:", 0, 0, 1, 1, 3, 120ăFont "Luke Molnar", 70, 25, 2, 2, 3, 1ăFont "Other routines written/collected by:", 0, 100, 1, 1, 3, 120ăFont "Jonathan Leger", 40, 125, 2, 2, 3, 1ăăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăăFadeOut pal2()ăCLSăăPutPal pal1()ăăFont "LoadGif()", 115, 100, 1, 1, 5, 15ăFont "press a key", 105, 125, 1, 1, 5, 15ăWHILE INKEY$ = "": WENDăăLoadGif "letterma.gif"ăFOR snd = 1000 TO 1500 STEP 100ă   SOUND snd, .1ă   SOUND snd + 100, .1ă   SOUND snd + 200, .1ăNEXT sndăăWHILE INKEY$ = "": WENDăăCLSăPutPal pal1()ăăFont "LoadPcx()", 115, 100, 1, 1, 5, 15ăFont "press a key", 105, 125, 1, 1, 5, 15ăWHILE INKEY$ = "": WENDăăLoadPcx "bwface.pcx"ăFOR snd = 1000 TO 1500 STEP 100ă   SOUND snd, .1ă   SOUND snd + 100, .1ă   SOUND snd + 200, .1ăNEXT sndăăWHILE INKEY$ = "": WENDăăIF EMSstatus THENă   IF EMSPages(1) >= 4 THENă      PCXHandle = GetEMS(4)ă      MapEMS PCXHandle, 0ă      MemCopy &HA000, 0, PageFrame, 0, &HFA00ă      CLSă      Font "The previous picture has been", 0, 0, 1, 1, 5, 15ă      Font "loaded into EMS memory.", 0, 25, 1, 1, 5, 15ă      Font "Press any key to load picture.", 0, 50, 1, 1, 5, 15ă      WHILE INKEY$ = "": WENDă      MemCopy PageFrame, 0, &HA000, 0, &HFA00ă      WHILE INKEY$ = "": WENDă      ReleaseEMS PCXHandleă   END IFăEND IFăăGetPal pal2()ăăFont "CyclePal()", 115, 100, 1, 1, 5, 15ăăDO UNTIL LEN(INKEY$) > 0ă   CyclePal 1, pal2(), 1ăLOOPăăBlackOutăCLSăăFontPalăGetPal pal2()ăBlackOutăăFont "End of..", 0, 25, 1, 1, 5, 18ăFont "BASIC FX", 50, 75, 3, 3, 3, 70ăFont "...Demo", 240, 145, 1, 1, 5, 18ăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăFadeOut pal2()ăCLSăPutPal pal1()ăăSCREEN 0ăWIDTH 80, 25ăENDăăREM $STATICăSUB BlackOutăă   FOR clr = 0 TO 255ă      OUT &H3C8, clră      OUT &H3C9, 0ă      OUT &H3C9, 0ă      OUT &H3C9, 0ă   NEXT clrăăEND SUBăăSUB BsaveScreen (file$)ăăDEF SEG = &HA000ăBSAVE file$, 0, 64000ăDEF SEGăăEND SUBăăSUB ClrScr (col)ăăFillChar &HA000, 0, col, &HFA00ăăEND SUBăăSUB CyclePal (direction, pal(), numcycles)ăăFOR x = 1 TO numcyclesă   WaitRetraceă   RotatePal direction, pal()ăNEXT xăăEND SUBăă'************* EMSPages%() ****************ă'*** When func% is 0, returns the total ***ă'*** number of 16k pages, when func% is ***ă'*** 1, returns the number of available ***ă'*** 16k pages.                         ***ă'******************************************ăFUNCTION EMSPages% (func%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(66) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(8) + CHR$(137) + CHR$(21) + CHR$(93) + CHR$(203)ăăTotalPages% = 0: AvailablePages% = 0ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(TotalPages%, AvailablePages%, SADD(asm$))ăDEF SEGăăIF func% = 0 THENă   EMSPages% = TotalPages%ăELSEă   EMSPages% = AvailablePages%ăEND IFăăEND FUNCTIONăă'**************** EMSstatus%() ******************ă'*** Returns whether EMS is available.  -1 is ***ă'*** returned if it is available, 0 otherwise ***ă'************************************************ăFUNCTION EMSstatus%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(64) + CHR$(205) + CHR$(103) + CHR$(176) + CHR$(0)ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(6) + CHR$(137) + CHR$(7)ăasm$ = asm$ + CHR$(93) + CHR$(203)ăăEMS% = -1ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(EMS%, SADD(asm$))ăDEF SEGăăIF EMS% = 0 THENă   EMSstatus = -1         'EMS installed, set to BASIC's TRUE value.ăELSEă   EMSstatus = 0          'EMS not installed, set to FALSE.ăEND IFăăEND FUNCTIONăăSUB FadeIn (pal())ăăDIM Tmp(0 TO 255, 3)ăăFOR lp = 1 TO 64ă   FOR clr = 0 TO 255ă      FOR rgb = 1 TO 3ă         IF Tmp(clr, rgb) < pal(clr, rgb) THENă            Tmp(clr, rgb) = Tmp(clr, rgb) + 1ă         END IFă      NEXT rgbă      OUT &H3C8, clră      OUT &H3C9, Tmp(clr, 1)ă      OUT &H3C9, Tmp(clr, 2)ă      OUT &H3C9, Tmp(clr, 3)ă   NEXT clrăNEXT lpăăăEND SUBăăSUB FadeOut (pal())ăăDIM Tmp(0 TO 255, 3)ăăFOR clr = 0 TO 255ă   FOR rgb = 1 TO 3ă      Tmp(clr, rgb) = pal(clr, rgb)ă   NEXT rgbăNEXT clrăăFOR lp = 1 TO 64ă   FOR clr = 0 TO 255ă      FOR rgb = 1 TO 3ă         IF Tmp(clr, rgb) > 0 THENă            Tmp(clr, rgb) = Tmp(clr, rgb) - 1ă         END IFă      NEXT rgbă      OUT &H3C8, clră      OUT &H3C9, Tmp(clr, 1)ă      OUT &H3C9, Tmp(clr, 2)ă      OUT &H3C9, Tmp(clr, 3)ă   NEXT clrăNEXT lpăăăEND SUBăăSUB FillChar (segment, offset, value, bytes)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(78) + CHR$(6) + CHR$(139) + CHR$(86) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12) + CHR$(30) + CHR$(142)ăasm$ = asm$ + CHR$(216) + CHR$(139) + CHR$(94) + CHR$(10) + CHR$(136)ăasm$ = asm$ + CHR$(23) + CHR$(67) + CHR$(226) + CHR$(251) + CHR$(31)ăasm$ = asm$ + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL segment, BYVAL offset, BYVAL value, BYVAL bytes, SADD(asm$))ăDEF SEGăăEND SUBăăSUB Font (Text$, XStart, Ystart, Xscale, Yscale, Style, clr)ăăpx = XStart  ' physical x and physical yăpy = YstartăăLHeight = Yscale * 8ăOptimize = 63 \ LHeight ' Any constant math operations done multipe timesă                          ' in the main loop should, well, not be doneă                          ' in the main loop.ăăă' Instead of wasting our time with all this MID$ garbage to access bytes ină' font buffer, we'll just take a PEEK directly at them.ăDEF SEG = VARSEG(FontBuf(0))ăă FOR h = 1 TO LEN(Text$)ă  FPtr = 81 * (ASC(MID$(Text$, h, 1)) - 1) - 1ă  FOR x = 0 TO 8ă   FOR y = 0 TO 8ăă    col = PEEK(VARPTR(FontBuf(0)) + FPtr)ă    FPtr = FPtr + 1ă    IF col THENă     SELECT CASE Styleă      ' If you desire a y scale factor greater than 8, youă      ' must change the division to higher precision...very slow.ă      ' Or, you could find a way around it.ă      CASE 1: PSET (px, py), Optimize * (py - Ystart) + clră              LINE (px, py)-(px, py + Yscale), Optimize * (py - Ystart) + clră      ' Notice how this style only uses 54 colors, so you can see the topă      ' of the letters where they would normally be blackă      CASE 2: CIRCLE (px, py), Yscale, (54 \ LHeight) * (py - Ystart) + clr + 9, , , 4ă      CASE 3:  FOR sty = px TO px + Xscaleă                FOR sty2 = py TO py + Yscaleă                 PSET (sty, sty2), Optimize * (sty2 - Ystart) + clră                 IF POINT(sty - 1, sty2) = 0 THEN PSET (sty - 1, sty2), 63 + clr - 1ă                 IF POINT(sty, sty2 - 1) = 0 THEN PSET (sty, sty2 - 1), 63 + clr - 1ă                NEXTă               NEXTă       CASE 4: FOR sty = px TO px + Xscaleă                FOR sty2 = py TO py + Yscaleă                 PSET (sty + .4 * sty2, sty2), Optimize * (sty2 - Ystart) + clră                 IF POINT((sty - 1) + .4 * sty2, sty2) = 0 THEN PSET ((sty - 1) + .4 * sty2, sty2), 63 + clr - 1ă                NEXTă               NEXTă       CASE ELSEă            PSET (px, py), clră     END SELECTă    END IFă    py = py + Yscaleă   NEXTă  px = px + Xscaleă  py = Ystartă  NEXTă NEXT hăDEF SEGăăEND SUBăăSUB FontPalăFOR x = 1 TO 63ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, 0ă OUT &H3C9, 0ăNEXTăFOR x = 64 TO 126ă OUT &H3C8, xă OUT &H3C9, 0ă OUT &H3C9, xă OUT &H3C9, 0ăNEXTăFOR x = 127 TO 189ă OUT &H3C8, xă OUT &H3C9, 0ă OUT &H3C9, 0ă OUT &H3C9, xăNEXTăFOR x = 190 TO 252ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, 0ă OUT &H3C9, xăNEXTăFOR x = 253 TO 255ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, xă OUT &H3C9, xăNEXTăEND SUBăă'********************** GetEMS%() ********************ă'*** Function returns the handle value for a block ***ă'*** of EMS memory that consists of numpages% 16k  ***ă'*** pages.  You _must_ keep the handle value for  ***ă'*** later calls that require the handle.  Example:***ă'***                                               ***ă'*** EmsHandle% = GetEMS%(5)                       ***ă'***                                               ***ă'*** EmsHandle% holds the handle info for a block  ***ă'*** of memory 5 16k pages in size, oh 80k.        ***ă'*****************************************************ăFUNCTION GetEMS% (numpages%)ăă'pageoffset% = EMSPages%(0) - EMSPages%(1)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(94) + CHR$(8) + CHR$(180) + CHR$(67) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(139) + CHR$(94) + CHR$(6) + CHR$(137)ăasm$ = asm$ + CHR$(23) + CHR$(93) + CHR$(203)ăăHandle% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL numpages%, Handle%, SADD(asm$))ăDEF SEGăă'asm$ = ""ă'asm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ă'asm$ = asm$ + CHR$(86) + CHR$(8) + CHR$(139) + CHR$(126) + CHR$(6)ă'asm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(10) + CHR$(177) + CHR$(0)ă'asm$ = asm$ + CHR$(48) + CHR$(237) + CHR$(180) + CHR$(68) + CHR$(136)ă'asm$ = asm$ + CHR$(200) + CHR$(137) + CHR$(243) + CHR$(205) + CHR$(103)ă'asm$ = asm$ + CHR$(70) + CHR$(65) + CHR$(57) + CHR$(254) + CHR$(117)ă'asm$ = asm$ + CHR$(242) + CHR$(93) + CHR$(203)ă'ă'DEF SEG = VARSEG(asm$)ă'   CALL Absolute(BYVAL pageoffset%, BYVAL Handle%, BYVAL numpages%, SADD(asm$))ă'DEF SEGăăGetEMS% = Handle%ăăEND FUNCTIONăăSUB GetPal (pal())ă   FOR clr = 0 TO 255ă      OUT &H3C7, clră      pal(clr, 1) = INP(&H3C9)ă      pal(clr, 2) = INP(&H3C9)ă      pal(clr, 3) = INP(&H3C9)ă   NEXT clrăEND SUBăăSUB GiftoBSAVE (gif$, bsave$, pal$)ăăLoadGif gif$ăBsaveScreen bsave$ăSavePal pal$ăăEND SUBăăSUB LoadFontăă   fontfile = FREEFILEăă   OPEN "basefont.dat" FOR BINARY AS #fontfileă   GET #fontfile, , FontBuf(0)ă   CLOSE #fontfileăăEND SUBăăSUB LoadGif (file$)ăDIM byte AS STRING * 1ăDIM Prefix(4095), Suffix(4095), OutStack(4095), shiftout(8)ăDIM Ybase AS LONG, powersof2(11) AS LONG, WorkCode AS LONGăăFOR a = 0 TO 7: shiftout(8 - a) = 2 ^ a: NEXT aăFOR a = 0 TO 11: powersof2(a) = 2 ^ a: NEXT aăăgiffile = FREEFILEăOPEN file$ FOR BINARY AS #giffileăfile$ = "      ": GET #giffile, , file$ăIF file$ <> "GIF87a" THEN PRINT "Not a GIF87a file.": ENDăGET #giffile, , TotalX: GET #giffile, , TotalY: GOSUB GetByteăNumColors = 2 ^ ((a AND 7) + 1): NoPalette = (a AND 128) = 0ăGOSUB GetByte: Background = aăGOSUB GetByte: IF a <> 0 THEN PRINT "Bad screen descriptor.": ENDăIF NoPalette = 0 THEN P$ = SPACE$(NumColors * 3): GET #giffile, , P$ăDOă    GOSUB GetByteă    IF a = 44 THENă        EXIT DOă    ELSEIF a <> 33 THENă        PRINT "Unknown extension type.": ENDă    END IFă    GOSUB GetByteă    DO: GOSUB GetByte: file$ = SPACE$(a): GET #giffile, , file$: LOOP UNTIL a = 0ăLOOPăGET #giffile, , XStart: GET #giffile, , Ystart: GET #giffile, , XLength: GET #giffile, , YLengthăXEnd = XStart + XLength: YEnd = Ystart + YLength: GOSUB GetByteăIF a AND 128 THEN PRINT "Can't handle local colormaps.": ENDăInterlaced = a AND 64: PassNumber = 0: PassStep = 8ăGOSUB GetByteăClearCode = 2 ^ aăEOSCode = ClearCode + 1ăFirstCode = ClearCode + 2: NextCode = FirstCodeăStartCodeSize = a + 1: CodeSize = StartCodeSizeăStartMaxCode = 2 ^ (a + 1) - 1: MaxCode = StartMaxCodeăăBitsIn = 0: BlockSize = 0: BlockPointer = 1ăx = XStart: y = Ystart: Ybase = y * 320&ăăDEF SEG = &HA000ăăIF NoPalette = 0 THENă    OUT &H3C7, 0: OUT &H3C8, 0ă    FOR a = 1 TO NumColors * 3: OUT &H3C9, ASC(MID$(P$, a, 1)) \ 4: NEXT aăEND IFăăLINE (0, 0)-(319, 199), Background, BFăăDOă    GOSUB GetCodeă    IF Code <> EOSCode THENă        IF Code = ClearCode THENă            NextCode = FirstCodeă            CodeSize = StartCodeSizeă            MaxCode = StartMaxCodeă            GOSUB GetCodeă            CurCode = Code: LastCode = Code: LastPixel = Codeă            IF x < 320 THEN POKE x + Ybase, LastPixelă            x = x + 1: IF x = XEnd THEN GOSUB NextScanLineă        ELSEă            CurCode = Code: StackPointer = 0ă            IF Code > NextCode THEN EXIT DOă            IF Code = NextCode THENă                CurCode = LastCodeă                OutStack(StackPointer) = LastPixelă                StackPointer = StackPointer + 1ă            END IFăă            DO WHILE CurCode >= FirstCodeă                OutStack(StackPointer) = Suffix(CurCode)ă                StackPointer = StackPointer + 1ă                CurCode = Prefix(CurCode)ă            LOOPăă            LastPixel = CurCodeă            IF x < 320 THEN POKE x + Ybase, LastPixelă            x = x + 1: IF x = XEnd THEN GOSUB NextScanLineăă            FOR a = StackPointer - 1 TO 0 STEP -1ă                IF x < 320 THEN POKE x + Ybase, OutStack(a)ă                x = x + 1: IF x = XEnd THEN GOSUB NextScanLineă            NEXT aăă            IF NextCode < 4096 THENă                Prefix(NextCode) = LastCodeă                Suffix(NextCode) = LastPixelă                NextCode = NextCode + 1ă                IF NextCode > MaxCode AND CodeSize < 12 THENă                    CodeSize = CodeSize + 1ă                    MaxCode = MaxCode * 2 + 1ă                END IFă            END IFă            LastCode = Codeă        END IFă    END IFăLOOP UNTIL DoneFlag OR Code = EOSCodeăGOTO LeaveProcăăGetByte: file$ = " ": GET #giffile, , file$: a = ASC(file$): RETURNăăNextScanLine:ă    IF Interlaced THENă        y = y + PassStepă        IF y >= YEnd THENă            PassNumber = PassNumber + 1ă            SELECT CASE PassNumberă            CASE 1: y = 4: PassStep = 8ă            CASE 2: y = 2: PassStep = 4ă            CASE 3: y = 1: PassStep = 2ă            END SELECTă        END IFă    ELSEă        y = y + 1ă    END IFă    x = XStart: Ybase = y * 320&: DoneFlag = y > 199ăRETURNăGetCode:ă    IF BitsIn = 0 THEN GOSUB ReadBufferedByte: LastChar = a: BitsIn = 8ă    WorkCode = LastChar \ shiftout(BitsIn)ă    DO WHILE CodeSize > BitsInă        GOSUB ReadBufferedByte: LastChar = aă        WorkCode = WorkCode OR LastChar * powersof2(BitsIn)ă        BitsIn = BitsIn + 8ă    LOOPă    BitsIn = BitsIn - CodeSizeă    Code = WorkCode AND MaxCodeăRETURNăReadBufferedByte:ă    IF BlockPointer > BlockSize THENă        GOSUB GetByte: BlockSize = aă        file$ = SPACE$(BlockSize): GET #giffile, , file$ă        BlockPointer = 1ă    END IFă    a = ASC(MID$(file$, BlockPointer, 1)): BlockPointer = BlockPointer + 1ăRETURNăLeaveProc:ăCLOSEăăEND SUBăăSUB LoadPal (file$)ăăpalfile = FREEFILEăOPEN file$ FOR BINARY AS palfileăăFOR clr = 0 TO 255ă   OUT &H3C8, clră   OUT &H3C9, ASC(INPUT$(1, palfile))ă   OUT &H3C9, ASC(INPUT$(1, palfile))ă   OUT &H3C9, ASC(INPUT$(1, palfile))ăNEXT clrăăCLOSE palfileăăEND SUBăăSUB LoadPcx (file$)ăpcxfile = FREEFILEăOPEN file$ FOR BINARY AS pcxfileăăDEF SEG = &HA000ă ă  SEEK #pcxfile, LOF(1) - 767ă  FOR pal = 0 TO 255ă     OUT &H3C8, pală     rgb% = ASC(INPUT$(1, pcxfile))ă     OUT &H3C9, rgb% / 4ă     rgb% = ASC(INPUT$(1, pcxfile))ă     OUT &H3C9, rgb% / 4ă     rgb% = ASC(INPUT$(1, pcxfile))ă     OUT &H3C9, rgb% / 4ă  NEXT pală  SEEK #pcxfile, 129ă  c = 0ă  WHILE c < 32000ă    clr = ASC(INPUT$(1, pcxfile))ă    IF clr > 192 AND clr <= 255 THENă      LPS = clr - 192ă      clr = ASC(INPUT$(1, pcxfile))ă        FOR L = LPS TO 1 STEP -1ă          POKE c, clră          c = c + 1ă          LPS = LPS - 1ă        NEXT Lă    ELSEă      POKE c, clră      c = c + 1ă    END IFă  WENDă  c = 0ă  DEF SEG = &HA7D0ă  WHILE c < 32000ă    clr = ASC(INPUT$(1, pcxfile))ă    IF clr > 192 AND clr <= 255 THENă      LPS = clr - 192ă      clr = ASC(INPUT$(1, pcxfile))ă         FOR L = LPS TO 1 STEP -1ă          POKE c, clră          c = c + 1ă          LPS = LPS - 1ă         NEXT Lă    ELSEă      POKE c, clră      c = c + 1ă    END IFă  WENDăCLOSEăDEF SEGăăEND SUBăăSUB MakeFontăăfontfile = FREEFILEăăOPEN "basefont.dat" FOR BINARY AS #giffileă' Hey, change 128 to 255 for the full font.ăCLSăSCREEN 13ăCOLOR 16ăFOR ascii = 1 TO 128ă CLSă PRINT CHR$(ascii)ă FOR x = 0 TO 8ă  FOR y = 0 TO 8ă   pnt$ = CHR$(POINT(x, y))ă   PUT #giffile, , pnt$ă   pnt$ = ""ă  NEXTă NEXTăNEXTăCLOSEăOPEN "basefont.dat" FOR BINARY AS #giffileă GET #giffile, , FontBuf(0)ăCLOSE #giffileăEND SUBăă'***************** MapEMS () ***********************************ă'*** Sets the page of a memory block (identified by Handle%) ***ă'*** that is located at the beginning of the page frame.     ***ă'*** Example:                                                ***ă'***                                                         ***ă'*** EmsHandle% = GetEMS%(8)                                 ***ă'*** MapEMS EmsHandle%, 4                                    ***ă'***                                                         ***ă'*** When the page frame segment is next written to, the info***ă'*** will be placed starting at the 4th page in the block of ***ă'*** memory represented by EmsHandle%.  This could be use,   ***ă'*** for instance, to store multiple SCREEN 13 images in one ***ă'*** EMS block, by moving the first 64k image into the first ***ă'*** 4 16k pages (16000 * 4 = 64000) by using:               ***ă'***                                                         ***ă'*** MapEMS EmsHandle%, 0                                    ***ă'***                                                         ***ă'*** And then putting the next 64k image into the next 4 EMS ***ă'*** pages by using:                                         ***ă'***                                                         ***ă'*** MapEMS EmsHandle%, 4                                    ***ă'***                                                         ***ă'*** ... and then moving the image into the memory block.    ***ă'***************************************************************ăSUB MapEMS (Handle%, pageoffset%)ăănumpages% = 4ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(86) + CHR$(8) + CHR$(139) + CHR$(126) + CHR$(6)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(10) + CHR$(177) + CHR$(0)ăasm$ = asm$ + CHR$(48) + CHR$(237) + CHR$(180) + CHR$(68) + CHR$(136)ăasm$ = asm$ + CHR$(200) + CHR$(137) + CHR$(243) + CHR$(205) + CHR$(103)ăasm$ = asm$ + CHR$(70) + CHR$(65) + CHR$(57) + CHR$(249) + CHR$(117)ăasm$ = asm$ + CHR$(242) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL pageoffset%, BYVAL Handle%, BYVAL numpages%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB MemCopy (fromseg, fromoff, toseg, tooff, bytes)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(30)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10) + CHR$(142) + CHR$(192)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14) + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(12) + CHR$(139) + CHR$(78) + CHR$(6) + CHR$(243)ăasm$ = asm$ + CHR$(164) + CHR$(31) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL fromseg, BYVAL fromoff, BYVAL toseg, BYVAL tooff, BYVAL bytes, SADD(asm$))ăDEF SEGăăEND SUBăă'****************************** NumEMSHandles%() *********************ă'*** Returns the number of EMS handles presently being used (there ***ă'*** are a maximum of 256 handles possible at any given time).     ***ă'*********************************************************************ăFUNCTION NumEMSHandles%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(75) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(93) + CHR$(203)ăăNumHandles% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(NumHandles%, SADD(asm$))ăDEF SEGăăNumEMSHandles% = NumHandles%ăăEND FUNCTIONăă'***************************** NumEMSPages%() *************************ă'*** Returns the number of 16k pages being used by the memory block ***ă'*** that is represented by Handle%.                                ***ă'**********************************************************************ăFUNCTION NumEMSPages% (Handle%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(86) + CHR$(6) + CHR$(180) + CHR$(76) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(139) + CHR$(126) + CHR$(8) + CHR$(137)ăasm$ = asm$ + CHR$(29) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(numpages%, Handle%, SADD(asm$))ăDEF SEGăăNumEMSPages% = numpages%ăăEND FUNCTIONăă'******************************* PageFrame% ***************************ă'*** Returns the segment that you will need to write to in order to ***ă'*** store your data into EMS memory.  For example, PageFrame% may  ***ă'*** return D000 (HEX, -12288 decimal), and then you might do this: ***ă'***                                                                ***ă'*** DEF SEG = PageFrame%        'D000                              ***ă'*** MyData$ = "This is a block of data I want to store in EMS."    ***ă'*** FOR X = 1 TO LEN(MyData$)                                      ***ă'***   POKE X, ASC(MID$(MyData$, X, 1))                             ***ă'*** NEXT X                                                         ***ă'*** DEF SEG                                                        ***ă'***                                                                ***ă'*** Note, though, that you have to have a block of EMS opened with ***ă'*** GetEMS%() and maped with MapEMS before you can write to the    ***ă'*** block.                                                         ***ă'**********************************************************************ăFUNCTION PageFrame%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(65) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(93) + CHR$(203)ăăPageFrameAddr% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(PageFrameAddr%, SADD(asm$))ăDEF SEGăăPageFrame% = PageFrameAddr%ăăEND FUNCTIONăăSUB PutPal (pal())ă  ă   FOR clr = 0 TO 255ă      OUT &H3C8, clră      OUT &H3C9, pal(clr, 1)ă      OUT &H3C9, pal(clr, 2)ă      OUT &H3C9, pal(clr, 3)ă   NEXT clrăăEND SUBăă'****************************** ReleaseEMS() **************************ă'*** Releases the EMS memory associated with Handle%.  This is very ***ă'*** important to do before you exit your program, otherwise the    ***ă'*** memory being used by your open handles will not be available   ***ă'*** again until you reboot.                                        ***ă'**********************************************************************ăSUB ReleaseEMS (Handle%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(69) + CHR$(139) + CHR$(86) + CHR$(6) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL Handle%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB RotatePal (direction, pal())ăă   SELECT CASE directionă         CASE 1ă            temp1 = pal(255, 1)ă            temp2 = pal(255, 2)ă            temp3 = pal(255, 3)ă            FOR rgb = 1 TO 3ă               FOR col = 254 TO 0 STEP -1ă                  pal(col + 1, rgb) = pal(col, rgb)ă               NEXT colă            NEXT rgbă            pal(0, 1) = temp1ă            pal(0, 2) = temp2ă            pal(0, 3) = temp3ă         CASE -1ă            temp1 = pal(0, 1)ă            temp2 = pal(0, 2)ă            temp3 = pal(0, 3)ă            FOR rgb = 1 TO 3ă               FOR col = 0 TO 254ă                  pal(col, rgb) = pal(col + 1, rgb)ă               NEXT colă            NEXT rgbă            pal(255, 1) = temp1ă            pal(255, 2) = temp2ă            pal(255, 3) = temp3ă   END SELECTăă   PutPal pal()ăăEND SUBăăSUB SavePal (file$)ăă   palfile = FREEFILEă   OPEN file$ FOR OUTPUT AS palfileăă   FOR clr = 0 TO 255ă      OUT &H3C7, clră      PRINT #palfile, CHR$(INP(&H3C9));ă      PRINT #palfile, CHR$(INP(&H3C9));ă      PRINT #palfile, CHR$(INP(&H3C9));ă   NEXT clrăă   CLOSE palfileăăEND SUBăăSUB SetPal (pal())ăEND SUBăăSUB WaitRetraceă   WAIT &H3DA, 8ăEND SUBăBrent P. Newhall               2D POLYGON ENGINE              comp.lang.basic.misc           08-22-96 (11:30)       QB, QBasic, PDS        223  5653     2DPOLY.BAS  'This is a C-to-BASIC conversion from Andre LaMothe's book "Teachă'Yourself Game Programming in 21 Days".  It's a simple demo with threeă'asteroids twirling on the screen and a scrolling starfield in theă'background.ăă'If you have need, take it and use it.  There are enough SUBs to do mostă'of what you should need to do.ăă' Polygonă' by Brent P. Newhall (BrentN@juno.com)ăăDEFINT A-ZăăCONST FALSE = 0, TRUE = NOT FALSEăCONST MAX.VERTICES = 15ăCONST MAX.STARS = 30ăăTYPE VertexTypeă  x AS SINGLEă  y AS SINGLEăEND TYPEăTYPE PolygonTypeă  border AS INTEGER    ' Border coloră  interior AS INTEGER  ' Interior coloră  closed AS INTEGER    ' Is the polygon closed?ă  filled AS INTEGER    ' Is the polygon filled?ă  lxo AS INTEGER       ' Local X origină  lyo AS INTEGER       ' Local Y origină  NumVertices AS INTEGERăEND TYPEăTYPE StarTypeă  x AS INTEGERă  y AS INTEGERă  dist AS INTEGERăEND TYPEăăDECLARE SUB CreateTables ()ăDECLARE SUB DrawPolygon (poly AS PolygonType, polyvert() AS VertexType)ăDECLARE SUB ErasePolygon (poly AS PolygonType, polyvert() AS VertexType)ăDECLARE SUB MovePolygon (poly AS PolygonType, dx AS INTEGER, dy AS INTEGER)ăDECLARE SUB ScalePolygon (poly AS PolygonType, polyvert() AS VertexType, scale AS SINGLE)ăDECLARE SUB RotatePolygon (poly AS PolygonType, polyvert() AS VertexType, angle AS INTEGER)ăDECLARE SUB StarField ()ăăDIM ast1 AS PolygonType ' Create basic asteroidsăDIM ast2 AS PolygonTypeăDIM ast3 AS PolygonTypeăast1.NumVertices = 5ăast2.NumVertices = 5ăast3.NumVertices = 5ăREDIM astvert1(1 TO ast1.NumVertices) AS VertexType ' Create verticesăREDIM astvert2(1 TO ast2.NumVertices) AS VertexTypeăREDIM astvert3(1 TO ast3.NumVertices) AS VertexTypeăDIM SHARED star(1 TO MAX.STARS) AS StarTypeăDIM SHARED SinLook(0 TO 361) AS DOUBLE, CosLook(0 TO 361) AS DOUBLEăDIM SHARED c(1 TO 3) ' Colorăc(1) = 15: c(2) = 7: c(3) = 8ăăFOR cnt = 1 TO MAX.STARS ' Define all the starsă  star(cnt).x = INT(RND * 320) ' Create random positionă  star(cnt).y = INT(RND * 200)ă  star(cnt).dist = INT(RND * 3 + 1)ăNEXT cntăăast1.border = 8ăast1.interior = 8ăast1.closed = TRUEăast1.filled = FALSEăast1.lxo = 110ăast1.lyo = 100ăFOR cnt1 = 1 TO ast1.NumVerticesă  READ astvert1(cnt1).x, astvert1(cnt1).yăNEXT cnt1ăast2.border = 8ăast2.interior = 8ăast2.closed = TRUEăast2.filled = FALSEăast2.lxo = 160ăast2.lyo = 80ăFOR cnt1 = 1 TO ast2.NumVerticesă  READ astvert2(cnt1).x, astvert2(cnt1).yăNEXT cnt1ăast3.border = 8ăast3.interior = 8ăast3.closed = TRUEăast3.filled = FALSEăast3.lxo = 210ăast3.lyo = 100ăFOR cnt1 = 1 TO ast3.NumVerticesă  READ astvert3(cnt1).x, astvert3(cnt1).yăNEXT cnt1ăăPRINT "Creating tables...."ăCreateTablesăSCREEN 7ăăDOă  StarFieldă  RotatePolygon ast1, astvert1(), 5ă  RotatePolygon ast2, astvert2(), 8ă  RotatePolygon ast3, astvert3(), -4ă  DrawPolygon ast1, astvert1()ă  DrawPolygon ast2, astvert2()ă  DrawPolygon ast3, astvert3()ă  t! = TIMER: WHILE t! = TIMER: WEND ' Pauseă  ErasePolygon ast1, astvert1()ă  ErasePolygon ast2, astvert2()ă  ErasePolygon ast3, astvert3()ă  IF INKEY$ <> "" THEN quit = 1ăLOOP UNTIL quit > 0ăENDăă' Asteroid 1 verticesăDATA   0,-15ăDATA  20, 5ăDATA   5, 7ăDATA  -1, 10ăDATA  -4, 1ăă' Asteroid 2 verticesăDATA   0,-15ăDATA  20,-9ăDATA  10, 7ăDATA  -1, 10ăDATA  -4, 1ăă' Asteroid 3 verticesăDATA   0,-15ăDATA  10,-2ăDATA   5, 7ăDATA  -1, 10ăDATA  -9, 1ăăDEFSNG A-ZăSUB CreateTablesăăFOR cnt = 0 TO 360ă  CosLook(cnt) = COS(cnt * 3.14159 / 180)ă  SinLook(cnt) = SIN(cnt * 3.14159 / 180)ăNEXT cntăăEND SUBăăSUB DrawPolygon (poly AS PolygonType, polyvert() AS VertexType)ăăxo = poly.lxoăyo = poly.lyoăăFOR cnt = 1 TO poly.NumVertices - 1ă  LINE (xo + polyvert(cnt).x, yo + polyvert(cnt).y)-(xo + polyvert(cnt + 1).x, yo + polyvert(cnt + 1).y), poly.borderăNEXT cntăăIF poly.closed THENă  LINE (xo + polyvert(poly.NumVertices).x, yo + polyvert(poly.NumVertices).y)-(xo + polyvert(1).x, yo + polyvert(1).y), poly.borderăEND IFăăEND SUBăăSUB ErasePolygon (poly AS PolygonType, polyvert() AS VertexType)ăăxo = poly.lxoăyo = poly.lyoăăFOR cnt = 1 TO poly.NumVertices - 1ă  LINE (xo + polyvert(cnt).x, yo + polyvert(cnt).y)-(xo + polyvert(cnt + 1).x, yo + polyvert(cnt + 1).y), 0ăNEXT cntăăIF poly.closed THENă  LINE (xo + polyvert(poly.NumVertices).x, yo + polyvert(poly.NumVertices).y)-(xo + polyvert(1).x, yo + polyvert(1).y), 0ăEND IFăăEND SUBăăSUB MovePolygon (poly AS PolygonType, dx AS INTEGER, dy AS INTEGER)ăăpoly.lxo = poly.lxo + dxăpoly.lyo = poly.lyo + dyăăEND SUBăăSUB RotatePolygon (poly AS PolygonType, polyvert() AS VertexType, angle AS INTEGER)ăăIF angle >= 0 THENă  si = SinLook(angle)ă  cs = CosLook(angle)ăELSEă  si = SinLook(angle + 360)ă  cs = CosLook(angle + 360)ăEND IFăăFOR cnt = 1 TO poly.NumVerticesă  rx = polyvert(cnt).x * cs - polyvert(cnt).y * siă  ry = polyvert(cnt).y * cs + polyvert(cnt).x * siă  polyvert(cnt).x = rxă  polyvert(cnt).y = ryăNEXT cntăăEND SUBăăSUB ScalePolygon (poly AS PolygonType, polyvert() AS VertexType, scale AS SINGLE)ăăFOR cnt = 1 TO poly.NumVerticesă  polyvert(cnt).x = polyvert(cnt).x * scaleă  polyvert(cnt).y = polyvert(cnt).y * scaleăNEXT cntăăEND SUBăăDEFINT A-ZăSUB StarFieldăăFOR cnt = 1 TO MAX.STARSă  PSET (star(cnt).x, star(cnt).y), 0ă  star(cnt).y = star(cnt).y + (4 - star(cnt).dist)ă  IF star(cnt).y > 199 THENă    star(cnt).x = INT(RND * 320)ă    star(cnt).y = INT(RND * 200)ă    star(cnt).dist = INT(RND * 3 + 1)ă  END IFă  PSET (star(cnt).x, star(cnt).y), c(star(cnt).dist)ăNEXT cntăăEND SUBăKurt Eckhardt                  VARIABLE PLASMA EFFECT         king@shadow.net                08-24-96 (00:00)       QB, QBasic, PDS        197  6164     PLASMA.BAS  DECLARE SUB Info ()ăDECLARE SUB RotatePalette (k$)ăDECLARE SUB RunX ()ăDECLARE SUB RunY ()ăDECLARE SUB SetPts ()ăDECLARE SUB SetPalette ()ă'Coded and designed by Kurt Eckhardt on 08/22/96ă'Copyrite 1996 by Kurt Eckhardtă'Fastened by Steven de Brouwer <SPMdB@dds.nl> on 08/24/96ă'ă'This program sets up a grid of four points (the corners) and generatesă'a faded verticle line between them. It then does this horizontallyă'to create of sort of plasma effect.ă'The effect works best when there is a diversity of colors on both sidesă'of the screen. This way the colors don't just fade, but rather scroll.ă'You'll see...ă'ăDEFINT A-ZăDIM SHARED pal(192, 3)ăCLS : CLEARăRANDOMIZE TIMERăCALL InfoăăSCREEN 13ăPRINT "Loading Palette...": SetPaletteăCLSăDOă   CALL SetPtsă   CALL RunYă   CALL RunXă   DOă      CALL RotatePalette(k$)ă   LOOP UNTIL k$ <> ""ăLOOP UNTIL k$ = CHR$(27)ăăSUB InfoăCLSăPRINT SPACE$(30); "Information": PRINTăPRINT "Coded and Designed by Kurt Eckhardt"ăPRINT "Copyrite 1996   All Rights Reserved"ăPRINT "V2.0    Completed on 8/22/96"ăPRINT "V2.0.0a Improved  on 8/24/96"ăPRINT "        by Steven <SPMdB@dds.nl> de Brouwer"ăPRINTăPRINT "This program works best when there is a diversity of colors on both"ăPRINT "sides of the screen. This creates a nicer pattern on the screen"ăPRINT "with more colors, so the scrolling effect will be much nicer."ăPRINT "Also experiment with pressing Other Keys! It's fun..."ăPRINTăPRINT "                               Enjoy!"ăPRINT : PRINTăPRINT "Escape    : Exit Program"ăPRINT "SpaceBar  : Change Direction"ăPRINT "Other Keys: Change Pattern/ Pallette"ăDO: LOOP UNTIL INKEY$ <> "": CLSăPRINT SPACE$(30); "Help the student": PRINTăPRINT "If this program brings a smile to your face, or you find any techniques"ăPRINT "helpful in you own programming endevours, I would greatly appreciate you"ăPRINT "sending me 1$ so I can make my way through college. Right now I am struggling"ăPRINT "as I have no money!"ăPRINT "I bet you can look around right now and find one buck within 10 feet"ăPRINT "of yourself- if not, you are as broke as I am."ăPRINT "Any comments or questions, send me some email at <king@shadow.net>"ăPRINT "Here's the address for that measly buck: "ăPRINTăPRINT "Kurt Eckhardt"ăPRINT "1820 West Oak Knoll Circle"ăPRINT "Ft. Lauderdale FL 33324"ăPRINTăPRINT "Thanks!"ăDO: LOOP WHILE INKEY$ = ""ăCLSăPRINT SPACE$(35); "Legal Stuff"ăPRINTăPRINT "1. This program may be freely distributed so long as no changes have been made."ăPRINT "2. This program, or any part of it, may not be used in another program"ăPRINT "   without my written consent."ăPRINT "3. I, Kurt Eckhardt, retain all rights to this code and retain the power"ăPRINT "   to invoke them at anytime I see fit."ăPRINT "4. I take no responsibilty for any adverse affects that may be caused by"ăPRINT "   usage of this program upon your machine."ăPRINT "5. Acknowledge your pleasure by e-mail to SPMdB@dds.nl"ăPRINT "   (He loves e-mail!)"ăLOCATE 15, 13ăPRINT "By possessing this program you agree with these terms."ăDO: LOOP WHILE INKEY$ = ""ăăEND SUBăăSUB RotatePalette (n$)ă   'ă   STATIC cngdiv, cng         'Keep values of these two between callsă   IF cngdiv = 0 THEN cngdiv = 1 - INT(RND * 2) * 2 'Random directionă   cng = cng - cngdivă   IF cng < 1 THEN cng = 192ă   IF cng > 192 THEN cng = 1ă   s = (1 - SGN(cngdiv)) / 2  's=0 or s=1ă   'ă   IF cng <> 1 + s * 191 THENă      FOR lp = 1 TO 3ă         pal(cng, lp) = pal(cng - cngdiv, lp)ă      NEXT lpă   ELSEă      FOR lp = 1 TO 3ă         pal(1 + s * 191, lp) = pal(192 - s * 191, lp)ă      NEXT lpă   END IFă   'ă   OUT &H3C8, cng                  'Write Palette Registeră   OUT &H3C9, pal(cng, 1)          'Write Palette Data(RGB)ă   OUT &H3C9, pal(cng, 2)ă   OUT &H3C9, pal(cng, 3)ă   'ă   n$ = INKEY$ă   IF n$ = " " THEN n$ = "": cngdiv = -cngdiv 'Change directionă   'ăEND SUBăăSUB RunXă   ă   r = INT(RND * 10)                   ' These two lines plus 'STEP 10'ă   FOR x = 0 TO 9                      ' For the luxaflex-effectă      FOR yy = 0 TO 199 STEP 10ă         y = yy + (x + r) MOD 10                'This one too :)ă         ch = POINT(319, y): cl = POINT(0, y)ă         cdiv! = (ch - cl) / 319ă         FOR i = 1 TO 318ă            PSET (i, y), cl + INT(i * cdiv!)    'Interpolate coloră            'ă            CALL RotatePalette(k$)     'these three linesă            IF k$ = CHR$(27) THEN END  'for effects during redrawă            IF k$ <> "" THEN stp = 1ă            'ă         NEXT iă         IF stp = 1 THEN LINE (0, 0)-(319, 199), 0, B: EXIT SUBă      NEXT yyă   NEXT xă   LINE (0, 0)-(319, 199), 0, Bă   ăEND SUBăăSUB RunYă   ă   FOR i = 0 TO 1ă      ch = POINT(i * 319, 199): cl = POINT(i * 319, 0)ă      FOR j = 1 TO 198ă         PSET (i * 319, j), cl + INT((j / 199) * (ch - cl))ă      NEXT jă   NEXT iă   ăEND SUBăăSUB SetPaletteă  ă   RA = 1: GA = 0: BA = 0: Rval = 63ă   FOR cnt = 1 TO 192ă      Rval = Rval + RAă      Gval = Gval + GAă      Bval = Bval + BAă      ă      IF Rval > 62 AND Gval <> 63 AND Bval = 0 THEN GA = 2ă      IF Gval > 62 AND Bval <> 63 AND Rval = 0 THEN BA = 2ă      IF Bval > 62 AND Rval <> 63 AND Gval = 0 THEN RA = 2ă      ă      IF Gval > 62 AND Rval > 62 THEN RA = -2ă      IF Rval < 0 AND Gval > 62 THEN BA = 2ă      IF Gval > 62 AND Bval > 62 THEN GA = -2ă      IF Gval < 0 AND Bval > 62 THEN RA = 2ă      IF Rval > 62 AND Bval > 62 THEN BA = -2ă      IF Bval < 0 AND Rval > 62 THEN GA = 2ă      ă      IF Rval > 62 THEN Rval = 63ă      IF Rval < 0 THEN Rval = 0ă      IF Gval > 62 THEN Gval = 63ă      IF Gval < 0 THEN Gval = 0ă      IF Bval > 62 THEN Bval = 63ă      IF Bval < 0 THEN Bval = 0ă      pal(cnt, 1) = Rvală      pal(cnt, 2) = Gvală      pal(cnt, 3) = Bvală      OUT &H3C8, cntă      OUT &H3C9, Rvală      OUT &H3C9, Gvală      OUT &H3C9, Bvală   NEXT cntă   ăEND SUBăăSUB SetPtsă   ă   FOR x = 0 TO 1ă      PSET (x * 319, 0), (RND * 191) + 2ă      PSET (x * 319, 199), (RND * 191) + 2ă   NEXT xă   ăEND SUBăăErika Schulze                  TGA VIEWER                     100775.2275@CompuServe.com     08-29-96 (18:39)       QB, QBasic, PDS        243  10390    TGA.BAS     '***************************************************************************ă'Program:       TGA.BAS                                                    *ă'Task:          TGA viewer for SCREEN 13 - uncompressed TGA files.         *ă'               Version 1.0                                                *ă'Language:      QBASIC mixed with machine code.                            *ă'Author:        Erika Schulze                                              *ă'               CIS: 100775,2275                                           *ă'               Internet: 100775.2275@compuserve.com                       *ă'               Free for use.                                              *ă'               Use it, abuse it, but don't blame me!                      *ă'Note:          It seems to me that the main problem is reading the data   *ă'               from the disk; that's to slow. If somebody has a better    *ă'               solution for this - your assistance is welcome. Please     *ă'               send me a message with your suggestions for improvements.  *ă'***************************************************************************ăă'The  TGA  (True Version Targa) isn't complicated. There is only aă'TGA header of 18 bytes with all informations about the image.ă'Structure of the TGA header:ăă'Offset   Length   Descriptionă'======   ======   ===========ăă'00H      BYTE     info:ă'                  It's  possible,  that after the 18 bytes of theă'                  header, the file contains an information block.ă'                  This  block, for  example, holds  the copyrightă'                  information.  The  byte  info  stands  for  theă'                  length of the information block.ă'01H      BYTE     colortyp:ă'                  0 ===> RGB imageă'                  1 ===> image has a DAC tableă'02H      BYTE     imagetyp:ă'                  This  byte contains information about the imageă'                  typ:ă'                  1 ===> uncompressed  image  datas  with  a  DACă'                  tableă'                  2 ===> uncompressed RGB fileă'                  9 ===> runlength encoded datas with a DAC tableă'                 10 ===> runlength encoded RGB fileă'03H      WORD     origin:ă'                  This word contains the index of the first entryă'                  in the DAC table (mostly 0).ă'05H      WORD     colnumber:ă'                  This  word contains the number of colors in theă'                  DAC  table.  That's  not  the length of the DACă'                  table in byte!ă'07H      BYTE     entrybits:ă'                  Size of on entry in the DAC table. An entry hasă'                  16, 24 or 32 bits.ă'08H      WORD     xvalue:ă'                  The  x-value  of  the lower left corner of theă'                  TGA image (mostly 0).ă'0AH      WORD     yvalue:ă'                  The  y-value  of  the lower left corner of theă'                  TGA image (mostly 0).ă'0CH      WORD     widt:ă'                  The image width in pixels.ă'0EH      WORD     height:ă'                  The image height in pixels.ă'10H      BYTE     pixelsize:ă'                  Number of bits per pixel.ă'                  DAC images ===> valid values are 8 and 16ă'                  RGB images ===> valid values are 16, 24 and 32ă'11H      BYTE     descriptor:ă'                  The   image   descriptor   contains  additională'                  informations.ăă'The structure of the image descriptor:ăă'Bit 0 - 3: fill bitsă'Bit 4    : always 0ă'Bit 5    : 0  ===> image origin in the lower left corneră'           1  ===> image origin in the upper left corneră'Bit 6 - 7: 00 ===> the image rows are stored one after the otheră'           01 ===> first are stored the even rows (0, 2, 4 ...)ă'                   after  this  are  stored the odd rows (1, 3, 5 ...)ăă'The formula to calculate the length of the DAC table:ăă'daclength% = colnumber*entrybits/8ăă'After the  18 bytes of the TGA header is  stored  the informationă'block  in the TGA file, but the length of this block is mostly 0.ă'After  the information block is stored the DAC table and then theă'image datas.ăă'===========================================================================ă'Program starts here.                                                      =ă'===========================================================================ăăDECLARE SUB Reading (x%, y%)ăDECLARE SUB Waiting ()ăTYPE tgaheader                  'declare the headeră  info       AS STRING * 1      'length of image information blockă  colortyp   AS STRING * 1      'DAC table or BGR formată  imagetyp   AS STRING * 1      'compressed or uncompressedă  origin     AS INTEGER         'first entry in the DAC tableă  colnumber  AS INTEGER         'number of colors in the DAC tableă  entrybits  AS STRING * 1      'entry size in the DAC tableă  xvalue     AS INTEGER         'x co-ordinate lower left corneră  yvalue     AS INTEGER         'y co-ordinate lower left corneră  widt       AS INTEGER         'image widthă  height     AS INTEGER         'image heightă  pixelsize  AS STRING * 1      'number of bits per pixelă  descriptor AS STRING * 1      'image descriptorăEND TYPEăDIM header AS tgaheader         'define the headerăDIM set%(42)                    'machine code array for pixel set procedureăsetseg% = VARSEG(set%(0))ăsetoff% = VARPTR(set%(0))       'start address for pixel set routineăDIM text%(4)                    'machine code array for text mode procedureătextseg% = VARSEG(text%(0))ătextoff% = VARPTR(text%(0))     'start address text mode procedureăfile$ = "ELENA.TGA"             'change it, if necessaryăfilelength& = 0                 'length of the TGA fileădaclength% = 0                  'length of the DAC tableănumcolors% = 0                  'number of used colorsădacstart& = 0                   'start of the DAC values in theă				'TGA fileădacend& = 0                     'end of the DAC valuesăimstart& = 0                    'start of the image data in theă				'TGA fileăCLSăRESTORE setpixelăCALL Reading(setseg%, setoff%)  'read the machine code (pixel procedure)ăRESTORE textmodeăCALL Reading(textseg%, textoff%)'read the machine code (text mode routine)ăOPEN file$ FOR BINARY AS #1     'open the TGA fileăfilelength& = LOF(1)            'determine the file lengthăGET #1, 1, header               'read the headerăCLOSE #1                        'close the fileăIF ASC(header.colortyp) <> 1 THENă				'image hasn't a DAC tableă   PRINTă   PRINT "Sorry! This TGA image hasn't a DAC table."ă   ENDăEND IFăIF ASC(header.imagetyp) <> 1 THENă				'data must be uncompressedă   PRINTă   PRINT "Sorry! This TGA format isn't supported."ă   ENDăEND IFădaclength% = header.colnumber * ASC(header.entrybits) / 8ă				'calculate the length of th DAC tableănumcolors% = daclength% / 3     'calculate the number of used colorsădacstart& = 19 + ASC(header.info)ă				'calculate the DAC startădacend& = dacstart& + daclength%ă				'calculate the DAC endăPRINTăPRINT "Information about the image:"ăPRINT "============================"ăPRINTăPRINT "Number of used colors  ="; header.colnumberăPRINT "Image width            ="; header.widt; "Pixel"ăPRINT "Image height           ="; header.height; "Pixel"ăPRINTăPRINT "Please press any key ..."ăCALL WaitingăCLS                             'clear the screenăSCREEN 13                       'VGA 320 by 200 pixel and 256 colorsăOPEN file$ FOR BINARY AS #1     'open the TGA fileăSEEK #1, dacstart&              'start of the DAC tableăFOR register% = 0 TO 255        'set the DAC registersă  temp$ = SPACE$(3)             'temporary stringă  GET #1, , temp$               'read BGR valueă  red% = ASC(MID$(temp$, 3)) \ 4ă				'we need only 6 Bitsă  green% = ASC(MID$(temp$, 2)) \ 4ă  blue% = ASC(MID$(temp$, 1)) \ 4ă  OUT &H3C8, register%          'set registeră  OUT &H3C9, red%               'set the RGB valuesă  OUT &H3C9, green%ă  OUT &H3C9, blue%ăNEXT register%ăSEEK #1, dacend&                'start of the image dataătemp$ = SPACE$(1)               'temporary stringăFOR y% = header.height - 1 TO 0 STEP -1ă				'row loopă  FOR x% = 0 TO header.widt - 1ă				'column loopă    GET #1, , temp$             'read 1 color byteă    col% = ASC(temp$)           'calculate the color valueă    DEF SEG = setseg%           'set the segmentă    CALL ABSOLUTE(x%, y%, col%, setoff%)ă				'set the pixelă    DEF SEG                     'reset the segmentă  NEXT x%ăNEXT y%ăCLOSE #1                        'close the fileăCALL Waiting                    'wait for a keyăDEF SEG = textseg%ăCALL ABSOLUTE(textoff%)         'set the text modeăDEF SEGăCLSăENDăăsetpixel:ăDATA 55:        'push   bpăDATA 8B,EC:     'mov    bp,spăDATA 06:        'push   esăDATA 8B,76,08:  'mov    si,[bp+8]       ;si:=address y%ăDATA 8B,7E,0A:  'mov    di,[bp+10]      ;di:=address x%ăDATA 8B,5E,06:  'mov    bx,[bp+6]       ;bx:=address col%ăDATA B8,40,01:  'mov    ax,320          ;ax:=320=bytes per rowăDATA 8B,0C:     'mov    cx,[si]         ;cx:=y%ăDATA F7,E1:     'mul    cx              ;ax:=y%*320ăDATA 03,05:     'add    ax,[si]         ;ax:=y%*320+x%ăDATA 8B,F8:     'mov    di,ax           ;di:=ax=offset into video RAMăDATA B8,00,A0:  'mov    ax,0a000H       ;ax:=segment video RAMăDATA 8E,C0:     'mov    es,ax           ;es:di -> pixel positionăDATA 8B,07:     'mov    ax,[bx]         ;ax:=col%ăDATA 26,88,05:  'mov    byte ptr es:[di],ală		'                       ;set the pixelăDATA 07:        'pop    esăDATA 8B,E5:     'mov    sp,bpăDATA 5D:        'pop    bpăDATA CA,06,00:  'ret    6ăDATA *:         'end codeătextmode:ăDATA B8,03,00:  'mov    ax,0003H        ;function: set text modeăDATA CD,10:     'int    10H             ;transfer to BIOSăDATA CB:        'retăDATA *:         'end codeăăSUB Reading (x%, y%)ă  DEF SEG = x%                  'set the segmentă  FOR i% = 0 TO 199             'reading loopă    READ byte$                  'read 1 byteă    IF byte$ = "*" THEN EXIT FORă				'end codeă    POKE (y% + i%), VAL("&H" + byte$)ă				'write 1 byteă  NEXT i%ă  DEF SEG                       'reset the segmentăEND SUBăăSUB Waitingă  WHILE INKEY$ = ""ă  WENDăEND SUBăJames McMurrin                 MATHEMATICAL FORMULA DISPLAYED FidoNet QUIK_BAS Echo          08-28-96 (19:48)       QB, QBasic, PDS        31   679      FOREST.BAS  'A basic mathematical formula dressed up in a pretty wayă'Warning: this will take a while on slower computers!ă'By: James McMurrinăCOMMON SHARED NUM AS DOUBLEăSCREEN 13ăFOR PU = 1 TO 255ă OUT &H3C8, PUă OUT &H3C9, PU / 2 + 20ă OUT &H3C9, PU / 4 + 10ă OUT &H3C9, PU / 6 + 5ăNEXT PUăFOR L = 3 TO 3.996875 STEP .003125ă NUM = .5ă  FOR Q = 1 TO 50ă   NUM = NUM * L * (1 - NUM)ă  NEXT Qă  DOă   NUM = NUM * L * (1 - NUM)ă   DISROW = 200 - (NUM * 200)ă   P = POINT(DISCOL, DISROW)ă   IF P = 255 THENă    EXIT DOă   ELSEă    P = P + 1ă    LINE (DISCOL, DISROW)-(DISCOL, DISROW), Pă   END IFă  LOOPă DISCOL = DISCOL + 1ăNEXT LăBEEPăWHILE INKEY$ = "": WENDăLuke Molnar                    GORAU SHADED POLYGONS          Blood225@aol.com               09-01-96 (14:51)       QB, QBasic, PDS        261  5879     GORAU.BAS   ă' Gorau Shaded Polygons.  Written by Luke Molnar.  A Molnar \ Kucalabaă' Productions program.  Tons of concept and execution help provided byă' David Eichorn.  If you are one of those people that need really obviousă' things pointed out, this is REALLY SLOW!  I don't think many people ină' their right mind would try to write a Gorau routine in QBasic and demandă' that it be fast enough for animation, but this is pretty nice lookingă' if I do say so myself. :-)ăăă' Another QBasic graphics "demo" that appeared first at :ăă' WWW : http://members.aol.com/mkwebsite/index.htmlă' FTP : ftp://users.aol.com/blood225/ăăăăDECLARE SUB GorauFill (Points() AS ANY)ăDECLARE SUB Delay (Seconds!)ăDECLARE SUB ChangeColors ()ăDECLARE FUNCTION ValidPolPoints! ()ăăă'$DYNAMICăRANDOMIZE TIMERăăCLSăSCREEN 13ăăăTYPE GorTypeă Y1 AS INTEGERă Y2 AS INTEGERă C1 AS INTEGERă C2 AS INTEGERăEND TYPEăăTYPE RoutineTypeă X AS INTEGERă Y AS INTEGERă C AS INTEGERăEND TYPEăăăăDIM SHARED PolPoints(0 TO 3) AS RoutineTypeăăăCOLOR 230ăăDOă ă     ThisShouldBeASub% = ValidPolPoints ' Generate decent polygon pointsăă     ChangeColors                       ' Randomly assign a color schemeăă     GorauFill PolPoints()              ' Fill the 4 point polygonă ă     Delay 1                            ' Give user time to admire the beauty                         ăă  User$ = INKEY$                        ' Store any keypresses  ăă  CLS                                   ' Clear the screenăăLOOP UNTIL User$ <> ""                  ' Keep going until they press a keyăăCLSăSCREEN 0ăWIDTH 80ăSYSTEMăăREM $STATICăSUB ChangeColorsăă' Changes the palette to one of 6 possible color variationsăăDifColors% = INT(RND * 6) + 1ăăFOR X% = 1 TO 230ăă OUT &H3C8, X%ăă  SELECT CASE DifColors%ă   CASE 1: OUT &H3C9, EasyVal!: OUT &H3C9, 0: OUT &H3C9, 0ă   CASE 2: OUT &H3C9, 0: OUT &H3C9, EasyVal!: OUT &H3C9, 0ă   CASE 3: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, EasyVal!ă   CASE 4: OUT &H3C9, EasyVal!: OUT &H3C9, EasyVal!: OUT &H3C9, EasyVal!ă   CASE 5: OUT &H3C9, EasyVal!: OUT &H3C9, EasyVal!: OUT &H3C9, 0ă   CASE 6: OUT &H3C9, EasyVal!: OUT &H3C9, 0: OUT &H3C9, EasyVal!ă  END SELECTăă EasyVal! = EasyVal! + .273913ăăNEXTăăEND SUBăăSUB Delay (Seconds!)ăFuture! = TIMER + Seconds!ăDOăLOOP UNTIL TIMER >= Future! OR TIMER - (TIMER - Seconds!) < 0ăEND SUBăăSUB GorauFill (Points() AS RoutineType)ăăDIM Scan(0 TO 320) AS GorTypeăăXMax% = -32767ăXmin% = 32767ăăFOR X% = 0 TO 3ă  IF XMax% < Points(X%).X THEN XMax% = Points(X%).Xă  IF Xmin% > Points(X%).X THEN Xmin% = Points(X%).Xă  PSET (Points(X%).X, Points(X%).Y), 230ăNEXTăăă IF Xmin% < 0 THEN Xmin% = 0ă IF XMax% > 320 THEN XMax% = 320ă IF Xmin% > 320 THEN EXIT SUBă IF XMax% < 0 THEN EXIT SUBăăFOR X% = Xmin% TO XMax%ă  Scan(X%).Y1 = -32767ăNEXTăăăăFOR X% = 0 TO 3ăă  Val1% = X%ă  Val2% = (X% + 1) MOD 4ăă    IF Points(Val1%).X > Points(Val2%).X THENă      SWAP Val1%, Val2%ă    END IFă ă  Y1% = Points(Val1%).Yă  x1% = Points(Val1%).Xă  Col1% = Points(Val1%).Căă  Y2% = Points(Val2%).Yă  x2% = Points(Val2%).Xă  Col2% = Points(Val2%).Căă  YDelta% = Y2% - Y1%ă ă  XDelta% = x2% - x1%ă  CDelta% = Col2% - Col1%ă ă  IF XDelta% <> 0 THENă   YSlope! = YDelta% / XDelta%ă   CSlope! = CDelta% / XDelta%ă  ELSEă   YSlope% = 0ă   CSlope% = 0ă  END IFăă  YVal! = Y1%ă  CVal! = Col1%ă ă      FOR I% = x1% TO x2%ă       ă        IF Scan(I%).Y1 = -32767 THENă          Scan(I%).Y1 = YVal!ă          Scan(I%).C1 = CVal!ă        ELSEă          Scan(I%).Y2 = YVal!ă          Scan(I%).C2 = CVal!ă        END IFăă        YVal! = YVal! + YSlope!ă        CVal! = CVal! + CSlope!ă     ă      NEXTăăNEXTăăăăFOR X% = Xmin% TO XMax%ăă  IF Scan(X%).Y1 > Scan(X%).Y2 THENă    Y2% = Scan(X%).Y1ă    Y1% = Scan(X%).Y2ă    Col2% = Scan(X%).C1ă    Col1% = Scan(X%).C2ă  ELSEă    Y2% = Scan(X%).Y2ă    Y1% = Scan(X%).Y1ă    Col2% = Scan(X%).C2ă    Col1% = Scan(X%).C1ă  END IFăă  YDelta% = Y2% - Y1%ă ă  IF YDelta% = 0 THEN YDelta% = 1ăă  CDelta% = Col2% - Col1%ă  CSlope! = CDelta% / YDelta%ă  CVal! = Col1%ăă    FOR I% = Scan(X%).Y1 TO Scan(X%).Y2ă      PSET (X%, I%), CVal!ă      CVal! = CVal! + CSlope!ă    NEXTăăNEXTăăăăEND SUBăăFUNCTION ValidPolPointsăă' There are certain occurences with this routine in which the polygon willă' not be correctly filled in.  This routine prevents those polygons fromă' happening.ăăFOR I% = 0 TO 3ă ă  SELECT CASE I%ă    CASE 0:ă           PolPoints(0).X = INT(RND * 60) + 1ă           PolPoints(0).Y = INT(RND * 60) + 1ă    CASE 1:ă           PolPoints(1).X = INT(RND * 160) + 160ă           PolPoints(1).Y = INT(RND * 100) + 2ă'           IF PolPoints(1).Y < PolPoints(0).Y THEN PolPoints(1).Y = PolPoints(0).Y + INT(RND * (100 - PolPoints(0).Y))ă    CASE 2:ă           PolPoints(2).X = INT(RND * 160) + 160ă'           IF PolPoints(2).X < PolPoints(1).X THEN PolPoints(2).X = PolPoints(1).X + 1ă           PolPoints(2).Y = INT(RND * 50) + 150ă    CASE 3:ă           PolPoints(3).X = INT(RND * 160) + 1ă           IF PolPoints(3).X < PolPoints(0).X THEN PolPoints(3).X = PolPoints(0).X + INT(RND * (160 - PolPoints(0).X))ă           PolPoints(3).Y = INT(RND * 100) + 100ă'           IF PolPoints(3).Y < PolPoints(2).Y THEN PolPoints(3).Y = PolPoints(2).Y + INT(RND * (100 - PolPoints(2).Y))ă  END SELECTăă PolPoints(I%).C = -1ăăNEXTăă ă' Make one corner black and one corner the brightest color; the other 2 randomă  ă   DO UNTIL BlackOne% <> BrightOne%ă     BlackOne% = INT(RND * 3)ă     BrightOne% = INT(RND * 3)ă   LOOPăă  PolPoints(BlackOne%).C = 0ă  PolPoints(BrightOne%).C = 230ăă  FOR I% = 0 TO 3ă   IF PolPoints(I%).C = -1 THEN PolPoints(I%).C = INT(RND * 230) + 1ă  NEXTăăEND FUNCTIONăăJonathan Leger                 FAST 320X200X256 PCX VIEWER    leger@mail.dtx.net             09-02-96 (10:10)       QB, QBasic, PDS        152  5773     PCX.BAS     '***** PCX.BAS *****************************************************ă'*** The original code for this routine was found in VGAPCX.BAS  ***ă'*** At first I optomized the code in that file, and eventually  ***ă'*** I ended up re-writing the whole thing.  That PCX loader did ***ă'*** a number of things differently, including loading the color ***ă'*** palette _last_.  This routine loads the palette first,  so  ***ă'*** you can see the "correct" picture as the PCX is loading. In ***ă'*** addition to that, I use all integers for speed and load the ***ă'*** file in chunks of 2,000 bytes (instead of 1 byte at a time, ***ă'*** as in the other routine, VGAPCX.BAS).  I thank the uknown   ***ă'*** author of that original version, VGAPCX.BAS, because if he  ***ă'*** had not put out that sample code, this PCX loader would not ***ă'*** be possible.                                                ***ă'*******************************************************************ă'*** On a 486dx2-66, the old version (VGAPCX.BAS) loaded the PCX ***ă'*** in about 21 seconds.  This new version does so in about 1.5 ***ă'*** seconds.  The  speed varies depending on the  level of file ***ă'*** compression attained by the PCX file.                       ***ă'*******************************************************************ăDEFINT A-ZăăDECLARE SUB ShowPCX (file$)ăă'*** If you're using Qbasic 1.1, change this line toă'*** ShowPCX "<pcxfile>.pcx"ăShowPCX COMMAND$ăăWHILE INKEY$ = "": WENDăSCREEN 0: WIDTH 80ăă'*** Loads a Version 5, 320x200x256c PCX file.ă'*** If you have any questions or comments about any of this code,ă'*** please contact me, Jonathan Leger, at leger@mail.dtx.net.ăSUB ShowPCX (file$)ăăSCREEN 13ăăDIM pcxpal AS STRING * 768, pcxversion AS STRING * 1ăăpcxnum = FREEFILEăOPEN file$ FOR BINARY AS #pcxnumăă   '*** Get the PCX version from the header.ă   GET #pcxnum, 2, pcxversionăă   '*** If we're using version 5, then load the palette.ă   IF ASC(pcxversion) = 5 THENă      '*** Grab the palette out of the file.ă      GET #1, LOF(pcxnum) - 767, pcxpalăă      '*** Start with color 0.ă      pal = 0ăă      '*** Grab the red/green/blue value from our palette (PCXPAL) andă      '*** send them to the monitor using OUT.ă      FOR p = 1 TO 768 STEP 3ă         OUT &H3C8, pală         red% = INT(ASC(MID$(pcxpal, p, 1)) / 4)ă         OUT &H3C9, red%ă         green% = INT(ASC(MID$(pcxpal, p + 1, 1)) / 4)ă         OUT &H3C9, green%ă         blue% = INT(ASC(MID$(pcxpal, p + 2, 1)) / 4)ă         OUT &H3C9, blue%ă         pal = pal + 1ă      NEXT păă   END IFă  ă   '*** Jump past the file header.ă   SEEK #pcxnum, 129ăă   '*** We'll be sending the output the the screen, so our segmentă   '*** is &HA000 (VGA screen memory) and our offset is 0.  You cană   '*** change these values to, say, decompress the image into ană   '*** array or something.ă   fxoffset = 0: fxsegment = &HA000ăă   '*** We'll be reading chunks of 2,000 bytes.  You can increase oră   '*** decrease this depending on your needs.  I noticed little oră   '*** no difference when the chunk size went past 2,000, so I leftă   '*** it at 2,000 to add as little over-head as possible with maximumă   '*** speed.ă   datasize = 2000ăă   '*** Load our first chunk of data and point to the beginning of thată   '*** data.ă   pcxdata$ = INPUT$(datasize, pcxnum)ă   datacount = 1ăă   '*** To increase speed, we'll be drawing the screen in two loops,ă   '*** that way we can use integers to point to the next pixel insteadă   '*** of long integers.  Doing this gains tremendous speed.ă   FOR half = 1 TO 2ăă      '*** On the second loop, this will add &H7D0 (32000) to oură      '*** segment so we'll be writing to the second half of the screen.ă      '*** On the first loop, this will simply set our segment to &HA000.ă      fxtotal = fxsegment + fxoffsetă      DEF SEG = fxtotalăă      FOR c = 0 TO 31999ăă         '*** If we're out of data, then we need to load the next chunk.ă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFăă         '*** Get the next byte from our data chunk.ă         clr = ASC(MID$(pcxdata$, datacount, 1))ă         datacount = datacount + 1ăă         '*** If we're out of data, then we load the next chunk.ă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFă        ă         '*** If the byte we pulled from the data has bit 6 and 7 set,ă         '*** (which would make the value greater than 192), then thată         '*** means we'll be repeating a color.  So we pull the nextă         '*** byte from our data chunk (which is the color), and pută         '*** it on the screen CLR - 192 times (in other words, weă         '*** take the value of the first 5 bits in the byte and pută         '*** the pixel to the screen that many times.)ă         IF clr > 192 THENă            LPS = clr - 192ă            clr = ASC(MID$(pcxdata$, datacount, 1))ă            datacount = datacount + 1ă            FOR L = LPS TO 1 STEP -1ă               POKE c, clră               c = c + 1ă            NEXT Lă            c = c - 1ă         ELSEă         '*** Since the byte was less than 192, then we just poke theă         '*** pixel to the screen.ă            POKE c, clră         END IFă      NEXT că      '*** We'll move to the second half of the screen by adding 32,000ă      '*** (HEX = 7D0) bytes to our segment value.ă      fxoffset = fxoffset + &H7D0ă   NEXT halfăă'*** All done!  Close the file.ăCLOSE pcxnumăă'*** Return to BASIC's default segment. Very important!ăDEF SEGăăEND SUBăJonathan Leger                 GRAPHICS LOADER UPDATE         leger@mail.dtx.net             09-02-96 (10:10)       QB, QBasic, PDS        981  27476    FX2.BAS     DEFINT A-Zăă'**** Screen routinesăDECLARE SUB LoadGif (file$)ăDECLARE SUB LoadPcx (file$)ăDECLARE SUB BsaveScreen (file$)ăDECLARE SUB GiftoBSAVE (gif$, bsave$, pal$)ăă'*** Palette routinesăDECLARE SUB GetPal (pal())ăDECLARE SUB PutPal (pal())ăDECLARE SUB SavePal (file$)ăDECLARE SUB LoadPal (file$)ăDECLARE SUB RotatePal (direction, pal())ăDECLARE SUB CyclePal (direction, pal(), numcycles)ăă'*** Palette fxăDECLARE SUB FadeOut (pal())ăDECLARE SUB FadeIn (pal())ăDECLARE SUB BlackOut ()ăă'*** Drawing RoutinesăDECLARE SUB ClrScr (col)ăă'*** Font routinesăDECLARE SUB Font (Text$, XStart, Ystart, Xscale, Yscale, Style, clr)ăDECLARE SUB LoadFont ()ăDECLARE SUB MakeFont ()ăDECLARE SUB FontPal ()ăă'*** EMS routinesăDECLARE FUNCTION NumEMSHandles% ()ăDECLARE FUNCTION NumEMSPages% (Handle%)ăDECLARE FUNCTION GetEMS% (numpages%)ăDECLARE FUNCTION EMSPages% (func%)ăDECLARE FUNCTION PageFrame% ()ăDECLARE FUNCTION EMSstatus% ()ăDECLARE SUB ReleaseEMS (Handle%)ăDECLARE SUB MapEMS (Handle%, block%)ăă'*** Memory manipulation routinesăDECLARE SUB MemCopy (fromseg, fromoff, toseg, tooff, numbytes)ăDECLARE SUB FillChar (segment, offset, value, bytes)ăă'*** MiscelaneousăDECLARE SUB WaitRetrace ()ăăOPTION BASE 0ăă'$STATICăDIM pal1(0 TO 255, 3) AS INTEGERăDIM pal2(0 TO 255, 3) AS INTEGERăDIM SHARED FontBuf(0) AS STRING * 10368ăă'$DYNAMICăăLoadFontăăSCREEN 13ăăGetPal pal1()ăăFontPalăGetPal pal2()ăBlackOutăăFont "BASIC FX", 50, 75, 3, 3, 3, 70ăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăFadeOut pal2()ăCLSăăFont "The font routines were written by:", 0, 0, 1, 1, 3, 120ăFont "Luke Molnar", 70, 25, 2, 2, 3, 1ăFont "Other routines written/collected by:", 0, 100, 1, 1, 3, 120ăFont "Jonathan Leger", 40, 125, 2, 2, 3, 1ăăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăăFadeOut pal2()ăCLSăăPutPal pal1()ăăFont "LoadGif()", 115, 100, 1, 1, 5, 15ăFont "press a key", 105, 125, 1, 1, 5, 15ăWHILE INKEY$ = "": WENDăăLoadGif "letterma.gif"ăăFOR snd = 1000 TO 1500 STEP 100ă   SOUND snd, .1ă   SOUND snd + 100, .1ă   SOUND snd + 200, .1ăNEXT sndăăWHILE INKEY$ = "": WENDăăCLSăPutPal pal1()ăăFont "LoadPcx()", 115, 100, 1, 1, 5, 15ăFont "press a key", 105, 125, 1, 1, 5, 15ăWHILE INKEY$ = "": WENDăăLoadPcx "bwface.pcx"ăFOR snd = 1000 TO 1500 STEP 100ă   SOUND snd, .1ă   SOUND snd + 100, .1ă   SOUND snd + 200, .1ăNEXT sndăăWHILE INKEY$ = "": WENDăăIF EMSstatus THENă   IF EMSPages(1) >= 4 THENă      PCXHandle = GetEMS(4)ă      MapEMS PCXHandle, 0ă      MemCopy &HA000, 0, PageFrame, 0, &HFA00ă      CLSă      Font "The previous picture has been", 0, 0, 1, 1, 5, 15ă      Font "loaded into EMS memory.", 0, 25, 1, 1, 5, 15ă      Font "Press any key to load picture.", 0, 50, 1, 1, 5, 15ă      WHILE INKEY$ = "": WENDă      MemCopy PageFrame, 0, &HA000, 0, &HFA00ă      WHILE INKEY$ = "": WENDă      ReleaseEMS PCXHandleă   END IFăEND IFăăGetPal pal2()ăăFont "CyclePal()", 115, 100, 1, 1, 5, 15ăăDO UNTIL LEN(INKEY$) > 0ă   CyclePal 1, pal2(), 1ăLOOPăăBlackOutăCLSăăFontPalăGetPal pal2()ăFont "Making differnt color backgrounds", 0, 0, 1, 1, 5, 50ăFont "is easy (and fast!) with ClrScr()...", 0, 25, 1, 1, 5, 50ăFont "press a key", 105, 125, 1, 1, 5, 50ăWHILE INKEY$ = "": WENDăăRANDOMIZE TIMERăFOR x = 50 TO 200 STEP 40ă   ClrScr xă   DO: LOOP UNTIL LEN(INKEY$)ăNEXT xăăFillChar &HA000, 0, 0, &HFA00ăBlackOutăăFont "End of..", 0, 25, 1, 1, 5, 18ăFont "BASIC FX", 50, 75, 3, 3, 3, 70ăFont "...Demo", 240, 145, 1, 1, 5, 18ăFadeIn pal2()ăăWHILE INKEY$ = "": WENDăFadeOut pal2()ăCLSăPutPal pal1()ăăSCREEN 0ăWIDTH 80, 25ăENDăăREM $STATICăSUB BlackOutăă   FOR clr = 0 TO 255ă      OUT &H3C8, clră      OUT &H3C9, 0ă      OUT &H3C9, 0ă      OUT &H3C9, 0ă   NEXT clrăăEND SUBăăSUB BsaveScreen (file$)ăăDEF SEG = &HA000ăBSAVE file$, 0, 64000ăDEF SEGăăEND SUBăăSUB ClrScr (col)ăăFillChar &HA000, 0, col, &HFA00ăăEND SUBăăSUB CyclePal (direction, pal(), numcycles)ăăFOR x = 1 TO numcyclesă   WaitRetraceă   RotatePal direction, pal()ăNEXT xăăEND SUBăă'************* EMSPages%() ****************ă'*** When func% is 0, returns the total ***ă'*** number of 16k pages, when func% is ***ă'*** 1, returns the number of available ***ă'*** 16k pages.                         ***ă'******************************************ăFUNCTION EMSPages% (func%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(66) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(8) + CHR$(137) + CHR$(21) + CHR$(93) + CHR$(203)ăăTotalPages% = 0: AvailablePages% = 0ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(TotalPages%, AvailablePages%, SADD(asm$))ăDEF SEGăăIF func% = 0 THENă   EMSPages% = TotalPages%ăELSEă   EMSPages% = AvailablePages%ăEND IFăăEND FUNCTIONăă'**************** EMSstatus%() ******************ă'*** Returns whether EMS is available.  -1 is ***ă'*** returned if it is available, 0 otherwise ***ă'************************************************ăFUNCTION EMSstatus%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(64) + CHR$(205) + CHR$(103) + CHR$(176) + CHR$(0)ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(6) + CHR$(137) + CHR$(7)ăasm$ = asm$ + CHR$(93) + CHR$(203)ăăEMS% = -1ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(EMS%, SADD(asm$))ăDEF SEGăăIF EMS% = 0 THENă   EMSstatus = -1         'EMS installed, set to BASIC's TRUE value.ăELSEă   EMSstatus = 0          'EMS not installed, set to FALSE.ăEND IFăăEND FUNCTIONăăSUB FadeIn (pal())ăăDIM Tmp(0 TO 255, 3)ăăFOR lp = 1 TO 64ă   FOR clr = 0 TO 255ă      FOR rgb = 1 TO 3ă         IF Tmp(clr, rgb) < pal(clr, rgb) THENă            Tmp(clr, rgb) = Tmp(clr, rgb) + 1ă         END IFă      NEXT rgbă      OUT &H3C8, clră      OUT &H3C9, Tmp(clr, 1)ă      OUT &H3C9, Tmp(clr, 2)ă      OUT &H3C9, Tmp(clr, 3)ă   NEXT clrăNEXT lpăăăEND SUBăăSUB FadeOut (pal())ăăDIM Tmp(0 TO 255, 3)ăăFOR clr = 0 TO 255ă   FOR rgb = 1 TO 3ă      Tmp(clr, rgb) = pal(clr, rgb)ă   NEXT rgbăNEXT clrăăFOR lp = 1 TO 64ă   FOR clr = 0 TO 255ă      FOR rgb = 1 TO 3ă         IF Tmp(clr, rgb) > 0 THENă            Tmp(clr, rgb) = Tmp(clr, rgb) - 1ă         END IFă      NEXT rgbă      OUT &H3C8, clră      OUT &H3C9, Tmp(clr, 1)ă      OUT &H3C9, Tmp(clr, 2)ă      OUT &H3C9, Tmp(clr, 3)ă   NEXT clrăNEXT lpăăăEND SUBăăSUB FillChar (segment, offset, value, bytes)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(78) + CHR$(6) + CHR$(139) + CHR$(86) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12) + CHR$(30) + CHR$(142)ăasm$ = asm$ + CHR$(216) + CHR$(139) + CHR$(94) + CHR$(10) + CHR$(136)ăasm$ = asm$ + CHR$(23) + CHR$(67) + CHR$(226) + CHR$(251) + CHR$(31)ăasm$ = asm$ + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL segment, BYVAL offset, BYVAL value, BYVAL bytes, SADD(asm$))ăDEF SEGăăEND SUBăăSUB Font (Text$, XStart, Ystart, Xscale, Yscale, Style, clr)ăăpx = XStart  ' physical x and physical yăpy = YstartăăLHeight = Yscale * 8ăOptimize = 63 \ LHeight ' Any constant math operations done multipe timesă                          ' in the main loop should, well, not be doneă                          ' in the main loop.ăăă' Instead of wasting our time with all this MID$ garbage to access bytes ină' font buffer, we'll just take a PEEK directly at them.ăDEF SEG = VARSEG(FontBuf(0))ăă FOR h = 1 TO LEN(Text$)ă  FPtr = 81 * (ASC(MID$(Text$, h, 1)) - 1) - 1ă  FOR x = 0 TO 8ă   FOR y = 0 TO 8ăă    col = PEEK(VARPTR(FontBuf(0)) + FPtr)ă    FPtr = FPtr + 1ă    IF col THENă     SELECT CASE Styleă      ' If you desire a y scale factor greater than 8, youă      ' must change the division to higher precision...very slow.ă      ' Or, you could find a way around it.ă      CASE 1: PSET (px, py), Optimize * (py - Ystart) + clră              LINE (px, py)-(px, py + Yscale), Optimize * (py - Ystart) + clră      ' Notice how this style only uses 54 colors, so you can see the topă      ' of the letters where they would normally be blackă      CASE 2: CIRCLE (px, py), Yscale, (54 \ LHeight) * (py - Ystart) + clr + 9, , , 4ă      CASE 3:  FOR sty = px TO px + Xscaleă                FOR sty2 = py TO py + Yscaleă                 PSET (sty, sty2), Optimize * (sty2 - Ystart) + clră                 IF POINT(sty - 1, sty2) = 0 THEN PSET (sty - 1, sty2), 63 + clr - 1ă                 IF POINT(sty, sty2 - 1) = 0 THEN PSET (sty, sty2 - 1), 63 + clr - 1ă                NEXTă               NEXTă       CASE 4: FOR sty = px TO px + Xscaleă                FOR sty2 = py TO py + Yscaleă                 PSET (sty + .4 * sty2, sty2), Optimize * (sty2 - Ystart) + clră                 IF POINT((sty - 1) + .4 * sty2, sty2) = 0 THEN PSET ((sty - 1) + .4 * sty2, sty2), 63 + clr - 1ă                NEXTă               NEXTă       CASE ELSEă            PSET (px, py), clră     END SELECTă    END IFă    py = py + Yscaleă   NEXTă  px = px + Xscaleă  py = Ystartă  NEXTă NEXT hăDEF SEGăăEND SUBăăSUB FontPalăFOR x = 1 TO 63ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, 0ă OUT &H3C9, 0ăNEXTăFOR x = 64 TO 126ă OUT &H3C8, xă OUT &H3C9, 0ă OUT &H3C9, xă OUT &H3C9, 0ăNEXTăFOR x = 127 TO 189ă OUT &H3C8, xă OUT &H3C9, 0ă OUT &H3C9, 0ă OUT &H3C9, xăNEXTăFOR x = 190 TO 252ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, 0ă OUT &H3C9, xăNEXTăFOR x = 253 TO 255ă OUT &H3C8, xă OUT &H3C9, xă OUT &H3C9, xă OUT &H3C9, xăNEXTăEND SUBăă'********************** GetEMS%() ********************ă'*** Function returns the handle value for a block ***ă'*** of EMS memory that consists of numpages% 16k  ***ă'*** pages.  You _must_ keep the handle value for  ***ă'*** later calls that require the handle.  Example:***ă'***                                               ***ă'*** EmsHandle% = GetEMS%(5)                       ***ă'***                                               ***ă'*** EmsHandle% holds the handle info for a block  ***ă'*** of memory 5 16k pages in size, oh 80k.        ***ă'*****************************************************ăFUNCTION GetEMS% (numpages%)ăă'pageoffset% = EMSPages%(0) - EMSPages%(1)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(94) + CHR$(8) + CHR$(180) + CHR$(67) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(139) + CHR$(94) + CHR$(6) + CHR$(137)ăasm$ = asm$ + CHR$(23) + CHR$(93) + CHR$(203)ăăHandle% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL numpages%, Handle%, SADD(asm$))ăDEF SEGăă'asm$ = ""ă'asm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ă'asm$ = asm$ + CHR$(86) + CHR$(8) + CHR$(139) + CHR$(126) + CHR$(6)ă'asm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(10) + CHR$(177) + CHR$(0)ă'asm$ = asm$ + CHR$(48) + CHR$(237) + CHR$(180) + CHR$(68) + CHR$(136)ă'asm$ = asm$ + CHR$(200) + CHR$(137) + CHR$(243) + CHR$(205) + CHR$(103)ă'asm$ = asm$ + CHR$(70) + CHR$(65) + CHR$(57) + CHR$(254) + CHR$(117)ă'asm$ = asm$ + CHR$(242) + CHR$(93) + CHR$(203)ă'ă'DEF SEG = VARSEG(asm$)ă'   CALL Absolute(BYVAL pageoffset%, BYVAL Handle%, BYVAL numpages%, SADD(asm$))ă'DEF SEGăăGetEMS% = Handle%ăăEND FUNCTIONăăSUB GetPal (pal())ă   FOR clr = 0 TO 255ă      OUT &H3C7, clră      pal(clr, 1) = INP(&H3C9)ă      pal(clr, 2) = INP(&H3C9)ă      pal(clr, 3) = INP(&H3C9)ă   NEXT clrăEND SUBăăSUB GiftoBSAVE (gif$, bsave$, pal$)ăăLoadGif gif$ăBsaveScreen bsave$ăSavePal pal$ăăEND SUBăăSUB LoadFontăă   fontfile = FREEFILEăă   OPEN "basefont.dat" FOR BINARY AS #fontfileăă   IF LOF(fontfile) < 20655 THENă      SCREEN 0: WIDTH 80, 25ă      COLOR 7ă      PRINT "Font data file missing or corrupt.  Rebuild it? [(Y)/n]";ă      DOă         key$ = UCASE$(INKEY$)ă      LOOP UNTIL key$ = "N" OR key$ = "Y"ă      CLOSE fontfileă      IF key$ = "N" THEN EXIT SUBă      MakeFontă      fontfile = FREEFILEă      OPEN "basefont.dat" FOR BINARY AS #fontfileă   END IFăă   GET #fontfile, , FontBuf(0)ă   CLOSE #fontfileăăEND SUBăăSUB LoadGif (file$)ăDIM byte AS STRING * 1ăDIM Prefix(4095), Suffix(4095), OutStack(4095), shiftout(8)ăDIM Ybase AS LONG, powersof2(11) AS LONG, WorkCode AS LONGăăFOR a = 0 TO 7: shiftout(8 - a) = 2 ^ a: NEXT aăFOR a = 0 TO 11: powersof2(a) = 2 ^ a: NEXT aăăgiffile = FREEFILEăOPEN file$ FOR BINARY AS #giffileăfile$ = "      ": GET #giffile, , file$ăIF file$ <> "GIF87a" THEN PRINT "Not a GIF87a file.": ENDăGET #giffile, , TotalX: GET #giffile, , TotalY: GOSUB GetByteăNumColors = 2 ^ ((a AND 7) + 1): NoPalette = (a AND 128) = 0ăGOSUB GetByte: Background = aăGOSUB GetByte: IF a <> 0 THEN PRINT "Bad screen descriptor.": ENDăIF NoPalette = 0 THEN P$ = SPACE$(NumColors * 3): GET #giffile, , P$ăDOă    GOSUB GetByteă    IF a = 44 THENă        EXIT DOă    ELSEIF a <> 33 THENă        PRINT "Unknown extension type.": ENDă    END IFă    GOSUB GetByteă    DO: GOSUB GetByte: file$ = SPACE$(a): GET #giffile, , file$: LOOP UNTIL a = 0ăLOOPăGET #giffile, , XStart: GET #giffile, , Ystart: GET #giffile, , XLength: GET #giffile, , YLengthăXEnd = XStart + XLength: YEnd = Ystart + YLength: GOSUB GetByteăIF a AND 128 THEN PRINT "Can't handle local colormaps.": ENDăInterlaced = a AND 64: PassNumber = 0: PassStep = 8ăGOSUB GetByteăClearCode = 2 ^ aăEOSCode = ClearCode + 1ăFirstCode = ClearCode + 2: NextCode = FirstCodeăStartCodeSize = a + 1: CodeSize = StartCodeSizeăStartMaxCode = 2 ^ (a + 1) - 1: MaxCode = StartMaxCodeăăBitsIn = 0: BlockSize = 0: BlockPointer = 1ăx = XStart: y = Ystart: Ybase = y * 320&ăăIF ActivePageNum = VisiblePageNum THENă   DEF SEG = &HA000ăELSEă   DEF SEG = VideoSegmentăEND IFăăIF NoPalette = 0 THENă    OUT &H3C7, 0: OUT &H3C8, 0ă    FOR a = 1 TO NumColors * 3: OUT &H3C9, ASC(MID$(P$, a, 1)) \ 4: NEXT aăEND IFăLINE (0, 0)-(319, 199), Background, BFăDOă    GOSUB GetCodeă    IF Code <> EOSCode THENă        IF Code = ClearCode THENă            NextCode = FirstCodeă            CodeSize = StartCodeSizeă            MaxCode = StartMaxCodeă            GOSUB GetCodeă            CurCode = Code: LastCode = Code: LastPixel = Codeă            IF x < 320 THEN POKE x + Ybase, LastPixelă            x = x + 1: IF x = XEnd THEN GOSUB NextScanLineă        ELSEă            CurCode = Code: StackPointer = 0ă            IF Code > NextCode THEN EXIT DOă            IF Code = NextCode THENă                CurCode = LastCodeă                OutStack(StackPointer) = LastPixelă                StackPointer = StackPointer + 1ă            END IFăă            DO WHILE CurCode >= FirstCodeă                OutStack(StackPointer) = Suffix(CurCode)ă                StackPointer = StackPointer + 1ă                CurCode = Prefix(CurCode)ă            LOOPăă            LastPixel = CurCodeă            IF x < 320 THEN POKE x + Ybase, LastPixelă            x = x + 1: IF x = XEnd THEN GOSUB NextScanLineăă            FOR a = StackPointer - 1 TO 0 STEP -1ă                IF x < 320 THEN POKE x + Ybase, OutStack(a)ă                x = x + 1: IF x = XEnd THEN GOSUB NextScanLineă            NEXT aăă            IF NextCode < 4096 THENă                Prefix(NextCode) = LastCodeă                Suffix(NextCode) = LastPixelă                NextCode = NextCode + 1ă                IF NextCode > MaxCode AND CodeSize < 12 THENă                    CodeSize = CodeSize + 1ă                    MaxCode = MaxCode * 2 + 1ă                END IFă            END IFă            LastCode = Codeă        END IFă    END IFăLOOP UNTIL DoneFlag OR Code = EOSCodeăGOTO LeaveProcăăGetByte: file$ = " ": GET #giffile, , file$: a = ASC(file$): RETURNăăNextScanLine:ă    IF Interlaced THENă        y = y + PassStepă        IF y >= YEnd THENă            PassNumber = PassNumber + 1ă            SELECT CASE PassNumberă            CASE 1: y = 4: PassStep = 8ă            CASE 2: y = 2: PassStep = 4ă            CASE 3: y = 1: PassStep = 2ă            END SELECTă        END IFă    ELSEă        y = y + 1ă    END IFă    x = XStart: Ybase = y * 320&: DoneFlag = y > 199ăRETURNăGetCode:ă    IF BitsIn = 0 THEN GOSUB ReadBufferedByte: LastChar = a: BitsIn = 8ă    WorkCode = LastChar \ shiftout(BitsIn)ă    DO WHILE CodeSize > BitsInă        GOSUB ReadBufferedByte: LastChar = aă        WorkCode = WorkCode OR LastChar * powersof2(BitsIn)ă        BitsIn = BitsIn + 8ă    LOOPă    BitsIn = BitsIn - CodeSizeă    Code = WorkCode AND MaxCodeăRETURNăReadBufferedByte:ă    IF BlockPointer > BlockSize THENă        GOSUB GetByte: BlockSize = aă        file$ = SPACE$(BlockSize): GET #giffile, , file$ă        BlockPointer = 1ă    END IFă    a = ASC(MID$(file$, BlockPointer, 1)): BlockPointer = BlockPointer + 1ăRETURNăLeaveProc:ăCLOSEăăEND SUBăăSUB LoadPal (file$)ăăpalfile = FREEFILEăOPEN file$ FOR BINARY AS palfileăăFOR clr = 0 TO 255ă   OUT &H3C8, clră   OUT &H3C9, ASC(INPUT$(1, palfile))ă   OUT &H3C9, ASC(INPUT$(1, palfile))ă   OUT &H3C9, ASC(INPUT$(1, palfile))ăNEXT clrăăCLOSE palfileăăEND SUBăăSUB LoadPcx (file$)ăă   SCREEN 13ăă   DIM pcxpal AS STRING * 768, pcxversion AS STRING * 1ăă   pcxnum = FREEFILEă   OPEN file$ FOR BINARY AS #pcxnumăă   IF LOF(pcxnum) = 0 THENă      CLOSE pcxnumă      KILL file$ă      EXIT SUBă   END IFăă   GET #pcxnum, 2, pcxversionăă   IF ASC(pcxversion) = 5 THENă      GET #1, LOF(pcxnum) - 767, pcxpală      pal = 0ă      FOR P = 1 TO 768 STEP 3ă         OUT &H3C8, pală         red% = INT(ASC(MID$(pcxpal, P, 1)) / 4)ă         OUT &H3C9, red%ă         green% = INT(ASC(MID$(pcxpal, P + 1, 1)) / 4)ă         OUT &H3C9, green%ă         blue% = INT(ASC(MID$(pcxpal, P + 2, 1)) / 4)ă         OUT &H3C9, blue%ă         pal = pal + 1ă      NEXT Pă   END IFă ă   SEEK #pcxnum, 129ă ă   fxoffset = 0: fxsegment = &HA000ăă   datasize = 2000ă ă   pcxdata$ = INPUT$(datasize, pcxnum)ă   datacount = 1ă   FOR half = 1 TO 2ă      fxtotal = fxsegment + fxoffsetă      DEF SEG = fxtotală      FOR c = 0 TO 31999ă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFă         clr = ASC(MID$(pcxdata$, datacount, 1))ă         datacount = datacount + 1ă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFă         IF clr > 192 THENă            LPS = clr - 192ă            clr = ASC(MID$(pcxdata$, datacount, 1))ă            datacount = datacount + 1ă            FOR L = LPS TO 1 STEP -1ă               POKE c, clră               c = c + 1ă            NEXT Lă            c = c - 1ă         ELSEă            POKE c, clră         END IFă      NEXT că      fxoffset = fxoffset + &H7D0ă   NEXT halfăă   CLOSE pcxnumăă   DEF SEGăăEND SUBăăSUB MakeFontăăfontfile = FREEFILEăăOPEN "basefont.dat" FOR BINARY AS #fontfileă' Hey, change 128 to 255 for the full font.ăCLSăSCREEN 13ăCOLOR 16ăFOR ascii = 1 TO 255ă CLSă PRINT CHR$(ascii)ă FOR x = 0 TO 8ă  FOR y = 0 TO 8ă   pnt$ = CHR$(POINT(x, y))ă   PUT #fontfile, , pnt$ă   pnt$ = ""ă  NEXTă NEXTăNEXTăCLOSEăOPEN "basefont.dat" FOR BINARY AS #fontfileă GET #fontfile, , FontBuf(0)ăCLOSE #fontfileăEND SUBăă'***************** MapEMS () ***********************************ă'*** Sets the page of a memory block (identified by Handle%) ***ă'*** that is located at the beginning of the page frame.     ***ă'*** Example:                                                ***ă'***                                                         ***ă'*** EmsHandle% = GetEMS%(8)                                 ***ă'*** MapEMS EmsHandle%, 4                                    ***ă'***                                                         ***ă'*** When the page frame segment is next written to, the info***ă'*** will be placed starting at the 4th page in the block of ***ă'*** memory represented by EmsHandle%.  This could be use,   ***ă'*** for instance, to store multiple SCREEN 13 images in one ***ă'*** EMS block, by moving the first 64k image into the first ***ă'*** 4 16k pages (16000 * 4 = 64000) by using:               ***ă'***                                                         ***ă'*** MapEMS EmsHandle%, 0                                    ***ă'***                                                         ***ă'*** And then putting the next 64k image into the next 4 EMS ***ă'*** pages by using:                                         ***ă'***                                                         ***ă'*** MapEMS EmsHandle%, 4                                    ***ă'***                                                         ***ă'*** ... and then moving the image into the memory block.    ***ă'***************************************************************ăSUB MapEMS (Handle%, pageoffset%)ăănumpages% = 4ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(86) + CHR$(8) + CHR$(139) + CHR$(126) + CHR$(6)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(10) + CHR$(177) + CHR$(0)ăasm$ = asm$ + CHR$(48) + CHR$(237) + CHR$(180) + CHR$(68) + CHR$(136)ăasm$ = asm$ + CHR$(200) + CHR$(137) + CHR$(243) + CHR$(205) + CHR$(103)ăasm$ = asm$ + CHR$(70) + CHR$(65) + CHR$(57) + CHR$(249) + CHR$(117)ăasm$ = asm$ + CHR$(242) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL pageoffset%, BYVAL Handle%, BYVAL numpages%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB MemCopy (fromseg, fromoff, toseg, tooff, bytes)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(30)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10) + CHR$(142) + CHR$(192)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14) + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(12) + CHR$(139) + CHR$(78) + CHR$(6) + CHR$(243)ăasm$ = asm$ + CHR$(164) + CHR$(31) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL fromseg, BYVAL fromoff, BYVAL toseg, BYVAL tooff, BYVAL bytes, SADD(asm$))ăDEF SEGăăEND SUBăă'****************************** NumEMSHandles%() *********************ă'*** Returns the number of EMS handles presently being used (there ***ă'*** are a maximum of 256 handles possible at any given time).     ***ă'*********************************************************************ăFUNCTION NumEMSHandles%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(75) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(93) + CHR$(203)ăăNumHandles% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(NumHandles%, SADD(asm$))ăDEF SEGăăNumEMSHandles% = NumHandles%ăăEND FUNCTIONăă'***************************** NumEMSPages%() *************************ă'*** Returns the number of 16k pages being used by the memory block ***ă'*** that is represented by Handle%.                                ***ă'**********************************************************************ăFUNCTION NumEMSPages% (Handle%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(139)ăasm$ = asm$ + CHR$(86) + CHR$(6) + CHR$(180) + CHR$(76) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(139) + CHR$(126) + CHR$(8) + CHR$(137)ăasm$ = asm$ + CHR$(29) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(numpages%, Handle%, SADD(asm$))ăDEF SEGăăNumEMSPages% = numpages%ăăEND FUNCTIONăă'******************************* PageFrame% ***************************ă'*** Returns the segment that you will need to write to in order to ***ă'*** store your data into EMS memory.  For example, PageFrame% may  ***ă'*** return D000 (HEX, -12288 decimal), and then you might do this: ***ă'***                                                                ***ă'*** DEF SEG = PageFrame%        'D000                              ***ă'*** MyData$ = "This is a block of data I want to store in EMS."    ***ă'*** FOR X = 1 TO LEN(MyData$)                                      ***ă'***   POKE X, ASC(MID$(MyData$, X, 1))                             ***ă'*** NEXT X                                                         ***ă'*** DEF SEG                                                        ***ă'***                                                                ***ă'*** Note, though, that you have to have a block of EMS opened with ***ă'*** GetEMS%() and maped with MapEMS before you can write to the    ***ă'*** block.                                                         ***ă'**********************************************************************ăFUNCTION PageFrame%ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(65) + CHR$(205) + CHR$(103) + CHR$(139) + CHR$(126)ăasm$ = asm$ + CHR$(6) + CHR$(137) + CHR$(29) + CHR$(93) + CHR$(203)ăăPageFrameAddr% = 0ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(PageFrameAddr%, SADD(asm$))ăDEF SEGăăPageFrame% = PageFrameAddr%ăăEND FUNCTIONăăSUB PutPal (pal())ă  ă   FOR clr = 0 TO 255ă      OUT &H3C8, clră      OUT &H3C9, pal(clr, 1)ă      OUT &H3C9, pal(clr, 2)ă      OUT &H3C9, pal(clr, 3)ă   NEXT clrăăEND SUBăă'****************************** ReleaseEMS() **************************ă'*** Releases the EMS memory associated with Handle%.  This is very ***ă'*** important to do before you exit your program, otherwise the    ***ă'*** memory being used by your open handles will not be available   ***ă'*** again until you reboot.                                        ***ă'**********************************************************************ăSUB ReleaseEMS (Handle%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85) + CHR$(137) + CHR$(229) + CHR$(180)ăasm$ = asm$ + CHR$(69) + CHR$(139) + CHR$(86) + CHR$(6) + CHR$(205)ăasm$ = asm$ + CHR$(103) + CHR$(93) + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL Handle%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB RotatePal (direction, pal())ăă   SELECT CASE directionă         CASE 1ă            temp1 = pal(255, 1)ă            temp2 = pal(255, 2)ă            temp3 = pal(255, 3)ă            FOR rgb = 1 TO 3ă               FOR col = 254 TO 0 STEP -1ă                  pal(col + 1, rgb) = pal(col, rgb)ă               NEXT colă            NEXT rgbă            pal(0, 1) = temp1ă            pal(0, 2) = temp2ă            pal(0, 3) = temp3ă         CASE -1ă            temp1 = pal(0, 1)ă            temp2 = pal(0, 2)ă            temp3 = pal(0, 3)ă            FOR rgb = 1 TO 3ă               FOR col = 0 TO 254ă                  pal(col, rgb) = pal(col + 1, rgb)ă               NEXT colă            NEXT rgbă            pal(255, 1) = temp1ă            pal(255, 2) = temp2ă            pal(255, 3) = temp3ă   END SELECTăă   PutPal pal()ăăEND SUBăăSUB SavePal (file$)ăă   palfile = FREEFILEă   OPEN file$ FOR OUTPUT AS palfileăă   FOR clr = 0 TO 255ă      OUT &H3C7, clră      PRINT #palfile, CHR$(INP(&H3C9));ă      PRINT #palfile, CHR$(INP(&H3C9));ă      PRINT #palfile, CHR$(INP(&H3C9));ă   NEXT clrăă   CLOSE palfileăăEND SUBăăSUB SetPal (pal())ăEND SUBăăSUB WaitRetraceă   WAIT &H3DA, 8ăEND SUBăRyan White                     VORTEX                         BIGFOOT@SunBelt.Net            09-06-96 (11:42)       QB, QBasic, PDS        39   2397     VORTEX.BAS  'Vortexă'By Ryan Whiteă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăăă'This one is much faster compiled.   A little too fast.ăăSCREEN 13ăDEFINT A-WăCLSăDIM c(255, 2), co(255, 2)ăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăn = 0: x = 5ăFOR I = 200 TO 40 STEP -1: n = n + 1: IF n = 256 THEN n = 1ăx = x / 1.003: FOR j = 1 TO 10: CIRCLE (160, I), x, n, , , .5: x = x * 1.003: NEXT jăNEXT Iăă'FOR n = -15 TO 15:LINE (105 + n, 65 + n)-(215 - n, 175 - n), 50 + n, B:NEXT nă'FOR n = 1 TO 33:FOR m = -1 TO 1:CIRCLE (110, 170 + m), n, 255 - n, , , 1:CIRCLE (210, 170 + m), n, 255 - n, , , 1:CIRCLE (110, 70 + m), n, 255 - n, , , 1:CIRCLE (210, 70 + m), n, 255 - n, , , 1:NEXT m:NEXT năăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăăăRyan White                     COLOR MORPH                    BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        80   2929     CMORPH.BAS  'color morphă'By Ryan Whiteă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăăSCREEN 13ăCLSăDEFINT A-ZăDIM c(255, 2), co(255, 2)ăFOR n = 0 TO 15ă'black white red orange yellow green blue's purple ~then backwards~ă'0-15      black   to  whiteăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4ă'16-31     white   to  redăc(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4ă'32-47     red     to  orangeăc(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ă'48-63     orange  to  yellowăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0ă'64-79     yellow  to  greenăc(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0ă'80-95     green   to  l.blueăc(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ă'96-111    l.blue  to  d.blueăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60ă'112-127   d.blue  to  purpleăc(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60ă'128-143   purple  to  d.blueăc(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ă'144-159   d.blue  to  l.blueăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60ă'160-175   l.blue  to  greenăc(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4ă'176-191   green   to  yellowăc(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ă'192-207   yellow  to  orangeăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0ă'208-223   orange  to  redăc(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0ă'224-239   red     to  grayăc(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ă'240-255   gray    to  blackăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2ăNEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăFOR x = 0 TO 319ăc = c + 1: IF c = 256 THEN c = 1ăLINE (x, 0)-(159, 100), căNEXT xăFOR y = 0 TO 199ăc = c + 1: IF c = 256 THEN c = 1ăLINE (319, y)-(159, 100), căNEXT yăFOR x = 319 TO 0 STEP -1ăc = c + 1: IF c = 256 THEN c = 1ăLINE (x, 199)-(159, 100), căNEXT xăFOR y = 199 TO 0 STEP -1ăc = c + 1: IF c = 256 THEN c = 1ăLINE (0, y)-(159, 100), căNEXT yăăFOR r = 60 TO 1 STEP -1ăFOR m = -1 TO 1ăc = c + 1: IF c = 256 THEN c = 1ăCIRCLE (159, 100 + m), r, c, , , 1ăNEXT măNEXT răăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăăRyan White                     FLYING BEES #2                 BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        131  4288     FLYBEES2.BASDECLARE SUB wasp (wx%(), wy%())ăDECLARE SUB bees (wx%(), wy%(), x%(), y%(), xv%(), yv%(), bcolor%)ăDEFINT A-ZăCOMMON SHARED winW, winH, winX, winY, border, NoBees, smoothăă'Flybees #2ă'By Ryan White    Original source by Richard Daleă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăă'Just mess with it to learn.  I just thought his was neat enough to maybe beă'cooler.   It was.ăăăON KEY(1) GOSUB cle: KEY(1) ONăON KEY(2) GOSUB ss: KEY(2) ONăON KEY(3) GOSUB smoothhuh: KEY(3) ONăăDEFLNG T: CLSăăNoBees = 40ăăSCREEN 12: RANDOMIZE TIMER: CLSăGOSUB ssăDIM wx(0 TO 2), wy(0 TO 2), co(15, 2), cn(15, 2)ăDIM x(0 TO 2, 1 TO NoBees): DIM y(0 TO 2, 1 TO NoBees)ăDIM xv(1 TO NoBees): DIM yv(1 TO NoBees)ăwinW = 0: winH = 0: winX = 0: winY = 0: maxx = 640: maxy = 480ă' wasp will not go closer than this to the edgesă    border = INT(RND * 75): winW = maxx: winH = maxyă' Initialize the waspă    wx(0) = 640 / 2: wy(0) = 480 / 2: wx(1) = wx(0): wy(1) = wy(0)ă'Initialize the beesă    FOR b = 1 TO NoBeesă        x(0, b) = INT(RND * winW): x(1, b) = x(0, b)ă        y(0, b) = INT(RND * winH): y(1, b) = y(0, b)ă        xv(b) = 7 * (RND - .5): yv(b) = 7 * (RND - .5)ă    NEXT bă    DO UNTIL INKEY$ <> ""ă    CALL wasp(wx(), wy()): CALL bees(wx(), wy(), x(), y(), xv(), yv(), bcolor)ă    GOSUB dină    bcolor = bcolor + 1ă    IF bcolor = 15 THEN bcolor = 1ă    LOOP: SCREEN 0ăENDăăcle:ăCLSăRETURNăăss:ărr = INT(RND * 5): gr = INT(RND * 5): br = INT(RND * 5)ăFOR n = 1 TO 14ăOUT &H3C8, năOUT &H3C9, n * rr + 3ăOUT &H3C9, n * gr + 3ăOUT &H3C9, n * br + 3ăNEXT năRETURNăădin:ăFOR n = 14 TO 1 STEP -1: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năcn(1, 0) = co(14, 0): cn(1, 1) = co(14, 1): cn(1, 2) = co(14, 2)ăFOR n = 14 TO 2 STEP -1: FOR m = 0 TO 2: cn(n, m) = co(n - 1, m): NEXT m: NEXT năFOR n = 14 TO 1 STEP -1: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năRETURNăăsmoothhuh:ăsmooth = smooth - 1: IF smooth = -1 THEN smooth = 1ăRETURNăăDEFINT TăSUB bees (wx(), wy(), x(), y(), xv(), yv(), bcolor)ă' Do not let things settle downă    bb = INT(NoBees * RND + 1)ă    xv(bb) = xv(bb) + (RND - .5) * 3: yv(bb) = yv(bb) + (RND - .5) * 3ăFOR b = 1 TO NoBeesă' Age position arraysă    x(2, b) = x(1, b): y(2, b) = y(1, b)ă    x(1, b) = x(0, b): y(1, b) = y(0, b)ă    dx = wx(1) - x(1, b): dy = wy(1) - y(1, b)ă    distance = ABS(dx) + ABS(dy)    ' Approximationă    IF distance = 0 THEN distance = 1ă    bee.acc = 3ă' Accelerateă    xv(b) = xv(b) + dx * bee.acc / distanceă    yv(b) = yv(b) + dy * bee.acc / distanceă    bee.vel = 11ă' Speed Checksă    IF xv(b) > bee.vel THEN xv(b) = bee.velă    IF xv(b) < -bee.vel THEN xv(b) = -bee.velă    IF yv(b) > bee.vel THEN yv(b) = bee.velă    IF yv(b) < -bee.vel THEN yv(b) = -bee.velă' Move the beesă   IF smooth = 1 THEN       'non smoothă        x(0, b) = x(1, b) + INT(RND * xv(b) + .25 * xv(b)): y(0, b) = y(1, b) + INT(RND * yv(b) + .25 * yv(b))ă   END IFă   IF smooth = 0 THEN      'smoothă       x(0, b) = x(1, b) + xv(b): y(0, b) = y(1, b) + yv(b)ă   END IFă    LINE (x(0, b), y(0, b))-(x(1, b), y(1, b)), bcoloră NEXT băEND SUBăăSUB wasp (wx(), wy()) STATICă' Age the arraysă    wx(2) = wx(1): wx(1) = wx(0): wy(2) = wy(1): wy(1) = wy(0)ă' Accelerate (bias random variable to ensure wasp convers entire screen)ă    wasp.acc = 5ă    wxv = wxv + INT((RND - .4) * wasp.acc)ă    wyv = wyv + INT((RND - .4) * wasp.acc)ă' Speed limit checksă    wxv.max = INT(RND * 30) + 20: wyv.max = INT(RND * 30) + 20ă    IF wxv > wxv.max THEN wxv = wxv.maxă    IF wxv < -wxv.max THEN wxv = -wxv.maxă    IF wyv > wyv.max THEN wyv = wyv.maxă    IF wyv < -wyv.max THEN wyv = -wyv.maxă' Move waspă    wx(0) = wx(1) + wxv: wy(0) = wy(1) + wyvă' Bounce checksă    IF wx(0) < border OR wx(0) > winW - border - 1 THENă        wxv = -wxv: wx(0) = wx(0) + wxvă    END IFă    IF wy(0) < border OR wy(0) > winH - border - 1 THENă        wyv = -wyv: wy(0) = wy(0) + wyvă    END IFăEND SUBăăRyan White                     FLYING BEES #8                 BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        135  4506     FLYBEES8.BASDECLARE SUB wasp (wx%(), wy%())ăDECLARE SUB bees (wx%(), wy%(), x%(), y%(), xv%(), yv%(), bcolor%)ăDEFINT A-ZăCOMMON SHARED winW, winH, winX, winY, border, NoBees, smoothăă'Flybees #8ă'By Ryan White    Original source by Richard Daleă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăă'Just mess with it to learn.  I just thought his was neat enough to maybe beă'cooler.   It was.ăăăăON KEY(1) GOSUB cle: KEY(1) ONăON KEY(2) GOSUB ss: KEY(2) ONăON KEY(3) GOSUB smoothhuh: KEY(3) ONăăDEFLNG T: CLSăăNoBees = 40ăăSCREEN 12: RANDOMIZE TIMER: CLSăGOSUB ssăDIM wx(0 TO 2), wy(0 TO 2), co(15, 2), cn(15, 2)ăDIM x(0 TO 2, 1 TO NoBees): DIM y(0 TO 2, 1 TO NoBees)ăDIM xv(1 TO NoBees): DIM yv(1 TO NoBees)ăwinW = 0: winH = 0: winX = 0: winY = 0: maxx = 640: maxy = 480ă' wasp will not go closer than this to the edgesă    border = INT(RND * 75): winW = maxx: winH = maxyă' Initialize the waspă    wx(0) = 640 / 2: wy(0) = 480 / 2: wx(1) = wx(0): wy(1) = wy(0)ă'Initialize the beesă    FOR b = 1 TO NoBeesă        x(0, b) = INT(RND * winW): x(1, b) = x(0, b)ă        y(0, b) = INT(RND * winH): y(1, b) = y(0, b)ă        xv(b) = 7 * (RND - .5): yv(b) = 7 * (RND - .5)ă    NEXT bă    DO UNTIL INKEY$ <> ""ă    CALL wasp(wx(), wy()): CALL bees(wx(), wy(), x(), y(), xv(), yv(), bcolor)ă    GOSUB dină    bcolor = bcolor + 1ă    IF bcolor = 15 THEN bcolor = 1ă    LOOP: SCREEN 0ăENDăăcle:ăCLSăRETURNăăss:ărr = INT(RND * 5): gr = INT(RND * 5): br = INT(RND * 5)ăFOR n = 1 TO 14ăOUT &H3C8, năOUT &H3C9, n * rr + 3ăOUT &H3C9, n * gr + 3ăOUT &H3C9, n * br + 3ăNEXT năRETURNăădin:ăFOR n = 14 TO 1 STEP -1: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năcn(1, 0) = co(14, 0): cn(1, 1) = co(14, 1): cn(1, 2) = co(14, 2)ăFOR n = 14 TO 2 STEP -1: FOR m = 0 TO 2: cn(n, m) = co(n - 1, m): NEXT m: NEXT năFOR n = 14 TO 1 STEP -1: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năRETURNăăsmoothhuh:ăsmooth = smooth - 1: IF smooth = -1 THEN smooth = 1ăRETURNăăDEFINT TăSUB bees (wx(), wy(), x(), y(), xv(), yv(), bcolor)ă' Do not let things settle downă    bb = INT(NoBees * RND + 1)ă    xv(bb) = xv(bb) + (RND - .5) * 3: yv(bb) = yv(bb) + (RND - .5) * 3ăFOR b = 1 TO NoBeesă' Age position arraysă    x(2, b) = x(1, b): y(2, b) = y(1, b)ă    x(1, b) = x(0, b): y(1, b) = y(0, b)ă    dx = wx(1) - x(1, b): dy = wy(1) - y(1, b)ă    distance = ABS(dx) + ABS(dy)    ' Approximationă    IF distance = 0 THEN distance = 1ă    bee.acc = 3ă' Accelerateă    xv(b) = xv(b) + dx * bee.acc / distanceă    yv(b) = yv(b) + dy * bee.acc / distanceă    bee.vel = 11ă' Speed Checksă    IF xv(b) > bee.vel THEN xv(b) = bee.velă    IF xv(b) < -bee.vel THEN xv(b) = -bee.velă    IF yv(b) > bee.vel THEN yv(b) = bee.velă    IF yv(b) < -bee.vel THEN yv(b) = -bee.velă' Move the beesă   IF smooth = 1 THEN       'non smoothă        x(0, b) = x(1, b) + INT(RND * xv(b) + .25 * xv(b)): y(0, b) = y(1, b) + INT(RND * yv(b) + .25 * yv(b))ă   END IFă   IF smooth = 0 THEN      'smoothă       x(0, b) = x(1, b) + xv(b): y(0, b) = y(1, b) + yv(b)ă   END IFă    LINE (x(0, b), y(0, b))-(x(1, b), y(1, b)), bcoloră    LINE (639 - x(0, b), y(0, b))-(639 - x(1, b), y(1, b)), bcoloră    LINE (x(0, b), 479 - y(0, b))-(x(1, b), 479 - y(1, b)), bcoloră    LINE (639 - x(0, b), 479 - y(0, b))-(639 - x(1, b), 479 - y(1, b)), bcoloră NEXT băEND SUBăăSUB wasp (wx(), wy()) STATICă' Age the arraysă    wx(2) = wx(1): wx(1) = wx(0): wy(2) = wy(1): wy(1) = wy(0)ă' Accelerate (bias random variable to ensure wasp convers entire screen)ă    wasp.acc = 5ă    wxv = wxv + INT((RND - .4) * wasp.acc)ă    wyv = wyv + INT((RND - .4) * wasp.acc)ă' Speed limit checksă    wxv.max = INT(RND * 30) + 20: wyv.max = INT(RND * 30) + 20ă    IF wxv > wxv.max THEN wxv = wxv.maxă    IF wxv < -wxv.max THEN wxv = -wxv.maxă    IF wyv > wyv.max THEN wyv = wyv.maxă    IF wyv < -wyv.max THEN wyv = -wyv.maxă' Move waspă    wx(0) = wx(1) + wxv: wy(0) = wy(1) + wyvă' Bounce checksă    IF wx(0) < border OR wx(0) > winW - border - 1 THENă        wxv = -wxv: wx(0) = wx(0) + wxvă    END IFă    IF wy(0) < border OR wy(0) > winH - border - 1 THENă        wyv = -wyv: wy(0) = wy(0) + wyvă    END IFăEND SUBăăRyan White                     FLYING BEES #9                 BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        142  4593     FLYBEES9.BASDECLARE SUB wasp (wx%(), wy%())ăDECLARE SUB bees (wx%(), wy%(), x%(), y%(), xv%(), yv%(), bcolor%)ăă'Flybees #9ă'By Ryan White    Original source by Richard Daleă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăă'Just mess with it to learn.  I just thought his was neat enough to maybe beă'cooler.   It was.ăăDEFINT A-ZăCOMMON SHARED winW, winH, winX, winY, border, NoBees, smoothăăON KEY(1) GOSUB cle: KEY(1) ONăON KEY(2) GOSUB ss: KEY(2) ONăON KEY(3) GOSUB smoothhuh: KEY(3) ONăăDEFLNG T: CLSăăNoBees = 1ăăSCREEN 12: RANDOMIZE TIMER: CLSăGOSUB ssăDIM wx(0 TO 2), wy(0 TO 2), co(15, 2), cn(15, 2)ăDIM x(0 TO 2, 1 TO NoBees): DIM y(0 TO 2, 1 TO NoBees)ăDIM xv(1 TO NoBees): DIM yv(1 TO NoBees)ăwinW = 0: winH = 0: winX = 0: winY = 0: maxx = 640: maxy = 480ă' wasp will not go closer than this to the edgesă    border = INT(RND * 75): winW = maxx: winH = maxyă' Initialize the waspă    wx(0) = 640 / 2: wy(0) = 480 / 2: wx(1) = wx(0): wy(1) = wy(0)ă'Initialize the beesă    FOR b = 1 TO NoBeesă        x(0, b) = INT(RND * winW): x(1, b) = x(0, b)ă        y(0, b) = INT(RND * winH): y(1, b) = y(0, b)ă        xv(b) = 7 * (RND - .5): yv(b) = 7 * (RND - .5)ă    NEXT bă    DO UNTIL INKEY$ <> ""ă    CALL wasp(wx(), wy()): CALL bees(wx(), wy(), x(), y(), xv(), yv(), bcolor)ă    GOSUB dină    bcolor = bcolor + 1ă    IF bcolor = 15 THEN bcolor = 1ă    LOOP: SCREEN 0ăENDăăcle:ăCLSăRETURNăăss:ărr = INT(RND * 5): gr = INT(RND * 5): br = INT(RND * 5)ăFOR n = 1 TO 14ăOUT &H3C8, năOUT &H3C9, n * rr + 3ăOUT &H3C9, n * gr + 3ăOUT &H3C9, n * br + 3ăNEXT năRETURNăădin:ăFOR n = 14 TO 1 STEP -1: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năcn(1, 0) = co(14, 0): cn(1, 1) = co(14, 1): cn(1, 2) = co(14, 2)ăFOR n = 14 TO 2 STEP -1: FOR m = 0 TO 2: cn(n, m) = co(n - 1, m): NEXT m: NEXT năFOR n = 14 TO 1 STEP -1: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năRETURNăăsmoothhuh:ăsmooth = smooth - 1: IF smooth = -1 THEN smooth = 1ăRETURNăăDEFINT TăSUB bees (wx(), wy(), x(), y(), xv(), yv(), bcolor)ă' Do not let things settle downă    bb = INT(NoBees * RND + 1)ă    xv(bb) = xv(bb) + (RND - .5) * 3: yv(bb) = yv(bb) + (RND - .5) * 3ăFOR b = 1 TO NoBeesă' Age position arraysă    x(2, b) = x(1, b): y(2, b) = y(1, b)ă    x(1, b) = x(0, b): y(1, b) = y(0, b)ă    dx = wx(1) - x(1, b): dy = wy(1) - y(1, b)ă    distance = ABS(dx) + ABS(dy)    ' Approximationă    IF distance = 0 THEN distance = 1ă    bee.acc = 3ă' Accelerateă    xv(b) = xv(b) + dx * bee.acc / distanceă    yv(b) = yv(b) + dy * bee.acc / distanceă    bee.vel = 11ă' Speed Checksă    IF xv(b) > bee.vel THEN xv(b) = bee.velă    IF xv(b) < -bee.vel THEN xv(b) = -bee.velă    IF yv(b) > bee.vel THEN yv(b) = bee.velă    IF yv(b) < -bee.vel THEN yv(b) = -bee.velă' Move the beesă   IF smooth = 1 THEN       'non smoothă        x(0, b) = x(1, b) + INT(RND * xv(b) + .25 * xv(b)): y(0, b) = y(1, b) + INT(RND * yv(b) + .25 * yv(b))ă   END IFă   IF smooth = 0 THEN      'smoothă       x(0, b) = x(1, b) + xv(b): y(0, b) = y(1, b) + yv(b)ă   END IFă    FOR sx = 0 TO 639 STEP 25ă    LINE (x(1, b), y(0, b))-(sx, 0), bcoloră    NEXT sxă    FOR sy = 0 TO 479 STEP 25ă    LINE (x(1, b), y(0, b))-(639, sy), bcoloră    NEXT syă    FOR sx = 639 TO 0 STEP -25ă    LINE (x(1, b), y(0, b))-(sx, 479), bcoloră    NEXT sxă    FOR sy = 479 TO 0 STEP -25ă    LINE (x(1, b), y(0, b))-(0, sy), bcoloră    NEXT syă NEXT băEND SUBăăSUB wasp (wx(), wy()) STATICă' Age the arraysă    wx(2) = wx(1): wx(1) = wx(0): wy(2) = wy(1): wy(1) = wy(0)ă' Accelerate (bias random variable to ensure wasp convers entire screen)ă    wasp.acc = 5ă    wxv = wxv + INT((RND - .4) * wasp.acc)ă    wyv = wyv + INT((RND - .4) * wasp.acc)ă' Speed limit checksă    wxv.max = INT(RND * 30) + 20: wyv.max = INT(RND * 30) + 20ă    IF wxv > wxv.max THEN wxv = wxv.maxă    IF wxv < -wxv.max THEN wxv = -wxv.maxă    IF wyv > wyv.max THEN wyv = wyv.maxă    IF wyv < -wyv.max THEN wyv = -wyv.maxă' Move waspă    wx(0) = wx(1) + wxv: wy(0) = wy(1) + wyvă' Bounce checksă    IF wx(0) < border OR wx(0) > winW - border - 1 THENă        wxv = -wxv: wx(0) = wx(0) + wxvă    END IFă    IF wy(0) < border OR wy(0) > winH - border - 1 THENă        wyv = -wyv: wy(0) = wy(0) + wyvă    END IFăEND SUBăăRyan White                     GEOMETRY SICKENER              BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        87   2422     GEOMSICK.BAS'GEOMETRY SICKENERă'By Ryan Whiteă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăăSCREEN 12ăDEFINT A-ZăCLSăRANDOMIZE TIMERăpnts = 6ăDIM x(pnts), y(pnts), xc(pnts), yc(pnts), xb(pnts), yb(pnts), co(15, 2), cn(15, 2)ăON KEY(1) GOSUB tt: KEY(1) ON       'Change colorsăON KEY(2) GOSUB makepoints: KEY(2) ON      'redo pointsăON KEY(3) GOSUB clrdescrn: KEY(3) ON          'clear screenăăGOSUB ttăGOSUB makepointsăăst:ăGOSUB dolineăCLSăDO UNTIL INKEY$ <> ""ăGOSUB bounce: GOSUB doline: cx = cx + 1: IF cx = 5 THEN cx = 0: GOSUB colorpuller  ': GOSUB doline0ăLOOPăGOSUB daendăădoline:ăc = c + 1: IF c = 16 THEN c = 1ăm = pnts - 1: o = pntsăDO UNTIL o = 0ăLINE (x(o), y(o))-(x(m), y(m)), căm = m - 1: IF m = -1 THEN o = o - 1: m = o - 1ăLOOPăRETURNăăclrdescrn:ăCLSăRETURNăămakepoints:ăFOR n = 0 TO pntsă x(n) = INT(RND * 640): y(n) = INT(RND * 480): xb(n) = 1: yb(n) = 1ăNEXT năRETURNăădoline0:ăm = pnts - 1: o = pntsăDO UNTIL o = 0ăLINE (x(o), y(o))-(x(m), y(m)), 0ăm = m - 1: IF m = -1 THEN o = o - 1: m = o - 1ăLOOPăRETURNăăbounce:ăFOR m = 0 TO pntsăIF x(m) >= 639 THEN xc(m) = 1: xb = INT(RND * 8)ăIF x(m) <= 0 THEN xc(m) = 0: xb = INT(RND * 8)ăIF y(m) >= 479 THEN yc(m) = 1: yb = INT(RND * 6)ăIF y(m) <= 0 THEN yc(m) = 0: yb = INT(RND * 6)ăIF xc(m) = 1 THEN x(m) = x(m) - xb(m) ELSE x(m) = x(m) + xb(m)ăIF yc(m) = 1 THEN y(m) = y(m) - yb(m) ELSE y(m) = y(m) + yb(m)ăNEXT măRETURNăădaend:ăCLS : SCREEN 0: WIDTH 80, 25: ENDăătt:ăr = INT(RND * 5): g = INT(RND * 5): b = INT(RND * 5)ăFOR attr% = 1 TO 15ărt% = attr% * r + 3: gt% = attr% * g + 3: bt% = attr% * b + 3ăco(attr%, 0) = rt%: co(attr%, 1) = gt%: co(attr%, 2) = bt%ăcn(attr%, 0) = rt%: cn(attr%, 1) = gt%: cn(attr%, 2) = bt%ăOUT &H3C8, attr%: OUT &H3C9, rt%: OUT &H3C9, gt%: OUT &H3C9, bt%ăNEXT attr%ăRETURNăăcolorpuller:ăFOR n = 15 TO 1 STEP -1: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năcn(1, 0) = co(15, 0): cn(1, 1) = co(15, 1): cn(1, 2) = co(15, 2)ăFOR n = 15 TO 2 STEP -1: FOR m = 0 TO 2: cn(n, m) = co(n - 1, m): NEXT m: NEXT năFOR n = 15 TO 1 STEP -1: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năRETURNăăRyan White                     GEOMETRY SICKER                BIGFOOT@SunBelt.Net            09-06-96 (12:31)       QB, QBasic, PDS        93   2582     GEOMSCKR.BAS'Geometry Sickeră'By Ryan Whiteă'This is a sample of my abilities with palettes and wierd designs.ă'If you would like to get more of these type programs, write me ată'Bigfoot@Sunbelt.Net  or  Bigfoot@InfoAve.Netă'I have more than 575 Qbasic programs to my name, and it grows daily.ă'Ah well, enjoy...ăă'This is simply a neater? version of Geometry SicknessăăăSCREEN 12ăDEFINT A-ZăCLSăRANDOMIZE TIMERăpnts = 3        '# or points -1ăDIM x(pnts), y(pnts), xc(pnts), yc(pnts), xb(pnts), yb(pnts), co(15, 2), cn(15, 2)ăON KEY(1) GOSUB tt: KEY(1) ONăON KEY(2) GOSUB makepoints: KEY(2) ONăON KEY(3) GOSUB clrdescrn: KEY(3) ONăWINDOW (0, 0)-(639, 639)ăGOSUB ttăGOSUB makepointsăăst:ăGOSUB dolineăCLSăDO UNTIL INKEY$ <> ""ăGOSUB bounce: GOSUB doline: GOSUB colorpuller  ': GOSUB doline0ăLOOPăGOSUB daendăădoline:ăc = c + 1: IF c = 16 THEN c = 1ăm = pnts - 1: o = pntsăDO UNTIL o = 0ăLINE (x(o), y(o))-(x(m), y(m)), căLINE (639 - x(o), y(o))-(639 - x(m), y(m)), căLINE (x(o), 639 - y(o))-(x(m), 639 - y(m)), căLINE (639 - x(o), 639 - y(o))-(639 - x(m), 639 - y(m)), căm = m - 1: IF m = -1 THEN o = o - 1: m = o - 1ăLOOPăRETURNăăclrdescrn:ăCLSăRETURNăămakepoints:ăFOR n = 0 TO pntsă x(n) = INT(RND * 640): y(n) = INT(RND * 640): xb(n) = 1: yb(n) = 1ăNEXT năRETURNăădoline0:ăm = pnts - 1: o = pntsăDO UNTIL o = 0ăLINE (x(o), y(o))-(x(m), y(m)), 0ăm = m - 1: IF m = -1 THEN o = o - 1: m = o - 1ăLOOPăRETURNăăbounce:ăFOR m = 0 TO pntsăIF x(m) >= 639 THEN xc(m) = 1: xb = INT(RND * 8)ăIF x(m) <= 0 THEN xc(m) = 0: xb = INT(RND * 8)ăIF y(m) >= 639 THEN yc(m) = 1: yb = INT(RND * 6)ăIF y(m) <= 0 THEN yc(m) = 0: yb = INT(RND * 6)ăIF xc(m) = 1 THEN x(m) = x(m) - xb(m) ELSE x(m) = x(m) + xb(m)ăIF yc(m) = 1 THEN y(m) = y(m) - yb(m) ELSE y(m) = y(m) + yb(m)ăNEXT măRETURNăădaend:ăCLS : SCREEN 0: WIDTH 80, 25: ENDăătt:ăr = INT(RND * 5): g = INT(RND * 5): b = INT(RND * 5)ăFOR attr% = 1 TO 15ărt% = attr% * r + 3: gt% = attr% * g + 3: bt% = attr% * b + 3ăco(attr%, 0) = rt%: co(attr%, 1) = gt%: co(attr%, 2) = bt%ăcn(attr%, 0) = rt%: cn(attr%, 1) = gt%: cn(attr%, 2) = bt%ăOUT &H3C8, attr%: OUT &H3C9, rt%: OUT &H3C9, gt%: OUT &H3C9, bt%ăNEXT attr%ăRETURNăăcolorpuller:ăFOR n = 15 TO 1 STEP -1: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năcn(1, 0) = co(15, 0): cn(1, 1) = co(15, 1): cn(1, 2) = co(15, 2)ăFOR n = 15 TO 2 STEP -1: FOR m = 0 TO 2: cn(n, m) = co(n - 1, m): NEXT m: NEXT năFOR n = 15 TO 1 STEP -1: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năRETURNăăNathan Wittich                 3D GRAPHS                      wittich@cdsnet.net             09-18-96 (18:27)       QB, QBasic, PDS        82   2523     3DGRAPH.BAS ' 3dgraphă' a cool screensaver by Nathan Wittichă' wittich@cdsnet.net in subject put in "Nathan:" someone else is ină' an email based newsgroup that I share internet access with.ă'ă' This program draws new 3d graphs on the screen. Each one is differentă' in colors, sizes, smoothness, and how high the bumps are. My goală' when I made it was to make each one as different as I can, not justă' different graphs that look alikeă'ă' here's how it makes the graph:ă' A dimmensioned variable (u) has all the gridsă' Into each place, it puts a random number.ă' it averages each grid's height with the heights of surrounding ones.ă' It does that lots of times.ă' Then it draws the graphă'ă' Although random #'s make each different, changing the source code willă' be even better.ă'ă' How come in basic I can make a cooler screensaver than Microsuck?ă'ăăRANDOMIZE TIMERăDEFINT A-ZăDIM u(75, 60)ăSCREEN 12ăDOăc1 = RND * 8ăc2 = RND * 8ăc3 = RND * 8ă'PRINT "palette"ăFOR a = 1 TO 14ă'PALETTE a, a * 4ăNEXT aă'PRINT "setting up"ăl1 = RND * 500ăl2 = l1 + RND * 500ăFOR a = 1 TO 64ăFOR b = 1 TO 48ău(a, b) = (u(a, b) * .9) + RND * l1 - RND * l1ăIF RND < .01 THEN u(a, b) = l2 * RNDăNEXT băNEXT aă'FOR a = 55 TO 64ă'FOR b = 5 TO 43ă'u(a, b) = (u(a - 1, b) - 10)ă'NEXT bă'NEXT aăFOR i = 1 TO 4 + RND * 2ăLOCATE 3, 1ă'PRINT "smoothening "; INT((i / 7) * 100); "%"ăFOR a = 2 TO 64 'smoothen ităFOR b = 2 TO 48ău(a, b) = (u(a + 1, b) + u(a - 1, b) + u(a, b - 1) + u(a, b + 1) + u(a, b + 2) + u(a + 2, b)) / 6ăNEXT băNEXT aăNEXT iă'FOR i = 1 TO 2ă'FOR a = -480 + RND + RND + RND TO 640 STEP 2 + RND * 3ă'LINE (640 - a, 0)-(640 - a - 480, 480), 0ă'LINE (a, 0)-(a + 480, 480), 0ă'NEXT aă'NEXTăCLSă'd = 1ăn = RND * 10 + RND * 10ăFOR a = 60 TO 2 STEP -1ăFOR b = 2 TO 45ăIF ABS(a - b) < 35 AND (a + b) > 15 AND a > 5 AND b > 5 THENă        'SWAP d, eă        'LINE (a * n + u(a, b), b * n - u(a, b))-(a * n + u(a - 1, b + 1) - n, n + b * n - u(a - 1, b + 1)),RND * 16, BFă        LINE (a * n + u(a, b), b * n - u(a, b))-(a * n + u(a + 1, b + 1) + n, n + b * n - u(a + 1, b + 1)),c1ă        'LINE (a * n + u(a, b), b * n - u(a, b + 1) + n)-(a * n + n + u(a + 1, b), b * n - u(a + 1, b)), c1ă        LINE (a * n + u(a, b), b * n - u(a, b))-(a * n + u(a + 1, b) + n, b * n - u(a + 1, b)), c2ă        LINE (a * n + u(a, b), b * n - u(a, b))-(a * n + u(a, b + 1), b * n + n - u(a, b + 1)), c3ă        END IFăNEXT băSWAP d, eăNEXT aă'a$ = INPUT$(1)ăLOOP WHILE INKEY$ = ""ăJames N. Broadbent             DEMO OF REAL-TIME GRAPHING     FidoNet QUIK_BAS Echo          05-17-96 (00:00)       QB, QBasic, PDS        290  9419     GRAPHING.BAS' > I am trying to figure out a way to put some graphic onto theă' > screen instataneously.  I'm sure you have played DOOM or Wolf-3Dăă'I'm a Descent into Saturn fan myselfăă' > before, or at least looked at it.  I don't know how manyă' > frames-per-second those games display, but it is awfully smooth.  Isă' > there any way to get smooth graphics like that in QuickBASIC?ăă'I feel like taking a scene from "Wayne's World" and bowing down to these ă'people saying "We're not worthy....We're not worthy!!!"  :-)ăă'Truly I don't think that kind of graphics is possible in Qb 4.5. It astounds ă'me how they can control the motion of robots, missles and screnery so ă'smoothly. I have trouble with just a couple of simple elementsă ă' -> If it is trying to graph realtime data, I may be able toă' -> help you. I have recently worked on a realtime graphicală' -> display of 2 values being updated every 0.2 seconds usingă' -> PSET, VIEW, and WINDOW.ăă' > Do you have any code that you might be able to post in here?ăă'Sure!...<...>ăă'The purpose of this routine is to give a graphic visual display of incoming ă'data from 2 COM ports. I have simulated this a simple random number routine ă'for each variable.ă ă'It probably could be improved a bit since I don't put the values for the majoră'Y-axis tick marks. But they aren't really necessary for what I was doing.ă ă'Hope you like it....look forward to your comments.ă ă'Regards Jimăă'       **************************************************************ă'       ***   Demonstration of real-time graphing of 2 parameters  ***ă'       ***              with time on the X-axis                   ***ă'       ***                                                        ***ă'       ***              by   James N. Broadbent                   ***ă'       ***                    May 17, 1996                        ***ă'       **************************************************************ăăSCREEN 12ăDIM YGRAPH!(8, 2)ăă'       YGRAPH!(8,2)  is the matrix that holds the vales that make upă'                     the Y-axis for the 3 "ZOOM" levels.ă'       "ZOOM" levels are magnification levels of full scale on theă'                     Y-axis. They can be any ratio desired but in thisă'                     example the ZOOMFACTORS are 100%, 200% and 400%ă'                     magnification.ăă'       NOTE: This is not a general graphing routine but will haveă'             a min "Y" value set to 0.0 and max "Y" value of 100000ăSTART:ă        CLSă        LOCATE 9, 20ă        LINE INPUT "Enter the Maximum Value for Y-axis: "; a$ă        IF VAL(a$) <= 0! OR VAL(a$) > 100000 THENă           LOCATE 11, 20ă           BEEPă           PRINT "Please enter a number from 0 to 100,000!"ă           SLEEP 1ă           GOTO STARTă           END IFă        MAXY! = VAL(a$)ăă'       Graph co-ordinates for ZOOM feature and drawing the Y-axisăă'       set min and max for window statement for each zoom levelă        YGRAPH!(0, 0) = MAXY! * 1.05ă        YGRAPH!(0, 1) = MAXY! * 1.05 / 2ă        YGRAPH!(0, 2) = MAXY! * 1.05 / 4ă        YGRAPH!(1, 0) = -.05 * MAXY!ă        YGRAPH!(1, 1) = -.05 * MAXY! / 2ă        YGRAPH!(1, 2) = -.05 * MAXY! / 4ă      ă'       set Y-axis and X-axis overall coordinatesă        FOR i% = 0 TO 2ă           YGRAPH!(2, i%) = YGRAPH!(1, i%) * .95ă        NEXT i%ă       ă'       set major Y-axis tick marksă        k! = 1.25ă        FOR j% = 3 TO 7ă           k! = k! - .25ă           FOR i% = 0 TO 2ă              l% = i% ^ 2 + 1ă              IF l% = 5 THEN l% = 4ă              YGRAPH!(j%, i%) = MAXY! * k! / l%ă           NEXT i%ă        NEXT j%ăă'       Bottom screen clearing coordinatesă        YGRAPH!(8, 0) = -.045 * MAXY!ă        YGRAPH!(8, 1) = -.045 * MAXY! / 2ă        YGRAPH!(8, 2) = -.045 * MAXY! / 4ăă'       Create the viewport for the Graphă        VIEW (1, 100)-(637, 440), 1, 9ăă'       set up the initial graphă        z% = 0                       ' ZOOMFACTOR elementă        GOSUB graphcoordinatesă        COLOR 14ă        LOCATE 1, 10ă        PRINT "Demonstration of a Continuous Real-Time Plot of 2 Variables";ă        LOCATE 2, 30ă        PRINT "by James N. Broadbent"ă        ZF% = z% ^ 2 + 100ă        IF ZF% > 450 THEN ZF% = 400ă        r! = MAXY! / ZF% * 100ă        COLOR 11ă        LOCATE 4, 5ă        PRINT "Y - Axis Range : 0 to"; r!; " units"ă        COLOR 3ă        LOCATE 5, 5ă        PRINT "ZOOM Factor (%):"; ZF%ă        COLOR 13ă        LOCATE 4, 50ă        PRINT "Value of Variable #1:";ă        COLOR 15ă        LOCATE 5, 50ă        PRINT "Value of Variable #2:";ă        LOCATE 29, 5ă        PRINT "Press <X> to Exit";ă        LOCATE 29, 57ă        PRINT "Press <Z> to ZOOM";ă        COLOR 14ă        LOCATE 29, 34ă        PRINT "TIME (SECS):";ăă'      initialize these following parameters for real-time graphă       X! = -1                         ' X axis data positionă       STARTTIME! = TIMER              ' for time display = 0ă       TRIGGER! = TIMER                ' to trigger data displayă       ă'       Generate simulated values and plot to the screenăă       DOă          a$ = UCASE$(INKEY$)ă          IF TIMER - TRIGGER! > .2 THENă             GOSUB YDATAă             TRIGGER! = TIMERă             COLOR 14ă             LOCATE 29, 46ă             PRINT INT(TIMER - STARTTIME);ă             IF TIMER - STARTIME > 99999 THEN STARTIME = TIMERă             END IFă          IF a$ = "Z" THENă             z% = z% + 1ă             SELECT CASE z%ă                CASE 0ă                   ZF% = 100ă                CASE 1ă                   ZF% = 200ă                CASE 2ă                   ZF% = 400ă                CASE 3ă                   ZF% = 100ă                   z% = 0ă             END SELECTăă          r! = MAXY! / ZF% * 100ă          COLOR 11ă          LOCATE 4, 5ă          PRINT SPC(35);ă          LOCATE 4, 5ă          PRINT "Y - Axis Range : 0 to"; r!; " units";ă          VIEW (1, 100)-(637, 440), 1, 9ă          GOSUB graphcoordinatesă          COLOR 3ă          LOCATE 5, 22ă          COLOR 13ă          PRINT ZF%;  ' Display the ZOOMă          END IFăă       LOOP WHILE a$ <> "X"ăă       VIEWă       CLS 0ă       COLOR 15ă       LOCATE 9, 29ă       PRINT "Start again (Y/N)?"ă       DOă          a$ = UCASE$(INKEY$)ă          IF a$ = "Y" THEN GOTO STARTă          IF a$ = "N" THEN ENDă       LOOPăăgraphcoordinates:ăă'       Set up Graph coordinatesăă       WINDOW (-15, YGRAPH!(1, z%))-(620, YGRAPH!(0, z%))ă       LINE (-8, YGRAPH!(2, z%))-(600, YGRAPH!(2, z%)), 11ă       LINE (-5, YGRAPH!(3, z%))-(-5, YGRAPH!(1, z%)), 11ă       LINE (-10, YGRAPH!(3, z%))-(-5, YGRAPH!(3, z%)), 11ă       LINE (-7, YGRAPH!(4, z%))-(-5, YGRAPH!(4, z%)), 11ă       LINE (-10, YGRAPH!(5, z%))-(-5, YGRAPH!(5, z%)), 11ă       LINE (-7, YGRAPH!(6, z%))-(-5, YGRAPH!(6, z%)), 11ăă'      Next line is the "TICK" indicating ZEROă       LINE (-10, YGRAPH!(7, z%))-(-5, YGRAPH!(7, z%)), 13ăă       RETURNăăYDATA:ăă'       Generate simulated vales for variables 1 and 2ăă       IY1! = (MAXY! * RND(1) - MAXY! / 2) * .1ă       IY2! = (MAXY! * RND(1) - MAXY! / 2) * .1ă       IF Y1! + IY1! > MAXY! OR Y1! + IY1! < 0 THENă          Y1! = Y1! - IY1!ă          ELSEă          Y1! = Y1! + IY1!ă          END IFă       IF Y2! + IY2! > MAXY! OR Y2! + IY2! < 0 THENă          Y2! = Y2! - IY2!ă          ELSEă          Y2! = Y2! + IY2!ă          END IFă       LOCATE 4, 72ă       PRINT "       ";ă       LOCATE 5, 72ă       PRINT "       ";ă       SELECT CASE MAXY!ă          CASE IS > 10000ă             COLOR 13ă             LOCATE 4, 72ă             PRINT USING "#####"; Y1!ă             COLOR 15ă             LOCATE 5, 72ă             PRINT USING "#####"; Y2!ă          CASE 1000 TO 9999ă             COLOR 13ă             LOCATE 4, 72ă             PRINT USING "####.#"; Y1!ă             COLOR 15ă             LOCATE 5, 72ă             PRINT USING "######.#"; Y2!ă          CASE 100 TO 999ă             COLOR 13ă             LOCATE 4, 72ă             PRINT USING "###.##"; Y1!ă             COLOR 15ă             LOCATE 5, 72ă             PRINT USING "###.##"; Y2!ă          CASE 10 TO 99ă             COLOR 13ă             LOCATE 4, 72ă             PRINT USING "##.###"; Y1!ă             COLOR 15ă             LOCATE 5, 72ă             PRINT USING "##.###"; Y2!ă          CASE 1! TO 9.9ă             COLOR 13ă             LOCATE 4, 72ă             PRINT USING "#.####"; Y1!ă             COLOR 15ă             LOCATE 5, 72ă             PRINT USING "#.####"; Y2!ă       END SELECTă       X! = X! + 1ă       ă'       plotting the variable values      ă       IF X! > 600 THENă          X! = 0ă          PSET (X!, Y1!), 13ă          PSET (X!, Y2!), 15ă          ELSEă          LINE (X! - 1, LY1!)-(X!, Y1!), 13ă          LINE (X! - 1, LY2!)-(X!, Y2!), 15ă       END IFă       ă'       compute and establish data clearing block           ă       ă       IF X! > 559 THENă          XL! = X! - 560ă          ELSEă          XL! = X! + 41ă          END IFă       LINE (XL! - 1, YGRAPH!(8, z%))-(XL! + 1, YGRAPH!(0, z%)), 1, BFă       ă'       save last values of each variable          ă       LY1! = Y1!: LY2! = Y2!ă       RETURNăRyan White                     SPIRALING MIND KNOCKER         BIGFOOT@InfoAve.Net            09-21-96 (17:53)       QB, QBasic, PDS        74   2707     SPIRALER.BAS'sPiRaLiNg MiNd KnOcKeR 1ă'By Ryan Whiteă'Look at it for a while then look awayă'Edit anyway you wantăăON KEY(1) GOSUB st: KEY(1) ONăSCREEN 13ăCLSăă     'rozeă'FOR x = 180 TO 1 STEP -.5ă'z = 159 + x * COS(x):y = 99 + x * SIN(x)ă'FOR r = 15 TO 0 STEP -1ă'c = c + 1: IF c = 16 THEN c = 1ă'LINE (z - r, y - r)-(z + r, y + r), c, Bă'NEXT r: NEXT xăă      'Webză'FOR x = 180 TO 1 STEP -.05ă'z = 159 + x * COS(x): y = 99 + x * SIN(x)ă'c = c + 1: IF c = 16 THEN c = 1ă'LINE (0, 0)-(z, y), c: LINE -(319, 0), c: LINE (319, 199)-(z, y), c: LINE -(0, 199), că'NEXT xă      ă       'Gemză'FOR x = 180 TO 1 STEP -.05ă'z = 159 + x * COS(x): y = 99 + x * SIN(x)ă'FOR r = 5 TO 1 STEP -1ă'c = c + 1: IF c = 16 THEN c = 1ă'FOR m = -1 TO 1: CIRCLE (z, y + m), r, c, , , 1: NEXT mă'NEXT r: NEXT xăă      'X-pointsăFOR x = 180 TO 1 STEP -.05ăz = 159 + x * COS(x)ăy = 99 + x * SIN(x)ăc = c + .1: IF c = 16 THEN c = 1ăLINE (z - 2, y - 2)-(z, y), căLINE -(z + 2, y - 2), căLINE (z + 2, y + 2)-(z, y), căLINE -(z - 2, y + 2), căNEXT xăăst:ăDEFINT A-ZăDIM c(255, 2), co(255, 2)ăFOR n = 0 TO 15ă'black white red orange yellow green blue's purple ~then backwards~ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4ăc(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4ăc(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0ăc(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0ăc(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60ăc(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60ăc(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60ăc(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4ăc(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0ăc(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0ăc(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2ăNEXT nă'makes the colors appearăFOR n = 0 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăRyan White                     MULTI MORPH                    BIGFOOT@InfoAve.Net            09-21-96 (17:53)       QB, QBasic, PDS        89   2580     4XMORPH.BAS 'MultiMorphă'By Ryan Whiteă'Feel free to change, to love, to marriage.  NO COMPUTER SEX THOUGH!!!!ă'I MADE THIS PROGRAM TO EDIT AND ENJOY, BUT NOT TO HAVE SEX WITH!!!!ă'I'm SeRiOuS!ăăSCREEN 13ăCLSăRANDOMIZE TIMERăDEFINT A-ZăDIM cn(255, 2), co(255, 2)ăVIEW (0, 0)-(319, 199)ăFOR x = 0 TO 63ăOUT &H3C8, x: OUT &H3C9, x: OUT &H3C9, 0: OUT &H3C9, 0ăOUT &H3C8, x + 64: OUT &H3C9, 0: OUT &H3C9, x: OUT &H3C9, 0ăOUT &H3C8, x + 128: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, xăOUT &H3C8, x + 192: OUT &H3C9, 63 - x: OUT &H3C9, 63 - x: OUT &H3C9, 0ăNEXT xăăc = 0ăFOR x = 0 TO 289 STEP 20: x2 = x + 20ăFOR y = 0 TO 189 STEP 10: y2 = y + 10ăFOR pnty = y TO y2ăc = c + 1: IF c >= 64 THEN c = 0ăLINE (x, pnty)-(x2, pnty), căNEXT pntyăNEXT yăNEXT xăăc = 64ăFOR n = 1 TO 10ăx = INT(RND * 280) + 20ăy = INT(RND * 160) + 20ăr = INT(RND * 20) + 10ăFOR m = 1 TO răc = c + 1: IF c >= 64 THEN c = 0ăFOR o = -1 TO 1ăCIRCLE (x, y + o), m, 127 - c, , , 1ăNEXT oăNEXT măNEXT năăc = 128ăăFOR n = 1 TO 10ăx = INT(RND * 299) + 1ăy = INT(RND * 179) + 1ăFOR r = 0 TO 20ăc = c + 1: IF c >= 192 THEN c = 129ăLINE (x - r, y - r)-(x + r, y + r), c, BăNEXT răNEXT năăc = 255    'we are going in reverse this timeăx = 160: y = 100ăFOR m = 1 TO 3500ăPSET (x, y + 1), căPSET (x, y), căPSET (x, y - 1), căPSET (x + 1, y + 1), căPSET (x + 1, y), căPSET (x + 1, y - 1), căPSET (x - 1, y + 1), căPSET (x - 1, y), căPSET (x - 1, y - 1), căc = c - 1: IF c <= 191 THEN c = 255ăx = x + (INT((RND * 2) + 1) * 2 - 3)ăy = y + (INT((RND * 2) + 1) * 2 - 3)ăNEXT măăDO UNTIL INKEY$ <> ""ă'read color valuesăFOR n = 0 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT nă'cycle last from first colorăcn(63, 0) = co(1, 0): cn(63, 1) = co(1, 1): cn(63, 2) = co(1, 2)ăcn(127, 0) = co(64, 0): cn(127, 1) = co(64, 1): cn(127, 2) = co(64, 2)ăcn(191, 0) = co(128, 0): cn(191, 1) = co(128, 1): cn(191, 2) = co(128, 2)ăcn(255, 0) = co(192, 0): cn(255, 1) = co(192, 1): cn(255, 2) = co(192, 2)ă'cycle the rest  170 length -==>ăFOR n = 0 TO 62: FOR m = 0 TO 2ăIF n <> 0 THEN cn(n, m) = co(n + 1, m)  'red not ok  I have to limit it to 63 colors becauseăIF n = 0 THEN cn(1, m) = co(n + 1, m)   'if 0 is messed with, then the border of the monitor goes *ukie*ăcn(n + 64, m) = co(n + 65, m)           'green okăcn(n + 128, m) = co(n + 129, m)         'blue okăcn(n + 192, m) = co(n + 193, m)         'yellow okăNEXT m: NEXT nă'write color to screenăFOR n = 0 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, cn(n, m): NEXT m: NEXT năLOOPăPhillip Jay Cohen              OUTLINED FONTS                 cohennet@erols.com             09-29-96 (11:47)       QB, QBasic, PDS        128  6434     FONTS.BAS   ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''              Phillip Jay Cohen's Outlined Font Routines:             ''''ă''''                          Demo Program                                ''''ă''''                                                                      ''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''  Everything appearing here in the main program is just demonstration ''''ă'''' and won't be of any use to any of you (or at least I don't think so) ''''ă'''' Besides, it's not hard to understand what's going on here, it's the  ''''ă'''' actual routines that do most of the work. These are just calls, and  ''''ă'''' a pretty border to keep us happy.  If you want to use these routines ''''ă'''' you will somewhat need to understand how to call them.  Just run the ''''ă'''' program to find out about the syntax and stuff, or if you are lazy,  ''''ă'''' you can check directly in the code, but then you won't know how it   ''''ă'''' looks.  The routines will only work in screen mode 13, as I am use-  ''''ă'''' ing VGA video memory.  I will be very happy if you distribute these  ''''ă'''' routines, and if you think they're useful or maybe you feel warm and ''''ă'''' squooshy inside, then please  E-mail me and tell me.  My email is:   ''''ă'''' cohennet@erols.com.  Thanks for taking time to read this. -- P.J.C.  ''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăăDEFINT A-Z   'Not neccessary, but it couldn't hurt to speed things up a bităăDECLARE SUB OFont (Text$, X, Y, Fore, Back)    'Main font routineăDECLARE SUB OCenter (Text$, Y, Fore, Back)     'Centering routineăDECLARE SUB PressAndClear ()                   'Waits for key pressăăSCREEN 13    '320x200 VGA and MCGA screen modeăă             'None of the rest is important, it's just demonstrationăLINE (1, 0)-(318, 0), 4ăLINE (0, 1)-(0, 198), 4ăLINE (1, 199)-(318, 199), 4ăLINE (319, 1)-(319, 198), 4ăLINE (1, 1)-(318, 198), 41, BăLINE (2, 2)-(317, 197), 42, BăLINE (3, 3)-(316, 196), 14, BăPAINT (4, 4), 25, 14ăOCenter "PHILLIP JAY COHEN'S", 10, 2, 144ăOFont "OUTLINED FONT", 60, 25, 43, 114ăOFont "DEMO PROGRAM", 180, 25, 32, 1ăOCenter "Syntax:", 50, 15, 8ăOCenter "OFont Text$, X, Y, Fore, Back", 65, 40, 4ăOFont "Where:", 10, 85, 9, 33ăOFont "Text$ = The text to be printed", 70, 85, 11, 3ăOCenter "X = The horizontal coordinate for the", 100, 35, 5ăOCenter "upper-left hand corner of the text", 110, 35, 5ăOFont "Y = The vertical coordinate for the", 10, 125, 42, 41ăOCenter "upper-left hand corner of the text", 135, 42, 41ăOCenter "Fore = The text's foreground color", 150, 13, 37ăOCenter "Back = The text's background color", 165, 44, 6ăOCenter "PRESS A KEY", 185, 15, 8ăPressAndClearăOCenter "Also Including", 50, 15, 8ăOFont "A centering routine,", 25, 65, 40, 4ăOFont "which has the", 190, 65, 11, 3ăOCenter "same syntax, except for the X argument", 75, 11, 3ăOCenter "These routines only work in screen", 90, 35, 5ăOCenter "mode 13, but have many advantages,", 100, 35, 5ăOCenter "Including:", 115, 44, 6ăOCenter "Outlining (obviously), placement at", 130, 42, 41ăOCenter "exact coordinates (unlike PRINT),", 140, 42, 41ăOCenter "avoid erasing the background, and", 150, 42, 41ăOCenter "are relatively FAST for QBasic", 160, 42, 41ăOCenter "MORE -->", 173, 13, 37ăPressAndClearăOCenter "Please,", 50, 15, 8ăOCenter "Feel free to distribute these routines", 65, 40, 4ăOCenter "Try to give me credit when you use", 80, 11, 3ăOCenter "them, if you can (I don't think that's", 90, 11, 3ăOCenter "asking too much, do you?)", 100, 11, 3ăOCenter "Unless you have a lot of programing", 115, 9, 33ăOCenter "experience, don't try to understand", 125, 9, 33ăOCenter "the OFont routine; you don't need to", 135, 9, 33ăOCenter "know how the routine works to use it", 145, 9, 33ăOCenter "For more info, you can contact me at:", 160, 35, 5ăOCenter "cohennet@erols.com", 173, 44, 6ăPressAndClearăSCREEN 0ăWIDTH 80ăENDăăSUB OCenter (Text$, Y, Fore, Back)ăOFont Text$, 160 - INT(LEN(Text$) * 4), Y, Fore, Back 'Call with appropriateăEND SUB                                              'Starting X coordinateăăSUB OFont (Text$, X, Y, Fore, Back)ăDEF SEG = &HFFA6                              'Stores masks for lettersăFOR Letter = 1 TO LEN(Text$)                  'Does each letterăAddress = (8 * ASC(MID$(Text$, Letter))) + 14 'Address for start of letterăFOR Height = 0 TO 7                       'Each letter is an 8x8 pixel matrixăMask = PEEK(Address + Height) * 128   'Address for mask of each line of letterăLINE (X + Curntx + 1, Y + Height + 1)-(X + 9 + Curntx, Y + Height + 1), Fore, , MaskăNEXTăCurntx = Curntx + 8                   'Advances X axis by 8 for next letterăNEXT                                  'Continue to next letterăDEF SEG = &HA000                      'Change to video memoryăIF Back > 0 THEN                      'Background color can't be color 0ăFOR V = Y TO Y + 7                    'Again, they're 8x8 pixelsăFOR H = X TO (LEN(Text$) * 8) - 1 + X 'Calculates length of text in pixelsăPK0& = PEEK(H + V * 320&)             'Is point at H,V = to foreground color?ăPK1& = PEEK(H + 1 + (V + 1) * 320&)   'Is point at H+1, V+1 = to foreground?ăPK2& = PEEK(H + 1 + V * 320&)         'Is point at H+1, V = to foreground?ăPT& = H + V * 320&                    'Video memory pointerăIF PK0& <> Fore THEN                  'If this is foreground, don't overlap ităIF PK1& = Fore OR PK2& = Fore THEN POKE PT&, Back    'Put pixel into memoryăEND IFăNEXT H     'Next horizontalăNEXT V     'Next verticalăEND IFăDEF SEG    'Put us back whereăEND SUB    'We startedăăSUB PressAndClearăBuffer = &H1AăDEF SEG = &H40ăPOKE Buffer, PEEK(Buffer + 2)    'Clear keyboard bufferăDEF SEGăDO: LOOP WHILE INKEY$ = ""       'Wait for key pressăLINE (4, 45)-(315, 180), 25, BF  'Clear our working areaăEND SUBăăRyan White                     MISCELLANEOUS GRAPHIC PROGRAMS BigFoot@InfoAve.Net            09-21-96 (00:00)       QB, QBasic, PDS        617  40662    BIGFOOT.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BIGFOOT.ZIP",4^6:Z&=30250:?STRING$(50,177);ăU"%up()%9%%%#-%*7[\F$g/UT/)%%%-1%%%6%I%%C4)<?TXM3<=C2<>ASh10B&h%*ăU">Se'5M0H]xUxA%#MUrs?T=A9Gv2'9/&)k=4j018;Q#<)&QS?)87X-$q'.<B=,jOăU"oGD5Z7r_AeKc(j>7FZ[gqQgt^fsO$JlE[foW+;9GRtbKBkD;0a=hZYJ^AuJXC9PăU"tgDJGlPz0)8?)]Xb\'If&A%(\Srfa#Y\Ll*t(UPR4t1Qsj47[tD88U$n?]ZU(^căU"^87_QhbsM/]6wG<DH'DB&=\c;.loo6z]NC%;y[JICR?,Zsh2$gb=up*(Q9??\'DăU"Cas+;*qeiV;y*q46B?BJeYU(2E:H1:(d?vDXm]_mr<Y#WDuuOylK.Io$APsn=3$ăU"oRZEu9j>UT,w36xfZo*Y<Nq(xJK<DyK#Ct0,&-99>('Wu:yqjZeCVGS'dGEi&gqăU"-UpI]9PHd.t,Et/Sv.S%Q1A.$Pn.<lxvxCiEk)O1-',(=BYupT8(fu2]_i<?s8BăU"C)0>>Uuwe9hMRUHpQ:'',Pq_&%j$mXb1uPU&Itn8bV1u8qhhs*(rTI?->ODw$Y-ăU"+JKLnzygdbw99jRXLjX[jMZV?\eXnlf1r=lg-N^Vu]:)RXA+UYwC+f'_A1tb<$9ăU"Z>32QOO<wg#pCa/E&S=r4j1PE/Sikll7d0?7_7:u%3\]9J/1?tu?7-_0)Xk]-o&ăU"ZzSdcR5/If]sHU-#f:UB%.l-Lb6R%GGi4<b(b5d?N:W+9p7;I\cU&9(qNhxjxC0ăU"IC(uNS8wu4/&A:Pb2Qyq8,:.SU\LcKW<x\8h>lrP;5mR2vMqQ,WZ#VjHuS=Uf2'ăU"W65=.ZDJ(&D6K\p&^9o3;Jk0Vu&?r*2ovVCFXCv86rB5:$\-Km*4O^dcgRr]5PCăU"$4)l+-qj=lJ7f<NFq\oF[JA/Omj%9;A9lgm\XiUxC,Z4Kr/;h+jQdhc9#Ar+z]tăU"a%,fI+sGU2IKmJV_S#o.PU%jB%2cF,i2xn_Hs9.hT')_o[P.+(7URJ\^^xu(+5BăU"f=+Nukf6'I#QM][/U36KtTq,tU<[uByYJZ7,qqy*iQed^j;U7vfR]dlIo707tN5ăU"XVciGHT?DIvLu=P5q<ceY?gx5io-I0ft16N_$o]0eK(Hj8=Ej7f;$s\)^Q4$f/=ăU"i7:$C)c3MMcM/g4Q0eq=S7SZIC'/y63,&/QM5g>x1#RZ,K8k6A#/))HLP.oHXK.ăU"Yw24I$0_I:l'PFH#CQsb3*wBs2c-Q<4Fy47>Dh:zAMk;Uf.Te),W:F?GQX.8J30ăU".2ELL.4Dmd[Y-1JkpO(h0&#SI*I/rtK8bic*=jxs2.kD_O+q(RSnYqG/c=EwJlSăU"r+_ju+Agr%;+PK,-;-OD*YQjK-m*9ahFmyWpPtv9U(p7^I-%/UQ(oLO))I1pzO3ăU";]p-Mei>VtAEojc#<./p4mnM3;BdWUpA8AQ#Qp6r2:eI<0vGnsy8;6CxnV>om4XăU"aEjGgr,yu%u%p()9%%%%-.%/2[aF.g2(OD(%%%m.%%%5%%L%C4<A?TYGM<>A?J7ăU"S10DB\z*,>So58Ml[dM[yyg<Me5pA?UO$cSMvJ\p5Jm0skk2n'&hJoSni8QhEILăU"ATKJ$Ra$phq>5p_][_-_o9+VGl>euT0rA+so$pqafukIss:;Q[$<p25&>hM0?3TăU"rcg2MO^?SYoB5:9K#bghHxDA#2J_gO0DU*GaD$j<.h'71Sk=[e#utkuoBM<miEoăU"iC5Ls<Mp(#=XcIpN'LP>p.H#F?W%k,%AHQ$E1CuV+a8=gLs]-,i<lc0UQRPWYg9ăU"mLHjQ#Dre:9K%u2w2e$)km^>.x9\YLQ6MEGC7MIr=Dufmljt)B)EuQ5jUA5LHs%ăU"OWOVuWVm7#7jZXNLJ_b(4/h%Y4AHiFCMaVb9;xZ*'$nBZ)0Bitua%1F/-N[ur0FăU":T9S:u'N8M%h;7naLH+#2GILV0DpssInQ;V?LBH5bqI+sD2uO8T7$l\JZO#/;WKăU"&uqkGCfYoG,Q%t3y.<1J-C4A(yE-?v7G*E&v2fqFkI+o^JN6;CUtpK:NG^Cf9i$ăU"PJ;)7w'OWbYP5>5o=bu2XOC8(J_k$e$<S)>[n5VW0\9/Om%zjV/(ob$^RwjrS6EăU"0\xhk#S;2xw$gP4$.TckHLcke^c5bsRTm4MC\%ZBthdFQ;2*S2&<)U*t^9i4sX^ăU"IRzb)>uZO:3O>Ql^CUlLj.i0dRK]eV\>3Dlm7za$5t0Xw:L9KtMa96Qk(>p3zT]ăU"3EUG1R*U2KOq0#[YrVPrVF4b:/vdUa?/r[mcm;QUX/Q'aj9gdUN:Ls_?M**Zc*^ăU"2a(7v;n&Z6^+E<4:fLz+-#'bFeSrg%^;I$RL7Uczj(k\H:uW;^H9bxiv^WA6.;4ăU"m99'A-<=&EslO,Qr5CtF*%S/7Z&(0WAdb-9361bTQ[U<F</G-/v#?KGbl;;pC>\ăU"MufYA>5S4:+.SS0Hj)lP#aHYqU#fQx_[4%xQ$%mU'VS<-ZOw9NsrjhJ1^J?P;ENăU"2G[9pnF^F$cAI]JbOZHWhia;/o$MHVQy&W%Z4dBcsM_Zps-bV#c[7$'tmY-]jF7ăU"jL3z*2MWj&35pXu3uI:J3IzKM#rYU\>s1XU?cV[/dYQwxd20NIZ-A=EpPn.FH:=ăU"dzdM:54*):nmX.6-/Drr0%bJE0Ij3P:/V'+Jq'x&up%()9%%%%-%%)q]Fpi^P*'ăU"u*%%&s<%%%6%%%MC4<?ITg;3M?825JGS10PB^'<+tTm5]wCNxq0c;Z'-sST%eNOăU"y/P=WS]=v7'rPM,juOjN*u2.L?QusjLhZ.p-E[sxZsu5tecGea,l,\(h8ljO<u[ăU"9M4R*P9vE^RD)U3pfIG<hQP_(1*i>Mb>)W-BlI[_[;?'qh8,B(n9PFj<ZYj6#Z2ăU"7a.w32bEj.^tr;E'6MK9(cHc&pTQDJ4jh;c6q,L[PgdWq_Ocp;7ZQJ7_Wf)1.r5ăU"$=6NM:hE\Kag7>U8^:(f=F$n+T)?uTI4/8)inuB'OMN:CxGBSccjAH^cH=:K4J)ăU"7TFo+GMng9c+wB3+NigN#*ptnzZwIJViC'&H&z2n&Ze+p[CZ,*cBao_=$z+F/8UăU"L00P6l1,:vUOR3tSX)jKrOJ(orchOVr;S9gfE,=b6A&,L[nF0lw2(*nn&TtB7)căU"Dw7sy9/80'e(5EW0u9?;cJZQE(?;a-U\68Rh^C*R3C7OrZs<ZTF-<lN_S-(\lsxăU"Z)KojjQMqq*1-$D,[#*4S5BAV+xHne2iztxUops?Y/F#ULVd18/soo5Jn4:$hEvăU"#mph0=.u]\j#-ni]u?wY4Tp$KH8;f/Or+agwt;>2.5qyf_;JSM5J'42Z6prp4:\ăU"']evXFV/;<J1LTfE>;Y.)_O?s5%PESj*uEfNdN&6<_gpD<i]01Yh91bMLa_OoDoăU",X'd.X-jP'[)9piRkCQVrr;g;wK02oj0;_=60)\Tj^^Od(DoJ1r+0OabPP<L'&+ăU">8Vlv)n'>B=Pv'6\_Sthd3rH'6n8M096kC7XI()qK1^nD)NOYND.dMALJq9oG^PăU"AOl]ZGLGh=4.CAt.>#bF<D4[J/EViQ>/IsMdGVJEt#M%P1A5]HO\#0]o;DJ2h6lăU"JOPxP_Y=H/&T)7?^Vf)fXc:6c'=q/=0[Ygg_+q>0HS3?Wd:J3hlI&\0EBJ\rBgFăU"PUAa9)2BFKp>FpkZrqrlICFVYKPWdP=^Q7(%B4r]/kwGZ4Tb3Zq*.6]1&TZZ)PEăU"Go./8(c?rWA2F;ix*1hQkV2knV$j0,Z#+Y/*0ua4f#NFymg3ug$X9N[0OSm5#0găU"B;Xs5<8N7:3Cq:iIUa.FJ*oVjj#Tg[fe.K2><[2s_aRttFG\UgjffH.R><(4lpjăU"8p-3zLE&'D[gP[i-:C.LbkH1-i)rzxYIfv7611QHQem?.6G#B[8^.*5i*L:R2/văU"*+b^;6<(yT;[h[Od#Q%_\eZ=pR[^[eg&t%dmm%9?_<fZLgD97j%F9UY8W$?2^EoăU"[8&\[m(>ufw:-/T*?:DJuXeER?xCZSDq5n%n'bq7dfe*>:K?NlM:q#M1U0L/NbgăU"1DF]fiipM8>VqG8P$(%58e2K(;%Epu6?OipQ\DOAsmb:t0e-(8Q/6xN?07^C#tUăU"N(V2K=mtsSLUuk'f*($^BphhwRZ^Tlop_ed5f?4'-\3jn,t*?%W<uaqqxOVkh9_ăU"M(T>>;HTPW.B:&va]TO*JaQ;DPgG\TAY0Cci>,$>6Q().Kj>=)=.22o6AvxOXF>ăU".dMA4d_Dj%gKnU%7(R7Oi%Q>MrdOurA6f,qQb]]:YSeG&7AD;s5m?#I'NPzREOJăU"HmsvK:A-/R:(k>XT5<J#IOE#:qGO7]g1Wg]EzF:pV&/;]jS#hYz5pq_zZ'fDZT<ăU"UaA>QE?b&]X'A=WHDebXSkN[_p[AyfRI$kwYcQrY$1+6A[#[,hm5.0yAsT3l&a)ăU"I0jDia/.ECj5mG4;Kmse8Lb.CMH=^*Gz.jGo0>_Z?4:RF7qSUB1JG=Ngi3#8t(_ăU")J3MU[uC=grd?-nH#ieVBF(^D]t:e_ngY,1f8o]Z7GYFVgYf2a1td29WP%Cdf^=ăU"i_%=ch%Ot$+#ELIw]XNW/m<w\hVrhc%Vj;R(EgRft+g;H1rt$v/-T&^4L9rGHwVăU"j0*5)-^c?0)=,#$,YHq[AD;Lq'1P9:Ya3tW4h5IiOjXK'oa\8PtfNGjXB;]'8upăU"(%)9%%[%-%?#p]F0NhXwY#-%%n%<%%6#%%%C24<?T1l85WM1B0ELS10BW>'t>][ăU"m7wUBXxpB=j8gdFQ_E(qQK^Ej?7C(1?eS3B8DwR(B)12;3jIWe.8.tDtJ_r*F3văU"b0&M*i4zydQjNrBYIP6<V\jxydqj_H>l//Y0S/fC_fEMjXbifTff/Vg0e<Aa(VfăU"cr009GP6b2aaDf;\c97P</'vBtcp,uBKU37fJp0.%a6Vl.(5Ae&n/Q[zo\tgXH_ăU"LbcQn7P>+agmMe9)qZwnS&6\=\Rq.RO5NCo0ph6KE0KIme0aj\1$WYeRb)B5d$>ăU"n<1BOJbgrw3ocPUqJ=%$Ant-R-ae5nF8ZH4I,5Zk]iGe%)U/cI(pu>I85rI-f$RăU"TlLRrm'SZ'-oQ4uGp+R)r^ZT$pAgLQ41u^--.DF5Z/?JJTGZADRP\['=7I-OTM8ăU"6RRuRT%OF<,.Gg[=-oG5m+^0Zn'W5)47(a:/4c_])]kh7u47+/b6mN4^jI(ju<<ăU"hPZS8%TfKxXhnGSufWGkFk&2Sdg9b+/,3xH)TYeA]o&t,:g6#l-.hQ%*kjeZvZ>ăU"-S,JlT3#_gY4#;'p[UDmiwZ_t,6*(A/8FUgA'w&'\8%nA/?+6P3:GQj>S6;&4zTăU"tRp1*]-NgZlC;\D)3-_pBfST*:LIpoq[]vY\uoA+sCyz\woV#\tZWcnwZI*v.6WăU"bB*TGT]BZVwi0:gT4MF7*_d_1.jJ5D/tX%a\ye[5t7s8M9\Nfda&%SJQY?,&kIzăU"B]aw3SIgP9GZ7uP\r+b_TRZZ/l&VS7=$O:]=j:SP.P^FRMimcx2)u><EN9ZnChcăU"s('*Es-h't0:CARFcW:H0R%62CK/;tBq2Nz:c;>\Q819_0MI8CuD2p0dKg(yNv$ăU"S/ssqCNWw%3P#o9O/tZNWVl^Yrg=QTEW:0:ju4O1Zw>b^r7:v5DnH?ss7]U/]tLăU"8BG+nY)Do.f>HpZ';Fp,>Q/=_3uFS6:oQo-hV;erkQNh7[rUEt)?feX-K:vkCf3ăU"d8aTD<trnGv6sS)OLG3l1K2+[Z]9Q,P3FP88S'1Q-ey)t2I$t]pGs%^[oGKC-2jăU"PDu6Zkst5tRC'dUK>%3t8Yck>r^%+XQ2Yc8-a6pdri-c>5)&cSgdqE/E6HgW(8>ăU"F#dJ4X+MeA-uY\dDdWi.NPISw&:o:*#QEY)Ru*WjQLfnp4N<E*&>i4?D*969ggoăU"K9?;EhaPJ;/zCM#rXO;GF?)G?R3,kF,%mE.qhqj#2O6RWcJ<?1Rl$M_0vsxpFpjăU"+1h-zZY[\oX4:AT+VHzT>_]m:Ak:rkYIqP_Im/23,(K'SxtcW0ETm(b]W/Gr,19ăU"7A4+f<6H>xIpun^mhaDkV%To/yC=U0Tl3]CzPH&'>U/rh3QSVA:f>q%<Hj]uEw6ăU"n'9Me5FaJ.U.-\;*jUvcS+x-&Vz.+tjmj[)a+.5-tT',PsIo/ROQ/yigVvT+d#:ăU"W2<=Z6k'dnq'_^xfE-CW#4Vj<dsVg)ihfGpuB=h1+XRuN2:#[TND?'b[glBM:u8ăU"'tV.N>K%>P;>In,nhukm;a1(6'p][(>FQ/-0dYOmo1UO06byoG6)8g7+.<iFvCGăU"s&PYA1$bpdb]oY=l(^-V6iiSIZnVKXl-WCxtN3Z?haFKprNUbtq,w>%0s.f,WDGăU"]\md8F(4bcPG183'W;*g8mmKl^Yy*\0ie#&e%&J1Bs#<$HG6LXxos<]K4e*+XEeăU"i9v7nN))N^sh2?P9^3WuAcBNKGdhv)\qM4?9Jg3.SkH&<#d-4;;p<p6EP7LpdgRăU"6lirD;xLKd]_kROi'A3MGU>n[<u2wwgo8wXYq]0qo-\%$139'[0*bF6k[Q\HpvMăU"5.=J-rUl7K++<b.MZqO)H\ZI=n6sN.X3ojuJQ3<Wovtub9V,,mshNau1N-xD-enăU"FVKYdrlc:hUpqx(CpMRf[WH=$s=]=EEHCigXhMtZ1t??rK-doROM1uwe<GY$ZsUăU"O''?IxKo>RpT(58'L<>t2kPI7]]M1[Z2'4Xi(/eM3r9As]CIPbc'gCri(%LIV;1ăU"+ilD9:'$;[8(=SDiKX%+Ze)nRAMU)qncAu<-;C<2V_AClM42'L)7OP..%>&&[JgăU"PDog>\'9IhT\doNy$XDd(uni9;N^bD:nOrcMDe5yqbVCY_P#sm=k6NN8N'Oa^CMăU"eAld8aJ[LdzSEd#crWX2hifGne('\t6#AE)vycKn#1vegO[L5?ho%i3#jr]Q]$wăU"e*J'>nFNvn,0rnl;O2)V4udw-,D51zBfvJ?F,A#:Q52shS&7z?t0%FlBli<NL.ZăU".X]?Ynx\?:qJ:5BH#.*ON5S42X]e1cY(q7A(rUnyGie[7Df6dvVbPAR-Wd'6n/IăU"Q0ussHw99#0='M7u3dmnTYvusd:]MtM[=K_oUATw27<v/7#*IE1sI)_34D?HW3DăU"=Q4%2Wd]cvaEL%>0WGfEm'-Q6SYU9'2nT[KRo/$ZH=B:rK-^?)&qfR=z+QW]007ăU"0L=(az3('gR&j$g=_(LdX8hju*$H*?N,S8/9\#v=sb+Y59,ulqfZVbq=^)'a.d>ăU";eZ(S$5i)eF6%hVzDzGII_h%;4)ze2R$8jHQ?gQNm4HGZ\XaF]BP#AqU&nkPB-văU"EoU;a1WgdKo.G[ZU9uDeQHO;z6;:orQ2nh-vS85uP+rjCNs-QF=8CF8Bp<<x.-măU"Vx\Lb)&obFNw;+oUXyibSg76KqX<KVT]5B(tq3WX:bjDoUWC>m'XXK2eP^1X.=(ăU"G[^8ET;i?k=q?;5LJ.I$F$u<q6bDm&rw<>X(+_8PfS\3vXn]WBFlbxi#t[E1#BlăU"x*9U%tykaZ-qXJ'8(up%()9%%%%-%%Up]F=erW.%l1%%&EQ%%%5%%%MC4<?ITl8ăU"5M<0GGLS10BT^?v>TSokF4IwV68f[Ig)]^YrLubvS.].I)g]o9limCa:G]j*;$GăU"g+sZPXEMhGF<L$_IbV9bb0/ldRhRurSRRn,DWsY^)k6fjKA:YB\Q\VYT<zLB[EEăU"U%n_M?e[tE]kbd)m<UV:p_+3Y\;A<;=%[20&P#DFms<_'lv>.ei9D_C20LpIu5făU"W9O<XLE+H)(,&5[W.[\Vat]jAVv=Z*)'dAC5ZDAX]:*iR])gdUTxc];SUW9B1(4ăU"]YS1'2#DSd;UjTqPVkqJ$$Z#pYFFqPV:[bjasP8)mBYdWiyi^0F_Uzu]'PY3K?YăU":TC#9IdCcRF?X9lD7n/)8'w$S,%wgAWe$v&),nfB6[BBB*$J&0P>-4)/\#M$Q5PăU"8+jG7.E59US(_'mh(at=AgAPVw,*tlW^A>Qj#P$kSDt8^$]AH=*24itoa:P_?lTăU"/ZU)hnH52(*CdO1<5WxsO<qjq>2ADUP)Fpk0cgrEdt\[5G/*gni6[p\dTvd^a+xăU"itpmy)m&Rm[aiRg52h<QnD:T#UWTugu54p$o/U>:'6V$Zwh9tv?O>7aNKeED$FtăU"&m<E)F-zV4+\&NN5N=;=1L%r1B[y1HHA2A?9L>kse^8dfgb[hH)x?g:JihsAsViăU"ble:jUmInTLTSxR5r[fHcTn/PpGKE+*Q#f1pYBRdtNetjZ&DP$.[eOuD#/Z8oltăU"<XZGz99OIy]MV/+4jDnY??>a18D$-<US2E:kR-2gZNmdf;.CB/nqujg+'1[Bq+)ăU"2]xh)g:^sI$T1A5OhO0c<-u5j0a\R6b;ZAcAOA5'%Q1csQYn,zcl7/TU[rS%:5păU"TDJe.K%J8Xu('YY(Qs;sO$:.;^e7$^InF0?8:=-#X<jESu?ljKOb%[ZM(rYn0I&ăU"7(SgHQ5]Vhb2gUM(L]MTKw\kr+#]T/(:VYS-blDf3z9Z[wh_f1)3vPHCsuvp_&.ăU"oZXN.u5Cv?SqLpm^qO>aEiv;Q5R1mP,q8;n(:Nfj*WfuTn<94f\:CXs1c#Wf*EYăU"_]]D?]hUo;du^OP6Kt)f1&zY#1T)\+2k#F$/m$<XRM^1B3E$h]r&mqigW?.\$X6ăU"e*Ls'>I*9-CulWp^^3/H>OeAFO+]z5%SYV#]M1RlKNX.v3(S(>[F/e_MXEX_=6LăU"4vr(:sJfQHC9I#]8%pYz_:u8_<RLUw>>mU=;#<wsThW%.&VI()foqcAjH%N%W.1ăU"FFE5D2ex3_ZT^$Pz<hD')re13x)R#[mhin2gGko]-I\HMSB=-Yc^_8'UmnsgJ)aăU"TNMSB=fLjeTXy\/>\-o:K[eT4As=_FImA,g&/$5pXT+u;I+zwT;:cD(L2F?YTFrăU"mpv%\KaG/q5hSNeHX5'0-C..l=uOYc)=zeKONP_Bfoq2tBSjjt&%4-11Mzd>*j9ăU">[m<*EKAP\6h%-tJCxGq&?1wg=*ws1V>])-3#0UH0C_tFkzjxuhMAFIc=e8=PM)ăU"#^d5JA)cW*n'uGYwwi+NLIR+FVvf2B23>-1i6Vwurtgiu/k*Q+6S11*4HhVDCt-ăU"\B-pJnOc][o:C.(QD5&NwHZ?pS*?oJJ/L+9%vwl_N*c',nJWbKWa9>ARra]cfRxăU"KF$pD2C)et$*q?g$;Z?*-AnVY?op91YT(6;\cw0PUWqKjr(UoBnMH\7dmHc]<GcăU"/Rfb2a2sB0z=UN1,*VP^FAr7vvYt>0mM.&l)6lT5fWg6QJrPNPDy'mkjgKq]m=wăU"/?#BNM7>sDJS)i1fEz$>*MLI+?-6;2'Y/BeN4xAVQhhuw7QaL+9F4OcS]rmid?lăU"s0Sp'?OMD:\AK-mIC[j)u%m4Wj5h>:u>L^<bBkjiF)'Te8O>TW9^<(UDG(4UaMkăU"WayT]8AbININ8WA'Q&Jpo<1.RK-'Q(CIY6e?<Ls'W;6Mc[5D[.K8G4F0UH3JOvUăU"T5/;47u?o[,*GffC.5WoMW5D\zsBfmthj4VhXK2a4P+C?I<9J/_V/]bV^hJf#^)ăU"WEsF?Fx$K115<K1gvH(vWZZ(rRq\D*7vzW3pGd3fW,+[]S[u1:5ui:JsJJh_s36ăU"Zji+21Bcd+_>ozJ[zCCiMqR;k(wjeq_kB]_edFVJ;2LgsjeK(6T*J^=0.wgg;R^ăU":x#5c,Ok0h1)TKNB=tt5;Q>oR3\8Jj2CnsAL_Jxiw7G&E-8kR/'T>9rOHTYX_Z=ăU"MObC:W_Hbs\i[2bP=f>N;6ZHY$,:'Cm?DGW#ReGLmggILVzX?mVAW*GR<=?Ji$găU"BX<ZE-SWgJ-W&dX8<F'QX_fT7\MBA[brF-(J0Zx+t:u:wcb]V:7;lu[2L<yT:UlăU";7ZV8XBG[U;%N9BOG#:d)#^/,rk&Wa&Jb)/0SL$nx^o683_9nb?=9m5)poJ%8WdăU"&\2v$\wSB,t'1k\nD\YcV-p2m:)Jr_p1L/7N+1Fju1%FCOPbBm:J#(gMbs(NSlQăU"l\S%#);PV*DZ?V(hSZdnsm,(#hzZT,M\tA0GtM4M3tB/V\\kI^AUjNXF(F4ChyLăU"ay7Ta/u3#pW#Cr?KdoR%Mx:w2xd*2LI;kl6ZsvWO2/>ASu^0ltg_E'g]Ptp*F(QăU"65C#j=Hm]lPt]*Xn+_Oc\Bd]^)LIR;3+iL4KL'*T<R'=s*&FFEKj^fnYL(TOg2aăU"R.R,of=02_yq[oBM%M)]i*>&4&v<P$)3mHjE3IQ1e:xs9,$0E^6z\4/ZIkM+ULpăU"?EH?9#N?3v<1GInu,xAGecVz%h%gRlN2kj+IqIIcY?K%(_ks7LFJ(-aXALJbOwKăU"G4BRlle)p>gvfRtFVVmdAG]*\3b0RPtMdP*fC&NMPbNC7qOuF$FPAv9q^7zsndLăU".&b)\5Uhnd?t7k7]L#3EXbZ#hXl2ngDl/m3i[hV8+7dD%%\2LeJg-q7qGDe*G^OăU"6:a8]bjv(4E)sh#f-3)<n)QsJd^nxD)5YQr&mb.W2,9_3jt^C9+fn+&\V+C6;BtăU";QdGT.)wIFL:iYyV'#plC,)4b9_83m1\7Pv3#[(2rIQGt00<X;%-m9[s+2UH:k#ăU"qS5K\GtF*oD\zOzUq:+R.qYQQ&wy4w3*Rv,g>_ucdkju6b3e^/2I%6'YlD*t$ZhăU"]%H,:pfN\CDfgf;A=MuPGkYRQ[WR2(*hADP<#P^p[tLqiz0W3eSI^.eS4?SC\)NăU"5o9u)'_S8X07ke=OvmqgUA<$1/6q#'2341L;MBjgaO*H8SoQQ6RnmP?=XN[MfrZăU"k)se>^&\S)dGttpssuQSa.n8rbLfMr<\o2va#ny6\]0wL7ki]pMO7JHN)I;oP+năU"JJR\nvk27eT*TT-'Ukj.b\)h%v:/6IpC.Lo9>vgNnxgL.yViYkq%_GuLMlYSNMhăU"pbQjC<[&SEh5&Q6+&G<_GoAC*u6qor\J<Bcq/&8U7u,-+dY^7FE8'W>XD?v*tDtăU"i&;J+7x*;9xA\M<0<dV_p5u&;';9oW]8Q2j7_mR^&53AorheXr?U#q4kg>.k97XăU"#fVyohFBdfLk0VqJUCm>t#Tpf5<P-Y3:C>O'Im)]k;VCrSl4JFf2s6:jt4wV*s>ăU")sw?Y+fJaL#&b<>AM.A8VF.&QPWq,#Xd]^/RHt]Yfio&s^$^b?pChaWTqjBag#8ăU"_ZuPqThC>;NVoTm;gKJFw-IK2r1v>%WKTEr$j+_jn#4<j;76'JO;>n(5,'^[^PlăU"NwTlS]lmzpF[FxMFY#h&':#L7Q'#oW/I/=^7G$7tNH=#2<v66XJ5=mY=)H1XP56ăU"NgL$2x:FrboF<?m3X\5=AiHhV>vrmePG-X5XCfDT8Q(1?<[_(qz(O\WX4fi5ZOtăU"(=7(;1*uU+'#:%l3[?*WKil>A#AG&^k2$/&:3p3Q''^zM?iWHcv'/TXbdB'bMFHăU"__Ti2W2n4-USamFZ$Ag<J1D9-mD,:o&Ji<$i.<1R(k-'BGAF9Ti4<b>Nt-w&WQ0ăU"%b$a[2gPq0-oK5(M0TsQ6m(Q?-r5Z*qay,\)CDiUFN,t/K60[k^xiD6KEw_1XckăU"LU]#-ukV:TYnsVPl]oB7p$_Uwa48$I+ArTu%p()9%%%%-+%F.[CFg*A+;]&%+%păU"'%%%4%%L%C4<J?T8<M064BLS10BS\vJ=BSe5K60]N=2qyU9du1<N&oKz/(k'*$păU"W]K_'fU0cb0XFtq+?87DJsw.tB/eVl4RhR#bT69AzpA425iYu\Y(z'N\L>$9-gZăU"^)fU]4Q6XSi:mpOJfZIxS2EGp[<F=P&'(*zygho_.J09Eqqqpd1ask5F9[zq7.EăU"2&f*;;4/1w4QF,h^W^hsx0-TS\%1M3E_944VgFBlKyY0c%b82a75^U=86C#Q8[)ăU"Ev$'u4GdBNHp2v+QFj[cH&]m/5zpJnZuLu)iXzbAM.n+'[2v9&_<2JS72Fmos;JăU"ATRHzXg3ZhY'c2YFe.?*m>+/&45VUll#AK=3VIM)F=qA%0RCNf*,G//>0.SBcyNăU"PL;Yeugzr4h&l>oLZc+*Bg7:CB8PTsNSDu-OLI-aGqHPnhSP'RX0_0kc[0i9[_lăU"]GP;B=>_?id#r5dt,G8=tl8mpwk60kZ7?Dj&o\\eW%q5*d7xMP^jXrG=##R,rHjăU"f)h_d2<*Tda'R49VBDk<(^EbDev?b;w)Z;krt$3qn$S?Qv8O[4(D3hQ^Y(J&Oy.ăU"jJG+NZ^'3,>J#P=]nQrHdk=/UhR6\3q]DJ7j64[\#laj8]1i=vp-M6<NPJ+,<R$ăU"w*%up()%9%%%#-%XHRZFBV<j]c).%%/4%%%2%I%%C4D<?T:2A03SM10BTkfFASdăU"m5OhFyj3<0eO?;52\nrbeQsR?uQ=QA1f=63PxY11(7Rk8'?[Jr.f5;5mlBq7S^^ăU"n]k-n^U:AD0B4JIU2PltMsI3$dZgbb$buLrHNcPg]qhfD^d%S;W3,/3d,6iAZV(ăU"?r7U/]N22?R&+]70za\)AK5K#a.'o5,/AmJ8bLINYvwfa1<:iiNT*a6mb?=e1IBăU"V)K9Omk$EpcZG;<4>Pi1a+E<%4,%60r8OWIbJPB2nm4r&]u&]'Z#9_QM#nTsI$6ăU"*,WP#Im;nTji&o?QYa+cl)o8)3]Db?w3Q>d*,Se2VW:FrQa2zZA1>:AIznjK1CGăU"g#M(sh_9MMlG?6Lr65;%VhvC\38QY6'$'HC=*(eM,4[AXfg#m+$iQ,56E.U4tqpăU"5+NC#R%4J._5e#<cIE>6F7\[l&RokVSX._]spzSn-d4$sWNT,**4ht^Li7OmDXNăU"B&1r,+'<7s[sK48>)P,hayp'_^aeKB&X[kiJSu^fo\cJ?vMaWB>;hNJ9n1,eq%<ăEND SUBăSUB V2ăU"At5n\/Ia5\7CXk/n$iKhgjI^nBUgIa++el(a=#7Y*g,F7$Lok,GYlqhahT,u=[0ăU"_JF0JaR8kx[k+qYog2'eg7Rq%DtS1H>(fJ9oZdvB%k1wDUZVfTC=[EAVD4(8Z:9ăU"Ev/lgW3S^>XeUEU^yebigEQn(1?4d(%u0(LKQW'?8H3'9Uc'YH3=g4pyS1T2w'kăU"MGIRI'?\*d0BHB4(H_RKiX#Ke79v^NXnIHDr8+/$f[uWv&X\SAe'BYz-cmf6\8eăU"8g^qS?lQdSTs+9ID*2(qL(0MQ=pQ;Z=-rf[t))VmnNU7T/Bi'BmKs-18&lXu&\iăU"CE'X[X+-d5f.+P_'i=w=bK.grbR\H18N%_^:?v8l')X065qdICK0hz+%P<rMtm-ăU"CI5uX\1+>TqK:g(c)4r;[m3vbIME\$EC+e8df#cKt4EkZoM9:)u<;(cBhndaMqsăU"QB]XAjO_blAe=EVe4ojVYMLG?&A]$2dKvF<H3kqaJHY]]2qcV0sh4Hn$qh>/CzuăU"dGxeL\cX#WrS,J8:NAZTWqfenbuk3GPnuK,(szm.?cd(W2kL6L&c;*q_<p27S]lăU"dyq>V?,FMbht)lEa9*4F,>zZmf+&kKwuxeslgfq'RYv#itOK+XsaB+awa;+#xr[ăU"_Mz?80NqxN_b.zkhzU;BE]Uo=&7mxKUdz]6j2ReB8&Oroph-C]ln/YGgIzf'Z,AăU"'qY&ilQr4ar\ht<A%BTKt3io\Y7ZJEqFMhKxaRTZ]i^qMyBS^?k$^qMuB%4?WTeăU"bzd%>9AV*nA>N*;JZe/8'lhT$IfpiDtUb_'RJyl-w5eSMTKxZcqwG4='OJ4^9I:ăU"'i\N(AcPNw7T'Ye]lE7&JTp?kh+iCuYAMLCh;bL]y.D^\4&_nune'jedIJ-^9QBăU"=h0O?YZ3LGhWI+&5(_1=ihKj35V&W<5ATAli\hV7eFEs8HiMm>)$CGonnF5[G+<ăU"/C*sY#Uo_M?wHJYA]$zX?G1Q;CU6QulQ<u_72(n)ISL(0jV.BXb#<FtGnjJ;1BQăU"m9iX:G)-#uuqd4FTWW%$vQ20ZFlXRA2Tcpv.#ctLN45hK(CdXlhs%<up(%)9%%#ăU"%-%_B-UFw^^UvA['%%<%-%%6#%%%C24<?TLq8=42;0EVLS10BK.z,>Aje5KFl[dăU"[;qy/#Yv[GOE:9Pt%3vu.&'[vd#CG6f1K%<Qm>wBxi7J67+FfxGOpZ5hZ2264PFăU"Y<a:=-mLpwd:$:He#M6:PvrF;L_KiSsoXi<BUeaN?hu]1n[B<\Jsxd:z(FVf]\RăU"dry4go&y^C<2Ev5\f<daZR6>I0A221dc?26^Tm*j^_'G:(l7-(RU(9/(CG)S%SbăU"L1sB116E5Ay4mbq?IOkm9QPFI6_^%:(5[)I*$;/5GX4LklA&1L-<^ZIC['FuFY'ăU"ZBF&/d;GB/d?)f-N&3z[e:z)n'bM]VjIB>[#;FOAc;ubD>8^.+PW6m7X*5C<cuJăU"[KT7E$0>.>p*Q4;pp0[jSfvz&:/Y992>wF_j^+DHXW%aY%LlQ*,L.,>nmegVtMbăU"?j<AEwMp#x'Y)[[Jq&;c7P6;ji.q(yd\Z[$\N*]_zW4D*U725\VGHWOcY)B0AJ%ăU"(AuJFA2R.-V%3pD*Wjz.;fD>pFJ6m;uH?3oo+N6A&?:x:-Xr;G&x\;K#?0Zk:>QăU"45D>>KB#_qWR5Wh_\^C-jfijx$e[kXm.5,wnys,ppp+m\x0t+h0t1hY;TG&vrzqăU"42;%%>;PLN=xF\dfrA1Qm(SHf<=Xd;yEt<?N/whg;%FJTh=Muo,r->5e3JO.ABTăU"IGD^%FPMaI_,:T_*e]gt,fn9zI/(uey1*:Q<PPQiK7ANlQZXR6e=VC$2UrQ.3=$ăU"WCNF'UU:%FwOtAB9xp'3$T-F;2r0qz8-)nHv0BTl16;Zlu.;uOu2w=<$t#kKqS,ăU"IX?2VJL;4#D)z:i;dgLuhLW$g,qf[c&[6Jd]jPo,]qE+b]Dj$fLR)itB+y.Acv>ăU"uOn>tV_NL&M4:i0[vAKl74F:COc_&w=MLR2I^5dKXUpJAVxX26?FV(+>.%up()%ăU"9%%%#-%697\FB):?PR'7%%=-%%%6%I%%C4)<?TuM82B22A>;Sh10BFb%ZwSRe5wăU"NgXHV(0/Bokd#5;dKM_91<DW9eYkOwZV?iM__BahAa#nV4)FX-=H=/Xlr_g2TNVăU">F><pe4RT2c#<#UeWWmj=kq*Y6c1\%_oJFp6-.KveAq;jg=g&Amdm#E*7.1q_W6ăU"7<6PXU.qd<B5TzO1KM[8^n'V7BoJ'X_XfE[,mUKxu/9=p=I8\V#wVK(^iOes+)UăU"+-KJ<#k/io'/=hqWB/&SVf';,W(KZY7T=suv*tL9R=HlnU'?x1$]/<y:+:$=n2%ăU"[B+H3er5>4QFf2>RRFXX:rdAl,feD+?l+ok-:*M%O:8(gV]32b0JWFPubtip2EKăU"b%FG$z]1BYA/=+\OT=x_Ih<j[fBO9[,q5fdhCc/PBpjA+2O)Qx/d8zR.)l>SGkRăU"nk7HTb^Wc3:ElRBx[BchCq?1AW?aPif9yorb$I6?f/M=2Of$aSC>A#y;MmUqqv3ăU"DQkEx]:cP5P4;y;lbmgReerl.Fa.H>d_J^4d$OqEYtV:H<T</Mnox$[d:cM;???ăU"LNAjR\pl,*V_oB(lLac-#pR0BckPe.VDl2fmd&_X:xZ<lvjjurGAV#zRE^uu8D3ăU"[tOq&_Rg86$aS%SlsP/FsT[gc:MnecZZPV_]tONP'xfQd-c^2FOJ0yuftS6YXaMăU"yN4*c8I6hIfjFvxeOhp_+Ua:Epqz\up/+*:RoqD;xk/p:#(HCbDFjMW):ny.>23ăU"]w<QYdZOLJq-78N.+%OSUKp3;y'0p:5;;[iSNEVX%]LmFhdZn%6oBghLSvnZ7I.ăU"mZP)rb1D<pKm/lveu:Tx$XyQ?T8iv=PUb4U,IglG$O\%6?pmJ*\LhR9,'l]g/MJăU"$)Ih3#tj>Wt1cDs1c%A76+1h'ti%Z'86C2x,gHqb&o8=vNlpe,_sniqi+)cw0z)ăU"(xwd.f\6RX?_(dW+/).%up()%/%%%%%%3qR]Fc:7s(E^7%%E^%%%3%I%%C4D<?TăU"BM:D;;LSI8?%up()%9%%%%-%rh.]F7P&N>G'.%%[0%%%3%I%%C4)<?TxM:D;;LSăU"?0;h<a,G'eE1hHX(YJmN5woH8*Pw8l=snIX?^JpAaI$6ph$tYu)l>YuGkw[v1'wăU"7V;B9+kXDJFlXg\)_YkVdm[Y:(l8f_3;/=UJvsI7ur,m_ZOHdlC/XR#6]<iY7V5ăU"JAaMU;gI'%\bW./fCWJ7mEm(RU.Q^;L/dfi*Mt9J;^</_Q3P0PotXL[-*#m;v)CăU"_?dZ74K8Be5kWiHO-\A>^iI><Ps5XOK7,(\m,c0Ki\6&&L>LXMnTv%pDF_RMEl:ăU"voo_E-/z3H8KWS-5tEXWrI3DfIEM8<^uPH,]YjqCzD^-45+mFFbX4Zb^EiHdHVWăU"^,YQUR,vsa;9xt7EoJRK?$eaGR7,aVdcWV&6e49CH7UqkPu'UxN7ZYR(K6:bL&xăU"s_GNsWE5BajNZBwhrVYxVElNTWbvHLp^2;QYfRn&PEwKvHGILN:X,m9I+$DMNA(ăU"3ygUw>bWK//M?=h[<uJQV#RlDtFC/ra:O;BebOVnd6sr^:%YBb4%Y.+?;Rb>GB_ăU"6\Z:OXDL<JNk%H0<$9bco,Ypi[Dyiqw0%Bt;2+0h.pvq4x_id<X$tBBRScgYi[%ăU"iRSD4?Z8xZF9J83-FH,RuN[m=uXKjB2>.'*<9P*ROow1F7e,Tn42omp^P*>F6e>ăU"kK(RTX4-3wcixqGh&C[Sccgu4BE'obtjJtzd^\-5f<a+pZx\ue+vj'v4up%()9%ăU"%%%-%'Jo]F#IG-;&'(%%'A-%%%6%%%MC4<?ITx:DM;;?8J2S10kBF%T,=Se5YL0ăU"]NDgawo+JA3FF<Myq0Q6%.ak?vSu5&j?A'V[,oTR]dX$47/7,ynF#4j-5V66GmrăU"2G5&*>B?)l)jf+QM+&Mj1qLo^hfe;sm5SnnIbUJ=GqfL[PEVe&q9[&.JVdJ2()[ăU"Rh,nPSVftjCIFpiM5:E;=SlcCagZi8_PljwR><Ub;4\P[$A'qkeW'PB7$,L[1raăU"C:m&'N_fXF'v_:z3(GC$TqeQ7T;.RP/C=ncYT$CBM1HR4\IW)H7b1B&V)v&yFfhăU"beE^kXkn&8ePVjXFHb*kSw%&7%hheHAiI9m]u%(^%kFGM2/j?[7=1:ieV4bw$qyăU"0ZUuO%#t.^tvJ03Gq)E0>*F6tjQkcgL'ldchwiVUDwaDC7]DnejX&*H'I;CPJ]&ăU"X=j-c?aWBMo1mNVBp\hma&&E^I0NFfpFI[#zsweYV,&SYRRAx2,E0$rE9,f\o*+ăU"K^;c$<K%qV)P-*&)S(7*;t4bdMgA8On39?+dfW)30JvFgu>pd(Fb(J_6dB'-m%^ăU"d*;0/cVxTnMha/8FL';Dgps^z^Z2K^W&M]7fY)+LQ%:mh*JC.-0xe?lcs1NF2V7ăU"n-*&E#qF:7Ls,npF^:Fi7xfT\?U/OoRj-(d0WVt%$Uflu'hiBiGj9_1nj:s[Vr9ăU"Ca3Db\d>Q0DpnQdR[eTT-q1ge_bU?L:QVl6ET>./*jb^\$aML3RfAgI.:HOCq?jăU"j+bJSb-#Mo_m+m%-,Abq<=_kQ96i5JV?vuYHbMm21#7RP,(e-bLbYl'm.lIZ9L<ăU"E[JnK[/%:t7RDdTib8i6R/FO(b_uN^'j<#/5jxLk<HvE[ub7nrx+F_#Y.iNZ.m6ăU"VXl%h79X$]>4wgf*dH7rz$BqE)W<*tmg'7dxkqMP=fc4Rvg'>ZK=4ijK\kC&?(LăU"[jv,>Ag(H+aWwg:1NO>Dfegf_/YL+uE;azUWaApLU91S9&h3/s$SH<'UoUSok*oăU"H?*&g[VmCf<v])6N2ZaxT_:^LLFpxo6Fn_NIw]<FH'4-rdfKb;.(AIUYJ:'&1]iăU"<C^F:NeYwbe_;8%pYCm15_F%9\M=SB;\?-[fg4[RM2iE]K8bx%,up(%)9%%%%-%ăU"r#h]Fg][L_v%T%%,'s%%3#%%%C24<?TLx:D;J;S?852e+&S;#$D?_)D[+iWKOs.ăU"A;DQ*od)JAg)'Ic35'j0>E7N>Ol-h\Hu3JZHR-:>6#^:fi4Eu_E3TgiC2RV')bsăU"\/OJWAiXwvBWkThPkI)d.Gl3O<Dx5jR1hay-FG=?bD]jDY9%QJ*xNlPT>+;x0^măU"QdeknY_pjfHhkJhJhrx^x\4>pGa+djQ*$,=Bl^0m#qsuiogiKbr#%0xTCuVKrLaăU"\ifqMG=&+Ut5kT;q(/OknfK?C2+ff,ntrF7Cx.qow$>kWE;VMWbeG6*VO(dZ#j5ăU"w9=CNxFH#LukzNI<0/[CcBh+-=9o+1tci5O?E-3K&Gk'[;u4RupqDlH5g&S^\*1ăU"-c7>^AJiMu/%5k<t+,rRK5lAh\%/nKAH*2KNQ<6<*0mDNDg.tzJrMi^O?Tr?DdhăU"lQ1#\Nsmm*V>,x:=\vkTpVlHs=-:qc3:B+I*+,-l<]C*w?&TlrgI?L$GB(bgT<4ăU"e3u0eT2VB6abYOI#J,=tzT6<%///hSnTBITkd,RJmIbG51^?</H\cH0Cg>Kg.(HăU"LN(C1ni$w4GRC_8j\Y]mz]tcW-('K$xVZ9nJdq_</dAHQi#AAgG<3MlFE'.t-CFăU"M8jRdj3dI,Qu\VQTuDpvOlhgIoNQfbXA'[bk(BLO$5iH^b5F3'Q%sssrdtt&_n-ăU"dl]e24LZ3lFNIu;qx:<qMV<L5ah1EjGeg1Q:A]>2GSLo.(PDW;Grl'8\]]dMN)lăU"3rLIO/brvUI)XO+GMU%k[O9K9$Qf#&kFWKfpPF(%^M3EwDGMMBT3wSIQsYl;/'aăU"i_CvLND\,/U,dcYG(MS_D,X4hJCCbdsvAP_HnlD^O4$jK3q[Ps9E5x[c.rbtnwuăU"^(UVlr8KVE9G^-O5]CujwvRC3ooawb]?xHnMT.u-rhKT-47\I*vE)EVY2bS7])uăU"BIoKbhk$(^2ru\Li1Piu^/,S&Rctf0X,Lotc,F#oVqw,7waBJBu3Ig(od9suK>hăU"QjHZ2Vp>VNMR4HKLPT.gm-iO5;qhq&d1'A:%bj=#H^A*w[''0aPfPX:Y(9k(FTpăU"M-HO,7>WwjR4L>Siq,*\Onj/0nuv&P$&[78tN7.5pb?H#^hpc7O2._XUpoUCCw&ăU"8IJ=Yjr7)7g%Fx_Yc81i./L1%jZqf.tuiC/_Dqgd(fP<5GAZlIByq<fC>]UR\8PăU"Cw\.WbKcV%*Tm=GEvek%E-FV,>$jJR_-:fF>B&Xe_*P;(v[d?bK9DFJN3N%E2=(ăU"Tr(K'l3h)=UhKq;6Hq$TnTuqQ[ogSNFuj[JH;3)HQk*r4OqHP/wTw5qEsSAl6tPăU"JL^V[GXL^V,xL3b$0-?;Mim.KXi#,:ll33;.4+=>%G[Ze0XLl\TNj]JtP4r^A\]ăU"60x_4AWLY500ZeO7[?o4:_npFN:G(q-Q750iYGmn2)tQSff$ocX.ninStx<G[e.ăU"CBl^kS8[.yU)C]Tjs(i15gK)_*RP)ut]r8?RZ%BXtD98PElsDW[LgWU=M?&suW-ăU"v4WQ-/Tm#=5$phFEk(YE7NUu%OhO%2+[mqAvwN3+4npJ5[MdN^OSa4p3x?/+u=$ăU"\tEw.D;ZDdad1HWJSVa0'ERVcB3mh2TV'.aKZSN\ukj3Kwl9f3[uAlUf\Mc=]p4ăU"m5hE77q\ID]oy<Y.Ym_QMBw0?-N8uM51[l.c\2(^7XfFLFD.5I^pttDwFDL4-$^ăU"lXHK\**6[a3j'xco8Qo(T#0i2]Q6)u^5Zg'*2<$)>nw9c%zpf.K:Hhu-u^n.nhMăU"/rZ,I8'+24[,$m([[lkd.e3ujfD]%7zEW\hehjRXGufap6']voALo^*>s9vy59jăU"'HnvJj1BfI?#cqjOa'<O-MoZaH_*vlX0O9RGN6]_Qz][0)-Z9)f%iBuo)*qZijUăU"wC^0YMrUI+l-$(7m%D<-)+Ur*];mG8cn08xp2xJ'fS]k^'IGCZQJJs7)Tk-kfs\ăU"???c)tJj=lBt<HMhQG$MI(q8r1/S?6nmoLE_0d16r'Q5f$*0qFCwq<NPj__Df(wăU"Tu&wbhL'Q:]v:9((=Xm/IYDYq1%N_*:x8#d<$AMdJjSPsPGM5z%eCb-O;XIt0l:ăU"+4g)B5rtn&rlkZ0Ew]ez&K/-t^DnGhL;H/^PYEk/yx^A3\D09#w=IQ1g6n_T]8%ăU"61g--7;NLd*'VQ];^ewm5mY>$>FCc8K6P(O#[bDt:wK.cfGf4RcdFL#Ap8/5n<năU"-o2S&ih$,9[/O?ZJL7XsmPScjp*lzVMK7E0kmDu\$/?,<KE=-(D,[uZT?w$lPafăU";)EnUR8J0rx&&Ju0xr)Oq#e9_e3a58\AkdVA$g[By4edh(gI4x3]8<%0iU0Md^#ăU"Fi;5Jh'Mz-a&'8ZF[Sj3o>mqS8Rfk]NEK7i-2oXI7dfOiHFYjoIrHbfSC7]jbpvăU",?\nfN=cwPYD(SHI0jSBNFmKo1oP/$:(;LOE,)CTg6[f-R*FRqC7,'Bn'fh.QxdăU"h0g9^HTXM+Q=DnYQ\rkkbxkr+&mD:'d(%\q'z&Rs5eck;Q:bJ)bec%9X++Mi>4(ăU"wcvf(+(7\bo'r#sf*x$GRXAm9.rH,*IG5RrPgSDDAeO5R.X+SbZZxoO6?PW7.AwăU"BuHaFlf?[0&u.8S$kI4-Y*qS\4DRhNCgkJfnvXSgFx4]Sx)YE(S*s)+AP-F'+E8ăU"Cg_hGV##j>?PWOLX+I^TF(t[aZsIoT&SEp,=.+%=(O5g*PkD0lUqoZ$T)l$wL5NăU"sM\/,'[0vdaD^^iMZU\.dK^jz09RCm1z?T$8B>CEjfT'<&Bkg$?wZ#jZwU[y9bfăU"5lX>a8t8SJphVaXy6b$ZJJJ+,=E]j#QYrMpe.&Jb?DSZM^q4nn:Su#e^_.Jny&<ăU"ITYhq'$SFeU5$w&9KUYw31xqn<)4SW=9LUn2M6oI['Y5F$DY\U<dfMNI>NE2j0păU"/P[]i,txZvLGf*.I%rYjPZ^Q^RoO:,):PIJiWW?*-v-C8cJ(If+2IJI]TXBi-UVăU"R7CBoExjOh6LLdoE4?EH&<'B[P*&5Bcj+7e2K,z*<9n(#Qwq?\Jh0aRCJ,-7YfXăU"-X-$t*FVIws/S&5aZ*#OfJAE-l'V/rLsTw_N2Saq)Wh#PiJV7/=lS:[H$]Fsrs'ăU"Q)'<1Sl($7J)T[>enp]DRI/]Bw)lg(;1vR?gnoopo+L\7/UaqApn*#<bBmpos44ăU"R8%T&#3&e*hRE%fd=UJ8kZ9]PBQ>d$Va5jU=K2iWhtX=KOFfY4j'0F*Ug=R&a/.ăU"wxY$kV0aD/lpdbE$&E3.i</A$fO-c;^t8c3+\5\,:UrhpC(+t%BL1G:$cK=5:(eăU"5I]#3DRzEO9aE5ERk+[^%3tpJ3,<ln6b.9ZRoF^$[;4'a:g%EI-Z$+hRI1/Tq%*ăU"Gj:QCv(JrUyP>2R7:DMaI(]S6*sDUo:P_M't[U=:ec-<XYBqm),OLAU,25='HCkăU"FCm,0(9.7AR0<M0-Q:\[D.e:99DS;s\cAuVcDrbgY2?8\m$Ml&-FQ/%]kzeB>mDăU"8VQ8kj=WVV,g:z5RXpD'ba.ViQ7I;_pjB(:.kOb5bT]/aq$7T3*0sgs:O6iT5/uăU"j><a(ufn%:H6&Vi0AQctny?ZqOqaZG0U=VKf16<c+U;nS-qkXdfdKD4z&'UdKY%ăU"/I(_'o2%PDebj.UH)R,L7-.#c<w/jv#N=%:+MCvj=;<5U%%G+.M:xvk]G<HHaBWăU"\_?A+#^hvGk8U7G-MmY<WxEPv$.'TO%(1vTZk)Kw<pX-o6Sjd[u(.-_=%_:$-4+ăU"><s&iwGP'htz)sFN;Dh>(2u^$/h;X%;NGR_KuA;l\>T0D:lT=j:98V;KsV-0qNNăU"y0G=J];WP+1L2,IyBr-HYIwicd:&mG7QoZ9IDI3AFjsKt01otQ91GHBZH#jF^nSăU"]42%I1<TtF71N4%[-u3&'A(GCF(9+V#^K_5b5c'X)gs[t[Dj4-1Zw5e<j)#FQl2ăU"#,75Of9D,r\w5'B0_(/4m3l'$q;&.m_X/Rj3$Bfb7c%P)[/F&]$C6LfI,bKN[i9ăU"FvkT*_e=?=^]0]4Fs&eo:gFERaXN:F471j^e#JHSN:];gxvjw21PZJ#4rU(+uOAăU"%)G<\/#Y7B&la-MK*[Sfi5ls\JI0FSjXrB)f]m'8s9KQ'19RL[*SQ'8wBKDg;'MăU"BAm2u;>.8Il'=p1YlkP^<2f?3ePGqCE2ZvjQfC&p1Jd<6('*=5]na\U6#,]_wl[ăU"6\YMnxH=-/$+mTS7sO08L%dtNGiHKH_26c0Y_l=(KsopE&wQF'T2nqB5sAjFkv?ăU"7E'Jdc4o44TXWgKLFb6C>K&O:pF2xJnArm;T[\0D-79:4$c.e,*QN-FmVQig*stăU"Ef_ubJYRtuMcN$2c+,?GG&EmAuQ9.yOM*Kj;eQ8'H-29l*DSCS&ecDX?IK($IuBăU">Hi&5\Aq,6bXoi.Ex$u%IA;n]^:jqYkmb<'k%kKI5]saWVb>a=X0(S&t5Rq8z[XăU"sYJ&OdYPO;1;4>$0k+j?rW<k$;u0[BFi+L_w'=B$m&w2iG)0W\vCycb#tXhvM[;ăU"9Zk#,KKn#D((,M9>IEuS022j+3gluFrlfoAhwGCZ8>-2'KLR_[/Aw*Ul,sHxJ0dăU"2g;K6+v8GO=;tWU'Q:h:'5&fGp/U85SF5$&nv/]GR4W3F/%R:Z>zVsSXv'dt/p(ăU"((7HQ?&nCC%H9Th+Eu7_IoLjs<nC;puO8H>U*I9oi$:bq<07uXG4M3(YS=\jZb+ăU"?kl\>-ZGP&6)-)G)NoLp.X]>5KFE_AaZVS9?)AUc%X0uWrLiV_;nI&8*iSS8X(KăU"3#YOv+j[Cc/]DvA5-A[e=BPWHjTg)&V?^ZuN//4*5ScUFR$O;2-q+n<Y#$lMr/^ăU"s*'q)Mx4^P3$TTH(M>7<S:&;N?IfjEZ^_[\MF1fUfUo&2ZT<:;EbNpz$<501lTwăU"6<+Ms^uV2UN3:iS33Y*i(Os6kl/etL%QL<[t*h5L6rs%aL-N70fA9PG?kBsT192ăU"7WW9qIp1b/A&Lq[Cn]'Ly%rLq;,$ALeIIl06.k,+>Kd>F'gdO7h8(]LTS4IJ6MsăU"Ft'r=;Sd4WUIITaj=,E2Db('mDI<tD/GeS.'#Z2F2?7VmYZx6Q644-fSdy#FEh&ăU"Ns'$dg)1Kfb,25_ro>p0'WN#$3T,fqjc,b):$Z^S:%6+<;Pnwl]tf0kJ<WKiXeRăU")]>AlhvkL7/jp2x)5_Z(+;o&$A9*9]t]fikmD%\MI\fosdPuT.lq3pHQ,qhUNk.ăU"LIG20;0<e+e3-H=%jhH'N?g_Wm2nm)#C2pYPeF3A<jW%;kuC_oAANzdR*M:?#s<ăU"(v5vBFoKJbN=hq*7RWirV?EW#<^d%<)oq(Zw)4[OPf-:Vcw7gu;fRciS./ot[K>ăU"1j1AHLKnD7I:Pwjk*aK]MYi]A_1B?r9^uVWeJCg=Ub;l;lK*4u?RtOGXBwt[3z=ăU"p?v2v,YPnk.Ur.5Gs6rtcCrlT>>4<Vdc]p_nF<EXh7Dex0CZ&cgOx[I)>dB6kQ2ăU"Ld1;-Rs&.1g#6='AX_rOoZ$miDI-Z)I3KIk&%#+R'+/S=_.R%IcX(\t-cKM9-MqăU"bvl:'YCYs4L<RYTOg5-o:JgiL(.KiPCen?]k4Fx[:iPWJbgD#?dU5WRG^j%NEt]ăU"ERq7&)(t7OD?/W+NP#AQy6G:1<z'OC''Q._S$mw)N1t?b6>1XzL:EGhECKZBz;[ăU"\[Gg/Q-)=iIwqOB?9[-#Qq9v+qY4\A991w#KwydAR]h5l>e7GE=>b7))t'UCl5]ăU"?CSz=s1#xcr4-EE0,[x3HrS%($:C2jL2:0Y4Bn(A[P^\K,1c>&\SG=5R75-=>mpăU"yv41<-GQgZK9;nkWZxTu96((KrkG\*,+/cWrVHa+re_LiH5E6W/.chmY2,.12mEăU"]g6+gL&)66-C^Wsp(8v.9dKidhacHHhUJ)hrw&$Dt*j9o6<DCh=%[PU(^\-S':.ăU"g-HqLK*J%sU3m[z=Ibh9lA;Q/+*#JX952QYcOggq:R*N#2?d8>+0RM/+yL)hQ(QăU"&Fgc[d_r&Pi9.=[)WOuQ'Sjz08*0EhVpY4jv*G$'20AGHYieL6m)DgOpxD$POW/ăU"-(bl&0M\6IhfV*D%^'D(k4?ifV9F9]c]+I?i(PrJ9\?.q.5\2>&<k3.q%GudAF:ăU"ut-G-nx7/kD/7Qe?qPDz#c1nr^'08^0kwACM;ZJexjbTr.uM+(kB,d5uTE^K]JEăU"],,p<Vb>QBMDotG6[Qg68^PCb&_'\0QZirHkkDg_KEqD=WG=R%YDkR;ZoQ='+W*ăU"PK[+ht8u4fSW+kn6%bFWXG1-PQ+=Drk(NeNt?&#\(b?gM-8YQ^+8n3U?9<6G;>iăU"Dw+)Kd:GFGI?_lok3aY3)4(+TfhMaVldLdUo</98f0FXe.1<X&&m4otQ=,ttm'&ăU"wRzqc.E5P5DjS-Z<[zqVMEDUGa<5:IMYeR&y_0(XL]m;R,RUSl_OY*HjM;\f*KLăU"8U,#Th*VaY9l+%Lqf-j#r+o)W->x7z2WML<\%r/1t5/XJDE:nY)^r1Dn'(*4W=găU"8pTI,oB1-dtBq\q_?.TPa,ujpC4nM>s:^Jhe*XdkNmCt94zENmeWABlE3oY)k96ăU"KkiQ-<mrqng>nbfmv-*qD,^'k;X6vUBTD]t8x\$VUW5b_T^*ALT<8Pd\Ts8pk+QăU"oOf>3dKLP[BifE]H94O,,F9IL^uzHpxd<sG(D'dLs2j*=V,*UginCQ.M\zNBWHAăU"ep\GaYYd$<F&1d2'Fbth*FraHUUV4:#P079c5<,+N2M6+De[ispCC.Hj.5amu?9ăU"DtEF0wTHoPDT?5LV>(hR1dxEiH#3+R<>&o:%2=g2;n**UWM#n?EeE&:TOyYbdRpăU"N#5[RuLM%GjV.4X/kS18(USHJ0$)2gf:s$LY)4SK8i##$;:#eB4LI6k<1Z>WYk'ăU"Ei&c^S/.B6]>U0Jh]g3UC.*PpeL3gPOm,Y]vDtLXHh-$6T7?BPYk=^S8EWF04V&ăU"gCnN&iVK]=z4LBS7?SG)YoGNj2u9d.]lS)FeL8>)Ngn2q/x)rUQdF:Zr%s5b(C<ăU"Uni2qf%^1v]n'mZ4t6w^HY=w^%VOoxT(DC]+=;FXpm/Vw]+PU]?bW:?K0ekmRrGăU"HNJdw.LfCP8%<[yPzdAECpx?7rmA#4]4D8_97b<Z59?B?kyHXqNlJL%9<M>XqC>ăU";W-76sp62m2t.D0cv(l9+2U/EF+RMo6YF]%Kd<5_O0F?K+aj2vSay6C__l[_?u_ăU"awQ:I4]*5&A$gz)'E9AG%$k.vRQ.T'otd2+q+TO]wDqA2eY0Mu9iDnK3ar11rvBăU"t:$n)eU7H6$(E22ML'[DOK'e=6Nbd'#Y[m6JvQ\BfjwA.8Gzq1<LY04S9lIcFD^ăU"6Uy:+Qa1bXYW$<5J]]3f4hnWtn1k8Q-6>K)Qg;RgRoh'O%2I%eiZj9>4Yuh_.A=ăU"J-esvY(pRQCo>-rBl)EE'IQRrD*p%Ye\q:Ny_Q/cFa((d93xJ+7[jc,QGP#VgwQăU"=t9er,Q]rog/_T)>aOwcRp1cyAQ#M21_SJ5i]+g,O%7pc,)f7/Do6%XaC=4To/găU"mf(FWfeL28U\4i1w5It1\[jtcr5bq]sHjRMy/ineXq=JKrxsz0>I?d[j]$%/CL3ăU"WLqu?AirVi2>?u3c#U=(ad#rLIEZ2QSW&6gdC:l)ehs272bUj$q0?TPR],nuu$jăU"'cuG>U(\VA)OGYki'DM>^=X\MFa2,_qW6qT=(p3mv*99cDDPk(k.(]3NSv8dt]OăU"6+k'\V.,gt[yCMz6e)+R#WE3%MG<HYPR,mm=2m]Y-.)YKZFj0*6X&1DYSQ,]XA6ăEND SUBăSUB V3ăU"o=yOd$O&yViIcA&[3k5eRD#Hwi3,B&mdLYfKm+eXo=CGC#>*w[s%>kr4WuUpCAGăU"q[8tK9*AfDJTS>c^'F_uP3HbE$,6,wQIWg1'rSw$b/,6aIXp5\p,m1#g8Vb01s(ăU"am>B4BFwklJIv$.5d2]8G,s4i4)>e8,:a02#KC%%9bb+VaNn*a'#D8aQX#Qnm=SăU"6.$Vys=td>,p(p4x*)=>TU'K[zYfS0C*#(_&WA*:I>PpU1)OTHA?oE=7=7+M=THăU"0laEs1_l\e&d)6w3Ra0Bveg#RRzkBo09S_QMhKq7I[rO1UD]ck;#DuYH>1*)2<=ăU"jdAl:sL<>UnY&jqq_g6Qt-,[0A^a.OKwGM-0K&#0W##T195\j^*;#yT(.-fBg(văU"iBJxsts:>/vqLl0T0Qi8_]B.9OkZAso#I9#a/JDjE6H:\/2DU_q\Asx^,Af=UhYăU"/jG+Z)ZlEoho8RWaeuRVu%(-RrGb/N\5e4<0<T;Cr/6HKTeSthJJJt-r1QJ,bBnăU"rN('uy<bWXv&]pAySu1LyYnGI$Ypjj+A5ys6Tk^-=p$Ee1/:pAQnvK^uhGI7K+CăU"FC[/su7ZQj=pfB9J2;$vj8.DnC&RSWeuQ:9efV]o*2_51QkOk=p%ZdKQ7j,-TvwăU"Qk33[hXkQqAx'X_YQ5%W<t=MK4Cg2$0)\dR7Hhwp-m%ZyL>emiL:v,M*KTJMVSWăU"A&AFFD]Fbi4E+\m&,luYhmI=iOngMtL3RzY?Je+Zi^0Zc]sWEQ'iqE(AaN1n537ăU"Mclad[414]2OEH%wmBykKusf.QR95FSddk&_jmf[InKgiBA__ObV-RNV0so:RDBăU"M8bsv^eS#=)6q9N%b5B9ofcHQQ8=>:_+;%Z-opE.I>A1BFWB_N82iU*A+zU?'W%ăU"AQ\3'xYW)\Comdzo6.+v:yJA?Cg+_s%6mZDDfy#_mWY'LB9[kkXS.GbT\U-:t31ăU"71I/V\;dI7.,x^fck:l;*mUr1E,X8[0,+OG)>vJVa3_vG&[P^r^$TrLg:v)*=O$ăU"wvtjMnL;50?UmPEll2E0)rrj5ZmEvjM8)G7z%uj4[SE#naKl'g-gGUvpkLDUtvTăU"F52S'<5\DUm/jO>f+bY?/dl6p10Y?(>vyh6F)Fu4QDP^rE3+\m]a*LNo*Disz\%ăU"w,(x;-WUVeFIMw+7[7y)Ka31=YWP;.imC:_CJY4p2^]Y*n(<Qa3\b[uM0--$D%%ăU"?n<-n,j/'$Y+ms+$Pj(YI;C($_e>:FIjKYFs\1O6-9Vq7?6vaAm<p+_10NPiUiTăU"%AUgx,P6pm__#%7]_$PWcwVssLdJIR&;=$:NqPPL:hXwE$2IZ>h^9b(GOC*%QnoăU"Z2X4&8f&4C#?SY0JM&E(<:cL2N=9HU$Q:#X[0cW9n=EhvC#iKxe$S<b,LZtor>năU"$yxghSkfqO5*NxErptuJ;[MKW\>pN,.',50Ad/b$3B9D-FvCZi&^T)thi?2XDAdăU"R7)>[EmW&H;E,_EZob<v*aJ>wB56rH8sLdwcEl%HWXK*5W*6jq)2R;$FOCn%.p8ăU"-O1ZU3Zf&*fg+K6&lxE%u#YSy:eC5coN8E1d6B\U^2HUg'[&El21qj2:YcT*6ueăU"=4DmubCF.6>7t?4K[<(/?#D_=LD5(1&Lo:MUo(+:dB[>pb[;GP;<s<6mvCPG-GFăU"ABMl#v]FA7PCWTeT_G/nkx:'#l^KL]L)+>WKK[8(Q/gL\s#0MxUv1%oy:>kqeRjăU"gp3+=u+Z&n//ZX=cb(Kh<Lg7l.(^q6fn*gYz+$fT9m7VR5S'Kcv6SAk.4L,dMP)ăU"*5;$TD6.E9(Y+(3T[Egg4[z\bNM+;)2mAaF\#))3a0VA]2K,aq=Q2_J\Q3;+g0dăU"5pr/LgQ9$>k=e)g(U<;\5LxP>](-tIf?X)9TmLGM_w-+b9ypKA9w'NFr;B2NObyăU"fDDu_FeQvn)$j:BnVpml:7m9%fo4M\$:ZA.p?ea6A,_194ES$LQF,)V\r9-Yjd\ăU"Yd-OC0sSrpqvs)[PL-TTp4>[]NNZe=+:Fz4W>dZtYF06ba/,E&+S?NKpdj$bgSQăU"[B3O+1'(,['%Oi$kNZ&uC8Z1s79h6tTc5Xp(Q,iP\8JM3U?]br-=NnsrKnKdz-.ăU"UESJmuu5/krrHmY_I#jT2F,uVkkE2[F8&Ji)*g-wZWd/h0GDbWgLgOum)pWz9B2ăU"CPMR,68XODc]Bo6vXj=[a)#(.%KIVCyNKqe1s'*\Ft;Xg$_qTHkfedNiw50YbGFăU"L[Ql'a]4CtTxEAg_GW;?U1zO7BNejX=lC&jJV2aP3n12+ea]05EA<<ZKl-iBn,OăU"1q-md'>]Bs7F&w<Oji7J0BmtbcgsLDVIqNS[L*'1EvIF$\uEhI#[_+7*gY$.,5KăU",+Z_Odc7yXGmLO#[?iT+2'zi0GMD+EeQzz)CC<XJbxgkWQbKIkQU.#idS1Ra>E$ăU"5?wXoduvbF7BPo6^Ia>[K(^imKNLbu6r:yN+q:8LN7thp/lc*bQZ>Z5-Jy-NA-XăU"srqPWW'#Wc]+Pa3_j_&:$Dy:siog2L0p/cq6*i6bwhYZ)ueh$ULiH7H;jjYADiBăU"PTcV_JKYf)hf-NsVP.tpac8OjGZp1V/+((Z,;4yWjF;7GYWoHe(*]z9<>wMBtzVăU")9&bg;'AHWc$Sp\)9O7\;%QK)2z&Y#H-)nUX:Q6*EEd67f9So;atBNxjOg3[.d>ăU"9PE4*lsX'7PA:fSD?Y61:#.mW2^)96FOMg&_9HLIJ*(e2$4D,6DJc]-f3Jm]#)făU"i#diZ$sHgb(Aprm-t#Il^,_&fWFhoD7'2]5&Oy0Zu1LIQXsqOJ0/>1V,47r88(AăU"7fTe'sAdmDeAUfS#/=r5pCj3wM=0jno1c'*FMA;BjOyFW=0#9xh?2'e/)%fXWDnăU"*rsMN.8Oaz5z.ixngck1Jkc-yt0Ie7Klef\;?VI'ETuh'MFU;p#yO:C*VA=fT?GăU"BbdIJ/V1to$yXtZBIYo9u396zJCpgU-HREqFGoq^1u&A>FS=g;e4_Tx_F/tJ6K]ăU"<BfX*Jdl-(EB7pPsJC#9G[_EVQP8*Z,9B)HoE)#VfwbU]EGb+=<duQfDN>0kfHZăU"pmw5=q$q$$ng+UX^/q+ISc;sx*4RGzNe/0fT&S#[2acVj<\2d8]+D%0gI/wkj.XăU"o4Qr7&nb>2$G&^'>80EjHrfu2N6:*Y)W=Z;g%bZ(H7k%:D7k_tsDSYT[riSRZ8QăU"[KphKqWklSaW:RxI94.'tG(bMjbumbZ2b0(5H[zUiFvY>bqJN$^>2'%4FL<8eLQăU"3?[W4cMrL.=H2kc8s7Azv/(FK'<>f6,;5;9>MpKv,a2OZe\[q6'<tAFhUbF4Jb6ăU"v5GJSSr5E9o'1u4u.%p.;='ebibesLJ\sVa)Aw9BlGtPQ^D>yBM;ICns^xv'Ee/ăU"'N7qVnXI[b?&y+-GY0IdrpSfvA$2:kxqL-5WA\-)8lQi14(3)dmTTADOe.kq[&EăU"3QI]DUm'W]t3t.h_1>u?Pi&m6aWESj*&RBpj/[:I:c)=ea&n*Lj,(t>:sEh1F['ăU"$tH.%lg6DVoAPQZ8v<U*Mz%.CP:GsaF.&K=o$7JfSCM1Pb0jeT4mKh$lj=Xr]rOăU"i#'isKAJ]KtLEkwWXWV<H^:KUofEopAl+W$<;59)q<PyWPqWNAV,?5qYr68DY9năU"3&?K5IZc_GtNP5$R<fm4PiKQgi_F?U7qHxK=6Ek_/.]l6SeTp^2D0S1sG)9<62năU"9Y'6cg#ApmI;ps]y,?_Z<0+7N9:'3N5r]CNu-oxOIB2[GJC2ykz,(01rXO-9>%%ăU"I)*[?QUA)[]j*ee2.h&Lfk+5w0s'01%.31>e9s(6a7I%Iok+10):_8e3G(mt('ZăU"C2+mF+9wcT8g-h]Ds8xIoJbvf9\lw[;dLN]cvs#Rgfq^R,eY\f4%1=EX?$Q\U0VăU"JWcv?RM;9GTRt$MM:sIG,DM7dQeCdyoXiac(HrB#V-fVPDd0M'sP;ditcZWSHCpăU".Bk$[IewpBewz?+G^l'bJoCQf,H;w'#WC(=tKZ=g].9fG)A]StMSqwXxis*iO/(ăU"mJeZ$c5EZJ7eSZac)%?(T\j-hqObjfkb%)#f33tPV:Uzw9JXSh*'k0jRXZ'-N0păU"0llQ*&-ZmXnp\]QPI21j11Y>q8v&2#LO#Xf5okQQsCH0P%fSu/(1id9M7r;rE_CăU"RGbTMhJQfnAEzJnb=b<C8/*4A'8R4c?7pbT<u5$voa[(>kh=%;JMaep/N#'g:c&ăU"s=t.K:hW=Bt)5&(t)d[XF^A2IzPDQeT.lT0XQp\JfnN(VabHPGLJVm;b6d0s47PăU"LaFMfd<.7X0]8#,^QCG\GLoZ?UL1%Jm*f7#,dZfM8-86W[;?9GMMFt0Rd*;ohG=ăU"lBDTvPIdwe.Su(tj=5TMPZ>oD,?K2npL-u<0/>EeMSYa#Yt>-8-9_Xu'MRiBH\hăU".vX2#inQFHub:dFuUYLU*9(78IF\d0WL1QZ7h=ZN&_t[Saih+K+?#Dr(sW][i)9ăU"q>3/v?#8x>eMbK7,M^?heVWWXHhn5_dWTKQ'+DI31;i]>f1h'-FK2H\eu^ERkDWăU"NpQ#VBMHCxu%V0H).<ih6'$H4T/Y#t%RZXS&(Kpoj0n_ysBmWSE4Xii1\:lXM13ăU"q+G)Qj1Gqp&:*Jt?:,u]nrTQMDA:g10VT]73y=h9E9L$jt3r8*v(I(>$m\Jh'N7ăU"V#MIre.DFSa'=TIHXgu%)iFut3iFuB2fv7LL3dDj).mS[(_DKw-LUk8K-i:\(gcăU"Q:tPts1bKbHEilDx=Y]wkDLiq3HHt%e%r(vzZHIg;v*]1h'DlKr?b\\b\8G/0.%ăU"=.9pk06H7)sv/Xv,Go>-S1%8mO5xlbndDu>NV.$M)?31tkVs1XF8HAIigTfstwIăU"iboDX[;,JgN04yRPiM3EEEcHV\8b-P.G?-lm<BjpoI$.D:\P;M/apKFcDU<0:P5ăU"^jH>>:O%vRTR,L,/u?L^uNZ4$ZnjlKpTF84*dUg%G\?4<XQq*Hg>J(kFU5t,hG1ăU"7\8+9Lgma;3<-KjNCdU)SaLgHO>vS,WSsBiw(u:^:_zZsXKsJSso8A>l[hjV:Y>ăU"\q7kKXs^mYTxlSm,5+mtab/1;[lbTT:dbqn+mj[X;58XRX4En-OTQdIwyOd<;9xăU"Exq<c.cKe5,0Zn.)[.%m:NvT]?Pm.bo1)>b2Izy4C+snz)XL.ceMpOXZG[kH$*KăU"f#>$]/z>M0J::l&uT#)P,#:1-I)RkG;?PEKw&mpkBGiCa?%6W7srtxM)rTR6LI?ăU"&F%HVn'KbM:jV8%mf%eO-w=KPdgd/#]OKq1nP^/]j&uZZ]:5-bl0r,h_$tqPsLgăU"$V^(M?QbLZV]u\9W-6Ol*Y.13B)'my3OsHkjCScdiUbC\zYC(%4.)u-N^No<WE?ăU"#g9Fq>h^uw,6lU0#[Wc\qc]*&LUg2VQAc&,D3Oa0.uMf#xK2I73YF8_w&RNOaJ_ăU"rKsaN&z*b/Rfo'sFTJ8Si+TrUH<Og_iI))O&V=xr/oVS$cg>o]1ItQ;+g$\$qNMăU",4UVv/EFTRTA[KX$,pXnvFtnVeE$HP\lUx%6eUtKPp-u3drE1>p-68Pt\nApVq:ăU"Lz\0AD_6kHt7Vw38.=i&C-sIS0h%R6\I_4Q:(;;t*9ub.1abnM]v<I#0wPf6'V9ăU"Ys;oMP=_r0kWGF\6s_?4.Uq5')e#+3L)zvwQ?w_]yhA5eknR*:YX(1i<)x'O:bAăU"lLLtxmJBEE1WN-&[9<5ZN*0p.vnYr?tp(7aalpH$LD%kN5A&*N9b_HJxaRYzbb8ăU"/'FK5gAysL0by932%/eSs;kR,PBb2Vq^6Z._far#3_AP[Bb,4ihE\<VnHDwKtN<ăU"qa%eN[W+3tfIC8CSb^s6s<S*?/DoJO]lo2QT]o=O*pnF<HR=^iRub6gUTZfo6JkăU"<oF1orv671,%qCgceu,AghN9AHSa?#IjdOU\9_YQI*5vib+?.D(x\wur2t0p4YXăU"+t6J/Jk,,hE=,#LlGaBHxb+7e*Q^+[nW.GB)aS;Gd5Y\c;.cc:^rFI&2Ck*T.ZjăU"oPrXTXaNPY:%K>[fn'aHgviT8or4#^d0%]-'dQQ$QqL/p2-=Z=W\<qGHaM6'w6=ăU"kC>Ee>VrD92Go5$h=?MDB-P)>5IEj46qluHsn2*?kNot<Z#97KrnSS+AR^EkMkMăU">ES=c0_/vRG6P;(7.U;m5hIhXv7Y&PgO?Z.P$Glnf)P#r;Y$:%jYf=;kA-$Q5'0ăU"d:/ZVD(i2JFKE\3.*?\0LCW:ltxm[u(9l9nhxllTRwJU>XE+z&C_ZPUzw1-GsczăU"vlK5J8oL;u3p\Ui2nLT>[:Hr(s(Bh^^)ftR<kI84Dl7UxKq*_CFTX=8)u.7;AujăU"oTvPD9eMLar1##_.q4?GJ/0jP/e&J>SEy9riON]lrrckCm?rl*jr4:9\7Cu>#o8ăU"Ml0*hQ9Mt+c7TQ<7X*O.$Kj4Z31;d^bnbSfren\IA89C3pVK)os2A2t-]<GsZ_8ăU"O,7Cqhg,qwTm&*k8XO0DE$iF+'L'&U\(in%zNfY#iUbDrRf<fnV5J9Q$#$VGxLDăU"2b<VPHl-4,]m)dg=NVq$Z8Dfpt*i['7hl2tFj7dfKqIMn24*3sp<wmDovk-^$?KăU"8h7f/_s'f0E0rZjPRP68\=M/h=gBV0vV&doQ9PPUB>5fpki=>rSW7^oR8CCAlHXăU"OORPW?^WrX2n[To(BrMnN4d;kj&KsYW3YWP5oFYMLtZHs(:J6Z^X8PevBhQf8%2ăU"ox98H3su^)Xdvgk6q;D&D+zzypz'831'>u33\J&tbt&TfYM$<^i+.n8kI.I,i7EăU"66u6w$<pd=hW0Od8I>x*68j<'-8ENOB.sCvV6MLpNa7m&S/9gm#+YCJYBLv;G.*ăU"SW9NcKxS;T^0ddCEaK1.W./SRq-abcgrOaCOVhk[D,km3(0$Mt%qrB>>Z[<<?ZcăU"o[L;sl9T9uq0EtiD$JJCm&d)MEeJAt7:)um*cCAUljH1BjR9y?XTj*>z4=LcD8LăU":=<Li4uQCvCu]uW<6RJVgYn#iN+2\+04X?9Ss%B[3&Lbe$fJhjmn02kmI5,qlHaăU"7y$C075XTEXd[\V.1\[w3PlLG2an-27)=RGojA_^6$B+tGRt,hdFvf?ej[su)W*ăU"yzP;WljYqu[N4(Pr,E8m+wHjlJe.<l-?9OX4*-LG#c'jVi>YT[<11-^2:5an_-CăU")JzNPk08Y8;rrV(-M%dSFi?EKhPI'MS[Wo=E0a))juai;%&kx_#P>D78)lHhQi9ăU"B>1w+.'qF$6Lf=PHLB3\3mbau-p]c*b2b50M1=4\x^NoF_dLpwC%m5phY%G<^rYăU"o7uYW$I-cu-yQ:E\Ioncu$$qXf??LgWwk6-MO_?srn?f5ZMgGPe71lUZdaqL_BbăU"Bu)I(jlr$PX$)rY#usmu(KIGxowzo$(s3)tB6YFc?(oQ;[2npjtB&<9E?17NjJrăU"DZB1YgydduNn05zMIaEduB\>b)0%=zHx3-.l*FLi=MnKUhB'HiJ5&&pArG?D-tOăU"'q0O8Q;(Ts/Jqr(PXr00.g#B>G-CgLdlmXa\hUB?HH.;lPO3TGa6A=)<QeuO2RcăU"$gr=?llnQn5%)G,cJC5KC]1#U[UFR1<a-lEc:]<+lCIP%ObSXut'r6CQ%QxhI<7ăU"rj\?Uu5r$??#).NI\&_D%?8.%(EHUZMAq[-FMSJR-l'qmB,jGRCn).O/TFAMfBOăU"Ra?jbQ:;kXCes:O9\9$E0kx7:mug;_P/%-)s9dFM&/PQ-6ZJA6iJgnZCn<=U;emăU"Rc%vH=..$crl]f2(n'\]qs[S16(MWI]d>wif20j*IK[qSdh*Zpz%AtLz^dAy?YFăU"&q_G-;<tRCwsm$.GjY9.NwsF'Idup%()9%%%%-%'<o]F\v<aZ&b'%%&H*%%%6%%ăU"%MC4<?ITx:DM;;?DJCS10DBty*)>jU9tM0]x;?i/PBRmjWK+ZwlBMIsR(o#)y-băU"sk803jrut#RYXQhQg+K3rJgm:No2GKX^nm4cl8_f#1\0-q%vskBR1++(38;'MT9ăU"C6m^nE\Q^.5Q83QuI:86;Fk#H_+cu[Rta?+Ba4Mh%]cJx=[,V%N'J^cYGPgc6XRăU"^1O't]H#GaN.5A1Q&MwDUUevMRm(>Avn8]-oBqSzFs%y#>kh&fJ,.byieT9rV=tăU"yNO-cVvq,'cy#=&,fnn2GQcBqXNw3D(DQGQS0S#nV779aSIa\sCQg[pC*iZE1^:ăU"u'(v'=%9:j)*Hj=z%6f.G.=5?U&Vh0]4K5j4%K<_I/e)Hf;N.q,\e'agcd)o\aYăU"t6?>4-D>gBi,oj59Zs7tMRoo^jZsAo5-bCZ3v-2s(S5S(;&Y[+O<0N:LUkDc[BMăU"%b*9&jVOju.Z3:eC>YWZ&S_\Qs%FI:-aoY8&:VlolmLuJt9TaA.'>+ZN:dYdD9*ăU"E)$MUHabPmP4.30n*_yjo*R29V?,nGicr#ER/bg&<H$\hM.<N,cO*gi7AJWS)?TăU"_YHl*;JUTpkGfnV*Bxr4U0isX^U4P<f/9REtA'f2npRh(%NE%E)6E(Cc..?+-_]ăU"N>1c3WA_^MBC#ANt'S4U9ag&5)e]Kow(2pcibwXEedM#Q_4IxIR?C7j(rm*g<CqăU"trLk_2>Ut47Z5BZMp-Xm(5=mfI8>&=$X_^a?tqlTJ87F&<UEXXih3Cj3wQ>;OXXăU"uEx[T/5HbEq8v<Z>KJ5A'knxt;kp0d:oeoY,g<*CBEFk#+,Bdvu+i=TNP(U#%ACăU"&q<KsQI&4)Zc*(.FtHDqA&7lEx'%up&'%W09%%%%-%%rh]F/7PN>%G'%%&[0%%%ăU"3%%%%%%%%%&%E%*/P%%I%%C4)<?TxM:D;;LS?0;%up&'%W09%%%%-%'Jo]F#IG-ăU";&'(%%'A-%%%6%%%%%%%%%&%E%*/Ps'I%%C4)<?TxM:D;;2?82S210Bu%p&'W%0ăU"9%%%%-%r#h]Fg][L_v%T%%,'s%%3%%%%%%%%%%[%E%/,PN*%L%C4<A?Tx:2D;;SăU"2?82u%p&'W%09%%[%-%<#o]FvR<aZb#'%%H%*%%6%%%%%%%%%&[%E%/,PwZ%L%CăU"4<A?Tx:MD;;?DDCS1)0Bup%*+%%%%%)%7)%o%7%%9]%%%%%%up()%9%%%#-%h1dăU"\Fy53%s?(.%%d/%%%6%I%%C4)<?TxM?8A02;4ASh10B&k%T=S.e5Ll'[DkvgzoPăU"CB4=,*M<tU_9=/*6R5Jfj1F=Q'#[WiS=a]T$l,oIjJTMyijaQJ_<+BG1X(.n?FcăU"k+Bo$&'$0Gb+*?geCDL&z%9\v$=f05%=D]$#DH/RUK'8>(l2]u.HiG/t].lq)HmăU"^('-TQOTp.]xCb5_/VLQtTH)n8Qr.wH&13+WnNN(m(SUj9FN%\Je)+v8)>pkcv7ăU"(%>,&m+\2/%s8zjZPWVMg]9Y*7(Ed9U#kP:GKRDgd:U,<(S&Fq]kS^TIBQ#nfUTăU".hIc6QQE5apKi;5l+7n(;q$hqCUgEa'tAaK=1g+S1n[l4))lc3M.p*dv8EmY7-iăU"GmADjJ>7;%.tvacmBhK5((EmTNp>wVslLPFQ87,beL^n^%B&ZfrG9*wy]K'&0NcăU"<5a[jfV;Xq,E*&ZR-nJ]TahnKgf;P.w&Yi+4lv7YDd=nTSj69>i%*:bJM#Ru8\]ăU"(R$oI8ikxQubPk6X+W.%oZaQ%;zdp-Pejz%+orn;8.4KutB#\2<\J6nHEjEu_E4ăU"uqWjp1ef+0R[S[DJ9Q^%N=m$8qRrs\hosZEc5rL8?GhpK^^X-)Y'U19kCQZFm7LăU"p;KW*uJ-HUTGi0]$T;Z%;CGDj<#CjuePO)hI]%1=pW=Wqh1QOYZgP>Awsbo?r=5ăU"&29u*EC%e,G(/W5?./HXXHS;LPA'1F6L:mgG]OI8.&HF6f/8.KD%:^Y>DyF0pC)ăU"xuYP1tu;i5pvjrrQB=$+x.C<?F.ID-bcSn3JYtMuq[u/$t0oF:Tan';qzqgp/[hăU"Tnt.Q7n..1;c^_wOf6b+Suwi=7F*h;OxaImhPOYv^8?cS#MmMoA'%2^KR9Ue>uAăU"H6R$VocLubF1[9_N)J;Ph(dAhP*EE<a2WDuY)&#A*K-B]w-&*S*tsL+aG#pz:?^ăU"_&aF/sp0psSO.<Fjbw0A4p[%eOP6bjbr:sLnQz8d6k:iS%PXZGAT.Fne*gFd)c.ăU"/\JmW)^eMx=qE4>hB;>Rg/4hM^jIHOo*\h0\HG=COHfYTh=tif,dABxDY'Z+bQKăU"D?\\YP5+hl0,Uh*A.+2GT9=Q;adC%6MxMdxM&a*w]s/'LponLPpq7>_C2DYuqhIăU"13+Fm,yw*u%p()9%%%%-.%Q8\1F3*q+lm'%(%x-%%%5%%L%C4<J?T%>MAC4GIWSăU"10GB.z,,>Se5tK0]x1UXy+e)hL$/^%9Pc.=v%1wWOYNfrT^T=NQ$mV/utWWl8<5ăU"qotgV/JoEM=E>'k.uW[&SBez?^[d6$lr<['wVm=DN-UU<XPh,h;v00kNi1q=6TjăU"D(I^1Tsv5j*,Z/14Ov]nl8l&,=_-Q2l/E.Q)kMY2DrskD^7Nfq#T:?#75^$L'=4ăU"4$E'o[Qk4AfbE83-;IH^WJ-3E&ScF=xk:O.'QGE.0?6I89z7QH0N/eQM5Wh5BSpăU"sGN)n5i&ac$YStJD$z?+&Czjzs;\2\%qf1zr2A'VKb7.IEpyWmRQ]YM*#yhRRp(ăU"f9Ska8&>ddRA[Fcf#JA+1xECy89-I4A/9j3_-#7ErO9O&5,c*,aTAwgITWI:(uAăU"vh+<I6.w_gezw]NIt;]MgR%yGOCy$1jypYddl;,3A>y7.Fwv;IubNoG6rZs0W')ăU"2;d<EpF=SrYG0WjR.[NUjU<ZNS?ICr>UZgMGXJMEu&H,rPlTEw>.?9Cu+u]*53LăU";%E>pornT1N9=B.ug8U(Cw'Yv)nQ;q4*p64KX_BU]nXHN&iUA<#o[iMEr.,'V2yăU"G>Tv1&HV2/^>:uIr;$f^3m3&Jk+qY_BnuX>3eX\rEvDv5QWZ9;6cu+G%AFDD(i[ăU"4cdykgVsRjo?a=lw+Tq;RGMp4Cw^.I2Tt=?.F+^>Q0]L;AqB>olc3D>xSA(qBZ2ăU"tBZCfxDV+=oWu6<U:ri7R#D#.c-tO%z6A,nK%bdW3$cHcCn77Q#Ql^[L3_K#mSDăU"]O,'*R?qm&yN;Pfk/tpXtSyG(=mSzOVa5THb7i:Gs+zoOO'nwHt*wzoc9?tD9E#ăU"e/LS4&ps7F<5ol:F1nr&N%oq9U4bWKl9lhMBM6?:#H].dT.GJ<<+m/C&N&ZB,$_ăU"=$6fm(hkUgQoCau]^NiUC/*oc&cMNvq)qN08*KEa(FtuG#i.Pl=[^xU$s3[4C:,ăU"zd%dup(%)9%%%%-%o%r]F>E/^Y&[&%%4%'%%5#%%%C24<?TLy8;42A=3SM10BLGăU"$VsRde5Th4\RF]A8YReU?768]L[Vf&yi/);7qWvC?*YTgi83X3W(MGM\%=eX^lFăU"h6,I,D=3PmEBHWA]fjCn#,,m&0]rcnXO^dY<SaHsYpI6:;4<;P^='IVIc4PQDOJăU"W]YG*Q&61p:TMjs/f6=#<I]Nl>lt64+-)Cg:JKTG/E/U^0HF>e1;u=Vk0y&;mXLăU"b_^n/FSOs7HR=bY]$0q$$aC],0gu/s9==Z(T^O[9o%Ax*:A8aPef7nGdUU*1]jDăU"STKgW=Tp_R0U54fMCZ([O(?a.9e/46EEHc3tDc^UgNipaSC=?&ccWNk>vT41.;;ăU"7?_*mGi(I#FZB#XxLF7;r]ka-buN[8GRWPQFI071(9x&lKDnH<RldHaxpla1w2[ăU"E19-hi5DKuXCW*B>LrMx]Z%*JpWoA_W8v5b)N^h#5?4'#>,6Xup%&'W0%9%%%#-ăU"%*7[\F$g/UT/)%%%-1%%%6%%%%%%%%%&%RE%/P%%%%%MC4<?ITX3<M=C<>JAS10ăU"&Bup&%'W09%%%%-.%/2[aF.g2(OD(%%%m.%%%5%%%%%%%%%&%EO%/P^#)%%C24<ăU"?TLYG<>2A?7S210Bu%p&'W%09%%%%-%)%q]Fit^P*u#*%%s%<%%6%%%%%%%%%&[ăU"%E%/&PW-%L%C4<A?Tg;M3?82D5GS1)0Bup%&'W0%9%%%7-%?pd]F0h2XwY-.%%năU"<%%%6%%%%%%%%%&%RE%/P&,3%%MC4<?ITl85LW1B0JES10&Bup&%'W09%%%%-%%ăU"Up]mFerW%.l1%(%EQ%%%5%%%%%%%%%&%E4%/P;#<%%C24<?TLl85<20GGS210BuăU"%p&'W%09%%[%-%F#.[Fg^*A;][&%%p%'%%4%%%%%%%%%&[%E%/)PZH%L%C4<J?TăU"8<M064BLS10B%up&'%W09%%%%-%(XHZFWBVj]'c)%%&/4%%%2%%%%%%%%%&%E%3ăU"/PkJI%%C4D<?T:2A03S210Bu%p&'W%09%%#%-%_B-UFw^^UvA['%%<%-%%6%%%%ăU"%%%%%&[%E%/,P*O%L%C4<A?Tq8M=4;0AEVS1)0Bup%&'W0%9%%%#-%697\FB):?ăU"PR'7%%=-%%%6%%%%%%%%%&%RE%/P&wR%%MC4<?ITu82MB2A>J;S10&Bup&%'W0/ăU"%%%%%%%3q]4Fc:s+(E^%+%E^%%%3%%%%%%%%%%%Ej%/P)#U%%C24<?TMB:D;J;SăU"I8&?up&%'W09%%%%-.%h1\pFy5%)s?(%(%d/%%%6%%%%%%%%%&%EO%/PwA9%%C2ăU"4<?TLx?8AM0;4ALS10B%up&'%W09%%%%-%(Q8\F)3*ql'm'%%&x-%%%5%%%%%%%ăU"%%&%E%E/Pl=I%%C4D<?T%M>AC4AGWS1)0Bup%&'W0%9%%%%-%or[]F>//^Y&&7%ăU"%4'%%%5%%%%%%%%%&%RE%/P)8#%%MC4<?ITy8;M4A=3LS10B%up*+%%%%%%2%2%ăEND SUBăSUB V4ăU"%K(%%*gA%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=243AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRyan White                     PLASMA KALIDA THINGY-MAJIG     BigFoot@InfoAve.Net            10-01-96 (08:33)       QB, QBasic, PDS        56   2654     RNDPLASM.BAS'Plasma Kalida-thingy-majigă'By Ryan Whiteă'Press F1 to makes something wierd happen....ă'Otherwise, have fun with this.ăSCREEN 12ăRANDOMIZE TIMER: CLS : DEFINT A-ZăDIM c(255, 2)ăON KEY(1) GOSUB chng: KEY(1) ONăDEF fnx = INT(RND * 3) - 1: DEF fny = INT(RND * 3) - 1ăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4ăc(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0: c(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0ăc(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60ăc(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60: c(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60ăc(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0ăc(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2: c(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2ăNEXT năFOR n = 0 TO 15: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăx = 0: y = 0ăDOăx = fnx + x: y = fny + yăIF x >= 320 THEN x = 319 ELSE IF x <= -1 THEN x = 0ăIF y >= 240 THEN y = 239 ELSE IF y <= -1 THEN y = 0ăc1 = 1 + POINT(x, y): IF c1 >= 16 THEN c1 = 15ăc2 = 1 + POINT(639 - x, y): IF c2 >= 16 THEN c2 = 15ăc3 = 1 + POINT(x, 479 - y): IF c3 >= 16 THEN c3 = 15ăc4 = 1 + POINT(639 - x, 479 - y): IF c4 >= 16 THEN c4 = 15ăPSET (x, y), c1: PSET (639 - x, y), c2: PSET (x, 479 - y), c3: PSET (639 - x, 479 - y), c4ăPSET (319 - x, 239 - y), c1: PSET (320 + x, 239 - y), c2: PSET (319 - x, 240 + y), c3: PSET (320 + x, 240 + y), c4ăPSET (x, 239 - y), c1: PSET (639 - x, 239 - y), c2: PSET (639 - x, 240 + y), c3: PSET (x, 240 + y), c4ăPSET (319 - x, y), c1: PSET (320 + x, 479 - y), c2: PSET (320 + x, y), c3: PSET (319 - x, 479 - y), c4ăIF v = 1 THEN GOSUB colăLOOP UNTIL INKEY$ <> ""ăENDăăchng:ăI = I - 1: IF I = -1 THEN I = 1ăIF I = 1 THEN v = 1 ELSE v = 0ăRETURNăăcol:ăscol = scol + 1: IF scol = 241 THEN scol = 0ăecol = scol + 14ăcc = 0ăFOR n = scol TO ecolăcc = cc + 1ăOUT &H3C8, ccăFOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT măNEXT năRETURNăăă' -1 or 1 routines:x = x + (INT((RND * 2) + 1) * 2 - 3):y = y + (INT((RND * 2) + 1) * 2 - 3)ăDouglas H. Lusher              PANNING W/256 COLORS           comp.lang.basic.misc           10-09-96 (14:03)       QB, PDS                321  11708    256PAN.BAS  'Some of you, I trust, took note of the code that I posted a fewă'days ago demonstrating how to create a large virtual screen ină'SCREEN 12 and pan the display screen over the virtual screen.ă'Shortly after, some one posted a request to have this implementedă'in 320x200x256 mode. Well, it can be done, but it's not reallyă'worth it. SCREEN 13 only has 65536 bytes of memory available andă'is already using 98% of that - so there's really no room toă'expand in. In SCREEN 13, a virtual screen could not be any wideră'than 320 pixels and the most height you could add would be aboută'four lines. By contrast, in SCREEN 12 the visible screen areaă'requires only about 58% of the available memory, so there's plentyă'of extra space to use. One alternative, if a large virtual screenă'is needed in a 256 color mode is to use Mode-X. This is what Iă'have done in the demo below. Since Mode-X has all 256K of videoă'memory available, you have room to set up a large virtual screen.ă'Unfortunately, the memory map in this mode is much more complexă'than in SCREEN 13, and that makes this mode difficult to workă'with. On the other hand, my Mode-X code is for 320x240, so youă'have square pixels and don't have to worry about adjusting foră'the aspect ratio of the screen. Anyway, if you want it, here it is:ăă 'this code is a demo of how to set the VGA to 320x240x256ă '  mode and then create a much larger virtual screenă '  and pan the display screen around the virtual screen.ă 'by Douglas H. Lusher - Oct 8, 1996ă DECLARE SUB XPAN ()ă DECLARE SUB DrawCircle (X%, Y%, Radius%, Culler%)ă DECLARE SUB DrawLine (X1%, Y1%, X2%, Y2%, Culler%)ă DECLARE SUB XPRINT (X%, Y%, Text$, Culler%)ă DECLARE SUB XPSET (X%, Y%, Culler%)ă DECLARE SUB Screen320x240 ()ă DECLARE SUB InitCharSet (Segment%, Offset%, CharHeight%)ă DEFINT A-Ză '$INCLUDE: 'QB.BI'ă RANDOMIZE TIMERăă DIM ScrnWid%, ScrnHgt%, VScrnWid%, VScrnHgt%, BytesPerLine%ă DIM APage%, CharHgt%ă REDIM HiNibble%(0), LoNibble%(0), BitMask%(3)ăă CALL Screen320x240ă 'the width of the virtual screen in pixels:ă VScrnWid% = 592ă 'In this screen mode, the following must be true:ă '  VScrnWid% must be equal to or greater than 320ă '  VScrnWid% must be less than or equal to 1088ă '  VScrnWid% must be evenly divisible by 8ă BytesPerLine% = VScrnWid% \ 4ă                ă 'the height of the virtual screen in pixels:ă VScrnHgt% = 442ă 'In this screen mode, the following must be true:ă '  VScrnHgt% must be equal to or greater than 240ă '  VScrnHgt% must be less than or equal to 819ă '  The product of VScrnHgt% multiplied by VScrnWid% must be lessă '      than or equal to 262144ăă 'create the virtual screen:ă OUT &H3D4, &H13: OUT &H3D5, VScrnWid% \ 8ăă 'put up some graphicsă CALL DrawLine(0, 0, VScrnWid% - 1, 0, 1)ă CALL DrawLine(VScrnWid% - 1, 0, VScrnWid% - 1, VScrnHgt% - 1, 2)ă CALL DrawLine(VScrnWid% - 1, VScrnHgt% - 1, 0, VScrnHgt% - 1, 3)ă CALL DrawLine(0, VScrnHgt% - 1, 0, 0, 4)ă RR% = VScrnHgt%: IF VScrnWid% < VScrnHgt% THEN RR% = VScrnWid%ă DO UNTIL LEN(INKEY$)ă   X1% = INT(RND * VScrnWid%)ă   Y1% = INT(RND * VScrnHgt%)ă   X2% = INT(RND * VScrnWid%)ă   Y2% = INT(RND * VScrnHgt%)ă   C% = INT(RND * 14) + 1ă   CALL DrawLine(X1%, Y1%, X2%, Y2%, C%)ă   R% = INT(RND * (RR% \ 4))ă   X1% = INT(RND * VScrnWid%)ă   Y1% = INT(RND * VScrnHgt%)ă   C% = INT(RND * 254) + 1ă   CALL DrawCircle(X1%, Y1%, R%, C%)ă LOOPă CALL XPRINT(8, 0, "Upper Left", 15)ă CALL XPRINT(VScrnWid% - 96, 0, "Upper Right", 15)ă CALL XPRINT(8, VScrnHgt% - 16, "Lower Left", 15)ă CALL XPRINT(VScrnWid% - 96, VScrnHgt% - 16, "Lower Right", 15)ă CALL XPANă SCREEN 13: SCREEN 0: WIDTH 80ă ENDăă SUB DrawCircle (X%, Y%, Radius%, Culler%)ă 'a routine to draw circles using only integers and integer mathă 'an implementation of Bresenham's algorithmă 'by Douglas H. Lusher, 05-09-1996ă A% = 0ă B% = Radius%ă D% = (1 - Radius%) * 2ă XX1% = X%: YY1% = Y% + B%ă XX2% = X%: YY2% = Y% - B%ă XY1% = X% + B%: YX1% = Y%ă XY2% = X% - B%: YX2% = Y%ă DO WHILE B% >= A%ă   CALL XPSET(XX1%, YY1%, Culler%)ă   CALL XPSET(XX1%, YY2%, Culler%)ă   CALL XPSET(XX2%, YY1%, Culler%)ă   CALL XPSET(XX2%, YY2%, Culler%)ă   CALL XPSET(XY1%, YX1%, Culler%)ă   CALL XPSET(XY1%, YX2%, Culler%)ă   CALL XPSET(XY2%, YX1%, Culler%)ă   CALL XPSET(XY2%, YX2%, Culler%)ă   IF D% + B% > 0 THENă     B% = B% - 1ă     D% = D% - (B% * 2) + 1ă     YY1% = YY1% - 1: YY2% = YY2% + 1ă     XY1% = XY1% - 1: XY2% = XY2% + 1ă   END IFă   IF A% > D% THENă     A% = A% + 1ă     D% = D% + (A% * 2) + 1ă     XX1% = XX1% + 1: XX2% = XX2% - 1ă     YX1% = YX1% + 1: YX2% = YX2% - 1ă   END IFă LOOPă END SUBăă SUB DrawLine (X1%, Y1%, X2%, Y2%, Culler%)ă 'a routine to draw lines using only integers and integer mathă 'an implementation of Bresenham's algorithmă 'by Douglas H. Lusher, 05-08-1996ă A% = X2% - X1%ă B% = Y2% - Y1%ă DX2% = 1: DY2% = 1ă IF A% < 0 THEN A% = -A%: DX2% = -1ă IF B% < 0 THEN B% = -B%: DY2% = -1ă DX1% = DX2%: DY1% = 0ă IF A% < B% THEN SWAP A%, B%: DX1% = 0: DY1% = DY2%ă I1% = B% * 2ă D% = I1% - A%ă I2% = D% - A%ă X% = X1%: Y% = Y1%ă FOR I% = 0 TO A%ă   CALL XPSET(X%, Y%, Culler%)ă   IF D% < 0 THENă     X% = X% + DX1%ă     Y% = Y% + DY1%ă     D% = D% + I1%ă   ELSEă     X% = X% + DX2%ă     Y% = Y% + DY2%ă     D% = D% + I2%ă   END IFă NEXTă END SUBăă SUB InitCharSet (Segment%, Offset%, CharHeight%)ă 'this code initializes the data used by the routine XPRINT toă '  define the charactersă 'Segment% and Offset% are the location in memory of the bitmapsă '  of the characters.ă 'CharHeight% is the height of the characters in pixels.ă '  CharHeight% may be in the range 8 - 16ă 'by Douglas H. Lusher - Aug 2, 1996ă SHARED HiNibble%(), LoNibble%(), CharHgt%ă REDIM HiNibble%(4096)ă REDIM LoNibble%(4096)ă DIM Mask%(15)ă Mask%(0) = 0:  Mask%(1) = 8:   Mask%(2) = 4ă Mask%(3) = 12: Mask%(4) = 2:   Mask%(5) = 10ă Mask%(6) = 6:  Mask%(7) = 14:  Mask%(8) = 1ă Mask%(9) = 9:  Mask%(10) = 5:  Mask%(11) = 13ă Mask%(12) = 3: Mask%(13) = 11: Mask%(14) = 7ă Mask%(15) = 15ăă DEF SEG = Segment%ă FOR Char% = 0 TO 255ă   CharPtr% = Char% * 16ă   FOR Ln% = 0 TO CharHeight% - 1ă     BitPattern% = PEEK(Offset% + (Char% * CharHeight%) + Ln%)ă     HiNibble%(CharPtr% + Ln%) = Mask%(BitPattern% \ 16)ă     LoNibble%(CharPtr% + Ln%) = Mask%(BitPattern% AND 15)ă   NEXTă NEXTă CharHgt% = CharHeight%ă END SUBăă SUB Screen320x240ă 'this code puts the VGA in 320x240x256 mode, and initializes theă '  character set and the bit masks needed in this mode.ă 'by Douglas H. Lusher - Aug 2, 1996ăă 'begin with standard 320x200x256 modeă SCREEN 13ăă 'change the CPU addressing of video memory to linear (not odd/even,ă 'chain, or chain 4) to allow access to all 256K of display memory.ă 'using the Sequence Controller, select the Memory Mode registeră OUT &H3C4, &H4ă '"AND NOT &H8" turns off chain 4, "OR &H4" turns off odd/evenă OUT &H3C5, (INP(&H3C5) AND NOT &H8) OR &H4ă 'using the Graphics Controller, select the Graphics Mode registeră OUT &H3CE, &H5ă 'turn off odd/evenă OUT &H3CF, INP(&H3CF) AND NOT &H10ă 'using the Graphics Controller, select the Miscellaneous registeră OUT &H3CE, &H6ă 'turn off chaină OUT &H3CF, INP(&H3CF) AND NOT &H2ă 'clear all of video memory (setting mode 13 only cleared 64K)ă 'Do this before switching the CRT out of mode 13 so that garbageă 'does not appear on the screen when the switch is made.ă 'using the Sequence Controller, select the Map Mask registeră 'and set it to write to all four bit-planes simultaneouslyă OUT &H3C4, &H2: OUT &H3C5, &HFă DEF SEG = &HA000ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTă DEF SEG = &HA7D0ă FOR Ptr% = 0 TO 31999: POKE Ptr%, 0: NEXTă DEF SEG = &HAFA0ă FOR Ptr% = 0 TO 1535: POKE Ptr%, 0: NEXTăă 'to reprogram the CRT controlleră 'remove write protect from the registersă OUT &H3D4, &H11: OUT &H3D5, INP(&H3D5) AND &H7Fă OUT &H3D4, &H6: OUT &H3D5, &HD     'vertical totală OUT &H3D4, &H7: OUT &H3D5, &H3E    'overflowă 'select the Maximum Scan Line register, set it for double scană OUT &H3D4, &H9: OUT &H3D5, INP(&H3D5) OR &H1ă OUT &H3D4, &H10: OUT &H3D5, &HEA   'vertical sync startă OUT &H3D4, &H11: OUT &H3D5, &HAC    'vertical sync endă OUT &H3D4, &H12: OUT &H3D5, &HDF    'vertical displayedă 'select the Underline Location register, and turn off dword modeă OUT &H3D4, &H14: OUT &H3D5, INP(&H3D5) AND NOT &H40ă OUT &H3D4, &H15: OUT &H3D5, &HE7    'vertical blank startă OUT &H3D4, &H16: OUT &H3D5, &H6     'vertical blank endă 'select the Mode Control register, turn on the byte mode bită OUT &H3D4, &H17: OUT &H3D5, INP(&H3D5) OR &H40ăă SHARED ScrnWid%, ScrnHgt%, VScrnWid%, VScrnHgt%ă ScrnWid% = 320: ScrnHgt% = 240: VScrnWid% = 320: VScrnHgt% = 240ă SHARED BytesPerLine%, APage%ă BytesPerLine% = 80: APage% = &HA000ă SHARED BitMask%()ă BitMask%(0) = 1: BitMask%(1) = 2: BitMask%(2) = 4: BitMask%(3) = 8ă DIM Reg AS RegTypeXă Reg.AX = &H1130ă Reg.BX = &H600ă CALL INTERRUPTX(&H10, Reg, Reg)ă CALL InitCharSet(Reg.ES, Reg.BP, 16)ă END SUBăă SUB XPANă 'this routine allows the user to pan around a virtual screenă '  in 320x240x256 modeă 'by Douglas H. Lusher, Oct 8, 1996ă SHARED ScrnWid%, ScrnHgt%, VScrnWid%, VScrnHgt%, BytesPerLine%ă HPanLimit% = (VScrnWid% - ScrnWid%) * 2ă VPanLimit% = VScrnHgt% - ScrnHgt%ăă X% = 0: Y% = 0ă DOă   DO WHILE LEN(INKEY$): LOOPă   DO: KP$ = INKEY$: LOOP UNTIL LEN(KP$)ă   KP% = ASC(KP$): IF KP% = 0 THEN KP% = -ASC(MID$(KP$, 2))ă   SELECT CASE KP%ă     CASE 27ă       EXIT DOă     CASE 52, -75  'Four, LArrowă       IF X% > 0 THEN X% = X% - 2 ELSE BEEPă     CASE 54, -77   'Six, RArrowă       IF X% < HPanLimit% THEN X% = X% + 2 ELSE BEEPă     CASE 56, -72  'Eight, UpArrowă       IF Y% > 0 THEN Y% = Y% - 1 ELSE BEEPă     CASE 50, -80  'Two, DnArrowă       IF Y% < VPanLimit% THEN Y% = Y% + 1 ELSE BEEPă   END SELECTă   Ptr& = (BytesPerLine% * CLNG(Y%)) + (X% \ 8)ă   WAIT &H3DA, 8, 8ă   DO: LOOP WHILE (INP(&H3DA) AND 8) = 0ă   OUT &H3C0, &H33: OUT &H3C0, X% MOD 8ă   OUT &H3D4, &HD: OUT &H3D5, Ptr& MOD 256ă   OUT &H3D4, &HC: OUT &H3D5, Ptr& \ 256ă LOOPă END SUBăă SUB XPRINT (X%, Y%, Text$, Culler%)ă 'this is code to print text in 320x240x256 modeă 'X% and Y% are the screen coordinates where the upper left corneră '  of the first character in the string should appeară 'Text$ is the string to be printedă 'Culler% is the color in which the characters will be printedă '  Culler% must be in the range 0 - 255ă 'by Douglas H. Lusher - Aug 2, 1996ă SHARED BytesPerLine%, APage%ă SHARED HiNibble%(), LoNibble%(), CharHgt%ă DEF SEG = APage%ă Offset& = (BytesPerLine% * CLNG(Y%)) + (X% \ 4)ă OUT &H3C4, 2ă FOR Char% = 1 TO LEN(Text$)ă   VideoPtr& = Offset&ă   Ptr% = ASC(MID$(Text$, Char%, 1)) * 16ă   FOR Ln% = Ptr% TO Ptr% + CharHgt% - 1ă     OUT &H3C5, HiNibble%(Ln%): POKE VideoPtr&, Culler%ă     OUT &H3C5, LoNibble%(Ln%): POKE VideoPtr& + 1, Culler%ă     VideoPtr& = VideoPtr& + BytesPerLine%ă   NEXTă   Offset& = Offset& + 2ă NEXTă END SUBăă SUB XPSET (X%, Y%, Culler%)ă 'this is code to write a pixel in 320x240x256 modeă 'by Douglas H. Lusher - June 15, 1996ă 'X% and Y% are the coordinates of the pixelă 'Culler% is the color of the pixelă '  Culler% must be in the range 0 - 255ă SHARED VScrnWid%, VScrnHgt%, BytesPerLine%, APage%, BitMask%()ă IF X% < 0 THEN EXIT SUBă IF X% >= VScrnWid% THEN EXIT SUBă IF Y% < 0 THEN EXIT SUBă IF Y% >= VScrnHgt% THEN EXIT SUBă OUT &H3C4, 2: OUT &H3C5, BitMask%(X% AND 3)ă DEF SEG = APage%ă POKE (BytesPerLine% * CLNG(Y%)) + (X% \ 4), Culler%ă END SUBăDon Schullian                  VGA SCREEN SAVE/RESTORE FOR PB d83@hol.gr                     10-07-96 (17:39)       PB                     301  19851    PBSAVE12.BAS' Load/Run under PowerBASIC to extract PBSAVE12.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PBSAVE12.ZIP",4^6:Z&=14590:?STRING$(50,177);ăU"%up()%9%'%R-%/iIiF9p.=0Z)%%%w1%%%0%%%%ht%rufw%wSirOt&%.,>Sm5tN0ăU"]h7UVIeKG5j_9-IPk7+TM2j=DES*]CTIGg=O/b3Azb?PCbsPysC&Wbmk?UwngbQăU"mj5EA<Unw/)Z:.uHgEul_h]BSVhI3p.?vp>8fs8BOQLIa<=2<r,iiT(stom=-ltăU"wT9Y57p].gxYHQ9.a4Qi%p#O8P,Jn,&U[rbDgA-+GXf(PFHb]+\is;no2J4,P/:ăU"_)rNI=o48D=Qkhf$=(9d='0X:,TR[4pLHr'fm$9T$d8^oMmJ'OSiXer.G$2f&rvăU"iQnwiXO'%$XqIg(k)'^iK&poLu7vpoFVOl]oozP7.4te-HH8167U-?6;SblMJmkăU"#N=CEojd#?#U<8U[E^Mll\S8AE5&0Yv*WhDTO*bwd.RE3sR3fF#].4)vVtYGX;măU"UA&+6k:35g348,?k^jCDSRT^NpofeHVeAj(1cjlXCT7ak4-hheC1jV521>?;l-lăU"M$N_J(KbW5RM-t\8>D:j\5Y3%whPtSLnGg=VQWRS/WMnGQX&E<#])b0X[,X&:I3ăU"4ZI>,(Pn,hLzrRTbIM2j?EZRA+j[K=%z+s$4?KN;(G#s6=+]KoLR7Te,,HC&mh(ăU"7LD&;2gejTbQ+zBH$l/cHY$<osMY8=:]]%sXL^Aa1D[vR^QAC.qd&#oCvAs6/EiăU"gRq[mg1+QnAy/&?Y/r2S&;Ugn3uWNBZSVCCiJBiqYa>Be$XU/mh)JE#lrD_zO7#ăU"uG^jtlq+m(7r>*0UO)Y,KXj^(:yIH#pL_#(u2DsnyigfWM4bC;HICt8:tdns;+BăU"ZQ*4U<?o3OTg1KzDA+7HnqlTH37KSMBD4cNu%wJ3J21:EaFf%k-%pc%%4BD5uMCăU"<B:i(uxm9'bLo*^JLO:5tPy57-MeM&wY+Q'1t$G*Nz3+q$tLj*nc8I5<B)/ubNFăU"5y7J4G$RKuUksA2BeMx&7CWV1AvugR1nMT0d3rg<EM\BPoR3_uGkX*M,X1yW;LwăU"B4Un4Q[B?xH]Cv7Nhi5FmNi-sN)q3EL^a<JF$78%:?r3>GqR]ps:2X_WJigv0WmăU".(CbC.>2=O,ps>=Y5[g+a<k\uK29NVW2+]\#/_eXxTY>3+.nrTobR3&Mkb2ri:ZăU"dJZiez=O2:joFEBp#GjQRr]+&&$Rqjgr^]VBXBD_]h4BfB2WObJ5M<a.n[nZ<IPăU"XB3iB3chJQQXaV_fHbHk9[6K)1R4C>qoXhUoN^Y[ON7W]ThRLLCpFbFoY-uUfHWăU"'_f-P<qjDz>A1gu^^dxuZ4JeD<))sS5eS#RlT$9-_a?a\OZTEhQ$p+U2pFJoAy(ăU"tfO_^>,U0<6eW*W/;e=8\JF$.lF6eM6C=2*'xnGQL4V1okh0\9wdjZiK_(I.KckăU"'LP-qgqm8Kjl;61V%Q\5-0d(E:6B^MtaQLNe(Ej;9aDN=,aMf>E9&/cjSDiQ'[băU"$/t)D2p7+NR+mS-4&/#;b6-YDRT4-3u>x-VGUoCvYj$2+',Og]#9Dpid%up()%9ăU"%'%I-%0e.iF,l)Zdb(7%%c.%%%1%%%%lj%yuqf%sjSiRrtFd<X>[k=5#XR<rNqOăU"0C:wmKG+iUdmz3iFK$/[J4#t&Qn>StA'Z[)RTfu,s^.KbkmSbs_cVop?M8]CC$:ăU"Ec+0UJwCODQpTnWlluHEwiJ0aQpn:Ett<v-t2tJED_t+-%9P8\uM&+xoIWl5\/AăU"*f[aGjpdF4LqLl=sK3*cwQtnJz7;6NLTWNdCpgFi_Xi2)tsF$4PW^q-\AUN9dofăU";d<sV:6.3[aUT(aD^QfBTTVCW=dE,ZF?q<VL$omaX?'No?PxR(Y*YIapAa]oz$qăU"-Ah3j+xbZA-*FYG%Vz:bZfy40##3P$F3k)AwFt;GclFf[y5ils&]LYUVd)t]tX,ăU"tL1tdTg^e,>poRjhGim'4BkC=V^C&C?ujrCta<#$hJckPlp6-9ZGYl7cqko=_a2ăU"=B.-H$rL5tWS\W;=?VQ.D3U&h6+EwRvk_?t%HQk&=?)U&v_Fqq0D*gJfN%TAUS.ăU"Kvka7P1vWpS7SF&-yvhMtW.*&:[_d.Tk5S]:8cZ\xi[SFuA1Q4U0r;Ga$j+^_j1ăU"1%u&(Z,v5,APbeU>Clwo<FOjA=CTS&nt(o+UVQg;Y);*V#22lO&b&78+Uz^O7<dăU"UqQ-etSZo]l_pI58NaP/'9hTlIRa:bxJ4,HAV<FAlMvo73\u%<qj[/o+;^XT4CTăU"uA=3OSAYA5CwTH^[KAI)E2cpHu^x7xm3B0V-bT1,lp0#X.24CRk7t[2pU:3OTg)ăU"35s$V^w^Mjr,lR%K_J9MpMfSU[N[Ke>^qbUjLnxv:PD7k?9ELDAfDp;y83gwKw_ăU">%#X#[PzgFz-SyNq9;g;u#(k$DiE8L;kvg*#AqpgY\s]FGNZ,?4]Kpqqc(a^1aVăU"o>Q^J26#-?\qWqP/Rg+ljOOcDk-:lB\K=&eI:+]Io85AM2qjD%P[Uzccr?2hAX7ăU"_>#CSEk#qu4/CmswWe=&1rJ1KbgS2ZTH%o.x)o>C+S[+h\&hJ\=K5gdaowVCQsfăU"K3u.E-ZnL-d<bNbV?]h7un;WWNkF6&B0if_Vz>J]q)e[3c_+D;S<kl.8[;B9Jm^ăU"0-96wP9,#w(u%p()9%%'%-1%(jiRF4UY&eB/%+%bA%%%1%%(%%lf%Wknq%jSir4ăU"t.'p>BTA6l7,Yx&phv[B20vK3a0HR)&PIM&0j'Qp%a^UCEAMq%1'/Cka.NDMxs9ăU":LtXzABkFzJTCTR2*36U%Vw&-:#,_-kZbw3v<8mg>cM6*-nz:9$CdnDL0w3^a6LăU"iUj>LNO,P?V:Dd..0w&)-1z^$+I>EhNb;]YD4Q+i%t%WxKUz986YEl53\5ED4'lăU"2RR,?*rSkBofZvWuTc-0TSb-iMpLQ$=cO9u#L?omgBx,s'V?sqlq2?kl[/GxlnDăU"l$7XowQ0JCL5A<=+/iHexhhJ=o98^vd6TB1fm>t[r*bmt--t.8utQD0GM$Z7t3ZăU"otiy\d_0_NWq)xV%-/M3tEN-j,8L4+dgDQfeI[Q<R$s'eo&yj2-P2\5gt;xqP$$ăU",S8=8OUKf-'LQ4neZuu5VCilJZL>C0$=+,=0\R=G_6G0>GgT0c4(UF8<m;v1S.săU"g?(j-('9?_IP24\3T*0SJgY*oQpe#f\s/=;''G+;#-,*'N>kl0BANj'#**.=;0)ăU"EBafAg8e[WtG7HP*avDxI<r.qg#XNDXR<ClFR6%D-;u:<=3#Th'-:IvHatQYq*oăU"<KZ6_wSd<VZ'lJH3b&qhQo&+T%r1D942kgZQUY(cs7bX#;vrnp,TXxoS<?;21rQăU"I$$9C$ij's&p65'9Mq8hAWo]2I)wolSA$QCVV=iYG_s=^)=92B05Soip9vV'F1YăU"_Y?^4W0kb3hPk#[-fKDio3DgV#0Pmr=0A92E%'t*keDAz:+8:-\=:=Z5DH1AAZHăU"\=\=7KYm$Z16,5S;)GJl8mSTT9r;FBvU(E'4ma^k(IK(M1fGuY';Q%H.ul(G+=săU"$'QS#;Sb1DA'ePl%VIPfUW>ZQ#f5Ka=NKZ3#-#]Kk#4eq=)\>o/mkzU+sY/<Dt/ăU"Mg;^s9jDiO#f]S++GQO-bK:*H/>huR+[L/5c9+64/HkA:Z:[0;F1DZSF0k?ZV,aăU"4^5bIM9ufFpi7m+IaC*A$j6Ip:YA=*Wk'1l*4/B&<P4HERe6C_0z(W,Q]H+F\aYăU"4q[O2j1ugO/EG$\h8(3fEr7n5Ya_mNLK6%<,krEE=B<jQb-wFWi)OG;V,[6pN1CăU"Z<O[]fxm\ZjG6I*)IEo\*li/u*9UgL\SPSXQR2G?LI+E2X\r]&hU>HgR6xsAL[BăU"[c:6sJN:Tf5$4)6YK=wa&I6_r4Y3Kd9rQZ$>&Q^g?RGkMZ\_b[nAI=^*IUktaT]ăU";ia':>h')9R>dIXONIRq(_,Gb/_E6m'7l%L->#y_9-4hgc)rI.'IfSQ[_fa'P10ăU"PQAT54-#rB&s$5+Xg^+2Z1PU*&,cELG^21G*k_Vsh5+&urCV]LQEEJEfE$zC(cTăU"Q+M7.u*iQ65plllU(4w-pJvuMvN&oMumCfpN/u1K=hHf0Y0sR9YQn*=k#eRd\GgăU"vD:iMEVS5/%)?J[s\PVrj?)gdQU&aBjsLMNNu]ElEHMNR[Lo6KKK=Pv-8nn\x&QăU"7(pL1NaCzdZ:Q'%FQN=i=8vH?a]si,2ydpc7&$rx5rL=Ob/B<tSv<[4Z)3SsX\;ăU"C9RFA[q:U1an$Ea9$Mp5z6C?iW)WnI6u(ev2rh-w.;nkRUMstYSn.x;B=ELQNpbăU"C9VZ'Y^LI;SXU#ec:;?79F7A[%g$H0J?eVZu'P=>MXB30AmbK4kpI,s/vXRgd7=ăU"Vs#:.\D*6lPHwa4:Maqplg$:M.6B(->*lKx^'XiIi6R;F)i:NWL6R6RF?=4tbktăU"TMNeSR7m$o-NVuVV+)F9Sfp/Rq7D)TEC79Sz3m8u5Sh&pC/fJ*SI;[3yl\P)6LGăU"%2xp\RA].D'\-N;bh-vtF&RH8WCib5:8fAx]b^QK#+<$n(%3;b+)/JloOLN7lVAăU"NkF^V='Rj'Dx=L6Ap:ug1c?#xbj&Ud[lS\QFj1t1W'jFd=.IGMz%3+\RuWmEIK2ăU"%ABl=)]S+p^oMb5Of7xEc;t1M3tAL2^'.p.vvCW6K&Ja\(*tO7_tObPm%Ap-rvaăU"2OZ[)_Dt3T*,l_x=TM/LS6BYQM>7;Bs942XfLHvNjPi#-*6O'J=;t2cBMsX=;%[ăU"-tN^kZzDL?)iKNwy41=rUqhM,kL:[%##&g2KouGU(#YsAUQ%aFOz]7*nOa\&-u&ăU"J3$T/u]dox,w:j%FWPU]/%&2:RUjs6irn^D45YGHn^,0E=$DIQ4zmP^R[R9xcP+ăU"EfFNVs-V]922<MC/R*FEqp-\#G,]Xp-t7*'%F8;blNB)_$^,0R(hTsgxts$mmXSăU"rhuJK#i;mixR.4-+P9BgZ>L;^))58]n6.6>p_eA_:U=]UDSC4IC[O&oqD]5=[/.ăU"gq%gVx/2cfF0C6,02QIEyiD[:?a56;hA4LLy8LwxfX;t5iIMj<_=#&Ur=X4Vw>văU"d7weox)E=9b,V2Y*>j-f.Z2<GCfBb3F4nrX7oYjRF8$Q3<^Krh]blVc=Q]9cEMvăU"UBXI\48fLB>N6<Z.9gCf9C*^yCnP\r/(9WxEOh_=6I%wI^HyyR3U*oGMt1GYo*\ăU"[MIzu*y3Vh[=gD92nabiUAC%^rBL/vUrD^T\Rq2zWaugl6BqF4/wF[vY<72[+KkăU"(&kal\jllY..;&>%&5aHuV4&s7p-IZp>>4j;Gh5&quNguLuc[:g:Sdfvh51_t9JăU"xqa)PG=Y<2x?qEJm3E(eNMIvY:D,nXvk]G^LA/tZ<hg^h5dOAhok8xm5\g#=Gi1ăU">8cfB(B/hM37<c+WudJnC#snX_6\%hV\ztl\#_Rs2V(Jn#gbLN4tgZtCTZouUk.ăU"*0f7s?jRJcak-F=F8pHtGA5n,k8^MmG%b/QVCD:qc['<LT.^5p:xhM#E4#gYh+^ăU"aD/v0J??,25DC/_gr&nS[#ok3\;4j3'-L#lR=]bXxwMdx(w3_.hm<nphqI6I;D7ăU"JcnnLJ)A=-(mVN]_DgUKRWBcAn40EHCPU7[e6g<Y,*3aI290:HkC\Uib8N%(43JăU"Ajh7l,RwXO[7k3L9i0g2F:Mob=;A6LhDhnhg>w$uqSs9_H;=cA](9j4(8ot+5u=ăU"d;R196RG.TSq%K>zC3n8?V9P8Mkq5Z.Mr6Bdbw5GE<p\=3DvZ=#J4SO4DPDp1N6ăU"qGDtuEFm,(#jgDr_:)U.O;l[t6.5O?E?rRtHD:TxSAZc7/t:Q]^xcy71,Mc5LqXăU"b>%vE?>UrCG\9l4b>&z^kX*h5*/bD,wX<[6_g.h1eM2(naRfe&MYGjkhdc5Mw^qăU"5bfp.Sz.t=t4=/4?8F-,G<4&5u.ES%MFYD0MT]<Hd#eMc03#nrk8]g5+r+M:S5>ăU"FSr]1da/x8r)$x[JY\UV9-^8up%()9%%'%-%(EfiFmS%Ct'u'%%'f,%%%1%%%&%ăU"lft%stkk%Sirt'&zrt]Tq575*kN=Iu5oU%MNwPFMmz?QO:\(alj+C]JI0*U?;],ăU"O8^FtS9J=pgO$I[CuXxNs.#GsO(l$o<7W*GcfGalTEX,:,v]DhazP%fWHC'L8V^ăU"O3RlaSx$4e&$Wdd0Y:.87;8OkV2q^4*xsZ49HI>Z$:C'?Z.BN\j7qS6\A#d>mw;ăU"<;5xAm.;4n3XR(iNy:NkD%i*Xr9-;='-7ls52X%a$MVFUo2HPnZg]JW1'X++d+NăU"GpTA/22U;\UF%0\W8VhX0HCiNyKEf5;#tO:E4.x9NuTFnhudP)DPSf(8$x^tPmoăU"aatQ#3u:rDdTPDJ_3=G.hfl)3nu+q]8[SVqUV<p5'54:V,C;%z83*55f$3Q%M%păU"?b1VBUU;#7Mxg:C^-puFEH5>1c::0?[5+A?&01HTk_35Q<'Qx,YZH5QTlQBjDwzăU"A#C>Hb]hY/4nGxTYBZpNm4;e#+&9#[]MJSM[t^D?&;#db#]+f?v%bA9fm+GG(eUăU"N-I&jX%327,(w%'Z0:*q.yNJoI07imcA>1Sd'smQmIntF/b4VfY,?COt<7kCU^9ăU",Pi%92f'OH[0rn$QFV[gU(6&Ed[57lgC*M=Z/TQ=*.E+0I3DgrUdG^mWhOJ62jqăU"ZllXM>xg37KI.7&P3Dhx]a'Uz..y?Y6)T^OZ^-,\KjW-'&_b0u-.]'G]Q?;ad]3ăU"RC\2;lj*)_W0eci$Rt+,J?C(GC.^D;r#wTIZggQeYpWeCcHuxg3=Ap1TF7wed98ăU"3p&)v&Y,kmdG4l;E;qMR+L[u3&)TE'0dHZQSpAHAC-lD;L)2jKkBI+;D(,l:KAOăU"5SghVF^&(#g^;<b$<wZCInRUof^fU/TiwQBVNdCsN,e%.w_Z>oGy6DCwmldf)vjăU"Ij:^->FefffYFlXUN3:'%d/pr=GEB1kE*N4dcdNZ.'Cv4dsqcTZs=&FuIM>P)s>ăU"W(\-YSB0dvoMb5R'D-WdEa.%up()%9%'%R-%KddiFi+(oz4'%%%q'%%%1%.%%%lăU"%fWkn%qjStIgoD$:f7Lu==#8I5<S4#0LBVQFi*-2bYFf*ZASSEsq/'%aXluS)z6ăU"rBLG[]1-bkeKFmi]4Pv&RQ)q8*N?'f+o3/(0#1C5hh4Q>O1^)VI7r-GmiscqwhuăU"pwXxr\tG97eQ[Dq^Tv;*^gT_#68kLZgIQG0iG=O.W.?LppPprFx2#;s&X-(G,GbăU"BB9*%a:GG24/k&.YS0>Q=dq+QXQ%4fSBFsa+He#qFA7O=lDmk/1H$H%fd;t0*+PăU"mt'>O^%205TWL(p>-a4t>6u;o6wM0Yl#+DTlmoaZgCNVcWk+gt#ZC*TChR/=xIiăU"qPt#tlu(hmL+xO[gy92Q%30F(&L>R'D$b?.kJ#[pN2:\s1bD1KVNI_[3RzhkNcSăU"i4bh3]*A1yxU5heAzpBOX5pK[SRtI+b'i0yh<(q2z_VC4(C<E)(7\7tF^^ziz9)ăU"ZR:mQI1EOj'AK6iN>pTd=?y21;I8;mH=M1fTqxhjvQ;7m(:w0A(CQr4w^Mt9*q^ăU"n_,#g*agb$X(HQ'HMl07&Q\O_i,=[zl3_NRQcW+IW7iDJfWgutWHSpAWa1sU-tDăU"5eR$6Jb#,c=&n5Dx'$Y-:v?MIl3]^ivy/lIOvr&D8/+?-RL;tz0n0JRYz#b;5BtăU"tPRB\?Hpb/;0T_\Kr_];\&q8fIIA#EZ,?9Hj.xhq%<up(%)9%'[%-%\#wfFWSIqăU"wS#1%%X%Y%%0%%%%h%truf%wwSzRsy^)_*>##^:M\Y3x?Y+)$SwO%nnkRB>VMaWăU"*'IsOeC\ldEUU4u,[?DtlFG%jI_>2&7&Le,_Oe#DoMM_kvuami&B5o?7,5IOgToăU":RM12B:SBG\Z$/tmodelw:b_P4;>:(djhFD:h=7GOSh33?;LGIk:saFDo,*6G\căU"^GtTw\,O08=3ob-(&wY)(Nn2_0f*ZDI6iC07bKqG[85\egTtsLqv:qMz2X/;nxVăU"u0PiJ5/QVvE$8D8'#tT_&b.AaU#,;j=qBRWutxhXYd'0Ai^jST_??[b(q-y2XH2ăU"ng.4x:C_Hmpu++uca^UiU^M%$c,P.<u&-CfsSs80D26D:1[+*r>wA^7s<q?L:YZăU"[RR?rITWqD86Uyu\ov4YN74ZWd:><ttR/\jL2Lpug''(aI0\KgEbZj$-N'4Xb3PăU"4JZEsk&Rr)&CL30/#c*7U;3xfl8KK_Ygys?J2hCmsCtoXIT:R[$*)r;chQP>*5TăU"d.NLcI<AFzOswnWgX5*q;NMbNu]r]s-kJA1kh/=3Ei;Um\%'\6j^bJ.cj[/soY7ăU"XGm4+\2xP8T,iA7V[ViA%sxKS*l0;^V]c*Wi1OhUB5%)_MOr'ucMvoW:<B[<N.dăU"UP0At'n*BixvlS9&d9aZn*]k5*R^;ZaTiX$FA.P/Pl7Q/4\oqHEBRZRCBnLPMIpăU"k]UvJaoLfZEPX^1u*gx51L?4PNJQdh6,-]Y3*9dG;1-X8Yx=/F>$,44$2+SD(IjăU"B?V)i:MfQtTA=u-f/*0X<.#pIoXo&al&p(mM-&jjif5(?b%.a.n^UFRYqA>M$.2ăU"YQtB^L:e:wwAP4cch_GKB*,992Ze\;7-2o&9#,4JmW4E$$TsEqRGv)Bi0:m'O*;ăU"*nplRtyi0l9i588M?+8\gf$$<FGb'uiFL#o/+?DUDO=4E^Vgts?Lo:L_RZb&2%eăU"lutl8XR-Z?u&i6MFQYhmZrq6rg^&/a',(4GL1WN$SlWonY#J;In6=TwI>gK6=H*ăU"EolXC;4+aN].FHIN2+A^:a*[7MEOP<bjq%u<7r;8*R=Gg0<OJ;^(%ur:/Pn7RT+ăU"6GLKbkPQ109hz<H,7o8KT7G\MfFIkvRTm5bY(IF2AG?UuY&=PkaIh[+moplRb:hăU";sQ=$qMkk-#1'hS5$F,v0'KBv0-g'd0:m=%wjs8<twA+-vp3>IiV$8?Bq5kiRPpăU"AzFXs[&Jgl,V(Oq*Wwo0B%^.X7JUMV11SioNSqALPoZ%0Ek)XyP;AsH6+7+<KaBăU"8qslj/So#l9vgP^R<:a^VIQE1Cz#Lj:h,t8K''\Dw:qMGtf*T>oOq/tr&HutK,_ăU"b,D[tTMF_sF-SqSF)FV(r7c]lGvuxkiF53,uNcc/_<a3Cy+1x4'B0(A'-Cu/vi(ăU":J,gEbNs#x%GA:5\G+3GcQ7ieY$RS+'8?*l^4UX*'c,%MM-Jq-^[TIveDTcTA1xăU"8RQ;w3kCrn<P2qN>$Y?#4tLQR:^FTp4Rt0^oxyIvV&=f'XIj*deSzf[a]8E-$Y.ăU"?'=YG0w7CZa7P]EePM_-14]^4QTS3YpY&6M5$'y8*-)*saOE3u<#^d3<b[_'+)eăU"O3bJAG&A#S2SirOdOIa^r3fOM3I]1O%[)#e>8#Zpg)>iGlADC0Ut+9e]s18pw)UăU"0Ccf[aVlwT((DcCFFz=ZLxBt=k^,b>OZ1PbNKZ;EvJO&U2m;_,?J#en6?XxnGabăU"bT4$IjAmq,ouC\,A%&N%H.^g9t+Tatt;I9:]O711&V4tUQ*GHw,82I6K8-iJtVYăU".51==(akD0WJut8JRlLajX]Nd0a55?*%eH(gKz3H1SRVWzcDB:E-h\T-PkKhJ9măU"fbH7*jMB.k_5qFCj:'WDS-JR0qp%1E7V[dH)TH4t6RQ#]7:-+iM&l_N&tvBi2K]ăU"n[O\m[v-9BZzuK+sD4mG,8$2#N^M:f)mY,XAmQCTcSb/4F.AczA^n+:a6SG\U<AăU"K_0MNL9N%SotIcBSRH[Gd,Z0$lFj;g)4hPaxC*4;%nS&O2T,>4-T7XG8bE_qAWMăU"JNlI']Xpl\7s)?70[Y/J0Y\eAhqTA:q+r6ndo#KGnK:Gk=1hv:b5;ZC/dUM6Vs[ăU"A&:tX0iAX9G\b#wyGi+JtaWOM*NsOES%4;x=]/u]=/lK7N9BU/EAQhL*abkR&GnăU"s+?6E\=#z(AlK:.[;>'?*NPRUD#L0%*qL;RL'/$gIjsp_jRd/X4[Wn\P*F5$6UnăU"tiVQ4*]OJhr%(_/9FEG;cz/FMm2EmT>6Tl+jy1YlB1X]QQyMgSs,5ctAg((M'$5ăU"v.&fuC$OfGfqNx/-O=j1NR^Y;5i3p8GW7AO<A<9E>GX=k;8dnELd2uZ'jc,&b_^ăU"<St\.9h6W/#:IQFgaVOnOCP;PFsRFt:bVA'p5,-gt;0T>%HsH,f.UA^Te[G<('JăU"cc[kXep7PG(%3l_YaAgi)qL4oxf58_O_[K[i%%/[-o]CY?7g&&:I%9BUrJ=kE+răU"sO92.i_&zI,\/5No3ZSJ)fD[bRY%9DPCTqY*Ur=p3UwGwk5ia[4:6(-GXAO=7plăU"dpWvxKXb#byp:x:5z'FNPeW(I)kH^EL=V=s>$>,S\zhR'9fo26:KfS*)qj%:;=BăU"jyS:az^#EGl_%k%b)G)G8&t6E0nZiPY;6?hCZ]^V?Rv9KKA;bLlKIrbq/Nuc(BCăU"Q+q]mVp(h,#65Jyf:%)[)$O+$?)g*8\-^fUpsh^%eTTPYzh#RxqPbw3+_Alkl1YăU"j&yC-,lIn0l3:D5M6GZ0j*xC6zG.',MT+q*,A<m6:j5IyyIOe&Du3==-gQf(3&TăU"U9>sObEGt])uzLYYfmPx^yJYi)Cng5QKd)+B(^7o3Lus[V07npiQuKc\0ydUQWvăU"yn2d]&,q6ZQ2E?3G8?XcE;B)E[j6J.&y4mpa5H$pnfBEyL'KPeg[Y>>6#6E92;năU"xy.23SK5MQl^<P-LJq#22<kMnqoq54^)'djZsrh9TT\FFiBD8?cX[%*'8>h0cV1ăU"#=_?=4CZ0^u.XY[npx14?VmU8AMRGuCMc]c%imle*[*QrBZiZN>CJTCs&juuRJmăU"t\)8j$*GOU_0q5(Dc#WU:P%V^iStla'^mpxx_D*/x]BS\TN2E:gjH(Pzo7r.O?HăU"E1C4oN^k;kHoieq/c:#z6BI^[tSdb#Gg7WHj3,z)J8igHn=GnJV0KN_sK_)B/_KăU"PX0X]oKFH:g.AL?t.\p]C1bN(dcSt98opNI(qk/uvGTJ:&I\gbLqpQgsKPNq'.JăU"h-17\;_n#];hb+GW4/LHQr'Z,$[YbgBT6h[*9D9XH^:iY#0>Kgf+.67F7D_7yzUăU"66e[31jl1Jxp,bhUkrV;m12JUff0?4p^,:LRmP+R<UrvMjL3x2UCC2f8-Wuad66ăU"owHX/\1.ZuMqY,0n6*q^&_vS5VhzNelJot=%>CFx\,nJ<wT%1\N)>FNNLhS<k&8ăU"g6ov.&*m&;<3&EtBWwVIYUUOs'S9*C(N*QB&I>P3QeW+.G:vm\7iP;dPvRcvaa]ăU"V0rh86.u7AB.CIj]84j6p0*1+3Yr/qQBfF\z4_5540&asf9Y6HV&#l8?k5;NhI9ăU"7VhC=0)bE:<<YgnSkPaFm=\gu%%Mf(yY#bs>oZeN>4N)^,Jxd/$Y]5AcYq)s;D5ăU"<<vsfNTp$A:M<TxYi8eiltAlEC%Q:2#J^[Z>KGI5\PToL*ULo+(Xx4?UiX9c04+ăU"#I-))KdjV)28;*R3In+a\Mzjr,VbF1X]qnkiwQK:<&9Wp&nNn\Yn1je1Z;TDa.văU"$Ii\%crH.BnIW5K#m/f:*?ufIoImV$l*cy/LYCM:riSh&uUarP0\ROyU<DS/DI7ăU"MXKTzsvmMU?.<q$?t%(fR+g5#:590_UgZ$2MxbB7rQ]&b,boEm>XU/,s[=IW_[9ăU"HmkcpV[7lUO0^]\:YIBU2(OTlH+xL1SeZ5nzK_Yr43T=UfsWp_Z<5t/B(/*1#:QăU"?lGAc2.OF0rj=DqQG=$n6=US40gE>SGEZN7l:n<.2F_P1L*M:+0>Efs$7+,$K#dăU"DtIhKDT/Z;,B'L,hk;+[OnF?63[sZ*0>3dV>xMZMBjk:IMn[MMl1ZO&INLfKxlcăU"'u#up%()9%%'%-%(oiiFC/K)s%,'%%%e+%%%.%%%%kxjj%pSzsjyFcH,=Se5c?hăU"m5*<Fm-S=&R_.E*x,s(d?&:VexyQcJTtN/9HrT>YCBFv.wc.x#xLg3dAcYb]Q,,ăU"2#w0#zPvx0XCgBD5MXmHnsM-=e&PElmv=(1c0^A8EjrucpE6W0p_,n(7g4zr9'păU"QUGzo.nF<q5hru/&nPTt40sMPHqEHF\]0v+f-u5Tb8:vMLqRKXOQM/yX/y*<2H<ăU"--;ALgis9Z6kw$uE'To#rN]tjdC76Xus$^6HxKoooI?CQT\ZA%n7VA80TG/6t3făU"Ettwt5*uxC88,Js8iD>pt?/C[/cgiYkpZaGC6v>R#81RBPSjCqtjo8hWfMl<nB-ăU"V_c-XC;uXjc.pHiG\jj6EK8H]U7#]aA=^nk81-GMH(f1Y*j#9F;#pg#B=eHwM+<ăU"=;>^#rXI;(;5Vp\47AV9NLW%(<0_tua*5c[xt)$92vgikMRCXDFjUS<T5#RVCpAăU"KPfqP:>Zu/+'Le;v(s#:SL6uoksXw8HTF-e$/>s<Q7aoXZSi=7Mht*^\(u/rl>1ăU"863iniK2Y+k5xFN&kCTSz.wNmCd%J$yII[opRf-L;;Q:0uf8'P2AD2\wzn00=,XăU"\^x:a0o=iMEe.5J'tj<,:uErq:1IdIeelEuoVQCZO.s66-67%bdR_eJ+i9rhpcVăU"-C<5If,%up()%9%'%R-%>%#fF0m&'0l(%%%i6%%%1%%%%lj%yuqf%sjSz7syVz;ăU"0:Sea=wSqaDWfR#Qppq5=-eVqq5[)LO\Ec6*:8SmrEFBY,%nF_D;us88PexRd1săU"8E8sDFkf=)dN>ul*-P6grreJHtZUlWJNHY:RGiF%^hn6Xj.*7qrLkgeDi,-P<3;ăU"I-E_#gtL2Sy=7U$g7N8f<qOYxB*]a&7J,'sQ%Pe3Uugf78O/c2rwuPAEZEn[wq7ăEND SUBăSUB V2ăU"Mux:yW?z?7l#iuWLUox>R#a,5bCS26P8%FjIB]haie\vHa<$\[2[6mqKI7RrCzXăU"45KX>Im_ZK*WlKnSEp=<'K#YsF<)+pRJ_s7B#84eBU_?L1[(6J=V;;Pd,X)SVAMăU"r-P9;:*(\Txa0ZolD$DGWL5<S08gUYfF%/WXAf;u_Rs^'kcA3:Sfp6>?fgsE44?ăU"th?cOi\u3a='x7#'4,<=r4,Ov=KtvR$(4WwYtUWI/[V:-IWOFm<K,)IBaTg3k$#ăU"K:k:5\,^M)0rw,yI#,Jg&p?%eM+39a5H'#0*MS633()>VP[n__W=jB]C+Y&$*^zăU"d&rP5CG_/zZx3C5'01ZA2SjQAAgkr7JteH>_&>qoK3/\%4j5UHbcFiPEkbm^$:_ăU"^[NT1a(0Q'U3OVQ+ZEb\Q,WG+RAe8O50MuI#]T^OhJ,R$#DJ5nHS/FO9dM>l0ekăU"ynh^+,]U_dQlY^HGhN+[CCd5n.G/FJ?E?yb5Bq=YHcayAyKXm)s)qfClZ\F6=N[ăU"IFx_zbGro*P,1r+&0I[daQxf,:_v9g'i)p+FN:ykk&Ov0:f\k^rEwTA+#(V(AI.ăU"atG=pLAU\gyfWo[yPh<#x0CDT:)uSr$D,X[Ap0FkjecD2rI:oQ7x?Y06a-h$CdlăU"%yJ0NV5P1f?1Gp:A<e+_DAMKx)8uWs].7u,1>r(*N,*M;&UH_)#[J,O&5BHE>ZEăU"a\JLlg]6dh.$UHx56aiVE9Ww2-nuoix,)ng2pA2d0<pH\v9\1,pdma]6lk''[Q$ăU"VkL(\yHg24u2?1+w1sVrJD=bT#n0Mfwf;#Q;vgO<m+c2JG*i+^VxvFSsW#j-e'dăU"t4>-^6r9.p)rBu^sUIIQR+\d?&?f>K-sa1Xw%'up(%)9%'%%-%_&(fFEXM7gI%(ăU"%%W%/%%0%%%%w&&gqt%hpSzRsyF%;,^Sk^9Ll[+dUknL%X;;([)ZP'.P(hsgDSAăU"U[(.>1[[fv)[6ZCPQq,*K.wcvd[wnoepwmsXpkQJ'#=h<KsF<t2-sdbWUJGlnBdăU"Q#IG&z-=(-XdjC.nYVW\^Y,z'81tJigm&shm-olh^IeF'haucvP<[)dDYOi%*OhăU".]6nmH&o]iF)Xdo2+t^]DX_2OjK_lkjp6/ZnE+$2DRE0PRZWP$d+Wm?m(3HH(pRăU"kaqU5Wn&n?ducrLVGneHIT7TJ]U?qn4j+:C7#qx64G<qklXAjUoiV2yea(uxT/qăU"bWB7i0$GI,Jf)S3Aa$nvaCr.1iuJn[LVJf),LhoK>3xhL=ng5M4J-rt/Iw9+-x3ăU"i(-JE$,hmcu.?B$,VtEA;KM14$:\Lw9Q0Q^0qaibB8wgBAgj_Q+iB*i%>ioj_:găU".>Jv_,RPeHZ>%E6NL[)=$7eB>k<KdMjtou.F6d<YA\1%BB-55kkU$mjU9D2&c8.ăU"h,)K?7-gW-21UtPE'Pv,K:X2pWx+Id79u2=D.OaU\#RA(6Bj&LVl$F$E0FXcjv-ăU"3S8D(GF&'<Qd*cBs$>Dr?p=5QoJ1O2reO&+r3<_<Y%OxP*$j(]jS,9]J*_JEU0xăU"YT:rV4>LnC4o%;RNIhuH2[)VYAMDXKk0?2r3['Be^<y2AtsOQhS[1-2M93YH-YOăU"F%Nw=Z]&xJBx2K=.TAISFIwzkZCbTZ>5p4\WGwet5E9-:bLJSGs\NW5S<PRQY$PăU"<RY1xM:'n?1,:$Tw?TDA75KNo9_BcP9[D3&g:D$,<L)^TI^8x/>TCH/f.PPVUvQăU"lLP4HfogrfiM)[>ofkuKd7\P<X]Qv9+<O&sW_obn5lAAbR[$f;l0UtQ$W7eUVvfăU"l4vS^^(U'Yz54]Z[<5#uV$FEV;W&<]QLTs)R%\=)Q]Us;=TDIZyt[xK=h2t^?i\ăU"FfE.b-Oz=D:I2bhht?sFCO*/Fxn0.2gNfJmM*b3qi%0:AcJkDm<tg#_r6K#2n?,ăU"?<LQOoESd+><N(15WVymI%pzfjOTWDe7gzGaeY2d\-<??:q9,Bg/,&-m)[tc1CxăU"(:T)pcI*m^sc5fDCkYjgEU.iOWqshl8h>efLHG$^Mw/g/)w>5x]\EJcdq.fG[W;ăU"\If4%up()%9%'%7-%dw%fFY*=WJB&%%%V+%%%1%.%%%l%ftst%kkSzRsyFb:r:TăU"e:5Uh+ExV^SL[U'dA;7m=*s'*:Rj7s?obv/O2dw':k8VaXi^_OjmN.m]dhFvw8aăU"A4Hf#;<^euRumWVR-rcR$Bf0GC3x,_4B5<sI8xF\)h-NjXeiC?'_K%Ao(IF.EzbăU")/wfVZ^FuBQ4:<Z;v/F&NgE&Dn\e6qh?(5hmw3Cb]bVk_B;YI67]dbPMA.%S0d8ăU"<3Du48?'M0GWjl$yd*1uNjIs-ZulAj4l?w)sffpGB*kpRe_tzwTF?(o6v^]aaF(ăU"kivU7-KbQ6H,gBH:dw9cV;Rf(LvkpNq,<8&Jv0R+q,/K%jgfappiL1Jq.3[F<YjăU"ik<b/1p<y^uGrSC%q.%tIr+uvkj5w[PHfMaRZa/cbGDBfs0Nr&wb-?8c\Yr_eLbăU"n5iGDS&4[n[jgOpb#NXhYY#JN(#-3]J=eKGEkdC1Gopbi=QHR=*PH\T<3,3/IbwăU"j+qfdNEaY8G%:]^iRJi9>G?dTOnE2[E,Qh-py+sXp\qT:tbug5g4J/4$39dVhdDăU"bq0]AcH)G$O(,(W)+p=_^Z7.+=/%#QLI07DHFY5C1c%]+[p8ZxVWEH'NN,4n2u%ăU"p()9%%'%-1%)oi4F<:M*J>%%(%M%%%%0%%%%knq(j.ni#Sin)+JCf/';U5kEZLEăU"FKqtowKdSyo]1P+UJV]tR1VRhn^p>TMP>t-WFXfDspKdi50n-x7d:A]qm[sh58IăU"<D0U9dlY2T<Qr?%I?+L>pngW,FT[3*d3QUjFWD+#YO:\RQyH5L1.UhnONc-5t&uăU"%p()9%%'%-.%Eoi:F>IF-qO*%%%%1%%%/%%%%wjf%irjS[uqx&)%:t#Rl<w=NBNăU"on#s7ZO,1(&<eckyWHP=KD7([+.#M:7iTVbdlXW4,ikh.#>,^h^X):1'wFP.HH_ăU">BSHPHG4KRO:;hc-gh4#*%Dvf$<RRC1qTb:pIV&h0['<M=YJXdSOROgo,IJlLr7ăU"mPhg^q\%9-;bQD6uM-%fXLH#W:d,P<g(Q3k<pUkG6eTtrDYZ,:3Nm70U4Gf,#KbăU"5CXE)cN9Mwco6,%e^2_q;E>hDepj;E5PLP6L^nBZJ$xA?'w8gU#9v<UYLb%4NH?ăU"65&zttR<LjKRMim6u_<V45dC*+[PzJfD*3So)=Q=^Ee9oPa7=cqvbbbBbH5&5j+ăU"$J/fVY')ubCn$-*tb^Cmt6ggYToC3Swm7m6dJF'WL'92lttiRJu4ZFdLo1[q(rNăU"_2t&$^%9QGrm_<U5['l4Qj8q6HU;lcT=(8cuD:%ZI3Et(**p,s_TY*JcYSTS+7WăU"[#uxg4XnR5w&2J8=9cgAWls(O->*8Cs5Wda7,$a9Nce3qBUNv?q'(?0P#fdHlpHăU"'.^=/2IPdYLRr]qHQtTJFPNf4z7dMRp_;i':dsMeOdC7^pfLW98$CXl:dD?G6BgăU"e;xfiHSc',EG>Vaa$l??h/,,=#/x5X*Je]Hnh%ObVE:4#4hB*kuFkW*8>4X&I0HăU"ykS'1n/7H[&iUz0S=I^sUq%-.tQAW&/2)pDONDIv<S#.._LSv$;)3PkwK)Y8nm1ăU"a5f01,37WK6)$u#1.\3=+=K+^FmC4^ahKs6#6EP<N7DB.,+Ld:*#<R4rSh+&$6<ăU"2Zn,d'Qb]]7&/A$p:IoGxM#V'P(XQ[.rwYuek'S;1=2SRA6jg<96?Pj+mf,ghZhăU"<u960wwN_ZhQ*I(^4HMXuXBK'$_A[h^rr</+'[eq:EHNP?Pt)bD&,WvMY-&cU?4ăU"[l9pb2[uk).3t9hLS5RBWYh*:G?H\4c4>HZQYawBc584j*S0XrVh]&#?=LF<:K3ăU";WjT=w$Z%VSiNYjeQpUfa?FZJ&Can]hZII;A$L$'Xa..)JL[PS*CLtt\nHd=HJ$ăU"([s1r73_NVWlM&-2KP#)A>(Z#ACn?.k^n.60,W.:.sKwKGO$;ZC_Kfka-Mwh9./ăU"3D1v6[$6jBS[3n8IqNNuGQ4_79SZFU;^SemEl5nM,e(==wl<_3+KX_IJNib^aKaăU"p+V1(=O-,/w9_5smd9=4to8M9*jv5s$wFs;h2]CAF6r2wjaLN)UH*7=vQK0]V&PăU"%*n7iMFy0dn:o\OYO/mXFC#u115yCjf1'k_Ha^YV/%g0Jr$.tb8SB)*P6RCgk^GăU"uj\_u.^\V8>Y)iH*Lrd/BBFG-XP;Xtd;6;W<s%e9n3/YpWAOQIfWfDZ$(3LctN3ăU"$q+M8N[cQqRg+ArW;$^l[iT4>c?Ng$:=n:-N^CI4k%cLS7u'&k1VpaqB,Z0do0răU"qEjWEUN,)<&Fng47(/Ir6D$+qsMuUgr?Yu-A^v/wjKqrSrnw/wtNj0Bs1b*++V$ăU"qQqAg=sq=gS]*'J&Q1GA,M$hGa;G]nSxCspmUq(S<<1Glf<7%7nYy;y5/:Gb.<CăU"V=8*KB1YTjXL7WaoM(hXX%m;TXcgJT=clLS5zIV,a=c7_(n-PJ=jbNCBa$P_oW2ăU"T39b&UaVG#Y<)NTtkd9iN8]H_QOQdVaziTj,xUgi6V0T,^P6UbFFXO*IDI,3]]HăU"4#dbu_fX(f?#1[Wx[uR_Bj:WZ6dhF=43#l1dD^4Hpp#uH(I]hL5xBlK2:v1B'zBăU"uCeO/_?7hxdKPO)gRKfV>jPQNlB_21vrPb,bn/-mk$aGp+TtY0b-Sv.$1Jk7ja4ăU"U$Xovdq7I9+o3h;S(lGO^H5qlYn_Z9n;^R-KVbugNZwrxqX#C<?_jtm<Pb/f>k3ăU"r'u,jT^-_K*2k3,V...*sd5)w%'up&%'9%9%%'%-4%/ii1F9p=(0Z)%%%w1%%%0ăU"%%%%%%%%%&%E%%%%%%%%%h%truf%wwSi%rtup%&'9%%9%'%I-%0e.iF,l)Zdb(7ăU"%%c.%%%1%%%%%%%%%&%%E%%%'-)%%%ljyu%qfsj%Sirt%up&'%9%9%%'%-%)(jiăU"FO4UYe%B/%%'bA%%%1%%%%%%%%%&%E%%%%#-.%%%l%fWkn%qjSi%rtup%&'9%%9ăU"%'%#-%Ef%iFS%?Ctu'7%%f,%%%1%%%%%%%%%&%%E%%%&17%%&%lft%stkk%SirtăU"%up&'%9%9%%'%-%*KdiFGi+oz%4'%%%q'%%%1%%%%%%%%%%%E%.%%W:.%%%l%fWăU"kn%qjSt%goup%&'9%%9%'%7-%\wIfFWI4qwS1.%%XY%%%0%%%%%%%%%&%%E%%%'ăU":<%%%htru%fwwS%zsyu%p&'9%%9%'%%-%o&iiF//K)s,%'%%e%+%%.%%%%%%%%%ăU"&%%E%%(%=I%%%kxj%jpSz%syup%&'9%%9%'%R-%>%#fF0m&'0l(%%%i6%%%1%%%ăU"%%%%%%&%%E%%%&kK%%%ljyu%qfsj%Szsy%up&'%9%9%%'%-%(_(fFmEM7g&I(%%ăU"%W/%%%0%%%%%%%%%&%E%%%%2O#%%w&%gqth%pSzs%yup&%'9%9%%'%-+%dwf%FYăU"*W-JB&%%%V+%%%1%%%%%%%%%&%E[%%%)#R%%%%lfts%tkkS%zsyu%p&'9%%9%'#ăU"%-%)\oiF<S:MJ>#%%%M%%%%0%%%%%%%%%&%%E%%(%rT%%%knq(j.ni#Sin)%up&ăU"'%9%9%%'%-%(EoiFb>IFq'O*%%%%1%%%/%%%%%%%%%&%E%%%%$U%%%wj%firj%SăU"uqx%up*+%%%%%%1%1%'('%%%^[%%%%%ăEND SUBăV2ăCLOSE:IF S=213AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăErika Schulze                  FERN FRACTAL                   100775.2275@CompuServa.Com     09-30-96 (19:42)       PB                     241  15824    FERN.BAS    ' Load/Run under PowerBASIC to extract FERN.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FERN.ZIP",4^6:Z&=11568:?STRING$(50,177);ăU"%up()%9%%%%-%P1mfF2s%5pM+.%%\G%%%-%%%%hf%qhSfRxr^(:r>T]a56<aXDQăU"L+DYD7t)dlYV_;weSZVg__i/7j6%9^u7.z0tmmRn>kcwsJn%6p9JkN=,-M',3g>ăU"i#Z1,6W1.H?la0%FK%G^fSYwAnL]0nK*>i]LLB*H,b*'tmrMN#HV:a26P[>g:oOăU"RL7V%_iD-_D(C_Sq,irI3F%W7UB]#iQ(?uA5%5V3DJcYNL?nbsr+d9ZRK=,5WbXăU">;n*a>AR=d=2[HPLLM$C*DZ?8,[bqD\.sCPX*s/g(6p6Tkm,KC*I/;MK1lYp66LăU"up_ln$tFB4lfu7-KHmKjZ&xK?I>fI8_AP&$+N#gMItgAktnI\NIn_SEarLq'uZ7ăU"qbHB>BOI,NGmBp/kGHmf-c8*HnciSsjj\fk#4/F/<*YJ%MUYE'J7htj.bj;gzTUăU"yr^?+=VK8_\ey38po0ef8\p6<H3L2R2LgrZT&9q'*hM(P$rk4gWu'eV[EI'[UHEăU"^-%q>Fe=0F*$I>df8]JeCBCVl'kUNQDkFck0;aO=n9C][P]1lI<)O36[UgqY*.<ăU"KqVe\JCl,uw$kaIw,<9T40;[f7;h5?BG-Yx]nMrdMSp$ETA2[lXT0\oL>bAqtKJăU"8oL#[tK4ogjCqzV=i?6O)(facBXhJI/KUtuL=uIf3b>k'TWYgX)>jr0ME&B#J6-ăU"m'DEEI3'S6bb;&qaCRhQn]?gTFp=9Dwu+g2xgEnN7eSnqg9<dSr1K^X^2Mh#)U=ăU"y8-mCB*Mv:QT7UY&9>J3[EB,MupagnnCgr5ME.:sa)pl8nWx-gdz(xfRK9fQ$<8ăU"PSEU_Fap_Dr<.=ZH&C#t36Bu4zba9-No3*TcQo80M7X'7<QlPq0]UT?]6G1(;iEăU"RK_&XjAn(-'kJN/ws3,TWT=K^sjRhEq,%3LtTo4CYL8/MLYx'[XT>\O42q&lO7JăU";<4mZ_I;M8jxBo=86Cf/T=:p:*Lz*?c?-W,Ce4xw^jQk09vEkGAI[U$$+aw?Y'1ăU".=)GgMY^Lyi%R8zm.B'MY&pYykprJo%2.4TEVMD4TaFJsNH^MWC:W_20j(4M'[răU"xCt31]gOl[d;[Pf9J$Xf#F5Ye6vSr<l<J1L[v[1EQ.\R)di?fns9>ZCS7dAUd91ăU"BCP%?Y(/c$ShA,FJ'x.;3W+s%kTjO_k=kcJ^=fEMDPv(C(<H4D>C(IQkljD%=gTăU"5-9s-,AMRXH[o-OBIGFXh8eITc1P:J?uZI;7Bob([4FXB_G(/O<:ASl/8A8cSm>ăU"k09w]A[5*S0;u&$e,IeBO?B5yGu*HFE57RAr%mPW9h9r)<<)t)[.ppMnnENK%$=ăU"#R<)tWf9gqnCG8NDSu*-8u^-Wb]N_&h3&vV2]dsUdOQ6B#)q5;B=0+Nzh;(npg'ăU"=W3NIf9*kuJ)o1XZ.kl&3A<naP=6CqWt4er.?#3=bV\+&j3v:c#+#[7d.JaVk#<ăU"PAXk>+p%Q-9V]8ZE?=Z(d-'YFkEn,)[^LN?m+XQ[;cB^%FFyV[]g]*=c5o/<#\BăU"=Nn3+S=0n7F:KO>^xpOWTixUd-V;GobDks)F&OmGfL&cnnof3qVGS%\yjVY5PXcăU"Ji[tY8z=,4;>M&BQ1GbT784STI[mztum58Pkx,0dE_xMxJ\Pu]5;R-ekr[.D*']ăU"lRNjrPtB]s00Hgp[daZXYSCKLc(8l:?yM\(ii=*($^ZdGl1lSXcq._nj7LQYCMhăU"^x3dk_*/IZ)OOD-VD[$[g3\hnN(DM,Dn75VvD#(MW,m]FO:&B3c)xJ]r:xEe$QhăU"F5^tY,T*E.Ku,nL0X(c8PErWX<6Fp)rh#ruqRfp%XHt+v1M$hFrib0r'Zv.N1f_ăU"RH%re*iEm)kC?L'+6;&#wTo+niMQ+fU')'GQ-$i%CjCoVMFvV+f_8\H#bY>#nb<ăU"Od8:%2-IF6gIRT&Qcc,F%faJ0O.szS2'.7n^iVsobXLo\eT8*ro3\L%;cfm.UhtăU"7RpQze8s$:^foSKdaIWcAvs0,)-k<aIT=b?HTfp;M=Gp#jf,78lNn9s(_YGs]f&ăU"N&up%()9%%%%-%%P1fFtv]$(&o&%%'-&%%%-%%%%hfqh%StgoCb_t7$L/=?/nY8ăU"7<\7C=L$HWfhXfPGMbvUuEX%-<(N($5Y*/JoiI(7UnDPm)ZI9a/j)&fcENRCI?AăU"51rX4[IR($gO-Kw$WR.ECcvWOLb/tf$vqu6hl5CT.hQQ15',Vm--%by/'YPa*).ăU"JyNy4Lz%ey5d3q9UODd=NfmA2-sSh$Y]=(\uaFD$<'[Fwbs46YjsqK5Ef]F)%[wăU"0+5fE9NipPO2<PW)q>EMIyah^gR%4#%<243&)u(F_,fl^v<APDk=H.\%BjfDz>DăU"+IFtf((&S7<N[mt)PD9Gv,&qA6zHxfcnIq34E[GCFl>Pkz9[FjFjSR-c7&(]E$lăU"FsHglp7c>pX_bLGr5hQfbtnivK*Y$h+ssZ=r>HtfiU]'UXN:c.a.VOt=DdQm4RrăU"W^6u(E<x*-KY4J^rEnCJK^CdnMIa>=gG1tJknVs<hR952]/,Y\:XvLCRoKIexlQăU"ua^ihJjxak>R6XQ9d\8/A\dg^uri\2%]WjHK:M6y+J--d/40m]\s9f1/Slvj>NrăU"wN%up()%9%%%%-%Q1%fFt.6g*S).%%7-%%%-%%%%kj%wsSy/'yDz:rB\[416:kTăU"x&,fCr5aYrf\8K+hd]nT\q5#6Obub]K7I,Jpmdsnq]87d%J60-R&3[pnP9<nJ%măU")OhAtqFD-_H/d:sk8JF.$)Zr]?gI?Drr^Bki'$hA2U8'l=;_kH\k#mxTX3Tf8s'ăU"pX6pBDTgff]P>iuE$EC\z]iqCj4l7#3;=<9hU\-;Ko_POCi6_h0+Iam8(iH:=0lăU"I.pVh_Cx7+=idGeJj]qjD%7T$<gQ*%RjR3R.C%a4JshKxJcqt>(r3n$'E7%'[5lăU"9+i)qC91EyIpMe_ha\wm=][Z*3q+Qwxp/ZJ9t<:vvtoLV4Tkqp7\p-Mw)oV)'OtăU"Nu(>ZPX$_(w_\kBW%f20e8>P$-94.KGMhZ042Ko8-]-7F92,^HDH<F>^Z-<jl-RăU"R^-WV1*Tk1fKce1-[P*S.hW<)DioGM7/OostJqegllE??MWe33RE6x.cMU+anrYăU"QMBt\&D\*G2A^+q6Y?GMxW.A.T<jhSl$RrcA>S9pe-:*O'n9t8QgZW?7ZF-]p;0ăU"T-)]irk<%jSG+i09B>PO%(vz;7xnbv:CJA6f,RP]ekp$gSskC,bbM*:\_>/[1O6ăU"8h<2_SgI$k5A]1LID.j'^$'ZhkKeci9C5Y)(ljw#$$_flN)9NlxP<-&;BD'j+<răU"ti;UKPWL9_Fh&77AlhTl(=MD320?u\YL)b/*f:LADf+<OG0>X/'xJ_,#:HY8a)TăU"OiLO7=:c3oC7_.ZO0[+aI6r9qc8Ai7,m3VZk[c9xPB9)kt4ZP\HA5.6)h)6_PC_ăU"7nq<gl#7iY7H.I^cCpF%)g6PUGD,P=2tSmO1b3+PT['5Z'%)i8WrUbYM0Na[-uGăU"d%a8Le7EhGbTNsZ3wr:,U4+*uf?G3a&Ty1Pe2f_Go5I19TC<=\KG]zojX7W+#w=ăU"KdL]MBIL+&<7U,fH79p2JjFYEx$A0Nx'd8mf9SUW8_\'==EbuL]SFC<?tdTunUrăU"M7bXDl;i,8#r7^Nu%.xO7G(2sMl.)CCen70fr4N;Jq_P\)J/qn[2u>eA45,S04KăU"lewaZO-/_]Y&0LoEccIJ%WcFnEO='_h%u>-sJc-Nj[RH_M5,Iim.Il[Q)OdJ4iLăU"E-v179YmK0McKu>ILf%5L+.mt\,Z:M3Q:X.0Ip=WQn&&1M/G(6.MHRR92?X3D&qăU"fen2R?[%]0UOaEBg2ugNJ[tV#D&i10FU5c=[LQH$s.dXc'A&jQKpU.,69-N_XB<ăU"JorXVNnEd#5LoVzn4b6jBi:,([\hUNG?WBsXn;]5Y_GrZt[4kBodgBk]RZaw$m2ăU"Ur8WLHX8HsUsJLM/II'K3UKL]auCjfW%cQQ/uNvjHlgD,1#r*C'c.2S2P5&rQYOăU"FRA>Q1okWLa/Udcs8h/T7#xMANf^nZU:GA9U2\+,9$agOpr7+;>.pPn)k;K,&S-ăU"NW1]2^(K\/W>nYU<BW98E%cls<#;Z#8jCSyBS6(q7>l'x'up%()9%%%%-%%Q1fFăU"^NC2u%y+%%%t<%%%/%%%%ukjw%sVSgRfxF'8:x[m+<wQz$uVxO1Uoqjg--5pBF,ăU"S0NEYPQs]G7XVisJc'2zS'ZtdpkEg_.]^s\3OLs*dkogavmubL$Kk'PEP;yd3#găU"I8kR&x#+.aQ;=KeJ3EaXl'#2\GrH/klc%&GKat=NYqt-tkfffWNB&S)e15&Z<J1ăU":8P^roeOFqf-IZ]cqm'?.EjNB5^8,DIClnb?5/)/no3&n#KP82sbRwzxJU-wJ4aăU"=T54VIJ\>nZ3$5Pj?megEsW-o$nt07*S5pi.QKuZleg,]#-D7>b9Z(\+s=]Mxm+ăU"RM/\c[cI#E3$=8bue^\sQO1-[MNp#bGU892Yfs-.p'.kQTGa7(S0Y*mEPQY]&1\ăU"m0qT\BMFU&7d9q=>a3^]SG^uns#Oxa\>cE:Q0tR].hH2vE'8(A,ZZE<90Qj3g1<ăU"W+dxYrxFEsf_lQ?.^='4[wqtijw>8-Z;lCjT5?rm)],3*vz<Y#mwK_nC)&6<UruăU"Q_?<kgj4l;*fYV7IjgI[o.'/p7hnH73(9qUn6U2Vq&0;]^Gm);iKaXw<ggz<1HcăU"&x)13\B,acph*ZZ:X5?pSa0bj((_0\KTrkaU,#FKmr:rMjcVDzaTtE*FY^L^JoOăU"<Q#i$lUo'E2TD=+e%b8_mO&<vXb+Q4u1V]8O.wP#j2%puBJ^EbN^IXwMY(_oQYDăU"2JD3-k]srq29apRSB7sn_JJHvar5+'%w^RF4_ERhL&gn,nLO\P6z;^)4jIrK\d<ăU"d67u0ErHQQINY&'LynG9N8X0Z7Y')>(O-smpgAu;ZgRN-lc.I5EEH%_EGA?S]#)ăU"ca[0i;Y4fAzIzP#W(x*TD%jbLe&k]k$'mWDz2a>kO=iMh,#9--2J#-,zj0&uqR$ăU"vGi$1#F/$M9jc*7L=oac^=JMvW:.GwmarVVIW;tz&_*Dymu.hHPq6b(nirGCWiqăU"E/kSmgYsk.5iCvD_Aw*#4j$bu8&UJp^3pC$Bcn#J?$Cl9hlFW0ld'0;4sSJ9NT$ăU"0-Zfp4ruwB1pfPch=/B(h_A#%;qo_2mwSw$N0PELRp3dH\(-=ZLTnPlPZD0$:z5ăU"dZG/\=rx9(?bZ&2uIF%?%ZO3PYWKzV6>nko&CXcOR/I$Wehs&g0&s.3trh1D0^XăU"()V4yy=P,wy]PruS=j6=Rk^=-oHk&-KSH\I'-W4N<*B0*?Jt5$c;ac>N/cGkKYeăU"+9)^;by,2[:LO.9oG/qqfT$IHgST(i1fe7VB5Uh[7Zig41u_hokaamO8,9L.LygăU"MB8?S[?hixLtr3EO%Ot=AYJb=uDK7f$\1+9)Ru-nsDFmkiurwJ\eI*)'vW5DTc8ăU"-)MoZp]#AW,wJx5&PZOXex':?4,0FzBsi(Db\^pkV%KDE*Q.A.)95o&cRV:)9fCăU"jHeSNAkU8gZe-fAGBA;?Z0lRSq\ra4K%QH+ts#-V>hjCu['1PBAfrq/=w)RZb[=ăU";%NTy)Yd4>bS+*m$6(eJ;'Unbpp_aD%DR\TN:Qk$]ivMJ+OKnCL8a$jR;Bx152AăU"X1Cp-TH0Myd*2;/,;*gor#85:bo[oNKo=UJ>8.COG;aYR/x6Zs$w[<T0YI>Q'-qăU"ps-&Ik#wwNbHYe1fATfZY,EuFjm's>8=7e$sIPsZ9g?+vcoFtZF<po;[;pCwcQTăU"H;F)+ED84+E7+C<bpQiEGae?,')8U,7c;Hm>-&qQj?mXqhXSw<J[o,yiul;oW_4ăU"KZXu1+a;CeV>AvKMjEjM4vv%[_Y/noTpsfh8g&soXD-vJLVsj#(>sWQ>^^FWPEgăU"Q9<#,T,N-9^rb\&]/Q*&GUa_(SBdv_1hVzrr6ZsW(q,s*\V/6jQ#0k/799)kRBCăU"a>YWSc.^:jaW&MjY;B6KFPBN)Dw-9eq0xQ3U_=>4D7_SCp#%j9%nU$e>?3KX$J2ăU"07krhJsYBpT66M\HIR-v'[wuq9NG^U\9DjcG0M^YUs49>Y%qFrqmAQ_ok(8MIovăU"^S..UHrg'ee'QdHciAf0tsoMeD()<>u++.Siei8j.V\A'ZPpEKV8psn=H1XUGhfăU"b0M,WK&Uh(\$xP1gv_yhHNmEAC0?S*9>,rUAM0y'qTup%()9%%%%-%%Q1fFo&mWăU"1&y*%%'h5%%%/%%%%ukjw%sWSgRfx>&;<B[[F5wA5]q4$EK^E\b^&kK2,:r%k:IăU"=9Ue/SFv9K6/m4a*4ko/(mP\&P>#e+Th/0#rd>*%dDbWS,fZFxhA=RyPnOpLxA5ăU"1YWH'$D'esQA9Zr%z5W&$x5ETLfDz%3W(b^n+\FdNDrrrkI'dK[wRo9n/]g3'YqăU"cH3YP#K57C/Er0H*HCI/a#<f$v$PPRS_^cqGsW=O;aFKb33A\l8J1mOKKdT-][0ăU"RemMU6LKj6X9w$PPj/Od=Cr-rxIKL%t*f)]K<snKRGJGS/g;VSE4]h[$Sd_Kn9aăU";E.YjY^TaB_)u*_taor_Rn*L>sLL+F?Trx*E1pu%.PKDSfhT;F;P?[M*40MGJ('ăU"m;/iTbxf]1JOneAJ'C/K2deLWl]vTI#HlTwQpRH_nChNps'xC5C0ZGgty;SZRGKăU"piu/n0[$mjdq)mWY'9?noAyWrBv0SM_51>?6d(OXr0:V6/qfawGT=P74C^p:84aăU"iM]_&Q+$^a.aIexQ5870-5AdiYc0'p0:7Ln)-IJxk#ad#HO8dS3&i,\7,U2F6<băU"Y#n$Rae=qn'>Ux$[Cl/qtK7^(YakOenIH18]B)APFQjaEg,Ne.w6mSC)rtg7>,'ăU"'+clgOtgkG5-hO8He&.w-NhhYOgoBbxnv/mfa6Ikdc\>.3FQPp4Ddoa$ebm.T%XăU"2X1,;=T9t-H6KTUTF(b87QFY&r5)In$HG?IIDg&Lo?i+1X*6uV5h-ej]CJ'Q)v;ăU"4N>Q9Ed_i&FPZVCH9MY)(fTM=orh.+OkETu0:#'/*ctYqFEj)2=A5qQU;M98>Y_ăU"&:5tUB/<Z#.Gl[n#'/53fP?cS5]KEGxQJMo_i:CFEa6]<'M<pEVSRY2nFHW3Ys:ăU"n9SYez:TuZCF&K$DhixUQ#f:^8NTjc#5WS,5L]XNFBc*T(u-F;vm0cJ+>awQ&0zăU".2+9,[5\OV\j^EQ\6s[Rw8&VZh[Tnb'ZEl/cW')XuH1q&h=YcS3UA3uWSM_-l<4ăU"iNBt)$\W/>ZCn1=?,9'^'QzF\d8:*Ql7='EBpz\rf=LiMqpPM';n8m-XT2R>7\DăU"O&ww%uW)eNA\LTV-H_b=:)0Q]\$oo60;)m(bn>j*RR(tQT'L:UkT2Q/*\a#W4ZWăU"_y8M4?x(-]$RP?#?PfW5[sKC#HyO+ut4UJ7Lc,Cte#-:jnFFRoI>=tkpI]/LRp2ăU"sdeA6kRdOVpAO?Au8Z3^yNfaQu'%5*Oc5,k)fqL'DPBOnFB^W0KkcAU+\n2e_W4ăU"od+_'u%y^rw%OwMzOKU'y;.*V+o*;3oJWqDp,0s(&q:pAVEq-'dIHz0c_oQ);L]ăU"-ppnNoAM*bfPO_MX.CTv];U38/yG+&Q(.Qw.RtTq)U**[whhu_^$gl^*].&vs0LăU"\3]H^3VvzkS*xe/if&0kZ#U#ij$e=Z#gR]L8xFG[65laAQ-jC1);[*c0/+b4>D6ăU"TWH?L=.)2e$1ce.>V/V^*<#R2ed5HT##Zdiq;oDtoYBt2'/b&j68NZvp]%X:IT2ăU"xaR183[)V8cYjJ(oN'Gpy(SRt?n+Ga[WH^44%cLZCEGeZh[pLd6S6b9X2LB9-lAăU"I44UJ?\/Hi]n)slYXT[5(Z&UTLop;'^n;]/37S&LU.2NxtEKiz9HH'IVjsffmPfăU"S[HOVpbiK[PlbE,&PG2^>\_o\c=DEu*]M75Ys&7B(.]FqP]GW#wxCo1FR)jy$FiăU"DleGjLpbv^#llmg=e?LeF<6Q0.'C8G)>[J.<lPkRsa*fri0(;7]Cwn\Z=b\NfM0ăU"8?h(yG7K<ash[LQvC(eaRiSkn'NumN6H5AI*Pe,?urTvRwre;$F]cD4s&hueWLcăU"PBI*ukq,<;\9^T%up()%9%%%%-%Q1IfFL^?v%(,%%%_D%%%/%%%%vk%jwsV%SgfăU"x3N(<x]\]7wVKxCN'anBIL&V\2tgZ^+7z&Eq/9XPo?;EWl3>eX0r#EBC?Ye(du.ăU"]PYX%D]yS52QeQUvCzQ4N9X5:l9Y_ggU6$8SN^)F=qbV7TsmC+04>W?-4-%PwrMăU"<*,x&t)*q5ZWusl31+MRZmXU^r(5<T^V+6Hh)HSL74M[(PY9jPW025leK5;FHwgăU"SP85xDH/['.u618mZ#H2-2\3B&jG<qfgFp_C\lYnz8P:VSXhU.P-qCgV;G#4g37ăU"XvN.^=?ku+m5Q.JF(.7Qg&7sFE_NSV9)^uV,=KA]LN\<N5hKFUb>(tenyy0sIO;ăU"n1N'PrMd(dyH;Od+nj+nSZ8=Nk0(AVW#.*Q'b#:w(/0Pq4PJIV>tRBMufUwq3/<ăU"Jy>,#;]5ET5YY^Og(#Ungh5)bk>:r$q8tJQPj%17Y7nBgS*qo4Ij7k/dDjeyA:eăU"(S&p^(efxK,hdZ48DU/0&:Olnf/qyxeO[yPqm_r1:o+;AD([w.-Q08U-Tn.<1mPăU"bUapJ'[45=**KlJ0M9]vZ83CSuQ5_[-:sKa]Uf)'>.:9KcN)(4h35G44(UT/aRdăU"J.rl5IfIUI#e&b7dlsljrQ&7)E\I]4[[)te'_Qs=iInsj25N=bjjndU>,&2m=lQăU"O90emwnxlsR[Lr%nX9452Yfw*zEb6T1m=>?bEjhy&FGZhD%.bc>mlbJs)s&hA&răU":UQ7xPEtdZVGK4b#7/;Mo2m$%Dn0*T,IInvy,i+$]IYKKmkKR[1F#kaH#9Wi84iăU"<fY$*>\G>p$$Ful+kGduIXTdN3%DlWg](7sg.Ab>JHd#l>aMD:%nI6tgHmsncGtăU"xCVNjIWqA/m:e\]4YW(el+F;JQyVD\;'*f'XQ*3O0$+chdU.7S+P7'Pi^%0at%%ăU"IxbfMoXyw=f)[.(g5/Y>u'?xpYuLNNN/C#,,orDo,$]SRSnmWig9==9&AMXucc*ăU"6buR>3Zr-a5dP;<Z'^0p10V0Qup1J^lX1J*A=iD,p/Y2%aua17>Waas+9q$^V%YăU"Wtai=7WH8W,J86kA3n$=n8%^=SCjn8y/T7k5cw,c)c4Ya.Kug3(H5rK%HepIBUTăU"r%2FlWH[kscpYaHdE9BH/QU1n=(f5GBq_=]n0LPG1PQX^,lVsqH.Qz42&j?'k0YăU"1eR%4kd:[jbW^8d<DPz:7cWO<&CHRNE,=hT;4E=eut-n5ziP$D9y:Cuo\Vz&GYOăU"v6EB%$&<<I6z8o'7**gU-Tdf#yE-)_OX^1j+KA*fKq)lawDO.KewZe/)sx:tyOQăU"unBKM:NZ,\uXT348hHcwcdkRdnQSm91Vi2IJWT'7LCC/JKm(xl,g=A%mY;%5c>RăU"a?.G]snVd2Sv0krthR6Cucwap8apJKO4z9sqGzDxMOzM-ZT%N-t&dbF>W%+u>EeăU"Jp%)z];%p'6Riz^iRYbA&ein9EevvoGy(7L#K'U0;q(w7rMbjn&:ZB*U'[qE?)EăU"K[/A4>)W9Ns'lZ/0o9>Q$%)pmlRn-6*AO0iWiE[z^i/iJwhcjaN=>k-p7.Nc[rmăU"3H^AN4]4f==ii+iX1.m24Jw;88b/ZeWZgDbf.KUlqQejB6Sx)1Ntlw^_Yw_5YU;ăU"]DEnc4J*0OsJ3A]6+R%[$+'25MO*O1PhY[HFGW5gBT%vT(h;v*F/%gvnmn?+fVtăU"IR[.andg)sc+5J?'9j3x8;RkWxo?_$^&\5Bfv8GL8=x+BYT,GaS?+Pi_,aXjLv<ăU"j:Tbq2es$QpVCd.uh<dR#<]:>krTz:]E)h<Y.J7ja-\e\Gy)<hU.PI>S+%8ON?căU")Pe>l\+]eie625=l/DTTy<d;E3:R(HDIu&RRVNnN'jS#q4(;nF7[I\4EF4.-yxPăU"$p,WR[HJ2S-g^gG$mc\7hQ%VH9AfK.]d'DXw9vwk7QqZ_;o2vk?>B1(uVc5cBiCăU"V=[3;COs\]k&o$eXF)SADmPzFhRj$?39*XVs_?<jV/Y+MX6SfY<KVu?1;eoW]S5ăU"i4^J7yW_S#%J9Jm9F>F^vOr*fCSa/n/GcPW#RGL_WVRJG[w%M^[q^h0HOJDCWf?ăU"GO78>#LOTu\_Wjf=Y^f].29^y5Ngym#(-Ad;ZIP,i[zr3>rPI[fKe[D&Hw^;k]^ăU"'=_brdcSxRcjaK#?Js'#:+6ihPz:r]FV,1Ox]$hhAw#TY^ycHU&kIbj+#QqPK%făU"b(3tf'S%UusRR_'ge.nkzfC,u._mXR:']e1rfn:HniKpTfh\oepO;lcHZ1^dKJlăU"U'R04N>U4Tdpq7&jZuKV:5:i<Un9Zo8.Yi*';tTY8AB^RWiCE;2s6W7Z-:]Eq<săU"^A0KRd3EAl<)?[)i:O1eG0l$t1sQ/)C/uAxoCE%uCE?Smf8:YsHCRIi\DSErbp?ăU">T:w3KSTm4?/xx4iY=9Gukw/u6iHiqXTeUMA=WF?d)Pn40cu5:%v+07SPQPwj2=ăU".<OH&)=7PKL]NYZFy8(6)djVa.585Q19Z\ltflZASZoq4l8eA&9ALsBK,X-KVU-ăU"ax%u%p()9%%%%-%%Q1fIF07%*I\/%(%'L%%%/%%%%vkj%wsWS[gfxFk)d>TR]7xăU"K+&kd5<:t/8SuPRH4]bH&ILv)2WlQ\E9pue,2)q1FB+ImCOHh.N[AcIJneBp[W>ăU"l3:eX96_Q#Z?5XYE.B,DTD_?abdJ;IqeVNA8Wi5X6^viKUnGMM:FvC_9mXR<iHwăU"thlPlZ>08bqOX05u8JTWl>2HM%2no6njumn>IMAU^G8o_I>G$V)M_YEi\_5aWfzăU"0<D;+,R.$ii[d?bo\V%\AU>Qc#N/1NXW'wUJQ/WH]abkJq+^=:;+$birHn;w,bPăU"jFs;,ypf=Tg\fb_)Gx[1sQWG4\owyVzSCDTvHi7?54l48MZ?XNXvx/kTKG?qfigăU"gdePrHitwV7$nVtGE$u943.swk9?mC5Qj5c5e(2#eWtYq#.YQXZ\?TJt6FGHB<găU"D9:K]igCCk(Nb(XKZ&[06?hpG/B:Ao[6:892QJSp$T>c/dQZ5<9Q_Pc/$sT*p6(ăU"QCXX=48.aHe#TO'JANoZds8JBa(IXw0;gzT#(A0u)k6UJ]r,sOQ/YylA?Cq6RxVăU"DO]Jy5hEgS%q3,)'hBg0f%Lm\mthq-PqK1sk-.f\tYB[ocY.xTW-N\k1.R60Jk9ăU">F[t4Z=fIk\+_k)TpNlbi?gU>j;q]<ZYU]Akr^l]50wJd58-&0R][x)'RNnW+ZVăU"lQdww^RQQwL]-tVP<(G-_]Cs;UGW&m]-qa8cu'Vf9ThNuCWG?42$Zrs$=H-f:jQăU"S)c=ltu1/Bk<ngSMpDXc.)LE7elv-YJbc(<?*LH1BS]u\%l*NF*6EgbZ2I^'G&&ăU"_T#<l9B8d'9%Nw&]cG^/2W4(8^Zsp*+0hv^hS5g]NcDvRqL.6GT\9g-kO6OXXdJăU"eQRdAvY]]+7g#3nlvf^D2D1\hb.K/tOiIqSI9NbssE%.inG.FKp=U#-mm4Mt4meăU"T$qHOf?7YPqRC+TCGQtcQcy_uc^1\oK.s]o^<6$ecIb9*F_#lUQ\<_IXuJ-)#o/ăU"O1EW6q&#My&ZC-^K>yCmRn*s?_WP4HX1Egq73fc3T3)+\*K4:b)^?,d0i0_l<gWăU"FzDue_5Fk&rbDSvC?#E;vbZY':JFgp]=a=>9sX#;D*$GjKN\1=.>rlL:3%/%Mt.ăU"BUX;6B(eH1s8Zxt'jQjnImGih)I*Ugq*W[S,6*orOacb(iA9D.nsLZ\4[L]$LS.ăU"vcPxWRZ$KRui.b8a7&&MmknyIAn%[_^NR^I,;?;h\iEhnVur'8[\p)6s.GD3i)LăU"MUbmMl1z*[vq;Yuh\])<t6&;sW*T_f6YM&<)oQG1zrfQM;zmV6U*Htrt)F?[c[LăU":+Zqb0NwcJ6S-S^XQ.-c,(pgXD^\mh11m7YoGWw>u5<FJ;+oW/1HIE4iL+(zQ*BăU"*uQH#]&upVvDD2#ITPT?dGTH;A4YL'UQWip8B)%VBPd\$rw>_&S<BWpf'-o43o3ăU"8YXjaUZa]IY3et/SYf=1l^uUvL$\yR;x\&X/_'prbq+Qd:q=BA0Vb+HLRx:0h.^ăU"%7TH2jhf9)rHM]iYoszj%o*+6:9KHYQ3MPq#oiV^oj<SgczKGKpqh#TV^%?G_IJăU"[R8cazWFgR;sdaZ,6\;ixf]q:)*f*=lU/s7K'XB^IWpQocai]5qpi+&+xxE_8rKăU"PD'UQ;r09#<.toXL2V*1]-c-[hr&EtbEk=d,60TzFTkBZ+6>d#3daj-'j-Sv1UpăU"cbdPZFVMsD$n1DSz,V7B7_s<9jN1a7XdY/rv_jL2UQ817v[il%MU.iY#Woj])UNăU"n8(='%.6a+1o'Y9Ruq;I#BwKoD%61)ueC%?tW\7N,lMWn4j=xX2*<3db400DbF+ăU">*,g73I)#Q;'#.bVd8hJ1-7vLW7t8jG^2:NyU&tymb6NlEhOo]f;r?Wt+OnY;[WăU"q7vp2%KR:&nFY8ie7m9n=4[a_Qbim].\bAg4rRr20Q-(X[J6HbS[9FjHWko4mltăU"*prfXZ;L>%_jaR$m>wcijkVs7\aw05?Xbw3r,-tv5+*%Y4&7*I1rwqa_rjz2TlbăU"k=0k^P<pky0oQ6'SY3TePUT+1ex2Zq5U.u7Eh5oP]n=MuP<%_^PZ&e%>)64S/C-ăEND SUBăSUB V2ăU"ro4e'=UjOXfZp9cMqis3Edb9dEagn]h*rZo^_,iTlI>KNjpTg\'4y:BJ;OT1J&lăU"Ln)G-'>.]DR*er\%\1uWHt<_(RQ9)ENuH_&24S9ba:Uj*#dYHuMYO97q+]WGvmLăU"Xe;uSI3_qbvMKQ)k&c8*u&7yOGNJkDz:_&646$#iV9$.b#PDUPr&+*#T%4ltvJ<ăU"It$.F3*c]l=[fnA9K0P1#)('ROC2q71oOk(su003WHWMz%q[CB-0N5(A,z=OvgyăU";%2eW5qZnx4;F-YN9sR2e3YVY$'W#OeKg%J[+G+BU[g:y*LY%U:jwM[Y)6Opb%/ăU"_z4v;tPST?id6e&Q+VljAVF/o]CLPh8Tu2g%.omohucBY&26?_Ev:ii[&%y&Q*JăU"A\Ve6-wQJk\%pG*pG%DH3,huFDtPSO,\Co]I9,h4$tn&h#21lEJ:uB0HviVl:$#ăU"+b^n3rcZh;OTKM;.FW27:=9Lg;zNrWm?tD']Y0hdSAeGKB<Y?aoCoqaW.:iZ.%VăU"l2krqrZ4oQoXw^(cDhPftIgbfdM*wX^U+FG?#JDJ*d1w%i1f*PQ8^#\0#6-O)qoăU"e8quaZvnJ*jFY[-on]Z>L[B(5w,\Yk:8I>?[LgerT]bRI^5_Z3%?1/P;p<de/^GăU"ifb2)s_]0/E]'3<](#/0'GGjlgxc,#DqZtGA?(tt1:dVAhz<7JeYEr?4M#7Q+C_ăU"=v0R8hsq/hKNhcmumH^<'tA#QHz/K6LR=3gC.o%ZHCj9MX;WYMMS*<WHS3*1u:=ăU"vNl0.EQ^9eO[^=m6kDMq0#3n#8_yK0*eUf=qN&PI2QKTZwu-0UlAEzZ?LUl5_a(ăU"OB1yS;OhqGaHwehDIhCpt<90ct.Cv,_*Gr/9WsK3]^q5p;n*;wHZSVrLS?bsQu3ăU"uboEZydARu,<Nc5v]]qzOo'dOV4=p*qWWFL=cpo6Lc?V$ffhi+dOVUB6^]](IykăU"'I/cg\nxWv+#+OeW*lE9$d(z\_/J<$Y%vdTWp,9<4i+fW0r:[XOXnP1J3I^GXd7ăU"><#5JX%Q+D0Z)zlx^#]tXu2][8MmtZc2URCFPnjOlwmAX:fk0?yYa;$-_ONr;scăU"0(>FLOIZ1>cF?OX:T]^I\q=*<._sdq>xsOu5_513*cJE1y3Q;o]%orNrq6cpgCuăU"PlbXkJ,NO-5CnsR-6DJR#jZ/Voj3o3EGFw=[je'AOi[2[(J_IGKcqFfF.^AH,ftăU"R[7Nn>jJsD7ejN//s,B5QHfDqYAALh6>w#&a0&5xi(l?T4w;-8)KS-5HT%9\1FGăU"X;AEE,eJ9r^mUif2_IWibBmgdIai\.r1^R]i8S(,bbXVbhilKxPN/bZb?DLsV4?ăU"dol:v>Gl8>mRp8lGvbD>m0;:qx&%up&'%9%9%%%%-%%P1fF-2s5p%M+%%&\G%%%ăU"-%%%%%%%%%&%E%%%%%%%%%hf%qhSf%xrup%&'9%%9%%%%-%P1dfFv]6$(o&7%%-ăU"&%%%-%%%%%%%%%&%%E%%%%s+%%%hfqh%Stgo%up&'%9%9%%%%-%%Q1fFmt.g*&SăU")%%&7-%%%-%%%%%%%%%&%E%%%%9-%%%kj%wsSy&'yup%&'9%%9%%%%-%Q1#fFNCăU"+2uy+%%%t<%%%/%%%%%%%%%&%%E%%%'71%%%ukjw%sVSg%fxup%&'9%%9%%%%-%ăU"Q17fF&m6W1y*7%%h5%%%/%%%%%%%%%&%%E%%%%_8%%%ukjw%sWSg%fxup%&'9%%ăU"9%%%%-%Q1IfFL^?v%(,%%%_D%%%/%%%%%%%%%&%%E%%%%1>%%%vkjw%sVSg%fxuăU"p%&'9%%9%%%%-%Q1#fF075%I\/.%%'L%%%/%%%%%%%%%&%%E%%%'\E%%%vkjw%săU"WSg%fxup%*+%%%%%,%.,%Q&.%%gP%%%%%ăEND SUBăV2ăCLOSE:IF S=45AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDave Shea                      FALLING LEAVES SIMULATION      FidoNet QUIK_BAS Echo          09-29-96 (17:52)       QB, QBasic, PDS        66   4283     LEAVES.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"LEAVES.ZIP",4^6:Z&=2933:?STRING$(50,177);ăU"%up()%9%%%I-%HR7bFwh-41['[%%,s%%%/%%%%qj(f%jx(S%lfZfPZyB[U5OiJ%ăU"z&Q&h?.MLnB0)0bK>0&:SPZ1)pkSN3lv:D8MduV('d_MF%9u8onYg$RneuZb87săU"XqBm>J0Xfu80snfp&.^?cnTbDLN];AAb^_b<MDn?Tpdp?:7_onn3f-2d+L>fnN.ăU"m8ZJXDbLNj'Q7]9R*3#ak-8<FT?ns&ttnT],g:vzoTS1OIZ0;J+W8s?Xo0X$S[1ăU"CS=l-X%mult>x^\kdpbntt8atp$brp%8ZOcYz+VRM4v.Dsvr]'L,+V\U,M*tMhNăU"j]M+biLxl/Da:MrOF^ZMZ*]t2>w3AZ2c+<us\G$aSF_^tsf8nbhBjK/W[CN-kj:ăU")he%]idbfM]jPE_+jQ:<TgQoTYMtM8qxtUl$wtBxbpNbMbMb>n#h=(7CZlc0Js_ăU"#i[28mAA[m?Tsfit\tY2'Btt.x$<JEP'k2TC<v1ZBp#'2D$:QQ2So=S+SJ>YikKăU"wuXsm2Irc*#r39(F5/&FP=AFnp29kG$tB'FY]Zgqt\<jd8k.uN<rrBx2ZxmtCo8ăU"j80?sFp&k.^inoTbv51Qj+t^33#Ft&vovf_w?'Q2KvtPl/a:^Sr^^qZM*]rt2'3ăU"KAZf+\<u\'?Pa0QVH8O>>LsUKGn&],l.P5)HO4:]-_sJZ4s5l^WP5i?pFuv/;qnăU"XT-w8&%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%R%%in'ăU"q0up%()9%%%%-%*]]bF4,<Yl'c(%%&>6%%%/%%%#qjf%%jxSgIfxd';,>[]^9LlăU"[1d+Di=*T-Ge.9qg#m9gX^i29+<c5WWjxSV^W'%LEsYvpdKd]X,Xce7oZQ$WBhKăU">]f5WR9(L6;5(pAvYs=6E\jba_U69EAAT08j_r9L^4t67>_Lrp#OfiEbJ1;*<DLăU"?0P83[,sZi<MP(3d'Vwkqgi#Mpau_*M^HTiM&wHThi&KE?DM5quFDM54qFzW[vPăU"6.%?vP7$pyi&=qMciT&uUz+9.wvSz:.1k#()MTCj&-]M/k&>1C6R>NuLYCELh]uăU"xS79GnY3zYOX6MaXF>WHnZ4D.m9;B;v?oyigE&xGd4X'K)1aC$v&3Lg2K#4CBiMăU"X(DA+F:<$i<iPPa85afr(nFd0TnNB1VE6<H/dAa.so,V#TKJiS9h2$tF75&(OTwăU"$hES5P/X9>/qGS4mYOm#&9e=cdjJWjTm87_A-QJpxpKHN$p^jTpE>_uB]TVXa(MăU"gbf6=nG<$IAFl3+74StC_fEln1c?J6=-QpPd]=x)rPbRZ$)Ql7j/tDola3Q##h:ăU"3IGY/\cl[WsWpqi19=n6>ZMDPbK;Z:k'aLv;PimL.c:,-6NLZLPbhMZ:s7'Lv;-ăU"Pm*sosR'b.,HxDg[j*LR<]bVlC*oa:0kmh$^sumR*sspqAGITdLtN(%bbGte:SnăU"I#1I0'o,IFt8t(X,[A#g7J[x'>_W.qkWGUZP<Qj(a;GiGd=ska(LAs%Hc7sb_7săU"YQ8F2wiR=fJ]u(Y(9r.Cjbn-J]wY'R9rc^jbvJB]yY(.:r-jDb(v#q:Dpd;6o>.ăU"Fmw$.0G<D>^a^P1E]UF&[5<n6s>C?tuFfIfEI4ved(Fbp7Xsp,7)(1%qf28ppVNăU"aPcatcc\]L7&t,WfE>(6n3lc<rGFTkHGR_]tKh/%=F3#Yk[k-,;r&?.tvW4)r?FăU"&H6;[NnFigOQr*8m7dD+;4]N'_p'>YK,03n&4qC.#CK-'ZX9I[(j.;O,FjchkCPăU"p&zQlS.i^/A3CX])]B=j;Qt-S64FZx7EwvJK.0.nI>]pC$exw'mnyUnCXg;Iz-;ăU"MP07.h(/;Z-rL^zgj(2gx&;17U-V+x(QI4161;B6/syn3;6CXq6+_+UmOXcnCg;ăU"rIz%ged9H(KHZF+8LKJap&nRp>P>74;IJE;Z4=9+pA0/i2cPhB50/G(F+_q0,=găU"J\UW+g?Hk<%1[cs;mr-NN2EFvSNDGHRN$7Ayun.6:<:W(BdFTYkQ^<?Z]WdHYkOăU"aZ0iB]U>^#A=0QC8.3V9d:XaY]qs%O;+1;2,L^->%srD%up()%9%%%I-%PRmbFvăU"O(tdH)7%%]6%%%-%%%%kf%qqSudfq,Q2:]sUm1)YxaPfBsO-]lkix3Z\PA2'8fIăU"1.lE)ZYP]rbdw?uvlPcpH_)))LZcq<F.=tvvpdu3nt4j2RK7ud3vkt<2vot<2vjăU"P<2LH]u%Q'l=G'(o*XOXus_4MMANjC:<wBmT:[ljr9*^9>^&7jW?^&)2\TZj/3BăU"ESsKoR[n1w,L6c:)fhlZXvQ.2g'MmdZXgJiZBik:O>?]V84dSK>Fl\Z1PQJwi+săU"qCx*T-?*/-vv)vO&WQ*+v)XS,Tb,qM'SMRV8jI=bif5C+R%d)^DBMM.pVw3_-Y&ăU"SBiw13d5]oI5Sr2'X3DH_$)r2%OD'JlMR(pbr:7IdAw)t21UXOC.n)[mdG%TC=KăU"hW;YiAo2,YQ%=%OXp27NN\3SjN:Im,6[&<Y+bGl0fXhC<9Wh\HbEAdCZhe8nCV)ăU"pZv%E=O=du)xHFFsr]O5qIYp.mW#m7/3eGcJ:Vj_*F;g3<,PeL$8[5Tr\K]&ZR'ăU"5WHN*dQ\kjkC610ZbFjgR4N(cMJWX*]EE3$D9c+4U?C+9WXe;[t_WnQYB>$g#5'ăU"j_yK/J/(G60_bn5o(Bi?u/ua=n1&d5Tb_O0\F4cesCF7VYR8n](4q8EXZQn/Ei?ăU"T%<^Ncg<dV[7xl2xPkDAwj)EPFA06U#/Gf&+Du$gh+^2eu0)-]F5Ag87CO2./TDăU"M0%I'_y\5Q':tEj3Ux)rmPXCwpQsagQ^jm+BE37n2#z7OchOHNEUw(.HPrAakT<ăU"OIr+.TS9;]Rm6.,NSH\QdUc9g'QXL7My&yHLRRin.rN*Km2F(7oHImQJf5Ecr*QăU"5e#0y_:34^)4B,G:54jKVHh_4.8^9V;+Qe$f1Ak0Rplb-T5Mp#Sy%d;cg+cULgLăU"k<f9G--E[4AMEn+Dgev?6IEp4#-?[Ppe^CtS5sn1-H^[D,aaX(zTaT/jU$:\xXPăU"K)/%Ic[l<AUb=^Di(,8&#.Xz4d,KC1N4NWir\g5d,$Ff%h*Mupc*O.=3T5jS3b8ăU"9$RK?8nf)B4hKO*^uk_*Rg2IL6/Jp&\Y>^C59(X=rMVb]Hqj4yGYi.M#X5[37&MăU"9#dW.=;&gxV<Q-2nYYx;)YCk<RWwu,l_BG6>Ts%9/NtH[N>.F;bM5R?GT&J2j-:ăU"7ita'M5.q5cQ?Kl;fDUnlS%R*Q'[OS$>H4+>AW,qtu\fH'blQV>,AqPZaGp-mU-ăU"K^j8OY)^_MluL80ZR)M%/7_g<weQCGp_ySQ5\%T]u*]W71vTJ<=^SSh0_o/#pXTăU",[uyT-\#AFrLGQ;u+Q^pj<Azhz<AJerWAba,ZAlcR)($WPNK1%s;GE<dsyi[AunăU"ju0t-7h4(z-#&KjNm&rd_pT_oplv%,up&%'9%9%%%%-1%HRbaFwh4'1['%7%,s%ăU"%%/%%%%%%%%%%%E%%%%%%%%%q.jf%j.xS%l%fup&%'9%9%%%%-4%]]bRF,<Y+lcăU"(%(%>6%%%/%%%%%%%%%&%E#%%%-%'%%q.jf%j%xSgf%xup&%'9%9%%%%-1%PRb=ăU"FvOt&dH)%+%]6%%%-%%%%%%%%%&%E#%%%?%+%%k%fqqS%ufqu%p*+%%%%%(#%(%ăU"u[%%%2%/%%%%%ăEND SUBăCLOSE:IF S=207AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăErika Schulze/Gunther Ilzig    TGA (UN/COMPRESS) VIEWER       100775.2275@CompuServe.Com     10-17-96 (17:32)       QB, QBasic, PDS, PB    409  27077    TGAVIEW.BAS ' To extract under PowerBASIC, remove the DIM from DIM SHAREDăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TGA.ZIP",4^6:Z&=20018:?STRING$(50,177);ăU"%up()%9%%%d-%X17vFPx%B(h5.%%3x%%%,%%%%yl%fSfxOrN+<,BT[7uwEE]sdYăU"L.Lr3VaD,\P\W'2#<bi2pUN*l:6F_r%a2oSU'my%-^utn#>I#fYapJ*g>Aknq$*ăU"91&QVmL:QLvCGCLW[q7/K7&\/WWxiShOChai1MqjRB-7GGrGY^;4wI:YID<MF64ăU"md86\F1HXAS-I(znh#EIn$w<uq/amqq?bYb^;d.'*t5+rqYaYefrc.\ZrN[_c\[ăU"O>+4U<;oKGtze+udWJa53Gca(HmxM7L$:6+M4'H;8.yp1,xa939eGHHTt'HiY8JăU"-D$0fhsSpcJ=SIZDZC5&mB^FOF<sm=-(Ay\upk>hr2_m8UIYA.S49$HOCHq76ECăU"Hg+)[^oKg9$7svvA)K;-v8W>P'5YyQs>Qs<7kJAFWmLyCRZ,aa>p6m5o*Svq:gNăU"8K#M)IL?jSaq$SPxaeZg1damqV=E78P'XeTB)X/A)ivEF#>:&#^R-QiO/'YJ(zqăU"y,hr'ZuTiQk%s>wXG1r-9][Q87D5jp&EC#p'sKZPT5Zln[]k3*7kPs'C/Asqy,]ăU"YvT/bHo)sY?(onFzM'LclpIE2ol+aef?D^TrMsGO85X[UoP;/=/>MFk$<&DV*uHăU"KH;ty6Au$Q&-4dH[YfUS.iooJ?Bm#D<01?5Qa#njm)/;wGP/G?7vOFm'Q2Rx[]NăU"-SBc'WnCI$z>byGD5a,r5^^gpfx=<-n*.ysZNm<yF_XHva)oUF>J#<g;)4e$GnHăU"$^AsnFs_52IJ*:(kgF_D.?N8BFWu:^Zo<U4F3m6(fAS-'E9o)&4x.I:Om2Up)p&ăU"?^=CuD%*V91:LVaHH8N]l\1j?eex>d'Y#HT-%*au*=0:LMo#;2^#Qo;?a$$\N\,ăU"tSuolqO0HMXoLq*3+3Td>J[*?hAnnY3wb.JxfFr+yQ,KK<\X:A4'uOfQ^uhc=FRăU"X(ME6<J'V\Gp'3m*n]t%A5$K'#4J9s.qjRcJcw%XX&jlZ%PlJRtI#NT'-=rIewTăU"ckNKPf=G4Rpe7z&5A#r/Qu#iO\B=n:LTbzs&mLX47P^*m/5,gbfq&>X'TNAAP(qăU"uHqfH[kA-EB(6$Vyh-OcpIsnWXzw?Pqb:sa+mb4Fx=Vd58A+M_PWAvt$JH6Sy/5ăU"S(K=fV*cp8i2eT)>ITTP[*XiF[HvB*nDFF,3TQp6oWLhS0SSb((W>z%Gi&(dq3?ăU"?9zDPVLmo(W+g.?(P%ki-ok_Tdx1cDc$bN1aZmL6JG;]g)vJ2#2t5eez>?X,t4măU"Ci>*ej#SZW'3I,s.mI92KhbYzCh>r%&u\yI*4xBvhBeptQ(vxl66G)Uh0*p*[*GăU",//O6=m)*Q4JYXeZtI,'y/[b7>;T94)+3la8PAB939X0T/'$W:;KYoRD6E+ag>măU",bqcQ/VGm=p+d?%U)sY2Pl&vZTqLe8NfQyZF/hW(J?1).e47GXXE+<4q8?>WdYOăU"\Z18lNG^n-=*%5mXDVZ'0&T]p$[>zAZ##srT(SJt<bUn1,g(EMfe6Hx-+:23bBpăU"3Vp1I>\Vi=Q[*0O%5')$(Zc[W^W7M47Mg[LPZ.(R'h=)gQpUR*$iz7ndDiUT*'LăU"<pIIX<Quf.2q)mWCqiy'9qzLA>hwA=kPDml6Y#cvCj#&%-Pt\<iAr-GMT:u4besăU"GGSxs$/Y8Q*x^=[(i,CgxVf$wp5.Q/<)-xBmHfMWW?V[^In<^K*g**fSF.oU.9#ăU"i>KltOSCYea=y1jrm]Aqiyf3:L;S9#IPx2,eRm%I)Eyn6't[Q2d>z^MmR$$r(CbăU"%*4E1iijo9<ZHI+4u2B+Is%($S,f,OSVB1Mcko=YjQj$7k#]N[g^:_bCr\GOMnRăU"]Ld9/S3vHvN;4*>,xY1FA12M,ktz]heOU2GeZqP*\Ms8+x;j5.-jumKRbPW+/S_ăU"XnPD]4k%s]jn.2wAJS_Je0<'/$eu7=_H/MKSt8NC)8u,%fNsJVntuUVB\HLI&y9ăU"1k4]&y?iCe-)[cX/jQ*[=SNSzy-RsrkLghMRY(C\[>=Xv1*>wH?Ve?v)m;WzZ=făU"Yqqw#nXMGcvg9FACX#khR=rAjy\H7djQzL[MW)/10UD?djnhhiIKb9T97QpErevăU"3fQlc^Y+E*Xc]TvvqCM6&Fv=]aJ4GGx[MH7f)AD=j8nEcp5\\F7nn1&fC7=\o>>ăU"$ukWWMPmThLic8k)hLS;*0I&RERW.%Y+O)-DQ::ijO>Ij5m(L.#8R?A#1I#Tjo)ăU"46'0=6YCWy>cbr1+9f4527)]KaZK(SD9l-5/_fjj;sV/Oq)?g)(MNyuE\sV]oH)ăU"4ue57IE::/P^E6p>$GWU5#/V-Re7HMT>Of$v>k$KPU']3Bh$ufo=7<ia>SCp7I#ăU"+Fkp#UxbcJ_9faZqsNLCzV:F_7WYT::<L9JA)CjTp*wFmft<l.3C,#IbZP,QY(\ăU"mbi9Si1<Q.b3ecPw(^r/>=AU>HnKIqf:zATg<4.E/a%bI=IHd]<_AK6NhPn[oCIăU"\'_89y,5E^_1/+/iL1GVX0h?7pvv+yiqK(uKo9ic:J:F)4jS,ZWe#)Vr.SoWAd#ăU";YjKKe5zfHLm9kXHc?[7<UAH:hgaD<SJiF0<Ip$';iM0BBf.YNM)uisf*+CI/.HăU"*'a#LUhNYr'R?>DLFbIhfL<RVS*107/fA_yAyq2XGW,,ouw#Ot,HN%0S32uDO+YăU"Crg;8:)f+<F)t/(Wtw6n0Y)g-$l%r4S97Y(A>8+cx3fLX0fWF#K#MhfQ2zFs%buăU"Y-c#E)spd1W:0b7XO[-SZ>mVpWtW$1IJLOIE'xS?L6N4o2Z98?un(w%5hAJN1b?ăU"g^*JzZ'7f'dao;]Q7B7jcJis</'5fUCBd\][Up3:'*p*:BVuG,S7IuE^*/&My6[ăU"POpnF2v7-ZbPsl8/;,IZ-[rlDi2iPp9oeWQ-e1lD#Q$4sPuJvMtCow[s/NJubM5ăU"bVivj=&]b)QK%nA%lufO$uskx>D\-A,<tp0_m\c>R,D)bW2ZUo\u6>WWTZ;1%%măU":i&+Brq;Z+pYht*/'9)<p/aD\/CaJD1Psr>VnsPn.QfbrUM*=PN$18-,rq;/Zp<ăU"j?t+[Zjfb[dVR:fBK<s[Hr)8>Ue6hn2n,B\2S<GLImy#M&,lj_Qc)&fVTW>8fjgăU"Do/.H',uqSp&(<9o7I=oYmfuq/pN?b]$f6om5HkIPg:2a:NDUh=TJDe$JY$VEGCăU"hx__9+wiw)Ajvlx0GwReVjnI.tNsp:bx7bI8l$1IBLhBbo9jZ?aC;,QhS_/r]<HăU"M;.p*3ZI0E5DBL9=9H-uh63D_A1gR96*=CWNM>VDJ0DjC6\*,lG?r7\.?Bn;f.măU"T,H>mmUrtNa#&OGJPS21huQ52Uu'IHQ3l/Y+4&.g8]O6(la&?VHW2lNb3Hq(9'*ăU"uH>#1EXnYW^A(6Z(>=)4([w>$[-\ns;9=xR655?r+swRfrowEgH5/BY#Yisf#eWăU"^,u]uXof885dldD20^fCW#>4*rzIaw2butMUW<L\5R-[P&DHV8teo5wg.Nm:fQ7ăU"_',?pPiLNj5o,<Qlt((IBR_^^uPAr#ev5Bo);saaE%TCKE&sTO_WfQ&+nL^MC*LăU"WZ^W:;<A-Flf/vDQ(g>zE)_xHp,'VXOt#''Xq,BcD7Xp//B$ITBLp<kf5LZT?p%ăU"[kS=^\jju/Nn.].0[5(Twe<V?,WL*<mUfg$isEldsTTC,mFloTD'TRp:=IPs.DsăU"ljj3o&dcfQXqq&:Z=eqv?jQ[A7a'gBMa?P)V4z-]+J#j0XogB0sGEXp&Y*+_'o\ăU"DB[b/i>Gu<MlYkb?yGgKFD2/2M&bGJN=]JfTeS24DxFncO)jF#C^JBrG)X'&ACmăU"hsbZWm5wY2Ue_p-Ao#QwWWdR9)ZpHD>.pi5b_9>rBQB#Q%Cq?am#/iUu]B:V_71ăU"wr$92oeSpHA,l-K/vs(m&Bt5N:v-h58+LTpYE,?mTY:f#DlF$*ci50N/sK<HPf1ăU"EQzlJoQ+g$wSl5k)Bg/(4E\JQ?*%<=>&HPEqt7kt%Ae/]m)+s43ulvDls^WofU/ăU"]&qOv;hU>;qJ=p]p,p>1=aAd$<K[W7sasj.oCoK?smC008Z[VY)VmRg9Hs:CZSmăU"g8PHMa]4Ifsw(:U2v,u_4sl-3h,dKQd9=>tX,<es8zdEK_kh1QJ5Z-b=qHJ'74kăU"<R;ZNDXAS=E*OG\Uq0Y&8F,KMIfObtY0jHYi%kP<<%VMK[,$^0BMk2p7[GS5S9aăU">cU^Xf?D_*g8dxg2Tk$c<Q%0kGRdhv_mt8^:1QI'BO<UNk)jwVoo0<7z?lil++păU")Qlfe7DEND*vB\/#ZW4UEd#T4uY+F<;wYx7/udCax/k&Qr6MZ.>HrTu0.wPtm5RăU"wTS=&CamoEH\uZY4/+t0ULj&K=9&IRh%iSmo8#vUFFv+(j&&k=](FhTZPR-M>1măU"1BeXzF)QhTs^A(gG4XsYuwtMrp]J&p.?CqrN:fFFkfhS]v?M,Cr26PH:>J;?O&GăU"]%djILF+_cU/8t,NM;E.spi/SjDcoOb9Q0;bzw56fWQ2tCth-%t?0JL9*.\qGooăU"P:F5:V77jE:6eZ$F7$0Zq3IYluf.Plu$4oDtcOz]dln(lV#e[n?)n#R*%Uj;1])ăU"'%6Xu,KJ^ndXPn53'e+/L3tPVaz>.E(:(gJgYTu/JatA#>(=]4vR2Xmul:Bbt'8ăU"_0.v%zNcM<];)PjbEGeH<:Eh,:=#_NOW2dhlq'dP*3<u^p;VqqqU9oxEa0SxqIQăU"uO)ETD%d#ctj=shn$H76kJ(QnVIl3P;LwUuU,\Pnt'r3lin2\P3=g1K;2+fU_9#ăU"q<9/H+8/ND4SMo[/N5+\A*,g45j2Ho^2I2R=x_EL?)],:>*l%LHqwf9VYOfinQ9ăU"B_;SUXMmV/K^V*U*YHV'3EJQ>)$nx\vZ((w^b3RuUs1dmr];]Ng3QNg,ReI-G-ZăU"smJQfg<CF=0RjG1a#AAb=4WdG?(y'$pT:,jCoo8WvhYpI$7;oS3rZ;hxd'&'>MhăU")TG4'9e/v:YkiejwA?7-,JVS5hJ=J]2*q)1Mrr)%3>hcu%lB?QGkjg15cjV7lqTăU"d'2W0j.,]H$j;i3jJK-DvfMKZtqd=Lt4O\9_KA2?0oYOP>]oaA=fpQGT-#W#mDKăU"b?+m0*v#/DAc0WI(q+$P-n2bBApKg8+LAKkmAc^oYlr5,uQ5Q/N<.8Yc3HUJ3CQăU"$ek*M7$mx(c98#H4I9<PRJ(w0zoS.8n$Nwqp<0'dYMBL6e7(hns<#c0JYI%/zf+ăU"LN$uJsl_vKYh/]eS.Q&u_>Qp_RV[Z)*?D:oao6J_w5-d9,C&FPyWiG.VeeSoNcwăU"f-#vNEiELVI_KduxYLr[N%up()%9%%%[-%z17vFRN'kYN6.%%$l%%%,%%%%yl%făU"SgfjxV+VYATAA$7-zb+BsMlCK4h+P_-3(G]/gXl-=)&qsWmsV;lq1#-1jcRf%:OăU"FG24e&ZrSxbd]Gh>cbr&1+NqIb:HK:[**(LWXCpC?pmm1KUDk,*o=,UEsC/rb(1ăU"AGKBBT5?MW.E-cYt<tNW[Ha&wAgNg<>hLynXf,G:BY40H>N>#>l:(L*HzZ\nD,+ăU"AfK3*h1Wdg+H\HtJ&LW1-m#FrSg)(H#RH]F+pC,KK=u0p1r,Tc:Y/S5,QVj<YSlăU"MDu[v&3-jIcG4&A)MpRn8HE5UO_Ez2F^N0.UKDLJ^6[fa)/F0Alp:NxAf>Am:3UăU"*#+De-WRL^#5-Fe:.,lSSSO8*I,U;5)Qf*eLJU_A50xA&/I?*ZK6ImXSqIuxN4TăU"MS%GC%[ABhuT/X6F$)_lnF,i-%vMa?.+.\(;i7A;Fgw(yPN:7Kpt*uoEj7D2Oo>ăU"7AB[;Y>1cl-3iHoNvgx>G.\0E5fIOqw0mFbqrB5,3Xb,i==Emn<-+qV;ME,S>0%ăU"fH&'b=aQ_[Ymm[JTfzU00#n7dkFY61EP3k/0nLD*1Gmn;,/ZGqEy#o0npJ;8I($ăU"e]Q[Y#3jQu+7aKjBHR\'r\7]37$$_)>'_9VjgrSP8C+Q=k/KkXpe2-vI:cQB_&păU"q?QlZ;H::Y[$g7P1AI8+m:b&[eRsRdo[T&bQ]O+L#\>lY*/k/I_4Y(&Op?EU#uOăU"^c4semj-BX2nWZd4SUWpXEQoT?MZbT<\P1fqu]D<5R/gY%=e9WK_rK91&6XICeuăU".f+42p*PcU%1amgRJ(Cr+])0_54B^4qLH9=4lH(&o[ZjE\KeW+e))5oPWM^_t(-ăU"a41)]38kd6Q4jJAd=k&.RisE)GfT%&'g')j7aD+Tqwb9e;Oh09Tjn_npD?Bg_y%ăU"*8\(m(3UmnogPw;M)e\i(\CWEI*hlfg[Kc7QPlK_1HDScdR_vsC.Uq0/2U(Xvj0ăU"'GFKF=YBS?n;hYfg94deFy:;d/^\el/CM1B)%J*:Jn5#T'ZGaY9><az5mH<E8,QăU"M$,V0im;FNp=K773fZjUuog5YJP6'UE*j2Of-Mf'$-Hr6SgJ5z:I-P=i-7e+j3FăU"HA^7N2oSmU=R[Ghsa:,ZriMSa)z#MXJ8e_P0BLqD+XGPEm=)S^66CdQU$L3iFn%ăU",,D$7f(v8Xok'7'WgN8UT0Na5[5.j[%2(R3+sy;6mmz>P0N5K87f$R/SVC$DO,.ăU"ldC:D3T3LwQfONck4+tq*%Edw..FK'c5l[37R,w,D?s=iT_LvU1]6GHdUr[%NRDăU"kGY&[Qb\Dx6h1D/j>]Xo]&w%Tz$Ma'FM?]kru+IzCz,>i[]$-hP?*D,tK][H268ăU"m<9N,g6i$aYkB1?:tKH*)p,+I)u?Iw6Co0JnD?bd;wd^Fji0RKDc59&jrr0&#LxăU"m2l'J)==%^ReY+P<7aturLaJcy^Ol%gn0AsA1Njuv-7'[ehTp=<r4T-yCT8ji2jăU"Ewa%s>QcbMPK9R=^JB%Vyl03r'H/TC4_SqewiY6^CA;XEj-zKlH]X<\tA0?CjqSăU"SR&Z+m^5&/r$W<Zd3Bg<u21JItm(.R-jRa'ip;)&O;-tSzC\k3R.V'hmGpdOo0/ăU"*,0.39_?RBA*T[tE.:XF7<>C8)BGJ4=cR]^7l7NXTb;h]Gl?6Qh^iE,-ONFVfXaăU".yqUZH<>AX)2WQN>l2m_3KQXo%\qc^Va;G>PCA8tAKyL/HQOu&.[ZqXfjLI[1w%ăU"Z>YO-fbGf4urcMjn%l+u>3gs-i0?f&jT[\(mgnW?)KPt1fUIH#<>fbQ('%'lU?oăU"X3(GTZZ3l+ECks-c/YY_WpXZg?[;1];=sHA>fgWBWzc*Ch8IRH1MZadhI%:ae*căU"57?4G,<0h5k&mzo9+9PO*8yI(nG^k=x7XzlTX$#rxMaIt5Bg?&%?5$vUbE6%v]6ăU"GscEeo;0B6>&v<e;upX-?5]u&N%u;?:R-VjvLBN.IQiBb>n\lR&Y-I]d<>X2'sOăU"sc)6NjDws<[;LR44i<txK%Uh]FExWItV:k$QWf7?WWcH)57kJ29w/D<8/aMyNZCăU"ywY=?0H\yuSdeBia:EB1_trj=,TMHFG'jx*8YrC&.UlW[NlEu8-JmTlXa5Eo#;jăU"I'Z77G-lQoO6_3)b;KVj.Q=,&2duy)9_]K6d-?<WBqJKbJd$5X?1kEFboz1+.eIăU"TkWcs9d3G:&AvR]<M-eI)2tJRy8Y9L>0^7DDCObzZ/sJYNs6NKv(04b-Ah<nEFwăU"]OdOl8es2HX9mAd]>tkc?\B:WIO%288a5^5gmXI(Gv;6_=c+*T*'d:TjcWEH0O)ăU"rs%J_2Tzuzf+>sT_*gfuSh8gk(4>Tdu.?$6;l9Z'jWHdNl];,CH_Em?RljO0JP\ăU"TOC_cVQ1P>;Kk60&5O<4-HS9/Eorjf\3OcVLgUwc>3LpRKJgPfhN3Lv,#_bU8s7ăU"0kV2YS2QY-fNAKE35.X&br%280(Q7^F_&Ety/0](/6Xg5mW'v^-c<H$EcnDdC>WăU"slfxiE*eEU?G.X3/l%[.&EG1OaD+pIW.g4F1Z/0GI2ffI,AyNGv%*G-;1a-UJYBăU"t]P4-%HgNUZi[cj*ab3a6P3h5J^\Xn5E5D04AiE.Mqe%\GIbGn.YID(_+r96_OeăU"RlgF284e]bJ+c=6Z'Zqco=*[dbj::AuQojsI;sV&66T.UXtr4EJm][7&M^z1;(făU"PDYjfCw3X?8gZ\2G#U/z(yOEo#Gj^a\#u01we3]bQ$XO^h._^CQD+Hn,D\0Y]$găU"MA)(Rz,c%fF7gZVXPcl,]'TdA\,rd6VYiv&3P;=4ACNMuJ.n$55\C<1'F2mp'0YăU"ig,#gFkA5Pig&dWddYlB80bg:Xord45IC2YR)%<)FMrTPK6ZaF:aSL3MdWR,'.=ăU"^,0XSM7%mwzkJ'JtG-n4[*=5jYu>E3UhK<36e?IcOe5uxs(xrWCvdj8IM<P9>xwăU"M%3h'6'v>tOet^NrXCvDj8IM<5tE[i3N*0tu^f0-.Y#Sn,t8d2e<s%WeKV&E>WNăU"R.AC33Sj[x/6fbir'cvLIfGPhV$;O/NfDe1Roo=6:iVx7Dh0#.lU/]NZg'Uyqg#ăU"vf9'%tjX7iOXfEdny7xLl]QkSDzb)ZNV[?p.b.q]lin*LkV$']GjI?Bu6zvt2GLăU"I<QkqcXG%pl.UR<aTPgMT[w*zfVn^/..VXK(k)$TI7%PDzZfxXpbpWO-Ko27dtBăU"v,J$e>jtrH\lbZ8v&&C_(Og/%i-IO:EyB*s-ctKP#t+HIA.C0en:'J(ksbnstvjăU"olX:fc&Zlak\GC^pt&<pQYhNO([[T+>&+dk,IGhCYuCNQQZ_EGXZGg/n69?jfstăU"AtscDeC-M&BfsZ1cDXGai2J$H,4^TBI_6SrQJgUptsNs5e325r]uB*j9#i:x*>UăU"upa$8xoNNS-hL/d]RzhZf:p?hc]+FW_&8F]/dSN^l[38)V=NR+t*Cv^N8D:_jkgăU"*$1*kCe9Cyo]CfZheDJc%\j\K#\^,SPY%M)xLVbv/LdZlH6<rFcoaf9[9w,Q6GbăU"wsPfeGzpO<B3d08qGzAtsfwW#uA0)I-5*aH:?7'KZK-H'#Gn<%\cvVzT/tX;$[GăU"mF0$2IrNu.GfG_x$COc[3t_RTMHj>+N_6V;.\52M0r.Z4Hfg*iBhGMg.jbhOhHoăU"y]S-<SguAS/0c)/5L:$^j+]+w\7[s,%o-L2q%*b\Nrl9IN,,''\CmC8BjFYXgcCăU"9i\R*:^rNcIWCuAbaF/NO-S85WoaWp:-V52xg##>-Y=y(9ijPE2X*?qVYXIZ&RdăU"lLAwi=i^Z'?_$V)BG0?O;BOFO\Z[fnvsV53aemB(?#MzP&o8\BWq*a2cUp_Z#:9ăU"h:<1-tu/O4>o<_>,2w+WG=o&LKbq8nrFk=5,k6T:W\Y+O4:Pb?SnR#qzSsDJfP<ăU"jtl'^JC[;A<3S'7hgZ9]N$0NKI&lGOc\:(W42w)CdD.+W>+qKAi<\g_VC8pG;JzăU"X#?pYYEE&bYq=*<A$YXM4r\XjBr]3V4h,THi;uL(T-+ic;sg#K/]5mkv>cY4hD7ăU"caG%Vh6vDa76^ueawG)3xR(jLX7x4mD>-'Asbo8NVc%do\WS/J*534uvNn7D3ksăU"%K#Ldc&Ef*3Dv3Kt0<N\2n1vb:gz2);C[4L4ZRTofGkeOhZEDfci^=F76]]%K>>ăU"Au[lH2*]QU^kfbI,4k1yswNpGxE7,w^C:Es1;(d&=L*M2FT;6_o=*ur]&NAl;_lăU"'jlk?<i03-CAk[^n4RwWUHy?zmUAPci-^D]C:Xev,<_6ACh^-]OsxIsNFG9gA#=ăU"fdC>v*K3<a8f7tQ+w0H^?pGgb$VP'o$4-T#GKd0s^MkzP(F'+f(<Jk>XXbbArgnăU";(]p<k,ns<q6wB?NhW$$rFxnDK9aF\K<O'L43$Sk_FY'[LG9lo-:50-epoTqhz6ăU"H4f],2#t/0&phbC]:cor55R'm0IV80V-RkQHgRipi<-dbV-Wjn:'ZfFY/xc^OQtăU"EJxZv'e>o2cJXWCSMA'eaFRf3A4#RWW1c1J'M7G6YqeNF7s'NGq$3]29D31*M(văU"OlEzW.O,T=VuJdcMIJUEJm:\3i)dnqS7Pg)1iJDq=HuD&KQW6Q==7uU<Mmmc?hcăU"SF+YXk)1mlwWQ[u#PXJV7K>P1kuWeG5ju%FBh;#b_oJbque;<*=1=H'#FP;TmhGăU"-%tP*UJS2ZZ/pbEZ'*j5rEAbMOk2l<18U_Z+WSe'V[_IpPzT*?FI0_+cZtsh3AOăU"#Q#[?xk\glNIn$+W:b3j.Uic=opq,I(2F.B-Z&$'4ldRl1H'cYrG2W<R?aFCu?aăU"-a#q-,Q1S$lUm^=&v?oV8*I_GY#tf#^iG2pDCI;B$-dcUnfbL]Rg$h'G?ul4hyGăU"7Up<u=0?A5o\F0uakP$EZ4WZ25+hTd9GZ8%lw/z[$\+)?Hh7/VH,90aa504>uJ&ăU"ch//6<=CiZIR5*Zyx<to':lBL.HNq3D\k7c;OcL9)SBnGVh[PpMeKaVOWEoXv5BăU"aR-PdRK#1mm]_Lps28qUluNnDWjJcXzVc-r%F,kg.e<5W--LMYnDL3B*&$$C8tUăU"nFf(T+-qH:B;Wk7Rt-DO<;^yf.?e5W6_T/=uS4]?M.zj']Db'>ZUtH(NIAeB\IJăU"1>FNHQnJPfFl&m<$uXm'm&]=#DQp5wJdMUIG4u#7CQu6$MOZl\JvLlXBb,Tx>YTăU"ab2TDYd%'ouj9#e^:mA.tF,KTOnJtB\v_CZ]Bv,J;[qFn37kk:Y_l$2P)N7,DrUăU"TzRcLc3tGg)X$\qqmTOe<qWJXu[A;8yD/c>e:[4t=LUgcRC4+f>Bn4CxX))wOImăU"C9<:dT$m'1CZXk.<33_puN-,)pa.>Yx=uOr?On]0jZv>\\,\)$XU+g)?5v/s#(KăU")/U(=y_o4JF)7<+sVCRsIilFiTT%it99(_mb19WY$/I%8:rpd'[o7WCJIk6)3XgăU"sa05XrR,YhHhIWCH<a((olv8%nl>3PBs6WjG.j2U5+/lu70om6zT$DT()5])-7HăU"&fD&Wg?Z>$Enfg9^,xGU;%SR%F4ianT0gi(pc.ax.(N]?dwYqH=<<D&41(MA0uGăU"a.?*\t^HVjz5'ndup%()9%%%%-%,K0vFm>HrY%p1%%&gM%%%-%%%%ylfV%SgfxNăU".(<B]Sm7w95yjD5I2G&1l5TBiTSk0=3)eu-d>cErBuoo*<O+uCj7M\t3<ws_jm>ăU"6CpE[fCxtw'7XtpX9VbVbtr_jptJc._>RHOc-RofbHlTf6:]g:\.aM<siqfMk.oăU"mRl&VcvDk%EVR279(8<am:.PSWa<SFc^krSAWCS#Nh3Gs^9KJscFgj,V]rXRUgWăU"T03Bi;9Mx;KDA^/Hde*PmLLQ9AeQ\]Ul0B;$SHnS[E1[Ek^P9r]G<',f^KCxtqiăU"02i^-\?0,cCrulkkU7]b6aQxXs\<6OsC.2G$B+9rTYkNAxxmm$[$oPp4j:NdW9răU"Y6&mFzKc?./s/%q(SsPRG195J-XOTap/9/Qm#9878;Iy$5\(Y)c=^)aqYEQ8_euăU"LS35#R,lH;SrVQ<:kv=E59.A,nseC2&)K0<^l>Z.W(n8rNYi4exF(\:?E/t05(DăU"/h]:5'IeP'31tPk20O<ZZ/0:[Q>.:A'a(?ZUZ&Eje9xdbv&1ph'o:;tSLOr4#cRăU"]1iGwW\k%xC/0N_bVdZ^DwZp4$G%Qv2$=x<BY+h8fXZVYK7<%aK4=)BUdsj%/l8ăU"NriS1,a^t[]Ph(aOS#B5-.gSgHg7&-C5Ni\?[0)E*f00,Zh4e2)<2#,?a**gRv'ăU"dG0;FOX_*l*s]9BH'd+1+p_O0Y]a-fepapJz:vPaUWBn]OgM9aZ^pX*RpmV\MJDăU"j+_phcgwQ87G&_DM;m*k,bac<VpH2*BC&EqG,FZw(.yYa:Rk-+ZU<wQe9Cue2R^ăU"Dlr(Up<5X,PhtBf&0f4R8Cob4EVMBM)hU+(Ib6/]5c[-E.^m9bp/$6qGI8GcCmxăU"$coiZ>;]'+.%UIvh_c-.C;&>,ituc5QRFjF<B+_,VV,2X:rCITFU6BydMMlM:zbăU"])96t(,dH-Wi+/caRK196%ucM_=?N#Gm#TK<gAtWOTk:'hS;whDamJYDfOEOOZ7ăU"M<'<&%A^Rq$]/<]AO*5[z%dmQ-lwVZ.JO+ZMGE'c,1G,[oko,hHuLi3bMIRSNUXăU"(+$WXCVG17l#]ejcFrpvG0&An,7gzYD.O')sDZxh:<DGYC<9;DeFaH8)aWP00(0ăU"hoO)rqmoM0_d[G3':fBCeWYk\U2+<QO#'o.f,TW$($r771IDe#JfrEiek(#]&T.ăU"?BErpRKu_xAh*xDA/52<[-T4\[0(sXm-L;RCNoO8WL-WuTtl[U6-Coy.q]$X+%răU"MHCU;J,l3;1[>JC+zuo=m(oosG2eRa$<[pi3x.DGra8$L#3)y8M>L]6R-fR^JcOăU"OL)Hdf#Y2BuJv9h%%%0Xu[MgNl&TPLK#WrDv0LM.piHZf;UaCc2C0;$']2K03AWăU"tnp,=,DpJvY/]XL:A)lCYm]$>Nd9OY&dpczUTB9[kDjiRB>OWReY;T:;jtUfCaJăU"SypRlaXn%MJ>g>1cI.*9S8]Nd2ICntznd7\M54*=LG,L3uMJQ'Wi_CSCOP:kj05ăU"r'(SVV6oZ=h&OqO70fjw>7NrbV(^HmScT1'O7.PH=YNnU$j.s4hxzmC]RNIG;v^ăU"MxLG*u?f&F;IWbCSt55P9yABR*tmJVTOGQ3+k4>;;oG_o3I^QC./9pp[SQ>HOe1ăU"L-d+kd,;+Fy\l?kdMW\s]#wUbbL+jQsl<.Syn>5d]Gkh_$S1R4J>dPd_VzlLwmvăU"_2suZDsvCb=+aC#UDkjW&.w?#X\X\vZ0KvZBVOYfzchpIpa6Qxs%&,aJHuFx5NmăU"+L>t=nS.+Z3#q1RgL=0;ynF,*tH(m3lfe9aL[)SAy5n;NM)En'8f_u;L-b6K>?jăEND SUBăSUB V2ăU"$4znnk)M*De6URReK_mUK;V=%m.ou&.aw?MrCWs$I/>Xbnh4<T%NM6w64gQP)_xăU";7'('wR1JQD/ZJM#b32D:rkbnu3K,gJpY(d?x:9-JyV44=*<)k8w8]z&9u6Pn7JăU"1&JprrSr;*xgJo<+:Mx[yo]5#Q&0LQ[xQSdy\O,JDRNMi/iSLN\q-=OC(qw%HYzăU"8WDoryP%((b,:9buN(,^NMZalOa;0iLSuP5P^p>)=\??A.WWk/pi]8u(<fOqcO^ăU"ARw$]Zm5*q(w$imT6>;nk'V)(NAq56O<pRo[T<4^=%PFbmUn0?h$Cqh$)m;2k$yăU"'qQ1)F,>[oqJst0]QG+/9qS>;;.5bO$JaTw0E7],6DqeO99/koU-7U])vFD_-lTăU"fH<DE2FrW)VDm^Piad7TjiCqTmdDPM7GZ,1G;<R[CzN6exgCj+CgiSd-1=zt6/JăU"h)<WAHnre^?tNC5X?UoFNM24;C%tf=aFE/2w6&n>b2>SUozPkHf,YACaaW*3>2CăU"\kzPuO_;Md.7U-n+mB2ggtq[MKNj=O]Hg/uRVfns%.Y:YRO:E#?9-8R=%_=^^0RăU"vC?g5T14CoE7K_Ir-b9p4O)my%WUCt0]m11unVFRuh4naKTJP;(b^Z34tjn%\,DăU"Ai[2wE8\wW]5WxlQd.*:%Si#E$wd;[MSJcH:kFpX^Pqx_W)tDG2qx-#TX-wrPe;ăU"FqQSTUNKw',gc80KS5Vj,93WY5SUuSMV*bGWteMf2?YKxirE31m]JajCvmFvO]qăU")tUj(rmvyNLZ[3)k<hCE9Q;y6rDcyWTo(HYH1TXSTx4[:u5tLkUK*pa]F['<Y<qăU">MIi7D2>-hOIwONUXXf2[,g(mA?V0i_e2o>>NStk_2UStXRjGcDAYtJ-GocZ<VDăU"<k#fnB28j6HI';P<]j4sCe2P?NG&'iqgHJD,$I#w=AJ(,\,q(L\ASENs9?J9Q^[ăU"=*aHFIWQPG+,qg4hGQ:aE%s#=nh;Z28vN%t3M0[TSLo6IFRrS(4&rG$,O,x8%;,ăU"]Zpr,pjM+CIMp6VD0OI-h49vO,w[7ETMRKBZwN:v:Vj,M&n_?MTQ&kLe?3=g7GcăU"#v=Iff3:w$e0U+t-.G+A<o8V8ht)^13K8u/OMD?1?+e]-jmEPIB'K97HNUTW8\(ăU".T.IEO$,E#wg(>CQRdviw05E?4A?&hH9H&)k2ncptdHYMFU-8Rcn=W^wK<AMI8NăU"[c>dN$teJYrjMqnmwOXu]l=?IO=0Mwwm6geYDghts((sr%X$p.X%Lq4MqCdk%J7ăU"t[h+>6(UJ=^MVy+<N*i)Hlxbg1Uj*4>?KNccjR815[f?FtWU#*>dSV-A]w<B-<&ăU"<h&m4::UM,.0f]RW;GW8H6.ouIzQ2]woD#k&+\*\U,A=*a99fp5K?W\#tVT_R1păU"UkVXhLg*s*i=m3Lnfs&X<Z\r:tq(Y=rq-i>rmwcp/R<Ja\m:bC)&/G:72k=[fURăU"[Iri3d8wnLg<[D#RP*J)#o,;DJ$6uQ]*koI2TK<\Ror%GHo\TiF>,A*SgQEI%7\ăU"Y%vh.nKQFHAVR=l<_j(&Y$P2Q--=55(ner22u*uQ6gvnxVh16L8Y3:]7R=87>_EăU"a*-:);:9]$R$*UvGO$'G\$'SoC7G6:,+e8E3?[U3bJ?#L+U4NM0R#'W-[$B6=ujăU"_oY,xZ$ES6tXJ9X6vStuFl7d8uwcY\jW/+?%\:'S''4e_$/74l#g;63gXZ<MG9JăU"Yj7e\(R.a,DSU\B6Q$0UvaOvXQ381oc#4\%*1CB/jWg3JMp[3ti?9EF?BI5Nu(,ăU"xNPjvOrh(?A6EKoaplRk7?f9BT93kh=YFMv8t;_D%R)Y91\nXeC*,v<k<(vE;d,ăU"*MuoV*7IZWx<E9wYiXB94dc0VmzM$Fu6^bYDy]9,B]GoX_H+]]$HW=x$P*&7a[?ăU"j=_T)2A.5HiR8,akp\Mo5S3c$ma_Tn[xc_L%'wcWT\t-1UbzI*nqvtk0cHlSLITăU":rp#HBja'n6qGLOGPmta7;^P#+<HjvQQO3tx+[?ap5S-P8SLrfSL37]&94*%CsYăU"+b3>9X;D;dOnyUfM?+D=UApgexOfMQ0j\meJ*\\JUaEPQntG]2IDtnNOTOVEt.RăU"7pB]Y.boN[Yu\Y'N6qbLh'uR*jZnbBF('iwJLP[Bc#[gjTCNxyG#g8K\mQ#pLU%ăU"nW^'hQ=tbM.cDjZA2VPvq'v+fx*u%p()9%%%%-=%'5uaFVyg-[91%(%^T%%%-%%ăU"(%%nj&&SgfOxV)*>BT36hMe6u4D/8s;<nC_MalZ^^$=OB$-r^+Vt$]sBb#iQF7#ăU"9pm&fDCa4dhSZ#G-L*aNO;m%T[>f/7vfecTu:0V4J(u)4IWt^Hpe-ge2^;j#+]+ăU"*vqSET\sJ:1.jEiSSS05vb_ieR$^'IM,f#C=FleSD2&2[])7;,Ysci,PF;p4s<_ăU"_^]gjD(r_FiY/Pl8N1T;,fBS(1V$>AsS'wN-(<]#lT)DG(]]p6uk_:YjM*'H1j3ăU"<]u'S)7]<k>dE(j:p^F;L)=fKC.:RPn2NhT>&Eep,*AWO]=kBjU[l6>6*'_2JCrăU"hnxiuRW/=+Yi*$NNo5^pr^U36TjN-iQF0>.iP^]WW7UfK8i#c*PQkOYO=+P_8NeăU"XijF^F-LF.n],E:Nz0*Fh#<)D5brd)9q\lxB.9)dZ6JT4cV.C0/gEq[AO.<+JgrăU">phR.iuv&_aRxrp&'Y(JPEU38nx[mA>V<).LU,04?c?G074-E*n,5F&#hExd;._ăU"'C*>f5o-Fr#SQl/WgIy3#RTNYxp7AY37F:K'8L?EI+M9^2,<gR6(wMdxn^AG6&wăU"lFY>jh.2C$nKe/IfpsGZgfNGZ65/ZB;Ij-s-3wdIGO1jgcVKIJ/98mpV-meDj^DăU")%iU5T=hvRf%b/c=Xt/v/YVhpgH:Q3eY=op#i_gY:Y678nQg0RtAF6RM+c13Du9ăU"EqnC[C'Id%SQd)-sIqzCj.3J\>oqT>/kl_.hH$1'TD+rUi,BvCkf#BB*t#iRrsCăU"-/ssubY5VI*fs&P?GrQUp$+A^s2sMCc#k%Mh+/e/1yQ#S(\oE%H^]i+5,=uMPA/ăU"r=yjDv7.WS2hrycZY6F9r09]]oe%lA^i]wm,lN%QA+qUa[-_x]=_lz<?*6h<ab/ăU"u:\1s9JBRq36^XHDnGFM]yQK(P1(e$Jq<iwQT;8.hleu>Yd5Re[lR\7Vz4(m4e9ăU",TKaMnd/[ILq+YPi;78MfkG9dU-gI:;BB^a3aJk)P2l&wQBTK3(Prqb16e:WfocăU"z6eb*i+_/y+-0\tB7SelijR_A6a:sS\H39xcratk[608HMi&z1oJ3:pq%&cl#&0ăU"L38/+<H6Ck7D%Rg8FM6V;AG<0$*(dsKAst=-KF0-+kAv:RU?eJi^I4HbVx.>jOCăU"(fFN=\J^f8yjr%%ZtCLX5]H:+3%sgAbm2pr'+]C4G#1HZHGwp*8G&H&4BV5-v_?ăU"qW/$Ojwgq3b([1[$vWTGHMu_?g]_3-6dPnhg+V;5wNC)/%[5Q#j?r4Lw2LXJSMsăU"(k0cZ3Jb;-#In$m\OKA;KjN=^67+y>VMTYvFeu:(GVIYr6(n78i+6kWXe\>*a-PăU"r*8*4)k3D4P:)6LHj/KP6Z3tJy4S6PfZ(uyiB8/&FI[a18jlFRj_Q9LJEnU8bb[ăU"B2Y]nMx3/US<I7[Y3oFM=u$K'1>HuC;X^]p&9NZT1SFuhP[FI)2$teOU)X>$D&făU"D:\-62_96^=QOXNOl,m[qOVR2Nd_v3fjixK?,fBtV^4]*G&vl7hmJmBBO:P?D)găU"iqH^PviKc]kJW/A?XAc^2<K55EdCk\1g]LmK?hJwJQgfQcJ7UlqRu$Ic'c^*rWvăU"W(HGmY*/Vl>fVZ2/kY^tlWM9.e'ydj\yfajJuyo\^JpI89a4S8C=]+,Qdu53InCăU"fS1'+nnB<,X'[WT5Y&JxsUCv$ARiZsFN$tb*\Mp4l6<NxfR?A&m+RM-Eppum:NuăU")P09Wsr.xJKOl/&'Lm'MTN=DS=SZypbS:>K>KRWSG%EDe0fe3WIgJOJA8NUYBQJăU"N=XU.bhV04$+*/D^C9exVCsr>SrJAB1XuLoJUB_+53Q9h.2twZM*9qu^6TQr6<lăU",/PZqiD[tb^U,10+%Jbfn%P8V2'2]/44)c60kVYYR_cTT6o)qyGt<Rn*daGJQSWăU"g2h6em2l6dpO->2']yul<\31J'8Z?2akI>Uh+n^,R-N9cpj'GRVB9XIo:QZ2?72ăU"+k062<x/uE)ucgRj'K:,:C0JDKQM62Fc04c*:Qr?bE*pf/:mhfeT11Z-38G3_CEăU"BSJNOSCu$ld[uEjU#mdFn#88'Kpa4*lz.&5K;6Yg9G_\6[>c-bW9Ap5fG)u<>^[ăU"CgZ.l]irLYb8K9['sc3N+IH(Io[]Ds1jE7^,CRqu)BMm#Fj7m)g/,fJYD9NOAW4ăU"[TA+OGVv&_OsN#Q^bC]5*2)%LhB^(IXIu+20WV;v:)n)OSwmF,Jd,Q0(sr:p3<kăU"P[:-xg9TQ,a3A'^D+Rh,a7rGRoG+PI<6mm$gHzl3+WWYIPcmJ&t?x)<FN2j0Hb6ăU"Lsr1y.s#Bs=VlSKb]fd4eh,H;qc%2R5XAqx'Ce\;&$LGICFXLg2wevb%R/<2RQ7ăU"s&mFS,]\$OXgushk(doNKBn#3a+]e(hw^r1tsQXTLy9eY3/Bo0+*SU*2t6$LN&1ăU"WOqR-wU$\eueqS4XQ%/rs-UW)n5a,AZQme9#Vf#XjFo)gR$13RBc1\_,;aFv5LTăU"eLxT<05h0S5xrb4pU.RKgks'=P\n7uv[F):ugO>2FP]o4$On7^qOpn8qU8FqcP(ăU"mXf8$+uP0[:h-x2ubeV4o,4fJuQ3UPdh2[khRgO2''K=s[k#).66\rh^Q+yG8t\ăU"w=2JF6?T2?3x'WZo82f.$034s5dHWVfr]vkvOfo;C:Tq?o,K;6IxSZ0Esq-m61răU"e\sVu?]+vN;3]5D8g+0GUcKuES'gUmsr-m[N.NQSB7Ew+spV,Oz.dxh^#9=rM*;ăU"48'#,hQ=NRu/$U]t,NI9O-jLH>l+Vl-cKReC8fj4$=[lj)_$3us_3q.b(q2qr75ăU"/;j(QyuJ',AeoH=#r3JFlz&1ng%LZXZ]'d54ZJgm/?w*(lATtJPVwuF2n[shHsQăU"5_x/->0IG]ke+A9?q+TDezMaw+I3M2/<s85X,lQih+(&t,V&KcX,.=#qG%\>C2găU"eFU^*a=/z.G9n2U-']NiTZm'xEW;DJm.ZPp(*T.b/s5j^:cOmtRZlvOPSR&)^ZnăU"G8ANu/>I6uan&oS3WS>EN^39JJXy:?[l:]b]^rWY=4XV:S*'$89Bht:H&GF:Jw#ăU"$N:P(:>uaCQ>I1l-IG#cBOT5l?L7SWbV$x7pM(Q*^30fG'gsXbWBfI[DRIQs9XUăU"/ICEC.QsF^dbJ;W.,z(WTnGAaxY28R+5\g\Fq%f,:V1dkuYfe2L*Y3.o/56S=v,ăU">h4gLpRgm8tNwd*K$T*o5L:uqIlZ4srSVhnh$cL7q;Popo8bou8H0-TtGSGBZ+uăU"+>>*R7IUB7b\oKPofoI;]W&*i0H\[oEGZYan:t4Fx+HV[Hr)YM$rQTYJp(_0UL9ăU"OB$_Lu1z,q8*-N3Ub[[3\kUpVUD//eyvy)T/jDCg7vm9ZgFP:6sU-=D1m=FKarJăU"$T,:OX*q6prf*:he)_#^S7r<h^*TpJJZosI5/[$-ejio+XF3Faw[zukxin7V>ZwăU"90o%Bb8?S/(6[-wx32if%1.\>ePj0a\oZ98:fDM^mvNfvtv,+O0?vZ[a\G$8_dNăU".X:0baxu:k5ymUJk&#gk=U6/V7(#0\d_zMCe\uummnLrbZ19wGcvL_rh<uCF0ldăU"%98te8rB^MzsDq9wuFDHb&)Cs6wrDv9n[9][0Q\VH]Z3(\:UJhgr=qPiOas0z2.ăU"OddGl?/ZjPa[%*qg#Lq>IqRx\v(CJ5QZ<VqyrS]Q_HZmlKmr3shH=hGZX>RJ2,4ăU"b<oLSouBJ?vI8rL,N_%s]dZh(?>%XcsGoTC*X54QC'Nu^Z\M+R&h7%Y]?g2Q9guăU"M:5uAixuU%NjV^]jEQ,mJw;S;\M<#,Z^_S/20Ch\EE5P?bbDo_31JmeM^#hhFv6ăU"JWd?S8_Ra8u5qI(BuqYL(Imur6tcA[_]3Oip<t&\bi2-1g?k*Ig_M>7%tGC1k+0ăU"e6k*9'?;Z/gI7UD2LTa^*n01C%m/mKpKmnv8TAHw=k\dC6C1_4LF'nxz99lKaK[ăU"Dxv,.#iLHkKdh9LT;l857YT7^X5>.B(7NN,%mnq2tQ4ifsKPmF*G8ToS1WM*4t.ăU">(=F,#HWG+fikrKF&klF:,8De\#/uYL98ya0Vi%CjP&3bqT<Tge1%h0d:n9YkQ7ăU"(yvh'5I(ag/q_HI-[ShsPT3=*goDlwBHB'Kehb'Ag(LOcYajtg$w:uigG8%&up(ăU"%)9%%#%-%R'-uF]q<C0t%&%%c%,%%-#%%%%.nj&S[nsh.hd,>SdU9U(+f[dA+zLăU"MwX$n\=]KSEB/)YeqX)?.XD^Rj1k&/Pj$h:LZXH%-9Afj/ArEJWlu]]QgqM:gcZăU"-48V?:eDU6mYnTH$OM*5vv8Y11N+9GW8+rhZ%zNQF1'QJ(E3K<'WS_JhDGrKw]OăU"G%_%tc\<,P?pu,s,k7e.2hn-vVGA:^(Aq+'X=::5u$:i8i>r1gWgk\u+;h>PIDRăU"2#TTPID3Lg[DBIQlMDpDnd^.i6p44k<?7Ra)\z3kx3a\s]?oCs$-Li-F\a?^AlKăU"*jQXXoYk8cdvFm=&I0Gw?mtW,)12YdsJ>TtWDm&nl&&UUsc<fv_2,]:UdTkoGBnăU"ZEK/-wZM6YjFR%:X=E\1o&d#.UEFXdTF%8LYP7JG?/:=2#?pI2)_R9J]gOpPMNZăU"b>*+35qm/+t_t/o.ksG;>).F/p?%GcR4%HCnYeXOF9T$Plo*Zu/dWt4a[V&lXE*ăU";qfZ$8NYNnUEW3=T$Y$Q2f4>?LtvmlDQ(*z7M1tz;Z8%h=*'<=5%oBDUCJBEd^YăU"bN0lkVnnW+T1XgVDl,NXQy;/rMK]SbrY5MnYZ1JYnd&M1\8]N;Kd[&8Y:pPli3#ăU":5=1mqZ5UQc*d9<#RUQ#(0+hz5C0P[MKuoo#E>Y?K-YMu%a(up%()9%%%%-%,R-ăU"uFK/0S#%_+%%&z0%%%-%%%A%nj&%Sugq06zNqaxPCxYmWK.+WdEHA*[pX&Yx8+QăU"[EJ^RiN-&Qc-/J:N7/?lVaM+mRgtkSeaOAT$pTz$V4SwLe'C5?t<2R]Dq+qDVwUăU"Y7+gI=GU?UV8jMqmNWaVRt?XpUrTeO2h3Ngpl6pJGrvMgpkkh^lsb$qXRXX4WU/ăU"O*OUg<A^Gx\'7K2reQuC+FsKk/Z25bF9Nt.]-22;+(ZQDSkhrN]kCf&zW1D;%B6ăU"Yz^/%D)<+v<F1&e0/^DZ%s$llh4e*/,c(RQE,B;zjzhy)f,AM4Km3*\QD/xak4.ăU"+.WLP6pQ5+9JhKEzVon'$-C]+M7-]x3bESu[YAY&'IoI[732z/&hVL>A[oGc<rlăU"oeM#M;87wYzXv%oVC,Rk,0vZ<nFW['(PM_[7Wgbc=sT/B_J+<I1VW;p^WJ8Ikd^ăU"NDK?6w9&;GGF\D3:&pG8ya1Jw5=A&CrOC>fyKM>3)J+'o)=mF8&G5=QS:wBmA'9ăU"RV#Q:-3H4-MYkLib(*%sEKc\]mos'7'=xK-7H+FrY,4Q/MSMalYb>2f35T(&[OuăU"4W>2)>U=>-:JAfEQi,1A4Fbgk)^1EZ*t'Ari[2W?bf:r9I9\g'I48PBIFZcM1o)ăU"]R.&'8yAHQtT,8';KRrZg-i8uvB/?kasS&1]LAr;SGC4JT^>Hl<>.9-zbL$BT*(ăU"T,yx;DPNi94tT,KkMqq2W&/2'W8%b&=r]l+,tY+iakeqR2]6>9*Mw:=(u4km9*eăU"08h)M]V=OaW<Y(U&R#,kAAXk2K/]+/::W>;vh,a$]1=/Jn*Ev:jlwwC\6PMgFWgăU"<T+u(XILtsbM<JNc:^$tupu?endqM)0-?G7_sDiX%l-*t57_qi31+4/Xvg*&W_dăU"9+YmqeMMRx>mZt=E4>Ox*W$2(.pSDU$-thbmmA+/o4P?ULCSJ,QvExJ>EX%L]ggăU",B*sEbBI&o^2Bqn2)E=szSlRXY(STbahTGS)hWJ$,?=QSPvXowt2_gl8u++?dTaăU"YFV,.7$^s&TWoa-8vXhs9DhwpyKFGoX,X^<M'rn_Dv?5??,%34#0US:=BWp>v;PăU"b)n+U^uY>17[yBBjm/hWD?06ur22'lDAMGc6[Ky^4pkhB^+_XQ[G\,$9LT;8JCCăU"I[BDs6#AjZkZAtDAnAj2AM]l6A0]aMklA0&AH_;QZQmKYT'6$&ii>pRAT*<gzD/ăU"5yCy2F0ts*P2*BE'#Kmd2_aJ)NWKfOShV\Z2bwWoHWkNdfU'D9\pf:I(XaW&;UyăU"?pLcOkRuiXMb[$ExO,hGoa)_\t?2T3)&a/71MAwItngESMFdoDRIS[16nDSYF_%ăU"k,3Y%\,Ck7Lw7hJphPr=aHhb%91C/O)q5mB#[=[0g4W9e$&cTDQKXM+[lD);QK4ăU"=fY(wIC;+up38ZPOjEAZf:&-q%<$VxTK&o(##:)Ps:]=?*0L&I;/KI5wO321')yăU"aRLL/[sgGL-YbQk&V+XJY-A#+M25LID7tgcqOZ0P,3?ilycVL(teTAo>QIXgo;răU"PobVs?wr]CXT,1/(B1)a]1f.%(,Gop?NOIBfsIEafb#Y]Jr7PM=j3(m^pXQv+pbăU"cL4WqZGE^wI'.3Po%^o/(gBwk]Z\HMEn<]<Ko_]a[K#scFa+Y*72rWbWV.BX/b)ăU"C&Fn8ukV>EAeqk^?hVgsz:V4EvfK%b1W+L%YDIai+ZU<oe25e\7dK)1\YU6XB</ăU"d.k;5lu<gd#kv,]YR.DN;SOZ*?Y;X2vCTUTU6RZXs1g^ITR3Be28V%iI%S?;A7hăU"RGHHJl$)XIL,I+HXgqQgvmjX^'vmfjAf9n]/gdLs4IPN6XfuJNa1TU5JNb-TjciăU"CA&0vpo1?ahf__O0=g]P0M,UBNFE.&PKsBB2]GAHred;j#5$NhG-Jpu,Ls5$oNfăU"iP;lXNugH.&>,a93W'e5XH9)HrFj#ecQ&p-$zd]C#UgNk1GhpAS6ah>nc8*hef\ăU"6Ks[(Zx]pr.N$e=DtiWTYzovUGH1zkGLp,u80p#*GN]v#$T^U3ru0UcgX]X8^\(ăU"I]Ld+b'ldup%()9%%%%-%,X1vFh6R[\&I*%%&%;%%%0%%%A%nj&%xzgS[gfxF2'ăU"<>?m^5w5b$kD_Yy_&TnYIN.4G0,6Q+2orJO-wFP&nR0p2'V.c2.\9?vsl06)WTrăU"IFrsBjJ3[#NH]6mtHei3uWb<#ZC^#.d44-X=[T.CtC3f3tNLhsuKKgmC?n#Nrt?ăU"XjKv#8w00dF?mrDs&skhiYH?(\:n,^T8eU;mV3\#JYs_vKgrWcm#5/jOgk7/*8qăU"ntG0rv%6PP70o]c;Zj^2iW)5CAn?.M:hIc9DsWa3X_7O0MTW-Xg#iB:hpn53x-DăU"AF*AFp)QSEKI=7]2\gE3L1=B](+eiBT0W:pY'aY67tu>=]DX#Ng\EGYG^t;t:9măU"^__+=1t+%VpI;3_JraY:NeqtDsPF=kvi%QYDl1V1rnVlxP:pfNP<k/*\V,'khvwăU"dkvM7]jGq%E,7j$&n=;8B4=*+DB_i7&[Fe'K:M5$T/2RC1&R3Y';V5O8g[SM^^/ăU"Zv7e'EEf;6Z0FX1]uj:(v$Am,S?(a]U:Jz%EU&$%<?)O\];o)1TSBX3%f^?/G,5ăU"R\F8+q?8&nJjiWL+g$/uP^RO);sf8V9t0*Ht5l:V5S,cjOh]:HM;VZ)Xgizb<cPăU"o[63-[MSUg]'>)UB0+eD#IDs?S#)>;Y5&Gs-1-[1=dQ)ULhPFeKfh,TXnQ[iY(8ăU"K=r39RvY9>[tg/u5UQJpgUAgo4K'eIr(8)5>Ybk1.6.pfY$;>;ujbCdY[bE.$u-ăU"D(_-zV-e.h\a^3Z^&T.WRb[C3eP\Fs=;GZ.VHJ*lKc29wFLPy^P_*xX3_+8)KvFăU"4-*]go:2LHrvu[05J.M>*bh-u^hgb(imq':/dT.KuZ^,ZH#A#sy59q#v.UxhXgoăU"Fw(2VE(NGHA;Iqd_6xDFG\G&l$_ZkE--W14VYN7(>x3GS,^i%Hj^n_EsWGCPZJxăU"F#mM/]F:cjtAKr)o7EuBqRb-#2Ot8FDVis$O-^>kH]\JDMYh*FXE'pMmB&3L:M)ăU"2;XD+H#'E^;'AUzdn&H6CzdV%.FUcUerP[QN>PsX^_a.7nvIIiWjjPj8<Fe4F,>ăU"bik^mfSuPtkmXPk$2i*qm*GoYqoHbkGq[]&27-DX2[#87+2]H#mRn;PWdaI(FARăU"MiAHJY.P<qYr%,1WC#g2P\uluA&/gLB4SjD:>YiD?wEIu.n7]&H>C](>3qijOX(ăU"2uEJ5bqan?VRC\AfGzSh_\X-NQHIKSkE7ySBZ&/CKNKU9%^YW(#(8L0DUB%n0NYăU"NN(kK*TTzU&n)[HZ*3ozwdl9i;D40,-g.TAO=O=9s1Xj)nsZXL%:\=FNqIKpZL;ăU"IFMOp_$[eCTj<-nGoAQnUP&P%'h;Pj4r$j(c(wSyMgSBFEgC]*y.VEREZeUr/wJăU"04cKsR-B?'up);X[Ib9ie7#dob3LWmVCV>+UOo?E_E;7=K2/Gd.8MN'NGaGW(\păU"\mN,sR5%hsLX+P>KT7i[9Q=Z/)(b[/5H6N+1BR+LDJU-'P_JK=8#<eF%XRho#FJăU"wwx;th<5-W*5G1E.5Pe6E8tb0dN(SRZZX5efu7g2+0-2bCs(E(*pm5OkZCLHf/NăU"0f6Qb#eDDyw)lY=IQ_POKYbRHI;xq&S+ZQYg^c*Ot'r27_,C_lp-.N\POHKe*?DăU"x,L8zyUzg^5v6u.6(uQ_6n$A%KH]q6ST^WN9iEl\/7D)?p;IVCgw<c47]eK%-T9ăU"9iH/cZsWf1=wE[rP$R*5eE<i#Dsum;3oajl4*#aA9t%Su8jPZzoVahxZ$fwkFR7ăU"NxVT<6pT-$oIpfNeK.B^huCdSZ=bf0Yv?LQKjP4oTMmJxxw%(up(%)9%%[%-%t&ăU"bvFd9TYI5%(%%M%+%%/%%%%w%jfir%jSVx^yDyD,AT]5$5r/x7Ul4oP5u'*\]tPăU"Be-Tzu[ugN''S#i3(Ncfef:hYk0n>OyCQ6RmiighgfbC?/1iwtgkgV^+HxkNc^kăU"JF.l4Z[,o,1YduVaoj#S$P5$INLv2(f'#a0LV%W%8%7UB6$cMCnNL)g3y8$WaoLăU"B'Q_V[z)(R\Y+^4War$NRi,v#*u.9D32]Yl5O6GfGPfg<7f.V)1/\[oK%'dW.A^ăU"R(uX0ug.J#^/oGStSi-H&tR0B]bE=1R#eR;]WoJpMUEj0-\nj&M;MH'rDrK7G'săU"_%,pe/D1nd^u*L8QL<9%z_1[%?te_.<_:G1r0tX0s=kW\j\+<Ze&pL#+xhwrx6*ăU"PZ(IN0iq^d2$WPr#s4h9?>o];/l4fuBX#Sd&9Gcp.<>K5l$isD.pb2pu0\Q]XR]ăU"xt\6)-a3P1m)%]=*[K%TF.-]Gx4;EK0J,2xS;nSd#IU=XC-gSJnNP&yh8i'8D%wăU"F*K'NE%cQtY^p+t(Z%>iia%G-7wMG-Z2/Q(m5A;J/CcME1j>nDXlrL#EObJa(9xăU"2yAu1R9.TaHX8OjiE>D[cqK)Ja^#:7&A&>0SQ.EsCrP)#G'#/,'edMO1$Yf;xMKăU"?yj7b9.r.n%G2+2q])IVy],rEu8_nRjpZHUcr^#/VScX[NLI#(z2QZHX31ug/TZăU"HUp9Hh$hNEgh<e1&EwXK(RM]3$Dw>uxp]b*PoVI.?;qpTfN;Z\Q2*ioO,'I/z&LăU"7*<h)G20jn2NBu3])>Khf)[uNA7d<LZdPSgq$?ai+TILxZV.?^0t6/cy7\+\vD1ăU"=[?7_.-_9nAM:(Otfubo$rt%1iAMCTNHfl3r>vlW_w7,nT_o+,:Le6uUZqcUf:#ăU"7>FPn9ig+,C'qj/R?IFr,3]i4BMc:?f\Uq93>%j<o<cX<SHOF:V7VJZGXR+8]lGăU"d('Y8A>MtRq1hRIsXjzYn+Z;Aa<\?)EI_An-3GHhVfk^q3SNa5F#(aTw$70>AW'ăU"VerJ68%%up&%'9%9%%%%-:%X1v+FPxB%(h5%(%3x%%%,%%%%%%%%%&%E%%%%%%%ăU"%%y%lfSf%xrup%&'9%%9%%%[-%z17vFRN'kYN6.%%$l%%%,%%%%%%%%%&%%E%%%ăU"&75%%%ylfS%gfxu%p&'9%%9%%#%-%K'0vF>=HrYp#1%%g%M%%-%%%%%%%%%&%%EăU"%%+%/F%%%ylf%VSgf%xup&%'9%9%%%%-=%'5uaFVyg-[91%(%^T%%%-%%%%%%%%ăU"%&%E%%%%L#S%%%.nj&S%gfxu%p&'9%%9%%#%-%R'-uF]q<C0t%&%%c%,%%-%%%%ăU"%%%%%&%%E%%%%2$%(%%nj&&Sns%hup&%'9%9%%%%-:%R-uFF/0S&#_+%(%z0%%%ăU"-%%%%%%%%%%%E%%%%S#b%%%.nj&S%ugqu%p&'9%%9%%#%-%XB1vF6VR[\I#*%%%ăU"%;%%0%%%%%%%%%&%%E%%(%]h%(%%nj&&xzg%Sgfx%up&'%9%9%%%%-%*tbvFadTăU"YI%5(%%%M+%%%/%%%%%%%%%&%E%%%%Vn%%%wj%firj%SVxy%up*+%%%%%%-%-%'ăU",&%%&8q%%%%%ăEND SUBăV2ăCLOSE:IF S=244AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDouglas H. Lusher              SCREEN 13 PAGE FLIPPING        FidoNet QUIK_BAS Echo          10-17-96 (09:38)       QB, PDS                151  9910     SCREEN13.BAS'This code allows animation by "page flipping" in SCREEN 13.ă'SCREEN 13, of course, has only one page, so this pageă'flipping effect is achieved by creating pages in maină'memory and copying them quickly to display memory. Theă'system works by assigning each page an integer variable nameă'and assigning to this variable the segment at which the pageă'starts. This is the value that will be passed to many of theă'asm routines that I've written for various purposes. For example:ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCREEN13.ZIP",4^6:Z&=6799:?STRING$(50,177);ăU"%up()#9%%O[-%L(mvF+E=VP))%%%z0%%%.%%%%ij%rtVS#gfx\h%,>\.[5KTuIxăU")p__BAq>[U2Mni(sY:]=Ge:SfSs9SaK75<*pmqds%1?874p,L2r3IV1'qu2,,,WăU"<dY94c4hSu$)38tSbVm5Iw#'2vf^49L#18^$HWu3jVrbqFzr3uTk$BX-[N2\JZPăU".YegxPN,>F^k,]>G3_ko.$4ac5hg#E,Hc;_?6U.iRl$l*q=]:d,#JP3VY.Zvf?băU"rr^*I65W9^&8FDb_04G/(w8>p9&HE)*m;-b5AF0;Pn&?9RR>R=#]6NartA%PoBeăU"mIff^\F&MT\gNT$q&Z(%ievbLQB#ZZPZZW>+LFR+.IsYELfG3;O3)Bq9Ay[>l?8ăU"ma$8(VwJ/pwS(./B=aNLVE:ja6B];?y&'m&[75MwXifVAQm$*ed%DJ9INegS&luăU"dL3)6lZ_&&EM1m?EAMf\O6^wSg92HB.X-A:Pn<0(Eb3)CE'uPOZpAfdpQvCqsb-ăU"k8ewc+SO4;ThiJ2n3'U7;fUz=S,N61C2Bxu%reKeoZq.5gD:\E#8&8M\g?fP+AMăU",E3pGOI3h:K1l%AzhSms*%To?G[BF]hX^gpXe;Ujfohqo]5(;_XSOehC#9r=XNOăU"jjaP*+:Mca4ElU02wk_m]wVQ)I6/H=b36Z>ZCc'_ux3M.20uZZc5xW2;i]Y<EuMăU"c-df3d9Uk>&Z1ax.IWV-3op7pXQ/;LR8:nl,>1$<rlB6vv^,V=;oJI[Jr&bU;NrăU"1&tUHH0U#dSIqbpTrIRrtzmZIR5\K1QDc=2d;wBa\cZPrQI-^sW0g9)v;H8Pj80ăU"3P/q-HZ.J+=1EG3I#2p]OJJTrfR[;txm1-IOU;k[=p^.&896H_(3uB6((S2*f\(ăU"/D9T&J#aDt(INTif__5yf%_L4*6B%WoNYPzo0z[zvM,'du-ieh-0%<DTO,#;\8JăU"Ais_wL'Xn#3n6#m#WZCM)C/-&W^8t*S4o#Y[oTBBW5&+Y=n2fH,]#P(RnKE]g6IăU"BYPTI#:VR'Zw0TICJ^3mE5GcjyIViRVb7-s6W4n-[ZJ'CfUGKX20.x+-<XS+9Q8ăU"WNNhLy8,Gm_J67=l_/]ciG1n/]ln%gmTuRcfJA9awfWKK0?D^1o9aoFuY(*/$a)ăU"()ErN7lxvA9a*7U*/7e?rcFe_+FNC;ZgRktn\cuil/evru(uPW9ic(9Xb'-dRiqăU"$q6m*fj6H)8pdpa0kM\X/Wd9MdO)ApfPRo&]>wesa>/(mb2uPzBe86H:?qaxVpsăU"T4CYW[>O0GhePpcUWwAOf[Hd&P?.Dv>z(nuG:ffDo,YE39)c9sa?by;6M1oif2iăU"BHSWb*:r,#6FXRD\cR.5]Be7N/[6Db9V]\x=bX\LS:J*f8Q0Km2L+hf6LG[PaV#ăU"56nB6NJ5vF4[e-1q;xx#mRyK$*0/nrLq.9fJIPK/2UpU2vPVrVxCqo1q6dHl$o<ăU"T1vWV#GtmIE],Jzw\x:9B+yOb6azT(pM4aP/qb-HPq#CV(KbBxaTM+XJEFAO&]]ăU"Rd[cL0=]%vV65XT&do2uIMVlB>P+/Y]&u*gN&u%p()9%%%%-=%G'v.F%>k-f6*%ăU"(%N6%%%.%%%%ijr%tWSgRfx6&;<>[kO5w-xEx09T\1S5R#Kl8C<&3)83I#/&bfQăU"z8^]0(g/Pr<xu;vsgZE'PS8gAvwUNXfhMHmllc0Ve.B#7+0m/&EQ:OUq>WKG>/8ăU"m)dj*qcg7G>+U1CN3V;7w+TU>*uu8Cy&$g5C#]X:Yii9-HQJ<KSsF/J\BgKWfO^ăU")SF3P8=BxW?SO#E(htE/\Lsk809[zcErWKnO0VQfQSH0e]b+8eW4KjY;*A0[pc,ăU"K:4&Rn&$OgWZboh(7^0URrwhf>5w-_$TlaMeIQYE<]8TBe<<rZU?:jQUsu'^B1SăU"'D6+g9i4'-$7HA],]th/Y07Ccr63$to_)1^_%/ZwBYDG8S/YT?+D+RjL.MR.qIeăU"'dDwNoqhV?U+qux0bo4\HifTIR*>2p8ujcFYOLY===M9<GW_b>^N06Zm]qFi-IYăU":alcjL]kd*Gu0+VN>;vk>ig=fT-m\j<q:,_)v5x0<7'+EXFUZ-$b>,>D&:enTjLăU"dW9NqQKmY9>(1A:b32.DU/^=$wYfH_*aH6UZLd&7?7$?<]ZW[wC)g]u4qbx\;CZăU"&'Cgvp$:_f$2?K#?+O%FymRWlSE7[y<&Z2Hq[3:B>CDjB##Tq/^Ydb?SD9f9>9văU"<Z6#dB$&C[7kSsn<nz$CZhJknZ,458)RSf9P>Z$T9JA/n)g4Q_2zr.Jpur>*\(1ăU">HfFGkFJ'):m05p?8VeA+7s,XQg4M58/,GC=wE%/;uWd4)2f,pTB2vPy8OQDa\+ăU"w=a(trBr.6jIU4eyITOOTJ1P=o%rSK/i*/l4(d?'Nf7zDLc[w7I>8KoJyxup.&.ăU"kiv8y$7?-x%/52&CS&op*LUe(nB+,VhEoEV%cwDWDE$zo&B6=;v(:yAX\I#CscoăU"-,PcuF>SpY^wDbS%+r^.S,IV[rYX//N;wFQg])0gE[W^[6.OTcQxO#zEsygEQ?.ăU"G-+:Z]+E0\7-42s';w;RJQzdR,el].c,>/&gDF/#,jrWmDpF.R4r3/n4Bm^2ivuăU"0UZU-)g/8//AKijI\[*rh9H95-(=2,<:YmA1&_8RTKNb&G)R_:KhkTGc3>UMr7săU"l?U9;b/KndA>rGIy_mhhV-NYqoR8x??vV#UiC]9Ammc4nNTS^mk,$H2p$H/)bH'ăU"8t#qWt=qKa,+q_Nq\5^xx.;XHfl:<0X)BUI,,$h3k*U_7o$2\7&^HIv.g#w+\/RăU"hY)$\rUDu,%Ek6Mgj^Chj$eNt6p:bKRbXSwM&L?WU00cI%\7K^JX^^0)yOdFcYvăU"f^:vE9kWT\sx7BWu#hBP3Gz-d$b5xKTep3JZwX&M>l03RW/:],sT/F0iJe8q#IPăU"iw.#;&m[q(f/-(iyaOcZLX?heZnHV9se^=P<j%loy=?r]B<EhW?OWBR^ACnlkPFăU")b/PA[-W33vYxiQnJvq8r.J\mzVL0#l#k&VLAVwEAJu.<VQCK8ZA_JXRnbDg\H9ăU"/kp<H:kxb7tCo'yAk.Ck:0=NpV<D7E7#?NxdLP>/Vtdt\d7ZyZ?t-qhL7GmYV>MăU"ZC$^0>nuYJ;_'PX[MLqJ:.S%ICbd&vqoB^Fa\e2:)(ua?&bGtJ[%[rFJE_CN'8KăU"gsF:_JpA4fJel[UlJMd%^H3R3*2&Nt0vM2nN+(6m<?\jgTC2>.lSHP\+i\q3mb<ăU"eg4Ph\;Z2hB[GWxa/u[UjH2L%(k#MG=%+7WFMl1kq_bz<19cFAs&imP>8qzLbT3ăU"$)m45s;N/>?=f^Lo?+:15xizjY>cdDSh#3daQ3^O_G6\HO5e+dr?086gR(hR#1lăU")u-Xd,q]]3<#;MJ7V,d[#rMmEJLY^#g^LB=&S2AFba^Ch:FN'suI]?\^%LxA2XkăU"dm/pArq.SkgOyV.k6A8ieW/,S7S>+Xx'u%p()9%%%%-7%1'vFF^cN&_x&%(%M&%ăU"%%1%%%%xhw%jjsV%XStg.oz^$%mHv9GUx$hOlAzYA<QQL*9?#fK;W3=77FG1)hXăU"vFa3+IV\=6<KLM'X3(E7HG+/jz=W:)*Xm5uKRS(//E[&r6A?W4D;QTukJHwh$?JăU"F7W<PM(&zCdD_6K1pjVgXO9_VYEBXE4hG2JesL^W&G+8hGUk*[rKXDeC:.5$(^YăU"]#$-Ns#KK.igqq1[%l97d/eF\J)NNCEVib*l1zl=&QZ5,+.PQ)1_OaN1s_VY5B\ăU"Wtv3,O5]pk]bm=9q*LX($]tT&g[?6t'L0L'cQ^)A_2d=IjnC1wP%\-A?'P6+i'LăU"j,:?soR-+c>7IjP-vid]j2MvKgt7sw0LG1D(rNH2.Z=Apa]cD$0eTo[?Xg*r<#răU":2'(IvRSfxu/iddf&OSvs2C3[+&PbwIt.T0O<L<OoB7L8aJ8aicV#6Z6fgaEju4ăU"d8M(%up()%9%%%d-%('dvF*h-T>Z27%%r9%%%1%%%%xh%wjjs%VXSvRqgff)LGxăU"z5m#NnD==_8IR]/4A'KB$\x3zMR+=.e(h.wo(RL0YR*_FsT(9s5hAbqGXQN3RBnăU"gj?=v+Ga=EA3M:S'OR<;i7u;/x#6Ag&pDj,:#Ldk>U'ZNZbalvWbDo1TH,Zxhl;ăU"YiHvmlltlls$$uGl2puD8%JI4A8XRu.McRKkq:B09I[+6V$PgusfLvYaf)=])P1ăU"u3SM/OOb%)C-;R6:;9iWQ.&-,,e+4a*L<:VY?%U?+r4X:;UL<sPV7f;A,Dt/:w1ăU"':P<.a&m+iHPLYb<iSa:,v9*J?.[Pld97=(=/Sm.(4RQ\_4o:[Ou*O.'TG'.a2măU"(\*f55j/oP06:4oDek'69C*?.[2P:/7(mufxC'g358P^YC%UDa'AAe&'%3Oe2\7ăU")/qC>G+;I'TQ&99CiKI])]Qk2YLi+#iVULFfX/+OqSm+',e'T6,TJ,ubeF.PRoOăU"8))keF.aW'88$q:9Q0W'$hOzi,LXujhZ\%S+&w.1&QXeW)(8B]73IBo'LeX]U'IăU":bn5PvxZ$xO65TsTp*F\$WYl77;qa6Q4>INU)l.IiWT$Z5o2MbIW4xFdLZ#p2NSăU"AOg5]\1GhAl>LwlFo.3J(ZJKm+X-BTc\atEn$jnb,*+k\B<4LuHfJB9j\YWG9'WăU"f72&4ckQ,zPLc0^qZ:]q:ZBgCn;ka-+P?em0NP)fxDnwh9>A3f/TrLM0Ktdz=ubăU"^f/r'$vBJd(A&2NYi]njQc*fMc>Sr6%kW8jS8hQW4mfQPQnfuPSf6JW;,G5TC+JăU"N>xnE-G4gvKrOg5PWG*2;VB-g1#?;0EgQW*Kj&:GOx-:3*4LibN4ANKi(acW3$jăU"acrY\X/fXTtp.,G*HlZv$XOL#^;0&AoH?m[adXwp;[cgr>Voj>V_)[=xkK0JrJSăU"8k0k7;Bv#:_1R76r_x8A2YTIHTIxL).__agTI&MTOtgPZa5p?,^3rs9L'l.Yx#iăU"sijy#U=]Ta/#6jcE)T[9^'$/n9HrI:a:NAC:;YrAVG&Ao$3p+p)>Ym1geX9HTC:ăU"io$g\,ph:w3(P(YlG$D,pIY1),p>:9HJ:/in$S)&7;jMmDT;:9HS:0s&\cL>DT5ăU"ELw'hChrr_R9?&RKUrr=*A+?R&^CF?Wtk-JG,P],L8Cly6dmgGYboW?$w\8+A;UăU"wvsRG)DM97.ce7EN7fnXNg8#^J5IzP4D/XvDni4\UG+IBu?$wz#4I81z;A,<y*IăU"GJ2VI\3,m8xZ4tmBqFv.KZF'Y.e'Il*-3m7$\mx^IrjuJWGF;UUaXKpG&G,&FLiăU"(,AiPal.[Jvawu>^mlJZd?-31p%cpB(S#N#epmjs<P0S)mWs09irJ9p#hD+fT=qăU"oWB?Te6;:b?#<#73EIWXLI,hqMKQdesW,R]]T'RjB#3KnHDYoc[/,VHML#nZ$tKăU")&jPL%tQV7d:$RBG7LB&:Aj=>ZxpYA4+(qGV:b)^;ss47mRc\/1B?SPq=w8PX+făU"/5/CLW#U(v?x6&:RUVzZ02)1)\Z.fz[N)9AlI(s*k,4H^JN0c+2nuRqWCbdwmCqăU"R5x$6*Nxh>z<j\XQS&3Ssr<xAv4o6:Ths,g3iI_-S<Tv]qa22K].Hce[o+IMXVIăU"Ghc;e<cfou9Pms:JuhbJjL\KULHS)N9fK4?*0RMtp8mjoM8AW^Ur.^8*Px(L?h9ăU"&.7Wx^c_iWpvNrw=9'\mobR9jL2RXN1LoifQ1RkuojGOk]gJ?p4-$JP_b]1w5JGăU"YuIlWCb;GZVJwEd?o^oC18dc:sHNGYm]W/3;2XJ98M]3b8%2XDSLNv:=J*\4Ma9ăU"]Fg=d:JThl'cq&i''W5CK\Av&s2l3&QS473e=R4R^FAC1m$7PL]/^oo8k]f+GD.ăU"%7;xL<lv]%jHiol*6&TmyA%=oXwuAgPYcsr4\<4gk_^'G^e8'$Q:c<Dm.O%TLZLăU"DSDMnRfjbA+Mmgh)M157X^nqST&4/,NA12cZ[j,tY3&g[BI=MEe_c9HgQs&eXjAăU"nsviE$0-Jki<0JfaQ[8y0Hxnu[I0V0FFoimMkWM-4]I6kAv9q-Zowj]&6v233y_ăU"f%K-?f1[[T(<mHkP).AD0ru;r6+O]r8EQ3Q4Oam[C^sb2$*FnSlW6uh3Vu0rYUlăU"v2S10.d#3)4/owhxl5LJ2M<YFuLL$6.?foJ6Jut9vYkPY^jd8'T-&/K/hjMRRrXăU"VLuo1X%'U-o3-DF$aBNS8JxRMG[x4t#1Vk<ueioFa2HTcc;/CUx=>%<Xq_=^$B8ăU"Di;ZxKu0)\16mM\/ukZ7ooDbJak]Alc2T]PN\vl3[nOBC\_FGlLQ*HPNHTSND.SăU"\EGL3=9F=Jg*F].UvvEsp'rhaoVjb.tx]OCnQ8&e\jblTNfw9.dgF9TvkrJZIXgăU"nvHSX)pKiZG>VMx\v,UfYs]*-=a_)=;K4GQhkLV,^Nkr\J;_68GkR^jcHR'GU;AăU"o2oGC]eFFG;B5eB(;S63GAU^*;((C6p^?D$ev'G/^Pl_%S,OwGkkqd#_[W%k,dYăU"k&[;CZ6zkgzB%<J(R6Dtk&Z%YP,.kZ&\%$W,5G)1^J[X^T6cGX9Gukd*]:\We#GăU"Mc:RkGU[#/hc,$^TH;R0k><\ejlGwi,rfk6=lRDkfE_;46W(#/fZ,8^;Ld6>#qEăU"_,0s^d_ep56x90R$kBHZeM6VLknB=[9RV'G+^$oG>otGLG]6LD?EiK,XklH^eA6ăU"T$^tW<,0GSn?[;Ri#kL;lR8?oF$GSAKoN6fj]tk,PN^;[K,-6&s]4?RV&kvX-,dăU"]V[7U(]#^?,_$ew:UR'7:.Za$jEs$JGlNQh.RH4-BqJ8y-c:z-]M+TGOTMEc66_ăU"d6$C2f5dT)D3<R)*%yMpxev8sDlT=?Xxw>VjY<;Tm\Gu-XI)Crrjj,itw4,?i>'ăU"+337yi.H(Tr]0>Y6h9AXshS8yIOnV=eLAqMzX9,HanMNsH\$OivpC8'I.*wpusKăU">[]+obgp/t9p:Salmzqa1\(Gb_.J,jmXvoXE&#D^C(Dpo8;7jz3&Q/Fmd+gR&5SăU"URtBiEgbW-6Nmoi]fikc;$5S\,rWLGO#bLxOoMVtYB$-E>nbod=of)#&8g?G=r(ăU"d?)d[+r-\E.g8>ZDg;6i&g0hYn:6f_h(,qx'XbXsH_J..DgETS;gJ\g&igPSIEUăU".sF2T&^fUp[^#Eh8Xi'X\\8)oq\af4_Fdg30h.<NsYHnZI6_DGqx&BrY4&vj6ljăU";CcWa8qI)E<gqngLROYx6q5(Q8aY#.t&S^Rns#hXF<MzrJ^aFYt(RAQDLnA^7;NăU"V5xWa^]v5TGf\j-FaT8T;DRsgD]8C<)N&SYa%dpPS/B9H-t+c6xkrm<g0aM#QIkăU"+bkxgupdo<*k*g,3]nY]+DA,iZv5uyrIZkH)TMSdaNm4kQ\*LbJRg\e:zqX99DPăU"[y5jaE0j.vp>>YtDi;BD649oOa')ZeV8FRKZ&BPlR#*q69T\Ep'npf,aPU4,&:băU"t'z3ZObSoV:b'^rbya3,-P2;eh+oHOE7uyguX-96q#o$]Yd+ttz3gNlnhCV;^ESăU"dHMVgXTUzWD]NoH2Y:PP%C,9Z<suAV]_87K0u(NLOT%>VmpK.6gVAJu\=c>\zFMăU",]B,X\&$XqN3zGIF_n'+sPY%YP^p9DuKb62DkpcUDB^TDv':ZnOs9F:CS?2qF-văU"NbyQtAT3]iiv\\Nh:9zP1v#EvBjo]l-.C/l5o/(6TV9(v%:d_BQD>o(&tP/BhttăU"c43M()w^'#.Ba<.OpDYQW^oPLsr4?cjbS'H_mSbzf8t;%K_DWArZ-(&Z;QS\*&'ăU"\vam^eB2F6BEu^a^1y25:6-tJ\\%7#iwipDxtK%G7o\X2pk^\p^:dJ5(=?SANY4ăU"BCeweRf0*XM5)/7h&I?:InwJYNIOmLz]'o:_/n>*kDE;>qbELPoYo3'pK2sSxM=ăU"y8;BO0c<8+\op)x8--qj&jt;9:-GpKo4.2<?J:]Jnp,Q(ZX)2[dr4MQ9\epP^KKăU"ic:T<^6jioLrN<L)2ZmyJbl(RIgz:%Q/ThhRJ[6p[v#2B-52s9=(.WKcHS;hQ0.ăU"U5:vzlyW\YbYGeSSGs:mLD'Q4AG9fQMZ1Y9z;pfTwR&?XSoJIqc)D91s[W]:IA*ăU"g=.YfOZIc?n9s^ASVuzpro.7+.$nPNq)2&V<jV=&N8sg[edRWlsc>$jzP'(m#(]ăU"E(SD]/XD)#]$-rU#+nRj^O]<qmqj(cG3B+mN(/(sL+:'MMDogN*5+j9+Bq_->D;ăU"OTYfRM5\3dokQoJsmO.XRS/)f4;91942q<6OpcQ9PPB;fhvM^^&SDmOO9L'dd%uăU"%p&'9%%9%%%%-%L](vF+oEVP)%)%%z%0%%.%%%%%%%%%&%%E%%%%%%%%%ijr%tVăU"Sg%fxup%&'9%%9%%%m-%G'#vF%>=kf6*.%%N6%%%.%%%%%%%%%&%%E%%%'P)%%%ăU"ijrt%WSgf%xup&%'9%9%%%%-7%1'vFF^cN&_x&%(%M&%%%1%%%%%%%%%&%E[%%%ăU"4%/%%x%hwjj%sVXS%tgou%p&'9%%9%%#%-%(B'vF*?hT>Z[2%%r%9%%1%%%%%%%ăU"%%%%%E%%%%]1%%%xhw%jjsV%XSvq%gup*%+%%%%%)%)+%[%%(%f>%%%%%ăEND SUBăCLOSE:IF S=68AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJoshua Dickerson               FAST CLIP PUTTING              FidoNet QUIK_BAS Echo          10-14-96 (16:25)       QB, QBasic, PDS        55   1337     CLIPPUT.BAS DECLARE SUB ClipPut (x%, y%, BitMap%())ăDEFINT A-ZăSCREEN 13ăDEF SEG = &HA000ăăFOR i = 0 TO 63ă  OUT &H3C8, iă  OUT &H3C9, iă  OUT &H3C9, iă  OUT &H3C9, iăNEXTăăDIM a(4097)ăa(0) = 63ăa(1) = 63ăFOR y = 0 TO a(1)ă  FOR x = 0 TO a(0)ă     a(y * (a(0) + 1) + x + 2) = (x * y) MOD 64ă  NEXTăNEXTăăt! = TIMERăFOR x = -30 TO 320ă  ClipPut x, 0, a()ăNEXTăPRINT (350) / (TIMER - t!)ăa$ = INPUT$(1)ăăSUB ClipPut (x, y, BitMap())ă  tX = x + BitMap(0)ă  tY = y + BitMap(1)ă   ă  IF 0 < tX AND x <= 319 AND 0 < tY AND y <= 199 THENă     IF x < 0 THEN MnClipX = -xă     IF tX > 319 THEN MxClipX = 319 - x ELSE MxClipX = BitMap(0)ă     IF y < 0 THEN MnClipY = -yă     IF tY > 199 THEN MxClipY = 199 - y ELSE MxClipY = BitMap(1)ăă     Index = (BitMap(0) + 1) * MnClipY + 2ă     sM& = 320& * (y + MnClipY) + xă     FOR bY = MnClipY TO MxClipYă        FOR bX = MnClipX TO MxClipXă           c = BitMap(Index + bX)ă           IF c > 0 THEN POKE sM& + bX, că        NEXTă        Index = Index + BitMap(0) + 1ă        sM& = sM& + 320ă     NEXTă  END IFăEND SUBăă'   This is meant to be compiled, but I will convert this to ASM complete withă'a basic loader which will put it in an array to be CALLed.. It is slightlyă'faster than the routine employed by Eric Carr.. (Which was pretty darn fast..ă':-) )ăBen Kaashoek                   STARFIELD SIMULATION           robertk@worldaccess.nl         10-19-96 (10:23)       QB, QBasic, PDS        177  8006     STARSIM.BAS 'Check out the difference in speed when you turn DEFINT A-Z off !!!!ăDEFINT A-Z                              'Use integers as default for speed.ăă'The starfield code itself is not mine.ă'When I got it however, it needed some speeding up. First of all I added theă'DEFINT A-Z statement. (I use this in all my programs.)ă'I also found some unnessesarry statement's and removed those too.ă'Then. A friend came with a rather interresting suggestion.ă'"Hey, why not add something like a comet?", "Ok, I'll try it."ă'I was a little suprised when it actually worked.ă'The comet code probably needs some fine-tuning (it's only in there for a dayă'or so. But I'm sure somebody can find it usefull.ă'Oh, almost forgot. Many thanks to the original author. I hope you recognizeă'YOUR piece of the work.ă'                                           BEN.ăăTYPE StarDataă xPos AS INTEGER                        'X position of a star.ă yPos AS INTEGER                        'Y position of a star.ă Speed AS INTEGER                       'Speed of star (Parallax effect).ă Colour AS INTEGER                      'Colour of a star.ăEND TYPEăăTYPE CometDataă xPos AS INTEGER                        'X position of a comet.ă yPos AS INTEGER                        'Y position of a comet.ă xSpeed AS INTEGER                      'Speed of comet in X direction.ă ySpeed AS INTEGER                      'Speed of comet in Y direction.ă Visible AS INTEGER                     'Is comet visible.ă TailSize AS INTEGER                    'Length of tail in pixels.ăEND TYPEăăCONST False = 0: True = NOT False       'Boolean constants.ăă'--- Program settings. ------------------------------------------------------ăStars = 100                             'Number of stars to plot ?ă                                        'Adjust if starfield gets "animated"ă                                        '286/20 => 100 and P100 => 600.ăUseRetrace = True                       'Use retrace in VGA modes ?ăCometSeed = 100                         'Create comet every ... frames.ăCometHeadColor = 14                     'Colour of the comet's head.ăCometTailColor = 4                      'Colour of the comet's tail.ăScrMode = 12                            'Which screenmode to use ?ă'--- End program settings. --------------------------------------------------ăăComets = 1                              'Number of comet's (KEEP ON 1 !!!)ăOPTION BASE 1                           'Start array's with element 1.ăREDIM Comet(Comets) AS CometData        'Create array for comet'săREDIM StarField(Stars) AS StarData      'Create array's for stars.ăREDIM OldStarField(Stars) AS StarDataăăSELECT CASE ScrMode                     'Determine screen boundaries.ă CASE 0ă  PRINT "Sorry, graphic modes only! Maybe next time."ă  END                                   'See ya later.ă CASE 7                                 'EGA 320x200ă  HorLimit = 320ă  VerLimit = 200ă  UseRetrace = False                    'Disable using retrace as delay.ă CASE 8                                 'EGA 640x200ă  HorLimit = 640ă  VerLimit = 200ă  UseRetrace = False                    'Disable using retrace as delay.ă CASE 9                                 'EGA 640x350ă  HorLimit = 640ă  VerLimit = 350ă  UseRetrace = False                    'Disable using retrace as delay.ă CASE 12                                'VGA 640x480ă  HorLimit = 640ă  VerLimit = 480ă CASE 13                                'VGA 320x200ă  HorLimit = 320ă  VerLimit = 200ă CASE ELSE                              'Anything that's NOT tested.ă  PRINT "Unsupported videomode."ă  END                                   'See ya later.ăEND SELECTăă'Initialize program.ăSCREEN ScrMode: RANDOMIZE (TIMER)ăă'Fill array with random stars...ăFOR I = 1 TO Stars                      'Fill 'er up.ă StarField(I).xPos = INT(RND * HorLimit + 1)ă StarField(I).yPos = INT(RND * VerLimit + 1)ă StarField(I).Speed = INT(RND * 8 + 1)ă OldStarField(I).xPos = INT(RND * HorLimit + 1)ă OldStarField(I).yPos = INT(RND * VerLimit + 1)ă OldStarField(I).Speed = INT(RND * 8 + 1)ă SELECT CASE OldStarField(I).Speedă  CASE 0 TO 3: OldStarField(I).Colour = 8ă  CASE 4 TO 7: OldStarField(I).Colour = 7ă  CASE 8: OldStarField(I).Colour = 15ă END SELECTă SELECT CASE StarField(I).Speedă  CASE 0 TO 3: StarField(I).Colour = 8ă  CASE 4 TO 7: StarField(I).Colour = 7ă  CASE 8: StarField(I).Colour = 15ă END SELECTăNEXT Iăă'Fill array with random comet...ăComet(1).xPos = INT(RND * HorLimit + 1) 'Pick a random X position.ăComet(1).yPos = 1                       'Always start on the top line.ăComet(1).xSpeed = INT(RND * 4 + 2)ăComet(1).ySpeed = INT(RND * 3 + 2)ă'50% of the time the direction of the comet will be altered.ăIF INT(RND * 2) = 0 THEN Comet(1).xSpeed = -Comet(1).xSpeedăComet(1).TailSize = INT(RND * 20 + 5)ăăDOă IF INT(RND * CometSeed) = 1 AND NOT CometStart THEN CometStart = -1ă FOR I = 1 TO Stars                     'Replot all the stars.ă  PSET (StarField(I).xPos, StarField(I).yPos), 0ă  StarField(I).xPos = StarField(I).xPos - OldStarField(I).Speedă ă  IF StarField(I).xPos <= 1 THEN        'Recalculate if star hits lower limit.ă   StarField(I).xPos = HorLimită   StarField(I).yPos = INT(RND * VerLimit + 1)    'Give star new y position.ă  END IFă ă  'Enable the lines below if you plan on having a left -> right effect.ă  'IF OldStarField(i).xPos >= HorLimit THEN 'Recalculate if star hits higher limit.ă  ' OldStarField(i).xPos = 1ă  ' OldStarField(i).yPos = INT(RND * VerLimit + 1) 'Give star new y position.ă  'END IFă ă  'Put the star on screen at it's modified position.ă  PSET (StarField(I).xPos, StarField(I).yPos), StarField(I).Coloură NEXT Iăă 'Replot comet (This part is needed when the head is NOT off the screen.)ă IF CometStart AND NOT CleanTail THENă  PSET (Comet(1).xPos, Comet(1).yPos), CometTailColoră  Comet(1).xPos = INT(Comet(1).xPos + Comet(1).xSpeed)ă  Comet(1).yPos = INT(Comet(1).yPos + Comet(1).ySpeed)ă  IF Comet(1).xPos >= HorLimit OR Comet(1).xPos <= 1 OR Comet(1).yPos >= VerLimit THENă   CleanTail = True                     'Start removing the tail.ă  ELSEă   PSET (Comet(1).xPos, Comet(1).yPos), CometHeadColoră   TailxPos = Comet(1).xPos - INT(Comet(1).TailSize * Comet(1).xSpeed)ă   TailyPos = Comet(1).yPos - INT(Comet(1).TailSize * Comet(1).ySpeed)ă   IF TailxPos >= 1 AND TailyPos >= 1 THEN PSET (TailxPos, TailyPos), 0ă  END IFă END IFă 'Remove the rest of the tail if the head is moved off the screen.ă IF CleanTail THENă  TailxPos = INT(Comet(1).xPos - Comet(1).TailSize * Comet(1).xSpeed)ă  TailyPos = INT(Comet(1).yPos - Comet(1).TailSize * Comet(1).ySpeed)ă  Comet(1).TailSize = Comet(1).TailSize - 1ă  IF TailxPos >= 1 AND TailyPos >= 1 THEN PSET (TailxPos, TailyPos), 0ă ă  'Create a new comet.ă  IF TailxPos >= HorLimit OR TailxPos <= 1 OR TailyPos >= VerLimit THENă   Comet(1).xPos = INT(RND * HorLimit + 1) 'Pick a random X position.ă   Comet(1).yPos = 1                    'Always start on the top line.ă   Comet(1).xSpeed = INT(RND * 4 + 2)ă   Comet(1).ySpeed = INT(RND * 3 + 2)ă   IF INT(RND * 2) = 0 THEN Comet(1).xSpeed = -Comet(1).xSpeedă   Comet(1).TailSize = INT(RND * 20 + 5)ă   CometStart = Falseă   CleanTail = Falseă  END IFă END IFăă 'Using the Vertical Retrace (VGA+ only) keeps the program from beingă 'affected by the number of stars to print. If you use 100 or 500 stars onă 'a P100 doesn't matter. The VR will keep everything going at the same speed.ă '(Within certain boundaries). This method works great when used on anythingă 'faster then my old 286 :-). I think it has something to do with theă 'frequency of the monitor. SVGA's have a much smoother parallax effect.ăă IF UseRetrace THEN WAIT &H3DA, 8    'Wait for VGA vertical retrace.ăă 'Put your nice scrolly or something over here.ă 'LOCATE 14, 30: PRINT "Starfield Simulation..."ăLOOP UNTIL INKEY$ <> ""ăKurt Kuzba                     DEMYSTIFY SCREEN SAVER         FidoNet QUIK_BAS Echo          06-11-96 (00:00)       QB, QBasic, PDS        55   2548     DEMYST.BAS  'I synched the program execution to the vertical retrace.ă'This keeps the display speed constant on nearly any system.ă'_|_|_|   DEMYST.BASă'_|_|_|   A program that demystifies the mystify screen saver.ă'_|_|_|   No warrantee or guarantee is given or implied.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba.  (6/11/96)ăDEFINT A-ZăSCREEN 12: RANDOMIZE (TIMER * 1000)ăTYPE IntersectPointsă   x AS INTEGER: y AS INTEGER: dx AS INTEGER: dy AS INTEGER: END TYPEăDIM lnx(60) AS IntersectPointsălnx(0).x = 0: lnx(0).y = 0: lnx(0).dx = 0: lnx(0).dy = 0ăFOR T = 1 TO 59: lnx(T) = lnx(0): NEXTăDOă   WHILE ((INP(&H3DA)) AND 8) <> 0: WEND  'Here's where I keep the speedă   WHILE ((INP(&H3DA)) AND 8) = 0: WEND   'constant for almost all systemsă   FOR L = 0 TO 5ă      IF lnx(L).x < 1 THEN lnx(L).dx = 2 + ((RND * 999) MOD 4)ă      IF lnx(L).y < 1 THEN lnx(L).dy = 2 + ((RND * 999) MOD 4)ă      IF lnx(L).x > 638 THEN lnx(L).dx = -(2 + ((RND * 999) MOD 4))ă      IF lnx(L).y > 478 THEN lnx(L).dy = -(2 + ((RND * 999) MOD 4))ă      lnx(L).x = lnx(L).x + lnx(L).dx: lnx(L).y = lnx(L).y + lnx(L).dyă   NEXTă   FOR L = 0 TO 5ă      IF (L MOD 3) <> 0 THENă         S = L + 54: F = ((L + 1) MOD 6) + 54ă         LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 0ă      END IFă      S = L + 48: F = ((L + 1) MOD 6) + 48ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 1ă      S = L + 42: F = ((L + 1) MOD 6) + 42ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 1ă      S = L + 36: F = ((L + 1) MOD 6) + 36ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 1ă      S = L + 30: F = ((L + 1) MOD 6) + 30ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 9ă      S = L + 24: F = ((L + 1) MOD 6) + 24ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 9ă      S = L + 18: F = ((L + 1) MOD 6) + 18ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 11ă      S = L + 12: F = ((L + 1) MOD 6) + 12ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 11ă      S = L + 6: F = ((L + 1) MOD 6) + 6ă      LINE (lnx(S).x, lnx(S).y)-(lnx(F).x, lnx(F).y), 15ă      E = (L + 1) MOD 6ă      LINE (lnx(L).x, lnx(L).y)-(lnx(E).x, lnx(E).y), 15ă   NEXTă   FOR L = 0 TO 5ă      lnx(L + 54) = lnx(L + 48): lnx(L + 48) = lnx(L + 42)ă      lnx(L + 42) = lnx(L + 36): lnx(L + 36) = lnx(L + 30)ă      lnx(L + 30) = lnx(L + 24): lnx(L + 24) = lnx(L + 18)ă      lnx(L + 18) = lnx(L + 12): lnx(L + 12) = lnx(L + 6)ă      lnx(L + 6) = lnx(L): NEXTăLOOP WHILE INKEY$ = "": SCREEN 0ă'_|_|_|   end   DEMYST.BASăKurt Kuzba                     SHOW ALL COMBINATIONS OF COLORSFidoNet QUIK_BAS Echo          10-01-96 (08:28)       QB, QBasic, PDS        74   2161     ALLHUES.BAS '> >   Actually, that's wrong. You only have 256k (262,000),ă'> >   or 63 times 63 times 63. That's the max for your RGBă'> >   values.ă'>   Actually, it's 64 times 64 times 64, because there are 64ă'>   degrees, not 63.ă'>   Count all the numbers from 0 to 63 inclusively.ă'>..........ă'   Correct.ă'Total number of colors possible is 64^3, or 262,144 colors.ă'For those who wish to count them...ă'( If anybody actually runs all the way through this programă'  without hitting a key, they must be something other thană'  human :)ăă'_|_|_|   ALLHUES.BASă'_|_|_|   A display of all the possible color, 8 at a time.ă'_|_|_|   Hit a key to quit if you like. Produces 262,144 colors.ă'_|_|_|   No warrantee or guarantee is given or implied.ă'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (10/1/96)ăRANDOMIZE TIMERăSCREEN 12ăSCREEN 0ăCOLOR 7, 0ăCLSăFOR L% = 2 TO 6ă   LOCATE L%, 1ă   FOR C% = 8 TO 15ă      COLOR C%ă      PRINT STRING$(10, CHR$(219));ă   NEXTăNEXTăCOLOR 7, 0ăColour% = 0ăDIM CRED(64) AS INTEGERăDIM CGRN(64) AS INTEGERăDIM CBLU(64) AS INTEGERăFOR t% = 0 TO 64ă   CRED(t%) = t%ă   CGRN(t%) = t%ă   CBLU(t%) = t%ăNEXTă'_|_|_|   Thanks to Bill White, ( of Miami :), for theă'_|_|_|   neat shuffle routine.ăFOR t% = 1 TO 128ă   SWAP CRED(t% AND 63), CRED(RND * 63)ă   SWAP CGRN(t% AND 63), CGRN(RND * 63)ă   SWAP CBLU(t% AND 63), CBLU(RND * 63)ăNEXTăFOR RED% = 0 TO 63ă   FOR GRN% = 0 TO 63ă      FOR BLU% = 0 TO 63ă         WAIT &H3DA, 8: WAIT &H3DA, 8, 8ă         hue% = 56 + (BLU% AND 7)ă         OUT &H3C8, hue%ă         OUT &H3C9, CRED(RED%)ă         OUT &H3C9, CGRN(GRN%)ă         OUT &H3C9, CBLU(BLU%)ă         LOCATE 1, 1ă         Colour& = Colour& + 1ă         Colr$ = MID$(STR$(Colour&), 2)ă         txt$ = ""ă         p% = LEN(Colr$)ă         FOR t% = 1 TO p% - 1ă            txt$ = MID$(Colr$, p% - t%, 1) + txt$ă            IF t% MOD 3 = 0 THENă               IF t% < (p% - 1) THEN txt$ = "," + txt$ă            END IFă         NEXTă         PRINT txt$ă         IF INKEY$ <> "" THEN SCREEN 12: SCREEN 0: ENDă      NEXTă   NEXTăNEXTă'_|_|_|   end   ALLHUES.BASăDouglas H. Lusher              ROTATING 3D CYLINDER & SPHERE  comp.lang.basic.misc           10-22-96 (17:52)       QB, QBasic, PDS        276  8552     3DCYLIND.BAS'this is code to draw and rotate a 3-d image of a cylinderă'  and a sphere.ă'by Douglas H. Lusher, October 1996ăDECLARE SUB DrawPoly (X%(), Y%(), Vertices%, Culler%)ăDECLARE FUNCTION KeyPress% ()ăCONST Green = 2, White = 15ăCONST ESC = 27ăCONST HomeKey = -71, EndKey = -79ăCONST UpArrow = -72, DnArrow = -80ăCONST LArrow = -75,  RArrow = -77ă'the home key brings the object toward the viewer, the end keyă'   takes it away from the viewer.ă'the up arrow moves the object up, the down arrow moves it down,ă'   the right arrow moves it right, the left arrow moves it left.ă'pressing "y","p", or "r" increases yaw, pitch and roll respectively.ă'   pressing the uppercase of these letters decreases the values.ăRANDOMIZE TIMERăAPage% = 1: VPage% = 0ăSCREEN 9, , APage%, VPage%ăScrnWid% = 640: ScrnHgt% = 350ăCtrX% = ScrnWid% \ 2: CtrY% = ScrnHgt% \ 2ăAspectRatio! = 4 * (ScrnHgt% / ScrnWid%) / 3ăPi! = ATN(1) * 4!ăăDO: R1! = RND: LOOP UNTIL R1! < .628: R1! = R1! * 10!ăDO: R2! = RND: LOOP UNTIL R2! < .628: R2! = R2! * 10!ăDO: R3! = RND: LOOP UNTIL R3! < .628: R3! = R3! * 10!ă'R1! = 0: R2! = 0: R3! = 0ăD! = 1200ăMX! = 0: MY! = 0: MZ! = -350ăInc! = .02ăRInc! = -Inc!ăPInc! = -Inc!ăYInc! = -Inc!ăăGOSUB InitCylinderă'GOSUB InitSphereăă'MainLoopăDOă  SELECT CASE KeyPress%ă    CASE 0ă    CASE UpArrow: MY! = MY! + 10!ă    CASE DnArrow: MY! = MY! - 10!ă    CASE LArrow: MX! = MX! + 10!ă    CASE RArrow: MX! = MX! - 10!ă    CASE HomeKey: MZ! = MZ! + 10!ă    CASE EndKey: MZ! = MZ! - 10!ă    CASE ASC("r")ă      RInc! = RInc! + Inc!: IF RInc! > 1 THEN RInc! = 1ă    CASE ASC("R")ă      RInc! = RInc! - Inc!: IF RInc! < -1 THEN RInc! = -1ă    CASE ASC("y")ă      YInc! = YInc! + Inc!: IF YInc! > 1 THEN YInc! = 1ă    CASE ASC("Y")ă      YInc! = YInc! - Inc!: IF YInc! < -1 THEN YInc! = -1ă    CASE ASC("p")ă      PInc! = PInc! + Inc!: IF PInc! > 1 THEN PInc! = 1ă    CASE ASC("P")ă      PInc! = PInc! - Inc!: IF PInc! < -1 THEN PInc! = -1ă    CASE ESC: EXIT DOă  END SELECTă  R1! = R1! + YInc!: IF R1! > 6.28 THEN R1! = 0ă  R2! = R2! + RInc!: IF R2! > 6.28 THEN R2! = 0ă  R3! = R3! + PInc!: IF R3! > 6.28 THEN R3! = 0ă  SR1! = SIN(R1!): CR1! = COS(R1!)ă  SR2! = SIN(R2!): CR2! = COS(R2!)ă  SR3! = SIN(R3!): CR3! = COS(R3!)ă  CLSă  GOSUB DrawCylinderă  'GOSUB DrawSphereă  SWAP APage%, VPage%ă  WAIT &H3DA, 8ă  SCREEN , , APage%, VPage%ăLOOPăSCREEN 0: WIDTH 80ăENDă  ăPerspectiveCalculations:ăX! = -X!ăXA! = CR1! * X! - SR1! * Z!ăZA! = SR1! * X! + CR1! * Z!ăX! = CR2! * XA! + SR2! * Y!ăYA! = CR2! * Y! - SR2! * XA!ăZ! = CR3! * ZA! - SR3! * YA!ăY! = SR3! * ZA! + CR3! * YA!ăX! = X! + MX!ăY! = Y! + MY!ăZ! = Z! + MZ!ăSX% = CINT(D! * X! / Z!) + CtrX%ăSY% = CINT(D! * Y! / Z! * AspectRatio!) + CtrY%ăRETURNăăCheckVisibility:ă'plane equation method of hidden surface removalăSP1! = -X1! * (Y2! * Z3! - Y3! * Z2!)ăSP2! = X2! * (Y3! * Z1! - Y1! * Z3!)ăSP3! = X3! * (Y1! * Z2! - Y2! * Z1!)ăVisibleSurface% = ((SP1! - SP2! - SP3!) <= 0)ăRETURNăă'========================================================================ăInitCylinder:ăL! = 40!     'half the length of the cylinderăR! = 20!     'the radius of the cylinderăDivs% = 18   'the number of steps around the cylinderăStepAmount! = (Pi! * 2!) / CSNG(Divs%)ăS1% = 1: S2% = Divs% \ 3: S3% = S2% + S2%ăREDIM X1!(1 TO Divs% + 1), X2!(1 TO Divs% + 1)ăREDIM Y1!(1 TO Divs% + 1), Y2!(1 TO Divs% + 1)ăREDIM Z1!(1 TO Divs% + 1), Z2!(1 TO Divs% + 1)ăREDIM SX1%(1 TO Divs% + 1), SY1%(1 TO Divs% + 1)ăREDIM SX2%(1 TO Divs% + 1), SY2%(1 TO Divs% + 1)ăREDIM X%(1 TO 4), Y%(1 TO 4)ăXtra% = Divs% + 1ăRETURNăăDrawCylinder:ăR5! = 0ăFOR T% = 1 TO Divs%ă  XX! = SIN(R5!) * R!: YY! = COS(R5!) * R!ă  'one end of cylinderă  X! = XX!: Y! = YY!: Z! = L!ă  GOSUB PerspectiveCalculationsă  X1!(T%) = X!: Y1!(T%) = Y!: Z1!(T%) = Z!ă  SX1%(T%) = SX%: SY1%(T%) = SY%ă  'other end of cylinderă  X! = XX!: Y! = YY!: Z! = -L!ă  GOSUB PerspectiveCalculationsă  X2!(T%) = X!: Y2!(T%) = Y!: Z2!(T%) = Z!ă  SX2%(T%) = SX%: SY2%(T%) = SY%ă  R5! = R5! + StepAmount!ăNEXTăX1!(Xtra%) = X1!(1): X2!(Xtra%) = X2!(1)ăY1!(Xtra%) = Y1!(1): Y2!(Xtra%) = Y2!(1)ăZ1!(Xtra%) = Z1!(1): Z2!(Xtra%) = Z2!(1)ăSX1%(Xtra%) = SX1%(1): SX2%(Xtra%) = SX2%(1)ăSY1%(Xtra%) = SY1%(1): SY2%(Xtra%) = SY2%(1)ăFOR Q1% = 1 TO Divs%          'draw the side polygons of the cylinderă  Q2% = Q1% + 1ă  X1! = X1!(Q1%): Y1! = Y1!(Q1%): Z1! = Z1!(Q1%)ă  X2! = X1!(Q2%): Y2! = Y1!(Q2%): Z2! = Z1!(Q2%)ă  X3! = X2!(Q2%): Y3! = Y2!(Q2%): Z3! = Z2!(Q2%)ă  GOSUB CheckVisibilityă  IF VisibleSurface% THENă    X%(1) = SX1%(Q1%): Y%(1) = SY1%(Q1%)ă    X%(2) = SX1%(Q2%): Y%(2) = SY1%(Q2%)ă    X%(3) = SX2%(Q2%): Y%(3) = SY2%(Q2%)ă    X%(4) = SX2%(Q1%): Y%(4) = SY2%(Q1%)ă    CALL DrawPoly(X%(), Y%(), 4, White)ă  END IFăNEXTă'draw one endăX1! = X1!(S1%): Y1! = Y1!(S1%): Z1! = Z1!(S1%)ăX2! = X1!(S3%): Y2! = Y1!(S3%): Z2! = Z1!(S3%)ăX3! = X1!(S2%): Y3! = Y1!(S2%): Z3! = Z1!(S2%)ăGOSUB CheckVisibilityăIF VisibleSurface% THENă  CALL DrawPoly(SX1%(), SY1%(), Divs%, White)ăEND IFă'draw the other endăX1! = X2!(S1%): Y1! = Y2!(S1%): Z1! = Z2!(S1%)ăX2! = X2!(S2%): Y2! = Y2!(S2%): Z2! = Z2!(S2%)ăX3! = X2!(S3%): Y3! = Y2!(S3%): Z3! = Z2!(S3%)ăGOSUB CheckVisibilityăIF VisibleSurface% THENă  CALL DrawPoly(SX2%(), SY2%(), Divs%, White)ăEND IFăRETURNăă'========================================================================ăInitSphere:ăR! = 40!            'the radius of the sphereăDivs% = 18ăStepAmount! = (Pi! * 2!) / CSNG(Divs%)ăREDIM X1!(1 TO Divs% + 1), X2!(1 TO Divs% + 1)ăREDIM Y1!(1 TO Divs% + 1), Y2!(1 TO Divs% + 1)ăREDIM Z1!(1 TO Divs% + 1), Z2!(1 TO Divs% + 1)ăREDIM SX1%(1 TO Divs% + 1), SY1%(1 TO Divs% + 1)ăREDIM SX2%(1 TO Divs% + 1), SY2%(1 TO Divs% + 1)ăREDIM X%(1 TO 4), Y%(1 TO 4)ăXtra% = Divs% + 1ăRETURNăăDrawSphere:ă'north polar areaă'R5! = 0: X! = SIN(R5!) * R!: Y! = COS(R5!) * R!: Z! = 0ăX! = 0!: Y! = R!: Z! = 0ăGOSUB PerspectiveCalculationsăX3! = X!: Y3! = Y!: Z3! = Z!ăX%(3) = SX%: Y%(3) = SY%ăR5! = StepAmount!: GOSUB CalcAroundăFOR Q1% = 1 TO Divs%ă  Q2% = Q1% + 1ă  X1! = X2!(Q2%): Y1! = Y2!(Q2%): Z1! = Z2!(Q2%)ă  X2! = X2!(Q1%): Y2! = Y2!(Q1%): Z2! = Z2!(Q1%)ă  GOSUB CheckVisibilityă  IF VisibleSurface% THENă    X%(1) = SX2%(Q2%): Y%(1) = SY2%(Q2%)ă    X%(2) = SX2%(Q1%): Y%(2) = SY2%(Q1%)ă    CALL DrawPoly(X%(), Y%(), 3, Green)ă  END IFăNEXTăă'middle of sphereăR5! = StepAmount!ăFOR T2% = 1 TO (Divs% \ 2) - 2ă  FOR Q1% = 1 TO Divs% + 1ă    X1!(Q1%) = X2!(Q1%): Y1!(Q1%) = Y2!(Q1%): Z1!(Q1%) = Z2!(Q1%)ă    SX1%(Q1%) = SX2%(Q1%): SY1%(Q1%) = SY2%(Q1%)ă  NEXTă  R5! = R5! + StepAmount!: GOSUB CalcAroundă  FOR Q1% = 1 TO Divs%ă    Q2% = Q1% + 1ă    X1! = X1!(Q1%): Y1! = Y1!(Q1%): Z1! = Z1!(Q1%)ă    X2! = X1!(Q2%): Y2! = Y1!(Q2%): Z2! = Z1!(Q2%)ă    X3! = X2!(Q2%): Y3! = Y2!(Q2%): Z3! = Z2!(Q2%)ă    GOSUB CheckVisibilityă    IF VisibleSurface% THENă      X%(1) = SX1%(Q1%): Y%(1) = SY1%(Q1%)ă      X%(2) = SX1%(Q2%): Y%(2) = SY1%(Q2%)ă      X%(3) = SX2%(Q2%): Y%(3) = SY2%(Q2%)ă      X%(4) = SX2%(Q1%): Y%(4) = SY2%(Q1%)ă      CALL DrawPoly(X%(), Y%(), 4, Green)ă    END IFă  NEXTăNEXTăă'south polar areaăR5! = Pi!: X! = SIN(R5!) * R!: Y! = COS(R5!) * R!: Z! = 0ăGOSUB PerspectiveCalculationsăX3! = X!: Y3! = Y!: Z3! = Z!ăX%(3) = SX%: Y%(3) = SY%ăFOR Q1% = 1 TO Divs%ă  Q2% = Q1% + 1ă  X1! = X2!(Q1%): Y1! = Y2!(Q1%): Z1! = Z2!(Q1%)ă  X2! = X2!(Q2%): Y2! = Y2!(Q2%): Z2! = Z2!(Q2%)ă  GOSUB CheckVisibilityă  IF VisibleSurface% THENă    X%(1) = SX2%(Q2%): Y%(1) = SY2%(Q2%)ă    X%(2) = SX2%(Q1%): Y%(2) = SY2%(Q1%)ă    CALL DrawPoly(X%(), Y%(), 3, Green)ă  END IFăNEXTăRETURNăăCalcAround:ăR4! = 0!: XX! = SIN(R5!) * R!: YY! = COS(R5!) * R!ăFOR T% = 1 TO Divs%ă  X! = COS(R4!) * XX!: Y! = YY!: Z! = SIN(R4!) * XX!ă  GOSUB PerspectiveCalculationsă  X2!(T%) = X!: Y2!(T%) = Y!: Z2!(T%) = Z!ă  SX2%(T%) = SX%: SY2%(T%) = SY%ă  R4! = R4! + StepAmount!ăNEXTăX1!(Xtra%) = X1!(1): X2!(Xtra%) = X2!(1)ăY1!(Xtra%) = Y1!(1): Y2!(Xtra%) = Y2!(1)ăZ1!(Xtra%) = Z1!(1): Z2!(Xtra%) = Z2!(1)ăSX1%(Xtra%) = SX1%(1): SX2%(Xtra%) = SX2%(1)ăSY1%(Xtra%) = SY1%(1): SY2%(Xtra%) = SY2%(1)ăRETURNăăSUB DrawPoly (X%(), Y%(), Vertices%, Culler%)ăPSET (X%(Vertices%), Y%(Vertices%)), Culler%ăFOR Q% = 1 TO Vertices%ă  LINE -(X%(Q%), Y%(Q%)), Culler%ăNEXTăEND SUBăăFUNCTION KeyPress%ăKP$ = INKEY$ăIF LEN(KP$) THEN ă  KP% = ASC(KP$): IF KP% = 0 THEN KP% = -ASC(MID$(KP$, 2))ăEND IFăKeyPress% = KP%ăEND FUNCTIONăAndrew L. Ayers                COMPLETE BLAST! (MODE 13H) SUBSandrewa@indirect.com           10-04-96 (00:00)       QB, QBasic, PDS        389  12999    BLASTLIB.BAS'****************************************************************************ă'ă' Description : Blast! Library - VGA Mode 13 Off-Screen Buffer Manipulationă'               routinesă' Written by  : Copyright (c) 1996 by Andrew L. Ayersă' Date        : 10/04/96ă' Comments    : Users of QBASIC will find that this program just barelyă'               fits into their environment. This is because QBASIC onlyă'               allows 160K of memory for code AND data. Since I createă'               two off-screen buffers of 64K each, this leaves only 32Kă'               for code and any other buffers. In most cases, you shouldă'               need only one off-screen buffer, giving you 96K for bothă'               code and any other buffers. There shouldn't be any problemsă'               with QuickBASIC, though, since it allows you to use 64K foră'               each procedure, and the rest of memory for your data. Noticeă'               the use of REDIM for the declaration of the buffers. This isă'               so I could resize the buffers to zero at the end of theă'               program. When I was coding this in QBASIC, I realized I need-ă'               ed to do this when HELP would no longer load due to lowă'               memory!ă'ă'               If you want to view the source for the assembler routines,ă'               they are contained within the ".ASM" files included in thisă'               archive.ă'ă'               I went to a lot of time and trouble to create this libraryă'               of routines. They are intended to fill a void that hasă'               existed for a while. I am distributing this library as free-ă'               ware, though I am retaining the copyright. You may use thisă'               library in any way you see fit. I only ask that you put myă'               name somewhere in your opening credits. Something likeă'               "Sprite Routines developed by Andrew L. Ayers" or "Developedă'               using the Blast! Library by Andrew L. Ayers". Other thană'               that, it's free. Thank you, and have phun!ă'ă'****************************************************************************ă'ă' Declare our proceduresă'ăDECLARE SUB DrawLine (dsegment%, doffset%, x1%, y1%, x2%, y2%, colr%)ăDECLARE SUB BlastGet (dsegment%, doffset%, ssegment%, soffset%, x1%, y1%, x2%, y2%)ăDECLARE SUB BlastPut (dsegment%, doffset%, ssegment%, soffset%, xpos%, ypos%, icol%)ăDECLARE SUB BlastPset (segment%, offset%, xpos%, ypos%, col%)ăDECLARE SUB BlastCopy (fsegment%, foffset%, tsegment%, toffset%)ă'ă' Reserve assembler routine code memoryă'ăDIM SHARED code1%(14), code2%(21), code3%(76), code4%(76)ă'ă' BlastCopy! (BLSTCOPY.ASM)ă'ăcode$ = "1E5589E58B460E8ED88B760C8B460A8EC08B7E08B9007DF3A55D1FCA0800"ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 29ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă' BlastPset! (BLSTPSET.ASM)ă'ăcode$ = "1E5589E58B46108ED88B760AB106D3E689F3B102D3E601DE8B5E0C01DE8B5E0E01DE8A460888045D1FCA0A00"ă'ăDEF SEG = VARSEG(code2%(0))ă'ăFOR i% = 0 TO 43ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code2%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă' BlastPut! (BLASTPUT.ASM)ă'ăcode$ = "1E5589E58B460C508B460A508B46108ED88B760E8B04B103D3E8508B5EFE"ăcode$ = code$ + "01C3895EFE8B4402508B5EFC01C3895EFC83C60489760E89E58B46188ED8"ăcode$ = code$ + "8B76168A04468976163A461074208B5E1C8EDB8B7612B106D3E689F3B102"ăcode$ = code$ + "D3E601DE8B5E1401DE8B5E1A01DE88048B4614408946148B460639461475"ăcode$ = code$ + "BE8B46142B46028946148B4612408946128B460439461275A6585858585D"ăcode$ = code$ + "1FCA0E00"ă'ăDEF SEG = VARSEG(code3%(0))ă'ăFOR i% = 0 TO 153ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code3%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă' BlastGet! (BLASTGET.ASM)ă'ăcode$ = "1E5589E58B460A508B4608508B460A2B460E40508B46082B460C40508B46128ED8"ăcode$ = code$ + "8B76108B46FABB0800F7E3890446468B46F88904464689761089E58B5E"ăcode$ = code$ + "1E8EDB8B7614B106D3E689F3B102D3E601DE8B5E1601DE8B5E1C01DE8A"ăcode$ = code$ + "048B5E1A8EDB8B76188804468976188B4616408946168B460639461676"ăcode$ = code$ + "C38B46162B46028946168B4614408946148B460439461476AB58585858"ăcode$ = code$ + "5D1FCA1000"ă'ăDEF SEG = VARSEG(code4%(0))ă'ăFOR i% = 0 TO 153ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code4%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă'****************************************************************************ă'ă' Reserve memory for two off-screen buffers, sprites and demo variablesă' Use REDIM so that we may de-allocate the memory at the end of the programă'ăREDIM buffer1%(31999) ' This is an off-screen bufferăREDIM buffer2%(31999) ' This is another...ăREDIM sbuffer%(2000)  ' This is our sprite bufferă'ăDIM bx%(40), by%(40), bt%(40), dx%(40), dy%(40)' Variables for demoă'ă'****************************************************************************ă'ă' Initialize Ballsă'ăFOR t = 0 TO 39ă  bx%(t) = INT(RND * 200) + 50: by%(t) = INT(RND * 100) + 50ă  bt%(t) = INT(RND * 2)ă  DOă    dx%(t) = INT(RND * 11) - 5: dy%(t) = INT(RND * 11) - 5ă  LOOP UNTIL dx%(t) <> 0 AND dy%(t) <> 0ăNEXT tă'ăSCREEN 13ă'ă' Now, show some instructionsă'ăCOLOR 2ăLOCATE 2, 2: PRINT "Blast! Library Demo by Andrew L. Ayers"ă'ăCOLOR 15ăLOCATE 4, 1: PRINT "The following demo illustrates a simple"ăLOCATE 5, 1: PRINT "use of the Blast! Library. Many 32 x 32"ăLOCATE 6, 1: PRINT "and 16 x 16 sprites (up to 40) bounce on"ăLOCATE 7, 1: PRINT "the screen in random directions. Use the"ăLOCATE 8, 1: PRINT "+/- keys to add or subtract sprites from"ăLOCATE 9, 1: PRINT "the screen. Notice how the sprites can"ăLOCATE 10, 1: PRINT "overlap each other, without showing a"ăLOCATE 11, 1: PRINT "black border. This masking effect is"ăLOCATE 12, 1: PRINT "done by simply specifying black (0) as"ăLOCATE 13, 1: PRINT "the invisible color. While in this demo"ăLOCATE 14, 1: PRINT "I am using 32 x 32 and 16 x 16 sprites,"ăLOCATE 15, 1: PRINT "any size sprite could be used. It all"ăLOCATE 16, 1: PRINT "depends on the level of detail your"ăLOCATE 17, 1: PRINT "sprites need as well as the number of"ăLOCATE 18, 1: PRINT "sprites you place on screen at one time."ă'ă' Draw a simple graphic for the backgroundă'ăCOLOR 4ăLOCATE 21, 3: PRINT "Please wait - Preparing Images.";ă'ăx1% = 159: y1% = 99: colr% = 0ă'ăFOR t% = 0 TO 319 STEP 4ă  CALL DrawLine(VARSEG(buffer2%(0)), VARPTR(buffer2%(0)), x1%, y1%, t%, 0, colr%)ă  colr% = colr% + 1: IF colr% > 255 THEN colr% = 0ăNEXTă'ăPRINT ".";ă'ăFOR t% = 0 TO 199 STEP 4ă  CALL DrawLine(VARSEG(buffer2%(0)), VARPTR(buffer2%(0)), x1%, y1%, 319, t%, colr%)ă  colr% = colr% + 1: IF colr% > 255 THEN colr% = 0ăNEXTă'ăPRINT ".";ă'ăFOR t% = 319 TO 0 STEP -4ă  CALL DrawLine(VARSEG(buffer2%(0)), VARPTR(buffer2%(0)), x1%, y1%, t%, 199, colr%)ă  colr% = colr% + 1: IF colr% > 255 THEN colr% = 0ăNEXTă'ăPRINT ".";ă'ăFOR t% = 199 TO 0 STEP -4ă  CALL DrawLine(VARSEG(buffer2%(0)), VARPTR(buffer2%(0)), x1%, y1%, 0, t%, colr%)ă  colr% = colr% + 1: IF colr% > 255 THEN colr% = 0ăNEXTă'ăCOLOR 2ăLOCATE 21, 1: PRINT "Hit any key to begin demo - [ESC] exits"ăCOLOR 15ă'ăDO: LOOP UNTIL INKEY$ <> ""ă'ăCLSă'ă' Create a 32 x 32 sprite for us to useă'ăo = 0ăFOR t% = 14 TO 0 STEP -1ă  c% = 31 - t%ă  CIRCLE (15 + o, 15 + o), t%, c%ă  PAINT (15 + o, 15 + o), c%ă  o = o - .4ăNEXT t%ă'ă' Get our spritesă'ăCALL BlastGet(&HA000, 0, VARSEG(sbuffer%(0)), VARPTR(sbuffer%(0)), 0, 0, 31, 31)ă'ăLINE (11, 11)-(18, 18), 0, BF ' Clear out centeră'ăCALL BlastGet(&HA000, 0, VARSEG(sbuffer%(0)), VARPTR(sbuffer%(514)), 7, 7, 22, 22)ă'ă' Initialize Demo Variablesă'ănumballs% = 10: done% = 0ă'ăDOă  'ă  ' Copy our background graphic to our off-screen buffer (which clears offă  ' old images of our sprites...) If you are using only a single buffer, justă  ' "get" the background behind each sprite before moving, move, then replaceă  ' the background, or just erase with the "ERASE arrayname" (see HELP)ă  ' command. I could done the "get, move, replace" on this demo, but I wantedă  ' to show how to use a background using the library...ă  'ă  CALL BlastCopy(VARSEG(buffer2%(0)), VARPTR(buffer2%(0)), VARSEG(buffer1%(0)), VARPTR(buffer1%(0)))ă  'ă  ' Put our spritesă  'ă  FOR t% = 0 TO numballs% - 1ă    bx%(t%) = bx%(t%) + dx%(t%): by%(t%) = by%(t%) + dy%(t%)ă    IF bx%(t%) > 287 THEN dx%(t%) = -dx%(t%): bx%(t%) = 287ă    IF bx%(t%) < 0 THEN dx%(t%) = -dx%(t%): bx%(t%) = 0ă    IF by%(t%) > 167 THEN dy%(t%) = -dy%(t%): by%(t%) = 167ă    IF by%(t%) < 0 THEN dy%(t%) = -dy%(t%): by%(t%) = 0ă    CALL BlastPut(VARSEG(buffer1%(0)), VARPTR(buffer1%(0)), VARSEG(sbuffer%(0)), VARPTR(sbuffer%(bt%(t%) * 514)), bx%(t%), by%(t%), 0)ă  NEXTă  'ă  ' Copy the off-screen buffer to the visible screenă  'ă  CALL BlastCopy(VARSEG(buffer1%(0)), VARPTR(buffer1%(0)), &HA000, 0)ă  'ă  ' Get user input for number of balls, or exită  'ă  a$ = INKEY$ă  SELECT CASE a$ă    CASE "-", "_"ă      numballs% = numballs% - 1ă      IF numballs% < 1 THEN numballs% = 1ă    CASE "+", "="ă      numballs% = numballs% + 1ă      IF numballs% > 40 THEN numballs% = 40ă    CASE CHR$(27)ă      done% = 1ă  END SELECTă  'ăLOOP UNTIL done%ă'ăCLSă'ă' Deallocate our large buffers, using REDIM to size to zeroă'ăREDIM buffer1%(0) ' This is an off-screen bufferăREDIM buffer2%(0) ' This is another...ăREDIM sbuffer%(0) ' This is our sprite bufferăăSUB BlastCopy (fsegment%, foffset%, tsegment%, toffset%)ă  'ă  ' No error checking is done for this routine, so be careful whenă  ' you set the from and to segements and offsets - you could crashă  ' your machine...ă  'ă  WAIT &H3DA, 8              ' Wait for vertical retraceă  'ă  ' Copy!ă  'ă  DEF SEG = VARSEG(code1%(0))ă  'ă  CALL ABSOLUTE(BYVAL fsegment%, BYVAL foffset%, BYVAL tsegment%, BYVAL toffset%, VARPTR(code1%(0)))ă  'ă  DEF SEGă  'ăEND SUBăăSUB BlastGet (dsegment%, doffset%, ssegment%, soffset%, x1%, y1%, x2%, y2%)ă  'ă  ' No error checking is done for X and Y coordinates, nor for any segmentsă  ' and offsets into memory. Therefore, use care when setting them so youă  ' don't crash your machine.ă  'ă  DEF SEG = VARSEG(code4%(0))ă  'ă  CALL ABSOLUTE(BYVAL dsegment%, BYVAL doffset%, BYVAL ssegment%, BYVAL soffset%, BYVAL x1%, BYVAL y1%, BYVAL x2%, BYVAL y2%, VARPTR(code4%(0)))ă  'ă  DEF SEGă  'ăEND SUBăăSUB BlastPset (segment%, offset%, xpos%, ypos%, col%)ă  'ă  ' No error checking is done for X and Y coordinates, nor for any segmentsă  ' and offsets into memory. Therefore, use care when setting them so youă  ' don't crash your machine.ă  'ă  ' Plot the pixel!ă  'ă  DEF SEG = VARSEG(code2%(0))ă  'ă  CALL ABSOLUTE(BYVAL segment%, BYVAL offset%, BYVAL xpos%, BYVAL ypos%, BYVAL col%, VARPTR(code2%(0)))ă  'ă  DEF SEGă  'ăEND SUBăăSUB BlastPut (dsegment%, doffset%, ssegment%, soffset%, xpos%, ypos%, icol%)ă  'ă  ' No error checking is done for X and Y coordinates, nor for any segmentsă  ' and offsets into memory. Therefore, use care when setting them so youă  ' don't crash your machine.ă  'ă  DEF SEG = VARSEG(code3%(0))ă  'ă  CALL ABSOLUTE(BYVAL dsegment%, BYVAL doffset%, BYVAL ssegment%, BYVAL soffset%, BYVAL xpos%, BYVAL ypos%, BYVAL icol%, VARPTR(code3%(0)))ă  'ă  DEF SEGă  'ăEND SUBăăSUB DrawLine (dsegment%, doffset%, x1%, y1%, x2%, y2%, colr%)ă  'ă  ' This is a simple routine which uses the traditională  ' Bresenham Algorithm to draw a line between two points.ă  ' It is pretty fast, but not fast enough for REAL workă  ' (like 3D and such) but you can use it if you want. Iă  ' plan on making an assembler version which should beă  ' MUCH faster.ă  'ă  ' No error checking is performed for endpoints in this routine,ă  ' so be careful not to let the ends fall out of bounds, sinceă  ' doing so may cause your machine to crash...ă  'ă  DEF SEG = dsegment%ă  'ă  error.term% = 0ă  'ă  xdiff% = x2% - x1%: ydiff% = y2% - y1%ă  xstep% = 1: ystep% = 320ă  'ă  IF x1% >= x2% THEN xstep% = -1: xdiff% = -xdiff%ă  IF y1% >= y2% THEN ystep% = -320: ydiff% = -ydiff%ă  'ă  xend% = ABS(xdiff%) - 1: yend% = ABS(ydiff%) - 1ă  'ă  tt& = doffset% + (y1% * 320) + x1%ă  'ă  IF xdiff% > ydiff% THENă    'ă    FOR xx% = 0 TO xend%ă      POKE tt&, colr%ă      tt& = tt& + xstep%ă      error.term% = error.term% + ydiff%ă      IF error.term% >= xdiff% THENă        tt& = tt& + ystep%ă        error.term% = error.term% - xdiff%ă      END IFă    NEXTă    'ă  ELSEă    'ă    FOR yy% = 0 TO yend%ă      POKE tt&, colr%ă      tt& = tt& + ystep%ă      error.term% = error.term% + xdiff%ă      IF error.term% >= ydiff% THENă        tt& = tt& + xstep%ă        error.term% = error.term% - ydiff%ă      END IFă    NEXTă    'ă  END IFă  'ă  DEF SEGă  'ăEND SUBăAndrew L. Ayers                BLAST! MODE 13H GET ROUTINE    andrewa@indirect.com           10-04-96 (00:00)       QB, QBasic, PDS        213  7929     BLASTGET.BASDIM code1%(76), code2%(76), sbuffer%(1000)ă'ă' BlastGet Routine  (ASM Source tacked on at end)ă'ăcode$ = "1E5589E58B460A508B4608508B460A2B460E40508B46082B460C40508B46128ED8"ăcode$ = code$ + "8B76108B46FABB0800F7E3890446468B46F88904464689761089E58B5E"ăcode$ = code$ + "1E8EDB8B7614B106D3E689F3B102D3E601DE8B5E1601DE8B5E1C01DE8A"ăcode$ = code$ + "048B5E1A8EDB8B76188804468976188B4616408946168B460639461676"ăcode$ = code$ + "C38B46162B46028946168B4614408946148B460439461476AB58585858"ăcode$ = code$ + "5D1FCA1000"ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 153ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă' BlastPut Routineă'ăcode$ = "1E5589E58B460C508B460A508B46108ED88B760E8B04B103D3E8508B5EFE"ăcode$ = code$ + "01C3895EFE8B4402508B5EFC01C3895EFC83C60489760E89E58B46188ED8"ăcode$ = code$ + "8B76168A04468976163A461074208B5E1C8EDB8B7612B106D3E689F3B102"ăcode$ = code$ + "D3E601DE8B5E1401DE8B5E1A01DE88048B4614408946148B460639461475"ăcode$ = code$ + "BE8B46142B46028946148B4612408946128B460439461275A6585858585D"ăcode$ = code$ + "1FCA0E00"ă'ăDEF SEG = VARSEG(code2%(0))ă'ăFOR i% = 0 TO 153ă  d% = VAL("&h" + MID$(code$, i% * 2 + 1, 2))ă  POKE VARPTR(code2%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ăSCREEN 13ă'ăLINE (5, 5)-(10, 10), 15, BFă'ă' Get our spriteă'ădbufferseg% = &HA000: dbufferptr% = 0ă'ăDEF SEG = VARSEG(code1%(0))ă'ăx1% = 0: y1% = 0: x2% = 15: y2% = 15ăCALL ABSOLUTE(BYVAL dbufferseg%, BYVAL dbufferptr%, BYVAL VARSEG(sbuffer%(0)), BYVAL VARPTR(sbuffer%(0)), BYVAL x1%, BYVAL y1%, BYVAL x2%, BYVAL y2%, VARPTR(code1%(0)))ă'ăDEF SEGă'ăCLSă'ădbufferseg% = &HA000: dbufferptr% = 0: icol% = 0ă'ăDEF SEG = VARSEG(code2%(0))ă'ăDOă  xpos% = INT(RND * 300)ă  ypos% = INT(RND * 170)ă  'ă  CALL ABSOLUTE(BYVAL dbufferseg%, BYVAL dbufferptr%, BYVAL VARSEG(sbuffer%(0)), BYVAL VARPTR(sbuffer%(0)), BYVAL xpos%, BYVAL ypos%, BYVAL icol%, VARPTR(code2%(0)))ăLOOP UNTIL INKEY$ <> ""ă'ăDEF SEGăă'******* END BLASTGET.BAS *********ăă-----------------------------------------------------------------------------ăă    Name: BlastGet! - Offscreen Buffer to Sprite Buffer Memory Copyă    Date: October 11, 1996ă  Author: Andrew L. Ayersăă-----------------------------------------------------------------------------ăBASIC Calling Procedure:ă-----------------------------------------------------------------------------ăăDIM code%(76) ' 77 Words Allocatedă'ă' Load hex codes for routine into memory hereă'ăDEF SEG = VARSEG(code%(0)) ' Get code segementă'ă' Call our routineă'ăCALL ABSOLUTE(BYVAL VARSEG(dbuffer%(0)), BYVAL VARPTR(dbuffer%(0)), --->ă	BYVAL VARSEG(sbuffer%(0)), BYVAL VARPTR(sbuffer%(0)),	    --->ă	BYVAL X1%, BYVAL Y1%, BYVAL X2%, BYVAL Y2%, VARPTR(code%(0)))ăăDEF SEG ' Reset to default segmentăă-----------------------------------------------------------------------------ăStack Descriptor:ă-----------------------------------------------------------------------------ăăThe following stack layout is only valid after all values are place onto theăstack for operation. In this routine, the layout is not valid until afterăbyte 0x003B is executed (label Get:), due to prior stack manipulation byăboth BASIC and the routine.ăăSP Offset Descriptionsă--------- ------------------------------------- ă==[Pushed on by call to routine]=============ă   1E	  Display Buffer Segmentă   1C	  Display Buffer Offsetă   1A	  Sprite Buffer Segmentă   18	  Sprite Buffer Offsetă   16	  X1 positionă   14	  Y1 positionă   12	  X2 positionă   10     Y2 position                      ă==[Pushed on by BASIC]=======================ă   0E	  BASIC Return Segmentă   0C	  BASIC Return Offsetă==[Pushed on by routine]=====================ă   0A	  DS Registeră   08	  BP Registeră   06	  X2 Positionă   04	  Y2 Positionă   02	  Widthă   00	  Heightăă------- ------- ------  --------------- -------------------------------------ăHexCode Label   OpCode  Operands        Remarksă------- ------- ------  --------------- -------------------------------------ă1E	Start:	PUSH	DS		;Save the Destination Segmentă55		PUSH	BP		;Save the Base Pointerăă89E5	Init:	MOV	BP,SP		;Get the stack pointeră8B460A		MOV	AX,[BP+0A]	;Get the X2 position and put it onă50		PUSH	AX		;the stack.ăă8B4608		MOV	AX,[BP+08]	;Get the Y2 position and put it onă50		PUSH	AX		;the stack.ăă8B460A		MOV	AX,[BP+0A]	;Get the X2 position and subtractă2B460E		SUB	AX,[BP+0E]	;the X1 position, increment it byă40		INC 	AX		;1 and place it on the stack (thisă50		PUSH	AX		;is now the width).ăă8B4608		MOV	AX,[BP+08]	;Get the Y2 position and subtractă2B460C		SUB	AX,[BP+0C]	;the Y1 position, increment it byă40		INC	AX		;1 and place it on the stack (thisă50		PUSH	AX		;is now the height).ăă8B4612		MOV	AX,[BP+12]	;Get the sprite buffer segement andă8ED8		MOV	DS,AX		;set the DS to it. Set the SI to theă8B7610		MOV	SI,[BP+10]	;sprite buffer offset.ă8B46FA		MOV	AX,[BP-06]	;Get the width, and multiply by 8ăBB0800		MOV	BX,0008		;(for compatability with BASIC's GETăF7E3		MUL	BX		;routine) and put it into the spriteă8904		MOV	[SI],AX		;buffer. Add 2 the the SI toă46		INC	SI		;position it at the next data field.ă46		INC	SI		 ă8B46F8		MOV	AX,[BP-08]	;Get the height, and place it ată8904		MOV	[SI],AX		;this position, then add 2 to theă46		INC	SI		;SI to set it to the beginning ofă46		INC	SI		;actual sprite pixel data, andă897610		MOV	[BP+10],SI	;place it on the stack. Then resetă89E5		MOV	BP,SP		;the BP for later.ăă8B5E1E	Get:	MOV	BX,[BP+1E]	;Otherwise, get the display bufferă8EDB		MOV	DS,BX		;segment, and point DS to it.ă8B7614		MOV	SI,[BP+14]	;Then get the Y1 position.ăB106		MOV	CL,06		;Multiply it by 64 by using a ShiftăD3E6		SHL	SI,CL		;Left (SHL) for speed.ă89F3		MOV	BX,SI		;Save the result temporarily.ăB102		MOV	CL,02		;Shift left again to multiply theăD3E6		SHL	SI,CL		;Y1 position by 256, then add thată01DE		ADD	SI,BX		;value to our saved result.ă8B5E16		MOV	BX,[BP+16]	;Now get the X1 position and add ită01DE		ADD	SI,BX		;to the result to get our finală8B5E1C		MOV	BX,[BP+1C]	;offset. Then get the display bufferă01DE		ADD	SI,BX		;offset and add the pixel offset.ă8A04		MOV	AL,[SI]		;Get the pixel.ăă8B5E1A		MOV	BX,[BP+1A]	;Get the sprite buffer segment andă8EDB		MOV	DS,BX		;point the DS (Dest. Segment) to it.ă8B7618		MOV	SI,[BP+18]	;Now get the sprite buffer offset.ă8804		MOV	[SI],AL		;Then put the color of the pixel.ă46		INC	SI		;Add 1 to our sprite buffer offsetă897618		MOV	[BP+18],SI	;and place it back on the stack.ăă8B4616	Done:	MOV	AX,[BP+16]	;Get the X1 position.ă40		INC	AX		;Increment the X1 position by 1ă894616		MOV	[BP+16],AX	;and put back on the stackă8B4606		MOV	AX,[BP+06]	;Check to see if the width has beenă394616		CMP	[BP+16],AX	;reached. If it hasn't, then get theă76C3		JBE	Get: [003C]	;next column, otherwise reset theă8B4616		MOV	AX,[BP+16]	;X1 position back to the left edgeă2B4602		SUB	AX,[BP+02]	;of the sprite by subtracting theă894616		MOV	[BP+16],AX	;width.ă8B4614		MOV	AX,[BP+14]	;Get the Y1 position, then incrementă40		INC	AX		;it by 1, and place it back on theă894614		MOV	[BP+14],AX	;stack. Then check to see if we haveă8B4604		MOV	AX,[BP+04]	;finished getting the sprite (Areă394614		CMP	[BP+14],AX	;we at the bottom?) If not, then do	ă76AB		JBE	Get: [003C]	;another line...ăă58	Exit:	POP	AX		;Pop the height off the stack.ă58		POP	AX		;Pop the width off the stack.ă58		POP	AX		;Pop the Y2 off the stack.ă58		POP	AX		;Pop the X2 off the stack.ă5D		POP	BP		;Restore our registers for BASIC,ă1F		POP	DS		;the exit the routine, cleaning upăCA1000		RETF	0010		;the stack at the end...ăă-----------------------------------------------------------------------------ăLength : 154 Bytes (77 Words)ă-----------------------------------------------------------------------------ăAndrew L. Ayers                BLAST! MODE 13H PUT ROUTINE    andrewa@indirect.com           10-04-96 (00:00)       QB, QBasic, PDS        179  6943     BLASTPUT.BASDIM code1%(76), sbuffer%(1000)ă'ă' (ASM Source located at end of code)ăăcode1$ = ""ăcode1$ = code1$ + "1E5589E58B460C508B460A508B46108ED88B760E8B04B103D3E8508B5EFE"ăcode1$ = code1$ + "01C3895EFE8B4402508B5EFC01C3895EFC83C60489760E89E58B46188ED8"ăcode1$ = code1$ + "8B76168A04468976163A461074208B5E1C8EDB8B7612B106D3E689F3B102"ăcode1$ = code1$ + "D3E601DE8B5E1401DE8B5E1A01DE88048B4614408946148B460639461475"ăcode1$ = code1$ + "BE8B46142B46028946148B4612408946128B460439461275A6585858585D"ăcode1$ = code1$ + "1FCA0E00"ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 153ă  d% = VAL("&h" + MID$(code1$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ăSCREEN 13ă'ăLINE (5, 5)-(10, 10), 15, BFăGET (0, 0)-(15, 15), sbuffer%(0)ă'ăCLSă'ădbufferseg% = &HA000: dbufferptr% = 0: icol% = 0: cnt% = 0ă'ăDEF SEG = VARSEG(code1%(0))ă'ăt = TIMERăDOă  xpos% = INT(RND * 300)ă  ypos% = INT(RND * 170)ă  'ă  CALL ABSOLUTE(BYVAL dbufferseg%, BYVAL dbufferptr%, BYVAL VARSEG(sbuffer%(0)), BYVAL VARPTR(sbuffer%(0)), BYVAL xpos%, BYVAL ypos%, BYVAL icol%, VARPTR(code1%(0)))ă  cnt% = cnt% + 1ăLOOP UNTIL cnt% = 1000ăPRINT TIMER - tăDEF SEGăă'******** END BLASTPUT.BAS ********ăă-----------------------------------------------------------------------------ăă    Name: BlastPut! - Sprite Buffer to Offscreen Buffer Memory Copyă    Date: September 30, 1996ă  Author: Andrew L. Ayersăă-----------------------------------------------------------------------------ăBASIC Calling Procedure:ă-----------------------------------------------------------------------------ăăDIM code%(76) ' 77 Words Allocatedă'ă' Load hex codes for routine into memory hereă'ăDEF SEG = VARSEG(code%(0)) ' Get code segementă'ă' Call our routineă'ăCALL ABSOLUTE(BYVAL VARSEG(dbuffer%(0)), BYVAL VARPTR(dbuffer%(0)), --->ă	BYVAL VARSEG(sbuffer%(0)), BYVAL VARPTR(sbuffer%(0)),	    --->ă	BYVAL xpos%, BYVAL ypos%, BYVAL icol%, VARPTR(code%(0)))ăăDEF SEG ' Reset to default segmentăă-----------------------------------------------------------------------------ăStack Descriptor:ă-----------------------------------------------------------------------------ăăThe following stack layout is only valid after all values are place onto theăstack for operation. In this routine, the layout is not valid until afterăbyte 0x0036 is executed (label Plot:), due to prior stack manipulation byăboth BASIC and the routine.ăăSP Offset Descriptionsă--------- ------------------------------------- ă==[Pushed on by call to routine]=============ă   1C	  Display Buffer Segmentă   1A	  Display Buffer Offsetă   18	  Sprite Buffer Segmentă   16	  Sprite Buffer Offsetă   14	  X positionă   12	  Y positionă   10	  Invisible Color                      ă==[Pushed on by BASIC]=======================ă   0E	  BASIC Return Segmentă   0C	  BASIC Return Offsetă==[Pushed on by routine]=====================ă   0A	  DS Registeră   08	  BP Registeră   06	  Width + X Positionă   04	  Height + Y Positionă   02	  Widthă   00	  Heightăă------- ------- ------  --------------- -------------------------------------ăHexCode Label   OpCode  Operands        Remarksă------- ------- ------  --------------- -------------------------------------ă1E	Start:	PUSH	DS		;Save the DS register for BASICă55		PUSH	BP		;Save the BP register for BASICăă89E5	Init:	MOV	BP,SP		;Get the stack pointeră8B460C		MOV	AX,[BP+0C]	;Get the X positionă50		PUSH	AX		;Put the X position on the stackă8B460A		MOV	AX,[BP+0A]	;Get the Y positionă50		PUSH	AX		;Put the Y position on the stackă8B4610		MOV	AX,[BP+10]	;Get the sprite buffer segmentă8ED8		MOV	DS,AX		;Point the DS (Dest. Segment) to ită8B760E		MOV	SI,[BP+0E]	;Get the sprite buffer offsetă8B04		MOV	AX,[SI]		;Get the width, and divide by 8ăB103		MOV	CL,03		;(using SHR for speed) to obtain theăD3E8		SHR	AX,CL		;true width in pixelsă50		PUSH	AX		;Put the width on the stackă8B5EFE		MOV	BX,[BP-02]	;Get the X positionă01C3		ADD	BX,AX		;Add width to the X positionă895EFE		MOV	[BP-02],BX	;and put it back on the stackă8B4402		MOV	AX,[SI+02]	;Get the heightă50		PUSH	AX		;Put the height the stackă8B5EFC		MOV	BX,[BP-04]	;Get the Y positionă01C3		ADD	BX,AX		;Add height to the Y positionă895EFC		MOV	[BP-04],BX	;and put it back on the stackă83C604		ADD	SI,04		;Reset the sprite buffer offsetă89760E		MOV	[BP+0E],SI	;to the start of the pixel dataă89E5		MOV	BP,SP		;Retrieve stack pointerăă8B4618	Plot:	MOV	AX,[BP+18]	;Get the sprite buffer segment andă8ED8		MOV	DS,AX		;point the DS (Dest. Segment) to ită8B7616		MOV	SI,[BP+16]	;Now get the sprite buffer offsetă8A04		MOV	AL,[SI]		;Then get the color of the pixelă46		INC	SI		;Add 1 to our sprite buffer offsetă897616		MOV	[BP+16],SI	;and place it back on the stackă3A4610		CMP	AL,[BP+10]	;Is our pixel invisible?ă7420		JZ	Done: [006A]	;If it is, then don't plot it.ă8B5E1C		MOV	BX,[BP+1C]	;Otherwise, get the display bufferă8EDB		MOV	DS,BX		;segment, and point DS to ită8B7612		MOV	SI,[BP+12]	;Then get the Y positionăB106		MOV	CL,06		;Multiply it by 64 by using a ShiftăD3E6		SHL	SI,CL		;Left (SHL) for speedă89F3		MOV	BX,SI		;Save the result temporarilyăB102		MOV	CL,02		;Shift left again to multiply theăD3E6		SHL	SI,CL		;Y position by 256, then add thată01DE		ADD	SI,BX		;value to our saved resultă8B5E14		MOV	BX,[BP+14]	;Now get the X position and add ită01DE		ADD	SI,BX		;to the result to get our finală8B5E1A		MOV	BX,[BP+1A]	;offset. Then get the display bufferă01DE		ADD	SI,BX		;offset and add the pixel offset.ă8804		MOV	[SI],AL		;Plot the pixel.ăă8B4614	Done:	MOV	AX,[BP+14]	;Get the X positionă40		INC	AX		;Increment the X position by 1ă894614		MOV	[BP+14],AX	;and put back on the stackă8B4606		MOV	AX,[BP+06]	;Check to see if the width has beenă394614		CMP	[BP+14],AX	;reached. If it hasn't, then plot theă75C7		JNZ	Plot: [0037]	;next column, otherwise reset theă8B4614		MOV	AX,[BP+14]	;X position back to the left edgeă2B4602		SUB	AX,[BP+02]	;of the sprite by subtracting theă894614		MOV	[BP+14],AX	;width.ă8B4612		MOV	AX,[BP+12]	;Get the Y position, then incrementă40		INC	AX		;it by 1, and place it back on theă894612		MOV	[BP+12],AX	;stack. Then check to see if we haveă8B4604		MOV	AX,[BP+04]	;finished drawing the sprite (Areă394612		CMP	[BP+12],AX	;we at the bottom?) If not, then do	ă75AF		JNZ	Plot: [0037]	;another line...ăă58	Exit:	POP	AX		;Pop the height off the stackă58		POP	AX		;Pop the width off the stackă58		POP	AX		;Pop the height + y off the stackă58		POP	AX		;Pop the width + x off the stackă5D		POP	BP		;Restore our registers for BASIC,ă1F		POP	DS		;the exit the routine, cleaning upăCA0E00		RETF	000E		;the stack at the end...ăă-----------------------------------------------------------------------------ăLength : 154 Bytes (77 Words)ă-----------------------------------------------------------------------------ăAndrew L. Ayers                BLAST! MODE 13H PSET ROUTINE   andrewa@indirect.com           10-04-96 (00:00)       QB, QBasic, PDS        71   2331     BLSTPSET.BASDIM buffer%(31999), code1%(29), code2%(43)ă'ă' Assembler code (code1) is as follows:ă'ă' 1E            PUSH    DS              ' Save the Data Segmentă' 55            PUSH    BP              ' Save the Base Pointeră' 89E5          MOV     BP,SP           ' Get the Stack Pointeră' 8B460A        MOV     AX,[BP+0A]      ' Let AX=Buffer Segment Addressă' 8ED8          MOV     DS,AX           ' Set the Data Segment=AXă' 8B7608        MOV     SI,[BP+08]      ' Let Source Index(SI)=Buffer Offsetă' B800A0        MOV     AX,A000         ' Set AX=Start of Video (13h)ă' 8EC0          MOV     ES,AX           ' Set the Extra Segmentă' BF0000        MOV     DI,0000         ' Set the Destination Index to 0ă' B9007D        MOV     CX,7D00         ' Number of words to copy (32000)ă' F3A5          REP     MOVSW           ' Move the words!ă' 5D            POP     BP              ' Reset the Base Pointeră' 1F            POP     DS              ' Reset the Data Segmentă' CA0400        RETF    0004            ' Return to BASIC Program, clean upă'                                         stack...ă'ă' Assembler code (code2) is as follows:ă'ăcode1$ = "1E5589E58B460A8ED88B7608B800A08EC0BF0000B9007DF3A55D1FCA0400"ăcode2$ = "1E5589E58B46108ED88B760AB106D3E689F3B102D3E601DE8B5E0C01DE8B5E0E01DE8A460888045D1FCA0A00"ă'ă' Now we poke the code into the memory reserved for it:ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 29ă  d% = VAL("&h" + MID$(code1$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ăDEF SEG = VARSEG(code2%(0))ă'ăFOR i% = 0 TO 43ă  d% = VAL("&h" + MID$(code2$, i% * 2 + 1, 2))ă  POKE VARPTR(code2%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ăSCREEN 13ă'ăDOă  'ă  ' First, clear out our buffer (kinda like cls 0)ă  'ă  ERASE buffer%ă  'ă  ' Set some random pixels using our new routine...ă  'ă  DEF SEG = VARSEG(code2%(0))ă  FOR t% = 1 TO 300ă    x% = INT(RND * 320)ă    y% = INT(RND * 200)ă    c% = INT(RND * 256)ă    CALL ABSOLUTE(BYVAL VARSEG(buffer%(0)), BYVAL VARPTR(buffer%(0)), BYVAL x%, BYVAL y%, BYVAL c%, VARPTR(code2%(0)))ă  NEXT t%ă  DEF SEGă  'ă  ' Blast it to screen!ă  'ă  DEF SEG = VARSEG(code1%(0))ă  CALL ABSOLUTE(BYVAL VARSEG(buffer%(0)), BYVAL VARPTR(buffer%(0)), VARPTR(code1%(0)))ă  DEF SEGă  'ăLOOP UNTIL INKEY$ <> ""ăAndrew L. Ayers                BLAST! MODE 13H SPRITE ROUTINE andrewa@indirect.com           10-04-96 (00:00)       QB, QBasic, PDS        102  3222     BLSTSPRT.BASDIM sprite%(15, 15), buffer%(31999), code1%(29), code2%(43)ă'ă' Assembler code (code1) is as follows:ă'ă' 1E            PUSH    DS              ' Save the Data Segmentă' 55            PUSH    BP              ' Save the Base Pointeră' 89E5          MOV     BP,SP           ' Get the Stack Pointeră' 8B460A        MOV     AX,[BP+0A]      ' Let AX=Buffer Segment Addressă' 8ED8          MOV     DS,AX           ' Set the Data Segment=AXă' 8B7608        MOV     SI,[BP+08]      ' Let Source Index(SI)=Buffer Offsetă' B800A0        MOV     AX,A000         ' Set AX=Start of Video (13h)ă' 8EC0          MOV     ES,AX           ' Set the Extra Segmentă' BF0000        MOV     DI,0000         ' Set the Destination Index to 0ă' B9007D        MOV     CX,7D00         ' Number of words to copy (32000)ă' F3A5          REP     MOVSW           ' Move the words!ă' 5D            POP     BP              ' Reset the Base Pointeră' 1F            POP     DS              ' Reset the Data Segmentă' CA0400        RETF    0004            ' Return to BASIC Program, clean upă'                                         stack...ă'ă' Assembler code (code2) is as follows:ă'ăcode1$ = "1E5589E58B460A8ED88B7608B800A08EC0BF0000B9007DF3A55D1FCA0400"ăcode2$ = "1E5589E58B46108ED88B760AB106D3E689F3B102D3E601DE8B5E0C01DE8B5E0E01DE8A460888045D1FCA0A00"ă'ă' Now we poke the code into the memory reserved for it:ă'ăDEF SEG = VARSEG(code1%(0))ă'ăFOR i% = 0 TO 29ă  d% = VAL("&h" + MID$(code1$, i% * 2 + 1, 2))ă  POKE VARPTR(code1%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ăDEF SEG = VARSEG(code2%(0))ă'ăFOR i% = 0 TO 43ă  d% = VAL("&h" + MID$(code2$, i% * 2 + 1, 2))ă  POKE VARPTR(code2%(0)) + i%, d%ăNEXT i%ă'ăDEF SEGă'ă'***************************************************************ă'ăDATA 0,0,0,0,0,F,F,F,F,F,F,0,0,0,0,0ăDATA 0,0,0,F,F,4,4,4,4,4,4,F,F,0,0,0ăDATA 0,0,F,4,4,4,4,4,4,4,4,4,4,F,0,0ăDATA 0,F,4,4,4,4,4,4,4,4,4,4,4,4,F,0ăDATA 0,F,4,4,4,3,3,3,3,3,3,4,4,4,F,0ăDATA F,4,4,4,3,3,0,0,0,0,3,3,4,4,4,FăDATA F,4,4,4,3,0,0,0,0,0,0,3,4,4,4,FăDATA F,4,4,4,3,0,0,0,0,0,0,3,4,4,4,FăDATA F,4,4,4,3,0,0,0,0,0,0,3,4,4,4,FăDATA F,4,4,4,3,0,0,0,0,0,0,3,4,4,4,FăDATA F,4,4,4,3,3,0,0,0,0,3,3,4,4,4,FăDATA 0,F,4,4,4,3,3,3,3,3,3,4,4,4,F,0ăDATA 0,F,4,4,4,4,4,4,4,4,4,4,4,4,F,0ăDATA 0,0,F,4,4,4,4,4,4,4,4,4,4,F,0,0ăDATA 0,0,0,F,F,4,4,4,4,4,4,F,F,0,0,0ăDATA 0,0,0,0,0,F,F,F,F,F,F,0,0,0,0,0ă'ăFOR y% = 0 TO 15ă  FOR x% = 0 TO 15ă    READ valu$ă    sprite%(x%, y%) = VAL("&h" + valu$)ă  NEXT x%ăNEXT y%ă'ăSCREEN 13ă'ăDOă  'ă  ' First, clear out our buffer (kinda like cls 0)ă  'ă  ERASE buffer%ă  'ă  DEF SEG = VARSEG(code2%(0))ă  FOR t% = 1 TO 30ă    x% = INT(RND * 300)ă    y% = INT(RND * 180)ă    'ă    FOR yy% = 0 TO 15ă      FOR xx% = 0 TO 15ă        c% = sprite%(xx%, yy%)ă        IF c% THENă          CALL ABSOLUTE(BYVAL VARSEG(buffer%(0)), BYVAL VARPTR(buffer%(0)), BYVAL xx% + x%, BYVAL yy% + y%, BYVAL c%, VARPTR(code2%(0)))ă        END IFă      NEXTă    NEXTă  NEXTă  DEF SEGă  'ă  ' Blast it to screen!ă  'ă  DEF SEG = VARSEG(code1%(0))ă  CALL ABSOLUTE(BYVAL VARSEG(buffer%(0)), BYVAL VARPTR(buffer%(0)), VARPTR(code1%(0)))ă  DEF SEGă  'ăLOOP UNTIL INKEY$ <> ""ăAndrew L. Ayers                GET/PUT MANIPULATION ROUTINES  andrewa@indirect.com           10-22-96 (00:00)       QB, QBasic, PDS        149  4990     GPMANIP.BAS 'ă' Description : GET/PUT Manipulation Routinesă' Written by  : Andrew L. Ayersă' Date        : 10/22/96ă'ă' These routines show how you can *directly* manipulate the GET/PUT bufferă' structure to build/destroy/read/write a sprite at any moment. You couldă' display a sprite, modify the buffer, then display it again - changes andă' all! These routines are powerful! For a great demonstration, see theă' GetShift demo, which uses the same techniques to achieve a full (almost)ă' screen scroll, with little overhead! For more info, read the commentsă' within each routine...ă'ă' You may use this routine in any manner you like, as longă' as you give credit in an appropriate manner. Have phun!ă'ăDECLARE SUB GetSpriteData (xsize%, ysize%, x%, y%, num%, colr%)ăDECLARE SUB SetSpriteData (xsize%, ysize%, x%, y%, num%, colr%)ă'ăDIM SHARED buffer%(1000)ă'ăSCREEN 13ă'ă' Play with these lines...ă'ă'LINE (1, 1)-(14, 14), 12, BFă'LINE (4, 4)-(11, 11), 4, BFă'GET (0, 0)-(15, 15), buffer%(0)ă'ă'LINE (1, 1)-(14, 14), 15, BFă'LINE (4, 4)-(11, 11), 3, BFă'LINE (6, 6)-(9, 9), 235, BFă'GET (0, 0)-(15, 15), buffer%(130)ă'ă'PUT (0, 0), buffer%(0), PSETă'CALL GetSpriteData(16, 16, 6, 6, 1, colr%) ' Get a coloră'PRINT colr%ă'ăCLSă'ă' Building a sprite from scratch!ă'ăCALL SetSpriteData(16, 16, -1, 0, 1, 128) ' Set the Width (16 x 8 = 128)ăCALL SetSpriteData(16, 16, -3, 0, 1, 16)  ' Set the Heightă'ăFOR y% = 0 TO 15ă  FOR x% = 0 TO 15ă    CALL SetSpriteData(16, 16, x%, y%, 1, 12)  ' Dataă  NEXT x%ăNEXT y%ă'ăFOR y% = 5 TO 10ă  FOR x% = 5 TO 10ă    CALL SetSpriteData(16, 16, x%, y%, 1, 4)  ' Dataă  NEXT x%ăNEXT y%ă'ă' Use the *real* PUT command to place our sprite!ă'ăPUT (50, 50), buffer%(130), PSETăăSUB GetSpriteData (xsize%, ysize%, x%, y%, num%, colr%)ă  'ă  ' xsize% = Width of sprite in pixelsă  ' ysize% = Height of sprite in linesă  ' x%     = X position to "get", must be 0-(xsize%-1) (see note below)ă  ' y%     = Y position to "get", must be 0-(ysize%-1) (see note below)ă  ' num%   = Sprite number offset (0 if buffer only contains one image)ă  ' colr%  = Color of pixel retrievedă  'ă  ' **NOTE**ă  ' Both x% and y% must be set to values between 0 and "size" - 1. The onlyă  ' time this rule is not enforced is for the following:ă  'ă  '   If x% is less than zero (0), and y% equals zero (0), then the followingă  '   information may be obtained for values of x% :ă  'ă  '     Value  Informationă  '     -----  -----------ă  '      -1    Low byte of width information (divide by 8 to get true width)ă  '      -2    High byte of width informationă  '      -3    Low byte of height information (true height)ă  '      -4    High byte of height informationă  'ă  '   I believe for large sprites (larger than 32 x 256 pixels), both highă  '   and low bytes will have info in them for width and height, and there-ă  '   fore are true integer values (16 bit). In these cases, you will needă  '   to multiply the byte values out to get the 16 bit real value.ă  'ă  DEF SEG = VARSEG(buffer%(0))ă  'ă  spritewords% = ((xsize% * ysize%) / 2) + 2ă  'ă  IF x% < 0 AND y% = 0 THENă    offset% = ABS(x%) - 1ă  ELSEă    offset% = ABS(y%) * ysize% + ABS(x%) + 4ă  END IFă  'ă  colr% = PEEK(VARPTR(buffer%(num% * spritewords%)) + offset%)ă  'ă  DEF SEGă  'ăEND SUBăăSUB SetSpriteData (xsize%, ysize%, x%, y%, num%, colr%)ă  'ă  ' xsize% = Width of sprite in pixelsă  ' ysize% = Height of sprite in linesă  ' x%     = X position to "set", must be 0-(xsize%-1) (see note below)ă  ' y%     = Y position to "set", must be 0-(ysize%-1) (see note below)ă  ' num%   = Sprite number offset (0 if buffer only contains one image)ă  ' colr%  = Color of pixel to setă  'ă  ' **NOTE**ă  ' Both x% and y% must be set to values between 0 and "size" - 1. The onlyă  ' time this rule is not enforced is for the following:ă  'ă  '   If x% is less than zero (0), and y% equals zero (0), then the followingă  '   information may be modified for values of x% :ă  'ă  '     Value  Informationă  '     -----  -----------ă  '      -1    Low byte of width information (multiply by 8 to set true width)ă  '      -2    High byte of width informationă  '      -3    Low byte of height information (true height)ă  '      -4    High byte of height informationă  'ă  '   I believe for large sprites (larger than 32 x 256 pixels), both highă  '   and low bytes will need to have info in them for width and height, andă  '   therefore the width/height values will need to be broken down from theă  '   integer value (16 bit)  to high and low byte values, then sent to thisă  '   routine.ă  'ă  DEF SEG = VARSEG(buffer%(0))ă  'ă  spritewords% = ((xsize% * ysize%) / 2) + 2ă  'ă  IF x% < 0 AND y% = 0 THENă    offset% = ABS(x%) - 1ă  ELSEă    offset% = ABS(y%) * ysize% + ABS(x%) + 4ă  END IFă  'ă  POKE (VARPTR(buffer%(num% * spritewords%)) + offset%), colr%ă  'ă  DEF SEGă  'ăEND SUBăAndrew L. Ayers                FAST SPRITE DEMO               andrewa@indirect.com           10-22-96 (00:00)       QB, QBasic, PDS        49   3139     FASTSPRT.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FASTSPRT.ZIP",4^6:Z&=2071:?STRING$(50,177);ăU"%up()%9%%%d-%+,8'FRd1Uu3*.%%01%%%1%%%%kf%xyxu%wySgIfx\%;:>SoO5văU"-xNx0QQdo7VSdeC\gu&=<-/w9+qjOk#*GfY#2Q44EWlxvlR0.Bbp](?zB?gGE^kăU"6H[fqMGxgX(EQ]K<B[h+q:ri__A=j/,qp6IpN3hID$l^>n'b-;/_\vadk*Xc<-2ăU"v/k0xGi\'/]r#OB9+XYl;JGt9\^fYT0nP)u#7e+4I9]E[Q#2G3Aj#hRaF6i4s1VăU"3ahIh08O4ql_xinr/Ba[iIiNFUJ8?iE<A?+A$'tE*H:Ec=2y=;UHa^3j5Rf2U/8ăU"72Y98T$.*s)*3q]*p0#aP=T)e1<6p4VXWP;5\1:3mMv=HPg>nH4injq\/NGC^=QăU"2]A#+CZO1i#jAmE1V;cJTMiqd#iHJ9mu='vlvR70<kaU[-:Qp*GaQ)$0W3[Gs)răU"&hpm)WMic%^I8K#I\EogEx2-)2SEb^6VFVChuq;R'Cs</?ge(?L^tE3Vqo[#q[/ăU"h;cOAGPX_wmq=wHQdN>qV:#+YrTIh_<'*<+IG>*-3Pef+sAbr'GA5Gef31Aj*fQăU"RU2VWU&oo]MT&J#>>c.i.MEg.crI2Jx)f\(q-]tN[2=fwbBV2e<_=WQe-7X7lqiăU"=.[R)kQ0pj8r&uJ(m4.g_f:<\tTQcE;ZLwvPyj$4,roQooZ7wB-ic$C\tfA:gSVăU"Wf$M\^sDJqlcdjTU3NHepw)3jjL=*7\Go;Ik;HEPiRC5laP(U'0KSAw221t+F1hăU"N0ZUlhl>o..q/T'[yl-AXn_1(YD$oNDa&vL:7TX#C;4X(yB\&rMY3I1FupGCYS0ăU"^93e6aQ#Tmb&cI3(ex+p&12AV0iTmPNsz4J]F$5Y*_e8?I[$XE(l&$zsW_p/hWwăU";/It63SvWS.Qr$[TVA%[#SU<,:;^GC'_6Gi>CRh:NP8NZ6NPkZO0/MHU8RHb5dQăU"X+.W9,2T?+/gztgd>s,n/Fa.e)Y';Ql$IJxC3Os%Gzk-4oKFI>\%P(KCX[q56DOăU"1[RgzV]qHu\rrJG#MWjh6)[GORb97Od86/7dwL7uwSRynCa^x[387SsjW2?p&\,ăU"c]ll=G0=5ku#9'.UG]kk=-fG\yn<6XWh9HFuD#++3bZlL$+:B,ZF]5Q^+IGGxAyăU"/eMAdJ6J5CWJ<Cg*iS*lOJ-'oM4AP-gbZ?*,6IH5V=T^gql.+mt7wtF4aW4BmI=ăU"J/rECiTB$pM%G6vKD;Vbtfe*$Dk98&(6$QY#'\>r%'BdBKo\YyZ(xbbjfu+XF-QăU"?8S,\1E72ri=>u'2gz5ZM2x)M(uR[DEof[CO1a0JC<'3\5MrhQpd>iAGEuwLj5NăU"Z(:vze>_/(zbU_NtL\=9yLlrUPt*RAW*mZ(sNE)k$If?OzhUO8NS(:Z0e.CYu_'ăU"8Ob^^cZ;/-.Q6A7weDF)vk,?,Q<\gh(E]p%ZVox%xNfwXbN=udbz7\#z8^=%1=DăU"fWe+P#A9:<?Ev6:2un-Jh=p)m6XN:v.5GNi=ewdCL6BEMHuf+Yf))9tsG-LH1<9ăU"/%6ceR-*>8v3wV&Ffxpb+;)HhSUh,L,Ds)DP_5Wb8nc;xvNv7YbNKh)NU'cRNbKăU"+.1RP]-slbQebu+G%vFX)&V7:h2G[jZ+?q&&0q6[HxDkfu(JZ7G2wT6Pe5Ay&]]ăU"4Z$GV_$<<#G/uw3[-Z'C<]VHSL^h]?-MI]dRDuT&,[9o\5M9nRf6'?+Y3cdn)VcăU"wb):kz+*&_zkndj3?4(igYpO93Q,SWY&<o$x6>sZdL2x;-U^\i<y4TaxPS#4zH7ăU"VK+0JHW8g6N'pTup%()9%%%%-%1lb%F7=wWp'T&%%-px%%%.%%%%xmnu%VSxu=wăU"fIv,9Te=a)YVARm&#hPBmcLNaPBP?K')g(QvumTU,L>jeSNoUfzvMkMt$5Qwsm5ăU"9Da$Oulum-4Q4I]n;#lkuW#5nq4Hhl(amQHtNal7G^+2(ad8s$kflIMeaV[p1YeăU"8beG#uLWrCbfQZ/^Du3uomZ/8hh?Wg.3h^0?Xs$X_C*Yz^Ct^4surkK6jB0c[E9ăU"nhHrHvIdj#$?a;d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9O%&(+1d=U/ăU"9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+ăU"1=U5/9O&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9OăU"%&(+1%=Y1?I+2RUOf<o00IU7=%Y1?+12RUfi<o0I(U7=Y%1?+2_RUf<;o0IU&7=ăU"Y1#?+2RSUf<oG0IU7#=Y1i'xb1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5ăU"/9O&%(+1=UU/9OU&RtU%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9ăU"O%&(+1d=U/9&O&(+#1=U/<i>l#%up&'%9%9%%%%-%5+,'FBRdUu&3*%%&01%%%1ăU"%%%%%%%%%&%E%%%%%%%%%kf%xyxu%wySg%fxup%&'9%%9%%%#-%lb&%F=w9WpT&ăU"m%%px%%%.%%%%%%%%%%%%E%%%&]*%%%xmnu%VSxu%wup*%+%%%%%'%'(%#%%(%_ăU",%%%%%ăEND SUBăCLOSE:IF S=171AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew L. Ayers                EXPLOSIONS EFFECT              andrewa@indirect.com           10-22-96 (00:00)       QB, QBasic, PDS        76   1630     EXPLOSNS.BAS'ă' Description : Explosions - VGA mode 13 special effectă' Written by  : Andrew L. Ayersă' Date        : 10/22/96ă'ă' The name says it all!ă'ă' You may use this routine in any manner you like, as longă' as you give credit in an appropriate manner. Have phun!ă'ăSCREEN 13ă'ă' Set up arrays for our explosion dataă'ăDIM x(50), y(50), xv(50), yv(50), ox(50), oy(50)ă'ăDOă  'ă  ' Initialize an explosionă  'ă  FOR t% = 0 TO 50ă    x(t%) = 0ă    y(t%) = 0ă    dir = RND * 6.28: vel = INT(RND * 5) + 1ă    xv(t%) = SIN(dir) * velă    yv(t%) = COS(dir) * velă  NEXT t%ă  'ă  ' Initialize offsets and coloră  'ă  tx% = INT(RND * 320)ă  ty% = INT(RND * 200)ă  c% = 31: done% = 0ă  'ă  ' Print the titleă  'ă  LOCATE 1, 6: PRINT "Explosions by Andrew L. Ayers"ă  LOCATE 23, 8: PRINT "Press any key to exit demo"ă  'ă  ' Explode!ă  'ă  DOă    'ă    ' Move all the piecesă    'ă    FOR t% = 0 TO 50ă      'ă      ' Erase an old pieceă      'ă      LINE (ox(t%) + tx%, oy(t%) + ty%)-(x(t%) + tx%, y(t%) + ty%), 0ă      ox(t%) = x(t%): oy(t%) = y(t%)ă      'ă      ' Move the pieceă      'ă      x(t%) = x(t%) + xv(t%)ă      y(t%) = y(t%) + yv(t%)ă      'ă      ' Draw it at new positionă      'ă      LINE -(x(t%) + tx%, y(t%) + ty%), c%ă      'ă    NEXTă    'ă    ' Decrement color to "fade"ă    'ă    c% = c% - 1: IF c% < 16 THEN done% = 1 ' Do another explosion if doneă    'ă    IF INKEY$ <> "" THEN done% = 2 ' Exit on any key pressă    'ă    FOR dlay = 1 TO 5000: NEXT dlay ' Change to suit your machineă    'ă  LOOP UNTIL done%ă  'ăLOOP UNTIL done% = 2ă'ăCLSăAndrew L. Ayers                FAST & SMOOTH SCROLLING EFFECT andrewa@indirect.com           09-10-96 (00:00)       QB, QBasic, PDS        89   2012     GETSHIFT.BAS'ă' Description : GetShift - Mode 13 VGA Special Effect Routineă' Written by  : Andrew L. Ayersă' Date        : 09/10/96ă'ă' This shows off one hell of a way to achieve a very smooth and fast "scroll"ă' type effect which may be useful in a game or demo. The technique I use toă' do the effect is to shift the data within the GET buffer, re-displaying ită' each time using the PSET operator. By keeping the buffer small, I can doă' the shifting relatively fast, then copy the shifted version over and overă' again on the screen to create a full screen scroll type effect!ă'ă' As always, if you use this in any of your creations, please consider youră' source and mention my name. Thanx, and have phun!ă'ăDIM a%(451), save%(24)ă'ăSCREEN 13ă'ă' Build our imageă'ăFOR t% = 15 TO 0 STEP -1ă  'ă  col% = 31 - (t% * 2)ă  CIRCLE (15, 0), t%, col%ă  PAINT (15, 0), col%ă  'ă  CIRCLE (15, 29), t%, col%ă  PAINT (15, 29), col%ă  'ă  CIRCLE (0, 15), t%, col%ă  PAINT (0, 15), col%ă  'ă  CIRCLE (29, 15), t%, col%ă  PAINT (29, 15), col%ă  'ăNEXTă'ă' Put it in the bufferă'ăGET (0, 0)-(29, 29), a%ă'ă' The following is info you might find helpfulă'ădbyte% = a%(0)ăhighbyte% = INT(dbyte% MOD 256)ălowbyte% = INT(dbyte% / 256)ăwid% = INT(highbyte% / 8) ' Width of GET image in pixelsă'ădbyte% = a%(1)ăhighbyte% = INT(dbyte% MOD 256)ălowbyte% = INT(dbyte% / 256)ăhgt% = highbyte% ' Height of GET image in linesă'ă' Clear off the screenă'ăCLSă'ăLOCATE 1, 3: PRINT "Smooth as Silk! - By Andrew L. Ayers"ă'ăDOă  'ă  ' Shift the buffer upă  'ă  FOR t% = 0 TO 14: save%(t%) = a%(2 + t%): NEXT ' Top lineă  'ă  ' Middle linesă  'ă  FOR t% = 17 TO 451ă    'ă    a%(t% - 15) = a%(t%)ă    'ă  NEXTă  'ă  FOR t% = 0 TO 14: a%(437 + t%) = save%(t%): NEXT ' Bottom lineă  'ă  ' Display it!ă  'ă  FOR y% = 0 TO 5ă    'ă    FOR x% = 0 TO 9ă      'ă      PUT (7 + x% * 30, 10 + y% * 30), a%, PSETă      'ă    NEXTă    'ă  NEXTă  'ăLOOP UNTIL INKEY$ <> ""ăAndrew L. Ayers                QUADRATIC PLASMA               andrewa@indirect.com           10-23-96 (00:00)       QB, QBasic, PDS        148  3332     QPLASMA.BAS 'ă' Description : Quadratic Plasmaă' Written by  : Andrew L. Ayersă' Date        : 10/23/96ă'ă' This is a program to create quadratic plasma (I am unsure onă' the name here. I know I am not using quadratic equations, bută' hey, call it what you want). The images are formed using onlyă' math - no recursion, SIN/COS warping, or random numbers. Whată' comes out is a very nice display. On machines without a co-ă' processor, this may take a little while. Have phun!ă'ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăDECLARE SUB SetPal (start.slot%, end.slot%)ă'ăDIM oldr%(255), oldg%(255), oldb%(255)ă'ăSCREEN 13ă'ă' Save old paletteă'ăFOR t% = 0 TO 255ă  CALL ReadRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ă'ă' Create a custom 63 color paletteă'ăCALL WriteRGB(63, 63, 63, 1)ăCALL WriteRGB(63, 0, 0, 15)ăCALL WriteRGB(0, 63, 0, 31)ăCALL WriteRGB(0, 0, 63, 47)ăCALL WriteRGB(63, 63, 63, 63)ă'ăCALL SetPal(1, 15)ăCALL SetPal(15, 31)ăCALL SetPal(31, 47)ăCALL SetPal(47, 63)ă'ă' Display quadratic plasmaă'ă' Try different numbers (greater than 1) for scale!ă'ă'scale = 1ă'scale = 10ăscale = 100ă'scale = 250ă'ăFOR y = -100 * scale TO 100 * scale STEP 1 * scaleă  'ă  h% = 0ă  'ă  FOR x = -160 * scale TO 160 * scale STEP 1 * scaleă    'ă    h% = h% + 1ă    'ă    ' Try out these equations for different effects!ă    'ă    c% = (SQR(x * x + y * y) AND 62) + 1ă    'c% = ((SQR(x * x) + SQR(y * y)) AND 62) + 1ă    'c% = (SQR(ABS(x * y) + ABS(x * y)) AND 62) + 1ă    'c% = (SQR(ABS(x * x - y * y)) AND 62) + 1ă    PSET (h%, v%), c%ă  NEXTă  'ă  GOSUB MovePalette ' Remove this line if your machine lacks a coprocessoră  v% = v% + 1ă  'ăNEXTă'ă' Move the palette for a cool effect!ă'ăDOă  GOSUB MovePaletteă  FOR delay = 1 TO 1000: NEXT delay' Adjust for your machineăLOOP UNTIL INKEY$ <> ""ă'ăCLSă'ă' Reset original RGB valuesă'ăFOR t% = 0 TO 255ă  CALL WriteRGB(oldr%(t%), oldg%(t%), oldb%(t%), t%)ăNEXT t%ă'ăSTOPă'ăMovePalette:ă  'ă  CALL ReadRGB(ored%, ogrn%, oblu%, 1)ă  'ă  FOR t% = 1 TO 62ă    CALL ReadRGB(red%, grn%, blu%, t% + 1)ă    CALL WriteRGB(red%, grn%, blu%, t%)ă  NEXTă  'ă  CALL WriteRGB(ored%, ogrn%, oblu%, 63)ă  'ăRETURNăăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL WriteRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăAndrew L. Ayers                EXPLODING PIECES EFFECT        andrewa@indirect.com           09-12-96 (00:00)       QB, QBasic, PDS        146  3518     EXPLTRI.BAS 'ă' Description : Exploding Pieces - Special Effect Routineă' Written by  : Andrew L. Ayersă' Date        : 09/12/96ă'ă' This shows off a pretty CPU intensive "explosion" of coloredă' triangles, all spinning and moving away from a common center ată' different velocitys. Perhaps it could be modified to be used ină' a game or something. I wrote it after reading a post on one ofă' the newsgroups about someone needing to create an explosion -ă' I hope this helps some...ă'ă' As always, if you use this in any of your creations, please consider youră' source and mention my name. Thanx, and have phun!ă'ăSCREEN 7, , 1, 0ă'ăCONST MAX.NUM = 60ă'ă' Define a triangleă'ăTYPE triangleă  px1 AS INTEGERă  py1 AS INTEGERă  px2 AS INTEGERă  py2 AS INTEGERă  px3 AS INTEGERă  py3 AS INTEGERă  'ă  nx1 AS INTEGERă  ny1 AS INTEGERă  nx2 AS INTEGERă  ny2 AS INTEGERă  nx3 AS INTEGERă  ny3 AS INTEGERă  'ă  r AS INTEGERă  'ă  x AS INTEGERă  y AS INTEGERă  'ă  vx AS INTEGERă  vy AS INTEGERăEND TYPEă'ă' Set up a whole mess of 'emă'ăDIM pieces(MAX.NUM) AS triangleă'ă' Initialize themă'ăFOR t% = 0 TO MAX.NUMă  'ă  pieces(t%).px1 = 0: pieces(t%).py1 = -5ă  pieces(t%).px2 = 5: pieces(t%).py2 = 5ă  pieces(t%).px3 = -5: pieces(t%).py3 = 5ă  'ă  pieces(t%).nx1 = 0: pieces(t%).ny1 = -5ă  pieces(t%).nx2 = 5: pieces(t%).ny2 = 5ă  pieces(t%).nx3 = -5: pieces(t%).ny3 = 5ă  'ă  pieces(t%).r = INT(RND * 360)ă  'ă  pieces(t%).x = 160ă  pieces(t%).y = 100ă  'ă  DOă    'ă    pieces(t%).vx = (INT(RND * 17) - 8)ă    pieces(t%).vy = (INT(RND * 17) - 8)ă    'ă  LOOP UNTIL pieces(t%).vx <> 0 AND pieces(t%).vy <> 0ă  'ăNEXTă'ă' Build SIN/COS tables for speedă'ăDIM sintable(359), costable(359)ă'ărad = (3.14159 * 2) / 360ă'ăFOR t% = 0 TO 359ă  'ă  sintable(t%) = SIN(t% * rad)ă  costable(t%) = COS(t% * rad)ă  'ăNEXT t%ă'ăr% = 0ă'ă' Explode!ă'ăDOă  'ă  done% = 1ă  'ă  ' ERASE LAST IMAGEă  'ă  LINE (0, 0)-(319, 199), 0, BFă  'ă  FOR t% = 0 TO MAX.NUMă    'ă    IF pieces(t%).x >= 0 AND pieces(t%).x <= 319 AND pieces(t%).y >= 0 AND pieces(t%).y <= 199 THENă      'ă      ' CALCULATE POSITION OF NEW IMAGEă      'ă      lx1 = pieces(t%).px1 * sintable(r%) + pieces(t%).py1 * costable(r%)ă      ly1 = pieces(t%).px1 * costable(r%) - pieces(t%).py1 * sintable(r%)ă      lx2 = pieces(t%).px2 * sintable(r%) + pieces(t%).py2 * costable(r%)ă      ly2 = pieces(t%).px2 * costable(r%) - pieces(t%).py2 * sintable(r%)ă      lx3 = pieces(t%).px3 * sintable(r%) + pieces(t%).py3 * costable(r%)ă      ly3 = pieces(t%).px3 * costable(r%) - pieces(t%).py3 * sintable(r%)ă      'ă      pieces(t%).nx1 = pieces(t%).x + lx1ă      pieces(t%).ny1 = pieces(t%).y + ly1ă      pieces(t%).nx2 = pieces(t%).x + lx2ă      pieces(t%).ny2 = pieces(t%).y + ly2ă      pieces(t%).nx3 = pieces(t%).x + lx3ă      pieces(t%).ny3 = pieces(t%).y + ly3ă      'ă      ' DRAW NEW IMAGEă      'ă      c% = INT(RND * 16)ă      'ă      LINE (pieces(t%).nx1, pieces(t%).ny1)-(pieces(t%).nx2, pieces(t%).ny2), c%ă      LINE -(pieces(t%).nx3, pieces(t%).ny3), c%ă      LINE -(pieces(t%).nx1, pieces(t%).ny1), c%ă      'ă      PAINT (pieces(t%).x, pieces(t%).y), c%ă      'ă      pieces(t%).x = pieces(t%).x + pieces(t%).vxă      pieces(t%).y = pieces(t%).y + pieces(t%).vyă      'ă      done% = 0ă      'ă    END IFă    'ă  NEXTă  'ă  r% = r% + 15: IF r% > 359 THEN r% = 0ă  'ă  ' SHOW IMAGE ON SCREENă  'ă  PCOPY 1, 0ă  'ăLOOP UNTIL done%ăAndrew L. Ayers                OTHER NICE SPECIAL EFFECTS     andrewa@indirect.com           10-24-96 (15:12)       QB, QBasic, PDS        100  6558     EFFECTS.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"EFFECTS.ZIP",4^6:Z&=4644:?STRING$(50,177);ăU"%up()%9%%%d-%b*.uF3H2=E,'7%%?)%%%1%%%%ns%yjwk%jwSg.fxDx;0>SUj5văU"]=DNGhz./BQI\<>jTLIiu9CYey_58m2?b+)offAs%jNhFEaUfZCVuL>hVN4F6KiăU"S=l[bUbqjH5Yw/&Qu9q7bV>iK?-I$bUkljDq/'^.$54OV%Y61j[9C#Gc/?89:uxăU"Kb??hp)AGZGW=OBUD:;n0-D)Gjia\KN)oOgGfF[kv&4M[1TR[Ni,6Y,K/[gmw/JăU"JoJE]bVq[>*S%ekk&Ad'T4/.fOETFw*cxrBA6b%25;kKYzy6/\lu0*IcNS'?HmjăU"7,kpxHflfe/GnFME.#hm&dQ0S_g8i;8S.:9nEiTkh69aK8'w%rURt_K3F8aqB*:ăU"TygOsH'Y3'1([uJU9S,o%KgxYylFrq0Zq3IVv9c^6couK.Y*;n,f=)p5[qH,kf(ăU"/ZU?-sj'j6s14?dtYZGC>*zQc0jAB=.7<fg7RsS=RYM)]TK^b[6k7VWg7Y\sV=răU"AQbZ[9qIU]h=nM\(a7Bj:gW8+*DDL#Rl:9m&;s/Og(Z1qZrOPn/I\lq3XO1#tg&ăU":f9BKZ1fT9T.6-\$1<(sTdyi12?xO%p9K9bBPx<c]f-;=r[B5ze(ru(SKTkt3f.ăU"fhvTwtvJs;]2d0I2\8WcG1+ofniuc5;6';Cf8_%ir%Qp*SQFe#WPJ$uN3qRRG(eăU"tb(%-D<s8UH<mMf$aNBjF-pdAt;^$>I[*cAMs3eCcx8;U4wnY8dTY/WBjHki;0făU"mXGq_[>dI9bE207GYx;2FQ/>:K5R,ajF9mUVZ\JNu]a?Y%N-*-fOdu%p()9%%%%ăU"-:%l*u%F&-N+B0+%+%k;%%%.%%%%qns(j)SgRfx6'2<Bjk=5wg>WxV&v3't)w.)ăU"skmCxJka2XrxQo2'0Gdle6=C9R+_Y3kdJ;JF9B5W=8X]nIWeofbteZDf&K2EKC+ăU"I\I#2;Nbsvd-hgrFFr',31Z%)o-0qlSE)_UH17BOcjmiU:9eJ[qt)1p-(Qtx17QăU"b&BV$/&sVR<%g,r[=7.(0x4'[6-lv:jw<^j:JG,:j:TfL)Y#m'[;21au>8Svuq:ăU"RluV/LaPI'F''&K.*ShQg:L/t6)pLgZs:?q/6#7'f)9H&\EF)Eo:$TZ.6R_+UrnăU"=[?v0:6WGa30qt_jG*QKSRGulM1-Egfc==V1+V*V7(yB85qj92mN>.$g0&H'gkNăU"4Sg,):X.5(QmNk#thmewlEqNK0::eJl/,iWUk=J\Vh\/e+g4D2'7J-.5BhdPKzLăU"13G#m1dl/p(dbEo4tTy_L+hKVT7nKJO?<%aWS#S2[?BEZ)yfPxp_b>Ul-Y=m9QXăU"h2o\+'Y/<SkdlUn5LE20wp]'mr<P1;+52)n6+=:mZ13s&'^pY;SN:]I:,-vcKoWăU"8?$vPFiql9//as>PPgeZO1kqO\g8'j6/EFN?if-YEF_ibe1b088vqCp*zq-5t8JăU"l>pa,LRb$u(a9cYmaxX3u[T)8/GXuUTVdlS;6r\1.;8IC'&=R/XB#l%6$qP6g/FăU"utrMDuBzr.kX9r(?Jhc0ZA-.cO42+oS,nX.\w<&s+J*SX64((1Hoo$ne)SJUS7<ăU"TsyCYE;;40r/'U<l<UiGpy_X'Mpnr6.d',&P$J(0<uFg7>WCv,&oPE^R_07JI]păU"'CDgtg^#z<;f&e<<P)6+7?Z5;)hd-YxYu=3''<ddnqTVTNq;'&ppp:uKQCzGmX'ăU"DZOq,si-x[:1^r02kTrR2hI#R:Zp_lKUG-_7Cj)or#7K:<B+Y/[^7<:hgEq7qAdăU")(K-Dv3)Q\BA_YJ4%,M?%%rF'sOk,(MPt-Gv>p?lk\bd_[b$jOa[Ux85ol-QYD=ăU"bYIku1fY%kf9Pi/hhuLO9,-nCEx(c.JrqX=L6Ej59MfW\msUOctFHiJ5#:%0$KPăU"MM*u:p7%0mR^avtubhTr%;TKI0eY<5PJ-P%2;?QRfZkmut_kD7'_0$;t6YQglX1ăU"f2uKdnCs-iD.&tVdy#>Xqhn%Ynp&ktja?I1.aNXG(rV&_%r*6g>;H>bybQE$OW#ăU"4'6np)g<aUW9Z'GR0b7$6U('38Jz9-jmHqH$8#nYN?g#8A'OLn23?\TM'Gqju5,ăU"Y_[#<fX-4idLZT4Lq'pOHV$vYWm)8I4.Y/Hc(0_G^\Vuiv:I:xN)42D(oKMITP-ăU"\pz%'D1Gmpdi2M%[aJ.$Nrn$&#((ou^\t#MQJU$fi<KKE9(.2aSs5Q>7Vtm.]]făU"Ne/Z06vc#Tu6qgl2=)Qj5$;pw=GB:&ah2'sCByJ,O%qA-bCZigioTym_A-YT+i7ăU"]o^y,fNUPw+y3mA-YWasWnSZ2'so(2*cFpBZUng<757jx9q)25qQni*LY3l>-4FăU"qKTzC(>t78d6cmLF7F*_tbBBX0s[y.cmuz:y8YQfIzh)mwx%Btw)(1,pve\R_UwăU"N(b$1Wt6mK_N68'\KGmkV?2_8p:w8_:o'v?+Z2hBeaV86nhwc7r:bpuO&6Re(TLăU"WgpS*I0/-E?_AG0Cx\6t4oN=c+bsFwL4ze4O)OMOex7/(()nhA&02V:q2z-iUZ6ăU"0&E5r)W(*V/:gC:4ZpzCJdhoI[0pbna\a(FStI2UU0<9*PcM=xr&=&tdwMx$#/MăU"nA+2SeeFnf=pG9V>(fbZ%sM0%AJ?gO3\*+yfn17Td'tD14,7MKrBT8Y%Vu^uqaQăU"qadNA56MZd,0Mr/CVHTG%k.t<5^Z.2v*+Q[[FOtpoDX;B6(+V^k9g-&(8w1_EMDăU"?j^X>w'Vk=3c0Hq=5=c1B03E<a%a]KVZsgZVJRDtM*4upuDfoS#O3lW2#IU?jVwăU"Z_2Wek*&[mbKnGgMNs(3b_ACM5sg$0B*<CPt7U%xo:1[kKnBsK?(H6Ac\9=HusAăU"'l/fBP^bGDXB(M#_g]xP_#aW)V7[+tY3j:rL42K?Pg?mTRKC;m4j<r4mQ%\s%YSăU"J&$4C6$3s/,1_LJqFRCx,F4s>WL7NH,=EGHmUR^<7Un3b*_=:mq?0kDZZLl0K?băU"o'yhG:wo(^^=DCH\?,=lb5X*l7/6I80,(G(g2:6b)'Xv%,up(%)9%%[%-%6B*uFăU"$oc.w_#&%%[%)%%-%%%%x%unsS[gfx6kaV=Lde5Th+H^BsdHu)ZJs[txJ1fs_u1ăU">;.Yr=u,c3G)(_?FHhkUM>H'%Buf[g67YL0JF5uGE0#lThEs;gbGP'*ZgnNq'<TăU"Jcy0OG*.KG1<GNX9^M^G.P6;[\c#QNBG-n%$vp7?5_=,2n%t^3/qbqF\uZz3_8năU">;uZjZ2u$W^rGG=>j.q0pvZ.V)%;s4Xe1<9^q$Ou5k^XC$SFfGaRu6I]Y)=6Eq4ăU"H),o,t7emIh:82gZ((;d9)lV*L?]a11j9s6e,)$R5#M9_VlK'\2)FfCewK+aF(MăU",qM?^/Ms[zA$WWZtY1l/h$_>s%P)\m352WL2S8,kx=WrYY92GtoBQ;$HTKe%5fDăU"EWRrN5pYFb>PGaHPlVgS,-_Yy%SG[x9J,S8?9JWg/]29*1\966<._uZXm3ZwNn-ăU"8rXUGL2>Rt;^H[H^oa*W$>8=.(v%?qt?RMG_b=,alTPD+YS*\,\s.S5B*2CA7e9ăU"?&pshT*3=6Rxo<PpE28pNOivM[oKt1m^Zis)jcY>:KX\e=^*<-b7u#:#mm\eWq%ăU"-58$G+x\_Ikl$GhgTA*(oR*+WW#(glxxojAodeBQx*6^_=.=8[2cb:fD.IfCjljăU"zq=vTr%+up(%)9%%[%-%OB*uFpY40Ui%*%%z%2%%-%%%%k&(wjS#gfxlh%<BSmkăU"5wg4>xV2OxP_/h[[bQ&mIX=_2VN:k[:<kEjS;pskKJ4qbXsd-447'[qWrd8#9*TăU"oHcterWh\<;R21fm$XJK.j_TPc1F2;:.KK&kQPPXHh3U('[QwVQm$BkU^GIhnZwăU"]M7dq]A>uY$e,xVYU31Q00'3^?PHQCFcpd&I7XanSvqf>A<cGbG+J/<I4sfH$Y\ăU"%?AGU;8m&JU;%Z57/Oic^)Ys7.F,]3H1??DAlfc(gw7)\<=N9=iL\.,26qU8DR;ăU"kngl?3%2IuZK0u]Y2P\aQb%MkAOvQQPJ2Ay0(fPN_E]wM%;U:'8/bA=Nh0;qM$6ăU"w'$0Seo.n\fuEns1ei##6>ORzP;+,9[g_M(loukcsO,UgCMw,=i(wB=%(y0?M.xăU"T6'KUeZ,IF&aQpI[WmeACT$RIT.]L86i5(>Lwq8qsv+M?/xyiEU,zF,PfsfTMwNăU"q9hXL[MO,F*i,.a]5esQEJ2a+Bh?SlMe,tm#JOo/V4-1dtt<#^L;\+P#F7yA$rnăU"WAFdFn#tc,bRwKNCsx*D3n-+%z1WH<s$^_YZ[YcCUH.5n7RL*&]$gZJ*U]?qH]JăU"]-p-MK85PDGon)<YUW%r%K?+YU[ITRqSqXch9_K<5Pga>UG$[ubT)?hqSn$c\,-ăU"-./B%wrm1ubI2hOs'dLki6#I%c=wR.UdV%I#wng?'[Bd.h0cU/Ld]F7<*s0SfYQăU"AVWvk:\)>vA)jy15tF&&N[IE5D_3mCGO/zmc3'JP+o^iPPiD()<l3wO-F2dWL#oăU"3x:p$=j4vM[cjiMoqs>EKxpXcwq9UVBISVyMjmSys&NaLpm15eZQALFI=ls60peăU"p4b#):Ge:4aU,hiV/?MkSIsmQm\[mX[Ogw9*#G\j3wVqX.3*Y2p=lW''J6rd7Y7ăU"&qRhGYIxVhrtI$5VgS[bW+h8d'o(xCO82V1xYw*+MN%5.:')yV_nV7Ld^3V:8bIăU"4.>Z(Pqpfdrv*fBQgOr6\r1k'x1R,YVQ42><m#T%nI?+Uc(hVI<(#XwpGZ[\k6xăU"cfv(1CHG4<PgWRFDHG%?KE4EK;0VP;'Pj#K-Lw=s4aoef=jQ$riwH0&BU%bEG]hăU",rG8vX8Up_(w\6]&/ga[=YIJz7+6:Yeh9XVGlp7%KS;J7\n&N/J5FZJ$IR;VcNVăU"m=j*_Nc4#_?Vsm+6*O$n.D%ICjJlo,A]I3UVKD2Gfq'aevWkeJ[F*ec3<q#rS/iăU"xkuxu,iolLXJ(+knNfH..pY0vhs,4,:gQ<6W.[y8asdTW+YjAC42'Ev/U2LfkFsăU"O#&TUI>#Q2(cdE>AW#R>U6MX%h+gE)zK+WfjT;h1v,gPjpI66X?^YjQ#vMVJJjlăU".NZ4j,M5'\uA&Mr8J(xb<^JQlOu:nhAD=YE]a)AsRCa_B3OunP.f8J>=]58D6<\ăU"7_j=;/m>*xDTcig(MD9V,VI,dHJYdngxE(.dE)I>p4jv^3Y]eL:l:\m2F66R(J%ăU"VO6Ak[?DG'69]SW+6]inJk;a;^=qCt+lvPHd)Qk25XgQ2R%M]>P&=O/'[zy_q=2ăU"psCk<$o#K7*C<ZAZpAZwp8H=<)H3P8]Z^k_w\#*K%3%p'hl*sdN1<z.%L>81A=\ăU"S:-+\OR1qN2V:m5WOZrK_4G9%s0Yb99p'*+].J4KU^.m\V7=cqtV7oV-D>eWR$^ăU"2f_-]S\]*B4JKgP)'X?F$6W%wigX2LfO5GN1PlF3cWgz,Z[J%G%YPCrC^bOg/h>ăU"GzpmA._Owqg;Y's;Yk-Z2wYMblFL=>l5qwEdR?owEDrx6#f;1BUItJt5jt&BfLZăU"/G2;QC:J5<[1Hqh+Hnb%dup&%'9%9%%%%-:%b*uCF3H=)E,'%+%?)%%%1%%%%%%ăU"%%%&%E%%%%%%%%%n%syjw%kjwS%gfxu%p&'9%%9%%#%-%l'*uF&[-NB0[+%%k%;ăU"%%.%%%%%%%%%&%%E%%(%V'%%%qns(j)Sg%fxup%&'9%%9%%%m-%6*duF$c=.w_&ăU".%%[)%%%-%%%%%%%%%&%%E%%%&4.%%%xuns%Sgfx%up&'%9%9%%%%-%-O*uFqp4ăU"0U&i*%%%z2%%%-%%%%%%%%%&%E%.%%#0#%%k(%wjSg%fxup%*+%%%%%)%7)%V%%ăU"%%V6%%%%%ăEND SUBăCLOSE:IF S=217AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRobert Seidel                  MELTING SNOWMAN                rseidel@ifk.uni-jena.de        10-25-96 (12:00)       QB, QBasic, PDS        84   2438     SUMMER.BAS  ' SUMMER.BAS - FREEWARE by Robert Seidel rseidel@ifk.uni-jena.deăă'  ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰă' Ű                                                     Űă' Ű This file was found at Robert's HomePage !          Űă' Ű                                                     Űă' Ű Come and visit me if you are interested in:         Űă' Ű                                                     Űă' Ű  PowerBASIC, QBASIC, POVRAY, POVLAB,                Űă' Ű    FREE 3D Studio IPAS, PICTURES,                   Űă' Ű      FREEWARE, GAME Levels                          Űă' Ű        AND A LOT OF LINKS !                         Ű ă' Ű                                                     Űă' Ű  http://www.uni-jena.de/~p6sepa/rshp.html  ___      Űă' Ű                                           (o o)     Űă' Ű                                       oOo ( O ) oOo Űă'  ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰăăăDEFINT A-ZăDIM melt(2400)ăăSCREEN 13ăRANDOMIZE TIMERăăFOR i = 0 TO 63 'Paletteă  SetRGB i, 64 - i, 64 - i, 64 - i 'grauă  SetRGB i + 64, i, 0, 0 'rotă  SetRGB i + 128, 63, i, 0 'rot-orangeăNEXTăăFOR i = 1 TO 50 'Schneeă  LINE (0, i + 150)-(320, i + 150), iăNEXTăăRenderCircle 160, 158, 50, 1, .8 'Schneemannk”rperăRenderCircle 160, 95, 35, 1, .8ăRenderCircle 160, 50, 25, 1, .8ăRenderCircle 149, 45, 3, 58, 1.2 'AugenăRenderCircle 169, 46, 3, 58, 1.2ăFOR i = 85 TO 205 STEP 25 'Kn”pfeă  RenderCircle 155 + RND * 2, i, 2, 50 + RND * 4, 1ăNEXTăCIRCLE (160, 93), 40, 0, 1.2, 1.8 'MundăCIRCLE (160, 94), 40, 0, 1.2, 1.8ăFOR i = 147 TO 177ă  LINE (i, 9)-(i - 2, 32), i - 130 'HutăNEXTăLINE (135, 32)-(184, 34), 30ăFOR x = 16 TO 1 STEP -1 'Naseă  RenderCircle 142 + x, 59 - x / 2.5, x \ 4, 128 - x * 2, 1ăNEXTăăSLEEP 'Pauseăă'SCHMELZEFFEKT:ăFOR i = 1 TO 4000 ă  x = RND * 271ă  y = RND * 150ă  GET (x, y)-(x + 48, y + 48), meltă  PUT (x, y + 1), melt, PSETăNEXT iăăRenderCircle 160, 100, 60, 128, 1 'SonneăRenderCircle 140, 80, 7, 55, 1 'AugenăRenderCircle 180, 80, 7, 55, 1ăCIRCLE (160, 80), 50, 60, 4, 5.5 'MundăCIRCLE (160, 88), 50, 60, 3.6, 5.8, 1.3ăăSLEEP 'PauseăăSUB RenderCircle (x, y, r, colstart, a!)ă  FOR i = r TO 0 STEP -1ă    CIRCLE (x, y), i, (colstart + i), , , a!ă    PAINT (x, y), (colstart + i)ă  NEXTăEND SUBăăSUB SetRGB (Nr, r, g, b)ă  OUT &H3C8, Nră  OUT &H3C9, ră  OUT &H3C9, gă  OUT &H3C9, băEND SUBăMathew Robertson               BOUNCING WOODEN BALL           FidoNet QUIK_BAS Echo          10-21-96 (18:29)       QB, QBasic, PDS        61   4350     BOUNCE.BAS  'Here is a little graphics program I wipped up.  It is a simple bouncing ball.ă'But the graphics are alot better then the plain old circle that most normalyă'is used.  I used a raytraced wooden ball instead.  Just had to add a twist ă'to it.ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3băSUB V1:OPEN "O",1,"BOUNCE1.ZIP",4^6:Z&=2820:?STRING$(50,177);ăU"%up()%9%'%d-%e)%rFI/+oFJ)7%%E-%%%0%%%%gt%zshj%VSgfCxdz,,B[[9hL6Ux/?Kj40LJăU"(1hj,aR)EU'n/gK_&YE3fjW)TfX0*aa1Z187&c+*hKkVfR#heCDHa^pCBYrjV3u3=Ykt>Y;$VăU":e>)bP>V/.qk;:&B?Nq+7F(SVj\>?[cCtZEo=VKb+IC>DDegVOACbkXLF?TE#1TZhhuxa7D3*ăU"+qba^IU'h[&HF?O[TvXuY-Hq-geFAvP9#JsY;C*q*Fs8jnV.*qST7>45?Gb296\/;5YpqJU%LăU"O7n2l,8Fm^'BK+Uk5J.)ZiaV0D_CN)kpOrvS'R(SH6R&39i.VZ$+g5:F8n&sa^1N*]1iejbbaăU"_bl57&JjPLW1jFX6slFOBV'D+BS:-y/Q9(5lSkD(c898*;_yRUc:E-/sY3PPoFk2rPRTUeLqTăU"6<ZEb2vM6DEZ4>&ld<mUv[5<%V\OKc7GJNa+lmZ#Lj;^4,V_KkR?ee>#\TdZpCQ-^#]FUk^E4ăU"FLW9hwIDd/o)EA'7mSY49$/n-'<M.m50_LkjcH9QsUUJ:0/qYF\;m\V2u(*UZldEo*o[H+D3BăU"pT=I+W+#76W2Vn<w825>(Wcu?H4]aC_,?/iwncfM&KXD6RrJpwTVOlQ3X&PMJ;1nCmqBylv/GăU".VoH_/SlOC6J=8zMB*E5gXX_BwueP]U9+D+BS3ivSw:nCi\JSlJ[X%ip6P&j]oM*lUXw+h;QyăU"]:4#*RZG(O7*VP'JMiL$jkpe>/hv?ff,k%6f+7([/#jjCnqE]+I1JI:Gu-^aSJg-vob;rZHLKăU"wc[MpxSq2aqC*ix^U;D74L;SsoW][mBWn6[SS8dW7?dzn2*ct8n\ROr0Nph8d*6t^umr%hM?_ăU";xuS1A:20n*^Ct*=-]zmQjEP#?FpK^'_.*,wZpgC+\wgBM,NSb&GA]<MWOfA4(ng4mFtV6,pZăU"oV2e8Ap=g/vKmW8*nBE3C9*<KuM^;*:AJvSBBCBpwY,))eY;\#;%sE$k,*+il+V/wxNqnRXjZăU"S7I4kX-x;s]8Ke#1F)?QH:>;:hi<Gm()b(cw)_IXJ2vQOiN[ox_..U>UUJINs9(WVDEQ[WCBqăU"q1f-Z7Gp*;17kHF3of;D%z[,Z8X7^]5i&In2h(io:fq1Smt2,tfC/eNnt2D)6q&'o3Ji1pEdlăU"hA%zo_I(X&[VCZiKFrQjhk*_L=tmv^<7Od;ml)*gm$Bl#Ov=C##,[Lz>Vn2%p87%SX&_Kzqr.ăU"KcJ,cI*%rI#*db.p*H*__f/k#H*zKAtEd%G_8v?:1?r33Y*LLjA#6hC%Y#riaj#B\GVYOW<YTăU"Bhmx_t>uVUC-$s-[p#^,RFX7tfJbl'6R3D_vOsp:z$qjJ>(dS?C4m/8[Q?L$('q<up%()9%%'ăU"%-%)GdrF.ny$\'H'%%&M7%%%.%%%&&tti%VSufLq4d*-'TU1F*x0CL4-QHsi6O8*+);HTBBY-ăU"gEkg=jIrgdu7OXXLdf,&WVbWxr?c'DK-l.2gB2m\OiH+mWPH8,Z$1W=lHdEEsb_rECUHI30#8ăU"5&Kk47R]QnfSgG^tKE$hA3#dx3a>.kQOPN/)_c6N4k5=bmI\k+>C6fUa3CWnnbCA*C3R_2k+OăU"rp6zgqA;NLE8$EV_H$#ms_0?KtT(*TB3k=G\bJHt$$6]An$C3HXB,hn*JA7Ix\H=j2KQ-1jUBăU"^HhqB3WV#T3k=2Q%d$ckd$$],RbFkK*:zQe$qDaqo(,8,nmT>Gv<5khr<_%/E<dAOI*tAs,/HăU"T64JqjmZH\lDfgp_L2LsA+=L,hFIq_D2Ug,HNLokq'lbAJIt[snfomBdA5;bRqGH<Rd*TnElhăU"g;3>naE^lcVL_pjH(<^n\*zfoXX<2MVW.dfO3k;[TH;xR^9_/KXesxs'VE+G8_)[EM?=?=M?=ăU"?=k?g?gk?g?gk?g?gk?g?gk?g?g>?/tK%WG6J7GLCi)Tw7ZaGS#fG\okJtr6JW;7>-\TS#f\WăU"oq67jTSZo5q67TWSZoqN67n7Mn7n7Mn7n7Mn7n7Mn7n7qn7h-bFS$fGlosJtv6LWY8h-FWS6SăU"6WS6S6WS6S6WS6S6WS6S69S<S<9S<S<9S<S<9S<S<9S<S<WS&S&WS&S&rS&S,5x?w?Vz9Eyr*ăU"z?)4?D9qtz*&?T1?d9rEz*(-?9?0n:q%*?*?A?pP:E%u*,?I.?p:qZ&*.1Y:>OY0&:*Pi/%;&ăU"rQ)*.q1:>OGY&:*OP/%;l&Q)*i.1:><OY&:S*P/%Y;&Q)Q*.1:l>OY&^:*P/q%;&QY)*.1Y:>ăU"OY0&:*Pi/%;&rQ)*.q1:>OGY&:*OP/%;l&Q)*i.1:><OY&:S*P/%Y;&Q)>p.x%%up()%9%'%RăU"-%4d.rFYH:$vU'[%%,s%%%.%.%%&t%tiVS\%lfffSpz\[[%eZ+5'D'.8)Q-\Sf0B.0.3i8R[*ăU".p[g:EuuBwGCgp\F]Lw=[a1V9G7<mo,U$IwH6svC_iv#IDa4u0v6wlMzY>fYV=Ebp0-v-VV3tăU"+u7tKeape-dts=56lF&sWRJMcYM>*mbw4PRl0)_vA#LN-\TMl#tD+*PEM^f$W<TK7q2(qQtX:ăU"eMg8\G1mFcEbmwiPe&[*a5m$ME(eo(BdqS05)0<RUN<tCS*bv]Bm$0xMI:U+AAmNdP4TfA8*CăU"bDs&bnl\MgM&ceiZsMe8,uZTfwLT4docNbFs.DvsBk_DH3drm<XpSJNDmgCzfm>JRhhpmx.*XăU"^#Y,7-NVDWT-C%-CXTUr6MS(m;<&EUU'dBMgf<,[DJbo,k/A'Wv-ozBSso:V\Z2SgaeDTl0t>ăU"L/Cp*CZbp3.0PnLZUSI$KXADqkX*'Hx^qgBv>]58okxW)\qBkD5l'lgC5kLihYsXDMOrT,sM%ăU"IWRlt]lHfdWU$n3_Kh?9lP-qxsOo_9LS2NEB#pNE0k+l/mJVN(<3vB-W[)Wdkp#qiZHRt\JJhăU"kD8BTB-wo<$.#F?Pk,FpRi\s/YJs6-tN-.15Cc:2YK.G(1<BCVN17UeSM,sl2T_lYoHj)n,.<ăU"m3ZglT9lO8VoQ(SuHQ7:),u..ode^UiHNX]MVTotduI6g-ck%cI.r<?.6ub.gQox$Oh2r<)FqăU"scCm3OgzziO7tQf8dIwTjvN\Ba_Nn;^ocdLd)EkOD6#M_(&rT\XsmR88N^js/GXWWbF'il/biăU"DJBMMEA;^dNulw:25ycy6&q6rxqBN\P0g4LyqDL[ws5p(a%ld%%%%%%%%%%%%%%%%%%%%%%%%ăU"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[%%%wăU"-pw'u%p&'9%%9%'#%-%e')rFI7/oFJ[)%%E%-%%0%%%%%%%%%&%%E%%%%%%%%%gtz%shjV%SgăU"fx%up&'%9%9%%'%-%)GdrF.ny$\'H'%%&M7%%%.%%%%%%%%%&%E%%%%s).%%&t%tiVS%ufqu%ăU"p&'9%%9%'[%-%4AdrFYdH$vU%'%%,'s%%.%%%%%%%%%&%%E%%%%i,%(%&tt#iVS%%lfup%*+%ăU"%%%%(%.(%v%%%%l/%%%%%ăEND SUBăCLOSE:IF S=90AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSteven A. Morisi               GEOMETRY OF A CIRCLE           steve179@ix.netcom.com         11-05-96               QB, QBasic, PDS        154  4026     GCIRCLE.BAS DECLARE SUB define5 ()ăDECLARE SUB define3 ()ăDECLARE SUB define4 ()ăDECLARE SUB define1 ()ăDECLARE SUB define2 ()ăDECLARE SUB circinit ()ăDECLARE SUB header1 ()ăDECLARE SUB choices ()ăă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă'  Geometry Definitions for Circlesă'  Author : Steven A, Morisiă'  Date   : 10/96ă'  Notes  : E-Mail with comments to steve179@netcom.comă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăCLSăSCREEN 9ăCOLOR 7, 1ăWIDTH 80, 43     'give myself more roomă    header1      'print headeră    circinit     'print initial circleă    choices      'Display choicesăăăDOă     DOă          key.press$ = INKEY$ă     LOOP WHILE key.press$ = ""ăă'     PRINT key.press$ă     SELECT CASE UCASE$(key.press$)ă            CASE IS = "D"ă                 CLSă                 choicesă                 header1ă                 circinită                 LINE (308, 165)-(548, 165), 9ă                 define1ă            CASE IS = "R"ă                 CLSă                 choicesă                 header1ă                 circinită                 LINE (308, 165)-(428, 165), 9ă                 define2ă            CASE IS = "C"ă                 CLSă                 choicesă                 header1ă                 circinită                 CIRCLE (428, 165), 120, 9ă                 define3ă            CASE IS = "H"ă                 CLSă                 choicesă                 header1ă                 circinită                 LINE (309, 170)-(505, 100), 9ă                 define4ă            CASE IS = "T"ă                 CLSă                 choicesă                 header1ă                 circinită                 LINE (300, 102)-(480, 60), 9ă                 define5ăă            CASE IS = CHR$(27)ă                 EXIT DOă     END SELECTăLOOPăSYSTEMăăSUB choicesăFOR i% = 0 TO 3 STEP 3ă    LINE (50 - i%, 55 - i%)-(205 + i%, 200 + i%), 5, BăNEXT i%ăLOCATE 9, 8: PRINT " Press a letter   "ăLOCATE 11, 8: PRINT " (D)iameter      "ăLOCATE 13, 8: PRINT " (R)adius        "ăLOCATE 15, 8: PRINT " (C)ircumference "ăLOCATE 17, 8: PRINT " c(H)ord         "ăLOCATE 19, 8: PRINT " (T)angent       "ăLOCATE 23, 8: PRINT " Escape : Quit   "ăEND SUBăăSUB circinită    ă     CIRCLE (428, 165), 120, 2ă     PSET (428, 165), 4ăăEND SUBăăSUB define1ă'Diameter definitionă'SOUND 600, 4ăLINE (50, 285)-(590, 305), 3, BFăLOCATE 37, 8ăPRINT " The diameter is any line that starts somewhere on the circle,    "ăLOCATE 38, 8ăPRINT " goes through the center and touches the circle on the other side."ăEND SUBăăSUB define2ă'Radius definitionă'SOUND 700, 4ăLINE (50, 285)-(590, 305), 3, BFăLOCATE 37, 8ăPRINT " The Radius is any line that starts at the center and goes to the "ăLOCATE 38, 8ăPRINT " edge of the circle. It is 1/2 the diameter.                      "ăăEND SUBăăSUB define3ă'Circumference definitionă'SOUND 600, 4ăLINE (50, 285)-(590, 305), 3, BFăLOCATE 37, 8ăPRINT " The Circumference is the distance around the circle. You can     "ăLOCATE 38, 8ăPRINT " calculate the circumference by multiplying the diameter x pi.    "ăăEND SUBăăSUB define4ă'chord definitionă'SOUND 600, 4ăLINE (50, 285)-(590, 305), 3, BFăLOCATE 37, 8ăPRINT " A chord is a line that touches a circle in 2 places. The diameter"ăLOCATE 38, 8ăPRINT " is the largest chord of a circle.                                "ăăEND SUBăăSUB define5ă'tangent definitionă'SOUND 600, 4ăLINE (50, 285)-(590, 305), 3, BFăLOCATE 37, 8ăPRINT " A TANGENT is a line that touches a circle in ONLY 1 place.       "ăLOCATE 38, 8ăPRINT "                                                                  "ăEND SUBăăSUB header1ă'    Draw box in which to display circleă     LINE (275, 50)-(590, 275), 15, BFă'    Title on Box                                                                                                     ă     LOCATE 5, 47: PRINT " CIRCLE FACTS "ăăEND SUBăăMattias Andersson              3D FLAMES                      phobia2@hotmail.com            11-05-96 (15:55)       QB, QBasic, PDS        164  5414     3D_FLAM.BAS ' Phobia here... This is my first "contribution" to ABC so ... errr...ă' well... something... I'll just comment the source and hopefullyă' most of you will understand it... There shouldn't be any problemsă' if you've made any kind of demoeffects before.ă' This is a little source I made in school... the computerlessonsă' really suck!ă' Feel free to comment or critisize (the source, not my bad english!),ă' my email is:ă'ă' phobia2@hotmail.comă'ă' I don't want anyone to "clean up" the source like someone (won'tă' mention any names!) did with the flameeffect by Martin Lindhe...ă' If you can't write new Putpixel and Getpixel routines,ă' then you can't make it noticeable faster...ă' One thing that could be made is a precalculated COS and SIN table...ă' but since that's not the slow part I decided to use realtime COS and SIN...ă'ă' Check out my coming demo (it's made in C++... but check it out anyway!)...ă' Send me an email and I'll send it to you as soon as it's finished.ă'ă' See ya in another source!ă'ăDECLARE SUB pal (c%, r%, g%, b%)ăDECLARE SUB flam ()ăSCREEN 13ăxoff = 160              ' Center of the cube in xăyoff = 100              ' Same but in yăzoff = 200              ' Same but in zăxang = .05              ' Don't change these... they control the rotation.ăyang = .05ăzang = .15ăpoints = 8              ' Amount of vertexes in the cube...ăDIM cube(points * 3)    ' All coordinates of the cubeăDIM scr(points * 2)     ' Coordinates of where the vertexes should be on the screenăPAINT (10, 10), 0       ' Errrr...ăFOR a = 1 TO points * 3ă   READ cube(a)ăNEXT aăăFOR a% = 0 TO 63               ' Change the palette, colors 0-48ă   pal a% / 4, a%, 0, 0ă   pal a% / 4 + 16, 63, a%, 0ă   pal a% / 4 + 32, 63, 63, a%ăNEXTăăinc = 1    ' This is the current cube() pos the calculateăăăDOă' The following lines are matrixes (misspelled?), do NOT try to understand them...ăREM ********** Rotate around z-axis **********ăa = cube(inc)ăb = cube(inc + 1)ăa2 = COS(zang) * a - SIN(zang) * băb2 = SIN(zang) * a + COS(zang) * băcube(inc) = a2ăcube(inc + 1) = b2ăREM ********** Rotate around y-axis **********ăa = cube(inc)ăb = cube(inc + 2)ăa2 = COS(yang) * a - SIN(yang) * băb2 = SIN(yang) * a + COS(yang) * băcube(inc) = a2ăcube(inc + 2) = b2ăREM ********** Rotate around x-axis **********ăa = cube(inc + 1)ăb = cube(inc + 2)ăa2 = COS(xang) * a - SIN(xang) * băb2 = SIN(xang) * a + COS(xang) * băcube(inc + 1) = a2ăcube(inc + 2) = b2ăREM ***********************************ăăinc = inc + 3       ' Go to next x positionăăIF inc > points * 3 THENă   inc = 1ă   inc2 = 1ă  ă   WAIT &H3DA, 8        ' Wait retraceă   flam                 ' Make the flameeffectă   DOă      ' This do-loop calculates the screen coordinates of the cube...ă      scr(inc2) = (cube(inc) * 256) / (cube(inc + 2) - zoff) + xoffă      scr(inc2 + 1) = (cube(inc + 1) * 256) / (cube(inc + 2) - zoff) + yoffă     ă      vx = (cube(inc) * 256) / (cube(inc + 2) - zoff) + xoffă      vy = (cube(inc + 1) * 256) / (cube(inc + 2) - zoff) + yoffă     ă      inc2 = inc2 + 2ă      inc = inc + 3ă   LOOP WHILE inc < (points * 3) + 1ă   LINE (scr(1), scr(2))-(scr(3), scr(4)), 48ă   LINE (scr(1), scr(2))-(scr(5), scr(6)), 48ă   LINE (scr(13), scr(14))-(scr(3), scr(4)), 48ă   LINE (scr(13), scr(14))-(scr(5), scr(6)), 48ă   LINE (scr(5), scr(6))-(scr(9), scr(10)), 48ă   LINE (scr(1), scr(2))-(scr(7), scr(8)), 48ă   LINE (scr(11), scr(12))-(scr(7), scr(8)), 48ă   LINE (scr(15), scr(16))-(scr(11), scr(12)), 48ă   LINE (scr(15), scr(16))-(scr(13), scr(14)), 48ă   LINE (scr(15), scr(16))-(scr(9), scr(10)), 48ă   LINE (scr(3), scr(4))-(scr(11), scr(12)), 48ă   LINE (scr(7), scr(8))-(scr(9), scr(10)), 48ă   inc = 1ăEND IFăSELECT CASE INKEY$ă   CASE CHR$(27)ă      SCREEN 0: WIDTH 80, 25ă      PRINT "Burning vector by Phobia 1996!"ă      ENDăEND SELECTăLOOPăăREM *** Coordinates of the cube ***ăREM  x   y  zăDATA 10,10,10ăDATA 10,10,-10ăDATA 10,-10,10ăDATA -10,10,10ăDATA -10,-10,10ăDATA -10,10,-10ăDATA 10,-10,-10ăDATA -10,-10,-10ăăSUB flamă' This is how you make a REAL flameeffect ...ă' (the one by Martin Lindhe is FAKE :-) (he's my friend, I wouldn'tă' mention his flame if his wasn't) )ă' It simply adds all colors around x,y into a variableă' and calculates average color, dec it by one and pset (x,y-1)ă' Kinda simple...ăFOR p3 = 50 TO 125ă   FOR px3 = 138 TO 183ă      pol3 = POINT(px3, p3)ă      pol3 = pol3 + POINT(px3 + 1, p3)ă      pol3 = pol3 + POINT(px3, p3 + 1)ă      pol3 = pol3 + POINT(px3 + 1, p3 + 1)ă      pol3 = pol3 + POINT(px3 - 1, p3)ă      pol3 = pol3 + POINT(px3, p3 - 1)ă      pol3 = pol3 + POINT(px3 - 1, p3 - 1)ă      pol3 = pol3 + POINT(px3 + 1, p3 - 1)ă      pol3 = pol3 + POINT(px3 - 1, p3 + 1)ă      pol3 = INT(pol3 / 9 - 1)ă      IF pol3 > 48 THEN pol3 = 48ă      IF pol3 < 0 THEN pol3 = 0ă      PSET (px3, p3 - 3), pol3ă      PSET (px3 + 50, p3 - 3), pol3ă  NEXTăNEXTăEND SUBăăSUB pal (c%, r%, g%, b%)ă' This routine is MUCH faster than palette (like... 10000000 times faster :-)ă' It uses the BIOS instead of whatever palette uses...ă' I don't understand how they made all routines so f****** slow...ă' Use it if you want to... give me credits if you want to!ă' Lamers don't!ăOUT &H3C7, c%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăEND SUBăDave Shea                      TILE-BASED ENGINE              FidoNet QUIK_BAS Echo          11-02-96 (22:21)       QB, QBasic, PDS        218  14311    LEVEL.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"LEVEL.ZIP",4^6:Z&=10463:?STRING$(50,177);ăU"%up()%9%%%R-%1S7sFXu,/gN)7%%Q6%%%.%%%%qj&%jqS#ufq,rQ<'T[_1)I9x4ăU"aCf+)bsY-xCmdN3Vm:*9-_eX:A%e'sNHq^NwvrpbtHnu=W8GN3V;Fce=EsD?2\+ăU"bjJ^.=tnm?[e^XlB=GtRy7LlVw3E*#/P#-ti=1pa$O=0PL#>DlvZ0k-GU+4s8tPăU"<?<]&kd,4b^Jbkh-rxlO#(LYek7MOSyeX\2%7V>?R='?1l];=4Hp9VBmg>?g%?8ăU"6S1,LiU^a\2]eWkH/#tg5.Gc?<i6=Z/PoB%3bz8#=W5;&\6WkL&/Ksjad;b*fe'ăU"YIZUfY=ipcHwi9.M:wcz9$bhgnb%mZTL=m;WG0qz=.l#-1AeNg*;][U7cADrJ?aăU"SF#K(FGB(h.m*?/7&'wjgJ++\'OdVep^=RhR;V)$fB+;*:U,yEQZRiw?,a\,)ddăU"BiW02QBt<<2<H&g^chP:(QevtbBwNBRruB?CC%gE5]OiR<7KY3Ui&tQj7%5PRW&ăU"(U5mH)0EK3XVj_<;XEtB>=H=G]gDH:/gP.srE0q-A[SWw?Z6hf(c]W>psob0p<6ăU"ZUs+\khrtEt>S#erK$NFu7-.T--T3KL]Ge-ldBJmg%$>*lBI-IP^j<umxa.nC_aăU"$;CmC/Gmh4Px#UqPguLLVL/?E+j*rr4c+H$[4^N[%$>\z5jgYuMeRMFs**fFS/6ăU")>b?x9T'VqyM+8+NM91-_MVAM*(X$alL13_;>*^9cN/oH<9bC&b>GbJ6x1u5sgJăU"(mTOkIdJW>Q&*gO2l%abKY-K0EUw:3k%)nX?6-$#ICfj2T?1aQk%sl]PM-dXhl=ăU"mC^$uL4JF:>?MuLO54Dsv<AzhX7.bozd-Le.>Q5e0kS%Q?c<%m;K%m)meBee6/MăU"NuS>3RHT]>_T-a/r(^WQT5p/#/xdd5cTi2[W_vTTJFZL;SdRKSS4%qsw7I]Ep#-ăU"ii8T+adKN]QN(v_<p7TJNBb')?Al+218($_B,G25LjY6*Ia6X<bhv(hbve4QbiJăU"OtAXl$YhsG:/S0gubG<8)Gkv/,C[Q\rTIR2GZZ-FKO5F+\LRcvCUB]4%c2jA=24ăU":]Mma&/<IU--e0pk7$]%xD_c+X>x^IP7p;mIg9heb%Lui^l/J<OBM[:mj,mKlT;ăU"$-GagkUoFBGK6*L%C/MS<ECE]77VS%of?5QNfYJ,JB5q5cV+s$TSR1xkCG;N/m6ăU"u*eX9hCElAFYg5^5+6Xm#gMej:,J:mUKGU>Y6,_?O+G^N3DLE73f^#TjfTRsFxhăU"$QmgFdn/H#.r0XxEDz9S9qvTJRQ7ME58_t0GYc0<KExwK76f/x)YKn/5Hn,0;H^ăU"6:0kIITr]Hn:0%mh:&8VPwXa4>^HulB^u$Hqh]x?1vWlUo66UxmU9c#w,%up()%ăU"9%%%R-%lX\1F;Q=6M]*[%%,s%%%.%%%%nh%tsxS\%lffkhf=[#]9eb')I&oLNxEăU"5-qNdEGT;pckHJLGhd%)ThXbJf45aMM1HI]+QSWX2rp?fdE1NJNRInk6%'%%%%%ăU"%%%m%%i9rue9]$5T52R6.u<s2b/<E-'QfiDTtrS9GH:NBZ\76WULW;LnX:.dq3SăU"sM_l0YpW08T.:Jo<(\dPpCp3($4Ba_\qQa2hHhWvfK,Z:3Wr%(Kw)ECME'=/VMCăU"d\BuB_Na#fTFb5TqsTtKq=Qv^Q1bm82n%Clql5:v(RI:0D6,BXaDgABpb=G2m<TăU"nC.YBuzfZW^A.)Zn<,2GHW-qluT[q[$#kvbT64rU0BV\$)t>ZkO87EJ-yjDfCrHăU"V5.Q9ITxOP1=J2gT0A.rTED5kph#'DwlG/^lPLr&8/Ns;_caH3ebx:3jV-NJ;mzăU"d$WTXfn=3w6.;VV$ubKQ;M+m2t0lQH(NTsr:E^8/_aT8i0/zhit8s?Sn'<LihNjăU"9_hLHc-X2WNr(\Hg<-bD0uPB^>mfZEclH/UODs%$md^U&<wCfUj,vx>Q>(NTIrfăU"jToTPrPc'gCPV95mh3d..dUVN4huTE\7SM9vlp\9AKq.xP8aaqapZtlwoHu2mHbăU"&wZwHMsWi8N#ZTCP;.=r_?8wsZsuuYD,D2P*F58Ztr6]0r8ZjI$g^iu8woO?XDDăU"pB(T>x^DlyXrt-'[sSx+<V0Kw%Gx%DZh4.PhSwDWn.PF<'V-(x1VNhp&f6ONbP7ăU"v'C<>&N4r^>0,X+FDKtfAN'.N*$vo8ChFD>a/NAuzK)-VEddu%o\6rf>VOV^(\>ăU"=KchR2N%n5L]'$Lti(<v[pXdUg-2NoqA:I5bE_+&o&aA8h+e_7Tpq$.hmX:'rtzăU"3nmtsYdcwOfvtlRnHDKx_Ni$ublu0*sJR#1$>s_3w&\K*C59,B,Zh7-EmbR,zvFăU"QpT(lX4X4Oj6:Dl#sv?YF$uD3Tfu)Y>(rZY&r1F3.L#6o2vkwJmIRdnx>,&l;H1ăU"xFG/UpZn+l6_MbODc]w^DuCtpHgti*w:[MvXN^2*sPywm*cmwtEZ+ZvB._yN\NvăU"-,>E)m+&VUpv.jS/JS8.SkTo.'0vKu2)\i].yko(B]VZn<rBuxKj$a\^Tet,v5&ăU"Z'HXEq\-.dTXbwqK$4vugAKMlo6l&'$qzyvWa%$z<n&f%:$N_csjxuon,Ug(j7răU"F&tMa$XATde7udh6w&sRvv#ozdqr$.JcP]lR=t3wuYmj6^=h)MA6K8DY:cn\XHuăU"8d?X7gA7Y:H[hAe^^m&Ep[L9Z>rXNGHw,kddtIwUAn^m[YK7/lrK$IV.CSKVIfYăU">iU.KS)KIdCP^42RWif$4G?P]1OsK=-<l'wosr\('gtD,hrc)s4)+):c)a.S<dBăU"NZDsjpe/klx95Z8wu,;dEc[t>&8\'tVnstXmplYArIFTvUwM$cMc;WAVjFYHir*ăU"6Sr*SrVjH89\NR^8^Wx'tN?OHmM7]Xf9Z^^NHk%culw&j86Whbm^BnugZ6D:5,\ăU"W^kL2HFu<rD$rv*\hFbRJE1/nSdPJ+kyH4?6FWsA\iZ(Y(EM:.<5=Uw;mT]tcjQăU"pn26XICrJs^P.':)fsA4jcB9=.'r7ZwESFf+X'q?DA8FGNj>]6np=Xu)OnPDkP*ăU"F^RbU[g\J2Ppa'w^]oT,V;jNw]c?HDqO#m&CbNKN_u&8:$$X(;g1i5(7HGFYm-8ăU"JZ4Wh^lfstqtX-GBCZ^'kdxsg$HJ]Hic.HwZ+NZq<XfGXY4NRxkiV]8NHq6<Xc6ăU"luZ>C=-wi\;4SldEGn^Nl_uhn:4NxI8Qdura>:Dw;u[Y4\Nxki,V8NHZq<XcX6uăU"Z>9C-w]>N_u>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăU"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%=c>Xu%p()9%%%%-4%cWsgF)L<%DN)ăU"%+%U6%%%/%%#%qj%%jqWS#ufq,hf*]f[O1ixr(C_IphW:59?d+#ax^l/WMw0&%7ăU"M<)>b8$Tuwwvp4Lp6x/U2pUfe\cF#u63U?hx/osaXq6Rz_\T_msVWfaoKeT\o-,ăU"pNp%hm#p=vZ?F\Ucdh]vDX5ipPWFW85;J[q\yeX+6IbAp#[+2Z2]ZolI9:mXZXEăU"1H;6[4#WE'V0W?ujXq53w_t0872GiLKPlFAz,EH7[LQiOj$qF+VJh[SzlN3;8i.ăU"l.;%YxYNz2zQX35naB*ho_Lh'6eS]X&]Wp%t%QZ%f1N+m?ep.AxBeL'WyX\.%/lăU"cSB_jK)QT67k;HZj&X=_l,G>qk;'26>e7&/HCe)y1+eV.,3<l?eGp^;*+%$h[osăU"Q]6D=,Jh4NNXI,HhZwA[j+c73*$74R]ub+,B.W\Bcma[bZ>R5N.FHNMk3tJ&sorăU")ae8nTK02iAfKf-jP60g\zQ-qi,%G\)3V\s^sGh++rleHT*LGVi5i<_[0VBt4haăU"BF=HB1TiPmTU:<N(IqIBX4V_jbukNM34+TP+ZL>#>E;_elj6;dTM'sM)_LOh$bnăU"bzANbKK._\DsFQ)ynL6^1al;\leRe:.cw)iKnIk?5PP,>'&I45(*F$NRwIT/kIQăU"g'o)6*/$Ewx,%U-u>C%3>MWyCZETEff^1_MPRGQ:<:,pYg]QlF$L3boT#R3G4*CăU"<R%(X9b-3,=i)cG-6#R0LL,=.+aos%c&p$5QR*nQ_t&.muFPP9bpr\-5wbr>8_KăU".lGP*8L;=,TbG.,3-B]AV#L-K4uLve^y.vD<2CMVJ)jhA\ov5M9dq=A8D:=,ND)ăU"p.9o'JPal\.(.'nG:2wd23sv$B%=Eh3ENlMM$Q(lQ%.f87<;SS?NYW$:v7EQpnVăU"bxfqVeb_W:PVSSao('23sQ5sr&r>J=/Cu'MlQoM%b*FlgPfPY$=9*jZIT<z.e?-ăU"*d?d6Z/T<%8H%Xxv<UYr^-%C_d9X++DNXL#5Dc*Vn9+(gwkK14hF1vK\9\O:%qWăU",KcqtPQEd[4Lj/,G%SD4IlfCA+t1N^ANOBUf/7_#YHa%&UXlR(E$bR,d:KDmh)=ăU"1C;WynB.c=CsOxy(_74Sfh)Qh]'g?sUQs\l7Ri<_%LH.c:_m-<4N-6J9Z,L3'+&ăU"3x_KkmS'YimY4mD8G,p]gYLL]3/&kgGJ%,P%:fDsQ%9%mguSCdlAajIBT^%FM3,ăU"s2Xf]3$8=A=<[qE:6/i_GJO[*#FjS_woxI99,bxIu,aQ2_#>*R.uH(SAitx'fGSăU"7k947_fM^AnL*#Vw5w5WiK/nWK\$9)nBS/g]0S0Q88y*:TFBZzo9mOI/o('rjoFăU"dlH7\CHt4QjdqiIM=aLC22<+h\.L8rckd%up()%9%%%#-%IY/1Fjh,Pq..7%%SCăU"%%%.%%%%qj&%jqS[gfx&k(x>[917xBkXx0=Zno;:*3Y87FESbx^YpjDm\&tSaotăU"p'QFg%q;tqm;tC3xvrF[fYqS_'-o(w:o*E6aC>^#\FeYTU$T,=_nkJI*6acVLdbăU"Vm*%P565a<_FdYMLivjHP$()2cMlKXp)ir-x)qtX/]R9_b;w_#]%SbLB'ZV-#-eăU">:JVLqbbnpcYQ..0>6<%]U2b$j?n<L\i)g)(8,1$56;u1;E#25-7-vUDJ[<?#.;ăU"F#WemT/5q)>7<[l5[=HBD+*o'2lN.P4I[_+vaQUG#J/F)lPkUUQDDukkk4:JSXiăU"UC+XIEX(SD0tGLqSn[+fPRp&:VczRqfNORpnfk$cFfD_k,+]L6(^4is/kM$fh95ăU"+Ji<I2/0D%fMQc#MhXv7T*4dUNp;D>suu/aDPZV.*9Qe+l\jcfOJ-^6N6%YOm?.ăU":j\/]+k:;tUbXbDAkauRL[%&[dsQX/#5AXY,6Q?3DnzR?whiDh<2Rm:d='IWPYQăU"AUg>AP-H$U=XT[DG2UQY(a\lrsY[\k:QdR_WDSlqmnu+dnLCj\IF2wtNunS]lO'ăU"W,H%<R#iAWH<r?Rhi63Ni)Y]e\hIFQ7RxJb>E,;v-d2+L$6Y4Cg%tsThxwMeo1făU"]j'QZko)=lEEAvyu$JWjfb-PBJ=l$*o'GDl>qI&e&$(LH(Tf?Ao-9.VIvyDu=93ăU"\OAI\uCGD-9-(])^Fi-EKUH-gg:RLa&mLaQ)Obvn87M%_^t4;Y:2FjIVf#TW.<<ăU"&ra)02jWq#m\XpKLW\c^.#B&tvd_mWE31=M_<R8QB6WeuOMn.quKi.nOedbf/(RăU"7s<IB-$e5$&i;OeJ3N9Ig)zxHj]/H]WY%W[Z>LeIG^_Ysg3;CYK,pZRqLJ>0ye]ăU"*U<#U(^[q5_::8?>_E,fJAAIRqn0a3o>F[G(m6rOnEYD]=1'Oq9rRd&YC(&V5sLăU"kEIVbJ3U-'8F[U\t$a9[ROC<CUsBioX2'hf<iMq8>hH#v8#52pk3I;\$q5v(HBHăU"HEO?68w6JTe?3vSxk>U&]*&k4_dg6A7f6h'qc]>hHlGogc+&r1>IOBxLc8;?n?9ăU"#yS+LLcPd(S=Y44l\^W*]UW9)Nc1FaI-X1ZWPV\D5Px7ftF<rZ&_<p<9pbLRxY8ăU"pa(fa'F)ndnN<>Q'Qc.7Q/*gQ8l=Zg[0qrw#pK8[QOMRaGrw1'Ze3WTH6\>/-NjăU"s>X1Kh>W;^dQRIRQSl3uqZ,S*fA&a9/uZ3a0\2fWfx#S-#^rc]/$kTJB&$Fahk5ăU"Cq3q%Ef]yrsZdJJ7E_*Yg<.M;\0CXX6Ku[zE_tT+2fnHLWRp(chc(fm54-[jH_$ăU"hEDjBEj#aFQ01V+;T>cl0/>he1zUGh:c=Ml9/>$k1yHBM,9^TcXC1/hKm&ziW(*ăU"TBjs0*20j,-*0^Ff:;MAUWNp>\9(un5O]Y)kxEYti9nNS/=</9uN7bYpiK7&SesăU"m6GDv0$taLd\AhG;ML1^;Kj]a:M3]Zz<RX^YG#x#&O22%2$Xt8h$Y[AR$Ia,C/tăU"qBwiQu)Cn8vCbIvNnA4wA[F0)*tO)UXOyO>^S_ED7FvIjF4il1fu=Vf'%z1mrShăU"bljCL)v60DEaaFu\<S5aTrIT=<Hu[jf:e)SRl=?2:pluK?'3,<2-oC4p1s$s7x+ăU"*Xk7hvM[H,#E%PV(WkEFWELVml_qmFvroqw7O-khxNnt54A:<)Fu%lHv;<7W>+năU"^GQq:S2A5=[6wigxj*+FY'#cL)z]>2EMgB(tI+*Xf+X9gP,C.iLpH>I,x($1t35ăU"C$nSE(N9X8MP9ZqdjB+&dn$,03thmAZH6=HX#qhK(<W$VpnX2,m8mwPYkL+p0/KăU"rXfb.EB]WQ.L,>5Gn>&f#vG,3e\TZ+u;A(#kT-HYQK(6LdJV+=>XB,[1(D#e7tPăU"$1D)C1n&T)1/E#D-_jJohIFDgV?MOjGnx\UK?GLKPM8GKt=QYQ+5-I6Cvc2CMk_ăU"iCartY5YDR,n2>?2z*l%+xZlF_yIl#]&A60SAM_$rXY#f4KQ2cl#2<W-DgDFK,QăU"knLv8]To/Gf/S_n;6-<Bx$.1arjh:gyOVZJ/ARtD]A#x0-S*D]Le3U+[HQ:M()HăU"eFxiYZ^2Q7>EW-Oj*h[oOJ;b;ppAI[gV+b4-NtX:U)s5<2VE3cz#huv>A0OJM=&ăU"dw'rOzP-1\QIX26=UhSn+<0n=)#MEr?2.T3-8+pK^bD4<onTn5^Y9ZD,KgESISNăU"r:%I.<]U)80e't,$:W1u2IpwT9Z%6Q+eGs]Ri-^keLn9UkBqbfW97xzugAb]mx1ăU"OG>TxIhbX'tK%u-LTl_SOs6NIEL44v0eN697vUU:XOl/Wg.MjVMLtRVH,/NX574ăU"ktn\0=)HVn:(c7U&<$pbdU*4W5N<[sGHw6ta6NCbBxzBifJHgW$nIjkRk%#p\HVăU"9-O\fBZ,0>Zr$':qX<G;D9<mcN*:$jd>,H+^nQA*m(&Spy;4_nvMWyZd,PslfH+ăU"MzU*rE9HMZJ4gZ(#$$aj2WI8^/4vbh)1l0vMUphB4_t6\/u?n'>](\r5z*%O(bDăU"#*v>zX1jH#UpzC(s>cX\EdxeXEc,:tFEp2ndPlHNEt)391zJ9^HA(aHi^goK1BAăU"gdLyycd2U;rKdi.ac7u2p[229Ag?Rd,-HvW^w/X9-gm,VCA+eazSE1wIa0v8]_=ăU"D9nBLz,[>%+0NeJ#x_s[DKu?ZE[X5Pa^t=9mQX-\Jn;qq)5gX3/hC/LBd4q.EA7ăU"?=Z5's7evmvOw(ccrNUMmJVvgdJ$yxV:-H^a/q/q>j]x3B8c[WJGhwJSND2Sm1KăU"7DPM-6TQPtCXTrF()$m_[1u[08:3>JviM'V8WruWL4+6)WdrB]0Y).3;x>8g0tBăU"1KF38cBfb1,r:+Z((retcw7f^cxYu.LARf&=qL3?)97jJ3cO#CIvbui_QB1Q;qXăU"<'aRIu(>G#x4%up()%9%%%#-%^fIsFjj9VI'4%%%te%%%0%%%%qj&%jqU%ZSifgăU"yd*D>=\C3]U4U8g7Oa[FtITGMN0W)4+S76Z]X(i)^1vc924HiD#3byJZz;E>z6RăU"p[\:vJrvIBnrgk$$uxjs%Q0lKY;y.F[urOo_HxqBNi]02\jlt(/-dhDh27n=+LvăU"Ed,B'#bn]#Vr#qC[xrcdSqjb67BhuuFnd;QGG?g<F3jiW.E\%e7M7o,H>T*1WIiăU"SD;#:lX#6lY/jqnY7\PDN?Hmy&[o*q._$qiH,]l77fGEbR3v/OX\'/.jEpB)+]văU"<e'hDIi0Y&fimt)l/=<j'MLXZHuhIwX>VD(O4Y,P^Hq<fnrZ>(*>t,(f+EQ^hkhăU"6xG?(t<p&B%z:YCb0CJaWIk]+5\EvAEbt6BJE3CZHN/li7DKoP+P7W&lVEgqYp>ăU"i/Y9^-33/R[ncUe(5O1<wn)5V^I1;\vo*V)dbBr?xG%X+;0T3g+/#])-pmW)Ub*ăU"OsaCrcwNfq>O1q$b'p5B)7FB-E?jmtkq^TubPo5#r3;Qd_c&R%VqT%9M>&2Ik&5ăU"Xh14n;Am,,SI5]+=>=^PsxHj.JG(mp;TDv14RW[o^38)V$U+c7)EL0egXZqN2yHăU"U;s29k*niZ7Oe2Iwd;6)7+Z=^s3DXRgZ\vu7O/Al5ng&;Y&(w17s'Z*v\OV8S7aăU"+=tP,qXdA$6MBPUvRl8,7Jq7s5P>GBieHm+ojiC%66cKFjIar>X/eGY7Nq?&]eTăU";];J:pNu)u#WADu0&)Y0R5PJ(a$HjJl/-HKAG#Z+7)yo?<Gp'e>PtQ::q)[5aiYăU"+FdrPcVV_f(M6o7QZa2OgYp&.7$RB$-B'7sGVGEb_%3&&*iLrJbGcq]-FJB\L7$ăU"l0:'-NW4%5MXTf#D3x/;^sKGaS)5N'a9h.(Oh:1s'5q_PUU]57j6's\,HJ$e2eoăU"a:MJ50R:Y>\hg/ChCgSj)-ZP#6:,-h$chw^mHdi'9Ye73/SPvUrh(7(=gh)[YJ$ăU"xJV_2]][=l_/-RZqliUUofer9$&*w(V4kzEs.'7MlBfpG<RSjOG$o^DE/338\96ăU"aaXJ%[mgBYRiDW*(XqNH*Iz.u$Dh)D,>eW#[utaNfEcxJ?/,%nvTxi?[ptk>lH]ăU"aOvd6ePg7o'R=VyQWa;][7^k8'1E&2-;B=y:kWEF2CP)mZAi-'5/(-<m-]nKyY2ăU"MFxS/g,6o4J,c=E>Ht9BmR))%lKep^=5aOWi4adg36Zh?,9FoLr+1?N<t:I>%J+ăU"Y?\HvWH\t;6g^1B^1\aEBSDM),7XH%erY8ek$d(%5j3ln'a]1=P,E)0oSe)RO*>ăU"dNd$^PDp^7'6(<^bDl6PgNN86JB\'?<ms.%lx+.^M39/D;11AVdKn%=TS9EUdu5ăU"gb=F]TltiFo($:=,]6pJ:#IIBR[2$Ccm)]K=k*KXl_z-1B%j\<joeXBn/Pf3tM7ăU"$I0BZm<r(*YOVgNbvJS>5RLe6)IBY&i25qofmJhidHn#S9U<9B)[95'2'Pq'4k*ăU"nVFsQ,/P?=Ku[M-YNtYW'R-IB9vsdw01Xsi1OK,rCnwRD7xuKSTxa/N8zPSu_NuăU"MOM'hI1#NRKt+Z&GUk_7f-^69$I;([r#Mz0vi0A>Nt]*<Dre.97)=,gQY2?R%G1ăU"NUwMl$5W*3:G(Du6vk3=%vov#gi[xR^JWdlYdBk(;F]oV)sK'>a>&y)l\#,,<L*ăU"Vj4Glw>Jl5mr.%wU.31u=(#QRiSJ#c^)m41.T5K,88vrmLM-^nf38H,5:4VQmikăU"F*EKby&yZ^d=y\T,'%^I_k</hZEnGlSY2=)35JPsw<iku&v/&/HE;>KcnI6hHRyăU"ar7irNIq_Vk&+x[X]jMLDPL*V4fZ/vQ0\QgIRtxJL=,ZOIK2zcXzv5z+Z,Ds7Y9ăU"aetb,-bTtR).)6Nc\6>*;c(0CvfBOB5LSM6f<kQ9n[601]bZ$dXG2:?Xk/7'4)SăU",q&^'oe4/t.Px*\#Gz/cb)e0^vWXZkEZ'V[/Cn;F,5&;aeD\oUD9AB:1q.dha1SăU"HUB,;PTkl>E+A#+&C/QLigQ%JbNE7_KLp?7_S[j\#L[%6++ZfXE;-\(K9?*<SZsăU"llI'vaCd?(-mHe'I%9/3ekhnr.-_L;:.#E$;Ktp[fH,Qn:1DSZNUO,',V5-(*]AăU"J,kpje>=-JSg)cY#BV[A5GwQEiH(oj#EW',uq[+'=jN#HE&;i-8Nn)m^%zXR4UMăU"&'d>,QhApi0#J?]v*uGi0)/OSWoQ5_tKqGdo_/v\e<s2[Tin,GbE8\]UsCNheQ#ăU".Ve][NPqwf=>NxHaOXfHXGFYp?#(eG)?p$O<l'y6',FnN\asil&H[lfU\45=_fhăU"D.7aX3/LY&lL6Q<AdlxZK?sR49(68fN%B3X_\L-i?.mnRZJ0w\[1EKJ,\7Q/J^<ăU">Rb1q*xpf.)QW7jxj'n+YBr1TJPx*AqBQg:7PQmo$x2d=#)uo6=D5+-^)fAtKpVăU".XU4h[yo/2?<sai_,Vn_c>XC&XB#m*<Rl,67ffb)J'W2:<4#*y.z.m=>c$1QRURăU"k/PO*MK'u_WM7Rg9:uokjetBo>*.YzuJq1GN=U)[$hD(OwNEQ?cu%N8T3?A\_XbăU"Vsye\GKi'*oY&gCRkG/Kw#JV&,OCZ8%hh>$&]D8._E%dhJm('J3,'1ok):6)X(/ăU"F(;9/[mZJipO4uSs778BL>Ira-NiEi](I]/%]m:LKF<+Qd+XahEC*WT*Vc]AP[&ăU"Qg#5?TGI#nnG7W$],DAHwRe/[SiZBOKu-hTZ*T?k[?G/hozNm>RB/K_T+v(T:m[ăU",7ghW7$eFndZZQSPxb1p&O3lP:=61ub?>0sjEd#cImL5r:9rBX;dj3J'&O?NEN1ăU"N,R3;b(MqCqTQ<>2tE=Q+_jkc)2p<IFKfSC?.e#XQNCk;V0#w/5YI9s[u[/x+.,ăU"AJiF4w5\0D4x:t;pFGoSQ6-hAC:94>-]#H^-O'XFRvp:IZTRo(wjgLD)hPu>tgHăU"Z&op)IMd2d])Quk-#dFS#TWkjWFd(%q.Cg9Ync>$_:pp?O3j_[*c=5sD:oCL[\năU"vOKfsM^D\LA--ggyPCVq8+>NnKu==g=\o.&l7S1l(s,C-q:7M[tjIky%+F&&&DoăU"&;me11=TmDQ=NT(/)a)n$mdnRptH8/:Oz.25q[P(8TZcj%3Rp0tMDdP(J'nq<EFăU"t#+bFB:ItZ$7L-#Me^zF1:&>gnI=o[\3nZ(EW%K[xI(buGB_he3\7yFuv.kybE>ăU"T0.[hSaG3Bb1io(.)'JZF-$Q[GJm3^Re7^DTT)saIHiE%03*VdKE<WLpWB0c5.găU")?MC>;&F_7PHhc[_].5i9KL/e?])zNU4Aj;+;DyXo[6Rjn8IlB8[c#fK\;j4#t_ăU"<No[0c(1dobOQid>td^xZV:\981nnkOfK(.8t$(z*Aj#mSyWP##[?mwTX#hqF4]ăU")LD8)XT.fH]*Y7YS?NK-eaLDt7[JRCIi/wdI7&zjpYp>5<&?j.atn.4p?s_^>):ăU"'i_iOIngj6+8Vdg-/QVK*..Iy$#>nf340s[*HYz*W4\ZNt(DCax07F&'7-A?%NCăU"a(uIV^n0H)JS/8XRGY=Q8Mv\_2xfEcbmG+%EOe0ifuWkj98E:8#HsZZ.gaZSz1ZăU"OW.>tTk>X<fioGi/5JceCHP5rZF:(.P[7/]GV=3o3,\ik$h29NT><.*r)3:%Xs/ăU"NOp6fZ7Ru[r3pd&x*1LlxS'6[sy3cOK+0CQ%fj&$,OZ6-4rBlY#h4&1['?jyOtWăU"3g(MEMIHU^gCvP.4wk<j,X(S[&R1?,pi*J-TTWl'70TJ&]olG5qu,c74J3[H_Z\ăU"]MXgQd.\mG0snF\?Inr^QEQ+4v4KqA4SnQgFafUkm5Y?5arnMmkM%1bRG\q+pBDăU"(3\3m[P6NS9AV<pzbZUQpI1rdNTDXR%H)c.V-.H<r%IIM5+CZsE$OsO<V<lo2hWăU":;1J?RDDV/1a[6<opiM+<<5RU)S*wW\gMl]uFS>V(m4b+GH/$gR%ROB[ehY(B,FăU"LOmAp$HG0f.DZIim\4(#*a\mG^>eZ^\ji3u88=EAna>%m_GEAz'2??hr2mRyci,ăU"=USj(9'(15OB7E4meaM.iaZU/ql']#pO7s6EYQH=LpD8&Jhk#O+O0jE>0hd[NV]ăU"'$3tI,5AD\ljhFEJ'H4JEd,v]i-)4BiuclvS:'T5)23CUZ5fb7,DD'76:nlD(#\ăU"$;>2e#0^tsE.d(N>s=-,*wo49bQ\E%/gp\iEDk8^#._rtY_$dEngS38eLVS?[GBăU"cEs%+b&y/#l+UbN0JP#4('0pueZu(*i3gWDd,^#HC>dagB\F-X#0J5Aw2)1>04păU"d=:WG%v9mZ[\'%ObisV1KD5.a-jCZ(#nNXwHUjoe6hj9\8BjR+TLG;*o=x%+]*RăU"W2L(u01Rv9/7XUf1]Uz,1eR7'^Btjq%jY(2PUWJ0Ofi(*Atz6$;YoI3C_sb1]-/ăU"FeH3BmU6#d45S<aYLCY%(=LZ$kPY7_abG(r0\=oZkUf1i&&lbH'=g;C=jJ5?^5CăU"lkTWdvK=4bJSOBa2<PA^m(fC>N+jptOflM'Z=X81KaWhHm.C5GWqwp)FOvjkG$KăU"ZBU2G'[F%w1j*[&A.zNkyA/Pn^DqkvO5kvZ1i?c;rYb.Gwt;6/n-=\nL::kC7-6ăU":s/D'xj?WP7k%l[YT.YPPr$:%hVn65+U=08k(;#t1EHO7q\]Q/Idn:?7R*<3;N6ăU"JS#f[G;\hedv6uc\_9Jl-oaHHBbM*b&3,<+.G](ot+fj_%bZ-Ig0a\4kw-Et,e'ăU"/+oG;a%.I';;q2):c%aW,9Q\o0/IPIL[7z2o^S$e[:HaUDRuBVt^n,O_[>x4QhmăU"m6)5GJVqZPBoVUiIY*&IpOkt+F=IOH7;G$i+<w[WMHH1>q%rjS'I=\c)J$CPbNkăU"]$%<**CfB2R;9K6Y;9;Rlkf0>\_zueho7s4ius'0hXRUP[SPaB?1h[s4Ew=2ne;ăU"H4t>dvU;[xH#6E'Rqt$c)9i5%:RdtcnGucIY51$qR]t%[krgi#&BvY*f7YU<d/NăEND SUBăSUB V2ăU"6VMgr1[z[MXZjeEtj3_3tYq[x<v$?rd+-RoS+Mm<I6VmFQxO3cr-WLtK56gS,ySăU"u.fpKISdisJe:s&jcrI+fRKT97zqGV,vq?n&.=o$Xu%p&'9%%9%%[%-%1\SsFX:ăU"u/gN[)%%Q%6%%.%%%%%%%%%&%%E%%%%%%%#%qj%%jqSu%fqup%&'9%%9%%%R-%lăU"X\1F;Q=6M]*[%%,s%%%.%%%%%%%%%%%%E%%%%u)%%%nhts.xS%l%fup&%'9%9%%ăU"%%-4%cWsgF)L<%DN)%+%U6%%%/%%%%%%%%%&%E#%%%*%/%%q(j%jq%WSuf%qup&ăU"%'9%9%%%%-I%IY1CFjhP'q..%+%SC%%%.%%%%%%%%%&%E[%%%%%3%%q(j%jq%SgăU"fx%up&'%9%9%%%%-%(^fsF;jjVI''4%%%te%%%0%%%%%%%%%&%E%7%%U<%%%qj&ăU"%jqU%ZSif%yup*%+%%%%%*%*%%;&%+%,L%%%%%ăEND SUBăV2ăCLOSE:IF S=69AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDave Shea                      TERRITORIAL PISSINGS           FidoNet QUIK_BAS Echo          11-02-96 (00:00)       QB, QBasic, PDS        42   2481     DAWG.BAS    'Advanced warning... I'm a very twisted person. You may not like this.ă'So, if you're easily offended, simply don't run it. =u)ăă'James Morrison's recent comment and short program on my tagline made meă'sit down and create something decent, so here is my animation of myă'tagline "...and a small Viking dog they call Narf."ăă'Don't ask. Please, don't ask.ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3ăSUB V1:OPEN "O",1,"DAWG.ZIP",4^6:Z&=1306:?STRING$(50,177);ăU"%up()%9%%%I-%Ik8.FH^,qkL'[%%,s%%%-%%%%ifA&lS%mlffT7fskep=OZZI'QăU"'PVj=4/rTJF%Q5GNZ*o;KKO/MyN2*;u==Gl5Il+q?l']P(Z37UNF2Sfoz(Z)8dtăU"Muqjd8dMu*qXDd8M*sza\(ND,>wkrr_wZ#4TP>$'u=FR[BZjhrXEx-Vl(+Thru7ăU"8?vZiYkR-?MF9f<2FzFE\(k8=zgzyYoitsWNFKgK$1kr_wFd&[84x3._d<tLTK8ăU"PrMP_3gE>xed\:2TxdPsE^Uafp^\H0QTLs>N>t3.fvUQkdf:&99KkUr$hNnxbr.ăU"rfcXRpLt'\>F^u]EtLb=pd_SD1>AQAitLJkZrHp.>MuUdkDx-u?qj\LtMuqjd8dăU"Mu-qj8dYMuqXdDdMu*=^DdYM[#^mDdj\i#^nqZj\#^tnqj\o#tuqHj\LM?uqj8păU"dMuqAXDdM6u=^DpdMu=A^DdMQ[#^.X^j\Fk&86&AXDdMhNfPXDJD-pi_fzpF68zăU"Kq(OuqW2Mh*t[*'dtgn4unU*]#0hCt0Y.mwff0fx$_zBQq<jBv_sdqj\c#h3$uhăU"ivPWrj0KqpN]%kovBxlCX^qBj8dM-uCOAf-KMu?qj\LtMuqjd8dMu*qXDdYMu=^ăU"jD8VlO$GFM6:jV;l6a#4N[V>dFD7zM<qerBu]u^#q^nqjc\#tu?qj\LtMuqjj88ăU".i;JexDQ]#^nuqj\#stuqjf\LMu-qj8dYMuqXuXFuW%%up(%)9%%[%-%j_l.F3+ăU"O3cJ['%%4%.%%-%%%%i(f&lS[gfxfLy,>j.U9Ll0[d+z[ojy(';+8eEVsIg()XTăU"*kyed%#wDK<OwN<NGNP=)Col[*QQTGW]1D^pkm\RP&8*Fy*dl5^Fu#YY]T?S0-GăU"SJeIh%'6K4>KS#ITRhc_l5s[;sy.WQ0A;iL't>gWQZ4u_PvnuHt_;%YqHo(WWUfăU"e6;ro,k-&#(+t/y5:oq\kJJk6Ec-Z.$7=C7lxqEP/6r2Hb9)MgXkruRB^))kJM7ăU"lDt4PbCEW1u5_LHf4bAY3CgJe2]*SoA9Kc'w\/kfu35LC$>Cm1MZXI(&U390]ZaăU"#cRc_*%76Ir7/k2:I>cG0lW^o?neOk/A82Nq+jU9sb;bhJVKoX3t%vJ>?8a.0APăU"B8A%n.>?R:6eB:V&=5oQi(L'mWc7Uk*#AVwhJ#4y)GcYH(2XNOPtoq7bqSof+L2ăU"5h3*W=aU/U)cO2F6S?joRp5YLwpb#giSqXNpsPK9bbGX-BWS)3>goZB*IXd[)VcăU"i*HG=MKl31O<;MjAsg*?oL:(Y=?>V04*8.K7Z)7l_)lk<g+A_OgfAW+HELLBDYaăU"?U>4HiZjb^gLSgU'w;Sl:>d45Y2m-jV8+,jJ-#d8Igp'sV=.$83V4>A1/+5xq5&ăU">/5c'RKf,U'Nm[tl(vOUYuOi<mWbYjKKi[0AF:3(rJ-ljiNYm\Kp\fmRBQcVe5xăU">3bN?p1PrhkSd/Mg?Skv\%up&'%9%9%%%%-%2Ik.FfH^qk%L'%%+,s%%%-%%%%%ăU"%%%%&%E%%%%%%%%%ifA&lS%%lfup%&'9%%9%%%R-%jl8.F3O'3cJ'7%%4.%%%-%ăU"%%%%%%%%&%%E%%%%r'%%.if&l%Sgfx%up*+%%%%%%'%'%&;%%%&g)%%%%%ăEND SUBăCLOSE:IF S=134AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăTika Carr                      SCREEN CLEARING ROUTINE        itaiya@juno.com                11-14-96 (14:45)       QB, QBasic, PDS        178  6560     WIPE.BAS    DECLARE SUB wipe (mode%, switch$, Colr%, Speed%)ăă'Screen Clearing Routinesă'by Tika Carră'Donated to the Public Domaină'No warranties or gaurantees are expressed or impliedăă'Here are some Screen Wipes to use in Multimedia and other applications.ă'The horizontal and vertical blinds are rather slow, so if anyone comesă'up with a faster formula, do let me know! The routines may take longeră'at higher screen modes (like 11 and 9, which are 640 across).ă'ă'Its use is pretty much self-explainatory. First, you pass the video modeă'(supported are screens 9, 12 and 13). If the video mode passed isn'tă'supported, it will default to the 320 x 200/256 mode and do a SCREEN 13ă'command, which clears the screen to black without effect.ă'ă'The switch may seem the most difficult, but really isn't. Look ată'the comments in the DATA statements for more info. Basically, itsă'wipetype/diretion where wipe types are vw, hw, dw, vb, hb and dbă'and directions can be u, d, l & r combinations.ăă'The color is the number of the color to use, which depends on the videoă'mode you are using. And speed controls the size and speed of the wipes.ăăSCREEN 13ăă'Wipe DemoăăFOR i = 1 TO 18ă    READ m%, s$, c%, p%ă    wipe m%, s$, c%, p%ă    SLEEP 2ăNEXTăăSCREEN 0, 0, 0, 0: WIDTH 80: COLOR 7, 0: CLS : ENDăă'For most of these, the higher the number, the slower. Except where noted.ăă'Vertical WipesăDATA 13,"vwrl",1,10ăDATA 13,"vwlr",2,10ăă'Horizontal WipesăDATA 13,"hwud",3,10ăDATA 13,"hwdu",4,10ăă'Diagonal WipesăDATA 13,"dwlrud",5,3:        'or "dwudlr"ăDATA 13,"dwrlud",6,3:        'or "dwudrl"ăDATA 13,"dwlrdu",7,3:        'or "dwdulr"ăDATA 13,"dwrldu",8,3:        'or "dwdurl"ăă'Square PixelliteăDATA 13,"sp",9,2:           '10 x 10 squares (instead of "speed")ăă'Circle PixelliteăDATA 13,"cp",10,2:           'Radius of 10 circles (instead of "speed")ăă'For Horizontal and Vertical blinds, the lower the speed, the faster theă'displayăă'Vertical BlindsăDATA 13,"vbrl",11,3ăDATA 13,"vblr",12,3ăă'Horizontal BlindsăDATA 13,"hbud",13,3ăDATA 13,"hbdu",14,3ăă'Diagonal BlindsăDATA 13,"dblrud",35,3:        'or "dbudlr"ăDATA 13,"dbrlud",45,3:        'or "dbudrl"ăDATA 13,"dblrdu",55,3:        'or "dbdulr"ăDATA 13,"dbrldu",65,3:        'or "dbdurl"ăăSUB wipe (mode%, switch$, Colr%, Speed%)ăăSELECT CASE mode%ă    CASE 13: mx = 320: my = 200ă    CASE 12: mx = 640: my = 480ă    CASE 9: mx = 640: my = 350ă    CASE ELSE: mx = 320: my = 200: SCREEN 13    'DefaultăEND SELECTăăswitch$ = LCASE$(switch$)ăăSELECT CASE switch$ă    CASE "vwlr": '*** Vertical Wipe - L/R (VWLR)ă        FOR x = 0 TO mx STEP Speed%: FOR y = 0 TO my STEP Speed%ă            LINE (xb, yb)-(x + Speed%, y + Speed%), Colr%, BFă            xb = x: yb = yă        NEXT y, xă    CASE "vwrl": '*** Vertical Wipe - R/L (VWRL)ă        xb = mx: yb = myă        FOR x = mx TO 0 STEP -Speed%: FOR y = my TO 0 STEP -Speed%ă            LINE (xb, yb)-(x - Speed%, y - Speed%), Colr%, BFă            xb = x: yb = yă        NEXT y, xă    CASE "hwdu": '*** Horizontal Wipe - D/U (HWDU)ă        xb = mx: yb = myă        FOR y = my TO 0 STEP -Speed%: FOR x = mx TO 0 STEP -Speed%ă            LINE (xb, yb)-(x - Speed%, y - Speed%), Colr%, BFă            xb = x: yb = yă        NEXT x, yă    CASE "hwud": '*** Horizontal Wipe - U/D  (HWUD)ă        FOR y = 0 TO my STEP Speed%: FOR x = 0 TO mx STEP Speed%ă            LINE (xb, yb)-(x + Speed%, y + Speed%), Colr%, BFă            xb = x: yb = yă        NEXT x, yă    CASE "dwlrud", "dwudlr": '*** Diagonal Wipe - L/R U/D  (DWLRUD)ă        FOR i = 0 TO mx * 2: LINE (i, 0)-(0, i), Colr%: NEXTă    CASE "dwrldu", "dwdurl": '*** Diagonal Wipe - R/L D/U  (DWRLDU)ă        FOR i = mx * 2 TO 0 STEP -1: LINE (i, 0)-(0, i), Colr%: NEXTă    CASE "dwlrdu", "dwdulr": '*** Diagonal Wipe - L/R D/U  (DWLRDU)ă        x = mx: y = 0ă        FOR i = mx * 2 TO 0 STEP -1: LINE (x, y + i)-(x - i, y), Colr%:ăNEXTă    CASE "dwrlud", "dwudrl": '*** Diagonal Wipe - R/L U/D  (DWRLUD)ă        x = mx: y = 0ă        FOR i = 0 TO mx * 2: LINE (x, y + i)-(x - i, y), Colr%: NEXTă    CASE "sp": '*** Square Pixellite     (SP)ă        Cover = 50000 / Speed%ă        FOR i = 1 TO Coveră            x = RND * mx: y = RND * myă            LINE (x, y)-(x + Speed%, y + Speed%), Colr%, BFă        NEXTă        LINE (0, 0)-(mx, my), Colr%, BFă    CASE "cp": '*** Circle Pixellite  (CP)ă        Cover = 50000 / Speed%ă        FOR i = 1 TO Coveră            x = RND * mx: y = RND * myă            CIRCLE (x, y), Speed%, Colr%: PAINT (x, y), Colr%, Colr%ă        NEXTă        LINE (0, 0)-(mx, my), Colr%, BFă    CASE "vblr": '*** Vertical Blind - L/R  (VBLR)ă        FOR i = 1 TO Speed%ă        FOR x = 0 + (Speed% - i) TO mx STEP Speed%: FOR y = 0 TO myă            LINE (x, y)-(x, y), Colr%ă        NEXT y, x, iă    CASE "vbrl": '*** Vertical Blind - R/L  (VBRL)ă        FOR i = Speed% TO 1 STEP -1ă        FOR x = mx + (Speed% - i) TO 0 STEP -Speed%: FOR y = 0 TO myă            LINE (x, y)-(x, y), Colr%ă        NEXT y, x, iă    CASE "hbud": '*** Horizontal Blind - U/D   (HBUD)ă        FOR i = 1 TO Speed%ă        FOR y = 0 + (Speed% - i) TO my STEP Speed%: FOR x = 0 TO mxă            LINE (x, y)-(x, y), Colr%ă        NEXT x, y, iă    CASE "hbdu": '*** Horizontal Blind - D/U   (HBDU)ă        FOR i = Speed% TO 1 STEP -1ă        FOR y = my + (Speed% - i) TO 0 STEP -Speed%: FOR x = 0 TO mxă            LINE (x, y)-(x, y), Colr%ă        NEXT x, y, iă    CASE "dblrud", "dbudlr":  '*** Diagonal Blind - L/R U/D   (DBLRUD)ă        FOR j = 1 TO Speed%: FOR i = 0 TO mx * 2 STEP Speed%ă            LINE (i, j)-(j, i), Colr%ă        NEXT i, jă        LINE (0, 0)-(mx, my), Colr%, BF  'get rid of rough edgesă    CASE "dbrldu", "dbdurl": '*** Diagonal Blind - R/L D/U  (DBRLDU)ă        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%ă            LINE (i, j)-(j, i), Colr%ă        NEXT i, jă        LINE (0, 0)-(mx, my), Colr%, BF  'get rid of rough edgesă    CASE "dblrdu", "dbdulr":  '*** Diagonal Blind - L/R D/U  (DBLRDU)ă        x = mx: y = 0ă        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%ă            LINE (x + j, y + i)-(x - i, y - j), Colr%ă        NEXT i, jă    CASE "dbrlud", "dbudrl": '*** Diagonal Blind - R/L U/D   (DBRLUD)ă        x = 0: y = myă        FOR j = 1 TO Speed%: FOR i = mx * 2 TO 0 STEP -Speed%ă            LINE (x + i, y + j)-(x - j, y - i), Colr%ă        NEXT i, jăEND SELECTăăEND SUBăThe ABC Programmer             DISPLAY WINDOWS OR OS/2 ICONS  Converted from Pascal Code     12-02-96 (17:10)       QB, QBasic, PDS        49   1117     ICONVIEW.BAS'===================================================ă' ICONVIEW.BAS by William Yu (12-02-96)ă' 100% Public Domain.ă'ă' Procedure to display WINDOWS or OS/2 ICON filesă' Modified from Pascal code to support OS/2 Icons.ă'===================================================ăăDEFINT A-ZăDECLARE SUB LoadIcon (XX, YY, IconName$, OS2)ăăCONST False = 0ăCONST True = NOT FalseăăSCREEN 12ăăLoadIcon 100, 100, "ABCREAD.ICO", FalseăăENDăăSUB LoadIcon (XX, YY, IconName$, OS2)ă  x = XXă  y = YYă  Icon = FREEFILEă  OPEN IconName$ FOR BINARY AS Iconă  IF LOF(Icon) <> 0 THENă    ch$ = " "ă    FOR p = 1 TO LOF(Icon)ă      GET #1, , ch$ă      q = ASC(ch$)ă      IF OS2 THEN Addon = 250 ELSE Addon = 0ă      IF (p > 126 + Addon) AND (p < 639 + Addon) THENă        r = q \ 16ă        rr = q - (r \ 16)ă        PSET (x, y), ră        PSET (x + 1, y), ră        'PSET (x + 1, y), rră        x = x + 2ă        IF x = XX + 32 THEN x = XX: y = y - 1ă      END IFă    NEXT pă    CLOSE Iconă  ELSEă    CLOSE Iconă    KILL IconName$ă    PRINT IconName$ + " file not found."ă  END IFăEND SUBăăThomas A. Hirsch               SNOW FALLING AND PILING UP     thomasalh@geocities.com        12-03-96 (16:23)       QB, QBasic, PDS        53   1221     SNWTREE.BAS SCREEN 13ăRANDOMIZE TIMERăanz = 30ăDIM a(anz)ăDIM b(anz)ăDIM c(anz)ăFOR j = 0 TO anz - 1ăa(j) = CINT(RND * 300)ăb(j) = 0ăc(j) = CINT(RND * 5) + 25ăNEXTăCOLOR 2ăLOCATE 5, 5: PRINT "SNOW . BAS by THOMAS A. HIRSCH"ăLOCATE 10, 2: PRINT "Greetings from FROG COOPORATION too!"ăCOLOR 4ăLOCATE 15, 8: PRINT "MERRY CHRISTMAS"ăCOLOR 2ăLOCATE 20, 11: PRINT "Quaak"ăLINE (250, 130)-(265, 150), 2ăLINE -(255, 150), 2ăLINE -(270, 170), 2ăLINE -(260, 170), 2ăLINE -(275, 190), 2ăLINE (250, 130)-(235, 150), 2ăLINE -(245, 150), 2ăLINE -(230, 170), 2ăLINE -(240, 170), 2ăLINE -(225, 190), 2ăLINE -(275, 190), 2ăPAINT (250, 170), 2ăLINE (245, 191)-(255, 200), 6, BFăDOăFOR j = 0 TO anz - 1ăp = POINT(a(j), b(j) + 1)ăp1 = POINT(a(j) - 1, b(j) + 1)ăp2 = POINT(a(j) + 1, b(j) + 1)ăIF p = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: GOTO zoppăIF p1 = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: a(j) = a(j) - 1: GOTO zoppăIF p2 = 0 THEN LINE (a(j), b(j))-(a(j), b(j)), 0: a(j) = a(j) + 1: GOTO zoppăGOSUB neuăzopp:ăb(j) = b(j) + 1ăIF c(j) < 30 THEN b(j) = b(j) - .2ăIF c(j) < 28 THEN b(j) = b(j) - .1ăLINE (a(j), b(j))-(a(j), b(j)), c(j)ăNEXTăLOOPăăneu:ăa(j) = CINT(RND * 640)ăb(j) = 0ăRETURNăăDavid A. Wicker                VGA CHRISTMAS DEMO             david@fastlane.net             05-26-96 (10:02)       QB, QBasic, PDS        375  9461     TREE.BAS    ' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                 * SCENARIO BBS VGA CHRISTMAS DEMO *                łă' ł                                                                    łă' ł      Written by David A. Wicker ÄÄ (C) 1996+ Scenario, Inc.        łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăDECLARE SUB PPSET (H, V, C)ăDECLARE SUB SweetLine (X1, Y1, X2, Y2)ăDECLARE SUB GPR (H, V, T$)ăDECLARE SUB PRGB (C, R, G, B)ăDECLARE SUB RGB (P, R, G, B)ăDECLARE SUB CRGB (N, R, G, B)ăDECLARE SUB DEC (N)ăDECLARE SUB INC (N)ăăRANDOMIZE TIMERăă'ON ERROR GOTO ErrFoundăSCREEN 13ăDEF SEG = &HA000ăRANDOMIZE TIMERăăDEF FNR (A) = INT(RND * A)ăDEF FNN$ (A) = MID$(STR$(A), 2)ăDEF FNO$ (A$) = LEFT$(A$, 1)ăDEF FNC$ (A$, A) = MID$(A$, A, 1)ăDEF FNVAL (A$, A) = VAL(FNC$(A$, A))ăă  DIM FontIMG$(96)ă  FOR I = 1 TO 96ă    READ FontIMG$(I)ă  NEXTăăFOR I = 0 TO 254ă  PALETTE I, 0ăNEXTăPALETTE 255, 47 + 65536 * 63ă ăLINE (0, 162)-(319, 162), 255ăLINE (0, 189)-(319, 189), 255ăăTextSize = 1ăTextColor = 255ăOffSetY = 1ăGPR 19, 13, "Just a moment..."ăăDIM I.ScrTxt(3841)ăăX! = 0ăLY! = 0ăFOR Y = 0 TO 130ă  C = FNR(12)ă  FOR I = 160 - X! TO 160 + X!ă    PPSET I, Y + 10, C + 32ă    C = C + FNR(4)ă    IF C > 11 THEN C = C - 12ă  NEXTă  X! = X! - 2 + SIN(((Y + 10) MOD 20) / 40) * 11.5ăNEXTăăFOR Y = 141 TO 160ă  C = FNR(12)ă  FOR X = 160 - 20 TO 160 + 20ă    PPSET X, Y, C + 66ă    C = C + FNR(4)ă    IF C > 11 THEN C = C - 12ă  NEXTăNEXTăăREAD A$ă  FOR I = 1 TO LEN(A$) STEP 4ă    X1 = FNVAL(A$, I)ă    Y1 = FNVAL(A$, I + 1)ă    X2 = FNVAL(A$, I + 2)ă    Y2 = FNVAL(A$, I + 3)ă    SweetLine 160 - 12 + X1 * 3, Y1 * 3, 160 - 12 + X2 * 3, Y2 * 3ă  NEXTăăC = 0ăFOR V = 20 TO 161 STEP 3ă  FOR H = 0 TO 319 STEP 6ă    LV = VăMoreLites:ă    IF POINT(H + 3, V + 3) > 0 AND POINT(H + 3, V + 3) < 62 THENă      CIRCLE (H + 2, V + 2), 1, 48 + C * 2ă      PPSET H + 2, V + 2, 49 + C * 2ă      INC Că      IF C = 7 THEN C = 0ă      H = H + 6 + FNR(3)ă      V = V + FNR(3) + 1ă      INC LVă    GOTO MoreLitesă    ELSEă      V = LVă      C = FNR(7)ă    END IFă  NEXTăNEXTăăFOR H = 0 TO 319 STEP 4ă  I! = RND * 2 + 1ă  C = FNR(31) + 1ă  X! = Hă  YY = FNR(162)ă  FOR Y! = 0 TO 161 STEP I!ă    IF POINT(X!, Y!) = 0 THEN PPSET INT(X!), INT(Y!), Că    X! = X! + SIN((Y! + YY) / 10) * 3ă    INC Că    IF C = 32 THEN C = 1ă  NEXTăNEXTăăT$ = "Seasons Greetings From *Lost *Scenario!    "ăT$ = T$ + "SysOp: *Topaz  Co-SysOp: *Primrose    "ăT$ = T$ + "Here's wishing you the very best for the holidays and a "ăT$ = T$ + "very Happy New Year!  "ăT$ = T$ + "    Scenario used to be a BBS local to Fort Worth, but has now "ăT$ = T$ + "moved to the internet!    "ăT$ = T$ + "*Scenario BBS specialized in file transfers "ăT$ = T$ + "including crunched GIFs and JPGs, unique and original games and "ăT$ = T$ + "tool files.  For Message Bases it had: Time Wind's Tavern, "ăT$ = T$ + "Primrose Erotica, Philosophy Base, Swap/Trade/Sell, and The "ăT$ = T$ + "Warboard.    "ăT$ = T$ + "From all of me to all of you, *Merry *Christmas!!"ăT$ = T$ + STRING$(50, " ")ăăFOR I = 1 TO LEN(T$)ă  A& = A& + ASC(FNC$(T$, I))ăNEXTăă'Bad: IF A& <> 87735 THEN GOTO BadăăFOR I = 0 TO 15ă  PALETTE 32 + I, 256 * I * 4ă  PALETTE 62 + I, I * 3ăNEXTăăFOR I = 0 TO 7ă  PRGB 78 + I, I, 0, 7ă  PRGB 78 + 8 + I, 7, 0, 7 - Iă  PRGB 78 + 16 + I, 7, I, 0ă  PRGB 78 + 24 + I, 7 - I, 7, 0ă  PRGB 78 + 32 + I, 0, 7 - I, IăNEXTăăFOR I = 0 TO 319ă  PPSET I, 162, 78 + I \ 8ă  PPSET I, 189, 78 + I \ 8ăNEXTăăPALETTE 254, 63 + 63 * 256 + 63 * 65536ăFOR V = 0 TO 5ă  FOR H = 0 TO 319ă    IF V = 0 OR (POINT(H, 161 - V) = 254 AND FNR(7 - V) > 0) THEN PPSET H, 160 - V, 254ă  NEXTăNEXTăăTextSize = 4ăTextColor = 78ăGPR 9, 0, CHR$(128)ăăTP = 1ăTextSize = 2ăOffSetY = 8ăOffSetX = 10ăDOă  FOR I = 1 TO 31ă    PALETTE I, 63 + 63 * 256 + 63 * 65536ă    IF NT = 0 THENă      NT = 4ă      IF FNC$(T$, TP) = "*" OR (Flicker = 1 AND FNC$(T$, TP) <> " ") THENă        TextColor = 254ă        Flicker = 1ă        IF FNC$(T$, TP) = "*" THEN TP = TP + 1ă      ELSEă        Flicker = 0ă        TextColor = 78 + ((TP - 1) MOD 40)ă      END IFă      GPR 25, 6, FNC$(T$, TP)ă      INC TPă      IF TP = LEN(T$) THEN TP = 1ă    END IFă    DEC NTă    GET (3, 164)-(319, 187), I.ScrTxtă    PUT (0, 164), I.ScrTxt, PSETă    LINE (317, 164)-(319, 187), 0, BFă    R = FNR(14)ă    IF R = 0 THENă      CRGB 48, 3, 0, 3ă      CRGB 49, 4, 0, 4ă    ELSEIF R = 1 THENă      CRGB 48, 1, 0, 1ă      CRGB 49, 2, 0, 2ă    ELSEIF R = 2 THENă      CRGB 50, 3, 0, 0ă      CRGB 51, 4, 0, 0ă    ELSEIF R = 3 THENă      CRGB 50, 1, 0, 0ă      CRGB 51, 2, 0, 0ă    ELSEIF R = 4 THENă      CRGB 52, 3, 1, 0ă      CRGB 53, 4, 2, 0ă    ELSEIF R = 5 THENă      CRGB 52, 1, 0, 0ă      CRGB 53, 2, 1, 0ă    ELSEIF R = 6 THENă      CRGB 54, 3, 3, 0ă      CRGB 55, 4, 4, 0ă    ELSEIF R = 7 THENă      CRGB 54, 1, 1, 0ă      CRGB 55, 2, 2, 0ă    ELSEIF R = 8 THENă      CRGB 56, 0, 3, 0ă      CRGB 57, 0, 4, 0ă    ELSEIF R = 9 THENă      CRGB 56, 0, 1, 0ă      CRGB 57, 0, 2, 0ă    ELSEIF R = 10 THENă      CRGB 58, 0, 0, 3ă      CRGB 59, 0, 0, 4ă    ELSEIF R = 11 THENă      CRGB 58, 0, 0, 1ă      CRGB 59, 0, 0, 2ă    ELSEIF R = 12 THENă      CRGB 60, 3, 3, 3ă      CRGB 61, 4, 4, 4ă    ELSEIF R = 13 THENă      CRGB 60, 1, 1, 1ă      CRGB 61, 2, 2, 2ă    END IFă    PALETTE I, 0ă  NEXTăLOOP UNTIL INKEY$ > ""ăăAround:ăăSCREEN 0: WIDTH 80: CLS : COLOR 7, 0ăC(0) = 0ăC(1) = 1ăC(2) = 9ăC(3) = 11ăC(4) = 15ăC(5) = 15ăFOR I = 1 TO 79ă  COLOR C(FNR(2) + I \ 20)ă  LOCATE 9, Iă  PRINT "Ä";ă  LOCATE 13, Iă  PRINT "Ä";ăNEXTăLOCATE 10, 1ăCOLOR 15ăPRINT "Home Page Address: ";ăCOLOR 13:ăPRINT "http://www.fastlane.net/homepages/david/david.html"ăLOCATE 12, 1ăCOLOR 15ăPRINT "Mailing Address  : ";ăCOLOR 14ăPRINT "david@fastlane.net"ăCOLOR 7ăLOCATE 23ăENDăăErrFound:ă  WIDTH 80ă  SCREEN 0, 0ă  SCREEN 0, 1ă  CLSă  LOCATE 12, 22ă  COLOR 12ă  PRINT "OOPS!  You don't support VGA Graphix!"ă  COLOR 7ăENDăăFontData:ăDATA BR2D5BD2D,BRD2BR2U2,BRD8BR2U8BFBDL4BD4R4,BFBR3L3GDFR2FDGL3BFBRU8ăDATA BDRDLUBFBR3G4BR3RDLU,BF3BRHL2GDFR2L2GDFR2EGBGU8,BR2D2,BR3G2D4F2,BRF2D4G2ăDATA BF2D4BEH2BGR4BHG2,BF2D4BE2L4,BF2BD5DG,BD4R4,BF2BD5D,BF2BR2G4ăDATA BRR2FD6GL2HU6EBFBD2D2,BFED8RL2,BDER2FD2G4DR4,R4D2G2RFD2GL2HăDATA BR4LG3D2R4U2D5,BR4L4D3R3FD3GL2H,BR3LG2D5FR2EU2HL,R4D3G2D3ăDATA BRR2FD2GL2HU2EBD4GD2FR2EU2H,BF2BD3LHU3ER2FD5G2L,BF2DBD2D,BFBRDBD2D3GăDATA BFBR2G3F3,BD2R4BD4L4,BFF3G3,R3FD2GLDBD2D,BF2G2F2E2H2D4HU2EFD2ăDATA BD8U7ER2FD7BU3L2,BD8U8R3FD2GLRFD2GL,BFBR3HL2GD6FR2E,BD8U8R3FD6GLăDATA BR4L3GD6FR3BH3BUR,BR4L3GD7BEBU3R,BR3L2GD6FR3U4L,D8BEBU3R3U4D8,BRR2LD8LR2ăDATA BR3RD7GL2H,D8BR4UH3E3U,D8R4,BD8U8F2DUE2D8,BD8U8R3FD7,BRR2FD6GL2HU6EăDATA BD8U8R3FD3GL,BRR2FD5G2LHU6EBDBFBD4F2,BD8U8R3FD2G2F2DăDATA BFBR3HL2GD2FR2FD2GL2H,R4L2D8,D7FR2EU7,D6F2E2U6,D7FEU2D2FEU7ăDATA D2F4D2BL4U2E4U2,D3F2E2U3BG2BD3D3,R4D2G4D2R4,BR4L3D8R3L2U8,BD2F4ăDATA R3D8L3R2U8,BD4E2F2,BD8R4,BR2DF,BFBD2R2FD4L3HUER,D8R3EU3HL,BF4HL2GD3FR2EăDATA BR4D8L3HU3ER,BF2BD3R2UHL2GD3FR2E,BR4LGD9GLBE2BU6LR3,BF2BD6LHU3ER3D7GL2HăDATA D8BEBU4R2FD4,BR2DBGBDRD5,BR4DBGBDRD7GL2H,D8BR4H2UE2,BRRD8RL2ăDATA BD8U5R2D2U2RFD4,BD8U5R3FD4,BFBD2R2FD3GL2HU3E,BD11U8R3FD3GLăDATA BF4BD7U8L3GD3FR,BD8U5R3F,BFBRBF2L3GFR2FDGL3,BRD7FRBU5L2,BD3D4FR2EU4ăDATA BD3D3F2E2U3,BD3D4FEUDFEU4,BD3F2DG2BR4H2UE2,BD3D4FRBE2BU3D7GL2HăDATA BD3R4G4DR4,BFBR3LGDGFDFR,BR2D3BD2D3,BDRFDFGDGL,BDEFEDGHGUăDATA F4G4U8FD6EU4FD2ăTopazData:ăDATA BRR3BLG2LE2BR3G2RE2LBRR2G2L2BR2BE2BRR3GLBUG2LE2BR4G2RE2LBRR2G2BELBEBR2RG2RE2LBGBDRăăStarData:ăDATA 4053538383656578784646181825250303333340ăăSUB CRGB (N, R, G, B)ă  RR = R * 16 - 1ă  GG = G * 16 - 1ă  BB = B * 16 - 1ă  IF RR < 0 THEN RR = 0ă  IF GG < 0 THEN GG = 0ă  IF BB < 0 THEN BB = 0ă  RGB N, RR, GG, BBăEND SUBăăSUB DEC (N)ă  N = N - 1ăEND SUBăăSUB GPR (H, V, T$) : SHARED FontIMG$(), TextColor, TextSize, OffSetY, OffSetXă  TS = TextSizeă  AX = TS - 1ă  AY = TS - 1ă  IF FNO$(T$) > CHR$(127) THENă    AX = 1ă    AY = 0ă  END IFă  FOR I = 1 TO LEN(T$)ă    FOR X = 0 TO AXă      FOR Y = 0 TO AYă        DRAW "BM" + FNN$((I + H - 1) * 6 * TS + X + OffSetX) + "," + FNN$(V * 13 * TS + Y + OffSetY) + "C" + FNN$(TextColor) + "S" + FNN$(TS * 4) + FontIMG$(ASC(MID$(T$, I, 1)) - 32)ă      NEXTă    NEXTă  NEXTăEND SUBăăSUB INC (N)ă  N = N + 1ăEND SUBăăSUB PPSET (H, V, C)ă  POKE V * 320& + H, CăEND SUBăăSUB PRGB (C, R, G, B)ă  RGB C, R * 8, G * 8, B * 8ăEND SUBăăSUB RGB (N, R, G, B)ă  OUT &H3C8, Nă  OUT &H3C9, Ră  OUT &H3C9, Gă  OUT &H3C9, BăEND SUBăăSUB SweetLine (X1, Y1, X2, Y2) : SHARED LastSweetColoră  H1! = X1ă  V1! = Y1ă  H2! = X2ă  V2! = Y2ă  C = LastSweetColoră  A! = -1ă  B! = -1ă  IF V1! <> V2! THEN A! = ABS(H1! - H2!) / ABS(V1! - V2!)ă  IF H1! <> H2! THEN B! = ABS(V1! - V2!) / ABS(H1! - H2!)ă  IF A! < 0 OR A! > 1 THEN A! = 1ă  IF B! < 0 OR B! > 1 THEN B! = 1ă  DOă    LINE (160, 12)-(H1!, V1!), C + 78ă    INC Că    IF C = 40 THEN C = 0ă    IF INT(H1!) < INT(H2!) THEN H1! = H1! + A!ă    IF INT(H1!) > INT(H2!) THEN H1! = H1! - A!ă    IF INT(V1!) < INT(V2!) THEN V1! = V1! + B!ă    IF INT(V1!) > INT(V2!) THEN V1! = V1! - B!ă  LOOP UNTIL INT(H1!) = INT(H2!) AND INT(V1!) = INT(V2!)ă  LastSweetColor = CăEND SUBăKurt Kuzba                     SCALABLE FONTS                 FidoNet QUIK_BAS Echo          11-27-96 (03:18)       QB, QBasic, PDS        69   2497     SCALFONT.BAS'   Most advanced applications used scalable graphics fonts.ă'The character definitions may be stored in a file or moved to aă'separate module which returns only the requested character.ă'You will notice that when the width specified is increased, theă'ammount of white space between characters increases, allowingă'you to place the characters more closely together.ă'This is NOT, however, a fast way of doing things, though ită'allows for ornate lettering. The CIRCLE may be further refinedă'to use 1/8th instead of 1/4 increments, or even both.ăă'_|_|_|   SCALFONT.BASă'_|_|_|   An example of using scalable fonts in Quick Basic.ă'_|_|_|   No warrantee or guarantee is given or implied.ă'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (11/25/96)ăDECLARE SUB PutChar (ch%, c%, x%, y%)ăDECLARE FUNCTION Characters$ (c%)ăDIM CHigh AS INTEGER, CWide AS INTEGERăCHigh = 14: CWide = 8ăSCREEN 12ăPAINT (0, 0), 7ăPutChar 65, 0, 15, 25ăPutChar 66, 0, 24, 25ăPutChar 67, 0, 32, 25ăCHigh = 15: CWide = 20ăPutChar 65, 1, 5, 43ăPutChar 66, 1, 15, 43ăPutChar 67, 1, 25, 43ăCHigh = 30: CWide = 12ăPutChar 65, 4, 10, 32ăPutChar 66, 4, 22, 32ăPutChar 67, 4, 34, 32ăCHigh = 42: CWide = 24ăPutChar 65, 5, 5, 36ăPutChar 66, 5, 17, 36ăPutChar 67, 5, 29, 36ăSOUND 999, 1: WHILE INKEY$ = "": WENDăSCREEN 0ăFUNCTION Characters$ (c%)ă  SELECT CASE c%ă     CASE 65ă        Characters$ = "LAMCA LGMCA LBHFH"ă     CASE 66ă        C$ = "LAMAA LAACA LAMEM LAEEE CCCBD CCCBA CEIDD "ă        Characters$ = C$ + "CEIDA"ă     CASE 67ă        Characters$ = "CCEEA CCEEB CCHEC CCHED LADAH"ă  END SELECTăEND FUNCTIONăSUB PutChar (ch%, c%, x%, y%)ă   SHARED CWide AS INTEGER, CHigh AS INTEGERă   CharDef$ = Characters$(ch%): LN% = ASC("L"): CR% = ASC("C")ă   asp! = (4 * (CHigh / CWide)) / 3ă   WHILE CharDef$ <> ""ă      x1% = ((ASC(MID$(CharDef$, 2)) - 64 + x%) * CWide) \ 8ă      y1% = ((ASC(MID$(CharDef$, 3)) - 64 + y%) * CHigh) \ 14ă      SELECT CASE ASC(CharDef$)ă         CASE CR%ă            x2% = (ASC(MID$(CharDef$, 4)) - 64) * CHigh \ 14ă            R! = (ASC(MID$(CharDef$, 5)) - 64) * 1.57ă            CIRCLE (x1%, y1%), x2%, c%, (R! - 1.57), R!, asp!ă         CASE LN%ă            x2% = ((ASC(MID$(CharDef$, 4)) - 64 + x%) * CWide) \ 8ă            y2% = ((ASC(MID$(CharDef$, 5)) - 64 + y%) * CHigh) \ 14ă            LINE (x1%, y1%)-(x2%, y2%), c%ă      END SELECTă      CharDef$ = MID$(CharDef$, 7)ă   WENDăEND SUBă'_|_|_|   end   SCALFONT.BASăThe ABC Programmer             SAVE SCREEN IMAGE TO PCX       Converted from Pascal Code     12-05-96 (15:46)       QB, QBasic, PDS        189  6622     SAVEPCX.BAS '===========================================================================ă'  Here's some code for SWAG to dump the current mode $13 screen to aă'  PCX file.  Feel free to use/modify, just give credit.  Also, if youă'  do a good mod of it (ie, A mode X version, faster compression, whatever),ă'  I'd love to see it.ă'ă'  Reference: Bit-Mapped Graphics (2nd Edition)ă'    Steve Rimmeră'    ISBN 0-8306-4209-9ă'    (C code but still pretty useful)ă'ă'  PCX is of course (tm) Z-Soft Corp.ă'ă'  Copyright 1995 Kevin M. Luck  <-- Original Turbo Pascal code.ă'---------------------------------------------------------------------------ă' Thanks Kevin.  This code has been converted to BASIC by William Yu (12/96)ă'ă' Remember what good programmers do:  Give credit where credit is due!ă'ă' Somewhat useless with all the screen capture utilities out there ;)ă' But an excellent tool for use with your own paint programs and such...ă'ă' This only supports 1 plane video modes, but I'm working on a 4 plane one.ă'===========================================================================ăăDEFINT A-ZăDECLARE SUB WriteHeader (PCXName$)ăDECLARE SUB EncodeLine (Ln)ăDECLARE SUB GetPal (ColorNo, R, G, B)ăDECLARE SUB WritePalette ()ăDECLARE SUB SavePCX (PCXName$)ăăDIM SHARED PCXFile AS INTEGERăă  SCREEN 13ă  RANDOMIZE TIMERă  I = 0ă  DOă    X = RND * 319ă    Y = RND * 199ă    R = RND * 50ă    I = I + 1ă    CIRCLE (X, Y), R, I    ' Let's draw random circles.ă  LOOP UNTIL I = 150ăă  SavePCX "IMAGE.PCX"ăăENDăă' Color Palette Setting.  Can't make any sense out of this.ă' You'll find that with 4 plane modes or other PCX codes useă' the palette scheme from Black --> Bright White.ă' (ie.  0,0,0 = Black  255,255,255 = Bright White)ăăDATA 0,0,0,216,152,56,120,116,4,112,108,4,236ăDATA 172,76,248,196,128,64,36,36,36,40,20,248ăDATA 188,104,212,144,156,60,36,36,116,112,8ăDATA 120,116,8,124,120,8,52,48,4,240,196,136ăăSUB EncodeLine (Ln)ă'**********************************************ă'  Encode the current image on screenă'ă'  Kevin Luck seems to be on the lazy side :)ă'  This will only work for 1 plane video modes.ă'  Hehe, that would limit it to SCREEN 13 Doh!ă'***********************************************ăăDIM P(0 TO 321) AS INTEGERăă  T = 0ă  DEF SEG = &HA000                  ' Must be a faster way usingă  FOR N = 0 TO 320                  ' buffered routines.ă    P(N) = PEEK((Ln * 320!) + N)    ' MOVE Addr(Ln*320) --> P()ă    POKE ((Ln * 320!) + N), 0       ' Erase screen.  Remove if desired.ă  NEXT Nă  WHILE T < 320ă    I = 0ă    WHILE ((P(T + I) = P(T + I + 1)) AND ((T + I) < 320) AND (I < 63))ă      I = I + 1                ' Same coloură    WENDă    IF I > 0 THEN              ' How many times does the same colour occur?ă      A$ = CHR$(I OR 192)      ' Limit of 63.ă      PUT #PCXFile, , A$ă      A$ = CHR$(P(T))          ' Write pixel coloură      PUT #PCXFile, , A$ă      T = T + Iă    ELSEă      IF (P(T) AND 192) = 192 THEN  ' It's greater than 192ă         A$ = CHR$(193)             ' Weird stuff...ă         PUT #PCXFile, , A$ă      END IFă      A$ = CHR$(P(T))               ' Write Pixel colour.ă      PUT #PCXFile, , A$ă      T = T + 1ă    END IFă  WENDăEND SUBăăSUB GetPal (ColorNo, R, G, B)ă'*********************************************************************ă'  Get Current Palette Scheme (Does not change unless you change it)ă'*********************************************************************ă  OUT &H3C7, ColorNo    ' Read Color's...ă  R = INP(&H3C9)        ' Red Intensityă  G = INP(&H3C9)        ' Green Intensityă  B = INP(&H3C9)        ' Blue IntensityăEND SUBăăSUB SavePCX (PCXName$)ă  WriteHeader PCXName$ă  FOR Ln = 0 TO 199ă    EncodeLine Lnă  NEXT Lnă  WritePaletteă  CLOSE PCXFileăEND SUBăăSUB WriteHeader (PCXName$)ă'************************************ă'  Dump the default header to fileă'************************************ăăDIM OldPal(1 TO 48) AS INTEGERăă  PCXFile = FREEFILEă  OPEN PCXName$ FOR BINARY AS PCXFileă  B$ = CHR$(10)               ' Manufacturer.  ZSoft of course.ă  PUT #PCXFile, , B$ă  B$ = CHR$(5)                ' Version, in case it matters.ă                              ' 0 = Version 2.5 of PC Paintbrushă                              ' 2 = Version 2.8 w/palette informationă                              ' 3 = Version 2.8 w/o palette informationă                              ' 4 = PC Paintbrush for Windows(Plus for Windows uses Ver 5)ă                              ' 5 = Version 3.0 and > of PC Paintbrush and PC Paintbrush +, includesă  PUT #PCXFile, , B$          ' Publisher's Paintbrush . Includes 24-bit .PCX filesă  B$ = CHR$(1)                ' Encodingă  PUT #PCXFile, , B$ă  B$ = CHR$(8)                ' Bytes Per Pixel (1 for 4 plane)ă  PUT #PCXFile, , B$ă  B$ = CHR$(0) + CHR$(0)      ' Min X (Integer deserves 2 bytes)ă  PUT #PCXFile, , B$ă  B$ = CHR$(0) + CHR$(0)      ' Min Yă  PUT #PCXFile, , B$ă  B$ = CHR$(63) + CHR$(1)     ' Max X  (In this case it's 319)ă  PUT #PCXFile, , B$          ' Try 319 AND &HFF and you'll seeă  B$ = CHR$(199) + CHR$(0)    ' Max Yă  PUT #PCXFile, , B$ă  B$ = CHR$(64) + CHR$(1)     ' Horizontal Resolutionă  PUT #PCXFile, , B$ă  B$ = CHR$(200) + CHR$(0)    ' Vertical Resolutionă  PUT #PCXFile, , B$          ' Default Paletteă  FOR I = 1 TO 48ă    READ OldPal(I)            ' Mem [Seg (OldPal):Ofs (OldPal)],48)ă    B$ = CHR$(OldPal(I))      ' I'm sure there's a faster way to do thisă    PUT #PCXFile, , B$        ' But I'm not good with converting that TP codeă  NEXT Iă  B$ = CHR$(0)                ' Reservedă  PUT #PCXFile, , B$ă  B$ = CHR$(1)                ' Color Planes (4 = Intense, Red, Green, Blue)ă  PUT #PCXFile, , B$ă  B$ = CHR$(64) + CHR$(1)     ' Bytes Per Line Per Plane (In this case 320)ă  PUT #PCXFile, , B$ă  B$ = CHR$(0) + CHR$(0)      ' Palette Typeă  PUT #PCXFile, , B$ă  B$ = STRING$(58, CHR$(0))   ' Fill rest of header to viola!  128 bytes.ă  PUT #PCXFile, , B$          ' Actually byte 70-74 is for Paint Brush IV/IV+ă                              ' so it should be 54, but who cares.ăEND SUBăăSUB WritePaletteă'************************************ă'  Dump the current Palette to fileă'************************************ă  L$ = CHR$(12)ă  PUT #PCXFile, , L$ă  FOR L = 0 TO 255ă    GetPal L, R, G, Bă    R = R * 4ă    G = G * 4ă    B = B * 4ă    R$ = CHR$(R)ă    G$ = CHR$(G)ă    B$ = CHR$(B)ă    PUT #PCXFile, , R$ă    PUT #PCXFile, , G$ă    PUT #PCXFile, , B$ă  NEXT LăEND SUBăAndrew Diamond                 SLOW TYPE EFFECT               albertad@geocities.com         12-05-96 (18:19)       QB, QBasic, PDS        42   1293     SLOWTYPE.BAS'Program Type -- Modified Printă'Modified: Andrew Diamondă'Web Page: http://www.geocities.com/SiliconValley/Heights/3128/QBASIC.HTMă'Date: 12/5/96ă'ăăDECLARE SUB slowtype (Talk$, x!, Y!, speed#, backColor!, middle!, top!)ăDECLARE SUB pause (tdelay#)ăăSCREEN 13     'Use good colors!ăDEFINT A-Z    'Always DEFINT!ăă' This routine is actually part of Mike Helms Alienoidă' I just edited a little bit of it because it looked cool.ă' Don't think he'll mind much!  After all, I mentioned his name!ă' slowtype (talk$, x!, y!, speed#, HighLighter, TrailColor, WordColor)ă'ăăslowtype "Slow Type This Dude!", 11, 8, .001, 15, 8, 7ăăSUB pause (tdelay#)ă'------------------------------------------------------------------------------ătime1# = TIMERăDOăLOOP WHILE (TIMER - time1# < tdelay#) OR (time1# > TIMER)ăăEND SUBăăDEFSNG A-ZăSUB slowtype (Talk$, Y!, x!, speed#, HighLighter, TrailColor, WordColor)ăa = 1ăDO UNTIL a = LEN(Talk$) + 3ăCOLOR 8: LOCATE x!, Y!:ăIF a > 1 THEN COLOR HighLighter: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 1)ăIF a > 2 THEN COLOR TrailColor: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 2)ăIF a > 3 THEN COLOR WordColor: LOCATE x!, Y!: PRINT LEFT$(Talk$, a - 3)ăpause speed#ăa = a + 1ăLOOPăLOCATE x!, Y!: COLOR WordColor: PRINT Talk$ăEND SUBăăAndrew Diamond                 HILIGHT PRINT                  albertad@geocities.com         12-05-96 (18:19)       QB, QBasic, PDS        44   1352     HILIGHT.BAS 'Program Type -- Modified Printă'Programmer: Andrew Diamondă'Web Page: http://www.geocities.com/SiliconValley/Heights/3128/QBASIC.HTMă'Date: 12/5/96ă'ă' Overview:  Use this subroutine to highlight certain characters withoută'            having to LOCATE, PRINT a bunch of times.ă'ă' Usage:ă'     selection column, row, text$, highlight$, TextColor, HighLighteră'ă'ăăDECLARE SUB selection (x%, Y%, text$, highlight$, TextColor%, HighLighter%)ăăDEFINT A-Z                             '      You don't have to, but why not?ăSCREEN 13                              '      Wider variety of colorsăselection 5, 10, "Press Y to quit.", "Y", 8, 15ăDO UNTIL UCASE$(INKEY$) = "Y": LOOP    '      Wait for Yăăselection 5, 10, "Now Press to quit.", "P", 8, 15ăDO UNTIL UCASE$(INKEY$) = "P": LOOP    '      Wait for Yăă'ă'  This subroutine searches through text$ for the letter designatedă'  in highlight$.  When it finds it, it prints it the color HighLigher.ă'  If the subroutine doesn't find the letter, it prints it directly ată'  the end of text$.ă'ăSUB selection (x, Y, text$, highlight$, TextColor, HighLighter)ăăLOCATE x, YăCOLOR TextColorăPRINT text$;ăăFOR I = 1 TO LEN(text$)ăIF MID$(text$, I, 1) = highlight$ THEN dummy = I: EXIT FORăNEXT IăăCOLOR HighLighterăLOCATE x, (Y - 1) + I: PRINT highlight$;ăăEND SUBăăCharlie Quante                 A SCREEN 12 SPRITE EDITOR      charlie@charlie.seanet.com     12-08-96 (00:00)       QB, PDS                501  33079    GWORK.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3ăSUB V1:OPEN "O",1,"GWORK.ZIP",4^6:Z&=24564:?STRING$(50,177);ăU"%up()%9%%%I-%uJnMFH6*72#8.%%2m%%%1%%%%lw.ni&t%wpSg7fxfa;,B[mYaHăU"gWKw4H+NH';2I47ENYGU6PCV=82.(0G,P,UZOQ+&<_n'n-fYZvj&5hnpO=nYg>?ăU"XD?^eufyCuECCC?CECQQ_nzLqGBgpuTP6Gid&l:6nno4Z\DownJ3PjLK46jCQZHăU"7V^pPn5C8Cl+2JcR+\rkx5$OH7aaQMQ9+0\pm7S?Z]xU0bP565XLrVi;Og(.lJFăU"$&kg/[>GD7osgEEf1ki,3bWPF[4kTuy0pu?pj<b?w-G9)Xf,jPouInN>WV=Tr81ăU"GkGWknNR[xDmS>jT)lW^Mnd2K,0RU3#H3WDhN9Ohe%%k>$BQJY$u%jY[O3;6JHAăU"PRJnz;])R>qe&wF?U-ni.dW/0j#kJJI<(>rTDOfj0yOC''CtfVl0Y0;Kc+RWYe4ăU"UQOsP_+Z4,?#DTjg/+IMBT?tIG>KXAeGTbOE22kO8Kgn)sm9.GE[](eSv_*U9kkăU"3c3JG&ne%h%M1?gSFv_BZ0.PAY(1r$wciKuMaocucO?$:\q2rai0.Ht[)08JHC<ăU"KQem1(;%I?2k#g;3j-hWW1s^b[;j7h.hQ8M)$G8+S^WcZGGR<YR(CRmkMQ.4AvwăU"2T$[E>%&ZAmDAu%kiUDiDdl,(=u&7<X\vGsa\ah$UcWgg_o>r?qO/l(:gL/e8CDăU"<YEtX]4n*,s;aWUTM?H2Gzb2xr(?X23^rhm9wgd6V,Y?xnz66God;mOHw]q),'tăU"=a#u66B.&hONmp$'d*d7j.4pfJW\QlV]8FR?UQ3JT[_NHt6M2On+(61[$$2LcT,ăU"NL^$xsmg+HjucAgN7=#4<c6w)SX,x>.$?lv0TT,P:mexu#s#.Zva)g$==ELv.;]ăU"+piq)<W<1$A2OIIE0T+;k<hqf#%U++1SD?CnqlTfO7Zk:QJN0f3pJ\VlNl:lpirăU"NvSRma4q,xGSXTJ;&,DlVX4Qbs0*00ixT4)+GE;ZS+#HUX*:pz*:/mXoQ8TrAbnăU">j,Btt%iQSk[Xc_9]NmXnp-njb1FkCFYWpEXEMunp(g<RESJbSG-U(]6Uj9Z-h7ăU"'1Crhg+EtW=A^s+dDnH\)TGZ;8S6bD<T)NBCv\sb-IycK2Za'IgsmK*\SzdM$UzăU"-K80]Cr>>:N^cgdP+4k3lb:K&hUUoe]hI$j,C0Z4&r5Dt$$Ibb_XggB(3$Z?/OlăU"F5lYsgAD[5r'7l)kAbCv.Oc_xJZg1wv=[J;4D[r4&VGR)_f#p<[_6$vRDq/bMA#ăU"Ex<85[;RGg8yZF\0K6=II4d9W2B-bEES2bZ_Aru3cvldF.\^V7*X-*8BhZ8W,rrăU";)114G;=zjxL$250kSaJW*J4+]*#^(A6MpG&0Z#M>o((2317^?;zBYD3?AOB*OHăU"VlZV5j>^TLU.CHL5s?GTOC<<W13^8UD<Lj+H](.TaJLmdAc(wTMvT<?(Sddahx*ăU"_bX7-_aGiTFNiGj5m6,[1Po$7k+E7l^%27TZJ\EQG3Fq9JGL0r:_W$&#+^xFJ,<ăU"wVBrNr69ks(R44M5LOlHnL>9aDn3#>S\8FcPa]3J^NVi6i=va1g$L):egE:W_C8ăU"EAM>r:9,L3*G-eSO\J9j/3c;#>nO^__[m6F1Tdq^L*>j3B5dPgkk*f+,9b?t<Z7ăU"UUfm0&:1BR(v7uD0>sDU5.lWp(0s(0w6\*oDBeZ5iqTl16OJOUF/p-71RmOE02HăU"F+.Uq_ab+TRj5XmU%d#$C/3YSudb,PPRjz<>mCG6iOi_)pler):$ol,G#GW*w/KăU"CG+0fM%y0=:3Os'8q0yJMT2A6#l5\2.S5;PC^yCYm_*wBoj_v)V_o=tK0S5JOADăU"e8PXjEK7.d(Ui9xhHm;m>UWne+*o_Y]nr>rCrML3n.kGfi_0*3-+t75e=C&/BI>ăU"l=0_V/zb5hUdW=R*Ishx>dUCHnT:8d^(u-X/\k.Zcs+v_AU-f5JU1ZeNdnD?'q8ăU"w5Jh-gpEpR^mkCLYf2q54_[n_Ma.Ykt5o=VcQU$99$HdN4kS2ynr)ruc562_0mPăU"Q8Jv]:dCRuYWO,ELn5P.mjd4#H:Fq%-(m24.D[_;3)l\%h?_#=Oe[3C>$Z;TkN8ăU"BWrc65SzSL^tK7c=ZL?%URm?;*[GNYa.RL,_M0i;;LDqdbiXp-4+Ii'#9*8(P5kăU"6*608/vo;RF7dQYD&POtP&*>Ac;Le](>>S-$ZG-QY>2LR;7x:+X$Htm(iu%8c;[ăU"\Gk([Br/t<'XV>:^>'AjiG-N[[]3Dise)ZO0ZTO4?hdi0>K90HQwH#K4)jH\T;MăU"TPfbXqa'1U>e^s,$fog)l<UMbsPCHSw>.metw%\-hw*J,2=,]48:3V[?NRQAKbjăU"/p8'fFpS#6j0YX2\*D539P*rYY-w.(N-oN7)q'9uL:axpo8]S<6OKu;#y%Y%:LOăU"W2U1/iiKIbP*1m^+-TqT6E5UvdN;&kH#M;72=HK,_9XY,XNW^mKU0rv$_h%ib6<ăU"Gc7+X_yPRsR]<Z=Y<H>M?0bQa84KFceqDhK=UCrKdl:;,A^RYC^1VJjk3sFO6JYăU"oHnq?.ac&lR(==ZPSi:,A?MIc:zg(O:3rgZ]5>tSR8Q9&-N950mP?t<4r+]x_EqăU"s5Y;B_h,[IN]GTTI-Cv_S-&6f'fRk2,g4X*aVma;vf38CmU)U$$3$ojQb5o2dNiăU"n.o^iNDdb&.OUk<Cq9Wf^hy-T3c]ob-x0;gMZ$D<F9?I8ZrYr(GUVK*CV9hhjNkăU"9SGXDaAOtZ]7=G[67et+U>';+rd7fgZ+>P7G1/-X<Z$2v9^e,:l1qXZYGkCL=9KăU"U3(&r%+mDaYg*DLzZv(T931(PE5i.0mQj*1pRMnFUes'\YK]ZLqo%%Q&Gc$$pr=ăU"B2vgvgJ)r#PvjnB*Qaq=#>,gH7+im6dr)8-HH?36<$O,u=T*X.YelFa&^tyktIoăU"[BGbacqNt4CS,cNWZEW6uwM3.;Hr#k:ehmU)[7NWF1bPDVr2_Y%n*Sy=)cHu.AXăU"G:K)1oQ31emLW)u-dQu[Prf)D]jF441;*yBq,Qm<%Q(QP&L(GGF#7].6iaiG8:3ăU"pjlQg127/F)H:[Dj=Y<?YV%,JMjK&R%mp/d'Lpa%z)Q#ANd+a_NTZX5B06_%lCBăU"p:q<0]N^NPzjgKmjOi\Qt95\uPNq.[*XT)Zdg(g/ZON??5OPA[O.T9o[fkaF/O>ăU"_e*CTcx/.$5.HQY2kzD6k7lG.L/qTcLG=0SgK6$=\jQ9O.PpQM*64.oU;.hhYs+ăU"Y+0Y5FAsfC3Lp#D'3+k9NKBKUQ^mOiDc**Ckw,BYArnuIEri;LnT$e(Ux:/c(FNăU"0DBuWE1ZaXlvnz&QVI%776r2c*.Y5i:W&+LzIGQ0[bi;TG$Xs_i)h20)Y'VTAgwăU"$'+QhnC.Z*0IIMdD>j0\bGS:-uDqccO6O#^U2mCV_*>\'i(-NLi/-nn[i9>ge>(ăU">lR3>A(LS&JkyNcG40]U=k=XTvgCC'GeqVV8NidtO&R>)]V\;/?60:0]gO_ogY[ăU"\o2-OA:;ROMTKkS'puRVMuv-vFTn_VB0(3C/E>=w$DKv?[Yb)DOC&bGo.;DHN$aăU"?[R'N:VgVmo/enOu)r&P%><X'keECpe<1wQZU(zBe-ESUK_\c5?3JkN]b.Jt3BiăU"qSw3(?(YO^N/5-nRgG6B)*ha;S]AvN%)3<Pa;.:jL9pgDa/j/#m%H%+Q$Uh^HFvăU"c7KfCo&SUBsNpHeCfLtU+cSo<SDFlCMZ]]i28v+,wq25CD^LXAkN&m5,(3']4N^ăU"hM2A'Nd9sSF#V\#7W]$]gXl$>(kPBJ1]P\(]XeY(4ob/(ly/GAf$HQ-2z2S*W9#ăU"S3?o(E9hy<NQnq#Mi>aSXjRkxE)RG/Q00;mRB'u]dSu*n(UT>h0nk&9FZMk*nuVăU"E\dZOMJdga4pU-.bXpN)N-_RS*^/LO60)9vkgB..R-7S-n<i^#><+IF/k_Y?7//ăU"-+BK]57C,)s>;\lEkR/$%g;&'7qND]Z&7hsD^$IC<#n*%kj,J)L['<oWj6Nk8TXăU"MDEVRfpxHO<22mUfCttFK4.Z&gKA0.n996M3pi1G[XzWvaCUMJ[f[jKd1X[1e)KăU"jNgC:5/SNHgFacP7iDAx-]D\Zt\h-Epxo*nfGl_#wi_6M:C]c9r8RbUYi_:D-wWăU"ekC%$aQk/tND^e6Fkk'3XNAAB^ATm*<c%u[Qlk?^8J]#mBQa0q04JRECFbpH./1ăU";jio1MHKjHJ&iGm[A)5]HC2Y''z3$QSn(iSJ-X>/TSL71P^r+30chawweYt;XiZăU"Psm\Ft\CmtyWJO9weN$-%EBB9N#YCPzfto;+Ssmau#-NhyQI$)8)Dd:M)FGdupbăU"s3q-$wje?L4G,u:85%+&?r1Y4k:AyQxgu5E%nomN8/;Mx7Atl('4Le*=>>K^8.jăU"pZaoS7Z'fo5e\&w-h2iH%0O+P(l4kU5xO;z$(\q2XSZ)HJgvOs(^45OxC#1k$PSăU"//47DHh'ikeFT/Ufv'nYHhf6NJ?97lsQGRN2oL-=00\^].$AK]X>RYaO=?^'Sg]ăU";xtG^;=TOPWHbu,u0EQ55yFTt:f(6r<1Z-^k3]pf+p%&+.QVQH;Q/[R[(d\;5MZăU"Z3)U(iTJFmL<X;VHJKU=Y\aPO;J0117rlF)YUg9>wigjaFMmB&:Sgs7L2\-+HsEăU"neQLDM+5v=I1y_q1C2**08SXq;[Q\O#&Ubi,8(xHU(4q/wXX?#v/*=eU6i[]9,UăU")y$MzH5knH:EQHk(ZPIw-*jb%UO-Al--Dh>&xt;(_Oo8jk5c;fW]EBHJ>#6x6'&ăU"P?peJPuiV1=AZn'QUJC0r#GV(9jV?8ZWi^\Hlwb>1^o?cd,vAv(:9L*t3KPS6(/ăU"hMKpPx1XqQ<le8tPGn+^KHVfk[4GFskhqQ-6wLPHVG:805I97jmKU-2ir&Ib\4JăU"Pyj?AH*F'X2-$:<8)$=Buj'k:?[C8V+]N_7=Wku76lHUDe*2\3r2w_Q>xUPX660ăU"jh7mTC,th\V;Y\;QU1eA[T5E8^)IWZDNVOIGI>SAW5e3V))0C#L/z%XGFnj0n-<ăU"Y6nR5L(.PDS&&omx=JEa5]#kM7;.4?kveHspdk,.4YIKT46^(GZHg.6e]V)8UQwăU";oQ%v'aG.qs2U2=,L-oV'k,5^0QgQb,d:u](+3EF1h;E;5jNYJ]iRm;5//3IQk;ăU"igRdcUAZN*CxKx&>oP%/_+Bb5Ut>?GT8I65ojc0kV;-k_%]#yNcskB'D\=rTf0$ăU"EBj9UCRNI.newaI>_iR&4AQoT$m^C+MRJx55Q;9=?LFqDuWN&Cz1lVRl^YpVh5văU"F=X2Hipf6\o?X4X<m)Z9\<e(?WL4YSBR#y?A^f5#d9Cug$nrG\#_ocbGJN/ivA^ăU"p[[(HpKx,a4W6KKet*X*Rum(OrNxt//gA?539-Y>>wadyxW[F1[rePq6zw*_(&.ăU"bmKUMLOt*C<CjKRjb*<=%54fo3bby.R-:WheQ]PC$%OiTVifQmIZU'L,X5fN*X^ăU"6ZEQX'B66Dy6p*:3Vc[Y8gs-uoVDYw>veO?#4V3^Z;EB[8CS7IT3JeQZ#),fm_IăU"MiegXW<wh&w2jAi6PX1\_R?)YY8Z&2kWrzc:;sgf<y&,cq\+lGRky]2&7[gL<aUăU"(iuWHu.EOgjB]PbS:C5crO?+c%#IH/B(zSICKkoBGIG=iTeqgDKhJlF9*Rzhc&XăU"AzfXcv0p1k%EogQYQmAFe3e%0GNMem%NpcN4TW9BWD66l-k%fnYwJSt'9,]8%ZgăU".y88t*Xwc67)bl[=Za1t+'\Tz[d-:O9alFK(A'^_j.hfY0vOG^qWu$Atv&+T$LsăU"Aro-2-=07;wbO*r/Y3KiT;]/b8rq/pBRW-rrLAk=pkR\?d+7;VWtt_Uaqf3iz92ăU"7max#QPOM_XYVq[;OknKW6)G)y'7ZMDpNv;9S3Z%.$^_h0zDrslKOVCX$6qcfI5ăU"4_oME?O:(mh8V;9o#C2uBf[MQ<DU1ounb?il-^>jxG+XxJssZ$4XsJJ/]2w9o_jăU"6q9Z&16TsX/P=owF*3gz/WY.lKtIJ0U_:EG8nB6-^aB9o[Nl9)'Q[\l_Rbkc/F+ăU"/2,L(iEs.itBOxO:h-GTcr1#mU)7l(*?a:_AO,1%MyNQq]DfNUN>qE9B3+PL4woăU"^_EV6KI]F^?2(yD&2o<50RaaJ\KkKJo:n^oY#=*a\A]qh.Qj$/P6o\abuH'EnzKăU"9mz_P1FN(+H74YfqyDs-+L\_)Lx#'=.h_m3d73.#251U.1%h^UY%xN%&up(%)9%ăU"%[%-%oCPMF\2VS1]%0%%c%L%%1%%%%l#wni&%twVS[gfxFk)fBS7a7xqb6sde*IăU"C/tI.4gf?5mS>RgqCc7%,]C,KXAuhRv]F$Rungo(d&W4QRU[EUL]5X7TSnk%4zNăU"t9.o.TVDn5s[Eh'n/C1TA$<5wuYV+rQ7?iku_tcT7\_iKckOu:Tx(XLZYM:?r5OăU"Wb=dX7Vc*lrqGC.paCUO/2cbYdW;AaZ$aLBYm)QSG6XmxQ2Xdm<W#cQmkes(uVAăU"u6*(^BwQAVBa^Hj#g1K?p6N4AwuwN)AJ$>H<uPtM.Bq_B'\,yhQL2HP95LhV>A-ăU"usQ(dASLW4/EDpC7Z92p>q1C3Te=n3k&0rKH4x#M=Ck:T?%87XJ>BsL>4rU3<9$ăU"Q$*.4'ovp+F\wn1m^e>>Ac,O\HJUtGt_<<B?UDWV,TfliZ.pWnJhRj^rtdZZ&M>ăU"7=i]Fjk26]>0j+JUZgeadq#WXMV0__4MS<8YbBES=TZITG4+i0jv>zi[>O(HQpJăU"B9?E_DKo8_[3c-=X6.w]B\Dy;.O9c$VjBTUKf8c$GLR5TR_:-+qs_HaZUbVHZs0ăU"-.Ld,K[tF)aLTE)D_(xLkig:LgtKs/O=m[EW9(04eYXgWZm9in]7Mb6ib^.FGsoăU"]'i>sR[F8D&+=Ly=FF)<oMcT/71M?y4X?+=li=qFUAO9Q=1spHN'%N?BKOMpe)SăU")?y.[_e3ZN1wpI;lmH%oP=H'Pv#oohm4GWf$V.ae8\0$.HO*]$xy.B=I?][<:FNăU")nYf:CcqW;n3*)+s%]Za(ak'C>]G<NZ]:]o9xckEjH?tx^iR?#\$=li8DI?fNE?ăU"O+T7e086:[zb4+?gc1nq45URRa/CtzFW8;]sI_Xef-4w[7]T/Vk2QY(m%G?&^%LăU"Z,7W,0tnh<Rmba>gE9nCLLV$f,].Q+xV(]VChs]JOSZo=J.>Q/xAx9Zb_;0myJRăU"9dz79YP[I]Gpf4a.;qqqNb<\Y,drxeWF2Q%2,J2%[Y>eG$f3\sci8x^'J]18JSCăU"_%ajUlM6s9YPCr^SK[lcdT+eMJcn.$gt+2NT2Nsj]'*<X2oMpGuIiO?NEkEdgg(ăU"0#/4:p-d0]J>/tk0QC.(h^z9Lk77L<>)h'U9c;^;aQ(54$J[I4^MWFRI5-E^fpIăU"Qip$J3$58SE<>>A333)o<=ZR5YPLLs-k3+(Tf-e&niQOYYmLZ?2GOG7^&/3=>H4ăU"T:L\D'VtDf/Jo.?w7l7Bq1:$L(MPE0,vTC[zf[vO2S,rZB:Y6eqAY+M)\y/kYtZăU"BomQ#-526aNhlTP:?-LCX(bN*x]EX=$62tbAM2REm2B&X$=/VnVR[]AcNS/A[+2ăU"oWzp[gs4QQ]K$l\U</e.\40_-?AP&Rk=C:$._)+U'<N>&xA.=$AnT6/UMJt;0REăU"H+FX<)'aN0%k?tOD&E??Ag1t9_bEx+,g3=xP^isRuSo<fTDVLLP_b<gYhfX2WS9ăU"]g9/Q>9cHGl1iI0u%5iiI4j_EC3JIc1mcol9$6xH'd=5Zx4g]<1oS,v*jN/'yTpăU"*-SK4W3Z#DP0pa51Sy<VZN-tPrlh/+pp%D^;UM_=qn[V/S[lDfa[c\M.wMKLbr9ăU"u$S5l*Ic6eiGO(T;f,3XCee5qS>)Hf0b:cAa'AA?fk,N^2IH[tIUX6;uLhIrB+EăU"_'VM)]pOIa#$8GW%77U:c0>pEFipu[&h76)%PLIZ4g?HiE&%5)nT3eSl#)e)G<BăU"FAu^rf3=rM=L789o#dZ5Hr\DQ7AB]9nOiRa%Xy]tXqMEb*+wG.eSxOa.tkb>tkJăU"4JksX*QCyZ?CB%?$dgq6'\$2j4#d\u5r[;QTZlV4F9f,T?Q+xr8Us&q>rJ3IN7năU"8qR1&^:>?nZ42UX1g<,N)Erf=?1:?P+X6g%z=Iv<aZmS<'R-OrHATFU+d5Ib)b[ăU"TaZ)?&/92wc2&;^lMg%h3S'0xdY#vXd+X]Xj3?/_J_F)NrUOKG$%T9><%XH<0'IăU"k1S*U1&=-2hjP7d,YGjU93(U-[Eq4,KZ)r90C<0v7?_4++1&L=lTP\1.=6W86m%ăU"p(x1iR0,$3I1'T2tBk-8fU:\E>x0QX*\^(TAGE6bEr_h=q(;T3'7t7'BgO/2;MYăU"14fbM^k8_7(G.g'CjFO=\$YdYk$,6s+C=]T$2kMS;b^Ja?TbArf054Jv[oOnG1WăU"DeKRLVaie[)[5Qko9>s\Pq3FB(aiwdHU6NB*Q^1kvLe<>llZ)PsT%_bZ'.B5gjUăU"IPE)]4_tv+5'Ixh'emdZc;xc=r7mC5E*9BASn>7%jZo2o1=iOhy;^guI5$djV=ZăU"WVlTZS:9)9,dn)YPj2F9p+o-+*O;tdF*9\rx;f^-Y59uuBV[$V2b^?9sID9$U]XăU"Z5>,FI1PKraeO=iiVWO#_]j1)*_6wx6AmV$d,d;kk?T3:=z5:M'p\FZ43=X#(J7ăU"*[R?_-yNM2DK1'NLBq];\nC*FX#r_=Z&3*vdk,bBy+-AZ%y?oM3]c$.&JTk>S\păU"+kct)QS$^'1x)<<Jd6gqqCGpFw5oa(2'Quu^N[&'h7A(Xu-ftY2*eOI4O.*'B7)ăU"OK>Nfx9Q7;^Swgg-#v1e$IMJ4*3bH7L?6e39Z^Jr.96NsGP<I:z8]s?JN]'qqdWăU"Asu;dz]h.>BF=);F.y6Q>x&T4S>DLiQV31xR8i<[g%tsyAa44VZ>lm+CjP3te:4ăU"^CX#h+Go3&nV6D'73bX<(r-16>zYi<C2AML_,yV=$31/jJt:T^n*1+QalhSohLWăU"ba-9C'1H;vrCLw8mDMz_Scl>S*2L..f+c9h]3l/?tgRg=aV':t7J=QBYbCMnBuIăU"sPYSjUi.c&h\GGkd\z2_b5tR(n7MQ>ljM/P;GHEOJnT^:uUkL,T$XlmjAR\AY)zăU"hCXW3nnhd)\a6;]w=H-nFCPi</*1w':ngJFiF*GSybx8?1B,0]TXoC+yg$t_(1măU"0Yz\li3BG<mrcQvp(0N7ofj:8,U?iYcMs72X$l]62H;;7f1Jeb<5,j8/i8-RG.<ăU"Ci>TfWZ5+g>OcAFD7J*z0[0]gkgGxx)DEw^r(AU6H4s6>TV:RR>:/K>Bq?Kc/]WăU"u[C5pG2E+[6'3/MhV5sNxf<D1_pP:+taB6ASG9qm$x8BMF>Pd%+Ci.5s1G)($K2ăU"\#1]Mx1Mk_jgp\(xpT\]2T#Du<-WxqP<,W8qA[WeDU,sXkW8]W,orq:xwAWPSmDăU"*TByD_gJ,LS:py<BeSn[PL&if[He:GDDa)kD:ahw4fVJ:>QE'hMdEw_x/NH3POtăU"fg^oZk;GiwI9cQ?YVgH6k8P(0^avcL0Njro1\?$:V)gd../D>4%<IS'6ni['F+6ăU"J5WIA06)Ef-[jhUIBMQWQq=\xmIC+w[sz:4dU:(Ns?kB[_N$lcWr7?m.?J6s-/RăU"IFr=S)mSjO9;(JDt[)=a\%5:Bg8obgf.'/FPJtitmt5aN^PJsN#<=4_\#]w^pZ]ăU"$j^.1=Q)dMouNC%84Z..jFwHq^URSY^%*C'+Z;:5)39BHf>W$fEGZw7Zsw((QM]ăU"pXd8S*EdA(wj4t2uD9S%lI:d+#-FqF/O101HNI39^\paQP%EB&XPhsD>Cv56EjaăU"6*9X$EH(JHlel:kb2ROds0SC/JRj&QU?ui./=X<Ixvl/>k>OC7)j9$b9Yb/,#rwăU"*ZxM9:a,Eq3)/TkYskA>(8syZPgG<[G&o1RpB>Ul+[ldu%p()9%%%%-F%oPMOFbăU"<+($x(%(%i0%%%1%%%%lwn(i&tw%WSgf4x6%v)>jm5tM0]x=Uc./]O^c\kBLw3(ăU"iAUIe%.'?Xv<b-qWh=at;)Q.uUoPX=Q)W*nkanCVR(HMclfUXuE9M/?UB;+Z$:,ăU"eaXX(t>*;q,LUk3Rt-->pE6=lQ_QV#1#jcpFAJ3k#R0dmpS'aCTGZb0.QL8H]q[ăU"0u7:4.+rVeb>Yd=_jaDTesQ5j1'<ZuGE*u;]uhM=vM)-)G3\>JG,9e[lbuFgjx)ăU"_i$*A3$(aw&3G;6Y'jPy^3.G\9ce^[]H.Ysa-?78TjK$LN/67<YaN8/,kS'HoY6ăU"X,g;8a7LyOmGsKD88Gv]+Fg)ge'*N2r'Vo60>ofj8-Fd/rp259ArHlauF:6e0a,ăU"=lI3JaD'B>IQfUH(l9u7_v0xN(bIh1eHD$k6lL70D=MS&a3a(8U-BXjAJO;Al2%ăU"5NH_?W:X3b>3V#RAGP(6M)/mncY_PLF*SLK;&QiA3C6Rz]a6#=[7b.r'eksstdeăU")zurC7(Y0U90-NsQs[&q4v?T<uew%u+E=bs8d0dbRI#k.91[OrvJg)'eB)-))LxăU";$yXq/?.I*DuASan?*'h(=uo8b''DQ*]oQXgl1V)c5,b.+H(TXfPz#-6p^B3<NeăU"f+Zod9BWfGTjRw-V]01pljp7y/8HBk=B1UY=c#R\-+5$Wv7057'v#%t-J#kOJ86ăU"*6Zitr'+fAewd_OiI'OQ^4c8YBUCtnfNLM5V(FX9Pc.LsTR]hrC-GK;)OhsF]A+ăU"=h>xhi'?^LMPzi[ylDxQj5?QR.jJTw3'5YNtuPp$.Wc_7NUAj1vOVwr(XjrAH\AăU"J<8KdzHsR0tKTQ(ITa=S%L:IzfJBGN_RztW]qc&dZ:a<U7^IG6.NUrs:^-se7HDăU"JaF/7Ma-s*&akA>,3H5&(Hp[-i4Q\Z1+&1=RA77UQ_iOQ&6Pg?6uS1P5qtHzro7ăU"KBaOFZvUmcHc%uBu<<1uSTkwTeoP.lSrkGRe(Y+d&#Cw/>?,P'k,'T.#NYk?R0.ăU"%sax2GzDkdC5dv9U<99ZSs(sdERqksB98hq?oHv\yKkxRhrM]rxH.Jaud??&5rRăU"F$YT^'(0G2R7jl<dEXiiyO=E#2<Q[n;jwI:1C=-Yo_38h>3bu]9+H#a.o5+lkdxăU"8HrRnfTlPAr9Zeg<\_0Ic6.m$?:2p=&mth#st_BqfAiJLVsCa\vHq5'dL=con<-ăU"NWJ)z'u,up%()9%%%%-%/%PMFOE>,z&*+%%'7;%%%0%%%%lwni.uh'S[gfx&h'*ăU">S.m9Ml$kN]C]KRI-0;e77JTm+Un/R:AtEL)c#0pK*1IQ$VsRb(XdX\J?SE7K<dăU"9.J_VjB8\^,sdgnI)uHXbi8T1duZbpyuv4QBu$eqz%BQkvjC7)q#q6Z+Q\BOC*qăU"ZEQ.ici'paR?mauCLN^f:EC(1f=Ps'+Rf=H&N6vg=lj>.EoP1i'[wRcFtOsbhllăU"N]7<D/V22,rO1AaOxR?4fkLd$Xb8L+6,pApX.oQtZ>z49Eu)b_;-2QLA^r-V;O&ăU"uwVEPW4Vr1+DhG?+fP,d<ikBZ(ARR%90YSS<<DJ;n(T;tZ^sXqc6WWWCs8Y,QgbăU"y7tNx1]#YvgAmra*qXy-1NGkh0_L*ZrWh=BZ0UjZv?[:k\le\F(dLq;ICpprhmKăU"WSaJi+Jk'*_:fX8vYl&,9FhHKDxU+ui-Bhb\uj]nrXlK4d0PgIk9T;g=Ak/0%7hăU"1>O2TO^2k#i1l,^1Ygd8#0PXG[#3qAZ([22jT1.h8n\dEpPFc0eshFpU0)Ao,SOăU"&]$enVm/&\iIhhz3du97lA)]ek2c*q^0WN0^Icc'ahu>#,QDq#t&KsI56gD-79oăU"j($kC+P2Ix+nHIbt$%KtTbSSSV*I:k[AkvqGRWX*Rf9g1,Col+Ga/hudh9Iab[JăU"*gg9t&Uk/aIIJBK,>9?1ilP1eO=S2L?RM2Fw9[g:c9<RHTOd^h_t)f/hUpgQ]GgăU".'P)+oPImuaM9'Dt]kH/S'[Q7>+^o-+nV.Tx8bTbA^xtj1f*&%&cy^uL'XP,]AWăU"uLj9v+.-CUcgFN8u+X[HNe]WT%9j-Y#Ja0J65SfUuLTZfYPWIEU)%X$2p4s[jXGăU"j:',''vbTTOFA$YvQq.N&v&&OLq0LIh.TY2f%m]lggg.=6Cjr>-Os?<\C4W3PLVăU"jj1*#XZa,n&*k&232JGe3G=.b\e>C&6C*?*HnMzkINOdmc$D'RG$8Dg=2AQL'CbăU".,#I[Kb)Y3x*9PXX$I_Tu\#]mKNc_<?BFJ(/n$k1l'o9c&PLrY(q(Ap[z\3964kăU"3+p5(ifGh4^FwGAIwp3Tct4Ljw'sM.8*AfK'A1Wq]UeA;=p*uE70&F]\19vl+Z0ăU"4UOGbc-K$8n[:z<MW'_HHc<Ixrn)%IPu$F5>Dgz$uq>.k;a&'bM'4T_]N$b.AMBăU"PvZm-D[hiP,-a9nA4Y#D42Oq&2Yrq;&%N$hB*Dqg<F//wK*ccQc:eZRsnbRkF,4ăU"5N]dPSDa.+HXLbZVlmtHCWwMYIzyo0JdycqBd,SfP)(qX#q#['&;j<wpG#;%1;8ăU"jnOZe79V7<mf2H3&s;oNdy,S+Lgh(#-3ZF%-+^z+z/X58URk2Pl;)f$XK17JxnPăU"mlgMRz^5t8_Vb,?IhsIuL^m*=rAFfE/%MmD<ZB7\473J0SYE.</lFmA2wX%H$t$ăU"+n<\ldgX+>/lkdK%rZT<UFWgG)[G'I&dSP[V_GbY&+t8j?&rUaTqjE]xNCEg7)iăU"/a?47\7gBbpgo2uL=SpW8elEEq7texR6]h7skH$kkXmCWuM[Gg$Ac_6LKl,\$pfăEND SUBăSUB V2ăU"0g:Lm&Gb,>jkVz,_2u?-KrAfQgspZ5UPi:j?%Rb6DzD$E<J?=q?_cSOmjb6POmBăU":Gf[=i%4+j-(2.pd17\T[#:^KhjJKXVn,E#I-%-]ZanI1fLEL5#P<eEQ]n4t[O.ăU"$FF&(]1gR*)];8JXNMb4JS>Zsjt&/\7<><D2nJsLF;5VYmsQoDjQDcYvKWm>\NUăU"l#V5<ZMRjU#c(_*K8l%jaZ-i.ZZO^P>M+dFE0vGnf*O$HpI\&c>).kfUtQ,3cuSăU"B&2[(llR\JTgWCHu31#yB]-%^zqIF'm-hh-g6me^%>qd+uGPaj/nOq%bRDP;#ieăU"\xRe(##_,^HihE9?'I?:esSiji_n4E<'u[+kKu9lTWo5y>\#rtXX;SQEidaoF\băU"imX_di1h.8zpmM8#b,4h^.-='KRD2e9Gg^Xt<C=ng.I>gbsBrAetc>78Ftyb7SJăU"4q5X6MSOZSRpZF8%qRpNk8ZD>k*d8cgkNx%qH.*oG2jYkze'hj,'s^^qQo+K#9kăU",M?%5IFO3kQ'w,up%()9%('O-%/&JMF?)V&?&B(%%'#R%%%-%%%%qtlt%SnhsEfăU"fV:#Hl9O*X7[$tj)WVE;T/0M<d+$0mS[RQ1[yR0t.2S^m\34Uq#q%,+AZs$S_GYăU"qN?&CIV+x$3HN03&]yKQnx[)jZ]F%;cO7Ze[mGr_Xh>\H]uV$tZmWan$iF%j?V(ăU"iA.[r.%$I1>%AXgt.:RRn[afN29d#Jy9a+20It2D99]]&er1q%P*(9K%3Jq/yl[ăU"'8yC';)[S%4-e[pmz9)7,i+n*76'#J&<ZP<;(P).z/nzRW_fh69?d%%1_I.IqutăU"]Tj8J8A3'#&/YD^IJm.e>4(YVC\lWBe6S1?TInea]L.=,st'N>hW4W91*Qtx_u:ăU"ldRB1WE(.g7Q&X)0'MW/qDV$H+L)qqzt9[jXw91Vla0%qj;O)qZcJ[.qqV\%SKZăU"Pgn%?8$1KsG?H:6TaOh+%i:,GA%QL4BpeNxjyRgsEt/;zt>ws+Bu2xn1Ut,$V'răU"-'20.GmaNBdTO<B&?9rz6d7aTu8H3Kl+(1nvwK>ounb$ZX_u0$n9ktX2.r(2tpbăU"'2w(h-.T'i(1TsiCDL6,wPbP?.dnHH'7O#OE=>BXwen>3Y+0l5.OLL-I'LfZftAăU"IlS.>xkL%+Taf&t)Gmg8L9tcJ.;CnqO>xn(MlK'GSiu.>M%2xJ:AAEtgd7yx4lwăU"^HS]njwd&z-+Q60gz-U+l,)$8^GVrhx-gipmvtmb>M_9ITJCoe(B&W$_$hL^C%jăU"D^Nk5mc;Ol]jlT>BKET9,BtK[tBt.n?UwWXbBtnfCc#7jct=c%qGnQ'NVBE1j8eăU"'XDBef'LpDQJpNV<ZQqhoQmq;53q[4Nh2iEx+AKsW+3^jjp6ATv?d-xO^jO/+NsăU"SN]S<3G4=k,G?Zn0;Co&xK<$6ubAaR?/69+p/tZu)n#Z6b^G]QCmyg]0tZf8:mmăU"O_5%j5bLc6P?NnI\f44Ht[yxrYSy41YI(bnkQkoxu_)Lt$c<r:gtj5tq+s-t^lwăU"p<gSk.5mms[ZkV.mk_Kt<j?_T.T-Hdbk+WZgt;%;TkdHH>++QmmWUnKc_d63[:3ăU"8ZFV?<F]]+Ko*2Ch\6:XPh<>.*j?hSGNuo9?PJnQt+p5an1IQu>YE_l4q%.;.'[ăU"V)YV<Z?#]A3V6<Z?]dA3V<*Z?]A,Fu0u%p()/.%%O%C%&JMRFWl$&.-%%%%-%%%ăU"%-%%%%qtl%tSif%yEZ]%Z[E2%/up(%)9%'\O-%U_IFFtNvWvg#%%%v%)%%.%%%%ăU"v%znyz%Snhs?fJ*2#'V1Umv<%94ImW&+WEre[W)()%.NtN8'&=++e<n&kBjn?+^ăU"d/I<3Bl:^TY9$'6b5BJ&#)bB$WvV_$bIaCyZI2UJ-CXF4NYE-^Z^?ZKQRZ.F82=ăU"s#_g*hg311iL(Fw/7.eQudViQmxrtoG*pO>efYe*<,;fQDJg\;P5PBN#9Ifv]wRăU"3g_CcR,?Ex$0%up()#9%'OI-%1wA>Fn=/%(h%.%%v)%%%.%%%%vz%nyiS[nhsf\ăU"$V3;%U1jX])XVLeX0Cb\S^o'c9?5BGfa&AU9]KP)Yd:.4U&lkf+:4c9Qd]NbMj5ăU"tPJglZH4OB+%R<c#(2s^hT<\($2kCJ2>pXl8tR>6i$lu1f>m9>)'dmA:HUb[/hUăU"DPt=)d1v;Y2BbJuG3gW8.4OX>Sv_2Vd/AMWRQzZE3/r4H8[?t8091V:w6>cR+swăU"%up()#9%'OI-%ywS>FHL/7MS%.%%v)%%%.%%%%kn%qqzS[nhsfHJ*2RdU5TZCP'ăU"FbKIl(Z7/4:%0RIeWdmi0UNStZShgJ=g&3FFfu$Pu>SFYqJMnWm,[t\?P2<%5j&ăU"-AHx9E7(;HtRSMpyA9e(52[iKRWsc72v_lI[ihZ;;W+^9*Fs$MgzhV9rXfBOgAUăU"koldpW3A?[q)H*Acq3S..,,8du%p()9.%'O-L%iw>mFR:d*QW%%(%v)%%%.%%%%ăU"knq%qiSnRhsf$9*2=EI1j,s'8Ob$&+#J>STVK4AX#Ej8_vA+#6Y9kL]l\_J[5qoăU"iE>mqTHYoF]w%A<I#kw4^R04x_7P4:%6B2og3qKZCmU;v+L$g';FEkcCI3s$.x*ăU"6Ane6UVjCDWegDdu]UQd/vu4U/fF.f$z61S\;\ka][/<.6.^?mab&gDup%()9%(ăU"'O-%3Ow>F=#3&#&Y%%%&v)%%%.%%%#kgt'%zSnhjsf$*+6;U1djz?G4)E_Cfp^EăU"K(%G(?a+AKo(I00_:5e%kdvSfUpffX5T[n/;$6V,9MGY?U1##Y*^Z3f+^u&e+YSăU"k]Ym4M/4;xz$,=uEsGCvM&2&v0MSDoF&JSE:W,uiG'[kf'>G0X\DWXL<p$maq*văU"OdPEcF)BgF9T/(;]?B^k*xK&u%p()9.%'O-O%jw>=FKcF*C]%%(%v)%%%.%%%%kăU"gt&'iSnRhsf$0*2SU[1jR^JIOIE'1O2Ug/j+:j-IsDFMb=R*ePsc,0$GA%j6jo,ăU"Ml9dOl*k>o8'QPC#)M4QEZR6/KlVsIG]=k(Igxh7R.g],Tay)X7wG?9Ji0DupU%ăU"BgVsjnAA;(aMJIrJM[)=0_fHtj&OO\Le-<aett)HKRD2M8=J;XWA+3Cm1axgD%uăU"p()#9%'O#-%4x8>F47&MNz%7%%('%%%.%%%%uq%zxzS[nhsfHI*.O[e1eJEhXH'ăU"F]&_VO01T=G1b/8CYI6QdA-qQU>G>VO92*Y+3suv^wz_Vs233Q:Hk]qjO_#H81SăU"4:qBJxfdbnvh\<-Swp,3ga5N7m2%up()#9%'O#-%#x\>FDj2>H(%7%%('%%%.%%ăU"%%uq%zxiS[nhsfHI*.T[U9kZMr/<4,0$K_2Yjgbk+Y\ZXsOP:+gY7Ss-[,mGV(]ăU"_(GXYP6ucm3W8x)wAU&q9bwEA.aO_vh;a,nKuRVlxZW#.N3hwVn'x6v-2KJLL%uăU"p()#9%'OR-%2x&>F-33lxd%.%%v)%%%.%%%%xf&%jzS[nhsfcJ*2;dU5UJ*8/*KăU"&pl>%9:/%f)bG-+0AKG'3(OpUaRmF:?74_s[;wIa,AFPcgPYLhTf>a&=#%JrP45ăU"51:SSLmiloxZ?(^=-e0kZUP1&T].?Xrb5=bg#52S:mKt;Q8#hqr=;[8\S+Bk\>9ăU"tTUg'6bh0Z:WvMtY^g=t>WlT8]AZY$+*cQJ7y*5>hxH,%up()#9%'OR-%Gxn>FhăU"q3>Cf%.%%v)%%%.%%%%xf&%jiS[nhsf]JF3<%U1*ukRjpj2od%?Gl_Btb;-zA8'ăU"S*('mM$oM(8sa,$.zB3DbrM7/=eLFtn\7>ahf*BIDS?;Q+gN6U+4U$m0YU,T>k8ăU";;]-74vKHl.hkFH$K_Nh7KdNslIV6/R:/3jD*:uWrG?/N9khxpp=]bg'reF_;JFăU"ns=M8,qDfJHsWF-<>1#Gv=5/Hmd&5*up%()9%('O-%0s?MFj$g=k&q%%%&v)%%%ăU"0%%%%hnwh%qjzS[nhsf'JV/'[V5eJ#NQJxW%<5P*6G'tLFIXO(^PL-&z\V,t$.-ăU",EU<Y2Mah5Umj5-Tn8CeH:7a5[j29H+\S>A)CqcE#_xG.0L-DUW-0+G&Tlj,WclăU"U-R9Sb[Nm&HT.](D>N8mlT=A/ypZDJG%r]T;hwY^IF0HAt6yYDM3PlOg+RJWv6năU"c'%V9-u_cdW6$(G+.8RR&+pi#q6kxH%#up(%)9%'AO-%(^#MFEO6Jvn#%%%v%)%ăU"%0%%%%h%nwhq%jiSnmhsfJ7b/;e:5OJN,Sb1-HO_1=XDfeAtUU:;OGYEuKm+ar;ăU"GQF:AA6>#Ko,5'Je9eh3_$K(k(+no.*U=1$epY$1AeMX-PuupOglZlc=Tz5;q'KăU"+AqLJ3%Xi8JsiToupWoSv&Q8kyl,4z4CjC$)8V6V?Ed;inc>0cLXOLiV+'+b3g]ăU"/1rmdP-KLBlGBqcS4nr5BE)KG_Nk%Tup(%)9%'&O-%/_y>FiUEEPh#%%%v%)%%.ăU"%%%%t.gt'z%Snhs-fJV7AQU5UlJ8?;%.a(b$E'_W/84/OCR<aOXl)KaJk)>0kvdăU"=Q;5X\eb0#[(]q7']B.b(f^zZZo*%baaiI4q#J)gm>VsV'Gr<gWsComD/t[o.EoăU"V8CEX;a3Paw/enTv+^G4=0Us<SSRroH8Cl:?ynb;Tqnz^E8o25^lV>uLx$(g$YhăU"a-*4B;9ga'Ru,Ex$%(up(%)9%'&O-%K_y>FpIO02q#%%%v%)%%.%%%%t.gt'i%SăU"nhs*f$V3';U1j:RT68m8phIIN0?c3WSpl1mf;^Cos3+^&x(6d,gu*)R8o:U:X*NăU"2HynPt*GlQ4'1,*tJA^5/S0U11JLcN>q\?_F*,Sw)4UZs(FIJe6;T(Sq)#p#O_PăU"7A>[JV3f[?<3msU37lxuv(Sp=jbMrH[CPmNUlcrWxjSQookC]kC3;EfEbMB>Cq^ăU"sfG7FR<T0eOR*w&g<up%()9%('O-%2:x>F7Pdb>%q%%%'('%%%/%%%%rnsz%xzSăU"nmhsfI0*2OU71*JHAW6Mg%[U,0f)*;;U?8YRhR3pm>p;KPZ'+er)j0.(dbvA3f&ăU"_ln[+TR4Uw%&vqcL/(ZakW$cYeDIW1vxx%b<up%()9%('O-%2Lx>F>;Wfr%w%%%ăU"'('%%%/%%%%rnsz%xiSnmhsfI%V3euU5SZnFi&wwB1.l#=8gZ'P]Z1:VGH*$rP7ăU"5G^I.VFdK$%&*)dR2P8?V(M)I?p4hZupgRB(sn=v'tmTbv0?LZ;CbR=RgZl$dk%ăU"up()#9%'O#-%hy/>Frj6AAh%.%%v)%%%/%%%%nx(f%jz%Snhs-fJb/';e5*iY&'ăU"TA(-pAU-z9aJG(^c:bS^GHW=R,__G(6JWnCFDuhFWhQEHFU,H,35NsI4[A<#%*IăU"]NfIW7v[Db?<_RXj1vnX&E$lVFcb:HrOzlP5]qGq,4JjN9w'q=Ke9tw'j_f5)r4ăU"Za\dNGSW0DNNCF'qF/mRHFG;/hMBnhQWA4k5SXe+o07JF>hlxa%&up(%)9%'&O-ăU"%z_y>FnBC(ze#%%%v%)%%/%%%%n.xf%j%iSnh4sf$V+3;U1[jbE*2o31R'V]%$)ăU"?c36*#OpU_%tlZ+)Z/B2_AYOg:E3BJ%94/ie.mkDnVImKHtO#DBQbc>AFZ62Nh)ăU"ao-7BJ\/Lfe^Q]MM:]2*qG_'4'sKM4Z-WUQhu3P:499uG#$04Mp]nSWMq,wel-găU",013nEBApQrwHX/'-r.0s]7P80SFR38%(-l#Qu%p()9.%'O-O%O0MpF^.9)6<,%ăU"%%)?%%%1%%%%lwn(i&tw%pSitk'>'F&=#^797#i$3Mma%_Q/,AJ4;RTIQ$PO'=săU"Q*8hPNrIni)sIewed$Pi,Q+^epI+t,zjnE\RVGEeQEfP,(csK8sc,f>_btP#wW/ăU"(zMVToPUlG^HC+F$.wG>(;k-WL\)d5ai8T3-fvL\vLdwuNwvl?m]HT+#Zf^FuwDăU"NVmmud?5vW/FE2,a\Z0*1f;oxZTuZ1l1z-QQ/d\E),m)izqhR<hF7os)<iu>NVgăU"(UUmWZ%EKWgx%gP8tocYM\bow3(XK9bM[HYF>MDHB[9sFGHaC6L/,W;:wTMn2OHăU".iRSK0b?eM4nUpFo5fO\YZB5TD(xoQD??^(Oq9H39.jrS&we-:ac+)*2dE\=moXăU"CGbi.:TVS_*S^Xmr(d>YP9*Fd6JG=7xQp2AjwD5A.TiR=$ul1d]MdR0+V;GJG+lăU"h169[rXBEc7TFnOo'_UT*?8jO:8W]Fx:$:hSVRKet^onR;#^)gI+AQSopY7Qo1uăU"y8oY5n^9MTihfC9&+.pm3I134Tj+2'.WWGQ_0#C29M/)[UHU=V$*KY(*UrVvw)4ăU"XK<apmQs-CB)N&0n%vC0Y[%'6;B&F^EP6:MODQVOl%3$ZRJ%C9\?0#\oRd9Tz[]ăU"*9A1<'#I8OCzKzI#2gDRPt\][3Ao5R[mRQ]+Bj>7.0XnPE-sBXt#55pQ)UJ>>C_ăU";pn4vRc>W+.98MX=4ttk\;)7>r:>0U1jnhErG>*W.ZCmUzyAn+ZY.g_f8G;dh[*ăU"4gf-&CLyj7E>jnS0r9OStfe<LC=r'Z?M6vBYPq44QeSg<ut2t8wTc?FkRA,#tJeăU"<8Tb?Be0\i-rjwJ1JWDv$XAF#(<ByP;Ol3W\R;O4oMpUCR.T]?eA)PIse*K4Ic(ăU"WID)rX?$+)PC1PL(zi*Tgh74\.H3.#z;G2X\?mk)cefC/nWA'-#_SEN8eBF\'XmăU"=Y96s0?<r=\;Inbp;UONG8+fD#OwN'#o5b^A)G#pBPVyM5s>E?o<N&)-X46AgH]ăU"^:KM&;DnXDK/mC[*_K.E,nMvg;*:S=JH_(#p\hwbL%GA-v2*X7BS3FP58%>RuTIăU"3lKm)AaYS8H7KtMQ\A7)4wLEP2.X:q4j58\t#cfAd4#d)ZOft5H(Ky>cHYVn+ERăU"6j2N-U^n9bsIrv?gM+hGi\<5jrP[\*Qkv?xoYxhC-9JlHXOTB3qgTA6%/&kFstVăU")dN\w<VJ)#LAY,M#>bQS+K[O[p18aPOy*s;^;Ud,dUu<Q&;c2CeSel&l;>'[,1căU"u%WH-Wr'f,]_)8]cha^Dpyis#j=f**3O9t/m6RV$-j9FBCz(oa[6tuguhk)'lxKăU"r-PLTMjsxY:l,kIyM+53TV$^k>Xf-B<8>Bf\u5n<,TNptHnF8Tx=g,G,ECN'3S:ăU"FD9fdX.tiCG$?ySUMD_'UJ/u\*jF]UreN\W2u0&k&P?wu3xcoD9A>j?q2s[rYYDăU"R4,q?1=PY^^gQ=a^u(sdX?WU;1qMVGCkVh'EVoeiAI[%HLHn#'5-v$DdpT_JR3RăU"W=K](k2Am-cG(C;xFu</w]XN\T^U&P_xMd+#;sGiWJ35KaU/<mh-(ATKi*f9#TTăU"kbl%s\1HB3C=3Jk\&*QBrV5h,j[-8LT]ob_Ml%c9<hAUm:Oag[[\2-ceynt$2&_ăU"jBWKUx0mb1JxM_FiUu\P-r\oY<=n=bUkEl?LbQxpQg5+q1J9u:dd/v/ul.uMUyoăU"9YX9ftUpmb#^xX\32M%7:lIweenNSMg2wZrAS:q,A+-HR)cekoQoIm^FUT+:^j0ăU"MjuWZfr'a8:3tjF\.aaouf[DWV<XhE<ukJ;W*Nt^DjS9+C9Z5YW:BRrbGQE/C/_ăU"ZJtTBp?oSK4mA=,L[ldBqcaP1>U9P=TpvNfBHGUq$?49WHiB]ZV/ZC;P?C3\6wtăU"3ZOIkK4'bPT9U/sm#G0C;=2ozcB:wXSMutlMdFCHpJCu(9euR04<TdZiTgX%\XQăU"Xv>vnxsCrGVL*jsq#RmXvG5u>/P9Es>fJi[3yILL;M(>onhb^xtD*=]3AoU_Q\jăU"aBDrPC^p'ZA17vPCqtRm?OUs2nBLQY9l%gTw&ic9=ALoCS*46h4mKi24AJbr4MpăU"0J?Bzz1i8s(&<a9#D(KB;L+kcC&BIj7'*S>]hSQ[Oj]g35&o29Q2J3\1Ed_D_<VăU"3Yquqi[8>C_=qWQi4.^sSDFZ=ZSG$R]#7u$P^CT%raz\8meS;42+([r0h6>7cx_ăU"43ab.B'lj&aYv0PKp(&uUoL&V/rnhLK/GIMN=U=#ASck4J+1j)(;1LLG(fG%>jgăU"iRIib/728S(gUQ-Z+^nv5U)tuR:d*4n(uA]L$ZR[lwj^.r,Izb=UMl#Y)dE?kiHăU"[D)6&?8_l=\T+5/jP,m;_qQY)*+ACY&#=3#aDFJ:/vijW*FW;*,zkXN/Ap6>;_$ăU".(]Zcb'r\up%()9%('O-%25y>F:3ysG&h%%%&v)%%%/%%%%nqtf%izSnmhsfJ7băU"/;ep5UZ(-)-2iF-2i)7.C9X8G:p5\8'GW*=<<)8>5dA.fUNX=$Fe+avISLsa>4<ăU"N;=&%*94zEi:#o*Pi:B4/[ki*9HAofCLI-nf0KlgBHF)J<T8Z1rZjoC]CAgQbmpăU"8fRVv4<B16vB#Z\G;W&>f+tB721aZb_TmDEu_XbXv$_0[kwTODU8Ly*5h-xH-u%ăU"p()9.%'O-L%Gy>#FO>Q)/h%%(%v)%%%/%%%%nqt%fiiS[nhsfBJV/R[e5eJ.NgyăU"jPzM)t^r$c_1+-00_^/NB46Ks3%CJ,-KRP'Wemg%VD$P>eB>eovGHAD';?UD8koăU"WlZp%p2sQ1THiNMLskktZq_/o_EPAQZr4]Oc-WY-L<UWqpVq#IKiz$s>sA]ONhAăU"*OM1Fq)X&mf.'*Z)89DBXt=sN1;7p#q4=,_aQ0jWRc?Q58jdG-%up()#9%'OI-%ăU"VyS>F]4.hbf%.%%v)%%%/%%%%uf%nsyz%Snhs-fJV3AQe5T3Z&G*780<CYQC=O+ăU"LYi+To5oG+8p%k\)08H%fG1WaXFQ?^=rB(irYN0>Of+(M?+s'hqq#:jg;Xj^;<&ăU"5V&StGVqVkHT4_CxqS1T&Gp5Tp#q?nrJ8$6j#z'J9Q'W-m3pSwb#A\F9l&U:d(TăU")&JlsoL*\=7M8rrnhWTAXWqA>P,Fs;L_F-tx+u%p()9.%'O-L%fy>(FE0f*Ff%%ăU"(%v)%%%/%%%%ufn%syiS[nhsf]JV3;%U1evC4[MmiQ_i&1,/>]:ov_7C6+%X/T>ăU"I8o1f(I\ZE<[2IW*jU:1%f>vo4h2iFD(\7\,QLf=]Bbkb$6A\4[4P;5'v9)Z?:<ăU">Q/j,IIxmPjjnf^sgY[=kLO9Bt0/y;0FpsjufS*^Vy*w^SCd-dwu6(so\(;NkNeăU":K2$A#],r>hqeHFJo<_du&#+up%()/%%%%%%3\GMF()fvG%,%%%%,%%%%/%%%%găU"wzx%miSi%fyEZ%V[E2%/up(%)/%%#%%%H)GMF)&fvG,%%%%,%%%%/%%%%g%wzxmăU"%zSif%yEZV%[E2/%up()%/%%%I%%$xS>F.s&R>,%%%%,%%%%+%%%%hi%Sify%EXăU"YU%E2/u%p()9%%'%-L%$x>%Fuln('2%%+%('%%%+%%%%hiS[nhsfBIV/OdU1UJtăU".:RBl:Fjajv5X6MVozV'j7CI3?e_uJQEWr/P\Kp2jey>-QC;2Ku1hX1^COnI295ăU"[e9KBTR,.fl,SoggnJJj/<vHwcu8H<wHw6bnFKvlSFq9dn'H*up%()/%%%%%%/(ăU"#MFAaphl%,%%%%,%%%%0%%%%hnwh%qjiS%ifyE%Z^WE%2/up%()/%%%%%%0s?MFăU"Aaphl%,%%%%,%%%%0%%%%hnwh%qjzS%ifyE%Z^WE%2/up%()/%%%%%%2Ux>F3.săU"R>%,%%%%,%%%%+%%%%hzSi%fyEX%YUE2%/up(%)9%'#%-%UDx>FhZSNq0[%%%(%ăU"'%%+%%%%h%zSnhssfI:(.OU1kTZ6>#6a][:]i'F+SY;/a3[?2,7-6Cd75pYlF9FăU"qpT<S&(=OVyOMJya8mKVNoo1U]S'zE2pT1Q6C=ERUEVWn=qNm8Huhl+82N>VeKjăU"dO[u'w$d%^%up%()/%%%%%%3jw>FAaphl%,%%%%,%%%%.%%%#kgt'%iSif%yEZ^ăU"%WE2/%up()%/%%%R%%Ow/>Fap(hl,%%%%,%%%%.%%%%kg(t'zS%ifyE%Z^WE%2/ăU"up%()/%%%%%%2iw>FAaphl%,%%%%,%%%%.%%%%knqq%iSif%yEZ^%WE2/%up()%ăU"/%%%I%%yw/>Fap(hl,%%%%,%%%%.%%%%kn%qqzS%ifyE%Z^WE%2/up%()/%%%%%ăU"%2Gy>FAaphl%,%%%%,%%%%/%%%%nqtf%iiSi%fyEZ%^WE2%/up(%)/%%#%%%5DyăU">Fa.phl,%%%%,%%%%/%%%%n%qtfi%zSif%yEZ^%WE2/%up()%/%%%#%%zy/>FapăU"(hl,%%%%,%%%%/%%%%nx(f%ji%Sify%EZ^W%E2/u%p()/%%%%%I%hy>(Faph&l,ăU"%%%%,%%%%/%%%%nxf&%jzS%ifyE%Z^WE%2/up%()/%%%%%%3[y>FAaphl%,%%%%ăU",%%%%.%%%%qnsj%iSif%yEZ^%WE2/%up()%9%'%R-%[yS>F9)6G0e%.%%v)%%%.ăU"%%%%qn%sjiS[nhsf\$V/<%U1jZkChcVG*Pge:1pgv)ASg39Yp]%.^mUC<>TWeLpăU"Vec#okE*\g1BlVfVn3X.eH4('g4RmYuDNLg'NX&]3sH(^=AYPg<$)LW;#^[\:8-ăU"dhSqb/G=)X?jn5*%fc8t\-u]$=*^6zk_2TVk12mpun?7Qb\$EQEw5:&BtHtlT,kăU"s*H?VgSUbJwg%Tup(%)/%%[%%%FDy>Fa.phl,%%%%,%%%%.%%%%q%nsjz%Sify%ăU"EZ^W%E2/u%p()9%%'%-O%Fy>FFcOs(:c%%(%v)%%%.%%%%qns%jzSnRhsf$'*2'ăU"Vd1j,)L'b+^mW&0;/\ej+[W)(UIK<XUCRoo9[o/])8N?$QmIIak_j&a$CLYDjsHăU"J1cJ7rVhI8Z5/d7)\[[GnQ=#0taxfY0F3AZ(OfuZ+bIYh&GK:$.R.g;l84MvQtBăU"k?GA6*5Tv$F4$2f-5U,ysSgKimc,u_7ddfM^-QkRIR+lU\ARRx'H0up%()/%%%%ăU"%%2ux>F3.sR>%,%%%%,%%%%+%%%%riSi%fyEX%YUE2%/up(%)9%'#%-%u)x>FBCăU"#d<-[%%%(%'%%+%%%%r%iSnhssfI*(.OU9bSZx)Z/+)B78B>rFqb%EC_Opm*HSlăU"C#FM;)GIi:NU8a))kP6;JOEX_gCi+,g0Ie0kf(;iDiWw1Hay*BNA,TyFZ$6fVutăU"$hf9^UZd[aIAw,L78u%p()/%%%%%L%Lx>OF.sR%>,%%%%,%%%%/%%%%rns%zxiSăU"%ifyE%XYUE%2/up%()/%%%%%%2:x>F3.sR>%,%%%%,%%%%/%%%%rnsz%xzSi%fyăU"EX%YUE2%/up(%)/%%#%%%g_x>F.)sR>,%%%%,%%%%+%%%%r%zSif%yEXY%UE2/%ăU"up()%9%'%I-%gxA>F)>5---%7%%('%%%+%%%%rz%Snhs?fI*.AOe1T*ZFL3;/0ZăU"-k]YC3SV01TG=[?8(YI6C[G)02lG9&uXrAV%,]99#-MaznXt,gc/I&=/o%O?f7săU"147f<31Ut=>1tu7oDvHHp3W,cw(-bCnd2'$%up%()/%%%%%%1Ky>FAaphl%,%%%ăU"%,%%%%.%%%#tgt'%iSif%yEZ^%WE2/%up()%/%%%#%%/y/>Fap(hl,%%%%,%%%%ăU".%%%%tg(t'zS%ifyE%Z^WE%2/up%()/%%%%%%2fy>FAaphl%,%%%%,%%%%/%%%%ăU"ufns%yiSi%fyEZ%^WE2%/up(%)/%%#%%%VDy>Fa.phl,%%%%,%%%%/%%%%u%fnsăU"y%zSif%yEZ^%WE2/%up()%/%%%[%%g3/?Fap(hl,%%%%,%%%%-%%%%uh&'iSi%făU"yEZ%^WE2%/up(%)9%'%%-%g$3?F8XO?Kd#%%%v%)%%-%%%%u(h'iS[nhsf\$V3;ăU"%U1jb%EWWVU\*p5[t]ohguD1AH?C&'eA9]K\ZuH[)weHPUgW*N2HYnHQRB:ML%săU"RRjX-AJj5jb>3_RdM&]?l.<[GCRO:7#zT2r1pQ3$U+gQ_=1QoAw+jYA_gX=hA_oăU"GxJdKGErAUYSP5..YKu_E'$Sl6LExKfb*NL9A6aCMNpGh9'/H8md_2%up()%/%%ăU"%m%%q2/?Fap(hl,%%%%,%%%%-%%%%uh&'zSi%fyEZ%^WE2%/up(%)9%'[%-%q*2ăU"?F7A8^)f#%%%v%)%%-%%%%u(h'zS[nhsfb$*2;#e1j,%ukojBF51_,;976j#I(BăU"9ff<KKUKc;me:g9ZwPq1CFPifZX5[(uOvllSCK3;6o-tN(pqj+3'Y/vJ+I\V2GbăU"Xip*.125<g>,%ySB,S#efUK#fk10Zwzsau4Khf=N9#b?e_e_3>L\XRe64piVJbpăU"UFaWj^VNu'Ht\/DY/v=tZ:W;f1Z:w&n<up%()/%%%%%%1#x>F3.sR>%,%%%%,%%ăU"%%.%%%%uqzx%iSif%yEXY%UE2/%up()%/%%%#%%4xS>F.s&R>,%%%%,%%%%.%%%ăU"%uq%zxzS%ifyE%XYUE%2/up%()/%%%%%%21w>FAaphl%,%%%%,%%%%.%%%%vznyăU"%iSif%yEZ^%WE2/%up()%/%%%I%%Bw/>Fap(hl,%%%%,%%%%.%%%%vz%nyzS%ifăU"yE%Z^WE%2/up%()/%%%%%%3Gx>FAaphl%,%%%%,%%%%.%%%.xf%j%iSif%yEZ^%ăU"WE2/%up()%/%%%R%%2x/>Fap(hl,%%%%,%%%%.%%%%xf&%jzS%ifyE%Z^WE%2/uăU"p%()/%%%%%%3;y>FAaphl%,%%%%,%%%%.%%%.yj'y%iSif%yEZ^%WE2/%up()%9ăU"%'%R-%;ye>FZM4o<b%.%%v)%%%.%%%%yj&'yiS[nhsf]Jb3;.U1Ova4eqVeJ,ESăEND SUBăSUB V3ăU";rCa*6QQA.g3_r]a)b:55E\6gR->N]%Q^ivn$=d^>xrUJ&HDT%2MFO+P9Lf?o-1ăU"/uEJ)wb->:G3VJ-B'ZLIJZ>c(oE6>/(3K$wJ1TenB)(AfD7A(0L=4gOu#4\ZV;HăU"#4x;E41ab?+wGO-&okBD>IpI/*Fce3Q5jd'G,up%()/%%%%%%3&y>FAaphl%,%%ăU"%%,%%%%.%%%.yj'y%zSif%yEZ^%WE2/%up()%9%'%R-%&yA>F0i1Ld]%.%%v)%%ăU"%.%%%%yj&'yzS[nhsf]JV/;mU9?j(\G*tWK,5h3(F?1NMjg[2(BPGI;_ZRYbO]LăU")(-w/=*VsR6xZf757WVXrJ4PIAmsxiNNh_zVSD+(taF>oQb=VAq%'5qI:2x<2S\ăU"d*V'g,vCX<YsXY\LF1m8K<qbcO:l3.5ukOtUCG=GaqXF8rn:p>=7QOB>ZARlB4ZăU"T/vN&.up&%'9%9%%%%-L%uJMsFH67&2#8%(%2m%%%1%%%%%%%%%&%E%%%%%%%%%ăU"l#wni&%twpS%gfxu%p&'9%%9%%[%-%oCPMF\2VS1]%0%%c%L%%1%%%%%%%%%&%%ăU"E%%%%j8%%%lwn(i&tw%VSgf%xup&%'9%9%%%%-F%oPMOFb<+($x(%(%i0%%%1%%ăU"%%%%%%%&%E#%%%v%C%%l#wni&%twWS%gfxu%p&'9%%9%%#%-%%(PMFEN>,z*[+%ăU"%7%;%%0%%%%%%%%%&%%E%%(%IG%%%lwn#iuh'%Sgfx%up&'%9%9%%'%-%/&JMF?ăU")V&?&B(%%'#R%%%-%%%%%%%%%%%E%7%%wM%%%qt%ltSn%hsup%&'9%%/%%%.%%&ăU"J\MFWl)$.-%%%%-%%%%-%%%%%%%%%&%%E%%%&fQ%%%qtlt%Sify%up&'%9%9%%'ăU"%-%3UIFFQtvWv&g%%%&v)%%%.%%%%%%%%%%%E%7%%>Q%%%vz%nyzS%nhsu%p&'9ăU"%%9%'#%-%1)w>FnD=%(h#%%%v%)%%.%%%%%%%%%%%%E%%(%SR%%%vzn%yiSn%hsăU"up%&'9%%9%'%I-%ywS>FHL/7MS%.%%v)%%%.%%%%%%%%%%%%E%%%%iS%%%knqq%ăU"zSnh%sup&%'9%9%%'%-L%iw>mFR:d*QW%%(%v)%%%.%%%%%%%%%%%E[%%%h%S%%ăU"k%nqqi%Snhs%up&'%9%9%%'%-%3Ow>F=#3&#&Y%%%&v)%%%.%%%%%%%%%%%E%.%ăU"%mT%%%kg(t'zS%nhsu%p&'9%%9%'[%-%j_w>FKTcFC]#%%%v%)%%.%%%%%%%%%%ăU"%%E%%%%tU%%%kgt&'iSn%hsup%&'9%%9%'%#-%4x8>F47&MNz%7%%('%%%.%%%%ăU"%%%%%%%%E%%%%)V%%%uqzx%zSnh%sup&%'9%9%%'%-I%#x>RFDj>)H(%%+%('%%ăU"%.%%%%%%%%%%%E#%%%O%V%%u%qzxi%Snhs%up&'%9%9%%'%-%32x>FR-3lx&d%%ăU"%&v)%%%.%%%%%%%%%%%E%%%%%W%%%xf&%jzS%nhsu%p&'9%%9%'[%-%G_x>FhQqăU">Cf#%%%v%)%%.%%%%%%%%%%%%E%%+%5W%#%xf%%jiSn%hsup%&'9%%9%'%7-%s?ăU"\MF$g5=kq%.%%v)%%%0%%%%%%%%%%%%E%%%&IX%%%hnwh%qjzS%nhsu%p&'9%%9ăU"%'#%-%(^#MFEO6Jvn#%%%v%)%%0%%%%%%%%%%%%E%%%%jY%%%hnw%hqji%Snhs%ăU"up&'%9%9%%'%-%1/y>FfiEEP&h%%%&v)%%%.%%%%%%%%%%%E%%%%2Z%%%tg(t'zăU"S%nhsu%p&'9%%9%'%%-%K_y>FpIO02q#%%%v%)%%.%%%%%%%%%%%%E%%+%FZ%%%ăU"tgt&'iSn%hsup%&'9%%9%'%I-%:x&>FPd'b>q%7%%('%%%/%%%%%%%%%%%%E%%%ăU"&e[%%%rnsz%xzSn%hsup%&'9%%9%'%I-%Lxe>F;W'frw%7%%('%%%/%%%%%%%%%ăU"%%%E%%%%/\%%%rnsz%xiSn%hsup%&'9%%9%'%#-%hy/>Frj6AAh%.%%v)%%%/%%ăU"%%%%%%%%%%E%%%&S\%%#nxf%%jzSn%hsup%&'9%%9%'%#-%zyn>FnC.(ze%.%%văU")%%%/%%%%%%%%%%%%E%%%%j]%%#nxf%%jiSn%hsup%&'9%%9%'%R-%O0eMF^.39ăU"6<,%%%)?%%%1%%%%%%%%%&%%E%%%%(^%%%lwni&&twp#Sit'%up&'%9%9%%'%-%ăU"25y>F:3ysG&h%%%&v)%%%/%%%%%%%%%%%E%.%%ie%%%nq%tfiz%Snhs%up&'%9%ăU"9%%'%-%2Gy>FIO>Q/&h%%%&v)%%%/%%%%%%%%%%%E%.%%*f%%%nq%tfii%Snhs%ăU"up&'%9%9%%'%-%2Vy>F*]4hb&f%%%&v)%%%/%%%%%%%%%%%E%%%%Ag%%%uf%nsyăU"z%Snhs%up&'%9%9%%'%-%2fy>F\E0fF&f%%%&v)%%%/%%%%%%%%%%%E%7%%Tg%%ăU"%uf%nsyi%Snhs%up&'%9%/%%%%%%3\GMF()fvG%,%%%%,%%%%/%%%%%%%%%&%E%ăU".%%ih%%%gw%zxmi%Sify%up&'%9%/%%%%%%2HGMF()fvG%,%%%%,%%%%/%%%%%%ăU"%%%&%E%7%%Bh%%%gw%zxmz%Sify%up&'%9%/%%%%%%2$x>F3.sR>%,%%%%,%%%%ăU"+%%%%%%%%%&%E%7%%qh%%%hi%Sify%up&'%9%9%%'%-%2$x>F%uln'&2%%%'('%ăU"%%+%%%%%%%%%%%E%%%%Hi%%%hi%Snhs%up&'%9%/%%%%%%/(#MFAaphl%,%%%%,ăU"%%%%0%%%%%%%%%&%E%.%%yi%%%hn%whqj%iSif%yup&%'9%/%%%%%F%s?M(FaphăU"&l,%%%%,%%%%0%%%%%%%%%&%E[%%%S%i%%h%nwhq%jzSi%fyup%&'9%%/%%%I%%ăU"UxS>F.s&R>,%%%%,%%%%+%%%%%%%%%&%%E%%%%/j%%%hzSi%fyup%&'9%%9%'%IăU"-%Uxe>FhS6Nq0%7%%('%%%+%%%%%%%%%%%%E%%%%Zj%%%hzSn%hsup%&'9%%/%%ăU"%R%%jw/>Fap(hl,%%%%,%%%%.%%%%%%%%%&%%E%%%'3j%%#kgt'%iSif%yup&%'ăU"9%/%%%%%O%Ow>(Faph&l,%%%%,%%%%.%%%%%%%%%&%E[%%%a%j%%k.gt'z%SifyăU"%up&'%9%/%%%%%%2iw>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%;k%%%kn%qqăU"iS%ifyu%p&'9%%/%%#%%%yDw>Fa.phl,%%%%,%%%%.%%%%%%%%%&%%E%%%%ik%%ăU"%knq%qzSi%fyup%&'9%%/%%%I%%Gy/>Fap(hl,%%%%,%%%%/%%%%%%%%%&%%E%%ăU"%&Ak%%%nqtf%iiSi%fyup%&'9%%/%%%I%%5y/>Fap(hl,%%%%,%%%%/%%%%%%%%ăU"%&%%E%%%&pk%%%nqtf%izSi%fyup%&'9%%/%%%#%%zy/>Fap(hl,%%%%,%%%%/%ăU"%%%%%%%%&%%E%%%'Ik%%#nxf%%jiSi%fyup%&'9%%/%%%#%%hy/>Fap(hl,%%%%ăU",%%%%/%%%%%%%%%&%%E%%%'xk%%#nxf%%jzSi%fyup%&'9%%/%%%R%%[y/>Fap(ăU"hl,%%%%,%%%%.%%%%%%%%%&%%E%%%%Sl%%%qnsj%iSif%yup&%'9%9%%'%-O%[yăU">jF9)G*0e%%(%v)%%%.%%%%%%%%%%%E#%%%+%l%%q%nsji%Snhs%up&'%9%/%%%ăU"%%%3Fy>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%>m%%%qn%sjzS%ifyu%p&'9ăU"%%9%'[%-%F_y>FcCOs:c#%%%v%)%%.%%%%%%%%%%%%E%%%%lm%%%qns%jzSn%hsăU"up%&'9%%/%%%I%%uxS>F.s&R>,%%%%,%%%%+%%%%%%%%%&%%E%%%%'n%%%riSi%ăU"fyup%&'9%%9%'%I-%ux&>FB#/d<-%7%%('%%%+%%%%%%%%%%%%E%%%%Rn%%%riSăU"n%hsup%&'9%%/%%%I%%LxS>F.s&R>,%%%%,%%%%/%%%%%%%%%&%%E%%%'(n%%%răU"nsz%xiSi%fyup%&'9%%/%%%I%%:xS>F.s&R>,%%%%,%%%%/%%%%%%%%%&%%E%%%ăU"'Wn%%%rnsz%xzSi%fyup%&'9%%/%%%I%%gxS>F.s&R>,%%%%,%%%%+%%%%%%%%%ăU"&%%E%%%%2o%%%rzSi%fyup%&'9%%9%'%I-%gxA>F)>5---%7%%('%%%+%%%%%%%ăU"%%%%%E%%%%]o%%%rzSn%hsup%&'9%%/%%%#%%Ky/>Fap(hl,%%%%,%%%%.%%%%%ăU"%%%%&%%E%%%'3o%%#tgt'%iSif%yup&%'9%/%%%%%I%/y>(Faph&l,%%%%,%%%%ăU".%%%%%%%%%&%E[%%%a%o%%t.gt'z%Sify%up&'%9%/%%%%%%2fy>FAaphl%,%%%ăU"%,%%%%/%%%%%%%%%&%E%%%%;p%%%uf%nsyi%Sify%up&'%9%/%%%%%%2Vy>FAapăU"hl%,%%%%,%%%%/%%%%%%%%%&%E%%%%jp%%%uf%nsyz%Sify%up&'%9%/%%%%%%4ăU"g3?FAaphl%,%%%%,%%%%-%%%%%%%%%&%E%.%%Cp%%%uh&'iSi%fyup%&'9%%9%'ăU"%[-%g38?F8O6?Kd%.%%v)%%%-%%%%%%%%%%%%E%%%&pp%%.uh'i%Snhs%up&'%9ăU"%/%%%%%%6q2?FAaphl%,%%%%,%%%%-%%%%%%%%%&%E%.%%+q%%%uh&'zSi%fyupăU"%&'9%%9%'%m-%q2A?F78.^)f%.%%v)%%%-%%%%%%%%%%%%E%%%&Xq%%.uh'z%SnăU"hs%up&'%9%/%%%%%%1#x>F3.sR>%,%%%%,%%%%.%%%%%%%%%&%E%%%%kr%%%uq%ăU"zxiS%ifyu%p&'9%%/%%%%%%4_x>F.)sR>,%%%%,%%%%.%%%%%%%%%&%%E%%(%CrăU"%%%uqz%xzSi%fyup%&'9%%/%%%I%%1w/>Fap(hl,%%%%,%%%%.%%%%%%%%%&%%EăU"%%%&qr%%%vzny%iSif%yup&%'9%/%%%%%L%Bw>(Faph&l,%%%%,%%%%.%%%%%%%ăU"%%&%E[%%%I%r%%v%znyz%Sify%up&'%9%/%%%%%%3Gx>FAaphl%,%%%%,%%%%.%ăU"%%%%%%%%&%E%7%%wr%%%xf&%jiS%ifyu%p&'9%%/%%[%%%2Dx>Fa.phl,%%%%,%ăU"%%%.%%%%%%%%%&%%E%%%%Qs%#%xf%%jzSi%fyup%&'9%%/%%%R%%;y/>Fap(hl,ăU"%%%%,%%%%.%%%%%%%%%&%%E%%%&)s%%.yj'y%iSif%yup&%'9%9%%'%-O%;y>:FăU"ZMo*<b%%(%v)%%%.%%%%%%%%%%%E#%%%W%s%%y(j'yi%Snhs%up&'%9%/%%%%%%ăU"3&y>FAaphl%,%%%%,%%%%.%%%%%%%%%&%E%%%%gt%%%yj&'yzS%ifyu%p&'9%%9ăU"%'[%-%&)y>F0JiLd]#%%%v%)%%.%%%%%%%%%%%%E%%(%?t%#%yj'%yzSn%hsup%ăU"*+%%%%%n%7n%24%%%Ju%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=200AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMarhsall Drew-Brook            LANDSCAPE GENERATOR            www.globalserve.net/~brent/tech12-13-96 (22:00)       QB, QBasic, PDS        688  45409    LAND.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"LAND.ZIP",4^6:Z&=33824:?STRING$(50,177);ăU"%up()%9%%%[-%&)%QF[r6rv/'7%%B*%%%-%%%%qf%siSg7fx.y2,>je^5Kl[=d%ăU"lzXm)>PLr9xXGCQlQCoO'xBSMTg^i=zP\XUzftNXV,J#T\bJy4d;Nr5EE_E><usăU"K[j1-$lAKaP1Od3>fA[hR#Lx?,dP444XCr6P?19Bjqe?1B^YUtXZgdnqN$NeL,[ăU"+P2:s2Bg5be',/dl5/MV;+qj$^gi,Un;azikIe6-X/[7RULSOF>_w%cChSWP2C)ăU"QIRH_tHk(&RG&#4nmH(IYg52><:=GU$gfd]8=:Z*9/3K[RG'IW;nY<8i:.#wT^IăU"j;5]x/p/Baqt[vUlRWibfS/\W43S(Qj6R3d0+F#efZ:I[(%\QC0<V_:^X4u/WK5ăU"%_PO+R?Cnv.l#?_zG>omfs=2g$+*l;YO($u*7fS)#H>uR_ycQ%pP7FGFjF&?7V&ăU"].:W><xTK&wp^6#[Ag-eW9kP[_W?%W0aDs6>mX4d(1lL<uo19c*MFQM(.0w5?DqăU"js(hOFSo2#$ZJQGp%\AmxO7f7O(^vW7GT*e&s12]U=*#eo0A[tREiRdcQv.a<hcăU"LtB_%tMM-a_3yP5&?../N&9)GnUuY%Iw]mj%21H94B,YAT/D?FHrlU&J,A5MP*yăU"NnmK<Q57[<cM3[xRV$9kFa^H#q/k[w/v/5C)y$pw5+A>LE2Ed[GHo>GX3teXQ['ăU";mdNA,4o9Pf\IERoi(OmGo'(6^R9sD*vbc]gPEWVvsS+j7J?(vjN:I]^hAU6]uOăU",tSmZb\.W?/K3a8#ywJ9*0-I0#RH+:8Ci+a(Ph41Nml&Ylc$]'8%up%()9%%%%-ăU"%+r'QFkXn5P%R%%%%f%%%%0%%%%rfpj%htrS#gfyBFmGTw+yItw9AnEpsnGHN%păU"nQ&,#.07&BwpoOwZK_Ca[(5R(:lA*jA&%%up()%/%%%d%%k&[QF,2+Th[%%%%[%ăU"%%%0%%%%qf%siht%rSif+y18%9F517+54&%c26%37[&F5K3%o]6;7<(]8%%24&săU"sno\'ds]1,1F+F1(%9F51%+qFFu%p()9%%%%-1%$zQLFm:*)p4%%%%\'%%%0%%%ăU"%ufq%jyyj%Sify,4;l3%'U%(W)C04Th2hN[KvI1H=k,G0dpn-uuI4W45ry<7bHjăU"n_^Ie_Q6gCZf;#,dg/df3<IX?hf4[C'J)Y2?EKw&bVpN<C]LqZ>)3bqYu:9FXk0ăU"4</<S1,rj[S/F%<up(%)9%%#%-%'''QF%l*cZi%b%%%'s%%-%%%%q%fsiS[ify%ăU"5h$JA<RD_db'/QB&eRP$WBa.-W&;h9i6:*4LP^jW%IW-5&$iI7KLIL6#K.+_.E-ăU"Q).-UQ&pE6mEiuRJGNtmBzPyt%DIZl6ilagychyJNpXbbGNqYLi:a,xFotjXu_WăU"xXv.c*xHord.xs?X>wrre.>w?0Qx7ot<*xaNoP*oxFoXlNw(e>nMwviff9xarf<ăU")9x/t,$QNVtZ2RXv3e64RTvH8$iXg^ZOHrG[p)2;a%UsBUak'xIPxacCA9_jlJyăU"s(vK'-SS%'vU/%m]NSkponx,8qcEl7X3jZvspQmTgh$l.mMObwN7unHC:(X/iP(ăU"bO8F9741Y,aZkpZltpUjFj><tYf<gv:je<UDn/qQm2&up=Q9%%sdAlW497NPkZ(ăU"kqtYYv-&k:FQ+T:W%mxCudmA4GnrWyYpcwq/a(Z[S+o*C:p(*gD'fLC+]o6z:(săU"A7KmZkYv,H7Nf'D]/NOorF)CSR(7clukRXHtZPq2&a+Cc>3)X1,/M-9E/idmcM\ăU"6Fj:T\jTPFLrqAbvM,2%VS/V9.&%(Q<F'\C+$?J#;2&f-2K5Qin$]*3<+Q;_)d#ăU"&'?tRl50FiiP\3(W-^\A^9d+7u/%T\F))SOvrdg0M\Z3DG=RE5nY5SH-L-]uz%?ăU"Ch/iOX>rNI8>ziPG^(mKFZmW7ow[X[C-2)2%7Q2U7C',CfeNs7$p%*8u3qk>DfpăU"<26p04QK?U^/:iQn%0O2Pzj^1[pn%*8p$<&qh8>#,7F)X,/nM-EnoYGr^s,8sqtăU"q[DKYZ<tjAKPigIK=b/;,OrFK)mOD$]&AuFo\pZ3(Y-^/CvWvbQ27E(*'A'/Z*'ăU"Hu8SC2aiip\?DnV=o6+RNFWEJgQ$<8Ofnh/-&Ys0UaH8WW/*?.yMK#I(L]Nl6D#ăU"U6Q.V.e*5'KRr8OZ.p<MJd)o8WqKl[DTp*P4Q<A0B.e#&=4P\HCAi+:BTCHuW0.ăU"XF68=H=c8K:4Oj5M'&Ot3^fb$YAjNvU<Vp&hH%W)43:I%T\F)SI%09f6SU*:9u?ăU"?<Dt&+,^91c:7+&?h\/[,$]NU^kZDnWyuYpWq>9Yvz_HzfqRz%_VB9?4][-UK85ăU"IW*:WuYjdhqfplDfH;42'f/FH9u5g-$:z'3%e.v]kM6ulKq1[GZJPR#S/VfJ/iQăU"8GOnh//l9aOJq#c.5lY&/n.368(Q>j)fX8/&C,f8/Fbr:IJ>NK#9jzJpQLr#m0>ăU"55-0?I'+&/b4Sp9/7uNCG>rZqKm9uZv17T^FEd//bOJ[b]K9+k^<4nM2\Dtpp\+ăU"8%i)fbOj5QAW%#c8.aq:B[P7.kcV^[1;4't\Qj%\+F)V&?_A(MPH=R.jZ7n_fYPăU"upMrI%QS/R9n7k%?h)/l9waP9+]M&jJz_Q.>ncNKPH3'U0RE:a/[5V9;3mSJ9EiăU"7.Pu>A60OZq^\zmhTF$2V#ZF.QEg0[Ud)O;G?*%cLq/]P&HJ2f:T\(^eKZiVM'HăU"9O5O$/1?/#-ZElYIg'[C76^]&LTq:ZZQKt0(9DLQ=*9+4S1;/EH(_bb?_d.siGZăU"[PuYf_lR'1j5;a5%,)*OR#9ho4_uh\fgu=/606SK^mM4uHY-ee,'HDR2'[Y<<]5ăU"S^'r4c60Oq:ZU(v/GvS2g([V93=RZ*D'dfy],lHkSZ,898KFm:]Lp&s,MUG-fl.ăU"5K/?//a%)[SeoHE^^[<rCjEY&+.MU-,E0.1:.'O,=4DPHNsn[%l,Ulrkz^/MZG4ăU"#<&j?ht^Q#kU,/<ST\F])f&Oh3_q[ht'M.BW#0Mh8K#j4jYLTe56Sr%7q(Q^3P.ăU"9S1&_caUhL85+h<%q.kWpPY&O/)8OjCcU1%lf,lulT&H8QiY&S(tYWpCM'[/H&OăU"jCAs8Y(KL'[4_kIRr-9uG:TGY(kK?.i7#3,)Sv[.;&%?nY+'cEHE2rg*,jIwdHsăU"c50)7=]6h;n(&:3(%:b]UTT];]<iB1rSLl,plPu[3W*\TQ_4(GKXR2(DSHc+R*UăU"PRJZ*'gXfY9#QpF3^k'd$A=Td6zf:TY(Xc68W/(^QVGOj5g)G?Q'J5)'l#fw3+năU"cbcC=Tc6zc:(I7)1EZ1KD([V'9?4S4N9i1swd7rrRr-u2yQ.KoozZDlKtZs.;F'ăU"03I2/aC)e:/\0+.u6[gjxN5ce.aQq^7CAI.r?h=%+20[/?A/a)e17/0.Vb#Y1EpăU"<eM6.W*7n.:6hL9([/(NOv42='Ovs,'\7+^>pqYM.W*C?.>G1>S\%2[I?q,OrJqăU"K7(fBTXqowjT8yY4<>&ilhH:&FC:aO.jCkH-9c1wla9\1V>]uqoBH^6lNqy=n&*ăU"hHHl&/0(iQz%8:b1K\T9/)SS(PF?Xuev^lMNhpRZhH*d((%S:b1')OT>IiHPz0<ăU"'AV\\bbW&pl\u[H:(+.j26SK5nN)Zf;OQN+%\FUUlOx_1;/D+NBD/;t1^o7>#p&ăU"PZ8%p%F*8AKM(INe/>6QvGOj5g)G?n&K__?yR,ScLl\gjBXC*]j_d.QqXjiNV/făU"fg([Ud)?U)gbQ\zXmUhP:IY<pDXq$owH8^aKZ[U0c7,A:z)z^Ig()/c%zX#mh3kăU"l#(kt2ee.VT7Q6>N$(S/=69?**QW(,8MjNpiULB+IlqM$iYfR(aC51;9s%,CIA8ăU"/0d+NAY#q*8bn.Z81<t5+lpqM.WD*\TnNWn%*FV:OO7v4G6_/D+B>DYAKV%pt%WăU"lZ4>k]uA600-.CK4OUDI%;H?/p%BB4]+XzhQ.sp5\4>K>J]BTc^6^q6cJzKd=*'ăU"d]:^'%0GE#,t]m9NlucV8kAgj-:CHkpDH>+._Y-%nOLN%T%U5q(Z%nYg1%Na;)/ăU"R3Ag.O4<S.^p\]BTCujGqAZ846?&K?h/pd%##YTU%Q'WqZ4>:KJMI?XuY<-<pLjăU"&e,UCC'Bw?(IR9^D?l%'sAw[NUpsqzfGCHkkZZZIrt%.^(5[%Q1;/D+MXcOt7O=ăU"$<lXtZCFT;Ta=bcDT^D.C5F1;gO#2-Ua^fA\*Zkqv*YX_0w6p&fbQk]&SWh*r%1ăU",/P%id4_U4C1-0t+/r&hnLz,.lqMNThr\ZlIt5O/A-u%&5b]lDO$1aqjPD.c9hxăU"vU:4XKQrNI>aR7]5a1;M9&w,</')M(\.w&e1>N2uGHR0_JcMAT^f66KXcE0]9/wăU",6)D'lfA:X?b/ii;RuWcV8W9tK&lb\uwWj#i4-Wp\%4CYg+'-d:>&]wMR9.G,=QăU"C%mbJ]O7m:ZWltSr8Wt_oBTf6=z[tk*EyI=6pYK&0__?(7&urz*wtw^GJO%%+?dăU"codzT$e8$IXitMrq7;$6n%RK'uM;)ON>&sy*xc<hQrszMA(6k(d-?8?Klb=jABUăU"CXuyqQn\DuIt\-9N5%'2gG?k,ON>IW0S'jpeSP28B')w%^u^EZ(,Y'O^iJwhmBZăU"$u1u+WVjRh^A:RD/&\,l)Dg*gfhzoPh'U^J;%1I#rsDj_0XsoF3n^?rNu[t\17jăU"&?)D'lfA:X?R;cQi.9.(,i3FYZ*:eI4Mnkz8+p3&XMKOd#fu?pn-z.8YOZa'Ei9ăU"IG,=sa'%IuqS'L>#K?mMpjMj_<&]tKKkpH>X:7(&n*R9%(,&0UrPPd0S?zug#VOăU":tFLeS-u5QUMHUU)_HF8TMPD;.DTom]fckW)X3P2e&YgnY[^%zXA\J+ekUhaiwkăU"ve/Fq9Gxcf^pxc^Jab[iWjqp1lXt-3_I?IMRcy/ckrzwn$^O%sNY4QZUKK[d4R6ăU"dcDhbrUjY$KurNYt2r9Z&KE</=L.,Q.]^<:ZP&r4OrPseM5We10]%YdY&zy?oW8ăU"D+>jKru5.\D.Rf9iOX7s0)M^(fo9c9o0sTf*c]L+n<8h8<8>\zjf/1+M60QrZm\ăU"eDDtU1\$.?UDPv081.:Q$9[%d:]?B3I)*AT54kT0d<%]eDijzEc&:e+[wFdB9I*ăU"uy$#do<Aj,vMQNgjG8>+XDG5&?/6[:DAF=uOd.D0aW\*-;g%O,S%Jn';=asa.*HăU"/OPG-:S3M:e:awKuOP.^*P%p9%=8oXHb\;Dk.KJsIkD</f*g6//[Ryf7xx_e&.%ăU"HnP>i-r)Rm9+t:>$t7(&f=/%&r=m/.N&eo2dI^'Md,N+[44*0K]=Lu]Tfqz9rQbăU".ND[[Rd2k<YF/_U.KsgfM68YmIti&*gUH'9q)I#d3\,=&SqPs,GDqXxuG5cqbj$ăU"2Lu1i<PCZ7DDF^GZ'\4AN^9j'kJLPljyP(>b2uuk*uBJa/i\dtn;&nhQX\$dVS.ăU"^>?w_5Taj;4dZ[qGm?vGR=r8cu]s?#p.9-^9AC&aD2mc)jV8BK9u)Nkdt,O?tCkăU"c[veTm'MGBFwDjfmS,3GsYS.W7;iSYg\4Iu.6&6Q6BMEkPsav;T.v/Y^%Q7Q%m8ăU"=8ePQ'Jm$Fmkl-H>KXzMQbFW.=q[.>q4z7&&RcZ>&Un4XYriz1u\?jjrklv)OfkăU")7urGLtT2x)\p5+rM]<KsL)ReV^Vm,>8CBHO]J-w;*T;$t:5eIRfM&Ot&wb?f,TăU"Z(Ady;iK:4GpPKV+KH)r^lF%25*(/0JGsM#[3($hXdIX?5S]F;9uO$OOdqP<KmyăU"kneLdvqlqj*kLT$n-riV$]if:.t5R,Neez*'^?9BO-_QfR-$ZRhSuaeZ]\&&d'=ăU"aiB9:hRJGeM0M&H]P+-Cg[kM(,\DX42k][OPoTJ.2r]tGBJ^Ip'c_K:ZdSo(Yh'ăU":>nFCPPQ9^P]Ytr[fq,MepX4o5auw.5do;/E>P&.4T.?r#S'[wuu_lF/P8;#01BăU"T.jRi5i,*1_Y=bwmSJn:T0.-2Y3C^_G-(;zYjusp,ER'bYBeE:7Yj3;r4Z3uY3NăU"3rMPdLf$MmN$la>Qqq=h&<$CmEm$_Bj3mOt5kjbb#4&MV17Oh-F=qJ*1H)zZGbYăU"&F/nuNYO#9SEAW_rC0:0fSOY0+;H6QoGjF]xT)Qn70H/%=tM$R,_fpKA4GwDe%NăU"Fp?;G<NPianmao4C;qZ/4oCJM[$T(Dx[TOB)t/v1-m6w2JbsF>oHkrAr>%ij%H%ăU"lOpJ:Ass/:]:l)M#b*eikoe(_3+[i0m(<%#PO$I::g\*UY^3DAcN9:HHt(7-/5SăU"cUOKm5_oY:7Eja7nJM4hUR%*7ZzjTsjp:':9_l2bFbDTINiF%10f7p,aH$[YvzqăU"/pw#&nYQ,u);l1zCpBpY:E].)r47#vTRFc?o];g-?)D9$DWw,-OgE;(E&r(\^AYăU"#3dM/=^,Fb7l4H>^K[DN<nsoDae\l6:^N<TCXPMj1W8^rFCO%%k9E[u>]6T,GKgăU"Rpu_eB%LZTU^seRL(iRn.LuEE\(F+%/oU>>U'ZW()4#tcZR%QVC-(:-*2.d>/L8ăU"w)n+pW^+GN7EG]sH8,L8sJ/vD,5=nA#-c3iu(QMSHPDddKkSj:jV,k_sjm87uG;ăU"frc,EdK<h=Bw)]uqg(ehO$<&EHp+u[?G(IwVMdts[6=>tN'YpFw'LWK9nj44nqbăU"6MMgei7K(NXLZ',nTLZg6S.:,JfZ2W<TiW)sCesnudDP^CpjZA3sWe0&y\i$4>DăU"4RqL)'aC>3C+n87$W=hQ>.1S1Ra5>;:vCn+wfb92%;h'hZq&S/p4]iq76c%u/uqăU"ihnFP\>P$Y57j\4o^j:r-xIm&tp[Y#k?VLsS:*w31;Z38W<e^[AJ9=XOH;lQ\45ăU"-kJa_ioc%7'oGS5'FP?S/8$)F7CV/5Kf3?7m/)RD8IZ'SZNOE#gie<:[SqTx4kdăU"d4P&#XK)e0,P-%)F\LEZbOp)Zl\6VVi=:[_T_ZbV_SmLc[]m*K1mSi481N=*MkSăU"e#A:F[m>*+j)5:]jlNXT_-&(*3'*,Y>_5S3>N8e%_*$Qe;ODCqoV/)F#w_xJ\IDăU"le=/3<[9HY3%E9v3>#8/&oVtT*d$u)(H4iIw-dQUS-[.\k*HB3Wc>;'7[.kTB9RăU"hG,8qFT-cJt<tp;DM%yNmqzfNR.wxE$-bCNiiJ<TYLq=uVcgcTgK<=cf[y+PKMdăU"%7p;f.f7P)uTabTXF?nujd2zpRIs3)99a:+IZ7D:zNeRN><j48-0sRxb;]Zg+#RăU";yj(RrKZdB7Zh(U#2SYH&O]Oj=B3p_xs\mWaA:Kk^fL^xtRb:Ts%xcH6+0Wf'O[ăU"gF=Jl-3;(cU&wOtj=f&kXX2vdmPf=+5/U854N\u7FiTN%\J(ki+g/gl]f$$&qPnăU"u>+*&.mI0%-o$k.p+j\R5t64&m_\*wzVtPIE+4y1OM*I17GgP[pfR7+P5E,:dG\ăU"\'-3imw^ZV*LEh.CWMB1Q%_T>=W5N0ai?gt>^O&\mCEeEg0#VKKunZ^$.hBArt;ăU"IJ_W=I3I'*U<-$c=IZbrrZ/hm;_(Vps*$yz)j/KDTkE>fvgo*z^coOui00K$&GHăU"F'5kwbSW=j_Ip?%fr$EO9,L45sER'MD_25IIt[ip:N8<OmgTC)j5c]8\9WFrF=YăU"fhKTPMB:44+jq.f9rtrRB,YaW[,p5I=Lb,]:?b+9]U?v(_UT'\m5Df)F5MDIhk;ăU"F8n/jIO#;'%DJ:'=:rpWc34Ka_9h*ayg5qvN-Bkp?U[EYs\#/<<:.4Mg+XLN?UjăU"[i:0Pz')NMpuN>cU1fVAX6DSr0qOToT(dfZ135;_tpcS0+[m:0OrtQW?Iaoh6bRăU"Mo%(nnp$G)V1(tk/nL\]Uh%t*tY/=TQm,_$OG_PiZqf)uxi2)a2*Iks?O+h_%):ăU"&-oK:Q.2c#C^Rh#FCqjk4l+?W/\kSv+5]KG#9y34jaP634TDkSP:uqSouPYJVi8ăU"JaKj:L3_r$UlrcePJS0<_kHW.Yd<nR2j:oYbKGz.<SMI(Q24gRY;pM3J6BC_PW^ăU"ns?U*wLfNUSoNMUOT41^j/fc?5anmj<KGI+]G?a3[xNN8^$0[,*V;?L6PPL6LLNăU"6Fc0PnjR5%4BG/?\#*u'D?g$]efKOTMm(IV$=#a1ex/rYduP=c:ooiL[m8F,ID,ăU"4eU>1$0\WR;#?GPF:i\%_\*T*H:Jxd-M-P/gd#r]4[/xP8<5KFpH]dBo6ONXW*răU"U;M.gtAjt^rfCV9nRl^$F9\12xz6%L$&u/ZC\&]P_-h1kVtE#N<zPkV%$:W\kPpăU"LusB_,mC]aG=mIIWNZ:AAhOKJ)^-apTIS#zi[5m7pTU;6-Nd[y.-Ad7no7;9-%băU"w*WAX=&O(8;XjLm=VUeRJTKsiB;<H<?_svXcch9N.8l5gwn?nnlLXmJBR4vkS5uăU"SJBCp,&q?1(&Zd[-j_eEspIdV,4$Gqlb:/82-/+)l>,R,okQc9:&nMSfhLFn:mJăU"B&v[]E,NAG\.ju=D=_OG5&Q3B1EWBZtjvwin6*9*VqGQhoif-'X;y)8??rnp(&năU"uWaQc'WE:=TqdiREpY)eg%VpSFsLKa:Xf5o*eTk&JEL8dU&3R,:]:9hnebX=3m4ăU">bm:I5.*3GL]J>:+XPzITPfCj:)FPu'6vu]J#R0JAWE$[q#V/-J%DF8-1d&br>FăU"t/Ii$#)Kk$K'_.F9\]Z#YcKDD[a.lhwk[ta?n)EfN:e&K:&bi-GV<iT6Ce,1y;căU"pD]U^)I]e3ZB(4TjQ>A$n)mZ&<FjLJnu0#XNnj,1=,6-bH_$O3*EIA+aM6yNS$;ăU"yPSw1TTRgu%dy,KcW%LvF*t&4,3d&[\d9pfd10J*B,l0m87zHcD3N#F\PdCbA6uăU"3Jjh6?$'E'SDh*Cn1d7sonPIA6GfE.1muKK6M>lum^nk^eK5Wm705g:pSFhLvB+ăU"PPr$=\SW$J*J$oMr/p#vX%Gme_tY:luT77TuiOww<4FhCIca?G7%TQe^tF\NhT]ăU"gH84)ai<N7r#on[qjDsRr1^pf4wH3q\uJN82TIMVh48*BXd',wf0/TsU2E.j+)iăU"Rqo)<%^+M'uTUPpbWHv$O1ccn,#N&LSn,F=')L:VVvq4)E44P?5T6P$i*r.WvL]ăU"F_&<EQDi11\\+4&CBDG%=b7uy#sbkb?mr$bu';csWX%sBAU,+X1gt6f2?6,/yMvăU"Pf><g;sPO&F2?KDs3LBdDBip<l'S0df7=JQR=f-0sb-P4/8af%^e'78XO'ZHiniăU"$mkDlmjdjV%B=A=N=:<<h<//)<0VN2t=HtTL3R\TIvyDKWLj9*g=q:O<J0iPaf#ăU"Ie)q39jDeqml;.fjX>0S(=8cXbE1yvO;S9HDEelCs.sPfoN=jD>9\9X1w)\F#&*ăU"$s.(7&tC_ghFji0gom5LXK5:M9RRp,$dJebH*b_?3Z'bRmc0&q%=cJuMBg)G^,7ăU"9TmClb8ou6%sD4L%+fm+drX?#k$1?HFjtNK<g.q)-6K\_ZYzS[FMEDTAqrv#5AuăU"0R&pwPQ1\bZL8)=u14tGc*]9PtbF<c8%#+5$BA.aWGiP.]Fspt>Dc??1)r,p[>năU"h$K=\UH(D0L#9Fi+#(3_u7Rf*NNr7&^7;nM?qDPiPxVewH3)l]e;j6g<i9*H(zwăU"OcTj/UZ_2REK#b<XwC&+VQ^[W#u*=<&xhl/bbd?adV\ilbNoV6,n1H:YvI?^eUtăU"L60*ULbR.KaZKFcgUsqmFe%mNmgAJ;kj0]0gLuu0roM3D*^LL24^U--e'^tcv2oăU"+H4D[JD,[BxXI'e=tG=]?%wttog.xPnnIIdNDT.nUZZ:6jo8H84K9+GVlb/q,B4ăU"stW#2B>auPss3mwAcPQToh5Qf:7a)J<QP,L?t-6oSp:<XQiD4=I-,?RfG9Uay#%ăU"7l3U3sC_8/f9/#ABpUhZOq:f\h.v&p#\=W#td:dd]fp6]b+s5Br=I<s5Ep3+e08ăU"bDEM(*kB<$a?KH'l:J>m<2&,rn/)9'dZfWhFg:X(o6ofBNj$fM$Sb6uq2cQ#V-tăU"Fg%m/Te2/fN0_E8;wsA+5f37O,7d*af=+3c4TxR8\SHJoDnbZnDd(cmV\cl**j'ăU"]d$-y(4Tq_>%p0s=/Bj]eM<KgdQW6Sn-KT=?[?C?WpUMk^l)W%>LoMF;O9vLUKGăU"C\IoTuDB1:*%DBbBMe#oJeupWZ&0e>Lz\XD<+2ds\>&Pglvv#M-R*eX<.hpoym'ăU"OsT.1hg_a0B#uFGVT#Z'ANUzo8xXjC,Hpr:&zv347=a>LH/_v>M7222;G'ib:5QăU"<o;A'*Uss'W/:rhWc#S;l2t6.Y/GrBn*Y<rRylhboH%&KWjN_EMF%WQrV%?GaK+ăU"m)JdY_h*;-NLr:Z+m14lhaj3T4hY*of0%;-9u-*0>8F'e*iKg1/'hGA&WzWKX37ăU"t(,Ml7_I1H<%#4Ca1u]1Hp(V&3uJGQ$.Tl%8tCvAV.+unh8_AbON)0*v_^4KU]UăU"$kEZc/>>]%3hbZf-0TZA-Kzbf%)n9mu8bQg?%lDEV?sVJtTQ,N(f]Iq1LLRfwvxăU"P].nRK18ycNMuYdaN9+ZsV]VLh[Pw0,0ukC2w\[1*DNH(?o,N9u8w.<J0Y:%9smăU":b8O6Y^7IPx%ogsQO9ZEthQ#At,n,je5F8e[wQn3Yd5Lhl:.4%[B;u-5VK9FtSKăU"sBDtntRI<Sru^A_Gy%L.+$%-B9k5YXa<0IKQGntP(c]=I$iBItrChZ3<$VHq1rOăU"LQV^,%o*N,/<?*'B6OIXl9dbRX$TB7J^'_2w&?%m7kz:KDTJ_jM/^\02[UL$d*[ăU"0UvsZXkc5c.=tYu5,LttNNmuim'MskK*c''xW)VITw=Y<fi,)>=vEgLMz]5U^tvăU"D>2hgM\=]]J]cS\_][?8bJkLeb<&>8mZXWmAW'A']l&G;R?dj?-TOfx.2d(j9KsăU"jx?6W*s:7Wt>u'LC0?,U[*8?-MAemNtt/e:#bFb?T\P>9Vv3XbMD(Bz.EKi8QaMăU"?<qE6f3t/El*->3Q;3hMh<==&]bY#%BB$WtGP+EcY9Ogr(F409/_);rEA0pcEp+ăU"*qc+J)4D/UHEIz%cf:h^+_.5xd86zYOunGAOCRh8unM\6>h:tPPadb1Vs0nnTdHăU"e9YjS#4ql-^)pPmNFlcgQM1DOu7+Sxzj_m+av4b0ik];tuA[lN]\uc??)D+_NoQăU"Xg97sirx]^:oK,P;Dw_:ZcZMx?bn)3\M2/NG(&3'Lj_1\]Vl8DicO<$jC/g9(=5ăU"qzcF0bQNpuzDbzT5e:m>V^kX&I8.4MRlEER+aq0g0t(IP4z*VLMtcun&imN_r04ăU">q\(r[gQqTI6Um'E+,AAnW?+bbx+Jo^fAe5h<d-*,0T1Lh'FN5.>wqkup[+A<$+ăU"$&)lCg*4T%8n]W7<JrnH9I>J37W[BjR&c)TL*AMDuV'Pq#U4Y]v.:CbRor2X8DNăU"NmZf]2sRg6XB:q#TQ_Tq]q<M]\^\n^4jo^k4U>j4R*QoV,7ZlZtyc?.:mn3vso,ăU"nwq6Jei3N9:;DIo.uRs7Q6'(%[_AyeY]>lRmK/X[mj[iFc1Wu1mHpL\**%.N>yiăU"WE*tLbm#fB^aGwLfIBm_gXbYs9XQvtwagvv'%#HWFEkCuw5bc[HrjWei6g\CSp[ăU"<ilmYZNU'41>FD=%>eoX8&:ctnri^bZl#m3Q9z(9VG73/GlMTPSoP?);Odl+W;DăU"pBZnrf&KGc)\83%&IbO_DM5RpD'GF%AHmF%NZY6t-FFTqTen9FY9pUFt\oB2oQaăU"JrrLlVVVNOh3UGU1+[DE3ZC7)\<rC\C5erKHKqVHl-=[P2d2g$o0L7PN414c;2uăU"*&LAaJaq4_cXOgg&V5h3lhp];[?p-MH/[MnW=p1kF?GMwS0#p/&1?V*O[r)JIKCăU"J.^P2:W[(Pz/+YQNbr:FeaFV5Cx%B#>CTo1f+HY'he?5fRHup^WpW&_]dlsj-KlăU"Xa$ndFx8Q*'Oqr)x'B4=;d5EQqG/o+<UEn&/?vbOPpV_A7.lN]A3:k=.uOh>^huăU"A$Y$f(IwM(90=O3R8_l.W]o1$oM?K::q:KU-tFEFq2\'#X(gOIh,ikS.oacG[fWăU"]yhgh%%K<hV5i4D+$U()PNW?0u#[/W?t[;o)k#A)dWgBerWE%U>VHKVhL>PTjidăU".CMV+XabcB-QV44N<pU[(D]uuF=7lpW=4O\OTr8H1aydVTqF#=8<&Yv*[j][DPfăU"5cCTrH-*V[]YW>uHauhO$BA9=de]Z#SSh\p/<gFC?e6gaMC*XUq8ud:098n6dmNăU"ae;9[lYH&K(.3eT0%aH[bIAX9BYr18^1ti9mn<cj$G?A-Opm/i*+EX+P]6r17j2ăU"g_?;y,<fgC33u+J8$:E9\0aM>b._oOEtrQ]HT)ZCIME;;2%9H-EV4ouSeLA&j5LăU"6Z*/AOc<k;1-P3nb.e<gp;-LP0oRb+6f1Td:_Ocn-Fbc+Yup1#H/Sr>0re#kVh.ăU"*Yp9dK63Ct6ATs.c5&VM=LmSe(tWrssq[.,f,H.?lm/rMZ%tkRY[ZJy/2l<E8RtăU"dT/aG,t5hCo(hcoPm0)$hJ#RqXt#kC0(\/mX;jbTRL^s8E]&Dt]F]Cfce$gLG=#ăU"\?qeX<'c^.C?)DIoE*$LlO**n^gATNowvy2jkKW5x/r[1^x'k^&W%n0JNE4?ueqăU"]6']17$]wRqNiWxcXhN4;S?k5fq+/'^0gdawWfWAK_3L]N/8WE10RVdHKd0%D1(ăU":e^dv3HK%B/g0=c<9X6[,B&9UtQ3(8s[<]7LE37(d:L]N.hW?ooosri+:pu]BM]ăEND SUBăSUB V2ăU"9M9rr=&DQ=$n4'TCALU5?uiaR&U&lboCPnLF+'\h*C$r'LY\\S'&Wuxn_4UBe+AăU"E>(kw'kmk7nQBGlOz(H#LZ&W:0NVp\r/Ok;Y]a*l.3H[qh;1)SKFMp=B:8K0R:păU"szqM[z&4qU)oS]&1yQmCWuTH,pGC#1zI'[Rpc1a&Z^;U2Qfrk\ZHlFQ(FhS-GahăU"F9&Dm#5kEED42XR)oq-G;a25WihoTCfc6QEx^T;u&A<Qnd-/rE1p1rU[*e+%4+8ăU"/)>ckeMl:*QV]WrxeOF4*s<PYuuv2P?9?Y'Yb])VT[:sD+0cfQv^jsoP%w^)wl&ăU"W>#85=2)r5M>rxo#U?GOf2#PT2]3?(%Uk^ptO[=p+aSBn5a.JStfV#YX[_.jnH5ăU"=_/=BEzjC3W%:e%Zn/DG=$E*2+G#xxtnUcLkC[?[Jx[rP;wD;+<9BMkU]b>Ae]7ăU"L*pvmWC,0:V-;DJS4jO*40n#n<40DF1V(dL.d=pCnQQPSjDb(AD(<YClLEC8Mh%ăU"PRx>O)HsFUi(VFC&8wBdHC:OR7&auUo/ZtUtg2Np3O16x6OtN5uM65unFN<>/pfăU"gM$[=5:*gTjQ^7rBn]:f]T44YS1XUgm8hBKV99iT4WE(4CgKnbV89,u2V_0[$aQăU"o8k28udRc7.XA)tbytFT\-?rUXk?_28o*hf.c=6D:$ioC:<-aTYs%L;+FqC(>k=ăU"2nQlO61gt6/k%nVO;*u[0Z^kFccRJ\JyJ]L?t#bJydZQCJ_Aj1E3C?dTzkPjV\QăU"_o2O+2=;E]eqwhH,uWiOK#$cs+6mQ7=3>NgDeCp?g'\?H?/%TNj;K:IX-CZj%b3ăU"qbdZxL08$^DOdWhC\Eg4qs)Tee]EQdF-EgM;.z<?aeA10R$M#RvXAT/\^,Q1uoEăU"j;OZ=1d'>vYT;j1YA2B:Cpe]Vh$cJL4/CH-*I*#^f_;Z+6-8P)K0>PJiAQ]evh0ăU"sOLksn=a1T5G+x7p/3F.D^0%vNeuP>c_RQFFngqGM8G;Z%$W;(;'AhU11w]L^I$ăU"D,Mvg3^H3\#:]3^k/H>&WhH:_vd?*26j[xjawIM)Rr(Nm-,A2I4hYS3BZm\;j?NăU"Hrl]n),Aae40HM3rxoC#ruI+^vB\X<I21HmcZ#p>GCQrPjs56b^HC#d0I^hVw2+ăU"n+$_Z4A1%g7%7fLLQ00LKj8#+-F[KRY;aRXWN<yU*f;$Q)6n-nu3Nsy%Q6]$>3jăU"]^*qhsK+5M--dNAJK*Qif;>gHG<Tr139ST\do]#zamVE3hinEMu/Z_cXn&h]ToJăU"7(]B8q[G;hJGU_kqkk)KM?1QzS4V9>txpUJmE5qRiB2uUJ2l^T7rB68'bbwnKSKăU"h&%)&[Sfi'd+[3x^CQKx7d[q7\o*K2HY>*9#W_F*lY*d[6t#q-,Ci%bE;NO;Z=]ăU"G2bHf,8b%8]ZabSmsU%D<%JFuuqUjO^5/BIx/=aPi>9HU1giJ-[J?+4K0<>+:rVăU"S6c*/fB?7-]J<F=2E%^'4A=$CtRiD2:)#(g:5?m'Ehz]nA\3QNcEKTOYd*M<T^lăU"zD0(8M57[K=9YDmm/I2-voa8mkI((afB1l=M-c;n,>Mq'm)1th-^+%=ewM/KKnsăU"YpY/rPG<w[oPiQMbh]J/f0mTkhQc-niLEWeg[xrB3Wsm6Pq_S*sKGY?Y*o7h]WvăU"tq#NKtG48Tm,^EwU:g)s>an#l9TW,8;jsn2&QH'I8?<lBlTP.7knZTVVdXTLS_.ăU"qblo&=41x7ya:oN>WIJ,9K3rMIClkd-;3%pyT9GIH_IWmb8/foaCoAcHbX0=hqMăU"H,^/^hs$cNbNOgFb0\QB[7x:h[M%*Qf[9B$W0)sw[nuC,w\G7aA,6C,cW_4_4'LăU"t)#fZbVLGiTC&J-/=-lj6K2&z[dd-&5&m1:wH,Wq[NcB.QwA0DbD)ptGk*R(i'1ăU"G2F&_dOX^B&d:f/4[#NQ:)RBIZ+[AEsUCOKM]aBVe5BheqwV_wu*j<965N&f>0XăU"=A,3;e'?X\#nEEjgyeG+CHAnd4-:0K4%r0__0.UhK)Cm0.U5vLE$W6pjjg&9LKVăU"CYYsSj2N3^>uUZ<$#Q3lqs*U-.99g69GE/CE6>aB3:p%%lCrO>-hfV)OlUKlms9ăU"u+ab)(jn[JsG3COd4>&\:$VBZ9QTNwfTi8<nWVTrTO*>qK,mF%E;RT[IRacuxWcăU"G_X'RY\D2mGL)bdsuBWHQjc7*%rT^(jopR22kKNebIq;*:T$dKgd\#sw;8*VmS_ăU"6nE20%^xt^?5#/\=W^:qJpqVLJvLbX7^dcLY\HEcVVs*zu'4))61)W<2;#%BbB_ăU"N3F^2*umnbS3KFEYy2]DdUgE+x=mCdjWA5O1DD)$/P.L$['VEmuaR(FW?k%TstHăU"=/LF5wQ<)%8+XTlb&Opn,2:#/D.JHsXLL7K4IFnk5f5v^OVb^[r>,jGGCA?NSycăU"6sK6$#2,GYsO1=QPYsaCBs1)amNvEmP*muwSEGYonFc:xG0kn9D7lA=+%U26+:lăU"n[*UMvUm(Wid29U2(P\+*bbZj:+P%ZolhuZ7>3lF'ql5p0N[FXf(B5IW>rILWCOăU"X_C)xLG&9eJL+Cw9mwuMl1>t>;tt>\0kwUpK#:oFZ<wYh&vOp)RvYD[Gp,t<Ep0ăU";&-GEId1%92Rf''K_laLxBjqjO'_]6R4.59m)8Mf*7FE9tB];)?%.y&^t\xS0<PăU"TI;FPX#aMjzS&8Qx-zc'Tut2cl%_dHj2%>ss16SpZEIWGaS#geay,ZKw%X\?&$1ăU"6-lH0TUAtYM$_J3MueE%lMAdAwmFsKJ)vH&.LXiyn5T%tOk%#Ie_)KW\MoX5)jGăU":2Xr>kQ*>C:37C6bbM2%7S]ZlUa8W49_-El[%<##oTILfKWEUM_$dQWuz&K(m^QăU"S*_*CN[\hKehxOO$H$0K</KJ=?i[>0OYD'Z_6-nk.o1;KJgDhL5eYjnmi.?LF1/ăU"NMfZ1ds]=_rPf%[oA/x$XJ9NbjrLrtTEru()$h%P7wpaMu>;Z6#xn=k9LJXI5DoăU"'m+4n%EH8LwvLt,uC(T#FKkI;J>]pb7]9],BjztX$,=vs%neuda97nm5<N/MA55ăU"\RAsbO%igEVBd&%n='e$->sk_OkmnWCtd)2FtS3\j]\YfDqkwiVg&vRICYIf;(FăU"RgvAg/*_O)uh8$XUw7,1%v)9XPrp$ZPDj(f?Ls/m]Hws.gff9B<>g(tn$SN95\năU"BKasM#-)O3Ul\i/8qJ/<_sXHgu^M<EGZRe(Kwb&d1cN]ecc^NHp)tGGdK\gokOHăU"i])Xfjn[Li,-qV(E#91)X0CsTS8LwG5-\bGne7T]P^)cGT*khuJ&r;J,q89nV;0ăU"uiJLu>WghQhhxl1ax'=XL$U,&n(Mn?6i,wsXGTJY?Kp#1qs8\W$[ecG=m-3%m?0ăU"iPH5oFEj.-nu,HFr>+(,t^Q?GiEho#&tOAKLbEf1TLx&QgRskN6irB=wST.9%3măU"hTD>=aF>97^#Luosnd>&g.md?LOha9i>8#x0/_TNr?,9$QxMP']=S%)$Y<XiDAqăU"#d0Wm.x,QKTVNmii\g]N-n=L,]AD_o<ixPa4Hb(0Jy1XmO^&&1&PYrlZ.=BgWH#ăU"R3A-/6zHWafI8C[fb,]v*^OQ5-+V?K(.LxD[I6MWxxk>:>xcMTxk;40:pQ<rHBAăU"&i$[Z[^uktn>3iQa5PkeNn-72CO<O>ti_Qbui7kp8ikh_('QMI/TaxMs9NZ5x,aăU"-:Yw+wQ--<D44ll%Z-=bk/KyCl9b?-''J8fH13_d/eMjK(S.p-bqWf[0Y>mWmqKăU"FcMlb01tSv*\*lr+w0M4Me.r8Gbg:_>TYWlKmqrjj$oI(i:Yqc#8QSTMfkg'Cu#ăU"=:Xg0u,\H**dR?PSp3EpL/gjJ:cFUG1dRy^o55mcu$bEL5_Z6w7vs$dH8Y).eIYăU"2H8Y>71]D[<;iIk2PqXQSKsGC]PVi=>:(j;L6ZoW7Jupg-QP*vvEisC7]U%aLn*ăU"$1F0QrRtt;fA>PcX6n6kvsjrSowKhl0clmd1[<G\2PSW?n1:HPAwHWc(H(8/6Q<ăU"Yh<*z?ta>s%BIHQSb4OuoHs^PE*%Z1g9_OU%ndD;BiizT9e>.4ka.3R5ZNj6J>FăU"_m>VL$XhsJ6&nkBgsl9SID[)\5F2L,%DZeyZrTOKGKqWA,&cg;QfL]F>s5Et0IgăU"8jtqJ0Dcv?YLZm-ERYuhqAcGu[Qz<,Q3pSB#aY/'n8B3'N,\S(l9EVEHD&we+H(ăU"<wlv>::Ge98=_[E7piW$nTP*>w')'&0e-4x'<d0.kZme(aK[7pnjh49EJ$=X?L4ăU"+Y?h19_0SW5)Y<1Vx,%q&e=0k_[4NLcy'usNAj2IOQxZsbFEG4I:NSN-v9Ij8l*ăU"a28$Q/kr\yh<S]aprG#JSpX/<XJb-HaUIcWxmxkh<7XD[*uti=K5anCpSZG.f/păU"neQZmSEy'gJTJJf;R7e#^^Ta692ZOixWYIR+t12$,oPgdnYvh+q&4Vubr_$&Ev4ăU"bTx*?nsVD&:^NQGl<Oq'o3_CdK=D<UZ/]1k/mfK)Cmvz;3tSvcAzng-n1ghltF8ăU"ti:hH:eUwD>n4Rb,5m,<pi-%P.dBNV97XtZLKsD#23AjT7^T3cbQuTd>9C4W<_răU"d?F[l'l3^'nOJ9;K3CfqHmCKQ,#bkh:zV2G/Z<\?CKdb]Es*)Yc%2<GOC4.:_1#ăU",J^jxA$Ka)f<EhHdTxBerR4dsW%1d';jmOfZ3FqEKmOlUpmZC&0,BM-4t/eG($băU"-cgKrOBW5Slieim=wc=h)>*P>15Z+?*;EN#&ZPrXQ=Nkf/(wRw&gUFOv]aeU*&păU";+ZrpK(8b26a,7crWT-pcA40M^/3+5Sb?kgUIcVh()n%y'tuVOI;IhbBoaYEd/uăU"75[c6/#Lxv?tLbTrAu(YCr7efIb:,ZioS:&kJln?d4?)Ak/g?05kTSpnR_\-LrjăU"wvHPLj7tVZk]xR<)_\)Ussq0OyS6l#m)%Ck>)N#ODg(KikhI;C]L/thYO2%spjtăU"qn2EuaM2/p1Rt-'tj\?>Hhf\^OQq2>wdJYkQuTT#r_t/L;7t]=\4uPq$:,87/rfăU"_'sld)Z?g-O:o3u)s&=^sKRql5_eSNDguObP1M%gU10l^TMiaEX2Yp4DQtWtp8GăU"=LQo.UtloBuNV$ctz;flq^MpjQ#kQLjIxL%-3+92hL#6?.&WWO67Lv6j9qcv:8JăU"S&i3&?^qKo1D;q=h54;cP8;G.kr)[t\u,<QjpHqbx\Jnv,)Q%[f3lHM]3HKTd0uăU"<>)oe+uJi&mx[h=Umv$u<0#b#8Do3K9$R_%l(c-3hb^dH:d046qB8*,GCpi);=>ăU"/J*[CH3=64]b8T4o^tsibGr$??SWFoS-NZ+?H6F4785wO;%$QERo7/Rc\tyflV%ăU"u\2t?VY2L=$[e/2U6U0XVvY74/uQ6eqCg;$1i7hKnNmj6qLuK^L5.PKjT1X9Mh?ăU")JO9CG?$xJVvCRgVPOh[a*N97,LDyfntAcBqLb)7]fX%9nxUqvH)x-q9u)#gF9+ăU"EObAliAV%-L($bpD.r'sdgff*KtOQMCc,0vVbqh4+wtGCwW[#ov?>4uoxRjCYL\ăU"wFtR5LG'LY]t^fq.MsB>vksg*fbtcUbBSI1_HSmb\HeBd(=m93nEY]t(Bv]jHJ#ăU"r*m'-&5>;(0rYExm,-S#btia^=,mtDHE<a*(bzVh2#>?+^33+%2n*_e9uHujmG6ăU"[fca-YKg=k(.DTdqX8G0#W(.090L$2Q6h8bTNc7zH8t[db(Y#/m$1fk5KhRMphaăU"rHoYOPrm4?=afushhZ/n5?a\itP6IregxlKg(>DY\Afuf(NY].$lI)^'_n415JGăU"^>lLTo>g*Z-Q1-5jeUJ/MJDvQdmXclR6>nBqNhObxi]<2bE<B1W>2z\to?Os]H8ăU"6LmcpVM8v?&77uG[8rI?30Gtcj:cLIzhfVMjm#tV9G)pWCgXlVAiq(D)aNf$;3săU"gfdX[s0Tq3oQufcz1)]N'$'W-bl>_1k6JCbb6wG1cTjn0nQq\6nAt&+FFbb3=:/ăU"TLO1[3Z%9h8)8g8/.wO[QvYlJjLq1FmX]?aqqu-4blDd?xLC_8JE4R?pnv?r4YLăU"0C9aUJv_\?cigR#QH9Y:Xmux&A0K/\#Wf5MNX.b?T_wpP*Ode%t\gDv9VzNbEegăU"(P7UXXyG.l$G*KFabkt*d5a-'uXmM=UdrveDRcBH1;3$z<X?iRrqe=,\T1.ysr=ăU"(XhZ]P(Z#\/vFA4k='EZ1'hIl5II<FGBCKUh0<0S/h*[kVcs4PUvOpWRfENSvIvăU"RA?*G4;y[Y^YEIWFYjCa(c=ll4Z$M%V[WK=x)d3X4'X\vh]i3%jk6pvE(&b#am,ăU"69V)B't.g=Hv4W4)u9N=WuT3ke4&$*;EbPTUWnn0p:vPotO^o<crj,p.PUoG1R]ăU"5.opxIcjMA[tn1tiV-5($TFDY4\a;=oOSU<4XAVASNd6>eb\L#37ukVXWV6Uo_PăU"2^\&zq[[UmRaUeO]F(MFO\([Ir);XeqAb/XDtgH-7#1?)4b^<jWim&K4:TwA%,8ăU"BBT6_Jx/7rZu[?7j>t7+V=b<YRl:N>J&/hlu,bBcYClKRPXU8'$h3P\brjG9pmSăU"yLM'HD-IQU6,Gnf+SxIqUcJ38kZGbm/GO\fF7Gf7X[r+d,e(\*i;B1Re6KC$QoaăU"3SQ3;Rw$DE-F(ima^6q?[9#D4\bl\++#Pd2qZhiZNgN<Oxl/KF_&1/VNuA'>tGyăU"O7pc49c5qM;SpC2RK2B65&X9wVsT,BK2HUZ?9#U=)EZE#ij1PY;]v\.+T-xx6DMăU"XLFUMzoll'x\Vwhvq.;PY#,C(DyE->;\$tLAtG3o\ykC<^L]uM#4aHrp,+6&AyjăU"ko[IVCK5&c>6$(pW$<-TBdciSrBw<gO<l6_VZk2<*vB0uZ&Zn%eQ#mJ)FVQW1$7ăU"y#ocesQI(a<AlR<RY.gb7d>ggN50\JqoEO=f7-nc&s3#X*'.PF=Nlj[_AAi0MqYăU"kHEiTEaj\poF=I_Dy8qic32o%[uu9d;gmFd6X+%M\S6V2,PsY6=GvgX-7$Z/BeuăU"2C[cLhA=Cfb^<BCAVGJnOuU;e<(mc2gdYau'C\*W;U/ZRJc*7J=7l<39hc5WbbFăU"7PFXY5Q1.<ikB1R5C'Z^c(rQ3,Z&q9#3u*5bmgkYSg6'<vacWcrOuc=GX/6[_Y%ăU"QXxh.'Ihk*%iqALR,;D</+%VW7YJYBJCP=FiFz&%xB3%4l.ggT2>.9c7^\-77j6ăU"1/4J=?i-0v=Ea(NZ:fgMg#.AkmrkYNWecH&fIKXv$(N%]d-^?>VbaXnqc78T$*DăU"T1TM,zY=[3aEM.[*,HdD/Om8z7fYHV<g[>upG:B(&&;[Fxw/Y$X+c=Q??Pbx?6păU"4n62./4>ezpn3)oq*u]PD1C?UZne<,VgP-HL[k1d7:kix,QUVrV-7-:\Gb(oulfăU"f[-fe=<Yd=Q'QY?%\PC*#,0/oM_aIUR=H3-'80dn-gblu?9YXJ_;$-4k^FK8+>năU"yV's=s^AQE/Wx5#aiNU]=l6O5mhllQ'O;U7J\_/n_AdKE]zU0O:-lAi\mhWpK11ăU"WYM=hI=*;D:Qq_=mU<vQs62/pphE\6[)s^+)B*.v[Z?HU\$f3,io?f&2/V#15[4ăU"8#l&_d=hQtr>kZ&/R8-BhafR?H\lgMnt<3a[/sp*51KsOL7dHq'*(FWbcPNf.G6ăU"f+X:vQjoL4u4QXNnG=7GT*]'Ub3ef]oSkqo,STtW126>-%yx$phtZ%SmDVWh0laăU"0b?u'rC#;wAOsyd#&LmtJwRl,Fw2gHb6%iC^u)[$\zWZAg(#I-,U7*\?5Ay0r89ăU"kzkt>]hlxQ2j$h;mC$fH<]+MEPf<N>p6An[S#Sm4&]6loa#He;b.PN3&+Yshft[ăU"WG/JT?>82d=h*]i=VkVggW?xe#']1>:njU.AbN9WlUK0x6:-,sa#td;S8O')23>ăU"4VBcnR#7]HTteP]wHI45WTfu<%nhNXnf;>&#q4B8*#*'m&K[.]vTDhJmzS7sS6[ăU"1DISMhA-2eFp(mb2*\aWKm?b9d8$]VH7$Yr+SEEZpP6^=)=YX#kMZA34=<YHL/yăU"*r<JQ3yq6Q-tkOP5f?q77q5BqKajC9F269b,2Yn.PfY&5I-CtnC3W7]#+E3]jANăU"(kjLQtlq5_UJ%\=JqRRIp9W:11#dqkfQD-&PSv3kT5H/ej'64,lZa<Sjlr_&0k>ăU"-ql7uGLlC+]#V=sT*\6'<T4scu/ZDUcEfeT>)6KcCEX^,Q>SqvJE87T][6+4SNeăU"b3]\1*d)EcxLlIR<X;]_=:f]v-H\8PbFF1Tx&N4\r<y4Q-LLXX92J0_rtyP&w-<ăU">k8[K=,)C7SG+bVf4W\4(P\dI=ds5Rpd2_uHYaqLsT=po$sU<S]TLJd:%<bgb/găU"&sQA2^_=XgIN=5=ZwLYy+8a:0]iEdZWQ;_73,f-y#PD4stXrG,jsPDjFDi6Xlj(ăU"$]R<1XO=OiO2CWU:a1:sR:oDR8$xcBJ?]JEJ)rK,>ReWNrlPvLLhb'elW#-i$lDăU"/8+Qt]G(Y-43*Xm\,;mO,dE,p,NVkJbXlfhY?XOd\A2nbiuAT;^t3'/_o9oNYnPăU"e\g4pd1hb^t&14x2#_<6:=0s/gfPoTT5I,Mv4u%p()9%%%%-:%*'QIF9nq+Zoc%ăU":%<u%%%-%%%%qfs%iShtOr%l&SFBRdZXRce[_mH.?MC2Zrk'OE?QkQHW.<2D/XqăU"35.>E$H(xv4%%7%(=(eQE-%7E'(.m57sA:nTiZj+6ecXnNu*a>UtuWt8pUcv;xrăU"3DRSmQ'pOi&*DG6huF_<6%ltohArlrTNs?ZTx\d=Hxudt^uD(t.rlTNxA3FurxuăU"(u,(whmHlwrMdNLAlexMZZxvdnY-xCnZXvLzkKf$_Xd8tbIHlM[B\l]M,G]:_qMăU"O\tj]7F]10CK<N#F?KQtAzC8K0#\k#5B]RZ_7Pc\d]W+ckj_W7U\zs]wcA>faq/ăU"S]T\GZdAdC<5X\2FA(DH_R]TZfqG]Pb]5n#Sz]7OE\dH>EJ#)V],\xo4kC-t$RfăU"woW>c6e$+&xoVTc6aK+H8J*D]\xf##x\ZnMjtuMj>MWj)cG1ZDKF5D5a_awo$+lăU"pXNxr8bvoZ08v>k3xder8_6p<WJ8F9tZRdkav6+9xio4k3x$eV&3xPueX,vsbRXăU"*9vRTTcRwBT:T/x;To\)NkroB.r8]QH;Y)mpnEH4*%akCN,^#mU^K[3\f]&2].aăU"*m/gtXv?jx]xkVcHc[&OmU5O+<OWF8\G9l8tl[qJ.ivp[]h698-7%i6nvb-v%wpăU"48uH;c:H0io6]9X=/9p:cYtNrXjivu_1Kfjj*b4)8J\HW(=581Fn)GOE8X([=0iăU"vQrh\YteDvK>$=f,hNV1eVH)1)Zg%[GiAJ>Cklb6XYZpkqA0az[Sa)*A:/f*gBCăU"'rCkl$6XYJ&1.0VI(iM2i<45.;H'-)/E-q>G)<<h$.EiJJ^KHfm/aDhq'eY9D%EăU"3_P#&wQppZGV>-iZu[DmVFM7qIsd&ECa5E,qTDI91mFUe:=j50GVK4btuY>Ju+IăU"TW=0?6eF8'.9GpCk^6L*Q.0VKHmYP$Do'>eY$%.=3PnR&+^&FQqzUXT_28eGdxEăU"]+5k6-ql%15V9O%G2kpJ8>Gq:$#fL7F96=i1D6*=20W/mDQT&UUh/URgRTcp9WiăU"iPJZT*KCVIFE.dS1F)U()([7Q,)\;-q]TYGWjC-MTVUTnW^+P,')J.+/Es-EmY4ăU"ar4,Z8kqQ<[ZL0c<tv/0^G[771n)QH9e5gaL9WkKD4MTTjj>fDo&1,L51_/&u)XăU"&W_V9KU&u]f*'k0)98M7qTX2JzM_,i0+K:QD&]'QDC'RzC^yOVrs:jW;<qQ[0rLăU"Z<r20eT>.+-UI/'9/fC4%&uh9fop/e.MjTij>f4.hVj.Q80>%.;&=13P(Cuei^BăU"RTAu-^/.S6gD%1^a.7)9&?-QPu9;kDfABhqcCL0<ftfe^[GQh)4A9?-RQE9kKSJăU"lJX8:(1/KfIjBI*F5F8%5/R])?BD?%2baF8qhRr)8fi?fQp5R[egEqH%55V9c,#ăU",)=a8.^hrO)8KKtTa>aSKdDQa1D7E(*gB'',a]Fr9sukealPY+<><72.W-6JCfWăU"h#)(7[%'QD'3Ds_mg6,pu9C)8gTqWaL?81^6JKnO8[4SK9tAkDnoWgq;T[pIZQKăU"r-e8T5?-/UI')\/^4Gp://uMYG>trqqmKli7&W0+55oT)A9Q#CA7/,tk0,W8Yj4ăU"6It-v0DH'F$9?-%^iO:CRTAuA6j^XTZAg40%0WQLf:aOZ15'h%OX]ff=a;:T>XhăU"V1tKrm7,*G/5.q(K\%%UA'iDs_-I%P_.F_pKQS.6ntKb:6fD1gK':uPZ5X=H:TmăU")=TpND$.uKpKQ.a[7Wm;qK789/5;A_Qh%,Uh/CR]l*=>SfH8ABW#/M^vK^[=p:tăU"s%^pFQaH:M9fu5g^-:^)=iaKZBo(qiDf<<sp2lqerK)WOh^CkT90qkCQ\JyO8b[ăU"Y<=\ftTC6$T00FEEF'U3/SRIP9o5P_e\fk_uA6007K>lm7,G'k-;,5'GRhd'1<<ăU"235^A?r>6\a6uO<8&N5EE;Y&UphopY&K&KW.mWJyjG8?iOp[Bp1Tn-)?I0;;(egăU"rU)eUH%T<F)A(&)+NjS8/k7-,8Grq1mC'+pXq%8Q4U7A',w#m6&5_6^o^/f-MN9ăU"$2Zp6It%V706E%U=DZ?F-%uOJx1a&?5]DTlf6pY+<><;8.%W\#h;egaR:M99u5aăU"&B_0Ur_SH^r24I>*uq;m7)h>^)m0(ElHYC*gJlb1ln>>r^F)8aK:.IXQe1FQ>O&ăU"_H?UmO8Y./UcfiC4^;]k0)8jE7cq?KiW./(?0u_QH%LCC+yO]R>IL&Lx#T$^bl=ăU"8J0Y0$LJLH/A-e*tgoY%:9a*2U8CYsNt56^jArT6^\XT]i4#Gha9*];%QDs%ZEmăU"YK4&_55U]?QLb2RHMqIGr>]6\6utQqCLTtkAY%61&1nVeh:&p-=8//WRi#A]TJhăU"cd.InJ8:(OE7KE:NU>&eUh/C&R0/UndfKg)jlb/]DT6uG1*TP7Tsh#'^ReUO2I1ăU"/%]);:D/=+#Zu;gjFv59e8.Mq>K71ImHJPhe%g=G=#*=3PJT)g*-;=A]EXLP_5.ăU"SJ0o[pIt2ImT-[;'=m*YY*=bCYWgSjv5Sr]foWl;qY98ZF%)5/IRhF'ES0T+B1găU"?t?+lGHrJQ/.5.CZ60L%_]/;97a4G5e/WR]^_?JgSjF8/NkWG>C7.gKL.G>6/*'ăU"0eJQ.O8I4st_A+&;?ZYkgjnlbCA=T[6jlj6,GdO%go$YK&_)5_Q,Ls=,4E3>QJNăU"=)^c?u;:T\TTjHjxs)S&a-8)8b%<FIUhON.8:/W)R3_UF[*WJZX)teVd.UJ+8:TăU"(q.kWP'+ReU%-UA''6,<9)/u(ltIY5Ws\e7*]e6o7P#rTQJ.%.H/GVS>F%,h/:măU"O*S^]hf;U3kcPP.OL2iRr[ul+it=0$MLZ/<.Q.(.5%Q4I93+kxAP,fq:BXu;kD#ăU"p<vpN[Q05E:('2%gP#/#4T(I.$4>ko+-BT5TuWidAR<h'UC/URmh'EF(EH3A_z/ăU"gkapk04J>QJSr]foWOI7;IVNd-K/Q.OfF4G5/1WR3_)?/8PiPLbu6;gjFo8qhF<ăU"<f>Sc:)197a4G:)/u(,a[*/iX0m70Np\4^aQrj5.\(.^/InQf_O84GC5/WR\SB]ăU"IR(Lrdp4N>UHP0C(NkZG>L1.SmO(nds#J5_Q1vO8473.iLdv&%aE9P%'FYu:BrXăU"_u;0:TOTC8-A0(=/])9_/)7F,G1OqdT8)?t?+l4Or5,o857($](;98?-EmE:P1aăU"6$94';/Mq0e&TP[^Thb+9]<;<Yop^s&451%0E</W\R)o9dg:[j=0hv*9^<Y<oACăU"^^)f\T0/-10S'9/)=KAEhjV'(uMq,orFWdLD4n^Qr^lZtA//d&gH*9A>I],,SPIăU"'<<MWD6X39o-BTH[6vKg&I>>1RR/)5/URX7)=AESh>1'a0uWNq.-oFVe.SJuLq;ăU"i/1-R%/RCkPH951+.n*'U<u4k0k3X3oamBT[K6&K>D4*=/3IR2'gq5_E:1+1'MkăU"z_.Hri<?P.XIsT]<j-eVTu66=xUcbu:M99-,#)6qVw%olA1+%%]\\Av.I6lhr4;ăU"k.9L,o]<nW>SqW1J(gQ0F4G;//u(&5g%h.bdDot2I^*'y-%tMyT6)+VOt7-MuRqăU"WE$+A%6+%8:://WR9_y/wuN_S.XjrqdwT*9Y&>(sAQnm(R<]DT6uL1.[-6eX[m[ăU"6q%m#CA8/LWR3e*I48-Kj_Nm(%eolRplbgs(#KJT8enke(aV^=<pW12K>sRU#/CăU"R7('EQ_pZzI<9FwaC8B+aMdu^?$l*Kt-?+loMM8K>&SR-U4I93+?BE9j;*/>l^%ăU"^C&1_)T(b%n7uNC&NhNgjYM7Od<<8t<t<)-a):e/oO*p-g$9/dyOJ3H^WzIRyXPăU"?]$]<t=WC1i(f.=8J8qw'xks?P/URbj'ECYKkR+Q2n3[wbXb64hTTTc>yccO>O%ăU"wp]jP8wtaR<D=T[6CHXdFZL&[J?:qOB1*ka&uBqFn'iM2E)n9[uwHu^pp0cJ_bHăU";W#pX<r$g%G)Xb(]_f/mzURu(oNP^t%&CZV*w'xPx?ZiZ2kkJgnMP[1^*MNhKxNăU"J#O)U*DOhJCL&Mt.hcW.b/f3-:E,283m0Z);<uO(ySyMveuB7*]X#jW;MK8O-2OăU".\/%UT(<so99oX0jTHEJl=Ki/uu/&u;l2kR%Dur_ArZ2mdDDtTUPD:TYhp$BNhFăEND SUBăSUB V3ăU"C8[([4.)[(+<eeu1Efsq2mnn,L]0&,QF+zDL+ataEir1lN<^D+ROz5HO5]fC>.hăU"6VMKXNMRS.IJ&?>,+T8wbJ;SsA;qQU4KWJHY2YONNmIC6zzE6S(%DFc&9Rh<Z&,ăU"Auo-4)16n*rdOnLDB0Mu*eZ^)fTT3RUK9Gd+NL6Pc]&A5%GPJ3Y#0,EbPDRUxEIăU"-G,VJ'e,B$%Dz2Qt%9d_(qMt8L%[4*\]6]tuTaLqduKuqSaDEj^jl0DuT_wu1TJăU"4kjYJVLB6xKpL.=8/Q%'/d>b=-'MNjf]-bojlquF>qjIj<;uV3Q'9JMvCFrJH'ZăU"W4CbAgB(LNfJ0q'j^?ruXukuLKBb)=4o(s*N]nN\^lea8NK^MCr:e;lc<3=7u22ăU"(HbTqj]alP=7HQ8:8%%X)M9uI_hO5hk&s&3s\B;*&w-uaf65ME]T1e\&rHn*o>hăU"##$:5,5Gv]Z6V<PFrALM,LLdhM<-majt08Bs:C(lKJ7bCx,r&dm0GwTu*bsKNPMăU")fs.MD\leqrhdc.bSjJY222Ktm]oR68GaB4&VcgX+o[DTE:7ok$?xN(ke9Z([ZKăU"0Uh(OmK%&aVdaOmrdM5%;v<?_$&ieu+Ra9NQ+&[D(9:TN\M.,q\W#H6:<p0PORkăU"'H)rhSF92j$(_;i:aL\ap+E:769X$6a/8^iCPlTLutT3JdxWMsTwa\bhf.u8h-MăU"K:s<HL(NP-JDjsx,K4Y9S(-t&6)gT,7>p,VMJQb<T.j.u3^hP^ua^?[?k5*iz:;ăU"MDYjQ==S.5RkbqtR5<FkY7$6nUO<#Z2a5Gg'c5K:zdco(yx'>>nGCO+'#t'i:.xăU"=Tj<usrHsRDkTmfY,d[%hs3%&6PzNSnR1p#.LzLp)I\r3+S'l[&#G6]Kull7::eăU"t0Mq-J*'TG)P?H%Z=]WD[j'mrZFR'ayBjE:wYz3Ur8ZTe/8cikJ-7SQGvQMK=c;ăU"l<#EDYCTjwTPl]b$lo,U$$dDf&H5e_9^&?Gto\$0Ok1%z^;QlF;L+vvB&%b<g<DăU"y=a*$<$Dz:;9C<9*mp0He/ZY#=k#RVk9r]/lm94o1RBiW-z_9&]OcOk:Nagm'o4ăU"CUqz0>oCKV[$2(<*[$fKQKT^4)5K7*Rj9?C)IsM&#Y(eO:Y+aM.S-d,#K2Km$x<ăU"W_'rDq\6DzP<NPHHh,7<Eoee('D-<.Qj$OG%s6#KKj76x&P#N\w0IgOlD&Lv=(OăU"w<v+4BC)BiRIYTm*l:-;]_lMdFdloYNAp%IQ]nsAn(H_BqOB8ZwB)jm+[l*LDwyăU"+ZNZ6eQ]&\n;fHTW,,M$q$:1\];S+([&v45;WgS7)*2H?[^9\[SqM1hQX[q[)UYăU"Ds[cySkVdiJtAFkys=<lJ7qL0:>3#y90(%)sz$Bu>GZd,]bMwSyyoH(muZrl[*8ăU"e194YMfrxf#pT)3acoW;C,<j#-o\mcU,&)Kc'.&DrBHMH9?dx=c2[X^+GV7,u?KăU"_9'/8KM/0D,6%.A#*c)9u4wu+icc_P^s6C(?ME#yLk$7ouGCfzc,IdO8k=.z)]eăU"8t(A)ygv0nki1NA\\.;xsuoQ7[,ctt^'MU83PxtxNsF5U3o4dzZIAm<T+ssMUN,ăU"TiMU,N2At0\XX+2l&c\Yl:'-6i3CdW$M8H#M^wh6o6FSJe'SAb1xBXdXf_:dUO#ăU"RJb?4]G1jC_<(yGZQJXjEx_iH5?9CQY:%OQcFYnqatW^f\&gR(.VAgA=8-_F\pGăU"t0o7pxpb>.jBiid?WM'qObs\&qS_EQGdB3/cu_y8H?g1oX:nSP2#W&+HiZ\sZ\1ăU"CL=jPTO7-cWm3(Z\KNer&2zx*uIHeg7AD<la*6=rQQQk.3*2-YB)&2g5B/8m\:8ăU"A.4Dnq7#B*0O12&b'r\6jLuauVj5(4r8t&xvI<oF]*kg'AH$.Bl*XDp['ha'W:ZăU"^LyH0H6C+1fF\i>4ekAb6uvq&o%j+I+8SNpNc5ODbiKJ.jlp#A^Sp$%9,q<0p%KăU"ei%_F<%_99I/j/8)#'L0?:AP++f=[Z?MU[t'CgJjx(1sqf_eYGpREMjg9HrK*92ăU"7\nypOKJ^kZK.)6*$-crO?>5HOjHK:\=-Yc0--<X;g['6+kwp$.iQcFb7p+cuibăU"dR*Zcp%_BOh$LlA-HMIP3+NqS_c(K<oQ7?eL4&m:G\JA0_%+Z?yezZrsei3X>2EăU"g32O;&%z9#G[^^YlmvA#6C3,/^^<e<xtG]p<yOQ*$-PBT[S#o?E06;MdZ&ID&3:ăU";5[sRos?VwBKJL1S)UR8REN\u79idj-%s0=9:0R/sB.fefM_MmR8<MI\_?%%:edăU"8Z;M>+s3pF:RGDOiyW3r'h/dw0C(vokJFI%UU]3j1'gs6&X\?j)Y)C8vDZ<Ps'_ăU"5IqrRZo*QqK#vsADglQ:HID\>=-/'e0pz-\#M2r?21l:Scau3\q,N\Su2C)MRp]ăU"c?#Ab>=B.7<NHuD'f]Df.LG/_ucT3p/Wefc9sZ0P3>Q8Ol++]Z25g'uH/I0ahU<ăU"t/fohn&OV/RY.q&+v:BL54)o%X8/WX&cr0v*0H>Qml??<4G>5Rj,<ZZ.W'D--KMăU":i_wU'8JN24#i//F'uIMDe[kt%q*\lQMD=p?9Q>l[br)r\Z;Ld0FTsG2wzB&1eCăU"z'W'z0Wb93;ImSNOq_y=fxp$SilC2R8i4q\aQ+SOCu.U2hySlY-]P.6-D,(t0[răU"wHfSFZJBhWYRieZRSS)M0<\f;fe-Yf]l:Ou?,U3W*cBsUC9);0KEiZ5o/M2+2n;ăU"MTbHPF4hGD.-Vc0Jb-$aIs]P35gk)+%Z*x_y:n57_\iY9W=V'OS[.M+,ACj_%2hăU"bm\glV>ModlSTg[-:[YOPQCM\\DF)lAjpj0jRi*ScD6Jsd<&#:DL8;0B>%rC7aJăU"Yw3bmDIi#6TrU+d+Hd,\f$exqe[P:.c7:'2i2gP%Q0Msn(?7L6oFd7UcJwLK=U1ăU"oyMVOTC]^#0cL/57mgJUt.k3J?ejO\2N_#^6ZL,*%?rf<DfY<ff<i0g04NkR5^[ăU"B89CFt?G)T_5Sw74w*kUkIRY8Cb$((JRzz6CXI2i/fk09BLnkh>xp:'F5$DI<J7ăU"pOFKAVBMMz6Wfql+^FD::KD6CBU8rlu?;ACT:R,*7Er9Hw.Z\pq-7?*/iJr+JqyăU"M45lK'EdTOR?Gk\c9=]BK%]hqV29JdkPF'&vx5qdZ%9t2SAYY#?dgOPK4_PeC3GăU"u+J\nfC<R^haw'Q5*mats*-BjOW2htfh*&1WP)VU[/fk>#)i.=k/SC*a'a(hhz]ăU".50=HI\W'p:7:kL;^l/nu=m_wXCBColJm,B0QcST$]mPmJwK:MH+L-<;afC,&QWăU"?R%ebK::bW)z#KFO4Ql0\zh1f/B,)XzakzIf(yK2Y&?emcPD:Zb4Ot57xy3I3M.ăU"c#G\g_b=h_OIK<Q]mZ]h2OAJwKP*c2Q?0%i-QXFj<c)o:/m3[ZP0J&Kisnj)44GăU"S09u]x;/[>*\>L)W#xEBmK-HZ6)\XZ62[3/*+.*L9Yuss7sTc#W+PJtTxsU#K7aăU"nan9bHh3_D/,kA:,s%nUVFDNj#-/D+3j;^.fAk4UoAR&Oc#FAge)f^jcV5nJh]kăU"%qmBdG#jR?GuqigaDLC[aV%hMltRa?nEB,O:&6s.5rq9$'q*U-4TqUw;o<D31CfăU"3$<Z_BXtBevGeD_&+/(nBNS8(gTJpiB^>?iai+AXxXJ]u.B[Yf*kvKjk8x[isZ4ăU"BX;]0sO_Y26t<h1VW*AU(p,25?D'ir.QQT9;'3FYvUZqw0XB0-W+w^h_YNN5qHBăU"2mB-,$LqKbl[n:qYnpIA6Gf<11ixV8CX&bMuhtjlbK%WmwP5C:piiTtK\s+(,XRăU":-4sfD22IpiaUmeF,Aq>M7y'%i8<>8p.>far1Ltolj\l#:$#9_2**)ik,aW^B27ăU"&iduZ9wFk62MikpPn<*tR+;Ndu#lL8]*ggcgEka']fhn8x9JTgbS=2/d/PiRqolăU"I%^+-AvLU#Rb)nZr&?KHM4_ya#F[4m;4)Bg9VvQM4I4z^yG\TYeZ0kS9$ST<X</ăU"sh6z[J:ZA&'/_3\%W1pk2XB0Kz>:PnhZ\$o#9u%=tne?ZsL?JiilNf\.\u_35QkăU"Dk\f8jo^=AU+.;(.tlDR5jv5xoy8L?UoZWT;&MIPgh=biqZ#fKZ0?b+YN7g[dmjăU";bKJFNq=FEVDEZ'q,,feNe9:dTc+0fHtd3R/]jqM?dq3Z&P\UilL%p<NYfl]5T)ăU"XwSqM+c>WMqZ#Pd:uJMpQAmQB1cO9I+<tsR'BJQYFtXR/37f2ITcg1lN\$0]e_'ăU"=.(&,^C_jnFxYVAuafulqM%R633+H]PK%bk_o'O12F<juk225;KlHkgc;#t=]D'ăU"kA>zd#a/^0i9+JC?si(Bd5:_';a<'jr<*i(>IfyZ)SIAL5Vd*uuN_5&=l-/yPpYăU"r^kg:W]TZ(2i:2$c0&e^b%q;DWm5Tn]ODPalEDhDFDlsFu3Tcr/wV.M<8x+ij7năU"h$K=[kt)uL4_MeMs\2SbiqIZ>h%ZqF+cQ/vf^t>6(w*Yv1Z2^AfRok2rJy>?pmpăU"Cq0AP?T%>#)6Hf2IR4O94J;wR1K3(3*eRzlQ7K3/^4E09v^tDP&/?O6C=hx$bK?ăU")6fKio31tg0<YhQO&jmRD'=A_:zO0QN1(Z22Mq/tt0;Hk/lHXP&/AWl9gij?](,ăU"Ih*iD,?P=Q=sn[Eg\ijqRM'9<\[MFW)L[Z3<Z5iDMR=;U*r]J;ha[)&Wh##*K3RăU"<rlW=I3JNa'**)2YbBkKTEN'%c=rMAj]4<2,r6]:[b._;*5oR**S5UE*Ehnkl.căU"QcIXjuG<eT(?'F3PIh5wt$Br+rk:+c3wiSqq+tiS-TSH)S4SfWM33<=ML*)2kRIăU"XJ>4e%)cGYBhi5rPGu-P</?7??I7.Z%haYWOgZU'+;X<-0']#\$m>;4kx*^1DluăU"JW3.HUg'\(OcTeaWLnjnBe->RnAqe&>]6P*ae;p54PiRnfQrKl<cM2SyzVw?V?'ăU"/,_RfuZffGVWMs-_p.2'AL6w\^gptF#il2Id7bb6bZ6dC^oWA$Ti+'TX%RBjl<4ăU"qLlkrW%M?mZ+S;z\m;%9Po:;OaCYu/W5bk&#-3k4#k'iX'%$/^s$5,9/GTZ7SezăU"cm_KV).aUfLJ>zqjgiA\H;236B%ezvTpCs<JjO)rFAhyGh[^;Nqq-Hs3sI>T-Z4ăU"l)2Jh3T_2$]2AAx\4lSS4*83YsNj<UIO2Nwzr;.**baBm^9dIq$2>\X&=#pz1V(ăU"-Z.9_;TDAW09/9&<6:oEb#hNMr>98M#P>t6V*A(',XGMQrYe2_ZWT4g')uI_daOăU"An>$2K4(8=tY^%(FZvW6JrE$%(6l1%\oU>Tu6bEYlrPPU&+%r^'7wk3'Y;QO8AfăU"W8=A=BH58Dx\\\%lgbrFw02uA-U?\fQ$nN-YM*<F\._)<#Zm3DAZ+Kx[T?n+U-0ăU".$nDi+_O3>K=R&t[i[z-%q&[-7tgWBKG=WIudC(hLC*..sTvbd?M(&i<qD%ChFrăU"(N$KV/g^s[%H=6+m<WY=2<IB>3VKd=48)&%5$8>^4.M9<u1P5XE:fR'O=#3zTM(ăU"nOhob#n$cIor*oeVlpC>dZ*'my#K*%g%_'b&]N7bd\?rjYFYgi=<J=_[-dlr4N8ăU"heMD(8roC0^RSPQcM(,d*o'C$I8Xllbqt6O$GGJ'_=3w1(IMI%kNRerEB[B;>0UăU"?/s3sxXleQ.zr/Uzvwud/?CO$V&)D(X3^ohOSi7BPh_KrFW&Qip%&t^X/_m;*+păU"8*KPpm,l6nqD1O8ZJXXNsDOXPu(ugIs400.kyu%N<]uV1<)BN+eW-zuQA<D*[,răU"Zu&3*n$W;^nI%p$nE3g_?B4z7MO,*5%3;Py<pUo82pLj+:zrkZ[dZ-ZjJQXhr2#ăU"z&]M^i_7'Rsy(,KLypMX0Znycn&X,M\\\Prt9vvj(V,0OZDCDZ'YwK00$zP;lzGăU"YVF*HK&v0pNsPco<D%#+ICJOYGra$oD)C9Bw^:go&jXKDlYB;M>jl0G.=Y)sLViăU"pTo073L)UmDWeA#Nc=Z2O%6N.,v*._/(emz.']5y1V(OCx+&hGLC)+V+2[9sJu+ăU"R+-Di8wz)5^&L8^0#_uPojs(]hpy&))VZszl(#Hi\zuMH)9txPeQ-:eLcy'%^_DăU"$pH1?)Xk0CcNPKLQLk*-)P932:s-a&>Lo+:dpL&tz*:bwL4=h6VKg.KwcfggH]QăU"(pO^?JJX2*#>55F,A+JN3#J0lON8q8gvPOHvbgf[,FpHHe'ig2DJ0=r;irt./ktăU"WN6rcD6TJXy^$A<SIZ)w?,gjR^cdDxF%MSh0%c8dmFviWQHKh(YdyEEWqQqi\d/ăU"ta&Zid6J*p=4<cBdm,SL9$kT\7*\o:fiT%==A=jAe$T:Pd'-Ld3>1SF<qIYJh+yăU"5&4qD]kP+V=NC]#?&ki$nDv4-a)^gC$dDz,NK#v1nBQr5Ipj0*c5A+/=>P_/hF3ăU"8j5G%dLmJO5LFJvcnI9fDF)JD?m;Z-VG[vwD\*4J<zFWc9\MDQ[W&l=af.,xKe_ăU">Ir,qFI3^NwSwjWX7F\N>/KF^&_q(+yJOqEsi2n9W=8S>Z&3_TIR[:VvD]FV+7hăU"Co$_^dRmkqpXNUPC<wdYhD_e&o].l*+OKRo6=r_Y%PER5OXbiG,Mz_Du3=^Y$ciăU"4D^+lIs]tJiY:nX866Lb:a32II32FIS.z;m=U1:\,$f/7of4;dnNnt:3Ki5bTlAăU"j[&aKHDYHAU3yNf5,VMOk,k=N$^M-Jc^i3dXM-*S(eDPs-]\BoVeb<hg-y&#6V^ăU"\HaK:;7iSm$#ZW^Cg)TFtpAdr3EUq^il^a#7#O(/bLQ66epn\0U.:lb0cc4hSVHăU"t';anAJ85-\t#c6,OrOGDT:_AxO:z52:1rpS?7L-^a^\0i.[H;y4^3[<7ZZ0i<tăU"h_TKA8=ZP\#md(QV/4zYm/%Yq:mW<AvJ+>*UaB1d1-22^]GwS$8tuus-H1b8OdgăU"k7KA>oeFTjNg\?,u4loDojtRCPJJACI7QK99hj'wm#I.?:<eZ.;(6u&4DhRroe_ăU"\3I>b43cJRq[&.mRe^M81nfnH3VL>T^Aylr*Z[-/c<0M]_,5rr#/dS^-t2W+sd]ăU"QF%r%aF*qUs3fZEQmYu8HyejcR?lQq(mG-ta)F2^L4Qq3XEl6#((#0BWE;BCtA*ăU"hIy8t:G09e.G%0NdeC9iVk$OS%.+cK0%7H]VJAToByrm?onSi9qn6[L$h0^3'>FăU")gV,EP+O]cs%7#(ih?on,9f%D30uqJhHG/>2tN8U3E8.%Q112rDc6SMl\v((d0văU"=P(In(d&-Q#V:ZX^47dE<TCj*duP1ZM4<L-F&0$1duI=s'OEcU//,LxJ)fVCtY/ăU"Zpd4vmSJ<+QRn2U-/9b6_MKBa:w$0F+ki[,gunWPC_Ii;_G7=#coo[6s>YToVZ5ăU"FfHh>1^A5B#9O*bKiQ8ZZC'wmz+CBo)DqsJFBLY80i76ZC^/f*I]=HUJb4]gc_VăU",-0S$\qA]=HV6r=iin$Pr^TzNSrJIEOIa3aRk)Y-__(<ck/QcQ*cUVqFVR/3RUVăU">%pd%.LeMCSTVbtCe?5&CS1/AM>,iWcCzx1d-h+SX;aJJ*rc)_wnL6Not$EtOJIăU"Hlu*=]Cbi#Acspgy3G4zFkMnVQboC]p^nY$9L6],X&U3n;J*[I\</7Le3(ad;lNăU"qXS5&l&&<$N2S>FMF3G34iq\%lD9Oamp*/J_N>er6ZJj7d+1D8t+B(OY#6Cc*G;ăU"-eiN'nT%O(Z+kHHkEi=p&%f4Oo(EHzlF.cG(B>XTPEA)QiSg[/Rb\BP_YKEK7Y/ăU"bT1H-9^0/JD#jRYjA'?t)?#':/G9l=%R/>CH2faUvLJPL_Jon<b0RYHrYo(0E&VăU"6B51Z)IA_zMH&GiCHsh88tM:hYY33twlqgHYGLq9=2/dP*gRs:du>3]8o;_NcB?ăU"7z8s#pU9FUCrhnl.Y7A6PE,PmffK)P/\Miu'E9;V'#[+Gukl2P?39Y'YbU.l/<văU"u5DW%&2hbEh&i5rmPeV(pR]r.]M%#p*jzd749s,)^uF8Yo3HbU^%[vGd/eA[m$;ăU"f3bL+[H;d40Veg2'f\uC)*Vh*4,,dtKGLR_(Ggyl_T13<z&uWAA</V4FDb];kaKăU"HM2$9(2kg-nd-+'j3>mTqv:L[g=4a9(&2iQ7Y-;=%g3Kb<-b+q,uag]*qib^?iMăU"A:/?nHrwcV9)S1vDL-\.^3Md$1SzRvU4#FO^R4&]]'n&0e+<ML9S[w\b<[2<tAwăU"Sk>c]Jh/u*J**TJlE?(1'5KBr^/Spj;D?P/^uU&Iue3]c<]SJ1XQm986JVU9yT4ăU"YWEpG.gOb&f4ev26WX6$eawMnZDw'4tz4?)k6F&psb36MlhVU?D525B3WRKULMLăU";NEMJqGl'8o+b],*ZBT&]YtB<c&G^AC]H:a:2S3QqijQMO1]l.P2R*RdG:-&cxeăU"+zX&RA32Mm%SL))Kt?=K5dw=7d%Qe'%&gdZjn7c\.ox^TQ<JondCd6K']dVurgWăU"UqD_<Q(KomaX#UU?F'V9OW[3qeW[2\n'T$$$ZT<?]Ba&D0%#DD#hf&2\iT[TN%*ăU"A41DR*[E&+rdL<0C\fde_McLG=:1<ICEx*)<0.rYC2;XCiD=npBn7d*U#-U&n&[ăU"no]%X,-SuR?j)0Q\G>fb:v,0oZL+s=ZI2To0Xy#*=W$SBa=9V4FvY#J.YS5I<0VăU"%Y+a2N$#W?(s6]WeUB9_CqCiMwnDqab0t](%>9FV+r0ROr>2;k/>5zT:Y54=R4&ăU"+U]63ZX?U+E]F8e&\(jmKj5kW,7#r]_&omEKTa0*u'u4\UiI+kqc=/8pLZsci*>ăU"7/l64\,yc#Den=n9^&a8TregKH5l-i,[V%FMslIZZ]&R#X]In8&)]Cxi:NRXyW<ăU"y3*f;$k)Wr2tO.z8x'$qa,/]>$]Y\37nDKuwJL=Lh:Ru;06.YTY.tE\q&B5^82BăU"(PH54GD<ln3AuY9RNh<+#B8ft1,?cLaI[68(.6E^IaastlZI_%be?%4OJXBjVROăU"\v^Dmy^ema#KY<cilGSW(eMs=a(jjY/\%'Puj*O=OLGsmd$M_XF2RPbO,0,*Kw<ăU"_=j-_;lV[SpF[O2]D'd9IZT9(\f2bcD,h<dwBBITT>n=TD[GaMjggkGg=&jgA0?ăU"<Vq(%e$>OF4RLCF0D/GpfM$$ncmjbbE$Bg':TBr=<P[nPr4QT]L^iq4EN.3(+U:ăU"?[sjHD]hS4WYZN37pY\1&oTu+JkD+RH4g0;)l'-ELHfHHc9cE#r-IVO6+R8P=TxăU"?w*#==.D'9X\<3+.?(S9U/nZVmHM1n1QM0yWC:A<9c1DJ-30M/Ad0GI3^&*S6+dăU"sscq6nw2SWy8D=y]lp#>chk\a]36$#gQKZ2<(gCOoU[)bmT*IbB&,:Hk*WW'=<6ăU"BoWCMPjiktIsmbuM]WWaC6>^qU3]Z,W8bU;[W[*IQz[wf0lUncM)jP0ZF6s0?qdăU"-&;d5l5F*6mo0BF<jCQ6u'ER<c6rERRhhpm.icCB9-3BfN&B[G:Kh;%j&Q<:B?TăU"O)3B*[kEYswQDCC3XdX,gA4ic4r48SrYbkULyT%sUT+X\>qmOcV2jei?4Wa%=/]ăU"f5(KC/9i*;XO2bmgaQ,r,?#%G/&n2RI(5ya8Hy'wd6i/DTqt3/+UeHP*G;^8WR9ăU"S0>A_IwFlsBD?PUhMRd1E)\L;9oFrMfUm9Iif6eqg\8Qyj-BaCdMce5;q0o%=_3ăU"C>Iq'i.e61;0G]>y0\#FO8Vo0_L\kd-3jbIuze=7/ho^Fsd.*;N\4?_g+-QEWY%ăU"ck(3s'W>aO$ULK>:]6b+)Qf?S-/nr-4%#flw9ibUBKJo4[_:2kpng2ioO]cHM>3ăU"q*\[bZbFV'gHrIV%c/B:]*maauFdMG;&<#y[DE0&cQo;<w;t5RjW+F%s8R7Ro02ăU"X2Z22tbS^&6.&<:jFD#Tefj+0^lZsw\3lhG]Ah>WP]g\[/'U2MVr=X8kFQjja8văU"ijVxxk_XYoQDMvv6uV6?95c?RV#LCqjrM*/iq:l,0V7ivOVB(7+SpPhQG-'n[HMăU"=wr[Sc-e=mp9IH_TndZW[\E9spagc?o]/M8E0:ihQhdmt)9T'O+ZbDD#JH2qrr/ăU"4CiFDd9Srtz4>oWZJ4WWl:6D9vB&wCxBmCtg'i=B>&W^(n<Kd^=t/ZbT]fQ(j1răU"x+A^LdcUo>x]<-VAc3C^W3/I9GC]#cG<o/kWJMlJup\$'GrZOQa0Z^4i2-7v_Z/ăU"fprxT0mO#clmo^?1k</k?Hs&v[Th(A2rCjOeCJ6R.leVo+T;t)%\X$XR$$lk(35ăU"]$9:%&#0/,^bD3(GW2q(e=F_wuFjD?#^<Qgx'IuP:A+:YxlCD\q5misic>'OK0păU"f0Pj2BYt%1&Mk85UI/jU/G5Y)C(=S;Su4pYAGpzuM7Svdlrt++2nuV>^,,sIq_GăU"bZ=fRmW+Ro5WRm<gaId/pI,m;;4b?\Ioxa*;8$/glH/$Ei#B#\-Auw>yqZb[a2răU"AP5Ve7CMH_+;zegB:#H-1$58o*FM^jQBTo>ASO/CFDJpGumq_#p.=H*#o^]TzZlăU"&il'uW0pqq^LQ4J73*k9iLjIo<ehI8Q:FmiObn+\'WqWe6f$S0oK[6Zs=i]BR8YăU"D'/Zl%n$Cd=Q&gX$X?wA\#$lq)\7v./6,Mg8vQc'Ei2u(=en$x06lrc-iD\[iTsăU"[jAR,2&e]&Nsqa5Hk7GE[5'GKMp1k$$YI4nv*kMUXES6b;%ai1G13gchY^6D#\AăU"RSKq79h86+iRVewC\9//M&Im;zr0A??\dAc[1&$Se,1U'%S-^Q^R6mbf;xGUGkyăU"%SG><ENB#$$vQ\i^vZ/j(]_Vp#mQEQ++T&qU:6SO4q2br/2>5KBskpFKHa\v-4uăU"#)D)FlcmxLqvhY:T:&60XQ[bbI8);+9rVF.$ZVe97g[M-d4O):foi7[q[H2at0eăU"B1/rqND',oDdmkE.k.yc#o7BDp\4=.OTXZB'd+j787O,MV8?E#1-KX8hY$1soZDăU"$IrS2s/NGDBliXipc_J$XL;Wilh6,?e/Yl]S$roubZZZs&TbLn[j[]Ys2d2%%:wăU"t0exy>tvm%t6Io#yAsv\fa>bl50Jh_Fe8Q_AN\XGfWuDZBHu*_nNbDK&[(L'x4[ăU"3#+AWQbyEP]nJ\9oE\?B)sY&NssbRv&aY=cKiHL#IbYY>Ki$?fhhdaX(jKI]*K6ăU"SOtrl2h5OwZV=UDFwl4R+jgkm0Ixbsf-7(qS:s?bTeeIs.^*.XPPb7,XTqaS3iVăU"]RGKkZ^>Sm1+Iz.XeO^.&a('8yAdz8v=/K>fs]_N6JBcraW$H]l6-#)d6=3LtXNăU"LU>N&.yLvjt-F_WEvYF>G_LXim5IS4o<xN)D&i$t[[bMMsLYD,$,x/kAcxiE+t(ăU";Czx->Lw2Y+4GuWK<vL];=0.;8^ddmfK(VDk%7&,zAx9Z<b:VHre]%9[%Ys[O8#ăU"lc?91'Z4Akk1oRyOqeZYTXv&7l6Tc;hubqLIs>/hX6d%J$ap.=dt\gXK*B?HmfLăU"OtF,v2Cj5odCbru;u3t&\qzjK<1nef,cs>(CYu8[k>hXSr=2esto?kM,PRz&2bbăU"^L7LYkp.uzVL;Q%va:AJaW$u'ICQjuvuG\YxZY5K,1nUtV++r3UYP8QHqAo[$RgăU"WHnLCRHRXofY;WevT-57]poNEx4$J0OZA%ONLna]>g;+Lt66nTK:H;9pKk$-KXqăU"^/d/lNQ&WTmf;;j-iQYZp:Q=A>Zsu*Z$(^B8RlwS?6SO%rmo;f,_+^Uf_ehhRlwăU"L6K-*Gm51w&$2FusGkO1XiE*u5vKSn70T90?7<4TGlb<#Vi$s\D0NPMGkChYj3SăU"buZQ=KZez=IwZ6ClV=hk>YU\ok8SH2612S8*dMI7IqsHMGMRL(ert[W(X,6vCKlăU":6JM9xZYt30S+XZ?*B%Y4l*P(lGS(eFULQf:tUq6ov=Hv>cY0liWAji$YJJTSnNăU"Rv[$0*m,rs%nwL$+'mY#73]O-GGoNFn7QiJlv#q-?M&=A+<*7YgLHul^/gM(COXăU"p]:\BZGtNcyA'nx_N\2%g$(ZRFq[^rY=dbSxj[7Xs+RmYHMQArb=zXLB$JvW#U>ăU"<HO%2dtHK]va/;I6GMT64GLnO(o:kxR(f3b56mJ9t,bLq(7.Urzg(IPJ66hk7#2ăU"GkPXOcd;.x.E::1bY=G62O&MOO7t4X5mfxsqu+/Sshf_wC8gI\k#Ri,bVFmQGiZăU"z6slRpw8wXMJ?#^[>AQt%Y9LW/hbP#cD(nQ3WYqpRZ<XNi&IBU_3Y,BP5KrSWRdăU"X,GO?7$#_8U'nNokYT#sV'__LXQV,k.aQT<w[\,Z=LADi155HnGo^n[QG95hccRăU"kgaat#pLKGNlN<+)BiXo4bEx%,n2&Es+ZP2u-s[xht;qY*#Mzs:Aa5$FZg,HMX4ăU"tiR#4d9U%D'0IY:DiKAU$8eXHg4^=llf1+Z;(=kjlB3_vf,/BCWiP],TeqV=wc,ăU"c)>*H54F5]A1rh]$H5A828Yzt>D,uN4(UBzKs)aUU+&l+t\r,tcWaAs[QV#hkCMăU"Ja'0.y0J3.GvF^]na;/E$amc'Ao1&23QdmWvn;H7e==EJQd9^/#X26?tcIjk4-.ăU"FP6(7*flAaQ;X'p*SX,r$uUbR>N(oF6Bq%kJ*M)EJ:InT+dhhX-.m/>mkXEFY]=ăU"P.x6M=O:p(vf5%Ogs^oh]AZ,?n2;ueUEGmfxagYIOjjqLmd65MqO6)W1mt6'Ru$ăU"Ch9\erCF-jluvCx7]Dh??WHM6llA).$FckV35E:^S_XTP3jy6h4,YnX%1_-9'j?ăEND SUBăSUB V4ăU"bo,tF2q85wZxlZ-$MBZ_MJQ='FMX3lO,R=OMK$VLYGasZ:<SfuZY*LMZ?3t[VLdăU"1L?oZhd$sW3Q>Vm$HNOdu7KapE5(1o)v<?FoQ_QQa^HiM&FbO_:+\A[uUV4U0FRăU");cPFxqb:nj=,HVp)0Z?_rjxDdnwlnlnilTRX+r-Gm3t$b?V%7(8M&l5$[Gd51<ăU"xasjBA'm*DoG39$VA_L+K=5W#D;L[\4uEi\,O1i[d>WQUwj93;aKk)nefZg*8)?ăU"GOGmo#6%nP1J>aC0_+SPKW5%L]XV):\B?h_5m2P;ncy\oNRLujK2'Nl+[W.kP2uăU"86uXvAvy4AouYeQMC+$qoia7Hacu5uscs\#q9Nq<#D=Hp;MPT(4IjO$\n^]<'DKăU">-6qG8ub\Y$M+q^yOIhbLwO7_.V77%Yyj=upTAN)vH+*#g9KKEOAWlcD%k%L8boăU":T2'+9Pb]G?q3tau\v3Zn#m7qeMvjkc<R$#Gj?f0k$[9;HOp&eVa5pGh=_AoUdwăU"jh^nKuI.BN/?tq\tWGlNm&]Cfwhb6o][&1pY\K$ket&kI8U9C+KPKGTO-$gx2rYăU"Ixa5-SBcldnAc-9utGH<%+(l&V,2Bb?+Z?3+%AW/GQ]tns\R&NG47SX%'Fj\j)văU"=WHm*(<EwK_BPge^M&m=Qtq^;bn).8%tc^,0Y1W$b1Zfq_-WQ&IpcVQ5jHYTkR\ăU"(\/Fk,)_zVxH[N/A1fGllcU1nqc%,s<]*Nm66TtUH6gu=m/i9?/u1I2)#mYX&JmăU"0#:K(KW7U$cRXGjDHmtPvx.T_h7ZGRPfqDchrn[7b#<a'I%sA'TQXTPF4zyA*k)ăU"195nsyE68A<ou99L6?v?hg4BaH[$M\/XQRlba_Q>6t%usWmd4#Q;figR]q^c-*JăU"&2z1C-I-kt3JIpu<Ehi4oX#W/aUgm9KlmicLWs9T4Hy*e<<O>PZx,LxSV[k3lN^ăU"=ubBD.cLnt;K%f<8JA#RT9YPv(U?N9=kdQ5.R7-0bEO1Q<U6dA52YzO'm.d=QqQăU"x-h)&1c?6eNFez?Ts(bnp$M#u_SD[94Fuiw?j?L*[C+7x8aKb$mmHKQo-L)&w>măU"91gnuwA^e$^6kZ?lN/>6qeKKT0o\EeQO8L]94,F<.q_=^Q9)R&W=0)TP4vOO4S/ăU"'=IRC\%9[AkR[9DGSxs3:C][=itLBup=oKX.A&EwufC-E*tRo3X%yk$6rHVo46MăU"%VWRK=xdA3X4.[\vhigOOGTE8d^/;Ar$EX'1XTNncO$YF34:H=(f[A7$M>\(;5DăU"g+a-AcVj=/a9U43:4G(3EB^T<M+P#5TEKxA:-lkR*kb,o81ae4pWJV78N,8vt6<ăU")o0ZCEEpDAulcm3rWTmBtiYA?ACd4?i(N]e.,:XX<E*.oH&_a.zggy=;m'S-7BTăU"j^90#]3lK$I]2-*CIS[,4Y(q;Erv]>'4__9/How:<K\r3>\ZWKoJ1W[,S+$GRx3ăU")q<Vq/tfBYC,JKPX<U:$h.3Pbr=jGPmBSyM'JHz8;ng-5s(MRy7kK<7VU.H$CSIăU"U9J/t$$ECdgKRYnR%jaRq^*e;E8^Im;Cd=[/iGic]lPmm;6]&2TAHNi#(2dtLf:ăU"$?D(L<[JqDk5.Dco5g,GPdQ2YRNljb:-d=b)4h_+dc/0%)BRnhckRZ0eU98ZWe+ăU"gW9ZGiV:\UVGTAk5'sE1\bbG;,fBM[WD'[.1rXBa5:Kc]95W8w>Yo[+VdqPioFPăU"qj?Wq2nEZgkd=qV#ih4b2psw*K;iP1,d$b%HYBDfhz#hEGzqs8i[rlrL?-\rHuKăU"OWRJ17Jd#Ji955W?n-4=+DPs:AgMW*b>z'^(7i/vOZRORAXVq^mD]eFS_(&#X22ăU"1%F&=lmw[P]Ax5\&,.W:gX3DScH)oix]U:V>Tp0?zlgqWD'ch8ic3c2%[ucud;găU"(m^c=CSc#fYW*':fKX1$]L>D-PBP5E[x_kC[8^\3?oPZ3K^h$a.tM=[cDPqF&UDăU"jn5M^j'i2V/ZCRc*7nJ7l<a3hF5:WbF79PXY5JQ.<i3g?*EQa;BKX+)F5'<jN[tăU"%*5b-mg9.iV,^83kGz\)(z8$;NnRe?K)EqI2._35)*9Xk#-C*lLRA*6:q9kdPkJăU"%B16Z&&,tr]#%AZ1j/^5Mb9qP8_pdMcA4MP#NLo\J#Jk$t.Q+0w.0J?=GHCP%$tăU"tA2/9\h^n\q*;]rN\G;W$usZ;pvLC^.S3,Gb$z;CBY&bp'Ra,)ru%Ms.d7,vb6;ăU"S1Y6F*'G(-J/0haW+\ue)t3V[\-nZWV#nMJ^TpQ<0+OX1WOMDc0u_[sQ<)mLB10ăU"X_4SHUx?%,;-JMo_JGuB0\SE2(6Q9wMJ*4G$$'?jJVm[;1*KNE,;M,flaAnC.FFăU",*SlOeSIa\fuL8g;?1-I^#<hsv2B(9>TN=h&LvkTGQ/W(x5ak:NU=ls6OWhnll'ăU"O)=UJ\0_/_AYjK]z^U0:-W6A\PGhWK1Z1WwYHXn/SnfPiF'vaTsf*rBf:gfe?-hăU"=nD.2-18Jq=\nnH=TBO3Y\R,)t-\'=ECK,EHhcn?4f$r8#/W_5vJ89l)bCa>hirăU"#Qbk6()BOUN<d%hZoV=F4HAan0x&;drZlBGu%n(0ohPT>tM'?<lin]>G#.I27TGăU"PSc;0LU2Ma8]JJhoiE3(O,Z-KwYct\VHs8O<h/iD0F]>&m.5MUXyr3V_g&o>:XeăU">WQA.HlYVEku_+0GHZ)uZ9)YB?=gD\pRr7sowBj)LKM\RcWLbKga7guU9hscueDăU"-S6^B4E<TcOHue-L$\lhkNdJtdspJb+,cJ#Q's*SReFB2DgvbglTIBLL(OJA^7hăU"k>[7qRkD?)E5nEQN1pptn$b*#Q5ug%Ep16e)vcs,<pjrbXVJ<xm7-Qh;o0uOshXăU"QX$;&l#qRX_Q\Rs#%8#kkw;^60Hz<L/ffj4%(g9^T(Vo4pusB&#kn>IJ\nDXjB#ăU"=X)BivDM5_id3,A1\$>h28J?^L[,0>6*ZN(J71fLyXjfSL9P:,EK2nnu^uuvss=ăU"'7D*jsh9ql%vIwnT4S(ELV,hHH\Vf3'6$ajM$5XQw7whTZC9Gg.MED77*[?^h+JăU"LCJEB</opchgF>mfYv9R<n6]H>B_vc3&gv+gmL?Hr;W]DVO+<x?TuqY1oPnVmrjăU"/aLY=rmEu?X((-h(T)=.jtl5MJmB[H1C-9RLBAK>/M/*N*t_\*S7R]EVOS]t6k?ăU"1(Jjh8-w(wY=kTwM'7V-M5OB^EEjoxu'u6W:]N>r13/dJ9i1K4DF4?F&.?DI=dsăU"5Rpd2_uHYaqLuH=pk]d*D-\f4oOX&SKT-9U(1)$BDF56UpxUEW<tn7y2KgO=#Y0ăU"P<4)4FJC4q7x[70Hmn7tlt[nYj[hi\58$\(^]R<1XO=OiO2CWU<a1:sR:oL78$xăU"PerZ?okp.iqP-+P3]k$(H[eWL*U_4[7Th$d;W2'o#c+96CA18(>-Qaz3#e3g69tăU"^pK>^SX:Z8&P>ThJn7CH>0fYb2Si#(PzRI,'\J4M&^2abg,Yss^?b-m'6TjM1fXăU"=T8jf6tvNu%p()9%%%%-4%kGRpFE..*p1&%+%+'%%%/%%%%wjf%irjSCy'y<PaFăU"=zdU5Tpsm5<5geHOgCmowC%hpx;HNVr/L-%[\B?k6jgcJ<lg<,,(jkqK\C^B]r/ăU"9q\(*:\9VP)F?l&oe[B[o.>LZ\^9)ZX\a\7mgDi\/ZY;n';PJp7kLp4QrJOEv6yăU"b/%)bC<ZPCK\#9lT?6bmMp#w.+RM9Q]eo:aEEdu_sJ.Un&>?nb-F(d#2lh=7PO>ăU"BO+0$[#yqsNk\XlZY9sFJOVps9ajW7[bC]lxCA5%Yw#8Qf,:M)P=nhs4IGSzOXtăU"mJo+Go-u&_RC(ZytN3(s,Oe$CCi<luox&'Sp%.(L*4851ioRsVeCA,kRYPksHs'ăU";u$cS.T-m4aNWD2f6tBdrRP^8RA6-Yr2DzFcK?xjS-5uStd(J?>:q;8-%GJq1(+ăU"IlH4gFt:,t5ZiF$*>^l<Hh1%A9KTlC8&MROjP3#lrmu8;gN(ff[9WFPEqjM%&upăU"&%'9%9%%%%-7%&)Q[F[rr*v/'%+%B*%%%-%%%%%%%%%&%E%%%%%%%%%q%fsiS%găU"fxu%p&'9%%9%%%%-%rB'QFX<n5PR%%%%f%%%%0%%%%%%%%%&%%E%%(%U'%%%rfpăU"%jhtr%Sgfy%up&'%9%/%%%%%%,k&QFa,2Th%[%%%%[%%%%0%%%%%%%%%&%E%7%%ăU"U'%%%qf%siht%rSif%yup&%'9%9%%%%-1%$zQLFm:*)p4%%%%\'%%%0%%%%%%%%ăU"%%%E%%%%$%(%%u%fqjy%yjSi%fyup%&'9%%9%%%d-%''[QF%*<cZib[%%%s%%%-ăU"%%%%%%%%%%%%E%%%'B(%%%qfsi%Sify%up&'%9%9%%%%-%,*'QF19nqZ'oc%%,<ăU"u%%%-%%%%%%%%%%%E%7%%Xf%%%qf%siSh%trup%&'9%%9%%%R-%kGdRFE.6.p1&ăU"7%%+'%%%/%%%%%%%%%&%%E%%%*tO%%%wjfi%rjSy&'yup%*+%%%%%,%.,%T&I%%ăU"TQ%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=91AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMatt Zuchowski                 PARALLAX SCROLLING             liphilli@flemingc.on.ca        12-15-96 (15:30)       QB, QBasic, PDS        97   6380     PARALLAX.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLL.ZIP",4^6:Z&=4512:?STRING$(50,177);ăU"%up()%9%'%[-%G)nWF62)lq+/%%%<L%%%,%%%%fw%hmSVO[f(N8;xP:H7?J-dl7ăU"vd^_o)e+OuMBEN/B_KMRH(j[?S;&w[/BWS9&O#WEX[_TcK=nf:&V(;'LJ[#?&E\ăU"/evqXZ:;sPO6N)jrdoL.;?5;J*GQNeofrQ45#M$Q$Y6nMJ\G2S7gL9ubW$HXD$UăU"JTg^#nmTnxj/*gcr&8;$*K7k;qUlw?>YSei>E4^LuHHc_CZnr/af'B,il*\ph&KăU"NGiNFgn&'Oyo$jaQ?bNfaVLBJ2,:i8'B)?Oq9qbTR-RBZoV#[c#k3<j[Bk]U3dwăU"Mb/S^cLJz&t;qfiY&pnEf)Fb_\$k[uYE1fTXZ4Q_rDbk^Q^B73[wW?l_^]keuioăU"[YuWf>Lqyr>L=Kg3WoFPgjD4iW72i5s?Yu1#[6X,LkbG9y1)0aSXI3C+u&Hr]riăU"lu?ua#qK[b0=>=#ch]L<F-Zm-rW<G=:*<(LlT:/olrZU4a))]F+uptJ?k2U5?=eăU"gE&ugE&G]SA<<J'.5#J+GXiIaU%'r[fShK4pUmj[EoqaE$s49*NipPbCg-CO\BcăU"+]gh*V/SZa0<Z-:N,l09n/V(]hR8<i8[Q+q:Iq$NM$5F*e#y69790iQ^fXARt,.ăU"2P8,%5gcWBWgO0\X<YfB$fU5^$W^%(-H9Y,h&i/Q?ZH;a9n=Qd[W:[jG?5,?R0wăU"Hn;Q85Rcg#MIHB\V?:w99FPYh.OKb^K&XC+<t.Ud,&iLr=)LD4;RQ0F:/-kv/K,ăU"^X3x=M4Iz4?eZHKQ%\&-i<p=/nRm%?l,,VPc*/.$[L0WI[22K0f9nBV=T2AO/39ăU"uKqt19P&\pku?v>fEiZUNmF/LQaj1cnesDvbp]\*>U=N.XT'q)F+xx#]BJ\nh?)ăU"<3bSU;ENM7ZDJHEc_cS$^vC37EG&4C^1aoC/-prWS0&j]rUA08BM,f_>Gwo^LiuăU"%etEdq'.N(UvLQ01Q4.%lPX^rO0n0LE6Va5iO2ZPT<aDVkxQSdrt.>lK:hyulq[ăU"Eq.lUNCWt6E=cCx&]cD*d)0LbUBQ?sh#O>XE/?vLruqL%$H3d=G;cO(8P:D\j0băU"yHsE%t0Co0=32<mbh$ps__HxH7cd3tV$]O;nSt\D?N#NJOj#U-G#3xcxw98;NQ1ăU"cHf(:b$]*nrl.<BjQuorzJ-aN8Yy(1]W>NrDu8dx8oTdalkfpXh*pd^eV^TWrrWăU"TWgiUM>\;rFYl^I-qeqKvaU_QBj$K_.$-X-%0<V-v0B_-6jO?W;WgD-]aDW.vpXăU"?VWWL>M\fZA\iMbp[F>;6:O?]:]Wo1SN-8LtC7]b4zLfD5)jZ8YNs_JknCSK=ZvăU"*d;vq0+s(Bgd1#PFU(1.^*Z5l4>HH2_BuCj8vYL^PMg,JB>H'%ttB03Ki4w\JGFăU"?7(.igLH#o_vPDscp_a?Di4Or*t\?sTLO9*v#Q0nG^d.b>8_RF?)dF]Q1,%F&o/ăU"e;TKNGT#\G*\2smFbuPKTe-9.oqYW-;S&<M:a&hvfeVa)6-Tjf3WHSKtZv*dVT&ăU"&5Q)0N_dl,;*0'A?SHdVSdEbs%&5\QHg$H^+8,MNg7\T&Wf8O3G](mH-t$BQ5*KăU"ZV76xU+:50j12R#2q6B(?k#*FF/qJjP)P&)_2:Mf]bt+Fac19ZO8H^2qW.$dqF^ăU"sZYbtFpXLjrU&$M4Q:bQssXti(/Xha5Cl.XGZ8Ak1T9\8\tV4aqr#Q-t)Mn2+.6ăU"\vn>5(bOc+5i9Sq27;?<8UX'S'/Hl6)7QFVMl(JbLnjuON[O6a(?4pqIC$=otb&ăU"HsU&(kt-1p\n^W3xFhwDR8JbNKQWhP&jU].\o^o1pgxdVZHw8eul#&9faFW,pPJăU"QnQ+Fx_d6002cAL.tQutx4?b_$m\XZ[V?o84<wL^eqOk.45PP%;nO6txQunIYUdăU"d.$2D5b)N*ahu_8>IS=s];j80m<hu2$WCm.8NB-pVlfNGd#LNQbNkdbuxTxA+&oăU"5dL94%bhQ%N$sVm8G,Jixpp_px#QZ6m-lHqi:N8Q0L)l.[56As:>ZQu'$oiQfBiăU"kmtM]8Ahv>:5%ZW$6*>8G4=dl3ti>AF\fMm91X8U_.XFgKZZHpDOq#gC)b>Bgh#ăU"OS&U].f$(ZTl+17j=6A8$QbH1&f[QMxnB1rPWrf/;3D16n=:m8Xs5*iYRP58QLFăU"M\fsRfL&>Qa1%BvdF&(F]i+]uP=O-Pr>xnBZk\Y2Ix^)la;d8K([xsU=(lXPt&GăU"aieNAYNr.+>Dvl'$q&U%Z(l.=7PCJus&nxaKoAn)+,w:1rszj+e4]6X9S.rTW6căU"\fqNWs<jVc^?p\].[X6HGSuq#0$$quY%N(/W.$$&Y$BePL2owt$4RP%5QFvxZM$ăU"<qAwumr()Kw,N)$x%OvMNjfCcrG;-QOx4iqLhOx*=JW^ue?wpd1XNQfXArwh:K_ăU"Ttrwp^PHKN]HjuZM-_]ASsFvHP7lNbd<#wxOpTfn]W)ZmN^rMdmcv:VcZ8?PDc^ăU"fnxm>tsHsVc8?pT8DZ=GKxm0WDlD3#wN?D.NWVpl_wt9labd<#wxOUT,TA9QnsDăU"QPO^:Wd:5NjqWmmbnrLvT$=n.u\dQs:29us1RMv;sdjWb\HjHvb6u2M_N]vxpz-ăU"'Ec$<fsk>]HK_N]vxgZM=7emAsxbaf4nVn2MNq\.DO9x0cd9TDbd<#wx?r8i>XoăU"_wsX>xn(x$dNLnsdT8O]xHYt:6)x8ZhZow*x#Zdm/kvPhGDLI>N/89Tcd#wTx?8ăU"[rRbw,TuuxAt[s(kW+eRb?w,uI+vx^kZvPqIn5tsHiq*wxUArw:VKO^nWmn^fimăU"n2MhN\Nbt7WwpbwxQ7;ZwxAkrwz5V;0oscxEdbjd#wxj?8eNFDbdZP^mn2NMN\NăU";YlXfWMN_nimn2MVN\(4cdhfvY6w(riwB[sZ(k+To&tsHWubwBk[srj;\;v8>wxăU"EdTbd#wTx?8Q$^ND_PnjRwfxArwG:u+5?(bx(ibN^OoXC&xeDcwnmddX<cSrDOWăU"Gnmn_lNTcad\nxR^kv&kH2[N<x-Md?\'XD^*KB,r8YsHPGKN]FvxZMF.,dx$cnhăU"LLdVuNu=P$f\l,uxbhxsM_N]vxpz-3QrssxpPw8METw7nnorLv$j=n.\>dl4t$văU"fDdZx#s>Rauv&BncIC9vTY:rvVwqZRVm.F;kz+Zx<jC?fVmDoGt$DH2wppuc6)#ăU";^?v,Nx.e9ix\3qSr$inc]s4xuxX>uTx(q1c'pu8j_h3dox?wxlxd+XD$6=eFOYăU"D1QdhOOhYgNuot'#q2FNlDcBOdwZ8xpvY^xwf,Nv0u%p()9%%'%-R%9/W=FpCI'ăU"Y+&%%%<L%%%,%%%%rfx%pSV[HfPV=&SU9)%uQ/oK$+cJI1sabGs)ta?,IhJ&K)oăU"/f+d[PSorbX<-Seq,0vL\kO7S_?dsWYh>f^_T,vGm45P2=EPrtS>lZ-.7\XZ3D2ăU":X=F;;C2>V*.#fZCr#*Qh6CaUo=6P(%FOF,1L<]R6Cd2<?O,]O6CZLy<f<M?_4(ăU"AMJPYSqMC#k#2^j3GLQ\;MYLTo5[*U:*((rca#(N4_9X[Y-$jTk9V5H<-LogL$NăU"]+\u^4R7k$UB5(XXW+pR:L<K<ji03PmnQt[TC_.K$AS4BoTtG/<_DG[\=j0r34QăU"Vbc=JFtvC30JMn6tVZQcD+QDo+QDkYn/k.'k2up%()9%%'%-%1OT^FfN4Wg&9*%ăU"%'I5%%%/%%%%xhwt%qqSgRfx.&2*>jm^9Ml[Ldk)$G1h_gDZbY%N0).?,\c0*6KăU"T9DLKG;r[1q)1t]pPhKEe;?Pob%,[C7]0ihkhhfEA^EZZ-hgcYW39En2oW4W>z9ăU"JiR(yTI^:IebN4bWu;m43Wn(hn=^/_aCmT73+F:+WgSr\8oDt#W&Hl)pz*H]MITăU"KU;aJ&k)-4deDMtbfFDejErYihYX4qQF]QpXDUp<.I^UgSsUH7mloZiJ'L?<=1YăU"JGJsi?,NRk,(#HnyQ3HZsgtalt:s?;,NRbglftZ$MdJTuZtL)#.k.UR)8evb_qVăU"?F6=]p)3j+YBcZ3eei'/adOaQ'nyl*GW=&V6,1\E[XS2QicT0quAf+</QuV2hcFăU"a7D=7xDOO6xMV^P5]G=cW9ZpQkev4RUO\=V$+)>_#0-$::i9uXI9#L1;S&87pKEăU"A)ho^\XO2ghcr+DAa^DPCZeJF)9i[=SK^UpM2iB0ELU[wG<I34/'v_+nW)x)W1YăU";RlR<TvIJ\i)eB8ie2,<,Y42fU.2>=)G<=/EhX$vr7XV,7i$Y(XL)$tVPNB1h79ăU"YR9u:zmUH3t5/r;Vto#?aVD;,fgpwffWbsG4T;*<,:*Oc'bfl0*2J+uhDKU6uePăU"JXph1'KD73$'TGu$M:b+jGv(;D0sn<*KPh<K.dXL$t:L/AgG&73Cvp7OEV6VT#răU"^BrYwLD7eq8zJUif6OjKU:InSd('q=:.%]u1Z<19Z(o[lbOmLOTwXbPFl2N5*)zăU")r+RzWnHZc6flT5lkb1QTpqI^HUviF-(9kV[G)bkiOuSi]o-GqsUa4OZiN*,A>8ăU"1SGnkM)IgQ]C49#C,ipGniYUCUd_rVB\dI&kqh+ZhPp7Vm-1f38MEsbX-\ecr%năU"x.Ou?6r^16W5Tk/r,nqG-%Q\p;k?'.^ZVCX1tgbgBfYHHZ=^:qyki[lfs)m%(x;ăU"%&9qTtXrn+xfwQe:H8rv$sJ=8%S#&c?O?jvGC65WBEcijJQ6Cm.>yN_k?Bu<[UmăU"nCJ+_6i_.t/02<_6D(r7YL>H;wCRBl+S=CxM'yS;$%$p\PPc;0j62n]VebF;Oy0ăU"6)bH'F-g=AFga3Q4:PlX)bG#j_Q,NI_Wh=(Q(Y=jJL9'RSrYQU.5GN8Li(/nb=BăU"7uU2YOg*4v9[Ka#UC(821Y++u2l<)qT=IC-Y?AA1l&pl-le2%Oqb24#R)eEY)[SăU"gNS/;lVi50L$Cllo%]uP]i2[Uw+E=Q>0_:]PM9AQA$f/.,R(+EbezhbpZ=/VXW+ăU"0dec,[11k&(*#?$9k4N/k09q(6:)v9GKXlCv$9^b#G?iPmLk06(lg58lqT';V'7ăU",H96X<W.f;)+31oFWzovHZe5g'29SU]GQTi=Dn-Hg<<2:-SMIEbO8-i).-+.wA8ăU"aA+Rm%:?Nc<s^ZKFY=472\JjY5LaD_H4Vs(G2c,8SO8>v,0#2m?YLaH7G)h$SE5ăU"ZsDr,#IgLWeq4vRsFlrXYFbhqi8FJVjSH+Fm'?OiZ3(JPT=hm3sud;IqdVe7(cNăU"<p<QZH==03XI6rIrq^]^^RXPidJKEjdr$9(tu<+p,OS4^X&zVnm%>d5)hEt1Kh+ăU"T0YO5BTv55*LVdc#?lD2?A&$>(j31I^aul10OY3c#(prpRS=c5K#,\D0hMEld<_ăU"$CjCO9O5GaC'n:YTtl?U-0(gV[nu6+u#kkxnd_<-w_yifC+W4(.ite9bnk3Fx5yăU"0f5+kUZyRsZO,bOk)>vSb01+.NEtn'*ZYZOPA_CXgOg%:bvL783HwN&%up&'%9%ăU"9%%'%-%4G)WFQ62lq%+/%%%<L%%%,%%%%%%%%%%%E%%%%%%%%%fw%hmSV%[up&%ăU"'9%9%%'%-R%9/W=FpCI'Y+&%%%<L%%%,%%%%%%%%%%%E%%%%P%/%%r%fxpS%V[uăU"p%&'9%%9%'%#-%OT8^FN45Wg9*7%%I5%%%/%%%%%%%%%&%%E%%%&%0%%%xhwt%qăU"qSg%fxup%*+%%%%%(%.(%q%7%%a5%%%%%ăEND SUBăCLOSE:IF S=113AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăKurt Kuzba                     WINTERIZE YOUR SCREEN          FidoNet QUIK_BAS Echo          12-15-96 (00:00)       QB, QBasic, PDS        54   1655     SNOWFALL.BAS'_|_|_|   SNOWFALL.BASă'_|_|_|   This program demonstrates a method of emulating theă'_|_|_|   motion of falling snow in QuickBasic graphics.ă'_|_|_|   Released to   PUBLIC DOMAIN   by Kurt Kuzba (12/15/96)ăTYPE flakedataă   C AS INTEGERă   d AS INTEGERă   x AS INTEGERă   y AS INTEGERăEND TYPEăRANDOMIZE TIMERăC$ = COMMAND$: f% = VAL(C$)ăfore% = 15: change% = 0: rotate% = 0: back% = 33ăIF INSTR(UCASE$(C$), "C") <> 0 THEN change% = -1ăIF f% < 50 THENă   PRINT " USAGE: snow n[flakes 50-5000] /C[confetti]": SYSTEMăEND IFăIF f% > 4999 THEN f% = 4999ăDIM flake(f% + 1) AS flakedataăFOR n% = 0 TO f%ă   flake(n%).C = 0: flake(n%).d = n% MOD 5ă   flake(n%).x = (n% * 3) MOD 200ă   flake(n%).y = (n% * 4) MOD 320ăNEXTăFOR n% = 0 TO 2000ă   SWAP flake(n% MOD f%).x, flake(RND * f%).xă   SWAP flake(n% MOD f%).y, flake(RND * f%).yăNEXTăWHILE INKEY$ <> "": WENDăSCREEN 13ăDEF SEG = &HA000ăFOR void& = 0 TO 63999: POKE void&, 33: NEXTăWHILE INKEY$ = ""ă   FOR n% = 0 TO f%ă      flake(n%).C = flake(n%).C + 1ă      IF flake(n%).C >= flake(n%).d THENă         y% = flake(n%).y: x% = flake(n%).xă         IF x% = 199 THEN nx% = 0:  ELSE nx% = x% + 1ă         IF nx% = 0 THENă            ny% = RND * 319ă         ELSEă            r% = RNDă            ny% = (320 + y% + (r% > .6) - (r% < .4)) MOD 320ă         END IFă         flake(n%).y = ny%: flake(n%).x = nx%ă         PSET (y%, x%), back%: PSET (ny%, nx%), fore%ă         flake(n%).C = 0ă      END IFă   NEXTă   IF change% THENă      rotate% = (rotate% + 1) MOD 2000ă      IF rotate% = 0 THEN back% = fore%: fore% = RND * 15ă   END IFăWEND: SCREEN 0: SYSTEMăMark Warner                    JUPITER BACKGROUND             devilboy@cyberhall.com         12-28-96 (15:59)       QB, QBasic, PDS        76   2540     JUPITER.BAS 'OsCiLlOsCoPe with spiffy bgă'1996 RSSoftă'devilboy@cyberhall.comă'Written on a P166+ w/GoldStar GCDR-540B x4 cdrom drive, sbawe32 cardă'ă'I didn't think qbasic was capable of the speed required to do this.ă'Then I ran across the asm code to do it, ported it to qb, and whaddya know,ă'it is fast enough.  There's not much to it, only a tenny bit of code.ă'Just peeking, poking and port inputs...That's it.ă'NEW Jupiter Looking Background thing, courtesy of \Hack\ on #qbasicăăDIM lin(0 TO 319) AS DOUBLEăDIM saved(0 TO 319) AS DOUBLEăCOMMON SHARED dat AS INTEGER, j AS LONGăăStartUp:ăDEF SEG = &HA000ăRANDOMIZE TIMERăSCREEN 13ăFOR i = 0 TO 255                'set the palette to black whileă        OUT &H3C9, 0            'the screen drawsă        OUT &H3C9, 0ă        OUT &H3C9, 0ăNEXT iăj = 0ăăDrawBG:ăc = 1: p = 1: x = 160: y = 100: s = 100ăDOă        c = c + 1: p = p + 1ă        IF c = 245 THEN c = 1ă        IF p = 64 THEN p = 1ă        CIRCLE (x, y), s, că        PAINT (x, y), c, că        x = x + 1: y = y - 1: s = s - 2ă        IF s < 0 THEN EXIT DOăLOOPăăFOR i& = 63999 TO 0 STEP -1     'plot random stars, the fast way...ă        IF PEEK(i&) <> 0 THEN GOTO blahă        IF PEEK(i&) = INT(RND * 255) THEN POKE i&, RND * 255ăblah: NEXT i&ăăMain:ăDO WHILE r$ = ""                'main loopăOUT &H3C8, 0                    'set palette register to 0ăFOR i = 0 TO 255                'set palette to redă        OUT &H3C9, iă        OUT &H3C9, 0ă        OUT &H3C9, 0ăNEXT iăOUT &H3C8, 0                    'set palette register to 0ăFOR i = 0 TO 255                'set palette to greenă        OUT &H3C9, 0ă        OUT &H3C9, iă        OUT &H3C9, 0ăNEXT iăOUT &H3C8, 0                    'set palette register to 0ăFOR i = 0 TO 255                'set palette to blueă        OUT &H3C9, 0ă        OUT &H3C9, 0ă        OUT &H3C9, iăNEXT iăFOR i = 0 TO 319                                'oscilloscope loopă        OUT &H22C, &H20                         'tell SB you want a byteăl1: IF INP(&H22E) = 127 THEN GOTO l1            'if byte null, wait till not nullă        dat = ((INP(&H22A) * 1) MOD 50) + 50    'get byte, scaleă        lin(i) = PEEK((dat * 320) + i)          'get old pixelă        saved(i) = dat                          'save old pixel to arrayă        POKE (dat * 320) + i, 250               'poke byteă        IF i <> 319 THEN POKE (saved(i + 1) * 320) + i + 1, lin(i + 1) 'restore old pixelăNEXT iăr$ = INKEY$ăLOOPăSCREEN 0ăWIDTH 80, 25ăMark Warner                    CLOCK-LIKE DIGITS              devilboy@cyberhall.com         12-29-96 (18:36)       QB, QBasic, PDS        66   2934     DIGITS.BAS  DECLARE SUB Digits (x%, y%, Digit%, HiCol%, LowCol%)ăDEFINT A-ZăSCREEN 13ăăh% = 0: i% = 0: j% = 0: k% = 0: l% = 0: m% = 0ăc1% = 12ăc2% = 230ăDO WHILE r$ = ""ă        h% = h% + 1ă        IF h% > 9 THEN h% = 0: i% = i% + 1ă        IF i% > 9 THEN i% = 0: j% = j% + 1ă        IF j% > 9 THEN j% = 0: k% = k% + 1ă        IF k% > 9 THEN k% = 0: l% = l% + 1ă        IF l% > 9 THEN l% = 0: m% = m% + 1ă        IF m% > 9 THEN SLEEPă        Digits 228, 0, m%, c1%, c2%ă        Digits 240, 0, l%, c1%, c2%ă        Digits 252, 0, k%, c1%, c2%ă        Digits 264, 0, j%, c1%, c2%ă        Digits 276, 0, i%, c1%, c2%ă        Digits 288, 0, h%, c1%, c2%ă        total& = m% * 100000 + l% * 10000 + k% * 1000 + j% * 100 + i% * 10 + hă        r$ = INKEY$ăLOOPăăăDEFSNG A-ZăSUB Digits (x%, y%, Digit%, HiCol%, LowCol%)ă'x% is the x coord for the upper left-hand corner of the digită'y% is the y coord for the upper left-hand corner of the digită'digit% is the number to be written to the screenă'HiCol% is the color of the "high" segmentsă'LowCol% is the color of the "low" segmentsă'ă'Layout of seven-segment display:ă'         aă'        ___ă'       |   | bă'    f  | g |ă'        ---ă'       |   | că'    e  | d |ă'        ---ă'         ă'ăIF ABS(Digit%) = 0 THEN A% = 1: B% = 1: C% = 1: D% = 1: E% = 1: F% = 1: G% = 0ăIF ABS(Digit%) = 1 THEN A% = 0: B% = 1: C% = 1: D% = 0: E% = 0: F% = 0: G% = 0ăIF ABS(Digit%) = 2 THEN A% = 1: B% = 1: C% = 0: D% = 1: E% = 1: F% = 0: G% = 1ăIF ABS(Digit%) = 3 THEN A% = 1: B% = 1: C% = 1: D% = 1: E% = 0: F% = 0: G% = 1ăIF ABS(Digit%) = 4 THEN A% = 0: B% = 1: C% = 1: D% = 0: E% = 0: F% = 1: G% = 1ăIF ABS(Digit%) = 5 THEN A% = 1: B% = 0: C% = 1: D% = 1: E% = 0: F% = 1: G% = 1ăIF ABS(Digit%) = 6 THEN A% = 1: B% = 0: C% = 1: D% = 1: E% = 1: F% = 1: G% = 1ăIF ABS(Digit%) = 7 THEN A% = 1: B% = 1: C% = 1: D% = 0: E% = 0: F% = 1: G% = 0ăIF ABS(Digit%) = 8 THEN A% = 1: B% = 1: C% = 1: D% = 1: E% = 1: F% = 1: G% = 1ăIF ABS(Digit%) = 9 THEN A% = 1: B% = 1: C% = 1: D% = 1: E% = 0: F% = 1: G% = 1ăIF ABS(Digit%) > 9 OR Digit% < -9 THEN EXIT SUBăăIF A% = 1 THEN LINE (x% + 1, y% + 1)-(x% + 9, y% + 1), HiCol% ELSE LINE (x% + 1, y + 1)-(x% + 9, y% + 1), LowCol%ăIF B% = 1 THEN LINE (x% + 10, y% + 2)-(x% + 10, y% + 9), HiCol% ELSE LINE (x% + 10, y% + 2)-(x% + 10, y% + 9), LowCol%ăIF C% = 1 THEN LINE (x% + 10, y% + 11)-(x% + 10, y% + 19), HiCol% ELSE LINE (x% + 10, y% + 11)-(x% + 10, y% + 19), LowCol%ăIF D% = 1 THEN LINE (x% + 1, y% + 20)-(x% + 9, y% + 20), HiCol% ELSE LINE (x% + 1, y% + 20)-(x% + 9, y% + 20), LowCol%ăIF E% = 1 THEN LINE (x%, y% + 11)-(x%, y% + 19), HiCol% ELSE LINE (x%, y% + 11)-(x%, y% + 19), LowCol%ăIF F% = 1 THEN LINE (x%, y% + 2)-(x%, y% + 9), HiCol% ELSE LINE (x%, y% + 2)-(x%, y% + 9), LowCol%ăIF G% = 1 THEN LINE (x% + 1, y% + 10)-(x% + 9, y% + 10), HiCol% ELSE LINE (x% + 1, y% + 10)-(x% + 9, y% + 10), LowCol%ăăEND SUBăMike Taylor                    TI-EMULATOR                    m-17319@mailbox.swipnet.se     12-30-96 (12:03)       QB, QBasic, PDS        29   533      TI-EMU.BAS  'This is just a bad excuse for a ti-emulatoră'It's most probably not usable for anything.ă'If you do find any purpose for it, don't let me know...ăăDIM y(1 TO 100)ăDIM ly(1 TO 100)ăCONST pi = 3.1415ă'Start configăăXMin = -360ăXMax = 360ăYMin = -360ăYMax = 360ăXStep = 1ăă'End configăSCREEN 12ăWINDOW SCREEN (XMin, YMin)-(XMax, YMax)ăFOR x = XMin TO XMax STEP XStepă'Start yăăy(1) = SIN(x * (pi / 180)) * 180ăă'End yăFOR yn = 1 TO 100ăLINE (x - XStep, ly(yn))-(x, y(yn)), 15ăly(yn) = y(yn)ăNEXT ynăNEXT xăThomas Matysik                 CHANGE FONT IMAGE SIZE         Check TEXT.ABC for BIGHIYA.BAS 01-09-97 (16:15)       QB, QBasic, PDS        76   2726     TEXT.BAS    'After seeing the BIGHIYA.BAS program that Denis Boyles posted, Iă'thought that it should be quite easy to change the program so that ită'would display text in different sizes anywhere on the graphics screen.ă'This program will print text in any size that is a multiple of 8, withă'different possible sizes for x and y, in several different styles, andă'in any colour.ăă'* TEXT.BAS *`ă'* by Thomas Matysik *`ă'* Released to Public Domain Jan 9, 1997 *`ăă'X version 1.0 Xăă'  This program uses the BIOS's CGA ROM font to print out characters anyă'  size which is a multiple of 8 pixels, anywhere on the graphics screen.ăă'  Based on Denis Boyles BIGHIYA.BAS program.ăăăDECLARE SUB PrintText (text$, x1%, y1%, horzsize%, vertsize%, Style%, colr%)ăSCREEN 12ăăCLSăPrintText "Hello,world! style 0", 0, 0, 4, 4, 0, 9ăPrintText "Hello,world! style 1", 0, 32, 4, 4, 1, 10ăPrintText "Hello,world! style 2", 0, 64, 4, 4, 2, 11ăPrintText "Hello,world! style 3", 0, 96, 4, 4, 3, 12ăPrintText "Hello,world! style 4", 0, 128, 4, 4, 4, 14ăăDEFINT A-Zăă' This routine prints the BIOS's CGA font on the screen in any size thată' is a multiple of 8, in any one of several different styles.  Theă' available styles are:ă'ă' 0 = normal solid fontă' 1 = hollow squares for pixelsă' 2 = diagonal lines (top left to bottom right) for pixelsă' 3 = diagonal lines (top right to bottom left) for pixelsă' 4 = single pixels, with big spaces between them if the font is bigă'ă' If you want to add more styles, put them in the SELECT CASE block.ă'ă'ăSUB PrintText (text$, x1%, y1%, horzsize%, vertsize%, Style%, colr%)ă  DEF SEG = &HF000ă  bits$ = CHR$(128) + CHR$(64) + CHR$(32) + CHR$(16) + CHR$(8) + CHR$(4) + CHR$(2) + CHR$(1)ă  slen = LEN(text$)ăă  FOR y = 0 TO 7ă    a$ = ""ă    FOR ct = 1 TO slenă      byte = PEEK(&HFA6E + ASC(MID$(text$, ct, 1)) * 8 + y)ă      FOR x = 1 TO 8ă        IF byte AND ASC(MID$(bits$, x, 1)) THENă          xpixel% = x1% + (x - 1) * horzsize% + (ct - 1) * 8 * horzsize%ă          ypixel% = y1% + y * vertsize%ăă          SELECT CASE Style%ă            CASE 0ă              LINE (xpixel%, ypixel%)-(xpixel% + horzsize% - 1, ypixel% + vertsize% - 1), colr%, BFă            CASE 1ă              LINE (xpixel%, ypixel%)-(xpixel% + horzsize% - 1, ypixel% + vertsize% - 1), colr%, Bă            CASE 2ă              LINE (xpixel%, ypixel%)-(xpixel% + horzsize% - 1, ypixel% + vertsize% - 1), colr%ă            CASE 3ă              LINE (xpixel% + horzsize% - 1, ypixel%)-(xpixel%, ypixel% + vertsize% - 1), colr%ă            CASE 4ă              PSET (xpixel%, ypixel%), colr%ă          END SELECTăă        END IFă      NEXTă    NEXTă  NEXTăEND SUBăDave Shea                      GUI BUTTONS W/MOUSE SUPPORT    FidoNet QUIK_BAS Echo          01-09-97 (22:16)       QB, PDS                256  6420     BUTTONS.BAS ' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'   BUTTONS.BAS   by   Dave Sheaă'   Released to Public Domaină'   on January 9th, 1997. Noă'   Warantees expressed oră'   implied.ă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăDECLARE SUB Page1 ()ăDECLARE SUB Page2 ()ăDECLARE SUB SetUpPage (PageNum)ăDECLARE SUB GPrint (x%, y%, Text$, Culler%, Font)ăDECLARE SUB CheckBox (x, y, PageNum)ăDECLARE SUB DrawUpButton (x%, y%, x1%, y1%, Text$)ăDECLARE SUB DrawDownButton (x%, y%, x1%, y1%, Text$)ăDECLARE SUB MouseSH (Num!)ăDECLARE SUB Mouse (HVSP$, Min, Max)ă'$INCLUDE: 'qb.bi'ăăTYPE Buttonă x AS INTEGERă y AS INTEGERă x1 AS INTEGERă y1 AS INTEGERă Pressed AS INTEGERă Text AS STRING * 40ă Page AS INTEGERăEND TYPEăăCONST NumOfButtons = 15ă'COMMON SHARED BăăDIM SHARED InReg AS RegType, OutReg AS RegTypeăDIM SHARED But(NumOfButtons) AS ButtonăăBut(1).x = 100: But(1).y = 80: But(1).x1 = 220: But(1).y1 = 95ăBut(1).Text = "Next Page": But(1).Page = 1ăăBut(2).x = 100: But(2).y = 105: But(2).x1 = 220: But(2).y1 = 120ăBut(2).Text = "Quit": But(2).Page = 1ăăBut(3).x = 100: But(3).y = 80: But(3).x1 = 220: But(3).y1 = 95ăBut(3).Text = "Last Page": But(3).Page = 2ăăBut(4).x = 100: But(4).y = 105: But(4).x1 = 220: But(4).y1 = 120ăBut(4).Text = "Quit": But(4).Page = 2ăăăăMouse "R", 0, 0ăMouse "H", 1, 319ăMouse "V", 1, 199ăMouse "P", 0, 0ăăCLS : SCREEN 13ăăPage1ăăSUB CheckBox (x, y, PageNum)ăă FOR Bc = 1 TO NumOfButtonsă  But(Bc).Pressed = 0ă  IF x > But(Bc).x AND y > But(Bc).y THENă   IF x < But(Bc).x1 AND y < But(Bc).y1 THENă    IF OutReg.BX = 1 AND (But(Bc).Page = PageNum OR (But(Bc).Page = 0 AND PageNum > 2)) THENă     DrawDownButton But(Bc).x, But(Bc).y, But(Bc).x1, But(Bc).y1, But(Bc).Textă     Mouse "S", 0, 0ă     DO WHILE OutReg.BX = 1: Mouse "S", 0, 0: LOOPă     DrawUpButton But(Bc).x, But(Bc).y, But(Bc).x1, But(Bc).y1, But(Bc).Textăă     Mouse "S", 0, 0: x = (OutReg.Cx / 2) + 1: y = OutReg.Dxă     IF x > But(Bc).x AND y > But(Bc).y THENă      IF x < But(Bc).x1 AND y < But(Bc).y1 THENă       But(Bc).Pressed = 1ă      END IFă     END IFă    END IFă   END IFă  END IFă NEXTăEND SUBăăSUB DrawDownButton (x%, y%, x1%, y1%, Text$)ăă MouseSH 2ăă LINE (x% + 1, y%)-(x1% - 1, y%), 0ă LINE (x%, y% + 1)-(x%, y1% - 1), 0ă LINE (x% + 1, y1%)-(x1% - 1, y1%), 0ă LINE (x1%, y% + 1)-(x1%, y1% - 1), 0ă LINE (x% + 1, y% + 1)-(x1% - 1, y1% - 1), 28, BFă LINE (x% + 1, y% + 1)-(x1% - 1, y% + 1), 25ă LINE (x% + 1, y% + 1)-(x% + 1, y1% - 1), 25ă PSET (x% + 2, y% + 2), 25ăă FOR TScan = LEN(Text$) TO 1 STEP -1ă  IF MID$(Text$, TScan, 1) <> CHR$(32) THEN LenText = TScan: EXIT FORă NEXTăă Px% = (((x1% - x%) / 2 + x%) + 1) - (LenText * 8) / 2 + 1ă Py% = ((y1% - y%) / 2 + y%) + 1 - 2ăă GPrint Px%, Py%, Text$, 0, 1ăă MouseSH 1ăăEND SUBăăSUB DrawUpButton (x%, y%, x1%, y1%, Text$)ăă MouseSH 2ăă LINE (x% + 1, y%)-(x1% - 1, y%), 0ă LINE (x%, y% + 1)-(x%, y1% - 1), 0ă LINE (x% + 1, y1%)-(x1% - 1, y1%), 0ă LINE (x1%, y% + 1)-(x1%, y1% - 1), 0ă LINE (x% + 1, y% + 1)-(x1% - 1, y1% - 1), 28, BFă LINE (x% + 1, y% + 1)-(x1% - 1, y1% - 1), 31, Bă LINE (x1% - 1, y% + 2)-(x1% - 1, y1% - 1), 25ă LINE (x% + 2, y1% - 1)-(x1% - 1, y1% - 1), 25ă LINE (x% + 2, y% + 2)-(x% + 2, y1% - 2), 31ă LINE (x1% - 2, y% + 2)-(x1% - 2, y1% - 2), 25ă PSET (x1% - 3, y1% - 2), 25ă PSET (x1% - 1, y% + 1), 25ă PSET (x% + 3, y% + 2), 31ă PSET (x1% - 2, y1% - 2), 25ăă FOR TScan = LEN(Text$) TO 1 STEP -1ă  IF MID$(Text$, TScan, 1) <> CHR$(32) THEN LenText = TScan: EXIT FORă NEXTăă Px% = (((x1% - x%) / 2 + x%) - (LenText * 8) / 2)ă Py% = ((y1% - y%) / 2 + y%) - 3ăă GPrint Px%, Py%, Text$, 0, 1ăă MouseSH 1ăăEND SUBăăSUB GPrint (x%, y%, Text$, Culler%, Font)ăă 'this routine allows printing text at any pixel locationă '     in the graphics modes without disturbing the backgroundă 'by Douglas H. Lusher, 06-08-1996ăă ' 8 x 8 char box, CGAă IF Font = 1 THENă  CharSegment% = &HFFA6: CharOffset% = &HEă  CharWid% = 8: CharHgt% = 8ă END IFăă ' 8 x 14 char box, EGAă 'CharSegment% = &HC000: CharOffset% = &H4ED5ă 'CharWid% = 8: CharHgt% = 14ăă ' 8 x 16 char box, VGAă IF Font = 2 THENă  DIM Regs AS RegTypeXă  Regs.AX = &H1130: Regs.BX = &H600ă  CALL InterruptX(&H10, Regs, Regs)ă  CharSegment% = Regs.ES: CharOffset% = Regs.BPă  CharWid% = 8: CharHgt% = 16ă END IFăă DEF SEG = CharSegment%ă XX% = x%ă FOR char% = 1 TO LEN(Text$)ă   Ptr% = CharHgt% * ASC(MID$(Text$, char%, 1)) + CharOffset%ă   FOR Ln% = 0 TO CharHgt% - 1ă     BitPattern& = PEEK(Ptr% + Ln%) * 256&ă     LineFormat% = (BitPattern& - 32768) XOR -32768ă     LINE (XX%, y% + Ln%)-STEP(CharWid% - 1, 0), Culler%, , LineFormat%ă   NEXTă   XX% = XX% + CharWid%ă NEXTă DEF SEGăăEND SUBăăSUB Mouse (HVSPR$, Min, Max)ăă 'If HVSPR$ = H or Vă 'Sets Minimum Or Maximum Horizontal And Vertical Boundariesăă 'If HVSPR$ = S Then It Returns Mouse Location And Statusă 'If HVSPR$ = P Then It Places The Cursor Inside The Boundariesă 'If HVSPR$ = R Then It Resets Mouse Statusăă IF HVSPR$ = "R" THEN InReg.AX = 0ă IF HVSPR$ = "H" THEN InReg.AX = 7: InReg.Cx = Min: InReg.Dx = Maxă IF HVSPR$ = "V" THEN InReg.AX = 8: InReg.Cx = Min: InReg.Dx = Maxă IF HVSPR$ = "P" THEN InReg.AX = 4ă IF HVSPR$ = "S" THEN InReg.AX = 1: CALL INTERRUPT(&H33, InReg, OutReg)ă IF HVSPR$ = "S" THEN InReg.AX = 3ăă CALL INTERRUPT(&H33, InReg, OutReg)ăăEND SUBăăSUB MouseSH (Num)ăă  'If Num = 1 Then Show Mouse Cursoră  'If Num = 2 Then Hide Mouse Cursorăă  IF Num = 2 THEN InReg.AX = 2ă  IF Num = 1 THEN InReg.AX = 1ăă  CALL INTERRUPT(&H33, InReg, OutReg)ăăEND SUBăăSUB Page1ăăPageNum = 1ăSetUpPage PageNumăăDOă Mouse "S", 0, 0ă x = (OutReg.Cx / 2) + 1: y = OutReg.Dxă CheckBox x, y, PageNumă IF But(1).Pressed = 1 THEN Page2ă IF But(2).Pressed = 1 THEN ENDăLOOPăăăEND SUBăăSUB Page2ăăPageNum = 2ăSetUpPage PageNumăăDOă Mouse "S", 0, 0ă x = (OutReg.Cx / 2) + 1: y = OutReg.Dxă CheckBox x, y, PageNumă IF But(3).Pressed = 1 THEN Page1ă IF But(4).Pressed = 1 THEN ENDăLOOPăăăEND SUBăăSUB SetUpPage (PageNum)ăMouseSH 2: LINE (0, 0)-(320, 200), 31, BF: MouseSH 1ăăLOCATE 1, 1: PRINT "Page Number "; PageNumăăFOR Db = 1 TO NumOfButtonsă IF But(Db).Page = PageNum OR But(Db).Page = 0 AND PageNum > 2 THENă  DrawUpButton But(Db).x, But(Db).y, But(Db).x1, But(Db).y1, But(Db).Textă END IFăNEXTăăEND SUBăJim Emptage                    BEZIER CURVE ROUTINE W/MOUSE   75504.2526@CompuServe.com      01-14-97 (01:05)       QB, PDS                140  3447     BEZIER.BAS  ' ***************************************************************ă' *  from Jim Emptage Rouge Valley Software                        *ă' *  after years of looking, I found some code for a bezier curve  *ă' *  I adapted the code to be mouse drivenă' *  I added the code for the temporary mask                       *ă' *  If you are making a draw/paint program you NEED this code     *ă' *  75504.2526@compuserve.com                                     *ă' *  please credit this code if used by leaving these comments in  *ă' *  will need Quick Basic to compile this code                    *ă' *  ************************************************************* *ăDEFINT A-ZăDECLARE SUB mouse (m0%, m1%, m2%, m3%)ăDECLARE SUB hidemouse ()ăDECLARE SUB showmouse ()ăDECLARE SUB getmxy (mx%, my%)ăDECLARE SUB setmxy (mx%, my%)ăDECLARE SUB mborders (x%, y%, h%, v%)ăDECLARE FUNCTION mbtn% ()ăăTYPE RegTypeă  ax    AS INTEGERă  bx    AS INTEGERă  cx    AS INTEGERă  dx    AS INTEGERă  bp    AS INTEGERă  si    AS INTEGERă  di    AS INTEGERă  flags AS INTEGERăEND TYPEăCLSăSCREEN 13ăFOR x = 0 TO 320ă  FOR y = 0 TO 200ă    PSET (x, y), 200 + (x + y) MOD 50ă  NEXTăNEXTăPALETTE 255, 60ăCALL setmxy(5, 5)ăTYPE ptsă  x AS INTEGERă  y AS INTEGERă  c AS INTEGERăEND TYPEăDIM SHARED sam(105) AS ptsăCALL showmouseăDOăLOOP UNTIL mbtn% = 0ăDOăLOOP UNTIL mbtn% <> 0ăCALL hidemouseăCALL getmxy(x00, y00)ăPSET (x00, y00), 255ăCALL showmouseăDOăLOOP UNTIL mbtn% = 0ăDOăLOOP UNTIL mbtn% <> 0ăCALL hidemouseăCALL getmxy(x03, y03)ăPSET (x03, y03), 255ăDOăLOOP UNTIL mbtn% = 0ăDOă  ă  CALL getmxy(x01, y01)ă  X02 = x01ă  Y02 = y01                                       ' make these equal for a standard curveă  ă  a = x03 - 3 * X02 + 3 * x01 - x00ă  e = y03 - 3 * Y02 + 3 * y01 - y00ă  b = 3 * X02 - 6 * x01 + 3 * x00ă  f = 3 * Y02 - 6 * y01 + 3 * y00ă  c = 3 * x01 - 3 * x00ă  g = 3 * y01 - 3 * y00ă  d = x00ă  h = y00ă  cnt = 0ă  FOR T! = 0 TO 1 STEP .01ă    xb = ((a * T! + b) * T! + c) * T! + dă    yb = ((e * T! + f) * T! + g) * T! + hă    IF POINT(xb, yb) <> 255 THENă      cnt = cnt + 1ă      sam(cnt).x = xbă      sam(cnt).y = ybă      sam(cnt).c = POINT(xb, yb)ă      PSET (sam(cnt).x, sam(cnt).y), 255ă    END IFă    ă  NEXT T!ă  FOR blk = 1 TO cntă    PSET (sam(blk).x, sam(blk).y), sam(blk).că  NEXT blkă  PSET (x00, y00), 14ăLOOP UNTIL mbtn% <> 0ăFOR l = 1 TO cntă  LINE -(sam(l).x, sam(l).y), 14ăNEXTăLINE -(x03, y03), 14ăENDăăSUB getmxy (mx%, my%) STATICămouse 3, 0, x, y                                  ' get graphic coordinatesămx% = x / 2                                       ' (x / 8) + 1ămy% = y                                           ' (y / 8) + 1   'convert to text coordinatesăEND SUBăăSUB hidemouse STATICăCALL mouse(2, 0, 0, 0)ăEND SUBăăSUB mborders (x, y, h, v) STATICămouse 7, 0, (x - 1) * 8, (h - 1) * 8ămouse 8, 9, (y - 1) * 8, (v - 1) * 8ăEND SUBăăFUNCTION mbtn% STATICămouse 3, buttons, 0, 0ămbtn% = buttonsăEND FUNCTIONăăSUB mouse (m0%, m1%, m2%, m3%) STATICăDIM inregs AS RegType, outregs AS RegTypeăinregs.ax = m0%ăinregs.bx = m1%ăinregs.cx = m2%ăinregs.dx = m3%ăCALL INTERRUPT(51, inregs, outregs)ăm0% = outregs.axăm1% = outregs.bxăm2% = outregs.cxăm3% = outregs.dxăEND SUBăăSUB setmxy (x, y) STATICămouse 4, 0, (x - 1) * 8, (y - 1) * 8ăEND SUBăăSUB showmouse STATICămouse 1, 0, 0, 0ăEND SUBăNick Kochakian                 FAST BOX SHADE MAKER           NickK@worldnet.att.net         01-16-97 (12:12)       QB, QBasic, PDS        46   946      FASTBOX.BAS DECLARE SUB FASTBOX (X%, Y%, X2%, Y2%, ColorST%, ColorEN%)ă'Fast box shade makeră'ă'1997 By: - Nick Kochakian -ă'ă'This program was suposed to fill in a box... But I really didn't wantă'to take TOO long to figure it out... So instead it fills the whole screenă'for you...ă'ă'You can edit / use this program anyway you'd like to... But, PLEASEă'give me credit where it is deserved!!!ă'ă'Thanks! :)ăăSCREEN 13ăă'Big Box:ăX% = 1ăY% = 1ăX2% = 300ăY2% = 190ăăCS% = 16ăCM% = 30ăăCALL FASTBOX(X%, Y%, X2%, Y2%, CS%, CM%)ă'CS% - Is the starting coloră'CM% - Is the maximum color the box will go up toăăSUB FASTBOX (X%, Y%, X2%, Y2%, ColorST%, ColorEN%)ăăC% = ColorST%ăCOL% = C%ăăDOăLINE (X%, Y%)-(X2%, Y2%), COL%, BăC% = C% + 1ăIF C% > ColorEN% THEN C% = ColorST%: COL% = C%ăCOL% = C%ăX% = X% + 1ăY% = Y% + 1ăX2% = X2% - 1ăY2% = Y2% - 1ăLOOP UNTIL X% >= 96 AND Y% >= 96 AND X2% >= 205 AND Y2% >= 95ăăEND SUBăNick Kochakian                 SMOOTH CIRCLE ROUTINE          NickK@worldnet.att.net         01-16-97 (12:12)       QB, QBasic, PDS        71   1815     CIRFINE.BAS 'Fine Circlesă'ă'1997 By: - Nick Kochakian -ă'ă'Finally! I've done it!ă'A program that makes circles that don't have the little gaps in them!ă'ă'This program enables you to make circles WITHOUT the anoying gaps.ă'It produces a crisp, clean circle that looks... Um... Professional!ă'It runs very fast! So, don't worry about waiting too long for the circleă'to appear on the screen! :)ă'ă'You CAN use the CIRFINE routine in your own programs but, PLEASEă'give me credit where it is deserved the most!ă'Thanks!ă'ă'This program can use ANY screen mode. But, it was desgined in SCREEN modeă'13.ăăDECLARE SUB CIRFINE (Colors%, Colore%, X%, Y%, SIZ%, THNG%)ăă'How to CALL CIRFINE:ă'CALL CIRFINE  (Colors%, Colore%, X%, Y%, SIZ%, THNG%)ă'Colors% - is the starting color of the circleă'Colore% - is the ending coloră'X% - Is the X locationă'Y% - Is the Y locationă'SIZ% - Should be the the size of the circle you wantă'THNG% - Is how "Fat" for "Fine" you want your circle to be. 1 would be "Fine"ă'and 2 or grater would be "Fat". Check out the SUB to see how it works!ăăSCREEN 13 'VGAăăCM% = 30ăCS% = 16ăSIZ% = 50ăX% = 50ăY% = 50ăă'The CIRCLE demoăSIZZ = 50ăCOL = 0ăLOCATE 1, 1: PRINT "Regular CIRCLE command:"ăDOăCIRCLE (50, 50), SIZZ, COLăCOL = COL + 1ăSIZZ = SIZZ - 1ăLOOP UNTIL SIZZ = 1ăLOCATE 23, 1: PRINT "Press ANY key"ăăDOăLOOP UNTIL INKEY$ <> ""ăCLSăăLOCATE 1, 1: PRINT "Circle command with CIRFINE:"ăCALL CIRFINE(CS%, CM%, X%, Y%, SIZ%, 1)ăăSUB CIRFINE (Colors%, Colore%, X%, Y%, SIZ%, THNG%)ăăC% = Colors% 'Set up the colorsăăDOăCOL = C% 'Set up the colorsăCIRCLE (X%, Y%), SIZ%, COLăPAINT (X% + SIZ% - 1, Y% + SIZ% / 100), COLăC% = C% + 1ăIF C% > Colore% THEN C% = Colors%ăSIZ% = SIZ% - THNG% 'The size controlăLOOP UNTIL SIZ% <= 1ăăEND SUBăNick Kochakian                 CIRCLE FIREWORKS               NickK@worldnet.att.net         01-16-97 (12:14)       QB, QBasic, PDS        61   1133     FIREWORK.BAS'Circle "Fire Works"ă'ă'1997 By: -Nick Kochakian-ă'ă'If you'd like to use this circle program in any of your programs...ă'Fell free to but... PLEASE give me credit where it is deserved!ă'Thanks!ă'ă'This program MIGHT be a good screen saver!ăăSCREEN 13 'Screen mode 13 (VGA)ăRANDOMIZE TIMERăXM = 300 'X maximumăYM = 170 'Y maximumăSM = 100  'The maximum size of a circleăDLY = 900 'DelayăăDOăGOSUB RANDIT: 'Randomize circle X,YăGOSUB CIRCIT: 'Draws the circleăGOSUB CIRERA: 'Erases the circleăLOOP UNTIL INKEY$ <> "" 'Loop until a key is pressedăENDăăRANDIT:ăX = INT(RND * XM) + 1ăY = INT(RND * YM) + 1ăS = INT(RND * SM) + 1 'S is how big the circle getsăIF S > SM THEN S = SMăRETURNăăCIRCIT:ăSS = 1ăCM = 30 'The color maximumăCS = 16 'What color the circle starts atăCA = CS 'Set the color upăăDOăăFOR I = 1 TO DLY 'DelayăNEXT IăăCOL = CAăCA = CA + 1ăIF CA > CM THEN CA = CSăCIRCLE (X, Y), SS, COLăSS = SS + 1ăIF S > SM THEN SS = SăLOOP UNTIL SS >= SăRETURNăăCIRERA:ăCNT = 0ăDOăFOR I = 1 TO DLY 'DelayăNEXT IăăCIRCLE (X, Y), CNT, 0ăCNT = CNT + 1ăLOOP UNTIL CNT = SăRETURNăNick Kochakian                 STARZ!                         NickK@worldnet.att.net         01-16-97 (12:14)       QB, QBasic, PDS        363  7284     STARZ.BAS   'Starz! 1.0ă'ă'1996 By: - Nick Kochakian -ă'You can use Starz! in any of your programs... Just be shure to include myă'name some where in your program where people can READ it.ă'Thanks! :)ă':) Have fun fooling around with the demnsions! :)ăăRANDOMIZE TIMERăSCREEN 13 'Set up VGA screen (256 colors) (300x200)ăCLS 'Clear the screenăăS1XMAX = 300 'Starz 1 X Maximum numberăS1YMAX = 190 'Starz 1 Y Maximum numberăS1CMAX = 256 'Color Maximum for Starz 1ăăS2XMAX = 300 'Starz 2 X Maximum numberăS2YMAX = 190 'Starz 2 Y Maximum numberăS2CMAX = 30'Color Maximum for Starz 2ăăENDSTARZ = INT(RND * 6000) + 1 'Set ending numberăă'You can set the starz to your liking.ă'Please type STARZ$ entrys in ALL CAPSă'STARZ$="MIXED" mixes colored starz with grey scale starză'STARZ$="COLOR" color starz onlyă'STARZ$="GREY" grey scale starz onlyăSTARZ$ = "GREY"ăăDOăS1X = INT(RND * S1XMAX) + 1ăS1Y = INT(RND * S1YMAX) + 1ăIF STARZ$ = "MIXED" THEN S1C = INT(RND * S1CMAX) + 1ăIF STARZ$ = "COLOR" THEN S1C = INT(RND * S1CMAX) + 1ăăIF STARZ$ = "GREY" THENăDOăREPICK:ăS1C = INT(RND * S2CMAX) + 1ăIF S1C < 16 THEN GOTO REPICK:ăIF S1C > 30 THEN GOTO REPICK:ăLOOP UNTIL S1C = 16 OR S1C = 30 OR S1C = 16 <> 30ăEND IFăăPSET (S1X, S1Y), S1CăăS2X = INT(RND * S2XMAX) + 1ăS2Y = INT(RND * S2YMAX) + 1ăIF STARZ$ = "COLOR" THEN PSET (S2X, S2Y), S1CăIF STARZ$ = "MIXED" THEN S2C = INT(RND * S2C) + 1: PSET (S2X, S2Y), S2CăIF STARZ$ = "GREY" THEN PSET (S2X, S2Y), S1CăENDIT = ENDIT + 1ăLOOP UNTIL ENDIT = ENDSTARZăă'Shining grey starz!ăIF STARZ$ = "GREY" THENăDOăREPIKME:ă  C = INT(RND * 30) + 1ăCC = INT(RND * 30) + 1ăIF CC < 16 THEN GOTO REPIKME:ăIF CC > 30 THEN GOTO REPIKME:ăR = CCăG = CCăB = CCăIF C < 16 THEN GOTO REPIKME:ăIF C > 30 THEN GOTO REPIKME:ă  PAL& = 65536 * B + 256 * G + Ră  PALETTE C, PAL&ăLOOP UNTIL INKEY$ <> ""ăPALETTEăCLSăPRINT "Starz! 1996 By: - Nick Kochakian -"ăENDăEND IFăăIF STARZ$ = "MIXED" OR STARZ$ = "COLOR" THENăDOăREPIKMETWO:ăC = INT(RND * 255) + 1ăCC = INT(RND * 255) + 1ăIF CC < 0 THEN GOTO REPIKMETWO:ăIF CC > 255 THEN GOTO REPIKMETWO:ăăCPIK = 0ăDOăREAD R, G, BăCPIK = CPIK + 1ăLOOP UNTIL CPIK = CCăRESTOREăăIF C < 0 THEN GOTO REPIKMETWO:ăIF C > 255 THEN GOTO REPIKMETWO:ă  PAL& = 65536 * B + 256 * G + Ră  PALETTE C, PAL&ăLOOP UNTIL INKEY$ <> ""ăPALETTEăCLSăPRINT "Starz! 1996 By: - Nick Kochakian -"ăENDăEND IFăăENDă'Palette DATAăă'"HOT" paletteăăDATA  0 , 0 , 0ăDATA  21 , 21 , 21ăDATA  0 , 42 , 42ăDATA  42 , 42 , 42ăDATA  4 , 0 , 0ăDATA  8 , 0 , 0ăDATA  8 , 0 , 0ăDATA  12 , 0 , 0ăDATA  14 , 0 , 0ăDATA  16 , 0 , 0ăDATA  17 , 0 , 0ăDATA  16 , 0 , 0ăDATA  21 , 0 , 0ăDATA  20 , 0 , 0ăDATA  24 , 0 , 0ăDATA  24 , 0 , 0ăDATA  28 , 0 , 0ăDATA  30 , 0 , 0ăDATA  32 , 0 , 0ăDATA  33 , 0 , 0ăDATA  32 , 0 , 0ăDATA  37 , 0 , 0ăDATA  36 , 0 , 0ăDATA  40 , 0 , 0ăDATA  42 , 0 , 0ăDATA  44 , 0 , 0ăDATA  46 , 0 , 0ăDATA  48 , 0 , 0ăDATA  49 , 0 , 0ăDATA  51 , 0 , 0ăDATA  53 , 0 , 0ăDATA  55 , 0 , 0ăDATA  56 , 0 , 0ăDATA  58 , 0 , 0ăDATA  60 , 0 , 0ăDATA  62 , 0 , 0ăDATA  63 , 0 , 0ăDATA  63 , 1 , 0ăDATA  63 , 0 , 0ăDATA  63 , 5 , 0ăDATA  63 , 4 , 0ăDATA  63 , 8 , 0ăDATA  63 , 10 , 0ăDATA  63 , 12 , 0ăDATA  63 , 13 , 0ăDATA  63 , 12 , 0ăDATA  63 , 17 , 0ăDATA  63 , 16 , 0ăDATA  63 , 20 , 0ăDATA  63 , 22 , 0ăDATA  63 , 24 , 0ăDATA  63 , 25 , 0ăDATA  63 , 24 , 0ăDATA  63 , 29 , 0ăDATA  63 , 28 , 0ăDATA  63 , 32 , 0ăDATA  63 , 32 , 0ăDATA  63 , 36 , 0ăDATA  63 , 38 , 0ăDATA  63 , 36 , 0ăDATA  63 , 41 , 0ăDATA  63 , 43 , 0ăDATA  63 , 44 , 0ăDATA  63 , 46 , 0ăDATA  63 , 48 , 0ăDATA  63 , 50 , 0ăDATA  63 , 51 , 0ăDATA  63 , 53 , 0ăDATA  63 , 55 , 0ăDATA  63 , 57 , 0ăDATA  63 , 58 , 0ăDATA  63 , 60 , 0ăDATA  63 , 62 , 0ăDATA  63 , 63 , 0ăDATA  62 , 63 , 0ăDATA  60 , 63 , 0ăDATA  58 , 63 , 0ăDATA  56 , 63 , 0ăDATA  55 , 63 , 0ăDATA  53 , 63 , 0ăDATA  51 , 63 , 0ăDATA  49 , 63 , 0ăDATA  47 , 63 , 0ăDATA  46 , 63 , 0ăDATA  44 , 63 , 0ăDATA  42 , 63 , 0ăDATA  40 , 63 , 0ăDATA  36 , 63 , 0ăDATA  37 , 63 , 0ăDATA  32 , 63 , 0ăDATA  33 , 63 , 0ăDATA  28 , 63 , 0ăDATA  30 , 63 , 0ăDATA  28 , 63 , 0ăDATA  24 , 63 , 0ăDATA  24 , 63 , 0ăDATA  20 , 63 , 0ăDATA  21 , 63 , 0ăDATA  16 , 63 , 0ăDATA  17 , 63 , 0ăDATA  12 , 63 , 0ăDATA  14 , 63 , 0ăDATA  12 , 63 , 0ăDATA  8 , 63 , 0ăDATA  8 , 63 , 0ăDATA  4 , 63 , 0ăDATA  5 , 63 , 0ăDATA  0 , 63 , 0ăDATA  1 , 63 , 0ăDATA  0 , 63 , 0ăDATA  0 , 63 , 1ăDATA  0 , 63 , 0ăDATA  0 , 63 , 5ăDATA  0 , 63 , 4ăDATA  0 , 63 , 8ăDATA  0 , 63 , 10ăDATA  0 , 63 , 12ăDATA  0 , 63 , 13ăDATA  0 , 63 , 12ăDATA  0 , 63 , 17ăDATA  0 , 63 , 16ăDATA  0 , 63 , 20ăDATA  0 , 63 , 22ăDATA  0 , 63 , 24ăDATA  0 , 63 , 25ăDATA  0 , 63 , 24ăDATA  0 , 63 , 29ăDATA  0 , 63 , 28ăDATA  0 , 63 , 32ăDATA  0 , 63 , 32ăDATA  0 , 63 , 36ăDATA  0 , 63 , 38ăDATA  0 , 63 , 36ăDATA  0 , 63 , 41ăDATA  0 , 63 , 43ăDATA  0 , 63 , 44ăDATA  0 , 63 , 46ăDATA  0 , 63 , 48ăDATA  0 , 63 , 50ăDATA  0 , 63 , 51ăDATA  0 , 63 , 53ăDATA  0 , 63 , 55ăDATA  0 , 63 , 57ăDATA  0 , 63 , 58ăDATA  0 , 63 , 60ăDATA  0 , 63 , 62ăDATA  0 , 63 , 63ăDATA  0 , 62 , 63ăDATA  0 , 60 , 63ăDATA  0 , 58 , 63ăDATA  0 , 56 , 63ăDATA  0 , 55 , 63ăDATA  0 , 53 , 63ăDATA  0 , 51 , 63ăDATA  0 , 49 , 63ăDATA  0 , 47 , 63ăDATA  0 , 46 , 63ăDATA  0 , 44 , 63ăDATA  0 , 42 , 63ăDATA  0 , 40 , 63ăDATA  0 , 36 , 63ăDATA  0 , 37 , 63ăDATA  0 , 32 , 63ăDATA  0 , 33 , 63ăDATA  0 , 28 , 63ăDATA  0 , 30 , 63ăDATA  0 , 28 , 63ăDATA  0 , 24 , 63ăDATA  0 , 24 , 63ăDATA  0 , 20 , 63ăDATA  0 , 21 , 63ăDATA  0 , 16 , 63ăDATA  0 , 17 , 63ăDATA  0 , 12 , 63ăDATA  0 , 14 , 63ăDATA  0 , 12 , 63ăDATA  0 , 8 , 63ăDATA  0 , 8 , 63ăDATA  0 , 4 , 63ăDATA  0 , 5 , 63ăDATA  0 , 0 , 63ăDATA  0 , 1 , 63ăDATA  0 , 0 , 63ăDATA  1 , 0 , 63ăDATA  0 , 0 , 63ăDATA  5 , 0 , 63ăDATA  4 , 0 , 63ăDATA  8 , 0 , 63ăDATA  10 , 0 , 63ăDATA  12 , 0 , 63ăDATA  13 , 0 , 63ăDATA  12 , 0 , 63ăDATA  17 , 0 , 63ăDATA  16 , 0 , 63ăDATA  20 , 0 , 63ăDATA  22 , 0 , 63ăDATA  24 , 0 , 63ăDATA  25 , 0 , 63ăDATA  24 , 0 , 63ăDATA  29 , 0 , 63ăDATA  28 , 0 , 63ăDATA  32 , 0 , 63ăDATA  32 , 0 , 63ăDATA  36 , 0 , 63ăDATA  38 , 0 , 63ăDATA  36 , 0 , 63ăDATA  41 , 0 , 63ăDATA  43 , 0 , 63ăDATA  44 , 0 , 63ăDATA  46 , 0 , 63ăDATA  48 , 0 , 63ăDATA  50 , 0 , 63ăDATA  51 , 0 , 63ăDATA  53 , 0 , 63ăDATA  55 , 0 , 63ăDATA  57 , 0 , 63ăDATA  58 , 0 , 63ăDATA  60 , 0 , 63ăDATA  62 , 0 , 63ăDATA  63 , 0 , 63ăDATA  63 , 1 , 63ăDATA  63 , 0 , 63ăDATA  63 , 5 , 63ăDATA  63 , 4 , 63ăDATA  63 , 8 , 63ăDATA  63 , 8 , 63ăDATA  63 , 12 , 63ăDATA  63 , 14 , 63ăDATA  63 , 16 , 63ăDATA  63 , 17 , 63ăDATA  63 , 16 , 63ăDATA  63 , 21 , 63ăDATA  63 , 20 , 63ăDATA  63 , 24 , 63ăDATA  63 , 24 , 63ăDATA  63 , 28 , 63ăDATA  63 , 30 , 63ăDATA  63 , 32 , 63ăDATA  63 , 33 , 63ăDATA  63 , 32 , 63ăDATA  63 , 37 , 63ăDATA  63 , 36 , 63ăDATA  63 , 40 , 63ăDATA  63 , 42 , 63ăDATA  63 , 44 , 63ăDATA  63 , 46 , 63ăDATA  63 , 48 , 63ăDATA  63 , 49 , 63ăDATA  63 , 51 , 63ăDATA  63 , 53 , 63ăDATA  63 , 55 , 63ăDATA  63 , 56 , 63ăDATA  63 , 58 , 63ăDATA  63 , 60 , 63ăDATA  63 , 62 , 63ăDATA  63 , 63 , 63ăAngelo Ken Pesce               STANDARD FIRE EFFECT           ken@uniserv.uniplan.it         01-15-97 (01:00)       QB, QBasic, PDS        77   2075     APSTEST.BAS REM ******************************************************* CONFIGăDEFINT A-ZăCLSăPRINT "FIRE EFFECT"ăPRINT "APSOFTWARE 1996"ăăINPUT "X DIM (100-320)"; xdimăIF xdim > 320 THEN xdim = 320ăIF xdim < 100 THEN xdim = 100ăINPUT "Y DIM (100-200)"; ydimăIF ydim > 200 THEN ydim = 200ăIF ydim < 100 THEN ydim = 100ă1 INPUT "X SPEED (0-3)"; xvelăIF xvel > 3 OR xvel < 0 THEN PRINT "MINIMUM VEL 0, MAXIMUM VEL 3": GOTO 1ă2 INPUT "Y SPEED (0-3)"; yvelăIF yvel > 3 OR yvel < 0 THEN PRINT "MINIMUM VEL 0, MAXIMUM VEL 3": GOTO 2ăINPUT "ITER (5-15)"; iterăIF iter > 15 THEN iter = 15ăIF iter < 5 THEN iter = 5ăINPUT "C Speed (0.1-1)"; băIF b > 1 THEN b = 1ăIF b < .1 THEN b = .1ăINPUT "X SIZE (1-4)"; xpixăINPUT "Y SIZE (1-4)"; ypixăIF xpix > 4 THEN xpix = 4ăIF xpix < 1 THEN xpix = 1ăIF ypix > 4 THEN ypix = 4ăIF ypix < 1 THEN ypix = 1ăINPUT "Lines (1-30)"; lnăIF ln > 30 THEN ln = 30ăIF ln < 1 THEN ln = 1ăSCREEN 13ăREM ******************************************************* PALETTE INITăFOR col = 0 TO 63ă    PALETTE col, colăNEXTăREM ******************************************************* RANDOM POINTSăDOăFOR I = 1 TO lnă  FOR t% = 1 TO 100ă    x% = INT(RND * xdim)ă    y% = INT(RND * ydim)ă    x1% = INT(RND * xdim)ă    y1% = INT(RND * ydim)ă    c% = 63ă    LINE (x%, y%)-(x1%, y1%), c%ă    NEXT t%ăNEXTăREM ******************************************************* FIRE !!!ăDIM xp, yp, xs, yx, xend, yend AS INTEGERăCONST xstart = 0, ystart = 0ăxend = xdimăyend = ydimăCONST cmax = 63ăFOR I = 1 TO iterăFOR xp = xstart TO xend STEP xpixăFOR yp = ystart TO yend STEP ypixăcol = POINT(xp, yp)ăcol = col + POINT(xp + 1, yp) + POINT(xp, yp + 1)ăcol = col + POINT(xp - 1, yp) + POINT(xp, yp - 1)ăcol = col + POINT(xp + 1, yp + 1) + POINT(xp + 1, yp - 1)ăcol = col + POINT(xp - 1, yp + 1) + POINT(xp - 1, yp - 1)ăcol = INT(col / 9 - b)ăIF col < 0 THEN col = 0ăIF col > cmax THEN col = cmaxăFOR px = 0 TO xpix - 1ăFOR py = 0 TO ypix - 1ăPSET (xp - xvel + px, yp - yvel + py), colăNEXTăNEXTăNEXTăNEXTăNEXTăLOOPăăăăAngelo Ken Pesce               ENHANCED FIRE EFFECT V3.2      ken@uniserv.uniplan.it         01-15-97 (01:00)       QB, QBasic, PDS        141  3720     APS32.BAS   ' FOR BETTER RESULTS COMPILE IT WITH ALTERNATE MATH PDS' 7 OPTIONăăDECLARE SUB pal (c%, r%, g%, b%)ăREM ******************************************************* CONFIGăăDEFINT A-Zăă'********************************************************** initialize varsăăCLSăRANDOMIZE (TIMER)ăăPRINT "ANGELO KEN PESCE 1996 - PHOBIA 1996 (pallette routine)"ăPRINT "QuickBasic Fire Demo                              v3.2beta"ăPRINT "--------------------------"ăPRINT "Features:"ăPRINTăPRINT "Four Pixel Interpolation (4+1 complete)           v2"ăPRINT "Improved Black Jump                               v2"ăPRINT "Improved White Jump with color prediction routine v3beta"ăPRINT "Random Color Adjustment"ăPRINT "--------------------------"ăPRINT "SET VARIABLES:               (press enter for defaults) "ăPRINTăPRINTăINPUT "X DIM (50,320)"; xdimăIF xdim > 320 THEN xdim = 320ăIF xdim < 50 THEN xdim = 50ăINPUT "Y DIM (50,200)"; ydimăIF ydim > 200 THEN ydim = 200ăIF ydim < 50 THEN ydim = 50ăINPUT "Color Fade Speed (0.1,3)"; băIF b > 3 THEN b = 1ăIF b < .1 THEN b = .1ăINPUT "Random Color Value (-3,3)"; rd$ăIF rd$ = "" THEN rd = 0: GOTO nocheckărd = VAL(rd$)ăIF rd > 3 THEN rd = 3ăIF rd < -3 THEN rd = 3ănocheck:ăINPUT "Lines (1,15)"; vnăIF vn > 15 THEN vn = 15ăIF vn < 1 THEN vn = 1ăăăSCREEN 13ăă'********************************************************** Init. ArraysăăDIM xvp1(vn)ăDIM xvp2(vn)ăDIM yvp1(vn)ăDIM yvp2(vn)ăDIM xvf1(vn)ăDIM xvf2(vn)ăDIM yvf1(vn)ăDIM yvf2(vn)ăăFOR j = 1 TO vnăxvp1(j) = INT((xdim + 1) * RND + 1)ăxvp2(j) = INT((xdim + 1) * RND + 1)ăyvp1(j) = INT((ydim + 1) * RND + 1)ăyvp2(j) = INT((ydim + 1) * RND + 1)ăNEXTăăREM ******************************************************* PALETTE INITă' THIS ROUTINE WAS MADE BY PHOBIA 1996!!!ăăFOR a% = 0 TO 63               ' Change the palette, colors 0-48ă   pal a% / 4, a%, 0, 0ă   pal a% / 4 + 16, 63, a%, 0ă   pal a% / 4 + 32, 63, 63, a%ăNEXTăpal 49, 63, 63, 0ăăREM *********************************************** LINE PLOTTING ROUTINEăăDOăă' DISPLAY ROUTINEăăFOR j = 1 TO vnăLINE (xvp1(j), yvp1(j))-(xvp2(j), yvp2(j)), 49ăNEXTăă' UPDATE ROUTINEăăFOR j = 1 TO vnăIF xvf1(j) = 0 THEN xvp1(j) = xvp1(j) - 1ăIF xvf1(j) = 1 THEN xvp1(j) = xvp1(j) + 1ăIF xvp1(j) < 0 THEN xvp1(j) = 0: xvf1(j) = 1ăIF xvp1(j) > xdim THEN xvp1(j) = xdim: xvf1(j) = 0ăIF yvf1(j) = 0 THEN yvp1(j) = yvp1(j) - 1ăIF yvf1(j) = 1 THEN yvp1(j) = yvp1(j) + 1ăIF yvp1(j) < 0 THEN yvp1(j) = 0: yvf1(j) = 1ăIF yvp1(j) > ydim THEN yvp1(j) = ydim: yvf1(j) = 0ăIF xvf2(j) = 0 THEN xvp2(j) = xvp2(j) - 1ăIF xvf2(j) = 1 THEN xvp2(j) = xvp2(j) + 1ăIF xvp2(j) < 0 THEN xvp2(j) = 0: xvf2(j) = 1ăIF xvp2(j) > xdim THEN xvp2(j) = xdim: xvf2(j) = 0ăIF yvf2(j) = 0 THEN yvp2(j) = yvp2(j) - 1ăIF yvf2(j) = 1 THEN yvp2(j) = yvp2(j) + 1ăIF yvp2(j) < 0 THEN yvp2(j) = 0: yvf2(j) = 1ăIF yvp2(j) > ydim THEN yvp2(j) = ydim: yvf2(j) = 0ăNEXTăăREM ************************************************************** FIRE !!!ăăFOR yp = 0 TO ydimăFOR xp = 0 TO xdimăăcol = POINT(xp, yp)ăcol = col + POINT(xp - 1, yp)ăă' ************** BLACK and WHITE JUMP ROUTINE ****************ăIF col = 0 THEN GOTO fastout: ' BLACK JUMPăIF col >= 72 THEN col = (col - (col / 3)) / 2: GOTO fastout2: ' WHITE JUMPă' ************************************************************ăăcol = col + POINT(xp, yp - 1)ăcol = col + POINT(xp, yp + 1)ăcol = col + POINT(xp + 1, yp)ăcol = INT(col / 5 - b)ă'IF col < 0 THEN col = 0ă'IF col > 48 THEN col = 48ăăfastout2:ăPSET (xp, yp), col + (RND * rd)ăfastout:ăăNEXTăNEXTăLOOPăăSUB pal (c%, r%, g%, b%)ăOUT &H3C7, c%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăEND SUBăăAngelo Ken Pesce               ENHANCED FIRE EFFECT V3.0      ken@uniserv.uniplan.it         01-15-97 (01:00)       QB, QBasic, PDS        137  3692     APS30.BAS   ' FOR BETTER RESULTS COMPILE IT WITH ALTERNATE MATH PDS' 7 OPTIONăăDECLARE SUB pal (c%, r%, g%, b%)ăREM ******************************************************* CONFIGăăDEFINT A-Zăă'********************************************************** initialize varsăăCLSăRANDOMIZE (TIMER)ăăPRINT "ANGELO KEN PESCE 1996 - PHOBIA 1996 (pallette routine)"ăPRINT "QuickBasic Fire Demo             v3"ăPRINT "--------------------------"ăPRINT "Features:"ăPRINTăPRINT "Three Pixel Interpolation (3+1)  v2"ăPRINT "Improved Black Jump              v2"ăPRINT "--------------------------"ăPRINT "SET VARIABLES:               (press enter for defaults) "ăPRINTăPRINTăINPUT "X DIM (100-320)"; xdimăIF xdim > 320 THEN xdim = 320ăIF xdim < 100 THEN xdim = 100ăINPUT "Y DIM (100-200)"; ydimăIF ydim > 200 THEN ydim = 200ăIF ydim < 100 THEN ydim = 100ă1 INPUT "X SPEED (0-3) (not working propely yet)"; xvelăIF xvel > 3 OR xvel < 0 THEN PRINT "MINIMUM VEL 0, MAXIMUM VEL 3": GOTO 1ă2 INPUT "Y SPEED (0-3) (not working propely yet)"; yvelăIF yvel > 3 OR yvel < 0 THEN PRINT "MINIMUM VEL 0, MAXIMUM VEL 3": GOTO 2ăINPUT "C Speed (0.1-1)"; băIF b > 1 THEN b = 1ăIF b < .1 THEN b = .1ăINPUT "Lines (1-15)"; vnăIF vn > 15 THEN vn = 15ăIF vn < 1 THEN vn = 1ăăSCREEN 13ăă'********************************************************** Init. ArraysăăDIM xvp1(vn)ăDIM xvp2(vn)ăDIM yvp1(vn)ăDIM yvp2(vn)ăDIM xvf1(vn)ăDIM xvf2(vn)ăDIM yvf1(vn)ăDIM yvf2(vn)ăăFOR j = 1 TO vnăxvp1(j) = INT((xdim + 1) * RND + 1)ăxvp2(j) = INT((xdim + 1) * RND + 1)ăyvp1(j) = INT((ydim + 1) * RND + 1)ăyvp2(j) = INT((ydim + 1) * RND + 1)ăNEXTăăREM ******************************************************* PALETTE INITă' THIS ROUTINE WAS MADE BY PHOBIA 1996!!!ăăFOR a% = 0 TO 63               ' Change the palette, colors 0-48ă   pal a% / 4, a%, 0, 0ă   pal a% / 4 + 16, 63, a%, 0ă   pal a% / 4 + 32, 63, 63, a%ăNEXTăăREM *********************************************** LINE PLOTTING ROUTINEăăDOăă' DISPLAY ROUTINEăăFOR j = 1 TO vnăLINE (xvp1(j), yvp1(j))-(xvp2(j), yvp2(j)), 48ăNEXTăă' UPDATE ROUTINEăăFOR j = 1 TO vnăă IF xvf1(j) = 0 THEN xvp1(j) = xvp1(j) - 2ă IF xvf1(j) = 1 THEN xvp1(j) = xvp1(j) + 2ă IF xvp1(j) < 0 THEN xvp1(j) = 0: xvf1(j) = 1ă IF xvp1(j) > xdim THEN xvp1(j) = xdim: xvf1(j) = 0ă IF yvf1(j) = 0 THEN yvp1(j) = yvp1(j) - 2ă IF yvf1(j) = 1 THEN yvp1(j) = yvp1(j) + 2ă IF yvp1(j) < 0 THEN yvp1(j) = 0: yvf1(j) = 1ă IF yvp1(j) > ydim THEN yvp1(j) = ydim: yvf1(j) = 0ă IF xvf2(j) = 0 THEN xvp2(j) = xvp2(j) - 2ă IF xvf2(j) = 1 THEN xvp2(j) = xvp2(j) + 2ă IF xvp2(j) < 0 THEN xvp2(j) = 0: xvf2(j) = 1ă IF xvp2(j) > xdim THEN xvp2(j) = xdim: xvf2(j) = 0ă IF yvf2(j) = 0 THEN yvp2(j) = yvp2(j) - 2ă IF yvf2(j) = 1 THEN yvp2(j) = yvp2(j) + 2ă IF yvp2(j) < 0 THEN yvp2(j) = 0: yvf2(j) = 1ă IF yvp2(j) > ydim THEN yvp2(j) = ydim: yvf2(j) = 0ăăNEXTăăREM ************************************************************** FIRE !!!ăăCONST xstart = 0, ystart = 0ăxend = xdimăyend = ydimăCONST cmax = 48ăFOR yp = ystart TO yendăFOR xp = xstart TO xendăăcol = POINT(xp + 1, yp)ăcol = col + POINT(xp - 1, yp)ă' ************** BLACK and WHITE JUMP ROUTINE ****************ăIF col = 0 THEN GOTO fastoută'IF col >= 72 THEN col = (col + 72) / 4: GOTO fastout2ă' ************************************************************ăăcol = col + POINT(xp, yp + 1)ăcol = col + POINT(xp, yp - 1)ăcol = INT(col / 4 - b)ăIF col < 0 THEN col = 0ăIF col > cmax THEN col = cmaxăfastout2:ăPSET (xp - xvel, yp - yvel), colăfastout:ăNEXTăNEXTăLOOPăăSUB pal (c%, r%, g%, b%)ăOUT &H3C7, c%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăEND SUBăăUncle Shackles                 SIN/COS PLASMA                 shadebob@algonet.se            01-15-97 (17:54)       QB, QBasic, PDS        107  2485     PLASMA.BAS  '        *********************************************************ă'        * Some sort of SIN/COS plasma by Uncle Shackles in 1997 *ă'        *********************************************************ăă' Note! You will need a Pentium to get this run fast... For best performance,ă' compile to an EXE file and run in DOS mode, skip AUTOEXEC.BAT andă' CONFIG.SYS!ăă' Want to contact me? Send an e-mail to <shadebob@algonet.se>!ăăDEFINT A-Zăh:ăINPUT "Size (1 - 100, ENTER = 50): ", sizeăIF size = 0 THEN size = 50ăIF size < 1 THEN PRINT "Too small!": GOTO hăIF size > 100 THEN PRINT "Too big!": GOTO hăSCREEN 13ăDEF SEG = &HA000ăOUT &H3D4, 9ăOUT &H3D5, 3ăăpi = 3.141592653589793#ăDIM v1 AS SINGLE, v2 AS SINGLE, v3 AS SINGLEăv2 = 170: v3 = 260ăDIM rot(size ^ 2)ăăFOR y = 0 TO size - 1ăFOR x = 0 TO size - 1ărot(x + (y * (size))) = SQR((x ^ 2) + (y ^ 2))ăNEXT xăNEXT yăăDIM r(256), g(256), b(256)ăFOR x = 0 TO 63ăOUT &H3C9, x: r(x) = xăOUT &H3C9, 0ăOUT &H3C9, 0ăNEXT xăăFOR x = 0 TO 63ăOUT &H3C9, 63: r(x + 64) = 63ăOUT &H3C9, 0ăOUT &H3C9, x: b(x + 64) = xăNEXT xăăFOR x = 0 TO 63ăOUT &H3C9, 63 - x: r(x + 128) = 63 - xăOUT &H3C9, x: g(x + 128) = xăOUT &H3C9, 63: b(x + 128) = 63ăNEXT xăăFOR x = 0 TO 63ăOUT &H3C9, 0ăOUT &H3C9, 63 - x: g(x + 192) = 63 - xăOUT &H3C9, 63 - x: b(x + 192) = 63 - xăNEXT xăDIM val4 AS SINGLEăDIM grad2rad AS SINGLEăgrad2rad = pi / 180ăDIM h AS SINGLE, add2 AS SINGLE, val1 AS SINGLE, val2 AS SINGLE, add9 AS SINGLE, gr AS SINGLEăh = 100 / 1.2ăPALETTE 255, ((256 ^ 2) * 63) + (256 * 63) + 63ăLOCATE 11, 19: COLOR 255: PRINT "Code by Uncle Shackles"ăg:                                    ăFOR y = 0 TO size - 1ăFOR x = 0 TO size - 1ăadd3 = add2 * xăadd4 = add9 * yăval1 = grad2rad * (add3 + (x * (rot(x + (y * (size))) / 20) + add5))ăxx = (SIN(val1) * 100) + 128ăval2 = grad2rad * (add4 + (y * (rot(x + (y * (size))) / 20) + add6))ăyy = (COS(val2) * h) + 128ăz = (xx + yy) / 2ăăPSET (x * 2, y), z: PSET (x * 2 + 1, y), zăNEXT xăNEXT yăadd5 = add5 + 3ăadd6 = add6 + 2ăgr = gr + 1ăadd2 = (SIN(grad2rad * gr) * 4) - 4ăadd9 = (COS(grad2rad * gr) * 5) - 4ăIF INKEY$ <> "" THEN ENDăFOR x = 0 TO 5ăGOSUB rotpalăNEXT xăFOR x = 2 TO 249ăOUT &H3C7, xăOUT &H3C9, r(x)ăOUT &H3C9, g(x)ăOUT &H3C9, b(x)ăNEXTăGOTO găărotpal:ătr = r(0)ătg = g(0)ătb = b(0)ăFOR x = 1 TO 255ăr(x - 1) = r(x)ăg(x - 1) = g(x)ăb(x - 1) = b(x)ăNEXT xăr(255) = trăg(255) = tgăb(255) = tbăRETURNăRyan White                     BOX OF COLOR MORPH             bigfooty@bellsouth.net         01-19-97 (15:30)       QB, QBasic, PDS        52   2634     BOCMORPH.BAS'BOCmorphă'Box Of Color morph.... um... n/măă'Due to everyone wanting me to make more of my stuff, I though, NO problem.ă'I stopped programming cause I have no time anymore, but I will still pută'out a few a every once in a while.   This one was thought up while I wasă'sitting in ITT Tech.   Hope ya like.ă'And to contact me, my new email is:  bigfooty@bellsouth.netăăSCREEN 13ăDEFINT A-WăDIM c(255, 2), co(255, 2)ăminx = 0: maxx = 319: miny = 0: maxy = 199: c = 1ăăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăăst:ăFOR x = minx TO maxxăPSET (x, miny), căc = c + 1: IF c = 256 THEN c = 1ăNEXT xăFOR y = miny TO maxyăPSET (maxx, y), căc = c + 1: IF c = 256 THEN c = 1ăNEXT yăFOR x = maxx TO minx STEP -1ăPSET (x, maxy), căc = c + 1: IF c = 256 THEN c = 1ăNEXT xăFOR y = maxy TO miny STEP -1ăPSET (minx, y), căc = c + 1: IF c = 256 THEN c = 1ăNEXT yăminx = minx + 1: IF minx >= 160 THEN minx = 160: ccc1 = 1ămaxx = maxx - 1: IF maxx <= 159 THEN maxx = 160: ccc2 = 1ăminy = miny + 1: IF miny >= 100 THEN miny = 100: ccc3 = 1ămaxy = maxy - 1: IF maxy <= 99 THEN maxy = 100: ccc4 = 1ăIF ccc1 + ccc2 + ccc3 + ccc4 <> 4 THEN GOTO stăăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăNick Kochakian                 MYSTERY SPEW #2: EXPLOSIONS    NickK@worldnet.att.net         01-20-97 (16:40)       QB, QBasic, PDS        149  3818     MYSTSPEW.BAS'----------------------------------------------------------------------------ă'Program name:  Mystery Spew #2 - Explosionsă'ă'Date made:  1/20/97, 1997ă'ă'Author:  - Nick Kochakian -ă'ă'Changes:ă'- If you put some text / graphics on the screen the dots will bounce offă'  of it. (But, that dosen't work too well...)ă'- Dots bounce off each otheră'ă'If you want to use this program in any of your programs please mentionă'my name somewhere to give me credit for making it!ă'ă'If you have any comments or questions please E-mail me at:ă'ă'nickK@worldnet.att.netă'ă'Thanks! :)ă'----------------------------------------------------------------------------ăă'DEFINT A-Z 'Un-comment this to have more dots on high res. modes or low res.ăăRANDOMIZE TIMERăMODE = 13ă'Low res.:ă'1 - Cgaă'7 - Egaă'13 - Vgaă'ă'High res.:ă'9 - Egaă'12 - VgaăăSCREEN MODEăăLOCATE 6, 5: PRINT "Mystery Spew!"ăLOCATE 7, 5: PRINT "1997 By: - Nick Kochakian -"ăLOCATE 8, 5: PRINT "The text is about to be eaten"ăăCOLOR$ = "Y"ă          'Y - is completely random coloră          'N - is no coloră          'B - is bright. Bright colors onlyă          'G - is the grey scaleă          'What to use COLOR$ in other screen modes:ă          'CGA - is the CGA color paletteă          'EGA - is the EGA color paletteăăSPEWS = 100 'Number of dots to spewăXS = SPEWS 'X locationăYS = SPEWS 'Y locationăDS = SPEWS 'DirectionăCS = SPEWSăăDIM X(XS)ăDIM Y(YS)ăDIM D(DS)ăDIM C(CS)ăăXS = 1ăYS = 1ăDS = 1ăCS = 1ăăFOR I = 1 TO SPEWSăD(DS) = INT(RND * 9) + 1ăX(XS) = 150ăY(YS) = 100ăC(CS) = INT(RND * 256) + 1ăIF MODE = 9 THENăX(XS) = 320ăY(YS) = 200ăEND IFăIF MODE = 12 THENăX(XS) = 320ăY(YS) = 220ăEND IFăIF UCASE$(COLOR$) = "EGA" THEN C(CS) = INT(RND * 15) + 1ăIF UCASE$(COLOR$) = "CGA" THEN C(CS) = INT(RND * 4) + 1ăIF UCASE$(COLOR$) = "G" THEN C(CS) = INT(RND * 30) + 1: IF C(CS) < 16 THEN C(CS) = 16ăIF UCASE$(COLOR$) = "B" AND C(CS) > 165 THEN C(CS) = 165ăIF UCASE$(COLOR$) = "N" THEN C(CS) = 15ăDS = DS + 1ăXS = XS + 1ăYS = YS + 1ăCS = CS + 1ăNEXT IăăDS = 1ăXS = 1ăYS = 1ăCS = 1ăă'Main loopăDOăPSET (X(XS), Y(YS)), 0ăIF D(DS) = 1 THEN X(XS) = X(XS) - 1ăIF D(DS) = 2 THEN Y(YS) = Y(YS) + 1: X(XS) = X(XS) + 1ăIF D(DS) = 3 THEN X(XS) = X(XS) + 1ăIF D(DS) = 4 THEN Y(YS) = Y(YS) - 1ăIF D(DS) = 5 THEN Y(YS) = Y(YS) - 1: X(XS) = X(XS) - 1ăIF D(DS) = 6 THEN Y(YS) = Y(YS) + 1:  X(XS) = X(XS) - 1ăIF D(DS) = 7 THEN Y(YS) = Y(YS) - 1:  X(XS) = X(XS) + 1ăIF D(DS) = 8 THEN Y(YS) = Y(YS) + 1ăIF POINT(X(XS), Y(YS) + 1) <> 0 THEN GOSUB RERAND:ăăPSET (X(XS), Y(YS)), C(CS)ăIF MODE = 1 OR MODE = 7 OR MODE = 13 THENăIF X(XS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) > 200 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF X(XS) > 300 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăEND IFăăIF MODE = 9 THENăIF X(XS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) > 320 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF X(XS) > 640 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăEND IFăăIF MODE = 12 THENăIF X(XS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) > 470 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF X(XS) > 630 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăIF Y(YS) < 1 THEN PSET (X(XS), Y(YS)), 0: GOSUB RERAND:ăEND IFă'640x350 screen 9ăDS = DS + 1ăXS = XS + 1ăYS = YS + 1ăCS = CS + 1ă'Here's something fun to do:ă'1 -> Set DS to zero - 100ă'2 -> Set DS and XS to zero - foură'3 -> Set DS and YS to zero - fourăIF DS > SPEWS THEN DS = 1ăIF XS > SPEWS THEN XS = 1ăIF YS > SPEWS THEN YS = 1ăIF CS > SPEWS THEN CS = 1ăLOOP UNTIL INKEY$ <> ""ăENDăăRERAND:ăD(DS) = INT(RND * 9) + 1ăRETURNăăMatt Bross                     WORMHOLE & SPRITE ANIMATION    oh_brother@geocities.com       01-21-97 (20:20)       QB, QBasic, PDS        328  8175     WORMHOLE.BASDEFINT A-ZăDECLARE SUB info ()ăDECLARE SUB ReadPal ()ăDECLARE SUB MeltSub ()ăDECLARE SUB Spin (rot!)ăDECLARE SUB Table ()ăDECLARE SUB RotPal ()ăDECLARE SUB GetKey ()ăDECLARE SUB SprSub ()ăDECLARE SUB Fire ()ăDECLARE SUB SetScr ()ăDECLARE SUB DrawHole ()ăDECLARE SUB PPSET (x%, y%, c1%)ăDECLARE SUB SetPal (c2%, Red%, Green%, Blue%)ăCOMMON SHARED UserFireInput, x, y, mx, my, c1, c2ăCOMMON SHARED Red, Green, BlueăCOMMON SHARED RedChange, GreenChange, BlueChangeăCOMMON SHARED ReStart, Done, melt, Ani, UseFire, SprRot, k$, dirăCOMMON SHARED imsx, imsy, ix, iy, cx, cy, rot!ăCOMMON SHARED MeltAmountăăCONST TRUE = -1: FALSE = NOT TRUEăăimsx = 20: imsy = 20        'variables for sprite rotationăcx = imsx / 2: cy = imsy / 2ăix = 160: iy = 200 - imsxăăMeltAmount = 100            'How much to meltăă'dim spritesăDIM SHARED Spr(222)                      'little circle thingăDIM SHARED SprMask(222)                  'its maskăDIM SHARED SprBkg(222)                   'its backgroundăDIM SHARED FireBkg(222)                  'fires backgroundăDIM SHARED image(imsx, imsy)             'spinning thingăDIM SHARED melt(2)                       'melt routineăăDIM SHARED OldRed(255)       'arrays to save old paletteăDIM SHARED OldBlue(255)ăDIM SHARED OldGreen(255)ăăinfoăăSCREEN 13: CLS : RANDOMIZE TIMERăăUserFireInput = 5          'controls the speed that the fire changesă                           'the greater the slower the fire changesăReadPal                    'Save old paletteăăSetScr                     'gets sprites draws screenăăRed = 0: Green = 0: Blue = 0ăFOR c = 90 TO 76 STEP -1   'set fire paletteă  Red = Red + 3ă  SetPal c, Red, 0, 0ăNEXTăăRed = 0: Green = 20: Blue = 0ăFOR c = 75 TO 64 STEP -1   'set palette for sprite animationă  Green = Green + 2ă  SetPal c, Red, Green, BlueăNEXTăăRed = 30: Green = 0: Blue = 63 - imsx * 2ăFOR c = 92 TO 92 + imsy    'set palette for sprite rotationă  Red = Redă  Green = Greenă  Blue = Blue + 2ă  SetPal c, Red, Green, BlueăNEXTăăSetPal 91, 63, 63, 63      'set palette for lettersăăDEF SEG = &HA000           'define the segment for ppset routineăstart:ăRedChange = INT(RND * 2)   'controls redăGreenChange = INT(RND * 2) 'controls greenăBlueChange = INT(RND * 2)  'controls blueăIF RedChange = 0 AND GreenChange = 0 AND BlueChange = 0 THEN GOTO startă                           'make sure the palette isn't all blackădir = -dir                 'controls the direction of the palette rotateăăăDOăăIF UseFire = TRUE THEN Fire 'calls Fire routineă                          ăIF Ani = TRUE THEN SprSub   'calls Sprite Animation routine (sort of slow)ăăRotPal                      'calls Palette Rotate routine for WormHole EffectăăIF SprRot = TRUE THENă  Spin ra!                  'calls Sprite Rotation routine (very slow)ă  ra! = ra! + .1ăEND IFăăGetKey                      'it does what it saysăăIF ReStart = TRUE THEN ReStart = FALSE: GOTO startăIF Done = TRUE THEN Done = FALSE: GOTO finishăIF melt = TRUE THEN MeltSub 'melts the background (this sub is not mine andă                            'I found it somewhere and I don't know whoseă                            'it is, but it looks cool here.  So thanks toă                            'whoever wrote it.ăLOOPăfinish:ăăFOR c = 0 TO 255            'restores old paletteăSetPal c, OldRed(c), OldGreen(c), OldBlue(c)ăNEXTăăDEF SEGăSCREEN 0, 0, 0, 0ăWIDTH 80, 25ăENDăăSUB DrawHoleăCLSăx = 160ădir = 1ăFOR s = 0 TO 450ă  y = -(SQR(s) * 10) + 200ă   IF c >= 62 THEN c = 0 ELSE c = c + 1ă     CIRCLE (x, y), s, c + 1, , , 1 / 2ă     CIRCLE (x, y + 1), s, c + 1, , , 1 / 2ă     CIRCLE (x, y + 2), s, c + 1, , , 1 / 2ăNEXTăEND SUBăăSUB Fire STATICăăIF first = 0 THENăăfirst = 1ăăCIRCLE (160, 100), 10, 76, 3.1, 6.25ăGET (150, 90)-(170, 110), FireBkgăăELSEăăFireDelay = FireDelay + 1ăIF FireDelay MOD UserFireInput = 0 THEN FireDelay = 0ăIF FireDelay = 0 THENăPUT (150, 90), FireBkg, PSETă  FOR fy = 110 TO 90 STEP -1ă  FOR fx = 170 TO 150 STEP -1ăă    p1 = POINT(fx, fy)ă      IF p1 > 75 AND p1 < 84 THENă        o = INT(RND * 5)ă        p2 = POINT(fx, fy - 1)ă          IF p2 < 64 THEN PPSET fx, fy - 1, p1 + oă      END IFă  NEXTă  NEXTăEND IFăăEND IFăEND SUBăăSUB GetKeyăk$ = INKEY$ăIF k$ = "4" THEN mx = mx - 1ăIF k$ = "6" THEN mx = mx + 1ăIF k$ = "2" THEN my = my + 1ăIF k$ = "8" THEN my = my - 1ăIF k$ = " " THEN ReStart = TRUEăIF UCASE$(k$) = "Q" THEN Done = TRUEăIF UCASE$(k$) = "M" THENă    IF melt = FALSE THEN melt = TRUE: EXIT SUBă    IF melt = TRUE THEN melt = FALSEăEND IFăIF UCASE$(k$) = "F" THENă    IF UseFire = FALSE THEN UseFire = TRUE: EXIT SUBă    IF UseFire = TRUE THEN UseFire = FALSEăEND IFăIF UCASE$(k$) = "S" THENă    IF Ani = FALSE THEN Ani = TRUE: EXIT SUBă    IF Ani = TRUE THEN Ani = FALSEăEND IFăIF UCASE$(k$) = "R" THENă    IF SprRot = FALSE THEN SprRot = TRUE: EXIT SUBă    IF SprRot = TRUE THEN SprRot = FALSEăEND IFăEND SUBăăSUB infoăCLSăPRINT "Hole.bas by Matt Bross"ăPRINT "Homepage-->http://www.geocities.com/SoHo/7067/"ăPRINT "Email----->oh_bother@geocities.com"ăPRINT ""ăPRINT "Use as you like as long as I am given some credit"ăPRINT ""ăPRINT "I know that the wormhole effect is very like the one by Lucifer Productions"ăPRINT "But I swear not a line of code was stolen"ăPRINT ""ăPRINT "controls"ăPRINT "--------"ăPRINT "space bar-change hole color/direction"ăPRINT "S/s-starts/stops flicker-free screen 13 sprite animation"ăPRINT "R/r-starts/stops sprite rotation"ăPRINT "M/m-starts/stops melting routine"ăPRINT "F/f-starts/stops fire routine"ăPRINT "Num Pad controls sprite in Sprite animation"ăPRINT "Make sure your NUM LOCK is on"ăPRINT "Q/q-quits"ăDO: LOOP UNTIL INKEY$ <> ""ăEND SUBăăSUB MeltSubăFOR t = 0 TO MeltAmountăMeltX = INT(RND * 318)ăMeltY = INT(RND * 199)ăăGET (MeltX, MeltY)-(MeltX + 1, MeltY), meltăPUT (MeltX, MeltY + 1), melt, PSETăNEXTăEND SUBăăSUB PPSET (x, y, c)ăPOKE y * 320& + x, căEND SUBăăSUB ReadPalăFOR c = 0 TO 255ăOUT &H3C7, căOldRed(c) = INP(&H3C9)ăOldGreen(c) = INP(&H3C9)ăOldBlue = (c) = INP(&H3C9)ăNEXTăEND SUBăăSUB RotPal STATICăIF dir = -1 THEN a = 1: b = 64: s = 1ăIF dir = 1 THEN a = 64: b = 1: s = -1ă  FOR i = a TO b STEP să   SetPal i, Red, Green, Blueă     Red = Red + RedChangeă     Green = Green + GreenChangeă     Blue = Blue + BlueChangeă   IF Red >= 63 THEN Red = 0ă   IF Green >= 63 THEN Green = 0ă   IF Blue >= 63 THEN Blue = 0ă  NEXTăEND SUBăăSUB SetPal (c, Red, Green, Blue)ă  OUT &H3C8, că  OUT &H3C9, Redă  OUT &H3C9, Greenă  OUT &H3C9, BlueăEND SUBăăSUB SetScrăăCLSăFOR a = 0 TO imsxăLINE (0, a)-(imsx, a), a + 92ăNEXTăLINE (0, 0)-(imsx, imsy), 0, BăăFOR sy = 0 TO imsyăFOR sx = 0 TO imsxăimage(sx, sy) = POINT(sx, sy)ăNEXT: NEXTăăCLSăLINE (20, 0)-(40, 20), 255, BFăCIRCLE (30, 10), 10, 0: PAINT (30, 10), 0ăGET (20, 0)-(40, 20), SprMaskăăCLSăFOR r = 10 TO 0 STEP -1ăCIRCLE (10, 10), r, r + 65: PAINT (10, 10), r + 65ăNEXTăGET (0, 0)-(20, 20), SprăăDrawHoleăăx = 0: y = 0ăGET (x, y)-(x + 20, y + 20), SprBkgăEND SUBăăSUB Spin (rot!)ăăhalf! = 135.085ăFOR sy = 0 TO imsyăFOR sx = 0 TO imsxă  a = sy - cyă  b = sx - cxă        dis! = SQR((sx - cx) ^ 2 + (sy - cy) ^ 2)ă      IF b = 0 THENă        an! = rot! + half! / 2ă        IF sy <= cy THEN an! = an! + half!ă        PPSET CINT(ix + (SIN(an!) * dis!)), CINT(iy + (COS(an!) * dis!)), image(sx, sy)ă      ELSEă        an! = ATN(a / b)ă        an! = an! + rot!ă          IF sx >= cx THEN an! = an! + half!ă        PPSET CINT(ix + SIN(an!) * dis!), CINT(iy + COS(an!) * dis!), image(sx, sy)ă      END IFăNEXTăNEXTăEND SUBăăSUB SprSub STATICăăIF x < 0 THEN x = 0ăIF y < 0 THEN y = 0ăIF x > 299 THEN x = 299ăIF y > 179 THEN y = 179ăăWAIT &H3DA, 8ăPUT (x, y), SprBkg, PSETă  x = x + mxă  y = y + myă    IF x < 0 THEN x = 0ă    IF y < 0 THEN y = 0ă    IF x > 299 THEN x = 299ă    IF y > 179 THEN y = 179ă  GET (x, y)-(x + 20, y + 20), SprBkgăPUT (x, y), SprMask, ANDăPUT (x, y), Spr, ORăăGetKeyăăEND SUBăDave Shea                      SPRITE MASKING                 FidoNet QUIK_BAS Echo          01-19-97 (14:29)       QB, QBasic, PDS        60   2206     SPRIMASK.BAS'  >can anybody help me figure out how to make a sprite moveă'  >around on the background with out blotting out a squareă'  >behind my figure.  I am also curious about HEX routines ină'  >QB, if anyone could help better understand either of theseă'  >it would be nice.ăă'I'll take the first question for now. You have to use a process calledă'"Masking". This basically picks a color that you aren't going to show ină'your picture, and uses it as a background. Rather than describe theă'whole thing, I'll just do it. Try this out.ăă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă' MASK.BAS  by  Dave Sheaă' Released to Public Domain on January 19th, 1997.ă'ă' Compile: MicroSoft Quick Basic 4.5, PDS 7.1ă'ă' Desc: Demonstrates the technique of masking a graphics array.ă'ă' (Use at your own risk)ă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăCLS : SCREEN 13ăDIM Circ%(1557), MCirc%(1557)ăăTCol = 0                             'Color to be transparentă                                     '(I ALWAYS use 0)ăMCol = 255                           'Mask colorăăFOR a = 15 TO 1 STEP -1ă CIRCLE (160, 100), a * 2, a         'Draw the circleă PAINT (160, 100), aăNEXTăăGET (130, 75)-(190, 125), Circ%      'Store it in array Circ%ăăFOR a = 130 TO 190ă FOR b = 75 TO 125ă                    'The following commands search the circle, andă                    'change any pixel that's NOT the transparentă                    'color to the transparent color, and any pixelă                    'that IS the transparent color to the mask coloră                    '(This is the masking process)ăă  IF POINT(a, b) = TCol THEN PSET (a, b), MColă  IF POINT(a, b) <> TCol AND POINT(a, b) <> MCol THEN PSET (a, b), TColă NEXTăNEXTăăGET (130, 75)-(190, 125), MCirc%      'Get the new Masked CircleăăCLSăăFOR a = 1 TO 200ă LINE (1, a)-(320, a), a              'Draw some lines for a backgroundăNEXTăăPUT (130, 75), MCirc%, AND            'Lay down the mask using ANDăPUT (130, 75), Circ%, XOR             'Lay down circle using XORă                                      '(which is the default for PSET)ăNick Kochakian                 PIXEL LOADER/SAVER             NickK@worldnet.att.net         01-19-97 (16:25)       QB, QBasic, PDS        397  6122     PIX.BAS     DECLARE SUB PIXLD (FILENAM$, TRANS$)ăDECLARE SUB PIXSAV (filnam$, wip$, yms%, xms%, yme%, xme%)ăă'Pix - Pixle Loader / Saveră'ă'1997 By: - Nick Kochakian -ă'ă'This isn't the fasest screen capture. It works best on drawing spritesă'for games. The loading is ALOT faster than the saving is... So you COULDă'save a screen for a game then load it. Do whatever...ă'ă'If you'd like to use any of these routines do so. But please give me someă'credit where it is needed the most!ă'ă'Thanks! :)ă'ă'If you have any questions or comments please E-mail me at:ă'ă'nickK@worldnet.att.netăă'This program will either...ă'1 - Start at a certain X,Y place and end at a certain X,Y placeă'2 - Save the entire screenăăSCREEN 13ăăRANDOMIZE TIMERăă'Put boxes / lines on the screenăcntr = 0ăDOăX = INT(RND * 300) + 1ăY = INT(RND * 200) + 1ăx2 = INT(RND * 200) + 1ăy2 = INT(RND * 300) + 1ăCOL = INT(RND * 256) + 1ăLINE (X, Y)-(x2, y2), COL, BăLINE (X, Y)-(x2, y2), COLăcntr = cntr + 1ăLOOP UNTIL cntr = 1000ăLOCATE 2, 2: PRINT "Pixle saver / loader"ăLOCATE 3, 2: PRINT "1997 By: - Nick Kochakian -"ăăCALL PIXSAV("PIXLE.PIX", "Y", 0, 0, 30, 300) 'Rip some of the top of the screenăă'How to use PIXSAVă'filnam$ - is the file name you want to save your Pixle Picture toă'wip$ - is if you want to have the Pixle Pointer wipe out where its beenă'yms% - Starting location of Y. The defualt is 0ă'xms% - Starting location of X. The defualt is 0ă'yme% - Ending location of Y. The defualt is 200ă'xme% - Ending location of Y. The defualt is 300ă'Y is up/down placeră'X is left/right placeră'To set any of the things mentioned above to their defualt set their valueă'to zero.ăăSLEEP 1ăCLSăCALL PIXLD("PIXLE.PIX", "N")ăSLEEP 1ăCLSăPAINT (0, 0), 1ăLOCATE 10, 1: PRINT "PIXLD with TRANS$ set to Y"ăCALL PIXLD("PIXLE.PIX", "Y")ăă'56 first maxă'3136 last maxă'7 per lineă'8 linesăă'How to use PIXLDă'FILENAM$ - is the file to load your Pixle Picture fromă'TRANS$ - makes the color zero invisible if TRANS$ is set to "Y"ăENDăăDATA  0ăDATA  1ăDATA  2ăDATA  3ăDATA  4ăDATA  5ăDATA  6ăDATA  7ăDATA  8ăDATA  9ăDATA  10ăDATA  11ăDATA  12ăDATA  13ăDATA  14ăDATA  15ăDATA  16ăDATA  17ăDATA  18ăDATA  19ăDATA  20ăDATA  21ăDATA  22ăDATA  23ăDATA  24ăDATA  25ăDATA  26ăDATA  27ăDATA  28ăDATA  29ăDATA  30ăDATA  31ăDATA  32ăDATA  33ăDATA  34ăDATA  35ăDATA  36ăDATA  37ăDATA  38ăDATA  39ăDATA  40ăDATA  41ăDATA  42ăDATA  43ăDATA  44ăDATA  45ăDATA  46ăDATA  47ăDATA  48ăDATA  49ăDATA  50ăDATA  51ăDATA  52ăDATA  53ăDATA  54ăDATA  55ăDATA  56ăDATA  57ăDATA  58ăDATA  59ăDATA  60ăDATA  61ăDATA  62ăDATA  63ăDATA  64ăDATA  65ăDATA  66ăDATA  67ăDATA  68ăDATA  69ăDATA  70ăDATA  71ăDATA  72ăDATA  73ăDATA  74ăDATA  75ăDATA  76ăDATA  77ăDATA  78ăDATA  79ăDATA  80ăDATA  81ăDATA  82ăDATA  83ăDATA  84ăDATA  85ăDATA  86ăDATA  87ăDATA  88ăDATA  89ăDATA  90ăDATA  91ăDATA  92ăDATA  93ăDATA  94ăDATA  95ăDATA  96ăDATA  97ăDATA  98ăDATA  99ăDATA  100ăDATA  101ăDATA  102ăDATA  103ăDATA  104ăDATA  105ăDATA  106ăDATA  107ăDATA  108ăDATA  109ăDATA  110ăDATA  111ăDATA  112ăDATA  113ăDATA  114ăDATA  115ăDATA  116ăDATA  117ăDATA  118ăDATA  119ăDATA  120ăDATA  121ăDATA  122ăDATA  123ăDATA  124ăDATA  125ăDATA  126ăDATA  127ăDATA  128ăDATA  129ăDATA  130ăDATA  131ăDATA  132ăDATA  133ăDATA  134ăDATA  135ăDATA  136ăDATA  137ăDATA  138ăDATA  139ăDATA  140ăDATA  141ăDATA  142ăDATA  143ăDATA  144ăDATA  145ăDATA  146ăDATA  147ăDATA  148ăDATA  149ăDATA  150ăDATA  151ăDATA  152ăDATA  153ăDATA  154ăDATA  155ăDATA  156ăDATA  157ăDATA  158ăDATA  159ăDATA  160ăDATA  161ăDATA  162ăDATA  163ăDATA  164ăDATA  165ăDATA  166ăDATA  167ăDATA  168ăDATA  169ăDATA  170ăDATA  171ăDATA  172ăDATA  173ăDATA  174ăDATA  175ăDATA  176ăDATA  177ăDATA  178ăDATA  179ăDATA  180ăDATA  181ăDATA  182ăDATA  183ăDATA  184ăDATA  185ăDATA  186ăDATA  187ăDATA  188ăDATA  189ăDATA  190ăDATA  191ăDATA  192ăDATA  193ăDATA  194ăDATA  195ăDATA  196ăDATA  197ăDATA  198ăDATA  199ăDATA  200ăDATA  201ăDATA  202ăDATA  203ăDATA  204ăDATA  205ăDATA  206ăDATA  207ăDATA  208ăDATA  209ăDATA  210ăDATA  211ăDATA  212ăDATA  213ăDATA  214ăDATA  215ăDATA  216ăDATA  217ăDATA  218ăDATA  219ăDATA  220ăDATA  221ăDATA  222ăDATA  223ăDATA  224ăDATA  225ăDATA  226ăDATA  227ăDATA  228ăDATA  229ăDATA  230ăDATA  231ăDATA  232ăDATA  233ăDATA  234ăDATA  235ăDATA  236ăDATA  237ăDATA  238ăDATA  239ăDATA  240ăDATA  241ăDATA  242ăDATA  243ăDATA  244ăDATA  245ăDATA  246ăDATA  247ăDATA  248ăDATA  249ăDATA  250ăDATA  251ăDATA  252ăDATA  253ăDATA  254ăDATA  255ăDATA  256ăăSUB PIXLD (FILENAM$, TRANS$)ăDEFINT A-Ză'This loads a saved Pixle fileăăFREEFIL = FREEFILEăOPEN FILENAM$ FOR INPUT AS #FREEFILăCNTT = 0ăX = 0ăY = 0ăDOăINPUT #FREEFIL, COLăIF COL = 0 AND UCASE$(TRANS$) = "Y" THEN Y = Y + 1ăIF COL = -20 THEN Y = 0: X = X + 1ăIF COL = -30 THEN CLOSE #FREEFIL: EXIT SUBăIF UCASE$(TRANS$) = "Y" AND COL = 0 THEN TRANS$ = "Y" ELSE PSET (X, Y), COLăIF UCASE$(TRANS$) = "Y" AND COL = 0 THEN TRANS$ = "Y" ELSE Y = Y + 1ă'CNTT = CNTT + 1ăLOOPăăăăEND SUBăăDEFSNG A-ZăSUB PIXSAV (filnam$, wip$, yms%, xms%, yme%, xme%)ăDEFINT A-Ză'$DYNAMICă'Saves the screen to a fileăfrefil = FREEFILEăOPEN filnam$ FOR OUTPUT AS #frefilăX = 0ăY = 0ăIF yms% <= 0 THEN Y = 0 ELSE Y = yms%ăIF xms% <= 0 THEN X = 0 ELSE X = xms%ăIF yme% <= 0 THEN ymax = 200 ELSE ymax = yme%ăIF xme% <= 0 THEN xmax = 300 ELSE xmax = xme%ăB$ = ""ăRESTOREăI = 256ăDIM A$(I)ăI = 0ăă'Read the color dataăFOR I = 0 TO 256ăREAD A$(I)ăNEXT IăăI = 0ăăDOăă'Get the color of the current point at X,Y and save the color to B$ăFOR I = 0 TO 256ăIF POINT(X, Y) = I THEN B$ = B$ + A$(I) + ","ăNEXT IăIF UCASE$(wip$) = "Y" THEN PSET (X, Y), 0ăIF Y > ymax THEN Y = 0: X = X + 1: PRINT #frefil, B$ + "-20": B$ = ""ăY = Y + 1ăLOOP UNTIL X > xmax OR INKEY$ = CHR$(32)ăPRINT #frefil, "-30"ăCLOSE #frefilăăEND SUBăNathan Barkei                  DISPLAY ARRAYS TO MEMORY       alt.lang.basic                 01-07-97 (00:33)       QB, QBasic, PDS        158  4306     VIDIMG.BAS  'From: preekout@aol.com (PreekOUT)ă'Newsgroups: alt.lang.basică'Subject: Re:  Sprite masking...ă'Date: 7 Jan 1997 00:33:11 GMTăă''ă''      Video Image Mungeră''      v1.0d4ă''      By Nathan Barkeiă''      Created 24L96ă''ăă''ă''      Purpose: Display arrays to memory by comparison of bitsă''             ă''      sprite name, offset, xpos, ypos, mode of placement, backcoloră''ă''ăăăDEFINT A-ZăăăSUB placegra (Sprite(), image, x, y, mode, tpc)ăăă        imagewidth = Sprite(image) / 8ă        imageheight = Sprite(image + 1)ă        WWIDTH = imagewidthăă''ă''CHECK IF OUTSIDE SCREEN WIDTHă''ăă        wx = xă                IF x < 0 THENă                    WWIDTH = imagewidth + xă                        wx = 0ă                        sourceofs = ABS(x)ă                ELSEIF x + imagewidth > 320 THENă                        WWIDTH = 320 - xă                END IFăăă''ă'' ERROR 5 IS A GEN ERROR REDIF ALL ERROR 5 ARE INTERNAL VIDEO MUNGE ERRORSă''ăă        IF WWIDTH < 0 THEN ERROR 5ăă        wheight = imageheightă        wy = yă                IF y < 0 THENă                        wheight = imageheight + yă                        wy = 0ă                        sourceofs = sourceofs + (ABS(y) * imagewidth)ă                ELSEIF y + imageheight > 200 THENă                        wheight = 200 - yă                END IFăă        IF wheight < 0 THEN ERROR 5ăă''ă'' MAKE NEW ARRAY FOR MUNGE DATAă''ăă        elements = ((WWIDTH + 1) \ 2) * wheight + 1ă        REDIM wimage(elements)ă        GET (wx, wy)-(wx - 1 + WWIDTH, wy - 1 + wheight), wimageă        wsegment = VARSEG(wimage(0))ă        woffset = 4ă        elmperimg = ((imagewidth + 1) \ 2) * imageheight + 2ă        startelm = imageă        sourceseg = VARSEG(Sprite(startelm))ă        sourceofs = sourceofs + VARPTR(Sprite(startelm)) + 4ăă''ă''SELECT TYPE OF OPPERATIONă''ăă        SELECT CASE modeă''ă''IN FRONT OF PIX NOT BIT 00ă''ă        CASE 0ă            FOR py = 1 TO wheightă                FOR PX = 0 TO WWIDTH - 1ă                    DEF SEG = sourcesegă                    sc = PEEK(sourceofs + PX)ă                        IF sc THENă                            DEF SEG = wsegmentă                            POKE woffset + PX, scă                        END IFă                 NEXTă                 woffset = woffset + WWIDTHă                 sourceofs = sourceofs + imagewidthă            NEXTă        ă''ă''TRANSPOSED ONTO ALL BIT 00ă''ă        CASE 1ă            FOR py = 1 TO wheightă                FOR PX = 0 TO WWIDTH - 1ă                    DEF SEG = sourcesegă                    sc = PEEK(sourceofs + PX)ă                    DEF SEG = wsegmentă                    wc = PEEK(woffset + PX)ă                        IF wc = 0 THENă                            POKE woffset + PX, scă                        END IFă                NEXTă                woffset = woffset + WWIDTHă                sourceofs = sourceofs + imagewidthă            NEXTă''ă''PLACED WITH BIT 00 AS BCOLORă''ă        CASE 2ă            FOR py = 1 TO wheightă                FOR PX = 0 TO WWIDTH - 1ă                    DEF SEG = sourcesegă                    sc = PEEK(sourceofs + PX)ă                        IF sc THENă                            DEF SEG = wsegmentă                            POKE woffset + PX, scă                        END IFă                    IF sc = 0 THENă                        DEF SEG = wsegmentă                        POKE woffset + PX, tpcă                    END IFă                 NEXTă                 woffset = woffset + WWIDTHă                 sourceofs = sourceofs + imagewidthă             NEXTă''ă''JUST SHOW EVERYTHINGă''ă        CASE 3ă            FOR py = 1 TO wheightă                FOR PX = 0 TO WWIDTH - 1ă                    DEF SEG = sourcesegă                    sc = PEEK(sourceofs + PX)ă                    DEF SEG = wsegmentă                    wc = PEEK(woffset + PX)ă                    POKE woffset + PX, scă                NEXTă                woffset = woffset + WWIDTHă                sourceofs = sourceofs + imagewidthă            NEXTăă        END SELECTă''ă''PLACE WORK ARRAYă''ă        PUT (wx, wy), wimage, PSETăăEND SUBăDenis Boyles                   TRANSPARENT SPRITE DEMO        FidoNet QUIK_BAS Echo          01-21-97 (00:30)       QB, QBasic, PDS        123  3941     SPRDEMO.BAS 'What you're talking about are transparent sprites, that is a spriteă'where the background `shows' through. The idea behind them is prettyă'simple, just `plot' the sprite `skipping' the transparent color.ăă'For example, in a 256 color sprite, you might make color number 0 youră'`transparent' color. Then when you draw the sprite, skip over any coloră'0 pixels.ăă'For example, say I had a simple 2 color sprite laid out as follows:ăă'                            rectangular spriteăă'                                 11111111ă'                                 10000001ă'                                 10000001ă'                                 11111111ăă'Now, we'll make color 0 the transparent color, leaving the 1 color to beă'whatever we desire. When drawn to the screen, this would make the center ofă'the sprite transparent. So we could see the current screen backgroundă'through this transparent `window'.ăă'For example, say the screen was filled with . characters and then we drawă'our sprite. This is what the result might look like, assuming # is a solidă'`pixel'.ă'                               ............ă'                               ............ă'                               ..########..ă'                               ..#......#..ă'                               ..#......#..ă'                               ..########..ă'                               ............ă'                               ............ăăă'In BASIC the code to actually draw the above sprite might look somethingă'like the following:ăă'  FOR Y=0 TO SpriteDepthă'    FOR X=0 TO SpriteWidthă'      IF sprite(x,y) <> TransparentColor THENă'        PSET (x,y), sprite(x,y)ă'      ENDIFă'    NEXTă'  NEXTăăă'The following program illustrates the things that I have just describedă'above. The program fills the screen with colored lines and then tiles theă'transparent sprite over that. The same rectangle mentioned is used andă'the effect is the colors showing through the `window'ăă'[Cut-'N'-Save-(SPRDEMO.BAS)------------------------------------------------]ăă'SPRDEMO.BAS - Transparent sprite demo, Public Domain by Denis BoylesăăDECLARE SUB ReadSprite ()ăDECLARE SUB DrawSprite (x%, y%, c%)ăDECLARE SUB DrawLines ()ăDECLARE SUB TileSprite ()ăăDEFINT A-ZăăDIM SHARED sprite(8, 4)ăăSCREEN 13ăReadSpriteăDrawLinesăTileSpriteăăDATA 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1ăăăSUB DrawLinesă  FOR y = 0 TO 199ă    LINE (0, y)-(319, y), yă  NEXTăEND SUBăăSUB DrawSprite (x, y, c)ă  FOR yct = 0 TO 3ă    FOR xct = 0 TO 7ă      IF sprite(xct, yct) <> 0 THENă        PSET (x + xct, y + yct), că      END IFă    NEXTă  NEXTăEND SUBăăSUB ReadSpriteă  FOR y = 0 TO 3ă    FOR x = 0 TO 7ă      READ sprite(x, y)ă    NEXTă  NEXTăEND SUBăăSUB TileSpriteă  FOR y = 0 TO 199 STEP 4ă    FOR x = 0 TO 319 STEP 8ă      DrawSprite x, y, 7ă    NEXTă  NEXTăEND SUBăăă'[Cut-----------------------------------------------------------------------]ăă'Now if you want to `move' your transparent sprite around then you need toă'do a few more things. Firstly copy the current screen are that will beă'affected to a buffer. Then draw your sprite on the screen, then `erase' ită'by restoring screen from the save buffer.ăă'You can use the GET and PUT commands to save and restore the background foră'you. I've whipped up another little demo that that a transparentă'sprite around the screen. The screen is filled with `stars' and some text,ă'then the sprite is moved in a circle pattern until a key is pressed.ăă'The main loop uses a GET command to save the current `background' thenă'draws the sprite. Afterwards, the screen area is restored by using a PUTă'command. Probably not the best example since there is `flickering' it doesă'illuastrate the concept. Watch as the ship moves and notice that theă'background isn't affected.ăDenis Boyles                   MOVING TRANSPARENT SPRITE DEMO FidoNet QUIK_BAS Echo          01-21-97 (00:34)       QB, QBasic, PDS        88   2087     SPRMOVE.BAS 'Here's the second demonstration program that I mentioned in the firstă'message. The only thing to note is that I used a monochrome 2-coloră'image for the sprite. While the sprite data is a bit different, theă'technique is the same. :)ăă'NCC1701D.BAS - :) a moving transparent sprite demoă'                  Public Domain by Denis BoylesăăDECLARE SUB ReadSprite ()ăDECLARE SUB ReadBits ()ăDECLARE SUB DrawSprite (x%, y%, c%)ăDECLARE SUB DrawStars ()ăDECLARE SUB CalcCircle ()ăDEFINT A-ZăăCONST NumStars = 400ăCONST FlyRad = 80ăăDIM SHARED sprite(16), bits(16), cosx(360), siny(360), oldimg(16, 16)ăăPRINT "Please Wait..."ăReadSpriteăReadBitsăCalcCircleăăSCREEN 13ăDrawStarsăLOCATE 12, 7ăPRINT "USS Enterprise, NCC-1701-D"ăct = 0ăDOă  GET (cosx(ct), siny(ct))-(cosx(ct) + 16, siny(ct) + 16), oldimgă  DrawSprite cosx(ct), siny(ct), 7ă  WAIT &H3DA, 8ă  PUT (cosx(ct), siny(ct)), oldimg, PSETă  IF ct = 359 THENă    ct = 0ă  ELSEă    ct = ct + 1ă  END IFăLOOP WHILE INKEY$ = ""ăăSCREEN 0ăWIDTH 80ăă'USS Enterprise, NCC-1701-D :) (b/w bitmap image)ăDATA &H0000,&H07E0,&H0FF0,&H0FF0,&H1FF8,&H1FF8,&H1FF8,&H1FF8ăDATA &H07E0,&H6186,&H6186,&H6186,&H7FFE,&H7FFE,&H63C6,&H0000ăă'16 bits lookup tableăDATA &H0001,&H0002,&H0004,&H0008,&H0010,&H0020,&H0040,&H0080ăDATA &H0100,&H0200,&H0400,&H0800,&H1000,&H2000,&H4000,&H8000ăăSUB CalcCircleă  FOR ct = 0 TO 359ă    cosx(ct) = INT(COS(ct * (3.14 / 180)) * FlyRad + 160)ă    siny(ct) = INT(SIN(ct * (3.14 / 180)) * FlyRad + 100)ă  NEXTăEND SUBăăSUB DrawSprite (x, y, c)ă  FOR yct = 0 TO 15ă    FOR xct = 15 TO 0 STEP -1ă      IF sprite(yct) AND bits(xct) THENă        PSET (x + xct, y + yct), că      END IFă    NEXTă  NEXTăEND SUBăăSUB DrawStarsă  DIM StarColor(3): StarColor(0) = 7: StarColor(1) = 8: StarColor(2) = 15ă  FOR ct = 1 TO NumStarsă    PSET (INT(RND * 320), INT(RND * 200)), StarColor(INT(RND * 3))ă  NEXTăEND SUBăăSUB ReadBitsă  FOR ct = 0 TO 15ă    READ bits(ct)ă  NEXTăEND SUBăăSUB ReadSpriteă  FOR ct = 0 TO 15ă    READ sprite(ct)ă  NEXTăEND SUBăByron Smith                    FONT PUT DEMO                  Peter Cooper                   01-25-97 (16:41)       QB, QBasic, PDS        115  3750     FONNT!.BAS  DECLARE SUB fontput (z1%, y1%, in$, c%)ăDECLARE SUB fontput1 (z1%, y1%, in$, c%)ăDECLARE SUB fontput2 (z1%, y1%, in$, c%)ăăRANDOMIZE TIMERăSCREEN 12ăCLSăPAINT (1, 1), 1ăfontput 0, 0, "The old algorithm...", 2ăfontput 258, 8, "FontPut Demo", 0ăfontput 260, 10, "FontPut Demo", 15ăfontput 20, 30, "I dont expect you to use this procedure but it uses a technique unknown", 15ăfontput 20, 50, "to many programmers. It reads direct from the font area in ROM, instead", 15ăfontput 25, 70, "of using the method used by many programmers in which they PRINT their", 15ăfontput 30, 90, "text and then use the POINT command... so you can use this method in", 15ăfontput 20, 110, "place of that old method, look at the fontput procedure.. Cheers {:o)", 15ăfontput 20, 150, "Peter Cooper", 14ăA$ = INPUT$(1)ăCLSăfontput 1, 1, "PRESS ANY KEY TO EXIT!", 12ăA$ = INKEY$ăDOăx% = INT((550 - 0 + 1) * RND + 0)ăy% = INT((470 - 1 + 1) * RND + 1)ăc% = INT((15 - 1 + 1) * RND + 1)ăfontput x%, y%, "Hello there!", c%ăLOOP UNTIL INKEY$ <> ""ăSCREEN 13ăCLSăFOR c% = 30 TO 16 STEP -1ăfontput 130, 80, "Cheers!", c%ăFOR d% = 1 TO 1000ăFOR d2% = 1 TO 40ăNEXT d2%ăNEXT d%ăWAIT &H3DA, 8ăWAIT &H3DA, 8, 8ăNEXT c%ăLOCATE 25, 1: PRINT "Press any key to continue";ăWHILE LEN(INKEY$) = 0: WENDăăSCREEN 12ăCLSăPAINT (1, 1), 1ăfontput2 0, 0, "The ", 2ăfontput2 32, 0, "NEW ", 10ăfontput2 64, 0, "algorithm...", 2ăfontput2 258, 8, "FontPut Demo", 0ăfontput2 260, 10, "FontPut Demo", 15ăfontput2 20, 30, "I dont expect you to use this procedure but it uses a technique unknown", 15ăfontput2 20, 50, "to many programmers. It reads direct from the font area in ROM, instead", 15ăfontput2 25, 70, "of using the method used by many programmers in which they PRINT their", 15ăfontput2 30, 90, "text and then use the POINT command... so you can use this method in", 15ăfontput2 20, 110, "place of that old method, look at the fontput procedure.. Cheers {:o)", 15ăfontput2 20, 150, "Peter Cooper", 14ăA$ = INPUT$(1)ăCLSăfontput2 1, 1, "PRESS ANY KEY TO EXIT!", 12ăA$ = INKEY$ăDOăx% = INT((550 - 0 + 1) * RND + 0)ăy% = INT((470 - 1 + 1) * RND + 1)ăc% = INT((15 - 1 + 1) * RND + 1)ăfontput2 x%, y%, "Hello there!", c%ăLOOP UNTIL INKEY$ <> ""ăSCREEN 13ăCLSăFOR c% = 30 TO 16 STEP -1ăfontput2 130, 80, "Cheers!", c%ăFOR d% = 1 TO 1000ăFOR d2% = 1 TO 40ăNEXT d2%ăNEXT d%ăWAIT &H3DA, 8ăWAIT &H3DA, 8, 8ăNEXT c%ăăSUB fontput (z1%, y1%, in$, c%)ăDEF SEG = &HFFA6ăo1% = z1%ăFOR l% = 1 TO LEN(in$)ă        l$ = MID$(in$, l%, 1)ă        FOR y% = y1% TO y1% + 7ă                x% = PEEK(&HE + (ASC(l$) * 8) + (y% - y1%))ă                FOR z% = 0 TO 7ă                        IF x% AND (2 ^ (7 - z%)) THEN PSET (z1%, y%), c%ă                        z1% = z1% + 1ă                NEXT z%ă                z1% = z1% - 8ă        NEXT y%ă        z1% = z1% + 8ăNEXT l%ăDEF SEGăEND SUBăă'Author: Byron Smith <unol@sat.net, http://www.sat.net/~unol>, 13-NOV-1996ăSUB fontput1 (z1%, y1%, in$, c%)ă  DEF SEG = -90ă  FOR b% = 1 TO LEN(in$): FOR m% = 0 TO 7ă    d% = 128 * PEEK(14 + 8 * ASC(MID$(in$, b%, 1)) + m%)ă    LINE (z1% + 8 * b% - 9, y1% + m%)-(z1% + 8 * b% - 2, y1% + m%), c%, , d%ă  NEXT m%, b%ăEND SUBăă'Author: Byron Smith <unol@sat.net, http://www.sat.net/~unol>, 25-JAN-1997ă'Update: Draws two characters at once using LINE.ăSUB fontput2 (z1%, y1%, in$, c%)ă  DEF SEG = -90ă  tmp$ = in$ + " "ă  FOR b% = 1 TO LEN(tmp$) - 1 STEP 2: FOR m% = 0 TO 7ă    d& = 256& * PEEK(14 + 8 * ASC(MID$(tmp$, b%, 1)) + m%) + PEEK(14 + 8 * ASC(MID$(tmp$, b% + 1, 1)) + m%)ă    d% = d& + (d& > 32767) * 65536ă    LINE (z1% + 8 * b% - 8, y1% + m%)-(z1% + 8 * b% + 7, y1% + m%), c%, , d%ă  NEXT m%, b%ăEND SUBăNick Coons                     VESA ROUTINES W/BANK SWITCHING FidoNet QUIK_BAS Echo          01-29-97 (21:29)       QB, PDS                133  4079     SVGA.BAS    '       Well, I figured it was about time that I looked into the problem thată'you've been having with VESA and bank switching.  So I did a few experimentsă'and wrote some routines and they seem to work surprisingly well.  I'll postă'the code first, then explain:ăă' *** BANK.BAS (01/29/97)ă' *** SuperVGA VESA Routines using Bankă' *** Switching.ă' *** Written By Nick Coonsă' *** Based on Dave Shea'să' *** Pixel-plotting using Interrupts.ă' *** Released To The Public Domainăă' *** Description:ă' *** A program that fills the screenă' *** with individual pixels usingă' *** direct memory access in VESAă' *** Screen mode &H101 - 640x480x256.ăă' *** Define Default Variablesăă    DEFINT A-Zăă' *** Declare Proceduresăă    DECLARE SUB Pixel (x%, y%, c%)ă    DECLARE SUB ScreenMode (SM%)ă    DECLARE SUB SwitchBank (NewBank%)ăă' *** Include Structures For Interruptsăă    REM $INCLUDE: 'qb.bi'ăă' *** Dimension Variablesăă    DIM SHARED InRegs AS RegType, OutRegs AS RegTypeă    DIM SHARED Bank%ă    DIM SHARED Table&(0 TO 479)ăă' *** Create Table For Vertical Referenceăă    FOR x% = 0 TO 479ă        Table&(x%) = x% * 640&ă    NEXT x%ăă' *** Set Screen Modeăă    ScreenMode &H101ăă' *** Begin Plottingăă    DEF SEG = &HA000ă    FOR x% = 0 TO 639ă        Col% = Col% + 1ă        IF Col% = 256 THEN Col% = 0ă        FOR y% = 0 TO 479ă            NewBank% = (Table&(y%) + x%) \ 65536ă            IF NewBank% <> Bank% THEN SwitchBank NewBank%ă            Pixel x%, y%, Col%ă        NEXT y%ă    NEXT x%ă    DEF SEGăă    SLEEP 1ăă    ScreenMode 3ăă    ENDăă' *** Pixel-Plotting Routineăă' *** Set Screen Mode Routine, by Dave Sheaăă' *** Switch Bank Routineăă    SUB Pixel (x%, y%, c%)ă        POKE (Table&(y%) + x%) MOD 65536, c%ă    END SUBăă    SUB ScreenMode (SM)ă        'SM (ScreenMode) may be any one of the following:ă        '3 = Text Modeă        '&H100 = 640x400x256ă        '&H101 = 640x480x256ă        '&H102 = 800x600x16ă        '&H103 = 800x600x256ă        '&H104 = 1024x768x16ă        '&H105 = 1024x768x256ă        InRegs.ax = &H4F02ă        InRegs.bx = SMă        CALL INTERRUPT(&H10, InRegs, OutRegs)ă    END SUBăă    SUB SwitchBank (NewBank%)ă        InRegs.ax = &H4F05ă        InRegs.bx = 0ă        InRegs.dx = NewBank%ă        CALL INTERRUPT(&H10, InRegs, OutRegs)ă        Bank% = NewBank%ă    END SUBăăăă'       First of all, try this and make sure it works on your system.  I'veă'only been able to try it on mine.  I have a Cirrus Logic GD5430 video card,ă'and I think you have a 5429, right?ăă'       Second, here's a small chart comparing speed differences between theă'program you wrote that uses Interrupts to plot pixels and the one that Iă'wrote that POKE's the pixels into memory:ăă'               Yours           Mineă'Environment    15.76           5.21ă'Compiled       13.45           2.04ă'ă'       Granted, those times are still not as fast as you'd want them, bută'it's a start.  I think the main reason is because of the division which isă'pathetically slow.  There are two divisions per pixel.  The first is theă'integer division that gets the bank that the coordinates reside in.  Theă'second one is MOD (yes, that's a division) which changes the coordinates intoă'a linear address inside the current bank.ă'ă'       If you noticed the first loop near the top of the program, thată'creates a multiplication look-up table.  This eliminates the multiplicationă'that would normally be needed to find each pixel (ya know, the y% * 640 +x%ă'thing).  I figure that we might be able to something similar for the twoă'divisions, but it will be a little more complicated.ă'ă'       The second thing I did to speed up the routine was to keep track ofă'the current bank with the Bank% variable.  This way, I only have to use theă'SwitchBank routine when actually needed to change the bank.  If you calledă'that routine every pixel to put it into the correct bank, then it slower thană'plotting the pixels with Interrupts.ăBradley Wagner                 3D ENGINE W/LEVEL EDITOR       BradWagner@msn.com             02-04-97 (03:14)       QB, QBasic, PDS        667  24523    3DENGINE.BAS'     Attached are two files. One is a level builder i created for that raycastă'engine, and the second is an updated version of the raycast engine.ăă'3dengine.bas:ă'------------------------------------------------------------------------------ă'Here is a new version (I merely added my keyboard ISR to the last).  Don't beă'afraid to hold down multiple keys! :)ăăDECLARE SUB screensetup ()ăDECLARE SUB makeworld ()ăDECLARE SUB maketables ()ăăăDECLARE SUB SETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăDECLARE SUB GETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăDECLARE SUB KEYBOARD.IN (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ăDECLARE SUB KEYBOARD.OUT (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ăă'$STATICăăCONST NUM.KEYS = 10ăCONST INDEX.UP = 0ăCONST INDEX.DOWN = 1ăCONST INDEX.LEFT = 2ăCONST INDEX.RIGHT = 3ăCONST INDEX.CTRL = 4ăCONST INDEX.ALT = 5ăCONST INDEX.SPACE = 6ăCONST INDEX.ESC = 7ăCONST INDEX.ENTER = 8ăCONST INDEX.RSHIFT = 9ăăDIM SHARED KEY.TABLE(0 TO (NUM.KEYS - 1)) AS INTEGERăDIM SHARED RAWKEY AS INTEGERăDIM SHARED OLD.ISR.SEG AS INTEGER, OLD.ISR.OFF AS INTEGERăăă' Just a minor change, but it's good for a speed increaseă' of about 30% on my P133. Changed the LINE,BF to draw theă' walls into seperate LINE's.ăă'=======================================================================ă' RAY CASTER 3D sorta ENGINE thingymajigă'=======================================================================ă' Wrote this about a month ago, it's a sort of wolfenstien\doomă' lookalike but all in native QBasic source! Uses an interesting rayă' Cheers, {:o)   Peter Cooperăă' Clean-up by Brent P. Newhallăă' Improvments by Nick Cangiani (nicksxe@gnn.com)ă' Sped up maketables by v Zoelen AA (vsim@xs4all.nl)ă' Minor improvement by Marc vd Dikkenberg (excel@xs4all.nl)ă' Level Builder/Loading by Bradley Wagner (bradwagner@msn.com)ăă' Left arrow  == Move leftă' Right arrow == Move rightă' Up arrow    == Move forwardă' Down arrow  == Move backwardă' [ESC]       == QuităăDIM SHARED st%(0 TO 360)ăDIM SHARED ct%(0 TO 360)ăDIM SHARED a$(1 TO 10)ăDIM SHARED Grid(1 TO 12, 1 TO 12)ăpx% = 15: py% = 35: sa% = 0ăCLSăPRINT "Please wait...";ăRANDOMIZE TIMERămakeworldăCALL KEYBOARD.IN(OLD.ISR.SEG, OLD.ISR.OFF)ămaketablesăscreensetupăm% = 1ăDOă  IF m% = 1 THENă    IF P = 2 THEN PCOPY 2, 0 ELSE PCOPY 3, 0ă    IF P = 2 THEN P = 3 ELSE P = 2ă    m% = 0ă  END IFă  FOR t% = sa% TO sa% + 59 STEP 1ă    xb = st%(t% MOD 360) / 100              'get incă    yb = ct%(t% MOD 360) / 100              'get incă    bx = px%                                'decimal copyă    by = py%                                'decimal copyă    l% = 0                                  'reset lengthă    DOă      bx = bx + xbă      by = by + ybă      l% = l% + 1ă      'k% = ASC(MID$(a$(CINT(by / 10)), CINT(bx / 10), 1)) - 48ă      k% = Grid(CINT(by / 10), CINT(bx / 10))ă    LOOP UNTIL k% <> 0ă    LOCATE 1, 1ă    'PRINT l%;        'this would print the distance to wallă    X% = (t% - sa%) * 5ă    dd% = (1000 / l%)ă    'LINE (X%, 1)-(X% + 5, 99 - dd%), 15, BF          'paint ceilingă    'LINE (X%, 101 + dd%)-(X% + 5, 200), 2, BF        'paint flooră    'LINE (X%, 100 - dd%)-(X% + 5, 100 + dd%), k%, BF 'paint wallsăă    FOR U% = 0 TO 4                                   'paint wallsă       LINE (X% + U%, 100 - dd%)-(X% + U%, 100 + dd%), k%ă    NEXT U%ă    ' Could be even 20% faster: FOR U% = 0 to 4ă    ' This will skip one line at the right of the screen, though.ăă    LINE (X%, 100 - dd%)-(X% + 5, 100 - dd%), 0      'top linesă    LINE (X%, 100 + dd%)-(X% + 5, 100 + dd%), 0      'bottom linesă  NEXT t%ă  PCOPY 0, 1ă  RAWKEY = 0: WHILE RAWKEY = 0: WENDă  IF KEY.TABLE(INDEX.RIGHT) THEN ' [LEFT]ă    sa% = sa% + 3ă    m% = 1ă  END IFă  IF KEY.TABLE(INDEX.LEFT) THEN ' [RIGHT]ă    sa% = (sa% + 357) MOD 360ă    m% = 1ă  END IFă  IF KEY.TABLE(INDEX.ESC) THEN ' [ESC]ă    quit = 1ă  END IFă  IF KEY.TABLE(INDEX.UP) THEN ' [UP]ă    Oldpx% = px%: Oldpy% = py% ' Save where you areă    px% = px% + (st%((sa% + 30) MOD 360) / 30)ă    py% = py% + (ct%((sa% + 30) MOD 360) / 30)ă    IF Grid(CINT(py% / 10), CINT(px% / 10)) > 0 THEN 'Walking thru walls?ă      SOUND 80, 1ă      px% = Oldpx% ' Forget it!  Don't moveă      py% = Oldpy%ă    ELSEă      m% = 1ă    END IFă  END IFă    ă  IF KEY.TABLE(INDEX.DOWN) THEN '[DOWN]ă    Oldpx% = px%: Oldpy% = py% ' Save where you areă    px% = px% - (st%((sa% + 30) MOD 360) / 30)ă    py% = py% - (ct%((sa% + 30) MOD 360) / 30)ă    IF Grid(CINT(py% / 10), CINT(px% / 10)) > 0 THEN 'Walking thru walls?ă      SOUND 80, 1ă      px% = Oldpx% ' Forget it!  Don't moveă      py% = Oldpy%ă    ELSEă      m% = 1ă    END IFă  END IFăLOOP UNTIL quit > 0ăSCREEN 0ăWIDTH 80, 25ăăăCALL KEYBOARD.OUT(OLD.ISR.SEG, OLD.ISR.OFF)ăăăSYSTEMăă' Level data (this way you can have walls colored 10, 11, etc.)ă' 12x12    __ă'         |  guy starts here somewhereă'        \|/ăDATA  7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8ăDATA  8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7ăDATA  7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8ăDATA  8, 0, 8, 7, 8, 7, 8, 7, 8, 0, 0, 7ăDATA  7, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 8ăDATA  8, 0, 8, 0, 8, 7, 8, 7, 8, 0, 0, 7ăDATA  7, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 8ăDATA  8, 0, 8, 0, 8, 7, 8, 7, 8, 0, 0, 7ăDATA  7, 0, 7, 0, 0, 0, 0, 0, 7, 0, 0, 8ăDATA  8, 0, 8, 7, 8, 7, 8, 7, 8, 0, 0, 7ăDATA  7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8ăDATA  8, 7, 8, 7, 8, 7, 8, 7, 8, 7, 8, 7ăă' Old level.  If you want it, come and get it.ă'  1, 9, 1, 9, 1, 9, 1, 9, 1, 9ă'  9, 0, 0, 0, 0, 0, 0, 0, 0, 1ă'  1, 0, 0, 0, 0, 0, 0, 4, 0, 9ă'  9, 0, 1, 0, 0, 0, 5, 0, 0, 1ă'  1, 0, 2, 0, 0, 4, 0, 0, 0, 9ă'  9, 0, 3, 0, 0, 0, 0, 0, 0, 1ă'  1, 0, 0, 0, 0, 7, 8, 0, 0, 9ă'  9, 0, 5, 0, 0, 8, 7, 0, 0, 1ă'  1, 0, 6, 0, 0, 0, 0, 0, 0, 9ă'  9, 1, 9, 1, 9, 1, 9, 1, 9, 1ă'-------------------------end of 3dengine.bas-----------------------------------------------------------ăăSUB GETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăă    'GETVECT RETURNS THE ADDRESS OF A FUNCTION POINTED TO IN THEă    'INTERRUPT VECTOR TABLE (STARTS AT 0000:0000H)ăă    STATIC ASM AS STRING 'THE CODE FOR GETVECTăă    STATIC INI AS INTEGER 'USED TO DETECT WHETHER GETVECT HAS PREVIOUSLYă                          'BEEN CALLEDă    IF INI = 0 THENă        ă        'CREATE ML FUNCTION IF NOT ALREADY CREATEDăă        ASM = ASM + CHR$(&H55)                          'PUSH    BPă        ASM = ASM + CHR$(&H89) + CHR$(&HE5)             'MOV     BP,SPă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV     BX,[BP+06]ă        ASM = ASM + CHR$(&H8A) + CHR$(&H7)              'MOV     AL,[BX]ă        ASM = ASM + CHR$(&HB4) + CHR$(&H35)             'MOV     AH,35ă        ASM = ASM + CHR$(&HCD) + CHR$(&H21)             'INT     21ă        ASM = ASM + CHR$(&H53)                          'PUSH    BXă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV     BX,[BP+0A]ă        ASM = ASM + CHR$(&H8C) + CHR$(&H7)              'MOV     [BX],ESă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8) 'MOV     BX,[BP+08]ă        ASM = ASM + CHR$(&H58)                          'POP     AXă        ASM = ASM + CHR$(&H89) + CHR$(&H7)              'MOV     [BX],AXă        ASM = ASM + CHR$(&H5D)                          'POP     BPă        ASM = ASM + CHR$(&HCA) + CHR$(&H6) + CHR$(&H0)  'RETF    0006ă        INI = 1 'FLAG CREATIONă    END IFăă    DEF SEG = VARSEG(ASM)ă    CALL ABSOLUTE(S, O, I, SADD(ASM)) 'RUN FUNCTIONăEND SUBăăSUB KEYBOARD.IN (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ă    DIM RSGL AS INTEGER, RSGH AS INTEGER 'SEGMENT OF RAWKEYă    DIM ROFL AS INTEGER, ROFH AS INTEGER 'OFFSET OF RAWKEYăă    DIM KSGL AS INTEGER, KSGH AS INTEGER 'SEGMENT OF KEY.TABLEă    DIM KOFL AS INTEGER, KOFH AS INTEGER 'OFFSET OF KEY.TABLEă   ă    DIM BYTE AS STRING * 1 'USED TO ACTIVATE IRQ 1 IN PICăă    STATIC ASM AS STRING 'HOLDS ISRăă    RSGL = VARSEG(RAWKEY) AND &HFF 'LOAD LOW "BYTE" SEGMENTă    RSGH = INT(VARSEG(RAWKEY) / 256) AND &HFF 'LOAD HIGH "BYTE" SEGMENTăă    ROFL = VARPTR(RAWKEY) AND &HFF 'LOAD LOW "BYTE" OFFSETă    ROFH = INT(VARPTR(RAWKEY) / 256) AND &HFF 'LOAD HIGH "BYTE" OFFSETă    ă    KSGL = VARSEG(KEY.TABLE(0)) AND &HFF 'LOAD LOW "BYTE" SEGMENTă    KSGH = INT(VARSEG(KEY.TABLE(0)) / 256) AND &HFF 'LOAD HIGH "BYTE" SEGMENTăă    KOFL = VARPTR(KEY.TABLE(0)) AND &HFF 'LOAD LOW "BYTE" OFFSETă    KOFH = INT(VARPTR(KEY.TABLE(0)) / 256) AND &HFF 'LOAD HIGH "BYTE" OFFSETăă    'THIS IS THE ISR.  IT READS A SCANCODE FROM THE KEYBOARD BUFFERă    'AND RESETS IT.  THE BEST PART IS, BIOS CAN'T TOUCH IT!ăă    ASM = ""ă    ASM = ASM + CHR$(&H52)                          'PUSH DXă    ASM = ASM + CHR$(&H51)                          'PUSH CXă    ASM = ASM + CHR$(&H53)                          'PUSH BXă    ASM = ASM + CHR$(&H50)                          'PUSH AXă    ASM = ASM + CHR$(&H6)                           'PUSH ESă    ASM = ASM + CHR$(&H57)                          'PUSH DIă    ASM = ASM + CHR$(&H1E)                          'PUSH DSă    ASM = ASM + CHR$(&H56)                          'PUSH SIă    ASM = ASM + CHR$(&HFB)                          'STIă    ASM = ASM + CHR$(&HBA) + CHR$(&H60) + CHR$(&H0) 'MOV DX,0060ă    ASM = ASM + CHR$(&HEC)                          'IN AL,DXă    ASM = ASM + CHR$(&H30) + CHR$(&HE4)             'XOR AH,AHă    ASM = ASM + CHR$(&HBA) + CHR$(RSGL) + CHR$(RSGH)'MOV DX,SEG RAWKEYă    ASM = ASM + CHR$(&H8E) + CHR$(&HDA)             'MOV DS,DXă    ASM = ASM + CHR$(&HBE) + CHR$(ROFL) + CHR$(ROFH)'MOV SI,OFFSET RAWKEYă    ASM = ASM + CHR$(&H88) + CHR$(&H4)              'MOV [SI],ALă    ASM = ASM + CHR$(&H50)                          'PUSH AXă    ASM = ASM + CHR$(&HBA) + CHR$(&H61) + CHR$(&H0) 'MOV DX,0061ă    ASM = ASM + CHR$(&HEC)                          'IN AL,DXă    ASM = ASM + CHR$(&HC) + CHR$(&H82)              'OR AL,82ă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&H24) + CHR$(&H7F)             'AND AL,7Fă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&HB0) + CHR$(&H20)             'MOV AL,20ă    ASM = ASM + CHR$(&HBA) + CHR$(&H20) + CHR$(&H0) 'MOV DX,0020ă    ASM = ASM + CHR$(&HEE)                          'OUT DX,ALă    ASM = ASM + CHR$(&HBA) + CHR$(KSGL) + CHR$(KSGH)'MOV DX,SEG KEY.TABLEă    ASM = ASM + CHR$(&H8E) + CHR$(&HDA)             'MOV DS,DXă    ASM = ASM + CHR$(&HBE) + CHR$(KOFL) + CHR$(KOFH)'MOV SI,OFFSET KEY.TABLEă    ASM = ASM + CHR$(&H58)                          'POP AXă    ASM = ASM + CHR$(&HBB) + CHR$(&H1) + CHR$(&H0)  'MOV BX,0001--MAKEă    ASM = ASM + CHR$(&HB4) + CHR$(&H48)             'MOV AH,48--UPă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H0) 'MOV [SI+00],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H50)             'MOV AH,50--DOWNă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H2) 'MOV [SI+02],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H4B)             'MOV AH,4B--LEFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H4) 'MOV [SI+04],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H4D)             'MOV AH,4D--RIGHTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H6) 'MOV [SI+06],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1D)             'MOV AH,1D--CTRLă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H8) 'MOV [SI+08],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H38)             'MOV AH,38--ALTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HA) 'MOV [SI+0A],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H39)             'MOV AH,39--SPACEă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HC) 'MOV [SI+0C],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1)              'MOV AH,01--ESCă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HE) 'MOV [SI+0E],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H1C)             'MOV AH,1C--ENTERă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H10)'MOV [SI+10],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H36)             'MOV AH,36--RSHIFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H12)'MOV [SI+12],BXăă    ASM = ASM + CHR$(&HBB) + CHR$(&H0) + CHR$(&H0)  'MOV BX,0000--BREAKă    ASM = ASM + CHR$(&HB4) + CHR$(&HC8)             'MOV AH,C8--UPă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H0) 'MOV [SI+00],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HD0)             'MOV AH,D0--DOWNă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H2) 'MOV [SI+02],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HCB)             'MOV AH,CB--LEFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H4) 'MOV [SI+04],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HCD)             'MOV AH,CD--RIGHTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H6) 'MOV [SI+06],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H9D)             'MOV AH,9D--CTRLă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H8) 'MOV [SI+08],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB8)             'MOV AH,B8--ALTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HA) 'MOV [SI+0A],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB9)             'MOV AH,B9--SPACEă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HC) 'MOV [SI+0C],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H81)             'MOV AH,81--ESCă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&HE) 'MOV [SI+0E],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&H9C)             'MOV AH,9C--ENTERă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H10)'MOV [SI+10],BXă    ASM = ASM + CHR$(&HB4) + CHR$(&HB6)             'MOV AH,B6--RSHIFTă    ASM = ASM + CHR$(&H38) + CHR$(&HC4)             'CMP AH,ALă    ASM = ASM + CHR$(&H75) + CHR$(&H3)              'JNZă    ASM = ASM + CHR$(&H89) + CHR$(&H5C) + CHR$(&H12)'MOV [SI+12],BXăă    ASM = ASM + CHR$(&HFA)                          'CLIă    ASM = ASM + CHR$(&H5E)                          'POP SIă    ASM = ASM + CHR$(&H1F)                          'POP DSă    ASM = ASM + CHR$(&H5F)                          'POP DIă    ASM = ASM + CHR$(&H7)                           'POP ESă    ASM = ASM + CHR$(&H58)                          'POP AXă    ASM = ASM + CHR$(&H5B)                          'POP BXă    ASM = ASM + CHR$(&H59)                          'POP CXă    ASM = ASM + CHR$(&H5A)                          'POP DXă    ASM = ASM + CHR$(&HCF)                          'IRETăă    BYTE = CHR$(INP(&H21)) 'LOAD IRQ ENABLE REGISTER IN PICăă    OUT &H21, (ASC(BYTE) AND (255 XOR 2)) 'CLEAR BIT 2 (IRQ 1)ăă    CALL GETVECT(OLDSEG, OLDOFF, &H9) 'LOAD OLD ISRă    CALL SETVECT(VARSEG(ASM), SADD(ASM), &H9) 'STORE NEW ISRăEND SUBăăSUB KEYBOARD.OUT (OLDSEG AS INTEGER, OLDOFF AS INTEGER)ă    CALL SETVECT(OLDSEG, OLDOFF, &H9) 'RESTORE OLD ISRăEND SUBăăSUB maketablesăă' Peters boring _yawn_ table creationăFOR tmp1% = 0 TO 360ă  st%(tmp1%) = SIN(tmp1% * .0174) * 100ă  'IF tmp1% MOD 100 = 0 THEN PRINT ; ".";ă  'NEXT tmp1%ă  'FOR tmp1% = 0 TO 360ă  ct%(tmp1%) = COS(tmp1% * .0174) * 100ă  'IF tmp1% MOD 100 = 0 THEN PRINT ; ".";ăNEXT tmp1%ăăEND SUBăăSUB makeworldăăPRINT "If you would like to load a file made with QB Raycast Level Builder, then type"ăPRINT "it's file name below.  If not, just hit enter to view the default level."ăPRINTăLINE INPUT "Level Filename (No extension!): ", file$ăIF file$ = "" THEN GOTO DefaultăOPEN file$ + ".lev" FOR INPUT AS #1ăFOR Y = 1 TO 12ă  FOR X = 1 TO 12ă    INPUT #1, Numă    Grid(X, Y) = Numă  NEXTăNEXTăEXIT SUBăăăDefault:ă' Read in this level's dataăFOR j = 1 TO 12ă  FOR I = 1 TO 12ă    READ Grid(I, j)ă  NEXT IăNEXT jăă' Peter Coopers demonstration level. Change it if you wish! Each numberă' is a color numberă'a$(1) = "1919191919"ă'a$(2) = "9000000001"ă'a$(3) = "1000000409"ă'a$(4) = "9010005001"ă'a$(5) = "1020040009"ă'a$(6) = "9030000001"ă'a$(7) = "1000078009"ă'a$(8) = "9050087001"ă'a$(9) = "1060000009"ă'a$(10) = "9191919191"ăăEND SUBăăSUB screensetupăăSCREEN 7ăLOCATE 4ăPRINT "     RAYCASTER DEMO"ăPRINTăPRINT "      UP ARROW........Move Forward"ăPRINT "      DOWN ARROW......Move Backward"ăPRINT "      RIGHT ARROW.....Turn Right"ăPRINT "      LEFT ARROW......Turn Left"ăăSCREEN 7, , 2, 0ăăCLSă'WINDOW SCREEN (1, 1)-(320, 200)ăă' SkyăLINE (0, 0)-(300, 99), 3, BFăăFOR cnt = 1 TO 10 ' Cloudsă  a = INT(RND * 319)ă  b = INT(RND * 80 + 10)ă  c = INT(RND * 50)ă  d = INT(RND * 10): d = d / 100ă  CIRCLE (a, b), c, 1, , , d: PAINT (a, b), 1ă  CIRCLE (a, b), c, 15, , , d: PAINT (a, b), 15ăNEXT cntăLINE (301, 0)-(319, 199), 0, BF ' Erase clouds on rightăă' Obeliskă'LINE (200, 20)-(240, 99), 0, BFă'LINE (201, 21)-(239, 98), 8, BFăăLINE (200, 20)-(220, 15), 8 ' Building (gray)ăLINE (220, 15)-(240, 20), 8ăLINE (200, 20)-(200, 99), 8ăLINE (240, 20)-(240, 99), 8ăLINE (200, 99)-(240, 99), 8ăPAINT (220, 50), 8ăFOR cnt = 1 TO 20 ' Lightsă  PSET (INT(RND * 38 + 201), INT(RND * 80 + 20)), 14ăNEXT cntăLINE (200, 20)-(220, 15), 0 ' Building (border)ăLINE (220, 15)-(240, 20), 0ăLINE (219, 15)-(219, 99), 0ăLINE (200, 20)-(200, 99), 0ăLINE (240, 20)-(240, 99), 0ăă' SunăCIRCLE (50, 30), 10, 14: PAINT (50, 30), 14, 14ăăPCOPY 2, 3ăăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 300ă    IF RND > .5 THEN c% = 8 ELSE c% = 0ă    PSET (X%, Y%), c%ă  NEXT X%ăNEXT Y%ăăSCREEN 7, , 3, 0ăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 300ă    IF RND > .5 THEN c% = 8 ELSE c% = 0ă    PSET (X%, Y%), c%ă  NEXT X%ăNEXT Y%ăăSCREEN 7, , 0, 1ăăEND SUBăăSUB SETVECT (S AS INTEGER, O AS INTEGER, I AS INTEGER)ăă    'SETVECT CHANGES THE ADDRESSES IN THE INTERRUPT VECTOR TABLEă    'TO POINT TO NEW FUNCTIONSăă    STATIC ASM AS STRING 'HOLDS THE SETVECT FUNCTIONă    STATIC INI AS INTEGER 'USED TO TEST WHETHER OR NOT FUNCTION HAS PREVOUSLYă                          'BEEN CALLEDă    IF INI = 0 THENăă        'CREATE FUNCTION IF NOT ALREADY CREATEDăă        ASM = ""ă        ASM = ASM + CHR$(&H55)                          'PUSH BPă        ASM = ASM + CHR$(&H89) + CHR$(&HE5)             'MOV BP,SPă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H8) 'MOV BX,[BP+08]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H17)             'MOV DX,[BX]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6) 'MOV BX,[BP+06]ă        ASM = ASM + CHR$(&H8A) + CHR$(&H7)              'MOV AL,[BX]ă        ASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&HA) 'MOV BX,[BP+0A]ă        ASM = ASM + CHR$(&H1E)                          'PUSH DSă        ASM = ASM + CHR$(&H8E) + CHR$(&H1F)             'MOV DS,[BX]ă        ASM = ASM + CHR$(&HB4) + CHR$(&H25)             'MOV AH,25ă        ASM = ASM + CHR$(&HCD) + CHR$(&H21)             'INT 21ă        ASM = ASM + CHR$(&H1F)                          'POP DSă        ASM = ASM + CHR$(&H5D)                          'POP BPă        ASM = ASM + CHR$(&HCA) + CHR$(&H6) + CHR$(&H0)  'RETF 0006ă        INI = 1 'FLAG CREATIONă    END IFă    DEF SEG = VARSEG(ASM)ă    CALL ABSOLUTE(S, O, I, SADD(ASM)) 'RUN SETVECTăEND SUBă'----------------------------------end of 3dengine.bas---------------------------------------------------ăăă'3dlevels.bas:ă'----------------------------------------------------------------------------ă'======================================ă'     QB Raycast Level Builder v.1ă'======================================ă'I was having a good time screwing around with that raycast demo and thoughtă'it would be cool if there was an easy way to make new levels for it. So Iă'throw this crap together. It's real simple to use. The arrow keys control theă'red cursor on the grid, and hitting spacebar plots a block on the grid. Toă'select a new color for the blocks, just hit 'c'. Hit 's' to save, and don'tă'save with an extension. It will automatically be '*.lev'. Umm... Oh, theă'levels will not load probably into 3dengine.bas unless you have a border allă'the way around the grid... so... enjoy!ă'ă'ă' email = bradwagner@msn.comăăDECLARE SUB Cursor (Col%)ăCOMMON SHARED X%, Y%ăSCREEN 7, 0, 0, 0ăLINE (0, 0)-(319, 199), 1, BăLOCATE 2, 9ăCOLOR 15ăPRINT "QB Raycast Level Builder"ăLINE (0, 22)-(319, 22), 1ăăFOR X% = 10 TO 120 STEP 10ă  FOR Y% = 50 TO 160 STEP 10ă    LINE (X%, Y%)-(X% + 10, Y% + 10), 1, Bă  NEXTăNEXTăăLINE (189, 50)-(309, 170), 1, BăPAINT (190, 51), 15, 1ăăX% = 1ăY% = 1ăc% = 9ăăMain:ăCOLOR 15ăLOCATE 5, 2ăPRINT STR$(X%) + "," + STR$(Y%) + " "ăCursor 12ăLOCATE 23, 3ăCOLOR c%ăPRINT "Color        "ăLINE (200, 75)-(200, 155), 0ăLINE -(280, 160), 0ăLINE -(280, 80), 0ăLINE -(200, 75), 0ăLINE (200, 75)-(220, 60), 0ăLINE (280, 80)-(300, 65), 0ăLINE (280, 160)-(300, 145), 0ăLINE (220, 60)-(300, 65), 0ăLINE -(300, 145), 0ăPAINT (205, 80), c%, 0ăPAINT (210, 70), c%, 0ăPAINT (295, 90), c%, 0ăDOă  A$ = INKEY$ă  A$ = UCASE$(A$)ă  IF A$ = CHR$(27) THENă    CLSă    SYSTEMă  END IFă  IF A$ = CHR$(0) + CHR$(77) AND X% < 12 THENă    Cursor 1ă    X% = X% + 1ă    GOTO Maină  END IFă  IF A$ = CHR$(0) + CHR$(75) AND X% > 1 THENă    Cursor 1ă    X% = X% - 1ă    GOTO Maină  END IFă  IF A$ = CHR$(0) + CHR$(80) AND Y% < 12 THENă    Cursor 1ă    Y% = Y% + 1ă    GOTO Maină  END IFă  IF A$ = CHR$(0) + CHR$(72) AND Y% > 1 THENă    Cursor 1ă    Y% = Y% - 1ă    GOTO Maină  END IFă  IF A$ = CHR$(32) THENă    LINE (X% * 10 + 1, 40 + (Y% * 10) + 1)-(10 + (X% * 10) - 1, 50 + (Y% * 10) - 1), c%, BFă  END IFă  IF A$ = CHR$(13) THENă    LINE (X% * 10 + 1, 40 + (Y% * 10) + 1)-(10 + (X% * 10) - 1, 50 + (Y% * 10) - 1), 0, BFă  END IFă  IF A$ = "C" THENăPickColor:ă    LOCATE 23, 3ă    INPUT "New Color: ", c%ă    IF c% < 1 OR c% > 15 THEN GOTO PickColoră    GOTO Maină  END IFă  IF A$ = "S" THENă    LOCATE 5, 10ă    LINE INPUT "Save As (No ext.): ", save$ă    LOCATE 5, 10ă    PRINT STRING$(28, 32);ă    OPEN save$ + ".lev" FOR OUTPUT AS #1ă    FOR SaveX% = 10 TO 120 STEP 10ă      FOR SaveY% = 50 TO 160 STEP 10ă        PRINT #1, POINT(SaveX% + 1, SaveY% + 1);ă      NEXTă      PRINT #1,ă    NEXTă    GOTO Maină  END IFăLOOPăăSUB Cursor (Col%)ăLINE (X% * 10, 40 + (Y% * 10))-(10 + (X% * 10), 50 + (Y% * 10)), Col%, BăEND SUBăă'----------------------------------end of 3dlevels.bas---------------------------------------------------ăAngelo Mottola                 QB ENHANCED DRAW PROGRAM       eri@cdc.it                     02-03-97 (14:35)       QB, QBasic, PDS        467  30801    EDRAW.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"EDRAW.ZIP",4^6:Z&=22852:?STRING$(50,177);ăU"%up()%9%%%.-%4q[hG790DuHb.%%=Q%&%.%%%%ji.wf&S[gfxe5LtJ?u2+Yh9wcăU"x4j??h9p)Ja_oFIRD0D[BU0q%hnuGGgpt0L/t1+RflY;o(.Xzb&%F\Y]BbAps_FăU"AURd.oJxI_dyoNB(44-nbRxw923(ds\?DiJIP?JJE\m,#,8g)YZj\EiU.Q>UWkHăU"W2FazxHa='&d#wnVa+L^2kg(%l$bgQ$:\z=GNb5U+BHD[Z6io=jSM#LYbyNW(WaăU"^j1O;G=:)3D<SQB<1MT4=Xbl#jaU&^L&.P6]n\OgjSCk%]=5Pk6-$JzEg$jz)+JăU"a+GF4+ceYtg%&L3Dk6.oS(ThQaJFGpl:vK*^Fz^>LD_8G4D'MJoZ2RETP9XfU%9ăU"5ia+ppk=='gmty8?/iE>GBX9v4+M]>R4Ge%=q4*Fo*YfltO2[URJF>HKOJLkBe5ăU"zj1jldFara'iQ<WtVbU=q$\.guRDu[wdLlAVz]nql;de1pY#nkU$lL6Jj86:P.DăU"wjBOYR/K:-,n3q'O60-%qZtHnAmjC#,d:9hEt8_nufwc/h/Il6&-J<Y=1T8R'TSăU"3SuWj[-^XT?Zcq[&.frEB%vNTP\RajqDP5bdbUMh6kwhHZvZW$OU>lA\Kjd^p%\ăU"uHIsb5Kwh7=1bLVt<vfq4cAadYQNi0N7y$?C*KVlh.^&:p)?J/t$4Nc>poDT2^^ăU"^LHx$/5uOBnuPmp=J<onl2+9t&8d34)f0Ls>iZc#xQc0Pl&=t6sjAv.Tr1tf<WCăU"-=ljtVY\ZF&KcMYQXs_oIgf,*oOL\uUBPg$]e$r6c:ha:1lB8YFkFC5K4Ce:TlIăU"fXI2V:p671e5OL??;kU,n;2L</H.shLpY8ZZY7IblM$nX&84EFjCU-*rKicWQUUăU"Ws9o.-(O#PkeSZ)snD<)+c-FARR)&VX#m:CUx\du9Etf6XdPO#X:HYY-5rHr&vLăU"LW-\XudXdnpWg9K:.,+1(;.go%;yX-KY2%9XB8hXJA0$NCX.5YPS\Oq$+2qKq3dăU")WcVI[5;-a*%;TAISEO.kd*'AP/^KYq)+40;&dUvSnFQhyz+h-Gpd/KY)m3\tS(ăU"v3[+];GhIk'(%la>Eg90P26fhL4\rKL5&7FP*bje'nf\fTEeVk*f50gc7bZSV+2ăU"g*(f&j*3)Tn<3JnOmp+ilXix8H;d#930?XY_-v]&)ouari0]$PT'PP/?GZdakRuăU"y'k9OGu7.QmI1ST#iB72d&LpLmZVfuVQ$&AaB+H-sK<1wekvdYvO,UiOJK=cfHGăU"\WfM2:-5dmi??L><KV:Y*1-*8PG,/I':HUo2s;FcAm]XU0\TPXArjP(*>3v/0x-ăU"68*adL40?.U.#kNp%dl3/?&H/]'^y>1t0V4r[&[-1-&[,1lDe[Lb\T*AGk%:1*DăU"M'b$pYLg&fhZ%EHKej?d0N1DWBarI24t(MVjF9E'A:IbAPd[T56:y:7Sm3b&*R[ăU"UU4^Kh^Q8d&AQ>-V9e2k%Fb5u7Lo(e+2]&FlY(;_OuVrl>VYsd'K1$NKndJ$ZWfăU"lFR$nz^ir2ds(?ru7bC.r>liRf/*n9q$PMnrrLX<W=3j2_c;39lFVDnS\jH15TqăU"[9*0%ZUlj;pWtrJhAfZY^K'),$d/>BMRE,]5v:9:Y47l/]s5ne#d)X+YbKizh4măU"MaIZllMn^r]G:Q+6WL/zKJQ?BkNH'&seX^FnQ1[/THJk-P[%:(W--?L)1QVr<GCăU"bmGU)tR\J2/>LTVO+RvuLr<<I+F7\5bFzIM+;PP*2N9>Rz.MMC/fPaWg\hPr6RjăU"[us'gekRrI/d?c[(eRD_-i<R50/,D_Qlv(_Df^UtXU#]A7$iprW)$2Tp=sdVF=aăU"psQhhuC3V__DaV%6I=5]sRtHmN84XTT65bvD%32l-J%qh(Ka)Ns4cgckMa#'eC#ăU"/D6qEtY04VTGJO'WEa:V7k(,pN-0fR#_yyu>7T6F2Ly3nPvpJJ:UqHz%vC4FRuJăU"&M9IDNl5OCr)P+m*l1xsc7lJe.[S2CKN^l_'gDgl0Yepc70^=nCN*q./Vc5%\T4ăU"lb1^G29.#BYMpmE+3hxr4Q6N,ObtLpY^wK>;*m3$O&Djfp8<Tr<15rlAxYp2]PqăU"^Mn5#rtq=H$/Zn2sXVw/-?'ie:Xq+]AF3dVL7]jQ+Zw;'Q^h=Et^bk)l5nK-N5făU"D49:gi;7GU:9.>ZmFM7]/gD#a.+>^cNX9s?LHf)vdFDK^rO?/e1?^\mK()q4+&găU"0vjG#-Gq1[LE0lQB>M0ak%3_D_g'r-R9<A2I9VL1K4JL5O4-p'8%<X3g4[YB4$.ăU"[e:K>$$ta3mk;xia=usWawYR7l5UgM6jI_aOp^(5QO5?u/;cNM=KM&gQ';:^-,PăU"RwOkfnlLK8-Q_0c/;h_f)^70SJMwB<ZW*it]vhi+%_Jn<<B_]5,'5nm^HR_umiYăU"%UbY]ADeOZ2_7pR^6>x8(7MnZPJ7'pC+:DZgO+fIZrM^aLa^mtlhK?cwH6WrvAMăU"_t$#\YLbm^a1aW-]K;Dy4NQ+QjW9iokecK.d]7HCZfzLcyb1LV*x5ZTm0$sR/,2ăU"mKa]CER1ss-Mn9v2Yu&UKvyOdQY:r/lm.anfSusRuC_lR21mfw#zy60(jz'xEq:ăU"*.+tFwJmm)u&,;,3Uc)73Sf<vNIRca1.dgDx&QiioBAYpQ3>[GTb>_frUW_9]^1ăU"s:CsdO^cq:,?5tD0(uyV_jrI#[nf%64P1,bOGN)r:46TUC\S1<1Z2Q[NyW#b88yăU"FX7(axCVfEM/e9B-CwuETSy&K>N;9)p1>tiE:h8tw77')<gISu]=#Mxu+u)K(DnăU"BU,$0v&^%Nus'32dI?GG:%FFPmY?KSm.P6px$7XBZ^BU9bh65]L-*rTbL4[g$E*ăU"7^zC(su.C,NYkAGZIc<o]a,T/4Z)\'0k_vY^n]\7Cd$dXXtWLeo$m6P6[h>.%JhăU"(ifI2Or1cQ<%)s_Xeg-8Ne&[-H(J.^:glH[xTih.AslZ5e=7[22ymACAvU4%*-WăU"8&87Yn955=pXZ&reB):WP?(2:t;8(SHE#.+cbTB-U844P/4r^1qqw60*[i0OyW2ăU",jtB1TSiH4yq>ASk'$zZ1D1SJJ-q>Q8>:3v&]_-sr:US6Honytj9#DB+qNP1rVqăU"esdX2Q(3*lzM>%Rm0u:eiwPPp&Yo^t4x+Ni4nuJs66e&;Wsi=;E(KHB5V(E[&j8ăU"(^39yd8F/0pflZ>L]kPq?kZi%1C:V,ezD/h<b+-,=ZKc(cKwJrfI#D3:Qd5L+9]ăU"2^SPR$R*aLVGD(A^;2^?\h&mRXcCJAAy9seZCKQ+xB9T]fZ<P-l.opiW7glP[mdăU",U<iD4rrkY04T=8]m,s[N%3]+?9_L_7OG%;c2,g81:KOI8tT7Di4'x/_jT='CIuăU"KDK9XihZ?;t:Y5+[:RtKbE/n*SK4J5:LyiX$CnI12sr_)WM6An,s#Z\n$]#sm4WăU"#YP80'S)aYsDxlKc#f7[M)+gNM?71bLvsd'^fvQNVC9k$:HuOJB'GK]Bwj3Kkc1ăU"I^K[_Iq+M:P3ZBW8\ll[hgy2aek'ap:%VD..A98'RSBq;+e0[K0/?'Rn1N)cRfuăU"79$Nf4:IZSW?Wipx'e\OhOBm0Rp2r7E+NF=jw,iWuotplZ:3Ho17nJCw\Gg%F/FăU"0A\5p)\7mF+3.EJJLFQ?M9O<h:$1dn#yY9,M]$_sdP89s7#S9^l\7EasN#o<m8DăU"13Th-yC]K(9Cf9))Zlr(pfMCYP^wg94.RmWg3w$[QIuj)q^fIGF']MNp8h2UKPFăU"bl/SRZ%TCL-[W.34&^#fPr#??L^1ZUl*Zk0<^VYj%'U$2\brlONb_U[lMbF^4LFăU"]alhe=ngD-Y7GRhUVQM.$Sp?$nY?X7.<z)l2k'uZ6S]hri0(8P-o<u$HCA7dY3UăU"*[fccE2oTlm,g,fQrA0ZP5-\l4I,ymX4mJ/:l[3K[rA*3LIkNR6^4dcl6crbaXDăU"y6nT%JV$C(;bh>4^X']R,_G6bZwq]d<,O6sjxA;E*<P#0ENL,\?AJ-;SkcR[ug*ăU",mZpQ$;_vpGo'(hALx\lsQW:HZ%N8u#MTNcQ<+5a=f[#yR([0Su8gauR\4n/*rvăU"_KH$2V,s-Q.,(&i.tj&szqF8nGApJ]kby0'f2JECE.._e7*Y[6f_8'mn%Y\WWJHăU"USrm.<&?r>hKI=OWLx%r\_JJXUSr-9G\j),d-uzPQeoPhA(jJzdujerdU#.JZo%ăU"_3ow5EA:B'$]p3%-+i.,$7OM$1zO8FI+8SPmsD*pJ+;e[mmBWQ/D=R9wJapQrL(ăU"oOcbgolg];XIK3iQw6\qxCR</PH8u#v2lR2rCJU(%#\j[WNz%MuCx1V-8_BfI#IăU">[QRhsBxEI4S7G7%C&WW*W'q-I>MWW:;t]IT8'_;WkjdUWRTsL6Zen?s4A-VDFSăU"S)C.dUH,0f0AYaANlYmjKfYWa=o[Shqxf:TPWZdpwWA>i#xSjZ,ye;a#Cb)BTW:ăU"WGu'(qd0cqC*<3'V^oUVuR$Ru)#u:MTc*9V#f,DS<PF]Q&gs;&eLWDM>yMbGs-9ăU"\,XKRpCBIsDJX>?;&8jz)q,h5/Bq(\ZN0$X7FSv=-'q[4I5e>W7.f1,RkQrppPRăU"on?I,=x5aEXFSq%CLQ0nbt?)jnvCW?G^my&u)=[.*WAqmoj*htF4C#sJvL23h#văU";0wL2u?a+,H$V7uuVP<57^DRr2A)*((\]1lfLpA[z;4:5?IX,]FlEe]WA5uE3ikăU"0n]\ThGeKiM,T%FJK(%7Y<E/DQ/RZ%*Gu_GoI,MuTK7D<'SQ^/IhkMUGIH\%?:2ăU"/yv%FNIg:]a+hmWNH$nHac$6Oq>q<q6i3LZfo#+(IOkFf]:h]<1VSjLRpjSAkXqăU"qXUGM*cSXwfC#evlR()yj[8cexh0VK,OIMErHDTAS6&6n+[2)QKA.fX(wZQXdR,ăU"0tQRG9Oy,(17=WtoDJ9g*3EeUxKH9f6P;\uVoba%mG*fDHwzah4lnDO%jmr04r>ăU"]V3iJkLKoFU$kcn$4XAqWUTdK%pBk&U3SYmX&8+,$[<,h<d_m]HQQWyiVkY-UE,ăU"*'zpZz>Q_fcYnplLIdlmG9]$LKr?hZO[J$N;ZP%['dp?C+9)f4&KYZ<tj<e?gilăU"4>&9Bk_x0&Hx7Rzq7h7Ak;OJF5Ept[PVVsf8YJ59HCO.n';W+6((c_n/8Pl'OI%ăU"Bn19ZX7k]k[.8s?L]lldW=bGb/HV]Egv<M8ehbZ5&uWmfrC:MEslGvTJ=(ETr&TăU"bz?jk>F</h3Eth'hH,?Mj'qr3a:0_#jbVC4IrhyJopZ(ti1*K:enE%YLS[=N4fuăU"'GGo#3(qz1r=Y&DV].:A.s:/M_E29X[NsKmp=4&$wPP%]1C_ZBpLr#GjAeXn<hsăU"8K]SSl6WZYJrcKVW/Js\ud\1jl4o^\=hF)T1yPAuEe#J%%nX>AJa.%.uS/;WyD<ăU"$=v^c#9.Onh'ta95Y.d&sPY(q-3Bn-mlMcq7j9<):0S]tkap0aJYUCHa=G50S5RăU"N2V+/:euU)YNO9+YT&+HO(40-P'AH:w<:IH%UL'.]R9(iUmrQ1d]nziPgBvKHrcăU"lB\r&nrf$cj2xItFOZ2<c?qCgjy?&.4z&:%zl2S)=4X#(q*1('OL</5=oA_eK]6ăU"70_#<t;M<iM_#TQBQL?Og\cglj(,%os3OAhg)oZr&Js'.v(bMsyGAQ9b3*8<C(tăU"%1nUV&k='Yg9]#_PY.+Q.E2TSRl;5z^l2GI_.%3D:Cd[M\PYB9Oq)a4u168+FC<ăU"X-\Z1N?OKBlNOOuSa)CfVCo_IMpkVGqn&*^Xa#cdhkm6oJ2Fp'LVu'c^:pTv'K3ăU"PLr[a&%tYgklBJk/g+'dm%;QmHhAnWa;8'R^%LO1s??AhC-2GM.kADXYnUK%*viăU">jfl6NWt&tm:9r.77.PFsA+[&-jg[s)VHi*lX6o10mcn:PuNs:8sCzUx]CjCcFsăU"r^h[VqQX:4\eW0XY$tC?F]r*4O]2G9ARXH85Y[']'?_802s6Lp';;<:LV#9<?OjăU"ST2T\p=#E'(G=b)ff-S=vU\caq7BNL<6v4(F_Ne^G-W4aNdPXS0N9Cfl5BPT(k3ăU"_J[Z1d*N]p[arh+0p5?DcqQVVNg,QVS4tLsusoBo;H,*#p<nfOj<4#PL0DU.1wlăU"$Tf6m6e[[f#45D?=8*$z_HV=1Ry3mYxS2$YHr9pwCde&2/WLRJTffD'D4P;.)+QăU"6[&MtE3^B1e*r_aIk#a8V,DEVgoG54Ya+Ant,eH7,UgB'*?X>*5vk#5vP[R,3d/ăU"Fu(Bhl-bscE-LjzUjJPF:*n6S,_OYTF.ye':fL%4-8M8KZ&k'5IU(1/vk:^H$B[ăU"*:]=J]Px+w.9]m6$,wu=%IZ'C0'/-&GM*:,^%s'>V.NkphX2>Ik[/[P$?a-R+tvăU"m4Ki<5-hw5&^oqF54$%Hl]=z;+gVxq'H9L-Mdy=v*Q2ORg.%97>Y)_U0Ow99ILgăU"D>mY>n#,+2LFjwx$+[m%;*)>3oxP_5W2Xw=qQ9H1ZxAQ[7xMz%D7:oI'xV>\YE\ăU"5yF(/v0BkXBmvX^?F[PM?eWp;6NX-k<3T,AO+UePCvSiGBN_RrW06NT[1Yq>&]eăU"oP-$csHRd.^lbJ::q3Xb^YkVB1CY4?[kRc7TY')T\k*0\?$6SvaNP3CVT7A,:lIăU"0$tNjU[v9D^2/=-?G-;6bYFnod,N/Ch=;L5vTeDQg5k&=v;hd*RQNeIV*[XrTN1ăU"7BeADL/Z4_:k?*ed\.WM.(sL\c-3EDTZ9E;-7;g/h%4r+A0&u/1SgL>at<.Da_:ăU"kZLHC7)<0Ro,(MeD8^-P)1XF?#YiU/6+#WYz23&kKjNg0'8_)cdY9m#^4QDMd2IăU"Fg-N7.;Z20&5kk>e:n/#';6\SLN3kNpkytu&cnnnG_>whao3n[-3VDM?E\2pW5năU"XD\fQ5O6=EQ5aZ;>=QiKRYZs*oJH5\ScU[*igVH+E5603a&*c+0Il8.w^NIT75uăU"]UPA[qZu#)TK[6m#Ov,]tH0$MA#%t_e#4[^]3VPT,*)r7BCJ(&hUjEvqKW,hDxXăU"hf2Zw2:UfX*UYl[\X[)/LBOmS%\\LAtI/78d/;32P('QJAA4i]RL87pZe/17=9IăU"OX--%(Yt5$lYs):.>SW\lv?lLL1X[dmcn<i$\3>sXmD0>g.[qb.0=&.w]Ae>]FWăU"4%5F8/#c4[9[QhW+E7'W)Z64u.?s_^K'e3d6TXZt6,V*.zjF.nUL\SL-4%aN&-]ăU"#TkK_d.34I4uUEEE*F$2uD<91A?$6d9?_nb*M[6S6)gx^_NC9*2J9O#DMj7%7-băU"9KeUshPVJ/OY'Oz&]U_6L1psVwEFoYiCo/5Dl_pa,E_h>BcI7L=b*1t[amXDA<YăU"m)VH*1vQDVa6Vqx1]Vw7>y5c)3N,?#2$pwVd<9cp.=<l-E00FN)nsI.tRoa<Re8ăU"C?H;YzL>EY)UT)6^XV)'(FMs_zy&turn_TXv=NiRCl_$OU,NY9_WDgp+.6C/q=;ăU")xFSHU2Sqo&2aq&/_h#&Gq)3g?ctUUe9M^*#U)AJ>-gIck5LM9Jxd8/WL12p3*băU"QJ)(LpI7NO)BuY%hTAVYI/7F/6a#]/?=DI](o7uenjbjB;\boes1U$+1epJzqP=ăU"J3[$duLD2w2EGf?:J#gbP]Ku)>$v411/WC;]=p_3'DTL)Tu0R;]?C8]f0t1u#?căU"h&?>X[0t>GbfUhMuLvtsPffm-R-sI\as(cqU)J>^_m+03cvLYTid/z\G>hnxP_DăU"hiO0m>edJ.F8sNrcwmrA]W5=lR[_;<as.nS2K$,0m$<v+'E<,)fxgW;nR't>]N^ăU"._k0M.>8,8aZp\XBm\a=23EF\NOrORLXLRQB<nL1\xE0b[)S*tf+E4$k)t+eO+[ăU"?Yn:uY=9b:2k1M&t&,AeSDY+>o:tUXHO0EG7?bEUKjDF],i^=F%i??fTYJJtJCDăU"(,PS8*t9'DRclTP^vYl1vYnYW_<xrpV33O7FB,-AY2epzn=I[\Ad8ikA2EK]ok-ăU"m$r)6/u=vYV0[+kp9jwoI%T+2e-qzEth.\UWS(Xzee_zxtbtW;l7h3-Mvl1s/<xăU"=,7szu;rD<SKl<[6RlDFb#qGH\bnkAH\iH'\w,z%a$T#3q:D%iB&Ab]Zzu^)%rrăU"We6=<.7x6<wEd<dS&#\\1TK4pRE<suhf]>CSzT?iSlLmbN[<pQjnJ)ZV]LME<f5ăU":oBywcCw#ULn/'jqR.g8Pr%m(iCh2T<)S;(6YdTBoeg5hF3)=>mSy2pYXsG4f+NăU"'/o+'wxft*G_+5gf>35&tC<+WBOd,lPV]jH\ZMMwL#XNA^]]Fw%h'Tikg2j%''KăU"T[]iYM?1z$CXK]z&$+cY:9G:%RT-iQ[%TmisF#'#8J8B*]i*6xm\AY9KlRZ$439ăU"*YF*f\l9I0aFJfGfRQoheNL_GD0.C?aQcXnADldm)fM^%--/c8=riUbTKdvk5o?ăU"jBmi*kzmac]$/s<v?F&5Y:c*jq:X<,z]J7BsME/0.&W7uq8iM4?W%Hbx_$)Q:*HăU"M_cUA-oE2u/=\i3J$s*]pr3MC90[zEkhBY7aP>Z[p,8'<=5unl1J^MKz/3)&3\qăU"A3ZRs(o^S.N,:Qp_LG*YBCc76QJzkMhg[h/8?d,XFBbIr9$f8liie%.Ii.Wmk<jăU"L^(af%w*x_Ue7#_3KbI#1vmW#-$c;EX(wN#-9-%vB4FuJ/(l,'JZQ*?_eD5r<?PăU"ib_9,A9VoY*:\Ax>>8gJrg49dJjN4)hd<6%)X7qImuNHPR4pJ8AXN7b2mCu)ihKăU"MHK(hOI3;mx6]u,A79k:f2<6TKm+c&5$*?f':MNO1.f^&GI.D4g^y8u2%;'E]#găU",S&ym5MWv2q%._ox[/P>T0;y]R05^S^lmxw],dxlZLoTB]eiY7fMGzO^ZV9'%Q6ăU"**d6M'7pu/.NbO^]zpbXq2bLh<]C0R+4fs^qSqJ-](w'>waBiDJ$3Gse=bcQDsGăU"np6aXm7N1=O5i5.L'S2_3m<\Uj^JyR482.U;jfHjhjv_$0/G^1o*/?dMg*OE[YDăU"+:b6L>?'Qr9+,zHj#$K8C^j\EkiT(T5$m</m?:>OijSU\=fJf;;6^D\jn5Auj4năU">-%E5KW7]#)P$Z[9Bju*QxN$Lk0Q3<l%ic8bvf6r?A:djvp_NqGzeA694^/r[+2ăU"ljf:bTAQ]M9&bn_;HB3>MMVS\9MuWSLqGO0l<EC<PYL(ig^o_C99H>uY3Y1QKmpăU"4Y$^1M?YqYwT90=G)$+a)AGB.3U'GnV>FfAtum,S07>8*^^M/v9t:ZsNM0'>pNkăU"(ju59,p:1?W]a'[pGXF*%JS8G(GJj6S7wQ]0&pyR(OfjeVGnkXb0WwT(Gj>era<ăU"hr+zk0n##$_-/_9DOEr:lGe,oJGt;Ar3P4D#]QP7oPH#rLnJz'Lu9ipI2&7Lu40ăU"(_5n[CSy[S$6Ja4P9:B+]ZCxICs]]IM?]Ci)d23T5e&._;1S][evShH3,yY_T$(ăU"a'^JuFCDV-/<5+G.^)=)Qb+iH:lfjhdlO,>Way.-NGebtfLtAuK.GS]8Plsw'baăU"]FFD4C(RMnWp'^W4IHVZ1)tJf]N9J<ZUDb%#Et#EnN8;kAo1*Ftaq[]nqHbF>cVăU"ReP41Vn<A;kXO;mr6sS18aM'w/QNb$<FrWufLoUJ3Yq_)%\OMj.k>.M%Zz>HWB6ăU"-:)5$mbU-odE1^gT?Nd%/1V<<d0_&3#jtAb?LOGI)9).wByQ87$/o0t;toau&:TăU",)4<g;MFDgQs#f<[[)j,vd1n'1bAJ4$E>03xx#YBLkHtlQ]LqcTSH=4,.G]C5GZăU",sCKUL4f=Qe(-&U.De4i$ZY)'qi#UZ22%eR>2=+YS&6Q76UmQ\WeXIPcL35XW_MăU"P5v(W1U]/lY+<eZ>nwBaf91\)p2h(pPxU,LB]&-G/&YdG%+E12\ZVKcypkmaiXCăU"3h'W3iNe%u^?XRBZP1:'g3'=$#t+ITY+N8C[E,^gs3xOhakf8OnwuA.6n]UHe7zăU"0891lY%iD_('bxo.Oksxl5(:2jp$.oIrWER17Wgd*#2c+$Y(7SaHhutBfgo[*E,ăU"dJn&YH0)\>Ywjq)x9=qnpahP)l3Q5DsCz+:TG]M8SritdC'$tt3+e03hXwQq1MPăU"FDzGT6COYAJe)dYmenNMO5.kze6%%92l(N?E*S)a[=w)[ZpLDBwD/JuL5;3e^FnăU"bjR0#7-Acu^1b#USea_urR#B?lWtrRQ&[HRv[3LTG;Yk*Y)eHjAz?0)#J*TpJi>ăU"#B8JIADBN5tsxN=Rid>oN>vcs\w5]r)Sw\KT^nJ>)mB$YJMSW>hcAW(JkG*vm($ăU"lem?6MrmJ%0u0Ac;u\Z<gRKP2[^lD=U4L\)>Vc2X?[hMJGtWfpfb;rThCMPlhP(ăU"Z&8PQO/DQKUZYLn+,^e$L9gpCIXu)R,i9k$V3e^<wa'wCwJykKQsL<s0f3V(X]văU"Y#A3[#48?&H<I.jO#y5V&7mH7yjbNMuojl+:h.'Y_VZ)c&?/buoO[8YaNJQ9\OHăU"''8)x;o;Z/sTXrAQrN:Ih0J4puyM1RT#/'CgY8%1/2qH:\hFlT6p^Rfy'3dnc>tăU"^5X5HeI96.>r4\ub-ELZ6F_:zAb5Ra(lV'R7GhC9,b]?kD28)XOO]4_>wkP*8XOăU"f8UIy3J&_MX3.9$S,F8O;aiw$G>,[JGT\&;rk>C4xX0S)$Y)E>9)gOH=aIP;SGmăU"gC<NCBP[($C1-gl]#TUC9hw2?E;9sQL-\hP)]'--<55s)50rCGbp27.:<>L%^qtăU"V+S3ti+*FP,dw>C?6gg+9';jl'[+T/Z4KbhldV[yC48q(/'hBHn(.V7:rgsk.oJăU"swSrj^AdM=Da5#GkKM*tm'^La2?ZpS&VD+tJZv1r0+F/x9-%%n1Jj9#',\aJ4FRăU"V5DxMYuVoo22tf3X_of%Z,h(JVrsB\cO(I?F1-/g[F,rZ7pzwzNZzY.s#7c4*]6ăU"Bw#WZ)sJK[&NSf1nq3u0xNL[)_9i]cYBXNS?(<.\1aWGbUlGl0yCpH=R=-Yt[+uăU"UXp00[KyXF1kGeLw5rRhl$(uH-Yx_B6f\le\T)lg%v)oDDVQTq_lGog:ee>pvHAăU"aMPe?Nmu$>Oot#XMES6=:<of?1J2ozLQSfl$usj8=<ZZ[iP*<QsTdtWzUQ8Y>g8ăU"N*mAfjm]Y+1:aV/M:VA&GGQ7qklnT6VeF:d[SVtw,%w>&_$dLI,[*,7^u?J+3G4ăU"Mk-UbJl.B=Jb6QFY5ZcdJ]LfW^ld&L45FZ$o/w)DNnYsnb7b2hCK-hP*/nbbcJ[ăU"Ro*1H:xH(c5FXd)<>^?p[iZl]<bP>O(%2DIywa/3h&#Ajjq*Q7M[1$p?6EGgz$HăU"af_O%/($Tks4&(HY=%<k^oEWtTO_.<<Rg:%0I(^B;o,5D:W//b6rWdL.AiW7%(JăU"iP)T9n9;_(r&xT&0ULn7g:tQE[et+Ft*YM,5))*N]e3e>*1DuDT.6DEFKQht*4jăU"E4ke<U+0Ub.UHb8dBGu6'^7[uLi/b)<%NV\-ECGDNCJGh\cr&CwVBCjOr/GHLZrăU"Kj*dEQP3n<;DZVP=ss[\o.).T#X\G:5MpQlrb<+h$$0Oe]lUcx%a1jjS=M'c+xRăU".C>ZNa,P1qt(coR<l]dU/s(VksFjIVC7_+xt<Qen4gZupu4+=#&'mBfo5Z23VoEăU"<D#if\lyPchNTS<a,L-G6?l+V+F'F*vSpit9.T5kb$KK+,M+aKOESKo\VP_:\3CăU"Ag\'W-B^.^l#Tm]*Q'Y2I]#5r&'9g5g$R/gJcI[X=MpV%jb\hFU]VGEn:?8Mm0,ăU"kMG'&?*D81-635hHu#JA$V>F?jm<gPWs1)+.fa^Nuo6rX_dr6v<I:CQ-T8V(UtIăU"Fc4.>*PZViOrEy1_W4n_N)HUz0PpA8oGKZe7;oKo6g#n(%/ln/8&=14577mT=;:ăU"nOZ7v-;<sY>p2+]>E4OWGkte-M_DV[KpunOpElN^47Rb<vCD&#d>ICUQQRM5r55ăU"h31+qv\31R7%iV[kE%VJNL\P?Lc]2%N:W>3mZ?M*f3DegHq&R3%WwS'>;AzNqbUăU"ZHJ_7-?^NMY'uW6*uvWmD?RIGsj4O2g]cKBQiJF&4RnI5UiQdzpI34&H#4zZ^&păU"+,\Hv[OXBYZ3G0[+a+BH*)T:sLqn9sO[\YzWc=_Y5ZSPZ5BvSl)fjCx$T6Xja\_ăU"UZ\%VDiXWI&(y?qdBb2p)YLJp;EWN>iei9mn]o?gm5l$4MIT.M:w(kc0N$pzVDOăU"i:k/h1'Qh?fR2*0$wieQX$63J$UgsXfQgyVh0W4+<r'uOlFM=3?XAW7IRId(p/năU"PPcPe%EP4*4Q_pqgh.H[c2Td-Fov_n.V+L4*j#Bn)#t3IsRA8_U5j].PCeEWVcgăU"p2KmNeUr1,kXJF<RU&Eh4.?wy9QYEI>Y'h'98UnNyT)?j%ntu?TYhjO?Fz)-=\QăU"jU4j+w]vd_umRnNPUwJz:AN4:0gJH+pwRKn:;1b&lLkq$/M'bCg]h%zXLL%LoWQăU"9>9rIMZO?3:9xajeU4ZjN?,X%,scS7&xiP'<PAeWZ)NFe$Z9hKT(W]STxX>+jz_ăU"C7^-=<iLn70/0GBR:fNObPoDY?PDnFM2DCC,38<9Nn#E'2a(M<ktu,,mO:W461iăU"xic,qc%?eQdjfOOQZ*z_SQ[aS:]44Sv(#fnOr,-h1yK:bxqB%T(cc[794on)6m=ăU"U4A[^_BDI&M%W=J.<+2)lC1sV\4U'q#<'09>S,H=Lt<5.E$b6H,i%6Y((b9H->hăU"Y9\Tw7YfqADN*a=Ttf[F4[<m8m(x['LVb2/9N[N+1M</o>o:n>(w=ESUlWEg>hPăEND SUBăSUB V2ăU"RIa5:tUXJ_PPB+l0R2J=]'FJh(z:aGpe6o):+^&#mRIJsTcHc:'45nYJ'A49GiFăU"P$Uv2H01m(8$24-D024n1MBT[\aFNLq2-HdX[i,17TIcFbxhzM<8-*bAh-VozE\ăU"h_t4'iDpC&+.nK](8hW:3:H;usufm)pjtQVLvEiigs=T5I0T[mRcSl_7:IIi/<\ăU"V1g*3Frjaa9_th*s&tyMGSk0qe&iH0jt1F1gg$9Eg13*9S]hxX8oT:&RQ2n;x;(ăU"j]3<^)UkVtnqDI%HeqD=2[5X$XGs25/vW9)L?zp0C>#gP#7$Bo4Iw*4Z_1QV*F$ăU"gP$ZHrT;[HZKqbPmGIDMb[L,h*O5UZ3#QomNAGXVg36D4:0?9\^)Dj7t&>LsB$HăU"aGrvrvbkw?23VN5Q9J%Ct*SWLfmA'aECb[O.n0^ZyL7ejo&cqmMv0rMrSc)jZDiăU"g(%eOb=7QWG4(>OnJc=L-$<dk<rK]3e;\VjZmKej)sy&LHZq&_<?zlV<7Pm]p>măU"<ECSHV3Rd[NOoc26D:fIXFWIaLBF?j]K.5d*AwpFJ=KU>wLiIHZ]C=cJhGl*J&măU"igSkt:84:#Hx3%\m=#=brf$0USrfmwRWZ^zymdN4Hp;*fjyqhWGx)Hw$_+ObD5TăU"':Xe-3C#R5\/W4]1opb'Z>P<1bM4=X8n]%r[kqkTKSyGHV:b_jn5)*X[TY<-s]GăU"ja%P1_AH&D#8jDl]'.I\;acPUwqUU-V$S?k?306A.rC(AX.3URph9S9<#=Q9ERWăU"ZAoI#j;5pk&R)IhoG-hDl$4fXduiRN?'ROeVb4-EC&;zCq(ZOLr:NQ$+$Ll[gSbăU"xb/7?(O't=T#LTN=IUQfnCv].DnEuN['WcXY:1zS>.?+GY'h-2xnYn(?qS[BTLFăU"2ilFf,0#h+A?Z1,;_*]Z%%]nl9DeC3^%RCPVK'rZse2%E0:#^WN'Fqc_%2-nh^UăU"b[f5A(FXGbI^O[6r?Cjk)m,c^7Kq:1F>a:ZYEruM$gW6s&n<vksPxP#SbnmTE%jăU";[#LCZ6H<xcGuu(HxZ_rXQ*)k>[M^ClHkYu>ZU[X^h_Js;ur^8:\Ds;;+8seu'dăU"skNR+-1L.;fF:FCcCg$e?*&6[#&Lj-bSVc4m;g0aL&h</hXu*2()j2*a;'*h[/CăU"/nP's*Ozd\ohOH\W]qg;6Wr,b\D>gj>hK&(m9s?66XW[a\dYQ]WiqU(m%k?;lr(ăU"v_2VMe=XLgNsu1:e$*2Wk13lY;0EDv\)&,M8]*9J&9/*$0+Ze1]tHN*B%#.E>QmăU"Rg$$%6AZGN=*&HU^,=;2[mg$$n(AgQ<R5H\u#)Q&?L#IV'U[._/ZK1<)$hCY_,/ăU")UePb>-UIx)r=Js04ME7Xr'ZnRnb91(4>>-=f&)wpAd2t9B5=Q4p/a?mY?[oezKăU"lt^AolB>U>I/pbPW]o5iLq;:5zv0V8'p-U8*-[30,*(t)IgR3KdO9V3Ra4^/g:5ăU"p[5;2,Z.L:fXlJ[dh;\q^?3mABX=Ei%1(xk=?9vp47GiO%/^r6W?pEAbl<UUES<ăU"=2\FH^eq/k$ayE.g-+WIk(64PoUfr>qj,Ei*8A1IA(Gbo>meLwUNg.g1_>LdZ^măU"i?o=FkT?13,:3N1=d\tW6Y,V9LBtL[AX-T<3v4sbqF%:63A:T0*o))t)JL('<kGăU"i&T(k1n#2)/2p+Hbf>ZD2)7e87'OE\tOKBpg%.U2%_Ac%Ng3nWRP6,>iz^=HJ,0ăU"U(Bbj524,YsCN&+bfA2pf?ax=oE<%ivIChGd1c1en+x:C=Ztx[mK6f(h6,27e]YăU"[Q3x_<9B':3kgDIPVq(R:4pC\)m_Bc%%jBKoV(Tp\riDkkHU0n3\P]G-CCigSRPăU"mr6G5W8.)8#*Y8*&jR(pK1f\c_^rLXt5\Q+[ec%rllTXPM73JBV-M^[W&5pdnuEăU"fV.kRnNgwZ3:(O&=drMu'lgs/d[(IdTtQ<bXJeQ^$WM%;5LvU\puT)2&x0(*W1-ăU":nNr(iR/AHh'LR8o4dBy'./[*gv:JKeM%;s^+LtOA?g36<9=IqiMnun3XMy^Ny.ăU"nTAXAQ$&2M\7\dJ^MY:psL?aOPDU+:eAexK.Lw<R+DQ?E*3<]0=Wz7N.TCfbEl[ăU"CO4GYUXG/0s:u_X]kd&S%e7HHn6[B7Gc4m&Lf7yPa$<wkDV&,*]JZ'UT5'')DZGăU":]A%vEN<k,r-Wt&.qODVDa'tHCr(Hu)31QjkT6MN'Vbp0#-)W6MR7H(OLMK*O/YăU"Lz&n/+Wo.G,Xm.Ti_z)eFcjpta<a8=fkzL;fVgBsGytXY,%<#$\O4rZ0D_*_3+KăU",u,eCYoL?b['QwR1or$V,jV1b*e\Mx0dD6$Cv.^';Bhgx1-8S0w&&i?s4]rZ?_$ăU"2ZX\_gG5#4hGAcImJ/6(1Axk?F(oz\xxZHPl94\>:-l);zb&]]gobi#&eamP.V%ăU"x[*AxblZ:?7;'xnGeR7mOQo<RhtCZP'[l=PNgq,i)[<Cae<:9qd8^x;=n(O+Md\ăU"IDuf8w9R,#&o75D[g=9M==8cF\E#q]M7-f-n1r2&rInrJqDHFj_=-]r.?ebK.LBăU"NWf+/nfx$&gIEXo2WU_=8==5BAA'P1r]v--FH)YJu33_2jm&B.=>)dT^Y-MTOgJăU"8*7]Y6aXocK*cR-gCTV_grXvGhT&y*ma2(f>7[;&bA\m8A_QW)Feds<Bu0d4QH=ăU"Oqj,)-4kRd<$fI8f:&Z#s+n5I8SV&gW)OFjBRY_g-Q[;RbP9]3L.74]<nsLD)hkăU"1eFAd5S51,Qdj>+kh%ns/>&AG1nr^lwTFUxdm=K?XfET)jQ?%T530dWp%^$Ti7wăU"O[4<G4AN4%>B::,^k-EXy>Z')/XoauS6wAz^o<T\$+c5:Xv^;koxw[p5D^r0iY-ăU"0\'3XqYBrrSjv7>LkXBDl.uvuSq>B_MB&(6:SJf6\#gfj\sV.l9oNt=fJc2i][XăU"977KL,CBOO;y&g-l\NH*lPuMKAQ4&aeb^-=;:Ek];^ip2=WQ.Md/G6)ibUTaaZ.ăU"bAX5\&u:D(n5=1P(NY-s.WK:#uVRfkXf+Oq/?4;e1ie)ge'nw28C8w8vk4zpE#oăU"N(C7RTY#tvHjS[*_b[fx]th:vpehWw5QO8+/=CqW$Me7zwna.\_tjVn-['89uD.ăU"\X5;ct%o<\yScmEQc6B;:2L<HzLR./KVeX/L-jA&.G%p/\P[Ke:iDl97-;%pjQ=ăU"SI6d-5W1y;p,>X_hWipr5Ut+Pj+RNpuIeft8>CObU.ndtN&h_&h#AZo&'$)3i^WăU"vfW,o<cm&X.Wq_=h?=;4pjg+r/M*Jn\K3?b-4E=p4Wmx90Q2j(_iFgOgotJQhTsăU"FE,Uqa)eb3a)g8l5jnJe%39/&a*fptl15aMbWD$#P-+SSNkpNB,rNV;So:U%<+jăU"LTsUQF44/C)T=k[)Fd$GoM=I;:M:+J.>cQCXh7\pBbXXn^j#\qIs\dMqS=ra?56ăU"3b:;rBBoq0]8H.>WFPc8XBHs[Zh69bj4SD#dX&l/6RR4;.zJ5tAPl;=>o22JN^$ăU"hMuQ#i('Fnn<q3tjhchp1nC.#RZ)u))pMphuBK_^l;$lEHE\u]lTQIUnA4&JXRrăU"[lb*1^-0)??%,#[VuR<N%5bL*ex%g,3SkPr)E>k8v$Zwoh_V]AXV5F#N6PR(xc]ăU"LG\='R%GEL3,l)=;w/K?xp)KihsSWoBuo0<,WTSb>Wu/^TL3h$;jzuZp-[Lc/nAăU"o0.eexu,7a#%c9Mo=2SY%0EUtVAg[K+8Hd:bdq/M^*LvwS8fp7qEsLiuX+*MV<măU"\<(-Z&2Rt2X3<mZhE8OPhv'P'50:qTF7kUZGeFd2\5d6**re:czL)hAixo2:Z^?ăU"(5Zc8<W^-j>>4N;b;t3fuj/.#q%WZa[bjkhqX\WL0o;*bP8:9fJ)a&GZgaqXIp[ăU"#\3R8gBr$hpjZfj\Q/VL#H>TNg(SH$k2^q:GV$-trJ)rc$%04$'$G^RWO#(UwS#ăU"y#Pbq'Pw8'1h)wjl3]kUkFwgsJ$ZfsB4F:<s6wm3W1qb70Uf=F&E#\:W;Cv2i5QăU"9^sn5&9D)jlBvwe5CJo+2,x(rJWNoW:]nT_xk9,ecX^\Rs(Xj)tAw;Ct4,6%?.HăU"9s:-V9vL8G_e?(k)f8)aQinJ;_4fH\>OS6qP?]\Au3UA3[;sCI)z\'ukD%lUE=năU"*2%$2iZ4MD]Y&'?IKi2]/yTqbOkEp<-;0zzS5B8$TpEOZ:_M<].OnD%HJ8j2#o0ăU"bT>tb<KQ1NPqnNhO2*8(zjpY?AIV[9=9$M5F\MR/A1[_9(wh%]Na0]kg2ES3-r-ăU"FNeg0/G((O>Nr=aR+hFE*%A,t3O$nHscGg0&nI-nNGP,O1$=O<Y=T^[JzgUkZE#ăU"37'Cu:ZDd<Sn/G(_dpTtx05;b]'N0Cx_)-fHGRtsIS5vHSKdsI5lBG30N,3M(iHăU"6f-QmeYmk,8i(2&I=zQH^#D:Q,]U;gYg:gk-pMCpa>dF2R($pvU3j+B_7>kZE/KăU"Y-iA:Rjp&&mgp&/dK0O0$hDG0lS_gr_%OP\jRTN6dQn:RXdl9r&t1?U3REsNRazăU"P?Y9%fKUDCtwkO4&1\e^#[<3g'%V\JIiIt-tn5,(\vj1TFR;PX0<6IuIA(h$9R]ăU"=W]A;*H'0663jNL%8&J3.A=iVuLK-fH1[SuF91^X#(h9kT/-Y;\#AV1aAk<YI^WăU"nPG*&YE%X<KS4MBSPZ7#msac[hG-*?2RS'Dlj$_A(U[ISduY1JT7208IIA\s*()ăU".#Q,-Or14)biahi.R3*vmyeSZI9E,QfjY=k<VFO>33[FW?4Zh[;BIb=pel0mlvZăU"[_L:<oh1-#3/8UrcMwG5U26U)O%_DfEAq$EK>9BHM7,C)F6AaB#yUw0+Zi21.s(ăU"8aK(];-3g'lg\%Z;>bs^5ut8=k&N*^)d_hcw'7UV>(rN+.Y;c3Cz%&(Wrdcsej2ăU"c3?>0EQ0k6DeUX+h[M?W2\rbOJF7h>vdb9kqm*k&[36s>v:;7Y7-u5611m?NN&\ăU"K-o2&bRD('877:=ua[kb,kD:;rBkgvti%Sq0;s+JjXI(]LB$W7+(RLnF/8TKTdRăU"J\_3lxC,B]BMfMOgw7IT_JLjr0,]HLPTG&(wN^kv(&%I/E)*/t=J;RvqUhAL.;UăU"$Y.UkOvl<nFm-nS:v\ehYXC8gFt;#2g7d\uu_u:Ai&'tFm(tNA->Q5QEKQVT>DcăU"ZudIe-oTewNv_x&Y_qx.qW]$NSigTIiR40Z.W:x8fz'&D6+J1K)L/Fcmreuf2scăU"R&<wOP_H-pXk^DJ;/rgk'kllQUH&CIET=mQ$.LIa6U=C2PQhR;Rwa8n,(9Bf?geăU"agx,R9E25fcU2Wl/?sikXW*'M6DqnTN9$xH,-lUpsc6v5w\Jz.?qfvUSGRoI+2#ăU"E[2RV\O,ij3_()aH2lggxWOgOnn#mJqujbjnixXYFUIiDtYgpG%KA.G)[HG\n2oăU"^=]+i1zXnrW68K(\mB9r3*ILx#H(C-Ym7Qfmkq9,\,&#*8O5-:US0_0UWlBvL+JăU"Y<%U6DPDB:Eq2FJq_U&B2\6=YB4,Dr#2>DkqIh9*ENQ0ey#oRr$k9ecO9F')S.XăU"ge'FF_,g9WU8njM>ZEC#9gGitLQHtmXyadA:5IZTQPf-?,L^+?5XOpZqY=A#>qQăU"nn3X#Lo/C.%*,/XtKUoZy4#wd=T0jN)q6doBr;Ztr$j&E_:b^f*D3RQ8omd[H3băU"V=\UpzgE:S(fU=v_i:+$4,yUO>vb0#B+aszhG_XzXVRJX/,v_hf^E&g%6BO?lk$ăU"/*;f);Hz2h5yk_&Tbfp_[n=N&Gz/[7GFPC#H8J[Wc4/x?lCSk>4&'#FZIm)?[U5ăU"TMWaNUpPW/gXaw9d4/dY&;t\\Q8^*?v6%VyC1E#KSXD^>SK43*PT_B=UNG'YNYfăU"p%T\+.tGrFex%K3O/*#d8x\-5m[:\jTW9g=.n^h_?\AhH^iDzRrJLI)MpJYJ4\^ăU":3(H8Qjagd,d%VM9nJ0w\eGQxEcf=:0O'hsKoWzn%Yz#x5l:8(iO#)/kC,^Rne'ăU",cv0/B2djafC4KE>56>#]+3FLN-JV#Uwuemq.jd:);ffYhr*Yt.t;Ux;K#mSJ#qăU"a:DQR$)vt_+9MZ9D*HG0tz(f+ZFTCblZ^ow,8(f[jdZ__UDwuh,NMVhDMP>VmcwăU"ul;Z_9L>yLLoH=_;L/4])VTm>OF*Jkt>*./Ov_M:TSl6I<pqU_w(-ruCsoIa2L-ăU"t6b=t4Bi58Box1Wsrsw_lT%ublLt-?Ww^LtGtv8;VK1j75y[HodLTLgTluiE]gaăU"49Qe8Lh8)ef.;3tu8Kj/^oS27:Aw,kd*TC[TaECktlwrQ';*aI=1x-amcUZZVCKăU"])iaQ1\7^iWAwUQK3B98i#]dE&n/<BYhca^*#XqZaaR^)K;23Es1HpY6+B*F_LsăU"(g.=N,SDSOK:dCK'phjXpY^\O(v+R_S?^;).#Y-p#5VeB1+7Q.iW#O^^[mPH6E^ăU"erF;s\>nEA##<;vw69GKll3-=4.jMRLsDg1E395-?NF:3;7.'Pi4O;$ypA-</G+ăU"1J/U%zU/<./_[ptX=0L8C-]:G/nlV&*dtPPRMZM'Dq,;eZg&U<Iob2KR3;U.dsvăU"N.v[a'1EPC#2\^d_7oy\oj=g]58>/QHGGp,kjK6Y(I(VdD%&W/:IZm17Y\7D&V:ăU";,%4N3x)3[:thAsJpK=4XQP&;&^Hr0o$K?Cs)8mxWQ&%Qo/atOh%c(hiCCmCY?PăU"Dnj]\&AZK%UsdevjWv64>q4ma:TEjk\)IpO2,>6A:Q.4]lwxY2GaV+0FEsP%__yăU"oBI&=yUV?qcIUr*n-oxiqt&I1xdCTP[#Aj(wSij33WZe<-014,ynk>mJ''^=w]GăU"b.=:YrXq2M9<%9Z,5V5K^RuEj&Rc81c7*LlvOl_XNll5Av+RDu)3+0KUCVA19jRăU";'2>Yil*$1[#VPKM(j<68NrGZx7J?xcEsf\DonqpvE?dJ6&,dmQpt2F2*E*o*6oăU"vdp1wzqMPE_)DV[U.Q8s).BU(0&;3cQwpGU]6.M]^hP]=>yIFNYrw#RYDU4IS^făU"?to<RF\1A4&l)2.ZJiK06$86a#v/KGY;v:gDAsUyl&jV2m&^WW(qeizY4qU$WZhăU"xv-BggrAuKx;A7&Gwl*hnp.W*h#t&P\fHDiC8'ZHhVnbeqDhH6mY-g<t%fLZw*KăU"=,7GJIe^]06cE%f0:IYC0.mJ^O7HS+Lo3<BKGLIb/ttglYh<1%1F/\KE70_:'0HăU"<%up()%9%%%7-%'pRhG2/?n+r?#%%v3%%%.%%%%ji.wf&S[mqu65,TA#L^aL6a)ăU"x&lB)P^Qr['+T4b&%]n%<3Fi.=eaZom7P.zEXvC6wNopi#7(^d9D0#W8epPG*ZaăU"nFAJ+%Qge'?AdBqdY$K<$3ldx$ub2(dT+Nh],d\wrbEQpBwyh=OX:\/^k3G*J[XăU"zBJhYVKMNeb^OGDh%q;%vvkMl_L]*SR,LX8'-ra8:$WFPN_gX=y.F8&7$,*,ct4ăU"Z]YpH>_gd2j%pF^D3K7LX3sD,57V+k7BCk-ifF\N2d)<_nv?kOnbT1VRqITM0+tăU";S+s\\8D$e-l79T+?0i^Lcqk37XA[8^-id#Ali_>qunAVw?#:^Ru42?8iPgoNK6ăU"25Yezise,qY0[]\eHL0cEbo3Y,E$bE?R<7$8OSg>6B'(omVbD0EK?g;Flvt>*RpăU"58r1)3G7ag\6>#l#'=/MswAbEf;5zv,v[v9Upelx2/4],Gj;fF4$t6pDe3WH__9ăU"/8:DNc;0[jp<K_znLAl.z<L-6xEiAzHV/_yiaf\p$o)1A;7B76Y3FwvhsZTpU=9ăU"LH6O_HbgH%BvbAWk^K'9S7elk)/.v(\VD7ONN_h,kGW]gI$%,69H8wXcG=z9w3-ăU"MfwMvUZKVpgK^4qqXJLsP&#0<UL8;+)L0+.y.y9Gdb%SqmWT>sOHVW2M>6#9x/^ăU"wf+;FJEKW3oDWS5v^K7Q/1q%H)$>_%Zc6lh0-a>Iipv*._7tp;vg,ZvL%5*W7;aăU"5L<Gvff]*iqtPLO#oih_s[&+^tz_.0es*dn.VPSR70*pIe0X;8_ieB7Qc0kTiVKăU"1Nk]=b-nGpAW,=GKR10,GN>OFC^cg8J2]e5zFRtsNk5mVK>u*J#Zsb464urfgm[ăU"Ow]f]1PwuG;:2*O9K)pngyelNR*'7N53v9mOWF'c-._\tzKNf)kfjFMc4^qmU7=ăU":u)<wdr,M%LTMQK8*NOnF$=Q<[8gr^HY-3-?0up,;ENVwwVcC,xi72BKD8+RhCNăU"vx0Fe#X]T?pSG)pzJ#LA+#h(zZAdn*(MXdDiN/]FG/re.nimSzB5/Ve<-k&dEJpăU"Q?Z1/lX#3(fV[l'jDl#/s)'3[#jW0)1Vh#ZU:802(Yb8]t,/YCrog*N,c/yGVT.ăU";((cnVJg;5)a[W\MpDB01nX/LXP'UFpj#GxwI,BIzmuf>VbG&q.9(k_5Y^;)./PăU"gb9,=&PFqA-m0yUksK9OugEUQ3GQEeg-=DLgg.#>e(i>9G2,1TRq$QT^g$(r.<'ăU"I_175+7^8Um4vmzfSX+CGG5-Hf0,Nn02)W%\j:Nxi=p\b_>Tar#%:zR]-#VsWF8ăU"B(gU&,S-6n00/Y5&?Ka:ocP^;G\>9\,KK-+slZ5iTWjq*lgEuSuq()N,Q;ivN]:ăU"FVdLI07XJ49Mdm7=-qDpZE].-piI,/.'$Y?cc-HhganlWs4HRruFnrYqEC8[se.ăU"UUVYyZ;''pH3(Y7:00;5KHiMNB:;d0aw]r0gO7f3.XZIO\t2nT[c6S3^'oEwnX4ăU"HH3?1a3cAj07;0IHzad<9#9r7w6T=jb*ss2)*xpOV*=Lu+mGp%eVtZ3EQ-?m_=9ăU"YI.MYllh[OVVp&00CJ?h8=;4IQ2dbXe2lnfj$'\U#&;V(<1DVs?(3\Pl#,m)$_)ăU"yyL158Jqb3NOw(HvOi*n\y]d)aG?rl+i;V;?b)Hga4FDtHF[C&V.[hWdB:RcA3(ăU"+C=7]bG?D:W*i2w.N6T*pw7LatWmRwlnFWvmV=*ZuNf^Y)9?b?5+59nHD65sMHqăU"Gxl*(EktQ*AJfHs-'psVP%Yq\DuYO,NSJP=_d=iHZ_4xM#0q\fJfu]5)_#=,>C0ăU"3fhJU_Rqx<s68B<^&)+ruE5GGGBK/Ek8F+q0rRWXNi&R*F2-E6m;_V%wWTX5=JLăU"iEHZryM$jgz]^gvAkIEsV[X9NE.eXOgDP(ev$1?'vQkc&OO?)?MLFCIQFPqq)tqăU"QqQFxYZcrJBU-BBjGH+kc.:3N[zY:(8n0_\0?LO(fv'DuHo-^=NIS?SJK-3;^h+ăU"[o=t:9Pe(3G5B0Pd_IH:(*k,C^InwH?\\?FDXBs$t,tEv#+Co(VW;bkU2WCO4>ZăU"Ys_=HK%j:hh?2LOBorgI5(D6S#*1FSn?s[i<iGAiWh#3'%%4.-gfBkL?Sp&=4T5ăU"p&LhuQSVm<.'5d;5xA)nGsw)Dl?:IgsYK'SZJj$7*z;]qGiY00.3Ls#SZtz)dOHăU"6C5pJ/.s0W&'RBg-g1I1C%(<g]OpQ=pGJwMyVTO\&=[-dQ&[#ue*_Pi2SC2rTtIăU";5Bb-R+&[oFr4nTSia9<BMlbRK5GQ^Ztod-fTN[_n&kq1g*^n37FSV=eHtSSnw(ăU"-v>[f=yf]-]%DhUKf<cw-Pq:bfBhSg:5[>6REuPR'(My#jfRE/Gjq;Eb]'2kY>%ăU"*z#FwJ1.j'K=)e8(mIrH[22tPxMYQBB.$dEccj*qlY8=wi*T/GJ9UGZ2*a-Qk$,ăU"qY]0ISf-a4(Y/-0q\o.spm)OohCMF4TgCS\>sT/dCtzLf2Ip%g4Tg(J5$?M.uJrăU"1WYV)ZCqiEw'Vs+slg7BM'Ut.;>s9*?E[?d87#5[P\u0<bVQ-<bjvL9r)q)7YmtăU"(+%g;yefF,#5,XW4ET't*Y.ewRR5cs)>a^eb-7[/1Nl\9Z\hLgyYiA,*'wg%2s-ăU"1J&T',6S22.6t%M)RE,1AI4AB8A[UT4)lC7?RMp2OHNYei(vFPZ<dX]2&g'?*[.ăU"=g.sckf#R+s\*hQ6q%5qjHFp#1:Fmnej]pqC;PhS&zLhX=6pqSYh'aCB>:nci0răU"r\1.=[B:chU#J-*s-A1E3He;%HoF54g[OVAk[LA82O>8i=Qwor>bf8BSZg'0nesăU"<bafCAms/mFZTAhGo$9:vQbhRfCNQ:kLDD*qr$B'K1C:-ndxfQVArM>$u9Si[1.ăU"Rs,+NaFD\%H&u6\_PgRr/MF-]<v5r-U5p45O-V9]QL.^l5ynlv\_&5&*jq3YHOgăU"I?0EE,^$&p[RY(Yct1Z1$'Z^HJ?+xu7b_ZXN5)]1T<G8Wlf8JtZsnH;u5-;59S*ăU"_$,/p^t?i[Y']__:j[wY09-k1?)S_CXFaP4FtA3Ne\t*FCua:Y-B=1VrWED/-AuăU">-Yrm1hi,_[z,IX;;YYRU)-v*$qC^_ii:;DchJ>>fJf+\J1K?lG11hcW+t\E/x0ăU">gWahOmSV/Y4pQg$KgDtX&llhwYIqLy>K+Lz_3;<5'X.I#Rh+#oUJD?ZmYaa<G4ăU"QNYU,pkW'hyheFks1cfN.kqBtUHw1$fz8PeD;2P/0ZK+'d9_L68(omH9>J7m2J'ăU"]EGxiJy7[<EjB%TQn=jaF8)9PTI:+)$JAL_O'+-3a#cUXSn9IqB&dUspSw%sZgHăU"b2D8:LwoBOfMoBT:xeDQAaP']1?.^=<x*[<z]PlkYBoSY5UkO&UtQ_-&z8,%KcZăU",2^ApJ5/fCqC$w&2^jtqCRH2Z2YO_0B.-j]AA(4j'b8fH/oeP,c?JT2'WfnR>J5ăU"+i>&(1D$?<g)mJvBlA66p]a;K*=\Sfa=M699<CqI5Kvz*YAB8Rp$2B<LV0qn$TDăU"1Z_lSTSM'3S=n.Z?u./g>CjnKk3T9jNb8$7-zK#Ca_lcnQ5')KyR'q&3RtivgD1ăU"/AfD9ji2twB[aA^Gd;zKBwWA<rA$wQtz9e(XJ'?SD9c)E>-f$X(Kd:**M<eg'cHăU"]<8bwvJA1G)UtOaJF?F^v[1Awlt**]m[BjVw].2mA:DZCkrR&K&OakfGxD*p%%iăU"*+t5.m6GaIm0]?79uI7^+a/98]v:8b0A0Q%Bd]^9LtnI;1mTJO#dvIDyeUB#./IăU"m59[MgFX.+z#XvyBB9\-<Bjgi(WoE,koDGBY&3ceQb[xUe:dhAWMhjYkYE,UdT\ăU"VKA9Z%6_nryJMqEet5QYD9aF$'wCogQ?lL&Y:HBLg&KTod3i(gyKJ#$yq/_WBm9ăU"FP;kVVstJSLCpjDRiNAra%;+YNaE?LXc5UqH<T>n)_tkN5*3?D9CD5wd%F?Iq\hăU"j5R&\-&2jrhS/vXQz?94F0&$m(Mr)lb-sl+gB)wbGn:Fo-m4OCDH.:8=QF_/aj4ăU"hY.Lagt&8OkY7GOb1J$AP#*Y,y8phKZdmVPbe,CUX62euCsEv[i;:f.-OD$XvgoăU"&f33>vghc^I#YMHi'>jPe1lWZsel&gdj^=u\=MS^xpo*Kri(5:vgqSp15dl[LLcăU"+Xv_yU9dq8'MD.cO5&-$k-ENq32,ZQ3s<+l=&yUG->it&\=?d<]mVe;R=V6rO:căU"%IFer[1h?S9q,>4dW'=U*fE$Ln?R-j2.,+v,SKc/1Tro(cj7(5'Xi<om9S=9iDxăU"7g/HIn>M$7d1+9+[0;OE>&-?5YpnJN(hdP=nnNtI&zR^4fKiqAH2ln_)&F1N9O$ăU"jI80\E^dc%k9&==L\F1F>*I9_>fU4iUyXSF^969]^QUbX6$x2VlzG%&Q,M\/DUDăU"ZCCPP$Cr+V$FDb7^ZfHaE)*e%MYokLS+8)4_ZL)H4Ijad8$Xm3(mlY=<n==_<LAăU"4]dLnhk&bN.y&mD59]]lAeFrSMM4gL\Vt'#E/;/Y/6Md.S\Skzjn?W:_=O6oNHsăU"^<_RR1'A03+b%+&)rC$gaJ3)h:>CUbFyMsC^FqM&WTx7nDch$wJdg(&M*YsI+XeăU"':2\JP1pc=SPNj]D$^wXgY%wG,*bmcju\=[Ubopt0g[>]DW;l>Bt36'xo-E7(paăU"]05g6MtTdLeS\k*D[<C8G&Ti]QpR;7&5#5)S9%BnE7b>G91TcEkp.$*u&lS):isăU"e-T9j?LWWQJ/c8hf/?&7'V.qL2FGMMk/_oXRo?p(6Lv?6I0:w\.q'WC)tGbPcXDăU".Fu.og[aZ#SG/qftpnmnNr;Gk4T686TMnSIcPYHCQ/CKE&CZ65YiQhV.;EHlf':ăU"d+QkO82kwpVS3PE7qXGNLAItKhNJFsr#Z5<Ox<y,e5ufBVfu0yC/RTd%<_R8V_DăU"HYA1W6X^J,.54'8&YSr6I&m8.n(%sL%x+]P6o\a:kcTCm4;EdU'hns/jU,/;U,-ăU"uU$&4-';)VY*;NkCK>v^n.3'uPjYVnd,swe$+4tZGx#A.*yPynmp>2.+x03'[l*ăU"2-8mOwOdxApX#p.C,CKb]h.nwD0.VAQ#X]Gzk:#%1<7Y2sT^)6A'rIWLZ)qvZ96ăU"heYeXy_,ftbfOFIog'saC*((&_h:rrC]0j$P_CE('Rt]F7r]j^<sbErM79BW%58ăU"Mp,^T&ZxUK(5_>,ThD_HOgo)%G:bGdhY*03LB60bT+U3O9ulgzFPC6%<R>&WZT^ăU"a=W[S3**Nl:AP7583To?VDSu&Z,/&fWg(l(DY\'U>).3MG/BotXrGJ]9/&;1xt4ăU"ZwqX48-29h:1cIm.*-Ih;S9nbwW5NJO$*Cg0wQ;/cjpp;dIoI>Jhl-TUW#I&r5găU"Gu4L'*R<O]UE1z^2(c&n0n\*_DHqOSt9Ok15Y5ni$IG(5[lG><5m.Mf-6I&>R.eăU">F30t=%K[:1l$a&\ctCg-N9haHhE*At',M_MeRMcOM(IRa>j0'j[ZoSz,J=K'w%ăEND SUBăSUB V3ăU"^_,MZ'gB0ps[>OHRnOM(Zl,DjBltTQh8xALd$AS;slC1ht:FVb=xNEI/9LZ7[9TăU"SaL#y98XMJ3aKIEH_oB,ZeBb3*o]pX^:mnYM,&T5fORHxZ51.y?xOYREpC$<^e-ăU"8J\5)p1*PM'Y.-Wx>D(?'9C%S3^K32#e=;#wvbg7ja>:CKBw*>'R3(WQJ'Bk'_qăU"EpXh=mBg7Emi9x%,MkfeI2sA=?Xx.(wM36fn2yhK&C<<_ygASjt=knY3r._-IabăU"O\sqT+=i\ro9R:v,Hgs:keaV>pM\N6H\.R4h4=_\82(SNDU\Lmc.c1D9/,J\o$=ăU"[,5z)p87]1_Z]g^sL;(YqFKL$D7:A+>?.>-Db#%ImO7Bk(GQ:IRW)CML'X)p:>0ăU"-q,jtG1'KFP&jH./FXvN=)\50+b7p;hdd3d;4W'NLL(zn%3tr/dTgB98?mp[Pa1ăU"8BCdaaoIAFsr[QJ91H$'2qQk$XstJDjY9yMB2p9MyU1kUaBDu45[Ql&qL=X5t;dăU".9Z5$.j^M)$o2[YmZ<)OIEgo&7u(\Z7]dFy/+Gt*mc46g&%v4-kK?u'SWVJYW4făU",&&K:'md^.M=qL5#l/9a,<8nrEl0T:-xDm0>uO&7s8MH84>l&]+du_x/M^ST,1băU":*f8:-M+j#1E/bR5hr6.\m,[tUYZ.)_)c6b$*D*OMBDISejRO)g,7P%R;N9;O(GăU"h1KhTYl$+LW$Ta22a<19eTr(JeiP>(xfuka$PRQ:LY4a\061=iW15bjg18x^c#săU"o^AXuPNF>-i<DT-2(Z1C3E9&WlQ+BhWuA?](>5s9Sk?:FZFYY):FvOdDU^J(1<#ăU"?k=,Qd9>;b,[?I;F[I2p^aHo-4X/#I1f_-s3b9%?%J*W,3W>2Y'=kJ0(:CfdjYIăU"wA,C*BWZ%Wbchf\D=9kT)8s5T>:D(gg>,tdnv,$1SA0W3xogmk,^_7mHof\k'\văU"4r97LHf^P5iG>=0YX;lcI<L8O)e;,q8RU%=?Nie+4'5D^,1nP^=yt+iN$'>(]pYăU")C]X*VwqLjKV)([B;M4%YMpnC5cUjiIp&LDwYP'/.zcZ>_Mr],%3VqLe(K+kBR<ăU"hIqSk=OGJTgs<=$)s3D?pW#z-Sq9h'):#/Hv?'9r6ok7QHYDQ(r'cbo?GA>pE>XăU"pEJ6p&-XeyBJa'Ts0w5L\(qJYO-j&%bB;LME+H<6e>/ZUFD1xkN>'HP%AU1y+K.ăU"qDR/P>xe#VT\JPy&IX\w)OM&Vwc&[#TNNoNd4u1idFPYT1)E8lBrC:G.8qT]E\răU"l<1cq:j;-pAlMcz/1i0b%8NTlBQPD=A;RRVj0V2h<b)SNayuGe\%X6j,B=h$i*$ăU"V2Fw&i^tkgKQ0SW_./A_<D'nfr:j\-rS1#JDAAPD-SjM0rM+l8#G*XE<eT,]/#HăU"Eg?1'?yjf4'W_O2&7S2n1Sp>QA\IXujqp*Qmp8#(RPdlW:M,[6w_EY?52Ww5(R]ăU"xeqKkNq=E(upgz&A%)y0b<,7+5g8wQt8l<mKTLoLC3D(+\O6[*DVd6aYBS&TyMuăU"q8wmZag%'S&1/K,=IBk0P(Yk442Xl9Yke%8>be$K]x[CSw\W=?6r^[an7KP:0FRăU"p4R4:6nr/h5e&lPc1ORYSGDCj,8AHT4I=4FNk)<][*MCcQsOR8t6Bc39*2V[Kt0ăU"n[-+Zv%J.q5SI*J=-2H\ZAm'=$D7w9Ye=z4AjV0tQO+p0i7AKvOJkAb7\[WCN_]ăU"Xbob+WOwvSYK';$9VraN\42]bhi.%>%,-Hhfy.0Uu*p.uNB[N<>w2/acWkf>=,MăU"^\7\v5brshHjUgFQkN-e?^#Yy00$D)CKV,,WONZ.p$ev3XD?ek\aM7;+jwvL9rGăU"Gk)TDQaM,SXV6sp&HXsI0J\(h8#d?,T-8$l751UgBp[Y/vWU=hjd[4x\m1T=FGwăU"P&M2RiTIxJs&[c'XHH40Nm;sNH9;fNSSp1+hy:)lTJ-lc2(vf2fG\-OWV<'t.4OăU"<0U#m;Y2-(OF0Q=U)o:.&/le-TkVrie.=?(W2gSof\*mAU?]&<qv*)-3uYP]p>TăU"gBgEF+.HT0*4c4#l4)GO]Xl8WaJqK.;S)?nw-Rg>Ifi3moy71Z$%v-TM$eldPLrăU"]8'jhSHN]_Wj+ITnMIV,9%([e]3GJEN\J9l[\A]ZYudxo'>E0\DN+SCPb?(mRR>ăU"yF^AHfB(,g$kx#N/%J9jFA.%PE/)&+u6u=]GCuG,cDP>#N6uXc)Fmj?8aDZctKwăU"mrk*N?2Y_?%T65vKJgDDV<cBvMRqA_S=lKJLakq8Qa7vl?:VZmn3N-$:TBbB:<TăU"A'XOX+tTPjqU.4Z<#)$B%nAy4V#m=b%M?fe(oj.sJw/X78rEV,D)H:&S%45''XoăU"'alrq[)p&m>#h\t%D6xn](tFOFeJNNcVN1bv,&jT5m:lei_PMWeKf$d#?d$P;=FăU"?m;4j5IqZ,W%.TX#0TeIw>e'M([j=Jginz<hIb8%xYjrZ<T2N[[;\7klkDcn'(băU",frjYbUpn&?uWR(87?0(:Tt_t\jAUl_F'S8*G'qRGWO8;9K>+-j][VI-QAcgX\WăU"n5Nbje6EA^8p2-D>;<d>Rc,$,R4ox>qG4bx2v*Kh'<fxcN)-Gtq?K^vtkO-M_'WăU"4bqqb9U,#mgPk'b6NPQ/rT:yD\O_1G9:'p?$/6h4w-Htm/t5Mq3D>mBQh:Eo'R<ăU"U:5+cYW&9:<I?poKNnTda&6ns;9Pl<N'<+NG>v/52:G<o7,:qqCLlnni2ggt=ggăU"R-bn*$Qtk*WWe*7#R0NnV.%;A[0N_\gVEI.fnjMxW+HU=?OF5/W,QcBc??HmV1PăU"Bf))A)_8T]g2%KhMHYrnS^M0)F:Y#la\*1-/LkF>]7*F,b:/m'8Z2[a[uL^qi>DăU"i1ie9g>Q-J>6JdeWiUm91xE7Hop#b*6ZWknBDX.7,9.D\H.h;xn%zU;lTIM&d-/ăU"8lLKdO=5O*goHP-4zROlh#$T(3aObspBZh\g=Kku0e-(aX#=ERn>[w^O-d7y*:oăU"A/:c6B+(y(otAtUGrAY,TugK?P3XUo[a=0%oF#mCTmeds_m_EZV</[qtti9OWMtăU"M^c2.Hd^:'43q;wKUAY\HDYq=)3e,b1H6FmJqSd)P2W-B;79O[QJJ\^qegy:eEJăU"hcV3dU3p,y6m-&+6k%YMg*k]w,=Y/mh-91T^mA_hV,7ovQi[W9Ux^CjNl)0QlGeăU"L_mQ+CwK4eqyL9E2JzTZZ)w>7GK+2Tj)</xl7kU$Md*IV<Nfx(%up&'%9%9%%%%ăU"-%&4qhG=79Du&Hb%%&=Q&%%.%%%%%%%%%&%E%%%%%%%%%ji.wf&S%gfxu%p&'9%ăU"%9%%[%-%'[phG2t/n+r%?%%v&3%%.%%%%%%%%%&%%E%%(%ob%%%jiw(f&Sm%quuăU"p%*+%%%%%'%.'%=%R%%9'%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=3AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDave Navarro, Jr.              VGA BOUNCING LINES DEMO        dave@powerbasic.com            02-06-97 (14:05)       PB                     96   1739     VGALINES.BAS' VGA bouncing lines demo for PowerBASICă' by Dave Navarro, Jr.ăăRANDOMIZE TIMERăăDEFINT A-ZăăSCREEN 12ăăz = 40ăăDIM x1(1:z), x2(1:z), y1(1:z), y2(1:z)ăDIM a1(1:z), a2(1:z), b1(1:z), b2(1:z)ăăx1 = (RND * 640) : x2 = (RND * 640)ăy1 = (RND * 480) : y2 = (RND * 480)ăa1 = (RND * 640) : a2 = (RND * 640)ăb1 = (RND * 480) : b2 = (RND * 480)ăăc1  = 9 : c2  = 14ăăxd1 = 9 : xd2 = 7ăyd1 = 6 : yd2 = 10ăad1 = -11 : ad2 = 7ăbd1 = 4 : bd2 = -13ăăDOăă  ARRAY DELETE x1(1) : ARRAY DELETE x2(1)ă  ARRAY DELETE y1(1) : ARRAY DELETE y2(1)ă  ARRAY DELETE a1(1) : ARRAY DELETE a2(1)ă  ARRAY DELETE b1(1) : ARRAY DELETE b2(1)ăă  LINE (x1, y1) - (x2, y2), c1ă  LINE (x1(1), y1(1)) - (x2(1), y2(1)), 0ă  LINE (a1, b1) - (a2, b2), c2ă  LINE (a1(1), b1(1)) - (a2(1), b2(1)), 0ăă  x1(z) = x1 : x2(z) = x2ă  y1(z) = y1 : y2(z) = y2ă  a1(z) = a1 : a2(z) = a2ă  b1(z) = b1 : b2(z) = b2ăă  INCR x1, xd1 : INCR x2, xd2ă  INCR y1, yd1 : INCR y2, yd2ăă  INCR a1, ad1 : INCR a2, ad2ă  INCR b1, bd1 : INCR b2, bd2ăă  IF (x1 < 1) OR (x1 > 638) THENă    xd1 = 0 - xd1ă  END IFăă  IF (x2 < 1) OR (x2 > 638) THENă    xd2 = 0 - xd2ă  END IFăă  IF (a1 < 1) OR (a1 > 638) THENă    ad1 = 0 - ad1ă  END IFăă  IF (a2 < 1) OR (a2 > 638) THENă    ad2 = 0 - ad2ă  END IFăă  IF (y1 < 1) OR (y1 > 478) THENă    yd1 = 0 - yd1ă  END IFăă  IF (y2 < 1) OR (y2 > 478) THENă    yd2 = 0 - yd2ă  END IFăă  IF (b1 < 1) OR (b1 > 478) THENă    bd1 = 0 - bd1ă  END IFăă  IF (b2 < 1) OR (b2 > 478) THENă    bd2 = 0 - bd2ă  END IFăă  INCR xăă  IF x = 1000 THENă    INCR c1ă    INCR c2ă    IF c1 = 16 THEN c1 = 9ă    IF c2 = 16 THEN c2 = 9ă    x = 0ă  END IFăă  DELAY .08ăăLOOP UNTIL LEN(INKEY$)ăăSCREEN 0ăDavid Gentry                   FLICKER FREE SPRITES           comp.lang.basic.misc           02-05-97 (20:20)       QB, QBasic, PDS        351  13273    SHIPDEMO.BAS'> I've been programming for a little over 3 years in Qbasic. I know theă'> standard BASIC graphics statements, but I'm trying to get into moreă'> advanced techniques. The main things are sprites, flicker free tiles onă'> modes greater than 9(page flipping), ect. If someone can direct me toă'> any good books, sites, or tutorials I would be in your debt.ă ă'If it is SPRITES you want, it is SPRITES you get.  I have found theă'following code that demonstrates FAST, FLICKER FREE SPRITES.ăă'The following program is the sole creation of David Graceă'PRODIGY (CDRS62D). David Grace, like so many other good  ă'programmers, has left PRODIGY. So if you wish to comment oră'leave a reply about this DEMO, please address it to Davidă'Gentry using the above I.D. number!                      ăDECLARE SUB PUT2P (X%, Y%, AR%())ăDECLARE SUB FONT (a$, X%, Y%, stepX%, stepY%, CO%, Background%, SHADOW%)ă'  This short demo for an action-shoot'em-up game was     ă'  posted because of several questions about animation.   ă'  In this code you will find examples of page-flipping   ă'  animation, including a new sprite-clipping routine thată'  allows you to place a GETted sprite past the boundariesă'  of the screen.  Also, scrolling stars, explosions,     ă'  sprite movement/limitation on movement is shown.  Usingă'  ideas here, one could possibly build an entire game fromă'  this concept.  (BTW: Format of title screen was gotten ă'  from a Genesis game.)  Title: SHIPDEMO.BAS (1-6)       ăCLEAR , , 2000: DEFINT A-Z: SCREEN 7: CLSă  DEF FNR (X) = INT(RND * X) + 1ă  DIM E1(150), E2(50), E3(15), S1(500) ' dim arrays       ă  DIM S2(500), F1(70), F2(40), R1(200)ă  DIM CX(50), CY(50), CT(50)ă  DIM TEMP(500)ă  DIM SX(50), SY(50), ST(50)ă                                                            ă                                                            ă  SCREEN , , 0, 1  ' set paging mode                      ă  CIRCLE (50, 50), 10, 7ă  PAINT (50, 50), 7ă  LINE (40, 50)-(60, 51), 12, Bă  LINE (40, 50)-(60, 51), 9, B, &H5555ă  LINE (53, 43)-(54, 44), 15, Bă  PSET (57, 45), 15ă  LINE (45, 55)-(55, 55), 12ă  LINE (46, 56)-(54, 56), 4ă  PSET (45, 45), 1: PSET (44, 46), 1ă  PSET (46, 45), 11: PSET (45, 46), 11ă  LINE (43, 45)-(42, 46), 1ă  GET (40, 40)-(60, 60), E1  'draw & get enemy1           ă  CLSă  CIRCLE (50, 50), 5, 7: PAINT (50, 50), 7ă  LINE (45, 50)-(55, 50), 9ă  LINE (45, 50)-(55, 50), 12, , &H5555ă  LINE (48, 53)-(52, 53), 4ă  PSET (52, 47), 15: PSET (48, 47), 1ă  GET (45, 45)-(55, 55), E2  'draw & get enemy2           ă  CLSă  CIRCLE (50, 50), 2, 7ă  PAINT (50, 50), 7ă  LINE (48, 50)-(52, 50), 4ă  LINE (48, 50)-(52, 50), 1, , &H5555ă  PSET (51, 48), 15ă  GET (48, 48)-(52, 52), E3  'draw & get enemy3           ă  CLSă  LINE (50, 50)-(100, 50), 7ă  LINE (60, 45)-(100, 50), 7ă  LINE (60, 45)-(50, 45), 7ăă  LINE -(50, 50), 7ă  PAINT (51, 49), 15, 7ă  LINE (50, 54)-(100, 54), 7ă  LINE (100, 54)-(60, 59), 7ă  LINE (60, 59)-(50, 59), 7ă  LINE -(50, 54), 7: PAINT (51, 55), 15, 7ă  LINE (50, 51)-(95, 53), 3, BFă  LINE (82, 51)-(80, 53), 1, BF: PSET (80, 51), 9ă  LINE (76, 50)-(79, 54), 1, BF: PSET (79, 50), 9ă  LINE (72, 49)-(75, 55), 1, BF: PSET (78, 50), 9ă  LINE (71, 49)-(71, 55), 11: PSET (76, 49), 9ă  LINE (60, 49)-(70, 55), 5, BFă  LINE (60, 50)-(70, 54), 13, BFă  LINE (59, 49)-(59, 55), 11ă  FOR I = 50 TO 58 STEP 2ă    LINE (I, 51)-(I, 53), 8ă  NEXTă  LINE (90, 44)-(70, 40), 8ă  LINE (70, 40)-(50, 40), 8ă  LINE -(50, 37), 8ă  LINE -(76, 37), 8ă  LINE -(90, 44), 8ă  PAINT (51, 38), 7, 8ă  LINE (55, 41)-(56, 44), 11, Bă  LINE (75, 42)-(71, 46), 11ă                                                            ă  LINE (90, 60)-(70, 64), 8ă  LINE (70, 64)-(50, 64), 8ă  LINE -(50, 67), 8ă  LINE -(76, 67), 8ă  LINE -(90, 60), 8ă  PAINT (51, 65), 7, 8ă  LINE (55, 63)-(56, 60), 11, Bă  LINE (75, 62)-(71, 58), 11ă                                                            ă  LINE (49, 46)-(49, 58), 8ă  LINE (48, 47)-(48, 57), 8ă  LINE (47, 46)-(47, 58), 7ă  LINE (47, 46)-(47, 58), 8, , &H5555ă  GET (47, 37)-(100, 67), S1  'draw & get ship1           ă                                                            ă                                                            ă  CLSă  CIRCLE (50, 50), 7, 4: PAINT (50, 50), 4ă  CIRCLE (50, 50), 5, 12: PAINT (50, 50), 12ă  CIRCLE (50, 50), 3, 14: PAINT (50, 50), 14ă  LINE (51, 43)-(58, 57), 0, BFă  GET (43, 43)-(50, 57), F1  'draw & get flame1           ă                                                            ă                                                            ă  CLSă  CIRCLE (50, 50), 4, 12: PAINT (50, 50), 12ă  CIRCLE (50, 50), 2, 14: PAINT (50, 50), 14ă  LINE (51, 46)-(54, 54), 0, BFă  GET (46, 46)-(50, 54), F2  'draw & get flame2           ă                                                            ă                                                            ă  CLSă  PUT (50, 50), S1ă  GET (50, 50)-(100, 56), TEMPă  PUT (50, 51), TEMP, PSETă  LINE (50, 50)-(90, 50), 0ă  GET (50, 61)-(105, 90), TEMPă  PUT (50, 59), TEMP, PSETă  LINE (53, 79)-(79, 79), 8ă  LINE -(93, 71), 8ă  GET (50, 51)-(103, 79), S2  'alter & get ship2          ă                                                            ă                                                            ă  CLSă  LINE (50, 50)-(50, 100), 7ă  LINE (48, 51)-(49, 99), 7, Bă  LINE (46, 54)-(47, 96), 7, Bă  LINE (45, 56)-(45, 94), 7ă  LINE (50, 70)-(49, 80), 8, Bă  PSET (50, 69), 15: PSET (50, 81), 15ă  LINE (48, 57)-(49, 64), 3, Bă  LINE (48, 86)-(49, 93), 3, Bă  LINE (44, 60)-(44, 68), 8ă  LINE (44, 83)-(44, 91), 8ă  GET (44, 50)-(50, 100), R1  'draw & get rship           ă  CLS : PCOPY 0, 2  'prepare our "background" page        ă  FOR I = 1 TO 50  'sprinkle some stars                   ă    SX(I) = FNR(319): SY(I) = FNR(199)ă    ST(I) = FNR(2)ă  NEXTă                                                            ă                                                            ă  ED = 0: ET = 0: TOG = 0ă  DOă    PCOPY 2, 0  'copy background to template              ă    FOR I = 1 TO 50  'move & display stars                ă      IF ST(I) = 1 THEN C = 1 ELSE C = 9ă      PSET (SX(I), SY(I)), Că      SX(I) = SX(I) - ST(I) * 5ă      IF SX(I) < 0 THENă        SX(I) = 319: SY(I) = FNR(199)ă        ST(I) = FNR(2)ă      END IFă      IF ET > 550 THEN SY(I) = SY(I) - (550 - ET)ă    NEXTă    IF ED = 1 AND EXD = 0 THEN  'short burst              ă      PUT2P EX - 8, EY + 3, F1()ă      PUT2P EX - 28, EY - 17, F1()ă      PUT2P EX - 48, EY - 37, F1()ă    END IFă    SELECT CASE ED  'display enemies                      ă      CASE IS = 1:                                        ă        PUT2P EX, EY, E1()ă        PUT2P EX - 20, EY - 20, E1()ă        PUT2P EX - 40, EY - 40, E1()ă      CASE IS = 2:                                        ă        PUT2P EX + 5, EY + 5, E2()ă        PUT2P EX - 15, EY - 15, E2()ă        PUT2P EX - 35, EY - 35, E2()ă      CASE IS = 3:                                        ă        PUT2P EX + 7, EY + 7, E3()ă        PUT2P EX - 13, EY - 13, E3()ă                                                            ăă        PUT2P EX - 33, EY - 33, E3()ă    END SELECTă    IF Y <> 0 THEN  'display ship                         ă      IF YD <> 0 THENă        PUT2P X, Y + 2, S2()ă      ELSEă        PUT2P X, Y, S1()ă      END IFă      IF TOG = 0 THEN  'fire flame                        ă        TOG = 1: PUT2P X - 8, Y + 8, F1()ă      ELSEă        TOG = 0: PUT2P X - 5, Y + 11, F2()ă      END IFă    END IFă    IF EXR <> 0 THEN  'put rship                          ă      PUT2P EXR, 70, R1()ă      IF TOG = 0 THEN  'give it some flames               ă        PUT2P EXR - 8, 77, F1()ă        PUT2P EXR - 8, 99, F1()ă      ELSEă        PUT2P EXR - 5, 80, F2()ă        PUT2P EXR - 5, 102, F2()ă      END IFă    END IFă    IF YD = 0 AND XD = 0 AND ET > 121 AND X <= 63 THENă      IF TOG = 0 THEN  'lasergun shots                    ă        LINE (X + 35, Y + 9)-(319, Y + 9), 9, , &HFF00ă        LINE (X + 35, Y + 9)-(319, Y + 9), 3, , &HCC00ă        LINE (X + 35, Y + 21)-(319, Y + 21), 9, , &HFF00ă        LINE (X + 35, Y + 21)-(319, Y + 21), 3, , &HCC00ă      ELSEă        LINE (X + 35, Y + 9)-(319, Y + 9), 1, , &HFFă        LINE (X + 35, Y + 9)-(319, Y + 9), 11, , &HCCă        LINE (X + 35, Y + 21)-(319, Y + 21), 1, , &HFFă        LINE (X + 35, Y + 21)-(319, Y + 21), 11, , &HCCă      END IFă      FOR I = 1 TO 5  '"puff" of damage                   ă        PSET (317 - FNR(10), FNR(18) + Y + 5), 15ă      NEXTă    END IFă    IF EX = 1 THEN  'random explosions                    ă      C = FNR(2)ă      IF C = 1 THEN C = 4 ELSE C = 12ă      a = FNR(30) + 299: B = FNR(50) + 75ă      CIRCLE (a, B), FNR(20) + 10, Că      PAINT (a - 9, B), Că      IF X > 62 THENă        EXR = EXR + 1: IF EXR > 330 THEN EXR = 330ă      END IFă    END IFă    IF EX = 2 THEN  'debris falling behind                ă      FOR I = 1 TO 20ă        IF CX(I) > 0 THENă          PSET (CX(I), CY(I)), 15ă          CX(I) = CX(I) - CT(I)ă          IF CX(I) < 0 THEN CX(I) = 0ă        END IFă      NEXTă    END IFă    IF X = 80 THEN  'large flame burst                    ă      CIRCLE (X - 5, Y + 20), 100, 15ă      PAINT (X - 5, Y + 20), 15ă      XD = 30: X = X + 1ă    END IFă    IF ET < 20 THEN  'text                                ă      FONT "Coming soon...", 100, 95, 8, 0, 15, 0, 8ă    END IFă    IF ET > 390 AND ET < 450 THEN  'text2                 ă      FONT "...to a computer near you...", 50, 95, 8, 0, 11, 0, 0ă    END IFă    IF ET > 450 AND ET < 550 THEN  'text3                 ă      a$ = "* S T A R S H I P   L E G E N D  I I *"ă      FONT a$, 10, 85, 8, 0, 14, 0, 0ă      FONT "(don't miss it!)", 100, 100, 8, 0, 6, 0, 0ă    END IFă    PCOPY 0, 1  'copy template to viewing screen          ă    ET = ET + 1  'cycle timer (add delays if too fast)    ă    IF ET = 30 THEN 'activate enemies                  ă      EX = 350: EY = 200: ED = 1: EXD = -23: EYD = -8ă    END IFă    IF ED > 0 THEN  'enemy move parser                    ă      EX = EX + EXD: EY = EY + EYDă      EXD = EXD + 1: IF EXD > 20 THEN EXD = 20ă      IF (EX MOD 2) = 0 THENă                                                            ă        EYD = EYD + 1: IF EYD > 2 THEN EYD = 2ă      END IFă      IF EXD > 1 AND (ET MOD 3) = 0 THENă        ED = ED + 1: IF ED > 3 THEN ED = 3ă      END IFă      IF EX > 350 THEN ED = 0ă    END IFă    IF ET = 120 THEN  'activate ship                      ă      X = 0: Y = 200: XD = 10: YD = -15: EX = 0: EXR = 340ă    END IFă    IF ET > 121 THEN  'ship move parser                   ă      IF EX = 0 THENă        EXR = EXR - 1: IF EXR < 314 THEN EXR = 314ă      END IFă      X = X + XD: Y = Y + YDă      XD = XD - 1: IF XD < 0 THEN XD = 0ă      YD = YD + 1: IF YD > 0 THEN YD = 0ă      IF XD = 0 AND (ET MOD 7) = 0 THEN X = X + 1ă    END IFă    IF X > 65 AND EX = 1 THEN  'explosion parser          ă      EXR = 0ă      PALETTE 0, 15ă      EX = 2ă      FOR I = 1 TO 20ă        CX(I) = 319 + FNR(50): CY(I) = FNR(50) + 70ă        CT(I) = FNR(20) + 10ă      NEXTă      PALETTE 0, 0ă    END IFă    IF X > 60 AND EX = 0 THEN EX = 1  'switch expls       ă                                                            ăă  LOOP UNTIL INKEY$ <> "" OR ET > 570  'repeat            ă  CLS : PCOPY 0, 1  'clear active page                    ă  ENDă                                                            ăextX% = stepX%: extY% = stepY%ăDEF SEG = &HFFA6ă FOR I% = 1 TO LEN(a$)ă   addr% = 8 * ASC(MID$(a$, I%)) + 14ăIF Background% THENăIF Background% = 256 THEN BG% = FALSE ELSE BG% = Background%ă                                                            ăIF I% = LEN(a$) THEN extX% = FALSE: extY% = FALSEăLINE (X%, Y%)-(X% + 7 + extX%, Y% + 7 + extY%), BG%, BFăEND IFăFOR j% = 0 TO 7ămask% = PEEK(addr% + j%) * 128ăIF SHADOW% > 0 THENăLINE (X% + 9, Y% + j% + 2)-(X% + 2, Y% + j% + 2), SHADOW%, , mask%ăEND IFăLINE (X% + 7, Y% + j%)-(X%, Y% + j%), CO%, , mask%ăNEXTăX% = X% + extX%ăY% = Y% + extY%ăNEXTăDEF SEGăăSUB FONT (a$, X%, Y%, stepX%, stepY%, CO%, Background%, SHADOW%)ăăEND SUBăă' PUT2P - PUT Type II:                                    ă' Clipping PUT routine.                                   ă'                                                         ăSUB PUT2P (X, Y, AR()) STATICă  IF X < 0 OR Y < 0 THEN EXIT SUB  'off screen            ă  IF X + AR(0) < 320 AND Y + AR(1) < 200 THENă    PUT (X, Y), AR, PSET: EXIT SUBă  END IF  'already on screen                              ă  IF X > (320 - AR(0)) THEN VL = 320 - X ELSE VL = AR(0)ă  IF VL < 1 THEN EXIT SUB  'no need                       ă  IF Y > (200 - AR(1)) THEN VL2 = 200 - Y ELSE VL2 = AR(1)ă  IF VL2 < 1 THEN EXIT SUB  'no need                      ă  SAR = AR(0): SAR1 = AR(1)  'hold copy                   ă  AR(0) = VL: AR(1) = VL2ă  PUT (X, Y), AR, PSET  'put modified array               ă  AR(0) = SAR: AR(1) = SAR1  'restore altered bytes       ăEND SUBăAngelo Ken Pesce               ROTATING SPHERE OF FIRE        ken@uniserv.uniplan.it         02-10-97 (19:02)       QB, QBasic, PDS        249  6698     FIREBALL.BASDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăDECLARE SUB SetPal (start.slot%, end.slot%)ăDECLARE SUB flam ()ă'{A little rotating sphere, by Glen Jeh, 8/12/1994, use freely}ă'{Try messing with the constants...code is squished a little}ă' Converted to BASIC by William Yu (05-28-96)ă' Revision + Static FastFireEffect v2 added by Angelo Pesce (1997)ă'ă' 192 colors version (palette routines by Andrew L. Ayers)ă'ă' COMPILE WITH ALTERNATE MATH FOR BEST PERFORMANCEăăDEFINT A-ZăDECLARE SUB DrawPoints ()ăDECLARE SUB SetupBall ()ăDECLARE SUB Rotate ()ăăPRINT "FireSphere"ăPRINT ".........."ăPRINTăPRINT "press enter for defaults"ăPRINTăă' x and y are multiplied by scale and divided by distanceă0 DIM SHARED Scale AS INTEGERăINPUT "Scale:"; temp1$ăIF temp1$ = "" THEN Scale = 50: GOTO 1ăScale = VAL(temp1$)ăă' mystery constant :-)ă1 DIM SHARED Radius AS INTEGERăINPUT "Radius:"; temp2$ăIF temp2$ = "" THEN Radius = 80: GOTO 2ăRadius = VAL(temp2$)ăă' number of slicesă2 DIM SHARED Slices AS INTEGERăINPUT "Slices:"; temp3$ăIF temp3$ = "" THEN Slices = 24: GOTO 3ăSlices = VAL(temp3$)ăă' points per sliceă3 DIM SHARED PPS AS INTEGERăINPUT "Points Per Slice:"; temp4$ăIF temp4$ = "" THEN PPS = 40: GOTO 4ăPPS = VAL(temp4$)ăă4 CONST Pi = 3.1415ăăTYPE PointTypeă  x AS INTEGERă  y AS INTEGERă  z AS INTEGERăEND TYPEăăDIM SHARED points(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED Ball(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED XAngle, YAngle, ZAngleăDIM SHARED SinTable(0 TO 255)  AS INTEGERăDIM SHARED CosTable(0 TO 255)  AS INTEGERăDIM SHARED Distance, Dirăă  FOR i = 0 TO 255ă      SinTable(i) = INT(SIN(2 * Pi / 255 * i) * 128)ă      CosTable(i) = INT(COS(2 * Pi / 255 * i) * 128)ă  NEXT iă  SCREEN 13ăă  Distance = 100: Dir = -3ă  SetupBallă  XAngle = 0ă  YAngle = 0ă  ZAngle = 0ăă' FORM BLACK TO REDăCALL WriteRGB(0, 0, 0, 1)ăCALL WriteRGB(63, 0, 0, 63)ăCALL SetPal(1, 63)ăă' FROM RED TO YELLOWăCALL WriteRGB(63, 0, 0, 64)ăCALL WriteRGB(63, 63, 0, 127)ăCALL SetPal(64, 127)ăă' FROM YELLOW TO WHITEăCALL WriteRGB(63, 63, 0, 128)ăCALL WriteRGB(63, 63, 63, 191)ăCALL SetPal(128, 191)ă'ăPALETTE 192, 63ăă DOă    Rotateă    DrawPointsă    flamă    XAngle = XAngle + 3ă    YAngle = YAngle + 2ă    ZAngle = ZAngle + 1ă    Distance = Distance + Diră    IF XAngle > 250 THEN XAngle = 0ă    IF YAngle > 250 THEN YAngle = 0ă    IF ZAngle > 250 THEN ZAngle = 0ă    IF Distance >= 300 THEN Dir = -3ă    IF Distance <= 30 THEN Dir = 2ă    LOOP UNTIL INKEY$ <> ""ăCLSăSCREEN 0ăWIDTH 80ăPRINT "Angelo KEN Pesce 1997"ăENDăă'{mystery procedure}ăSUB DrawPointsă  FOR i = 1 TO Slicesă    FOR i2 = 1 TO PPSă      IF (points(i, i2).z >= 0) AND (points(i, i2).x <= 319) AND (points(i, i2).x >= 0) AND (points(i, i2).y >= 0) AND (points(i, i2).y < 199) THENă        PSET (points(i, i2).x, points(i, i2).y), 192ă      END IFă    NEXT i2ă  NEXT iăăEND SUBăăSUB flamăDEF SEG = &HA000ăFOR yp = 0 TO 100ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ă' ************** BLACK JUMP ROUTINE **************************ăIF col = 0 THEN GOTO fastout: ' BLACK JUMPă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp + 1))ăcol = FIX(col / 5 - 1)ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout:ăNEXTăNEXTăsg = &HA000 + &H7D0ăDEF SEG = sgăFOR yp = 1 TO 99ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ă' ************** BLACK JUMP ROUTINE **************************ăIF col = 0 THEN GOTO fastout1: ' BLACK JUMPă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp + 1))ăcol = FIX(col / 5 - 1)ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout1:ăNEXTăNEXTăDEF SEGăEND SUBăăDEFSNG A-ZăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăDEFINT A-ZăSUB Rotateă'UPDATES all (X,Y,Z) coordinates according to XAngle,YAngle,ZAngleă ă  FOR i = 1 TO Slicesă    FOR i2 = 1 TO PPSă                     '{rotate on X-axis}ă      TempY = (Ball(i, i2).y * CosTable(XAngle) - Ball(i, i2).z * SinTable(XAngle)) / 128ă      TempZ = (Ball(i, i2).y * SinTable(XAngle) + Ball(i, i2).z * CosTable(XAngle)) / 128ă                    ' {rotate on y-anis}ă      TempX = (Ball(i, i2).x * CosTable(YAngle) - TempZ * SinTable(YAngle)) / 128ă      TempZ = (Ball(i, i2).x * SinTable(YAngle) + TempZ * CosTable(YAngle)) / 128ă                     '{rotate on z-axis}ă      OldTempX = TempXă      TempX = (TempX * CosTable(ZAngle) - TempY * SinTable(ZAngle)) / 128ă      TempY = (OldTempX * SinTable(ZAngle) + TempY * CosTable(ZAngle)) / 128ă      points(i, i2).x = (TempX * Scale) / Distance + 320 / 2ă      points(i, i2).y = (TempY * Scale) / Distance + 200 / 2ă      points(i, i2).z = TempZă    NEXT i2ă  NEXT iăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  R = sr%: g = sg%: b = sb%ă  wr% = R: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL WriteRGB(wr%, wg%, wb%, t%)ă    'ă    R = R + stepr: wr% = Ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăă'{sets up the ball's data..}ăSUB SetupBall ' {set up the points}ă  FOR SliceLoop = 1 TO Slicesă      Phi! = Pi / Slices * SliceLoop        ' 0 <= Phi <= Piă      FOR PPSLoop = 1 TO PPSă          Theta! = 2 * Pi / PPS * PPSLoop   ' 0 <= Theta <= 2*Piă              '{convert Radius,Thetha,Phi to (x,y,z) coordinates}ă          Ball(SliceLoop, PPSLoop).y = INT(Radius * SIN(Phi!) * COS(Theta!))ă          Ball(SliceLoop, PPSLoop).x = INT(Radius * SIN(Phi!) * SIN(Theta!))ă          Ball(SliceLoop, PPSLoop).z = INT(Radius * COS(Phi!))ă      NEXT PPSLoopă NEXT SliceLoopăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăNick Kochakian                 COOL SHADED TEXT               NickK@worldnet.att.net         02-11-97 (18:28)       QB, QBasic, PDS        299  6410     SHADETXT.BASDECLARE SUB shadetxt (x1!, y1!, x2!, y2!, way!)ă'----------------------------------------------------------------------------ă'Cool shaded textă'ă'2/11/97ă'1997 By: - Nick Kochakian -ă'ă'If you have any comments or questions please e-mail me at:ă'nickK@worldnet.att.netă'ă'And if you would like to use the SHADETXT sub routine in your programă'please say something nice about me in your program! :)ă'ă'Have fun! :)ă'----------------------------------------------------------------------------ăăSCREEN 13ăăx = 10ăy = 10ăă'The color of the text HAS to be color 16ăLOCATE x, y: COLOR 16: PRINT "Shaded grey text"ăăăx1 = 71ăy1 = 72ăx2 = 200ăy2 = 79ăă'How to select the range for your text:ă'ă'1. Uncomment the LINE and END statements belowă'2. Adjust the x1,y1,x2,y2 values so a nice white box surrounds the textă'3. Comment the LINE and END statementsă'LINE (x1, y1)-(x2, y2), 15, Bă'ENDăă'There are 14 settings for the WAY variable! Try them all!ăă'way=1 -> Grey marble shaded textă'way=2 -> Ooze shade text... Works really good with a palette cycling routine!ă'way=3 -> Light source is at the bottom of the screenă'way=4 -> The opposite of way=3ă'way=5 -> Another marble effectă'way=6 -> Dark text with holes in ită'way=7 -> Another marble effectă'way=8 -> Bright at the bottom, dark/light at the topă'way=9 -> Centered light (dim)ă'way=10 -> Centered light (brighter)ă'way=11 -> Centered light (brightest)ă'way=12 -> "Light source" is directly centeredă'way=13 -> "Light source" is focused on the right side of the textă'way=14 -> The opposite of way=13ăăCALL shadetxt(x1, y1, x2, y2, 1)ăCOLOR 15ăăSUB shadetxt (x1, y1, x2, y2, way)ăx = x1ăy = y1ăctr = 1ăcurcol = 31ăcc = 1ăăIF way = 1 THENăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcol: curc$ = "y"ăIF cc = 1 AND curc$ = "y" THEN curcol = curcol - 1: curc$ = ""ăIF cc = 2 AND curc$ = "y" THEN curcol = curcol + 1: curc$ = ""ăIF curcol < 18 THEN cc = 2ăIF curcol > 30 THEN cc = 1ăx = x + 1ăIF x > x2 THEN x = x1: y = y + 1ăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 2 THENăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcol: curc$ = "y"ăy = y + 1ăIF y > y2 THEN y = 1: curcol = curcol + 1: x = x + 1ăIF curcol > 30 THEN curcol = 16ăIF x > x2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 3 THENăcurcol = 31ăchar = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y + 1: curcol = curcol + 1ăIF char = 8 THEN curcol = 31ăIF curcol < 16 THEN curcol = 31ăăIF curcol > 30 THEN curcol = 16ăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 4 THENăcurcol = 31ăchar = 0ăDOăy = y + 1ăLOOP UNTIL y >= y2ăăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y - 1: curcol = curcol + 1ăIF char = 8 THEN curcol = 31ăIF curcol < 16 THEN curcol = 31ăăIF curcol > 30 THEN curcol = 16ăIF y < y1 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 5 THENăcurcol = 16ăchar = 0ăc = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: char = char + 1ăăIF char = 4 THEN curcol = curcol + 1: char = 0ăăIF curcol > 30 THEN c = 1ăăIF c = 1 THEN curcol = curcol - 1ăIF curcol < 20 THEN curcol = 30ăăIF x > x2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 6 THENăcurcol = 16ăchar = 0ăc = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: char = char + 1ăăIF char = 4 THEN curcol = curcol + 1: char = 0ăăIF curcol > 20 THEN c = 1ăăIF c = 1 THEN curcol = curcol - 1ăIF curcol < 16 THEN curcol = 20ăăIF x > x2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 7 THENăcurcol = 16ăchar = 0ăc = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: char = char + 1ăăIF char > .5 THEN curcol = curcol + 1: char = 0ăăIF curcol > 30 THEN c = 1ăăIF c = 1 THEN curcol = curcol - 1ăIF curcol < 20 THEN curcol = 30ăăIF x > x2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 8 THENăcurcol = 20ăchar = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y + 1: char = char + 1ăăIF char = 1 THEN curcol = 21ăIF char = 3 THEN curcol = 22ăIF char = 4 THEN curcol = 23ăIF char = 5 THEN curcol = 25ăăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 9 THENăcurcol = 20ăchar = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y + 1: char = char + 1ăăIF char = 1 THEN curcol = 21ăIF char = 3 THEN curcol = 22ăIF char = 4 THEN curcol = 24ăIF char = 5 THEN curcol = 22ăăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 10 THENăcurcol = 20ăchar = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y + 1: char = char + 1ăăIF char = 1 THEN curcol = 22ăIF char = 3 THEN curcol = 25ăIF char = 4 THEN curcol = 27ăIF char = 5 THEN curcol = 23ăăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 11 THENăcurcol = 20ăchar = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăx = x + 1ăIF x > x2 THEN x = 1: y = y + 1: char = char + 1ăăIF char = 1 THEN curcol = 23ăIF char = 3 THEN curcol = 27ăIF char = 4 THEN curcol = 29ăIF char = 5 THEN curcol = 24ăăIF y > y2 THEN ctr = 2ăLOOP UNTIL ctr = 2ăEND IFăăIF way = 12 THENăcurcol = 17ăcnttr = 1ăchr = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: chr = chr + 1ăIF chr = 4 THEN curcol = curcol + 1: chr = 0ăIF curcol > 30 THEN cnttr = 2ăLOOP UNTIL cnttr = 2ăăcnttr = 1ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: chr = chr + 1ăIF chr = 4 THEN curcol = curcol - 1: chr = 0ăIF curcol < 17 THEN curcol = 17ăLOOP UNTIL x > x2ăăEND IFăăIF way = 13 THENăcurcol = 17ăchr = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: chr = chr + 1ăIF chr = 4 THEN curcol = curcol + 1: chr = 0ăIF curcol > 30 THEN curcol = 30ăLOOP UNTIL x > x2ăEND IFăăIF way = 14 THENăcurcol = 30ăchr = 0ăDOăIF POINT(x, y) = 16 THEN PSET (x, y), curcolăy = y + 1ăIF y > y2 THEN y = 1: x = x + 1: chr = chr + 1ăIF chr = 4 THEN curcol = curcol - 1: chr = 0ăIF curcol < 17 THEN curcol = 17ăLOOP UNTIL x > x2ăăEND IFăăEND SUBăNick Kochakian                 SHADED BAR BACKGROUND          NickK@worldnet.att.net         02-12-97 (15:23)       QB, QBasic, PDS        43   672      BARBACK.BAS DECLARE SUB SHADEBARS (SC!, EC!, WAY!)ă'Bar backgroundă'ă'This program should make a nice shaded bar background. Use this routineă'as you wish.ă'ă'Any questions or comments should goto:ă'ă'nickK@worldnet.att.netă'ă'1/30/97ă'1997 By: - Nick Kochakian -ăăSCREEN 13ăăSC = 16 'Starting colorăEC = 30 'Ending colorăăCALL SHADEBARS(SC, EC, 1)ăăSUB SHADEBARS (SC, EC, WAY)ăăX = 1ăY = 1ăX2 = 1ăY2 = 200ăăDIRS = 1ăCOL = SCăDOăLINE (X, Y)-(X2, Y2), COLăăIF DIRS = 1 THEN COL = COL + 1ăIF DIRS = 2 THEN COL = COL - 1ăIF COL >= EC THEN DIRS = 2ăIF COL <= SC THEN DIRS = 1ăăX = X + WAYăX2 = X2 + WAYăăLOOP UNTIL X > 316 AND X2 > 316ăăEND SUBăNick Kochakian                 COLOR CHOSER FOR BAR BACKGROUNDNickK@worldnet.att.net         02-12-97 (15:23)       QB, QBasic, PDS        76   1400     COLCHOSE.BAS'Color Choose 1.0ă'ă'Use this to choose colors for my program: BARBACK.BASă'1/30/97ă'1997 By: - Nick Kochakian -ăăCLSăSCREEN 13ăLINE (1, 1)-(47, 20), 7, BăLOCATE 1, 9: PRINT "<- Sample"ăSC = 0ăEC = 0ăSET = 1ăăGOSUB MAKECOLS:ăMCOLS:ăCOLOR 15ăLOCATE 2, 9: PRINT USING "Start col: ### End col: ###"; SC; ECăLOCATE 20, 1ăPRINT "1. Display sample"ăPRINT "2. Choose colors"ăPRINT "Q. Quit"ăDOăA$ = INKEY$ăIF A$ = "2" THEN GOTO CHOOSECOLS:ăIF A$ = "1" THEN GOSUB SAMP:ăLOOP UNTIL UCASE$(A$) = "Q"ă'''GOSUB DELCOLS:ăENDăă'Color set 1 - 0 - 100ă'Color set 2 - 101 - 255ăăMAKECOLS:ăIF SET = 1 THEN MC = 148: COL = 0ăLOCATE 4, 1ăFOR COL = 0 TO MCăCOLOR COLăPRINT COL;ăNEXT COLăRETURNăăCHOOSECOLS:ăLOCATE 20, 1ăPRINT "                          "ăPRINT "                          "ăPRINT "                          "ăLOCATE 20, 1ăCOLOR 15ăPRINT "End color has to be greater than start col!"ăINPUT "Start color (0-148) >", SCăINPUT "End color (0-148) >", ECăLOCATE 20, 1ăPRINT "                                                                 "ăPRINT "                          "ăPRINT "                          "ăGOTO MCOLS:ăăSAMP:ăX = 2ăY = 2ăX2 = 2ăY2 = 19ăCOL = SCăFOR COL = SC TO ECăLINE (X, Y)-(X2, Y2), COLăX = X + 1ăX2 = X2 + 1ăNEXT COLăăFOR COL = EC TO SC STEP -1ăLINE (X, Y)-(X2, Y2), COLăX = X + 1ăX2 = X2 + 1ăNEXT COLăRETURNăAngelo Ken Pesce               FLAMING TEXT                   ken@uniserv.uniplan.it         02-13-97 (11:15)       QB, QBasic, PDS        219  4338     BURNTEXT.BASDECLARE SUB BrnPrint2 (y%, x%, text$, iter%)ăDECLARE SUB pal ()ăDECLARE SUB BurnPrintDel (y%, x%, text$, iter%, delay%)ăDECLARE SUB BetterBurnPrint (y%, x%, text$, iter%)ăDECLARE SUB BurnPrint (y%, x%, text$, iter%)ă' BurnPrint Routines Demoă' By Angelo KEN Pesce 1997ă' You can use those routinses as you wishă' ken@uniserv.uniplan.ităăDEFINT A-Z: ' Not very useful hereăăSCREEN 13: ' We must use screen 13ă' SetUp a 48 color palette (Routine made by Phobia)ăCALL palăăCALL BurnPrint(11, 13, "Angelo 'Ken' Pesce", 20)ăCALL BurnPrint(13, 13, "TEXT Fireffect Demo", 20)ăCALL BurnPrint(15, 13, "ApsoftWARE 1997", 20)ăăCALL BrnPrint2(5, 13, "BURN", 20)ăCALL BrnPrint2(5, 11, "Burn", 10)ăCALL BrnPrint2(5, 9, "burn", 5)ăăwaittime = 3000: ' Trim it according your cpu speed (now is set for a P166)ăăCALL BurnPrintDel(15, 13, "WAIT AND BURN", 20, waittime)ăăCLSăCALL BetterBurnPrint(11, 13, "Clear Burning", 40)ăCALL BetterBurnPrint(15, 15, "--10--", 50)ăCALL BetterBurnPrint(15, 15, "--9--", 50)ăCALL BetterBurnPrint(15, 15, "--8--", 50)ăCALL BetterBurnPrint(15, 15, "--7--", 50)ăCALL BetterBurnPrint(15, 15, "--6--", 50)ăCALL BetterBurnPrint(15, 15, "--5--", 50)ăCALL BetterBurnPrint(15, 15, "--4--", 50)ăCALL BetterBurnPrint(15, 15, "--3--", 50)ăCALL BetterBurnPrint(15, 15, "--2--", 50)ăCALL BetterBurnPrint(15, 15, "--1--", 50)ăCALL BetterBurnPrint(15, 15, "--0--", 50)ăăSCREEN 0ăăSUB BetterBurnPrint (y%, x%, text$, iter%)ă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 48: LOCATE y%, x%ăPRINT text$ăă' WAIT KEYPRESSăDO: LOOP WHILE INKEY$ = ""ăă' CALCULATE TEXT POSITIONăălenght = LEN(text$)ăăxstart = (x * 8) - 8ăxend = ((x + lenght) * 8) - 8ăystart = (y * 8) - 32 - 8ăyend = (y * 8) - 8ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xendăcol = FIX((POINT(x + sn(a), y) + POINT(x, y + 1) + POINT(x, y - 1) + POINT(x + 1, y) + POINT(x - 1, y)) / 5)ăIF col < 0 THEN col = 0ăPSET (x, y - 1), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răEND SUBăăSUB BrnPrint2 (y%, x%, text$, iter%)ă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 48ăFOR z = 1 TO LEN(text$)ăLOCATE y% + z, x%ăa$ = LEFT$(text$, z)ăa$ = RIGHT$(a$, 1)ăPRINT a$ăNEXTăă' WAIT KEYPRESSăDO: LOOP WHILE INKEY$ = ""ăă' CALCULATE TEXT POSITIONăăxstart = (x * 8) - 8ăxend = (x * 8) - 8ăystart = (y * 8) - 8ăyend = (y * 8) - 8 + (LEN(text$) * 8)ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xend + 8ăcol = FIX(POINT(x + sn(a), y) + POINT(x, y + 1)) / 2 - (3 * RND)ăIF col < 0 THEN col = 0ăPSET (x, y), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răăEND SUBăăSUB BurnPrint (y%, x%, text$, iter%)ă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 48: LOCATE y%, x%ăPRINT text$ăă' WAIT KEYPRESSăDO: LOOP WHILE INKEY$ = ""ăă' CALCULATE TEXT POSITIONăălenght = LEN(text$)ăăxstart = (x * 8) - 8ăxend = ((x + lenght) * 8) - 8ăystart = (y * 8) - 16ăyend = (y * 8) - 8ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xendăăcol = FIX(POINT(x + sn(a), y) + POINT(x, y + 1)) / 2 - (3 * RND)ăIF col < 0 THEN col = 0ăPSET (x, y), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răăEND SUBăăSUB BurnPrintDel (y%, x%, text$, iter%, delay%)ă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 48: LOCATE y%, x%ăPRINT text$ăă' DelayăFOR zz = 0 TO delayăFOR z = 0 TO delayăNEXTăNEXTăă' CALCULATE TEXT POSITIONăălenght = LEN(text$)ăăxstart = (x * 8) - 8ăxend = ((x + lenght) * 8) - 8ăystart = (y * 8) - 16ăyend = (y * 8) - 8ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xendăăcol = FIX(POINT(x + sn(a), y) + POINT(x, y + 1)) / 2 - (3 * RND)ăIF col < 0 THEN col = 0ăPSET (x, y), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răăEND SUBăăSUB pală' MADE BY PHOBIAăă' setup palette (Made By PHOBIA)ăFOR Ac% = 0 TO 63ăOUT &H3C7, Ac% / 4ăOUT &H3C9, Ac%ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C7, Ac% / 4 + 16ăOUT &H3C9, 63ăOUT &H3C9, Ac%ăOUT &H3C9, 0ăOUT &H3C7, Ac% / 4 + 32ăOUT &H3C9, 63ăOUT &H3C9, 63ăOUT &H3C9, Ac%ăNEXTăEND SUBăăAngelo Ken Pesce               FIRE AND BUMP                  ken@uniserv.uniplan.it         02-19-97 (20:05)       QB, QBasic, PDS        712  16500    FIREBUMP.BASDECLARE SUB flam2 ()ăDECLARE SUB anim ()ăDECLARE SUB bump ()ăDECLARE SUB bump1 ()ăDECLARE SUB BurnPrint (y%, x%, text$, iter%)ăDECLARE SUB circles ()ăDECLARE SUB envcalc ()ăDECLARE SUB flam ()ăDECLARE SUB flam1 ()ăDECLARE SUB InputValues ()ăDECLARE SUB palinit (n!)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB setpal (start.slot%, end.slot%)ăDECLARE SUB statef ()ăDECLARE SUB testpat2 ()ăDECLARE SUB TestPatt (n!)ăDECLARE SUB textf ()ăDECLARE SUB waitkpress ()ăDECLARE SUB writeRGB (red%, grn%, blu%, slot%)ă' $DYNAMICă' USE QBX OR QB WITH /AH /NOFRILLS OPTIONSă' ( to say the truth I don't know if Qb has this options...... )ă' You need 612k of conventional memoryăăăăăăăăă' ***************************************************************************ă' *******************  History  *********************************************ă' ***************************************************************************ă'ă' Demo v1: First version. (not relased)ă'ă' Demo v2: I changed some algorithms and added a "new" (minor) routinesă'ă' ***************************************************************************ă' ***************************************************************************ă' ******************************************* P L E A S E  R E A D  T H I S *ă' ***************************************************************************ă' ***************************************************************************ă' APSOFTWARE 1997 (Palette routines aren't mine....)ă' Angelo KEN Pesceă' ken@uniserv.uniplan.ită' 2d BUMPmapping EXAMPLE + FLAME EFFECTă' I can make better animated bump effects if I find the way to make ană' array to store the pattern instead putting it on the screen. (in fact thereă' is only one problem: the emp array fills all the avaible memory... if anyoneă' know how to get more memory to use for arrays on QuickBasic PDS7 pleaseă' email me, I need 64k more memory)ă' I also need to know a way to use the full 16m color vga paletteă' (white=256*256*256 instead of 64*64*64)ă'ă' THIS NEEDS A PENTIUM 100... (to run Interpreted in QBX PDS 7, not Compiled)ă' QUICKBASIC ISN'T A FAST LANGUAGE...ă' BUT IT'S GOOD TO MAKE "TEST" VERSIONSă' OF PROGRAMS AND ALGORITHMS...ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăăăăă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' *****************  THE MAIN CODE  *****************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăă' LIGHT POSITION (needed later in the bump subroutine)ăDIM SHARED lposx%ăDIM SHARED lposy%ăCLSăCALL InputValuesăă' CALCULATE LIGHT ENVIROMENT MAP "EMP"ăPRINT "Please wait: initializing enviroment map";ăDIM SHARED emp(255, 255): ' Enviroment map arrayăCALL envcalcăă' SCREEN AND PALETTE INITăSCREEN 13ăCALL palinit(2)ăăDIM scrb(5625)ă' iNTRO FIREăFOR r = 1 TO 100ăFOR a = 1 TO 15ăx = INT((178 - 143 + 1) * RND + 143)ăPSET (x, 122), 190ăPSET (x, 121), 189ăPSET (x, 120), 188ăNEXTăCALL flam2ăGET (138, 0)-(183, 125), scrbăPUT (138 - 50, 25), scrb, PSETăPUT (138 + 50, 25), scrb, PSETăPUT (138 - 100, 40), scrb, PSETăPUT (138 + 100, 40), scrb, PSETăNEXTăCALL bumpăCALL waitkpressăFOR r = 1 TO 5ăCALL bumpăCALL flamăNEXTăFOR r = 1 TO 20ăCALL flamăNEXTăERASE scrbăă' iNTROăCLSăCALL BurnPrint(11, 11, "ApsoftWare 1997", 50)ăCALL BurnPrint(12, 12, "*** PRESENTS: ***", 50)ăCALL BurnPrint(13, 13, "Fire and Bump", 50)ăCALL BurnPrint(14, 14, "A QuickBasic DEMO", 50)ăCLSăăCALL palinit(1)ăCALL BurnPrint(14, 14, "2D BumpMaps ahead", 50)ăă' Static Bump EffectăCALL statefăăCLSăCALL BurnPrint(14, 14, "Don't play with fire", 50)ăă' Animated Fire EffectăCALL palinit(2)ăCALL flam1ă' Bump fire patternăCALL palinit(1)ălposx% = 160ălposy% = 200ăCALL bumpăCALL waitkpressăăCALL palinit(1)ăCLSăCALL BurnPrint(14, 14, "Animated BumpMaps", 50)ăCALL palinit(2)ăăCLSă' Animated Bump EffectăDIM SHARED scr(100, 70)ălposy% = 100ăCALL testpat2ăCALL animăăCLSăCALL palinit(1)ăCALL BurnPrint(14, 14, "Text fire effect", 50)ăă' Text FireeffectăERASE scr: ' We have to gain more memoryăERASE emp: ' So we deallocate unused arraysăCALL textfăă' THE ENDăENDă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăăREM $STATICăDEFINT A-ZăSUB animăă' animated 2d bump effectăDOăFOR r = 0 TO 100 STEP 5ălposx% = răCALL bump1ăIF INKEY$ <> "" THEN EXIT DOăNEXTăFOR r = 100 TO 0 STEP -5ălposx% = răCALL bump1ăIF INKEY$ <> "" THEN EXIT DOăNEXTăLOOPăEND SUBăăDEFSNG A-ZăSUB bumpă' bump effect routineăăDEF SEG = &HA000ăFOR y% = 0 TO 100ăFOR x% = 0 TO 319ălx% = x% - lposx%ăly% = y% - lposy%ăă' *********************************************************************ănx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + x%) + 128 - lx%ăny% = PEEK((y% + 1) * 320 + x%) - PEEK(y% * 320 + x%) + 128 - ly%ă' ORIGINAL VERSION (BEFORE V2)ă'nx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + (x%-1)) + 128 - lx%ă'ny% = PEEK((y% + 1) * 320 + x%) - PEEK((y%-1) * 320 + x%) + 128 - ly%ă' *********************************************************************ăăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăă' *********************************************************************ăPOKE (y% * 320 + x%), emp(nx%, ny%)ă' ORIGINAL VERSION (BEFORE V2)ă' POKE ((y%-1) * 320 + (x%-1)), emp(nx%, ny%)ă' *********************************************************************ăăNEXTăNEXTăăDEF SEG = (&HA000 + &H7D0)ăFOR y% = 1 TO 99ăFOR x% = 0 TO 319ălx% = x% - lposx%ăly% = y% - (lposy% - 100): ' Use ly%=y%-(lposy%+100) to make a tiny 2 lightsă'                            effectăă' *********************************************************************ănx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + x%) + 128 - lx%ăny% = PEEK((y% + 1) * 320 + x%) - PEEK(y% * 320 + x%) + 128 - ly%ă' ORIGINAL VERSION (BEFORE V2)ă'nx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + (x%-1)) + 128 - lx%ă'ny% = PEEK((y% + 1) * 320 + x%) - PEEK((y%-1) * 320 + x%) + 128 - ly%ă' *********************************************************************ăăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăă' *********************************************************************ăPOKE (y% * 320 + x%), emp(nx%, ny%)ă' ORIGINAL VERSION (BEFORE V2)ă' POKE ((y%-1) * 320 + (x%-1)), emp(nx%, ny%)ă' *********************************************************************ăăNEXTăNEXTăDEF SEGăEND SUBăăSUB bump1ă' animated bump effect routineăăDEF SEG = &HA000ăFOR y% = 0 TO 69ăFOR x% = 0 TO 99ălx% = x% - lposx%ăly% = y% - lposy%ănx% = scr((x% + 1), y%) - scr(x%, y%) + 128 - lx%ăny% = scr(x%, (y% + 1)) - scr(x%, y%) + 128 - ly%ăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăcol = emp(nx%, ny%)ăPOKE (y% * 320 + x%), colăNEXTăNEXTăDEF SEGăEND SUBăăDEFINT A-ZăSUB BurnPrint (y%, x%, text$, iter%)ă' burning text routineăă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 189: LOCATE y%, x%ăPRINT text$ăă' WAIT KEYPRESSăDO: LOOP WHILE INKEY$ = ""ăă' CALCULATE TEXT POSITIONăălenght = LEN(text$)ăăxstart = (x * 8) - 8ăxend = ((x + lenght) * 8) - 8ăystart = (y * 8) - 25ăyend = (y * 8) - 8ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xendăăcol = FIX(POINT(x + sn(a), y) + POINT(x, y + 1)) / 2 - (3 * RND)ăIF col < 0 THEN col = 0ăPSET (x, y), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răEND SUBăăSUB circlesă' circle generator routine - test patternăăFOR i = 0 TO 12ăFOR x = 35 TO 0 STEP -1ăc = x + (i * i)ăd = ABS(x * x / 4 + i)ăCIRCLE (111, 200), d, căCIRCLE (110, 200), d, căCIRCLE (211, 200), d, căCIRCLE (210, 200), d, căNEXTăNEXTăEND SUBăăDEFSNG A-ZăSUB envcalcă' enviroment map array initializiation routineăăFOR y% = 0 TO 255ăFOR x% = 0 TO 255ănrmx = (x% - 128) / 128ănrmy = (y% - 128) / 128ănrmz = 1 - SQR((nrmx * nrmx) + (nrmy * nrmy))ăIF nrmz < 0 THEN nrmz = 0ăemp(x%, y%) = CINT(nrmz * 190)ăNEXTăPRINT ".";ăNEXTăEND SUBăăDEFINT A-ZăSUB flamă' fire - fade routineăăDEF SEG = &HA000ăFOR yp = 0 TO 100ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol1 = PEEK(yp * 320 + (xp + 1))ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ăcol = col / 5 - 6ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout:ăNEXTăNEXTăsg = &HA000 + &H7D0ăDEF SEG = sgăFOR yp = 1 TO 99ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol1 = PEEK(yp * 320 + (xp + 1))ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout1 ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ăcol = col / 5 - 6ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout1:ăNEXTăNEXTăDEF SEGăEND SUBăăSUB flam1ă' fire routineăsg = &HA000 + &H7D0ăDEF SEG = sgăDOăăFOR r = 0 TO 50ăa = INT(320 * RND)ăPSET (a, 198), 190ăPSET (a + 1, 198), 0ăNEXTăăFOR yp = 60 TO 99ăFOR xp = 0 TO 319ăcol = PEEK((yp + 1) * 320 + xp)ăcol1 = PEEK(yp * 320 + xp + 1)ăIF col = col1 THEN GOTO fast ELSE col = col + col1ăcol = col + PEEK(yp * 320 + xp)ăcol = col / 3 - 3ăIF col < 0 THEN col = 0ăPOKE (yp - 1) * 320 + xp, colăfast:ăNEXTăNEXTăLOOP WHILE INKEY$ = ""ăDEF SEGăEND SUBăăDEFSNG A-ZăSUB flam2ăDEFINT A-Zăsp = 3: REM FIRE Y SPEEDăăREM ROUTINE RANGE: X 138-183, Y 0-125ăăREM ROUTINE 0 FASTEST *************************************** Pixels 0 - 40ăFOR y = 0 TO 40ă    FOR x = 138 TO 183ă      col = POINT(x, y - 1)ă      IF col = 0 THEN GOTO a1ă      col = col - 1ă      PSET (x, y - sp), colăa1:ăNEXTăNEXTăăREM ROUTINE 1 FAST ****************************************** Pixels 41 - 65ăăFOR y = 41 TO 65ă    FOR x = 138 TO 183ă      col = POINT(x, y + 1)ă      col = col + POINT(x, y - 1): IF col = 0 THEN GOTO ken1ă      col = col / 2 - 1ă      IF col < 0 THEN col = 0ă      PSET (x, y - sp), colăken1:ăNEXTăNEXTăăREM ROUTINE 2 MEDIUM ******************************************* Pixels 66-80ăăFOR y = 66 TO 80ă    FOR x = 138 TO 183ă      col = POINT(x, y)ă      col = col + POINT(x, y + 1): IF col = 0 THEN GOTO ken3ă      col = col + POINT(x, y - 1)ă      col = col / 3 - 1ă      IF col < 0 THEN col = 0ă      PSET (x, y - sp), colăken3:ăNEXTăNEXTăăREM ROUTIME 3 SLOW ******************************************** Pixels 81-125ăFOR y = 81 TO 125ă   FOR x = 138 TO 183ă      col = POINT(x, y)ă       col = col + POINT(x + 1, y): IF col = 0 THEN GOTO ken6:ă       col = col + POINT(x - 1, y)ă       col = col + POINT(x, y + 1)ă       col = col + POINT(x, y - 1)ă       col = col / 5 - 1ă       IF col < 0 THEN col = 0ăken6:ă      PSET (x, y - sp), colăNEXTăNEXTăăEND SUBăăDEFSNG A-ZăSUB InputValuesăPRINT "Light position (good values are 160,100)"ăINPUT "x (from 1 to 320)"; lposx%ăINPUT "y (from 1 to 200)"; lposy%ăIF lposx% < 1 OR lposx% > 320 THEN lposx% = 160ăIF lposy% < 1 OR lposy% > 200 THEN lposy% = 100ăPRINTăEND SUBăăSUB palinit (n)ă' palette setup routineăăSELECT CASE năCASE IS = 1ăăCALL writeRGB(0, 0, 0, 0)ăCALL writeRGB(0, 0, 63, 63)ăCALL setpal(0, 63)ăăCALL writeRGB(0, 0, 63, 64)ăCALL writeRGB(0, 63, 63, 127)ăCALL setpal(64, 127)ăăCALL writeRGB(0, 63, 63, 128)ăCALL writeRGB(63, 63, 63, 190)ăCALL setpal(128, 190)ăăCASE IS = 2ăCALL writeRGB(0, 0, 0, 0)ăCALL writeRGB(63, 0, 0, 63)ăCALL setpal(0, 63)ăăCALL writeRGB(63, 0, 0, 64)ăCALL writeRGB(63, 63, 0, 127)ăCALL setpal(64, 127)ăăCALL writeRGB(63, 63, 0, 128)ăCALL writeRGB(63, 63, 63, 190)ăCALL setpal(128, 190)ăEND SELECTăEND SUBăăDEFINT A-ZăSUB ReadRGB (red%, grn%, blu%, slot%)ă' palette value read routineăă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB setpal (start.slot%, end.slot%)ă' smooth palette generator routineăă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL writeRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăDEFSNG A-ZăSUB statefă' static 2d bump effectăă' TEST PATTERN (You can use any pattern or image)ăCALL palinit(2)ăCALL TestPatt(0)ăCALL palinit(1)ăCALL bump: ' Bump MapăCALL waitkpressăFOR r = 1 TO 20ăCALL flam: 'More than flam we can call this "fade"ăNEXTăCALL palinit(2)ăCALL TestPatt(1)ăCALL palinit(1)ăCALL bump: ' Bump MapăCALL waitkpressăFOR r = 1 TO 20ăCALL flamăNEXTăEND SUBăăSUB testpat2ă' pattern generator for animated bumpăăFOR x = 0 TO 100ăFOR y = 0 TO 70ăPSET (x, y), RND * 100ăNEXTăNEXTăflamăflamăFOR x = 0 TO 100ăFOR y = 0 TO 70ăscr(x, y) = POINT(x, y)ăNEXTăNEXTăăEND SUBăăSUB TestPatt (n)ă' pattern generator for static bump routineăSELECT CASE năCASE IS = 0ăCALL circlesăCASE IS = 1ăFOR x = 1 TO 320ăFOR y = 1 TO 200ăPSET (x, y), RND * 100ăNEXTăNEXTăCALL flam: ' this smooths the patternăEND SELECTăEND SUBăăDEFINT A-ZăSUB textfă' text fireeffect routineăăSCREEN 0: WIDTH 80, 50ăDIM scrbuf(80, 50)ăăDOăGOSUB lastlineăGOSUB randputăGOSUB fireăGOSUB updscrăLOOP WHILE INKEY$ = ""ăăENDăREM ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SUBSăupdscr:ăLOCATE 1, 1ăFOR y = 1 TO 49ăFOR x = 1 TO 80ăSELECT CASE scrbuf(x, y)ăCASE 0 TO 9ăCOLOR 0, 0: PRINT " ";ăCASE 10 TO 19ăCOLOR 4, 0: PRINT "°";ăCASE 20 TO 29ăCOLOR 4, 0: PRINT "±";ăCASE 30 TO 39ăCOLOR 4, 0: PRINT "˛";ăCASE 40 TO 44ăCOLOR 14, 4: PRINT " ";ăCASE 45 TO 50ăCOLOR 14, 4: PRINT "°";ăCASE 51 TO 69ăCOLOR 14, 4: PRINT "±";ăCASE 70 TO 89ăCOLOR 14, 4: PRINT "˛";ăCASE 90 TO 124ăCOLOR 14, 4: PRINT "Ű";ăCASE 125 TO 160ăCOLOR 15, 0: PRINT "Ű";ăEND SELECTăNEXTăNEXTăRETURNăălastline:ăFOR x = 1 TO 80ăa = CINT(RND)ăIF a = 1 THEN scrbuf(x, 50) = 0ăIF a = 0 THEN scrbuf(x, 50) = 160ăNEXTăRETURNăărandput:ăFOR i = 1 TO 5ăx = INT(79 * RND + 1)ăy = INT(49 * RND + 1)ăscrbuf(x, y) = 160ăscrbuf(x, y + 1) = 160ăscrbuf(x + 1, y + 1) = 160ăNEXTăRETURNăăfire:ăFOR x = 1 TO 79ăFOR y = 1 TO 49ăcolr = scrbuf(x, y) + scrbuf(x + 1, y) + scrbuf(x, y + 1) + scrbuf(x - 1, y) + scrbuf(x, y - 1)ăcolr = INT(colr / 5.3 - INT(11 * RND - 5))ăIF colr > 160 THEN colr = 160ăIF colr < 0 THEN colr = 0ăscrbuf(x, y - 1) = colrăNEXTăNEXTăRETURNăăEND SUBăăDEFSNG A-ZăSUB waitkpressăDO: LOOP WHILE INKEY$ = ""ăEND SUBăăDEFINT A-ZăSUB writeRGB (red%, grn%, blu%, slot%)ă' palette write routineăă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăJeff Ward                      24BIT TGA VIEWER               dward@mesa5.mesa.colorado.edu  02-19-97 (21:10)       QB, QBasic, PDS        73   2628     TGA3-2-2.BASDECLARE SUB ClosePset (x!, y!, r!, g!, b!)ăDECLARE SUB FastPal (clr, red!, green!, blue!)ăă' TGANEW.BAS   by Jeff Ward  FOR PLAIN OLD QBASIC! :)ă' -----------------------------------------------------------------------ă'  This was something I whipped up in a hurry. It does 24bită'  images at any size (the screen limits us to 320x200).  It uses theă'  3-2-2 palette to emulate 24 bit color.  Looks pretty nice on mostă'  images, but 16 million colors is hard to squeeze into 255 attribs.ă'  They look best when the image is a scanned photo or such, worstă'  when it contains a ton of shades of the same color.ăăSCREEN 13ăFOR r = 0 TO 63 STEP 9                       ' This sets and shows oură FOR g = 0 TO 63 STEP 9                      ' all-purpose, handy dandyă  FOR b = 0 TO 63 STEP 21                    ' 3-2-2 palette.  It hasă   FastPal x, r, g, b: x = x + 1             ' all the color that could beă   PSET (x, 199), x                          ' jammed into 256 attributesă  NEXT bă NEXT găNEXT răINPUT "Enter filename:", f$ăOPEN f$ FOR BINARY AS 1ăIF LOF(1) = 0 THEN CLOSE : KILL f$: PRINT "File not found!": ENDăă' This next portion finds the size of the imageăa$ = " ": b$ = a$: c$ = b$: d$ = c$ăGET #1, 13, a$ăGET #1, 14, b$ăGET #1, 15, c$ăGET #1, 16, d$ăa = ASC(a$): b = ASC(b$): c = ASC(c$): d = ASC(d$)ăPRINT a, b, c, dăIF b = 0 THEN xx = a ELSE xx = (256 * b) + aăIF d = 0 THEN yy = c ELSE yy = (256 * d) + căă' This next portion displaysăx = 0: y = 0ăFOR i = 1 TO xx * yy * 3 STEP 12000ă a$ = SPACE$(12000)                  ' It loads faster if you load a heap ofă GET #1, i + 18, a$                  ' it and then chop it up in the memory.ă FOR z = 0 TO 11999 STEP 3           ' I'm going by STEP 3 all these timesă  b = ASC(MID$(a$, 1 + z, 1))        ' because TGAs format is (except foră  g = ASC(MID$(a$, 2 + z, 1))        ' the header) BGR over and over!ă  r = ASC(MID$(a$, 3 + z, 1))        ' ClosePset is our magicical sub! Ită  ClosePset x, y, r, g, b            ' finds the closest color to true RGBă  x = x + 1                          ' in the 3-2-2 palette and PSETs it.ă  IF x = xx THEN x = 0: y = y + 1ă NEXT zăNEXTăă' It is slow, but I just whipped this up as I said.ăăSUB ClosePset (x, y, r, g, b)ăr = INT(r / 32)ăg = INT(g / 32)ăb = INT(b / 64)ăPSET (x, y), ((r * 32) + (g * 4) + b)ăEND SUBăăSUB FastPal (clr, red, green, blue)ă OUT &H3C8, clră OUT &H3C9, redă OUT &H3C9, greenă OUT &H3C9, blueăEND SUBăăSUB StorePal (clr, OldR, OldG, OldB)ăOUT &H3C7, clrăOldR = INP(&H3C9)ăOldG = INP(&H3C9)ăOldB = INP(&H3C9)ăEND SUBăReinder Glas                   COOL LINE GRAPHICS             glas400@hio.tem.nhl.nl         02-24-97 (15:10)       QB, QBasic, PDS        71   2476     COOLLINE.BAS'Cool line-graphicsă'By Reinder Glasă'1996ă'Email: glas400@hio.tem.nhl.nlăăDEFINT A-Zăă'const definition !!!change to get different effects!!!ă'this const are optimalized for a 486dx50 computerăCONST ArrayLength = 96ăCONST Refresh = 3000ăCONST MaxStepFactor = 8ăă'static const definitionăCONST TRUE = 1ăCONST Forward = 0ăCONST Back = NOT Forwardăă'type definitionăTYPE Pixelă        x AS INTEGER  'the x coordinate of the pixelă        y AS INTEGER  'the y coordinate of the pixelă        xd AS INTEGER 'the x direction the pixel is movingă        yd AS INTEGER 'the y direction the pixel is movingă        xs AS INTEGER 'the speed the pixel is moving in the x directionă        ys AS INTEGER 'the speed the pixel is moving in the y directionăEND TYPEăăTYPE PixelPairă        p1 AS Pixelă        p2 AS PixelăEND TYPEăă'allocate usertypesăDIM ActivePixels(2) AS PixelăDIM PixelPairArray(ArrayLength) AS PixelPairăă'declare subsăDECLARE SUB Update (InPixel AS Pixel)ăă'main programăSCREEN 13ăRANDOMIZE TIMERăDIM col AS INTEGER 'color of lineăDIM counter AS INTEGERăWHILE (TRUE)ă        FOR waiting = 0 TO Refresh: NEXTă        LINE (PixelPairArray(counter).p1.x, PixelPairArray(counter).p1.y)-(PixelPairArray(counter).p2.x, PixelPairArray(counter).p2.y), 0ă        Update ActivePixels(0)ă        Update ActivePixels(1)ă        PixelPairArray(counter).p1 = ActivePixels(0)ă        PixelPairArray(counter).p2 = ActivePixels(1)ă        LINE (PixelPairArray(counter).p1.x, PixelPairArray(counter).p1.y)-(PixelPairArray(counter).p2.x, PixelPairArray(counter).p2.y), colă       ă        counter = (counter + 1) MOD ArrayLengthă       ă        col = (col + 1) MOD 256ă        IF col < 32 THEN col = 32ăWENDăăSUB Update (InPixel AS Pixel)ă        IF InPixel.x >= 320 THEN InPixel.xd = Back: InPixel.xs = INT(RND * MaxStepFactor) + 1ă        IF InPixel.x <= 0 THEN InPixel.xd = Forward: InPixel.xs = INT(RND * MaxStepFactor) + 1ă        IF InPixel.y >= 200 THEN InPixel.yd = Back: InPixel.ys = INT(RND * MaxStepFactor) + 1ă        IF InPixel.y <= 0 THEN InPixel.yd = Forward: InPixel.ys = INT(RND * MaxStepFactor) + 1ă       ă        IF InPixel.xd = Forward THEN InPixel.x = InPixel.x + InPixel.xsă        IF InPixel.xd = Back THEN InPixel.x = InPixel.x - InPixel.xsă        IF InPixel.yd = Forward THEN InPixel.y = InPixel.y + InPixel.ysă        IF InPixel.yd = Back THEN InPixel.y = InPixel.y - InPixel.ysăEND SUBăShaun Burnette                 BOUNCING BALL W/STARS          shaun_burnette@hotmail.com     02-04-97 (10:10)       QB, QBasic, PDS        47   1403     BALLZ.BAS   '===================================ă'Ballz.basă'By:Shaun Burnetteă'2-4-97ă'Email:shaun_burnette@hotmail.comă'===================================ăDEFINT A-ZăăDIM BallZ(1093)  'Diminish an array large enough to hold BallZ(1093)ăăDECLARE SUB DrawBallZ ()  'Draws BallZăăX = 0          'Starting point for XăY = 0          'Starting point for YăDOWN = 2       'How many pixels to drop each timeăACROSS = 1     'How many pixels to go across each timeăăă'=======>Draw and get BallZ<========ăSCREEN 13ăCLS            'Clear screenăDrawBallZ      'Draw BallZăGET (0, 0)-(32, 32), BallZ  'Get BallZăă'===>Loop that makes Ballz bounce<===ăăDOă ă  C = RND * 256  'Random coloră  B = INT((280 - 20 + 1) * RND + 20) 'Random X pointă  D = INT((170 - 20 + 1) * RND + 20) 'Random Y pointă  PSET (B, D), C 'Turn on the pixel at (B,D) on color Că  FOR A = 1 TO 15000: NEXT A  'This can be taken out if it is too slowă  X = X + DOWN   'Increase X value to make BallZ moveă  Y = Y + ACROSS 'Increase Y value to make BallZ moveă  IF (X < 1 OR X > 280) THEN DOWN = -DOWN  'Make BallZ reverseă  IF (Y < 1 OR Y > 160) THEN ACROSS = -ACROSS 'Make Ballz reverseă  PUT (X, Y), BallZ, PSET 'Puts BallZ on screenăăLOOP WHILE INKEY$ = ""  'Loop until a key is pressedăăSUB DrawBallZă  FOR Size = 1 TO 14ă   Colo = Colo + 1ă   CIRCLE (16, 16), Size, Colo  'Draw a circleă  NEXTăEND SUBăC. Buijs                       ANY SIZE GIF VIEWER            harryst@castel.nl              02-24-97 (16:00)       QB, QBasic, PDS        287  10384    QBGIF.BAS   '============================================================================ă'== QBGIF V1.0, 13-Dec-1992, Copyright (C) 1992 by C.Buijs                 ==ă'============================================================================ă'== This is a simple QuickBASIC utility for viewing all sizes GIF-Pictures ==ă'== in the 320x200x256 (Screen 13) mode of QuickBASIC.                     ==ă'== All gif-files with up to 256 colors can be readed in, all pictures are ==ă'== scaled down to fit on the screen.                                      ==ă'== This source is an optimized and enchanced version of DECGIF.BAS        ==ă'== written by Rich Geldrich.                                              ==ă'== Distribute this file only in unchanged form, this file may be edited   ==ă'== and changed for own purpose.                                           ==ă'==                                                                        ==ă'== NOTE:                                                                  ==ă'== QBGIF doesn't handle any interlaced pictures or pictures with local    ==ă'== color-maps and it only handles revision 87a gif-files.                 ==ă'============================================================================ă'== Compile with:   BC QBGIF /O/S/E;                                       ==ă'== Link with   :   LINK /NOE /NOD /FAR QBGIF,,,BCOM45;                    ==ă'============================================================================ă'ăDEFINT A-Ză'ăDECLARE FUNCTION Getbit ()ăDECLARE FUNCTION ReadCode (codesize)ăDECLARE SUB Plot (a)ă'ăDIM SHARED dat AS STRING * 1, id AS STRING * 6ăDIM SHARED prefix(0 TO 4096), suffix(0 TO 4096), outcode(0 TO 1024), power(0 TO 15) AS LONG, pal(0 TO 255) AS LONGăDIM SHARED x, y, xstart, xend, xbegin, ybegin, tempchar, vmode, num, blocklength, bitsin, backgroundăDIM SHARED xdiv AS SINGLE, ydiv AS SINGLEă'ăCOLOR 7, 0ăPRINT "QBGIF V1.0, QuickBASIC MCGA GIF-Viewer, Written & Compiled by C.Buijs"ăPRINT "Copyright (C) 1992 by LongWord Software Development."ăPRINTăă'ăFOR a = 0 TO 15ă   power(a) = 2 ^ aăNEXT aă'ăc$ = UCASE$(LTRIM$(RTRIM$(COMMAND$)))ăIF c$ > "" THENă   IF LEN(c$) > 3 THEN p = INSTR(1, c$, ".") ELSE p = INSTR(LEN(c$) - 3, c$, ".")ă   IF p = 0 THEN c$ = c$ + ".GIF"ă   p = LEN(c$)ă   WHILE p > 1 AND MID$(c$, p, 1) <> "\"ă      p = p - 1ă   WENDă   IF MID$(c$, p, 1) = "\" THEN f$ = MID$(c$, p + 1) ELSE f$ = c$ă   'ă   OPEN c$ FOR BINARY AS #1ă   GET 1, , idă   IF id = "GIF87a" THENă      GET #1, , TotalXă      GET #1, , TotalYă      GET #1, , dată      a = ASC(dat)ă      bitspixel = (a AND 7) + 1ă      GET #1, , dată      background = (ASC(dat) AND 255)ă      GET #1, , dată      IF ASC(dat) = 0 THENă         SCREEN 13ă         cred = 0ă         cgreen = 0ă         cblue = 0ă         bred = 0ă         bgreen = 0ă         bblue = 0ă         col = 255ă         bcol = 0ă         FOR a = 0 TO power(bitspixel) - 1ă            IF a < 256 THENă               GET #1, , dată               red = ASC(dat) \ 4ă               GET #1, , dată               green = ASC(dat) \ 4ă               GET #1, , dată               blue = ASC(dat) \ 4ă               IF (red > cred OR green > cgreen OR blue > cblue) AND bcol <> a THENă                  cred = redă                  cgreen = greenă                  cblue = blueă                  col = aă               END IFă               IF (red < bred OR green < bgreen OR blue < bblue) AND col <> a THENă                  bred = redă                  bgreen = greenă                  bblue = blueă                  bcol = aă               END IFă               pal(a) = 65536 * blue + 256 * green + redă            END IFă         NEXT aă         PALETTE USING pal(0)ă         'ă         LINE (0, 0)-(319, 199), backround, BFă         'ă         GET #1, , dată         IF ASC(dat) = 44 THENă            GET #1, , xstartă            GET #1, , Ystartă            GET #1, , xlengthă            GET #1, , ylengthă            xend = xlength + xstart - 1ă            Yend = ylength + Ystart - 1ă            l$ = f$ + " (" + LTRIM$(RTRIM$(STR$(xlength))) + "x" + LTRIM$(RTRIM$(STR$(ylength))) + "x" + LTRIM$(RTRIM$(STR$(power(bitspixel)))) + ")"ă            IF xlength < 314 THENă               xbegin = 3 + ((314 - xlength) \ 2)ă               xdiv = 1ă            ELSEă               xbegin = 3ă               xdiv = xlength / 314ă            END IFă            IF ylength < 187 THENă               ybegin = 3 + ((187 - ylength) \ 2)ă               ydiv = 1ă            ELSEă               ybegin = 3ă               ydiv = ylength / 187ă            END IFă            'ă            LINE (0, 0)-(319, 190), col, Bă            COLOR colă            LOCATE 10, 10: PRINT "[Press any key to quit]";ă            LOCATE 25, ((40 - LEN(l$)) / 2) + 1: PRINT l$;ă            'ă            GET #1, , dată            a = ASC(dat)ă            IF (a AND 128) = 0 THENă               IF (a AND 64) = 0 THENă                  GET #1, , dată                  codesize = ASC(dat)ă                  clearcode = power(codesize)ă                  EOFCode = clearcode + 1ă                  firstfree = clearcode + 2ă                  freeCode = firstfreeă                  codesize = codesize + 1ă                  initcodesize = codesizeă                  maxcode = power(codesize)ă                  bitmask = power(bitspixel) - 1ă                  GET #1, , dată                  blocklength = ASC(dat) + 1ă                  num = 0ă                  bitsin = 8ă                  outcount = 0ă                  x = xstartă                  y = Ystartă                  'ă                  LINE (2, ybegin + (y / ydiv))-((xbegin + (x / xdiv)) - 1, ybegin + (y / ydiv)), backgroundă                  DOă                     code = ReadCode(codesize)ă                     IF code <> EOFCode THENă                        IF code = clearcode THENă                           codesize = initcodesizeă                           maxcode = power(codesize)ă                           freeCode = firstfreeă                           code = ReadCode(codesize)ă                           curcode = codeă                           oldcode = codeă                           finchar = code AND bitmaskă                           Plot finchară                        ELSEă                           curcode = codeă                           InCode = codeă                           IF code >= freeCode THENă                              curcode = oldcodeă                              outcode(outcount) = finchară                              outcount = outcount + 1ă                           END IFă                           IF curcode > bitmask THENă                              DOă                                 outcode(outcount) = suffix(curcode)ă                                 outcount = outcount + 1ă                                 curcode = prefix(curcode)ă                              LOOP UNTIL curcode <= bitmaskă                           END IFă                           finchar = curcode AND bitmaskă                           outcode(outcount) = finchară                           outcount = outcount + 1ă                           FOR i = outcount - 1 TO 0 STEP -1ă                              Plot outcode(i)ă                           NEXT iă                           outcount = 0ă                           prefix(freeCode) = oldcodeă                           suffix(freeCode) = finchară                           oldcode = InCodeă                           freeCode = freeCode + 1ă                           IF freeCode >= maxcode THENă                              IF codesize < 12 THENă                                 codesize = codesize + 1ă                                 maxcode = maxcode * 2ă                              END IFă                           END IFă                        END IFă                     END IFă                     a$ = INKEY$ă                  LOOP UNTIL code = EOFCode OR a$ <> ""ă                  IF a$ = "" THENă                     SOUND 1000, 5ă                     DOă                     LOOP UNTIL INKEY$ > ""ă                  END IFă               ELSEă                  SCREEN 0ă                  WIDTH 80ă                  BEEPă                  PRINT "ţ ("; c$; ") Interlaced GIF encountered, not supported yet."ă                  ENDă               END IFă            ELSEă               SCREEN 0ă               WIDTH 80ă               BEEPă               PRINT "ţ ("; c$; ") Local colormap encountered, not supported yet."ă               ENDă            END IFă         ELSEă            SCREEN 0ă            WIDTH 80ă            BEEPă            PRINT "ţ ("; c$; ") File-format not correct, file maybe damaged!"ă            ENDă         END IFă      ELSEă         SCREEN 0ă         WIDTH 80ă         BEEPă         PRINT "ţ ("; c$; ") File-format not correct, file maybe damaged!"ă         ENDă      END IFă   ELSEă      SCREEN 0ă      WIDTH 80ă      BEEPă      PRINT "ţ ("; c$; ") Not a GIF Revision 87a file."ă      ENDă   END IFă   CLOSE #1ă   SCREEN 0ă   WIDTH 80ă   CLSă   COLOR 7, 0ă   PRINT "QBGIF V1.0, QuickBASIC MCGA GIF-Viewer, Written & Compiled by C.Buijs"ă   PRINT "Copyright (C) 1992 by LongWord Software Development."ăELSEă   BEEPă   PRINT "Usage:  QBGIF <Filename>"ăEND IFăENDăăFUNCTION Getbităbitsin = bitsin + 1ăIF bitsin = 9 THENă   GET #1, , dată   tempchar = ASC(dat)ă   bitsin = 1ă   num = num + 1ă   IF num = blocklength THENă      blocklength = tempchar + 1ă      GET #1, , dată      tempchar = ASC(dat)ă      num = 1ă   END IFăEND IFăIF (tempchar AND power(bitsin - 1)) = 0 THEN Getbit = 0 ELSE Getbit = 1ăEND FUNCTIONăăSUB Plot (a)ăPSET (xbegin + (x / xdiv), ybegin + (y / ydiv)), (a AND 255)ăx = x + 1ăIF x > xend THENă   LINE (xbegin + (x / xdiv), ybegin + (y / ydiv))-(318, ybegin + (y / ydiv)), backgroundă   x = xstartă   y = y + 1ă   LINE (2, ybegin + (y / ydiv))-((xbegin + (x / xdiv)) - 1, ybegin + (y / ydiv)), backgroundăEND IFăEND SUBăăFUNCTION ReadCode (codesize)ăcode = 0ăFOR aa = 0 TO codesize - 1ă   code = code + Getbit * power(aa)ăNEXT aaăReadCode = codeăEND FUNCTIONăByron C. Smith, Jr.            SKELETAL GRAPHICS FONT         harryst@castel.nl              04-15-95 (00:00)       QB, QBasic, PDS        296  9815     GRFN.BAS    'ÉÍÍÍÍÍÍÍÍÍÍŃÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»ă'ş GRFN.BAS ł GRaphics FoNt -- Skeletal 4x6 character cell graphics engine. şă'ÇÄÄÄÄÄÄÄÄÄÄĹÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¶ă'ş Overview ł GRFN is version 0.95D15 (15-APR-1995) by Byron C. Smith, Jr.  şă'ş          ł GRFN is designed for the CGA screen modes but can be executed şă'ş          ł in almost any screen mode (the font face, however, may be too şă'ş          ł small for the user's desire in especially the VGA modes).     şă'ş          ł GRFN is released as freeware for the benefit of all users.    şă'ş          ł                                                               şă'ş Snail    ł The author can be reached here:                               şă'ş          ł                                                               şă'ş          ł   Byron C. Smith, Jr.                                         şă'ş          ł   355 Smith Lake Rd                                           şă'ş          ł   Vidor, TX 77662-3025                                        şă'ş          ł   409/769-5795                                                şă'ş          ł                                                               şă'ş Email    ł The author is also on the internet:                           şă'ş          ł                                                               şă'ş          ł   xolotl@io.com (preferred email address, unless on AOL)      şă'ş          ł   bsmith5637@aol.com                                          şă'ş          ł   http://www.io.com/~xolotl (Web page, very skimpy as of yet) şă'ÇÄÄÄÄÄÄÄÄÄÄĹÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¶ă'ş Program  ł GRFN originated in the C environment during a hobby project   şă'ş          ł the author started to design part of a personal tools library.şă'ş          ł GRFN models existed for plain 3x5, (GRFN) 3x6, 3x7, 3x8, and  şă'ş          ł 4x8 character cells. GRFN was ported to PowerBASIC and QBasic şă'ş          ł for a friend's use in a future graphics game (tentatively set şă'ş          ł near May 1997 by the looks of things. :) ).                   şă'ş          ł                                                               şă'ş          ł GRFN is a modified octal graphics engine, based on a 3x6 cell şă'ş          ł with an I-shaped buffer zone (which is six pixels / border):  şă'ş          ł                                                               şă'ş          ł                              ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż          şă'ş          ł ÉÍÍÍÍÍÍÍ»          ÚÄÄÄÄÄÄÄÄÄ´one octal digit  wideł          şă'ş          ł şbinŻoctş*      ÚÄÄÁÄÄż      ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ          şă'ş          ł ĚÍÍÍÍÍÍÍą    ÚÚÄÂÄÂÄÂÄżż     ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż          şă'ş          ł ş010 = 2ş    łł ł łŰł łłÚÄÄÄÄ´six octal digits tallł          şă'ş          ł ÇÄÄÄÄÄÄÄ¶   Ú´ĂÄĹÄĹÄĹÄ´łł    ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ          şă'ş          ł ş101 = 5ş   łłł łŰł łŰłłł    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż          şă'ş          ł ÇÄÄÄÄÄÄÄ¶   łłĂÄĹÄĹÄĹÄ´łł ÚÄÄ´two octal digits longł          şă'ş          ł ş111 = 7ş   łŔł łŰłŰłŰłłł ł  ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ          şă'ş          ł ÇÄÄÄÄÄÄÄ¶ ÚÄ´ ĂÄĹÄĹÄĹÄ´ĂŮ ł  ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż          şă'ş          ł ş101 = 5ş ł łÚł łŰł łŰłł  ł *ł"A" has GRFN value ofł          şă'ş          ł ÇÄÄÄÄÄÄÄ¶ ł łłĂÄĹÄĹÄĹÄ´ł  ł  łG = &O00257550, with ł          şă'ş          ł ş101 = 5ş ł łłł łŰł łŰłł  ł  łthe highest octal    ł          şă'ş          ł ÇÄÄÄÄÄÄÄ¶ ł Ŕ´ĂÄĹÄĹÄĹÄ´ł  ł  łdigits being 00 sinceł          şă'ş          ł ş000 = 0ş ł  łł ł ł ł łł  ł  łthis designates the  ł          şă'ş          ł ČÍÍÍÍÍÍÍĽ ł  ŔŔÄÁÄÁÄÁÄŮŮ  ł  łempty I-buffer space.ł          şă'ş          ł           ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ  ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ          şă'ş          ł                                                               şă'ČÍÍÍÍÍÍÍÍÍÍĎÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽăDECLARE SUB GRFN (T$)ăSCREEN 2                         'GRFN might be too small for some in mode 2.ăCLSăPSET (18, 20), 0                 'Start GRFN out at 18, 20.ăFOR C% = 32 TO 128               'GRFN is only programmed for ASCII subset,ă  GRFN CHR$(C%)                  'although entire 4x6 cell is accessible.ăNEXTăPSET (18, 8), 0ăGRFN "GRFN:"ăLINE INPUT "GRFN: ", T$          'What would the user like to see GRFNized?ăPSET (46, 8), 0                  'Set up to display right underneath input.ăGRFN T$                          'GRFNize it without furthur delay.ăWHILE LEN(INKEY$) = 0: WENDăSCREEN 0: CLS : SYSTEM           'For QBASIC /RUN, terminates back to DOS.ăăDEFINT A-F, H-ZăDEFLNG GăSUB GRFN (T$)ă  FOR I = 1 TO LEN(T$)ă    SELECT CASE ASC(MID$(T$, I, 1))ă    CASE 32ă      G = &O0        '(space)ă    CASE 33ă      G = &O222020   '!ă    CASE 34ă      G = &O550000   '"ă    CASE 35ă      G = &O575750   '#ă    CASE 36ă      G = &O232620   '$ă    CASE 37ă      G = &O412410   '%ă    CASE 38ă      G = &O337520   '&ă    CASE 39ă      G = &O240000   ''ă    CASE 40ă      G = &O244420   '(ă    CASE 41ă      G = &O211120   ')ă    CASE 42ă      G = &O272500   '*ă    CASE 43ă      G = &O27200    '+ă    CASE 44ă      G = &O24       ',ă    CASE 45ă      G = &O7000     '-ă    CASE 46ă      G = &O20       '.ă    CASE 47ă      G = &O112440   '/ă    CASE 48ă      G = &O257520   '0ă    CASE 49ă      G = &O262220   '1ă    CASE 50ă      G = &O612470   '2ă    CASE 51ă      G = &O612160   '3ă    CASE 52ă      G = &O137110   '4ă    CASE 53ă      G = &O746160   '5ă    CASE 54ă      G = &O346530   '6ă    CASE 55ă      G = &O712440   '7ă    CASE 56ă      G = &O352560   '8ă    CASE 57ă      G = &O357160   '9ă    CASE 58ă      G = &O20200    ':ă    CASE 59ă      G = &O2024     ';ă    CASE 60ă      G = &O124210   '<ă    CASE 61ă      G = &O70700    '=ă    CASE 62ă      G = &O421240   '>ă    CASE 63ă      G = &O612020   '?ă    CASE 64ă      G = &O377430   '@ă    CASE 65ă      G = &O257550   'Aă    CASE 66ă      G = &O656560   'Bă    CASE 67ă      G = &O344430   'Că    CASE 68ă      G = &O655560   'Dă    CASE 69ă      G = &O746470   'Eă    CASE 70ă      G = &O746440   'Fă    CASE 71ă      G = &O344530   'Gă    CASE 72ă      G = &O557550   'Hă    CASE 73ă      G = &O722270   'Iă    CASE 74ă      G = &O311160   'Jă    CASE 75ă      G = &O556550   'Kă    CASE 76ă      G = &O444470   'Lă    CASE 77ă      G = &O777750   'Mă    CASE 78ă      G = &O577750   'Nă    CASE 79ă      G = &O255520   'Oă    CASE 80ă      G = &O656440   'Pă    CASE 81ă      G = &O355573   'Qă    CASE 82ă      G = &O656550   'Ră    CASE 83ă      G = &O342160   'Să    CASE 84ă      G = &O722220   'Tă    CASE 85ă      G = &O555570   'Uă    CASE 86ă      G = &O555520   'Vă    CASE 87ă      G = &O577770   'Wă    CASE 88ă      G = &O552550   'Xă    CASE 89ă      G = &O552220   'Yă    CASE 90ă      G = &O712470   'Ză    CASE 91ă      G = &O644460   '[ă    CASE 92ă      G = &O442110   '\ă    CASE 93ă      G = &O311130   ']ă    CASE 94ă      G = &O250000   '^ă    CASE 95ă      G = &O1000007  '_ă    CASE 96ă      G = &O210000   '`ă    CASE 97ă      G = &O61770    'aă    CASE 98ă      G = &O465560   'bă    CASE 99ă      G = &O34430    'că    CASE 100ă      G = &O135530   'dă    CASE 101ă      G = &O37430    'eă    CASE 102ă      G = &O346440   'fă    CASE 103ă      G = &O35716    'gă    CASE 104ă      G = &O465550   'hă    CASE 105ă      G = &O202220   'iă    CASE 106ă      G = &O101116   'jă    CASE 107ă      G = &O456550   'kă    CASE 108ă      G = &O222210   'lă    CASE 109ă      G = &O77750    'mă    CASE 110ă      G = &O65550    'nă    CASE 111ă      G = &O25520    'oă    CASE 112ă      G = &O65564    'pă    CASE 113ă      G = &O35531    'qă    CASE 114ă      G = &O34440    'ră    CASE 115ă      G = &O36160    'să    CASE 116ă      G = &O272210   'tă    CASE 117ă      G = &O55570    'uă    CASE 118ă      G = &O55520    'vă    CASE 119ă      G = &O57770    'wă    CASE 120ă      G = &O52550    'xă    CASE 121ă      G = &O55716    'yă    CASE 122ă      G = &O71270    'ză    CASE 123ă      G = &O326230   '{ă    CASE 124ă      G = &O220220   '|ă    CASE 125ă      G = &O623260   '}ă    CASE 126ă      G = &O350000   '~ Three pixels wide is too narrow to make a good tilde.ă    CASE 127ă      G = &O25570    '(tri)ă    CASE ELSEă      G = &O77777777 '(blk) This is catch-all for characters not in GRFN set.ă  END SELECTă    G = G - 65536 * (G < 0)            'Keep GRFN data positive.ă    IF G > 262143 THENă      PSET STEP(0, 1), (G AND 4194304) > 0ă      PSET STEP(0, 1), (G AND 2097152) > 0ă      PSET STEP(0, 1), (G AND 1048576) > 0ă      PSET STEP(0, 1), (G AND 524288) > 0ă      PSET STEP(0, 1), (G AND 262144) > 0ă      PSET STEP(0, -5), (G AND 8388608) > 0ă    END IFă    PSET STEP(1, 0), (G AND 131072) > 0ă    PSET STEP(1, 0), (G AND 65536) > 0ă    PSET STEP(1, 0), (G AND 32768) > 0ă    PSET STEP(-2, 1), (G AND 16384) > 0ă    PSET STEP(1, 0), (G AND 8192) > 0ă    PSET STEP(1, 0), (G AND 4096) > 0ă    PSET STEP(-2, 1), (G AND 2048) > 0ă    PSET STEP(1, 0), (G AND 1024) > 0ă    PSET STEP(1, 0), (G AND 512) > 0ă    PSET STEP(-2, 1), (G AND 256) > 0ă    PSET STEP(1, 0), (G AND 128) > 0ă    PSET STEP(1, 0), (G AND 64) > 0ă    PSET STEP(-2, 1), (G AND 32) > 0ă    PSET STEP(1, 0), (G AND 16) > 0ă    PSET STEP(1, 0), (G AND 8) > 0ă    PSET STEP(-2, 1), (G AND 4) > 0ă    PSET STEP(1, 0), (G AND 2) > 0ă    PSET STEP(1, 0), (G AND 1) > 0ă    PSET STEP(1, -5), 0                'Mark starting point of next char.ă  NEXTăEND SUBăVictor Woeltjen                3D ENGINE W/TEXTURE MAPPING    www.trenham.demon.co.uk/threed 11-01-96 (00:00)       QB, QBasic, PDS        696  15189    3DTEXTUR.BAS'This is the complete txtreng.bas file. I switched over to NetScape'să'USENET thingy, and it let me attach the whole file. Sorry about all theă'other pieces, it took me a while to think of trying NS.ă'ă'Anyway, this engine is slow, but it does add simple textures. I'm sureă'some intelligent person out there could speed it up, but that personă'sure as hell ain't me.ă'ă'I in no way am responsible for the engine itself; all I added was theă'textures(and I changed the background a bit, but, it's still mostlyă'someone else's freeware program).ă'ă'Victor Woeltjen, "Pissant"ă'ăă' note from Peter Cooper (peco@trenham.demon.co.uk)ă' -  this is very very slow but it worksă'    compile it for speed, you can download compiled version from myă'    web siteăăăDECLARE SUB CreateBackground ()ăDECLARE SUB GetKeypress (Keycode%)ăăCONST UpArrow = -72, DnArrow = -80, LArrow = -75, RArrow = -77ăăRANDOMIZE TIMERăDIM Grid%(1 TO 12, 1 TO 12)ăDIM STable!(0 - 31 TO 360 + 32), CTable!(0 - 31 TO 360 + 32)ăDIM Textures(1 TO 15, 1 TO 4, 1 TO 30)ăPX! = 9: PY! = 11    'the starting coordinates of the player's locationăStride! = 3          'the distance covered in one "step" by the playeră                     '   by pressing the up or down arrow keysăHeading% = 0         'the heading of the player (in degrees)ăTurn% = 5            'number of degrees of rotation produced byă                     '   pressing the right or left arrow keysăăFOR Y% = 1 TO 12ă  FOR X% = 1 TO 12ă    READ Grid%(X%, Y%)ă  NEXTăNEXTăăFOR TexturesL = 1 TO 15ăFOR TexY% = 1 TO 30ăFOR TexX% = 1 TO 4ă    READ Textures(TexturesL, TexX%, TexY%)ăNEXTăNEXTăNEXTăăFactor! = (ATN(1) * 8) / 360ăFOR A% = 0 TO 359ă  Angle! = CSNG(A%) * Factor!ă  STable!(A%) = SIN(Angle!) * .1ă  CTable!(A%) = COS(Angle!) * .1ăNEXTăFOR A% = -31 TO -1ă  STable!(A%) = STable!(A% + 360)ă  CTable!(A%) = CTable!(A% + 360)ăNEXTăFOR A% = 360 TO 360 + 32ă  STable!(A%) = STable!(A% - 360)ă  CTable!(A%) = CTable!(A% - 360)ăNEXTăăSCREEN 7, , 0, 0ăPRINTăPRINTăPRINT "            RAYCASTER DEMO"ăPRINTăPRINT "      UP ARROW........Move Forward"ăPRINT "      DOWN ARROW......Move Backward"ăPRINT "      RIGHT ARROW.....Turn Right"ăPRINT "      LEFT ARROW......Turn Left"ăPRINTăPRINTăPRINT "            Please wait...";ăăCALL CreateBackgroundăBEEPăLOCATE , 1ăPRINT "        Press any key to begin...";ăDO WHILE LEN(INKEY$): LOOP: DO UNTIL LEN(INKEY$): LOOPăăViewPg% = 0: WorkPg% = 1: BG1% = 2: BG2% = 3ăSCREEN , , WorkPg%, ViewPg%ăGOSUB ComputeViewăăDO 'Main loopăCALL GetKeypress(Keycode%)ăSELECT CASE Keycode%ă  CASE LArrowă    Heading% = (Heading% + Turn%) MOD 360ă    GOSUB ComputeViewă  CASE RArrowă    Heading% = (Heading% + (360 - Turn%)) MOD 360ă    GOSUB ComputeViewă  CASE UpArrowă    NewPX! = PX! - (STable!(Heading%) * Stride!)ă    NewPY! = PY! - (CTable!(Heading%) * Stride!)ă    IF Grid%(NewPX!, NewPY!) = 0 THENă      PX! = NewPX!: PY! = NewPY!ă      GOSUB ComputeViewă    ELSE 'tried to walk through a wallă      SOUND 80, 1ă    END IFă  CASE DnArrowă    NewPX! = PX! + (STable!(Heading%) * Stride!)ă    NewPY! = PY! + (CTable!(Heading%) * Stride!)ă    IF Grid%(NewPX!, NewPY!) = 0 THENă      PX! = NewPX!: PY! = NewPY!ă      GOSUB ComputeViewă    ELSE 'tried to walk through a wallă      SOUND 80, 1ă    END IFă  CASE 27ă    EXIT DOă  CASE ELSEă    BEEPă  END SELECTăLOOPăSCREEN 0: WIDTH 80, 25ăENDăăComputeView:ăPCOPY BG1%, WorkPg%: SWAP BG1%, BG2%ăX1% = 0ăFOR A% = Heading% + 32 TO Heading% - 31 STEP -1ă  StepX! = STable!(A%): StepY! = CTable!(A%)ă  XX! = PX!: YY! = PY!ă  L% = 0ă  DOă    XX! = XX! - StepX!: YY! = YY! - StepY!ă    L% = L% + 1ă    K% = Grid%(XX!, YY!)ă  LOOP UNTIL K%ă  DD% = 900 \ L%ă  H% = DD% + DD%ă  DT% = 100 - DD%ă  ymoves = 0ă  FOR Y = DT% TO DT% + H% STEP (H%) / 30ă  ymoves = ymoves + 1ă  FOR X = 1 TO 4ă    IF ymoves > 30 THEN ymoves = 30ă    LINE (X1% + X, DT% + ((ymoves - 1) * (H%) / 30))-(X1% + X + 1, DT% + ((ymoves) * (H%) / 30)), Textures(K%, X, ymoves), Bă  NEXTă  NEXTă  'LINE (X1%, DT%)-STEP(4, H%), K%, BFă  X1% = X1% + 5ăNEXTăSWAP WorkPg%, ViewPg%ăSCREEN , , WorkPg%, ViewPg%ăRETURNăă' Level dataăDATA  9,  1,  9,  1,  1,  1,  1,  1,  1,  1,  9,  1ăDATA  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9ăDATA  9,  0,  2, 10,  0,  0,  0,  0,  0, 0,  0,  1ăDATA  1,  0, 10,  2,  0,  0,  0,  0,  0,  0,  0,  9ăDATA  9,  0,  0,  0,  0,  5,  0,  0,  0, 0,  0,  1ăDATA  1,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  9ăDATA  9,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  1ăDATA  1,  0, 13,  0,  0,  4,  0,  0,  0, 12,  0,  9ăDATA  9,  0,  5,  0,  0,  5,  0,  0,  0,  0,  0,  1ăDATA  1,  0, 13,  0,  0,  0,  0,  0,  0, 12,  0,  9ăDATA  9,  0,  5,  0,  0,  0,  0,  0,  0,  4,  0,  1ăDATA  1,  9,  1,  9,  1,  9,  1,  9,  1,  9,  1,  9ăă'Texture dataă'Text. 1ăDATA 0, 8, 0, 0ăDATA 8, 7, 8,ăDATA 7, 7, 7, 8ăDATA 7, 7, 7, 8ăDATA 8, 8, 8, 0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 8,8,8ăDATA 7, 7,7,7ăDATA 8, 8,8,8ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7,8,0ăDATA 8, 7, 8, 0ăDATA 8, 7, 8,2ăDATA 8, 2, 8, 2ăDATA 2, 10, 2, 2ăDATA 2, 2, 10, 2ăDATA 2, 2, 2, 2ă'Text. 2ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 3ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 4ăDATA 4, 4, 4, 4ăDATA 4, 8, 4, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 4, 8, 4, 8ăDATA 4, 4, 4, 4ă'Text. 5ăDATA 4, 8, 4, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 4, 8, 4ă'Text. 6ăDATA 4, 6, 4, 6ăDATA 4, 4, 4, 4ăDATA 8, 4, 8, 4ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 4, 7, 4, 7ăDATA 4, 4, 4, 4ăDATA 4, 6, 4, 6ă'Text. 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 8ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 9ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 10ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 11ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 12ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 13ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 14ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ă'Text. 15ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăDATA 8, 7, 8, 7ăDATA 7, 7, 7, 7ăDATA 7, 15, 7, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 15, 15, 15, 15ăDATA 7, 15, 7, 15ăDATA 7, 7, 7, 7ăDATA 8, 7, 8, 7ăDATA 8, 8, 8, 8ăDATA 8, 8, 8, 8ăăDEFINT A-ZăDEFSNG A-ZăăSUB CreateBackgroundăăSCREEN , , 2, 0: CLSă' SkyăLINE (0, 0)-(319, 99), 0, BFă' Moon (Prev. a Sun)ăCIRCLE (50, 30), 10, 8: PAINT (50, 30), 14, 8ă'CIRCLE (53, 27), 2, 8: PAINT (53, 27), 8, 8ăCIRCLE (43, 29), 10, 0: PAINT (43, 29), 0, 0ă' Clouds moved after moon so they would overlap ităFOR Cnt% = 1 TO 10ă  X% = INT(RND * 320)ă  Y% = INT(RND * 80) + 10ă  R% = INT(RND * 50)ă  AR! = RND / 10ă  CIRCLE (X%, Y%), R%, 15, , , AR!: PAINT (X%, Y%), 15ăNEXTăă 'Building (gray)ăLINE (200, 20)-(220, 15), 8ăLINE (220, 15)-(240, 20), 8ăLINE (200, 20)-(200, 99), 8ăLINE (240, 20)-(240, 99), 8ăLINE (200, 99)-(240, 99), 8ăPAINT (220, 50), 8ăFOR Cnt% = 1 TO 20 ' Lightsă  PSET (INT(RND * 38 + 201), INT(RND * 80 + 20)), 14ăNEXTăLINE (200, 20)-(220, 15), 0 ' Building (border)ăLINE (220, 15)-(240, 20), 0ăLINE (219, 15)-(219, 99), 0ăLINE (200, 20)-(200, 99), 0ăLINE (240, 20)-(240, 99), 0ăPCOPY 2, 3ăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 319ă    IF RND AND 1 THEN PSET (X%, Y%), 8ă  NEXTăNEXTăăSCREEN , , 3, 0ăFOR Y% = 100 TO 199ă  FOR X% = 0 TO 319ă    IF RND AND 1 THEN PSET (X%, Y%), 8ă  NEXTăNEXTăăSCREEN , , 0, 0ăăEND SUBăăDEFINT A-ZăSUB GetKeypress (Keycode%)ăDO: Ky$ = INKEY$: LOOP UNTIL LEN(Ky$)ăKeycode% = ASC(Ky$): IF Keycode% = 0 THEN Keycode% = -ASC(MID$(Ky$, 2, 1))ăăEND SUBăAndrew L. Ayers                RAYCASTING ROUTINE             andrewa@indirect.com           02-25-97 (20:00)       QB, QBasic, PDS        98   6466     RAYCAST.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"RAYCAST.ZIP",4^6:Z&=4577:?STRING$(50,177);ăU"%up()%9%%%I-%>J8aF-2(#0p%%%%W&%%%0%%%%wf&(hfx%ySif1yL_v%/%E-jhxăU"Rgl[GN3T)^LQdk+\r3+?83)'b$S+x;o+)JTxqYDf\^&;*A>/E*\s:ei\.\?L>IoăU"V^Z^EMFC][O^OG?luH'%up()%9%%%#-%:DmTG4n=vU;*7%%g5%%%0%%%%wf&(hfăU"x%ySfxOrN&,+tTo5hLEsu,V24z_R=S+%B8gO,=^ToROx%g1wyy4,Z6F;k]P)(spăU"khhZG'lH\xiJs]I-&WDlhXBuGe%liH:M3_l=,]f$8(I7VqBOOJ.O*KCjmaU'q5săU"J_-m&U5?kcAf4U4h\_zS[REg3/LI4hTq/%bLc'66>v1$[>1Gq=oUW\mL.q2?V&căU"PWHpC*Gn=Wj:dLjPb3>ktY\:]B87_u08Fq'E4U>LLB:s^YRm]Hq;MG%R*I9Qd+YăU"3VG*'r(6H=>EbwG(PU2=A1_2BkwU'KI*bSfFNvC%H-TE7.d9^cU3xrIttrgUlWkăU"P#/:,9]se<-#9R-eX1%RS>%D7#jjYIB>DmrKNeH.>*V7Bx9U\,>0^O;Dp[*jFEmăU"/p%Wt>02h7Z4>fc\:l-NghfUp:l_r+Q\Ltm(-)TpQe,u$:WOb/\1f5vF<hN>$aoăU",4cRqJ8RX$235Ck&igEbMil&&#c6IL;SOONoHP:qZha&j(^T>PC/us(]&50+GaKăU"g-.(PZ:BuEjm^&h.Cj&.fHO2&P?%/zfw+O&IB81s4Bif^L#jOCXAD(H1bUw=C/tăU"<8mJJC,r32qT7oA$<?w6T2..=/_KYmr#&aMau\oF>m/A%t0>Y4<\rc&32jV(OmpăU"uF28E4/-ZTg5Vtd1c>=AmJHJ4uQYT+]D$QIU-dR1z&,xRBodB'Z^j;g0;BMwRt=ăU"c2E#wFhYYCBe)u-h$4ODN#e70+92.(tl)XmOFSSJHN^KTrlt]W#o0L$w'lk2/IFăU"2$:.4<O;2;-JkfWA/fTHS+BbDsx't%h_s()N,=U*JJ#I.e3&D4E\>a;lQX#0Rc(ăU"aLP_Ne(94ZS]g2/6d\_MJG%cb,iqh')O\?oj<0Dbyqm,30P&3Bgb,z>c9\A;IsYăU"N]BZ\F3\erxT<_VG(,Cg$fCb3\C\yI$(+&Tcvwthkc(6[Clx3XEu*MkDu=#(/\iăU"5aS?kuF^2YQ9=UWJ'],z,UIo.s1nnp2BLLLUZ/n[,;*^M9h1efcEYE$r?,i=us,ăU"M13W7d?LFmI&>X9-PBb<\Uk;kp^?uCO6d]<\TwWTA8>Bf*(Lgv;6f[M1kSmHmsYăU"ZWBaG--NFs]IF<#O=rC7F^SShN-$llZATLqLKP6h.hHpGb5.sVY^sQHQ?4zu^5HăU"z%M3+;qVpR8jC?6KPV3mH3Fs:EcPuB4sc)um3CjCKogLf]M+u%PosXEdeq1o,kYăU"36B3Afqs:B5z),Cy[8mL<z2d2g<;X-+J&f\pe%kFek7Z>-%,yQ<qhKl/n1w-oBuăU"2B\7mU;2$AG%qP-2]<2'^T]F*9iW2G5Nm:h60OKx=mc.&Zo/;>iRuWuXab:hDEkăU"EsxirZ/r9lusC<R?9yg-Sl^dJN)19J&Umf;VDSG^Z+zt(\W%6t_(Q?f+B-1ByKnăU"L072Dp$UJfm1QxE_gcG/u??VnHMiJy5^gMfm.,5<0IX42[[XW[R_hD;04^9x1YFăU"ISaz\5Tp&nc#Vd96PN$Se<'=*876B8Y:VaA/tolJ/#%8Whw;k4c/RzHpLW0Bcg;ăU"6UjVUyHS2rMhOh[Z<0ogh8&KSt%W/Dn^k58JK7JPbhL?gHcz.*(3'eIY87:9rh#ăU"YK&2DeP2[#7)r1?OhAla+KI<y2X>?]b/>MeKt4CNDerw#Djwa,QLW4(5t**jGAdăU"g9[gz?^Lp&.)i(9z\36NYNNkiOAQf8EVblhD0s:dd\nT;Bc0Qhd0Ur8s#Ys4M<wăU"&Db+TNJrd2nCE#aVvAE3F'uu^$:PCgGZn-fSGLv#/A1-Qo#nIOp=.#sqa=8'luhăU"e/IS14st=v&Ju,P7hQC+3,uLi_;b_N_Cjj64BOam*&-ER(L/Zcswfq7icC\KD9TăU"XV#?.[)>Jn726nP&Zr&++t4u%p()9%%%%-U%W%(dGYe>)Bg/%+%EO%%%0%%#%wfăU"(%hfxy%Sgfx<F)dxc[C7x8=:xh5.GI1('=K&U1JNy1%#t3JQ0Gc'tRoy[o)T=O:ăU"G.Ni$dH]U&GO*YD%&Dr3v$PObVlh&m>43addL0;FOxfrX.XtED?WJ>S>u2fx3eiăU"UU.9^/U$7\Q8wGj9UdLK,fhRK2^bhd;T%iXPgG..DQ(-F5:1htIDCL[<K'5RSn(ăU"i6\2=cFG.uJK&nd*xC/IZN[4;OS\^+Y$W,n:1:^hH-&[$#T;QFaAYP4?+XKo2BVăU"=HF]QTp/?WVOo;=73D<#U/_NcaX*Ln8U4lNXQ(qo0Xp#+\:Y)5r^V&co?pidJKQăU"V6S==2U;/UQL$OEFraLps%J=Nye;q:Z38F?%f9-f:UH#eMs.;r<]<WE&QNdKX>NăU"&RTn;A;8cg$x=(MZv;_r;kR]t*[$'oJ1SE)q;+ps5gVsW=j:dG\bR&BUZj10XeJăU"S):JyMY%<.Q<]R4'8RFPoCMB&.P_<NnPAB0XQB0]fFY\/hyap\l)mRBOx9iR_&NăU"?[3oN?Y\>D<lb/21o.>^Ym^2FU28N/XNTYcnkB[S]TVYbTZ)KUnXJq5py(646/,ăU"XG/F.Rf%NLNS:S]-J7f/E)<x^jwKJQQqY/3MwSRF:Mr5ty=-b)g2NgEu[^D7.p5ăU"rL9(u37BXV:kxD5_2pi1E<L^c9(bAd:/1YZ&h67P9i5)TjIkVmm',)K?J4MgV_IăU"/0C*0d=d+w#X#a4niQa]UmFH%EFpmd0v4_8/58^uxf4Zt6\8pgbRHbl]kD:UGVMăU"b#4z[tM7UBVo,^eAbB1N3j&zQX4Z7DY%XvKFAe#dK\g=^ge_sQ+=oWEFO2;aI>&ăU"uQC$<N?R.S-p=04gONQIDte6AD._6k:*OM:,vqA&D0r4Cj%,]jOCkXj)^\/h,F6ăU"7$D&iRc93;l]Q*g47:[.tLN*iY1^6BY%TOKgn3B/QK]0s#Odm<sOI\lamig'I(yăU"'pq+n*UZ_892w4T\\JI%BR?Fx>%&y6ene/-&%au5Q&XuvFE3>TF?:[ND2R$VGRYăU"Ts.(1zw5iFy;O53lgYBlu+v23d9JmQDGZk4wbSjQ$>DNr:E..r(N>-94d.RVkLnăU"HW8rLWc[Z1KkmyZt8)EDU%7^UJ3lDUD$.UF:C\vUrHEmtWrC7'<Id0oj>0Cb/ShăU"wzZ)f/d9T#Jrjn^_i[P#AgPeTHs[yyS?*fM.kr5O12)7Fa=$H6&TroOu-tIXYroăU"g0_-N4NGraT=#6=P1g3TTBS#8A+raU<M7JDiSit^$7?1u,9rf<lwd1Iq=-GP,WPăU"NGU=5Qptr;=4/+*eDia\-?>a.sj45]P7AgLB\GAc0:LJr4lfF&k)X]-iDFqkeL:ăU"nu^9?XOkDkWW[dsd]'Y;,>'MLa9EXRLe\nE<0S8lUuqo.RFmay#5bO1Ll;NL8+jăU"*6Pv$]+A]Mbp8OIO*UXc5O##mmc1SV<8Z<1H./=)]wQpD[DVZ<?Qx_p;1(DsF2/ăU"RglXYuVL?-OR>*FGEsxWd/omcEYpDf]LjZbe]$OGJ2)C,?vEg)ZiV=\tC[Z>?0;ăU"3Ys[RTJPy0]MaAAtmk*mM\]+-PKf:.qjAILJd2QMc<nb7ULPPKOjf;^chGR:>h2ăU"*f+AiYA1dnz?G9Ip6[+Ie7PIjZW8e:_=u^FubIan-lS$a^SD+WuqHc0Eo\iN.->ăU"cG=hy?(;,;/vUTme%F#.i.[*.Wmf,h;_C>YJ#g[6JXoBw_CY1Qw./)Tkn^8:K4)ăU"ghMS*5/%F0UkkGy7B9J#r35]o3wnFBm%,]8)eF3(fh$m[)n=D\11EqU.0wS?]e[ăU"+6?GnIX^?rdVR3M/?kU)WJ]USk%pzQTAg-=xa-*MCp?f*NCgg/J(MUL8>J1sku6ăU"DfDH]kLTZtT)1QU(rh]Pig/G']3SJF=:LTdzCHNSyxpy(srwh?'\.A2v#+hAd+WăU":4RTz^$nB#0+RK[v*DB?z44BehD)H:$]vSgWskF3\S1yL=.ya3Bt&E3\&g:,Z8:ăU":Lia:]ZGT&mC;77NLptfS%:5Ca'\VL;.T$GjS;b[ulkZ\5PV#[RS0NQRId8t_6*ăU"c;ZWkf8d$lr=44n8T3wwOGKV/T*JXYjckzWCD-GwM'u\2:buTtHP4B1GA0]6n+băU"+,*W3[3ta$f>oub:4SntX-n5.oVcT<h)So,?0u8VvG)TnysZhCdQsyGuM-63C7GăU"pXu=e^UWG(xH>l1a71)Th/CWrrtLgVIKU>*Q.qX]dG%UOegLH*of03J,7h'bXaPăU"i69IWU'1w)hLhQq_UuV,m]UCJiliU-,KL#GCm+n0h;IlDAHO405q_?gn.Q1aS.LăU"p<WM5SjAR$7EmnR)p?fpDbU_TnA8HkXCS$-In)B?B'+04bgQ?<8Wwu#)'MLvR6NăU"j_ZH=?R26j9)1;U&MOmA4mL^16]=_a([hDbsT^o;6Y^ds86hn='8[wk\p41<KSxăU"/w]<[92HjDR4=9s9Ui'+PB*f\L4.4ag)(n#j>aktv8mUu*/s10tSDGs&o.9)sfSăU"o-\OT(4w)FQ&[ydlJ,ONBg-&D:DqAm;mOkXGHxTF*Mp%::k1qJnv$)oAV3:IO1SăU"eA'E:hW.AxoCz=NM'wJ(\WS&W1Y/-c9g:Ce0HBt&];$MMdgz-1m%uI8kL.T+(:săU"0DQ\riNK.ywvN^YsDV,WEOPm1NbuW0\T7M*HZ#]B5U3$NZDU2#+c).^(E*J]Hq?ăU"4tK]aB-ev%Bexe-*JC7W3W<Jmun?HhlsZYwHIvN)\G9(+j4$1Qm_??L4Y*/;2HQăU"u]>OggqhFXRjbrG3,b%fIDd3.rsi-pTqP&5rL]#/v]%4W#9JXt&KcUC<Fgps-heăU"9pmAg1u8+Du8Ghb*+IC<v.G77Rnq<8$6fz-egtpg98Hk4k$BwUIi+q2Y;,ajh=răU"Ohv4W3Q=AE$4db<uaHO:*9kMDrM)M_z+5^P]9JKEag78Wc9,xrO7m[]'-o3'F9eăU"F^Q\LR[*W(q*.B:7''(Zb^&kZP3JR=pW>lKsf\j9,?1BI>EVgHX0Aav(]*-%7G:ăU"Ma&E?\QlJ+^fN^BE1CvSK]11F.C,qj0h7qP=2\p09PYF7rYN=&4JeS7F=EH4[q9ăU"o]mbD,qZMCE*/Tws:VF$bfQrU#VhTyT1h-LjT.;wi,lxA_c%&:DngFH(tsNj-wkăU"xZ[NU*jX9UuI:KJuBNC+t>%r&,R^,?LL'SK>t<Xp(#e>_amhjFEvji6NscTp45=ăU"'G-[N7*Z^>0KDB0FuTO*>hnsu]b)>c;n[oV+4P#DynzB0CGuFkYW;\Bah:OpT.ZăU")/f&GOjw9XPMok+Co]*$eF-&.8_wWC=3F3*HlNdsF&1hklHek04UM'a[+k<;_qDăU"RbIF^E<cdQ$,<Oncm2IHO208%_sH[w]$CNDS.AdRjuSkM%ov4SbHMpB+PkiL3R8ăU"(JNcY<(/dKW:9d?[kpln'oW*d^nt^BHfZP8/gk6=z*M<5GXdcri],^CGX9>okd%ăU"up&'%9%9%%%%-%2>JaFB-2#0%p%%%%W&%%%0%%%%%%%%%&%E%%%%%%%%%wf&(hfăU"x%ySif%yup&%'9%9%%%%-.%:DT=G4nv-U;*%+%g5%%%0%%%%%%%%%&%E#%%%C%%ăU"%%w(f(hf%xySf%xrup%&'9%%9%%%d-%W%A(GYe3>Bg/7%%EO%%%0%%%%%%%%%&%ăU"%E%%%&.+%%.wf(h%fxyS%gfxu%p*+%%%%%(#%(%z%%%%E%6%%%%%ăEND SUBăCLOSE:IF S=97AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew L. Ayers                ROTATING AN IMAGE              andrewa@indirect.com           02-25-97 (20:00)       QB, QBasic, PDS        56   1245     ROTIMAGE.BASDECLARE SUB RotateImage (angle!)ă'ăCONST PI = 3.14159ă'ăSCREEN 7, , 1, 0ă'ăFOR t% = 0 TO 7ă  LINE (7 - t%, 7 - t%)-(8 + t%, 8 + t%), t% * 2, BăNEXTă'ăDOă  FOR angle = 0 TO 2 * PI STEP PI / 15ă    LINE (159, 99)-(189, 129), 0, BFă    CALL RotateImage(angle)ă    IF INKEY$ <> "" THEN ENDă    PCOPY 1, 0ă  NEXTăLOOPăăSUB RotateImage (angle)ă  'ă  cx1% = 8ă  cy1% = 8ă  cx2% = 15ă  cy2% = 15ă  'ă  FOR x2% = 0 TO cx2% - 1ă    '  ă    FOR y2% = 0 TO cy2% - 1ă      'ă      IF x2% = 0 THENă        a = PI / 2ă      ELSEă        a = ATN(y2% / x2%)ă      END IFă      'ă      r = SQR(x2% * x2% + y2% * y2%)ă      '  ă      x1% = CINT(r * COS(a + angle))ă      y1% = CINT(r * SIN(a + angle))ă      'ă      c0% = POINT(cx1% + x1%, cy1% + y1%)ă      c1% = POINT(cx1% - x1%, cy1% - y1%)ă      c2% = POINT(cx1% + y1%, cy1% - x1%)ă      c3% = POINT(cx1% - y1%, cy1% + x1%)ă      'ă      IF c0% <> -1 THEN PSET (159 + cx2% + x2%, 99 + cy2% + y2%), c0%ă      IF c1% <> -1 THEN PSET (159 + cx2% - x2%, 99 + cy2% - y2%), c1%ă      IF c2% <> -1 THEN PSET (159 + cx2% + y2%, 99 + cy2% - x2%), c2%ă      IF c3% <> -1 THEN PSET (159 + cx2% - y2%, 99 + cy2% + x2%), c3%ă      'ă    NEXTă    'ă  NEXTă  'ăEND SUBăAndrew L. Ayers                3D VECTOR BOB DEMO             andrewa@indirect.com           12-16-96 (00:00)       QB, QBasic, PDS        131  8634     VBOB.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VBOB.ZIP",4^6:Z&=6208:?STRING$(50,177);ăU"%up()%9%%%R-%tLn_FRM8HXC%%%%%(%%%.%.%%%g%tgVS[ufq^IvfZU7E9uPPBaăU"oVW9S9_'qGIf1UpRCs_EhxU>:.lo/34P_lVUa?5jj+#,gRS[5s;sGRo,'/zLHWSăU"m,8V.)Y/&%,iE(*NTguRN?<8GqpqX;tKtd%Z-/j)47Ks&mcV:QWsvU+<thTjJ-UăU".&?3VG56M:w__YY]^iIWj3of_?cS;_1hWg$X?^Pu4XD5A^7rMi()u:/I0[hwDp4ăU"DrZ3k>ikX-J/<EPDZsS0=?#Pk$H(ne?U3Z'T/djwoLx;*-x/&.up(%)9%%#%-%2ăU"\TVGc2Gt1t[7%%W%f%%.#%%%%%gtgV%SgfxKV$:Bu[1+X<09wh4tg3h:7/u%d'xăU"60NCObp7s[Z)256BDdD1WYOX?1;d6gMv7zp+RX>kSi&Jd1X:&xNTE.)wzmRD6t9ăU"^-sISlKZY/TYUt?YoZtCW4YPpSli/CJ\xej)QYA2.b_V47<30OARZ6X.R94+B5RăU"nFw:R/=)M$8cQGl4un*L[FRQ]-:5gLM_qjU7VRS'(%=8m<_Cb'x.'k0kWZ-Cn'IăU"n/Z%m.<<c?)1[=Rk1pGQNGkN;[zeIgJW6O59k:8#DG-5T4/n-K\_1F=%xa$;A0VăU"RMmRJ'11LnA_-CB&3tw+n3c$;-ciJJl91Ab1Ogan__oKL7j5X65gKWKn8:'O9D.ăU"hH9QZe2F,#QpC6&c')#s*2Dvs/wWFNrrHWx%HL-()&9vC=53E5pUOV$[a1qty-[ăU"p-)u(Ttp'VFcG?LQc\S\8hs5R-xJBGwjcb+-_.F*AAR$3)S?3G*3s/48=[H%*v)ăU"(j-K>QG6:IT^%u.ZfSeSO;nTbO4//3+IYsHRu-/Y*4oa,7^Q#5O9L*$'1,=.DARăU"q$Ca,^0;.63OK_??v?2i$J7'J:<ZO6</a<M/,-%=lnufBN\hInAag6N:Zw2)TWUăU"8'7q;9L2#IRgl]a__W)5otf'h856'u$CI*d%9b2RgxTc;(%uf1_Fkx9=J%/eo$5ăU"+3HmFEMDGn$9*9]w-LK+D]N9D*?B6vG_6qXCPSU5#pt-(<$WYm99$*]:n9B4uM5ăU"Ls3?;p>iCOsB;ln_yqi]'H.uu7X4mD=K=L-b;E3g>>RCB*.<3C<Sf4;ea4J5XR0ăU":)5Cct:.eK'>g_9,hjN<jZd::akB1^bG?v[u(PiGXBr8s8N-n:YB3;1mhoNY5MVăU"R,hX<mlk.&POq1&^.[hJ8$U3*JFB4k,#UkXA]b9tn)>B*EnF/)S8U##+6&UY[AVăU"1b\rzm7W'>)-S#7$E=S3RunA[GF_SXHrpI)br2HCWCE:t,k5&D?N_VrBVcy%g4VăU"d\sO%/ko$vu=3d4Lji<gt2%&lPW12HV]TFr*a5dMuQ//i#:7a*#O);R2;IhAh3;ăU"F+#nU5vJMCwUzUOzo'um#KmX>3CouM\INXchTWB8WKeRKVC>&f1aolDWlxE_IK$ăU"m6Z_q$+s;ziHWv'_/_>GH1=\>+/&<?'R['haAG<]XNO4oNKN,3xP3W_cFIp)Q7YăU"JDnLiaKNGlK>PUJ(K;8H=u&YrH5>5LJ3DY%e?#gzcl<hY2z+DJ'^:DxAhcHlVQ3ăU"\09cg>$.,QsjS+M]lST,inws-BMs5v6C>#PSl)L>)FkZT$'Q$^U$+hqC(AgC-PlăU"^n\GdQ0VB+;g8W[Wn6PgC_]#WW:[:cq>85=\w#wx$nsiWD:AH#,B^qaIQjoT7d0ăU"?Q.\01QCRQT+cF5xKrQLnH.847FolA8W02b[+a::za#^hHkb#a+rmc]p)bGf.q9ăU"A9+GG_HB[-Ula[A+/1=r8.P$tQSgyU5(,LKP1O*\+e&DJPCH_01Oktc\1]r3CJaăU"mFOQ+$u[6p18z?:^[w]/ROpCjZ7#[jC=)O2>oQ3l]h9&BD76,VGg)gsX?27*.h;ăU"He\KkT**K1#HrifAvYF3SyGZFu8m'(Uk2qbOXbBkFhq2k2udP6EMrnQG/PwI\WbăU"fE,]EC1Bfvq]P1LG,(IPM=/#,_7]NN_:B>Rz0U[k5]109FC.KNR>_AZj%kZG\CJăU"y?lR5+_3ELocwIG=ZN,I7speP4-g[]]x6V(gQ&\igu'rhzI*v#t>l69wMnL$:CFăU"^uAY20Dm_tA?i6*,3fq7zJ:Rz91:OUzO:x\9XR(Pma%a).LbDb/^dsFNL==b/F>ăU"GYLtjHadn)zjXYwOkIBf.e-L<<Y04TRuQnWYB&J6IZM):ArRfCWFdK3/\[BlU/1ăU"#Zyl?.Bl*m?Oc=g)2q3K6)9/^2OH_W8'+L*A=u:iV7pn9:BVb'%LKCgM_(YmrEHăU"MdZnpS?bFm32P4L9)7_kFSfnezM6E/in>'mV50\=1ALh[rZA#qV]aN?V>^]4V/aăU"F?[=cQ3=TL92j1J;x[,(;2mV,SaWq(6u)xgehNFoelFe=mFanc&M:&8-G':f5r8ăU"_uYMEJ8x><xLP\^%7T6P/$WuYLi\9uDfN1nLeuyx.S%GOu:Ef_j8P[BB^ln(_FIăU"(ZiT;KF+q]2MDHFFX2Ni+2g4B&5YJhyq%B)9GY\yEQb;b&FkYb+=%myZt1K_AEmăU"PkX5b^nfX>JtQ5iV$<FujR2ekXdVihWVnT93>-\l#Y6UYf&x=/PG)L0hj%#hh7KăU"L\4(gWAS_zNmSrfM-to\YK?%N6MNI*2ug)GLv(YrEQ16Vxihkua#LhPJM\L(G_NăU"*0K<%7&-WU17RphY64Z[v95\a-8iEKB&kZDTD6GD9D6Lc_nPx$(#;HfJrMGO=_HăU"fsvh?p6(9E:L;mf0.:iSVO>SxbIj6=xr\E^YAMgLE,l\CAn:rc)elZBk[(>vGn7ăU"q)h9OLE\G/;eyNAj'%KG2c0;kOVg8*>nx+e(+5sWNr65aY0At^[uH/D]]W8ieCsăU"ff+eY0=9iya&8tJqDB4n<(BDD)Pn)O<^X$Y:-f:B3Bj4Q)itrO)NI\H3xqaDtR%ăU"\\UO?Y?,K,0QOUfLgU7G%8fK0qb:?^jgAj:r4VicG4'en[J<^mna2TRKT^iat-7ăU">Re&2XdFOiI%O/F_avO[CZuG%^taMG\D7S?r-ei->AkyAFKyh08qWaB#aph/c^6ăU"XVyiHte9cZC#wy?s#5(Y%N28HcKV:j6jsCAf>e>8QS:l?)f$D5uS6n)PRMqFmT>ăU"4R;H$U:7;jR/>'aV,bVeV5;l1M7PVef5G(/\tU[]T%8tRTe9Qq,Nt-\4R0\9^e+ăU"rL%(5SG/'/Af(YEO?73f#&I$<Q*DZvTI9eAbO?s<GfeWO$O6^nNlhU(FQF]Gq[JăU"%FEAYRO#KXq)lal._95O*qbH>W^F:hpH'^'Uh?q=%:sQl=$(S'K;BXIrsJCvi_măU")$7to[woEI'zT.LdJe4+z:Oib]up8+\_Qlmc1'wlbXMA]_+,mOcXKw*1]WdA7#hăU"%I_**[;5%xB-G]u?MJWs5P5n<jYXu59FpJu.iW'CN-kfj'[Xtx?a])4+d;X9B,/ăU"^eh5RhU#XOZ/2,[v#e?GaR%:iMC6kWuc\F5rVrY$vVE5E3lle6dHHcVV&HkqIn5ăU"<$\VV>fJot?Wh_sl8>x[OLhD:>F-,%uf$f.lQTk,e+eEw+6DdcDUa$r]SMT(r(VăU"i^S9a1ctWsZE0s).,Qvj67TlwhAhs]96&W)VcH'(fn#)viv==#B2h(NA^$Xo_?CăU"Xn1glfW5VY$K2]<hMZolufv:5HI#j&PI.rb/3ELh>gs=d0>gXAc,w-px^;=DLR.ăU"Ph8__r._7&;#I4qD$[pD<DdHgf<[?CM,VV691RnLn*ZG(+3jvCB3F/i)KbG6aS3ăU".MI66'x]S_^OgE+?O=;DWuNcB*xElD?wsu8OZm,*P#22I+fegNc,H>$E=:L6sf^ăU"j'=r=X>V=D-aJJOaPtQIE=,.hr^d;j/9*kxU>'CJ%R..wZ'J8sRys2]C(#,VZEcăU"kXDi/JAc?J;(9.-Lq(^:90+yRub&<p<I+m)Po/J;A>lcaWpO$]\k1U\^=r=SEi#ăU"wmA$LYd)AhW3Vq^piW'n39G+I$VkG$4o#Vr5.6:p=Mveco6O-c:qA:fPE3kBB7năU"GNxRWFSfJ:cqcqOpYH6hnZ<A8OlX+r,JIE:8Cl36ltHVJnW^f*.ubWwbq,Q_3^/ăU"_$)i%:=%.%^Q/\F0n#D4Dy,HEeT,Y2_uWR#H(kgqNX*64Nn57zF_2TQ==*Ru'^8ăU"$;gX[8sNP20mOa5dshy[8e9GlMHNWr6+eE5Ls%#n1-(#:M]gk;K_aJMBU?T^)j5ăU"^*LM\j5%j*MFp-ZC[]/M/dLOw2]Y#\F26u/z[4d:7Cf:UqcA7Ac_raTrbo5aG^#ăU"vQ4q*-o?U*6QkZkUHHtlivWt8&ddAkDx._<ab<#rg[(ttujNg+,]HI&>:=\LQEbăU"tO;?c=',Hh]\#xh?;Kk'wk8Nl/#(DVb&C1LjhA/)Yb#WtZM88ua<7>5WHo?1>*uăU"G-.HWJr47=z,R^0R*u/x)zzRgDc(m_1KiJ$AYZ;t(7>D>pgQ9pr>BNJ's5:<HWxăU"ZUQ^?K>Y,SDBU*z3_/--^V0;W\V'.hK,oyUc9wkAI/KS<RUm*9lF3p3HM^\wCy9ăU"OCE#+/-6,r>sB(yCkjP5NY3Y0mM+H,o-98hLi87?KUE6xwzpZ7<h9a1WzVM]YqlăU"Ti^XQ9.45[v7n+ofc+&1f5Fq7Wb^[G+,\3KU9uH&rpl\2*36tE9E*]lO>y'qGe:ăU"<p4I$Yk+OYkllg:_IPl2>XaaBz4W\?nj3le:L^+,^&pwYB):E6Sb<$8JhHvnrnkăU"AWMWG4[QX8<Fk+8[1A)+\P\G+:8?[Bp$ebXDtt%6Bplf5TB%.zuvx*)#W$W4V8qăU"hs+xaCAvSF%\$1oAz;XH5vTtsO\%lri)m8&Vh9dMN?*lqpSA'AW.,;8-e:^PuZ-ăU"oYa9RylM[:wy_HJoWu[g_qS%p<whT&U1+B(M&dspr%HF_75Q*%c(r3]>r;g/LF_ăU"mmWrQnG1JoC3Uh>pK6Aq\JP<cT3\sVr'h#s#u9^jCQM,uRgqFtE0J+Zu/X>6046ăU"RSzLc-lTh(5Zgl(]q4lnHt,(RecT$bHq9*O:bjGya;QR;T-N/]$I9ifd)R.<,/?ăU"/N1]sD)nJVO1np%5GfmO]R<?-Znd?vVl9dl?/UMDghYq&nQXeB(pl%M(2l-wq:+ăU"?+&UeY-P/)kLP>.+$$STp$'/e?7Xg[MLzff8Kvk?URzV=/*24aThj\dU'-LG+2păU",>uHrt?S*pTHtrjiDh:;6n2ieCOrrzRK;>F&kuP/U7ud0*.<bnt,R_LrJd/,eVGăU"BTB;B$a?e5r)J^Q5PEJpRzJgs-7R1T.vOMh]wPVM9J%r]JgO4i^IwVb(<65ffCvăU"f./Qvac_t^c_m/\kAaLo<f'#9=hd>Fik&Qs^PYk(B=d#'TS8A=D7/_TvS+A:tFFăU"1]6Xr(N;qzNvv^AT<s1TI0NnC\6I,=wM\>Cx/#;-_U2CT-ZTsXp,SAh$/rBs2PRăU"DZITzcTG0'sH)G6e=<&=TlXX<5FId?dR&>$<.]9:J)Yn?Y=TH,u&jUk\1<J2*IGăU"tqheUC5Mkz'QecS<JN4eAoke_U&Q,OMMUb&K7t=QS\oE2^EjR(j2NZMMA=V-&<lăU"V)c^lr8A<r?*V)o-6h5(oc626w9Fu$i47\Rz9JG=bm(eL5WMDp,&WF:RqS^VYKuăU":BhCSl/u/fS9uVu,9h?<(pVfjB;G3e?R&J7H<=j5vc(;VdH5s&rME&TDfqoaO*EăU"zkX37zsZrlyJ%D.,Nmt=h5dN-J6QtRkwo+S(lcZhHL%$WHLd=NhR^fRE%p?kSdpăU"qj&^BQgR0L-^DpoqTd1d8SRamG&\ot;G,Z);*^ZHk6mWFVHZM:i.ds0Ttn0JCnHăU"^N0jFnHntC5[=R.E#E8WyJohq.Y72D5d>XMpfu-GGv*Qg8N/^?+27PmT^b%(yfUăU"'dpgo9bs7ZZn-K#du\$#O\YYU/Gs?Mw]67KV8hU16s?OH?ci5A+)m_Mt*bq>7?tăU"m%4K8nh$,+TGrFU3fLjpG)FpsOgT*LH[JF,>I;$Va9Kg1%7.CXD1rYq>It4*boBăU"c\UU+j+zXG0hTAKYVA<t-Qk\OY4vdSTU&7Crk'qfzxvu:]q==m8ZR?8[C8PTBIQăU"ITZtG<49+:D(xoEf(/P#bg09HcP-<TFJnK[:GopI_XQ:7M-c?SD7zd>)af[&-KFăU"op?vYC#lhD_j6GSI'GVdCZ$,mQBl,7h'U>LnU(GJ7DeyYY;1Pr;X5cfbMn^>C\7ăU"C9N*)J.[Kd$u9Hb]nChP]N*-'wYa198t,#qUze[1LQClbad?D\6vns2:-lRUR1făU"1m68Ms:OUbjSL2D7R_z*k\deM%m)gB4,iwTu%p()9%%%%-C%;q$jFHW=&?>&%%%ăU"L-%%%.%%(%%gt%gVSxRuwfd9Js=Ed5jHm:vg20Sl=cnf3d=[.%*UkR8ZRD=D]f1ăU"FRmCUumvs_uUdLNXb4t[7%)D5V/0%KkMwE\&E3-E8ZTTw69/USu=55Gf-Qoe4CTăU"PTbhviW)qu=*-Sk*k4'[tUJ**exXFFny+H,&Vtjvw=IfMhRrb+JWaCV#)<$i[M8ăU"_Ye7TCj)p<J$&'#j?<r6jUo5&j4MshMFH7lfYCG8cjKaY&Spk/5kn44)upEiR__ăU"-,S?i[(/U)dPvvCsIY?Tg4Rwwt37AopVc%eZ;_7]YCg:KDREV/Q(l%,:h:7lWinăU"P#kRQW)S%i76H.f^).>k[;)GR-M8^wwh0/?Mhw5K&KSW^MxT9#Bx3,kt%u%p()9ăU"%%%%-#%\q$[FRI$*JI'%=%px%%%1%%(%%gt#gxf%%jSxuXwfN,,]LU9X+I4SPjSăU"mup6909g7H/:\;%fKGn=>P()W3H>#uo^u&VhQjv8MusAj^TPvAGjq#7fIo$[./NăU"D<n.kNwH\eH+t.HK#4v]Vi$fdpTxOlVP:RRRU$GoX+<K5HQ1baB$;dIi^l.V)VIăU"]7Tp'b:fnDRVe<6zFv0fxZ.Thnd=AeG>Vg_sQlV->ihp,GTP;pX=WV[(_0H6sHKăU"f6:mtU#+o7=05k<)sSrvO>]NH-m.g[GDG]^ar\YE'^Ag^^*#iZK^&g2FQ*OTRu#ăU"k&3<*\E)P;')bC[8r^&<ttMS#-X3LdLXgf'Q'[2$jWFd#Z.mU8g[g]#uT=IGH,:ăU"Z-4pH^TTl,Obu(L-?Dt3#vb8c5_bKe6ctGU^K33'EI:\ck-^4T$BJUW+6VM[kETăU"x0hFUU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9O%&(+1d=U/ăU"9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+ăU"1=U5/9O&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1=OUA/_ăU"0:ERf(+R1+%>1W=S3UA/G_:ER.f+R1%+>1W^=3UA;/_:EARf+R%1+>1.W=3UiA/ăU"_:(ERf+&R1+>m1Wwp*:O&(%+1=U5/9O&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*ăU"9O&(%+1=U6q4R&%(+1=UU/9O%&(+1d=U/9&O&(+#1=U/*9O&(%+1=U5/9O&%(+1ăU"=UU/9O%&(+1d=U/i-UjBu%p&'9%%9%%[%-%t_L_FR$MHXC%%%%%%(%%.%%%%%%%ăU"%%&%%E%%%%%%%(%%gt%gVSu%fqup%&'9%%9%%%I-%2TRVGcG)t1t77%%Wf%%%.%ăU"%%%%%%%%&%%E%%%'j%%%&%gtg%VSgf%xup&%'9%9%%%%-C%;q$jFHW=&?>&%%%LăU"-%%%.%%%%%%%%%%%E#%%%6#8%%%%gtgV%Sxuw%up&'%9%9%%%%-%.\q$FmRI$J&ăU"I'%%-px%%%1%%%%%%%%%%%E%.%%v9.%%%g%tgxf&%jSx%uwup%*+%%%%%)%7)%XăU"%%%%p<%%%%%ăEND SUBăCLOSE:IF S=119AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew L. Ayers                YET ANOTHER STAR FIELD II      andrewa@indirect.com           02-25-97 (20:00)       QB, QBasic, PDS        52   1058     YASF2.BAS   TYPE DPointă  x AS LONGă  y AS LONGă  z AS LONGă  xx AS INTEGERă  yy AS INTEGERă  col AS INTEGERăEND TYPEăăDIM Stars(1500) AS DPointăăSCREEN 13ăăFOR t% = 0 TO 1500ă  Stars(t%).x = INT(RND * 4096) - 2048ă  Stars(t%).y = INT(RND * 2048) - 1024ă  Stars(t%).z = INT(RND * 32) + 1ăNEXT t%ăădir% = 2ăăDOă  FOR t% = 0 TO 200ă    PSET (Stars(t%).xx, Stars(t%).yy), 0ăă    Stars(t%).xx = 160 + Stars(t%).x \ Stars(t%).ză    Stars(t%).yy = 100 + Stars(t%).y \ Stars(t%).zăă    PSET (Stars(t%).xx, Stars(t%).yy), Stars(t%).colăă    Stars(t%).z = Stars(t%).z - dir%ă   ă    IF Stars(t%).z < 1 THENă      Stars(t%).x = INT(RND * 4096) - 2048ă      Stars(t%).y = INT(RND * 2048) - 1024ă      Stars(t%).z = 32ă    END IFă   ă    IF Stars(t%).z > 32 THENă      Stars(t%).x = INT(RND * 4096) - 2048ă      Stars(t%).y = INT(RND * 2048) - 1024ă      Stars(t%).z = 1ă    END IFăă    Stars(t%).col = 31 - (Stars(t%).z \ 2): IF Stars(t%).col < 16 THEN Stars(t%).col = 16ăă  NEXT t%ăă  t = TIMER: DO: LOOP UNTIL TIMER > tăăLOOPăăAndrew L. Ayers                NEW IMPROVED BLAST! LIBRARY    andrewa@indirect.com           01-16-97 (00:00)       QB, QBasic, PDS        660  43366    BLASTLIB.BAS'Blast! Library Update - Copyright (c) 1997 by Andrew L. Ayers - 01/16/97ă'------------------------------------------------------------------------ă'Hello, everyone! Well, here it is - the new and improved Blast! Library. Iă'hope everyone enjoys it. You should notice a few differences. Number one onă'the list - Blast! has two personalities now! One version is for QBASIC usersă'while the other is for QuickBASIC users.ăă'Other Program Updatesă'---------------------ăă'BlastCLS! - Finally, a clear screen routine! When BASIC DIMensions an array,ă'        the array's elements are all set to zero, effectively "clearing"ă'        the buffer. Everything went well until I split the QBASIC onlyă'        portion off. The DOS services function to allocate memory doesn'tă'        clear the memory - you must do that yourself. So, when I ran theă'        demo in the course of testing the Malloc subroutine, there wasă'        garbage pixels in the background! Now, all you have to do is callă'        BlastCLS to initialize those pixels to any color you want.ăă'BlastPrint! - Also, introducing BlastPrint! This was a sorely needed additionă'          to the Blast! Library, because there isn't any way to print toă'          the hidden pages! Now, you can print text in any of the 256ă'          colors, and the background won't be erased like the old PRINTă'          command (this has its good and bad points). Also, you can pos-ă'          ition the text "pixel perfect", because coordinates are passedă'          in pixel increments, NOT character increments.ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BLASTLIB.ZIP",4^6:Z&=31091:?STRING$(50,177);ăU"%up()%9%%%R-%f*RVGu2;Xt?,%%%c5%%%/%%%%wj%firj.Sy'yE&&rb-U12b7lzăU"s4Za2%,Vt8(lnY\WTuQ,RfYY8[#E+dH*(gFXr/$Oa?Z2vdRj,+J?]4nsjA0aH$căU"9<(i4%6EKo^:6.WT7[X'wc2KUX,LjgUlqV[DWbbYnKl&i(Mof;X=u5VHp0:03^#ăU"qtAgt$WHm8KlocV/c2wdvh:j.Qc2I6X\Ba*H+PszCqCCYAe3X(q'F,KT^u[DA\]ăU"x1psaI0:<%8L[nVUj>X7*x&[]JV+MuNUhTKFE=mED+fnh1f=3Y/F$5#]JsD:Id^ăU"M*]SzH:02kp_j+q-('3K(v-'ro;ki?ER;^X*:4jD<]aqr^[GeWJTmNJVLB0HghBăU"a#b<,A%\22IA)^G^YuTwqaWYiWASuv9Nqhk*wQ#/8j2j,e#p#YeQ#I.B5T728bBăU"PJW\8_k\t\QXq[JC&dB*+M4SES5hJ^^0I1Yk^n7T%8LJL8VAs&r9)f<6lE.Y^>^ăU"xb'S,vd$%?T-Y1kIcj=^^b7+eQ/m9r>H<eXT+B>5k/sXjHAvs8(dWUJ,I*Vp<BoăU"7^]())ga<K1lfN%'s3QjMVP=JBM0g,-+ArBHcYr?ZNw]aOTBSM*%c85ApZL2I_uăU"X=oJ[t2ZXR9J'%]tKwkt38=P8t-a_v#R2KjC:LcWl&XCF^R^?tjeH.uH2U7c^7căU"%4I,ZNKRFt>w4Iisvf%pi(H>Mhuk8)RxsSL:UR0vA%=1;=Mre*Xl+H;PfhawruSăU"$Y0<$,lv3hXmcE<W=WbltmbuDKYHIir/S]>JB'?61v?lArelz'U*F76(>9TN2=jăU"HCOK#)X)mRh&?Q<=D6EF5u.lTKIks]7*GKU>k]Tu)kxmY2DSe2xRyj68VB10ztDăU"I$R(]v:HN7?0AHelngD<j'h;+x;U*$3JhoC^L_iov]eh]Qfd1#PX+:\LH.P<8q.ăU"I&nmjh$8mSIkhSREChu1bL_=$[NpEhC5znX#l.YaTR#d&nTQM>IE[SogbJ]?-.FăU"YlB=j\F'hM/W]d0$X_gt<Hfb.mUY#50Q*exibN9gpC5/$7\Ztw3<UWs<W=B(.2=ăU"h6IG#]0r-GQI\&lh]#ao()(wXgq279GP6'<fpIJ;fX,g/^Qp0;DdLLPIV3M<sgPăU"p-8M+,J_jGS3%q:ar,oPOagR0Af=un2j/LwIO4:xibSVSn5$R./0/hLS:-+w<13ăU"u7XUxH2u##RF1s.1_1\U'<B)]b$nDCaHL/F51ACL/bB2PkDgCdT]c'aF=6.6O\$ăU"[&(W-+uHi12Kp1rTx-Ohs:6'v)t4b)<-9O+UiRe1%=:&oXBu/\%v'TJ$7IQUDtIăU"Ed=#CJ;TF6;YD/p_:BvIENAg.4P<-\U]mW(1i;iSYV6eRV^*&pw4:+y%e:g&YQqăU"*p3YXds)/^7l_ZI$<$WLaTg8Y:s\t/RVH8.SeeC:9s+J4eG;n)_jBsV05;IUnZjăU"8FNU<0&3BVH&F70rIFzh>ejc[LTS>8.V>T7MXbSM2Ws7HINZdDIA>I?C9/0pOkSăU"iS/[dhJL7[N1>1Rsv6BkI6mT;A.#f9H_n/$,j8FSD$DDA/\0$YUwH5:BidsB;KZăU"\XEM<L40;73Y-aaqC)[)tf&UU'+[N?D<A_e:oD2_OU'DtngqE8s8HgJakiDP7&yăU"J,tLv*mpf,SKVN(:?Y-$Nj$0FPjTu<dpf&BhS^,t#HK^'Xcr8Y#ToF$oQ)/SumdăU"vYv'b<wek4t,Y,fXJ1#^HJFJIeRT8$AZ)xndHo1WV]t;lhRla(o,/^V&^Eka$vLăU"%q8)E-,W2G.Z,HOp;9dA,djxT(mku(IZC)TdWKV3uPy'yuHssvh/mPF-Y[+'E7/ăU"Div2..:r_[Bg8)f5e&J0w03PE-Oz72j\pYQNEOPDY+-MI+dZjx':Lq(iK56&%F4ăU"br'?RGj1ZJPuBM0tfG_I2cJl-LPI^YX)T9w($R)MIUzPlVzEGxT#pd<u/?R(S_>ăU"Exn9A=q2b/DFty.>qc579G.ln'k?bU19#Ee^Ub0g6EQ\pnpfvp$i:5$fW7=UUQ%ăU"7u6vq$PXh;z*grkd9>m,ugD8EUwmkoFehf%Um/K&pOzoiG<+H$lf1oV/wG^L<NIăU"H$*pVPQnl*Qe8vTU:W#M:QTR2,-PVeDUd<WN2M34Ak0ZXG(dK9e+woF129G:+2iăU"QonjtPd=j0A_'1T5;N(xw-uh.8Ii_<P+3/IEw4C&j^i_-*3L)^V,XK7I%Mrb2bEăU"k]WNq=qv:i*L2%bc5JY8N:]JVZ3q=a;(Tj0liw^H-3,/B/?st/'<-jvu$,gV(Y/ăU"x<_F=Cq4lshX1jzbADd*_3jA>gc3#t8+4SXGL$=VYM(wyOR6bZgWK1bSt1U%CHrăU"=2cSXkIMr8tVGks,WGt:bf-iF[<n$ihoX-bl&#G[.oQ5O0<1z=1?#p>,KtSYg3XăU"oo7I)RPzuFf3\4xj^luv[?f)k9M28mC'COOe61muvuoD[38&BZTs>BK6Py]zK^5ăU"zCRIy,qM<bQMuL'fgUW3^:Vk=fB[ZVeiL33unhs=S?FtLv'3/K3YRF<;6wd;8V+ăU"sScILHZR0<MOg%<*l>up%()9%%%%-%(I*VGc+ISc&16%%%.$%%%1%%%%girt%vgăU"VV%SgfxWV*fBfSmbx;myu4CBm]UO=,aG=8WVy[.5V.H=o?aueOVNDd[+r)Z_MngăU"=BNvPDp[-Q9qT;eADm=g*rhbhmm.pPCp[Uc\pdilXd&#0q,L6ItH>hDG0%66InlăU"]\H(Hh1KAq2[[Sg1tY;TA,(9N1o;-we5)\04dS(Nl>Ua8k2-aW%e=[OmW6?2X65ăU"TH'$^8*m(svr2G%Yk1C2r?'7#6>a*%b-ucxGeLkNJ*8tCSMK%0<06OI*;hHE6=+ăU"I7HmV9d=i(eS8>9Ip%*ap5kbUC8F'=aHZIY,VZ\T]1JkT-x[J/^O1Go]u2o[6tYăU"J&9O],i:i_E*7qB%i>e<9pI5''Zmma]]Q1'?xL#$CJQPon,,,(FQB)ym03Tcs6iăU"UTs(On-NY<wu78..-&6\\d:g%O7V\uofWAl3/0uo20vAh(^?3LuE2#%p%Dzf:26ăU",S'ub-E#^2LBU#yq;^8al1ld<[&;DDj0k-j]i([nYr6^bNfcUuDdUK5kfDh(p_BăU"\nObk:Hm2^$b^ghHeL'HW+nh-hwC]6Ak\-6\dO,?]*T\$]6pZBT6;7c^7Dgsp;văU"YTV3N<R2u?bJxPWHfmp\E5+ve/CR160V.?56i>\T:GW;z%g[X2\,&0*1-r\Y-%ZăU"L=/nHrcF\bl4K6vxA'R]O#T3OP^6CfeO7\/^K]o\z25T^EOp&X]rIMP'h+1Pw+GăU"8Jb:[Yo*x\8PO>%fs=z7Cf+3dn6vjmY7]dP%,hW<[9_y5k9ds6cGXa4,^5DBp^;ăU"x#[wI6f2,,>oK:[%sk\P(:u,i$K5$>g_iEKnkUH']#^p[*(_<ZY1rzkNV0Cc\QFăU"xg$6jv[1KBLe[dWc&Pi<ZXs,QK%6gqpDgaAHL1oGo8;HYSSnrcdVwi$-Qik=YjQăU"*).2(C)AJ9r.)bPlP(k0s]Ci[Zcl]<k((3?2HBNy2=7dO<U;Kgeq/=SQ]Cu2WqaăU"c[f.h9u;8u>+Qg)TFd6dxw-:^ZI&SQqSkpWHvU/'wsK;xjco(Tsitm9&9#.Y6NGăU"iMszGm/WD<k_3ga2vpsO)?/f2P-Px)7mVQQtTWE2CHH*\nTK<svC]0R4M1T'v9FăU"bN8MD0KxZPSSv\g,cTo*a;DT:j61'AU/V]+-EiQ]X8%xCd<M91AmFE?dV&rDmXZăU"*:w_Q#+C=?o^L.48[wqP$WEI]ZyoD6kKB;)\7DZ'6Y%pS-Hpe&M[<IP?1>-*mjNăU"Dr=;xP&*O?.KXORV$9iXl%.=9pbM]M]&GZ2406Tb0iHDFl^Naei4PI5:.&:9Br,ăU"^HB4msr7Ot]*R5F0?+&'<.2X1\Bp4ECBoFGrBUTv-it3k]3[5k5(q=?WL1Ib5;hăU"TZk5<,Nm?9cWju#wwK&4PcxxU5,PYQMZlW_K6.;,hGFiDqw/:LThVzMS\QcfZ9WăU"njGj\h+q8FaJ$Pqi%q2<sFqrCW0R1v42-+oZ5Y-==#-W:%^PMR>NMj<W(yARHfiăU"s$307$8Tl1l1hi?vGanVM9P-2$xZEG,JxF*kR2U#Q,O.zqrN*DOb[IuR_>/(#(yăU"#qshEl=j&7I0\Q1MW*R0:']h<kW0[F[:p61^VS&dfA<F;4LTDjE[Gc;';zyE9VWăU"-y)nP5SeQ(:ZHtmrK>QN[k4iAwe3545N%V3%p)Sg1_(Z*L&7wl[R4i&cKr+$,G8ăU"eBUk<GAgrt4m>Z\=ul0av1/Ul;S=]7sg(gmb#sC#<sQ/EfG.kB;zIe7siQ4X<G&ăU"WU^?i_4beVx\'J4Q^xSpl*0A?=VzoZn8[WpAk?n5$/[w*Q>E)=>pXHkUK(D4]Y,ăU"h9Gh1.$IIEh7iDb>4_kvDX%jml?A?qDh8('J]uRtD97L[0A=8.9>E=dE;MY3K2>ăU"3DuF3/e2vHj*uxKC67Mn(Kt$bd1_kNIt;^?otSj-LDW,=kz5FQ%CwL,NS8%p/CSăU"KdkS(0]E4>ow:dr+d$S=^U>l]dkNUIP[;dviDZo1p.XEg6SE55C;7N*4a^P5/<năU"Zde80Xw5uaO^.(M+PAj3e3=veH])oCP]uz;'?Xums$#7LvS-6U5tBoG;B6z;1GVăU"#TRuOjhW7Wll[hY;Pm4+(4YHVb/3P\nax&ZKb[_mBgr*/S\#PL0/r-;R98$0YCrăU"2Js=.*mDEu&LNnt7OJ3iQSIZYnC8Gh6M<P^)*F%%jTZ#:fGqJf3u:j++9lJnf(căU"Z*.Ha/8M6uS./4euP(A,:xACMD:6e$4Xp9W8Va_44cg0APAxhHb=MB.+aQ[fVH\ăU"FBYgK-1;9f5g0X*^B.Yjv'l1.)&+'<>,R7_b_\#Y1ug2VZYKO<YD4:w6:gLa,bJăU"%ItlBI&\1-gZ<LXDCK=B=Qiu,Zi3^4zb*y/XQOmk?Qae'/>zN;8q*ediA8553G,ăU"oco.Z/svEARF)Ggc\7PTY0UC,zgIr81&']&j8<:?^LV0)c#]:e\D,av*A4<zkM5ăU"QC:ILmSzE]a,2mW*\NDQo95sQ:[9T(7M).Rx/F$EpG0mbl3&\c6TLR]BL;j>79RăU"73M2._lQSp4A5t^Dq\j)L_$*WqrYSJcA?rOIMpaI=]AAcVO0/tC$CXmev^z%+34ăU"bEWw\]J8myD.O\bwIIPBDb)b=Cq+%4bEKGlLaLy\)?WazMl2zo$T>=W\FrNJ.EYăU"deNc),y[>+K/<QY(<<4\x3YL(A&[cA<Ooy-Et92&TaIB)#O<Q\&.$m(Q4)[(3-iăU"9[dWO.2jv7fM^2J3'pK]Y<&w0N+]qu_dRzpm0XJ(*U*BtL>nb*S?ksXeYfSQA8CăU"joLZ=wp6$Qna;]w(Y-GVu#)q0OWrunT+JW'smxhV4UoUj.F+TZwUBsx#['e)$R(ăU"?<w]Adq_fBi;9.iKb1T%>)%78rVYuMFos)HbO<)RIntvGrKbcq'j(Dwoqx-?5FJăU"ukTwYf^(dpfuM.G9j[TL3F<r]qr?OO0,5w>^]8lTOZs;Cc)^xzy/<PcNB).]ctrăU"eAphaTO-k4f^B[*-KI&Yy=k9MA,/(0RB&bf,RLgt=HfIjXf;/.<FWMd/HgGi>cFăU"VC9ggD6%B0o;lBKnFbftv.sI5PjDOB^do]WL/ha0k8V154AuEK=;TKfh::Ai=XsăU"28[YbLAX0$>b-=;m[LO5>GE.1hg$&F''chf?H#NbV:$Bnk.&dfeqxl2kuX0]n;WăU"_Fceb2H_3kN(Vg-<gGr99U2Pf(RLlJ?$EVMObl3]%G,,T,xJ0XiBY^3=GZ=M8$_ăU"xjoCzYif**<[%L>PTGeB2<?grA8Y(L)'_zgn8jBHTUTOOb8(\lCo7rvBzPUKZRiăU"\SFi$A<:qLGe*AGyBxj%j=LMtsh2YYIjKFp[cpH$<D6W6(O?'ZhGdLnz/_oj$*2ăU"qgoj<+\R$6ZBuBDvCp6o1aLsa,Xim$f4m:Cz->GGNkg*yAI_9%]tMiCrX6h6-W1ăU"gw1QVv\I71HP09am+/%&[uH7D,B&n4'/.,55E.BN&$(_dW]:3&A9m*d$<HH&:i4ăU"eU0)%Dj?J(Sp-#Xq+;Td<e86Z5mP*&R^z*rK0'Yy)1v(HgOZj5QAay)V2*#\VRDăU"uL6hXA0Ex7f>QgI(y)W/q+G2;bgVHntJ;Y#EQ'Fu[#Vy1?*lrmCG2jLlW3c$Lv]ăU"_VzK>oQUxUC1Cy>4;VrnG4O1b&wYeK8Rv1EGHh'tp5sVo2RtLg5Me+60L3It&h4ăU"lQ:99lafPp'&k)L9auhPTWwrE2elEH^0%-yo_UY)mS9e^*,T=;F<VZjbjF5$%a0ăU"ac;0P]OT_PL-hW?05\LhGjVcj'D;_*>B?$5#-l3sPW\:40W_=5kOfB)=,QNWMSJăU"r3pSSt'69(^AC6Z'XEoA$<dDCr=3bVj0xh1t>u\M/'&x'=fjZf*K;ACp;M=fqcNăU"PQP.xNXiv^yPqJoXs=Fsv,C\rWTtAkg^q>\,t4Ckw8NZf*WLIA+^b-K_7+IekGXăU";:U(YO^XUq$fEr$ogPXkTjEY.kI:ocpb3C[Wi2#sZ.PZ:#?D-Q.2PhR8LkK#U-8ăU"MI'6SzfT^*F$.\]&Q<ajs=QtW\a&ncTjs5iGRPqBJIRL/:?j+f1Sl[O/dMNf7FhăU"t5'p];/qb_X;3[8vq0j-^k\*2InNd.dLg5l,'GjOsW6(P0NGC9IF+_e,)'VkEouăU"OZV3u;*z[s2b5^%is9ZBJ>c6CE&^[7GCkivhqCB#O0Kr,L\s#$?F;REgDiLJ6q^ăU"<c^Lm<0agr_Ae[K:\O.N?q;Zrmugt5M'g\j#Oe5uO22vbdrt)0Z3k\G;gC6uJv,ăU"MQHRiP\kNn?e]isfk[15eJkGRv[MxIQNi\5sRsYF>hx3S-5_C\bvnBm6k7G0LBfăU"J9</oSsyCwrJYmaF1)\)i/?'4?TsbFPjwIJvD7:OA0U4x%^Ij1/3#HuO(8-sz_(ăU"kYOV.,w03LG9z,uNw']savInsRTc.Ncle1c>dk^9j.fJ,&FV$S;2nNM/v?B8Z=HăU"5tZ/$]#u%Q>r*v%O428/[a[,[9*R]xhG;Zq(5^,/SJ?svcjQ+xRNa+uQ$6JE/(UăU"B^9RFQ#^MFl\snhkc$hiZwDc*TT.5_XSWbE,8kEeuRb<-YTl-tuR><0-Cgd*uVuăU"LiR?h^]u.rtR3N>;onf-HKqrdPBCG#f?B5#/Z_Au/577h'rAbQV5S7Nke]tnzwhăU"pG/INC7:1Bn=Nx:>(,E?w[q$ol2%KK)]61ECA&:e&;2Jk')OCR(ZAcc)Vz.0*_5ăU"6u#0+f4rlhT50q8:6%;3BBgmUrLM[?/adP(iEa<><i?BnD)mujvY&CIE;QcprJQăU"586uK/\oM<f)is-1+1'lI1r9<9S(4y9]I8tqosb6Q3RpE?]JI1lN4fNlpEI(8tZăU"E3Tlrn5<K't^ea)IDH--krIjyIzh=$CftU:5njCKE2kf*zlKvAZeSo\+aB>J84CăU"HXuGT,hX[pnzG^_EBd#0'R81Wc:]C<3p1=WEt:+V[EL9mZrn8E8nH*>pv%:rgs6ăU"TD%w\Nnc>O8BT1dY]E1d7e7.v_2vhx^1WwEhspdr2\fcH-^tj3p:?'VSbH=fT*'ăU"jBWetkZdlFex<hL(Y_sH?&TDhxZmJATI-Va]?IG3*YsiZ4+R.*N(q)m,p>Luz/UăU"3&E:di8-,Ks9E).$#g#C2g*%\sZ<vunsXM.k6F?$Q]n6hk0\JEaUvR;^L:Y3KebăU"1PGxvZ<p2#PS3K<8R)(=GskuVzp's+skQnc/Z_xIv2uX,-?B,mZnpgyWs[feZ8>ăU"J6okW\C610jj0HO42AL;i5(fZRA9qu.>gW4UdEl=XSFfmp*QOo,mf5GwUfyNjR_ăU"9:BYMs>=pMTk,+32MGXONS]%R:>GrL+^zbJP+EXyR_ezi9r87H1JCGV>=Z>-LS-ăU"07TgIF\-g&%>ScpinXb7,uiqno0+buZ%C?+sLJ=BSK218D<EVtaXT\:+*G3cMmJăU"u#_Pr,Kchdqs//8pgx4Z=$>8oLk'#dTFhvI21V</(o6TMY9Ae9I&2yM0#VF'KP<ăU"?Y$=3-$io.>D[aMN0lm=/sOSp0?c$IpAljc5/+/qc$l+.=;YW?D=P39GAbH>4T]ăU"0J9pq6%8c*.LszCYq,zK2m%K-Vj'8b:hsJQ_l]ND8)#6sK.?8)9XgDS=5R>bCRPăU"?3#\?0&BL9D[sd#?)KC=8Jh1RG1ZjHx2^-)PPt6gD9$vOBA5RZuc1k1a\6*66M7ăU"M=[H6Sxr;[&LN*kGxoej/zx'x%up%()9%%%%-%*P)VG;pXbq%/2%%'iQ%%%1%%%ăU"%ghwj%vgVV%SgfxNV)*BHT/7M7dXv4k:.]^Ci%n,DxCs61MXYbVd2PArKC_5IeIăU"3#Cq$?Ou-Eld'HSewHM><tNgHwb/$e+c<eM40dQel5>N<8DiwDQx50AtP<u4elLăU"FKSM393K)D2NOgamZ17>M+ZW0k]grr1iFG=K'YaDSMWj/#&fQ$mfn9J7YP<EwXMăU"XEv_pSd>iQ<<.Wg)>*Y\Mj7iJX_m+1Y7O1KHj?tViK\=pvCNoER_7h/x\=ChNmbăU"*,P0dwRBVIQ(/\+,$^RgOr(-El.dVQ0w;VEMgD)x45RI;a[tt=2sfd-S/GdC]GUăU"9nbgfCAP#?R;g+SbGGFA<-u#-O;emRjDhy>GhmvFKeW6p:<?9t'ih\70Dm_YMMWăU"<8Jc-W%mFQ.Ol+7Zmr#k>M76I$U0$m$TedIQDCIWFi':G*cAjjGe2D?si)LK;)UăU"N+eq=NVIa(MQ,1[OM5(Z]LP/l^#BYg4+sj9U4hm9[EJYie18^L0lwNAhFK0cBuUăU"Y1wyAI&td2]AiJ-ET:m<_Y:;6WhC3m0aKAJp51,g]f>^+MM^I1Ha<cGmc\*dF),ăU"z38_3]knhVf&8opr,Wo0L2GPO5p#nOd+>U7tTT],(>N<Y]#EVK^au-2j06.Joa$ăU"1ud0d[ZrigWeVtT?Dv6+]wqNE]6x]Tg+ZXS)3X;/gG412n3S(fi;$*&GqiIU=NHăU"YMd+9>=n(bp$U^6;r(.e&?L*vW5N477Ck(Q>C/djr-m'Kg1UG9fF=9)LI\UjI\3ăU"6'Mq+kEZ_3C%aR+p:/#NB_Tqu*8I:[7HxL)Oz%ycw3FVdS;]Fu2&<fVkv9S#/XCăU"5n#alJ&?1CG(Y2qv1Z6AtT]csa8Qhr*Q%_Mo^m30io)fqL=Ilm77zq;qV?M/ZB/ăU"gF9]Q^og]_?ji.=2_,DZjT0,DqXo,/:wm2s%D<:QnG4_$p9*NL10g'rVn>AT&nBăU"l(nr?4JR74A,Fhm>4-YPN6uS(T%R2aR2NpK\)tKQFj(*PYN8#ngPbti]J]\r=_găU"j,dCE[086R'%_a)>_:bEJ7nh8,.ZBe:y0<:EIhn3Jo.:Go+2MKqrmhS:;SJw+u]ăU"Up*>MAmShb6wR4/u#_4+7(p6-2Up)hfy#aX1?o\C(bTL7=//?^HDunOI8r74^'PăU"<3F5axZbJ=^&ccC#(yq4\s/=jb^K[GeL8^nOb$dora1ocIcd]UI&4I.qbNrMd\MăU"yn+0'&m=lxM?SEtp_*)^n:%cj3WGFOpG[ULJ$NUw/ZV$($]_G^jtJ/0S(5[iSyfăU"t>Q&xrFhYPH=xTNc0NTXN9yvhjLV?BB>(,U/STu&F<rwvHp>*.(i9niDgZpg8kHăU"Iu:Zh#z3,D)xl^?#.q05^_t#.TBcC&w2t\v&%6U:A\_fOik^(c:e^gUa]1zfPbjăU"C$Qx[R6*/l$^*(M)y3k*E5OHp_IlRYMqP:9V)YibL9EY1q>_w,t8ljcTI>:c=r)ăU"x>U(o2^;y>4l?bI5>qHgtQ'?.=ql9xHc(o=OYbc$1,9vm'oM-ksEou)Hf3b>oEeăU"KCaVB<cE\75:S2M]O0d6.?$QU6&x&q)T/BlY&nIW<ttDPa8f%.cp'P'FHw=VmW:ăU"4PG5G5)a<d=G62s)Rwgtasb+n_FrIi]9:qG%05&0c_GNL,zPpG)5Xt=?>7D6%L)ăU">i:P-mkC.bu<bE8L7,J(t?,9Xy'mj&o?&%2;uQ)JGh,<TCl2D&0b7df].RfmdLjăU"qBlC>7N]e,jlM7C?Y[,C5kncmM$XYfAI3,g>F2g3J%dhuZ0SK(8hBjL5iuTaM\uăU"t[?mohCmdqI8djbACzt=I-HlJJMY(egcaEaH]4ZAnJ&>l[O'Xr[S6>)ci+\H-XOăU"LtV_L#0h$Gjh4s+O_G/J'NUgd%Mio9*cH.'oI)DBH^+(uy<g*=K^i4o'jz\;*nBăU"P\,YqdhNAE8RH$R4[S&+fL\44OdJ]$liu_>_CG-*gfn+K2Kl_?]%AXc2_xF,Ad8ăU"0]D2Grt/g9^O[=N+lQ<TQQ(Z\72N^xRT=//F]kJW=&Pff%1pSzQ+q*X>%M1zR1RăU"y<LDjv*jNd[[<Us_Q?X?0Z(bEub2RR^8Et4xdSA$?Ql)*OLCD)^$^*1+6/wCziwăU"dR'S3\W'=9l^09UZoo/?G3$yix[F:UqBr&Q,E.[zF40WRb%>yTTAUdzB.V6x+c_ăU"bNoqMFga'wYjeIH1ionzPD_)LFc?iRl^I6p\:;\rgFni7EkX;y9'4X]um2ehyD7ăU"^#<1)q$3MYZUr%lbqA(p,Aum1nv?3=Tg81\g(?XeOh)*V\0\3:T/3<=LCQ<E.3(ăU">BF'Wa_cjoFY\l(Nh[Aip\=eK4thoNE7]VwNxYMf3A?IB$Df)pk9=ZVgu>A*mDtăU"Hi;7ZXqDxe#k3/C6cDEta_?Z6T;*APVxxJtNlx+Kpd8-tN#7F=het<E'1/Rky]lăU"'T(fsC_r+ANV&BXl=8vs-m60_r0msS*MI/.?HB<^*8OBUj<;^$0/D>]W-JnMfUqăU"H5q/Cd-j<)[a?N0mlD<M4dwAoZxgmV>PM$^;=>Kc.GwRSEB:S=A]81:XJbT+oPIăU"]IAOX)$X$dRzHN(5ZWImi'=An;#5>g<35MHJf&rB+-6+uUL^)CXbj9TDsfj)J6^ăU"&vr/xGxuZkDY;+X>j;H\Q#%.pSu0ajEDBDhtz?&(PpYVEu7Izc8aKom/_dBV#)<ăU"=8b+dFv&FTLM:ya?SNEJ]K7:_i&kcOGO4stLRrne4Ybl0kv7B:,TL9/<op_aO3uăU"BoN_llHuRq4S<2S/XCF\^P__Dx&ypr**lWYR4zcVbrkA,*bU3=JG?qz2;xL&=MBăU"URY5xGCN:#bcVe8cu9Rchia1U68V.op]YXw6Vn7yZYN]oSzcQwdWW*\Fir7;ii&ăU"SyYnJ$KPwI4llGhm:bh(B2%Ij$W;tODhysGgzyy=uBpsdGzXAipTZC5A)pendDWăU"9kSerlcSnc9)0hQ\Mm\8TTC'=tdn=qnUq36i17V>&o:<rFA7HH9>(tkBc$mpfjnăU"$CA#qu_Hj9*N[S#D$+Jtms$r9QIx^LcYufY&p[EN+'AYFp)Hwlo#bTZ:NnnhDJAăU"2<o-Sg8MgjOPuL=*gbv<nn*B<*hkp4nK4B2o;m<D>s=qeYalHU3T<vL=W0V_7J/ăU"#e0my33$1EZ-9p+<m-o/O77lS\9^QV5Q;JyHlao'k6X[h(PF%?YYw55ul$43eCfăU"PJS#m?0[\8'e:)vE7i6CLb#=.1f_89j)RLL0a1jsQ#c\i_'=uRgUV]NS>$?oIM^ăU"y3LHhe44>&[aotjk/ba>rk,)F\Gu(jv](Ji$#?Btk?$g[fTfIst8(p+Gx#k0^;^ăU"GV;.3/l$xmNHbh[4uVE=fLcvU$1-[4kOJuoM4%_qo2-%tm;Ffk5J+t[6n',G2RkăU"zENpv5Mv8bCEV%h0\j(ATb&6?TO[X^'9o),z_c;z+.u[a-kT0Im9&]bYsz2TWk^ăU"QFmSg+n<Q%#h\11tpue)/tJk<Tl/bdv#gdly-aQ5aT*58hu<Yif0Al<_F4fZL-1ăU"NZv&TP?gMU5d4rGEN8>H$6IC]oHmflN'rI\NeMn%T=vP8J)bAtS%lN*]>xtnRzwăU"-n;?=LNt+&nU<k1'pVIp*nL-eeE'5'zRCfhQe6K'b^Uuv]U2l=6diWox#tcU),NăU"#h*hUXFeMrgUtj3m17?sT3ZOuFdX^YU&h#u<u^$AtbC.p2mi9ZUxS]GP5#,*6;>ăU"B),=Ht/eX73&U2yK?dN<;aPdj^HZ9[)RTWNMh]x5$M\W9NbF53?eba-*Nqy<2u6ăU"^cqH-%fZ3+$$ri*tetPUNCI:krTCbD+2/BlGx*RTO0g,966xelhhSQCfmJ$.-IDăU":86e12=0/tOA9])s7vqg*54>k\%xIP,oXyRnenEZ%l_XSMh/FQjR$aGT=P'MD3săU"t\&C%KFt'EpY1Mh_I7J9u,TEsJCgVQy'675qpTTxqdEQtx(IcoNNcIh-/5_(>SaăU"cXg>3OBbItfcO$,2^<b]TTubMvCBS%:/-P]'0bcWnI^fOBQkc$W-w+gNVk&4LN&ăU"rcrHBH\?U^;Z2lfvMyic[2*H5W8B#vG;K/m7DAaq64nayD2nmPbS\)F&FN3t=Z(ăU"'NReA.4[PaF.Wuw%P_RbzRX;Eq2au%u3\m:SOVb%Jvp%Bd?kR<ZL%#(\/2%6*UjăU"t5hb$%y7Dx3gdCL:;FNTPu*mkK?g_ZRuK,huhsmKR_XSz)pJtgop9-/2'UyY2onăU"#/tIJuKUAJ&fBFWn+.<V]O\HxNs'x,up%()9%%%%-%(=)VG'.#oU&60%%&lL%%%ăU"1%%%%ghwj%vgYZ%SgfxNV(*>HT17Mq./x<+IQYs$dGRX&q9]0?A/U+MDi;k-/TlăU"k\qHF+D7_w;Ml.N5.mneT?21Tb(4j;[Cj$D6<7hZ1?b\0dZjhP.,]jd162k3][tăU"g6<,Jalq%J,U30hIb>>k;P4C3+/nPRNUzlbmC[jnG2aGvLNfY?B[?Jmk[5X8QsnăEND SUBăSUB V2ăU"^987?8+FEe7m3Pw]Up[<i#$_i/6?I42L6AV/Osr02&#cB+5?\>#K.S#&f&/YF5lăU"qU'pf'Zoh)%lflXIZ?=7]0m=\9B01y)4kei1ZZpI-MW0I8nPnJjPPgFGksMl_c0ăU"L&+e]9C^qfU0LgRhG9ZC]ZFlIh7?W>AfbvE9[b?g-b<n#]xFA&Oh';]t6,uSSUoăU"S\k0nKnSV7D%iOfQ_1g#f^z2#b,*97?1-YB-%]w:O:RX]O&\75xVg49v[xF8N^%ăU"&NMCL3vcH:>[iTO2FSsGq9YR5*[VQ>kD'\Sn%u,$DQ.6;qmI\]wh<^[ev7WMX?&ăU"^>1/_^Q[H'Dc=0tQ;4Wr2(q7#e[Y[2FFU<s=Hlv:7fC2>8jK=NQ'ZpMmY7TTIu<ăU"#gt[<4;'>?UfN_7%NVGHn6l8L<m/lnpX1E>7ABYp[jVrCT?(ssiB*gH'WNmX=)+ăU"#85v/pIT(fN=]LfD-AdFUWR+6ZpD-hv)0g>n9bKS'gMu,B-uIW-XNk>H572:l=.ăU"5Ej#'F1aVr=HI5665\;n(*Gst0'EHY/dSFuT277CzQSh]:&Z/&65bp+8-.k$/HUăU"4YP8huBs'%UFH[;?B]O$CUt_/PTB2_tqnR]X:a.ExF6fP&wvSDr3<LQk*?WTOTOăU"569s3RXC$#Ra2J?#1C*i1Vpw/bgS62BDuv?578Oj.5kii#[(D.cAiSF+b6g:IxUăU"dk2n=rR(uW_3O;bL/[uItIR%j)GT>;OO0hGT>'DEzkWN<)1B2UkUsW=GC)\0?K1ăU"ItWHta_:aRlT$3erBC>L1H%10?<5tPXl'j&BR#wWgV-ngq?WRU0qi0&VdDs]_WiăU"\oU9t2KHDHSjUw]6fq5_ME<0V1%#Rz*RV#B5^,%('8?ErINT$.WeO_SB]*V22()ăU"ZDm6B3ET7B9lEq\BHu4l+v<\$47(\BNag_vaPvbAa3?EG\0b(TL=oB/=HDaul:8ăU"Dv7^y/RTuxr>x.-KiHr^h4Z)m*ZXmCYl%<7o;ci]m.=.cjyH/ha'6sp((l0j,/_ăU"Pi2(FrO_aD*iQ=uvujxgVSJCZN)d'IzGXIhUXUUme+KxnP4a=8k[eSTbXGE;9XMăU"xEaJKA2&+1cA/mc]eS[?+Q;qW7jjh$I*B;q++;][H'2nOPdw5nDsc3fV_y.?%5VăU"cqylnkqEvKgZZq,1#z7H[Q;xA?iCDZi]Nh+G_G+-t&^i,]37.sv66fwIJlsDDYBăU"iL&ltnfPSiAY'bN9E[BEI$tjpSRkcVIB:c=v%x>P(G2^[9^4WFbNKUrnLnq+\8UăU"u3.wpH(G=%VZi$A,8lm'oM.ksEou'Hl+2=wEeMCash&d/e>ecSSM;9tR975OnJ4ăU"3ejxYZ1Xmrqc04JT^#:?Cb_Kik)1-G;U%qCoYA6xN5^KT0KMjjaU=_E[y4_IGtDăU"s$4m&3OMf4IEg<XuNO7RyiEZDg'Ip'#6L+(:X*TLlrS8f%8&^N]oBo%;mi]a?X?ăU")eW'[_\za*tjAN,=,\[YujIpgo*gS/Zq,lc>8P7fm%m(j..9I6/sJsL%SYXLg:răU"vUpK1t8vPO;>l/mxdDIP5ieL*$B7AK29d)9soS66'Wq<6xD*,b8gjgj.-j;tuCSăU")97(lN\DDu7i9syH6EHeFv^5WUjdW>cG>R5-rQC_tD)P,KaVK2q0qvYS$pMn7jyăU"9ml_j91AoyTSPWnAW^y+\hKQ-aYa#$B^SOo]'nJlGH:mi(1tu8-fE7rBT6m<gJeăU"C5WjJT^T30>cp1e'Z5m5PJ3)G,Xo]MBG,f/Z9^_#=N+ZPRQ[QIZ8xP-knFfO,TIăU"kpb>0G3DEzUhfF;Ql&;1W'*VeXV9iRyYxRFJb*d[g<e<\D+pWP4?xY9EM/aHCg'ăU"l_<HQ))J:Z52a+g_Y=DkQj,/(k,?]1A[3B3&T_lm;QTRP=4nD:Ir\sy;Y$a$)rPăU"XaJ<<SG0G3=u45=$w%P=Cis_'[LL]sTFlP[AvJGi$Js*Gpq6N5/>c]kashbm6<]ăU"iJAwuqr<(,px=r(n3qvn5(VayH9,r..3Da[?KACd#vUM:3ldATXZfEe&QnL'0.dăU",S$614E6dceOcQroMQftL)&WPMYlL69TJWcWV,5o0L^6i678f=nsR8ranV8D=xzăU"Ki8E.R9d9lTTA7#?%r\Zy>+E<Jq^-At6&8,?T$i_X>os)z=Y0otR0d\7rt>FvcfăU"xpgtNK5ZqeLTtQQp>+_zc+N0>$,jSR/bE01amTGQI0W2MBSmaIlhsDlRj5h1.A>ăU"r\OF95XgT12b/uT]/vK30cIW$emQwU[t;'_5Q'3#Er(l.GkGJ)(XRNxgn,.-9?GăU"JtN92Lhgm-B\%Gt0F=DEE?G,JfJDwLltM-?q6cc,;vqQp17SdZ#hp*ZbC6IEklGăU"[GFC,t(tCb#^o[&$pjd.%>lzJot<FkuwVDLTR^)IQSzJH=Gmg_BXgH-k4zCKtk<ăU"BCz-^3d;lzc:nb-lU'ruW)Xb:S#p\-x97[78pNENJ1s#MYpf*L3+oapz;^$oz]$ăU"\<DRq*Nr'IO3oSvNX8eT?waIq<&zHCH4vpx,..aM:Q&5rp_:qLhgD7Q2,iti_3măU"]<6j4EV)f,_[7_uP0)C-jP$k[2sAxxZLC$3e5s%E+N*t6T5GE8G%GWapH\Mh'mLăU"Z(2GQrP;l5uO:Ga]2(vb,6*5R?RNveCo17C8Bi&x1OEvr5On3XBoJGzxiMQ&fy_ăU")kGPM..LA,86aO)Z=H&YL7DxXNW%j>vsm3V%I$4ainZ*o6NY_=wRSw0HRE/ZD.>ăU"7b&3=&'P=^&WgG[=*j0322i^;tOcOTK2]^D6?0rQW?QlMdcH#_rcHjv72IHFT8>ăU"LDR,v5)$2O)NaK2B+,DN>]b<Ddpwa/r2>X$-U=fPcF4YE8L:c3/$-lfw((X^IH]ăU"ff3iqZe[#H*,H[AN.l=F)7\+s*L=[4?p3$E2Z-c+D<l#<MDKLD??.<\T:F+xh^CăU")31_\M0sRe-c]IWm2?j0g]b?I*^N-rq=c>#LQIP.qIRZLaIZ[W7Q1Ez(7Z]m&5PăU">QEJQorw\Tf;.juOI.t,,0^M5*'=^gmu<TBFssm0lGH#H>[_H,lotGu(n\])tU$ăU",?Btk?NgiR=fL]dr3'?XqRZ$A0m#^-bb<PB2\VzIlBv33jNOo<nrLJ=apY*raafăU"Rd)iTR-,h2n:U$;=[&0.#$Ir)I/L3eCIY?Dc.Btag%L?KQO%Z$onwWOuFF^H%b:ăU"*ccRlN0;c\mIgZfYBsOkZmS3LlOV\Q5FFk;q\<&_G(&At&tv_?VtDOD_I,$xO\UăU"\wl6ILJm0\CWnDT-3adD2T4deUD5GbUDS-:;TotZf;IBZx=qv(mdT$fj[9Mch_tăU"IMAb*p8lAkl2<thk+xLlLvErYC'#9+N3t]l0^e'NOH=J$*%R,'J]t)Fp#]-VXy0ăU"oJ+;*:HPDBwq&#<W_(>\W;o<_yuU)0<8h$2XipkMZtU4jED57Z.PC<\j<PNC2R$ăU"deUPRjs?Uh;791\+47<\E/b0auaBF^]WIU<:R<?p5R_Nd]IH?Wa6mZN?h>9dy.$ăU"gdXxW'7qzo,ex&u%p()9%%%%-1%fRVCGG%)+F<4%(%=[%%%1%%%%gir%tvgY%ZSăU"gfOxV)<tBSA+iwmyu\V3:#%5(P.4&;F\%z'iqsR*6?snGO&5*03YC=l-X_aSf$WăU"Pngh9J#Y<qEllZ[]N=F=qpmauVLVL?[m\PQw6LBkYx0Aqq(a'n1\iZ4AsmBl>h/ăU"[NWTEgHYYWO9dU14BfJY/p9Si#rSlva>jLj%$m5#'/KTHlPK7V=[AXDg#7ecRh/ăU"dSgfvGUcf%+9($Pt&LSFg/PRn8ESeT6.Wn]>A8SBuM.cMGT6CS\1QW^ar#.Ik=<ăU"A=)3X.8RQra)q&EJ]7?2*9$]%kJ/?RU(Rt_0RVGfui<nh8XvrT2)poQ:G1Pp7u7ăU"H(uHn*#Gm#QSPG:/582L+A3t=[uN9UT;;nbf]3Ep8iTKDU'YNmnEL8pPdRi1#57ăU"I2\x4msueWvva#H_RFRn/BKs=X_%hX;j:p1Zgg\m;q8oS0=SjC.=<y=s=g.*Yb_ăU"]*:KCV_9<zuOma2zCvZc5eP<mMWC;1l;K5jH;;q5X;IQpFtuPd\Pg'QW)gXT<84ăU"bEZ1G(B+,^Idkas_1N\HsdHO==H6#Q$4A\gq4'Wxw9pcd8i[qg<\pj,Rs?,*&n0ăU"*20607D=Q-Z]kG2:FS:_1K*g*C3RJ*(+0G1G5u*uj<A7APVMbytyPc5*&lyZ4z/ăU"*L$N=l/Tng4RZl4bypIUd2Nx1/5QdWWD_TD3E]BI:oMvl]CNh1bw975[rCeo[qYăU"(AA>6&$B;=knEf-Q7HA$GRB3s[CFv6NPW&*[Q%j>Cif==[ANsq?9<oN5/em,E27ăU"seoLUE/Q^>o-$9*8Yk=KWnApfn&IZ]:-WGJ>'ojQx/8,x'/+M;[>jbUm7qkVNeYăU"wR;D+A<1K#>J8U%FTb5y'oo<ha-63DUb3:^1a9E7t=#S7./n/uo=u4[0wcIGS[7ăU")CD(V]u+/Ue-fzpfo2?rT\?o\1T>z\8fhq-:?<w1cSC^XQMGwiV]AcG,n3k(9<PăU"s),]:S(B.+272nB'3n^6f]ccc?75-W]L1Nb.dbpYKGqbSmuloFtnh^*Wr3ouR#căU"D3).7JV11([DC-.F/e1e+dY<in[11.ax&8d)iJt)5AZUn>RIcqol<nF2C(d.hVMăU"dC]&/[<ME?nN(Ri#$3,UM-0$*#HP8<V?>n5Z:/2l8U)$4+5H%avr0ZMdMWt6q[QăU"w87*QM'RX2/q$gxFYM8CaN3lG9^m<A%PPbY2_cfjS'tsX]h$-]VG^K&O^dfdhWUăU"AQJ]=0A)Yr5MI#w^s=9BiHM89g4eW=*<#E-pF)XZ376#KBFa1ep^HhiTcrM4NeqăU"ssFqWRxD6EfC%zNw,m4Qmed:UJ/p%MMd<)#\j<)]2v8_We'$*)I7?leR4JSLC'KăU"Q9=//8lcPU&jH#-tYk*b)&md%)cHxrZ9>(p:j2l\Sm*P.O'><Vx*4j,Ev,\GAhaăU"Y1^-O';K.1CYD\W4)Q&ETa>T=eFJ%H)(r)+AN)PIPN53<3%v6^2lbf5:WSBY]7FăU"p_Ye0ARfSH*[af*^;>eKLQ9o$_kQX(lAEmB;T'7,n)3(0sJh=pnbX]_E])_0mlXăU"6=#.TNh'W[+/=JX1pX#&S'F=3rIxRSCV__1PFBid[Y.1fprEeY4c-&0/FKqB1SFăU"V_f34R.oh9G/\m$..j3&;b;:^R6qR\f?WIOd_l&e_)RDTfJ[;ZPx^HfAY?5<eN<ăU"'v2t3njHXf.c&,VotM9tD9Gd3TjlsCj33*0n)Mh=BoGN56=54&*a:J^\n$vYbEdăU"zUbgW)-P-H%i7IieOC*ImSsw'tH]RT3;ZZhX4wLGIencPOY=<fTMD(c$.a]fyM1ăU"iq%p;+f6H'Y-SP_wvYgs?rinY56j)YoHC1d(EgQun4&n-6nuliiZ9j6kw]<gJf_ăU"dySg$+*ib-Ob$,tR3R&E#]\MT&V0\+DAdd'Xg*f]ZV47WTe2q.8:_qd)/*\K1DnăU"v+JcU-lj<lijZ^hOnKhN^x0Aa1WjrvT145Th8PfwgkrMi#LtD=qULe/a:%rTOr'ăU"^-0p=iR[8u'=jF)/1fz8<HU&igZNPVs1qcq:bo2ddh[KYi-Nu5m_.Lpw=3el_BAăU"ZNca-T&zDSq7jv1BLmD48eFv,^7sV8j$'&:sDh[T8^,s:.WOwkOh/WhvC6s3fk1ăU"v[ro*qQx/mI<zbvgSxT(v+w5d'>GlT_X[l0;4aBf#//hcRBn+M$e.4ggnj;yKCdăU"/GjW(2gVXQUepK853hy('N23TJ/k*];7+i/.a,+C&VM-<6-K;[e:Uml8Gn>5\$SăU")7kfiwa<XJbZSv3x+Ol*/&N26#4:LS:Bt*1q>YB%mQ-=_&W\,+4AnxsX%Cs3cSeăU"[l6:6'Ews92F&*aQ]&N/\<KoH>3Vv^;Y>SDX>T(;T=t1XS%BD.rUi*<Dtfx8AG,ăU":MmN#)&c]:e$',6BeXqqcc1F=b+[/DXFlCJ9n6GL]'#1fNie'O>Kl#hV'L*wO9)ăU"5FvS$lqroKqnI4qJ(PTQ/NOCo6r]Pc\5=\K2u>qt[XrXsa_d?/G=B$dsK(_K1UBăU"%+jpu\^l>RjLI['b?Hs?r,$,C<s?SCcj(IX*lsosMgszy;lCNI7Lro[YOLoW0lzăU"nI)dz;'$EIL51aps<Ks8MHH?NcQfmQALBny3$K^&WGG&o635Otmeqe(LTJR=K$SăU"Dc2l]Ex;F;^+v_K;j,NN.]H3fCWDY+K#4Zj*;[CtMH(tX9oa#n9r%:+RCjL*uL/ăU"^#cy?dm_yw8OG3o/-=8BWt7'Z5Ex&uTe]p]0lAw[Qcxo1tT,lQNp',R$0(PT*[+ăU"<\hVz)0eEKvCnFX-SVGA$7f21xRK-g]'hqedEaN1JEGHHkgkKilqOOj7Z1U5MxZăU"kT:p[hhACZq;V[Jhq(8W<ZQRPs<3W7;H8Z]7d$RbUq;s,7[[-kVwdHwCIHS3_\%ăU"Nqh+MOElwm9klnOyo6xu5s(E.ya/6pZl%7E$zs^DSgl3khTQ?PMHk>#eN6,V-+-ăU"9;U-50//Xk-5o9FlZv+,Ejn;60b4&P,l6E6A_:47[0b\_Gae(#*-Xy6NiA'R>?4ăU"6l[FbFYz/-G#)2c.Q=Z(71lZ[nd-pIpl],15(aTVQ'e,+caTh]u-[g*#,eFk.HPăU"7tqg<-xj2YA+Qez.5mVUYLZ];&TQX$:?>tu(B=,mrYo12,$(YX>:\>jmgsc)[:<ăU",_R6o3mV':sNP7F&zdy0Q2F'$96xki7Z7w[p0(L+KQPhX#(;Rg\w3mbexM$Oio5ăU"w]U_VK\6uLg<pg_TS*p'IOO#MbvFsDEYRvmHDN9#rd/6LCF/()j7u5XFjURK17+ăU"2F_=Q^pAv3ilY;&3-4Q.i%;49pp.^K/8:mm^Hclh6s/4W+2$cO9e'E&38/lA6\*ăU"Iuwa5?H40<mhuN?^3vXY1Xg#nx*-*,DL,7_f6N=QG%tPB?$P^(rUKSEYeTaR'6lăU"Ub3IId\CL-2hI=Sb-K<:))gI6s2#cSC,ft86bHQd&OkZeQJ*m&jR*(XPHOninW]ăU"laC-&W%2v7XBx.FPO2TNp[0))8xKFg;ga:=B)*Hnc,VwaZ_EKcIHnwZdXStV9,*ăU"(v2wcGtH%DO.Cx5&a*Fe70UhC&1OcVO^\/s,NsT\ZtA9OKAMyR)rZmt<T=J_L7VăU"-eRFHLeG&ihVZJ6AekhrX\(fm=\]Lre:Ds?6CP_XhkSHd6yhV79.a:/Zqo/BrTgăU"I+5\RF8k-O*SCDZzjB:f9UcU0M:A>f=lW?#5Y*#i%a$#VP;^0W_=7joV'E$lg'WăU"^/;ofmI4_^?t(gtt:M=0uCv:dUqTJW7v?'f*GXk(2*_mb8p.*8l#p(E4EMjce4FăU"lSj0Z^ZMFlTX?t*rx$Qx;wIVblv/]JZhXqDq%uIe:gj7+:qN^H_9x-8T1h=puf1ăU"m+HTo)0^d36l+<o7q]hc-VkG:N:N_WFYfuc?#o[2^t6mThzJO?]iZk+<N,T0/vnăU"j.Ef%M;*m:dWr8dUd'XsT1NU;'WLK^-N-CYy$w/fI?AT>XO,jn\xkDPefB:>#,tăU"1/dXjUC;cP^,=rcQq<=/qt_x+b_PT6v8qve^k)Af6tQiDPB:*<ZATjD#TiI%'AWăU"gThi<467jH/l6K*s>hQbVyG<NsVHSOCDMm(9Z+Pm#>7dyoq+sPv[AunLS*s8I3AăU")UMwY<,8pj9\<8M$-rjjLScnR<E7+VE7pK=hCHaOowi_$c1l^H'SY/U>*n]Aba-ăU"TZqLXCR/;6u:4tv?k3S=8^kzjWArZbY>$\)kLLeq;xDU7ni+iIINXr?4P9E0;Y)ăU"a[om\]Uw83Rn%*9<?GSqCYrr;XW\4()\aiA?+z)TsHfPXwI&IOwSY''pxO%fBKQăU"fM8mxYMSfvy_+kYOV..v=<JIky,uVg'fsabIesH4n:9nGE-X0qHkY<So<'O4pLJăU"ttmb)%&TWK1]dN?rA]7F&)K(x:44V#8YG7Il[v+;kNaoCGg\W*v)vDpN?^aWqtZăU"\$2bh-V,D^A5SLzPQ6R98NW6Bq+,xRLYv.A*dt5gPt^Y9c.TkHe9#L62r'UZgY[ăU"M0nr1q,)8'(*nnRua.NoF]q9hfo%uB2qf>ucC^vD3KBa]xwoO84^6$dj^)x%cQ^ăU"OWK8rK#bcFYtH7Uy%'R[K]n^HhN]?iKg1Spni0[T\Ha47%v7OO&3m)'0T%mdzWOăU"EN7yCUgRz2mIkR;:WM%MpY4mTe4WA);D>h-u/0=YS0:Xn*/>L(QVRv0-m.af(bRăU"0;Qnh-WP2f/v1*SYUO<j,97e$wC=*)T=?=YS/k;%tAn)Knfj#v,Rr=l\AhA&Y^JăU"G_n4[iOora:k^lrWn5I)/V^a),9#U:G,h5d3S8hI;,&P]h>DO-\LcpTQNr0][jpăU"unW%4ke5P+$iXM5JrD>]nvu>TVo20]LpEI7Y&-Dbyr,AJ]<qlBJ3><,L[Z]8Z0băU"]U/&56&?LKfR*p*SMRX5;v4X-uEWX6uuqHMkin1>s_Af$.CJfl$HRmg>pLSYCq%ăU"$6RhblUAD&e]JHxKs$5XA2mIKSVfqvWM#z%5b9sxgjjF*;3Jg^AC;,=-<?d4EUNăU"Z:F$P$+MLNg0vTT^E>'I7Y*+XeAUD5,?BQ#ev5MGgn?qUyk%F>gy-_Ne>c,NR1,ăU"Mb89U3QK$\0EHXUa$<=a(93lKSh1p1YiJ+IPYO<^I_W=ChmT9$C*+>y,ewomDD]ăU"jy>_+u#%up()%9%%%#-%7X[YGb8=cvR27%%vU%%%1%%%%yj%xyvg%VVSgRfxV);ăU"<B[]47wMz]pD_e#KFXS-.:=Xb*0z?egn9B#I#W>szp>QOG11;Fo/hK?8w3J<Tg0ăU"IrE5g<_4ueO?DLVti0seEcb4\u-t$dsBjd1'NeAN$'qv-DAoD]#AA)HNf;Bm:U^ăU"Kr79;z]V4uT?bMlm^,$G'-v/C_4AW'kI.DsPhrU.;v^Ul8[V%Qk=PK[1=G5CHl^ăU"%c3H3tNnFjSt*P0n_BJQ-(Ut7MSm3O;Y'JG?\wvQ5P3J+Y9(Pt7+Xm]5*;w.55?ăU"GQEmF7%F-u%YisjyxHOdwZ=:F$QUq1RAHv$6+Q;EH3oYVPp&g,n)5=9k5'K*IX.ăU"+f=Z#bkUFmC=qBW/(EXbL-B4<EkI0a=YLq8p#jj'=n#d-=/Qo7^iD5s;Kc1W2\măU"D9_IM6k1?/?&_Gd;Di?;v7f'J9o_>)baY[nUd)$]JFCX.Qm1S0J;S<aC+y:(,D9ăU"w5za:[#)$mb>)Xl?,3W_Vps)#_o?l/*sjntrM8$C_8<Z;j<O->*Ml,#et'DU=.QăU"8<U+U23a?T[G#BH8*6]wSG^LS%]j>S]Slb*052D>ZsBAnU9pNS#VWlrisRzdl8săU"ySrej\;n5eWIO^9mkor'.T/UXR],99bpbOtCJ=r+j0U62MsU-o3RNvSgWH;R4FUăU"P&=J4(uxUMgH6?07.e5-.b'bm9i;>Qj;#(e2#];J9>Tv..q'3^lBeiCkkZZDGmVăU"V/JI/6&oxui+YVkhkv#tx.KqGYeYE?q[b8i&$[]Ke.Ir/C->BsQ%dFL;7;B^PNBăU"Uv/qX\]AZKI=n6DBaELxbOXR.M[D4r4<QgA*?TbS4>DQ9Z1if*Un#[xDB$N92S=ăU"gq7%FqkG#EPLk2i#AGS/+^l(f&qX,4+#1dn9lm(uc^=U^M[l>r.RvX+qE]Kt8hiăU"ZQ#f,9bf>Re)1KK^wAg$>s0*YD#T%5$VfAuUQ,(2UqWvS-[W;O-Hb_ov\VQK-RHăU"'IfmW\7Ge\Ar.l62//gp\sUlA8b>2+<2;)Qw<]G$'\<U=l$U;?d1#C_(OUW>].1ăU"+1m9<u-mQkpN\Qg\Cr5,%=8'*HW>s,2&.F'?fYLvK%Z97s'qek[1iGXnN*gt0CCăU"hd4EPC(Yjf[D:1HfHN56*7AuQOA5r.0u274(gQ[lmBMr6gVLJ;^=O.<rvVPrKbYăU".D>La*.wiDn=9i\*,D=ffQleeMPX&dojXQ4pe>K<%e<vq>/kDlh,Fr?Gsd//lHqăU"L<k8hVsJCZM)d'IzCXI(UXRU?hci8&0g>V(J]n0tB(Nt0UkG5WSg>thf;,N^)foăU"]gVuYUfv>oo=8?rwNQBjk81\;zn^6kGD1?[D>]aGwrI/$5'G^eM_6l.mQt-_BH*ăU"\#0)?WsKn1')962vS=BP*29-=DQP4I-9OO^3oo\k+t]^gRp;3p1cWJ0>%mxde+8ăU"9Qz^P%5JB>Wlr3;mnWsf:m5&1L<Ph.ksLSxm)]5M?AUi/=<tU8wfdMHz?wMn+gYăU"\qY%xDzI()BA83HD4s'k8Y4)'-_Ab_7;>qvTR[)VaU/d;Q8YZHhZTIg4M^;Zk-aăU"3ol#PrHqFE6xEvZ^QSdur+MYe^sCeRE>Eg=P_h6jAlY6tLOr[CV/Oh$#8*fv-=BăU"$6,FH?U,$?&?Yjh0$xYmxCf-d_vM]^_krL(%eX;Ro12L:KQ,Nb^_Wl5WA=KIXVyăU"_T;N\p3w=c+XC1UXA6J-V?2\GM*R;[PXO_2&m=J7D.5LS]qWe%eJ\?up<Q>xo,LăU"pfC>E=OR^9Y'e,\&7Q_oHp\f\aBi:=i41Gj>Fu]AngS8A7CT#jwRSa(^,<\WpMSăU"*pPXL:k\kH(;]qhJ6_4=9;aSR70Mu;\(j?$/vFSK9*5^ANC'Rg%WqWJEP-IA#WrăU";(k]UEv;gANamvr^Z8omvJ+An<n\4A*77lnPGA?WoG>5J+orh&lk[3sSSa(,&?6ăU"s_N/&.Bd6>#iA]HSh)cVF##4QNbQ)]6UjM)fvmJPClY\[nw.\<5qeunh^c:4X$dăU"#WB]N0doH.)?5t0<U,x>mhTqJ)i2>$Sr5Afq7Kgn$e9B#HL4lS]\:F[AN,1%'mCăU"p)cd7F]nDA.:v45G?1M:WsmneD*o*IaxA>f$-[A4vOp1a#c8t:Ds+uk5,-Dflz0ăU"XS(Q?q&T>5M1rR/7y;,zjv)jPl/OL%=Be\D4p*%6HwJ):W_?#t)JQV*A[&t/-%săU"ab.BHB'F1Gft/yQrO1&+E#5-XQ$l\Mo;fVZ[e(tDFx^EdUqBrC1(B.miF4(WP^QăU"/c&fVR.dT;iWM%Hne1Jqn+Q+CdX-7\Sg'3u++cWqbZZI]MdeX1t=k)d2/xpV\<xăU"(s<+W\-i,4zOw>XI91[9i5aJQ09t8%wX3C5F,Aui1n673;ogCUOa&1ioXFQS0cQăU"&h)t\<)ThV/zs>0YSF-Yf(>]hA''RDm2M75R&(=nhgfix3N4nrwjvWSD^ou,_x:ăU"(S#/\DCnkjQv;N1K:0jLid>>o:^$rkpuLQSNs*V>10>#&ujx3pH0xLJrx-ps5*wăU"<DZ[X8#'rz_ySkzaTa&=cV3ZffArDhhGMWMH1so1\r9m;C.H]9c6dV06G=AEYcEăU"[MWjGZP4w(8,m8*=SJpa_VID#-;6,Sk\lrYl1W-5?m5+%xLs?B[_a[+7j)Q:9&7ăU"9FZ0[4K<6N_OHdC$O/fPWJl]D6261s]P)KJuVgX4B2HI*_pF,eCV$Z9pS2<6Gm6ăU",&)tA*lAnGq($>sFjq[AwLkK1(&n0&0p;H\NZ10$q'Un]oHlC#?;I<K;rg2rAuSăU"UsaNR1Z(^)4+rX?F,#MeCS(w#02dXwN%9onH;uIUT7K2#XI'7,>V%(+Z85wFr[(ăU"n]E0i,4iIc<;&oK?_=<BNOullub1y3<RiS/mM0\4_:hDhwDRy&lS[YRicJVbYAlăU"4.Q3jAK?qLh1XLK&AB]\Rov$i+c^B<]g%=1x1nHeGjhl'%AJZdl?xW<e^d7Ki1JăU"&pO4xN/[ma8/qKni9iCcI9sBReONabIN55Yc0tlp%]bK\T0LzuOL8-$yg/DY6?wăU"_sttj]^,3+we?ZI$tkhiq4VjbNvp-)+$tpHyF=NouQj,q+ZvBH.$VevZ0-^O,3PăU"2B[k%nJY/03q_V+0:lEE+DdocZ##3Y3TK;^WeHcni$2luH$qMjq--VDj0UABXNhăU"u]GoWD\Zh%djKhrBKi.Y-S^gMjnq9yVbR=b42fmZ,*12J/=Zv'''H[RY;4p:6#găU"dIYKRB1T5AvXuVDex=YRw$a)JVaI(X_-NbrOYrnT>AN:aL,?+1N]CgT4+nM7,R%ăU"y-b+[tpsTl0r'C)LjJf8#OjWY^,JQP.)qKZLia5;X*6QEz[N.Wt_yq4SW/=mUS<ăU"Q0w$%w(TiaF;>7Op/MJhmu0L=Yebb67mW=k+1s5mOMH*k)ds8-O2Xt$5H(9Zs*_ăU"\Y1OrG,Z7hmwY])\\A?MQS*VE$&YI8'XhrvZ&/JrYE=Ic>%WTOKdRr<ibY5m:)=ăU"Z\;R3fk[I2yV[U:rLh8cy0XrK'zT.)/9uZQ7auNSmr5==9I2w)(WajBeV[mHyWuăU"aJ0YLi>ZAc0,#*,>DVRQcT)\(x*^o1po7'YtNfgtI#AxC2EHYOM-.[W;\-Fmb/NăU"Gh*T0t>V<iHsP<i\2zu?6DMYvSnrENO2cq-a,*>XwWtKaWn-h,Xev:#QH.Tk^7găU"nLj]6vcn1i.pjJ6t?zeE>9SkBDZ3jOBT?0UX(YC>GJyM'QA,L10lm1,_-.jh6zhăU"Z?,SA[qJ1nsB:%^l:%jvdG1F\-B>uzS-1<\5jPn:PUS^St0jSqfCA\'B&b6'W=.ăU"#%2_FtPAfRjfT^3k3<Q%T?l-Ig5J&4*[05<d,2ex7TOWNH]>x/wkLiDMGN7)r#păU"V.*qhy<2.Z^Cr8^=ekRlAIs2UJete6J/JobzT>cfr+z8ZAM?JfR2u-^\1oxV0u=ăU"Z&vab>iWi&d;+l7G;Pb:kgp+*.\Ikt.(Y,x2>DQL9RjJ+wH7/+&BGrIEkoY.0k2ăU"TL<dW9t.8)RP%WTLF%cE'Ze0o6G4;kq/iO\rxwGe6#11JeeQarX,p]%nzV2F4zdăEND SUBăSUB V3ăU"*=l-Y#:dztFO)zAfqQTtUyHF*r:\=2fnkpR%bYY\n]BHv_-ua#P\f$<NVP4]5<9ăU"]wO8rGAApF:H:rHg(lrGG7[m8+8rID?;HZGbFj;,g'_:equK[u-7-IV1N0ZI;,,ăU"]I.nm7o:8XfNDuTDFM4cnNZ6.t]Rd;W,3UmMkBhupknNs+kFfE^v$wAhw[8&AJSăU"IOdMMfNKMV)(drprB%5e'n#xSJe;[:8G>:;sNmEaaAZAU6RJyWQ4;8Lc-#:9-X<ăU"o0.'dgM^60o[U8D8vWqKCa$4%\CWdrh&ua7vAEFn=n-c&ec7-4764IGISZIPcN0ăU"k2CJ&M.p%RM7:rxU3z7XJJjWDm\r->FzUTYTKjDslP9\;&Sl&qb_R,sM<4[^a>lăU"O/p8ZT_hf1[6\11)241\C_Nn,nM^ca$fuNI66'Ib&R1ber/a0a\VqkMkjha[lW3ăU"Dt[xKPj[rG)Jyh-vx*u%p()9%%%%-I%6u)7GSI_*B?L%+%HM%%%1%%%%gqf%xyfăU"x.rS)nLuDi4muCT;qt.UVlVVPYLe?FFs0g51=+0Yeh?FQ4?444$L)Fnk_h>K$t%ăU"VbgRDR.yi3zzOYIoS*%v+1A%B%%eR(a]c:m%WH1rep%&Olq%X%wH,)0(F:%z.VzăU"[kF:2d+r*t7ZSM4,I)4IIE6u2ADY.F9mCrVO&ri4AV(ShAC#qS&>3*4&t_KiZ1NăU"'.g<MK5#=*izU#F7T2\bM[n]%wBXc8YUnK8QFY<ch2C/?=i8M.S4d-OV/C:CJHLăU"p'pehd8Kisu_*MMkT-S2\:>IYd%lUd]AcR;0*kLA<$TL>qoAmqeZ$;$^j\M=\oBăU"8g[IwfRppvkIl\Hybz7&m^GANF=<ik1C.EkoH$ljC>:_CSmINZUYe$Jm:.&9RoiăU"NZAa6=\waoK=>V\&[U_Wm$Uam?EJ%>)Tp/3wulC>ecxEsQb%ILrt_FJVeSKd8i7ăU"Q4U^ycd'Cdj642qMUi&#_iyZ8hc(mRYCTM%njfZvj%n\1>,H0JKtV/w<cr/;&voăU"2HJ8j/-Yvu.<UVHu0S:HSS#+pur9*6X+b=%$ipvviCQvbThZhP'UXnr]z<_]&FnăU"F%(/7I_28'DkQPgo'?A-g?=c+Qc$)bj/Mp==qMLLvcB&50n]y2>E\^BU&0X2feSăU"F9=:to.DwKZ?o)qYYMnm\&j9AV&FUb.(oaWOe1rab?KDk\N7K=cOD>/i[*sO1&;ăU"8X7#XFVXh?JH+m5WnrGE_B'6ad'p0u-Y6blLJaoeFs;bZebc*fX,V[W62<Cscc%ăU"tf5j.E838P2ifT9)[\^x&cwK,R#f%.N:JbEZj-_0[RpZR&Bg1eEJ)X$&W_Pk,\băU"'zf,mSd]8^4'[bGr=T]VQ.+%?ZnaAPZ_XVNXRP-$e-\HY$Gr#;L*a>GlC3HZ=YRăU"T)U20(([kmbBB*,WOGj+7j#Vcnq1''UZh]L*z[c1/zJQ_IEnb;*\Vy78b%/s4]PăU"S6MM<:oeff6YS:FBZRhs0j<Ui<8iFC<AFZ(zT&'/8Dj&Hp>f+bVYDW$a.)*dCicăU"<l95fvA\*7DR_\>qw6i)YXd2fxO]hsf5X[UrmZV1xZ+mAlhtM0+-;>tl_7B0Y$zăU"+#mOqKK$6cZ#7^kJuq'_\+TvNUy=(sE_j+y)x?5hUI#NyhQ;mD.WCitqaiGWgqkăU":I'%HN6/%6rTkhlfhjxn'Ih*fY7)VMY>lW0lrg.U#/59=L2\(L(If2Cu2K8f(E(ăU"Z%Y0Dt5Sj7vFMrD+K;jSL/NZN./AVkb4ZE>6iCd1vcK^3S9GDHM3%bZBPNjf:kyăU"VSeA%JE[REWaNgx4nz%.tT7OK7^ld8oSqJ>>S1rmxKjy^i'3?SPplYijoefsb:jăU"w\g8X9gSggV18(Q(Ur_.E9bKrKCsTeK9UsaWTbMs[,p^:E\N745'hP4E8tPrcH-ăU"%+[=\RtXclHE33/%YE],CRxt44YhX,>dJseR1zCQ>^>lPn><%:tO3f[OomW;H2MăU"=:Hi0<a2D]T6\*LXPEusQZ95NrCPBt9F?m[fpGZJj.ng\H[uf2wT<>[J4^1TuP9ăU"&EL,:3:d0[VtOA8bH5-)T-E.+AHG)g'eA&gBe4S?j1k0:N#+v,>A1^TZW'07srdăU"zrxx)Wb#$+&&7$f>9'?[^-N6/V)^\/<5l7mG.b<i]Qa[,GOFFsY'pAOzOA.cAkRăU"Co7Ujmk($3IPPM,_4'N$Kj6/,4chjqHPc&Ut)8phhc(,%^^r*ZoE(iGfdn)C-S&ăU"LZS+KkaiDbGw0y[\II*AlO^#;6Oh4pGP&p/(#66p=-&<hMp\kAs'.bWi]It<\CyăU"v02[9ox=)O:L'.V+zqE47cEiObc#4(q725NVVX3OpdO8VW_le]2,KOi<h;%cb)9ăU"3FQ%3KKCT&BLlD$f;-6TWxQG?BV(qi#[JU:H).p+$im$fioSu0;&VHA7kYc7_iUăU"0IIzPe(*0bmCxRvZ\w_[[+pb8)FhR8YRwg^_?/nJVHc:d'#^m54g.UqN#i/'v*WăU")+#%AnosDBgCY5w_iVO%3x.kzia\ZtVL&(\2P5>GvNKV,vS,&Z<sxL9tWQ6:Om<ăU"jkgMsEi4idC#S8uT&Yn(P<_&8N'$mzMbl<MYxXaj#Vzi/(=A:y6qfjzk>qX\$(/ăU"xT<LwQqg7fvXt^_f)eyNtvZTxg3+&Z_)*(^]&.WuebUuB68*i;KTBw*6nJfR:%<ăU"_[Mk&nRO0Q0w1&0EltN-V7(/7ni^&[N\/\pe.f$pmHB17\p\6oU4,OLg4DcCO(0ăU"/+X9m+\%xJFPd0G?u\GE-_4[K5q$l)T%]uxWBqsW4fGgIrdaHu14]s%GmL:.,W^ăU"Q_pT&Z[*<_wWOGcwq0lJox3aEroxmyeYjKo'_H[;_O4[)La]1fa,ZkCUyU2V.[)ăU"3=y'upm,AQ[QYG1IalKQVtQTPtUq--P+F3qk*x[JD%D7kKF/k<r/VvkM&X)f=^făU"RzY.pJ98+Pon^mpQxTk-%iSVkQlQ00jZ?Ns[&2V,pJ>j=(;Y3h#;p8IhJlkqpn:ăU"CvPCo5(CKRW;kvao<A=q$dwMN'<$$+xPg76&d.QbuTgnebnygj1^-p.djXg]4MDăU"(jgO4#CopOG<.p,ycWLKr\etDvr&EHU&G\#U(ZuAQIg$h665n5h)xBj6#]qhgYmăU"q)]jkTmXj#o)2Yii,Ol-Le1YGtkjr0B$m8eT]Q6fYf[oYbsL)om0_3LJ=414kN.ăU"C%+jgMSK*M,so4&5wxj%X9NwVs%mePJivLa#fch*n_G2;3%VXAaX9$Y_s+#n*2qăU"u/(\+H*\uV.I]aGf>sM'4wdF%Y.Ab.-v\w&3EUuoR3pO]k#Uz%/(ow/Yw;(e\3TăU"oR^jOxOg.749-oI4^So#fj./Y3#'0dY^//H9VzUOxPU33t3$0+,&YHnWbB2Rs6KăU"vL.02;q[sK,7j<a-_p^/lg'.Vao'hDS$hF9]EFc&X4AD4[#g[30IUp\DYF3ZnL;ăU"DLVkhEfP-N9=wKe%YTMDTTtL)x^ND*7q5]>Fdh-#5lCQi>6546$&XAo,]Qm/p(-ăU"J=,n3pr*+BYa.wdBd>qob&\wxhLUds8QKhr,wi&1*#v%T#r7SOC+;o5Qb>#JW;;ăU"tHY6\p'k.:PXH$b);Wo[i(fBk2'q=iYsdJhxFE$U2&Z<=C(-3.1GGuqi^WE7V%=ăU")<SNk%\MF,ZjkG+r/z>I(>dRU'jQF^wUa3'qFypt5so/<W+kVmdhR3sg<Kv'VtJăU"61I:'_E;p\kK*TB07QP-U<wuV.$g?/]85M*n1*oYK?pu>]'AgIvXHj-CV1p3Cm(ăU"878Pg+cTQApso>Y;.zpL<mcb6c([#AQn=1i:f&,.iGPF//$jufu;MEhQ>P(w3;(ăU"*XSqwVUCn8askXkB)p20?$4fJ;J6r;M^zf8CZCPJ0gMsm+6ersJWFECb$)/&/S?ăU"%x*Mih]):/K+)V1)4Rb?NdQ%78a?cJkijcUiUN$VyB[_%+b7zifG&JUVFGQH[F_ăU")0;bP2_lKIy<,$q_aDLtp%gj+/qqw&9a;z\u_TrJP0DeX\v%\S0YYK$cyihHq%^ăU")%zlBh3XHd[,r1Cz%4nprf0F.D0>e.JaJ1PB%Q>j3G]\q*F,(m')^vC.Xnfv9IIăU"PF3P(Qz9nFm&,Px6C4g?mKee:Y;Q.2[5#/(.BcVgMx+S)#&'&H7Z%lFa2TRe+1dăU"2McL9C+_PxAf]N?GY7JCuis3fF+>hJ1A[F*)46]CJBR$GZ].ooFtnOfFBrT%$(?ăU".3$v75%EKu(XuO[=DID#80Abp&<EbGRB/<5(4RXl7/4hAEo]/]6xIUaU[Z_1h;WăU"iJ34N\K90Pz;K<o*K4gns.6n'W'BPp0y'et7.'S2<,4#?Kltq:_zM&>=1Iz6+FDăU"DG9'6?W_^1NW\Wc:#97KS,LIVnL#$n$aR_/:6710/?2ax2&&q>Xpw=1G9*[e+9NăU"+a$MhYOkuK5)^fPGJapL\QYQ+[Gz>+\m/ZI;t;90$9Fb3VNoD1?o%T?bbM%7krsăU"XFt/mJ,wnWmE1:ORE<*mEplzII*Sy=pna<e]nRp:rG5-lfiV?Fhz_EVUSVmM3IsăU"McVzR3%DNQiR8\mhgq&vDo[XB=nZ&96,FoLUgp5)9:dpr/Cp/s[5&nPPthZ.a2qăU"SYD6/_HUo$l8Dc)PvTL2M6*30$F_iCBM\7t]\<<Sen79P8roaiN%z*'(Yc#IPP'ăU"D0iJa6dYQ[UUzC7wA^dN/nu]iSju#ExJGqs1Xpu,1bz3X_5-p4UTd1JihNXO/GJăU"c2VEI>G+r\0\P;#*a<02v*>(D;2R#p3m'/z<=jjjn\CnZ?V0&OLwcE5CoL_h.qgăU"Ch1<-)5E5rIe'Le)uqymj[UiV9FP(_Lle2ib*:tPOf7+\/zcfu4SZ1_>?<Msn;oăU"]deLv)<EaP*e_T\/.mlR%IkfE)EsNsuliqw0vFiR%<??'=VMXe.8b53]$MXE9heăU"mShN+qOdYHKtS*9t[;y?um03k:7(/7TIS?M#DNu]Pm5dTOJFriRTpReT5Jo%sApăU"0QDiB>:EWHD%9>9za1ItBj-*HX'#_L](.Pl[3js;WJu5u$F6oD6NilQ[L>xO:6;ăU"(DM'K;Lkc-4.M,f>gXUrYgQ0\M[sIS;k1F*M3yEwWhgG]YQXN]+uJ.Dr\QRHk^\ăU"CUp7Y*\*GiI+3oq0cU&FeUeg:2EOLF,G-ce5m-pX)(lE]Ix%X]tGaX-EjaIm=qGăU"-R-GY&x*2>Mz1Fg,U+VVsh&+iXpSr4ol3Ssa^Jh#olqhCTY&L/tME>nCiBC[w94ăU"CIRa(wyS?+z8sxbQ.v\)%+G4eSMs&9h1gPPycT$Xs/?DWbE'*k\F_M'ZRRQ;'8_ăU"gG1=di,ikplfrfe\ef#Zo[7EmT0xq8.N?SZfOy])KY?n6bhew.-iCOx_uQk'=3năU"PHRn:TAYD\DRzLW1DJIh]hxDO'KK<;YREA&B]*E<q[HP<%^n$Ne1&+SRgzhRRx#ăU"8j9vh.<tu/1z5ydh^qp);2LgWDdeEZ*W2&3Y.rtM;T5hBSlOr?Dl+##H::s[e_4ăU"kGGw&var.#5's(FlZnr/397sRwS>1Rr+]7o_2</#QZpgJ7Gu7p7%Twz+/>&sS>8ăU"qgr7Ufv/i,[_/v?ScQ;sCvK9QdSRn&R\I8iMqXB>H3.)84pGF+LlPlu;27rrcSqăU"\5/Ch+kT,WSc];;R,9n4?aN>-7g&RxnfiXmB6pvlf4l6E'f6pL(S.%o?3s?qdERăU"=X=\#xWT:>?j1_GzM9qx^A?>%Q;^j<ujf0u2YIg-r;2(p/%%sbUxF&E:z6m*j&xăU"YlfcIiozaaIcAwn%$4k=ZL,82E:Tp9<\:]GdiHQ$ZQDD_g'L/MMroqU45W-Xe$qăU";[gJLAA*AzTX95KXx>G6r39%]K5t1HYmWo_>0:KQs]<S_'u-E?qVtlsJ>qnl;XWăU"+V1SdFDjFW5p%M6s0yojCLrTuq\07mH_TT36[iB%>4aFWx5XLC'l(%942,2GGe7ăU"ZB4W$E0$op;(t<(Ve\8Pq&(>JPd3y^AQ.In%.Szz3e_#SWgKKrVNkwgrE3q8RVxăU">VXsXIcFL0<;i*%W>,bskM4kyEibqqd*rl[FjQMofWEI$X(2di1L;Az6,WW:N++ăU"//4&jaN/IOrxoIsPL.u'ht)q#u_^7#X_c<zH7QPJsQ1+IPDFNE).?ak;eDNT(BpăU"A7TlWi[c+gl]0'v&2DK(jQ,%8\I5?u*=#P(/r&4;Yksnqfw1<G?)$8Om&cZ6M<RăU"\*$$Uc'LPMSo]a2_#E8500)nt3lgR/>u,;Jw7.NhQAfIn]CZ,-^Y#J%qHDUnuGOăU"=tNr[7CE38gC6$wGB=Qzw]=hl4DtshV(tR+Fne::>Qk$B\Mx_VbM$lA,SFUtCF2ăU":PQp=h\](r'7V/M]x3gQ.8?Q\7K$rTbD+Y?Nu,Ielx=%MtMlgK6/:]&f(f9FTurăU"cf*Y2rt&5nLxT\?qlrPdK?y,aD98OX9cnuN\;HvLdgF>-1$5Fo&l0p#6j+*'1P^ăU"S]ZRU+\MtfpL4T]f^Lg6IH8y'?8(r,(Cq%^mun04f[p;m?G8p$,LSfG1bgVSQu=ăU"H'2(g2u?KdP_u*Z-(hGNJCF-+=OA'DJZoLh%4-))U\XVU\GUAKr[Q7GVFj>-_'săU"D,d_5&RsQn>7zb_c.w5Y_ERoT?:S2&NOHm8dV[6L6/)9yjSv)#0G5I'$MBs$P8GăU"z_LG7X[up-J7l1/0Ko#F]*N%6N&ls7PiRiNqgmFbnKI9oh4AFg*PLh(S.dj0<F8ăU"?Qwg7X=v'IVo)%a-VpZXdrXR'9lq96sV>IqUNRXOBq6/\O>&3?*Mh\04PfKNQfUăU"318%o(+fM0$tb:#H2$Pf6;'K5RndgzY/*;LUpbi_:eL23vBk<X-S.Ts(a(p[IuRăU"\qHmN2]&Hco'L-cXK.c1>hon\;tQ6mRDb&ITw6tgJIiCY-5Ml9<+v9Q#rf=s?DQăU"W:w$e#9NA:_FtDTeM8Ty%Jn%mDmV)bi9IoKi&R^x'a]q$pD0#M8V#J9V3jb%USrăU"%o/Nh*wZ1RiqNJ2-$5GA_zg3jkUtB-*&e>dH8+6YUsm-KuhW%M>A%V/Qx:^%YOxăU"Oxhx>+N%nGct3;5dF&$M_SM_Bf\_Pmsp2S9Q?Lw61]x1EajkpvZ[J0EWTouKYn1ăU"YpPSBgVT+Gb=N4lGk>WB54k<k=FE-R_M1C&FlHmfNW\oM8U1+*n]G1>-rYG3p]lăU"W&I^I8f;9BWZ+B]eA)V^2op2fJcoI\e%vRCd5yJVRP1boYdGGt[3DK:Mv9_]SsoăU"foGkGu]WIiK459X]0k=n3gHzx-eN%9UerW=^)N3TdnN3GR^9J(8:jOiW&Cj-.-oăU"mXw#[e(lo(upTW?sPZDN'BK8AX#GrcpgpV9^9ELzKD]./>C0/3FF-\xL=?YlFm(ăU":fX]&Twjs;#jAf1ClN_I(Z$a6jmvuC;XjwmWKz0Lf?<%15g0yluvstKUQ(LwOZ;ăU"IlS:#H9i*h^2GB'j24b#6$-dG:DdN4a\Fg#>)(&]yP#utIdi=Q;\:nVBx0Z89#;ăU"3JvAEJi$-2?9d]q\WA&+>I_/Y4gKDCffKx4cF9)(ZO8q7$b#zCEU,sUrt[F1kc]ăU"JM9NgoIWhiGA[g6URwhEy].e2c&cv44[us/TQq3q.Zu/&L#os0YNlTr?XWl$KH/ăU"a&<3'I=^#:3vej:EPr+&ukg]ke<reU.zr\P7vrVQ3XPcJoW1%ci*a_vP*MTXZ?uăU"55#G1%ya5w#[j59OSb%oVrh3LgquNcH5*VJ1lUn*H,EG4hB1v1/\h2#Fh+>lM6OăU"#FT/'[dR,yTe>lF]Im0\Csn*%DH2e3zJjcf&H29]q+L=u5F)iX'8MR8NEd\vZm^ăU"+iWfZ=PL_]I[BxauROAK'NE1R(FZ7TE;oP&tmC[ZXo34kDiVH\-HDXj/v\BCTdyăU"m_W1jrSO0S*J8dt93OS8cL:,e:06s=dUf6MPREC0,2u$U;4dM4T+kM,UB2cm9tiăU"A?[1Zm[Q^CUi^SJf>;2xocHNLSP:XRpLcuT6nFe\eW#tG60YK%>+:[.j];0PctRăU"j<f[#?bP<F38V\F3)[,hMXz*F6uImLdAAAw1prno-R+emUYSBTk?,&(PLHxcZv:ăU"ceCraZ\,a-ss>wND[.W.R0ZC(_w-p##R0F:?n%?(F>;6lq-WpfSvRRh=)&VeyAbăU">q6ohe7KK5CJo->VCfUcna.VR)1\q&UqbDoovuHrUnd*skbowiC*?)d?='+ft(VăU"v4;1+:4>w\p%d9RCM<I=cIh$%t?R$g/:x]7[4amk1Q<Hp9m;2Z_O(OL$qHq*9G#ăU"p)$L,N'n]d?y=)Zij.=LeErG6O$u$ueLEM[kIr8qtT<fY(m[V)e6xq$I:MTh%pSăU"d7K>\RV5-i#:Uv#m](p9<FG[>rG;O7P%*7XTKn%8.Ak%_5Yb=_?e(3'NTVlqZ;&ăU"P'a;r;c&9I;rfUQ;4dM]2qU:Y.HkzgokRQ,e]0QBI#s)Q'nEYz-j=4#/,c;H11(ăU">],e'uE$aqJx+GS)Op3*t%UwCo^bpZUR58WO+*VU'g9DEgX>1\b9Z3YESAJ2lAbăU"BF5tmmEiQvrI#2qVEe4DWZwsPaI<X8QthEg:LDO8T7*%wA#%^F(e(*$xnVTKAQxăU"YZ$PMRF8*-1==,aJe)*4C_y_>e.*<+jc?_w9PP\Y2<1<H^B0h+0PCVHwC/?\jBQăU"ZYZq>E';i^CTG8_]LSxcrDp5c<as:/13pCIDkUix/b5QH,&HE*4JGbMYV;6*Xk*ăU"dWWqr*el;H$P#6X<B_$W>s2II82+^,WIl(A&+?4oQ)FGNgtT8#6APdGVP.2u?&băU"'bKQ?)T;GbTq,c7U+8lPEZYJ3m3t#nd9(Zb0Cl$]+6TXDi4s?;AEG\skAl3M1PTăU"#JuhR$P/b6aIu*#F4gm16A)9ZML3H5LcX[HYs*d^6G;2m^_EWmQXEuRoudEo;^)ăU"gvb#(NO<ZdR5C8uW%f0aY-N5sdHhb5)IlSyA9__IQ_d9jH0]Ka2cCfi:j4:Vkm7ăU".w7TyJHR->PX*rWSp8'^>.R&EEc_-o3FdS^2TrZ8-Ep#L%oM*'2/7Fn_;#K.9MQăU"s3nV6f7W^86oDTcMvcwMCw3E&lP.aVpB<,n<=>4>-6n$t6Yn3ecK8[Xhc6=.<p1ăU"dYW=RE<OygkvXqmbR<3PGG8YmsFfnCZ5LHk]MNZT:rog1Uc*SL_>fVg..xg$3M+ăU"sY2nj,R*RQ)AeS/v+CoF-Z;x)DQd[zI(S\]2Y_M^]Y=i/eYEVVLI:^#)l?ZKCZVăU"e=iKZFRQ-^#6uM4p1p>-bU(N:>na1B^bx2?&ifGyIY3qM(eM_y#Mv\LQ?3(09#)ăU"kkFl2i+DZjopW-r8&?*6$PRTFbA#9t<O&9%&&4*jq\G:#=W&p\[tZr%arO33^tYăU")t_92ufQvJ3JqBqoopc:/H<jD,b05owhJV=j6G_:gnp'-b+9+zrZkgCc0=w=BRaăU"#$[v65MHD_u^QhuTW^TfCMT?G+ZG3o\]Ya;uzSJNfx6r7qlTZ)gg#V40hGGXPWsăU"]Hh_1+t*UO&-gNTUl:WvudRT65/Oy-<HCjS61FNSYDM+9+/v<V-?+MGH\?m[tOKăU"C5Yg+wQ<,%p&<LJ/?,['Z\.^C6f%,r%OlFC.zCU0I2mHeM%GO#owV\/3;;&3kaZăU"1p,)T,7Z2)\vifKJcdh(*CYJdc/(%>Q^AAvqjfYvKjm*27:mwM:422WESh;RE9IăU")6fjjT?N^Q8OcoZ8Un2I):24[:F4<\Az.[Hm+Xg:wEn,MAdfwb5/K6#S0WLk&F9ăU"g*<eo3KO?l-&Up=S(ZidqLCRmNbujiT9r,hkTM=UlZ;L,UaAxZO^d$05.T,'MQMăU"356.)p6<ZEzacCr)97UJIXHB3Tucmc#cR-%l4oP.X1U$2FK6ohO+Et(XWY?x9.OăU"j3z$w^B%-RfoGQtQ$N']c=JMY]Lb/ri5A*.Ygej8x55Fhg:MCX,88O=^wBog/rZăU"5*OU%g7nCa&.h/w=^?fH*Xa68rSMSY;X?uW,Y.AM.Y/FE?P4.r0/c=KUk];U2l'ăU"VXLOG$O:2p4L:a[Zs0\)bPRzrY,P(KVd;dc*$m6.BW'/&l%5crQz104VNNlUgo*ăU"[of2YVY,,s,8giNTN7]/LIZI>e-0^2#hfpH*\UueY)d>,fDsdJr#Tl$pyNO+6=SăU"RaG%ce<%PeJLUKj4?UJ+;%S*+k1^$E)(^-;kRxxaWSIknxI4Jw>oC&_jFG*8.+,ăU"vmYrX*Um<^zxy>B0%?cjDUjDwkZ?d2mT_a%.X*tNZcGZpm1hQrDz[Y9(MAHf4ADăU"bB_jiY#6Xq6n1hM\876g&(dg:k)7SQ1PC$Kf+1^O74[vG28/RODalmX0tBQ\pb8ăU"c7lm)PJ9V^w-O$dL*D%8T#G$0=^tWkpZ;([oP<o?xNkCb8jZbDq.)VwI/ICfX17ăU"sJUPr?6pA,0q9??Z<kkR>o*8M9V.k7tV>NdzFcE)7t=9R$Ccd/pL6BFXQWR)4MmăU",c,Y<8N:w'tJd5A20xQh=m[:G:6mfxH&6w.iUyo,qtg#xVrP&0U$&pPXg%=3QX-ăU"KKi\k+#B+u*xaOD]HM&BhgB<B,<c;[;R7nu<uYlW[bSc*d38-&'O(EVJtNO7TU%ăU"2Z=*E_QquYD;;jgqy&Q(o\3UPkjoH[D?xBdIzo1,:XDaIKKp'eriKuW(K8cd&UyăU"_(ay?35)fb%(?PZ]Qld4os$fD*EYi0O7-748t#rN*8CChuGI6Bx:iwMi/.#U5d3ăU"IBlSSQnDwm;(Z/5b]$57y25<Br-Ur3opf9<\<;HNK57s8pMvM5EgU09so'zV7+EăU":W<AtrTsQVz\I%&3s.pg7V#p:D0;KQ\li/#(7kSlz^&[5+o$Ws*D(v=K6Rmt:hcăU"&sd,%tI9Dp;xGS-FT2Cw'TrRiJCD3?DLN]Ff\0d*h*kSH,tF]AoT3F>3',Avs.-ăU"J6KN6tk(*,]I5T$EBG,8X%SYZh>9#1A>j,4>OwPiiw2mBP0M>S^2SRJYLi^a,XSăU"Q8Atc<+WJtMF=x:gZ3^TBSqb)*)iO/-IRhVSweZp^i<c(mQa1Tq<21#il1h8Jy+ăU"z$>QAVT'B-jLpD).+E)7I-twp,'<t=O^ZTmFh+]6Z#wMIa/w<dN,[^g7:h-'l^qăU"1[_dY[Y[X<$mb?URN]C&,hsdOXDbvg3lq>I]U%fJUTp'W;AP8M:]aB]HgpH=_GjăU"9q]lKjq7^Zc9wtls#L7.CKGD&M-4CchsZF9L9pQMHOub:i_lgTpSWS%bV++cfDzăU"Z#tVUVQO85<+o#sDicI;%//.%:-pwB(>XP06Bv2K^(ikxq[[WTN\=WY,WC'=tV1ăU"v8j'g8P;';D%.MjXOC(p(($A?hbd_z?Hh^k<Opy]InmyX5^PwZN-Y?56x=SZ\HgăU"rp=?j+9>gRBF*,*Avf:sTI^8?.\F\dn;m[Q(j2Wls,(S+=VFgkT]74DGgG4A1vQăU"jcGb_N:AqqESISY056#.Da-p*^1+Ilc9r.Il*Y?i2)[IDBt#0\39c^+q?t_?AHxăU"#t1cVhs8:sWt^Q9?T,qnz4r*Z</bI'_0#5]/Zo'<oUB6d'rdnI9()CNnQ+)^gVvăU"^0wz\+nAxv8h#gXAAir5k_]XZU*I6ihlg]t,a>A#E8[owm3Gf4MVy[z6;]xeXOJăU"dupTDk[(,k*DonVve1nM+oZ[v^,\uHwc'1;UUMJK2;U#-t-<01a_1IQ)c<+5^l0ăU"'Q4Ee,Le1P%=2Y,I22/n[m6rBZ]CxeIW;4A,JT,l[g[].Xse_8m=T:BiU+R.?QIăU"BPw'8VB%Gu+%K7D]XaDfL)3X/kLifg2DhJ.P7WjJp_NOWDIm#iU4Q.wTmHa'a/căU"95(:*X<5A.<di-5R?5C,rK[8mO&1:\>,cJX6?JBEJT#9RPj(U[g>u]i2x>ON&S;ăU")f\vV\PJ&?P.tX5(O-P3-P2^XePSfKdU+DCj=E/)([.+^P)Oi'$6+^:nwxRsbxMăU"o1ugs\6#nNsP&)_5c&]6pqgH>rVT9lov.HMs($F7Y1[vFj#9ww+rtgd9;d$qvNQăU"6N2kMlm:pI)lv3jN_QP]D:$,]C4t'=Xxl)(Ol_]uNYjL5ilYO*nl/Wk*R]aeH7RăU"pG'u2Y;e+vSP6o=ZDRR%s5aH/<>&Xa/B,bYPkfO*qSwQ9sorFV4BQmB&'arp\uFăU"H#$ck6K)Rdc,O,Q$(H)gYl:o-/=8Z2-Q.aBCM,Z9I4x>mt<G%[kW2MmRZJlU6a]ăU"[]nX#pB=QGkxUQ8QhW/NZ29n17E2.W;(j%*mITkT<T>:QfpsFQrn?SXqtr&H[HIăU"&O-UCdoeq'LfLR&$CE7D+c.s:#,o$[Cxg-Ez7DKanFOueLuiIdKfU((wwU(tvPdăU"D:90N&xIw6Ol/LXpYE'S(O3ea=9ud;7n[M)Flyn=yO#FpHe-lu\f+jV,3)AAYNjăU"0li\ZBq_:um9?iPG1/Mr4^,8^cf73&,>t8Ti?m6E[',1F0a*Yat=ru^N_M2x9(IăU"_R$O=eUJ>gMkg%'mXN;id+NuV/cs:xwkWIgyx51vOJBPg:#z#EfN.EU#y<;qp%4ăU"?v]OHkf7IG(jc;:\G&h[IL%&ei,Als4)qX[V=BLa[gO#U$HX\pp.FdM8CSan=WAăU"C1/jWK1jJ)_oH)sgx)d#1(#K?7J7OI5lBvh,KZSfQW]KnS_D(,?Qa)$1u#s3B=/ăU"='xzqwi=VoY#fA_7H%_O]pdve>qU^4,hTWUEIh#*r)H-2mtaJWsiY_20cWLusHxăU"r<^zrY.us6SQ&q+5[j=TbOL(qBSUJTo/sS:Dm:I#Y5c22jTvNhkPWl%+n%l<M3IăU"CE3c:,EfC>xOGW6O4#*Sqp?UhX&R7gmhV5N#&Spa%1Y*_mbs/nEbyE>k_&p$Pb[ăEND SUBăSUB V4ăU"#AGb?L^R[yd?Yn0PMG45dVAxl*#T<RI\aI+5PHF:RJl25;Le(E1KE,x0G+;2JXNăU"'tu,rQRMvwZH(AX,f3<itEirIf#pyTTh#h-JcE:'n&j#eHjpDuZRK)b-)fI2V.UăU"[qt-8HQG.a^WO56H/E1nuOtBRL_2X1N8+T_j2&tPx=?)%Cz#q)<G<dXrVVi>8b+ăU"+oi9Uh9YPScbxC*TJDpq.2o<\UIZ-;.RlMc-k(DvmP'&TzW[WM^BMy)a_\0Tg(:ăU"kOjOWl.yYLLXWslFkP<EJk.lD>^AGe27bI).fYY9FkL8IV>:GY306(g'9dq8,h7ăU"#1W+[npV$PZFbM#5q.qCom0=hQCX']T&tZofP>+FW2S&3huDrM3(H<tJ/A%z?6#ăU"mcZI^8RONCOOnq(wxuD]wRme%=x>BohjkBx%wu0bn8mouaxqk;x0lk8dp2NdjmrăU"x(^xY*rX)?88CR?-xe%Zx&u>u\f8CP;eN^u7x&tV>7w&9p0xdsfvXCWxe<NtdH=ăU"x5hCYW:5_xa>Ts,L&Q%%9jyx+v%Tup&%'9%9%%%%-4%f*VOGu2X,t?,%%%c5%%%ăU"/%%%%%%%%%&%E%%%%%%%%%w%jfir#jSy'%yup&%'9%9%%%%-.%I*V=G+IS*c16%ăU"%%.$%%%1%%%%%%%%%&%E[%%%g%,%%g%irtv%gVVS%gfxu%p&'9%%9%%[%-%PA)VăU"Gp,Xbq/[2%%i%Q%%1%%%%%%%%%&%%E%%(%I>%%%ghw%jvgV%VSgf%xup&%'9%9%ăU"%%%-.%=)V+G.#o(U60%(%lL%%%1%%%%%%%%%&%E[%%%'%K%%g%hwjv%gYZS%gfxăU"u%p&'9%%9%%#%-%fARVGG^%)F<#4%%=%[%%1%%%%%%%%%&%%E%%%%dW%%%gir%tăU"vgY%ZSgf%xup&%'9%9%%%%-.%7XY7Gb8c-vR2%+%vU%%%1%%%%%%%%%&%E%%%%QăU"%g%%y%jxyv%gVVS%gfxu%p&'9%%9%%%%-%6)u)GSTI_B?[L%%H%M%%1%%%%%%%%ăU"%%%%E%%%%Tu%%%gqf%xyfx.rS)n%uup*%+%%%%%,%,(%c&%4%BF%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=66AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăKevin Fowlks                   MOVING INTO STAR FIELD EFFECT  kfowlks@sojourn.com            02-27-97 (07:06)       QB, QBasic, PDS        69   1156     STARS.BAS   SCREEN 13: DEFINT A-Z: CLS : RANDOMIZE TIMERă'Star Field programmed by Kevin Fowlksă' Displays up to 599 stars                                ăăDIM screenx(600) AS LONGăDIM screeny(600) AS LONGăDIM z(600) AS LONGăDIM x(600) AS LONGăDIM y(600) AS LONGăănumofstars% = 400ăăo = 255ăăFOR p% = 1 TO 255ăOUT &H3C6, &HFFăOUT &H3C8, p%ăOUT &H3C9, oăOUT &H3C9, oăOUT &H3C9, oăo = o - 1ăNEXTăăăăFOR a = 0 TO numofstars%ăz&(a) = INT(RND * 256) + 1ăNEXTăăăăăDOăăFOR i = 0 TO numofstars%ăăz&(i) = z&(i) - 1ăăăIF z&(i) <= 0 THEN z&(i) = 256ăăăăăIF screenx&(i) >= 320 OR screenx&(i) <= 0 OR screenx&(i) = 160 THENăx&(i) = INT((160 - -160 + 1) * RND + -160)ăscreenx&(i) = ((x&(i) * 256) / z&(i)) + 160ăEND IFăăăăIF screeny&(i) >= 200 OR screeny&(i) <= 0 OR screeny&(i) = 100 THENăy&(i) = INT((100 - -100 + 1) * RND + -100)ăscreeny&(i) = ((y&(i) * 256) / z&(i)) + 100ăEND IFăăscreenx&(i) = ((x&(i) * 256) / z&(i)) + 160ăscreeny&(i) = ((y&(i) * 256) / z&(i)) + 100ăăPSET (screenx&(i), screeny&(i)), 15ăăNEXTăăăFOR b = 0 TO numofstars%ăPSET (screenx&(b), screeny&(b)), 0ăNEXTăăLOOP UNTIL INKEY$ = CHR$(27)ăNick Kochakian                 GRAPHICS MELT #1, #2           NickK@worldnet.att.net         03-02-97 (06:56)       QB, QBasic, PDS        124  1742     TEXTMELT.BAS'Graphics melt #1 and #2ă'ă'3/2/97ă'1997 By: - Nick Kochakian -ă'ă'This melts any graphic you put a "box" around.ă'ă'If you have any comments or questions e-mail me at: nickK@worldnet.att.netă'ă'Have fun! :)ăăDEFINT A-ZăăRANDOMIZE TIMERăSCREEN 13ăăx1 = 5ăy1 = 7ăx = x1ăy = y1ăx2 = 305ăy2 = 15ăă'delay = 9999ăăway = 1 'The way to melt the graphic / text on the screenă'way = 1 -> meltă'way = 2 -> boil / blendăăLOCATE 2, 2: PRINT "Graphics Melt 1997 By: Nick Kochakian"ăă'LINE (x1, y1)-(x2, y2), 15, B  'Uncomment these two to put a box around theă'END                            'graphics you want melted. Then recomment.ăăpixels = 10000ăpx = pixelsăpy = pixelsăpc = pixelsăonc = pixelsăăDIM x(px)ăDIM y(py)ăDIM c(pc)ăDIM o(onc)ăăpx = 1ăpy = 1ăpc = 1ăonc = 1ăăpixcnt = 0ăăDOăIF POINT(x, y) > 0 THENăcol = POINT(x, y)ăx(px) = xăy(py) = yăc(pc) = colăpx = px + 1ăpy = py + 1ăpc = pc + 1ăpixcnt = pixcnt + 1ăEND IFăăx = x + 1ăIF x > x2 THEN x = x1: y = y + 1ăLOOP UNTIL y > y2ăăpx = px + 1ăpy = py + 1ăăx(px) = -1ăy(py) = -1ăăpx = 1ăpy = 1ăpc = 1ăăDOăredoit:ănumend = INT(RND * pixcnt) + 1ăFOR i = 1 TO numendăpx = px + 1ăpy = py + 1ăpc = pc + 1ăonc = onc + 1ăNEXT iăăoncbak = oncăonc = 1ăonccntr = 0ăFOR i = 1 TO pixcntăonc = onc + 1ăonccntr = onccntr + 1ăNEXT iăăIF onccntr = pixcnt THEN onc = oncbak: GOSUB oncreset:ăăIF o(onc) = 1 THEN GOTO redoit:ăăIF way = 2 THEN PSET (x(px), y(py)), 0ăăy(py) = y(py) + 1ăPSET (x(px), y(py)), c(pc)ăo(onc) = 1ăăpx = 1ăpy = 1ăpc = 1ăonc = 1ăFOR i = 1 TO delayăNEXT iăLOOP UNTIL INKEY$ <> ""ăENDăăoncreset:ăonc = 1ăFOR i = 1 TO pixcntăo(onc) = 0ăonc = onc + 1ăNEXT iăonc = 1ăRETURNăăNick Kochakian                 CRUDE SHADED TEXT              NickK@worldnet.att.net         03-02-97 (06:56)       QB, QBasic, PDS        135  2405     SHADETXT.BASDECLARE SUB shadetxt2 (message$, x!, y!, way!)ă'Not-so-fancy shaded textă'ă'This is another cool way to shade your screen mode 13 text!ă'ă'3/2/97ă'1997 By: - Nick Kochakian -ă'ă'If you have any comments or questions please e-mail me at:ă'nickK@worldnet.att.netă'ă'Have fun! :)ăăăSCREEN 13ăă'Make shure message$ is longer than one character!ămessage$ = "Just another way to shade text!" 'The message to displayăăx = 1ăy = 1ăă'Ways to shade:ă'way = 1 -> Dark ooze text (Works great with a palette cycling routine!)ă'way = 2 -> Brighter ooze textă'way = 3 -> "Light source" rightă'way = 4 -> The opposite of way = 3ă'way = 5 -> "Light source" is centeredăăCALL shadetxt2(message$, x, y, 5)ăăSUB shadetxt2 (message$, x, y, way)ăăcntr = 1ăcol = 16ăcntrr = 1ăămsglen = LEN(message$)ăăLOCATE x, yăăIF way = 1 THENăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col + 1ăIF col > 30 THEN col = 16ăLOOP UNTIL cntr = msglenăEND IFăăIF way = 2 THENăcol = 20ăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col + 1ăIF col > 30 THEN col = 20ăLOOP UNTIL cntr = msglenăEND IFăăIF way = 3 THENăcol = 20ăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col + 1ăLOOP UNTIL cntr = msglen OR col > 30ăIF cntr = msglen THEN EXIT SUBăăDOăcol = col - 1ăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăLOOP UNTIL col < 21 OR cntr = msglenăIF cntr = msglen THEN EXIT SUBăăDOăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăLOOP UNTIL cntr = msglenăEND IFăăIF way = 4 THENăcol = 30ăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col - 1ăLOOP UNTIL cntr = msglen OR col < 21ăIF cntr = msglen THEN EXIT SUBăăDOăcol = col + 1ăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăLOOP UNTIL col > 30 OR cntr = msglenăIF cntr = msglen THEN EXIT SUBăăDOăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăLOOP UNTIL cntr = msglenăEND IFăăIF way = 5 THENăcol = 20ăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col + 1ăLOOP UNTIL cntr = msglen OR col > 30ăIF cntr = msglen THEN EXIT SUBăăDOăCOLOR colăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăcol = col - 1ăLOOP UNTIL col < 21 OR cntr = msglenăIF cntr = msglen THEN EXIT SUBăăDOăPRINT MID$(message$, cntr, 1);ăcntr = cntr + 1ăLOOP UNTIL cntr = msglenăăEND IFăăEND SUBăăNick Kochakian                 FLYS                           NickK@worldnet.att.net         03-02-97 (06:56)       QB, QBasic, PDS        77   1333     FLYS.BAS    '----------------------------------------------------------------------------ă'Flysă'ă'1997 By: - Nick Kochakian -ă'ă'Have fun! :)ă'----------------------------------------------------------------------------ăăăRANDOMIZE TIMERăSCREEN 13ăăflys = 20 'How many to put on the screen flysăpx = flysăpy = flysădir = flysăăDIM x(px)ăDIM y(py)ăDIM d(dir)ăăpx = 1ăpy = 1ădir = 1ăăFOR i = 1 TO flysăx(px) = 100ăy(py) = 100ăd(dir) = INT(RND * 8) + 1ăpx = px + 1ăpy = py + 1ădir = dir + 1ăNEXT iăăpx = 1ăpy = 1ădir = 1ăăDOăPSET (x(px), y(py)), 0ăd(dir) = INT(RND * 8) + 1ăăIF d(dir) = 1 THEN x(px) = x(px) + 1ăăIF d(dir) = 2 THEN y(py) = y(py) + 1ăăIF d(dir) = 3 THEN x(px) = x(px) + 1: y(py) = y(py) + 1ăăIF d(dir) = 4 THEN x(px) = x(px) - 1: y(py) = y(py) + 1ăăIF d(dir) = 5 THEN x(px) = x(px) + 1: y(py) = y(py) - 1ăăIF d(dir) = 6 THEN x(px) = x(px) - 1: y(py) = y(py) - 1ăăIF d(dir) = 7 THEN x(px) = x(px) - 1ăăIF d(dir) = 8 THEN y(py) = y(py) - 1ăăIF x(px) < 1 THEN x(px) = 1ăIF x(px) > 200 THEN x(px) = 200ăIF y(py) < 1 THEN y(py) = 1ăIF y(py) > 300 THEN y(py) = 300ăăPSET (x(px), y(py)), 15ăă'FOR i = 1 TO 9999ă'NEXT iăăpx = px + 1ăpy = py + 1ădir = dir + 1ăăIF px > flys THEN px = 1ăIF py > flys THEN py = 1ăIF dir > flys THEN dir = 1ăLOOP UNTIL INKEY$ <> ""ăăNick Kochakian                 DIRECTIONAL STARFIELD          NickK@worldnet.att.net         01-20-97 (00:00)       QB, QBasic, PDS        142  3729     SFIELD.BAS  '----------------------------------------------------------------------------ă'Program name: SFIELD the star fieldă'Verison: verison 1.0ă'ă'Date made: 1/20/97, 1997ă'ă'Author: - Nick Kochakian -ă'ă'Comments: If you would like to use this program / routines please giveă'me some credit... Somewhere...ă'ă'E-mail: nickK@worldnet.att.netă'----------------------------------------------------------------------------ăăRANDOMIZE TIMERăSCREEN 13ăăWAY = 1 'The way to scroll the star filedă        '1 - leftă        '2 - diagonal right / downă        '3 - rightă        '4 - upă        '5 - diagonal left / upă        '6 - diagonal down / leftă        '7 - diagonal right / upă        '8 - downăă'Note that ways 2-8 will ONLY WORK if DISTCHK$="N"ăăDISTCHK$ = "Y" 'Distance checkă               'Y - is yesă               'N - is noă'Note that distance check can only be used with way 1... For now...ăăSTARS = 100 'Amount of stars at one timeăSX = STARS 'Star XăSY = STARS 'Star YăSC = STARS 'Star ColorăSM = STARS 'Star speed moverăăDIM X(SX)ăDIM Y(SY)ăDIM C(SC)ăDIM S(SM)ăăSX = 1ăSY = 1ăSC = 1ăSM = 1ăă'Place the stars for the first timeăFOR I = 1 TO STARSăX(SX) = INT(RND * 300) + 1ăY(SY) = INT(RND * 200) + 1ăC(SC) = INT(RND * 30) + 1ăIF C(SC) = 16 THEN S(SM) = 1ăIF C(SC) = 17 THEN S(SM) = 1.5ăIF C(SC) = 18 THEN S(SM) = 2ăIF C(SC) = 19 THEN S(SM) = 2.5ăIF C(SC) = 20 THEN S(SM) = 3ăIF C(SC) >= 21 THEN S(SM) = 3.5ăIF C(SC) >= 29 THEN S(SM) = 4ăăIF C(SC) < 16 THEN C(SC) = 16ăPSET (X(SX), Y(SY)), C(SC)ăSX = SX + 1ăSY = SY + 1ăSC = SC + 1ăNEXT IăăSX = 1ăSY = 1ăSC = 1ăSM = 1ăă'The main loopăDOăPSET (X(SX), Y(SY)), 0ăăIF UCASE$(DISTCHK$) = "Y" AND WAY = 1 THENăIF C(SC) <= 18 THEN X(SX) = X(SX) - .25ăIF C(SC) = 19 THEN X(SX) = X(SX) - .5ăIF C(SC) = 20 THEN X(SX) = X(SX) - 1.25ăIF C(SC) = 21 THEN X(SX) = X(SX) - 1.5ăIF C(SC) = 22 THEN X(SX) = X(SX) - 1ăIF C(SC) = 23 THEN X(SX) = X(SX) - 2.25ăIF C(SC) = 24 THEN X(SX) = X(SX) - 2.5ăIF C(SC) = 25 THEN X(SX) = X(SX) - 2ăIF C(SC) = 26 THEN X(SX) = X(SX) - 3.25ăIF C(SC) = 27 THEN X(SX) = X(SX) - 3.5ăIF C(SC) = 28 THEN X(SX) = X(SX) - 3ăIF C(SC) = 29 THEN X(SX) = X(SX) - 4.25ăIF C(SC) = 30 THEN X(SX) = X(SX) - 4ăEND IFă        ăIF UCASE$(DISTCHK$) = "N" AND WAY = 1 THEN X(SX) = X(SX) - 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 2 THEN Y(SY) = Y(SY) + 1: X(SX) = X(SX) + 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 3 THEN X(SX) = X(SX) + 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 4 THEN Y(SY) = Y(SY) - 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 5 THEN Y(SY) = Y(SY) - 1: X(SX) = X(SX) - 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 6 THEN Y(SY) = Y(SY) + 1:  X(SX) = X(SX) - 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 7 THEN Y(SY) = Y(SY) - 1:  X(SX) = X(SX) + 1ăăIF UCASE$(DISTCHK$) = "N" AND WAY = 8 THEN Y(SY) = Y(SY) + 1ăăPSET (X(SX), Y(SY)), C(SC)ăIF X(SX) < 1 THEN PSET (X(SX), Y(SY)), 0: GOSUB RERAND:ăIF Y(SY) > 200 THEN PSET (X(SX), Y(SY)), 0: GOSUB RERAND:ăIF X(SX) > 300 THEN PSET (X(SX), Y(SY)), 0: GOSUB RERAND:ăIF Y(SY) < 1 THEN PSET (X(SX), Y(SY)), 0: GOSUB RERAND:ăSX = SX + 1ăSY = SY + 1ăSM = SM + 1ăSC = SC + 1ăIF SX > STARS THEN SX = 1ăIF SY > STARS THEN SY = 1ăIF SM > STARS THEN SM = 1ăIF SC > STARS THEN SC = 1ăLOOP UNTIL INKEY$ <> ""ăENDăăRERAND: 'Re-Randomize starsăRANDOMIZE TIMERăIF X(SX) < 1 THEN X(SX) = 1ăX(SX) = INT(RND * 300) + 1ăY(SY) = INT(RND * 200) + 1ăC(SC) = INT(RND * 30) + 1ăIF C(SC) = 16 THEN S(SM) = 1ăIF C(SC) = 17 THEN S(SM) = 1.5ăIF C(SC) = 18 THEN S(SM) = 2ăIF C(SC) = 19 THEN S(SM) = 2.5ăIF C(SC) = 20 THEN S(SM) = 3ăIF C(SC) >= 21 THEN S(SM) = 3.5ăIF C(SC) >= 29 THEN S(SM) = 4ăIF C(SC) < 16 THEN C(SC) = 16ăRETURNăKurt Kuzba                     SPARKLING STARFIELD SIMULATION FidoNet QUIK_BAS Echo          12-19-96 (21:20)       QB, QBasic, PDS        63   2438     STARRUSH.BAS'_|_|_|   STARRUSH.BASă'_|_|_|   Yet another starfield simulation, with 20 levels of motionă'_|_|_|   and full 365 degree directional movement. 20-3000 stars.ă'_|_|_|   No warrantee or guarantee is given or implied.ă'_|_|_|   Released   PUBLIC DOMAIN   by Kurt Kuzba.  (12/19/96)ăTYPE stardataă   xypref AS STRING * 1: xystep AS INTEGER: xyprog AS INTEGERă   xylim AS INTEGER: count AS INTEGER: speed AS INTEGERă   xdir AS INTEGER: ydir AS INTEGER: xpos AS INTEGERă   ypos AS INTEGER: END TYPEăDECLARE SUB starinit (S AS stardata)ăDECLARE SUB starmove (S AS stardata)ăN% = VAL(COMMAND$): RANDOMIZE TIMERăIF N% < 20 THENă   PRINT "USAGE: starrush N[number of stars 20-3000]": SYSTEMăEND IFăIF N% > 3000 THEN N% = 3000ăREDIM starfield(1 TO N%) AS stardataăFOR t% = 1 TO N%: starinit starfield(t%): NEXTăstarcolour% = 0: SCREEN 12ăDOă   IF INKEY$ <> "" THEN EXIT DOă   FOR S% = 1 TO N%ă      C% = starfield(S%).count + 1ă      IF C% >= starfield(S%).speed THENă         PSET (starfield(S%).ypos, starfield(S%).xpos), 0ă         starmove starfield(S%)ă         PSET (starfield(S%).ypos, starfield(S%).xpos), starcolour% + 9ă         starcolour% = (starcolour% + 1) MOD 7ă      ELSEă         starfield(S%).count = C%ă      END IFă   NEXTăLOOPăSCREEN 0: SYSTEMăSUB starinit (S AS stardata)ă   S.count = 0: S.speed = RND * 19 + 1ă   S.xpos = 239: S.ypos = 319: dest% = RND * 659ă   IF dest% >= 200 THEN x% = 239: y% = RND * 319ă   IF dest% <= 200 THEN y% = 319: x% = RND * 239ă   S.xypref = "Y": S.xystep = x%: S.xyprog = 0: S.xylim = y%ă   IF x% > y% THEN S.xypref = "X": SWAP S.xystep, S.xylimă   S.xdir = -1: IF (RND > .49) THEN S.xdir = 1ă   S.ydir = -1: IF (RND > .49) THEN S.ydir = 1ă   FOR t% = RND * 50 + 10 TO 0 STEP -1: starmove S: NEXTăEND SUBăSUB starmove (S AS stardata)ă   S.count = 0: x% = S.xpos: y% = S.ypos: ny% = y%: nx% = x%ă   l% = S.xylim: i% = S.xystep: p% = S.xyprog + i%ă   SELECT CASE S.xyprefă      CASE "X": nx% = x% + S.xdiră         IF p% >= l% THEN ny% = y% + S.ydir: p% = p% - l%ă      CASE "Y": ny% = y% + S.ydiră         IF p% >= l% THEN nx% = x% + S.xdir: p% = p% - l%ă      CASE "": nx% = x% + S.xdir: ny% = y% + S.ydiră   END SELECT: S.xyprog = p%ă   IF (ny% < 0) OR (ny% > 639) OR (nx% > 479) OR (nx% < 0) THENă      starinit S: nx% = S.xpos: ny% = S.yposă   ELSEă      S.xpos = nx%: S.ypos = ny%ă   END IFăEND SUBă'_|_|_|   end   STARRUSH.BASăNick Kochakian                 GRAPHICS MELT #3               NickK@worldnet.att.net         03-04-97 (19:28)       QB, QBasic, PDS        129  2105     GFXMELT.BAS 'Graphics melt #3ă'ă'3/2/97ă'1997 By: - Nick Kochakian -ă'ă'This melts any graphic you put a "box" around.ă'ă'This program is different from the first two because after you define theă'box the graphics or text fall until they meet up with any other graphic oră'text item. Note: Don't run this if you just have some text (or graphics) andă'nothing to break their "fall".ă'ă'If you have any comments or questions e-mail me at: nickK@worldnet.att.netă'ă'Have fun! :)ăăDEFINT A-ZăăRANDOMIZE TIMERăSCREEN 13ăăLOCATE 2, 2: PRINT "Graphics Melt 1997 By: Nick Kochakian"ăLOCATE 3, 2: PRINT "Melting Lemmings! (Below)"ăLOCATE 7, 2ăăFOR i = 1 TO 10ăccol = INT(RND * 150) + 1ăCOLOR ccolăPRINT CHR$(1);ăNEXT iăăLOCATE 8, 2ăCOLOR 20ăFOR i = 1 TO 10ăPRINT "Ű";ăNEXT iăPRINT ""ăăx1 = 7ăy1 = 47ăx = x1ăy = y1ăx2 = 89ăy2 = 56ăă'delay = 7000ăă'LINE (x1, y1)-(x2, y2), 15, B'Uncomment these two to put a box around theă'END                            'graphics you want melted. Then recomment.ăăpixels = 10000ăpx = pixelsăpy = pixelsăpc = pixelsăonc = pixelsăăDIM x(px)ăDIM y(py)ăDIM c(pc)ăDIM o(onc)ăăpx = 1ăpy = 1ăpc = 1ăonc = 1ăăpixcnt = 0ăăDOăIF POINT(x, y) > 0 THENăcol = POINT(x, y)ăx(px) = xăy(py) = yăc(pc) = colăpx = px + 1ăpy = py + 1ăpc = pc + 1ăpixcnt = pixcnt + 1ăEND IFă0ăx = x + 1ăIF x > x2 THEN x = x1: y = y + 1ăLOOP UNTIL y > y2ăă'px = px + 1ă'py = py + 1ăă'x(px) = -1ă'y(py) = -1ăăpx = pixcntăpy = pixcntăpc = pixcntăonc = pixcntăăcntrr = 1ăă'SLEEP 3ăăDOăPSET (x(px), y(py)), 0ăăy(py) = y(py) + 1ăIF POINT(x(px), y(py)) <> 0 THEN y(py) = y(py) - 1: o(onc) = 1ăPSET (x(px), y(py)), c(pc)ăăoncbak = oncăonc = 1ăonccnt = 0ăFOR i = 1 TO pixcntăIF o(onc) = 1 THEN onccnt = onccnt + 1ăonc = onc + 1ăNEXT iăIF onccnt = pixcnt THEN cntrr = 2ăonc = oncbakăăpx = px - 1ăpy = py - 1ăpc = pc - 1ăonc = onc - 1ăIF px < 1 THEN px = pixcntăIF py < 1 THEN py = pixcntăIF pc < 1 THEN pc = pixcntăIF onc < 1 THEN onc = pixcntăFOR i = 1 TO delayăNEXT iăLOOP UNTIL INKEY$ <> "" OR cntrr = 2ăENDăăNick Kochakian                 EXPLODE GRAPHICS               NickK@worldnet.att.net         03-04-97 (19:28)       QB, QBasic, PDS        210  3931     EXPGFX.BAS  DECLARE SUB expgfx (x1%, y1%, x2%, y2%, x%, y%)ă'Explode Graphicsă'ă'ă'3/2/97 - 3/4/97ă'1997 By: - Nick Kochakian -ă'ă'ă'This program gets each pixel in the box you define and explodes the graphic,ă'or whatever.ă'ă'This program has only messed up a couple times. If any one knows why someă'times the dots just freeze on the screen please tell me why.ă'ă'Hint: Don't explode too much stuff at one time... It'll be too slow as you'llă'see if you run the program... But I've added a new feature that will speedă'up the explosion. Before, after a pixel left the screen it kept going. Soă'I made it so after a pixel leaves the screen it stops and the program ignoresă'it until you stop it, which makes the whole thing go ALOT faster! :)ă'ă'You can contact me at: nickK@worldnet.att.netăăDEFINT A-Z   'Uncomment this for slower computersăăRANDOMIZE TIMERăăSCREEN 13ăăx1 = 5ăy1 = 1ăx = x1ăy = y1ăx2 = 160ăy2 = 30ăă'LINE (x1, y1)-(x2, y2), 15, B  '<---| Uncomment these two to put a box aroundă'END                            '<---| your desired graphics area. Thenă                                      'Re-comment them.ăcntrline = 0ăăDOăfakex = INT(RND * x1) + 1ăfakey = INT(RND * y1) + 1ăfakex2 = INT(RND * x2) + 1ăfakey2 = INT(RND * y2) + 1ăfakec = INT(RND * 255) + 1ăLINE (fakex, fakey)-(fakex2, fakey2), fakecăcntrline = cntrline + 1ăLOOP UNTIL cntrline = 1ăăfakec = 20ămsgcntr = 1ăămsg$ = "Explode!"ăLOCATE 2, 2ăăDOăCOLOR fakecăPRINT MID$(msg$, msgcntr, 1);ăfakec = fakec + 1ămsgcntr = msgcntr + 1ăLOOP UNTIL fakec = 27ăăSLEEP 2ăăCALL expgfx(x1, y1, x2, y2, x, y)ăăSUB expgfx (x1, y1, x2, y2, x, y)ăpixels = 10000ăpx = pixelsăpy = pixelsăpd = pixelsăoldcol = pixelsănewcol = pixelsăpcol = pixelsăpgon = pixelsăăDIM x(px)ăDIM y(py)ăDIM d(pd)ăDIM oldc(oldcol)ăDIM newc(newcol)ăDIM c(pcol)ăDIM pg(pgon)ăăpx = 1ăpy = 1ăpd = 1ăoldcol = 1ănewcol = 1ăpcol = 1ăpgon = 1ăăpixcnt = 0ăăcntr = 1ăăDOă'PSET (x, y), 15ă'FOR i = 1 TO 999ă'NEXT iăx = x + 1ăIF x > x2 THEN x = x1: y = y + 1ăIF y > y2 THEN cntr = 2ăăIF POINT(x, y) > 0 THENăcol = 0ăcol = POINT(x, y)ăc(pcol) = colăpixcnt = pixcnt + 1ăăx(px) = xăy(py) = yăădirs = INT(RND * 8) + 1ăd(pd) = dirsăăoldc(oldcol) = 0ănewc(newcol) = 0ăăpx = px + 1ăpy = py + 1ăpd = pd + 1ăoldcol = oldcol + 1ănewcol = newcol + 1ăpcol = pcol + 1ăEND IFăăLOOP UNTIL cntr = 2ăăpx = px + 1ăpy = py + 1ăăx(px) = -1ăy(py) = -1ăăpx = 1ăpy = 1ăpd = 1ăoldcol = 1ănewcol = 1ăpcol = 1ăăcntr = 1ăăDOăooncit:ăIF pg(pgon) = 1 THENăpx = px + 1ăpy = py + 1ăpd = pd + 1ă'oldcol = oldcol + 1ă'newcol = newcol + 1ăpcol = pcol + 1ăăpgon = pgon + 1ăEND IFăIF pg(pgon) = 1 THEN GOTO ooncit:ăăPSET (x(px), y(py)), 0ăIF d(pd) = 1 AND pg(pgon) = 0 THEN x(px) = x(px) + 1ăIF d(pd) = 2 AND pg(pgon) = 0 THEN y(py) = y(py) + 1ăIF d(pd) = 3 AND pg(pgon) = 0 THEN x(px) = x(px) + 1: y(py) = y(py) + 1ăIF d(pd) = 4 AND pg(pgon) = 0 THEN x(px) = x(px) - 1: y(py) = y(py) + 1ăIF d(pd) = 5 AND pg(pgon) = 0 THEN x(px) = x(px) + 1: y(py) = y(py) - 1ăIF d(pd) = 6 AND pg(pgon) = 0 THEN x(px) = x(px) - 1: y(py) = y(py) - 1ăIF d(pd) = 7 AND pg(pgon) = 0 THEN x(px) = x(px) - 1ăIF d(pd) = 8 AND pg(pgon) = 0 THEN y(py) = y(py) - 1ăPSET (x(px), y(py)), c(pcol)ăăIF x(px) > 320 THEN pg(pgon) = 1ăIF x(px) < 0 THEN pg(pgon) = 1ăIF y(py) > 200 THEN pg(pgon) = 1ăIF y(py) < 0 THEN pg(pgon) = 1ăăpgbak = pgonăpgon = 1ăpgcnt = 0ăFOR i = 1 TO pixcntăIF pg(pgon) = 1 THEN pgcnt = pgcnt + 1ăpgon = pgon + 1ăNEXT iăIF pgcnt = pixcnt THEN cntr = 2ăpgon = pgbakăă'FOR i = 1 TO 0ă'NEXT iăpx = px + 1ăpy = py + 1ăpd = pd + 1ă'oldcol = oldcol + 1ă'newcol = newcol + 1ăpcol = pcol + 1ăăpgon = pgon + 1ăăIF x(px) = -1 AND y(py) = -1 THENăpx = 1ăpy = 1ăpd = 1ăoldcol = 1ănewcol = 1ăpcol = 1ăpgon = 1ăEND IFăăLOOP UNTIL cntr = 2 OR INKEY$ <> ""ăăEND SUBăăNick Kochakian                 PIXEL EXPLOSIONS               NickK@worldnet.att.net         03-04-97 (19:28)       QB, QBasic, PDS        128  2246     PIXEXP.BAS  '----------------------------------------------------------------------------ă'Pixel explosionsă'ă'1997 By: - Nick Kochakian -ă'ă'Have fun! :)ă'----------------------------------------------------------------------------ăăRANDOMIZE TIMERăSCREEN 13ăăDEFINT A-Zăăpixels = 100 'How many pixles to explodeăpx = pixelsăpy = pixelsădir = pixelsăonc = pixelsăăDIM x(px)ăDIM y(py)ăDIM d(dir)ăDIM o(onc)ăăpx = 1ăpy = 1ădir = 1ăăpixe2 = pixelsăăFOR i = 1 TO pixe2ăx(px) = 100ăy(py) = 100ăd(dir) = INT(RND * 13) + 1ăo(onc) = 0ăpx = px + 1ăpy = py + 1ădir = dir + 1ăNEXT iăăpx = 1ăpy = 1ădir = 1ăonc = 1ăăFOR i = 1 TO pixe2ăd(dir) = INT(RND * 13) + 1ădir = dir + 1ăNEXT iăădir = 1ăăcnt = 0ăDOăăPSET (x(px), y(py)), 0ăăIF x(px) = 100 THENăd(dir) = INT(RND * 13) + 1ăEND IFăăpix2 = pixelsăăIF y(py) = 10 THENăd(dir) = INT(RND * 13) + 1ăEND IFăăIF d(dir) = 1 THEN x(px) = x(px) + 1ăăIF d(dir) = 2 THEN y(py) = y(py) + 1ăăIF d(dir) = 3 THEN x(px) = x(px) + 1: y(py) = y(py) + 1ăăIF d(dir) = 4 THEN x(px) = x(px) - 1: y(py) = y(py) + 1ăăIF d(dir) = 5 THEN x(px) = x(px) + 1: y(py) = y(py) - 1ăăIF d(dir) = 6 THEN x(px) = x(px) - 1: y(py) = y(py) - 1ăăIF d(dir) = 7 THEN x(px) = x(px) - 1ăăIF d(dir) = 8 THEN y(py) = y(py) - 1ăăIF d(dir) = 9 THEN x(px) = x(px) + 2ăăIF d(dir) = 10 THEN x(px) = x(px) - 1: y(py) = y(py) + 1ăăIF d(dir) = 11 THEN x(px) = x(px) - 2ăăIF d(dir) = 12 THEN x(px) = x(px) + 3ăăIF d(dir) = 13 THEN x(px) = x(px) - 2ăăPSET (x(px), y(py)), 15ăăIF x(px) < 0 THEN o(onc) = 1ăIF y(py) > 300 THEN o(onc) = 1ăIF x(px) > 200 THEN o(onc) = 1ăIF y(py) < 1 THEN o(onc) = 1ăă'FOR i = 1 TO 9999ă'NEXT iăă'To make the program run faster comment the stuff below until you hit theă'dotted lineăcntrr = 1ăoncbak = oncăonc = 1ăFOR i = 1 TO pixelsăIF o(onc) = 1 THEN cntrr = cntrr + 1ăonc = onc + 1ăNEXT iăonc = oncbakăIF cntrr >= pixels THEN cnt = 2ă'- - - - - - - - - - - - ---- -- --- -- ---------------------------------ăăpx = px + 1ăpy = py + 1ădir = dir + 1ăonc = onc + 1ăăIF px > pixels THEN px = 1ăIF py > pixels THEN py = 1ăIF dir > pixels THEN dir = 1ăIF onc > pixels THEN onc = 1ăLOOP UNTIL INKEY$ <> "" OR cnt = 2ăENDăăNick Kochakian                 SMOOTH SCROLLING WATERFALL     NickK@worldnet.att.net         03-04-97 (19:28)       QB, QBasic, PDS        86   1432     WATERFAL.BASDECLARE SUB READCOL (red%, green%, blue%, c%)ăDECLARE SUB palcyc ()ăDECLARE SUB writecol (red%, green%, blue%, c%)ăă'Water fallă'ă'This program uses three routines from my palette program: palsubs.basă'It also makes a VERY smooth scrolling waterfall!ă'ă'3/2/97ă'1997 By: - Nick Kochakian -ă'ă'Have fun! :)ăăăDEFINT A-ZăRANDOMIZE TIMERăSCREEN 13ăăX = 1ăY = 1ăCol = 255ăchar = 0ăăăăFOR i = 1 TO 255  'Turn off all the colors so you cant see it drawingăCALL writecol(0, 0, 0, i)ăNEXT iăăăDOăPSET (X, Y), ColăY = Y + 1ăIF Y > 200 THEN Y = 1: X = X + 1: Col = INT(RND * 255) + 1: IF Col < 16 THEN Col = 16ăchar = char + 1ăIF char = 1 THEN Col = Col - 1: char = 0ăIF Col < 1 THEN Col = 255ăLOOP UNTIL X = 320ăăFOR i = 1 TO 255ăblue% = blue% + 1ăIF blue% > 63 THEN blue% = 1ăCALL writecol(0, 0, blue%, i)ăNEXT iăăCALL palcycăăDEFSNG A-ZăSUB palcycă'Nick's palette cyclingăăDOăăCALL READCOL(ored%, ogreen%, oblue%, 1)ăăFOR P% = 1 TO 254ăCALL READCOL(red%, green%, blue%, P% + 1)ăCALL writecol(red%, green%, blue%, P%)ăNEXT P%ăăCALL writecol(ored%, ogreen%, oblue%, 255)ăăăLOOP UNTIL INKEY$ <> ""ăăEND SUBăăSUB READCOL (red%, green%, blue%, c%)ăOUT &H3C7, c%ăred% = INP(&H3C9)ăgreen% = INP(&H3C9)ăblue% = INP(&H3C9)ăăEND SUBăăSUB writecol (red%, green%, blue%, c%)ăăOUT &H3C7, c%ăOUT &H3C8, c%ăOUT &H3C9, red%ăOUT &H3C9, green%ăOUT &H3C9, blue%ăăEND SUBăăAngelo Ken Pesce               CIRCULAR PLASMA EFFECT         ken@uniserv.uniplan.it         03-06-97 (15:24)       QB, PDS                164  3401     PLASMA4.BAS DECLARE SUB initp ()ăDECLARE SUB init ()ă' ANGELO KEN PESCE 1997ă' COLOR PLASMA EFFECT v4ă' Email: ken at uniserv.uniplan.ită' LOAD THIS PROGRAM USING QBX /AH OR QB /AHă' WATCH THIS: IT's 160x100 but using different colors it looks like 320x200ăăă' $DYNAMICăDEFINT A-Zăăă' INITIALIZE CIRCLE ARRAYăDIM SHARED aps(250, 250)ăCALL inităSCREEN 13ăăă' PALETTE INITăCALL initpăă' PATTER 1 AND PATTER 2 CENTER and INITIAL MOVEMENTăxp1 = 80 + 20: yp1 = 50 + 20ăxp2 = 80 - 20: yp2 = 50 - 20ăxm1 = 1ăym1 = -1ăxm2 = -1ăym2 = 1ăăăDOă' FIRST HALF **************************************************************ăDEF SEG = &HA000ăFOR x = 1 TO 160ăax = x + 125ăx1 = ax - xp1ăx2 = ax - xp2ăpx = x * 2ăFOR y = 1 TO 50ăay = y + 125ăăy1 = ay - yp1ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x1 < 1 OR x1 > 250 OR y1 < 1 OR y1 > 250 THEN col1 = 0: GOTO ex1ăcol1 = aps(x1, y1)ăex1:ăăy2 = ay - yp2ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x2 < 1 OR x2 > 250 OR y2 < 1 OR y2 > 250 THEN col2 = 0: GOTO ex2ăcol2 = aps(x2, y2)ăex2:ăăIF col1 > 0 AND col2 > 0 THEN GOTO rand1 ELSE col = col1 + col2ăăpy = y * 2ăPOKE (py * 320 + px), colăPOKE (py * 320 + px - 1), col + 32ăPOKE ((py - 1) * 320 + px), col + 16ăPOKE ((py - 1) * 320 + px - 1), col + 16ăGOTO next1ărand1:ăpy = y * 2ăPOKE (py * 320 + px), 0ăPOKE (py * 320 + px - 1), 0ănext1:ăNEXTăNEXTăă' SECOND HALF *************************************************************ăăDEF SEG = (&HA000 + &H7D0)ăăFOR x = 1 TO 160ăax = x + 125ăx1 = ax - xp1ăx2 = ax - xp2ăpx = x * 2ăFOR y = 1 TO 50ăay = y + 125ăăy1 = ay - yp1 + 50ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x1 < 1 OR x1 > 250 OR y1 < 1 OR y1 > 250 THEN col1 = 0: GOTO ex3ăcol1 = aps(x1, y1)ăex3:ăăy2 = ay - yp2 + 50ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x2 < 1 OR x2 > 250 OR y2 < 1 OR y2 > 250 THEN col2 = 0: GOTO ex4ăcol2 = aps(x2, y2)ăex4:ăăIF col1 > 0 AND col2 > 0 THEN GOTO rand2 ELSE col = col1 + col2ăăpy = y * 2ăPOKE (py * 320 + px), colăPOKE (py * 320 + px - 1), col + 32ăPOKE ((py - 1) * 320 + px), col + 16ăPOKE ((py - 1) * 320 + px - 1), col + 16ăGOTO next2ărand2:ăpy = y * 2ăPOKE (py * 320 + px), 0ăPOKE (py * 320 + px - 1), 0ănext2:ăNEXTăNEXTăăDEF SEGăGOSUB setmovăLOOP UNTIL INKEY$ <> ""ăăENDăăsetmov:ă' LET THEM MOVE (I HAVE TO IMPROVE THIS ROUTINE!!!)ăxp1 = xp1 + xm1ăyp1 = yp1 + ym1ăxp2 = xp2 + xm2ăyp2 = yp2 + ym2ăIF xp1 > 80 + 20 THEN xm1 = -1 ELSE IF xp1 < 80 - 20 THEN xm1 = 1ăIF yp1 > 50 + 20 THEN ym1 = -1 ELSE IF yp1 < 50 - 20 THEN ym1 = 1ăIF xp2 > 80 + 20 THEN xm2 = -1 ELSE IF xp2 < 80 - 20 THEN xm2 = 1ăIF yp2 > 50 + 20 THEN ym2 = -1 ELSE IF yp2 < 50 - 20 THEN ym2 = 1ăRETURNăăREM $STATICăSUB inităă' I HAVE TO USE THIS "TRICK" IN ORDER TO USE INTEGERSăăSCREEN 12ăFOR i = 1 TO 180 STEP 16ăFOR i1 = 1 TO 4ăCIRCLE (125, 125), i + i1, i1 + ((180 - i) / 18)ăCIRCLE (126, 125), i + i1, i1 + ((180 - i) / 18)ăNEXTăFOR i1 = 1 TO 4ăCIRCLE (125, 125), i + i1 + 4, (5 - i1) + ((180 - i) / 18)ăCIRCLE (126, 125), i + i1 + 4, (5 - i1) + ((180 - i) / 18)ăNEXTăNEXTăăFOR x = 1 TO 250ăFOR y = 1 TO 250ăaps(x, y) = POINT(x, y)ăNEXTăNEXTăEND SUBăăSUB initpăFOR i = 0 TO 15ăPALETTE i, i * 4ăNEXTăFOR i = 16 TO 31ăPALETTE i, 256 * ((i - 16) * 2 + 7)ăNEXTăFOR i = 32 TO 47ăPALETTE i, 65536 * ((i - 32) * 4)ăNEXTăEND SUBăăAngelo Ken Pesce               UPDATED FIRE SPHERE            us0082@uniserv.uniplan.it      03-19-97 (00:00)       QB, PDS                330  8129     FPSHERE.BAS DECLARE SUB stars ()ăDECLARE SUB DrawPoints ()ăDECLARE SUB flam ()ăDECLARE SUB ppset (x%, y%, c%)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB Rotate ()ăDECLARE SUB SetPal (start.slot%, end.slot%)ăDECLARE SUB SetupBall ()ăDECLARE SUB writeRGB (red%, grn%, blu%, slot%)ăDEFINT A-Ză'$DYNAMICăDIM SHARED scr(320, 200)ăăă' USE QBX /AH OR QB /AHăăă'{A little rotating sphere, by Glen Jeh, 8/12/1994, use freely}ă'{Try messing with the constants...code is squished a little}ă' Converted to BASIC by William Yu (05-28-96)ă' Revision + Static FastFireEffect v3 + Stars added by Angelo Pesce (1997)ă'ă' 192 colors version (palette routines by Andrew L. Ayers)ă'ă' COMPILE WITH ALTERNATE MATH FOR BEST PERFORMANCEă' TOTAL JUMPă' DIRECT PSET METHOD / 2 HALFS / ALL INTEGERSă' 5 PIXEL INTERPOLATIONă' ARRAY FIRE (SLOWER BUT CLEANER)ă' 191 COLORSă' STARS BACKGROUNDăăPRINT "FireSphere"ăPRINT ".........."ăPRINTăPRINT "press enter for defaults"ăPRINTăă' x and y are multiplied by scale and divided by distanceă0 DIM SHARED Scale AS INTEGERăINPUT "Scale:"; temp1$ăIF temp1$ = "" THEN Scale = 45: GOTO 1ăScale = VAL(temp1$)ăă' mystery constant :-)ă1 DIM SHARED Radius AS INTEGERăINPUT "Radius:"; temp2$ăIF temp2$ = "" THEN Radius = 80: GOTO 2ăRadius = VAL(temp2$)ăă' number of slicesă2 DIM SHARED Slices AS INTEGERăINPUT "Slices:"; temp3$ăIF temp3$ = "" THEN Slices = 24: GOTO 3ăSlices = VAL(temp3$)ăă' points per sliceă3 DIM SHARED PPS AS INTEGERăINPUT "Points Per Slice:"; temp4$ăIF temp4$ = "" THEN PPS = 40: GOTO 4ăPPS = VAL(temp4$)ăă4 CONST Pi = 3.1415ăăTYPE PointTypeă  x AS INTEGERă  y AS INTEGERă  z AS INTEGERăEND TYPEăăDIM SHARED points(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED Ball(1 TO Slices, 1 TO PPS) AS PointTypeăDIM SHARED XAngle, YAngle, ZAngleăDIM SHARED SinTable(0 TO 255)  AS INTEGERăDIM SHARED CosTable(0 TO 255)  AS INTEGERăDIM SHARED Distance, DirăCONST nstars = 1000ăCONST scolor = 15ăDIM SHARED y(nstars)ăDIM SHARED x(nstars)ăDIM SHARED s(nstars)ăăSCREEN 13: CLSăFOR i = 1 TO nstarsăx(i) = RND * 320ăy(i) = RND * 200ăs(i) = RND * 5ăNEXT iăăă  FOR i = 0 TO 255ă      SinTable(i) = INT(SIN(2 * Pi / 255 * i) * 128)ă      CosTable(i) = INT(COS(2 * Pi / 255 * i) * 128)ă  NEXT iă  SCREEN 13ăă  Distance = 100: Dir = -3ă  SetupBallă  XAngle = 0ă  YAngle = 0ă  ZAngle = 0ăă' FORM BLACK TO REDăCALL writeRGB(0, 0, 0, 1)ăCALL writeRGB(63, 0, 0, 63)ăCALL SetPal(1, 63)ăă' FROM RED TO YELLOWăCALL writeRGB(63, 0, 0, 64)ăCALL writeRGB(63, 63, 0, 127)ăCALL SetPal(64, 127)ăă' FROM YELLOW TO WHITEăCALL writeRGB(63, 63, 0, 128)ăCALL writeRGB(63, 63, 63, 191)ăCALL SetPal(128, 191)ă'ă' ALL THE OTHERS WHITE (this avoid using IF COL>191 THEN COL=191 in flam sub)ăFOR i = 192 TO 255ăCALL writeRGB(63, 63, 63, i)ăNEXT iăă DOă    Rotateă    DrawPointsă    flamă    XAngle = XAngle + 3ă    YAngle = YAngle + 2ă    ZAngle = ZAngle + 1ă    Distance = Distance + Diră    IF XAngle > 250 THEN XAngle = 0ă    IF YAngle > 250 THEN YAngle = 0ă    IF ZAngle > 250 THEN ZAngle = 0ă    IF Distance >= 300 THEN Dir = -3ă    IF Distance <= 30 THEN Dir = 2ă    LOOP UNTIL INKEY$ <> ""ăCLSăSCREEN 0ăWIDTH 80ăPRINT "Angelo KEN Pesce 1997"ăENDăăREM $STATICă'{mystery procedure}ăSUB DrawPointsă  FOR i = 1 TO Slicesă    FOR i2 = 1 TO PPSă      IF (points(i, i2).z >= 0) AND (points(i, i2).x <= 319) AND (points(i, i2).x >= 0) AND (points(i, i2).y >= 0) AND (points(i, i2).y < 199) THENă        CALL ppset(points(i, i2).x, points(i, i2).y, 10)ă      END IFă    NEXT i2ă  NEXT iăEND SUBăăSUB dstars STATICăFOR i = 1 TO nstarsăIF scr(x(i), y(i)) = scolor THEN scr(x(i), y(i)) = 0ăNEXTăEND SUBăăSUB flamăDEF SEG = &HA000ăFOR yp = 1 TO 100ăFOR xp = 1 TO 319ăPOKE (yp * 320 + xp), scr(xp, yp)ăNEXTăNEXTăDEF SEG = &HA000 + &H7D0ăFOR yp = 1 TO 100ăFOR xp = 1 TO 319ăPOKE (yp * 320 + xp), scr(xp, yp + 100)ăNEXTăNEXTăăDEF SEG = &HA000ăFOR yp = 0 TO 100ăaa1 = yp * 320ăaa2 = (yp - 1) * 320ăaa3 = (yp + 1) * 320ăFOR xp = 0 TO 319ăaa = aa1 + xpăcol = PEEK(aa)ăcol1 = PEEK(aa2 + xp)ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK(aa3 + xp)ăcol = col + PEEK(aa + 1)ăcol = col + PEEK(aa - 1)ăcol = col / 5 - 1ăIF col < 0 THEN col = 0ăscr(xp, yp) = colăfastout:ăNEXTăNEXTăDEF SEG = &HA000 + &H7D0ăFOR yp = 1 TO 99ăaa1 = yp * 320ăaa2 = (yp - 1) * 320ăaa3 = (yp + 1) * 320ăFOR xp = 0 TO 319ăaa = aa1 + xpăcol = PEEK(aa)ăcol1 = PEEK(aa2 + xp)ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout1 ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK(aa3 + xp)ăcol = col + PEEK(aa + 1)ăcol = col + PEEK(aa - 1)ăcol = col / 5 - 1ăIF col < 0 THEN col = 0ăscr(xp, yp + 100) = colăfastout1:ăNEXTăNEXTăDEF SEGăCALL starsăEND SUBăăSUB ppset (x, y, c)ăIF y < 1 THEN y = 1 ELSE IF y > 199 THEN y = 199ăIF x < 1 THEN x = 1 ELSE IF x > 319 THEN x = 319ăăa = scr(x, y)ăc = a + căscr(x, y) = c + 30ăscr(x - 1, y) = căscr(x + 1, y) = căscr(x, y + 1) = căscr(x, y - 1) = căEND SUBăăDEFSNG A-ZăSUB ReadRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăDEFINT A-ZăSUB Rotateă'UPDATES all (X,Y,Z) coordinates according to XAngle,YAngle,ZAngleă ă  FOR i = 1 TO Slicesă    FOR i2 = 1 TO PPSă                     '{rotate on X-axis}ă      TempY = (Ball(i, i2).y * CosTable(XAngle) - Ball(i, i2).z * SinTable(XAngle)) / 128ă      TempZ = (Ball(i, i2).y * SinTable(XAngle) + Ball(i, i2).z * CosTable(XAngle)) / 128ă                    ' {rotate on y-anis}ă      TempX = (Ball(i, i2).x * CosTable(YAngle) - TempZ * SinTable(YAngle)) / 128ă      TempZ = (Ball(i, i2).x * SinTable(YAngle) + TempZ * CosTable(YAngle)) / 128ă                     '{rotate on z-axis}ă      OldTempX = TempXă      TempX = (TempX * CosTable(ZAngle) - TempY * SinTable(ZAngle)) / 128ă      TempY = (OldTempX * SinTable(ZAngle) + TempY * CosTable(ZAngle)) / 128ă      points(i, i2).x = (TempX * Scale) / Distance + 320 / 2ă      points(i, i2).y = (TempY * Scale) / Distance + 200 / 2ă      points(i, i2).z = TempZă    NEXT i2ă  NEXT iăEND SUBăăSUB SetPal (start.slot%, end.slot%)ă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  R = sr%: g = sg%: b = sb%ă  wr% = R: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL writeRGB(wr%, wg%, wb%, t%)ă    'ă    R = R + stepr: wr% = Ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăă'{sets up the ball's data..}ăSUB SetupBall ' {set up the points}ă  FOR SliceLoop = 1 TO Slicesă      Phi! = Pi / Slices * SliceLoop        ' 0 <= Phi <= Piă      FOR PPSLoop = 1 TO PPSă          Theta! = 2 * Pi / PPS * PPSLoop   ' 0 <= Theta <= 2*Piă              '{convert Radius,Thetha,Phi to (x,y,z) coordinates}ă          Ball(SliceLoop, PPSLoop).y = INT(Radius * SIN(Phi!) * COS(Theta!))ă          Ball(SliceLoop, PPSLoop).x = INT(Radius * SIN(Phi!) * SIN(Theta!))ă          Ball(SliceLoop, PPSLoop).z = INT(Radius * COS(Phi!))ă      NEXT PPSLoopă NEXT SliceLoopăEND SUBăăSUB stars STATICăFOR i = 1 TO nstarsăx(i) = x(i) - s(i)ăIF x(i) <= 1 THENăx(i) = 320ăy(i) = RND * 200ăEND IFăIF scr(x(i), y(i)) = 0 THEN scr(x(i), y(i)) = scolor + s(i)ăNEXT iăEND SUBăăSUB writeRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăXtance Coders Alliance         3D ROTATION OF 2D PICTURE      harryst@castel.nl              03-15-97 (21:20)       QB, QBasic, PDS        227  5215     2DROTATE.BAS' a Xtance Coders Alliance Releaseă'ă' A realy f***tup 3d some thing shower, ummz, yeah my old name TCPă'ă'ă'mail - mrsnow@freemail.nl (For all your questions..)ă'ă'29-04-96ăRANDOMIZE TIMERăON ERROR GOTO MasterăX = 0                   ' \ăY = 0                   ' |  Clear all VariablesăZ = 0                   ' |  and Make the ANGăEX = 0                  ' |  From  10 / 57.29578ăEY = 0                  ' |  Already Counted for you.ăMP = 1                  ' |ăVP = 1                  ' |     10 / 57.29578 =ăCS = 1                  ' |  --------------------ăC = 10                  ' |  ******.1745329******ăD = 5000                ' |  --------------------ăChangeColors = -1       ' | Colors Random (-1) or one ColorăSType = 8               ' | Screen TypeăANG = .1745329          ' /ăDIM M(500, 3)           ' Dimension an array to hold the values.ă       ă        PRINT : PRINTă        PRINT "Xtance Coders alliance Presents Sample for 2d Coding in QuickBASIC / PDS"ă        PRINT "Coded by Mr. SN()W^Xtance Coders Allaince (Prezident)"ă        PRINT : PRINT "To abort press [ESCAPE] Allot....."ă        SLEEP (1)ăăGOSUB ReadData          ' \ăGOSUB BuildScreen       ' | - To load and display rotation..ăGOSUB Redraw            ' /ăăNew:ăDOă                        'ăDEF SEG = 0             ' DONNO       ăPOKE 1050, PEEK(1052)   ' POKE SOME THING INTO MEMORYăDEF SEG                 ' DONNOărOTTA = INT(RND * 255)  ' INKEY$ Shout be Inkey$ but for demo randomize timerăăIF rOTTA = 88 THEN GOSUB XRot                      'X ROTATE (x)ăIF rOTTA = 89 THEN GOSUB YRot                      'Y ROTATE (y)ăIF rOTTA = 90 THEN GOSUB ZRot                      'Z ROTATE (z)ă'       WAIT &H3D3, 8ăăLOOP UNTIL INKEY$ = CHR$(27)ăSCREEN 0: WIDTH 80ă        PRINT "Xtance Coders Alliance sample for 3d rotation.. dunno... Cya..."ăENDăăăăRedraw:ă        IF X > 319 THEN X = X - 640ă        IF X < -320 THEN X = X + 640ă        IF Y > 199 THEN Y = Y - 400ă        IF Y < -200 THEN Y = Y + 400ăNRedraw:ă        XP = ((X * D) / (D + Z)) + 320ă        YP = (((Y * D) / (D + Z)) / 2) + 100ăRETURNăăBuildScreen:ăCLSăFOR I = 1 TO MP - 1ă ă  IF ChangeColor = -1 THENă        LinColor = RND * 20ă  ELSEă        LinColor = ChangeColoră  END IFă       ă        X = M(I, 1): Y = M(I, 2): Z = M(I, 3)ă        GOSUB NRedrawă  IF M(I, 0) = 0 THENă        LINE (XP, YP)-(XP, YP), RND * 20ă  ELSEă        LINE -(XP, YP), RND * 10ă  END IFăNEXT IăăCOLOR RND * 7ăLOCATE 24, 1: PRINT "A Xtance Coders Alliance Relase";ăăGOTO NewăăăZRot:ăFOR I = 1 TO MPă        X = M(I, 1)ă        Y = M(I, 2)ă        XN = (.9848078 * X) + (.1736482 * Y)ă        YN = (.9848078 * Y) - (.1736482 * X)ă        M(I, 1) = XNă        M(I, 2) = YNăNEXT IăGOTO BuildScreenăăXRot:ăFOR I = 1 TO MPă        Y = M(I, 2)ă        Z = M(I, 3)ă        YN = (.9848078 * Y) + (.1736482 * Z)ă        ZN = (.9848078 * Z) - (.1736482 * Y)ă        M(I, 2) = YNă        M(I, 3) = ZNăNEXT IăGOTO BuildScreenăăăYRot:ăFOR I = 1 TO MPă        X = M(I, 1)ă        Z = M(I, 3)ă        XN = (.9848078 * X) + (.1736482 * Z)ă        ZN = (.9848078 * Z) - (.1736482 * X)ă        M(I, 1) = XNă        M(I, 3) = ZNăNEXT IăGOTO BuildScreenăăReadData:ăRESTORE pICDATAă        READ MPăFOR I = 1 TO MPă        READ M, X, Y, Ză        M(I, 0) = Mă        M(I, 1) = X * 2ă        M(I, 2) = Y * 2ă        M(I, 3) = Z * 2ăNEXT Iă        SCREEN 8ăRETURNăăpICDATA:ăDATA  84ăDATA  0,-100, 0, 0ăDATA  1,-100,-45, 0ăDATA  1,-145,-45, 0ăDATA  1,-145,-70, 0ăDATA  0,-100, 0, 0ăDATA  1,-70, 0, 0ăDATA  1,-70,-45, 0ăDATA  1,-25,-45, 0ăDATA  1,-25,-70, 0ăDATA  1,-145,-70, 0ăDATA  0,-60,-30, 0ăDATA  1,-60, 25, 0ăDATA  1,-60, 40, 0ăDATA  1, 5, 40, 0ăDATA  1, 5, 15, 0ăDATA  1,-35, 15, 0ăDATA  1,-35,-5, 0ăDATA  1, 5,-5, 0ăDATA  1, 5,-30, 0ăDATA  1,-60,-30, 0ăDATA  0, 15,-70, 0ăDATA  1, 15, 0, 0ăDATA  1, 40, 0, 0ăDATA  1, 40,-30, 0ăDATA  1, 75,-30, 0ăDATA  1, 75,-70, 0ăDATA  1, 15,-70, 0ăDATA  0,-140,-65, 0ăDATA  1,-140,-50, 0ăDATA  1,-95,-50, 0ăDATA  1,-95,-5, 0ăDATA  1,-75,-5, 0ăDATA  1,-75,-50, 0ăDATA  1,-30,-50, 0ăDATA  1,-30,-65, 0ăDATA  1,-140,-65, 0ăDATA  0,-55,-25, 0ăDATA  1, 0,-25, 0ăDATA  0, 0,-10, 0ăDATA  1, 0,-10, 0ăDATA  1, 0,-10, 0ăDATA  0, 0,-25, 0ăDATA  1, 0,-10, 0ăDATA  1,-40,-10, 0ăDATA  1,-40, 20, 0ăDATA  1, 0, 20, 0ăDATA  1, 0, 35, 0ăDATA  1,-55, 35, 0ăDATA  1,-55,-20, 0ăDATA  1,-55,-25, 0ăDATA  0, 20,-65, 0ăDATA  1, 20,-5, 0ăDATA  1, 35,-5, 0ăDATA  1, 35,-35, 0ăDATA  1, 70,-35, 0ăDATA  1, 70,-65, 0ăDATA  1, 20,-65, 0ăDATA  0,-135,-60, 0ăDATA  1,-135,-55, 0ăDATA  1,-90,-55, 0ăDATA  1,-90,-10, 0ăDATA  1,-80,-10, 0ăDATA  1,-80,-55, 0ăDATA  1,-35,-55, 0ăDATA  1,-35,-60, 0ăDATA  1,-135,-60, 0ăDATA  0,-50,-20, 0ăDATA  1,-50,-20, 0ăDATA  1,-50, 30, 0ăDATA  1,-5, 30, 0ăDATA  1,-5, 25, 0ăDATA  1,-45, 25, 0ăDATA  1,-45,-15, 0ăDATA  1,-5,-15, 0ăDATA  1,-5,-20, 0ăDATA  1,-50,-20, 0ăDATA  0, 25,-60, 0ăDATA  1, 25,-10, 0ăDATA  1, 30,-10, 0ăDATA  1, 30,-40, 0ăDATA  1, 65,-40, 0ăDATA  1, 65,-60, 0ăDATA  1, 25,-60, 0ăDATA  0, 0, 0, 0ăăăMaster:ăRESUME NEXTăWarren Seyle                   GRAPHICAL MENU                 wseyle@awod.com                03-28-97 (19:28)       QB, QBasic, PDS        675  24133    GFXMENU.BAS DECLARE SUB ProcessSelection ()ăDECLARE SUB DialogBox (Cul%, Lin%, BoxLength%, Height%)ăDECLARE SUB DrawWindow (x1%, y1%, x2%, y2%, c1%, c2%, c3%)ăDECLARE SUB PalColors ()ăDECLARE SUB LoadImages ()ăDECLARE SUB CursorDown ()ăDECLARE SUB CursorUp ()ăDECLARE SUB OFont (Text$, X%, Y%, Fore%, Back%)ăDECLARE SUB Frame (X%, Y%, x1%, y1%, LineColor%)ăDECLARE SUB Background (TubeColor%)ăăCONST White = 255, Black = 180ăCONST Gold = 200, Green = 181, Blue = 130, Red = 150ăCONST False = 0, True = NOT FalseăăUpArrow$ = CHR$(0) + CHR$(72)        ' Up arrow key.ăDownArrow$ = CHR$(0) + CHR$(80)      ' Down arrow key.ăEnter$ = CHR$(13)ăEscape$ = CHR$(27)ăăDIM SHARED SaveScreen(3300, 4) AS INTEGERăDIM SHARED Quit AS INTEGERăDIM SHARED PurpleArrow(649) AS INTEGERăDIM SHARED PurpleArrowMask(649) AS INTEGERăDIM SHARED Back1%(1000)ăDIM SHARED Back2%(1000)ăDIM SHARED Back3%(1000)ăDIM SHARED Area AS INTEGER, Task AS INTEGERăăTYPE TypeOfPointeră     X AS INTEGERă     Y AS INTEGERăEND TYPEăDIM SHARED Arrow AS TypeOfPointerăăSCREEN 13ăPalColorsăLoadImagesăBackground GreenăăArrow.X = 95: Arrow.Y = 40ăFrame Arrow.X - 39, Arrow.Y - 32, Arrow.X + 164, Arrow.Y + 145, RedăOFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 255, 114ăOFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 127, 114ăOFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 127, 114ăGET (Arrow.X, Arrow.Y)-(Arrow.X + 36, Arrow.Y + 34), Back1%ăPUT (Arrow.X, Arrow.Y), PurpleArrowMask, ANDăPUT (Arrow.X, Arrow.Y), PurpleArrow, ORăăArea = 1ăQuit = Falseăă'Main LOOP which loops until one of the activated keys is pressed.ă'Note: Pressing the Esc key is the same as selecting quit.ăăDOă   Key$ = UCASE$(INKEY$)ă'This SELECT CASE statement is used to trap the arrow keys and the Escape keyă      SELECT CASE Key$ă        CASE UpArrow$ă          CursorUpă        CASE DownArrow$ă          CursorDownă        CASE Enter$ă          ProcessSelectionă        CASE Escape$ă          Quit = Trueă     END SELECTăLOOP UNTIL QuităSCREEN 0ăCOLOR 15ăCLSăăENDăăăHelp:ă  IF Task = 1 THEN RETURNă  WHILE INKEY$ <> "": WEND              'Empty the keyboard buffer.ă  CHAIN "help.bas"ăăăăăăăArrowImage:ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,098,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,092,075,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,063,075,056,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,101,092,056,074,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,113,064,097,073,055,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,084,101,098,074,096,055,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,089,058,092,056,096,072,055,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,089,058,108,097,073,072,072,072,000,000,000,000,000,000,000,000,000,000ăDATA 059,108,100,077,077,077,077,099,077,099,077,099,077,099,077,077,068,090,108,063,102,062,075,073,055,072,072,072,000,000,000,000,000,000,000,000,000ăDATA 058,063,093,077,099,076,076,076,076,076,076,076,076,076,076,077,077,078,067,065,084,089,098,074,055,072,072,072,072,000,000,000,000,000,000,000,000ăDATA 063,084,065,068,077,099,076,099,076,099,076,099,076,099,076,099,077,100,093,067,063,065,098,056,096,054,054,054,072,072,000,000,000,000,000,000,000ăDATA 093,065,084,065,068,077,099,076,099,076,076,076,076,076,099,076,077,077,068,067,108,065,098,074,096,072,072,054,072,072,072,000,000,000,000,000,000ăDATA 077,068,065,102,063,068,077,099,076,076,099,076,099,076,076,099,077,077,068,067,065,090,098,097,096,096,072,054,054,054,072,072,000,000,000,000,000ăDATA 077,077,068,063,058,084,067,100,099,099,076,099,076,076,099,076,077,077,068,090,065,067,075,056,096,055,072,072,054,072,054,072,072,000,000,000,000ăDATA 076,099,077,068,086,058,081,090,092,077,099,076,099,099,076,099,077,092,067,090,065,092,075,074,073,072,072,072,072,054,054,054,054,072,000,000,000ăDATA 076,076,099,077,067,103,058,081,065,092,077,099,099,099,077,077,092,092,090,065,065,099,097,074,096,055,072,054,054,054,049,049,049,054,054,000,000ăDATA 076,099,076,077,077,067,062,062,065,092,099,099,052,052,098,098,098,077,092,092,100,077,098,096,055,072,054,054,049,071,071,071,053,053,071,049,000ăDATA 099,076,076,076,052,099,099,098,100,100,078,078,078,078,078,078,078,078,078,100,078,078,100,074,054,071,071,053,095,095,070,070,070,070,070,053,049ăDATA 076,076,076,098,098,075,097,074,074,074,073,096,096,096,073,073,073,073,074,056,075,075,097,049,053,095,070,070,094,094,091,091,091,091,094,070,000ăDATA 076,098,076,098,075,097,073,072,054,071,071,071,071,071,071,071,071,049,049,054,054,054,049,053,070,070,094,091,109,114,069,069,069,109,094,000,000ăDATA 076,098,098,075,056,096,072,071,053,095,095,095,070,095,070,095,095,053,053,071,049,049,053,095,094,091,109,069,069,069,069,069,069,048,000,000,000ăDATA 098,075,075,074,096,049,053,070,070,070,094,094,094,070,094,070,070,070,095,071,071,071,053,070,091,109,069,069,069,069,069,069,109,000,000,000,000ăDATA 075,097,074,055,071,095,070,094,094,091,094,094,091,091,094,091,094,070,070,053,071,071,095,094,091,043,069,069,069,069,069,069,000,000,000,000,000ăDATA 097,056,055,071,070,094,091,091,048,091,048,048,091,048,091,091,094,094,095,053,071,071,095,094,109,069,069,069,069,069,043,000,000,000,000,000,000ăDATA 074,072,071,070,094,091,091,048,048,048,048,048,048,048,048,048,091,070,095,071,049,049,095,091,069,069,069,069,069,109,000,000,000,000,000,000,000ăDATA 096,049,095,070,091,091,091,048,091,091,091,091,091,091,091,094,094,070,071,054,072,049,095,091,069,069,069,069,048,000,000,000,000,000,000,000,000ăDATA 060,082,105,106,061,051,091,091,091,066,091,091,091,091,091,091,091,051,071,096,072,054,070,048,069,069,069,043,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,073,096,049,070,109,069,069,043,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,097,096,071,094,043,069,109,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,097,096,053,094,109,048,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,074,072,070,094,091,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,073,049,070,094,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,096,071,095,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,072,071,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăDATA 000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,072,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000ăăDEFINT A-ZăSUB Background (TubeColor%)ăăEndTubeColor% = TubeColor% + (TubeColor% + 10)ăX = 1ăFOR PaletteColor = TubeColor% TO TubeColor% + 10ăCOLOR PaletteColorăLINE (X, 0)-(X, 200)ăLINE (X + 20, 0)-(X + 20, 200)ăLINE (X + 40, 0)-(X + 40, 200)ăLINE (X + 60, 0)-(X + 60, 200)ăLINE (X + 80, 0)-(X + 80, 200)ăLINE (X + 100, 0)-(X + 100, 200)ăLINE (X + 120, 0)-(X + 120, 200)ăLINE (X + 140, 0)-(X + 140, 200)ăLINE (X + 160, 0)-(X + 160, 200): LINE (X + 180, 0)-(X + 180, 200)ăLINE (X + 200, 0)-(X + 200, 200): LINE (X + 220, 0)-(X + 220, 200)ăLINE (X + 240, 0)-(X + 240, 200): LINE (X + 260, 0)-(X + 260, 200)ăLINE (X + 280, 0)-(X + 280, 200): LINE (X + 300, 0)-(X + 300, 200)ăLINE (X + 320, 0)-(X + 320, 200)ăăăăăCOLOR EndTubeColor% - PaletteColorăLINE (X + 10, 0)-(X + 10, 200)ăLINE (X + 30, 0)-(X + 30, 200)ăLINE (X + 50, 0)-(X + 50, 200)ăLINE (X + 70, 0)-(X + 70, 200)ăLINE (X + 90, 0)-(X + 90, 200)ăLINE (X + 110, 0)-(X + 110, 200)ăLINE (X + 130, 0)-(X + 130, 200)ăLINE (X + 150, 0)-(X + 150, 200)ăLINE (X + 170, 0)-(X + 170, 200): LINE (X + 190, 0)-(X + 190, 200)ăLINE (X + 210, 0)-(X + 210, 200): LINE (X + 230, 0)-(X + 230, 200)ăLINE (X + 250, 0)-(X + 250, 200): LINE (X + 270, 0)-(X + 270, 200)ăLINE (X + 290, 0)-(X + 290, 200)ăLINE (X + 310, 0)-(X + 310, 200)ăX = X + 1ăNEXTăEND SUBăăSUB CursorDownăă'Moves the cursor down one selectionă'if the down arrow key is pressed.ă  IF Area = 1 THENă    Area = 2ă    OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 127, 114ă    OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 255, 114ă    OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 127, 114ă    GET (Arrow.X, Arrow.Y + 40)-(Arrow.X + 36, Arrow.Y + 74), Back2%'Get temp backgroundă    PUT (Arrow.X, Arrow.Y + 40), PurpleArrowMask, ANDă    PUT (Arrow.X, Arrow.Y + 40), PurpleArrow, ORă    WAIT &H3DA, 8ă    PUT (Arrow.X, Arrow.Y), Back1%, PSET                      'Restore BackGroundă    EXIT SUBă  END IFă  IF Area = 2 THENă    Area = 3ă    OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 127, 114ă    OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 127, 114ă    OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 255, 114ă    GET (Arrow.X, Arrow.Y + 80)-(Arrow.X + 36, Arrow.Y + 114), Back3%'Get temp backgroundă    PUT (Arrow.X, Arrow.Y + 80), PurpleArrowMask, ANDă    PUT (Arrow.X, Arrow.Y + 80), PurpleArrow, ORă    WAIT &H3DA, 8ă    PUT (Arrow.X, Arrow.Y + 40), Back2%, PSET                    'Restore BackGroundă    EXIT SUBă  END IFă  IF Area = 3 THENă    Area = 1ă    OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 255, 114ă    OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 127, 114ă    OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 127, 114ă   ă   ă    GET (Arrow.X, Arrow.Y)-(Arrow.X + 36, Arrow.Y + 34), Back1%'Get temp backgroundă    PUT (Arrow.X, Arrow.Y), PurpleArrowMask, ANDă    PUT (Arrow.X, Arrow.Y), PurpleArrow, ORă    WAIT &H3DA, 8ă    PUT (Arrow.X, Arrow.Y + 80), Back3%, PSET                    'Restore BackGroundă    EXIT SUBă  END IFăăEND SUBăăSUB CursorUpă'Moves the cursor up one selection ifă'the up arrow key has been pressed.ă  IF Area = 1 THENă     Area = 3ă     OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 127, 114ă     OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 127, 114ă     OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 255, 114ă     GET (Arrow.X, Arrow.Y + 80)-(Arrow.X + 36, Arrow.Y + 114), Back3%'Get temp backgroundă     PUT (Arrow.X, Arrow.Y + 80), PurpleArrowMask, ANDă     PUT (Arrow.X, Arrow.Y + 80), PurpleArrow, ORă     WAIT &H3DA, 8ă     PUT (Arrow.X, Arrow.Y), Back1%, PSET                    'Restore BackGroundă    EXIT SUBă  END IFă  IF Area = 2 THENă     Area = 1ă     OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 255, 114ă     OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 127, 114ă     OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 127, 114ă     GET (Arrow.X, Arrow.Y)-(Arrow.X + 36, Arrow.Y + 34), Back1%'Get temp backgroundă     PUT (Arrow.X, Arrow.Y), PurpleArrowMask, ANDă     PUT (Arrow.X, Arrow.Y), PurpleArrow, ORă    WAIT &H3DA, 8ă    PUT (Arrow.X, Arrow.Y + 40), Back2%, PSET                  'Restore BackGroundă    EXIT SUBă  END IFă  IF Area = 3 THENă    Area = 2ă    OFont "PLAY GAME", Arrow.X + 45, Arrow.Y + 13, 127, 114ă    OFont "READ RULES", Arrow.X + 45, Arrow.Y + 53, 255, 114ă    OFont "QUIT", Arrow.X + 45, Arrow.Y + 94, 127, 114ă    GET (Arrow.X, Arrow.Y + 40)-(Arrow.X + 36, Arrow.Y + 74), Back2%'Get temp backgroundă    PUT (Arrow.X, Arrow.Y + 40), PurpleArrowMask, ANDă    PUT (Arrow.X, Arrow.Y + 40), PurpleArrow, ORă    WAIT &H3DA, 8ă    PUT (Arrow.X, Arrow.Y + 80), Back3%, PSET                    'Restore BackGroundă    EXIT SUBă  END IFăăEND SUBăăSUB DialogBox (Cul%, Lin%, BoxLength%, Height%) STATICă   DrawWindow Cul%, Lin%, Cul% + BoxLength%, Lin% + Height%, 255, 255, 7ă  ă    'status bară    LINE (Cul% + 5, Lin% + 34)-(Cul% + BoxLength% - 6, Lin% + 34), 0ă    LINE (Cul% + 7, Lin% + 7)-(Cul% + BoxLength% - 7, Lin% + 32), 147, BFă    LINE (Cul% + 6, Lin% + 35)-(Cul% + BoxLength% - 6, Lin% + (Height% - 6)), 139, BFăăăEND SUBăăSUB DrawButton (W.X%, W.Y%, W.W%, W.H%, Border%) STATICăCOLOR WhiteăLINE (W.X% + W.W%, W.Y%)-(W.X%, W.Y%): LINE -(W.X%, W.Y% + W.H%)ăLINE (W.X% + W.W% - 1, W.Y% + 1)-(W.X% + 1, W.Y% + 1)ăLINE -(W.X% + 1, W.Y% + W.H% - 1)ăCOLOR DarkGrayăLINE (W.X% + 1, W.Y% + W.H%)-(W.X% + W.W%, W.Y% + W.H%)ăLINE -(W.X% + W.W%, W.Y%)ăLINE (W.X% + 2, W.Y% + W.H% - 1)-(W.X% + W.W% - 1, W.Y% + W.H% - 1)ăLINE -(W.X% + W.W% - 1, W.Y% + 1)ăLINE (W.X% + 2, W.Y% + 2)-(W.X% + W.W% - 2, W.Y% + W.H% - 2), LightGray, BFăăIF Border% THENă COLOR DarkGrayă  LINE (W.X% + W.W% - 10, W.Y% + 10)-(W.X% + 10, W.Y% + 10)ă  LINE -(W.X% + 10, W.Y% + W.H% - 10)ă  COLOR Whiteă  LINE -(W.X% + W.W% - 10, W.Y% + W.H% - 10)ă  LINE -(W.X% + W.W% - 10, W.Y% + 10)ăăEND IFăEND SUBăăSUB DrawWindow (x1, y1, x2, y2, c1, c2, c3) STATICă        ă        LINE (x1, y1)-(x2, y2), 0, Bă        LINE (x1 + 1, y1 + 1)-(x2 - 1, y1 + 1), c1ă        LINE (x1 + 2, y1 + 2)-(x2 - 2, y1 + 2), c1ă        LINE (x1 + 1, y1 + 1)-(x1 + 1, y2 - 1), c1ă        LINE (x1 + 2, y1 + 2)-(x1 + 2, y2 - 2), c1ă        LINE (x2 - 1, y1 + 1)-(x2 - 1, y2 - 1), c2ă        LINE (x2 - 2, y1 + 2)-(x2 - 2, y2 - 2), c2ă        LINE (x1 + 1, y2 - 1)-(x2 - 1, y2 - 1), c2ă        LINE (x1 + 2, y2 - 2)-(x2 - 2, y2 - 2), c2ă        LINE (x1 + 3, y1 + 3)-(x2 - 3, y2 - 3), c3, BFă        ăEND SUBăăSUB Frame (X%, Y%, x1%, y1%, LineColor%)ăLINE (X% + 5, Y% + 5)-(x1% - 5, y1% - 5), LineColor% + 5, BăLINE (X% + 6, Y% + 6)-(x1% - 6, y1% - 6), LineColor% + 6, BăLINE (X% + 7, Y% + 7)-(x1% - 7, y1% - 7), LineColor% + 7, BăLINE (X% + 8, Y% + 8)-(x1% - 8, y1% - 8), LineColor% + 8, BăLINE (X% + 9, Y% + 9)-(x1% - 9, y1% - 9), LineColor% + 9, BăLINE (X% + 10, Y% + 10)-(x1% - 10, y1% - 10), LineColor% + 10, BăLINE (X% + 11, Y% + 11)-(x1% - 11, y1% - 11), LineColor% + 11, BăLINE (X% + 12, Y% + 12)-(x1% - 12, y1% - 12), LineColor% + 12, BăLINE (X% + 13, Y% + 13)-(x1% - 13, y1% - 13), LineColor% + 13, BăLINE (X% + 14, Y% + 14)-(x1% - 14, y1% - 14), LineColor% + 14, BăLINE (X% + 15, Y% + 15)-(x1% - 15, y1% - 15), LineColor% + 15, BăLINE (X% + 16, Y% + 16)-(x1% - 16, y1% - 16), LineColor% + 14, BăLINE (X% + 17, Y% + 17)-(x1% - 17, y1% - 17), LineColor% + 13, BăLINE (X% + 18, Y% + 18)-(x1% - 18, y1% - 18), LineColor% + 12, BăLINE (X% + 19, Y% + 19)-(x1% - 19, y1% - 19), LineColor% + 11, BăLINE (X% + 20, Y% + 20)-(x1% - 20, y1% - 20), LineColor% + 10, BăLINE (X% + 21, Y% + 21)-(x1% - 21, y1% - 21), LineColor% + 9, BăLINE (X% + 22, Y% + 22)-(x1% - 22, y1% - 22), LineColor% + 8, BăLINE (X% + 23, Y% + 23)-(x1% - 23, y1% - 23), LineColor% + 7, BăLINE (X% + 24, Y% + 24)-(x1% - 24, y1% - 24), LineColor% + 6, BăLINE (X% + 25, Y% + 25)-(x1% - 25, y1% - 25), LineColor% + 5, BăEND SUBăăDEFSNG A-ZăSUB LoadImagesăRESTORE ArrowImageăFOR R% = 0 TO 34ăFOR C% = 0 TO 36ăREAD P%ăIF P% > 0 THEN PSET (C%, R%), P%ăNEXT: NEXTăGET (0, 0)-(36, 34), PurpleArrowăCLSăLINE (0, 0)-(36, 34), 255, BFăăRESTORE ArrowImageăFOR R% = 0 TO 34ăFOR C% = 0 TO 36ăREAD P%ăIF P% <> 0 THEN PSET (C%, R%), 0ăNEXT: NEXTăGET (0, 0)-(36, 34), PurpleArrowMaskăCLSăăăEND SUBăăDEFINT A-ZăSUB OFont (Text$, X, Y, Fore, Back)ăDEF SEG = &HFFA6                              'Stores masks for lettersăFOR Letter = 1 TO LEN(Text$)                  'Does each letterăAddress = (8 * ASC(MID$(Text$, Letter))) + 14 'Address for start of letterăFOR Height = 0 TO 7                       'Each letter is an 8x8 pixel matrixăMask = PEEK(Address + Height) * 128   'Address for mask of each line of letterăLINE (X + Curntx + 1, Y + Height + 1)-(X + 9 + Curntx, Y + Height + 1), Fore, , MaskăNEXTăCurntx = Curntx + 8                   'Advances X axis by 8 for next letterăNEXT                                  'Continue to next letterăDEF SEG = &HA000                      'Change to video memoryăIF Back > 0 THEN                      'Background color can't be color 0ăFOR V = Y TO Y + 7                    'Again, they're 8x8 pixelsăFOR H = X TO (LEN(Text$) * 8) - 1 + X 'Calculates length of text in pixelsăPK0& = PEEK(H + V * 320&)             'Is point at H,V = to foreground color?ăPK1& = PEEK(H + 1 + (V + 1) * 320&)   'Is point at H+1, V+1 = to foreground?ăPK2& = PEEK(H + 1 + V * 320&)         'Is point at H+1, V = to foreground?ăPT& = H + V * 320&                    'Video memory pointerăIF PK0& <> Fore THEN                  'If this is foreground, don't overlap ităIF PK1& = Fore OR PK2& = Fore THEN POKE PT&, Back    'Put pixel into memoryăEND IFăNEXT H     'Next horizontalăNEXT V     'Next verticalăEND IFăDEF SEG    'Put us back whereăăEND SUBăăSUB PalColorsăPALETTE 0, 0ăPALETTE 1, 131586ăPALETTE 2, 263172ăPALETTE 3, 526344ăPALETTE 4, 657930ăPALETTE 5, 921102ăPALETTE 6, 1052688ăPALETTE 7, 1315860ăPALETTE 8, 1447446ăPALETTE 9, 1579032ăPALETTE 10, 1710618ăPALETTE 11, 1842204ăPALETTE 12, 1973790ăPALETTE 13, 2171169ăPALETTE 14, 2302755ăPALETTE 15, 2434341ăPALETTE 16, 2565927ăPALETTE 17, 2697513ăPALETTE 18, 2829099ăPALETTE 19, 2960685ăPALETTE 20, 3092271ăPALETTE 21, 3223857ăPALETTE 22, 3355443ăPALETTE 23, 3487029ăPALETTE 24, 3750201ăPALETTE 25, 4013373ăPALETTE 26, 3091757ăPALETTE 27, 2828585ăPALETTE 28, 2960171ăPALETTE 29, 2565413ăPALETTE 30, 2696999ăPALETTE 31, 1973276ăPALETTE 32, 2170398ăPALETTE 33, 1710104ăPALETTE 34, 1578006ăPALETTE 35, 3617589ăPALETTE 36, 3091245ăPALETTE 37, 2959659ăPALETTE 38, 2564901ăPALETTE 39, 2828073ăPALETTE 40, 2301473ăPALETTE 41, 1575442ăPALETTE 42, 1970200ăPALETTE 43, 917512ăPALETTE 44, 3614513ăPALETTE 45, 3219755ăPALETTE 46, 2166810ăPALETTE 47, 2691617ăPALETTE 48, 1048586ăPALETTE 49, 2162708ăPALETTE 50, 1575956ăPALETTE 51, 1181198ăPALETTE 52, 3605029ăPALETTE 53, 1835026ăPALETTE 54, 2293782ăPALETTE 55, 2687002ăPALETTE 56, 3080222ăPALETTE 57, 3473443ăPALETTE 58, 4143421ăPALETTE 59, 4140345ăPALETTE 60, 2561057ăPALETTE 61, 1312784ăPALETTE 62, 4134963ăPALETTE 63, 4133937ăPALETTE 64, 4133425ăPALETTE 65, 4131887ăPALETTE 66, 918026ăPALETTE 67, 4130349ăPALETTE 68, 3998763ăPALETTE 69, 786440ăPALETTE 70, 1572880ăPALETTE 71, 1966100ăPALETTE 72, 2424856ăPALETTE 73, 2818076ăPALETTE 74, 2949150ăPALETTE 75, 3342371ăPALETTE 76, 3604517ăPALETTE 77, 3735591ăPALETTE 78, 4128811ăPALETTE 79, 3220269ăPALETTE 80, 2825255ăPALETTE 81, 4138295ăPALETTE 82, 2167324ăPALETTE 83, 2823717ăPALETTE 84, 4136501ăPALETTE 85, 1707030ăPALETTE 86, 4135989ăPALETTE 87, 2428958ăPALETTE 88, 1575444ăPALETTE 89, 4134451ăPALETTE 90, 4130863ăPALETTE 91, 1049100ăPALETTE 92, 3867691ăPALETTE 93, 4129837ăPALETTE 94, 1310734ăPALETTE 95, 1703954ăPALETTE 96, 2687004ăPALETTE 97, 3080225ăPALETTE 98, 3473445ăPALETTE 99, 3604519ăPALETTE 100, 3866665ăPALETTE 101, 4141371ăPALETTE 102, 4139321ăPALETTE 103, 4137783ăPALETTE 104, 1970202ăPALETTE 105, 1838616ăPALETTE 106, 1443858ăPALETTE 107, 4133939ăPALETTE 108, 4132401ăPALETTE 109, 917514ăPALETTE 110, 4011323ăPALETTE 111, 3482929ăPALETTE 112, 2561571ăPALETTE 113, 4140347ăPALETTE 114, 786954ăPALETTE 115, 3749689ăPALETTE 116, 2828587ăPALETTE 117, 2960173ăPALETTE 118, 3223345ăPALETTE 119, 2433829ăPALETTE 120, 2697001ăPALETTE 121, 4143935ăPALETTE 122, 1841692ăPALETTE 123, 3354419ăPALETTE 124, 1183762ăPALETTE 125, 2169889ăPALETTE 126, 1051664ăPALETTE 127, 63ă'blue 130-149ăPALETTE 130, 0ăPALETTE 131, 262144ăPALETTE 132, 524288ăPALETTE 133, 786432ăPALETTE 134, 1048576ăPALETTE 135, 1310720ăPALETTE 136, 1572864ăPALETTE 137, 1835008ăPALETTE 138, 2097152ăPALETTE 139, 2359296ăPALETTE 140, 2621440ăPALETTE 141, 2883584ăPALETTE 142, 3145728ăPALETTE 143, 3407872ăPALETTE 144, 3670016ăPALETTE 145, 3932160ăPALETTE 146, 16159ăPALETTE 147, 16144ăPALETTE 148, 16128ăPALETTE 149, 1064704ă'red palettes 150-165ăPALETTE 150, 0ăPALETTE 151, 4ăPALETTE 152, 8ăPALETTE 153, 12ăPALETTE 154, 16ăPALETTE 155, 20ăPALETTE 156, 24ăPALETTE 157, 28ăPALETTE 158, 32ăPALETTE 159, 36ăPALETTE 160, 40ăPALETTE 161, 44ăPALETTE 162, 48ăPALETTE 163, 52ăPALETTE 164, 56ăPALETTE 165, 60ă'green  181-196ăPALETTE 181, 0ăPALETTE 182, 4 * 256'4140342ăPALETTE 183, 8 * 256'4140346ăPALETTE 184, 12 * 256'4140351ăPALETTE 185, 16 * 256'3812671ăPALETTE 186, 20 * 256'3550527ăPALETTE 187, 24 * 256'3222847ăPALETTE 188, 28 * 256'2960703ăPALETTE 189, 32 * 256'2961727ăPALETTE 190, 36 * 256'2963007ăPALETTE 191, 40 * 256'2964031ăPALETTE 192, 44 * 256' 2965311ăPALETTE 193, 48 * 256'2965306ăPALETTE 194, 52 * 256'2965302ăPALETTE 195, 56 * 256'2965297ăPALETTE 196, 60 * 256'2965293#ăPALETTE 197, 3227437ăPALETTE 198, 3555117ăPALETTE 199, 3145728ă'gold palettes 200-215ăPALETTE 200, 0ăPALETTE 201, 1028ăPALETTE 202, 2056ăPALETTE 203, 3084ăPALETTE 204, 4112ăPALETTE 205, 5140ăPALETTE 206, 6168ăPALETTE 207, 7196ăPALETTE 208, 8224ăPALETTE 209, 9252ăPALETTE 210, 10280ăPALETTE 211, 11308ăPALETTE 212, 12336ăPALETTE 213, 13364ăPALETTE 214, 14392ăPALETTE 215, 15420ăPALETTE 216, 528392ăPALETTE 217, 659464ăPALETTE 218, 790536ăPALETTE 219, 921608ăPALETTE 220, 1052680ăPALETTE 221, 1052168ăPALETTE 222, 1051656ăPALETTE 223, 1051144ăPALETTE 224, 1051403ăPALETTE 225, 1051404ăPALETTE 226, 1051405ăPALETTE 227, 1051407ăPALETTE 228, 1051408ăPALETTE 229, 985872ăPALETTE 230, 854800ăPALETTE 231, 789264ăPALETTE 232, 723728ăPALETTE 233, 723984ăPALETTE 234, 724240ăPALETTE 235, 724752ăPALETTE 236, 725008ăPALETTE 237, 725007ăPALETTE 238, 725005ăPALETTE 239, 725004ăPALETTE 240, 725003ăPALETTE 241, 790539ăPALETTE 242, 856075ăPALETTE 243, 987147ăPALETTE 244, 1052683ăPALETTE 245, 1052427ăPALETTE 246, 1051915ăPALETTE 247, 1051659ăPALETTE 248, 0ăPALETTE 249, 0ăPALETTE 250, 0ăPALETTE 251, 0ăPALETTE 252, 0ăPALETTE 253, 0ăPALETTE 254, 0ăPALETTE 254, 3158064ăPALETTE 255, 4144959ăăEND SUBăăDEFSNG A-ZăSUB ProcessSelectionăăSelection:                         ă'Checks where the cursor is if theă'enter key has been pressed.ă    SELECT CASE Areaă      CASE 1ă       GET (80, 40)-(240, 150), SaveScreenă       DialogBox 80, 40, 160, 110ă       DrawWindow 140, 105, 175, 135, 255, 7, 18ă       OFont "FIRST ROW", 125, 55, 255, 114ă       OFont "YOU SELECTED", 110, 80, 255, 114ă       OFont "PLAY GAME", 125, 90, 255, 114ă       OFont "OK", 148, 117, White, Blackă         DOă         LOOP UNTIL INKEY$ <> ""ă       PUT (80, 40), SaveScreen, PSETă       ERASE SaveScreenă       EXIT SUBă      CASE 2ă        GET (80, 40)-(240, 150), SaveScreenă        DialogBox 80, 40, 160, 110ă        DrawWindow 140, 105, 175, 135, 255, 7, 18ă        OFont "SECOND ROW", 125, 55, 255, 114ă        OFont "YOU SELECTED", 110, 80, 127, 114ă        OFont "READ RULES", 120, 90, 127, 114ă        OFont "OK", 148, 117, White, Blackă         DOă         LOOP UNTIL INKEY$ <> ""ă       PUT (80, 40), SaveScreen, PSETă       ERASE SaveScreenă       EXIT SUBă      CASE 3ă        GET (80, 40)-(240, 150), SaveScreenă        DialogBox 80, 40, 160, 110ă        DrawWindow 140, 105, 175, 135, 255, 7, 18ă        OFont "THIRD ROW", 125, 55, 255, 114ă        OFont "YOU SELECTED", 110, 80, 127, 114ă        OFont "END PROGRAM", 120, 90, 127, 114ă        OFont "OK", 148, 117, White, Blackă         DOă         LOOP UNTIL INKEY$ <> ""ă       PUT (80, 40), SaveScreen, PSETă       ERASE SaveScreenă       ENDă    END SELECTăăEND SUBăAngelo Ken Pesce               FAST SCREEN 13 PSET DEMO       us0082@uniserv.uniplan.it      04-04-97 (18:54)       QB, PDS                142  9424     FASTPSET.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FASTPSET.ZIP",4^6:Z&=6802:?STRING$(50,177);ăU"%up()%9%%%d-%l,&RG*I>D;L).%%=7%%%1%%%%kf%xyux%jySfRxr.&<f=[kj9văU"^=F$UD$;E&di'wE.=:zdrm#np'YKBSwyP%?mOs:iI*hlaL&Qfx%9M.qLi-GQCX2ăU"2jeQGx.wgOX$mJ<hhR>o42Rl<pn#aQ8N:<H'iP'9o2Q]#KS'f%ELgC-u[lp6a)XăU"Lf\qT0Tg$I)<&Bq&+br&q<Go$T^;M5;7D$:T;(88DOzS.xiAf+i$C.F1YDOASOPăU"Dm[Zfw][=:o;Ls:e+wAKAe^i/8QS.]z\xcSRJ5'qN-shK%p';jILa9x/2yTi]hYăU"k%O:nrShW5-Q)D\QGO]WdDQox&B1r2==Q>C['#ROgMWol[AF=#Wldh5=Xv90p>\ăU"3^Q]-^gAG^RhBZY$A(C4?joUlCs:-obrlaV^Z?f0hWb5'C(lPHHU9QFGs:ch[ilăU"2WIFO/<G\2o:j1q&I/BoCvs/2HZrJS<z*<Mbt1pHfPVd[/zRW(B)FL^i?D==FkYăU"+K&VHMi>sCvBi8e6tyIgREgDWsJ6Pl8Vpg/\sGiQC,SUONI_VdB5x2ODP/,'6LQăU":yCifa1]n_M$R]jav,poh4G*C4A-lvHW',_$JiEfqm3cD5EG/5>QDbst)W5R?:=ăU".M2:u$%0nuTY6OW)%?BiX%3/S6[LmQ%n1bA<O:\]e+wNaO450<sfbB+6nfYs2gVăU"L#CGkms_-r,cGnErGob)$7*SqxXG&iBY'3V.VZr80?KcC#QD?dC8kB=]q]Pqpx&ăU"TSfMO%FO3)k3r;doXeR:U8Ts;G8E(=KY[:/].K(4O,(dmd<[rT/z,#442;Q$GElăU"<lJvl;B9PqUC=>cx_ihV'((fX/AY?T8E6$WK*81\xXSmB]*Iu<9\QJj'7ePHZD_ăU"sVIf]8[3Yj)=a0,q5FfNsd$M$aN,kyJr2rlND&s\-ODr%nC'<dad7rl/<nP9<vTăU"M/)9t+&sc(GCJ%L,^P$z2m6IyX;B_6Y=,OIbpFXRS5h+H'oz[#9N[H/?:-Mo1([ăU"L+^=q&?LCjFyXaHew:QXF.&<rX]h*tp/dSyE_GLibS],P#;N]q*0#\^(T[-9OGnăU"%=H0a/8,Sdx=^eudBnaJ%EG*b4?.,\k%G<,&_*nq^^<^AYNYTpFl7AqU]$*'Ra_ăU">ut4a%Z>eIS[[$2q&05k])kv$SaeTmQY4E8lM2qJecrX&3*1z4.uI=L?$[zx(6năU"0MY]:bAg1E061eckfX#9xqj3,UYZfE\JsA)E,%?wBhzm=8e;(RAmFe^F5b:1cGeăU"NEqxA+:bVLd-1dWFuudgC<hqn4qVgy8S1wJe3KTU;pwMo+di[,imm-'Pt?bJB1XăU";B5E?YR=&-?DX$\p9f\LxtVP1f#qvG]eZf7I-6kKe<Chj*/n*q%8qy*b4OjwAx]ăU"w/%tU^[Iibefl7-,kdHUTH8UJY<gI[RNA+kvp$60)KD<.EPYiEaag,UWKApL37UăU"qPxCjbs\nSNMqZ&g,Wes&=wd.cBB:^ci6EYIKB,VwCWZf)X>KD_CvU?4Ha51,;căU"pDW]MQh&8YwNWDsdF,\QO<o%ciIaV/,LdLr.gEeyq%sXMA)(^*%sHPFNL?YIQ?yăU"faE:Yh/XrWfL0nkrm>6o%4up(%)9%%#%-%pE,RGVa+QvR#)%%=%7%%1%%%%k%qfăU"xm%uxyS[fxr.k&R=\.[9L\<YN14C&5+rg))k>CWYg-LwvD1(HAK[)Y1Ep&[Ri;AăU",oolZr&bJa0-dJ\Mrn&8sI0sAk7&1sCW^UeBN$cme_wwWl_j*?,JBGKu/UHI2K]ăU"Wb\9KA^/$(8c1Z/3,;Zn$t$Z6vg&cEt(9Met9'4L8Za4Dt9d,il46i:oQfpRw$văU"d)rSi,5C[b)\O4?b?^sWEZ=DkmU1[TAn9pCzH>Ocm8hX_A&2J($ud5l<ZlXNYM4ăU"#1zz&uT3%;#P+0G2gE4Nhj\5\ai6]To)DPOfO1XdUT0iB%)</U*)VB)UK)'$7DgăU"p^.iUX;2m:vPF(X.gm>zDCHFgV#5A,GJ[XXhdIvYrWovm&g7&9n'EsF8GlxfVM^ăU"W^C&uPH2X0=G%6:c-C1Xj7FU76)J?=fHM>FSnrlEJ$+u;MR<:%RzWrhlt1'Gl06ăU"dg+y:W4Rk_:XE1lrI%^?\$Oga880wSdTu)Iljn-I/bJ&9bJjwF%+GLVv7-3dqA_ăU"nJGi#q5/:y+94<)('x^P2KnoEo=ILG0=6CkZ]isvBU,:ajRe$YMf-(h]8#1O64hăU"cO_J*C[z%+adRLig6c[<^u9><CWV:#0vl'H?CYC4.&y4*l^Jh'.m)LA.Y#bMe'văU"LaO4504gf4sR(+5rJ4q<P.(F]hID)r,y_n7#TdJ0hfJjZlY6b:FM]ejI9u]xW;qăU"XI=kI(THtdR5J>i84)s+<Q)F[D92[DHkZ=qcq&K;8+/>WTtAiMy><tGeUcba>DtăU"'VR?s_.f5>rF4TV:BG(*a9.r+c\/'[o8?iY#h_(rM0Lx]fZ/j^CBWl[jrlz6j27ăU"KFPFVi7bj6?jH3+qv;P&7l(AcGO(Ovd\_NZJ^lh<HoHD5W[L-8]Qi]EGu_\H1I=ăU".=d506E-'U5GC8KN6cyWGi^6ao8SNqRvTmNiGs&S*ffnd.<z&*?N$(7G+&<K2-AăU"uyA:*uF:.ok'8w$-Shq5H_L,4X4uG06,Pd__[BGAK23l9IZT7&G1N*dk<._4%CZăU"l1YuGCrQlV)]<%j<U2-6FSwN:T;\q_;rK-sv)U42\)L#/6J6oN.%/<,f9?TQ)/răU"\ajMQHEeoQ1^#8<+_BuXDuTApRb\twmTBR3iT7UL&pCCQ,8kbCf_WRjK.tD<hN'ăU"V[,W:V$5Zaxfo3kJADL,TN&p=(fFW?/dU=xU#f:&#34)t%T$1N5g;D6[I2hc>t]ăU"\)E_O?wDHzeg5;<+2+mNk^?6bU3tg_<HqAGMZ3FB#&kwNZ=hik535KY],Hw\FWuăU"<fQ2YAZ';oN(?XRevVJA1%p/^HZrgSHR/lmu%Cu]dEmLD^O7tgnh6BQpsWrPW(qăU"Lx5qNKebp9>')RZ?l(z5%q=6r8+c84'9K3jg-u-?VI.afp0A[TtZM+M/i\gL]srăU"N9HS%VKh73S.F4lx&wlk4+^M*jJb9(ItFm'Rr1+o)eV.>VdRfA,dVEH=R1o(lpaăU"CmBjG+7>CEt/x.zmzgK&OC)kTGyISH:3wFgf?yAA:wy\_Oe.,\605X.oa:uKR]3ăU"Ixi40i,Bc#/S4T9VzuHEiNlN5QX?yxdER/hm5,VLppnkm>N,j4%up()%9%%%d-%ăU"s,nRGk7'lE)*.%%>8%%%1%%%%ut%pjux%jySfRxr.';:>[kj9v]=,N1DG]fHs]1ăU",H/y.z+bJA,7ukM;W%z_dR,)J1aC;qv0xO$oJP.;NqvZkljB?#[R.x#:.]BZh2păU"m.X1E_h_-NxZ2Dn*?,JB=nM*<3#%0l3DY/o_#BG,MG#<*CQR;rEsM<Tbm$uSf4HăU"qWC8,D'4W:C$BTP4Y^kQiJScSh$.$o&gk#bLaBdb)fo+7bUCkLe^&HwnF:3eh&găU"rQ2l2KQ,b];xRU_,_.(_]R.atdO6-4]%hzN-N/SD'<0SkN1jE4LNj\5'\ubb,-*ăU"\<*ob:7$Pnhx'$-s:)//4$#-QY.dGdSg#_iU]KgbFi6'mLL)/0yRm$44>u=B<[8ăU"dQE/Bf,V[+GL,?JD0owVv/W[lZf^h6KAkbS)SPHHWQKE#fDT4qP18F\U6)Jm7fHăU"KI>ShelGS$sheMX<[*Bz+LQld1;xlP6Sd7NhDFTa3d,-=u#Me3+\oJKd\&Qov$<ăU"^%VJXiv6-4Ps6WLa3b%wXB0GTYU6&QqOF#$;ZZGt['m<:97qhr[XMK,O[par;aGăU"5Yg2[Srw26&Jx;(,Pt2v&VAL3XyCXW43,Hs-eNG%9Pto.ieRangU_)?YoU<Q-1wăU"(Qs6fYU#4&y4O&^zBB6E6g^]7[?jv)osfI\G>W?QCd5%d*Z\bU2tC;S]u+m-kX)ăU"yn=#B#J0(3ezhs?>mY((/J6.sUr80_?qC*Hv9p]W-J=]-qPQp*xQNfBA,jR3qB+ăU"Z7[oJ;Qb#G;CP]pA.AY2$L>MOefUce2lE=ew>hNxE$>:n;I18g1d4lS_cAE<nNaăU"wk5[qI^v_;qNt?E(okZ<JFd-=9XqnU=(73CYmk>ktLQPq=w3.XQ&g_TnaoCxe8LăU"9.g-Wovw+9ngVIGAB3I?8[C+*(;)Q=5KD8JK6yy/cFc->h.%9mno<s(OXbdErtHăU"KXMXyzQ*cFT7b+&<uE'cq*]&:eV:IOC0qo=I3t/FcUBfyJfGHfu\-PiCY,dxwq>ăU"ws%o3'9K/;B4,D1(ien/J6H9C6+U2YQEGvBEsrH_ul8J7sr)x>WUSs?&WGnUNh/ăU")=P-/nD7\<)iT/6:kiNhemyJ0L*n2dBNQv9>22v('7)VHTd0(&q.&&rt=4>k&nIăU"SJacquDF&5&/p'tI^?tolBoaG=DK52CjyciJxAQJ+PZ46r#2-v88yPM4>bYoi#_ăU"S$>O;rmnUi(?j]MXEGCP-McR)2$VaVNEF6A\RFKOu7]8I.UKG/GfAKtI_?.t:$_ăU"3(E7YGZ2,?%L7)hBAik.i5NBGH>(W\mr6CY.wNgSczQUj1cu7h%/VglfOZCQr\=ăU"<0>QaN2n[u:H_r^<x$EDx%u37:b>J$/;L2M:w>wm$;/nG'+)O=oo2$NWf*.#)X+ăU"au*:%kY$.J[YaSjk/HXCss%/\r6wdu:=CA=l?+s##H)OfW5e-<\qC<HvqUkq:p&ăU"9gEVi\1#RmTleWVX#L&fEH15HaSgdbWk^%u<9rpw3bFiWj5\>;W<CgKKC0=)BFkăU"5n][>bcWtlHIWLjEA19RJcOs%aF&/.,yIv:+_'gL=za-/N.:)dDz_wT.y&yZ'oKăU"eIuQ;P=uRmmG8(>fBM?&Uh.zqGOXo*mvOg9y<t54h?4dQ=(0Oqi393Z>sd4OtxYăU"4IP5'\Dup%()9%%%%-%5w,RG,cu(5&a)%%%c7%%%1%%%#xqt&%uxjy%SfxrW.&TăU"=B\[5LO\YNgSV%4ZIz',kAZ:9TsSWn/1s1Sn)2rM;>YEQgP;JtssYRXSc70etX8ăU"fPcAcinc6]OXxmGe%</hX63D8YcTtKuv$XS\0=]$yUu%/;_(Ri7c2TiNo1LaR.QăU"AG&[n&GU3y>Gd8(H&XdS-hjh5c;N&1E:KCS+6uv7kMFtvr7b-8:Wa(*NZV/XQZUăU"*0s8Ia[D5[+&:,+QXmlkaiBw'7Q-DSYflffz?=cde=Jmb9SJ&&&w<duW\T.C5/tăU"?;V5qz*Rf\C$,sQBJiN+]lCv1qR?3)Rn8]3JOR3Dh0eG67;01Kox[0,kUS(Cdn>ăU"S3,WVVc05Ge5UI(65eGWUU9JpAR=huJC;D(oTbLY-t^Zf0ZhkAQUb(&m>Y5*lE6ăU"aclp7P+WP=#Yq;3T:f+K#:<2h+]WFe_^X+<%z*gFbf[Vxv(2IOH9*o5p5=;-SZ_ăU"#qGaRaX5Gmfb:Z+'nH4%foi0VulVd^DWZ9JIw8BY\?1X7:W$)o'Csr:6*E+EkF)ăU"m(KkM:q:]w:=\JYS[guAj+V(\C]60mH1ai:<E)%7[pO(.rI:E._^6nOZ-8QUTLBăU"iCYpq0wm%V0,<Qa+Zb%7UxiNJ[&C<O&n#I$.o.1jIcE?jn-/wf)43FrTQ?A&z2uăU"p=LU<&2Qgs9YhPq]TrL#uP#RSWGL.j685SZH2]lSkYSwX*L]B^IY0-E]W-*E^cqăU"PQDKwGn11AQ5e3sk%r%<oX;<r2S[Xo\+k7$g:L^pauqd+y=,hMG'Bj<T%Fqn,elăU"Z$c%BsV317Ry]qP]I6FdiHy5_C6ng.+iM=ZUF8.epOK0]h>uQapXYjS:2:B7hr/ăU"/C#03Q#5+UZ.CC)s'4zBHJN,%y3g:Ds[ITPD#;>ewda/d2&9xadLu+d3]o392.răU"ZI4ZDb)WbiS9O7TB%69tO7:dSazMh]eyj+ornQ%inn8lXy/R_q;m7Aq5rV_/8RhăU"nn<Z9Q)3OvZQ9Q/B9BOcq_FywQ35]?1t^Ebupmx2e5cdhBrs4Zo[T[d&E?[X2O4ăU"j2+5p]ao#6zfeHrX.IMDr;bnoz89te)-T[>a+j(:#nyLgd]UFoH6VEhSuU/[9:yăU"<enermPL/w(P-zUPu=VB6eJ)B;r)>CXOo)).jx4:-RBvFR=NgwH3&0$ubmW=^t7ăU"pCEi.wuFwCJ.E>)PRY?/Wq,F7([c/&_<%R#T:2sS*;NH-e\lkbJNpC&>Q&2*n%FăU"XalJru-fv(I(dy]%2/dalAkdP:Wuf])g1dp8OhhYyw/=btXFkUT$o*1bovM'?PKăU"$/W(>>tK:,m'71R<)a=L:O3r?>]q*YN;,R%]9'g#1tAaa';O;I1.jxd\VJ>3l14ăU"BVQa.&kTRZmfE4+-/9guM\%CgJdG1ydr]\sZF6#.>rwEPS3j'Iv8_&=gLr,wXGzăU"/<g)8KKJwD,0(Hq8rROZY*Re_^S(^&tCBH*880OQUTENDu18V?G9bE>M/:YlZgVăU".nl_eN0'l4up%()9%%%%-%4b+RGML:BQ%/&%%&v&%%%1%%%%kfxy%uxjy%SgfxJăU"4u0:\RU5vaSqDW\Vf\)+y4zKK+4tB(u'#v4\S^v[X;u,hhCsxYM?Q<])$-hNVJFăU"+M=UvDS-EX3Fn+l?&ZYt/#aK$Q<dd0iHt:Z:(;az57BMKE%1<Rzl6I72=y$H8E4ăU"#Bbc+c>dnU>'lCKIyq(6vC4Ucc9AH.+z<Er<5(GM/aWdGX1S,5UFHOT>EnWE,$9ăU"Plh+vg:.oSl4lrIm,58kSi.e'FPsXs,q6gHpOy1aE%hn^\90pf(B/HcmEJr/rQaăU"6N,9fBTcSjl<pIA(u&lv4uf7\u^3Wqp=T33&:7xXG6-kJ^RaaV&jJUab;A7xge8ăU"ftFU9x<_5sBLch't2up%()9%%%%-%5[,RG7T7<5&:&%%'2'%%%1%%%%kqfx%muxăU"y%SgfxDd$r>B[U5U<h$kD]WhJ3.zOaw7wG-,3=5to%0f)z8?Y=Qq$1e.srPutO_ăU"*p+&hhYXVm^$l6miJwQ'kATtA3El(^a&;t47;(qK%YjIR?PXlSIu(*9^E5:nio>ăU"$Ja#)t)bl8+8v6+,0Ihn#Zs'9#LNbQNjYUP14aPPBBpAWGQ_uippYH3/qA[WjSHăU"7qY]aS=(vim2.wzaOMT6>0BiUN6>09qLhWX-\CQ\&[+d3>XX\<.-OK21y^G1SV(ăU"BTFq#Y9iW,uo$D6xD)xqTfZImx.kP)E1T^E<]\+UG=:lt:D%cu6nSqXIj,J3-8făU"b94]BW30ARLU1-[zVgJe%2G4q2Dk\\'s9^tc<6g<bA=ry(tpcI-nDH$R\3?+oMgăU"<=J_BV;LF]EfaE._8*>3Sq1,A%Es<Sz68QK'+.4EP&m:TogEp_m3<unxLXj6\8jăU"Mv')EZFNojfom\7*vM&u%p()9%%%%-R%z,R=Gf?\(rp%%+%>%%%%1%%%%utp%juăU"xj%ySgf.xx&--AHsz%-MsRavIUO7VyARcA%mF'JTsr>%AHx%my-UmYXLp[rQNCoăU"(uiF.QSxQmQrN]'^OsS7orFxmUY_^%onrx#Msr&')zUV])YXY?^[^o'DTwm?GHBăU"T7Rw)ZRuMB&#UWZT_W%gqhUee5_+dN/;d)?k.+5h/;W[*F%uKX4LMdq,-:Dz%DAăU"l+_*(x(V)_fPTE.q)d%)%up%()9%%%%-%6Q+RG>M3XX&V%%%&x%%%%1%%%#xqt&ăU"%uxjy%Sgfx^x&-GfBT&I[MSnE%pnQo'Jy-M[sRvI+UIXUaxARAo%mFJ#Tsr%-AHăU"xm%y-UY=XLprmQNC(=uiFQ(SxQQsrN]^%OsSo+rFxU=Y_^o'DTwm?GHBT7Rw)ZRăU"uMB&#UWZT_W%eq3?Ue5JMJS>87.]<X%&MwrIxMMtPa^^9Cp&M%fJ&u%p()/%%%%ăU"%U%f,RFGXXk&dH%%%%H%%%%,%%%%wjf%iSrjLw>DCM8=4BLE<03J4E1HIEf=624ăU";>E1p4=ELu4B2&42/u%p&'9%%9%%#%-%l*,RG*pID;L#)%%=%7%%1%%%%%%%%%&ăU"%%E%%%%%%%%%kfx%yuxj%ySfx%rup&%'9%9%%%%-U%p,R^GV+Q+vR)%(%=7%%%1ăU"%%%%%%%%%&%E[%%%v%)%%k%qfxm%uxyS%fxru%p&'9%%9%%#%-%s$,RGk-7lE)#ăU"*%%>%8%%1%%%%%%%%%&%%E%%%%%/%%%utp%juxj%ySfx%rup&%'9%9%%%%-U%w,ăU"R:Gcu((5a)%%%c7%%%1%%%%%%%%%&%E%%%%S%4%%x.qt&u%xjyS%fxru%p&'9%%ăU"9%%%%-%bE+RGL2:BQ/#&%%v%&%%1%%%%%%%%%&%%E%%+%c8%%%kfx%yuxj%ySgfăU"%xup&%'9%9%%%%-U%[,R[GT7<(5:&%+%2'%%%1%%%%%%%%%&%E%%%%C%:%%k%qfăU"xm%uxyS%gfxu%p&'9%%9%%%%-%z$,RGfB?\rp[%%%>%%%%1%%%%%%%%%&%%E%%+ăU"%,;%%%utp%juxj%ySgf%xup&%'9%9%%%%-X%Q+RpGM3X(XV%%(%x%%%%1%%%%%%ăU"%%%&%E#%%%M%<%%x.qt&u%xjyS%gfxu%p&'9%%/%%#%%%f$,RGX1XkdH%%%%H%%ăU"%%,%%%%%%%%%&%%E%%%%T=%%%wjf%iSrj%up*+%%%%%%.%.%%*'%%&F=%%%%%ăEND SUBăCLOSE:IF S=93AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAngelo Ken Pesce               BITMAP ZOOMING ALGORITHM       us0082@uniserv.uniplan.it      04-04-97 (18:54)       QB, QBasic, PDS        168  3879     BMPZOOM.BAS DECLARE SUB baa (xdim%, ydim%, xend%, yend%, xerr%, yerr%)ăDECLARE SUB bmpset ()ăDECLARE SUB bzoom (xdim%, ydim%, xend%, yend%)ăDECLARE SUB display (xend%, yend%)ăă' --------------------------------------------ă' USE QB /AH or QBX /AH (only for big zooms) Iă' $DYNAMIC  -- only with quickbasic          Iă' --------------------------------------------ăă' Bitmap zooming algorithm testă' By Angelo KEN Pesce 1997ăă' Set up the screen mode and other things --------ăSCREEN 13ăDEFINT A-ZăFOR i = 0 TO 63: PALETTE i, i * 256: NEXTăă' Set up the suorce bitmap -----------------------ăCONST xdim = 50, ydim = 50ăDIM SHARED org(xdim, ydim) AS INTEGERăCALL bmpset: ' does a simple circle patternăCLSăă' Input zooming parametrers ----------------------ăCOLOR 63: ' bright redăPRINT "Bitmap Zoom  v1.6"ăPRINT "-------------------"ăPRINT "Current features:"ăPRINT ") Zoom in and out"ăPRINT ") All integers processing"ăPRINT ") Jittered Antialiasing"ăPRINT ") Bitmap streching"ăPRINT ") Little anim :-)"ăPRINTăPRINT "Org. X Size"; xdimăPRINT "Org. Y Size"; ydimăPRINTăINPUT "Dest. X Size"; xendăINPUT "Dest. Y Size"; yendăPRINTăINPUT "Antialiasing value (2=normal,8=best)"; aaăINPUT "Jitter value (25=normal)"; jtăCLSăă' DIMension destination arrays -------------------ăDIM SHARED dest(xend, yend)ăă' DoZoom -----------------------------------------ăCALL bzoom(xdim, ydim, xend, yend)ăă' AntiAlias --------------------------------------ă' antialias is done by shifting xerr and yerrăFOR i = 0 TO aaăCALL baa(xdim, ydim, xend, yend, jt * RND - (jt / 2), jt * RND - (jt / 2))ăNEXTăă' Display result ---------------------------------ăCALL display(xend, yend)ăăă' Anim Demo --------------------------------------ăDO: LOOP WHILE INKEY$ = ""ăCLSăPRINT "ANIM DEMO"ăDO: LOOP WHILE INKEY$ = ""ăCLSăREDIM dest(80, 80)ăDOăFOR x = 10 TO 80ăCALL bzoom(xdim, ydim, x, x)ăCALL display(x, x)ăa$ = a$ + INKEY$ăNEXTăFOR x = 80 TO 10 STEP -1ăCALL bzoom(xdim, ydim, x, x)ăCALL display(x, x)ăa$ = a$ + INKEY$ăNEXTăLOOP UNTIL a$ <> ""ăăREM $STATICăSUB baa (xdim, ydim, xend, yend, xerr, yerr)ăxratio = INT((xdim * 100) / xend)ăyratio = INT((ydim * 100) / yend)ăăDOăxerr = xerr + xratioă3 IF xerr >= 100 THEN xo = xo + 1: xerr = xerr - 100: GOTO 3ăIF xo >= xdim THEN GOSUB ycheck1ăIF ys > yend OR yo > ydim THEN EXIT SUBăIF xs > xend THEN xs = xendăă' ANTIALIASING ROUTINE ------------ădest(xs, ys) = (org(xo, yo) + dest(xs, ys)) / 2ă' ---------------------------------ăăxs = xs + 1ăLOOPăycheck1:ăxerr = 0: xo = 0: xs = 0: ys = ys + 1ăyerr = yerr + yratioă4 IF yerr >= 100 THEN yo = yo + 1: yerr = yerr - 100: GOTO 4ăRETURNăăEND SUBăăSUB bmpsetăă' Set patternăFOR i = 0 TO 63 STEP 3ăCIRCLE (xdim / 2, ydim / 2), i, 63 - iăNEXTăă' Read patternăDO: LOOP WHILE INKEY$ = ""ăFOR x = 0 TO xdimăFOR y = 0 TO ydimăorg(x, y) = POINT(x, y)ăPSET (x, y), 63ăNEXTăNEXTăDO: LOOP WHILE INKEY$ = ""ăEND SUBăăSUB bzoom (xdim, ydim, xend, yend)ăă' Set up x/y zoom ratioăxratio = INT((xdim * 100) / xend)ăyratio = INT((ydim * 100) / yend)ăăDOă' check for x errorăxerr = xerr + xratioă1 IF xerr >= 100 THEN xo = xo + 1: xerr = xerr - 100: GOTO 1ăă' if XO = XDIM then update YO and YSăIF xo >= xdim THEN GOSUB ycheckăă' Some bound checksăIF ys > yend OR yo > ydim THEN EXIT SUBăIF xs > xend THEN xs = xendăădest(xs, ys) = org(xo, yo)ăăxs = xs + 1: ' Move xs (screen x) one pixel awayăLOOPăă'-------------------------------------------------- SUBSăycheck:ă' When XO=XDIM update YO and YSăă' start a new lineăxerr = 0: xo = 0: xs = 0: ys = ys + 1ăă' Check for y errorăyerr = yerr + yratioă2 IF yerr >= 100 THEN yo = yo + 1: yerr = yerr - 100: GOTO 2ăRETURNăEND SUBăăSUB display (xend, yend)ăFOR x = 0 TO xendăFOR y = 0 TO yendăPSET (x, y), dest(x, y)ăNEXTăNEXTăEND SUBăAngelo Ken Pesce               COOL BUMPMAPPER LIGHTING EFFECTus0082@uniserv.uniplan.it      04-04-97 (18:54)       QB, PDS                2509 165832   BUMP.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BUMP.ZIP",4^6:Z&=124269:?STRING$(50,177);ăU"%up()%9%%%%-%B3nTGrA8+,A17%%QL%%%-%%%%gz%ruSg7fxf?;:BSm]k$zuhV-ăU".+AWiKOR8$o=o/3T+BF+(Vq?1XNAL5UO/=J\smH'U(c8gC615]lpc^Dz&dPFA8YăU"uXL9hA8,m[_H0eN4BgG5p\Pvi(%YIM$?5r*dBUGgVJ8;RG/iB?[&ixJHWM(pGn%ăU"ue?tU$:Se*LAl>=B'P8To87aO23UG^r)XgZw9*8>2+cF)60E?^B3%eABIs\^nW)ăU"]U'(a2j2_-+cm=$0V0>I7,R?qTrbZ5bUOP[i$mX-J7Sul4TZ_<6]-:k?w%tlw.NăU"F#9lzm4hD7N)oDIeIgc<;ZJa2p_fVwCZ[+Fr\=X+5XZF>=]jK.&oL;Gagwp),2jăU"j))/Ze^Xv9ElAmZC*L$[l/^;XZmX?IRYLm$X&-Vw=_VVN(%;ydd&/h?>hDP]h39ăU"p;e#Hm9JGJpyjf;Jofpt14aR6NC?i&Q3_hYJP9RR)z&CHt<$s]avMZUC_V\e,>OăU"JIaa9lcOH3E$egBK\VBwm[rko#4L;Fyg8M7--X6X&4dc6um(Pq[+kK<fF178Q78ăU"jG[UZF3cmoE-%9$^^F%vx_e-Yq'1U9OwmJ2]61ug%5q[1KmKg-vjsB:TUh98eoPăU"]s<c9K:&[>UUuB>+NZ&N/*(J?#.1=tP<.1.J[Qs;UB8Ut+8v&h0#8#QQI6l-gtfăU"e?)5YvbFIaIFI2azm3A_+n#N$dAV)7*oWd4_yWIB/[9(L-npV8kjRwu:o8YbD?eăU"%P%x8a5No/aJ6qTmU-oh>(faEt=DI6VdjV'^Rzsu.;QjFr.'?cTbh#C+Jaq)cM*ăU"R:'M+kKtezN]*4ahk]pPp1bjO==_dS?46]04;AN4l9,,2>S(JAvXbA>or0r9TBpăU")B(lo7)<,-$6(FC?JX9<s()Z2cgmHjgbJhll+&t[%jV&wt&mHloQzLb*G1O?d-HăU"ME_P*nD-lU1pO<2\;69w;$3ldkBu$?B08S,p8m(la#xR]?0$\Tk<)I/DtndDeI+ăU"aMg8)S-CYtSS\QWN7>,?0oI)l4QmyVGQ*eEU]EvBD\N%*G0J^$29-BR2z*&+2k3ăU"YqwK8[,MIDyd%NbBZ2-J]8h8'<\'8'mD<jup&t*I3,vELGcZz)u>SV&nx5G<2YVăU"eq?2+'u9/'j2On>_*F5xDN8LhmBXofj:1CM_$&%aw[Bd3,c7aVPm[*bo2*R&df[ăU",L9[,3Rd_rPl52QrE8h-RPIlPIyPHjIW=cl+s1EoJwWR91/h^-qH74B[6i&_fZ=ăU"t[3PVDMvllc:g3sh/k*a[D0c.rbevX9NiUF_0Ey&VLr'W.$Q0ocswEpPB/b#B8găU"8L<9^8vtEcUP\5\ZNp[vSgCw<8yUDwQ?6iJQwTEq73IvLb]$%NhQ^eZN27X.FHiăU"[M_kt8FcH\1Z?3IAvXnA>sSjfng,/&w-tt*8rQ2q,fqMe9[Ho01xQ7T^(Sl(E.8ăU"/n1.7lAV%,1F\Qg*AFVjujdjrTiDn4xY6Rx(loX-oanJ81_CFdoY1R6TR#?:725ăU"t.SL$J26].W=K%agQeFr[A,^UIE+Q8isFq<\jBX)u<b6h^Oc,B1nw[Z-(T]*T1uăU"E6]F<Yl/rTmS(vsRF0,uF,a2<D[Ek#[mqNg\$(%7+]Wo9\'w]9i$j=H;1P8v6s]ăU"\+Q.K+sIwx6(#O+&64u4D[j<KbmU?h,<Aw\wtMc3<Y'RoiMA0prbG7HEh[_#,8PăU"cqWulvg'lY(pV#6_BsD<sp*V)0*l_k%(WMqMqH<eqgnrLJUm7;5LGl6XZWb1LK^ăU"(8mVwPJUxIF?(q2\m=1b^AKe[efKcJ#bzJH8[5O6(u;[U3%$+\r=mwMD[lBDJ0XăU"9x\#TkXPsb:koLVH)g=.&onsn[jTa9sIT0tbxNk]jvF;a']mK:J&LH<sOF/qs[-ăU"2(Ym)twJ#Y\=1dX1A,kIeku2Z4eKhv0:aac%HXK_m:hUf742[b-^5IJioOsLXC)ăU"/6cH,$*d?M.C_Gh>.L5PWke'k^QO9%K51yCCK.*3pEIcH5V+LwYydiC+IE#ScAcăU"ssC&^E)f-81wK[&Dxi/PCG<qPt\rf0nXW;p>C:I%*hL>YC;IX7;9*63oDNl0?GVăU";e3qAa/]1%kK>G[7o;I&W(9Ki<gEmaKgQg5*Xt,A8[KqXRhvhwU'*HIgk<HO_8)ăU"yi1lGb0;g9:EFoa1OeM\:K/g,k6e;CP>)dO)P_uVEH3?0MmdW44.u-I%NY&:/r7ăU"2b[gYj#::fGa,yfB]SI<+7UGxat\mx]l)\R'J]6rd<$32szAjSVz&(o1Llh'.,căU"XmZJ[ilUnR#uuV=8hV]v5(YtD4$rIF$)/dP'_\.)]:=;w67JY[]Yb%0xbcLc5^FăU"r]O5$5kh5JC:q5K;q3S2m?ce[u5$LL=K0e+;.K]pVGmmk&X#69?QWY#'6\aT3Q(ăU"nCp:fi[i5t.&*Aks5]Xj)ixa'3(\wESb'J3^L/T,DbJOx,nZKGUeGR1-sx)4K+(ăU"1j6J?Nkh/WuJC.^Yv.Efq[I=Cf;q++.=':F5E>quzFUEt:vZ4)%c#4Q+bU\7mBiăU">m,AlIfpUu9uM3,]LNnd.C^bG7<ue]A=G0L7_Qn+D&U[Ohuxb\I8X#DjGDu3,O.ăU"#TOV5m[nonU-Q4\pJcp5mEfWQ72Et5gfbP77QD:A:49S=ax#9u,V*/zQfqXOfm6ăU"bV_IKrW?x<f901lg?\e<f_[;2u>yLc#hVaKO5]YV>^bDXhr:e;3gesm>#]=?Tg^ăU"0OhTZsaK8r6tP0n#hSliEn,i*&_.fllcF,W.J[GaKrpsIo0,g(im6l.l/PdH[7păU"5Unh7PfG4sU4]=G8LkCTCyke4rmngm2*OT#al*cfLGh86vla&g-3P$>^iAmzA'-ăU"jYszq#p%8cH]Uu1Cf\KfNZy36j-?vd[sg37ri4-^*E0[^&nP68b#,&iCE&UDVQ+ăU"AC'b)0cgtXCG\WJCcJ;rgX>xm<maM>/2l7,oh(+1.j46uT.B.gJL76TJ?<fOrKpăU"^j#RBrKVol)cK=#DYB$:duDzNiVqah;j3[A3#0dL#O)oH2Mv4AcpfLpZ_ThLqSXăU"B&4e2a'[Chgo35AQDlY>Ge=AJ4%g'.XAFc<$^-u'OWM2AGe%-ct1DS$:UAGO\+HăU"M*tWEZ:Xhxn:V<B.,>[]O$g)ZW3N&&-;o,tU.gr2RqGl?nxBDuQyWgo:VG5kQ0*ăU"mce4]=d3K]*UB\gu6-+a:a1Zy7-J?R\<B8*2?ROb7hRHN]ar1sW-?3pV.-axrj=ăU"u;smH$walfUL/9O&AEQ%vvl*Er=q%gMAMDg6$T,sL-2t.Ef<5eYn#>OXfsgc:S'ăU"RGT,)Mt]*3bqsq'VZQ5g#[[4R6CKwP'I&/\xEYNhbG3CTU%1ce),&:B;f+WOHZZăU"/gK&ya2F9vp3#jvBN.l'h7oCa1^v1OJNL3OxkT',-8egH$.iU]Mt;5U<4ufWmn:ăU"hBU[lYj*GM+Mm.:n=OZf2?2-CaaM3dq+dcm/Y^C<*/l&opW8=ZX=Wi_UgPZfd%qăU"LxyK,YiI$](Fnr0tzJLLLAfyiuVeB^gphcU3c:$1m)W8Yj^1kRh\Qsg#zF(NiD:ăU"s1[7n?ud\KCo=xCe1*7B:9'en,GD%c?%5M*BBcgbcnMq3v_V-/%oqhnEPM'Prw=ăU"wwu_jP5>oQgx^&o4_PRhnwG1]kaVDm,roeBKvU#S2]_-AFg.=be^=det$,;Y)'5ăU"hb-'84FC9;$Y?aDJOC#*vWfI[w]%\;]-q;.y2-t$-q$fcM6J\.(N9exu;hZDwE7ăU"eCxYi'7Ae(G9<:RK.L.*refi*X-m:kI\,-*d0*/U#Oi2KSEl[XjB1RQHWD%j[)xăU"ExGl-jzUiL(5Kj8qmt2j,ufoPZ=fTvK0G%wdvqUgL:&O-P:g6eb-I6>TG3lJsp$ăU"bc^Navh9cJ4fKs/%^*HVJOuuZfnfMI4oY?MuuQt+HmNed;0$KlR]cGkVn?*fKi&ăU"a<(2^9I[Lh(j&p$8%=5Xuc9eB>a7uk1bNN?';oUUZ33BcnaFGqf.=,/F;)ed<HdăU"F%64n$_Q[#d^CLgX?4b:T92W,0SZx.?M(4R5NogK>9#I%O<b_6xSEuHh+1=t%C<ăU"myq?qW#$mvM6dS]i5Ym'w\5D2FT9+Ovdc\xo2SpK;:n7h>>ss5xmMop/XoZx>KfăU"LfuM1b2qcXg=M5K-;C5:$W(=gN6xd-E-QWWPcS.r'u<up%()9%%%%-%06/TG#X)ăU"uQ)Q+%%,;&%%%-%%%%urfu#Suh'Yk6t>3N&eJ0gCHQuD+%dRDQDeD42PMcD+R8JăU"$R2j[\EE5R&&Z\%7m-98S);HgI__0*AR5gmgmAXu*HrU;J<$vobynmJ7ki$H_$>ăU"DDDDz&eFz&Fk)dkHE6fy8ZmN01p#2'ht6(,pt-trrjyNNwc4CWuZhHq>XZwtvkNăU"svXcu_\xuuHxuuTXwoY.w^.tMp4Xuvwp8lxPNvoPduZX4xo>uxohxlwhNuo\DxmăU"nvdv#YNu#nuxu$8Hu^T4VN&oFrxxexZxxwQcx7P,fkdd2VAzEdHx0W.lw&MsF,uăU"Y&P%7oNjmi(w_^4nuu0XYXu%%UZ9X7ugpwU82hA&(ZXP&u&>4rqW^P*M#F4wL-tăU",bCjaZu?wlDcFj2&&(zVpNvXsTk^Xob<Dw>mPt;pd)9TJ*J.mjP$jlR\P&yRGNxăU"JrvErpeG^T(uq7kTck>WA5a<^<cC&G#Af$/_NY\NttflNx70duJ-W#OO^<yOji3ăU"?PCckrWvO''[n,Iu3%<Z)ronYu:dNcqdUhBokx2R>QDBi-ApdzIG2Q(/y+S4*WvăU"_Q&SH:zI5CqN.%=k*]y+8dz?\ZDZF?t5j5xAJ]gzWu]K%=JN7KYb&G%S4N:F/_,ăU">vnX8Y(5&G&zt%ZTC%/gOpBmkCnVZ4l4$^NNtMP6%%/-^.vUSPiMe%bn*EcKz4EăU"/Ydi$#6JW1WxCzSU\+yP95syp_&><g*Gx$94W6Pmd<Ckos3hGD>oT.oZOlur^+.ăU"DFQMKh7?,Y]oBOuBXPc&LRz*fqR/TF&+L1[SfdH7vu:Hr+7AeiI-rg]Yu5.(oXzăU"XZlk,&zDlNs[<'XBIqoiZD0BL>Kcd?,m:eH.gZ\A:WLu;4$D-+Ix>ScLjHK_:%hăU"*(EZ.J]).9NdaI:V'w(z6>^OF)*<Z+g23y8kRmGLLjK:GsRiYQ$;&t4*sP[:#T(ăU"-40-IbNTu6X&Bi-E+]F'uMZtS3noiJBi$59W7hi>'6muzF0^X+F<&n#Si.>;HqOăU"dC,7&:C-M\Y3n'P):bUfi.s(i&BG$knc,fdt>rRRQ%<K/GXbw*qA=4=Ygj+,Z-ZăU"%QAK*3,k7W]q?(rhm..(?QBkK9*dKbS5_M6#VK2KcjYsU3:Q^FWL%3ORYfZe#L:ăU"&lx3.iH%YxBkw8K*HgRW<(i'Y4,UBi0>xGdxs%-hj#Z3IA<CUmK<1N\1b>eC2U8ăU"C^kp-F<[J?27]6yA*x$^MrshdP&YwDck8;,4I3mSCG5.&)pJwmCNK&G;M;mr?OQăU"]%YxWP4b:dWl+i]XZ%zf0Z=aUS*EQe0fnpJx3HE[Z+#>tSZnbH0Z=w8>d=ziUA5ăU"MJ/y#d[_oG'MJ/i=%&XLu.&no^\.M[3Ez\AAuw<66Zv%:.S]4O4;TXWv)]1r^A2ăU"k%/]Lj5?;YxTvdZQR]\5P2zR$ZF%IT#3N+2C*QKh;^de3&Z:N^:dRxlD1%8IZ59ăU"GRP&HBTS[T<zJf6PR:qddxhI-09obpZWOoiRGGUZMTk5>*5eK-+.j$&>mc/pVilăU"IRQP.=2GDXZ>nc9b:i+=Se*l(:EbYd4s_P0/JvDj4:<\Pp8AiRXdis3ai5BiCYKăU"4lXZ015/:ni2oXKqW9:W,2;HYIu)^r,mO'#6Uhm&b(u'CbE5+btR]k[HJH0mgU+ăU"^ri^rNj#Paa8vQSQ-m(UAk(>]A[[]:?HbD)iB9*M6_<?(U'W.JkvEsChu=%5v,oăU"E8sZ=+Rk=R4&(G.;DQZ)P[9MflMKdzy(q2L*pGzDM(P/4FTOj:/&-2nH+)<vebuăU"O;8H=.S(k;.e_p)yC:IWM,l%0,(zBO,X__cD])a?KP(O,hv:&5>-j'v*BV8EhcEăU"(']0KGQ(:c/^C'+Cx1i#g1e4'+wjXoPf>P(iLKBDpg:KkJ<Pdf2<Q'3T?(*?V-DăU")hn),fB=dcqXfu%mGf):S[A8nK.L;A]oT8o1qOAMG82-nvk>$C]O,d''v]Qmws_ăU"fYeZ&3(_tC;Mh.h8;=CI[\(BJZR(7onRX03/3j<%MHs3T7ZHBSRyuoA,$?HP<.^ăU">V%0ke;?;'qPQrqU&$Ymkn-zJ*^oaV#BYVv3%*X)]aj3AG6%70&V65)=O=ua%JRăU"k*KDz>p)M,j><tBfqc_/M^qN3:9;b7E\aa%j&_Gs-])2xgcrA&TmhN<tR[QC<Q[ăU"?M2m?mUv,Aif7Wl%-MzIG.KG_<PHqY7:yXU<XWD\'T7-+?Zkfd+v5;4/Vqi1uESăU"IQJO5Q&8)(H2+9>(1K7&L6Ogur-jOaE?7aT_g0mhnC81wAN2y?[Y^XtZ]a*AiCkăU"0qOR$]?:sn18mREeRcbKO;gkY:./sfV_MR)m:X-/hYb[8i7q+n\UZb92+b\^A):ăU"(_Q^ie&w%>m+)kmW'w1FE>$\AFja;A'R_txy-^T5Ybo\(-3ZprKrK&K];*A&y;.ăU"j.Lm5MX_7Eu7>EuluCLLh?)U5w*PM1HSFUCh(UUi/BAL^8W=G$=ijYY[qi\dbJMăU"&1:8J#Ia>HF9YfwqUI58Z>dMR(^KH=(:ukgh:<:F3.HkyJ6lvDT1sd-$eCBOrwSăU"..Ma=bu/5=ux1%TcfFeuF0L:X[X&W0>8BFS/jG5HVWnTa.%aq;Wf8$Nit]vZx&JăU"g&XHPM'$&>2A_jI<?j0845Rhu8&O7fI+#&uLn]3Q$4+6>fhmBZO/=QeJ%f:LCB\ăU"G2n+2gWhw<8NM397sbAibF='E12%pWI.B=uQJPe[,*ECAd%MB8I<aSA:r\xR?h5ăU"^_1GS?+fsZbP<Ix$a=Zd*gs&F6'gr+EP_ZAER5>blK7lZ:HA=KX9.so-ra-+'q.ăU";Pg0o8VLBE+=Frq/%BaU-C>5QK2gscq)j90,u8^+bTY2rqE70Di3J+(udDoG?p1ăU"g)tnORj2SVZM6-Zf=/7J3Hgru87F6/qi'/q9xBRJ'*JHO:WF6i+4S5FPBFoQN<CăU"7y2SNAi+UQg:F4=i#bZR\^i=]/jQK8i).gtr'$trW.oqA=4p;=,#Yj*IL;gKJOiăU"j-k]>C;msCE*K%^:\MqH=]*]^N/vOhE(6a?K9rmhv353_3Vta9+M)i*?,L)k'MhăU")*ecE<F%Sl+OdudBnotLXX$MIL.>st0d+'G)/:4H<RFRv]h+5CY_'7M#(w_1tWQăU"^Pt8lH#]:V:(&)5N>y1LV_h(uIWbgaDmYhQtL.;%bB&YtU[K-*F#8(vUvhO4Xb6ăU"rm4cXnDlAp6tlstK(qRci\_;J'Fl$:X=/VXr0UL_JQ-HOUk0)=f]J(?gY)BbdMDăU"v%N,K>h2m]C9;[ZNc9r&ORaaJA>3R0jhPC13_<4tvPJRObX2LQv2P+]82IvQXn(ăU">+'b_e0D/5w_y>fCE;_qT]K>y>-)c\KfZ^a'^4L(2hSr?)=_NFQ)Hosw<)AIML<ăU";Z36I3s*8aa:h,Bif=C<qM^ku<R^&Ab3,n6('Xs2Ept5P>M]VTVXE&hI)V(S$dVăU"biAoYrmH_6Q.5sQ#xj[)\+*pm#/6/BJfomnE5Sjp52.&rB.wkn&9<vCjkXql_Q3ăU"B)aQk=>QegQGrOf#RBrfd/\Rd1mR$AXKgt&6'LbWur(LZpU1ti:u*GQpM$.R(YfăU"qEl+2sk;s&D1oJKaYnX%f':\Rp.ARcp>l'7b0fFCC'<CBaEyFm49PT,fdt+DAR[ăU"_aDE31pfWOhbI,bV\K>U9^'eEE?/c%eIFr\(X*;Yn:7wQ7SqCjr_?'OgX>TQ,*;ăU"^>1)/87S&Pw8)Fwij/NQ%kf?=dgo.e:o-DW6y+G.K44^33,l(hRd1#J]\w6/HRkăU"B9ME4_g5c)&pZH]CXJLP%ucuN$HwaOF,^V4?-CQRMqCXA)0kJ^CUP?#M?h?AK)[ăU"39st-B+)KFL)O'DEFHZ,,aCf^3I0E2L\8kBC39tF<F1?ldT*kl]d-XWf0M<RvJaăU"U(F-l?A\eAzKyx.m)':[MRW2_yZ3:Z;W,S5R*4X.s_4W6_Zp5-%6H#lvJI3nJesăU"q_b3+';o6ohi/37=/UlUl6k<MYR\a]V/BhR]gcgk<0r>M8cE#mOL&^q>;__YB#răU"oQgp5oSAAOzW_(Yvu/)vw1^JGj4772)k0H;;\kec1vA(o'w9_c[%SU&8TbRs-cHăU"kIO:Yt.aP<+pZ3ha[elUuiuQaf0H=MO4T_r>^m:;-Z5vyf^X?pD%'Iq(qB8:ENWăU";RmWvAbIuIaOoDzL)GeAOsUVUIvTDydR;,K-i>M3SMRMNH)]ZM5L9nI6-p3_+0HăU"(XE=P%cuk*BWD#\lD#B_^\SYbOV5b^+M26.xs3S)aag?&z6I+NEg:rG_m?_.Dh*ăU"GAtlG3/YO1q2y:gX9**:IPc3_?5/PEtGL\/?_]+D%\\<Ca=<V2MQUu'=VK0E\-_ăU"?A3*MUmWeGz][OFMDFd;3$Sh=dSER/?wU/_:q$)tonolPa3*CUz-\p$%>2REMWOăU"[ne0bF+MqYojb6R%c\Eg#s+IsVbul2EBGW0Sbp8nHi\+820mR]&/CY*_Tzfd<->ăU"=jGSiM5e?FXB)U1M9Dz_n&L:ymYrQ%&ERfs/KWM,M#G5Ql$PWMB_(6+(R:LLv(AăU"RafK/t=_7=g_?KQU1jgenqesVXtRXYtB=gS\gZ/In?uVhdCRV&$yTfBf9qa(GqhăU"93=z[f4TCv/VrQ^'2dq/GhDbvaIV5_hMLLRrNDcY7sU>7W&MOAgI32R:D?[5DaeăU"XJ<]RV/34]bv;aL,pV,SZqFOLakMCkmLJ]rC-d]SgBNjQPS)ep\ZE2'],2'Rgt^ăU"4of$lZ]Q-wAyq*4X[<5wPpJME\e7YTmtZ<k^EP#E732Ln[kBi-\XaiE4s4xDCLfăU"s[0\lr[FYAY1Z9:R[aD2C^$vAD==e#7#Vjda'mgi]CbY8kHUkX=-o/_oa'5G6Z0ăU"OT3A24%mgd>(Xd7(Z<t#+F9kG1MEaH]<v]n]1Ta$QwD,)X3WdN^vbh,80Q$R*NvăU"s_*98\>2\B=G.e6V?Ahu4AdeljH+QE3B/[8);]U_[]ET#a%,>)_Lu?:%,ge5H*,ăU"^cr=V:\9BK*>\%Cg6B%i?#BRnM\w2\P>k]U=sH5eSsfggji/Phe;E;5MStK2n^NăU"Dgk=V-O#Kk>?_)7m8^mo1VUEVo2ZNDibPIoYGRBabRDUN[R)$+uRgR//ykBV%.SăU"Hv3TgCNG)9\Jq7&vAL=UU<e3YP)D2[ZZ52\29/B76\if5;R_[nr_Y5$_6'Vq3gaăU"t^KZ7o]vF-a<+E.IaxD]Z-AH(QxhwSyCIh^GlvXMR2_y]YcsrM<?=$[a8kS/tO1ăU"LUn$D64$Yka'M)3b]]kk#\;a0h=r?a#)_AAS:22mX)=EKdt6DvUt^,LDt5U+bn4ăU"]\b1N?b*1nRo1*g?Jk'xMO8#Z;za1y(o_H;eLpJ(:Y5_IHsVJMJ\h*QQ2ktY)A]ăU"UuQ;>n?*1mUUQogf=BbZ:f)A&KhCvi<Vs:]bpu^0<U%Qoo8G0U3&'8P*_eL%h$jăU"DLEDuL</xIVZO*20)pq-3YR3-<?+1B2,:;b+/]-]^:R,r;1F,'g2UHua7=D2M=GăU"',hAE+BvE'i71%/%UeB:,<K=OJlsVdZQTgYfFEIamfE.E&?Pbj:RdRLzM4Mr>kFăU"GKF?[4&YlcW^asm:4Y>goI^JU<#.o/2ZJCo';,WUQ^6zH82%X%PQRfk&LKyUBW-ăU"-OQPcQDu4'\7I')D#l()iE\*b_BMh99ACOrt(jT<6(Shw=d&o/zRNV:;&*u\O'BăU"W&-^%iSyd=IW,Zhr-X*Z+FKpv8?+))L.9jq3%AHo0WuvqUScU7d:o7_Iv04kc'9ăU"m+'NZY53MnNJVBIA_(>aGC%rqK8%pfwxkbBc:k_$C3J=zmqZ_P&,t'$P'b(4+[EăU"'EPe6HbWfP6<o+AS3leMOw[1(ou(j=]CC;8)(+ykh-YCcCQ.;Y/gT_dpL;S$275ăU"EK[F9VlKIalg*^\J9N1Wk*,k)x1JcG?/61EUPhhy3]n?-ecP$\Qf?2MvL+*n,_6ăU":IoueE+bsNu_QO5W??6A\O6q2/E-/Yy1)(WDJVZ?Ibi&ia/:FaVjkB'?Tu'7*yeăU"SyuXx,\oj+(;&)#RCz%)F?q;nbC4N*Rg'4gD*]h-0>hTVOId;L?+Z#rej\<QTaFăU"/*l0O%(qQ:GFKGu;GI&G+c_);A^l?.jR)^#O-t/Pk:=M2>E/6_<x9KRhI0D^DiSăU"*zsER+Sg2K?4teamhFm.y'Up_uf>&ShwT9B0KPXebrM,Fbb[>0*LbRognuZp[<UăU"-PM<I*E0U%eBLJ&O'mX)+2d<f%ge?%<I_o>p(6kv8[P+9BNHb6.bb+l,>E&faDBăU"(ZQqWfQ+785l)%GSB5NJFIh,raX5si[(],HT_Lrb<l[X;T34Kd4*;Q,TS2GvMP;ăU"I^tLA)1;Yp/Xrh$baqCmX+QX0U\(f;BrFKF3a2Hw=Z]u[,crzV_f<y(3&dXr%-IăU"fsetV[>(p871S8E]hV(_T[ePV5$7MMa'kQSIT_/j[qjrl*+lTUETu/VfQS=$uElăU"8F<V?k]_r0/6A$Y)Dk(%mbc[icUdUjj:#O>lVip&D)I^H.HSA/UD3dJe\1^XE6CăU";YWhacS7j-(TASa$$>B+J7No4NaA(RD$GQ_UIAb$Q<(RQ#[b3]Ru[0SGuu'egjbăU"2,/OX0LzE<0p7r8I>Uce-v]o*6Ce.+NA7\Xi'\iu'%AaccZ*-%Li6R+7QS]fX/'ăU"W'P_(F;d,D[pIY\(<H)F%Vii#en%JQZ+bRh4A;U'1/k#2NHJRRrM=DOdR3ATsSTăU"fo:IJVcrT:tpufX$oHSgbMu0fSb-/tR;msDU1A+mKo3NW3E6/-7WN&;6A=eCw]KăU"LpE1A9mG(Acg0P%/nZvYIH_chDwJ:9[1;,Vf[+R:meFqsHYRekA=f2*^M*h4.qIăU"BA\*S8pU:T/-LfW-Z8Ho6j41vus&\$w:bJp%.)5g5,;UE%:PfTQTK:aCV3Wnm(%ăU"G'u7x8Mq:%w?FDN,=4/Awg-E91]M12-oSd[;rJ[=FE^<.p#&*14-YR.g\AoHEAQăU"E1=b4)NA0)ZX7FE-f/b3c$7dt?M;:heZ,nkeJp3?eph3)J29hXK1#oLVqec_TAKăU"l#gAt3<1a[ExPbZpR%5<wxD6^Axg9<u.'v.[,CuK<s[k;b?172kYI3ch40?9q2kăU"gT%(DpRg9uT+F/ihQ8e<.LR(i2REq/W$STnV42<MESN#R,4IGtEf)f5=DbY%A8+ăU"A6t]S#\Zb%?8Lk8S[pvE6V>5D[4QR'Trd0i(rGs<<K>W]5H>fyOl>lN;'.8.:G_ăU"m4yJMo'Y+G(K3C_ylcpLU.:*i0]it04pguT4h9GMxyAKIEMA.I^5l*fgB^kI=][ăU"k^<EA%3cjUU$FAlU\<-D;:$U%oDY+(6*J0;J3e2^,r:E&M/Kb)J;e$3PgX9,_xwăU"1a\xf3U.3)?D[;oy>dE%o7?kM=IDKFkXVd*^&XH=(Do+CT+/D#c%urp<Q0VfyEOăU"^[]4P^TXTl\#]4)2OerWeD40Co*2Y6Q10B\b#uJQ+Bto;q3AbAu*MPO1'=Mnqm^ăU"cfN^wO[C+8>HmmZ<t8]b,tefY)GQ*.T79ORumYmqbYQi-p3.Wt#p[=[RihQ6glTăU"hm+_RV3tFH#7kB3$cNUGHSnU]M;]a#=dEf,do,&vFFYlYe&&Ysq?_4:=6g85qN:ăU"?)QQI5b+TiZs$Id><j)[#H)j&S/zB+]Ey&*Mj9Y+Tv[aV,(Z+5h?U4,F&=?Ugy^ăU"_3S0Hu/#Pa<+&8%&$(^A9-Ma2O/EH3tm4Wu0tL$MmO[j*]K0?39hG7O%\=6FKV+ăU":oNES_niX>%r/R80'<^\y?_a[WwLE)FSmOC.B^;]9YXL_0a;lL*8SD'U]7Y(\X1ăU"&,33Gg#68VM0:DEgFJt)UKW1$xYVuLE$kVxg]]XLf;hvf)*nA1m_ofbYmMFR5dvăU"m_;_Prw6eSih2[tle*:ie>&1^6hYgR8TBK_alq%59gTMh,=DCmS&L+UmB5HK?HYăU"LNp'=/3x%>fd7gNT_RTxG_v,3UyE]gjdwCwGheNJ9Ob$tqnAH[:$NCs%gJ)'bd9ăU"boZhR6:dLmGDGbk3%DUqNGB/4]7k-V[Kn+hY%\bPs7dfbB.'%%ED9E/6b]+7kj\ăU"i^W\]=5HoCO_9]M[][]F,Xe-(d\1m]G6V%&F#eTDjW'P-e9x%M#S;Ch+uCc:I$]ăU"sZt$,vff^KQc,q>-F7)AU0(5Z:H*IzW24+''1jpCf\9,MfO?8VM%Psa1?XRUR.%ăU"wAyD*.uXhaNCad$]>aCjwkL/Pcd.TH]jo##ed0/G3?5[S[bB>'*X3KQfSUSr)l[ăU"&lqsfsLouuC>N[FH_rXE?s2L*LYs,Fb?xCTXBEDSB>='d(e\M%JypVC6H*ziL8RăU"TpOg9oyAhr2o,xDi*+:Ymb&i$Z\Z.ansh,]QJp8EEo+kN[GMgx4y74>veo3),JYăU"<W3L$$=_u^f'<\f<.Oj2vmT[bm0XHf4XEoW4BoZ$][bhms#Efm><Y9ujpLEYg>SăU"U]nfZCL,#IQfLDi$4bifsQ(CaTb?K7S-1'FY]W:)R#Evb(NM]6*%vrj1MR/=;OMăU"[Lh8Kt)Ed8=*']=NKS4e,<$t'Qo:\*'=p9-$nQ[r0mG_mBT]=T5aSW5?gK>Ag%dăEND SUBăSUB V2ăU"0laCI^2(/b\x7mKI5EPfJh;qPeS+thNf16iK6D^UmT?ae:z89C36VT)I$xAmIq&ăU"]2h+pA1,\J*C-ddDyMn^Wo1Beg&V$*2)KS.GEuAvZu+laZu'Gn%_*fo#$kn4_5*ăU"a-oSW7CZt=<e5$bFO&K,BIv&na$1hRVe/A?>eEI40b$5W[$)J.[WJ]owk7k+)u&ăU"(]lJAo'.9f*(R4(Q10DkZ)Sl,0G9[=Y6M?yd.YM_NX7M-['G'H-m;WmfL$TZI>QăU"x18+e^sdbN_<$k.A-i[<<T^=%c5dR,eYSIxJGsRE+wW26]GAoZMImT,nKrIR2UjăU"JER=omsj44g%U\&8OJI&G&&?ikq:#5fKJY_Eq;M3]6[V2JcZ-CMm7?oJQLP2k^măU"Ri.'=o&Jg#OkT0<uTtfu>UYteDflUDfe2q,A<2.Oa-XNi;XB\lHqRBi-Hf<_RBCăU"VGWrRA3nE#=aF\[Ws>)uFL?r2NBZQ7sXZ5%YxaFMVC#cjj>/I*Tt+]p/x:I)z4$ăU"6dZy7AWF$&&,XV[UoW%J7'v/\l__FbvLqYWO0UjNNSJ^2AfnoAr;4FR&0P*/'gvăU"kMgERO.)m'ZeTr.B#/j9M9?TJN3$I]#2opcWLV.8wLY17+JvgjgqDuQ;)GLzu8\ăU"FE.S#Jx0TMm^w\:(F[\8]c-^F)CWcu46ZoA%Fx03?\xj8PWrvqPMeQJKJS-Anf<ăU"(1kzR:gpoY#G\lZOb]Mnu0IBd)QK#[>'l(5O5NFGYztz#9?^-Yz_Vk34]/WM9.$ăU"T^W3;n2[K[-m#l$?]U#K>ieBR/ib06.t$:jqHS%,OghmE/4,2jNK2=7C5;XOyHhăU"BU%C:-\C<TRD4FJFQF8Q^ldR:Ibc4QD^X9nGd9ePd'o'9Q14<ze$X?Jm8ykB1_kăU"OJv#mxQ;Ml/4UBN1it'8\ZYp7cA4[%o.-5ax5S%A%7+uY740JV[[[)<GmX+<J'răU";>UG9IOlu9m$u1ANe[56-:eGQ>IHD%GEf:FiV-L^qV&(RgPE\I[1?(-/.iTV/l$ăU"I=nhAn.96e\FB6C#d^tPL).Bgu%Z+'G1bpO7V\yv$.]:/VJ9OQ2WbsPW<XK&?7.ăU"F%r%H.eb;15#EGT)]cI2ioYW[&hv9VGc[I-gE^$Yn;3;e&2?utzg.i,0(?cq.B(ăU"3>&'Rz%g1[>X5K>]O5Z-u2GxRFEmUiQIP-H\(OI^e6fMg\JXP/\]SL2rA,.U[LRăU"QFXuCR2aFq3^eK$I9gV3]rg%K5Obbf(E-TnQPE095h)1>Bo84qambt<$G8n?&IuăU"&t%1/ul(FXZm(R\a)1%cfc:wkHK><SQbmBCZ,\#Wq8N=-1N5IylSqw*%H(\DcIWăU",3=?Q\vg)58]K-8Wa[Sxe>dn*y203Gv(L7MTZd#jL250G&g%b\Hq;:x'LrZ,9m0ăU"Mf%0^qTumL-b,GYXS3CUjoUzPE\vjj\e5k*SzYj,##*$%4$IE)I')I+,TM,&R:OăU".%lJ1aJgn8&E=IZcH$sjqEki:-9%G),+?g>M1%ApaXjsJTA.gZaEcXHD#rVhPRrăU"mads+;Q3>Z20E.VDA&rHZ:quU.d-T1#wueJbFDV-N\uE6=\.tN<V-R#;J(piFoEăU",8j,m+CawDd(Ja[>t&Id,b/My.dp\5SZfk-pSU&LGWJn2?S?&Q)^,pKPMFpR6O>ăU"AtCbHtKJmH)3N+w,6W$%%+*,EB(#U_+wr3ZYAeTkCYTkPgiA,,[NQlt*>fSRJLTăU"XWYITf+e_*uP<-e%IJ?l\<qs<Y'I>jpR8bA[b6ER],MhTf0)Q;J#0oo4lm)1w+'ăU"SpOQ;?%RgV6^FfjO'>w(k)W?QuBa,SvR27Le5<4g#+V$$+I8IwO0bJF.5g'bIG=ăU"U)cY*X68e>J>3b*g24a>-*C91gCM8T:rG8iGs27y;4JeCR&mFQg5D_#&=:&w)8#ăU"/U><bk1B[T[DWlgGQLAL70<i_VRysSJ[jNi;5oJU4$0A:478\f;(C'-9Emj3B9SăU"'f>,6o/qdD<VkK\%ouF>0XZC7ve(v<YjK+Ghr(9).:HgQ?'A2Zn2qI8:B2ku+S*ăU"aZnS8IOfsd8H;4p,3CQ>\AQj4,/i1Pj$QU);gx/pDjxUE4oNW726;)aqFDT37j(ăU"EagkVZ+_vaH$PZ<ZS1s9WsP2nflTo]6t:h]Xa3AqA]UP&Q*rB'+mci,a$)Y6_RuăU"%/5aZ?(D$QkpKT&MFaSW/TK57NUN==/l?&SNnF-2C7#71#<*4mvq38bBSMR,TAoăU"W_e(s[>G8U</L0V/?BTYui%LHAnrFPC(.6:nOMu&p\b0fTVDWJ3pls)mz/c;GH_ăU"BPpZ]+BW+>P]F5/w4Z*bGh%,vFzd-r/g29E1rJtRQyNPqeeul28CG\]9%#u9l^năU"l*3I&Qq%ZK*9\da^My;T-BmM#Eyxy<SPc1aW:9NAD,j$:%>2\lffFUtJwvr6TgLăU",t?wf0O-gDP:p<j'0,OgGV:K_X?tRP8*3oVz/)S[9aa<W?1H+4H5>)Tym'SGC<CăU"Gh9c)N9v.PY,5BFRBe2xEJqG6C[/PVTFp;&CaEYAi\9W)c;rI>_y[XyaWMu#W,păU">bTlDHW/4=[#U'((UegyVgUw[Z68\Ei]/C/,qwYY[>JmGk42Z?\U1pU)7cF*C3TăU"<&4qCCXUoDc3':I.ua>6-=72kfF#zil8Y]aa4ETF+)83JEq-w2G_V's;g<VC0%iăU"g,/D-WoDK(D4d)CaoPQo46:B3\_Pi0nN-p;LjO,BnrxL([y2_-2Ue)Sv*3O1SedăU">BVfi737)xbNh>_(g_db6KU/\r8J3Y%b;R1+A]ZqM30;TzKglTAGcvn7^2<I)8qăU"j&Fa>56.(+j)UC,/dKT]G)FuVT9n1kYZ_)JX_$t<=>=;Y8A[Ysrdr6GI<iM>EShăU"/d;%,-2V7[2sHRm%oJ;1tbLl+l)O(<^r$+W4j98dTE7Y7Vfw<78cS3A'1vY'StVăU"*fBK3D0JY=CE[SIx95E6O2lIelp-vfQy?oj[lcw<4e)LJ1#Rg#*,#%no4D8Yjd.ăU"6#U%ND6uT=rI-N:Uwn<io<$cV*PtRCn5g()%u*g'sA$wEcC/lE$7BLa%5&<)W#QăU"$gA\ARV+y4<:$Eh$CEGtnju+G_0%y6vJDSqZPI,^M<1bvM0r5Y(([FPgW4Ar4a0ăU"Om&%FBcI$&<j98uV'1b+;sZ=M_Han9o=n6'9d6)'B&=$DfW(JLb<7Hi7#Hs?f*,ăU"%#?#mRg';pdOn3rj/]ZE&OvWPm&;dT88$\SGc;.EWqmIKGC#c--1\cnrgKm*9t-ăU"YctsOW**9dmnR-2A-CO_-$4BQ^9)Z#r>?Oe+N-gV%>AGI<iaCQ/gH]Otzr>'F10ăU"_GyI$U7Bo%E?RQGm)C2F&G[0JPCh(.rrbBqhM9FdwzPECspNG9_<AbCS,+bS.(-ăU"Qt^6p7X.T#FjcoFUQVevFMBFa^4&gEN:]yfO/l20$Y_Aj2\V4V$oXCM/R;A+;$CăU"Zh1VYtv?q=1*Zf?iSY^]*kl/e:6w::oN)\7;Y?Wfco/bXiWgf**5-#.>F_Lf4*FăU"-gSLD],Y*7Re,4Q7wJ[7SD%PVWgreljtU,pV8AHL29Fb$5FVl9ZT4=Eod2Jx-.DăU"Tlh6BxSD1m:7.)8;S<#\BEC^&Eb'm.?BB&z#p.RFNidw1?5IFWQBU*;eK75A4)&ăU")1kF%b7:\bz)r[(,V9:g,K6H<,K*PXF,3X+q1-T322FdWjn3Jen6p4):n=F&M=EăU"G%/EhnI6gHE\ec<+%8qsgChSrm$^Bxe0Cs/i%Xqg.g5,OA2#7k[eo#qaN_X_UZrăU"18xa4KBdrG0/XFQG<_'l<H#6n#sI9_I$5BN'eJa:qomn6%agqMIPVYj8xh=&ZVtăU"5b4Fc%k]Eal)a*0q-v\:X[fKZI<'t'_oc(:7[:X-C4Be=KYGKr>.D&,G=p5,nJ,ăU"JjS=z;zY^i-M6]2oq_e;nrO)<f1<,OcxiW^D8G(>%[oP6Xo(X;0BiNF]ci4AdSeăU"B\>6,HdR)0e%]3V6nsJhnLJxW,Jox?VtM8bl-Ltdi-Vdk,8En]^pT6kGw;%*0^BăU"zVb]nw5c013JJpbujJa$*)/nAmc)AF(^)Co8]QiJ)Yo7S?M:t>;j.o8:Icz5:(VăU"k-RFS[sp/5(6OF/9e^.AbMGCGs(qq4Dn3ta]#M3$0n)uoR6H$g6dph.K=pmBqNXăU"DDAhHWZjMpmqYaIMqXy:+<c]]cZk^'/wg]--K;73QVIIQ##;Nu+F-:)hbF3lqm%ăU"W#QSuBo0ad9WV07ZvEv$:ybBQAWIpX\=.MXdC$>mjk%)olHc6$c4lxrLpcru<gSăU"B=dL;N^wM*3$W2R]:wwoE0$G/y#3L;]#1)Fx.R+pr/X=i1YZg1'O]3(2B:rJXpgăU"3c?kL&W9DHCMSXe,ahaBt\nNxn5FS]YAPyVvX3qwv#3BSws7Zu>.pT.f0RBh9>iăU"5vf]9mrW]4tb3jTURUs<o24*xhPjBr3fiRQ;RZE6GF'dQeU/-+kr7S9/Kg:ur*1ăU"Mb4VWPpITX;/).;s531.BIuwX)b<g2&3NcRp1*IZXKEtE$hN/:]vi.L;cwirqs0ăU"hVB/G_FoXcx[TlT7J[%pr:K2$O59;K'fVxFb1DP:s_&9QuNMk#doeH%B;)4;THoăU"$I+gN11t\]h9?O(rT2q:xQEjh/;iBI_*<aJBe/*<6E6w8fbthK[woheo^Jf?_d)ăU"s/8S/H[Y(YpjjwPxUWHYO'J-Tz$V<ks(\>Nb52&/<F'RaRl5l_k=sM_MrF&(=?GăU"XmIUB#;^i2gCoKdsU=%3dHaWn.Jw1Qq:u:&S75WTH7bYmP(3sxY?.Q*=lO^-=#:ăU"dBgirF1T0E_%DtMY*9oM-=_-2c5kjg2PLhaN=&OBTp0Q=]8Dz#7c=DEL0%XMhY$ăU"0o\Wkv<l'9%RFW'\97)_cgX:ThD(<+/Qg[/:9Jp&&gKW?n-bpjRd'OcS&(29O=qăU"0xF)>$)okn'Y#,7jk26k/RJ0*VVNMopjo:2fZ.b]-TBedVeYSeI<WWr1H\Nfd*2ăU"-ELvsqXzB+K_>Ym4dNgs1>63\mSFDi5d]srKf*r2e\d88h#QM&TKZa2-_.w211wăU"xOsY/evrOZB;B:#:3Hd6=;J%)1QG(xK0*4&,d$,nUjQ#EW,4jbuPQ3ePq'D1nv0ăU"7//?gAWYg*7Qj#ge0\qsJu2p,PX5;9)x%>V)(uZ7ID</LSF=0t-L<56LwOD#OmfăU"4]l5BRDq6+[?Sk_UQswi/^mP^#>4w#=kDR2LqN0#q#%nVb]ZT4]$S^c72en%p4*ăU"xTLeTxzo$HtS,gK'yT$LP4c&RVR6OJ-_I0H:V-#IX$KQ]11\5qS4FY,>vYo%IS1ăU"*4GCWUTE*CG)&'k$CQueO<4nSzc4Kl*BY:6];[dkn1MTEX'&SG1Cyxm?9dRRKsAăU"g\4fIFQro$eqisppNP9gvg#A115tFntY7#wN?(\TETLolqNe:.pU,2cp^N5c?jFăU"B-s60Qk_o->D#Sh$xpU)GA.y3^=K)Kmy6TOosi4;XCt,]#eZKWge$/(J'8Xb%e>ăU"9gfo7kip?#7j3_*xK+fuI;tJi^<B(C'vpb)u?YOlDV*=8*z#Wxhi'v+pI25pq</ăU"PaEi4E0T6+4pj%$KeO[:*:^/qJN(g51f;4;4<Qigumer/*M,P,=7hDJm=HvFKpiăU"WoJ],$dQS/U<3LHc0%#?u(*[V[J+zLCd0=xD\^1=b)\W*4O1/9^tMq_d4lodbJSăU"O\yKuQ_7gq/7'4N?.9XUS:LnJH?Nq+&+b#'k0L1sD*]7$UV*%u'5:/Jiw+XEkLsăU"hhB&WKB;>36LwjEqA_C^&Grhi:^QAJPmAt[O5:+d5iVedm'G%N+bqw-tNu_JHPgăU"Pxs52S6_cA/ib_15Wf2Xv<b[]UZlfSUUV[8DA9;hWWJpb-q,24BRA+5mj/x1KA8ăU"nzw:#c:?<W3TXT^jT&oA)kYA+1q5'Mh42_8T_[=7?RHNaV4m;7.6iR7+eYh0WN.ăU")nlcuCGLvPoZ,(Ye14_kn&Jjg:W3&'?-ax'[;6':DRb7Jp)O64u9Jgau</taYaLăU"Z-+:R]-/Z6+cyAOSxr6&]OsR0W-3%b'(+cCFd=MmX_Eo'u5QaA[*:1bbQhVV[Y=ăU"5UcPS2gQr0o;O8w9n\o-N3R#ulae]u$(w$/3E-/,UcqT.SQspvU)CEz%60vG>TTăU"&E+Up#p:;j%-W&%Ii$5myYLpO('%TNGxPkQymX$C86#sc#$6Bj=->h6p&NBt/dgăU"ujLvKaD3dHoIb/<^?hx+&tU510zF%E\Yup$jqVIk%%o'?P3BA0<Ek3nJF1Ln8m9ăU"Ic.f/062dHp+rbcBarKgL&,44vS*_U::27VjY7%U8A$xXg^dU51o&%fM0,jtf/6ăU";pVdc-)-smts8Cm6*3Wox+8#)d;Li(xPt#7YK/6#IdkpxQW/RfhOoaWAUgI:;CjăU"Um>0dXE\wGe2(>>AH1=z6o?UwD3;gtoAk.\:YxBOV_<Sk#GxmGg1hy5:73kZG(\ăU"dMilWPv7f?kw5/qT%,[TZN^U%dM8'AT.U=>)i7-6H4]vZWVQ\>5S5tIk+1JDK/OăU"w;Ve7IOkwe/h3BD?n3P*&I1=\i6Lx[+UIJmd,on)rNqNDa-k3mV'IDk'T,,V7[YăU"_g8[#tLx7:%)2BlA#nd#n+-IUJ]bFW'WEtAg_\dE\gr\Q_m?atfgszy;i?J1s$.ăU"xO.ttY-6_da-:pbf3S5D-_C[,<n=YOgJNa2Y=Yeo\HS0#DMup%FvS;4uL%&vc0>ăU".)$T;R2wYu5HPuPc:_G-'iQ.sH1IFz/HA*kV:Fn-F4qG^tWv\vRc&TGFN/LT*fxăU"9#9oDx;B/$*;,.vA#Hajx$Xd)>q95)TXV8t)J\6AJx#:[9l5RU4G#azdX\udJQHăU")RJ7b]F:O=jZ:p1j;9G128$f]*#9r0xB*v5>7WQ77deZdGx>sWNOeT\WQi.]V$GăU"+[z6>U[Rj[A4rIo]_5eeOCM3Zhr#$NjrG4VFo[/A],=e?:&P*?NI%$'1e_OQeD>ăU"I#q&iPEPg]j_V.Kdq%H3jX3#A&*37#\acUMUehE8\q<^G\#.r&.9?dLCohlG1uTăU"*+,.[N)N^mO%;csf=I&?=62IBN/2^pn2&mPdI.C?_k(Qb^wa1b7m&VPKxTCuPL]ăU"h4(Nd1:$ZHb<Dt\t=-J\ugBH[yFZ73?t<Ai[R_\<BfNVKSW8ARWVJ)/[#5<$m'WăU")1ZrTCs2Ah8+bSTe6\)-E-gCF>4Mqe$#pUf2%3HbuA]Y6S+HhQ1r741iuUY))K(ăU"6/gj]q8p^Uif^XpP-Ynq-aYT8&RG\lMTS3VCfMR/aWNu1%E')8%*OS0(_3CvY/6ăU"*+\7y(=_]#g^$.C)'FJPyTrMak]EHtVe^Hc,X-nn0B8tT6Cf4&PiG9'.nS,x('UăU"[c#o961X>JHtv'v)6/Fl?'nc8mZX+,+OP_zH(LRH%?G-A;(SYu2_2N7KYwt857#ăU";)g2V'=JXi3['gvqE22#RWY,aWNNp<]P)=S.<XGT21M\Y;3$tb&VV9p,4/pb3d+ăU"l#?$cW65I)t*%6XBg$z6(^r?VlmjWY*?Qo9aoZ2&VJ#35a*>rmS65<GQpQDnV.PăU".Y1xd,L;?S6bQpuGlodw6#'e1Rq3eiGguoqp/[Ok-Ctu-FZhSGddbS%'&Y2HGh3ăU"5zWYmnnC7b3Ij,Kn?JYcjJV<Z8LNaeV:CV*m2YB&5lKN\0X7kDQ]S&Q#V3gEG20ăU"s&B]R9lT79U0OIf&LLY#&15eT/TNfb9sNNEff8xB4LAb2[%nM(F0Y:76IGnvlPrăU"w?0('W$[K=0%(9o0(3lW^\bP/[4u#Y2cL7CDINO-LRj:iDborTOH9e)4\Nb]cAkăU"b&+i^bS>BXnNXOnv&BH*ZxTpp*y<iV2p;P7'>;dmvFi:*t$VzDMrF5'$t<%UOWlăU"u\cGe\e[^E=mQjA4L(n?kh^giHA\dh'r<4siTQsV-a/liD+-\(c\=N%][Ke6YK'ăU"7O78q-YPk0=tjLtP*[Bsh9G-mv\si>OtmC'G=qM2cvAN9_q+b484o6BOB/D>J6măU"KqJTv&t,12jG7EWDTX$=AiY[7Hma8d2w^F/QMPdq'dSf\j7J#;%zmRz:5S[$QE0ăU"1BT:/s2s\lw$9MD+99x-ShITQcAO&\68(RF$IUP0GD1JQK[AsP-JAJ%7F\F/IDLăU"(jhm^QOA]'6]J5K:CK]X'oK,(fR-4;-^^Pse-oq3=PnHP[D07JnAGybOi<U6[qhăU"(G)CU]4vHrYlqsz(o$D*PqVIGI3G[4tCfR\-<4=:(D.W92CgV*WIrwp=oW30WMeăU"'7.ANtT>,r#B^t)=M<9p)([[8>K[4X_3jYS'Lvf*T,=rJ)b?*F02]Wo:R_,MbG#ăU";/0%Jp'L8YVPkroLdcO0rU&BP*B&sF[G;-'UiL(2Qfmd/erTo/Z\q$72741cE+XăU"\1(/p7sIb/R24)L\ROb6+o2<>JGiei1r,hF+bh%,<7[/bv8f?w_.ONA_dG(=^+kăU"'?+&JiA*uq^F:e7JZsoAhK2Sn3?Yu[Vq9M2z4z[/95dP.haLuWo8$n%T%Y%?=V#ăU"w,p&n&MyG\#0IwSS$Uf=jMtj?4uZ:TZS#e?67V$V]9V?3N,#MZY/akX:2P4Os6&ăU"S2*jd=ult2YW$g5wOGOdiWS=48Cc5s:u_E-wi2FE]skR'FEc&$Uq;7yX9.>\p;7ăU";3GA%/n,qLqZheM#:wYE/rBnX<9iAwh_TV(3bX^6D0*,fhJCB.GTR'6c)LNN%a>ăU"+0)V]iGCbJc[Ls-H;e[<i.=)rr<O=X#mQiILh4H#wEAa;Rw&$#D\0)AFj<^mBs%ăU"tO.bmet-FK::$U'K8fY:sFA2L,S8w(-DvuPqH7#-%5GaGO5)nN3LwXPGpG.A>&EăU"w;ZxEO.V2C=QCm/qnT>enfK>;I#GLLgK8KWV)Z0QIM;'bO+,7xy'W:28$Gn0DaQăU"*qXT2:IcHB%np\hmyT0J&j4b<o'+<QRIhb;<RE1zh9bKUtFe6bBby2/vm2dv%'AăU"HN[1LqVQ>*iI;^,kpD&-oF7pZ)=N55g_\g8GtpnFU;dp#NI-OWMHX,ZKSprShYrăU",MoW+W'.rT+F(TK1Ho,vV+$v&MrA'ucrJ+tyx=sx(6ZKT$)4/^.EqipZ#8Lvd5+ăU"$oAMqq[<DcDSo3G$'hssU2jZrhNwVm<CNJG6%Hw]<5LWR-o5)py130W8NXmS,*tăU"3%*=5sDeCI_,\ksKOTl;9R3\J4gw?Ksb>.CS:,7Up0.9jj/;;GkK.Rrpo/%.J$;ăU"]iQTn]&tCr=Z-lZ[F3&$9;*jcoFv[b4BsLTA)5_0R1a=wv6:>;M-R,V*Cx2hbT7ăU"^50GQuaS-7XR.JpnW4;kNBn<K\e.6)6=>ys[koq1W:(F76:FFcnT\UC0miVCAb>ăU"6Ut%YmEkkg.Sks&*%%(C_?E#J;e;EQs]*qqHGdKkWBu6hht4%fb93TJ+KqJ,fatăU"QgGi$?SU-N-/l=eR:Zp%G]c8AY\KCnyRFtC_Xqh?/o:(6+CAb6N%i4u-k.UgP==ăU"kb?9u^h9%qGSCFOv*t3OJJY0B#%LZS_4'T*AI,.*A:\JHcZD:jk&%'6>^cEN5g\ăU"-^7TpWZ07>aOn,VNP0$W&-kaP;Ua;#OV)HQGzs,E(l=^ZYcn_Nl6jATetODII*[ăU"Jg2Y_uCuX/B'(czN,IN9S[V?g&wVKk(g_5-E?O5eCE0xo'+NR-E-4ox&'MR;t8băU"W/o'3pWhJ>L#E6.gOX'V&zhEwDh?Vxla?$v7)QtxdelwS?ha^h^h?R$2N^:kgo<ăU"_d_&D8-[lE4h#D94YAN6fM[OS9pP+rDH9=bm4Blnx-RWbb8<upj8_f/0uI=C=63ăU"N+UVa#g+6e-5P\]JNo+1>g;EB22=+yt&vns40.q(wSR/hS[tTir5U3Sv_2k*>)7ăU"+kNMxt3&7?+$Q_vxJ&fCSbV->tTvaMcSPH--rbP$4?jo4HUB6W+u^\#4F3U7>Q0ăU"8/TVkSZF3LVJ(:De8mdZ3RAUTHE\pT.J8l2/z?NcU2y/xIofw#0T+yV,Sq'<4VeăU"Rco]VQa2Cz\4Zu8sHU?V;&l'[m;*R5_FUe3lJI^8-mhFF%*p%bilqgaAhDGFDvAăU"?V<]1zT*^/tojgE>Ssroos>-RVleg;;A%Qi&'=R\Rz*vq;dF=A,5w^KZ/I2#r:/ăU"=HcKTOB,qp8sZNsspw\PAdOdaLsoU+JS0Ums,-G?A5l?oHTPp1n;o4Ab4<RM'3/ăU"j;9QPqQ&^-1PW0RluA$1Ah2taIANt-n0UC[\AlW.EFYGp7elVT(aBV#<P_8nUfvăU")1[:XQobSe+07Opt[Z?JSxXg;9IQ'O<i<fHW1PU(bYCI,/hhe9#IX>d(xeTY+NYăU"yhTl\U3GbZCy&H1&KPg]9XnH]FUA9b&xN;TJFMfFQkM5u&s>z?Nt(FeE3H<EDibăU"bUR:)c\%Q/X0z^*15J0S\g[y6]7l];BRZ/axTfOBmz.Zd]2aiBMJ*G9k2S0(7BUăU"NQ/eCXlL.b]2K8W8tqd4f8E3j,qS/w_Hk?1t\EeFm,Tc)f;9]C-c*&QrTijBVlHăU"clb><O(l)=khm&l'eB];C0i4g\[nLF(u%3%Xy)UT*)z2uk%JAX.bMMAAAcP)Sh0ăU"q_qR[\,?B\tQ'?<X42=h0,*T%B:2IpQRq*H-Xb5:%7^C+E;<h0FPJWG3J%dyAa\ăU"rQeRoI4/:b)Vf:eVd^qfR-5usC(S<k.?d0okNB*srs'1;kNI7A\4;69_ramVag;ăU"BdvA+ks2j5Qe#n3fqZTp_d4dUq?UEbqa'])eXdo3G,f;.U3,K\_+15cd?6Wd-R4ăU"#5\]d;DocPm9MqED*R73kt_Y^AoXMF]%)z$zDO6E,Lj3bs>f%1Y++&QI]Wk>9PfăU",=m;5%K_h&y%(r_U.L<?bXn>R+#[eF4sR;MVS7]\9t>ZmhaV']a]0N[[:bG&R;făU"RAe3AXs6P\udGKkdSx'1K0j=0Ek>XsVeb*FWVrnoaf.YOYGbcw2dRoRp9lKl85&ăU"*nmP*v>JD16,S'\>a\C8A%[.[KD)zo$oi5Hz2>?6xOTT)>s>k4r;tNdTsiLQQ,7ăU"ZaT.jB;lTF\ABj4K/u[JSbpW4+A<O>I$;]cdgW.%1Hy'aY&Q,FKiHA<O7%*2ysaăU"DDc$kjIN>nI0$+8UA'ngQ+lIK95z0ifV#RU,+KgI^G7_r_fNRL0+_A1JeFtD5EcăU"N>2^o6(<\QhW2orf*FC62i%_lq.Mh#+F.q<vQSieU+0XG8E'_4$Wr>q=mVMr0v3ăU"^*)0NjM#3&8bL2.;^9n?^R+$mF>/_29FJOANg+8,727;3tt8R8FZ0Z-U4$Zub,BăU"a9q,I)=Y*b/H8s_gQ)p%^XILn7S(mqss*l71rOWg+vHF/Ld]-2oCl&=nPN7K2hFăU"baIbV%]&ec>_+>PuC$DpP#Xa'])gfi_EZ2Ip7Buef&j5Zg?u5<iVVYl\D,bT2L(ăU",=Lk.l_K<Xid5.<.1e:3k%IZraPG&g?DgR6fX[NMO1J69x]C&ynJXTW\0X?89A1ăU"?o0l<Mqe1A3Yp,L?:lKt;k%J-L.6/+VjX0Xrc+-8XD]BaMW>VJp#>.5T'mk%>ZsăU")FX<XrGS->^J?V''ig(2;#DwagPMH[TssJ=(FClU,2^]I[mk)F9%W]OFLU.L\ypăU"Dd&8ZQSPLC1;<)xSnJSe$W\[#P+7xkgyn=Sit*A[Xa+(It>l2dBMqLQf>h.8)$]ăU")Xgru9C8bC9m)U%MM9jBtKF(csKu7BR12/A9nw.3BoW]%Bzxg3]a_1C.tv_k^/CăU"&a:W3(J0x6\ZkKVi+F-5#%vqu2L#TQq/,uGY#Te2Y'cwG?m5M]AQ.w9N(zhLlmNăU"FaQ*4JMtCizYwdINl,gU.t_s>L2to\V(G8\kTV'auI1<PcM3S;ynnK;w7[CA7==ăU"TdG%tS2eQFX#A,<Kv-jMNO;vG&GN6NHPkg<AI?h=eN]?IDZp-*h'S_9%=\aJ1H3ăU"Bgo%>CJlR?$%G.c0wW8ic)H/%j''TnACdqMFUr,]K7=+l#gp+voN/B%tn\zcg/aăU"pX[k\3nAvs4aB;HM]f6GK6g]*FXHO<Y-84'PNe(O.8BHW=\C/Hdu:fbJUH\m-qhăU"lPJpG2&7P2C9j+Po]fwG_;bS1uRuWaEPh5hC]SaG2pWu$I,X:dOJIo.]6A1gZQUăU"q$Wc5R+&3'iWY'<R>RD$HM#JcEaE*gq\+:l08h-[b3+/1=SP<udZ/3]*V'K*/?ZăU"R-^/6BhCfw1b\t:d;Wl_NC)&a^6>wH<xWA.G00YfRfpW.faT'1nZI>l*TEno3fEăU"bquh5_KAv?Mv5_%o8^pe.l,S)$gLnqcE.oqJ74xwOd7-^rh6jk?-s_$:H5jvMhoăU"$_XfEkt]1[8(.0ME\fW65cw)hK6k=iFzx/Pa=KHeK.E-N<[Rb,gmFqKihc&V9,&ăU"9O&sw*)Box'4$;z:4)/p-1.mB;5p$XG3-7X$sbj,WKq.U+\O;VabTS^[2[PlqU+ăU"jqE$?WH+Y]TZ\L8%:kL&\dq,(L[d<TcF)^hSIgoiLa\qa$l_eV)%dpo1Zu(;P;FăU"PiZ1T1%l26($7[rlB*j'C>;t'[p(ik+PB.68$Apzm85]gR0G*mluwGY#-h(ycP>ăU"MnF7KsOhEUncRvytNL=(7E8O^7xJO,hWC<0OeDE[]xcT%YX*1x9Gga2T=,ZIm.(ăU"[9-$raT3'0AY.n2d\)8*TJ-Te:R/IuVR_2sy^:D?W)H6rB=Y9pJ0x>GPPC+?ql=ăU")sVXG_.jn+]-\;NQLe9WzBKp(<Vb_?VPOs7s\TzJM%H^y*nDC'$D?pW8MfLqbTPăU"*t\4WMr=[E-GA$Dqf4ekFuGDvQ6ak^'V)21=Rf*RHf2\a<Yc<VT1[B#rC=KhCQrăEND SUBăSUB V3ăU"GpMG;$-<fE.-=(EDlX>nBk.OfY5*-cJn)aeToYq7rJxi-4B8Vh7sOA./>b4'8f(ăU"2*p8WNE]?#ONRI2p/'$KuMrlT17Kq9%S>04Rn?BGT:0QSZ5?EZv<_JA7oY+)tKOăU"T)u<Pmqkjk+[SAr;-IS+N;sw5#khb%'7pGHZ/Q(k#&vAd):XwB;%Qg17WISaF;WăU"\SV19=Q-ol8B:1;\If#;'9=jjhNr?RK?1FITpIP[<ZfFoTYZ9ET43[?<SGg9Yj6ăU"04l-23J#*AY8-SnT>lS-8=B0D/Ug;ufjO.Xxap-c[nQ%'>CM.y/p.(\tf8aR'Y.ăU"0BQesGB5%\+-Hn4g(pG<K+J9le?E?hEP<Ec4R10g(p=M;0;0IUW]#RFnJ'lgDCXăU":VK[5V8<Ph$t[?kp5]AGt\p+0-PO';sm.9lF.lVF_VhUWuO^iB=e#yM%<*ILfR9ăU">.N2'2BHu[fJ+O5Xu3^IqLM??j6;%gz[?nKPJ3-;8hXC'AtSuYrVZ\cgueU$Cl$ăU";BoR3kMk\sx$EYpo'DJBx\D>jC,hKVd+^mqIV[PrL_<Yi\];PW<;lfjoduqg<6ZăU"w%HZ*,50HZ13RB))#e>psbXabjj:/U5U<:Nnli/J]B-#Di=]?1r43I0kCv9X60,ăU"#[XawtFd6U]tO6hMeeXnM60'>kqW*V,vT7?C-QP4My_*0gI,E+TYPQF\:uGI.AFăU"S6[H..B3A4;\?bP')]a4kx,k25h2qnm6(Z&LQpvSFi,]1K3XAeAE+;H0$qF3TVPăU"%8T'go-Vhh8D$6d-5Di5%IGU?ShnXu->R\H2bfsJUYv6_Brm2poX-(7=5jzH^l4ăU";W&8/AAs\+'u.c?jfloOs&(VFH[8dYYYU4^'qM+dGmaPYmT63X<cD04eQiTB9:1ăU"=jK$8#h9UjEKM#F,T*8iwA*KlhX5em^%qCLu_1(uIAsRN%PvdXDOc'4/Z$>tuWKăU"\HVJ=Ev)h>Ml7T<ksU+\j-,#Bc_HP<7whv6aZ37^b=L^wlUFMDij<*Z#1[l+cQ)ăU"V%5.$Tf7Rr:A9A72)$LA7Ft_<'%?\G35-;RXtB6+K[G7iZcb\b6s/TosG<:YOrrăU";&iS:05McN?tiTBKOd\3_<uH#=ZRy=L^K<,_GxdF(=,5Y$MrKu,TS0^J;3$FiRrăU"mN1=x.6,CvMG2AJl#xW]YBuqx;EZmb52p-sQmo;#PIy76#1%$bLNS1/8p?\5I%AăU"vKH<7'4FC)xY<r)8[9fH5A'_nF/vjqa&tLZqNR9T9G.'$CdL;O=0F,.8Se[xAsVăU"?(mDz<r)]p>M1PqDZWsy7'*h9,c>M1)wshl\;y<Isz^fe,6^wp6_nD+;9s?]Ia=ăU")HVrQ9MGTBa8do>%W#>']\D[h>g/WJw95'B^_9\85aJ=PNB/6x4GHap_E#,Kag,ăU"?MBlN^(9D^+-v(^QQ=L7A8obo;$)crkwIGQ>G0E?qW%b/]#\OembPIGyJA=*)8qăU"hsR?jt[v)NN#oBA#]MCTN37fu7e;Q_F^4UT6KERF7uIB[%cld\qq\j[?>;<?%>dăU"jdWIAc>9,cS]w$geUj9?X_^%PK)Y#YgGK2+XAqIF+uDuWoXd,gQn)7(i;\N=4PYăU"0Q7AmGs4)RED\lE*0h_q)hu*J5ahx_p9PIv[.KRSuH9Z'oT5P(S*DOTZnR3kaI\ăU"<ePq$pJ.A_j:&i4r80)h8L>KN=F9=8OVqmyh=7da;a$4qW)nEuHRDBR=<:JQhmbăU"pc6fYE%)dASFT&iDKp0PKoMP4LnUyH7ET.<*Kn?]8;\l_-7-wj*0GFG9u*y#(zjăU"#ps/(O3Fj*GuRBCq=WB=v3?':q'b>Q1amGi(tC=PM&qSEJaFqnd-imN*GCUb:[xăU"'v?15*^tBa=J,)P84]q=.;6DFW7/h;%IIb[<J.A6;fGD+JkOKp4z%Gu,34c+$L+ăU"D$'cle?dUjS[9>(5FA(P0/W%AM4L_d4?3u?+&-URA:6MKa'a[YV#zCJ(+l+bNgvăU"XT(u5&f^G'-?U'k]A+u2?Oc6_10#[dX*F#OAR[v1Mx7RnndJl[jD$E'ognn<LR_ăU"Hz7F%8T$Hf-g?_=lfEVO1'k't?[GY/D8=Z'Bz1e8tXA,8-seS1LI0#j8:#*OL>oăU"FfR/93t*fO]\:bG&Uck+.JmVA+#;s4%Jbu4(TF34__MWNbUm<Z_&ENmVH3sgV]%ăU"]K>'_)$6Teo#;0ZHqY,rR>E&zfjs_h9YH,3V*y+,swA8C5NSM(DwFCe#8yu*S(CăU"V%U^1IJexfDY7tqe0'6F%Q6Bo'#Qq_QGxGRIen<ITTJ9aVk7'wI/[wuOyP;/#n^ăU"=l\x_c/#PvCI1QJn;Y7J6$cfao_NLugU&3u55X.3\y?1K(=>O:<>(hjp)oltE>SăU"UeCkD1^kI[Ah9n;cgE+G*dub'SM3kXUw>UW+'O9&9n;I[JBYUO.NKk\4CsN)1_1ăU"#(WLkG\Is%V&#czI#Q3pqC93j#$^AYn9[Wb\2]F8)o:sn0?r_Z^0?gY>;nc5qG3ăU"Z\oJtw%ZPukF'O-UG[7SCwwi<%0I,Q-nXskiwr&p)Hy9jmta$j(i(B#FX:B[fT_ăU"7FFFSG,<:?pO$c9'x5sLHwu7l%YGP;7gbVH9o1vYA0_jjT8FNU7[N3BUh''h\G3ăU"=2kY\t(]#)r8:*j^lPoGGo>\?6H&EW#wctN>B)-nPfFiT$zC]J39)rBrT5?A-?=ăU"BYh(aq=w_g-PS?->qJgEDx3&mGz[-[vT&em3^_%BNZLc_Ys=eJ*zX1%ZyXsG5MKăU"w#Yhpb):;DJ%]:H#,e<0-)]e(yQ\%Jh%km$G,Rje<GbTZCHD;wIZCLvaUHqO*qFăU"R=3AS^Vx.Lqk5oCLDh2]wHVXqPGt&J,o^<94=W5;^W1n6p-&uCaNiH/vuAth%n)ăU"hV2.b9ZfLDoGgRBLVrEB,QG^SFq$AH*+v<<0Ll5-on;qr*lokX>T/\Y18QzQc9[ăU"i%60a)z]4K&YZ?3%y*[S'2RBO50JL.Anrrs)USleE;*eT>J;X[iBtYs;mO]L(YtăU"[D_$jTAo4P0J#_o];#L5QeONgL#Oq&v+HE3tMZ#mg?cj#yvQH1z2O/Gsn#8m^f3ăU"Uj5K)r.fBa[_i7Q7Ui*e0L,YD(O94$GuJ6FkT6o87(0gb+uIP01/>vsJt*9+4djăU"^X;8O0]KRr9aUg8c^+)'aM8NT3d9[g7gM.&X;Ckqg&%GUA2#)5qyR0j7tA[AWg6ăU"B2YhN3ghcrg3ob*ol1Xd25yCW'(-f,#5?<4)ZZ0H+idQ5%hEDJBWe?<=*ubI^WNăU"gQM4.W?>s*Yih2wwc0#i0I2QU6iZ((s7'%nubRkCg1m3L9=;JA?7:mkZJ\3\$9>ăU"uKj_fA^o>HQ8U./o)),EA,907brBK]T_6g[.6p1SxV;jMOHGp5S$gzTU*+qf_A,ăU"b5&%B;W>O7[9=*K;+M\ep^iBFsnwpes1ql5L$aI(g>E?QE:,Xv0FX]FWj7_TRmCăU"jt93B(_[7NqM53Q'P2l,cTs2S4lIb\6o[Dm%+kNR0k(<%yEnLzLhyp[c5T=ZlJVăU"LKEAtUI]H78<a(T0EI-YsRK+lHQiPj6f_5/8';;FXRA_JE^4JyhG/b[ai'=l7oEăU"OAk<^zMl\o[p\Wt%CM?=?a%L/lMFruz(/$z8>JsV48P+jf0C&#>ZhBSTD)C1b^>ăU"4CBH0aABq#lP32a-[WBf*qghaZ;Grbp+gPp+Xlf<U99eM69Q1-N&cXHUs8TE\TAăU"CDTy9#oImD((IR<$F)gc%\,Aw_+Q9xNB-LXx6sb0k%e7Df8,[p-\YBQjUXUc\lKăU")x>rBAHaA(=Q2VV10E*'Cjkebri$[3OGICln),[:yZ#l)L7Lq;5blgaku[Ba/,BăU"m9Otg+]']ftbOE)A+tva>t#Gf2)#Ee?-9dU4,WjOjK^v07NGS.>8=0qj>Z-q8<BăU"OSRyqkkqjxlb%($L/dLf.'#g,HnLuna=)r\Db)WroLs<#^e-,I?X'Y3u$*WR]R4ăU"H7es-FF_+[t\xq8,]KN[^RkaI&T+2mq*X9?aU0F43l[#W2N<>**HF?<L5U0GY5ZăU"Po26PA(JOu_0%6XERF\##&0gAd(Vj5Em844Os\N9$,IvqMC8]Lj7B*Effj:$*&yăU"7VvWt+V9[0):'3S)xOpqW*,D%nfO_p)[oC&bC#jm)]gR^5&lOEOPW-QTV_ThIqlăU"]7]ga_FEc#dtm_)%A'do<0Ok2BctU82#e=EV+SSH[GOq-C&'t71UIvxM71\S?V]ăU"5sDT'uDPqi/P0O:P[2&a(3^9(s)^[<'r'ZjQKtO0'g#c=V=C-PMk19=3q_]cBK.ăU">&8.)9lsX#buK_;S[4l3i]QP/2r'YPH[BAB4T>Wpid%<Zj;<_7#.KQ['0,C\z]wăU"#D3E1&%>$*02TK_Y4FJYapU]?mjVw^IGB>E-H?Xh^7'(/G'*K^'Rr;%rA2$;#bSăU"ojD[)F?CNcW]oJ4E&X,rsNq;%).E:EXo:P/Z2JcOJ>#7-y&XcdCI9)=a8K#epGlăU"SsG18Cl#M0#Oy>Ypa$c_$#Tyf1<)ckL1d9A-^J\f22Rez\:i&JE\^:Mbu>I?BbrăU".7D&MKq.<#(4(g96_,B'.;l4#4\-tQ')I*EOmDUHdr,EI62/m0-an7DCi\uFFH+ăU"0H+Ook*m(F9NY_p97'$A8ygB'gOaw#Kin(D;8JSbX7fN[FH9.]:e34Zkg'oDQMAăU".*-/A^RE8g8?L\MA,S]b8I]Oj^K\,e':SocV<>qB6+2Ip6%v#p<$c$wVMOzaQE&ăU"_qSHd<G.,V['z6BQL0$ukte>uCI6+<nJ:fP8p:)09dG#sA*j1U=1kT:e*Q<?4SlăU"o;w-R3v0Yf3D&&#;'o,]/h7prfOSkAE9(5vL+81JHGIZA(P=qk'p(/GPd.j_-csăU"W-EHqt_8MMZF=g#^4ACQ1Kf#EI)o0H_Oidxgofw1$J#.nf$AjBgrFF>^\0tjg^*ăU"Hbe5R'7qXYuG*H;6/<c8OhLv$H%vX/cn$Z(/5-EpeyB7Di]EoGC<-Fa].Xt.D7?ăU"VhMmY&6W7I>d]Jy3*uWE(ba.,t%YllA\B=Z8'[]BgF[:cS.>FLL?jDk^*6JAvWjăU"WMw'fLM;25FU8UFwR9V\q9pBW#NS)bTlR*bUW)3fI#Sk_F&V4PQjEVLYYTm+24eăU"SW;fZkkV,1#N>kzH&gVXkN<^\-pA]dE[we<BeGmnum:jl&UMd1PFS;To1#6513\ăU"RvT<8j4\AqZ2J.u;:BFe/#5vsg_q\etBB3G3iWJ:01=iH=4AHk[0SK[G=JuvOj+ăU"6Ey2OLa7;b8G?F]ZV.'V%gi7ubNK#RYJ(MnRc*aL1[v<YSInG\0H&7E5S()FGg.ăU"8TjG?trhp]_K_5E5^ITkP>5S6+&Jk_H2XIVk/(mTWPShDXLWUK^f9&Y+)[#:iQ=ăU"Q/'M:*]h,TQ[Wo$L35'af5hVfRijnS]4,*K]mg?s3.LWgo#hs%T1^%=6+#J[ax_ăU"rJy0v_*a5Qgeq+CjI1I,;nwf.k'>Inn-zWI./wAB&YDB$E<gUiGn8V1TEbt#^^\ăU"JE::8D-I.p/s0JGSRAX[\ckc?Um\Pzu;;<U40P^:jcst<Dbl[e'TgB572LUL/vRăU"Z<7k\2;&.M4iSJieV7h;O)?12=02jD.Fu=39zRMpL2r+h++2VHQPj$]:#(t'n]MăU"._sssv1q]HXF).e>/g?R=e#_;>jPU5O+=.7ZFOh=2uT7V1*J-l53#EDoJH'bvj1ăU"C$.d2PNQ*M[=puPn33_dpO;Sda:T+rI5zPO[#G+38W_Q#S$E]_U.PAano<Kf(rYăU"7-K6c[P'PJhdDvL<aCsb)C4'NA3P8s;]3)Djxbh>7(T9$nm&W(Fabn,j?(D.Do1ăU"7IDqpNRT.(Z(spJKYekz;UD.J^T[%BATKX^UYjoW#ea6^q4G)&>Jm0RJSg0?n.2ăU"K2TwK,8T.I<Qa&rVm,*F2*V::?7gLemm7dN$(^W;Gdd-Y9+j%>5I>1e%E6q<Da1ăU"1Mav#[q)#;To5W$A$1tK6TfIWUC&dOcLm/^K:(6r2L.l<hFKvXv/oBdDU7R%ZXyăU"xoCfCsh)/H53)#^g1-bLD1i>R5uuha1B=-Dj+-WP]o=i5hIG.s5*Oa'mnt8k9<6ăU"-6R4$YXd_3/il^.bYfHeg6dm?*3BqV66At\.*;qGsCJYmC[kHS_(#tZ^\TGWIxvăU"h8o'UIu8aGP%oCWo2Ntc$S]Zl6VYIo3^Uf/Ib_+M_a#R>Vl,2,B7<Cpo/oOl:>WăU"6TX9:$dJ,:sdLpD;B*M1EoUTDSs#A%k/Om-_<M?9agG0dry0VXEPW>fSnmb9]Z5ăU"W95Rf>GI6?%K-FzvYH#42iNLT8E\e9CA(ft<;%bdzMLUMJDKg>Fm4b>a(MLdG\<ăU"s%)=-JgkMAqY(V+;FCAOq+qdWK+>uAHTUCxGo<I2WSf_wYB-*5h\\9n\0AMdtCYăU">=ST+Tq7]D?__Tl#Wm=$0B-RG3Fz4akK%fPTBt\c'm/SSFxtPh(SqVF-\\Z\R*:ăU"?z3I0=^D0nF/'aFMz&'zfvIgXZ[p,o%%FUIowG$JA_O%[4hW77<fszSTmS,bHdfăU"F/*P-%#z0Irl0A,^TQ5C7sH[9i5*ecp^k+)%7XD+oe=+(#(b'5m9vk%bZPyhcz5ăU"Be3v77UNQok:m+ItfFz3-6Zq6eiVtDqsU>qK1.w'xH?9;NB)fo%*(o/[rj-5ZD3ăU")vx#zS2P*^\OC:;j,K$Fm$>79sSj*Tg.RGTn(PB0^cn#;d(,^yr9,ZJcXVZ$X<#ăU"#ZQeUa))ZINQKcmP*6))b93HLmla.8bt2Md\q_8htH87nnV,+XbJ8b)*+Y/8m#EăU"p4liG;A_kKc%](jl<77W0%K9k/J#)zPyGH&?Oi*i<hs,i-t+/'wX1,Wyv?PKiNDăU"kbYyTA8Pp:A<JiVy2tn4K4(WZ9J$\?;8:2SYaNyK%_zI^u^J'_RdM98IKaYC25)ăU"_*DDnPNXhL[aR>KReOK>poJ\_%,5rk;l%iRJpCn\bs4ZbpL<Q;PkUG0$PosLDT.ăU"j)PO5Ju6(FAc1RlyH&W*1&&/uEpvDDEc%NB6<%_l&b%aLt/TNdpbSVLV]11RY\5ăU"nOjxnK%pIIFSkR?dVo+>e+C&<e02Zk_]7\MHZ)XMm)zSiPO+g[2tt)CM]spYjUUăU"1=e:v<(EH?%Ga1nMk8%\]Q4&JF.mm5mkngh:mTZFn6F9^U,bq[zL'dkK0Y$SW.HăU"PHSEL2Ja/&TZ?]FSwT]lv9sC^U#jKIpLMq$q\Oe^]iw=b>*'xjo&Rw-M+,uXLJ3ăU"i?<5c>CD:2[))tLY5E2m>=0opnLafx3]*o:V>'RHL8%D:&.iC;r5..0nW)5K&:xăU",]w=YKI_&td30S&Gh=4a_Xg^kMv5'I)f:JnUO0lVc1N8#/'kPT4).(_w/3jYjyLăU"+nWR&.DkI2DeyMEOtlgz$/kzd50qtdkF=3odyFu9.*lZo5yRrGZg0,,\(lsbGEnăU"H)_mQQlqyY#n2v^OwNe6%_>9Q,'b9>E8H+(o,C0Y.Nc)[<^bnfPm,0/+3]/4q[\ăU"6OH5\=*4Z5fsh&uu##aU8lwN1SWY/:S)\D.t;9/GT;Xm3j[6cWlhHI-O,OOpOmvăU"eM6&%%ac$^HMxyyINgBn*q,,v5T$b(utu_rHMNM<<ff0-itQ333?sss<67iTTPIăU"JZ--u[<\mYY5]IJT8;;;Kbpt.SMMuMUUur+f6%qtt^^pTNr)P0<)*)*V4D?WOO[ăU"P1=W&-5[:HLl];>A>DZ9[yll#laJr#n[>LRfR^EerQ&7kMd,,,W(INzu344#A\#ăU"\Mluq&8-sN8KCqg]#\1ttH/snbKCtma43Ccxx/vsj[TfZ(HuFmbLk6EgjZSP7ElăU"_Eh6Z66,5EFibJEok^B6_Gl$t>W5rHl$T'r)/Z;MTvlEESqjZd;T-5k3BaLRtdvăU"Dr(JVK/tpfRk*/KrBk:P%W%+2AENyzzk&(-,G5F>6kk*Ef9SXHaul%,Gk)0=VZsăU"nd.ZxsP>lQ)0\3?\j[n<_tec,H^$;kBHbtFl_Fk*/;Rr3Dd/Y<T/>lX72#n]\5ZăU"d2$Fgsah5lYEfSDuwr$8ij\>UW6Jpj6Wmu0jS1/HembJpug6i;s0pfT,FJj<q,KăU"j>ZtphNWljXK0BJfA:]?YRq>HD:\R,T6?mKDSZ4eIpLhf.MKr:&+P#^d&;-DNzhăU"&.LnOZP+BZf.P-kFVDP;.Nv2j\U?\S\\WC]Lr\XkKl*XQsO*=Z2^O*q>LTTuWooăU"0c8vBhbG#$XlrGF6rd,0VtETf0<XM#BkFUH$klhMpZ4Xlmup5p6rhLXtuWpwp-8ăU"x(D-q9,dHq:4L]ahDw$iVdkh$^KmnrDvQo#coj;^Nu8>nq=L=drBtGLcxn6wmvdăU"WlhHKlo,nvcU$cplrHNwp0.q;s<8q>:TLbpY.wkfl8kd(PKnz.uvSP7Zon(Nov#ăU"Xqo?\8riF>Ldt*XwoZ08llrhKp4uXvWpu7pvh,Nx,dHq:4NTqh$k0pcS5>2E+QlăU"Hl1*uQPPPlXXNqQiZPPAPHl]dAbImQQ*2FrVDPjH\#tkp]#k]uB4h7itmJgZ2pWăU"Juh4h7uth8xAP,CG-i:,DPIapV:DMqlXdsJ^YNu\n-u]LdHvbtN6o,nb-kAHd?xăU"rHDtLmJ#pCJejf#DN[eXLMjqZ.uktf8uNr(Mn]nbtwsuP8wFq>MlTZXwoFu8tVhăU">NxtdHuZ4Ncu\Dx$mvdvlrHNwrD.wkuP8wnq>NtTuXxwp>Nu\D?xu$dZxn(NuvtăU"XxlwHNwulXxwNpxvm'sdup%()9%%%%-%/%-TG;Fn+]'\N%%%$r%%%.%%%%urfu%ăU"VSuh2'lK,SgBP(ZoUUJ&0:WXtcEKgA+(XfW/mIKCh(e7F<iS424/rmJwESQ(5a5ăU"'#.URplpWJhl6pESZ-T/9Uz,]aL]E+2^$#AxlXtl2_FFBlsdHx#kae7Hut7XpVlăU"MGFu_NFSSchxJPXw(okNwnxh&B9(tAwxxTpwn^rs.wd\lsrMQ,?c=fMjrobalavăU"<Vrq$]J5x?En[#7]u7xmO<nfk=La$4($qsdXz'$IK;zmCbtP05EMtWDi[GSCQUhăU"W)52ClGCUY)=Tc*W9^E,t2aycJ$IFOCbU0dgY'0:5?_NLdvKnZv%\>YpP;GPm']ăU"Z*Nv)+$9N2#pjye70'RKEvyo&nnt*'&P)mcV?pG8DO*f+JAsGTCf:eR+R+p/t'&ăU")c?LSA</waO#<zyC*LBT,*3t(284('rIOUQiMpnf-LuIfR3-4Q1.dKQZWsHX$sZăU"JIF+CEF>?f2m$.0izD+9&1s&7]EeK1gOa.-jrnViTd$JP_/6#RK2%/)JHqOU^q%ăU"C+SMk2i;syu5Y;2)fbLKD'::/GFb4]:4dgvWbcq4:Hr[^'L)*Vj#k:.7:f9:HiIăU"*].V*0YDk;7W0VI[L%mm6U+JYop:ia=5(p:zk[=.q:p-Pk7:.Sh.).b#v]OwfO3ăU"cb/.a#Bd=Mk_U_.)Qjbc0h*7i$6Pm54I>j/Sm*(O7c$_mPb<O=N$6yZ5RAjqLFYăU"*.e>SHOOUqqSzII2[pJgI&OzT_N.U:ijPg_C./ta^.K-&GHN3gtU.6ADg(O?d,3ăU"E0s#rYiB:tBVBFf9<PA[g:S8^j*=L$o<R/G\#\lV_uT[hrxB.uip-ku<vBtgCLMăU"P<M.C_mV:=03&z(0^,MEl;ASHH)>Sd<mA0vkJ:HGexttFpCI#A3lxs1Q+i(:/x3ăU"+>r1-bOWX\g)5nCi(,FFXydK2n(nK<qrN4k6kfS9Q-%nd3qTq'Pg_unrNMnBmQUăU"ZH,?S&a^Jd>>=;gaYn's/nUs6,Gb3/yXvG=hs23?,A=te$k]S^x-fO+c\afWOeFăU"c:/pOo0+\c-3L)KXC7#96a)A'mUmgn[-l1x<b=RYi#R0/cO<J%K[HwzZ>P.xNf$ăU"VahFx:c(Ag,^h>o;a/3JiGK%J$l&,(iIk\wkx1DiKVmpk2lDIEJ*3g=,\h%JH9<ăU"mD+)q=.$fsA<o5orRvk;'X-WSpPWs74m?AK%[vP?kaBTtc1l-2'$OOP[bYBIDVRăU"E2;2/pRW_^Lwn46.#Gk0fOIUb&bpbY1tC)g[+fw&*WD_rh=L?7B^g_>DcNKd3dBăU"Yvqb#nOYPU.vv[8_W3A3pqGPcKjq%BB>)X2M8&)qSN4l0)x:-=Ga4NeRJRDa/SLăU"81[qcy&PQa691f\6T$F#]S2''4_M^56I.GZV/sK5=D3*z_/HW?#_>BC-1By?JTvăU"jcZJO9T.DSLkj&'iHWTpKTy/)Jiprgx9&Q8NHO&ox;o6)9o#c]a+9\ym5[jWZ>*ăU"1Q^5IS$&UG-Q2ZVM'_q>Wx8^pD]3]gjs<MmDKks?*/fo5Q1nVk'tPUO9KG>)7aIăU"iEnI[G20*7LZji2PD9x2r,PltgpL\ef/jMA7YtB;8,6;tQl/4$:)b=f&$/-gurtăU"Tg(%0$/GB7;$9j6MC0QNv'1/.JM_-YfQLCM4B^CRZ#(G'eMGr-Q+7kc(m*T^s7hăU"a;x*Gb-%4l8:&2,eJq<Vr<b-QL5N,wz7U1<VVHz5csa6X2=n1:=3=RdGJk3&uEtăU"[pr&%>Uq4)]z)b;cc$L+ut-#xWsaA\=4R+&:+)MJ]/[][N&<.U\07Z5P2]sF0PEăU"k+^4]_-^E<7/7o'ZD=:c3qrM40(0uq5BAOYoAP9l<*X;&[<lB9RgB-S10O7q3&băU",^d:txqG74]u%*Y-BaMItVPC'qh?'4?PMKCsd]b:O6::jGzCEIaKMjyu+QoZUB/ăU"TUj)aN:8'dWI^lM]]JllD*];$+Ais^>u4k0\_P-&b7k*\M]RucJmO<V=COp:)WmăU"(+481tQ8gD6*Dxt&QMlRmSnr(Vi6wWh6b%\&eQ&MGA,%ZBHF2q_oD)2cGjbG+;^ăU"I]o>A.,//W.Uya_&Oxty,bMqw;_V0iJdB%kHOPGbnsqR$P/KODZd72Vm^F&oJ(<ăU"01+h*qkiG;FGSIkLsIlk;Oaw$%h1%K2^oe,1x&k2Sv34KakBu/<h\LsMesl-+WaăU"INF+4u$ej&^enE*KQtAOB?sr0i'I8oTq&LXS_BP.&OU34)Y'.,o89Ajj+=KM%g8ăU"7gUEl=FsHSWY=7lK,l3/)et)?5e%^\Dfm^sN0m'=zId)&LEvBkhA]*.;k3i>_t/ăU"6G#43gtp7b%hax=,YCP6zk;%;(r#rG\/XE8:&XUJaJUtQr,.lO\(0+%#t-HVi]'ăU"Uq.hDKrlsI:+1<HA/NNj1XJF,vOQr?U,[9MaPPKUr>zm7Yj^oGEJVhsJZj/RmVfăU"IMLroP0a:,q/,E7a(Ht60D:)X7_L%IkblW%BGgB?[4elGMRxD6u]MBQ6DW5zmFKăU"Wa;[a+Pbbgr;54*X9+&LU/)*%yUo1<1n7Zg4CK?zNS++.V6>-d%I,zV#ib_#GC+ăU"]OK7NZd/9KF>AK.Sx#^?&2qoh6g+fq-t[d8#D.??.AGWGw(w0W%i?TUz*>(e6Z(ăU"d<G]3n_FR6<CmT_92\Qxzn6eUQFPq(>)LQm.-*SZ)^&/HWr;shO_&wYR5-1hLWvăU"a&fVpukUW%.h5T,PVDs;1;^q&k7Lb?*=j)+R:j'NS9HnUnRVYkVcekSQS;\O9kQăU"1xGLSG=5R._bORWYv[P6F\4jqp_Uwx1Ee$IEX*fzFD1Hv?$M66t^uW^+B)Q>kEPăU"5NiW1E6PZgx10N6XE)nIvPR2)OhKnFp&rVP02=0Qh3_6J1Ea7L6**e7'GTWeBepăU"1):M0INl?7.42bt')g]FnJR6*n-^Lupo_ok5,z=^vCw;Q(:5Aj:9Ud+2U6H]>i[ăU"hp;3hOQUWCEATq[lsWb%?nRM#c2L9ObPcPB&BBpnIGq&.d(L(\H[y^L_i^kmHeOăU"CD(dKa]b/?R?,ms&6K]Fad(J[*'F./'v)rOBrun/fHfcfF;V0.iD6nv60=lF9<măU"DX/%C_%pJ4A)INppJp>u)70V,^fN[d0'Ki-I_h[rh&Qx7nb$n7Jza.pW#<qig$^ăU"3\LRRkbil50)q7eM;Fa*15LrFcWug%eCSsX9g/IZ?f?Ma4P]W_xA*/wM102Egg1ăU"Q=%9?6R-$_snnkOi?lg6wAqQO-PQxOCjO5oU*\-_1PFl/IfaBltBcvVIH8)Sa0lăU"5FseRW5>9K7JKOe$F3(,=6HBkkWbIgy-0_0QGOBX[Ng(&*Igj%hOJ*N<PH8+)d9ăU"017nkX=OevGQQ3=g<b%uR8UbpnwiXm%e3pfC;KoBj.-;N4reo31d=_K>sG,5VWNăU"GgGU&R4r??ChDp1jA1t$V:>Y6-=B((#M:xY>H*)i)kQAc:Ee>&Xn8lRX,M++XG\ăU"$Z7^juj:wA,U5d&IqMmqEhPLavejbhs49Q<n7G#D(:#,J)e4;,T$$FkKO5[%m:qăU"w4=9O5(8XXe-UIFf=AVhP>uLK)Bf3$+xm$6^;qIYRFkPBD,*#$gfpbkQ1Bg7s^0ăU"trHua0n,^DfKI7vPBm0Kf7R<U(kqg$:S8M9lb%U'v;7PezHD[e#.Ud33IGEA8CVăU".EA1XjFrsWQ_Njfc6E3TY)fKZ=v])]\Z0k[gDE(31#.<.K9A%q4B;PV]0DRmV8-ăU"\)q<gIy:NN)j.*^A%wAc8wzDn\o&&\qZ8>t[K&:6e*j(tKNfH7.*_wqeaU_Qh65ăU"Z'81D?7)Tn+>fGn+i7t2UFoj<L^hg*B\aHc**jM0xl6<_W_RQR6(G)M0I%SJ,9IăU"^Eb]:IE%_N9-Q)+$.Fv&:WbqMvJ0*a54?,5bV1vdQ.qPF,>FB.]bAyIA^u]cA*,ăU"t(n2nSCq+eR(lsIt33QTiRPw&oLJqomh$/2a73a^tHdIqVqy<IV)pxKCo:F6%%măU"vBKr&r>*krkWQ[NN<_F:rz_Lt7'g%mGG/&uXd04mF%2BDrzARKy]1L#bQWa0ovFăEND SUBăSUB V4ăU"jok#:u?HCBRHl,2Hs1cE2cKSC.4]Q)En+[j;bmc;8%T^*981qq7Ou&Nqw\qQ\/_ăU"0>T--,EbwTWG.PVE39jyD,-M:h7t1cQCD##1)3co(;otj^TLcW\a,]_zt?Hg*m-ăU"B-'\_BcxLV'9*%]B(wW<O#CvFy\MYPtvA(.DyVF22]fL3]#HqJ[(xHKe#Z4b2*aăU"E0)iRCj3H'%,y*Ct^v($/mX*-].SREoCA$Iu^s3Lnm.f7f#5yp9sfFfFJ6xzu4năU"&^:d>^e.KcNs%<UAeyIQ$#v<X]nSc0?o=5I]w]Jun9C5A0aGYtC,k5v&]FoH/WJăU"-r%Z*$&xz0Mg7x]VWJIaYXW^eREVdddINL+SNo5Q)k)U-Grb3bRs?Dw=1DCV3LYăU")Sl]O?=*cfaxqb'86?&>6=Lw>csF*0)8<Bbsy5Is[_+RWlw4SX4P^Tl8tX1BoH5ăU"P&qcQb/3si%wCc(u4Dzg$^Z/HcaiaGuU$##tCyVu^*\k/S_xmCtk666jtLzFVrQăU"y5TrK3W<HBz/2nYGC50/&4:?z%E+\o%VT<<:hx]1jh#j$lP%t\1#QSm+\lchk$>ăU"(fSdL*:l7mH?32zTAsas-04gD_P?(.;9Y8[zGa?fT>DZvG[AGVg3vl^Zr[^=CJbăU"&YXHw^JVj^0*a;zQ&#g=^2z;jIM/ZOdb:2B;$<,W\[iQSb'89]Nf<a3Q#*eZrTqăU"#>%.7JL6H%nbCxxsI^Kx/qSy<%7IT6laIijwG$$tUMR)xIlF?3bzqz1Lgdz&e47ăU"'QIvgKivHU96HtB$2lGtfe/(=^BS-7h[](br5:1B?6s<A3:j7J11rlXGGJD$?y[ăU"5&?yAc&Qka6F:$Tgul$-&h)8D#'WoqxclRi0m<4BVbQ#$*N&+q)-#CjL+sTa-J<ăU"P*NFnrMcH>Bxvf>>BoJk_n.s5$n=,6*R3\n2_J4cTy9D8^GX:Bq]n+0K2#G5*h*ăU"l=3l*?/YS:YZtX/LhLSsmn'Kcf%]vHSf<?=P^.zG)&M0wl0n[Z$YE8(giY^1/)OăU"9jM=,>*7URB%*B:^f6x_Hjk?t1$<Jh?+Gk-+_Th(kl#2]Jz3?Lc1M/L4L/&aKejăU"B[p:J5OY48:/KxHTGp[Y)aCgLb(K6rapG[=LAHxJvn+l^D,u$lNDL(*;]O\tBt?ăU"[[Gnn5;4GW;c]2-Uso8]NSX-TH?5NJ$I_WX)k^#ikT%a8M^fmd0^xcA'=iZhi3KăU"CA7E]-*F4HRIDabB8VmkL#gBDk>\U#i[gd]fa[]-aPG,.WR.1jHGa5IaTB/-;KAăU"g<TiTnEq;OND$*GX+nT]d:p54<US_3R\*2h_,_<NqTZm(7B6/&>eeci2F_wsC>zăU"mVM83Q%CA$OIg:C&UTEpR(3EO<f]CNN8OCKEs-UbR'4QGj0Q^>k3cnRBwS%6_#UăU"PlLdh;0frCvZTl/)Vi:YJeM%ZUMDKR^B?iAJywEbCk_6rVi>ko:hel1i'.=c))?ăU"H#4$'\s.qGC]ZFN$edWnpSWMO77y8Z9ULTfGqbfJ5pin#m<4KYEr?]\agbdq7/7ăU"ShBpvm14sPAQOiC]lq?LIY'^6vz*8W]GsgBqUHR:wd<pV$WJhw]Y\XL1$k7\<=jăU"5Lb=rNS8tL296sV.jy:3Oq>:E0b+8cP*Dr%+9M9.Z(+)mI364Ck(uMVOiRUhYcZăU"l'D',wF)6f9Nd0wULsL=jVk$O'gLh&b^7V.dMI-z_#N8T?2hd60<[LNGGpO44]răU"/,p9E1MtzQ,$''8-ohsOTbZUqT<)f57><0KCIkaii91v9N6X&ntav,0g?.i-bceăU"IEfWBphmJhi4N>D1n^xkQs/D*#,d)2Z-(xn_Hd'qs[hB=WA9YmG]C/#gRo]U'EdăU"gi%N4w,L%=hX^hk-/RVk4Hnp86HiFg9_;d<aE2B5THVW#ymjmj(0*$L*fW5ujWIăU".:l'qG)NF*<0vHoLwSvu_a3t0#:4zdT4M0&9aOOvhXdl?bOJ/uH3NYdkr+l*bu%ăU"Y>m'Y#ZqTjk50:]DnN,7IpZKU'%'eg)sY/eg9J7\]L7CEns#d2S2$*,q\HZxOHoăU"k9O'Wew2sBgsTh:B]g5XZDtpY8_E;Z(T0i\R5<k+8B_ICxAxA&7,8r]W8TBD9+iăU"7OVd7A:8a_:=J^:o:vr83636sHLmA7&TG8Fx=Z7qvqd58KB=.'XHCjMPYHYMh?*ăU"cYwEsYsY1(IhH,Z\*bX$=CYgYJp;j)IqxZU^c'=[\\6l26XUmNpGS^SrSoRm[V=ăU"f0$DNNk,204h3TbPDaVwFtFBU<T$68T,l5(D+ATd94z0L(%X:IkCnt4m:p<\2&_ăU"e$&cXc<PS-YCp0BH=M4W6Mt7Nl1MG.D=7xajr0_bLV+Jb10My&?je6d8.IpAb)&ăU"H62OKHJH=kj,7'VaMcvgQnal&5Qdc_#(c)(BCvZRVhWvRa*7q[asChNMB7/AHG_ăU"Yes6CLswTK.6*-g3of&2Z=/X&SkF>-*0l+2,hZnJXbuo/[DslkiN0qs,iTx\,k=ăU"7y9^24_RF'8qJX$kbT-e[Jr3Syi.rX&SeOygTH%ysy#r%Y,2hkFq6^s%nCqH%UHăU"bd6XQ-$G<<)YZ*TPAw>IM8qo&qa-XGimse2DJA;k#SObbqCF-'Q*]sMTfWkKThgăU"Cab6HnW+:gw:Xz\StD*SJqF#ZIa]>jX>CzN[eH#VyNj7ZXqT'5,EixQxOkC[4K_ăU"b52^nM\<nA2QmI&4QPAVf4>muMc_UGysT:XzKO;gZMl],4e^f_-zBCqqa_F6R=:ăU"QpMJ]-)xsz9?p/N#Dq8m-ogV'k%wd4ZJx4','ewDl>Ke._$8#f*B)ab-S:y;dlHăU"4Tl)?dy(3:yAGsO6EH'2#4KgS&v+?%B<m=zFQ9E&q0\KV:E<qD3#?Mn2<5it,bYăU"GA%HEVSj03X2RMk](HaFbfg>2Yk*3In(\/kcUCIDSnpHf-]-^p:c>h>6?c9n*98ăU"PSP?:%8/BD=y'[mLf[C27=AACcVVb<R'bIxIUQ[1/<MBE\3r^82\q_4U/;z/\A=ăU"pYa^fZ8Tqt4K._(CsCOOtqYS>44UFu5V/0[hS^_u>RWrVCViG.8_][Fs,YnodGYăU"im^O<JUs,-<QFCa,4;fMaHQ^Wnn$tS0.=pn>q0p#SrQKDjc_4_ngEv#?kr3Ko_lăU"7PW40D7ab;OP8e$ds)m2Lnot_>^ohCtEM9-]'mq)lW)%ZQtoscnVf$+m8tNmkkTăU"8yE0PN^MWs(lX(<9bYYX4y.>jbVT,7r4)0Y8RC:S$TRY>N;QT#J[S('fQ>1/+w/ăU"L3Y,dj_n6MH&&8wKzlH1iUYTia4$W=PlU6b=8KDnHygaLe4I<nzbPs%ElZZjcLHăU"%UhN_54Yg=&hvjQYk$)kr$ISdK6d\jmhw_H*-brZ.SbxRfz8Q^y^CJQNc,'sz;găU"<MniD<8fO<mkS;==N#bBth];*f..D&VHd5SP(a.AQWAt4;K0?nLsHec]iS]/\*căU"V\p];SjoM8a&d6qQ860ceVfB=LDqD4bpdXbD%>nj5m<]o?TE-]G-M,kgF',q+EdăU"JHokK&baNtNbbYjl1+VMh1([f+5t/c.erz-AW5N0RO-#V.rWwfK7[efSMikj/#_ăU"]%W(P2t.PPN9=,ks)c2W#p7RvVpP<HfI9'l3jearCP6qat:1*7?]heVq]bcE1rhăU"OshfMEHVwMOyU9Lv,u[g*Hi]Ev8^jhEB-s[Fxl=7Wg_K^LInU#lkW7Birl(#.pdăU"[?S6)b8W$bitJe(_JzG\7<D2dzPC#YE&RMmWc\NKk%,I0;YPHB4#m3ky&HJMb<:ăU"Q6upqVfDpA,%nZp[o%LRh4,q8<SgGreJtM)_sQ7a'%a3K'%OX^g8_3kt?KsB2O*ăU"7?7*JAqNgX>B-V6tdQBe3PK..Q*.rA9t_jSqkxA2-6t+8XV4YObg(bGTbkWfN#făU"/kPX'GxU(pDdq_w'S?qKNQmDE(ETZH>0>L=9L9FSV.khJ;C(W(QP^>3Fp5##u66ăU")U])HE7:6\bXt7cfO:2aa-^*>N;5_e:O5J^n5i>f&]:UJ:UL^kFhQ%?$\?PUzDAăU"Xcnb7;&cCai(7_VIdxzX?1[L.[Pz4U,(eyxljI\Ij(^<]4GSDwD.m.3seT6x*EMăU"3Yf1]n'YDst3+3\p:q\>u.eRlj(yo'PuM[p(t1-.EVs,^TyEkuv/34te&^s&(3răU"S/tMq5-3zi^KR^IH,V8V$*%Hh$[+jT_3zs^Lg)8_U(K8-^G(4PSaW]T?fNB*,s]ăU"a8f2Ep*IncW#'$=092,JB$[6u6jZtuY09ET5Am/&kWMvJp9D.0Ly'\97m[<kpkoăU"'632pf%F7_cH0G/5N1^1H;iFZE_M.1I'R?Ln#e*-t1;[LAN,l'NEpkiFjT>rFt4ăU"E?+Yod]Hlr6^.JseP3.]Y+E$<38kQZWf(fm%$/8NAk=)5\<s-hzY3ocQ\+Azr#\ăU"i_/4w:sGbPJKCX(\2k-?$[]K<(hGB=#=nq;lGI]kx[P$Euq367)gRU.kYzF^*\jăU"^B$HvAYzKY7^:+Es^7Y-hhP;%Bm(y1gMvBTk2:kG)5JXsSf7lB5i%mlE+%_J/N:ăU"O>A1r^8R=^?=*&?Ws'%X[rq'TQGP5/^Q$(kRpX3$MKo7EQ?bCo&/B(=XdNo0XOSăU"Pm?8,'twdHYFNEdV:hgc'G3pQc2QW$]-XtM/4aie$i3X72m03na?+jG?Y?WV?)lăU"]kBE#H>;30\nv-xI[Sa7\;dZmLBZW=(9mN]HR0ZV*W,R67U3H+UL9]Q$:]xcF44ăU"S<%QUi_4VirL2'QtVI#k-SA/7Chz&JXGMGbNVPG/bcj&-(fr2Oo^f4GlZu=yY5PăU"Y503jnKq?Y=vE(QU92j;Gv$93$3/U)\%]LDODg]5l,g)+'Kz]?ItWML+U9HH5j8ăU"%hu,DVKdPn$Ur>9$JaS+zOL.s$4fJN2F1.MkvodN0O/Fo3b]31Qu:QcJ:Os$GpNăU"4$3,3Uwj)%RkXw$Ztu9gtA_%NP_;y]]ZkgezU\'l+*&3sj+W6;[k'i/CxjO:l7găU"?=GYPk^(v,bKN/9q?dA+s++VPn)nMH>V<O/t>RU7W.gK2(50;Z.+T$XL,+[j\R]ăU"BDC\.o9R8[PW&<]CIHhp5<afmBgepF8X;LywqJ#=J.4[=j[S?YmQaOkZ8V*Qew6ăU"3kibs\eUO.&woOuA=2NmaZO?Q^#h5NMJ.kDo'L<GB&)^#E6G+rC40+7q>SZ=OxZăU"ILAf<9O6BaM'/<If$'d.k0g%Z'E%Ex+NDCw$3i%qpRJG=O#*xSlUT0-5e>+b%KBăU"R)ab0EmZk=arZ?RvEve'EBW9GFg4?sofNGX/(kAGA*I,dkOMJ:Kz7sf;Z3]oO-7ăU"+^(m7m+_vsPO]E]6/?gz'=DRbAfWz6]XYo%^&#471mB^Rcl]0hG,Oh>u%PhPa+&ăU"'^PKGC>li(l?eKneK.l$/MThCIK$;TdTB(Ghfkn402fP-Gr5j21U0$:\21?o&qkăU"1L-8H?l)HVCOPw[$;jbbm[#dG;yBRJ#3sl<fXD.fVwG.L,\D<$<D*\[J_K=+b>]ăU"o(])W?0,mZ;F545%F0>B8W$<]FvR#K[drXU,_^Y[P5[Fdr:T\LU?E><Bu*f0jeZăU"xKEOG\_i.21<Qs'2nAZDk65Xc]*p\k%)l>sKET69q/R4CP?Rx?hIBqAY#LP'PqEăU"w$uysTY#5/X5St<ShXhP1L1=wYYEG:';:.f9L.Bp#fov&uRMxR9c7E^wjNsR-LPăU"]8-'w6nk7Ij5jRIPfq_b[_6+iVfsD83TzhO2yVr?e,Z9Mw5l-&%E+rDPU7pQ;()ăU"V&roD(G_i%g$IE)jVoD[[;CZY#a0#?B52-PSm3R<)1'JPCI(6.$d;U5M[C_17b(ăU"m:patAqJdP>5X*8+j4;Ame6CN9a*]V6W,efaYDwq2Gav9+5MH1ezkG5$4.C4eN7ăU"TX)s6^T1IRxj<G\T\^]#z#PLNF&L&:PZkBh3q#F*RA?^^dS1)PwYeQPrjMk)Fa1ăU"0\w[aMJkgKTj]][[obzjdRT]K;HM'^&8kNImNXSIImbQ\%Pb]'E$-4]GXe7K(jtăU"M[+i<k^jCD>K:GGmwjQCq<t#.2Wm0B%MO%H^B%=Ao;,gA:X_hHe.R#ouY:1\kzsăU"Z6Y$nPP((_.^o-te:QySXO=*M>*?6sggNX]>L<dQ4K[ffP?^UBKFkSn<*TL-oC+ăU"*nqG8Q:X9OO0)U\&7]48z*_hsPgiAbcPbj&Yak2?7MP=[4a9^0uE0];V9Fp+3kZăU"+<$Ht'?<;MYeBQAXv5tFn+V4MYFq7=bFSbJGFTT,$-pRA_tp.gq>Su&elKBIsajăU"_[G.V^UV+Xp*?c>xgo=%pl[.%:qBOZ,-5cvAAh#587D#*iI8JHn>B$>g&.Ef)%PăU"$Gr)6G.tW%h#Ej[:ILAxt:'l<YcGf7RrX<E'[.j5A_7Sw_1y&vdxa+rZzgO;m;lăU"?U$UhCQ:iP5V&LdKa&mF6K1<-^T/2csFbiZ&dE+^5bSozs9p\^h+B\H'F9vE'jSăU"O.;TKpYCsXkQCK2?dPCsXi(V7B8VY*GLq]7'jnu/:bJ2,yrY-UZV1U(gFB&S*0tăU";)$dkc=p2E0sfX&UO?4Wiz:Y.*4hi&/R6]4ugg]74^fA3t:Ju9JNA>c<hD:?[S9ăU"cHAh<#2BbIWO=Yx<:MrF]#/j$4g/:Wc#1P]-+G+624fa*8(YqF(IQRV#^LZLq(MăU"2]gO^op6_Lwb=BH[jB&l#/7=#qBBkmE)-d.HR%jI+/Anrs?q[c'nqtVr>aU).q(ăU"8_zaaLi-Kc'[6gl+LQXr*YT\Ck>WU0eyxad?,$$fR?GV0GZj+*[S[CNj=Xm*<raăU"P_AxP?^WY#%Z%P>44K2oQ2<*)=v:d%fQ<M[H.3HFDX-0d.fEZ4);65VHP98>OaIăU"6EnqE9jzgk.k'B)pcVsT/KQa?=BplKr^?B44)GF53ic^l-cqVD2D.D0>1'Se2p$ăU"[nz&Q8ZkeJ;aa_a;j6=A2'YJq;R9F*gW12[E)nG1lEMQx-;fZ?$?iS2&lDj+V?<ăU",EEB^%iGtKO,A4Y5)Z=\bjHi_5rol1lgLe7?e<=W??Ab>-Vd*p28kY<FQ74%D>lăU"*&:Kn%Fr9t4]h??RNXYH)8Y\+'ua=Amv>d)2\Hcm.URqtDCGpt^^M^*O5BbG1U]ăU"\gNB&ee=gS.lA[U7Z\[y]f.t0Mv,z2OZL4Gytf23X$FN$.M4GFbV%;)]R3lSn+?ăU"uM34.cQ8U825*-C([#G#5;8pemf+*,VZjb9jbfa3^O=:.yCnL)8Q)WIqHu$Iv;băU",J<A:V,U2Ww-Iu;Bqn/AVGxs$l;vHD]b?pMm,\9cV86C><0^8mUI/(k)<iRka4WăU"uyB4p'aAk;Mm>5Bx$PYyp>Y=A<P-WeB28DKdETD&'Y_FbL^xHY6dyjyEokIfI+măU"L?mBmeDirR7L[F,R7cpIo>F:KAT>JmHp\a\#L^ql'^3wpINbkFQ25oJ,flAClroăU",2bVPVNrt>s,mE_Ik/p;$N^uhEe1jQH92N;OdfqvJ00lS+)<n+6lFE.^_37l8V.ăU"C*0AcjDQo+aYt\+EfO-A*^?lpJbWIY<MXR#t\-K\)i[^aC:,HbGHow<skD9hAYIăU"%sG+F_qzVQI_2Tr/$Z1/D9W9tLc+dj$XbULAlPQFSGP9nb:bc>nAog+>*D>*UPbăU"&%G'K#G.F)<Bj5U,sc8N:\jftr_Esr2HTu#%u%KPC0&%TMjU:Rz8%:VNX'$8LaBăU"Uk=-[[qP09IO?QG;lfikU#&.yHB\nY\RAgLihqIL:c0#8>EFX;qX)N,0s7R?&WIăU"V.1,n,VM32Y>2lOVDqdyj(,OPOA,)(-w'+)ZNnjEI\:TUY?:Z<gVcqI-o?q7'QtăU"_oXe[[?18+w^m>6KCX,e$oz(DdW+(qPfgSXBiBnS^OY&-CuE?lorK5A%+?^LA#2ăU"[itA_]*N6wOF7[=%'$w-1Iavml)^I)[g&-z+,Ib%q2-3O>[m#EBWkW9LV>WahboăU"#oq[]1U.]sy8oV6KnOLtV_n9A>eHq/s:L/&z4($wu172]B\L/N3XD;xom['Q5SZăU"o[TLMNc19Z^LHdkluA<R',ZaP0obNb+MUbr'wS4csy,_Mm#xKnHOfPNh;jQc04.ăU"w+n>JY:n](-BaDJFs++SMk=btF%6wKP<syxHfKR$P#XHR[^-lMm+q**\29/UPNoăU"7[Y''Zxfrg.T:o&:dI%A\1W7Cy+('-p4=rU'FAnE[$qN,b8#yp8DNY8$/8E=GePăU"1$q)Li\R-kjfQk5NO&5^OK0]sqGpq9ZcwBaPAM_,1COWqo:mVDdk78C-BvNI&E,ăU"[EVBif;K)TRotszmqa*J2sr0N#=hok74sahlua*[bnsp24iJgJ(zpL?q-zQ\(mJăU"$>>X6I+DNyWN-nyt&NdnUkrJ;s[XhvuWhvXQxvvutuoeRllc&8]s(cYU(-liuP1ăU"'dqHmht4DqPD]qfDmmfDu:+DuFDTkF(L3f:REhgmmwoI4vI=4t)4cti4xWi^qWYăU"^qA^QuA%zg:U04uV7f/TTccr4ccrd$srd_A2cKY/q]]$YlG#Mle#MUr#LU#YNu#ăU"Nf;LK;:LM[LuGEEU>MtfnYa5gD6(tst$sstwT]twc4trctcvMtvo-tt-X$g1ruTăU"f7wun(xmstxmHrq[HquEHuEuHs%HhillvueHwelHrkHurUHvlU6JpYMW$LlW7LtăU"u____c$$dx9ldx0c7Y07oi08iTG$h+M'''+5+uqT$sqTwT[Twa4TraTHvKT,q))ăU"S8PNx,FQVn4.io4.w<^.w:b.j:DQDD>G'<#3A=]i?\u7jY:)RV3BusC(u6C<V4dăU"D^A]laJr#S]Btyl(sy\i#^NnV&NnXm8L7_t:7_]NBb>IrLj7ot:8oMexx.phD.FăU"sumb(xHs(dBu_ER,56Hl$op2XiX2$Hnlx?>u'?0<SGKL\LfL\NlU\.5G6jKtpcXăU"kRXuk&XsZ&Xo<rXEpVqFNt0PNtFKi#FK$VFM$FPLPFLipFNptjXu_?05^RcXlbXăU"ul6XtZ6XpLuXpvXcxvdiR(diR4dqRd]mhdmo<du<+dkHd$krdsSrdo2=do\dcw\ăU"djR8djb4drbd]nxdnoLdvL+dlXdcl,dtT,dpB=dplduxl8iX08iZl8qZ8omp8muăU"D8uDc8kP8rkz8sYz8o:u8od8uwd8jX#8jjl8rj8rn*8nuT8vTc8l$8ul48tZ48păU"Ju8pt8lxtNiU,NiVPNqVNfmlNmr#Nu#GNkLNikvNsVvNo6YNo$Nlw$NjU<NjfPNăU"rfNin&NnrPNvPGNl\Nll0NtW0NpFYNppNuxpxiX4xi^lxq^xomtxmuHxuHcxkTxăU"uk(xsZ(xo>uxohxuwhxjXDxjnlxrnxrn.xnuXxvXcxldx1HS_wpOt-O*?gYro,QăU"Dlf5MY+UQJ6--8XD1X+<Z?mY?&%u%%''u'&&&Q((>;M;;==P-7KHq::dCedP&(kăU"-6EfuSndPY>U1#Zl_FJug2$WtJh6hu7tg8lxw*0n=bi9[(4cq'Yh4b?mi<4Z8n&ăU">tLTTWHoAH^Z5vf>>NmJlpDJe*>F5\Bn^dwq[8taj*]btc-nMxt=dvmXoHalGtFăU"7lRh6nLgQ2$mNlwrF6Wd,hMQp4.GrZTp5]$bT7lq[JXQtWf->Ibx%%up()%9%%%ăU"7-%:-\TG&jT?MWUm%%,d%%%.%%%%ur%fuWSIuh'kkKp.N6P+EM;JRKjI*)tWAY9ăU"$%i)ZQ6>2:W:bJhRo<Wr?=+Z/YxS[KJG>g.7#:rAcbr0LgtslUWhsbhlEk)TkpcăU"PpA<eU2;7W,5_hh6mhh/=>YnnK,xt+8wd+uxxt8lxtNqqVNq#YNu#NisvNsr$NwăU"$PNrfNlrPNvrPNt0YNtpNuxpxqt^xqHuxuHxus(xsuhxwhlxrnxurXxvoXdvbstăU"h=5m88tG?xxxI#[Scc__gEZC)86])Z\0J7KJ0qS_u5XMbGXZ2f_X4&Th+d=Kj*7ăU":8zHm8+-85r?vZq*1'8<K=o+B(a.o7=8qvu2KkXZ#V;T^uh#i.q12icP05YMpt1ăU"ivX]wnG<6U)np-V[jPrg*#%KCDgka9.)YpqP#Tj+Xf[]#D?qnWPdj.d.;3l#qd2ăU"z^QdaMwo;9)Q=dPaIq4DZ?XNFp(c39n/NA%8w$h'Z%<<$H&U*/edV0c.q<o?_5ZăU"Z9j\q<:q;uT_ug=wdf86m/Dqg<aB$R:QDRGNtHZIdiqW-07CTG:?H>d>E9c%&AqăU"d>^sTmT*aYKIQE))iRc;GH5NYW)1?mAq/')-CUAp]#ZK86SMH_pQ-tT((?B3P<DăU"XgY(j$#[0]aj\?qChQd4KrDMh-HljG-u,fm.TCu>;F\[rg[K,vU/mKrH0wElPPwăU"ajNvhYBZ,=3_1WGDaU)#ucbN]ZEc)5kp,ZJ0<RDPs8cmSRx2A'2iu5hm\\:D([$ăU"'eL&SpHGU)G6'CpR.S?hxfGv3FCcC5N%U]a2Zfk4qUF='j?*[QOYyHR%d3RD?NHăU"%;,r8S-Wo]2&L_mBt1VPuJ<b/m'-z\=g<)IC0W?NYhGWGT?[n+JpS?W^Y^4lodfăU"]3d9;gU04nQw>Nsj#CH'az*LDV$G9_R(,,6hxluman%*rtzT]ZZr5$4y-7h;5+5ăU"2%r#JHsccKg(+x1hbMJ:[]4#pX8HWlY$to:.<1G[;Q_Z:Z#L%nEm'GKW^WpM^M;ăU"hs1b#NK_/-](##*FfKM-/u2s79/,-X]pM[^0RW84r3HY'U]n$7j7K\tS,87=x(:ăU"m[)hX:vTpU-.p\C$gelkRdA8H]wWmopt[(d)?i[;+_QGjVZv)%rE_5Jg'Ndgkb%ăU"(*&h,#eAVt(\yM9o#mA/ZJFa.*fl65l%o=tkI8fpi__qsK+h]lI^z+IO8(C>?$FăU"U]v:6Rd*au/m]'NJ'M%887j[0gG9)VnKo&Zi_Ile,k8LDYFNV&^?0[MD>H\#3%UăU"Q>I*N%;y]0N>tW-K+l?fYtg.He\6m4Lh&s)iM5KT/H#ni'H[-,+%r;RDb)k?r^aăU"MK--9*L3/_eR\;Gc#$8S\sn)/vFhC>[Dd)#LJWPIrU0r/zh*OpC27X/W-*b_hsiăU"<s^l[=KCQSrM9qHZ[2nZ?inrUdv:y:,UP3>G'gqMTfkkuMK[s.roA7%S?tJ=n+SăU"6'96&rInq?djtd$J*Kxm3:i9Ogn/:>ruKg(jl(7EQ]Y'LG;,mOZ,\3D:a&mN\XfăU"OiyS2:Z#$*W8O?G)1dt;URYM9?0$PeBx8ON1)+J8oysktct\\ZEJ2g^xt-+Uc/aăU"PwpjruPu/]<[x9>Vo&_-EWV,a#s6^)D&SF]EdD%r%LC5;OIoD+u-u?2O_D.J&*IăU"n7CY%g%B\]6&qSZ-B:N8b>]bNnB^NQp#)v8NKO^>su>hm-y7=Ec*G)<u1Am?b,kăU"^C#7<iWDx\63C&tF6?/aT4Cl-VN$=#7_k+8eldb8]'#s?tU.PXz)Ab1)UO+#)4]ăU"(7wwLXM)45s#n/S%LW)4s(p9/Tsa<-C?9#mytb;Q*-B-%>)zkEcl]RSk(IFwIFyăU"g?0M\X&;HlN[qY$GH1h2+It1(_7^ii=IfO'=pE$Atw%T\('oB?8_hS%[%7BKGNaăU"M;aa#oF]iMim%hK%_X(S+U&qK)<PXIUx).=]L_8?:n53jM/8)7dYJS.%%^g=nSAăU"B+B*3G(0hnSvbY>zD=ECm-/LV]b^MO_o*YzD>1fg7fHGcuj-rWA2CQ&dh>(ER;2ăU"WJz&BH4+6qn$R3FrT[h=>bqi9SmT[<&*:jnGoulN&sDz]mYn$S^L0S:X$SI0Te+ăU"]m$9&HIam\JQM\_Bj0wE,/^M#zCyx'b*Qh8/[PA]'/u%[<%pI9O>%L#kq(q(C2wăU"-Yaa%s;B58;W6,k4nhTiX))r0d%/qhKEGD$E^(N)p<EW4;QQbvb6Q5eGwXAxNnXăU"&iuQ:b%(c]#MInKZ5[Y:\^OV'$u:I+/&Um:_UcYQ[=#2In5lk%HOj)fbJc9d8h:ăU"<o80DR1A^6e*gKt5Qn%asOeh]5SP0Y$;M+M*-;L=t3uflS^Lm%E=>-4eQ6BB9RQăU"sLQ.iC;4L.x>+3&?8H.gkJiIkn*-XLLWuHKu#Q1)'P\/6fk6a)i.\$J'gC9GpPaăU"0k+rfm;t+-$[6bhL%WN^Z^bb<OMu<e3/6F;IB6:s,rS5^]u_^c^hF_QuroH2ftAăU"S^jgfAB+<mVT?fF<gL#OR^X+e?UhiV2i)fs_wn%nF/zb]\$W*YayaQ<*[uPgQ'făU"=$q[LsJVcZ1E)FBgNYi<+y-.C8s%'>$&)#Q;$lLS=<*L?3JS/7_KdLfMBt,-\V'ăU"NEF\fr-GJLf/bY-X)4/7#^&RuptIJKsv+K,-/1mX6e5$1.]ukH*Fhml*f;FiVZ)ăU":=$?=neKKA\L6X(W.vwQ_(-cI169HEvw08Lg'9\=aOd<K6_kGkVoaPUC&DN(*TwăU"y2'_>_>gorw4ErGs4_]FuiX3j%5;='#WnV-P#J-QbkkMQ7h]UZ1o7jx7E\$&Pu?ăU"1;d(_'_F,?%S[i?b4#1v\6JRFlVLtX-'o+8KvZbc5VHgvv$(R-K=WrpXBDoFXflăU"uS$\K&0o&DL0ZsraN;LK4&HjG.NY?w^&[W2g&Oo&Mt.O2K%[wfsn:TS>qnE_P=^ăU"zC9M/P/r2IYtaBjZHqw0sTmkFRsr%WL]2FtW65jYGA1wc$*W-9N)fSoj/qa\=9HăU"NK3+'.NMQ]c=Nc)7YrlS+b&qFn>BZ./2k*2&8w&I&'1+]dq(1A:*hgBsnRc0'$AăU"#AO1+Y-4_<p>+#bFZO.A#;>+-n5c.QjO$SqL4o5E*Bc3EA&OQlFRpJW5l/B1%M6ăU"jk+qmD7:[^0T8E1r9jLsuBv$[]f*K><ls7pL1*rX/1J+q]tsJEIz<0IkLfUk_UaăEND SUBăSUB V5ăU"1?VEe\SDD\F[wLfO/j9P/u&xWOSRPhCtE<O:S,UJVJ)%ljj-0ooMP:27FZ;_q\WăU"CCCf=%mukS\km23SKj/Lx,obwK.espv[XssQ(iqhCf1Gl/xS6ahK7yyI&3A;?5:ăU"Kj:*dGkb9H7=V-NfKq,*5w_7BuGPSE\l-$?Ie'y_q<\j]9.VO[0hoQt<qxbJon4ăU"r(f4n[P'mAhK^+8PHLhMWCEPHY1$F$7QTNceFm$S,1r(8.'ePRT7P.3=V6,#13băU"++i/C[HScES'EM*4sthoy'&;$0\jVTG(iC*9yQ-0#Z_XV'?*p<X%i][#8PJG]PsăU"R^o,kn38x,YJF=e0]y/FVhU=y#2O\Y&.f62J_SlZMt2#v#-1Md_AxM0q4tK.EMeăU"n8?PK+/rb-W.2szc?B303S*:l$;&)Aiv80ccthePNKO-h32om3(IV,35:F1=>vAăU"08,;4[*-[GWSr<QZ.qf+z:f61F-0Qk?kVp..FU=5[35v6xk7iLLiO:/65D3r3cYăU"SHD4p^nmb3TI/(J/eVNzalW,&Hh=4,Dts5%-):XX))^l_716YY$SDQa_3DW:0g/ăU"<c>Ypo/?<FdnVm7Tw;6&KEm1>-#winR0Oo%>o?[x#72nWxI9D(_Fs0_>h)[qy';ăU"7y,?xT$7:P6\-0kCn&AC28(HjY^WKv5F(m'+p3p\Eb-FGo+#%a*VzljMHTCzje)ăU"DbR1Xqjuq%1AfRvgX&miEL_j8Hb1cBW*G0NkMM$1K.6gcmi5Rf\,2'1d[6-O#jjăU"*a'#-/MPIQ#'f=;h[;373-a*$d7<]_q]XVV#8^4Pu-zp:zIrbqI&odS*.4I7.cmăU"5[].toMc-U.uSgVYjB.n8$OtH)C4Gu'9IcP_ARqkIh_eiU6;3-pAD;:OMGTPEg%ăU"-Pm;ASH:7ZK[qZ_l8FcEr<9(eXlZIkj3bG$R[*%^.O(H<5=#;Ts'M]PmWE2X=?păU"K(cLtD..]xpt4XC.c'NnfhcdKo0wsQcW6qHdC+],s:/5%):vGAAV*1OIW-OsLBgăU"5zX-4De)%j_8Ql?T%4y0%k0aY#.T4XpG3ueA_5$K_P*tEk6K=k\13;o^*>LM'.eăU"_1QN\m-+P.M5f+fin^gg:t,DaOY0bbTd\5lwCMvj,m^m6fP.+cmhl\sOtm/oGlVăU"4Rnj0Y-kKS)h;O-$H[;3o_:wdf[u_R;1e'L%S;u?Mh[Dl0,zWFtMAkMqeO;%J9>ăU"__8]a4$t)\&:z*OA=TP>nZSB=Iu($)/yD]/Y0N/aYTm.u'k'2]ddHE'Innnm:q%ăU"m,1,i=q8w+>UB9&>u8I[YKO8nWIJ/FmDxR4:L[d3O0D$(aen7Q%k+,'DfVkVN)<ăU"0l-):v5D75bX>^tl]8AQENXlOnbu*F-DI<rv+SH:UF8yFP7__47W2)6PA1p]0;FăU":*se(GS9E2O1W_-bT,<HS6Lk4:9kf^zR+a#l>->'JM>Y-)8U[^Pr6RN46^mqu&HăU"gi^t4?$Z.V934RI2%l-W?D7XrE;;vR<>Ll/G'7jfJQrqVWY\qq:8Ew8HHGOr%/oăU"9)7aq.kkFq'*nRNOg[7eXV&G,K:?IeUBfaLEFQA1+3yI?a3?&d1=ITNzFRhysIIăU"j%19999&v=_euD)X(8LvhF^=9UeICP&G6M\80tYLDjXE3n9J3OCX?GORsQ-'4OhăU"H8?N;=$lI*9F1arwRB7<U=2)3c8\O9'e%%5mJktvsrtOi'^BV1Wx'%yPrq>rombăU"b711OfNR4lAI0</V2ef3Nen,dh+&<\*(,J+cuyd(fiF5?tJ.eMJ'&u*no8G?IqoăU"&)=9rJ,VE9b>kGJY;]K'm&ko7s1X<][OWcsw3'uy^,zMTg8?atX5deO9%>5LmJmăU".KT</w1p582CX3VPK:WVl(Ge$+M;B.4C5.k1f6W<VA/F(lk[pA0i^9)FNW;wyS1ăU">p$slh7(4(:C)?O0Cj24XZC+.nTr[se(nr-++AU3UMi<pSww]h,C5wa&fQOo3R'ăU"lT=]:?N,k?Hd%oR178Yk&Mk*9qo>7>k0^&JwUW2sU%4EHTN7IUBW37yy,\&pznBăU"I6Zrn:kBAF6:U'.IZrk/]=X4E<V3eHc:h3XM&+S[3ElX*Wq:1Hw;&$hLotaO-_yăU"L;z:mWoKwRr'/mU3*M;]O\t^'f2)%D?%P?VvWfH<M*u\<-_rrmGe/fPKIem,Xp'ăU"RAD^,LNelaYk%Do*4Z$qzis0p\?w+zn5>%[9S?U_A-[DP<H4j)EbZerk^:[<ZW3ăU"k5]?u8OzL='&(2gc++tIW4v9<C:4JsJ&g-pIR^KuKK:D,$c^.JCNzLHqi?(v1qbăU"[H#[Kkjlf1.t/%MW?PSQrE)fq*/L]=OIZ2r/w82L^YHC[%G?9_7i'ff+s\1CFAJăU"U3Pv??M;Gs]DMAKAv296#A7(I0>U5I=e3o'ZTn:'I5umFe%Ir#'-O2#')+[ag$OăU"&V)y*zYeZmZ00O]/0HS,m((8wyBg1P%d=TRuO=k1=qqb8LEZvAcJKE/V+g/dJoCăU"eD40n).upIzeTDN/z33i_0q+Cn11Pb3)GAv+CzR>Z3EM;lt#IZ'*$2>i0+'IMz/ăU"Wr)K7G1hCeJd>e(h_uKY_b9QJREi(k45iA.#1K/=SS2=e\iA#\7K[s85]\ph<^hăU"5v6YY&R8xG:Q0kHYY<rTS(gN64mfn+m<mMiK9FfNhV1F4_mH:AvQ-D(>xt6?OCoăU"aV.)14E\#(PDW;>nTJZ)U(Kh+1w#q't+W5D(nPd4QK<J5ev>FAJN,U*b89#pzX0ăU"JU[,T\N)DQYGDEt1sr50DZDw'y#feeNi(1wN<X4B':j>N;O=Q-X+74wZBG5XIEmăU"y9?(--?7%0S#[/K)Bm/9k^V].Yk?q\Ltj'n]axL#0[]aUmQ;ME?Ds>Y?n:H+#c7ăU".n5\J'AUYE+Eg^KgpbZ.5gfVI]auVmC?RQddkMA?Z>sG_%VL.vNKp4yCjQDh7^,ăU"<EgM&s_9I]T$Fc:dVW]ya5Q:5$*D)DvfMUwn9T?).25j#\\U83[s2XEQBJ>L[vDăU"r/CkC\UM1cYFv<P(>y[2A\M(9s(]ZEq7o#[6>$K^/KntA+?7S;lR=nidyt?SxIZăU"5+2JNY<#w'rBJoQM#Q.z&Tb6-hZ/etWE_lZ$T:N3$*6a?zKo*Bw,16Z-L$3_Z._ăU"$EA9EU\L<CsBx/usj_,4kI$r*HK=Wj5eG<QxoFc<?mfSgvibA0:(==1a$>bMHCVăU"iC/hIjpfx('3SC87/[7R<BFUz*;w%gPSZ%X_X=A=e1FtR60d7gRi,S];M_mJ'4făU"f;'NtMD'Y7wkQ'P\LY$me\)+Yw-CXK)?(#/ux7$sY;,-5qWfqt/PBm>X61qj9K_ăU"jxW>CqlW8MQ[nW/>qiUJ]^%ZGW%B<_gXHN#aJCLBt=[cJt?Ro0kg$'0O>vGDxQ9ăU",AP64\I[cy;*JYioQs'D^%i:lJf2e^)PyioPH&T?Ccdr9Z99&:(<93.,We,Rn[EăU"[->4:23=nN)8S&#8Lt%W8K*;b4Cy:(fFU0nXu0gC4uYSb>LvdrVbiFr.s9N#i#DăU"e21zR\w6v\$sbW;W1=Cm+p39hjudoO;PD-wpq;Z=1.lf]^YK0r%O;vX1/rm^Z&KăU"aUGO3v<c<55>MgTglSK6Tp#7'*GtTf<=f+)XZ:HTY,]0&<c0?riWPDksXMbug8HăU")?qnjKi)vLQxnXW#(,4QGe(u1C=k'GVCy)mL1JjEioP=0<-_z_o'(tC(7>h%9]eăU"d)Ypahj-e_#-5<9UF:7x?iiR#0\x7<tdkbsUgV?BxKa'Xj6S,EJDv)WF(y3uLg'ăU"K&cseS7,0&%E2+)(=/Mf\3$Q+.OU3jbu/CX:/L7Y(Oi<c6F[<)5oAKLUF]lI/hLăU"fYsPh.Ktk5mqI'M3NaO)i<Ug:3NR3%'rbQW9]x=6[hZH4#rPY,HSoL9r^YGP&,2ăU"[_fAW#Wq<PX?)W=9>;Dd+KgIhz?&7<fWReU9d=O.4e%O1Aa8KIb6+W%S'C-nU8*ăU"cCX()=ivT6,d4K+cS^Wk&_gRYB_7=eg\NWDkh'2$d6Gb\u=+\jis8mqw/=i)pE-ăU"_ngfvt*opbM3rc7_tXO^ULAv3sLK*s&ZAFniUB-5X_]YyNABx>YWv)?oH+;5?fmăU"Qj\.)a/Eh7.F/<gdv+,7:AUk7AWJN1W$/:3Q5=#T85=rL#r,'c*V[j,7w#f#+hTăU"Y/_ZrcY:YA(ahT0?_F'l49GhZBLq(WCqlVBKs9q2Nf7e>d5jz^nHEVMGbV39\&<ăU"RChc:xMO_Gzc=\%dH<F='fYPK.&)0v[>f8)W)<<S>Rd4Iv*E*QsYcO0u4kH>EK;ăU"(E1+C,)Z3&3RSlSx)Y>naj1F;Q&_E;T5FjkkFmLG/$R'.M03csdG0lQeuTZ=;E<ăU"\'qxX6JLWDIlv%hLFKDi/SV&L1:%Qx3Xy9aX8uw.s2S.MCI^Npm1Hvsii\6,=SAăU"J3P).ixL)YIM&jq=<R_Trh53]cCI\b[FKjc8WK-0KJLpFPx*',EjDjX/=E0aV2văU"AKLsm1o_jvpdJ'ED:g$J?Oe2-I])lT(zZ;S&)Qp;%TW0<)gTWDItQg6G0tQ1?]-ăU"bw#d(&X%9#tCLW5caN?pRzauGy]LeIxCDW)+$O&bdXC>Jk);ajwK2W&>zijC8^GăU"jA=#\Hln2MT=N76/Jx;E\>qY^XoWb7YwaeQ1(+(RxD^RZN<9>VVP2^FKdhM[>*0ăU"9QVE(B:6M)xo_YE0R0<B1P(-GX:Q-+yeeT*+U]'+Ghpi<rgXB5P'HUQ&%%u,JL+ăU"HVgFeO2uU=1sxQ[ZCk3GlY]Z[BD8a89k-gQ+hjq9aPH)7s#YR$t3dN#Sw+=OS0JăU"]-mn$LEnlN:,lf:SxOaSU=</y3I2\>J\QpPGWFNO.h94IRC8'PorZXEtj8I;VotăU"D3Zb+^5l>k4:Nk4Z8KjGpT.U5=))OqY5)LusKS4F)[%>ZAv(W'^d9^'Ne\kDN^dăU"ex;\7,0B_#y-j&*2CZQI7zJltGa/L8+>ip:D7382)u1gRsKKmFK_<COIpTMT?OFăU"51wyPRAD?xr+kPVmAvHm(u:e%Ra2l<A[g(XYl3_t-Ur%%K*,9JAV7e9jCpfQ)aUăU"8&a2(>5)\w5xBA()Y4Hea6wOI<U%5r%xIEPv<T6Y'9?7R()eK9)/uOI.[]XpuKXăU"uTA,8QmM]hKa/j*3)tp&NA2)z7[+G(H&#MyH1=J/hnMsk<Y%<kWN9+ogs^t$25OăU"55:W(/?]_TY58M0(RkV#e(J'Jz&fBo(.mk?PAq9(L1P5^A(MU'T*/fT,1.ToRgYăU"aE+wfe6a*B3?XQ7g'&y]neH-\z0u-RY^R]$svk*6L3dUUL>asmbfPF6U?OSur?săU"j,]c'>Q&,;Ej$],YeC['PKX3y5'xzx\P].%9DhDxu0JYoaq_NWu:*ZYBA-[(AdjăU"%bOW'(69rni?.N+Ml8Pc.\z)RdP)W7+7Cj6i5w-52;Ie4[YrDCzqIeKB:<I-Z<_ăU"VBnG)=U^d-.kg,S*DZaRa^(\3D?8nXqDZOPZ4q_7?*L&#r;u/H%K,k:svYaUYt-ăU";E$h(n*<,9iUO&rw2SH(EP$aaIG4)RorqY^:Kf^PG^pP&T?c.d\%h:SnOW'*80răU"\Und>/TSZk5niN1P4Tf8SS+04<Enl)mQ?W2JulsKDK]zVDSK*ku[2(?g^E^PZ2:ăU"VuUeOQbFBmn(gW;[Q'&Ihn$>aOsLY+9*fvE5,D6.]&8&IjAlp1d;]=/l-h7(r6năU"Y0HX1c/1r\sB91\%;gLdb98X)j.1WN9,9WF)4=qR;S)t]oAs,\+n[t=S1:ft0p2ăU"P9^Y4%pQuy:0pEh6WNb]Grorh^a0AT]hvHQJ\/Hs(&eE76JW/O5]B:[.LlYIFn%ăU",+L'TF+H4_*-J&>q:h0=a(TE6d6I>A22%f')*iF[TIuT<meJ,^o)ju$U,/.CR]SăU"kaNq,CH;Zdtf2b=W4UQ,**7.5Tq*T4#Yzrhj0iR+Iqq[<DeF#oP,dO=[':>3%+PăU"Dd[pf9Cm(m/DhTgQJ_iy$3*ow4#z6wdD$m:,K4=]2<Rh_ud96d)mYERv^,YNit_ăU"'[sCj%8l>(Ia;fQr2t]Bsr#/*E_A.)v(,^c%2*5/<rr?fQj3(;6MB8h0H*)ZP#6ăU"[]s?Fd?iqVl1B;/k*EuFq*4TOCRj\hn\#EshD\:e'czPR^GENi\AF/:b;s1*C]4ăU"7gOoVgi769/MKm4oA.%bSxo8'fP?Q':I;?c)S(5Rvkpg>hISOGC9-OeJR*0H%OYăU"82Qd;d&Ivu#j]qESdf>.#YGM1)x05p2:d?G:L1cO,=RQdQi=ZL/$,W.XhsuW,7MăU"uWF*/ih<*4DWO<T4u#o&G,4+f[E'.P:sq\cASy:+;fb7._h5)C%$L0BD^\'/Q.&ăU"HA5r=Sg^JqrjQVryXh^?an3UAjY66)?>f$,TnI%R?\-IyXdv[IKFRjeX)0uBbIJăU"[p^AW6bapDYgP)Opw7fQ>XaAuhz(v$4ZE.i<1./AO+'-2h$3W2H.d\<VP<)?Z4RăU"*,r/<X2>:p'BN+Dj;lX3XJ<2#6M'')M,Dz%Q.6;Uj\VFE6lHBg30j^']%k+T>kqăU"cMMsJxA2m)-o$gn'e<+/2?as*nLsSWEnV\JO__oHTS=eW4%Nh_VWYRf2*;L>'N3ăU"h#1vLqVz%.C7I2%#LdHi#IRK#NU&l1[R:?.;42)-[#)#\<lR32$r'lT0P=T0FSiăU"B4E3Dm,$,4t3c1J*3PABv[<VS\KW1X8+*J_VwEtBR-GJibz-c&%ZM&Wk3lI#c_4ăU"^sCSKMt'FUg=zcg?)t=2T:i8n?jxS>>rNHkVvjqWKeprW9N36f\VgQ8<I$Jn#pdăU"YrAw+Hoa&PfaJhYDURfF)Bc_;o#i,7s%Y(4Grg-qB#lGVJocgW.T6Eg,$ZjNWLtăU"JjB'iVJEh?-T0*RmpYxo%ja'&R\.YYZ_HlC8hbZ2k;qOnf)JZ&S=TQM&cF4Fc;oăU";r^P,-+oLRADcB#95]pIVBV<H=>(Rq:2GL-L5OB8A>gb-'226]XNJs9f(EL,yFvăU"ukJS),fVI=XbVY=_Kh?D=j70.w08rIq?fR6?/JmTCYE),J4A4a)>4YmV46Q09?0ăU"dUHyZgyc$F.#?(6*:2;Tu)l9-DXxWL)yYQQ.?HVfP&P$?jTGB3%GdfcTJJ^3M4uăU"B<^GtJjtcTH*N[&q2FIGZPh=#-u'WewohI5jei5K*Yk)6a'9)97)05zx$=lO)3LăU"7I_e-e2v*d<T,7LwGXzM%re>F%]]wuR2DgVPX+FcXw(tHpfZJfoDIpZi:v5r(P*ăU"A7wIdscSBg+PHde\5:.OQD2]S)Eaa9SPCKGw4R=(mdmsJ_1mgyK2/Wr'pUhO&tQăU"m-]c=)(KD5>JytTgI?QtW_4Pm<vk#aYh+OUbSLsE3++'xE3V;gd;gl(54srE(:UăU"JH0fo$oHoBjW*#ll/fU?a.;7Zr26(Vj4hhvp,3x:tF^A4GVi.m7e=LeNR4E;fTGăU"j0Y;T7<9D+9RY+2UqIcS7/MIqtO4#B#6H-eHc2SQ80#2)'Xq=_cMrCom0fIjQPHăU"w/KF%h><JYD-&B[%\R=HaV;OZ?QKA:ugwzAOAG]:;HmeT]UnBB_N,(K51cHon?,ăU"/dvX#lp['/<sU$ogg8G<Xp&Bai_pR,oOD-V^cAJHhCCehA-qYc)2yPHgU4Y3JHTăU"_25b,\oDo_5&6)0ksl&)wMh)nsGj2da;SuHI50QY<,/LsVD2q+t61i0IanRX4VdăU"YuW%R+Ng.<[9Go4J/Lyqh64N;42V&hA'BlDAT6_FXCSjTDZPZ?$[)(xF.CF;pI[ăU"gW?,h9f8gkHB.Vl^AU;GigdAbEuBQv^AZmQJFd4WGpZg*40Yve)9gIg9\:ocRz%ăU"MKMJi]u7j(F+q7^[SH.[FIZft.bSV%SB0*S2_mQ7I)QP6#6iKX_4KP;j.l:JNppăU"MC?E(/PWI+x6[CZ9SDO:umejpW-vQe156NQ_H'?smC[bZ3TW'47R./]Y;d:O>4]ăU"LoSm'xpf+\t3CbUd3:r;ro=9*H;,^^H'O(Cf8lg4jRm<b-R(J;g9=I,q<VGxd##ăU"5=+5J33vHg0&()2DiJLy2piW3#t+2/ZX=/x?1I)j<FDM,A,xp]la<yDo1$AIu?tăU"Z19'FLmOSm#h9(BpjXUTb+0CryCH6s3wDE1Kr.;J3G6Nm(uh-s0:jG,3R7o5,z&ăU"\#ua0/]+j.cCO$b0bV?Hb4l^_ncxGW?b_cJkcH+D]l]DtaO<4[l3DQG6o'hfo'YăU"/eP=<R6-7$n-W1?rKN'sUckP>ClG:UcJ9kaKU&Ssro^ene^oU%Gq(_#cd.BR_'kăU"3?8*w4p5MSW$z;:_MTTm;&e#N>;8#/vk0'/p.n+CA]-Pm<'AHjj35tvPH.O0AKeăU"K&)T(6V1M8BQ#GgR.O)&<Wd<lKEVRw.bFvsJn_8]enaDSek^Lcc=j8q<sSZ\#sCăU"$Kmu39BtVohRUn3WX_;,,c]43rkSaj+O8l;%j?;KQ.-\?eT>T&Y/DLwNe8OM9^kăU"TfB+PCK[D%,0[901*+#=Pg/,KWRo3tldR)NKw.pp#1D=px(MFBw(,BCiVyDE5kAăU">cOU*S>;Ak:Az#27el&xTm++)X$9p;wH+#t'd]6U:o7X_UKRXv0QhRB6+tB.a(HăU"6sBFXh?I_D^U2;F;V=8O3&kgfP],d5bA<q;>W1*Sivk;j2MrIRLtl>ZM73do7o6ăU"#Fnrqo48I.Zu*wudyjt)H4\s>G5YG9UsmTs7NFx&Y^fVfcCSu.d6YefUb8Wk1+_ăU"Q:&eu)c*)hIz//I0m#3BcAcM;z_Z]b,AiGk$,u_E2l=<][*p^FoUJHamTujq];oăU"Rx#f+V=\Ug>TCPF[mQoKkEM7f7u(e-;rYy..6t8$Vc%fg#oT,$5s]Y(C>S\'pWXăU"w_bkOncS&c=a+'j?\?G6f],sOLi2jiF%uRwWIpSZ'Q>uz9Ba-sUc9hehMuzL/d(ăU"pe([YOz%sl&U*+8^4=d)88Y]*8LfnXx_m'R0<T$Iy0$ujX>D>A^kJr2GbkMdzf0ăU"Hfr0fUS.3?(+h0AP5BpthJFbWG>V'q0DsBJiQ_22fnoT?\JKi6#(ZyRQ/-Z?_#(ăU"L1)<Htt7opPj)avP:(/Gp'[yx/;?)L-*fDP?*CO;n'7$Fd2&wC[7JJ2=kDQyWVOăU"woqt4PQ6.5y_5=<1:#[sgfWv.iDiM1?sCEk;5Grka2GbuC.p'e,Z&'q-Jhcb4:\ăU"Ent0$Gnk7;KTj8#^%A_%wn7ndRl.%,,=/&-5GH$ejkR]>?b:4^MBBCA0bo/u$-$ăU"F2B5A,'iDxtKo?+5jGQ*^)$Hc\)liO(=6d:KEb1?cDh6R-+>N[?4kd>dPm2DERKăU"H[kz%DRC8og+DM#mS+bZ2F^l]UR6H(61G+Ud<Tk8n?>?Ao^PP'ZX1wmQ2om+hV<ăU"?XpjBZuM(u9?['zyB+R1RqHT-fBKKMj<$I-?g1X;tlS^As%<Jpty&y'vP>7(S%EăU"Uf=M2J:r/Ix6N*&U\S$:lv.B%vKvf-)&0Fa6d=N)RV3l[<'&X_$Q^l=;*pl%7/JăU"M:Y'eaZE'VWRvU1rK#tl<#ky+C-R.#\t>A.p\=-C'<DJP*M5-bz&fT/7Ejk^JE_ăU"cfg7CJ&jsVR&GSR'-5JdF^l3h421I3L#9J'$9gJ2+]zf<i'AN;-_js:.In0Gk:kăU"eo\Y3Al&E\XS5td'6/S]>Dh>b::,8>-BF2T?WPHfbz%;K*9\IaBTj>lCkv^#ccEăU"^2)//&xUTOp=ZA&p>P+8X^d\*U;e+c+4MA$0YAna,&0Cn0gTKwPumUsZD.zP(SEăU"Rf-Hq_DS*0k'9G53,+q?NfugMw'96sg1RVCxT/1'WSb#tlNi7/m1&\6kNhusr4păU"e\R*4ib'fe?9+]c%C?uS5UTXO2$F))dM%GAfkO39)8mi6]JJ3pw_oAzYm^]lsZFăU"p^Rn*\X8jJ0>vlmw\p0''JSY.2E?:cJSW^D^O[AO0Fz609l-8'-A0]_Z=aB#X1păU";DKfMc0mhFaePQ))bTj[5cA;rai(<djc,*=o[bm3mu;$Pk)139;P=Mu6en#qC2năU"3q5t9kM0f6&FgVH#k<#)>AdfwqP#%*]Q/g:&Rt7d>D]AlidV\jhNjE00e=,0^hrăU"lP2v,P2JD954#'b9nY'/+_FK[ElG&jd1N(Q)hu2HP'+Zb+/=%2ODbE%p24^Coz*ăU"DSb%=tgvCj>nseQwQHYEvo8xD&sW??1)jAyL>XPN<1S/tvOYI4mY]5Hs$-Q#aF(ăU"2GQnYWS2oPN#,b_%pReP&9PA<GFOSB4)'2Qun]Q<+7P#Z<T.ht&0hc&TDW0*Di$ăU"Z_<4AKh3;Vo^DU5owCvGqgMhCbT,;1GCuM(7E-wCP>kuD]ecVnB:a-WkZGBSS3kăU"+w*>>2;Tkcg[G6T[hs57U&_=Mvitla?*-c'_bYD_[UU_=s?'sK=2]pI,[ZWUiwoăU".ykcT$]N/K>Oy*j#0;Xl*T7?ICZ/A)6,2VDf(d=UEGXVS&d-FZf64A?$Wv,?phVăU"Vu0^GfHpFrBl<5Nlcs.p$#fFeImviJD%MTg#mhpPQIzPeQC8ppz5&ulU:CmN*AjăU"f(q9vZ0<q7vi'0QYFh>kWuf>>?A$*m85<NVaEF]_eK:'S^y7;dQ3^=$*<YC/$a-ăU"jLWgQ+h)9UY)iRDggl+B3%A(yms5nL'$S^cP?^yU'iRhLlW2:gqL3hXr4Jh7gaIăU"Gxt=iZf745Eil%p>Wr1MfkbTl+NI954].D$A-N%Mvw\*#RQj'%,Ito?3JJH2VmDăU"Rxh&<o#DMRyrkB+B6rp]/_nNmZ9N7TW.rFuAI4m^iD7o&ognmW$#E+M9fRV8\ykăU"S=_X#mA5C+?57C%f-.Si.eW7t93(wtLJd/,5sC;&m%ORj):HE^H?2xYF=q><H?răU"qjhqg=gYXA]glR4-LwE-&S(.W-zJZaYW,UU'j9FR=/]Eqq[rN99Lt?B3Lq=q_OTăU"+q_;XeFxCFX7,m_H7.mC5IYiwq<(Kn*_+Ya_/PJCY]MY9gs]0(/l]H?R,bllW2zăU"P=7Y5ny8_jV^bC]]:k'Gk4PG^iLA^E1*q0ZU2QtJLH=E)mV*%clDJNOnLlsjrtoăU"oH2p-Jv,DuV6v7O;Vz&aSDJ)%k^Hqk.1GXb=nU#I4y6%Sp1F&*'SRI/sSV2Chy]ăU"8S_c6CLRqsBU66v/hRh=.m^vhnr>GD69vomb#$A#Ci4.;HpymO?+*WBzKDRcXgkăU"*=-f=YFbC/gp$.Brw;aDnRaQsRBS81ELr7,r)msc3xi&$a[DKDLni7tcvqDmKsJăU"(Dil4dDaKmlqJR4r0>j$-N]p<o9XQb69YF4Ke*%P.t8l27MUJ>RqDU?6SM8x^K]ăU"BFdRPy4bL1sYpJ;JVYrObMt\O8ZYPGmCO0B^[Ea1)D.ya1'*4(Q:<d9kL#f+t3=ăU"lCf,t\b>EfYrw1pgxOe*TN5sO;-m6Rf0(-[lU#sQqgLG?pJ\tWE6k8Z],HnJKF.ăU"M^&bdroq8rmY2qtb\^Dd1nFlDMmr9\D[<nQHb$w(,uEw6CR?bbVOY1o0d;USi(qăU"bj\<DWFbFN.EX*BU$uZ-HI4drS73B0sm?;>pk0M-tx]oMs&nJa(4:Fqtk#39Q4\ăU"AANokk3=O^4k-;$Mx^7&tIqaB9LI;';5pJq&['5d>IujL/nc$T5mA6t_/yarZ[DăU"(n>Mv^<Ot7G1XcxebW#^YH]=\WumSFe_inzQGH$kj_X4_j0/Rc/\ADK3n%Asxq)ăU"z6l\n0QPFcQ03a0d?O7\<%/SS2=Lu_d*tNg$'C.uOV+h1P$]]N2ucrJJa,rRpEKăU"^135RXhEk1OG;OFY03y$u)UEv'0T2\?szp=b-,oaA_Ch>u(&:QGfsFkq$RbT8PQăU"*nNRNt8asT8ss:#Hoyr7a(jl]$nAq2IrZm()x6i4F/nTtUsY5+6Cfh<erM#rFq;ăU"lPo]Cgc[m(RpJLCke&qwFuG2p7YNNWnl__$'b)Ob0>RWp0uTFH3bJ+)ijM1Fo04ăU"B]k\r+.9fw_KLrdIRo:5#+F5Rx(VNTvz=/7d\8<jHHXu=-BgbMY&0pjJ.]bQ\WiăU"8L&Jq(,vr=<)lpU](7H^O.dvi_hKtZebPQuH8s[E,^.9-9i,'Qq/F=lX30'XF=HăU"l[c.zCmAxMW'*zZjR/:Qw<Z-Jqm3<#N;h)/i%(j.KR*LU-b+MFP?INb_I+3*F[,ăU"xM%qUB(=6F+0V'sFOT&I<1L,WUj(T*A[)^*A3eb72wEkXLinO-g,k+f)2_\A1W=ăU"f20;BD(gu7>>X64V[Q6QXAwc:o:dQs[2caxrOKputjAL(;mKoN%g#=3atX0gMQZăU"OSH;U06G8fV#5o62P(kz5;Jxz_PDO+Gdf##;)8[CZo.W;;>*T,$<?.$t56afnN)ăU"+'3#iVNAhLCuFo^wq57qzV\JJTq4><'rJHP91VyKOG$PA)_G,<,MD3VpQ/n<?q^ăU"(my(--O$1tH-uiV6$sB0#VivHQu$keT-h7\Ti7J=YZZ$XKcv^8rbko'*j6OiFIDăU"M9.r2CwEDX2vBZpeUY8$W?z+_8fKND;W;dxK[&Ih>xzp>%&v6'm1yi<-lS$-D\3ăU"a$*gpu&<sOC&-9M;:=gTZ_oO%K0?SArE'ZcX*enl+a<>26<OlM?<IkN,L+&aA^găU"qI>DdoBu]i<#HcQTgr*Cd,Y>^4>rfFX8__fd5PKjlPofT7x9o#1BgeUIn8gcw-[ăU")#y]E?Jcs_^:e<3]<gnM=UiY>Pd+JL0x$rD<Qm2Ifgo.X1MJ+g4ewG\+w9Vc6MaăU"O^#wg3%(:ilA?QqehBj;h_/,xgf<&rIN8g7[r$1a-us2l.W,.bidf-:tU4i<9ciăU"BX$dSuOJ,eahuoA,)q[XeX%e4Aj$rXhh^o>pu,[d=cuQImz&OT8J5?abHc7Vo9căEND SUBăSUB V6ăU"Kue=x92MEq;0yE,hP*kiV7j1Y1J9M(&F?V6egMM$e0mdhbRDonIkPa_A;zvHX(iăU"TFRp6xUpi-t$P,B)]hX)tV+=LA\lk_\Z;r9#tT=c[cC>BUMM2<Qg>PBT;1O<7-tăU"0m*\RLtL5^y1Fp<1JX%'(c*eYNvMMBlACLlj_tru:5+)gyi-60qsmd>JsN<)n:3ăU"d;I?H:.LJ-<iHn#?mC_AK=i?.;\Z$qZUjSbI<Cy32sVCJcDMdv2PDmiff\Z2%PEăU"dJDnptkhqNt4om_&IC5S^(ybuggxNcs+UeQt^,Z9$sUF*Qd+i/y#6IvzY1(#97zăU"lwL6HRxb5Ep(S\<\J41Qi?6.IrE6H8sjG7uHZN4q^cL:u(o-.1M=99aqu.viWvFăU"HnQJ:nN/y[r_5LqP,=RM\xN#^)We^e7ct%d1>9,wAWjVjh'k*g=:uJ*'WF1awEiăU"<Q*ioJm-JHN?iF4\&NPa%W#;?4>mrYW++B<lHhlS(\<I\S2OW^;Uj>A#oT61Z_4ăU"ROhg173^5%q)0EnveRvRJ<aMm5dz+DaMzv$6?X7qfAM*8.1FK0YIr:2/J;8nG^jăU"&X)H8x;UlLTn*dU0ArE<*\lB](CQ8a1q_DIGdU]L$y+IhvedoD:(2#ScnF%hy%>ăU"kwG%mdG8p^F_unDSu,w,a6-Otq9kZgLQ:.sl4riESL,aOERo]\ql/Ze62)LVr3WăU"nUtNQ7LQa%]Ds=K*/99Uv3Dis,^deH8s-,$;EKn7Mtl.8I^VK;a6]T9VF#r&C0OăU"a70#m)d5qrg*;q8&3G1nH\^('dEJ]YPY]#?kfVQEGj[/Trs#LgIn)%uMh<mQg5MăU"=bhULo,*dxyQxZLS*WI/cDas\MuLpfk'rK4JG45F)%P:]=G=-=rQOHkzBvVv;W,ăU"jYpJ.aSsGU[&x*\io$o0:>QmSbrkn:9ZhqO.kk^zbmIM3/wP36PXYRZ\6=KsvM9ăU"0s6^aR*8q/e/5KlRytYbY^F\VgD$iVZ3rWdCpW&<$,?+tY+H*4T\_eNW&)?TEQHăU"ArdE'_fSI+gus,ih+47pu?,Kx>)DNySyVTi\q0heuLPohHP$^n[fm/_ZooAWU1QăU"W,Ao,y-H]Z6>ml1G5L(&W=\iYCY.Dj,=(Q1ttZlTYpPVUDp.GuuB$;:8G?HbGroăU"aGF<X?2m>IRq>SoxjQ8=sU>viUMv/<b80=5)+%Y-9X&AM+Ov4DRK6ZSJ)C-a(B)ăU"eoPbj*TN&WX5sn']kN9vT6x?LXqfuO;tLoV$P-P<&*WkXsM*UM:Uq=16NoEqmD<ăU"JB0C<MU>-OXx9VR\_4]N<>IP9)WMXN8NR$Wau\_cQ1TFr\bK7dRV%Tpg>OTXtNAăU"7rp.80Z=V5IY%<2&H('vH);iM+]a'rrLi(jMKh2G\YdewW1&[f]5NxnK]QwTnT>ăU"zhPn)8?7LA]Aao0STG_qjbNDR<TK,[O2,8rK]c'd#?_ClC1,==b*anRIKqF/%1BăU"4-X8&/&wq#f>dD$Gh'8T_$<OOZ)\>_E/kUH?mLpa:0Uq1b3pp?1plT3O&XX<]+]ăU"3kUHqA:D,/:\;L9\vo+598U(-S\rIdlM<>7xH-SV\?t&RZ3=SO-XMEld[;pv-pJăU"'V4F6WXs/SIm]xyOUpEOR.Moz]1x1l-2^%c^\i8>_pR^o6hVR\r:z/Xgc&>9L%năU"2Z47KFQ$Jj5-Ngts1(Z.lW2wJlF5RoCp8Zhn3'?VA\Hbk#G^Aur+Ok,PG?)hI6.ăU"0;F35uLG5X?oQw+&A((DyY=G,xOH'GSo>\hPn/tk>e>f\>1xZOLlU_LESWWm(l9ăU";a0>))+aF-C1'IB9$>:AFelbDe'Vh_%)?V%/_o23UdwYBS^ioGh9FCc[C'G-4XJăU"e#P_Y+;H']%s7JDxk>p6x38&:rxWcS1\pJO5-+XwG0UsEN:6oeut#SBQ>T(yU%;ăU"7v2OugV(Sqh\4U\U5)GkW8C>+$6M0#W9eEf)R>2X*Zd$):yOP3U.0q>qiMTmj$lăU"Jrk,L>^=\_0-/VDLejimwm#EuE'7CewaR\e0M,ZL'-e\]V\dl32LX,J)bEMOqFFăU"NN[RtD4BeV&:U%9reg8f+_C[8J$]^eHVlhLxh/Cs/bW]+q0+VQ[ZL:'1:oz0/S'ăU"qP1HU209RGZJD8u?U8Ao+BefOt?$Wm+8F3IG.su=_f(1fV0b(F3RuC7H7SIhT&HăU"5M-(]S\i#'k'^bpb4_+T]4rl8#68b>shLY.Y\>tTXt./^41incd5uBw^nRi/H^IăU"QIwQcJS,aN2UUm-'27OK9sB%EEGgWP%i=w23#.[2PE,,GKTUwp>pYC\:tW7Rbc$ăU"o7ZVJ4C,Ghh6HhsR^cC%hXRC/hmVQ/*ct<tSn0UJronRSoa.n^RhdFoQx1wFrWAăU"RX6clDh.u]YXII<9G\g=Hq&$bXAD^UTjwyfbTjwcQm,Z]bEq%Dq5Y&)-$gahJyLăU"YpL^hXerSJ\BS:&B:avT<15pH?T3V-]Q#*C0kR/NL:ALk#3eIbSATASHNd8svoaăU"#.=idjs3T0;PFG%L-8)rFp9L;#?qNDe7S=+bg8/5.'L8ta#Vfuw=\6&<e[#)AoaăU"MV]maW,6G-=yKaX:*vj:43\hdC1F9>[Q4'#[5UEwSwl9rlqdu8k$8<s7#awz9LDăU"^T?i6XV7mICR\GQr(G-75_<cvSK,Mue48T*]W82i#S+u_vf7Ex4xYP9._qF4EmEăU"NcVQ>Jmukg6Ev)LnlbTC#.Xc[wj4>o6047#z#GSR\D$2W5W2wpS/1gpf>l%iZ,zăU"STthb'N1S\ah=1=TZ>&=RThC$_ZWPJJBpDvxagd%nQcrF7p<iWO.s&-[1V:M<mUăU"pwKfw:][;>jwsowtLXZZj(L<%7wYrv)UH?w]\jY-*tG-jfXLnVb]A.k0Z[_a6s2ăU"lZxmaQmQ:ltkGEYWM\TP_3)uv4Or5dY+#Z*l*j,bh')auD<.]gWaj&UfuS6TP;găU"$F2[=uM-L_[EN#;D2.LsD7-/GLe%V)pN+$oCU%,4Db&T.VIU'mD<JE=;xDmKjI9ăU"jb4-e.uNmPV[psubxKnNW0*&Y&OxW*iOR;Lu2VWU/w=Q&W'Gj#)y-o[Y#v)eZJEăU")a\Mme)lg=v=V?=;p09ke-l6DYeb=2CLI]rXmKV6FMjFMNlwO6fkBX/',H(PErOăU"?opYk,p-5J&D]jYeexDW.9VYvt6G?8t8AMqnFQqslL53^)[$P(4uHh,DgDN)vm'ăU"N^:4tVRB$<.PYiy(0eMU#)R4B4isl4O%%BcHnPF2:k\Q<V2[6U7K\6xYKR?$AXkăU"ozDIF]S>q-eW;wg,xQtFRBZ3EIDQ?%2g'?NW3.1I^0Vf-N+YJvk*pjK1ldCBp(/ăU"Kz2\G,,tLfl>y'Mfl8wX]POzqSw5f7PzjMGD,YYsmptV:DCxwId9fGc0t<jtB#^ăU"#W7SXyRZOTuk?b9hmM[ZQI9JpVmngpVYJPf+c1?D't'CM$HU,gD/13L;W9jNHMiăU")RB9I&tk3/7Rx-cCeEW&zL?9?+mKWA=?;7;v]e%p*B?JXi?am^Q#J87$Bgm>?q7ăU"7<T4/+sa2\BVOU+?QxvP*Nd7AS9w:qnkJsI9o*\_Ms=g=qnrkgl3)cpW\Rqd2MtăU"\xp],hOuF<?r)p:\[7sP<HcU;*us\8w1.KPi;SxyJ3?e'T$]F$ic8BZja/D6Q9ZăU"Nf#gp>D1d6o*r46UXUOOhp?;)Cw+y;TLtjI,P8[pg<32#bMQplJ-MhSLg45H-R<ăU"bbhrzG\xezAmfUT8P?Ztf%P[u6t%UWUq#fcM3IG>z$OxI$tfP]FQTMZUl9uw6e:ăU"AgxTMcroNt&>K'QrucEiHw'U/0rhZw20lu%8hDDUQ[9ifqh<g\n3E-iQOF]*q0hăU".93*Y7]\aQ4SNH??kdwb8xWxqG:aYDW26%_'?)hwZF&)>rcjCu0a)uTemOnSD9*ăU"NZggr.YD5*m\('xGWci>jUnk$(KcXG]taA\\Dq78NI$Xu.7_9'hEVzmiegv+-BPăU"Y>tj5FE*/ND^lbQPff.qENQvsvu3ts\jTgNXCNsadtzjr7xZBRbhgM>zW?cjygKăU"NEdKpJ]_v[Fe&Z^1>*)&5fE#fP[nORh5(YH1#GW_['B.tw/-2ImX3,4d/Q'<JZmăU"R123E:uEdifj6><nbBChk$Vl#;?.%]]<F/^]1+.n$g9qN-nfU>i2+FE&,;gIdD0ăU"h5\NHTvG$OM<#uwh=.HnlnhCchfE(t=H&pdQ[$l<6\qCPscV8frw,u7rtFs\t>CăU"(ne&BtA?L>nhtk+CrkPw*7DcP-+R(dl\ZNYT9>[8ue0_P#q1:uzTst[=2,(cRaYăU"$:>;f,ll)&[1-#9+jXuG5(_,_*riXhsnDSoN/)hjKJXJ7s$gY&_s-uiaORL&(mVăU"_/ak7fTJMgsdAphx]+1mAXF34wE%(>o8k97o%y)-A5ognqRydM#Lv9YFpHrld?_ăU"0VDbFxcwlMvVg'X$gD^P)DsQorou^Rf$VgdEKWNKNTjRL%J-t&8uu[Xtdr:]RclăU"Z8oiR#ElyMMi7XTkI2VLO<a[l&E/Xa.V:^F:]h+1:B\%sjX<c-\EniQ;k8Ls/<MăU"r6,%8r?'V$GKDel6x04hU%ig3DQlZg^$1D*KF%#,ct/bPov9fCIWRk]pBu37sa1ăU"8m7altffP<]DUi:b-jbY.Bh7Yx8a5ld5v>,B5cwsewIvXlvqls'm#gUdFxtutHjăU"#ogdbPu8hw&c/Kl3kdOTcbv'1X)%w:KB</'e.Z[Gk^:A3:N71KXqM)>YC25H*WbăU"AGh&vR36_DTSF7fcGn3,3/1s)VZ<#UXW,+&*lzC.u>:E(YOCkt4bkt&K^&E0d9?ăU"pdQ^k5GSCKu3l&)azBx([G2k'3k;b$Ji>Pi1*\ADb,vyrK?\nJHJtM$>cg=6+_6ăU"g2q'-I8[yEcM4ntL+TBF[&YNfwBNB?L+tMDgKsdtwsp&B[x^&Fxi6xZOb6tFv$+ăU"Uuo=5d_uNtt*(=>R6I8Pt>TLqD;GHjQ*_/[wJG=Cg$;oR$5'cP%Q_x/^BLQjY%aăU"P+&aKR,j=HjlpK7#moL'E9G?Aypg]Ur^>yU<tdR;V3pzb5)V2:=ZeLXIEwtZU^DăU"j3muo_spdw\F/17(?HkL%WuttuNjWr*p.7$6L^aQUw8q5*NK?j$n)l_rJ,2Es9ZăU"J-vk)Lg>n'T>*'<I:Suf2.n_b3<3s0+&JnU%:w#vIUL/NYDA:+4q</Nn#Xbin<xăU".eB*vGE8L$NGM]X*)p&U4Jj5c7l.6vkq0AmX/Yq]/gd^O?6e'ci<?=NB*C;%tsaăU"EnaoVSI'v>nvoPF.Elx=jJ30Hu#s?uh_^6#SyfgowCxa9w$:/hVy-aXDr+ITXdWăU"z1n>,RehN^O?v>$)ifh;k$=yl7[QalZk1A#,$#c+3<.x=OG$ofI6kSarP07pG.văU"LxD-TLX$n/Rd[DD(Z]#;3p,I[g07)4&FaovcTQoDO$)1_M$mZG;>wOy.tQb-VI?ăU"WdfXct$3(K./Cv8IHw(&F([v*;64vh7BbPlWxa_MQPvv/spv6tu84xRrvNmlrXrăU"62GK>$-'8O>PawXtdoNs-7LlzuY/*momd1E/YV.CnF%NyGP?U[-L=O3TYG,eGoLăU"li.wAvlmiG<SM_QY+F]p\x/0KCuHo<d*6pl&5s::[qTnIGv3E6t\cZ:O6m?k9GkăU"f?+YQ8JBa^OM_%m/:fukeclW,Zp$MFtQcb6-DGXKs9]RN+<3M]?.$(d:U8P[)BxăU"xbLR/zu.>Td80cTdT7Gzk1yhmY.crXJ0VHoxTpbI^j1XRUh^m6OA-,#pBPS=ND>ăU"koquHjdT,B,X1T-$vgb\0ANG85[$A\5\>mE3oIuakw+pS]#[[iQSQM8cv0NT..LăU"5%H5(b)d3OrfhL0[QF:MnHb&:O5d9spYhAX/Sr*y>0a6;<PZ]?Cu3f\SaeK%NcUăU"('D=/<<&tiVNC5?wOv4;<zx#$xrDxOLQ1NVz*d23vB(^iuf)3;;DXn4Y9VUtA]kăU"KO0HI.iN7hs,B#/+J=\+BN20$B0H_<6693rZ147Ho46ttBFR_Q%c-[-)>4Rux*NăU"'i(\BgJf6j_0l(9;#,#4r:R/1ZIQGgsIf^w8YZ?BjbmKs.%1Oi0'2='h66[Ve<4ăU"Wq)HL5JFFG=(NKwYCs[.Q<=uAON.-g$w(-KId:yN;9*vNj-K>4.dQn1KI4,g\6văU"j:LnKa.Eigoy-tCbUa0O4H%^34jB2+4Beoipr>d]PjT2:)mghx6R/=eiQ2=kr]jăU":^Lkf]*M^sa')\boVRGoW<##ZJ\CGk9FhO9iGk]1^8j?Lf-YW]g?=^c=$3pdPCyăU"(U+4FRg<Hf8iB%Y0n:VG:5JXTfc?$4dc[<[Kl:tng6x(j='^kG*YMUv$krm=Z+SăU"xv,Xmk)uS%yHMpP0b(JL*sSF.v<>F3pSf/h'I;[3TCH0Er<Ys?S<U33'O^KU_0găU"P2T<\YAFeiqCTc.hplDKp'>dQeeX6;V6ic[pC6n3U[a\CJ+Rte=E=4MHJaowI&dăU")xt$5aBVz8d-*Epii2vx:HUlhnM?Z5pPrhtXNh'#fx1h&c38,ptnl8s:pmD0naZăU"(4T4ls4$ip%D$p0;h\/<KMpz<1'HWrW.vQ<POUaTXK$,>NVNZ:yyIr%jgZ:1+duăU"r;lkabBfp>mp#9IG-T(DNp.tE\N(^E;<*dN>0ixUKcK/dQ.%cB?l]Egf73tu9KaăU"]i9;*S3y0u9g?pOu[o($Dd:&tcJc^k'T'_8&-dpEb5G6xp'v,;wZWt%xewDn/t#ăU"5xxR04bkQwB_0W.7#wrNI6PmLIuJK6G\1r(Py(QSisOwk4'I>VU%F2dd5g;6c(IăU"IFFN[wR8r=NdV'Of6R#t6C#ZNw09HAHcjZ]O>qc)Hw.(OtjYdMiL'pP9wU?I/6MăU"LBRj+nMw+7A1x:AuPAu%#BKE:9f$ohH]bom9^(r\Neph?su^ZKWsIN^P(D]WBBcăU"BE[z*7TO-J=F&,fM_V9OwfVmZ(llP.rMEHP2_w7&_HW(FpO%o*eP*gslJDfkNfWăU"7u><mMl0go>'oDeH(>#xjO-quZe)3F%*5])_G>/\b6g(i;PP?k,oA2]tugU[IepăU"l/=RQL[FM_NrA)M73wsp;fi<,fJpvI8wx&7bmOmaTTT8)r0e#\oV.p0H:wQy4O/ăU"quTuF4g*q*;z]'9M%uwZ3vHH.:sS>[w1M3p\XctkOxBWk9-^,y(BQu?bc#zCQzFăU"85:#)yu'pfNSVA^;6Q?7%e#veIG9I'SUXpFxM/Bk4#;TTSSpZ+O'rP\F<0Mfd$3ăU"E[yR9j&+VtfW'7,tt2_?5Er1=k\)sdL,?MJpl(EOVsg*9nVmDN9pm1H6HiK?b\săU"_%_]p$MV7tA)[,GrP\2O(R7i)Ncx;]Nayuw&LYIy5uJcvG^dNIF9JtbA(RgnD]kăU"F9MX7+npK$ILZ'y-Q>_$/nR%=Rb+NQMYzxXK6A+,+3pw6g?+-T;uFak\LPn/PC5ăU"RzB8bi7bwvn(pH-\f/:&K,U<0:X[LTSRU.y8#35=AcfEVP[Q.c#dn%>(PAqstILăU"aF%:=8hMSLuD7KD/?FzsOh(ktFf)U84>%)7BcwiZ)WdMr0EF.M2E&=2sY'VVyLKăU"YJP,o?Vx/xqiMVi;-JV9Yar;=SbCc^,M672DOMlxu6='bNV<j&e;>Zs..kpfEduăU"hzV^JxpBBB8qT2jfLVqi(#E/&6yUql<ZVDtfh*(6h;NR%q5E^[K++-?D53h.FgOăU"oOU^=\o(P=ut''1Z\xIxZ&wW8thTflAn$jwK;:<O(T>S_nkDc89V>jXLvG$sKaOăU"ZlTne+C0V/A5Cb:VAn4i?e>BQoU'73>xTveP<Q%IC=kBWfdIa+lC#LQ;,q5x>R#ăU"ZYrw7),9P][ZhZhaq.0LbU/6jLN:R2dd6C4>)d?9ddGz+DH#:V]&R&;H>.(EO8*ăU"\==5xTOJ=.9F0qlfm8>'Gpf[5.WQ*diu:0-0X%K4,ta7EAe*)xNcmF4N_'$;(02ăU"OaGh5y:?lc191pX<+f[Bxs.D^*fmFq*[?cDF85Z[2?Nkz(%re8H\3S0f-r.j2P=ăU"5_4M/sC.FJ/B;wB(Q9,6C$-Q9Ocu4Zuxg1$2PqYy[EDyuR<aM\lPcs'S\T%.P8văU"6H*(l>HlpPnO,R'WyZ]=XFb]ZldXO'noTnD-RCzH8:_-QVTqKl5q-iC3^;'Hjo_ăU"[.S4?aumMfkf+YA/BZ<3kS1VCcHVde6(FR%64q?E$\o\(zL6W,ZL[Tt/IYQY,mQăU"K$%q8%]Rl\U8')d1J'Xl/j.^Rcove,kn0zhI0pZVvi)-JVg)XSp-Al>PZ<bJxgGăU"qQb>k?qx&CEcj7qvk=H[<3G-ultqlnWCnAmyPl(d#ThG4b8_]%ybUVj\GA.M9p#ăU"-dK0R^$tU.O0>;/kDbV#L:JU]QQP9f':]V/P.iDt+aAYt5#CF<2G_T/LCzc,VWaăU"1eTtBYVF$Ojx&WdvF++l*uM;,=hjU%)F]k?D9X[6et;&Ku9;v'T>WDwKYMnf.COăU"O&.&7Ykvsid^<iBl8<H/qT(E$]G+=W1P/w]vHk/(>HtcS5k[R]I,=G3U7BBqYzMăU"]7Sc2',J,c<+koi<MUO%rp(p;gjW_e$pe^a]Bt:oKMu19qS&RQXe]vTJ52#JS.HăU".9E0Da#vT9$KOBu0<,le*R<tRGowLkKA=MC\PDNc-3khv<3S_4e.h']]a_2o-xuăU"+zrhtf4='8GACp*BTK_0WBH<:LTZ[=PQobz]7/JdVMT^]'T)/huE??=H-5JQgaBăU"q#tl&1Y&*W6/0smV*?l/Q^a&5RO[v,[q]0K2nj[<hFu?11*27+TOh9sR;8cx>eiăU"Qc3ZeqGUcoRp)*,__?WV%q;FrVZKo%F=\tm-ci'MHH\ZYPab=<hi0Ng+in0GZFKăU"Zgr\/[eFrJ(YK1WLqb8x#\nAwN7Vq5=jn[-&09a+>o%PelI7OdO3d9/cBX[^0N<ăU"W<Qs/M?B]t1lAJ[F$p_/bOe*GVT=R2q>%H/-x\;L*9\%xW[/7L1>kawfWd>7^xjăU"k4*xDc)M(.-Q.YTFM>q+7*\IZ]fon*np?$[P(tXz^lbs.6x2:cn770t8'&KJa88ăU"Nd,yf4O?at,t697Dc)=]79lp$7dta[%\_C&Jmtfd(6)Ax_:u^s,J%8OaCJDKfNuăU"+Kv1iJrooJEQ<Fh1m_%?O7iNRU7<12QqJpU#pe1Ulj=lhS6y2Aje6HiM[OKbM;năU"Fn1Mu$Av3[dGpQ6ODxSgbMF\12gsBU?qPXhNZ\m\D2KsYd84^rFJHQwM4cc8D5văU"nV,'d4\rJFRq>X.4MH>IUC3ClU.Qbu9M<=TDAUa)?bOM$hdkTxn75GAK78*S;2păU"RkKch6cnU'],6UCVO</F3DZywtK$vD#&HRkK&wF9K?jP^Dwu,es-TCAiAOEF-VpăU"b=M_lnO]*J;G70^UIdWrJ<t3to,ta2v6gtOf3k/;rjVa,fJ*dlKVCE:lzAwE'HTăU"r:J/m./b4.59s5pC\ds7*W2EgZIv[1=(H]6LTtY/1%]w#]K7>><4.4mxeumau,HăU"u9Q-sPt<#9G5UR>ig>X$P,SBxJ4\.5pCr)v/gsF/I(GYZeHXjJK52gfs;Et[G*SăU"%3[q.:H=AJGfoI\_OO2aHbzi[JD-NrjY#_jBgtI;^hJk>6hqR4p;b/m^Lli-PGrăU"&t<W_k.lm*G/9xv4#jMpZjLr8i<W4=-*a[$I&gMls&+bbuo[w[([s?L?N2o4lgLăU"8D-/]ev:1)<,>HDRnsUgZaCx6B\orL0F^NvWCdYs(N_J'Hq.izl%X.urf&.P)MqăU"i%>X37nfrZu%tvm:RBB0h,mbB.n'(h%jz]+f9tP.:L(Lp/]Ro$X,H?rfZH4E2N9ăU"8FPCUgE\]rEBqCWlkfnn>fblv.p;yOjG<,NvDwlIBFiWn6p6jMQZmbPF2<ac1*0ăU"8E<=G[eZOaN\PCfWXF4?RsfG>k*;NUF(y&6Y945jj'g4w=dztJj;D'^ztTpp4B/ăU"3h1'LLd(n[:8(7MXA>&JEr(BJkRnN8bQR^QF0h=#=iZu:.:Xe]RH554nHw0;95[ăU"'>2G<uwKHzAiG0<sPWSrV:)LETkEXW/1F,PXjFpaPDe\N*veI7P-<%5Ttk*]yO'ăU"-%8:%Yy8KpCM=$Ne67R2Xba>_9:DgVh:'fGy=QIqTs&bn4kke#0mC.u(9o3Sw=uăU"WF)QET<wVxMIs*kj*[eXOn2GW'a%8&?UKb.A0n\b?]sz8v8oy(u,r'G+$x$p*,yăU"v'C)JY,ekrCgbA'D:lAoh:_Ie$7B*=lj^Dq_>OA^:<[ihdCfUo$p5[ZOue=RvVlăU"NsQ$r(g#.2V>^)>QN5'/ZGOb6/t,1OP='%+%?8'CHAZR)[HLKAJMrF*/-g::2>DăU"ul^dxXvg[TZ;X]TinLY<Ewfn,<+S%E)S,^M.0Uv#XsN)7ns4RDt<m,)A,P9Nz]1ăU"e()a;1kEKIAOeSA.n5SkP]n+m\rE;phNJ-<sT&r-Jr0yc%l4.;iqT4l#8j'A/AVăU"h=+<H8Dq[n)hf-3<W2z'*/M0e:])Iyp,M&Ol[v)0Ej-]4XoriDr2Ra<LrtTVi#săU"[0HGXmIT<qJ&OdqW#&*5;z;>pY9%ss=6ErAwx2+i5hOC&Q$S5AGsH=6ED)W''t*ăU"Ke2FG_6T'r0i;Do?OToQD,\6YMQxa_-;&x^N%Zs8Bt16W?BM3nB2d&\<-YVoLSvăU"qb]me8dt*>1(*QfI=Ae1XUk,l9\PEKRLi\nHN[W]HZ<7,pkel6U=s-'T5UPqNlJăU"Y1&?;9V=jhM$Hm#\P^e%_*T1T0iP,2L4U)_CM.\5J49JM,\_/ZJAFyp?Fh]X_=GăU"5;zLC3;FLc$47&-;Z_m&8:Lt/hEoS91p<fJqersu=h4S^F+lcsb#CpS%RycXlsNăU",.)4=laLhnQ^n'kPF:/Q\V>Q+j5tOz8t<Nj%Gu>>oi$:w35BWfI&l&K$WB]*cgKăU"ul$IbqK2.^V)5hhpFrwr>)D.un:NHYGa*-zNNHg?50u6_((=co4ZI3I&'P$J1[)ăU"pvQpG\RBK]2jpPk/b&Jkc5F'4A&W*8_K9GZ\c7rGG_BPCT58/z1&Xz?v3*[VDN*ăU"7)RvJIvtS5j>%h)DzmEiFYEruXG)3>'Cs)dkBcK:yKqzWi0iC%N5)I)S$t+Hi0xăU"_4u',zFrPAX'LsJ9CMDUShmA'Q%%v'kYK_v-V[lk[Lthp&'5J%d,JcMg>o3*)ZCăU".6V*0t=wnl0uMWGgDBFSbB$/SFr.IJLv+X#pW&5s>OX8Sv?x(-D/mNNFK4IEjIrăU"uB<khG(hld&r9lEQO*+j/wVOy4DHQ<XavM9[1KC:8,g$(G[gK6.::4-;GfQ&,+tăU"&xF[j5S($XYZ7Vw8pq(U&='Yf$JP6CrTRc*p_-'[=ibac,qgN]P1c*gb5_y&lTIăU"H*^r;(B_:8l4F;qoA?2Lzzk]XdY9F3URMx>XOO\5xSI3#2_Q8SX\<(ttIi5s>feăU"ka(D<T+iXt3%^$qrEjoR'qI9n\:JdEEjL?Df>Z2e7A^$(zGX>Llf)ECDMZ]0$6săU"=3hb^[yeYP#n=qREC6%5-T=I2p$nh5ClesO6KoeqhrRTCuQs?WQKYsNk>C:MB*RăU"nbGx%85.KZ,z/f/sgqBV3pdEAdCtP:i,%-I'oZyAG:D#lbd'j=^?<J?)jHh+cc/ăU"5(c[NZ%$8t9sj9EP)TBmoBW0uPf_Jf0GO$03zu4i1r8pFIA7fI1Tjt+$&q_reanăU"1-D0qv:qR8sc7:uU7-SAE^#r;)*ha\?AkS'o82fCmE'KLYn8uAnt]J2X3:inO7văU"??+u_:YFWD#NqYvh8$?g1<9iMKGL0gaeh2OUsM.P?X#*/K?[t4kQtg:aEW_b*g^ăU"1Rpq<R%tIPdoB1?_C,=7&L;^naY8UM.EkBWAVt_]Ajn3[9[Fqw>/Xm+4jFJAY8BăU"+u84:'Nzk-38LacVR\&llUMsMa==6S#(Sa^;*g715QI[<>HkVm<>IdBnF<D,CC8ăU"$=Ua<wFbw?on1_r,Pj]<CN>aX5bup*IvTnZZDFdTgCLiacg96aqe5Yq>k?BG91TăU"$6F36J+nGM0)hn#wQC/m6X;WTTHpV:9'oULDF*dU2j>v.qDxt_9;-Q16<fgL2R[ăU"Fj1W<)St7?Q=k\:f0toNKZKkj-*3DloSc^mfG';X]lT*B4hNtvw,zjh'm8Wv6-5ăU"+K*_k-G>4Kp,Vg7748kql9*Qweh>;hyo9PQ59DW$TXIhB(-vWf9Ttrd>J;T\;)?ăU"C4rVVn<#EeQd0L9%7e(vrK/?MP)oLLBhQXqDu/$wpTdWX23<GFaHL3oY?b&ucl)ăU">Ni\q+1DJ\py/.()-aV/z83]cdFPz7Joh26m(U+*T.:l)v=CpFj(ae+/4q*NtTfăU"HZe%nvKLC=+DDMAVyR.H*%E'2Fn8>QNjMU?EmHHF7M?2qbhZ*)&Y5R4=S)'Z,QMăU"l_5xp__N0HG>\K+fnZC5Tf'V7POb%#W16WDFAwt;F\PjT)B=&;7/'>bmY]os\k5ăU"e01dNQ6^kfJ;(bM+%$_s'Z=4X?EilX6H&4npUZ1'2-7N_zUXa*0:Rk.G$CRBsk9ăU"R4)Z,WS/RGG-.%5nCc(q\#0m:emg\[850tx]q0h=+\c%NHQiKq.*##[V,Lk0tVaăU"8F^3Rgx*u6+4jjdqncO$3IXK<Ngb6[&-oPYuvag.#H0[]<^Zg2(q<:<8Ifu/cn,ăU".;rlZ>&&5R=<8%]MB;)mof?alI8t4G+A*.lrZVgOTp)'b8d\,2ojZT(qkJsm2iAăU"#Q+_Kb):q2#%lV,-7C/)R;P<g_tr0nO<efNU6RRw?q$;8DQ'e;[mmINIXl/#y[jăU"clFdaK.dY'AW5P3KEwuIUk3#'Wzl,5;sg$c_C00e9K/RHF5a>s_KcfP[N&,tk*;ăEND SUBăSUB V7ăU"KBX\46pU,wQ*(A\0(**W)x:$<]E$L2/vt8;>nenC[bxBY;cK4I>vQ_w$+-t*-0+ăU"(.oe\4rTr(TKLb.iXmRFDhdwub_;r8it6#QTx*$')T2mGw3)kl\QJSV,236f6ErăU"Qn*QnE8-39Q1%aeVHRa4ifkC6SFpI>,e/5RtXuI$kXlrMF%#.PZ>u$rv<0Sq5eSăU"nikK(Y5Ql;-H/1^(R:p7J%&[W>0&bm0eO&xW.7HSL8aM]RP:d4zu4Sk&LrDjgtNăU"v0n9=,<zsV.oB_Xg&uAg/vzkPLEKu[5+<Bed2ta#El-Jr01b'tw;nNG),sa%M2uăU"gQM'H[d8_G#*4UP'gg_yY$>leG_T+;L:%lzFCnRLh.'_NcU=6O&[GDBC_FniUz1ăU"#MXAWlqVrx>n(AE'$[Uk=uBij2B+4Ou_<&s<O)kpSCh]:IplmBhku_m0'(wEZ<.ăU"kmhuQ=JV_)tuBFH:iVYubUrmis=#H,:GlAV*OC=hq-,j#JZU#f(u_k:U83u]+cBăU"COy^(jZUj&tpGM7Yj/_M](#.4#7ibsm$.ziEG(g7kNJG'DKNWR-VssL<qZ4tY]2ăU"]KbECiY#%wMTVW)YvRQ^g=2O>J,2El7Tfg([n7T#XrQ:wn]ADK9pmGsR^Eb8tKfăU"0HL%r1'9YnQker6pD<h,hba[PriXvY7j7oFP:U#&Doj.0W5.:6Q_*io5J-DjGrpăU",6UHNdh6O,1,T%3t0A0=6D;3H$BMPT_UIQan#?>+-7Pua)+;C,R\N<5sydchcCoăU"mrS8'eL9,u+9GTRXuQ1'DRO6u>.0)f&2)62IFhnoW\69H/[fbhP%;g)=jMfVprIăU"#H-P#9#vRT*q3Am2051$TI-uXIi:?M&(8)>I3^Gs/0=(^o\k#$?t\1f=Z,Z*XQSăU"&q[6M-:q=6YYjR)07YL\-yBPr-f#UW:o?58s$V)<9cCEZ*p:PeOJgq.BR':c%cHăU"_k)_XuHebK2zF.%70.?yPeR;%soqo3GR/aK;L\H'9eM:\*lY/U)\%sjP<9Z;U^FăU"3Q+6'XysSUO914hy?QwKqJFa^#YU9\J*3Jt%MO$eJo:%x6O=4RveWiNU9tlk.oaăU"l:uqP1Wa/uV>wf-oQbGpDG,BogM\3rQSe*_znKk78MbuMnsr+kE(aYh,.EpW?jOăU"4*hW=18Px.JF:kBHMqH;/9_VCuKK2kkA^NuLoZG]#/dY=0Yk:7Slhw,p+Ypbu1CăU"+X4CP]6z6fL8dgMYbOYb2ov-i$ydaz=x)K:B26mJKgbU#ABM0.M0+VKa;kYT2BtăU"0^jun18gK)rGs<pe]bVeg[?vmPlF$(6uDqJd2QoTPLTudsgakruR5;-E]R?-3okăU"+3SnO7EgX>Pq)^cF]Dmj>BSxv3:n<8v>e'6Kai4Ds,'ps+NeQYe&[/(#DQ#D2TgăU"?tKVWg6j?tbd&.4;gEC)2/+iS=W936DaTa[0lX:uL.WTJVA;j8,RP[W%ER\1t>*ăU",BDnjw1T:<%'61X5mJM5:-/):?uwQav\wfao0J<eSl])A1/7#MPIwWib\xfoS>PăU"tfX2-'Y#0K1StY+g+&\e;q3AYl#ec2CS;o1.\7Jz0lQ-\DP^i>5QVGTh6g$:\\1ăU"e,QX1T_-vc&KKs#%1x4qj#j;9im63]GAVa<W8,J/sp)u?VD[WZ*p*2Z$/.Me^xfăU"08#:>1'u-saZP+P9rHLFuXk>c$bt]fSSQH,au0Gt2Qji+M$PTnUco=_EpObQE[WăU"?SkzsMnj)28;3ej&&R44W7+RPEf,aR5&PeE1Qa84)MMs7Q^lyG\iGtd+lzgrY-:ăU"#K=JDLn.q4R$9h<ep(;DRg2JIp$;QYd=5LZu3uG=zkEY\BRbn?yRSltTO'WR28?ăU"*Lwpy#OC$\tQoOA8spofA7'snC0p>s.Xh$[K*Xt%$,J5eNqDZrC<.8U.o-'O#?AăU"Jf,rL_;Dh$dwVJH[\ZSGob8qYr[TqT/r<gZ)L)vZA3y)ZB,6=AGi%qzhsd=Lu8WăU"I3/n#OFo0nnB/jcL\2)>x$fgY7)oFLeA1^5;Zh(/x5$tqkJS><3ir_l-l?L(]OeăU"z-=ZL2\el$'SA[9+P[pPrHZ_XlL-15grz4^dWBQ2R1L[6pV20DKB>HokKUqFXB4ăU"FN9vnu6W8/mlBQOBt2q:1;]I=Bg(14F^u1$SB;34c1_rx+caby<D.#F,(z>&Be<ăU"mD-u0#4TLJb]Hi(Ox]'jzUvk;hEJ>tNVRW&[-^d0,f#sfq5s]12N2$$0WlsoO([ăU"+'t$cV7BPl60&7mZ2PT[YwsNl\.Y/A.L0]T'[*H5Jl^lE&.pBd\EYY49sw1%NiKăU"vGp$NLC\tSz9gCLB*u5+:RA4_5jQPpeHaX41ZZ9_Tc2K)&AFlFMOH[J>k6)KBR2ăU"9.9(Z<dv'>$f9j;+[T043C:DMYKOq;/='Tn<c?VopUuJLL<=*)pS8K,P^9-dq\GăU"?[7vgS[uB<#WS\ErL4IS#d]+:pYi&cVskdD>nm=odcc5yEP)T>u[[y?-*u0&14QăU"<,c],$pnUP]t&RoKvQ+Dvp[cr*C&HO.KVPRh)CQM1oG.6k&yl2v]ed2D3;Kp%eZăU"1?dwB\Ged$J+Lc->>plkY.520<2#.^$2'glLG3j*NiHmr2'Owa6%1^AnpXQQYVbăU"P/cQ2[trQ5dn;,1cXLk9Q(sO/oM)bjuob9ih[KR>Bpumxw%8VBqICtmwu=g\ZB<ăU"#Ka,%pW03\+r_XDU?[p1BQFz=C1%1Xz:NH9n&.ah\n0Isihw97o0*E;E)S)V9D\ăU"5u%t(2tyqN#AKPk.VFX&Q)<z?]P>Gk]T<Rus*j24?=:nn2gY#$mK&Wo)OM*FjL/ăU"9cKBx<AzGFSgz(XY_(DTgxyVjaR$kb5).F/Z\2$jTcruMLH%B_f<,7Ak+^eAKFVăU"UG_j5pnm-UZTqEFEUr(Ik^=LFFbp/]YZ4>X?4hgeEp]Jd;fJlr*DZb[Df,C&$Q2ăU"vd=RC*'242p/dM.0-3Ur:2+ZRjjqw)W0rSdqY_y/Svr6ht/gt=G6ZJw,-t\h]9păU"b9D&+r#[nRp/joExdsxb75\jQioY^4kqLa=pORb$tk+398?jp^S:R4XAt:jAexyăU"Hg:Q274-xnYtYL9V(vN/2*(>Xg1JoNjII[FrZN,Qg<3q9<FPSn%P9#/IK-%LwQ7ăU"f0qZ_JjIH6?YEXXRNB?fa8JIsI)?iHU:bWvAb>aK*xbjLVQ>.3;V6%D%xi7kAQAăU"UaEu003*vCh0yma[j0a(e))*h1A+MS-1IBg#HcHdgy+.tCf,cK\/f$sDS93h7\/ăU"<9n:Gg7KlpTANbujZ0:?#3Xjf1Ak(<$N)k)<y=I_%0AyQM?8m*TqjhLh,t(hY6:ăU"YLK2J40i<I+Y*<f2>522Q+D$oZ#R^d;u.KB1z[RRQ9NhK?v9RSEB;XNVV#<1^W)ăU"VJgh7t-ZEXd$KgkIN](smo9*d+Yt^+tM&+L<4n#/BG*^rxNp=<%&o)J4uVWKHZ0ăU"(I#'7jWqY<n^p4C7toh8((ciEy2SUQpR$0Wu.VVwTJUH>-Nbg3\#JY%K*<nFPd)ăU"nxu<,J$35^qfgCaUk.+vV&i>9r7QQ;KG<J7H,gj<I]WJH[<6xb$j1[g+W):c'(făU"p^H\mX;P3nTZYI9Sx^4>EV5O,ObcL09ffSC,?TU$Sro^;tV4S8-z9Jz^/KXc97XăU"S*Y<ZBR>=\+;xkuj_Qf.wr\5&w;c^A5&/q(-t<$(B>:7pK<S(+th\zC)A'(U=eOăU"lVd<3T;8sFs\y(0N$;Mj,7(1&4jZD%,qRgf/ZvQEpnPg[E-,5jTHc*$[nu-MsA)ăU"zUFmlHTU1iY[T<o?]7On<ajICr,8#v7NGnauBL2xlmQ0u8d[G<VW:AuRAT=K?QWăU"1Kf50*#qig.CnZ):q=7lp3PG0CfDn9)H<^BXuKU=JV'tq3ePhHYwNAR-?+8yFF1ăU";i_h_)XG;jNZRVN(-Ow^QQc8$:%uh3_S,q;mb2+?FYrSp^_^CLfV6/s/5]gM*CLăU"WD3yiR<Z:sVo)TeuP[wGRl;nbzOkWV\4-5G+tgzgG6SSa:txO620Tv,:.LF?0oBăU"Wi(8N4t\eVSH8WSnd>Qp?Z)HgNMO%w((e[#$55eG2C(]O[H<$IXQ_l7]ps)-qjyăU"I1/6_rUF>e?^IZE130=QK3c'kpW>M;=9euXQ+XN/AN^#;,_70mm2iYL2/KM1m4TăU"t43f%d3Ro91SGw%SUKJ*BP.S#a%XgsoJf(Nu$KKqtK/Y%*.<y\i6y#K]k+g(=#3ăU"05civV35Y*2k;^p=0I2\^yq4^v\1GXEu6]RpfQr,Ch./'dSe&;A]gZ#,J=JL[YIăU"/(;'e9vFR/+*-70UH#&>nheX9\1Fo$HCj015Mx?FGurqf\37%_*8Foc:hRf_fEuăU"v<c#&m^AipSg$opl<k&E*.(O3sP;dEdF5fi\Hjae48Yboyd_1;OYr/Tyk6<_ZtkăU"2-U+5asQueRLq_,%xW01QCEil[H5Vv^C[sTQ7Pkx(;'<Nf=^&TpXSV^)7-REEgKăU"?YfIEi:S)lYh_E=JC7^sl,_rslo%af)0O.(*FIXZIw8kMLQSmBD<lu>'IPl#&GIăU"KdYjw,dt(*_x)lF.r8;ZNN(O64Q>riWs[pec%[?X89*-D<gk:JfNXlB+%MTO=nBăU"il0d#ejB%0'z*zGz7kNoGgnV/#4fY\oI$b<uA'p>&.h_PjMBaFoF^I>5D9=)=;=ăU"dKStJ.:QrKa2MfY8)<TzclEc\e,[Rx6/.T>hjhX,%</;I0?(/;C.5$0eHRSqu2QăU"l9_.L.*e9ct<b=^ZJ>hnZhCdEFp#C.#G=PW_[mC&?+14-\zQC:w<f8pE3O&CZ:căU"RVp5QY%nCeQc0AXLevw4kkkp6i[(7c,NjO5jnFtsRy[kpr3X?q.J)e$2;7);fe5ăU")f:[(7/O:df5(Y\nM7CdThL?l^SME)D^[,^[M;e5<P%ZrnI9l6stn^5FU;bz<&WăU"t^]%r+I\QE\ZR_?kWf^1,xQc(zZHP<v$&V;(/d/2&vf\isU\'Vo1-OEeP4rQ(QUăU"8/2ExMiL0a)t8\IcG%Z[bRNPWuj$=E.QlS'k?N=u/;W.<D,zl%lW-d]zr5<Z.coăU"XK0IQXj0&J3(HCOM%QInzh[X339r=\%h0?BpJ>;6d,rf45'=E/<a[<NT,yeCAdgăU"abD%v^Tv)K262<J8,nH_o,*tM9gSS79;/;-b=-<aMy5[zpx4x6UgBN,J\&<jJ1HăU"g31JHwCZEmJ)qJGp9?dfvk^'MOCqbqSXLYilF&Px9h3bxRkg8ts10WGGOYtaxjgăU"J%R:]+uP=IFcC.EKd9u)_#n=7s5vR4SJuzN3v_(g/1xE6(uGFf'mT7q9XgQT_YHăU"idsapQJQZayM-y&>$O<HDL-gRp9spi4ZfNO$8IX5%04q\M/lj)NTT+qIT$%6]b6ăU"E=B:Ssx[E?BzlTh/D3KAU$6?o*RV,\nIv'+yK9mR=/Z+AJlg+D[iF81OhU(3)wyăU"jwdz?=j^[p;Y=K5T[#SpP\PJxCkt<QQn4pYb)d9i;_aCM/X;5<P+?Y=9Rn\4pN2ăU"#-/6TJ3:rz*fc1J9m\VGgm=pM#(H>MEAsK4s^doX$oVGdR)6dk#;X*N-<]T5qW[ăU"xSIeYIE1X#]*fj*l2RX>g;buDmOXh<9p)A2^Q7naF#Ye'X0TEQ([e%gS;,%'dk#ăU";#%IN,u^%;i0x9Amsvl?iIu*,RrZ+q?1Fb[K8>;I5,B5aLNO'<Z?+224_L*;K8văU"eU2<,LS\SC<KZ^pW+D+D-Pd3]O)OEYWNPfZuLB>LK#m93DO]5MKcH4?h+<]b*+3ăU"7/GXa#S<]pW$kTB(CL7Um[;1$DNpl4t/JpLV6U)BSu;PkSijH#'#'(Q\gX#bW9CăU"fab8>Hi6GskMSdbC/_u7G,Yg</8uJ.L.9WseWrIR6kWSI\7WR>1U)44V%o]LEmcăU"T.75nstJC]?AOCAoSzvn^5^H)vAf0%ui\t&54Z2Y8J&>C8Kj#dfOO\/d;ng'CJWăU"j%6\xE/w/m8s%*MpJz4u7Dl]>X%5o.I&yXW/\a6+h>UYXGr>iq5]Tx19#yPs^NrăU"5_V54&-+iUDj71v^p;-f60m'TmBORY_b[ah<A/-YlBY3__aJ\PO'f6IbWr])U&NăU"_:7n;qsOL<B;mTe&jm95T0<s=W$c,*(_KjfBI/^M7L::?<F#S)H%'IzW8he]9<săU"QHqZgTbX^SGUens9'#IE*R-iWs<3JdtrO(/$^;[?0?$f8[%9]+^iBJ#c,,KL1AtăU"kF*sRQOnKn>(#ebeO,FN40oQOhN#yEhcaimxe0SDdhRt:][UJUf-JHnrq^=qXLkăU"r>A;jbKqZh4aALbN5lU'L([U<wOk=M0F#<OrE,9Fh?/CirQXeK8>MXe:&EPWJ2tăU"d3$Dr$RkVH24qUP4I=^hBZtihf-P&?[ihF_5*SmXxK$L^C&qabHd'$1q..1DvBfăU"_ked43?=h9r%DclAdX#D.:jnz\/q^7ed%HEQ+AOH1Re,8Tl$rylUPRrVYxc_P<NăU";h9,R%pLal>.mHA,+Ofm<.kow/d<PxEk,YSOn77//z;9Y2m.c#'_Nhj80(A59??ăU"p2$<CktW56GU5CH'+K.=,edxBrAqW#Y\NvTpm1&7e)OgALSLvVz%ZKk8C#E<%h%ăU"s*uh5U;MgdtB&Rkr-dlB^>30Y']R6s-e7J9c^\RpLc1.El0n&jvPZJ:RuKN4+<>ăU"kPvb\KRog;_[kJQff)k\QuZKBDdqNsIp*29Gl70]%wy14kgj^f)EH3G:fX*:P0;ăU"P#Cx\]O>A50LiKw6h%>?Gvn]b/nyaojF;*YO+K7P=lcT:(xqkDJ+31Lj%[gPtytăU"Nn$*r2ci/O)*bHTB=1psskRV&^d)-y(N_uBmh2-)3Jpj=QGNfi-yi#7GU56ppFdăU"qZUr^ZV(NUv\O3>M;=.in(^IUVhJ/<qrcV(d1QQV)w7ani3nE(IX;>P<jq?[wajăU"=p.y+Kjs\yCj'vpTbJdW</>7\CgzggO.lMCzN_c2VhSlo,pGeh,rOZeT84a&nb3ăU"&PPAm?j>-KW:YmlUKHJQ6am,_\B,uf/Ol44Fr#[UNdWf]\;UUYyOv^nml$9a*/yăU"2Azsa3wSq*jSc(5+-xs3MvaE:h0ko-^BM$EF0L;naZ,y6GxaFV7+Jn&[H3M/\c-ăU"IgsCX9_s(lOr$TC8Do;?06Gd*/VVosJ=?PS%vZc:lL^xtU2-+wal&qc'i(aET[tăU"R*NW0A(l6sYE;tKD:FrM(ONnbmFCP^_mwrf1*3$O8r[pn>m;O*#)=[&;P+,Q<7EăU"Bg#CrW1)7\4bva$mV_o,VJ8mJnbH5-a0?]'h,[iAH'u1ePmT;\tGHvL,8s\VDqNăU"jn.6SHx:b;jQn^Nn;Zk<P50lAPfoGd[9$ikgQPh?[^cL%.C\./-^Y$'=Bd>4b<QăU"sEB,x8?MKS*M)V:end^,4?OhA&r4<ER;l/]G?Z:dDPH%faZGN>ZV&CbDPgh=EV'ăU"vlmtc]+Rg2gj6s&6bDlG+r\Z2a3Q*P5bf7bQS:/i8fr4e:4>dVp%moAJadw6sHGăU"Y?\MC'PcF+K#)x1n)JS+-i1w/Ska*?uv18h10rHAsJohs^0:+Uqr<5=;0A6jV.hăU"[C>bltrC7tfgpbqOD/'&d/Wfm[&8-cEk/+;+J#-Y8Qc5.vtx^T*#z&vBsTv*mq:ăU"IR/EE3HLVzk5x%'htcdUyNb5Jf$?D'fLkk=_\\/*8BXUo,G%Vi8CL*ElxYK..%8ăU"0+KC*G9H8Cq<WI1+%hWMg9?3.%*dlNC'qPT7FLFyfi(PJ[?dyK1U;8]b67eEdeHăU"l&EnI7crHs#*1'Uw[FJI5JB:u8pktNt>1'//wZ%jq%6v0=8m6HnH/%;T%)Y/+Z[ăU"+xYvb=Keg>wb&)0kp=omcrJN>(_lBu>aGfRN])VUP$VFpy:3#9TsU[Jkcg8fRm4ăU"00?CXU?ojA-pR[OUtld?'3+qE&bhFO]oIL>TU#%F'*jdTKS<TXePpLuS*:Rc16PăU"khX#\,SokH'3Qh-(O*%b4?b:s&^i<GjO\*.diZUwAEo+C\8[&KnM'^_+A&G274răU"oamV&b\+?;?#5f4gcw7enH%Lt'iIU+BhCh;9d0q>iTqETkSs$w3TvxP9djQzInOăU"R.cO#>TphsAUf#:8\Im0p;7V2u#hEPo2'\J;tX4pk;d=*OIZ-*\dqV?8$6d>3v(ăU"1u'Y'bW4PaGm.<t.kaRgkmIUG]7VjQNbo#Tvq,gUV/A8YDZ^h2R0BA$joImgqBbăU"wD+Z?ssMvodECIOwZ;U_sY*8,+EhEW:s#Mp]f,WtvfesMmq%1Urrss'D0fRLpPDăU"#m$D-hcM0Km9sV?W)mq+vZ-2rQbYBfMct5P.ewlQ%qNu&N9&3iLb,/6K\-1K4+&ăU"cGNu$99Il_\0hG;Rl'9Pmh<v<,f]kr<VKsagR#Il>,:'cVDwfn06Y>l(LVU$mj(ăU"gQK%6&AX%t:A2/]lW4ATaAkvC7Eh't'N:N2DFQ)s2a*8+uFC/Nvz4^\BX-CmkdbăU"5m-fROXUN1_P8eg#bZ?Se8?\%2J8RAx%3hI\(rS<(u&GXKQoo,/ZpWK.J$-rq=RăU"kjCb2W1uMtcB'I^Kb>/>FR#[n*\#_b2fXy.EL<5oY4DAL^D'nQahGBOO2uKof0\ăU"frZ0P>&d_gOJOX\&J&487M)&++ESbem^xMTqqyS_bM1&z-^qC';IRUj$[j/pN<2ăU"1,zD'C=WN.#Un.Bg]#L)Bbht%LG</p81-3n4mUyFZ4K#lR_X0pLeeufPp+K1h1răU"q?f/ch$ekUw.8zsVubJ0oGH&]_aBf(Xru_6Ijbp8PL^=:,r0d-0*)\I>Zr-O)LJăU"?il+*Y,.euIC+?][_^1JOhrg^RJ*qntD:Qs>^%gI8mZ45ZF:7t/mNiBtsuwOSGRăU"7SrJ1JXjXu:/tttm\dcBs2_z9u_eMj$:scuUGe4bh;p/EcsYca,8[M;x0pD(35AăU"#oR._CA6Nlg8KAuWr.i,7pw'>Y+KAVtVB:Ew3ZZXPAaU>$?.*3O(EU&7(wjq(-)ăU"t91Nfm)yMF:08'U$3;J;Qn_UH,4_#h)tF[-?.#D4fDv:^J7UFw+>R]7(<s+Yc[:ăU"VQ2LW9+13m3JlR^h\Mw<ts4C\B/s?gEC3]U,_l>Pwakm-qIa'>5IIL+pggWHQT6ăU"K_ovFr6LV6tBXW^)aieY;?SO&qZzZt.tBV:;C=;]wZ:VCX5wITtw=Y[Hd4.PB\LăU"kT0p_P/oo#rFnD?RI)tbE*o?[=*7^tc8_6\+dsBO8'4az>0&ns*%z#84A:BSqklăU"Oq8+VBGq6<nVrMo3;8^^kWHElib<o;h:hBr4KTWSU:i]apx1;kcbKcTJK(c#a8.ăU"?KcVL\0Sy&HUvb,<.Ej38UpJ*OKf&)$RU1#GE=tO9dw,s+57bzhT8C32vnvp68kăU"q$Th5$PPU6u.,?6qeU>tsRdTY#&b4P=:'PlGlT/3iMM5Yf^e/E9IdC9+,nRZtFQăU"_Fv;0<y*qkn(mohaI&^gsaJsTMX^m=%k)LDOcTKN8-$?U/S/MG9?ZM]PC4*bl=SăU"Q^V9?X2\3o?I8Tw0sK?1IoMMI>UK=xT%T97a$#s.^=u(kU/9kgABF]ch2oYog\5ăU"[5OFT)67$oVZ9P)Z2%Va>PKXo)#uDdw9xL[B$tUhfN2Oo+cyNTulkg$F=2]?IG+ăU"$3Sw3'ebiCh0tj[B^jBu\1J]Ts+suiZe)6kPdALTbd?m.HE[y^OPxN(A&&B4E+CăU"F2%V-nm[-)-:uRYg9u3444u4444?44d$6VvLXMP4f4ZVVVL?pN6zsbZvx=^e;nIăU"KX,.lR&*N=:J\aEcB&%QNGba&wxyL%N2V6$(#-0)1c.QKU(_Gc-cA1)SMR&Et;uăU"0I$Vr96f=I#SfQt($'a<HLY9I;8H\fF&?=o&G1?tA1b1my^/C-15a$9$WMzAG5oăU"R0Y]vr[*>t9X(p<3a#/#.d82OPoN_N5F:cH^yC,+uG-7e=B<9lFlQg.YlL7'G8(ăU"Jk#^0&D,S>J&BPc,DV-6bf=l:M+]R&btkY0X,.cC'P)=E),FIooDU[Ip?b%'AyJăU"cp_?_WFHc>Q[YVi/0>Op:>[yWy%dC^,_X5<Q#s30&V#9TO#gX6Sb%W:X$ATQGsNăU"1hn>%yB9$CZ/$W&na6$5V.$Q&<Kv?0%6\^k][Z8j\SDhj'4&R$kh(D.wJH/%?SOăU";Y5+cEL]K1qRwGQ9&vwM_8]J%umOq,d6$tiQEq7;D[H$'1IU9E1)T_+LI;'I%AgăU"bLh(r<fKErV9lC3U_T)=d-,KgkJEAY6;D$S$X4$KS0qs:s7/?3YZ?'7Q->d'c=HăU"8_=YgF0JYE)HZF-)R-L+[iN^&_<c'KST$q<om_iT';34I['x]Q:fwZH:hVq;5=<ăU"^\aWV(QR/*_6X.8Z2pehFqISV_F'3iXCBA\mNXxhZ1RU*]2-9;DYqGJn=AaM>vQăU"0w)92lg+1jBi\5,5]s8QB#M\B?kI5klr?rMA]%iTDx/9Jxs#v+m9Ilm*A?k,$T+ăU"4.6,f.eXv-IAW#b%//_%D]9)VpXTPauIJXuH_x,bYBQ944qQvkE9?wUGWUG]L+5ăU"Y=q&8*7+1AfOvOLm9lJ,)$V2n2_4DIxR>^Q3%5*I?wiP_]CvKj08H=WGC\>dGs)ăU"3D[KET0^3&O8Q5x-96U1-f1kI2\B#0QH2&^'f;8(I9XMah3yS?d^>OW^F+o&s>?ăU"Z+>RMfB9SqloN?8=eh$jSG'=R7*8:(L/<L+/PSw.F2HrPfwCgfqH'swv&Z#xJeaăU"kKiN<NR=BB*d<qi3PG3EKD9#.'ueDff$_OUaOOGI^dA=GQiV8hqn_YWd-mX2:E7ăU"yR3874>'Yw[&^iqY<aIs_WW^'AdO1^Ye<Qp;N)L6UUkgSq(\pcOrfy&HE=GLg4OăU"J&,%m.wfmPA5*9=cHP:dp7qID]37D;r6?[Jv02^pm^EJ?qQ7c_?KI)fC05NVSbQăU"^P\.Ae>HV:jP>d)lCK2\V):):]*gHOGI^pRC_FN]>c9uE&YmwyU5^ngF*f3)WvkăU"*]dxMZ[>d?C]M5xQoSHEXSYjC=$es2tF;/hH5&_-M*[t47F3^w2V#h5%)j$?O(BăU"?[2v6B#ZjP1J:7&bVm4=x>S]dBYw,XYd1q<;8#BWO-EA,_;>+Q=IW&KI#C9Au#făU"p?HaU<bO)T#:/tmR3cxE]D\$4I8ry(%%YZ<jjb'd\9[s?DbVCI\/WEAF9r+am&căU"*Nl7^kr3/#SD9NQef3+?]d4./yQe(850F%twrK=Ya][A)j5T7Q?Z\<th*7?j5ioăU"[#o-IaxtC]4SSkQCfSXa1O'Qj94hA%^F.JI].)fi<f[ZwD%YQ-HwoHU/26W(1YtăU"GHu^qkxA39eM7=[M43:OlDAOJx-+_>AG-]nj-1Gud%B4+G<NfkzL)XdI[6<d1f:ăU"=A_zU+A]VPaQUO)uY6b=*D>n'U6MZC-u9[,bkYW[4aPK9Aa5IKTygO/O'LU,ImhăU"ff%I;w_BPh4']rG#7v*1.f_tc1;7GboC)>=6Ap.e,Bud6o:6T*7YimA,fdCLUmBăU"gPB3$+E>N=z5yr5b=,[_9ZA6)aFG=lmN;N.S7%OGfRtWsF;E8Rv:reL)>r&V8<DăU"Ga-LQM7Qwra:s-5V%xPUX(4\I9vBe<k]%R\epQ\P5J/kn[7^ja^jh-eg'dpbgwjăU"j2rA&QUFbJsw(+N2Tb#QvF::gFR8XqV2XeO<gU4m2R&YAqr,CIK/_O/3X&8PfB6ăU"[]L'?Qm?iVC$Ye\sySqF(s7+D4$:9'AQI(M04lSoJ%HhRSH3]Af$Q5\Tm)+(PXIăU"Ifk;23k35yf3ZJqiCkz7kX#SFLS?H=10i%Xd5<)F=>f$]&K]6m1^5_oSPnrqFVrăU"[V$aG:=-K<G$9iY3;E8x'Yoi,Z$L4;C#8UB(M;Pe<xtmA4jYj=3tjZQa4&I;jJ_ăU">;h]B5fu0dI2]6XXo6Bzmp'?]8./,f-\HNoSbHDr?^S9&=sp]*E?4&u5L]E^(]:ăU"WD]klQJ'PmXg^pxi(dfN?mW?N<EFpS0Dn4l);Cq[)xB4']'A:(25V]H>8=_pkQCăU"=9RtVrC^51>XRC<brWX+0;F6kt]gMF*x;N_o/(S4+/1a\]k(x+*8N.)qx6+EQo$ăU"[6KSiE<?RgZ8(h#S/pn$NC<5;#jXCH4LMvdv%o)*W<^xw-2.d4*PmF7,nr'2gF:ăU"obEa))p?-SY-y(rp>q8mh-&A;fC$tR0)Uk$W9X?wY/j(OTxCBc9?n/D<'<8SKICăU"2X%/_1'1'V3a_lcN[k*U%bEVqI/lJReWmt'SaJ/sSAjVJ0?S1q]qfN_,omtzJtlăU"*.m]nI][3*FQR74gb]dKnk7g4k:0ALM)m\']n2G\>GC(+t*rdT*^%GoP6Z<lohHăU"YOYj;yu3).mZ3?g)(cFcBdpCi#dp(j3V#Jml3W<U-k=8jSNEI;J[U#(Oe3%3b#:ăU"&%.6.1$Y'C0FA+^$u\\9FAi=AU*xO[#1hRu,-MZAA=5H_l,uC0G;vPXJtf_NuhlăU"\+rja<xgWK1\l6vp'.;:wk:q4EM5e-G,)D'kUr*+/.iCImf-(u2(lIZUTOrIXegăU"/i?Lh&rlKuIN#2A,bUKNCl_R/<&KMwHF)I(MGCfvFk+/eqk,>0m8Lc;(sLJ<'k;ăU"C7-fMGQYsoUH^JZWD)*f-OcjmBI*'b_z77k*sLEELr>f3:HeO[ecdv:#<7,+m5EăU"[y6s1n09n:6;YIKaNR5aNPZ6bV[<VU$k3b0Xy&TA5.)H0n6&$thJN0Z,D]B1iWcăU"t1_f&o0M[nnK)jN&%348M\qJ+U8bY)vWL/53XB+1kj$fPn$?i&1TD\h<&sgpyVLăU"U^?g8ni0fjaDMdE3(-<gP2XgxfA.UQ0RZ0&MZ7(HAGuOIN7d[R7)$6rezUq.,D,ăEND SUBăSUB V8ăU":&GAf$J15lQji9OsO#m^'1*Q:e,*k6A/^]cAj:oc(M85nLSRk]BZwr-J,eyr'%3ăU"/vJF>\*In>)8mCmDY+--hyGXDUn)S+K3m\yaA#h%Kw1)AUpcl=Z1tyT,QAR_mIDăU"c/YmO*)Y]f-k=.Ux<9]h-eOjP]E^]iM(]D)b4Em9k_1rgbad<W-pC;'QaO>mVL_ăU"f)ABil^tGRCCP_1CPYCQ=TcF[xS#)Kwm_ucM.ENz)IUG$*0rM<n_'CmQ:a11k1QăU"D,*h9W6)pC\iXVE[QIRXDIKDu&LRK^Vq%LP[Qy6S9<M/vsz;A$\7UpffPX\%wxFăU"'40yuqw5:_fJLFN[uoIh[:==DTdQovI:6-y&H]xi]:5M#i)K;de90&n=hgN>-DaăU"/K(8qS#+DEWy)Lanq7zVQJ_9z^F,G>1XSKFI;(Uqv*nNK:DOT9oas]MZ[V*c+#2ăU"knOsRpDfH+:-brG_&*Pl/<QjIDSj^.\)qju?&s[9XJF-,s6h<07RzFEKKFqJA_*ăU"s22,([JAgP,d&,?cM7LGL%FzDs7:/:,-l^;K7CM*N?i,^\Gi8RzqXh/5%Uw#4:eăU"T5&IEt[eh0k#;DK50M9Y)BWUgX5-I,J2g$E(IjK^ebX$EGfJC5nzokzkPKM]2)\ăU"V,'S]Er:gnk#Opu:D(+1c:mw\I)7EaYW+iH'^ZbKCneJ9j[kxbKx[Khh'/<iEQkăU"[nQ+/uzJJjs8dhyMYGb.'a5fNR:d^I9FbsM>nq)*Sn9]Gcx%Qik,m4K^Rf,n-FJăU"k2+\Q?_AM)h2Tw*,0txnY2d&)?Mz6E'IdL-&MZ1HBjn>NHeny8RJE+V(G-l'El1ăU"v3+7tc/)wVz1$]GTJd<TGG6HqPI4'>e+?F5YN/)3D6/kj\#v/km(K[t^SBE7J,qăU"#&V)$eP>p[hCel*LbdkX+-t#:?tbc%^R7#QZAmudcMr8YJ*1GQ,ePn+p'^%xYaRăU"p;;J%p*XAi.UFUq7I1+Idqpio9Fh&89Zn*_4Xu7GT_ok/nL<jI;4CjpoE<j]C*JăU"KZLzEM%.s>4>[?7lDU>BZDL\W.5G=CwtcLcNS.%x\:78n?KO,mlZ./?D'pnr2;DăU"7\]mZ0U3F5b$kOs&\Dol&=g6CMU:%ir;LYVr:4DZdO6JNpYYYJ[Yqsi8lbtH]rgăU"pLu(((#zzz,),,xxgx**TJrl^mpbJONuNncNtz777hppp*l**Fh'WrrrZFFFLQsăU"m88t8bT0k>8Mvh)**tHphd/39OP(s,/..#2?Ywl66LiHY:hU#1>_Cla)0<&U4DcăU"P1=W$.Hl]?pZ92^tedaad=bImegV2?A]B$=uU1j\0#tgUY0[=XAbKriUaHkc.NxăU"usel_<SZ-bLvEHgV2l_Eh,55Fib5Jok^YB_Glp$>W5?rl$Tk')/rN^f.0JT:%+PăU"#>d%V)8^dM&-4dLz%,DQNN%*Y<nN&2.2\ZiO+BFQ.O):Zf.P-h6lDOq,FVniO*>ăU"vZnPX/\R2[U5?<\[WS7\\O\W3bRr[VCcLF[T>;lF\3X1ZRl/UADZ&/S9ud&0Wh5ăU"j</rVETfl/T=tZf0X0eVBEUP##lEWS8$lPFW4fV,EVDlPVETY<pVF3X2^bloUBHăU"Z6oS:uh6pWh6nLorVFXvloT>xcvpdY&O(3a6i9R3X_aYRR4c]_[h3bm-I<3$?eiăU"<44d[WHn]akA_r]_c3ar^cN_g2]sboQ\n]$gq$\^dZ&S8sa6j=bsX_b]bRtc^c[ăU"xsbn-MLs$?fmLt4d\[XoGalEc,G_d?e,Hci$kBGsbpUloG$huulH8Y\Q0S56i;ZăU"SZ3a[ZXT7]ampS6mcKDS4?ekDT68[YPu'5kCtz'3crcz(7i_i:'u6oSdu'4gsudăU"(8ZeU#=5Qj?j=Z3b_jY>7^eq*=6nlOT=4ZfoT>68\]$ug5lGu4g3dug4h7i$mJgăU"u6pWtug4hwlthNYAP,CK6i:VCYIaZVUDM]$dlCLmHJ#CJ?ej#D5N[XLqmKkBhvmăU"IcNbvnMi_h6wBlDQrkDGHh#h-na2s8)Q.;ptwq66$;&T0<Rt)me,fHS-5Zq2$mtăU"Jwr$efQ(k';0TQt,3m>g<.KbMtf-MQr^&-YH^N&q.Lf.iP-NvTn\WGc\F\XtKd&ăU"0rWMtfkFWH$WVFXLuh6pW>Nxv4scqY<m4dua_r^cw-q\tc?r]Ltsdve,oHcxuolăU"T7qc[DT8lucz(u7wsdt>7r_rT>8vug4h7?xwtDtMqZ#pDNubhvnMwQr$.MZr^P.ăU"tNvf0rXMxvopdwqc\Hdxuud(8uwwthtNwr$rXNxv%Tup(%)9%%[%-%-C1TGZW0DăU";K]B%%T'k%%-%%%%g%rfuSIuh'k<561:)&eJM?W6ZHpskiWu#.Hk1eO_h.'.PA2ăU"a_FN\bN.hAl5WG/_&Pu%o]&gmKzRVtdLNN]VZdk_lVW,r3yKEZMu(yowXXugN44ăU"rbyc$dmWbXuODqc?ZX^WWtB[e6iP-:fbc2^[j2qDtVknX?g4MNprVF8vrf>x_Y>ăU"w_Fu8tVXuwfXwuVXvVuXxvXcx<duo<dw\=dwLdcvLdxoldxDu8uD8uwd8wuT8vTăU"cxqDx\2U=UUU6Bkn$#wxBxohm[7j7CXejN1%Qv(Kd7x$&b/gi[&Ywx5)Hv3*$C*ăU"[PW)hRatX>u%rV\5g6=FTSgXdB3u0WWB=bR_^*8t.26JZ3TUHQ[(lg5TL9'HQAFăU"NK;:rt9ck(Hyg2q]I'G_Xk7a*/uI_Z$G,KcN^k_.-Hqu[-o:T1Byjr8=iP]+G1yăU"u'?ProK$sg=e(5]p1'Ty/1TZII(v.P.<Fv[_g/ywc&\rTwXjFn21be,6rptp$_&ăU"yISeaBYG3m'*54Z?^-MSFz+a0?Kl:v.0q>hs5q0fM3Y3MIsN2hqmLICV46='P/aăU"6GafI;q4E1QFPaMeZ_9Wg44p)bl=4\EIAy-3,W2_PH^z1(hc*vEI<v=+u%vLUB*ăU"iZ+Y'l0KDDl+gyIq[D7H:JEMA]d:N%]U$JcyXVCDN4.fWiU7$7iukCP%%/EzjaKăU"$-it3r=w./E5ic5%[WqOw=ez3YQi9UW(Ix#t2v$;3&F'Rj?*g-JMyfLF0oS)SY?ăU"VUqYPyLR^7kiciieYDT<JVr5OAYh&qm'?#rv2_HfMMA:qAJzge?deIbC,K]+VELăU"#BT]P_zP_wAxj,XLL'f(Ne%W250[GJfU\Yl*bE3Y\EGl<D\=ZJVS2/UqYif&(T\ăU".:r&bMhT4g0^ib):2ZnkOhLXkCQfq*_;yve52Ne]LGZtsTb?jYAYY]):q&/CD6UăU"S#Ca$RP3AQ&+8sNk1fTlt5#D5xr9'SSF:Cz[9_ehk'G;j1*p8&'_##?Tz,KLuAMăU"4]'(%ohoRVp]UyJ2?u6PZMrk2sfh7AJSvH#fzY=mi>Z_UmG=hcCjrBe&8BO%KrJăU"ZYsMA<dfsW%g.G.o#JX24Uj]U%Mf85n,85S7]Tvy_T[ydPc>i1tFnA>x#Q^i\U2ăU"Z1iGmMjFO6GfbgRi?_QF(Xj)jivKT5Gs=.5_UD*p:a+r<eE1r-2NDgH5e,H7\$TăU"Mq4,b3=YtY>,#M]D(Dq(*-kkxC23zY\KnE3mMVcai+=y+#L[yV48-Eg-<-sJ;-?ăU"5eIGw>ca70A.X]BBxA\x_9J6Q688V>/nY)2'9=r2B>Duo#P0#Z3AVFDW\P-D%2LăU"pEgk%0rvFAQZzi-fjYI>agDO):]Yy<J>46T[JItXu.eK#G\y2H1B;dgkSY1#RjIăU"pk;i%I(WcK2T;oH3_*1];G)J[2cPOy>f-9*$3EXMM:MPa<YbfE0e0CDt?RQ=]UHăU"e]E+BGsG%v4H$Sy2>F6s%]Bghf<_dRAv/_69CN.mU)8Fi5IwPiVdH3Ndj?'hX.făU"FbZwX=UHhq##IGupo)3%/?O8m1[:Js:C9/s=g6:0ka^6WD7d_YklQYDCx,W1E4CăU"YehIH6MGsVmtN.yS](m,)G/v[cg(:30fN>C]9nUeeEI8pn$FK7th1YiB?gG6fO=ăU"UK+_)&tKvRbnJHdbuD,ETYZ-Nl+zi6P/b]'nJbiDAel<_SgGQZ>u=6gm$Q_aM3IăU"CRK6EqO#$b8J/P[5tTE>70TC^qDhc-#QP-x=)VE:?;$<ao5oky8PS*u)Rf?0>6EăU",-9)98vG\007biNq=lnA_?U4]l3o.uI3TFfgLudR.5D4ndybA5?f->%n;$E3UQtăU":Q;bzLSXm1pXKAn/Dha*^p:M3rJ=*-:rK</Cb,N3i?Z]fPU/jH5kgun%^CmfktCăU"I%ImF1-V]_slaQo'DN:#8v)]y$-*6mT*/[M=]Jl7]S([#)i>qb\g/+x$W]Owk]tăU"15Fe]Ig%DYEWks;U;_sIA*MW$i47Ja6anH*LWR_%6Gj2\7Aw>74HXPRg;Z++PS-ăU"jF_pgP83QF1-JiypCLisQX7t=cQ/O79M]TS5JwI?IGtG7.'(8AGcT%B03dhXz8^ăU"sTr=fKKw,<qKv?EM#jRZ^CDdVohg)c]i_<fyTSdWg$1;TUE-F75XF/YM$G7kWG/ăU"dL,EO<h0(j[h6:<HKduD&qNrZ/zmaj(<(9*#(NBxP*JlilZw,%fJ.1VMc;\vc2DăU"\==YI=YRiG0,FLBx,$jaw,2_r,p0piq?MdQst[U>po.Yh^A'Xr(j<5pJ17kLSVNăU"F18S..H\6qahM0^qvInDwp>arb'2(C<ei(Vuv2b^]PHRPd<jyegKi]%nMAa+pUEăU"V;R-#WeWiXUJC_8s$CyD^N*6yh?F]9<hT$uKWPl;=iAev$eby7k1Gr)BZV3chAMăU"kH^<CpOU9k[o$r46bCJvD1zqmJwZ6tR2p;gWC=_3Pe#dLHZilNktDjC2NR_,zC7ăU"?xW#D)G76Cg\e=th#hS\t^X,uk$Pm6tFrC#3g=iedon/0aaNqcp.6:Cm:t'3qNEăU"r<Dz=822BSf(p^'oAhY4FVPJXYdupV,eoWzpV'dVjh>?jOb8zC3d=9fghXtW,'găU"XZjh,-sm\jYaW9QZjwiOLCa6>E\E3hy_.w%)se9=78mYjK(K_GX^Pn/5P&bliiyăU"tmL]RP=rCkM)\J[LQlN,^i%GGftZ1Ftrgo3;jg,d#Xs(O<1P%4KJDk(n-='Q_QVăU"U])]'s1]PL'p^]GOmP=1n8YA;HuxgrmmrQh,Rhfh3x&41#j8Jh632FFvJM9/,biăU"Ap>.>Dk7#BV6Mwz]:1h%NY_w#QO7#5'ot,X>N6F7Bvi<QHKmGIuDEHx83UlR;#;ăU"J5XAjw..4Ch#ZDwUk]iXX,JR:eH7TSoRNLzhnBH3CxK,C$if5HB+QM=p&CG/KrqăU"K1_(\6,D=1]?E:WY0Z-GM.Mr_Y;HYiF%,W4c<?>KOyx.M*hf(3']o3d2yVM^w,VăU"I.#rY-LFW/Q&vF[jGiTK<$Si>n);Tx)n(IuD%dDA[C:VoKLYj%rZfmPRKl^9fB(ăU"]88pVF_4J.45M_Yf+n6%9*]?lV(+CDAf%i=MoJj9h2vo,WHmd5:InT(,pIoKA.\ăU"[-\1P6s)dbGX.W.NPU:,k$/viqcTIO7IsjN^x3n_'6Rd#$eY9PF-%VjQtn/4k-TăU"OOo3OT0HHu3.:dr33^JiPc,DXH/dtQnIf35DBgshd-sy:C#.Wpb2[gbx(hIt7C_ăU"if*c7A..>?tuVTp+Z;Q.Y9O(>J-XWJMXGkB$%laKBUghTv2'p2wirjIi[6MWoj:ăU"ALGyU-jVRmrNRn0L&Pqjzk/Z21p$.\$#ma:5ZQeYMiNJ31XcMxhP:,RJ*5c^m'iăU"Bp\7QLa^DQsXM-fH,XqN0c&0;<ru3;EM<OI78sL8X$.Hxs>(\\QRL)dAS0&Gf[9ăU"*;?UJN=?<tQ/>ZQ]P[)97]hHMMvhmYV+;a5P9_$;Add>miVF578jBuiLh[Vm+i%ăU"gZZb.:p,Rt4Ap_IqQ0tXNZ+$1EpO2>>4uCm.:pJEuI&Jl3D?uYMl#l4B-,jcr\eăU")uaOmZaevR,38F?uAwhr#VXqMJh^tkFE/eZSY,R/>Dgbumgjv&:/;U=O4?RCDmaăU"?Zem*:MR:V]1C*+]Z/9MYO101DT%T#<fvq3P1\94W6S0TM1kHbn#?:iuYu5r^:,ăU"2faR-.(?oP+tXXcw:XCDm]Kq;GR$b3Y#HiOkj'j27K$3YXF4sBtYqkJ([iOv_^IăU"b)K3SoE/D=Ux3(2dyBv&OL9ImYaGfu5PBwmgj-1.,3tx\E/_^W\4-P(^2-;gK3[ăU"'xp]aZR-AJk\T6[),qpx,/+H(CcIo&<RpvICii>n:73<VuU0#A<nm2rb_(G?+rtăU"%Z6X+M*G=tYfRZVrGrv-qL.02**P<Q8_wq8H;3'nre6[hjKsQJ#F'hVA<Y7DEh7ăU"CLMu9ZK7_[Zi4CHRP?,w2p4r_*Ded-+b/B]l_i9)%ioYDX.3s+#QmLS(Rq-6:7(ăU"t_^cBN#sZjR:MBS529uBci[SNCk1QDm#k)B*65bcMWNUM;0Oc>d)^pzn<D:wsR9ăU"#jn.yh=wTa(44eP_.:7R<gCn-drw9ETu^7=dk/[Z=rFu*KIRB32-ZZ5lDI3BTAqăU">AKH1bhRNVN7dxWK_fXr3.G=Sgb/cb*/Sc%YS]aq=WQU0p6KDSvIlSx+*a;.LTNăU"CktGb#FOs67fdImu(NC(BCaq8dx;/lrSO^8i6BMWUIUlMdUjE;v$Wd)K/Og7;LeăU"C;TZ1^#i?vYSeFc#an22Xs3OTPO+*qrsDZvk0SEA2#v01m3t.5,DJBB\J[F?Fj3ăU"hz+/i7>J_u*=7>u=/%K5#9yQ#]3A7OvMe\/H2L(HyK0CW#u8<Ke]^5ODOffMl*hăU"P6SW'Q5r6RcP.Fg6-6=d$+MXQ=T,_AArr'Bo_$=sMFf=Cd9085>X_\fq+H/Ij9&ăU"ti<3oU\DK8$(h:#ZikFxAiVM/Mc1mY+Oeyz'sK.fax+/sf&$&1MjZFZ3fuLcZZ#ăU"[5nlZrbe/_hui+ZMo^7M=q#q\sNTwBbEl1dYp&neNX'RR?t\kb(_h8.AAcJI0R.ăU"RuPJ2Cp]zL0gyi[T^vi2B9j=.GFTl=y/\QPXLm)I;#j_TgO%bKJl_0'GJ>fBwV=ăU"u42qPQEo2f(R#5$l)wH;vMc<X<lh:do+z4mp,TL(Q7qp^:$>Xh<$<(o)U6rnzN8ăU"[AA5]BA1Xb7\y:ngrk>8OeEi0\/Mq[?QAnIE[UPVgLac&'dT:nCV8EB,8'Z]_fTăU"dq0,foPA5YV9ll1hxCr%(rd)$0UZxD:JjWLH>C94pfO#C'1[y.V,2ydo/LZGTYgăU"e$x;LZiUse:jcN;ekTCO&7cX?vb(+Jvr1'5mAJ_qVTv^]fy=Z[IvW6#Qb$+ob=ZăU"J.P*m_UabP;&POgxIsr<'+Cw]Wg%xc1\M)0N?<*'pNruoAQou%Ok6cy/6(#I9nwăU"7^])h(ax04dS-3Pgp4j<s'J82/q&aRJz9<7/#T%,n6<-lTyer2krd&=w>N5B<IJăU"NG[i[:7\aV-3TKRaA:\LC_WeBg1Jp-kzAdC/B?v6%RY/x$,;^kM_fOBiL*_v'x4ăU"[$Ql,h>>6QEZZuhxMj2qsL1rwolF)h3N9wxu\ou<P'ox\4(]fVp.#1vm*A8uaMDăU"95+>ZE[&n<\>,XqNQ8*M:RR7McZS'lbnIRQo4xrobm5<qfNK.IiHClt9q[(i(NmăU"ZfLdj>1L65\9-7P,gDTKP*]L4JhY?AaCG,^51AT%crlZR:N6I6GjY9:jZ<c,aK-ăU"-4m.o:-'ttjC0#([$Z642ml6MQ0)/H&z=B'+$[jpwC_3T:Rt$K[I9s2Bi4?747,ăU"a1h4xou*trY:>=a';'f5a;QpCdpsDL'F8NLjJ,sE<sqU4bhA]9IPlq$/=i10gRlăU"dqK+VKYFXxbeX1XnKQ#6m'26bI_=(<QjSE#DU58Wt^_DWf%o9F/Z;vX'*d[_3>,ăU"8Cbx;MHqFCnb1*6l,0W2ll65\2Q)G$ZV\u0,_1WN#GB'5m7Dw'.m2y^5hxLke$_ăU"C((FhWE[.#oPZ+R=j*)hd#v$B=]YOX4'wBy;t57>DV/00cE9snkIOz:$#mXx:=răU"E8[mU9Nm^A-s'12C=3sD1YOrO-He(Ry.;,p<ycld4M]irUq^XY/$]DV4Cdol1#YăU"&sW[$H&A%9[:2^+FoJ/LZ#]FgIiQ7)2H0?3]Q&b-Y\iS/r2>O'kh4Eim1oWaEFMăU"xuDxZGi;T]c9C?g:3-O+8wpk[S$Qn%59/h<uipXJ<i^sGvjB.UXU4#o&\\is_P2ăU"Y4X34\l^x7RmI-QSP2e/Eh/%gn\;*,0?sPajNicEJ38D-<p'9%?fyxS9s/V+V3păU"yl($:.<m6w7#,uE%TP)<cUub#MZfbm\F^38,##Ma_Lf13b?Qp_m-L)YjW8-1W^OăU"iA;_H'-x'+4u3K5E#/Ze15EC>gH_1?Uo*T.C3iQPj<]tfIqaQL70rIRIM=>%a&HăU"-H_#'uq#jC02[_e%#VY)mCh2ae\tOq<BL=qKau+(e%RhL4A[5ijoKq7m>Lx$4-0ăU".1;2hv'(6#2d#>+Dq0Z1Du)=*b*:L5_To(,^Ht5wTnqw6e$9P+$']FZq#NHUzhaăU"v3;Q%$N-2iUu;-;#f*m,i,2a%\E4d^Wce*(aNGd,T(#+?W((,oRUSxc[SE,n;dBăU"iq<lKslw0R./HV)N8-)MnRi_(*j<<v'^vdMEky+0rNqh6PhX?waY,86(kKHN<pgăU"?le/6XNa'lRTkLcvg]VXo_XP:ED*,lER(BCIU$mkZfQC]qChL\powkUw_TKNwXCăU"R$]Sxk1s#J1g2Yb0NjuU\NQl+T/ZV[Nmu-IO7hDI\$M240':7Ec7d].r's*H$EBăU"mC*8lph--[[ZSVekvoFuIE4u(O_&PeA',E>7NaLk'7jxK)Vm[:l3hjh<8sdlP8^ăU"CK-Y2wp,2BmQ&[h(vvV)Wi0_;':Zp$q-Z;ll^GJg(792oxtgL#)xUGmNalDhPlCăU"VX+h)CWgKi;,[h,C7.&O1#\LC7CFj\WdowN-52cl=3.p(uc:Ia#=gPIVO'-*x?NăU".*8a6qIDXBFM:j(N80L/pp5Z1rgC'D(*0VUNb>X+(BPBJyoq\Vo[l_j.2/h]E)3ăU"jI=pu?9i?9VSretp8H(O+?/NP1YPS'ICDzxB[1Q[m]l&sOjQyqA&vqN)lwjE$Z2ăU"qhk;sE)In8wV5SDY/'J)Gz0EnXX)8gaV/Ys92cHXt$#Y^4i_\stH6urn2RO%iuSăU"s^3nncN^NF?3+'Fo<R:[?L;DNecy%Xj.Ie:o&p0%\;J%m(hNifibni;95o8-M5iăU"3&zQSP5;0wLh(\=AE_P63Czv+Pq?##(d+d(YDJ%x2A$I_adSBnr\zd>uHZF>B)qăU"O[&T/D2]Vr\=c6%QDgCOayT3)1COiPAH\ESoS*S]/>T_reMdm&RgxX(moN&#eo9ăU"#\0WPOoW]>a,TADVB9[rl&=6C2C-wv]aYe1\d:%Zb(PvOOQ\iUcS]>$GbvXNKjLăU"R]CH9A]],lGYVKi?OgjKb3oMt</ItR>AjF1XE/fJ*e5]La':IXFVE;89K'%<_bbăU"R];Nr<ga2(SO#A0gQD1Jj+$j*PeOP[iC6\F'kyY&v2R-?#TA1+&1vr/4Z]YtH[_ăU"28egVW2FX^/msJ>0^g_R'OFl]>^p=aPL7UA&A)lYAdbhZca'ni$9F7$wCp1</;'ăU":2F]&(d#M8%Xi.k7CE>YL_)Jh-Y7OG'CrRIOCSfPH)KaOeenhHzz#t73[51B]HcăU"[Jax:MqGd]m[y<VIM?:A%wh7*e.C$IuPb5?>o0iK1ea;wOccDz>;5Ia#B>lvf9HăU"4U2i>U6Y]o5j%Oz-FN1PP\2'%G\P[am%)[18a'JMOP#v16\dx2YSDEX6j1_eq(KăU";f?A=nU&QA7wA#J9#9mh(6HD8C-H.dazp<[Mrek^%;T3)%-.$qp$237B#7O6N=UăU"CbU5?.;Wuog&7T5=(9+p)-nU41%MUcf88'2W/)6Wh\YL$-6/FERpEXa/-BF/)h\ăU"lo0**uUG%FT>3c9+;o)4NY&Inn[uSSrNjVYht97P+not,XKt2rBZA/VnVo8cgY0ăU"n+4e-miaS':oa0G-I0vuSsvfQ,.KQ,1p6_<%2$/YBW/L>:w8[$Lw_Qa\fJ;0bDRăU"(f^RQe.7zPlR1n&+?E1uz88dDMFTm*m$XyL\_E1mOyC_Rwt9juK=9FR0r_761]>ăU"ZF=^R'\;B$_QV)sLaFs'.2wjN]g6Y%YUIL^v,OOAUIk%Efg5sOYBt7I+FGHCV4EăU"VIqDCB(8+$2NSurJ[kh;+EKr&iA/S?b(?U>F9>#MR6+=p5&xI&gd#;qSj2JsvOnăU"TBdF5.URp+trYpX9%Iqo9KFX'mn('S\ip([UE(&A(mj7-fL6(PRGSZ*:Z7S=]/9ăU"jMMA:%-+-^;qD&A%4)]tgsL&Nm(b>vC-kBsnd4JDH0,g8Kk?-zEIf)5:^WiE;%9ăU"IZ2%l9+_#hxmNcsO_tts&r.J>8ET/Y0C'ei0_XsKg*9<ZArP*f]R-%'7OmFqaa0ăU"10y;&J,+g4rK-p:NO19^.,3]S2&mLO<ci11<X2I/%(t>aLL#OPZ7^U7yJ.)*q0]ăU"/)ZGF52cuigMwuM;]dqVJlot7rehCR(B$zXk:\Dl'Lo)(;t3&KFRHmQ])>I_EAeăU"#]-Gz+eU^nXM\P(cUy$ao]6'+tfq%u\pb3C1TZnT6=0IFh'%9=6JElf52Q&7%%OăU"i?K;2CiR'[IIc/t?5OF8%<2H9IWng2Lr\zeJiexRd15GY&+XXTI-z[EA/eW_W5%ăU"0iC'V2*ae]tW]S4F$2ikeR1A>6.L9n_Cm7cboReEdt3ZEuuM;xt(8-%/XTP&FCgăU"OJye61ES]:-p#=#rgB<qz&_5?QbX]AtG*\#MODuIEB;k1k-9OZ*OY(?39np&,?6ăU"R\7oABmLqR/.%JS-qCbcdYMPd^O8PA1P7jI-2Jix*d-udiSUDn1ed]CAVD8'RXeăU"l9bUx(FA^a75E&Y?O2FKkGv'CifNNir]X2eF'5\)f1vhQy4Hl0Jek2I.>566CciăU"DjtN'^nuK'dUGt/4L$5e&,.MWu.NEk4mP=-N3;x5:Lf$Y<^7MyAqw&a*c]Ss[1MăU"RAF2v*75ac'8^ix#C,0VJeFD\v%1Vn9z17D;U./sf]6'=BYJd:W-1r=gdtWBs*1ăU"S8D5(KQ^z_6TFT*3q/G_M9fJ,X-aXJ<0MQsN(^T2%ezv?g#=p0&u%8(*ca82jSrăU"bR5u+.0C':o[3EzY+X-w6BCoijKiMGYBA#ZEo<r,5^O4/8>QG=Uh&ABE#Hj5*e[ăU"LoZKF%*gLkplR%cu%?3F%eM25<Jn(\#y$Ad^(91cVB(^7uN#2YU-<NS1R$.^W&=ăU"unUbYAi1Q4*FDOaT-MBD$i(u[E$7RhL,&xG?'\/qRj%x8mN+=c#Q1G^-##:n*(1ăU"HN's39%u.BR6;MfRKS:<Ms1owIyC/v0ZU8w^&G_WW\2]D>n#rQ9m#1;u-[tw$a^ăU"$-ZOBkrN?L5]TqiOW5)d;On_1W3VECBFfd%Meh1OR0bj%HqZZeMi;G&Pj%cC?'IăU"[K9yd'[CvBB1qATXqkEa/f:iTYsVd-K%lyxfSBS4/06$XoCkhfBa*SO5C0t'%F3ăU"-[?ml&BP.Trwy[Sg6^(xSjlqfg:d2Esw>QPMTUM-Ta<Cs5kiCF7Fk2(t&#%z>IvăU"M>QiUKd5<sJ8ZiqUoag_(4?j9*)QgIIZ2y:h=sY+R/qe6m+2K//rOm3=kEM2NPZăU"XwgfTW5E/9j4\kGpP4Kmy6#jYLR0B_D2#:SE%SVY-RD71OO85*k7t7X.&^gBe;'ăU"3Zo6ORKs.6>7$+g^d\J('H4osJ,NIJi24uVWkQ_.Zv\b^CQ)*;SufN%YtAyE*-6ăU"i<'io%)R+mvFu[z\ChqU8-VfVW%[Q4Mb-aPLBKE>G:W-OjMf[FWBg=)qJ?)#as.ăU"_Eh-w\hW%5/L$Ad6ZU7;?_#iU<j0ZhU36<d]n#uO(Ri$ce\XuQos'pR;v?Yld/;ăU"85#Q;E/E#Jk<<enkjP>Qu-g.&j#O<Ur5B\sr&:O'lR38PM*JF=ZX3f\Wf:P>QW3ăU"T<lS4JL\ir#/Z&V-<E#UZjhE<,4G=t?K>?pSrg#E;?m,[gUr58lo$.*\hlQ2HHTăU"7\/=k)4#fhuLJ/ZeU*=WveVJ<0<::rO=Q-kM$e&u4WQ/YB<G,d#[>T*7BbSW2<păU"PU\#&\iTE>Vr0JlG$n:[hlV54Lk]f*OZhQ30Hv/Rjp\;X-5=#m2b;v?UZE/.;$LăU"]\WlS+=vh5UjRW32ljNh/T*p\=R4b6#F/td&V7>DF32j$o;VE5L8*f,:F2P<dj>ăU"Y<#HFY<U+=?D7F$Z/6.6<tef#r0;X+tPfS-JLBJ<T_tR/-_xau75f-PX.B0f4])ăU"8mo4,xlHPh+NTmYknsE.l3Nix)DZpx8>lvV/_nf0dZTZU9]cb6#p$wNDsD..zl%ăU"_2iZPnOWblNpnvZeC$&pTKnFMf.LM?je>TiGLIoH[rPfUS-3K-n,p<iGMEZfK<făU"GH,,<N?m^^0hnNEo3u6fTtlxkcD&fSmr8CguGd(Smr8IresJ5l>A&<S-N3Qn,<1ăU"KwAX$HG,<7?b/N4I$LtEjcrmtT+(cRrT8r1KblHD$T-ZvkpMf=S+3YK^[6h.NHjăU"Hk>pntNjF$j<G,5_?m28?[CNpe&T+2tIj,H$(-C7N1Ahll#PKv]^<<RJdDLLs.hăU"*DP6HLMfrG=dZC>,fUS-1GQr;&fEH,cJ?wD(S9+0e7r4?w;j<XKF$i4<(N)>MSbăU"T*p$pT+v_*kTTSt+uuDmP<'Y=[Qrple[v$gSKHw-K^0<Q8qkLcnrzoWRdD.;NDnăU"WZtuK6=ds_l5f'+]>Ng,Tl82GrHc$XNSTLkNFBA*5J)JZBBKBXxhfF$O(r16=#xăU"14]=]I)20NUBW&cgRjJYBOq;OPa*K7'&td8jTrnU=gIPaY]%%W=<h(0ls.>D8OlăEND SUBăSUB V9ăU"n/L)Zg\7Tl1a,DYSp%VdUm9gp2hE2GUm$%4_2X*r7f:-]]JiRl0FWOcC6qj0X[AăU"2qED/ORuTD+&BCW2#8sfd*'>y&QBPR:sG_'.^Ly8W_GB_ESH.=MB&zGaA73[+;SăU"I*QcFOH*&Jcy7)YdUh3$EYMh$4?29QFZhP'D)4a,W$-nP8IE;N>879#%r'=Rx+VăU"$-VQ.)W2p0/G/cRgQrVNH.f<ow?i?u11nG-JeplY)1FU48'C8djm3+[$Zdj5<4UăU">?hN7P:$.M*4[SCw^iJo&YUe)xdIH*/ri^ssvcSJvYtSOB)kJgVRx2Z'pVpCgiNăU".]xuiAAXto:fOx%N:nHabmDw:*;ELX*)PJ)8S/=(%M'mY4[-'\3g\rbb\tC9k&aăU"zkp2qT7h8yv;*B7$WZ=wI=hYX:D.'DYYm2f<;:/_Tee/f4Mi\rLCRAY*a/et3nEăU"ZRPt5]=Z*q;g\b<%SC*EP$f/<NaZ0'%qak(bEa#]It:mEEFYC)x)^&.V;E;N.?)ăU"Z%<JkEoig]#p8iYs\rbTE\ygVkTJ?i's8ZKLLmk%7&xEmeBv\7XKb7C['3x%Y/7ăU"Qrk)tA)RenBG/%X;^I+T+[iEb0bC?5J-ULM)3q?t<_,o?HDh=^*gk[bx.IG6CvhăU"KR.iw%#]lw&7$>wYj3Is\e&TCBINHUOE/I4pdf.U7Sz'VUlEKmPe]Uhte=itm_RăU"kI:PK'n=^7:\#A6+'f<W_V5yMCbum3nqN58k2pi_JcCzUB3DCSWb2rQz/<rCD[[ăU"I9b?c,9rveoAD<,a1y.XK*t?K$=M=M:HO2lc]T?UpB]Uj_Sl-lZGZIAoW5/$WwBăU"1bEEW0AEa]8#ZdnV\e+Th)(rZ].,YJ>5w$/QM//sp%jUrk_R/\9eQ]lQjud]&mIăU"v^#6IVPXR/<Y&G^UgbPPWkI\czZYRq%pzGw;##hJZ3\$LU9b)pRkb(u0upT5n1'ăU"bOs*RaF^=1IA4<2^$S<.U1Ol+*-oOqIt].a\]5kwo9fIkRw<ne%2mcG'CSa3m;uăU"/fdKeSI%61a('NoPjIyPS79R?h=8I.']Wn<am2]1E8C0%z59\fmXa]lI1;XIV3CăU"oCNr3DYOI&kI/eGY39\4UZSAmq0uD\ueo,,OwFiSwC281]M=i.^3h?h\%DTB-z6ăU"ssvcsI07]a)L/pW%5?Xq22Kc[vA\o1\M#3jW:UfL'2eC?=.8+ym#ZI*%mmpbHcdăU"QnbL?h4ql:/o7H:e->5XRTj^H5ECok%0O/8LsW/+D)-)o^[[]fl[/^C8;3alb)^ăU"8')v_+%DL+8]Q9$:KWi<O'Pge.SimM#m1,[*Ym1m)B=wJ=19/(lP%nbe]op5d<%ăU"$^q\lOm4rV%c^_N1ijdJzo0U/Ox+H.#?C%r/%0Z3JA%:az,2LG]C0W&#BT0%DWdăU"[Ybb1ByPh&xL/US&ip/B#N1?Gu6I=\rFN+m*ZE%H9taIC05$TC<cqR*.S&s#Gb#ăU"G5+bwF0irlmLUB^V)]v[zQ_m=<+V,mNI.N^93X_x7$<$(H'mAi'^dqhj<o0P*;xăU"kmIHVJ>v0_0/AWoq3A-Corb31n_NGc*swp?2V*[nnnkSe*S0XWI%pB([FD\/#KSăU"a><1TN3jS4b*\rPggrO#'aHu6%az,vJgx1d(I[=BOP<=cP]/*ZD>*WLcT+:pu'7ăU"fo6tg,[Q8X\y_wT8D^YxsS16[;hUz%lB_GGhVIklR-EDy.7RKAE%BbU2=K[Eci0ăU"3k0:&Sb[[.hvg(/V3WM3QRD8Gd'hH<:EM6#6GNPbN<jU0:Dw[?ZAdL/xqHSFk8EăU"-4(8lj/w\Ahg14J%hb&b\_7QP[)6]1g'KOB9]6['=iNk-g0GD>tZd5Zu;L9pk[făU"9qV<-GWBJFR+MuD=qMcVDL#m;z&bGw/u$)1Q[G2WZ=+E_uxu(cKj7ag;0mSo\-HăU"q_'MeROo9H*198Nb-0wQr?VH48^eG9WO_]ee<^0U506Tp5=44^VJCNzM:-L0uvLăU"H(tN^rN6Dg)U>h^)hN+W2I+\_1\',M(.hr'wG)i&_W%?[M&'+eG*A6yt[Vu&1wDăU"1LII:=X<)1cROxho)Vfm%sw'NPsLeqiPGUZW1OOnN0/p]92WQQH[p<RSZTyHKgwăU"^&8O9u2SsVo?(:w1\j0=Wr;$YBf%KD-ek?KrdVJZS>iC9&-3&AGPPDRB/ouY<jSăU"3:R\r4biWIbXJlst^'>MuJLqmIiWNt>h-mY+3'Q:4A+Lhgte()<*_j/LXeR(c^PăU"huVyg7+9?'L6vztkP*bYW)&Upf&pR&j7q/Q[g6zh'^R[b*he$CkG_t.m#[gUE-0ăU"DJP:Pm<SJ4gNY2Hs\idn-?eeqCC#C9SlWcrq/RLV4$R*Y?\\o1=ieb8hABf;yvLăU"6(V6XIa0oPeo2re2fl0i3=-1i/^=612mtCWnck5kg9xM6cF*=)j-#/LdGMlegb1ăU"K/],9<.[w);mnqY9;5ID1ivqC#6_^(pRXY6ns7#(ua76XGPxEp&Jko0xI[$Pf+MăU"F^olP:.u6kgJCqGEdsgrJE66wGPHsD5rok$6>hlX0DF$l^d1Qk_#_BPmfh1B\e6ăU"Cokbs.Bh?knwZfM6=-X2*PNs#ROOt3ET;'5^6.2D%;2YnsYN1drl=fSNRQ*=t,2ăU"cRjZ(;WQ*tl2]hC$i1;JVB)LfBcYHsvbK#dGF-#DtcYAX[H0f5$Lp/r\/2ePT1/ăU"'PXIiVR&G_<P6Kfun_;d?DR=rLU*G(f()&J=iuWGu0(Nj]1^M:f>(0q%vd<&Ls:ăU"?*.I^qEp=93\$2fR/Pdl%.sgt\.q-Ry5F9*WoX/;jM=0JeK&pybr=([+[MZi?0DăU"ikJfuQKa^u$VR)_C0,(Ct*\r&'n[KO\]mV/vGk?4ubLsdum;T>tHkn5LXVr86d3ăU"u$h4*XS,AB.a1;U#Ub++qb1931%.(:hh((YfTq,ZU)RSi*Z*hL&'w3P#.g'=#7TăU"=qDcsZH0P8:[?gQ.4js02eX(oBx'p4BcqACx7B03DJ-hE4duri=JqF-XiiCytL2ăU"H[-Bb7JOc.=;wY8[EElL^Z1g^=oid1UbP<Vl<+UM56X60r&5d(ad8uFFJ-?#mF)ăU"ERBc%O3v/t;=y(Ll^rX7_DT$,AF7]6+*c7l=2?Sr5.HedWdgmkW?aUE[G/s,;CXăU"R9[%f*0$0mYyn6E;Uh?Ef.Q2Q$$9f5rJBuch&XZ*xMTB,<SmZxec&Vnn8GTgO4CăU"ZjURB#<cbB6c=pBrX*7m9_N9_s0rXD,'b>i9)l$hX6?Bo,#V*b5]kzW%6h&uU3/ăU"^Y&*M]UI+fL<WAg,?kz*jgY)nKm)F]A$>#eVHBhCcI?ua4,ZWQ6<Q\s&-k),4P-ăU"7\Lt8nanNp$DuFY<HVFfLy,1gqp8N.oNy8Ne7ej$rp*4d1n0OnU&>/.)s$#_/TGăU"THjTJ[pBuL][Acs3E.;LT7hk_=gny/.\g'Ud:CM[KPOCm:0;R^URyYqqVCYts(KăU"I0,D=H4e2Y/1a4L<M4.7BKHAlI+dXpYG[tP3UZrEXLc;c77at(N%m$Ov[66jwhpăU"h.KH^WuhLv=crZl(L5da2Dil^lnjv$pS,vu0CLV[i'LI>$[xG;=CJ-xOyQi/8;/ăU",pIigi0I6Aw_:XhKueofUEezLv3r.]f]MDZwEnkjrqk,H>QHrO6E<uRp3l8.nflăU"W*8VSzT*6h0p-7He7lntIrNVbJXcoNJvnKuuZJ0uP'7$TG*.20$.]fF9P38TK5KăU"qF>q;rjQj+U%^(:kEV(2vsxnDQ:VXL&hpx\s)mq:z.$Xj\Dg83e44?9&K&P?g:zăU"CTvMegkwY'<e\fRHFa/A50=U/DmAC?c'wI6cD+)RQ1At89u;aehWT&ZU+&'S$0văU"Am(yNUpbeAQm/vEmDbrRZN((MYMsajVJEeMqlPvRW3Zf0-4pB_lrbt(YNh#&oGAăU"WvZK6D=.?P+pCXbQT63YcRa0=?5t9+TkW&(:]iJ1ia5guwb&N9+5P_Iq8p46#_jăU"S72^WpE,rE#]CIP6Xm\udO5m*U24Sq,M#+nt\o35rlu;sT2t:LLmM0rLjh6KHsLăU"IZcQg&h.M5^>G4G&cg%S?4$]o%sra=&RMeqT)7U#ADSE<r7QfcfNdZ,T)IsHpRfăU"b'H$o74;4dJjGYU7KAFYN]RQ^aTx6?)*FolBHBA/Q[CdYKpGKVer'28/G*FzM3aăU"g;ZaQj[Z&[Mjy22$qW?g[QJGuoPf4)F>w>5VYkB4n^c0$cQ#<8r3IZ=P$V:n5HuăU"XLS&bA%ZWvibmtdwMu,H&Rt#]]r?(x<\_.+cj6?36D/+VNOPVfYYca%9H\c91&8ăU"Sm==^)PvT(kClz)O=l02)H_eAF(a6unUrDWhNcJGjW]Ml[vR4s\7kEicdzgW4JwăU"+6YY#Ad*1(Nufw;Tq>)-i]O:t(uRwO4mdapjrBRtpr%NeGR#P9GaLFE'gI8WW?UăU"Ht8cfSnK%[QPuEu/.CDYE3Jgf9Os'MPm_SA<L5hEi63A0gN67%(6A(g%vg8,<_eăU"'2-E92uWG0PoCtkF.tAV(F]63/miqGWrsf-(B5)1'0_aAC&g(;7Yu2,)VQ6z:>KăU"Z=i-Wz2g4LNt5jhL'Xcem*hjn.6P3jQxHBWiziVhFdMqtZ>q(AxLuXXoGTbFJClăU"bm$Ps\xYbVJem0-1;a89NVX&9dnSPiTrlCED0ayHkMj-BJ:iS#BlS]VV.G*Z5eZăU"6t-T)tr&2#XuX8p^<NFV_u(Xd9ivUQ&S*3Eem[sLuLjbHkTn;'G3ud,,scq]eGhăU"LL^reKnwJj;ErjInGV<l<)Ur92&*t%_RJ/G,q,ncTF-[=uqQmTQQ&l\Av'sRi3]ăU"4ji<o^md=:%FcPU)KX.7SwMarCU+Y%OXmYu*VU*o:fa<YC:A&g73nN:s%8*KF,RăU"bCPt9p6i3#a4gGS4m%/9mbf%g[)dinJJ82#pDXDO52]t\d2reubCr.,X=Ceu<4PăU"4(.C/I0fcZpcGRjLHLwW>t,6mc]+dK.lf\En)6#>aC,mP+o9e=<Alng;Q#)gfwOăU"D(%ci,bXhOtVbF'IZ[>.;rH*e9l:0-XQouYx#O2Q'p;/eLTitB_RG/9WAFo10QOăU"VxtopdvC&]hLsVLK_VmDBQiHMkjlSE2DED)7'>$;#-I&8>Wr]S*'R:qUn7E,dsWăU"TBcETOJ2rH2Q4z/^)&3*)*5N;Q\9Qup8jC3C#ijvcGLGhT1oLQbbI,Z%)6<[O/<ăU"6]tf)%g*p9m^cqVjSk]^p/I#5ERS/gwQ6,AU(dKMz-l,]xPat+0$jcr/hD:^T.ZăU"MCYX'\(=?cjI/P'#Q6?>vo&tXapkeR(LGkUb^;KZ_I?v<g++E%xrAZpfBLG+i^<ăU"REYx5)%:1nG)kK2M4L%x5YJeGVhmJDd>]6t4mDdm?*GDTb?p=k[5a,po[hnD;(MăU"XVsj.hd#kb)q3=<_&*P;Jl^u'Rj?A$4d5nnCXnH[kjbXz]]4\Q&d)2PgIz]YMzUăU"/YJ?&()]TYLJQaXI;*Y,c]ssD&A%Xq,d4fKg]h=Y&2io'Oy:_$d0rzNeUQeM?VMăU"M&X-<MAOUSY6g'RqXhj)CtdBp=2bH-s4fiXo#E'oeWM?t/W2ZuPYmgQ)&nig\olăU"QKfpPNsrN<prlLSEb4;e91W=CGix\huD:-H?exe93=jJufr0WuwY,deEBIhMrZnăU".g^JGFELz;T1m:u3Mj++E+7(2[r<jFJ4#:/&(yOARh8#JsZ:hhKQ$ipRalW^+t>ăU"ps$gC)Et8qSiR^oe*MC.]<B;OLm'bg]8^T%m:BTKIFbuGMVpsd0onUHvGM>Ikn<ăU"UCgPZqB[p97F:[AMH4SX[Y>jC<-/I1#rzWoe5#_W/KULFtGIZun,CsiUK:9]0=3ăU"ZU,QC(-D_U]-/=)J58U'LQU2DFC.F#09n'DZf-O5:4Ob<mJ?cZ^0:_4W+._+8X+ăU"z#95Y[bMZ8VlN+$-Op:t>X2or6z8xYnxL^scWp6-T#h8[JNOlKb*ZuMu>*G9\y(ăU"$XZRHA'E+EWut0V6Zc>F>tnwu#$X+]-Q^b*z(IOCDb'2B)+]+(x'0Ur#POiRjj+ăU"ushu?Nfpsc,ZfAFd_DcuY$4O['H5inYj#HTV1la<ccl]YX1\ijjeWES<L($YgYcăU"#)OaiaSaw<ThQ1Dl>,:oel]Ngf<\.1/2aVNR>e;/O>l*oA>FtqH8/B3:uGKU,CEăU"p;BoMmv1WH]9];W7G.T(gL/Gnkz#IHo,6A)Y,'\GoWeYe1b43%5-g>i\HCrDq/făU";Z#ljHH;WW7F#Up<%VOY\*:PRKY&IB5+V0&R8-Ghuq:#c8>Aa-]VTDcvkdvrJNvăU"_lEw&gti%Z1AT;bLcd+:pEULDYW\<D>Z4d/*q=k')CYRK4;>1Bhu(ex]QchLLZZăU"aS4G2Vu#df$09#&:AH1(SF9:#Ec*)8:]HsbW8^>$PoA=^ljLOLo=LQbbVf6X*3văU")n4^/Utgo9=q-pLl$VAPC8^cK0HRZL2'^T]%9+jj:,CMncKbrUGAxp>ek]JZK<băU"zu>b9*f4vS/R9KAW?=s=E&'5(C).fBbt6Y\w6=f%AaGP0Ko5d3rIOg+RR%t9et(ăU"+wAShUbLeJ.iGgZ/I#cL:W2Wp#l*Q<.aj#q>*nK_ULlQs,h86ZbB4><%zKF(%RoăU"0446Ev7kGX7n38\rs^)T;hJ.M$uuhxJGNv4n3gH5n:D;)j<V9:bm4bvvMD:-J?năU"tHd?tu,tsbk9k8jLD=7ac-nZ0,imUZVG+6rsjtToc5o<-H0\K0+^<S4hK#R]KF;ăU")cHXOF7aWbo0aqvgbVNqljbFpu6siktj#sfMMd/BjbE=/Av;R-PEXR^XbnE:idEăU"=VHmkX^6U43fh9RSNBBQg*FV5G:on;Wtfv(vGhnJFf3kMzB3:XZeJ3c[)[]x]tGăU"idvjQ:(U9L=v?6FWI+g(vdYY'aIg\D;1#<G':icsvm3iGW?z$FUE[YY_sEE;UL.ăU"VUIi/*E6*CKEwT2Jj36Ns6\L6duQtu6Ix8BJ[V_\q+hkOr15.ocOE[19daOvSPZăU"gM8cX2DxZ#xkb^0>c,')Og$=RLGrX45)5idmRtuXUDWlQ68l'O2TdZlifBI$[;WăU"C=X2yibJ-S>FklDS,bsR?49TiDlM>OAa(>UD$Aq.-P1l+I'1Dvr.?NlfT4nsuavăU"0/u7kI&/2MEQ]o9(nq(oRUetPnR<-<d3AC?l]qNG[Vu0/7o3;LZ7];Y6M<'WZ$;ăU"[h>QdrK&6tEam>dDCGo>]bw)A7.2_KBUXUIngc;rFP#T'&o)P*>jGK6HZJZC/5xăU"veQ,?QO9JsWOQa3o:D00hJ=*C\40_X/bk)e#T9_YFH<Bz^u(X/p>\v#dpaD[a;JăU"vGAuWiY5$wGDEXW.[7*-WB1gi2[#(*J\Y=z-#;sc*dmU\NiVjd2AuH.^]jOjKiNăU"il<zP3f3>AUcAu<QoGPLr4-Xpc_'Bdq.-212bDuk<JA#vPFRZ>YLun&4Dh'ZlH/ăU"/-&P/K'_hZ'u7u_3QiQ$c1oNSVseeLFeb6hBWulcc4M>n.q&Pq(tJV10sufrp6răU"15H:bFX$o3WXbD8l^#SqkIpY$o&C572;i^R=w0/'g+/ORecMZjDXAuNUTbjG%X_ăU"(c:1L<1vQ(z(1xwrR::Vd^]'=Z4c>'a$3':_-''(lJy-cgX>ELHlG'Odqxm9Ba(ăU"0K)gM;[V(A\AT,9if:nhjuoK[l-J?tabDem^#uua:P0r8Mu\k^WIo(kO0i(aYtuăU"t0[LCLAQV0l:PROp_:VsZ;T$Mox4wV>TpOd.]:wQUSvhJWqxnJZXU6:HH'r:rP>ăU"R5P#ve,u,(82>LFc$h>kiaGPtgBpV#XS7H<7c?p?lpA)syg)UYVC/l/BiphBu=2ăU"Rjb'mC9vbF,0DG?pQT#Vm(*?G;34beS,-U]bszfKb$&>YKlAJJvd06mc_nJd,DmăU"s9a1w]Q+^dVq>8:g%-B%Kh9c'9n1XeXlv;mLK$cM6BfbbUPk&B%++lU_/+BS8a,ăU"C.?.NpU\+6T.z%m.whsru;P'%QKQO[.u'1'J'kAa>2i&T1Omm#O5G'BK_4LdZRAăU"tKZvHEgG<;3Bffsl76LV5ZH>auqjrp_-)1\8q/F,+k<I[?JhcS3Cspn>yZ>sctoăU"2h_,5d2qC?V6#xVA:_=Ohj?C'6$ZP7uRp<m=M3n2^cclu0XtVVYFiP.Hq,]bWjKăU"4'\su6]B6sd5sRl:$fOg]]G=5$Fz/o\11T><DI^3:^gVu3Y'$uI<7.*Z$:0V''OăU"%AceC_=&P_(^*<aqH:BXnqMC[Qfjh>fuW2vns\RZ\Olp=(?lI5=&Buj=gxSifk'ăU"34pu$V,oZiRlvBoac0))#k9b[hFh&299B#'-^q8)C=bI)MyaBB1<l8*)J/&=V22ăU"#%E?yR^gI\[g(,P)r0b_]O/E>a)nibe0luhkKYTfSVdraZv]#.hKA;VZ\DhHb3\ăU"FoQjJ&e-/YQlBN+z9i:E^--c,-cDN^J4tf.gTQi:fN6i\b#S&sa/ejqv3ivX&0lăU"7*6<C8;*IqzjR[K4DG?rN_FS?pGg<5&WgJpb+GG^Kfc+TlI4A'm,pp2\U/>oLu^ăU"YJ0Yo8jg3V-7,w<=W4BniBvl4=tLkGbB7,-]B9,+Qf]_N>?,(eck?[rLgDlIhQnăU"V*.VHQ&MEex<-uV1lnQ6(>Nb0b)Epv7v'rxn=aEIm9zQ4qXl^D.c8lxRTaDT1aJăU"L<HZYIH'Uy[.X6C,PJ5&hk<gqO%mOr=68,]8S^I^2Pn*(%7i4>tDcKoQLJy&#l/ăU"%=\>W4kfJJ^5?/fiL>&xvDuw$XxreR0Pjb7CJ),z\DQvqrR4d12W#,>1YgXDCe8ăU"nBsFR7oa4jvS9P;2^f$6lN^T3fLCV9upie[<\b/t=DGfhj-Iq*_X37U+IrHj\XCăU"#oc<PesauGGZ#I%%mN==%GFLhjscuuk6JP=RQexjsNp?y9-T0dzl;G8fGdo/JWfăU"kAO%)*6(AoMGw)oay1/WGQ7%))JO4mGajoj=Hj_GQLWu65hVtJXFjr6FXduX(43ăU"N3M,,HNxh^;4&Vx>DdMvt/f2_+AXVcA2gpQ+f#o=Ms/O*kq/r2D3/.c<.XQ(SdrăU"pJuTH$>?=#SBSM#OMRYy%h0H^VNM?9I1l1(z*u+uqJr-SIGr]k5K%X2RBPFc^5=ăU"K=iEL.$+8R.$&Z7ua3h8fDCPC(D,2CA-?QC>cZ8pZwY04e0B;nhJYMn)zIG_?kqăU"s[BOo)eq%r>AMlfXBd2=Vl%)g&9/5s#j]<7B\Z4=\UH2p3;d,hA5mVKHtNw>OruăU"/<buue1]eR:lLKD0R&*oHAmWi$/0uDmuKU.BLU$_[*AX(hTBZrJKbZnB?RVMvm$ăU"k$[^NZ..X=8yRR<*$#P\GV9z?>GKksqc,2t6YgthVh7c0tTkW1<5UbLmP4ck;KqăU"TP]REW5J7=Q%1u>Zg0?3N,[9zqZu^':WEd4n=evlE#fsq$J7_H:pMXv)V1<f5D2ăU"C2SP9CsGoHjRMhW.H*q2:j*#4Po6)UmH4$jUeWO#xAGKesUJGNUh,mJ7RXD9kEEăU"6U.9J1*Pj)?%xG.'[e4KLI'P,6;#Y5jG2ZMl#L%)%^%f1[#DR/'^W-1^q[,]%/năU"m*ke>:+%sR/1wuWmSOs#rD0<He#_#T9KGpAmqe>yG^<1tv=Cd._3EgMw8:GPi]RăU"(78Y6d[6w+m7#_0KGc(n?b5)T)O%bg,tVJ\b=0ZPFAF-Y[wMsKthEi2h;K1sZ:,ăU"0Vg+jYl47V[m1p=fdN0=KDG8Yo-aAM1mnOC((>Z:p4C[Jls7k<6(kt>[,c&kedQăU"^<xM+v+os#.U26+HU>lITd)NT7cU+Lz%iZngj=5AVan4162BsZM//+^ccC)BdYQăU"ghD\m*MN336gg58\QAcK>84OEw=7U663VIw<KQ)G_I9txEPwZ8zFzaJGO5#bkWGăU"c;2RS&NVms+sJbk=pwF)YcQ18#_>#6Penpe;U:_B,XHrWLqg?<tP#2r,ft?enJkăU"oS:A%p?Mjw5Z#Ft#Kp-%/D=X>=?DRRH;Y\WaQagSk7THkuGe,^KZ#6A\LEA)os/ăU"GOZ.U3I+_TH5T%\:TTQNSW4AS1pOR5#>*1z[d%NE)AkMu>XNNptTN:zTX]CilkoăU"Ct:9R5hDQE;-*yZLCt^\+D=fT&PGYD$+7R,295nBrby/q>4#Uk6(f3NCAFvGGZdăU"i%R1OAGO$r]<-QL2\l2Lpfg976^<I7'(2;[(<d^VzM?8/HYxp;PLE45cc=O'p,făU"I'EJSks(gATyf$Jgo:,TQJLAx[(M#gJ/wjpIZSqx;.2k(Klc,$b)-=z=#7h:1KbăU"YVH/]q>Lj<>vKOT4c5)A87OTD1L7r5YNs,:skXuiQnClaEm_xS9Nm90X[aIhu#eăU"#38HzMlo,dxSQYkbhE4d,bn,;GgOrU.+p.c)o>7+PJ,q40\:)E%Eqiq&*R*<4V,ăU"I':JfQ5_Q.il;fuVY;\/V2V7O&8q0e1ln#Ee3Mk_SEfB1_3j\WfCDrhV<6+jg+*ăU"-lLQ$mX??\f8K^.4(\-cDc&V:dDSa'jcrBM+O?E)0N$mrfY>X3+>c[_A6YXpkC5ăU"b%e^gxF\rel2RWZe,(,E^wY_OyW:Jq+1\#+Z2X;RmD[CB?7t>Q;Zt^WwYcuJ$jsăU"i5=V9A(U_'A'5D)d_=20WK+5fK:>EpY<]bJGCacqkyp>ZY^X8g,9&OmJR1XYqO1ăU"jfr&nrkN<&z<=**:I*WsV7(etQ?5jeE%(WF8o*tgmaTN^lC5H1pMUrsJAGXFa+:ăU"zFdkrfx<*A=Uugf_va<dXfk:[)0T/6n-.O^-'E3gYs2PHj?,^/&Lj/]Ukq5(FsUăU";*,T8*Ac0I']r+X9\obZV#h(2Vp838LV02J'd(Y=lisbB(*H=bBS>NiB/Qx35IMăU"_+%#s)Rq;61,4qm:d3(vh#u[MQ=,&wWooMC5#uF9XAhPm5.nC<qNbDis]S:8%:hăU"Ih6$[l9:HS4;FAGt<+QVh9[xIG2+r6X+P_?K<#V(C'7-4%=W5ir\bp=F)+sD=q6ăU"w3t,?XAN8&)\gDm]/7Crnv#v$uE>/e'usvtKtOD8)8sP=YAbpne)=+1pIm=5B_WăU"o#37u;cA%UB+TIrUN29jlIqeEl6<.k;7D\<UhvV+1O%W7l2[aAjq_se/s866URGăU"K/*WRsNS=?3Yk3v7qM<3f.e-R5AQQa?YrOce7^yKE<S\92p'HPgsda3)X\]nJ.QăU"D0r<3'SQaKfO2u6-.S/BKTH(iv<haP$0Q/O9hu2fFt9ZMUc7^cFI>t>p[1fl*2VăU"aMI=I\5nM1'SdXdrWg$#10=QDgl2R04.-P(LB10#B-=.Y5UB/&Un>l'hC$7D1xaăU"%,7VD96u;<J)C&aE'1Lu7cqcHm?Ei6dUSN<wBKqTGSo8/x[uVS9F3Kl[vPzPocsăU"I>=fp_DhBVVn7(]d]AY.=q(Y0#e&k&9:%#0I,cY:FSk?dK\nGW-&hD&h-N+q2LjăU">6/g*<sten,]sM8SV*/+Opp'f:2skB\I$$=m]B6FGdE0w=dXbBdFP\2V18ls>85ăU";di%(?I.eVogW:1OAJ.JD<Aj=ewE4+T/eDxTVq<m;)muw6^VO0H5*G^f9c3DmG$ăU"7LMtdO(6TnRTNpKpx*<2&rNA2An/6sX-mTw]J7w[\ppbL;Z^'Da1Rra3/pVG91BăU"a^A*&Y0LMOMF,OK\53%(#p06FfND]3'-cRc2QGOC^W(MccudVEPa)'L>lcGnawUăU"7JY.c]x-xXZuTnjcXkgg^lncR8]J9Ly=2[4nAxAPIwL'QwjH>f*<sYm3RF<N^u\ăU"Y(8U[1ew*dOL;NE7ll^bj6?\(sr6ip=OJ_k=Y7d7JE6;dGhN?_SWf)MzR*XBGMFăU"e+9lhc;%HQ\l,I*,U_b)Wb0rsGaS0wyV2%Q>nXduX'GH9KZ$[k3;1sd,%2opf#>ăU"$eo*4(bEM?]9MHlTwb$V$Pmq.79KQUG)9QCbGJLT)uUhHg$86s>XsT\oC41&GE8ăU")V#>K*I\.vK;hbEs+h<1#-Kjeq/QU/,Z/u]XyD%^(h'Z*CZ%d$wlJ\;uyTOEQK2ăU"a,4IR]^aB6=4OCh1pzYpewMIEX9Scb*T^wCw88VTxbu.iZNUxs6w0hT0C/,(_iEăU"VH5LT?f3m\R'^pqb?LtcxZ,r\j0j/nCSc'$C7x'E]+CbT?+gAN1=vOVrWl>W<;\ăU"+W8phr:ZF.f_IPp2:oup?jV(c-V&O612YAA';5Sap(F?mU6wni:-J[Ql8W<VvTLăU"5&$VS1gGA'o18]+FUkRW]q26TeE%&\^BJPTBt+$zfo^(6+&\9Q;p7&z19QH2*\jăU"tK>jk6K+:aRaSL;\Lqs)DjgEJK27:20?6GgAU0%IrVb9>S]99S;)0,3c[k]F^X:ăU"aa9F>fI*s'm9]L_1>=*&q:JeBOP?r^q=T&gXIOxG9N[RKLLVcTMg24C1x]6<I:măU"_ezLzq?kAO,3eSN4Zx0u.q'\xoY=nWd)a;yP?N5Tj0cGr1ri<=-u,<(x$x:BW*HăU".sZ_r=F1L*zafW2'qE&kQ*JkO#VSqnKrw3RRyIF6(.4RpQ%7u5VJL*VCW$TYg#XăU"3_8_0b=8hOuR,HWuebd5AcDL)15^hQQj26>#fL4l9H%YFC%:e-A^R%5;\;Nj;;ZăU"+7n[RnmZfwg*#L8*_T07;MBTlqwk+sx_;xvHK.?4J9nOf&#:aPBmK&W/?9.W*liăU"H,>5VIK0O.N;b1/<+Jme:6.3*KA/##DRsDScIQ[,$TyQ[%7R5Rz507'lgM>&HLoăU"KkSD2L\gJ\u#3O3=Gb][Z_=n<9(9;??=--S7kFaAPB]0am:dVxX]udd&l#8S<6(ăU"?=AeV$Ys?6Nbu]1eR%;)aXzF^q/\KsdTN3p0uN(0[Rw)87q.q=pNa'ipStmeYdUăEND SUBăSUB VAăU"f#$%X<7*fO&X,*3QlUlL?_Kfs?24.O7TP:2%K*u*ruB0A(^a0TBWBA7H'WDV/5aăU"m:FBAdJMF1#y],I;?U10/0I+[$W4%.I]:u56obZFSjZqnG],z#xB\52*A#lnsCFăU"K&$rr%8[bT_qtxUyGv$[6kk4C2'OPF?/7iKha(N,zbgv&Y-W>AdbEQJ'no-6n'săU"bdjrrd$lFt>'i;7a3(dTtKA^of,/\#RAsnTGdbIY_a=ou%-/:CY'*;NI,?Cu00)ăU"965]aB[fsyTq_d,am8,Sx\alBxP0ft\.&6nM3$&cQ='cM^uWY0]9$Y)Pw:i\nrkăU"Wx^inhNi>A(;42mdJqm5afZGijnB?Ff)2f-jT6I6_GzaVICr?s#fq^+ZVMJLQ0\ăU"IH>0'Pq)H2B9o_cWgmtP3Irw/YGZ>k5CC\?B\8%1g$%\]b$AGbTmLh;prBJ8eU1ăU"P_)/$SUk'VpebseQPADP\kQ'FC(Mk#9;]c,)HL:EM^cLl7QBZM/[[c=sjpNVcf%ăU"5(c%sqpd+LUWNIg?Uas5O3h(Vr4l)bv[O(<4uda.BQn.PygijanGhZtjoMA<cBIăU"=i:r:wYcn->lW_Elqaimq%\H9ZQg*ip?B(V?Nj#7cp;i:dP#qn2\tRBCHNbUx#xăU"ouJujl><Z#/EWo5#Ge]?:GpU*hXuvWucH8*fiBe]qNTxjQlet,.MQ:nCiOI9'H[ăU"(YLAI6o,)BefQdUZ6Sb\DAVHK<'Z0:Vt9nBVb_L<<HK_J#E#lQ76kkip%;aZf(XăU"4hPldQa_[.&>t[q#p6n$<Z8pFT^*'2(Z7D^R3Ba&I:=l9EkQ</[]t3uO/pVi4-iăU"bL:oip\f.xm'oMwoK'?+LZ/wa%MH=KAqQ&BI)3n<HMKK%06Wb:bp4UhO*_6$%P#ăU";;sp-U9/3%%pz2j''\H/7_CjcFQI%-#Iw=7C_u7-../7[Y;%+0$eDL'Enl0NnumăU"QIG9TeX)cDBRQgKmMcnYE2]N;b_81xjcu&rG>ZdUtNrfl*wyqD_ZUa1%f'I1-SlăU"vO/Ck4GY_P5P>BvXdjRU.E0MKqI_ZMKY41mL>',35^JeqcmKoD=k2_n]Zm;LK?NăU"a<$5iJnLuhKBVUrPB4oQM7csL%k7>RUZ$?ZrN4RCHLr4#*,wlB9uNb#joM7gC.iăU"5nNcPDnqx$Z5'CqUWo%Y1AOci-[LHfTPB*FIl'hK'1,L9R'W'-Hju$1ekXoxNt\ăU"r:/m0jk:/,Fn$%NbPXsP$YJ5ZPi_+l$;L94OpJ/qY<jdNx5uAgwQ5;Cc1]l%_\>ăU"hpiCKNCT1oUF/YWGk]'fT%&^Q.w/c5K-^9AXVaYhIRS3C\SN3kEH7wxirSkUEKjăU"h:Zh7<z]vlQ-gdSNv0l<zHsB$ZIuTYL)#;b*g];gH4#zjj:sMH:/uFi(<ixPtt]ăU"0DKD;b8,o8>kso#Ge;$#?g/'5d(iuuMqaBNLxua>'1Em5DBgb]>:\h]m43UP<7CăU"uN-/.EV5EG$kqcZ0$sVls)):3I'#mkbgQ:hj;td-r<:1'n?ZI*(MDSyQ99$Z[##ăU"y[e2V9drL)l#0lYB6DeFs3q//pLg9k>;S+*v*<3t6%[R;Kt>emdBeWipuQ$[Y?răU"rudTp$?5D(OdTg8p$hg*RHxqwRjJUxnYII%T-/:260?e<Wh.Ao6&gSIVk2Yjp5jăU"=[%hW=B^C-[JLIYv[[lk2UOqDMJtsBb^%X*((YU:E6=C8MbQvcznWj5x)Z2p]VJăU"&PR&JzpBkIwE-O;pvmf,;oeU4k+hZPOo1^&DazSkC;Rurvf<^&X[HCc,F6-bhm[ăU"ShRs)#[_]XOjjJ\j7LT__%sIOT^)inW?Eu\<s?hU6kF0zn-?NpZ2d6yS&-huXHmăU"iv>OxFpC6(Fo]oF;9j8(Zv0bz,BQ$s80i#cHH0IueG2O(c]5baH/>i:6%psdturăU"6i.qyWa<5EB-'UUp%=<(hl-ePs<#g/ZBF0)S4YvI0sC[rq<;B(bm(b1J#aX&_-:ăU"1N5w;$639X$7^/p8f+8D0b1z8kv,O*O=[V5?aJ_p%3:Q^\;-24FgJZ1loA17icEăU"FD[vB=f)/(MB)x9lSpT?8r_L?r\HDBWSb;PySnd9[g1D9\K*\P#g/5k=WpvJXF%ăU"hBFWPJqn2RwmB$bh'XdMr-=q:gJReCW;71CsV%t^QOs5L+t-\q_Qlr]Y+yJC83iăU"AwPkS+YGq+81NrOH04Vrt&zN&r&M]I$aw]Yshn,p%9=3>54qY4>1rf&xjd1x\TFăU"*:[hiMRhXS;Z[%#%kW+.A'mkbp9Fkg?c$(<Z4H$r^h:WSRji^['#J$xVY945Ye^ăU"FvMZBbBr,ZLku]EmUu[ksLj<(m&1rC%D=3:W,e2gWi-fM$ufOUb%sT^e6;h\#bDăU"4870]_iLG#<++zO0)pn^ubSOK1h6O7ME*bqyH4WI-KlD$TlmKoJdCUkDYGLNQ6.ăU"N]3<QuiFzT7bUkhRJXfPpO]4jvE&k$8<HXD\;>+&Q]E/^eIwMzu]pJ;fo8P[ai<ăU"?H%WaX<C7.uEnSQf>ZA>:vxL&ybD6jJb<lDVv[&8lM5-$,&Y:4t_CpNz7OZKJTNăU"tNa:Il<BhJt$jZoqBvkoN?V+wa/46XojwcRutDHOm,T]?.-%^2C5xAiJ9?k4>cCăU"Y1,s1M:n9175\zXTW);]Z;Z=Y]&40Qrqe?$H0mTS43M<G#<s0.#F,fH[vMa+)(MăU"*-bn$'OM%]Gt.:'1ZU)(;h.,C-E0bM(?4mu40oR>1DZ].d7ItAOVi#8E;AVeIvcăU"W$_%_j9kL0sA0z&$[$2+im<WcKj;:b)ZtiBuiJv.[+VwWQYNvqMgz-kD=HR&QiGăU"4C^s'B2>lnVbkie?:No:Y8]6iey?\K(>w=DZxb*u^DLJzxG3\y%G)A/q](tqZi9ăU"N7T5uIWT^<-6WAakb9WW31Gn28GQh3Gt^;nQ8SCvMzF/sZ8pZRu:740RP3_33=1ăU"6JKE/T3X<\o,U>-Xg\>Tn-oD%-0(lyrIDv^+.:j/:wNWo7X;%=mpg$#>jl>O;$DăU"xC<O7a(KI275zBudJ04rm9#1mad4)?+2+]?835U%d\PtG^p[.C_d4KoEjCi7Lv;ăU"[;h8J>Go*(#Z4Gm>37+;_tk]mjEo_tOiQRIxgYbqXB;P5S,al=ujr0P17uoHK9&ăU"k$kMo/DJs8,DcMIf-Nq^vq(?X&.AstY:3&$Y,0I;Q8MmzxX]NcZF>:\U(B=plQMăU"qJ)nIc$Ikxo=fvHq?GjSdfd8Mrd[JAJ%z9\)%rLQa/gM432sBht*(0??c,6AY9]ăU"a:Td2Y/2lXHjpEE(Vb;62Oun?nss0#+[DL_RgdQ6GTB9:Ke=YH'Qin.UL\r\FegăU"xPAjI^-s96?A78HxJ3agh^YHemprdk*DL$Hl\:eL+H5C\cs49Or[kPK6:&>Q.AlăU"LokehIqr$w'tm'4&iPz]^,ss]be4HdDg*E;Pt)fQv#B=j7UKt+N;L:3V#D[c4%kăU")lw7Ko[F]s:0P+g)3.7MJ]V)2R2H^7$6J>QFhVOPp2Ym=XLo;d-84HVq66KDT.^ăU">,G.HI$UB=bVapUtN_oQiS6>XlBXKt51c5n'38p]ud[QtKiD3w_ln<''^$R6QJ3ăU"w<>/5EK+BQsgK0(%q4xYbsfpTL/FVNwk%M5;PDo2e)J?Wk#Q4KBYh]dl&.cPfBLăU"^%+gpCO).Kt6(p90jC3t.or7rr\Bo/YQfJI/B-RR+0>ThU$S?hOiO(I&.ogUSCuăU"X<gTFz=j6=*]f[>If0[A4em,F(OH58HJJ0]fJcz&,r5A&gDk+z,,%3dbLMPs%EdăU"c#bU-\OS'?c8#F5ZS$<WkDh>zd<<JBUBgAc;UZos:crFYK(CQJm_aj[4W8U#)XpăU"c^F$/Rj+1GO,GF;<BQRCMbiaJGph.-QbX1X2T.]z.K/5>GaP8jqJqZwuKT(8utsăU"v$HhWaj04xHUV72>[rSxpIsiC9lM^nvykE+7;:j0[jldAo0E3PqxI6aBEOV7wD;ăU"IDbv6<BG;%_z(EV%%B)+y_ins&h++=XpgqS[pVl3ed#)Bfq0q_CPtSf_bCvZJ;[ăU"/$<pIJC%&=t+?YTY55(_<^/+,pJ*<0u=N&W72BsHoiW'IInKWLD**[r7?Yv9qg*ăU"j6+m^Bg1\SugSQ:vHJsX,pATR>jMS_m5R)t\+:AaDyK#j]AoE9_>HKK/*v7[;ssăU"8vEvz[_g/Y1(TWnsUAbjJ\(5B1,LW+XEv6[nf%ud*YL[0%?MC<V>1[1\,nl'rFLăU"q]aZwNu7TTss1IH;KfG>F1ugwU,nFdwiHn$t&Z]#DB+b$3IA)rw1WNr(o4QxXVTăU"_TX^bdsQJF68yj/8X_DLPzS1#)4D_ln],e_mk=5&%)zJGzY=R$K]iN4?.5S.[>LăU"]8f,Eh%U^bRn#tGZ+82NG]i>iR34yJKU<vh&)6JucE+gUn.UYQ[bZYsi_O0hxUtăU"v;PV[?DntNl:;lCK+XHnKyCIjQO['.6)TZYq-hU56Q,M-v&Y[.eh1&#[g=H;f&8ăU"_P1H=k\K_M&xFXRoq4V4*GCTc8jl+IPAAS4c4+-nV/_ao3XYV=(2kf3$1G6,4*uăU"G*e(g(L_5D>)k-*BSRwX\KSJog=7f*w.aXYD<0ZLFsEg$BpY,>05VmNrr8A._4eăU">;VtX+?$5GVc/K2s][PLCGVvE'G>N<xM-]Xn:V\V9Z=a7/OD%P,J([,/D1qkwiAăU"$lIv*Nftg_ItSa;aL5ppk]5jtTndi=;o1h7YE'RL:W'-8LC8m[>.I=z\ux?AKuCăU"Qn[R],W:Iwu[4H?%[9.1%BjDZP%k4k,/8$ESHdswHaEQ[u'6JLnyR)FOcZLE86GăU"SF5-W\(t^u(cP)E/qVOUa%9Eiiwka[Pq5lQ)dbB''kQ8K22C5Mq6%F<in6b0IpXăU"(_Zd%YBQ:SV4AO/*RjV#q;1lS0:$T9I<,j-1sEr72M^7TG)bwMvO/gIV0kuaw+FăU"dw&:fk\.F%YBt2ogcT7NkdAb.Mi1=k^+v'N/:18Y0mO$&ojpL5keJDrwruX6Z8KăU"X(whI^.hScW(>ga7[2]/d0#%9#n<QTGE\&$IEh-^da>+(9EkGfJR7]M#<eA5E%$ăU"-OVm^Xt=kdGpRZNnr]bbRCMaY1eBPlbv:i<DJ\+iYI[g,ym5FB=RIBo[aM%b&t'ăU"9d3^?N?mKshpJKZHj]e6M,8Y[&Y$_Bg;-Um>#9x\;oS_goqmb-FkR+IcN=IeW&8ăU"d<$8gD)**_9DTJ<*ggYAsWt#Y_=c?S-K#Z5PIO0$Z#(XIyMrIz:+JDHxP<:[n%PăU"N;/t]-G/qJSsAo/AQr/7&$ESnoO_S;LH[Zu=\h*rKMj5f0GFHhx]t(So5xWeNFNăU"4OZL)-suOvqlRS3DIvdr0DayDK;RVwdo)Mxs6fEh)BJ#Do&qV;E8B)0rb)-AD/BăU"G^nd\y?w>%x<$1zT8FS^-slL+fu^_W]YIpsVL>:VPMbeTL>Wq.KwN>FX8Ao($-LăU"O3FiKr/BgB-kvXN:3'J-(^8*$_f'Z++z9s]/>U+vDO)YOXEVRv(#01rX2W4D.STăU"2tCAzvwhIvTo02hM$&Kc3*2Aa_r=7HcHkqEm6CzRP*Wll^x#.3ovb]M-a+0b5=4ăU"m*v_a<P;gG%^KYUK?1gg*2+ali\o,n7mW>#O%VK:?Gw[#$1EzF;u)v1\Y)ZTel9ăU"x+k9tKA]-9-tnu[L>;vdT#L?OyI$DNZXHu(GrZNvni?RZ>F^bj,&:T\LYikvSQ>ăU"*zAum#iXc]x>w$T^X$22'z((Lp/qAi:zH5iLRU0i)2a$igA4ItY][lpNd^20g4)ăU"]5s[CtwU3?p'#pikP-R>H.fhZXT8r(u2spv\+hn3CiA.TiPUfO1Kj^);4zE'/v&ăU"\t_G16O/_Q<gBZ-TOC(e*ytW)x+SZSVHMoWjj\ft<$;4qH%U%hM'*e-<u:7k0?SăU"Z?gO1Whr#t1H'bt.xsTI<4yBMQ7f:?M-YfI&&BS_6FzXZUKa\^H8f4Va#A;l%HZăU"mF,g/<VQ89qV&V\2c4W'a;mXW&+JhW=3iIPLGRB2GIlH:8&e<hj^\ecAl8r0nXfăU"$YYT+ExS=,r44):l:>N*plt/Lt.b=#(XR>aoq(U<v8V+PmdU1#UvP4'aHf&h?NGăU"_)<42h(lI4OoB?$ej6KEPPDLBIxbf^&6KmW.g;]'V;9+_;)Up**\$-ZiUngXZquăU"TnZ;kH>+K'Bqm/v[GC/_?ZPL$E#_9SIa^49E>OJ0fr\[Q,;%jtonV-fY3sV-2vaăU">todrSI3hJDZ.xey]h\CWLyxaH0&/d&a7MXic9_O=*no/Lf#mqvJP8jzgEv51m+ăU"/iS3%6A\<]^fP..=MjFLGVMu8=JN-%y9k03uq6YjKjMlq$7h$Y0Iv]YOk9LaDk0ăU"+o&#'u(O98f)k_<&N8%5KGwh\Fk^phtVHbM=4mhIHMl:BsrDui+xciT\]LsNChIăU"m]Z-rlrlX3R1$3nkT.bX>0*wLG]gdNU$#?>FjH/AeSGrmhK[Wat;ToApMzK50YiăU".wt($qu&GlrfJIeP2oe=kZa+*g9Mni,GluclZu#dDdjTWNx-lpTCbkT8Yt(h:daăU"HD#,BVz>kuKl9XE%]gJ>m*4V+k,7le9)vHsNl%9c4JPjev9cPu.VbeM=zbz4okQăU"A'q6Rk%CeLEf^dy.H9<qg8'nW<B0<Uy=7^vS6uDfhG4*kR;OcXSMR%SRe;2e-dtăU"R[/)e6mu[*+PGsXu)*qYQ.k7fL?lF899sup9-FN+%rDh#?Z9P%[>^*W]Ne.kp+răU"VZw'Bk8.2(c](dXYIsgRuuj#PflR4BCEM(hbd<T8\Kcw4>*[VVqJ:#7O3x%UXtjăU"nrB+=3MJvw;P'r3%C6^-<OLb-BDAc+2p?q\n(Q,l^)'GBn9m5z4U#Qg<O%s^,sUăU"z-2#e>A;dZE=;zZpX7*uf(EYpQKuj[$X#dQ,&6EOJ3<5k_^))hx?(Z]q%s$+vQlăU"&T<Gd0b/i[I>k:Uxr$=X6QPL-FYu-]?J],4)2b-tl?:HEH%sh*0'vd\upRFkW<LăU"\<tdcErtoF4D0S^F3S9kIEkkvDuL7uVtT3W.g#'%R-MI%%A9K,*S<e+5NKRg(4&ăU"+?-6vhO7dT5EMg-JH,M9%Ia_(_xXWJ8u-fl.8.zpA:3C;o9)luuRlH8PIxEx'hwăU"vAjJd'X)P:8TCc.#wTR*8liTHE[sPao8bVx;wQVtPbR&o93F1gyA%(oJ1(6A9cdăU"8^1#'o-(Jc=]zW1?(i#5<2GQ7z3>LevLuDDh8,]Yl7MStIj=E6;eGtt*X[dN0*BăU"lo^N5Jq$#wWu[O_]n\Hba%KO$F&P&r4WThIrPy=q/H%r=tgvIJaW:(qcQu[YUi'ăU"JW>%PsBd'5LvgDKVB$f==Q2^s>J>Le;19t=_GV:*4PDV=O%$DNIZCkM8^:]Q*%AăU"jojS?G3XxMZdZM3):8AhjW-SoJfnV%Sgb9M<-hI^NKo3vq%pGa0/#42iIFm?))săU"NBU].dvJchxBM$7>N_s20c/Jkv;2%m>bCC;clefm2$M3Fm7h(_.E;DnHgmMrsG1ăU"sKRjrqfi(b-0<?/?)5'0YQEE73atvg#T?MO'1(t:ZB*n'tT1bD-lD;nxNFXqfFeăU"=kxkY,'$S[ZKX#nn2lmh=Ee;]&hLB3fuRcan7hV%=tBauYQC,v^gS3Or7;*?);tăU"7Ii]ge,K^GR>,PoSoY+uB)cqK(&0KShhH^J&_tl4T=M/.]B9ZO(HPB;=(eKUiq2ăU"L?bg_tk.xahXiyc5ZFRPt.uil3p>5?AZ7B?WK(%#b%IjcHq=h\>Lk]umhv5P/\5ăU"[<+M^GZDzA0QlAkUa#mX*\B(H)^k*KQ)ePVY-Jg+FY.)A<.bgD)eh%lq_%f:)/dăU"sZCWfd#HIJ-xkj0_U=\=uwU0%bpT[W#*G4Cv$Or<4;uPN=)NRZQr^5.X??[CM(găU"V+_-2((N[kR8-0-$3jFivEQX$AM:A#EVKol5*Vd#R>l0^[Hr'aSm4./Dh?FLrPpăU"6t&#,Cd*^?w*%B_qO=YhUU)*2.CELj&[R0^9NdA)k/RSe8D*,DTuHtR5#+C),0>ăU"]XFJfl&1#(o0x7Nq'F/]5o5FL%kI9iQUwscYkUuRL*V0SrU;dcKeB(K-rf4DuW'ăU"mP&sHW)ew-sT/P-P8RXp45Ye?3:rl2viIW>V\C&Gj)jj8WSC,/P\Jdl((24a(L]ăU"K'Hb#E>L52>%>)aYdjhpm\mVbPhsh'k$VR#*39lK'_FxusqWV]*&;vRXS^'uliSăU"Oq9NvBdyk:Zc\CD69#XuYuh%O$53e[f#zD;rAO1=R/y0WD#%Gw>(iBor-QUNL8*ăU"C;[^BJYmD?3omp=d#?OvxmSSf_U#ZrAggN1qjrgpj^tFO,A%USv+FuvfOM0&(EkăU"bYnO\;j-2^#)o=$PrJqXfQfol8SK%o;2[W62TNvjpA'TM?WKOGiX8<3Lu,-a'8\ăU"XRgPF.wEjb:dQ$^iza\^$VeR4V#U<m5IlpFj.*:U'4e5eT(DQ]lzpo[H8OYk3<,ăU"q&a$]O38>V2R<pOkVOVBZk>sJo,bh[Qw%u&G&%]'Fu6?(n31sq(Za9HgZrIr-pYăU"M1FTOH;st5V4N4B4r]s=CRF)+w-=*n:%b0#tc$Ttf;Y6J-gpyGis;HiHoZdw1AGăU"^8nU^^\Yi^,a>:54/,7MJFk1y13j+?W;RmKA4JRZajG2=0Evh-iT\%\^V_PC(vzăU"5t7qE-Rb-9rViWQ5+1JK.pUG4J.hJ<Y:[CMj#UEK(74Yx#eI6+gNT9[[xN'_q]5ăU"t/6fA/%?Yq&?c;,XxI)gWuH/W,wkG-.8gQ&m7gu*F7Z/7bEWd,2NW).gRmr[/1uăU"j[^O;K.vN;O#anCU)vAMqm6B_qvc6f2cC&XMF>w0-QQX&R+)O]Wzy3Dd'?^>_;săU"uod=0<>9,T'$37+XPX#srBI*+,,3[bf.%Cw4I.M#_NQT+p*]o82+6I*mDt;$zjDăU"%Kot3eSw4iM1msSb=Y2*k:m64W\z%J':G)$A7Aky45id8S;=bgG-.(kCN62i$CLăU"lg(=7Nx?59qA;u\ZaMm?V.*ldbi+hRd>N=:JdwK6?ZBsy-d*=$;l)NVZ*n[#.trăU"]8dy*_#RMYk8#6L:25O6v9II-;1[%Gu)pj%bmWC7uI(wFD]:y%P1XD60vi0vr6QăU"&tM.sld&'rw$bR9bl<(up33^'W,xP:#zLbT.,[,(=SgS#wp0MU,/)lW^<\^lP?*ăU"HA5Jn%MsgO#Q:ki8D]tR[Qa=(u1[i$(,iN6eQ0Z(((UNHF[YJ*YMdWOufEKB9RfăU"j;10>\wZM'8ReBk)]a+F*Qnf&j[BqyL1o;KH)OrVXuTdeIcmr7O5sPLq.-ipnX>ăU"^5vfPCyVT2/a>f\GO)),J+Lu7emJ$Br,[]Ve,yH6idMFTu&TF0t)3S(/kbMYX\WăU"FXbaa-fJx?'NK2&LllYo5NWUnT'C?y$iN9r2SBFjrWl5E0um(5(unQ=6R.K_<]PăU"Yjupb6#.g.5idB*T-vjuFrdFQfVL7R#2Dr8^+s+d+l6$SvDnCo\(4WDC6-eW>GHăU"dahj'cIw;Vo:hfTFU,aL]KU=k.Ph4.$Vd30yOHmOr0:)hmjO]Ei8m)Il;)gfMrGăU"rI&l.[h3S/iD)T5Ab=nO'+a--leJ&G8]E1z3c;kG,%O(57V8R[w2\mtt>^d9\['ăU":djhM^pRU/g><pkut(ZkouKuD(<RL'q)?&C_T)%u&'i*aUs4;5'^n)TS[zmG(JYăU"X7iG[k;<C:NL(0Zpt19dna2akg515_Bxf+bu)t=kRTuFZD4-v*.*\&CQ'HHU^lkăU"YQV-IwYeBF%AcmsGH2e&[3O#HL2I13w%?6(?YGbrFRSgWGceQ$;LlH*O-jz+p7\ăU"YZQXRR\V^UQfNuFZQURbt*N\hX_B^_((:v09V9.Y4lJ9_i[JX0dDIv;6+kc07^(ăU"=o(TJo7O9D)IvX)o6JgtEyq#6Ed%(-k405I?MyMX$t(_'<Qd5pEaM5?+/<.n6BNăU"Bc,9\PA]v0C?]XtB]KWfM?ou2?ob?i+xJss32]Qpf&=IrpN#v>?Dw+]fcH9oL)7ăU"#),ojzAj'myRoA%,ZDokg=/hin][c[F02?NadMcich5gbeB&-Y'z9Jm_8k^VhxlăU"e^IXlBMg]tL#T9*>^Z:DUoK(2b1a+f[h?7J3$o4-G1Rw12F^(q449\E,giaP2[aăU"K>SJ_)D9\;83gp1)Y[F0i=#d^p]PSzNNAd4V?YHg^+yVZ_OZUHt\C<Oj6Y8cSXUăU"omgPlRV9.$K5L.k$:Wj(j-4se[(koB9f[S,n>&5j(,_>kc;D1&T5[Y1(PjD3jx?ăU"q_E8TDrBWkjECM%Fg(2r:a>^Q.=tk9h/0\%4k:hVu<)YU2PSq_sM.NwL0H?=#q'ăU"L3_-kvG\2]bH7_o[^+Ra0HF.q(,7h/j*L?scRA3J6T[vRoB7[]MCp926i%mn(NuăU"1IH\I*9=\/'vaH6nkRZur^eF*5o$Z?pUv:O=ODJ/HZyn.Mg1,j/Q34HX\9\ao&.ăU"HiUP=2a*\X[#7ID%X0$mqT4hjI5l]cbZ:QmQ3Ld4jf>JVlX3eXj,h.PPmF=CALcăU"MD/kK%v'DK^<(r.(DAu%kDHD+x^T[<_L_T$C/&XBm#I_Q-&Q%Wmvm2glhLN4&->ăU"HFX^ei_v_&;o8c2)Hox*P[uc6Jf#DSN1C(8fb]3a1+OvI&>xjwIYe&ZB%gViUk&ăU"Syo,_Kpk&X,QYK3IHb50<a:(<p<<U+r&aLBD<WkbTV,bV?^;)Tg1A_Fi>tqTh^^ăU"n%u[M=CX0^k*Vptr&HSf6198$s72wsP6[9R#zTqO.?nF\B'6$-IrQDdD_?ZuJSLăU"rhJ6Esh')Aq[u7k1Xi\Id2l/QRm9pa.=D&+NIWgR,.nK(HGY<;B2Cc;[(ji=-^&ăU")qR)bj6L7LI>+Vab5EAvIG.rWF/vi:'><)xL.1K%,_mAohQ$P3ema_iJxDb^#$HăU"]ft5fDqlj(g#rrJN]?vn3cLRz?kPiD;N)8z'3Pe#onUKqAoDB=?:^9^KehG9OpUăU"TDZdlq$$w8Vqd.SC:2q8eWiLIS6$qe.>NQF3kV=lWKunREf9[q:=U2qVF)sL8sPăU"d[ZTh&jYL&k]oY:+L]3eGV)?4:]KE$H0qJSO#E$0)V?'.FFPo+Y,&L,xP%rtP3PăU"d<mW2quGELpk6On(rmnDj>b75#B\t\5*gkm.Pp-R)Q)<s+Ed[tQ(G,7,E+mFqE:ăU"9PFbvcqi)4<ApHa90*Vrpl3gPp^OH:EsW$:zEl-CF5%/iIi4r_cXa4>a<c9.$=EăU"k.)$A[Q=&H)/6nru$]Cc0]E5HmJ99ompMPiiB7Jfi&.VvipNSxs<wrd44ll:-rBăU"cMn#RbjN?0SEI0+z]Q9Ds48#-9,.&0=y>2%-o#cX7AoC+DQbQAp(^)m+&t_PqYZăU"RTPjP2PB#g%Q#,UJkeH>PviDuZ8w5$S?I>AR\pZ22A*)g7#jXXJA%3;480-GwN5ăU"TJp>)X;&M\%EC-989J#.vgu('iMy7W4up7S7i>\dRlo,(+pbr_Wu[,njfTjp1hoăU"*A2I(CossMO[5^hX>-s1hYJEBTD7djsZ/1bTI)BGp#9C;/$c4#,'33jfb\)z[;+ăU"^j2y)tKwYgmx26kO=czM[7e8E:XCNQtqH^Bl&gK-f1a#h/)nyeA_%hD5/3[;WuNăU"OfHTw3]cMx8w>N<x\ges.8>jd5y2)_P;%3F+(d7k54$JYd;Eb/BA:sgT;G_*-_[ăU"z?C.2:iTjJZObR'Pi0slILStt7DulrHnG/hn[v&(UFRwswr9$;GzxXluPn_]c4)ăU"9+g:Rz?fQ/hHHBY4&U8IHC)Xj1S5*MWR7[$B%vWeeXJ3Kp'^D:N5rOZlsA&,>aDăU"6c5is3Hal?*l5R48Dbc&^,nU,kQyUn;UEIQQKiO?VEH/V/[IUJLsk/GDu)V3OaJăU"NRoJ/U<8).QrjDH3C\d&E#&lW=&(V)[eT5EXM6n?qEMm_3jlqS#7V/xY^?1:8^răU"EOKf=bf?$t(A=r^JN4%\;E9*Qf]sqAqkM$n_>RO4kNoZfwg-$P04=_cGBcV^2>_ăU"OD0CGM9po(NHOoS:)*uTLihW[eV1Kdvi0:qysQ%.reno_<1n.e$.cnXRD(e<hnDăU"jc:HPAUk&[xrw>YMowXuPZh$G6g&ETd^.r&(;x[xhFOHz2Q9rQyC7MYbMAtP\6KăU"ac$FXn?iCiVK1F,%(;mhY\HabTW7roC*tUyUTbtH_WUDZ&0F'CwinZJ/ag\g]$SăU"%#+>:Xj>4r\Kf+tYS#bD*4;G9_SWQ;CkzGrU.vP9/W[20.jS0YD8r>.Iw'^vP\băU"yoM=75M*[-zso9.^([aSXQ[T[V$siLQSlsKr_eaI-2&.n1n__N]0oI5[+ITbU^uăU"sHixX>w8_bRuJudTdKlh52E-Q$?hq#(,Xb[xXW\;?]SFl[-I5B?kP7(yR_/0d7YăU"1;gx;i'ti8JeGBcOR1]H$tBbZL3Pjbri#REKr\1:Norpt7]riWxibz$+(y]ipU.ăU"V-AJ#:]/Dfj(w/YzXARE7_nfJopG(h*>P)Zyd1L=7Ho^>7D+()<2K,n5^]4P(\ZăU"[B/nwLbfUm>MjRiiVPODZh\I3:X)mIgOM5Rq91J#QLJ=^A7yPfB/^aMm44:q0b(ăU"V)B?#0zd,L]G+16A65\kRb,SA0#hO6>n/llb49TOoIbsqa5ET9gV:%k&$rf'\A?ăU"K_cU-)JiCh%ymn*9c+FP6$\);#.DXFaBdLi+(Ml$VjT7tKx>d(rG9\]dPOH[yyCăU"D8Qdd9LB5;,bke9eAon56Iv1_9>D=oM1OcgI%>YQON^_Q9aKwi#9\<([Ul=eFjMăU"pj2N95V]d2Pmor8Vxi6/dOl(NNv_+yu5:$J;EaC8;1S#8%#\QC=XOS*u3erJp0căEND SUBăSUB VBăU"1v8&'LDW5zh,E/<u^vr$JIK%&\5,SfnDX75E?h<>O\h&5UgV>0Anfrg)%Gm$LQKăU"_u#Ux5Wd%$V?/V>Zw2O]a.;k(A0n\?^K)Bb_GiSS(Z.H9SEhjrFalQqkkYuw:JVăU"\6+1'uVnVdC#XssRsm[rGqsZ1Ln<q</mQBLDr;[FMxFo50JtYP)Epb\LoRYh.NIăU"xt3uZqcSlT8uwkFOuke1URdUKBH4k5Y'.;$;E(j:,.WtXSPX/($jga7Y$mKqIj.ăU"$[]ueiEi;)5P1Z&5q;ZjwrL^sWzWLkihsbiRDja&vbutz$0,(u+)dbO0s&[z_i5ăU"/*ysB7'KR'RO$auh3TM+b1)y[G,,+-4'WJXS]0:8t/\lc<9W%r$-ks\jNhpT1p>ăU"-sfVOX0Y#'qonW=9:gpST[:jaIiQBaAZNI05DdyIY/WQGF[EaqYyUmlEh0/lRr0ăU"+MdVLP[*K8KQ&zpjwF*'tt\dX=7XCR_\Ycreae-#e&ghDHE:.YPht;*/rKd4:MoăU"n0DHVw-Z&&o8=[QWY9#XV9^4HKd$Tm&S<>TGpPNvNu4PklXRrrb?24N*F&OMJ+VăU"$%v+z%AT[LM\+Bam.TSLCgh)Al69%0Ub(u8dKI)bftL0Tt4)4B-m%V44V(l4ibuăU">vi#LX24isTEkIcci#r_Y7&9(UrSYOG;;pWG_RJ9;rc=-((RGCr&I9](k/B9:>WăU"pXq;;Z2eJ0jDd4#Z[n(K'%t>fn,9Z02FSY3f[VBO$PHH;fL/_+<y#)5&R7;3.6AăU"c8QJ>tCD^%Jw8>k4-XI'?-+fEq/)rC)lOiAsvh&p>gmkq*LkaiVZHQ>[IJeRr?OăU"m4lotAc4SZ*iw3p0Kou5[/di:r3=Hs(sBhi3omy;*,u2Tcr5h=lHFEc-oX\0wWkăU"Z0nZDh^>:cK2ZbEve95>\wM.2po,^1y+tL:Q:h2AI,)Aga7hE0-hY_%_UOZYZdrăU".tc*?E5?IS)S-:R((3ocsdv&uu4h_')tb;&K4O<1LupRF2SW*lp^$jK)W;]4B/WăU"wZ.Du>FY(,]F6LA--&sHYPMUKaX.0Cw#k+Wg8\JVdA#^XS^paN.Wq,m>d'Au7?7ăU"a9$iaS'f(('q[G%/N8g,/4vD)Xc5/KAKg;&kJOwV2ODV1[u[wI$W6ht2&Cn4EsWăU"moSCE(]8\^x'asz+IU0rI2VPvN[23Kx<gYo6hHDutZCZ-_%iWS$#k$$-[2688#iăU"_Wzuh&5vZujVi\Q)Dsj,$jhF4HS<paNxFl0XLv>KeSf)Xt)]+qI?;C3yH9?4kd%ăU"#=N)aC36ZrgQNrV*:/g2V5leKuuk>C6V,xSWW=N/pTF3L3G^NJZxcdha0BSK:s(ăU"n5B?YL2BXh;td,+[JR3'HUgBZS5'V66r2qAT8L6>tU%u];(rsYQ6A14\\l&'\X5ăU"xA_bdNl)_D-M[N0l=ikQ%#\r('EWg)F<iY7cuv3BmemZHRb5cBTS56>_aXFjRIxăU":nY+:>iAOcEXkQ0W]/mEI^$qQWiMR40;Vv#,?SC\2MWaC?L(X^IO7NjUr7h.2$'ăU"y(B8O[InMU*90;,GkGeT3zhQY.x&ihm^M<^ViN,0eNRi(:;6sd7ukWd>X>sc1-XăU"7D-r^;U[SC4Jq[$'/lF/U)wGWU7T;nj6Yp;]']J?[o+3Md2dNl51gEfbk]k=(0*ăU"k-h3.hrt%wP(E?y8_TL?NAV3cSS#.QoU%sy>muSZ,*sDj&cd2Q6<N[rcI6+]1fEăU"sq04XwUv73=+xLlhE;'&\[Bp?m#e$uV6s_ErGhMAke-=d;gX-t/iMdf/l/>A:5QăU"r<DUvj%iR^o-2Q+U;Y(2^.3;hx58dWQDY_;^s#I.]W.*/:*1[HziFL^?3sj:3OgăU"H7rrYCICR2*OSYqDV^U;5g&rfX>#9%]59%angkV/WI]Ens:FZ%8xAc.4YO1?tU0ăU"iaebp#AMNzpD't[9DTO+dSOc'5/NGyR6_B^'GJUD)<cS_7oN^hTIGvRmMUIQL,TăU"SQ[p8TXn;c35;*ET>a2q^IMq(DZ^D/buZs<]h%5gB-0^md+enCtUEmpzx3*lW3DăU"XVd9/sUbNI8YUDe?%cnCxo=\Jhtz]lISRRF:VX:.pH\l78(AiU+n6Lg^-jbaFfAăU"I28G9_^zS;r%x9Em.=+EmA7&Q]LH3VuK=q4$G#AFR]P8mM8C-TvV&Vdu^v$Q1V6ăU"dBjt#ks6rjXw?FXrns<>wX+#O>e\MmCume<>$$7+TfpoiUQ'Lq5[p^uA1ksriEoăU"$qQP<ZHX8kZ27XPB,B7TMr7J;nAsB&i2&.55GUFVFDtA9*:kopN)En\5rv[sfWCăU"t:)?u*B24%<(_#96f+a\rOo1a3n>E60?(*(M.'uyWRh4.-qXC\]>38hx)W_tLj0ăU"I1Q,dIV5W:.BQ'W3-2m?Ed]Q3)$cOa>u<0fHH).H+cH3j-EK^N[g/-ZvIKb;hJ$ăU"4cfmJeo6WnR=<dv:/XY]1Fa_md^*(?;&+b'>KRMb?^+_Mli//1I+j:b;(ua'f1)ăU"X8eo01Y.C2TDV5lrWIs9T(Vc0$ylqrhb4+<+8=SY;)^Gw.%eU]>c$4pp6<:L)CwăU"KISVcjzglM9Bk6v7<:22i6zs+ZORH--(VPpV13Eg)cAhWIPK5lo1V.nq9<mG92băU"W=XiTa]e(qg6Ii8:tADv$C>50<k2O1sr*TEi7J]E:318AZ?Ul.6Jd[umCBcHZIdăU"?LY<;n,x=cwdD<kNqMs^qQ.[%*E1(&W:h(9^.ruSa:jH8r_f53*NGVQ<c?g3KO^ăU"6^E89&X&e95.uSIbMEB)M+_JwxM_ac_oXat[TNw#XCI;n)^Z-^RV9]UPlPVWj&găU"yok.3AIK_)Yro$3O:?bW?BTgqn=%nRWKY5r+7V+02(5L/GnCnqTvitTgjB4l&6xăU"L5u1IZICQP#RgUDS.J%U>T:sh8-g&g&#Q/*7VB9^IHsJ2*-TpdX$)s15:+x]:.văU"/sIVt7zn7tG8TQ_s3t2/lK3Br?eV+cN/i/yG5(5IBc1Y35[>ok-%7aC54G)eEK'ăU"e.^zff0>7-Wac>4,[**LH+23jh#='ox1*w'$DLtct-$-:m-j-h0u/dr]/TQ(MznăU"*/j2Zk258v9tC9pL#=JL>-9ei?1^O+1Ax(Pc1wHNvSM[RMDA.oKn9vLe>z$Lr7lăU"8fIT?c:qdkn+&]<qpZI)W/%l[ZuI2IS,s099Qb(Eq4f/Rg0n%j_NsC=[#Z*YFGjăU"D[%x+W;mL,>bl<BAf/wP(1iQEd]92>hj_GmuS<^F?Bo+Y(kRGa.te%M6p<?3Jn\ăU"%cs2'Udr\*(P9sSetg)Fu#5Gg?xT%RZ7t,p]CZKYN2C,BJ>b=+JCR)-AW0*&DnOăU"87.kZu+Y$)OTfdN1;7L=XW-(LZL:>gd.9GWlpXRP[9oYOGuT<Djn/y>NsgvH*L9ăU"p/pbQ:cs=/K('LoC0%XM'IApe^P'W5J_Qf)c>v>peIUs/0D?1aG[I5N2\f,;^k\ăU"Je[aYR<E<4Pn]*VGMZd%0f\fF6WV.r[ty5>9'gaN%\sMv/Bc/#5gK(4Z#j7]b;'ăU"fqPGl.r/ml-9=X6s+5=W91hnH0DpL<(46K,+M.+s(c0vl[5wM*d-:hNM$zTa]OeăU"ek+%:JE(D7N=_j_QBkcxGPHSTT%<hee/3K'p6L;>)OK/]F&8o/4UtHlQ'%id#]JăU"cF7?\7wFW^1ynY*m9#pngM4H(T/Hyq=e=gahtw+n:D'8/LXBXEX2yMg4UdKJg-.ăU"-rD6)5owAwf/&hTs4Ij/+[N<//pWZP#oEf>)R%7)LHAq6<D[c53d2IP7(Pm*_8&ăU"c^Sdj3e-a\_u\uqK_K4mvp)-Gcy_iY:2PQk\blmMxLc_<$)fFl-*ICX)lrf;2fUăU";Xa.t-j6-I7<_66)6O7?2hX^K)r\'0DPM993Sc]6hR'QLRPx&t4n:'D9onSK?<TăU"Ufs]\k(-mGRtr/%]unNi6rSbA^hK/PD&NPidh^zdz2WNa.&unWVST>K-q+*-F)aăU"-EK-+p&:Im5'f4FI-GD>z4.EeXrO:6?QOP-4:Q[/U>^Hq5Mq7ijK.=1<#M],0HdăU"ur$IT$*=h>lB1lwDpz57hTtapBrX&^;2)U^sV'g:%gY-19#3USBfH0vhqKIpkH_ăU"b*q;CUS5CNF;ArbmrTV].7I,#HxbW2AN8-fBlb?Q_2QN'fQ.:<$15NoH_?13Vh#ăU"gAeQBiO](duX5nJhlbzhsrJ1t;DA,v=RtIsV$+rfcSpD7Rc,AZ2lC[ISe-s+DNoăU"Nid)4y#.z8,a\in\lkvfT1;zZh?,W+RL:W<^y(WvPVYzM,7NthP:Y>671,),>oXăU"c1bsg$?5\,[j5SRMAv\RcNFPfGW]=l-%x:+I;/B:nekJ[X;E/=S[Am74k?.O\ZqăU"WJw+JXOC:-3:5*Ds;I3LVQpK$\]lPJek?Wof,/o\',Il(Pq-Ll&O0t-gF$2-g4%ăU"_Si&dRy_&c4nXAjLRHZnc#nr6JcRRSIj3+ooVzASGY<Z^7wjS&4'N,w[I>U+_l%ăU"5iuu7QP62hM\sHe7n:tg(?(sm(KpV2Bmas4uKkPtlWx?aY\^V=9S;\_k9b'b,p6ăU"DXa0vpf?444DRGGc3)_Yp^:IG%z>g8L?Smg,g7LsHJFU.yX32h0/N0oVP_F]6/#ăU"&-OwL9gTnOD5I5l$+JCA)M\FuVJw:Mb:5%(R>%H&aJ=[7]3BQhx1ViU,wN_=0rIăU"5#8bVvUmD=w[^5P-6]asgJ-s<ubMqZ1c+/UamD]tOhX&.1f0i[OQLY\3iUkR6W%ăU"BwUOXvf]BmS?.XKnH?[KMN:\wNMsc[d-C>b_%$6tJ>c=>S4Ek^Wd\R)w[p,'#htăU"Be]^?Z\K'40\oIw26gbFSfT1HHe3&7%pIfJ_wMIt[8JL'A/fLgfgyv(pbMdgMJfăU"--*IPoe<IRkwWovxH^.H/X9R[,JV>qpvm/%<A7i0-XkI_g*'ZiV,D#_Hi&^(9SXăU"5;ormYZCRB/WQ.nX5(Pq.i6kQ.lR&M]>HsEN$HdcRd34S&t'i$V<g$q4tQ+BX8IăU"p?MQYz^7em_SBgb(6[M3DTuFT3)3YT>P+'bF9%UlXMn;*HL8gu&Xo0HMH_N8fssăU"gV-i1lC-%f(M>]b9I1c'bthr2CnFqfm7(+-69\LH]y_E#vV:Pvc]'<NhD%uQus6ăU"9DTFP5(B9^.L&?0/*xpvS-=1KY;^m53_p$ImL>*Eec;2TV%_ogJYNa-%%=KlJ;0ăU"9::MPFnV>NqdCPFdLQxeeh*FxYz%.?(KQvKqLUD\S1MV>=l3R9_bf?d$G*A=(YgăU"+50]\M'gcW*Kai+.aM+7We=+,d^4#bdj8T7xq2v9$8V4S>_IFY2iqUqh'E\6NR:ăU"3\,CaRE4CaPkt-jJ+MOb&gQ#;l-ABaHAgxr/.*W]xG99UtR_HTSc9Tw5B+2*_G)ăU"LKt)L2x]C$=*eJmXJ%LRm1qDdsqP%kL9:fGr+-?rENphJnjLEbw;;RTolG*)#1xăU"hPS]TU?&lqZf$Jp?o5ie-N.RLL;/3mPwE)B6Yud0U,I$^],WqZr\wC=GFR&1I_2ăU"62.uV'A$Y%1ZfIp15_27Bmak#RVs$qR$1Dk(\-VJ7Ib.V)skM5Br^fPJrEoZPz4ăU"CA*V3E:IW:8^*BA:9G;-ve__0]5F9EB\g0&Zh9^gidB>Zo'B4j??CE\CKd3Qf]\ăU"FR+s%lt)9xI9omhVZ0xm](LuGzk**w(eXvS=9Wg8.7gEEW[s:AGc71:lH9&fMprăU"6a%nzRFQ%AW3YOucag\is'?RWO,%Z8j_X+(d<tuZBL16YQ\gguQ1rWtnWN]gW4wăU"N]9eT$FKSb9]Z0v(1n7vO0*rB<GZ(DXd3dxF,3O(mq:exh$'=k\2$s2>L#/ca[.ăU"/VmR<#wL7D3^=Ga3SlYRoqeI3K)PC#$/GSf/vG%E2iR8DXJrtF.XoXbt[sb1k;5ăU"-=6RR=[3eBh<%g\>c^vIy<pr4]J?%+y%sKs=E[j1q4ix[]izQg?S'bP]j#1[NlpăU"_pBtT,Y)+43QdFbnrQLZo>JPod'xe:GXqt[lILS.LclN:\elgmBC&N$U90=r]DQăU"rkK82+w1C%D/R^$^\Z.k:E.I8-%pEK1Nt'OYg5RFBkv9a;NNG^g]#loQ]#i:&?qăU"2W'p;#FdvwK-S'L6YuThJzD7R>bN[UL,51gF;LRghniiGH..sglpui$5fU&Q(9BăU">##PmJfq<j8wNAdpZg,IfFQ3(zrsija_.XWR07RJr-D5WYj]qc_adJW^3Uda-PjăU"p15nK:<]NQA.yLYK_>XT9e5=Sb?0W+QmQbQmGfoD#]T<1fC%63Z8x8k0;sAT?./ăU"33=6WZ\ixfu83U>sJwLGO0arp/HY[XY>(F%qq.HescVpThA-[.^YgO573Thz\TWăU"_)9256B&)<[[Qejq?0#vQgY>ONq=&::W/Q(avW8?7eDB;9:8D=z]<0iBG1p]I*FăU"YfTh*<KJIb?vSC^Slj-?B&NMtDA]O48ABpbZ,tqxc\(alM/6]sA/Kf*tr4bO+a:ăU"C,c^OM2kd_#pLcG>F%^(QJi^g%tR(4GGkGfp:-pg1BuX7o>O:D5\KD(T_^'m%:aăU"0N2AiEE8YM(o0$m+J6=-=-g%BKSr'Z+^C>*U>dc<vZga:)))Y\gdGoi]6]UQrffăU"FM-.)XU+x=qAm+3[:e[UV[V/cg4UW)[X-+[#mj2ZbCsWT='i8XJ'J5?(AYlrDpTăU"LbCg,nLQ*0BvX^cmmDK;Rv=qL?du?DHGA^l3b_XL#b)8d9lhL+Hda-JAdK&FtiLăU"I%T_$F.v[tqv&C.GcV'#LWbw,#K2;ztHc[nftsnUl4Z$O[Az)CO]wT%l;JXO.npăU"J4i6HKp-?>x$#MDUu.,.nm-r'3ps%2*W'\;HEA'M:z-fVzL&bRyLiGI9FfDL=vlăU"kl.6YJjIP*vJ\d+$4bBA301H#o3^h$)hnr06MI]M$10C.M]S[DDN)3-\qL-eN0KăU"INpnmL;=+OyUyVbr$<E$^WRrPMuvDd4XD?_YAgrHT]S'nK'N7ul'Aq\JOw=s?6eăU"cGJLG/Ap_n/y>IZRby,5s>uYYp8?u]_(7Zqn9z%0o6?l_/V0Y.1tjNH=n(:dv#NăU"n_+:fUpl?e\oild%GI.<r#u0JHD$)fW;+H]e2FW]jP)))BkER(l9J+,G2_XJrUbăU"tO.TCn?g;.q>QuA?)oEM&RNsR>mXb-dx0bB(1pSCtEP6^_l+P>Y9O)PVX[:SHEkăU"YO#\<hlU[*gm>Xm<dlSQ2Tn[r[w7r?cP0,Zs(pluVv=6(jdalfMPo/0AAt920,5ăU"Tf/f_KmV025OSe-%<+<oKIwbr0>cHHd'TkJF.xXv>C#(8N?*xSlpD-VnJ?VPDd-ăU"%]CE%QrO'cdK/]#e=U[Px2+_,i*(k$H(/[qv/lDkZ5Q.9nFRZQk_JPnP9nM.J40ăU"/v>bhWNV/+iqg/Ho(+9o8toNo;-692R+7Y86MYd212eq#ii]<9Wc[rQdHk5#*jJăU"zh&c8at?95+3U1vecM4*^ljd/2>9M/ed:4R7ICNc96:]6BPb6W_2>>D+Cqg&A5răU"E/J8_rs_iM[X>&)WW]NQ9.mhJZCJKHJ;Lmk,8DpQ*dn^N/1Nts9w*oAVTdH$xr4ăU"WmD]5sW:5>?TQ%TWpVTA+P(J''DK6&y\0Otg(Geng^EY<4beg66HU86rlxl>GscăU"L?J[VA8XBO5qCaTXXiiWlZTD6s=PH1A;(9O<g+V3=k^jFC;eP3<CKO2w+:Pe:BmăU".x_$PKbWM8kmYwN=Xd2bX(8uys[krIE_HRHu=Qu-QNQn/j3OUXO$)GKIVp6$BJkăU"NkP\E=KVg+[7_]ynf6cC%VCRVMM&DOEKNY+%%1Y,:m<qz]y-Pu2l^S.a1_=-L*băU"NS8A&Le?m7gP^,SndQF6r=mzTl^__Ok*'tfJl4]F1%p-_'<m]MpGyLiKqdTt-WrăU"S0W86SuoXs^:M<bdcUx9RbjS\8Ztm<^Qg7L0Th0,ZaMB74&QxgS^uXFk(3hs)K6ăU"yDt/9A%z=_QYtuW,c;e>Mwx;RPjDsdS0-dqd6*fPjw?>cO^,t>U6v?_SB-h0_]KăU")Hv2Td;KE<0C<Ba8e)LFpA9=HauNJ:&0UhrBeHcF[qh18qJDSL9Ts8Roi$.HWW)ăU"x/+c>yduXnmbD^(gNu%virYT.lvVaEI$?p<qE.?ja':u[qwCYlugUp*G_+'Yj_MăU"(?3UCO%KhC[<2?+SZ#NuG\0puKYRv9HqH>k7:oP;sU*1hj,.%7:X>:FgLpIJwQQăU"2H?s8h&S]HgkAS_#1[t?oqy#Rc>gvEPf#S-6YEvfFuW6tBtf5(8<Y?q#s8s8jqCăU"LlRC,>4-od$ls&ij8.Nx:%k')Y(iBU__-r.'QID\gOT,l5&k$Oae^Iqhw#f2HN^ăU"Xdg9yYJB)8i;(QmOB-Imp]?dgql2H/#Lkbn'/zo$9-tJQ\;'Am$1)G)CL2;O0L5ăU"0j/krww&sIXecb?)-ACWb0iWZJ'5KiTmhYkL'*#_'onuYgB-<x14Nw'B>u7omEPăU"9E<sPLoHjL?Kk,p6PlG,_EZZWUxEk$,4[o.Ah19tK,KNM=j8c2\7k$kmc(uiKhPăU"Dal0Qh8UgdlfgK/Y(.Qr2Na<ZEkk7KsK^Lvco)OrV[Vw7A&jA0XL6oQ%184J]AhăU"MqLZZn0=u5pDHXcvab8^cw:kf[VJaPsdr?H8Nk$g-_7t>xd(q=GcZDxdq%1.g(făU"H+liZT/]x85X-+1,LB88NXWOc.ELY0F3UB\^xWiC8m*Fs)%KpWh?X7AdQrMgsUPăU"lqFX&IA0B)q585]5=[=xt=_0EEY:%Q>,h;?yD:M]'trO8+&>K;dv?-5V[kDbyvgăU"(nMjuN#v4+;/VfE:L]0NjmjrP7;n:cXXb.i_p#i#X.y[)#8pAYp3sgQ9R79#6'oăU"E?JB_0Fk+mf$(:n,<N<Dk$-cS7K+a7cG6'bGuwK:W%LDQ0i3n/AS139%N]bab>MăU"*$1^=w,C7*8-98f8K(M1)Y91$;2B4+tiY\bb4(d^cCp=HpL4lX7#fiOJn*YcwEtăU"m%$rTPp6:mt)wqkf#CM)9LVvW58fwW+Jd4IQ:$?me#+2-%w'g&NB0j/U5maM6ueăU"6QEonngelk7h6%SUsF>(nQsB7_q3FF=AP)J25g/Ird)X4QZH;,.FRtY.0C$b/JKăU"<Kr:]IDg7l>H[]/amvqpfA+k]f4c/?bantu8uu_AP:8<niVeoQVL%nHuNd4u0XnăU"nCS7r2:R1wF_z?Da5.upq*J[K.mE8)<83._SG*:4S526/;#oR57-Z9)GrZ'^wI:ăU"TlGclqpDugdZMCh=qhVe?F6uI#+LBPBdFP1DqmM%[kU7;)58>ts*rKi$aP[6Ix?ăU"V)hfmW89$j$)Y+Gen_IuYCXtnu4g$hVlJrX;xlfbMbuCd+0E=h3m9eaaNcp0JosăU"SGYV[do_;U3*[gXs#JGYw4jL5G^lDJzquFTT_tE.1[g)XoMcq^qPKErv=l6TNi1ăU"v1q^g8fKUBEl^'-beV563Z3ZaTuh%JH%DMR-G-Z)XOgTaL%pZji'HUie6.6li:>ăU"8?qa&r-LIjxCKDcK)v,\l0fSNG>:vsWAY,y;b.UNaqSjRUcF-H7_XTwB+D,]Y;săU"S<>%'uT*m^Ff=tK9F5Uy^>8h^<KvQA:&mthJbY).4g5M#C8[5V-KiT&QQ#uc[Z.ăU"sXSe%/P/;i)/NvOO9LiS8sJ7%F9.JeW:o7AsPa#&j#O=Q6qcXflpglwFHTDj-C:ăU"%<O&iex*[\MLXHBGwWPwAy)c3;o-UQQ:*fWvSG#]Wvf,$56PC4%Buxm>2,v3X)3ăU"'x1v->Bi^Tf00nYNtGd\,%5Fe+_RI)\:QFbVM9KO=EOCMT[oO2lQv2/Y%+q$Ay.ăU"'K%p22njBV,OCXK7X-1JfKhAM9[AWSxj/wenK9+5X(d?6l7cargr0x;O/W><ziqăU"v_YhY=-eCf/(+%Nzi#_Oy)=UF91u^7_UKcjCVMV+JKb)j-$1q'D:v9&n(UtiKF?ăU"=G;FDh$1lDlo3fo$(k+PIR7%Y*E5-\'qNQQRaw<I\_QLVGgL_40oH^R[L[\\TZ:ăU"6VisWT5W*5ZR.R]FROhoyhq+).4oS%nA9W%8^PmCE5=7EEY<6cJGIYh_#p75D]+ăU":#d>Or(MJbFHhb^UBq3>3<G<rDtGtjCV#rcvT<0TEqJ&N$Y3ZQIU1Ypd/^BEmhvăU"*;6/Pi1ag[$l2$?-OuGaB(Ef<ukVf1#fMl%8qMeG6uoR9'1^dg9AWnFsp_:Cl[LăU"jCZO,M^zQ6LYIWMs-9Lj'B2hih>BeBWjZ%M.4H.84w?L#Db1kck#XlQ?o?*1h^iăU"dMwi7No\bvg3<)kf9b,3^4RaJfOU5OM_w'YfpdFq3c*>a/B4(VF#Z^>o>2EpLF=ăU"]l9)z5W.S4PhMXlzEq\nQVh%=hl&ZBlTh+MBX*s4YZ377y^.:3xsaV\0]e#MVL/ăU"+:y'/zJv0_bEI%3j0OA]YDta;tV/4WN+pV-Sh,[cVhuT)O/Pz6#H-YrXl.ic26hăU"hi8J5D%Q8Hk8h[B#M%(B3u4[2_([b]LLRJ'rM,6oRNqw4yI.du9/TFi2r%vK6t3ăU"#*0ZWvVfYFH(hLg]a+emAYrlncafn&cZEQwgzFTpaSmW.DDC0JAp[:EK$X#VUT#ăU"IjLPv=6IMV8#O*wspJ9qN>m$=IT_yere(-^t3X26\z<sc$GzfeImWk-'u?3eql+ăU"$%E$]4+YM\2JSl-w/aiKq/JaF1ZEb*ttT\FJa[V,hjkTSf/kz>9$o+B#GJ-_NCHăU"tlpvu.c14_IY))Ki)HimWo;.]5woHtbZOmOe\'h0f/9G%U?;bn\eT;qLFR_;((8ăU"aurev>Z%T_]Jjs_E?pZV#uP(R3QpcJ>Pncld3oYL)9[?[b[Heor.yl*/I(jrapSăU"6eZR-<XsK=Z7ekx_0,o]5p+7btg_XcqB>jd6#Y/X['3g.+]Ypa4&$nxh07&?lccăU"$4AkB:e/-0[;86V1yg>W8l(wH.5aA(23%9%ZDB34&5:%DC(ie,skDp%tG^C.kBTăU"eXQXgg=15/ZJNt1Q(71Q._?rZ$30;6)Zr,SvLY1g(5)BHYul[Bq7du(GBMHa+WDăU"_-J9iR=#S$CR<sLSkMD3FrB$Cx'd#u#S*1;$$*cCE_,j9-y1g(mgn]$;F1HaXv=ăU"Fepz[#GqFP](0'&6VZ*t%rEB$EY.weyN&J],u1l:IiR2JWp]#nO1EphQtFD;\Z?ăU"]P3^lc#u=Ve8&G$ZT\K(5v%H=eg2=S#Bx=sL5=/u:Y;igLAHMTjnKZoW2f%;;ZUăU">bE:>sycbGZ>4sNmboV3loS2V58qy.M03cwF/?YGL(aOj>__/i&8(hM,lC$^.\:ăU"]$%1+7k$7o>\jDVGmZc9JdL4DvDioaSiM7ysU(pdwKfXZ8wucLh7NX^0iVbP%>măU"U?,l7K:7uNHB+%;NR=Q.o;Hzg44TW<+/\nZpcRLp#n189V9\&Y(Qb$Cy#qh#I.jăU"k#Puuw1ASD\icc#;IWtT]C+$h=/M7o:6Vr>+lp&.,6fnLlcHn23FDuk7;6n8\Y?ăU"[Ah*7pP,\%r,[MpT?smwbLbcL,[sewm_\fbMYNS;&Aq#:-8j&0_1VUtfFChmWFpăU"MkvFnQ2fMG5DxZ4M3bdeUgDuCkF[stf_S)rYIx('WFN;2PM/FELpa3OD$omXGv&ăU"eR%<Ge8_,Xf'B9qFsY$Q;RJeUd;_J*+.Rcx%[kj85hK2P6-h)E>JnWK,20+X+QcăU"2&RVbbU.pRaUpXNVRnN>#pQ0sm(a]^quRU2qS[1.q1(#?&I$FLsu0e;FXalfKxmăU"UqD=YC-jfPC<eqU5c)M5Ta-_mB)]cua4JIdwr;_ILKjM3I03Pr+*g_p.aCPL'XcăU"tjwfU]CmWIx:FrgMkR=<uq,cpTvQ6Div\#sBcL?rcRbuHH%KHX#h-I1<+L*CT5LăU"+5)FGb[Eq,62O[o0ma3&gzZTR[W]2[.nR_?Q0Yx&TG36BZle'65v0Dal)9,q-;săU"r#u/7/hi=jLhYXKc.sN'UTVJm1vBR-7qE>;KZuTHSp\^BhWCCP[1,Y[;n(8Lgr(ăU";)oilMf1d,sR%NXT8.NcFK,3V*jDlIxLCEprl.a'Z*p;sbj14P1nifuHV^=uuwDăU"wjBl*&aU;%\+BF%lg5vTB;d</_G\am2(Y*nkur^boa*d4ns26.pkT2<>MgU6kUtăU"31itz,TtY*?RSXC\-sM/wSEs7+S3(PuJ5,);]=KHt*JH_g<nu8xO2Tw$8uj#s5-ăU"ulvJv(XnwyXGXP9]8A_5YBXJb.E/vu;0R9.9,p+bq#)Q*;cd/RdZQq[**+Vr>\băU"l?NR1+rgt]Y(gDWU^QmqTzA.b\GtBY=gg<n+5t1nD(FB6U??\fpduselX6uozvtăU"_E8LuEwiZ?7#?z(=%Wa42q+.Rq(wA(D]$[+xq7FhKh0(L$%a(r#83q112ZnU0mVăU"JZj_.Bl('+7P/Ok4j4H*kN=a4z-/4#\e;Jyw-?w(lcGX9wi%n9X?88hnH_lrS7găU"='m'Q+e?C+b^Y'Q7xlB(9t4+)kKvtmjuW/Zh&tD=.W$8?%=N2nOTi06ffAVm^YgăU"HXCmEWU%eC+9Lb]F#0%9,QCQ:hZAIVQt;$:jD7NnQu^*n_\YWX\B>jh]tlSfpm<ăU"qDD.N]Ck1TZHt>X.\2TV)=VThF[J)5^q%'A#JZD>e]iYyiCYYx'O7Au>j-Orz_&ăU"g#mNk97J:u36$sE',cDfQbIsY1Xf^bMn:0IsU*N_q\:voPDVhmjL_wY:fTFV.*UăU"07L9/TmYbUgeI^f[jq<a9.i.63D]=0_&\ii^jjrY&gR)knN[Pp._MSu,P#nZ:g)ăU"R?#XpgGR7l4hdBaC^EHsFp&=+(6L\g?dPu7vmMVyxrWA6qh2DS^E]:4K1m+3).qăEND SUBăSUB VCăU"1QG=W$Gq4A$jml/kl2MfEKP<5+zE-HoYk8;9KL:C&4Q=KBR5/gCv3V5BT-aP_WUăU"\=*B%VJ+hkF7Xbbjlb6tT1tvGJ<3N9..FYa<nrWLhOuY>\t#[d^>HGK:^3Hj+fSăU"6n)6Dt8,GS?eQT+%d6FeU?dCt*>5b,U?+RO\#Pka1tG>Z_+G7X=ljUr6vW3tAr&ăU"7J:DNU91[31bM__w8dLld:-fu4U)Q8As<*s2_.rZPXc2+<EJS'a+?t/ve2^kfJ7ăU"t$)=-=K3MB%[SmI2jL[UNS?AHo==-d&P3oiY38tL8xmQd(_YgcEGh_P2L:_xmclăU"-_bxLpsl6QtF^kY4$84F?ww6Hmtt=C(igkz=mX1-5;[*nR/S2)=2:K/P^:Oxu^hăU"r>PPdFx/-;F66j=>Gq?i-d/\7ML<>fBlSxXkeg9[Yr&mTe&/^YgYi*-jRSA[f[kăU"j0APcWVT8tIiEI*F*\,jS7Hm3YPRTr(.vaqk8\SRLs8N2+tt^(hr?g*=U56[K0EăU"2,YQex*es1;DB]JHU?RReCw[i^C>W%0AWj?LQjMs6e-^M_N[tp*l8_QvfR:^^\.ăU"k.&uxgw#%MYA*<\zHcqKFaCM*[k6_\vEp[+z2E2Z;fLYZlN<^y1^D(IGrvl9/l=ăU"(MSv3eM#iT#b#TZo(;qoiD^=5>DsMnup;rL(L^CdtFbuj'<LsCm)x*t<9p<,U3lăU"1AYzhM]StjWFBAhQf?VLP9?+Z,VCHo>&0\VZfPod^f4_$>_oxc'I\vL'HZJ=PY/ăU"/Nq95&Eq81.SYk#)uRhF16e=+T]FS-DijHCX]HbLbo_ypqmv]ESdPmk*,H$tz(făU"UZmUC6/eR(a5JSSSYW6bKD:*Z&>9D?.3[_AH3RQ$29DO?LE8eO27ae-U^7pVWV/ăU"u.R#.:&3-NBW-LHd/CiEL0p?J<#T-WwJtW#Fg^G1SVY[a7$D_nGSV-XVB]YDaN<ăU"NdmJ1iws9?+-LbFa[Z$Ak^d#I.;bM[BuexggtbUD(m75F\5]6*eY^6?[3YJp8VTăU"g336D$0YHgM$Xh(8#laAPVQTVfIVnJ_xb6UzHsavuSn<$0u,1jbJkQqM('%$Ov#ăU"hJw7>x=*q*I6IUCk_,eQ;bXBkmWBfW<FG>/,y0a(3^Eg*YQ2Mbu*xCN;Z_W1[SaăU"qCFWp$hKsolb0?.;fDIS_W_H\t^35?,6$EiX5Fj24gtJ/SNvlT5[o9+J&gMx;9;ăU"I7%&qwVA,*]nn0/Y8_0dJ;ynjx]G^hCAIu2[^/<5Toj.:OC<JGzt]InX&<lT3HxăU"Vh:h0=gxq(cpv$g$&z<HsCVk]#H4rjQKVev\5:l(K)wrK-3IaVnb8M%+IB6VtPFăU"=;R5>im)UdI7Mz:fvt>2qbuh7qqlSb2gS$(tFk>h,,Ho2<&N&KAx?tq+lk5WFHrăU"E8gMBb4S+OYxm#+bRA]c;?KFu)QP%+]:XZ^s-l,MDaC#MUz9=3Ca\Lt>W7mTS0,ăU"j)<Ink+]I[a%&2(=%4Gw2'le5M7])6F/=&]\*Kj'SMWJS%IuqFaJtoJfHTWw98hăU"a*bk&c;ZP&Y_egN&GT:GF:fbiBv^j8'[<j9J89uR)a0(W7xk6=Y9[KJneA:1z-]ăU"/I53/t&,4?VDEE)W1;ZBVj-RNQmmxrY>5+2$tUZHsble+$b<eJ$i$F:M08B2ci(ăU")x\^i98:7:&h89&4>f4TU)XyMDsFX%5HWIb^xFtfaLtHiK:o&#P'_#&c6$Al$\uăU":bpVjX*zVSlY2r3]cgxCJ*_uqCfl=D7(>07ifIZSirYmIw0BfkhAgqNm4kN;Xm>ăU"$ZX5WN>/V5N$FH$D]IW.RMOp:'-]cm9e2BuEpMc\]+3Uu[^:[7O^\HOb-S\mQgQăU":z,B2AL\EO[4lAEBclNqApGdYlIICtWq%3kdyJP*;yPQ,HEOq%/W^)[pDB*vI(AăU"bZ1nns[#A/&sR:(7fcCuQ%U2teloxvQwRZMW*AFZjtHJMJlVxv/Jw6#3Na-'7L*ăU"fE(vQN<LRD5<fZv8YRblQIE<TMbW3_qu^2.+*1(:I)IwQTKHP5jziO>LZKBjB6dăU"dYBShsm8uDQani5d%%k%0LXG045[t7mH.W]iG1LpnDFbVw5l98wFAi+\]\0Ij^&ăU"=RR7oiZ7Z]d$\jC6qvcH?RH^27i#oj?83DP5BHrF2\aFHN(gI^L97^<87Jb(W7CăU"sRj:yFmX#<HjS\J9sCX1Y.OV5]H(A9qGx(571i\gv0s]1PLlh_K<>nkW*LR15n6ăU")7&yXKmxyj=<N4t2Ey#7F'R-8'F.n:(hG+:A)rybgUQ)3U_BBKINjyb[$<Pc2EzăU"qziVkcE=fkYj3iqwM(&U*p+.-oY_gX^Q99z8l>VIK=Os*SKNja0^$hmUru7gG'6ăU"/j=tDx1$iR9H=w5Z59F^<[N:Y'9h$ll:_Bg(Rt2/k0xE^8j?&7C9qkJ[0-%)CBIăU"NkQ<9o&m2,4omc.)JZteXD7-^=Jo2ILfE%b<oQ:Dj;ci[mlOEqP=H0\19BoZoXcăU"<v;>]CRw.&(?Uhyv*9JT5DW5BVJoha%5>W9OFuB52CbKwUmpk]>5AUk[1*A7rLBăU"pqX6M?a)Yq2tT?xbtQAmCu4Om4u7Q88_AAMK2JsDp(5-^Xe3MlaKikW(Ll2?6N-ăU"$p)doEIVlkcfu5]/v8Y#I7R)Fu0]B4k>^89w5K:wJBma5#E<'J;*\MDSK'_qyT/ăU"\8w4PRk'D&y77CJ-'dwSd%ppReZ*U'+O<Z4o5&818YCCI(ZKmpaRV--Fahjt]A.ăU"xY1L\^:QiLnJiA&tQ=Em7)Pf#<RQmu7>C_EG)UHAYe#tb>%zKo>I;gOd-1PFm*CăU"/]K.^RdqoADH/)8PiZJeSUr*e#]H#z$kl9?>\K9j5Yi&=ep<1f\3iUuAA,2aQemăU"=_-$p+=5RC$N3yjrs$(j;o9N[Kqjy.rDw1cf5mu^,CQP8$Q0p+\xOvXiAlqF?s1ăU"jC-LL5W9vGQEUUH7Ch-G$[-Y*YL,p^=qT]-+h#+S6DeKVagDmWP$AeAwTcE*EY+ăU"QE155-T;R=D0vAI]B#k5&:_<[fwx9_uozi;=x77:/=_5,r)CH:c8_]k_8<r%m&NăU"M&lp'D^.T6E9%Ark/Q-YcPx*xPlu5F%G&$brW2tr_D)Q4<+L;s+Iqw#+_u/hp27ăU"&jWBVJ\qC26'0]MT0S2m9xw)p)sEqAoN>*]sCSN18wq4>symFj#^6Au0Nk1DsgJăU"MkLP?eU2$;0F5qtCQiH*iHkX[-4Y)($BASOFMc8\Tu,,p^Q%qUFWZu$)hG??A/SăU";usjkB1(p+N/k>=v<?lnqh:^]9U6nEge)*F;n+H9_JT$s(RaHATCEikNQF5J=jIăU"Tmi;-,U9r*ZmY7&x1BgIUJ1Dbi[2$9\J>0#TQ'fu'QKJjjxPj?T]ioC:a6%PYZ\ăU"Zm&d1J2Okl)'8f277HtYQDEi>6n2#-)Cv&$)FGRa=K%y]Zr]4djisZ5'0.>jj+yăU"*:b)^'qGLl:YE(t?I$;:%:e3R#nO(X,ksPe1R)Pe5mc]bn+?g+;=.H]jJ+/smC*ăU"I<<^:4J4#s.^WZVMPB^a'RG5SspA\^FwQSF-->n=L*O-hDTKN$Ut2p]PJa\k/3căU"bYfLv](Oe/j)Dz(0T+b-,c#6m8sJ<.U-NC9nw,6^KR8]JGiguE;U0kFhj]$ldLUăU"Uj>aJ4QfC.cB/_m(k1*FF[vsM7xiF%Hf4v8lG:%#tEOfh<?N-HCWu%*aq.8NxbeăU"6_wgEKK$4I8]GGu1fuBlY#xUB3_I)n'=*[;o$a>?dQJIca>yWUfTg.Pl_xBbu=[ăU"j7VhPECN^omOC*FvYmP3:O[aV'.K.2C4XN$bP'VIs1F]%LU/g6u3=&8P=v7v60;ăU"IxA*UAq,2mCd/m5_m&rSAh=E^I%ckeAc?iUH_1RvIhw-$.Vtz3323\NMhrGw,^5ăU"vlsok]2RIAugChRog&CmV(+2.jP<osk-3b$so?1KX-B2f'u>19\GIyiweLI_=6>ăU"7x<^^bnXC_TwTGiG[j=Oq*^7AA[3Q]>8n$;z[RVcH/_Q2F,Sy-VPEJ'TWj4K_jqăU"tp]rI]aPDc'Zv<*?-us8VR\#ORD0vJT2*,oUj'7Se#.<P/#.qg180&AiZ;O6\)CăU"c-(<:'55+xK*z&81FBLh]alhq1Uv0i?\5\JYh%4UbwedhUZx=m$jMt4<:-0chZ2ăU"0iy1:jsS=?$iaQ#gRk#ki23TJkRe:+R0o2d>BQL9nFGb_&q;HgOkQ,T%+nqi]HIăU"jc]C(&KYZPCvCW7\g/?>gnFJuU=+]Lv[8sV1d5(s9g*/SHknt49)DqfL7hAI'0NăU"nWbTh>c]R)$3OAhSl1aaRqd)Gj#Px,_UM_TuSCs;uoX*JN6/Y=:jCoL#h;rD/5_ăU"]QPw^*r(LP4Y<lO<Y:P((QX4#vr4=#'_fI\(V#&(,r0Iv7t&O'XYDYN<l4o=XW)ăU"BL]ar6Tnt=Q1BY,4ntrfjO1t:0eek,68\\UZ#OY<V*D>Gl3RR$['EtJ0eRr2H$'ăU"S&\m=VN8#eYD6TGZZF6jtFih/l7-MNh)gVgmp#O&lX1=tBD#[>lU2:<E3<#IZPoăU"3jNP<GD6#?D#X[75\(kAXAl)VjPr')L4n=hhG9W26$p[>Q5t<L?.kzO<Ti2Hb4năU"20(/Z>V)INNi\*Y.R8DufsW&k:PWbi$U\guD64oZgR/HZf?F*l/f)0Q?fL2WH:4ăU"Fo3#Vfj%?I03gN8#pDAL3fn#-SlR4tpet2:PZ%T)DfD_-XlV5#<?SNd[Z6u?5YFăU"$S\j$P<Ti,D2h??r=Z\LC^[BlYEvE/X2-t,qdscxtdxYFv5.7k39Yp9=Mv\YH>>ăU"swf#xWh^x-[d#o$gwEZbJvB7149e3xuS[Hx3xNMj1vr$w%W1$KRn$[$mULCruo<ăU".xYZtln,&'32TW?5Hi$9NXGd:c'%Ih(\$XE,VMpjRL,&U#huh7loQ.wPps#<vP$ăU"Vz\Vc:d\V6wdR\DU=1,]gDA1tHvoFhpzLuG>8$?qB7)hl?nP:6w7zSrxFvc.%KjăU"$jhg\wf:#=xXex&jovhvP,>U?=93cQ\AGBXlF$m[m93#0+ot,s'fm4+bZ4_WMO#ăU">3?q7/A^uvUc8cCXD3E?^(L$vL\hY+4SN]tKdon.>a4qELas*FpP(Z0X2E)dNbaăU"tClf:nF,'VreBt(^2-B3GI$+Nk<a)XiYlj0=+(3(5&s>3S+#1Mq</aOuf7wDigdăU"zgmETLhM-#>-r8HdG3FzL(DL&,=r4FW_F<m2,7B=5XumoFw9$G*o*3y'#gn3i5/ăU"Ut9ZS7$]7lD\nP3wjcF4M9_Kk0NZtUn-._Ii(D3<Dy06%ta[4LJmvpNOPFsIKr7ăU"\^0esQ&O*5=*\<W'U-Dq.KD:)T);y^_CQ&w)R&$I?4g0ZVu:vJR0nGid=6k96E[ăU"&X5LeA&2<;5M>EPY9Jaia'](#RIpXq+0x[eGmTmx9O-8#_>oUInkT?9h3wIFd+căU"1aif5#Cyr+$>igV,i/hw*339-G49hT$7b1A8%U[.r13&<6FaW]-bQ/qUPyAk-^IăU"vHVO7I#%^Q$$MyiaBI-nwa)-Xv]S4A5[;kWQu(unQ#^t$7i?#\wE_%n;>k1(fC=ăU"&24^XxF3eTT9)r5WXxaSO%YSO]XigB>UyW+OV:bA\$KZG**_0IoL$'C^i\PY&C7ăU"?>r]HG\<pv,iMhpr''9h-JDf+u'ipXw?5UeY/fMaH9IJAyWYTB%CQpo2[X#[9Y4ăU"=kaGOoNXCSI)N_ih*Aa:UR[E4Ox(^Zcs=*CYi2)$]YJhY#$p9)9MndJ>R5j#=<găU"M<Yq7G8&b(Ao1q>T[=S?Nx1yfHn)NcSJ\E\Cxj'A75.Qn)$;l-(md0GrInZ)Gc-ăU"AEez%W,FIN'C]9E3%7%pRw^B9N[BEE5/:\c\//QsiN/ukGgdVjuN2Vx,wH6MQWIăU"-.)\/_-d^FVC0oL.(=AX^[>&Mcn_pAgJfQS>$%so,]nDg>a6+%>sL-h0f)+(^C*ăU":F8(CF4:B:9ELyS1/v_JvS)o]QA2(5V/wnj?[aFHURi=-+,XK0k>,NE_7zq,rJwăU"A=W%U;KDnC=Cc(ixe6ZXYP(O;atk:gaH1:^CC6'%i%FCINI)(r02S=yCMsRy3mPăU"mv<eA0=sZm7e3i;C,p8055ADG%=nccTA(\oKbn2s3-i[hUjaI8S[-d\0,:a:\rVăU"<\f%73W?^^b3r15t=8YqOiIJXn<Cf)3SU$i,oI3vz2_[<7m#$faWJ8N;y<[*07PăU"SFG98L+7YS+rbyhh_iuIue1tgG<pH$n6PIgkRK1hOr4)(TP&OIz8[XCJ>qOB#(?ăU"_#uDrWA3#rMHV$:osoK_I%n'^5ar;$YFji-SA4%%K1?cSk>5\;#o&W+#k-^6ZXkăU";mZ(/HIbD=3$D.tHM1;[_E6H:sILd]zAmF3M^9(w]?c\c,drW-K%zs^>KA#U2KDăU"oZilNgai_TB=YSV9V.Q8MTv^M(m$UR11jMgkr+g+olP\JI5XVGd6&e\D.YwsbtCăU"_0$,c.,?=15FptsUNC;5?T\ns/Y<Ds^<h9cT:>h'*Z2x/#A^f(sY5\Aj/C^QVMpăU"-'+M<aV7M&h>P#5=m_EM6',wN=LmO>bHKf=x,#nf?o395(BCp58=NzcqUXEI[I3ăU"T^5<)>2mksRY[r9l;wSlH<EkA6niFZt(4hsG_c_jlb2l>,doQrcdk_z24&.+ONIăU"njpL9=^wLOje.Us%*Y:+W4F,1?J0M7<w7T?&BWCqUAlqOhBCW[y\/Qod%W)(YyoăU"Va_f8-#5zk^WTO<MbPbmm'P[00R<(X(Jcs7U2AKqBXGI:)a;tyLLXKLL]g9=IrYăU"S73qK1xm/lv*MC*F]Ir8-iq+7H=5Yf7FBaayp*r[SN:x6Ek')wQXQIAEk9iXssdăU"aY:_?<l$QD#fRMk3WQj9W-SH(oPBo*$RCnkn-;_eqLeHtnvAU<RB_s_n#DQh&C3ăU"RD:aynQoAr^gTJ;BB[LDmIZTSb%X,[LkOQOMY8.G*UWJrZJ^QKK*wa,QL(zbm$iăU"(tH>.oiwtFoK^6g,^cr+/Be<%&Lzp*YSe%*X<eAr=\>W?Qt;WRm5/'gg?m'Oi*TăU"g1*Q[*pphF6oL(##PCK?UO&+Ue+mUuE,fQjr43jL/ZD*]>6o-O*hO:;DDbf[BxoăU"qmlkqQ2fgGFBl;#em)G$hGA#%5y/lxl'Hn4<K%tx%6$#/*B_-&G68/XH7H\p-ujăU"7FyC':MBUn^AvA>2.823P:Nd8$T$xks*\[.)LrloMDrx<f/_-JuPV7#C1y:rgndăU".>>*/mIM5PgpVxoFXDd.NH5G.rOmB_l=oq.nN.>NwQP=&3EY)/xF4vy.L?&35gnăU"IsoNf?LeOT5Q.uo&[FcM7C'^TO_\bbT-QRN9u\T7A6rr>245uopZs+*_8nJR2-YăU"Wi-wA08#77mrB<_GQOvB'rZZJ)VNb:.PhqVNvCvm%+UA>_=i9)%UW*zL,6J+TEFăU"M;)p36*.tP+/Ca<&cmE^1na4nHB91N7BHR?HSjj]vs3^SyE'mUHmtCNwwXx6oL=ăU"NflKi57LLt:xv$fs^PF8aF3ItLF.8SB&wOLaa&OX5Fqx<7O]EE$=p:rfVZsFgNdăU"^j4tD9G2OkU6dDr;0lQi_CHs;13'VCwFqDjFAKxdA\Ntinlq;xE=tnb2&0xsy,YăU"]K_:l.7k6,FgD<]zPd1Aq43.7U]H(EI?1N0+q$o;Wh:<<^EARpl5YK_iA,ORakgăU"*'sUT<k<6^NL(8PdPN2ujyEnd:Xi]7/qoBOsxt_$GIf#=A7M>EsX>SpOdP&uDZ,ăU"^(X9D.>Zw=6q&T*h8YYGux'7UATE0U?djmfjZ]saJnmMDh4h'wvoWV?vp9*f[f*ăU"J1cB([BV<NC\.ZY]XiV5IfNh:BauvkAm+Fu8t\-tQG]gVy,t]Gfx?PP&,X+Xi69ăU"v5aiX?1GQVqk]9Z5m2VKFC51seRMd1HYg'b2Dbk#XbKEhYrkBjeK7NmfJ^7(&XyăU"kw18^J^k'c,4Ap$GQVkN['fr8Ud$sUFC^7wcS[jw8D]rQ$6(jDUJeNmPRv)]<niăU"eA**/aw,kcu.Z<tC4lcD6umXHT[:X^/&LvJ6M'Jl?cPoDl?r#siYPL65A7T]UvrăU"KMfObHql9J$sNWLJ^%Cd_sT(;SP9a>.dj1P6qN+^XJn>mF[u[E\=MTP:T>HHEtiăU",O?VuiGhc2#$X&i6r\M[4Ba/cxi&WbCfD<0nlp+8xUHomBHnT%,3Dbu1xIJ9L,PăU"eYm]=%\jQVl7T5\1/tF+k9\)F1Z,Y[Q>;G_Xnd'e)/CgA19QR7u#EL5_Q+[L7PsăU"w1IfgmL/&$vjI<P7o\.MHD'CDyL/9Cc*W083*vJV-C37;duJ)Z4Z?i)c'Q#HKs8ăU"4m2'Kpz#Tx&yv*g\7X0GGbu]Q]6[A\2cJkD]wZmi.9xa\iYXvlEFp9\kLI?LC9=ăU"HDp6SCs4NgayCyEv+Jl>-:4Sx;=gz)+4W2YW99DaaY$i\W*EWW:-rtDvi%mb*8păU"3+(Ci4UgIdI-&BU\VdV.%K5Vi?t5k+OxcS#&&Lx04oyw8O_<.3L7Yf1+9/E:x#jăU"'8T73nU)$2poZE4?(1;%fh\YiiF,Z:C/zk.p:Z+t<5-GDZ_,;z.fx1O9Pb.Ap7lăU"?LY:wV;wnaXN)fx/NoOhC3M.19=34dur2_sehw7MMrw_Ixjl(nUWA4CvSI)ExOFăU"c4R0>(jZ)>#\8#mFRwq^,&S$]al\c&kz&h*)g3l8.oWm3>\MfAC[(T1&+?jilkNăU"9<]nl'*Oj[nTmGF*4aQ-P&%A(2C'EPcbHXJKztj8'p8yHnM;y3.ZY:=>jL[D6+&ăU"(vd>u'8%-D52r))-,E;'j]$5Tmj\roKCWZd[qe/JezX-*1POa.Y]6=ue)L;Aq'jăU"g,z?76mi28(=.F?W;Q[=gM2dK3WTnc*V2H)]qTG-*lBtBv/Wn4EGBe,:qN62x?văU"oMID)t,P:MyG=Rb/9zMyHd)AG>dMc<_B_n,9_uJ'd7YsoG9E;pp'_Vh$3YGXAkwăU"g1)p+nxp.XO4PfGlv[#uE?#xr0H3bh4:gV7I:%ZWej4;q&2B*oi\Et+OdPvSM,iăU"k+Uj.m2Bv%=igqFZZ[VUUc1=[0cLMsTh$Rb%].\kLop],=.QDEOXeYwXDg^9GR+ăU"DAk8-xu]J:1AU5#._KjHTxOi;],GWI3WFAP%wLlX;\2?(Htnp'>lz(bxOqJdMkRăU"[80=j-*#lTu,'9lRKR>k&msoD=i,$SFK&/ys0FnH:Fv&7(k##fqgh1DN_KPKjE\ăU"Knr8XgG)&97[:>v-otDDPDBaF$N5Dhn%Ajvlt]cAKDdVV7>K$byF.]a'wNceqieăU"7b)b4#PW&(_kb*0718;lj1O8hZ9*E7(MY[MPzwBN-'pNrJP]7')rLOD*e>xW8'zăU"F=i?e;wO'x^NcE9cEVwU%[8'X=f4_aQye,BLchL%aOcF(R_eL9$8%QGG]#5OnTGăU"6Kp^l%r+cdnEL'sWsB5gVmT(p'8(1T<XJXDrMr9aAdZMioKDp,^ngocZ(WLm:,CăU"vRN'OpmqI,[c#sc;D;M5#8IPVMEJH;;AC]s7e,3/91SO+zp0'J;HQ'V*L='m3CJăU"4:CZNMg2Zt#1SX6G>YKlR5k5)f.k3cBt=m-$_Trr$sirh:<gNAw2\lmO]at']c)ăU"7n;:#E*tJf3rvN5mSBw;sUx6_p3^MH]bsiBVSX1X1$fu?S6JR(>:21S5kShg-5IăU"FCcuxCvr>.xlc>VdYu&qs^,ASPJ]JQ%XSpU,Fa[CnNTon3lNASKeROsZ4bYn0wlăU"rh\'5_1C4gp[z)Gfq#iEM/t0lVPDZid#:5\y$wh1C6J5.^HkOc.(lX>sdOkddT>ăU"nXwI^chWsZ[l6vLmJ\1^M3K>T&:nK%z)X7W=J^I)1JSSLsKFm,ed9X>tfN-[OAqăU"5vjQ4D8dJ'Tr>bfoh\4uE3._5?Zc-.xw/NE;RYYk(vj,'-c^i^%b+6&,n,5q2Q#ăU")xEYL1fPt1=l$21Cziv]bRb[q)E_kHY:><TWM20'e)o+JY0;rA;YUU1.R>,wWW?ăU"HL&'PD7(l(I-OoEdkr_k%Sh$+6w;mX&[3g<(?GxtyEay2ewrL[dNGgQffVGr[b6ăU"xW6i<>U8U7PVmQ.va1*ZeQwD,L.A0E:L>x^h6/i/w+aHeDV+Ai0eBCj+j5]RmEPăU"knDkpo]ho]csXM:wM_m#jS,d?1[$F*#JUE63>)bX-B4Ixr\OK:h**-)aY/RJWFBăU"J:o.+V)oFP]>xFTJo)OSZ4\(S6(YP12]5F1KHD_3?H(*bT3h_?i).^nxiv%-j%WăU"GrproP0ZY=%;<q17/rS#T*;xeXq)w1#kcBH)(+Us2Z+:Yfg8NoIBFuCb-#jgs%(ăU":'ng?$_^VFfQpAxDW,w&?MG4'TW*ju[a2+N,Wpknc*q0vo8W1/Ed+Q4=6Fvi-6*ăU"HIzK((xLk?cAx?\(-JA6D]qo>z<7c&)Y)HKwy:Zq=WlhN8A\-1.Uq&#j1pCH<QuăU"k:hh=3e,c3(+ULNqpLIMa7EQHYLai%U#fDkznEV(,ej^gpr5+(-%Zc4DhZiVX>;ăU"$Vo:NT=tHVZto->]XjOBtCOKgZ;[#4L;[n)=x2)/T&tLQ0mJ>e>PH0nPk$D8N8săU"syODX=kxu$W*%q*V1,)oNG1g53g58tkWv,o*rZ*BK8+X<n*1+Ckiec;i32[M.&uăU"h%5suaDNEOy,fY:(($.nkPh)\&t0XHDb[ioMSe]j,KN0K,NO&E0bLq7Ks4CE5o,ăU"(]8DI0*E3j4Hbs>W10r/[y;zgnXFq;n.*kKxU[BcVvHhkOe=3':8UUc[Dia0n%LăU"7]VH8niOWh(UIa9&\dU&GLQ0_K7wJ1,$\xN?L(m96%w6B3cjdq6+-H[C?_2pY0RăU"'#s<.YT_qmXq?OON?A7.2=dbIK/eIOJne^TXR2C>n>\[uWc3$vB(u?ikuUAL'njăU"qj;igW,52zl9loS-UkWB.T-QKK6lC+GfZ40CW>T1X8RnDVL,;^2\[qnIanuQp#RăU".D'lt5w_ajg72Tr4PBN#HQXiYU^&DnfVmvW1X[ZK]Y.:yA8.NXw+]#W:NJa.bG2ăU"gppqZ_\^?%H9aJNK=wd$/G0$&=],o[SqdD-,MwR4.Is>0^\Vq^>Z&sF7qSr%''găU"IXd_v+rX4S]kC[(VmZp.8Zu27Pd''XPJd:#RFk9jwdewGp4+W,D(8#^>j(ka^*aăU"bg.416<8L1;1ePq#E#kaw+G>4L3'q]wB0ZcdsitGWOv_0znB]kC5Dtr-_%6we?/ăU"GDKL\9OqZKLtroVU*z.NKtxL[mwn3Z*O#^M4TwGo.oVID.8'FN[I<dL(vILgg19ăU"eqK[]4;AbtodJuwKE=I1nY\9IjU;?ZDXZTsxCPCG0]D;*AlNbsaAazCN>t;GmEYăU"+T/<lT/<Tc/rWPW/<TKkzgnpZ4LbCPyckLWo-8d0=VZy&>abn']ZEk#7,M-=MI3ăU"/W.7I,QdRN>>)9*E&jI_u3jo:CQn8^nZupOHT5+8ftMT9BigOPL/nQfu,pKx/>;ăU":]e]ZELIX=bkW33ee1*SB*jD#9N0>U0MR+Afd]t+fGR&k[gpfNP;u-i8$Y3cKIOăU"*+p/L0177OHV2O>2Ggj$uTH6%CYI]uJZ*IZa/?$bbNhdr9(9p>Xc=<eXN]ku\PFăU"+5\iZ1mF'>8XC)-8gB3vN(fns[DSvZ[aZPI5-A(7u/Adj*;boUNR[BW?M0A;ywiăU"sS%K/pD'BtV0Co.-Z:<0CkR9]*M$7kU]a;9F>Mu;vC??KQM9D/fALfe<\r[+eIGăU":/aSnPbQ$1C(s/<Id,J6IY1(<ZM/xtupPt7T'br3$4f4)M]CVg5*);)o/bs,V-ZăU"):\^Ib87#DZL:1nzyi*&5un/,Pq:AWX-rbb_p-<pPv-:$Z2Q(j,U^;Jy^^1kkIPăU"<e^kpXfRA[G5GX3:&UaXan*nJOIv5'529=n^'6/NO.>pxirpkLAj>5Zn3j,b<o*ăU"v6R8bNN7v8Vv:(at]Fp,5y0Eor[Tq9k1i<fpx#oHu\Aem\Ym;2&CK-qixC_z&\3ăU"&TsjjZ8g,(G\\LUxni_&r$G[(n,cmROnR;.7xmO<_$Xi8hMHO/U(lN9#iT#0bk8ăU"#\eujK&'>=1,df1$8&)PxlC&X/h+1L,:IQxCp6h9]pQOT0Y+YCw7cRe/RBo;B1?ăU"h/]eZyB3<%lF-/fH<YO^&9t<J(7s6Y,cT)T-bX=\MLsWR2KW<EZeF;e(>wn1K?aăU"E8O#Od=RvW^pbvXJ%'8WD$IN#&SNxJg-/VPJ2>SFDW4R=2]U;z\5g%*(jb>1/TXăU"w'+\<dQ*dPuiNaj39(w(%*q0tgJT>D[R7ZX3zNI1j%3s_USpo/gE6T(_a=S^^ABăU"BFAb.C6]QjU=MU7sWuoDE3XD2PlkalRaA%\sXk#\o)h,C:%nFHEYnoLpZTaa36:ăU"BC3$*lT>=KUuD[Ko^GC'#R;ysYiCD==[W6??aBU8'p1'Z/6ejHloI7/1M0si*__ăU"dF,&Pz5Qi6yBnH)wZaNEbgG^*K?%'6mBW^z'1*F-sqGBB1U]G[Q7a1kVmLO,%I>ăU"UY47_F^F/m5d2cMaQ%w;7uiYV+*cQ?a2sM%$<kw1,FD'bBH5fiL$7eX>X90u:VbăU"lPDVLp_D(mRI7j/9=A\9k9a?#cwLaTED3]syI/fX:jTBPR\:3l/'%%;r]_7cW7hăU"Poq?C6w-e7BFDBI_?<WR?5.:KO.0YPdIx'Jk#zI%FQ?V)O7nf'uuFp/P1P6dtyCăU"L]3wEIn<N+&OI7kEP,3E_6[b?:Fk5?vAg+ELU^rRM5\]2NXV=Ee)_skW>wP?78răU"^%x&sNq1F/ANC8YroK1)xbbj*5_niGw_g3iHF*^6KB?/Tf8E'$Ymw]VHN=hgSV'ăEND SUBăSUB VDăU"692-</;H=zSO4LeS<o2o=3Jdp8G\bt%_ANj/y7j(n+NDFKDONw=$OP/>9._y/qKăU"20G^e1/&Xx4FK)aU;H^QRcj_FwMQco9pMa2L$TQ*TPhp*M</?9lQ1d:s#b\t/#0ăU"vwlE+]xq8q,TH#TIx/H:=f5z_%GgQY*L/]XL*E\A<k/aX#12Q.M]GZ#W^CHBjm4ăU"Yl3D7C./qrV7k_(K.3&'f05zHWFJoG7[NJD=QVwGf.oczgGOAAtHOK)Mi,u_P<)ăU"Utu_X%rHb8U^^_%TF(\W:+Ou,H'fD_:q3e^jq:2QoEgoCQV<Mt&Z'-tD2=dijy=ăU"LjjHrb.#'NnUSL1D?R-A._066*X<7<QepQk]YPwMS7'IHjWn;oUr>%V_oGzI2MuăU"lXWtrFX)8bBTB(gS8W9h*(tdeJMdM/E83LbA>:veol]iXVFJE'tccr4>,BT&Ui^ăU"M8QV[(Zz^,iTsRh-tcKX2YHaQIQH4(vor7K]In4+q0#fGd-[xW;)NvMkx]s%_8MăU"+hMq-(]nXP)nX]:,77<#6msd4;.n%B1[(b3\$21C#\WyTF5%9qg?P'n8cS/q<>ZăU"BQYOsa=^o.XC_[3+q276Kulb:M(+[qAm^C/XXACv<?/:((kf57v0D8D#DWkvXo&ăU"FH*ZDqDWF4%\a[fI8r$j:(zU/)tP6Y>g>0K?d)lf:XqF3[EGmFbP()<J[Plg()KăU"/&JzjqT:r$1q7PQ<^<JL*?$FA2aOHmW457)3*Di*NDt?Yb2mF^^K0RB:%[p?wlGăU"PpL%#H0pzhSL4:S;v18?,*(&g7(9a8w:/<^1'YC;Q=2-JVpzm[gehSA_E:\G:,1ăU"lKgw_QuC+)C)1'OquBb'W1APR,S$gOPh$sYibYR\Uc[m*_:3DXi%[<iM8NmF8;kăU"tX9RlX#$Y.CQ?N+4,vkyL,At,[,+XukRN1a5CW$d\wjuYViAf^0?\Lmyy-,xLS\ăU"V\G%%^AqWhV]i)ueosEMB.*a0N-2A/IYhISppqZ$q5z/?1PeY^LJxW)hV+X%3MyăU"4^D\0:cpE9JWV&XJj<>PVCDzy?61QuUu/x[igRQ5-(.auK\(JuXeLgeTH%MoqJVăU"eaJ0+4RkeVN.DfM'Zq)eLGtS0*-D+ZnM'h=uTE(oJBODk29kC%eUUn;79,A)Q?-ăU"^igSI=[+:8k(m<.undw?fGVaJK\BI'5dUYE<,+:ZmJ(IkAG4>?DPpgBq[0DeL)FăU"owD<R$PArg*Yr&(As<-,h51T]O9kVmC&P%w4fL$MAZa;F;3-'V-G&sbCe+EZvBnăU"I>C4xs)PFLTUQ^xS:QF$p)ne.s'qJ%V?eIgDByUj%2;]J['Yn<Cm>1[E?;TDVAAăU"oLS;gJ5S?2i36=ecMW7[RuDbLd,369humq(X'1$$]o8fBNELWlU%pb/,kHbF[a>ăU"wJ$lP?uUCSsH,_[4M9;%i[#)?\3,O]SE83%V1f1dKuZ]GD8cw-=F6#skKF7[#W4ăU"M=q?K'GW,-mHq/]d.Lj=i*UWVT$f%#<lI:Cd;:]Wu<Cl/N259.F9b];5pbE?c#]ăU"p.ygY#rqZR2V8ZcECLT4=+m7pG^jA,h$rJi6JIZIgMr.%HUzWErUdkQbLUj/<2/ăU"3H5nuDXHS=C8KF;faho_V-vd&FmNosmIx4M(Uwp]9UVuP+qB$6]jr/.q[zjRRSoăU".3)q*jmYtr**\DPU0l3S:M#Jr)Q/_*2]o<P?r3]kyc5;PW7%*]ee[be2x82;rYAăU"HWgn^YVB,,[_IP_t&xcFq1jUoG'1(3<<(L5EA25$b;>.W*%Qr+^<XAD&xmX%G#(ăU"0[3h[)IU)R5[WuBcuD=NtmMGxt3ssiI_s,$lWbs%onYA)h[[r$]e1U)H\q=xm\uăU")fD1=T;XhZWy^jj4Xx^;9HO3U5\>^3vSF:?<n_Ime0LRqY%e&g6v;-2R%U\cD;&ăU"3=:ij#,RJJ9Kmci4;.BfBix^&fm,,O1Zan>LIc)U1m0c:'0H6(.Yum9e$'uD8OyăU"(PeO[wRJfX\C]fY1sVI,KBbH:kU(l3&dIuMyMSPrGf8<MtKZ*PKWt2j1M-JC5L1ăU"A'CHmN8+n?+g>SLZ#d2aIBY4?M'QQI$nr8Sz&QPO7c=RXVP]7'alZc7i,oJMwd*ăU"mS4U:y&']C^jyIB'U_D,O;kdx6UE'.)h4c+m'A(M+>L1(V,([g^1)Jx\A8JndcbăU"vV(Na&,3eLm&c.2-Hg74JGW.NMGZZ*6:GfEFlE>R&q7A'vA7=o0PG.19CQ7i?q)ăU"L1<S;%BQh8f$i-](9Wy%$UEUZQBJSj\L#<5#k>zsBezJl&G28W/pM:Y7lj&AXxhăU"LBVXY==d/g;_D,lIW+pTqM8'GHDhlkcmr;3Ec6Oeh'PBi%e?vpTyJ(]#x4#TwDsăU"8[ge7XFVjOGFUnLyW0'ey,kZ9A^BZLAQWkK9p)9d9qu.7svCtRRr#bU6]0[1F=>ăU"HaR]0-;2YR1_%<s(tok\q_76OoWW'%Sje5Q#aATTSlLS$aHMCI&.Wzo#^p1YFNdăU"7E\>u6VHhZ<a4>$uZk5fMRnC'%rT#NjR%4]\uf.Y7&NPuUW3KHewj.ZKM(&*MsBăU".q6gtbbmNph9CjM^?DZd(P$;H%d:Oki%sC]sLV5_4-e?^dfDlJ2kUcX2aA5j#OyăU"B$jC&':1Ee_1<D*5D0_&UPjj*+gJEq*unI?'G/;*a'JX*$dB+=#2\WRiKtsLT>RăU"F*jaU_4Cc/xxv3R22^A*2KcT.-gpuIM;Zq.MoaI6D+qMMyy9iYud30L=u8emoJDăU"+5;TEAi#D,H<lKX42Qo+S)V0=j7vA#nMas8)exyyNP9&%z6Pd\kkrR;/k)&E4lVăU"bC3rV=(Pudpt<-<<HHLHrrrh222\-\\8848LurejcLsZ]]][d>X5Gek^:OT%^_găU"b2G^$qk:'2i_mJgPH_h6WWH$lt>7r_;nNw*g;'/:I*<+7DpT;-,GZj;;(3Jjg<,ăU";*K>;.KKjJe'G1BJfM+9xthe-IbM4e(5NR4f,Y=2^e;.Mr:h%'0>L:&+8Mtd%-GăU"H^z%;(4Nzh&,<.NN%.LTnZO'b2FZPq+:&.iO-JfPDO(6WVDP,t>6nO;.Nv2j[Q/ăU"<R2\U7_r\[W,G\r[<R3Lrj\V;,TF[XKolR/Qb1DR0iU9z&l/WIdY</R5rT<0Vt=ăU"4f/<XMtBkEQ0#UBFU8hvlEWPH$,EWR4P,kFV<0WVEXLopboQb2HbprU:(6loWJhăU"YLoR6rXLpVt>8vo<XNx(m3]Y9[(4aa)oR3c-qYh3=^]Ihm4be)]<3du0iH]]H[AăU"H^Oacwrn]csa_2]^_3Q2^bZg1\]=dwq8ms]Z=[8tab)sbsc-r]xs=^^Mxmtbf-]ăU"Lsdv9mXG]c\EXHsad%,oGctebBG^$<UBHbuh5lG=dxu0sS1Y;m0T5a_qZS7-q[păU"S?2]KpsT6e+oDS8uokP'1c[CP(Q5cyzu'7sct:'2_rS:(6ug3d'?8ws#t=1Z?p#ăU">5bhuj=7Qr_*=Z2^O*t>6f/rT=8voo$g1c\G$hu5d'4ug7tgtJg2$rWJh6uh7tgăU"?8xw,pCGY:7,DEKpLR:eHR,DI3apVD5Mq$lpCHmJdlDJeH*#DNEuXLm>GkBLVnIăU"cxhvnMsMh6mHQoR6ntJg2$VnNwTg<-GjK><.INbtf.PMrd&q-HnNh&.JfQ.P.N$ăU"v\\W>GlF\rXId&l0XMtVlFWHlpVFXtJh6pWXNxRm4cqi]<4ds3ar^d6wqbtscrmăU"Lmtdtec,Hdx$uZT7?qkDTZ8sczu(8wsqj>7rloT>8utg4hZ8xwVpDMqjf#DNsNbăU"vnNQwrf.tMrnPq.Ntfl0XNx$v^dw?qlHduxsd(u8xwtVnNwP,]wdu%p&'9%%9%%ăU"%%-%B^3TGr$A+,A[1%%Q%L%%-%%%%%%%%%&%%E%%%%%%%%%gzr%uSgf%xup&%'9ăU"%9%%%%-F%6/T%GX)u2QQ+%:%;&%%%-%%%%%%%%%%%E[%%%g%1%%u%rfuS.uh'u%ăU"p&'9%%9%%#%-%%C-TGFbn+]\%N%%$%r%%.%%%%%%%%%&%%E%%1%e8%%%urf%uVSăU"u(h'up%&'9%%9%%%7-%:-\TG&jT?MWUm%%,d%%%.%%%%%%%%%%%%E%%%)ob%%%uăU"rfu%WSuh&'up&%'9%9%%%%-F%-1TUGZ0D<;KB%=%Tk%%%-%%%%%%%%%%%E#%%%tăU"%?&%g%rfuS.uh'u%p*+%%%%%*%%*%5%&%%l']&%%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăVBăVCăVDăCLOSE:IF S=96AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăStephen L. Maxson              BUFFERED .BMP VIEWER           smax@isc-durant.com            04-06-97 (17:31)       QB, QBasic, PDS        122  4255     DRAWBMP8.BAS'-------------------------------------------------------------------ă'DRAWBMP8.BASă'-------------------------------------------------------------------ă'Stephen L. Maxsonă'smax@isc-durant.comă'-------------------------------------------------------------------ă'This is the fastest 8-bit .BMP loader I've come up with so far.ă'Uses Coridon Henshaw's "SetPalette" SUBroutine to speed up coloră'loading; If you want to use DrawBMP8 in another program, SetPaletteă'will have to go with it.  DrawBMP8 reads from the file into aă'buffer of up to 32767 bytes, then decodes to screen from there,ă'which is much faster then reading and decoding one byte at a time.ă'Qbasic seems to have a problem with strings of that length; I wouldă'suggest setting BufferMax% to 19000 or so to take care of this.ă'-------------------------------------------------------------------ă'To display an 8-bit .BMP file, just call the SUB, passing the nameă'and the X and Y coordinates to start at.ă'EXAMPLES:ă'DrawBMP8 "funky.bmp", 0, 0ă'File$ = "groovy.bmp": DrawBMP8 File$, 96, 32ă'-------------------------------------------------------------------ă'The SUB takes for granted that you are in screen mode 13 (MCGA/VGAă'320x200x256), and that you are passing it the name of a valid 8-bită'.BMP file.  It also will not clear the screen for you.  If the .BMPă'image is larger than 320x200 (- X and Y), only the upper-left-handă'portion of the image will be displayed.ă'-------------------------------------------------------------------ă'Public Domain, (ab)use at your own risk.ă'-------------------------------------------------------------------ăăDECLARE SUB DrawBMP8 (Pic$, X%, Y%)ăDECLARE SUB SetPalette (Attr%, Red%, Green%, Blue%)ăDEFINT A-ZăăCLSăFILES "*.BMP"ăINPUT "Please enter name of an 8-bit .BMP file -> ", Pic$ăIF Pic$ = "" THEN ENDăIF INSTR(Pic$, ".") < 1 THEN Pic$ = Pic$ + ".BMP"ăSCREEN 13ăăDrawBMP8 Pic$, 0, 0ăăBEEPăDOăLOOP UNTIL INKEY$ <> ""ăSCREEN 0, 0, 0ăWIDTH 80ăăENDăăSUB DrawBMP8 (Pic$, X%, Y%)ăă'Maximum size of buffer, change to 19000 for QBasic-ăBufferMax% = 32767ăOPEN Pic$ FOR BINARY AS #1ă'Read width and height of image-ăGET #1, 19, BMPWidth%ăGET #1, 23, BMPHeight%ă'Each raster must be a multiple of 4 bytes, this next line takesă'care of 'padded' bytes at the end of rasters of odd-width images-ăIF BMPWidth% / 4 <> BMPWidth% \ 4 THEN PadBytes% = 4 - (BMPWidth% MOD 4)ă'Read the entire palette into a buffer-ăA$ = SPACE$(1024)ăGET #1, 55, A$ă'Decode the palette from the buffer-ăFOR I% = 0 TO 255ă  Blue% = ASC(MID$(A$, I% * 4 + 1, 1)) \ 4ă  Green% = ASC(MID$(A$, I% * 4 + 2, 1)) \ 4ă  Red% = ASC(MID$(A$, I% * 4 + 3, 1)) \ 4ă  'Henshaw's routine for faster palette settingă  SetPalette I%, Red%, Green%, Blue%ăNEXT I%ăN& = 1079ăA% = BufferMax%ăA% = A% - (BufferMax% MOD (BMPWidth% + PadBytes%)) 'Find usable buffer size-ăB% = A% \ (BMPWidth% + PadBytes%) - 1              'Find rasters per buffer-ăA$ = SPACE$(A%)ăK% = BMPHeight% - 1ăDOă  'If current buffer is off screen, read another-ă  DO WHILE K% - B% > (199 - Y%)ă    'Read a buffer's worth-ă    GET #1, N&, A$ă    'Move file pointer forward by buffer size-ă    N& = N& + A%ă    'Decrease image line counteră    K% = K% - B%ă  LOOPă  'Read a buffer's worth-ă  GET #1, N&, A$ă  '(B% + 1) worth of rasters in buffer-ă  FOR I% = 0 TO B%ă    'BMPWidth% = pixels per raster-ă    FOR J% = 0 TO (BMPWidth% - 1)ă      'Decode each pixel from buffer-ă      C% = ASC(MID$(A$, I% * (BMPWidth% + PadBytes%) + J% + 1, 1))ă      'If pixel falls in viewing area, plot it-ă      IF J% < (320 - X%) AND K% < (200 - Y%) THEN PSET (J% + X%, K% + Y%), C%ă    NEXT J%ă    'Done with this raster line, on to the next-ă    K% = K% - 1ă    'K% < 0 condition must be checked, in case data at end of fileă    'does not completely fill the final buffer read-ă    IF K% < 0 THEN EXIT FORă  NEXT I%ă  'Move file pointer forward by buffer size-ă  N& = N& + A%ă'If K% is not < 0, there's more image-ăLOOP UNTIL K% < 0ă'Put a fork in it, it's done-ăCLOSE #1ăăEND SUBăăSUB SetPalette (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăAngelo Ken Pesce               STAR SCROLL                    us0082@uniserv.uniplan.it      04-07-97 (17:31)       QB, QBasic, PDS        92   1904     STARS.BAS   DECLARE SUB SETPAL ()ăDECLARE SUB mov (xs%, ys%, xe%, ye%, xm%, ym%)ăDECLARE SUB scrd ()ăDECLARE SUB rndp ()ă' ------------------------------------------ Inită'$DYNAMICăDEFINT A-ZăSCREEN 13: CALL SETPALăDIM SHARED scr(319, 100) AS INTEGERăCONST vgaseg = &HA000ăCLSă' -----------------------------------------------ăă' ------------------------------------------ MainăDEF SEG = vgasegăDOăCALL rndpăă' FIRST LINEăCALL mov(1, 1, 106, 33, -1, -1)ăCALL mov(106, 1, 212, 33, 0, -1)ăCALL mov(212, 1, 318, 33, 1, -1)ăă' CENTRAL LEFT AND RIGHTăCALL mov(1, 33, 106, 65, -1, 0)ăCALL mov(212, 33, 318, 65, 1, 0)ăă' LAST LINEăCALL mov(1, 64, 106, 101, -1, 1)ăCALL mov(106, 65, 212, 100, 0, 1)ăCALL mov(212, 65, 318, 99, 1, 1)ăă' CENTRAL CENTRAL UPăCALL mov(107, 35, 160, 50, -1, -1)ăCALL mov(159, 35, 211, 50, 1, -1)ă' CENTRAL CENTRAL DOWNăCALL mov(107, 49, 160, 66, -1, 1)ăCALL mov(159, 50, 211, 65, 1, 1)ăăCALL scrdăLOOP UNTIL INKEY$ <> ""ăDEF SEGăENDă' -----------------------------------------------ăăREM $STATICăSUB mov (xs, ys, xe, ye, xm, ym)ăă' xs,ys = start position (x,y) (max 319,100)ă' xe,ye = end position (x,y) (max 319,100)ă' xm,ym = shift value (x,y)ăăynd = 320 - (xe - xs + 1): ind = ys * 320 + xsăxs = xs + xm: xe = xe + xmăys = ys + ym: ye = ye + xmăFOR y = ys TO yeăFOR x = xs TO xeăcol = (PEEK(ind) + PEEK(ind + 1) + PEEK(ind - 1) + PEEK(ind + 320) + PEEK(ind - 320)) / 5ăIF col < 0 THEN col = 0ăind = ind + 1ăscr(x, y) = colăNEXTăind = ind + yndăNEXTăEND SUBăăSUB rndpăFOR i = 0 TO 200ăx = RND * 319ăy = RND * 100ăPOKE (y * 320 + x), 127ăNEXTăEND SUBăăSUB scrdăFOR y = 0 TO 100ăFOR x = 0 TO 319ăPOKE (ind), scr(x, y)ăind = ind + 1ăNEXTăNEXTăEND SUBăăSUB SETPALăFOR i = 0 TO 126ăPALETTE i, ((63 - ABS(63 - i)) * 256 + (INT(i / 2) * 65536))ăFOR ii = 0 TO 5ăPSET (i, ii), iăNEXTăNEXTăPALETTE 127, 0ăEND SUBăAngelo Ken Pesce               STAR (TITLE) ZOOM              us0082@uniserv.uniplan.it      04-07-97 (17:31)       QB, QBasic, PDS        184  12238    STARZOOM.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"STARZOOM.ZIP",4^6:Z&=8919:?STRING$(50,177);ăU"%up()%9%%%d-%C+/UGl^(Kij1.%%-F%%%-%%%%fu%xXSgRfxN(;<BSm+7ws:WxpăU"Pf/,hQBp):51CSxH'cQS5ia&Rrg'T=2kT4m<8nSfrnHPVXIO&e;A=zpZm'>mbb6ăU"vkCtjtH?fWoV6Xj0L^h8/bX.fx4wN_zdWr*wZwF$MEWk)N;eoA.,AIsC0mJB5EoăU"1eDil3u,4Wi/WAyl(ypn&HvRn%%jtFbATlOf;9Zogn<6%]MZ2Jkh2J_c#$twhamăU"xsZ-ei(T]jhH664bGU<tl_^HVgJ$psu,Wb3YrUg8GCGAjiGj8%oqfom%*S%IfIZăU"WUviz8Yi+9R61^Rq[Xl\iMTN7Tt)(JN0o1KAsLAodV4e[.vgqEs-P*;^lY&Bp9$ăU"HH<)(tG2$h]Th?D%T/nNKD*gRI9):3oi^7wM\)MevT&RjwW3v:Wa=^oe,B5Mm?răU"CZdHbrW,(#tf=Gnr>mG9wz&q9t8PBYPL7Q_M>]-^nQaW:,gWGH]P9v>)Tb[$98[ăU"d*Ij'sqE>UB:Fblrk+&61Zs\JC(+^4g0D,G(XdVoiLr[:NO]&%Eh._QL0'EtL>văU"Rucs-qlV*1L5f#ixMx%YIp.4fqO;.6qE6BMs7x2bBK__x*%F.wK4-OX;HRR+#([ăU"F&*I8X1='$fOXH-q]HKQl)rY+ZP_?+H%+1+/>72pOQn5d0Iw&+$uaY'X#.Vf++[ăU"z\0ksCG][j5DL8_ZT\kxk9$9jE_ph>]ShXpI%#^=AY^tv&f8E(GA*s.TXBI5w*=ăU"sD)Y.4^G)=^SGTJUHb#1/LFY5jmUU\C,Xak\'0[uVUGo-Nl1wcK2UsSjl;XDTt8ăU"ZK^]T00hnF_1d*HsBLV'^]vF^?3e5bbL_EW'V'60:4ESBMltwG0aLs7$)_XB95HăU"JK7rGZ'Ze8^]Z[^kPt97CxcR_9xBWPYhCMmA]sJbue=3JA;wiqP-(XiCbGq_\7ZăU"aU.s$^j?F_hXYD./AXu7Tw*#zPdZGK%,DlXn>-Wa?6tr*HuvRkGk]Po_)#lP6x^ăU"YJp2&NCoMB3v4>mJxF<K*h8X4W9TWe,)NZqONNGo4:?>G79n;s:o>yE?T&7C=2$ăU"NY\ASY1E=KV69r1<?VI%NDP4Aq*8F*o#WG8JLg,eGVln/5y74Wo?,T5*evWgfC0ăU"p7_Z4oaqt)Sc>XMN4#F9y^Oxs7MUlhg3g\q>&5Y<pcN\9_7p^x8.;OUB0A]%VPYăU">>Akg7-:fGOBA:Hu6R+^.H*-q$:]J&umGIka&?1Xm\.%tw:Q?YLQ9)6yov0/^MCăU">B.sa\4evQ>*<</Oqgs;Au*hT=7gN+AvUzjg]7GD67:G'FNCM;/CdHXJ9G[Gf[HăU"S%Evi2]C]Tr8uMMUMq$;c'W;&>OL>-<K^bT4-6Z\:2frII,2zRYIN%Rl+kPQYM#ăU"I$#L-oVDW#=&V]q.$X8g83n?J>-i2i]WRC&E''G$2T:p%*[G=#-39Lk:llKYFCGăU"g-Bva6'KQ6w#X$ZXG_Si7)#9DK7gokxSj-^X0^i7:ZRHDW_11WX([e)bi.dcv'MăU"ywt,8P%3u+F?Bc.K&pLo+Yo^;YB^1qR)*3_e\y[G\*s:TH<kL?a39bzYv%I[7;TăU"[h1u9U#70i0am<LZj(BO's:)anSk6]*j&]w1sa,mUPQLZKXu%]&H?7m(1$B#OuSăU"i0I)OdUT+X;_T+hC+K&Abf*-R(>hWp/cJ*U#/+K]FGeQak3X>^GDuXPI]R_OEmrăU"R$kt?R:tPQkeOR[MJZi%?SW$>7N._%KF1h9LiS#%yP+SDzd<jP#;Wx&%;gLt&NCăU"ATvYT61s8D?TkfO3-vLNqcVw=#;=J<&fQ[DY:26Uwl_&db78v[tr0fPF+'ZK&<UăU"E3j:9gKj\QMH#D=YA:JofvD/X':'Y0q2/Jw>Av&,T]05).A\bMh'DD;O]QZ?qssăU"u#/pTi,b*U;2.wlkuT=Mm)se4HKus&Wu>lsB%GtjThz^K>j'r8+0EU51=&/[Kp(ăU"Zk'h\N$($$*fJ=xzRlWoUgb;_gIqO)&LnUXa6MjiVoh-VfIc3auU)7*4UJERqDRăU"SSSltIVCD1*-o]3MSu[;_Y?+]tkBach-0n+K]YTm8t(26sYHz<]JdW:x7W3<NeIăU"]>LrkJ=1rUIBY\>:=ONMcW0i4%O8x.Cr_?PxL)CV?>=r6*2s923]#GoZKX#xxE?ăU":_s]Hz=CdMfHpq9bi18)e+1mY3r+V04%&Lw7Xs7M6l)+gR]]'x\eIN)qvNJSG'lăU"?tBga>aB2rYy<4\fK&ht+Ph(:kw.'JERD_jDGr#S?h+lpkRa^OHLk=>B>];<A7dăU"?oE)P\C;zdjB(o4Ze>o8lkQ6B6iTr\<k*<GH8Fci6+_hQj%#gKStii4[OiX/geoăU"E+-CrOg&OC(.jv[.iwsIa8L_.nGBZPWw%mB?7[i=?v#Gt7UPJFF1a^bQ_2I<WM&ăU"usj^\;rg(?oP'Uf6j&>]\sKlI,B^s(U9\fF]CuVXSQm+0pl/+uULI;R3LnJZYnpăU"n,bUkZ0sqLL*m&.du0lpsm/,ML%U_998$-OM5xI9uv]oDoIMM,oS_*g6mw)wqEfăU"e<+ej0#>8*owuUOJK_g\[N,UaogB-l,#uEdruCTg:xM)Lfr-)q;r<].o=4Wn;ZiăU"j<P(bW%T0Zu't'0:,oDhedllk7:*wtqH\ramQeLz7dUTT+WTk=&lj\ufD/xBo?găU"':KF1_Z9*JxA$.a\Z?r2Da6r>$nAX>DVpjT_$&=tHghkPC.QJiB0tq8$-.nBO#HăU"\iwj%8L&)#=G7reT_u_6al%BwvtEL,ea5Cu>(N63tLxZTe[.V\H.&cz2'Ejy-\hăU"Tjmu9s-F.k2XgJtG<OFT$O+f#w60dq'(r)1vQgH=*mx^99:C;3XW=#%;$zGjH%ZăU"MlDoC,Vo)CAC0jGiEfja[trp+]NE<hoLic;a&-'VDtYo6\Vq/SM:W+MtL2/YDyWăU"/GKEZUS/G5xIAgpD%pfa%o\Ti/uk/*_*b[_7/Uy2AHd[-Ci:*8]*g,m<\U-H)a2ăU"ZA?7Yy$?EDJpOCc'gv?)6cPiS*P&R2JsA*+.>S-PxA5Q0m?\[,OsG6G;9#7FBYlăU"*1?VJ63=7fV4;:rNE_Is0ZU+K#.TDQMh13w];XaVYi:7*HYFmkQtfRV#NRZ)uGnăU"dDdl<Uy2NS?/l'+rXzUiX67#uF\0ro2*FHKWK=/O]>:i%c)ddkFTEGR&m#IS,MrăU"I^*8rSsqVFpQa4=1CYRm1LW?F1-,,N(yhrcj,1%?SUe<Rf9._=gWc$(4[3[$PdLăU"t'jR+YSN+-5a]#Kh-AkPiiCA7=pTT%6t-Il>%b9f;XSZI5oKpi3:Chz'rn<Ai>ZăU"4nFY86hesD4_$N0C=b,>V/aEG+(wo(j(ONbs:QBP+M1fDwS01i*=.^7P_\Ods$eăU"8C%UUjVfiV=90=DqiFFE4]rwKRD,LP<1hoY2VmRDhhL-a][2o>qE/'H5r,VK$\*ăU"8_x1A3Es-XT/o*w326##o*z6QQHBFCRc.HJFjH((2(#qT5W?7oXCKs:H(ktTpFaăU"lwxoc2h+6aZJin5i.aMJ87W+p-:8ne;V:VJ:JG\u:s<41T_pQy6FCVuEu8[($LOăU"b=%wIW+P=#l=hz=PC):2nsIMjsZ7z?DZ6G^.f4qtF3IUzht4^=Vwemp^ElE9;2păU"Q$Gf0_<ehXNa+Y9Cj-d>kI6o'0*n57or#k#u]CrZX*(x7'DCmWopAj)/yD<qSy_ăU"K;kTY>jp1f_3;jdPe25fhA_sj;*IH^>Za14Y]bC,fsbG%Z4BV^8:,J-dcqvp$idăU"zvEOk.Zi/FWO33CuLc=$Y;4>nE$2OW_7[YYXu'j[pb<g(.gn_;NZib<Sc?ELO_aăU"&1VuhD0IXbu.>cwq2rbS9K)ou0E80OjTv6vfC;7Bt$rWO;2i1ukhX_8r36JhuX;ăU"$_c%FrKqmoS&]t.V2<5=Orr\60E>K<[yLR<%H_rhd_Np=hxJ3hMuiepl7,Y]4%răU"vdK+>Kgd4'#x<3HG38hk;[WEPGPjI9vxcSg<QM$f-KlL\<go8*Fz]6avkhb:lu6ăU"#,Wx%u%p()9%%%%-L%TuU%GyrK,(=:%%%VI%%%-%%%%yjx%ySuh5'f)4pYjdvkNăU"WjU91n'Q;h3+=_Z[V%0CUuHe2q\BI=B2X(VUVBDu2Q[FV.?re2q[baU?=OV]tHjăU"%5niNQSWE<tF4o/u0f&TZW/0,Zh6rLfX)&x>l,t$O$$FMB$Qsn?pBlcZh$tKrxLăU"7X:\v%<DXf5K#g.BYbQ84u:Fs=0<aNxVt>xFvkFw>EKhGQsZTQkS816Psu][^C=ăU"JEab-D&Ji<IXlUjUQ+7RmQjX*Q&uxMk$.Hr)tUX25:f&#6[AJW*z=m+r%H?Oe:-ăU"FM.8;)dsn2hJS?:u*A$&z5r;##D'V-u0AL)vCw(z,F7:L%C5lJ?Hom0^'TLTQE'ăU"9>kW:I5UYfiuGJJhx+4?Y0l<,mrCG1*6\o>:REMR'pvQ%1H/n1;didac].%rf[kăU",'_$o]5g8C)y944(AT#keA*j)V05-z(_*;;'*tCtj+sZa>%905#P]y1.H.[q)AkăU"h1kVIk_GpjHsky2tdO-O^vAA<5\H\]<jG(W[Ui.?wdTq?7TpD7EqI&cL;SopNa'ăU",t;TQH(w8V7=(^rZ;:?F;25=BrzJx7g7J)qmpR&KvhVj0dPY9itcLqfqix\UaqjăU"RL9\2Gs>([,0q[M4bjj$qXF9(/d(c\HP0L3:Dr9/[Ppf=&0n2[sG]o[%m;)*&FgăU"gE0J:],'4'c:?l<QWZn'UMNZWVW)DbfQZJ]pz:jdKb$&oj)p,aS,Kr1Yh:u*hZDăU"]q'mM*G[3D]<?ucU]X*EqEA%8l&*u-[eC<_7R;*.Vz[TWeex5##-+$i6jnIVCfFăU"qPKrHKI)qvQfI?7mcC=my(G#1bUT&j/MMh<9KIC)kU2#LE/r9fZm\G;qSlPXzcYăU";&CZR40Rj(iuIjNr'ly]*m.c'oE)>$is>X+S/h[l:fer>L%dRL-^cv)64LP<KZ3ăU"?\E6?=EmWP7/n?<H+Pl::&bx(%,*4dLCx$QZd/.ZW>fXQ\4VSkPa:I5*.>[>GbVăU"Zq=(/;+ejX7%91lSFLaAkW7nP2L<XRrkS\'js3E5y\\evjQisE>MeB:Aj=M0I+)ăU"A1qu/#5>M\8WpFN<'9cKF,34d?$#t$cjq3'CGUZu#\5LL_W\)RTY0C\5&D+=9A[ăU"7#bqkGQAIC#]T_)f$6?$6<:DyoF--AFS9%Ao?0s#9OgXsm4bQ;G\LxBz)bJs+APăU"pW%4B'a[K(t?ueImi+)9+4DO9^;[]^33E3&N\)FQ^B\P%mSGApXI9E^PeMK2eTHăU",8u:_ylN=A$#5dWB1=nmvrnDNP%yzyzmDaUW/pGJ_2j9YXHp>i_$:Jg<2r1bw0]ăU"n$C^aizAU#WZkhKST18H5f\lir2qCz;QCnuHTYJa6Wku4YSr+hwS.BtX0:=X==AăU"nq$>n6[.rJ4nBdxG/MX'OdRNwB%U$\pq_>gP\IU:+G;g'>LU>g-'>D;UF]4Im7măU"]WL4#NBC]NA./92/F8iM*C)2K*#Vv*A_Z;[eY7'T33lJe1#*)xRbsV6-.qNCuAHăU"Z3((0+E&lWZQ6OuH\)a2*CE8cjUX30qIY)>RU>Put6di6^b3C2XgM^rV?/nYh/%ăU"cVkQ[a[]$([Ms\[^[r%\N(;b,o=p+KXD2,RxT.+x=LEUV:%p:2V/BE#[HsujHYoăU"u>R[S)GqS0yG,>TQ%p+tDQS-U<[G_Vc/+*3#ub_-dNH9ANATU__*ZUfP&)l9el<ăU"-#\nIfb*LPd:a0]aY7b2nf2UYG_M0M($^ZHlNRTt)rSYH%=Yqsr_cM/W.%]6r=băU"+MbYGQw$t'Y#Em0.1r=R<(Zpg+D&ayx>G&[mOeifD9nF\iCgm40-dbrZQ]/_i$:ăU"]Hs*R)LMCcP_I#tSq#-TNmmWt=DV-5kO1^-gw[[U7&ZDc%D;iRB^J_31&JH\,IAăU"4fI;'6#++bV&^\L]6I__X]#%yH,3ja8l+^Y=l1aSo%?.uWM6&C9P)5ng<*dR\j6ăU"4*:B).dQF2V&;R,cF2=%X:<j_dc*(VTBeFdD525FjThqmOCn0.^P-uZWm[>Y]i(ăU"G2^3_N9obFtIlaAUu*G-n?Q:_E,O'oNE?HsCHRo<LoW>n49Rtr]G;$iCA<^P/LIăU"dBnz(^2CV$,U[E*DY8BoZa6kktR=H36lLiM$qj,H6)O5VU5+#S][geExs:?B=)-ăU"[D/7uo?A[cLk0lW,YLSJ*7Ai1iWbadW?2dHYa9m[\3q3n%D$BS2n4Oo%TZr\ItUăU"03I^N7#/KtyRME.$)?+_\3545u\h?:'6e(CHb;[Li$j0uT=)r3+C&D8;/9=:nr_ăU"*^U=eE/a7+i_yTtS'F27I4\rO8E\WZK)RGJF)-niz>)pYW$$Le*RgPePPv06ZW:ăU"Rw$KlogR[2)d[:^CG#8-CC7=mIKlPOUt2F'hHw_7dJeKAs<J>>mX,=7YhNV2:;YăU"7oSizWC42[v34u>5QiH-R5RI[dW3b.G)C#jIoqX*N9ApIla1SY9>;[6JHdKK4'RăU"c&:#J4HlA/&#y?=vaw:_]W>QC]hB-]RV-u5N%tCsw^W%G[&f[$9EolEb)4Q?^e#ăU"_)T;'?1V%6g>IS=sKmLI#^--yDb7&#[2d1L2[9s#0-1cf^pzzX+Dovy#>_V7HT<ăU"JFbRlnUjfd0WPEjhGPF;2Nv<9w1P,[B09Slk=m28K=E=%E?R6?s)<\JcT1L0njXăU"n2Fh:BR)+qC^v\[-O35y^,3kPpv;h)sbV^96e*0Eqo4%fLT^D5Ce<bV5>nIe'=.ăU":O=Elrfp*n_bnK?J]m5z$lB2?Iy2gxc-l6\i:>fpTJMWeW\(b=E\>x$aiU'bc(căU"Ea?+BD?O7YP3O^pTbdq,[3vC(MS7F)jUeZpjPfRcZC3n4i.S5%+UtFM^-KB/cOEăU"3Oj6DX6+u=]AW>#rR>mQOJfpHW-gPW$BL>m'Hj(GNg-u48)SCIM4&wSO)Y&Lp6\ăU"5LGIB5L&XPW9&f+F?anm^N<*qGl%c:n8%+F3h6Z=#KMT7;Rt+Y/ZY1gbB>*8)GEăU"FvavD^9l5^(s1H[RrN5SC1z8-OhU#Ki*el9>6B).ZkegCM(cVC.GLSiQ;v?W-t&ăU"gRf+tyc<=UZ=+;Lpg[dnVOgY-<R40>d6Y+VRF$1x,(R2,L$drS-hnAjE)FS5+'>ăU"fSlGE1%^&[5LJ3CHdN1STw25XOn/Z<gwT4+3.r%%law,O%2TdrO2<*nKFFR_VB7ăU"Ru#0\\Cbhfk+^=0qfAws-/2hxbbXe#jMh1*inJPN/AxpGla>TG=O3<HW::p;4OeăU"s9pi4\qV;f*ct(GIedKm/f3n)ipGpPl9?^hmIF/.q.kZ51gr0<,1A,P(-+*#-9^ăU"/IQifjG$R\.vY^f*&HIkpgd24F;(-u3l_s/qA[cg[Sy,S-?n]H-TQK62Xkce_x^ăU"/a,)]MTb;<<sht;3$,6HUF/iU2?](qzh)D3=5[$0#SS+F^22al+lQ-_)6sKqu71ăU"*lNQ40jqp;^/fi*3SvFDV2<sGdrGEgG?Z24.%<##vu34E[G3gc:Nf-tWaGtmFrgăU"ZOXnpEpY7VV1322K9]K:8PJPQl]XN*tOd-oZbu+n=$oz^SXDF,:AUbNPAlFSSTPăU"U7zL7R,Ks/,?j*2)4+)1I^VZmI^Uo0ej8P\HFVA#-H1+JF3,Uez<eJetPD+Tg<7ăU"?TI6nJaM=7Gb3Jg3Rjtjr[S%K%E[T4R#lvO%jjVvj,jT'%=$7.D+7_3mH1%;hzOăU"#7A2T4_a.p[%XP]FP)I48u=b'Mv,HuTPum:qgVLa=-YK5CThR&QZDoP>4ubG=':ăU"C[^QTqoStM22N]LH?iOF&XjM[nR9DT[Pf$Ca16#0kED'kp(02oBFK')\Sg7Od+QăU"&/uAc-PZZTrB;V3.G5GHHJ%fa__bZZIj=ErYc's]7R3Ve2qip$4;uT1zF+)&bd;ăU"UYHbdTfA#U*y.>4C,LT/er$k=>C0GE5[b]GD=OpFf[aWU7]vfc0pF(HmYm1mnR\ăU"&TmJ[]Gf0W.-y=g&Sh:caX],.-V4(Db&3f9f6(/(aHha0W12qC_.oX7O58OQ2yrăU"a)&+jl1^(YXBLIwY3NhjI?p+>9Zm[+[fSX8Ae.w8vfYv9Hlfb1QePGPQd4w\i(6ăU"^9'K4q>6j8IyeHT\54cZboY:N7&G=RPU^DcipR)6VfX1OVM%UAC)#d(s//Ge/mlăU"#l,/cPD_wV[qf\j*D'VHL8ZME4e#G3oF_=9VA&C*5W42b5'H13&g#,hA_?66DkWăU"i;<mPB7IQwR5/DLv4<R0P4a*?&1DWoD?6Aarm[^-*&]UD\:EX-GcQD/N-P3+P\OăU"N2J'A0%,Z]bXe/jBKuYJ#&^\1n<6Xs^s?:2^B?juMwYCMg)-59d$Mj$9]TDb7a(ăU"F=DT#0:O#[+<Wb//DH]Tba^K'emQY:rXK%ROPpE*'-)ouNEKtUkf6bYnu%V)+$CăU"0)=o0K>6?:xKZr]cQ7C8qj-*<=fpZVG;7'r6UC#qa*sZdJ<-#hU1hIIg7Cu<&lAăU"P=_pIYS_Sgz[m.4jF6ITO*$'Yb(7u;)rQ;oHN(pUL4VbdR#Wc,k?:-^.misgW,MăU"wvj^2D,KH<U);^_#0R8_7D(;sTe)4zw]pkW?Bnoo0ip_EB7kNV4$m7G;fSsG0X=ăU"0'EU%EU7T#d7/G/Iq_P;leQe4:yK62_c6hX$M/&vk.w=jZXrxv023X08\ob'#wQăU"Ot0dmpQl]c$M/oy?24m3wQ#9#6&o*%P>=L'OUAjl/bk(2OM;Z5^ON[yP?+s9TXdăU"oH3sA=bwiTYOOrWVG<7e%=m14wKxx:mf/E%sGSc1V6%&';GanUF(g#<jUBQGLkoăU"X2vm&v*51zg,z=<nN,)zc]'uul&5ZeugZ=-RAS\mBfZ'ac)d9R*5yIgzR_J.yGIăU"spb%wrbk;)f/I<:ik:cD1s:]<Xr]nu-.Gl+7[=Jr9PZ<&ZH#TBB\2e9QO^gt'_OăU"9%7i+_DaLN/'g+JfQ.Kn^ftm:0)<FT8(i%wjGmeVL;Bj_U'.Mi9Nw\,_STUQ1)oăU"/RJ-Y'EMRf[7F\Q#.(ygcE.M:i_q4b?%Z);';O?]SEAvj[l/ul+:D4FJFKb(Y(3ăU"*Oj[H60NQYzVj[D=BSub9,o5iuP<'aUeu\l=/[2G6AuQHrnoT%Z+D0cAfTH_bq[ăU"6NhQt<=FlH70+i\tOKNB#4NP=kD[8#&Ep;(hHYqtsZ2wrELV)q,.fOtK+ILOFEXăU"tIt7aZcQ/rCXrLoOIkJK1eJ<]]J/irn0>eJ5G9>RI;=Yd4Z/AZoHa'bRxb'i+A-ăU"g+\aU4CO$=[yUEDQoVItfqrGDmuuZ1)J$o]DdPWj6B%vS??F(+OXa8qg+\hU+COăU"E*d\YcJ'YVHw=>EK\*Zlm_=trOm:boMHBn7ex9&x\XM0%$1BW1A3KR(;;C&p=<măU"('*BLm<PG%_fJ5htZHMG7J.+?rQc'E.yzyaY_^^%87sG2T]Y?6Y9H0;&=a6u>6qăU"=:'txB(O5:-8svG'Y8M)/NN?:5#>svR<b#e:<c05&^XZ%bOa.wv854Z<b8'jER+ăU"n^c?Si-OX0CVU*#4QuZjn-gG4ClrOoFb9e'oP[1[WqQbvXWsbq2n8F8Pmt6<Lw5ăU"]H+/Jrk_J%]72dhnWNKNB8D/Zk5^]L.b<9.FW=/tEWU?t]G]tbK7.0X3DT<0Ku$ăU"YjjM>j-[$YDNXuJ+t9q+S20i_zQ=0I>Lq?n$2.j/(VGV/av*Tmb)HM#C.PtK:vEăU"XC$DBQ&sTjD2HHP7:nN^7NlYdbJTcsS%Rk7=U%?:Q/3Lu:%bkgY]8LeHkySoee+ăU"%#xm0^aHb\,MFRqWbTf&m>-U]7/Wx'][j2KDOOY:d(WWeJK^2t'.l2Ur=orHZ,LăU"hw7/Fx3_K0nyB[;w:<5$/-p'WjwRet=?q0;KfT+u-IZjuf_^n,,/EM<E6UfFg12ăU"4wZ;:BoSj[D*-z7;wgTvZJ/8Wl0;Fd;_%,xMt16\Q-G&wMj^>sB9YoT5D$]THHQăU"/6qSuI3?lvrx##RZ;iGIB$3ux\yP4K)t$fgc.q<4laBH^:4,Oprf<Fm*nb9UY'*ăU"m(\2GjGvk5KeuZcc%ZLMA(te]E$'[c8heHbm8qvJf,QGEZT<7.Y?ls>Nj><I>1UăU"\,\FpT66=3WA(Q;jrFMr^Mf<<<R^AGV+cmFStfD\j=cuZ4uTRRj3rKPeNi$^KZ=ăU"WW-dM9MmArD:X%i333sDtQ##ABBl_kkcwij^Z>M1666SXikXptK;>u>>NNinbnuăU"MsjjjZ44tv+cnN4%44tt[tTT(ptNsLr4EfkuooW6PJ0^^t^((h86cl>#dddNPNxăU"OOkOHMoN,PPP#fffnZtU$QqRRpeuRlrH&NcII%IYYygOdMZ(0.-0%0044cx[<8%ăU"=666R>>rt(TLNOpO9hWu6JJJY.wkfM2111q228ktd(=>l>B3+W(Mnz?jjj.d...ăU"t-SP78L8baauofTp6n(Nb%^^^JaJ^#XKqk99h9))S=\8rr<2+'usMKLLZ8n&>M4ăU"333h55MtuTXGCuCCGGlwGF7MbbbbMjjjftfpVh&M\ddi8ooYYJXt-q00Zwuvt8xăU"-vh<:%::<<hfccu'Y,dM#RRb?HY94Nuq<++u+kkk=Dval#:::d_dddw3j^do&4zăU"zz;DDntPMkbiqiiSSrSnwmMvDDD?nnnd?tRH?%??3CsaQQQlqlnx6uIph[rrr8HăU"q>TiMjj*)q)MrDt.///?/..BUcKq&H8szJ)JJlll#(NvudGGGu'''Xcu_\VHVVOăU"dhyvv$Z08v<M>>>.Y.XhMup4wwBwHl]uuwp8%D===%AAA?=?s<D'wUaa[aWWkT#ăU"dw#MCCC;G;etNusLqquq===tnxu$ZBBBxqxxbbub8u^.Tl^CpbEeQt.xsPhhhhRăU"uRR8vif>9.lsq#q0j3bIkxJ7-t)fUUuUuu5Lsv*'t'IdnU+R:7%YSSSJiqut)ttăU"8L%sQTTZ(%%kLaHADMDD<<h<LLvEMxxvCtncBc_EP(r5AoerRB$GZvvhNpdNwu&ăU"T0<SY-5q^tNu\NV&.6CcbKdxZrHDfUT.2AZ^.P-r4IncW.:P-tNvnduP(X1t#\_ăU"Fqj>5jl?&*0[[[[WtKlFTr0>X2tB$&0lW3Jplg6JpugX8x6oT>dtGiYZr<Vxs-PăU"8Cb>ImG$uh5tgu4h6pkmR;w%Dup&%'9%9%%%%-U%C+U(Gl^K&ij1%(%-F%%%-%%ăU"%%%%%%%&%E%%%%%%%%%f%uxXS%gfxu%p&'9%%9%%#%-%T)uUGydrK(=%:%%V%I%ăU"%-%%%%%%%%%%%%E%%(%:1%%%yjx%ySuh&'up*%+%%%%%'%'(%;%%%%zG%%%%%ăEND SUBăCLOSE:IF S=84AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăStephen L. Maxson              SAVE SCREEN TO .BMP FILE       smax@isc-durant.com            04-08-97 (10:30)       QB, QBasic, PDS        169  5131     SAVEBMP8.BAS'-------------------------------------------------------------------ă'SAVEBMP8.BASă'-------------------------------------------------------------------ă'Stephen L. Maxsonă'smax@isc-durant.comă'-------------------------------------------------------------------ă'To save an 8-bit .BMP file, just call the SUB, passing the name toă'save as, the X and Y coordinates of the upper-left corner, and theă'X and Y coordinates of the lower-right corner.ă'EXAMPLES:ă'SaveBMP8 "funky.bmp", 0, 0, 319, 199ă'File$ = "groovy.bmp": SaveBMP8 File$, 96, 32, 159, 179ă'-------------------------------------------------------------------ă'The SUB makes use of Coridon Henshaw's GetPalette SUB, so if youă'wish to use SaveBMP8 in another program, GetPalette will have to goă'with it.  The LongToString$ FUNCTION is also required by SaveBMP8.ă'This demo makes use of the SetPalette SUB, but it is not requiredă'by SaveBMP8.ă'-------------------------------------------------------------------ă'The SUB takes for granted that you are in screen mode 13 (MCGA/VGAă'320x200x256), and that you are passing it valid values for theă'upper-left and lower-right corners (i.e., the SUB will not checkă'to see if you are trying to save an image larger than the screen,ă'or if your lower-right corner isn't below and right of your upper-ă'left corner).ă'-------------------------------------------------------------------ă'Public Domain, (ab)use at your own risk.ă'-------------------------------------------------------------------ăăDECLARE SUB SaveBMP8 (Pic$, X1%, Y1%, X2%, Y2%)ăDECLARE FUNCTION LongToString$ (L&)ăDECLARE SUB GetPalette (Attr%, Red%, Green%, Blue%)ă'The SUB below is only required by this demo-ăDECLARE SUB SetPalette (Attr%, Red%, Green%, Blue%)ăDEFINT A-ZăăSCREEN 13ăRANDOMIZE TIMERă'Create a random palette-ăFOR I = 1 TO 255ă  SetPalette I, INT(RND * 64), INT(RND * 64), INT(RND * 64)ăNEXT Iă'Put some stuff on the screen for us to save-ăFOR I = 0 TO 199 STEP 2ă  LINE (0, I)-(199, 199 - I), INT(RND * 256)ă  LINE (I, 0)-(199 - I, 199), INT(RND * 256)ăNEXT IăFOR I = 3 TO 96 STEP 3ă  CIRCLE (99, 99), I, INT(RND * 256), , , 1ăNEXT IăăSaveBMP8 "TEST.BMP", 32, 32, 128, 128ăăBEEPăDOăLOOP UNTIL INKEY$ <> ""ăSCREEN 0, 0, 0ăWIDTH 80ăăENDăăSUB GetPalette (Attr%, Red%, Green%, Blue%)ăăOUT &H3C7, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăăEND SUBăăFUNCTION LongToString$ (L&)ăăB4% = L& \ 16777216ăL& = L& - B4% * 16777216ăB3% = L& \ 65536ăL& = L& - B3% * 65536ăB2% = L& \ 256ăL& = L& - B2% * 256ăB1% = L&ăLongToString$ = CHR$(B1%) + CHR$(B2%) + CHR$(B3%) + CHR$(B4%)ăăEND FUNCTIONăăSUB SaveBMP8 (Pic$, X1%, Y1%, X2%, Y2%)ăă'Calculate width and height of image-ăBMPWidth% = X2% - X1% + 1ăBMPHeight% = Y2% - Y1% + 1ă'Each raster must be a multiple of 4 bytes, this next line takesă'care of 'padded' bytes at the end of rasters of odd-width images-ăIF BMPWidth% / 4 <> BMPWidth% \ 4 THEN PadBytes% = 4 - (BMPWidth% MOD 4)ăOPEN Pic$ FOR BINARY AS #1ă'General Picture Information-ă'  BMP format marker-ăBuffer$ = "BM"ă'  File size minus header-ăL& = (BMPWidth% + PadBytes%) * BMPHeight% + 1078ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Reserved 1-ăBuffer$ = Buffer$ + CHR$(0) + CHR$(0)ă'  Reserved 2-ăBuffer$ = Buffer$ + CHR$(0) + CHR$(0)ă'  Number of bytes offset to picture data-ăBuffer$ = Buffer$ + LongToString$(1078)ă'Information Header-ă'  Size of information header-ăBuffer$ = Buffer$ + LongToString$(40)ă'  Picture width in pixels-ăL& = BMPWidth%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Picture height in pixels-ăL& = BMPHeight%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Number of planes-ăBuffer$ = Buffer$ + CHR$(1) + CHR$(0)ă'  Bits per pixel-ăBuffer$ = Buffer$ + CHR$(8) + CHR$(0)ă'  Compression-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Image size in bytes-ăL& = (BMPWidth% + PadBytes%) * BMPHeight%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Picture width in pixels per meter-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Picture height in pixels per meter-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Colors used in picture-ăBuffer$ = Buffer$ + LongToString$(256)ă'  Number of important colors-ăBuffer$ = Buffer$ + LongToString$(256)ăPUT #1, 1, Buffer$ă'Save palette data-ăBuffer$ = ""ăFOR I% = 0 TO 255ă  GetPalette I%, Red%, Green%, Blue%ă  'Palette is saved B, G, R with unused byte trailing-ă  Buffer$ = Buffer$ + CHR$(Blue% * 4)ă  Buffer$ = Buffer$ + CHR$(Green% * 4)ă  Buffer$ = Buffer$ + CHR$(Red% * 4)ă  Buffer$ = Buffer$ + CHR$(0)ăNEXT I%ăPUT #1, , Buffer$ă'Save image data-ăFOR I% = (BMPHeight% - 1) TO 0 STEP -1ă  Buffer$ = ""ă  FOR J% = 0 TO (BMPWidth% - 1)ă    Buffer$ = Buffer$ + CHR$(POINT(X1% + J%, Y1% + I%))ă  NEXT J%ă  IF PadBytes% > 0 THENă    FOR J% = 1 TO PadBytes%ă      Buffer$ = Buffer$ + CHR$(0)ă    NEXT J%ă  END IFă  PUT #1, , Buffer$ăNEXT I%ă'Put a fork in it, it's done-ăCLOSE #1ăăEND SUBăăSUB SetPalette (Attr%, Red%, Green%, Blue%)ăăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăăEND SUBăStephen L. Maxson              SINGLE PIXEL SCROLLING         comp.lang.basic.misc           04-10-97 (09:00)       QB, QBasic, PDS        406  14484    SPSCROLL.BAS'** SPSCROLL.BASă'** QBasic sourceă'** April, 1997ă'** Description:ă'** Demo for single-pixel scrolling, using a graphic image thată'** is larger than the defined "viewport".  Note that the spriteă'** "jumps" when scrolling.  This is because the sprite is actuallyă'** scrolled along with the screen, and then erased and redrawn ină'** proper position.  The alternative of erasing the sprite,ă'** scrolling, and then redrawing causes the sprite to spend so muchă'** time offscreen that you get an unacceptable amount of flickering,ă'** particularly during diagonal scrolls, when the sprite would beă'** offscreen for twice as long.  Page flipping would take care ofă'** it, but I'm using screen 13 for this demo.ă'**ă'** Stephen L. Maxsonă'** smax@isc-durant.comă'**ă'** Public Domain, (ab)use at your own riskă'**ăDECLARE FUNCTION GetKey$ ()ăDECLARE SUB KillPalette ()ăDECLARE SUB CenterColoredText (Text$, Row%)ăDECLARE SUB DrawInitScreen ()ăDECLARE SUB ScrollScreen (Direction%)ăDEFINT A-Ză'** Dimension an array for 320 x 200 screen.ăDIM BigGraphic(319, 199) AS STRING * 1ă'** 20 x 20 sprite, mask for the sprite, and buffer to save background.ăDIM Sprite(202), SpriteMask(202), SaveBuffer(202)ăSCREEN 13ăCLSă'** Kill palette to black to "hide" drawing.ăKillPaletteă'** First, our sprite (The LifeSaver (TM) Invasion craft).ăFOR I = 0 TO 19ă  LINE (0, I)-(19, 19 - I), I + 32ă  LINE (I, 0)-(19 - I, 19), I + 32ăNEXT IăCIRCLE (9, 9), 8, 15, , , 1ăPAINT (0, 0), 0, 15ăCIRCLE (9, 9), 4, 15, , , 1ăPAINT (9, 9), 0, 15ăGET (0, 0)-(19, 19), Spriteă'** Now the mask.ăFOR I = 0 TO 19ă  FOR J = 0 TO 19ă    SELECT CASE POINT(I, J)ă      CASE 0ă        PSET (I, J), 255ă      CASE ELSEă        PSET (I, J), 0ă    END SELECTă  NEXT JăNEXT IăGET (0, 0)-(19, 19), SpriteMaskăCLSă'** Let's make some graphics for our array.ă'** The large section following creates a very crowded cityscape.ăFOR I = 0 TO 7ă  I0 = I * 40ă  I1 = I0 + 10ă  I2 = I0 + 20ă  I3 = I0 + 30ă  I4 = I0 + 40ă  LINE (I0, 0)-(I0, 199), 8ă  LINE (I1, 0)-(I1, 199), 8ă  LINE (I2, 0)-(I2, 199), 8ă  LINE (I3, 0)-(I3, 199), 8ă  FOR J = 0 TO 4ă    J0 = J * 40ă    J1 = J0 + 10ă    J2 = J0 + 20ă    J3 = J0 + 30ă    J4 = J0 + 40ă    FOR K = 0 TO 1ă      K1 = K * 5ă      FOR L = 0 TO 7ă        L1 = L * 5ă        IF INT(RND * 4) > 0 THENă          IF INT(RND * 2) = 0 THEN M = 8 ELSE M = 15ă          LINE (I0 + K1 + 2, J0 + L1 + 2)-(I0 + K1 + 2, J0 + L1 + 4), Mă          LINE (I0 + K1 + 3, J0 + L1 + 3)-(I0 + K1 + 3, J0 + L1 + 5), Mă          LINE (I1 + K1 + 2, J0 + L1 + 3)-(I1 + K1 + 2, J0 + L1 + 5), Mă          LINE (I1 + K1 + 3, J0 + L1 + 2)-(I1 + K1 + 3, J0 + L1 + 4), Mă          LINE (I2 + K1 + 2, J0 + L1 + 2)-(I2 + K1 + 2, J0 + L1 + 4), Mă          LINE (I2 + K1 + 3, J0 + L1 + 3)-(I2 + K1 + 3, J0 + L1 + 5), Mă          LINE (I3 + K1 + 2, J0 + L1 + 3)-(I3 + K1 + 2, J0 + L1 + 5), Mă          LINE (I3 + K1 + 3, J0 + L1 + 2)-(I3 + K1 + 3, J0 + L1 + 4), Mă        END IFă      NEXT Lă    NEXT Kă    LINE (I0, J1)-(I1, J0), 7ă    LINE (I1, J0)-(I2, J1), 7ă    LINE (I2, J1)-(I1, J2), 7ă    LINE (I1, J2)-(I0, J1), 7ă    PAINT (I1, J1), 0, 7ă    LINE (I1, J1 - 3)-(I1, J1), 8ă    PSET (I1, J1 - 4), 4ă    LINE (I2, J3)-(I3, J2), 7ă    LINE (I3, J2)-(I4, J3), 7ă    LINE (I4, J3)-(I3, J4), 7ă    LINE (I3, J4)-(I2, J3), 7ă    PAINT (I3, J3), 0, 7ă    LINE (I3, J3 - 3)-(I3, J3), 8ă    PSET (I3, J3 - 4), 4ă  NEXT JăNEXT Iă'** Let's put a red line around the entire graphic, so we cană'** see where the border is when we scroll.ăLINE (0, 0)-(319, 199), 4, Bă'** Whew!  Now let's put it into memory.ăFOR X = 0 TO 319ă  FOR Y = 0 TO 199ă    BigGraphic(X, Y) = CHR$(POINT(X, Y))ă  NEXT YăNEXT Xă'** Clear the screen and perform inital screen setup.ăCLSă'** Print some instructions.ăCenterColoredText "Single-Pixel Scrolling Demo", 1ăCenterColoredText "Use Numeric Keypad To Move", 3ăCenterColoredText "Press <Esc> To Exit", 23ă'** Let's start at the center: 159, 99.ăPlayerX = 159ăPlayerY = 99ă'** We'll use a 160 x 100 "viewport" centered on the screen,ă'** which means 80, 50 to 239, 149.ă'** How about a nifty border for our "viewport"?ăLINE (70, 40)-(249, 159), 3, BFăFOR I = 70 TO 249 STEP 4ă  LINE (I, 40)-(319 - I, 159), 11ăNEXT IăFOR I = 40 TO 159 STEP 4ă  LINE (70, I)-(249, 199 - I), 11ăNEXT IăLINE (70, 40)-(249, 159), 15, BăLINE (79, 49)-(240, 150), 15, Bă'** Let's draw the screen for the first time.ăDrawInitScreenă'** Let's save the background and then draw our sprite for the first time.ă'** The values 150, 90 will always be used for our sprite, so thată'** the center of the sprite will be in the center of the screenă'** (which also happens to be the center of our "viewport").ăGET (150, 90)-(169, 109), SaveBufferăPUT (150, 90), SpriteMask, ANDăPUT (150, 90), Sprite, ORă'** PALETTE statement restores the palette, everything becomes visible.ăPALETTEă'** Now for our main control loop.  We'll wait for a keypress, andă'** then scroll in the appropriate direction.  If the key pressed isă'** a diagonal key, two scrolls are actually performed, one for eachă'** of the two directions the diagonal leads in.ăDOă  A$ = GetKey$ă  SELECT CASE A$ă    '** Home or 7.ă    CASE CHR$(0) + "G", "7"ă      ScrollScreen 0ă      ScrollScreen 2ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (151, 91), SaveBuffer, PSETă    '** Up Arrow or 8.ă    CASE CHR$(0) + "H", "8"ă      ScrollScreen 0ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (150, 91), SaveBuffer, PSETă    '** PgUp or 9.ă    CASE CHR$(0) + "I", "9"ă      ScrollScreen 0ă      ScrollScreen 3ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (149, 91), SaveBuffer, PSETă    '** Left Arrow or 4.ă    CASE CHR$(0) + "K", "4"ă      ScrollScreen 2ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (151, 90), SaveBuffer, PSETă    '** Right Arrow or 6.ă    CASE CHR$(0) + "M", "6"ă      ScrollScreen 3ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (149, 90), SaveBuffer, PSETă    '** End or 1.ă    CASE CHR$(0) + "O", "1"ă      ScrollScreen 1ă      ScrollScreen 2ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (151, 89), SaveBuffer, PSETă    '** Down Arrow or 2.ă    CASE CHR$(0) + "P", "2"ă      ScrollScreen 1ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (150, 89), SaveBuffer, PSETă    '** PgDn or 3.ă    CASE CHR$(0) + "Q", "3"ă      ScrollScreen 1ă      ScrollScreen 3ă      '** Let's put the saved background back in place to eraseă      '** the scrolled sprite.ă      PUT (149, 89), SaveBuffer, PSETă    '** Any other key.ă    CASE ELSEă      '** Put the background back, or we end up withă      '** LifeSavers (TM) all over the place.ă      PUT (150, 90), SaveBuffer, PSETă  END SELECTă  '** Save the background again.ă  GET (150, 90)-(169, 109), SaveBufferă  '** PUT our sprite back on the screen.ă  PUT (150, 90), SpriteMask, ANDă  PUT (150, 90), Sprite, ORă  '** The next four lines clear the keyboard buffer.ă  DEF SEG = &H40         'switch to BIOS data segmentă  POKE &H1A, PEEK(&H1C)  '\ make KBbuffer head pointeră  POKE &H1B, PEEK(&H1D)  '/ equal KBbuffer tail pointeră  DEF SEG                'back to default data segmentă'** Pressing ESC will exit program.ăLOOP UNTIL A$ = CHR$(27)ăSCREEN 0, 0, 0ăWIDTH 80ăENDăăSUB CenterColoredText (Text$, Row%)ăă'** I is starting point of centered text.ăI = 20 - (LEN(Text$) \ 2)ăFOR J = 1 TO LEN(Text$)ă  '** K is the color counter.ă  COLOR K + 1ă  LOCATE Row%, I + Jă  PRINT MID$(Text$, J, 1);ă  K = K + 1ă  IF K = 15 THEN K = 0ăNEXT JăăEND SUBăăSUB DrawInitScreenăă'** We need to use BigGraphic, PlayerX, and PlayerY from the main module.ăSHARED BigGraphic() AS STRING * 1, PlayerX, PlayerYă'** Work through the entire "viewport".ăFOR PlotX = 0 TO 159ă  ViewX = PlayerX - 79 + PlotXă  '** Correct the value if it wraps-around in the array.ă  IF ViewX < 0 THEN ViewX = ViewX + 320ă  IF ViewX > 319 THEN ViewX = ViewX - 320ă  FOR PlotY = 0 TO 99ă    '** Find current Y point in the "viewport" in relation the player.ă    ViewY = PlayerY - 49 + PlotYă    '** Correct the value if it wraps-around in the array.ă    IF ViewY < 0 THEN ViewY = ViewY + 200ă    IF ViewY > 199 THEN ViewY = ViewY - 200ă    '** Find what's in the pixel at ViewX, ViewY in our array.ă    Pixel = ASC(BigGraphic(ViewX, ViewY))ă    '** PSET the point in the "viewport" (starting at 80, 50).ă    PSET (PlotX + 80, PlotY + 50), Pixelă  NEXT PlotYăNEXT PlotXăăEND SUBăăFUNCTION GetKey$ăă'** Wait until a key is pressed, then return it in GetKey$.ăDOă  A$ = INKEY$ăLOOP WHILE A$ = ""ăGetKey$ = A$ăăEND FUNCTIONăăSUB KillPaletteăă'** DIMing this array sets all elements to 0.ăDIM Junk&(255)ă'** PALETTE USING the null array changes all colors to 0 (black).ăPALETTE USING Junk&ăăEND SUBăăSUB ScrollScreen (Direction%)ăă'** We need to use BigGraphic, PlayerX, and PlayerYă'** from the main module.ăSHARED BigGraphic() AS STRING * 1, PlayerX, PlayerYă'** We need an array to capture all but one line of our "viewport",ă'** so that we can scroll it on screen.ăDIM ViewportBuffer(7952)ă'** Which way to scroll?ăSELECT CASE Direction%ă  CASE 0  '** Up, screen scrolls down.ă    '** Move player position.ă    PlayerY = PlayerY - 1ă    '** Wrap-around?ă    IF PlayerY < 0 THEN PlayerY = PlayerY + 200ă    '** Grab all but the bottom line of the viewport.ă    GET (80, 50)-(239, 148), ViewportBufferă    '** Scroll it down one pixel.ă    PUT (80, 51), ViewportBuffer, PSETă    '** We need a new line of pixels at the top, so we'll check oură    '** array to see what has just scrolled onto the screen.ă    '** Find current Y point in the "viewport" in relation to player.ă    ViewY = PlayerY - 49ă    '** Correct the value if it wraps-around in the array.ă    IF ViewY < 0 THEN ViewY = ViewY + 200ă    FOR PlotX = 0 TO 159ă      '** Find current X point in the "viewport" in relation to player.ă      ViewX = PlayerX - 79 + PlotXă      '** Correct the value if it wraps-around in the array.ă      IF ViewX < 0 THEN ViewX = ViewX + 320ă      IF ViewX > 319 THEN ViewX = ViewX - 320ă      '** Find what's in the pixel at ViewX, ViewY in our array.ă      Pixel = ASC(BigGraphic(ViewX, ViewY))ă      '** PSET the point in the "viewport" (starting at 80, 50).ă      PSET (PlotX + 80, 50), Pixelă    NEXT PlotXă  CASE 1  '** Down, screen scrolls up.ă    '** Move player position.ă    PlayerY = PlayerY + 1ă    '** Wrap-around?ă    IF PlayerY > 199 THEN PlayerY = PlayerY - 200ă    '** Grab all but the top line of the viewport.ă    GET (80, 51)-(239, 149), ViewportBufferă    '** Scroll it up one pixel.ă    PUT (80, 50), ViewportBuffer, PSETă    '** We need a new line of pixels at the bottom, so we'll check oură    '** array to see what has just scrolled onto the screen.ă    '** Find current Y point in the "viewport" in relation to player.ă    ViewY = PlayerY + 50ă    '** Correct the value if it wraps-around in the array.ă    IF ViewY > 199 THEN ViewY = ViewY - 200ă    FOR PlotX = 0 TO 159ă      '** Find current X point in the "viewport" in relation to player.ă      ViewX = PlayerX - 79 + PlotXă      '** Correct the value if it wraps-around in the array.ă      IF ViewX < 0 THEN ViewX = ViewX + 320ă      IF ViewX > 319 THEN ViewX = ViewX - 320ă      '** Find what's in the pixel at ViewX, ViewY in our array.ă      Pixel = ASC(BigGraphic(ViewX, ViewY))ă      '** PSET the point in the "viewport" (starting at 80, 50).ă      PSET (PlotX + 80, 149), Pixelă    NEXT PlotXă  CASE 2  '** Left, screen scrolls right.ă    '** Move player position.ă    PlayerX = PlayerX - 1ă    '** Wrap-around?ă    IF PlayerX < 0 THEN PlayerX = PlayerX + 320ă    '** Grab all but the right line of the viewport.ă    GET (80, 50)-(238, 149), ViewportBufferă    '** Scroll it right one pixel.ă    PUT (81, 50), ViewportBuffer, PSETă    '** We need a new line of pixels at the left, so we'll check oură    '** array to see what has just scrolled onto the screen.ă    '** Find current X point in the "viewport" in relation to player.ă    ViewX = PlayerX - 79ă    '** Correct the value if it wraps-around in the array.ă    IF ViewX < 0 THEN ViewX = ViewX + 320ă    FOR PlotY = 0 TO 99ă      '** Find current Y point in the "viewport" in relation to player.ă      ViewY = PlayerY - 49 + PlotYă      '** Correct the value if it wraps-around in the array.ă      IF ViewY < 0 THEN ViewY = ViewY + 200ă      IF ViewY > 199 THEN ViewY = ViewY - 200ă      '** Find what's in the pixel at ViewX, ViewY in our array.ă      Pixel = ASC(BigGraphic(ViewX, ViewY))ă      '** PSET the point in the "viewport" (starting at 80, 50).ă      PSET (80, PlotY + 50), Pixelă    NEXT PlotYă  CASE 3  '** Right, screen scrolls left.ă    '** Move player position.ă    PlayerX = PlayerX + 1ă    '** Wrap-around?ă    IF PlayerX > 319 THEN PlayerX = PlayerX - 320ă    '** Grab all but the left line of the viewport.ă    GET (81, 50)-(239, 149), ViewportBufferă    '** Scroll it left one pixel.ă    PUT (80, 50), ViewportBuffer, PSETă    '** We need a new line of pixels at the right, so we'll check oură    '** array to see what has just scrolled onto the screen.ă    '** Find current X point in the "viewport" in relation to player.ă    ViewX = PlayerX + 80ă    '** Correct the value if it wraps-around in the array.ă    IF ViewX > 319 THEN ViewX = ViewX - 320ă    FOR PlotY = 0 TO 99ă      '** Find current Y point in the "viewport" in relation to player.ă      ViewY = PlayerY - 49 + PlotYă      '** Correct the value if it wraps-around in the array.ă      IF ViewY < 0 THEN ViewY = ViewY + 200ă      IF ViewY > 199 THEN ViewY = ViewY - 200ă      '** Find what's in the pixel at ViewX, ViewY in our array.ă      Pixel = ASC(BigGraphic(ViewX, ViewY))ă      '** PSET the point in the "viewport" (starting at 80, 50).ă      PSET (239, PlotY + 50), Pixelă    NEXT PlotYăEND SELECTăăEND SUBăThe ABC Programmer             ROTATING TRIANGLES             Convert from Pascal Code       04-10-97 (19:22)       QB, QBasic, PDS        210  6086     FRAC3D.BAS  ' Fractal 3D - Rotating Trianglesă'ă'   Programmed by Ryan Jones (Dios@Rworld.Com)ă' Converted to BASIC by William Yu (04-10-97)ăăDECLARE SUB Rotate (X!, Y!, ang!)ăDECLARE SUB RotateTris (ang!)ăDECLARE SUB RotateTrisb (ang!)ăDECLARE SUB RotateTrisc (ang!)ăDECLARE SUB ClipLine (X1%, Y1%, X2%, Y2%, C%)ăDECLARE SUB AddTris (n%)ăDECLARE SUB DrawTris ()ăDEFINT A-ZăăCONST ZInc = 25ăCONST ZOfs = 256ăCONST ZScale = 256ăCONST Sc = .7ăCONST Pi = 3.141593ăăTYPE Triangleă   X1 AS SINGLEă   Y1 AS SINGLEă   Z1 AS SINGLEă   X2 AS SINGLEă   Y2 AS SINGLEă   Z2 AS SINGLEă   X3 AS SINGLEă   Y3 AS SINGLEă   Z3 AS SINGLEăEND TYPEăăDIM SHARED Tris(0 TO 100) AS TriangleăDIM SHARED Trin, l, n, hnăăSCREEN 7, 0, 0, 0ăă  Tris(0).X1 = 0ă  Tris(0).Y1 = 86ă  Tris(0).Z1 = 0ă  Tris(0).X2 = 100ă  Tris(0).Y2 = -86ă  Tris(0).Z2 = 0ă  Tris(0).X3 = -100ă  Tris(0).Y3 = -86ă  Tris(0).Z3 = 0ă  Tris(0).X1 = Tris(0).X1 * Scă  Tris(0).Y1 = Tris(0).Y1 * Scă  Tris(0).Z1 = Tris(0).Z1 * Scă  Tris(0).X2 = Tris(0).X2 * Scă  Tris(0).Y2 = Tris(0).Y2 * Scă  Tris(0).Z2 = Tris(0).Z2 * Scă  Tris(0).X3 = Tris(0).X3 * Scă  Tris(0).Y3 = Tris(0).Y3 * Scă  Tris(0).Z3 = Tris(0).Z3 * Scăă   Trin = 1ă   l = 3ă   DOă        n = hnă        hn = Trină        DOă             CALL AddTris(n)ă             n = n + 1ă        LOOP UNTIL n = hnă        l = l - 1ă   LOOP UNTIL l = 0ăă   DOă        n = 0ă        DOă             DrawTrisă             CALL RotateTris(Pi / 72)ă             n = n + 1ă        LOOP UNTIL INKEY$ <> "" OR (n = 144)ă        n = 0ă        DOă             DrawTrisă             CALL RotateTrisb(Pi / 72)ă             n = n + 1ă        LOOP UNTIL INKEY$ <> "" OR (n = 144)ă        n = 0ă        DOă             DrawTrisă             CALL RotateTrisc(Pi / 72)ă             n = n + 1ă        LOOP UNTIL INKEY$ <> "" OR (n = 144)ă   LOOP UNTIL INKEY$ <> ""ă  ăENDăăSUB AddTris (n)ă  DIM OX1 AS SINGLEă  DIM OY1 AS SINGLEă  DIM OZ1 AS SINGLEă  DIM OX2 AS SINGLEă  DIM OY2 AS SINGLEă  DIM OZ2 AS SINGLEă  DIM OX3 AS SINGLEă  DIM OY3 AS SINGLEă  DIM OZ3 AS SINGLEăă                 OX1 = Tris(n).X1ă                 OY1 = Tris(n).Y1ă                 OZ1 = Tris(n).Z1ă                 OX2 = Tris(n).X2ă                 OY2 = Tris(n).Y2ă                 OZ2 = Tris(n).Z2ă                 OX3 = Tris(n).X3ă                 OY3 = Tris(n).Y3ă                 OZ3 = Tris(n).Z3ă            Tris(Trin).X1 = OX1ă            Tris(Trin).Y1 = OY1ă            Tris(Trin).Z1 = OZ1 + ZIncă            Tris(Trin).X2 = OX1 * 2 / 3 + OX2 / 3ă            Tris(Trin).Y2 = OY1 * 2 / 3 + OY2 / 3ă            Tris(Trin).Z2 = OZ2 + ZIncă            Tris(Trin).X3 = OX1 * 2 / 3 + OX3 / 3ă            Tris(Trin).Y3 = OY1 * 2 / 3 + OY3 / 3ă            Tris(Trin).Z3 = OZ3 + ZIncă                 Tris(Trin + 1).X1 = OX2 * 2 / 3 + OX1 / 3ă                 Tris(Trin + 1).Y1 = OY2 * 2 / 3 + OY1 / 3ă                 Tris(Trin + 1).Z1 = OZ1 + ZIncă                 Tris(Trin + 1).X2 = OX2ă                 Tris(Trin + 1).Y2 = OY2ă                 Tris(Trin + 1).Z2 = OZ2 + ZIncă                 Tris(Trin + 1).X3 = OX2 * 2 / 3 + OX3 / 3ă                 Tris(Trin + 1).Y3 = OY2 * 2 / 3 + OY3 / 3ă                 Tris(Trin + 1).Z3 = OZ3 + ZIncă                 Tris(Trin + 2).X1 = OX3 * 2 / 3 + OX1 / 3ă                 Tris(Trin + 2).Y1 = OY3 * 2 / 3 + OY1 / 3ă                 Tris(Trin + 2).Z1 = OZ1 + ZIncă                 Tris(Trin + 2).X2 = OX3 * 2 / 3 + OX2 / 3ă                 Tris(Trin + 2).Y2 = OY3 * 2 / 3 + OY2 / 3ă                 Tris(Trin + 2).Z2 = OZ2 + ZIncă                 Tris(Trin + 2).X3 = OX3ă                 Tris(Trin + 2).Y3 = OY3ă                 Tris(Trin + 2).Z3 = OZ3 + ZIncă      Trin = Trin + 3ăEND SUBăăSUB ClipLine (X1, Y1, X2, Y2, C)ă  IF (X1 > 0) AND (X1 < 320) AND (Y1 > 0) AND (Y1 < 200) AND (X2 > 0) AND (X2 < 320) AND (Y2 > 0) AND (Y2 < 200) THENă    LINE (X1, Y1)-(X2, Y2), Că  END IFăEND SUBăăSUB DrawTrisă      n = 0ă      ' Uncomment the two lines below for flicker free rotationă      'PCOPY 0, 1ă      'SCREEN 7, 0, 0, 1ă      LINE (0, 0)-(319, 199), 0, BFă      DOă         SX1 = INT((ZScale * Tris(n).X1) / (Tris(n).Z1 - ZOfs))ă         SY1 = INT((ZScale * Tris(n).Y1) / (Tris(n).Z1 - ZOfs))ă         SX2 = INT((ZScale * Tris(n).X2) / (Tris(n).Z2 - ZOfs))ă         SY2 = INT((ZScale * Tris(n).Y2) / (Tris(n).Z2 - ZOfs))ă         SX3 = INT((ZScale * Tris(n).X3) / (Tris(n).Z3 - ZOfs))ă         SY3 = INT((ZScale * Tris(n).Y3) / (Tris(n).Z3 - ZOfs))ă         'CALL ClipLine(160 + SX1, 100 + SY1, 160 + SX2, 100 + SY2, 8)ă         'CALL ClipLine(160 + SX2, 100 + SY2, 160 + SX3, 100 + SY3, 15)ă         'CALL ClipLine(160 + SX3, 100 + SY3, 160 + SX1, 100 + SY1, 7)ă         LINE (160 + SX1, 100 + SY1)-(160 + SX2, 100 + SY2), 8ă         LINE (160 + SX2, 100 + SY2)-(160 + SX3, 100 + SY3), 15ă         LINE (160 + SX3, 100 + SY3)-(160 + SX1, 100 + SY1), 7ă         n = n + 1ă      LOOP UNTIL n = TrinăEND SUBăăSUB Rotate (X!, Y!, ang!)ă  DIM XX AS SINGLEă  DIM YY AS SINGLEăă  XX = X! * COS(ang!) + Y! * SIN(ang!)ă  YY = Y! * COS(ang!) - X! * SIN(ang!)ă  X! = XXă  Y! = YYăEND SUBăăSUB RotateTris (ang!)ă      n = 0ă      DOă              CALL Rotate(Tris(n).X1, Tris(n).Z1, ang!)ă              CALL Rotate(Tris(n).X2, Tris(n).Z2, ang!)ă              CALL Rotate(Tris(n).X3, Tris(n).Z3, ang!)ă              n = n + 1ă      LOOP UNTIL n = TrinăEND SUBăăSUB RotateTrisb (ang!)ă      n = 0ă      DOă              CALL Rotate(Tris(n).X1, Tris(n).Y1, ang!)ă              CALL Rotate(Tris(n).X2, Tris(n).Y2, ang!)ă              CALL Rotate(Tris(n).X3, Tris(n).Y3, ang!)ă              n = n + 1ă      LOOP UNTIL n = TrinăEND SUBăăSUB RotateTrisc (ang!)ă      n = 0ă      DOă              CALL Rotate(Tris(n).Y1, Tris(n).Z1, ang!)ă              CALL Rotate(Tris(n).Y2, Tris(n).Z2, ang!)ă              CALL Rotate(Tris(n).Y3, Tris(n).Z3, ang!)ă              n = n + 1ă      LOOP UNTIL n = TrinăEND SUBăăNick Cangiani                  IMAGE MAGNIFICATION            gcnc@worldnet.att.net          04-18-97 (09:45)       QB, QBasic, PDS        209  5925     MAGNIFY.BAS 'This program uses simple scaling algorithms to create a "magnifying glass"ă'effect.  Two windows scroll randomly over a 320x200x256 PCX file.  One usesă'a factor of 2, the other a factor of 4.  This program could be a LOT moreă'efficient, the flicker could be reduced, etc, but I wrote it while taking aă'break from studying.ă'ă'ă'-Nick Cangianiă' gcnc@worldnet.att.netă'ă'ă'$DYNAMICăCONST FALSE = 0, TRUE = 1ăCONST pi = 3.141, twopi = 6.283ăDECLARE SUB FillWindow (X%, Y%)ăDECLARE SUB FillWindow1 (X%, Y%)ăDECLARE SUB PCXLoad (PCXFile$, PaletteLoad%)ăăDIM SHARED c%(99)   'this will hold the bottom area being viewedăDIM SHARED A%(399)   'this will hold the area being viewed for the topăq = 4 + INT((40 - 1 + 1) * (8 + 7) / 8) * 1 * (40 - 1 + 1)ăDIM B%(q)     'this will be used with GET and PUT to store old screen dataăDIM d%(q)ăăCLSăPRINT "Magnifying Glass Demo"ăPRINT "  by: Nick Cangiani"ăPRINT "      gcnc@worldnet.att.net"ăPRINTăPRINT "Enter the name of a 320x200 256 color PCX file."ăINPUT ">", PCXFile$ăPRINT "Do you want to load the palette? (y/n)"ăINPUT ">", p$ăIF UCASE$(p$) = "Y" THEN pa% = 1 ELSE pa% = 0ăSCREEN 13ăPCXLoad PCXFile$, pa%ăăWinX% = 1: WinY% = 1             'initial values for windowăt% = 0                           'index for A%()ăDir% = 6: Dir1% = 2              'initial directionăWinX1% = 1: WinY1% = 104ăGET (WinX%, WinY%)-(WinX% + 39, WinY% + 39), B%(0)ăFOR Y% = WinY% + 11 TO WinY% + 30  'cover whole 20x20 sectionă  FOR X% = WinX% + 11 TO WinX% + 30ă    A%(t%) = POINT(X%, Y%)         'store entire window in arrayă    t% = t% + 1ă  NEXT X%ăNEXT Y%ăt% = 0ăGET (WinX1%, WinY1%)-(WinX% + 39, WinY% + 39), d%(0)ăFOR Y% = WinY1% + 16 TO WinY1% + 25  'cover whole 20x20 sectionă  FOR X% = WinX1% + 16 TO WinX1% + 25ă    c%(t%) = POINT(X%, Y%)         'store entire window in arrayă    t% = t% + 1ă  NEXT X%ăNEXT Y%ăăăFillWindow WinX%, WinY%    'fill view windowăFillWindow1 WinX1%, WinY1%ăă'main loopăDOăăcnt% = cnt% + 1                       'increase counterăcnt1% = cnt1% + 1ăd! = TIMER                            'Delay - I am working with a 486/66ăDO                                    '     adjust to fit your systemăLOOP UNTIL TIMER > d! + .01ăLastX% = WinX%: LastY% = WinY%        'store old area coordinatesăLastX1% = WinX1%: LastY1% = WinY1%ăIF cnt% = 33 THEN                     'change directionăcnt% = 0ă11 RANDOMIZE TIMERă  Dir% = INT((9 - 1 + 1) * RND + 1)ăEND IFăăIF cnt1% = 45 THENăcnt1% = 0ă12 RANDOMIZE TIMERă  Dir1% = INT((9 - 1 + 1) * RND + 1)ăEND IFăăIF Dir% = 7 OR Dir% = 8 OR Dir% = 9 THEN    'All the collision detection crapă  IF WinY% - 1 < 1 THEN GOTO 11ă  WinY% = WinY% - 1ăEND IFăIF Dir% = 1 OR Dir% = 2 OR Dir% = 3 THENă  IF WinY% + 1 > 60 THEN GOTO 11  '60ă  WinY% = WinY% + 1ăEND IFăIF Dir% = 7 OR Dir% = 4 OR Dir% = 1 THENă  IF WinX% - 1 < 1 THEN GOTO 11ă  WinX% = WinX% - 1ăEND IFăIF Dir% = 9 OR Dir% = 6 OR Dir% = 1 THENă  IF WinX% + 1 > 280 THEN GOTO 11ă  WinX% = WinX% + 1ăEND IFăăIF Dir1% = 7 OR Dir1% = 8 OR Dir1% = 9 THENă  IF WinY1% - 1 < 101 THEN GOTO 12    '1ă  WinY1% = WinY1% - 1ăEND IFăIF Dir1% = 1 OR Dir1% = 2 OR Dir1% = 3 THENă  IF WinY1% + 1 > 160 THEN GOTO 12ă  WinY1% = WinY1% + 1ăEND IFăIF Dir1% = 7 OR Dir1% = 4 OR Dir1% = 1 THENă  IF WinX1% - 1 < 1 THEN GOTO 12ă  WinX1% = WinX1% - 1ăEND IFăIF Dir1% = 9 OR Dir1% = 6 OR Dir1% = 1 THENă  IF WinX1% + 1 > 280 THEN GOTO 12ă  WinX1% = WinX1% + 1ăEND IFăăPUT (LastX%, LastY%), B%(0), PSET                  'put old areaăGET (WinX%, WinY%)-(WinX% + 39, WinY% + 39), B%(0) 'get new areăt% = 0                                             'index at 0ăFOR Y% = WinY% + 11 TO WinY% + 30  'cover whole 20x20 sectionă  FOR X% = WinX% + 11 TO WinX% + 30ă    A%(t%) = POINT(X%, Y%)         'store entire window in arrayă    t% = t% + 1ă  NEXT X%ăNEXT Y%ăăFillWindow WinX%, WinY%    'fill view windowăăPUT (LastX1%, LastY1%), d%(0), PSET            '...and the same for #2ăGET (WinX1%, WinY1%)-(WinX1% + 39, WinY1% + 39), d%(0)ăt% = 0ăFOR Y% = WinY1% + 16 TO WinY1% + 25  'cover whole 20x20 sectionă  FOR X% = WinX1% + 16 TO WinX1% + 25ă    c%(t%) = POINT(X%, Y%)         'store entire window in arrayă    t% = t% + 1ă  NEXT X%ăNEXT Y%ăFillWindow1 WinX1%, WinY1%ăăLOOPăă ăăREM $STATICăSUB FillWindow (X%, Y%)ăXa% = X%: Ya% = Y%ăFOR i% = 0 TO 399ă  LINE (Xa%, Ya%)-(Xa% + 1, Ya% + 1), A%(i%), BFă  Xa% = Xa% + 2ă  IF Xa% = 40 + X% THENă    Xa% = X%ă    Ya% = Ya% + 2ă  END IFăNEXT i%ăăEND SUBăăSUB FillWindow1 (X%, Y%)ăXa% = X%: Ya% = Y%ăFOR i% = 0 TO 99ă  LINE (Xa%, Ya%)-(Xa% + 3, Ya% + 3), c%(i%), BFă  Xa% = Xa% + 4ă  IF Xa% = 40 + X% THENă    Xa% = X%ă    Ya% = Ya% + 4ă  END IFăNEXT i%ăăEND SUBăăSUB PCXLoad (PCXFile$, PaletteLoad%)ăDIM buf(32002) AS INTEGER: buf(0) = 2560: buf(1) = 200ăBSEG& = VARSEG(buf(2)): BOFS& = VARPTR(buf(2))ăOPEN PCXFile$ FOR INPUT AS #1: CLOSE 1: OPEN PCXFile$ FOR BINARY AS #1ăfin& = LOF(1) - 767: SEEK #1, fin&: pal$ = INPUT$(768, 1)ăp% = 1: fin& = fin& - 1ăIF PaletteLoad% = TRUE THENăFOR t& = 0 TO 255ă   OUT &H3C8, t&ă   FOR hue% = 1 TO 3ă      OUT &H3C9, ASC(MID$(pal$, p%)) \ 4: p% = p% + 1ă   NEXTăNEXTăEND IFăSEEK #1, 129: t& = BOFS&: DEF SEG = BSEG&: CLS : spin% = 1ăRLE% = 0ăDOă   p$ = INPUT$(256, 1): fpos& = SEEK(1): l% = LEN(p$)ă   IF fpos& > fin& THENă      l% = l% - (fpos& - fin&): p$ = LEFT$(p$, l%): view$ = "done"ă   END IFă   FOR p% = 1 TO l%ă      dat% = ASC(MID$(p$, p%))ă      IF RLE% = 0 THENă         IF (dat% AND 192) = 192 THENă            RLE% = dat% AND 63ă         ELSEă            POKE t&, dat%: t& = t& + 1ă         END IFă      ELSEă         FOR RLE% = RLE% TO 1 STEP -1ă            POKE t&, dat%: t& = t& + 1ă         NEXTă      END IFă   NEXTăLOOP UNTIL view$ = "done"ăbt2! = TIMER: CLOSE 1: PUT (0, 0), buf, PSETăEND SUBăMatthew Pulley                 RESIZING FONTS                 FidoNet QUIK_BAS Echo          04-18-97 (19:24)       QB, QBasic, PDS        91   2522     RESIZE.BAS  '//** ROTATE.BASă'//** Donated To The Public Domaină'//** Author - M@ Pulleyă'//** Use At Your Own Risk!ăăSCREEN 13ăDIM Word1(1056), Word2(2048), Word3(3040), Word4(4080)ăDIM BackWord1(1056), BackWord2(2048), BackWord3(3040), BackWord4(4080)ăDIM Block1(144)ăăLINE (0, 0)-(9, 16), 15, BFăGET (0, 0)-(9, 16), Block1ăCLSăăFOR GetPicture = 1 TO 4ăă'//** Scales different sizes of the word, "BoneHead", for GETăăLOCATE 1, 1: PRINT "BoneHead"ă FOR X = 0 TO 63ă  FOR Y = 0 TO 7ă   IF POINT(X, Y) <> 0 THENă    ă    LINE ((X + 10) * GetPicture, (Y + 6) * 2)-((X + 11) * GetPicture, (Y + 5) * 2), POINT(X, Y), BFă    ă    LINE ((-X + 72) * GetPicture, (Y + 14) * 2)-((-X + 73) * GetPicture, (Y + 13) * 2), POINT(X, Y), BFă   ă   END IFă  NEXTă NEXTăă IF GetPicture = 1 THENă  GET (8, 9)-(74, 25), Word1ă  GET (8, 26)-(74, 42), BackWord1     '66 LENGTHă ELSEIF GetPicture = 2 THENă  GET (18, 9)-(146, 25), Word2ă  GET (18, 26)-(146, 42), BackWord2   '128 LENGTHă ELSEIF GetPicture = 3 THENă  GET (30, 9)-(220, 25), Word3ă  GET (30, 26)-(220, 42), BackWord3   '190 LENGTHă ELSEIF GetPicture = 4 THENă  GET (38, 9)-(293, 25), Word4ă  GET (38, 26)-(293, 42), BackWord4   '255 LENGTHă END IFăă CLSăNEXTăăPictureCount = 0ăăDOăă''//** Spin "BoneHead" from the frontăă PictureCount = PictureCount + 1ă IF PictureCount = 1 THEN PUT (158, 92), Block1ă IF PictureCount = 2 THEN PUT (127, 92), Word1ă IF PictureCount = 3 THEN PUT (96, 92), Word2ă IF PictureCount = 4 THEN PUT (65, 92), Word3ă IF PictureCount = 5 THEN PUT (33, 92), Word4ă IF PictureCount = 6 THEN PUT (65, 92), Word3ă IF PictureCount = 7 THEN PUT (96, 92), Word2ă IF PictureCount = 8 THEN PUT (127, 92), Word1ă IF PictureCount = 9 THEN PUT (158, 92), Block1ăă'//** Spin "BoneHead" from behindăă IF PictureCount = 10 THEN PUT (127, 92), BackWord1ă IF PictureCount = 11 THEN PUT (96, 92), BackWord2ă IF PictureCount = 12 THEN PUT (65, 92), BackWord3ă IF PictureCount = 13 THEN PUT (33, 92), BackWord4ă IF PictureCount = 14 THEN PUT (65, 92), BackWord3ă IF PictureCount = 15 THEN PUT (96, 92), BackWord2ă IF PictureCount = 16 THENăă PUT (127, 92), BackWord1ă PictureCount = 0ăăEND IFăăFOR Delay = 1 TO 1000: NEXTăă'** Help Needed Here! How can I get RID of this statement, which erases theă'** "BoneHead", but creates a flashing effect, and still have a smoothă'** transition between each picture switch?ă'**      ăăLINE (33, 92)-(287, 108), 0, BFăăLOOP WHILE INKEY$ <> CHR$(27)ăENDăToshihiro Horie                2D TEXTURE ZOOM/ROTATION DEMO  comp.lang.basic.misc           04-10-97 (19:58)       QB, QBasic, PDS        63   1536     2D.BAS      '2d texture zoom/rotation demoă'seriously fast now 30+ fps on 486ă'by Toshihiro Horieă'toshiman@uclink4.berkeley.eduăDEFINT A-Ză'possible modifications:ă'3) reverse rotation mappingăxh = 40: yh = 30: ch = 16ăxd = 160: yd = 100ăv = 0: w = 1ăDIM C(360): DIM S(360)ă'set up sinus tablesădeg2rad# = .01745329#ăPRINT "Calculating sinus tables..."ăFOR t = 0 TO 179ă    C(t) = COS(t * deg2rad#) * 128ă    S(t) = SIN(t * deg2rad#) * 128ăNEXTăFOR t = 180 TO 359ă    S(t) = -S(t - 180)ă    C(t) = C(360 - t)ăNEXTăăăSCREEN 7, , v, wă'plot some points in a boxă'LINE (0, 0)-(xh, yh), 15, BăDIM block(xh, yh)ăFOR t = 1 TO 100ă    x = INT(RND * xh): y = INT(RND * yh)ă    C = INT(RND * ch)ă    'PSET (x, y), Că    block(x, y) = CăNEXTăă'rotate it about its centerăz = 2: num = 1: ST = 1ăDOăA = (A + ST) MOD 360ă    k$ = INKEY$ă    IF k$ = "8 " THEN z = z + 1ă    IF k$ = "2" THEN z = z - 1ă    IF k$ = "6" THEN ST = ST + 1ă    IF k$ = "4" THEN ST = ST - 1ă    ST = ST + 1: 'FOR COOL KALIDESCOPEă    IF ST < 1 THEN ST = 1ă    IF k$ = CHR$(27) THEN ENDă    IF z > 8 THEN z = 8ă    IF z < -8 THEN z = -8ă    Ca = C(A)ă    Sa = S(A)ă    FOR x = 0 TO xhă    xo = (x - xh \ 2)ă    FOR y = 0 TO yhă        IF block(x, y) = 0 THEN GOTO skipă        yo = (y - yh \ 2)ă        xp = xo * Ca * z \ 128 - yo * Sa * z \ 128ă        yp = yo * Ca * z \ 128 + xo * Sa * z \ 128ă        PSET (xp + xd, yd - yp), block(x, y)ăskip:ă    NEXT: NEXTă    SWAP v, w: SCREEN 7, , v, w:  WAIT &H3DA, 8: CLS 2ăLOOPăAngelo Ken Pesce               CIRCULAR PLASMA + FIRE         ken@uniserv.uniplan.it         03-06-97 (15:24)       QB, PDS                197  3986     PLASMA5.BAS DECLARE SUB wrpal (slot%, r%, g%, b%)ăDECLARE SUB flam1 ()ăDECLARE SUB back ()ăDECLARE SUB initp ()ăDECLARE SUB init ()ă' ANGELO KEN PESCE 1997ă' (COLOR) PLASMA EFFECT v5  PLASMA + FIREă' Email: ken at uniserv.uniplan.ită' WWW: http://www.geocities.com/SiliconValley/Pines/9913/homepage.htmă' LOAD THIS PROGRAM USING QBX /AH OR QB /AHă'ă' QUICKBASIC IS REALLY SLOW...ă' I HAVE TO CONVERT THIS TO PASCAL OR Că' COMPILE IT USING ALTERNATE MATH OPTION OF QUICKBASIC PDS 7ă' AND USE A PENTIUM PROCESSOR...ăăă' $DYNAMICăDEFINT A-Zăă' INITIALIZE CIRCLE ARRAYăDIM SHARED aps(250, 250)ăCALL inităSCREEN 13ăăă' PALETTE INITăCALL initpăă' PATTER 1 AND PATTER 2 CENTER and INITIAL MOVEMENTăxp1 = 80 + 20: yp1 = 50 + 20ăxp2 = 80 - 20: yp2 = 50 - 20ăxm1 = 1ăym1 = -1ăxm2 = -1ăym2 = 1ăăDOă' FIRST HALF **************************************************************ăDEF SEG = &HA000ăFOR x = 1 TO 159ăax = x + 125ăx1 = ax - xp1ăx2 = ax - xp2ăpx = x * 2ăFOR y = 0 TO 50ăay = y + 125ăăy1 = ay - yp1ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x1 < 1 OR x1 > 250 OR y1 < 1 OR y1 > 250 THEN col1 = 0: GOTO ex1ăcol1 = aps(x1, y1)ăex1:ăăy2 = ay - yp2ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x2 < 1 OR x2 > 250 OR y2 < 1 OR y2 > 250 THEN col2 = 0: GOTO ex2ăcol2 = aps(x2, y2)ăex2:ăăIF col1 > 0 AND col2 > 0 THEN col = 0 ELSE col = col1 + col2ăăpy = y * 2ăPOKE (py * 320 + px), colăPOKE (py * 320 + px - 1), colăăNEXTăNEXTăă' SECOND HALF *************************************************************ăăDEF SEG = (&HA000 + &H7D0)ăăFOR x = 1 TO 159ăax = x + 125ăx1 = ax - xp1ăx2 = ax - xp2ăpx = x * 2ăFOR y = 0 TO 49ăay = y + 125ăăy1 = ay - yp1 + 50ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x1 < 1 OR x1 > 250 OR y1 < 1 OR y1 > 250 THEN col1 = 0: GOTO ex3ăcol1 = aps(x1, y1)ăex3:ăăy2 = ay - yp2 + 50ă' THOSE CHECKS ARE REMOVED TO INCREASE SPEEDă'IF x2 < 1 OR x2 > 250 OR y2 < 1 OR y2 > 250 THEN col2 = 0: GOTO ex4ăcol2 = aps(x2, y2)ăex4:ăăIF col1 > 0 AND col2 > 0 THEN col = 0 ELSE col = col1 + col2ăpy = y * 2ăăPOKE (py * 320 + px), colăPOKE (py * 320 + px - 1), colăNEXTăNEXTăăDEF SEGăGOSUB setmovăă'FireEffectăCALL flam1ăăLOOP UNTIL INKEY$ <> ""ăăENDăăsetmov:ă' LET THEM MOVE!!!ăxp1 = xp1 + xm1ăyp1 = yp1 + ym1ăxp2 = xp2 + xm2ăyp2 = yp2 + ym2ăIF xp1 > 80 + 20 THEN xm1 = -1 ELSE IF xp1 < 80 - 20 THEN xm1 = 1 ELSE GOTO 1ăIF yp1 > 50 + 20 THEN ym1 = -1 ELSE IF yp1 < 50 - 20 THEN ym1 = 1ă1ăIF xp2 > 80 + 20 THEN xm2 = -1 ELSE IF xp2 < 80 - 20 THEN xm2 = 1 ELSE GOTO 2ăIF yp2 > 50 + 20 THEN ym2 = -1 ELSE IF yp2 < 50 - 20 THEN ym2 = 1ă2ăRETURNăăREM $STATICăSUB flam1ăăDEF SEG = &HA000 + &H7D0ăFOR r = 0 TO 100ăa = INT(320 * RND)ăPOKE (99 * 320 + a), 79ăPOKE (99 * 320 + (a - 1)), 0ă'POKE (97 * 320 + a), 79ă'POKE (97 * 320 + (a - 1)), 0ăNEXTăăFOR yp = 21 TO 99 STEP 2ăFOR xp = 0 TO 319ăcol = PEEK((yp + 2) * 320 + xp)ăcol = col + PEEK(yp * 320 + xp + 1)ăIF col = 0 THEN GOTO fastăcol = col + PEEK(yp * 320 + xp)ăcol = col / 3 - RND * 2ăIF col < 16 THEN col = 16ăPOKE (yp - 2) * 320 + xp, colăfast:ăNEXTăNEXTăDEF SEGăEND SUBăăSUB inităă' I HAVE TO USE THIS "TRICK" IN ORDER TO USE INTEGERSăăSCREEN 12ăFOR i = 1 TO 180 STEP 16ăFOR i1 = 1 TO 4ăCIRCLE (125, 125), i + i1, i1 + ((180 - i) / 18)ăCIRCLE (126, 125), i + i1, i1 + ((180 - i) / 18)ăNEXTăFOR i1 = 1 TO 4ăCIRCLE (125, 125), i + i1 + 4, (5 - i1) + ((180 - i) / 18)ăCIRCLE (126, 125), i + i1 + 4, (5 - i1) + ((180 - i) / 18)ăNEXTăNEXTăăăFOR x = 1 TO 250ăFOR y = 1 TO 250ăaps(x, y) = POINT(x, y)ăNEXTăNEXTăEND SUBăăSUB initpăFOR i = 0 TO 15ăPALETTE i, 256 * (i * 2)ăNEXTăăFOR i = 16 TO (16 + 63)ăPALETTE i, 63ăNEXTăFOR i = 0 TO 63ăCALL wrpal(i / 4 + 16, i, 0, 0)ăCALL wrpal(i / 4 + 32, 63, i, 0)ăCALL wrpal(i / 4 + 64, 63, 63, i)ăNEXTăEND SUBăăSUB wrpal (slot%, r%, g%, b%)ăOUT &H3C7, slot%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăEND SUBăAngelo Ken Pesce               2D BUMPMAPPING EXAMPLE UPDATE  ken@uniserv.uniplan.it         03-04-97 (18:50)       QB, PDS                783  17853    2DBUMP.BAS  DECLARE SUB blood ()ăDECLARE SUB bobs ()ăDECLARE SUB sinfade ()ăDECLARE SUB flam2 ()ăDECLARE SUB anim ()ăDECLARE SUB bump ()ăDECLARE SUB bump1 ()ăDECLARE SUB BurnPrint (y%, x%, text$, iter%)ăDECLARE SUB circles ()ăDECLARE SUB envcalc ()ăDECLARE SUB flam ()ăDECLARE SUB flam1 ()ăDECLARE SUB InputValues ()ăDECLARE SUB palinit (n!)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB setpal (start.slot%, end.slot%)ăDECLARE SUB statef ()ăDECLARE SUB testpat2 ()ăDECLARE SUB TestPatt (n!)ăDECLARE SUB textf ()ăDECLARE SUB waitkpress ()ăDECLARE SUB writeRGB (red%, grn%, blu%, slot%)ă' $DYNAMICă' USE QBX OR QB WITH /AH /NOFRILLS OPTIONSă' ( to say the truth I don't know if Qb has this options...... )ă' You need 612k of conventional memoryăăăăăăăă' ***************************************************************************ă' *******************  History  *********************************************ă' ***************************************************************************ă'ă' Demo v1: First version. (not relased)ă'ă' Demo v2: I changed some algorithms and added a "new" (minor) routinesă'ă' ***************************************************************************ă' ***************************************************************************ă' ******************************************* P L E A S E  R E A D  T H I S *ă' ***************************************************************************ă' ***************************************************************************ă' APSOFTWARE 1997 (Palette routines aren't mine....)ă' Angelo KEN Pesceă' ken@uniserv.uniplan.ită' http://www.geocities.com/SiliconValley/Pines/9913/homepage.htmă' 2d BUMPmapping EXAMPLE + FLAME EFFECT + OTHER STUFFă' I can make better animated bump effects if I find the way to make ană' array to store the pattern instead putting it on the screen. (in fact thereă' is only one problem: the emp array fills all the avaible memory... if anyoneă' know how to get more memory to use for arrays on QuickBasic PDS7 pleaseă' email me, I need 64k more memory)ă' I also need to know a way to use the full 16m color vga paletteă' (white=256*256*256 instead of 64*64*64)ă'ă' THIS NEEDS A PENTIUM 100... (to run Interpreted in QBX PDS 7, not Compiled)ă' QUICKBASIC ISN'T A FAST LANGUAGE...ă' BUT IT'S GOOD TO MAKE "TEST" VERSIONSă' OF PROGRAMS AND ALGORITHMS...ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăăăăă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' *****************  THE MAIN CODE  *****************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăă' LIGHT POSITION (needed later in the bump subroutine)ăDIM SHARED lposx%ăDIM SHARED lposy%ăCLSăCALL InputValuesăă' CALCULATE LIGHT ENVIROMENT MAP "EMP"ăPRINT "Please wait: initializing enviroment map";ăDIM SHARED emp(255, 255): ' Enviroment map arrayă' This routine makes a tiny spheric spot light.ă' you can modify the array to alter the light (eg. you can implement some noise)ăCALL envcalcăă' SCREEN AND PALETTE INITăSCREEN 13ăCALL palinit(2)ăăDIM scrb(5625)ă' iNTRO FIREăFOR r = 1 TO 100ăFOR a = 1 TO 15ăx = INT((178 - 143 + 1) * RND + 143)ăPSET (x, 122), 190ăPSET (x, 121), 189ăPSET (x, 120), 188ăNEXTăCALL flam2ăGET (138, 0)-(183, 125), scrbăPUT (138 - 46, 25), scrb, PSETăPUT (138 + 46, 25), scrb, PSETăPUT (138 - 90, 40), scrb, PSETăPUT (138 + 90, 40), scrb, PSETăPUT (138 - 130, 50), scrb, PSETăPUT (138 + 130, 50), scrb, PSETăNEXTăCALL bumpăCALL waitkpressăCALL bobsăFOR r = 1 TO 15ăCALL sinfadeăNEXTăERASE scrbăă' iNTROăCLSăCALL BurnPrint(11, 11, "ApsoftWare 1997", 50)ăCALL BurnPrint(12, 12, "*** PRESENTS: ***", 50)ăCALL BurnPrint(13, 13, "Fire and Bump", 50)ăCALL BurnPrint(14, 14, "A QuickBasic DEMO", 50)ăCLSăăCALL palinit(1)ăCALL BurnPrint(14, 14, "2D BumpMaps ahead", 50)ăă' Static Bump EffectăCALL statefăăCLSăCALL BurnPrint(14, 14, "Don't play with fire", 50)ăă' Animated Fire EffectăCALL palinit(2)ăCALL flam1ă' Bump fire patternăCALL palinit(1)ălposx% = 160ălposy% = 200ăCALL bumpăCALL waitkpressăCALL bloodăăCALL palinit(1)ăCLSăCALL BurnPrint(14, 14, "Animated BumpMaps", 50)ăCALL palinit(2)ăăCLSă' Animated Bump EffectăDIM SHARED scr(100, 70)ălposy% = 100ăCALL testpat2ăCALL animăăCLSăCALL palinit(1)ăCALL BurnPrint(14, 14, "Text fire effect", 50)ăă' Text FireeffectăERASE scr: ' We have to gain more memoryăERASE emp: ' So we deallocate unused arraysăCALL textfăă' THE ENDăENDă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ă' ***************************************************************************ăăREM $STATICăDEFINT A-ZăSUB animăă' animated 2d bump effectăDOăFOR r = 0 TO 100 STEP 5ălposx% = răCALL bump1ăIF INKEY$ <> "" THEN EXIT DOăNEXTăFOR r = 100 TO 0 STEP -5ălposx% = răCALL bump1ăIF INKEY$ <> "" THEN EXIT DOăNEXTăLOOPăEND SUBăăDEFSNG A-ZăSUB bloodă  DEFINT A-Ză  DIM ta(100)ă  FOR i = 1 TO 30000ă    X1 = INT(RND * 270)ă    Y1 = INT(RND * 196)ă    GET (X1, Y1)-(X1 + 50, Y1 + 2), taă    PUT (X1, Y1 + 2), ta, PSETă  NEXTă  ERASE taăEND SUBăăSUB bobsănumcol = 63ăăFOR i = 1 TO 10ăCIRCLE (10, 10), i, numcol - iăCIRCLE (11, 10), i, numcol - iăNEXTăăDIM x(20 * 20)ăGET (1, 1)-(20, 20), xăămovx = 1ămovy = 2ăxpos = 1ăypos = 2ăăFOR i = 1 TO 10000ăxpos = xpos + movxăypos = ypos + movyăIF xpos = 300 THEN movx = -1ăIF xpos = 1 THEN movx = 1ăIF ypos >= 180 THEN movy = -2ăIF ypos <= 2 THEN movy = 2ăPUT (xpos, ypos), x, XORăNEXTăERASE xăăEND SUBăăDEFSNG A-ZăSUB bumpă' bump effect routineăăDEF SEG = &HA000ăFOR y% = 0 TO 100ăFOR x% = 0 TO 319ălx% = x% - lposx%ăly% = y% - lposy%ăă' *********************************************************************ănx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + x%) + 128 - lx%ăny% = PEEK((y% + 1) * 320 + x%) - PEEK(y% * 320 + x%) + 128 - ly%ă' ORIGINAL VERSION (BEFORE V2)ă'nx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + (x%-1)) + 128 - lx%ă'ny% = PEEK((y% + 1) * 320 + x%) - PEEK((y%-1) * 320 + x%) + 128 - ly%ă' *********************************************************************ăăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăă' *********************************************************************ăPOKE (y% * 320 + x%), emp(nx%, ny%)ă' ORIGINAL VERSION (BEFORE V2)ă' POKE ((y%-1) * 320 + (x%-1)), emp(nx%, ny%)ă' *********************************************************************ăăNEXTăNEXTăăDEF SEG = (&HA000 + &H7D0)ăFOR y% = 1 TO 99ăFOR x% = 0 TO 319ălx% = x% - lposx%ăly% = y% - (lposy% - 100): ' Use ly%=y%-(lposy%+100) to make a tiny 2 lightsă'                            effectăă' *********************************************************************ănx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + x%) + 128 - lx%ăny% = PEEK((y% + 1) * 320 + x%) - PEEK(y% * 320 + x%) + 128 - ly%ă' ORIGINAL VERSION (BEFORE V2)ă'nx% = PEEK(y% * 320 + (x% + 1)) - PEEK(y% * 320 + (x%-1)) + 128 - lx%ă'ny% = PEEK((y% + 1) * 320 + x%) - PEEK((y%-1) * 320 + x%) + 128 - ly%ă' *********************************************************************ăăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăă' *********************************************************************ăPOKE (y% * 320 + x%), emp(nx%, ny%)ă' ORIGINAL VERSION (BEFORE V2)ă' POKE ((y%-1) * 320 + (x%-1)), emp(nx%, ny%)ă' *********************************************************************ăăNEXTăNEXTăDEF SEGăEND SUBăăSUB bump1ă' animated bump effect routineăăDEF SEG = &HA000ăFOR y% = 0 TO 69ăFOR x% = 0 TO 99ălx% = x% - lposx%ăly% = y% - lposy%ănx% = scr((x% + 1), y%) - scr(x%, y%) + 128 - lx%ăny% = scr(x%, (y% + 1)) - scr(x%, y%) + 128 - ly%ăIF nx% < 0 OR nx% > 255 THEN nx% = 0ăIF ny% < 0 OR ny% > 255 THEN ny% = 0ăcol = emp(nx%, ny%)ăPOKE (y% * 320 + x%), colăNEXTăNEXTăDEF SEGăEND SUBăăDEFINT A-ZăSUB BurnPrint (y%, x%, text$, iter%)ă' burning text routineăă' Sin TableăDIM sn(360)ăFOR r = 0 TO 360ăsn(r) = SIN(r)ăNEXTăă' PRINT THE TEXTăCOLOR 189: LOCATE y%, x%ăPRINT text$ăă' WAIT KEYPRESSăDO: LOOP WHILE INKEY$ = ""ăă' CALCULATE TEXT POSITIONăălenght = LEN(text$)ăăxstart = (x * 8) - 8ăxend = ((x + lenght) * 8) - 8ăystart = (y * 8) - 25ăyend = (y * 8) - 8ăăFOR r = 1 TO iter%ăăFOR y = ystart TO yend + 8ăFOR x = xstart TO xendăăcol = FIX(POINT(x + sn(a), y) + POINT(x, y + 1)) / 2 - (3 * RND)ăIF col < 0 THEN col = 0ăPSET (x, y), colăa = a + 1: IF a = 360 THEN a = 0ăNEXT xăNEXT yăNEXT răEND SUBăăSUB circlesă' circle generator routine - test patternăăFOR i = 0 TO 12ăFOR x = 35 TO 0 STEP -1ăc = x + (i * i)ăd = ABS(x * x / 4 + i)ăCIRCLE (111, 200), d, căCIRCLE (110, 200), d, căCIRCLE (211, 200), d, căCIRCLE (210, 200), d, căNEXTăNEXTăEND SUBăăDEFSNG A-ZăSUB envcalcă' enviroment map array initializiation routineăăFOR y% = 0 TO 255ăFOR x% = 0 TO 255ănrmx = (x% - 128) / 128ănrmy = (y% - 128) / 128ănrmz = 1 - SQR((nrmx * nrmx) + (nrmy * nrmy))ăIF nrmz < 0 THEN nrmz = 0ăemp(x%, y%) = CINT(nrmz * 190)ăNEXTăPRINT ".";ăNEXTăEND SUBăăDEFINT A-ZăSUB flamă' fire - fade routineăăDEF SEG = &HA000ăFOR yp = 0 TO 100ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol1 = PEEK(yp * 320 + (xp + 1))ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ăcol = col / 5 - 6ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout:ăNEXTăNEXTăsg = &HA000 + &H7D0ăDEF SEG = sgăFOR yp = 1 TO 99ăFOR xp = 0 TO 319ăcol = PEEK(yp * 320 + xp)ăcol1 = PEEK(yp * 320 + (xp + 1))ă' ************** JUMP ROUTINE **************************ăIF col = col1 THEN GOTO fastout1 ELSE col = col + col1ă' ************************************************************ăcol = col + PEEK((yp - 1) * 320 + xp)ăcol = col + PEEK((yp + 1) * 320 + xp)ăcol = col + PEEK(yp * 320 + (xp - 1))ăcol = col / 5 - 6ăIF col < 0 THEN col = 0ăPOKE yp * 320 + xp, colăfastout1:ăNEXTăNEXTăDEF SEGăEND SUBăăSUB flam1ă' fire routineăsg = &HA000 + &H7D0ăDEF SEG = sgăDOăăFOR r = 0 TO 50ăa = INT(320 * RND)ăPSET (a, 198), 190ăPSET (a + 1, 198), 0ăNEXTăăFOR yp = 60 TO 99ăFOR xp = 0 TO 319ăcol = PEEK((yp + 1) * 320 + xp)ăcol1 = PEEK(yp * 320 + xp + 1)ăIF col = col1 THEN GOTO fast ELSE col = col + col1ăcol = col + PEEK(yp * 320 + xp)ăcol = col / 3 - 3ăIF col < 0 THEN col = 0ăPOKE (yp - 1) * 320 + xp, colăfast:ăNEXTăNEXTăLOOP WHILE INKEY$ = ""ăDEF SEGăEND SUBăăDEFSNG A-ZăSUB flam2ăDEFINT A-Zăsp = 3: REM FIRE Y SPEEDăăREM ROUTINE RANGE: X 138-183, Y 0-125ăăREM ROUTINE 0 FASTEST *************************************** Pixels 0 - 40ăFOR y = 0 TO 40ă    FOR x = 138 TO 183ă      col = POINT(x, y - 1)ă      IF col = 0 THEN GOTO a1ă      col = col - 1ă      PSET (x, y - sp), colăa1:ăNEXTăNEXTăăREM ROUTINE 1 FAST ****************************************** Pixels 41 - 65ăăFOR y = 41 TO 65ă    FOR x = 138 TO 183ă      col = POINT(x, y + 1)ă      col = col + POINT(x, y - 1): IF col = 0 THEN GOTO ken1ă      col = col / 2 - 1ă      IF col < 0 THEN col = 0ă      PSET (x, y - sp), colăken1:ăNEXTăNEXTăăREM ROUTINE 2 MEDIUM ******************************************* Pixels 66-80ăăFOR y = 66 TO 80ă    FOR x = 138 TO 183ă      col = POINT(x, y)ă      col = col + POINT(x, y + 1): IF col = 0 THEN GOTO ken3ă      col = col + POINT(x, y - 1)ă      col = col / 3 - 1ă      IF col < 0 THEN col = 0ă      PSET (x, y - sp), colăken3:ăNEXTăNEXTăăREM ROUTIME 3 SLOW ******************************************** Pixels 81-125ăFOR y = 81 TO 125ă   FOR x = 138 TO 183ă      col = POINT(x, y)ă       col = col + POINT(x + 1, y): IF col = 0 THEN GOTO ken6:ă       col = col + POINT(x - 1, y)ă       col = col + POINT(x, y + 1)ă       col = col + POINT(x, y - 1)ă       col = col / 5 - 1ă       IF col < 0 THEN col = 0ăken6:ă      PSET (x, y - sp), colăNEXTăNEXTăăEND SUBăăDEFSNG A-ZăSUB InputValuesăPRINT "Light position (good values are 160,100)"ăINPUT "x (from 1 to 320)"; lposx%ăINPUT "y (from 1 to 200)"; lposy%ăIF lposx% < 1 OR lposx% > 320 THEN lposx% = 160ăIF lposy% < 1 OR lposy% > 200 THEN lposy% = 100ăPRINTăEND SUBăăSUB palinit (n)ă' palette setup routineăăSELECT CASE năCASE IS = 1ăăCALL writeRGB(0, 0, 0, 0)ăCALL writeRGB(0, 0, 63, 63)ăCALL setpal(0, 63)ăăCALL writeRGB(0, 0, 63, 64)ăCALL writeRGB(0, 63, 63, 127)ăCALL setpal(64, 127)ăăCALL writeRGB(0, 63, 63, 128)ăCALL writeRGB(63, 63, 63, 190)ăCALL setpal(128, 190)ăăCASE IS = 2ăCALL writeRGB(0, 0, 0, 0)ăCALL writeRGB(63, 0, 0, 63)ăCALL setpal(0, 63)ăăCALL writeRGB(63, 0, 0, 64)ăCALL writeRGB(63, 63, 0, 127)ăCALL setpal(64, 127)ăăCALL writeRGB(63, 63, 0, 128)ăCALL writeRGB(63, 63, 63, 190)ăCALL setpal(128, 190)ăEND SELECTăEND SUBăăDEFINT A-ZăSUB ReadRGB (red%, grn%, blu%, slot%)ă' palette value read routineăă  'ă  OUT &H3C7, slot% ' Read RGB values from slotă  'ă  red% = INP(&H3C9)ă  grn% = INP(&H3C9)ă  blu% = INP(&H3C9)ă  'ăEND SUBăăSUB setpal (start.slot%, end.slot%)ă' smooth palette generator routineăă  'ă  num.slots% = end.slot% - start.slot%ă  'ă  CALL ReadRGB(sr%, sg%, sb%, start.slot%)ă  CALL ReadRGB(er%, eg%, eb%, end.slot%)ă  'ă  rr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ă  rs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ă  'ă  stepr = (rr% / num.slots%) * rs%ă  stepg = (rg% / num.slots%) * gs%ă  stepb = (rb% / num.slots%) * bs%ă  'ă  r = sr%: g = sg%: b = sb%ă  wr% = r: wg% = g: wb% = bă  'ă  FOR t% = start.slot% TO end.slot%ă    'ă    CALL writeRGB(wr%, wg%, wb%, t%)ă    'ă    r = r + stepr: wr% = ră    g = g + stepg: wg% = gă    b = b + stepb: wb% = bă    'ă  NEXT t%ă  'ăEND SUBăăSUB sinfadeăăDEF SEG = &HA000ăFOR y = 0 TO 100ăFOR x = 0 TO 318ăcol = PEEK(y * 320 + x + 5) - 15ăIF col < 0 THEN col = 0ăPOKE (y * 320 + x), colăNEXTăNEXTăăsg = &HA000 + &H7D0ăDEF SEG = sgăFOR y = 1 TO 99ăFOR x = 319 TO 1 STEP -1ăcol = PEEK(y * 320 + x - 5) - 15ăIF col < 0 THEN col = 0ăPOKE (y * 320 + x), colăNEXTăNEXTăEND SUBăăDEFSNG A-ZăSUB statefă' static 2d bump effectăă' TEST PATTERN (You can use any pattern or image)ăCALL palinit(2)ăCALL TestPatt(0)ăCALL palinit(1)ăCALL bump: ' Bump MapăCALL waitkpressăCALL bloodăFOR r = 1 TO 20ăCALL flam: 'More than flam we can call this "fade"ăNEXTăCALL palinit(2)ăCALL TestPatt(1)ăCALL palinit(1)ăCALL bump: ' Bump MapăCALL waitkpressăCALL bloodăFOR r = 1 TO 20ăCALL flamăNEXTăEND SUBăăSUB testpat2ă' pattern generator for animated bumpăăFOR x = 0 TO 100ăFOR y = 0 TO 70ăPSET (x, y), RND * 100ăNEXTăNEXTăflamăflamăFOR x = 0 TO 100ăFOR y = 0 TO 70ăscr(x, y) = POINT(x, y)ăNEXTăNEXTăăEND SUBăăSUB TestPatt (n)ă' pattern generator for static bump routineăSELECT CASE năCASE IS = 0ăCALL circlesăCASE IS = 1ăFOR x = 1 TO 320ăFOR y = 1 TO 200ăPSET (x, y), RND * 100ăNEXTăNEXTăCALL flam: ' this smooths the patternăEND SELECTăEND SUBăăDEFINT A-ZăSUB textfă' text fireeffect routineăăSCREEN 0: WIDTH 80, 50ăDIM scrbuf(80, 50)ăăDOăGOSUB lastlineăGOSUB randputăGOSUB fireăGOSUB updscrăLOOP WHILE INKEY$ = ""ăăENDăREM ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ SUBSăupdscr:ăLOCATE 1, 1ăFOR y = 1 TO 49ăFOR x = 1 TO 80ăSELECT CASE scrbuf(x, y)ăCASE 0 TO 9ăCOLOR 0, 0: PRINT " ";ăCASE 10 TO 19ăCOLOR 4, 0: PRINT "°";ăCASE 20 TO 29ăCOLOR 4, 0: PRINT "±";ăCASE 30 TO 39ăCOLOR 4, 0: PRINT "˛";ăCASE 40 TO 44ăCOLOR 14, 4: PRINT " ";ăCASE 45 TO 50ăCOLOR 14, 4: PRINT "°";ăCASE 51 TO 69ăCOLOR 14, 4: PRINT "±";ăCASE 70 TO 89ăCOLOR 14, 4: PRINT "˛";ăCASE 90 TO 124ăCOLOR 14, 4: PRINT "Ű";ăCASE 125 TO 160ăCOLOR 15, 0: PRINT "Ű";ăEND SELECTăNEXTăNEXTăRETURNăălastline:ăFOR x = 1 TO 80ăa = CINT(RND)ăIF a = 1 THEN scrbuf(x, 50) = 0ăIF a = 0 THEN scrbuf(x, 50) = 160ăNEXTăRETURNăărandput:ăFOR i = 1 TO 5ăx = INT(79 * RND + 1)ăy = INT(49 * RND + 1)ăscrbuf(x, y) = 160ăscrbuf(x, y + 1) = 160ăscrbuf(x + 1, y + 1) = 160ăNEXTăRETURNăăfire:ăFOR x = 1 TO 79ăFOR y = 1 TO 49ăcolr = scrbuf(x, y) + scrbuf(x + 1, y) + scrbuf(x, y + 1) + scrbuf(x - 1, y) + scrbuf(x, y - 1)ăcolr = INT(colr / 5.3 - INT(11 * RND - 5))ăIF colr > 160 THEN colr = 160ăIF colr < 0 THEN colr = 0ăscrbuf(x, y - 1) = colrăNEXTăNEXTăRETURNăăEND SUBăăDEFSNG A-ZăSUB waitkpressăDO: LOOP WHILE INKEY$ = ""ăEND SUBăăDEFINT A-ZăSUB writeRGB (red%, grn%, blu%, slot%)ă' palette write routineăă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăNick Kochakian                 LCD COUNTER DIGITS             NickK@worldnet.att.net         04-24-97 (10:42)       QB, QBasic, PDS        471  7930     LCDIGIT.BAS DECLARE SUB lightlet (x3!, y3!, ltr$)ăDECLARE SUB lightdigit (x3!, y3!, num!)ăDECLARE SUB lightpart (x3!, y3!, let$)ăDECLARE SUB cleardigit (x3!, y3!)ăă'LCD counter digitsă'ă'4/8/97ă'1997 By: - Nick Kochakian -ă'I'll make a better verison of this that will support high res. and all theă'letters!ă'ă'Any comments or questions should be e-mailed to: nickK@worldnet.att.netăă'    ___a.___ă'   |        |ă'b. |        | c.ă'   |        |ă'    ---d.---ă'   |        |ă'e. |        | f.ă'   |___g.___|ă'ă'ăă'Recommended:ă'+15 on X3 for each space rightă'-15 on X3 for each space leftă'+25 on Y3 for each space downă'-25 on Y3 for each space upăăSCREEN 13ăă'cleardigit SUB -> CALL cleardigit (x of digit, y of digit)ă'lightdigit SUB -> CALL lightdigit (x of digit, y of digit, number for digit <1-0>)ă'lightlet SUB -> CALL lightlet (x of digit, y of digit, letter)ă'Note: not all letters will work with the lightlet SUB!ă'lightpart SUB -> CALL lightpart (x of digit, y of digit, digit letter <a-g don't include the period after the letter!>)ăăCALL cleardigit(1, 1)ăCALL cleardigit(15, 1)ăCALL cleardigit(30, 1)ăCALL cleardigit(45, 1)ăCALL cleardigit(60, 1)ăCALL cleardigit(75, 1)ăCALL cleardigit(90, 1)ăCALL cleardigit(105, 1)ăCALL cleardigit(120, 1)ăCALL cleardigit(135, 1)ăă'CALL lightlet(1, 1, "z")ăăCALL lightdigit(1, 1, 1)ăCALL lightdigit(15, 1, 2)ăCALL lightdigit(30, 1, 3)ăCALL lightdigit(45, 1, 4)ăCALL lightdigit(60, 1, 5)ăCALL lightdigit(75, 1, 6)ăCALL lightdigit(90, 1, 7)ăCALL lightdigit(105, 1, 8)ăCALL lightdigit(120, 1, 9)ăCALL lightdigit(135, 1, 0)ăăCALL cleardigit(1, 25)ăCALL cleardigit(15, 25)ăCALL cleardigit(30, 25)ăCALL cleardigit(45, 25)ăCALL cleardigit(60, 25)ăCALL cleardigit(75, 25)ăCALL cleardigit(90, 25)ăCALL cleardigit(105, 25)ăCALL cleardigit(120, 25)ăCALL cleardigit(135, 25)ăăCALL lightlet(1, 25, "h")ăCALL lightlet(15, 25, "e")ăCALL lightlet(30, 25, "l")ăCALL lightlet(45, 25, "l")ăCALL lightlet(60, 25, "o")ăăSUB cleardigit (x3, y3)ăcol = 19ăăx = 1 'b.ăy = 10ăx2 = 1ăy2 = 3ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 10 'a.ăy = 1ăx2 = 3ăy2 = 1ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 12 'c.ăy = 10ăx2 = 12ăy2 = 3ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 10 'd.ăy = 12ăx2 = 3ăy2 = 12ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 1 'e.ăy = 20ăx2 = 1ăy2 = 13ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 12 'f.ăy = 20ăx2 = 12ăy2 = 13ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăx = 10 'd.ăy = 22ăx2 = 3ăy2 = 22ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăEND SUBăăSUB lightdigit (x3, y3, num)ăă'    ___a.___ă'   |        |ă'b. |        | c.ă'   |        |ă'    ---d.---ă'   |        |ă'e. |        | f.ă'   |___g.___|ă'ă'ăăIF num = 1 THENăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF num = 2 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF num = 3 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF num = 4 THENăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF num = 5 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF num = 6 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF num = 7 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF num = 8 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF num = 9 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF num = 0 THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "c")ăEND IFăăEND SUBăăSUB lightlet (x3, y3, ltr$)ăăltr$ = UCASE$(ltr$)ăă'    ___a.___ă'   |        |ă'b. |        | c.ă'   |        |ă'    ---d.---ă'   |        |ă'e. |        | f.ă'   |___g.___|ă'ă'ăăIF ltr$ = "A" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "f")ăEND IFăăIF ltr$ = "C" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF ltr$ = "E" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF ltr$ = "F" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "e")ăEND IFăăIF ltr$ = "H" THENăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "c")ăEND IFăăIF ltr$ = "J" THENăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "g")ăCALL lightpart(x3, y3, "e")ăEND IFăăIF ltr$ = "L" THENăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF ltr$ = "O" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "c")ăEND IFăăIF ltr$ = "P" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "c")ăCALL lightpart(x3, y3, "e")ăEND IFăăIF ltr$ = "S" THENăCALL lightpart(x3, y3, "a")ăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "d")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "g")ăEND IFăăIF ltr$ = "U" THENăCALL lightpart(x3, y3, "b")ăCALL lightpart(x3, y3, "e")ăCALL lightpart(x3, y3, "g")ăCALL lightpart(x3, y3, "f")ăCALL lightpart(x3, y3, "c")ăEND IFăăEND SUBăăSUB lightpart (x3, y3, let$)ăălet$ = UCASE$(let$)ăăcol = 12ăăIF let$ = "B" THENăx = 1 'b.ăy = 10ăx2 = 1ăy2 = 3ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăEND IFăăIF let$ = "A" THENăx = 10 'a.ăy = 1ăx2 = 3ăy2 = 1ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăEND IFăăIF let$ = "C" THENăx = 12 'c.ăy = 10ăx2 = 12ăy2 = 3ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăăEND IFăăIF let$ = "D" THENăx = 10 'd.ăy = 12ăx2 = 3ăy2 = 12ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăEND IFăăIF let$ = "E" THENăx = 1 'e.ăy = 20ăx2 = 1ăy2 = 13ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăEND IFăăIF let$ = "F" THENăx = 12 'f.ăy = 20ăx2 = 12ăy2 = 13ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăEND IFăăIF let$ = "G" THENăx = 10 'g.ăy = 22ăx2 = 3ăy2 = 22ăăx = x + x3ăy = y + y3ăx2 = x2 + x3ăy2 = y2 + y3ăăLINE (x, y)-(x2, y2), colăEND IFăăEND SUBăBrent Bernstein                MANDELBROT SET                 jmb1@voicenet.com              04-27-97 (12:29)       QB, QBasic, PDS        125  3438     MANDEL.BAS  DECLARE SUB text ()ăscale$ = "ccaacc"ăPLAY "L32"ăFOR i% = 0 TO 6ăPLAY "O" + STR$(i%)ăPLAY "X" + VARPTR$(scale$)ăNEXT i%ăLOCATE 13, 20ăCOLOR 4ăPRINT "The Mandelbroth Set"ăLOCATE 14, 20ăCOLOR 5ăPRINT "By Brent Bernstein"ăLOCATE 15, 20ăCOLOR 6ăPRINT "Copyright 1997"ăLOCATE 16, 20ăCOLOR 2ăPRINT "Version 9.64"ăLOCATE 20, 20ăCOLOR 9ăPRINT "Press Any Key To Continue"ăSLEEP 5ăCALL textăa$ = INPUT$(1)ăIF INKEY$ = CHR$(27) THEN GOTO 10ă10 DEFSNG A-Ză20 SCREEN 12: KEY OFFă30 INPUT "colors"; numcolorsă40 INPUT "height"; numcolsă50 INPUT "length"; numrowsă60 xoffest = 1ă70 yoffset = 1ă80 INPUT "real part"; acorneră90 INPUT "imag. part"; bcorneră100 INPUT "side"; sideă110 INPUT "maxdwell"; maxdwellă120 CLSă130 COLOR 1ăscale$ = "ccaacc"ăPLAY "L32"ăFOR i% = 0 TO 6ăPLAY "O" + STR$(i%)ăPLAY "X" + VARPTR$(scale$)ăNEXT i%ă140 LINE (0, 0)-(numcols + xoffset, 0)ă150 LINE (numcols + xoffset, 0)-(numcols + xoffset, numrows + yoffset)ă160 LINE (numcols + xoffset, numrows + yoffset)-(0, numrows + yoffset)ă170 LINE (0, numrows + yoffset)-(0, 0)ă180 LOCATE 17, 1ă190 PRINT "done -->"ă200 PRINT "dwell for last pixel = 0"ă210 PRINT "largest dwell = 0"ă220 PRINT "real part = "; acorneră230 PRINT "Imaginary part = "; bcorneră240 PRINT "side ="; sideă245 PRINT "height"; numcolsă246 PRINT "length"; numrowsă247 LOCATE 19, 34ă248 PRINT "Press Escape to Stop"ă250 highdwell = 0ă260 gap = side / numrowsă270 ac = acorneră280 FOR X = xoffset TO numrows - 1 + xoffsetă290 ac = ac + gapă300 bc = bcorneră310 FOR y = yoffset TO numcols - 1 + xoffsetă320 bc = bc + gapă330 az = 0ă340 bz = 0ă350 COUNT% = 0ă360 SIZE = 0ă370 WHILE (SIZE < 4) AND (COUNT% < maxdwell)ă380 temp = az * az - bz * bz + acă390 bz = 2 * az * bz + bcă400 az = tempă410 SIZE = az * az + bz * bză420 COUNT% = COUNT% + 1ă430 WENDă440 COLOR 1ă450 LOCATE 18, 23ă460 PRINT COUNT%; "";ă465 IF INKEY$ <> "" THEN ENDă470 IF (COUNT% > highdwell) THEN highdwell = COUNT%:ăLOCATE 19, 16: PRINT highdwellă480 IF COUNT% = maxdwell THEN PSET (X, numrows - y + 1), 0ăPSET (X, numrows - y + 1), COUNT% MOD (numcolors - 1) + 1ă490 NEXT yă500 LOCATE 17, 22ă510 PRINT 100 * X / numcols; "";ă520 NEXT Xăscale$ = "dddaaaccc"ăPLAY "L32"ăFOR i% = 0 TO 6ăPLAY "O" + STR$(i%)ăPLAY "X" + VARPTR$(scale$)ăNEXT i%ă530ă540 a$ = INPUT$(1)ă550 IF INKEY$ = CHR$(27) THEN STOPă560 IF INKEY$ >= CHR$(27) THEN GOTO 550ăăSUB textăCLSăCOLOR 7ăPRINT "This program shows the famous Mandelbroth Set. The coordinates to see the"ăPRINT "entire Set are -2,-2,4 and the standard window is 200 X 200. The MaxDwell"ăPRINT "is how long the computer takes figuring out whether a pixel is or is not"ăPRINT "in the Set. You should not use coordinates that are outside -2 and 2 for"ăPRINT "the windows and more that 4 for the length of the side"ăPRINT ""ăPRINT "Standard settings are:"ăPRINT "Colors: 16"ăPRINT "Length & Width: 200"ăPRINT "Maxdwell: 150 for fast, 500 for very detailed"ăPRINT ""ăPRINT "A fractal is a geometric pattern that is repeated forever on all scales."ăPRINT "This results in the effect of a fractal continuing on forever, or no matter"ăPRINT "how much you zoom in, there will always be some sort of complexity. In this"ăPRINT "program, blue is within the set, for 16 color mode, and brown is within the"ăPRINT "set for 4 color mode."ăPRINT ""ăPRINT "Press Enter to Continue"ăSLEEPăEND SUBăAaron Koehl                    GRAPHICAL CHEW (SCREEN WIPE)   akoehl@ccsinc.com              04-29-97 (17:56)       QB, QBasic, PDS        44   882      CHEW.BAS    ' CHEW.BAS - Graphical replacement for CLS ;)ă'ă' Look at SUB Info() for detailsăăDECLARE SUB Info ()ăăSCREEN 13: CLSăRANDOMIZE TIMERăăFOR Temp = 1 TO 63ă   OUT &H3C8, Tempă   OUT &H3C9, Tempă   OUT &H3C9, Tempă   OUT &H3C9, 0ăNEXTăăFlag = 1ăFOR Temp = 1 TO 320ă   Clr = Clr + Flagă   IF Clr = 63 OR Clr = 0 THEN IF Flag = 1 THEN Flag = -1 ELSE Flag = 1ă   LINE (Temp, 0)-STEP(0, 200), ClrăNEXTăăFOR X = 0 TO 200ă   FOR Temp = 0 TO 320ă      A = INT(RND * 20) + 1ă      LINE (Temp, X)-STEP(0, A), 0ă   NEXTăNEXTăăA$ = INPUT$(1)ăSCREEN 0: WIDTH 80ăPRINT "Graphical Chew demo"ăENDăăSUB Infoă' This demo doesn't really do much except clear the screen.ă' Just something to use instead of regular old CLS. :)ă'ă' RELEASED TO PUBLIC DOMAIN 4-29-97ă'         -= Aaron Koehl =-ă'         akoehl@ccsinc.comă'     Pres. Scenix Designs Inc.ăEND SUBăAndrew L. Ayers                QB RAYCASTER W/TEXTURE MAPPING andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        517  34159    RAYCAST2.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"RAYCAST2.ZIP",4^6:Z&=25374:?STRING$(50,177);ăU"%up()%9%%%d-%K(AfGks<%il47%%mZ%%%1%%%%wf&(hfx%yWSgRfxf*rxBS3Z+xăU"rC>ux<K0(^T)Jw2S_'5[X+4qD+77]eSU-h6DALHQ>\-F*r7iG.N.SaQD.mE^$WLăU"$BNGPh/$tlNcrV9No4w:dmw0tNW8t=mx9]BiD(:X20OiB9:q[kHPgG6c.]V\TOqăU"%:BC&UGA5lG_Eq:E9Ap-2O-U'j^2%Sv:%MdE/rCHG-'8F0HaeMr+vYa_tm^;Q\NăU"Kf#%/B$KA(8TQnVBui6V^rjMhCQ<iqbO^^R_v_t6/kPe%-.vL:#:C^Q2_akMs<dăU"]Qd^LG5fA;*XJGfcaqC^t*9<iI;&HU/02[B_tzV5\%iI:::7Ftln?vDp0;csG:=ăU"=YJu&lIW1QAV274Hd2Z?vu(WpiP'[)*ul;f5\R,6d3CRmAjLy'hSC#1$eldg'p+ăU"rYd^(0cUzp0b5^^:?X61lf00dQTC&%-JEkS&*(yNJEL^cMo03jo$:&OFmR/.,CtăU"*AN.$NC#O:UY3vYa5OCJf0aqQLW$Xcj:3%9sBJn:kp-m&I0t=PlWAQo(&;.<M4&ăU"#Z'K#hgP*8t5nk'9<b2>x_u^5],8)D9qNB'0Fl+>&0PW)qLtU(-JHC]pWI4&,TtăU"R=;Tv<;tk-:>e.:0RPc5VQqSo%MvV#R9HCoMGiMP>l#[KX&>b#_4CeYex%TbHfZăU";Xc^.;D2ZGc^afRvIaCC/Qd']qlD.(0SWFC*u7y*eM_HqYsBZ,0))olCRBsjaN-ăU"t17xYL)enDc:)jhOS7ua*eQSc$>K'8Z0Q/4C0;Jtr6&v:LSdd5#oXQ[uv#0NIELăU"^KG.JTXyo4_K1p?ekcUu<LaaWXn<n.G_e:fx%D9m*)f3)yTZs=3*[>-?pPlTX_LăU"=>1tcI<N5o<;;hD,3':P1x)YND#dq)4K.cUId[+Ew2Cf1l;PR/5TRo+%W8WdhVpăU"IVV0IfPfZ[d+*th^3H[5Llfkc]LY(H2X[?2\tqb3Ke#:b,zxcioLOfmnb/ecTmDăU"TFNv<_4X$m&THisFc)e]pc83,)C>+KR_'gG\k.\E%iE?epqVW]NvK6b:li\O2ufăU"i(3)b^]lY1i39,^Cc'xqhrV'K6)ET7r94.JxS#IV.,xP>yj4:(]Wwm_E?(L2>cBăU"4\gIZSJh:)#/pFzSe4n>DG1v'Z8XKkQI#Rs/_BiU16%Q\VqFXdW,VGDi5c$qaiiăU"m3Lk$u3&Clxf-pu8mhh\DNH>NFLM)u$:iHQ=/BdFCy=ZTfsPs)B09bcca*Y_pMuăU"qIr8h#[#7gEWQ;VZ1)*gGekHf]+:)OM]ZgAsnQ*2Vncm%4*m%^KLM/ktccfOhTmăU":.1a5-lsJv+'M4*xKR38Ev+6R9\lVh>c?sZZf/.Jg_eVuDvU*lhHYZTc\6\nkUKăU"+ajkf9<7MHX88%an8Yj$J1rjq&R.bZ&qtanL\Tj^\iO&E1c)7l)QrRecQ)5kU;JăU"xasSN\OO7T0VWy=1e8jzB4P_9*.X-CgY]^K9_'*TGPI4U6H/)D?[(4AmOF3%>T;ăU"0).&*oD/(^oNxq-tMa5vC)N1XqHg0=EnO1PWBo9&G=4\n9S+MLm<n)ZE[8r/=Y-ăU"k)&-<S\V1T6H-G/6'h>=->-$V<F*I#3ez:1,V*,;S.NX&g_mhpQ,4X(m##<\bAKăU"ls3.a-&?uLKO/?aeS#D\mb8n'klh53cZ=w(9^'^wlSN8Dozqm[,$rYqgF./Y19\ăU"FF&gsS?u%G#\d$4/u^^HfwDMAiTssoGj3j6Kj\VQ'n[h7AfVj17(w9'BSG9h/SpăU"lZaZbPD1TLVL'FLjDn#p]sLeCoWv/ZGXyK;[2-gH-fp,vI;9eZ1a?nPQRJRlC=păU"[BNjj5qqe%VIxL3oF^25q,f;>M=<aJ9loa4m'd&hB>=nkHR;o_I0f-m'R$ANJ6;ăU"^hE[Tn;HRI:#,:tH+teVs?UwFVkN1QEZ7YUZ4TR/EA*c.u<j*eIUZV5SFk#kbi%ăU">d)ONC\5^rfEe4*gqb$>qDaJDMPem7Vkgv\FBVg?I&njd#4XNE7hB0*g4ac$Q.AăU">K]*^,#+G?\cfe]H3(6Y%Y]pK_L[S4OME60M#M)t-s:,.:QA)WUS3rD8xzz-0ZyăU"B'_xWqth/a$]+8X0ubYofnl];sg&SGKRd%*)SIHAAp?4.m1kk4*t7pT]1hxMv[SăU"e$_NdM4TZitOXSwSAZ\b\&ZbU.PqsVaF7gfje3K<N+P/Hdg&Y.8_<Ft%64EjpX2ăU"1PfJ=cR;AA%0?6:^-%U8$*2:lUHDb2?i^33-l'07:6jrKF;&d*]'#oS5JU,sNQAăU"md\-swTU6jt+OJQlsBoHk?adVc=1YcPfpLseA+zI><2T7f5'Fxi1rIoH-AL2?*găU"%+g-:wkM)TWXU_F]-WI:A\*q)o+hN[*gbBSc:?X(qzuoE3&4DI<KPi4#mh3/VxBăU"4-GcP]1dv'<.'$RwMYuiC0HH$JXNDr:H+%e8LST)%suG,Kbk8SF0QEx%3$(8;bFăU"x8Kgq_%p[FbEHk3&3^1^Njah#rb:>T^+BHx&&UV%PU(_*U<r%;>^A8]Po*F:tGYăU"s(Z=Z5'[?Ef*LYIiqxVCuiv4pih-X2ttd;\^=;)B$;YQR'?sG6ICbu22r:MMt,-ăU"S%LLt-*oZtMhc(X?V_ew0A;2+N;azAT'34c[l,2l;I4=a^K9I>U?&b^=x?q(=ZeăU"LZ6m0,'d=1oAs?2]uuo&Ya+Q:ePR-dMugG]EVY1VP\g5L7CTQcbpxn.-Ab,&*T_ăU"n7ZUq:hYy*3F>mcc()[/B_yQP[Z&=ULHw23D/t(VkA6L/6WUNXicpjS??/.4sE%ăU"G>M[mZPJJ'[#.T;Xq\jVO:?Nmu[VD<$Kk'iAyG_DNfIgA]DlQu5L8,m0$<sR&TJăU"W.%(0l/Sfvm+RP*c%bb,'V^\ZRXSb<V-9/CeMIX2QjX6?QUb7ic'nTEskt+TGo5ăU"r,F85T7ZX7OojZFE<*e:<2l6Pp5Xq&T=TmTn54V#ZSYtPtfMluu,BmZcIqz<oSAăU"<hd6S.+t9OHX=rAxZ5BZt;M)NFZ1mJDk0Els$<6iTq[n,uWeIr?TRfYnpmMQPI8ăU"DSAIhhMLgi.0ja8q)7p9TWPAWKIZY.,<(B6T9QFM=Me]N,XBL:h\hUIEdmspG(RăU"zC#<CGm\[8l>HFKBMcO+fD#a7T1v*EQP[Pr[S.ESD]m_iy3piH)#8/[n6]UWI9găU"_%GAngOeQ=&o)XFdA1vb2($T+>MA$1k=#F,t[D:s(e3dum:W09T^PGi?<:&Ni3răU"Nc);fp7/Km$E#H$nj^m-W#Se^5Y/LpuWI6i(72nx,1Dq3$t8JuQ16s)f?5&'#Q6ăU"oa.cN[.ga.M3zh2[U(E.Mg:fX9#H.21-#B-D7)ws[cg&M/YlcJwuK%3G\6YT7TLăU"ltwUSR#GTG+I:yx]/RUQ*KHkUGW&Rl#oZNBt]?;_19ZL$8$n:S8WgLhjdD]Nq8-ăU"it#px[77X3F1H<gJX.hdg,MkW#lR0auFsFvEF]FO=I'0sNKK&3(;/GPDhctzIIaăU"\CD(;fKCql'phVQ(40V5>eZ3K>qX[M7b.J*?+7\Rb/BI6=o_q=d]0?rE&TElG$năU"K$?;7)KYd1DFZLXM^['rXBM2LYtf6,8%V\Lj(dO*hfPs8xfLeH.W\AF3BegvJibăU"rNP;Tf^Dt)93-EaPiOegsY7n4a*mu.D)Dm)YK=zV]82%KZjPbC7,keLVtOQqmOVăU"BaZc?YBJDoGC0Y\]-=+:u\pB5[pV'bv^:>W[OB/p.Yu5.g89Ggt;an\j=I)BK=/ăU"Z:/'B'TP)n&3Bukp&.[-QT;L#0Zti(25/a8QSHdMuwejsKzN)9xFx]DTnN8z6MFăU"uFcKdYuVMfGC=GU[e#Q)AOXF2<_vBp\cCU6hi1ir:nkoyXh#</rx8%(af&C9Y)NăU"X6,qE(_l9dbJOiO-N:n=rwkyR6ZqX)MfEZZ70i_5xQNuh'MLVMDc6-PWNQgp72oăU"h/uDKi3rz1COFe:&G0gR[5&QZ&cdc=Z0nGK#*Z4$J?F&Dkw'M-9O:.V<:<lt^]AăU",SKg28YB4_&VswXCi<6h(TrJ0>JN&,27dl-zoBH_H+$uMF<oOm%tvbTU6+S4C\FăU"vRsUYLXZglG=HZC]=X\$4PgM]4Ew&7G>uWa/D1gIhGqdSt(8JsSX8B8d57Wjo(XăU"sK4eLiX6#3l]4A=lD4c-=\Aq%/#S6>8rboz?]JxNfdwfI4Z8FlKTwzBqet%2i83ăU"&BYiDSc>_BvnMp#xoZ+?n5/jo()6+T>6I9rz7BKNEGBS5;g+I090daMe-m(x8GlăU"[-+OJmyVt63.cX$T:neDI>#Y)VBF.kr=a9QpU,Eb:BR:cHRh8$3rMpFBeQ1]tfeăU"eRm+P0%9]#-]jFk'+psb,tBrR.AjFr=WmBWy[1\Hnf/e-(')\EQ.:7J0dawdZgxăU"=u2CSqu\%0]gbm\2r3bS(3En20sxYT3MqDKGgxJaC6QDDP]hr[;[1EeT>Y0*M;săU"D',h,nShe_/eb]OoZR3k<stJO33w1H(V.was18V_Y^)oD>.37DieVhEowXafRasăU"R-c:_/MK^RjI=aqp>(#B0,J\r(yMXxt^O3(i)?EYx2ofdJIkYGHaS2j?19B\Q9VăU"Pa(_s<ps7Z,s.i>mA]R6-[+xjK.s7^U$F_[]Ey,coOz'2hwCC1F1HH8U#T'hKwPăU"J^UNS4?VY4w;jS1Z/sDLMpTIc[1V\]t2I+1v#3dQEPfF/o6>E?QnUQ%N>9#^y2qăU"91R'QAVvTM#VD/ci$q+CD\<5re2*mFhB]+0MYrb:MTc#Q^1vWIwJ^r_46JZ51M*ăU"3&Z-z;:ssK4F;OJUK6?<4N_&s\:o2c#]Vcz4oN4zR$m-yujdc:Qw1';rhk.JqheăU"K<M4-P4ML.yF<n<V0[hl*l/43CS>15H2_jbx_DP*;G5Y<j>.9e&4iuXMiB&lkp2ăU"xR(gGX($YpynCfpoz%C;FYKS>2,upNow1^bnpY-<[8YPnb_^u&Y\mAbtE[2P=u-ăU"MbVGOG.X,hPo*\Uf[UteNmZ?WFfEw6woV=;(KX1Yy+'up;C/=oc=K5MNk9C;ABeăU".iyaj7Z_-.unT%TP$29(uU_i(Wnw25>d9rpCaSPua8HpOXHodGPXGCU#L]QR=*;ăU"kK#Z;7/0AaR[fwNP3itFfksVVr#cq5Tam^9P+'ncrrW>YHw=pAVXfnpVO#\s#=jăU"eOq?Ov8Vlt<BASa4hk':7A2>S_R=c[d?#X8wr5-:GW<1ljFfx$^q%Dup(%)9%%%ăU"%-%=)KIG=VP;L1%%%%K%&%%,%%%%r%fuSi%fyX)('2hU%U[+W,G2q:,o95gCGXMăU"/8WeM=3lAPr.U&1H&g?h1&B1BvBEV'z(VS(x(xo?X#**X3.%;P'%U0S'.<,XE7%ăU"y=A[&eG_Re6)1_BgS1:-+QA[j<=i&AfE%%up()%9%%%I-%vi7aFaJ4-vsk[%%%YăU"%%%0%%%%yj&'yzw%jSif=ye64LqcHm^K-wvUL7L*UPES)k2P#A,->oo,6Y_y([dăU"hR.L7kqLw\3AW#t+r3:\jGZQ&E;a<*;Xh]o'O-]0H--V]g.1m:>u(#*,V)1p[Z8ăU"xwb_69>5yLu#&JIY?lb<2kpaPnh*WYc/IjcFvS#-0vhvEnKdnuh$xlu7(mLJvp2ăU"^Th2>2D$GaE>FuJu)3ZJXVv:PX7da2>G^>0+Bguxwhxxx'snOWCeOtzmL+QPOuTăU"f;4gtn5&/\bK)JCIE:PKu-;;&%l63P.4SHd2$MYJ)#0r,Vcc('peE#u<-SNiD,oăU"K'3*U2iYlsZ5tmxmbP$k]<l(j)P*4DiX[.Ab*N8hZAD-3D+MaMjTgA2libu3Re8ăU".wA:/ycAH//+A-R5Cr2%YV\vtRhsRAqfEh>3,uvgBfsp4CPal[(nnEl*\m-[1c,ăU"?1pah+-fTQ\NQ)7e0M*\RuGY>?1iSii:Rnmp;u>ihMN\?;'r0(WI++t1j5%JR,:ăU"IJ=bM'NYA7).bfD?DefT?PU3/w,x92jIAtnE6n=1bA,zd.>/*%2u^^m=q/Ys5NKăU"RJ:t1XvJBZ%C6s3Ojq1z)oN+5IOP3DYZ0aA''56tm8aTK8rAQD+FBLs+WK>hPI*ăU"Yz#\.bcqtoD+N]-Cu_Dwm0&fl8Ib>3tfD\J.oZn+YJ[iG?pbLmhs:Z^oX\='t^xăU"Z/L$:P4o>sgIfLX?v<Zbte.)'d]nN%CP,&Z-&kn(q+lK$#T$fE,fC,VT='7c9#QăU"1tV]cEKHtq&3f5%5D==l3u?u]W5Y%bOd%<mK]6PnzzY0U4.'OWrwxe/kBfD:FO[ăU"<eyQ>F,.R8$27.V8p1Kpin-agAaTQ#MjOU-3UdOQxkRkdinmkvj6gLv>[LCHcdGăU"Vk;$+/fOh]PGPnYBjdY^#2xg0=RU<3/6k^DW>*grT&l^gH<\k>VF\4h*mmbs=g5ăU"St^OBEZZ:f08#N9A^2EM4B9S3+*dg2b[7KF-$j*(GW8h=*VNDFWc1*G*]ZapD%uăU"Jz)H7M;dNdP,W#J[,D=fpz0(0Tg^&IvlC:G5R8V3:D+C40>s%tV3.\=ZjU+1)rdăU"JPL^kF\&\:(LDS9<)*0G*U*=8K?'d6m^-2V-/inR1*Z\%_l&YtOw0\3*m')i3M0ăU"053r$ik^'Mp57D]f>SJRR&=t.qe\9OTI/a?JELpu,8t,_1kHU=56tm8Q7[5<?hWăU"CdQ7R$[htF###pD<j#m++[46+U-t^B]BMNC+=.,o'N)/4a=2;hGA($b-4ut^<<XăU"ARM&*<kE=6+l\4,olc;d1SJ5n.n^]CaeMF^ic?=&HE\.0HD9F^3D\F6'8bYDhDWăU".a&?D>e[:=D-1\.On?D,5Co04:g+SX#i.9z8cf0+:M(FpvdmEC$8($WBS.%R9%uăU"w]JVCL*c1d1lE2kk/11ddu&HYgj10d1R'0I<#ksWnl/v=t#h2f?,W]U3fh]+d2băU"UhC:?R>N]*G(3jRuCD3/qG9J'_KVy&Fd-s0q<SO80n&4=>hS#UFoFFajUT&lEHmăU"miI6Y]/-s*<$l)GK1&#ABC/+3TWXWf[8P%dEw,(%]2'#cc)<YoGnRC0%ZC'nEgvăU"h;gMimFb*xa5;UY.NPE_/kOMd=?1t5$:UjboqG?,s1?Gh3C*_&(8H(F&n;1vTnhăU"%t&dC<W<;v2AjSj.OoSC=Ej5MVb75qq4sJZDApdlvt(:(JC\Fb*+0_WU5(_-I54ăU"Rc-vRwgt6k4fON%C27c#]U5PBRHBH2(.'QI>LUoOGYpIC9$WF$7^>%.VB?9c0#RăU"n00E:j-l9DCFd;N=r#1[A-s5Qp)%84OqWr9*1\Sch7&eI*AQr?d/0KU5qMGpbNLăU"RN&qB3YkTVL\^&8)_RT+JD1NB+H0HishcVwK0cj$BJ=8NBH&/DO;wW9OX*],HkDăU"Fd2bW^5SH/E]p7'QO>1f=D<#&SQgnD[fNf7lCC10E#V)AO<1sMTfb1FI,YLSc52ăU"oTtrsxRbQ20_(\rGcB:.vHp5=7CB+/yq.%oGeY:S4fin&l8?_Y:Hq;kP87#lDAdăU"eQ<*LQgjmrLBrj5rT_5d/yeq?o[q]1\96NpYwm:JN3Vy)n$HL:t-8\#Y9DOI+\0ăU"Q?'50<Y'O?=7bA8b>_b)xBxe:q9I<IOMoS^Y;cHCASE#WLisC?YBgbm\U2qY^+dăU";&GsPOp)8jc2?VZrBpZmNtKD-SAoD4-D:.]O(eT=hxPH#\7M+e;1t5=#UG]*Fi=ăU"uqfqIC%IIQ?6;$N#Pi+G=Y.)lu2?sFisX[4rCw<(j&-+5JW4-M$uvL0DVoyPJ:jăU"oq.7/J/X6-Wo+KF\u''*(38cdP/l]hb:1msV#G+93^kh8a>0j&c*m=>$(Bi9E=NăU"JLQD&)U=e+W9;eXpwYbg<II[mQhA4cDEk1hRXOwnPGZ\EZ(]?k_K/9XlrQwlGFTăU"lVrK#h97(%dJ$];O$sH#(/88VHl,1o131SB(nR+xB$rRF=4Tef.itrF*BXf*efjăU"&C'*jzwufi2bVOv'H?)=cT;K7?cMgy0;ZK,$;Ga<wl7**O'Wa5d>5OQnJ?(UQ7%ăU"lx2+W4_&K<eYCA'7+F=nPs;*%S+EgRKw=l'$x1([>RDPDjcsfhHa>&EO%=7,SH5ăU"cAYK:MQ:k%ZNpS?t5+f0#*:)Gq^ds0oY'#+y2r2MhYL6OV1q#f<B'k6-)nx%%$,ăU"D4ou)Q#C\oI3$L)v^Dc)aa\)7D'w=)uZ1CA;_.jO1?;EIlui-78a$RGEta-0e;;ăU"/-eN5a([mDVJRf$T7,zlV$v].YA/rcQYgjd_;qvrOP+'aya_FP\8&BdTWK._va&ăU"J%:m8ld3(bO?;U$HI:NH)^chA?MlR99(?DHt.o(-SO^C48&qX>8aGAN=D3iurUUăU">bbdghhzuM6jJbF0ClgV80U<*1hV7caDd6e,vHd=9xSX$&GMci'L2n<tZP$&pR+ăU"jxn\d2#frTW1:2p\7Efz-96^tpmtwGZI$n^iGO[NS]G?uB3=D>eZO=j)AP'LoqYăU"aFORTcz%V^7-Gx1JN2Bl4k%Mue6uq-BNF.eI+=]3uftV[iGI9ftYgM:ug87&Pu4ăU"x9qARoNw/d45Pt/8YyNYTU]j'?kPAe.>,*4wUd01ifYFop6;t7D=A#irj,C^Mf(ăU"OZ>l7>ml'Ht+VI+V[(^.3?sbzxIkOv8QgN5/F&B7<#7S)jIza^e_7V/P>mi^-FdăU"b-:l$-R4%kC()5Y?vLrRfiV+GVkzIKS4C0ViBvM<;KE?tp<yv[9Xefp;H(DcZ39ăU"wDtp<7+OlqR\6nX&>&wh:%N5sSD5Gh-=j8$FQXMX+Ei$#C&F-?sJ5e>NIkQ*<:[ăU"lbM$Sg0I0gY.t(-1QxE)rgt][%g_Yjjrdweb:Juf]C18K$0J%q5%_S;mR/*J:HfăU"h-=jmK8B1E($\J*:]:_18aW<+efoJh=4xHp-Py#T,\edhX6Sj&>I$iH])dcTw]>ăU")crC?x-jeIAhb+Gx$kMN[-ZQf06tjTA+U^AfgGB+)0Ri6GL7;O/D:(*1U)Tf[^NăU"*Ej((.<+''US;*6ov>3w$^*w?6\*p:73<[CgGR;Y2sLkCW)RH:6HE+fBrwP$BwhăU"E-S$OtY-%XdkF*]uU^iS-_7?hHp5vBffd;vnF.k*mc(BY12di+$/9%gj08$:dC?ăU"wjJz%Y4kWd>45((g[fc'&Ab%<Mb_4#+OE.QcXOs(1z:U:1LplK\tUUh3cWT\&9)ăU"-h/4879T8mV8GO.KBY6w=$C.&wD#dFz'K;Z-$6vH$[_$G-p>Qw'^Ke$]N)vg2GfăU"-e8C'E?_r$6HOR<UX\s4'a29n)<16m3O5R4Gooj(Tv4,Q\PaeWngjtnBlx)#k1%ăU"-Ns'X^Ded4Y;#9,&h),+b_\MrM7J-UV_9:tg1rO__QK#isLwrj7u)n0.+Dc?aynăU"<F2wXNAl$:eQ3fpOl*ar<rDb2QX[9X=Gu#4,uqNexHlkx(wsdDxxP^lNR$7M=x.ăU"\q)dbOx8oRy;8i4NxneJvLEg4>xn5Ucp;[cqx91rS/su%d.S#:qnxLu<2:-urxlăU"[-LL8/:qfxt)PvL9SgSxn2[nO(:d,w4$5Pe.NmLOnaSx<rcH<jwYCrxZTEtuCcrăU"xpj?L]xTm-DjXZ-rxZujL$x:T]X>cix<^WH[qNYAwG[TxLP^thkx$cdP4Yrxbd$ăU"=4\x.TmQxnu^x,uqNexxt.;xf#VuJ-Uc^#HBVawdo71ux.WTpHVMSxBEY:G6TXpăU"hbf8*Sxspx.%W6Kp$bkwW(>ng+\5Nb)[u:xfDuAvnX]acr%\2w0l2pOL>i]2RhHăU"1:R3&+a'+4Bh'+mOI4Z(Xg;fAit7Z?xCAKG'E(k.cINRL0AiNqN>YsoVL04;Ed%ăU"hcjSjw<Xoqd;')*#7)yqd^hf&ASaOl^Ha8P7r*_x#5FFn4]w4z/V3$7Rj.*Nes/ăU"Ai?YwpcbaMD^kP)]Fprm_x8tlExhRc9w^[8,nuah49xEP?-v<Tpd4tyWL)>4RT^ăU"H*'m&M-,fg=7ux5r$60<:.kM#)>#ctQ\JbWoPTUe38#+bO%xfZfX*(l+R'Bu/05ăU"FiJ7ehNcDUJ>KU&doso+8+lEdET^XfNv%pWRLo'HO'$xpH6omm6D9+H;Cc;4n-1ăU"dsTMcKF.%nc[iCL5gg.tTx\cdtI-.rY<DCVmGAp9qdU<NHB1M3l9=vB2WED<EzqăU"dM[nf^QuBW\TX,x^Ybx8l[3+#hYAeY8/g&WU0mA\ZpmbG(]etJasbZx0B?,H#$)ăU".p3,4w'ps(c8Gux*UE=d2g9/9](L#LNKZsKx$uXgwH)d*Dax,j,Q$%EZw'*wN:ZăU"]r-c;K2bs.Q9K+o*iPT6_Yi,[?V=X7L]=I;N*3(CowDH3UQ=UQI6XCa.&89-m)aăU">UXi$xkbN*uxVgJ10uPLYAp'83nu]Jn4s_xh;EnR70RsEZi\*Ydr&4ePk]v/FxsăU"5R;8JJi'sIIX:Q<xfk$-YxJ:%A>Vg+$a(KbA9Pu[dy'bpJ-mXlqkf&(qBnng.^-ăU"eXkIed4Y'?<&272)O32#Ona7CXKmWKXSt)j)_entRHn[]XtS36Q+%PTY?0ixrqjăU"MwlVa4bB+Vw#1kB$uHc>hqp^teThERT7$aTjCm\Y?qu(e7TOK;F).csPbYTVP+WăU"a\Er0fY\F)*QfT,Zx0Tth3#=(n?Xvc.-3Tsj/x6vT4c78_bJjsatK2=.N23f=crăU"8;j/9FWS1bp(:30HWWMNmNraNvOJur]CA$b<'Tus$.qBPhc2P\EZ(*Yb7+')Dh(ăU".6TS:P%\$'i$Th5M3;%FU=#wc7Y<]aUsJvO%S*F>a'%Q\UPJx\?&+qTEAA.CK6[ăU"sM6uvtPj)T0t=SU^iDf4:'B9QZN0Xx.cenIqadUltG6R\<NCA'_9aL\\?hX#%>EăU"k]FOO)KH'l5oq9ap3#Zu8Qtjnh&m_lG<$6$u[rtjK.9cBAu]uIBtp/>3lanXBU=ăU"2BMDeWv1FT<*$udT]2bub/uOwP,,8bqEAa_3FjDZZgqvjp\P?k$1fT8^c].:H^JăU"0-=evVIc^1w_ad[4g-V-N5r2Il_M_z=(ZVIvjrjb+<M^ONw-lxK[F4.l4C25&+MăU"_8i_VN?LuYuAFj3p>)'lbgpt:hO$4I22l+?7ug8hhNdEUW\u.TslL-]QWvx&9EdăU"Y4)D,rKPo9=iW^k5,HlTH[h\HDnf0x#[lpYZExPuTo_R^^2.?an6pxpduYp(;sPăU"jtpNxVB7KalNF5WqJh+.wDeO9+Ke1:rG(_+%1w8><wDpDOv[EINMAokO/2BXy(KăU"9LraTolD(7kraQx:<rjytGAxRshe3utP#iXWWGu94AwRBgGdmA>^w'KZ'i%N6q-ăU"vQ,.lU*'mP%CszxNv,NYbLrJEZK:H$InY6YI.Www_3>7rk&b-8l^s%^m]=<DaD>ăU"_Z2)1XhR3jExK+J8x)IY4LBW?DgKGA&HZpe_.([svkBxLv;ZT5G)a.Ex6J#dV(GăU"xjDrn_&?[Bo>F4KaT)'h'rMGE=f\hoXCCSSR7ly$C;tAx's:E:t*xj[RftnuRWZăU"hd?Gt4umo:4llgBBdvpWZVrUMNM+-q8_d<(.29*x^l[G<sn5h)IiBJ1ojjJ5[thăU"EFELab_qY44(&yI-J,(rT4'5E]9R57-;xvd:\t(mdttbS_PdK8N_uXKf0(fEjZiăU"NG+AEb3pD-qXsZ:x\<9zm\;?R=C1+4N\I)7uc\5HN?3ipH'J1dfyqne-m<2e=3%ăU"+zd1-cusz+cmFscl3BE4l(%.TdnxK=1x<5,u-YN>.+1&'Gd=,Uh2.x;r+MuuAnMăU"BsNo[s\tHxqHxVrjuWG<>Cy=U&TXhNnsC?(3iwod2;,t4y^J6V(cMe.wt^l,W>6ăU"3*n2)I14Z[\Y>;g.YfMV[[D2aSA*su[P'Tqdj>$HL$LN:]QRtWo-8NiNf[5?5;BăU"e3<fbj,voGc&$4vV>GJ)r7+jxA,?p.tW?(M$C?)ooxu9Z;Iux0_f-dn>cZ2P^ZfăU"m$1JdOH,#wT[E6;(ToPYU1GRrPhXm;xHjdDb1fwU'nm<;pW/RV[f%6>HU(q0I&ZăU"xh2tcc$SVWrO<?swBAxtDrYxG(oR]_k*t9AF^aBRA>YF7RdBvEnBTj.[lFy((=eăU";rs[x4p<'+9ux(du/nO?=m02u7J:0CkUm+UI;?zJXD_gdTox$W/b3v+l*g/CS/4ăU"hLci85.P[h+3wQEqzsobODkbDwTOZM]kP6ixU+nY)xHoEExh]:I,w;NflPT\,A1ăU"ec%+h(scc.amI\:G6>U68Ffg<_(';iTxqu#YHuBLcZx3Z$xdQ3jM67XM[/cAlixăU"C:5.7^vAD5[ZZe+5\(>ElC6r8+cu9u[YWn^=$7j]L>E\BV5X3:Xd:tYNgqh(bbRăU"Y'?.uix1M'xeeDfQbiUu>JrxjiwOx[8beo]3JXde<UoD\FDc2m<DMj[9>qQ%rr%ăU"wl8KdxU-&=jmlEx#p%yq86Q('2uxc[*)&7%Buc*dv_*C,xP6U/Y/]]?huhwf1<KăU"XP46-C1q%RIDY)qi'Y$cnSPo8in1[a)Z:-x#:>qVKO8(e4NSjH)LL.7F5TZC8VkăU"kh^_t>>H&.owD$nT\Qm>GX8ex8v]Z%^>R'opQtxvtJH95SZRuN9ucYU#-qIFFtjăU"Di\Yp4W:%9;)<xNA]*d$81o>8uxbe)DM4T4rs<N,JB$Pp']&/?K'kS(+xusV&jqăU"zYx\m6SZx;em:Fc1YOE8$NuDr0,m_8z.x4HaudBuowxeuvxRtux,pxt6hxHscxxăU"xumlxj<q&HRfD1nx6xN&xfO1nx?xN(ctj57sq9UHxjLZ6qoudj8pwji(l(7iZHlăU"x_-k.9NoZ],q6C(n:Ks[6$xbb]8WllRTHYuruNlKr6qruN+vt5ouxN(m..nLZ<$ăEND SUBăSUB V2ăU"ixv=9q#9oruxR$xt6hxHlWxn6fxdJxtNorxb(wdDrx6rxo8*x0$F7JlWxhZbur8ăU"FoL0LLWW.LtmrfJoeT:Lp#rvItoq.B..B.B$F9%2qIfwdPxjuiJ/jLiJSuSo..=ăU".uLtHTSsl.$*KW?xPjDKwgs>lX0>H_mLowJxxv]s&qd/mtNwMT>x#;</3wTKq4dăU"?KAcLCa4m;u=\P7bO/]vcSM1[xSNWxNtUX7v<adJPalpJi+,7BbC+3#tdD$FgaAăU"^LlkN[xuqEkvdV:rXkU_oi</<,]/jyYvGS,9vb9rdioJDMN4tCm[28r,oBa%w=FăU"T04AZR5QqBVv7xx6uX58]Vd98VLLjj+x#9C+EAb+7H7(3aetr^fx_-]lh4A^O/năU">rMK(SZeKVoq8>/xtfYFLHK7d]-UaL%<oX::0tl3KOLKIzlfG&nE<xPXSnmHwmuăU"aabL.,3+9ctB78FPqNmUdXxZ&KkRG56XP,s4'Yl'$)42UICqd6S95pQ_xcns58hăU"9tPJJJP>wmh)AY+y0wxE]c>lLlMNT&?h;?ImM^ra8c)T^^['?tMd,chxiT;bZ(,ăU"]G).)tRx%,6rPPm4G[rwnCx;X6C5q[DmarbB3w?$akx7_AdArUiEx8P<\.KwMMLăU"bBgGfkFjkYZHbYZiX-sxtar8FT/l-&oKFx:N.>HQb>8B6U+hM*f9/nEox*8hJO7ăU"^DHsd,rNPONGX2taq$*wdl:TXxxoxbt'prkwmHbJd\4/w1'8^T7bbf9t^ixc^<SăU".xKXu8k8w+)uZJ#8,E+9/guIilNT8>EYS)[C/%x?YZa:u[Hbs/2,gZ,hx(t*T2(ăU"BuwnPXsuxxrVv>(,[y?M5egZhx3dd)[;o?[NqNCmS?a0[h24PZ]+5ct79x<raluăU".rPa7q,9/r9-xE[D4+$4ErGUdTxZ5K*L'cwn\XX%xFd7POcK3iC:W*xfoPf?dLfăU"imx6q1P+r_V-&95sp_x9:DG_$1*&Gm\K;fP91&[\YXxT;33Ctb>^xF:X^x.:Yr3ăU"bc6o-.W$xN3x<.W8Gokl2'raa(:gBcnEEx<X)QBuNU<q(wdlDx6rlxx.q$xj>xtăU"y.qFc>xOq]u\<HqKR>HZY=x/[2%<uO4UO?qT.nJ=pOsNY:V]dUVPHHaFo:it3usăU"n>b)XLbL^0iEd&R-paNVsd<..pgAknDh'hSHU6Z%JlbJn:?r2>xZjd$6'i$>T#hăU"tMn5$*Ab<;=N9?u3r>;z%:Hid.30NB6.k$*9B;#SL.^?8jHdM-[m3or1rU2kkdxăU"ZmH:Zp*BO6:'\l8^Z6Vmt.u5v5BWkXkNVZIXxu79*wk\Xb%&qk%dcZ2XY6899NOăU"wZH>xT*Wd-5%Xs?(nL.ItQi(kCwkhA-2Ow:vP>.p+jiqy&[98<wo?rd7,l7cJ]căU"(tciTC.bzT7lxfRgLI[qPfZ8^l#B7kYifYWPLhIaKvjqEhVsPXt>(Jinisu6lq&ăU"0,5[r;7c(u0\]cXuDsbtQRt<8AcKBL<;6ox0YSH=MC_E/KO?qdbeTtT8^7ne(moăU"_r-cnxCmXYiXZeMN-HBLzP.kIi8Ab.romV3K?SWMxYfVrvYb]:Tbp?DjH.JM*IyăU"'w8g*Tsoiy_kknqB$3QN95?wGNuy&gS;WuHuuM[kk9qBq'bNb.fua-7Gl*]6))7ăU"qej>BGGSN>lv)Pf^V[H.TlRDkb&joH'>0rT2/pc67EGD(uOXwNufD[.QR9VPI^CăU"^9sk$,GOwOr5GLas?PIEI.cf[ID#5X^$FfJJE61(R%DqooDVkdoY#%O=BGK87_aăU"notq:Ha-uAw\VR3UVQn8/>IdnN(pfd2HqdT($=NTulnh.9o8=ws5CPk\NxD:BM<ăU"<<6V6G1N#]?2FqUrJwq$$wGY7-6tZ,,6t5t/t8ZXf=VPE\FJs$8Ys61/tBhn>8=ăU"qflJG*o?]?X300Vut<Z*M$?v/M*9:*uq$gVj';zom;Bvj,=e$Ak=X,MG'T=\PE[ăU"RlQvJeeM7C3Gt;%,6l66t6Z6,6eYJew'XU4jq8lT^Z]7340U\=Q?Q1p?JCdTf.JăU"K8Qr?vvZ;o7D_#2:*9dlwq>xs0n>pKM+O2Qxw?<s6iV&YV4Tp/#$d3+(RCBm3xvăU"aD?N]p?:#cM\KFl:skJ*<1#YY[lmoE0YEp<Q1aAJLQiJ$$e$UFZ>FT2RfG8=ZU6ăU"rqi2%8^kt*s#300;<MTcbUL91ZU>Kf,gnb\;2)dJ\;PEZ?j'OYcsr8U$bTs=3,.ăU"33wwMtI1./K/D-R<AES&goFUZ9FU&M2Z9#l]g'Bse0S7PlWW)6YD<O?udZS<$v_ăU"/PV=r27<qM?'E^EkV,rQ&mRQv7tZ,4*E<T=s,Wk&(=>Tq<]OO<tL3p=K[ZS(M6HăU"MIQS:k4,s^/p+ZNc<?DXHG8)rEX0/pBU;.Mz*0C;K'%KOk^xxpb\(UW#fNz^$rHăU"&\*FDJIupF=Ed;<KMc%V#Pc71IZcX'kuPKR+s2OeV6ow0)S,6^2jZ/C/.H5*#u0ăU"6XFM'sKXWZE:BgX4*'u?OogoO2h<P5&*z60'5aZM/\/hWtqpd#lUTVduf19w;ngăU"o;o[(u/6,3r*I\t$T)$<ZVT/=Y+VA?ts-?Nuh6PS1T-2UbYPy)'-UaJB-J%It&8ăU"03'4\AB?g&W/NrjPf\gf'p52bn8WfdEEh5D6$Tim-lm32P;ME0Gxi.w7d3c^F\jăU"G(h_LUACgc2Tc*9mX-p=Uc7-o0H9>3/Vz\gy>Tjm?>S[u+wZwDMMwX2\][VR18?ăU"_$uSJS%lCU?YqZWqa2xuMZTTSLqgPG1+0pljDW3G]^_q$7#jB*NIF[qFmCijNjmăU"-#nkUcq<PlIotD,YhvKAudOht[(K-'5F_guK6x?QiQm&Npp]PI1ww6sP\1r9EBgăU"e?yt1*u1N874Mb-t,BXo'Z,4C3YcGXlS60d<O9[\8rg9vRm_.$T]OD^nKJC\a:[ăU"?xZV2l/a1R[on/]54=-qSko[dwTrVl<<0<qh;.9_$TisEy)I<01RciAUmFl*CJXăU"UO2<dZ1OarxGl#7DHhlSge.yO+OyG4h-x%J3?rCF1X>PsvZbwKZ,Fq;j&<&*4*#ăU"6:gWY,74ITM%owjaSOoCsFvB9TD'g40PQ&q2SF?0<PwwKFudg?<?.)VmVc(?qC:ăU"e7O^OQwWOT7_C&Q$kC_[/85.d;=DOkw&NNwHF>#POu<6m:'d&q,jxX/Y)g+]STJăU"b+u<?V:yH%N>.?>X\YNwcx&Ri%EiwWRhB;HD]wo)0/RK#b1tlIk#=cE\U,43Dz$ăU"e\P\E.Xe>nd)(C87&E%&M1XM(vF]geL1sLUH[KX.B\VCN7Dn:vfgrFjJE(%$+J>ăU"40/j=t4)=>a9aBDs6LjKWB5'8G)#f?v&W%?q_VuAdR:Tpuq06#jzbkMsN;Sn<-:ăU":EK^-R(s?5gnpXUAZslj5'Od+pMvsOYDE57a7>38(.a1YsH?7;52:y4639VEhZwăU"OFjPhxl?PC8QS^JZ*<^1sL;;yOjZPA(b<8[z36u_(w(t;$4<%MRv)[*q1xBn44zăU"BG*aQS/=.8D'<\[JckZ:\$57tlh'<^D3P(Sbx9->B*)FEEtVVY=%TBYOeO^XD1GăU"<pn]tXbl&?Qp(?J$lSU>dGGf2BeX/MWN861,1HGJg^TnHYp0r=;]uU(/hcvuD/MăU"=d#OiX909ucS;a;W,cgBdnY?gM_w2DBvd).0h^au1qr$;*Z3#468?m)'9sd[pC[ăU":&V]5F)c02?&U.MZ'/DNf>(JZ,-6N#[#yD+mitVt30:c2=4D?gqGwR7Slvv2I%_ăU"O_E4kZ<]g%uII>Zw0&uf0**nl$-9rS2)K?AA)q;AaEY(OQe7(,8*Z/430NlbX\wăU"c#l\/#wH;X$Z$$[8J+1YEwe;#O#m0)O3<#lc4ncQpwZs,r.if4Iz2NlcmlULD'lăU"uU.%_dH7JbBNO%BpUqO$Z?9Nj9h-xVRqeaMb3Id_A6,s8x:D*yA4myGr=[OaamAăU"/s3VS*Uv<9QoxD5Ua$V\%Bm;:kl%?L-n0h58ZCQ[.K.vk0by<\gC^xhoKDDk7SxăU"M>vnm_oQS#bT]E#P:/xAE5dsQSX)6xpH3sD9XV7B;cC_7^Tj6=2(vUHec<E0_79ăU"B;7FgHmL99F/F3x?MydEsxATHU<T%HE8E,Yq8t9KS%A6)dl,M0LywJTD#Mrm^<6ăU"<&Q#%2L6[z4ui;<5w/0kdIgi_8SOa?uZo)WR2$0<kOxF04Cgd&r6t0pe?T5p+ihăU"4lFDu.l8]N:SJO1>>4fq2]2><<9rh1u&uw5*.[#(F]$0]jTeF\y:Iv+(s*CgA-HăU"ohLp/76fmXH=AWor:f(u304*04#i\$/o-/k;a41'i1]Pm7RCYN4ReJPV\<gBleTăU"AQ36E2aT1,nHhfcKX=c->SusV*&Jly(#f7c/erjr]j?\/KT;Ed;u]]M1ViReUoNăU"jN6JV6N?rA9MJ5%ENw6rq:1ccXFkrGnwmX%*<aQ:RH*u\Z<T>%8X?sBbV)MIDDFăU"erYOim[YL&Vzz#sCiT>^aHEaY)$cHM3%W,321l\#m[<6x8-vh=r_NM(WW%9pUq<ăU"JJtNwW?Kg6eJ%swmi9_Mcvev1%JeMy?5rg;RirWnxrNt\W\\<MDN0YTsXZ)g/<GăU"\V1Aj^wlZ;E8Rmca)c97olZul+&7l[[17<0.=n\rmqxh3g;$/BKNR'Ecno0Cy)CăU"r.x2avF;>Vabr<UHt?hgN#M%<*&D_J:FAnCek6JdZFl7>e%V)F74Cg3'K-DU%[4ăU"CitL^N%FPFh=;>;U/2.z-iU2g)J#:\&\$hj4<T^RNFOI5LKJ3T5M;Q-dBC,^&#]ăU"FdYA+mj#*/k=v3\uthDd6p*%<=:&_p3weF\ECv[=6v]btNiyI:VF>0]<?a0[<'%ăU"qGTRfo(f66NC\6[/7G7\L+S*dR)DCgz's.#4IRm&1li'Q7*%v.F;>Ncqti/='VKăU"F2Z%id9<u&3H*6_OF\7Pn9ZEX.vi80JDV6Q.Wn'qzNsLQpXJ^u8q.wC+-vrU.rAăU"&sdvbH\NOD7e#H4Vur,klm*Yxj?7,n:'h?1kiHaD8l6MprpZrJaEEE_lu2R2+i%ăU"%zR8;ZZT_:9OWXYW10kG<N_FQIcNMB..VK/I48VMY:/q'J5(Dry9.s^,,&^sKcTăU"q9D[d);:[\\C_&#H49#[(Dl^0lbF6GqF7^(u6gJkHq\xE5m#=NCk2[t2*NUdJp)ăU"sjjEQ3/&)&t6]r+hC:tNljZ)Z=t]vJpKF<\&V.J+rN\4N[Qh^^gMaW[0,Pdx4*SăU"<u;YH0i0G5rFUbcw_\x$&K./aOn,v^z>>O$%(ySGKw1SGgF[Ql+F9Rii4E/srm#ăU"4:\=1p$6tCHX7wEhp\k(Fcjil]l^6e3^KFvbPXXtsC%^X6>5lqUb,'=IN%[VFt>ăU"UI5ktWQ0(1U^P-D6*+MV*M)>VDmsHZSB6HsiF:c/LkbIKx9Y+A;)RJ/t2Yi+NTPăU"lv'0GlKKU7HXOxXqcFY0dOt8)6ZEtS\K+D>6j&q_2$QU:9rv[bD?GsBqLxxqG>lăU"1>,Gkw1<oAe5iUHu(mHmvZ%_gwFoSajTJ;s$DQ\?*BGeg]*R4)F6YG6-CJ\FR^3ăU"2kox'bdmY5iaMC^b*y)ZSEM.Tr4j&uhnqVb>BtFM(y8=6uJ?C$*wVwCqxKB;EuFăU"qsDQ+n)</*^4ciZtZmN<SKWYR]<pc4wRc_JFteHfYa89]lk<RGW4?JfPMy*BlNGăU"Kr]THfMH=pjh..9cvclanu(Z;RjoRrVv>k45)baj,^NnS=EHJVdcKYk82rO/xw&ăU"$lJjx3Pp\;rU4QB\NRww.ScQt?<nr*JOE>oLqpb]oAsa8h.sfsRZ<YhPtFL6$pnăU"]t'gwaFK]RHfQw?6lRd8RC+j7x[iCEiK#=2\=45fvY%t?tDsaWPP5Fo,0-8>aUAăU"4$jB\r6,B&Dg>xJy>hgS>WcGn;%hZiJsY2f9hP7IXz>4Xe7#/se]Ya_%X_Au?2$ăU"ZX$QKi[T>*5ish_U)qyaT_4<5qo7O<K>A8_r.,cd&F(xH>L=J85S'Ht6fqHdq]MăU"#\7bw;3^nMdpj'tviSqL#uKbNAM^3HJ('s0LvOD;j/)YXve+e;ugACdc>UVz.w4ăU"ZkG\LkfcRnoFz(FQZ*Kw:U%*[d8Md2I4#36c$<NEacODMmNaG^[T:];/5d-*u8QăU"xS]KwI/s&r\E$/*zM$,G^b#&K6ZaAv<u7RGN4F:uzOcpZDREYP^N$<N[5-7;xOiăU"j64s:FWa./o&V^FzqXM?v#HuR(J6m3HF#T98$vZO(v61HV)^xtI71K&39X=:xcxăU"1J>U5_/OY,bEIW,>kX41$R;0v6]-vE;pSf>L6Ev/nPK#ga2UF(dPf;96=PY1p3)ăU"sfd85LhRU(:iykIONaIRnfi%oDU?'^MmqQJX7OiLNJw-ejXu3;*-/6j%vM1Jw.]ăU"b3'8*\R%eIV(<25FO<qcostx&t(-A\<X#uw$XHaSoCEi*[G>1l$Dz?G&oghQNDlăU"w/c.+6jS>Pc^XfcpiG+dwNI(QN8pd1/U+DM)3<,cg]/^t'Jrb;RK&P-j(.VHPwqăU"\yw$Q'B,YD)F;H0,D#%aJmg]m4C8=$sZ8$Oon&4(9JmD4qM^jk:OGQC]p')1KmcăU"y'q\b$<Hnfee[FNK3EqB[(R0wk_K%d6ATdP;*aw4o<_EiV6HPwbrS0Xw(E]-v#iăU"$JL3W$IUb>WaL[akTjXz:\6=N.C4)JnjGiq-*cWJQF6FSZ]_?Y9ZJ,Kj0]<ra#măU"lAprKs+^X/Vp29WowEw69ss*k+5n$j5QV3s-N,tRre0Mv;V[Tt6#rzojZ-+7kwSăU"HwW8.S.t.hp\#Xwc_HbM%PD6uL7nSiveK4y%P3s\oj9T.C+QE[R[hTArmT(iAjSăU"'h%%d$paR,w$4ciHo2YSr+e3a[;Bt\(8YAU\Y/x;[*eHo&AkJ(9[k:$8gw-9=gmăU"H%9ud4i+m8-&nF:pIr3;1QRCH%*oN;5QQXzMho1xu-d1E$.<(XlQKu?$1=m0H%6ăU"-*uqPcxRqP(86FQ:QOZ:KKySlw8zlI9ziaR_]c'v7[F/uFMpLNj6qPCbn6+8CpBăU"lWRK_*efLSsBml$minxD=[RE3[L(]TLF\[HbZ,I[?0(<LV6dU6=2bI?+_O9G#IuăU"x0)2e4S^;L&\sYe?[XcYHnp^*>-4.+M\rplXhEPKz:DM%M*$[SOx&_f-(0AZ0<PăU"VLi:bej4$*$k,<Qqr+Dc<rpEj%&GFbqM1O(fkw:%b[UY4'sO09Wes#D4M/Y++^]ăU"TP)HMNm*+1;+ZluecYx9G;>W69eU&0-XE\J;jZIM=nf[u/14drYJW?q[)(=ZSMiăU"faP\9O[_Z1B/TRSslX#XrWNmwcU0u,\(laZOtwnw>rRV7UMH.NP0oBGt[S&l8&HăU"27U$(2YoM?p29wl>H0]ShAeAur&yk,d)*z5FK<AEa8ctRLAK7M0N%<A\rx7s#<QăU"VsXQCnnqvC8w>R[5J1*>G6kXq[N3E^z?GYgRR[ErFnGbn(25*ciZkg;yC.>j;%?ăU"QYV\pat#Hg0m6Hm<],Q3CM;ZXtY6keiVPw0\J3'E[o/?-8XPj;G]Y^Wm1kQrJ_?ăU"s(M9Wp9r'WHqR*SuW_]-[baKO(k^vzYpZRLxVja071db-U5pus/%YvdbYSTj;eEăU":EET:8gtF:^=3Ip:N/rvsPX%&GZZdRr-Ieg8G<1#EF:FDHT0WVL#\=_m'F8r9^AăU"sjR99?*+khfnY$G-i$qRrbz_P[pB5hq#x/\G(<dE^WXZ(1fyknK(&k,7y&;WQaqăU"lknC^%Aru[7l)i0N_j<YM:Op9hD48ad)lLISu18[Msn/:We0=-[G2ExmxIFs7bhăU"_dhRB%xE8n1+Vw<%dSS3?,8^hlU=7W,(NCVN_vb6g+(rBOi<%^$g)H9sxHo5Z?VăU".O7*_1-qaaO(EVWJP.?%zTC#6bIpcZGuA(pN$tLzw)y/:0G%2\4WwhXliV^NiEDăU"7KNeb)%=gh)WSOh>^$Hr(oD-IHS-4BKAy=G+%#tw8-uXy,'PXx+Pibi)dTSk[jRăU"k<IJk:wiR6LvMQM/KG&>_.DU.tV'8;GnvgJBOdeJ$sywO([._4Zv6W,ZeXR5BNbăU"]F.MtYX$>N]xchQRI?3uEcp;$8?3a#+K+fbDMk'/;6)Nj7O.e(rfrn^8rH#lf>YăU"dMhyJI_=X/0R9GT/jvU1$k%8Bb/Rv>^*IMTTkw:k/xi^Zx,uNtexHkrx(wx;NgxăU"#umn<qr80Ksj&un)s#+qN=qrx)WS_Q055uNgBqX:5l;xv9oN+L$fxn?R>/sudF>ăU"G2u6Fxn<enUs::U,wdm*cZ?ubkxB<q63=s1L^x/O==qi=m]?p\uDxF*la+f7V,wăU"9xGl0qMiuxktq8kKx<S^qk6Suux>qbclx<#oh1qx5Zk6kBud^NY6?xbcd#qruxlăU"nds,ixBlnlVjKx)IeuxHkxb(wdDcxxTZNxUDo7ozkdO[YDBnuXqxus7,5U7ZiDWăU"_a&2BeG(&Eu.a_0aDU\KOD&fprFIf.p1z/>wSSTcsoPwQH;xMtrt]+&]nRqQN$>ăU"3cDG8UAo>>vPH:oDlwXvkYfuX97RIOOrun=<l%qr]XTCEy<XCq#;].cM_(a[XOpăU"Wbq$qNb$mlWAM=nuXO:r'FdGqx7l-x,7?AG8&F8_mX#Oyv,q(OWoF\d&Q$=.wgfăU"l6lcaluXoqo8R>=12]n60wT<D_6?SJ-rx$=_7[N3iwivMo\e[Fq(&[ns=+NHn'+ăU"xH).ZQ[hAMDS^9Vt^/8qXIh16aqfp;_xk:I%q*8#Ny5wkGYm?ucX[$k>sgrH%lpăU"7dvh[E;8rq.Qs4ny&RSOew.7IX?eI\hv25;jsqdLT+'\kIehmmaoMHtF$]e[]0/ăU"coN9xPnkN]x)MIxH8Ng<UEcExDjmjN?q.yMHQ7'I+eMwFv4u5ya1NAi)rx6t.sNăU"w(aB898b>9FYtEFLz-E>M*^Hw\o(eNg,ChVX<RtAVBbIMyf/oahkx^y#EqCd::KăU"9agrlReS&6R.&x6mrS]utyq8EG>]V%8:&#<BAt:KH,9vzPnjNNqd061Y$uX(3AOăU"#_Kag=qrlNG8txM87sogRsIpB_=UO<7C?/ZqX3wn57Q_]cZsMM5)'9O<75k5SifăU"wQ7b$runu$Xs.xRtJxf/X\Tc8?/rY&AhLgmUzq86/i40_83o\'J^dH5CNfKnhilăU":]Ex:x\NNcF4e$hxST^_X'\I7U#&P?ejOuNZl;2BLOKH.+2xUT0#bp]N=p5TInQăU"Jj&AwmdRBuy:NSLB9B;ek3;RSyu.W;]<NaOH%RU]W,?bQx\m:R+qGj]^bxMjl%VăU"[cWocc$CeuTGiv>q7-1i:j?:HV0f]YH\bhv8S7HcNHcaWQX%l_Wx150L3:fsqnbăU"M0P?;da/Nk2?ie6glOwrWv%yH*prFl;xjxZMSS.cA(*G+=-[B^7ihddd^RPaqN;ăU"9Y,e6$x[#[;ujX$,Tc:iwCc:n;R%%Hj^<E7B.N%2.%goVKnEnF_x\$'x$rs]V98ăU"npXFJ;YT_;i^hVgR&Zw(l%gFMu_'']H31?0h&nf2%X8N<9ed/ysqNYmH+Z20<D)ăU"LrVa3N>,+2RZl0qdiOT]+9n7nvu^GfFH#I.&0Z.V]Fg3wiT0,BD3B#_7W'42?iHăU"LZTdT&xZZZ&T0<CW8s_&sz.B32c;--MnwNZOEX(BGwdml3:;)9._w%=g/t%O,SCăU";SUaZwbna$:xf&s8[?+P5n6pxpd11Ns3\-.AbJY>:9u_v4u(hd0<;E/wYKalEYFăU"&W&KsC9]xn[d=(<_Vv'kpI$3uC;3'c''HRVZOHuVKh8G$nL7xgt[q;YNMvN0qTfăU"dSn<wztSr&lsO$v4^jPg:u,wBJpx4q)niL_IF)x]]0uVg/'D'&uV1^H(Y5-_vTGăU"h<-91ugDngLq8AcW>m-LiL$jXlvh#7(:T*F6Y=cF7_XUGvLOgQhv]OPwn1s7[:iăU"f0FY]AA9$7=OhxHfx^v^^H(2l29KTmrJ;d5j9[HvJECvF=ZlcHa]qd(gduYw.BzăU"c4>:E<KL+c:vtDW5MfM9R+MnPbNocXw(*G^)Ulcu.lR/c*3%QZ=zcvJKl8N.WJ^ăU"UOxqo8f$x3%nU<OJ)=N/-W.'PJ*Kg_hY=auEHjxc$]t?YZv&s/Jszw>)q8nc$x/ăU"H-sr7a$H>y^RhD[G<Var-5&i=)c\$auknk1vGDwTQB^Wuy3iNy(iwnql-x\TbSNăU"N\&_,N5wB8izA[Fv8uIjpkNe96Vw_MeZK[szj]$c$xh4HmmV;0N^_^Zac<+PwTHăU"RA^(\n,a:xo,xnuth[xBYG>xfVg(sk?CqEE3oNvZc>qqxJfQxnPICwzJfk$=E\zăU")NrO+(9tjF2saZL)x.L,l\Ghx#B?P%<=XIH*wQxLgVlu8(NoHJ3l(&fpF\y;L]\ăU"bU=WUrhL[>v#]kVS+AfThsiN:[<d$9hmYVD$G&87'TFT_DMh#t+Zxk^MapjixFpăU"\ai[WaJD7hg#d>dm=9ZxCP\POAJocn.4XE.pa+gZa*u.?<Jge)Q3>5j2csnx<##ăU"3ldpA($xqt-Zx3#4Mz<G&uFmZvs=d:+l8q0Mfd9ieg93wNxp6q8+d+Wj3/BC[TMăU"thndI=.uGS-k(wFTH8u.n,cI5ucs#l9uDbal:xtwE[8F#,k_YIcqx.kPN2Mh7WfăU"6rayYJuP.\Tvswn]Ut)xG\q6?p0ao#Pw:dhvp76qY^>uDV<Z(GxN\R&Y:-xj6;jăU"t%Hc0[n18\-duvh*5&i,NS%x=Yqx..5'lsX8(sVZGxF97/m]dWr^IN<8e1.o]rFăU"b?dL<uNqV+G4W+5/tDJr8svuHd68SB0*uNs(uhwjoaFdl'Y(Vl%8<xnsrghI8G:ăU"K+M[c&jwcXP*1G&GdX]x#Lqixa6u9x1\qt=:j$m1/xH]j\d#Hxbgb33M2wHW=i_ăU"taYxFhLDYx2f%8_cx(/;s*;xBo8r1feq\.>lx&YxbvAZLuRtx,lpx6huxHWx>n6ăU"xdutuxxZ,Hx:KSTn*pXLwxl#8k+t5quxq^Nu:Z]nD.uGirxFIu1noxLw#n98wnrăU"D.Gi$rNB(aTYd1WmPoP9x(\,<LJwdRncZt1DcNUZF$xboGd<$<xbiXtKwx#THTYăU"6uouxMI2uK6PnxnLrwNowuxevxuRtx,Qpx6nrxn^xQ,uNelxxjiPNT[%4Wxn>pcăU"hxTt;8IPqV'T0ZhR76KHCKAsDP(0G>xZ&q**T*tB#SMnBEHlTx.uV>QX,btPXLOăU"?/(&riYnMSrOEcUjNYbrr8]xid<GLti7LJo9exkt/l_D1W9.0L4ojvSem_5,jJlăU"N:2NwShQobrJto0Y8?2ofvdEdtm\25tv>brxX?uofl3([-^03TPd?ifaVaETMvlăU"Q2B$dMdhxm8t^0Q\e..s#v_ML&T>:C$?yod'dDgkqanENxP&yFhrPr8r<HB=b)hăU"%li#77JLe-S5/:n$ajtt^fx[jarwpqfWdZXk:_ui%+fgV=2$GD%$S>OxHPjGNEXăU"dP&_wN#^fDG+]nZ&b8GxudPbVmbtfw]IjZm*/LS&)XEKco*j6a&E_altJjYNY0ZăU"*$Wdbp_Ism\P(<>tM+=hux46d_F<IBT;WQ'Z:JIY&*(/,$LhuQ':Qo/%;O^L/TWăU"4:4zYs'bBZ+>,UFIB8yB'=l1]/)77VC1.sbPeQx:;?T:A#LWXzO';%*wV7sSQ?_ăU"^&RNipMMh<NzRej6whwZ0gxqGn%*Bgc-Lt;EVvpH:<'p(3.j&qWNdwjtv*n=D('ăU"[>jFfd/'Nn><9g8=kVHa8cOvd[[HA''=\xWmetF=D&g'+tuEx$RY(twNbE/08'săU")/-/m&v2Dqiv+fW-Mx'wtap;U/%tPn'f\fvpuuSB(#)i+M*pGNYJGPQxSncT^2\ăU"bF,9uT+&XKr6XrTQ8xnl9vSOlZfIx<EvdCK6v3(hFLf;?u=0hx5QxG:NN2,N6r/ăU"((Hx$?Aj?N'-k.c>xTwttNux1wZuvnn_9tki\J*a-Kq,=jtWpNcVQldwlZq4xMCăU",MBD9;&;js9qL7oxlus,9v(4p(Oxol$_]q)42dIgQtNeQVxP6KeFoP5NrAputxlăU"vHdsK)a5j7Ouov8bfMGOCqXvwF>56rO^^[61SPhY>cdwTsubusL;IZx+:a)Z__yăU">W)t-(HGlSpNJsT*X;?8UW'2NJF<b(p(Hu-/hx$K8JquPddHcpq$'1rR>1g%N)păU"tNY(g8B<Z6:4\p1e)xO=YNhwNPEO7^uOLvTj$jN6KWYpZfOXMfctx(u.<vNLKs\ăU"+Fb\_ZKs6nhXlxH-.ZSpx&u[x3xrxDxxudwxxYAxhk<5<62;NImKcubv=$pM?WZăU"ahBIORw7ZohdwVL^J.1?,xv<W6,uValI48<L4q1SMD2z,Kq5ct7\xwJp4VU><^<ăU"F;NEY(Webh>HRjDjTt-[]kOV>x<RRpMNYpM;dcbP=HLWHmmdY7PO#uAAuSbhZDVăU"vLRR&WS]rT-a)2J?A)cuYFwqWSamS)vX^SKtoDisRVq,.sBaVCUpMm4DHT=eon+ăU"bJq4<Fcw.7^,MUf>L;tRKu,ux]vBe<QoSMNT^ht*hi*mhNIv\>_hL56eT4EqllDăU"2da5u6tV.]wpfvEMqj9s-tZ\qZbca:(u4&xVtl&:Bq^Lo$'6h\VTau64XKPdKERăU"23[VgT'Rvon_uYtvj&9r6%x\<if[42o.]d3--SD^A-T9g4m)H]\,T=EpM'L.5dGăU"6oqnuYajd5wbtdvu?Y^d&,MiOQ;^nwStMiSNZhh[.uvnHva\YHss2qwTlivn?rpăU"FI(]#di0uivWBLx.SLb^?)Mt:\\u-p-&v6&ENRfuN5Cd83#HbS&Lt[U&b=op&>tăEND SUBăSUB V3ăU"m,21pkit]S$qrxGhD<Kxs&3X#hkGYr$h3DXX^SGDhVDZvsWx.mmh%xh]JH>alh&ăU"b1E*lduE^(Y#cimVwc-8,6Qx]IUtNv$Osbwm]tdd-2DMD)N?MrB:HnxYkI'_v>\ăU"Ohe$sri0(B%M/2\;>ohYl*WVSy/?HV\F.%mjV*?p>;Cjq&:7YKC/tR[X/tRo=#făU"%00s:#E%zP:AOz//-w>;&F6(?C8e<?*bzl)hnI4rC^).MhYz+'pS'P&\.S)m.C+ăU"GjJ2AH%oB4w<8AqA1pbpC=Q+,>c)X,^S)t=#C1;w+bM^%?rl\ZInNLixXUE>ik*ăU"AZrc'Ai4^%MZOk?E1q?F\AMw7M%8au3gAqKd&631o-&;Hq5tNS2fKf;'j8ow-?\ăU"ZjP7hDw2v(iKefUo)T?,sZ>^6p;$*seVT9NOYJCnc0K757r'+In'5;CR4OXedwNăU":72$[rfYDAWioP.2F7=^u1Xm&6sr/(:o:+\a0*0TL-JZWV-i+IY*3h_/2SCFkITăU"(dSb<P,ih8GN_*3dS0FMZ4U\29GQDXSIEtPf5CYrqu:Y[1jM<E,_$oO55snab\păU"DCV<t2\P7jaQu7UDR)QjD^$FZel?bq6Vm71ILl]^Ox?_,5B^:r]mLMa/4C$kmqbăU"kODKK???98Lt0C&p.V9;1n$E5.X*)Jm1k'ZO=1_C/Y7syXV_k*h$8)i,)cltN+#ăU"mq$e[$Hc+m]s^4<*w3n(TKKH_aX/Dl8r[WG&UM#vJ]SIPBn'8nZ-86u9&:i7o.\ăU"Qo.p\[o^lLq78Z_XzQ+)saIp:WxDGOw=f46]je\L2vS[3%85x]toOUYk$bWtT:qăU"#)cTW)h0QS9-HcR2Dr&wc(o&0o-koGn1lX2&G_aQ-F#5I+mO6'G^%&70&<p%\*uăU"K&s>iC8tBKa&L22+DQ7ERvq+N/W;s7tIOC>y\p+3,W9VTTx8g[aIOOwWGV.NS1:ăU"e'Nsad/)J5kooA.G)9pKZaHL[JG[fkMtRqrOEZ^]8kV;+7F6+%<5nH<gXc&61M<ăU"m%5n,pf(k=o+sDq5Jn>IjJ9,M<#=0Ld7lF3-M[K$sK9p^48BTV_OQJ*Kj6xkFx%ăU"\E,AsO<5+LJA^fbz2htRml21ARjh'gQkXSLIUT3CE'NiA'qccF:;,iuQ+mnsaHKăU"u9PAoOUkB_(/4kI:)*O+#'c_mSMsk_]4/7r$L#&*,(_GbCOtIz$=g8sH'9cYr)8ăU"OIwV?7=;EQadZP_LKEje7EWRt&HWLT'Po.3ReGl)Ei0**09g'gugMQs+?X6N))qăU"Z\29E4SueoG2QzsFbQMG\kqcEK$J*>TZ'R5E;9Zj;]'x1[dayj8O97<h$BW,CYJăU"]R]5h-3o(P$%UU&:T;#e[4#<qJTJ?M9mM2)M*=N$3OXn=+Sf\asRS^rZ?;a'=TWăU"f5%N<S^OKH7>oO6f7k*&g2a'+o#6s1$z/8fcA6.ZG,_3EE$Pz8Re9f[.cV%ReM>ăU"6(M*+.0OTo>sdeK>&7qa4q3ZO;WUp-_7d)SZ&vz*7hceL>17-e:k99rs$jI?J#7ăU"]]/K>%yZ8b,[[&jf4_O/3Oj9(5,EVnUC06pu1I$C$8<'/0LeVpI??r*;<5o?Q\>ăU"JCAZZ7^R(6B<Wm8;SZjMspJ7,)k>N7-/*;f^,F67Z9a*VE\+fH/OZz^gWXB9UyZăU"XMUBvBSNBeET9pe*dh_qAo](^10/;fW+,kkQeJ3DdVqao&7M+,oNM^3yO8KPv*WăU"jhFy_y5V:&#[q=JPWa2WQfeU)/XLJI<<(Ank-h]&ov[yEnKv2*u_ns(onf*+._XăU"CP1'CA8sEsCo\<H8k[m&*u^Li2r]mf2]mGzK;%&AO+w?(IA^hBYGmvh5r,Q7CYcăU":m$]gWiAO59sAbs%uG)mm<O[3&z99qJeR&An[GKExxit&=D)()bbnPP[zyV(,:HăU"2[WeSAcs:8+OsF6k\*5PhPua<VWa+2QURG9FQmS7FInpU.e39Yf)q4>%ikpHi_făU"/5\fFr[QFl[R#A,Oc[GnOv#*R)4RX?^r+AlH$2Wk<'9i]pa4xe/&*dqOBUHPO^XăU"4Jus4d15SsJr,Q\te;I&THE039RS:fHte&g6=TrKCn:1^%?u9BvQdFdo30m;sHFăU"SCMG-?Qa/ek\w>P]/+#k?=sT_apV(Cu]:9>IeZpFg'c]koQ<nZt2kC4BaQtCmPUăU">ye8%LRjQw,#p(KA'<:*kG/J-Gi(5>*ObbCAFsAkTva]K>eF>+jk%Kdl=)UquZ.ăU".Z7ZCSd_KTOc9&8ShEXKR&v/o.l-VhhQ?>YWVRo.#sflG>b*wL-b^QCFEYW;:*DăU"c:BO'*SH_F;6EIzUN)EBZ^Q#ug,Os]9ri3/aCd$x5PRve6igxB,Gb&D:1r<e:R7ăU">lfI#pUd%a<=t]O%IeVY#OF:j^1_fby'uq+M#7jk(raU9N3JN1wc<LZ2%dBPuX#ăU"YGSfjQ$D'W&-Qg^nJp5(r'alk+jPHxViJZcP0/AlZQ\uquNY$+;CE5gaYZtlou^ăU"A'_-*lod&=3y3eLaOkc]q]6ZYn??[o*l]:-ew<Ip=leA=md%Z5JMGACktkc(<JsăU"Ulawu']_JlXME>=AC64L<eYSrZ[J:Q#wS=WT#L)9l.i0E$snslT[b$njV(5c-u5ăU"=t<#hU6l,_CZpgwll'b=Dp*F[TSuGJ6j?wm+eaDbKVS=<O?N6R*G1_eT\N4KcffăU"kVFZZ$V4F7QDE46L]gD.LnRtJ3XO_ELXwaaI7NQPSP]F>+b4Q+^85eEuS'OU'[KăU"w?.LZxI\cD84g;VY?[j]wKR?pG.dbuZ2,9OMHchi8ZJ71<q:N-ufwW^#W#.#n55ăU"BzSghS^w%,up(%)9%%#%-%o)<fD[d+XWn%&%%%%(%%0%%%%y(j'yz%wjSu#fq:^ăU")Pu+FU5T#)1na$I(H$InVad.MTPcx2oV[Bb9EY$0%%3]t=%7N.s11QPbRfh;/vYăU"KZNwD;jKBt?Ma/Gs?B1^3_&?/E%Y391A'TvgW&DoF]M^n^+57>h9YV[;nK#C9E1ăU"Cq47N>(ES*WQpN7#eS]+;%]1I\g)U1/[#7G[]w8btM]9/<3Zw76GLos_Z%-/%.=ăU"Y1GQB3AP9$k,EAn?PtF/v#l%WW3:pS-[&>N[]GMhS2gZnau9Z&P;k$N_eHRVYr:ăU"O+Ber<3J%+Wo^_:\XOm[aGYY[B:wkon^,G3o(V%S,B1jn^l0d-:oiJpIZcD[YD:ăU"qdP[wMfr;t&u7R?XtG.;JKEtR^teab,9.mcW4,&8Y6sqo%G?S)*hLJNJBMs<&7#ăU"\832_//?EJt>(gGZ[P^NNWBRlzb=SB>s'*uoZJY;;]g92K&K:B-Bd4i8M<aA+cLăU"zG3X6*=kwQK6[7h*q_TjpGfbG)B^jLvJYtrex6_a=cj6e]2%CO#5l<-]MpqGDM?ăU"9Xr*&(Y1&N,DLea*o1oTd89Npzlsm:mWW&HDV+zn?9H_hVo?bCcXXVPit8GrEhiăU"nDHPHHD,uP6Cht9hkntF(.wt%8hor%HXpqJ^$RitIm$Zpt6>ZrttJ-XpDu%p()9ăU"%%%%-I%FJf=G_4D&BY-%(%Y9%%%1%%#%yj'%yrfu%VSfxjr.'X>>SC7hMEsuC4BăU"DyjK3kA[+'I21^d<q%pj8927>yOR4#5Oj:T:&of5wt.$X:#pmB'GIh3YaNYlh>*ăU"_jD$li#J7M]^]^(%.\Gq$fY_B2qC2Dx0S.\Ywpq+K+Qoh&?vC.Got6LCYQSmXB>ăU"It=092Z1aLXJ*;:t]jI2.?U9]1uU&MrWj$(aCiujMO.lDc8R[?E+P\],L&Hpr11ăU"e)JWquPLEbDFZ)-31j]^jG+(;WYY6i_dT.iQBM?O+KlFt.gn6I2G05T[rUQC,';ăU"6Z*+SJtcR#L&4]9>1XMX._>x93MaDagRBh'^*I8(Mc]YD.'pt>b$1eL*[(jF(Q2ăU"JUt_N7&Iqj8P73<d;I?PBG)aa>I<DDY0Vd3*3ddv)',_iMjftOb&&R=XN%hwSX-ăU"O#%<+WHvdEFru9fj=>HUMTh+(8m$#QtYZgE\l79VWH1KVFo\rHZq#U+8C4Lc$6xăU"qj-$Lq6(K03/=Az*f_7bwL6N/qdi-:r-;K^L)su8^:y_AiBbRo7TB?</=),YXb+ăU"<4p+3x^VFMoNp_Ke*TSPABv-K%eMJ3u42niDtg83''\N4lKnm,LWHjDgs/U>i31ăU"K,R7]Yul4&Rl=fnc4ECQsMwS?WZ$*0:>XrrhhKw>Q$7Yjg\F1TcuxbDns3KiT<PăU"fXuSMHF/R>D837zO#''s^l^:dDZ=s_AAT+BCtjM\QqXXm6Jb8E/*hGQpE7<_C/kăU"txX[,j(JQ.zAz2WNHGWl*Q1gFFCft0j;mjCATEebTMe>GPhpi(D)g;)ZTiNLX9]ăU"^A[c:u+gOj6bxm1?RNCg5V-ZtGMV$yq8QMLGnY2IjZJ\/_t/8Q/]VKNr.G<4FdhăU"]X>Vr[J7Iy]fv%R-pn6RACi<lXj8/$k(>#Xaa=$JeOOJ/_)scZwA[fJVj;EfAn8ăU"c&2k>hK^;qq*C;juJnn(q8h(J.rkU*<jTWzn74Pt^T=+#i.O/jZQqd#u6<%'^OaăU">51R2k[#Gb9x>>%0qYC2d-Fne#7RD-UcKBH4P4seR8P.>4a$kXBirBlQ;0Bb3O>ăU"^A4xGB_\6*UP5y;Fff[j,UQ4AR&D?=#wGIk6h_88&qSiSPnkl:i&L(s'egdoL_qăU"Ppm>_c^5xrr2gppz&c<:r]/r%L*6Vr&Q:Z.Ge,sN(i5]^70A<nK*oS$%oY[\0NqăU"&9$DUHb*$h3Gmsxwgq:s/F/DpZp:WsLoT*Po>Al5'5[h(ANfMf:bV3lBzv:jywgăU"TN82S#NR6UH>:j?h=hM0?7VwU?P#-Z0T\?jBP>Nj5hR74r5MHo0&k>[Y=vkuZx/ăU"vVD&Ir$9kiiA<46rO$BMiZjJc)w_sTt%Mz>4+%i>RRa*No(Xp8Dkh5vORL_)1cKăU"<sOq',T80HJu.9Xr]+OL8KA9T/MS89GM)vqV,,5QtO;[AQ2,)<_C094WBc;+_[JăU",E69#H_AvrkAS-Vh#<P6tgY:aSpjmA8s$l,bXyk6LQW\Pk/Q-8WR/19EhUP42T<ăU"FbG<pw<HVn[L1M_rb0]^FjZel,EI?=:m+X4ON\QS9y1>f36fAt6q/$JjuNEO)8oăU"9Q+:S8ry=+]G>A9.^(Sx6UG6Uhv'9Ur2yOW30_[kK\3>fN5B&uZ1o5=3H8BNHE^ăU"0fhQ*P/X6-'mAIptH&;?gRgqg6Tt]VqcoQ[72Io3:w;:.mMCs[TS5TK)S)_gvd>ăU"oSqcl*oL^+Z(+X&$>UO1KN&qsSb]xE0g+-1dwL#ki'?ed\g)i?5$HC(r8z2P1fFăU"UibUb3p<A'E,uStVmgS?74N?0z/[ACsUhTMy[M\v*)u)[C0-]FHPb40df4_04XWăU"B-K&]yn$bZ%^*d$=20cJ]=474$fh1K:GYL;#0F_Q$rwbMpm44tv%c(;)Q/3aB7GăU"D]%N\m[]R%$0nsH6G17_ZGI\PuN7-g,>hMFHem1\kJp3X8UdEsIi$%xgf9\_(/xăU"8SE2o?(MeN.^pPrf,eEXzY^I%O<^9dYfRsr>E[k<=,CL&vIY8rXu_3Sm1m?OED4ăU"HCU^jQOAj[i<Chq17]qkwhbMNPXDRK%]fwauRJAh6xr^Ge$(;jIhM-.#GkXu3i3ăU"/n,HR/gl'(%I/s8lLpSH]-]?aoah.f9g6\\(hnFOA51-'8mNdx5P=T+BjdxBfO1ăU"ei)6g#mZ4jlK>XYVQJhrCz-n%03rBma-UcNi=Gey[p6t>/D33dk&'tbO(ZHq:WUăU"(*D'KSXlZ(3^X:B=]Zg^O6g,OqV]5^m)jsSS$&^RqSMF?a4&F.s0>vCs4C1XHbSăU"ZZXydWLezpb?d2h9CV9sgY+1N_Yo.,%M^[4wH/=?uYThM#Vb9.FwfW&<ms(cu(VăU"bOFC:MR\J#rZq/hmWg74jZzJDNYWcHhoR:5K\*hl3c=jLi>q+ggqmr8=nJ-o$s?ăU"&W\r/#k_4>XLZ5y=c<?#lTN.XG8P\;)PM>WylY%z6p5GxPh*B,Osj^q6*'<$za9ăU"NBZdY9ESJEBIp(3V*jN^gwKHC\],b7wYFY<6Xl$EH\)2,z=:^3Xo?(ju\7^gdoQăU"-C[8V$d^1,RzDLDrsx3T49Hmi2peGQGBrTY3ZK7*RT6&5K0xGB$8yc16w//^\WyăU"PvZ/HfcWW+aKrPpW0<gQr-8G.'cY7emHoPkSETgbN9StjKQ%jQj/G4o4KV;mAC=ăU"z%Z7^Av(WE/_^kQMXxko7XSx%%up&%'9%9%%%%-U%K(fdGks%,il4%+%mZ%%%1%ăU"%%%%%%%%&%E%%%%%%%%%w(f(hf%xyWS%gfxu%p&'9%%9%%%%-%=)KIG=VP;L1%%ăU"%%K%&%%,%%%%%%%%%&%%E%%%%B5%%%rfu%Sify%up&'%9%9%%%%-%)viaF]aJ-văU"&sk%%+%Y%%%0%%%%%%%%%%%E%.%%s5%%%yj&'yzw%jSif%yup&%'9%9%%%%-L%oăU"<f%D[+X,Wn&%%%%(%%%0%%%%%%%%%%%E#%%%#&&%%y(j'yz%wjSu%fqup%&'9%%ăU"9%%%#-%FJnfG_4(DBY-.%%Y9%%%1%%%%%%%%%&%%E%%%)^(%%.yj'y%rfuV%SfxăU"r%up*+%%%%%%*%*%%#&%%*f0%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=154AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăWolfgang Bruske/Thomas Gohel   PB RAYCASTER W/TEXTURE MAPPING andrewa@indirect.com           04-30-97 (20:15)       PB                     485  32009    BASIC3D.BAS 'Load/Run under PowerBASIC to extract BASIC3D.ZIPăDEFINT A-Z:SHARED K, S, B&, Z&: V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BASIC3D.ZIP",4^6:Z&=23720:?STRING$(50,177);ăU"%up()%9%%%#-%7x&(Fgi0=E1%%%%K&%%%,%%%%rf%uSif%yX)'&2hUU#[+WGB2qăU":o'95gGJXM/WaeM=l)APrUC&1Hg#?h1B71vFV^'Z=;)PxNuM\hQQ#>W%Z.e&g*LăU"<PZR%i5%O)1]%E16Bo-,'*^q7<m=6,=-^yR)2iA%fE%u%p()9%%%%-1%via+FaJăU"-*vsk%7%%Y%%%0%%#%yj'%yzwj%Sify-e64q2cHmK8-wvL57L*PPES)2WP#A-B>ăU"oo6'Y_y[&dhRL(7kqwh\3A#kt+r:_\jGQ6&E;<T*;X]qo'O]]0H-V']g.m):>u#ăU"A*,V1Ap[Zxawb_9*>5yu2#&JYg?lb2GkpanNh*Wcl/IjFovS#0]vhvneKdnhu$xăU"l7Z(mLvgp2^hO2>2$JGaEFHuJu3AZJXv5:PXdFa2>^f>0+gIuxwx;xx'nZOWCO:ăU"tzm+hQPOT?f;4tVn5&\CbK)CLIE:KNu-;&b%l6P_.4SdK2$MJl)#0,>Vcc'&peEăU"ud<-SihD,o'L3*Ui_Yls56tmxbsP$k<Rl(jP\*4DXV[.A*oN8hAQD-3+/MaMTrgăU"A2i<bu3eO8.w:I/ycHI//+-dR5C2Y%YVv7tRhRuAqfhe>3,v?gBfp?4CPlT[(nEăU"=l*\-X[1c?B1pa+q-fT\3NQ)eF0M*RRuGY?c1iSi;:Rnps;u>hqMN\;-'r0WAI+ăU"+1Zj5%RL,:I=gbM'Y2A7)bCfD?eJfT?UN3/wx'92jAgtnEnE=1b,Izd./c*%2^ZăU"^m=/tYs5KMRJ:1uXvJZ.%C63?Ojqz))oN5]IOPD)YZ0Ao''5t$m8aKj8rAD3+FBăU"sM+WKhHPI*zQ#\.cTqto+/N]-u/_Dw0X&flIFb>3f?D\JoCZn+Jl[iGpHbLmsq:ăU"Z^XX\='^?xZ/$h:P4>ssgILpX?vZ,bte)C'd]NX%CP&BZ-&nr(q+Kr$#Tf8E,f,ăU"eVT=7[c9#1itV]ETKHt&>3f55[D==3ru?uWR5Y%O9d%<KX]6Pz=zY04k.'OrPwxăU"ek(BfDFGO[<yUQ>F.BR8$7).V81YKpi-=agAT9Q#MO<U-3dPOQxRWkdimskvjg*ăU"Lv>L7CHcGpVk;+S/fO]VPGPYXBjd^6#2x0q=RU3,/6kD8W>*r;T&lgSH<\><VF\ăU"hE*mmsT=g5tj^OBZeZ:f8C#N9^.2EMB*9S3*Bdg2[o7KF$Bj*(Wf8h=V\NDFck1ăU"*G]AZap%JuJzH&7M;NpdP,#PJ[,=efpz((0Tg&8Ivl:JG5RV+3:DC'40>%?tV3\ăU"(=Zj+51)rJUPL^F<\&\(bLDS<F)*0*KU*=Ka?'dmE^-2-5/in14*Z\_#l&YOuw0ăU"\*_m')3VM003Er$i^W'Mp7ED]fSHJRR=#t.q\:9OT/ga?JLJpu,tF,_1HrU=5t*ăU"m8Q[F5<?W;CdQRF$[hF?###D><j#+s+[4+*U-tBn]BMCM+=.oB'N)4Ca=2hbGA(ăU"bS-4u^Z<<XRdM&*k,E=6l]\4,l=c;dS)J5nn(^]CeoMF^cq?=&Ef\.0Df9F^D_\ăU"F68#bYDDVW.a?%D>e:7=D-\_.OnDc,5C0=4:gS'X#i9^z8c0:+:MF&pvdE=C$8$ăU"&WBS%^R9%w?]JVL/*c11UlE2k</11dUu&Hg6j101:R'0<g#ksn5l/vtc#h2?:,WăU"]35fh]dB2bUCV:?RN-]*G3&jRuDJ3/q9fJ'_V1y&F-ps0qSGO80&X4=>Sq#UFF=ăU"FajTk&lEmfmiIY*]/-*Z<$lG&K1&A.BC/3]TWXf5[8Pd%Ew,%&]2'cIc)<o6GnRăU"0e%ZCn#Egv;;gMiF=b*x59;UYNCPE_k(OMd?c1t5:nUjbq=G?,1u?GhC)*_&8AHăU"(Fn[;1vnOh%td[C<W;,v2ASrj.OS=C=E5<MVb5+qq4J?ZDAd>lvt:A(JCFmb*+_ăU"(WU5_&-I5R*c-vwOgt64<fONC%27c]dU5PRIHBH().'Q>1LUoG3YpI9e$WF78^>ăU"%V^B?90o#Rn0^E:jl'9DCdf;N=#t1[AsB5Qp%A84OW>r9*\)Sch&FeI*QIr?d0CăU"KU5MtGpbLMRN&Bt3YkVOL\^8[)_R+jJD1Bh+H0iKshcw5K0c$WBJ=NFBH&D^O;wăU"9kOX*,7HkDd02bW5nSH/]ep7'O3>1fDH<#&Q4gnDfmNf7CrC10#/V)A<i1sMf4băU"1F,gYLS5T2oTrZsxRQ920_\\rGc:..vH5t=7C+./yq%CoGe:lS4fnq&l8_HY:H;ăU">kP8#+lDAe:Q<*QhgjmLYBrjr*T_5/pyeqo-[q]\)96NYYwm:NL3Vyn&$HLt,-8ăU"\Y.9DO+g\0Q'H50<'6O?=bFA8b_cb)xxde:qIF<IOoMS^YcGHCAEj#WLsqC?Yg.ăU"bm\25qY^d';&GPZOp)jFc2?ZkrBpmQNtK-JSAo4/-D:]^O(e=jhxP#0\7MeB;1tăU"=$#UG*mFi=q?fqI%eIIQ6-;$NP.i+GYc.)l2u?sFsqX[4C>w<(&W-+5Wg4-MuSvăU"L0VJoyP:1joq7(/J/66-WoK]F\u'#*(3cadP/]<hb:mDsV#+K93^hr8a>j(&c*=ăU"s>$(id9E=JMLQD)%U=eW'9;ep6wYb<;II[QshA4DTEk1RVXOwPsGZ\ZJ(]?_<K/ăU"9llrQwGWFTlrkK#h7F(%d$g];OsSH#(8^8VH,r1o11DSB(Rs+xBr8RF=T$ef.tqăU"rF*Xdf*ejp&C'j\zwui:2bVvN'H?=\cT;71?cMyq0;Z,1$;G<owl7*&O'W59d>5ăU"Q3nJ?U\Q7%x<2+W_E&K<Y:CA'+FF=nsN;*%+jEgRwg=l'xS1([R-DPDcrsfha0>ăU"&E%N=7,HO5cAK6:MQk,%ZNS>?t5f'0#*),Gq^sp0oY#[+y22>MhY6MOV1#tf<BkăU"#6-)xX%%$DB4ouQ\#C\IX3$LvA^Dca&a\)DF'w=uAZ1C;._.j13?;El1ui-8Fa$ăU"REfta-e^;;/e'N5a[AmDVR1f$T,azlVvS].Y/IrcQgQjd_qGvrO+3'ay_TFP\&aăU"BdTK5._v&9J%:8=ld3b&O?;$kHI:HM)^cA;?Ml9O9(?H/t.o-&SO^4/8&q>Q8aGăU"Nd=D3uVrUUbHbdghqzuMj$JbFCClgV0+U<*h)V7cDTd6ev]Hd=xFSX$G[MciL#2ăU"n<Z?P$&RY+jx\sd2#r:TW12bp\7fez-9^EtpmwuGZIn8^iG[NNS]?0uB3D->eZ=ăU"Nj)A'NLoqalFORc4z%V78-GxJ_N2B4rk%Meu6uqBBNF.Ip+=]u)ftVimGI9t:YgăU"MuGg87P[u4xqaARowM/d4PEt/8y6NYT]Pj'?PWAe.,-*4wdk01iYpFop;*t7DA-ăU"#ir,rC^M(pOZ>7r>mlH%t+V+1V[(.S3?sz9xIkvi8Qg5h/F&7I<#7)4jIz^Te_7ăU"/kP>m^V-Fd-o:l$R'4%k(e)5YvcLrRiUV+GkPzIK4jC0VBVvM<K,E?t<tyv[XFeăU"fpHb(Dc3Q9wDp?<7+liqR\nEX&>w[h:%5MsSDG*h-=8<$FQMlX+E$;#C&-K?sJeăU"E>NIQ<*<:lRbM$g40I0Yq.t(1BQxEr&gt]%7g_YjWrdwbp:Ju]pC18$L0J%5Y%_ăU"SmGR/*:gHfh=BjmKBa1E(\nJ*::7_18Wo<+eo:Jh=xEHp-yN#T,emdhXS*j&>$LăU"iH]d\cTw>7)cr?Jx-jI:AhbGBx$kNh[-Zf306tT<A+UAnfgG+d)0R6VGL7O,/D:ăU"*\1U)fj[^NE&j((<(+''Sk;*6vs>3w^n*w?\**p:3+<[CGVR;Ys_LkC)kRH:H$EăU"+frdwP$wIhE-$jOtY%'Xdk*0]uUi8S-_?FhHpv*Bff;:vnFk(*mcB&Y12ip+$/%ăU"Fgj0$a:dCw-jJzY%4kW>:45(g\[fc&[Ab%M,b_4+dOE.c3XOs1&z:U1bLpl\LtUăU"U3VcWT&R9)-/q487TF8mVGaO.KYd6w=CS.&w#edFzK[;Z-68vH$_7$G->>Qw'KnăU"e$])Mvg2f0-e8'eE?_$>6HO<4UX\4u'a2na)<1m*3O544Goo(WTv4QB\PaWUngjăU"nZBlx#\k1%N's'XDSed4;Q#9,h#),+_T\Mr7MJ-U_59:t1VrO_Q8K#iL?wrju+)ăU"n0+(Dc?yTn<Fw_XNA$r:eQf_pOlaAr<rb/2QX9mX=G#Z4,uNtexHk<x(wdZDxx^ăU"ilNR78M=x\Cq)dO9x8oy4;8iNExnev1LEg>*xn5ckp;[qox91S>/sud%.S#qbnxăU"L<u2:-ruxl[L'L8/qGfxtPAvL9gOSxn[)nO(db,w45nPe.m2LOnSox<rHT<jwClăU"rxZEjtuCroxpjL-]xT-sDjX-lrxZj?L$xTb]X>iox<^HP[qNAlwG[xOLP^hukx$ăU"doP4Yx>bd$4c\x.mjQxn^Zx,uNYexx.?;xfV.uJ-ck^#HVdawd7=1uxWCTpHMkSăU"xBYe:G6Xjphb8:*Sxpux.%6PKp$kTwW(nHg+\N$b)[:uxfDAuvnXaRcr%2Rw0lpăU"_OL>]q2Rh1K:R3+%a'+B*h'+O=I4ZXAg;fidt7ZxHCAK'0E(kc(INR0MAiNNt>YăU"sVXL04Ebd%hjoSjwXGoqd',)*#)+yqdhSf&AajOl^af8P7*Y_x#F$Fn4wR4z/35ăU"$7R.<*Ne/ZAi?w6pcbMTD^k)i]FpmY_x8l?Exhc49w^87,nuho49xPe?-vTGpd4ăU"yZWL)4cRT^*K'm&-2,fg7cux5$>60<.GkM#>\#ct\iJbWPsTUe8)#+b%ixfZX:*ăU"(lRB'Bu0C5Fi7gehNDoUJ>U1&doou+8+E<dETX8fNvp[WRL'sHO'xnpH6msm6D+ăU"aH;C;94n-d_sTMKTF.%c=[iC5Mgg.T?x\ctpI-.YY<DCmkGApqadU<HhB1Ml_9=ăU"v2dWEDEGzqd[hnf^uiBW\XO,x^b6x8l3R+#hAQeY8g^&WUm(A\ZmtbG(e7tJabuăU"Zx0?d,H#)S.p34'w'p(uc8Gx?*UEdH2g99(](LL.NKZK?x$ug6wH)*UDaxj',Q$ăU"E[Zw'w\N:Zrm-c;2gbs.9iK+oiAPT6Yni,[V-=X7]h=I;*h3(Cw=DH3Q5=UQ61XăU"Ca&(89-)=a>UiQ$xkNT*uxgkJ10P?LYA't83n]?Jn4_uxh;n/R70sOEZi*RYdr4ăU"[ePkv7/Fx5ZR;8J1i'sIgX:Qxbfk$Y'xJ:A%>Vg$Ba(KA99Pud7y'bJt-mXq<kfăU"&q&Bnn.;^-ek6IedYE'?<2%72)3N2#Oas7CXmLWKXtO)j)enntRnK[]XS?36Q%]ăU"PTY0HixrjYMwla54bBVBw#1Br$uH>9hqptneThR/T7$TTjCmY7?que\7TO;gF).ăU"soPbYV4P+W\oEr0Yp\F)Q\fT,xQ0Tt3V#=(?=Xvc-(3Ts/rx6v4Oc78b8Jjst9KăU"2=N(23fc-r8;/W9FW14bp(3b0HWMkNmNaYNvOuLr]C$db<'uOs$.BYPhcP)\EZ*ăU"&Yb7'')Dh.&6TSPb%\$i#$ThM*3;%Uf=#w79Y<]U9sJv%NS*FaH'%QURPJx?m&+ăU"qE4AA.KJ6[s6MuvtjN)T0=uSU^Dqf4:B[9QZ0hXx.e9nIqdTUlt6fR\<ChA'_aaăU"L\\hHX#%E-k]FOi)KHl[5oqaap3#u68QtnWh&mlnG<$$Eu[rjuK.9BoAu]IZBtpăU">C3laXXBU=B_MDevk1FT*b$ud]O2bu/TuOw,N,8bEtAa_F_jDZg6qvj\tP?k18făU"T8cn].:^0J0-ecvVI^91w_do[4gV]-N52YIl__hz=(VlIvjjYb+<^hONwl'xK[4ăU"0.l42J5&+_M8i_NP?LuulAFjp_>)'b<gpth,O$42g2l+7Hug8h;NdEWk\u.sjlLăU"-QRWvx9%EdY)$D,rPgo9=WV^k5H'lTHhR\HDf=0x#lmpYZxePuT_XR^^._?anp$ăU"xpdY?p(;PujtpxhVB7aLlNFW*qJh.'wDe93+Ke:DrG(+S%1w>+<wDDtOv[IeNMAăU"ksO/2Xdy(KLaraTlXD(7r<aQx<GrjyG?AxRhZe3uPu#iXW5Gu9A*wRBGVdmA^cwăU"'K'li%NqE-vQ.]lU*m%P%CzZxNvN]YbLJ>EZKHG$In6lYI.wPw_37Hrk&-98l^%ăU"?^m]<HDaD_-Z2)X)hR3EWxK+8Lx)I4lLBWDHgKG&IHZp_:.([v?kBxvM;ZTG$)aăU".x/6J#V:(GxDWrn_?#[BoFc4Ka)j'h'MtGE=\:hoXC/SSRlFy$Ct,Ax':uE:tx\ăU"j[RtpnuRZPhd?tf4um:=4llB;BdvW>ZVrMkNM+q]8_d(b.29xA^l[<Ksn5)VIiBăU"1Lojj5g[thFJELa_9qY4($&yIJ],(r4j'5E9mR57;'xvd\,t(mtUtbSPndK8_huăU"XK0:(fEZ<iNGA'Eb3D>-qXZu:x\9Gzm\?,R=C+)4N\)L7uc5mHN?iDpH'1LdfynăU"te-m2,e=3+[zd1c'uszc]mFsl93BEl$(%.d4nxK1Hx<5uB-YN.c+1&G%d=,hP2.ăU"xrb+MuA?nMBNZo[stmHxqxfVrjW?G<>ye=U&X4hNnCu?(3wVod2,,t4yJn6V(MTăU"e.w^Zl,W6H3*n)_I14[Q\Y>gG.YfVM[[Da)SA*uu[P'qjdj>HnL$L:M]QRWuo-8ăU"iMNf[?E5;B3:<fb,rvoG&T$4v>kGJ)7Y+jx,I?p.Wu?(MCn?)oxXu9ZIGux0fS-ăU"dnc-Z2PZ8fm$JDdOH#]wT[6e;(TPXYU1R0rPhm6;xHdrDb1w:U'n<X;pWR(V[f6ăU"%>HUq\0I&xlh2tco$SVr5O<?wZBAxDZrYx(KoR]kS*t9F.^aBA4>YFRadBvn/BTăU"j[(lFy(\=e;s>[x4<t'+9xZ(dun(O?=0X2u7:10CkmP+UI?GzJX_egdTxX$W/3oăU"v+lgA/CS4^hLc8;5.Phm+3wEiqzsbXODkDowTOMl]kPiExU+Ys)xHEsExh:RI,wăU"NbflP\O,A1c:%+hs&cc.mTI\:6K>U6FFfg<(n';ixOqu#HluBLZox3Zx8dQ3MW6ăU"7X[h/cAiWxC:.E7^vDd5[Ze6+5\>\ElCr$8+c9uu[Yn5^=$ja]L>\/BV536:XdtăU"GYNgh>(bbYj'?.iux1Mx[eeDQpbiU>?Jrxi<wOx8mbeo3RJXd<UUoDF7Dc2<=DMăU"j97>qQr[r%w8<Kdx-5&=jl=Ex#%tyq8Q$('2xZc[*&\7%BcZ*dv*SC,x6NU/Y]^ăU"]?hhuwf1KbXP4-*C1qR#IDYq\i'YcnnSP8=in1am)Z:xB#:>V>KO8e&4NSH<)LLăU"7^F5TCQ8VkhW^_t>cH&.wsD$n\OQm>XK8exv+]Z%>8R'oQYtxvJZH95ZjRuNu+căU"YU-.qIFtKjDiY7p4W%b9;)xbNA]d\$81>X8uxe9)DMT$4rsNb,JBPSp']/#?K'SăU"r(+xsZV&jz>Yx\6XSZxebm:F1TYOE$aNuD0Y,m_za.x4afudBouwxevuxRtxZ,păU"x6?hxHcuxxxmulxjqb&HRDp1nxx$N&xOp1nxxHN(cjZ57s9>UHxLrZ6qu=dj8wtăU"ji((r7iZlKx_-.r9No]6,q6(/n:K[Z6$xbo]8WlWRTHulruNKrr6quYN+v5uouxăU"(Mm..LsZ<$xVv=9#t9orxZR$x6uhxHWrxn6xUdJxNZorx(owdDxt6rx8s*x0Fn7ăU"JlxkhZbr?8Fo0hLLW.kLtmftJoe:jLp#vYIto.tB...dB$F%a2qIw:dPxu<iJ/LăU"riJSS?o...cuLtT0Ssl$^*KWxcPjDwggs>XW0>HmSLowx1xv]&?qd/tsNwM>jx#ăU";/b3wTqg4d?A1cLC49m;u\-P7b/N]vcMO1[xNOWxNUuX7va,dJPl9pJi,'7Bb+/ăU"3#tD:$FgAT^LlNW[xuEYkvd:5rXk_Poi<<(,]/yWYvG,j9vbrFdioDLMN4CZm[2ăU"r+,oB%ow=F044AZ5OQqBvk7xxu$X58VRd98L5Ljjx'#9CE'Ab+H+7(3eotr^xp_ăU"-]h<4A^/Nn>rKM(SZKUVoq>a/xtYpFLH71d]-akL%<XX::0l?3KOKhIzlGp&nExăU"GPXSmsHwma?abL,^3+9t9B78P0qNmdPXxZK#kRG6*XP,4u'Yl$%)42IkCqdS$95ăU"p_3xcn5Z8h9PZJJJ>NwmhA\Y+yw^xE]>TlLlNMT&?;V?Im^hra8)9T^^'7?tM,păU"chxT;;bZ,&]G))(tRx,#6rPmi4G[wYnCxXG6C5[tDmabtB3w$-akx_aAdAUYiExăU"Pa<\.wLMMLBTgGfFrjkYHlbYZXV-sxaur8F/jl-&KsFx:.M>HQ>98B6+khM*9p/ăU"nExX*8hOg7^Dsfd,rP2ONG2ltaq*8wdlTbXxxx=bt'rtkwmb0Jd\/Ew1'^FT7bfăU"o9t^xVc^<.jxKX8?k8w)'uZJ8d,E+/aguIlVNT8E-YS)Cm/%xYcZa:[ZHbs2C,găU"Zh]x(tT\2(Bw?nPXuZxxrv5>(,yR?M5gpZhxdDd)[oG?[NNtCmSaH0[h4)PZ]5]ăU"ct7xa<rau<.rP7Tq,9r^9-x[eD4+48ErGdPTxZK$*L'w9n\X%6xFdPaOcKi_C:WăU"x\foP?pdLfm;x6qPD+r_-5&95p?_x9D,G_$*D&GmKm;fP1F&[\XlxT;3DCtb^-xăU"F:^Qx.:rl3bco$-.WxnN3x.bW8Gksl2'a>a(:BqcnExe<X)BiuNUqb(wdDrx6rxăU"rx.qxSj>xyu.qF>oxOquR\<HKtR>HY6=x/27%<u4NUO?T>.nJpHOsN:6V]dV5PHăU"HFTo:i3ZusnbH)XLLo^0id/&R-a>NVs<:..pAVknD';hSH6kZ%JbrJn:rc2>xjlăU"d$6i%$>ThItMn$$*Ab;b=N9uH3r>zb%:Hdq.30Bh6.k*89B;SdL.^8HjHd-h[m3ăU"rX1rUk_kdxm6H:Z*>BO6',\l8ZS6Vm.Zu5vBEWkXN<VZIxlu79wAk\X%9&qkd%căU"Z2Yl689NaOwZ>fxT*d5-5%s6?(n.hItQ(VkCwh<A-2wN:vP.cp+jqqy&[8a<worăU"cd7,7rcJ](otciCj.bz74lxfgOLI[P>fZ8lS#B7YrifYP5LhIKovjqh/VsPtl>(ăU"JnqisulEq&05'[r;cF(u0]RcXus/btQtj<8AKTBL<6Gox0S6H=M_/E/K?NqdbT:ăU"tT878ne(os_r-n9xCmYQiXZMpN-HLIzP.IWi8A.Trom3kK?SMPxYfrkvYb:mTbpăU"DHjH.Mg*Iyw[8g*sOoiyknknq$d3QN5a?wGuMy&g;jWuHuZM[k9rqBqb[Nb.uUaăU"-7lK*]6)&7qe>WBGGNO>lvP&f^VH7.TlD4kb&orH'>r(T2/cY67ED0(uOwQNuf[ăU"e.QRV+PI^^e9sk,8GOwr35GLso?PII/.cfI7D#5^Q$FfJ1E61R\%Dqo=DVko:Y#ăU"%=NBGK7a_ant=q:H-TuAwVRR3UQPn8/I-dnNp\fd2qfdT(=nNTunrh.98X=wsC$ăU"Pk\xMD:B<M<<665G1N]I?2FUYrJw$Y$wG7l-6t,Q,6tt$/t8XQf=VE3\FJ$u8YsăU"1E/tBnV>8=ftlJGo&?]?3l00VtZ<Z*$M?v/*h9:*q?$gV'<;zo;XBvj=Be$A=WXăU",M'KT=\Ei[RlvNJee7MC3G;u%,66r6t66Q,6eJ6ew'UQ4jqlaT^Z77340\k=Q?1ăU"3p?JdJTf.Kg8QrvcvZ;7XD_#:_*9dw<q>x0un>pMg+O2x3w?<6ZiV&VQ4Tp#($dăU"3('RCB3Xxva?eN]p:H#cMK7Fl:k?J*<#_YY[mWoE0E6p<Qa_AJLiNJ$$$UUFZFcăU"T2RG:8=Z6Prqi%D8^k*us#30^;<McjbUL1aZU>fL,gn\9;2)Jp\;PZ/?j'YNcsrăU"U+$bT=u3,.3DwwMIu1.//gD-RA,ES&oqFUZFFU&MZ_9#lgR'Bs0pS7PWWW)6Dl<ăU"O?duZS<vS_/P=kr27qbM?'^JEkVr'Q&mQjv7t,l4*ETb=s,kP&(=T-q<]Oi<tLpăU"_=K[Sl(M6M0IQSk,4,s/np+Zc2<?DHlG8)E>X0/BYU;.zM*0CK,'%Kk3^xxbt\(ăU"U#5fNz$SrH&*7FDJugpF=dJ;<KcM%V#ci71IclX'kP?KR+2uOeVoEw0),46^2Z<ăU"/C/H^5*#0Z6XF'hsKXZ5E:BXq4*'?uOogOX2h<5i&*z0$'5aMQ/\/W;tqp#UlUTăU"dkuf1wa;ng;so[(/u6,3*tI\tTn)$<VQT/=+QVA?su-?Nh?6PSTD-2UYoPy)-[UăU"aJ-IJ%I&u8034[\ABgc&W/rMjPfgRf'p2$bn8fPdEE5qD6$i4m-l3X2P;Eh0Gx.ăU"qw7dc)^F\G<(h_UhACg2oTc*m+X-pUcc7-0sH9>/)Vz\y;>Tj?s>S[+ZwZwMJMwăU"X\)][V1j8?_u8SJSl#CU?q6ZWq2oxuMTQTSLg>PG10BpljW/3G]_8q$7j.B*NF1ăU"[qFC=ijNmW-#nUWcq<lNIot,eYhvALudOtq[(K''5F_uqK6xQHiQmN#pp]Ii1wwăU"s$P\19YEBg?pyt1u&1N84FMb-,uBXoZ[,4CY_cGXSr60dOG9[\r+g9vmj_.$]OOăU"D^K=JC\:o[?xV62l/1TR[o/=]54-cqSk[sdwTVtl<<<(qh;9^_$Ts;Ey)<g01RiăU"9AUml0*CJU6O2<Zp1Oax>Gl#DFHhlg4e.y+3OyGhE-x%31?rC10X>PvuZbwZL,FăU"qjb&<&4&*#6g,WY,4+ITMo#wjaO4oCsvKB9T'Jg40QN&q2FO?0<wiwKFdug?<.HăU")Vmc5(?q:/e7OO8QwWTN7_CQ#$kC[8/85d(;=Dkiw&Nw2HF>PdOu<mE:'dq%,jxăU"/6Y)g]BSTJ+Tu<?:kyH%>2.?>\lYNwx9&RiE%iwWhOB;H]ewo)/CRK#1TtlI#W=ăU"cEUR,43zJ$e\\NE.X>:nd)C\87&%/&M1Ml(vFg7eL1LuUH[XL.B\CPN7D:svfgFăU">jJE%A$+J4-0/jtH4)=aH9aBse6LjWLB5'Ga)#fvc&W%qH_Vud.R:Tu>q06jIzbăU"ksMN;S<s-::K/^-RsA?5gpsXUAsllj5O#d+pvMsOYE/57a>+38(a^1Ys?K7;5:_ăU"y469_VEhwQOFjhNxl?C38QSJ8Z*<1SsL;yGOjZAN(b<[az36_Z(w(;?$4<M%Rv)ăU"*mq1xnd44zGI*aQ/O=.8'J<\[cLkZ:$m57thW'<^3JP(Sxo9->*d)FEt/VVY%-TăU"BYeNO^X1JG<p]stXb&<?Qp?AJ$lUO>dGf02Be/QMWN6a1,1GfJg^njHYpr^=;]UăU"u(/hvTuD/=hd#OXq909cZS;aWb,cgd.nY?MV_w2B/vd)0^h^a1Zqr$*,Z3#6E8?ăU"m'&9sdpRC[:V#]5FcA02?U[.MZ/#DNf(cJZ,6'N#[ydD+mtqVt3:(c2=DE?gqwfăU"R7Sv<v2I_%O_Ek*Z<]%VuIIZcw0&fZ0**ls$-9St2)KAHA)qA,aEYO&Qe7,A8*ZăU"4^30NbrX\w#9l\/wdH;XZS$$[Ja+1Yw/e;##3m0)3i<#l49ncQwtZs,.>if4zg2ăU"NlmTlUL'/luU%(_dHJ+bBN%NBpUOt$Z?Naj9hxBVRqa:Mb3dL_A6sB8x:*/yA4yăU"=Gr=ORaam/Is3V*jUv<QFoxDUEa$V%7Bm;k,l%?-Mn0h8*ZCQ.RK.v0Wby<gRC^ăU"xoVKDD7WSxMvcnm_QsS#b]4E#P/GxAEd*sQS)l6xp30sD9Vl7B;Co_7^j46=2v\ăU"UHe<9E0_9+B;7gfHmL9aF/Fx)?MyEpsxAH4U<TH#E8EY]q8tKaS%A)Edl,0MLywăU"TgD#Mmt^<6&GQ#%L)6[zuEi;<w*/0kIUgi_SaOa?Z?o)W2O$0<O<xF0C$gd&6YtăU"0p?:T5pi'h4lDKu.l]FN:SO11>>fEq2]>_<<9ht1u&w?5*.#m(F]0S]jTF:\y:văU"g+(sC\gA-oKhLp7(6fmHl=AWrs:f(3u04*4^#i\/So-/;ra41i%1]P7sRCY4MReăU"JVi\<gldeTA336E2To1,nh0fcK=Qc->uOsV*J%ly(fI7c/r:jr]?r\/K;jEd;]ZăU"]M1ikReUNXjN6Vg6N?AY9MJ%$ENwr$q:1coXFkG>nwm%l*<a:iRH*\ZZ<T%-8X?ăU"BZbV)IMDDFr:YOi[XYL&z5z#si/T>^HTEaY$\cHM%DW,31)l\#[X<6x-avh=_tNăU"M(W5%9pqP<JJNuwW?g16eJs[wmi_FMcvvU1%JMpy?5gt;RiWtnxrtM\W\<mMDNYăU"^TsX)Qg/<\0V1A^WwlZEb8Rma9)c9oalZu+<&7l[m17<.^=n\mtqxhg_;$/KdNRăU"'c/no0y/)Crx(2av;K>VarT<UH??hgNMI%<*D%_J:AKnCe6<JdZl07>eV%)F7C$ăU"g3'-1DU%47Cit^MN%FFNh=;;-U/2zC-iUg))J#\G&\$j;4<TR8NFO5gLKJT_5M;ăU"-NdBC^'&#]d0YA+jX#*/=rv3\tuhDdp**%<:c&_pw_eF\Cev[=v$]btiMyI:Fk>ăU"0]?ba0['b%qGRjfo(6U6NC6R[/77K\L+*OdR)C/gz'.?#4Imj&1l';Q7*v#.F;NăU"ccqt/q='VFg2Z%dV9<u3#H*6OSF\7n39ZE.lvi8J^DV6.NWn'ztNsLpiXJ^8?q.ăU"w+/-vr.5rA&dZvbHNROD7#pH4Vr?,kl*sYxj7c,n:h[?1kHqaD86<MprZtrJaEeăU"E_l2uR2+%V%zR;FZZT:89OWYQW10G<<N_QKIcNBh..V/LI48MPY:/'YJ5(r/y9.ăU"^?,,&sSKcT9YD[d;A:[\Cm_&#409#[D\l^0bWF6GFt7^(6ugJkqK\xEm*#=NkJ2ăU"[t*DNUdp1)sjEWQ3/)[&t6r7+hCtbNlj)lZ=tv7JpK<0\&VJC+rN4RN[Q^;^gMWăEND SUBăSUB V2ăU"T[0,dNx4*<ju;Y0Ki0Gr$FUbwo_\x&8K./O9n,vzn>>O%S(ySKKw1SgfF[Q+rF9ăU"Ri;4E/r?m#4\b=1p68tCH76wEh\tk(Fjoil]^<6e3KSFvbX3Xts%J^X65HlqU,oăU"'=I%M[VF>ZUI5t<WQ01\U^PDB6*+VM*M)VcDmsZfSB6sfiF:/9LkbK1x9YAB;)RăU"/gt2Y+qNTPvr'0GKrKU7XKOxXc>FY0Opt8)ZEEtSKm+D>jE&q_$_QU:rFv[b?JGăU"sBLYxxq>Kl1>G]kw1obAe5U;Hu(H=mvZ_[gwFSXajT;gs$D\N?*Be0g]*4O)F6GăU"Q6-C\gFR^2_koxb#dmYi*aMCbn*y)SlEM.rj4j&hZnqV>TBtF(hy8=u$J?C*8wVăU"wqJxKBE,uFqDZQ+n<&/*^c$iZtmlN<SWgYR]p,c4wcO_JFe?HfY8T9]l<<RGW?EăU"JfPyh*BlGhKr]H4fMHp-jh.9^cvcarnu(;6RjorOVv>4<5)bjT,^NSX=EHVLdcKăU"k682r/ixw&lnJjxP_p\;UY4QBN7RwwS^cQt<Hnr*O1E>oqhpb]AXsa8.;sfsZO<ăU"YhtiFL6pnn]tg[waF]gRHfw3?6ld48RCj]7x[C;EiK=.2\=5*fvYt%?tDaZWPPFăU"$o,08B>aU4I$jBrR6,BD#g>xyL>hg>OWcG;s%hZJqsY29:hP7X1z>4e67#/eZ]YăU"a%nX_A??2$Z$6QKiTm>*5sVh_UqAyaT4n<5q7XO<KA-8_r,(cd&(0xH>=MJ85'jăU"Ht6qpHdqMR#\7wT;3^Msdpjt#viSLY#uKNoAM^H)J('0ZLvO;Jj/)XQve+;:ugAăU"dJc>Uzk.w4kQG\LfrcRnFsz(FZ3*KwU,%*[8:Md24g#36$9<NEc9ODMN=aG^TR:ăU"];5^d-*8uQxSK7wI/&ur\E/n*zM,8G^b&.K6ZA9v<uR+GN4:fuzOpoZDRYeP^N<ăU"nN[57];xOj;64sFGWa.o(&V^zfqXMv-#Hu(jJ6mH_F#T8+$vZ(iv61VK)^xIZ71ăU"K3%9X=xGcx1>LU5_O^Y,bIJW,>X<41$;j0v6-7vE;Stf>LEEv/nKN#gaUDF(df3ăU";96PcY1p)Dsfd5+LhR(P:iyI<ONaR1nfio[DU?^[MmqJiX7OLqNJwe]jXu;_*-/ăU"j*%vMJDw.]3T'8*RR%eI(5<25Of<qcsXtx&(u-A\Xb#uwXnHaSC=Ei*Gm>1lDSzăU"?Go[ghQDhlw/.T+6j>4Pc^fQcpi+0dwN(1QN8d>1/UD]M)3,Gcg]^^t'JbY;RKPăU"%-j(VCHPw\tyw$'NB,Y)eF;H,(D#%J9mg]4sC8=s8Z8$o3n&49&JmDqEM^j:<OGăU"Q]/p')K_mcyq[\b$HGnfe[pFNKE)qB[RA0wkKS%d6TddP;a\w4o_bEiVH$PwbS>ăU"0XwE&]-vid$JLWD$IU>9WaLa7kTjz6:\6NH.C4J\njGqq-*cJ5QF6SfZ]_YH9ZJăU"K]j0]rba#mA<prK+Z^X/pk29WwsEw6s+s*k5Bn$jQ$V3sN],tReY0MvVb[Tt#*răU"zoZW-+7wrSHw8P.S..?hp\Xdwc_bKM%P6JuL7Ssive4gy%Ps_\ojTa.C+EN[R[TăU"qArm(OiAj'4h%%$UpaRw]$4cHVo2Yr4+e3[T;Bt(78YA\PY/x[b*eH&=AkJ9\[kăU":8ngw-=+gmH9[ud4+Vm8-n%F:prg3;1RiCH%o\N;5QNXzMoq1xud'1E$<^(XlK3ăU"u?$=)m0H6#-*uPYcxRP>(86Qf:QO:QKKyljw8zI<9ziRo_]cv#7[Fu(FMpNMj6qăU"C3bn68]CpBWrRK_e&fLSB?ml$i=nxD[-RE3L7(]TFM\[HZo,I[0H(<L65dU62-băU"I?_'O9GIIux02&e4S;8L&\Y?e?[c6YHn^>*>-.$+M\ptlXhPJKz:Me%M*[SSOx_ăU"[f-(ACZ0<VNLi:eoj4$$\k,<qir+D<9rpE%W&GFq9M1Of&kw:b%[UY'$sO0WFesăU"#4/M/Y+B^]T)3HMN*=+1;Z]lueYTx9G>GW69U:&0-E6\J;ZWIM=f=[u/4DdrYWLăU"?q[(A=ZSiMfaP9mO[_16B/TS4slXX.rWNwscU0,?\(lZTOtwwX>rR75UMHN^P0oăU"GIt[Sl#8&H7DU$(Y)oM?2Y9wlHH0]SAqeAu&>yk,):*z5K0<AE89ctRAhK7MNC%ăU"<Ar7x7s<.QVsQQCnnvYC8wR-[5J*D>G6Xrq[NED^z?Y0gRRERrFnbKn(2*EciZgăU"<;yC>^j;%Q-YV\a>t#H0;m6H<s],QC)M;ZtQY6kipVPw\^J3'[eo/?8BXPjGb]YăU"^mk1kQJ>_?sM\9WprF'WHRt*Su_P]-[aTKO(^<vzYZYRLxj5a07dDb-Up*us/Y#ăU"vdbSQTj;Ep:EE:48gt:0^=3pg:N/v>sPX&%GZZRUr-Ig:8G<#)EF:DfHT0V5L#\ăU"_Hm'Fr+9^AjuR99*c+khnpY$Gi]$qRb>z_PpRB5h#Yx/\(0<dEW8XZ(f_ykn(1&ăU"k,ya&;WaNqlkCs^%AuY[7li&0N_<<YM:p39hD8$ad)L<ISu8D[Ms/s:We=C-[GEăU")xmxFLs7b_qdhR%IxE81s+Vw%bdSS?D,8^lqU=7,P(NCNk_vbg$+(rO.i<%$ng)ăU"HsFxHoZ*?V.7i*_1q'aaOEAVWJ.i?%zC4#6bpgcZGAu(pNtSLzwyA/:0%f2\4wkăU"hXlVq^NiDJ7KNb:)%=h;)WShi>^$rf(oDI'HS-B*KAyGH+%#w?8-uy6,'PxQ+PiăU"iT)dTkO[jR<<IJkw,iR6vMMQMKCG&>.SDU.VZ'8;nfvgJOddeJs8ywO[\._4vl6ăU"W,elXR5N.b]FM^tYX>nN]xhoQRI3-uEc;t$8?a)#+KfBbDM'W/;6N&j7Oe^(rfnăU"t^8r#Klf>dQMhyIL_=X0^R9G/4jvU$_k%8bI/Rv^c*IMTOkw:/rxi^xQ,uNeuxHăU"kxY(wxNbgx#mun<q8>0Ks&<un)#?+qNqcrx)SP_Q05$uNgqdX:5;rxv9Ns+L$xUăU"n?R/-sud>fG2uFExn<n:Us:U,,wd*scZ?bukxBq,63=1ZL^xO^==q=;m]?\>uDxăU"*fla+7pV,wxFGl0MYiuxtrq8kxL<S^kt6Suxu>qblox<#hX1qxZ$k6kuId^N6l?ăU"xbdo#qrx?lnd,uixBnrlVjxg)IexZHkx(owdDxoxTZx2UDoo+zkd[NYDBusXqxsăU"?7,57kZiD_ka&2edG(&ue.a_a^DU\O1D&fr>FIfpC1z/wcSSTsooPwHN;xMrZt]ăU"+][nRqNi$>3DTG8UoI>>vHi:oDwWXvkf6uX9RaIOOutn=<%<qr]TlCEyXGCq#]GăU".cM(8a[XpiWbqq8Nb$l=WAMn-uXOrG'Fdqfx7lxB,7?GI8&F_+mX#y3v,qOAWoFăU"d7&Q$.cwgf6rlcaurXoq8=R>=2_]n6wCT<D6n?SJrBx$=7n[N3wqivM\Xe[F(>&ăU"[n=Z+NH'X+xH.AZQ[A;MDS9SVt^8CqXI1q6aqpU;_x:rI%q8A#Nyw*kGY?=ucX$ăU"7k>sr;H%l7>dvhER;8r.YQs4y=&RSe3w.7XL?eIhRv25j,sqdTM+'\I<ehmaXoMăU"HF?$]e]m0/cNX9xPkXN]xMAIxHNag<Uc/ExDmWjN?.tyMH7N'I+M:wFvu*5yaN_ăU"Ai)x>6t.Nuw(a8I98b9cFYtFeLz->eM*^wK\o(NUg,CVVX<RA?VBbMgyf/a=hkxăU"y8#Eqde::Ka+grle4S&6.4&x6rXS]uyZq8E>K]V%:a&#<Adt:K,K9vznNjNNdY0ăU"61$luX(A_O#_agg=qlYNG8x?M87o?gRsp1B_=Ok<7C/cZqXw_n57_3]cZMuM5)9ăU"#O<7k$5SiwpQ7brnunuX8s.xtOJxfXC\Tc?F/rYA%hLgUszq8/Ei408n3o\J#^dăU"HCENfKhsil:ERx:xN7NcFeE$hxTj^_X\%I7U&.P?eOruNZ;<2BLKNH.+x)UT0b.ăU"p]NpH5TIQXJj&wdmdRuIy:NLOB9Be,k3;Sjyu.;5]<NO9H%R]PW,?Q9x\mR,+qGăU"]W^bxj2l%VcmWoc$oCeuGOiv>7>-1ijG?:H0kf]Y\KbhvSa7HcHhcaWXi%l_x51ăU"503M:fsnYbM0?N;daN^k2?e;6glw3rWvy[H*pF>l;xxWZMS.jcA(G&+=-BR^7idăU";dd^POaqN9bY,e$*x[#;mujX,nTc:wVCc:;sR%%j0^<EBF.N%.D%goK5nEn_fx\ăU"$x[$rsV798nXYFJ;T6_;ihSVgRZ%w(lg#FMu'n']H1D?0hn%f2%8QN<9dU/ysN>ăU"YmHZB20<)/LrV39N>,2]RZlq^diO]4+9nnFvu^f0FH#.1&0ZV^]FgwDiT0B'D3BăU"_.7W'2*?iHZMTdTx#ZZZT[0<C85s_&zZ.B3cD;--n2wNZENX(Bwfdml:);)9_(wăU"%=/Vt%OS'C;SaPZwbas$:x&ps8[+cP5np*xpd1DNs3-R.AbYg>:9_?v4uhAd0<EăU"b/wYa1lEY&0W&KCZ9]x[sd=(_GVv'prI$3Cu;3''T'HRZPOHuKkh8Gn8L7xtV[qăU";NlMvNqCTfdnO<wzS?r&lO?$v4jnPg:,?wBJxY4q)i=L_I)fx]]u^Vg/D#'&u1PăU"^H(5l-_vGjh<-1FugDgXLq8cdW>mL'iL$X<lvh7d(:TF\6Y=F97_XG5vLOQ;hv]ăU"P3wn17u[:i0UFY]A.9$7OchxHx:^v^HS(2l9_KTmJ>;d59W[HvE1CvFZ-lcH]9qăU"d(d;uYwBCzc4:-E<K+Mc:vDuW5MMU9R+nhPbNcsXw(G\^)Uc<u.l/4c*3Q[Z=zvăU"TJKlN+.WJUnOxq8sf$x%)nU<JN)=N-CW.'JN*KghnY=aEuHjx$T]t?ZQv&sJCszăU"w)cq8n$ox/Hs]r7aH8>y^hjD[GVGar-&$i=)\T$aunWk1vDfwTQ^dWuyi_Ny(wqăU"nqlxB\TbNON\&,nN5w8.izAF7v8ujLpkN9U6VwM8eZKsmzj]c8$xhHEmmV0,N^_ăU"Z8ac<P'wTHAO^(\,sa:x,XxnuhZ[xBGQ>xfgk(skCcqEEo_NvZ>TqqxfLQxnINCăU"wzfgk$=\ez)NOY+(9j?F2sZ9L)xLC,l\hfx#BP-%<=IlH*wxiLgVur8(NH=J3l&ăU"AfpFyR;L]b7U=WrPhL[vH#]kSk+Afh4siN[b<d$hFmYV$/G&8'FTFTDSMh#+?ZxăU"kMnapjx;Fp\iT[WaD17hgd.>dm9HZxC\NPOAo1cn.X*E.p+ogZauA.?<gge)Q>_ăU"5j2s9nx<#.3ldAY($xtt-Zx#_4MzG,&uFZ=vs=:U+l80tMfdiaeg9w_Nxpq*8+dăU"W]j3/CI[TMh?ndI.cuGSk](wFHO8u.,scI5cus#luaDba:rxtw[J8F#k]_YIqTxăU".kN32MhW+f6ryTYJu.3\TvwZn]U)ZxG\6>?p0o9#Pwd,hvp6FqY^ucDV<(QGxNRăU"m&Y:x'j6;tr%Hc[Cn18-Rduv*V5&iN'S%xY-qx.5('ls8l(sVG6xF9/am]drk^IăU"N8be1.]srFbdcL<uq2V+GWE+5/D?Jr8vuuHd8$SB0u\Ns(h?wjoFTdl'(QVl%<aăU"xnsgYhI8:0K+Mcm&jwXTP*1&fGdXxm#Lqxqa6uxF1\q=?:j$1s/xHjm\d#xfbgbăU"3_M2wWK=i_aZYxFLVDYxf_%8_x9(/;*u;xB8Xr1fqp\.>xW&YxvoAZLRutx,prxăU"6hxZHWxnc6xdtuuxx,lHx:S1Tn*XtLwx#W8k+5Zqux^tNu:]lnD.G?irxIfu1nxăU"XLw#9s8wnDt.Gir8NB(ToYd1mkPoPxa(\,L,Jwdn4cZtD_cNUFl$xbGsd<$xGbiăU"XKuwx#HjTY6o?uxM2LuK6nixnLwtNowxuevxRutx,pix6nxtn^x,iuNexWxjiN3ăU"T[%W*xn>cYhxT;Z8IPVt'T0hlR76H1CKADZP(0>KxZ&*Y*T*BZ#SMBsEHlxO.uVăU"QHX,bPuXLO/c(&rYqnMSO>EcUNrYbr8>]xi<pGLt7qLJoeFxktl^_D195.0LoEjăU"vSm:_5,JWlN:N_wShoNbrJou0Y82-ofvEUdtm2R5tvbcrxXucofl(_[-^3^TPdiăU"-faVEoTMvQ<2B$M:dhx8st^0\3e..#?v_M&2T>:$/?yo'UdDgqranEx2P&yhKrPăU"rr+<HBbc)h%iW#77LLe-S/*:n$jott^xp[jawtpqfd5ZXk_,ui%fBgV=$_GD%SnăU">OxPfjGNXJdP&wnN#^DUG+]ZX&b8xKudPVombtwp]IjmQ*/L&j)XEcgo*ja*&E_ăU"lTtJjNlY0Z$&Wdb_YIsmPR(<>Mu+=hxZ46dFn<IB;jWQ':QJIY*[(/,LnhuQ:%QăU"o/;#O^LT(W4:zEYs'BTZ+>UBFIByaB'=1<]/)7+VC1s^bPexi:;?:jA#LXPzO'%ăU",*wVsFSQ?^n&RNpqMMhN,zRe6rwhw0Qgxqn0%*BcV-LtEbVvp:0<'p3A.j&W>NdăU"wt<v*nDH('[jHFfd'^Nn>9Gg8=VrHa8O9vd[H7A''\HxWmtUF=Dg['+tEZx$R(QăU"twNEo/08s#)/-mC&v2qeiv+Wp-Mxw#tapUG/%tni'f\vUpuuBj(#)+VM*pNKYJGăU"QixSnTT^2\Fo,9u+j&XK6tXrT8ixnlvaSOlflIx<vedCKv*3(hLff;?=Z0hxQ$xăU"G:Nh2,Nr$/((x0$?A?WN'-.rc>xwjttNxu1wZvunn_tFki\*La-K,t=jtpkNcVlăU"idwlq64xM,eMBD;+&;j9uqL7xXlus9'v(4(tOxo$W_]q4&2dIQqtNeVixP6eLFoăU"PN$rAptuxlvd0sK)5oj7Oouv8bMUGOCXYvwF5-6rO^S[61PjhY>dowTsbZusLI,ăU"Zx+aG)Z_yS>W)-u(HGS<pNJTu*X;8HUW'NDJF<(op(H-u/hxKn8JqPuddHp9q$'ăU"r)R>1%VN)pNZY(gB+<Z64G\p1)UxO=NQhwNEiO7^O?LvT$rjN6WgYpZOpXMft9xăU"(u<^vNLsL\+F\9_ZK6unhXxrH-.Slpx&[ux3xxtDxxdZwxxAlxhk5G<62NbImKuăU"obv=pnM?Wa6hBIRiw7Zh=dwV^hJ.1,cxv<65,uVloI48LG4q1MOD2zKBq5c7Z\xăU"wpL4VU<H^<FNbEY(ekbh>RfjDjtO-[]OrV>xRbRpMY2pM;cpbP=L0WHmd=Y7P#iăU"uAASZbhZV/vLR&jWS]TY-a)J_?A)uTYFwWYSam)OvX^KjtoDsVRVq.BsBaC5UpMăU"4=DHTeHon+J9q4<c0w.7,SMUfLc;tRug,uxvmBe<oiSMN^Oht*iq*mhIMv\>hSLăU"56Tp4Eql<D2d5Tu6t.k]wpv:EMq9rs-t\lqZba9:(u&$xVt&<:BqLno$'h*\VTuăU"o64XP1dKE243[VTq'RvnX_uYvuj&96t%x\iGf[4o_.]d-)-SDA8-T94qm)H\m,TăU"=p/M'L5^dG6q=nuYjTd5wtodvuYH^d&MBiOQ^GnwSMuiSNhlh[.v?nHv\9YHs2uăU"qwTirvn?ptFI(#mdi0i?vWBxM.SL^T?)M:u\\up]-&v&$ENRu:N5C8U3#HS9&LtăU"Um&b=p=&>t,X21pirt]SqSrxGD;<Kx&Z3X#kqGYrh83DX^QSGDV;DZvW?x.mhs%ăU"xhJmH>ahr&b1*eldu^e(Y#iomVw-o8,6xN]IUN?v$ObZwm]dZd-2MeD)NMcrB:năU"0xYk'L_v>O7he$rui0(%IM/2;R>ohlQ*WVyO/?H\5F.%j=V*?>Y;Cj&t:7YC1/tăU"RXm/tR=s#f%0^s:#%JzP:Odz//w'>;&6K(?CeF<?*zTl)hI=4rC)S.MhzQ+'p'4ăU"P&\S()m.+JGjJA_H%o4Iw<8qIA1pp9C=Q,'>c),Q^S)=Z#C1w,+bM%S?rlZ7InNăU"ihxXU>Jik*ZIrc'iI4^%ZhOk?1Jq?FARMw7%h8aug)AqK&p631-X&;H5YtNSf_KăU"f;j[8ow?B\Zj7NhDwvD(iKfpUo)?O,sZ^c6p;*nseV9ONOYCgnc07g57r+#In';ăU"*CR4Xiedw:272$rRfYDW.ioP2(F7=uS1Xm6%sr/:Ao:+am0*0Lj-JZV5-i+YL*3ăU"h/82SCk0IT(SUb<Pi]h8G_M*3d04FMZUE\29Q0DXSELtPfC$Yrq:?Y[1MW<E,$SăU"oO5sEnabpmDCVt,2\Pj+aQuUaDR)j3D^$ZKel?q96Vm1aILl^ROx?,85B^rG]mLăU"ah/4CkSmqbOrDKK?-?98t20C&.>V9;n)$E5X(*)J1=k'Z=N1_CY(7syVQ_k*$V8ăU")i)]clt+h#mqen[$H+9m]s4n<*wn_(TKHL_aXD(l8rWRG&U#MvJ]IjPBn8#nZ-6ăU"+u9&iG7o.QRo.p[7o^lqM78ZXSzQ+s&aIpW,xDGwi=f4]*je\2hvS[%_85xtRoOăU"UkQ$bWTZ:q#cATW)0qQS9HBcR2r/&wco\&0ok'oGnlDX2&_0aQ-#05I+O=6'G%SăU"&70<[p%\uAK&sicC8tKIa&L2)+DQE+RvqN'/W;7?tIO>/y\p3B,W9T5Tx8[;aIOăU"w3WGVNCS1:':Nsa/U)J5oWoA.)f9pKaQHL[GL[fkt2RqrENZ^]k+V;+Fa6+%5,năU"H<X;c&6MD<m%n*,pfk&=o+DZq5J>sIjJ,+M<#0cLd7F<3-MKm$sKpa^48TdV_OJăU"i*Kjx*kFx\%E,AO?<5+JMA^fz92htmOl21R.jh'Q;kXSI2UT3EJ'Ni'.qcc:f;,ăU"iQ?+mnauHKuP+AoOkPB_(4CkI:*\O+#c#_mSs2k_]/*7r$#2&*,_&GbCt3Iz$gcăU"8sH9#cYr8AOIw?k7=;QJadZ_3LKEe<7EWt4&HWT2'Po3^ReG)rEi0*\09gg[ugMăU"si+?XN$))q\629ESEueo20QzsbKQMGkmqcE$gJ*>Zj'R5;J9Zj],'x1dRayjOF9ăU"7<$;BW,YeJ]R5mh-3(=P$%UP&:T#,e[4<IqJT?LM9m22)M*N-$3Onl=+S\UasR^ăU"OrZ?ab'=Tfk5%NSb^OK7f>oOfE7k*g%2a'o'#6s$_z/8cpA6.Gl,_3EJ$PzR+e9ăU"f.7cV%e4M>6M\*+.O(To>dZeK>7#qa43tZO;U5p-_dF)SZv#z*7c;eL>7D-e:9răU"9rsj8I?J7d]]/>L%yZbF,[[j%f4_/i3Oj(F5,EnkUC0p$u1ICn$8</#0LepkI??ăU"*t;<5?XQ\>C1AZZ^aR(6<IWm8S,ZjMpZJ7,k\>N7/'*;f,nF679la*V\J+fHO(ZăU"z^W;XB9y5ZXMBkvBSBheETpFe*d_qqAo(R^10;CfW+kBkQe3LDdVaYo&7+M,oN^ăU"M3yOKaPv*jPhFyyS5V:##[q=PgWa2QPfeU/&XLJ<L<(AkX-h]o[v[yneKv2u&_năU"so&nf*.B_XC1N'CAsaEsC\X<H8[rm&*^uLi2]tmf2mRGzK%,&AOwB?(I^IhBYmfăU"vh5,YQ7Ccl:m$g7WiA5N9sAsT%uGm&m<O3m&z9qFJeRA[n[GELxxi&?=D))AbbnăU"PN[zy(P,:H[DWeSc.s:8OBsF6\W*5PPVua<Wka+2U3RG9Q0mS7I0npUe^39Y):qăU"4>i[kpH_Vf/5fmFr[F3l[RA.,OcG7nOv*.R)4X4?^rABlH$W_k<'i+]pax$e/&dăU"&qOBH5PO^46Jusd*15SJZr,QtRe;IT[HE09_RS:H:te&6q=TrC1n:1%n?u9v.QdăU"FoU30ms,HFSMeG-?aN/ekwR>P]+(#k?s-T_aVt(Cu:R9>IZppFgc[]ko<NnZtk)ăU"C4BQTtCmUN>ye%aLRjw3,#pK&A'<*GkG/-LGi(>E*ObCTAFskdTvaKR>eF+cjk%ăU"d1l=)q5uZ.ZC7ZCd4_KTcN9&8h4EXK&4v/olC-VhQq?>YV5Ro.sIflGbc*wLb'^ăU"QCE0YW;*bDc:Od'*S_fF;6IJzUNE\BZ^#3ug,si]9r3;/aC$:x5Pv4e6ixVB,G&ăU"oD:1<>e:R>+lfIp.Ud%<9=t]%NIeV#6OF:^W1_fy9'uqMB#7j(rraUN+3JNw_c<ăU"L2Q%dBuNX#YSffjQDn'W&QBg^npg5(ra%lk+PrHxVJqZcP/^AlZ\iuquY2$+;EJăU"5gaZltlo^uA'_*Blod=#3y3LpaOk]oq]6Y6n??o7*l]-,ew<pL=le=dmd%5QJMGăU"Cdktk(9<Jslkawu]%_JlMQE>=Cd64LebYSr[6J:QwdS=W#jL)9.ri0Esnnsl[4băU"$nVr(5cu]5=t#bhU6,<_CZgtwllb[=DpF\[TSGuJ6jw-m+eDTbKV=j<O?62R*G_ăU"_eT\4hKcfkpVFZ$6V4FQaDE4L*]gDLCnRt3gXO_L/XwaIT7NQSNP]F+-b4Q^]85ăU"eu/S'O'k[Kw.-LZx\1cD8g$;VY[cj]wR1?pGdCbuZ,_9OMcfhi8JQ71<:tN-uwpăU"W^##P.#n5*BzSh;S^w,%up()%9%%%I-%o<&fD[+:XWn&%%%%(%%%0%%%%yj&'yzăU"w%jSufIq:^P&u+F55T#)n)a$IHA$Inakd.MPjcx2Vs[BbE+Y$0%%3]t%-7N.1Z1ăU"QPRTfh;v^YKZwhD;jB1t?M/oGs?1I^3_?#/E%3l91AT#vgWD#oF]^Mn^+7E>h9VăU"l[;n#1C9EC_q47>h(ESW&QpN#+eS];'%]1\1g)U/D[#7[K]w8tTM]9<(3Zw6+GLăU"o_ZZ%-%(.=YGDQB3PI9$kEBAn?t3F/vld%WW:)pS-&m>N[GRMhSg_Zna9ZZ&PkGăU"$N_HpRVY:YO+Br:<3J+#Wo^:8\XO[XaGY[QB:woWn^,30o(VS%,B1n<^l0-U:oiăU"pLIZc[JYD:dYP[wfMr;tu%7R?tQG.;K1EtRtSeab9].mc4P,&866sqoG[?S)hALăU"JNBLMs<7[#\82__//E-Jt>gAGZ[^iNNWR.lzbScB>s*#uoZY1;;]9q2K&:1B-B4ăU"pi8Ma,A+czhG3X*$=kwKN6[7*;q_TpWGfb)0B^jvhJYte>x6_=Tcj6]:2%C#i5lăU"<]BMpqD0M?9rQ*&(1Q&N,Leea*1XoTd9aNpzsrm:mWP&HD+kzn?Ha_hV?=bCcXQăU"VPi8ZGrEiVnDHHiHD,PZ6Ch9ZhknFZ(.w%u8ho%YHXpJt^$RtqIm$plt6>rlttJăU"X'pDup%()9%%%%-%6J),FLC4_m'x)%%&B0%%%/%%%%wjfi%rjSyS'y.%<V>T[C5ăU"N<o?xZsWi=T:%IB[oHn)cUM[mA,/MRq^c)Ca]xLaRsy?a8XBS8$RU>D>O.^f:n]ăU"uVh\g:MGvD$'FdHHWw]J?twvTobcHYpZK0dO#;,-J;;&>>M3wscZwb3T.?(cF4SăU"[oJ;**K+/6h4&R3Ra<IOgw;H,;>6aY0t?Wd;E<5iuX63Kp/\'fV;ILWDrj]#td9ăU"v38>NV.3ZrTNV72((rRWGy(Tus8-th]&m^'Rl2ZMhlnQNUT%JG_8UT'IG=7/6+tăU"j7nt6P0*IurqDKFo)d;D_K7xP&lLGRJa$EXJmAR8L(;Ycm?I:b5uIwRU.>Q/E-0ăU"\1/'o3h=4xWo$%3i;G=Ow#[7xM)yo6lWLSy/Q23<JwUHQj7QWW%aKM_198^%f%kăU"0GabAXCG]dA;3-l4/f3+_*5w=.WxuFj+RE5_qp%.)r]f:BE0o4g1%H/S,T'==\)ăU"s%iT^B1r2'GZY063(J.QfZTt#1HJ+d=sZagMaD'rNZd9ord\I/#e0-zPA9;4)BOăU"23hW?Grr.Ixy$^a>:#?mSe6gTo+:aC2xZyRHJOkedJJk>qOE$lHC%fErtt^L^wOăU"nW;>66F_]%n0ok8PRBL4C/Toecd0JI)/fv=;(r#I0LB*Q.ZIAK6/XJWLuOCZY8WăU"*NFnh#$DR1cB>1*U<\Ne3Z57T&/RSDAoU3qP;Naz#Qs/?Yn^=$mw>^pCDZp0vN*ăU"CAc5t'WyuU)#1iG2U6Ss#>Uyy]90HkUmaNB#;hyJI&Q$<b1.>o&g&z=&c[cON'9ăU"$%->[$9.>hKLH.nxKcADaM=o-_D^_4M)-JOcH7cg.y.uZA9uHaI;nW&Gi+.p&]/ăU"KAHvA[.hZS9jD1dzpY8OVw3kf1x_,&Qsz:=AOsao\,K<kNeeIswX-Z]ItI[Z*O#ăU"pDIow:HG4\yf=>K=P#?&m[>1g3U9ZHbQ6[Yt,_o-SiW5'QJ-Zv'YT/C\QKVui1/ăU",hU:TZVDreSdN29hIx2h'4W'hph;ovIK5).<t(2Srv/R8dh8&O9x/A4+Dc:pL4lăU")&2NGfmFH_c]8*eRQ2LgcYM\H?[_R&eJ)lCj^s#M4[ZLVKGs7/=pYNMUeq;Rs?HăU"lefdHL*YcbjGjRl3*qT&(k$eAqr]N]:5tm3Q\XHnI#eCfNG(QQ1J)(G';P(DbZ5ăU"zT*3gkDmVb,%d<lklK6MhmO&2':z(bia1lGb2B^\/;p#7qSn1VJYK),HoaDoYq9ăU">&Edqk7zml/_:qnmc]:v\XyPBAUR<Ax036)O7/KN6p0M/Y9Tb?7,1DLl;Yt+uFnăU"jgPaQ(qAj2jyZS'=+w(z.UWOr>z\^3r9moW68i4)$>K%TSmxqe$=<1PEgfE^h#>ăU"qY#s;oaWcviiGH0l1sC*Ym#wc8hW?K:;3KpR_q\g9.ruB_Vns<A^A1A6+im=.PBăU"nw/B2us.NB%w&H1ue;,msx4_.bs/a+P?#,=5F%Cyhx[^EZ,F<&/e,,3z?K5pKtuăU"Q[JFBB)RCGLRC*<IqmhdT:AqeYw8/MZeJv?^5L=d&r5)bwlqR0=\uq?MqJV)*V[ăU"IHN-dK:6kiVF[/b/9V#IAan%?[&g[=,5mM=Q__4T^*NaV[nLO5qpaZ3%RD\0BurăU"K38Y*UH6cPlat%Bup(%)9%%%%-%p$)(FMhTtf/[1%%j%W%%1%%%%g%fxnh%RXiSăEND SUBăSUB V3ăU"[gfxNk)dBSRm7x[GzudC-57i'TBkY/&JPo;\RAxDhzO3JG-V,09]i.=[vE[j-wnăU"\b+TFm'Zt+o,1BxYZabVb8Hb#a)eIxM?ZXZ:jmWaThX.c'io\sD'$0nnV)^r#*OăU"4&/b+iDT5+Q$U.T8LTD31P>vfk:Uj30?L:2;q*U[Eo[)JY\j7T/-Zdor]3T\D=IăU"Z^A54it*51t^7_V'?OTFDrZbJ^TEk>NkhQR^1G)ULNlLy-EUETv6'2'e\VsVQP;ăU";J1KjZi#9kZ74a[iVw7?Swp$amZBQiX#:fI#E3(CGx4G*<t?4v&.Y-A,\?m2kIeăU"ME0?LsrSPV^fB'v*Zca4_Ubs(cl4,\>p$..A0a>DKsDp-I$a7J<Plw)>ioh]deTăU")/&rr7Q&>h%<dMlBrJ46%Pr/z5RY/F37rPz-fRY)Za+6GS)6:2wGfZwAM9GN:^(ăU"$bo?2[A(HtcX[ne1cY8sV.5VnY<Tt#JFFt[:S;LOrm&W(Q\Xk'iz'trA-i61:>făU".<C,YQETlCC2eNu/)i2=8_RCb&ZHHo84W'BOX#+D&r4KO>8CGw[S4[Mx&cfOV8#ăU"M[0*hr\w,3uy+cF:)ufV'BB\:N(^SHL:AF7E;p,Po[0jq)n:RDLZyr1:34ez:>oăU"a4sM<O]SV9AK#Qg0DG[M%cx;+&U(n1.WKuYLKgU3FrQ^G^IC,vM^KiIqBY?Hb?]ăU"nLijE%9/'m<ti,B7tXO^iog<Kn3g$RUoNt=#OYoqquX^kSo>3/>WPiv8'CaPRmEăU"0em&gpsxn7^/8Z8hb2[5$(%vE%(7l1Jp'oEujw\a7YKLsewC1%XRZ/LrZTk>8*qăU"oQ.AgpC'IpUDZ86fatjdX;i)797CL:_Vh)m^D>x>=Jx^<X7EW>x)NJd09PwHMkGăU")7mM(n%zb?fR$&%<t%cq9J1GDaun(HI;=ealZ)mMrmR4#1UtNIV.0#'B=_+L(4dăU"<1B5fkD^6U>W?T>lm[Ha]M44=bEp/gB\d&QnT*(8g;DK.G?hmxBJW&37Ji(tl5)ăU"l649E,MezdY+<uK8\Sv1$>]dM.#-0dJ=/&4N+m0=>XUc'9mk(QwFYG4wVS7s;8MăU"A;uoi4R%,ppx\iBD,GT;^R4$HjQ2fdDcseL=ic$t=a\B57eLYq_wc=#[zFg)UbvăU"F#8zsh$3-d#fj/%TiF&g&ayKa5tt,FK?q%,c^/uQ;Sys/6Xk5C<tbdCs::X0xjPăU">kf/k8XQIOo6R%9F0\;%9FAMQdd).V#0Q]99P>1P9s<s22HV/7>Ta*UKl^pCWAkăU"A:*i5;0t<ICslRq*TC'WMjwzi*NyW^<JV?/VuHs[QAqY:d*Bl^'PY_s5QK6*VI?ăU"eIRRXiE:&TE]&7+qU8nXsM8GMIS7hrb#$'XTJ>yZHjclv>wU^jwZ+1-MC1MZE6BăU"#PjvoKlTWqA]\AU5P$.IaV-Jj&V7R6:]BY44\0q(ETY'6'uX,-<Bm$;48vnj-<3ăU"&on4ggg[0QVHfX+rj[c%n63(>U51i&V0=s)K]?VPMC:i;Fkk%XwbIF54H,/\jn5ăU"*-&s<Cc.[%t6(oUkv]i[c=U4-^IUnQ-P10EC\LH#e[,]c8b<WaJ1?Pr+ybisysTăU"Q<NO&\sMvlSZ[x.nC^K(2Dz\/&\>y*6JDUgDZ%H%'=mn7=?PJG8++pFQ'ft0Q)1ăU">]KxMdWW$yn%qR$OZR<f2/2cH_)MQCXuIS2U-(DsSe$L.jDk/vO:*jbh]LcIb23ăU"k3l\XS%GAK.ra21g<D,_2^W)DsocBCBg1O7U'3%$cS4t^+nK)&1-REt2\N1+y[yăU"'j7lG4[q9G[W-i\eZJd-^.2cy:2(]8cKGz#mWA&\KYW*L>A\)1;T$As[KDdB6R\ăU"3_qq'TbF;+#=n7L)mveP$s&0jC\.)#]8:Ic_z-+[]F^OWnxcAsA:Cow(BM0TT64ăU"nIh1SUkGv/GZNMg]LP3G$VjsK)TP<h.K(H*M1GtOj0nbSnHR-H\ogICN%HE(MznăU"l.U_\?HP7lRvc5Ri%aCaG>:5Y1B]M#5Z%H;azWSk$iO1m-1&:7$jfi33Rq4A\n>ăU"H%*PR9zMk\<1z.DM>i5o($oQdxNd,CXA*1t3uG.]As2URJf0k>va)+u=Ij6M<y^ăU"bkh6MhfNF9;.uE+I]&HzgY]UMsG,Y5HPv]+si&AXI:rR?;aZ+I_>0l\vAbgIk_+ăU"(&Q0+xr,3(f+qEi9NeL8EH&/F+iklj0+VVX>>(ukNog&]B#iLZu/NQamVn(K1bgăU"['P5K%jjyG[34oVssX\5#d^;&JlS/8R:6l'CN+MV#Q[DMe2L)JN=nRTS#DF^p2uăU"I[E6CJfhQl:a=:j1l]FHZOn8_kc,RD,wNmc'f]h?]1qq.=%A+I*CWSolNBRJxG>ăU"l8u--Pu3FnZiUpXYRm)(<,NWPt+GHj8(r8*[47QSAZ?/GJp^+jLJ<7L4Z(bi:=(ăU"O/.I\,Rs3Nd=t/EpB[enT,F9;Mpm8'%(z&eNt[Z*kVMd[#,p,q1fxyxOIOp4eZTăU"RH-KB-Y8UVxbxIwh%%p^lPRKHq5rj-/r4s$N3'=3Po*/Ziq384tl?)k[/LZ(<JcăU"L]wT6,Hi%SuI^,gY++\DB?r*j&l7#S\3+tpR1Rw+,<8rH&i=O\pD1)mWGWBvJ'păU"#f?;Y4z5DPI)l\XV1:4p60kqf3pB?gx./%F-PZ]p[;;c=b]LdhN;YEK0ARuR>,'ăU"Q\VNXq_^:)w45O46%CtWlEXPudh9S>\CW*gP>:3?nUY#.cm<iue(#95J9)[I_evăU"Z$NYDo9AT0oQ3YSdPU+n_3Jvl./C,RFsCCNf\TC\a4OGf3t<)+oR/rRq9QOHitYăU"qrkD%0&fiC$8ke,<d+J&,55ac2.2I_OJ9PeNBkf3NPk-Lc)i'uT\dK-Sp')x7PSăU"Roy6,?Z$LG1migK)rvR4.5W?K;'cK=^Vr;61Y'K1L;\k^5deenOh^1vX:o#Y3IaăU"X7dcHtQ/ukZ+%U8Tt2Zb,S+k&*S<'/ZzfH:h.7??T\d>EHo0X6(tp-bES\qZPuMăU"U%s,n$vqN&dKDC<=%2JrY,OJc3bY4-22if-#djZR<4kI:?iI#?-NL3cgQJobAOrăU"(pUrY:bSLA;I90d?^lRtvl/:-'dz:R)t-s8FPC\w9Mdg(Oun6#(1+y_4.9MX_4HăU":uzG0>]hq1oD)KQil(r'm5F4patgg\zo[-56i$Seo&/r:-Zm='^&m*g5p]^:[s.ăU"%/[U5.u+QEr,%Jp=eu^H3Zfq:rYTG#h5Wv&$#5*g134Cs-en'=<.9scc-WM99BRăU"ib2>PkSBrc:.jsPkEc%NYLG[0TqdV,_*ksiX)N?w%bIX29LUTVv#el$*e2W9mDZăU"x$j[#DE:I$lNAHRd;GtZv*%3oiX#(;-g;'<*AN)m;+CZ<TdNm)E*rT)zq)iD.mMăU">WSJIS=3uil^*)ZYWiO3,&K8e#rk\/ZP'].r89BbD:qIDT]JWQqu7jAEMxwpY7?ăU"x:dlf,j4H7fPaFd\=)L\r2;lNW).\Uz$#-lA6C/\%9;qk(I)0YgX40oJv\J=ntIăU"hxgaKckPv(.^a8\ILl9f4M-B7_JdW]f(w3F>LQeC0J<<xEP/jptA\E%6YpFcPvqăU"aa&xjY3C4M4rE]d$XZg*GDbGICiHIsZKoQIdqt^IfmYV?djbUUdTlTtJxhg_NnEăU"u2fbd\J7tk9CC'R:r$>j0Ok/'P?Nj#7p%bJhyCXNU,*x,3;bb&-j.iYFCZy+$oMăU"_).o$T1ev6uC3+cpOWrsCB^ok\?EKk),W.G(^s,QY.[s9<S4^=x+=;Q$2h4h]X-ăU"dGJfrptK*\7SWgJGP?R[C:b)(s.E*TG)w9gs.0)kWZl9Uvqg5jro,nNDYaSIBUVăU"L#'T::=V0VfVI]aq\Qn5hML9IQU)8mk7n)/uSg2MH2Lo*u2(q'V.8t1_8uAmPr7ăU"KD(r$v]KM7nq^hK#aK[,WL$^g&/Kk^Snl+raFhf;);</viC^/KP(dt9F>'*M_8BăU"WF\Mo?S*5m,h;),dh,01S*;7496<-a*o3jlVt-wEee(;9h&us6vC#T'A/=/\zRYăU"eUleReMTlL9H$#1<m>c,08xEpXtuo,/qQ,/oS8-QU?(R3eEw>>j5R/Zf=d>U1t6ăU"?Uw5bElPXTYox<5E9JXKAU$BbgTaQwiO,N=XqN%(up&%'9%9%%%%-I%7x([Fgi=ăU"(E1%%%%K&%%%,%%%%%%%%%&%E%%%%%%%%%r%fuSi%fyup%&'9%%9%%%I-%vi7aFăU"aJ4-vsk[%%%Y%%%0%%%%%%%%%%%%E%%%&V%%%.yj'y%zwjS%ifyu%p&'9%%9%%#ăU"%-%o)<fD[d+XWn%&%%%%(%%0%%%%%%%%%%%%E%%%%yl%#%yj'%yzwj%Sufq%up&ăU"'%9%9%%%%-%6J),FLC4_m'x)%%&B0%%%/%%%%%%%%%&%E%.%%An%%%wj%firj.SăU"y'y%up&'%9%9%%%%-%4p)(FNMTtf'/1%%'jW%%%1%%%%%%%%%&%E%.%%hs%%%gfăU"%xnhR%XiSg%fxup%*+%%%%%*%%*%>&I%%H*%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=146AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew L. Ayers                NEW UPDATED BLAST! LIBRARY     andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        1376 90994    BLAST.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BLAST.ZIP",4^6:Z&=68067:?STRING$(50,177);ăU"%up()%9%%%R%%Uc&mG%%%%%%%%%%%%%%%+%%%%gq%fxyT%up()%9%%%I%%+$&mGăU"%%%%%%%%%%%%%%%I%%%%if%yfTf%siwj&&Tuw%lwrn%slTv%znhp%gfxT%gqfx%ăU"yTup%()9%%%%%%3UcmG%%%%%%%%%%%%%%%%<%%%%ifyf%Tfsi.wj&T%yjru%TgqăU"f%xyTu%p()9%%%%%O%Ucm%G%%%%%%%%%%%%%%%)%%%%fxr%Tup(%)9%%[%%%U)căU"mG%%%%%%%%%%%%%%%*%%%%r%nxhT%up()%9%%%R%%Uc&mG%%%%%%%%%%%%%%%*%ăU"%%%ij%rtTu%p()9%%%%%O%Ucm%G%%%%%%%%%%%%%%%*%%%%htw%jTup%()9%%%%ăU"%%3UcmG%%%%%%%%%%%%%%%%,%%%%wjfi%rjTu%p()9%%%%-(%HrvXFRvZ,2Q,%+ăU"%p;%%%5%%%%fxr%Tgqf%xylj%ySfxOr.'<,>T]7]wQ(w(4BD;5#)]F:^]\I]aBIăU"T586??7Ho4.2YMoJ._K%;g*X9[GN8Aa&ajJ*E3F^rM7;A-&n>cA-b]bd9Vs0(lkăU"lhe'aJ).+N=lOBw*L?-4R9v(s8/f?2RIA^)VUDqhoN;X2VjKd4xmf*.$>66KA<IăU"Nq)=JS-D5ZnZVgrttQkua7uYG'bXQ,QYh8-5opFssLi<>(9uInG's)z&klYSqBIăU"rgk]3lR'[+GClLXI$E\2]QWlBqbE$#&MGaim1(6F$l'kDQ^DX0p.)cC&#8mhGp'ăU":w/Q>d)gY2_*ixJtVj.7h]x-ODYzNsL8m-a<p=6-AkM$auIL3)rxUsUU4Y4)<)RăU"tcv^7uOE5,MW2npQu#(w+9+>(z::dRciM*ztl4OeEZoXV]&2N<d>&//An;0D9PRăU"p*triGqsmUa%[h&2zGWt'Z<//^Q$&)m9ISAVV_IW6WTtU[VD[A/7v.*X)ia^D)HăU"KxD\Cr8t)Zjn;n*860^V1FJ(l8/*iYHR<4a9)=AkoIA)I*kFn0.E^TQ.F6dwR73ăU"*dt4PsQ/3ar^16[v(2'sAxm?XFJOlJU^Sc0\q[q*p-hr=667<9U<'Pb2uYY7IwIăU"9YU-agOY:k%5c^e^pY.EAAKLG9h$aH+%qcVB'htRJS/oBHKn26^VSWRe);df[#(ăU"ML/8x'LYoU.R'83lm4D7&EC1PR(ymFgi-3C?cTp4FD^qR>Tg%E'UF#U&fM;%vtSăU"tLPft_'6QfD<jm=RfBkzfukG'gcGP_jQ03CI#IR<DTZ^hcA/C;,a.NiG'UR\d(0ăU"pvt):>7:[GOQ31FLycH9bt^sTK4z%<Ct>'>AJg)6npYm=j/NF1GW1*zQO['Ri)9ăU"QYXO1SZ4-PnQp;*vL&dddvQo-<AO)QNprV38O>CVGL'sWjk)-yx&M?jxn9kTFn%ăU"?<z>lga]]nN:hgEXj$pXE21C;%.;tKGQCkVz_uoWcgF7=FjPLu*'YRMhr4R%zx[ăU"E^*d]+my&WfRqS_6fGG4KZkFf&+NU4v+C(E9EP6bzT]L:71Q:xirvVw0t/n4d/NăU"dW\33&$e,UUH%UPE_iGGu,8u8/&1gfhlQ\5L2,ZFgxvb5xf-+j2;^/XIGh*Mk$săU"0qJwZu$X.v<?(g(Lpr+,]J=4+oYm?,'qa*B;^v<zHm&'=bOSh/J=LoW*s(nb_2:ăU"Dx>&q-75hSXq[rG2w$rHGxJJC*DIK4XG#hP6>fQmsIUQy$ZbIuf$(wFcXs5E;7\ăU"Aw=&q(WmH]=%g,d7So3mPL:rWQB.1H1IS,lbKE>F:.2CkSP%H>k1\kDSyOL=*#'ăU"q4)DabjwYsTd.'F[7?l:hWXD*1S&b5tXH7DW1E:eUE*fKyPZkwOY^lt=Q$sKM7OăU":8Q;tqMVqKIUeDD5SN#(6C+MFslL70<XZ.E_h&*q#1h1J,RF70_O*[2<w+J=<8iăU"caEwsIGEe0<;UJIFCQ?/to*3iH=cg,?a7VOFi5By[?z3f+LnxE(_;x]1P-,u%Q]ăU"8kX'OmX8tNGx,KL7L&$MnwT.x?-_7qwd;j%3]NmS8WZ7M4IH,:,?>^:^y3VLYT^ăU"Ryy%T3wL'LgSS.s\sRU&j$]c.z2pA:FXUo5\uh:'-4t+?3QECi3OyP>R3P(lVdYăU"Ps23A#,V/\rOc+jKgI,xAdPL\l[Sz'HgB:Tbi+^.(M=yM%71%\6*w.;-gUP?Dm[ăU"WvRNb+YUVnea533c)pT36IbFP#/QCGr9JM6A#LD)n*,H;c/a+m[eT9aS\^rB(+PăU"]Z14Z%1vCbpgQ_B(80NK\*D^NOF(R8;sW:4lH?\O17*;k<PjFB<#nFu.nfz+P<-ăU"]^2%T[W%[F3q4B#]zghsRHuu2?.e#FwcSoTou=LL1:1%+heK(#eai=GjS<W_&2^ăU"$PzGYEH5EYvNcg#unDTs(TrNQBmfLLak\zD.XCiZR0<9WWr('TTGf%=HdWZu-V<ăU"J&4u2R*#EdtieMm-G/x>Ppt;+:9/u1Fh$q-=g8K?Se'n)etPmbN42jU#0<Eb+ARăU"qYRt'U0?QdJqa's3A$:XmKpKdG;-1X\m??-g[jSLx0j,>6,47hxo4_p\:^e-zfBăU"VzwEK=V/$0V[53t^w%6(gq7B1(%0p/J'xiEp$v?Vim542fDNX/RYC91DR'mTfmmăU"gLn7oQfMk^vvG]llonh772ogNo4N3Y3l<C,S,P-Jtu6Yc%dsIR=HqQRaY$NBUKLăU"-\nwg>XUo#mYyVNE9zL%bjF&)9vdfJ%f15MVYTz8okFV0&^?NOEcxzpz2F9G-dSăU"<+yG)X\9)XKo:Yh%Swz86sOdi<Z9$S$T3=bU\tqbQBB/zHV&WmKMKFD9?UO^[2=ăU"t8X=l%25PKpn2UQKCzta#U:>At:#K^KxymVIq'_/o3BlR=h8oYhBcDEtF(Hj%V4ăU"oYf-G/dyGRVzJnfdiDV8XKpiUTUqDxF,&$)^-mxvbiGaQQcpP96[dF$HW.;&NH?ăU"7VT7UJK5,KVM&pi2[_4UTqma<$Cu4rv.c\3]01AmBO*I8?#o]sWlHLfQ8]sIV54ăU")h;)<:-I'kIN*Ir\Foo%\up(%)9%%#%-%ECl5GjU]_?1[-%%N%=%%4%%%%f%xrTăU"g%fxyu%zySfRxr.';,>T_17Le&WxVRVJZ_Wj,du:$Of0_3kvnTLR=vSjEUq4[XjăU"#=dIjfqaHqXTVVs3BE03._ZGY?;VVB5GKXvuqmhn5rR=%rrkcOm15MW31m;ZN:lăU"1-ac.U/-7+BK9)VGz^W*qsc?>o,p3_Kb+Kmt;Si=r=yR)%%;6p[7;dYm;Rxh\JRăU"t<g,i81[V67g2asZ:ZmTY[pkv1Yr_1>L:X?\U&ttU$^&FhLL1\K6B(b\g6sYbM7ăU"gx$N,.IUt?bR4(mZ#\b.JQGmNx7\kFHq%rs3u>L#U(\Y'qg76[[#D]1dg#7*;YcăU"P0b1eaVTc$Q0>9'QiR+:7J&Yt93#GA&H:]0KnQDg.?uKKMKo6qKSpgbP8[cIZ)\ăU"T&fVfP$tY9nQFe6X?6rY9ovt5Kkg>M1,gM6wRvQM/p+kiX+hdQn>xiL;'.ZFRDjăU"\:p;_Rir:BH;,dY:Rjc4l/Y$u50McS.DNy2RHDYi)5a%n/)mfIS^)Ko;(Gp-^,QăU"Qw8PVF;%Np)tBxD^Cr,q)]4v=nU/,XT=)$\1F0)1GA5<Y$i7Q)+9dY*[*<ulL1#ăU"moFX*AQoNgnV'BYWdvg/.apN:6[#LUU\^qUy5kqD\q:[Ag0($*#Qj?twR1Xm-/oăU",)<F,M:jnbGI<YS%4ig8)3lWZXF>sUvC=[I4m7y<(4nEaajwa?8V$y1',P'p7nVăU"/WQ)AQ9)PBNP3dy0y^??%;ZE5Yr7d[cLsX^H,d]-wF<j'baOO>-.nnyDN(+AX'=ăU"],q724N3.umI9'4ZtdS'f6acDinM)TjbQ*'t=gBNe*mG?rI2v%pHnVfsa,^,>8uăU"AW\EDvi/HIxc6qR6eW*-pJ/V&JGZ.dY+Lx$v#oF(TX\,RAQRj_A#.Bn#>%mj4Q.ăU"x^U4e$f>7fl5Ht2ZT1*N#apHAd2#(otoR<soA>4bl>s*=vx-pKRoJO<s.QrQ(PtăU"*6,jdcQtQV6\yE%'a7nxwetNX<<%WCZV,bmnZeVjlAX:-aeYX:wObq9\+(D_4'AăU"Hz*(KHs2DtyDw[=[#vi7tt6/Hz)+iY_C,[VArs0OY57Z]kcVHUN3?aHGEU\v0cZăU"1Q%p#kI6Pfn*oM6t<xm_Z#/x:^P-roE7<Q#V>t;HK7PP8[zg=NV=,.*Uv,&hW<yăU"hMYvS*:SyB4qF_L*;oG_^17>s?h$68A-7Z7kuc)X?L^qk9>MCS<WTZShCn/tm7VăU"/yvg95-?r]*2b4B0ZUgrwy=Ys.L6&:_:AC8(m*?kVFU$rQ,6#tn.jdSHPH?fA).ăU"(Uz_,S]Ku>?fh*0*mCF\gFi3J4j5CnB8<GF2I/mpSFbLMJ_X3R/ND>NA;0+o9o8ăU"DfG10(0$?7-MBA^vw8YE<I79Nh'K.cA<zj#6<h'O_lW.7A>']gVhp='W,$Izc^:ăU"a+&q#O]eq-rVBI(4$QJF#\4$'la]JkoCh8[,0hzCGEv&5a1[)L([Mb\L,vfB>;-ăU"FqVbef/=O<H0iFx_;*cVo'C-XEusjM3<#Z:Nrq^Jf:>cSIwhVV)6j2x&6D0MDy6ăU"2]dZ0$19Z]$1IY+\w)4?8$=Rid=%MlVFY?6^/T?K?z%iM\mSiGMlJcPX'r9.QtNăU"hhK0m*7r6(gK%3GVPRUDDcXkT$QC5q>#rX*uP2=YBl<$5\H-PB*NOnN*82CLXrqăU"8T<1xc.Gs%DM:gUU_#^DS)__g+LFtU$Rkpx50w&#Cm'9k)OQk5dK6Y<&&*WNXg]ăU"Z]Ggwgd#ISge4lB;,8YsN(^7U'Hm1[lSbFtZKGR]_lFYt.1\Vq.yel/(uv+y6buăU"Je3ojOa3(J0$e*Skg^jT0k-5#*CcYXk>#ho.]h043P1>ph<_lpYloD#Em^t:FlgăU"tN6_Y,VE&^6(XL[>>XfL\hXLrLxnF/2,^0A&7PLJ1><f/D;iH]1SBN=-5+6,GQ-ăU"q5nIRu2FT#uKd%lIO,9].kz^9TfnAJ)pBmkd*r4C.&ei#z\[#=m*iNbu[.)P/19ăU"9E3;?EG5=iFG>e,/7BRLlT$eZ:NJORV%<JqaXtOY<f)+fP.tOnCq\:Wu,ZVuR[WăU"%,6OLL49CB&'<+;V2K#cjois^tlw9MR$.jd/[-kr'\n^X:9xczl,e-KH?I=75QPăU"z,?(0Ly1P8\v.fIE5l#Eg;,H'YE<_a>I1W/=Bd1tN3)TmeRt]42+U4v0dC[<LiBăU"JL&Vsj\#'3XE$ehk)*RhbAmntC;P_V(Du&#4Qb*]H+Z4,ujGzR\]43HBq]gRJorăU"EjSmMZ]EPlxWZbFoXmU[cV[bG.dvNZpDEc'*2%]9PGa:btXVO7UGz/MSdpN(%D7ăU"G'IasA2j1,0AL(VcY#qvLP*o%d8vE&V$%/N<zdPuHG,s:^d1F25M;&[YZ$g2VJmăU"azrESMID#PCn^<]]Fk,6if'%ioVP6fPw%w\fm23r96mBgGwDpTTr'.Y/b82xi^SăU"'mGZv8lCFQ:pTU.*=:;]bop,U2*Stx*t)r<vFpZx6QGXX8d_#GY]Cz.2_d'I>BhăU"1u-G*<ca>B00g)CS-XEp2;.N%P/M5-f]b<,Q(dD50Y2SQC\PT0JC]3:jj=Oo=5ZăU"VEGXO$6wIiau\t\u_9=3KCaxCs3rA(r80N8TD9-P-FF2O=.+[>uSK1HJ$K2Rf0băU"(<KnGonf_yHtGo/TCft5<2I-[cJATNubB3nuz22ZWa=Ch$LGCT:t?Cg.t=mSQT?ăU"tBproGTS)O$?pFjN\JMi/\>\DksT6YX14Y<4)Foz_+-D64XSN&%up()%9%%%[-%ăU"b.[uF2C:XpP(%%%Q0%%%5%%%%fx%rTgq%xyht(u(SfRxr.%;,>Sm(9L[7ZxZo0săU":IKeA_)gw<+a*rJYiYTKLYzy14RL.D%\,\o#2utJl42;JamLomHI)hqkJGv/g$KăU"aE^9[i:2_d0,,\5kj.FS<a[44iU65D4:;A=9OkrAX<un#]mg+p1D5K,9;fP3y+măU"aQ9_;PA3Kv3C>Y=sC5r$1>qa5eY[Tq'LB<)FAX<>H[ECkEU#*9pn7YvHYBL;1cBăU"LAmkw$R?Lpa5+-xq9D(S8?+VC_K2aC'9s7;$C+iFr?hu9GcJ-%?1N4XA'W3k'^GăU"s6B[yU'Sji'_nrk1W7='h3Y=ZJm]DDR<jgSY^:3To(7>c\?Ixv_wV_P^tt:vS*8ăU"vx)lr:;sni::\wPJ-vJknDT'VtETPcK]dE\^qWSDNj2zR+;hRTdK,[kZ[08f*1yăU"&Vb(=KU+BE3&WWR61S8m-g:wXl']Z1)L2NQZY(A\\G/utCHB</4i>bS6;wUEYe2ăU"gF+dm569$K3,8&77leAf'^w=OC$ACXoA0bbI5^^Sh3*AaZZGKNf;RMkYgtB$UntăU"%v_PO0Xv*P%AN8*1jmY]mViF?\1L5AJe5ApbEZ;<_+/)&ASSU$Cs2Vc1:[AyZ>QăU"i'8a?sZFr\rmh7E'eAsPK%&/sCrIHr.7(^&N-AKbg3OzpxeQ9%a:6q&;gi,#JtZăU"VH,d1yxhFjybaca//D0ENt$]SG;9g$,DV4OEQFb%W_lkXHLQ;M8J/>];+ZL(CCQăU"s^LsSb2'+._LWHjrNAH)vo2_/7l#m5q_Du0bKD2sro$]L^/&TXG]iPTD8iev#S]ăU"PmJ(::[cc\Ov<29yJ/Y//J^'k#^r)r;d8l_1uuh6EAwE'6*QnAV-uQ(:6L#n*u*ăU"8n's0YDD3gfBQi'sSdIdA(JyuTcBaWA5-cZKLGZRj#(6bp83VH4C:O$7f:xn12AăU"TZ(hw)4gk&L[S(JGM$cKDrnN8h#g6=xsoO1T<eWAGgNYODRb]vy^CyvxnK<eli_ăU"'kP70dc#3hg/1q/kb.E'p,8Up8w?C/C$m<YifPirf2FK:n,*'&J3^eH6pIJFZBCăU"x)U(mCRyJ4t0](8Nc1R=VU5Af),M;OZ_Am_P[SF,kOTrIpP#iq>GEbO38jB-S#TăU"-F<Nb8K8fpQ:g,hKoll:0ysMJ%CW$?NuEsbPk/SyXuh:4>/zn#(7c>zgQOsf(SqăU"U%I,^(Bj1-[voD?,oHc>XAZnWJ$6i$r\BoEHb3(0JQYTKol,gXUNuH17*h1IaUSăU".E>o.x8]NcVR'xup(%)9%%#%-%C]0uF1J[mSe%)%%T%1%%5%%%%f%xrTg%qxyu%ăU"xjyS[fxr.b%XtTIm5MEGsu4B#4zffAAs?AF&=nE/;/aN2%kAy.:4ZbFn%_-;:FVăU"KuxvFg#_K.k0M,9Fu94lFQpF^lWnV0K33l=,ZarE%eG3M:DsYJyadY(U-F$W:nWăU"JqnqK][('tah3Z01[1p(#7?4'[QPkgk)^(J)l&=x]aS+zu.*]mlbahnl\m2m&zJăU"X<$Yd5h9n5;lO0f4F.Q\X3BpaAj.q'=v]^'b1:xEV9P$>=sMf)j\0_k+1XB2?s#ăU"iCR+(qfJZqQ&I9at+Y3VGJisPW,:1e1[TO7_+PO)HRB5yA%+[&p9A75fG7*nq.XăU"SZWjBKdle9>bOQ&nu>d1E#PP#Qzhqdh+-0u'Fk=nZGiu9]SsWp0^u(rp--nDxmqăU"4b\TC-P*j;Io)jJwcLf]Oh1,#rq=:7R/LnHFiat#J#Oc[h/9'I4Lxcsnk1G?G9căU"gbMJ;5>-noi*m%$)MxM$&YZcXJ',#Jw^xfUdD0jn<')#2z%A+.5Q[EiR:H:+;'uăU"\OS660PMP.2Sy/N/a:th1Rx/;Q(TR&UMgCH&H'\JV<a,uf%b<3f<vANjuMtCm0păU"MfCa<9QN4E,FPo&?\G8&URDrQb0IfsBDXs.F96M>wiLsseMZ>C5y+0<3tp#A>NXăU"7e*1;45a#%RL_*1n;u*LzDj9O'Cl+0<T48r3lDDD>#Rf,sKUhbyLjcs?/#DHV#qăU"kc7d%E/GXsEHRo7<Z2ZWe2d7FK--l%VPf2e9fPa)tGI)[u]..T1SGNFsV2.IPCYăU"Fi7Gj.Nyq)ctcVUV4*_PVq(=+8HY(E.fg8];2Y6>PZ_pXM5,$Q%)oQx;0LkM&-VăU"9GZ'LAI3ju8r%gO0loNvf)WbI.ax+V<j,7^/NdC7E>S_Fo[TB.$2N7Q\JS7o7(răU"<+dMNZ/GvT_kAm_Rc+wnduJnnSgi$4b>ij(Gctgl\U6WVR*ipa,u;TmJ?&:lu0=ăU"Ct<vNXD)kupIt_r#NoVf#(k[n/lileGAV:'q>>IObh0fCvnqB[+82GiNX5tkJ]IăU"Htg]?)c2WFTh&wi7m\,ShB4Hl.BgKe6s7naV?21&0Vd&>U>kd7AX2nh)?c2#E5(ăU"_B7^>K1B4Y2]ACGjiSqY?'YhW%]FD+b:1Pu.l,8LYCAixpfUM_0j>8PwX0(/&:<ăU"sq]>_*=7?]i&kP/EP[u7rp;:kpwV6SmoYLm;tg$eu.o:b9A1L7;'u#?Sr%UM.5_ăU"]<7)?\dO5?[:if+.&Jai5\pgbZLWIl-#,gesCqlZHudLQi]dcaBcg?8yu.zGJ.lăU"-ZB\pfbGlAa:2('1t;7d>\R\C)5_ajRd;TFe(V([iPlTk&_Z'e#j+WY?]SEYB5AăU"Ah\X:TaVOaNc,*lOM2F7<B8J\^Ibtv)=$(m,Vq8>=f$Y?;].cXj8,1(Cu1_DYW>ăU"Xd.m^Ra>^&N+6GI;Lmud2'\=q<R:VgxaIC,GXK4NTE=*#QT),*nERD_du&?8Z4IăU"N;Ape8?3<F0q#T7P]/.]$#>qo%Dup(%)9%%[%-%PAJUGbn5p[^[(%%3%/%%3%%%ăU"%f%xrTr%fqqt%hSfxOr.%,,>So5\L[7xM0-yO.o8v.R.FCR12=jP^7KVFpjyk)TăU"*,)9YE&VDs0xwG'g?gcc'M,'qT1EGqmB_E0e]n3\HZ#Fj+IDH5%QV$A%9GT1t?VăU"P.F\/D,hG*d?Bir&hswCGa6_g;iX0_UR3AC_S8grZrjYJgELZ3kM-,,i<.oKpaFăU"t5i4q[>=7Bh)fYxe/JnpvfA,B.,0JQ<j27=/Yg^htA^e%..eHB[0v*:,qo]/vujăU"d1.zC$Ln3hcu1pbp>oZfHVBIqN8_Btq$4#?eZ(jdIm,s$'mfQj_Y(J*MN?q5N<3ăU"aY71d-s)J<]G-$ZDF.X*PXj-,5\&WcU7^QRJ'G<-XJP*Hk:d&P&t7Jo-$,UJ<m5ăU"q(?(j4:S7f-AZX.[Q.v\*Au1K9:A,2bgcfdy$7tBlE=\dE-bjHatY9+*,4B(-6văU"gI\g]vqb6]/*FwKc\Q.O[^F<>Ge(z7<H_A3=h3q(s18Uwwhhf)A$xryL5tb2O<DăU">L:BCW;;dhshg[\R48h'$69f_?<4Pj$YYB>Ig(B)9NY-eIpWHOf\4#9JoJUe^ZeăU"fLGPN$oFqa(CV^r;]q[_[TAv,?j-J-uwSpvIx8T:.qP\>T-/oSp*P_3HXge%&pNăU"kNeBGDmsP?l+OOUGGfS5cIpp?fHVG5b:4RokJUV[$BsxN&NT-vfH:2N]K%Y#\\+ăU"d[oRLnt4UcMQjcY9/#j6vD]-98,Y&.)XGU?'3XSHeQ-6[eNjBbE^Z1araJ]P:iBăU"Q)EHtu_&adpqy(vu/Iz'<9WW6PKxJb>E)1')Q]Ce>n6D55$<:XxlEU5\a#',_h?ăU"^;rO&?tLAs$oybySsTj.'gunx3GXV;C4-VqhMLOTwmKul;Ql$'\t//pgu5h1$BCăU"$WEzhjOcI/sp64j.(jFERV$EcmW#UZ>MWJ0r4$Xl>+i%(Xd;qr3XJC#DQh$DXKEăU"8CCfP2i%b?6?PAs?YpHh7$#)+X>90K1Jf.,s_W3G>DgvBT,&bM^MJ,\s_&#qy[JăU"qM9]K29z,=qH>)T4=CH(do<23GkaMjV,i;:'tk*I\lsdEHPH55gR8b(=McJuhBQăU"7_FJdnuaB4/f(&rC._Szw48d(R4cUY\Yvg&&QhN4Q>)_q0ipZB.bDD]Nnp:hS1qăU"kaNd*t>lKUfSJlnv^K-59&R$W6X;HLs:.Oo*_;>44*$rmq.bgj*VQhAjXpY3S/CăU"Lr7-Ycw2tn8kiLTtmht$Cs2JH+,K'>a\)z2u._Y(Sr6kT\-gDGRSFU7syISw-dIăU"cU-R8up%()9%%%%-%&2rVG<igF*%H)%%%)0%%%5%%%%fxrT%gqfx%yhqx%SfxrWăU".%T=B[m5LS=Iwp3o0ci*D3rKR5SC9&\28k;31ZIqJXkIN*Z/\V#*fEO+wMyB42&ăU"akd_P*mG&'D^^Ls2hk^V56c.I2?asC<$QRfCa0^r;cXYHU*E5jI#6X=c9,>Cd*găU"b=*b+\gAC:GNA^.pn)UBK'wK<<mdYk[FZm+Y4V.0BBp7Z<+,\=;puC3bx?&&M02ăU">LY,1WU?ePc#LYB/mF_Gl;1cQ[$]u6<_^(F.7VM]h=-k9[6Y$i30_#&M=iYWr-WăU"d.OHsRXTYVE#G8+0g#..wcFOB5aIq.''af$MJ=yq<6YS<H?X.pgc07A*9K$irK:ăU"k4setPH19[qzEs9AECrV:BTB.L8?,uZF]g_EGaqlpWl%_JyL\Vx8TORrM1lrgTaăU"-kNO:EA5iGdmD?d=F2(8r7ljt-)u'5p1_([XD-uoBB.y4=ghwGm(2KQGbh]oAq.ăU"0mf+ABYWQn4mxK;EuK%j_hw>OAK:H5iYX,PH9ooIkIh>a%_7IFtHSJcjAwj^R1dăU"0n5WAgJ&XA1s0kv__iz_:ZCc;%kKy*(v5OnmRu6o]-w-G3K#kXDlTp[(oTVA,vuăU".x29iwCI^=fw6FA4geo;M:',ITx&R3tP89JMAue<<,QQ9&+Fs.)0b//&233ei/năU"ZR&ZPvMSI?fkkF^MZ^*FYA58N2W,TWoG2LYh6[G41Y%ymp-;njQb_4F8+9<&sh6ăU"tMsC19LCh,tN=*GBW],ILfq[D+BCqvdOWT4?K7D,bfQlIpGO4m6HMD4x*JBw=,RăU"nrl.()*\p\y<gjLeJiVBmM:t&1mmLkhgxs&1BFatsiBl,1Ocki[QDt>>:j&jh;OăU".Sz^*PFZdHVbS)BTnhwQ/5MLQ[mj$0.#D)RB/NJxiwvC9(0SeIM(t1v^$;VlY[)ăU"dj>J)>2a-0?mun/N.PEF;Yp$Rl/H\*rl'tt(CX+:h]Qp1*vj)Q4s'3'$hl8l)beăU"V2yWFgMtnGHGg,Dkwx\kEJEUNPi?+Gp2:)=mrZ=reUR;(959tOP7*w4#7lbN7$MăU"18Cf#$s\bE6^GQ8?NsMhvqXM&61KQ-e8cba_HGA73aC.C2G]<1z1mc)ViFxLg1]ăU"]xMQmHTGi*ztLPDG(_C/:(JO-#^)s7OPp11%mQ7VRYTKAj$'l$#i\XL(fk=V_scăU"rLaIP0wZD*[clC<Gh>WX-<'s1Kh+Um7s1DL1JHsMS<K>1:rc+TD)r[2Y.7w&V$1ăU"vXU5H.GdXr+SADovBVOeHU[pbj:Rr%h]G/ncK:XRF69T96>QrPqFP6WBlU[xEuHăU"<T6gsbZ-p-cF_G)uEb*[wap7M7g4gUfhxQc0j),/6ZVCqK9:9p]L5wu(a]9&/d%ăU"u%p()9%%%%-I%GPmgG5pK,+v-%%%m#%%%5%%%%fxr%Tgqx%yqns%jSfxOr6(<,>ăU"T]7]wQ(w(4B0AX?\UkK]]]lVoJI*fSQkOPWK-S%jdM;/<0djhRaiq-XX1nrBafoăU"KKh=T,q.m3Q$fh6XMof:acVs0O(qK[HOe7kOYCZ8ta*8:Y*q-'W]B:'R+s2'=UjăU"HTanE]UB+Z<*SozYXTa.gGk(YZS$#Z/U6#WWI;TPN,S:W2oF>4Q%,+Yq;a0o)L=ăU"x)0qW]swdrv#eY'?*\ofLI*;Fqi^ZFp:S.n,v0\ZVU;k?#ehLneZg:=#)%.3ujZăU"][,$rrCA26F:$>i4^qH9<nYbDn7^Q1%,p[+nM%?'zPw'g/sw;l(sFiX<j$q1XEZăU"^8tQ#e$ilp%_tOeGe;-F+gPLFvPflnOAQ$.vx)tlYLmll6N[VS.e8<.6jMm8P0făU"[hbZ468TjgVNNhEX1.[Hr<BdhZNs&IBTr2)axmkKGoYf^;iklyNYk%&PJPb#ZNGăU"8Pg$er(1=ngR\qWRAY2^izAvXMqTr\i'Rc<Bu?Y[x&bgt:<EMvNN:G;_w/2?<VqăU"*_]9$,C0X/rYXF&)9q%8t8Xp&ehI=k;K7Gh1+UjLM%g,K.&0XM>gWYMS6v?bbZIăU"gSuVIv&t2J>4T-]WCPay8$cEC0m*(lRIYRj%**6[TI0yEa(k^Q*,f(\4bf6c=LJăU"rC;LiQ)d3wDcJejWdcNZ#ZJEj1*yC1rQeHs.Vv19S/KSx*l)[*#*l=k-ZjijS=$ăU"HV4d6547aVFfFUvMOpD)lTPFFRl'IAg2OJ'.>2Q/drY40MucX9)5[X4O;EGmP_&ăU"9?qSRZw3Y_%3]o+,-qANI=1ffv=B>hd3ueSOh<r0sMf'gK#/Yw3RJ&qFNQ/k5.căU"LJm.dZv'5.%\)K*2S/2dwikR]WEj]':p;0fn_cN+Cg++,AYFMBQk2gD9T?wR&%făU"N&0D3TnRl0l8Pb4iJaxX/\Ot#r,YxW6h4#-j0JB*lr[*wc9sRX-AYm9fl?eBi7făU"[#%,)Hz5;L6+c1ae2CRy.Nh#ad\97v1o4CilM6+U\nKZlIf[XLw2#ebJwpcoL<>ăU"l1,MI5c8q+jg+Yl>9Z*X:Ah'fqAUvIlxLhv<<C8?S&fr'2W7-u#6Q).48=b1N1WăU"ho_I*7-I+M;hJU6KE:O0Di,0K8L#yxQj.X]$--bnJZ%mkhlar^MCa>?:HMs<a+FăU"s.vETTM481yw\/hN/cb$0[WvdHkT8)7cX[XRL%\r+?>%mQ9/Z:iAo$Dz&xDXRPWăU"cKo>iuaJp&2ZJIM*tTF&Gp+5(:ltf,cRev[t7jWX]>B#WSM^6)TBN?#YrQj:.'?ăU"=D?2ueR.hv_/7:vFG=ja&arVYsHLV:w.892FCJ#^Q*Z#u,?CX[j?UZZWG7_:Vq6ăEND SUBăSUB V2ăU"rB8#XP#8ND7$<7ZCW[du]7YG5bsr*n=LR+WHA8Jj:c?uRMmak87I1SmU=oK[.RvăU"2:WuDm\.fwOA=r7,CskR2?>v/oR5td#0BdWRaOr3t-&[']wWB/%xh&,.qS6MnHAăU"9]O,?\BG'6&7^^E1i631yr2^%BxCN6S#Oa)9jdgBlb2$J7R*zr%^LLlL\5x$AwvăU"<Dw$WyBTV1l]$v:[D5ml\^aVOH-ZJa4$SHC5aMHF^p^;$RP0D()T5UJ5IXw.\X_ăU"FZ.Vc5,]nw1$(:IHQsckiUBlZxc]n0HB<aOB_>S=BVY$nza45.p'DrnzLv]gYboăU"LNTdss<YWFSMfQ_O,/OSAbg_IOf1y4)Qj/z,JSg0=[s]h*g):yNV8nMt-VcmQaUăU"[U3mFhxB/G-%oB'Fl3GK+?DKg?wi?lqM&cR/]3:$macx_#?k1BPPD6DQRg#+'pUăU"nl-Q0&\+imGn0CYk:GkF&&L\t_KoJ#WoWAK1g_1fXh2;TSh+Ln?cK9_]1_vOkaOăU"8kH70Q&mlWWVtaQ8kBs-DQJA'*MGyz=HU'_1<^^u.dOgNQ/TzeSKbo]9fKRwkD.ăU"Ekx2D$3vYy.R<k<M/2daXm;Fb2wxZ6()BLqbawWFpnjN]htoW0y9YYH8X=2'Z]9ăU"O:+QX(ZL9p<wPX/G+o#Y.hoR*k&Oif'GH0Q_uz-s1+_[kEa$iye7r%TCVqGEC?+ăU"PE?k1efV3s\gQqYW=h\wWsVAOGd(#?CE3CtFqI-SO;5eQBR_\t,>C=P3)lC+4*aăU"gLoc07$alJZaxwc+ByMRmWJiP%LXU9WOJIplZ(Fs0-q6OV^kI$05k[i,bc^M3(căU"PBRx=KY1aG3o#V'_Vg[*'V1*lwj'LFOhfn?Pj<7tqB#JlMgspLA9rVp.osRd$;7ăU"fu2:VNC9LA;H9-M'magqF6#AYh9Y?_m2y5lJGF]ZcCPT%=UKHfTy],dOw-kU3c)ăU"*5]vAh3m,AOS'p*8nHe]EOV-,+WN3RA(*daP<;^3aJEOR7;YG-K-Hd5VvPpyHv/ăU"*i4%2?rKRa\^le2GI'&Xv3oc3%k[R*9hS74FuGVMexOK<uNDd.WuMC'%%WK028_ăU"4-DxqtRk)kLY10(XkykPI7z?Z\*2_[<ylCnOO_eeIwpXOzaFHJ%Ih1pk(KcDe1LăU"]=FjuF?ZXX:(%&ZH^n1:^Tim0eU=lrYl>v=#bFGUV_No;x:^$$4A(?1.GEWy&:9ăU"vK>G6%>/2F79U,OvH+0iKD.I]d6O)YbU+[s:($o^1YOR157Sa&?8VrX:_tGHvD2ăU"h[f_9UC>uFI+]3\s_oF1_zJet1f5Vsu.o2(\8hLAorjS)0U+<]LTu\RYq+pZKcMăU"8w%8_n[ETlIk2n_U_?kbWu4xF^n%Hak?EZ]YEMvET_EiOX]r)1-HSY,%pNE;M1:ăU"4j%6EwSZ[ni[;88e[;<BI+?F4cOcVBtYx.uTmS]R0*%HfCUm^7koe;T0cvjU8V(ăU"mMKTrFabs;uuY+#3]W.BUORfS]n-S2/]bx5hQut:_hf#u8.LT>3:VocK8#KqwjiăU"dM<<P&8FDnyy.6;Y;16G//^YkMxvNKJ4D'x&up%()9%%%%-%/CydG(8P7c'I)%%ăU"%G2%%%5%%%%fxrT%gqfx%yusy%SfxrW.%T=BT]5Lne&x<'ehv,$dIJ0DEl)(4e0ăU"s&nck)U);YG48[jTgJ8vow?MwtB2aaKn+'mF:AQIG6*_k^XXAc<*acVs04(qKJ)ăU":I+CLHt[HteD8Y+(US;E^+ui)R&R;OyuBf;tc<2V,B*T+]Tu+_&Qa;_c&WD)xX9ăU"5;X$Ug/31UspDkLLrH9#&$]Y0UBBxfN#fY%F.pjx-E5#kmqj+tYX8?+KX.*YBMiăU"%Qm]6^u0p8+X9Vkvm,A>]_P]pUA<2N+sJ<1[j^1O$E$-hj,Gdsw'JG\/S0B:*-răU":?oSA9OkM:.:yJ)]ZJIZU:+9lO$>NI++>cv^M&yc7]uKJk,L+OdEO4Y.z#)TEt=ăU"9PodJ0Jr0(Ql?7X2v[8xccZ3c)Lt70[R$m70,uv0T*k[>uYZ^4?K?4xKwk4[,d4ăU"*nB5K7V8.cd]s-qwDgh&0opqa:^nbAQyqySSr7>G-DiaBrt-7.^<(Fc2q8V^W*văU"%Ua2uf,9EwHXW+>1^f%'H0R;m-'DwE0In*w9*[Jjp^EQg:3Akq:KCF&'>*\(_&XăU"<y55hjK%KP^=1c)3(s*CC4HQ$+Uw)AhV(HMfa=IJ*J2HTou(KJ2l&VauI2*]$W1ăU"biBX%)%)vz/[g3->9YPINHYY8VCGU1IMS&/7sEBx12.B>IM.a'S^:%9#HZ_eVJ)ăU"<>nx.VGl>>^1:O&AwjH<+BkTe9-;VZvl$0pX-U%55m_5_Y6Ys/eR[RhvhoQFgU=ăU"hEDq.vZ:cE'Ld)qB#F$\[D+/sL3rFRk8ogW3ed_Ki6DJP[J\y#xOP$1DQK_$WL2ăU"bCj#3$AcmfQMPe(x&jhROPH5G>-*&=ArwT\s$v-b4elTC\_z$;b8](1RTmPwtkQăU"]8RD[$N,X8j,K_BKL-.7nSal,[>B1<L$J5?ikLW]XcU137XOhim>ddU?(&RPonYăU"&zlo/*sUZORss<$PtHfD2BJ6+b4UtouvHN15&75ic.G8hHLQ>)i&nJXZxZ>N4$<ăU"VH=dB:qZlVqkkS:3$d>ILpAMDvl)+Lk8W^kBPagta/EvltAl&J;x+=f$9?n2I,răU"WBe*U:6lnR_fD^Qsq=lBXyq5O*T1?<Nf\tEcFzyB2mE(&40I>8K1JY0r7(-9_laăU":3JTSCr'ka2J&;cutYTb^slFEk?gtBZ4?/I02)yJh<KD:*76>T3IYLrj\uXyo./ăU"6g/^teIDXzSdUqqm/H-Be7ziUVr*FC/^_Cy\bQ+.Qs5))e#)?C#4l7DbGzD?DpfăU"7mW&>D9TlpOB/H7bD<,d9uPx*rD)UtLBuy$5QC-)CWfij+cP699aGD.LX/]L=%_ăU"Q-??nY=f9q4K5oGi+SI.BGN-CcL\pd2d:uW^__M\9n8NIP4QaNCZgVlzj#]UR<ZăU"4?/=k6TLQD(:$G0;_algkjEgZhn,tAJ>&-t:ZS%t8XBd0J2N:YKKi&6]t-ySVTMăU"lsOFpTqBNVv,r9/\rc?#0+V5]>Kctk6tr:2-M)v6bt7$m[jMk,Tu0*1LD?E.IYKăU"Tw$H87J_H02Z1i:fQ%KtU6cB]u:NBY(Pqorw'Y#1k3G\*npa:Z.DL8>1od%up()ăU"%9%%%.-%El/5Gj]5_?1-7%%N=%%%5%%%%fx%rTgq%fxyu%zySfRxr.';,>T_17LăU"e&WxVRVJZ_Wj,du:$Of0_3kvnTLR=vSjEUq4[Xj#=dIjfqaHqXTVVs3BE03._ZGăU"Y?;VVB5GKXvuqmhn5rR=%rrkcOm15MW31m;ZN:l1-ac.U/-7+BK9)VGz^W*qsc?ăU">o,p3_Kb+Kmt;Si=r=yR)%%;6p[7;dYm;Rxh\JRt<g,i81[V67g2asZ:ZmTY[pkăU"v1Yr_1>L:X?\U&ttU$^&FhLL1\K6B(b\g6sYbM7gx$N,.IUt?bR4(mZ#\b.JQGmăU"Nx7\kFHq%rs3u>L#U(\Y'qg76[[#D]1dg#7*;YcP0b1eaVTc$Q0>9'QiR+:7J&YăU"t93#GA&H:]0KnQDg.?uKKMKo6qKSpgbP8[cIZ)\T&fVfP$tY9nQFe6X?6rY9ovtăU"5Kkg>M1,gM6wRvQM/p+kiX+hdQn>xiL;'.ZFRDj\:p;_Rir:BH;,dY:Rjc4l/Y$ăU"u50McS.DNy2RHDYi)5a%n/)mfIS^)Ko;(Gp-^,QQw8PVF;%Np)tBxD^Cr,q)]4văU"=nU/,XT=)$\1F0)1GA5<Y$i7Q)+9dY*[*<ulL1#moFX*AQoNgnV'BYWdvg/.apNăU":6[#LUU\^qUy5kqD\q:[Ag0($*#Qj?twR1Xm-/o,)<F,M:jnbGI<YS%4ig8)3lWăU"ZXF>sUvC=[I4m7y<(4nEaajwa?8V$y1',P'p7nV/WQ)AQ9)PBNP3dy0y^??%;ZEăU"5Yr7d[cLsX^H,d]-wF<j'baOO>-.nnyDN(+AX'=],q724N3.umI9'4ZtdS'f6acăU"DinM)TjbQ*'t=gBNe*mG?rI2v%pHnVfsa,^,>8uAW\EDvi/HIxc6qR6eW*-pJ/VăU"&JGZ.dY+Lx$v#oF(TX\,RAQRj_A#.Bn#>%mj4Q.x^U4e$f>7fl5Ht2ZT1*N#apHăU"Ad2#(otoR<soA>4bl>s*=vx-pKRoJO<s.QrQ(Pt*6,jdcQtQV6\yE%'a7nxwetNăU"X<<%WCZV,bmnZeVjlAX:-aeYX:wObq9\+(D_4'AHz*(KHs2DtyDw[=[#vi7tt6/ăU"Hz)+iY_C,[VArs0OY57Z]kcVHUN3?aHGEU\v0cZ1Q%p#kI6Pfn*oM6t<xm_Z#/xăU":^P-roE7<Q#V>t;HK7PP8[zg=NV=,.*Uv,&hW<yhMYvS*:SyB4qF_L*;oG_^17>ăU"s?h$68A-7Z7kuc)X?L^qk9>MCS<WTZShCn/tm7V/yvg95-?r]*2b4B0ZUgrwy=YăU"s.L6&:_:AC8(m*?kVFU$rQ,6#tn.jdSHPH?fA).(Uz_,S]Ku>?fh*0*mCF\gFi3ăU"J4j5CnB8<GF2I/mpSFbLMJ_X3R/ND>NA;0+o9o8DfG10(0$?7-MBA^vw8YE<I79ăU"Nh'K.cA<zj#6<h'O_lW.7A>']gVhp='W,$Izc^:a+&q#O]eq-rVBI(4$QJF#\4$ăU"'la]JkoCh8[,0hzCGEv&5a1[)L([Mb\L,vfB>;-FqVbef/=O<H0iFx_;*cVo'C-ăU"XEusjM3<#Z:Nrq^Jf:>cSIwhVV)6j2x&6D0MDy62]dZ0$19Z]$1IY+\w)4?8$=RăU"id=%MlVFY?6^/T?K?z%iM\mSiGMlJcPX'r9.QtNhhK0m*7r6(gK%3GVPRUDDcXkăU"T$QC5q>#rX*uP2=YBl<$5\H-PB*NOnN*82CLXrq8T<1xc.Gs%DM:gUU_#^DS)__ăU"g+LFtU$Rkpx50w&#Cm'9k)OQk5dK6Y<&&*WNXg]Z]Ggwgd#ISge4lB;,8YsN(^7ăU"U'Hm1[lSbFtZKGR]_lFYt.1\Vq.yel/(uv+y6buJe3ojOa3(J0$e*Skg^jT0k-5ăU"#*CcYXk>#ho.]h043P1>ph<_lpYloD#Em^t:FlgtN6_Y,VE&^6(XL[>>XfL\hXLăU"rLxnF/2,^0A&7PLJ1><f/D;iH]1SBN=-5+6,GQ-q5nIRu2FT#uKd%lIO,9].kz^ăU"9TfnAJ)pBmkd*r4C.&ei#z\[#=m*iNbu[.)P/199E3;?EG5=iFG>e,/7BRLlT$eăU"Z:NJORV%<JqaXtOY<f)+fP.tOnCq\:Wu,ZVuR[W%,6OLL49CB&'<+;V2K#cjoisăU"^tlw9MR$.jd/[-kr'\n^X:9xczl,e-KH?I=75QPz,?(0Ly1P8\v.fIE5l#Eg;,HăU"'YE<_a>I1W/=Bd1tN3)TmeRt]42+U4v0dC[<LiBJL&Vsj\#'3XE$ehk)*RhbAmnăU"tC;P_V(Du&#4Qb*]H+Z4,ujGzR\]43HBq]gRJorEjSmMZ]EPlxWZbFoXmU[cV[băU"G.dvNZpDEc'*2%]9PGa:btXVO7UGz/MSdpN(%D7G'IasA2j1,0AL(VcY#qvLP*oăU"%d8vE&V$%/N<zdPuHG,s:^d1F25M;&[YZ$g2VJmazrESMID#PCn^<]]Fk,6if'%ăU"ioVP6fPw%w\fm23r96mBgGwDpTTr'.Y/b82xi^S'mGZv8lCFQ:pTU.*=:;]bop,ăU"U2*Stx*t)r<vFpZx6QGXX8d_#GY]Cz.2_d'I>Bh1u-G*<ca>B00g)CS-XEp2;.NăU"%P/M5-f]b<,Q(dD50Y2SQC\PT0JC]3:jj=Oo=5ZVEGXO$6wIiau\t\u_9=3KCaxăU"Cs3rA(r80N8TD9-P-FF2O=.+[>uSK1HJ$K2Rf0b(<KnGonf_yHtGo/TCft5<2I-ăU"[cJATNubB3nuz22ZWa=Ch$LGCT:t?Cg.t=mSQT?tBproGTS)O$?pFjN\JMi/\>\ăU"DksT6YX14Y<4)Foz_+-D64XSN&%up()%9%%%R-%shSlGMZ8Z'1)%%%H2%%%5%%%ăU"%fx%rTgq%xyxh%wqSfRxr.%9JsToL5LEsZu<mp,9arx&V'2y,+BnqSZ99YXxSWyăU"^4Zb?s;/PSn,(rt=$4dI(sowDVwT]_oVX$EuERR5kJBvTNbEOm:p%Y.)[BKzd=.ăU"m$H(YB+1JX[)81.\_mnu58WG1]?&P*<pkgi9r<W=/VZeloa^PKpa(jin5N5%(XRăU"eDh$[eWP+&k.uA1yYeug,)<eUh%/r_xcNA%9yM7%S/.1_=ACV(f0jM]:onK&OL5ăU"Xf>+?'XEG-)3RVcd*5:lhEKo>;fQ2H:ohv;05zrce#4N/3tao-m8jBfu'\D0d.IăU"[Ww7Sv$xQLd5x7M5f:-i9jQmZ<6JXIEkkpdg-*>[T*-&8[mxgq\x+FlMDw0s*eoăU"Lg]XI=T+TyafhnZE/AYAgDGl#5_+J),-_pp8\Ve\&$R8zIxf$dA(v<Jd(#3CL9măU"O&eXQVvB\c1^8^dc:*(%N<9-w?'(D/[%\>nZO3wH0hY]6iKI'8ak,d05-1C0+0LăU"aH#qM=6IMd&6^jhD>G)L,>/Ga-XqT1ay&i_do[6Jpdg#=k^=l$,*g;?>?RJPD'#ăU"r)E]fq]vX-v$H?/P$WkcmUQZ4v/(crWn#e[&D8>hqdx+-(:hj(L$W;+WO]5iLt,ăU"q6jh^:>/VYhUgpx8;o,069QB_$pcZf8V]f,*%8^,>TRW#UQgq.>8%tZ*otcdw/2ăU"<GAHy90N;#Mgrsk&xsVKl%GdGoUKw[#r2:Z3g/YWg7(t1Tq#/(\s-.P%lo$y4??ăU"kRhx:IGeh(FHBkQ+emM9siQbx:cB9)gd',mDp7$'4BkZPe[.:/uWn-3Y5EUidL%ăU"X[[A(J&2j_,yQ04iV]CadYc3Z'4(F]ZHk.0;=I^Q4:kQP5cS)O?P5/%zGHw:p.)ăU"WtzcU)6<Fag2#dQb5Y%[2MLr4o[p5+_qEo''[oreR8yZuv:ZpT^abv>MIWJdU.>ăU"G,SswP)v^_<d?8QhP&R]857B'J-&_=qjP<X(-WlfSSOO;u(g?0.M+;\[^TZd[?-ăU"pXE?dshHhj_xMx,b<N$soVH[+Mtlrysj2&]2/FDJq5fbR^/<Xf4x%8mDP=X8pAqăU"8M]^#,&OTP<R9f\e[ljHiSrfK:#/XC?XJ2$OzHCup>j9%[^q9]E*b/[s7X]xIF4ăU"g>S_q#Q(ZU<B&T6)nK/QnVw,%bjnzl-?.pZZiI(^hxy82P]hi1-G%[[zABtDV]^ăU"3uG>N.)lcfdb;\dbZZ(*EXs&:ruj:JIbDO]h>Jx$]rq6awcS:JSESEe>YuaAnS]ăU"[Q8uQp70+^n&[mlZM/cFMeleLaAv%2Ka\tK'8[L08NGl7slOY5^?]U(zRl=aJesăU"AEZx_b<>?ept)bsW8be>jno,(_d5HRe:pm'^J>mPhQ\3X[B^fG/*biY03lzeWHkăU"nWJ&pY?lo:#_kMi.0'\B=JlZQ#OJqTG2I1(JtI.4v]*xw26n+*i%qji4jMXlU6oăU"G?m=o6#I,iolG'l$3)cT[1E$bF6B5JhQcgelYPYE0Q:L2WA3JlMN.1hh6'W\y9săU"YSR0_Fj(m%8Q0o-g*eNup%()9%%%%-%&rrvF*?zyW'0'%%'3,%%%6%%%%rnxh%TăU"gqf%xylj%ySgfFx6z<,>SU5Ww]=N.]F7ho#IT*I8x<b>k=bu#xeevun\OK(2x?:ăU"mTwthYF75_T'v#fmryj\ulV\l*V2\>t,:fsP=BJ-F=m,SpjP0XupppDXrH\[W*MăU"4D)YN5b>KTgSee$g&up4N(1Jh,y#<cgVq*tmIROBBOj>>7Mi>7St,)Bo$lF\AGkăU"T/XgsAQkj1BCC91+kKw%8jqXqeUOP.hK4EX(+d9d[I.C+fRK[M=#nWU]4=(G_q;ăU"rRwD*?tgj=3)'MeVsFL=?LIHgY:x:fWApaYlLP_g^X#bMP#t]1iEQ1d^5oCWhC9ăU"f*V%I3nA#W1qsPCw:1#x.t2Z\3Pp#[J[TH26efgT5U9mP_HsqHFLBC1%b+55)g%ăU";&M4*b?PHxlEdkuoeEdNFMbw/kFYkH1eo$4#e]7O?b]K_Qsb1%/rlfzh>O+fQOQăU"M,3Ysmuq,)Lv4VKYpRn:K0ms_'uR1#?+2*L;Jm.tR-Iv+[23*V=:#>I8TV>+R2QăU"f#'90Pm3RkE?e7FJKejPyrP>2+5p9%Q<vJj6jve5iq-m:v%A5]Kq[AIGM3pGiqGăU"jOlMsd2BWQh*MsJgD4Qw):O85kM8;gLpx)[X%opAP$&Ha,SE1UvA([?*-iM%yuxăU"6#Rm%]d\#,2v)XMJ6>cdv+/;^jNSlPZ,w1==fdG+KLn:22eAX/d\=^h6$ceeb#kăU":bV$7[a.,1dgxPS6&Q3>_g7cBT'<OZ,=)qufD&b&Dj+'tYxQ.Ir6#XSeaP-L^75ăU"z;o$(=EgOzR(:SExzQ*\;MYK:G0kD4Mq4pf9W%oKs-pt^d&/Z>\<iW;k9=>qm4săU"/YrNR/4ldsxprh:jDbya*%ta9QTcNNCI5boB9'#eZvU#H1-\,-qi._jT'(4<N=văU"+%up()%9%%%%-%+k#fFBm-Ni6'.%%F)%%%6%%%%rn%xhTg%qfxy%uzyS#gfx\LyăU"<Zj7e5wS'qD+nZg-n/;%,VA$mRTd(z9Y=Q(-.jH]Se8A]p3IZx7,r02/fgL6E-măU"Ph#661qY9.5j<ELE_=7J7cA8bRdaem-_'eiZH/'<GZZ>K4%#h),rlCA)pty0[RzăU";>Jgp3jg3%oK/Tw(7)r%>k>h9)-f.WwMYt7EWmG4N;HY=60pU%$(Nr+TH2[$)UQăU"hq=p-E4SX#?*G%#Nkv;B3iAu(k,7*fERAc-F1OEJ\V8s'3WId61E7Odu9i4Dr&TăU"4Ct$[rPW=zT0*ab]J3d$f[>Xbm^)u[qKTLQ$LJ/eWD(Qiu9*y\xEu2X4DmqkC2GăU"^TSY0&hwW[BS$3\]Jlk>QBR5E)n8>[I0E237*%oT^PPr'Bn<4FG4zWEU?h;>yXfăU":e(ZhD/'%%ffL<q_&L\ZqvavURLWT9NmfmQnxGoP2HvD(jG]w'm?2'm^fI\'#eDăU")I&CuGPb<dsp'Yw72dMrMsN^]n<Y-(R=kVu#prV+^ch2YW0(U5DtUtK\**Q>3dpăU"lFld6=WNrBfim.CRDltr&h9hu#<J-S&rhE%rf8/$rf)i]k+6B2O+jHatd?Kt;VOăU"pr6E,(LYDgW)vztx+kr^Z^Ojq9/je5:AfE;I13-u&lH;N4+kO_sJV2<m>EN/PW1ăU">sypc2_86</%B2,Cg2lU98+>=Ts(%up()%9%%%%-%(OR:F(D=eG1,%%%'5%%%6%ăU"%%%rn%xhTg%qxyh.tu(S#gfxL_&<tTRo;w]*=N]fe4FJVsYZ&95y3A7+h,0I$;păU"u&-o<5t81Toq[YXKnlvnJG[>$I-D,sOxjblkl+a$Z,'4$,UhcE5+YtD-Qspa$;NăU"3P-%aRq-Xo'h1N;XSWVZmDr+^???[)h$w&LBQJ,]3qn;ZRw4e(3[9ng*B<9fcgQăU"J',<5OK:TH]9aSFQpaZ$cc9;A&o/-^Jb3GFs8B*arAw7H&k?LP)ta?+4u;B?A:JăU"CHdFBnc,GkZ#Ig^M8:)&8IG/9J*Ud'vOF6I'm\[qwuS.fO-X'.%&Pdv6xBn/arWăU";Q'lB?;+K^^_Q1b2O$Tip[hd9:z5%0-i'6SIjrA0d;7m6aeA.n%fL8MORW6nFl0ăU"w(F91(#Du57xjp)TA)B8BIf;.?Naw;o;7qM5LO._#Kmdi$xJa&z%,ot)k+1i)XCăU"ihu\LJi,5:d3g4&at7)]w$$b>E4w:4Bp5^8I&SG7UJJtQJqMKsi$B'2T+zjF,>iăU"Fa(7]#,wb:WW33*$gxL<xQi1F#G#J3/nUSoo^4^SSnDasLIl1CB9%r%-oCdi$-dăU"#m##b;9v7g;SyAsd-jpJ3R5RJ=VnFvc>n&I&CiUiX7Dp_lSgMl-$gsZ4F\jBaVjăU"P79m7,\S</=QW^YE^[9T(SdHl>%S5)/k/c:1k)<MK%sr.8%;H^1oEWf()bRwa<qăU"Q#)JdSN'nwN1(Q[;/:j:.$uW*s(O*Xt<E:cQa[B#e_0IPDe<28Qoex78%$<g+iHăU"XK_'n_I)IR_F%6W&.A].rXqn\Xa\3WQ?'w?%E$&6cf/J&_?cJ'YJziK2)xC92mjăU".o:JSl3(TQq<*C^WJ6wXw/;,1r1^%tM1=6(B0I\b9]KK/ZfOx]+Z&LA-iO6IJ55ăU"PgaW=.bBL=>FbU(W>z(TjFz#pQ<T(y]%s^tN*IGnu;oOT%SXNGcbkb%$<Js+=fqăU"1#GOEcW=]YS]kp27Lu6rYOwB((\K45mc*xgXtwaUEx8%=d5EKsRw\KiC'Sn1Ys^ăU"OERC2HN*o3=,HZL[d*SbrN$7StWkfH6Vclp5jlAtA79^p%p(XbUw5Xu#=P^S\6?ăU"\rUolO/NWWfUV..U0xte;$SERu><TBlRpsYU<W#?So5+3VnHjc8^:v_?5P?WvzgăU"UH:.UrY/lju=UK3q..C8qq^a7Dmm<VgQ$ZJsT:xiHN1TC&F;HMT\>'.n+/Xj3B2ăU"jWz5z\?H5>grn#(>d=Z*3ND'[V74u2LZ?1.g[Llidk6kf/5mLc8J&o8gq2b;W5WăU"cPFEebm5v7M^u[W9]sWH-1KM7T9\GXBJ0HYU%52sY(.uHuoxwHswf5.9b65M96/ăU"ct9cSd+c3Jw_^kY<d'$U\Bqi$Mm?2X'il>>RPTewCSpkE_I0(%;^ppx^i(AU#y>ăU"V?\r.9,o2iA&xcS&aWSH&.rCgnLa#T(43%h?KMouj]u%EVPlhQ$]A8S4'<wrx?făU"#3gW*QhY1wX'LYEUq=xM\jxZgP%g_Io)mI\F3lK&gTj+=\O8ZKJ)t$%wFvxqWuCăU"PaB:\5d1AHsxzH]miF1?0H1_NOT)*PZst>x8r;=jv>\:-.QyYf7-KA(ukn13J&căU"OZo964CRbI1HUZ_bhA2+51xS,M%_D7Er^Z,<us1O)A+5ynpz_-Zb9APoYV9MGx1ăU"wpj;kbX_ko5,Ack5^A\IXAH_kOOaz_wCC'p-;\lE10%b^^/+BqL2rF5QNhJOm<SăU"3%01+Fwg81,MvA'#arRSKIB&M(mRtm>lWJPvPff*88OPPCW9)#FJT0%9)S3J-;%ăU"8m[pr3fVm1duCr5,&d[=mEdsmGm\2\T:%m^qe_BKYD%kcwYVNC-Og(\FF8fnqV,ăU"NZwNF._h2DMpNWC(SPLP<+xIuoa\_ZU:<1])cmu'aTSr0\Kk;zQ^BcNt]L>T-%aăU")xSVm+PW#Z9WU-3Zx26AjRnZ%\FY?rWC8w.H6L>8)tHj&sm+EN2j3C*D#C2.NY*ăU"G^8.3dZZ+To:?]NqCi+LKVGTb=]1SEF%DaLcMtB1p0SC4wOZTJiRH8pFo3<NVHGăU"KSHT3SCMW$w&ii>bbv+maCBom()TVN2Zmu3qni1i(4%3NFDdaM/>8sbBNC+?D.xăU"b];b0bm99.0kG\LSgc4,AVGf4b9h,^7XcKOmDYt*Pg,&SmSaNGTWd7s8]kU*dqyăU"+'pTOs$:%vY:s>a1.I$5M8Dk5JEt;<K$?P)'pD%R.,C&x]8RH&pKvRwpmn^2Ga1ăU"_^q$a%B\2e53'=Y%iqRpi#>=?DR??$HA6pgWU^guK)\p,AU[iGY$u4Y_uSf]r6NăU"eg9YHcoer$3puZ)Pu7m=I/o&p,Wmad;f.haTJ_yXfiM:a/<A7VFXrcWqg?VxwRuăU"5ZKLkc=zE7oOU(Ui<sd]ip;x,7CPYFerpJtC<rxc_YE5<2P)DD^>CuKJFj:e]ZYăU"\T2%O>sMD/WiucHfu.Bn'I1Gv(:;?LNFi>BV4(=ti:&o'O2.$GX:UiX*0RPd=6ZăU"E[qhwT#O6J*hulM-SsHZ#9FM^4)yuOgGg-Gx%u%p()9%%%%-.%B?;sFX5%)Md(%ăU"%%B.%%%6%%%%rnx%hTgq%xyux%jySg.fxtz;,>[]^9Ll[FdUf4g?EqCgnOUNJEJăU"Vg#>Y9q_SE>&BoFJuJ\/#4qVPwtT*B;S2^%d[Yqm[:gDnBgH.\4>WZ06'+uWYAtăU"zPd.Uqg,S8)r<Sk248-Vl%6EINdOT2ozVJB^_*U5mUQydeQ/:8ep/6YNg_)#)OtăU"?^<LxxBv-3mUpW[n+9kL/;Mk#5cJ#:FnA*IbSk(iQR\&5'Iu-'i*^cP%'0lO530ăU"bJMO%EwYJ#..8H'PlH(aNc%QiS,Sn^&iEcuP074Eu..CUa%G5E\8PIp.Ob&SxFYăU"=5jVxgKM3[3RpcB)by:\hG%?29gGp=#G?;+'U(S6G*l^Tq0eI&.62*J6,B1FYwoăU"OBX6;a[(W[5_.GIdnD6G3;4&p8gd>=elfMOCn$JxSknuS+Ffrf\6g&y;1L\57%;ăU"Vz?uM$v(k\vQP]FfG%8\sCgPBwVwN;5-t,sm\nc^f)F.A;=tS/)d6T$(/]/0UwzăU"?=]1K\[F.oA*an(zW0;PGj?bbg,(8W(\Qn%$JJ[s1Yva18H&:^S<L2l#uZqUmUVăU"9xe1Aaxktc[S#O-ri6'C%4lB<c)kObkG4$;Kn\+1OT/3er^ut6$cciclZ;^cJvaăU"FP]'=2o0$smlBR[*MxHxWmKJzPyNY=RNO&Y?Mj&f,p/v%'RLe;fS(0H:g,XFG,0ăU"\?23;z=e(c#6R3fvL1iCSJ4.PDvbJ0.OMj7#2E/P2TO<o+c/.pc*Y3sPY0'=N*XăU"Sd<NfKiy^P__T'&n1EGS.JBJsAC9Q6V/wz6U)RnC-8xu#6qL/HpcZOMsxv^Y[?$ăU"vg+KPT_pNv%o4UN]Od9er8e./'RvRll4Mq/?Y%Y^c$-8o)DI<q54xrroia<Aot*ăU"]SGZ4]e^,$,doOScVSP[:AYKEiP,BcT=sb+]jPVA/d+ZwjV::2[$YLp1'uT+yltăEND SUBăSUB V3ăU"=%MST.IF]mlrsz9_xzk)#:*C6:.*:pi3tA^V)sRr>UGa+c1ULFqw=qV<CFf(sugăU"^CmRp2$(Es+&3/97]nm?ZQDf=^Eo:5Yn1U0rW#VdoC-34iDe^kO6S7W3j=7<tF'ăU"DwwNP.kaZ4.t[Or;hE/n(k(tJ7SrbQ+bLDl:k5>hPYfW#W;^sl233=JkxiLGIXTăU":ZhPx&DBA+)AvIlbdn%F\*b?IRKvsM+39.Nhnrv(N,:8%u%p()9%%%%-.%[dH:FăU"PTF%<n)%+%^1%%%6%%%%rnx%hTgq%xyxu%wVSgRfxF%M:>q'X=wWs6xZ<xCl;nBăU"g%<#,HV]EVI>W%\lQ'bFMMoAk%FzV,t;f8X8B&=pP\BK(5w^+CsCW$6,Pddg333ăU"#kq:iJKE:7ZCDG(rvbcNYDY70TK#cnG99MY,=SjZ&8sZGHcKu4?iZKrD[FW2*i%ăU")\EsIFq0iWE5BJ0sl]Zd-y]:Fxir+TV%/]7_)Z#,Te<*+\Eg-HaH^,h3QoN7_iYăU"1dcJ?;Gc;EXI<>4Q39=b/<>2x>(9PCyX^cid>5kwER0L(*7)sl3*Z,'a6Ox#+R\ăU"-x*(5C^&[Cd]K_dT)9Ov=7imoG[SWte1P>]#TweApy'PG924cDvB+AFN'.iR1>RăU"%7IP[,pYTGc3O'8Uv'On#sxOLHdQ-0&Ce>ka-f==qd#H)(1aNa'#6re4X%.2htzăU"RoDD$tDq$D?/P1eGw?k9KVi7-,'L_Uu(95-,]J(MH_(JOIxL#pJF_fxXOHhVRurăU"W9w;t,:.5[LQo>ivb3rg&i4k#lozm/TPHX1IRQW$qJpND2aLm533_^*d%5UTa4YăU"?KG38iFPSr)o<$=)A.[#UZV3b/-MUmCha$3]<[i41ERYRS[(AAqmB=)]7L0$_CqăU"5Y+$99NA%sbwvs$000Il?TH9)vA;AA*4?28_%p5c%y_[vWO$4z'Yy4xRqGURQMAăU"d2tx67yi_C)$PoGoe=aGl.AlV'oQc['>=>S**l;f_lAi]C-BH;oTkFu(F'cibYdăU"JhKis0h<5yipJXaOX>kFbaS0D9GGKQ#\E1)+#tu=3=hROK^7kc\FgD7H0Rj2N0căU"6w5[+?XkU<cRRcId(W9=7WNSZ8u3Sp#GmVUPDXdXS9P/'kzh,Lx_Wc]rs)vn/Y%ăU"IeBm+LX^Rr(D^[lKRwZaBZ\EH[D:)l\[XtXGsaN1sHnhBH-a3n=E:9.09wG5u+4ăU";H1[mTs(MAez*sM*L%SkJ+QKSk;_4zM0qG]Th()dB<zB>9[&)?JMyF^xtwk2On_ăU"SXx6ID)Ss\uoJEB5Z$rQCCrJYXf%&FoOi<?jS5T,3Ndi<V.;di]G>?TfnK#+r+3ăU"Z%8Z/suI:9CUtSm9):yip*T)SxP+<,Yx$6mf+lCq^^gDRo6E?ZMS,(uo^7E*MM&ăU">IhAk_[r*dgL-I#R)Q+jiBKoF&DI\3>*ik<2O-)aDfXCUPhiY=F5Kg9C0Kt2M>săU"2JJS+RDTcro>k3RUie1r'sSKj4\mT[Octg<#Oi%eMVf]$mZXetmVO[7$EW52okRăU"4,9=sIhcq\W_u*Y0O9R;DR+Sq3^]D7Q,E&Sv\Eqmy_;os#',Sgtq7i(T%%aHU67ăU",&Ej_)w#VO3'4JRtRaE;(YR]8TX)bS=v31]ICZr[lShZX_J4Zot\eotU(Gc\]uSăU"4r>Fk\/-wu0SrNJ2Ls2GHG-Hw(u%p()9%%%%-.%qcH[FVQ)&)D)%(%i1%%%6%%%ăU"%rnx%hTgq%xyxu%wWSgRfxF%2<>qoX=vWs6xZ(x)&;nXPO/GBDJbfUP,+%\*Q-\ăU"\Tp(N#:pyK1QQSNN]$j5IU?bvA1>dH^qkHGlsW[sp>_5+MVtDF7Wd/-jm_a&$YBăU"Cci)4C_B:cm?X,9MZXidjD&n4ZHH+?u(]Xnak81fh+'1rQj5%J5KUe^<ZqObr2ZăU"[Z-9'TZhi,-UV%oe&(Qi8\gsq9:2L54's:nD&xE7'046]B<t.kCUpU[ArzohFE)ăU"$sCe#dG.)jo,Cj]+K2rxKc=m<bpkX98V^E+J9F8vD6qGTi8.>f^86YBlH),hn%CăU"ajVigIaW1Ho7J=Go\n(QCOaq=PgiiNRAJR]eOjYUP*eaRRf55Rx/w9dk\)Y7\XDăU"+ElHgt&>B#F\[3M<1-pYf8+>p1dpFm</2YrVq7UnUXy3378.<ryj<Rs%:92#heTăU"2B#iqI#3Ka=isBJOqr;Gt]f.?(aqgBS=VIOxFqHX3JurwIr=t,:.5N#;eWr$vjdăU"g,7eB30cyaR0<k5CiU>4$iFnN,L5racBmj_$%*e9e?US<d^$qBA%vZ8a2h5<>MRăU"e=qyDL>5w.bapG2BA6>.y1Wbi&S[(AAqn,=+q.<0f_#q<Y+H:sz_DlIJqtE'((\ăU"^A9_*:RgC.F<?,pZR-T_q3zN)Xav^E(Azs,iC;:e86s/D:Go<Ir6hJRi+CX3)2oăU"#BPG\El#,GXg9L31<=ES)GDlC$jbE\)n<#./Vj/2Xj9P^XWZl;:<uq;TaJk%?kAăU"-sD_gL%\Nj0>CH?NWW7wJOJ7C)]#F\k6^SGlTm3/wxsD'>UQ5wGf6J[,/EHGH%5ăU"SD.h8?.(HZi1QJXT6uH,0a'K.CKnZC.U*Xm\hDiI44#r'CbViDMlblnlnB3E.,jăU"Rcs\GuEi1eDMa]lY\KEx\:Y+wWt+-j=(?K,_:/)c*gMXd%pH^A'yG[QFZ5w<gR/ăU"=44:\):z=A3[<?AJMy79xLMVodtl=)x-bR^gvktP7_;Z']HT7JrRa-EE<OB<[/?ăU"Si5TZnJT?6>q5j3Gp>i^3/a](fB+e[(2tKwo+.3Hg3s/'O]F,'Q8_dYjRQnNhKGăU"E-v?uD/T;Lo6iDz(-Z3aTAe1'whd%mk]E6RD0c5JmWu[gxFM#5gRsSSnbMkN%\săU"US+k8'.2Md'f;1$M*7wjWm4NhlR;5XPr[iYlRUdKkfUh4GDX8_rjFKXKF&C#9(,ăU"Q.4+6VViJknUrlh;e$vgpM^F.6$EPP:0KM:W,NN''Ni>D5\XNhfl8M*d-VFSh4eăU"260N<HIRb7d>lU($ZUnmFo>XJHW4cH'7A^_i$lfup>hvTTYp\'e2+hkGa^v7C4răU"4ckl'wfu09.olXJw%(up(%)9%%[%-%T\KUGMT\$8I[&%%K%'%%4%%%%r%nxhT%wăU"jfi%rjSy/'yTw<F=TUa17#i($K^2^=aa=')B+1<Bpb('A[B0Q.BOq?csfl(N<61ăU"L*5.;Y$uww?h^:.;6+i0u4sO,i/8jDOi1x+#ZQ.$&0xq=Jqw>q^#Q7a'fk?<A10ăU"XS]$2,uf?9-B+,s^4+Yq=R/<xZKpmb%a]=KQT(BlwgcYZ6DSqUOX?Q:Ou<Ar>URăU"$g(Ce7#>YS:&?^m^ITZateYaGE=ngpE2&v1lJ3HDEP3f.UkE,W(sBxBLCQ)ejA6ăU"t9eQs,rbBJqOJtBq0/NM6L1j3Tf%1\bD4&'L2ANax=rB<rR47vrL0l&%<Z>_.EcăU"A,'#gdju4b3;mc+q1B_<ECBgzSZ5)Yp<CMBq0.r,+D*W(p?sPa4h_$VQKleA^,dăU"tsH0FqVtpQ[b2,dXnrd_[D=q0fSH?c<K)u$5l(Vo-eBM1FluQm5EhedoDJWL3rQăU"*u<t'RdGPO$G3X%d$3s%ckixCLn97Bh<FZipX?Dxw'%up()%9%%%I-%%N8mGkB4ăU"l,37.%%7h%%%6%%%%ij%rtTg%irtv%gVVS[gfxVk*xBS<Aaxb+zrD_05]P=-,s+ăU"-ZhT&a)S'xpG;(FjP;V,,EB7UI%67J.QTU.N0LbrTP/)\n;B&.s[/kXLtnbbb?băU"gb6mDd6[-XT\DrrNa,_Ci)D(QWH]m*$mKKeB[Qcd=pO$5#6<847XIBW's/R5LiVăU"2<\V3n+iZs4BKNr/QQ26k+(PLO$jAl7)\l1HcL+w*6-<#c%AtQLB[)/i&(aK<)-ăU"?eNwlQ13usxdun3Q[E=Z*Z9+y-q'_f/cr+$G\949q,.UT,he_&>Bk1iulbOVW11ăU"ngffX=#XR0a+P[HxKJ6)ctmA;S:Gn%=g=iQ5?j4gQP;G>/cjoI3^[Qe;9+<7BpQăU"hXIHphk^V_=>E'Ude;z<R0O=ewOw5<YTUUcQlU0S->NAsr.hT05B(7ANcCuz;pwăU"9e4ZGA3A>0u>;a0t#Dkogved+*KMd)dmFgwUt-f%qZChJdN%lj\-<qaEMQ:&I2_ăU"C1C>vR-K7Q88Agk:r$P78/4v;urYD2IX>-k^p[]Yf-tqe7?Cn=Qc,aAM%_54A4KăU"PF1F[vnpAUH#BYa:tonH1G575Bk/J*h)EJBIhu*tev)Mgv5o*bDu%ur-KuR?reDăU"T0aTQ3n\FZ)822]wZ3wqVLQcYfh7I:hyq:gp(AD]9px/013('Xn5C_;p8eXG')jăU"k<%T?4Xd<q[4(nxn1byzkern4fkw'x+T%DNJGHR]ynF$+UH_vr(QgiA&ke4k/aRăU"DK(RT_n7a%BKk1BSKgJ/:[-R.k>M>C%JMbnV4,X,2)S(y/;Lt_V>19cLbYM07x&ăU"],>pK_5076]A<KoBOp'^]lr;s=pCkJ-D>bP-fxO:VUkH9pYMt?$sE)8$9VX<^ycăU"x*61uh<G8G'5G2Z$U/qM\xiB[Y6>Hl82,s6Am.8]x%^O?S(bU$8ra*.f;j/JI0eăU"-5q1^s:d<ZYC&nqw\fwA6f+-W-Uh;Cr-F]f+E)*_%zztcrf#hIbD4GkMr4k-7'[ăU"/=277dAy#ors.Pd5P_BQnj\rqbjHuh(+>&3S'\4xR1w?^Y?Uo;usQxY[./WcQ[qăU"Seh$6L(=PNOoxjrc&$kLqS;b<9V-edxiMh%zi0U7Do_$3P2vF0u)af:[OSJO87năU"ha'E0sFfa[T[77k1tUrAW]n8A9?RWts7[lTs\$g0^.3Y6r*B^3<$ocwX+$j,&bgăU"6m0\*RE4o,3Zc>angqUZJ>g:7>XA[SA:<[QO)0f9s[<eY'C8Ul./G_SS_/[Kw*iăU"K3]4mV1\4FE36j7\-<:56?rBU28)'5U%%uW0zMz&cfa8-jD+pjRq[Shy:?H7docăU"sSd?FTcSZbq^l=gcnzJc08pYY_A-jx]pDd]V.O^]O%Rv5f?;J[*Tqf;SL9*3GhGăU"vaU$%aDx;CQ4n;SM74n#'bcPiHJiX:UEaeGvapVE^WQ'l]0]5v1gyLRxv-DTDzxăU"=w#0Q+.6JUJ>_Vg[8Jr1j0+H5BCmN?aV5/*8)J73l6bF1/]8nJ7R6QS059rzG/,ăU">nIc)8Tq%zKs,#=uzq7(rPearRR#?n*9M,8O&>tO0L7Bi0fg?+Va4Y<gXEiDCS>ăU"'F$Sahe/rbU+2:b*9O>iJs59I3B7%9A\-2#ZOjrmF_kj_&p4Pg1LWXDQ0+-1=%WăU"\5cF6pa;rN=a6&vAh=(W3?d,E0Ug'#zSsg3p57rIkY[rYt>?#;5B86L)jR'(;8PăU"O=#_9e8lC&/>ItsI2SSI>YAk3:Q.D9H=mqGF>/VRj=*iGRxiW7K1:>>svKMX&$.ăU"HRTk8aIMKa6>IfFBlw+F;-_:.e+K;bmJMtZ6;40N[^3?K?Zvq9G%R(Gim?H)G'HăU"B2R89w.MGhJAW194F)YP#TNoGX1X[-]t&,dO1l4SRjH=6iu+&C&UFQUAp&[+Xv2ăU"$VQuR1E7^XvS<PbKs:-AE#K63gHd4XY==\[9rcrsr_MW?ZEj...3NM\JM[G8oGQăU"$I^uGK/-dgdtcUDqCx-vIN^WC''RAwj4HS:\qpE?;UUU(#X7sh9srI.?V=^40bCăU"0')):E8ii;.m9kN12$<8OV,p>)GKEZ1=E2#)\;tU$84tN6#aDo%PRb-*0>+fXPqăU"kr-A1Wn&]te%Nr73*gENDKrOJDdSMc5UleB$J)1(Dk$0D9.2#5WlHJFjhCm3_+)ăU"]H&VbiPD]Xx<C>HyBXIr?+F%_1s5pT)-WW)x?/5NYg_Z_,>W;UIN1B<e1S)l<B\ăU"37*(R[sc3jnjW=H4R(wD)yNZCWeaF7UzJ]Uyfw:.=n8#A6R6YRw9n6u^]ko12)FăU"1munCC:NopQ1RjWH+dK,JB%m3tR2R%FR;xDRnr8MhGGlAua]&9T^*%As15_$k#4ăU"z6=kzN998?kG)SBZ;f9?v1KSf6VS[qg\Z).zY8G?.#e?N/U,k+,H9B8M%$ViEF5ăU"dV,,=K0AxXQX%X3I6I[+;fOT)V91YS\2&pATT)Rk?3MUP5:eA[C8>BHp0%<UC&RăU"XF,CR5erLG*isGmUK/dx?gW-k\k.&^ErDG=>0+YrYX:sF$jF>lJ.aG.L;aUSRYCăU"z6QS4jG.+kx&%*/O:&<OTPje.Hd)/<(&%]*_z[9k./;s/cwTs7e:$3a_OAZ'ZGTăU"B;Z2=v1hm9i6\379%JfbA:938/r8O_I%TUtoMwq]F8Jeuts]JN$45l=JBj_Dh[QăU"c6(Xp[nR4ni=4)WzHdLo+[+jVezU9%p$v_=A_hG#3tA-4D>YkB9KrtS4QU*1w:4ăU"$0vqFZ_j'72K+4ID&T:y.O1)o(qFe5(R&>>0oGK)7w7Sq'al/ObH+l(MP^2F']_ăU"8csYg%p<2?qhWfsOS<SNPim:yMg)f,OmodvOxO8]I;a=5OusV;xk=)ujC<q.:u+ăU"C[#on4%$eicL,dp[AsUKK7oJEWfXfhAxm8W*2nSr&k;P20NA+4K_7/QpS6cAxf<ăU"ZSj[mag#%5)_S<5B[AGM+jc69OpL.\vfBD+i<#7.<cJ_owX]fd6Y:W7Ht=31UjsăU"]qDZLj4qH&h3/Zew?vilvD>10DhBdz?\Fpb4R\PZJfXt*0xs'L?f^DwGSU:;^AeăU"%8FTLn&:A?Zo1khkCbZ6F^0hblm>;H)2/n7dLUl,pNl9Jaf>W>ango_=ajc'*HyăU"xT,0,z-2FB8o<Ah\J+*C18(3CKkP6?=g?19;/(VG/LrM.qDk8[tl.'IP*_-0j%căU"cPc;=5_WR2RWA9^clc<$q]:61^VzMXgOx'=*LhG:PjFb0Bum#g7/GJsjm[m1p8BăU"di7Z)r2<jgX,D<UR45*Y=UAQ%TD&N'Y$K-.ljwG$E:*BCz']v/(44mb'#Omj_/RăU",Lo2NA7A,ePoU>00L^d8l+Bpbm%lF)NY-$'jICCE\c5VCi$7JzM3x1]m2ra>[Q[ăU"FY\qUJP4M_ISh>\cjxa72zYF]dMZSoLRiL0lc7)<s.(Itn%8Ecc.Xlq/YLAyM_*ăU"e3-:M0FM0gG1V*=bX$6rc6&FO_R4P/Et4j84jWJp+trMR0M,:U5cMBfLrFjv0u;ăU"#kqf;SHDK+i5&#(N6I+m96S?/5/qQ2e(Gy(\eu)<UsQ67\Ofw3Ukh1RB<1Z-PjoăU"eA#;c5J1<==u9#PF;GIVODab:*Nd%$q?%QceR7:>Dn(IbCM)<B\q\RPqhT&H>?+ăU"Kw3KCIB#%bIsj)zc.P/bJmD8/sP0g*pl)JcjB>1&%G8#Lf[vMzA.sQGA1+-,e3RăU"1'-(Rcjs[&6S=l/<.3BQ7s;EL3>0$TWaYE5k=ABl=z._vAkF,pOY\c8,kZp%\7)ăU"V3]<8-WAc*vM5[k2Abf<Q5FZ#fdkzc_1ZtpKH?NUeyaLl:M<bHSw4]U3xYDE$yoăU"Gp(N0x+ee5SxwAQDYmTqt8#q(js9Ct*]g8#BLn$?C^%cO9<SGmmOc=Kcw,4l&4^ăU"':Z;%Q4Jj]Oq9_(xeU>HRJZ*trHuF'6?gZ62Lp/[M3#SJUoDcppfA/P^:Lon?ezăU"-G\0UclxRwv>bctAb(<LgkupG0gjMk2Yy84kVroq)OQ_xNCo6XPB[N$cG9uYrv<ăU"nhPs\150$?raYCc)YN]#=1%GNfQfEb)4Kg6lo7CVcXdYOIVL>k)%TS4\*z'5qUcăU"$2HC:^4]Rs>X;rSP'93GVbc1S&1aMeh)t\<).sh)F<c)nh)lNG0Yo?FYs/P7>D+ăU"'W^ui]lR=\qBMm9gCmak0,$1&H_a^ueF(8;TZ21E\lc5SvpJMJopH?FMP3]US.^ăU"D?98d6+gxd^jge,WuY:sc=,(hPl6P'%Z)=Td/H_.R<eD?wA#iD'tY;tL$t-enFjăU"#0Q=RsOR_J+T?JQto:1WT+&+QDL#-mNAfS]&8afddBH;T4DLiE0Y[Bj(9F:YejhăU">%oHCrbNW$5Rgj9?Gb7OB8hLBHxx^hkl4pp\28F[T25FUcWp3Jlt[dFgg8Zmf\$ăU"wTtrj=2Q1uz4&\d\Of#(nZ#BerDrT<,$o/rTasM'boXrLgE19VmR$LD9wQek^m;ăU"qCt(rV90t?c9*9.xv9,(JaUo#B;vydKT?u[HG?N8:D_Z#]+/EbX4Ko]w)?_3xjoăU"ZtsT75QqVLgOi[lUP7F^Ab^GDp#CKce_m+/aGAesm%FEzNU)3RyZKbd=H#e2Ct-ăU"O)%qwLP-?T'[9CJfoe]JvqL%y1NaTdnZ<c2JrZ+>sP.ptJ2ie%gEOqGAr^F^+xkăU"0/GcohK&3bki/1QVyqpDuP=O/1$?:z4IjL1IZjDC<,VfA]<uYR9TNcBCxF_Y,0oăU"-\\.\8#3S\WA8wBLw11rRyS9l0_l4'ppV<*ZNF_#z\W'r0xPsja1-TsevnFHCwXăU"(F-<8vPbZTwq5yX3$>u4v.<BiS\&N+QNMo(;dqcM&kp0^M548Fn?BlZCVo=%ip:ăU"Y=?oNo._zbMC?p=SVqDT5W(<CNQvVWsQNgb)K6:/;P9.99r(sOs>ZNs\V%wn>]HăU"W.2d_P5']WIyPOukII5Ek6zAJg:xZP9+<l-)R')zjby^rrhnY5jMrH7=jJ$H5vVăU"jgN[#NEd)etSZ+o&;chM)-PoKjrk1KBe_wP[_:ZenC$4j:A,Iy?M),heh2xEsBDăU"GN/?\mUW'yksg?=tCu0M)vY)ONG8X?_dOhr;\7k<GCs2En(KfOu81P,0+_d]M0lăU"f/83>]gmZRc>Rz$#*qRj0DL#(w[LJ*NMqw5I$d)WNMjMSDk\Ku8k[,oUub;->wYăU"rZ#9a5>/ZWGipph3TTx-=5JI$3Q4lssl/'k0UI45aAs_TF*QgaRt+or,T;B&[^,ăU"n<g;wY)D&96do,ILYzXlCKHLwe*8fbr(/Md&a4up>+=%PO>^l[4THIw$\1\mrLJăU")%;xv7:*827jvToCJ1F>u(po=U)5Pdpk%,fO&w$z#Ehou2Fz%=cOGHG4gLJ:Ly4ăU"Z-ii<;NVaPWR_&;Y.<lwlVI\HiLT'vEp*fq$eOc.PWQGEmrEcLQDm,oPganwy%6ăU"#1J48F/3S4jhE9FrJ.d:q2PvI_yz7<m;mq&LelDNP?<,?,p1CB:nDJlT=X<GnErăU"=M;bI(01r?$qW#oY-b]cn'_*t?_8\v^Vx[DmL>P<,$d<BCcmgPfXRl>JdpI+]BgăU"?$&Yr<G4q==]^f::\5_zg(VYIwR:ZdYxR=3'6hjj-DeYNepy[E&[W<erX0Ogj=kăU"lqfp%6BtZ\gnkG*_+41w;PfEpXTjado\9X4W22mYl)15oOGA.NiTPb8\5kq:;NQăU"SNDiU(w>ZcH<kGLP(GMC<+SAOj,YHp(QgQ.m0Z=Qm]^Btoj_f])tFXMMz-K]:)BăU"=PSZ5HAn\>=:_gHbf9YjA+GX.4,ddN-kJ$[DW]ZE=w-6Zg0pD[?9<0loA/ca[sUăU"3ZniFoljcI/GYa,6XAO3]R8A(GRr7?beZpIQDKTvqmd6ABq-jb%&y7b-iEy3NO$ăU";6wM'FJYpStDx/pM,cjX*9m-,LI3KZ_[vcXjreScd'h).h$oZjZmZt0E6</gA3=ăU";tzRQ8g+qKVh+-6=hpogfp-)%/git>?Yhw7YKtdxUVE'mUA45ims^?4b)WyR-vxăU"0u%p()9%%%%-I%tNm[G'Gl&433%%%9_%%%5%%%%ijr%tTgX%ivgY%ZSgfOxV*:tăU"BSAKiwMyGkNas[j=#fa/U5x\&vo-6mxp)P;_ZH\+>?k#OF*a's#xsL7bX3%p'RPăU"R90OWQWEt$hMmvJIdS7Vht-ihXTx_=N<I5BM3o6xDGTi&)MPfsIft:k;BPt[K,]ăU"?1y+Bm[1_5M=s]ZB]lU#U&u+6UkV&s8kM*DNA*bIwref>0S[NKf#C^<JxEtE)VhăU"VBNmr84433g=6D1:-R>Pa's;tb8Cg1e(%y\ai,jeBXrwwD\]e<#[#y0kV\gVahhăU"1e(*Z8cI/T4('hDeVrW:ctM5R9kJ7_40hiWiZ]=t%x'vVl*mb-),kO:gm%pHmK]ăU"Jbi0'0YO-B*0c_JmD%[:V]_Nh%Of9[b0'slGj=u&cMpLe-/,9aVXlj+4[S/WHo4ăU"]5DhTNTndnM=UW0\4o$-%#HT=pK3F%H4n;u\C&ZFX7)UCRgOoKMI*2CZ>Y,q)IuăU"UXu^156;)k$[f#gBR/+i>]-_;as9_*Vo$S89twIk9B[)CQh]eRT0cO,MJG7'8hTăU"qSmE<P&;jM2YN]'#TKr2Yg>JW,\$VpVG4TD5Iod0ARTR0AxtQTKS]0F53jR8(=răU"R81kxsM=qk;,[:d;m*jovo.$]y%<6kh,(_Z7':8.wM(/yv8cK.%QNIMtH9$pX>8ăU"ETs7hR;Ii[IozpOY*oEt*-5FDjuj0.O0z5(+r]/,QVVunva.Q>Qdm+8dHSm_3[IăU"e<93CCKK\j027a>UQl3j?DgG:vF#s-B4(.rZ6h5YwUT4PI(#94X0'8MalK#gVc&ăU"[-ZcxgHunL\Z:KA0'T,7keDO0sG+e<X[6RU.)^_YEN.gpx,3HOgW]Nw/rCCp>zMăU"dbACtc(I3Do3<NG3>owkhalZwe/-.4og\pcu%V>m=lIcou2[k[q9G_1ivpJnUB:ăU"NI8BhfZ0O[jWWe+*S<>N*wcUF'w>WO=N8jkjg?Q2t>O+$w52j&x,+ZN]_WZ8fo_ăU"uxW&ODMi(0S]wZ(qh[v97FL2tc(D-5T^yJ%Xr3O[zHdlO(x$P/lPFJec8#Jr*J6ăU"EL#N)+7kh6l>:9IhO*9]2q>$%k_$syrVyuPjCY_w]^pq-CQWE>>q([-b>9,RaPQăU"<K$fogiEGvBM5T-HYAu+pOUO4?KxG+Kh7ZI21QTm%&xH9i'CmW]]3As,l',R&U*ăU"NhounMxU)>*;JuR6^aWi.lpq-o7n-hSMD_2S]CIy4]E7Fo8D>pUqeHG?2M88.*făU"Ct\*'A$]Qpb75hk/Y$80'J4CS/:9Bxn)$xxW0Am^zfI)N*9/);-stfT^F?Av6VrăU"qpUeVpMK/nE#slLN.GaSR/+Z#o]*dQA]<WC#3x_.H7^ajv[?Y5+2=DLy,7M:f\2ăU"Lb6DgfDzLZ?OdNAV.f#k%^;-3(A%/:=T#hsG%odN+'iUHNGxb,Yh&c,AWerA5V)ăU"fS#LB43,L2DUaWv.Jug9(&T4N[.jnraW(s[j;4jq*aYln'QxfVO'ORE4ezuk,EAăU"dXf)2u&)+Ed5UaB$8]ftj%V]A*uVKPs1HVwbaENaYu+:olS3QrkI7V<Q%cmdMoMăU"9-IOX9LZ\Aw%?x3em_fHj_VdqH4['1G9*uD-M;qsA#1W>;GXe=pn(sOvKVosEEgăU"'7Z6jlx>H&<jvoMpzF#e#..s$<=43uvXUdF\-;lP.6x8/A:$&axr%X?3fZ^M'gAăU"I2Rytzqp4.F05EWkJCwuT3,18joEB0ZkA-VYs)E\0R%E)-i^D<0d(]EMD)aEF1$ăU"A$RQQ+*RPZWfpM*:,NE.JuCjOkHP[Gp/].9;_ltzvC5WT>LEhCH;tpCMkJKoH/#ăU"FA>UiQ)J^;*r]gK'hgUL30XCIqsBqA>ZRfa,Ot.0F*?GiR(BwWH,T]ieQ<]rT^(ăU"423[uQ/Fi$.k,ArvYF4?UYN63aR9=Unks8eceQe%s1n&AC<+Mnl1A#gmQram^KPăU"wZ++W]c'/'+0*A5UUf-$)O[5oMcZ.GKd$]ug<,eJ)j[hGZJzQ>NDN:MlRnmNJ,^ăU"O-[05Vol7MabFJP/qkVWfIR#t;SKK/LRA/8r:U'9a20ki6Rgx0'jO:SXmK8_>IYăU"9xLlcLd?l&MD/a]Zys1nGggcAQ=JW_09a1i7XJU']]v.vg&JePdU*GnE'>DP\<băU"Ha7q>00xG-MKcB%pQ'Xe]g50mE/L'%9r?^5i7HMC+B]T;IHV-O:as*\P1^HSBccăU"VF<Mv$siBv4:cCeNr90QA*[oxoVnJo6=lFD],]e$\c#Z?]YW#Mat.Q^P5+Pq3_)ăU"+3&Ip6/^Br=>K=WJ\U\o>1T)+8kXcFvrQtEBhwvEbSr8d;Tq2&Og:3#xV0fjLYEăU"4m>tT&E=kQ'3**Xjb()G97>:Bjt$]eCpw<R?H?W[MB_:n=6Ou',/Xdl*[QdvXXtăU"uJS/[EqqL?J2n<gr6e:Y;>QY0Z=j8QBUjE*nsum9:?*YFHh+O6[Ut]p96KKtm+DăU"OK^g''buX;Prnv;KEBVT52J]s.bpPaU0.^7mCku71[_0Ad#L?d#*&4Q9JRUi\BQăU"_:MPUAeUH(M>YEpc$NDdLWnV^k%PA1xCaLd*Ue8\>Bj<UGRPD%,,Z$2Pd'8eI]8ăU"StK^,5w(0bYIstX<S3=U\A\>EhbIt<Kk^q]Wre4HU5q'Mffd;QVQ9:>'+el4c1aăU"#53o./sHH4)7R;Ct%[]8TBokNZS0ed].*4/:#W44s7/,D3*rZ*:5#Ytx*=77xSTăU"o$WtmT(jXc^W-T;aIu]X7j,hcZ*i43ePxltU<82x49s27awlmlMvooU:kM(j_DyăU"U?q);Zj0$lM]<MOMen-I%N3MIobpPv?&?t_-?_lDWCsL.u0,M9^kuz*%.NsDNmKăU"pa523KJm_-3=Kg++<C4+GJ1D;2dD;<D;J:d;LpD;NU=4UQ,k+XbjoscY_MmcjJ<ăU"JqfnDI2(I2Em-_8&d6blRhXSXT*=+7+v^?Ox2s7Cd#n(L$c:JfhS.]XVd(IYSIxăU"$aH=klrs:oN?p/h07bTGROQjy=Ymsl8):P[:jlm]&.MM>?nCy$^H2Y*V3F4:m88ăU"Rh0WWP'XHT1W/J$c,9b.7HAFUYdKfbdFt4G+4(CkgaHr5U[oU+Ax_=;kb;qH34TăEND SUBăSUB V4ăU"'RYM?fLhh8nL,lifx^gCuRIu2#<FGnsx,]p<FLuc/N)j$q<Mvqp/9&WP/a++V-năU"RRfHlt\<:gJrrh:N&QP&u*N0)Uxr1eT/<%%<y:Am0R]PvUh'[lxvO?f]=lPd<.QăU"\QYtsM(p3Lmq,9i0GoK+9_?Doik6Sld0bPn7M7RQ^Sl_om$IaG89.7iRBmDtZXUăU"n[pI9c[wYdAV%CE=%aqA;aP2IaGAY3F#EmzAPQeey;g<VZ$&5l#0-k8jP<4%zBgăU"Osm;AHCk7WRDwd1nmv^IHPDKaWHUTwg]80HL>Sl1,$5OT4?v(]Dj]GdqS#&XqN+ăU"DAwHVs;NOVY]t3[jI7^Z$.q_3iNsI=%U9roU$H223b]x=V%b\5kE,w(89iKe.ZRăU"*VL1b)xMu=bEd2h>0n)/wb)Wz?2Xl(lceUNtNKK$Y)8\M^$5iN9^j2R-<FaPzD^ăU"uf;hUz*npY95+6exkm+tHC;*0K-$1SznXkn2x$bak6?JA%j#\P3.qlAyn9\&r=AăU"j_:o2dYeu(,t\A6SPLKz&R[=D-<&)S0Z2.w;Z0w=A?0w-xXmAU(o*Wp_Ps3UaYdăU"l5br^$Sf6'At_)Ezj6Q/L?DSzn'8tg5UC\BrSDN.w>ggQyj4Gi*R+&xjo)pSJ<]ăU"pXS\^/wasn&,Qc_Ix__(SAh,0b%\^3/7xAh6,;h2lbEuV?CU)?.t)&zGHK2&l'CăU"&Uc)wwJ<NG/#a_6f_;UgUNB3;PbS?$DA:1)-$F[21^hYit4drj:ML$u+VKELx);ăU"Ha3q;d=55sx_lPaF38E;&qwsPz1%;hBE*>mznLsU1rBqE_jJXPYUz]P3QHa$Zd$ăU"Qq4UdCR0VUG=[<maLk=bIZV74bLX9KPM.]WD_t4NACIL#YkqOdK6kEf[6620&T-ăU"?'[gM)zN&pdC<YHMY#)5tyiC6Bp36Mm5.1z(8T0m[%oSHYSO\ftdNfU?8&l^^JLăU"7_E?uSFNo$Dm)l;Oj%ur*c<oZd_orN5csxy:sjE2BSN9vO:6PK%N_lJ>;,ZM#KTăU"j)(N>YRu6<prZ'Z/Cc&.FG7/rSI6V[i]kg,e.Lf*bcLrbVu5Ra6(>mGP/WGH'b?ăU"?6?M0dy;gkEU=%4a<)^5Pa\<qi*O,W$e1,k_,:Y>+no$kS1(a)fvY/Qv'1DVCJpăU"Rc?CNpULlKiTtw-A??VbZe>.cidLO:h\3Dh&h%MRtOB6YH4)hpkCT,CfHXg;r%măU";:]BP:]ZTf]drPHk<I^^ad>rDqqB5B[,v$sKLWJ/<>wM2n^qh[-*(0^5Nc5e^Z_ăU"=]F]05[[x;k>lve+wmmB7xsY6Qe/0<urr:S*)EAmsciK)XCwZ0k<rp=lL<),1f8ăU"'zU((,#P8YTmhN>'4Kwo2xCPpQYF9v.,T*fJx])([Xlk%Mr7\;>bdE:cXZI^r^0ăU"[PNh:\btd/Hzgn&0Z/v^KV9vtKEX/gTF'n3iGnDGq%vBmqGDMIAxR4h9]xrL[9eăU"MGlk8xlZvKEYN,)\,ix&u%p()9%%%%-L%*NmdGKL0++85%+%[c%%%6%%%%ijr%tăU"Tgi%rtvg%YZSgRfxV)q<BSAQ+wmy*uV3:K#52%q>OiV&so-6XxDS-r\;GOW&*03ăU"%Y[_6#7J.2cG(dV(Xr\1u/j*h*&)L*>rJmXabVbV#bbAMtM>8p9h3jdC1'W\9vjăU"cl(Fked;?bm(t[vdQY\PqA+C:jA?V?gA_]0=>Zi#KnQwe*bA$2kzj2$0)'we]dAăU"1dr(4-P:edA$)%P2xEe:gLS%u.PdKR0Pm13/Q#00%ZZ84c6jWD_NLoj=87caT6SăU"6W*rrk_T8GW>+Fu)Ca1Lh^jz)ig(gj%]:t&Xns61L>hHg=?U?ErLFWqn)MGpeQNăU"83PP[+SWNv/\k#)&)M8WbgrEC1m6C1uSEaG]Mm[x9*%,'ECG<2m#a#?kILZtKrrăU"5>-*MC?'mXHZ4N#c<q5[f7Jsw1KIk+G=EE)T?Yxc5HDgJuu^9*6#Ot(PbhLp$Y>ăU"1nT[Jee:)KI)=T32nO=.aqaXB$hjzu'L-#6kR<fo**<m12D'aGo-pqKrLOMQ]iaăU"5(*9a3s2kcZpXt29CMK#VGD88niR[abRVMS>/Cj&kYR_=xR22J0W\r(EGc+rkc0ăU"Ot^YS\cBO:f193[g)GUIxhEnMU72Xoh9/hF4rFS<=nj]R'ey\sbk-+S>8F1UIY0ăU"ldO]>5lD/cKikCCR^jOlj)'QkaFgSkGIO]8w4ckyJ7k$/EuP=yRO4Zc6%<=AM4BăU"uRgYqN';F#;K*/r$e&rrQI\oa=Z[N4$uNV),A_S*hB1>RiOGk&ZaFoE%KEF.31XăU"1me&68iU]h?[u5gk_,U>nXhF>=ag.FH$Q?7ZK;B>tb;0O;hmNK]/KU9%Wlc'#a]ăU"*#)JFYlzA%KAet41:q#WWc'\dXK_=EMw/,6fnI2m]97S[LCC+q'tK/%wj]vrU9.ăU"+E*X=[#/x9tp&t*]Qe=YB_G8JP0p,Dhgfd-(',kO#>-oC8o(3ZHdqk+-+I/\x#JăU"\Mf&*yDJLS[7GAM.NKm&*'GXfh6Np,kx-hPLr,tzs^R.%cRkeZdQ/bA;<.rj%FWăU">AcmF2DR-1cGb81[1[&M[+AhthSZ4tC$qBnqn.9p<,zJ]=(rnP:W=Z]mnmHh$XlăU"^x31QcT2>1._fG>w3kc:(-,9kU3dnY6Y&Vn?ThvcPA(bDckqP7hXk\H<d9C&&.KăU"S.++[GduT)epaq(R9JE*.lH>IruBsAz>hLm,f-kW<**(0uE'G7XSXf>_qljE99^ăU"D94q6qG'/LyXQ.YFg\+R'0:bM9*MlWZS<t.RaHiHTZ+n^Q[W+(n\GBR<4N[V*,HăU"0qsl,C<^AV5H)RY,H^Mh_1Z)>CAyh_j4khr.]ZgL*Z-HBlEYgF(-\i3v8G]FrAFăU"s0kWoiR*wD'Mlsn5h5*watV7dJywu]$g'A1U0/gC1+Kz\k0^v,M7hAr:E41JG1.ăU"qKXB1LnUMmQ2S#p1PE2juu=,e_+/f4MwtqNC-&-9WWj:'%uP))xNB,KwPn)l:4MăU"49LBiJMG$4LwDeJPNW_&PDXdho=+4[qtp]C:2#P1$V4gT,nDO7R[IQV$&%\#QOFăU"v=F6VYA)+C+LXS3-[0kN1[fuG':=j#;FQm7WOg'rOQV*O;iP2xdO,)]eV#X-1)7ăU"hch'?a93$%'5Ij\ZSD0rZZ6/wi+V*,[=LJO*Yg#1_X*%\*wlQcH(zqet)*?4C0BăU"ZU?g1]_tj-?<b'vjl0#-s16KW#[/LpR[fHvK7-gjUU'2M4/#?6E,T#bfelBpneJăU"&SGNBN<FA0BmN[Ie7?Nx-SXLG0I4C-ckSr.QHq#D2JqxWEZ/-bOT>w<W.n4iQe)ăU"0ZLhH]_0vMN_JL0.,bP3$Q%)auEsr9OCL<I^=431o$Of=c4qcIGb\UHkbP7Kf[+ăU"l1_64KNBTB%\tuX*Iz^&JH(E^YXg)xuW5b9$SJjiM3ui1lbX5VlFIl\/_-Hj2X<ăU"eibT#Cuwl]kJfFKMs(75iiH8Y(hho&.3O*QmDyOg=xnX'2Dnn;rjfYiVsptWg#iăU"uXG=wUD/pM:oM7m.4M8a7dN$[Yr,Xk'8cwSpxb2=;Gar1M#sFB.lSLWC^yJ^kxDăU"Sj3*$_nep[r%CZdp'TQGkeCC?R]=Sf*(kD.\[h]?,u]4F:<hV+'-$GVH=M*ibe9ăU"SW+A9eekrGvwG0dSB.+nievL)xtM/f0(x'FanSzbzSN?6d]MzqpnjaD[%e)Rv##ăU"D%C9qVf+dSETbw5n0+Udn<tN?ne*Zw4QDx:c1U9dHYkA1Hl+q6b=emwBm*VC<32ăU"Ic8eoIpi0JG,cT]D5uK>*'SAYampZKbFRT\3M&*qI+x_)AghC*%9G6Yl'iPP1sdăU"V%zNOKJ2^h+yG6N#h9+:mC><T7E$cY<ZnDIU:?.*beO[;U=+,h_^.aH]C3neRKgăU"IH)CVmr*s5rG.0F5a7g01O:ubkhei0'EhRynGNq_iBA8rA3UXEPp($6ZO#TU]D'ăU"?<2&UY\_B(\s)j&5Qa,Z\-A#i?Ok4#K79hImZ#hsNK&UgU4m]7pyxi?/B0>U/t-ăU"1dFQm\3A+k3J$wPthW]YU'<DzkGyTkYTGkB%ew=%R,:krZSC;?FC1y]g<jBX&tlăU"7+O/$]6B=Y]*t<5+$T#jpu^SU^R&=6ZAbSJ^_#p&dpZo),=8?;*'c/V=V:Q=d;5ăU"^Cm]j03E-dA')3Jge+mrjv[K_Lwo(=DShlconq8;a4K]X)6_CkOS6h#%GWc%j6păU"y7SQ1jp^l_*\BeIF-+cDoD8,sgV*D5mSVNhYsPM1'uRag^(p$?L\Djj'1js^M]CăU"lN/Nfm]#?M]LTKTJsxgAXAD9c#.KMcw0K3Vo3E.]/>[P>AJxP.mR&AS?>wW-Y8aăU"&bN-(w7P=Ch&KhNrM/n-M<%:VkLknHM43ak2Q]Ct+*C44?*1$81D'-crn<D1jIRăU"PYAK;TX1F;rUY=jqvT7;lT/>8CWjK-2Yls*-C1Zf>,&USI6NQpUYD<*FkXVh'mVăU"?uV9>Vq%7pYa]7_gj,t]bJr++rsbljfpPvWHxdt:j1>s[1^n)am7(r'#OE#jQlCăU"6=s#XtN6.fJt>_(oQ7';#vF1L>j'kg+*de/b[$YZt+7?s0LkC]n34V4(+$)in8$ăU":b*3.LFhv3VUf;?AIQR18F7Su(YK]m.Alj#GCt2:\h^E=VEb;pR3^1AH-Hg*2F1ăU"gt-cjqIFcW%.QD\AOS<_'^T,3k3cA)S]*.U3Y:\mqbW9PuG--/*NRTn'%XDkN/qăU"TAFRV^q8)Z=F*a9(C?KEr_r=d=%mK21,-p.q3A[z3jo[sn9N=pq6AsgL-Q=P:=+ăU"(p5qy7/IpyYoAcKIxyAbbZKt;*<c<j(5<>+%Q6z3BcNwwhHcsAk3YJYHrBG?EPCăU"UhUjz+G=l<;giYZC\r;Dv)Uk&QpF4%Kg<^j#h0qfT2(W_$;;r/U%9^en$K/6RmoăU"Q$cLhJv3Li+22pPce*EB](o*A9XjInIp6?FJ^XF9Rd1w'xg*l6*$VyEw<gW+TaJăU"T*6X.j:C&Rq_MgkkW/SE\T>a<=6kUc[jOXt-I^xhi$G8<(2rtOg[;3x*^0z#i,#ăU"6>t-d&I^lR*p0ea94#'?%Sv*J+<rUS,RzgzD;ec&\<WjK_9F1h-%Y]ES3>/x0dEăU"]5q?4Jmtt#d\5SvAgJQkW2B)QoTMoLs>8&pIi*aJh[:e'9AHIrNTQ=_bb+tU&9uăU"0;tro$E<\U<g=tI^*Q[E$6rgzeF'<MJ3g'e.2^J?h8%hELmKR?l?<aQH43,2i<-ăU"J5-hC\Gxf4q';hH[$,=RWP4jl&_37\Q^bH5)kO#S&r#Ku'b5mk5x>Y[.i_HUT0văU"JR;9'l]k<v+nGqBVBx]ta:GdcQ=d]L)nCGCtMSEH.=nPVl\D2:F?kK\f]B1Wvt&ăU"UAD,MTu)$C>;QpXf'8A'18YR$KURq([28CL%]'hEq((DxZ(&=spL>LTTyCB7D$6ăU"/DcvaJ3mgJO_0gqq:$kZCKK+:51PND72cOX:[6-nfM+lkCdl_1[ar6]p*S'apQ:ăU"uLNb?7DUsohv1<=Y0U/8mTl\u%$ABBFHE\sQC)HGO8<I<'ahnd]P=MK&W]7L.(^ăU"*Cn3:$?.bn?nQtS/#t0P:t/jrt0dth/zlvi9\L9]nbJWoW,5,GvA$J8XjTxcaVBăU"a2(Duw)tH_bZRh#6DNZ5BI6i*2QEO_qE60mHn?MPofGS.^g<XNPUHSwNVASQxP-ăU"xPMun6ntmod&EmZQj/UzmGeHlw?D:O]ahIpv?K3#or_HhH,mPBQK;dBj)HW$QHoăU"P:+-+m'QS#O:sA\jE<O(4amn_Y6;,4d0kg5bHm%>d>t3wn_;\Ljl?r-Ol<,ZSqZăU"VfZ^0h1-gxd<$,D\m-W/5G;mBJyZe70^?V$8Y*F\[TLdMOInNa2+THTw9;(bX#kăU"t\P#2wu.xqlETeU^<,>SC9#Cp+uRh/E9jd2*u2P?qeYlRtv3Rqp=.TL(D7*_YxMăU".B6/nc;t]kQ:zbPa'W&L?NP:n5%Zy9t/E^Fr+?v>Y,y$\fY:A)Lk#wjlN)WSR=kăU"]F4N+W]^#$48V.jIf'E3g]&KH5_yo]'+sbyK>a=s#e2hD;:MP%MP2QoT]1f$RV0ăU"IQ9u8DiYFT\6bN5/\U):Vmp8a6i-f0J>N36>pi7dglEYVD%SvX*haQv1wYPW0MvăU"UK*6<$h)v%k7'XluxCy*\J'mCV1gjbrfH5X[DE4r=5P^\5IpX8'fkW=PS7VR>UIăU"_itEqCZ1dj?soX,&itlt+NaS;Ij0Yn;Nv7mcyMf;WAuujXtL4FPbZK6_5y[ukK$ăU",_9j[-OB(;(;y$0QfWW#&B-g9U3Rr>Sr\]GT6VoEi%p:Y?,\N/_(zbM?#lV]Y]OăU"jB/jrr>)gB$*.Elsz>#I=zzS%rfdiE)N*h(N22M(NJeXpAE(mVXl_(gD1JZd$HEăU"No[qLTU9rwYpNhb/VBEBQVe$8R?BW>'_tbcqeBJW**(yL7\Z\V)Ft;R?Z1%BGjHăU"5UMfrAf^KHVrTc_KO[_JXenC$TjV;,IcuE),>eg28ELBznh$ZEaZ8+z^nFXUMdhăU">g0tl.5zjn1X-#bbE1*TrQh)IiK0E)u8#9E-V;hO1pYi&x$bj6d/VB(>V_t;Y9\ăU"K].OOVAGJnDJ-CVwCKglqE,6j#K&mBm+<>zNDuV$[1[ZiL#p7:4c(Sw;$ob7W5wăU":%J3U%-n-;V<pPgg23\iid[DJeV94a9&bV1*bjd/oa7[2jvT[oNalWIupEm)e,dăU"gm^qnoths\2M$J2Eg6[I8T<ba][>Z6&&gz[oa*X?7kTpks$ikf_vECnE-5ZKEhYăU"(1L2<VK4Djx2djO1o&;zDu\z$y3<vm]t)tMoWMF?v_;n%mS9CpJ^gO0F3u/KZ61ăU"M%I[_Iuc]5H72]qL,dhQi,QbU&\gB1s;KWkzUo'D8cjjPV/Rge6,mGJ2*fHrGb?ăU"&9?Mly7IFHqm\[g)#[sEIWpdoe?r[6JJy0AFsreDj)MV5LYBvkc=k'Xv3Ep=bWxăU"o*#3CLrx2)>.6tdG1x%+up(%)9%%%%-%p_NmGr0e?mL[5%%a%d%%5%%%%i%jrtTăU"%gXiv%gVVS[gfxVh*:BS=mOwc+zlDs$5#'jaJ3&;Nl5yS%5VZ)/J2hn-/WTW%YkăU"#FLVaW\kNvmLfV7a1s=5GgEOGWw<4Ds^KPcL$?moV0uwvuLG*u,<C;^G>2mG0%săU"<IkVs]JT(fY1MxP7:v?9EeNfk></g^*P<UYP614$Q:;;CI[Eh[WgNwS#9aH*0$#ăU"RC6Yx.jlZ,]uG)S:MMN>(GR'2&5P8KjC%Ni-Ga)%=hfO1QEZK>H,FL)OerOwFM5ăU"R='f:]1pBI$,:3Bqgp]hKQ^eI&Yj8-xX\:#C#3&6X;IH*1XknIVY8&NSuUg<K3_ăU"IX=b+7n-jY35V?W(F<EeL;+Pm:<;IR[/<.WI%\UJl_tCFWi=6S^qdqVj)3O3<WVăU"J\E+(=k^hFBd]W27[:dB8V-GTBJO0PV$$d^uUU%>2#<E50c&ZE3*+UKR\(eHM0LăU"_5QQH,a9_.U361T_F;k/bYMqD[eUq\5y'4dIx?P)paj7.kCY6#kAHhnq/$i#^maăU"n01,vUbD8Hm8C657avmh[>A]467n?:ad/l;5VW'E>T/B46]V]UqfU7msKA7w[)2ăU"ElC.dcTV0sW5yMY&\#lOqo[3HaMCdYO8#fN2oPbZ<e$e0q/[E[\gN^X9q+o'%/măU"UTDhKugT<gLz.1_1t^ni6R=m+#;yKzVmb%:E+9q3f\KS:IM/LN/N1cNdPRFY?S6ăU":k,\/?WRgHe0*BSbIu(0<IsEX[_9nUZURv>$b?dtZ-+OO<I27L#+JG>G^ferX'păU"#GAgm;ON.+M7.8g\0.n[[yC_V+EuH_snV4aPl8=fx]SqWDM=R>$d,2bsj(vsQb$ăU"*$U6=2FfeH^a2v7cSfu836&XD9Nwb\aaBU[>rx?If08gN:q4.V/f(+zTV73tymdăU"=;hb,$4$u_5V>Tk,I9sow?nuNFiUbEsh$9_0WzG:FRFZ8[V51xuv#=;,a$ZD^$CăU"S1=Jk:^2,UA)/dF=d:Y7W>;l**c#jZqyv5%(B&Yz>en\o[XR##Jdk,ee:m>C8ABăU"D2h(=/XeiQjQ&m6Z^[(NK>Pk$J^a1%qId#FwAtt/Ndqt$r<\A^_fCbI+U#S/%%săU"92D1D;j]pGj(OIf&nY]e97s.HiuVn.J0?'2wBD('BV_mbPZ:a9]hAEbb\OWN:-'ăU"QnFuJH7z(V1BhfZd)9dml[*w)XjkSF7%1pFE5KF&he=e8a#QCj[fOWZB\SjisL^ăU"58ijm<3+A))R1E*if>]m+dx)3LFjEW+?uMq+WS1gY,%3pdONUIj3p7Mong0kxX?ăU"t>xuL9nr0d\c<]ceoqx%rgFPlOn\Zrh.oB\XyGM9>hwKpCunJKJ2p)rb[;%^t-)ăU"llNlr.MQwBL\t+3vd?H<P:*.i^X8K]'uDSUpHnL9P2V;nlEG89sWtyULsiAZ0e=ăU"K')F8[;0q(E)h09EzjqOb>Nyl%&&G'M'FzqB,l=W>A7.$O\Aeb]:0]nY<^\ff\]ăU"NkUw1?Y6ZqGXhq&=0;>w9b-54RdK^e?C6Tl-oAjN937#kckw3_ueY_B02vB3J,DăU"kNM$q^,h5*sHo[)n+i%ULONTE*^,eyS4n[vyx:>Av1=DAUMv\;hnx-XIL\:hctNăU"I^RYli+HzU9>2gwN:AS.opJu#=s;5)BR)zuMnvMkp0r^t7/lC/^&rVr9^)-0$aEăU"i^,&CuU]5it$b8Ge(CP*Ayf&0g&).YVv.;T<f=6M%zY%MS%NZn1p.pQ,WLu3,(9ăU":;NUpm\sxJi?zsjIcU%=#TM5F8Epwt0]NA?jT&+6&YZQNW+)Y\at+6hzz:qKUDEăU"JuIfx_DKty<t.W5'n7WnCgQr+9sDVoiI7qi+57c$$mTc>IEGi[.97#VVX^0=vE)ăU"WN0MZ(WFNAuz5,M3oJ0Uc:NoND*Wse^oUmvmD74*T6S+dA%Vt>8Cg*.l31hk^wGăU"-hO2;(OA6K[<2PH>'&:zZhlIxZ-7w=<n/>yTMXOq.o'k7?]niK^,(RlhdDvX/u:ăU"BvT0hp#>h/v5/'9T6h[u;m1RlKh]2Gna&kiSv)7Fpl#/H\1_bT4p#x;-[b41%S<ăU"#aFK%v](\4=lB9YE#=p[0Z-_gVk#ssv1i#UUYUG)iPiUABlx3MDMMma8*PG^<QUăU"j.k1#'YWvimb4MMZ^gkjvkLZ\7AXjyIg[Q9A^zT%lb8*jvh2Mf(ZG#ZL2?mm5(.ăU"l^>2lYG84S'/3_-As#.z'YDSwiE\RvG2Ci<mZ98lqQMP0\B#lE=piR?+wa<OEUYăU"^HSK/oQO:=.?VmW#\GzsEmXlv[X8Nd;KHCrub>:Tm)'??GW/-K+;#go/;6?i.d0ăU"2_?nj6Vk[6Ggf4p)9sr<t55H4lz5Si#p9BhEj;N'VFj[a<dX9EuXrI*q<'n7CENăU"X(SU;#L-hF72He[DlMgC82lLYIe]1/)[ckRtS74.hk_#=wc:hBcJ3$KoA4.T1x8ăU"qkR<7ep*=;[Rx-iU]QhQL[)70)Wu/[V)Q1:tHZ?GUJL=t47VurM5t:h5WL3C5gYăU"YfZ.gep-&>8V/eZ(?0iX[vvPe,k;FMrR6+jRuG]Y;:>r^yA&UP*.qM^\RLZuELmăU"?E&bV9+0*\bjtQTcFVt63JckE]+q72h2^]MM,.C;djQ5:iMlP^NXT$f1q6c:i?$ăU"JH_^^6[SeJpc:6atutkS?rGk1Vo]_Qgh6HQg,R30?q4Df(/AXar.Er;CSZuaRf\ăU"8A$#LU#Ln4L:?'H0Z'j7svJe)]AY;Kjr^$S,/2K+1jYl)$dt\X#<BK;P?ST,)+.ăU"\gOU]2b>aapH]nT_=.W;ld>ABhkPrzMFsd<)O.hEA6\X-LCnboF'_P>#Vn%M(GjăU"iS>uDr3*cLPuiTe,'+[S1wxs<KAl3Gm&8]^l0eSx#2rASjUo5H#S,(U&Y4%4I/,ăU"spphDdJZ#Y3;u3Y5\aUoiTamLN(?mA.DF0CM7R0YquH;B^rG,Ol9'Kc3/.&w(VvăU"YmEM9:xEX+_Qqm'qR*7vF?KlCNBlRb'ng07HB3.jog.&v.$$G>:GTd)4&FTkkviăU"8=vIB:gpzn16+SQbIrae\[ul&0W,f?$%4*A&$%f_[L-/S#=/E4-/H=$/M-/\)d1ăU"U.])+d?I[.hH9d,iN5M_(f-(\WiQQmgfV0JqDvfLV7bAupRqVPMi1#]R1]t7de?ăU"o(T_c:,(US.]X3j.D0bpxl/p5*Vd6&r&dcQ8Tmoa$l)l=TCkWM.E)jpmxQ)qFQjăU"UfIwk1,GJk5G>0XfS/i-PajQFVo:['7U41Onn:s$'H-w1$qdtvJfs.3K/y0SEBYăU"L:.Ms>ETP4BYFcRf^lOgE/%Nj_bQ]fFw7W4xrJ4[]U*_^b-=6nEY5T1>CX7pRbfăU"ZQ7,6\#&u,8n+hutcsd92Zqy$F<4?M[]k^1yv%XSjsF;:>D>Vkl/8/p?D>_PDDCăU";a*d3wdY:tJlga%&$O%$/MtgYA,CIf7T&w4z\6JrZc'jVh$MzA6JhCpr3q1fpnFăU"oMh:er$,Mvot^Y?'(MGBO4$__wpRfu]lJ6*3DXEjEZb.p(,4,kZC+:wdEe\%pzcăU"P<VxjNF]]4k\CYSkEE%Fsve%]iiaT?%YrxV>sj%L2\&ikbZ?Xmd<WmoGK\RS]fQăU"YWN$L;v'QZj)Yd1_;)Xew13-p][jYb=FBb]lHCI#bPRHj.D9,np6'<uYnq<6f/kăU"xTD>(UjA\$njn5.[Ha)>9V-9*<wxT6.'*It,<ITN&eQN4_[ykl<O:5Ds0n8Q.m]ăU"qe=kcmjBF;.reUe(V0lDyBSMpZ>BNCV'->TDM(y$d(Q-WvG&K5\n0[bCV<+PHT2ăU"vT[M7xq^Xk-Sy)nyn9)\r=A1j:o4q:uu(06>$l6.l3y\f;=>_w%rfPT;)NME'N3ăU"h('NUdPJsZN%g8GDBr_Uta/l3tlOJ-04h$xPD%%ZgW;vZ3a5bgWLwlE(XzZ^gRfăU"q/54)wsp;9?';Ct'oLG#(*(+nF'7Th^NOrC1AHfcWOcc2U%j\cjjq;,mB2T0Lh#ăU"U#Wg*d%P26<FGGW2yCb)0'_OgTT0fkt+zj\kUqXjyu3nVI&oem-q\(K_M7FStFKăU"o7w<^?QSBC;NV=:wh[s9[%BxwvN2<*YNjst9f4QtPb.Au.h6^&47\m#PO;piU8%ăU"x1=2nu8#Z-3b'sY/qmqph3Lay-k&Cxf8EBvnpd.C^fQP45_tlcHn)HbiYj6+tJRăU"YF-NIY?8^]VyWupb5dlRsD&%SWKeob'/QBp1<<(xP-Ae\56TaCOvBd2l(TFod/$ăU"\(2HYbi1r8h/<S['+ki'u]e%QK/iPj*OU)5<$gn%:.X_m#vC/mmHTcR.Y<=)XV2ăU"(7IXhVycs402\wRPtI*Qi+Pu*OFsc_5#j,)<99_0MAi37ms&Hh%65LG%n[dd?BtăU"J89oryh9vDpF;b9iT396PKowC]fCx2<>%c5:KFoDrb8cB7En#1v;t:&RLx^_s+răU"MRS_X\Z,RM2si&wQ?K#YA)nCRG_n=c2FX&hYCZgk-uN<3;H:Y'b*-/8xu\M-7;hăU"fHC*[f9j]';PLL$V;._sLn-=+FNB$YuRJ&vNp-t\ox4S1%[4Zvt8T8d/b+_%uQ4ăU"$QXh)&P+HW\+BjWA%u>DD+CJt<>YaQZ;]7m=u\\CWHZVA6ZHUrYu<p=g>QIjrGHăU"Ee+_<7U/&ULLF[70*x4n9b4N'fejY5N3qL7BzqzjCs36H=nIL4V/OQ<XM/)>>w'ăU"#.dOt\8t^eT,?=tz4s*P(P0<Du_VKb3C)j?tH2JMa>4oWBCVdT9jtV/emX]<Gd9ăU"-fGbfP:GhckJ-2Rh)kTh+X,eIX7)E1lQQs6xWh=1%TU(GMl>Nr/GD'FPaI31ZBcăU")N1FLVxY#(KrE)*tg^4^8n6g6V1\+Y[3dSx)jqYuaXZZw$SI9sh?Zevj;<g>V',ăU"+#psF+[-3s>#&BP#8af3f5Sgq5$1l>anbvf2VoU/V]6I;27_d:%gnGAJTn.tjQTăU"abB40)=\5H\NvInzYspBsYl1c?u6l*SFYLpux]8$3Hl(;l&Zbaya*l,bu<^mG)[ăU"^:+k(#V?e4#lO.Hkd0MxBYn[>Gcu^Zjn-av7C8.BXi(Y_$2r7rt\\O>=hn^HsfNăU"bCMe2>2nqgnpr+x+9A8XVN)=C:gwG:#L2V:9fx1muGsr&Vx)A)$c=;J)&ZsD]MSăU"PsAi^qBY(]uupMS?pD3'#PFQaH%q.(Q*<Yxfi(EXcjkwjZ41NRU69AN>\9dD9=JăU"t?pFtt8/C?dyJG#Xw&af/cXD+Hx]k1\6prBA#2R:u^LFaq8^swhJRYLMLDf8/.aăU"9weL\?cD+P^KEh*_.up%()9%%%%-%20NmG>QH2r&'2%%'i_%%%6%%%%ijrt%TxiăU"r%tvgY%ZSgfOxV*:>BS??lwWhw)V\L3M_/FD#f-tj#>n-V4N*,h5i_r1+pIimJ[ăU"I1BYMvRFSFJ&Sr)$dmrExT;h-nLpJHTJrc&0Tq-pltRBsT?aS3CtjEM^gC>Pe9păU"HKba],QY:_LhN-)<a2-EsmJIfoFJsab<IYV7*)j[5Mqd'T%H-[\1%Px8tP;&ZJ=ăU"8Z*6Gl65(dj]Ks?J:&iBjVrs2dHZ8ROCoeEv5YV'</9p/9cN#Mia=5Vf55dEX[uăU"4Qx3dovJWjfC/IAV/P+-=]Cr<G$.Hb#;K]etIbY:'0v<a2xWa^h\8&'PIq8k%<văU"x.h-l,\-qu-G\JK]W_3*\Fn;OVT'X*=S,Yv3)B1S.,lGGFn.f'L^S)iDA4gEdC9ăU"Tn-WqoI^CBKaw&_wt$^Zo\T25ojMm&Uw^3HroC.Z&(08O(vPfVln'tkRqs(o/icăEND SUBăSUB V5ăU"-ftIoQVioM*M-;bqfHP-#Mqj0mB'0Q0\Vwq;H9p-f'XhOHGaE$7VJZ-RKxk_'7căU"1X0jhAelFt5;b/[OGa]mNE1B9FO,u4%LOr/F#9-rbUHt?$[36JW*Nfy3*1d'3:4ăU"1keIFIws_JfI3L(<_=.RuOJQ&oZBNrW#uj7lYve;$U%oC^<PItvDKc)8*zi/)$<ăU"4l+-MSBg#G<QIoL$?gLobe$[82V1YEOSP/J/rsMYx&VEP<ig%m*&2rK>#ndQ+\'ăU"f5FUF3V<AfpOPK=-tqoYIR=eMoaL*/u1+JR39p[NP6vXO&hrTq#&_D).Tf'BaKIăU"q3Dn6=w+WA0c*D6X0[.,uPW_-M<7,3e7BW(OR/%GY#efMp5DkYg4v,-KWf'2:sMăU"C?gql*PK6gY%7MX,tJ%gJpTX57OAmaFIlLEh;u#1wr[L_<qk/vTVr$T<dj0m\ebăU"-LC\>zXVTo(TI]Hss+L33i\Lu5_Ppca]Ih^UDL'1Xr/x&fzh>c[R8l5S$_Ij,GYăU"1P[iHU&c0YC?*m(-,rR,_'B(xMH9N??SDDula)wCnR9>6vUAUP:HY.Amd62n2oeăU"4+eR4tA=$MOPtcYhIiTpmP3)C,$-WhK1LWV%tlX1Iv:dah+jDqT$hH3t7?45p9MăU">csltqoIRkEacc^bV,4A/sN6W3vP*3$(89:[ll5UC]IyI#A8^?s<Zv1CfhaAnd:ăU"gN[gse5bgfarHa(/.&DlyxJfyBNb)0YJ^;z+gGCCs=uRLdBqvhT/68u8r[uVMH9ăU"$hlQa-I*A>jR&)3Rx]P6kE-c?R^2ZuVT],E6Y5X]\MklL:hNRQV1no[j97QA_x;ăU"7msQ0)0\hF)6F6gQT0&3.h$_2eeqRQ6UB?/[nrZk;[*B1_4rqE>=/qY.p_2f$KJăU"['oGHeJzIAIui>k(auZ$$$aqW2-k'789k&xdL9%Lin5<Vb5ZDd?#U4E3C31m&m5ăU"IM/7:>)D:']Q]ex>SN+R9=G34?H,6b/nX:k<$\uJC8f4]-umA3#AAOXoO)>=CpwăU"iNfiv8HG<aRfh3ma>:^i^uBm$/RFBSKSdvXvI%UQR:Y/UKbO:j1g_Y_cn9b=JwZăU"A3RD1>dM7'/w97i+o7T[UEn;)tsJAX3S(r(Itg+]w'Ru/38G$WSH0Yig4I#br;găU"I>>aF,(026z:d*\>ORIU%U<hkxE%TcJbMC1]($XNV/-eHmD2>s3:dq[coZ$CLo7ăU"HR-LMwG^53XqES>E2cQKQt-N[/DsYfv>c*sTO]eY<MaStIbq)_%eJ(z(;e%73K$ăU"JbDu$O-N/=7IK-43bQlV1l4-/WGh;orbY%:VZFJe#hv6)sNp;+7(c'\<v86nNEXăU"QY'WI;jCft&2/cLFj,a*PolN+]nf?_M_..M&Prl>s(eV7N6..mMWr2.rl.:MPl8ăU"hYo;OcU^Gj&h7#mIFZC\*HPqj?>M3A)hy'-=Wb*S26\]ksp;f<4^I+4s6XAC8:2ăU"9gh1yv^Z(U<jFZQp1hM'3W](qaDrH=t[EfE;O]fko&t<)Q#-kpC1<<8v&fsY9S-ăU"sBQn#NES'TvAUO^RU'Sg(Da9<r&^/hT/s$#(p7lY?4LCV^Zlc$Wku%0Gf0n,/\QăU"'q4IMRg$e.W+R?0sJpxo%cnuOfMN6kV0QL]sy?.DfCI,p+DNZO,8o\[+^B1WrvfăU";AQlg2Y>TkKglGCZ6/Ho1Y;TD#ia4AQS+a)8-((R(5X9fQPnY&$FXkP07r7YRZsăU"+F'Jl=69,=V>BiQ9)R]*BZ[Nh:=q0$Ai_ft^\Zd8EK_/SkibC,7d\DH=j*U6YSUăU"&cs5uOEqj4r2$4+EfTt>5AcsMSoO\'thJj\nV]Eh+rAs<XSGyc/pvu>:n$D3,QdăU"<)]uZa7Th#7XV4(19(8+E4.H/W1*2<Q<[Q<Oi/#PkX?o6.1O5_j-8_?rF^dkH)MăU";Usp4Vo.2NKFEdLFD2b8qE0w(M'1=QMwE\x8,wMD<1seBuCN?40D<Hj-r0CF<-NăU"]-n#u6wqmM.?isLp$;o+<'u(g_bY94/FY?d?&e'02SZWIZwZGClUBP1[>iTuc/ZăU"l*I*;sx1xR*QK6>twkBgfUPWBxKS,;H3DKpq0k]f4bc[]sXRSVv^-vD;^lVIK*BăU"I5_r:_qhVx^V3960*i2TgJGcvu53pRkVEn8MUm*G,]7DY-q1fq);&YqjXRT'lkEăU"QR#*%Lp,MGZIV4<CY)HNp8ycGegv%b_xID<Q58eippm7WN]<>cu.LQ4T1tH1AH5ăU"OR[H01La6o2tRcT%_Mj,U._.&Jn=oY?(N.dAz#eMarYJ&Fa*D0-oS9$=BW/Rn[yăU"3D#TsxJbTIw3K<T)eF0R)GR1Qo.7ZG92k1tGQ82jVDE+Tc<=;io&3EcmL#O2#iFăU"sR4c2P+Vufc,S6gaP&i9$Lj/BRN\3Vek<sJxY5dXW1J9\oX_aD*s=,E=%Lm;P&)ăU"CaTZ77Cj9jooEbdlBtCv]d7ox'ee,4IL:^XV6BIc&(_2CsaV.O2_NR9/scD=eHCăU"=an;caTd'P]e1]^5NC#eNmp,hx(pXN>/5Yek-$?51#an5A?lDGGI3^pIz2#kJXHăU"BoAUfA+(TRO)GTd*>IGEl8YYioQ?9g'O?Q'X/_xl+]>n-T:N_S_97_4/L2E(_&)ăU"LVDq3,&SSo(=D0/TzDd4&=3/^)hd#S/u9jrOl,z5ROi/mq[?4qNj5xi_4?&=HA5ăU"3\y4#eJd*;lEb]AabXk(:Zhj_0zm_:kj2+CjfhwTe,x3RaOt/>zG_>PnXtxp:d&ăU"eT$AHChUyApli1t$WF-=cD*J,_$CE_x2<)M/?F$o/Z.fBCW_+XK4^0uDj$KLxYQăU"9hdms90PdX,=H$-D(4&u$YrN4>/VT^RLDsUF4mM2O#NX]K%-2>w[AC0j=n(YI>+ăU"Sb?$uAy/x,Gk+sb6oBj:jU9=(MhC,7Fr.4YBeGZZmU\P8u4t(;c-J='S6s,bF,FăU"CKCB7:&MBQojAx$$Q7E*$)P(/Q\bp_?_q/sJ-:/8%1t,Lg2-QBxS1p(cq9LY*S6ăU"A,mIE(AT%RKtP-nWanrE]<^Fm;JhLOVU0vbV2vj_>XpCF9ONVX?^ISESm$A^t3IăU"wKv3l/?>JE&'Mx1BVzq.bef$u_(='\,R1\Lj:.2NHJQ)Y0;)'P2Eat=iX*KnDV<ăU"7TgEw89&lJt]OJ2Ndu3)<:HH%MHYooHN-_<vTsSzYH3#zAOZBFkzz.[y^Lh*eq$ăU"1NZtq1_&gFaJ<A9s\\QIY'3Xzal-9WUlT/9'Jtv*GYCuCVUqoxg3Juqh6'^Al%SăU"LKAyP\U24z%qWnTE)PJ/(.>aU%TA^/.h(^2XXJ>kyzl\%k^AlQtxGLU9(hz$4TCăU"50lLA&X,/ti3:CBFa\/_<h96j(Gq1W2xb^/TPtm6j94B/?cl#;-]CgVi_>30,XSăU"&(>a>?_LrCH$JGDBC1\?2*OTV#Melh0[bC4':/MK1OP8LxVg0htVqzw;^XCKLfEăU"18kkwa)%=qUeqlLJ0J1C(/WIQOyuo_3)S$h\1*%3>twOzr83AhOrNgFu[$o(hiAăU"Gn(i&Xl&[9H*F^=(:&)r]tC+G5q]jJSPo2&sA:)l4I<dD^zc>gfZ<11Nx;U07xTăU"/nPbjdJJcVy;\PTl=+C/rq2hS>BM2tVtE^hR<?SY9'57o,67vyTCK:DZZ:Q9)]7ăU"xN^v*=GIW,ySegW>dw+b=6wCbqJ&5cUv9\KJm:ebfhhd^%nhHGTQ,A8yH7:IV,]ăU"q72FND-Z7b5'kNu3bjE(KV0WL'odx7)]?u&TTa$Q/htc%A'd(x#W*L7zl4/uSF,ăU"[QfS3-&<CKXhBD5(?yM:74P$lO$iS#3Y8P;&/kf$WxEM9C(ue18A]VErkr--C.iăU"Qd8_>thHo&Zex*3KWZD=+LF3Fn=;s>[N2g8PZF$5UBNIwUa*vo4xSoNajK>p'8uăU"p(%)9%%#%-%UDimGqSAFD=[4%%8%d%%6%%%%i%jrtT%xirt%vgVV%SgfxWV*vBoăU"S]0w96XvD-M5r(><Kn<r?3XfJ[Vu02eK;El4VhtAZ(GG;9;?[jr1NvIbla<BR='ăU"H<LJhQKT2aK?maa^dll.qH]\PMHW7^PDNslb+neTx7d/B^Kb+-a/]K#9=)hA>6răU"lzr(SrNJJys=>E7ap>7nkb_qoSDq'Z(%QIGWZ1d)PNKO^^O3ZaX#-'5+iK&L8l4ăU"Q*0O;:dYBDD,JY?$AD=%TXFA.3*nuY4Ip:'R?^JAaBt4l&cYKrDqE_<hK/VLegcăU"aZV61(8Pk)]G4NF)cULYjZZ'uK8B\8L)1Q7gKoe.ho.tFA7\GVJJ7OKD]>iIbOeăU"u.JQMBlpLWdaJ,Sf8kd1gFu.SLe6]FtBYiKF7Yx\sMqk];L:wZ%jHbnUNf1e((IăU",._1C>mJ-?8]un9MJrKw:O&)tMqtIxg]C>4']()k]4hV6v$cillYb?%wO^Dzu(jăU"0O/Td51v*g^&_<^xn3D+6]y6fJ%G/2E04RKxsc-7X3Xomh3>iEj=;b/[OG\t<)JăU"SSYe>sEIv_k]Y:]9x\vu/$#Sc(YFt?3FYZtA#5LzKt])tPoGub<p1h6e2jrS)RdăU"Dq],,1k\eKYw1fXfI_C#DI\g-uI8KoB';)YPA)N?nkU<OM2Y^M\UA9Yt(J)$=7năU"ymd#/\se[/]#<xDs*E>bX-.bT/m0p/=psR4MHT_0%&pKawZ,946*Bj>>^W$3o?găU"6]oxgEjP<dqq+GD\2Uxn7Lx>1_ga0PWMZ2>,haJ[[6hpz>>BK>7#xE_m\R..3H>ăU";(Zmb)J6(<_IGHbUp#L3'bXg<aJsoo2RrI^FzSRsV3JEZiEpq_b5eul$H;7?[sTăU"DUJu0p+eA65SUPO-;6Xd&i:x1ZY#;+?<JT\lo02kO#r?0h'YAG7,']FWB[B0:oRăU"=YI9j8m0$aOYFaw4O\A?*IZFfY9=Q7Av:duR-aEW4HX45tO8mDvols0=\gq<%^4ăU"Tucv'pBMt.HWXgCE/jPi0r.X?7jWhLPRzjZ4jtUcSunL,oeyt?IJ>?B$A;Pq^h9ăU"A<2DVPYqc>w*BQ'P2P)k_GwB8q:[3GyHW?ZITK.w0onj)Bp0JP$mm&hguhgXhuHăU"BisWsUU,\\,hwl]X.AKJv-0K]3,6C1/Hfjb_]C9+lOv6_/TCUo%=D6=86i.bLRcăU"4pxjMD3K&l6UKT'_+z&P+[:dn*Y.mpkdJ*c2EGr+>-HZ>cJq\PovnOvob>VF1??ăU"D8$ub)wST=3[k=a*ZqlZTps2&VEO%V>R4VZU<j7g?];=99f3UzmUHcT\7YIRloCăU"pN2If\01Zcq=Ui%x+gC.7_AmoA'#o$AoY0lNF1>ug3IH[b<M;0rtW8IuT5ZkDY$ăU"KEi,VaoUciqm:?xL*7Tih^qmo,J(CQE_FCb5j#4\g<XNShmwYClGHLaZ^/kG]QFăU"q%Q;;%T:qH5F4P=2>VmS0lWe-jS?e#9bBnks7\a+?tA%Y78jL_Vkg:^?*qKgNhGăU":Vl&'0k]vF*#'lPkQD1]&;;l0E[Tx[c1IW^[$2QYS\L][0BtqzdUJbQ+p_^mRq;ăU"W3R3r*x1R&#e-_W4o9;MnLC9?gaa)JHF8tf<zU=qcNZ%uBFjc04,(RCH%q8GC:^ăU"'k(*kM;m+FzNYId1d6T4GW6Ka+vKw;[xD#:LMs>*p7AOeX;c='MpeH^VrgFXzaFăU"5qCaKbS6WGpBY$/RUZnK#IW'7;%;o*=flZaEJx<2&5Sox4A<iXpidALCkwmbi#IăU"JFtIxe*T[&r7'1Jc?])c.in[/o+wScqv31>G;JCV^C4nI,v;ahQM,m:j=5?8e:=ăU"O/mmLso%kC9]THtVhRuo7V5\*B9h?J.8O^Hjuph*ArcdE(In;*bdJHr90MA*/sFăU"tCLas-2=t3$Mlt?[s#\=]YVvMat%Y^JFja9V1&Q62K%AqCqDMgk1:rSgke2/Da+ăU"Ns>#hw;c[oYq*J&Cs<]YYPJY(hP/LdNDT^X&1T=Q?lEb&g8*:B4nQYDQY%28cLPăU"j,a*PoQ.+\\qR<u;NF2=%X[7Zndl7N*p177AVMktb.^?PlShYou#cCNHX&(Q\n8ăU"g<2f0EEi45>M_D./ygH?WHO3*W#t0Ll[-Eb2iehG/_AXV*Op\eY+d4Tac^d32v5ăU"XCj<AXEH;f=AF<M%j2'63?pAg_5-5)mE=FAPL-Qq4xa7MIk^_Tof'E;]<b23,keăU"hQiEp6BWZuOlN%&?vHv5Jnt?\+dt't3Gdp4AwU&$YSnK:G*3mn7uhSE+8k3TOfpăU"k=x#BdIfxgUvkBJj.]j7w>0SgPb;V3W8:wl+e>%DBa#3KoTT$/fB4:O8^&j^]BTăU"odKN\BF-$BZIa6z_;H1t(:+UT8pQ),fm3(G>ZsP03pW^ROqR[(BlI69)=[>7fQ9ăU")<W3>ZeN=80Alh1^k?r^op7_$x^#Cfq[j=EvZg8;S).M=<;oKF04ZtN1apP<lkCăU"?vm?p&phFouX1gh=2OOLGwWafXn#Ho2.y/(iL1*#u0=RBn:R#1<*-(^?-=g;G+făU"%+FIt5;f\U;f:5;dUG;v5;]Na1U.])+d>_jOFQY_PcSj,JqIBmIJj0sdth<[xetăU"JH^B_0F2x8WN_KVW9$g]SNjtnXxC?Du+$G,DrO<=uxMRtSw8+PTQ9-tN<7sQ:oLăU"ttj-U;s'(g]rb9.aQ':uK>ZW0:X*]Rxp^0^2fYZRFA4#e8LH>ZK4I3uY_zOjs0%ăU"y.caHAUAYfX=$LM^;(&V&Kt,MSeN73LLg+cVF4n;4sTL_TLIbar$-RXtxf)lxB2ăU"2lnJ5-;l^Z=J8hAu]prVYS-]+-$dfx1T%XtL#tS.u%*^S2#b,ln[#0Io9lKS.cvăU"%YPwW=Os^,\gFT]qdE%Xosk8'TSlC-_hX\k4gNe;Zd.OjmUe>6Vx):$axIP:sK%ăU"vfROCmOq-2JuPOE7-LNP%POK-OHpsQk=5SER_N%:_+/v$U#O>7ZLDU(ZGIP&%vZăU"e8G3QM*NcU\gPm_4'^9TX.vpc9E0i#Qp,i*eDb9lM7kmc,YcVJo5VkZ?;#.PQm0ăU"W(CG0Ky96,S#a8,Ol,K1DX9U'$#HO+(S)$5SPj2$7d[H,JunrXC9k\oypHP94yEăU"ss>FSZowc9;Vk*&L*gIdZ8Vv5pXmUp>D2hT3hF8EZ6M=wtU3&X\9lRs:2hxDBoSăU"*Su<ev5qx.[Sf4q;7*%z$gDh3B\]TjWoISZTuL_IK)d/eADrTqQ/b/1PuQ*<pAoăU"ux>xRls*),68=^a'/k\6Tp7K(aE^_RRoOGq[t/cm'K4v)zSpabLVPGM>U6Mm,yLăU"&2[q1*;CaVe<$7<vPTi5MSt?F5l]:ZhK6,)yfvh+enf/0rWm+Us*Dmud0_pMdg,ăU"<MAj3H?_G;a<T[LjWp6)E^&h,])+6L7A-LM^XbI_,4c<v_-TLC=i33<Bz+WWw;LăU".[<J:S^bR'L0&%Eur(>km2v'w=$Ka3pl2$su_hHo-a+NB[btNwH)^mDe*Rz\Z/%ăU"'0sO'^o:QzT[U:V^<$DD9AQ4ivrOMf-.W0*&miSF;>LwcrR7SNJVX+2<8l;Zu#ZăU"%K)#3m0]1E)RyuBVNoRPPJ%v_/6f#uFnhg'_*J-j2isY(]*)hbEdfn(n#oIa-3>ăU"2'\b-w_dkE4/zO5teFrzLTPF&0e)vJ'WN<2YMbv+e$+PqDB+9h_A6dp-3^Wuq;măU"p87tHSDBV*#g;4Eh=DKg9vtq?v[XU7f9c/1%V_q?7ZLPeTF^n3IwvAXANyDr*BKăU"I3=Uq(.8LT8FQVV=:<cU6UE=;K/z^WL?wu4LPU01XRNM<lM'<aN6=&PS^31y<JEăU"m;1p8_wr3,6(5wnWgl7((Vc'L;nFZAX,dz,CbW+%.ys4N\BDmt?H*C5N0*sYb)FăU"W%3MCX]rlYtT&IUi*^DUYcNY)IyKu1YU1U+9&2[q;([8\-bGlk9p((K'A-dr6).ăU"-h&A:vW>=vdW_=vDi(__2i,14g0FmD2IJP6HaLD(.34,$n6nf=<pH;8fEc%,,fLăU"U(2,d$_qqe8JS(W'y\JFZ2&01wZ9U4+oei:6?#0Dv(mj83'%2Fu?E^xAh,><O\^ăU"a_(H2qp(\EhU?5LNg5='P^#RzSyadU2dn0yZU)n)QJNGXC#5dyl8-V<2:6Z,Y5wăU"PAO:Y,8KlUwgFaV'mXQPJl/m+l6IwBG1[.NqpCA*VmV4y.Z4NVKJ)q)TCQ(G?c_ăU"\&mg%Z2:xI]Dneo^=13cbT]/QQmp(c3Tv-MEz>YO.TKe>xCH>[Pq>(r=crk[.#TăU"_TlNt9Q(^]%T%,p*Egw/^UD97MO9nP40N6+_iHA(rfBhhDGeko+</.EJrg%=CS#ăU"]1AEpA$\W&HCbRipb)g/?UX7+uPwAs:0jZfnGeUZPNEpj_N3fVcMQ+y:'N406dwăU":C'FBMbTuF.Iytw5nd<ygo(OW)Qf4YcNU^rb'^:Fi/x$pYp^[CMOI9L97_,_;]yăU"pUcNgPfS=lavn1^'4i07vYWMta<9YpJ>IO0\<.lV(NNIYHrk2bL/$n#20;z:VRRăU"x4PsPVK,uAX(^z9%2Q?)t;AK.]AG$5*iC[SLWGB8lY_ZbU%x*4STB*Y%rB'e4xuăU"0M.8;(dTC*RLpr;Cq\kTZ,0tW\j0k1\8YfWzl%7=hQ8py+OOvs\G:$uYXOTw,Y>ăU"X^648k(deJXW]:LpuZ%HvGDHZ)<,Mfzca,NZ4=;f-ebQ=WAm<Y>3DfrP)u1L[-măU"+aj/zm2so;d&xYum<vFu*Jot??5qk?8NjLI,.+<kW+)u*Cc4O_$>Jo[onRM]qa,ăU"<\[$r1oV&A==KespO7&f:r9W4jG%x*[HAtxpYb7+l68qvjoHNU0v.&J6um>BZ;uăU"vo7::?4$_#$?xzWaRiV,V8_DQ&g6zY?;WtRcHoLg92Jr/ZW3Y*?Fv[^tI^s%X0^ăU"FFz7OdMl720LK&bNPN/VZN.z,C]RtVwetM<aF>0?J0:Q]'SA4EM4tAcKV_,LxNMăU"F3#6,tHX6OO5Qd%>SB89[lL4c7tEG[/\CJ6PCV1fBZ.ayO([^rvV75(i+#c.O8&ăU"2[%b.b/5$CdCnrx&N%up%()9%%%%-%1fNmGKRsYI'/1%%'LV%%%6%%%%htwj%TgăU"hw%jvgV%VSgfOxV):b>Tk,iw-oxq0q?*GkQS>(Gx9R%ewyQXy7MABS)].27#46JăU"pmPfiQINvX$,4s:M(+JFD$AoCo/Sf?,HGc%X$Xp?bivPqMMwbF5xh^H^\Qid<viăU"9:l?\E=TW9UQ3FQ;m&LipmL,GLh_Py<3^3AW1?6[J3Yeb.-DYam)qH>,UYi9%1dăU"();Ov;ASljK[:UzeW4f:1>te8+N2rG7Y:\47TWlIQN+\wM5sJE&wWGfG<(AC\RoăU"[bc'.ZT.aP_bS>4,VZN]U0e^+ixo/N&SDfVYMNM.]4;bj6KR[J.jSm1KYC>o.mFăU"O].REle+6F=)#n-*9AI#XIbWDH981?^5%0;CTO1#%:1$TjNe*eOD&Z7yd83F:qSăU"q]?X$7v6WCsR'uFfw=VIbiHP%(Kml=%pLM25vwMRw9[R4Q3t^Ng%cPCEV.icY]VăU"SIbO#[3;8H\%:M>P&QM65F1?:t,viZRA0;Qo-E>wD8RzLj7.W-eBe*Q?auG=''&ăU"ERxdYA9l4r%^CHGD'5+#ao'B]^t6<eMC].tIlf1_6+\/sa[/23ASGew2E>9J\o=ăU"JvZi6m6?$3Nkz_LS6V;S1#Kr*Lm9z&%nakP3lYgZPvXODC/fMg]Jw\q.^6?1(v#ăU"Mq%hS6IiX7$#lU6u:SF+l8Gh56JrgVe[&#qcmZ5G,CHE;W2p^NQli6pBf?<a,P5ăU"%sX:KI3BEsl4\Y4=;CWoB>.kM46-FUcwq6(fNCY)98,lm#e(CTve$8:s/[75\LGăU"X89s3SO&/[.X#WxK-ZV1S%TIk?6ZQ6v%[rtfj-Sb^]Anb-_'E;+SB8;7hkt#57$ăU"+cy]0;tYtI<J?(:<JWIh7E/$+/4>cTfU<gM0*E-uQr]Oq/]B4C=#_>U/l*a*UTwăU"d-TraXdeViKUEX?33*7DRn<85=^D7Xj-kkF2=2ez.V=v.=>EQQH^*?0++$U_ChoăU"CN8sC-zl\ag0W.R/ulC/MIig%<\ho<h+KVfH*K/r;*r+<ZQq];TQe.0Dr[)wrK1ăU"$Y#fQYMY%L&ZZGiG?'&<gV=(G?;5_&4oxa-I_j^nh%>Wa\(cToHdfceb%Vu(4GVăU"0IWCGBS-q5x>nnucb[utiX$uf+)2rRr\oAR#GBsAFSC^uKu\0V(AN$h'msOgd,xăU">RNJ?q_&a\P2AkrnH^<6NJHg4+,TN7$o-'fj/QcDK1?7x[wk7NLCFmq8?,mctfKăU"\^Nc;LRR#_]*n><*vcJ'Uh3WQnB[BK/hM)w&)\8Jg3DWBbxSGr;#)?FG[,En]OEăU">EGQj9v#_bb<&w]5>IOnZ7BE5LPRash(CR\?eR.tNNYdJqjkwTGO0$/tV+o\x&OăU";L]s-j2Q_pgUD6ItszI0%O67*C%*ioUn^](etjdBF)9d:1_*Egl\3.8WHDIngqQăU"1\/FJSm//(5.ENBvDO\6iDuTyA^MK2k#N0W)kYMmP\Oy0Cd'n3e%Mt30Im=rAK'ăU"q1e'$gpkSd):$9uQF0.yW]gYyP_#N)o)8biW\b4BmfCs'8<4%Xlv991^lTKYD6?ăU"eRBIHR^+4(7uA;d.fy?,-rGWILKWxeEDQV:]gHyp5h6rc*8F?cRR$OEXt<84mlRăU"IQXwcW*TcZC_:BFR<Y=M(7BYY0rIIM'M[1.cYVTF+w['mS9)ijNo8Yy_;5-c61QăU"#)2-a^Lk^E4c[vZ%MR[,EjGRI*9y?h'W,1f3&n/tjj5VX?EB]FZ4Z'/cB:'SkvJăU"+LQjk,rRz&SuQQT?FT%<9Z,kv\Tx(ArKRa5D6C8nk'\N>f(ihG0E;W3p[fQ+34>ăU"D(Wp25Y=)F8;:BL>jTmU0gb]ul50Q%1vW4uUvUAv?V>6?=\3CZ6>)ANKt;7Q.>]ăU"=_J%)0kOKZhrHak$<6Q<R]3G0l;,CBU4r08qX,#1TIigA:IZ_jI=_y\U(A2uU4XăU"\9e_tjZ_5r$Rc(Ys4JHpl?o,zP*MFDlfZOgxQCm?-nVsBEr%,;ThF$NT74u^8H>ăU"*xd_[nwOFQR5xv/X4]?tL;35i(0:dUn*<YV4N$ZG:1f4$xdUk?+LDWgvMA9/j+(ăU"U(S'+H'C$[aPO6cH&GEz]1=kOoD,Z*Dk#Y)%_NH2\&8k4yQ12SpYNJ_B)As?+ExăU"M%*,CF0SP=<J?Uk-tKrIJT'<MkKK1v^]u6sVhTE]8/0;<i97elrZ8=$dpB9lH1văU"\#:91hoSs(>KxH[,nd(3=dsQIelcRwBC%,h\%j6;Evsc;Y>]qP^=--aO+4*?K.băU"?XWeL)\Zv).Lu)fv)<nL)zJBd?21D?LtT?$tODjJw=fgjZ/=LbO;om0xDj2.ydYăU"]^BM<(fw:jN_YW;L>AVd#xYoR(xCrXh2/FbDrOh=Ax&ls-vx]s-*N5oJHtcYJTpăU"d;-mO;heGjW1a,cX)FP[:Xlm7r.MM>?nCy$vH.YJV<&4Tm584m0<WR'NjldODuoăU"BCq0_$Q/X(wYx?xE855$&)U?;MF4n^uuZamO4>4w7GgaCRCmf0RYOZmI]>cX>auăU"eNS5\t=awQm<F[7qu5>hZ4tqLWv-1EuSsn\p#74<NJ\FH?nnM>AlDZ]I,FJZND<ăU"xMhv2FvG]f?ul[TMH</,DypaMhQr7vY6V^N3Yt1ns3uLbmMc7$M/Yq-oI\$izcbăU"o'w.K'U&G]9,2T<&FL;^?Y<4P+42aAM4?E5y#oBQB-LDrrvxq%J7/2(MiDyd>B>ăU"0#CK3fDh+7COZk>E#Emz9/QA&zWEmgjYE0(2V*r/qroKTfiqY&0PKWA_=qT/::hăU"a$a4pW)?n,JHI_.XafQ^]dQm$,BtK50FY0PvSx2X:RpA3oV_[hB^-rb8#hHt&KaăU"N1MOeqqI3VPt$W0gMicorcMHO[bxVesS#&eP5L+j[6n(N9-B>UIq?tiT3hS(PUWăU"B,[*d_[qyU^bsBWK)tt1'WY&MFWsw7(RQ'd(AW5Up+G&Nh,e+cz/fghjj2imt?>ăU"DDZR+#PoP7iWeSS,^#uQGT%6LXqrYRV?B93D#yKIvY]18?9Fgg#E;rH(0>$tJ.xăU"%,&(:=qz-&SoSP2.rw10wr=90wB-xmw<U(*Plp_ssnUwnl>J(3l29nEjOSNF+efăU"G;X<kD4pi'8g5uX'h3h+e:J6R+(y$8EZ\2x?tS/*G?^/*[nFaA(k^RFrc1llNhKăU"5PEU#;ie2>ZHL>g/U#i#kkR_Ge;_=^;UjjiJ?zd6<V?fzEri#E8-P3?pT#<cQ4găU"B6s]5m/VG/^N^B.fW.:pSf9>9f3Wk3tmHgnY+q[cc[(8*ovH4$^YBjQxlqvgKFeăU"&Gyl?[vc2jlNM>K_s87th;>wW-<HorcuhI?W[bhW,D8zM7%v>3CS<cZDMS&*G:qăU">l(=cr*kSrTOtdcLT*x2rsRd:V'CBz6ojh&d#l^C(S%bBtKpQf:i(t&2oeM(=5tăU"n1SBbPO(%^3,<Kws=v3ji6Z^nC9P_%_X3.?m,l&8yQa?TdVRgZP<rjWA9'*Tv4tăU"d:a_k?I4OP:'zriZ+Im=.(z(#aTm[OhIHOW2Q&>Y$NKWr$Qz:Fc/MMO-IjNBM_măU").gy6EPaxnC.l%7122,xnoKvyF>fJspMbta;kGtaAd8VkDxjqWZ-uK6J.]ncdsrăU"qUhcbi4Jn.-rII*fAral5,&.Lf*bcjhTS/2Rg60>mGLL?$5On3\-2YVD)O4L$%/ăU":>.d&BWCCddroev[f6J-1cAVZkW'VtlcDuOA*DRP*qH.*tu3,tRt:fYxnR3'V/LăU"N)$Todnr(]_%]5IaJ\'Y^HD.uu7G5=Xl>K/G28.RTMnW[t,HS(UqT373m,2(?f*ăEND SUBăSUB V6ăU"$l8s8l426uYFD[:]_E&'7iu)2(]+LI\XP*x1(y(d4?mpRc3HTb_j]HqXh7mx:lXăU"d,?j>S?ukNnYK[+)])gjY^-$(od$/M8,]v+Rw,%^=$I]5E+-Nd]bpb<voF-/Gt*ăU"4$9^_4^*DXn>t(&g+n=mX]::f]-6w5f0<cmN>0n<=3c_9sErC0ITRk6^fsqu?upăU"nXLYUuX>FPyB>l\fk&uU4d)\#<H_H9AUw9nD5%LXCU:5F0HFh-FJ?V:LJXcN,NwăU"Zq'01W0ZC=vn$8tVUG?,Xa<9S^WS5'Q'$l*qGronYoO)8;)>CIH^hOi\WMdnK\/ăU"1XCFP)Cfh0\Zny77'-;U2r.Nba\#kd$B(k^DG[=>k)Nr?-gxTu%p()9%%%%-I%kăU"NmXGi%b%%60%(%eQ%%%6%%%%htw%jTgh%wjvg%YZSgRfxV(q<>SAs;w7KNwVbw_ăU"8or,GM<[dooo/*a8-YBtU-4vQaYp'7Z[+rs.pPXqB5??%5mE\N6&))l:EG_ShXHăU"HsB$mVgPMMv9^9xh/^:raMmd#eK;l?bK)M^/X5X$0$7S4i6^;Ptb(=eN$ZIawRUăU"A^[ttYG#V2e<vgU\6l:IsN)u/wB,eH>v%[e=TDs>U]RK0ak1j\AAqeBC^7u4G)hăU"VP#WP0dY(CO6?.Hq+e1>'v7uE^TjRlQqTsSEOw29<0:J(gL\A/,O:^]^pe<uUA0ăU"ByJ\dQ1iuux8eDRI[,4LNp]Dgab'<'$uA55gaMd_\p_[v1;(YQ7J'7t=bE=27/(ăU"^X0m.)#^42W:zXYm<VSRRF=20?NYDi*W/?;#aYkad+=45b)SnS'a?0^4#v[8QVKăU"7*;17L'eA*jJyGK_u#p-#00Z0ELQ/[yHqi=<ePgkZW];w<IGuA%)U#OE(=[Oo6HăU"Z:[VV81SeHF]s==%SS1s$pJJ1T0XnZ/?iA;JnhGp[uilh[KmA?[T0<3T'YLimZ;ăU"]C;8?;HqR^S3X?4jhCr1.iKV]U*t:p=IwGCB\A46qH[C2H&eP11d'QU9J;T]m+IăU"n1P&FG[#[TO11[[N0fO^+\i=k]3Q>WXO:XWDxAp?WXFUvsV=a\_ZC.NUgXr_b$lăU"i6n[NFrS;h_Gl^$RWjlSk:u0cHp+Go&4<H9']b*(Pp::fe#H#]B>iRDG+U9U:z:ăU"q^CKuj/:n.4X?.-bTo;Ijir0o,]%EUjU8^+3^$9f+f'%E%EX'CKu7kgs*P&7HqZăU"#f,XMT/vmE)&jY9^1-,)'+pF^120=]C,IBRD(4;y*DLY?6:?3dXE7AhH.JUU(+VăU"QkF=g:fk+B29M;KmAKX=$bvV;0UhzR4rpe:=Qx:E[Q/[6gt'->)%+CVkg+8?n2UăU";m=d:i7VPIu$GIKw\Ko>>:#LRrdk<vsN?&S?nfDW4TQ=re;8*]8HKT[]z6/eC^JăU"w9\3q\bqXg1k)1=OqiN&mX=yaLsN7%2s9fJgIcAbGIQC*rG19Ll^-Li0.NR-P7%ăU"s0r<G.(0BCi(0-EAQNHIM7%hx'_MVTG.R[)wd*oJ.tmL$1u<d:$X$8^MHv[1/r.ăU"xaP)*ZS./?k_\bF02Auo_7+rh.nAZcOHEVw&Pvl6CO^VHe<79;kXN,L=*i5(CG+ăU"i$8)SaS>_1A6U/B^[mL)Gg)y/JWQ)A6G?H[%:*mkN$5q+8p&*^#zuYN5cFb-1kHăU"'qD9_AuNZ7Q*2lnn\OieZ;2b54a21WbgD$30%]Hk.$RNt4\L_[6?dSueY_;KO9FăU"7kg),.A'G;1GUjVI-N%1z8aw]_NF_%kO\,.O8QQd<ucwLF60PF7vNE<>dlYUA^RăU"w\36JFI//NH&#VTi#VZg7]S;WB,p)ZMmKQEbIMwI-0Hv,LJZB$L'\GbR1F4[oi,ăU"Hi)&q5wWAy/-]T_t,q.iFb]PqS:eJSpyJ4KRqnJ>d'(F-u3>%TBjvuYgK8kQ8kwăU"7B3abT$1e5D#?/N;T#B2T],D$egUp3[Q4l%]blMg4X7rcBh$2j\e(#W6L)>^dutăU"71;cI)p]6kn*qvfvF,ds::Gk^vk\UJPGaE>,5/Wsfz#%N)'rLh[-$E3cZV4JG?7ăU"2$\z[U^OpCwAs(GD,NH0jWj0mM9Z-p9-1gnOtdF2G->2Z_]9U]W?QCDP\.kjvJ+ăU"'2ik,^ty&dQ:]'#TZEv.)r2N\x15YG_gp'l_1<bGY.FJWM4x_09-L>WqB=g\6[*ăU"pLZU9k]*Ye#^3[ovFCo<*V^O-[md^0Y-^^GR>N&JjXK/=Zw>9DvtxPHt18sIOJfăU"J3R_&$Zz>F3L[.IR8>?#J#&2mYt$u1VHnF#Ba14i[oTl+M7.Sp,:PMIVb:S_i1IăU"U>es>=/;ibv/l_-n.BM.\.I\BJ.3LH8B0w4W)Dv?F\\2;d)S3:Sx/MfTOmtPRs-ăU"(dInexy6,Lx>bk0-#2gW4K%pG:dn,N<i5NN$V:gpftx.XUk+jBAOv-a]Yr;.aAdăU"Q8VF^BR#C9-3FHGE#v]=KL%dUemp?[9un-YsI;kbkLCw?FR2(xy?>p]mdZ1M8^,ăU"*1FRocVUbFY16iOvMhCrz7Bdgsq/oT]tfntT_Lm;gT-APJ+j1?NJ>:)]r6?U15.ăU"%pauoi,>Kxn^;XdIbS>ND;asntM)/9(fuzvDS?$x4TG*^JMEUfs'3:g:3+f%8+GăU"t5G;\U;ff5;t:U;v5,;Na1BU])+pd_jGXFY_P_cj,J\qBm3o.(vCQxt])lNhm^WăU"B0(Y]w6N_PUW2>0BV*x,Yo8x$Crp2hE?DraOh4x_x&-vhNATQYxWq$kMnRn'toTăU"g\:2p5h<>m'K_xFXd_:&mB9v9k/>?Czu$\n=e:3*He<Ft&/ITG,<3u-\:&&f4k:ăU"djh[-O1qR<tvfNwdW;ENP6uP=7NSf[4U+eMM&l9DL_HlTv/P,paq4+rw3buE<xlăU"UU*6pNtB.S_WMrF5iVF4u*ts6q?<-nHd#H7W2RZlqFLlnKU>M9+\',6;JR#bb%văU"s#cgsBTmZq>0ivm<4hexG5ZhQ7vt/X#(i'q'6CeF_lJm?G]n1PCjIfTaw=ofPzbăU"yO:cSYsqqsfdqf]]=:>_Z,SV4>FM,I?3y6ko.4Su72w<,Nu7.FLnNi&ny>B'4$TăU"8)vzqSa.3>sDFJ5s#OZf]/zO5t9pr4#ZaQOw$&wbXnE$7[fNRn0mAIL/k<>_]j^ăU"Ha0n$kPB4Xm&GCtJ^HPB:lRW]LWV=$>dMW;w=>/Rp3o(V_hBX^-b8o#4u\UKaqLăU"j4#YcNbEfmLHUp7PA/&^YJ/gh2Y0F^D=t\j6oS]mg7wufgMU0K=ONMBbaGWmbmdăU"Oq0J6&ZmQthi_eUR>,Dnevo0HCrqP54'>6Bn?Zo2%yYV+1KV&<LU-/\ZRRpZceEăU"<*[mJdsW3rQ,s^CAj_>V*lfWS]OO7gY&*&IxZXqJ#9Rrn7;c)k2DN6WfWUyWv6&ăU"Ikr9'0Y9NO-?B%n<Gjn*zlFs1(e_uh,q1&_FFnn2tj?$L(9cH.t/jGn:+]'p6j[ăU")KV3ga8?mKD0dq-fH^1wCE]YZcPu\5a:''Mzp)gS6VlX>;i9RyCKs#Q[dlRN2A;ăU"Mgp8hHTja,N%8gp62>g2k8Eu\;%51B.t)&z,HO1\M-d>gY0$.q5zj1Xom+<CX1*ăU"2&2C,4Kq0E/f:>c-(/VqUlsjFOvN'q(li9cHAMKey\<8s'xnt#(=>crkaaih)dUăU"qC.&O;P%4NGM(+\dYbo^UA;.(SeIOPA(IaP0h(Us\W:'FXUv-qX0d>X1LX2_3hYăU"a5.rJ>br?8u8IieMH'&EbEm:MY]Sv?b_hv[6]4H&SAeTHYH_3&L;G+]vPR#h\[văU"6jEILGrueF#wC$?IF0T*VCroJ35SovylBUm:(v3h,He;kp\x]eH^.CecGE9PxnCăU"c.%e*6U'ct)t#OW/Fmvu2k%C0KrwC]joQu^%NKDjM)x>CS<bYDr7>q'c'2$[3%_ăU"slE,,SXJVbJ,a?MZFkAAHA+B=c$3iCmP=]$.qF?0?r4NLy-uR,UQoq#O?R2i0-?ăU"B0e<iteG4jE6:a]V334bSqza,f0Y/6v71,?3,xjk2\ethb=8VdhN9U,#x(u%p()ăU"9%%%%-O%0k%=F/<l&n,:%(%y_%%%8%%%%wjf%irjT%ljyu%zyVX.Sy'yNf*<BoTăU"[/w>;FadXE6L\)CVvJa^oK6ZLbQHk86<[t=eVm)MSmm*=iIyt_-%w9sbH^7%nRsăU"tJ4LG9V4dI\]r'$+2$BlrHMH(fjmT(AFSX9t#%ww3FhiAjT$FD+^v$^hly>Wq+NăU"j<?X'Njr.E7Mh\DdK:zu'rVi&ov?OM\v:4vx_<Xz,Oil5v7qnx,6Qj.Iu?'E/VlăU"^CGnc+B8.>Grk9N4N6ur?rdU,w.P/?0,NkWR)fAEVw0dWd*57;XMP[YyB6:j\29ăU"5KN*B435F-r+YfU*mbG_-b)Rk2o.OU?5u-=haaP$$_>uXn4V0T^.)qZ#Pvi-$twăU"E&j8JzcYE0d>^B;og7>G^GgC3hxde:-*VJe+^X-[S6au(o'n5#t[3hp=[GX7.n]ăU"%=r2fd&-dc%;L8.2y+4e)Ab(wcgSG<GaS5w\N5ySB7Oq()zX*y(G/a'#*Px')q'ăU"MHow#(d*uO+j<4D.LQ9N5ijM&EWh$WX%0&oJa?\J:Km7mZK4#N=8;?d[yJ7&mJWăU",A'hkx,98-Ltim6?XyVmzkuJusjAo]SlL)t<vON&uK&<kJIncjoA&2RF75x60'yăU"RHjAg;MArWw4TmYnG2:5bC(\s,3N7qYmH%WQ#OF6ISOJYn/Qo1=e^W,c&\F&/;făU"O4Z07K_&8>L0oifAj_uuIUb)A*5(Lb-*\jlEJ_-K/Yzbr-\C'0:.2j,tf/h=G>VăU"9aOLcpxh&LXgTKGq/Mng]e.yxP1Fa,]TO0+aA)neH(TG0.ztBlOW=%*/tjj>PUWăU"C59F9jNB3B)c\hi6F5io_iA=%D/#eOefnJzbK?EMx7nE7#LUKw3RhIRaj/7gAI*ăU"eErwO2tWBm[6sbG8F5q#Z6O^<P:ho2wT=y&0n+$QO+dP_4euo0;zjLoLi&S\U:\ăU"5_&drFJ[jqEZ/G^GhCDrw_q#cX,G$o]UJk^uK.>ca31'*tq'oI%2SAu$V&4?bQeăU"?rlol)X&P0'u+m:IwBCov\'n&Jcm?>u^ydIqJHmbsk.=*T9xQ$[aW4rsXs)ktx\ăU")-&#Hu#[nHqJIK'rP1S:%&0mr<T9okt]IJ:*T<b8OQBG3iP1zW87^ui.9Q<9Xs_ăU"[8%.Z)d4tXj+_UBx2FBd0ce\]:=QS#r)X<e#'t^)rtp<mndqz68\ID%KtGZ-RCjăU"(*O-C:#sk6No6VK,=O;/toXwV.1T1Yu'n\XMfG5CiGU:0[iFQS<q<OOL-J:'hqvăU"tUj:TQUi&ede<]G&-o5\\_Eb\5Q3)dx)vS)[Q=G?22>\GRNQX:CMpyeRg>0-f%#ăU"ig'M4zm[3aKSL>%?^qT6:TKs-]\^GVPZs%3trIk4o%Mp7ZhZkqh['lR2hs+m(60ăU"Ic2C4?=x,,CNDvgo3v0Se*2FOQe0Up'f1$bo%I/bXL1Z\Kjn?-om5i]&CKpF54CăU"[B.0>=<'eCWMq,**/3O*l/V\Ufq_=k\68k-fsP&%?C]UXK^r5<Mr?RN>P9Wk=EEăU"7;0]J:JE>'&n6(]O,SGl;l5=GIIBU/THV3:6K0ZS-\=u6lWs2Q[#D=gEhlt#)mRăU"shYO'NSC]9o.TVoE%9av<pro1bcYS+:JEmikCB<'(-W.r-hb;_4'Uyfo2*dH2AfăU"Vx&IS>7J:EPZapgUA.4iI'>(6Fm:KsJh=LY$%j/1BS5mZoVc#'F%k\>0_3N%BT%ăU"N[P7dfggahKI,,&#D*?b5o,[bR4fgC2+vxPV,U,ODz1BI0wuVCP&$-b;-.5XIzRăU"(8iM%qT*d/Cso^3w3Tn('63cK/4sP=-GGJIs0tWRtR8G7tSCCMvw*3,ZC%S:FDNăU":X0NiKcJsr)[:,0x_q<1f%nt<wzTWQ>4bhr3s>:+8kV:hI^[.P?gu%GT6FpL$PRăU"<Xl(X+l6s?ju<n>^2JISYlqa.Bhk^WB-rJlMM'A_j>W/TrBG;DTO*MC=7lleID(ăU"6IDOhC+z*Bb5-5:P8GK4Yb0WL9(-\CFkK3jpf8GF&Kl/Z&#0nc;X+-3xK'9xS-zăU"s(qeYs(Q^JIzy0%h^(Gw$QNdwkGmuC13e]lJ>IpZ5$br6O*O9#,I0]zunOT?r9SăU"Zc'QzTt^sRHh9UgMz;,XnoWKSa3.\VE1Fbvb<RpE$,m9V[#7WfIgg%8:.P'7_D^ăU"(>24SSvgW)OVk^nCZ:>a)85E&^uEX/0?Ji[_=(J0.]m4M?YDFco,5^rA;rdj++'ăU"7iu^4uDj*+lfJHejl4$Zh^IDXc>QVr^&zgbq=:rmdVq/Q8LSNFdKKPF:iqF,>0kăU"py]:z*wJKay6S?m5S9e5aa)OfH&++j+q(Vuhs*aBlX:(5O*1C.6[+b_u(#EEd5PăU"$eI8%Avl)<mWt_L;6b>n0+]hKXffj]])q;lnHgx3H$B4&(m;u;cp'H_<B$im^/băU"d\;CY4E/EBL5**Aa4T7.N(-&pfIg#,ibQP)%x-b4/3j9nE2a5<q;?(DiPhlKom5ăU"GWjS'CHsQCHpiBg.$#vB#2*t(b)Mw-C>k%Vl(L&i&d:?4Hgx=>,h4s%0W#YRd_wăU"_7s?1wmPnUPBk7iK:29W_QX-d=+q:b,r\2;D)/FI.]P[.JF0+i=0.o$\sh:P.fMăU":a^()&D9L-dpq$paHh[]8(HWEn]pC1Be#M\9H4A'Di,52Dyl[/:8=3adSDkh_72ăU"#_0N$2%:J,.tGM,anh/g7%pFS;3:u3O)Ix?9IMtYMYl?At_SZu8C8KHB;O5\fm%ăU"=EB/fU_)CLWMjGwMo?ZcF\i5WMu-Zs(vRXC*.Q,p]yk#Lh3'YLuiV7hwKE+kth_ăU"_YD[l:mz>a.T:=7cC*j'csEINvt34#47xpLBsSc)E#G.pQLT3QsRG3A2*vi-KrbăU"..?k30A\OSC=72Lh$5ECYo60:+aXcThBTnYQk.+C;n-0FaYPas.d%Wh,_pLY:HRăU"Q1IX:,U-OeA822/_=l)?&tijD>0^,I4Z:.\:'d]+hK8Ew&-+AC9/]#26)jFhPZcăU"?S/(zV2yM4(6LJ>=/djMMe^+rBrb$2<oT[SMEUJSIV#Jgqg/n/+e*E+GH7DOZR/ăU"FpS9R_LUpw-FW%UgeEA>jibU<DtN3o=z#b[Vy=Lc)RdRGOteIqc#]x\v7eF$xAAăU"R8E3lZq1N6L$?,9d;uW[4.(6^C^;D]'Hsalh<$3Ax0.;)b^*L%u;'9kFMJhfWX[ăU"EQ?9CE6[_U?=<5;&Qajw&q#UF*^nE>D5l)pOtpp3J)Mt\K-b-.F)VFytYjY,#^qăU"p4i+UNj,cYIo3ckn.P][fb2hXF2Es;Vkm^KI#oNwa_V)i-\fPbc0j;T:vc(a[lFăU"CcC*zZ]GAI>2S;sux))a,s:.USA=iFma4MMn1VURJ:0qbEQE*V*r7a$['9GSVLzăU"<%>rL5,-O$1ptMD;t%GO8Od2aT?[q$$]I+tn>N=9T#rbG9[q\X:\5flWC$v,Zb-ăU"B2#e8hW6Qt/WBSR[CnZ[JeGcoj+?COP2e.L>eB[nzFs9QO4vKH5l5R>Q%UudPG/ăU"YS[SUsp38Ekr-JM]NO6XgL)$O]*wp\e?U(J9%C](&uvr]q9>pj+iko9D6H8)cTcăU"B[]5MZN8Y,ppm%amQd-*(pY-HF?RC\Cdp-1e=$uGjM&k=&:d81DCx?o:C[Q690NăU"m^SM3Q;kZpJtB5A/&sy5rnkN$Ps,+(n3PJ^/76<z;g)EO[lLb\EV9.w\n2>x8;;ăU"[tEP2?ueK,(m^SF)2()+3$r%>ja-dM#)alB445ctm7(8/p7*J8ou_?>Yi;n7tpYăU"QW^wU7R;t6V7=q:nQYqKM,,*&r*BnfRF8Np*ivt*aw'&oemap_L'ynCmg>&OoHFăU"u3'l)<PET.T*_uAy#R4/e2ol>TLdwP+?$cswFb#0DQa1N(i(]]WZ8rjIL%W>:F?ăU"*>'[XBq$Kv':p?U#r2poM2eb_%%0D)7)ImhGEw9L/q(J)&A1?lXK7kG)TX+Dx#0ăU"VA#uVg-A#uLe_Z.s:]k]AmE,*uqvb8K*EfvDNWEf\v4)2'uzfCc81LAr:ejar%ZăU"Gk[$gYP=4Z/Z)^R0VWA#WV_Q$PSusYkkuOq3&:(ij-rH5c%[k0(6gx]wB]6qSURăU"A2kf(fVlSNF?2h%_i3YFT)E%3epi,nLASC0QNZ6,2)[Ysb1cMaIMw?t%3ENMTz3ăU"x;11U,fQuvBs;sZmWrFch%_b^^dcB^qoM8]XH#Ddn*?UXl_hwS2ETxw&3t]y-4aăU")&2h)>PMHIJ;_rZyow(zZ\du.OD52W3zVp\MfV_%UZ[?&O3VJATjh<Me3u8b5*năU"aOjs2u4qE)7Bt5Nc.>=9CYX&%]cz>lQ1,4*O3AIc36hIPhHGfE)r,YCFBaen9dsăU"<aL1am)V[\T_NDb4S3X,R8L(Q+a?EgidaF(RMXY_=pRJ4f-FIj'in>N4dtz'FB^ăU"2IZ%4zb+s/-s64a,(?7M+-Hrb>I]ZUVa+CCz39i5%D+(Vz(PS4/V^PD(E*T4yhTăU"&bD?prs>gb\H&RUcpPDqx<(Ul<rc]wBZPDL2WsMu+K_ZQS>W>$0q8]CN4Gfq(c4ăU"<\w$;XM/<TJTsY-WTE]5i*,a1Q=RcB[c/o\<p*Jlcv<9mr7;+L9^di2V=wc$$,aăU"$3#Eoh&K:WMd.l-8=0Ds65]%+t&256pkrJo:HN\v$Vu^cq8&K*sV-E'KP[<4/%IăU"vj3aHVfdA%.Bb7Mq*eFR9E)Jda&=Mf>gotr)>0A)*8Z<?f]tca^/YTB_iftZDgGăU"=R^oA(ax&j2SIAZX47.p9%#%T2pJr_S7o6LLy%Eqr%'_#FWTk_DR%i<kApRnLenăU"f0^\&w0(2Qf'$X.?k0p;CWa$xdETot:K.]lN1<e$)l0W<5sSNRtBPartIIE+%G5ăU"I^]:s2+aA(7zpiAd1NPox)cGgx^L3w,Q&GxT=^<1?Y?#-Hs9RVLEp>P>r$YAZGvăU"1XE*bLvN<<AIHr*Tgq4lQjk:*'\sjK+,4vSNop0Cg5HE49Zo&Y2L2o#mQQJtba_ăU"=MC*-m9nt\h'c[5hFf.Zn_Re(;'j'S;_aSE%C[^I6bpDA(m)GZCcI<,NM6r\f(MăU"J1Ho'RE\g;wD<k=V%7HE*ZF(Y51M6:PFp>fdn0OXr1j_2B$ZK[7En:'DeyA'.yRăU"'gt?dvn]5[YeF6a2XC[D$AExmz?4&amBOMdHhAard>U$mCn:d)'E%oPpdAk&F6TăU"%jJ+2$#T.kYl1KBMZf+9Z)pP,Xofp9=<X_qErs?9U.*3\IEjiW7g8'u4f&rC65DăU"g[aCA#e.b%$<-^$pPk(_qIZO2u-46Vb')Av^/jSU^75]dLkO0_s3HZmCw&].pL9ăU"G9AeLL9sg1xmZ&uwvY>X7\+82O\;F_V2ost()Lru[Y4gV)>+5V_4i8(FfT95StsăU"afW+<fUBLr0yLO)j=W-(hT#c$e8=k%*KZ4dM>l&&M>F(nZm64,^m%pt?&4Q70]9ăU"or[_*%p4lxg0[/=iTqygt_-0/+U#o4x[U(QlAT)NW+I^>VKG3%7fM<:gd>n5VbCăU"BZTgv594qxQLl5qA0U6[S0EX;&upS8IK3ZRDm&FCa1RReeREup0iD\=PXj7Ud$hăU"NL^>ZqUVqaHoD400-q=WC=-\JC[GNPsJQDCI[$Z(Fd$/R;jU1mdi<jML16_%0r;ăU"<G(I&FvC/(&?#CBB,AM]qVl[P2Ht7^>t4*v*CY,wfIQql>QsVhxI8>0w.9X<uSZăU"w7YFrVni:JP5DhOBE10$Ams%\Se3'bk1fDg(gkjWgkMz\_y9/*l_ZL:X\T=+)cIăU"I9hZ+90lxz0;=nlEi4izE8;r>hVep.6_z<#5mhAllGuYQwlGf%&Fq,XuI7IpQ(BăU"mm\Bm>4b(,x.?2Uy4m=d):ctl#2>pmmBYogT%YIQ1SHMRjm6k9j+fY\o.A%jK;NăU"PrP;fRN.G;V[iiDWY\Fg6Fx$qVlo5FX$jCAm,H6flEJqgnM:PSW6R93JVjyQ_p5ăU"SQ)tq7TdH8q:Q6?:?2>4m7dLZdZRB[:?CP&4vd2ng/:nIx,C)BZh/VT8uXyShv?ăU"VBi?kENZi(Z'J3idJRbk6j;eu4R<:18;;O5dNff:E6,HU5GWB'EXKl1UzFi6nJ&ăU"lgD'^Q3aO<shN^Qrdj/]3(\^S'OP+WN*sr<bSs.%m:0v;r/CDfD$]NN4VMhRG4MăU"pg:agsju\a<RbidF.mfdYPRn'(2?JuKXnXTY=<*B)LCXCp4DkN0RU1FG\5d=&:iăU"Kb2GQ??)0lMG,En6-jUB-QC5aM]41b8T.<+GW(1[Mwixz#;J9.QSN7E'A5dL8BOăU"NC/rTgvAX+>57<5[u*.m%seWpPm3W/bStT^$K%m/DfEqNoq)bgVSW8[vQlCUp#KăU"QLlR,;sC(VF$sS#Xe<r#$t*0mu_-xmh8kY*oe*\bw['+(Q+tr=-+-71pf0;,3FxăU"%Rw3B_]mYEV*>szk\p,8UKU$x>Ee%o85C2g9QwE$%hh(BXdxwyBjaU2JjVPut8wăU"f1/E8d-v3,*,Z91+wWACe-%LJf=M8_gBl/-EQo]&VV^i4Z>7nm(#.[6^+b?Ilj-ăU"APGq%LnNT_RoEb=9UWPGN:3Sp7w2F[_KUl[2,&zC//:-=nF\-SYd]u0=<2:lM\+ăU"ThcLj-jhpMqG(U:2R?'N?^.yW\RXIutLAN1r=*[?sJevZjF'1X^CiJXI4j'$TT;ăU"xX4f::OjMh\J*7J0p_2Zs/[0&>YlxRY/1>JTfb8o(U\J&oK/jG'P&CMpw=s';OuăU"nYz;Uimg:3S'-m=v+rYhq>U)lF5Y[pr&Q3,cHC=^t:q?B>MqV;,bTBMJ4.ro>NXăU"E8x+'#HeG'TS&YPD[gb*g.r\Y85BP?H.xLDCI22iIuSKg4flp<SkBSGyQdfP=M3ăU"4e4peA(=cy1LfPWNagS^*Js^\;:5cz,=K#-69.OW+Cv8u%p()9%%%%-I%UNmCG*ăU"aW+-;?%+%Fh%%%6%%%%wjf%irjT%wjfi%rjSyS'y.+)<B#\kawK%i[N7S(z6Np3ăU"Jel]lBN,^.IpXzW$f=aH,Bl?R+I*i+>E'=?JE(dsaV9E2_CETe&#N)gJAuJt7mdăU"L:2nvp]xqLm;JNg[Py2vl3f74B;dETyM%du(mtL\0aCDDwt8uZJVf^t.N[.np$iăU"GqZ6a.Ng=FxVx0a^Iaq1:=]CDoe^<p7uSATH^[eN#bq%HaaC.;D$=+CqH)mkIk8ăU"$8F3\a(R8wsdR::]2Boj6j7;WnTi\$mDSa&dRZl8-QI4sB.#xG2I2esf2B:Z^tfăU"<0X\(aK/#syN<bvG9WpfCjPQ7+KrNBkCf/$6O\jeL>gNlNtufP-U'Jjx_*6t\0lăU"3Q8$Eb[Sy8YcY^mtD-Pfgfftr3Lq$j03WeJSu8IPrPyqZTI&%fmjIdq=rb+RwcEăU"Ihu\vO]R,xc2aQt5Jn=gMbi/xQ-3g?8)Es'Z)e8:#6^OIfm\2RqVer&D2tnb.PoăU"2A)q>d<p23j9l)<t/BPNM$'Lxi/;5K(XtVJuOH(r*8[nuFNeZ9KSxls=n+5LP9lăU"D*6'baxwc+7>>:\euNy'TMyhw4v.mX%VmC#K:L3&iuBdo8JGtdrFzZ4Z;bA$N#răU"$uEDzTg?Q&&Z2m+b\N.xcRSgCnV*h;<qJrbWw>oD18.a#]I6F=]tKrv3snyE5t%ăU"*a?pFt>tGqr#8E(8d[R7eckHn-v1;jcirHh*kbPdrn#dnY/TgKA_yCT9,p\BVk'ăU"$hEpiW&2WV8C;Rhl],-\cmfx4bni>M$Y.fOv_bn_f8p,w$VI4d)j\:NpWrDiC%7ăU")X*O:rJM2jk-Pq&YM#q1Wt?/Rjqr;9845L\Y>up8K^4]n_x*NF?e'V7:4y>[=gZăU"O3U:l$]y?KB.W:z>P[<yKxblg&uYs<J06fJ'-5.dX.-gc7xrI]U1vT9YVPmR8E$ăU"TitYDAID\7e?6uV),jwLXLN7\+8;)y[C_nRJ^ZBTA6Eu&s?24au,OxdCMPMj6krăU"OPPqrQeI>l#$CohNE5HiGnm8tKsfPWxI_-rdy+lb-%Xs5:u/sO#fCA:l6[4#GhuăU";sx<^b-k9g<JCXl;2;zJoqsj8Rql6\q<NE]\0%9\2ku9X'sG:K%M%#pu$IMfh33ăU"IxB94^TqOL[GKPWdvta[CxQq)9.l0/vd.Fktm?p$rpjYt1'V)6S,Bnqn$\Z#LBEăU"82OF#16VjD)1FbaE1o\1Hfsx*=NLu,6mZ1:][#\]hCtdP$^6AM(aMR$]\BwF;]'ăU"T[4S3TMl>,h)Jgs=7CBnu#eBA:Q#C+XSbX:r^?06SJ,n18oY:D8*dUal)(j1l-CăU"#l4]lvaA#UaySELrO:EcOO]G>og.<[4JLI^Z9.:cQb)O&RlQ$cMW\[+m/2:-/]-ăU"wCy)Z#kXq3P-G*q88x;pz_aZ\88PRh$2X>A13u/]2?.A8W'..7^$H.ctnnJq=pOăU"Cjg\Yo:Mm1VpAkK'CFnJTbu9r\k;5+PkG\245FtZ$jL=m-&5-r[S;tAE)=3ZsxYăU"^Jkqhd8HBDsoPl1;RuIH&PL&vc&gZU4,GE_D(Eu,dtLA+J&\>nPM1]NGn[6M)HrăU"ow+4Cyq?YcvRNN$Dg0CRq-*7]y0G*#bEl&A*Jt%fs>:qoq'qqM6+.SUlhlN?hU]ăU"<]^%#,-qslB[\]RaqOIWJYmuL.-&z\s,jamyz*??=.igb*bKe6A'u8_0hOJFgT*ăU">]CcT1Q23mbJ(naAO8RSP;zqICe5dr8eQJGT8)xPs+L5jQq_3ow\eq8-_B,#[jkăU"W1(iCJ,#A\_w:24ih-(0Ivkg?s7&+#fyZkl-l<u7a[o)<]cQnlb+m$uksi6B&E4ăEND SUBăSUB V7ăU"1KAE?MF,Qg=G8Jz:jz'N*Gu8seyysL3)=Ru_pyOk(N1gcH=XaIm#d/>brATxVOSăU"<=363NQZWASo9aAx'u,g-[maNBm2S.&fqn]^SBTpW?sU+V=SvC=9a?&Hp_;)A*aăU"0^Z5(tfAxQF%>;u>W='P%7?)s\6;GMpn*;jawzA'0m2n<7+I*Az5F%AvXs*o:7WăU"Mk<.Z4px-/4Ivr(8:4-,Q2?5BWg2(&C-gZUA5EA1ie=00)Dq5fcT3<>Q5M/uwaXăU"3qoN>9,)2g9/(VSP%kE&h(wF_]$ldM;/(u[,*\O;fPzW5pY[fqA3FQe)ol,Lo7^ăU"pD1;)b$bI75#(DPMXrv\6&f)\c/l0'^1I'Bl&9TGjE,Ou+iql+SXm-bNUTlS6L&ăU"DFS4OBQC6Hb-)O*?aLma%3dIp:?2h,K/mV8M^n'y\0LGJ#[VaANiu,3OsQ]_vbZăU";OfqjwFI*Xi>+w8\T_ht]d._iaLblX^t9]e_X0,$c(jGr^<N:&S;^J,:4E*%&<7ăU",N>Q$KL9Z;CTNGY)ZJ$>C>AJe[8E$#LM$RkiH[eo,koOi,YY$M\2ei\95UO%ASeăU"i4A<NA?N1jz+];AmlvXkiRCU%)mmc8wvegE4>w&F7VauHjcNPjT(+rrJL9-0GvsăU"0)BWZM5DPZY[8BYJ&\>DK\^n%\?jsfu_LB8C6&P):cG[ne&_t]$iez>fgJ=wj\făU"_#<&%3-0_f&$GI=pi55v7i:K*sZ-K-y*:jA[7'3K=ymtGA:5r*VtUio(+PO'%q?ăU"si'cVH&ou-unmrQ,_e%+h&8B8$,Om_.nn2WSHQJ).t_i:OSE^/<Fz#2Ay$(\5WJăU"KkP%-u(]JSy1Kxcql'BFD=Inr5fc7$.nAp.O$Mit3EkhA[GAF60Okho$2_E.l'>ăU"2k[0R(&z2qb^C;.i?)8rOl#9U1[yRG3:?/4z(Li>a9;2q&kDVl8;[fj0>ZVOQ,4ăU"_&/X\uhhYtu0[;&E<8p/Le?2O(E#i>Sg]E&bf3uBX*grjVcN-')UliKg(N>CRw\ăU"My-.onIrR[Ll0sxo)phsqj3uzfb42WBo+dp*q5*o_pOrS#YFR.H[o,Ob#m4\hg7ăU"kyc?[9s]w/pMOp2(**WEZtOxE.$#N]3mgeth-w%%LHU/eJ6?v_W^,.m*1aJUEo;ăU")G3_UI%[^id.enhq%H,0Yi>X4G?bVt$E?GyPd%YK<-#u/^ogRm[\RS$*tePYpdDăU"9FR:0<iA'4O)HdMjYH)kFXOh$0lx/oDCE/6]ahbB>gcd_72xBJ#r30$qqv0UD]FăU"nxwkKe,x9$C(r?E[P788Y0V6n.tL$##X'=I2qt-'LH_2#_)d'lH&Y88iRhyEO,]ăU"DzFv2i)77=#n>l$p&0/mM($vY#dp?ExlEw#n9V0$7]$tlH^U617:F^CW&;/p0rlăU">Kf=5DFMi&N/]QrGz]5&sE3.h-aOA/dSSO*)&+89Y2)+k6flPGz'gL$3oD%LRvbăU"ydPw,NMfR$%b4fb10SO&KK1).A<i3U/FFZtPD$M,gGGwlO/XTncFdxxO>XppXKsăU"zBWbUQbf,OgY7f%$0nc,7rY4+9mp1bl;R'M<':m-0H(PkwJVeoL3ub1*5.VE,Q3ăU"0#zz5sI^?J;r;x#(gbex8k/O$iGO$L-(i;oIC3zaDf?smQ,G\8cg2+kIbIYq'F_ăU"?c$1po(I'w4#V$ag/8bPlN4L\wvjH8[ceX&2lA(EL>AdP[Ae-<f(]alzU3dOqLOăU"h:;q(>yuAOMtI4FSC^?PSIep5mh,oB]1Eh&SqXZ;s&ua56B-FVc.6N6p]]crW-LăU"F(Bq>oLvsT;1>0r?6oi$gWZcXWQ+PyW%yYhnpN\'.'[yG^I;MQG90W4TfXR:\e$ăU"[XIO),yF0-w,:^%_UU3;0]6'i?&XADAkDQ8$9jCZm<2$$.SaB+0eO4v%3uIMhY*ăU"CN>6T,RTJyYu-bC%%nJz#oZ(VpX6Oe0x3;T]f\hkA*&67%_vpxMpH_TIE*jvFl7ăU"WttM=3#pJ*2g*PbIx/y<;A,%Yod];YkQU0vH#8L45InMY;o=x+3i)SEmk.:l9]#ăU"p^[Mb7$(5o+];7W5y&ShQI^<ATe_\kD.yaN#^FLIYlAgEddtTM=RksZhQxb,EG_ăU"_t$LFQrRC;cSsP6%Ir]lbFxeB'W8g<kI(/bZU)=W?KGJKekeDf;n(SoBMV,t8(2ăU",df^E/qk>J^<RXdkVx:9>\/U\aik,m;rAW$V$v9mkfI4[,m,=x:(bddJp2)F5TsăU"0b(I96Kl$G7,Z//mHF7J3ZX6pI#-AAtAwkLTrpBeB\\]FCAed+[K$soj\$a9.QIăU"ppU^$qMN'x\njs-0:UWMXU.Bzkk_*fX$Q2M'k:-<\pMO$bzMc\olOw><DkD<)C(ăU"AZmYpHm-Nc6U/TO)LCiVU2R2iqzCinavHb?gnn$-5H^C4T#cJU6x[am.SJeXts%ăU"PtT5\g[#pnd'75=ng#X=YEmAkFs;r.Ln-y.##16B%l?r_mk.JLN^JRy-k1Hh)ttăU"HTcDQ=>L/44yE[g.i$4T>zJ(5TRNNkeO,/Uf'(karucA=_^+<%D?/U?2Tl8sCq2ăU"'&ppDsSWo)'D4n%):kLWFj*j7)DTGk*>N=vWGT%%(:8DyZIBh4^8:=*ao7\BDObăU"HsV\/ZSK4[kNTtU;hi7v.X_Nks'dSc+H:s4t\fRd12&9\y,)$N*T$GOfRc*o=Q<ăU"?%r%1X)DzYr6$-5/;+v[p4s.&wqP,(F]ZfoS\mcHv#\&I%cvb_-j5+LBeYJT<L/ăU"*D>w+q6;Z.9%N:W4i?j4>1V6RcFFKaw7kmA$+;_1ckv2Lu+ON;-N4<OZF=iRh]#ăU"k<pSwa1C?;rsC;s2<p,mUNSm'3La7f,i):l:]K#A.+\Zq^8mbl6]x;%GrZrwAwfăU"o0Nrfd>;B*=jJ2*HV23l3\csVUqV\UTqb[FcQQW2TEEBcsK&5:o0]%3d:a2GEC#ăU"+_iQBgadE5e1QM6,gM#'+)BPIzb8qA6mmfV2RR#\#]P/BgaqDLuB%C;Lu*jpnBMăU"=,HURCIkv<OI'0N$1*6gTmNvTk#iX4D7Uy\f[mU'tjiYl\lLYN3X\Np_xIU_v%>ăU"$SJrnIO)st%tgm&(61k,Hs5h%Q#Qd1(7m*CnAZy1WT\wclO%[-:\Fo4C.>%SciNăU"(:\g(2*W[7?gF>)lrEAn#s=TG>GMhK3JY69W)43fd-*'=O]K=/<bITbCdrJ^ts[ăU".)g&z;+Cfy%NR*Y^\AiBo[lI)[]9v]o]lGQ-v[(+&CI^H'vnfdu1qR(gw]Z^7&făU"b=gdHFI$)kp6$3^Qm4Tm(leA(x7dlq46[DKaY:tJ<8YNt-&FR-'aIqXTRlu&VU.ăU"&m%$[mlVS^c%wC]&AK:d-ZqOie?O^ty\C?cb;K1PN5rjgvmNI2<tt3D*=0[TBV?ăU"r1dXjs.CIZb82[KSk1#QgRQL/6QrFLAH[f:9q1Vow4FBb6O+NNWOhKt3k(xk4%băU"[sw-M_I&N#Ci)exmHpM8<lTBDp*cC5'-wI+e8XdXm+dnA)GRX)Gjbm72=2&uK5qăU"U*LMc>I)pF]NLk)';birP]txw16FW;JC8auu+PhN?n#p\6hgWH=RtD6%B3hMP.MăU"wmcC^yG3E0Ch\jNRU%8nAmqy^/sg.:lkgnp=(ohs2vejKDQrXvFp=i5Fb^1s/T)ăU"\d>%jO246SyG>vJ<I&zeSxZL>/XK8k0e&P9%y5V8C#scHO%dZL\[nnZJtFkME)<ăU"59m_.H-Q1#b[EwmLuM+SB32=d)i5dD,Q5ct9Y[XIdpx*If0LrZkpoxT)TjXcf0>ăU"GwL:*UFYK+O?l-DsE:/$)+sAhVNbOmhlKCKp'DUz?c;Y2[?L_zD^\-MN>zV#mM*ăU"dS8Pd-0VF,KUP(t[)unPu\uR,)6X*s%5)[p)D'Z_6=5Z%jycKjuFrl(WA:Ellr5ăU"drS'sjx_fZ<Hc7bvW;rVZ^a+JJ3jT8Ko-kiv__hlSs[8>0tGZhT=Hh'dKUFdVjVăU"jFPCmkWKJl4U$%CX\f:LuEIlFIA:?CNBKsQaD>-HWwg#hj>.xoO#FZ-e%%9\#fIăU"#-),,k\iSwlPkduIdl<>(Naz>-6KrZ<;2Al(q9J#<R>*h8e.w8qLER%-*Yf(o]%ăU"H.PTa?XpZ&*R4W-aL-Ho'EnY^/l70My%Bs]Q6kC^t<Of:[C+PT366$iuL[ARX*qăU";'Ksuh1kki1mr3Bd>a0qY7er>PNBlp#AF0J4m%D;Rx*O#L<W(xeFQ85VY%u=5hKăU"VcHAJ?_='s>,l=1^=%CWZYM0<#z<aIp0OF*P.;i^oQ=swi)PI-[TrGaGt%^#yU,ăU"6V-_e81Ei_4Q(9Dj4DU&+oKF)Ex/+L;hb4YP&HAB0';MaYR_M?G5XFHPTtxebwsăU"Y<PJm(,1jPBNR8Oi$Dw-^cqI()DO[,A7\2&yX&ilWI=wQMMYXR+n<p,SDLm9FJrăU"U#/XwThOq)b??)%ceSW:msCMj*Ui1##434talf1N^WVSwN7*(v<?xPF.S?7Ca\UăU"bmI9G7W]\+%y'p$Vqe4Ja(K9PT?%=g^u9t^cCjQje?i;>6L.23/s3*KK6iUjKFOăU"4v5L.?ir%^l2f,/&32vYxHla2cd]l%AE6eIjvg+,PB&//t&NW(K5NSI>Tf\]honăU"4?s[Z[V(.J_qTq.A$qIlc%w-CB5HAs'N/G)y1XC=\grC6?&^Zsw?(RIuw?5Ika*ăU"gJDZSj')ly]_T<*_1aqc#:9RVL6Os3iMuPsDPmO$I<i',R%(.b0ab]2DCp3t33-ăU"33E?un*\EI:]],vYp,%Ss^TlaD('nF^B08X[3+gnp]B^n,no#f$1fmp:[4a/Z:$ăU"JIu25,+fX7UhlWT]/00sS:?KS.SV?E:vUnoSU)_xQ?vJ6kkon*\aYyR-.Qu8#w3ăU">w&con/:q>O2K.#mkIoXAY8&^WL?4U*PrcLiI6Dv;j;Y>H<H<&&IN>Wto)+msSqăU".L1wubkD(^;f<0X7qrRNlBK?pOy;b2yCEia$Kq_NAVB+]Ch<+=AcSc=fd$VVA(<ăU"CMkUZcZ;_rg7nC'ApVHnofvcbuK:d5AgY*DE:Gh?,u&sj+S2kL;5^UbmufH7UBgăU",+g]n<Ub5RrW<J&-r>/F.^b'RWA>g\.p[7xcV-,OJ91Yq_.M0OjWp2.qz0CVkK$ăU"u];m>8dm$qQIASf*r\yL7.gMnU+XX0Kxh+cHW*f&Rnn1)kini:JD]B=R_o<WC#hăU"GV?J53<>W=,tVM#.N4aq,sILf3.+SagEedH5tEuou<RkN?KS6dV:G&3+2'55qEVăU"j3+$GhTh4'2BNpk1$z>CM]1tPEQ9D#TvW,5wBamBGtFnL$b9-b)gG_mS4Enc&FgăU"*<6vWA#3ODgH[CtoLJSx/p/TBd'YyFOX%xHw>D3u&*#O_F.Jlg>RD:MyaD?s7/BăU"a<^bcMbE_mvB0.#x;e_;jT[3mP+/]^1M$F.0x$da_$uCo)ddpVQd.^k^o<'&b/eăU"Dm$\?ZC=o'i[$sk0a:UGj)qR]tCRHVG4bJ6f;7kLunHPhuagntS^d5unj$33]2găU"4q?Vnn:lV6nJ?N#PX)I\pY_p:rBEsB8H*w]x5+H>-ym'*xQ)zOdstYsl\(3dQ$păU"c\UU.mvU^+BhX*dfFEkHh(TmLbJEiLYbV^0xdr^_2>dC?Wfk&&t^(6D6[.t7vAjăU"OkJP4=gBDmjM[j$ItRHG$'T7nJ-ot*ma7]'9(AzmI4[6Nr&bSwtF2lSt$Wj(_XWăU"e\4RdjFp^xrY#p7&P(iW+K1Ls$L<jC=)9=^H&OG)_nDW769DTBk.mmUE4WAsHxPăU";V:)<I:uwQ7%5^A8UkloQ<6ruUq>r%(:I=k4rP^iCk1*kU]w:r/vN5*Gnk\\J)IăU"DW8e_K<348%aC]lwvNSc4t0bI^xY*G'htg#MT%K)hL3xHEK%U8/KXIxXlaK%893ăU"'rIL-LnMe^9^Et9&.>KIzaX-)?,&VqcLOCT)25Kf68IU:L#t\1WI'QXbTT\jPR?ăU"[9<=.'#2I'o.X$4=-X<bKO(SjAS1>_O]s;hO-'\SNQX;oA<PwS905Wr/SB>?YDsăU"33ZCD4D'C?NT9Z2O;&I_t3(Fm'JV5UGu>r,bt1#.JMv[gpf.Em/A2QEB9:<NWsOăU"dE/NCX2&4rCFqLm67h'pcxIQMhZ6NCRQy3uIZ#5oV($CSc<+ljI_L'A*#\lm+qBăU"36B04?h#2j7S[;:hD&kPTJMb0?N$BW-_IFt94Di9yb_v(*HVf1HokK?>]QG:CaRăU"b,L<LEzsCSJ1<DI1<n_N<i54)BRm3V/gTeA=MkY8#38XXx<9&ogMD^7T)hK&.+#ăU"L=Y,wGRP'=bJ&t5H2'LhTM7,)&t0V4GRRR6IHscTNJp<Z6)rJJkUE_Ufi_Xpb)SăU"zgS<iHI5[<GqZ6%0ze#d#4<:;1uELSskuhs1nJAMKTB=O,m(AMbqKVXB;gVLaX7ăU"$W:y1HB%06\N&Hiet&70?e;:rcT5ETpVk#/':J,2o0,(T2%yhsr1*NQo'Nkd<rMăU";MhJcl_A\zO7X\$%F]N&aC2&dv8=).S[Y0<0g&3ks_=LvrnrAXEP$OU2;6/-*82ăU"QT)[Alc3P8Vq>jE)1128(1n2AFlkRBw]l]n,+Iu)b&tkI\EeIj2=d6:T2>TQ'AxăU",Vp33+^\:Mv:nN^6,x*:rKM^&&l4w10i#lZCI9#LigE*G;>C<hKTFe<y3Lckq>\ăU"fF]k%<Lr6b]vp#_f8EEW.YP)&dSS<XFG:QJb+?f/E(jMm3%l[8qi;/%3Tn2,l=yăU"Da6'69PWAvPvt/AGzoQjI'Ps+];5i5i^#iC=4ltA%?=;kRNB-g+wswi8lEhw^,4ăU"O7J-aw<Qu^37o2Lh;&i>n-MM<(2=[CjZ>I]6s=:pq>3&q?O1xLAKkWRp#UlN3cEăU"x:EF.$4sc0EVuf49'w]7NtN58f0AMS8_r.%up&'%9%9%%%%%%3UcmG%%%%%%%%%ăU"%%%%%%%+%%%%%%%%%&%U%%%%%%%%%gq%fxyT%up&'%9%9%%%%%%2+$mG%%%%%%%ăU"%%%%%%%%%I%%%%%%%%%&%U%%%%I%%%%if%yfTf%siwj&&Tuw%lwrn%slTv%znhpăU"%gfxT%gqfx%yTup%&'9%%9%%%R%%Uc&mG%%%%%%%%%%%%%%%<%%%%%%%%%&%%U%ăU"%%&5%%%%ifyf%Tfsi.wj&T%yjru%Tgqf%xyTu%p&'9%%9%%[%%%U)cmG%%%%%%%ăU"%%%%%%%%)%%%%%%%%%&%%U%%(%j%%%%fxr%Tup&%'9%9%%%%%O%Ucm%G%%%%%%%ăU"%%%%%%%%*%%%%%%%%%&%U[%%%6%%%%r%nxhT%up&'%9%9%%%%%%3UcmG%%%%%%%ăU"%%%%%%%%%*%%%%%%%%%&%U%7%%Y%%%%ij%rtTu%p&'9%%9%%[%%%U)cmG%%%%%%ăU"%%%%%%%%%*%%%%%%%%%&%%U%%%%(&%%%htw%jTup%&'9%%9%%%R%%Uc&mG%%%%%ăU"%%%%%%%%%%,%%%%%%%%%&%%U%%%%K&%%%wjfi%rjTu%p&'9%%9%%#%-%H[rvFRiăU"vZ2Q[,%%p%;%%5%%%%%%%%%&%%E%%%%p&%%%fxr%Tgqf%xylj%ySfx%rup&%'9%ăU"9%%%%-C%El5CGj]_*?1-%+%N=%%%4%%%%%%%%%&%E%%%%v%.%%f%xrTg%fxyu%zăU"ySf%xrup%&'9%%9%%%[-%b.[uF2C:XpP(%%%Q0%%%5%%%%%%%%%&%%E%%%'Y6%%ăU"%fxrT%gqxy#htu(%Sfxr%up&'%9%9%%%%-%,C0uFE1[mS&e)%%%T1%%%5%%%%%%ăU"%%%&%E%7%%^:%%%fx%rTgq%xyux%jySf%xrup%&'9%%9%%%R-%PJIUGb5=p[^(7ăU"%%3/%%%3%%%%%%%%%&%%E%%%&x?%%%fxrT%rfqq%thSf%xrup%&'9%%9%%%.-%2ăU"rRVGig'F*H)%%%)0%%%5%%%%%%%%%&%%E%%%'3C%%%fxrT%gqfx%yhqx%Sfxr%uăU"p&'%9%9%%%%-%1GPmGV5pK+'v-%%%m#%%%5%%%%%%%%%&%E%%%%0H%%%fx%rTgqăU"%xyqn%sjSf%xrup%&'9%%9%%%.-%CyAdG8P77cI)%%%G2%%%5%%%%%%%%%&%%E%ăU"%%%[Q%%%fxrT%gqfx%yusy%Sfxr%up&'%9%9%%%%-%/El5Gej]_?&1-%%'N=%%%ăU"5%%%%%%%%%&%E%%%%YV%%%fx%rTgq%fxyu%zySf%xrup%&'9%%9%%%R-%shSlGMăU"Z8Z'1)%%%H2%%%5%%%%%%%%%&%%E%%%'=^%%%fxrT%gqxy%xhwq%Sfxr%up&'%9ăU"%9%%%%-%&rrvF*?zyW'0'%%'3,%%%6%%%%%%%%%&%E%.%%yc%%%rn%xhTg%qfxyăU"%ljyS%gfxu%p&'9%%9%%%%-%+%kfFB>mNi6#'%%F%)%%6%%%%%%%%%&%%E%%(%_ăU"f%%%rnx%hTgq%fxyu%zySg%fxup%&'9%%9%%%%-%(OR:F(D=eG1,%%%'5%%%6%%ăU"%%%%%%%&%%E%%%'Ih%%%rnxh%Tgqx%yhtu&(Sgf%xup&%'9%9%%%%-.%B?;sFX5ăU"%)Md(%%%B.%%%6%%%%%%%%%&%E[%%%0%p%%r%nxhT%gqxy%uxjy%Sgfx%up&'%9ăU"%9%%%%-%([dHF,PTF<%n)%%'^1%%%6%%%%%%%%%&%E%.%%Jt%%%rn%xhTg%qxyxăU"%uwVS%gfxu%p&'9%%9%%%%-%q&cHFV4Q))D#)%%i%1%%6%%%%%%%%%&%%E%%+%lăU"x%%%rnx%hTgq%xyxu%wWSg%fxup%&'9%%9%%%R-%TKmUGM\4$8I&7%%K'%%%4%%ăU"%%%%%%%&%%E%%%(f'%%%rnxh%Twjf%irjS(y'yu%p&'9%%9%%#%-%%_NmGkRBl,ăU"3#7%%7%h%%6%%%%%%%%%&%%E%%4%a(%%%ijr%tTgi%rtvg%VVSg%fxup%&'9%%9ăU"%%%#-%tN&mG'G*l433%%%9_%%%5%%%%%%%%%&%%E%%%)J;%%%ijrt%TgXi%vgYZăU"%Sgfx%up&'%9%9%%%%-%2*NmG:KL0+'85%%'[c%%%6%%%%%%%%%&%E%R%%0I%%%ăU"ij%rtTg%irtv%gYZS%gfxu%p&'9%%9%%%%-%p_NmGr0e?mL[5%%a%d%%5%%%%%%ăU"%%%&%%E%%1%tZ%%%ijr%tTgX%ivgV%VSgf%xup&%'9%9%%%%-L%0NmpGQH2(r'2ăU"%+%i_%%%6%%%%%%%%%&%E[%%%s&j%%i%jrtT%xirt%vgYZ%Sgfx%up&'%9%9%%%ăU"%-%2UimG_qAFD&=4%%'8d%%%6%%%%%%%%%&%E%I%%Px%%%ij%rtTx%irtv%gVVSăU"%gfxu%p&'9%%9%%%%-%f_NmGRgsYI/[1%%L%V%%6%%%%%%%%%&%%E%%7%C2%%%hăU"tw%jTgh%wjvg%VVSg%fxup%&'9%%9%%%#-%kNnmGi%&b%60.%%eQ%%%6%%%%%%%ăU"%%&%%E%%%+(?%%%htwj%Tghw%jvgY%ZSgf%xup&%'9%9%%%%-O%0k%=F/<l&n,:ăU"%(%y_%%%8%%%%%%%%%&%E%%%%h'J%%w%jfir%jTlj%yuzy%VXSy&'yup%&'9%%9ăU"%%%#-%UN/mG*a8W-;?7%%Fh%%%6%%%%%%%%%&%%E%%%,J_%%%wjfi%rjTw%jfirăU"#jSy'%yup*%+%%%%%H%H(%0-%(%;&&%%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăCLOSE:IF S=192AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew L. Ayers                FIRE AND FLAMES                andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        61   1139     FLAME.BAS   DECLARE SUB SetBurnPalette ()ăDECLARE SUB BurnPrint (x%, y%, text$, iter%)ă'ăSCREEN 13ă'ă' Initialize palleteă'ăCALL SetBurnPaletteă'ăCIRCLE (159, 100), 2, 47ăPAINT (159, 100), 47, 47ă'ăDOă  FOR y% = 98 TO 69 STEP -1ă    FOR x% = 157 TO 161ă      col% = POINT(x% + (INT(RND * 3) - 1), y%) + POINT(x%, y% + 1)ă      col% = (col% \ 2) + INT(RND * 3) - 1ă      '                               ă      IF col% < 0 THENă        col% = 0ă      ELSEă        IF col% > 47 THEN col% = 47ă      END IFă      'ă      PSET (x%, y%), col%ă    NEXTă  NEXTă  'ăLOOPăăSUB SetBurnPaletteă  'ă  ' Original routine by PHOBIAă  'ă  FOR slot% = 0 TO 63ă    'ă    ' Fade from black to redă    'ă    OUT &H3C7, slot% / 4 ' Slots 0-15ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    'ă    ' Fade from red to yellowă    'ă    OUT &H3C7, slot% / 4 + 16 ' Slots 16-31ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    'ă    ' Fade from yellow to whiteă    'ă    OUT &H3C7, slot% / 4 + 32 ' Slots 32-47ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    'ă  NEXTă  'ăEND SUBăăAndrew L. Ayers                EXPLOSIONS W/FLAMES            andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        97   2418     EXPLODE.BAS 'ă' Program    : Explosion Generator by Andrew L. Ayersă'              Palette routine by PHOBIAă' Date       : 03/03/1997ă' Description: This program creates explosions which resemble gasolineă'              or hydrogen style, sorta like nebulas... Can be used toă'              build up a multi frame explosion sprite...ă'ăDECLARE SUB SetExplodePalette ()ăDECLARE SUB Explode (ex%, ey%, rad%, den%, iter%)ă'ăSCREEN 13ă'ă' Initialize palleteă'ăCALL SetExplodePaletteă'ă' Draw some explosionsă'ăCALL Explode(120, 60, 40, 1350, 3)ăCALL Explode(160, 100, 50, 2350, 3)ăCALL Explode(200, 70, 30, 900, 3)ăCALL Explode(220, 150, 45, 1300, 3)ăăSUB Explode (ex%, ey%, rad%, den%, iter%)ă  'ă  ' Calculate palette step rate based on explosion radiusă  'ă  stepr! = 48 / rad%ă  'ă  ' Set up random particles for explosion, with pixel coloră  ' becoming "cooler" with distance...ă  'ă  FOR t% = 0 TO den%ă    th! = RND * 6.28ă    ds% = INT(RND * rad%)ă    px% = ex% + SIN(th!) * ds%ă    py% = ey% + COS(th!) * ds%ă    PSET (px%, py%), 47 - (ds% * stepr!)ă  NEXTă  'ă  ' Loop through onscreen matrix of points, doing an 8x8 smoothingă  ' interpolation pixel filter to blend adjacent pixels together...ă  'ă  FOR t% = 1 TO iter%ă    FOR y% = ey% - rad% TO ey% + rad%ă      FOR x% = ex% - rad% TO ex% + rad%ă        col1% = POINT(x% - 1, y% - 1)ă        col2% = POINT(x%, y% - 1)ă        col3% = POINT(x% + 1, y% - 1)ă        col4% = POINT(x% - 1, y%)ă        col5% = POINT(x% + 1, y%)ă        col6% = POINT(x% - 1, y% + 1)ă        col7% = POINT(x%, y% + 1)ă        col8% = POINT(x% + 1, y% + 1)ă        colm% = POINT(x%, y%)ă        'ă        col% = (col1% + col2% + col3% + col4% + col5% + col6% + col7% + col8% + colm%) \ 9ă        'ă        PSET (x%, y%), col%ă      NEXTă    NEXTă  NEXTă  'ăEND SUBăăSUB SetExplodePaletteă  'ă  ' Original routine by PHOBIAă  'ă  FOR slot% = 0 TO 63ă    'ă    ' Fade from black to redă    'ă    OUT &H3C7, slot% / 4 ' Slots 0-15ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    'ă    ' Fade from red to yellowă    'ă    OUT &H3C7, slot% / 4 + 16 ' Slots 16-31ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    'ă    ' Fade from yellow to whiteă    'ă    OUT &H3C7, slot% / 4 + 32 ' Slots 32-47ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    'ă  NEXTă  'ăEND SUBăăAndrew L. Ayers                FLAMING TEXT                   andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        102  2059     BURNPRNT.BAS'ă' BurnPrint routine By Angelo KEN Pesce 1997ă' Palette routine by PHOBIAă' Additional mods and comments by Andrew L. Ayers 1997ă'ă' You may use those routines as you wishă'ă' Authors may be contacted at:ă'ă'   ken@uniserv.uniplan.ită'   andrewa@indirect.comă'ăDECLARE SUB SetBurnPalette ()ăDECLARE SUB BurnPrint (x%, y%, text$, iter%)ă'ăSCREEN 13ă'ă' Initialize palleteă'ăCALL SetBurnPaletteă'ăCALL BurnPrint(8, 13, "BurnPrint - Press any key", 20)ăăSUB BurnPrint (x%, y%, text$, iter%)ă  'ă  ' Print the text stringă  'ă  COLOR 48: LOCATE y%, x%: PRINT text$ă  'ă  ' Wait for a keypressă  'ă  DO: LOOP WHILE INKEY$ = ""ă  'ă  ' Calculate the text positionă  'ă  length% = LEN(text$)ă  'ă  xstart% = (x% * 8) - 8ă  xend% = ((x% + length%) * 8) - 8ă  ystart% = (y% * 8) - 16ă  yend% = (y% * 8)ă  'ă  ' Loop through calculated text fieldă  'ă  FOR r% = 1 TO iter%ă    FOR y% = ystart% TO yend%ă      FOR x% = xstart% TO xend%ă        'ă        ' Get a random value from -1 to 1ă        'ă        os% = INT(RND * 3)ă        'ă        ' Use as a slot offset to drive burn function, which is a simpleă        ' pixel color interpolation routineă        'ă        col% = (POINT(x% + (os% - 1), y%) + POINT(x%, y% + 1)) \ 2 - os%ă        'ă        ' Keep in rangeă        'ă        IF col% < 0 THEN col% = 0ă        'ă        ' Plot the new coloră        'ă        PSET (x%, y%), col%ă        'ă      NEXTă    NEXTă  NEXTă  'ăEND SUBăăSUB SetBurnPaletteă  'ă  ' Original routine by PHOBIAă  'ă  FOR slot% = 0 TO 63ă    'ă    ' Fade from black to redă    'ă    OUT &H3C7, slot% / 4 ' Slots 0-15ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    'ă    ' Fade from red to yellowă    'ă    OUT &H3C7, slot% / 4 + 16 ' Slots 16-31ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    OUT &H3C9, 0ă    'ă    ' Fade from yellow to whiteă    'ă    OUT &H3C7, slot% / 4 + 32 ' Slots 32-47ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, slot%ă    'ă  NEXTă  'ăEND SUBăăAndrew L. Ayers                PLAID SCREEN                   andrewa@indirect.com           04-30-97 (20:15)       QB, QBasic, PDS        45   880      PLAID.BAS   DIM x%(500), y%(500), dx%(500), dy%(500), c%(500)ă'ăSCREEN 13ă'ăMAXX% = 319ăMAXY% = 199ă'ăFOR t% = 0 TO 500ă  'ă  x%(t%) = INT(RND * MAXX%)ă  y%(t%) = INT(RND * MAXY%)ă  'ă  DO: dx%(t%) = INT(RND * 3) - 1: LOOP UNTIL dx%(t%) <> 0ă  DO: dy%(t%) = INT(RND * 3) - 1: LOOP UNTIL dy%(t%) <> 0ă  'ă  c%(t%) = INT(RND * 256)ă  'ăNEXTă'ăDOă  FOR t% = 0 TO 500ă    'ă    'PSET (x%(t%), y%(t%)), 0ă    'ă    x%(t%) = x%(t%) + dx%(t%)ă    y%(t%) = y%(t%) + dy%(t%)ă    'ă    IF x%(t%) > MAXX% OR x%(t%) < MINX% THEN dx%(t%) = -dx%(t%)ă    IF y%(t%) > MAXY% OR y%(t%) < MINY% THEN dy%(t%) = -dy%(t%)ă    'ă    tick% = tick% + 1ă    'ă    IF tick% > 5 THENă      c%(t%) = c%(t%) + 1: IF c%(t%) > 255 THEN c%(t%) = 0ă      tick% = 0ă    END IFă    'ă    PSET (x%(t%), y%(t%)), c%(t%)ă    'ă  NEXTăLOOP UNTIL INKEY$ <> ""ă'ăSCREEN 0: WIDTH 80: CLSăăăAngelo Ken Pesce               PB ROTATE & SMOOTH EFFECT      ken@uniserv.uniplan.it         05-01-97 (22:01)       PB                     129  2362     ROT.BAS     ' APSOFTWARE 1997ă' POWERBASIC ROTATE+SMOOTH EFFECT TESTăă' ------------------------------------------------------------ă' This is only a test versionă' to do list:ăă' I have to build a new set of points (including mirrored negative points...)ă' I have to use shift left instead of constant mult (*320)ă' I have to make a better smooth effectă' ------------------------------------------------------------ăă$OPTIMIZE SPEEDă$CPU 80386ă$FLOAT PROCEDUREă$LIB ALL OFFăă' ------------------------------------------------------------ă' Some math constantsăpi = 3.1415ăă' Multiplication factorămult = 20ăă' Number of points in dataăpts = 26ăă' Look up tablesăDIM r(pts)ăDIM alpha(pts)ăă' Points x,y arraysăDIM xp(pts)ăDIM yp(pts)ăă' TEST DATA (X,Y)ăDATA 3,1,4,1,1,2,2,2,3,2,4,2,5,2,6,2,1,3,2,3,5,3,6,3,1,4,2,4,3,4,4,4,5,4ădata 6,4,1,5,2,5,5,5,6,5,1,6,2,6,5,6,6,6ă' ------------------------------------------------------------ăăăă' ------------------------------------------------------------ăăFOR i = 1 TO ptsăREAD b, aăxp(i) = a * multăyp(i) = b * multăNEXTăăFOR i = 1 TO ptsăr(i) = SQR((xp(i) ^ 2) + (yp(i) ^ 2))ăNEXTăăFOR i = 1 TO ptsăalpha(i) = ATN(yp(i) / xp(i))ăNEXTă' ------------------------------------------------------------ăăăGOTO maincodeăăă' ------------------------------------------------------------ă' Subroutine: RotatePoints(D,COL)ărotp:ăFOR k = 1 TO ptsăangle = alpha(k) + dăradius = r(k)ăx = INT(radius * SIN(angle))ăy = INT(radius * COS(angle))ăIF x < 0 OR y < 0 THEN GOTO skipdăă' SLOW MULT     --- TO BE REPLACED using shift left...---ăyy=y*320ăPOKE (yy + x), 63ăăpoke ((y-1)*320+x),63ăpoke ((y+1)*320+x),63ăpoke (yy+x+1),63ăpoke (yy+x-1),63ăăskipd:ăNEXTăRETURNăă' Subroutine: Waitkpressăwkp:ăDO: LOOP UNTIL INKEY$ <> ""ăRETURNăă' Subroutine: Flameăflm:ăfor y=0 to 198ăym=y*320ăym2=(y+1)*320ăfor x=0 to 319ăymm=ym+xăcl%=peek(ymm+1)+peek(ymm)ăif cl%=0 then goto skpf else cl%=cl%+peek(ymm-1)+peek(ym2+x)ăshift right cl%,2ăpoke (ym+x),cl%ăskpf:ănextănextăreturnă' ------------------------------------------------------------ăăămaincode:ăă! mov ax,&h13ă! int &h10ăăOUT &H03c8,0ăfor i=0 to 63ăout &h03c9,iăout &h03c9,0ăout &h03c9,0ănextăăDEF SEG = &HA000ădoăFOR d = 0 TO pi*2 STEP .05ăGOSUB rotpăgosub flmăNEXTăloopăENDăAaron Koehl                    SCREEN 13 WIPING ROUTINES      akoehl@ccsinc.com              05-01-97 (22:14)       QB, QBasic, PDS        200  6309     WIPE13.BAS  DECLARE SUB Logo ()ă'                    RELEASED TO PUBLIC DOMAIN 5-1-97ă'                        Scenix Designs Incorporatedă'                      Aaron Koehl - akoehl@ccsinc.comă'-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-ăDECLARE SUB Intro ()ăDECLARE SUB Center (Text$, Res)ăDECLARE SUB Wipe13 (Action$)ăăIntroăFOR Temp = 1 TO 63ă   OUT &H3C8, Tempă   OUT &H3C9, Tempă   OUT &H3C9, 0ă   OUT &H3C9, TempăNEXTăăCOLOR 63: GOSUB DrawStuffăWipe13 "darken": PRINT "Darken": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "vertical": PRINT "Vertical": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "horizontal": PRINT "Horizontal": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "crosswipe": PRINT "Crosswipe": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "interlace": PRINT "Interlace": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "dots": PRINT "Dots": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "junk": PRINT "Junk": A$ = INPUT$(1): GOSUB DrawStuffăWipe13 "hole": PRINT "Hole": A$ = INPUT$(1): GOSUB DrawStuffăCenter "There is definitly more to come here.", 40ăCenter "Stay tuned for future editions!", 40ăA$ = INPUT$(1)ăSCREEN 0: WIDTH 80: PALETTE: CLSăCenter "SCREEN 13 WIPING ROUTINES", 80: COLOR 14ăCenter "RELEASED TO PUBLIC DOMAIN 5-1-97", 80: COLOR 15ăCenter "Scenix Designs Incorporated", 80ăCenter "Aaron Koehl - akoehl@ccsinc.com", 80: PRINTăăENDăDrawStuff:ăFlag = 1ăFOR Temp = 0 TO 200ă   Clr = Clr + Flagă   IF Clr = 0 OR Clr = 63 THEN IF Flag = 1 THEN Flag = -1 ELSE Flag = 1ă   LINE (0, Temp)-STEP(320, 0), ClrăNEXTăA$ = INPUT$(1)ăLOCATE 1, 1ăRETURNăăSUB Center (Text$, Res)ăLOCATE CSRLIN, (Res - LEN(Text$)) \ 2ăPRINT Text$ăEND SUBăăSUB IntroăSCREEN 0: COLOR 10, 0: CLSăPRINT STRING$(7, 13)ăCenter "SCREEN 13 WIPING ROUTINES", 80: COLOR 14ăCenter "RELEASED TO PUBLIC DOMAIN 5-1-97", 80: COLOR 15ăCenter "Scenix Designs Incorporated", 80ăCenter "Aaron Koehl - akoehl@ccsinc.com", 80: PRINTăA$ = INPUT$(1): Logo: CLS : PALETTEăSCREEN 13: CLS : COLOR 14: PRINTăCenter "The Scenix logo appearing earlier", 40ăCenter "in this piece is (C)1997 SDI.", 40: PRINT : COLOR 10ăCenter "These routines are intended for", 40ăCenter "mature audiences. May contain", 40ăCenter "abusive language and/or sexual", 40ăCenter "references. Any and all questions", 40ăCenter "and comments may be submitted to:", 40: COLOR 15: PRINTăCenter "-= Aaron Koehl =-", 40: COLOR 14ăCenter "akoehl@ccsinc.com", 40: COLOR 10: PRINT : PRINT : PRINT : PRINTăCenter "Scenix Designs Incorporated", 40ăA$ = INPUT$(1): SCREEN 0: WIDTH 80: COLOR 15, 0ăCenter "SCREEN 13 (320x200x256) Clear Routines", 80ăCenter "VERSION 1.0", 80: PRINT : PRINTăCOLOR 14: Center "SYNTAX", 80: PRINT : COLOR 10: Center "Wipe13 (Action$)", 80ăCOLOR 13: PRINT : Center "Where LCASE$(Action$) should be one of the following:", 80: PRINTăCOLOR 15: Center "darken", 80: Center "vertical", 80: Center "horizontal", 80ăCenter "crosswipe", 80: Center "interlace", 80: Center "dots", 80ăCenter "junk", 80: Center "hole", 80: PRINT : COLOR 13ăCenter "Stay tuned for future editions and optimizations", 80ăCenter "of these routines.", 80ăCOLOR 15: PRINTăCenter "[PRESS ANY KEY TO VIEW A DEMO OF THESE ROUTINES]", 80ăA$ = INPUT$(1)ăCLS : SCREEN 13ăEND SUBăăSUB Logoă' IMPORTANT NOTE:ă'    The logo contained here in this code isă'    (C)1997 Scenix Designs Inc.ă'       ă'    Questions and comments regarding this pieceă'    may be directed to:ă'           Scenix Designs Incorporatedă'                  Aaron M. Koehlă'                akoehl@ccsinc.comă'              http://www.scenix-inc.comăăSCREEN 13: CLSăăVIEW PRINTăFOR Temp = 1 TO 63ă   OUT &H3C8, Tempă   OUT &H3C9, Tempă   OUT &H3C9, Tempă   OUT &H3C9, 0ăNEXTăăFOR Temp = 0 TO 160ă   Z = Z + Flagă   IF Z = 0 THEN Flag = 1 ELSE IF Z = 63 THEN Flag = -1ă   IF Temp MOD 2 = 0 THEN SOUND Temp + 300, .5ă   CIRCLE (Temp, 100), 100, Ză   CIRCLE (320 - Temp, 100), 100, Ză   FOR Temp2 = 1 TO 700: NEXTăNEXTăăăSOUND 490, 5ăăFOR Temp = 1 TO 54ă   FOR Temp2 = 1 TO 5000: NEXTă   COLOR Temp: LOCATE 2, 5ă   PRINT "(C) MCMXCVII Scenix Designs Inc."ă   LOCATE 24, 15: PRINT "Aaron Koehl"ăNEXTăăA$ = INPUT$(1)ăăGOTO 3ăFOR Temp = 160 TO 0 STEP -1ă   CIRCLE (Temp, 100), 100, 0ă   CIRCLE (320 - Temp, 100), 100, 0ă   FOR Temp2 = 1 TO 700: NEXTăNEXTăă3ăFOR Temp = 63 TO 1 STEP -1ă   PALETTE Temp, 0ă   FOR Temp2 = 1 TO 1700: NEXTăNEXTăEND SUBăăSUB Wipe13 (Action$)ăSELECT CASE LCASE$(Action$)ă   CASE "darken"                 ' Darken "WINDOWS 95" Effectă      FOR Temp = 0 TO 200ă         IF Temp MOD 2 = 0 THENă            LINE (1, Temp)-STEP(320, 0), 0, , &HAAAAă         ELSEă            LINE (0, Temp)-STEP(320, 0), 0, , &HAAAAă         END IFă      NEXTă   CASE "vertical"               ' Vertical slideă      FOR Temp = 0 TO 320ă         LINE (Temp, 0)-(Temp, 200), 0ă         FOR Temp2 = 1 TO 300: NEXTă      NEXTă   CASE "horizontal"             ' Horizontal slideă      FOR Temp = 0 TO 200ă         LINE (0, Temp)-(320, Temp), 0ă         FOR Temp2 = 1 TO 300: NEXTă      NEXTă   CASE "crosswipe"              ' Crossed wipeă      FOR Temp = 0 TO 320ă         LINE (Temp, 0)-(320 - Temp, 200), 0ă         FOR Temp2 = 1 TO 300: NEXTă      NEXTă      FOR Temp = 200 TO 0 STEP -1ă         LINE (0, Temp)-(320, 200 - Temp), 0ă         FOR Temp2 = 1 TO 300: NEXTă      NEXTă   CASE "interlace"ă      FOR Temp2 = 0 TO 5ă         FOR Temp = Temp2 TO 320 STEP 5ă            LINE (Temp, 0)-(Temp, 200), 0ă            FOR Temp3 = 1 TO 100: NEXTă         NEXTă      NEXTă   CASE "dots"ă      FOR Temp = 1 TO 5000ă         LINE (INT(RND * 320), INT(RND * 200))-STEP(5, 5), 0, BFă      NEXTă   CASE "junk"ă      FOR Temp2 = 1 TO 100ă      LINE (INT(RND * 320) + 1, INT(RND * 200) + 1)-(INT(RND * 320) + 1, INT(RND * 200) + 1), 0ă      FOR Temp = 1 TO 200: PSET (INT(RND * 320) + 1, INT(RND * 200) + 1), 0: NEXTă      CIRCLE (INT(RND * 320) + 1, INT(RND * 200) + 1), INT(RND * 150) + 1, 0ă      NEXTă   CASE "hole"ă      Temp2 = 200ă      FOR Temp = 320 TO 0 STEP -1ă         Temp2 = Temp2 - .625ă         LINE (Temp, Temp2)-(320 - Temp, 200 - Temp2), 0, Bă         FOR Timelapse = 1 TO 300: NEXTă      NEXTă     ăEND SELECTăEND SUBăAngelo Ken Pesce               PB SMOOTH ROTATION V2          ken@uniserv.uniplan.it         05-02-97 (00:00)       PB                     193  3530     ROT2.BAS    ' APSOFTWARE 1997ă' POWERBASIC ROTATE+SMOOTH EFFECT TEST v2ăă' ------------------------------------------------------------ă' This is only a test versionă' to do list:ăă' I have to use shift left instead of constant mult (*320)ă' I have to make a better trail effectă' ------------------------------------------------------------ăă$OPTIMIZE SPEEDă$CPU 80386ă$FLOAT NPXă$LIB ALL OFFă$ERROR ALL OFFăăă' ------------------------------------------------------------ă' Some math constantsăpi = 3.1415ăă' Multiplication factorămult = 20ăă' Number of points in dataăpts = (106+7)ăă' Trail lenght ( trf=(63-lenght) )ătrf = 4ăă' Look up tablesăDIM r(pts)ăDIM alpha(pts)ăă' Points x,y arraysăDIM xp(pts)ăDIM yp(pts)ăă' TEST DATA (X,Y)ăă' line 1ăDATA -4,1,-3,1,-2,1,5,1,6,1ă' line 2ăDATA -3,2,-2,2,4,2,5,2,6,2,7,2ă' line 3ăDATA -3,3,-2,3,3,3,4,3,7,3,8,3ă' line 4ăDATA -3,4,-2,4,3,4,4,4,7,4,8,4ă' line 5ăDATA -3,5,-2,5,2,5,3,5,9,5,10,5ă' line 6ăDATA -7,6,-6,6,-5,6,-4,6,-3,6,-2,6,2,6,3,6,4,6,5,6,6,6,7,6,8,6,9,6,10,6ă' line 7ăDATA -8,7,-7,7,-6,7,-5,7,-4,7,-3,7,-2,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7ă' line 8ăDATA -8,8,-7,8,-3,8,-2,8,2,8,3,8,9,8,10,8ă' line 9ăDATA -8,9,-7,9,-3,9,-2,9,2,9,3,9,9,9,10,9ă' line 10ăDATA -8,10,-7,10,-3,10,-2,10,2,10,3,10,9,10,10,10ă' line 11ăDATA -8,11,-7,11,-6,11,-5,11,-4,11,-3,11,-2,11,2,11,3,11,9,11,10,11ă' line 12 (at last...)ăDATA -8,12,-7,12,-6,12,-5,12,-4,12,-3,12,-2,12,2,12,3,12,9,12,10,12ă' latest additionsădata 4,5,4,6,4,8,4,9,4,10,4,11,4,12ă' ------------------------------------------------------------ăăăă' ------------------------------------------------------------ăăFOR i = 1 TO ptsăREAD b, aăxp(i) = a * multăyp(i) = b * multăNEXTăăFOR i = 1 TO ptsăr(i) = SQR((xp(i) ^ 2) + (yp(i) ^ 2))ăNEXTăăFOR i = 1 TO ptsăalpha(i) = ATN(yp(i) / xp(i))ăNEXTă' ------------------------------------------------------------ăăăGOTO maincodeăăă' ------------------------------------------------------------ă' Subroutine: RotatePoints(D,COL)ărotp:ăFOR k = 1 TO ptsăangle = alpha(k) + dăradius = r(k)ăx = INT(radius * SIN(angle))ăy = INT(radius * COS(angle))ăIF x < 0 OR y < 0 THEN GOTO skipdăă' SLOW MULT     --- TO BE REPLACED using shift left...---ăyy = (y * 320) + xăyy1 = ((y - 1) * 320) + xăyy2 = ((y + 1) * 320) + xăPOKE (yy), 63ăăPOKE (yy1), 50ăPOKE (yy2), 50ăPOKE (yy + 1), 50ăPOKE (yy - 1), 50ăPOKE (yy1 - 1), 30ăPOKE (yy1 + 1), 30ăPOKE (yy2 - 1), 30ăPOKE (yy2 + 1), 30ăăskipd:ăNEXTăRETURNăă' Subroutine: Waitkpressăwkp:ăDO: LOOP UNTIL INKEY$ <> ""ăRETURNăă' Subroutine: Smoothăflm:ăFOR y = 0 TO 199ăăym=y*320ăăFOR x = 0 TO 319ăymm = ym + xăcl = PEEK(ymm)ăIF cl > trf THEN cl = cl - trf ELSE cl = 0ăPOKE (ymm), clăNEXTăNEXTăRETURNă' ------------------------------------------------------------ăăămaincode:ăă' Screen mode 13 neededă! mov ax,&h13ă! int &h10ăă' Set up 64 color palette (form 0 to 63, grey background)ăOUT &H3C8, 0ăOUT &H3C9, 40ăOUT &H3C9, 40ăOUT &H3C9, 40ăFOR i = 1 TO 63ăc=40-iăif abs(c)<>c then c=0ăOUT &H3C9, căOUT &H3C9, căOUT &H3C9, abs(i-32)*2ăNEXTăăDEF SEG = &HA000ăăDOăFOR d = 0 TO pi STEP .01ăGOSUB rotpăGOSUB flmăif inkey$<>"" then goto fadeăNEXTăFOR d = pi TO 0 STEP -.01ăGOSUB rotpăGOSUB flmăif inkey$<>"" then goto fadeăNEXTăLOOPăăfade:ătrf=2ăfor i=0 to 3000000ăx=rnd*320ăy=rnd*200ăyy=y*320+xăcc=peek(yy)+1ăif cc>63 then cc=0ăpoke(yy),ccănextăfor i=0 to 32ăgosub flmănextăENDăăăDenny R. VandenBerg            GRAPHICAL USER INTERFACE V1.1  dennyv@juno.com                05-02-97 (22:28)       QB, PDS                261  17189    TGUI.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TGUI.ZIP",4^6:Z&=12628:?STRING$(50,177);ăU"%up()%9%%%%-%gYAMG?x+$tN)%%%%-%%%,%#%%]'%]Sks[yrz6&9Il5%SIXs1+8ăU"lZ\7^^Im(Y/RMjo(PH19T?KBj\3]S/+,uJ3:f;$cd&-5Z*s%A$:1.-K9[#a3k-:ăU"[a+hQJWOV^C&zpMk+rlqiy'wQc0*_tw3rl3_=Dx[zh$U%d2z>:g?>)LKT2-E1Q9ăU"=%7:3e#MJ%UcZbCfm,u_e]EM=gM&FFzutZidu<X6pJ%>2ctw=bpAvwSmE0&<&%<ăU"<ddiOzFcTbn6*q,>4Ik<(0h8/C_,2JW).IvN0Wc99zTNwECCO)lZq.Q0>^3Oy1$ăU"RY#Q-1-o&j^&Xa]TAecoUJ(PDLB_lgE:k%T;,0-91]j^I*&d7IVc4BA/(+KoY_'ăU"/H/Ve\<BKYuc?>k:Tjfdif5SM)pa&q8qU2/MoR1&C-0C6k;2oN#KsFDJ3o7+P%+ăU"\4l,JAF$I])cT-S^a#C;vymFeN*LV]^I<3ug)%I&J)eAnZ'Bq5A2'UQoxMif5uKăU"eXCxijRa87oqK,,Rh;9Zr5JXJ4T6VGgOCTXD3<MEJ<opeEqk.SDTl52MZ_n.h5RăU"$<C(QTTR-5CVqY[$Jcf/Y^i,[^^\(&itFDK7?7LCFjDLhD;iSuQQndkaChODec4ăU"WS6vE^VtaxP]1mxb^Uo99VD;L*=Jx;8W*%jZ4IUYlhInN[i;Mr+aT(p[(GQGmX?ăU"8I+E^])U[FW0n.Z_hamoZsE#CAebe^CdUycshB[*ED-W*^s_yS*#khL]5=Q-_'<ăU")em%em/O5\r1=H]l]$'=e;D&^CeK[?LY:iI_NNoL=8jZQUK/03wP5:GzANHe],jăU"uPVuxV2xc*N;v_G+D_OO'LcsCxI5rO&CX2O[<Xt5BcpXf>6nLgT(v7uknb/S/RwăU"zT1Qx,8U<l0ETTN7pz9=Vd*9^r1yYf*hUEV_B$YQC=DeyCt((1IHbfpn_vYkiJ&ăU"Y**%SLGKuz;L-HW2[V7=crw[^tPl*Th;E.sV8>,HhE:0Vu/x/f+?_)U:Xxhp^%tăU":>jjv?UGN'%A->rH\2duDSa%brGEok]-^)Xhe+$=/uSNwX2)lPPect1'irFjq5]ăU"vPcx]u?Dj1g,IX5nF5$-uF5EmUDn4,[nHfFmkSrTT4iZ4^Zs.9a7wV$dT=?mXVcăU"2d6M^dgnJk[tGFq(9^Nh_8dvwA?fjv^H&,C4cO\_dT>MH5brvUs%pNUSur\n\OTăU"jkuTnF[W+VWVT]/#7jUr^mkBaUv+YQju#;.Cep\Ah(?[W2EBUYO%v<rZd>TF(H.ăU"r[wXc#]dYOa$]_Bd3,_qI?,?\YKGl6G?GAmhzb#7Qa3qzhh=8u#c]_I2hS^DF<QăU"-wEaT,hTHWv*LqhsjK%EHNXTtC.d;8D/PIxMDPu]^b;><E<CN<]z'Ydup%()9%%ăU"%%-%.hYMG3]XzF%o*%%%%5%%%*%%%%rSks1y<&t&ZHj92>at23Q5R,7NmAQIWDoăU"07JYQ1UWGIj9$b.XiIB8O*?TZmmxbd:(4oM3^-maq+25QYD58aSiE<8As5?D]%GăU"7aQnB-V7lsxy[t>+eul_6IxQcNzYqFOqmZ>oPzg<&v*Z]-4)G>4R\8dkS&&7q9LăU"qo1Jq+nPbF.V72SgysI#$*,Q/9[\ZW#bbr2gH.+6VKH._ikV>6+ha'e8T*o$#J)ăU"cQp4QZTPR:/M)nB_Gtbbm6tF8up\;]21P>+u#X<L.+Y_]lQ3K1mLG16dk/muIWOăU"BsQ^2qq\%J<6\Goo'i8QmxUpPkF5kss<rFt9te<88Up5sM9+#?F.Acg(bzX/ddmăU"w?T.:eI##T4_&UgsPM3+IL3]0VNK2+<1o48jdrN\F&M^E'nmQH\Z#b#e[ar$wb$ăU"r8S=Ylb=EIY*HkbpVJ*f?a9]sjzFtzc3'C08cKGSF*319A[-3Xm_1(']&./Di,AăU"Mv%WIH0jD$,0cobqd^PdBr&.bcckw?A&([>CyKCX/3*1J0p('5sK&_*m4us:jIGăU"eDA4>)Qo0z.#kAANHS+MWQaZ;XO'w0Q<PSsM0)T]8;q+uD,[ng7q=CCW9VOZ1aPăU"]XnObB^DGlHnI6]WyJocX:d:^FG6x5-ibio[iDdXhr6eV:maI^%%_X-Sj<8l4wPăU";66M.[Z4TT,?,%tG%dLC[4oO:[pEcv4^\jz&Bf<O-3bnmX'-KcFbL6NukmB>(ovăU"furqS<)E90xj7nktf]%,fLO[c%95#p2t2C7v0ZphVCqai8I+-x[uhs9ak+r[*UdăU"X.2'&L5Z#bcB=49%Lg-,'G:u;Zjc2v?cTk7MheqK.0JVohcq4.dAoG,+xkNiM)oăU"M&HodwCl1/N'nj$;n:Yke==,HI%5;xTabAs*i[4Y%->O_+jM#K5N\?0]j8x8.6păU"25Ol:3_td-YL-UZMkSxYV.x1tZPVoZMA,WS<xX-,.c.ecr97tUd3'A$\_EiHjDJăU"kr_1nla#H+4J#%mJ/m(m79M.#4Z'&vS=efw%5LEp:IRC4$W&>sVrt2o%JM&Jg1XăU"JeA9gBUDS;b_?[;U<ONEKP?7QcBjX&E51Zj&#.0XY.-QkNapn,S(.LdzNcO,BhNăU"$Ehc'gLb*vt0cFoh**bd?.MUt(ietK^A4n+SR1G)_:MuqsfF8xPr7UbuS#$jb%făU"TWaD1N%tICvPow>0[bVog$^0gC1MAm6(3oP63&*)ag\kdZkSyg$$M.qdVc2(3\NăU"$Nlvd>AVN-pX+l2UvzD\N6OUCCiDm3Pn4rkbF[.\;[CHXWgYjt$v\vlYvUxkLpxăU"vahwDp7,ywj97;hwin;cruQUN8rlL6;/USVJO,v%lU3]OM9FVtC&U8T^H+nn6,8ăU"\psQcTFm?P2d4WM^%IP+Q(,dInXVJdn18_;$,bt=d%8u9nb-$7-Tn2DIeaYDkfCăU"H?c4xt\KGpd-z_:E]z7A3O:JK4C4PaX#3Wl4(lu<fQ^GaN9,65lU_h7pA.vrU/]ăU"h\L]Q<,8&'sa?J8Z1M6nw0[3H2'YvCUFc^'&]'aP(hb$ALFcLXhmgCOH?V=:lq5ăU"6LuZ'l3Ck);qBD_>4NYdk]0o<ELx9WOjTtipo'6]7Pc3(9C'tnvbE#q?1VwTabIăU"y>^vngH^<C&SKoc>UQ0;>j^BV\[V^)C^D[vd<vMoX3tgH=\HS37oW=Wh0r4Qf<lăU"(wm1C4Md=>FuL>WHgD=oFPt+,x&u%p()9%%%%-#%hYMdGajV+_%*%%%%5%%%*%%ăU"%%ySkIsyD&*H:#lC9-Gr4-3$jL44wSVcRxOa*<Gi7G>Lpn>b$-Uy4SRD9Z?Qt7=ăU"1b\nuM>$mkhH-6m75^>',+(mce60%u,1*OtuveRPWIZoFHlO>.n;?DX7\Y>_vg=ăU"\,W3qqb$D:<fHT7tGBn_MhRl1JXc+'G&Ig\YHu*b7mIH;noA52j+wm3nk2n9bwuăU"L,u=LLm]O]m?k^Dp=O^t4CDps^*K3IQ%5oNf/w^c;pPMn6CotW+R4]&pB?,DMQiăU"w&NhN)<sMK=c$CM^mU3=OGU%A6W?^31V72+<E-KbYz4r::fJT/2Q]oSZg6C%K0HăU"Np(e4R<lnI5lL%Uekte$%lrD*<PT#)t/R\_3/UL+UK&xzcr1pTkKd&-N*)?$A.)ăU"wio[hH:(&3-D,gJKiVU%=cV_wAfm(IYB3iGV]Q.]VV+^ldt$>2i+uR)J%e6>$jlăU"un6e>riD\1WM\5=lfwz)AII]-=>Y,(YW&fhOGIYBDT(KDtVF(*Q,Gfs$D0eU7&căU"8PNCJMj*NQ#QjjgBJ%pCiiVxIkm#vX$<ic5y++\b>99ajvnvyKna,n7[Pz>L(QsăU"T)\6$pUa';.am_aCM#Fx_#GgB7HXr%6YBi[8(d*Dd#3mpS#,T.fq_,.O/^<x$YGăU"<'sun,'EbZ>Nli1(/GVp0_(8bO_9v.fXuy]=\BuDPiE&YN#2U-+lirgR>/r9pamăU"<hu;Z\*SiDwl[wO\1]#+tXZ*8+-*Sq%#,<:pAqcyrQOqPz(nimv*DSi4)rB.hWaăU";oM632Jjro(9$rnuj5:Ud5K':DbWRTKv2s3^j1c4g#Rk#>;I:h;N\MYeJwO_DldăU"?7UC.zK5>VO+hHxAT\M;gtiU)PZ3Xl(r6m&>'k'26k_j#uL]wpYH8#0/i]:[=u_ăU"#K*k,]A<c2H$60O^lclLjlX+#rzJkouV]>OoNY7$\?t<O)Wa11Q7:3aI6R?,#npăU"8+*etH+4#l4TWI1*x0Do&NwCwoItKRKstd^=[+\4W1Tq9nJ%D7so*C8AaL#,X'$ăU"%+;I,iqZD(._Pf9o(XwwNS;JpJu-:3:4n%&v/(JV'M0O(J&NK3?-.XBN[q_H[T;ăU"&;bOElCU/_Nzk4'O&57)pt2cDlJ+93fMaIt*HVHpc)jl*F)dq><_L,bD4c;ZI[%ăU"ka1W-<kU&.ML4j^f&vzTUQ8BpLHfA2F$rGXx=qXY=NlMUX'Ed_]*)H5h_R)=v,YăU"^\$=Gley^;:Lchnl]KTbiH6KN4.>6:>IZ6$s5a5hUy4L6>d>cemL59Lt5oqtHm>ăU"6dP>mStGGZeG2n1=lEwf]m6NsKT_,sHtNb:^d-<rsRk<1%>tFTru2#%c2w7M>e*ăU"8=Rz2P8sK2,rhA2N<<j9el;>:g[Z?DcCHn[dIK14(jiu'MMdO]muBI6_=ExOZT?ăU"vR%DX;_s0o6Cors1XOet^p6ptbrtVc#o,vF4O[*#PCn;Q]0)QrF,vFjkB,A$J]AăU"1636zL$O<3enJ[ensGM+ma6CBvQUNF1Yk4\<Wf%DXOlP)NZ0T.5U(=BBc\oOXX/ăU"Uj%/K/Lbt-C^cdA^71<o,xGU#,D.HiH?.EqzbAu?h%#T&LHU*+f$UY%E*A?)h9BăU"OLp?iMuZBLgDId7)qCW85J)DlB^2pz;b*o+ri$3h[gp0[HjhP<*h1Z(71Yh&.cdăU"J;u#;=RXT[wqOTl?+56>\C.sgi<BphkPOB5'A-s)&L[q,#vHIls09uxFC$e\K8iăU"V]]8t$w9fGg)<[;u&5U:w9U,>A$?Q8.TM$a)4d,0'lY<g2EvOW5)(rS,=wRu*U5ăU"8?,\1]Y$Zc6'5>$T4P>RG8(4Q#lEeb:t2:$p30?i<,i<9*qn<E*=i9tT'u0up%(ăU")9%%%%-%.hYMGukoDa%i*%%%%5%%%*%%%%xSks1yD&t&:A\9^DiUnt0RG:#)vT:ăU"R8qBp)VTg=-aYZcp9Id:(D/sh.3G,mG#pU[#ndgo1uNOA'sF/(A:i4ZYlL+/_2AăU"MVIpUUilY<qb,bmIbq8bX[?nuonRtthnFYB+YkrPz0Y6(H]F/]rFYE.c%42kSpnăU"T_He8[Q(.6Fl;Fj<i*fYtkQB^*%9ECaD?zNR;4mrEaNJdvzGruee(8*G5MD-o8CăU"r$$ONS\&zz:F??u2u?/00$,;YRsXuYb9:x9\aTx^=L&>]nVX6#>6IYAWN&jummsăU"o<LQwio8p3UvM$Tn(e[;P(qt>]FvcvvTT(/i3llLdZNkzhV6J8go+*/xt7W'/u6ăU"pe+3NVble<p^4RaB-$Bp?m4c[PX).D9NcZ1b1Q6WqD\nx(Kg&a4=w:Z44]kp5=wăU"[Rk(6GpW'Mk3:v6SGY#WT1>r6k,YPr9H_MA2jd_VK9:kP7CU#8)m6ZiofAUzj&1ăU"yPX2cT)dIfTInQ=<?pVNQfPPtV&_.U51*OFTEte&r,ulFRK9[UN*bH2$uxBBX#9ăU"K:Sd>=lb/<Pgi-c9bTPT.p_T=&S.82Iq=/7H^D<^RgUAk(S\P::e8gEhCBojI5_ăU"0N%VZbn>O%P<<]d<G?/d:UPZT.v:;*>&+:;7kU7<?l,*+NZeak5JlpTS)l3N+xZăU"noAVH[ucYblYc,EqfFhX9XR$]u7.9n6=&c_\mM<x)Mc\<,mP'vltvX.904^D;>9ăU"\vpHV^UZu/EJjc7\.>frvu-vc6A5iT9;s_X]&',tMFi$e&3hnHL+1,pU--Tv:H4ăU")svb+Qpk>-Tcb[7.um5F*/#]JY\pJ^g=0HArs#dtSG8Sm*[w?g*<:pU,xS7nHh]ăU"K3DZyQBho*nMn5KiTOy8?9RBqX+rN7?p_4MK\_'SwDHcTOg4ZTCa%#(v4S=DIG.ăU"49?3ot%sWk&F>dL(25k=?r.t]#9B>RqT9Qi$41=W9T(3;kUnXuxaebpC<\WXV&eăU"UJKn8H4o3jf9hi;?P=bp+s'8'Ad7uBpn+Heq^XghYPv)C#5t+l+]A4=7t^-#9CzăU"p4u#tuB3NI)DKF<t^k?&^ClZUtTFzlN&T\.$+rh%Sq(PJM,Z#C).kxq.fSkS(-%ăU"?WS/owX($Tlp8Ng?.<(l$?-H<NGctmJ4k<Wr*#j=lvBnnLc:BIY(B68G+_A]C0/ăU"%Y)4wpT'hgSFYvp+j/jtB&nBzPTCdDXJ\TX^6[MnKNwMLD7S,oe;=$s'f_?=MCqăU"3yKtaMt=6#Pm>L.PCth7]6aP+e*up$o\rhZ)*E]A:+jekTfu*2&,)kMK^8b4ZLrăU"jbrbwc6rVu?)HYF/34e<SWZwFmRLYjuqnSC>2Yemj3U%,ovJ1F,PwIie7T24lZfăU"^J*dqcOQ[j$^34GM]_IF\kT#])N#aC,zR&4],V?LN>s*ju9UdM5j;^A-SPa<W'>ăU"N58G9=]QTfeTgh6pdE9?FX)LEGvIS-NPjE:;:Uj'qOgaX4hq?jb8H^ucluhSBMJăU"::xRIO3jQ4l^d9c9qTU89oS9IKEYIQKTxa6*m'Kww9'v<B[+$+n=2-,PkOd&/abăU"la:El8+wuoX'imc-pR((LnG9v?_$0oM<SQ(w:?E*3%FUL'3Cl$,:)Z'49>o'BrPăU"^0zvVSnzP:fu0Z3mx$WXNRXQv;jzXdpM:avA,ZnNaGd8k\BTPw=,86ToM#EkjLtăU"M4Xy*YM$]C3ou&bUSaEr9w%,up(%)9%%%%-%g(YMG9[6<I/%*%%%%5%%*%%%%h%ăU"SksyDD&tZBTk9&E\q?yAIr405wF=MBt&)P4EAC<6oO*dhQwRoPq/uPe\F1/<bx$ăU"gLpfmB3aV'5)wWAyBhR=;mqp:7MTtV3XN:LHQhF[56-b>8np\hFGjpt>hmR*YsLăU"H/H^Tmb4+]Zi0>H*UoB2:i6[wf-G.>(aV3GT?<iMZaB.=<P;puK.>CQo-6om/C]ăU"3/yyR'7naV[$^^B61^&<2fff<Yd_hL9i6\>FeT,>\[.k#j,v7iY08Xn0Vq$A?+jăU"VtrgMuf^d.3o.HY6NQ1]1xu>Lb%15qgr%xWMABeD.#B-d-\B&gWSL9/C5PoWON'ăU"7)aBU&OW^l\R975Lu?d2Y5<y&F%tDVwb'MnUC-h/CCHIm,vXc+??x^)\ViY*RvfăU"<;VhE3,*jIN./_kQ(NYI>uWS]])UrN9to%r:l\$H7cDn(<pNeD>^g[kDDtOB60dăU"G1QY]L(fDB_tcV+A/)IZrBUQs\Jm%c9KU&u7)t=2>J:7I^HAj8NQBW/:2rh(Eh1ăU"+2l#kM3.)eh3.,Ht.7UM2Dmoy%WX.5^y-zN#0H;vm:OVNj6\0(iPzwwr?2Gl358ăU"399fH8QlD0jC3kH%(o&em''O+M=]v>a%4aAmCopK37k\^]<eikNB0/Y5v<QBV\IăU"6M$TUgtd^QB(wyUPwYHS(;sB7byNRT9/-F8qEYVrRhvC?>KsXT*e7kksbr[1viuăU"8?bLbrH4x/K9u1a?Q)<6\-uo(e*vJFfZ*J7<Ye$,(q$6R];>o(x%(_4?2XAvWZoăU"Pn5ZlsnIgbn:v(=.LD,73%*KPSNH%J]iyllNHRm#B(+:9_x/BdhSLGJd;7ITBt)ăU"Mc=^wI#ExN>w3D8\TaLtLuij=kOnudr.uq#L;G-(>y]\lp81#[e$*vhg^zQx#&)ăU"Q5<v*da^aQ3p=5Wxy;PpmtiOU.Mmu&]XFe^k_K8t*Mf6XKN8mz_x:#.9x/a<p7FăU"&v*DfM\u1d8Lmc,R>X%HIkfM_ax7AjXENK8x<9kM&Op&r'M+HT_,)mngG1oTf0păU"WrxG[RQ(un]4h6N=*#>VBO4?U.5F[PyQWo+y1%8*?DeOOO$GM6*28/Is-%ld%CtăU"vxGC3CXC)=^EEm3nZ_o,zI>C5iCx?l7$UUQo:Jiozb6hKyIk9c('fqf%V?,r#OQăU",m5xdjvApxYIsZKqf%fDr$zlUKs%J+a?]B3Y)sv[RBC[QVt2ToXKoKGtDxwr>1*ăU"q+WW^8QfTsyd*d^PBO$8MAYnOo)j?uB\:.K(cZcSFFq,jV-l8^il*Y1w\rg1*=8ăU"$LBDbtM(xelx#J.YICfTUMDjYjkp59VYQE[+HkLPa;1Y<rDl(B-#tl_NJcIH'vuăU"-6GptmNL?xnRJ6H^m'Xrb\HEMUr4[:VP3s#/sSJ9:7S1n]L;sNxN(.<g'x?k,URăU"lFN[ck>Mi#7YJ\*k4k0>GNU=WSYBuOYvtbpx<us9u_wlxjBx,^6#\T0m6qPV>\lăU"+?.hcWVdXStpVZ<??<\PnHbXb)TlXP)8J'<UBJRPsTH3lJbXqal5TAUtHDe8pJMăU"Y>u\MpcmYrHVu\GLM5bQEKI_.BOZ8xM\mt$xQrv)W3Z$j,]Q8KI;[;WD$-78,smăU")&&8W?pGMtz(.#UTo9Vt\0e9k)%#V$:-,V_LWLIUHin2nJ^'Y<l-Z\4MbIe1)l7ăU"5Ov:S8<$2m;onZo$&^;Tw.?fRL&z[]A&Me%)P:$.(5D_0Z[8BcX+G&sP+_sfhWTăU"0gS]>AKsIrvMvBgD=l6MB9mj?4f8Sh\jB4Wx;wEjv1xc=r>u]LYsKB)mr;mU?r.ăU"b=)uFl.f#;GlXzbc-0WnW<Fx%n#<EDbJ6$ZftvNjc>mCn+W9PP:\Ljptk7iC\vEăU")h*=Nup%()9%(%O-%0$NqGgK.*x%<:%%*3/%%%-%%%%ylzn%SgfxKfa:BZ[?+nRăU"h:xpHP.3_K>QWVQf&GBO1A:9+Vq'c*BM9E+#CE6pIQn^-wo$b+TFmH,;hKL4^2(ăU"Tu/MLVZL(bh)8\MeZPn5wj59v4XCu_=;Rthff&wR[$Ml^4i9T?Z2=,'+EYGc-RpăU"QHn-sl-'q6.C$F/Yd%.O)hE>axd-<gfTEMs;JT3X+'$PB0QGFbQ$-:FSILf)l&+ăU"TnbOM'bje>d8YY.M?&jnP/,AlZ9&9A+swGG9[s)$^G3%6H:=C\*g=L&[)ciwe]UăU"^CW).'%O:i+Fh]kQI<RUidu4^e*9f)D>A83<wjEkI8MQ.vd).&x-U-G/w:et;cRăU"byDJs9p5h.j==cr5N8XKhP:6r_SGWYxqTV-px$l8Zgu4S$Ne.gOmSwee)2Drf,4ăU"XKdeFG,BR#e<J(&u+qQ$6Z.nBPYNQw4eG,lD%&)sit<*Xsnp0D)p1PdFKB*)RUYăU";ZM9dS6^LZwsiirjWYmyYYUj,#ZI.54[JVIVT>[>5?g2-;j^sC182dCv?^iK]tJăU"Y+;r-mWM#aV:62Q'.0j?s9][WqD&iYNtB?ufwSsV/c]jCr%KxJ%JrF]?i)RSJXUăU"*QH.mU/m.YiPu'hj)nz5J$CmV[+4FGC>-;?.hbFd&LI.(kD\V6;4O?<xV.V[va;ăU"$Kp)-p7<+7),R8+_5JG)$jRH/1+.lHYhboE[0D+E;1uq:mBSu&K_SlZ#^ILO/XeăU"6r#4]nqeIrwkhox*MLyqC_h8u26NWX'1-kJ<SdPko2u'&1JZ3s\Tdc['Yn<UFI(ăU"Awk5Ah>DMXq*'o4q#/6]6)cE3+#g0gg']57ExX)JKEOC8%XN$^>P)\.idZI]l-BăU"WC2b<5EKBf+*ul-NpMTA]b6c8B2M&\_t?#*Cv[nXhx-075-h50/3[KIpb/+SPbwăU"J4eyi^WoEV2i0eh,kY,2o$GdeAjYd)[8<b00Q[)MtaeJ&FgrKjttC%50FTo]nnJăU"7l*6-7m^C4GJ=u5JCk?k]i*,j%_0UeDh62C/aHilWP/fm_Ch=,tJ0z.3Hq.d]e$ăU",\55Eki1Ck9tSS;:+4JP)0xC5itVIj;(%eC#r0j&xW)DO1;KMoUY/T4V/cu+S';ăU"9kydz[;1_zF4Ag6BUEkiq(%]jD\uAK^l6GY-C;.U:Tp=AcDL%_)hAXuJMTnd83TăU"eK3N32EvN^i+0KPkUi00K=]V1gn>/Z%%]9E%GD[=\/kST9]H?hqa&)jU.$puO1:ăU"#q6RXTY.vmet:;-YTAN8SLi($satorTw.8FxFA9rHqfGFN#6gCl6o^uA>tAoa2UăU"fyhjuDHoHf6fFqOXkIR-5WETQ5;.bfd\+>a)ZaT[1K8Us1h?oPD(:vfen\\,U42ăU"9O\GRjF9)rrN5Zp1OuOWK*0H&OqEjgjWc=Ih$mU(altGkcSPVhT2g>bOtDso^b7ăU"U>Rfo%Y,Vc0bO#tOppOH#J?Z(26n0%\h]ExUGDUlc;0T<gJaZrU=8BeoTh8KW7kăU"0PL)cZ4JMF</BSu>O06fqvNP.mdeZP;843Q=5eW2G[(.Mp<eWO;LODV5[UVn<-#ăU"D=]I_m<;vxi._*#FnKBCt*qrR&L-%Ol\4/)<aF>n+nr-uGV&7aArnI\oaLWzpl?ăU"NIJ?k54<Ye>VhiW-$HD;URj)e=SNbTT(1OE,y'9]XrK]2iO:rm&CUV&+2,8U/c1ăU",upWR&f;PkX1To$%2F?)HD?Xc,+^,l:d5Qk2?8#g*l]Wh2c]wyUCTe4ZO:rSigUăU"b41,AT3Wo0)eCn(*'CtK+VZrv/AT#9*d<cvVKI#yFuJ.U>L6d/;_IeMxxIKb)&găU"9wbGHC&jX?o>xB$LK.=<:=>uUqnJSq>P_^Mp.'2W=h1Ie)wm+-Mr\M^<r+?,Hu9ăU"be$H0?ICU#RpQLK4f*?[SY=YIU.Dl)/1)8_'1\8s4k:^eUz('O'yfZ'5'O<3*+eăU"Q5Xlu2h7<E.L&9qs8^W.P5Zec/av:+rf16MUK=pfZH_cI.Iez$SKb:B$Ar91+:9ăU"UGJI*CAh[]7R[TO/dWy18(i\sBVzoKD[Rh:\DpcVIex$1/FQ[o(h8/;pQfGS+53ăU"-V&Sj=$ha-gx1>EP+dO;Di?jah&lE2*'gc9JRVXX;W(-+N^SsWqC6JAyUrVoAhTăU"IlQ]WRKJ1WE$gG>IR.=4isBCoDCuv(R.OJmAs0Zy)IQOYHKEYiLkQ552s(:YTF)ăU"F)iI?*NFU4MB;5\UOC^e5&E%5cv:s$NW?-c$OHeX-:&k/=s,=&k:$WRj956mQYDăU"XX2B:X^Aw5T_c0)wl[:P/=O%E.y%H;=02p1g8In$97k2DOrSzs(IFBHEpDfM=?săU"oQJuAPj?#cJ&Ueyvrg([0:9_A5L_cthd0]$uLQxlqSWJ.:&yUj^s:E.,pygIgWSăU",&KuqRX'B_loB#wPp7BNuE+(PXy\MX)fqQ?Gxj+j&#i]&LjVq:qOLGqOxqHOL37ăU"/gi<m.v:p?)5(#+J(#V4M<s4<2s3<mb(d'MXYBS[54.i/fII:LpE:l)u%F-%<FcăU"%r^Nz).:q2*:P^>'O_e#Q/:12*:kZSEVa2qC1=tDimn8tCSRo2;%d_+)?4fQY,qăU"pcYMksN8%7zh>9$+MvkR)&,4SVG\8,)exF/EpPIB>cZYeL?ZFC<#1M857vQ+;6zăU"zSOgmP)Nsex2antJ#dpnMqeeuEOMr(Uc]$KBrH2BH&y/umqMRtw(HtFJiuH)qrlăU"ci$Y8ZH\3;n6-).z?L_ty98-'EozHl)jG,9UGusMtl;%.0&Pr9IGScvbm>go8]9ăU"*M;z:N3nyoH])kgk8;aYgkax)do/7JecJp_fB$m6Hdj)&3Lv>25m/bWqR^<V85>ăU"$[\;o##pYdPKE?XLBLr)b#;95\MQ,5UzU?Vf6Ba_:&&-llVAOS9^H_4Z_G^Mn(JăU"_0JmO[rRRAQMaVP'/EQ[5-g)Pk'+-b6]z>)4OjzR8lgZpkk$MP%bbur*(]l_exvăU"1$A%83VY_mX+k%tlJ9xA8tq/>7by+R7.wMzzZDmLycL.Mrq4$HJQHg9UYtWIV:.ăU"L;zUh0^-Uhh&7i.ZCTOB_BqcM;<-%1(#0f6P_=1dMSO=q'f&T)*17uA$s<9ZRU2ăU"+K6cP_N+e$YIm/72le/],Y0g<ECEQn+H%x8KRn\DZI/f*pygOL;%]p]hm<,P>R[ăU"%iGId2;IM7<zMtb1znMsP[ntWECQI71*[ggLAD.'Odl.:K'r,?/t;2-<EoP05g$ăU"TRG<l>^L,GdHb(^-N_G0$GI:;$z7eX:NCK&=k#^]H8YcEN?)lcdD6;?bg'tmMB5ăU"41AFY\?6gTGL<a1d)p%OVIO4$yXm;^qru5PXbz-yC.W5Ud4--FmKr39c[:&8r98ăU"L;S:bF311(3)i[KLu01s*6JWqTmDjg(T.dj&b+1Ol[LNo<#Ui)9XRf+1aVVZ7ScăU"%+p^/ZV9w4Lg?t<%NRXB)>s;n,;'73PN/'z$1i0CQ*Ikt[8S\8FR,?fS]o^Y4vrăU"<?#:^u%JWO>X#5nyZi4VrCA*(OfLz$bo6)+*o#DSIf,(:PUr=.)^VZTEM6*q4>VăU"/k9q#rZ:Zhj5keh%9$)=4:>_dE#o0h2J19_]tx5P:m<5V<,j;O&3*6mtDX-)8$wăU"9VpY,)ub8DjnYOP+2G)kZ1w9?3Q+hA+);LcYd9yt<Q',LSCt*LQ&*aouYkNN-D2ăU"0Z&:LqJo+i%1DL>\#N;LyU(YE1mQT^Av4+>3yHgq)f,A\HRj1o$lxJtrtgFW4XpăU"eR1:S_1huMu10M1>&3G3iv>JU6ok$v75k<c6]9_\e4ks\b(KckCK\L[anFTEYg?ăU",S](MdZmJ*hdjl<Z+M3E;MEN'UTAdNhu>riTl)T[gpH^%2\+<>]3LMbu#0SqUa2ăU"ro:aL>$C4>v=<p8UWn^frx5ZS^44-%eS,;*hJsDOaYIr2B<Fc;2pvZrcv1Y8yJBăU"N0DQV^D4A^cSx3DR28rFj4rHa'Z04SR0Ece^Y%q=R1PChioYHi>Q2CxMAOxbj;băU"d_I)4yps_DRqXEJvs8/D]mOp)fd.Nc3#I96_U/Ay_nh-=s:bSEEpvYmkdJ/okdcăEND SUBăSUB V2ăU"GGYp#9<Ka*m,JwR4%v]#to(RA:I+_co36gGpdO+4]g2cT>.WKgR099-5>;W;RpCăU">(tXbgwlWVQ$#_FQEDZnw;Nhn^Se[%w66M^<)S[T4,C30s9&*7Q_eIr3UZSo$1_ăU"ji6T;#pk276xaQ<-_:,<8SqwGSEZE.YUS1%0ZK1_DyNCBww6eqYO1Q*<:ZQnwY5ăU"$n]EZn3vAT*N(z$<t.nsuj.uLcAGhRn=#WS(P_]O=^>,33B<#ic?%Q*:YQW#G(?ăU"-:j^pXKU:cWk8GF%1$5Kgbbq$KCY_dh=r/+#V/-rns%fIU#;QfmV2S*7k-dSi$dăU"YB(X^/tkz9)uGn)\ckfgV[n)gQ)+Mu%2XdSZPJ:G\mRcG\5MkAf>T.qGupXA+>FăU"V10Tadnc?oKR1tAHqo:,S>Rwj'k3=)Y%4KPSeXAcJThNe;CC<L?X'>VQfd7([s[ăU"Lny9f]_BH\6epmgLXb4e+ru$VWmaoYt1NK:Sq299h?rA)nz8./)bPzQ_#%cE<)JăU"<aOZZHPI.)5i8]Y-P97Dl'NOGg-q4:b/j_D&O4Fe]KCu:eoJ2[adjO<iBCUb7M&ăU"#m?imLOGb48D8nYuuw$3-T,<,G[%A-nHx*$BTG?Z#lSC]sWJH[)MU0F*;?E<u)UăU"D3[cnPZ=DcuH.>n4Y&*ad-:0&.</:W:yK57PV6=SCx#\JAqfE=Z$moj)Jt,[Wb_ăU"NIObLI\$m-HKQdDk8$c%dVtxmRImZbOt+aworK\]&R8$MizF?=,n^24:^<aBho6ăU"WZb5kHvm(6w88\LS5sQo39A'mI--\'<*,:aR?WM2P2[yd24Nwc8Ozw-Y[mG15>lăU":>=gCUu+4]psLUfZP='N6Y2uV-uofB=SuP:%i,(>:a4%2$8_KWV1/AZ1=we,t;:ăU"z.fHn2%zfqXdc3mm-6+2'S$YE3;yn&:aNK2%l6M%o7BdhRe8tRLEA#wp3#,H]qRăU"lsil.))<b\(b4m]3&iecGUNX3&XV?+5y,[/7aGN1eSZdIWM,%v.w?ayPv(o9sM)ăU"$ED+dyem'XP.;:y<4s;7HF6'KYId,>3sCi$F<IIOHU+xG1OC\-l7#>-X%2wI/OjăU"3&97%vMZh8&Z:1,(AWiDgd6iQ?:qcAxWD,LA[P6V,wm_Ai$?K^0[pQ%QtPJphPTăU"M2yCh:9IkS]h6y<=ICI$v2i)$w]Bz,[$*h3#+xLMVO37us\xd\EcHLY$pKi$Dt\ăU"e9?^)Z-+FsMd5dj-%c+Mlwh:a&kn(scsn2nL-=$RBtj6s=QliG[dn?N+.G5Qw5yăU"KhoJF4KWrL,omg$QJV]p2oB88RvZk^=<Sd[E%R>LN>U>EM[l0co>T\Ibq=JJRJKăU"][UYkcVL=P+VM'U$vnCc=h*cTf>5&/xcSyTarHo3cc#x_zH13WCqAZidM$=YHfOăU"i5bg,w;=tWoGk'+9nID;VChP+6i5=BX&p'pi0%+ntF;4iqml_C7dm\8%j<Q;fI0ăU"8KX,zml5cn'7;$JJKcvsT0f]^VkYA>mq]OuA)yB79CvsmV*uGf<YWM;YILa4:k_ăU"Oooof?MwS+2%>uP9s6gZ_ob;#K]RT_dNq=r5DY1At0WUphF#T9Qn>R\pv>;7e?năU"d6P'[Z^mK&;gtjDRWp%;LwNta,oQG+?Mk2,_eRZLd/)Y6BR*0FkMEau.(HiX5qgăU"_dIOwSaOb#(L(CFRL+'(Q=;NofZBFqdqhdUrQ,;Mk'&O+f0FNpD41coK9/hZrJpăU"yj,RXO?'9P^-NN>v>vH+yb\h\m?$gLotHWW$-NYWNc;.X<hFb,qsB,n.6gFW8J1ăU"6[8nf=*R1aJ/p(n>jRxt\?^<DyEx:2yR</vnU?H&bOGvMb0(?CR?*G^4?Db?$VMăU"1G>cxaFr]X$MphvsP8n<RTa5Lbn6]t\=*isg0=47gphEpvVOG+#TmpUy6k(30Z(ăU"=.V6d:RzD,W>M1<i^lsNb_(Y##njFL)4AVJ7-j4dRY*a*\MjNUWk*sJafWXa^ZIăU"%[U4*fZUD#H]90=DgtXhbrB3OiA3OWJY?pB7]hXN>K8nv9UAfDyZ6dT0Jn1X/uiăU"?VRmWR);XI;bZ$ZF)wJ#Xy[8hPaR]oDDB(DwYV:.OKL*^M\$L?%F7fhTl7;olaeăU"uVR;7686PaF.1aeYj>n=W7;let$ESY\GP,'ek,rcH,nubB>fQpfIiZ#/+S7kYQFăU"HSoJga7(hqN#NGoToHg$_8&)Em-W$:fDA9t&Go\+QX#2)Y2Xs0Ns3'Gt]l3N<k,ăU"8JYi&W1dQ<&KSkcB9qC,syl#:*&_?ylk.Ym<pmb8mh>8mhrmarZNmxSe.AM3_^DăU"vW;#28M:_bvBmEs?d2XAE:FJ<Hi?u>Pd#KY4<m>7:BYmRDb2/Xtzsg=<AqN9Q.IăU"mpC;/[SUkVgKr:(+4RX-j6I/;*N*M7YT5XL[*;t/EMvOC0(Z;3>$y(CN$Dn:ozqăU"?$SNwb0XTdK+gb*VXB'uh[?,aZ6Z\:0RbR7^F'jo9fOA]Q_d'WhQ&muu3:^r8B6ăU"=hy8'c0U076R$LvZ=/(RHS5GKsjV>/p#[*65lZui%2;*m2g&Bjk6ER(LQroZ^,săU"HKJVLl[Gm-Q\nQmc_<lxfQEPS<ZW=Hb4VC(G5eLBX*s^2rK$[us,xDm*HkNXr/2ăU"ero,=CKQ:MOAF(DHpYcHrzr2YtOEm+$U9jT(]jPJ<.s7JC?\)I6t89GXaRvUjkbăU".;?qSy.+vQ''*cK0v/ZWmr)1AjzzISGl^K:R&nB2l&wF8J83at2fQ?h;kvIrqERăU"U,gW\L1M4QwNYuLC2QvXq*V&xh&/Jvid/X_bJjG-NE1&^73l+XJA(;v1-xx%u%păU"&'9%%9%%%%-%g(YMG?8x$tN%)%%%%-%%,%%%%%%%%%%%%E%%%%%%%.%]']%SksyăU"%up&'%9%9%%%%-%.hYMG3]XzF%o*%%%%5%%%*%%%%%%%%%%%E%%%%s)%%%rS%ksăU"yu%p&'9%%9%%%%-%h(YMGabjV_%%*%%%%5%%*%%%%%%%%%%%%E%%+%4.%%%ySk%ăU"syup%&'9%%9%%%%-%hYnMGko-Dai*%%%%5%%%*%%%%%%%%%%%%E%%%&Y4%%%xSkăU"s%yup&%'9%9%%%%-#%gYM%G96<+I/*%%%%5%%%*%%%%%%%%%%%E[%%%j%9%%h%SăU"ksy%up&'%9%9%%%%-%0$NqGgK.*x%<:%%*3/%%%-%%%%%%%%%&%E%7%%C?%%%ylăU"%znSg%fxup%*+%%%%%+%%+%\&%%%,U%%%%%ăEND SUBăV2ăCLOSE:IF S=169AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăCleber de Mattos Casali        MOVING SPRITE ROUTINES         Landale@usa.net                05-11-97 (16:42)       QB, QBasic, PDS        88   2365     SPRITES.BAS DEFINT A-Ză'$DYNAMICă'ă'QBX & QB Sprite Routinesă' by LanDaLe (Cleber de Mattos Casali)ă' CMC Soft.ă'ă'e-mail    : rLanDaLe@geocities.comă'home page : www.geocities.com/siliconvalley/park/3019ă'ăDECLARE SUB PutSprite (sprx%, spry%, msprite%(), tela%())ăDECLARE SUB PutMirror (sprx%, spry%, msprite%(), tela%())ăDIM tela(1 TO 32002) AS INTEGERăDIM bg(1 TO 32002) AS INTEGERăDIM sprite(1 TO 602) AS INTEGERăSCREEN 13ăCLSăCOLOR 18ăPRINT " This"ăPRINT " is a"ăPRINT "Sprite"ăGET (0, 0)-(49, 23), spriteăCOLOR 7ăFOR cor = 1 TO 200ăLINE (cor * 2 - 2, 0)-(cor * 2, 199), cor, BFăNEXTăGET (0, 0)-(319, 199), bgăGET (0, 0)-(319, 199), telaăCLSăFOR x = 1 TO 319 STEP 5ă PutSprite x, 130, sprite(), tela()ă PUT (0, 0), tela, PSETă  FOR restorebg = 3 TO 32002        'restoreă   tela(restorebg) = bg(restorebg)  'theă  NEXT restorebg                    'backgroundăNEXT xăFOR x = 319 TO 1 STEP -5ă PutMirror x, 130, sprite(), tela()ă PUT (0, 0), tela, PSETă  FOR restorebg = 3 TO 32002       'restoreă   tela(restorebg) = bg(restorebg) 'theă  NEXT restorebg                   'backgroundăNEXT xăăREM $STATICăSUB PutMirror (sprx%, spry%, msprite%(), tela())ăymaxtela% = tela%(2)ăxmaxtela& = (tela%(1) / 8)ăymax% = msprite%(2) - 1ăxmax% = msprite%(1) / 8 - 1ăxsprindex& = 3ăFOR yvaria% = spry% TO spry% + ymax% STEP 1ăFOR xvaria% = sprx% + xmax% TO sprx% STEP -1ăxsprindex& = xsprindex& + 1ăIF yvaria% >= 0 AND yvaria% <= ymaxtela% - 1 AND xvaria% >= 0 AND xvaria% <= xmaxtela& - 1 THENă DEF SEG = VARSEG(msprite%(1))ă byte% = PEEK(xsprindex&)ă IF byte% THENă   DEF SEG = VARSEG(tela%(1))ă   POKE ((xmaxtela& * yvaria%) + xvaria% + 4), byte%ă END IFăEND IFăNEXT xvaria%ăNEXT yvaria%ăDEF SEGăEND SUBăăSUB PutSprite (sprx%, spry%, msprite%(), tela%())ăymaxtela% = tela%(2)ăxmaxtela& = tela%(1) / 8ăymax% = (msprite%(2)) - 1ăxmax% = (msprite%(1) / 8) - 1ăxsprindex& = 3ăFOR yvaria% = spry% TO spry% + ymax% STEP 1ăFOR xvaria% = sprx% TO sprx% + xmax% STEP 1ăxsprindex& = xsprindex& + 1ăIF yvaria% >= 0 AND yvaria% <= ymaxtela% - 1 AND xvaria% >= 0 AND xvaria% <= xmaxtela& - 1 THENă DEF SEG = VARSEG(msprite%(1))ă byte% = PEEK(xsprindex&)ă IF byte% THENă   DEF SEG = VARSEG(tela%(1))ă   POKE ((xmaxtela& * yvaria%) + xvaria% + 4), byte%ă END IFăEND IFăNEXT xvaria%ăNEXT yvaria%ăDEF SEGăEND SUBăCleber de Mattos Casali        FLIC PLAYER W/SCREEN BUFFER    Landale@usa.net                05-11-97 (16:42)       QB, QBasic, PDS        205  6010     FLCPLAY.BAS DEFINT A-Ză' QBX/QB Flic Playeră' Original Program by Carl Gorringe (thank you very very very much!!!)ă'  Reprogramed by LanDaLe (Cleber de Mattos Casali)ă'   CMC Soft.ă'ă' e-mail    : rLanDaLe@geocities.comă' home page : www.geocities.com/siliconvalley/park/3019ă'ă' Now featuring Screen Buffer (I really love Screen Buffers...)ă' obs: No speed limiting, good stuff for my 3x86!!!ă'ăDECLARE SUB PlayFLC (FileName$)ăTYPE FLIheaderTypeă   Size AS LONGă   ID AS INTEGERă   Frames AS INTEGERă   Xres AS INTEGERă   Yres AS INTEGERă   ColorBits AS INTEGERă   Flags AS INTEGERă   Speed AS INTEGERă   Reserved AS STRING * 110ăEND TYPEăTYPE FLIframeChunkTypeă   Size AS LONGă   ID AS INTEGERă   Chunks AS INTEGERă   Reserved AS STRING * 8ăEND TYPEăTYPE FLIdataChunkTypeă   Size AS LONGă   ID AS INTEGERăEND TYPEăSCREEN 13ăPlayFLC "c:\draw\giant.flc"ăăSUB PlayFLC (FileName$)ăDIM Header AS FLIheaderTypeăDIM FrameChunk AS FLIframeChunkTypeăDIM DataChunk AS FLIdataChunkTypeăDIM Byte AS STRING * 1ăDIM flitela(1 TO 32002) AS INTEGERăFileNum% = FREEFILEăOPEN FileName$ FOR BINARY AS FileNum%ă	GET #FileNum%, , Headeră	IF Header.ID <> &HAF11 AND Header.ID <> &HAF12 THENă		CLOSE FileNum%ă		EXIT SUBă	END IFă	IF Header.Xres <> 320 OR Header.Yres <> 200 THENă		CLOSE FileNum%ă		EXIT SUBă	END IFăăflirotina:ăFOR timming = 0 TO Header.Frames STEP 1ă	       DEF SEG = VARSEG(flitela(3))ă		FramePos& = LOC(FileNum%)ă		GET #FileNum%, , FrameChunkă		IF FrameChunk.ID = &HF1FA THENă			       FOR Chunk% = 1 TO FrameChunk.Chunksă				DataPos& = LOC(FileNum%)ă				GET #FileNum%, , DataChunkăă				SELECT CASE DataChunk.IDă				 CASE 4, 11ă					Index% = 0ă					GET #FileNum%, , PacketNum%ă					FOR A% = 1 TO PacketNum%ă						GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă						GET #FileNum%, , Byte: ChangeByte% = ASC(Byte)ă						Index% = Index% + SkipByte%ă						IF ChangeByte% = 0 THEN ChangeByte% = 256ă						FOR B% = 1 TO ChangeByte%ă							GET #FileNum%, , Byte: RedByte% = ASC(Byte)ă							GET #FileNum%, , Byte: GreenByte% = ASC(Byte)ă							GET #FileNum%, , Byte: BlueByte% = ASC(Byte)ă							IF DataChunk.ID = 4 THENă								OUT &H3C8, Index%ă								OUT &H3C9, RedByte% \ 4ă								OUT &H3C9, GreenByte% \ 4ă								OUT &H3C9, BlueByte% \ 4ă							ELSEă								OUT &H3C8, Index%ă								OUT &H3C9, RedByte%ă								OUT &H3C9, GreenByte%ă								OUT &H3C9, BlueByte%ă							END IFă							Index% = Index% + 1ă						NEXT B%ă					NEXT A%ă				 CASE 12ă					GET #FileNum%, , StartLine%ă					GET #FileNum%, , Byte: NumLines% = ASC(Byte)ă					LinePos& = StartLine% * 320&ă					GET #FileNum%, , Byte: StartByte% = ASC(Byte)ă					FOR Y% = 1 TO NumLines%ă						GET #FileNum%, , Byte: PacketByte% = ASC(Byte)ă						X% = StartByte%ă						FOR A% = 1 TO PacketByte%ă							GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							X% = X% + SkipByte%ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							ELSEă								FOR B% = 1 TO SizeByte%ă									GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							END IFă						NEXT A%ă						LinePos& = LinePos& + 320ă					NEXT Y%ă					GET #FileNum%, , Byteă				 CASE 7ă					LinePos& = 0ă					GET #FileNum%, , NumLines%ă					FOR Y% = 1 TO NumLines%ă						DOă							GET #FileNum%, , Word%ă							WordType% = (Word% AND &HC000)ă							SELECT CASE WordType%ă								CASE 0: PacketCount% = Word%ă								CASE &H8000: LastPixel% = (Word% AND &HFF)ă								CASE &HC000: LinePos& = LinePos& + (Word% * -320&)ă							END SELECTă						LOOP UNTIL WordType% = 0ă						X% = 0ă						FOR A% = 1 TO PacketCount%ă							GET #FileNum%, , Byte: SkipByte% = ASC(Byte)ă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							X% = X% + SkipByte%ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								GET #FileNum%, , Byte: PixelByte1% = ASC(Byte)ă								GET #FileNum%, , Byte: PixelByte2% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									POKE LinePos& + X%, PixelByte1%ă									POKE LinePos& + X% + 1, PixelByte2%ă									X% = X% + 2ă								NEXT B%ă							ELSEă								FOR B% = 1 TO SizeByte%ă									GET #FileNum%, , Byte: PixelByte1% = ASC(Byte)ă									GET #FileNum%, , Byte: PixelByte2% = ASC(Byte)ă									POKE LinePos& + X%, PixelByte1%ă									POKE LinePos& + X% + 1, PixelByte2%ă									X% = X% + 2ă								NEXT B%ă							END IFă						NEXT A%ă						LinePos& = LinePos& + 320ă					NEXT Y%ă				 CASE 15ă					LinePos& = 0ă					FOR Y% = 1 TO 200ă						GET #FileNum%, , Byteă						X% = 0ă						DOă							GET #FileNum%, , Byte: SizeByte% = ASC(Byte)ă							IF SizeByte% > 127 THENă								SizeByte% = -(SizeByte% OR &HFF00)ă								FOR B% = 1 TO SizeByte%ă									GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							ELSEă								GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă								FOR B% = 1 TO SizeByte%ă									POKE LinePos& + X%, PixelByte%ă									X% = X% + 1ă								NEXT B%ă							END IFă						LOOP UNTIL X% >= 320ă						LinePos& = LinePos& + 320ă					NEXT Y%ă					GET #FileNum%, , Byteă			    CASE 16ă				   FOR P& = 0 TO 64000ă					   GET #FileNum%, , Byte: PixelByte% = ASC(Byte)ă					   POKE P&, PixelByte%ă				   NEXT P&ă			    CASE ELSEă				   SEEK FileNum%, DataPos& + DataChunk.Size + 1ă			   END SELECTă		   NEXT Chunk%ă	   END IFă	   SEEK FileNum%, FramePos& + FrameChunk.Size + 1ă    DEF SEGă   flitela(1) = 2560ă   flitela(2) = 200ă   PUT (0, 0), flitela, PSETă  IF INKEY$ = CHR$(27) THEN CLOSE FileNum%: EXIT SUBăNEXT timmingăCLOSE FileNum%: EXIT SUBăEND SUBăTika Carr                      QUICK IMAGE CONVERTER          t.carr@juno.com                05-11-97 (14:59)       QB, QBasic, PDS        245  7097     QIMCV.BAS   DECLARE SUB MakeProg ()ăDECLARE SUB BMPLoad ()ăDECLARE SUB PCXLoad ()ăDECLARE SUB TGALoad ()ăDECLARE SUB Menu ()ăDEFINT A-Zăă' QIMCV.BASă' Quick Image Converter 1.0ă' by Tika Carră' May 4, 1997ă'ă' Freeware:ă'ă' This program can be used as you please, as long as you give credit toă' the respective author(s).ă'ă' No warranties or guarantees are expressed or implied.ă'ă' Credits:ă'ă' Tika Carr       (t.carr@juno.com)            Put together the pieces :)ă' Dave Shea                                    BMP Decoderă' Jonathan Leger  (leger@mail.dtx.net)         PCX Decoderă' Erika Schulze   (100775.2275@compuserve.com) TGA Decoderă' Earl Montgomery                              Load/Save QIM formată'ă' Special thanks to others in the FidoNet QUIK_BAS Echo who helpedă' contribute ideas to this project.ă'ă' Description:ă'ă' Quick Image Converter will convert 256 color 320 x 200 images saved ină' BMP, PCX or TGA format (sorry, no GIF due to licensing requirements).ă' TGA images must be saved in uncompressed format. The result is aă' .QIM file, that can be quickly BLOADed into your programs:ă'ă' Block 1:  QuickBasic BLOADable Image (64006 bytes)ă' Block 2:  Palette information        (768 bytes)ă'   Total:  Total File Size            (64774)ă'ă' This program also saves a .BAS file that you can merge into your programsă' and display the QIM file.ă'ă' Revision History:ă'ă' 1.0         5/4/1997       Put together different sources, and createdă'                            main and sub menus.ăă'**** Startup ****ăTYPE tgaă	info AS STRING * 1ă	clr  AS STRING * 1ă	img  AS STRING * 1ă	orig AS INTEGERă	col  AS INTEGERă	bits AS STRING * 1ă	xval AS INTEGERă	yval AS INTEGERă	w    AS INTEGERă	h    AS INTEGERă	pix  AS STRING * 1ă	desc AS STRING * 1ăEND TYPEăă'**** Main Program ****ăăSCREEN 0, 0, 0: WIDTH 80: COLOR 15, 1: CLSăăPRINT TAB(25); CHR$(219) + CHR$(178) + CHR$(177) + CHR$(176);ăPRINT " Quick Image Converter ";ăPRINT CHR$(176) + CHR$(177) + CHR$(178) + CHR$(219)ăPRINT TAB(34); "by Tika Carr"ăăLOCATE 7ăPRINT TAB(25); "[L] Load an Image"ăPRINT TAB(25); "[D] Get a Directory Listing"ăPRINT TAB(25); "[Q] Quit Program"ăPRINT : PRINT : COLOR 10ăPRINT TAB(25); "While viewing picture:"ăPRINTăPRINT TAB(25); "[S] Save screen"ăPRINT TAB(25); "[E] Exit to main menu without saving"ăPRINT TAB(25); "[Q] Quit program without saving"ăăDO: P$ = LCASE$(INPUT$(1)): LOOP WHILE INSTR("ldqv", P$) = 0ăăIF P$ = "q" THEN COLOR 7, 0: CLS : ENDăIF P$ = "d" THEN COLOR 7, 0: CLS : SHELL "dir /w /p": SLEEP: RUNăăCOLOR 11: LOCATE 23, 3ăWHILE format$ <> "bmp" AND format$ <> "tga" AND format$ <> "pcx"ă	PRINT "File to load (MUST give BMP, PCX or TGA ext) ENTER = Menu: ";ă	LINE INPUT file$ă	IF file$ = "" THEN RUNă	IF LEN(file$) > 4 THEN format$ = LCASE$(RIGHT$(file$, 3))ăWENDăăLOCATE 23, 3: PRINT SPACE$(70); : LOCATE 23, 3ăPRINT "Image Filename (no ext): "; : LINE INPUT img$ăLOCATE 23, 3: PRINT SPACE$(70); : LOCATE 23, 3ăPRINT "BASIC Program Name (no ext) or ENTER for same as Image: ";ăLINE INPUT BAS$ăăIF BAS$ = "" THEN BAS$ = img$ + ".BAS" ELSE BAS$ = BAS$ + ".BAS"ăimg$ = img$ + ".QIM"ăăSCREEN 13ăă'**** Load A BMP ImageăIF format$ = "bmp" THENă	LOCATE 10, 5: PRINT "Please wait for image to load."ă	SLEEP 2: CLSă	OPEN file$ FOR BINARY AS #1ă		h$ = SPACE$(14): s$ = SPACE$(4)ă		GET #1, 1, h$: GET #1, 15, s$: bz = CVI(s$)ă		IF bz = 12 THENă			P$ = SPACE$(768)ă		ELSEIF bz = 40 THEN P$ = SPACE$(1024)ă		ELSE SCREEN 0, 0, 0: WIDTH 80: CLS : PRINT "Unable to load BMP image.": ENDă		END IFă		i$ = SPACE$(bz): GET #1, 15, i$: nb = CVI(MID$(i$, 15, 4))ă		IF nb <> 8 THEN ENDă		GET #1, bz + 15, P$ă		IF bz = 40 THEN ng = 4 ELSE ng = 3ă		FOR x = 1 TO LEN(P$) STEP ngă			b# = INT((ASC(MID$(P$, x, 1))) / 4)ă			g# = INT((ASC(MID$(P$, x + 1, 1))) / 4)ă			r# = INT((ASC(MID$(P$, x + 2, 1))) / 4)ă			c# = b# * 65536# + g# * 256# + r#: PALETTE ((x - 1) / ng), c#ă		NEXTă		y = 199: d$ = " "ă		WHILE y >= 0ă			x = 0: WHILE x < 320: GET 1, , d$: PSET (x, y), ASC(d$): x = x + 1: WENDă			y = y - 1ă		WENDă	CLOSE #1ăEND IFăă'**** Load a PCX ImageăIF format$ = "pcx" THENă	DIM q AS STRING * 768, ver AS STRING * 1ăă	OPEN file$ FOR BINARY AS #1ă		GET #1, 2, veră		IF ASC(ver) <> 5 THENă			SCREEN 0, 0, 0, 0: WIDTH 80: CLSă			PRINT "Unable to load PCX Image"ă			ENDă		END IFă		GET #1, LOF(1) - 767, qă		FOR i = 1 TO 768 STEP 3: OUT &H3C8, Pă			r = INT(ASC(MID$(q, i, 1)) / 4): OUT &H3C9, ră			g = INT(ASC(MID$(q, i + 1, 1)) / 4): OUT &H3C9, gă			b = INT(ASC(MID$(q, i + 2, 1)) / 4): OUT &H3C9, bă			P = P + 1ă		NEXTă		SEEK #1, 129ă		ds = 2000: dat$ = INPUT$(ds, 1): dc = 1ă		FOR half = 1 TO 2ă			DEF SEG = &HA000 + ofsă			FOR c = 0 TO 31999ă				IF dc > ds THEN dat$ = INPUT$(ds, 1): dc = 1ă				cl = ASC(MID$(dat$, dc, 1))ă				dc = dc + 1ă				IF dc > ds THEN : dat$ = INPUT$(ds, 1): dc = 1ă				IF cl > 192 THENă					LPS = cl - 192: cl = ASC(MID$(dat$, dc, 1)): dc = dc + 1ă					FOR L = LPS TO 1 STEP -1: POKE c, cl: c = c + 1: NEXT: c = c - 1ă				ELSE POKE c, clă				END IFă			NEXTă			ofs = ofs + &H7D0ă		NEXTă		DEF SEGă	CLOSE #1ăEND IFăă'**** Load a TGA ImageăIF format$ = "tga" THENă	DIM hdr AS tgaăă	OPEN file$ FOR BINARY AS #1: GET #1, 1, hdr: CLOSE #1ăă	OPEN file$ FOR BINARY AS #1ă		IF ASC(hdr.clr) <> 1 OR ASC(hdr.img) <> 1 THENă			SCREEN 0, 0, 0, 0: WIDTH 80: CLSă			PRINT "Unable to load TGA file."ă			ENDă		END IFă		dcl = hdr.col * ASC(hdr.bits) / 8: dcs& = 19 + ASC(hdr.info)ă		dce& = dcs& + dcl%ă		SEEK #1, dcs&ă		FOR reg = 0 TO 255ă			t$ = SPACE$(3): GET #1, , t$ă			r = ASC(MID$(t$, 3)) \ 4: g = ASC(MID$(t$, 2)) \ 4ă			b = ASC(MID$(t$, 1)) \ 4ă			OUT &H3C8, reg: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, bă		NEXTă		SEEK #1, dce&: t$ = SPACE$(1)ă		FOR y = 0 TO hdr.h - 1: FOR x = 0 TO hdr.w - 1ă			GET #1, , t$: col = ASC(t$): PSET (x, y), colă		NEXT x, yă	CLOSE #1ăEND IFăă'**** Save Image (or Exit to menu or quit) ****'ăDOă	QI$ = LCASE$(INPUT$(1))ă ă	'**** Save to .QIM File Format ****ăă	IF QI$ = "s" THEN  'Save Screen & paletteă		DEF SEG = &HA000 + 4000ă		OUT &H3C7, 0ă		FOR x = 0 TO 767: cv = INP(&H3C9): POKE x, cv: NEXTă		DEF SEG = &HA000ă		BSAVE img$, 0, 63999 + 768ă ă		'**** Save a .BAS file loaderă		OPEN BAS$ FOR OUTPUT AS #1ă			PRINT #1, "' Loader for " + img$ă			PRINT #1, "' by Earl Montgomery"ă			PRINT #1, ""ă			PRINT #1, "DEFINT A-Z"ă			PRINT #1, ""ă			PRINT #1, "SCREEN 13"ă			PRINT #1, "OUT &H3C8, 0"ă			PRINT #1, "FOR x = 0 TO 767: OUT &H3C9, 0: NEXT"ă			PRINT #1, "DEF SEG = &HA000"ă			PRINT #1, "BLOAD " + CHR$(34) + img$ + CHR$(34) + ", 0"ă			PRINT #1, "DEF SEG = &HA000 + 4000"ă			PRINT #1, "OUT &H3C8, 0"ă			PRINT #1, "FOR x = 0 TO 767: P = PEEK(x): OUT &H3C9, P: NEXT"ă			PRINT #1, ""ă			PRINT #1, "SLEEP"ă			PRINT #1, "SCREEN 0, 0, 0, 0: WIDTH 80: COLOR 7,0: CLS: END"ă		CLOSE #1ă	END IFă	 ă	IF QI$ = "q" THEN  'Exit program without savingă		SCREEN 0, 0, 0, 0: WIDTH 80: CLS : ENDă	END IFă	RUNăLOOP WHILE INSTR("seq", QI$) = 0ăAngelo Ken Pesce               FAKE SCREEN PSET ROUTINES      us0082@uniserv.uniplan.it      05-07-97 (11:00)       QB, QBasic, PDS, PB    99   6483     FAKE.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FAKE.ZIP",4^6:Z&=4589:?STRING$(50,177);ăU"%up()%9%%%I-%pkerGgn),w0(.%%A.%%%/%%%%kf%pjug%SgfxKVz<^\j]5wP]=ăU"Ngjo#<Kn4xQe\#5NKr*XL.I/=0vQ2V>H2p(CYqXO&AZ8hQ_XS&3F*ctDsZ$=YH;ăU"nH?[(<?*8+;?YE..q8g:KQ7LjA'Cf&fna,9P?33E'(Q7[mD-i)g_NWC'I0Md5%jăU"F\_Gn;&a3b0AgTEYHxMZ[Qivp:lkpqqc##>GE9^^j2XTn5o)bhpqB+Fu/FI3x.'ăU".j0I?6MeCXSZ5p0aUsSksGyV_Vim:Ik+-t-ZqB6Ix6_+NZ,cIn-XO'L,W_W#hf'ăU"i.<(xB]'geU5g)O4JU;-&Dsq-4-$_5<GQ2ec]xl9F(2/L%?emkri&3tN\8fdP8jăU"8Oohh7UX2+cv[<OBKDWYxJTNNlr4N=MenSE3/G-_^KEU>wJKQ74)LBeH2*D8=,7ăU"))Zg9Pce0nw4tK^=*ufZ:wF:PG#6m-$.s3)VmwZbdIQKM\0=ZaYV>_CONo\c7'năU"Wn'N6ga^<\ag3h\GlqqTf+n'W>Wps>4GrJDd5^RV/VY;t'hPaj/u'fK3m_bLVJuăU"R1McDxR%$3%c&?7Yl/M&n/(,j8c[53/z%3PeY+&wOHoeZ8WtCLxU+W4uNO&dZe^ăU"N<6h6q5,;sMU7y8D;l#TZu.tq]:?xccn+P$Yux3FQ\7#U?vwa'9WoM%V*b&YV4dăU"fFMo-_d7WzbyHbwr7ctSx*N6>d-%EU,YrbF3J9>lg40TU^]L0k*k:P*g/0RU#ljăU"^Y.U#6EcvLIPTNU4Q:kC8DR2jpT>>GR'B\4Vs8\pim[\Aw[h<t[d(rc.[<?g=2]ăU"/Q?1V#dT6xJa/P=x?+Bq,^4pq30,XKp)-N2HORF4LIG[hHIY_yab_:G/#%f'HsVăU"9[gZ7lnQHZY?:2\2e-[3Q/g6:.+,aFYI5F2g,R?:BX_:\,2SCDB>7_lF)G^nOfPăU"VHbgAi,$IH<Rp%[o7TBFRgnC9b.'_UuNPUO;?74B2l<*I)uySCJ(ETXCD,-gjWYăU"Qj^Nw$7i\x,-,J_Xu%p()9%%%%-L%WSsUGJS''#K'%%%-,%%%.%%%%kfp%jWSg7ăU"fxFy3X^be^5MLZhNg+%5QoA02+irv+8SsNdN,dVPicj7*(aXLnp?TxZWR><cb(păU"H?qY<7Noj>5r7hRV=&o\E=hYLC_ct0O5yNUZW&YOQ>%W+rPrB)Mlvw:r<2iHD-9ăU"SX:+4>4*Gi?0ghASF6(>+*HB2B+2'5r,-$h,5AATI2qb*YHkmCewlNg=-4Yed1<ăU"8?=,F'Y5J'4hE]5i<BX6[xiAK.d)fD^rrD=-*KSZj2L[c8V\9e>sYtZ-+SE9$g^ăU",.<dG0OInK^f_/Da1/aSSSXI3Wq07t/SCfZA-b$4R2;u$Yqca(o-lf18i:=#ktXăU"y_$zdy*(r<xr+_quA*fG4w9dSg1M0]=Ft;osia<E5JsG[dhq9'j91ARhoqKR9U?ăU"3DOCO7l$n>S-9co0q,7#T,iv[9m$$/8d0xhx-D+QdYLL[DZ1G.[H$1\^bS)/1UIăU"qvcW1]dzu9w'KU(<t8-AHcCMhicE7FsL.[q86>d5J2ufi1-82TZZr(,8QV8v>EGăU"^Fn5bq%VbO6SgD0^bfVYm'LkH7YKb=Q:3v(O</97&lYhV'F7ZxXBgjfar8$.3JuăU";z1pr0(k,A2NQ2Ou-<<sg*HnZE:Ql%xz_??8/O<:x:DBxW]5Q=e9<7sK[C'8tI;ăU"&t54PtEGQC?mtt:Osn-2,^?Rc:.'4&o=qdka$Zh,l(M$bxay&DN&e<>=Ed\%up(ăU")%9%%%I-%+tJsGU73k$&)%%%k6%%%1%%%%kf%pjkn%wjSgRfxNe2*^qm=9#XrKuăU"36a)4d*LL9-%FOg+wt(hU;'7]XR\jT-a.)dobp>Nt&OLu=4^cGmc%Vudsn.pDMyăU"#Bt()jdqyPp?oT'sZj7a%3+Y=KustXBw.d'/21nzIu6Y$5q9gM[UVAED15x;b)iăU".HZ9?gWq8Nttpdnp:rJ^76XLXZ=E*NDkPw^]QT9C;66e1UZ#(wBL4\9g>4CQ]ZPăU"DmVIof<Do8[,\Tj1'\jAg-HJg3LtVWh$dXb8bCE?e(]?U$]^O2=i/r1K3<?<<;.ăU"3qm/ru-qals.xjyqfgvS>:6]Tjc](FQ5nu\D6^vu\fs2.n/*RE$SG_%L]Ms<:IcăU"]TZ;,A(4]3V$XQdv^dMc#o(6_/\BG?i]L21^V-9;EO9[]BefWO:*oXjtn>%OwIyăU"$(l^=Rg0Bst;&PGAZAnq)Miw/XjNIy%Ivd??3p\xOwSZ_FyOxa;Dk'z1iY*BhEQăU"eD0qGWwCF*v7Sd*+c;_'(B?0:\.;q/,bF&FNzJTghfmk2$CGaH+gBO<'B>7Gjb(ăU"YVN7et->A)o?iNQjFguI.+R9IalbgJ6*:V]Nm7813E').$QRB5e:u&Z&P:5V-+)ăU"]sVva:QM:GE,\epgnEUA9Csjoa(X^E6L^aSA^mvr=70jNu2cT5auHm3VQ[/4G/BăU"YvjbiLWF<b48:tThIE?ki0N,mu-q1:#hI(W&QFRz6pHdIW&]VPt2*lV'GR)lF'SăU"6eGn%HU33GMS6mrJjN2C'64E*1nC^93+EZlnmz=JjI_h$ejifj6KayK+VHo<<a%ăU"3e00pdXlm4FhX:SXR;*7+\HnWGBTns_l21n3JJ?YXHh%gFs5kayK7Vtw4V)6i.4ăU"780$=<3h2%r^Bn>]T<dqXF6/R$A;IZFX(b:&tnk^Te0UurIvr2c>*<t0s55D[72ăU"?T*,gW&<e[9axnB*)NRjQHx3rec:w)]M)0sOIImU&AiN1jmVGAB'X/.Gld<3:$/ăU"=q8V&Q/qlX2s3.g4:G0qlH6Sn<dOOa4k:r/'f]Fc6c=kFM:.KD>I6((Xm1PZniIăU"24XXJO;qeli51e\Nb?+Ab=iW9=[9Or3eHgVtjTnSNZh18l(sAShJQCKV:6/P+A]ăU"<oM8$lyOedD'RHxt&C(ifz0P6.nbPM&D%VMyuNwvTS%IiaL9ZaVj%9Jlo/])HHTăU"Aps[p.Y2$nQ3/jg:j/ERa05^p=UlBm)$MG%gepBk;DT_0LGudDM;5s4S$K<N($4ăU")%3YBacw9_[I,[d]T%,TiWZh$YGt/O9/$u9,bq/N0.'v*/8k$D\_PfuIecd1s6BăU"r8S2\e?afrF<OgvH?(KP[duQPd_AikR7Sot-nT/^i']48Z*CYYicxkWkv[qq=1căU"W+wKC=I,Uc9hPSfM%_zkD)>jj75P:rpV%iwOtYeOWVRu5$1THv%Tup(%)9%%[%-ăU"%c)IrGVM2O]W#(%%%%3%%-%%%%k%fpjS[gfxFh&<>SRm5w=6Bx09;d1$A0NTX#,ăU"roI,OT:Y2P*oAf'W\MAE.i)3nW)x7gX:e=ReMb,KSG;H2665DTHaH_a)%BrU>R5ăU"F4&Lx(iSq09a7(7(LV-RU0'ODTot%([i7gR/(:9b8&yOr]Hr*4TNs8mCQqXC]r^ăU"HhBYsvTnrFDaq2&GE$/2QUYS6A+sl#<g^)o,L&T3$sNg_jQ<=]]k15$M^(OmvW#ăU"EGw%lXU_YnEurO<CdYi8OM)b3<)79lCUPL/MlHd8f2[HWmO'd/$4;Jrh1]2I8+,ăU"Wvj7-]BW3K-I/3A_v*<OdUe+lz&mOV4ZHk'OHE='OPTNveOf3'5xU_//8\=FXV7ăU"ZW$e;3u4(_hD5-RZUe#1C.%bYee(F\Mj4Dp65ARgJuMT0nrI..znIAn&stU,ONpăU":ikl+$G#TXotw&EF$N4g$U46L8Wx%;c-bUxv4HtKt4/&O8PCM.aHP+b$$QzHV6;ăU"/H1??b4X22$a;.inag4T_0);0K>cE6P4Nu;JJ3>QQcM/&:Eh6kd,u2'duz,0tOpăU"6aQu.(^6NbJxoi+XVI71/&0,9B-_Y2W5f>gdT3332vL<gBsUtZ?>a/*WPrrf]B5ăU"Q+TkT^7U)R^K7Y(DZd<;D-1.ZUFhwiN?<fJ1VOc:cQ/0_h:3l1A4iS,NJCG4=mUăU",F>L70q<93Lw;=$\UFQP&>Km'UsoM.lh2qrR[:f$<7:hp_Uq'[Xy^=YFxEL[otVăU"?todx>)w-f'T5#_?6:SMTh6'LGCS(+7][n'r[ZN1v*3MAij=J49K)rhkE-y7E&/ăU".Dc$;hn4%VyrKRQQ;SqA8P4YVt&,<s'EmE,?1Ep0em%gR8p\RoQjE>+./d:Ae]$ăU"Z<_[mfeZh*NNt+ZDL<nFOp(1#S*#\),?xVoYGYOO.C).JRr-',DRzzGlJl<peLeăU"<Q:+]Ato)Os($#N]F5<+EKs4^hBik5<GGM$Tc)vc<heNQUwob^5<+h)HrAW>0'[ăU"%YfSJM9-3dc4bqgL9s8UFawyslNETm5qxx&%1>Qh8xBeI^_Y_/6-7nO+7++3n&JăU"2bDv;hGI15lc&X#L,,QTybqb?O&znv/6irNIb-x\#%W\*ZTQ5M/_no+tX*^%8lnăU";h6UGPv2h)wrS)rTZcSp*%T6w,?c-Zj\u%p()9%%%%-O%merdGNy/+>d'%%%B,%ăU"%%.%%%%kfp%jVSg7fxFy2<>iuj9w=[JN]85AT:X-_)*q0,S;znd6-+0>EX-_1l5ăU"dEXKkhF]GjyS>uB/T:Hoparpk$5cWdUT],G+j0q3az)aRI\L#v/iTcEf)R/9q4TăU"qRijf/uzRn7h$hmCW.;X]al>]]lXF2:QsD&brShcX3lX5E=g4,0E]i<:g4c&Zf?ăU"*^3y#kFdrK2iPFH^gh_)7:(p^V0G>8]?%hsA6%GFFK2HWV^=y(H$T4Sb_yYFQPeăU"$XqA$odW9)ii>FyY&g;5Xe3hWE4gOR)q>#<YH4--q-wEPOt3kQaQI3[Wi)ds.cIăU"TY'F4jin5<n645sH>iF5[(/Qo.=0j2o_$t5_1Nu_Xzn5mHf7MiD#/f&'$hpzRzGăU"9%;o3Q\L/w4]gnd1P1]=j/#IZnL[N2'kjdTsbM3(T,*JDTjQBmjFLM;['Sa7aooăU"/qN2H5:_C:2(w81ti=/_&5bo5&Jmmo;LSBe>X2R/QCGfs5;Q$T','N]HCd9'f<]ăU"$j$b[f?>NUACOwv\*>SJWJ1.u4Qac$hXbIM]Nh7,I$fd18#O+y&+F_QQX2<Ym,PăU"m0S(E$jlgouWjP#]Zp,was,8r2Z[U4bVK<RRJalx2mJkK.p8*W5URckr+-c'38JăU"</0Pw?=Y#tWRK7Q+,^6wi+TC6jnk36j'bH+-dJ]Pnu.HBJy,yqeYXk.&cjp6<L+ăU"Sa<&fd1H+rq(C5jW,k=$Jti'pWpK9uAch><QX?6/cL'42S1Q&([9T$)9Ve=1FEcăU"/?V<E?#[/R6E=RF%[6lG-M#)l7\p>8_&<3jlN4N5;1LM9Y;'y6Sm05MoEi9^8/CăU"k0fjLgn].g65D=E#T3*)2_gAfda'Pj,:VhFW6SRoMpksQAUJy6Oq#tJ>bPi'P6VăU"D93Um(?A,kC?'\Z?EEM.OJ;Xox3(RDiCwDeXyutQ3$<h:VimIOLxOg3eXGZ&w8tăU"\Ea88%&up&%'9%9%%%%-L%pkrUGgn,&w0(%(%A.%%%/%%%%%%%%%&%E%%%%%%%%ăU"%k%fpju%gSgf%xup&%'9%9%%%%-L%WSsUGJS''#K'%%%-,%%%.%%%%%%%%%&%E%ăU"%%%X%(%%k%fpjW%Sgfx%up&'%9%9%%%%-%2+tsGVU7k$&&)%%%k6%%%1%%%%%%%ăU"%%&%E%.%%O*%%%kf%pjkn%wjSg%fxup%&'9%%9%%%R-%cIArGV22O]W(.%%%3%%ăU"%-%%%%%%%%%&%%E%%%%&/%%%kfpj%Sgfx%up&'%9%9%%%%-%3merG:Ny/>'d'%%ăU"%B,%%%.%%%%%%%%%&%E%7%%(2%%%kf%pjVS%gfxu%p*+%%%%%*%%*%;[&%%:%5%ăU"%%%%ăEND SUBăCLOSE:IF S=161AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăBenjamin L. McGee              GRAPHICS PUT USING ASSEMBLY    FidoNet QUIK_BAS Echo          05-03-97 (00:12)       QB, PDS, VBDOS         108  7137     GRAP.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"GRAP.ZIP",4^6:Z&=5084:?STRING$(50,177);ăU"%up()%9%%%#-%S;T&G<j8:%r&.%%U*%%%-%%%%lw%fuSg.fx\x:r>Sea56Hj%DkăU"YvamdGT2swfAj;h1(P9OeF.Pi>S&D%Zod5=trHpVTN8_g\bZ&WEJmX$loF+;1tnăU"rN[I3hX4ot/sq5KsR-FAT)eml>o&2.&>vq2__3;V]YfIUxm[Sb0I?v#CKf[mW'uăU"tO9K2x+j6V1D##Mb2VV:,lql#8pOG*'Th+Pxjo0=]q%dep4W=?W&vd--d_\LA^_ăU"C3,&KzM'.<>4FnK)xDLiUac7U=Eu#ek=X4&Ea1Mucp;DxadG%WJI'%a,AHJp*H_ăU"j6Bb6DiB(2$XTdY-4'n-+7?*Q.M;$\37UJBl(YWI[U7+(U>y#N\.J(s[cW(7d,4ăU"o'rrq*fX8ekLu7W$4WFpXzU-Ema(Vx.#nRn?HHP+]gr;y&#jGX.BJ+Xkz2pk\(0ăU"'?x>r3YRPY&4J>0kK=R-K%o.&#73R<0$*a/]U=,m(9#&ivF,8]V]s%6RMpt.PzPăU"WFVE=eY*74<.j^Xn#EEekGgEKs>]?V\So_%Gu*&P(fx)mx<n<';Hi3.KT7MYFa:ăU"1$#pCFfxUQj=kJC87aWMV/b1Z-w)VdzSM.U[:TIiH<&Skn27V])X88Cs&vG8-a*ăU"N6s4Y?xroYibQNX5>n,Df#na;(GqV&QC7$tNs?RPNvl#q,fk<u%p()9%%%%-d%FăU";&(GG=d%]Q'%(%t*%%%/%%%%lwf%uvgS#gfx\gx,>SIU9L^kcx?#A)f\UX7aI-<ăU"s_=K&'0n?SJhe\&PF6:exg)OJNdN_p5%3[OLdmJY]h##7#KrW2*4K.n43t5-Q9căU"POx1Fpi\tK*d&d#[Gmdu'T^*=WB;XTE>(76Vb\/'h/,.j+bj>=UVVK*0:T^UYdeăU"AekG8/9IAQtgUMLk7/QE,D)MmS#W1e9g+<;-YI+=a4<E[vw89S(aEf7PrNBch<7ăU"'wyQ]u^ddcsS[['Lwt9,&VM8q(H#g9+rAT1&[qy2B[:WPWJK:4(_4..bLq)vT(hăU"LWA1Ag:W]G1V4AOQv)cOpgpLhBUk^/8qVgPVTB'7u9TMp)/SXWn8i<o>:ODa*eHăU";6Ms^1u)*T*b1Ud$.&JRVKwg3b?dTVzJV\h8w:(bmdBQO%nbJs:D/im]T_dk1wgăU"g:qr[A[kS=<Vi_cg5/uMN9rs6QqZLYlf[osci2+D=P'3/X5(c0pgmF-&.iZ34o&ăU"oZ1UEPuCp7YvGhP*zA,dB\AeS?g$d)f2defS,hR>jS-<k_fgNCb_Dea5XV-WWAfăU"8Y(eV0iAYz0[6$lYT&Lg7aFXDti&twp1ExTLdxY=n.ixk4;6NFHvo1Fq?0^$f1]ăU"oq+7sVl*w*bs-6uor>IaM%3S%\R8weL+T(XWC=h&XbNCkGpha7'm9Ik<+Zx.b8răU"OH47k.aJ/C2qMU*bg)=amqBHl]$9.'md1G<2\8u%p()9%%%%-g%Q9&UG02p&)Z%ăU"%%%%&%%%-%%%%kfh%jSif(y2E)D'O%Xu>;;Ed16O)AOI0kI4vOqCC5/UPpaEoj0ăU"Y/+[E#*_boiFCI=u7w-rA;E'1%up%()9%%%%-%:>:&Gr0LS;'&%%%'5%%%%1%%%ăU"%uzyg%qpVX%StgoM:/5/5C-mKu<99[ueh[CI3GQ,3V(+A7hARf()_HUDRlfRMPPăU"dTmvDAkLm5/5>1U)EMlPXP=F-tr9l#'diV#;V3el=d63Vh_iVMD#ijOGX-3\]e?ăU"m8g]RS5vvQTh&opA*0XY^g3>[$=;maBaStZPfov-h?wMPGm\,sc+JfJj(26HR8lăU"fW4n?mE[/unsEA99'=:5?u[]\hie<7Eu99IV=*-4)%%up(%)9%%%%-%Qb:&G(\aăU"8F\#1%%J%9%%/%%%%u%zygq%pSvqOgffNVCcNhN#nhHN$lgS%ejHwSkM^s6M-/XăU"AYo[+0k#17/a13g(m6_I#87Wh;36W>Pyf9/KSoK8E)/6vBgC)#.bM,FW-\:D'k(ăU"*n2>&ojOhay7ffIRaIg#dbYbRhJu$.omnkbtpbm,Xht67HvQnUJntJXt7XxRI:\ăU"'ib-8a7q1VhW3%NEql3%JG(RSuFL,9Yc)7T%'No^CK<-8QSibTI2/Rl#:-)#4a4ăU"-='<Y7eg)&:)D/Y1Ph_RT0Ys_0)eRgu(39f('Q-[(CdG-;=(t:FA?91OD0?;+U%ăU"b977AWV-i_RTYCs_0e&Rgu3\9f(Q%-[(d/G-;(2^P,E4'oRh'YM=%-<YY].0SQ4ăU"W94i6[U2IL\_NBU.);OjWYjY=0i4o=UyO.o%6Y(Tau949a4:3i()G?a^0-)#T9PăU"9S3Q4O^0Yk_.(;Oy?aew%k#+qcafbCAKa/)/MGOf+hdC,J:FciaGd.YoeL[Rbe:ăU"#4S2eM2qYC\/+G#qW2Q#>Upa8x:u7L1Oo(tuxxu?Xw%xCTVTvCszs(Q.mcMDue>ăU"Jjo(zGACRZt#_xYlLvlxi^szzPY:%+)rnhsimydfd%ByhXk9bChoT,nH\tNpO6săU"&tx#P2bpnhp$MUdM$Cd/vls^,DyFQC,-pEYc_5/JhDnPJp'J0#46^sl]WZ/;Z2FăU",(M8^XhwU>Vtax*tHk(AQxnlAhZ<vUG9,21M_X4&,wGvxkll-HJaPc_.d&B2&XJăU"R[#9sY93lgK1Zt2G)Kvw9;LlqFK2^<+bl0w?S2oah\19gl\T[tTL7]M^2tV[4[?ăU"*<jdh5t\hVA]I#qI1[PcM0Q8uhgu7H-ucB_MnN8rHaX0a_8tGRrqukD]*C^tN/năU"]F,-I#ZlaOp#4nB*kaqI;R_q'$3=a&n5qnuoTLwl_,CM5Y%s?dW#SU_qOijZ]qwăU"$[$dBvX[/>_qWB>t$q[N9dZ_Wuwu#zlYlQ[v]74+>^__qBMw/qHIH3>nBi;>qqcăU"dlYb[.6lCC3>n?io$x5P^6,ejNf]wdc[TAJrT8[t..lCF.rM_jaYJ&B_uX;A21iăU"?figsXsi=#qB)F#GA_fCrJ:Z,P^63Wcy+iK[=(Pn^N]D+Hn\'x1HSs?3&A3=M'băU"msf)$mD^<>_Iop/hvDmL,[Um+qBu#ZtJEPeChR.ipQ9FnoQ%iqrrhH*PyRzb.DNăU"v1QvC/L<%&Ll0/5[VUhhk^[9bB_w$['HAZl[#]sserCt/7Bmim];K[,LA<UMt8lăU"z7v+84s#VyJ^B[9CnB[cvKfU=]>7V&LGjPpMKn^Rg77^S>VRU+nS<X#-a]$<fJ.ăU"mykd>^l+ZcE>f235VQzH(0\s/qn_N0lNRyD6QFe)Or(*+pjfwks8$mB[WHv.1baăU"T_nLNNB^fk2WJYGJ3.7.(#)S<a$3H$0.C=FdTVQ'\[l/F\MVfiXf;]mdAKQZE<păU"3=1R+u6,(iLixbVy1E%?,;j9/<?0kuC&RcjH?i3b:H^Ps,\Rp)hRDKM6v]=VWtFăU"'n+sFh5]*kXLlsBf+q<HlOqvZ<]*LNo^;\_]LNHQ[.oos7LlB;Qi%ef4S<v>eolăU"D/:RX8P-#-=38NV5zhZ0\#9Pte-HF&R7WQBefx-tS0$PU3.j'L$yC0uTDyt>Ih,ăU"[2M[nkCGxil$keEjm=o&qQ1R&p3jG>W^3jP.&__s:bh(uCfF+U?I8U;:X$>Zt)$ăU"AvS7t8X59cy6;9J]H^i;h13E7YR+tenKD2FJmcEtyBC-NQxH_-7rJAZ#*ouo6L?ăU"mBsp)v+]2o)#l%b\-J6Q0EG;+Z8HaXG>(kAc#Nl=sC0=&WQH-f)z,jL;T&[m8NNăU"/?:cA'E1%XM:t8\t7PwG$)^]bXq]Gm7q<j;=[3+1HQw,a9r393't]_uoQS,AeUCăU"gr)P/_8PiBs-d0t9Zu7aZ+2_b]1Z3reT:p=x/P*M9bc*lJR7c>cNTQR\2wp^\M+ăU")-HA6:zf6jC*)l.33L5Cf^22pd3OZMXx#Xr<Q5M4)u7R\Xr#$wq29?tQaPYM2V1ăU"Zi7t2d\$M^K$pI:nQqCG>tpGP_2<Lr/Ni*EhSoSBMP5=#gK>2^:n<*SSq.lGVUuăU"wJxb-5h\yTi$wuYc,DkPL=(1FN10KC$AT-:./]kg//[;T+jCb_(Flejn\mBivqbăU"]AE4dkXo:t?2gxDN61b%*=R*n]c8\zcK+k)t&K*0cRpR?R^JrS/MakP4lZPt&^XăU"\99fVBctg8Xv[A.xTS1l5n>LdQ<En;:8<gd$VNO3vH&t^M,O]Q(d1$.,sU28r9zăU"tUsbv#:kJ,nF85skHujcF*L'NW/I'FXMhL/ZCvO&#MU\mLNKmXk:X2^ri9Wn2wsăU"m>c:)X,dK,?QS0W13fGQkVl9R;G3_AE8k62kRj]4j,eJ]*?lR6kVZ#RvkZ&]%O9ăU",gGom]P^%G[,zkZ&_%kB,,]zl[%i,4?G9^i,B%#VhR,IlGOBOc9R+Gp[AO=/(X6ăU"CEG)]:l^%\,WFk.Bu_^E#e(<6xiAhn,C%6/6FfGgk><ZefrGMERqrkfYfeLkfl]ăU"e#GYMCR=rGmYeq6kfZoenGohAEO,\6^$AiRBkv1P6V^0t*6lR]$C(:D6#]ftJ68ăU"H[e]6$(?[=0RU6HqklYejZG-$=1dv#fG]68H^e16\6^$#rRHGWl[e<Go?]490R]ăU"6<F^t(6?xBR$tk6DRhJk,[oehGwH=RI6Y#G'?qEd,8G?o^66P*2IJ/+WB[G*EQ&ăU"XyU0q3O(c-tj;#tl:35s&gIObV_wv>i;sZXJnNTcnNJn:jTnj4Jnz03d&f9W&x%ăU"+7xJLolTX>kYj>pNotqG:\5[+6F0b=lZ#:XR6PaVR^bqQrk:9z(C8d1C<CC,f'LăU"\r3/$c>oPe86ijHKNKBDdVdYWm-mD>$?T<Geg9._ty7]3uos3rUcLBmCN*LMbATăU"3'ae-n,PrjDa<EvUy>IqG0?0G#S1HDsoX.n+Ev(N5N8eDhew*Lr#sl$6.knnMrgăU"T$dG7mI9I(Ka)juToKbG\fqGROwgzXSX^\S?bc5MRct\dfX\$wjvDgCss](nIm-ăU"3mTg+r_RgOxFY79p:,v>s&_kYpR_Cnppnmiv5vIXGllsin.0GtlJs0,jjT9$S/3ăU"f?N?ZV7D7n_BFT/L$IkOmOl_Epa$FISQxUkjYpNX>f7j[la*=pDUd5G<QMk^jRxăU"isS\h+Zx>r_]a;N6g<QrhgBXX.mVr_L;hF:l[p)njD6V9$4T0WQF/Wvyu>ag8KxăU"gu7]UjM_L(TUE-'Xs/(_JNQCltkm\KZv-B*tTsnu5V^.-9VS8I<mv+xiqH)WaTKăU",^SN7sQiuLp#0],TkW^WIbkA6wxj$r8*/:rCv]uPXJ4,+S$'Ai8m^$pDDj\IEa,ăU"v+;^);/pwLxCl44n:nlX8F.sHK8h>ajszat<3W'0dG,<idirdgw,<3jSLD2B'*;ăU"XbqIwqHP-wwCiEpU'I2MDpiM,'u&3/dNSX#92NORg_X+#vKfrYfV+mhH&igCrKTăU"9y-Z0/)1arJ(Xi/$z<HV_H&toD6>qvd4U^BPrBk))RWYO[o:h5bmN-MSCufSZrFăU"nv9('MRtfcY%SD+n:pcPr;=bk&J'Cjq'YXVa*<<m2Ij)bjrf3p+MdogLCn%+Y'4ăU"'y5s/eoP&T::V9_ZA[<<[2l6W\fNAB7H5t^I6(oi$(5*37vA#f6<VCHuMbF,D?$ăU"3Y_0pd_Ejn1[;a$a;;Va,S[r?UW]mWUPo5-0[k9tKF-aR0L7/MV?1Nu)<gR=io.ăU"4u%Kslfqg<wFs=kz'K.n[YD2V-7*Fa1cr.)[iTtz+6j(U-A3xpjE(tx'4BF-DK_ăU"x_kCtPcn+K871;Gin?+&m203VM0Fo'S8[$L;)4K2Rs(A)A(<p4HY'jmpRsb-J4kăU"&j(MMfO0cG''e<_TMP/CPD1d%7=#4/VZ+oQ%gyRnm;Z./5H.PE69sCZXX]jFf1\ăU"Fso8q.rpiy>V)S.1ouMm.-nHbsSor:-Pb<%:/R07;xOu656oY08);Cn)_hjbTaOăU"NIuTcWN>kW/GVjqa%ALqsJO05+Pu38;TF-eCJN.42ZA*=$)KFc*cS0SNxLfW\8jăU"='KXhyr-u1=A-wKcna$01M/<Pe^z)ud3K;09cSfy.N'qQa8(j[<M^&Oz>SiM*$1ăU"/;:+Q;zgN>TqmG7&l*%-zz;XyY_r&aT1a94&'7Qe6Qqs,A77*+?r*<Gvx+%up&'ăU"%9%9%%%%-%:S;&G3<j:%'r&%%&U*%%%-%%%%%%%%%&%E%%%%%%%%%lw%fuSg%fxăU"up%&'9%%9%%%#-%F;0&GG=%d]Q'.%%t*%%%/%%%%%%%%%&%%E%%%%D'%%%lwfu%ăU"vgSg%fxup%&'9%%9%%%I-%Q9f&G02)p)Z%%%%%&%%%-%%%%%%%%%%%%E%%%&B)%ăU"%%kfhj%Sify%up&'%9%9%%%%-%:>:&Gr0LS;'&%%%'5%%%%1%%%%%%%%%&%E%7%ăU"%G)%%%uz%ygqp%VXSt%goup%&'9%%9%%%#-%Q:T&G(a78F\1.%%J9%%%/%%%%%%ăU"%%%%%%E%%%&t*%%%uzyg%qpSv%qgup%*+%%%%%*%%*%;&7%%)7%%%%%ăEND SUBăCLOSE:IF S=134AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDenis Boyles                   ANIMATION DEMO W/PAC-MAN       FidoNet QUIK_BAS Echo          04-28-97 (19:09)       QB, QBasic, PDS        123  3420     PACANIME.BAS'-=[PACANIME.BAS=- v1.00 Public Domain (pd) 1997 by Denis Boylesă'ă'Microsoft QBASIC v1.1ă'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ă' This program demonstrates the following concepts: transparent sprites andă' flicker free animation. The animation is done by using multiple video pagesă' in MODE 7. However it can be slow in QBASIC and you can't readily applyă' this to MODE 13. (256 colors) Since that mode only supports one video pageă' as standard, you would need to resort to a separate buffer. (or try ModeX)ă'ăDECLARE SUB DrawFrame (iX%, iY%, iClr%, iFrm%, iFlp%)ăDECLARE SUB SetFrame (iFrm%)ăDECLARE SUB SetBackGround ()ăăCONST PacColor = 14ăCONST YPos = 100ăăDIM SHARED LN$(16)ăăx% = 0: xDlt% = 3ăfrm% = 0: FrmDlt% = 1ăflp% = 0ăăSetBackGroundăWHILE INKEY$ = ""ă  DrawFrame x%, YPos, PacColor, frm%, flp%ă ă  x% = x% + xDlt%ă  frm% = frm% + FrmDlt%ăă  IF frm% = 0 OR frm% = 2 THEN FrmDlt% = -FrmDlt%ă  IF x% <= 0 OR x% >= 303 THENă    xDlt% = -xDlt%ă    flp% = NOT flp%ă  END IFăWENDăăSCREEN 0, 0ăWIDTH 80ăăSUB DrawFrame (iX%, iY%, iClr%, iFrm%, iFlp%)ă  SCREEN 7, , 1, 0ă  PCOPY 2, 1ă  SetFrame iFrm%ă  FOR y% = 0 TO 15ă    FOR x% = 0 TO 15ă      IF MID$(LN$(y%), x% + 1, 1) = "#" THENă        IF iFlp% THENă          PSET (iX% + 16 - x%, y% + iY%), iClr%ă        ELSEă          PSET (iX% + x%, y% + iY%), iClr%ă        END IFă      END IFă    NEXTă  NEXTă  WAIT &H3DA, 8ă  PCOPY 1, 0ăEND SUBăăSUB SetBackGroundă  SCREEN 7, , 2, 0ă  FOR ct% = 0 TO 199ă    LINE (0, ct%)-(319, ct%), ct% MOD 16ă  NEXTăEND SUBăăSUB SetFrame (iFrm%)ă  SELECT CASE iFrm%ă    CASE 0ă      LN$(0) = "     ######     "ă      LN$(1) = "   ##########   "ă      LN$(2) = "  ############  "ă      LN$(3) = " ###  ######### "ă      LN$(4) = " ###   ######## "ă      LN$(5) = "################"ă      LN$(6) = "################"ă      LN$(7) = "################"ă      LN$(8) = "################"ă      LN$(9) = "################"ă      LN$(10) = "################"ă      LN$(11) = " ############## "ă      LN$(12) = " ############## "ă      LN$(13) = "  ############  "ă      LN$(14) = "   ##########   "ă      LN$(15) = "     ######     "ăă    CASE 1ă      LN$(0) = "     ######     "ă      LN$(1) = "   ##########   "ă      LN$(2) = "  ############  "ă      LN$(3) = " ###  ######### "ă      LN$(4) = " ###   ######## "ă      LN$(5) = "##############  "ă      LN$(6) = "############    "ă      LN$(7) = "##########      "ă      LN$(8) = "########        "ă      LN$(9) = "##########      "ă      LN$(10) = "############    "ă      LN$(11) = " #############  "ă      LN$(12) = " ############## "ă      LN$(13) = "  ############  "ă      LN$(14) = "   ##########   "ă      LN$(15) = "     ######     "ăă    CASE 2ă      LN$(0) = "     ######     "ă      LN$(1) = "   ##########   "ă      LN$(2) = "  ############  "ă      LN$(3) = " ###  #######   "ă      LN$(4) = " ###   #####    "ă      LN$(5) = "###########     "ă      LN$(6) = "##########      "ă      LN$(7) = "#########       "ă      LN$(8) = "########        "ă      LN$(9) = "#########       "ă      LN$(10) = "##########      "ă      LN$(11) = " ##########     "ă      LN$(12) = " ###########    "ă      LN$(13) = "  ###########   "ă      LN$(14) = "   ##########   "ă      LN$(15) = "     ######     "ă  END SELECTăEND SUBăEric Carr                      RENDER 3D OBJECT               FidoNet QUIK_BAS Echo          03-08-97 (18:20)       QB, PDS                105  6926     R3D.BAS     DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"R3D.ZIP",4^6:Z&=4925:?STRING$(50,177);ăU"%up()%9%%%R-%(=K&GSp/+(F1.%%vM%%%/%%%%wj%sijw%SgfxKN?:BoLmk4bzuăU"DsB5+I_W,I:Qg;wa&X.a);K(IRsDJdFQ/Dz?w_XxroiP.FHfa>6BWO#0J^nHaLZăU"LVL^bhgvDqPgFvS'e+mGQAGNj*S5%d4,<q/K^Zel4369?n6Wy*-+L'XnsiGPhsxăU"w\W1-il,AwB<twBWmsfD%ot+]MI9;q4.[2xN&;?_YMsu?7QaK_il;>0-6alkTNvăU"ODXfsXxAk7*J-+=(hb92)nIGFcB5(AZjE$[>Ng*jIVpH<^'QjU7F9kaL4onnQP\ăU"hEMI/6h)*E<:;Wl>*rd)%Y)c=VVZRK%B-4CBuYbi\U4-jg]+sYUtYZ/C]gRrC-tăU"t-CH<%7&Crl:tvAolDeib8gqm^k&Jm#kb<ML'=&m*EG,;4I86cBQ.(#j?8V?=p;ăU"AQ^)0D.eHQe[;Nk4IUtiNOb,_LVl1B4Md,DQne+nMo(HIp(e.]ob=9;R?0TRTS7ăU"kMFxJGR>Aw:&wXW-m?h=j1WU&p[yOrJ/W%b<Wq^[;upTFbZoPFMPJ/R^S6<i9llăU"2c,57CH'RCI,'/W*gCf50Rm%ZaZ20)DJUP*G$xsjOka=mKrgq:'<:.OKNI^PNK?ăU"]Sxxp//XU<gUajNj^ZDZN&D3\65ZoFeDrg9n+Qa=Q<p/JdE^<?3n9^2d7iQNip?ăU"_E2T'$9.7ci5rxN6V_+;\h=tDDvNP\z4t1939LtUn+IsC6eM5hu=i9#-pkY3fR<ăU"n;VPP3(qFV9[3&uM6E&k6d-ZZ/a\4tuYj+MwJHT7#NM4n3lSZ'wG=4+,ZVE-]rpăU"=/\ELRX;]+4%GO4MRhItZRTDo.dSoCLlR_34ot)^NZ75Q<ssZ\o3-SfHMGS[U,RăU"^/Be\A^JlMZ1.Us80LJVCdRHhIlZhDC+l/Vn+WQ<J^d.\=p>J\cm=Ho]&1V(qiKăU"K+IbUjNc&cRB%3rFyGMdaPs=/T;uXT8L(<vX=c4?;=/1/(hL<S)2_Xo(BTj2RYrăU"CQC;apA*#x_iUeJN4E+qr%(y3jj/%y3j_j;F+Vc,2'euEe#;it,X&p6Y1W?mCUOăU"Fr,H&(Q'-q:>m/tN-RgUkC33Q_*47oYBI1qN.g(i7+ci;HBW/101F'/6D4M(E-lăU"z%e=3yjU)kZgeu)LRx^P9crQYBWDedoOqw+s;xOK%E&S.?C]_OFc/=8P*\<Lig0ăU"QZq#P2nT=U9K:fdl;YeaGS'd+V)[JpA)a1bbcM3i9hEQV=M[ba'0e9SKnW<eh<făU"*YvcqG+LU\oB4qZ^CDALG?SbkFzQZAhT*ro#V#wr$X:TJ?$TYot_NgVaamW':L>ăU";:&)GC3Na?pA)7J/#n;YgSjrPp'bLiu?0;4=bqM9kiKBxbVg4liurlk0C,-W&P;ăU"Gk<63;.^e6C$#s.lMNbs'25][l$rJn_UUvDmHZ3K5txzLKURD?GT*_Ff/L>6//8ăU"?Q-JVR\/^AE*<T%2^FucJ+Ad>sgbJU?XhAm'L/nYmO4^4f^1h/^=cg=c,Ma?8^<ăU"%0F?'Ie[Jir7Ej0FxI/k[ih\7s0F?&IU[eip7g8?ePl#9&Kk2M8RFL7\Ae8Y<'LăU"lfGsF6DNbs>6KZj9cn0XBbOTtGQ(#\YXJtPj,ZgVolk]\BC<3nCXm=\E9.)C;6căU":h5]kJzMoz^/NIqXj/SqFM>D#*Dj#&:CZ^R>MQ4tCS_NrDT3poEMY<5C-sSxUWiăU"^6vx<6Jr+;P_ZE>r1gt48FIg/fn]1X.ClW>=gU_-U3W?IEjm&C95h$7XjG97^x]ăU"2f>W7;askx%<Zix)dgj%Q$JD4w:DKnl5m=RfSF?7a:nhh&Y#h+G117F66dia6-răU"Qn/s.pYQSnn#Wt''[J_cS7Q]%SCkIqC_/E*k,\[-jL%^Ov74OgaN=oPS=45qCZMăU"d*Jz;u_OZOE&AF)IzNS5Fz*10.?XG3)7]g,.Yj4=DXpke9#-QH8C4fj.+OS/Q/MăU"8h%qM4vstSqHA;fz&BrHh(5D(g/N*qzO=,*Ex_zD_O^QlW?8A*dj4?G0b]l8VOuăU"[*'+74_&0JJ\1FWpPKr4D>6AawD<a%eAhGWa;VNNfjC.SmKw*#&HL'Z>D8]uqojăU"=4Zb]wgbS?WsxU<*QWCTBu.ABRPmp_gmL'cReoX:.Qawp5D1nS,UcXOrEv*42NKăU"pNyY5rO^=2Go<$0JM1tSR[ihsiu%,QFr.'UCklYQRdG3%hC((BT:C/4#;C<VQpxăU"=4([<=rd\LH#rbI()wTE&\'?rh$yum4&V*5-L'U#h:AG)+^dF7M&+_S9m$5iFR3ăU"od(6fs4OQJgZ;fob.oFwk%f/p:hR[[)xc]?]<LfiIC11bDI+yQC3a3OD4l^#=n3ăU"**Kir_>h\;)i^]3_LG-%?dBsq_X'<9Xf\rswIJ3QSJ5Kdg4j1F;baprhVioCc07ăU"RQZYI&gd$9SLIfGH.4rf[.OQGs^31(&L7$QET.XYI8v#uY3vmmB*'ECquBEP4n*ăU"j.T,qSbve<Jyv#:vJ-0Whzii.*q[91_0a6_#$nLpEDsfsOh]E(*y?'SO]bI:AtQăU"'l::IG-WhzLy?M^4/O0:c%Xu:q<zYo1y?d/Eg&y__GH4&=w:vbXOI,r>S68Wq/iăU"l'j_%e&\]=:ObxTSqPR/$z;>it%DP.yP#t3KeK]u$%t6,v;DU=ujKc'tYB3\0VmăU"rNclc_U#v#-v=[46NO2gzKisiN*N'5D$y9l2b7LkLTqPB.WS</]59wi*Bm?S0YOăU"a%YCH74lWry83H794s<TDT$zbb=EPvO'Nz(=13uk.>/]:PjFdDa,P*,DHa:Ght8ăU"L*gcjT*m-E.&6,4W4oAG'B_knX>ZI9^R.I>A<71n+,2Ud?1w&VLYi.kXNc_voP[ăU"bG6o.ct(B#Ru]njX+v?IoNp,W\9#4g$A^\EU0?]U3Z+tK5^W.27,vO'JKexr'5*ăU"]f69$<0?)23FsF6xZR<bc)Fgh%ee>u5DhA;lXF.I*XtbC4P<Z+9o/W\A;MmRDR?ăU"ZFpsumSboO)*7n-p>\sI5Cl>k3qaG[\z<)]xAAd6R:;VtjXI_rI*94/vjI(Bq$wăU"23_*FuLbf'Fgm]FFtBR-.6g&XSqnEP6=bLVZp^4,OQ305vkKO,plomCP_[a*&)DăU">rNkHI,p1\BYk*7J3K[bBupCJ<Wl30ke\%x^tvAhvs4c7VuRRbO4p*+JysXh^mwăU"qkUCbFv22d3TrA#jO0q[7HG+U/d,QH&%OWw'NEr1WAuMr1+,Xbt9I1QVrUpM]xaăU"z84;YOB]It*a&f'yRSq,X:AC6zACb3h0^=Vyj%B3'?L+Kk#3_HlfR>AIt9xN3QHăU"nxghgF,7AWfJ=s]u8up]j4lo-,#t6%JE9O.SFYQUS4UpSslJCh%fhJ<TSv5,5DiăU"h]O_L?c5;v>M9TbSJZ?vv6lFnb-uPG-=:]7C^fw-pA<H-d+%8CfYwep<%H-:BB8ăU"Cfw6Iq<HUma2F\WEngfWVQmqE[sba/f<SFO-x7GbICp9ff4h2<[MbI&F%z2Oy#^ăU"jI,C.3N##A*$Aq0C,E,jdOPhVb/L]0O#e_gg,0+l9nEAPk'>jiBe/t#FI5/%&#JăU"XG+M,amoay^QJX>12&VF[,*POGF-c>lc>H$(5/1E/]hW%h5K,iz+HOFG$TD?Q?EăU"i/Wh=)*x3Kodf?hMEIV)z\+[T#8rIkqnoU14Ka8n,:CVZBrREc08)fO7/f?l2X+ăU"ej21owu#fgk56KX*,oo6<f8Pzi/))Mn'smz=\b5(K36pkEL/(VcMr%A9/;sk5-UăU"[IVAXxmk89oBN55G#HGbk%B\Y$W**V2N832puyhkgBUTAytfL]D3Y7JKDi_k9oBăU"Xnr$19l05Tlp8c^m3s04*kA]5WCvKb1Cslb.?8RI5zp7qeqJH6Cl&wDp4%K3OCiăU"dj^[-jc2Pn&E%jbAi95QfE3_omtVif_xB&I8d]g2$MV,_cx^wl^%1->Bj.dT_yOăU"8BRe]'bv&UTH]<UCS01W5+RQr6_O/Rpj/&[dV]XfgcHNF#Fz5^EpcJ/''Z,%+dKăU"jRY:&Ad:asC[6PiHe.y?c'aFr6%ncCYBqw1((aaLS21d9S]fRJHt5=3MdLYy0,căU"]wl*9N(u%p()9%%%%-j%D=&RG$?C'fe'%(%g)%%%,%%%%wXi.Sy'yB&yp>]Le57ăU"P*kNg%x4eR#z*F_1eSGp^Htn]c1m5nl)o]\Y<[VCqFRB8265lc,_S(7S#CCI67#ăU"MX-dLTTD-8wWe(SYlLAMY1p^hHYdQ$RP,-P$Jm(O19./cLq,bh,5$>31\dvvsBMăU"3%Y1[Ko=^/HFepa]v/;'b_#pQ$7TIA*zcz_<fK(f3nb+TNCgzfpD/$?eSB32K:JăU"4:7If5^?)fqbt*,d;/6..E#N2dtGVf/+-$OrM;DVD(%89].Y/l,^BWH-C5)IAEmăU"mfzN[e4&*L*-[_9P[Hc.ajO3q6dduNUfvn$rRYLXuG44xxKB1XoFLO:+1Tc)p9tăU"krtzr]nwiJN0?4N;0+eQ[:fVrV#(?<at>jBNa1-]#o6pUFu+</iPZWB]$\X?qCKăU"0WM)^]B2=srw4,+f,PY>E[.q8GsVG80YH;ar3^B;1UBNc):GgxX2DqAYF-kER>găU"]Hcpc:B+2(6pJ4DowBDlIO?K9xT$Yr28J9Q:g0\m&I%&gz#kW.B,3z*=e48&c&qăU"?/mG9re_#<Oj)R),1sbo$JKO[b5wi$iOQ#$5k<rj\+Vq$ueyZ5)AG5obtmVif)PăU"U*mbyJkt,eSdU=y+WaHI=VtBwM$kAQ]7Zo8jhp$]G=r2GmUheU)cmKjWmg4\RHsăU"Lg*sl'.WeL7\-tBS<ibu)p18C\I2U.AE(WsiBAC.Jg/U%.,-VBa#_lB0L_F[YU9ăU"0%\QD50L)\Mc<n8k,%up()%9%%%[-%['#pG7c+>ZH%%%%r%%%%.%%%%xf%ruqj%ăU"SXiX-[^W)%GBx(.B(-S.E.6=)Q7hM.*z1')&2'x&3'z*&q&up%()9%%%%-%(IzVăU"Gp7=I^'P'%%%%5%%%.%%%%rfuU%WSyjh'tf:,QUU-1h^<tnJUivu8SGQVamL2H+ăU",XX\\f-[Riz.%c&vxXQHw)JesCRdYBMp6XT=(%n;lTm$%'C<TM[w)<ME8<oMV$kăU"*\GBM=0D/<LFoP/9N'qPEP)--[nt3-O]PY&ji*%ZXYBUZqD(ZkAkAMV/g'SOFw.ăU"5IsLnt^uj$^julkqnrkgbrupXvrWsmfPlBr7a>2N$lj(tqHWnEmh$fBb#N5<=RlăU"Dt]O>6_1BMI>NC><0k%[pR4]t3I#l[q%^bJLOSm%])JMN9TS%eC8y%4q)#6)'[)ăU"-gmI==&1MKX%M1aWJjnT;brZ$'8AqBK#qAI<VfujSM8O9Dh&O67LxQ#WN?AD/YoăU":*zlQ%6cT?&<MWO-Rv;)b?72v?:WCYJ:tInJ:gGy];YF$mtR%ET'WR6GeW[/Q\PăU"/#X5qGXrAkB0#bDar78lpK2Gc)sXs2*Q5+($kQP]qs(#65<xRyAX?Ub,rKy2Y,lăU"4ZiI_1;<6R+d(PEZwF[4u:rmj%ejX1h>[]gWQ#I_W4bj2f#D\vIhXi<syYJ1i+)ăU"rnydTWE/C%&+;od-rU&Mw>f/-$+WEe&Q,Ybxx\brdUC<sFq)tk+EC9.K^fxnd*TăU"cA[s7)2kAoJf'WA$J7TDW/=yEg*vOF62?FXf\bZjB4bEVfWL<K#Gr*K;7$)p1GvăU"<Xpa3C5%PR>S]mS7oi_2S2hrb-=M1%H?wQUfBJJ20EcPj15DiRk\cSwJh*6^72răU"nlnH3hH_#,Ag27,TO-Evl>-vK)^G5c7]I%lrr]fTupH0hr8>X8?X7xp1x(:zXYHăU"JAo.S.,H%/Gt#;y4Tek*\OS&yNQMkruqiMQ[+O5.-y>DdJMsvDNA0=pB^Px];DEăU"/w0$5v^:I.A9=fZYS1/evFQ2Czm=X54m0)SEJF7M)W>f],QQP1J'p[1dNN&%up&ăU"'%9%9%%%%-%<(=&G2Sp+(&F1%%&vM%%%/%%%%%%%%%&%E%%%%%%%%%wj%sijw%SăU"gfx%up&'%9%9%%%%-%<D=&Gj$?Cf%e'%%&g)%%%,%%%%%%%%%&%E%.%%n1%%%wXăU"#iSy'%yup&%'9%9%%%%-7%['p.G7c>'ZH%%%%r%%%%.%%%%%%%%%&%E%%%%)%4%ăU"%x%fruq%jSXi%up&'%9%9%%%%-%(IzVGp7=I^'P'%%%%5%%%.%%%%%%%%%%%E%%ăU"%%s4%%%rf%uUWS.yj'u%p*+%%%%%)[%)%T%%%%q%7%%%%%ăEND SUBăCLOSE:IF S=119AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDavey W. Taylor                FLAMES GENERATOR               audio.squad@mailbox.swipnet.se 05-15-97 (10:04)       QB, QBasic, PDS        41   779      FLAMES.BAS  'Slow, but it works!ă'Davey W Tayloră'audio.squad@mailbox.swipnet.seăSCREEN 13ăFOR n% = 1 TO 16ăPALETTE n%, 65536 * n%ăNEXT n%ăăFOR n% = 17 TO 32ăPALETTE n%, 65536 * (32 - n%)ăNEXT n%ăFOR n% = 33 TO 96ăPALETTE n%, n% - 33ăNEXT n%ăăFOR n% = 97 TO 160ăPALETTE n%, (160 - n%)ăNEXT n%ăăDOăFOR x% = 0 TO 319ăPSET (x%, 199), INT(RND * 64) + 97ăNEXT x%ăFOR y% = 169 TO 199ăFOR x% = 0 TO 319ăc% = 0ăc% = c% + POINT(x% - 1, y% - 1)ăc% = c% + POINT(x% - 1, y%)ăc% = c% + POINT(x% - 1, y% + 1)ăc% = c% + POINT(x%, y% - 1)ăc% = c% + POINT(x%, y%)ăc% = c% + POINT(x%, y% + 1)ăc% = c% + POINT(x% + 1, y% - 1)ăc% = c% + POINT(x% + 1, y%)ăc% = c% + POINT(x% + 1, y% + 1)ăc% = (c% / 9) - 3ăIF c% < 0 THEN c% = 0ăPSET (x%, y% - 1), c%ăNEXT x%ăNEXT y%ăLOOPăDavey W. Taylor                DISTORTED TORUS                audio.squad@mailbox.swipnet.se 05-15-97 (10:04)       QB, QBasic, PDS        94   2328     TORUS.BAS   'Distorted TORUSă'Davey W Tayloră'audio.squad@mailbox.swipnet.seăDECLARE SUB MakePal (start.slot%, end.slot%)ăDECLARE SUB ReadRGB (red%, grn%, blu%, slot%)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăTYPE rgbăred AS INTEGERăgrn AS INTEGERăblu AS INTEGERăEND TYPEăDIM pal(255) AS rgbăSCREEN 13ăFOR n% = 0 TO 255ăReadRGB pal(n%).red, pal(n%).grn, pal(n%).blu, n%ăNEXT n%ăCALL WriteRGB(63, 63, 63, 1)ăCALL WriteRGB(63, 0, 0, 63)ăCALL WriteRGB(0, 63, 0, 127)ăCALL WriteRGB(0, 0, 63, 191)ăCALL WriteRGB(63, 63, 63, 255)ăCALL MakePal(1, 63)ăCALL MakePal(63, 127)ăCALL MakePal(127, 191)ăCALL MakePal(191, 255)ăst = 0ăen = 3.14ăFOR n = 1 TO 4.8 STEP .01ăsa = sa + n / 1000ăs = s + saăc = c + .4ăCIRCLE (160, 200 - (n * 40)), s, c, st, en, .5ăCIRCLE (160, 200 - (n * 40)), s + 1, c, st, en, .5ăNEXT năst = 3.14ăen = 6.28ăs = 0: sa = 0ăc = 0ăFOR n = 1 TO 7.3 STEP .01ăsa = sa + n / 1000ăs = s + saăc = c + .4ăCIRCLE (160, 200 - (n * 40)), s, c, st, en, .5ăCIRCLE (160, 200 - (n * 40)), s + 1, c, st, en, .5ăIF n > 6.6 THEN CIRCLE (160, 200 - (n * 40)), s + 2, c, st, en, .5ăNEXT năRANDOMIZE TIMERăFOR y% = 0 TO 200ăFOR x% = 0 TO 320ăPSET (x%, y%), POINT(x%, y%) + (RND * 8) - (RND * 16)ăNEXT x%ăNEXT y%ăDOăWAIT &H3DA, 8ăCALL ReadRGB(ored%, ogrn%, oblu%, 1)ăFOR t% = 1 TO 254ăCALL ReadRGB(red%, grn%, blu%, t% + 1)ăCALL WriteRGB(red%, grn%, blu%, t%)ăNEXT t%ăCALL WriteRGB(ored%, ogrn%, oblu%, 255)ăLOOP UNTIL INKEY$ <> ""ăăSUB MakePal (start.slot%, end.slot%)ănum.slots% = end.slot% - start.slot%ăCALL ReadRGB(sr%, sg%, sb%, start.slot%)ăCALL ReadRGB(er%, eg%, eb%, end.slot%)ărr% = ABS(er% - sr%): rg% = ABS(eg% - sg%): rb% = ABS(eb% - sb%)ărs% = SGN(er% - sr%): gs% = SGN(eg% - sg%): bs% = SGN(eb% - sb%)ăstepr = (rr% / num.slots%) * rs%ăstepg = (rg% / num.slots%) * gs%ăstepb = (rb% / num.slots%) * bs%ăr = sr%: g = sg%: b = sb%ăwr% = r: wg% = g: wb% = băFOR t% = start.slot% TO end.slot%ăCALL WriteRGB(wr%, wg%, wb%, t%)ăr = r + stepr: wr% = răg = g + stepg: wg% = găb = b + stepb: wb% = băNEXT t%ăEND SUBăăSUB ReadRGB (red%, grn%, blu%, slot%)ăOUT &H3C7, slot%ăred% = INP(&H3C9)ăgrn% = INP(&H3C9)ăblu% = INP(&H3C9)ăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ăOUT &H3C8, slot%ăOUT &H3C9, red%ăOUT &H3C9, grn%ăOUT &H3C9, blu%ăEND SUBăDavey W. Taylor                ROTATING PLANETS               audio.squad@mailbox.swipnet.se 05-15-97 (10:04)       QB, QBasic, PDS        51   1051     PLANETS.BAS 'Rotating PLANETSă'Davey W Tayloră'audio.squad@mailbox.swipnet.seăă'--- setup ---ămoonspin% = 16ăearthspin% = 4ăyflip% = 0ă'-- program --ăpi = 3.141593ăa% = 1ăyflip% = earthspin% + yflip%ăDOăSWAP a%, v%ăSCREEN 9, , a%, v%ăWINDOW SCREEN (1, 1)-(640, 350)ăWAIT &H3DA, 8ăCLSăd% = (d% + earthspin%) MOD 360ăr = d% * (pi / 180)ădi% = (di% + yflip%) MOD 360ări = di% * (pi / 180)ăs = 10 + (COS(r) * 10)ăx = 320 + (200 * SIN(r))ăy = 175 + (50 * SIN(ri))ăd2% = (d2% + moonspin%) MOD 360ăr2 = d2% * (pi / 180)ăs2 = 4 + (COS(r2) * 2) + (COS(r) * 2)ăt = 50 + (25 * COS(r))ăx2 = x + (t * SIN(r2))ăy2 = y + (4 * COS(r2))ăIF (10 * COS(r)) >= 0 THENăCIRCLE (320, 175), 100, 14ăPAINT (320, 175), 14, 14ăEND IFăIF (10 * COS(r2)) <= 0 THENăCIRCLE (x2, y2), s2, 6ăPAINT (x2, y2), 6, 6ăEND IFăCIRCLE (x, y), s, 9ăPAINT (x, y), 9, 9ăIF (10 * COS(r2)) > 0 THENăCIRCLE (x2, y2), s2, 6ăPAINT (x2, y2), 6, 6ăEND IFăIF (10 * COS(r)) < 0 THENăCIRCLE (320, 175), 100, 14ăPAINT (320, 175), 14, 14ăEND IFăLOOP UNTIL INKEY$ <> ""ăăDavey W. Taylor                BITMAP LOADER & SNOW           audio.squad@mailbox.swipnet.se 05-15-97 (10:04)       QB, QBasic, PDS        297  6807     BMPSNOW.BAS 'bitmap SNOW!ă'just create a simple bitmap in paintbrush and try it oută'Davey W Tayloră'audio.squad@mailbox.swipnet.seăăDECLARE FUNCTION SetCC! (ch AS STRING)ăDECLARE FUNCTION GetBMPInfo! (f$, info AS ANY)ăDECLARE SUB SetPal (Attr%, Red%, Green%, Blue%)ăDECLARE FUNCTION ShowBMP! (f$, bx%, by%)ăRANDOMIZE TIMERăDIM SHARED usedcs(0 TO 255) AS INTEGERăDIM SHARED unus(0 TO 16) AS INTEGERăTYPE flaketypeăx AS INTEGERăy AS INTEGERăc AS INTEGERăEND TYPEăDIM flake(1 TO 100) AS flaketypeăDIM lflake(1 TO 100) AS flaketypeăTYPE BMPInfoăfilesize AS DOUBLEăoffset AS DOUBLEăsizeofheader AS DOUBLEăbmpwidth AS DOUBLEăbmpheight AS DOUBLEăbitplanes AS INTEGERăbitsperpixel AS INTEGERăcompression AS DOUBLEăimagesize AS DOUBLEăpelspermetrex AS DOUBLEăpelspermetrey AS DOUBLEăusedcolors AS DOUBLEăimportantcolors AS DOUBLEăcolorchart AS STRING * 768ăEND TYPEăCLSănf:ăPRINT "320x200 bitmap file (<ENTER> to cancel): ";ăLINE INPUT f$ăIF f$ = "" THEN ENDăDIM nfo AS BMPInfoăON ERROR GOTO NoSuchFileăOPEN f$ FOR INPUT AS #1: CLOSE #1ăON ERROR GOTO 0ăr% = GetBMPInfo(f$, nfo)ăIF r% THEN GOTO bmperrăIF nfo.bmpwidth <> 320 THEN PRINT "Width must be 320 pixels!": GOTO nfăIF nfo.bmpheight <> 200 THEN PRINT "Height must be 200 pixels!": GOTO nfăSCREEN 13ăr% = SetCC(nfo.colorchart)ăIF r% THEN GOTO bmperrăr% = ShowBMP(f$, 0, 0)ăIF r% THEN GOTO bmperrăFOR n% = 0 TO 255ăIF usedcs(n%) = 0 THENăunus(thc%) = n%ăthc% = thc% + 1ăEND IFăIF thc% = 17 THEN GOTO OOOooo...ăNEXT n%ăWIDTH 80, 25ăPRINT "I need at least 17 colors free!!"ăPRINT "Try using color reduction...."ăGOTO nfăOOOooo...:ăFOR cpa% = 0 TO 15ăcpl% = 33 + cpa% * 2ăPALETTE unus(cpa%), cpl% + 256 * cpl% + 65536 * cpl%ăNEXT cpa%ăPALETTE unus(16), 0ăFOR y% = 0 TO 199ăFOR x% = 0 TO 319ăc% = POINT(x%, y%)ăCOLOR 2ăIF ASC(MID$(nfo.colorchart, 1 + c% * 3, 1)) < 16 THENăIF ASC(MID$(nfo.colorchart, 2 + c% * 3, 1)) < 16 THENăIF ASC(MID$(nfo.colorchart, 3 + c% * 3, 1)) < 16 THENăPSET (x%, y%), unus(16)ăEND IFăEND IFăEND IFăNEXT x%ăNEXT y%ăFOR n% = 1 TO 100ăflake(n%).x = INT(RND * 320)ăflake(n%).y = 0ăflake(n%).c = INT(RND * 16)ăNEXT n%ăDOăFOR n% = 1 TO 100ăPSET (lflake(n%).x, lflake(n%).y), lflake(n%).căx% = flake(n%).xăy% = flake(n%).yăc% = unus(flake(n%).c)ălflake(n%).x = x%ălflake(n%).y = y%ălflake(n%).c = unus(16)ăPSET (x%, y%), c%ăIF POINT(x%, y% + 1) = unus(16) THENăflake(n%).y = flake(n%).y + 1ăELSEIF POINT(x% - 1, y% + 1) = unus(16) AND POINT(x% + 1, y% + 1) = unus(16) THENăflake(n%).y = flake(n%).y + 1ăIF INT(RND * 2) = 1 THENăflake(n%).x = flake(n%).x - 1ăELSEăflake(n%).x = flake(n%).x + 1ăEND IFăELSEIF POINT(x% - 1, y% + 1) = unus(16) THENăflake(n%).y = flake(n%).y + 1ăflake(n%).x = flake(n%).x - 1ăELSEIF POINT(x% + 1, y% + 1) = unus(16) THENăflake(n%).y = flake(n%).y + 1ăflake(n%).x = flake(n%).x + 1ăELSEăflake(n%).x = INT(RND * 320)ăflake(n%).y = 0ăflake(n%).c = INT(RND * 16)ălflake(n%).c = c%ăEND IFăNEXT n%ăLOOP UNTIL INKEY$ <> ""ăENDăNoSuchFile:ăPRINT "Can't find or open file"ăCLOSE #1ăRESUME nfăbmperr:ăWIDTH 80, 25ăSELECT CASE r%ăCASE 1: rm$ = "Not a bitmap"ăCASE 2: rm$ = "Must be a one plane bitpmap"ăCASE 3: rm$ = "Can't read rle bitmaps"ăCASE 4: rm$ = "Error in file"ăCASE 5: rm$ = "BPP must be 1, 4 or 8"ăCASE 6: rm$ = "Use a 256 color rgb string"ăCASE 7: rm$ = "Not a windows bitmap"ăEND SELECTăPRINT rm$ăGOTO nfăăFUNCTION GetBMPInfo (f$, info AS BMPInfo)ăOPEN f$ FOR BINARY ACCESS READ AS #1 LEN = 1ăx$ = "  "ăGET #1, , x$ăIF x$ <> "BM" THEN GetBMPInfo = 1: CLOSE #1: EXIT FUNCTIONăx$ = "    "ăGET #1, , x$ăinfo.filesize = CVL(x$)ăGET #1, , x$ăreserved# = CVL(x$)ăGET #1, , x$ăinfo.offset = CVL(x$)ăGET #1, , x$ăinfo.sizeofheader = CVL(x$)ăIF info.sizeofheader <> 40 THEN GetBMPInfo = 7: EXIT FUNCTIONăGET #1, , x$ăinfo.bmpwidth = CVL(x$)ăGET #1, , x$ăinfo.bmpheight = CVL(x$)ăx$ = "  "ăGET #1, , x$ăinfo.bitplanes = CVI(x$)ăGET #1, , x$ăinfo.bitsperpixel = CVI(x$)ăx$ = "    "ăGET #1, , x$ăinfo.compression = CVL(x$)ăGET #1, , x$ăinfo.imagesize = CVL(x$)ăGET #1, , x$ăinfo.pelspermetrex = CVL(x$)ăGET #1, , x$ăinfo.pelspermetrey = CVL(x$)ăGET #1, , x$ăinfo.usedcolors = CVL(x$)ăGET #1, , x$ăinfo.importantcolors = CVL(x$)ărgb$ = "    "ăcc$ = STRING$(768, 0)ăSELECT CASE info.bitsperpixelăCASE 1, 4, 8ăFOR p% = 1 TO 2 ^ info.bitsperpixelăGET #1, , rgb$ăMID$(cc$, p% + (2 * (p% - 1)) + 0, 1) = MID$(rgb$, 3, 1)ăMID$(cc$, p% + (2 * (p% - 1)) + 1, 1) = MID$(rgb$, 2, 1)ăMID$(cc$, p% + (2 * (p% - 1)) + 2, 1) = MID$(rgb$, 1, 1)ăNEXT p%ăCASE ELSEăGetBMPInfo = 5: EXIT FUNCTIONăEND SELECTăinfo.colorchart = cc$ăCLOSE #1ăEND FUNCTIONăăFUNCTION SetCC (ch AS STRING)ăIF LEN(ch) <> 768 THEN SetCC = 6: EXIT FUNCTIONăFOR p% = 1 TO 256ăs% = p% + (2 * (p% - 1))ăro% = INT(ASC(MID$(ch, s% + 0, 1)) / 4)ăgot% = INT(ASC(MID$(ch, s% + 1, 1)) / 4)ăbo% = INT(ASC(MID$(ch, s% + 2, 1)) / 4)ăSetPal p% - 1, ro%, got%, bo%ăNEXT p%ăEND FUNCTIONăăDEFINT A-ZăSUB SetPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăăDEFSNG A-ZăFUNCTION ShowBMP (f$, bx%, by%)ăShowBMP = 0ăOPEN f$ FOR BINARY ACCESS READ AS #1 LEN = 1ăhead$ = "  "ăGET #1, , head$ăIF head$ <> "BM" THEN ShowBMP = 1: CLOSE #1: EXIT FUNCTIONăx$ = "    "ăGET #1, , x$ăfsize# = CVL(x$)ăGET #1, , x$ăreserved# = CVL(x$)ăGET #1, , x$ăoffs# = CVL(x$)ăGET #1, , x$ăsoh# = CVL(x$)ăGET #1, , x$ăxs# = CVL(x$)ăGET #1, , x$ăys# = CVL(x$)ăx$ = "  "ăGET #1, , x$ăplanes% = CVI(x$)ăGET #1, , x$ăbpp% = CVI(x$)ăx$ = "    "ăGET #1, , x$ărle# = CVL(x$)ăGET #1, , x$ăisize# = CVL(x$)ăGET #1, , x$ăppmx# = CVL(x$)ăGET #1, , x$ăppmy# = CVL(x$)ăGET #1, , x$ăused# = CVL(x$)ăGET #1, , x$ăsafe# = CVL(x$)ăIF soh# <> 40 THENăShowBMP = 7ăCLOSE #1: EXIT FUNCTIONăEND IFăIF planes% <> 1 THEN ShowBMP = 2: CLOSE #1: EXIT FUNCTIONăIF rle# <> 0 THEN ShowBMP = 3: CLOSE #1: EXIT FUNCTIONăSELECT CASE bpp%ăCASE 1: cs% = 2ăCASE 4: cs% = 16ăCASE 8: cs% = 256ăCASE ELSE: ShowBMP = 5: CLOSE #1: EXIT FUNCTIONăEND SELECTărgb$ = "   ": x$ = " "ăFOR p% = 1 TO cs%ăGET #1, , rgb$ăIF nol% = 0 THEN GET #1, , x$ăNEXT p%ăSEEK #1, offs# + 1ăr$ = " ": g$ = " ": b$ = " "ăFOR y% = 0 TO ys# - 1ăgot% = 0: c% = 0ăFOR x% = 0 TO xs# - 1ăIF c% = 0 THEN GET #1, , x$: got% = got% + 1ăSELECT CASE bpp%ăCASE 1ăoc% = SGN(ASC(x$) AND (2 ^ (7 - c%)))ăCASE 4ăt% = ASC(x$)ăo2% = t% MOD 16ăo1% = (t% - o2%) / 16ăIF c% = 0 THEN oc% = o1% ELSE oc% = o2%ăCASE 8ăoc% = ASC(x$)ăEND SELECTăPSET (x% + bx%, (ys# - y% - 1) + by%), oc%ăusedcs(oc%) = 1ăc% = (c% + 1) MOD (8 / bpp%)ăNEXT x%ăDO UNTIL INT(got% / 4) = (got% / 4)ăGET #1, , x$ăgot% = got% + 1ăLOOPăNEXT y%ăCLOSE #1ăEND FUNCTIONăDavey W. Taylor                VERTICAL SYNC DEMO             audio.squad@mailbox.swipnet.se 05-15-97 (10:04)       QB, QBasic, PDS        34   1054     VSYNC.BAS   'Demonstration of how to sync graphics to the screens vertical retraceă'Davey W TaylorăăDECLARE SUB SetPal (Attr%, Red%, Green%, Blue%)ăSCREEN 1ăCLSăPRINT ".05 delay without sync"ăDOăSetPal 0, 0, 0, 0                            'change palăs# = TIMER: DO: LOOP UNTIL TIMER - s# >= .05 'delayăSetPal 0, 15, 15, 15                         'change palăs# = TIMER: DO: LOOP UNTIL TIMER - s# >= .05 'delayăLOOP WHILE INKEY$ = ""ăSetPal 0, 0, 0, 0ăCLSăPRINT ".05 delay with sync"ăDOăWAIT &H3DA, 8                                'wait for retraceăSetPal 0, 0, 0, 0                            'change palăs# = TIMER: DO: LOOP UNTIL TIMER - s# >= .05 'delayăWAIT &H3DA, 8                                'wait for retraceăSetPal 0, 15, 15, 15                         'change palăs# = TIMER: DO: LOOP UNTIL TIMER - s# >= .05 'delayăLOOP WHILE INKEY$ = ""ăăDEFINT A-ZăSUB SetPal (Attr%, Red%, Green%, Blue%) 'SUB to set a color attributeăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăăDenis Boyles                   SMOOTH VGA MESSAGE SCROLLER    FidoNet QUIK_BAS Echo          05-12-97 (23:39)       QB, QBasic, PDS        36   2271     SCROLLY.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLLY.ZIP",4^6:Z&=1419:?STRING$(50,177);ăU"%up()%/%%%R%%&S')GX\,dJK%%%%K%%%%0%%%%xh%wtqqA(Sx(dxC%1g%o]Qt]9ăU"7:YE89E]2%*sc3S(eew-DtEew-Cltltt8-DDu%p()9%%%%-d%Sf*[GzGd*CZ)%+ăU"%U.%%%0%%%%xhw#tqq(%SgfxVL%vB]S]8w7bXrDqmABNh+OP]EKs\b5J#ONK75oăU"gU[f2^2F3*5;.<=mnubp(38d3L#sm0[r,-f#Z,H'si5=.v[61;,uB]'LqFR8'u'ăU"i2P$bEVXDT870IMWe;<Y;\K];'h7Rn9sq+m2_a\GrdeVLep3IgdU^3h+wm8YY^7ăU"WrL+(g<<e*)NaZ.u_6Lb,KND8,:a2Kcg;hiJp4Nb$]BNOMa4?i+tP'8Mamk>To;ăU"$x9A,pqf;.bui1TW]\r<(UV?tQiZ<B%oK&-VP&n/;PYQE:c3[(g;9Ai5p(^arSbăU"_jqA&q(d,ppd9IE8PE:%.KJP[YZ$>D2KnCndKGO=;LJ^M5B>YIkjJ?#<YUiXRIpăU"vHg[3=JODIV#,UvR(VPCGFpxbEkkB;]*mi]fXNUEU:]<[tbI-e^Vy2$aesmsK/WăU"KW\sgY6<7:c30#7A8y0TYZ__:cDLS1<D(F:/2bpCgH'Fbf[.7SCUMMJsHD;RP\tăU"0$DelOs(TmS\\nM&.CC1=K,9X.ZyCKPeDa7_w+whOn>Aq[Mr6k89s[35MTxABZSăU"n2II^E*SS*>02#;K)mNZj(O:=U2Gl)r-R+YU5_9LinaYIVX[VtxJB3:W\;.$k)tăU"Rj[AtaQ9&%+509q16?lF8=/(5PpL\Ki,\VP/_^Ef)EZxJ0HAQ7G5+=u7nf9D\2RăU")A/)yfAkKy[b'65deLD6g42Mel7.pNc1_&P6[\_oE:XP.964&I.d:P)?.QLZU<^ăU"5eo]%.TR1LSidmOu^49No\Hr8&tZ:Q>hIl$r&%F*=sfj/whD[g<Kedadq6<)?pHăU"Z6xY.ixnw%uR7*/hrS'p4+\hrJ5mzU7h4=0mjo7^(Q>f6Ngc4/6q=Z/L1Xp/sWWăU"\I*=>a3r[id:fJSp_]OUi%])rq-pUhT.Q+F5mn9,JZ6:LRhS2HV/EZHxC,*aCCuăU"Us<^(=fI*tF:K4BJ6mM)Io>]>BBT6dpH+/E<S=5HM1;%:w31tHIw:xrq1o-Z/WTăU"xg<ERS7btsKURk[>I]<7:64S=YqtB>:7I\Nj#G:w0LJsHt-7_.FVpyRU-QYo4MXăU"-(XUr=,fILo&v<blPYpbrbNLYv)B/%xkb>&u%:h>:Yl*$Y\K/9r#vLOweO0$;E7ăU"MB$XgXmLVZ+Jt'JXW6\C=.2IL''['hpM3E^sh>/6gB*)R*7mf]*jvCAt9^TLb5TăU"^d'6Zw0Avt;J6Vl9zVZ5Rj=3nNwkDt*0auvawS#acEK4zBZ?$6nlqgJW.:h5g#măU"4LS[9=A4[U=M;4m8S^NFN)AJaxd-E1(>X7Zw2jK'5:/$(#O\.H5h_Cmp$CYn^C$ăU"bq(tX7LpP?:GYs*$#6ql>Z#w=Rsd6og9E^VM3(iYU=$K]np-=uZTJh=e2]q>?9dăU"uxL,oU1K2XMmyI<=#7$.ftq^N#z()34&s65b2&%tauTfZ^JNA1yt,aL'SX,aq27ăU"pDZrg/tb?LF8)uXhCfB$uRnU%->w4u%p&'9%%/%%[%%%&,S)GX:\dJK%%%%K%%%ăU"%0%%%%%%%%%&%%E%%%%%%%%%xhw#tqq(.Sx(x%up&'%9%9%%%%-%:Sf*GmzGdC&ăU"Z)%%'U.%%%0%%%%%%%%%&%E%%%%t%%%%xh%wtqq&(Sgf%xup*%+%%%%%'%'(%A%ăU"%%%(*%%%%%ăEND SUBăCLOSE:IF S=220AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDave Shea                      BSAVE/BLOAD W/PALETTE          FidoNet QUIK_BAS Echo          05-06-97 (16:41)       QB, QBasic, PDS        66   1477     PALSAVE.BAS '>I'm nearly done with a graphics conversion program that loads BMP, PCX andă'>files, then saves them to a format that is loadable in QB. I'm having problemă'>with that format (I call it "QIM").  I want to tag on the palette informationă'>to a BSAVEd file, but when I load the file, its a mess of colored dots insteadă'>of the original image.ăă'Here's something that I developed four months ago, which did comeă'through the echo at least once. =u)ăă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'   PALS&L.BAS   by   Dave Sheaă'   Released to Public Domaină'   on January 12th, 1996. Noă'   Warantees expressed oră'   implied.ă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăDECLARE SUB PalBLoad (FileName$)ăDECLARE SUB PalBSave (FileName$)ăCLS : SCREEN 13ăăTYPE Colră Dat AS STRING * 3ăEND TYPEăăăăSUB PalBLoad (FileName$)ăă DIM Col AS Colrăă OPEN FileName$ FOR BINARY AS #1ă  FOR a = 0 TO 255ă   GET #1, 64008 + a * 3, Col.Dată   OUT &H3C8, aă    OUT &H3C9, ASC(MID$(Col.Dat, 1, 1))ă    OUT &H3C9, ASC(MID$(Col.Dat, 2, 1))ă    OUT &H3C9, ASC(MID$(Col.Dat, 3, 1))ă  NEXTă CLOSE #1ăă DEF SEG = &HA000ă BLOAD FileName$ăăEND SUBăăSUB PalBSave (FileName$)ăă DEF SEG = &HA000ă BSAVE FileName$, 0, 64000ă OPEN FileName$ FOR APPEND AS #1ăă  FOR a = 0 TO 255ă   OUT &H3C7, aă    Red = INP(&H3C9)ă    Green = INP(&H3C9)ă    Blue = INP(&H3C9)ăă    PRINT #1, CHR$(Red);ă    PRINT #1, CHR$(Green);ă    PRINT #1, CHR$(Blue);ă  NEXTăă CLOSE #1ăăEND SUBăDuct_Tape                      COLORFUL SCREEN SAVER          ducttape@info2000.net          05-13-97 (00:00)       QB, QBasic, PDS        130  3181     SAVER.BAS   '--------------------------------------------------'ă'All of this source code was written by Duct_Tape  'ă'--------------------------------------------------'ă'If you think of a name for this screen saver then 'ă'email me.  Or If you would like for me to explain 'ă'it to you then email me - ducttape@info2000.net   'ă'--------------------------------------------------'ă'Duct_Tape's QBasic Page                           'ă'http://www.geocities.com/Area51/Cavern/4315       'ă'http://duct-tape.home.ml.org                      'ă'--------------------------------------------------'ăăăDECLARE SUB pal.set (lo%, hi%, red%, green%, blue%, r%, g%, b%)ăDECLARE SUB write.pal (r%, g%, b%, c%)ăDECLARE SUB get.pal (r%, g%, b%, c%)ăDECLARE SUB pal.fadeout ()ăDECLARE SUB pal.cycle ()ăCOMMON SHARED x, y, x2, y2, x3, y3, căăSCREEN 13: CLSăRANDOMIZE TIMERăăx = 1: y = 1ă'x2 = 50: y2 = 75ă'x3 = 300: y3 = 119ăx2 = INT(RND * 280) + 20: y2 = INT(RND * 160) + 20ăx3 = INT(RND * 280) + 20: y3 = INT(RND * 160) + 20ăc = 2ăăFOR c = 1 TO 7ă  READ lo%, hi%, red%, green%, blue%, r%, g%, b%ă  CALL pal.set(lo%, hi%, red%, green%, blue%, r%, g%, b%)ăNEXT căăDOăLINE (0, y)-(320, y), col - 1ăy = y + 1: IF y > 199 THEN y = 0: col = 1ăcol = col + 1ăIF col > 155 THEN col = 2ăLOOP UNTIL y = 199ăăCALL pal.cycleăCALL pal.fadeoutăSYSTEMăăăDATA 1,   22,  0, 0, 0,  3,  0,  0ăDATA 23,  44,  0, 0, 0,  3,  1,  0ăDATA 45,  66,  0, 0, 0,  3,  3,  0ăDATA 67,  88,  0, 0, 0,  0,  3,  1ăDATA 89,  110, 0, 0, 0,  0,  3,  3ăDATA 111, 132, 0, 0, 0,  0,  1,  3ăDATA 133, 154, 0, 0, 0,  3,  0,  3ăăSUB get.pal (r%, g%, b%, c%)ăăOUT &H3C7, c%ăr% = INP(&H3C9)ăg% = INP(&H3C9)ăb% = INP(&H3C9)ăăEND SUBăăSUB pal.cycleăăDOă  IF NOT xdir THEN x2 = x2 + 1: IF x2 >= 310 THEN xdir = -1ă  IF xdir THEN x2 = x2 - 1: IF x2 <= 10 THEN xdir = 0ă  IF NOT ydir THEN y2 = y2 + 1: IF y2 >= 191 THEN ydir = -1ă  IF ydir THEN y2 = y2 - 1: IF y2 <= 10 THEN ydir = 0ăă  IF NOT x2dir THEN x3 = x3 + 1: IF x3 >= 295 THEN x2dir = -1ă  IF x2dir THEN x3 = x3 - 1: IF x3 <= 0 THEN x2dir = 0ă  IF NOT y2dir THEN y3 = y3 + 1: IF y3 >= 194 THEN y2dir = -1ă  IF y2dir THEN y3 = y3 - 1: IF y3 <= 3 THEN y2dir = 0ăă  CIRCLE (x2, y2), 10, că  PAINT (x2, y2), că  LINE (x3, y3)-(x3 + 25, y3 + 5), c, BFă  IF c > 153 THEN c = 1 ELSE c = c + 1ă ă  CALL get.pal(ro%, go%, bo%, 1)ă ă  FOR i% = 1 TO 154ă    CALL get.pal(r%, g%, b%, i% + 1)ă    CALL write.pal(r%, g%, b%, i%)ă  NEXT i%ăă  CALL write.pal(ro%, go%, bo%, 154)ăLOOP UNTIL INKEY$ <> ""ăăEND SUBăăSUB pal.fadeoutăăFOR n% = 1 TO 64ă  FOR i% = 1 TO 154ă    CALL get.pal(r%, g%, b%, i%)ă    IF r% > 0 THEN r% = r% - 1ă    IF g% > 0 THEN g% = g% - 1ă    IF b% > 0 THEN b% = b% - 1ă    CALL write.pal(r%, g%, b%, i%)ă  NEXT i%ăNEXT n%ăăEND SUBăăSUB pal.set (lo%, hi%, red%, green%, blue%, r%, g%, b%)ăăFOR i% = lo% TO hi%ă  OUT &H3C8, i%ă  OUT &H3C9, red%ă  OUT &H3C9, green%ă  OUT &H3C9, blue%ă  red% = red% + r%ă  green% = green% + g%ă  blue% = blue% + b%ăNEXT i%ăăEND SUBăăSUB write.pal (r%, g%, b%, c%)ăăOUT &H3C8, c%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăăEND SUBăNick Kochakian                 BOX ZOOM                       NickK@worldnet.att.net         05-20-97 (15:00)       QB, QBasic, PDS        181  3661     BOXZOOM.BAS DECLARE SUB cleargfx (x!, y!, size!)ăDECLARE SUB zoomgfx (x!, y!, size!)ăDECLARE SUB getgfx (x!, y!, x2!, y2!)ă'Box zoomă'ă'5/20/97 By: - Nick Kochakian -ă'ă'This isn't the fasest zoomer out there, but it could be used for an advancedă'sprite (get) and zoom put!ă'ă'If you have any comments or questions e-mail me at: nickk@worldnet.att.netă'ă'Recommended for use only in QuickBasic... It's too slow in QBasic...ăăDIM SHARED bxăDIM SHARED byăDIM SHARED bcăbx = 200ăby = 320ăbc = bx + byăăDIM SHARED boxx(bx) 'Box XăDIM SHARED boxy(by) 'Box YăDIM SHARED boxc(bc) 'Box ColorăăSCREEN 13ăLINE (0 + 5, 1 + 5)-(1 + 5, 0 + 5), 20, BF 'This is my example graphicăLINE (0 + 3, 1 + 5)-(1 + 3, 0 + 5), 25, BF 'This is my example graphicăLINE (0 + 3, 1 + 2)-(1 + 3, 0 + 2), 25, BF 'This is my example graphicăLINE (0 + 7, 1 + 2)-(1 + 7, 0 + 2), 30, BF 'This is my example graphicăLINE (0 + 1, 1 + 7)-(1 + 1, 0 + 7), 30, BF 'This is my example graphicăă'x,y = Starting points (Probally should be top left corner of your box)ă'x2,y2 = Ending points (Probally should be bottom right corner of your box)ăăCALL getgfx(1, 1, 10, 10) 'Get the pixelsăăx = 10ăy = 10ăăFOR siz = 1 TO 10ăCALL cleargfx(x, y, siz - 1) 'This will clear the old zoomed imageă'PAINT (1, 1), 1 'Comment the cleargfx call and uncomment this paint commandă                 '... If you had a fast background put (like the BLAST put)ă                 'you could zoom these images fine without destroying theă                 'background!ăCALL zoomgfx(x, y, siz) 'Zoom the imageăNEXT sizăăSUB cleargfx (x, y, size)ăbx = 1ăby = 1ăbc = 1ăăx1 = 0ăy1 = .1ăx2 = .1ăy2 = 0ăătimes = -1ăăpx = xăpy = yă'size = 1ăăzoom = sizeăăFOR i = 1 TO zoomăăpx = xăpy = yăăDOăLINE (cx - x1 + px * size, cy - y1 + py * size)-(cx - x2 + px * size, cy - y2 + py * size), 0, BFă'IF boxc(bc) = 0 THEN LINE (x1 + px, y1 + py)-(x2 + px, y2 + py), 0, Bă'LINE (x1 + px, y1 + py)-(x2 + px, y2 + py), boxc(bc), BFăpx = px + 1ăbc = bc + 1ăbx = bx + 1ăby = by + 1ă'FOR a = 1 TO 999ă'NEXT aăIF boxx(bx) = -2 THEN px = x: py = py + 1: bx = bx + 1: by = by + 1: bc = bc + 1ăLOOP UNTIL boxc(bc) = -2ătimes = times + 1ăIF times = 0 THEN y1 = 0: x2 = 0: y1 = y1 + .5: x2 = x2 - .5: x1 = x1 + .5: y2 = y2 - .5ăăăy1 = y1 + .5ăx2 = x2 - .5ăx1 = x1 + .5ăy2 = y2 - .5ăă'size = size + 1ăăbx = 1ăby = 1ăbc = 1ăNEXT iăăEND SUBăăSUB getgfx (x, y, x2, y2)ăăbx = 1ăby = 1ăbc = 1ăăpx = xăpy = yăăDOăcol = POINT(px, py)ăboxc(bc) = colăboxx(bx) = pxăboxy(by) = pyăbx = bx + 1ăby = by + 1ăbc = bc + 1ăpx = px + 1ăIF px > x2 THEN px = x: py = py + 1: boxx(bx) = -2: bx = bx + 1: by = by + 1: bc = bc + 1ăLOOP UNTIL py >= y2ăboxc(bc) = -2ăăbx = 1ăby = 1ăbc = 1ăEND SUBăăSUB zoomgfx (x, y, size)ăbx = 1ăby = 1ăbc = 1ăăx1 = 0ăy1 = .1ăx2 = .1ăy2 = 0ăătimes = -1ăăpx = xăpy = yă'size = 1ăăzoom = sizeăăFOR i = 1 TO zoomăăpx = xăpy = yăăDOăIF boxc(bc) > 0 THEN LINE (cx - x1 + px * size, cy - y1 + py * size)-(cx - x2 + px * size, cy - y2 + py * size), boxc(bc), BFă'IF boxc(bc) = 0 THEN LINE (x1 + px, y1 + py)-(x2 + px, y2 + py), 0, Bă'LINE (x1 + px, y1 + py)-(x2 + px, y2 + py), boxc(bc), BFăpx = px + 1ăbc = bc + 1ăbx = bx + 1ăby = by + 1ă'FOR a = 1 TO 999ă'NEXT aăIF boxx(bx) = -2 THEN px = x: py = py + 1: bx = bx + 1: by = by + 1: bc = bc + 1ăLOOP UNTIL boxc(bc) = -2ătimes = times + 1ăIF times = 0 THEN y1 = 0: x2 = 0: y1 = y1 + .5: x2 = x2 - .5: x1 = x1 + .5: y2 = y2 - .5ăăăy1 = y1 + .5ăx2 = x2 - .5ăx1 = x1 + .5ăy2 = y2 - .5ăă'size = size + 1ăăbx = 1ăby = 1ăbc = 1ăNEXT iăăEND SUBăJim Emptage                    WIDE FIRE                      75504.2526@compuserve.com      05-21-97 (14:55)       QB, QBasic, PDS        49   1233     WIDEFIRE.BAS' fire routine by Jim Emptageă' 75504.2526@compuserve.comă' even a wide fire works fairly well on myă' 486 66 computeră' uses colors 1 to 60ă' use the rest of the colors for your otheră' program needsă' you could add a check so the fire does notă' cover colors over 60, even if in fire boxăCLSăSCREEN 13ăDEFINT A-ZăFOR A = 1 TO 60ă  PALETTE A, AăNEXTăsx = 10      ' LEFT X POSăSY = 135     ' BOTTOM Y POSăxmax = 300   ' X WIDTHă             ' Y HIGHT IS 65ăLINE (sx - 1, SY + 1)-(sx + (xmax + 1), SY - 66), 141, Bă' this line describes the fire boxăPAINT (1, 1), 190, 141ăDOă  REDIM sam(xmax, 65)ă  RANDOMIZE TIMERă  IF UP = 0 THEN T = 1 + INT(RND * (xmax - 1))ă  IF UP = 1 THEN T = 3 + INT(RND * (xmax - 3))ă  IF T = 1 THEN UP = 1ă  FOR A = 0 TO xmax STEP Tă    clr = 30 + (RND * 30)ă    sam(A, 0) = clră  NEXTă  FOR x = 0 TO xmax STEP Tă    FOR y = 0 TO 64ă      IF sam(x, y) <> 0 THENă        IF sam(x, y + 1) = 0 THENă          sam(x, y + 1) = ABS(sam(x, y) - 1)ă        END IFă      END IFă    NEXTă  NEXTă  FOR y = 0 TO 65ă    FOR x = 0 TO xmax STEP Tă      clr = (sam(x, y))ă      IF clr < 0 THEN clr = 0ă      PSET (x + sx, SY - y), clră    NEXTă  NEXTăLOOP WHILE INKEY$ = ""ăMatthew Pulley                 FRENZIED LIGHTNING STORM       FidoNet QUIK_BAS Echo          05-19-97 (15:34)       QB, QBasic, PDS        112  2186     LIGHTNIN.BAS'   Here's my latest contribution to the 3AM series. Pretty cool effect. ă'Compile it and run with the command line "/FRENZY". Big Storm. I might addă'rain to it a little later. Enjoy!ăăDEFINT A-ZăDECLARE SUB Flash ()ăDECLARE SUB MilliDelay (msecs)ăRANDOMIZE TIMERăSCREEN 13ăIF INSTR(COMMAND$, "/FRENZY") THEN Speed = 1000 ELSE Speed = 5000ăăShade(1) = 57ăShade(2) = 32ăXAdd(1) = -1ăXAdd(2) = 1ăăDOăX = INT(RND * 310)ăFork1 = INT(RND * 50 + 20)ăFork2 = INT(RND * 100 + 50)ăFork3 = INT(RND * 150 + 100)ăFork4 = INT(RND * 150 + 125)ăăFOR y = 0 TO 199ă LINE (X + XAdd, y)-(X + XAdd, y), 15ă LINE (X + XAdd - 1, y)-(X + XAdd - 1, y), 15ă LINE (X + XAdd - 2, y)-(X + XAdd - 2, y), Shade(Colr)ă LINE (X + XAdd + 1, y)-(X + XAdd + 1, y), 15ă LINE (X + XAdd + 2, y)-(X + XAdd + 2, y), Shade(Colr)ăăă IF y = Fork1 THENă  Length = RND * 50ă  LINE (X + XAdd, y)-(X + Length, y + Fork1), 15ă END IFăă IF y = Fork2 THENă  Length = RND * 50ă  LINE (X + XAdd, y)-(X - Length, y + Fork2), 15ă END IFăă IF y = Fork3 THENă  Length = RND * 50ă  LINE (X + XAdd, y)-(X - Length, y + Fork3), 15ă END IFăă IF y = Fork4 THENă  Length = RND * 50ă  LINE (X + XAdd, y)-(X + Length, y + Fork4), 15ă END IFăă X = X + XAdd(RND * 2 + 1)ă IF X > 319 THEN X = X + XAdd(1)ă IF X < 0 THEN X = X + XAdd(2)ăăNEXTăăColr = INT(RND * 2 + 1)ăăRandPick = INT(RND * 2 + 1)ă IF RandPick = 1 THEN Flashă CLSăăIF INKEY$ <> "" THEN ENDăăMilliDelay RND * SpeedăăLOOPăăSUB FlashăăOUT &H3C8, 0ă OUT &H3C9, 63ă OUT &H3C9, 63ă OUT &H3C9, 63ăăMilliDelay 50ăăOUT &H3C8, 0ă OUT &H3C9, 0ă OUT &H3C9, 0ă OUT &H3C9, 0ăăEND SUBăăSUB MilliDelay (msecs) STATICăă IF sysfact& THENă  IF msecs THENă   Count& = (sysfact& * msecs) \ -54ă   DOă    Count& = Count& + 1ă    IF Count& = Z THEN EXIT DOă    IF INKEY$ <> "" THEN ENDă   LOOP UNTIL t2 = PEEK(&H6C)ă  END IFă ELSEă  DEF SEG = &H40ă   t1 = PEEK(&H6C)ă   DOă    t2 = PEEK(&H6C)ă    IF INKEY$ <> "" THEN ENDă   LOOP UNTIL t2 <> t1ă   DOă    sysfact& = sysfact& + 1ă    IF sysfact& = Z THEN EXIT DOă    IF INKEY$ <> "" THEN ENDă   LOOP UNTIL t2 <> PEEK(&H6C)ă t2 = 256ăEND IFăăEND SUBăAngelo Ken Pesce               ANIMATED BLOB                  ken@uniserv.uniplan.it         05-22-97 (17:01)       PB                     175  2900     ANIBLOB.BAS ' TO DO LIST:ă' ADD TWO SIDE FIREEFFECTă' OPTIMIZE BLOB ROUTINEă' ANIM OTHER PARAMETRERSăăă' INIT -----------------------------------------------------------------ă$optimize speedă' 286 is REQUIRED...ă$cpu 80386ă' ...But 386 is betteră$lib all offă$error all offă$float npxă' Init mode 13ăcall mode13hăcall palsetă' ----------------------------------------------------------------------ăăă' INIT VARS -------*ăTYPE blobăx AS INTEGERăy AS INTEGERăradius AS integerăradius64 as integerăstrength AS integerăEND TYPEădefint a-zăDIM tblob AS SINGLE, threshold AS single, t AS singleăxmin = 50: ymin = 0: xmax = 270: ymax = 200:threshold = .65:' Screen dimens.ă'			                                      and thresholdăDIM blobs(3) AS blobădim deg1 as single, deg2 as single, deg3 as singleădim aps(3) as singleădim rpr(900) as single: ' THIS IS FOR BLOBS PRECALC (R<=300)ă' INIT BLOBS -------*ăgosub blobpresetăădoăă' UPDATE BLOBS POSITIONSăincr deg1,0.05ăincr deg2,0.1ăincr deg3,0.2ăăblobs(1).x=160+sin(deg1*2)*80ăblobs(2).x=160+sin(deg2*2)*80ăblobs(3).x=160+sin(deg3*2)*80ăăblobs(1).y=100+cos(deg1)*80ăblobs(2).y=100+cos(deg2)*80ăblobs(3).y=100+cos(deg3)*80ăăăă' DO BLOBS -------*ăFOR j = 0 TO ymax STEP 4ăy = ymax-jăfor k=1 to 3ăaps(k)=(y-blobs(k).y)^2ănextăăFOR i = 0 TO xmax STEP 4ăăx = i  + xminăt = 0ăăFOR k = 1 TO 3ăr=((x-blobs(k).x)^2+aps(k))^0.5ăăăIF r <= blobs(k).radius THENăt = t + rpr(k*300+r)ăEND IFăNEXT kăă' DISPLAY BLOBSăIF t >= threshold THENăcol=t*63ă! mov al,colă! mov bx,yă' SHL BX,6ă! dw &he3c1ă! db 6ă! mov dx,&hA000ă! mov di,yă! mov cx,xă' SHL DI,8ă! dw &he7c1ă! db 8ă! mov es,dxă! add di,bxă! add di,cxă! stosbă! stosbă! add di,318ă! stosbă! mov es:[di],alăelseă! mov al,0ă! mov bx,yă' SHL BX,6ă! dw &he3c1ă! db 6ă! mov dx,&hA000ă! mov di,yă! mov cx,xă' SHL DI,8ă! dw &he7c1ă! db 8ă! mov es,dxă! add di,bxă! add di,cxă! stosbă! stosbă! add di,318ă! stosbă! mov es:[di],alăend ifăNEXTăNEXTăloop until inkey$<>""ăENDăăăăăăă' ------------------------------------------------------------------------ă' SUBS -------------------------------------------------------------------ă' ------------------------------------------------------------------------ăsub mode13hă! mov ax,&h13ă! int &h10ăend subăăsub palsetădim k as byteăout &h3c8,0ăfor k=0 to 63ăout &h3c9,0ăout &h3c9,0ăout &h3c9,kănextăout &h3c8,64ăfor k=64 to 64+63ăout &h3c9,k-64ăout &h3c9,0ăout &h3c9,0ănextăout &h3c8,127ăfor k=127 to 127+63ăout &h3c9,0ăout &h3c9,k-127ăout &h3c9,0ănextăend subăăblobpreset:ăblobs(1).radius = 90ăblobs(1).strength = 1ăblobs(2).radius = 70ăblobs(2).strength = 1ăblobs(3).radius = 50ăblobs(3).strength = 1ăă' PRECALCSăfor k=1 to 3ăfor r=0 to 300ărpr(k*300+r)=blobs(k).strength*((1-(r/blobs(k).radius)^2)^2)ănextănextăreturnăDaniel Davies                  REAL-TIME TEXTURE MAPPED TUNNELia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        127  8413     TUNNEL.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TUNNEL.ZIP",4^6:Z&=6042:?STRING$(50,177);ăU"%up()%9%'%R-%mU91G<&%Z)4)7%%H.%%%/%%%%yz%ssjq%SgfxJdz<>]Sm5w5]=ăU"N=Y$IQXH<rJ_b'Nn$)Q8u.o]UP4/K^8Vk:+YfjJ/8ju88R.IVKT:JyMG6N_h652ăU"66ETM5cS_**WgkH0RKpU5$ni9>PA]D3j*T#:<7ZRvsvSZK1L;/+QA=;_gJ5+dX=ăU"rRvjKcCkZUVAWkc.<$_irE?1/WcV=Tu2J[ozsgOHE#tFmGa)daZO>nn2B_8&*bvăU"rO_.N8Cc*XSp=0:_sIbtiq7[vm^_R>u3+F5x*G+1RXpM0l?h><9[Jn/qqw.qW'xăU",]''6f8E,G4\Yb=F[Aj1.1ja15G)6m(ms&0.e%&1_R0MU3ga4?7_QDa8_N_>F0=ăU"SF87fBW.v:IB%6;/8aK9mPos(0DJeBnFI[GXB>>gEl3v52UnI5nWN/d:r5v<K/săU"kPOYQSIt?)<w:K9xdEjI.w;,)R=t*0#(>c[#rc<#J=:Vb1pY)D^j<jLEoX1j>A<ăU"Q0o4gE_tz[uL3.lh3$M%o:]ULz7qEYf^u)D$u,0O%lmv?hQa3]A>X?^GiH7)QVUăU"])$[Y_l*iNyeknB*vtlR2AP:z^c2rd%V&+rLc3c+mxGPE^Kz8&p\9Zu?U2>;lP]ăU"V>MG8O?6nBj??,.$7J,UueNOhUmHHMmG>l?7_fL$9*lD]-'0t5Gh3UW&#>ar&k,ăU"VTWFUPn-2g)1,zR=sh6_ZOER^gpTU;C9M'i\<*si-J8)Sjl15\U*m3fpgI)Fu_GăU"_:BJ'gs9ueFWOJRu_]DYVuIp45li(co2AT_<*h6DY%j#'_8j6-U8&_/wOM:Vz2UăU"/;e5p1+J\3Ld+P/S]QY4LL&gA/']BvLFw5d6=o*&PRuU*N':yJDF[KJ'Dl*AWI0ăU"f/hl3AtRtg1xEQDF^vVL6gQ;pXuDt#A$I81VD=(.(OT<vSZ4D(SY<SL9pO[=,B'ăU"?:r]N4-#W=ofH-ScYl-hW=[/Y(M4Av2W.X'1mNSpTuBl+^8SnUTm6Tp9.//BHM.ăU"ekrx7kqWP+U.q6Ui(S)goRZRf[(Fo=>5De/r&Zq89KVvwt?>>nhYM(ul7j0MP1IăU"_9T>XzUwGcc2Wkac,JBh]3%nu(EDg?6FMc=mm.RuTY5OC*Ao-ET9RI=ztSNY*nsăU"VekQ4bWD&w<TR,L,HBW^)#c42p>C57GBlx3j]n/G7/3&rni4774Yz:Z/(m<tas9ăU"^4*.:r\fVS(%C?6S'100l1/iQcQAL;Z),kE92>\xWgi_ML*V:xuSAa2UFY4(1N.ăU"N>dT#6sGG1V3$k?nbv^L3L&61ZkFMoj9=r0=8+3J2z*Y,7v(H>d1/=.^/)Acom6ăU"w7gD\,enuTgLHg*9lo$_,[-]x(u%p()9%%'%-.%,bIOG&4M*$7(%%%n.%%%,%%#ăU"%lk'%SufqE6%p][H$1Ta,Ar-u)nj$Bw<#a2ysJb*h0%(7[O/iLvcc0u<?t^h4'$ăU"h8&q<oPKD0+L<v2'?.X(:PunM\JM=4D3*3qKHOtZfV4/6.6PiJ91Qg>QWu5l1ZjăU"v=Hrk?eAlkq<qH#L'Wt87W(7_;PAgM:(9ko\cmEZGv=O6+,RaVEH]L3NGjNm>b'ăU"V?LRSq4om-d.PCYAQh,GcDI[*r;+Y/%U+STdh9P4,4)?-[H1kv*9]&>_lOgjCVVăU"3PF-Z(5]j#M16/->PkJa1=CXnB#n7D_Uq0hTgP<i$7A*gc7^Yjk?7^2j[KJh3__ăU"4S)xSSoC?Fm*=[bQ=G'%stVw*#z*o7fGV'/F]0E.5OS>E)'2_PH98a<Uo0E'Z^:ăU"3KQn&O%EQxF5R<+G+&-KmDtnRhIF(/nC/Q(3esmm-%yrQW\&r_+e(l1F&%DW4QnăU"&x;BNHAgMO.3vKaewyiY-grAbPW/&-q55<p-YYPSt'r-7S4^^RPl=jpQ$&u&U;CăU"#v1UBa:;QbnWgQ&IWICaBTU6iHk;qupu;S=LPX\>SU1IlKDe*6E3,w3Vqx^z^'?ăU"nP=h5Y'IX0-'2H&d/0[=>Am;/Dk[<hOjR4hnj5peQg<;UCMe)OhELJ4c9+>w9tYăU"fp0k>(6',5??Q$JLOh*<'CEc><:<x1IZ=.](I2o:=KW',),FHKJh<UMf]suOpc-ăU"Y-D[-a9*7kz^etUIETQb/RNYhO&E,>9RLnLDY0Onu>cPJS-TC;O,'B7O2'HiD'0ăU"NyNM0zvQDyrgpf6JK-TP*nb7=&byNKLbzdKoA^>-v&8IR>+DE)=jcY2/k]B3*ofăU"M9=pui&^wkYr,qCtM_[X_m_CD;=7d$j3?&usDfH(Wmtut6oN1pWbmS4e^G:DsYJăU"M7,)'wKmx_##.V#<oG7ezzGJSwQ2]y,8duzm'ai;_lcTMW$CpCx&D&r-Zabalv6ăU"xrO:ZHYfU8[8S>GTAxyQk43gKuJS,MO;zL-I]e2a&nu2*15Q/G8cp9t7.k0Z?sfăU"(=)nb$[RaxrAN.qX<t]taT6xrRCj,?CUQQFRqFnZ>1CPO\SmD?v\l1rtb7qy:YRăU"0hYjWdxg*wKvm:m<x*$3N6[7t,q(%up()%9%'%#-%*b[IG3(>K5r3m%%LS%%%,%ăU"%%%lk&'SifOyfl(,A\_7Fjx$q6pieemq)1xM\DSW=3V=jgKbed;(AZL0Dj\[M]=ăU"]O9w.td?xvHdoDS4ec+DS4?e+DSu4e+DsS4e+Ld:BMBQm[NrdB_nlPwtu4Mdj8oăU"Qa+::d.I-f/am,ZM$H:#:cv<ZKjqH]4l6l=H%oaEJId:S,cP*Jl9De+YVmHI#85ăU"qo^,tH)jtj?>2Dw=:R^no,^NnLORbH4UgWXI<A04b6&i1$q,xD#]6fy,\\/HM:KăU"'dP-g26dC?J?\WwWa06pf8<.pdkn(NEgmbktNZKVY)qFhLYM)gki;eXO:>i8.<3ăU"&n_by(&nzl7gKJ3RlZbJK-j7fIg<63'%g?v2Zt>E)Vd)HJn_ItcBsOcN]Y];QFRăU"c&%n/joO9M8PcXvI$c57mq)1S8nMN'B;4#$&K_H(W6*Quio0BBzh:QcL=6xeCJXăU"uM6wi1lLPGv07iPBUZNc=vZ'OaW<BAG_lMMV)sIIVumLt*JnFE%kHkGG&U9lEE;ăU")Dm3JZCt%CvPIBCbqtIFKdwFfka]57tK(C&:6]9is5Ao7wecqYE+Md[jN>38x&_ăU"ks=2&EazLzbk,8(x[f>7MV=B?t96k0j8>(:5Nh;CLENG)]-AMid^:OcdQkia]PvăU"T.BHDSN;?HpbyI'P3vNLRiR3k#L^>1gCYD>ADwI\kklh2?_%sWslo]3[Z_yA-Z,ăU"o()DQlR8.KAVc\]#]t/GNEJw$h#kGquE3DKcE#lvI\Gt8xT9)xIR6]_,PM_k7DmăU"DSqJVCXdMtKdPqKRA#$h($%tM4\182YzN\djGF_)]HH+;qr;(]cICTec]e+4R.AăU"=f_1+MSz\,ff*N-%2]m7g%vFpzb:%Yw.2X,n/*<sgPj]p*W*qQd1L*YVexeu2cwăU")OSEn6ZvZT't1mq6t.ZBnosHjpv3(tBJwL1[E?ALVwiSw5l2PF7c'$3bhu*YBs-ăU"Z*l4G8l:S9]2KhS4mGvx-=ne6ll=H/H'khyiN&h+aRMDotO$&*QJl&ia?;Sxt5jăU"<,.k<dJqt=bJ1GdnY,Ecdb:G1XI[Oa>O7_MV,b+pgsmhZ?G4e,u]7s7[sDya:MsăU"GUx)uqZX>^z2y32z9,mrl4^pRq[_wB]xzx9lu(fUxmBBDeHkusOH'if<OcYKwvhăU";1iMcshkzF_cW#VBls.M#u#oDsG.(NBs<J%c3id1OX7(tu+51bnuau]$3t[DCj<ăU"ZrKOchll&&KqCn5jJHL4?1:M]gU\GnCt9flseiq+)'&DLY^5?W_uUY>17l1D[q#ăU"/#j#v2[2N;9R5pvUGtwjL+bn/UvsKt(vccT:;1HJq1mk]CL%X&0CoT,;WY#aKWsăU"XqexaaLe<(MI=tNj^C$&#x=5=Qm,oYLuIbX+:V]N?J-[>Gz-&dLN'HIL'_Mq>H&ăU"?9IG\kkC$_gBG1HKq&^=HuMkem-rg>3r1=p:MeSqu(f2TDwh][6jDLJpuq$H'lzăU"XPNK+H#)F$?G'_ct$(2J>hZBZ-kWaiX2Hkz5SJkgs*=l_Z_jxIB%B<NXlN5v\G2ăU"[D4Ll[WG-RXJxJHU:zo=.?*AGPa^c1GO-oJXh\/6f+tqCluPXi4[zs9VA8UuT;6ăU"nGV'9&W_.V=E5KV?H2I,CFPVOPtCO'WL2g4CyYWxNF0y%jy[6K7Y6,Z7,jNb:TsăU"ft(Qn9*FJ,TXFZ<nd%TN$nQlUBDnA[)Y.D*,e5$C^kO6u-$mXZGbDcwNe,JuqM%ăU"wYlxYvBM:hLJnN_cM8vW>S_7_,OouU)1\0f<V):GdkMd+G^cNe-8W8f.EvENv&xăU"-/Yi<Ls^3on*l5ayVNSJ>64WDZ(vmk/c9jt,4Mfz;3YHg8pd8$ng)DOegb&Pf2SăU"q/wl=tlFt]?b>TGMa2mOdAE>=Oo0b'%\gP2$,4:KP$_l?27'W$WpEgc6MciNTQ^ăU"_$hn7*R7_Sk\*.Pbnv>^Hs.mwO5)sDfIsAo-m7BV/%C+HdKoK7\G+QLNc6Y3F3iăU"3wL14[h^LL8c2c0CB#?v)9,RJ6k24LfikGwkYQw*[^FR)P?r#HM\8iG-GOs/L()ăU"H.TKnclB[p8F*DuAH=LE:.c1L3dOe^odnaMmFnT$RL#b'cCRf=ANa:uTlRi=8V6ăU"hYQPFcpXQSmD;wfMhlPqoMswsjRZhLf$6B;H,lC.vW#DnmkF[C^ON)iXnCKG\qtăU"=p*QhO(9cilc7+oaT(RTNIH1ao=I^A(.nAG(IOWKfx#,t?vQ4KI3jM1a2k-35beăU"?SiOVR4Y.<fcN^:D=FOXUwil_H:LTTU8X)ls<0#\Y^#.E93KMDK:wp'%muye.WsăU"MeI]7cqTsPa>2pm>V)Rj7IRBeK=8ayFef4MQMBW\9i4U-(1Jx,U4^jS'1I<qRoTăU"BDsVI1\ASufjHjl1l#WBW0]h]Cl.U0O)sB05sJSWq]40j(5QwX3sYA&f+).3=wRăU")5Q>1yW+r8y,OmVZ6>FiNYm]mGRg=_0/H)x048ZSc1O<r:e$]q=TqAm)a$2VeU$ăU"TJ*EkzLWbg=s^O%]3ZpD39Xhn6hsbgGaFYYS]/_EmXj*LTfpGie71#wQ:H1i#a&ăU">y)9>3I;SHd3Y%;\w5kFd&uM7lgPinAnZye0.Fz]+dqYfAoG%q;gwt<XZpOy_P[ăU"3n(j+%F:_D%$^0[WnQ<;'.<9/1(\cN\DG_>*>eVcNsCy1HnO;%LLU-_9=7H4L9&ăU"[Y$v%N2?2\oW'MQJBYmpjzuIdVO2Ri(1s7R(efxRbAu+q;>vQ0F>gqp0C-*9p[/ăU"G2Bu59%+g'H]xd3Y)=/yAp%pF]rMoGbc;AVLfAULgICV$mIVecUPDpfx:p]wf%zăU"H\dBFPzK'x.j$'6\dj8PMCiC6m6c<V$mT1b:)u?=LJid6paaQ'Wbs>EHJ.j2;q.ăU"&OMwUQ]j7H'%jI$PuWwmQawQfEXIImD)TIW.5JPzdy)x2XZ#gqQC%>Q'Ic;%:j7ăU"]-/YiA+f,=6&tO\b4h6zZ+TnTv-,]ByvFwG'v1CW'Nh%rELn:f_o*xSTH4fin.dăU"f,DY\a$7CZ]<k'gWG4SNwFN:qQE+5_ghu73D\tm$qlT*_RdL.3+'m2CQp;#D;B-ăU"Y-+K.SYeoejonnkl<l*8>=MfCnP?jiqCn;B=KsR<I'%uT[b^lnA:eS3W/E\StJzăU"yzUE;qum[e8#rJIT(v,4xb^6QfOm'R4QsNu#w_Jef,_F8ac#[c,Eu#9qsoF:,fVăU"ZKRABW^x)vDQdl<]7P^uNXB5q<Su(o(qcr:=_Uu)29ry=D0mjr1h17MEKo5\s3năU"J)H%mVa.<E<Q8IBV_:N',X'4Nh'Aorf6#7JJiLEq,2,LmHf30dEAL0Cqq:b5MxcăU"K.3&*,rL%Y8X$dH&%q/2CGj>GbW?5*YKBlqV?_i=uspzIFlbmceVl83AhktYdF8ăU"6C[4Mg5bl)+V%8wr5]fD6cP91&J?vhIks#'#foP^&^gZ>x=N(%dAy/N,SF6736SăU"R$:P:Xi8ITkU+Cd^:r9(NHG<ZJ8ZA;7x>C3M'$g88&A'd;M_WlAOk93NChuu%NxăU".H94jMTyRq%m(>aIc#wLjza6Uopf420>mMI_A/4t4G$VtgTvXQ8XT,HJngB6)h=ăU"jpqJT='1hgE:j8H_3]\>c$g$.:sa;$9Ze7vmpR_S[6q\\ei8+qG[?o.)%0mN6eoăU"vjnAI[W/&7>LWR[P^<)rMv5A3o,V3tAo3q2HFMy\Y[C*6?J\nhnR6U#Gu(j.(L$ăU"s^JE?]M-ZoF:KWOB+^sdft#W98B9-&q3+0fBC*l3%n*FIT7(idC\j^ATpA\s%HiăU",hx+ULf/kda)uB5dd+0ofYOXBp:8tM-/$,Z(VRR;^1JtHjlw7N=kH]u6xMU9qk7ăU"a^m6uci*##)+H;d*h+-7hVV>C'*R[j;Vd;t,a(kvOu-c6ljlXuWUuA5qx_w16B:ăU"E=VfoPi]7*dR(A63T(uckR0SH$8l$#<)EN)=:V4N1TJ$9Mi%7F$M\1:7rR<1Mf5ăU"RG0UPraM[h'*\)_n0+H+)c1))BB+xB]uIdnnm]=/H9\i7.#Yc5P/lSPDsFg2X-AăU"yD.5xCNIPh)mH(#?Qor#W;k$RQT&mbZ*];/RBrKXVD*TqYHMOOJ9-oW24kD_JN'ăU",Bs8<8.]d6$hv?-104bypdEFH#ZYTi%Z\WmVTu8+HCy?4W#_'/o9iibQt8q/3JhăU"hRG[r3gE4dUjqrmWF<fH07r?wFvUAdZ?F:gdny&)j_?/^0PZ7z/)[Vol5;XxEQnăU"qhJfr$qjd1Q[Fm=[=-f:z;&VmXvOvjO)ps&_h3$6&d,>mZ&_VD]5#]i\K?>,uprăU"/\ue$Ns-3IFGe=[YyD9E_$8JCQ.J9(xUg3tY<TQ5jLWzKfc=a3wq1AVufj'NxXAăU".U_nG>CzMe*XU\_2tW=jnJXQMtBDcCCJ^Q,?Q['5z&eNOo-=.xypt.MK%dHKphQăU"h;>1In=LZuiw3esMbkjI^COCay>>VTnquhwGz4l/79.;=lIV&/nJLE1DEKMzLT\ăU"kj(qkl<7[8*aHHrP]Pd<$UMM7?S<-<Gsv.zX5.0$fQ0ASlnZ,'H(O/.rJSTo5dqăU"6X:tbOWbIH<Q*vj[NBTn/l3B^V2[Lj#l)ktBsoXp__ZXT]Sg<1sp'*v^klsgfLTăU"j/g3?TD/O0lpiC29yg98e'*)P*T=>[#4\nu$v&$AF.3YXa#*9tjDorNO^G's6(QăU")]HiJp-4s?pu4<8UQvEUjt:mGsX8xQ6l=,,*'GPI8_e/x#T7xo6#D35-//Ni6ueăU"d]uSX-rJtraPb-sLQNg,Owrc1?w.b]4v0_GjQf9T\vJNXVkFP/eDeEUY9^m<MC_ăU"M0M=,u3vPq2CAMo-.;0Q.:p$)IjjpwKuNY=ruE(=j^Tqap*YK.&.xNge*qee#hpăU"9YRg0dnunH4w'ldup%&'9%%9%'%R-%mU91G<&%Z)4)7%%H.%%%/%%%%%%%%%&%%ăU"E%%%%%%%%%yzss%jqSg%fxup%&'9%%9%'%#-%,bRIG&45M$7(%%%n.%%%,%%%%%ăU"%%%%&%%E%%%%\)%%.lk'S%ufqu%p&'9%%9%'%%-%*&bIG3r(K5r[3%%L'S%%,%%ăU"%%%%%%%&%%E%%+%=,%#%lk'%Sify%up*+%%%%%%(%(%&q%%%'[;%%%%%ăEND SUBăCLOSE:IF S=114AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  PARALLAX SNOW FIELD            ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        71   1806     SNOW.BAS    'PARRALAX SNOW FIELDă'by Daniel Daviesă'You can use this for whatever you want, just give me some credit for it.ă'you can send me and e-mail at :- ia53@rapid.co.ukăTYPE snowă  X AS INTEGERă  y AS INTEGERăEND TYPEăăDIM layer1(100) AS snowăDIM layer2(100) AS snowăDIM layer3(100) AS snowăăăăFOR q% = 0 TO 100ălayer1(q%).X = INT(RND * 319): layer1(q%).y = INT(RND * 199)ălayer2(q%).X = INT(RND * 319): layer2(q%).y = INT(RND * 199)ălayer3(q%).X = INT(RND * 319): layer3(q%).y = INT(RND * 199)ăNEXT q%ăăăSCREEN 7, , 0, 1ăăDOăăFOR snow% = 0 TO 100ălayer1(snow%).y = layer1(snow%).y + 3ălayer2(snow%).y = layer2(snow%).y + 2ălayer3(snow%).y = layer3(snow%).y + 1ăăălayer1(snow%).X = layer1(snow%).X + INT((RND * 3) - 1)ălayer2(snow%).X = layer2(snow%).X + INT((RND * 3) - 1)ălayer3(snow%).X = layer3(snow%).X + INT((RND * 3) - 1)ăăPSET (layer3(snow%).X, layer3(snow%).y), 8ăPSET (layer2(snow%).X, layer2(snow%).y), 7ăPSET (layer1(snow%).X, layer1(snow%).y), 15ăăăNEXT snow%ăăFOR checksnow% = 0 TO 100ăăIF layer1(checksnow%).X >= 320 THEN layer1(checksnow%).X = 0ăIF layer2(checksnow%).X >= 320 THEN layer2(checksnow%).X = 0ăIF layer3(checksnow%).X >= 320 THEN layer3(checksnow%).X = 0ăIF layer1(checksnow%).X < 0 THEN layer1(checksnow%).X = 319ăIF layer2(checksnow%).X < 0 THEN layer2(checksnow%).X = 319ăIF layer3(checksnow%).X < 0 THEN layer3(checksnow%).X = 319ăăăIF layer1(checksnow%).y >= 200 THENălayer1(checksnow%).X = INT(RND * 319)ălayer1(checksnow%).y = 0ăEND IFăIF layer2(checksnow%).y >= 200 THENălayer2(checksnow%).X = INT(RND * 319)ălayer2(checksnow%).y = 0ăEND IFăIF layer3(checksnow%).y >= 200 THENălayer3(checksnow%).X = INT(RND * 319)ălayer3(checksnow%).y = 0ăEND IFăăNEXT checksnow%ăăPCOPY 0, 1ăCLSăLOOP WHILE INKEY$ = ""ăDaniel Davies                  COMPLEX STAR/CREDIT SCROLLER   ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        191  7863     STARS.BAS   '=======================================================================ă'  Star/Credit Scroller by Daniel Davies 1996ă'  Simple use of page flipping to create a complex animation includingă'  use of vertically scrolling text, bouncing balls, horizontalyă'  scrolling multi-layered star fieldă'=======================================================================ăă'== INITIALISE EVERYTHING FOR THE STAR FIELD ===========================ă'set to screen mode 7 so that we can use page swapingăSCREEN 7, 0, 1, 0                   ' Write to Page 1 (Hidden)ă'set size of arraysăDIM SHARED Stars1%(200): DIM SHARED Stars2%(200)ăDIM SHARED Stars3%(200)ăDIM SHARED FlineX1%(1 TO 8): DIM SHARED FlineY1%(1 TO 8)ăDIM SHARED FlineX2%(1 TO 8): DIM SHARED FlineY2%(1 TO 8)ăDIM SHARED MSG$ăă'set initial position of starsăFOR X% = 1 TO 200ă  RANDOMIZE TIMERă  Stars1%(X%) = INT(RND * 320) + 1ă  RANDOMIZE TIMERă  Stars2%(X%) = INT(RND * 320) + 1ă  RANDOMIZE TIMERă  Stars3%(X%) = INT(RND * 320) + 1ăNEXT X%ăă'set initial positions and speed of the shapesăRANDOMIZE TIMERăXco1% = INT(RND * 320): Yco1% = 10 + INT(RND * 180)ăXspeed1% = -1ăYspeed1% = 1ăXco2% = INT(RND * 320): Yco2% = 100 + (INT(RND * 90) - 45)ăXspeed2% = -3ăYspeed2% = -3ăXco3% = INT(RND * 320): Yco3% = 10 + INT(RND * 180)ăXspeed3% = 2ăYspeed3% = 2ăă'set the position of the line and it's speedăRANDOMIZE TIMERăFlineX1%(1) = INT(RND * 320): FlineY1%(1) = INT(RND * 200)ăFlineX2%(1) = INT(RND * 320): FlineY2%(1) = INT(RND * 200)ăxmod1% = -2: ymod1% = 2ăxmod2% = 3: ymod2% = -3ăFOR X% = 2 TO 8ăFlineX1%(X%) = FlineX1%(1): FlineY1%(X%) = FlineY1%(1)ăFlineX2%(X%) = FlineX2%(1): FlineY2%(X%) = FlineY2%(1)ăNEXT X%ăă'set info about the scrolltextăy% = 19ămessage% = 1ă'========================================================================ăăăDOă CLS                                  'clear page ready for the picăă  FOR X% = 1 TO 200             ' move and draw the starsă    Stars1%(X%) = Stars1%(X%) - 5     ' move the nearest layeră    Stars2%(X%) = Stars2%(X%) - 3     ' move the middle layeră    Stars3%(X%) = Stars3%(X%) - 1     ' move the back layeră                                      ' the next section maeans that whenă                                      ' a star goes outside of the screenă                                      ' it is given a new position.ă    IF Stars1%(X%) <= 0 THENă        RANDOMIZE TIMERă        Stars1%(X%) = INT((350 - 320 + 1) * RND + 320)ă    END IFă    IF Stars2%(X%) <= 0 THENă        RANDOMIZE TIMERă        Stars2%(X%) = INT((350 - 320 + 1) * RND + 320)ă    END IFă    IF Stars3%(X%) <= 0 THENă        RANDOMIZE TIMERă        Stars3%(X%) = INT((350 - 320 + 1) * RND + 320)ă    END IFăă    PSET (Stars3%(X%), X%), 8    ' draw the back layeră    PSET (Stars2%(X%), X%), 7    ' draw the middle layeră    PSET (Stars1%(X%), X%), 15   ' draw the nearest layeră  NEXT X%ăă                                      ' The next section changes theă                                      ' message on screenă  IF TIMER - start# >= .125 THENă  y% = y% - 1ă  IF y% = 6 THEN y% = 19: message% = message% + 1ă     IF message% = 26 THEN message% = 1ă     IF message% = 1 THEN MSG$ = "Horizontally scrolling Star field"ă     IF message% = 2 THEN MSG$ = "By Daniel Davies"ă     IF message% = 3 THEN MSG$ = "This program uses page flipping to get"ă     IF message% = 4 THEN MSG$ = "reasonably smooth animation using"ă     IF message% = 5 THEN MSG$ = "simple commands in Q-Basic it should be"ă     IF message% = 6 THEN MSG$ = "easy to understand, but if you want or"ă     IF message% = 7 THEN MSG$ = "need any help understanding it just ask"ă     IF message% = 8 THEN MSG$ = "and I'll be pleased to help."ă     IF message% = 9 THEN MSG$ = "if you find any of the code useful you"ă     IF message% = 10 THEN MSG$ = "can use it in any programs but please"ă     IF message% = 11 THEN MSG$ = "give me some credit"ă     IF message% = 12 THEN MSG$ = "anyway, some of the technical info"ă     IF message% = 13 THEN MSG$ = "it uses mode 7 which is the ega 320*200"ă     IF message% = 14 THEN MSG$ = "16 colour mode which has 8 pages"ă     IF message% = 15 THEN MSG$ = "this demo only uses 2 different pages"ă     IF message% = 16 THEN MSG$ = "the demo has 11 different layers of"ă     IF message% = 17 THEN MSG$ = "animation"ă     IF message% = 18 THEN MSG$ = "enjoy this demo"ă     IF message% = 19 THEN MSG$ = "Sorry the text's a bit crud but It's"ă     IF message% = 20 THEN MSG$ = "1 am, so what can you expect?"ă     IF message% = 21 THEN MSG$ = "Cee U l8r!"ă  start# = TIMERă  END IFă  COLOR 11ă                                      ' the next line writes the messageă                                      ' to the screenă  LOCATE y%, 20 - (LEN((MSG$)) / 2) + .5: PRINT MSG$ă ă                                      ' the next section draws the circleă                                      ' that bounces below the borders andă                                      ' undeneath the other two circlesă  Yco1% = Yco1% + Yspeed1%ă  Xco1% = Xco1% + Xspeed1%ă  IF Yco1% > 189 THEN Yspeed1% = -1ă  IF Yco1% < 11 THEN Yspeed1% = 1ă  IF Xco1% < 11 THEN Xspeed1% = 1ă  IF Xco1% > 309 THEN Xspeed1% = -1ă  CIRCLE (Xco1%, Yco1%), 10, 10ă  PAINT (Xco1%, Yco1%), 14, 10ăă                                      ' the next section draws the circleă                                      ' that goes underneath the borderă                                      ' and inbetween the other two circles.ă  Yco2% = Yco2% + Yspeed2%ă  Xco2% = Xco2% + Xspeed2%ă  IF Yco2% > 140 THEN Yspeed2% = -3ă  IF Yco2% < 61 THEN Yspeed2% = 3ă  IF Xco2% < 11 THEN Xspeed2% = 3ă  IF Xco2% > 309 THEN Xspeed2% = -3ă  CIRCLE (Xco2%, Yco2%), 10, 1ă  PAINT (Xco2%, Yco2%), 9, 1ă                                      ' the next section draws the borderă                                      ' lines for the star fieldă  LINE (0, 45)-(320, 50), 8, Bă  LINE (0, 46)-(320, 49), 7, Bă  LINE (0, 47)-(320, 48), 15, Bă  LINE (0, 156)-(320, 151), 8, Bă  LINE (0, 155)-(320, 152), 7, Bă  LINE (0, 154)-(320, 153), 15, Băă                                      ' The Next section draws the circleă                                      ' that goes over the other twoă                                      ' circles.ă  Yco3% = Yco3% + Yspeed3%ă  Xco3% = Xco3% + Xspeed3%ă  IF Yco3% > 189 THEN Yspeed3% = -2ă  IF Yco3% < 11 THEN Yspeed3% = 2ă  IF Xco3% < 11 THEN Xspeed3% = 2ă  IF Xco3% > 309 THEN Xspeed3% = -2ă  CIRCLE (Xco3%, Yco3%), 10, 3ă  PAINT (Xco3%, Yco3%), 1, 3ăă                                      ' check that neither end of theă                                      ' bouncing line leaves the screenăIF FlineX1%(1) > 319 THEN xmod1% = -2ăIF FlineX1%(1) < 0 THEN xmod1% = 2ăIF FlineY1%(1) > 199 THEN ymod1% = -2ăIF FlineY1%(1) < 0 THEN ymod1% = 2ăIF FlineX2%(1) > 319 THEN xmod2% = -3ăIF FlineX2%(1) < 0 THEN xmod2% = 3ăIF FlineY2%(1) > 199 THEN ymod2% = -3ăIF FlineY2%(1) < 0 THEN ymod2% = 3ăă                                      ' move line.ăFlineX1%(1) = FlineX1%(1) + xmod1%: FlineY1%(1) = FlineY1%(1) + ymod1%ăFlineX2%(1) = FlineX2%(1) + xmod2%: FlineY2%(1) = FlineY2%(1) + ymod2%ă                                      ' age the position of the linesăFOR X% = 8 TO 2 STEP -1ă    FlineX1%(X%) = FlineX1%(X% - 1): FlineY1%(X%) = FlineY1%(X% - 1)ă    FlineX2%(X%) = FlineX2%(X% - 1): FlineY2%(X%) = FlineY2%(X% - 1)ăNEXT X%ă                                      ' Draw the linesăFOR X% = 4 TO 8 STEP 2ă    LINE (FlineX1%(X%), FlineY1%(X%))-(FlineX2%(X%), FlineY2%(X%)), 2ăNEXT X%ăLINE (FlineX1%(1), FlineY1%(1))-(FlineX2%(1), FlineY2%(1)), 10ăăă  PCOPY 1, 0                          ' Copy Page 1 (Hidden) to Page 0ăLOOP WHILE INKEY$ = ""ăăDaniel Davies                  FOUNTAIN PARTICLE SIMULATION   ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        65   1646     FOUNTAIN.BAS'FOUNTAIN PARTICLE SIMULATIONă'keys areă'+ to increase gravityă'- to reduce gravityă'x to increase wind speedă'z to decrease wind speedă'if wind speed is below zero then the wind is blowing left instead of rightă'if you want to use this code, you may, but please give me credit, and tellă'me about.ă'you can e-mail me at ia53@rapid.co.ukăăSCREEN 13ăăTYPE particleăx AS DOUBLEăy AS DOUBLEăxm AS DOUBLEăym AS DOUBLEăEND TYPEăănum% = 200ăDIM objs(num%) AS particleăDIM new(num%) AS particleăRANDOMIZE TIMERăFOR x% = 1 TO num%ăobjs(x%).x = INT((RND * 20) + 150)ăobjs(x%).y = 0ăobjs(x%).xm = (RND * 1.25) - .625ăobjs(x%).ym = (RND * 3) + 2ăNEXT x%ăwind# = 0ăGRAV# = .1ăst# = TIMERăDOăZ$ = UCASE$(INKEY$)ăIF Z$ = "Z" THEN wind# = wind# - .01ăIF Z$ = "X" THEN wind# = wind# + .01ăIF Z$ = "-" THEN GRAV# = GRAV# - .01ăIF Z$ = "+" THEN GRAV# = GRAV# + .01ăFOR x% = 1 TO num%ăăIF objs(x%).y > 200 THEN GOTO skip:ă        PSET (new(x%).x, new(x%).y), 0ă        PSET (objs(x%).x, 199 - objs(x%).y), 15ă        new(x%).x = objs(x%).xă        new(x%).y = 199 - objs(x%).yăskip:ă        objs(x%).x = objs(x%).x + objs(x%).xmă        objs(x%).y = objs(x%).y + objs(x%).ymă        objs(x%).ym = objs(x%).ym - GRAV#ă        objs(x%).xm = objs(x%).xm + wind#ăăIF objs(x%).y <= 0 OR objs(x%).x > 320 OR objs(x%).x < 0 THENăobjs(x%).x = INT((RND * 20) + 150): objs(x%).y = 0ăobjs(x%).xm = (RND * 1.25) - .625: objs(x%).ym = (RND * 3) + 2ăEND IFăăNEXT x%ăLOCATE 1, 1ăPRINT USING "##.##"; wind#ăPRINT USING "##.##"; GRAV#ăp% = 0ăf% = f% + 1ăPRINT ABS(INT(f% / (st# - TIMER))); "fps"ăLOOP WHILE Z$ <> "Q"ăDaniel Davies                  DOT MORPHING                   ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        160  3328     DMORPH.BAS  '*** DOT MORPHING PROGRAM IN Q-BASIC BY DANIEL DAVIESă'*** IF YOU USE THESE ROUTINES IN ANYTHING WOULD YOU PLEASE GIVE ME CREDITă'*** AND E-MAIL ME AT THE ADDRESS BELOW TELLING ME ABOUT IT.ă'*** E-MAIL: ia53@rapid.co.ukăDEFINT A-Zăă'*** INITIALSE THE SCREENăSCREEN 7, , 0, 1ăă'*** SET DATA TYPE FOR MOVEMENT OF POINTS AND CO-ORDINATESăTYPE pixelăx AS INTEGERăy AS INTEGERăEND TYPEăTYPE incăx AS DOUBLEăy AS DOUBLEăEND TYPEăă'*** READ THE NUMBER OF POINTS IN EACH OBJECTăREAD npăă'*** DIMENSION ARRAYS TO THE NUMBER OF POINTSăDIM start(0 TO np) AS pixelăDIM endp(0 TO np) AS pixelăDIM current(0 TO np) AS incăDIM increment(0 TO np) AS incăă'*** SET THE NUMBER OF FRAMES TO DO THE DOT MORPH OVERăframes = 200ăă'*** SET CURRENT FRAME TO START FRAMEăFOR x = 1 TO npăREAD start(x).x, start(x).yăcurrent(x).x = start(x).xăcurrent(x).y = start(x).yăNEXT xăă'*** SET STUFF REQUIRED TO DRAW POLYGONS.ăstart(0).x = start(1).xăstart(0).y = start(1).yăcurrent(0).x = start(np).xăcurrent(0).y = start(np).yăă'*** READ IN OBJECTSăFOR x = 1 TO npăREAD endp(x).x, endp(x).yăNEXT xăă'*** CALCULATE DISTANCE TO MOVE EACH POINT PER FRAMEăFOR x = 1 TO npăincrement(x).x = (endp(x).x - start(x).x) / framesăincrement(x).y = (endp(x).y - start(x).y) / framesăNEXT xăă'*** THE MAIN LOOPăDOă'*** MORPH FROM START TO END FRAMEăFOR Q = 1 TO framesăă'*** INCREMENT POINTS BY VALUE FOR EACH FRAMEăFOR x = 1 TO npăcurrent(x).x = current(x).x + increment(x).xăcurrent(x).y = current(x).y + increment(x).yăNEXT xăă'*** DRAW THE POLYGONăFOR y = 1 TO np - 1ăLINE (current(y).x, current(y).y)-(current(y + 1).x, current(y + 1).y)ăNEXT yăLINE (current(np).x, current(np).y)-(current(1).x, current(1).y)ăă'*** COPY THE HIDDEN PAGE TO THE VISIBLE PAGE AND BLANK HIDDEN PAGE.ăPCOPY 0, 1ăCLSăă'*** CHECK FOR KEYPRESSESăZ$ = INKEY$: IF Z$ <> "" THEN GOTO ENDIT:ăNEXT Qăăă'*** THE BOUNCE BACK STAGEăFOR Q = 1 TO framesăă'*** MOVE POINT BACK BY INCREMENT FOR EACH POINTăFOR x = 1 TO npăcurrent(x).x = current(x).x - increment(x).xăcurrent(x).y = current(x).y - increment(x).yăNEXT xăă'*** DRAW POLYGONăFOR y = 1 TO np - 1ăLINE (current(y).x, current(y).y)-(current(y + 1).x, current(y + 1).y)ăNEXT yăLINE (current(np).x, current(np).y)-(current(1).x, current(1).y)ăă'*** SHOW HIDDEN PAGE THEN BLANK ITăPCOPY 0, 1ăCLSăă'*** CHECK FOR KEYPRESSăZ$ = INKEY$: IF Z$ <> "" THEN GOTO ENDIT:ăNEXT QăăLOOPăă'*** END THE PROGRAMăENDIT:ăSCREEN 0ăWIDTH 80, 25ăCLSăă'*** THE OBJECTSăă'*** THE DESCRIPTIONS FOR OBJECTS ARE VERY SIMPLE THEY ARE A LIST OF THEă'*** POINTS CO-ORDINATES AND FROM THESE TWO KEYFRAMES THE COMPUTER GENERATESă'*** TWEENS (IN BETWEEN FRAMES) AND DISPLAYS THEM.ăă'*** THE NUMBER OF POINTS IN EACH OBJECTăDATA 18ăă'*** THE FIRST OBJECTăDATA 211,184ăDATA 256,168ăDATA 289,144ăDATA 307,115ăDATA 307,84ăDATA 289,54ăDATA 256,31ăDATA 211,15ăDATA 159,10ăDATA 108,15ăDATA 63,31ăDATA 30,55ăDATA 12,84ăDATA 12,115ăDATA 30,145ăDATA 63,168ăDATA 108,184ăDATA 160,189ă    ă'*** THE SECOND OBJECTăDATA 80,130ăDATA 90,160ăDATA 130,160ăDATA 140,130ăDATA 120,130ăDATA 120,100ăDATA 140,90ăDATA 150,80ăDATA 150,60ăDATA 140,40ăDATA 110,30ăDATA 100,30ăDATA 80,40ăDATA 70,60ăDATA 70,80ăDATA 80,90ăDATA 100,100ăDATA 100,130ăDaniel Davies                  SINUSOIDAL PALETTE GENERATOR   ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        92   2411     SINE.BAS    'SINUSOIDAL PALLETTE GENERATORă'This plasma uses moving sine waves to generate the pallette, making for ană'interesting effect.ă'If you want a routine to generate a plasma, don't use this, it's unoptimisedă'and I can write one which runs hundreds of times faster, using lookup tablesă'and other tricks.ă'I haven't got a web site yet but I've almost finished it, but in the meantimeă'if you want to contact me, my email address is - ia53@rapid.co.ukăSCREEN 13ăăDEF SEG = &HA000ăsfactor% = 3ăFOR y% = 0 TO 199ăq% = (SIN(y% * sfactor% * (3.141592653# / 180)) * 50)ăFOR x% = 0 TO 319ăPOKE z& + x%, (SIN(x% * sfactor% * (3.141592653# / 180)) * 50) - q% + 127ăNEXT x%ăz& = z& + 320&ăNEXT y%ăăDIM rsin1%(360)ăDIM rsin2%(360)ăDIM rsin3%(360)ăDIM gsin1%(360)ăDIM gsin2%(360)ăDIM gsin3%(360)ăDIM bsin1%(360)ăDIM bsin2%(360)ăDIM bsin3%(360)ăăFOR x% = 0 TO 360ărsin1%(x%) = (SIN(x% * 2 * (3.141592653# / 180)) * 17)ărsin2%(x%) = (SIN(x% * 4 * (3.141592653# / 180)) * 13)ărsin3%(x%) = (SIN(x% * 6 * (3.141592653# / 180)) * 7)ăăgsin1%(x%) = (SIN((x% + 120) * 2 * (3.141592653# / 180)) * 17)ăgsin2%(x%) = (SIN((x% + 120) * 4 * (3.141592653# / 180)) * 13)ăgsin3%(x%) = (SIN((x% + 120) * 6 * (3.141592653# / 180)) * 7)ăăbsin1%(x%) = (SIN((x% + 240) * 2 * (3.141592653# / 180)) * 17)ăbsin2%(x%) = (SIN((x% + 240) * 4 * (3.141592653# / 180)) * 13)ăbsin3%(x%) = (SIN((x% + 240) * 6 * (3.141592653# / 180)) * 7)ăNEXT x%ăăăDOăWAIT &H3DA, 8ăFOR x% = 0 TO 255ăOUT &H3C8, x%ăOUT &H3C9, rsin1%(x%) + rsin2%(x%) + rsin3%(x%) + 30ăOUT &H3C9, gsin1%(x%) + gsin2%(x%) + gsin3%(x%) + 30ăOUT &H3C9, bsin1%(x%) + bsin2%(x%) + bsin3%(x%) + 30ăNEXT x%ăăr1tmp% = rsin1%(0)ăr3tmp% = rsin3%(0)ăg2tmp% = gsin2%(0)ăb1tmp% = bsin1%(0)ăb3tmp% = bsin3%(0)ăăr2tmp% = rsin2%(360)ăg1tmp% = gsin1%(360)ăg3tmp% = gsin3%(360)ăb2tmp% = bsin2%(360)ăăFOR x% = 0 TO 359ărsin1%(x%) = rsin1%(x% + 1)ărsin3%(x%) = rsin3%(x% + 1)ăgsin2%(x%) = gsin2%(x% + 1)ăbsin1%(x%) = bsin1%(x% + 1)ăbsin3%(x%) = bsin3%(x% + 1)ăNEXT x%ăăFOR x% = 360 TO 1 STEP -1ărsin2%(x%) = rsin2%(x% - 1)ăgsin1%(x%) = gsin1%(x% - 1)ăgsin3%(x%) = gsin3%(x% - 1)ăbsin2%(x%) = bsin2%(x% - 1)ăNEXT x%ăărsin1%(360) = r1tmp%ărsin3%(360) = r3tmp%ăgsin2%(360) = g2tmp%ăbsin1%(360) = b1tmp%ăbsin3%(360) = b3tmp%ăărsin2%(0) = r2tmp%ăgsin1%(0) = g1tmp%ăgsin3%(0) = g3tmp%ăbsin2%(0) = b2tmp%ăăLOOP WHILE INKEY$ = ""ăDaniel Davies                  MOVING SINE WAVE               ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        47   1146     SINEWAVE.BAS'moving sine wave BY Daniel Daviesă'This is the sort of sine wave you use to generate moving plasmas.ă'I haven't got a web site yet but I've almost finished it, but in the meantimeă'if you want to contact me, my email address is - ia53@rapid.co.ukăăDIM sine1%(0 TO 360)ăDIM sine2%(0 TO 360)ăDIM sine3%(0 TO 360)ăDIM sine4%(0 TO 360)ăăSCREEN 7, , 1, 0ărtd = 3.141592654# / 180ăFOR y% = 0 TO 360ăsine1%(y%) = -(4 * SIN((y% * 16) * rtd))ăsine2%(y%) = -(9 * SIN((y% * 6) * rtd))ăsine3%(y%) = (10 * SIN((y% * 13) * rtd))ăsine4%(y%) = (6 * SIN((y% * 5) * rtd))ăNEXT y%ăăDOăs1tmp% = sine1%(0)ăs3tmp% = sine3%(0)ăFOR x% = 0 TO 359ăsine1%(x%) = sine1%(x% + 1)ăsine3%(x%) = sine3%(x% + 1)ăNEXT x%ăsine1%(360) = s1tmp%ăsine3%(360) = s3tmp%ăăs2tmp% = sine2%(360)ăs4tmp% = sine4%(360)ăFOR x% = 360 TO 1 STEP -1ăsine2%(x%) = sine2%(x% - 1)ăsine4%(x%) = sine4%(x% - 1)ăNEXT x%ăsine2%(0) = s2tmp%ăsine4%(0) = s4tmp%ăăăFOR x% = 0 TO 319ăPSET (x%, 100 + sine1%(x%) + sine2%(x%) + sine3%(x%) + sine4%(x%))ă'PSET (x%, 100 + sine1%(x%) + sine2%(x%))ă'PSET (x%, 100 + sine3%(x%) + sine4%(x%))ăNEXT x%ăPCOPY 1, 0ăCLSăLOOPăDaniel Davies                  SHAPE-SHIFTING PLASMA 1        ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        151  3802     MOVPLAS1.BAS'SHAPESHIFTING PLASMA BY Daniel Daviesă'this is a sinusoidal plasma which I wrote about a year ago, and haveă'modified to run fast enough to generate an animated plasma about 6 months agoă'but until now I haven't been able to post it on the net, because I didn'tă'have internet access.ă'I've also converted this to asic, so that I could compile it, the compiledă'form is  movplas.exe, this is much smoother than this version.ă'I haven't got a web site yet but I've almost finished it, but in the meantimeă'if you want to contact me, my email address is - ia53@rapid.co.ukăDIM PLASMA%(80, 50)ăDIM sine1%(0 TO 360)ăDIM sine2%(0 TO 360)ăDIM sine3%(0 TO 360)ăDIM sine4%(0 TO 360)ăDIM red%(0 TO 255)ăDIM green%(0 TO 255)ăDIM blue%(0 TO 255)ăăSCREEN 13ăDEF SEG = &HA000ăăDIM rsin1%(360)ăDIM rsin2%(360)ăDIM rsin3%(360)ăDIM gsin1%(360)ăDIM gsin2%(360)ăDIM gsin3%(360)ăDIM bsin1%(360)ăDIM bsin2%(360)ăDIM bsin3%(360)ăăFOR x% = 0 TO 360ărsin1%(x%) = (SIN(x% * 2 * (3.141592653# / 180)) * 17)ărsin2%(x%) = (SIN(x% * 4 * (3.141592653# / 180)) * 13)ărsin3%(x%) = (SIN(x% * 6 * (3.141592653# / 180)) * 7)ăăgsin1%(x%) = (SIN((x% + 120) * 2 * (3.141592653# / 180)) * 17)ăgsin2%(x%) = (SIN((x% + 120) * 4 * (3.141592653# / 180)) * 13)ăgsin3%(x%) = (SIN((x% + 120) * 6 * (3.141592653# / 180)) * 7)ăăbsin1%(x%) = (SIN((x% + 240) * 2 * (3.141592653# / 180)) * 17)ăbsin2%(x%) = (SIN((x% + 240) * 4 * (3.141592653# / 180)) * 13)ăbsin3%(x%) = (SIN((x% + 240) * 6 * (3.141592653# / 180)) * 7)ăNEXT x%ăăăăărtd = 3.141592654# / 180ăFOR y% = 0 TO 360ă'temporaryăsine1%(y%) = -(31 * SIN((y% * 7) * rtd))ăsine2%(y%) = -(6 * SIN((y% * 3) * rtd))ăsine3%(y%) = (19 * SIN((y% * 10) * rtd))ăsine4%(y%) = (44 * SIN((y% * 5) * rtd))ăNEXT y%ăăDOăs1tmp% = sine1%(0)ăs3tmp% = sine3%(0)ăFOR x% = 0 TO 359ăsine1%(x%) = sine1%(x% + 1)ăsine3%(x%) = sine3%(x% + 1)ăNEXT x%ăsine1%(360) = s1tmp%ăsine3%(360) = s3tmp%ăăs2tmp% = sine2%(360)ăs4tmp% = sine4%(360)ăFOR x% = 360 TO 1 STEP -1ăsine2%(x%) = sine2%(x% - 1)ăsine4%(x%) = sine4%(x% - 1)ăNEXT x%ăsine2%(0) = s2tmp%ăsine4%(0) = s4tmp%ăăăăăFOR y% = 0 TO 49ăymod& = (y% * 4) * 320&ăFOR x% = 0 TO 79ăx2% = x% * 4ăst1% = sine1%(x%) + sine2%(x%)ăst2% = sine3%(y%) + sine4%(y%)ăcol% = ((st2% + (((st1% + y%) MOD 254) + 1)) MOD 254) + 127ăăcol% = st1% - st2% + 127ăăăPOKE x2% + ymod&, col%: POKE x2% + ymod& + 1, col%ăPOKE x2% + ymod& + 2, col%: POKE x2% + ymod& + 3, col%ăPOKE x2% + ymod& + 320, col%: POKE x2% + ymod& + 321, col%ăPOKE x2% + ymod& + 322, col%: POKE x2% + ymod& + 323, col%ăPOKE x2% + ymod& + 640, col%: POKE x2% + ymod& + 641, col%ăPOKE x2% + ymod& + 642, col%: POKE x2% + ymod& + 643, col%ăPOKE x2% + ymod& + 960, col%: POKE x2% + ymod& + 961, col%ăPOKE x2% + ymod& + 962, col%: POKE x2% + ymod& + 963, col%ăăăăNEXT x%ăNEXT y%ăăFOR x% = 0 TO 255ăOUT &H3C8, x%ăOUT &H3C9, rsin1%(x%) + rsin2%(x%) + rsin3%(x%) + 30ăOUT &H3C9, gsin1%(x%) + gsin2%(x%) + gsin3%(x%) + 30ăOUT &H3C9, bsin1%(x%) + bsin2%(x%) + bsin3%(x%) + 30ăNEXT x%ăăr1tmp% = rsin1%(0)ăr3tmp% = rsin3%(0)ăg2tmp% = gsin2%(0)ăb1tmp% = bsin1%(0)ăb3tmp% = bsin3%(0)ăăr2tmp% = rsin2%(360)ăg1tmp% = gsin1%(360)ăg3tmp% = gsin3%(360)ăb2tmp% = bsin2%(360)ăăFOR x% = 0 TO 359ărsin1%(x%) = rsin1%(x% + 1)ărsin3%(x%) = rsin3%(x% + 1)ăgsin2%(x%) = gsin2%(x% + 1)ăbsin1%(x%) = bsin1%(x% + 1)ăbsin3%(x%) = bsin3%(x% + 1)ăNEXT x%ăăFOR x% = 360 TO 1 STEP -1ărsin2%(x%) = rsin2%(x% - 1)ăgsin1%(x%) = gsin1%(x% - 1)ăgsin3%(x%) = gsin3%(x% - 1)ăbsin2%(x%) = bsin2%(x% - 1)ăNEXT x%ăărsin1%(360) = r1tmp%ărsin3%(360) = r3tmp%ăgsin2%(360) = g2tmp%ăbsin1%(360) = b1tmp%ăbsin3%(360) = b3tmp%ăărsin2%(0) = r2tmp%ăgsin1%(0) = g1tmp%ăgsin3%(0) = g3tmp%ăbsin2%(0) = b2tmp%ăăăLOOP WHILE INKEY$ = ""ăăDaniel Davies                  SHAPE-SHIFTING PLASMA 2        ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        113  4313     MOVPLAS2.BAS'SHAPESHIFTING PLASMA 2 BY Daniel Daviesă'this is a sinusoidal plasma which I wrote ages ago, and have recentlyă'modified to run fast enough to generate an animated plasma.ă'I've also converted this intoă'I haven't got a web site yet but I've almost finished it, but in the meantimeă'if you want to contact me, my email address is - ia53@rapid.co.ukăăDIM PLASMA%(80, 50)ăDIM sine1%(0 TO 360)ăDIM sine2%(0 TO 360)ăDIM sine3%(0 TO 360)ăDIM sine4%(0 TO 360)ăDIM red%(0 TO 255)ăDIM green%(0 TO 255)ăDIM blue%(0 TO 255)ăăSCREEN 13ăDEF SEG = &HA000ăFOR a% = 0 TO 255ăREAD red%(a%), green%(a%), blue%(a%)ăOUT &H3C8, a%ăOUT &H3C9, red%(a%)ăOUT &H3C9, green%(a%)ăOUT &H3C9, blue%(a%)ăNEXT a%ăărtd = 3.141592654# / 180ăFOR y% = 0 TO 360ă'temporaryăsine1%(y%) = -(31 * SIN((y% * 7) * rtd))ăsine2%(y%) = -(6 * SIN((y% * 3) * rtd))ăsine3%(y%) = (19 * SIN((y% * 10) * rtd))ăsine4%(y%) = (44 * SIN((y% * 5) * rtd))ăNEXT y%ăăDOăs1tmp% = sine1%(0)ăs3tmp% = sine3%(0)ăFOR x% = 0 TO 359ăsine1%(x%) = sine1%(x% + 1)ăsine3%(x%) = sine3%(x% + 1)ăNEXT x%ăsine1%(360) = s1tmp%ăsine3%(360) = s3tmp%ăăs2tmp% = sine2%(360)ăs4tmp% = sine4%(360)ăFOR x% = 360 TO 1 STEP -1ăsine2%(x%) = sine2%(x% - 1)ăsine4%(x%) = sine4%(x% - 1)ăNEXT x%ăsine2%(0) = s2tmp%ăsine4%(0) = s4tmp%ăăăăymod& = 0ăFOR y% = 0 TO 49ăFOR x% = 0 TO 79ăx2% = x% * 4ăst1% = sine1%(x%) + sine2%(x%)ăst2% = sine3%(y%) + sine4%(y%)ăcol% = ((st2% + (((st1% + y%) MOD 254) + 1)) MOD 254) + 127ăăcol% = st1% - st2% + 127ăăăPOKE x2% + ymod&, col%: POKE x2% + ymod& + 1, col%ăPOKE x2% + ymod& + 2, col%: POKE x2% + ymod& + 3, col%ăPOKE x2% + ymod& + 320, col%: POKE x2% + ymod& + 321, col%ăPOKE x2% + ymod& + 322, col%: POKE x2% + ymod& + 323, col%ăPOKE x2% + ymod& + 640, col%: POKE x2% + ymod& + 641, col%ăPOKE x2% + ymod& + 642, col%: POKE x2% + ymod& + 643, col%ăPOKE x2% + ymod& + 960, col%: POKE x2% + ymod& + 961, col%ăPOKE x2% + ymod& + 962, col%: POKE x2% + ymod& + 963, col%ăăăăNEXT x%ăymod& = ymod& + 1280&ăNEXT y%ăăăLOOP WHILE INKEY$ = ""ăăDATA 15,15,15,16,15,15,18,15,15,19,14,14,21,14,14,22,13,13,24,13,13,25,12,12,27,12,12ăDATA 28,11,11,30,11,11,32,10,10,33,10,10,35,9,9,36,9,9,38,8,8,39,8,8,41,7,7,42,7,7ăDATA 44,6,6,45,6,6,47,5,5,49,5,5,50,4,4,52,4,4,53,3,3,55,3,3,56,2,2,58,2,2,59,1,1,61,1,1ăDATA 63,0,0,63,1,0,63,3,0,63,5,0,63,7,0,63,9,0,63,11,0,63,13,0,63,15,0,63,17,0,63,19,0ăDATA 63,21,0,63,23,0,63,25,0,63,27,0,63,29,0,63,31,0,63,33,0,63,35,0,63,37,0,63,39,0ăDATA 63,41,0,63,43,0,63,45,0,63,47,0,63,49,0,63,51,0,63,53,0,63,55,0,63,57,0,63,59,0ăDATA 63,61,0,63,63,0,63,63,1,63,63,3,63,63,5,63,63,7,63,63,9,63,63,11,63,63,13,63,63,15ăDATA 63,63,17,63,63,19,63,63,21,63,63,23,63,63,25,63,63,27,63,63,29,63,63,31,63,63,33ăDATA 63,63,35,63,63,37,63,63,39,63,63,41,63,63,43,63,63,45,63,63,47,63,63,49,63,63,51ăDATA 63,63,53,63,63,55,63,63,57,63,63,59,63,63,61,63,63,63,63,63,63,63,62,62,63,62,61ăDATA 63,61,60,63,61,59,63,60,58,63,60,57,63,59,56,63,59,55,63,58,54,63,58,53,63,57,52ăDATA 63,57,51,63,56,50,63,56,49,63,55,48,63,55,47,63,54,46,63,54,45,63,53,44,63,53,43ăDATA 63,52,42,63,52,41,63,51,40,63,51,39,63,50,38,63,50,37,63,49,36,63,49,35,63,48,34ăDATA 63,48,33,63,47,32,63,46,31,63,46,30,63,45,29,63,45,28,63,44,27,63,44,26,63,43,25ăDATA 63,43,24,63,42,23,63,42,22,63,41,21,63,41,20,63,40,19,63,40,18,63,39,17,63,39,16ăDATA 63,38,15,63,38,14,63,37,13,63,37,12,63,36,11,63,36,10,63,35,9,63,35,8,63,34,7ăDATA 63,34,6,63,33,5,63,33,4,63,32,3,63,32,2,63,31,1,63,30,0,63,30,0,63,29,0,63,28,0ăDATA 63,27,0,63,26,0,63,25,0,63,24,0,63,23,0,63,22,0,63,21,0,63,20,0,63,19,0,63,18,0ăDATA 63,17,0,63,16,0,63,15,0,63,15,0,63,14,0,63,13,0,63,12,0,63,11,0,63,10,0,63,9,0ăDATA 63,8,0,63,7,0,63,6,0,63,5,0,63,4,0,63,3,0,63,2,0,63,1,0,63,0,0,63,0,0,62,0,0ăDATA 61,0,0,61,0,0,60,0,0,59,0,0,58,0,0,58,0,0,57,0,0,56,0,0,56,0,0,55,0,0,54,0,0ăDATA 53,0,0,53,0,0,52,0,0,51,0,0,51,0,0,50,0,0,49,0,0,48,0,0,48,0,0,47,0,0,46,0,0ăDATA 46,0,0,45,0,0,44,0,0,43,0,0,43,0,0,42,0,0,41,0,0,40,0,0,40,0,0,39,1,1,38,1,1ăDATA 37,2,2,36,2,2,35,3,3,35,3,3,34,4,4,33,4,4,32,5,5,31,5,5,30,6,6,30,6,6,29,7,7ăDATA 28,7,7,27,8,8,26,8,8,25,9,9,25,9,9,24,10,10,23,10,10,22,11,11,21,11,11,20,12,12ăDATA 20,12,12,19,13,13,18,13,13,17,14,14,16,14,14,15,15,15,15,15,15,15,15,15ăDATA 999,999,999ăăDaniel Davies                  SHAPE-SHIFTING PLASMA 3        ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        143  3436     MOVPLAS3.BAS'SHAPESHIFTING PLASMA BY Daniel Daviesă'this is a sinusoidal plasma which I wrote about a year ago, and haveă'modified to run fast enough to generate an animated plasma about 6 months agoă'but until now I haven't been able to post it on the net, because I didn'tă'have internet access.ă'I've also converted this to asic, so that I could compile it, the compiledă'form is  movplas.exe, this is much smoother than this version.ă'I haven't got a web site yet but I've almost finished it, but in the meantimeă'if you want to contact me, my email address is - ia53@rapid.co.ukăDIM PLASMA%(80, 50)ăDIM sine1%(0 TO 360)ăDIM sine2%(0 TO 360)ăDIM sine3%(0 TO 360)ăDIM sine4%(0 TO 360)ăDIM red%(0 TO 255)ăDIM green%(0 TO 255)ăDIM blue%(0 TO 255)ăăSCREEN 13ăDEF SEG = &HA000ăăDIM rsin1%(360)ăDIM rsin2%(360)ăDIM rsin3%(360)ăDIM gsin1%(360)ăDIM gsin2%(360)ăDIM gsin3%(360)ăDIM bsin1%(360)ăDIM bsin2%(360)ăDIM bsin3%(360)ăăFOR x% = 0 TO 360ărsin1%(x%) = (SIN(x% * 2 * (3.141592653# / 180)) * 17)ărsin2%(x%) = (SIN(x% * 4 * (3.141592653# / 180)) * 13)ărsin3%(x%) = (SIN(x% * 6 * (3.141592653# / 180)) * 7)ăăgsin1%(x%) = (SIN((x% + 120) * 2 * (3.141592653# / 180)) * 17)ăgsin2%(x%) = (SIN((x% + 120) * 4 * (3.141592653# / 180)) * 13)ăgsin3%(x%) = (SIN((x% + 120) * 6 * (3.141592653# / 180)) * 7)ăăbsin1%(x%) = (SIN((x% + 240) * 2 * (3.141592653# / 180)) * 17)ăbsin2%(x%) = (SIN((x% + 240) * 4 * (3.141592653# / 180)) * 13)ăbsin3%(x%) = (SIN((x% + 240) * 6 * (3.141592653# / 180)) * 7)ăNEXT x%ăăăăărtd = 3.141592654# / 180ăFOR y% = 0 TO 360ă'temporaryăsine1%(y%) = -(31 * SIN((y% * 7) * rtd))ăsine2%(y%) = -(6 * SIN((y% * 3) * rtd))ăsine3%(y%) = (19 * SIN((y% * 10) * rtd))ăsine4%(y%) = (44 * SIN((y% * 5) * rtd))ăNEXT y%ăăDOăs1tmp% = sine1%(0)ăs3tmp% = sine3%(0)ăFOR x% = 0 TO 359ăsine1%(x%) = sine1%(x% + 1)ăsine3%(x%) = sine3%(x% + 1)ăNEXT x%ăsine1%(360) = s1tmp%ăsine3%(360) = s3tmp%ăăs2tmp% = sine2%(360)ăs4tmp% = sine4%(360)ăFOR x% = 360 TO 1 STEP -1ăsine2%(x%) = sine2%(x% - 1)ăsine4%(x%) = sine4%(x% - 1)ăNEXT x%ăsine2%(0) = s2tmp%ăsine4%(0) = s4tmp%ăăăăăFOR y% = 0 TO 36ăymod& = (y% * 4) * 320&ăFOR x% = 1 TO 36ăx2% = x% * 4ăst1% = sine1%(x%) + sine2%(x%)ăst2% = sine3%(y%) + sine4%(y%)ăcol% = ((st2% + (((st1% + y%) MOD 254) + 1)) MOD 254) + 127ăăcol% = st1% - st2% + 127ăăăPSET (x%, y%), col%ăPSET (72 - x%, 72 - y%), col%ăPSET (x%, 72 - y%), col%ăPSET (72 - x%, y%), col%ăNEXT x%ăNEXT y%ăă'FOR x% = 0 TO 255ă'OUT &H3C8, x%ă'OUT &H3C9, rsin1%(x%) + rsin2%(x%) + rsin3%(x%) + 30ă'OUT &H3C9, gsin1%(x%) + gsin2%(x%) + gsin3%(x%) + 30ă'OUT &H3C9, bsin1%(x%) + bsin2%(x%) + bsin3%(x%) + 30ă'NEXT x%ăăr1tmp% = rsin1%(0)ăr3tmp% = rsin3%(0)ăg2tmp% = gsin2%(0)ăb1tmp% = bsin1%(0)ăb3tmp% = bsin3%(0)ăăr2tmp% = rsin2%(360)ăg1tmp% = gsin1%(360)ăg3tmp% = gsin3%(360)ăb2tmp% = bsin2%(360)ăăFOR x% = 0 TO 359ărsin1%(x%) = rsin1%(x% + 1)ărsin3%(x%) = rsin3%(x% + 1)ăgsin2%(x%) = gsin2%(x% + 1)ăbsin1%(x%) = bsin1%(x% + 1)ăbsin3%(x%) = bsin3%(x% + 1)ăNEXT x%ăăFOR x% = 360 TO 1 STEP -1ărsin2%(x%) = rsin2%(x% - 1)ăgsin1%(x%) = gsin1%(x% - 1)ăgsin3%(x%) = gsin3%(x% - 1)ăbsin2%(x%) = bsin2%(x% - 1)ăNEXT x%ăărsin1%(360) = r1tmp%ărsin3%(360) = r3tmp%ăgsin2%(360) = g2tmp%ăbsin1%(360) = b1tmp%ăbsin3%(360) = b3tmp%ăărsin2%(0) = r2tmp%ăgsin1%(0) = g1tmp%ăgsin3%(0) = g3tmp%ăbsin2%(0) = b2tmp%ăăLOOP WHILE INKEY$ = ""ăăDaniel Davies                  FAST PLASMA GENERATOR          ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        327  10369    QBPLASMA.BAS'                    FAST PLASMA GENERATION IN QBASICă'                            BY DANIEL DAVIESă'                        E-MAIL : ia53@rapid.co.ukă'ă'                   originally Released 15th june 1996ă'ă'  * Introduction *ă'ă' This is a demonstration of how to do plasma effects on the PC in QBASICă' it isn't very fast compared to the routines they use in demos coded ină' languages like C, Pascal, and assembler, but it's still faster than mostă' generators for Q-Basic, the only exception that I've seen is another ofă' my plasmas which can do this in real time when it's compiled.ă'ă'  * Disclaimer *ă'ă' I am responsible for nothing!   The program has been throughly testedă'ă' I AM IN NO WAY RESPONSIBLE FOR ANY DAMAGE CAUSED BY THE USE OR MISUSE OFă' THIS SOFTWARE. NEITHER AM I RESPONSIBLE FOR ANY LOSS OF EARNINGS OR DAMAGEă' CAUSED BY THE USE OF THIS SOFTWARE. IT IS A GUIDE AND SHOULD NOT BE USED ASă' THE ONLY SOURCE OF INFORMATION.ă'ă'  * Operation *ă'ă' Operation is simple! Just load it up in qbasic and then run ită'ă'  * Distribution *ă'ă' You are encouraged to copy this program and share it with others.  If youă' can personally pass this program to another BBS I would be most grateful.ă'ă'  * How is the effect is acheived? *ă'ă' To make the simplest type of plasma, get a full spread of colours down theă' screen, so that the top line is dark, and the bottom line is light. Theă' sine wave acts on these colors and you've made your first plasma. it worksă' by calculating the value of the sine across the screen, and then addingă' them to the colours so if the value is high the colour is darker, and if theă' value is 0 then the colour doesn't change, but if the value is below zero ită' gets lighter.ă' This isn't the type of plasma used in this program because it's too boring.ă' There are much cooler plasma affects to be had than the above like the oneă' in this prog, in this you take two sine waves, one along each axes (X and Y,ă' or if you prefer up and down) and then modify the colours accordingly.ăă'*************************** Declare Subroutines *****************************ă'declare all subs/functionsăDECLARE SUB palgen ()ăDECLARE SUB MakePal (col%(), x%, y%)ăDECLARE SUB setpal ()ăDECLARE SUB cyclepal ()ăDECLARE SUB getcolours ()ăDECLARE SUB resetcolours ()ă'*****************************************************************************ăă'***************************** Set Screen Mode *******************************ă'set the screen to mode 13 so we've got loads of colours to play withăSCREEN 13ă'*****************************************************************************ăă'*************************** Set Size Of Arrays ******************************ă'set arrays for colour cyclingăDIM SHARED RED%(512)ăDIM SHARED GREEN%(512)ăDIM SHARED BLUE%(512)ăă'set arrays for current values of all colours so that we can reset themă'to there exact valuesăDIM SHARED STARTCOLRED%(256)ăDIM SHARED STARTCOLGREEN%(256)ăDIM SHARED STARTCOLBLUE%(256)ăă'setting the sizes for sine lookup tablesăDIM SINTAB1%(0 TO 360)ăDIM SINTAB2%(0 TO 360)ă'*****************************************************************************ăă'********************* Initialise Everything For The Program *****************ă'call routine to get current coloursăCALL getcoloursăă'generate some random numbers to make the sine table different every timeă'and hence the plasma differentăRANDOMIZE TIMERăq% = INT(RND * 25) + 1ăs1a = (RND(1) * 20) + 55ăs1b = (RND(1) * 10) + 20ăs2a = (RND(1) * 20) + 55ăs2b = (RND(1) * 8) + 11ăă'tell them what were up toăPRINT "calculating sine lookup table"ăPRINT "percent finished "ă'calculate the sine lookup tablesă'we need two because the screen is modified along the X and Y axesă'we generate a lookup table because Qbasics Sin command is so slowăFOR z% = 0 TO 360ăx% = z% + q%ăSINTAB1%(z%) = 5 * (((35 * SIN(x% / s1a)) + (15 * SIN(x% / s1b))))ăSINTAB2%(z%) = 10 * (((27 * SIN(x% / s2a)) + (6 * SIN(x% / s2b))))ăLOCATE 2, 18ăfin% = (.27777777777# * z%)ăPRINT fin%; "%"ăNEXT z%ăCLSăsetpală'*****************************************************************************ăăă'********************** Do The Hard Work To Make The Plasma ******************ă'now for the creation of the plasmaăFOR b% = 0 TO 200ăFOR a% = 0 TO 320ăcol% = ((SINTAB2%(b%) + (((SINTAB1%(a%) + b%) MOD 254) + 1)) MOD 254) + 1ăPSET (a%, b%), col%ăNEXT a%ăNEXT b%ă'*****************************************************************************ăă'*************** Do Any Fancy Tricks Like rotating the pallette **************ă'call the routine to cycle the palletteăCALL cyclepală'*****************************************************************************ăă'***************************** Clean Everything ******************************ă'clean everything up ready for exităCALL resetcoloursăSCREEN 0ăWIDTH 80, 25ă'*****************************************************************************ăăă'************************************ DATA ***********************************ă'now to give some pallete definitions so we don't have to use the crudy standardă'vga palleteăDATA 15,15,15,16,15,15,18,15,15,19,14,14,21,14,14,22,13,13,24,13,13,25,12,12,27,12,12ăDATA 28,11,11,30,11,11,32,10,10,33,10,10,35,9,9,36,9,9,38,8,8,39,8,8,41,7,7,42,7,7ăDATA 44,6,6,45,6,6,47,5,5,49,5,5,50,4,4,52,4,4,53,3,3,55,3,3,56,2,2,58,2,2,59,1,1,61,1,1ăDATA 63,0,0,63,1,0,63,3,0,63,5,0,63,7,0,63,9,0,63,11,0,63,13,0,63,15,0,63,17,0,63,19,0ăDATA 63,21,0,63,23,0,63,25,0,63,27,0,63,29,0,63,31,0,63,33,0,63,35,0,63,37,0,63,39,0ăDATA 63,41,0,63,43,0,63,45,0,63,47,0,63,49,0,63,51,0,63,53,0,63,55,0,63,57,0,63,59,0ăDATA 63,61,0,63,63,0,63,63,1,63,63,3,63,63,5,63,63,7,63,63,9,63,63,11,63,63,13,63,63,15ăDATA 63,63,17,63,63,19,63,63,21,63,63,23,63,63,25,63,63,27,63,63,29,63,63,31,63,63,33ăDATA 63,63,35,63,63,37,63,63,39,63,63,41,63,63,43,63,63,45,63,63,47,63,63,49,63,63,51ăDATA 63,63,53,63,63,55,63,63,57,63,63,59,63,63,61,63,63,63,63,63,63,63,62,62,63,62,61ăDATA 63,61,60,63,61,59,63,60,58,63,60,57,63,59,56,63,59,55,63,58,54,63,58,53,63,57,52ăDATA 63,57,51,63,56,50,63,56,49,63,55,48,63,55,47,63,54,46,63,54,45,63,53,44,63,53,43ăDATA 63,52,42,63,52,41,63,51,40,63,51,39,63,50,38,63,50,37,63,49,36,63,49,35,63,48,34ăDATA 63,48,33,63,47,32,63,46,31,63,46,30,63,45,29,63,45,28,63,44,27,63,44,26,63,43,25ăDATA 63,43,24,63,42,23,63,42,22,63,41,21,63,41,20,63,40,19,63,40,18,63,39,17,63,39,16ăDATA 63,38,15,63,38,14,63,37,13,63,37,12,63,36,11,63,36,10,63,35,9,63,35,8,63,34,7ăDATA 63,34,6,63,33,5,63,33,4,63,32,3,63,32,2,63,31,1,63,30,0,63,30,0,63,29,0,63,28,0ăDATA 63,27,0,63,26,0,63,25,0,63,24,0,63,23,0,63,22,0,63,21,0,63,20,0,63,19,0,63,18,0ăDATA 63,17,0,63,16,0,63,15,0,63,15,0,63,14,0,63,13,0,63,12,0,63,11,0,63,10,0,63,9,0ăDATA 63,8,0,63,7,0,63,6,0,63,5,0,63,4,0,63,3,0,63,2,0,63,1,0,63,0,0,63,0,0,62,0,0ăDATA 61,0,0,61,0,0,60,0,0,59,0,0,58,0,0,58,0,0,57,0,0,56,0,0,56,0,0,55,0,0,54,0,0ăDATA 53,0,0,53,0,0,52,0,0,51,0,0,51,0,0,50,0,0,49,0,0,48,0,0,48,0,0,47,0,0,46,0,0ăDATA 46,0,0,45,0,0,44,0,0,43,0,0,43,0,0,42,0,0,41,0,0,40,0,0,40,0,0,39,1,1,38,1,1ăDATA 37,2,2,36,2,2,35,3,3,35,3,3,34,4,4,33,4,4,32,5,5,31,5,5,30,6,6,30,6,6,29,7,7ăDATA 28,7,7,27,8,8,26,8,8,25,9,9,25,9,9,24,10,10,23,10,10,22,11,11,21,11,11,20,12,12ăDATA 20,12,12,19,13,13,18,13,13,17,14,14,16,14,14,15,15,15,15,15,15,15,15,15ăDATA 999,999,999ăăSUB cyclepală'Cycle the palleteăăRESTOREăSPEED% = 1ă  a% = 0ă ă  DOă  READ r%, g%, b%ă  IF r% = 999 THEN EXIT DOă  RED%(a%) = r%ă  GREEN%(a%) = g%ă  BLUE%(a%) = b%ă  a% = a% + 1ă  LOOPăă  FOR b% = 0 TO 255ă  RED%(a% + b%) = RED%(b%)ă  GREEN%(a% + b%) = GREEN%(b%)ă  BLUE%(a% + b%) = BLUE%(b%)ă  NEXTăă p% = 0ă OUT &H3C6, 255ă DOă OUT &H3C7, 15ă ă  FOR c% = 0 TO 255ă  OUT &H3C9, RED%(c% + p%)ă  OUT &H3C9, GREEN%(c% + p%)ă  OUT &H3C9, BLUE%(c% + p%)ă  NEXT c%ăăă  p% = p% + SPEED%ăă  SELECT CASE p%ă  CASE IS < a%ă  WAIT &H3DA, 8ă  WAIT &H3DA, 8ă  WAIT &H3DA, 8ă  WAIT &H3DA, 8ăă  CASE ELSEă  p% = 0ăă  END SELECTăă  z$ = INKEY$ă  z$ = UCASE$(z$)ă  IF z$ = "1" THEN SPEED% = 1ă  IF z$ = "2" THEN SPEED% = 2ă  IF z$ = "3" THEN SPEED% = 3ă  IF z$ = "4" THEN SPEED% = 4ă  IF z$ = "5" THEN SPEED% = 5ă  IF z$ = "6" THEN SPEED% = 6ă  IF z$ = "7" THEN SPEED% = 7ă  IF z$ = "8" THEN SPEED% = 8ă  IF z$ = "9" THEN SPEED% = 9ă  IF z$ = "0" THEN SPEED% = 0ă  IF z$ = "Q" THEN GOTO endofplascolourcycling:ă  IF z$ = "P" THEN palgenă  IF z$ = "R" THEN setpală  LOOPăendofplascolourcycling:ăăăEND SUBăăSUB getcoloursăFOR a% = 0 TO 255ăăOUT &H3C8, a%ăSTARTCOLRED%(a%) = INP(&H3C9)ăSTARTCOLGREEN%(a%) = INP(&H3C9)ăSTARTCOLBLUE%(a%) = INP(&H3C9)ăNEXT a%ăăEND SUBăăDEFINT A-ZăSUB MakePal (col%(), x%, y%)ăRANDOMIZE TIMERă  z% = (x% + y%) \ 2ă  IF col%(z%) >= 0 THEN EXIT SUBă  q% = ABS(x% - y%) \ 8ă  c% = (col%(x%) + col%(y%)) \ 2 + INT((RND * 3) - 1) * q%ă  IF c% < 0 THEN c% = 0ă  IF c% > 63 THEN c% = 63ă  col%(z%) = c%ă  MakePal col%(), x%, z%ă  MakePal col%(), y%, z%ăEND SUBăăDEFSNG A-ZăSUB palgenăFOR a% = 0 TO 255ăRED%(a%) = -1: GREEN%(a%) = -1: BLUE%(a%) = -1ăNEXT a%ăăRANDOMIZE TIMERăRED%(0) = INT(RND * 63)ăRANDOMIZE TIMERăGREEN%(0) = INT(RND * 63)ăRANDOMIZE TIMERăBLUE%(0) = INT(RND * 63)ăRANDOMIZE TIMERăRED%(255) = RED%(0) + INT((RND * 3) - 1)ăRANDOMIZE TIMERăGREEN%(255) = GREEN%(0) + INT((RND * 3) - 1)ăRANDOMIZE TIMERăBLUE%(255) = BLUE%(0) + INT((RND * 3) - 1)ăăMakePal RED%(), 0, 255ăMakePal GREEN%(), 0, 255ăMakePal BLUE%(), 0, 255ăă'define the palletteăFOR a% = 0 TO 255ăOUT &H3C8, a%ăOUT &H3C9, RED%(a%)ăOUT &H3C9, GREEN%(a%)ăOUT &H3C9, BLUE%(a%)ăNEXT a%ăă  FOR b% = 0 TO 255ă  RED%(a% + b%) = RED%(b%)ă  GREEN%(a% + b%) = GREEN%(b%)ă  BLUE%(a% + b%) = BLUE%(b%)ă  NEXTăăEND SUBăăSUB resetcoloursăăFOR a% = 0 TO 255ăOUT &H3C8, a%ăOUT &H3C9, STARTCOLRED%(a%)ăOUT &H3C9, STARTCOLGREEN%(a%)ăOUT &H3C9, STARTCOLBLUE%(a%)ăNEXT a%ăăEND SUBăăSUB setpalăăRESTOREă'define the palletteăFOR a% = 0 TO 255ăREAD RED%(a%), GREEN%(a%), BLUE%(a%)ăOUT &H3C8, a%ăOUT &H3C9, RED%(a%)ăOUT &H3C9, GREEN%(a%)ăOUT &H3C9, BLUE%(a%)ăNEXT a%ă ă  FOR b% = 0 TO 255ă  RED%(a% + b%) = RED%(b%)ă  GREEN%(a% + b%) = GREEN%(b%)ă  BLUE%(a% + b%) = BLUE%(b%)ă  NEXTăăEND SUBăDaniel Davies                  READ FRACTINT .MAP COLOUR FILESia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        45   1311     READPAL.BAS 'These routines allow the use of fractint .MAP colour files, without havingă'to convert them.ă'usemap  - reads the file straight to the video card's pallette registers.ă'readmap - reads the pallette into three arrays called red, green, and blueă'          so that you can use them more easilyă'you have permission to use these for whatever you want, just so long as youă'give me credit and tell me about it.ă'email me at :- ia53@rapid.co.ukăDECLARE SUB usemap (file$)ăDECLARE SUB readmap (file$)ăDIM SHARED red%(255)ăDIM SHARED green%(255)ăDIM SHARED blue%(255)ăăSUB readmap (file$)ăfile% = FREEFILEăOPEN file$ FOR INPUT AS file%ăcol% = 0ăDOăLINE INPUT #1, lin$ăred%(col%) = VAL(LTRIM$(RTRIM$(MID$(lin$, 1, 3)))) / 4ăgreen%(col%) = VAL(LTRIM$(RTRIM$(MID$(lin$, 4, 4)))) / 4ăblue%(col%) = VAL(LTRIM$(RTRIM$(MID$(lin$, 8, 4)))) / 4ăcol% = col% + 1ăLOOP UNTIL (EOF(file%))ăCLOSE file%ăEND SUBăăSUB usemap (file$)ăfile% = FREEFILEăOPEN file$ FOR INPUT AS file%ăcol% = 0ăDOăLINE INPUT #1, lin$ăred% = VAL(LTRIM$(RTRIM$(MID$(lin$, 1, 3)))) / 4ăgreen% = VAL(LTRIM$(RTRIM$(MID$(lin$, 4, 4)))) / 4ăblue% = VAL(LTRIM$(RTRIM$(MID$(lin$, 8, 4)))) / 4ăOUT &H3C8, col%ăOUT &H3C9, red%ăOUT &H3C9, green%ăOUT &H3C9, blue%ăcol% = col% + 1ăLOOP UNTIL (EOF(file%))ăCLOSE file%ăEND SUBăDaniel Davies                  BOUNCING LINES                 ia53@rapid.co.uk               05-24-97 (15:20)       QB, QBasic, PDS        87   3435     MYSTERY.BAS 'Bouncing lines by Daniel Daviesă'if you use this routine in a program please give me some credit.ă'Copyright (C) UK 1996 Daniel Daviesă'e-mail me at :- ia53@rapid.co.ukăDIM SHARED FlineX1%(1 TO 10): DIM SHARED FlineY1%(1 TO 10)ăDIM SHARED FlineX2%(1 TO 10): DIM SHARED FlineY2%(1 TO 10)ăDIM SHARED FlineX3%(1 TO 10): DIM SHARED FlineY3%(1 TO 10)ăDIM SHARED FlineX4%(1 TO 10): DIM SHARED FlineY4%(1 TO 10)ăDIM SHARED FlineX5%(1 TO 10): DIM SHARED FlineY5%(1 TO 10)ăăRANDOMIZE TIMERăFlineX1%(1) = INT(RND * 320): FlineY1%(1) = INT(RND * 200)ăFlineX2%(1) = INT(RND * 320): FlineY2%(1) = INT(RND * 200)ăFlineX3%(1) = INT(RND * 320): FlineY3%(1) = INT(RND * 200)ăFlineX4%(1) = INT(RND * 320): FlineY4%(1) = INT(RND * 200)ăFlineX5%(1) = INT(RND * 320): FlineY5%(1) = INT(RND * 200)ăxmod1% = -2: ymod1% = 2ăxmod2% = 2: ymod2% = -2ăxmod3% = -2: ymod3% = -2ăxmod4% = 2: ymod4% = 2ăxmod5% = -2: ymod5% = 3ăăSCREEN 7, 0, 1, 0ăstarttime! = TIMERăDOăIF FlineX1%(1) > 319 THEN xmod1% = -2ăIF FlineX1%(1) < 0 THEN xmod1% = 2ăIF FlineY1%(1) > 199 THEN ymod1% = -2ăIF FlineY1%(1) < 0 THEN ymod1% = 2ăIF FlineX2%(1) > 319 THEN xmod2% = -2ăIF FlineX2%(1) < 0 THEN xmod2% = 2ăIF FlineY2%(1) > 199 THEN ymod2% = -2ăIF FlineY2%(1) < 0 THEN ymod2% = 2ăIF FlineX3%(1) > 319 THEN xmod3% = -2ăIF FlineX3%(1) < 0 THEN xmod3% = 2ăIF FlineY3%(1) > 199 THEN ymod3% = -2ăIF FlineY3%(1) < 0 THEN ymod3% = 2ăIF FlineX4%(1) > 319 THEN xmod4% = -2ăIF FlineX4%(1) < 0 THEN xmod4% = 2ăIF FlineY4%(1) > 199 THEN ymod4% = -2ăIF FlineY4%(1) < 0 THEN ymod4% = 2ăIF FlineX5%(1) > 319 THEN xmod5% = -2ăIF FlineX5%(1) < 0 THEN xmod5% = 2ăIF FlineY5%(1) > 199 THEN ymod5% = -3ăIF FlineY5%(1) < 0 THEN ymod5% = 3ăăFlineX1%(1) = FlineX1%(1) + xmod1%: FlineY1%(1) = FlineY1%(1) + ymod1%ăFlineX2%(1) = FlineX2%(1) + xmod2%: FlineY2%(1) = FlineY2%(1) + ymod2%ăFlineX3%(1) = FlineX3%(1) + xmod3%: FlineY3%(1) = FlineY3%(1) + ymod3%ăFlineX4%(1) = FlineX4%(1) + xmod4%: FlineY4%(1) = FlineY4%(1) + ymod4%ăFlineX5%(1) = FlineX5%(1) + xmod5%: FlineY5%(1) = FlineY5%(1) + ymod5%ăăFOR x% = 10 TO 2 STEP -1ăFlineX1%(x%) = FlineX1%(x% - 1): FlineY1%(x%) = FlineY1%(x% - 1)ăFlineX2%(x%) = FlineX2%(x% - 1): FlineY2%(x%) = FlineY2%(x% - 1)ăFlineX3%(x%) = FlineX3%(x% - 1): FlineY3%(x%) = FlineY3%(x% - 1)ăFlineX4%(x%) = FlineX4%(x% - 1): FlineY4%(x%) = FlineY4%(x% - 1)ăFlineX5%(x%) = FlineX5%(x% - 1): FlineY5%(x%) = FlineY5%(x% - 1)ăNEXT x%ăăFOR x% = 10 TO 4 STEP -2ăc% = 7ăIF x% = 8 THEN c% = 8ăIF x% >= 9 THEN c% = 0ăLINE (FlineX1%(x%), FlineY1%(x%))-(FlineX2%(x%), FlineY2%(x%)), c%ăLINE (FlineX1%(x%), FlineY1%(x%))-(FlineX3%(x%), FlineY3%(x%)), c%ăLINE (FlineX3%(x%), FlineY3%(x%))-(FlineX4%(x%), FlineY4%(x%)), c%ăLINE (FlineX4%(x%), FlineY4%(x%))-(FlineX5%(x%), FlineY5%(x%)), c%ăLINE (FlineX5%(x%), FlineY5%(x%))-(FlineX2%(x%), FlineY2%(x%)), c%ăNEXT x%ăăLINE (FlineX1%(1), FlineY1%(1))-(FlineX2%(1), FlineY2%(1)), 15ăLINE (FlineX1%(1), FlineY1%(1))-(FlineX3%(1), FlineY3%(1)), 15ăLINE (FlineX3%(1), FlineY3%(1))-(FlineX4%(1), FlineY4%(1)), 15ăLINE (FlineX4%(1), FlineY4%(1))-(FlineX5%(1), FlineY5%(1)), 15ăLINE (FlineX5%(1), FlineY5%(1))-(FlineX2%(1), FlineY2%(1)), 15ăă'UnRemark the next five lines to display the frame rate the animationă'is running at.ă'IF q% MOD 30 = 29 THENă'LOCATE 1, 1ă'PRINT (INT(q% / (TIMER - starttime!))); "FPS "ă'END IFă'q% = q% + 1ăăPCOPY 1, 0ăLOOP WHILE INKEY$ = ""ăFrank W. Zammetti              FLEXIBLE RASTER DISTANCE       fzammett@fpsserv.com           05-28-97 (14:06)       QB, QBasic, PDS        77   2327     FRD.BAS        SCREEN 0: CLS: COLOR 2: PRINTă   PRINT "This is a little effect that I did originally about 10 years ago no the C64"ă   PRINT "that I ported over to the PC.  It was a cheat back then, and it still is!"ă   PRINT "This is called (F)lexible (R)aster (D)istance, a relative of (F)lexible"ă   PRINT "(L)ine (D)istance, but while FLD was a real technique, this is a fake that"ă   PRINT "approximates what FRD would look like if it were actually possible!"ă   PRINT: PRINT: COLOR 15ă   PRINT "PRESS ANY KEY TO BEGIN..."ă   LOCATE 22,1: COLOR 12ă   PRINT "(C)opyright 1997 by Frank W. Zammetti": PRINTă   PRINT "Use is as you wish... But please give me credit somewhere!";ă   DO WHILE INKEY$ = "": LOOPă	CLEAR: DEFINT a-z: SCREEN 12: CLSă   DIM FieldCols(100), FieldDist(100): GOSUB ReadCols: GOSUB ReadDistancesăăMainLoop:ă   WAIT &h3da, 8ă   FOR z = 1 TO 1000: NEXT ză   WAIT &h3da, 8ă   ScanLine = 60: GOSUB DisplayFieldă	IF INKEY$ <> "" THEN GOTO ByeByeNowă   y = FieldDist(1)ă   FOR z = 1 TO (FDS - 2): FieldDist(z) = FieldDist(z + 1): NEXT ză   FieldDist(FDS - 1) = yă   GOTO MainLoopăăDisplayField:ă	z = ScanLineă   y = 1ăăDisplayFieldLoop:ă	x = FieldDist(y)ă   IF x = -1 THEN RETURNă   IF x = 0 THEN GOTO DoColoră   FOR w = 1 TO x: LINE (1, z) - (640, z), 0: z = z + 1: NEXT wăăDoColor:ă	x = FieldCols(y)ă   IF x = -1 THEN RETURNă   LINE (1, z) - (640, z), x: z = z + 1: y = y + 1: GOTO DisplayFieldLoopăăReadCols:ă	y = 1ăăReadColsLoop:ă	READ z: FieldCols(y) = ză   IF z = -1 THEN GOTO ReadColsAllDoneă   y = y + 1: GOTO ReadColsLoopăăReadColsAllDone:ă	FCS = y: RETURNăăReadDistances:ă	y = 1ăăReadDistancesLoop:ă	READ z: FieldDist(y) = ză   IF z = -1 THEN GOTO ReadDistancesAllDoneă   y = y + 1: GOTO ReadDistancesLoopăăReadDistancesAllDone:ă	FDS = y: RETURNăăFieldColsData:ă	data 4,4,4,4,12,12,12,14,14,15,14,14,12,12,12,4,4,4,4ă   data 1,1,1,1,9,9,9,1,1,15,1,1,9,9,9,1,1,1,1ă   data 2,2,2,2,10,10,10,11,11,15,11,11,10,10,10,2,2,2,2,-1ăăFieldDistancesData:ă	data 0,1,2,3,4,5,6,7,8,9,10,11,12,11,10,9,8,7,6,5,4,3,2,1,0ă   data 1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1,0ă   data 1,2,3,4,5,6,5,4,3,2,1,1,1,-1ăăByeByeNow:ă	SCREEN 0: CLS: PRINT "Goodbye!...": PRINT: PRINTă   PRINT "Frank W. Zammetti (fzammett@fpsserv.com)"ă   PRINT: PRINT: PRINT: ENDăFrank W. Zammetti              BOUNCING COLOUR BARS           fzammett@fpsserv.com           05-28-97 (14:06)       QB, QBasic, PDS        144  3294     COLBARS.BAS 	SCREEN 0: CLSă   COLOR 2: PRINTă   PRINT "Just a stupid little program to bounce some color bars around on the screen"ă   PRINT "to emulate the good old days of the C64 when raster bars were the mark of a"ă   PRINT "real programmer!  These are fake and not good for too much, but what the"ă   PRINT "heck, nostalgia is always fun!": PRINT: PRINTă   COLOR 15ă   PRINT "PRESS RETURN TO BEGIN (ESC TO EXIT TO DEMONSTRATION)..."ă	LOCATE 21,1: COLOR 12ă   PRINT "(C)opyright 1997 by Frank W. Zammetti": PRINTă   PRINT "Use is as you wish... But please give me credit somewhere!";ă   DO WHILE INKEY$ <> CHR$(13): LOOPă   SCREEN 7: CLSă   DIM Cols(200), CBarA(50), CBarB(50)ă   FOR z = 1 TO 200: Cols(z) = 0: NEXT ză	z = 1: B1Dir = 1: B2Dir = 0: Zior=1ăăReadLoop:ă   IF z > 28 THEN GOTO ReadDoneă	READ aă   CBarA(z) = a: z = z + 1: GOTO ReadLoopăăReadDone:ă   CBarA(z) = -1: z = 1ăăRL2:ă   IF z > 28 THEN GOTO AllDoneă   READ aă   CBarB(z) = a: z = z + 1: GOTO RL2ăăAllDone:ă	CBarB(z)= -1: GOTO MainProgă	data 1,1,1,1,9,9,9,9,11,11,11,11,15,15,15,15,11,11,11,11,9,9,9,9,1,1,1,1ă	data 4,4,4,4,12,12,12,12,14,14,14,14,15,15,15,15,14,14,14,14,12,12,12,12,4,4,4,4ăăDrawMe:ă   WAIT &h3da,8ă   FOR z = 1 TO 200: LINE (1, z + 10) - (320, z + 10), Cols(z): NEXT ză   FOR z = 1 TO 200: COLS(z) = 0: NEXT ză	RETURNăăMainProg:ă	B1Loc = 1: B2Loc = 160ăăDoMe:ăă   IF Zior = 1 THEN GOTO OOVertă   IF Zior = 0 THEN GOTO ToVeroăăOOVert:ă	z = 1: GOSUB GetLoop: z = 1: GOSUB NBL: GOTO FinishedăăToVero:ă	z = 1: GOSUB NBL: z = 1: GOSUB GetLoop: GOTO FinishedăăGetLoop:ă   IF CBarA(z) = -1 THEN RETURNă   Cols(B1Loc + z) = CBarA(z): z = z + 1: GOTO GetLoopăăNBL:ă	IF CBarB(z) = -1 THEN RETURNă   Cols(B2Loc + z) = CBarB(z): z = z + 1: GOTO NBLăăFinished:ă   GOSUB DrawMeă   z = B1Diră	IF B1Dir = 1 THEN B1Loc = B1Loc+1ă   IF B1Dir = 0 THEN B1Loc = B1Loc-1ă   IF B1Loc > 160 THEN B1Dir = 0ă   IF B1Loc < 1 THEN B1Dir = 1ă	IF B2Dir = 1 THEN B2Loc = B2Loc+1ă   IF B2Dir = 0 THEN B2Loc = B2Loc-1ă   IF B2Loc < 1 THEN B2Dir = 1ă   IF B2Loc > 160 THEN B2Dir = 0ă   IF z <> B1Dir THEN GOTO ChangePrioră   z = 1ă   x$ = "": x$ = INKEY$ă   IF x$ = chr$(27) THEN GOTO BreakOută   GOTO DozeăăChangePrior:ă	IF Zior = 1 THEN GOTO ZeroSetă   IF Zior = 0 THEN Zior=1ă   z = 1: GOTO DozeăăZeroSet:ă	Zior = 0: z=1ăăDoze:ă   IF B1Dir=0 THEN GOSUB R1Uă   IF B1Dir=1 THEN GOSUB R1Dă   IF B2Dir=0 THEN GOSUB R2Uă   IF B2Dir=1 THEN GOSUB R2Dă   GOTO DoMeăăR1U:ă   z = CBarA(1)ă   x = 1: y = 2ăăR1Ul:ă	CBarA(x) = CBarA(y)ă   x = x + 1: y = y + 1ă   IF x <> 28 THEN GOTO R1Ulă   CBarA(28) = ză   RETURNăăR1D:ă   z = CBarA(28)ă   x = 28: y = 27ăăR1Dl:ă   CBarA(x) = CBarA(y)ă   x = x - 1: y = y - 1ă   IF x <> 1 THEN GOTO R1Dlă   CBarA(1) = ză   RETURNăăR2U:ă   z = CBarB(1)ă   x = 1: y = 2ăăR2Ul:ă   CBarB(x) = CBarB(y)ă   x = x + 1: y = y + 1ă   IF x <> 28 THEN GOTO R2Ulă   CBarB(28) = ză	RETURNăăR2D:ă   z = CBarB(28)ă   x = 28: y = 27ăăR2Dl:ă	CBarB(x) = CBarB(y)ă   x = x - 1: y = y - 1ă   IF x <> 1 THEN GOTO R2Dlă   CBarB(1) = ză	RETURNăăBreakOut:ă	SCREEN 0: CLS: WIDTH 80: COLOR 7ă   PRINT "Goodbye!": PRINT: PRINTă   PRINT "Frank W. Zammetti (fzammett@fpsserv.com)": PRINT: PRINTă   PRINT: ENDăFrank W. Zammetti              COLOUR SHIFTED TEXT            fzammett@fpsserv.com           05-28-97 (14:06)       QB, QBasic, PDS        61   1635     COLTEXT.BAS    SCREEN 0: CLS : WIDTH 40: DIM a(40)ă   WhatDir = 2ă	LOCATE 21,1: COLOR 12ă   PRINT "(C)opyright 1997 by Frank W. Zammetti": PRINTă   PRINT "Use is as you wish..."ă   PRINT "But please give me credit somewhere!";ă   a$ = "This is an ages-old effect that used to"ă   b$ = " be popular on the C64. Now here it is"ă   c$ = "  on the PC! It is easy to change the"ă   d$ = " direction of the colors (press SPACE)"ă   e$ = "    And it works in any mode! Enjoy!"ă   GOTO Begină   DATA 0,0,1,1,9,9,11,11,15,15,15,15,11,11,9,9,1,1,0,0ă   DATA 0,0,4,4,12,12,14,14,15,15,15,15,14,14,12,12,4,4,0,0ăăBegin:ă   FOR z = 1 TO 40: READ a(z): NEXT zăăLoopMe:ă   WAIT &h3da,8ă   FOR z = 1 TO 40: COLOR a(z)ă   LOCATE 9, z, 0: PRINT MID$(a$, z, 1)ă   LOCATE 11, z, 0: PRINT MID$(b$, z, 1)ă   LOCATE 13, z, 0: PRINT MID$(c$, z, 1)ă   LOCATE 15, z, 0: PRINT MID$(d$, z, 1)ă   LOCATE 17, z, 0: PRINT MID$(e$, z, 1)ă   NEXT ză	IF WhatDir = 2 THEN GOTO Yotateă   z = a(1)ă	w = 1: y = 2ăăZotate:ă   LET a(w) = a(y)ă   w = w + 1: y = y + 1ă   IF w <> 40 THEN GOTO Zotateă   a(40) = z: GOTO KeyLoopăăYotate:ă   z = a(40)ă   w = 39: y = 40ăăYotate1:ă   LET a(y) = a(w)ă   w = w - 1: y = y - 1ă   IF w <> 0 THEN GOTO Yotate1ă   a(1) = zăăKeyLoop:ă   z$ = INKEY$ă   IF Z$ = CHR$(27) THEN GOTO EndMeă   IF z$ = " " THEN GOTO ChangeDiră   GOTO LoopMeăăChangeDir:ă	IF WhatDir = 2 THEN WhatDir = 1: GOTO LoopMeă   IF WhatDir = 1 THEN WhatDir = 2: GOTO LoopMeăăEndMe:ă	SCREEN 0: CLS: WIDTH 80: PRINT "Goodbye!...": PRINT: PRINTă   PRINT "Frank W. Zammetti (fzammett@fpsserv.com)": PRINT: PRINTă   PRINT: ENDăFrank W. Zammetti              TV STATIC SIMULATION           fzammett@fpsserv.com           05-28-97 (14:06)       QB, QBasic, PDS        25   896      TVSTATIC.BAS	SCREEN 0: CLS: PRINTă   COLOR 12: PRINT "It dosen't get any simpler than this!  It's a small example of some TV"ă   PRINT "Static.  Enjoy!"ă   PRINT: PRINT: PRINT "PRESS ANY KEY TO BEGIN..."ă   DO WHILE INKEY$ = "": LOOPăă   DIM PCols(8): SCREEN 12: CLSă   PCols(1) = 1: PCols(2) = 2: PCols(3) = 3: PCols(4) = 4: PCols(5) = 5ă   PCols(6) = 6: PCols(7) = 7: PCols(8) = 8ă   DRAW "bm199,109 c15 r242 d232 l242 u232"ă   FOR y = 110 TO 340: FOR x = 200 TO 440: PSET (x, y), INT(RND(1) * 8) + 1ă   NEXT x: NEXT yăăLooper:ă   z = PCols(1): FOR y=1 TO 7: PCols(y) = PCols(y+1): PALETTE y, PCols(y)ă   NEXT y: PCols(8) = z: PALETTE 8, PCols(8)ă   FOR z = 1 TO 20000: NEXT ză   IF INKEY$<>"" THEN GOTO LaterYouă   GOTO LooperăăLaterYou:ă	SCREEN 0: CLS: WIDTH 80: CLSă   PRINT "Goodbye!...": PRINT: PRINTă   PRINT "Frank W. Zammetti (fzammett@fpsserv.com)"ă   PRINT: PRINT: PRINTăFrank W. Zammetti              PB SMOOTH SCROLLER             fzammett@fpsserv.com           05-28-97 (14:06)       PB                     649  15333    SCROLLER.BAS$HUGEă   CLEAR: DEFINT a-z: SCREEN 7: CLS: RANDOMIZE TIMERă   ScrXSize = 320ă   ScrYSize = 200ă   StartLine = 95ă   ScrollSize = 8ă   ScrMode = 1ă   PALETTE 15,3ă   COLOR 4ă   Message$ = " (C)OPYRIGHT 1997 BY FRANK W. ZAMMETTI.  USE IT AS YOU WISH"ă   Message$ = Message$ + "... BUT PLEASE GIVE ME CREDIT SOMEWHERE!ă   Message$ = Message$ + " WELL, AS YOU CAN SEE, THIS IS JUST"ă   Message$ = Message$ + " AN EXAMPLE OF A SMOOTH SCROLLER IN POWERBASIC."ă   Message$ = Message$ + " IT IS 99% PURE BASIC, WITH JUST"ă   Message$ = Message$ + " A SPRINKLING OF ASSEMBLY IN IT OF COURSE!  IT"ă   Message$ = Message$ + " IS CAPABLE OF VARIABLE-HEIGHT SCROLLS, ANYWHERE"ă   Message$ = Message$ + " FROM 8 X 8 TO 128 X 128 (ANY EVEN MULTIPLE OF"ă   Message$ = Message$ + " 8 IN FACT, SINCE THE BASE CHARACTER FONT DATA"ă   Message$ = Message$ + " IS AN 8 X 8 SET, WHICH I COPIED OVER FROM THE"ă   Message$ = Message$ + " GOOD-OLD COMMODORE 64!).  IT SHOULD RUN SMOOTH"ă   Message$ = Message$ + " AS SILK ON A 486 AT 66MHZ AND UP, BUT I HAVEN'T"ă   Message$ = Message$ + " TESTED IT BELOW THAT.  THE SIZE OF THE SCROLL DOES"ă   Message$ = Message$ + " MATTER THOUGH!  LATER.... ****                               @"ă	DIM Letter(ScrollSize + 1)ă   GOSUB Fontsetupă   DEF SEG = &ha000ăăResetIt:ă   v = 1ăăScroll:ă   u = 1ă	z$ = MID$(Message$, v, 1)ă   if z$ = "@" then goto resetItă   z = ASC(z$)ă   z = ((z - 32) * 8) + 1ă   FOR y = 1 TO 8: Letter(y) = Font(z): z = z + 1: NEXT yă   w = 0: x = 0: y = 0: z = 0ăăScroll1:ă   ! CLIă   PrevBit = BIT(Letter(1), 7)ă	SLine = StartLine * (ScrXSize / 8)ă	ZLine = (ScrXSize / 8) * ScrYSizeăăScrollLoop:ă   FOR z = 0 TO ScrollSize - 1ă   FOR y = ((ScrXSize / 8) - 1) TO 0 Step -1ă   WhatByte? = PEEK(ZLine + (z * (ScrXSize / 8)) + y)ă   PrevBitTemp = BIT(WhatByte?, 7)ă  	! MOV al, WhatByte?ă   ! SHL al, 1ă   ! MOV WhatByte?, ală   IF PrevBit = 1 THEN BIT SET WhatByte?, 0ă   IF PrevBit = 0 THEN BIT RESET WhatByte?, 0ă   PrevBit = PrevBitTempă   POKE (ZLine + (z * (ScrXSize / 8)) + y), WhatByte?ă   NEXT yă   PrevBit = BIT(Letter(z + 2), 7)ă   NEXT ză   FOR z = 1 TO ScrollSize: WhatByte? = Letter(z)ă  	! MOV al, WhatByte?ă   ! SHL al, 1ă   ! MOV WhatByte?, ală   Letter(z) = WhatByte?: NEXT ză   u = u + 1ă   IF u > 9 THEN GOTO NextLetterăăTransferMe:ă   WAIT &h3da,8ă   FOR z = SLine TO SLine + ((ScrollSize) * (ScrXSize / 8))ă   POKE z, PEEK(ZLine)ă   ZLine = ZLine + 1ă   NEXT ză   ! STIă   x$ = INKEY$ă   IF x$ = CHR$(27) THEN GOTO BreakOută   GOTO Scroll1ăăNextLetter:ă	v = v + 1ă   WAIT &h3da,8ă   FOR z = SLine TO SLine + ((ScrollSize - 1) * (ScrXSize / 8))ă   POKE z, PEEK(ZLine)ă   ZLine = ZLine + 1ă   NEXT ză   ! STIă   x$ = INKEY$ă   IF x$ = CHR$(27) THEN GOTO BreakOută   GOTO ScrollăăBreakOut:ă	SCREEN 0: CLS: WIDTH 80: CLSă   PRINT "Goodbye!...": PRINT: PRINTă	PRINT "Frank W. Zammetti (fzammett@fpsserv.com)": PRINT: PRINT: PRINTă   ENDăăfontsetup:ă	DIM Font(480)ă   z = 1ăăLooper:ă	READ a$ă   IF a$="EOF" THEN RETURNă   b = 0ă   IF MID$(a$,8,1) = "#" THEN b = b + 1ă   IF MID$(a$,7,1) = "#" THEN b = b + 2ă   IF MID$(a$,6,1) = "#" THEN b = b + 4ă   IF MID$(a$,5,1) = "#" THEN b = b + 8ă   IF MID$(a$,4,1) = "#" THEN b = b + 16ă   IF MID$(a$,3,1) = "#" THEN b = b + 32ă   IF MID$(a$,2,1) = "#" THEN b = b + 64ă   IF MID$(a$,1,1) = "#" THEN b = b + 128ă   Font(z) = bă   z = z + 1ă   GOTO Looperăă	     data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "  ##### "ă        data "  ####  "ă        data "  ###   "ă        data "  ###   "ă        data "        "ă        data "  ##    "ă        data "  ##    "ă        data "        "ăă        data " ## ##  "ă        data " ## ##  "ă        data "  #  #  "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "  #  #  "ă        data " ## ##  "ă        data "####### "ă        data "  ## #  "ă        data "####### "ă        data " ## ##  "ă        data "  #  #  "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "   ##   "ă        data "   ##   "ă        data "    #   "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "    ##  "ă        data "   ##   "ă        data "  ###   "ă        data "  ###   "ă        data "  ####  "ă        data "   ###  "ă        data "    ##  "ă        data "        "ăă        data "  ##    "ă        data "   ##   "ă        data "   ###  "ă        data "   ###  "ă        data "  ####  "ă        data "  ###   "ă        data "  ##    "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "        "ă        data "   ##   "ă        data "   ##   "ă        data " ###### "ă        data " ####   "ă        data "   ##   "ă        data "        "ă        data "        "ăă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "   ##   "ă        data "   ##   "ă        data "    #   "ă        data "        "ăă        data "        "ă        data "        "ă        data "        "ă        data " ###### "ă        data " ###    "ă        data "        "ă        data "        "ă        data "        "ăă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "    #   "ă        data "   ###  "ă        data "    #   "ă        data "        "ăă        data "        "ă        data "      ##"ă        data "     ## "ă        data "    ##  "ă        data "   ##   "ă        data "  ##    "ă        data " ##     "ă        data "        "ăă        data "  ##### "ă        data " ### ###"ă        data " ### ###"ă        data " #######"ă        data " #######"ă        data " #######"ă        data "  ##### "ă        data "        "ăă        data "   ##   "ă        data "  ###   "ă        data "   ##   "ă        data "   ##   "ă        data "  ####  "ă        data " ###### "ă        data " ###### "ă        data "        "ăă        data "  ##### "ă        data " ##   ##"ă        data " ##  ###"ă        data "    ### "ă        data "  ##### "ă        data " #######"ă        data " #######"ă        data "        "ăă        data "  ##### "ă        data " ##  ###"ă        data "    ### "ă        data "  ##### "ă        data "    ####"ă        data " ## ####"ă        data "  ##### "ă        data "        "ăă        data "    ### "ă        data "   #### "ă        data "  ##### "ă        data " ## ### "ă        data " #######"ă        data "    ### "ă        data "   #####"ă        data "        "ăă        data "  ######"ă        data " ###    "ă        data " ###### "ă        data "     ###"ă        data "    ####"ă        data " ## ####"ă        data "  ##### "ă        data "        "ăă        data "  ##### "ă        data " #### ##"ă        data " ####   "ă        data " ###### "ă        data " #### ##"ă        data " #### ##"ă        data "  ##### "ă        data "        "ăă        data " #######"ă        data " ##  ###"ă        data "    ### "ă        data "   #### "ă        data "  ####  "ă        data "  ####  "ă        data "  ####  "ă        data "        "ăă        data "  ##### "ă        data " #### ##"ă        data " #### ##"ă        data "  ##### "ă        data " #### ##"ă        data " #### ##"ă        data "  ##### "ă        data "        "ăă        data "  ##### "ă        data " ## ####"ă        data " ## ####"ă        data "  ######"ă        data "    ####"ă        data " ## ####"ă        data "  ##### "ă        data "        "ăă        data "        "ă        data "   ###  "ă        data "   ##   "ă        data "        "ă        data "   ##   "ă        data "  ###   "ă        data "        "ă        data "        "ăă        data "        "ă        data "   ##   "ă        data "   ##   "ă        data "        "ă        data "   ##   "ă        data "   ##   "ă        data "    #   "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data "        "ă        data "  ####  "ă        data " ###### "ă        data "        "ă        data " ###### "ă        data "  ####  "ă        data "        "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă        data " #####  "ă        data "## #### "ă        data "## #### "ă        data "   ###  "ă        data "  ###   "ă        data "        "ă        data "  ###   "ă        data "        "ăă	data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ă        data "        "ăă	data "  ###   "ă        data " #####  "ă        data " ## ##  "ă        data "####### "ă        data "### ### "ă        data "### ### "ă        data "### ### "ă        data "        "ăă	data "######  "ă        data " #   ## "ă        data " #####  "ă        data " #   ## "ă        data "####### "ă        data "####### "ă        data "######  "ă        data "        "ăă        data "  ####  "ă        data " ##  ## "ă        data "###     "ă        data "####  # "ă        data "####### "ă        data "####### "ă        data " #####  "ă        data "        "ăă        data " ####   "ă        data "  # ##  "ă        data "  #  ## "ă        data " ##  ## "ă        data "####### "ă        data "####### "ă        data "######  "ă        data "        "ăă        data " ###### "ă        data "  ##    "ă        data "  ###   "ă        data " ###  # "ă        data "####### "ă        data "####### "ă        data "######  "ă        data "        "ăă        data " ###### "ă        data "  ##  # "ă        data "  ###   "ă        data " ##     "ă        data "####    "ă        data "####    "ă        data "####    "ă        data "        "ăă        data "  ####  "ă        data " ##  ## "ă        data "###     "ă        data "#### ## "ă        data "####### "ă        data "####### "ă        data " ### ## "ă        data "        "ăă        data "### ### "ă        data "### ### "ă        data " #   #  "ă        data " #####  "ă        data " #   #  "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data "  ####  "ă        data "   ##   "ă        data "   ##   "ă        data "   ##   "ă        data "  ####  "ă        data "  ####  "ă        data "  ####  "ă        data "        "ăă        data "  ##### "ă        data "   ##   "ă        data "    ##  "ă        data " #  ### "ă        data "####### "ă        data "####### "ă        data " #####  "ă        data "        "ăă        data "#### ## "ă        data " ## ### "ă        data " ####   "ă        data " #####  "ă        data "### ### "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data " ####   "ă        data "  ##    "ă        data "  ##    "ă        data " ### ## "ă        data "####### "ă        data "####### "ă        data "####### "ă        data "        "ăă        data "### ### "ă        data "### ### "ă        data " #####  "ă        data " # # #  "ă        data " #   #  "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data "### ### "ă        data " ### #  "ă        data " # ###  "ă        data " #   #  "ă        data "### ### "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data "   ###  "ă        data " ## ##  "ă        data " #   #  "ă        data "### ### "ă        data "####### "ă        data "####### "ă        data " #####  "ă        data "        "ăă        data " #####  "ă        data "  ##  # "ă        data "  #  ## "ă        data " #####  "ă        data " ##     "ă        data "####    "ă        data "####    "ă        data "        "ăă        data "  ####  "ă        data " ##  ## "ă        data " #    # "ă        data "##  ##  "ă        data "##  ### "ă        data "### ### "ă        data " ### ## "ă        data "        "ăă        data " #####  "ă        data "  ##  # "ă        data "  #  ## "ă        data " #####  "ă        data " ## ### "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data "  ####  "ă        data " ## ### "ă        data "  ##    "ă        data "#   ##  "ă        data "####### "ă        data "####### "ă        data " #####  "ă        data "        "ăă        data "########"ă        data "## ## ##"ă        data "   ##   "ă        data "   ##   "ă        data "  ####  "ă        data "  ####  "ă        data "  ####  "ă        data "        "ăă        data " ### ## "ă        data "  ## ## "ă        data " ##  #  "ă        data "###  #  "ă        data "####### "ă        data "####### "ă        data " ### ## "ă        data "        "ăă     	data " ### ###"ă        data " ### ###"ă        data " #   #  "ă        data " ## ##  "ă        data "  # #   "ă        data "  ###   "ă        data "  ###   "ă        data "        "ăă        data "### ### "ă        data "### ### "ă        data " #   #  "ă        data "## # ## "ă        data "####### "ă        data "####### "ă        data " ## ##  "ă        data "        "ăă        data "### ### "ă        data "### ### "ă        data "  ###   "ă        data " #####  "ă        data "### ### "ă        data "### ### "ă        data "### ### "ă        data "        "ăă        data "###  ## "ă        data "###  ## "ă        data " ## ### "ă        data "# ##### "ă        data "## ###  "ă        data "######  "ă        data " ####   "ă        data "        "ăă        data " ###### "ă        data " ## ### "ă        data "   ##   "ă        data " ###  # "ă        data "####### "ă        data "####### "ă        data "####### "ă        data "        "ăă        data "EOF"ăDave Shea                      SIDE-SCROLLING CITY            FidoNet QUIK_BAS Echo          05-16-97 (07:42)       QB, QBasic, PDS        67   4344     CITY.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"CITY.ZIP",4^6:Z&=2982:?STRING$(50,177);ăU"%up()%9%%%d-%F-o(G*V=pC/+[%%,s%%%-%%%%hnCy(S%Rlffk;.a\KO5?dygA/ăU"z?^$Uf/$lg0Eo_Z#AO6ke6oVK(3PTHdyr&YqX%EIp-V3JuL'4Z7--a_l\UCV%M+ăU"[x[r*l.(f#5)f*VCPO7HEh8)+Si(d]i(diT4X8:Mo9rfjCq=u]'0yJN=6LM1Ze:ăU">l0&B&F\kgMMT\3bb*fk&Y#Piz5/_)smzq]H8;V8q52P9OP=[BlDCv1MKDQ-nRyăU"p:,40iz>[24'jb%Dwu8-zY,GMY,MKY,MTfqfjG#dE-QD?M34_ln\I2Y7*u^(PDqăU"kPXZl[8\P9.Tz2Uf.gSQS+*&L^Zu8u2S6pUMXu<*XkD7Q0;Yf,qV(I6.YdTfJRwăU"gUG*G^B-Q]HzBZEPgc3j)Eu*H4[aJ?gp$+K7,'uI+'5]B*SVUz:ugC8M?R.zI\[ăU"2q<*DPj981_%6K2_Mc1Au671QEstfkKGvM8?v,I*8P+&3#h1KO9J]j?+5b$>j=UăU"\g[W<=:?gSK1ji[z/F2wIUDT.0jUJuk[cm16ci;SrAstny,#,Id':.]S,IBxza1ăU"Q+4'+Q_J+zN.*+xW02]WZ\D>/JBE6/_HG,%vzs'S_s[I76b]?sLr.E03f1XY;$YăU"GDL'%mxUFuICk?8>B=n)u8G=GGO=qmQD+Srgoai3;'M3EPCM9^bScT-_N9$)WD<ăU"E:lx<'.itOj-TTzVKP,1'?(fN66dWpu6g53fbWn]MBqn+C)7raRqY(n1SN6v\b<ăU"u[2F$'3p05MUe+k%_q\7s<exp:_+9]m_mxWaEIzA*([W:z0OHT%zl4AMFQx)XevăU"4*_QfSQ+V4wXB_50nM/U%)F_gf[0b2OFJq^BtE8lG)jKZ<(8S_+6vWw0V5\2AuOăU"Qm4tsd<n[b\FfY#1I_=j?fgOUgpSURJ06=Md?<Y)RR,YUS*+TB)VIs\:]6afO>XăU"0tNMCVe#)B[J;Edfa(bn,lhEpJlBpB]lD4_+kdAOIrj,J(_qH:-mpt(Nd0t:NfIăU"bw.Ec(_nksWUkb?RK6usOnU]K(lWaxXL]iYWZnv=E'Pv.sDmup?cl\3CD')lynnăU")lIs0jRDbTV]F^o?yXJ+.oB:%V7bBPD1Hjhi/qJ&G^7RO8'sUpn$c#1xrBn9qcFăU"TRW\OaX[D.5i-QeL#hR\ONlBkn[h5)ZouA$$(]N(d<aXqBB2z(Mj^ugJ_IMCvO_ăU"qs.9,oMEH(ET0sPVgv;lx8>Tu=DQ;Nkh[]f^VAbyl#TsOHHoY,Dh,<nia[lfr#aăU"k4x;_)Fk4RH#^+i+l]LDf*iR+Hu_h:aV82t?Xguo6_h$Sr<lk0?Gw0x?wg?TuQIăU"B'>$HhFco8grE4ODZE>.ENQDfNMZ7Z5nlul28TuRG>cO*,BWXauuNkF$T>QtXHlăU"_heq>z=hFikF^v<hxr:cCXJu;1<^\rT<(u2lFKa?V[u;5)QjD5SlB-JQEknc\uAăU"$V>zMm9G^D3qMeXXH8u[zgdMKw7%dihowS]psFxfK&[srvV8BXaquCfbQUexNl=ăU"(vX4TZndpTN&Z/v.mGQN^FE[?GwX[aRd&TD^Ix&d)j2JMOTD.CPK<b.wouYy>XHăU"PWgPffsNrhu[Dtls#wZ_dlQ$,uxfAH$#joWl4?n\o$dQO'k$1?9lXnZZo8ZFVg>ăU"o6p#fh9M>g6HnMRq&0\<yWXdp,\rDF\$bc#th&ERvJYMExn7SDCsD'#TMErnDS;ăU".O*'-8<GZ?HG(zc8szYYFdT]lCXl8T8z[&=Jw7[+dZg40u5Nz'qf]d\VE-;or^GăU"HD#M3M45qPD*qPD)GMY,M0Y,PD$qPDqSPD&$;69X4KjtNDqF>Bc;DloU=yJjhqYăU".IZXRanEO-mLCW4yL=,Uc^cp6N/>bFce)CeXL(Dl9#y3eGiDR*doWo'waa'cs$=ăU"byd]G3H#M3df5SlhBkn\9tTqffY,MY^,M5qSPDqPdD)MY:,MY,8PDqbXU8j*dGGăU"tWPM:bLjsbP[Ov#%a;E&MlB^#C^VJ[esX1D3HVMZj<O(1h.4+7d%P&iR?&M3f5PăU"SlBkqnNZh7Dq7Qt7p0B/L>MqW8khd:&=]L3X7H+38+Mg]86<uc9hsrqz.(WqO._ăU"$u#irDK:Tjn)/QDc09TbD_6q*8a2jLx7#Ik<TXdgD,MmS.j[YfDchAjZ?Ph7;H8ăU"Z\gefs.i7(di(sdi<r=,GHF(-QE-AQE-Q.E-QE(-QE-AQE-Q;ourD%up()%9%%%ăU"d-%%-K(GEM-DIG)%%%M3%%%-%%%%hn(y(SgRfxF%;:>Smj9v]=PN19bc?W7]]j(ăU",MXy;jsJo5ogn9\tFi.v/N]QQ[VlihFgU1Mi7qtd+CRKveJr_+HjSh$PB=*0PTQăU"oT;+l:V?w<MEsCH9PBOldx/Y1Rh^h%X;Xd82F]Njq0.\#M%\,Brv'8:'^w3DWdTăU"*je3,4ZFr[8$b9B>0%,^vo)n6me*3n0+viBAXd\b5rT9:MQn9=bqLUD+to#x(9KăU"ID\bMGWigFZ%dSgfGQn47v.M4_MRl.8/ipR]Od(M(%<QjRP<??hjNWk6.\'l-8<ăU"p#N6]Zl>w]b<+[mJZL=qe_dE24n0ZJenLWke,F,rSaViB<QtT2DsNLkMjL&#B]jăU"B>1[+I\HcHMGA.A=s/#-Y#QhWyV4(L<c,+Z#PAv(HKmPu=^.wv*Eug?TNXJ$GnJăU"u9M^Da5(mSPTd?gavna.1hA=qJ:?Po/3J*(0gTyR3D^BNBt17:?._#W.Uc6Fv\QăU"9nmj&,G7$Q9KPvXJ4(gW0XxgJtb1PXoaHU(>Y%jvSs#F?VEARCG\FXo#^e[C1<măU"m8_Zm(x;U[kJs-h;#v[5d;w[#qe\Qh:rn9Y;W23siuFa;imdLfWf5*\MW(,nX72ăU"'_8U-AV%VVJ2BSCJbHtb#f0gd#4rNL1uKG4SY(8PMp:yYgYK7A4v;RV<v2GT1],ăU"Ou^^tAq#\g1QGgRRdla(t=U7mQd4L?:NK26mCmPtEP#wgY0C/xzY]n0Rh$w*V+SăU"%m&'+_(Lkee0xNYZv;1oCb7hm57<WsfMo,Cy)iS_VE:DiwHZl^EqDiTnH7-<jDBăU"\=3q?6WXwqUE]j,KNlW>%nKxk&j(7D=90O7JErl(MW$WXxoqBB0=4qo6uX'q/V?ăU"H;fu:8YZG?uen^SGY5Yf9V/qEpa/+/l&Bm(B4A6(7BjKdy*1Ij4#,HYs.=a-U]:ăU"1rPjLf1J?da)h-5;BQT'f00t[dxRQ+ekjn<AAi\KfbzHt-71:C3N(skUHv5qt;(ăU"]B>p&b;VUrB35YPbHl>NC<eQMZKj)k7>pE3*8c<<x?\QY.,P%GaK>h.uI,S^[.RăU"\Q]0?,Z)jYc5^)-_<l_'\p_=8]MmB#t6%+hR3wi^&?OG.50VLd-SqI^w((u?hUPăU"y7=KcmU=U4.+e4'GR\-:C'keffi$W=Zhm&EuhNfw^rO>fHa'HRQnXc)X3tT4uD=ăU"C]v3lvVOY#[91*>tMf*7WDfihE4J.C4X;eBKVu:GXAQ;#=4bFCef(+>n9fOdevAăU"n-VL,2gv?9,zk>Bf>YO+lBO,?HM6(Mm0A73^D#ANgoBZWn*LBEbIPR6/VXl</y:ăU"pH8^o*DJMK%fP.a&&t*BKwJ6C],Ucru;<NysD%up&'%9%9%%%%-%>F-(Gc*VpC'ăU"/+%%+,s%%%-%%%%%%%%%%%E%%%%%%%%%hnCy(S%%lfup%&'9%%9%%%d-%%-K(GEăU"M-DIG)%%%M3%%%-%%%%%%%%%&%%E%%%'U+%%#hny(%Sgfx%up*+%%%%%%'%'%&;ăU"%%%%I0%%%%%ăEND SUBăCLOSE:IF S=5AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRobert Claypool                GRAPHICS PROTOTYPE             hackwrench@hotmail.com         05-30-97 (12:29)       QB, QBasic, PDS        311  20510    PROTO1.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PROTO1.ZIP",4^6:Z&=15123:?STRING$(50,177);ăU"%up()%9%%%d-%h*f3GE:?7&+(%%%u9%%%,%%%%wj%iSnr4lFgp)arU1>U.I&AuqăU"hos'FO#ol6_a)rvR8<s$'IiL-_AT1mm(9KTl<uw9B1t;T>(ja/LXNuyE1+$2rPRăU"6%dI^MgpBY'M;k/8Gg%X^886_i2$LXlW?#NDAZ;YS5Lo6tmdLua?7Ls(M_$'DUXăU"JQ]H8mmer+bQ+%&F)W=J#q1.P>S%'5UAPsYbB8#(CFKC%GCggURLQ.TXdW%t?CmăU"49TUm^9EY4H=6_D+KA2601-63j1+r7\?95K_ZVg5n4tJd&i,q[PsEBHw+0hnTPtăU".Mc:Y%-8>CUL/J/,#k&(lrPfdJ4Cj\uPv3G9JsP9lf<IsfT)qR6k0RnkF0[:Gu*ăU"Zj#fu[Sl$$kTHsb%05lb%?$#pr5c:)QL*Y=TxiAT>=]:8=]Jm&j$\PE=0/gSk3[ăU",KV+/I+i-5tR>XJ4g2aMuD,u-?]<W8_rW?[(t,e_rO=qp8VK#BNW;Ed$sWT=ZsLăU"Y'U:,jX-dNh?tnEc?'8J*/[Z$PP(OP5M6ZCj.Mj9c:<_i4[i-ov1fUom)mq0425ăU"?q0%^eeR<q)wzd<?R%,0'-Erw/q2\-<EcVQISC<ZN>f_4O;uI3&C.UVJ%Z\,?(RăU"c$[WY_p>FiD+,=6=og_%BEP:RD_KXdqQ7Ds\/<nVfieX\G'\\>>_MW9+n.n-&R-ăU"AYGp/mmHv<]aRx](5Fwf#wXM'IYd&6'G2iR&X#-cWR.[v?#.$-+3>RPUBAC5o[%ăU"/ub-I[Xh5X7#?3k)ODsof1/1BN=?4O.vKW=)J>K5Be?>qf9+<*FcU=\uxvq\+#DăU"SF\oZ$ppnoCJ-C9nbW'#W7P<P2fg826W)-2'oX-ZL8CEaiA.8P[<HCZN[2gD7bGăU"a8bExBMc$KXld.,%4G6U8zlbQSHVH=;hCqPeNnlaSu3G/vdI=AaGDu-j%cnxSmBăU"+9es#Gbn,/:_?Mk<PXITtKFYZ6^Y+<D+'0r'Sg.QmB66X462zK_u)8ZMmiGj<xLăU"7Dud:0HNGGBEZGje[VE%_I-)'w4Ao$$RXZS^?q3IBR$rV1c\=?(d'tO($%#h$$JăU"RX'esbP,>n^>Q=:lL[r^r;cd60aBwnnrGMEtZ-'Y/Y6<\4%fwc]v&/>C$p,iQYPăU"6Uhxhh3o#;1,A#e_?GA986^%&sg,,O#l>:,h.uM,R73ojhkp^Q8U#yh$r1>9?=%ăU",7QAA+QUKk]2/#o5>s#c<7>5E&XL+5w&u%p()9%%%%-p%3*4^Gtoc(Nx(%%%u9%ăU"%%-%%%%gfx%jSnrOlFg8,fcE1DU2p/i3(Nx686(F?MG[ABn3Dy2pk9C5a5p\u1:ăU"B1s1<>(1aU#ANuyE1+$2rPR6%dI3A'AS>gN;w/7Gg%2tKK9qi24IIl>u8LMAZ;SăU"SWKo6tmdLca?]Ks(M_$'DUXJQ]HHhmfr+bN+=&F)W=J#q1.0NS%'5VAPsYbB8#(ăU"CFKC%GCggURLG.TXdW%t?Lm43TUm^9EY4H=6_D+KA2601-63j5+r7\?95K_ZVg5ăU"n4tJd&ilq\PsEBHw+0hnTPt.Mc:Y%-8>CUL/J/,#k.(lrPfdM4hi\?Pj3R9JsP9ăU"lf<IsfT)qR6k0RnhFVQ:AuVYj#fu[S$$fwSHsr%0P*a%ibu6rUV/.PH>F0P^c];ăU"4['Y*1orHOFA%e5qh#q<sVC(b=(#b(rS?UeTgPhIgstHTO24VrR1h3bV?c9L&t[ăU"ME+wT=bp#f.shVS]8[Eb\wYh+4>f;i;ID_SMb,^6dhC&82r]oh%CoR9>GVKhAeiăU"H7*Iu(L6Q+NA_FMaYfa;b:>kag%.5u0i7eNNPT?o7AgP'Wdd=M'fP*W3Dom[,3qăU".#u^>o*8Rh%V&RQCd1c$?eoF^41G$a*-5J%<uTSa$Mj24r152a>pw15<(D0eQx#ăU".CM#A>:uY25aSRGAx[.015PRKoM;B,DNnKA:/fFq)yL$:0>2)VRE'd(5Bi=+f:lăU"5I%KW3xU,PD0Wii4R.3g]v^&y,:85Klgl[QgEZd/FNbl:50.?hrQDp.3$XE3Q3năU"]BGLe)rE1\h7+tAKO/.b:\xtH?7KAlbL-R9Dhf8WJD<Ju^e3:;L1%<fOP6dI#FKăU"id3)lah:1TjSdS5s=fa<<^4LGvJN3Tkj$j7vC%oqS9t4nmguJs42'GYS?I+3C,,ăU"Ty<H%xl^X(VrR([mzbENTchPQV82-+w%qp,]SaR_6sT]h>a6UAkdQ10:5ydhMP2ăU":Hqp$mG4N=(y:Gamw8hlZ8Hp2sbqjRs>hGGgJmlJ6GC+49/rc&hC66)#k$D](q>ăU"^$$xafVLr2/LM.4/6M27668?+d_qeI/qdZ(jqT%t5zkXF6v^;LscQ,BhI&N6&0săU"150&R1EAnT5d9e?guw%S*V)FaMnbL.]r\f]b=m#I>>GqtknCbno0i5:]GaBg/tzăU">4fGMMW-+iF+hnb79p2Q=5/Jfj<GO>u(C61qd.GRMo$g[F9'Zj)';dup%()/%%%ăU"%%%9-)4G+N/aQ%X%%%%X%%%%,%%%%wjiS%ufq%I%%//t/AAA?uuuE.EEw%(%?%%ăU"]u%%Y-YYii%iuuuM???OqOO--N-ooo%QQQ]%]]up%()9%%%%-%;Dq6GY)V:9'e(ăU"%%%r.%%%-%%%%hwfg%Sgfx/dz<t]\]5w5]=N=7FuSJ/CNvb2l_%MIrh*,#nv#EuăU"Z72FFe6]#iP#xs<h>?IP8QqLmfo*#FXHX>pCJ#v8V]1>_TV,v*aI9LU5kvF2G?GăU"51s==KjVEU:sYc<#KA=<U#Gt:ik^YEBDETLVa,W98r(t:[o+ygmJQ>rTt2S:e0'ăU",.+-:&u(--I/t;KgK\ko(FK85KO-h\g^.UmpNfh55\EMn]LWLjU2(lQ\%TJV*xkăU"6-S3'1%m,G^MhHEavb2v.;;swHd;?03*O;0_v,]d^gY/,#q]PA)=Cx'AlhWPtZ8ăU"HHoZ(-gqIb41rXyrS8?+\bfRNCrPod+?nO1PT2)S/+E,3_Yp,SOnMPq\Ak:/>]băU"Nr5'V\p,aluLvoJ**VHLbhQSTHubOW0s5'12xUgM67fc+AW<PRi_Y<j&ddHBD'[ăU"qC%8$ln](\8IU=^F:J7BDI/u8dH'B[#YV<b#;:I;Fl4^/0r%;[a.c&(<&re5+WZăU"(_x8OJKw'_0fwDE(xlbmI;]i.UT;R<Yiwd2^[KtOW]i)sD/G:t.jw&+MgP'9>ObăU"[</m65]w[GMST-zg9e1.H;5/FiPfk9Upg\bBEVt.eF+.-;1=S^lnJDL%G>kVOipăU"rSkJOZ.s*EnsA8.>5WS;(kQB]ecAEbo(a^c*,8wX3>XA2K\Z[T4S?DSvJl>&pA<ăU"_9dgBBb0^8cbsviaBO(&p:3KdAt5J9h^I#u>:m:>HYnZ0$=uv#U+r/e>?;8$:b.ăU"e<VS+fNo8Ff1xABAhD=Rj74N1MM\NaSXw<>&cdx.RXSUCIm;jxkOJeeJcOCNWc'ăU"4u$CCKj^0tX*>]vG07Or'0TYDBCCGU2R<7,v;upy^UWtf+Pr#vZ8..<cS4$i^\IăU"t[?&61EV\%8RGV_QqKggOXvQ]&XQecag'P/pkRODKL_]u[T4dlu^Z0YR]RXyZ-)ăU"Nt%8b\iQpnCwr2HSNWK.PdX'7_u3_?&g/p#YWJFr-zi1Q,qsy<)>Nq<mT$ex\MUăU"PS&-]<wuGU)s+GGuMSe0a(y'ZVAlcAQ^gp<m5#O3&jSM,XR]Z\nl-PB<^HB_8tuăU"Ga6)#2aeQQ^A1._Vm'<SruE0XwOv-kva0GxnF'MLkb*N=dJm'p+qJ+:Ph0_+NMiăU"]xMRfcPbG(.B8^h^un]Sr\n=kcUGE;UUY0t)*0lUm%FNIirAh^v#QG<CR5tz\c6ăU">?7eC2c7+sf%bWlGU1gG<vNsS3KJ<CSM>.kmrxf$42Xs$X_Sr(_5u91oEatiu&2ăU"HX7>xN(?Ao'*734w,%up()%9%%%I-%3AT6G0N,+Jy&7%%N'%%%0%%%%kq%fyyj%ăU"sSgfCx<v<+t;U=lu73xBZgI=I_:e/_[XDo+w?7>\3P+uX[-c/d&XZ?qN>T*a<9KăU"FrSJg'uHgjBCU[Mkhz6,LLZnG^dsq_E\+a*GaYF(?20G,0YTQh1OT4u3(suIgRLăU"KwD%]3_=Us110-]=0]a.szV8D7kD9:c$Dg1>(G690'W]59Q^oezPYqV218/kn)găU"B\U/?[F2zZsXFle\Z#bIs.e:98cQJdR.m%:*k\14)wygI;%tBqav+,003;$^gjuăU":Wo'Mkfs4t[X5872wWRgmd=n(m-R-jXQqT;<$'V7xl7fQ8\o1PZbG[;cqlOk?<(ăU"<JqBbT5*N]K;KT8(zfMiDJT&=P%>beGo5Qu9Z)G':nah4;FLC&oH7Z3E%1,<Er)ăU"3()vfCLHf9SBtjG.sYMUN31T59Jn>v>8j2*3,wr^Z6D.TzgX%,t%(up(%)9%%%%ăU"-%lbA6G9Wod^Z%&%%I%(%%0%%%%g%fxju%fqSg.fx<w2,>qe^9LLZ1dkg?5#D=;ăU"VK:KV%&ko;fJ%=cf7vl&-/'YUY9shJL,yKCgLh?gVhB$m32+^t\RM*tTwlPClF\ăU"=Ah1]3b?Y0H;-RW<7&U$YviIMuv#YAP46[?klB)KOg#T-3k5?BN)gXNOb(aU8i1ăU"Q-PJH)''eNu&/Fq='))gTg[]Y%Yh=.TEBaF.%0$=n*JZbG:1GB49oe_s#5r$quOăU"'n^j*HNHqcv_;N910#t,xH0g-)Xm$)XI%Rnvf)rgQsB]\)]_Om;j;Ne&=?Rcx)uăU"wvMr]w=Tdvg=lIwMm1W+KGZA&8&]PtQwG;jlaNEmurMjcIRAq8X%=._dcWs$A+7ăU"k.rL2uq&5UOzU:ZW4GbGdyB8aS/oV#.2j]Nl,XimJPl\g>%;rT;'5nZ<e#$qYd)ăU"7e>o^+Uq;U?15%e\sIPhYNe>\3AMLW>[S1]?<^2n#Q(t(Qx7qyrOr0BmnP^ph*%ăU"Z=<^/^a9qa8PM[S^Na&66a)*;F95d%%up(%)9%%#%-%iDukGGV-v8D[%%%.%%%%ăU"/%%%%X%WUWU#USx(Lr2$40Y77%,P?+MM/39O_RRq'^1p&?%k+k+.+AJ>(=s=Ko^ăU"X1q0:)3e%'j1c&=U&p&_eVh%u-qE[9Iu9su<_>69AoF)31GGN<AelsN?RX]>:mqăU"?sstV%UMey]dJ;$pOc]<GGrn(B51EO/_*B>&q&up%()9%%%%-%2XukGRxOXV&j%ăU"%%'[%%%%/%%%%XWUW%UUStdgo:Y;3/pZ%[WUW+UqXr2SPP,ECX4#J\-0#3oF#:YăU"m:GosvE9=NEG/Q%V((H(l7%i%.(((DVZDSdR(3tT1fQe(eEu-nSBC9P_7ok2P$PăU"fCS[RKj,<Q7^#L,oR^Ug65/Qhuul$lKbGo]rlLAAttMexpm8Mpp-lKd=)a[1E5\ăU"x:c1T,QF-ppLm6\xiJ_?ll3&g==o%%up(%)9%%%%-%uDqkGu(v+'n#&%%]%)%%/ăU"%%%%X%WUWU%UStq=iFKp,>;U1O%YJsTu,xO[CWKf0>.iyHd=H:';CgA==&OoV;lăU"S;Huv*iI)(flN/#YlcM+dU]8#pIUj:GJ-%#=JjXRlYMrx&_[1Wo9cw]qV('&Mu[ăU"N/)76Zg5a;LO:x:);9=aPp^'pGjX#T[M/tjH),]Ka8j09aj5ReJ>.qQ+jWFAVqmăU"GYz8S\*d6Ohj$TBa$Lm:CHtBWpL6Pg?#n.JKBkdq'\AZ9a_r]J2ds3a#%[oH#BtăU"gbIT,AshZvddu57:c*EiyN%;uyXF/(T.HfQyu%%d2y+ig.;-8-hUQq**P4nIxhbăU"7RNRn%+]T^#osIRA151Igf]a7..$Ih-B*G;$=IfguE6bOWA,eoSkCSjrgEGLRj)ăU"<67Rec1f_O,uGGeUtRD$LNOX/.g;b4:'e=zcBI4=M0Ib'ZF's+up%()9%%%%-%2ăU"XukG19O7H%c&%%&R)%%%/%%%%XWUW%UUSfRxrFa9Ds<UR5jpe9u4l&_(gGjNcy\ăU"<s&c<=+N)Rr#iG*Q.7hND5v*vsb/:/A_9-CFsb2LTDtQY>6FbSrL=r3rTs-WiJIăU",Ae7u'oxC#L2+:,X7.d76E1odQPpLUJ[OfF=2>Q*?D3Qd#+[,A4_'&Jj;a'*:;qăU"u=VSlZqE(\+<547kpYtwY7pgml.;B3s=h-*O3c-(FGK%P)'#j.:JKnd/gUHV4<:ăU"rCPZ5cR3[g\s.([Eg1dG5>mq8tdfdK>:m9^i+iBFu%e.f%TT$-ot4NcF(;tP4L\ăU"jz:=ZF/.Jpb&HM-lmQNC^_i?Gm]gMCFX9$FEKhAAcq2I3mYaV3>_/mj4Bl1bhWkăU"'BZen(PC$q>^3,bxo*mM]mjKbXkWek9?VY9?6XaD7c.B+S,N:8m?#\s)%up()%9ăU"%%%#-%SrAkGvI'%7h&.%%U)%%%/%%%%XW%UWUU%SjwwWFaD=&RU5j<peu4]l&QUăU"4ycZ:f:ktCc<>I&194$+Ly_7xi9<M8Xs9GSk;39D_9-CFUb+x0ROFF*/L^1Hf?MăU"(ALSQ^u'Wg9IqcOr]FgV(&%MvVos)gi7(XlTF5GoO*Y[*['c\CXn\2S+2k(fP2%ăU"GhtqMTpX?c8o_5<+:<.*hQimqGz8SV,NH+r3Bo*?4L=/?N&+iJs-Pg&#n.JGKodăU"g6)a5Q*Ir3p/C#l9DV;yY$Qg.nh3h4YsL_PP4rWQSPAY4bh>D(8Ihy<-jbQd3AwăU"dZc.?C.q&%z5[tjOe.\+RxDlL+s]jeKP,7ILJ>7nlJ6,CmA^:oKfaSIlB_dGKWbăU"^^A<vgq6r7n#%NLsh7b3f\:^PaC%y5Qw*+vcGCrKN8$:\_A57%l50WKWRXu.W)TăU"<1(^L(u%p()9%%%%-m%,-/XG_TV%;w%%(%6%%%%/%%%%XWU%WUUS[gfyDBBqwW#ăU"&7VT(nIeot&TQA?9A9e%TdNp7fL(Y=l#RO??#LN+KIn4jmjA^53_4P]a<GdavI&ăU"KAT^n/'^/ef48LgI=EX=9UI:&o>o9D*%%up(%)9%%#%-%pH'4GShog[*%(%%u%9ăU"%%-%%%%g%qzjS[nrlFMg<ArIU1Ut4#eggn/':#olVoa/zt*KKmHlsb*xEAJG-I_ăU"ZmCuT(d?WS<TEjH;^<X\gdylQ:s=Lo=)93C+/_wWF;.U6&i-KeQG0*ua^/Xv$]<ăU"A0:QfAk]A$23(svafO<ol=So[X.)UhNF9xsl)D9arV>463h8CNR5ct3S/47Y6=]ăU"aiXr0U=oX7v+98E;S>3[^:KC(%c?H&dv9GTV'T$db8nND#hEn_TXFa]?4Xi$P71ăU"E&6c=(ij(-8RWe,ZdVunrb-CE5;60Yc,YH?2f;iU#C.'Y'>k5<ekmsA6rE2,j<3ăU".P^QSbiqDL't^.rEiR\^Bq3*341[>\&R1bQ+FUsd$UO[t,-d:qfK]:3<[22U4h+ăU"2FJhg(SKF3b-9Ep41Q[1s):1>5CZC]gUX$N+XIiM3FMjN.8?bY-&dWZOK8_P?5]ăU"&V<iC9cg/WPXJ#ML+gR200W\S1,\rdr<Ch#uSf)Cl2sDHe\fs$,9S'82aJ4B7ETăU"/m0XUws_B%&.tE7gucD[W)jk17,GWeR8,Ad&'9:uPk(3fI=3r^$2%js4<Xn'3%văU"<6MLu0'xP3OX(-YF:-oh:u,#3QetV_p)+++aBmR)-8z0\qoBBcF'5wV-'B\xN>WăU"/%4;E$M2C\c]]:ZMl+Fnfr$1yjSU,W9f8q9Z]R(d[H^5Tl9KQN7PY9[/&=p5P^%ăU"4^q8+<26IK1/=2,kPD0i5i4R3(gXv&Sy,:5aKLq[$QgqDT3s8l0:;.Z/Uk(g%dDăU"Gf>C*BAU$+?t5ie?XdJ1Ub[y9cOW?vo\nLr]KYv6+fGVSLqrdUpCi>DRt$='T%8ăU"&SO\+gqZBm-_JP9=/\HD,GnR*IVTCKsiIM(3Tw_<j7v%eoqSd+4nmuVJs4'_GYSăU"IH+3C,]Ty<%0xl^(mYVe-Zj%cx=SmB9Bes#b0n,/_b?MkPGXITKuGYb^EY+<+e'ăU"0rS%g.QB=66W6DHwKuS)8Z$hiGnxbL7Ddr:fpGkG0FGX5oG7;J4',9dOn%Z36,]ăU"n%4Y%plINW$rj1c]TY+O]pz+/U\U/F:+6)QeJ+Brft1;[o6cj'dK[nnjQskM_6băU"Xn'wG';L=G>*.>e_d3rMOR<V>0/:-4<ITXucF)uLA#GRUV_\]XWiRi^dd]Lf<YqăU"H#iI#\9o&DZRwKpx72YWXUcFaIg#)=V9%DDZk&Z>pUG=&g7i+kxHT=sT4O=78-xăU"%%up()%9%%%7-%J0T6G.g;&10&%%%u9%%%-%%%%gf%xjSrRxpN'2<eRU+-]-bWxăU"8R</&8g>Lu*nD0lhl)m.qq)YLQ<kkVv]n0s3Mbc_^),Z9l/oZP==Zj)[oJZ_oGZăU"d;BQp-#f?3K?)*3;Xbja[^6=Xn.y%Pr-+A#A#V,GpwZRe*,d]$+>M$?a9oE?+QUăU"/3ua]G;B1qId+=mn7S?G4,4*;DAA7<^0kZn\e[?>zB]x(3IOi+gK-ITz8)Ek($TăU"0C)RRnEQV#8zQ6)7rAyO3\cThY?b7auNieM\]cG.m)vz9J;7;L,D._'vDrK6tRpăU"NdmQW1')5*Rg,k*hb2XmWVLgW^bkEyi+mhkbE5k(]g/Oc7U?yv57GAc.F\]ebpGăU"KIshI'$Icm?xd%(=2kGd8<kWdR92hr;OYm5?AX+h#f[Et2Q&7^YC)HIdv0&f4rgăU",kK<Q_l^a0GC'no<m7#<n&a$ql9s00%BAAYb74A-7fuifZ)V)Xs&KxV'h(<.$3IăU"u=J\L+H?.?:BSN$<0)W+mA_7ndZnOK+4Ctg]w;LiQ5kj;m8-x0_c9Q,39jLuMYnăU"O^7:\NMAT'JMvt-Tty\(n]A=[1JD#%4up(%)9%%%%-%6b:6G%72YgN%%%%X%%%%ăU"-%%%%g%qzjS#ufq2)//]&p+Nwu(&a1EN)QPp6Y:R,%SSS*%**&&U&*/;5()/&%(ăU"1%%%up()%9%%%[-%r4T6G+u(>Q)(7%%:*%%%/%%%%uw%tytV.Sy'yA,yr>]][16ăU"j#iNYN&fPPN-Nobb;/B]Jrf5Y^b:ISI;GZUsMf9vKnJ4JbjfJGXu]\J;^cW7P43ăU"RF^17=ZW'<S5)ZH+O1.In]Uh\^4B?3s(\^11B<Er01rl^,/*RPMG8[kGqE9k6AgăU"W$RBbm[&QmK/:#'Z%K_eg1N)$M-kxL.;<A,rm&c_9GmAKU&K=D#b;2OnBr:I#K4ăU"TC6b._'/QpJO]1qCe#-aG7iv8X-*8+yN:.n^YfD\:_FNa0+29hg8bv4li5PnE,OăU"[g5F6\K,^e2+cdzC/E3Knpt^YXCC%HKnZ5(*ktM7B'SCt^.rAdin_VnR$[GXZ[1ăU"syWw4VKF4sqZW?7Mf14GSHd7m;FMiEMYtzo4_HBU<DY2<^Pp*7\juu^];g*%)X1ăU"r;GMYBYH(;tZ=OWTt/Tbtr*3te.4Bq[8ci1^Rr:HvPd6qA'4qtapb):[\_(8d5jăU"DhFOVNY$Xaoov6'KC[<#8ii0gDVy9CKB*f'Er':^e9DXb]H$?ZX5RvujgmkalVDăU",l2un#cT1m7kA7J,fGn#]T]O*a5d4xxBM/^9/jT^T>NVf2-8r5Y?.)QE#z3LYVkăU"bJdoWQu-Z+3&dupDLDurbuut4#RdV<,&DK\PFuKYBF/MN[cq*u0>zPhx.pjmckSăU";C_OySUv4l_MhIZ(h,Y5saPNEqri1+8+T:ehz+:e*1(ylQv,<<YBP:TE+Gw&t.3ăU"w3F,WqG<U,u2ZYex$&HmT9H=.L=pj,^N>Z?^o\=&15#c-7wa#AU(1<c#B3Js9leăU"2d=CP4uLs%a>D_7px6&+HkouqFI4LD%UF/33rLgF9\KA?7p_?Bi%\n4li(7*Nh7ăU"JJ$X$:hj9YhZdFi$+V&<hpL*%7jvCTF2A_P,-%,km:iHTY7opTq7IkHm\qh+(n[ăU"G^3e&zgd[%sW'Cwvappc&G4h<<w7XG,9WY<(wI(z,IX;'n=xGLR9>:,zPn^/aDOăU"P&a*qs]-F8%up()%9%%%%-%n1]6GI&%JVn%%%%o%%%%.%%%%ij%rtVS%gfx*Fe*ăU"/O7E5V*6xZ<r&Liuf^pbxTDp&Cxp<-Ihu#5%TICU\VSFhA1cI?mCs+;NboB7jBSăU"jvB=mup)Q].9m<?R.;Ir*FWv%up()%9%%%I-%Dq06GbN>uSi&.%%k)%%%.%%%%yăU"w%fsxS#gfxljxTYT.U5L\BqD+bN)E#FM2>8p8t47M8Xf7EUPtbjrSW%9Td)>4W0ăU"NX$/,\5T+5or_MiBK5[aLJDc%Y56Nx0*&3,C*iVHeY$*Xx8Arn0(>IbawuL&pEoăU"Y)QD%P9JxEO4&KOhr73PXna-7Rt2[Vio3*/2daSkS[e6X=FJ[L^bWB1PxKDvS$$ăU"lpO5pay.x\BbgDM0B-Unah6^TY%P*>+z/2H<0%%=iZiMk4>a/WfI_2z<)BqNkYpăU"9[WM*KAxI#aP0oVVE8ee^X?8YX_0kfte44uhg_6V\sEBpQyPAOnZU7kLI:JKg?xăU">>o8jd#l^\t)&'l=7P>%ok-;sM6/cS6Iwe?:2*4T,X,N'znW_)='s]PGo/Z'J;;ăU"i^uVXU-lm#%cI,Ab+C?U9&4Ib5Iu&AW?HtpYdi^?K?_%g])c3qrcg#W[y_KhAjqăU"&4rkLOVV_&*%+MAIc:MX%,nn60wU+O55o<AT6#NXd$ZIFRaHt4BC1T2E'mXRWDgăU"jBf_J=<a\42X]e[AV)]R\pqB]K8=Z:#X?]ZxUb*$qJ9)lF+(]L[ut4AY;%MQuF8ăU"XMvDP,P#-pr;.Z0YSKIV\7q#&0Szr\GDfl&TnMc14LmXDS%-2c/>m6BB.1\6RO.ăU"u%p()9%%%%-j%Dy4UG4dc-<x%%%%O&%%%/%%%%xtq%nixS(y'y0ZopjCavIRB[măU"zmC.QN%M'BmQvmMnFB7vMHm%Roz%Fn]L4/tKfM.M:tK-_]yO(N3;PMc6e3,3_NIăU"#O9<edK;tc*jANM/SEcKFL_N3T_J$c)usOI&e;J;+P]<N(ItO9kv_5c\e9J_4:$ăU"cKkv_diMAP/HJygAM/8sYgM%8#XIgf15n-.QWH=59T-U='U(2El6Mgjn&8a4+^#ăU"dLXT\fP^*[I^(adIBTkFyn9TG[=Wo,rl:/>YkDW,P/<</sK6K]_M9^hfe3_et;RăU"]hYbZk&PC)#%u1V3&7aT<%uaZZ7tt:TmD-mmBm9'Y3kbAwDBPqo%,&up%()9%%%ăU"%-%;cA6G/]x5D%I'%%%<*%%%/%%%%xmfw%jiSg7fx^x(f:8fX9wWE$0<q9,%5._ăU"akjy:JrMYx.o9AUIr-qf5=+2?kieUV%nOC/./CA6.ay>G*]apS0v(q<I:)NS?x9ăU",Ur7h=3Un*xOs(l^Fg\>E7>HXDT15AGs^T76]sQ1WkUo(dZcIs8f_qUVWU&GFBqăU"Sr?o-UsV[Y#uqO.2MO/FALHU&tw9[6hBvhr9zrfAmA%Z[J>[NYeR&%FyU/jaA3zăU"RZbg\%)u%QaHiTjx0EL=#'QUuYN)]RSnYrqXK#Xm6QQD^),:YRAt-$fGLBk1vJ-ăU"_]#9IF\/>rZH?c0BZ77XX-]]+]s^-exXLqR47NW^x.63h2A.ax,BhHcH>0^4^;,ăU"VaD0#M]AvFOrEGhH5p^FD/F+k7z'O'Q3GgD[:_i1ka(?wE_cNge.c6[Kn9NbotIăU"D$iF&EaKH^bXG8OZmjB3O4n#A>[\MMO68IAnygPc1s/YZ0#0okM4ak$CXoHT-&aăU"$Z9WT)wLlN^hQk\k9I#9]f(76'7iNTB4w.R/bjyGn'\;<60d2)*>=t+KW'rls+_ăU"^c5h[wcCj5:eyhfa[TX_=n[xE5TU8EGb?U(2mjPpTk[UM3M<]d'55%=n,$qBNW3ăU"MeF8KJ\iaYuuM(2bIW[5O77p-38Ne_g<rmo)*8ebUfm*cXyG\IGyU_bq6./r]maăU"ZslEroHx)SDtkz$q-^_Of\h^FpUr.\'w+up%()9%%%%-%;Dq6Gp\o68%?%%%%F%ăU"%%%.%%%%ywfs%xSrf#p0.ATm0OBnA1_^4/o?1hADP)DlRAl%EQ%u%p()9%%%%-dăU"%lA6gGKHF&&:%%%%>%%%%0%%%%gfx%jufq%SrfpDBA1Ep2?mJX(K5+0:C]f''S5ăU"[%%up(%)/%%#%%%3GA6GE>5>e>%%%%>%%%%0%%%%k%qfyy%jsSr%fpkq%fyyj%săU"Sgf%x2/x%mfwj%iSgf%x2/u%p()/%%%%%g%7r67G)ph&??%%%%?%%%%1%%%%rprăU"%xpxq%iSrf%prpr%xpxq%iSgf%x2/x%mfwj%iSgf%x2/u%p()9%%%%-j%Rr6LGjăU"r[-]x+%%%=8%%%1%%%%rpr%xpxq%iSgfOx&'<,BSm7cwgOxGV'R6)$1J[hsaGh*ăU"G&*g*;YVuXm]EL:#/9O2SUaiXAwvE6Ha4I]\rw431?\koVt8pQmIF+\>9epuVxHăU"Hn)<vrtwtYR<$6m<'EL3a-iVuQ6HHOcXNXeG8kfP,_3A+G^YNFO3dc6ukJZ[s[eăU"5)NPFe0F*cO$#*RP\CT:u=j=$wv',[(Q_'i\;1YH5Bm$Wg:*sdd:P:fF;G+D*2#ăU";XuqBQY0Fi,=ih_5&=h<SVmOGH*?</O)uJEb0:H+ZGjdY,STG7dn85<N,g4VASjăU"Pe[VUa+&K]C2+QqwQd#QE;Y(?VS]f]=\4IUSVAZ1xB2(RpD5utWB)B]wJGImXeDăU"3s8ASG4YU16n3n_tR8(?-$lX$Xm_GF-SDWH<g3VJtD72ja:F8UrlwJ<h0i#c1\NăU"m05vF_LLOE:p5M\I][$m>D]6t0i5PL;H,e-h/OmWR1US8NkcW?_qkUb'_%K*A\năU"g9?dABm9AYT3j[2FSq&aBw3>Za96n;:'[M%U=]2HQ-(,CP8/7N16*WX#g\([IE\ăEND SUBăSUB V2ăU"Bn;RD_#r:''ZM3.,K\n?8Y==?#;Q2f;_aHw8W44*7tm]?$:/TK7Uh39bT+1'9FMăU"UOoVwG0XKcD2L'Sgboo'K<7GpQW8R[%89*H*O4-DSR_[:-?b/]_6.P(B.S<8'o2ăU"R*<bl[$6atD]nh4UaL:M*T#,1LR%H<\A]GcM+1B0\CIg^'CcwKjl-kCU?'7)*/NăU"B:bbol*G2%Cu&eZQVF7Ji(qx:M[hIvD=>n.\6,WG['c#iE/.t5&+=P;O5:b+WQ:ăU"-CfL1U89pm98&'/+i/QH5d?,W>X+CK-vO_mn]gn/)Ir0XXC\.:gg'^kd[P'Jvo$ăU"1IXy6E-k[AUTiq+XSX;\W'?tb)8dTRbgqsij?$d[kk[-$0\l)3Vy4()UorD=>4YăU"'*%x0+;-mEG3u&ZQg.+3Ke:2s^?-LY9x6g&Kp0gu_h49TuEf0ddI_YAW?fxkWqcăU"_8J2g1B'\Oyb#LWV/&T2s1bOuc&A1c*Yh#5yu]A3&O<N811KBSZGin(iaR4g>s0ăU"5i=g4+RtuZ>[^5&>b^+'o0+M(gkvCDNsj37lZw:8NBJjOY-a9twfu(L?/Q*ysj9ăU"hFbU;'5qC;qCe)1VOp[&Aw-[CfsM),ZAp9RKDs<r\csC_%C\iMGNs\'EYN7N9MuăU"C:1f=PaY(2^T6xxkXN0bHJXlp=a7v%eRcO0'Iv)9EF-Iek*-rMo[:Aw01mlUoGCăU"Xa#AJq(+]mvo5:h=:56j-<,-&Tzk$]A_Z(Ar:O>lnfs6iV7Ft&Z&(3Lx(QiUYs+ăU"$cx&fW^r[J<Bo+,9qY3/HSTB$--RD91I8O];F>CtGV;<N6F0ku)W%Ajv8p\[+<kăU"B^l,%wrl.)hnu<MCF?soenx\1tLJmU1>agp$ts5%OIZ+6w1sf.e,?V+i6g3&F'xăU"^huZmX.s++jhxa?HLK?Qwcz2587dZAacOd,=]#18g\'V>'\96O01Kkdu((/7u\VăU"<MQ2c>SO31OJnfq%6OpO[oZ)6tRo8c/RobsfK9%oIB<KVssU(VdNS[[>+'GyO4găU"g99#**];381wJb(XYYSQDeJ-dVIY,X,0(H?dSWJ7?T^L#mr>el6acL[:eu=05^6ăU"Li4fOOiP4&_DDPAPylS(7z7MPoZtd';c60i/W]98/T;]er>A:,0#ufs^XIrE-W)ăU"*5t9qyQafW)EWS+,(YM7qXP\JfPDHE7u=bY;H<h<+tnm7RNa4>i%zFTfZrNE_#9ăU";g*fiM$XFgt8ULdf?26:$Yzp(8BM;>N7V,pnd3<H3]kn_PJmOBTADa]D6YbXJQFăU":8I.w)XuHvWIWgX/NlNRf<BZYa#V<Z_ht5l#JtxedA#6u<w_ej]CxBB)'Z(+#wmăU"e[Ak/cpM/;t=)H?r>8?t_**V>Mxraim+J+zP(ci^jBQMhayM1Yj3gCR1[FlC.t:ăU"*f0ZQv+,t97kmcE8PPaB#nIwfja%^2F.kN1h63qVRxp?Sp9J^+//9Pp?f47e<aGăU"vSZgNJ%pt7%>Je32crrjxp7=Y&Q;JIfP-O)=)cVH+4]h6jY&Gts^qANf#7ax&CfăU"ET>E]OF\i.3QH<FFc63PnZRHF#YB%:'PMo6FO5SfHV7t06(>KYjOzuTl(?:Wn3tăU"SSyp[Zm#hFnnB,g4GUAp$pk-D7.-tJ#iDFwNBE=YYJJde-w]4B<>[R$G55[-'/RăU"^rt8\%U>g8q.8XSmiffZ6E-kko]nv[$>e5&$x1[O5p$JfoYPde^lR<,[?S;8j<;ăU"r]x)%up()%9%%%%-%N207G[31mLG-.%%A7%%%1%#%%j'%unwj%shSyJ'yT':r>TăU"ma768Y\NM1)'AqE5E+b1_[h3o%V3TQe_08URN>-i3Fncvb*FC\RVBMv%.z\8^aDăU"4<TXI47-jz6yo]34k0u3V$R(/KuSS/2Zo=be-f4u4O3)%?uZaM\uNp(c1hJ*](FăU"s)T?,Pl,N0=:9Ta'L&?ZCe:(lL);RE&7+uz]N$:)cA,a4,B1x:Ekn%s$W*<9Qg9ăU"eqB?_rABI1ubn?:qRBHe<'\WT4]4=%=;hnejb3=_6$Nd'5^dR_4mKX9X=fMCp+7ăU"Zn-ZAc_YyIHzbej4dz^B0__\1:IYq%*u3N+AVw)*%4+kRD6oy20V'J_n8,Y'IG;ăU"HGW/4HeuaJ=S'6=K8e'PRlk<qVPr*?2ah)k6-iiL+KX69d^x4W_:RHSMTocHK/.ăU"s]gcXOMJZw2U=ZgOTv^=ow?b_v4pbZp1i<oOJLhM'l4%,LB3B]Y^Mi+1e+<g;lxăU"BPMCY3qs)NR7p:G8:Ci#4:3tt-/>=mB-fD:H6Tv5>)KKNARF-Q.Cs716xOsPeQmăU"(w)wl49?4<?c/_VU=^DRxY[$zFRL5r1pA%fvmJk?5H4k:&bib0Srmiagi8:tqYMăU"3l[%s,Ng#[(G=<_%/Q8$.3SHRM1UrYj:boAzh9aKW]&iSCkrZZru^:5GpIc#,SHăU"%he6sfH[NA-c;^$1KubMhgyFc<V'b]dIh:aPct^z*H3r9J9)AQ>2^]ROC/8E'fXăU"R>ZX<GjNlKZ.Yc\sCW$(=<p<xQ>+LSO]XN.FB]ubkFT60K=%XB^w1d+XUhsD8cXăU"$aDpa;Q5Nj.F.3\;uY-Z9^)/,S;>r5uq'r1>r?CoKEepbVY^PZNfEH*05L^I2iWăU"u/Hm=N]6FC1/?aEkN);8SfN[=#l;6Qi>%[*Qg%GDp3-x9&^fF-Xjm49d.1zDm^0ăU"T8a]H\hRZA0%zAIdI6sszZvnpD6Wm#c:qm,HNE)o%3&w0SHZc,_+Nhe/mHcAQ6eăU"Kc%)0[e_+lCu^kprt+c\F?>T09.3ib9IRy;15YqhLrEO:SDrKn\Mc66ma0Rr+uXăU"ZH)&Ekzq;]0eHpkmekdNg)%:U<a?s:L+0+kPCQpxGeu.+83,)C2s$c+RVw^1^rnăU"Mk69ip3sF)AVg.N$n-%jaqHR<9\8Xz6/L+4i?W>eD]Vzm\\2GAXO14.G>P<?EGYăU"XYc%pGn3cAM^&n<TlWjx6SH(l1d%X?B)?V)xwm-L^2D0y=qsyLAWcI+e[^..6M:ăU"9?Vp8oOH3HCNu:hNSlKeUeY<82*#;ptq0+C2Tcb(f9r2Mty]L-$2q:<R-XQmdRYăU"XGz4azMlMW89[]a:f=\t,gl3Sq:ZBW0P$w*F51RZ-R,haA&5ywzm9*U[%(Xrd15ăU"=bk$r/t[O/#0J#lf8[B;VP=Z'oAG:bDR>t]e>Fr$jF$?FnNyn,vZ[]o/?>4SB_RăU".6.?3/iV$FG\kp#fZ=SO/m/O#pZcAfXmWL(5Ke[?&8c:-\x/LJ<Ow\m3Y;XV+A&ăU"s:dcC_rmEZ07(TS&T-qiYF[MGo81AgRf5ARRUn5N>#E,C?cK+tW]rDnbq*q#y7AăU",\9x*VlDH%Ez:iNDzn8$jee+ZmO:RIWbVHmqO\9+%(#BMk9Lv&kqzwop?gwrQ]căU"[*gB7Yt:m:RaFCx7o8_T0'nq;[_aJhIY_Q(.lOp3W:=xr>2cL_bpSImUOCY=V=zăU"i8jaGKzaUBurq)rrLZ1U[J#Zp5NZ^+K=.N,fXr2NqH;$pY(k7wx[f(x-H8*^(O7ăU"BC5j%C^,waIm_74oEU+Sq5L639S9TTNT'k#X<s'7M2N]4D<p_/)Dc':kmmr3eS$ăU"Foc]9yYV1LEB#gH'G21UkpdUqdmDrL6FN?wfX1rdO4rA^/XFDKv-Cbt19W^]9BOăU"IfsUcb8IXS]*9Qcb.YQT)CTD79hXjV)e<cj0kY+nW*Lu'c(]Y3/iI]fgd$uRyjZăU"I021?8'b5L22bL9zhQ6vp:q?+d]+&;U<TgG'R?pXs)F*:YA>&Hb-fmH$RhfxO+[ăU"O,=duB5+X\?+6ZsRl'iX#xkR[f?1();w/,g&[(k+7Hl<;BQWddy,Df?-zT6&Ey&ăU"igc$2/Gk:WW6SR3[)aL/]Fd<585arL;zwUN/1vam;m$eCmhA3?kIo(%j69w5I54ăU"u$aK3.>:BmKi)i=<aF-lQe5##_n0;))WOZAhW'(uw&k&Djn,Tqk3:MwQ9&pO)RrăU"=l%*trTt>lf_xKZbQ:E7M;]y)+D+Y<?m[[?FbS0a4jHdM:nenG>mnEYCEhHi:qBăU"OZrx*+pmb=+Md3u8fBNy^US_sWdhG'2^<TM)N+3\DT]>DdqAbc4\)W\*6-%e*5;ăU"Afx<m;Sz25?]tbm>R[SXHaBTFZwWHw4:A3SnIk2+ev.F4klejECKfBL+yqlJq_săU"<iK&tgR$6LA5l[h)7v0zYkk+8M]*##A-lGG-,ra(A4-F83R6<jd?mv0CG4#5J%4ăU"zi6(\dW8r&JRD9sq:[Y]'<&rY/x^/is'/5LvxK>Idas>j+].OqjZ^<\5H-lVFJ4ăU"^onaDC7$Q?-Jth2ObdPHfbU[hF-$.jS.M5>OB;:7Xf::lHdLuu(>kDQVcMH<tPLăU"_SZ+R<QwHSgU_ob1\tK4]O[fRYpaRb;ilCrY=PnQ'Nja:;9b.qyZ]BiG;&3MA$hăU"smsc[ii^HqShXeFM2^T#p,y[H&>^_R+I[7mnsJQWd3HJea0u?Yn'm57ACuu+2kGăU"PDOL2LhMJH,2<'.8b?$=1LIs1p#Dk5M0%e[V_r^?Y-npX]dSkOPzxnV'x*up%&'ăU"9%%9%%%d-%h*f3GE:?7&+(%%%u9%%%,%%%%%%%%%%%%E%%%%%%%%%wjiS%nrlu%ăU"p&'9%%9%%#%-%3H*4GtFocNx%(%%u%9%%-%%%%%%%%%%%%E%%+%P(%%%gfx%jSnăU"r%lup&%'9%/%%%%%a%-)47GN/a%QX%%%%X%%%%,%%%%%%%%%&%E#%%%u%,%%w%jăU"iSu%fqup%&'9%%9%%%I-%Dqf6G)V<:9e(%%%r.%%%-%%%%%%%%%&%%E%%%'w,%%ăU"%hwfg%Sgfx%up&'%9%9%%%%-%;3A6Gi0N+J%y&%%'N'%%%0%%%%%%%%%&%E%%%%ăU"51%%%kq%fyyj%sSgf%xup&%'9%9%%%%-d%lA6XG9od*^Z&%%%I(%%%0%%%%%%%%ăU"%&%E#%%%\%2%%g%fxju%fqSg%fxup%&'9%%9%%%I-%iuJkGG-5v8D%7%%.%%%%/ăU"%%%%%%%%%&%%E%%%%f4%%%XWUW%UUSx&(rup%&'9%%9%%%I-%Xu&kGxO3XVj%7%ăU"%[%%%%/%%%%%%%%%&%%E%%%'W4%%%XWUW%UUSt%goup%&'9%%9%%%#-%uq/kGuvăU"&+'n&.%%])%%%/%%%%%%%%%&%%E%%%&p5%%%XWUW%UUSt%qiup%&'9%%9%%%I-%ăU"XuAkG9O&7Hc&.%%R)%%%/%%%%%%%%%&%%E%%%%77%%%XWUW%UUSf%xrup%&'9%%ăU"9%%%#-%SrAkGvI'%7h&.%%U)%%%/%%%%%%%%%&%%E%%%&G8%%%XWUW%UUSj%wwuăU"p%&'9%%9%%%[-%,-o/G_T&V;w%.%%6%%%%/%%%%%%%%%&%%E%%%'\9%%%XWUW%UăU"USg%fyup%&'9%%9%%%d-%p'K4GSo;g[*(%%%u9%%%-%%%%%%%%%%%%E%%%&,:%%ăU"%gqzj%Snrl%up&'%9%9%%%%-%9J06GN.g&1'0&%%%u9%%%-%%%%%%%%%%%E%%%%ăU"Y>%%%gf%xjSr%xpup%&'9%%9%%%#-%6:96G%2+YgN%%%%X%%%%-%%%%%%%%%&%%ăU"E%%%%6#%%%gqzj%Sufq%up&'%9%9%%%%-%=r46GE+u>Q%)(%%':*%%%/%%%%%%%ăU"%%&%E%.%%/#%%%uw%tytV.Sy'y%up&'%9%9%%%%-%7n16G+I&JV%n%%%%o%%%%.ăU"%%%%%%%%%&%E%.%%[C%%%ij%rtVS%gfxu%p&'9%%9%%#%-%DGq6GbpNuSi#&%%kăU"%)%%.%%%%%%%%%&%%E%%+%uC%%%ywf%sxSg%fxup%&'9%%9%%%R-%Dyf4G4d>c<ăU"x%%%%O&%%%/%%%%%%%%%&%%E%%%%8F%%%xtqn%ixSy&'yup%&'9%%9%%%I-%cA0ăU"6G]x&5DI'%%%<*%%%/%%%%%%%%%%%%E%%%%_G%%%xmfw%jiSg%fxup%&'9%%9%%ăU"%I-%DqB6G\o-68?%%%%F%%%%.%%%%%%%%%&%%E%%%&UI%%%ywfs%xSrf%pup&%'ăU"9%9%%%%-d%lA6gGKHF&&:%%%%>%%%%0%%%%%%%%%&%E[%%%#%I%%g%fxju%fqSrăU"%fpup%&'9%%/%%%I%%3AK6GE5->e>%%%%>%%%%0%%%%%%%%%&%%E%%%%*J%%%kqăU"fy%yjsS%rfpu%p&'9%%/%%#%%%7,r6G)0ph??%%%%?%%%%1%%%%%%%%%&%%E%%%ăU"%lJ%%%rpr%xpxq%iSrf%pup&%'9%9%%%%-j%Rr6LGjr[-]x+%%%=8%%%1%%%%%%ăU"%%%&%E#%%%Z%J%%r%prxp%xqiS%gfxu%p&'9%%9%%%%-%NF27G[I3mLG#-%%A%7ăU"%%1%%%%%%%%%&%%E%%+%-Q%.%j'u%nwjs#hSy'%yup*%+%%%%%?%?(%v*%(%%Z%ăU"%%%%ăEND SUBăV2ăCLOSE:IF S=150AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  LENS EFFECT                    ia53@rapid.co.uk               05-29-97 (23:32)       QB, QBasic, PDS        222  5624     LENS.BAS    'LENS EFFECT - By Daniel Daviesă'I know this routine is a bit slow, but I wrote it for using to generateă'glass spheres in a rendering engine I'm writing at the mo, when it's finishedă'it'll have texture mapping, bump mapping, phong, gouraud, lambert, and flată'shading, glass spheres, environment mapping to simulate reflection, lensă'flare, multiple light sources, coloured light sources, specular highlitesă'I'll speed up this routine some timeă'I'll also add support for using the mouse in Q-BASIC. I'll also give supportă'for loading GIF's for backgrounds if I can find some good code for loadingă'them. I may also include it in the GUI I'm writing at the moment to makeă'the cursor snazier. If you can tell me where I can get a good gif loader,ă'then please do. Oh yeah, I didn't write the PCX decoder, and I don't knowă'who did coz I found it on a local BBS'să'If you want to use this in a programme you can but please give me credit.ă'and tell me where I can get hold of a copy of this program or e-mail me aă'copy.ă'E-Mail : ia53@rapid.co.ukăăăDECLARE SUB viewpcx (file$)ăDEFINT A-R, T-YăDEFDBL SăDEFDBL ZăăTYPE coordăx AS INTEGERăy AS INTEGERăEND TYPEăăd% = 32ăup$ = CHR$(0) + "H"ădown$ = CHR$(0) + "P"ălcur$ = CHR$(0) + "K"ărcur$ = CHR$(0) + "M"ăesc$ = CHR$(27)ăăDIM tfm(d%, d%) AS coord 'The transformation arrayăDIM SHARED buffer(319, 199) AS STRING * 1ăm% = 7      'Magnificationfactorăăr = d% / 2      'd% is the Diameter of the lens, I use 64ăăs = SQR(r * r - m% * m%)ăy = -răDOă        x = -ră        DOăăăIF x * x + y * y >= s * s THENă                        a = xă                        b = yă                ELSEă                        z = SQR(r * r - x * x - y * y)ă                        a = (x * m% / z + .5)ă                        b = (y * m% / z + .5)ăEND IFătfm((x + r), (y + r)).y = (b + r)ătfm((x + r), (y + r)).x = (a + r)ăăx = x + 1ăLOOP WHILE x < răăy = y + 1ăLOOP WHILE y < răăăăSCREEN 13ă'a$ = COMMAND$ăIF LTRIM$(RTRIM$(a$)) = "" THENă  PRINT "please enter the name and path of"ă  PRINT "a pcx file to use as the background"ă  INPUT pcx$ă  IF pcx$ = "" THENă    FOR x% = 0 TO 319ă      FOR y% = 0 TO 199ă        buffer$(x%, y%) = CHR$(x% MOD 256)ă      NEXT y%ă    NEXT x%ă  ELSEă  viewpcx pcx$ă  END IFăELSEă  viewpcx a$ăEND IFăFOR x% = 0 TO 319ă  FOR y% = 0 TO 199ă    PSET (x%, y%), ASC(buffer$(x%, y%))ă  NEXT y%ăNEXT x%ăăDOăz$ = INKEY$ăIF z$ <> "" THENă  IF z$ = up$ THENă      ym% = ym% - 1ă      IF ym% < 0 THEN ym% = 0ă  END IFă  IF z$ = down$ THENă      ym% = ym% + 1ă      IF ym% > 199 - d% THEN ym% = 199 - d%ă  END IFă  IF z$ = lcur$ THENă      xm% = xm% - 1ă      IF xm% < 0 THEN xm% = 0ă  END IFă  IF z$ = rcur$ THENă      xm% = xm% + 1ă      IF xm% > 319 - d% THEN xm% = 319 - d%ă  END IFă  IF z$ = esc$ THEN GOTO quit:ăEND IFăăDEF SEG = &HA000ăymod& = (ym% * 320&) + xm%ăFOR y% = 1 TO d% - 1ăymod& = ymod& + 320ă  FOR x% = 1 TO d% - 1ă    POKE x% + ymod&, ASC(buffer(tfm(x%, y%).x + xm%, tfm(x%, y%).y + ym%))ă  NEXT x%ăNEXT y%ăăLOOPăăquit:ăSCREEN 0ăWIDTH 80ăPRINT "LENS EFFECT - BY DANIEL DAVIES"ăPRINT "COPYRIGHT (C) UK 1997 Daniel G. Davies"ăPRINT "E-Mail - ia53@rapid.co.uk"ăPRINT "if you wish to use this in a program you can but please give me credit"ăPRINT "and please tell me about the program, either sending a copy of it or"ăPRINT "telling me where I can get hold of it from"ăPRINT "This may be a little slow but I'm going to make it faster when I get round"ăPRINT "to it, which will be after I have finished my Q-Basic rendering engine"ăPRINT "I'll also add support for using the mouse in Q-BASIC I'll also give support"ăPRINT "for loading GIF's for backgrounds. I may also include it in the GUI I'm"ăPRINT "writing at the moment to make the cursor snazier"ăăDEFLNG A-B, R, X-YăDEFSNG C-Q, T-WăSUB viewpcx (file$)ăăDIM pcxpal AS STRING * 768, pcxversion AS STRING * 1ăăpcxnum = FREEFILEăOPEN file$ FOR BINARY AS #pcxnumăă   GET #pcxnum, 2, pcxversionăă   IF ASC(pcxversion) = 5 THENă      GET #1, LOF(pcxnum) - 767, pcxpalăă      pal = 0ăă      FOR p = 1 TO 768 STEP 3ă         OUT &H3C8, pală         red% = INT(ASC(MID$(pcxpal, p, 1)) / 4)ă         OUT &H3C9, red%ă         green% = INT(ASC(MID$(pcxpal, p + 1, 1)) / 4)ă         OUT &H3C9, green%ă         blue% = INT(ASC(MID$(pcxpal, p + 2, 1)) / 4)ă         OUT &H3C9, blue%ă         pal = pal + 1ă      NEXT păă   END IFăă   SEEK #pcxnum, 129ăă   fxsegment = VARSEG(buffer(0, 0))ă   fxoffset = VARPTR(buffer(0, 0))ăă   datasize = 2000ăă   pcxdata$ = INPUT$(datasize, pcxnum)ă   datacount = 1ăăă   FOR half = 1 TO 2ăă      fxtotal = fxsegment + fxoffsetă      DEF SEG = fxtotalăă      FOR c = 0 TO 31999ăă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFăă         clr = ASC(MID$(pcxdata$, datacount, 1))ă         datacount = datacount + 1ăă         IF datacount > datasize THENă            pcxdata$ = INPUT$(datasize, pcxnum)ă            datacount = 1ă         END IFă     ă         IF clr > 192 THENă            LPS = clr - 192ă            clr = ASC(MID$(pcxdata$, datacount, 1))ă            datacount = datacount + 1ă            FOR L = LPS TO 1 STEP -1ă               POKE c, clră               c = c + 1ă            NEXT Lă            c = c - 1ă         ELSEă        ă            POKE c, clră         END IFă      NEXT că      fxoffset = fxoffset + &H7D0ă   NEXT halfăăCLOSE pcxnumăăDEF SEGăăEND SUBăDaniel Davies                  FULL SCREEN FLAME              ia53@rapid.co.uk               05-29-97 (23:32)       QB, QBasic, PDS        339  4967     FULLFIRE.BAS'Full screen flame in Q-Basică'By Daniel Daviesă'e-mail ia53@rapid.co.ukă'hope you like it. BTW the long string of data statments are the pallette,ă'which I made in fractint and then converted.ăDIM fval%(1280)ăDIM disp%(80, 50)ăDIM OLD%(80, 50)ăDIM rand%(5000)ăăRANDOMIZE TIMERăFOR x% = 0 TO 5000ărand%(x%) = RND * 10ăNEXT x%ăăFOR x% = 0 TO 1280ăfval%(x%) = (x% / 5)ăNEXT x%ăăăSCREEN 13ăOUT &H3C8, 0ăFOR x% = 0 TO 255ăREAD r%, G%, B%ăOUT &H3C9, r%ăOUT &H3C9, G%ăOUT &H3C9, B%ăNEXT x%ăăDEF SEG = &HA000ăDOăq% = q% + 1ăFOR y% = 49 TO 1 STEP -1ăFOR x% = 1 TO 79ăz% = OLD%(x% - 1, y% + 1) + OLD%(x% + 1, y% + 1) + OLD%(x%, y% + 1)ăz% = z% + OLD%(x% - 1, y%) + OLD%(x% + 1, y%) - 5ăz% = z% - rand%(q% MOD 5000)ăIF z% <= 0 THEN GOTO skip1:ădisp%(x%, y%) = fval%(z%)ăskip1:ăNEXT x%ăNEXT y%ăăymod& = 12800ăFOR y% = 10 TO 49ăFOR x% = 0 TO 80ăăa& = ymod& + (x% * 4)ăc% = disp%(x%, y%)ăPOKE a&, c%ăPOKE a& + 1, c%ăPOKE a& + 2, c%ăPOKE a& + 3, c%ăPOKE a& + 320, c%ăPOKE a& + 321, c%ăPOKE a& + 322, c%ăPOKE a& + 323, c%ăPOKE a& + 640, c%ăPOKE a& + 641, c%ăPOKE a& + 642, c%ăPOKE a& + 643, c%ăPOKE a& + 960, c%ăPOKE a& + 961, c%ăPOKE a& + 962, c%ăPOKE a& + 963, c%ăăăOLD%(x%, y%) = disp%(x%, y%)ăăNEXT x%ăymod& = ymod& + 1280ăNEXT y%ăăăFOR x% = 5 TO 75ăOLD%(x%, 50) = INT(RND * 2) * 255ăNEXT x%ăăăLOOP WHILE INKEY$ = ""ăăăDATA 0,0,0ăDATA 0,0,6ăDATA 0,0,6ăDATA 0,0,7ăDATA 0,0,8ăDATA 0,0,8ăDATA 0,0,9ăDATA 0,0,10ăDATA 2,0,10ăDATA 4,0,9ăDATA 6,0,9ăDATA 8,0,8ăDATA 10,0,7ăDATA 12,0,7ăDATA 14,0,6ăDATA 16,0,5ăDATA 18,0,5ăDATA 20,0,4ăDATA 22,0,4ăDATA 24,0,3ăDATA 26,0,2ăDATA 28,0,2ăDATA 30,0,1ăDATA 32,0,0ăDATA 32,0,0ăDATA 33,0,0ăDATA 34,0,0ăDATA 35,0,0ăDATA 36,0,0ăDATA 36,0,0ăDATA 37,0,0ăDATA 38,0,0ăDATA 39,0,0ăDATA 40,0,0ăDATA 40,0,0ăDATA 41,0,0ăDATA 42,0,0ăDATA 43,0,0ăDATA 44,0,0ăDATA 45,0,0ăDATA 46,1,0ăDATA 47,1,0ăDATA 48,2,0ăDATA 49,2,0ăDATA 50,3,0ăDATA 51,3,0ăDATA 52,4,0ăDATA 53,4,0ăDATA 54,5,0ăDATA 55,5,0ăDATA 56,6,0ăDATA 57,6,0ăDATA 58,7,0ăDATA 59,7,0ăDATA 60,8,0ăDATA 61,8,0ăDATA 63,9,0ăDATA 63,9,0ăDATA 63,10,0ăDATA 63,10,0ăDATA 63,11,0ăDATA 63,11,0ăDATA 63,12,0ăDATA 63,12,0ăDATA 63,13,0ăDATA 63,13,0ăDATA 63,14,0ăDATA 63,14,0ăDATA 63,15,0ăDATA 63,15,0ăDATA 63,16,0ăDATA 63,16,0ăDATA 63,17,0ăDATA 63,17,0ăDATA 63,18,0ăDATA 63,18,0ăDATA 63,19,0ăDATA 63,19,0ăDATA 63,20,0ăDATA 63,20,0ăDATA 63,21,0ăDATA 63,21,0ăDATA 63,22,0ăDATA 63,22,0ăDATA 63,23,0ăDATA 63,24,0ăDATA 63,24,0ăDATA 63,25,0ăDATA 63,25,0ăDATA 63,26,0ăDATA 63,26,0ăDATA 63,27,0ăDATA 63,27,0ăDATA 63,28,0ăDATA 63,28,0ăDATA 63,29,0ăDATA 63,29,0ăDATA 63,30,0ăDATA 63,30,0ăDATA 63,31,0ăDATA 63,31,0ăDATA 63,32,0ăDATA 63,32,0ăDATA 63,33,0ăDATA 63,33,0ăDATA 63,34,0ăDATA 63,34,0ăDATA 63,35,0ăDATA 63,35,0ăDATA 63,36,0ăDATA 63,36,0ăDATA 63,37,0ăDATA 63,38,0ăDATA 63,38,0ăDATA 63,39,0ăDATA 63,39,0ăDATA 63,40,0ăDATA 63,40,0ăDATA 63,41,0ăDATA 63,41,0ăDATA 63,42,0ăDATA 63,42,0ăDATA 63,43,0ăDATA 63,43,0ăDATA 63,44,0ăDATA 63,44,0ăDATA 63,45,0ăDATA 63,45,0ăDATA 63,46,0ăDATA 63,46,0ăDATA 63,47,0ăDATA 63,47,0ăDATA 63,48,0ăDATA 63,48,0ăDATA 63,49,0ăDATA 63,49,0ăDATA 63,50,0ăDATA 63,50,0ăDATA 63,51,0ăDATA 63,52,0ăDATA 63,52,0ăDATA 63,52,0ăDATA 63,52,0ăDATA 63,52,0ăDATA 63,53,0ăDATA 63,53,0ăDATA 63,53,0ăDATA 63,53,0ăDATA 63,54,0ăDATA 63,54,0ăDATA 63,54,0ăDATA 63,54,0ăDATA 63,54,0ăDATA 63,55,0ăDATA 63,55,0ăDATA 63,55,0ăDATA 63,55,0ăDATA 63,56,0ăDATA 63,56,0ăDATA 63,56,0ăDATA 63,56,0ăDATA 63,57,0ăDATA 63,57,0ăDATA 63,57,0ăDATA 63,57,0ăDATA 63,57,0ăDATA 63,58,0ăDATA 63,58,0ăDATA 63,58,0ăDATA 63,58,0ăDATA 63,59,0ăDATA 63,59,0ăDATA 63,59,0ăDATA 63,59,0ăDATA 63,60,0ăDATA 63,60,0ăDATA 63,60,0ăDATA 63,60,0ăDATA 63,60,0ăDATA 63,61,0ăDATA 63,61,0ăDATA 63,61,0ăDATA 63,61,0ăDATA 63,62,0ăDATA 63,62,0ăDATA 63,62,0ăDATA 63,62,0ăDATA 63,63,0ăDATA 63,63,1ăDATA 63,63,2ăDATA 63,63,3ăDATA 63,63,4ăDATA 63,63,5ăDATA 63,63,6ăDATA 63,63,7ăDATA 63,63,8ăDATA 63,63,9ăDATA 63,63,10ăDATA 63,63,10ăDATA 63,63,11ăDATA 63,63,12ăDATA 63,63,13ăDATA 63,63,14ăDATA 63,63,15ăDATA 63,63,16ăDATA 63,63,17ăDATA 63,63,18ăDATA 63,63,19ăDATA 63,63,20ăDATA 63,63,21ăDATA 63,63,21ăDATA 63,63,22ăDATA 63,63,23ăDATA 63,63,24ăDATA 63,63,25ăDATA 63,63,26ăDATA 63,63,27ăDATA 63,63,28ăDATA 63,63,29ăDATA 63,63,30ăDATA 63,63,31ăDATA 63,63,31ăDATA 63,63,32ăDATA 63,63,33ăDATA 63,63,34ăDATA 63,63,35ăDATA 63,63,36ăDATA 63,63,37ăDATA 63,63,38ăDATA 63,63,39ăDATA 63,63,40ăDATA 63,63,41ăDATA 63,63,42ăDATA 63,63,42ăDATA 63,63,43ăDATA 63,63,44ăDATA 63,63,45ăDATA 63,63,46ăDATA 63,63,47ăDATA 63,63,48ăDATA 63,63,49ăDATA 63,63,50ăDATA 63,63,51ăDATA 63,63,52ăDATA 63,63,52ăDATA 63,63,53ăDATA 63,63,54ăDATA 63,63,55ăDATA 63,63,56ăDATA 63,63,57ăDATA 63,63,58ăDATA 63,63,59ăDATA 63,63,60ăDATA 63,63,61ăDATA 63,63,62ăDATA 63,63,63ăăDaniel Davies & Paul Gainer    CANDLE FLAME                   ia53@rapid.co.uk               05-29-97 (23:32)       QB, QBasic, PDS        59   1070     FLAMES.BAS  'Candle flameă'by Daniel Davies (ia54@rapid.co.uk)and Paul Gainer(unknown e-mail address)ă'ăăDIM flame%(-1 TO 21, -1 TO 41)ăSCREEN 13ăRANDOMIZE TIMERăăFOR x% = 0 TO 63ăOUT &H3C8, x%ăOUT &H3C9, x%ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C8, x% + 64ăOUT &H3C9, 255ăOUT &H3C9, x%ăOUT &H3C9, 0ăOUT &H3C8, x% + 128ăOUT &H3C9, 255ăOUT &H3C9, 255ăOUT &H3C9, x%ăNEXT x%ăDEF SEG = &HA000ăDOăăy% = 40ăăFOR x% = 0 TO 20ăIF RND > .4 THEN flame%(x%, y%) = 192 ELSE flame%(x%, y%) = 0ăNEXT x%ăăWAIT &H3DA, 8ăFOR n% = 1 TO 40ăFOR x% = 0 TO 20ăcol% = flame%(x%, y%)ăcol% = col% + flame%((x% + 1), y%)ăcol% = col% + flame%((x% - 1), y%)ăcol% = col% + flame%(x%, (y% - 1))ăcol% = col% \ 4ăIF col% > 4 THEN col% = col% - (RND * 4)ăIF col% THEN flame%(x%, (y% - 1)) = col%ăNEXT x%ăy% = y% - 1ăNEXT n%ăăy& = 38220ăFOR y% = 0 TO 39ăFOR x% = 0 TO 20ăx2& = (x% * 2) + y&ăPOKE x2&, flame%(x%, y%)ăPOKE x2& + 1, flame%(x%, y%)ăPOKE x2& + 320, flame%(x%, y%)ăPOKE x2& + 321, flame%(x%, y%)ăNEXT x%ăy& = y& + 640ăNEXT y%ăăLOOP WHILE INKEY$ = ""ăăDave Shea                      WRITE WINDOWS BITMAPS (.BMP)   FidoNet QUIK_BAS Echo          11-23-96 (19:16)       QB, QBasic, PDS        52   1280     WRITEBMP.BAS'Well, I dunno if anyone's looking for it, but I finally wrote a routineă'that writes Windows bitmaps. This'll take whatever's on your screenă'(Screen 13), and write a fully-usable Windows bitmap out of it. Try 'eră'out.ăă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'   WRITEBMP.BAS   by   Dave Sheaă'   Released to Public Domaină'   on October 29th, 1996. Noă'   Warantees expressed oră'   implied.ă' =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăCLS : SCREEN 13: DEFINT X-YăDIM Header AS INTEGERăăINPUT "Output File? ", File$ăOPEN File$ FOR OUTPUT AS #1ăăFOR a = 1 TO 320ă LINE (a, 1)-(a, 200), aăNEXTăăFOR a = 1 TO 54ă READ Headeră PRINT #1, CHR$(Header);ăNEXTăăFOR a = 0 TO 255ă OUT &H3C7, aă  Red = INP(&H3C9) * 4ă  Green = INP(&H3C9) * 4ă  Blue = INP(&H3C9) * 4ăă PRINT #1, CHR$(Blue) + CHR$(Green) + CHR$(Red) + CHR$(0);ăNEXTăăFOR y = 199 TO 0 STEP -1ă FOR x = 0 TO 319ă  Pix = POINT(x, y)ă  PSET (x, y), 0ă  PRINT #1, CHR$(Pix);ă NEXTăNEXTăăCLOSEăăDATA   66,  77,  54, 254,   0,   0,   0,   0,   0,   0,  54,   4ăDATA    0,   0,  40,   0,   0,   0,  64,   1,   0,   0, 200,   0ăDATA    0,   0,   1,   0,   8,   0,   0,   0,   0,   0,   0,   0ăDATA    0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0ăDATA    0,   0,   0,   0,   0,   0ăDaniel Davies                  PARTICLE FLAME                 ia53@rapid.co.uk               06-01-97 (16:18)       QB, QBasic, PDS        134  2634     PFLAME.BAS  'PARTICLE FLAMEă'BY HANG-FIREă'e-mail ia53@rapid.co.ukă'web site www.users.rapid.net.uk/ia53ă'this flame uses moving particles and then smoothes them out to generate theă'flame, although it is much slower than the standard method for generatingă'a flame, it looks quite good.ăSCREEN 13ăRANDOMIZE TIMERăTYPE particleăx AS INTEGERăy AS INTEGERăc AS INTEGERăEND TYPEănp% = 1000ăDIM particle(np%) AS particleăDIM image(50, 70) AS STRING * 1ăFOR x% = 1 TO np%ăparticle(x%).x = (RND * 40) - 20ăparticle(x%).y = (RND * 63)ăparticle(x%).c = particle(x%).yăNEXT x%ăOUT &H3C8, 0ăFOR x% = 0 TO 63ăREAD r%, G%, B%ăOUT &H3C9, r%ăOUT &H3C9, G%ăOUT &H3C9, B%ăNEXT x%ăDEF SEG = &HA000ăDOăFOR x% = 1 TO np%ăimage(particle(x%).x + 25, particle(x%).y) = CHR$(64 - particle(x%).c)ăăIF particle(x%).y > 63 THENă        particle(x%).x = (RND * 40) - 20ă        particle(x%).y = 1ă        particle(x%).c = 0ăELSEă        IF particle(x%).x = 0 THENă                particle(x%).x = particle(x%).x + ((RND * 6) - 3)ă        ELSEIF particle(x%).x < 0 THENă                particle(x%).x = particle(x%).x + ((RND * 3) - 1)ă        ELSEă                particle(x%).x = particle(x%).x + ((RND * 3) - 2)ă        END IFăparticle(x%).y = particle(x%).y + 1ăparticle(x%).c = particle(x%).yăEND IFăNEXT x%ăăxm& = 63820ăFOR y% = 1 TO 63ăFOR x% = 1 TO 49ăt% = ASC(image(x% - 1, y% - 1)) + ASC(image(x%, y% - 1)) + ASC(image(x% + 1, y% - 1))ăt% = t% + ASC(image(x% - 1, y%)) + ASC(image(x%, y%)) + ASC(image(x% + 1, y%))ăt% = (t% \ 6) - 1ăIF t% < 0 THENăimage(x%, y%) = CHR$(0)ăELSEăimage(x%, y%) = CHR$(t%)ăEND IFăăPOKE x% + xm&, ASC(image(x%, y%))ăNEXT x%ăxm& = xm& - 320ăNEXT y%ăăLOOP WHILE INKEY$ = ""ăăDATA 0,0,0ăDATA 0,0,8ăDATA 2,0,10ăDATA 10,0,7ăDATA 18,0,5ăDATA 26,0,2ăDATA 32,0,0ăDATA 36,0,0ăDATA 39,0,0ăDATA 42,0,0ăDATA 46,1,0ăDATA 50,3,0ăDATA 54,5,0ăDATA 58,7,0ăDATA 63,9,0ăDATA 63,11,0ăDATA 63,13,0ăDATA 63,15,0ăDATA 63,17,0ăDATA 63,19,0ăDATA 63,21,0ăDATA 63,23,0ăDATA 63,25,0ăDATA 63,27,0ăDATA 63,29,0ăDATA 63,31,0ăDATA 63,33,0ăDATA 63,35,0ăDATA 63,38,0ăDATA 63,40,0ăDATA 63,42,0ăDATA 63,44,0ăDATA 63,46,0ăDATA 63,48,0ăDATA 63,50,0ăDATA 63,52,0ăDATA 63,53,0ăDATA 63,54,0ăDATA 63,54,0ăDATA 63,55,0ăDATA 63,56,0ăDATA 63,57,0ăDATA 63,58,0ăDATA 63,59,0ăDATA 63,60,0ăDATA 63,61,0ăDATA 63,62,0ăDATA 63,63,1ăDATA 63,63,5ăDATA 63,63,9ăDATA 63,63,12ăDATA 63,63,16ăDATA 63,63,20ăDATA 63,63,23ăDATA 63,63,27ăDATA 63,63,31ăDATA 63,63,34ăDATA 63,63,38ăDATA 63,63,42ăDATA 63,63,45ăDATA 63,63,49ăDATA 63,63,52ăDATA 63,63,56ăDATA 63,63,60ăKurt Kuzba                     QBASIC MODEX EXAMPLE           Douglas Lusher                 05-23-97 (12:20)       QB, QBasic, PDS        111  4419     MODEX.BAS   '>   Well, I want to learn ModeX... So far, the only /wellă'>   documented/ versions I can find are for QBASIC4.5 or PDS,ă'>   and can not be converted to QBASIC1.1, so could someoneă'>   please teach me/mail me about ModeX for v1.1? Thanks.ă'>....ă'   The ModeX recently posted by Dave Shea, originally by Dougă'Lusher, will work just fine in QBasic. The text output routineă'will not, however, so you will need to develop your own.ă'Try this one...ăă'Example of how to achieve ModeX in QuickBasic, from Douglas Lusheră'Modified to show QBasic example by Kurt Kuzba, (5/23/1997)ăDECLARE SUB XCLS (Page%)ăDECLARE SUB ShowPage (Page%)ăDECLARE SUB Set320x240mode ()ăDECLARE SUB PutPixel (X%, Y%, Culler%, Page%)ăDIM BitMask%(7): FOR Bit% = 0 TO 7: BitMask%(Bit%) = 2 ^ Bit%: NEXTăSCREEN 0: WIDTH 80, 25: COLOR 10, 0: LOCATE 5, 10ăPRINT "Hit any key to enter ModeX. 0-1-2 for pages. ESC exits."ăWHILE INKEY$ = "": WEND: Set320x240mode: SLEEP 1ăHMax% = 320: VMax% = 240: Pg% = 0ăFOR Scrpage% = 0 TO 2ă   C% = 10: IF Scrpage% > 0 THEN C% = 12: IF Scrpage% > 1 THEN C% = 13ă   XCLS Scrpage%: ShowPage Scrpage%ă   FOR Y% = Scrpage% * 9 TO VMax% - 1 - Scrpage% * 9ă      PutPixel Scrpage% * 9, Y%, C%, Scrpage%ă      PutPixel HMax% - 1 - Scrpage% * 9, Y%, C%, Scrpage%ă   NEXTă   FOR X% = Scrpage% * 9 TO HMax% - 1 - Scrpage% * 9ă      CALL PutPixel(X%, Scrpage% * 9, C%, Scrpage%)ă      CALL PutPixel(X%, VMax% - 1 - Scrpage% * 9, C%, Scrpage%)ă   NEXTăNEXTăDOă   DO: k$ = INKEY$: LOOP WHILE k$ = ""ă   SELECT CASE k$ă      CASE "0": ShowPage 0ă      CASE "1": ShowPage 1ă      CASE "2": ShowPage 2ă      CASE CHR$(27): EXIT DOă      CASE ELSE: SOUND 999, .5ă   END SELECTăLOOP: SCREEN 13: SCREEN 0: WIDTH 80, 25: ENDăăSUB GetPixel (X%, Y%, Culler%, Page%)ă   SELECT CASE Page%ă      CASE 0: VidSegment% = &HA000ă      CASE 1: VidSegment% = &HA4F0ă      CASE 2: VidSegment% = &HA9E0ă      CASE ELSE: ERROR 5ă   END SELECTă   OUT &H3CE, 4: OUT &H3CF, X% AND 3ă   DEF SEG = VidSegment%ă   Culler% = PEEK((Y% * 80) + (X% \ 4))ăEND SUBăSUB PutPixel (X%, Y%, Culler%, Page%)ă   SHARED BitMask%()ă   SELECT CASE Page%ă      CASE 0: VidSegment% = &HA000ă      CASE 1: VidSegment% = &HA4F0ă      CASE 2: VidSegment% = &HA9E0ă      CASE ELSE: ERROR 5ă   END SELECTă   OUT &H3C4, 2: OUT &H3C5, BitMask%(X% AND 3)ă   DEF SEG = VidSegment%ă   POKE (Y% * 80) + (X% \ 4), Culler%ăEND SUBăSUB Set320x240modeă   SCREEN 13                          'begin with standard mode 13hă   OUT &H3C4, &H4: OUT &H3C5, &H6     'disable "chain4" modeă   OUT &H3C4, &H2: OUT &H3C5, &HF     'enable writes to all four planesă   CLS                                'clear video memoryă   OUT &H3C4, 0: OUT &H3C5, &H1       'synchronous reset whileă                                      'switching clocksă   OUT &H3C2, &HE3                    'select 25 Mhz dot clock andă                                      '60 hz scanning rateă   OUT &H3C4, 0: OUT &H3C5, &H3       'restart the sequenceră   OUT &H3D4, &H11: OUT &H3D5, INP(&H3D5) AND &H7Fă     'to reprogram the CRT controller, remove write protect fromă     'the registersă   OUT &H3D4, &H6: OUT &H3D5, &HD     'total vertical pixelsă   OUT &H3D4, &H7: OUT &H3D5, &H3E    'overflowă   OUT &H3D4, &H9: OUT &H3D5, &H41    'turn off double double-scană   OUT &H3D4, &H10: OUT &H3D5, &HEA   'vertical sync startă   OUT &H3D4, &H11: OUT &H3D5, &HAC   'vertical sync end,ă                                      'reprotect_registersă   OUT &H3D4, &H12: OUT &H3D5, &HDF   'vertical pixels displayedă   OUT &H3D4, &H14: OUT &H3D5, 0      'turn off dword modeă   OUT &H3D4, &H15: OUT &H3D5, &HE7   'vertical blank startă   OUT &H3D4, &H16: OUT &H3D5, &H6    'vertical blank endă   OUT &H3D4, &H17: OUT &H3D5, &HE3   'turn on byte modeăEND SUBăSUB ShowPage (Page%)ă   SELECT CASE Page%ă      CASE 0: OUT &H3D4, &HC: OUT &H3D5, 0ă      CASE 1: OUT &H3D4, &HC: OUT &H3D5, &H4Fă      CASE 2: OUT &H3D4, &HC: OUT &H3D5, &H9Eă      CASE ELSE: ERROR 5              'illegal function callă   END SELECTăEND SUBăSUB XCLS (Page%)ă   SELECT CASE Page%ă      CASE 0: VidSegment% = &HA000ă      CASE 1: VidSegment% = &HA4F0ă      CASE 2: VidSegment% = &HA9E0ă      CASE ELSE: ERROR 5ă   END SELECTă   OUT &H3C4, &H2: OUT &H3C5, &HFă   DEF SEG = VidSegment%ă   FOR Address% = 0 TO 19199: POKE Address%, 0: NEXTăEND SUBăThe ABC Programmer             PERSPECTIVE SCROLLER (WAVEY)   voxel@freenet.edmonton.ab.ca   06-05-97 (16:45)       QB, QBasic, PDS        131  5008     WAVEY.BAS   '-----------------------------------------------------------------------------ă'Hmmm, this is a small, but neat routine. Really something to post. I hope youă'like it. Made by Jeroen Bouwens, Holland. This routine is PD, Freeware andă'Smileware, which means bla..blabla...blablabla. Got it? See ya! :-)ă'O Yeah, I nearly forgot. It is a perspective scroller that comes right at you.ă'ă' Converted from Pascal Code to BASIC by William Yu (06-05-97). PUBLIC DOMAINă' Some notes: The scroller is wider in this BASIC version (don't know why).ă'             It's much slower, but that's no surprise.ă'             When compiled, the colours are mixed up!ă'             Something to do with the &HFA6E, and make sure the Tekst isă'             defined (ie, don't use Tekst$).  Patches welcome!ă'-----------------------------------------------------------------------------ăăDECLARE SUB Rotate (X AS SINGLE, Y AS SINGLE, Z AS SINGLE, Alpha%, Beta%, Gamma%)ăDECLARE SUB PrecalcPoints ()ăDEFINT A-Zăă'DIM I, J, XS, YS, TL, XT, YT, ZY AS INTEGERă'DIM Alpha, Beta, Gamma, G, Tel AS INTEGERăDIM XX, YY, ZZ, BX, BY AS INTEGERăDIM TOf, TSeg, SL, ArrayTel, LOff AS INTEGERăDIM SHARED VX AS SINGLEăDIM SHARED VY AS SINGLEăDIM SHARED VZ AS SINGLEăDIM SHARED XT1 AS SINGLEăDIM SHARED YT1 AS SINGLEăDIM SHARED ZT1 AS SINGLEăDIM SHARED Offsets(0 TO 160 * 50) AS LONGăDIM SHARED Colours(0 TO 160 * 50) AS INTEGERăDIM SHARED Cosinus(0 TO 360) AS INTEGERăDIM SHARED Sinus(0 TO 360) AS INTEGERăDIM Tekst AS STRING * 255ăăCONST False = 0ăCONST True = NOT Falseăă  SCREEN 13ă  CALL PrecalcPointsă  Tekst = "                   Well, this is an interesting routine (and it seems to work too :-)"ă  Length = LEN(RTRIM$(Tekst))ă  TOf = VARPTR(Tekst): TSeg = VARSEG(Tekst)ă  Tel = 0ă  DOă    FOR TL = 0 TO 7ă      ArrayTel = 8 * 49 + 1ă      FOR I = 1 TO 19ă        DEF SEG = TSegă        SL = PEEK(TOf + I + Tel)ă        LOff = &HFA6E + SL * 8ă        FOR XS = 0 TO 7ă          FOR YS = 1 TO 8ă            DEF SEG = &HF000ă            IF (PEEK(LOff) AND (128 \ (2 ^ XS))) <> 0 THENă              DEF SEG = &HA000ă              POKE Offsets(ArrayTel - TL * 49), Colours(ArrayTel - TL * 49)ă              POKE Offsets(ArrayTel + 1 - TL * 49), Colours(ArrayTel - TL * 49)ă              POKE Offsets(ArrayTel + 2 - TL * 49), Colours(ArrayTel - TL * 49)ă              POKE Offsets(ArrayTel + 3 - TL * 49), Colours(ArrayTel - TL * 49)ă              POKE Offsets(ArrayTel + 4 - TL * 49), Colours(ArrayTel - TL * 49)ă              POKE Offsets(ArrayTel + 5 - TL * 49), Colours(ArrayTel - TL * 49)ă            ELSEă              DEF SEG = &HA000ă              POKE Offsets(ArrayTel - TL * 49), 0ă              POKE Offsets(ArrayTel + 1 - TL * 49), 0ă              POKE Offsets(ArrayTel + 2 - TL * 49), 0ă              POKE Offsets(ArrayTel + 3 - TL * 49), 0ă              POKE Offsets(ArrayTel + 4 - TL * 49), 0ă              POKE Offsets(ArrayTel + 5 - TL * 49), 0ă            END IFă            LOff = LOff + 1ă            ArrayTel = ArrayTel + 6ă          NEXT YSă          LOff = LOff - 8ă          POKE Offsets(ArrayTel - TL * 49), 0ă          ArrayTel = ArrayTel + 1ă        NEXT XSă      NEXT Iă    NEXT TLă    Tel = Tel + 1ă    IF Tel >= Length THEN Tel = 0ă  LOOP UNTIL INKEY$ <> ""ăENDăăSUB PrecalcPointsă  FOR I = 0 TO 360ă    Cosinus(I) = COS(I / 57.29578)ă    Sinus(I) = SIN(I / 57.29578)ă  NEXT Iă  G = 250 'Find some well working value for this (250 is fine for VZ=300)ă  Alpha = 320: Beta = 310: Gamma = 330 'Change these for an other orientation ofă                                       'the scrollă  VX = 0: VY = 0: VZ = 300     'Don't make VZ 0 -> division by zero!!ă  XX = -160: YY = -25: ZZ = 0ă  DEF SEG = &HA000ă  FOR I = 1 TO 160 * 50ă    XT1 = XX: YT1 = YY: ZT1 = COS(XX / 10) * 2 + SIN(YY / 5) * 2 'Play with these!ă    Colours(I) = INT(ZT1 * 3 + 44)ă    CALL Rotate(XT1, YT1, ZT1, Alpha, Beta, Gamma)ă    BX = 160 + INT((XT1 * G) / (ZT1 + VZ))ă    BY = 100 + INT((YT1 * G * .8333) / (ZT1 + VZ))ă    Offsets(I) = 320& * BY + BX                'Must use long unfortunatelyă    IF Offsets(I) > 65535 THEN Offsets(I) = 0  'Pascal doesn't need thisă    POKE Offsets(I), 15ă    YY = YY + 1ă    IF YY >= 24 THENă      YY = -25ă      XX = XX + 2  'Also change size of arrays:Offsets,Colors if you change thisă      IF XX >= 159 THEN XX = -160: YY = -25ă    END IFă  NEXT Iă  'LINE (0, 0)-(319, 199), 0, BFăEND SUBăăSUB Rotate (X AS SINGLE, Y AS SINGLE, Z AS SINGLE, Alpha, Beta, Gamma)ăDIM X1 AS SINGLEăDIM X2 AS SINGLEăDIM Y1 AS SINGLEăDIM Y2 AS SINGLEăDIM Z1 AS SINGLEăDIM Z2 AS SINGLEă  X1 = Xă  Y1 = Cosinus(Alpha) * Y - Sinus(Alpha) * Ză  Z1 = Sinus(Alpha) * Y + Cosinus(Alpha) * Ză  X2 = Cosinus(Beta) * X1 + Sinus(Beta) * Z1ă  Y2 = Y1ă  Z2 = Cosinus(Beta) * Z1 - Sinus(Beta) * X1ă  X = Cosinus(Gamma) * X2 - Sinus(Gamma) * Y2ă  Y = Sinus(Gamma) * X2 + Cosinus(Gamma) * Y2ă  Z = Z2ăEND SUBăBrian Bacon                    PLASMA-TYPE SCREEN SAVER       kyberteknik@geocities.com      06-03-97 (23:56)       QB, QBasic, PDS        23   513      SCRNSAV.BAS 'A cool plasma-type screen saver...ă'Created by Brian Bacon   kyberteknik@geocities.comă'ăRANDOMIZE TIMERăSCREEN 13ăFOR I = 1 TO 63ă    PALETTE I, Iă    PALETTE I + 63, 256 ^ 2 + 256 * Iă    PALETTE I + 126, 256 ^ 2 * IăNEXT IăăDOă  FOR I = 120 TO 200ă      FOR J = 60 TO 140ă          a = POINT(I + 1, J)ă          b = POINT(I - 1, J)ă          c = POINT(I, J + 1)ă          d = POINT(I, J - 1)ă          clr = (a + b + c + d) / 4 - 1ă          PSET (I, J), clră      NEXT Jă  NEXT IăLOOPăMatt Bross                     COMPLETE 3D MODEL W/SHADING    ebross@mixcom.com              06-06-97 (17:08)       QB, QBasic, PDS        1490 49673    ULTRA3D.BAS DEFINT A-ZăREM SHADING MODELSăDECLARE SUB Wire ()ăDECLARE SUB Flat ()ăDECLARE SUB Gouraud ()ăDECLARE SUB Phong ()ăDECLARE SUB InterPhong ()ăăREM RICH GELDREICHăDECLARE FUNCTION GetByte% ()ăDECLARE SUB BufferWrite (A%)ăDECLARE SUB MakeGif (A$, ScreenX%, ScreenY%, Xstart%, YStart%, Xend%, Yend%, NumColors%, AdaptorType%)ăDECLARE SUB PutByte (A%)ăDECLARE SUB PutCode (A%)ăăDECLARE SUB SetPal (C%, R%, G%, B%)ăCONST TRUE% = -1, FALSE% = NOT TRUE, PI# = 22 / 7ăCONST WireShade% = 0, FlatShade% = 1, GouraudShade% = 2, PhongShade% = 3ăCONST InterPhongShade% = 4ăă'+--------------------NOTES AND CREDITS FROM GS3D\GS3DO--------------------+ă'|GS3D2.BAS by Matt Bross, 1997                                            |ă'|The sorting algorithm was originally written by Ryan Wellman, which I    |ă'|modified for my own purposes.  I made the 3D program with help from      |ă'|3D tutorials by Lithium /VLA, Shade3D.BAS by Rich Geldreich; and         |ă'|Gouraud fill with Luke Molnar's (of M/K Productions) gorau.bas. The GIF  |ă'|support is from Rich Geldreich's MakeGif.BAS.                            |ă'+-------------------------------------------------------------------------+ă'This version I added every shading model I completely understand.ă'Each model can be individualy optimized but this is pretty good.ăăRANDOMIZE TIMERă'ON ERROR GOTO ErrorHandlerăTYPE PointTypeă  X AS INTEGER       'X coordinateă  Y AS INTEGER       'Y coordinateă  Z AS INTEGER       'Z coordinateă  shade AS INTEGER   'shade of pointsă  Distance AS INTEGER'distance from the origin (0, 0, 0)ăEND TYPEăTYPE PolyTypeă  C1 AS INTEGER      'number of the first point of a polygonă  C2 AS INTEGER      'number of the second point of a polygonă  C3 AS INTEGER      'number of the third point of a polygonă  culled AS INTEGER  'TRUE if the polygon isn't visibleă  AvgZ AS INTEGER    'used to sort Z coordinates of polygonsă  clr AS INTEGER     'color of the polygonăEND TYPEăTYPE FillTypeă  X1 AS INTEGER      'starting Y coordinateă  X2 AS INTEGER      'ending Y coordinateă  Clr1 AS INTEGER    'starting coloră  Clr2 AS INTEGER    'ending coloră  X3D1 AS INTEGER    'starting 3D X coordinateă  X3D2 AS INTEGER    'ending 3D X coordinateă  Y3D1 AS INTEGER    'starting 3D Y coordinateă  Y3D2 AS INTEGER    'ending 3D Y coordinateă  Z3D1 AS INTEGER    'starting 3D Z coordinateă  Z3D2 AS INTEGER    'ending 3D Z coordinateăEND TYPEă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INFO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSCREEN 0, 0, 0, 0: WIDTH 80, 25: CLSăPRINT "Ultra3D.BAS by Matt Bross, 1997"ăPRINTăPRINT "3D ANIMATION FOR THE QBASIC LANGUAGE."ăPRINT "COPYRIGHT MATT BROSS.  USE FREELY AS"ăPRINT "LONG AS CREDIT IS GIVEN."ăPRINTăPRINT "----------CONTROLS----------------"ăPRINT "            0; 5 - reset, stop rotation"ăPRINT "            S; A - reset, stop translation "ăPRINT "2, 8; 4, 6; -, + - rotate around x, y, z axis"ăPRINT "            I, K - translate vertically"ăPRINT "            J, L - translate horizontally"ăPRINT "            Z, X - translate depthwise"ăPRINT "              F1 - use wire shading model"ăPRINT "              F2 - use flat shading model"ăPRINT "              F3 - use gouraud shading model"ăPRINT "              F4 - use phong shading model"ăPRINT "              F5 - use Inter-phong shading model"ăPRINT " Esc - exit"ăPRINT "----CASE INSENSITIVE----"ăPRINTă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%VARIABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSRX = 320: SRY = 200  'SRX, SRY = the screen's resolutionădx = SRX \ 2: dy = SRY \ 2 'DX, DY = center of screenăD& = 70: SD = 140 'viewer's distance from objectă'%%%%%%%%%%%%%%%%%%%%%%%%%%GOURAUD SHADE ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%%ăREM $DYNAMICăDIM SHARED Scan(199) AS FillTypeă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%GIF STUFF%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED OutBuffer$, OStartAddress, OAddress, OEndAddress, OsegăDIM SHARED CodeSize, CurrentBit, Char&, BlockLengthăDIM SHARED Shift(7) AS LONGăDIM SHARED X, Y, Minx, MinY, MaxX, MaxY, Done, GIFFile, LastLoc&ăShiftTable: DATA 1, 2, 4, 8, 16, 32, 64, 128ă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SIN TABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ă'SIN\COS table for 2 PI radians and then scale 1024 times for faster math.ăDIM SINTABLE(459) AS LONGăFOR i = 0 TO 459 'COS(X) = SIN(X + 90)ă  SINTABLE(i) = COS(i * PI / 180) * 1024 'use 1024 to shift binary digitsăNEXT i                                   'over 6 bits.ă'%%%%%%%%%%%%%%%%%%%%%%%%DOUBLE BUFFERING ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED ScnBuf(32001)   'DIM array to serve as page in SCREEN 13ăScnBuf(0) = 320 * 8 'set length (x) * 8ăScnBuf(1) = 200     'set height (y)ăDEF SEG = VARSEG(ScnBuf(2)) 'get segment of beginning of array dataăaofs& = VARPTR(ScnBuf(2))   'get offset of beginning of array dataă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LIGHT TABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED LX(256), LY(256), LZ(256)ăDIM SHARED LX, LY, LZ, LightDistance&, LD!ă'Location of light source in spherical coordinatesăL1 = 70: L1 = L1 MOD 360: IF L1 < 0 THEN L1 = L1 + 360ăL2 = 40: L2 = L2 MOD 360: IF L2 < 0 THEN L2 = L2 + 360ăS1& = SINTABLE(L1 + 90): C1& = SINTABLE(L1)ăS2& = SINTABLE(L2 + 90): C2& = SINTABLE(L2)ăLX = S1& * C2& \ 8192: LY = S1& * S2& \ 8192 '8192 = 1024 * 1024 \ 128ăLZ = C1& \ 8 '8 = 1024 \ 128ă'find distance from light source to origin (0, 0, 0)ăLightDistance& = SQR(LX * LX + LY * LY + LZ * LZ) * 8 '8 = 1024 \ 128ăLD! = LightDistance& / 8ăFOR A = -128 TO 128ă  LX(A + 128) = LX * A 'make light source lookup tables for shadingă  LY(A + 128) = LY * Aă  LZ(A + 128) = LZ * AăNEXT AăDIM SHARED ThetaShade(90)ăambient! = 10ădiffuse! = 5ăspecular! = 6ăn! = 2ăFOR theta = 0 TO 90ă  ThetaShade(theta) = ambient! + (COS(theta * PI / 180) * diffuse!) + ((COS(theta * PI / 180) * specular!) ^ n!)ăNEXTă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD OBJECT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED MaxPoints, MaxPolysăRESTORE ObjectDataăREAD MaxPoints, MaxPolysăDIM SHARED Points(MaxPoints) AS PointType  'at startăDIM SHARED ScnPnts(MaxPoints) AS PointType 'after rotationăDIM SHARED SX(MaxPoints), SY(MaxPoints)    'points drawn to screenăFOR i = 1 TO MaxPoints 'Load and Center Pointsă  READ X, Y, Z: Points(i).X = X: Points(i).Y = Y: Points(i).Z = Ză  CX = CX + X: CY = CY + Y: CZ = CZ + ZăNEXT iăCX = CX \ MaxPoints: CY = CY \ MaxPoints: CZ = CZ \ MaxPointsăFOR i = 1 TO MaxPointsă  Points(i).X = Points(i).X - CXă  Points(i).Y = Points(i).Y - CYă  Points(i).Z = Points(i).Z - CZă  X = Points(i).X: Y = Points(i).Y: Z = Points(i).Ză  'find distance from point to the origin (0, 0, 0)ă  PointDistance& = SQR(X * X + Y * Y + Z * Z) * 1024&ă  Points(i).Distance = PointDistance& * LightDistance& \ 1048576 '1024 * 1024ă  ScnPnts(i).Distance = Points(i).DistanceăNEXT iă'Load Polygon DataăDIM SHARED p(MaxPolys) AS PolyType 'stores all polygon dataăFOR i = 1 TO MaxPolys: READ p(i).C1, p(i).C2, p(i).C3, p(i).clr: NEXT iăăPRINT "Press a Key"ăDO: LOOP UNTIL INKEY$ <> ""ă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SET PALETTE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSCREEN 13: CLSăFOR i = 0 TO 63ă  SetPal i, i, i, iă  SetPal i + 64, i, 0, 0ă  SetPal i + 128, 0, i, 0ă  SetPal i + 192, 0, 0, iăNEXT iă'------------------------------>BEGIN MAIN LOOP<------------------------ăT# = TIMERăDOă'*********************************GET KEY*******************************ăDEF SEG = 0: k = INP(&H60): WHILE LEN(INKEY$): WENDăDEF SEG = VARSEG(ScnBuf(2))ăSELECT CASE kă  CASE &H3B 'F1ă    ShadingModel = WireShadeă  CASE &H3Că    ShadingModel = FlatShadeă  CASE &H3Dă    ShadingModel = GouraudShadeă  CASE &H3Eă    ShadingModel = PhongShadeă  CASE &H3Fă    ShadingModel = InterPhongShadeă  CASE &H52 '0ă    R1 = 0: R2 = 0: R3 = 0ă    D1 = 0: D2 = 0: D3 = 0ă  CASE &H4C '5ă    D1 = 0: D2 = 0: D3 = 0ă  CASE &H1E 'Aă    MX = 0: MY = 0: MZ = 0ă  CASE &H1F 'Să    MX = 0: MY = 0: MZ = 0ă    MMX = 0: MMY = 0: MMZ = 0ă  CASE &H50 '2ă    D1 = D1 - 1ă  CASE &H48 '8ă    D1 = D1 + 1ă  CASE &H4B '4ă    D2 = D2 - 1ă  CASE &H4D '6ă    D2 = D2 + 1ă  CASE &HD '+, =ă    D3 = D3 - 1ă  CASE &HC  '_, -ă    D3 = D3 + 1ă  CASE &H17 'Iă    MY = MY + 1ă  CASE &H25 'Kă    MY = MY - 1ă  CASE &H24 'Jă    MX = MX + 1ă  CASE &H26 'Lă    MX = MX - 1ă  CASE &H2C 'Ză    MZ = MZ + 1ă  CASE &H2D 'Dă    MZ = MZ - 1ă  CASE 1 'ESCă    GOTO ShutDownă  CASE &H22 'Gă    INPUT "SAVE SCREEN as .GIF"; S$ă    IF LEFT$(UCASE$(S$), 1) = "Y" THENă      INPUT "Input Filename:", file$ă      IF RIGHT$(UCASE$(file$), 4) <> ".GIF" THEN file$ = file$ + ".GIF"ă      PUT (0, 0), ScnBuf, PSETă      MakeGif file$, 320, 200, 0, 0, 319, 199, 256, 2ă    END IFăEND SELECTă'*********************************ROTATION******************************ă'keep SINes and COSines in array limitsăR1 = (R1 + D1) MOD 360: IF R1 < 0 THEN R1 = 360 + R1ăR2 = (R2 + D2) MOD 360: IF R2 < 0 THEN R2 = 360 + R2ăR3 = (R3 + D3) MOD 360: IF R3 < 0 THEN R3 = 360 + R3ă'********************************TRANSLATION****************************ăMMX = MMX + MX: MMY = MMY + MY: MMZ = MMZ + MZă'Keeps variables within limits of integersăIF MMX > 32767 THEN MMX = 32767ăIF MMY > 250 THEN MMY = 250ăIF MMZ > 120 THEN MMZ = 120ăIF MMX < -32767 THEN MMX = -32767ăIF MMY < -120 THEN MMY = -120ăIF MMZ < -327 THEN MMZ = -327ă'*******************************MOVE OBJECT*****************************ăS1& = SINTABLE(R1 + 90): C1& = SINTABLE(R1)ăS2& = SINTABLE(R2 + 90): C2& = SINTABLE(R2)ăS3& = SINTABLE(R3 + 90): C3& = SINTABLE(R3)ăFOR i = 1 TO MaxPointsă'rotate points around the Y axisă  TEMPX = (Points(i).X * C2& - Points(i).Z * S2&) \ 1024ă  TEMPZ = (Points(i).X * S2& + Points(i).Z * C2&) \ 1024ă'rotate points around the X axisă  ScnPnts(i).Z = (TEMPZ * C1& - Points(i).Y * S1&) \ 1024ă  TEMPY = (TEMPZ * S1& + Points(i).Y * C1&) \ 1024ă'rotate points around the Z axisă  ScnPnts(i).X = (TEMPX * C3& + TEMPY * S3&) \ 1024ă  ScnPnts(i).Y = (TEMPY * C3& - TEMPX * S3&) \ 1024ă'******************************CONVERT 3D TO 2D*************************ăTEMPZ = ScnPnts(i).Z + MMZ - SDăIF TEMPZ < zero THEN  'only calculate points visible by vieweră  SX(i) = D& * (ScnPnts(i).X + MMX) \ TEMPZ + dxă  SY(i) = D& * (ScnPnts(i).Y + MMY) \ TEMPZ + dyăEND IFă'*******************************SHADE POINTS****************************ăX1 = ScnPnts(i).X: Y1 = ScnPnts(i).Y: Z1 = ScnPnts(i).ZăS = (X1 * LX + Y1 * LY + Z1 * LZ) / ScnPnts(i).Distance + 128ă  IF S < zero THEN S = zeroă  IF S > 256 THEN S = 256ă  shade = (LX(S) + LY(S) + LZ(S)) \ 3ă  IF shade < zero THEN shade = zeroă  IF shade > 63 THEN shade = 63ă  ScnPnts(i).shade = shadeăNEXTăFOR i = 1 TO MaxPolysă'*************************CULL NON-VISIABLE POLYGONS********************ăcoord1 = p(i).C1: coord2 = p(i).C2: coord3 = p(i).C3ăZ1 = ScnPnts(coord1).Z: Z2 = ScnPnts(coord2).Z: Z3 = ScnPnts(coord3).ZăX1 = SX(coord1): X2 = SX(coord2): x3 = SX(coord3)ăY1 = SY(coord1): Y2 = SY(coord2): y3 = SY(coord3)ăIF (X1 - X2) * (y3 - Y2) - (Y1 - Y2) * (x3 - X2) < 0 THEN p(i).culled = TRUEă'******************FIND AVERAGE Z COORDINATE OF EACH POLYGON************ăp(i).AvgZ = (Z1 + Z2 + Z3) \ 3ăNEXT iă'******************SORT POLGONS BY THEIR AVERAGE Z COORDINATE***********ăincrement = MaxPolys + 1ăDOăincrement = increment \ 2ăFOR index = 1 TO MaxPolys - incrementă  IF p(index).AvgZ > p(index + increment).AvgZ THENă  SWAP p(index), p(index + increment)ă    IF index > increment THENă    cutpoint = indexă    DOă    index = (index - increment): IF index < 1 THEN index = 1ă      IF p(index).AvgZ > p(index + increment).AvgZ THENă        SWAP p(index), p(index + increment)ă      ELSEă        index = cutpoint: EXIT DOă      END IFă    LOOPă    END IFă  END IFăNEXT indexăLOOP UNTIL increment <= 1ă'******************************DRAW POLYGONS****************************ă'clear screen buffer.  Use a 320 by 200 BLOADable graphic for a background.ăERASE ScnBuf: REDIM ScnBuf(32001): ScnBuf(0) = 2560: ScnBuf(1) = SRYăăSELECT CASE ShadingModelă  CASE WireShade: Wireă  CASE FlatShade: Flată  CASE GouraudShade: Gouraudă  CASE PhongShade: Phongă  CASE InterPhongShade: InterPhongăEND SELECTăăPUT (0, 0), ScnBuf, PSET 'dump array to screen, like PCOPYăăF& = F& + 1ăLOOPă'------------------------------>END MAIN LOOP<--------------------------ăShutDown:ăDEF SEGăSCREEN 0, 0, 0, 0: WIDTH 80, 25: CLSăPRINT "Ultra3D.BAS by Matt Bross, 1997"ăPRINT : PRINT "THERE WERE"; MaxPoints; "POINTS AND"; MaxPolys; "POLYGONS"ăPRINT : PRINT "Frames Per Second:"; F& / (TIMER - T#)ăPRINT : PRINT "Free space"ăPRINT " String Array   Stack"ăPRINT STRING$(21, "-")ăPRINT FRE(""); FRE(-1); FRE(-2)ăSLEEPăENDăăErrorHandler:ăRESUME NEXTăăObjectData:ăDATA 5, 8ăDATA  50,  0,  0ăDATA   0,  0, 50ăDATA   0,  0,-50ăDATA -50,  0,  0ăDATA   0, 50,  0ăDATA   5,  1,  3, 0ăDATA   5,  1,  2, 64ăDATA   5,  2,  4, 128ăDATA   5,  3,  4, 192ăDATA   4,  3,  1, 192ăDATA   4,  1,  3, 192ăDATA   4,  1,  2, 192ăDATA   4,  2,  1, 192ăăREM $STATICă'Puts a byte into the disk buffer... when the disk buffer is full it isă'dumped to disk.ăSUB BufferWrite (A) STATICăă    IF OAddress = OEndAddress THEN  'are we at the end of the buffer?ă        PUT GIFFile, , OutBuffer$   ' yup, write it out andă        OAddress = OStartAddress    '  start all overă    END IFă    POKE OAddress, A                'put byte in bufferă    OAddress = OAddress + 1         'increment positionăEND SUBăăSUB FlatăăFOR k = 1 TO MaxPolysăcoord1 = p(k).C1: coord2 = p(k).C2: coord3 = p(k).C3ăăYMax% = SY(coord1): YMin% = SY(coord1)ăIF YMax% < SY(coord2) THEN YMax% = SY(coord2)ăIF YMin% > SY(coord2) THEN YMin% = SY(coord2)ăIF YMax% < SY(coord3) THEN YMax% = SY(coord3)ăIF YMin% > SY(coord3) THEN YMin% = SY(coord3)ăăIF YMin% < 0 THEN YMin% = 0ăIF YMax% > 199 THEN YMax% = 199ăăFOR Y% = YMin% TO YMax%: Scan(Y%).X1 = -32767: NEXTăă  Val1% = coord1: Val2% = coord2ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă  END IFă ă  XVal& = X1% * 512&ă    FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă          Scan(i%).X1 = XVal& \ 512ă        END SELECTă        XVal& = XVal& + XSlope&ă      NEXT i%ăă  Val1% = coord2: Val2% = coord3ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă  END IFă  XVal& = X1% * 512&ă  tmp1% = SY(coord1)ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 OR (i% = tmp1%) THENă          Scan(i%).X1 = XVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă      NEXT i%ăă  Val1% = coord3: Val2% = coord1ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă  END IFă  XVal& = X1% * 512&ă    FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 THENă          Scan(i%).X1 = XVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă      NEXT i%ăăTempOff& = VARPTR(ScnBuf(2)) + (YMin% * 320&)ăăCol1% = ScnPnts(coord1).shadeăCol2% = ScnPnts(coord2).shadeăCol3% = ScnPnts(coord3).shadeăpixel = ((Col1% + Col2% + Col3%) \ 3) + p(k).clrăăFOR Y% = YMin% TO YMax%ă  X2% = Scan(Y%).X1: X1% = Scan(Y%).X2ă  IF X1% > X2% THEN SWAP X1%, X2%ă    FOR i% = X1% TO X2%ă    SELECT CASE i%ă      CASE 0 TO 319ă        POKE (TempOff& + i%), pixelă    END SELECTă    NEXTă  TempOff& = TempOff& + 320ăNEXTăăNEXT kăăEND SUBăă'This routine gets one pixel from the display.ăFUNCTION GetByte STATICăă    GetByte = POINT(X, Y)           'get the "byte"ă    X = X + 1                       'increment X coordinateă    IF X > MaxX THEN                'are we too far?ă        LINE (Minx, Y)-(MaxX, Y), 0 'a pacifier for impatient usersă        X = Minx                    'go back to startă        Y = Y + 1                   'increment Y coordinateă        IF Y > MaxY THEN            'are we too far down?ă            Done = TRUE             ' yup, flag it thenă        END IFă    END IFăEND FUNCTIONăăSUB GouraudăăFOR k = 1 TO MaxPolysăcoord1 = p(k).C1: coord2 = p(k).C2: coord3 = p(k).C3ăăYMax% = SY(coord1): YMin% = SY(coord1)ăIF YMax% < SY(coord2) THEN YMax% = SY(coord2)ăIF YMin% > SY(coord2) THEN YMin% = SY(coord2)ăIF YMax% < SY(coord3) THEN YMax% = SY(coord3)ăIF YMin% > SY(coord3) THEN YMin% = SY(coord3)ăăIF YMin% < 0 THEN YMin% = 0ăIF YMax% > 199 THEN YMax% = 199ăăFOR Y% = YMin% TO YMax%: Scan(Y%).X1 = -32767: NEXTăă  Val1% = coord1: Val2% = coord2ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%): Col1% = ScnPnts(Val1%).shadeă  Y2% = SY(Val2%): X2% = SX(Val2%): Col2% = ScnPnts(Val2%).shadeă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%: CDelta% = Col2% - Col1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    CSlope& = CDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    CSlope& = 0ă  END IFă  XVal& = X1% * 512&ă  Cval& = Col1% * 512&ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).Clr1 = Cval& \ 512ă        END SELECTă        XVal& = XVal& + XSlope&ă        Cval& = Cval& + CSlope&ă      NEXT i%ăă  Val1% = coord2: Val2% = coord3ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%): Col1% = ScnPnts(Val1%).shadeă  Y2% = SY(Val2%): X2% = SX(Val2%): Col2% = ScnPnts(Val2%).shadeă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%: CDelta% = Col2% - Col1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    CSlope& = CDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    CSlope& = 0ă  END IFă  XVal& = X1% * 512&ă  Cval& = Col1% * 512&ă  tmp1% = SY(coord1)ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 OR (i% = tmp1%) THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).Clr1 = Cval& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).Clr2 = Cval& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        Cval& = Cval& + CSlope&ă      NEXT i%ăă  Val1% = coord3: Val2% = coord1ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%): Col1% = ScnPnts(Val1%).shadeă  Y2% = SY(Val2%): X2% = SX(Val2%): Col2% = ScnPnts(Val2%).shadeă  YDelta% = Y2% - Y1%: XDelta% = X2% - X1%: CDelta% = Col2% - Col1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    CSlope& = CDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    CSlope& = 0ă  END IFă  XVal& = X1% * 512&ă  Cval& = Col1% * 512&ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).Clr1 = Cval& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).Clr2 = Cval& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        Cval& = Cval& + CSlope&ă      NEXT i%ăăTempOff& = VARPTR(ScnBuf(2)) + (YMin% * 320&)ăFOR Y% = YMin% TO YMax%ă  X2% = Scan(Y%).X1: X1% = Scan(Y%).X2ă  IF X1% > X2% THENă    SWAP X1%, X2%ă    Col2% = Scan(Y%).Clr2: Col1% = Scan(Y%).Clr1ă  ELSEă    Col2% = Scan(Y%).Clr1: Col1% = Scan(Y%).Clr2ă  END IFăă  CSlope& = (Col2% - Col1%) * 512&ă  IF X2% <> X1% THEN CSlope& = CSlope& \ (X2% - X1%)ă  Cval& = Col1% * 512&ăă    FOR i% = X1% TO X2%ă    SELECT CASE i%ă      CASE 0 TO 319ă      pixel = Cval& \ 512 + (p(k).clr)ă      POKE (TempOff& + i%), pixelă    END SELECTă      Cval& = Cval& + CSlope&ă    NEXTă  TempOff& = TempOff& + 320ăNEXTăăNEXT kăăEND SUBăăSUB InterPhongăFOR k = 1 TO MaxPolysăcoord1 = p(k).C1: coord2 = p(k).C2: coord3 = p(k).C3ăăYMax% = SY(coord1): YMin% = SY(coord1)ăIF YMax% < SY(coord2) THEN YMax% = SY(coord2)ăIF YMin% > SY(coord2) THEN YMin% = SY(coord2)ăIF YMax% < SY(coord3) THEN YMax% = SY(coord3)ăIF YMin% > SY(coord3) THEN YMin% = SY(coord3)ăăIF YMin% < 0 THEN YMin% = 0ăIF YMax% > 199 THEN YMax% = 199ăăFOR Y% = YMin% TO YMax%: Scan(Y%).X1 = -32767: NEXTăă  Val1% = coord1: Val2% = coord2ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  X3DDelta% = X3D2% - X3D1%ă  Y3DDelta% = Y3D2% - Y3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ăă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăă  Val1% = coord2: Val2% = coord3ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  Y3DDelta% = Y3D2% - Y3D1%ă  X3DDelta% = X3D2% - X3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă  tmp1% = SY(coord1)ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 OR (i% = tmp1%) THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).X3D2 = X3DVal& \ 512ă          Scan(i%).Y3D2 = Y3DVal& \ 512ă          Scan(i%).Z3D2 = Z3DVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăă  Val1% = coord3: Val2% = coord1ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  X3DDelta% = X3D2% - X3D1%ă  Y3DDelta% = Y3D2% - Y3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă     FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).X3D2 = X3DVal& \ 512ă          Scan(i%).Y3D2 = Y3DVal& \ 512ă          Scan(i%).Z3D2 = Z3DVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăăTempOff& = VARPTR(ScnBuf(2)) + (YMin% * 320&)ăFOR Y% = YMin% TO YMax%ă ă  X2% = Scan(Y%).X1: X1% = Scan(Y%).X2ă  IF X1% > X2% THENă    SWAP X1%, X2%ă    X3D2& = Scan(Y%).X3D2: X3D1& = Scan(Y%).X3D1ă    Y3D2& = Scan(Y%).Y3D2: Y3D1& = Scan(Y%).Y3D1ă    Z3D2& = Scan(Y%).Z3D2: Z3D1& = Scan(Y%).Z3D1ă  ELSEă    X3D2& = Scan(Y%).X3D1: X3D1& = Scan(Y%).X3D2ă    Y3D2& = Scan(Y%).Y3D1: Y3D1& = Scan(Y%).Y3D2ă    Z3D2& = Scan(Y%).Z3D1: Z3D1& = Scan(Y%).Z3D2ă  END IFă ă  D& = SQR((X3D1& * X3D1&) + (Y3D1& * Y3D1&) + (Z3D1& * Z3D1&)) * 1024&ă  IF D& <> 0 THENă    'COS e = (U dot V) / (|V| * |U|)ă    UdotV = ((X3D1& * LX) + (Y3D1& * LY) + (Z3D1& * LZ))ă    '8192 = 1024 * 8ă    A! = ((UdotV * 8192&) / (D& * LightDistance&))ă    'formula for ArcCosă    S = 90 - (ATN(A! / SQR(A! * -A! + 1)) * (180 / PI))ă    'fit angle to palette: inverse of 90 degrees / 63 colorsă    Col1% = (90 - S) * 7 \ 10ă    IF Col1% < 0 THEN Col1% = 0ă    IF Col1% > 63 THEN Col1% = 63ă  ELSEă    Col1% = 0ă  END IFăă  D& = SQR((X3D2& * X3D2&) + (Y3D2& * Y3D2&) + (Z3D2& * Z3D2&)) * 1024&ă  IF D& <> 0 THENă    'COS e = (U dot V) / (|V| * |U|)ă    UdotV = ((X3D2& * LX) + (Y3D2& * LY) + (Z3D2& * LZ))ă    '8192 = 1024 * 8ă    A! = ((UdotV * 8192&) / (D& * LightDistance&))ă    'formula for ArcCosă    S = 90 - (ATN(A! / SQR(A! * -A! + 1)) * (180 / PI))ă    'fit angle to palette: inverse of 90 degrees / 63 colorsă    Col2% = (90 - S) * 7 \ 10ă    IF Col2% < 0 THEN Col2% = 0ă    IF Col2% > 63 THEN Col2% = 63ă  ELSEă    Col2% = 0ă  END IFăă  CSlope& = (Col2% - Col1%) * 512&ă  IF X2% <> X1% THEN CSlope& = CSlope& \ (X2% - X1%)ă  Cval& = Col1% * 512&ăă    FOR i% = X1% TO X2%ă    SELECT CASE i%ă      CASE 0 TO 319ă      pixel = Cval& \ 512 + (p(k).clr)ă      POKE (TempOff& + i%), pixelă    END SELECTă      Cval& = Cval& + CSlope&ă    NEXTă  TempOff& = TempOff& + 320ăNEXTăăNEXT kăEND SUBăă'ă'-----------------------------------------------------------------------ă'   PDS 7.1 & QB4.5 GIF Compression Routine v1.00 By Rich Geldreich 1992ă'-----------------------------------------------------------------------ă'ă'A$          = output filenameă'ScreenX     = X resolution of screen(320, 640, etc.)ă'ScreenY     = Y resolution of screen(200, 350, 480, etc.)ă'XStart      = <-upper left hand corner of area to encodeă'YStart      = < "                                      "ă'Xend        = <-lower right hand corner of area to encodeă'Yend        = < "                                       "ă'NumColors   = # of colors on screen(2, 16, 256)ă'AdaptorType = 1 for EGA 2 for VGAă'NOTE: EGA palettes are not supported in this version of MakeGIF.ă'ăSUB MakeGif (A$, ScreenX, ScreenY, Xstart, YStart, Xend, Yend, NumColors, AdaptorType)ă    'hash table's size - must be a prime number!ă    CONST Table.Size = 7177ăă    DIM Prefix(Table.Size - 1), Suffix(Table.Size - 1), code(Table.Size - 1)ă   ă    'The shift table contains the powers of 2 needed by theă    'PutCode routine. This is done for speed. (much faster toă    'look up an integer than to perform calculations...)ă    RESTORE ShiftTableă    FOR A = 0 TO 7: READ Shift(A): NEXTă   ă    'MinX, MinY, MaxX, MaxY have the encoding windowă    Minx = Xstart: MinY = YStartă    MaxX = Xend: MaxY = Yendă   ă    'Open GIF output fileă    GIFFile = FREEFILE                  'use next free fileă    OPEN A$ FOR BINARY AS GIFFileă   ă    'Put GIF87a header at beginning of fileă    B$ = "GIF87a"ă    PUT GIFFile, , B$ă   ă    'See how many colors are in this image...ă    SELECT CASE NumColorsă        CASE 2              'monochrome imageă            BitsPixel = 1   '1 bit per pixelă            StartSize = 3   'first LZW code is 3 bitsă            StartCode = 4   'first free codeă            StartMax = 8    'maximum code in 3 bitsăă        CASE 16             '16 colors imagesă            BitsPixel = 4   '4 bits per pixelă            StartSize = 5   'first LZW code is 5 bitsă            StartCode = 16  'first free codeă            StartMax = 32   'maximum code in 5 bitsă       ă        CASE 256            '256 color imagesă            BitsPixel = 8   '8 bits per pixelă            StartSize = 9   'first LZW code is 9 bitsă            StartCode = 256 'first free codeă            StartMax = 512  'maximum code in 9 bitsă    END SELECTă    'This following routine probably isn't needed- I've neveră    'had to use the "ColorBits" variable... With the EGA, youă    'have 2 bits for Red, Green, & Blue. With VGA, you have 6 bits.ă    SELECT CASE AdaptorTypeă        CASE 1ă            ColorBits = 2               'EGAă        CASE 2ă            ColorBits = 6               'VGAă    END SELECTă    ă    PUT GIFFile, , ScreenX  'put screen's dimensionsă    PUT GIFFile, , ScreenYă    'pack colorbits and bits per pixelă    A = 128 + (ColorBits - 1) * 16 + (BitsPixel - 1)ă    PUT GIFFile, , Aă    'throw a zero into the GIF fileă    A$ = CHR$(0)ă    PUT GIFFile, , A$ă    'Get the RGB palette from the screen and put it into the file...ă    SELECT CASE AdaptorTypeă    CASE 1ă        STOPă        'EGA palette routine not implemented yetă    CASE 2ă        OUT &H3C7, 0ă        FOR A = 0 TO NumColors - 1ă          'Note: a BIOS call could be used here, but then we have to useă            'the messy CALL INTERRUPT subs...ă            R = (INP(&H3C9) * 65280) \ 16128 'C=R * 4.0476190(for 0-255)ă            G = (INP(&H3C9) * 65280) \ 16128ă            B = (INP(&H3C9) * 65280) \ 16128ă            A$ = CHR$(R): PUT GIFFile, , A$ă            A$ = CHR$(G): PUT GIFFile, , A$ă            A$ = CHR$(B): PUT GIFFile, , A$ă        NEXTă    END SELECTă   ă    'write out an image descriptor...ă    A$ = ","                        '"," is image seperatoră    PUT GIFFile, , A$               'write ită    PUT GIFFile, , Minx             'write out the image's locationă    PUT GIFFile, , MinYă    ImageWidth = (MaxX - Minx + 1)  'find length & width of imageă    ImageHeight = (MaxY - MinY + 1)ă    PUT GIFFile, , ImageWidth       'store them into the fileă    PUT GIFFile, , ImageHeightă    A$ = CHR$(BitsPixel - 1)        '# bits per pixel in the imageă    PUT GIFFile, , A$ă   ă    A$ = CHR$(StartSize - 1)        'store the LZW minimum code sizeă    PUT GIFFile, , A$ă   ă    'Initialize the vars needed by PutCodeă    CurrentBit = 0: Char& = 0ă    ă    MaxCode = StartMax          'the current maximum code sizeă    CodeSize = StartSize        'the current code sizeă    ClearCode = StartCode       'ClearCode & EOF code are theă    EOFCode = StartCode + 1     '  first two entriesă    StartCode = StartCode + 2   'first free code that can be usedă    NextCode = StartCode        'the current codeă   ă  OutBuffer$ = STRING$(5000, 32)  'output buffer; for speedy disk writesă    A& = SADD(OutBuffer$)           'find address of bufferă    A& = A& - 65536 * (A& < 0)ă    Oseg = VARSEG(OutBuffer$) + (A& \ 16)   'get segment + offset >> 4ă    OAddress = A& AND 15                  'get address into segmentă    OEndAddress = OAddress + 5000         'end of disk bufferă    OStartAddress = OAddress              'current location in disk bufferă    DEF SEG = Osegăă    GOSUB ClearTree                       'clear the tree & output aă    PutCode ClearCode                     '  clear codeă   ă    X = Xstart: Y = YStart          'X & Y have the current pixelă    Prefix = GetByte                'the first pixel is a special caseă    Done = FALSE                    'True when image is completeă    ă    DO 'while there are more pixels to encodeăă        DO 'until we have a new string to put into the tableăă           IF Done THEN 'write out the last pixel, clear the disk bufferă                      'and fix up the last block so its count is correctă               ă                PutCode Prefix  'write last pixelă                PutCode EOFCode 'send EOF codeă               ă                IF CurrentBit <> 0 THENă                    PutCode 0       'flush out the last code...ă                END IFă                PutByte 0ăă                OutBuffer$ = LEFT$(OutBuffer$, OAddress - OStartAddress)ă                PUT GIFFile, , OutBuffer$ă           A$ = ";" + STRING$(8, &H1A) 'the 8 EOF chars is not standard,ă                                       'but many GIF's have them, so howă                                       'much could it hurt?ă                PUT GIFFile, , A$ă               ă            A$ = CHR$(255 - BlockLength) 'correct the last block's countă                PUT GIFFile, LastLoc&, A$ă               ă                CLOSE GIFFileă                EXIT SUBă            ELSE 'get a pixel from the screen and see if we can findă                 'the new string in the tableă                Suffix = GetByteă                GOSUB Hash        'is it there?ă             IF Found = TRUE THEN Prefix = code(index) 'yup, replace theă                                    'prefix:suffix string with whateveră                                    'code represents it in the tableă            END IFă        LOOP WHILE Found  'don't stop unless we find a new stringă        ă        PutCode Prefix    'output the prefix to the fileă       ă        Prefix(index) = Prefix  'put the new string in the tableă        Suffix(index) = Suffixă  code(index) = NextCode  'we've got to keep track if what code this is!ă       ă   Prefix = Suffix         'Prefix=the last pixel pulled from the screenă       ă        NextCode = NextCode + 1   'get ready for the next codeă        IF NextCode = MaxCode + 1 THEN  'can an output code ever exceedă                                        'the current code size?ă            'yup, increase the code sizeăă            MaxCode = MaxCode * 2ă            ă        'Note: The GIF89a spec mentions something about a deferred cleară        'code. When the clear code is deferred, codes are not enteredă        'into the hash table anymore. When the compression of the imageă        'starts to fall below a certain threshold, the clear code isă        'sent and the hash table is cleared. The overall result isă        'greater compression, because the table is cleared less often.ă        'This version of MakeGIF doesn't support this, because some GIFă        'decoders crash when they attempt to enter too many codesă        'into the string table.ăă            IF CodeSize = 12 THEN       'is the code size too big?ă                PutCode ClearCode       'yup; clear the table andă                GOSUB ClearTree         'start overă                NextCode = StartCodeă                CodeSize = StartSizeă                MaxCode = StartMaxăăă            ELSEă                CodeSize = CodeSize + 1 'just increase the code size ifă            END IF                      'it's not too high( not > 12)ă        END IFă        ă    LOOP 'while we have more pixelsăClearTree:ă    FOR A = 0 TO Table.Size - 1       'clears the hashing tableă        Prefix(A) = -1                '-1 = invalid entryă        Suffix(A) = -1ă        code(A) = -1ă    NEXTăRETURNă'this is only one of a plethora of ways to search the table foră'a match! I used a binary tree first, but I switched to hashingă'cause it's quicker(perhaps the way I implemented the tree wasn'tă'optimal... who knows!)ăHash:ă    'hash the prefix & suffix(there are also many ways to do this...)ă     '?? is there a better formula?ă    index = ((Prefix * 256&) XOR Suffix) MOD Table.Sizeă    'ă    '(Note: the table size(7177 in this case) must be a prime number, oră    'else there's a chance that the routine will hang up... hate whenă    'that happens!)ă    'ă    'Calculate an offset just in case we don't find what we want on theă    'first try...ă    IF index = 0 THEN    'can't have Table.Size-0 !ă        offset = 1ă    ELSEă        offset = Table.Size - indexă    END IFă    ă DO 'until we (1) find an empty entry or (2) find what we're lookin foră                                  ă       ă        IF code(index) = -1 THEN  'is this entry blank?ă            Found = FALSE         'yup- we didn't find the stringă            RETURNă        'is this entry the one we're looking for?ă        ELSEIF Prefix(index) = Prefix AND Suffix(index) = Suffix THENă            'yup, congrats you now understand hashing!!!ă    ă            Found = TRUEă            RETURNă        ELSEă            'shoot! we didn't find anything interesting, so we mustă            'retry- this is what slows hashing down. I could of usedă            'a bigger table, that would of speeded things up a littleă            'because this retrying would not happen as often...ă            index = index - offsetă            IF index < 0 THEN   'too far down the table?ă                'wrap back the index to the end of the tableă                index = index + Table.Sizeă            END IFă        END IFă    LOOPăEND SUBăăSUB PhongăFOR k = 1 TO MaxPolysăcoord1 = p(k).C1: coord2 = p(k).C2: coord3 = p(k).C3ăăYMax% = SY(coord1): YMin% = SY(coord1)ăIF YMax% < SY(coord2) THEN YMax% = SY(coord2)ăIF YMin% > SY(coord2) THEN YMin% = SY(coord2)ăIF YMax% < SY(coord3) THEN YMax% = SY(coord3)ăIF YMin% > SY(coord3) THEN YMin% = SY(coord3)ăăIF YMin% < 0 THEN YMin% = 0ăIF YMax% > 199 THEN YMax% = 199ăăFOR Y% = YMin% TO YMax%: Scan(Y%).X1 = -32767: NEXTăă  Val1% = coord1: Val2% = coord2ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  X3DDelta% = X3D2% - X3D1%ă  Y3DDelta% = Y3D2% - Y3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ăă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăă  Val1% = coord2: Val2% = coord3ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  Y3DDelta% = Y3D2% - Y3D1%ă  X3DDelta% = X3D2% - X3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă  tmp1% = SY(coord1)ă      FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 OR (i% = tmp1%) THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).X3D2 = X3DVal& \ 512ă          Scan(i%).Y3D2 = Y3DVal& \ 512ă          Scan(i%).Z3D2 = Z3DVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăă  Val1% = coord3: Val2% = coord1ă  IF SY(Val1%) > SY(Val2%) THEN SWAP Val1%, Val2%ă  Y1% = SY(Val1%): X1% = SX(Val1%)ă  Y2% = SY(Val2%): X2% = SX(Val2%)ă  X3D1% = ScnPnts(Val1%).X: X3D2% = ScnPnts(Val2%).Xă  Y3D1% = ScnPnts(Val1%).Y: Y3D2% = ScnPnts(Val2%).Yă  Z3D1% = ScnPnts(Val1%).Z: Z3D2% = ScnPnts(Val2%).Zăă  X3DDelta% = X3D2% - X3D1%ă  Y3DDelta% = Y3D2% - Y3D1%ă  Z3DDelta% = Z3D2% - Z3D1%ă  XDelta% = X2% - X1%: YDelta% = Y2% - Y1%ăă  IF YDelta% <> 0 THENă    XSlope& = XDelta% * 512& \ YDelta%ă    X3DSlope& = X3DDelta% * 512& \ YDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ YDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ YDelta%ă  ELSEă    XSlope& = 0ă    X3DSlope& = 0ă    Y3DSlope& = 0ă    Z3DSlope& = 0ă  END IFăă  X3DVal& = X3D1% * 512&: Y3DVal& = Y3D1% * 512&: Z3DVal& = Z3D1% * 512&ă  XVal& = X1% * 512&ă     FOR i% = Y1% TO Y2%ă        SELECT CASE i%ă        CASE 0 TO 199ă        IF Scan(i%).X1 = -32767 THENă          Scan(i%).X1 = XVal& \ 512ă          Scan(i%).X3D1 = X3DVal& \ 512ă          Scan(i%).Y3D1 = Y3DVal& \ 512ă          Scan(i%).Z3D1 = Z3DVal& \ 512ă        ELSEă          Scan(i%).X2 = XVal& \ 512ă          Scan(i%).X3D2 = X3DVal& \ 512ă          Scan(i%).Y3D2 = Y3DVal& \ 512ă          Scan(i%).Z3D2 = Z3DVal& \ 512ă        END IFă        END SELECTă        XVal& = XVal& + XSlope&ă        X3DVal& = X3DVal& + X3DSlope&ă        Y3DVal& = Y3DVal& + Y3DSlope&ă        Z3DVal& = Z3DVal& + Z3DSlope&ă      NEXT i%ăăTempOff& = VARPTR(ScnBuf(2)) + (YMin% * 320&)ăFOR Y% = YMin% TO YMax%ă  X2% = Scan(Y%).X1: X1% = Scan(Y%).X2ă  IF X1% > X2% THENă    SWAP X1%, X2%ă    X3D2% = Scan(Y%).X3D2: X3D1% = Scan(Y%).X3D1ă    Y3D2% = Scan(Y%).Y3D2: Y3D1% = Scan(Y%).Y3D1ă    Z3D2% = Scan(Y%).Z3D2: Z3D1% = Scan(Y%).Z3D1ă  ELSEă    X3D2% = Scan(Y%).X3D1: X3D1% = Scan(Y%).X3D2ă    Y3D2% = Scan(Y%).Y3D1: Y3D1% = Scan(Y%).Y3D2ă    Z3D2% = Scan(Y%).Z3D1: Z3D1% = Scan(Y%).Z3D2ă  END IFăă  X3DDelta% = (X3D2% - X3D1%)ă  Y3DDelta% = (Y3D2% - Y3D1%)ă  Z3DDelta% = (Z3D2% - Z3D1%)ă  XDelta% = (X2% - X1%)ăă  IF XDelta% <> 0 THENă    X3DSlope& = X3DDelta% * 512& \ XDelta%ă    Y3DSlope& = Y3DDelta% * 512& \ XDelta%ă    Z3DSlope& = Z3DDelta% * 512& \ XDelta%ă  END IFăă  X3DVal& = X3D1% * 512&ă  Y3DVal& = Y3D1% * 512&ă  Z3DVal& = Z3D1% * 512&ăă    FOR i% = X1% TO X2%ă    SELECT CASE i%ă      CASE 0 TO 319ă      TmpX& = X3DVal& \ 512ă      TmpY& = Y3DVal& \ 512ă      TmpZ& = Z3DVal& \ 512ă      D& = SQR((TmpX& * TmpX&) + (TmpY& * TmpY&) + (TmpZ& * TmpZ&)) * 1024&ă      IF D& <> 0 THENă        'COS e = (U dot V) / (|V| * |U|)ă        UdotV = ((TmpX& * LX) + (TmpY& * LY) + (TmpZ& * LZ))ă        '8192 = 1024 * 8ă        A! = ((UdotV * 8192&) / (D& * LightDistance&))ă        'formula for ArcCosă        S = 90 - (ATN(A! / SQR(A! * -A! + 1)) * (180 / PI))ă        'fit angle to palette: inverse of 90 degrees / 63 colorsă        pixel = (90 - S) * 7 \ 10ă        IF pixel < 0 THEN pixel = 0ă        IF pixel > 64 THEN pixel = 64ă      ELSEă        pixel = 0ă      END IFă      IF pixel THENă        pixel = pixel + p(k).clră        POKE (TempOff& + i%), pixelă      END IFă    END SELECTă      X3DVal& = X3DVal& + X3DSlope&ă      Y3DVal& = Y3DVal& + Y3DSlope&ă      Z3DVal& = Z3DVal& + Z3DSlope&ă    NEXTă  TempOff& = TempOff& + 320ăNEXTăăNEXT kăEND SUBăă'Puts a byte into the GIF file & also takes care of each block.ăSUB PutByte (A) STATICă    BlockLength = BlockLength - 1   'are we at the end of a block?ă    IF BlockLength <= 0 THEN        ' yup,ă        BlockLength = 255           'block length is now 255ă   LastLoc& = LOC(1) + 1 + (OAddress - OStartAddress) 'remember the pos.ă    BufferWrite 255                                    'for later fixingă    END IFă    BufferWrite A   'put a byte into the bufferăEND SUBăă'Puts an LZW variable-bit code into the output file...ăSUB PutCode (A) STATICă    Char& = Char& + A * Shift(CurrentBit) 'put the char were it belongs;ă CurrentBit = CurrentBit + CodeSize  ' shifting it to its proper placeăDO WHILE CurrentBit > 7              'do we have a least one full byte?ă   PutByte Char& AND 255             ' yup! mask it off and write it oută   Char& = Char& \ 256               'shift the bit buffer right 8 bitsă   CurrentBit = CurrentBit - 8       'now we have 8 less bitsă    LOOP 'until we don't have a full byteăEND SUBăăSUB SetPal (C, R, G, B)ăOUT &H3C8, CăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăEND SUBăăSUB WireăăFOR k = 0 TO MaxPolysăcoord1 = p(k).C1: coord2 = p(k).C2: coord3 = p(k).C3ăăCol1% = ScnPnts(coord1).shadeăCol2% = ScnPnts(coord2).shadeăCol3% = ScnPnts(coord3).shadeăăpixel = ((Col1% + Col2% + Col3%) \ 3) + p(k).clrăăX% = SX(coord1): Y% = SY(coord1)ăX2% = SX(coord2): Y2% = SY(coord2)ăă   i% = 0: steep% = 0: e% = 0ă   tmp = X2% - X%: SX% = SGN(tmp): dx% = ABS(tmp)ă   tmp = Y2% - Y%: SY% = SGN(tmp): dy% = ABS(tmp)ă   IF (dy% > dx%) THENă      steep% = 1ă      SWAP X%, Y%ă      SWAP dx%, dy%ă      SWAP SX%, SY%ă   END IFă   e% = dy% + dy% - dx%ă   IF steep = 1 THENă     FOR i% = 0 TO dx% - 1ă        IF Y% > 0 AND Y% < 319 AND X% > 0 AND X% < 199 THENă           POKE (Y% + (X% * 320&) + VARPTR(ScnBuf(2))), pixelă        END IFă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + (dy% + dy%)ă      NEXTă   ELSEă     FOR i% = 0 TO dx% - 1ă        IF X% > 0 AND X% < 319 AND Y% > 0 AND Y% < 199 THENă          POKE (X% + (Y% * 320&) + VARPTR(ScnBuf(2))), pixelă        END IFă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + dy% + dy%ă     NEXTă   END IFăă   IF X2% > 0 AND X2% < 319 AND Y2% > 0 AND Y2% < 199 THENă     POKE (X2% + (Y2% * 320&) + VARPTR(ScnBuf(2))), pixelă   END IFăăX% = SX(coord3): Y% = SY(coord3)ăX2% = SX(coord2): Y2% = SY(coord2)ăă   i% = 0: steep% = 0: e% = 0ă   tmp = X2% - X%: SX% = SGN(tmp): dx% = ABS(tmp)ă   tmp = Y2% - Y%: SY% = SGN(tmp): dy% = ABS(tmp)ă   IF (dy% > dx%) THENă      steep% = 1ă      SWAP X%, Y%ă      SWAP dx%, dy%ă      SWAP SX%, SY%ă   END IFă   e% = dy% + dy% - dx%ă   IF steep = 1 THENă     FOR i% = 0 TO dx% - 1ă        IF Y% > 0 AND Y% < 319 AND X% > 0 AND X% < 199 THENă          POKE (Y% + (X% * 320&) + VARPTR(ScnBuf(2))), pixelă        END IFăă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + (dy% + dy%)ă      NEXTă   ELSEă     FOR i% = 0 TO dx% - 1ă        IF X% > 0 AND X% < 319 AND Y% > 0 AND Y% < 199 THENă          POKE (X% + (Y% * 320&) + VARPTR(ScnBuf(2))), pixelă        END IFă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + dy% + dy%ă     NEXTă   END IFăă   IF X2% > 0 AND X2% < 319 AND Y2% > 0 AND Y2% < 199 THENă     POKE (X2% + (Y2% * 320&) + VARPTR(ScnBuf(2))), pixelă   END IFăăX% = SX(coord1): Y% = SY(coord1)ăX2% = SX(coord3): Y2% = SY(coord3)ăă   i% = 0: steep% = 0: e% = 0ă   tmp = X2% - X%: SX% = SGN(tmp): dx% = ABS(tmp)ă   tmp = Y2% - Y%: SY% = SGN(tmp): dy% = ABS(tmp)ă   IF (dy% > dx%) THENă      steep% = 1ă      SWAP X%, Y%ă      SWAP dx%, dy%ă      SWAP SX%, SY%ă   END IFă   e% = dy% + dy% - dx%ă   IF steep = 1 THENă     FOR i% = 0 TO dx% - 1ă          IF Y% > 0 AND Y% < 319 AND X% > 0 AND X% < 199 THENă            POKE (Y% + (X% * 320&) + VARPTR(ScnBuf(2))), pixelă          END IFă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + (dy% + dy%)ă      NEXTă   ELSEă     FOR i% = 0 TO dx% - 1ă          IF X% > 0 AND X% < 319 AND Y% > 0 AND Y% < 199 THENă            POKE (X% + (Y% * 320&) + VARPTR(ScnBuf(2))), pixelă          END IFă        WHILE e% >= 0ă           Y% = Y% + SY%: e% = e% - (dx% + dx%)ă        WENDă        X% = X% + SX%: e% = e% + dy% + dy%ă     NEXTă   END IFăă   IF X2% > 0 AND X2% < 319 AND Y2% > 0 AND Y2% < 199 THENă     POKE (X2% + (Y2% * 320&) + VARPTR(ScnBuf(2))), pixelă   END IFăăNEXT kăEND SUBăMatt Bross                     3D ANIMATED PLASMA-CUBE        ebross@mixcom.com              06-06-97 (17:08)       QB, QBasic, PDS        929  31846    PCUBE.BAS   'PCUBE.BAS by Matt Brossă'Homepage - http://www.GeoCities.Com/SoHo/7067/ă'Email    - oh_bother@GeoCities.ComăăDEFINT A-ZăREM RICH GELDREICHăDECLARE FUNCTION GetByte% ()ăDECLARE SUB BufferWrite (a%)ăDECLARE SUB MakeGif (a$, ScreenX%, ScreenY%, Xstart%, YStart%, Xend%, Yend%, NumColors%, AdaptorType%)ăDECLARE SUB PutByte (a%)ăDECLARE SUB PutCode (a%)ăăDECLARE SUB ScanLeftSide (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide%)ăDECLARE SUB ScanRightSide (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide%)ăDECLARE SUB ScanConvert (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide%)ăDECLARE SUB TextureMap (MinY%, MaxY%)ăăDECLARE SUB SetPal (c%, R%, G%, B%)ăDECLARE SUB ReadPal (c%)ăăCONST TRUE% = -1, FALSE% = NOT TRUE, PI# = 22 / 7ăCONST TOP = 0, LEFT = 1, RIGHT = 2, BOTTOM = 3ăăRANDOMIZE TIMERă'ON ERROR GOTO ErrorHandlerăTYPE PointTypeă  X AS INTEGER       'X coordinateă  Y AS INTEGER       'Y coordinateă  Z AS INTEGER       'Z coordinateă  SHADE AS INTEGER   'shade of pointsă  Distance AS INTEGER'distance from the origin (0, 0, 0)ăEND TYPEăTYPE PolyTypeă  C1 AS INTEGER      'number of the first point of a polygonă  C2 AS INTEGER      'number of the second point of a polygonă  C3 AS INTEGER      'number of the third point of a polygonă  C4 AS INTEGER      'number of the forth point of a polygonă  culled AS INTEGER  'TRUE if the polygon isn't visibleă  AvgZ AS INTEGER    'used to sort Z coordinates of polygonsă  Tex AS INTEGER     'texture of the polygonăEND TYPEăTYPE FillTypeă  X1 AS LONG         'starting Y coordinateă  X2 AS LONG         'ending Y coordinateă  Clr1 AS INTEGER    'starting coloră  Clr2 AS INTEGER    'ending coloră  PX1 AS INTEGER     'starting x coordinate of pictureă  PX2 AS INTEGER     'ending x coordinate of pictureă  PY1 AS INTEGER     'starting y coordinate of pictureă  PY2 AS INTEGER     'ending y coordinate of pictureăEND TYPEăTYPE RGBă  R AS INTEGERă  G AS INTEGERă  B AS INTEGERăEND TYPEă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%INFO%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSCREEN 0, 0, 0, 0: WIDTH 80, 25: CLSăPRINT "PCUBE.BAS by Matt Bross, 1997"ăPRINTăPRINT "3D ANIMATION FOR THE QBASIC LANGUAGE"ăPRINT "COPYRIGHT MATT BROSS.  USE FREELY AS"ăPRINT "LONG AS CREDIT IS GIVEN."ăPRINTăPRINT "--------CONTROLS--------"ăPRINT "      0 - reset rotation"ăPRINT "      5 - stop rotation"ăPRINT "      S - reset location"ăPRINT "      A - stop translation"ăPRINT "   2, 8 - rotate around x axis"ăPRINT "   4, 6 - rotate around y axis"ăPRINT "   -, + - rotate around z axis"ăPRINT "   I, K - translate vertically"ăPRINT "   J, L - translate horizontally"ăPRINT "   Z, X - translate depthwise"ăPRINT "<SPACE> - reverse palette rotation"ăPRINT "      V - random palette rotation"ăPRINT " Esc - exit"ăPRINT "----CASE INSENSITIVE----"ăPRINTă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%VARIABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSRX = 320: SRY = 200  'SRX, SRY = the screen's resolutionăDX = SRX \ 2: DY = SRY \ 2 'DX, DY = center of screenăD& = 200: SD = 340 'viewer's distance from objectă'%%%%%%%%%%%%%%%%%%%%%%%%%%GOURAUD SHADE ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%%ăREM $DYNAMICăDIM SHARED Scan(199) AS FillTypeă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%GIF STUFF%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED OutBuffer$, OStartAddress, OAddress, OEndAddress, OsegăDIM SHARED CodeSize, CurrentBit, Char&, BlockLengthăDIM SHARED Shift(7) AS LONGăDIM SHARED X, Y, Minx, MinY, MaxX, MaxY, Done, GIFFile, LastLoc&ăShiftTable: DATA 1, 2, 4, 8, 16, 32, 64, 128ă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SIN TABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ă'SIN\COS table for 2 PI radians and then scale 1024 times for faster math.ăDIM SHARED SINTABLE(459) AS LONGăFOR i = 0 TO 459 'COS(X) = SIN(X + 90)ă  SINTABLE(i) = COS(i * PI / 180) * 1024 'use 1024 to shift binary digitsăNEXT i                                   'over 6 bits.ă'%%%%%%%%%%%%%%%%%%%%%%%%DOUBLE BUFFERING ARRAYS%%%%%%%%%%%%%%%%%%%%%%%%ăDIM SHARED ScnBuf(32001)   'DIM array to serve as page in SCREEN 13ăScnBuf(0) = 320 * 8 'set length (x) * 8ăScnBuf(1) = 200     'set height (y)ăDEF SEG = VARSEG(ScnBuf(2)) 'get segment of beginning of array dataăAofs& = VARPTR(ScnBuf(2))   'get offset of beginning of array dataă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LIGHT TABLES%%%%%%%%%%%%%%%%%%%%%%%%%%%%ă'Location of light source in spherical coordinatesăL1 = 70: L1 = L1 MOD 360: IF L1 < 0 THEN L1 = L1 + 360ăL2 = 40: L2 = L2 MOD 360: IF L2 < 0 THEN L2 = L2 + 360ăS1& = SINTABLE(L1 + 90): C1& = SINTABLE(L1)ăS2& = SINTABLE(L2 + 90): C2& = SINTABLE(L2)ăLX = S1& * C2& \ 8192: LY = S1& * S2& \ 8192 '8192 = 1024 * 1024 \ 128ăLZ = C1& \ 8 '8 = 1024 \ 128ă'find distance from light source to origin (0, 0, 0)ăLightDistance& = SQR(LX * LX + LY * LY + LZ * LZ) * 8 '8 = 1024 \ 128ă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD OBJECT%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăRESTORE ObjectDataăREAD MaxPoints, MaxPolysăDIM Points(MaxPoints) AS PointType     'at startăDIM ScnPnts(MaxPoints) AS PointType    'after rotationăDIM SX(MaxPoints), SY(MaxPoints)       'points drawn to screenăFOR i = 1 TO MaxPoints 'Load and Center Pointsă  READ X, Y, Z: Points(i).X = X: Points(i).Y = Y: Points(i).Z = Ză  CX = CX + X: CY = CY + Y: CZ = CZ + ZăNEXT iăCX = CX \ MaxPoints: CY = CY \ MaxPoints: CZ = CZ \ MaxPointsăFOR i = 1 TO MaxPointsă  Points(i).X = Points(i).X - CXă  Points(i).Y = Points(i).Y - CYă  Points(i).Z = Points(i).Z - CZă  X = Points(i).X: Y = Points(i).Y: Z = Points(i).Ză  'find distance from point to the origin (0, 0, 0)ă  PointDistance& = SQR(X * X + Y * Y + Z * Z) * 1024&ă  Points(i).Distance = PointDistance& * LightDistance& \ 1048576 '1024 * 1024ă  ScnPnts(i).Distance = Points(i).DistanceăNEXT iă'Load Polygon DataăDIM SHARED P(MaxPolys) AS PolyType 'stores all polygon dataăFOR i = 1 TO MaxPolys: READ P(i).C1, P(i).C2, P(i).C3, P(i).C4: NEXT iăăPRINT "Press a Key"ăDO: LOOP UNTIL INKEY$ <> ""ă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%SET PALETTE%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăSCREEN 13: CLSăDIM R(1 TO 255), G(1 TO 255), B(1 TO 255)ăDIM SHARED PalR AS RGBăRC = 1: GC = 1: BC = 1ăFOR c = 0 TO 31ă  i = c + că  SetPal c, i, i, i            'grayă  SetPal c + 32, i, 0, 0       'redă  SetPal c + 64, i, i \ 2, 0   'orangeă  SetPal c + 96, i, i, 0       'yellowă  SetPal c + 128, 0, i, 0      'greenă  SetPal c + 160, 0, i, i      'cyană  SetPal c + 192, 0, 0, i      'blueă  SetPal c + 224, i, 0, i      'purpleăNEXT căFOR i = 1 TO 255ă  ReadPal iă  R(i) = PalR.R: G(i) = PalR.G: B = PalR.BăNEXTă'%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%LOAD TEXTURE%%%%%%%%%%%%%%%%%%%%%%%%%%%%ăDIM QTable(1 TO 3, 1 TO 3)ăRESTORE QDataăăQData:ăDATA  2, 3, 2ăDATA  3, 1, 3ăDATA  2, 3, 2ăăFOR j = 1 TO 3ă  READ QTable(1, j), QTable(2, j), QTable(3, j)ăNEXTăăDIM SHARED PWidth%, PHeight%ăPWidth% = 50: PHeight% = 50ăDIM SHARED Texture(PWidth%, PHeight%)ă'make random pictureăFOR j = 0 TO PHeight%ă  FOR i = 0 TO PWidth%ă    PSET (i, j), RND * 10ă  NEXT iăNEXT jăăFOR i = 0 TO PWidth%ă  Texture(i, 0) = POINT(i, 1)ă  Texture(i, PHeight%) = POINT(i, PHeight%)ăNEXT iăFOR j = 0 TO PHeight%ă  Texture(0, j) = POINT(1, j)ă  Texture(PWidth%, j) = POINT(PWidth%, j)ăNEXT jăătimes = 6ă'run through quantization arrayăFOR pass = 1 TO timesă  FOR j = 1 TO PHeight% - 1ă    FOR i = 1 TO PWidth% - 1ă      c = POINT(i - 1, j - 1) * QTable(1, 1)ă      c = c + POINT(i, j - 1) * QTable(2, 1)ă      c = c + POINT(i + 1, j - 1) * QTable(3, 1)ă      c = c + POINT(i - 1, j) * QTable(1, 2)ă      c = c + POINT(i + 1, j) * QTable(3, 2)ă      c = c + POINT(i - 1, j + 1) * QTable(1, 3)ă      c = c + POINT(i, j + 1) * QTable(2, 3)ă      c = c + POINT(i + 1, j + 1) * QTable(3, 3)ă      c = c \ 8ă      c = (c + Texture(i, j) * QTable(2, 2)) \ 2ă      Texture(i, j) = c MOD 255ă    NEXT iă  NEXT jăă  FOR j = 1 TO PHeight% - 1ă    Texture(0, j) = POINT(1, j)ă    Texture(PWidth%, j) = POINT(PWidth% - 1, j)ă  NEXT jă  FOR i = 1 TO PWidth% - 1ă    Texture(i, 0) = POINT(i, 1)ă    Texture(i, PHeight%) = POINT(i, PHeight% - 1)ă  NEXT iăă  Texture(0, 0) = POINT(1, 1)ă  Texture(0, PHeight%) = POINT(1, PHeight% - 1)ă  Texture(PWidth%, 0) = POINT(PWidth% - 1, 1)ă  Texture(PWidth%, PHeight%) = POINT(PWidth% - 1, PHeight% - 1)ăă  FOR j = 1 TO PHeight% - 1ă    FOR i = 1 TO PWidth% - 1ă      PSET (i, j), Texture(i, j)ă    NEXT iă  NEXT jăNEXT passă'------------------------------>BEGIN MAIN LOOP<------------------------ăt# = TIMERăDOă'*********************************GET KEY*******************************ăDEF SEG = 0: K = INP(&H60): WHILE LEN(INKEY$): WENDăDEF SEG = VARSEG(ScnBuf(2))ăSELECT CASE Kă  CASE &H52 '0ă    R1 = 0: R2 = 0: R3 = 0ă    D1 = 0: D2 = 0: D3 = 0ă  CASE &H4C '5ă    D1 = 0: D2 = 0: D3 = 0ă  CASE &H1E 'Aă    MX = 0: MY = 0: MZ = 0ă  CASE &H1F 'Să    MX = 0: MY = 0: MZ = 0ă    MMX = 0: MMY = 0: MMZ = 0ă  CASE &H50 '2ă    D1 = D1 - 1ă  CASE &H48 '8ă    D1 = D1 + 1ă  CASE &H4B '4ă    D2 = D2 - 1ă  CASE &H4D '6ă    D2 = D2 + 1ă  CASE &HD '+, =ă    D3 = D3 - 1ă  CASE &HC  '_, -ă    D3 = D3 + 1ă  CASE &H17 'Iă    MY = MY + 1ă  CASE &H25 'Kă    MY = MY - 1ă  CASE &H24 'Jă    MX = MX + 1ă  CASE &H26 'Lă    MX = MX - 1ă  CASE &H2C 'Ză    MZ = MZ + 1ă  CASE &H2D 'Dă    MZ = MZ - 1ă  CASE 1 'ESCă    GOTO ShutDownă  CASE &H22 'Gă    INPUT "SAVE SCREEN as .GIF"; S$ă    IF LEFT$(UCASE$(S$), 1) = "Y" THENă      INPUT "Input Filename:", file$ă      IF RIGHT$(UCASE$(file$), 4) <> ".GIF" THEN file$ = file$ + ".GIF"ă      PUT (0, 0), ScnBuf, PSETă      MakeGif file$, 320, 200, 0, 0, 319, 199, 256, 2ă    END IFă  CASE &H39 'SPACEă    RC = -RC: GC = -GC: BC = -BCă  CASE &H2F 'Vă    RC = INT(RND * 5) - 3ă    GC = INT(RND * 5) - 3ă    BC = INT(RND * 5) - 3ăEND SELECTă'*********************************ROTATION******************************ă'keep SINes and COSines in array limitsăR1 = (R1 + D1) MOD 360: IF R1 < 0 THEN R1 = 360 + R1ăR2 = (R2 + D2) MOD 360: IF R2 < 0 THEN R2 = 360 + R2ăR3 = (R3 + D3) MOD 360: IF R3 < 0 THEN R3 = 360 + R3ă'********************************TRANSLATION****************************ăMMX = MMX + MX: MMY = MMY + MY: MMZ = MMZ + MZă'Keeps variables within limits of integersăIF MMX > 32767 THEN MMX = 32767ăIF MMY > 250 THEN MMY = 250ăIF MMZ > 120 THEN MMZ = 120ăIF MMX < -32767 THEN MMX = -32767ăIF MMY < -120 THEN MMY = -120ăIF MMZ < -327 THEN MMZ = -327ă'*******************************MOVE OBJECT*****************************ăS1& = SINTABLE(R1 + 90): C1& = SINTABLE(R1)ăS2& = SINTABLE(R2 + 90): C2& = SINTABLE(R2)ăS3& = SINTABLE(R3 + 90): C3& = SINTABLE(R3)ăFOR i = 1 TO MaxPointsă'rotate points around the Y axisă  TEMPX = (Points(i).X * C2& - Points(i).Z * S2&) \ 1024ă  TEMPZ = (Points(i).X * S2& + Points(i).Z * C2&) \ 1024ă'rotate points around the X axisă  ScnPnts(i).Z = (TEMPZ * C1& - Points(i).Y * S1&) \ 1024ă  TEMPY = (TEMPZ * S1& + Points(i).Y * C1&) \ 1024ă'rotate points around the Z axisă  ScnPnts(i).X = (TEMPX * C3& + TEMPY * S3&) \ 1024ă  ScnPnts(i).Y = (TEMPY * C3& - TEMPX * S3&) \ 1024ă'******************************CONVERT 3D TO 2D*************************ăTEMPZ = ScnPnts(i).Z + MMZ - SDăIF TEMPZ < zero THEN  'only calculate points visible by vieweră  SX(i) = D& * (ScnPnts(i).X + MMX) \ TEMPZ + DXă  SY(i) = D& * (ScnPnts(i).Y + MMY) \ TEMPZ + DYăEND IFă'*******************************SHADE POINTS****************************ăX1 = ScnPnts(i).X: Y1 = ScnPnts(i).Y: Z1 = ScnPnts(i).ZăS = (X1 * LX + Y1 * LY + Z1 * LZ) \ ScnPnts(i).Distance + 128ă  SHADE = S \ 8ă  IF SHADE < 0 THEN SHADE = 0ă  IF SHADE > 31 THEN SHADE = 31ă  ScnPnts(i).SHADE = SHADEăNEXTăFOR i = 1 TO MaxPolysă'*************************CULL NON-VISIABLE POLYGONS********************ăCoord1 = P(i).C1: Coord2 = P(i).C2ăCoord3 = P(i).C3: Coord4 = P(i).C4ăZ1 = ScnPnts(Coord1).Z: Z2 = ScnPnts(Coord2).ZăZ3 = ScnPnts(Coord3).Z: Z4 = ScnPnts(Coord4).Ză'******************FIND AVERAGE Z COORDINATE OF EACH POLYGON************ăP(i).AvgZ = (Z1 + Z2 + Z3 + Z4) \ 4ăNEXT iă'******************SORT POLGONS BY THEIR AVERAGE Z COORDINATE***********ăincrement = MaxPolys + 1ăDOăincrement = increment \ 2ăFOR index = 1 TO MaxPolys - incrementă  IF P(index).AvgZ > P(index + increment).AvgZ THENă  SWAP P(index), P(index + increment)ă    IF index > increment THENă    cutpoint = indexă    DOă    index = (index - increment): IF index < 1 THEN index = 1ă      IF P(index).AvgZ > P(index + increment).AvgZ THENă        SWAP P(index), P(index + increment)ă      ELSEă        index = cutpoint: EXIT DOă      END IFă    LOOPă    END IFă  END IFăNEXT indexăLOOP UNTIL increment <= 1ă'******************************DRAW POLYGONS****************************ă'clear screen buffer.  Use a 320 by 200 BLOADable graphic for a background.ăERASE ScnBuf: REDIM ScnBuf(32001): ScnBuf(0) = 2560: ScnBuf(1) = SRYăăFOR K = 1 TO MaxPolysăăX1 = SX(P(K).C1): Y1 = SY(P(K).C1): C1 = ScnPnts(P(K).C1).SHADEăX2 = SX(P(K).C2): Y2 = SY(P(K).C2): C2 = ScnPnts(P(K).C2).SHADEăX3 = SX(P(K).C3): Y3 = SY(P(K).C3): C3 = ScnPnts(P(K).C3).SHADEăX4 = SX(P(K).C4): Y4 = SY(P(K).C4): C4 = ScnPnts(P(K).C4).SHADEăăYMin = Y1: YMax = Y1ăIF Y2 < YMin THEN YMin = Y2ăIF Y2 > YMax THEN YMax = Y2ăIF Y3 < YMin THEN YMin = Y3ăIF Y3 > YMax THEN YMax = Y3ăIF Y4 < YMin THEN YMin = Y4ăIF Y4 > YMax THEN YMax = Y4ăăScanConvert X1, Y1, C1, X2, Y2, C2, TOPăScanConvert X2, Y2, C2, X3, Y3, C3, RIGHTăScanConvert X3, Y3, C3, X4, Y4, C4, BOTTOMăScanConvert X4, Y4, C4, X1, Y1, C1, LEFTăăTextureMap YMin, YMaxăăNEXT KăăPUT (0, 0), ScnBuf, PSET 'dump array to screen, like PCOPYăă'rotate paletteăFOR i = 1 TO 255ă  SetPal i, R(i), G(i), B(i)ă  R(i) = (R(i) + RC) MOD 63: IF R < 0 THEN R = R + 63ă  G(i) = (G(i) + BC) MOD 63: IF G < 0 THEN G = G + 63ă  B(i) = (B(i) + GC) MOD 63: IF B < 0 THEN B = B + 63ăNEXTăăF& = F& + 1ăăLOOPă'------------------------------>END MAIN LOOP<--------------------------ăShutDown:ăDEF SEGăSCREEN 0, 0, 0, 0: WIDTH 80, 25: CLSăPRINT "PCUBE.BAS by Matt Bross, 1997"ăPRINT : PRINT "Frames Per Second:"; F& / (TIMER - t#)ăPRINT : PRINT "Free space"ăPRINT " String Array   Stack"ăPRINT STRING$(21, "-")ăPRINT FRE(""); FRE(-1); FRE(-2)ăSLEEPăENDăăErrorHandler:ăRESUME NEXTăăObjectData:ăDATA 8, 6ăDATA -50,  50,  50ăDATA  50,  50,  50ăDATA  50, -50,  50ăDATA -50, -50,  50ăDATA -50,  50, -50ăDATA  50,  50, -50ăDATA  50, -50, -50ăDATA -50, -50, -50ăăDATA 4, 3, 2, 1ăDATA 5, 6, 7, 8ăDATA 3, 4, 8, 7ăDATA 1, 2, 6, 5ăDATA 5, 8, 4, 1ăDATA 2, 3, 7, 6ăăREM $STATICă'Puts a byte into the disk buffer... when the disk buffer is full it isă'dumped to disk.ăSUB BufferWrite (a) STATICăă    IF OAddress = OEndAddress THEN  'are we at the end of the buffer?ă        PUT GIFFile, , OutBuffer$   ' yup, write it out andă        OAddress = OStartAddress    '  start all overă    END IFă    POKE OAddress, a                'put byte in bufferă    OAddress = OAddress + 1         'increment positionăEND SUBăă'This routine gets one pixel from the display.ăFUNCTION GetByte STATICăă    GetByte = POINT(X, Y)           'get the "byte"ă    X = X + 1                       'increment X coordinateă    IF X > MaxX THEN                'are we too far?ă        LINE (Minx, Y)-(MaxX, Y), 0 'a pacifier for impatient usersă        X = Minx                    'go back to startă        Y = Y + 1                   'increment Y coordinateă        IF Y > MaxY THEN            'are we too far down?ă            Done = TRUE             ' yup, flag it thenă        END IFă    END IFăEND FUNCTIONăă'ă'-----------------------------------------------------------------------ă'   PDS 7.1 & QB4.5 GIF Compression Routine v1.00 By Rich Geldreich 1992ă'-----------------------------------------------------------------------ă'ă'A$          = output filenameă'ScreenX     = X resolution of screen(320, 640, etc.)ă'ScreenY     = Y resolution of screen(200, 350, 480, etc.)ă'XStart      = <-upper left hand corner of area to encodeă'YStart      = < "                                      "ă'Xend        = <-lower right hand corner of area to encodeă'Yend        = < "                                       "ă'NumColors   = # of colors on screen(2, 16, 256)ă'AdaptorType = 1 for EGA 2 for VGAă'NOTE: EGA palettes are not supported in this version of MakeGIF.ă'ăSUB MakeGif (a$, ScreenX, ScreenY, Xstart, YStart, Xend, Yend, NumColors, AdaptorType)ă    'hash table's size - must be a prime number!ă    CONST Table.Size = 7177ăă    DIM Prefix(Table.Size - 1), Suffix(Table.Size - 1), code(Table.Size - 1)ă   ă    'The shift table contains the powers of 2 needed by theă    'PutCode routine. This is done for speed. (much faster toă    'look up an integer than to perform calculations...)ă    RESTORE ShiftTableă    FOR a = 0 TO 7: READ Shift(a): NEXTă   ă    'MinX, MinY, MaxX, MaxY have the encoding windowă    Minx = Xstart: MinY = YStartă    MaxX = Xend: MaxY = Yendă   ă    'Open GIF output fileă    GIFFile = FREEFILE                  'use next free fileă    OPEN a$ FOR BINARY AS GIFFileă   ă    'Put GIF87a header at beginning of fileă    B$ = "GIF87a"ă    PUT GIFFile, , B$ă   ă    'See how many colors are in this image...ă    SELECT CASE NumColorsă        CASE 2              'monochrome imageă            BitsPixel = 1   '1 bit per pixelă            StartSize = 3   'first LZW code is 3 bitsă            StartCode = 4   'first free codeă            StartMax = 8    'maximum code in 3 bitsăă        CASE 16             '16 colors imagesă            BitsPixel = 4   '4 bits per pixelă            StartSize = 5   'first LZW code is 5 bitsă            StartCode = 16  'first free codeă            StartMax = 32   'maximum code in 5 bitsă       ă        CASE 256            '256 color imagesă            BitsPixel = 8   '8 bits per pixelă            StartSize = 9   'first LZW code is 9 bitsă            StartCode = 256 'first free codeă            StartMax = 512  'maximum code in 9 bitsă    END SELECTă    'This following routine probably isn't needed- I've neveră    'had to use the "ColorBits" variable... With the EGA, youă    'have 2 bits for Red, Green, & Blue. With VGA, you have 6 bits.ă    SELECT CASE AdaptorTypeă        CASE 1ă            ColorBits = 2               'EGAă        CASE 2ă            ColorBits = 6               'VGAă    END SELECTă    ă    PUT GIFFile, , ScreenX  'put screen's dimensionsă    PUT GIFFile, , ScreenYă    'pack colorbits and bits per pixelă    a = 128 + (ColorBits - 1) * 16 + (BitsPixel - 1)ă    PUT GIFFile, , aă    'throw a zero into the GIF fileă    a$ = CHR$(0)ă    PUT GIFFile, , a$ă    'Get the RGB palette from the screen and put it into the file...ă    SELECT CASE AdaptorTypeă    CASE 1ă        STOPă        'EGA palette routine not implemented yetă    CASE 2ă        OUT &H3C7, 0ă        FOR a = 0 TO NumColors - 1ă          'Note: a BIOS call could be used here, but then we have to useă            'the messy CALL INTERRUPT subs...ă            R = (INP(&H3C9) * 65280) \ 16128 'C=R * 4.0476190(for 0-255)ă            G = (INP(&H3C9) * 65280) \ 16128ă            B = (INP(&H3C9) * 65280) \ 16128ă            a$ = CHR$(R): PUT GIFFile, , a$ă            a$ = CHR$(G): PUT GIFFile, , a$ă            a$ = CHR$(B): PUT GIFFile, , a$ă        NEXTă    END SELECTă   ă    'write out an image descriptor...ă    a$ = ","                        '"," is image seperatoră    PUT GIFFile, , a$               'write ită    PUT GIFFile, , Minx             'write out the image's locationă    PUT GIFFile, , MinYă    ImageWidth = (MaxX - Minx + 1)  'find length & width of imageă    ImageHeight = (MaxY - MinY + 1)ă    PUT GIFFile, , ImageWidth       'store them into the fileă    PUT GIFFile, , ImageHeightă    a$ = CHR$(BitsPixel - 1)        '# bits per pixel in the imageă    PUT GIFFile, , a$ă   ă    a$ = CHR$(StartSize - 1)        'store the LZW minimum code sizeă    PUT GIFFile, , a$ă   ă    'Initialize the vars needed by PutCodeă    CurrentBit = 0: Char& = 0ă    ă    MaxCode = StartMax          'the current maximum code sizeă    CodeSize = StartSize        'the current code sizeă    ClearCode = StartCode       'ClearCode & EOF code are theă    EOFCode = StartCode + 1     '  first two entriesă    StartCode = StartCode + 2   'first free code that can be usedă    NextCode = StartCode        'the current codeă   ă  OutBuffer$ = STRING$(5000, 32)  'output buffer; for speedy disk writesă    a& = SADD(OutBuffer$)           'find address of bufferă    a& = a& - 65536 * (a& < 0)ă    Oseg = VARSEG(OutBuffer$) + (a& \ 16)   'get segment + offset >> 4ă    OAddress = a& AND 15                  'get address into segmentă    OEndAddress = OAddress + 5000         'end of disk bufferă    OStartAddress = OAddress              'current location in disk bufferă    DEF SEG = Osegăă    GOSUB ClearTree                       'clear the tree & output aă    PutCode ClearCode                     '  clear codeă   ă    X = Xstart: Y = YStart          'X & Y have the current pixelă    Prefix = GetByte                'the first pixel is a special caseă    Done = FALSE                    'True when image is completeă    ă    DO 'while there are more pixels to encodeăă        DO 'until we have a new string to put into the tableăă           IF Done THEN 'write out the last pixel, clear the disk bufferă                      'and fix up the last block so its count is correctă               ă                PutCode Prefix  'write last pixelă                PutCode EOFCode 'send EOF codeă               ă                IF CurrentBit <> 0 THENă                    PutCode 0       'flush out the last code...ă                END IFă                PutByte 0ăă                OutBuffer$ = LEFT$(OutBuffer$, OAddress - OStartAddress)ă                PUT GIFFile, , OutBuffer$ă           a$ = ";" + STRING$(8, &H1A) 'the 8 EOF chars is not standard,ă                                       'but many GIF's have them, so howă                                       'much could it hurt?ă                PUT GIFFile, , a$ă               ă            a$ = CHR$(255 - BlockLength) 'correct the last block's countă                PUT GIFFile, LastLoc&, a$ă               ă                CLOSE GIFFileă                EXIT SUBă            ELSE 'get a pixel from the screen and see if we can findă                 'the new string in the tableă                Suffix = GetByteă                GOSUB Hash        'is it there?ă             IF Found = TRUE THEN Prefix = code(index) 'yup, replace theă                                    'prefix:suffix string with whateveră                                    'code represents it in the tableă            END IFă        LOOP WHILE Found  'don't stop unless we find a new stringă        ă        PutCode Prefix    'output the prefix to the fileă       ă        Prefix(index) = Prefix  'put the new string in the tableă        Suffix(index) = Suffixă  code(index) = NextCode  'we've got to keep track if what code this is!ă       ă   Prefix = Suffix         'Prefix=the last pixel pulled from the screenă       ă        NextCode = NextCode + 1   'get ready for the next codeă        IF NextCode = MaxCode + 1 THEN  'can an output code ever exceedă                                        'the current code size?ă            'yup, increase the code sizeăă            MaxCode = MaxCode * 2ă            ă        'Note: The GIF89a spec mentions something about a deferred cleară        'code. When the clear code is deferred, codes are not enteredă        'into the hash table anymore. When the compression of the imageă        'starts to fall below a certain threshold, the clear code isă        'sent and the hash table is cleared. The overall result isă        'greater compression, because the table is cleared less often.ă        'This version of MakeGIF doesn't support this, because some GIFă        'decoders crash when they attempt to enter too many codesă        'into the string table.ăă            IF CodeSize = 12 THEN       'is the code size too big?ă                PutCode ClearCode       'yup; clear the table andă                GOSUB ClearTree         'start overă                NextCode = StartCodeă                CodeSize = StartSizeă                MaxCode = StartMaxăăă            ELSEă                CodeSize = CodeSize + 1 'just increase the code size ifă            END IF                      'it's not too high( not > 12)ă        END IFă        ă    LOOP 'while we have more pixelsăClearTree:ă    FOR a = 0 TO Table.Size - 1       'clears the hashing tableă        Prefix(a) = -1                '-1 = invalid entryă        Suffix(a) = -1ă        code(a) = -1ă    NEXTăRETURNă'this is only one of a plethora of ways to search the table foră'a match! I used a binary tree first, but I switched to hashingă'cause it's quicker(perhaps the way I implemented the tree wasn'tă'optimal... who knows!)ăHash:ă    'hash the prefix & suffix(there are also many ways to do this...)ă     '?? is there a better formula?ă    index = ((Prefix * 256&) XOR Suffix) MOD Table.Sizeă    'ă    '(Note: the table size(7177 in this case) must be a prime number, oră    'else there's a chance that the routine will hang up... hate whenă    'that happens!)ă    'ă    'Calculate an offset just in case we don't find what we want on theă    'first try...ă    IF index = 0 THEN    'can't have Table.Size-0 !ă        Offset = 1ă    ELSEă        Offset = Table.Size - indexă    END IFă    ă DO 'until we (1) find an empty entry or (2) find what we're lookin foră                                  ă       ă        IF code(index) = -1 THEN  'is this entry blank?ă            Found = FALSE         'yup- we didn't find the stringă            RETURNă        'is this entry the one we're looking for?ă        ELSEIF Prefix(index) = Prefix AND Suffix(index) = Suffix THENă            'yup, congrats you now understand hashing!!!ă    ă            Found = TRUEă            RETURNă        ELSEă            'shoot! we didn't find anything interesting, so we mustă            'retry- this is what slows hashing down. I could of usedă            'a bigger table, that would of speeded things up a littleă            'because this retrying would not happen as often...ă            index = index - Offsetă            IF index < 0 THEN   'too far down the table?ă                'wrap back the index to the end of the tableă                index = index + Table.Sizeă            END IFă        END IFă    LOOPăEND SUBăă'Puts a byte into the GIF file & also takes care of each block.ăSUB PutByte (a) STATICă    BlockLength = BlockLength - 1   'are we at the end of a block?ă    IF BlockLength <= 0 THEN        ' yup,ă        BlockLength = 255           'block length is now 255ă   LastLoc& = LOC(1) + 1 + (OAddress - OStartAddress) 'remember the pos.ă    BufferWrite 255                                    'for later fixingă    END IFă    BufferWrite a   'put a byte into the bufferăEND SUBăă'Puts an LZW variable-bit code into the output file...ăSUB PutCode (a) STATICă    Char& = Char& + a * Shift(CurrentBit) 'put the char were it belongs;ă CurrentBit = CurrentBit + CodeSize  ' shifting it to its proper placeăDO WHILE CurrentBit > 7              'do we have a least one full byte?ă   PutByte Char& AND 255             ' yup! mask it off and write it oută   Char& = Char& \ 256               'shift the bit buffer right 8 bitsă   CurrentBit = CurrentBit - 8       'now we have 8 less bitsă    LOOP 'until we don't have a full byteăEND SUBăăSUB ReadPal (c)ă  OUT &H3C7, că  PalR.R = INP(&H3C9)ă  PalR.G = INP(&H3C9)ă  PalR.B = INP(&H3C9)ăEND SUBăăSUB ScanConvert (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide)ăăIF Y1% < 0 THEN Y1% = 0ăIF Y1% > 199 THEN Y1% = 199ăIF Y2% < 0 THEN Y2% = 0ăIF Y2% > 199 THEN Y2% = 199ăăIF Y2% < Y1% THENă  ScanLeftSide X2%, Y2%, C2%, X1%, Y1%, C1%, PSideăELSEă  ScanRightSide X1%, Y1%, C1%, X2%, Y2%, C2%, PSideăEND IFăăEND SUBăăSUB ScanLeftSide (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide)ăăYDelta = (Y2% - Y1%)ăIF YDelta = 0 THEN YDelta = 1ăXadd& = (X2% - X1%) * 512& \ YDeltaăCSlope = (C2% - C1%) * 512& \ YDeltaăăSELECT CASE PSideăCASE TOPă  PX& = (PWidth% - 1) * 512&ă  PY& = 0ă  Pxadd& = -PWidth% * 512& \ YDeltaă  PYadd& = 0ăCASE RIGHTă  PX& = PWidth% * 512&ă  PY& = PHeight% * 512&ă  Pxadd& = 0ă  PYadd& = -PHeight% * 512& \ YDeltaăCASE BOTTOMă  PX& = 0ă  PY& = PHeight% * 512&ă  Pxadd& = PWidth% * 512& \ YDeltaă  PYadd& = 0ăCASE LEFTă  PX& = 0ă  PY& = 0ă  Pxadd& = 0ă  PYadd& = PHeight% * 512& \ YDeltaăEND SELECTăăX& = X1% * 512&ăCVAL& = C1% * 512&ăFOR Y% = 0 TO YDeltaă  Scan(Y1% + Y%).X1 = X&        'polygon xă  Scan(Y1% + Y%).PX1 = PX&      'picture xă  Scan(Y1% + Y%).PY1 = PY&      'picture yă  Scan(Y1% + Y%).Clr1 = CVAL&   'shadeă  X& = X& + Xadd&               'Next polygon xă  PX& = PX& + Pxadd&            'Next picture xă  PY& = PY& + PYadd&            'Next picture yă  CVAL& = CVAL& + CSlopeăNEXTăEND SUBăăSUB ScanRightSide (X1%, Y1%, C1%, X2%, Y2%, C2%, PSide)ăăYDelta = Y2% - Y1%: IF YDelta = 0 THEN YDelta = 1ăXadd& = (X2% - X1%) * 512& \ YDeltaăCSlope = (C2% - C1%) * 512& \ YDeltaăăSELECT CASE PSideăCASE TOPă  PX& = 0ă  PY& = 0ă  Pxadd& = PWidth% * 512& \ YDeltaă  PYadd& = 0ăCASE RIGHTă  PX& = PWidth% * 512&ă  PY& = 0ă  Pxadd& = 0ă  PYadd& = PHeight% * 512& \ YDeltaăCASE BOTTOMă  PX& = PWidth% * 512&ă  PY& = PHeight% * 512&ă  Pxadd& = -PWidth% * 512& \ YDeltaă  PYadd& = 0ăCASE LEFTă  PX& = 0ă  PY& = PHeight% * 512&ă  Pxadd& = 0ă  PYadd& = -PHeight% * 512& \ YDeltaăEND SELECTăăX& = X1% * 512&ăCVAL& = C1% * 512&ăFOR Y% = 0 TO YDeltaă  Scan(Y1% + Y%).X2 = X&      'polygon xă  Scan(Y1% + Y%).PX2 = PX&    'picture xă  Scan(Y1% + Y%).PY2 = PY&    'picture yă  Scan(Y1% + Y%).Clr2 = CVAL& 'shading valueă  X& = X& + Xadd&             'Next polygon xă  PX& = PX& + Pxadd&          'Next picture xă  PY& = PY& + PYadd&          'Next picture yă  CVAL& = CVAL& + CSlopeăNEXT Y%ăEND SUBăăSUB SetPal (c, R, G, B)ăOUT &H3C8, căOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăEND SUBăăSUB TextureMap (MinY%, MaxY%)ăăIF MinY% > 199 THEN EXIT SUBăIF MaxY% < 0 THEN EXIT SUBăIF MinY% < 0 THEN MinY% = 0ăIF MaxY% > 199 THEN MaxY% = 199ăăY& = MinY% * 320& + VARPTR(ScnBuf(2))ăăDEF SEG = VARSEG(ScnBuf(2))ăăFOR Y% = MinY% TO MaxY%ă ă  PolyX1% = Scan(Y%).X1 \ 512 'get left polygon xă  PX1& = Scan(Y%).PX1         'get left picture xă  PY1& = Scan(Y%).PY1         'get left picture yă  C1 = Scan(Y%).Clr1ăă  PolyX2% = Scan(Y%).X2 \ 512ă  PX2& = Scan(Y%).PX2ă  PY2& = Scan(Y%).PY2ă  C2 = Scan(Y%).Clr2ă ă  LineWidth% = PolyX2% - PolyX1%  'what is the width of this polygon lineă  IF LineWidth% <> 0 THENă    Pxadd& = (PX2& - PX1&) \ LineWidth%ă    PYadd& = (PY2& - PY1&) \ LineWidth%ă    CSlope = (C2 - C1) \ LineWidth%ă  ELSEă    Pxadd& = PX2& - PX1&ă    PYadd& = PY2& - PY1&ă    CSlope = C2 - C1ă  END IFăă  CVAL& = C1ă  FOR X% = PolyX1% TO PolyX2%ă    Col% = CVAL& \ 512ă    TX = (PX1& \ 512): IF TX < 0 THEN TX = 0ă    TY = (PY1& \ 512): IF TY < 0 THEN TY = 0ă    IF TX > PWidth% THEN TX = PWidth%ă    IF TY > PHeight% THEN TY = PHeight%ă    Tex% = Texture(TX, TY)ă    ColPlusTex% = Col% + Tex%ă    IF (ColPlusTex% AND 31) <= Col% THENă      ColPlusTex% = (Tex% \ 32) * 32 + 31ă    END IFă    ă    IF X% > 0 AND X% < 319 THEN POKE (X% + Y&), ColPlusTex%ă    PX1& = PX1& + Pxadd&ă    PY1& = PY1& + PYadd&ă    CVAL& = CVAL& + CSlopeă  NEXTăă  Y& = Y& + 320ăăNEXTăEND SUBăSteve Skrla                    FULL FEATURED PAINT PROGRAM    skrla@phoenix.net              06-03-97 (04:48)       QB, QBasic, PDS        609  40345    PICDRAW2.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PICDRAW2.ZIP",4^6:Z&=30029:?STRING$(50,177);ăU"%up()%9%%%7-%^98iGfV0p>K[#%%\D%%%.%%%%fg%tzyS[gqkfi56e]+[IJ/\OEăU"1ZTabByXQh6Frthx,tURO%Z]f]l'lSpRMx*-.6dX:ot,VBC%i7eE$E\#jcxwdxqăU"V_DxrvN^x=G82M/46ri;Yg#QHs^[-Fx;=\HasOY[G;j]cl$th3r&FGQo^qco[0băU"HUTrx7=qsTnZvfn4fOG-$'EGC08+w[,V4cL7ovJ>0[5Q%7h<,UHF,q<F.U5Xc3$ăU"Wj6=Hd[kknH\XXXsV2lKHPw-NMd<=CL]'5r=+J]?_D5/BCrpIoJUs*du0N^]^nEăU"s^w>ileenW,X\-da]7H_Xg)HHsXjd&UM]8:#qNEesdfE8iR:YV&\M;u5i=(?gVKăU"\=4j6Z>nva;Y2[?]\:7XxE#+A,OW?kvbm$i)n43>rg/a]p7Mb_c/g.?VLHnvq_6ăU"xjg5$EDq2psVv<;h2/1Gn:g#Vp\o_VA$a3rV<^%G1=M;L1eg0mv.<0j5uPm_BKRăU"$umhh=0d)2QAj9=jnBmH$f5FpQ[e3N[L=F,]*qNYKeeWU=aX%3gmeWxB6EP88*:ăU"(9pk<vI/,d+&/t\u-92$Yae_dT]>3E'zEluW8$un$#nu$8xc13\[4(sxm*t<5jOăU".>:LsRGw?(]UV_YH0C*>scN$8d#X#S,JutGgngW=[O/Qs<4hxY$fGbO+SY%J8),ăU"?H659eP*&xUgS#D4O0vveWm<$[1UJ$lkG?hG1rr.U:$uQ8=(j-KiG8^Rm2bBV\=ăU"]G.pFQ7j$=isA6_P>Fj08?bO>t6?MRWoMI1[p^mu5c08kkryJ9]O7KK*sArbd9NăU"j+Kj9'd).V7^ZahU&#7E-19^u.</UD)HxIF$mA0x$/F93IE:bPZ-..v96%?B8;:ăU"W*),BM[iV$T-(\T>KOsUn(?&[aJ&['hU$_gI8(7Le'ouw(_vkxJo)nxo)d];O>#ăU"fCIY'aTi2:(WKrE]MpB[^iUM_LC:8p)]a=tqSn*9X)w]]nXZ>\9[0%8<EBAPCZ'ăU"$UVbS*l'9PmSBpqejZKHp9PKcn]pNh#l&U]e&3&AQrDCz_/rj9Iw5C_n/YKNJ_;ăU"6QrK^Y%o>JK?Zu4qdpm)kp&XDfefm1AT;fnmMWF'NOs5dM*D-ac?DW#FqW]-B>AăU"ljmQo1h)dc/C'6u']6ONU70;o-^$UJZoq)r#D21<k25_>g7]330g[Ez4u*cv8NQăU"#k<IMPU<IEv1%3F4\A9$_<O/9A#D*0lG3e*B?749e=57?gBq_oegOj7us:_/wd3ăU"Ih'#eRL.$%BSiMvT.y*a\)>a7K[kLH*&l7.?W<P\q*VHvJrVle]S]r%nZRW[2/JăU"?L[[sf^V28an87\%.J[ECzCJG+Ph,&9gF?%%niLq(C\q?=D*1Rw4:6eIve$i_#=ăU"-H;JoES>H)SMc6-vvBHF*ePE+?_J.EUG6Q%V+K0/v/U[nPF;d(5S\a#I5s;-UcOăU"p<l^?Y^[%=L7K&S1%o%[v$>Pv4og]rBZ4t\86<i$=f?n/Sp5#JoM21(j0oNC-*jăU"z0XKo[hiE5:H>eeG*+Iw8&4/<ZDUaQVy.h8<X&ZLXW8HK'>5#HhvsY(.9;G\Ny%ăU"frw4q+\m?;XAply_ky6x??v-MnQYlIqC8l0;2uN1SPD+4>9d+?)<;]0)Y7l1GViăU"hIaJth&G]^5?i?dRL8fma,EJ&U2V2n:oVxt'e5uC9^2z#'As>cIFs_gcI9=jAK_ăU"d[>BB?irhIRn8NhJvArkaaxYB>Iz)WAc$sE>ozfU_..gLr*Hf&EzzT4RBHOnZyBăU"Hlpd3BG,n\2]c1HkAQsH%.WTXp.l'r<(l]#m52-9[;'rX$iezc#*i%7O'.X]N$+ăU">7+1qb6Ws#sU:AeJ*MMdF27PY-u(A%t0CCObf3G<613t'c'9o:L)j=jpnB.OyktăU"PHXXCa=_3S1\];VatnwY>xU$8L]m_1qxv2)Wd2K=CCUyC#bc<NG]i<2*oBpGCstăU"PyP8e5G<Ki>>VK9bx%8.V][B-Qxr9](T+B(3o2SBQ2qe<bqIy=5vkt0YSB3n;&QăU"#ijv(OXkHhbTuCeJf2qW.TBp_bBx9t&9Yk'T$=Bh:)h?#jvHB_W77pGKjvi9;Z.ăU"j)Qto/Mw#mu2$.GD(LGtSJjMA\Pxi(kcF8=,2eTbsHJBtP?H2.w$_h?u4%<w9$lăU"aWQtKqX88n]Gc9Ec0A#xKOg?7/Jw(?iSJIvczyR^SchopZ&bga[Ti/=FIWn,6N&ăU"I#F>Geq.iI/\:xkm\PnDMlx[yRf4WDk)1)3#w2XC&?XtH8;Gm*YnA=jI.o+\-LUăU"efEHROlW%lIl6lq;:PdLn^NR?*wA8g%P8bc9l&2(+=Szj<;75HZ1+OBG)FX8x=qăU";D:1J#GGm7)V.Fh)YS-axenS[<g17F?,1m:0z%nZl;H=].eH^>u><mEPbCm[,6băU"/&yleI,M7H,CDh6AO=difO_[Xn#pP;gQg'5y'YZq3%xZT9\z$-]CG;^Jeko,k,)ăU"#aG;rXuErx3E1<M[3UR;c'0-dCaI)LilsU+R(2L3=?;:Y[m?Y?vOP)PgH-<*GwMăU"FWjw:($%oY?,jru#uDZ%;0PVwE9W.W,p]zh/+VzgU9ycQ%?/w1QS/\8X-w-%tN2ăU"LNN3YZs&h1p$L^\Q^Ux337%[X\.;lIJh^6d^w8mM%KKgllXMu$Z#qa,CEBMIj+uăU"b3t\sV>+)2G=rI/rNx)rE%R^S?hsxA=pAC(8/Db_*lC=>>J03oEO_)KwVk=h>4lăU"9%pXvx2BdvU2$d7]IxWr2V$1:Lq&7O<E[sU>^OuvW$$BrcCJ<#k_EWxUZ-bkH;văU"z^?i_?$_TbuJ4L?yHEdf7f,MtVW&MGccsb'n/;BWTQV8B>Uat&<-IY99$%Sg&J9ăU"ZVv:gXb?ef)C'7GIq=bKgC0=%E/(nLPqus0NAc6?OZj':Y7tF]qNY2.2#WwJ<%WăU"3oOJNag;xu%SEi,0$p2\e1gI0mT%.PxUabHFnpzc$?2\GqNpI4C)BXQRbjU&F5hăU"xB$*Ma4,;-cWr5KIc9rlK)i]DMmm-o]Chm*qjqpCM7nC:rJSwNT\E7OqULMt-].ăU"jT8D,9TfWaGs[6c.nxyD$MuOF]:L/lW.Z*KAYrZ$'Rr7jX7;kePc6oN_Q*iW$1măU"dXGk_3d-$'cAlgF]j3VbrmkSijpyCGZ/b(CeJW4SJHbDVyJ<?^?-v#-Byb;]=6xăU"BS^TQYu:p,kuTT.78i4Jjfp2RVTC?#Bbo^bM(e,,i?20tJI?cvoVmEQWK#I8HTtăU"eDXMkReWX]R5N3.?EU18lgW)9gfG7*v,TOh&HDbT%>aQ.F/&$ta\.AX\jlm.%x+ăU"nE6;&HGPfJY]jdm=kBC%WDTD<Wj+TF?\,j7e3CuH4+7pu?L3''-:<JA;vH(o^0aăU"l*;&q[3InDq(W,ya*d7Df28*(eL>[Q_A+;XTHl8/dO?Bw%ZRCDTfGJ<YW;DBg<OăU"#Y8.Q^<X&-:_H8#R8?E,tB0B,-Y>MAdBy0Sud]o#.7D1*dfw=OR-zbRY.9()f+KăU",\lt,3_fHHDmXU>I)#$Tjbe7$G8VJ'3HpJ_#z.t8%vZNT6tB:NfTK2,5-3EqTCaăU"daW7U0+L4uzAp=t5c*EO$.$oCS,U[y_t\Om]:L2*uI<O20-3$?CK''xQz5h$X=JăU"8od];uMMXJkG51qa[.<P$&'j;dBaof='.?b3N]$[3l,7RZR$pN.Li9uXFq3hidHăU"R[5]ubHKJJb;XRtT2+3qtaYuP>T?FbWg,1bi^UaG=#hyQ+k&iT#U(hW+Vz]\%XXăU"+KdIvOewBh&dED$/NO*?%;YK^XZr>D\DM>5l3wSqlE_4H_k5iO1a*0'_PJMp4%jăU"3S/LX]2I3'Ve&,;0?_%u]NzKLiB$t)DC]?SR0piqUekKZPk]n2E;P-Z$O#f?)'făU"(zS8;\?UFk^#%#kEWIi0uuqpTpC1xr2&22V'lg'HY7ZKcq9,YioK+eO_A0h1^6_ăU"VpCCl>6$Psx+h#1OUqQtei*pP-15N266e*MOw$&Vv*ti7J$t<D\O_D_r7SoeF7uăU"pc0Hp/I5J9jCB,AzIQ$LHD*Pni%+h\$TpViV5tF'[nEv;\H4f(GD0R();5>g[)8ăU"0Ss.S/dGNoi7DN7LOWrn/t5';PhwLz+km$dI_4\I+E]]<qh3_DLx>^5uYFdGd^QăU"m2vAC]'/2+r'PM9tiB(p&*7BNs;Y/E,A;&30&Mv'\*h?j;um[r%CL(NeTOatHB\ăU"u<6:<O,ka0upJV2+iZeAFuVUkP5eEl(;_;B=Sesr,3BQ^_nVZQa:Og?TYd;E)0/ăU"dylq2AeZo:9Xep\Fwi?C1k4R_cFfmD,No5dZ<pb\bSAOqW/c<VOBNS\1VX4DgvjăU"_#$<:tMP>\F(C]*c]',[MVBj+(\5uQJ%'u0edlg%QF5TrMac[dfB0H.P)?T.gKRăU"QuiAHvq?O=<$N_:.b5d-Di,uZK5b6#k5cInm4Amgt$#q7ZhJGfga7AS3_kJFTC^ăU"k>*vjhc$+PPXXy.W4VaMN7Aj0$aVJnlToaf<HBS1Uzkn4lLN6_3V>a?>V6%SWA:ăU"s3UDUD#D&zQc(vCVdS$2wJJiTqwC1hsE<TV^cr3kWv7SKR<XS7&.Q<fc3Wj_?zPăU"EGb]H,/3R[yn'UAd&\(sHq($7r9ju8L%nm#fP$zJ7S5e<1-:tdcPEqRfNL==ccFăU"00mt7T:;N[lBLJ,;Q1pWR0<zzsC>kTEPySzOoa^U.>AT0K^:V_V[Or[4Yl5R,p5ăU",mpN:k\9a#W<*9Ei,9*$Ic43kr)=X#0kA+TbpdMlc5&tcBYo;HFx.ODXFK'X2nNăU";Eb_=YaR3RJKaj0*aq#\Xco](kfE^'1U25Pc>dG*H.DABXCJ\YX]vcu$(#.g1J#ăU"on-[C[9qy/7cJA^(l#4KO>u;\kUa1[Z4bH6d^t#rukK1n=)P)5TrYrlpYk3h6T>ăU"Ju3HoVZXTUcJH7NnMEMV5.Cw9x-tDUTf/8)E]csnz<[B,48^dfQdg(QAY:enUYUăU"-tj,lv-,g3cW=,8J$8Bc-ue\jf1IMhm$j5SGUsnYvLclm,\g\M-u#qu\]vN1^P5ăU"pIb-7cc_U:6t^VFVN=5l;\J1fCd\n,rAKn$OOiA*I5*^,WQw6+ZWp,oJ8T#7<LyăU"2[7bYJOz6/\vx)HJtCbrbE8dY^D3tX<N#N#WT-3vPMD;DkF>un1FQ4dS.Cd<*+,ăU"dS]$:Y1Q,f%MddBj6Kkw,4t'w?K^8NH'JqhM/XD_V?M*;AZ7Xr3rus?H4O#6vF9ăU"u$8.A6'f5ac$tmnp^]To\h3TU&=/u]TrD?)<Myciif9a+5*ILZ_35=XTUf?BTayăU">bE8/)//FX+&%1&v=N0.r8$(+;S.;D.-_vJS0Zuk&$w;a-9q6JW'i%rJS$HbuN$ăU"#zYurZ+0P;+WbD1vd,g3lA43k=GnqvGe(?DP)*$I7P5>eP<=7t2GYER7<<qYr^AăU"Z9J+VWZ82tjzmk6q1t'bUk-E<eaTV]FMU_f-Up4YVZ=lJT3Bp2dCDs#fRjq<)%KăU"XaO[i?ic#ZKW7gK\G4$BFn?Vnwq3X5vi>^P^+<H#eDfV+XZ/EW?jC;b4t_^v;WdăU"VxOc1&yN:,k%EW3wQNsPPGV]\#7gJ<9M;Rg[8P-4xrejc2^$J,L5PnqKqXQL2%\ăU"f1##gDeEvH)V;aFSmvKu6?eP-bUQ]r#JRyWMY50JXt2B&UF4tKC#(dA8gZXlgLMăU"J(7fva=K2L-\ntN/9;>FprxqF\-AL6HoFo=0Nh>_,e9P#a8E1kEIJFB6KF0J&aIăU"s\NNq,%OeIn]<X1l^AL)JbN0<j$G5eqOTD+-MG>I+<Y*E4#,15Jn#]kC&5;8U:OăU"k#1%mLRcj2n]UzrCyuhDJKM5UH]KvnF,D>$,EM.=\l:VxECN<2Nrh-Z*wdYkO9kăU"qjXXU;>g0YHP(?u(Y'mPvVLKY<W#RiaD+YWIgAuVzr06pCZfaGs7x*[HNPVJcpiăU"sTv'&$[DsTBkB2xcRiz3N=1HlRi2lnjY<3Ky1QEjLJH$nc4<jtl;?'<]^<h\NH/ăU"1>F./*';COK7,HJ&v4?AY..m=Y=SO][nJ>]R(x0#W'C=&:jxb.^:UBY1c%&oHcQăU"uewI9Xr,V2\D'\n,U8705?Rfxcl=c%RpSnB.$TWp5e2LVZPOs&Gw:>Ze&;+\NEFăU"DJZRV/$)=z^$R)_Hh=sGv^OXw_>2_Yii]:[2u?R/M,fuguDl<kkAl-hq7;+mb#GăU"Cj#LS-o=Ct<:Utok)8qUgmYS=WKG#F>m/,gAEFD.fZ4fbA1I,MsOLH&jGcFnAr]ăU"<b<tGd\:KDBoP]j=7GuN..07]b((I6l%h1(K5.=Hcnu.Ym6tB%hSL-vn3ApwX4SăU"'3;-ka;uS34is/.mAlg#,Z$EYYC.Dw1t>8,D-dg'sR1l'3iX3498r:v+FeW&v4IăU"&Ulb\Ftuu1Mz[\]h/1KxAijmq)s,[=lxiX0CaGX3),emPDzvA''2]*mK,9TGcbgăU"5_VUKK*^,E.(D,pm',U>T^+J<uGBlJ7suvY3uicyQE'9jec:w'Z+,geY?NKsU+4ăU"ql/$F=WHBLU\Wc/YsF8bhvW]X]h/OkCCE-YWN<'t81I3/iQ8;P/FW*Wt-<h3B'măU"(Lk4D(fG[x\tZs+TA8=aU*Yyw3.bri1a-j0X.1#e:DT6V:164e+f)+QTJK>3c+GăU"wsH%^Q^vjnP?X-Q+Or[7GDD<cT7K5J'Riu0jjG-gn(p46v4jL#up:$cIgg(-xl(ăU"l)wzv)]%&l9'311Dd(oU.iG,W&vGtVhRK:1S[da0$CocGg0s\c2jgscidCnMif-ăU"iRf2^,cJ-enZr7hG,rG5V>b_<$Gg0f^vD#Ta:8L1MbWP^u%$e\tA:5Sb=UE:>FsăU"nD^-u<HVnH+Lk,R?B^W=BTpu#6+h-<*4WsfZ)vT3lQ&B]]^X(^ZAQl4NF<rk^3RăU"gsoX-;=63xg3nA<)'[Kw%3w>3'q?m*QpGt[RZ(tvh:\OYwZhP<n:tD(g<VJXv=iăU"rRZtql4,TZS7x/L]5lgyEFj_t=&gj4%YX3[jT3Qhup,Blq[]<TJj_Q?l,G5WssoăU"cv+I4flPfeP+fH(^dzl4pL-MOQE^<M>k?V6ad;sUWj:nc=C#pNW&.SfhqgFb5]$ăU"RN0CuX<\A4^8.LTq/G4'$u,Fbjb<]&frac>D[=iWM<ll&fegb+&h2EerhQG&:*CăU"xam&IH7#:G]U%crwqPO,H(NjdB$3m>2V1Shy:,T\UnR#P?vABkC&FB>BmKd?d<căU"alXnFN1vd]]s4e64uepFWKmKFHE+_JXs4=D+RDs?VKeNh25bDGtPl^F=+$ru4G3ăU"0^kaSepoN'Euf]rudsQ$m#In5D]Boe;t<O34k^?M6TI-0L;K8rGgX8DZWSl$]K2ăU"FB(9aGdM9F530K;>VkCB93p4\Zf26?/,a/#UsUD[hhATfL?3,6a)VCW#\7H/:*7ăU"ifN7eBOI6.;k/0vw9dwS47A7\tpG8iQ8kBFYLlo-pNHF1::[3\VXg?ly#:<#KCfăU"<;kJOP/4#c7f[2:6V*uP*DPGYwcOCs\v<+RXSe0JI>e1Q,U6fZiFXa9UCpLpiuHăU"NZO9n4VL4hykRa5E;e&7d^>FLG6AFcSlNi=/o#(q$X,\/HI,_([-0]qcULEU&ITăU"hlNRY\n\1_>=L5(8ulDR[Fy+QggaFGvw&8/f9r),b?&+Xw*o8vPP&8(sukd((z%ăU"4CLg2P1AHnOfBNsZK_BJC('IHayBw-aLJfpS-TZ9(c)C-NKd?3+T^:CKfo-D'tHăU"]E]_c$'2>\A45E0KTJaax=_zk:u^bNL0n=Tj.GD#ukOFRy$$riTV<dKYC#=ExB+ăU"y*wZb>l*R/inBx/lyFPJz(AEFwVY3]RFLlLH?;&<gJJ=GB,aj,<7jlM3P>#&Cg/ăU"y00TZ7d4$5*5-n9%u%cPmF_r_RUe&c*Z5k:/NL_g^CAoC/Nka4W7yOd5A]p&]APăU"iga>h,cv[BzTN)MBVEkn43\U,E\OmBq4w+*BTDbjoE8WA>?:o3xW=55A8j-\'4-ăU"NVU<BcbDVFA9EEd0+rasu)_(rV<J^ViC5U$[B8x/o^D44SAh/VHvG%FsUVw)Rr[ăU"^,3p3F5UNZ*3s_^>A?ZO)PjKs0g.PnAL>;?u9d&PPapF6%a>ilv;,>rN6]E=wuuăU"Ad<8i[3m[&seC]UV?-fO,NfDPEN^<;o>n'Euj<jNw%0<6RnO,FRsy$Gf]U\oKHvăU";,DL43g4?4';*d667%W3[63QrhuK\1V-TT3=jUKgtC8z]HN.,yqkXhx$C&XMfq%ăU"f/KF8aIJl_'wQ,0j[&n>L9QYv0[_szr6RO3Afgeiaf&A&p>.McJr#prnF0HRU%\ăU"oErU,+C/\D#B#G/&];a*o938eO\vX^G8foS*+u;j8*\\qI&fEq,8GAAK-MHgoheăU"iSPr(kD;A?_:\8v76Jt^/[Z3(l8^_.ap?lRM:2(^SmD'Ypep&xR$210BW-gIH0^ăU"i+nlWA&+SRu,FhpSu#_5s'dRbVq+it/S$n&V_B'cI5a6;8:3I&vc4'doxSUJngJăU"%ff([$O=24^7a:r]+3Uc:1m>[FQsAE/rS)NPXrgLxLwLdPimS<P'A4Oi]Vdtu&văU"%Aa1B_%e3_7rjd(:is:3v;ruRng^?gr-plXe(mdETi6(1':+?ft2s-cEGRc(,/#ăU"dHoKe42A/UTt%ol.MwGHJzs.;lAnTUrkF40A6N(Z_zyn\k.C,jRitKLMIu6Gr_#ăU"RKrWfkF:AvI-J-S)tH'nh>poG7=M**iM0iBuDaKGivV'nK**]spB#]w+2?#/uN1ăU"^jzQ&p&XzC>A7/(dhC6#])BpmM88S'*:w*/D+XUtg0/h/5EKBOJDk&fKCh3PH7SăU".eM1fZ-E6iLE3YAJ\QLY1n<G9tJxjWjc_1(peqb9Y\_H6O8tFRrf[_EhmNE2rc+ăU"Q3(iv2I036gJAs1fo,UpHfhl6YVL[[M32HRnJltY#o1]7#dSSAQf%BRHhD6fT+HăU"qrslOA.<H8NdLwSFN8#.O5<>3sx/BBj)H.6N*v0NUcY=Q0M3/)e\QW&FrRL?JfnăU"aOsfmd5QP\\C.-AB,qD%P%1Ve%?dA?nRi=CVohdK_D)uSZ]7ZtFvcC]jn:S6rv%ăU"dEHx0mn$',8R'wT,R(vK-k7djsV:lZ+Mn%DB^8Hn6dsPd^^Kct-Lf^,1/-P+s>+ăU"yRb.h<3Hm4qc6Hl7Ze(E#5CP,3uT9(g3#bx?aCe.FC)QC$TJ8Y=<^KKc.e$>ZFtăU"DzCemD8'j\n$Z3mll9?pp2o+ckmIP2^7unRQk/)RE%:VX9IKVM$lDZWA,R(]V=kăU"H<h[OUO_vn.0i4Qbc]z8inVUGXcaqejCOfsb<Rph64t#lM;e55qM$iQu;/Wo60uăU"T4XnasAiX;t#T<RV#cTb,80]LQSl_[DdVeMm&9\:8H%4A6c?E^/_rI&k5B3B3ukăU"J4hX?AT5&pKB)U9^<gkie_,1iTszKG,+H=3e8M^b<ntoM1K]>iL^?QjbC6jJ_B$ăU"Z0oY+D*V-CQGy.'i911fG&f->4ReRA4Ek.&fWHrG%J,lRDBMx&12\QkS0&Ba6rRăU"&kK<UVR9Iz94Mad3/&VK>HLU><LJ&H1%Whl-yTEa<ne2&A&aNF_[ESZd4r[Y[4văU"V4j)F-0NhqKSIbAA*DZ]7a2$iHAC\uT$$crpBvLb;)y)b/+'6$^[&h\<He#iJf#ăU"Derg9]#Nm=Iug[tQ,qAw+sqd>40is,<n_DIA6T/pwe5=dH#-*Df%mH+%[W1(?5UăU"O8ZR]kK]05),nrBRt8^CR2mp_Tsr=IyZ#aSczUeR%TcwW3[ui-wF#wT-##ujc3%ăU"'GZL,HjB'4SH9FQnfO1Gpsw8#(W>gUa+$ry&o)>G\s.5-Lqty9;fbJl\\v=^dG1ăU"4D_Zo>,ChbO$MtL*&C_t9d?Z4s1L1Q_nnqEL/MlDWG9K05f;3jR#4T(x4>8B_;jăU"scchlblIq3FdA)]Kk:>O?S8&A0[I)kXd?+m57M[c&Qox.fr*EqChyOOOLIgt8$/ăU"91(]nEhb7SF->y-'wY(^fc9.phwm]?#bQwqsnKrbR=i0(C#pda0ou1S)D/Iw0roăU"ty.&Qk2SkOg4s/<'x3+VJ8C$W(FiJLx'(n93k4*RenjmCCj\()U]s2dRjdj5Z)năU"b5a#;d>+i%7]ADs-=0Iu.mYduD#=W^Sh+dhh_$9Zb>WaM)ui\YgbOsM=l02>kc4ăU"v+tQ&,/gK^.b4H<#7g>3$CPe^imFi[s6_^60p>;._tHFI&4iNp_WFTvy0/OlIqzăU"jC<:eKRlI-S4fP4NkWKuM=]zx1=U4A2tu&bpmtl>1Y3ObIPG9#.6Rq>J>/GmdQ1ăU"vc>rGtQcBcP*]-?q(-6g*n2wf=4oETVG0uK<eZYcDFDH%:(T_-8;U21H,PY]oH+ăU"O$>c,6JJ8kXCk=Q>a8oZ8Rh>QG04PcB5MEA[YT[a,<5G9VrHNKW]dyTi,rd4yo2ăU"c:CZ=IC_I.4k<=4OD$w2<:iV[F7w5KLa#TiO<JJpu4\_A]1=V;+T$t=>rRZBAk*ăU".dkIce7YTgSVE1jE84Oe6iCA4T&hm:xP632La*:,-NJOfK$+3SM#Fh4JO'MeC]UăU"fwJmsh4(ip]r5^#a0om]p:;iwOY>h[dG*BIB/:PcX[:q>lGp&s)+?5,[q9mT(1RăU"S?8j&iotb4o)jaFsl_B6Dc6<kUD?=H^cpLMg:m'+BH>snK<[h_9vD[g#TLN/V51ăU"b7b<'_mCKbV<s1X(Y^aMg<VZ2=n=<bVj.1L0QU;l(QWL3eMG4F$bI'MfBRCo#5'ăU"TPze#TLx_ipWQ>ShN*a#G<B=t$[xzI.'Ju1I+n(XIt[=.5uaXuvZToV*7X%xt-lăU"%6%ei?P-[[gTto&cx>SMlqTM=9iqSmK#u%/bG9ujp]O3WZZ>u]lm*'S0\2Y>hk<ăU"uwYl5V:=:6:By\V&3:WWOz_fb\1[f8c^nWCglNqG<3uTn=\RZydmZ>*NlI>yZLlăU"oEJGT&urgB6brh_CU?)lr2I=Sz][1MReuWh0hfw[&<G'fELMf_l9IA91Ht/,cS$ăU"-Rl]IKgp^VYRqDM1EV._yZHb0Qf^h&c3Q?52^_G:D%7(tWMXQ<hnvZp5H:s5h#EăU"YaGY41RX0fFH\'^KY]G,^skQ4[^m>eWYZKL9OxWf2KpGF:qs_stM3aB]VKy2<_.ăU"P:f$af[Dk-$lbuQP3PO,D=DR[2nzGN]$?X7?quqHx0:+CVR\'gW(w:b+*xt#$E-ăU"$H.6ZuV)6_;).$Tqkd$R#J=Ffp>ADubt1Y0<REmw-/v:dQ;k-4FL[b9)i5]QQ0LăU"</L(/xRI-)^L)U3\ann'qDXVq?.it:.ubB[ejijI52u>O:LS;:ea>L8Wdf4z>b5ăU"Ln%aeYLJ[SdT+1f2M^a$\GBG?NDku\<#ItaerUZOcRc&<L2+haC_P,1x;tbif$NăU"X>\pchl0Zj_7?F]AbHjQWK3(sPY-LtsrMQc_^w;r0ZB?VzkrrafEmJU<HHukK7yăU"DbZo2sj0c1ZTBXs.L=?rPZuk.#JDD<JF]f>WQ-FyhSJWRVHK(+qj.\)?=5%9j#:ăU"lafW:u8nH8*=2eA%270*gD5oY2tQxtJPJ=ef2]_vU&EPfF,f;Af=Rgck,1mGA<>ăU"BFm#Q;t/CCnGrshKLiq1HfrCI4VcN,]e9XMK3Vmf&Ie8tKWKUG_WK:VQ.>3XmzdăU"6zF[-G/FR8L<tB*3Zy^]iZA/QtqsG9m4koG_)vvciPsN.K5#Jb=vP-$<:scHtuVăU"*WSZsI5oI^ReY*-aF,15w(-WKeRQ(kH_(2)[08)gH8Rgx_(5,:#$Li6)UbyWx2xăU"tpkTM(n)?p^^WuS*Tg(QZ&X;(/2I<l\Y</csYdeH*.u2S+DTgHOvg\YAH>4BurYăU";H3HaSh>EWN'3L+.f:X<:My'9ME=:wjpEJU>ns1F39v(>WW*B,JM9t,ZMgEfiZkăU"=.(E/piV;3O6U7CeEhZkTTVHzN2lg/VA4rN,*%;*=L4zRv\pV>9.(&T6*I/H',EăU"6#b9P=93Z<8hotDB.fCA_U=kDBZ9i.j&RPY0#:AEg#YK+d*yz>L)f1hwORPH,mEăU"ZC/$;e4HNKOQ0;#B=A/]N+lO%i.XCd1jA\1e,$CMobgkuKR>^_CG_5C3n*iYSOjăU"b[+XIkx%3pH3oc2mRi)B.9>uTmTj4#1xBDA18agu/ApIB]y><j%4Rc,%'6UAK((ăU"1y[30EDWV#t%M+F75J;t%GRWD)$-Pk?rCh:XPls*'5*3?r5(]#ZVI>?*+Kw1nOWăU"C%kZM(K2X;MC7ijfxP*mr.hz(a)KX:oj6e-hQmuL,X-gt;?8GDay6G,84;Sn'$%ăU"p-W:I^Ys5KP8G+<R=,uRUV:6t2_B$PEk>)2F8jLr*Y+PFCTg]CGZ7[IgCXfE%\năU"-Bnt(',F<8we'I=L(l#Ko,^5RdFjrzhN7j0]dgcrC3BLCxmKpY)4eGP#<O<H7/;ăU"^sq[l?US,>j;(qj:McMcP.^*=f):Gw^vF.7o#PYVpeX4s_7aU(H9_=?IQpeAVS[ăU"-1W&zf.fy^M+FLv-H&urq=efkT)yRxB63Kzm$EQvCrA(8Q4]FD#x8D658vwd\stăU"cag$wl%Tdf3ICk%QdF<uefmm'-FF3B)K-IaeBE;]By;RWaf<_C0&aV/Rmm+.x'&ăU"LUL]mI5E/8zSu#'aaIy_X2BK?H+Bo.'D#Rdri4Qb)cq8,Y#]o&S%nUofKKR&xi:ăU",MK+auucmwes%345Jlc_/i8iE_T/BekklP^rXsr9E]cLhs]'C$Y5'EDH?KK=aVeăU"Jj<_M-an$4B?4pqfHoN*IY>Z+Tq2oY>FbqA4(lO#qB^*w8UrGaMU\ZHBDCegDT0ăEND SUBăSUB V2ăU"\t,',_cD'gpJQKPioSk-](-w:^/&zOcN'RkO$*&k6ct?z.cmjnXAbv7kbWcK]0;ăU"1?LYo=ojGdX^$M99msM1c8lY$no+##%>.89sENFeI7BuGTT8Cp4PhgGI'OSS<aUăU"JJLh$4cH1r3fcV$gFNV864c7N^JO\$c1Qc4<XOgqEdU#PJ+yEKrXJY)xbXWk;r8ăU"HKSHS[AVEuIaiV<^UK2v0/L9>+RJb2ra4]->>OPVx,MX2kLQ6R(#ou,ETs#Y:a\ăU"vs*PXC(F.L]MzNvaMOSSWp6ogn5<?c+[Um^>H]?o-O?B96hE9Nmh%mmk1<P_[)BăU"uW8S*0n*QN5oDas8HwS3hcgpCYr9:0^aksfi\?tmjAqzu(M^fS[b=SKb\CuQ&GZăU"bLEPov,&zrWJC#Dbz-kSaSYFE,P\k[<\2$E;84bM&xX;HVL-o%4gWe^q2KvcCW/ăU"HDvPZ*vB1#]s41ksL1=Qnr<crJVwWg)NvH6bJ[a$JKiH0nBye$h5)8uA(XK(HdLăU"vo0<f.+DOTDW^%3F3#bEXX>Mwsgws/00+Vz:BC16kjJm:xDKl\&S%&4rRPDHP]DăU"a;N)'#A5#[,qd]gF5'i#+lnstNJ)TPb?Fb?xia<rBn_$73<Neu^jHJirD$i6[>FăU"C8h7aYv>,H:?FbnNjk</'muIZle]FfGHQS>Gz\AD$/ouh844L[^d;Ca(8'RMf)5ăU"6Z>U8tBgU-=SsxjJebp=&xURJFVX]f'a^RN5gWFrUet9N5g)lO<X'9p,+YBnqA0ăU"tAjvE41>/HB^w67JM2;L:TYMkdx-^;kOCjaf#kV;Faqo,w3ffR4fng0ahC$2+.năU"b$QQBfkm61;Gu8<V%\tTE5<X+d0Uk/BrF^cY>LdveObG3I\044pO\^omlX(Em54ăU"Cylu+,8ns3oalcjwK31*3JTQo0^O\R:D$-$$Pp28IXtBWCd'p$khUlhoFYODVD6ăU"6t$v$0<zw83iha?gnVlLX0Y4&6K9Z$tHQREpvHww/K7l2pFJ)HmD$2_'vn%I&YiăU"cgq+g(%UC_,sOF%DEt.^8PCbVoV5rct*h5*FicMtq1H%a*:$kWA$S50YNp;=lonăU"P]J2.Rv>4SpB]VgM=kAmW&[ktER5(ExC\TTq5Vs2el]BQ2EC0tVHhY73VsvVZ\&ăU"'IH4LN&vZOa=C3q04PFcLU8o>3i(S^FfQwLAJ?czZg]m$KF-q>.twr;j]$AO-91ăU"Mkbkhr9SF>>0KYA$gl07Ay8aE5e[dnRA='&o6E$JwW?Q=<&K/Vt14)\S+27;9GIăU"XX6\ljf&8T2D[u.#M+et4\VX]:u*V;LOF38rNMtMe-G;1*h-L,SUhR-3d<L2\ikăU"(QQv&Nwq=atmIb$byd[N\Hev<QM3'K*3MDgH:9;vt9rfX&aP#rXTYwmgG=.mmN\ăU"LJ<NUo,%bD\N\6sr4KCO.wc<_B5ceJerj;a>cxrjYU[HlfdKN_OI&=EqXFl/;+4ăU"kG7v;+cY2gr***Xdik*MD,f9i5;WT^_*;=GDS'jnc^&M<2d?Zl4S%ck0?bD07uwăU"M]luMFjoJkR+-\UO'0L[>)Pf\K)M19](y_QXN3H%UVTNbZ_ESMsGyKiXbD1i8X?ăU"if0PQo0^s;#_*#d2kQfOi;lc<%oz*d/p]#J.=*(1LW3kPn&u3\&c&:gXfZArS6KăU"_y4dA,,moUqv+xxwy;IW:wBH0&t/e&fl[vPfbdYqGqtdHm,TD;&s:CQk;T^Ki*+ăU"'hes1*pLW('pw]+]3(*W]7xt,O_vnX#+vl><7M$&^D3*1*wjv?r>OjB'u6rS$RrăU"GiUcbUt;f]7eWuu=<CZvRsP<wGJ#CDo:3]+_uVXu=P+wd4MKA0YMCBF2=vph+]]ăU"T3/0huTDo.XGpS)glTc2EfFp0)67UB[DGDIB8tC>K5cu6f5g8^Ab,C\RbZiC<_BăU"G*M+pJMKO_+O8&:fP2VQ.(QW8[,3D>qH[>A_XlGiI?-K/]9;A^(YWGaJluX,%GTăU",==/uroRixA$%LM#X2jukwBMXrw2T8'wu:<.B0%r+eN7)hb(Q-GI%fj9\oArwCOăU"yx3dSri,X_590]dCL_=COc7x'1C#9;8IYq7dXNf9^od7RzZ*iR,e+e('Qmv/qY)ăU"]sn?*>7R-(eG8[fsnBB9iCw/$o'76Pni7uw'.RKS)iwiow,]lO;^8qvXeU=h(T*ăU"odqs'AT9?1oRY02&aBkAi\%Z,^Qo\KY&*_/guc[Z(yD,i*/3HN6JK<N4Am2ndZDăU"W9-I4nv,I]>$vrr54;fO&QVf:W:fCS8M'&3/d-rmQkHYz(Td.e,UY7#PKfqwSPUăU"qE,h4st#xVwoDR4L51yHqiI;:_=C2j8nDo5wqbUk\j[=A;M1Koi=[n89snRVIF8ăU"sQ_>BJa/iJAXe$%e66felf&=&8f?BnDMx(Y_D%88k'v4$bg+WejYu1M&&iS1SulăU"e&\F]NjdNWu#zJ/yRk5Rq$kps#8s(j,FMkqf+W(La*K>Ov#U;oXki2F*JglhjO9ăU")>X78=_)%6p';4[1:/[D6x=+7qK+X.uq*-euLorLybQ-S9(a[scS+e#V;S+]OznăU"LlTr]\9:ZM4]nO=$#x+E\wu/^*TeGV2'[oqOL^'oUyT//iduxfgLcHEhw/&8TM)ăU"v4f^vjcq0s92cAQv(I+u[;jV?4vPjCrphi5c_L\\6Wn_kaRN/UpQBEsCv7'A<Y4ăU"2.)#(Wo[1TjZpXHoAn055X=\mOvOaMcw'??8kkv^4pGdavk1YM-Ew,;+Hk8,1EkăU"z%Vyu#hhKAiR%r^_i;\%seA4_<gl4k3ECw_BC(YHvnQeZx8)(o\;d5F%&[(,;;DăU"3.KlAiS^Npd5smFnF4QNSqA8?s&%+<.jnA:H5MZT-h*%U+$y'6F4?5p'%wY^\xHăU"618l\&,$In-;)I-mo7uODf/3qI[$VN5Vc/W/quvB0LCOH0;5RI)FR_oiMn6L3;lăU",4sxW_OLEs#KPh+p8R>/OjhK<slYDFXNCx(mh#zpZefLi0P4PMt_%5Ewr^BEf]FăU"x4%hE.iHQC5gQoUI<OXcx/Oq4tie'HI>Ql(eh9m$/<DTLAo_>IY]Xs*b3\],?VAăU"ad+9omgr.a:YO)LR7M$-MNt_Ix3F>9a$xRoK:)vVuWQG2CbqFG1\E%qkM[_p98+ăU"XT69.#&iKNV2NPY0KxPf=>%.n\/R%p6ecA3x%ROvNo-gE<Tc^ba>9lh/]9E)P?căU"rQ]?[SSIY6#im[r:+X3OiK8Y3A=''+ic#Iaih9IxPbC0f9._Z99*i^8Z1RRq?)năU"L'Ca*qx;lv%Tjqb1E=j'W/ctKqf_F(W+#[d'o1A:w&U6PdQNY8Qn=$>N9U:=:lWăU"RZWdGhE$Z/SrVzg&<2jEAkGoM=jy8Of:Wz0K(%opvFWr-Ixf2*pNuNt]K+W:yP/ăU"M#;%L92u8^m/Bs+rI7%rBJ+;w1m4k>Aiu#swO)t3-KxvrV$.v,$FMOx:A>H]RpFăU"b.gPeO6[ujO(nLf\2'%4=IvN\:4cYLO_RPMd)cZ*b1DnwNs%-gHG.r-vu<tivhhăU"m1U%rCs.'5I8EOc1k*T)<b3RW';s(='MbNbf),^=W'ZV)P%j<Lfa\\AXug#X\?EăU"jIpIu;l\]GuPjxLslV[iACtiRS.4-RcV0h$hR70/7%(.Av\bLW\n'Si)An<yG;XăU"1m>n<m7q4d_f/BPOlFt8(u3^(Gaq',q$.ZTEu,Silk7I;d\0-IcAw:$)BYsZv%8ăU"7/DKrz3x(uF[vGIG#FJj019<((dh;9GC7'mnTF.i:rEjd5eXXl4OC^qH9R$1M)#ăU"RE=?lG#dufBjv&ldUalkbL/Yi81gY$''4]PszT>Rq0yCV?L6C8:6<l*.YcTlMx8ăU"]d^?(QFok5IMe-Z>TP7d4'q9ZDDaw/*DLvLZjS2t0:.ccDziWn/$HywH1_xhb%AăU":FAwrjUX5Gdn<p/rT4_6s*']^3^89_T;Kt^6HkeF4S+pDfd(3:pIU,&sBW[NRbuăU"elY(DI.e&M9UA;GGf7H8D0GN2;+SA)^(8S8.__%E(1At+AKx5St'i0<].6f]e60ăU"sd\bFw,RGc)*nN7W.BxZ'S*4skh[O<%i1/a=uW(^9b:8jjXz:UnOms9oRU#I/VSăU"Ph54f$qW)Q>/M[+Er+kEipY>^uMF=.^/VD17y>O5c$DKi=LLVhOQ<rwu#K>NIBnăU"<?X^&);Iu+*6d'4q5C-?2dQHLT&lnWe(#='d8LNPe+7SmE.h2',\CPl.&XQFkP(ăU",v?'.P>XiaP]S'i(.i#26-$//%1>GfeJ+Zr,bl.wRGh,Wn*9Z?<%L>F1\PqZEqAăU"=t'FC7_g]iB_NIb*mxG3r6nhl,oy-HI-uC8CJ&,K+'aOZa7cO1+FW]bwlIKmMSPăU"A+cizGnoBw7YVSpFD9*v%2RnW_8$8J)eKQ8PhUZW<n/dnSh5A<1fq\LpPMR#kbiăU".&X'SK&$^Bk&E-e:Qr=]7h\sBhYHg,?kV-SW.tL-%BQl1pnnuEtwGhKWz&[+F1băU"S+]R#$eck-.Qf0%U&BFUTBMsl,BsL$P]^XpN+%hZab]$JdAa5a_I/>MZ?8b?[mBăU"O(Q9YUfJ/aQ=F>Os4cx%l[ipF1=1-_I+9S'MSqK;pR/46zm0Pst]9)Vvl64vt6LăU"B(*v4g;HI>?CPWQuNdRWp=xo&rJgB-.o#z,nh)zr_.m=ZuwGj?dt6j;xS/k0rT,ăU"ZEP%ZA]fn:vPR'i.0h^*#0kgXF2q$/BB&JMCufOq#.Bqrz0&inbOqjxNoP(ntj$ăU"&M7:Dg:_WFn4wZCNZrlx)ZcK0X.NQ'FA&:5Y&POlwq2rf9C\<N7x4PIWMNt6VhfăU"titfEFdTS2D4P^Muo4rdF3>VGuSjx)Z#jpF=wwGSZB8j*fP3sdlUPg^'h$wluXJăU"LsKt$6Nq6&eXUslKnQ8tnC4ExmC?_XXNZvt3oQx1M+ad'DPt^d#nl\s#v31M+dTăU"'DP^ud#n\rs#v1_M+d'jDP^du#nxD-dx(u%p()9%%%%-O%tXuUGo2]+-L%%%%8:ăU"%%%.%%%%hqt%hpSuRhkfe9V/<E:1Th,\J<ZGZfrX;)dCZn3L,C./bR?3W>qq#WuăU"X2,^TipZXccPl;[CAu7:8'V3SRSvgQ<w<K6r8[[V-.DJp2R7$LKaOl$>$Ln,q%:ăU"MCOC*ml]KY^iQmKIEnBsKRrw3T=nAyY(KI+.[dem(7MZM3/RYV,ZUMbf*:Vusk*ăU"G?dEERP(gPB+\O4/._IYP[bOi4#OWF%hl^u;p]U9\Db60S(rQUNjRyjkqHBm)NNăU"*%nHu:uH4lgV:P(PXuM.9/TgPpISI%'up(%)9%%%%-%M_ouG3q6iKG[%%%2%9%%ăU"-%%%%g%tyyS[uhkfAef3S[E1jp=IU>GUWAwb/\M9&A6XeZ1nb.7P0jnTXgF%dWrăU";*9aZ<BZ_Jn4dqb%Y.,i3NLO%Q;0+^[gF-:9n]OU;_s\t$lcV<$od;Tf:/eQjv,ăU"I$h-iq+vk*UmZtq+d?5\A%3*:+AAQ0/Jc6cPJONN'*^]C5OYJk>lfLe9Ev**?&uăU"xjP7],h>PP2#F<X>n]6bcG1$yU%p8sV++Ld,/j)E#*GC$]JQ[XLi5CDS-]E$VCGăU"x=jI<$S7m>V1*iLG$wp'7up(%)9%%#%-%rDquG6XB6vp%'%%L%s%%/%%%%u%gwzăU"x%mSgq=kfTr,=TU5j*Y()_)B69G_Yg,%0cpS&_p=c%f<bxk0k'V.<MNi:ocei%dăU"9bx9Eh3ntR[<dmXBRk'XdD%OdWNM't*)GYP<Z?#]A3V6<Z?]PkN&b.ce[P2PcfqăU"N:rM8qo26Opq:BgL0VHP3:*JXFEqt.TkhJ[D0s0NRUt8,0*LTQ?t&3blYK6eEf%ăU"zl-OR,Fq^H3IiSGzg&a>QLMP[-*5?068GBJ)j9j9LC>;=T\^VzuG[(^0olYgABjăU"x)zmhoML:F65rkP%QBbi8SkW])-,WgImG#-Ue.*8F&5f/k9KQN0.?72GrG[>W<6ăU"6k;><4rs\85UP,_\pP=T.O:DQ&_9#5tQ9oz_YFKi4=(qal0Rx?M5GnSp^31)W/IăU"ocB<=7<6H5g<Y/a<6nZ:<*e-v;8<N1/qFJC1F:^<P%5HtXb9.I_,i4Si#4T;LYlăU"SZ]i_.#;$q:':8tH9t0eFukfV3r[G'=+=J_=ag+R_qW]6]WeZSjT:z6hT.eWm2SăU"w+fm1[pO\DV/6E8(c++\cHgMQ0X(I-4+BmF,UGGRq2I6Ng+Z<4W&dQc1\N>Nw\]ăU"WgG\9n:4xDq<J_ERS&nBT\.Su=FrUH7u3UD4H$l;=DLY[+1Y9pk+P?l4oTe2&%+ăU"\Gs9sK]ws+eOO':t.95X&\nsoJ^6jrUDd%o:gO3D0n+j#dG1tZ$NL8g:S2F;\%?ăU"g%/r)H/,JNQ(v8-^oopA-iv$w%bqn985;RVjmqZ1#LREhFd\qz^iv^/z:'-^a+AăU"gHEb1)UWFhfD'Xp]L#F5_cU<;bAtnY68()3$*7En]Z%Eo80+qTpcKjq<476->JxăU";0JS+[CNOn?PWOvEO6<Z?]IA3V-'w&up%()9%%%%-%<tLBG-/kjM&l]%%'dI&%%ăU"1%%%%unhi.wf&W%SgfxEfLrBj#BaQ_DR65*hUTZ,GK/=/PAC(b\(LB#+fuS.*&'ăU"%(A$8#F#J')CG%Ei\Z+jj:^KjT>Ih&t0/HEBo*,t)R63XEfvLKpi>l(XcNNel5:ăU"7m]=H+4O7PP,c6++yW],4$f;-:MFE\b(Ag].$u#j]0mg;EFM&[n=S43udprk#?,ăU"brrGaBt<fB^]nC'cud]b$t/:Fi<4b1rt-uS[Dq_\b5ueaatpXrC5-R6o=LD1>/uăU"+G%<\I/#;Dm=BMB3J8lArUe.S=A(ce_0W(%]Aa:74Wr#8dlurkLuWLKr$q+ntd+ăU"=Dj5gj3n5%0;0W2.bHiWW.>NUmC2OoPZ23(IMiSW'u$WUTMgaV8G.W[n%W[Y1dlăU"OBEd%efg6c113&nGdW0fHBOVN.1E8nA;Vf]Kf5GZr&v%x5)*FrS9u#kcjE:fnFOăU"iT1C?rjGFr;JXW;g88hG#H.C3%6X6_D8e=S_D%>WmBUY''pXW\dWm0x3#BS+F6zăU")z4icGUZ1?$qsw(F7#*o2gW#mo_<]\%z5f0'EdEjk#.#&fDEg>=q#86^>3qv2tsăU"NA<'%:2orKGf'7B3k2b%Ng6t^DmBOF.e)#TDmGCnc5gV)2\sqHv^jlY02M-TZOPăU"Ko&BHxvGQUkSsQKRc[]2r=Ng_)JdaCHt\GFb9vqLK-S&Xv)QVoO[,W73s?BA:3;ăU"YW%(#lHWi[d'-3+L2bVx?Z?w*Lna1v>CG',XgGVrO3479To,/uRWE.tX+g($8ksăU"H-e-]kUS'Mcm9V*VZQ]]LNl4\B\dX0o<zJDWrDuQRhoF8bPNB7qI-WHf,3bqx^RăU"=9vY_>$Og2rS>-MMrbMJ9KBmnGF23%V&fdvsIX83_G)IwYfqPJKqZT.o,T9a8wXăU"gq?A,oG*i&6srfLKv7ecE<Rfi'R7ze;Z8hS;MMg$gInN>'H\R:>'$;^Px('SpiPăU"qlzDR)GZQuE;d^ogs4PM8\1ar3>BqR]Kc_Gk/,RiJ0+dg>N7pc3f\jrXZ>LGK>PăU"7ZI<g8O^hGt#g6C,bKM%?2l-$Ad1snY;>fwN7dfioT7w;a]lTsW+R>d+Tkf0nb>ăU"=%f(f>98mU>m[oXUG3?vP%eAk>S%)$%S+gD[]?YHPlYJsAR[qvz*x0rU'q'_<f6ăU"E]NU,;VzYKeu(U9X86SdpdZdrJ0UGj2F2Y+GLK>\R+HkImU>9\l*8kfcgif.K4XăU"=^C_lc#-C4$E#<igXKn;XuJzE'q*M(*vf)KfwUG'(RiVl6xXLn$^>Nu<D>Mxt[7ăU"<tXx]j9i8cxvDwci#dw_n\d4#$Vlajpka]ZSF85'd=FIClmr?.a)C]\_>(7T:ZdăU"IRcb#3=_1uz7eG99GB&Z4,[PN6Q^$(kuZX9ihZQ81Skj]L.%-((Xiw$/^jad4+$ăU"Q0ee5d6B>NooOG)<_CLk13LaWnT$_:NVx\,U(Zd4qKi86&%Nq#MqZm(l4*>Phl8ăU"(H=DDSElc'6SV0G0INxhMO?]Ac[0mJB?3P,]<6\bl7f[k:sP5Cbom]gu-Xeg\/OăU">mt2Y:gp3$[L,P0\&pY00x;uBo)QW#l-\vbFf\%15$If7p>Zf\JbDKxem9LL(v2ăU"ohSp\#\B1S)79C_d?[97_+eK957/DM+>OB#*AQ_*uH-p8nN5eo113v#G^B[([/QăU"0k[1SWL/4vN]A??WK3l+Oha&3HaF&]p.qrgA>FsR5*#w+.D+R93L(P<_GQ'\7]0ăU"KB[UYY=8baZ-M5iU8XEp*s?.x*x0A_X%0I]>(CUfOB^CY#G.S_oN/WQx2cQAG8FăU"4gagBA^,l#'R7a0oViB9BZI]NaNB8598yb&4^]M8qvLXc6^XE4Pn]0a:aX2Q+70ăU"uEPJ=#j7-z/%Ad6m82nIkuG8KJS-15:135-Phd]Cef]o$IhmYa9/VfF*$5,2?B#ăU"A&99+%)i15U]sdZboQSo>VaOC/eJtc-4h$hNvNQs>fg)OodOTNod*S1+2LjnadrăU"xk&AhrhbBNr#NgnNtT3o>(2;ge4rQvwYX<#t$B?6qmveO)a,2-aBG)9??U&eH^măU"q+KZ2i$Z^KXc&s;w84da4R^?uDwWS'p:fIsWrh9k?,?fl3au$fGD-<:u2[Q5q5>ăU"V>^5:t\sVw,:+l3+h+)rVWypouoehhSb=_jb&4$]0)Z86oHPOXg<R8J8z;6?Lt\ăU"b93N18/MHtY$0chyX7Zwd-2:u%6h%/gGkY'b%Vs0&sP0&s03&spyE[LMIOfJjXCăU"oLM'sOjpXde8Q5DkCsjf4$g_U%(qcXH#:176;Bb)NA'De8R6]^_'q<40QO23$.QăU"*^^kl)Ch;,oBi7=:)2'^XZYlXR's3O.;;X\G$L?;IQFii+Bt6T?r6i(PB:7Y_cFăU"mj:ACb4f.6O4V]W#=R8oi#)N8^XkTJ'l4:qK11uo0kt[Ed/7GrrO)N<ud=H[$6năU"nqI33U1&dWay['d,jDM037_<9$o(t-9<j1GslZc;Yv4ZR=ja#aDNoN*ojvi8a*.ăU"Qk7dlI0eMi$e+XKfk5_dHqAL9QQ+Nfbu+JPFOqQIxKq-';/hne(#Qm>'2e/MFI#ăU"$g'OX.*v.a*dzid^eODory>piwUX/PRWoDsmgslG7v$X(nuOW7N3TlCs$CjE%>SăU"P^BNr3c-9:eQ_'p0X[\da*RK+lg_neZdZ^^x'&hMqQrXVrAk^1c39^=E/:#LuqCăU"n-aH*LQ[$i',p=%QSx7Acjtoq&X06[4Sv=<Z7Yr_J.o.fxn*CP),CBa^3X5g-(OăU"\D/c3>F:3tGnJnK=;xfScb/J5q-Sl^i#c(ttrEX:H)LL?GK1d;gD$r:VWCtoty.ăU"?]a\GBiL6%MA&B>aN9[DpNPHo1^KYs=I[Cqd::a[QATWL\B.a-KD2_gQG/#qKe0ăU"LNHn*C3WE8v<w<8'rZm17jeJ<Uyv%T\>#G[+-I7o,$Y\=ax?NGaDU4a3U/Xa5GuăU"kJvjA%'10o(5.8B_#F4Y-IC%jUH(V#[F$0=9=dou=F,w*k1#.++LI'-L<Q>jJ(%ăU"s&:FZ)%v.TkiaVODS.6;sAhZ'$dBKkVORWZX3?LwHi8E6[.X('Ao*=0reT:[dsNăU"?Sh]Wh'$-in0rSZ\9>d\ea?-'<jI[cNm81pmwKp^&&8/4kOh0S0h]+QEY+5]YtgăU"OEYhSHxoND-vqkA^7iqMekj%mpq<X9?ZKI^k8IT;3E1*zf0I?1lQOWXVt/=6-l$ăU"t^tXXh(_A),r_]5*Jn;ZB4r;nLCxfj*D^jIhkK1NMd/cn3M46>Fr1hM[cyJ0ZxhăU"C*W4Vt<YR>aMN)StBus-DPKp.M^zK4)/gpK4$+edu9emgg#c-zM=.0DD3(%?>T.ăU"K)Hr80ss;V?.cJv$lHp)b4+)^V*VHQ#5eP65SUsBhPRiuZhF4tARsZ$O1lt^*[băU"cf&;5jdjXVF4PfbOO6;lH=<9QCLqyvb];07q:.qJ;i=^8ZS&]G[77adB:h;I)<XăU",0*c$ye$/xr_r?G1mjToV&NWR;[74,eaB6X]QXP,t^]>[ADtb$]G%BHjG8nJff]ăU"(b]bl$TT[VwBQUc8(ftr=v1=H:[OOo$1mZX2;HE\r-bSl;DpBYO-h^Y>QcD(Kb3ăU"nj[YBP_zMpZ'xGPc?J_]^VXZx\Ztf_U9XsXh(-Slyt+Xu5C:NbHGAUFb*:o,kdGăU"4PhI&ICF6MgD-U8y,dnN2$-lLr93+-af(jbxs4c#%,jO0[NO[P5M4<k6lUaGeilăU"bv_<(pWXBhO''<MF;v&F0S8o4K&cKAO>Gf:=Uu9xHlDUik>eV#dDTRZVh;88DGHăU"(viL3MZ&N1-dMtYNKgY'S\AtR<.7]sI[#X%*hl(V74OlWVG'T*<f7#sZz5KLzzOăU"9%w)^UjlwaJQLftbju[nA&09_/?/1aI_RmK>AkVm0yXb?F9^2_+(%w3p/&9/,SKăU"YELH#M*G?vEE(Ki.9?]_&/;IoS9S/R49oLui8$x]lbnio>D.B:8sP+#VaeB$.':ăU"N#[Cqgq&hP^RuGLqJum7sKjS]x\33wP(+hR'XXB<:MJY^,NbZ,)L>_FJrkHOx9oăU"da1fdHrkO[Vws1Un*_qJRkNaZP&JH/F3rljJZ,rbcj*FBJ3PLi?,B#iqAkC='3[ăU"EI9HVfI-heZ/VGRBE9,E6taGnCefK,XmJM:Rvb]%lXqX^3(8^LMuJvnt28Or9RZăU"jQ/O#mX.ept>o=.9)%CMl9XGga;DtX8a+O^ifPxbU.KS?twEsUbC]/aRSIf<>KsăU".o^ykGBtb3^<XTZ*8j&FSQ6m+UAs$0Kqa>&B*m9:QBP*xXh*y&3=wu#.RMHQipgăU"Q>uIWgz/V_G,_1)/U(n%$IV4D$y%=;Aj[8L:E[uX-Uf_U*VtMs5s7JhhfW^4z5'ăU";3qiG&+GxPB_e%%OBuYnijJ0h^i9G=m[-H?3poeaWa^Mu._l;;Jafna-D]6s'9păU"=RtCnoPfkwL<9.yAKg)9mRF<'110;oo40WCS_2+s*21mK+Oe]3-l;RT45)xkcE1ăU"NMs?0o]\kA<DjS3812;)k)yX/oyK]2,wPa9I>%;9:r)G2nx.4j:\B^^g0#7$j4UăU"nO<Uq=pBao;$8i*]l.x#r>nI;3;fT0]t,#$:o;O?]_YD8uP1';MQ7qgX/M8[S#4ăU"$l3NUH\u;nrqF-HV,oZMel/?Us7h)Ar%sH#o4I+l2Ge%3LH:o+mIT#ef-^ia$POăU"hy?s>e#1*6.ACQ1RsK[+p0oaJ6Ad/rY\(Q(l%dHUTW=5Fuwk1U'':*9'H?*XaYfăU"C_I&ei:3\#UZ^,]Z%a>hkVRn,H<&HJjeV.s1Yq'_;;BB+X+B>8GGJeKyS%mHzg#ăU"YXz8h<+s_l5Ek/;s52Qq>RfcONQPy=5EH0/%-NnGQNO+D$BDF5'ZC/*PV]%Ci$=ăU"RDY__p:j3ikR6pB)[-/<)^MRr29x>/CC6$hS4=.;EYLUdCbU+*cEE1A\J)$rulEăU"Jj[Hpq(W9aDj#cL[,6qIeCZ[>Yt<D1x*W2)dKU(0Wqf%2Ttx[[yEY0^hq&cfiOwăU"%r)ncV'y.FYM(w7.nOG'dKfYR-sbd7m^DmsMS?SP5HgnXWw7Q99s938,]3kv7hfăU"pd?xr8wF[[,dc\xgwg<(RVIJaOP7\Fxelwnn=Rd:oNS?A[Poubr#tNsHqLTM%03ăU"xF[5,N=h1tzuLjKw\]f:b_xCc\u<ud<d>gkpxzxZ]92=nAWch3gon2=qDg6p>^TăU"XD_&TDKhVC6jejWRNE^P+msd>HbrwFrPe1?#)OxV7Jivu-F5YQw86Up-9i\MX_găU"B,qaA?>Yb3Kb[&3v\.?Fp[J5_<.ymD1EYgTWaJgr,XoQaX#6Kkrb_Us>U$[.AM'ăU"&%fSApW7+>mLh/_3g]?plVVP>\>?SqfF%*p\cZTGB=:KUcteT'9='BADFgx.m1zăU"=uLg1Drod:vvs?euCZYw0f_F9UA*D-f]=4ggI0m'CgLitOiO1$_;/,H_Udg07pBăU"?uZ49%w[1)k#[PIJWmC)Uk0/X,8pG(7DCNSPn[-*7+Nv9TiO=nK./Z8FpQcFs.qăU"z6Q46B94$ao?]?2CbFDQ[f&QF?gMfjcckV5K8:1kE)v4_Z&h0gGgLL%C89vVX//ăU"3m&(/7j*1rGb-dT6?<jV?&.R1a*PqSNQ%9]H'S1?OvYZa9CiFiT2+?jQnH-n5HTăU"M-$+]6sr;#Qnn<r)-xY^F&EV^n26t)jqv-^M76]XT4$Ut#?Z5?Xq_,cJHL0#?cBăU"]u>vWCx.c-]tXkY(ct?+SVYHTfj.^:iXZg-Fk4?D8d/43(%Cx77iju'eA.CcNp)ăU"y#GRLdm[mH]\iw,zxy]5AnpApro^YF>DVY3)+k=\f$CjGA9l+S]KIA-iuRNbf[yăU"C.I;[xk0'^?Eai_86^ABI=-KWOA8u>sIBP8Oh6FVSO#4t93EBre($Q%gNog:&:săU"92yc107GTjs5C$922)ekpC(4;lQ52?Fm)b.OtkpCD$eh\U0=c6hy#dvQrq.s_KDăU"mVcgm&II,s?)X[z$wF,]=:M,dUa;$c=7'6i9tM.i*R)'Y\>p.V%&xM[OE?kYd9XăU"G,iJXu)[nD*dGzNWv'<$?aR$&>\d$(s4Ua-20f2EgMJ[6szk9E(12+R(&EuHSjmăU"v=K1+jOH%)pcx7e0j%W8m0VKl#:xI#V0gLLu'&TqGZLVgB4O3/77L-:m^[Yj4SiăU"C57pW1E<7s-&PIh41zGJncxenG;<WcJ^0q<--JomJ/Xt8nLP0m]S^3l&Y+6[r>măU"wVgk*&uYgWY)BG?N'Yj,%<Mu;q1;[&G5jbD7'd%fhBmD&;I,JhhX\l^,qb63CU'ăEND SUBăSUB V3ăU"#R%2&RMwCZCim1?%jeBkHoRiaId#6b#*UNp,[qF;%FI*5rLNqCO./AJAD4?y]EZăU"ScJiPcn7xa<vTNDW=,Od1_9Xx.FeouIoh%1?iQe>EO5t.-I[,Oe2#mo-OJ[<?dFăU"hO]W-dNNm92)Sv06S/)=i.=F2oeIZ:v\dZ%])yxZ(::c8fi[mIQZV0I^w0Oel+_ăU"T&w;n*7eAH'Lxx?gA9Z2u+OiYw'jY)C]#nj]LmYkCAaAnb\27JG5kCm=AHLhDQ0ăU"dQ1pIV^ZEY,dv_Eah4<Rx<hX>I</gvifn/_xVcRQht&6m_vCoYs6=AFAQ.FJ;vuăU")6=Aq3pB)*Is2yw1%V-Z#v(uU;<-j%2oes6:mzO&X'SDz%09kh%m?e[dNYoob-ZăU"-c[:P2.gWvpgY(TBxN2k\I(Z\+>S6%G0#:?aV[8&xDgkS&[syYe-Ivv8?.W?-_(ăU">]o+-evqW0)V$1&tVZW0)h_1)*VuWCok1t%x2WAU^=tl&F/>3iG4s<5x1Eg#?2săU"W.xNvu3KwBo%A_]w[$k6WKYZmoj*4UKG1b#sj*tUK,1dAo/ZP7n.DI=nNIQjAndăU"=S/7mq<nj>&d3VouZuFu\y9\QA_[hcx6KXH0//f%[%bMp+p[6kK5ttr?b:I-jEIăU"+u;Fb3'6jh(oD]SM7De#Lfzr10Spb>Q%3awCsfaYrYyc578\##UmpAz_>>%(L3:ăU"=URke9cGU9PkAr[dVY2kD\P8Qrw<dCBm6%.=hR,vPCT'v14&MhhZ8Y/N0IYxIV\ăU"z#:'djvAY30qi.#B)3/=s:oY)MSd*Y'6SK:.bc,rxze#Op_M+lg';J)Oc]HCG/păU"X(j?fPo3a%iKN'k&.Ujl*i19\N2%?wDq*\*bAxLov<mOf9m;$e$Sao4E+5_yAC#ăU"UW<L7v-p1oh]&m.?8ba3Zw(LZ==tKDs%EGyei8'^2r&[Zhs0Vmv0Y0EP&jgnu2eăU"0g%brNOt4,K]EkgSDVr>t*UY1TP_a?KrhPzZs'0LXImgMNd<Vw)oD2TB6-:MQK&ăU"mu(\Pwz4ZP9IN/qQx#o*)KMYA+(kv$-CUZW%h<R>a/eW0vaTI.ngEEA2.#q^'qZăU"1E:9%eF,XiO.WbQ<ZyoRC?aO39iE^p>roMP%uXX_z&z[(ad]]PowxW\2hefWSnXăU"/&4?Bwq)d0n:,RB)U3pEROA^y-<jQWZco]k+BZ2Jb*.G(oP]U49Pfe%Z:*Hdee'ăU"]bU[5r#L%SLYHg*#uH>^mRoDP2*D#Gy;(.%l<Ib82J7=kJ+:Vi,o3cZ+wQ0E;tFăU".9IkiS\Bp/NZlGr3k04yU^x=NSlw(K+wbz3UPZkd;f2ISO*(4RRSxaAC+7[)2/4ăU"d(;Zx3];'9Qf(5C7_1A.GALxK0&[diC'KD<I+7H4TNQ?3;pFb/mcSlOXtg#B>HMăU"4JLV;8u_IXSJ65F>]&wn=nn))S)((Ofvpq\6_GLG+<E&M/F,)RyvWH)MrIOD&ABăU"m3dW+*tF<^Rf'w'H%l:?P*(hpMD5fjEERw#Apb$dR,_Lh)*S?:#,II,*DOt'vQ[ăU"BK^'$#VR.j&WgP)<L]#8h[G/&\Hc^qeOX:sH5HRj[A,63lZp%zQ#d8'4CAtNN,ZăU"ip+]8t).YpdOAN.P1V5?(;+$0t]Y:.-kY-K'U9KAi:T:$f;6;1\%[A:VVjCVn*PăU"jF1.jFJT,?0UQtiUkDG]v$;*<Irqc4cJ58Wo<EnfF+55'>Sib-PT.2U^Gga4x1]ăU"[A7>pOm+[,[^(4UYDE&H*J7GDq[,wKKcOm__e9dUQvEdb-v?+)8+g['NPm)mO\NăU"dB#w8fhyu')TaWS-GSLtx3dwD:^r(h&gPwLv#Y\nyeP?.Sfam/++0/r9P?E)ZbnăU"6H;E=(YZ70r<'8rFd,ICrGF)vJisholn]CV9R-W%k^'d,(BDTig8T$/.'T&[DwTăU"AQ.L2bRvh+G0KOMlPc1FnVRUniODAc>hArqJ\1CiCi6C(3aL0XQ[9\vjWG15ZC7ăU"RY*$4;aZodk3#8n$f?1WvwI.>KF6UfDETd:F9haF7.ml0jRA53?01?Hvvul\R?lăU"uB[K:r2M_H+=nWmcE>>5/C?q[;Obsb/L(mXD.9C.04GKer8Gc%4K)x-&/u:fN_3ăU"QLc1PFo&<xcl.89wdPZ/'rn%-0l+o%P9h,Z'pOHo(.Df:$i<feADdI>gk7'#ZTxăU"#\-<+y:q9;[3d'bUZBBHv#RGHaUDm2+U;fC*#.CN%4q$WwL;/B81C-R*F+)O7iiăU"/Vzk'/%P#OGWI/iEpX)HBBs$$S6Ma=1>_iBOsCf3O5f*pfVCiS3aF&C,=u,ZmeZăU"IKrM=kC9OMN%ip*at/^^]$I>qiqIo+cUVCT>c=eP(mB<XG.f<^qWO+^ie*iQy?)ăU"qre-&[s_r$cL%();ucmWF-RwZ2cJiUj<-ARom_iSliN=DEu:JFc1bpE3-S&&SMaăU"t:Cyoy3?dRX*6E-hhaxI0A%WOR&:.cb5#gPv3B/s\dWd%$=74./2K=6p%x&_0g&ăU"4Rt?3GdPawl1_0dz)$h'MxK-^gzY6EoDoc'%HLQ=R)VLx9gd1]D(.oXRi3K]L;căU"HS^1r=*:H#WHTiSCVve)%_p%D2Wz/j4cZeu*2tBqm_rkh+t?81J,&ve0\i$_4A(ăU"wj45/B_YXX4RnM'WNDy/6y6W?(E3\/wbdZpc.#71?,aq\7AM_(qqbdY,'*%S_L2ăU"dxr7r>1+)C'1?<2W<>?O(ciSeqpgSVSGp[Zp32ES7\>)rht%AZONpp?7XiPn'KLăU"7Q2iDHtK=^*EubS^b)f4*4aK43Y5\P4rgMDUu[P.En(<&TUR'0)-%K;O*V:hCcWăU"d;3WcA>esOnW#r[D:&4Y-:Et2BB)2_WtpFCpg>([hJ,6)(;;]>Vj+rDFN(1?t$oăU"TqnmGHf(sZs)w9^D>6^ZZX[X6]e;v%s(OdC,vuG7p21i+.;.Ls,ABpp[)S7%C(+ăU"do9_'r;j8G';5(:wtQSwF^TQ>'L;)WN2D^z,#<N?=QkwZFtMh)UzHsUb^Vv:SZ.ăU"c1T].b>Ek\3&&4*Rvl-.03?aNaD'sV[g17?w4Yns/W&mg6)ktcTY0s0a]YFI_,0ăU"v5$qy#iBBWUmns%B2?Y.N3\yW[ubcN0Ow['e%e##YN/ttlM),e$Osa7,dvy\Q'.ăU"p(MjQ,[D^(wjF+yjw8+L5^uXf]>J9kr6k3):qnJ,Yx\kuarCj>P,HQ2+mDn4bhCăU"kI_dnKUpj^NSC#\WbaaM8OhrG.I%d[,KsLl7,':E8Og/6bQ^=922]aY,mDdT;mTăU"ND#W0pUl<V8)^XPUU$&xuHi:fpB%3Q1],vwEr:Knr8+u3qS/:G=Qs8U8[7U#5JBăU"1DZw/7r;=WDA80c*X;ubST8RcP_))l+my0s75HE,DPsS5*JG-b=2/Tuf)]&Ei#UăU"JIG;HG)0ySdpJfP#*frHcG5f?0LdS^:bNo<lm>eLhslXe$ki]?IFqL2j;K1hV?KăU"MD7-A+^n^cgOI[c4\'0dQnRQciu-j&)+*_ong8TJ*v[pd)9rP9G/?CZ6jdiN+*(ăU"XtjcY;'fdXpb^c(\R.4TM;Er9(l6,s-,'X*5_o1-+HvyoYx80+\nh%pun2AMg]TăU"KkJkMY_0GRcY*kNkA)fNSA4PC=+he(/q[LYWu,,1t]Y-ClJ8MC0RMESphI#oqpmăU"F?cZH_,oj>'6>wMg_mi+X+9;o+(/&jrSD4$2)Op3V#8pUOq,sspuUJ:YLf8oPKCăU"[$*#HMTLBnsUL.;T<F?MpkGJpFn+2%6*Ci80Pbb#U5=5;$Vu&u6^P*tad:(5F5FăU"OE]NH0,\PYMBH;=kfOdyecOQjuFP&83Pf:3=OfoMIvhS)^c5)1DMnWslQP*RoYtăU"QV0;:8dXm<<=xd,J\ToB.Z^$ajqZ]9TmI+L%Cqd24F)xosQN%NBQ[qf?OG6xEqNăU"Yeeg\ZB3KmM_^xsc)rTh=&GU?H=#\Y;29K5e*iX;/AVoF&pB+h^d_O61i'E%aPJăU"YRWM-HB9j2xruMSQ,VMM:CuVn%uo7>1HUxJqQw$m1_[Q,-(%Y3UVxe$e*[at[BLăU";>YkeNWHD<\N?A??ftHRfSV*T^+./D5&;$?5Z*.=oe;Ku:[PuMZ*s+^G:T&-B'-ăU"Ii6[u=yuOQ5)8A$_yi49Ybps1FtW)nMwH/5E3hqV+'$a09p?.f'xxEK/F%)/jkzăU"\nT8)J]+Z)Zw4rAp;-la=JCn7VZa1$V0qx;D5G8sHGiksO+<j0L2U<oLW5bIO%9ăU"VX,0aKikz)D<EIjEKE4/6L5D2M/h*>_/sjkwDfLGh;-(R<3LPSDk7nx3lHM3r]:ăU"THn>7<KX6DFnoAbHv^<VC6XPI]IiSaVD_Y5O>Qxn'5M\NUyvYs5qHYp?K'FV:VfăU"9JxS9yni[]ATY<i'(Y+f?U2mT7(I,f?2D$*T#=3:O0)F#\ka1l3.e3^.'e51ho]ăU"PqbmO/g_YDN>WSIYNd_3&zD;+9]hC,(rI6o$V*(z+&AW=J[Rsv9&_.prI_EMzVXăU"fhMPH*,o(Jnz<s,S/*G_1QC\(*<La>n[_QL,bGNI'-3nT2'MKog2W8E%;qMu>ZVăU"Oxn=GD9IE)<+8Wg/%k[gKm%x,o-=*;IT17o5**9?f7_w$+]IoE[-&/*O<0a%&q+ăU"U1&+9iY]Q[fASml=nCT)Nv10%03Ol.Z%P]\*TFIR;b&YfdP7RNY75/JA)uaa.c?ăU")R2&ciDo4&9k)lYv_7ij(JlTlgPJ)dl&z)IULJQ=t;UMC5]un2x$];1x\caC,a1ăU"MIa0?Fj)0X]G8iYjV*6gUtdM;^5tu?,;rFpomDJ2ez.\?0>fSa#_YgIFxUsLJRhăU"Kt.XuiMw%[Btt\+7\MY^0&7ha[3T'+)m.)6Zr4pMLYna7UB-K^iV+QEAnTda;BNăU"j^=EPwrbk5/(=cK($k,sf:\YiFr3Tz7r+S(;0Hq]oG$.%TU^W_eAh7MH2+-k=ShăU"b/'E:'8MyP?S+?U/nt//o6P0OUGdz[28bq2fbuSe51o'$7)?SdWIBh$iR_)cQFgăU"sN6lBN%nd+5b,6Lwn;;EAX_u0XaK,1S>+X8-[uz47E%RJkM_vcytz#c23Xq\R+9ăU"O4:Bf9$TnRjaHiq&O-ftf/_Lmu6pTRR9%9EFOD?qm>2*tKtON3Iu]7#SuJ71zoVăU"e_Y3cQ%Gd$U[fU#O-QuM$'Q]D6p>X_>na;V\MZ*sHt0)nongcC,3B[TG.]4mU&WăU":P(XxZA>QG&A8e?fQJ=$BVJlHG=6fv/U_$O)N/L]nwJLTN)IaP1TVT<^7XeG13FăU"C8X_I*c0E<L<<rlVoaC8tDUGe#hk%r>(>T1&x<x&$?1rMZoP;+P=[fOn)s4YUSZăU"=jGrMvQ&nqjpd\O>H,qD:jU5*TBGcdE,1NPlrl(3AMAlfthgAFpM*yQcpPTX;W6ăU"noiJM.GnLo]<d-Q(3X%zHSN/wIMwJSHvvSuE*eQ^P%vO68bSB1Jve2qAlbkZqt^ăU"#R/#MEE(0hrpIRC6:Sk*#W#AnM3Fltq8bM12>K[n5)Gnk6>,w-7<JRLRL%XM2AuăU"[p6nsC$g7LO+>ZNLqA2qDmceGZdui5<Yu5DIEO[YMkP024/;yfA4#dUP.+,_B+EăU"_b$[^q0>)0$yMb%hY>K's3,(\F]A1o<&:f%4.wGM4>^du&TFjKdrZX67n2-u3^wăU"6b[l:HaW^%x<asX+/f,HfXfkvz/Z=X4.\8e$O/1_'8OB51mKeA,U3KXyO-XVK+$ăU"W,Osn-oPj<:A6H88DfU_oXe;1Na.,r5xm/=67:uIK<:nj3PuS(Om60.mOsjQV=năU"2IsDU+CmsKhlKai/qvmV.G]M.?EC429WKiCm8[g8bUv96Hea2-O4ahFYJId[,3EăU"1qR/<f?5h(co4QZ?Y4=+&>uj2:8.)'pQ5G%'W0c3Vb(U+BA5m-h8uCpVGI$-1zOăU"jB=cF/B4W4y0MR>s-^BjpI0C=(d1Z$.qOSmr^gv5z[.NIvdGQYV&-II*\aoJ2oLăU"RMRAr(p11&*jnaP78WrK>'VSWn'+[[-E[['\]aF0Y1<2hbL42]eSF>frC;=_7W-ăU"%ot.AlMxC,Mdv&f3aW%8#AjmMOQ\HniaT7-C3.Pr$e'AsZ=u*ubQng7FFiLI^$GăU"RK-%xnn0+W:TsXRTIu*4a;,9c\f[LVFHFSP8Y=bvK=#bh4c:kMAf]$G&25xrshqăU"fg9qXOfb)t'n;m&Cu>hWkSdP&>(W[9Qv'+Mmr'd;-8TVuttXmY8LaejQJ))4qrJăU">S9fAAWa;OrSRme;(0]Jr#AgcYHQnIbpz\7Sv+.1]iu=oifCu,q;EU/5$ly)A%)ăU"*8=05*-AF'i(<8Z2Xa2N&)E\(L:&9k0PM^2c_D/SKuo^0u*SQN4QQaQO*g]IdA'ăU"3cKA_PILsz;fiVFfSIhZFoF&9EeFS;P)#3v])%bF0Y\H/5.[[]P=+.j.raG+rXwăU"Twr9A8(1B?X=1)6?<jPzZv2*KiL=wjJ=c*nE$iNuU>7Tr?]c?=;H6(fBpE#LDHzăU".JsY?P1BL(Db6qpBuohyFbm[-:OJvI16R%_JAW+U6*-NYWtQ_ooVOBHK'TK'S;HăU"?p'</$qba9_Q,3T<*opYX<FO2rM*OA(J7:2ti7o&&#n=1>OjFcA',J8bx&8iac$ăU"h;I#.93I_\9jT:#.T'8$'\X#,L9vq=^LO#'9J*t)XVs=OCF4YK(p(>s39brhzR7ăU"2(v/OF6J9R:.IW4b:oX\/i:LRu'arIAT_K;b8ntSZ[9P.R)t'KU5\]E-(/r:'0măU"C\'Y=Q]8=0G.Qf=-[w;YfK-9GJ,]T$elA'Nr='0iq]uwb35zT9iWTR9;LGXm^Z<ăU"2d&;m1Muq_:oq]VAWjKp/eZ-2$4UNTv21;eHHHt0FbYjPVX/&t>ilS%5Pg$-attăU"M$V_3'F;+83ucF\GtL4^D+04.mj_yn9KK3FC-G4'nNJ^&>B1s,[nLNWl;?GQ-Y%ăU"hVf$McN*^dWd;m(Jd:R2a7T;:_Z1T+$t8m1Nhc4R1/jl_QA7SA#0B,(_6Kb6pVVăU"jIuHnaJ)bbVbWMZ7m\WXcAoLzsN[3[Ec[=w<?IImrK,dG0hORtwU]B=2v6%7YKcăU"1W$Tk*DfNQba^cZ&pq_8;n_AgY6+I,J7q\vk3K7r&Ej;O,<>QWK$C0vpQ\bC:46ăU"9Z=y?OYjpVXE-T-LMWAA?5/;rru,QA2vE%[tZt3Mc%U$g]v+ne'X]sOUx.I*uj+ăU"NvOTZ8CD.td5ESYtoh]a>K70^Tr3WhCwFOKkG_(fXk&e6ZS.c_*R*fCQ')/JsA$ăU"?s>e$Hu7d<rOM6He'0=TnE'nH7Y]:Xfb91Z6UwH$NXPddkd;RlZ[vTrqrF=KN)căU"Mne,rhKk'#c%w77tiN15X.CT'?fxq;>SZn1:J<HxqTBXrQgVC[sBhfbA%2pms>IăU"K&NgL0hTmKBg/Vo&OZ,gC/'X=,+50QVxnwr_FPJn$'\&?Q8oGQ0itR%;G40ichNăU"AfilT#[Y\D,>A+Jd#tHPUap;3(%c-2Sf34Sa(fOtkT7k(v*;M4ewpE^X\/rdoxUăU"T(700PMa++g9.pKVnSQ'iEBd:*Y*Ch9\3)4-_R=hRcTxmIB&u<45K94fRGx1\9găU"u$:IB]Pshj[]#EstdM_8xptl2X:,/dd%jaX?'Lfq7E2kYa:7EM^^ISFr*WVEzolăU"-D,Dxt$=R0)kG0vZY1%0'V,+z/p/#3lv7.s_%GEq;ZQ8-m$o\)+iA0NJ#-uq1H;ăU"0dJpK_%y(*%7Ey;6xPNoQtrVk,)Ax06vvn8OgwYH8OUDHZuv$NK(:y9\Tw*32-wăU"u:osXiU#aixK&7Fg#_j_dL=0Nhw[xhPmL<#MZAHtUf=duv<J)Fg1H+Iduu/W8]AăU"wN)\4W;6%YfOHXodzB02YcuN8NhU]=zfl\N:\Mv2yIEe&u7pP<p&Y1*nF^Jmc:(ăU"iR*?IO'7F<11n[rG\8&7X/Ui+cpK#ebF]W&]J::V'\DIJC%gIC25)?OLc+[6=cQăU"I=]AC%ro)q$2T0bvfq*.2YyMVO95[lJm+/2WW?L&udYAXN(?>gAHt)TIeD+7XnkăU"\HpBOPx9Dbj'PW]FL>GZ*\6z+miQ8M]Uyb;Vo=l9>_[#LS*hr;GZW;YtRe(%+RwăU"rSXbM82bUYz7gtsV1[zr'e+FuX,<$&%q#z0x5qzrd=pPN7UZVjZZb(.O.1hSsD-ăU"kwjfr7mc(k6mDM]cD3W;ENausZa#wHSP[D&l,[5AjL]b(5JL-o_('*1^$,zH,B=ăU"rI:7h,uL,vH[&m(Ll/+;,d=9nl<+L[PWr#&\+NUCWKNpNbDE9Z/GrXGn11Ur;12ăU"2_Yq+cgE]w*e)+VZh,k\sV]/*wEpaa\qD&/$9[2wc[OQL$tHg?=_E^VTip63(^LăU"o]*j-lIt_Q&6$X/Wjav4hQFCOX<NNGOG%_gWgwA?njrd,:V[>IrP?d?/]sarC&5ăU"fJIEVi)PB)&J#HMZkoj?q&oUhN9d\=EwrM)]l2BafME8RBXAScxoBH[e>c'py&JăU"^Klx:m8K</&H:TGT%#&ArL2[JTDrj]-TSTAT.udM7BaH&jrzNe5Scc.:ScoGCJmăU"\Pu>v._Bj5&e>8q3(.sFtZFRF%YxSg]ENpemQK)BwegzD+_dcm7&KW[:)2<['BDăU"+(8XKWRa,=RH#ucFmWjCm2/NZw7?AQtw[3icfa'U*<JplrGq,'/2p87c7QjJ5ASăU"%^#Qxb#f4ulRE.t6iw;9o8i];VnmHfp&(qDq^&w#tO%\P8^\UtF(VX3eWDe3]JJăU"HG=)'$t0r]<YgiKn:SCB%n6)OsT>??p#ZN+sWfcZE#J]^I:umk28:aUIWI9*[AoăU"YaG.LU\E]]r.23>pgGKdt:tGZJ\DsFCm:x$FrwKK^J>pB)>l^%M[Os%GWPmH'rWăU"7;N$*3)PWKr<6$j3Z2nrU'A.YE1&#fXnA>k9.uqDB3A6jCAiF3s0Q:3WC#tgbi+ăU"%3E=9oe6%TjamCvT1(Dx[?dF,gkdYhk%C22v4FSJ]xq<-m.drSZrm(8U+^%3<XRăU"VySCZ0&\cjE>[mik)V?ZCt8IaFv)-K<NfjVK3DET*sToNf4z#cLYiN#;[8mm+([ăU";81^H4G/le8Q7>-Il'kufVgS([xXD[S),[RTe;sP0VnO7$^^;d(l/'?sMi?tOD1ăU"8hC>=*dUhgZK1GNAI1qV[i8SJz,zGX(DQ_jKLzY4fR5<)A%'7\KdETqx+#Qq[)văU"^Qe:y<qxpf&i+S3v1vS[r*%glKfBX$Ekb:[EBi-P#5J7iK_&1q6fVo[j8,nh$]IăU"HlwM;MD*n0qvM8),\aDr8ttanldGFO0&tX]B\=J99J$ujA6Ns9v$'g7GrE(aiT;ăU"N:[k$08KL-7NC8OT;V\OLy)c#cp[sU3>T$%AI82b4s5mV;tdriFKI>gM;,HZjv3ăU"H'GgjDMg&Y7)8kb7/&9.ms2tq1^eKp\mMPVNAR1P&AD6yCN3)HFgTuxgI5uZ9>WăU"%M22HgW#p<#c3oN,y*;7(28e_P>'^0soh$11Er^+M[#ehKE>=.l7PRk;BrG+SGpăU"z&34,9B(cBcKeXm<8j<R.+pvKi-suuk2M+vjid3xs*?nXys9-DgWQA[a8tf/[\XăU"[R+0/4Eoffl>O%YjCw2wFEgM<2\r.YI:l\St[$<&9THNG<:SsWp'No6h&g$6:RXăU"tpOk6Y:&UpZOC6:HnguzPFh)zVFw.IWh)dFYw.w_E.5b45eXsuk&k\SIo;pSu;%ăU"w1FOU+D*E.*c7=RxS#1TC.FFl7m74Sn*sAALC1b9ac%]xx[GN2mEFCiMJ$HxIH$ăU"&<L/ocOi\u,nSsDXxR+?b#Sdd1+>ZWTESF_gcQ02oN_n^0us]'Q[Tv<^FCo.g<2ăU"[m_z1M7,88+lWgr.psxG8Q^:jkC(&^?A,'\o3%9)P\ob3V45I71hyM#f4f4Okg^ăU"yBk0Fh%Cr8_?KkxNwFhB2&,J)_t<kEC*%/q,cxFg&He;Y2>wnu<\Q*k6nQ63*HjăU"(L^K/bSeY]DcKpo#B&XN1QW^9[h((Xb6j(x11Z)FT052\_/O0>-E&c5:HN)v$Q4ăU"5jX:dW]+\<;&;^.5xf[VDW;DdhQ##\OJkuT[?7w[brJ3HX8WTcF3?GP=sZl7j9;ăU"i17Z4as(gC<&-tIj3]i;h:8p;On4EN7*on,Se\dVwu%w(5/KNNS9Y;IusqtrN0oăU"TRQK&ZJ+[v+-dQ4.UCJ#jNr/&8g[4^'.lHRnuM5.U/q/(gLW#X4C66[hB>rTg>YăU"NAAkL,D*S+0d]>UcqGBFl%U8%/P+L'iyf3;y;9Q'8$eIJz^KXl5sMntF&(3SR#CăU"&o/VeICuP4(j1L2mR\go2b_XRT.;6%ZaA50XW*8,2zs%?:q8C]Zo+ayUVJCvFIbăU"f22kuKq#wb$_RPvccBQa<p1_:LN=:Kt0<EN>/sx*l':ZsbjDi;;WF&pMBH(If[măU"_+)SMlaqLXWq1%8iRP^A;,J(Od?P30%AC,%:hvPkgMUFL/.0T^5Ov&EhdwnTv?făU"BZ9[dls1J+ZPoNMb5:cpiH%t4?2r+Vu,^839_p1zLJHp3:=ELu$nDM-<UPkj1*qăU"CkU];znH9^<OWp>7.B-O]'2Cnsuv.nM(F3vzGOjE2#.bHENA[jAK-C)a_t3wk/IăU"##f?BB5.^bUo;L;*]z7m$Z4$nO4%04T7THxr/600?qH/0i8z;t4OVM*?KffAMQ=ăU"NdP<p$<SIX,zsWS)IsRjh<9:$1T)JJZ8<p+iAD&C'B]tnCWm/kOT9gFFM2qj<f%ăU"6k1GqFw3^,*TYjDSMp+f,b<[UY:D=h8*sr[qXSS:OYnKQOXG7JOiJkHU/bGs#evăU"kHTYL(Yo-Ver2PL0D>C6BK8S1.X<*(Z0QT:63dD]Ki)[\9nj,O*TWm'2Zj,+]*>ăU">*HkZ'2jE,4BrX52J,Q^/tP$-Uq'hFvjOB4QWkC4k,_NZ^?CAJpx+Wn-F_HWBjeăU"qD%h*g_ZFIYU>q:(,<_DIzcUr\hI>7msG_.)Wghd$=o)Aa]L'bdXg7D5W4q?DD<ăU"SxivCz)O]u[n2ls1m[?4;q=_8Oxqp9msd.de\'Mb0i=:ieVma5<&b-.eN#^CvbFăU"6u+:C7Gi<(kgBv2lz&l5$Juwa(NO*]>eQ$6-Q,o)=JUaIxW:)KiY9UMo3J)_(oqăU"=0l7I23n&[pl5BKI>ijsP]tR6aT7W-*INZ]is>CFS_Cj(_%L#_x?n/t^Hof/vAxăU"?r9B1ATP&zwo.qg7b$RyseR7Gx^#(=#\URws=QRySfC4k%2W2ldcF2kXO2*Ec\UăU"-\a62)8/p$CXe>3h9m-CR,/QC9Dyr+%kO#=UNhjwd#sIALuT^RN:8Q\--hQ%5;/ăU"i\4UZtXdv\Ri*P9Na+]Sm>YEsf=FT:k)EM>+mGxs2[FyL>xucps(u98SCmmh\\)ăU"/CWcO[R7s/?fPXOz6PXbi;)u26ZpMRdiA&omO6fo%zg0Pah4(uB>;2\<ZTx2;%BăU">,TF;y%wbk5porZZVy'o<h.Tph^ysNOq0EVG66(A,'X/=et?^(Ck,C?q3R8(4hwăU"kOn:l5^)YPh(kNM>vk&cXNL*\p4v+1+OL%1aH&L#g8;7wsE*58,AG&x#2K-&BKrăU"KD/m$SOrs>M8bU1hEBr+dfh$MiJrt\s2UQZT,v)XSj2cKTVyV9Y8JHD^zT7pfv+ăU"5e$ih-Qi=ZyJV6,_:FC'--cvdWx<D(_8j06IoLhhBzFUxV?CGgr%fiXu]C^k'XbăU"w67)<[#9O1Ycj/\'8=j;*s^yr9U9aX]Qoxh_]sKRfW6CIunvR2S%DuJ2:Ew)ibjăU"x-3od,UYEZ?ow*uvTY$)TG<j(n'wm&)Ijq7;XNaPa^YDtvn7P.U.$zQvW:JR46<ăU"jcDQK75V8q3,/i#m4FaEN<S1TH9H3aPDD5'sl;=I%503*L\[(zaud_d\v?]E=r_ăU"s\-($$DhJMCICL3ajr/xJm[ZEPU,lN)3J_b-xeTE<&/r-'lB(y1cLg-/ddb6Wo?ăU"fa*.(%pA+)Hvu*sI6DdD;5F:IUd,q>)E/n2D/1l-g%gsP]wLRGk<PGU;GOE-U3săU"mS^C:=oBKK.Z99N,59'Djji)p(:Jig5/Bva=\s\thKi;/7?;RgJ?-Wt)c25[7qhăU"ufcsWpK/HMHs<=Oo1J31.H4C)oONxGfq;$\E1]jiXDnX)vEZ#&N/AMR%9kuCl[WăU"n:n/oclWS&0_+DQQwYTt]nW_5mAkS+SYx<=Mi=qcyA5Rz5CvuC[ix%&up&%'9%9ăU"%%%%-F%^9iaGfVp(>K[%.%\D%%%.%%%%%%%%%%%E%%%%%%%%%f%gtzy%Sgqk%upăU"&'%9%9%%%%-%3tXuG5o2]-'L%%%%8:%%%.%%%%%%%%%&%E%.%%r[%%%hq%thpS%ăU"uhku%p&'9%%9%%%%-%M_ouG3q6iKG[%%%2%9%%-%%%%%%%%%&%%E%%(%l\%%%gtăU"y%ySuh%kup&%'9%9%%%%-L%rqu^G6B6*vp'%%%Ls%%%/%%%%%%%%%%%E#%%%$%]ăU"%%u%gwzx%mSgq%kup&%'9%9%%%%-j%tLB=G/kj(Ml]%+%dI&%%1%%%%%%%%%&%EăU"#%%%)%$%%u%nhiw(f&WS%gfxu%p*+%%%%%*%%*%;%&%%F&C%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=63AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  3D-DOT MORPHING                ia53@rapid.co.uk               06-05-97 (15:20)       QB, QBasic, PDS        923  16831    3DDMORPH.BAS'3D-DOT MORPHINGă'By Hang-Fireă'This has two objects, they can take have any number of points, just so longă'as they have the same number of points each, in this case there are 342ă'points per object, it starts off with a sphere, and then morphs it into aă'chalice like object, while it is doing this it spins the object round alongă'two of its axis's. to keep the animation smooth, and to stop it flickeringă'it uses a 64kb array to simulate a hidden page, it then uses a fast assemblyă'routine to copy this page onto the screen, which is using screen mode 13h.ă'My web site is at HTTP://www.users.rapid.net.uk/ia53 and has a load of myă'other programs on it.ă'My e-mail address is ia53@rapid.co.ukă'if you want to use any part of this program then you can, but please give meă'some credit.ă'I don't know who the assembly routines are by, so don't credit me with them.ăăDECLARE SUB memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăDECLARE SUB FillChar (segment%, offset%, value%, bytes%)ăăDIM SHARED buffer(319, 199) AS STRING * 1ăTYPE ivectoră        x AS INTEGERă        y AS INTEGERă        z AS INTEGERăEND TYPEăTYPE dvectoră        x AS SINGLEă        y AS SINGLEă        z AS SINGLEă        xm AS SINGLEă        ym AS SINGLEă        zm AS SINGLEăEND TYPEăăDIM eobj(342) AS ivectorăDIM tobj(342) AS dvectorăDIM sine(360) AS SINGLEăăFOR x& = 0 TO 360ăsine(x&) = SIN(x& * (3.141592654# / 180))ăNEXT x&ăăRESTORE glassdata:ă        FOR x& = 1 TO 342ă                READ eobj(x&).xă                READ eobj(x&).yă                READ eobj(x&).ză        NEXT x&ăRESTORE spheredata:ăăframes& = 100ăFOR x& = 1 TO 342ăREAD x%, y%, z%ăătobj(x&).x = x%: tobj(x&).y = y%: tobj(x&).z = z%ătobj(x&).xm = (eobj(x&).x - x%) / frames&ătobj(x&).ym = (eobj(x&).y - y%) / frames&ătobj(x&).zm = (eobj(x&).z - z%) / frames&ăNEXT x&ăăSCREEN 13ăOUT &H3C8, 0ăFOR x% = 0 TO 106ăOUT &H3C9, INT(x% / 1.666666666666666#)ăOUT &H3C9, INT(x% / 1.666666666666666#)ăOUT &H3C9, INT(x% / 1.666666666666666#)ăNEXT x%ăăDOăFOR t1& = 1 TO frames&ăt& = (720 / frames&) * t1&ăFOR x& = 1 TO 342ăx3& = tobj(x&).xăy3& = tobj(x&).yăz3& = tobj(x&).zăăy2& = (y3& * sine((t& + 270) MOD 360)) - (z3& * sine(t& MOD 360))ăz2& = (y3& * sine(t& MOD 360)) + (z3& * sine((t& + 270) MOD 360))ăăx2& = (x3& * sine((t& + 270) MOD 360)) - (z2& * sine(t& MOD 360))ăz1& = (x3& * sine(t& MOD 360)) + (z2& * sine((t& + 270) MOD 360))ăăy1& = y2&ăx1& = x2&ăăIF z1& <> 0 THENăpx% = ((x1& * 255) / (z1& + 255)) + 160ăpy% = ((y1& * 255) / (z1& + 255)) + 101ăbuffer(px%, py%) = CHR$(z1& + 60)ăELSEăbuffer(((x1& * 255) / 255) + 160, ((y1& * 255) / 255) + 100) = CHR$(z1& + 60)ăEND IFăăNEXT x&ăăăFOR x& = 1 TO 342ătobj(x&).x = tobj(x&).x + tobj(x&).xmătobj(x&).y = tobj(x&).y + tobj(x&).ymătobj(x&).z = tobj(x&).z + tobj(x&).zmăNEXT x&ăămemcopy VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), &HA000, 0, &HFA00ăFillChar VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), 0, &HFA00ăIF INKEY$ <> "" THEN GOTO exitp:ăNEXT t1&ăăăăFOR t1& = 1 TO frames&ăt& = (720 / frames&) * t1&ăFOR x& = 1 TO 342ăx3& = tobj(x&).xăy3& = tobj(x&).yăz3& = tobj(x&).zăăy2& = (y3& * sine((t& + 270) MOD 360)) - (z3& * sine(t& MOD 360))ăz2& = (y3& * sine(t& MOD 360)) + (z3& * sine((t& + 270) MOD 360))ăăx2& = (x3& * sine((t& + 270) MOD 360)) - (z2& * sine(t& MOD 360))ăz1& = (x3& * sine(t& MOD 360)) + (z2& * sine((t& + 270) MOD 360))ăăy1& = y2&ăx1& = x2&ăăIF z1& <> 0 THENăpx% = ((x1& * 255) / (z1& + 255)) + 160ăpy% = ((y1& * 255) / (z1& + 255)) + 101ăbuffer(px%, py%) = CHR$(z1& + 60)ăELSEăbuffer(((x1& * 255) / 255) + 160, ((y1& * 255) / 255) + 100) = CHR$(z1& + 60)ăEND IFăăăNEXT x&ămemcopy VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), &HA000, 0, &HFA00ăFillChar VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), 0, &HFA00ăIF INKEY$ <> "" THEN GOTO exitp:ăNEXT t1&ăăăăFOR t1& = 1 TO frames&ăt& = (720 / frames&) * t1&ăFOR x& = 1 TO 342ăx3& = tobj(x&).xăy3& = tobj(x&).yăz3& = tobj(x&).zăăy2& = (y3& * sine((t& + 270) MOD 360)) - (z3& * sine(t& MOD 360))ăz2& = (y3& * sine(t& MOD 360)) + (z3& * sine((t& + 270) MOD 360))ăăx2& = (x3& * sine((t& + 270) MOD 360)) - (z2& * sine(t& MOD 360))ăz1& = (x3& * sine(t& MOD 360)) + (z2& * sine((t& + 270) MOD 360))ăăy1& = y2&ăx1& = x2&ăăIF z1& <> 0 THENăpx% = ((x1& * 255) / (z1& + 255)) + 160ăpy% = ((y1& * 255) / (z1& + 255)) + 101ăbuffer(px%, py%) = CHR$(z1& + 60)ăELSEăbuffer(((x1& * 255) / 255) + 160, ((y1& * 255) / 255) + 100) = CHR$(z1& + 60)ăEND IFăNEXT x&ăăăFOR x& = 1 TO 342ătobj(x&).x = tobj(x&).x - tobj(x&).xmătobj(x&).y = tobj(x&).y - tobj(x&).ymătobj(x&).z = tobj(x&).z - tobj(x&).zmăNEXT x&ăămemcopy VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), &HA000, 0, &HFA00ăFillChar VARSEG(buffer(0, 0)), VARPTR(buffer(0, 0)), 0, &HFA00ăIF INKEY$ <> "" THEN GOTO exitp:ăNEXT t1&ăăLOOPăexitp:ăCLEARăSCREEN 0ăWIDTH 80ăENDăăăspheredata:ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,40,0ăDATA 0,39,7ăDATA 2,39,7ăDATA 4,39,5ăDATA 6,39,3ăDATA 7,39,1ăDATA 7,39,-1ăDATA 6,39,-4ăDATA 4,39,-5ăDATA 2,39,-7ăDATA 0,39,-7ăDATA -2,39,-7ăDATA -4,39,-5ăDATA -6,39,-3ăDATA -7,39,-1ăDATA -7,39,1ăDATA -6,39,4ăDATA -4,39,5ăDATA -2,39,7ăDATA 0,39,7ăDATA 0,38,14ăDATA 5,38,13ăDATA 9,38,11ăDATA 12,38,7ăDATA 14,38,2ăDATA 14,38,-2ăDATA 12,38,-7ăDATA 9,38,-11ăDATA 5,38,-13ăDATA 0,38,-14ăDATA -5,38,-13ăDATA -9,38,-11ăDATA -12,38,-7ăDATA -14,38,-2ăDATA -14,38,2ăDATA -12,38,7ăDATA -9,38,11ăDATA -5,38,13ăDATA 0,38,14ăDATA 0,35,20ăDATA 7,35,19ăDATA 13,35,15ăDATA 17,35,10ăDATA 20,35,3ăDATA 20,35,-3ăDATA 17,35,-10ăDATA 13,35,-15ăDATA 7,35,-19ăDATA 0,35,-20ăDATA -7,35,-19ăDATA -13,35,-15ăDATA -17,35,-10ăDATA -20,35,-3ăDATA -20,35,3ăDATA -17,35,10ăDATA -13,35,15ăDATA -7,35,19ăDATA 0,35,20ăDATA 0,31,26ăDATA 9,31,24ăDATA 17,31,20ăDATA 23,31,13ăDATA 26,31,5ăDATA 26,31,-5ăDATA 23,31,-13ăDATA 17,31,-20ăDATA 9,31,-24ăDATA 0,31,-26ăDATA -9,31,-24ăDATA -17,31,-20ăDATA -23,31,-13ăDATA -26,31,-5ăDATA -26,31,5ăDATA -23,31,13ăDATA -17,31,20ăDATA -9,31,24ăDATA 0,31,26ăDATA 0,26,31ăDATA 11,26,29ăDATA 20,26,24ăDATA 27,26,15ăDATA 31,26,5ăDATA 31,26,-5ăDATA 27,26,-16ăDATA 20,26,-24ăDATA 11,26,-29ăDATA 0,26,-31ăDATA -11,26,-29ăDATA -20,26,-24ăDATA -27,26,-15ăDATA -31,26,-5ăDATA -31,26,5ăDATA -27,26,16ăDATA -20,26,24ăDATA -11,26,29ăDATA 0,26,31ăDATA 0,20,35ăDATA 12,20,33ăDATA 22,20,27ăDATA 30,20,17ăDATA 34,20,6ăDATA 34,20,-6ăDATA 30,20,-18ăDATA 22,20,-27ăDATA 12,20,-33ăDATA 0,20,-35ăDATA -12,20,-33ăDATA -22,20,-27ăDATA -30,20,-17ăDATA -34,20,-6ăDATA -34,20,6ăDATA -30,20,18ăDATA -22,20,27ăDATA -12,20,33ăDATA 0,20,35ăDATA 0,14,38ăDATA 13,14,36ăDATA 24,14,29ăDATA 33,14,19ăDATA 37,14,7ăDATA 37,14,-7ăDATA 33,14,-19ăDATA 24,14,-29ăDATA 13,14,-36ăDATA 0,14,-38ăDATA -13,14,-36ăDATA -24,14,-29ăDATA -33,14,-19ăDATA -37,14,-7ăDATA -37,14,7ăDATA -33,14,19ăDATA -24,14,29ăDATA -13,14,36ăDATA 0,14,38ăDATA 0,7,39ăDATA 13,7,37ăDATA 25,7,30ăDATA 34,7,19ăDATA 38,7,7ăDATA 38,7,-7ăDATA 34,7,-20ăDATA 25,7,-30ăDATA 13,7,-37ăDATA 0,7,-39ăDATA -13,7,-37ăDATA -25,7,-30ăDATA -34,7,-19ăDATA -38,7,-7ăDATA -38,7,7ăDATA -34,7,20ăDATA -25,7,30ăDATA -13,7,37ăDATA 0,7,39ăDATA 0,0,40ăDATA 14,0,38ăDATA 26,0,31ăDATA 35,0,20ăDATA 39,0,7ăDATA 39,0,-7ăDATA 35,0,-20ăDATA 26,0,-31ăDATA 14,0,-38ăDATA 0,0,-40ăDATA -14,0,-38ăDATA -26,0,-31ăDATA -35,0,-20ăDATA -39,0,-7ăDATA -39,0,7ăDATA -35,0,20ăDATA -26,0,31ăDATA -14,0,38ăDATA 0,0,40ăDATA 0,-7,39ăDATA 13,-7,37ăDATA 25,-7,30ăDATA 34,-7,19ăDATA 38,-7,7ăDATA 38,-7,-7ăDATA 34,-7,-20ăDATA 25,-7,-30ăDATA 13,-7,-37ăDATA 0,-7,-39ăDATA -13,-7,-37ăDATA -25,-7,-30ăDATA -34,-7,-19ăDATA -38,-7,-7ăDATA -38,-7,7ăDATA -34,-7,20ăDATA -25,-7,30ăDATA -13,-7,37ăDATA 0,-7,39ăDATA 0,-14,38ăDATA 13,-14,36ăDATA 24,-14,29ăDATA 33,-14,19ăDATA 37,-14,7ăDATA 37,-14,-7ăDATA 33,-14,-19ăDATA 24,-14,-29ăDATA 13,-14,-36ăDATA 0,-14,-38ăDATA -13,-14,-36ăDATA -24,-14,-29ăDATA -33,-14,-19ăDATA -37,-14,-7ăDATA -37,-14,7ăDATA -33,-14,19ăDATA -24,-14,29ăDATA -13,-14,36ăDATA 0,-14,38ăDATA 0,-20,35ăDATA 12,-20,33ăDATA 22,-20,27ăDATA 30,-20,17ăDATA 34,-20,6ăDATA 34,-20,-6ăDATA 30,-20,-18ăDATA 22,-20,-27ăDATA 12,-20,-33ăDATA 0,-20,-35ăDATA -12,-20,-33ăDATA -22,-20,-27ăDATA -30,-20,-17ăDATA -34,-20,-6ăDATA -34,-20,6ăDATA -30,-20,18ăDATA -22,-20,27ăDATA -12,-20,33ăDATA 0,-20,35ăDATA 0,-26,31ăDATA 11,-26,29ăDATA 20,-26,24ăDATA 27,-26,15ăDATA 31,-26,5ăDATA 31,-26,-5ăDATA 27,-26,-16ăDATA 20,-26,-24ăDATA 11,-26,-29ăDATA 0,-26,-31ăDATA -11,-26,-29ăDATA -20,-26,-24ăDATA -27,-26,-15ăDATA -31,-26,-5ăDATA -31,-26,5ăDATA -27,-26,16ăDATA -20,-26,24ăDATA -11,-26,29ăDATA 0,-26,31ăDATA 0,-31,26ăDATA 9,-31,24ăDATA 17,-31,20ăDATA 23,-31,13ăDATA 26,-31,5ăDATA 26,-31,-5ăDATA 23,-31,-13ăDATA 17,-31,-20ăDATA 9,-31,-24ăDATA 0,-31,-26ăDATA -9,-31,-24ăDATA -17,-31,-20ăDATA -23,-31,-13ăDATA -26,-31,-5ăDATA -26,-31,5ăDATA -23,-31,13ăDATA -17,-31,20ăDATA -9,-31,24ăDATA 0,-31,26ăDATA 0,-35,20ăDATA 7,-35,19ăDATA 13,-35,15ăDATA 17,-35,10ăDATA 20,-35,3ăDATA 20,-35,-3ăDATA 17,-35,-10ăDATA 13,-35,-15ăDATA 7,-35,-19ăDATA 0,-35,-20ăDATA -7,-35,-19ăDATA -13,-35,-15ăDATA -17,-35,-10ăDATA -20,-35,-3ăDATA -20,-35,3ăDATA -17,-35,10ăDATA -13,-35,15ăDATA -7,-35,19ăDATA 0,-35,20ăDATA 0,-38,14ăDATA 5,-38,13ăDATA 9,-38,11ăDATA 12,-38,7ăDATA 14,-38,2ăDATA 14,-38,-2ăDATA 12,-38,-7ăDATA 9,-38,-11ăDATA 5,-38,-13ăDATA 0,-38,-14ăDATA -5,-38,-13ăDATA -9,-38,-11ăDATA -12,-38,-7ăDATA -14,-38,-2ăDATA -14,-38,2ăDATA -12,-38,7ăDATA -9,-38,11ăDATA -5,-38,13ăDATA 0,-38,14ăDATA 0,-39,7ăDATA 2,-39,7ăDATA 4,-39,5ăDATA 6,-39,3ăDATA 7,-39,1ăDATA 7,-39,-1ăDATA 6,-39,-4ăDATA 4,-39,-5ăDATA 2,-39,-7ăDATA 0,-39,-7ăDATA -2,-39,-7ăDATA -4,-39,-5ăDATA -6,-39,-3ăDATA -7,-39,-1ăDATA -7,-39,1ăDATA -6,-39,4ăDATA -4,-39,5ăDATA -2,-39,7ăDATA 0,-39,7ăăglassdata:ăDATA 10,-40,30ăDATA 19,-40,26ăDATA 26,-40,19ăDATA 30,-40,10ăDATA 32,-40,0ăDATA 30,-40,-10ăDATA 26,-40,-19ăDATA 19,-40,-26ăDATA 10,-40,-30ăDATA 0,-40,-32ăDATA -10,-40,-30ăDATA -19,-40,-26ăDATA -26,-40,-19ăDATA -30,-40,-10ăDATA -32,-40,0ăDATA -30,-40,10ăDATA -26,-40,19ăDATA -19,-40,26ăDATA -10,-40,30ăDATA 10,-35,30ăDATA 19,-35,26ăDATA 26,-35,19ăDATA 30,-35,10ăDATA 32,-35,0ăDATA 30,-35,-10ăDATA 26,-35,-19ăDATA 19,-35,-26ăDATA 10,-35,-30ăDATA 0,-35,-32ăDATA -10,-35,-30ăDATA -19,-35,-26ăDATA -26,-35,-19ăDATA -30,-35,-10ăDATA -32,-35,0ăDATA -30,-35,10ăDATA -26,-35,19ăDATA -19,-35,26ăDATA -10,-35,30ăDATA 10,-30,30ăDATA 19,-30,26ăDATA 26,-30,19ăDATA 30,-30,10ăDATA 32,-30,0ăDATA 30,-30,-10ăDATA 26,-30,-19ăDATA 19,-30,-26ăDATA 10,-30,-30ăDATA 0,-30,-32ăDATA -10,-30,-30ăDATA -19,-30,-26ăDATA -26,-30,-19ăDATA -30,-30,-10ăDATA -32,-30,0ăDATA -30,-30,10ăDATA -26,-30,19ăDATA -19,-30,26ăDATA -10,-30,30ăDATA 10,-25,29ăDATA 18,-25,25ăDATA 25,-25,18ăDATA 29,-25,10ăDATA 31,-25,0ăDATA 29,-25,-10ăDATA 25,-25,-18ăDATA 18,-25,-25ăDATA 10,-25,-29ăDATA 0,-25,-31ăDATA -10,-25,-29ăDATA -18,-25,-25ăDATA -25,-25,-18ăDATA -29,-25,-10ăDATA -31,-25,0ăDATA -29,-25,10ăDATA -25,-25,18ăDATA -18,-25,25ăDATA -10,-25,29ăDATA 9,-20,27ăDATA 16,-20,23ăDATA 23,-20,16ăDATA 27,-20,9ăDATA 28,-20,0ăDATA 27,-20,-9ăDATA 23,-20,-16ăDATA 16,-20,-23ăDATA 9,-20,-27ăDATA 0,-20,-28ăDATA -9,-20,-27ăDATA -16,-20,-23ăDATA -23,-20,-16ăDATA -27,-20,-9ăDATA -28,-20,0ăDATA -27,-20,9ăDATA -23,-20,16ăDATA -16,-20,23ăDATA -9,-20,27ăDATA 7,-15,23ăDATA 14,-15,19ăDATA 19,-15,14ăDATA 23,-15,7ăDATA 24,-15,0ăDATA 23,-15,-7ăDATA 19,-15,-14ăDATA 14,-15,-19ăDATA 7,-15,-23ăDATA 0,-15,-24ăDATA -7,-15,-23ăDATA -14,-15,-19ăDATA -19,-15,-14ăDATA -23,-15,-7ăDATA -24,-15,0ăDATA -23,-15,7ăDATA -19,-15,14ăDATA -14,-15,19ăDATA -7,-15,23ăDATA 6,-10,19ăDATA 12,-10,16ăDATA 16,-10,12ăDATA 19,-10,6ăDATA 20,-10,0ăDATA 19,-10,-6ăDATA 16,-10,-12ăDATA 12,-10,-16ăDATA 6,-10,-19ăDATA 0,-10,-20ăDATA -6,-10,-19ăDATA -12,-10,-16ăDATA -16,-10,-12ăDATA -19,-10,-6ăDATA -20,-10,0ăDATA -19,-10,6ăDATA -16,-10,12ăDATA -12,-10,16ăDATA -6,-10,19ăDATA 5,-5,14ăDATA 9,-5,12ăDATA 12,-5,9ăDATA 14,-5,5ăDATA 15,-5,0ăDATA 14,-5,-5ăDATA 12,-5,-9ăDATA 9,-5,-12ăDATA 5,-5,-14ăDATA 0,-5,-15ăDATA -5,-5,-14ăDATA -9,-5,-12ăDATA -12,-5,-9ăDATA -14,-5,-5ăDATA -15,-5,0ăDATA -14,-5,5ăDATA -12,-5,9ăDATA -9,-5,12ăDATA -5,-5,14ăDATA 3,0,10ăDATA 6,0,9ăDATA 9,0,6ăDATA 10,0,3ăDATA 11,0,0ăDATA 10,0,-3ăDATA 9,0,-6ăDATA 6,0,-9ăDATA 3,0,-10ăDATA 0,0,-11ăDATA -3,0,-10ăDATA -6,0,-9ăDATA -9,0,-6ăDATA -10,0,-3ăDATA -11,0,0ăDATA -10,0,3ăDATA -9,0,6ăDATA -6,0,9ăDATA -3,0,10ăDATA 2,5,8ăDATA 5,5,6ăDATA 6,5,5ăDATA 8,5,2ăDATA 8,5,0ăDATA 8,5,-2ăDATA 6,5,-5ăDATA 5,5,-6ăDATA 2,5,-8ăDATA 0,5,-8ăDATA -2,5,-8ăDATA -5,5,-6ăDATA -6,5,-5ăDATA -8,5,-2ăDATA -8,5,0ăDATA -8,5,2ăDATA -6,5,5ăDATA -5,5,6ăDATA -2,5,8ăDATA 2,10,6ăDATA 4,10,5ăDATA 5,10,4ăDATA 6,10,2ăDATA 6,10,0ăDATA 6,10,-2ăDATA 5,10,-4ăDATA 4,10,-5ăDATA 2,10,-6ăDATA 0,10,-6ăDATA -2,10,-6ăDATA -4,10,-5ăDATA -5,10,-4ăDATA -6,10,-2ăDATA -6,10,0ăDATA -6,10,2ăDATA -5,10,4ăDATA -4,10,5ăDATA -2,10,6ăDATA 2,15,5ăDATA 3,15,4ăDATA 4,15,3ăDATA 5,15,2ăDATA 5,15,0ăDATA 5,15,-2ăDATA 4,15,-3ăDATA 3,15,-4ăDATA 2,15,-5ăDATA 0,15,-5ăDATA -2,15,-5ăDATA -3,15,-4ăDATA -4,15,-3ăDATA -5,15,-2ăDATA -5,15,0ăDATA -5,15,2ăDATA -4,15,3ăDATA -3,15,4ăDATA -2,15,5ăDATA 1,20,4ăDATA 2,20,3ăDATA 3,20,2ăDATA 4,20,1ăDATA 4,20,0ăDATA 4,20,-1ăDATA 3,20,-2ăDATA 2,20,-3ăDATA 1,20,-4ăDATA 0,20,-4ăDATA -1,20,-4ăDATA -2,20,-3ăDATA -3,20,-2ăDATA -4,20,-1ăDATA -4,20,0ăDATA -4,20,1ăDATA -3,20,2ăDATA -2,20,3ăDATA -1,20,4ăDATA 2,25,5ăDATA 3,25,4ăDATA 4,25,3ăDATA 5,25,2ăDATA 5,25,0ăDATA 5,25,-2ăDATA 4,25,-3ăDATA 3,25,-4ăDATA 2,25,-5ăDATA 0,25,-5ăDATA -2,25,-5ăDATA -3,25,-4ăDATA -4,25,-3ăDATA -5,25,-2ăDATA -5,25,0ăDATA -5,25,2ăDATA -4,25,3ăDATA -3,25,4ăDATA -2,25,5ăDATA 2,30,6ăDATA 4,30,5ăDATA 5,30,4ăDATA 6,30,2ăDATA 6,30,0ăDATA 6,30,-2ăDATA 5,30,-4ăDATA 4,30,-5ăDATA 2,30,-6ăDATA 0,30,-6ăDATA -2,30,-6ăDATA -4,30,-5ăDATA -5,30,-4ăDATA -6,30,-2ăDATA -6,30,0ăDATA -6,30,2ăDATA -5,30,4ăDATA -4,30,5ăDATA -2,30,6ăDATA 2,35,8ăDATA 5,35,6ăDATA 6,35,5ăDATA 8,35,2ăDATA 8,35,0ăDATA 8,35,-2ăDATA 6,35,-5ăDATA 5,35,-6ăDATA 2,35,-8ăDATA 0,35,-8ăDATA -2,35,-8ăDATA -5,35,-6ăDATA -6,35,-5ăDATA -8,35,-2ăDATA -8,35,0ăDATA -8,35,2ăDATA -6,35,5ăDATA -5,35,6ăDATA -2,35,8ăDATA 3,40,10ăDATA 6,40,8ăDATA 8,40,6ăDATA 10,40,3ăDATA 10,40,0ăDATA 10,40,-3ăDATA 8,40,-6ăDATA 6,40,-8ăDATA 3,40,-10ăDATA 0,40,-10ăDATA -3,40,-10ăDATA -6,40,-8ăDATA -8,40,-6ăDATA -10,40,-3ăDATA -10,40,0ăDATA -10,40,3ăDATA -8,40,6ăDATA -6,40,8ăDATA -3,40,10ăDATA 4,45,11ăDATA 7,45,10ăDATA 10,45,7ăDATA 11,45,4ăDATA 12,45,0ăDATA 11,45,-4ăDATA 10,45,-7ăDATA 7,45,-10ăDATA 4,45,-11ăDATA 0,45,-12ăDATA -4,45,-11ăDATA -7,45,-10ăDATA -10,45,-7ăDATA -11,45,-4ăDATA -12,45,0ăDATA -11,45,4ăDATA -10,45,7ăDATA -7,45,10ăDATA -4,45,11ăăSUB FillChar (segment%, offset%, value%, bytes%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(139) + CHR$(86) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(10)ăasm$ = asm$ + CHR$(136) + CHR$(23)ăasm$ = asm$ + CHR$(67)ăasm$ = asm$ + CHR$(226) + CHR$(251)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL segment%, BYVAL offset%, BYVAL value%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10)ăasm$ = asm$ + CHR$(142) + CHR$(192)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(126) + CHR$(12)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(243)ăasm$ = asm$ + CHR$(164)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăWAIT &H3DA, 8ăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăErika Schulze                  VESA ROUTINES FOR QBASIC       100775.2275@CompuServe.com     06-09-97 (12:22)       QB, QBasic, PDS        468  30877    VESAQB.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VESAQ.ZIP",4^6:Z&=22908:?STRING$(50,177);ăU"%up()%9%%%#-%]^fBGCq0j,B&.%%s'%%%/%%%%wj%firj.Sy'yVT$:]BLU5U<heăU"u'Gk_&Y9N+&O9ni3#(usRQ+Y%5\(\mYHRA$+l=;fLX<GE.g4uZbboo\8$ExjCpUăU"HZi'cfDTcalv%&JFnbZd#Nsqh)dF47oZX#2G,>F0n96sJY>+xt<2x\X*2GV7fLkăU"3Hm:tX4>]9q$S)Y,nm9ihlNd/GI_E76aEsS^f<jyqapc=m'Qx#&kNb0-THydVdvăU",YWA,z^/#_H_G<U%)wW>[^L_pe<&>FxPGm\4oZi7;/iX+f[y<Wh:C2uW#k7Q^M&ăU"ps3I<,0c_1e&vEikS)QV:[VKUHv[/?p52i2DZPXt>MgFSF$<KQ5pQ)r:(U1&3$tăU"/K27fWd'Z(AL&L^R%X>?9R2\e)o3riGi1grO:,tYYVk_/(kuZTo7r7T4HZ4+ws3ăU"kvyemdZeTbM+tHg6KkU?U*/tqCc[/iW>/.>+'P\hZq'X#mv$=TaU6cmzS8HcB*năU"Z;SY0w-5r2u%p()9%%%%-j%'[BaG+TS,-=9%4%44%%%/%%(%%jx%fvVS[gfxfk*ăU"dA\s[+w6bxC$YB1WPHFG4I(8EaG_O#Be<*fGacJeahx6&uOM1m1UG9.)bpM-:./ăU"PNERlBg+eQ79ND<>40G37w>T7<ipJ\eC\O\lgJHtbyDs'^T]+69p<eyOihIlG&%ăU"_>W5y*Hs8xR:;N)([Z8v_'PFh.FoQeAac=\8a>ixcWR9w+9lgL.1=#2wIcl2bh&ăU"Vs\d=Tm%A$7+(-_'Y6\>0AhJl\wWV?iI^h%tm[3%g;r*g#X(YTDM]$4#q;Cg+b_ăU"HEQ1$KG8S%>Hd^?o/,)$]//('8H%;&$'9/hV)#4IgZOwA+*BWBvi9+N][_a7=d&ăU"LgFRbfDfg6^1B75r&_Pm<vpYW[I60\UgV\_?##r7RV^L[*ttS7]qys$173G/vfJăU"G?Vd'^.o)&,LG3>):lq>QilvSLO+v[H$lE[5/*^fctDt>_7M5&MU7plUF<nIXCFăU"ZmC,'3YJ6AJz<KuI?hT72gAI4TCj6&xJJ3U]=8HME7%JM*QBSqw2'<]Gb5hk?idăU"BX72I[/S1<Q2S'/<$TPbDv#go2HqBAk]1TFD*#F%I'[0dkGZo)KRo?P)c\_2+S0ăU"5o7'kc/Z0wEeNcCtifc1c?G?YV#xx,6LXEL4_D70'L4-7u=aHI0YkHQDZib+ZuXăU"oYD,]s5Qn6Msg9=,d1TnoTLi)pzWf>NJFk)XMl^L7:=Xq3b0%DiM6SnJ<IU<Rg8ăU"fp/w?lwsJerv-Es[v-ctdW/bW6$h0/k)\4Ycsao9tN5h7D2yP]4$[BceCb?pXEtăU">#5h(RV#(,$ni3]3;r8#<9DnPEX;'c^$j5^RLIxtU,9R^1\%Aa-GHg6(.aCW<&0ăU"mGm2n0QE73P1>$2;uI7KLJAliqVAjE>,)cQ:[O)*MEc?VPHZEPPe9=fP2z-NV+XăU"jsg?3a1z#<oE7u$GoL#P[Tq,Z^kQiQHHM+pfaqV=o],]4\4T</9($$&MX#(4dF(ăU"9We^7/%'aYr;A_d_G5i*L_&5kF5xT,\b6Mgh4$5u$gl_kdef$g8Mc'M3*L'%yBfăU"PeVZ2nU[-/aB/2'V7SlRdDg\Zc<Yk)ld\PS;HU8.e/8?E2hANGcQic.;F+h;T'OăU"nG;xUUs8TtVsn[4:vm(UJrGXJ[=ifpOnJY?B0^li+*I\G.jeq2TSQ\nsKOcp?r.ăU"lUomdkU'Jp3e9v,Jo>GbPuS7j+xHU&JlP(50SmRGh+WAJP4s%[e=w'oVFmW?Gq7ăU"h0/&nZa\EeFqTpI:WUg#-2s'XDp=F%N1K05K7-oe?MM$1QacwhtbyXb&W_vXsjcăU":G%$t+3'YYsI+%$r[)UVPtoui1MXB(jlJ]Oq3p8$d:U?[)rMud<fM6<A?i_jvY3ăU"2;H%ptzIBcmMuIoF$/YCkjncAOgj^'(I_]RrcuJAd92u#=uM$\452/UM-2k',DdăU"'ziI.YAiIRc-.HU<-IgU7F8Tl+pHJ%ueJz]T58.-TY&o.A;pY-v_X)wQl'=O#EJăU"ZHegh,8]w#uG&k<QVSouLr-8,w%GjIhS^+s^pq6)5BotBWRIMh/jD2IXr1iX9FPăU"JYg\=BTSo:44)ZWz:#JAc<2xaRksDdrMdQ*nW2o*Y=9G/?*%)Dh;j=';ZO,.GGYăU">eXtcJO$[sKw;H(&uXCq>+xLC^?Ro0RGaXb+U;B;7\l)kavpN0BRXt3i-P^1KP_ăU"eeMBHg0=tg3P#r(To(T2Z4%>ED'bZ'_,Nj9ZxEw&uwN876)sp7tq&A^^(oZM\O,ăU"$x6dDfTpe'Ne<Aj>B-*T<IS2UqcV5L>Lbb/'.B3Z-F_8.j:+<>/dM?u_R[O0Tc0ăU"Fw3LoieU>[B2M:7k=h:Ep2[/a7.;n[r6.li<8j+G9I$?)>THW3&#Wq<D]C3B)LmăU"u91*X<WUq8tA7[$1SpJgE>88?8;_$qg9mQNif0,5F%FT/Vm3B?\9*-f6F*&9LJpăU"ZmO\ml+lMd;n<-*?S]^.4Ban:=t>HnT*-%G.s#R?fj]K.R6p)VFCVc5,]ujY]MeăU"ljI\g5bZ(Dbt#sKh]I7XHvVo_ef1dI9JQ/TIKXJzmQ#L?'+v-kl(sj>9'_5xd]AăU"2YmI4M<DD-whhv(X?am<a?s_p9+7p6oF7%^#r;s7gF2E1B%A$=CpKWI(/Qbg04<ăU"R\fK]N8NoE#(dQ7P25]o+wf>_(vfa9wC9cNhp=hfg5hE9V$ZnD[[E8R-nYn8%&5ăU"6n0)JHC/?D^6Y0k?(9xD3fY3APj6)&WN3r7i.g70tChi/F:W\+u.OPNdu7m189EăU"KuIkJPHtek+_-$:-fQVfW2[.?1_m9WY4bVHVtngJ*4kOFosOqPw9)=F&Y:s2NMGăU"2w2CdmLr:r6ko'mFVmHJpim6fTQIp5\KGSZbNr5BOSo3Bie96c8\,_3'fqBl/*;ăU"5W8?\=aWpWo(GYDJzA1/%n/^Q:>2xM7Q,n'dU/jJAxfJYI#)4eJj[Y6PM$/]XE/ăU"/1A+1*z0s;_YDeQ3?7YA/a^sh32=s(&f1C3[kUg0q^QC1E6Qh#;-Go.Anz7ecGaăU"?tG*A,Ka&aU1U3PGZ=Bl7(zY7e?[.5>1baoi8r;]+&'tJO1(Y/o%NnLrA-u-u&dăU"W27=X4fHWoP_EFb44+Osh4VUp0h,HoO*.Gb<[4,P*O7Ol2gTZ*p\#0XF,9FXqBBăU"*[abuV<n9]e/aUfLqx]]-T+]k8-0t-Sn**.V[P+9c5fe7Jm=i1YI,=VOYdJXg<hăU"#Q_ndLCN^8Ed^3zhh\IBiBTmWatBNF=c?&P9,QTR;=2bI4PU[T6WW[+FuFQni\FăU"f5dnFZc$;<*t#&Vs*I8nyLQ(oPVVW8RD-6G$kYFEpcOi6MC\OL*tQ(L%XLaGUi6ăU"njlb_27LedqfFvlYb/70J0lygiQa>^&av7pGmqDJOP?5ICEW._4H>jU(+eOw7,wăU"MCl)-QO4$m^2?s+AF[VB1qX%luER0Ep<d#&Cfl2j<sedS%wk#HNlAEkUo/ssP/&ăU"iw'8W^VBna8AHu/&wL#*Cs;:[[Sh<&q&nLbBw;3e,SiMC]%,LwQX?EvHVx6ZHA)ăU"UW=FhRRMU7_K.GM%Z&OE,(pzoQ;cZE0A.pqx1Jup97Q_Z68C8Mg=RZQZWh-LSwRăU"ZANgiJ,kI\XQ=aVJ/vx2Yb,4_+F=qJ7)L\gF(*C39#8Gn:i,*D*6</djxE[_U/căU"v^-3AN/'dEHr:)&3HN24X-9X'Nk9ewFHWe[EU?*FIrl\N\nA?q[eOz*novrOSlRăU"VyhueeQDh=N3ErwM8R?U.7d+8WAtVL6umA#t+u,;&Om1Mp05PK/fK*^1=bVQ[AZăU"+'x%t80u/X16QV]D\PFCL[BsHQL8f$_g4iJ=<9P6Nd]+t4Ph+Lm1ulME.\?:r5HăU"LSk56M$SQZ/EbFp?4q*J&?F;'0;hwLM'%_wm417AL1F)Y(W=/B?y-)(qNA:kT+-ăU"R?#MDhqc:YlMd6a,)HJTv)U^;^O;5]1.SH?oT2k,7oF\]SfM1+,tHzPY2c1=[mgăU">0]>b=>%3%IDY7bNRClb<a+M(iS8iYcmznXfpxlF^k72^3<vR\CMo(v#Gkf[/E(ăU"QQ%SV1%Y,k:hM5/<52I<vQ50SR;HOx=Q33C(AK\<RBJlW#$6ay,w3rSp]I)&fmCăU"2;:wCopsEF_qycDJxVL/:x2bFfwK-nY7):('p'H?tuv6r;\pR);0GxdF#R4\(-&ăU"v^JDR2*:F/-x0SO5X%6c]Waa\xZavhiT5n2Izi.&o#Fk?MY9g#5qa(-xp(k8mQiăU"*3aTrds^S5lU0dMMe=JsoaA.?[6hFtdB0ndBewff;=T2^ip7iu.WVK3#X5kJ?qkăU"D;]]R2'#1q>$&k0#IBHV>?jID8#\5n9M56>*Ahr;#ha2um+YEmf\lArVj.?Y]1zăU"7YRL0\ur:Ucx+hYErbCxt+LTk9U5DUvh+dd-hfY\k<nBKwYkOa^$DIz(f,)>q4kăU"^ZZ/4A0NTR_U2?n6_m8ybx/+>reFH4.l(WrQsVka]IBAu?1PPn:nb5s-c1+>+P-ăU"Z?[;01Q]Ah%H[C(&%'Wusp+v2[0W:TT&kLMP)%^([/tI$G[d>pbS_hLTAta-B?NăU"6J:85cGjx+&UDNZ])+BIYCDZ(MZk>1WzQVFr/Nv&RC5'NM7zuQXphWPkF<W#mH_ăU"X:q>(np_t0Jdq3YvCMlxZ\wVNK,BJYzDu34a8cmV+>Cv&1\)v9'M6o49.3Nc.hGăU"JnA<Cg9?JC_r,Gx5w0873boYSUq#If(-R1QM3#Y>*e>$;-01p<hlR.JNiJkWf+QăU"q*;W>e$U*OZC,FDkTBTJBCgn2Ln**OVU&GzE3Gx2'3cxH-w(LsmPS]u<xYJyL6/ăU"XaR$xZK4[.V*rd-(Us8JI]mI3)^u,g#h8yInrLU0Ee>37QXG.Kn\VJ\Jf)L[ll=ăU";OXO8uv.]\DSk*V:A'4M'vgw*CJgj5+B(ALBW(^=4%DfO*K'v+E'WLMUF*y(I]kăU"(GQ:/x'>/53OB)<c5]8.Aixx?uU?40?NizQR.Y9l+]05AqZ)F>GNJ[]OI^:xgHYăU"GYdAl<qw1mnk2bjq[ppVBE^4hj^=K7%xILakW;]%#r2&>p#qfI'-&'&x8_VZ6Z9ăU"7wHBa,2PPj'te\TFfSb#Wl6Ox.Qk,5#R)3,>5,qC0)%egYUqM'kM&KHIAn*bsGXăU"TvdH_v)ZR*2%c?$3\MZ'.A:3n+oNveXm/binwIsC8.8V:[IU^<e<_xr]5)JclX%ăU"LCZ:F+X?b]<8V9t>^)_\k[^>Rx/&:D(2YMmF4Mq2F-JqPc[q[H>/w3Xjn#wVTD$ăU"oTIOle%.^d:j&&J8;/[)ScvUQVQua]QFyCf&5O#GUKZ<4-qhJlAtm$]a_NcE&#$ăU"=]8\$Ex_t=+hj,cs4s.fEcJUJIvAF2I;-8hc2FrSODH<OJ:x76R2CB5yT-mT;e$ăU"m2aHNt&ICKqTA-UFllKqs*cMwLv/T7L$CEl#ALdq::p.5rFIIoj]-+rNx#Z*UeJăU"7iXJfT>;%KMqo$z$hu:7KPE9g%qEi$ZwU/Z&1PC<k$Ag$-[B]q(j8T(.?(Q]h>lăU"I1l;,#R$)$1b/31AX1PhHUW<BeA8>?rH_p#_#+wS:M_O^/kse1j58G%O(UpnjfiăU"%hq0DBnOV5Ju:^E3(<a>L-b&;ro3]o^qcQIWKb.]_JZ]rHYIwAufIW=\uh<rptJăU"8+MTMv?z^>RgDhKS7thS5zSCo?J7t\s(SBM8Bqaw=(&O1&X7/uQx92z)o\?2,FWăU"N-e\eaOfo-q4kIY6c3ZdX4j:?sVD?'b&qi3bO/q,<5s22,PP?WNndt7XLflM6PIăU"eAX%(m1utnDT:')]F-vtb$s_4s'us$,V]VJlJnyz_*tk;HZf5)28r,hwJ[bO'%0ăU"E'IIU$kP3X>EWR/cIsMMV,O#cM+mrPp4(O,-jy=g[A:C;MXHggC[+/Tnxbdi(V&ăU"w<<mnlT;*,A_xu(.,vrIrOk34+onhq4rV4q<*4i[w9;DWF7c>bO]QR#45l#EY2EăU",0$JF,VX[xNfh3e*O22Jubaj_8z.Z?n?c-)#4zG=D)N5;H&T0Mf&bpk7MNRyvALăU"X^O(zD#nBTWg\3Jn(U:G+vZGW78],^4RAR*M4fb-6_t:.9w44;*wjgx5wuu/mXdăU"xUYo<2YmDA)X3[(hfW.<,;[:h+ceeOnOTq'>]aH]]onmljh>Y[_o19f9r#Oup:.ăU"?)H4AupNKJ=#qLMp3m=S6*KdaU^9=7+0QvI0u^/*bD\C:uP/y#uA,4k),2Tk;*)ăU"WRN>9Q<qlk2L*Zp\q3dNe^cJZFuKNeTr[8/a6o7a,YlrHrk_v,3]8?z3F2Vm'o$ăU"C77Oaj1q1TfI*Vf'3[s\/P/S%f(8n8:<4_.\YMdO/1\LGb'4%00m7qt*Qg]j/$+ăU"T;MV$V^;L>%<XX9T]2p8Y$H(L$augqpY<a02^^zekj6uCpmw##RgDPv[>ejcE*căU"iCUt'8JtiWgGrY_m&(\2yTq8FshcH(,V%OJnZT.&O'c$L,E9oUXWSNu/6$wo1',ăU"5A[^hqr]W%jSln..P$3JwmSFM.#7O\TWBGid/&*:mtZOSfP9_Q33$-4zBnD9+IFăU"b6M:G&+iW_1/_VFaf;Y8l&i0etZB2K%#u%_#E.G/2Ewv:O_m+;B)Ls/eX^:(eEHăU"d;O;C]rMH)n;(:msRGEDNwLN^:p3fNk7x3nTa<1P<3/(J.p#O0f:82rkcZ&e[/:ăU"h7dT(k%R77Lq42pTsUE%RDC';e3wXsO/.VIanfF#Q)(tVE(t,qrq:bZY:bZ:<bpăU"=#WSu8.uEEx7uK<86?S)l79N+C+3wBz2uvdG+I0X^7a*N+3h,\>*$m<#?=:DMB5ăU"i#%#LSQ7YGXV8)':J1hoK8J'4Jg2nrtT4JgX7J7pMbof(\Xmvp(bTxrR.i+3NtIăU"fCc&T5WuJo(ZULW1Kgm<>D>>Iu2y&wDgQ,FO;sZ_nB9x]h*^8s<&b<C9I$K%f<SăU":2_R;z7mb+qOK7jdijk\22/;si+)ORp$)5aO>(Ntfn%3:,ZSmKG&Gt.JgV[$nM;ăU"&&O^?+OUmJ)?k]9RHA;g$vaThCnZDZ>whK,;I\ui8X7I[kq+?Qk'-tu.NVcSeQCăU"sr63N,dtRBELQEH2-TcOceHEiNW6<],T[#*gs>dA]GTcK(pW27[lMdXFLQQ.+I'ăU"J/Q3t#dD7f_g/tn4Gw6dq^bVWIyU/o$VVg,Vi&DIfH[H6x,-TKk1F;B.'TQr9a>ăU"YXE6m8$pcp^+jjFIGIJg&c+oBfDhJu=Fl4-'.dCUfU1g[#lJ:)5sm+x9jgHI$q,ăU"EW6bwoSWeEdL0DXyk.3Id+p-.w4u%p()9%%%%-j%'[B^GUh$%H9?%1%G[%%%/%%ăU"(%%jx%fvWS[gfxe^$8x\6?/nDjzuV73M4;=Uf;,[VVH]-g(5o;G%Qhaao^zB[w#ăU"PAha$396usJsmTw0Mlk;a]WNl'Sp&xHKY6b,CNdwLGQO3=bcG0(KAtt.x''RTBRăU"N4(x<fI:RSxc&)P3+iJSJ9R^b&W8nCnDyV^.r+wcQ;DTWq2$Rp'?ufQ[)JI&Hf_ăU"YW2p*L4C3CZm(YFupoblL\Rz8o.AL,?=L#72q[]k(]'G?#VTTv;JJ.*'O.VjR_EăU"mSEu%e8VU%;\g63=]G&J78$5?BRBVHEHv4VbV6dn+c1AC=+#47RX<C+39T*0$bIăU"u>*xO'5RTb2O]79bTJORaL.GBj/kFLHg-mN.A][d:[lmfg4Wo+eP(eITp'C%#(găU"J-^%:#kunmuIl2<xVt.(Sq0o9-CiiVSUrm7#442e3Amvs+NpFlgnlb>&+Os/ff'ăU"w,k*;#uL)KQ2\1]=tw)iLZ=tb:t?1??r[blG7s<.s7PJ&+Jv_-te7mK)Z-T_-_uăU"I[jmST*$StjK1hJ3BpaD[F--zSNL-VL('9#2%aLKY5GiqUF=KE0*EIS2KJ85a&6ăU"X.sgJ6-EPO4016t$/FuJ=-K>Zj),K)eLF5juCe)UKK8DI[w69kh6)?as9v>SUSEăU"k<TD:+WJ-vV+\Fi79zQt:C0;Z\LU/OL#]KYY:\sd'LniD7aj[\pY?<aT;Ck4/fSăU"hr#H]t$4a9.j/p$E7DXo1-%qPl%WDgCO^i?RQh&_+L&gk4EhsCw?ER7YS5GLHw5ăU"g3W)IdlE1&b7y$B4':jiMYwF;?4_-33;.Aa6mFM?cJb^%H)myJ^o$&n+4A,N^O8ăU"o$sT#;oerF$-oB/ab:%m9JG5]LkfmwQtisoQXtA\Oj+ePUR+)4-mqATp,0bEn^TăU"?b#1s75tBipq>V#>28V,FS.VzHk:n;sQheZ^&V,:LAkD:zfIh-Q5DX[tKL,u1JVăU"\V_z_1C7J7*7%[JCk;-*3.loP&xYuLE)+k*hiJ[c7j9&)+YN#L*C-FA+l[i[$eCăU";;-ve*R1(+9=8D&s-'+2Dnez-M)+%qf63u:3,&2DgwRWNZ)69W58U*7#JAuiB4AăU"oVqcYZfI*3mZhU#R7LEhc_gH2fZl<Hu9-Mj1?jgf:'+e^.dv/#H-Ah/x8AUg&$,ăU"Jtw\Q:L>idXAE4L$I6EX0O?j0-f3(fSnb7Zc/j2eFZQ6iP+.e<U-mIDL(ogPwgBăU"S$pjA;%\:843,AX)K<^5gG[41eWN?uPd^75cIM.&dm(fVTVi,*G1q$_V%/5RKDMăU"kGHr$(KR1JP2e4g=+M4B%I_OCR6Tt&]7BqlJXE\k1G5]=X%L/fko+HO^$T#Q>]1ăU"7>VDdqPXBU>3FC[bkcB/5?(*=INdrHwY,EAKK8b6,9;sfplFH#U^orHCeev(d^3ăU"LpLpZ(YxGa;DCGIIHky=kBs1*S$?J:6)jUX>v5W%gMc1&LqVblc4_M4lmM1WH,>ăU"*A+c4l6^P>\[i:n5i?HAHEf'<X&XLK/)V$h/^hOfBDo1*i>2][O8[bbYdKYMU52ăU"*8I3$PcI=c=lZ8qYAVLYRl*[)NU=O5^'i)fp1H0,=NqflGi:%w4e/dAFm5>[_^MăU"4jA3B+d10W)c)yfV>Odt(q8m6#>\o5&bWxU[G8kBn(P=sF*[%s^sIA17?q[(g$uăU"9e[wh<585#/q>\s5e[pmd;c%1\grp8=+rIM8\1U*sh0qbunn(1]Za8=&2C>SX=săU"_EFk;Gs7/G#=CU6\9[(JDzV9J4As]<?TWM]Rh?.*VC<>fS5nrpscDUok>krfb&1ăU"JS5net[>W%b[^PaQ?Ml4ZR[pH)b\,=#?25.QR>B+%TBcr?Ow(<$H[Ao#D5*U8#EăU"-Y:OZKj_5,qV*(G5auCw?x[24ymy/17^l\rUo9'3&%6a3<]Bp/&T.%ln+'.j1'BăU"??tY;LX8^j/eBS%NC<+YX?EH(W&MW-^X#c-&l&KrC3B/;&TQTFJOS6]>q/?vRyiăU"cefCrPLLJnV2beD*Z+koH[myAc+T?&$DW]VB9u.jBAdPHb/&5]?)suJYXF_hA4;ăU"$FGXl7NHG9F42TYYb+S_Hj&Q\YRLUVUwXZ.gq$8XWpQGP:WefF7ihB3lX^/'c<OăU"4B_P]H2HXx=_93DY.[?j$^*_C6STB_8;R>BQ3<oPP+Ecj%)SP._g)rQ2I3wxfUwăU"h]w(-WNy%K_:_:7[N1U%7HCjikz:VVQICpM\Ol[Yg->rW^=GrhSQ>\GGGjSJ+q8ăU"[I6CXhJP\B\CN7$%Zq]%*x9K%QBv:gT1,q&^X#TM*jpA0lTj(tKQ4R*YQ*re7kVăU"H;/gSu&,Zb)p6o:_gdnL3H_OSA>uhpCl>J^2pfb-F&,IFqj#R/E#\/c/:3<*lG.ăU"?)BU7X%1-*C;d1FlDpN'E0'V&<a1)AcdTcuUp[B[5i6jKk[K+5-3j<+h3cf\IU#ăU"IRlb*,r8(xUXE_:c3UVi;[]98psn\xc\*Q3567Dn3i9UhL5clT*'?$AjLAmDuGaăU"%]_)\?RK?QC_.LJR;lblBh%,yEPQdGXT.UYB-,2mQw6+jD3YRqWC*=i?hGgKBMiăU"'_&At?7-oPoRc'NjsoOP\3A*%(DH=+7n9scNQyi,-_?$)QiL2H_e%:vM-ZWu9'jăU"+(nuZk8^da_b,m-TUK\L&_rSF,XBA/Fl^UYKx,'JDCnZJH,uQ7fr?MV]=])?M0+ăU"Kb+5__2'RsQ^^<?b*)'5HQ'z/&E/8Sx3L(-QT1z'bk.9$CWN\3Vc],'0zvU8(iMăU"i[;P1Wslp_[obTO4S'rCD^0Y:^sUiB?i9>t4p3sZ%\cWCt0'MG1bXsH=YAK%<(ZăU"FnVi7>y9k,%-=J)FVWqHXDS_NO)d<**QlnlfYV/^Nz=CjnR%c*Q.:#?UFq+d6nsăU"48[UY#3O.qCJ8vI-%eq$ILO]96$_:p^A<C)n%)o[c*<S5kGFQ>Fe;/jXOMBGtm=ăU"1FMZQ$#+Hh&5WisOnP;kD]\rv-E%e?'pYMiQ<I+)$T)^Y/0,D^Q%g9$S):mw7kmăU"HDH(^UVFJ1=Fb=[HdyCoA8YEqBcg?\aB'CH=C]P/Y>MiQZqEOA,6mo1+iEs)R;năU"sm=vOl:&%5FdS%^LtYS+vWT_b)H#MLbA?A:9qG(c#Ebpa_K)eFwf2&\6#)Qv*XuăU"A-Or#*jQC>O.B/(Xd40f$0g1Nl?I%8c:0d%qgYW157,JkG8p*.M93sn#j3V/F1)ăU"9t&u;NnRdYE&q^Sq3HU:8e5rO7.CJ,TcHNgUAVJGW1Xx_9iV9LtosE$[Y0;[2/măU"R0Ea;6_T$-V8d4DOi)$d%Aa:H9)e;dUE:'^-z7alC7/]ai1#F<^vf*Xo)7Hz8*9ăU"q[?x--lVjV2]O?MHKDE3+vq?jIB7h&VDCDmD\\&(rw0uk%Y8V3GDej53sBb9m>YăU"p0>Ff5erVW&2Z.QV_>J31ei</4s:_Q05CwKpZH.kJ7BO24JP]K34c#e#F4;l=XQăU"%/f0u$GpdGE7%/qFsS2wDM)F#T[;8;z%[fGtmP-1GkcG5&lf>lMe:4M<_LP8r6/ăU"9wPLFIjW9I%[(7kDBZ93$8*Hj2nzm\RsfK__4Yj+PuKIamLJe7dh/qmpey+ho+făU"K'TF?rPZfnChPvO<xNC]_OH:XJ[,AiO4=C<Yfn+];g1]>5$'Zk=fH)*jVNx\t^aăU"gO*u-Kjc.;oI#t^nfiwlpKkhO5hn/\_OQx?(Ch7r)egb1^-OWiLck+anDp#bfPiăU"-Oe3fH##)0:=y+7,OF%V$5n-P-1==;#\\8h$O'+2o*lVklT6U)$1BizR#8iO*_7ăU"x,&OH2^hohML)48]Wn9vzjg91ucrudA##NE^c8C1-qaciH?[44[p[A*aa9qRh.8ăU"K[xH-eo/,2KW&UREc<BCXSH7DoTzO3c+A%w68<5%Ch9.Y2eo5./%QATHw7<N-dFăU"(fF7Leq:C5aq[?Q(mM$/Iv(ViRo'/=q0peL_(Dl'E6pme>3omq/Qhu_5R$pq]B9ăU"gMEt3A._uLq0jCRzo^qRV0$q'vp<mRTT*.o5zNrU[WboIG<r?PyiCHctP)m=-hKăU"2<Zxe%5s;qPsd_sr3mwJ'(>Yj?Gu?cx1Y:q\a>,NY\r58GIS4*,]AlQu*(uI6G<ăU"XC0>60DsUd%7_f]0(bjUr0CFUh'-0UXRbn$j%nf0#OfS+bab*rP<e5UGEDFWxe;ăU"Sv&eKkJbrXhIr^4'8hoki=#ha4yHXR9p-*ZgZ;KxSH^/Icfp1TNl:Hzd\y;(i_<ăU"*:l_5i0S,:Tz_H:OQKgmd(VY74jM]7v22:w)=e_O:<%tfX(hjyTed-%RDgQ;f\IăU"iZ.OXB?kyE:1SP6Qiej0_/s3nD7gR/)Yi,X<#oIn6t#kfKvzT%G$$N;FdJ]sC98ăU"6q$GPet(MZ(OP<_,jOh\%t'7gNi&iz8hEKz'rWPq[NqJ_=415MG.Rh,wsk$L'%zăU"hw7jve(Keh]qQ#H#dAJNwow(z:OugSV9w=SB41ic-PScV.%)-/&ev?tBsR]oI5răU"m'4oo\n0e'UoYomgQgf&#9C9Oq9LDg>*GOC6?TY\4AtQA(q%ExYAdu6Xd<Y=M(căU"$\p,$]N-Bg>;/P:]d,*.Bz^]^ulA_v7$WX+hF23m#j-E\08HSWcj;u9B[h7xeL%ăU"7tjzaRf;.W-jPaR'Z8e./e=rU*Al))AZegLp\qe3UQe5VAlx+\+p>i$T8.*[.RzăU"gq?2SL0Mz>=uMNMNYtgTi?OcTjB&Zw,kB&XLmw+NhDBd6EtYfY8rR91cZ79lW2LăU"00G64.4^:ZPYN)3q)n+Os()OMBi3Ix-^3t;c[,Yn7i:DL-qIr7\P.[9x&#lMfz=ăU"1R.5OBUL2uQK$u1iHE7V=yU3jS:AMfYocV,43S'TR'0Ptp+*QOt<:B23?e?g$TDăU"JB/q89I[d_03l],1;=O0FG?0R?CR<[oF3W7AVGsJ8=1#^JN__:)SK1T7qJ-X71LăU"\vXk6^Ft.>TY#A_Qh&euR-Z8+M9/Tnx:6=cwx>o2-9&s1H6&JO6^4qTt$#qS&]kăU"1-?wVLWnxtz#1XSo<09E.blZ-XQ9%<LdV>AkXHRwfX%v]OnYi=rqRrvp-8dZ27YăU"-p-9dm+-\V<,*X$YjuZmU*HFg\bAjp,J-e>;u^AUlWwMkKHc3FfC'Q5*20qo6K<ăU"E\63-YzntRsAqr^F6xgA*g/R#mwO4-'#H<84^P%a(-r))EXOio5Qk.a?b2Lj;7?ăU"hkIh<p-%jSOp;8I6qU-hb8bAqGFFK.^_AEh/OhFd?bRi>U)'w=4lPhIiDh,7F2<ăU"+dRNHt1],1>b5Htd_;bL=f4raMDqs9'Sv^k<[=85e/t=$DqzB>_e1oO.Dfg5e)]ăU"2<u'e;83J[<budrje=bzDuRnWmF#.dzH:?TpuZsKLB\rW:pq<)BT6g2PDokqfb/ăU"DbC(?;7#$$bLK=x#M+)j]2tLw5[xF2/'>8Gwk7,;TO[i<fo^3QA\G9GnAThWWR?ăEND SUBăSUB V2ăU"s^#X'?.<KB%B9to6R4-8uuB+NR9;pNi4%zB4%9E*9rR>(]4eI8Y4[M8u/*Ae4MGăU"<Qr)pf8Gop%E9.dJx=\#)D7Z/Z63e6.FT0hnIj.+46)-Qw6[%2+,Zx%=U_KNq(+ăU"7A<,^)tu&N$1Xjn^JQ7gue&t^y[b6Vv+e$Humd(Fy?6m/'7&:?29He'OJ6m'>A>ăU"m.i[U>AdC(+h#ESP2Pk#9Q*kmLajF>Vl+UUE(=+lQE%u8UVsjf)ru5sMdix?qijăU"8.1X>hl5)10>E6J--UjS'GG+[W1uZZJOE5Z/uI-ujC\F\\kjSTt0vSVt)q,m?mqăU"YLuo_Sp&ZX4TQ*w22LzSN6cl0\y^^i,O/Vz[w1m2VNvTFW,7X(>1Gf$nn\G-.\uăU"r/NLOyq_x&:aCW;&om)C\v2x:_^8p?kJ[DI0r-bwYHpBwR;(74_E*,fdXRB]wEbăU"#Qb6N5_F#EBZ,1ZdSj,T?a[3m'XX22li0=)aZvBn>OAFH5]C>X^/Ur(v2Z$Df(-ăU"ha6T;taYhJPn;qQ/g6*E6e3f;2qC/*>s:)6WuEK*57yU0OG7Ng4&'Mh08fSh)ZYăU"Bp(JI&fL<]ZCl*JoN9=lsJIY-O<^br^,25Sbh&g[[O;L1Y?wR(+04YSLh%lBFj)ăU"TTd^.opyMD:fG'\.ArhQs*98B5epTFRnAtX\+?rCj5Atb8FsQlrbv$=;]VClKK?ăU"+k1iGB%eX;0X'GM=[_(bAC/iiK2%g;AA5j/<9b]uv#]l^(#8ubCOs7NM_Lg&Q\JăU"&I75Sx2*]EF[vU^rzm1A0z2E8b$FS*<uzIthJG>Gj/.Du(8.juXvvv[DpiOipKnăU"3Y4QCxFN4I->P.6E[+nkE_^ZD/a=)B0fG_<B,*s2'0xCSqjDd>hj0a$tHe$lAqGăU"AvHNcVbl2lhf4WMyCWVrH)e-vJcYYM0'&\.kY4H,(fw^zi6#uZ/;C5voi&&J*dYăU"ILoJjBB^rdKF&<m;dNSz0wmtugaX1mVG-F;pp=N,Zih-vNZfd*YR\$HURBKHh?>ăU"z1q*HUG&bQg>t=%_K^rt)t#fxf'\&NB$$*2x3).z4=?gw%tGyC9N5sKz>,<I0i+ăU"OEnJn$B=qK24;Z5)j/IN)D7+\Ske/L_L'_o7Ar2O)>Ev46xvBO*x6rmPywY/L?;ăU"*sXeQS-]VuHWCeceNT5cq*P44Qu49*\cI1do>.#jX-$1V<N#t%bRNy*iR_hBIu;ăU"e;8LCU'+:MpLchgRD6=.8><15#z)5b:q8f&jE_WF%,t?s%RQ$NmXXI#1Z0hP3mNăU"6e5IZ>\KNYaznY/BP=3ut^-S>h),iKP2]X:o(a5DPm#jx<7+d:;+1bWpcz4/<+YăU"%Ns4N7M1+.TFm\[2=%aFQPc]F6rM7]Wks:u_VUuDve2(gqVNI3ZKBvl<1'i9cPRăU"#_&rSrOiu<'x[w35=Wn4^x=LAz%O#-S^wTtqX-''Z<BtWwU6M):k:n.;4O;=^qnăU"+nzb%0o]D%S;bN)/iGa;DU?$.dKkAy[Dd7l-mAlIIPFLC-4I4+io51$.Jk&V;m,ăU"bQw[]$oJe:$(_igZ3U8OGhBL7$CFHuoie?FhU%SInFd[2h(a9Q8cVH_uT:=%61RăU";aJ=#me^>H5&Hd[eOi\2X5+p<f+Udc:re8xPN^Jrt3W:)-vP\oZW%.pmZo70R[/ăU"\JM:rkd2F;<=L27mTZHPR7K5r6rrILabWVVRlO2&cwQFJJwGdmCAX'tWIQqWI/1ăU"AN>bDK>bKe>bce;Uyd\uF;uhn:bu^rVU&0Ta[)9ZYhT<*aK$ES&Q$M0fUC#*'o5ăU"p211bF45)>N9*8^/W]qVUAZU>/P0pQ0E1SF(SIF/>XV?*Ciu;JBgPGJ6sOL*5)căU"y9Roi/c\b=j<+s'8qM&]F1UZfT:SHUJ.ZRRuSGs&Qm_c__ochy1TU:EP=$cR[Z.ăU"'V</W4LLkRjG['xH/S0/6R=]G5J+wR1ch)z/LTY8D]^unkNC7?)eJYV<-y_ht5-ăU"eU=?J\]Vmh</BRf-x\4T/#qoL3QFSjSedR2ssj)Z/+E3ulmOL<%lcgMom=^75KFăU"ChaDmTnvl&6BG7=ii4-nk3_Ln=B*-*bn+'p]lMRn:ctm>'EVLFPdPs>JK7E$f.săU"4gm&S'BUbgSZ33ux1ry/1:DP0ZX0;a(tD^<Bs/uF)<Bw#x;k[Wj*tfSeoE<pkE+ăU"GdF4s4mB_WQY/TH<5V/f2R$,FIzmgaq]P3pwZDp8<iHX5Kd.84cvLsZ+lPZI_?eăU"bB$<Vt0E)6;-dbu4?RYo;d=/YdudSeLj>3vupoEv3aC$]EpJ4IuW:)vdNb7'W8TăU"*8b^+Cm6Uv,BcTpchW;r%9ZvtmHlD4uFka'8lh<iu4PHmq8K3PJuPJtuz6=,iFJăU"\^ivY\x->cg52;de%mt%Tayo(ODm?#NhzD%m*OORr,+3Fi:z$gGwG-urrnR0?&2ăU"$(ScY(00Jg$pd^4hgeUv-T7(?-6n(V2fGqV]0DH^BYHeA2dlC:]<*NGwkfcXY(QăU"Dn$KQDqAf29eC#FOlyt\P1GnYt$6$j8HD&7VyPDKI;Oo3FlZ9S,,?Uv32oL=X>iăU"i='^,Ps$%yOQ0BaGzCpb=Y:0MeMlUm$Dors/Z2XhoRof<;r\WfgUb'K0bL2q/mPăU"Ii&#sxKb0.Ob2=&5]A1iL?5K$8h9GLB+,3udNPy><=JI5IRL<_Hl<DU=KMoVftFăU"9]]B$5JJa]'(ohb^Bl&:^r3rU$F+le^UZ7r<[pGM/0jeR>7&rX9$Bs&w'[W'7]<ăU"#M&4G0-Vr]Ff7G]ch.aN>[6s>e$ZyNGYq,GMej[vi4f.C9^?R4RGV=tr:Wvg5qcăU"IgI3aJR4;E_AM^?%+<OQ9OX;[x.nn-)G6Qnv<<Aa<6Lrcu&xf]0xG<vpIxo%S-aăU"j\%wvaQ/.pp;v;6WR;/7h6kJ5Mzno0l+Gdpa;aY(.slJ>:0VwRXmL&7Y^i%Yf:iăU":cBU_k/Y69q?1OIc\2:q?rAo]l4+w=Q5%J3<C.K^zo0[-TuSdysz9:P=b,:3wBhăU"<lqYPac7q\mp+scer3kYlnM*o8]Tdj#i>mF'Rz\-&n(u%p()9%%%%-j%'[B+Gw'ăU"](qjL%%%E&&%%/%%(%%jx%fvXS[gfx]g$:BSlA+n(bzuD_,s'(sM3.P<Ugknm#(ăU"[s+-dPVIN4**JDzSYOBOgGauidPX*gHmXDIOUEKG^Dv\EBeLRbbvgSMqdsqFKW2ăU"rb$wP[S^2_:FxH?/*+hZcjHCwuRXSWBU]vunl,ofG>L-6f7r57oFqscPJR8h^>&ăU"Xc6$I3L(BJfiL<0P6/vFt>mQmoTluEbIi6r0:n+:dbuPD\:cRNJ2;gJ*$<)qTR=ăU"wHY?$IV]p9\2.AfPDbsj(YKEC7I7)?pPg(*nY]18N3W;lJIvj.\?(<8Ph0wN9qhăU"nh8K#O$VyE8:&\[xBH'g69RlPFq\qU?YM.Ugk<%3VP>V-E2,g($bI2&QK_6DWU:ăU"UO27iQXFVF%a)Ch^k3C9SImXu[I8KYl#7W>=Yb/(=[hn:ok\iat8T-U1(>]JU1;ăU"^RAiEEuaZsrh*(XUFr2>XXsQC%W'^E,QS33uQ;An+NT2Ubd1ce><CpXUiJ;xYRXăU"(J-qm1CPEr^SnK#K7X$o&GRCw73SvtsRtj,DHo]BRX-UqT=4Z=hqU8/X7I=FMa2ăU"Ol,32InJ\7eZG<<H#o:>lo\5+YZ_3YbR$&o))T\>DYsVDg&A_bzW*Zmx6gQ_i(hăU"P#(J'8u^Z-#i:WOQS58P]s-nhUjUivMn^>*'Rh(-SYtD,hL)vaBU\19R=E/50rIăU"_i*h7vflKb5/0cnOcrJtpuKLK2IS;+6uhl2q7sdevWMk)9<D&#eXvg.$,F8,x+OăU"==>pU<ZUW:jWOlGgaYJ\<kdLnOmh+Tl\Xwh4)ZtZc^TSVCWjk?Pm;HOB83(6,=#ăU"7fO>5g%n]%/*e_%XY:k_(E*2p62$hOnBpud,R8;/oKBlIXD.;.Is-%QGJ/w3)':ăU":jM.Px>?toc-+e_,m5-pFccB0R**-D_w;d+E(^S=QH/(;yP[<S5-,F(Zj$Gt>Y0ăU"_%#.=rYQ2$_[F:lL0A'>gTgLM64dA2eb_dk=]/a4/L3kCLZ#.&g,us)DmG_?,W^ăU"*$ulXt+HsS8F_L)r$g8Bb1Nti<OS2:ap#trS+<l7mkBRDnEoWGc2,ofq;#<Cp=;ăU"Gj;v<$>7oc[?M8QLS**y;JS[j(9l=IpZk#C&(F1l][iW%n3;;v6csl''1iV?F'măU"CG4#Ubs=C54'\G\4ws^-u2#,SNMgQp)95]LX'--hcv_q]WIm-KCFcob=fA1NqVaăU"i*:?sI[l^M5zQF+0:tfDHbX'DOZXp%[pt)APHzDjg3^9$+:?o,<DdlK.O)J;WbAăU"1A_iU\&GUT^8Ppnnij?\V^KZ5%;0?#=Bo#MIlYF2>QF^&l:)pt999v\6G430Pd)ăU"+<Y/gg1t$%_.u*pj/-jFK[:e]PotBf=c4$MomvX59+$]4[*dN2FlGMaq3SRb4LSăU"c3\n%br[CjV9Cf(fwGjiF8HNK*_[&U,84V/8jl60VwP\WrDj&'sSW.uETWy(_KWăU"XRj6;w9eRI(,%5yu$n48\#F>L9+LT:^TF9<a5Y^A,.T3OB6^x:q(6Zx7>9BSGILăU"XkyIlB?a.+hNpGi-10K-t2F*D&KAGp=13M/BEw4cbp^uogMO[3iH7Q<8Nvk^yeiăU"T8kK$'.7E\J#jYV%EQ;^+\0/UA7>9%eDBYy+C,$P\/u-\<L2h>i<BH9JSX4jKnUăU"qHHO5-Sk:VQ]-)1WWI[zJM>TAY?jKLQZeA_Y)_.AjWL3Dry9[J->(/r$6jeQ7\CăU"0B2?b&fM2NaG\oB&Cwk/5TASwkAKA7&M*d%;pbg,0'L^viPYwc94yP*5^RPR(hrăU"6t*I1W/[VOCG[lH?+^MCYc]Tq<b%9clYjSlPU&L'$Ed[(F?LzVh(L;^c&iG^'LbăU"/g<\(e(ZEV*htX2p#u\OpG_uBRos$Sx*whenihA#R#F.DkD6Z.[p1T)\_&mV^(ZăU"Vn,b7TY5,mwE.?;rR]80eC*rx%#O^G>98YEb/aD8O*GC0KFr='<9LI<lNKQNg:HăU"1C(dN*&>UmUc#RRGJK7[0;='-#%5fZYW[:Y#.A/:;vEk_=OOtp8p#R=n4+'.Qd%ăU"Xu'\aiNoMot%v\w8E6^xiDm/Ie3Xr9=wA_+j'aK_OME<]\qKg0DS>/k-GrQA<L+ăU"G-sL-g*Do1xV[:3]&dXTW0QcF^TQ-+4aBK1lR[%O?u?'LGv<_8$Yf\xl_lEuOT)ăU"qgSxDgf>OgR.A;h2WI<+U95^pKd#GspL/2(6RB;U<nqw_pKFlP//QbI\\gW7FloăU"%V=v2J\_(>K(VkU4F$um576+nB=&JA([E1qI+FQO=HdYO\'KzCX/z-W*Szacz$IăU"hEE#Q%eLeuXaV+2wM;e)1t&6n-7FVS1H6?[]0(*%1a5+6qb&*uqJ6pCn475T:CNăU"(7JBGM;O.jR-ekL7BG7(HuSiKO<[G*h]Tlq<%Ke*Nwgo>aCLU[fJ'b>CG/VlG/CăU"ch7wmb)fh>_YYrqu,urv4k94hb1Ot&U(35Yi9XeY9;g9kV4*.OZ-2523%e?FsR8ăU"-5E[4\wy/.'c<cKn*c&I:omJHJ\9'=6km[u1XU1$&YFRhn'I++AIh^o*x8VcqQIăU">/R.H)%^RuMdKC$_Tx[oMA[D5h,b^hc/uz%;;^&i(Eahdn=1/cDkYuAGUX^6/.-ăU"gCM()eS+mRI?&S$_YOoA0wcLCipe(3&0TD'C&^U>_gu9,eKt[$_5GONNU)^.t'+ăU"f*%A]JU5l(3]XUfP)C1/fF*/Atm/2P/=6nwWAo\XsJ:o/<20,TctTQUgaT$<TZ*ăU"poNm\e+2%s%1rg/:S32+SR$#qn5GsVLnQV*TTB+)VBo,5W>(.,RslP#5wiMx(/^ăU"2'4BB=Bt7/Svh#Q)[4ipg(=:sG3G(R4A$#*J-FKaSSPH+[>tC?n#j))?s$uJc;căU"W8XIH4Z'-p?()b$0HKV-b7PT)Al;h3g%8J'AL^\4GjvxAJ(UNM&2B)j'K_z%PC8ăU"Y0*'H6S[CQAHg+sc5s//BC$\TSxWS)Y,;BC0b(8TuoP]N=^bf)P=5A%Qc'k:8,măU"(.nISdDDuJcMnp(OSJVZR#BZti7k,mpSEt8op^%n9P'Q$5#4'-aO/weML:ArI/qăU"[f&G0AkJ\rOCelwQtXq,].T3qL',=3-&hzYO)#aPAr/,Iw=)sQ.LPqoeTL398aQăU"N,,#-.+*cF4++^_ebv\:8sKI$DR<=/b18OD(%ADV[9%j/*FR;W%3'?Tv0h3%%[QăU"GOQ19.t05;&QujHN$ZaZT#h3F^t25N^].:+Rd^dfvLADh1[#iKF'Tn6*I3Ee\PzăU"BdeLM:g3E;:5h-C_V:,vCTCE</8W\E8nomtrlDaFI?Hghn,F.B,MAC+m,90%;)WăU"K\:1gT,xR%Iw<&nR+6pj.+nJR-/BtdAb+>Kib,1jVZ+Xk8,3Kt]]2Fv[E1DxookăU"xjpy;2Ce5ledLv6f2l9;'2#[nXO'UYG8DY1hO0,xp*l+hu'oge9?IwAI*#-Ug+HăU"\C[\Yn9tqgh.HL[(Q$b7RW[k^Ea<FL>W:-*/A&%gT:r2(bPEoTq3%\DTC=O/ic1ăU"i#7bgyRarrc?gvnyf0u]2l3YQjM9yZl)'Dv&CZWMAs?%KpI_?++F2v<:Q(Q\qSQăU"=DG.582\iR1,]2dJQLc-xk:V#AN&*tQmb?i6#YXkQWL_b(uge:C0IhW)BWa>i$'ăU"G,kPSum=^8k*Gl^r#_8ve,j#_-,1D3&GY*c:xGO$iO4sW42iz+F5aj&]>&p,nk/ăU"0=M_(FPp0+_0SW5M1V(F5Z\:fAguTgEk[1:&eCFu[eVj(F)2;X,G1Ln,d$Rl/C9ăU"h\jCpBwY.o$Fnb3A\Fn9#<r28-oJ=WLB_A&qM-zIA%2HdvE4=0mn7*\>=QO%M#săU"y6P#zNeg(K&Ng_D6N5'\GB3?rQAJSA%1,D+9j,n<e+Ml.CguqG'NgzB#7'1Q,=+ăU"M*WYBj^8)jv=X+4<?u0.ij9+M5HK&LNZ3c9g8qiBGgXM%y#V?ckDg\gaG^hpY7JăU"27hsi[cU3oOmm24ur;'YSGgZc+h*0T>4BdlSZq*LO\/q*O?gat+(*Jbo&aXpm(DăU"($?J7:Y&q/mY5;d>U=>E&M?fAaTKm*:^O9+H4lDE7:jlijH4'#AR1Rlj\(+oQxTăU"s+_O33i#^mG=A4_K5%:jaOvpaSs$U%CG6]=iiT*[A[+rULKI6?LQWJNVHkm0\mcăU"aY=w/uitI#&W,hO4dZSt63sG#bM0UkC63PdI]TEn+TGd+k]XEo:V/jb(3/QoNJ*ăU"rd_).ZJ<Swx'5&?ctXKSyY4.\#DK^XD)+3'O$'AwUP2[R4oDF**mNJOL8lo\LKEăU"Di.2k,:Y^.(rySMpif&e#kjqSRb3K2J\;26I&nOZKh;)z_31F0<O4DPShz/GWlkăU"j9V5T(i9ak>pgwUwf.=Ix0G<8'V^ee&dd1kp'r>wPZ2_GtlN$_wE7n;6+q.''<;ăU"1G:EslMdiUe?IJ^t44lT;'R:9jj5Vjz;f-bwp?5cZr*hf;m,7/nnT=;vuOR+z(;ăU"/SCkaifQ*UWDnGw$-o4xd_g^LBm*84V]pVwwd6?W(Z)N>t8df=jScfKJ4&r(9<XăU"-w5C8Te)BMDGHGq.DLBrvKyT.$M4,Z>3nm?Y/BWx/&1h&8>Om?Pc+orh9Ye6.rmăU"b'DC\39fM,j#ZGX8iBe)Yp\seP7_J8M4v#Uc:HB(#x?w.'$x/NnqWmUG9IVi^CUăU"v26fxzOddV7DL%qcjB+ZJtt;K_?-bN26KV3RzK%3QULZ:8Z7(Fe/.M$8,m6UUQ.ăU"FW^0&i9E8qVDwK9OvX2oQnt\-Ng-i4O447g0IVD06t<l2hUFX$/gYS.74S.=JOmăU"3ibGnSe$W\:\Zn7wRnhu%<uwF;:dmmeiFInjG&R?wLW,Hb[(9,>uTbo(HG83I5DăU"Ot'nM.w#(mUHZN=YU'0F5s=u]4qw;,KPTjl=aq\%8vt(;DG07Y(]67,FN.[r\J(ăU"CuY[OZkE70/1%n28_:X<TGu3O-lpUwLTHg_E5^uLUJ>Nd#G/,t\rSzGVk1o+$oMăU"#9$Sj#ePR4tiBX3N94jBGNJkO;,67c*)SC4HajHZp%<>t?Ojc5vnlP,b:+<K[2oăU"KQc[=H./N(?$G[a*%95Z;rN#,6IH2F(xXdp_&H,>5Q?ZP/&]>=EkqicWm>xE)[zăU"D=(H7:2K06Z<pb1Zi60MOhGl'c:Pr(Qh=L\Y(Ns$nnYHRkT5YiD:]Ae*:6,95GEăU"hzJ$pA()_,wrXLWOSW;iUEbc&98=PE_R:RqpMNU16h*&N7]SgiNZa5)%WRKl81:ăU"Y:Q1RSIc/Uir6Yf;8,S?mr:TSc-fPQQe.8:YxQOul&&/41JDuNnq*,1^R?6//uOăU"T.kx,eEL*7e/gxt_/qR1m*=1TNab%N<lfsmEBE%57W=2X1v_=:?fs;dDK$;dO1XăU"]/n\.b>j#CLlfV[AAIMWN5l7F'x36N[(J7^ujd'^rR$;Jm>$KCa;=u8rd/b;rp7ăU"4?lBo3dFCl12r'9kbYthD7U66))]+h?I5,]+c+lX0.F*Y?M5*PA7]yttW2s<o]7ăU"Pu&ee&O_]7'j&j,\^A8de]8iu?Gmec(AMttai:qOHbgEYVA_R^W%$G0hB1L-%BvăU"&BtQ,Sb:A3r2FuhsM>Ye(>cR##rgnzPl76i^,%Mw)7g,O,BgF6+K,]ISN]gnImaăU"rYC9^t[D8Vl;AiOJz.eo5k%oadv>tMCpMxdda.'z,o7^E#yVPk%cJka__%wXTJ#ăU"LLJStK#x'^St9qi^sSQhSc90AG=B9*[9Y0u=NO>VtmNiTM?tHAxZ8(MBxX=&H+ZăU"?_#$65k3i<u+\V2<9VLqb9]2d*?Dgf>'/N5ag)[d9InjMO.%^8o7W*lm:ouGcHdăU"Z8N9&845%a0$?[:z&<lMnz=1QnvO'UK0yb4=z>q)=I3Ay]2RSiAMbtoc4T=A-rSăU"#4Qqfs;a;7f'0E?4YoS6FgiNffE#p/3]JJj)bKwyV't/l\v[bQtrU:w]C,r?eVYăU"V;;;rrUC&A/P>E7$I'JU0I-JCmG2rHdI8pQqc2R/x(\JO_iPn^/T2dgHPc*wXVrăU"WBnCV=5myE=ra^tDxG7A72h-XrRX6i1-K7=ox[%k-<3Oe6t6qmAChdT4m*atnBwăU"X+*a,#e3H+Fh.klxoql<MXevY_H)sYB><q?MM%Y+M7jvRNl,?i*Zkc#Zir6HK\$ăU"9O<k'g-,Erj%>mC=aZs>pioh]Rj_S7YBOh.+lYGJePG28(ky$Bthgo+=D2*-qn5ăU"??9qK[i%Z]uxcJG?&G;'E4=[Da;cN\Py5cyI\qh_Vym?V.tw<7/l(=\IJ(GTF60ăU"scu:.^(3rCeWZ&VIh;EjBvVhms'e8qE?c1Rq1$2AA?tHRElXW^7r5B8qs0UChn1ăU"2Y$QcCO1BVPr]z_KZn7D9*e^E:-izVTcN]p#<jeh,iS,Zp3fX^:)[,''Dvpf\T+ăU"Y<gapR>e0sR*%tJL(*>UMTb5G/fDQ_O'KI[sLL^nfNK%O\QPKC;VGz/3jQ%t^k7ăU"<*,i$/2.4Ywq9B7i=0T<W+>OF+qi^5vIYov2[Ku2[q0>z[)MRl,>*kBb*^T*EHSăU"u[1=]V.C)^COg2/0//5PA6.,?JiOOb_\kAnWipb07Jh&M_J'..A0C2>P:-f&5&EăU"$w0&fT^ic-ndMpq,?I1[B-7>9pmC.c3wh-)Pa8+T&eJ9/O/.dl^P'1EK6P\;+hIăU"st+S7Y9C?(DC%,(NJu&Iu?^xEq%majDXt-Zj1H=G3[c,dx7opR4l+qQd#PGOZ[uăU"BW*Aah^._O?KsqNYEG*bWabA+*))Y=B,qn%[hMU/L^/\:?&6RZP'UFIOXOrFelJăU"s/-fTkrF\HT&*3A[m:G%u(eHuL=Ile2[3Lyv9MoA^N]U1'[?#rpiVcKZoTP)Y?.ăU"uU^o82Eb:XH+Oe;6Qwm7gt=ct7gP6il&Kx8iIPZpq>zXCV%AYda#=0U[?Lh21DDăU"eF?J)&TNC3;=n7G&H(?>2W>:[nLF60_t2>RZHFGT4A_AEf%A7o_LTKDUk>,c&4]ăU".M3J4lAGRO0vAj52QAVhq79&N=:4?h;iY^7HirKeGj;S+tdN=,/LyqumD'%n,./ăU"nBRT+1Ch<]1kNXb\RT\x,tNt^YP/b\r^?.:[q7F0L=T6\GDSh];(^i4R0^pJ$SRăU"KjAA[lsClA6ko>M9+:U3ICf)%E*6>h-q/RaQ:R2Zz%:Eu\4Z7=F[0msd1tYt14<ăU"O*0xKNg;6#>26;W'F.hc4oW8z0TeaXr13.L^xDL#Te9[,;68213Q]m_kL-[v#,LăU":CURD1T(]]$/,0t_pRI3Zgfp>4dMFxWpsD=vG'BnBM(xFypYJ[D]r]sZg,*$+cTăU"a=+lMSIBkKm-Us=g/5:[[(Sc\EH*v5=Qi/4Cadg+:eDL2:^Qu2t.x208UAN.-z5ăU"2X9&aB&.os3G*_L_j:#UvkXd2Ta8Qi#rviQoCx;Pa\&5kZZT\K*RkXD5i(Cf8rjăU"_>/E7iJR\VvqVW9//S9:%h1-Uk4.2uMCETnqTy#9mz%/_oPyb4^R:;ufSO^#%>/ăU"/5+*Z\zO-kPcpL%XBxhQ95k(W#NsyQ>r.5n7sRe:&Vx2bS]M;$</Gju:'*4W)l,ăU"P+H+#JPFQaG*;PV*gd<P0hd:jQR$3kN[^qXBf;u[0O32JJOofW;C#9k>9#OSo%răU"=HKFo[A+wg9]B1U%v?Tc>k8^<;cG:HqT](twa5O8dw4'&>tyc9m7Wkqbsd>fowaăU"ZHH4kzC7Nz$BfJ?pKO?VY<Ei_sWP\N2M?z==N8CUeca.]xV&%f%;X90W8iR5zX:ăU"u#Z)\-v?/jpE.ofO269?G.>:jUFjCUY3^6q#fxsi9BL7zsk'h#9ILgwbxo=lN3căU"1M.iaU:3duSxE%X3R;AAWUV'GoPeP(mWgM.c.ExHJv>=>Qe=3e),id/IQl+qWWbăU"x:iX)jTu/*a$<Vhv4]Qq84>\TJPP][(FW?I.mC]EK#-K_hd%u79X&tj2ni2AMv-ăU"[[f'IIeQcOM8ShG%*CfMG++kVB?h&BHD$S6([?7E1Z-37SM%j6tZ<=<Z:;71-7*ăU"wk=u.LO1nIyY^dQ5f+)\g^:&0A4^:W:CF'CmXi7bwC=l9mY4]Q#Dx(<]Vk/2WsgăU"[v-gmG9+dOTg%F:=V+6BPh)&\IEq$uH9qRC/i&GfExOmq61(r'b/dousNj(3iQ3ăU"Z)dYWdq.m+dow%TJ'a[%9gUA5G1$8tQR7oT-K\1tX?o-:Dz[JdPkJ3B[keD_]'CăU"8I965Z:tm)c#5T4/YJOLA'g)^-W,%x?CciqRg=Z9R0oUq.X[S-s\Md\hMK'>;:_ăU"5_$SM8]hem7Z-1sWGYj#3?XKjJ('fJ=]Eoa/Fl-r]C,7TPOhJURrh\,I>FM&[WFăU"-cHlGIfdgjC36jmO>[%^gmHzQ1*]7])Z1]Qtu,-7OfA#'4b*BV&\oaYjt#mb5MNăU"HI#q]M<J64L-n.>s=?-jj\C,OXf%p^lHuiYi4I9n/(pk\[r912Ij^0Ow>V<j$tiăU"gN25jujli\1.ZeJeivK5E:phQ8XD%NCce#+Z?Ss=s;0xuO$\=I:6agA,w#ch7\săU"Yg(Et&1.;Du+n+FTohS>KgI2.Il-rB23T%Xv0apthgs+RX:s?IX.c.8($Is;,32ăU"=__rGeFIo1']SzA\tyQB.<^.[;8e.1q#(jj3F?bpj9uLC>GUAq<.A.9=XA_\c3iăU"2tA&-7AE#F&r'dVEWC+'+[0S;t+4F#T27%ARMByL\WHsGJPb.];LR#'z]7N&a6kăU"<vF'5CDDix9g+khdH3$4NrX&cKjmD/430*%3K(<3V>85A&\s'Gc3jKXk1m;5]d:ăU"&uGa^D0I8q2A.5IO+vYS_IGzn%PACVI.pNg<R[UsY6gAI=An&AE[2sfHAQ<XAkRăU"^.)Q=w#3Tl+:,J+wyn;u\[qo1)'%IpMo0xM<BLo25\e5_([g(]e:Fa,CunTDAH$ăU"La]YssiS]\H>vYBEhm,LL0$mu*L96^V-N--tSfM%45*<.C>__%A9S<%0gBVp9,aăU"roSPBw##(.4tH\*m[&*;%.Kh:wA5rhRRgTmp\z(LL]\.F-W,t0->^8,CQ0%I;rmăU"i%Sd,jxMFI&qP0<\D1WJB:Urjj3'+Ww[#Xe95a911iS5)C$LXPbh>TM,Bd#TQ[7ăU"%+h47YjJ5)JJY5p&qPTt\zH.J,#cTm6o;d7^2iBhul^nQ618yQr6HNpV/W?0ZASăU"s:A89n8R5mbYta':>(ZXS#[<qsm)bH4)qbCOd5-ANP#p=z3.8o^3QQjFO)I.c(0ăU"H(uJ*woatTuf2jq-&J^3^)9PTixXj$?/c7AO&#[AOX;vf*FS^4##*KC*,OzR8)păU"gLh#\XHmW5U$=5,NRl5_iDtnO[^P8?bt6]k^TJGw90Kt4fFIn;bAMw0>l#_[KL4ăU"6gtb[NP(]IJz^kdts%BeI7jFk&bHMX32qeUG$e^i\qTnX?_'KMM97jBA5YU:A$yăU"\:?>V>0%c3i>iU*4i<s_.Y1yhP9;EqK<sCo4bWX34$J0Ld_=qZu<AKQkya?$._hăU"J87_(^'Np&6O)QrX'&7O9XDvik6p]r^<2BxQ]H'Ui_$Tu_O'E2gWKw%2sc^kCrJăU"q8oEZd$*culFD^Z?2CT5%.GF9J2dO_80Rn#;xR'a.%YAtyOSI(\8ciU\l*N\Rv8ăU"66d^(pVtgiHm8[CmG=\?W*e=wrRM>iri%=z1<,A.%<*]MbK9$-'n(xWCb%0VP),ăU"rCroJ'%0qbU6L)G)R=Ib^U;*_j>cL=uyx';Hk^tZCWPi%9$5\Cd#I0%oD9_mjNNăEND SUBăSUB V3ăU"9Za0P6LUCA$/Hol,DWGq9ZN5s,23__N/KQ$4xpD=Z2JHAJ9?wZ#CXwy+ss1E1x;ăU"c9*2_*tUoQYr3;Tff2FBoj9Vx;BrEXk+_P&Wpe;>[65;vDUSdf5IDC<0NsD_[hoăU"<$=X*.3np5ViRrD_Mlo9,0a8^z;?mZS8;b084_$7h33+9t6rA+,AJ]>[eG#b;7MăU"L?YF2dLTdHkW+e;C.qkuGu+S.rP-=Jf86Rn;a8EXOckfIOrO.C1jn03jnaw:k_măU".Wbp]7VYNkl'yDAFr%BYwl&bB%NWCNM0B,,KhZoYW*OWM(DB'KL3,Cp2Zgq9R^/ăU"/+^5MtI\+a]Q$=,ZSh*FbCUet.xaBerRo9W>Sq/wrmxMUEbzctAi$K(/5(qv,-hăU"M5pl:vTPFs9J4FI:<VF'qTqf$P2j-.H67#KVY*#,>n3^&(_3*vOf4$:%*Adku9=ăU";_0*:G*2E?+n1e4IP<*eGij:8\m;%[_.z8*5*5qIT;G-hZ/I;/TwQ]P2GfjM]t)ăU"J#u7L'\2Kgp[$+BpA<4Stl%%tYLUfc2Gh2iz+j[93kq)z$_*$]hg'X%UC4%mc+SăU"&29_L/W$SIStcP#fe4-G'&_VF4a+Lj#Kds0I2'SHMdiOnMT_P8l[ADyu9]7HdorăU"#8[Z8JjnIUr%<7B;9j[&9pfXQDSan=j)me&up/)]Ab:In%dYf7s3xpmV;'08QIZăU"JABAlFwb$]&GD&Q7(%+g].1UmfrTTdpr%P%2:Ji+PXmSz-o7N)O?'0dA\h)r>d:ăU"T4U=_mJT'aDW8e;Dhv,nIkwZS0L=7o:Sc$Q0a>Kmp8.u7^>D7hr.Mrr^(eghKSDăU"t9[,eqIPs397sx7-/Uh4HL'QV+J^E?=?Ds[ot&l:'C0xbS[bqdLS*p6Dqzxr)pXăU"unefM=0#.V$Tr6\RBDkTD#YXTBcfu5^'>i,TReo(m%6A49JX'WP2wJ]8nsm-c3qăU"VO+?8[STul9F#n<g&NW$?tm5H'gXa>9IA=DdY4O(SrKvgkLtC=N8J[mHvm1,'wcăU"al'<dtTZZ2u+H9lNi/+^PX;X'?GER_<>2V7n]o<pK07D4AvtC/xeu>hHA6XMi]XăU"wQBmjahKqT$JrTQV:amSZRUDYL=J6mA_-1T4wL;<$^)z=u198,F_7[iKIDq?l=păU"-i0rXOju%=SWL)Z0Kl:0#IdEuUk'4J.9OwT^o*x3N,FPJR&xy;K[A9u+hv%SJ/QăU"q3Q*eY,.HXV:B]RYjRPw.gZN&,8:iC*X+D0,Mt,)T:qDd=4(FLb?CPag5yS^/NZăU"kr\Cu[[bh'=Ia02d7hv:Ba_fFNm(lURu<=P(aE.x8QB51pFE9&EWS%CR?mYB)m(ăU"Y0qk:k^N^;5&o$EXcPgcq)M8lRet=;iXijwt\3tDfh$N(_/jP.yOu\h%#K4wz,>ăU"xN\TE.Igy27<4wNuml&=p*CMR/L0+j>N+4.Wo0ath4vt.w>Dn25234]&2r<-0:UăU"Bm1b1\/$KBy4O0Cv;h=d=gW3yK--PAG_g2Rn#;#7fqVTRxiv920F;:P--Kv*xB4ăU"sl#V^w)s]/bl%/YdhQI(aTnF5pBmO2tf3JF7=aUscUZ6=[ySp4\wYKmHQ;Z?M(1ăU"LLo*fR6A+hu2Iu(D'6CQ3JrS/gn.6sQ+sk%0s^&s=Uv#.PGhAm6i>.+sMwoMK#YăU"Db&RZWcC\[B&ZpY/DH$V^Xa9g9=7zW>&DSj#F)YLK$G#Ly'tr,Gw<GBG]7'n]=]ăU"716=ABEh?4>K/-#ktlDPZifGe4L&^1[R9,<<[Y&eH?lWb)&>cM#ny(q*Nk\=KovăU"OOWd8F)$dx)-mSjeV^_WEMe:IGOGhnIrq5hmr;C(Woh:\5eOfp#DB8B61cY>d;OăU"JctDB>(TrXi)=U1&A0Q5x([/xEf=G'KVf6A\yJ'AJp?\vvaCl3cY'SjPD>%OjurăU"(]+dj6)-6JQOOnMfWqcwm6mXNmW)D$ZgVxiE]P;2O1+HJ9EHhK;:>\O.wL&jBcaăU"Sg>a]Ob?5-3ZPA;su/PP/][IsB2[qVHUg5G>Aaw2mY/DEdpC00Y?P4,8DS:K;tVăU"a^GL-mjcJFD>n?V3o8nnm2JRriKxmuufiD#4d'%\pD5(>yT.-n_=I4B,wxq/jG,ăU".C^DOFICk3^K*0>ND%[0[1mGDB;A?j'&(\H7XKO'l\>:i<u-./)H_G\/o&(OQhLăU"5XM^+0R.)Xw3Bf?aKZWI,6?6Ygf)6T5\ubZTLg/esEK<\M-j#g:\h(:5tatt9l%ăU"=U4.<4#%xjagO$Ek3&d+Y50tn%A(]Q9enU:kurd:3?lE?9\h'l1$Z\L+Y[(Y/5căU"x)\M#R'ettnYM)+:e-N[+kmNsBDcacj7dITrD1,rEaILPrri;7lnS>qw\0,W7g.ăU"gsah)tk%mqko2W#P&?Y.7&ih-&^yGX%HDO3UpCWX%s#\9'wp$c2B3cs:7O.O9H9ăU"5%aPF+;KP[PHRf_dT2w'n9WH5w\]iU_2'c6L=6Em%JtU:/aQE?(Iq+cC#I^8vn4ăU"Uo+-nP&0I/w1UKNY&A*QkjJ<xT_mSpwcP&$wtpX:;&f[ZMsDQKgA1_AfkCY,aj8ăU"RWThzGk%#^SMGsI>CEWMOWQIt].]rkSGipWf>Pz&q>f6\N%]]jA7dBYqHgBBmgWăU"Go;p0/4u^B_HHDD&dg\v4J7I]2jPQI:j((kn$f?(K\fku&8_-+CcoKv'(40jug]ăU"x$T6:I;]FI/jS7e['+n(O*Y2&jDM.q-Oj'cj.DUMAQhFQB.tJH&AL#T[^Sv9(nQăU"enG:ZrPcuRFiQlr0Rb7GMLY(r;qmY4=Gi$).pFt>22#+^z>N9uK;f.+^LRjV$]+ăU"1lI.cE_/a_gi2(\??[-(E^OlNc1luMV+4l$>r5qJz16i%GKa>M#YB5TCe:Y^$w*ăU"6U%GarX*N&INaMlbJ:O'i('*XCZGXl-;pl:KaZDWgx:5[1B?e_ij]]<(PF;6<(.ăU"GH*4i/*a^p2A^^ug/*0]kjDqz(^D\=HVj\KwF$;v:8lQIdVESdLC$\d+5n,(YfNăU"COfT#-PG91sUnWK)$,Xs8Q[]TV-5u8Q,=q7]z>N1r&(b,fdF0G#)[g^dc\=5j'EăU",XtwZV(;-Re&6FH'QjZ^Z#4(#z1(hL47*cX0f(aG>&3lq=Hj<ewQAxM9([)B&Y<ăU"QM$dn?j$LmHk#qDuck;/Tw%P'U=4-=LKR(T9LR'x,up%&'9%%9%%%#-%]^fBGCqăU"0j,B&.%%s'%%%/%%%%%%%%%&%%E%%%%%%%%%wjfi%rjSy&'yup%&'9%%9%%%R-%ăU"'[9BG+T<S-=9R%%44%%%/%%%%%%%%%&%%E%%%&j&%%&%jxf%vVSg%fxup%&'9%%ăU"9%%%R-%'[0BGUh'$H9?I%%G[%%%/%%%%%%%%%&%%E%%%&V;%%&%jxf%vWSg%fxuăU"p%&'9%%9%%%R-%'[9BGw'.]qjL%%%E&%&%/%%%%%%%%%&%%E%%%'<U%%&%jxf%văU"XSg%fxup%*+%%%%%)%7)%Y%I%%U'%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=157AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăErika Schulze                  VESA ROUTINES FOR PB           100775.2275@CompuServe.com     06-09-97 (12:22)       PB                     478  31540    VESAPB.BAS  'Run/load under PowerBASIC to extract VESAP.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VESAP.ZIP",4^6:Z&=23373:?STRING$(50,177);ăU"%up()%9%%%d-%V3f<G.J%Rd^(.%%40%%%-%%%%hf%qhSfIxrl%1r>rU75b4wNxRăU">d)iCjcg[YWKUrjgp:w&&yrfxc:0QsoVVg1Q5ZldP2%E='r]3^iYqH28pg=^\IQăU"0JCQ(5i6F0],m_Bs:,$Lob[uqP[MrHRr>=BuCCfR\4HG6*IHaUGmY'#mo)%&NhtăU"/SbX4QUDMsLWt?8Kf?PhYXLr:brTj$t#J%5Y%Xt)91RXoUr)K5tqX_[d\_lNsS_ăU".<h$[R.G,#q'%C<_mcKCg]wqA0A]Tc^mS2Xs7jhaKA^%HTcIFDCdI65()ggKVx'ăU"+eI6u[&Q-lFwJD[]-Ny1GB^,z.9xhj.N\[)Rx?SNZj[W/3sY5qT2O9&NPGf?.G1ăU"QPK6o]?CYQPfO>=JX\Oj]RWoDgZ[/%g/3gK&0>JT7CnTt\RT*EESuBN<Ass5ExAăU"&%wM\1Uy-FeC:gKr[#iS/riT=*()C1)p]1LzF-[<Qi#Z]FfmOO2Fbi9]7IFK2;5ăU"J6BE]z)a(J>VQfrNGf]/A)i3e;\a\gC-Q&.D=^/irOhm7;bzo2fVWqvI5TehC7qăU"]e1R1PQD$.d.KNu\Mo3hcs4L]&cx(9Ih+g/JQIFrtK8Dzdh3kz#HF&cC\xa9bM+ăU"HUjhG679oi[4Td>G*O4V?/n-B.t=:Nc)SG6k]MIjcf%_qPSMo%s4hf/aCR;&#i3ăU"YC-E&WTNx1H(lQYzvQ/,,kNM+;nH-Vj:EK-l1r66f%-oJiCD:^rKLziszB\Zx]căU"m8[g4B&p.Y<o?5BuddGl,,la+g6.[px]-=I[S.#c:SKnL8q<2uaL74W+ItA$.J/ăU"5KLUUud]S,HG$q?^8Neqrko>1YEa7I,_kAz-7zC*+sNL6xe9vGFUxwkS(PDo<g,ăU"&;OOeSs$SWf9#8%P8=c?8Chuiit]>SG&YtZM$Q)C?Hj7Pz7q(wLD#ccW43*7C%răU"5<cPcdy-+uaU\awIyl0#_b:n-TmXpJ)\OBOr%KD;61]=s-E[hi2Kj%9aeD5-i-măU"?/_S)\QYkY[5*ggPNC]8;\\RR\N^;:WrJT3m'<nsCLBHutGeYkbki_xD?fNB%8OăU">-xu6l,Nu%p()9%%%%-a%6%>RGYDB,5[.%+%+Z%%%0%%%%kqf%yrjr%SfxrNN**ăU"BHT/7M;u5mDWIv-\)k$:tE?dkDAKrb\E\[TB?Kb]&.IFX.^jA%AteldH+S9$ft'ăU"+]/N?R8RoQ4D>6[<1&j$Gj0cth7#&#kY1r\J+XbV8n;,R4E1,uELfIII.G^WWHJăU"EfC$s/%c-C:DM5K-hX())Zw#W+7?C2hXGg42#w3kp$'AbVfjLzatI?d(AVRJ_^kăU"xGG2w,\KuUWuZ<,<zJ5<w,U5$,^nV\P01l>]3K(ponD>^cm1D.bnuEB$qMm#GL;ăU"M;KYk(10Y.^<Zu#+\yKmlBK31TB#'PnEGjm9FI]8[XO/;Jh)-?S-7d:32:Qj29aăU"*upVSY7[/frkk,G:-jLt3n>3D(U*jG(jIBLEGL+5;$p,+s:/j7OC4W-MaUpf+?ZăU"BxS0(sk69wr[.3rA#rA+y%+AQAfR%giz4sRFxMQfd):&8>p?YuKcF4JtW91afBVăU"5vX1cdIlNVAk7WQTj8YuUI)E,c?BD$C<v<>u'x3/%h)v.RgQUl^Z0A?#^YB9#)MăU"HULSlYrV4xhB[KiS_6tsHu/R#42Up,G?P5)q\GNXGjs[EFW$fK]28xYBiWtDJ8OăU"=4/D/n.^,8X)VJuG\_p'/Gq'dSIp]j,\#_n;;jnY-2bziB3%b=Y=Rs$9dXh\E(NăU"erke0.BsvWJR5&k'I[M2zMAD#gMW3^K^-u9$Ga>K<%%gwSp*pKONf>RY4n9RaC4ăU"CBa/(UlV[=7EkSg,kp4.J%kgmscqayK:-io92+gmaD#JsGnXeTQiCs>Q5)hpA7căU"BlK/C/&Nry^?'mG#=&VZs+f7QDg12fdUH6[IKG5$r(%=\$Dbx#=n8OVBIW[GAT1ăU"pTk'Eh\eXF%n&KViqo.%w3K6'76N0n]>BGTd$)KPItgQWUkW<qcG??5hbm7q9.$ăU"_WTZ(bGo%mC3*>1BJ2jL$^aT4QYq]ROv[)+*JS<0+1F++6BN>t^#8PgyZ-B#y$#ăU")u&c_c1;eP+/iBve$TKMl?KfMlXWZ*V'H.Z)4_D'tmR\e2h0xM]PU<#n?ue,.O*ăU"5.i>alqsdb>,o+aWTI_p1]o9[mk](Ikr(FF:9UIN,:fqMU6VPAvw8i;Rumo0DsrăU"lwv=8e+dY[XFr/gaLfO4'n3D=i)v/1&grg_$fE5-Z]A2hrY*b+pQXXSk>hXO3FYăU"lqg;$Y%]:]'7T-NFhA;3H_pma>89TNHl1KH3rqm'SAdiM=#KV.;+\wWGi&LC^NbăU"fk>q.#)Gq7\K?.<d:nwOsh$)EqV]kfV*t3_kz1M0mNeX6QA_L#9(ZPSVfQp<RsqăU"YTFqbvFXXqlAUTz794r-'rCyT_M]$f=Gvg<%&9o;gJT.M/qh.DW6WTMd[4LkR'UăU"?74<vt[OCrg%Q.3QRnLRqakCk1'INCgk+[?[&WFaJ/S66vMnDGc_%D=+8BAtPgRăU"B292h,xDseZ\%Py8^=3sTN;,gdpu/Ih>A,>c/4kT9_x%[k^/8Z[q2da3>bXGc$/ăU"s+/uOqo%IL5THvf,.kJgA^H?(,.kJEOV8%kp580X>U8<YW_A5;hu1a3?]d=vKs3ăU"n^+hh4T0R-R_K<i<;jVbr,lT<Z-3lK<2;6#>xU-GD&kVTXBPvX>3joH[?nk2wvXăU"c0M'*Lnr</921-Ya]2=;QYbc3XC^T^jl#uPU<J?:i>J)w4^RX8ue1u:$LgztaIjăU"Pp<>=u5MW8xQMT^jE#*9xB4tQH7\\[a-)0>Qgm6[>ZmPi+_:1u/*>':A:&QRrLdăU"eH4B&Q8XNSHjNM7Q#QWtTI;^%mO.Ql_f7LEcvsUH2D1_RFJErWsx_>1;vhA_/WoăU"Q&*T5Em1;(=WhsKYR/$1=2^HuBP1Xjgn.;XVS&pLZlCU#(S$]xQ,bFhXM&PR81găU"L#l<8CL77c,IvtSu5Xrtai\PQVw/>-%tu_nfW'qJl:j5-rSCPUc%,9K/?PAM#qDăU"RdO>BIcG)A'Cgb:FAN&YH_LJiKoEaR%9]Yb]JVFm?Cm/l)UoB([pwr#8uV]n4K(ăU"e9hSFG^%QvDUeNKrBsLI7yi-(oR?)tmg[i;;=fE5C$7rj4B[OPjq:*TuLbb$QN.ăU"^rCh?lmP0EQXE[hd2o8>u+a4e/tC$N1&ko+6kY/HDe<P^E?QVF4yUY)\TL#?L1[ăU"RJg,70RT1=<<3fk.:ETb:ZHCd9P_rUUgq?k?g3?x:(Foa(kAm#_tP?-IW4x#%Q2ăU"kJe+*A&&qWj58y]>CR%d4_6b^f6kM4.#<v-JXAAScsRIpV;oGgYRO1WNBIkedTSăU"7ZN:bAaxwSJTp:TpUt3iQ07B6$G0&xCCd(\[1lg*&O8G#YYCGS4QdenlDC6B;YkăU"Srv.MAw<Si<DtDq-AnC[UNBLd<Ze>BoXgksU%/-;ZvoK[^7$Lc&0vtyuHKQ^gI*ăU"lw3b7[5WqhVW_FYk0D^9*9UvNeQQgB8_pPL<wY+1)h5=X.k^H$BQ^/3p+q$'gJFăU"_d25]_FFiG3-szhQrT:fvc3/X%pdEy3#_hy>+8DZQ_jzOVlfR(4*dC(6hhSTl>(ăU"XvIgbuf(uIv2[(=kf^6Q.+J4pLsQ62H:ur7A^WXPB5Af^;#X2_Z6nOW_,)D,aWQăU"tGI(:Rt:c(G>moIyP';%*4md*UY<Zg-;B=65bUHTr&$roN6UNO56a[rqEd^V#IpăU"WFj\&T//J,ixINdo<=6m5C$tD<(=->xKVV=$QK=X*bffr\xFB?DO];z^S05h^GvăU"2f;+o?,uscG_WqTt5a1YJ<VmX8x/5]s2<f,IujABfsBeM+bkFr1Ri=/V7V>*;o^ăU",igxv6^>[KPa:*<lF9Ep0xsD?N/*3eXs#a/5;so+44]smE4U:86F1M5033*&yTnăU"lO5,U)]D[<%CPHg<Sym,4g;%5MY$[R()0Cc/VaenwpKm[CYOEgoq)Z:f.fB4Cd*ăU"bR0+K&^i.4me0-(*tco*&#yBsLC:)I4u/LV&'Jv=x4d4co&M;4gW+Hr.pQMs>m_ăU"ivv]k*80K]?QT<Ebj_B3IV;&u*3u**p(M1xYq:^H4=\iaG0I.K)*nK7moB[duI\ăU"rT6=LIS:uF1Sif/jjCdsT<dl'bQbEmB1%w8/&)cU8JznKUra<\hOq/LOqQaH(0DăU"fR7.7aES>V%E.U:d.syoCsCM*=34G%0du,8oF9(ppXft8%q6YAt5gDsU5e1Y+FDăU"UTa[0=Q-mgay3kjVLAeXeD.gg;*cL[egcgPQsneI1CWVSuK'%e#llrnnHgA<'XdăU"pu\cRf'uDup%()9%%%%-%;Qa=G5Lv$J'h'%%%q/%%%0%%%%kqfy%xzgS[gfx&heăU">>SRU5?.U<Xh?<&yJsoSkx%>rLSO&SEG*JW/hy*6B8(\%B,RhUe>88B-N_pLO/săU"C*AqMjtGFpd]^E<U-)FZTOz6EfU2UG7=+Z(rGVZQ?ht8ag=TmPf:*FQX4v9Rk7YăU"^dr.I&\N2PB^0xl<-mJzc]'MQ\c-7XeZGrgnh'B>6._61/xU_[Sg;wvh,.,brj+ăU":a>*b9=F>HqB9foovj>DKpv5AM,\UC<Z96^]=0.[.L$[RYW<T<GDWiC%;'wHt\;ăU"ig$2(D(iYO17KT:CpmTCxj<dDM;:%Js3_Fv5Xkf9F]dZ%8Zt3##0H#gJ=AZ6d+=ăU"x^d]CZ3ZepdQBOg=i4I'KS#\iAC6T2V]c4M%tm)/dRIEE4[dLILJ&IVDHPW$]:DăU"%kCkvsQ;ssR+cm)ZFP.\VKFl?h$8/b5kLc/:rbHlOJqhTKxqgI2Q6qE;pi?z-Y2ăU"*_U'kl50Jy(A^T3*cBRMqx2oa?m^I*w2d;NT4%;A.n]\1NkHAbsPe:$06'7(nkMăU"d77odTq89=2)uW7J'TaGP#z-Y&%MajJ-+q0%ygNCE+waE%O.'pM)CS-Rea=Jc#jăU"7t;EUvn.u)h.45h8&;=Qt&HI<z2$g]EDk6VxXMdnt8,#%Ni3QQKV[Be)bb_wQ9*ăU"xd=K[j2zA27xiq5A.GEAe=k],w>+7iT^JNw*?%^A_iKOBCEiGL*Ik(JTkNM36BSăU"i'\8:tgv).IoNM(MT6bX_qI<wHNg1Y\d5I0EqMF+><NQT2]>ekae>yHDE#RZ3drăU"&Vk?%fQq_/eDcB5yZBSw-Xq3I.t)s#A02<2Jaa:_[L4/),.;=rU/jOxX,>TIrkdăU"LaJ'XuaQ(=[esZRwk-<BH2*.I&&dqF<iI[ZsfUAO#tcyEQe#3_U;9'oS/T'FWHyăU"CG9W$O0X#^y5e.X\oa9h0P1:DQP/vD5=;EXcXCpr<g6%sjcbvk6'o#up%()9%%%ăU"%-%;XaBGBSGog'a&%%%M)%%%/%%%%wjfi%rjSy/'y\x3J=jU^9Ll[4,oCdFE.7uăU".Owm+1Nl_g/Vk)r/JX?._%\BRpK(tnK4Kxy53B)djEtAHo2c$A0d3p:+7ZNRr\QăU"vGU/w.A8+M4-SRUqhi?FHCuO8OiW7=9D<;]1U5'?zJbZDAYSsH$y^f(>f>o_+C(ăU"IFgPm5/1.<Q&k*LI&jPV>W\M=:(lY:dt2&2.U-8g4;\']*>1SKxuc^m.p[kdx9TăU"WVrp_;.>+-$KDCe6d7AH\Jz,l2:x$%SIYnpmBbx>=/-3\I3]+[TSNQ<F2,_#&JKăU"Sog)lQ-JCyzrNLUm&I5?\<Nk)#t=)532(H15_=&ib\-d9I'VC_N]]bYw>.UVKTXăU"oS'wZ*v%Cuu.g0Up-zNN7N:3b2qQvI/T>ZkGgXl;qIknnW\(]Uj<omn?]c5b%&$ăU"=Q)HGq3N2Pl7[uhZ-1Rizu2A?VU8Raj482ra\)&OC(5T\(?TQ0P\ZU]+9KAi7S'ăU"&J<bF?4%tE<OUU7PLa7BS%JN%ar%.M[US<htwTl'8*n9KQUoXJ0e8qU6+s$r>2+ăU"C;e?pHb^,,_^Td?jrEp%4+f7CGKqcw$UVb(1(h^ZP.<Ujs?$lTnj9F><#ExiwQIăU"6dhpTNlBJ$n5Vk[/0i'^Tup%()9%%%%-%8*.#G[h9ki&#'%%'P0%%%-%%%&%jxfăU"%SnshWN%T=B[U5L1+XN=(z*&wTTdQVAS)?<[-z(-2L)hU:eS\yH/LRN98XZwTCgăU"4)4ec)'W[?_[VL5?mZspL\b).cmG2$KWV)?m/l/\f-j>.9&BsR1q7D<^7ZhUiqUăU"wxM4Py_/6#-WB8Ap<1z2.n=59Ti$>])xLguWI$XaJ2cn$S9zHq>TG6a4ffM9c,6ăU"-g_7V'PNR?n&Us-4r6JhcQf*(z;%'.N&)E9);9adqfQY&YfCahhaLe+geiUWstMăU"#88Wsc7jt^j(q2V7SPEMk2E]5Y49oTwQv?iK6F*pk7AaXA-p#k84+01p.vsW>CSăU"uTS>tlf&6i<,%VD0JhqY?p1]r0w>extGm/>H$V0G;5^h<lJ#&TV7=b2Hb>on]l9ăU"rD:.*#zU1k.7M'de_^n2R$Wg>QZm_,8O8QL=u#u_F3Cg\v]2C=PYgcfyflIbFvcăU"xYMcO;KuLP0_fcPEn3UBBAw4N%_AHaI]8CEM[veUuwp?pa5?L9b0c4C]=(egHMYăU"pHT0Z1A8bkZ[_p:;VS-:2^\U1,ekT\fG[abrXG,?7ojG]+eiPDkAfLA29/?6dHCăU"CYao2f/[='Lq>Cas\[Wo%m[(]SBMB2gXFnpc;/0lgfUpsa+/T^^L_>+W1sTuJL_ăU"u^i.G'nRzJ'..x_GJtc8Fb\^i0k-3>/$fc.E?WNiAB[5.G,',$/);Y8'a<bh)p;ăU"Op/p/R?t5;9,1Kp?1IgR/]bZVP?5'3(\Lw*if0_p\LumPG>iA;>w%MWp,Y_]])măU":m>7n8FCIFAXn=X+*r$L,v8HstUgw%+up(%)9%%%%-%wa.#GD)XmaT#1%%+%A%%ăU"-#%%%%%jxfS[ugqN2hNC9oN:#hfesEl.0[_5$*S]u#mIl,NJ/pQ7[#+Vb$F4,'4ăU"nu.j1B;+k4,jgA='ftC&QL##Viipo[v9O^;zw>NSkb%#(Q:WRAQOBCi)it1bAqCăU"iwOQNu36hVcFGqYiImrwfJn5guUht5thpWUZ0hg;<#9BM%0n%kO#IePDJ]5FgEHăU"pF6*I)z>K0As+%3wF92voZG)^uz'hn(eCp^6Y2E=HW42=TzLJEMgH/F14*</U/5ăU"4v8%+g5Sy$mWu-gpG;#aV9#1pHn^OcN7Wgt/#=a&iytiomiWpb'oAi65txLT8\băU"/?#qa?:8fXf_HNgG5\'hCd80VI'ji3uTJJHnmtDeABo=>LB)HZ-aXx+]tN9NpBRăU"bQJkU[fZN9M\Ond=pgAt$iG:URg7O6l1On4H]$sl=ur#ndXm&,BPAtY'B>haUtPăU"%R^W8)-I)l%GQeCkEk;KlaQtNESl[vQ4Q),fesy'f*$l_U_*2zZ5k'3>fVbO>DQăU"g'G'JKO;3ciD&:q<1\K%fVB_fS3*\7>82YWN]SweHw40pfuI]QQ=V2^jDd]\#m7ăU"4Wjt?0niRgT&aeE:/EGo4ySg/>1J(\M.D)XtkA-PnK3t;)H0Jkw>Po,oMG,;j%CăU"f(j9/MXFxn0sNMWOI;-Ut)?Z\IbH[<+^o2PdY>ZnF0Ac>8;)x*bR=yu0Yx<Ts:)ăU"sOeVb1&r6CrayTfx]_FG.*ddumavGlK/t#x/,s$?OdeHn0ParN9f\]m15*Gz32tăU"$l+7-'KJS>Z-KP+=w#25u3-T\9v83[VF*O>lZtu'>m'gioJ8dOsJG44g\<'PX*XăU">%Iev2SW.4*>GN.P;GbNVPdTEnT,QJEZu97hb]/8Z0oV4L17RmE.4fP,&o?)o0lăU"QG8GFxYj=n>pEK_1j8_*iHZ()6l%ds)1OE8_#9)CuS+*<+WEwC7Ng-1$h-7<0_păU"Q7>f1vuXZx<]f+m?%49F+aX:/l'ZsuER1T<j8?C%gbpIOqqT'ee0dmM62:*MM=:ăU"$Gu:Z=01[j#qrM^'5NOcx_teJX?H+atqQrPf+vE]lG;sdjboVb%-vUsKs^)g4h[ăU"3=A&>#,FXe9d7jYkX26hGPfDi#Srq_&Nunnpt-HA0(zAX_ahiOKbm9(>^ri6F6GăU";+tpZ*UP?kBvc*cklkKL8)n;U9AZR<<6r&f*eGAu3L]3$a.sDB<<\G=)q#+\&utăU"rl0jMrRiUl*gY(=3\eZ#ZzZ4-/C7,Isao8Nx.fUDJo&eT,5\n22;n/1^o.?C;2$ăU"*jxn^,O2p*\?cK)QPBRdf8UNuxDJiy.KZqKuQ#PT8IyJ>Alu,(jI\nl;)470+hiăU"RAdi-VwucS=L7dd5e5E&<ctR:d$#,0Roe25<b\0-g)N)VsKJT%Y+qM&x7aTFTR=ăU"\lRN%.:wo6BP-QKnZ/(*OnFY.F.Ccx=Nafu2QS(tavj90(dwY+gufftI9bA$>_;ăU"+/;*1vwD%Hh0p.>\^V=zefDjdK88HLha)EYRq1f:%;W(iFy][gLtqQYUMoB;)oDăU"_1Rv$K(JnZ%I#%hz?Ze$#RGV\[zOCCPt$s7[>#,o4?-CK=tY.)\\5SDZPkh%2gIăU"P'WtA&>nP(mbp)<P=q>H_<M3Vj6>L;qn*:?j?#_/O3&P/L<.;m_SR)G05oUP4n^ăU"4AQ=OQEKt;)=O>C.gNDy:N^FTMi(o,KJ,GD[(>ay[O4_:Kf0Q_bPO]#8w;M)oWOăU"BU7*JN^fHOh+MhtK'e,MK&,WioauuFfZ;<BSEOBxo9]9DH,UF$tB)Ii<B<ObK=qăU"yekRW?$)g'$o;Th>]REP[po:s*aI1:4[U;\c.-?hn_[dY+S4V,0\-mq'Pn$nD_OăU"q3Rd??l%'$KsO8K(xat%uPc*2['FjLVNkrF4G_f*1:O(u%esq%8p9TPu[+%^TsYăU",o2KrT)*fPf-f9)^PD.3x[pPv+*-%Pv-+-sPUvuQvAdiS<TKoB+ccPob)+IqPh4ăU"?8,t%C[K3\)8WPf/7tmASfIgocSg]MoX2]-pPFQ[KB)]bkSvmgPF_oKT.K[ASb(ăU"kd_#b2&)8&VfM&dYY1-*gPd?ba*&y?5tX7Jg,f-MOoN+ImnP21<m*&yiHt&-QKvăU"+I.ZF\nqI(ST$68xpGS'RginMVxGj3[/fw1&Qj/mZZEpf2mNPkvODj.]mV#236$ăU"tMwXhB2K/4wXema*M9M;Pz4Ss*>_FdGXfEF7C[*KA0_(Ct1DH:t_Rr<[:]2\a^kăU"[4,]Li0_'XEG?Hq5YY9>KEk=G2FHJfmAbqXXafk_B7ao[[$kmJ,bf=\A7$m_);XăU"6A#%F8HV?N96.G3k1+SkrW+^WZm%CJ>.h;naqEYHdB;CJ#<HZ4Bu$9=h]BFHl.XăU"M._FPLqY$Z&(k?CIW\bG($H[WJ=7f$9Pq_&[7DKh%vW$nqK$56b3WGj^]HLA8KsăU"[J3k13WRjS_YIYa3MCi1.H5ZI/m0VP-NY\#mLqxGnmtL7A,<U43QGFiFlZDoDb]ăU"u4r$<Ncu2aqBL;iY%L[5M;wtcj06nVymS:<Mvpf>qWKx&^W/WL8cRwLxIyh^vqoăU"^(8DvtfR=d%#wey%he]i;hwCdsBY#sd*dx0+\sWyc1Zq3bDD[v(+ONlyRitf5NMăU"3d9LF9fm5)HwAAdOK9#utR0)csw^:ilKx&B>ZxYtwr>(?Xn_J9'r5,xM$i6^bx6ăU"(&x#zKc*qY-mMfkNF%x=>qgLxKHW9][oZ5nVOmc3KMadi4lMEb<^3M'_dimM.CbăU"D8_rYycH,(^D.yth>CzqwNOGc[mWsWF]:WdSfNMfI9A_v3dA)ry)N/]IQavNO^(ăU"Gyet7*=^w#NPvBBny^rBczOhPw>I9U+rg&qx^8+Y;)9/[ulb>9OToboT]q+.fRoăU"q<jG[2(A.(PTe:e,qBY4K4v.?6bMlo:i6su53O-bwrZE1C8,[$GnBz.6X7n]T/]ăU"OvBOtE#'jQ&APkgjs-E?=,L:?$eQl8P-5*Q4tOM5Caz3C4BIgH*04N4yUnhc&%NăU"Gg)wto4'3?:fi#L>VjT65JLl^K_rFXWF4\VF>erFU3JLLcjk\YKP-1ah?#2BDguăU"eq.Re\&A92Iip(Xo9q7REvF>q:.^BgH11__c=XFmOa&c=OAuP&v\[v?B,nJ&Wd3ăU"0o_=*5V&?1.X.>uLO#Q)*J(DBG8%FLx#K+K$(Wr?(j,f#UJWh.=pg[gDZ49/J$uăU"-U]-0m'-mhXkT)0(mu]mA>PZ3&q'Gm_g*,0*h?73C#e+_>a'msV&7\93r>uo]3lăU"[KeVOt<Di(s1JR%I#uro5l%u5S,F6lg84,mNTBAElczH\^N$J)x;9oSuQMnjR;AăU"'qC1PsQA&\jf0CB%6(UUDQT(_uCAo*9EUv1Bj+eCq\X9me'sMhlMu-0>P8W<_PdăU"wJ$1's<P?'6O=zne$dR3i9>2rvnk^jO$62B/66+,0U4>wTB[t<QLJVko>kshb7CăU"(LL6tM<V(o'#Ws0-DqX8,gm;Db_9l\27qJLDr&5=7=aGhb/[3^rQF3^9t%g9fK:ăU"Ah,TV0CDy:qgbw;=Hv$qL)ix$veL>dXcZw[g6h1ShSNjtFZUHZMf:JCl%DL%;.(ăU"pr7rl\6of-^87pzfPTCB;'uXX.Q%E2w'RVg3_h?g+4ONCZhxOR/BW^t&;g:SJ60ăU"Uwg=r/ktl3mJI\-\0xL^\yx,QZMB5KTcI*xGb+V,>JZ$Nf18<>merc#B(T+,Yr4ăU"ih\9eKxs*l1wn#M>47v%)_NZ2N?(YmvT+YSV\69H7CK)C1?[t>2t79;VQ.+V1+kăU"oc7?VQyoc9MXfNF=4H84=U5;KDQ_(0iU?e_wYy+pDt'CAi=#8FU&BU8q&<zZ'D[ăU"icIx*l.93H/C4J/^'p2jopr$CmLm<9sUFhx?>5U$VVe]H>rgh5].m_R,J/,1do\ăU"H.bP$K[ZmD#p&dd3$pDlTL2:2utG;txrb)5U3=WZ7??6oLbE)Iln5b']/J>dei1ăU"UCEi_'t4up%()9%%%%-%7]-#GHh%i;%x+%%&[M%%%0%%%&%jxf%fxrS[fxrfh)<ăU">Smm5w5b$kD_5*X7*%I<zEKg'8AIgoiw(I$szXc%fDu\OQOf'BktTn\,MC*;hOWăU"W,M[gytgRM6F66bm#CENQVR^:l[*c2F,N+=DTq6.AtTWmWh#puMwWwmCQQrZ^BiăU"K='##]UsGU?s*17B/,u^xW<Fng$wJW1K3>l^dtK/tX7'uhV_rZ3AKg3[:*$Z_FKăU"txSr0rL^;(Y(Ti?raxf&uK=]6D<7CJ9l$rLhD<(kvPL%;SfZ\J5s&6#.WhlSGvZăU"*n_VJ07rT<*+hTR;WcaAVtMiY(A-J#T#FK2+41iFJtTJr-8't041Z(_JQLfn[s#ăU"6BTZ:Z#Mtqx/YucJtMetISnstZfog1JGJ=cn+&^TdhqA5)2F6SZ&LdI[la^'0ZBăU"6%gC4aEcN,vM((>bc#o,c*<in0T8m9N-WB]V&19*0<JgEYeJT1w:o8HS;)SKovrăU"t-$)cA)p,kFLR],N?2J:?m1+8P,[-V/<;yWG1Y'mjk/s-Ai*C0c%pV\hFHS>e[WăU"Rs(TfQkCWRRFluC^ERET,L'ha%'bfK\hFn4wncSm>:A7&sv,-5Wwf$g4^DG-'uGăU"36ds*WKdc(=35(^GTcnGoU_-TrfJO0uLimY\Z-HbCRqQ^5F)C$:]cnh0Bb40^.păU"40DvbF'EKH5A)HW^21=F#o:?dF-#O/'.YU;s25H=Ft?)\\sa#vb8O,Xr8jj1KB3ăU"qLZT2OiuuPE]%Qiw\oV,5IYagBCI=BI':+2]]D7]2Fuk>&9\S9Nbg-k4]oF'sW.ăU"Md+,T=Yt1I]J_C1)>GU[V]Gv*(Elfw/+B=SFrKql+VpWm6fK.T_hosc5D79-l_LăU"t2Orh\_dbdo;q^f4SK$nyq?>d+<GBtv%QIqeF2%dz-u2l0BPd.&1bRXEFU)#x[lăU"CyjD%,p%P)QNiZ7708M09:o1?9-st3]JM4*\Y5GBg^'4.T+w,]p?,rNe3*bmub+ăU"+q=z&A94OJhxMX>gE*s?#ZJQkj#[Pr/OX\\W/7VTO<H/ca'q&hm5XTCmq1qX$W[ăU"B:*mhkcxuI)-j'(nhKICDo'0j_/RuYthXw%_#jNIlncXK*gaAkO&88pe)#w0$i,ăU"cZ,&R)8N:$)/8Ez;u:;S</yF7QG1m_;Kd#Kd*WQ=s;wCHG:w]p2316$PBnnq&n?ăU"nPA$FDau=)/]xRA8RE^::;[*Il8,2iZmD\=BpqOuVwG;HKqjOn3][]40jkBU=^:ăU"cU:Ko?;Ax.gH66ofhUANSo<sKkpH,Kq6mJH&OcL\OHANU;O<%i;n&'t'u>5Sn%.ăU"w0ZtTJJ$LFVuUPw-Qi)-&U[,&\u[,&B1j=6(*)u4W[.ChpEIe94A4tX5fJrZE;_ăU"a<b:[?$[C/cg//cs,RJB3JY+S1Yn/(2zh$=I-%L$no^*]_];Ju/HKU?opkq3VoVăU"tn+H)UZjX+v?wK=T(rqGfLbaE\MfT-elo+y627%p7FwDg5$s$<KbL6/2i=jN%$.ăU"ER\85/?6H8AzlGu(l&N$>iJsaV-#8bAsE?'o/o7BFS,sKUY*[vxNTH.n2&brt:săU"'_qH\)XA7GZS;\*>+m+P8UKjYo$bX>PR-tYlscvB3o4GvM^_5wTgwZ6\9xJM9LIăU"s9&'-g.F]aP]$3:>gf+L2>Uxj?Kh)BrLXR$eB8a(KUQQ?Mm7A=-Y^ZBgl/mO9O<ăU"EJg^,9SI)1*)TA^9Ge-+G%m[#/gHP]hq33g$dR<tlC:J$VuW3VLe_eee;4cCsmBăU"_FnSa8BM5>4-8=Y5Uuhb$#k+a=>u_<L1vBFZpZ6]0T%;r$R1OBfP7SYz[N:fFOyăU"4Yi%ZHNN.?)(ZiEs4LilST[7e:N'n)u;]6.3qH,f,b=%:Pos#xdE?H5>mlcbrK]ăEND SUBăSUB V2ăU"[zda=+n#R>LF+0U^nPHu-EjQQVs0>2%>ciU+p8)h2a_?hMNm79AgdbJn2rRZsJVăU"^n4_3su#+/9Ntisa892'bW&HK/in>b:O?/IHF#.4.G'6cs>aJL1HJ.j#\(U(dL5ăU".>5U$TV^0]vb/n0utf>=:/T,\BB66iYsqOh<T[?qfbCM?E_v>rrg6SYe5auQxK*ăU"U'x%up%()9%%%%-%;x[BGS.T,,'/5%%'>f%%%/%%%&%jxf%uVSg7fxN#9TwTm$oăU"hy^LDIxlU*5:4GjDK3&hN#1ijUZDR[q+>M<x<:MqZv*sWjuOcw9a]l<okL_9xJDăU"d)-m&HNM)2fn^LsoUTFOcBDb().<^v4UlKFJh<y'7KsejVp1HHX5TpbScb(.r6MăU"nPHLWRJOxXNBZ-**0:m4\mBcT>K(=X]+*c0FQXd858j2RDhIHSnW%umC0\E3meTăU"L6_jlW)JN3vFV2VIlGhhL]\&DON;[0,V&V/BG&EdF\&6Ng4VDLcEYv6GBYH0?h+ăU"ecqH_ffT0ENlc*jlBlGek$A_j\RV0q[&\6YJ::WDEqJ<vLYQWQADr?PUf,]M[[/ăU"[#2D1cqg:o5,mZ?-f4Q0FO%p0;<S#5m2aWIB1e6+h\IMfZiPW47&O]<\8BS6xH(ăU"YQc%SBca%DD&OOO]Vb%oH7Ld,-*TymOLjT):.JR#0'%ln%TiJo^>(+euosVd+z)ăU")^\bG;'*?2f(qKvX8ub,oFufnR9*?_H=7jnaOf_qTl'R0L>?EnfzbvXb&.+/beOăU"mH(Uu32dmK:/Mx:+Z_gY]vaMC>=U;MlM'#di:B$f,*qFkPN(r[&EJ[N+e\a0j=găU"0]_6kj(y>_=#'pT'&2.(F6i2k-B)bU(k'Gcpg$g2E<ojehAJ60QglAjnJR\4GP.ăU"=*Y[J/21Erh2_&E)e.4QhV#X+Up#]0Ev9WJcS(_sc\ktT/^gp::nto&tDI$YZAQăU"7oo7uGG=6get9J'^<Wu:'jfPk#';&q^2Coj.yQg(&M';'e$S1x>CV3':f&I+nc>ăU"Up(CK+E8F6k%Eb+U&q[H[#nh$42q5vP<rDE8LKCj8k^+o'2tn?KX8:p:dXH*[Z7ăU"<(26J'qO'P-OL>cZr1rUaCRkgp^^I4iJR(+LY)f2S]hYo>u+EMWDSeQ&6fJ4%TDăU"9DZ2[k,qqHl#M*Lcb1[NmjP&^ELHlC$Wd-aq8<-[%#+4u(Iacg(ekMUQ3mxb>/KăU"0m*Ef?Qr>OV.$2;kS_YYNQ2&mA#'op$<T]wZ?tiiE?u[M)P)9.SR.82,$x=+uuNăU"Sr/Hh\Iv]esx)vlhv9;YdXCVJH;oC8tzPDQ#AYLdI]Mm#0[de[G\&vXG<EFKkNlăU"oD*QiN[U:\\J(ST^G*q_NA<S;+0'gMKbqhAbKo;'/K'\kgX9eNH75<tdLcn;^p.ăU"b<MW(L$wehojJ')W'%.mw6TpR#yooktGT[agCmw=1]Nx=LCg_)R%sGN662n:tATăU"klxaTSoEur6F5UsoY,FA^RUQ5MsZuMdcYTS5b;dT:dyk1Y%rgUl8hC&Ze/_3vYGăU")*TuA+pb]s$FJ]V#[9is.=sh6I<sU3&WW\/ef&j<D;^m>S>H,*6mLFGYJ=(_&qTăU"+j1xco\HHp/1tw/Z1;d7)kveG)kJW/7F=>i7Moe/s)oFfS8J<t0e7k=I'4rgrt&ăU"Y*i^qKC'dI=&OAeKC.%Vi*JI:#h<K<E2jw:T[dp1C:iJO%MY7g3/#g=7_k(F)VRăU"UO.\$7gT*TMh(X>vK[Yjp:*GUbZPFCGCHHfF(LYMdVt441P(aO,qm[&+M?1nQziăU"bc+N-Y#-47/a5mxkIRILp;SkTcXKP>5<,h*[D*6=(\3voHC>^^zLiDGc)pqjR#măU"7-&$'WEB#3Iv7LW:Zo(R?ZS0g4M+3.T^EV6406.hB(k08//8k?Ehk&?GU0cCE#HăU"N46K_:c.'F]px6K<+B\W%Uc%sqC=;&P0aec,wfWm,YMYoMKfK8\]RrR3EuK[-lLăU"I<%NwV%>:S:3PG1/_=R4^MT6+xW0RNm1)S8$WL53eT#GjmAQco/(?&Y\sfQKKPNăU"US;'^DKIK*u[WqoFbu;F]UYjlFq&AA:WXU#4oqMjk8LP'c4_<QT^lF&769>e5v>ăU"Q$()i4+fwd'WRO8_j5:&tHm.M5cPSNF$XrvE'6UZ^D[$cu&JSjiS49QADseOp%tăU"rx$IfVD;Mx4\Dl.1sq%R6>o]U;:K2w0]2?/#uW*]BmlXU<WTK[,(4AY+QyLwI_aăU"8%1o1eh*5[GminI%^[PdT^_roiVfA*:9pB+PeM+NhAq?edr7l[)bh6pIq5ipU8săU"CX+8tux584_gAYS:Ak;A4P.xXnTmw[$mDcLf5ouZOZ'GYpy2A;0?B/ALh+v])dIăU"6nf<L\]_LS9lL*gnfvC.L*.CVGo*i=9Go?G;4cUt63l1q+l&>%bQLh;s[/c900RăU"507Ssh.4d*&$MEa?MG>*rB*.9VbXC/*Jd9_m+Y/8[pI]$hU(?,'CkqK/:.z+UZNăU"o[2fo4E=a3R&Te6rwgEd^Efcwvtjl8$Pv<jdNtT-wQUfja3imYY+hsgm#P3(.P6ăU"]TKBQ&H_7i0j:^[pAMCDrFv\B>mh]sKsYWmY6\Jv*syj;+kG9/Y9fRm/YNJ?RLsăU"]RAidBXUFUAX.VFM_O3d8k83.xx6j]c5jRQJ>8e)QUDS$L2.Pa\8^9K6\W\$RS;ăU"4sVh;;YgVdCwPj)G;ptI;On\>rj;94F,mq^z$p=7LDUaMV)'1UVq4hk^>%jLaZyăU"t>vj;y(bTG-U8Y605J%#-/PmJjq,aw[5T&YmcMwY=4>He;gR:(JLMT9N:#y61JDăU"FHgiq+Ij(GRWvgTTi].pwo&Zo7f6m>-T\'_](VO.e3;_HD0t\[7A+_-8sm5<9EJăU"CEex(%XF*qXpU&(5-Yu]6kkPVQe]zmA_(m:%TVZNog_;P);Ux>Fq0vNo%k;C,k\ăU"6/AP>nr3OseY_df-ld6'5]sL*N<]B$3L:mI8lS_rsw^f5>]T8XhZoi:_X(u^o7WăU"mvNWY?l2_UV3P^=emj9Ucd=>ob>'\=3+P6V_5VJ8=aFV%6JtgRU:W3[?<Vau/GFăU"1?$l)guN<%dPboJ53-]S0mk,+fgFyY6aV2KRWK-o%J<CM%<eP&k<1OkmoS8,B35ăU"b:f\sI*m:c-EmWCW6;dv[(iJ)tjO72DS[5,VOtRi4w&XPak?:&jZ/W4<LwoWnSVăU"7?)+qXHh<GF74BvDc3upbuQ[OtSi6t1m4FZ=3Mntr0FE_YYSJS33&+:*216o6UIăU"838=?9w&33/U\Tcl;VI$k[rC*I7%?vB_4X(PvI+2Q.mmF;K6oNjtt?^Ko^).GYXăU"#T$W7mFui2c^.r09-%Srf^Y^ilN2x714*tZFV#<SnNEa7)%>87nMYg:A)JmTHqjăU"60\mDM^tE0*Qf>KA$,%TsQ]WCp*S+.$?7QZ*)-bPZ:2p*CF&=p(6?FGa8?mNi:%ăU"n*#]+Gsb#5,aqQ20rDXJDe;Iak3eG>$fc>SNIM6*?V[Xp;E?0-1i;O<%=;=bh?oăU"L6?WmQSDc9GB4BZP<9z=F#*9%$&=(;V99HlbsF^qr6%%G_F76.o$sK_P+^qy6oUăU"yS7(OI4reSvfVLr7.Pg__9<:fL93ZjIB[$NliGR[)8=llim):qWb:mkpT2DPQmHăU">r=S*4K;l]kVjeKE<oAYu8%vt#QC9o40;M&ITcO%l6dUrxM;,h]*'VudLDT-,GKăU"oSx+8;XGT:3jKK[*oZp3BumsNbr^O=[rqgh\g$y>.[ZE[3pqbwQ23;WA-'7,%:dăU"#=-cK>wV8EOYG3m+CX^lS\5JCTicUNj%qWKgb8NF)^bVUL,f/QJBf0pIg#:^XN$ăU"QeJtmnCd,W<;RVf$5t'/8T#p?i.E:iC3V-?7Ump;9eClP'59(m**d*)(^gr']>;ăU"CGiuWk#Jc_q8SF:&._M%[Zl$]T^L/]sv,^J>pDFf>Lf?2lQIg(:^N&.DnQ3\Rv/ăU"fvWk.Xm#MBOwOAXaSAQ\7[3dTe?%=-CGb.0_[Wf-?jS#dICw>T:fV)^aOAw_.$7ăU"4ue->W7C[o#kJFIl6&.q\e\g#ET/4c>tEQ:wNZ-LNGNXcEfdH2oot\F_tpnw6$iăU"6]NO4qQ#J.j5U5pTUMApv9Lr/^UpIU,Ep>[j\M+a?NA'C[57+aCj'p1pRUk8Cj:ăU"+g>GMDW1EOo(Sd15mOdPEH$69+CY'DH1D?>TXCM'YFI75t\6<<tr?ZW0Jf24fH*ăU"uK?35M0?nf?50m-b(]q'W;#JxOi'J04^_UG(CYmi)RrlIvv[V)O3_NQ&sd9Mc9găU"r?R/A.TbSZF7=O\EE*ppF/KIAOPJQ5$8/u%Rq7]TbhV#H=O26pnK5*&P/%3e]MjăU"+J<wCJ>k0lUPiK&l6:j(<N)(2''G3#5<=okYZP9/$IJ]LS?lheGTnP)ho$C[F(9ăU"#fRf]a?pB9_X104n1aYrrCkYcge7m&1mfDo>c:egECHUfRH*_fR34m5VIml</heăU"rfibVm3#7h/+xKrXB5rS\57n2lqD5Zm$H1#V7g74+xL-E0$FzUmvgYfmnAWcMCwăU"Jmd?;9mc2HLT6rv$BIm[[mG&V=HSh,),_GBRtCi0(rj97c^r&lKFF2uS^h3)kAkăU"hc?oh<D'4;As\JdB&[3bjTU3VI-dDN4C';eE).<Y(tm[BF^;)9SANq+]W=^)K^HăU"rG.EFhgqh,5:E6[KQ[BUW?r%LmFfH*v'W)xgok<->hmT\/erqcx(/Y[tHbL2RbCăU"'=V4<9B5^T[I,]vq>u.^t]2O\HH3ZV5:2WPja,svF[C,4Q_P//hgk06^LCOzs(RăU"A13_fGlLFs(#RsnjnI\IHP3-8*cyEt^m<0-'.>3/GVXQO4(,m%m3QWM\=ox0=[DăU"9(uTp.mbgXqoh\1MjJQI/HTR?QfB4Q.jOoT.'^lrwVcmZV[4vo/z$W7Ys(_'6#6ăU"N9;#D[7wr/A3%ejuXtY:pnXU%6$$ZmmSbW<+DJu-JV0#AjN\#dBz:sF54qX5KSlăU":Q<3eR8IHO<j\6?(GO&OpLsFo2SuAK'=KY^hgGzosP:I4*i2A#^B+m>co/?M_W4ăU"auNda_G0:nF$rrki\er?5+wLel4XkookUGD21+P&w)h8&QnGUCGOmge,DT(d;x<ăU"P3PC/eErf^ltLwcZ/Dx.p/tDgd,YawaC>ytmpkq$9QHfrjAXKpu7lj(b)%$hj[RăU"J4'IQ\zJAH+2_13t-kwv>vc'L2V4NLbH7oP,6M_0j5;o=7./l14hCOiB(kNC0ViăU"Cy_=:?TITsqK7e$bEZSc=_$eM%)[GB0n8xTFz9Z+JYtzi9:cS'KyylBgadkakp5ăU"2(hWf.6WfrN1Nv55j8Uh_4wlr.tD#,j&xn_pn.X#U9q98J9i']n)NNzq+e\N4e<ăU"^RZ_(WDp]%v,SlDL1686O?W,*PPhPJq(eCDTg[QEEi8J1gSNto^If:fZd6GZYI3ăU"bOHr(uPBn;s=PSLk?V1=/)^-?Uy&jKc>)_$b$wyAP7,qjBCdCv]G2#);(pQ]6SLăU"RV]52y?\5+547_Z6\)eU8M$9Nu;aZ\9J[Y\NVTVRSo/#,4i>\x^*^xr2PJz]k9#ăU"hvmN/Yc'x'to$Q]TG9WrM2,';%RrjP2l6IMHgr#68K)fu0%#Qfi4zC>o;XHUE27ăU"v4uwbIk7V59[bp7EuRsp?AZ9(_PD'0wC+8RJYh:SZ=4Nw0%up()%9%%%I-%x[TBăU"Gv>:Eq827%%hT%%%/%.%%%j%xfuW%Sgfx06?:t=#2oXFmu,.2C8o#9K53z6h'yzăU"&m5RFIv77JUd+Bh\#7TlH;\FSt.8$QDmXLh4)3T$]KSxHYHr5LkkKfP8J3opasaăU"lU;2QiE/eG#Ig4Rgueb,xvT5mRBr)N)xZh_YUPK'mNuw-00DfYou5pIZ)&-Kqo&ăU"_C%&r5BN(k^B/Q5>/*\o<[YEG'9)dM[COa]6jj7Id=FJuVx/Bk7I=0ZeFed;KI#ăU"-%Jx?p*[SSh>8s6f$pyrSuXSr&3(3bF&p&'Mls&E\r_QmcX(KhC'k-W6.&.vx6[ăU"LWq46NW/N;4gRPUw:0<hdUURMnQZ'\JSHQJ=4b83k[I&YgF:NTz=RbO%;S,m>5iăU"3nbO$pyjS\m8f>+ka[,MZ0YZfVhoJkd$#'f<&'fBb'0^%=ASf3u-Do)W2TTkR.LăU"j'T5:p94UWQ?..CoL7>j'HnE,<gKn[+T#>.Khkzb'Q,OXC3othKa<X+0kC[T:PCăU"ng)=Cqk^B$gGUDP?'>IWf00(&[9Ics8UR=ZcX/VI5/.Z-J;,Kqu-1Qf=#\dTFd0ăU";pVeM20,uC]J_O(NI%N5AcVDKBSC/CT'i-g^BPql2+ub*^3Too-8GyE=0=CSQ2OăU"bgd#f]oA/-HN[DeaNKj90%v$qHBXG2+9baI?%'$V$6CJ]-7PprMAIhvmVUBuI+\ăU"1?8rUY]r=2:_e4b[wD3d9X\*F7F^9oO-3[#&Z8-pf:s,gf,EUf)R&q=.%&pbgq3ăU"AG5e=PaC&OEsYZM8.iPJ/aa'Re+kcoQ<m$E2DbOsM$5a1;od8t5bE%NrilP\z?NăU"),.h%Wr?eX/eWc0;$<-Fkhu'HoAJWm#g=qOm^DBSG.pfAYt(fmau:b[)h9LC]7'ăU"ENYVggMdvsa8;O[RHcD(Z%N8G9DN_TsA9qh=ETr_h(KPO9(iLLx/^OvTPl[R)]$ăU"&x[9X[S5Hx)>.V>/[T$a;,t6\hR[tMf;#_U-I]GE;kK.;uWP,u0zD[6B-hOdgd_ăU"t'oV90XWPs_cy&Y68oVR:2:7F;3nrH%:O(NFWA;Q3[J85-cm+;6h0JiJRG-b:kCăU";b.S^Z0iiAn<obO*+3YPZU.%<fosug+)U,Dk(0o/aEsM2[*IgCVa8Ibi(r*+X^,ăU"D[t%d4]NsC-$tKp2t-%/Y]5A521Ob^o_0/+++wugUD,i(cCYy,%&wr[::s^d'%UăU"ee0htUe^aU4-K_qf_X/4U-KnR00Uu+xh.>Gd&5:=fR]p$O.d5p0B&mo/a#7&TmsăU"%/)gxOc93IW>6O>+gX[,uuoW%K*%hz4yF]Ywj_Uz3]8%vnnFDx.d4&s9uBgw^q.ăU"SAi)3##wXUF1S9B%RW'GAE%&P1QvqlboFr1(&'J<;*.AF-%N3Fu0H<=f<1;+P\CăU"f3LV6P)mm(V]&53z=h:PZC3\PZ:>[&U,_-1[tX(l><JL]9.4A(Bc%veuWUxo:GeăU"')s1.fZje's*d:pQ]0$YaF-ri[v::1[AH,ad$7Hog,3V*9t7H6D_^kQ;kRA,twDăU"HIZI.f,/3nG6&-0AQ)]r?4Yt]=).HuT397KDJ2T,)2OypY9N\*?*H2Z['*S)2^7ăU"7F1D+=m6*)5P58RY;CE<M[$])2n0(X1X1SQBIDM;jofe[Z33,r$6#DTWB?9NQ6?ăU"Ri8mtS7:kU??C*.*:]NCdUVQ'0\/,MNHDQn:nSVT'/JCeM'xDzt>59(<IBGOmZzăU"sb^))t='r+>J0m78zB.z3mDVQdTD_*a?021[hG69Dhj<\hH/hxp1*vL$Fe33\'5ăU"SqL&Dp>rGn*X8^&6-lB=y(<ERA;Ud'l:JJBB46gdXcjDda*,a6sLPl/R'&40+_7ăU"OV/sYcb#2iT(3_y&\>mUSi/YfFeyfR45ge/Z[f%:hAYLkL??:?UsGrc4n+kCCCmăU"Lbqt;*Y,-gcf2eN[;2f3cl*F&u<>)$ZH%8X5;SV36>k;S,850B/\z54[Qf2h;UCăU"MEJkH&?A$;KecPDrpTGgn9?adNX>=X<&dqiX0co75kPYJPwKUr.IeuchOqAISO+ăU"4RSQ2;gJvS>0,Jji:8bMv18YoBE3sT/Qh'2.E2KU_#Te:wiX%H).[6w3ZgJ;Lt'ăU">'q%DARdq?(hx>Bw>BtZ7q:LX>tE0%[Q%I/MuSA1RspBOrr()_s<??,V-E#YDmNăU"A[WYXr/kagTK\+\hq,.ek('nzOLr*dx%c9nWj:Qic48,9*PvL$rq+\ri8]lrR/DăU"of]3I$iT4]S&y?E%LnUr5^E*cVnu)[\;$)Rrg7M3Pr<Xu,-/<nvNz/NOgt;pIcQăU"c,Oh&U\w6=U(x]o0/\w%9&?#TMu<SNk&k,MAX'w\9\<L[%;':Z>]T3fDCoH7OhXăU",mjzHB$k*^))%]\)d)&z]s0q)Ny8luW&u&4o=O]f]#E'1K3O]N'y4Rs0Q\&,hcfăU"KmU3T'c\XD?[%f]<WAEu)&^ST(MGW;gExz-pt_4+uTAfA/YV>mGge1UIHjB?sS+ăU"B9epiDdAk;N.>)p(;<z+WR'DezC]QXdg,Gv.-C(#MI8[R_nGaN2+jNb]ee?[,7răU")=&eOaU[_QT<2qk<^+5+\1UhE?(_?2)A-A%ReO#Y2%3SL\17s=f?CrjIS>;Ww?&ăU"'7lKnWZSX25^=CFUtO8ZXJ[\FdCu;OK/7#M[k-,i)N)-E,AxXg9U(wtg0#>E]jSăU"B=5x2p<#+XZ+8nVELaoZ/;faRL0uOh&nVJ:V4FQ;qG\%R;KfgSt2eV&euD7&U1(ăU"]1>'%a&LSIT1rRQv8-Y^'hZjp(R^6R9PF(?jKp>ec*D7[.<,tJFTt_ZfH)mUd^aăU"0\2Vj1WH6xxMpLu?\k&nmj'uxv?heu2Q?#']PFESNiYHZdlBgDl<cuNcN=Y)PJNăU"A1XCiFz&D]7J'4y0J,QtFz$^Op3MCa<fXo\oV205fd#3\DUb'YGD$ZNc^>0I2xpăU"FBe'jG?G;pYVP8Eul)o5UfddEUmFMxq.\S]\Qn5^fa]l%tdLbRd.>./B(z<pQgWăU"%>2VS[g:Fex_lE&DEpk.+>dN*r1%:r%_g$4iMoH=W>Rf(;CZLPfOQnc&&m)zSjQăU"aeGD)>?'RUzyaqVjQPH_;B;gqArxT?j52^)p:b_2%l6^WfID8>6tlkgR=Dx[4+ZăU"kVuQNp6L.=hmCNO,7WnTX'aSzdV*G4D]1GxISMS1kAjD]g0Sl?og^VCH2lYT$,măU",Q\jg6[n8HhFzhOURPN%_3ktH9hZ^A[26:>7=;R6];0.<SX>BNzm&.7\3V8-=[:ăU"h9E3aq'X]PppZ=js-(dnB6sh.;lMNX.m8LL>4nT0(k,McY97'3J,xR19[/w%cq3ăU"rlne:6BOi9hih0#Uvgc?&fd1cs&]5j.HXqO%c/z#(4fMorA6DgrjL7wnE:%zBw[ăU"n)IPH]B76%O1&Pc[2i;8H*wL*;3[LiqzO,?cU/pp\'f##.*xve<5St.Mb-RP;SXăU"I',u>^Cl7oe\0G[G,%b6QEG=EP:hhapfW^Z2R),-Fm8Ov\#MdskR^]'%c,+Zw]IăU"j8C$QSvS(&(i%MMxCuh<ABVXj??-Rx6s3c]iV11#=dcIeaq46)du;SdKmLfB-^\ăU"f]G4P814EhSmVbSaGjPq2VSZ%Y&9_zs],vO&wgj0#od_V/RI^U;SM<*'I$/7pe;ăU"[I7:,gBPw.GhM6$8(Hk0]b7c9$CDZl^R1YBK8HYP=>(6I.h[<;L1+\6ZOfD;t25ăU"cJ>D#cQ;ZLoK-P9w;n)'JZC2$J:B_H[6y5L^f2oAOy;XFyw=l69]w&sCinH8n'BăU"(:A7:'Plbe1D&qL8<($hXcOk=S8A?[4#(yuxY\>l?)p,gB%lxvB'5'3-_IstJ_<ăU"<jOAJRm).DF8Bq2^V4nK_J/nXaeZb)vv_KRPsQFL6V'&.(4d3UX7?r,q.VPWikNăU"#K#dIa$tm[7\Y<Pfp,(V^NyMb\hF\rc2UGga#m,OHru]lL.ka;)q?gcPw-<,-$]ăU"K&u#b-;QYYJYulF?R.X+IU:dh9F)rm1_EZ8Mo&;uXkVL4frbal/wYvHTEt60I$-ăU"Y61[^vultWZ]%XQPb'7R[[ve*Vf)dg=FJfTZ;64%Kue,Wtlw_tg<t168g,D;9s-ăU"_0)8q3$X:UY;;O(mH\%G$I*l=7UtPF.R^[X%Mf\v6[#Xuf>oO2D+<L>sR;Kh$0năU"Tz%Q*9?k;p-WtY^E+XeaQ/Wnri8%+g>'xQQqa0jd^W7^XZ^Q_FHj(K?,IOr(auLăU"7<lXsMONo<Mj_]]6NEta7dOXBedZt+9_wO1NCiH(WH;CIM+BqxBausbJij(,DBqăU"4zubqs>YEr(r^W&al)LorZ*ncN<rY9R&WaZbJZTb(#&W>IHQP3G<JN#R#=3oN0săU"d+VsAc92mHPk_Q>iaroQ2=Y,PS-O>)(_boA*IzTWm/v:T0Z7S_i,K.,qZQN5L'iăU">az%e9K^FF-<njnVYcak(<29COtP%Io_7SH43*i.Dows]hi]?so8^zM;Hr^:B&BăU"m'.0]2uqL]UMl4nLzt,hw+u%p()9%%%%-g%x[B+G=?2)f84%%%pb%%%/%%(%%jxăU"%fuXS[gfxF1#:>?=nk,RTrdm)Z$QG0[;m[C*f-9&7+#&VpA/#2%4LZqR(8HRoEYăU"/Bl(8yc*ghC=f)BjNG]-/mhx&&P2zzI4sd6W,*0J]/WvhdX,W2fQbrrm3S05,nqăU"H_SDdjom6ZV6VNlM4&et2bV#%4$$$%ky[3jHna:2^p_7&s,e%M>-CyX(OfDWc\LăU"z/-(?K#G56fJQZPa]6iGXfb3)f$ON#%*X<Ys?f>eA6su%UHG?ae&;9_'ttb-4E&ăU"Z+:9UY+p1t4bF'\&'5cvLkfWc[.z5,O8[0,-AC#*QA^PhH6;2[w)ym5S:e?OM8;ăU"6oGp8^+V7OXWk_]5/,pHGUl.Z6$,(=gn1JJeyV_N=gT*=;QwwaJ?l+<-.$3H.CRăU"Y+?h%3++48qGUcj3rX:%?)c%?+%0d1%+$fI(SMHr&.E<<OqcJU8jk)UZg8/2cQ8ăU"A(-Il&A4=t%0P3D+Vpg],mmZ%M_;[fY\I6:s^N_M&fvLAjgo/+=G(L25rx=?V3:ăU"IZ:259U\I&I[cwUpOj]]%T*_P\XC1;f>K-is^i2T5>.>d4byndPIQVeK2C:pM_FăU"/J/'u%wQ6]+d2-$\VM+<UH-]^yVfI4et6H%5gPC-GaiF-ib?e(%6*9t(Uv$+F:oăU")6<F*WZr1dlKt^DNqm_VpVj#ai9d*O+lR6&2F/dDsWm2$.F\NCnRk.-f,U]V/pLăU"cTu0S%Sodz8'&1he?^&zM[/Z=f]j)0[=>X\sGVW0r/%:h&e(e7,(2hkY*.#fk%7ăU"e5KfEc.Tz><QaA'ReWhltWTX,O]Q'3grk0E_WVnAJW.6elp%8UA+MIV\93d(K7%ăU"NZQp3[35b)I'qR/P^C+.[,UYVc:wHV=;MWdXZ[l90eFaAr^5,9<C]7'%EYV=g0BăU"w[I;zYQk,M28V%<v9kGnRL%rK*<'+#vO#'H(o9t[7,*?#Ba4atif&$4PEj$(:2iăU"hN'[(7;UmgsY/6V6:P=(Z8/Y2jr63enIMsgXIYY&dgRzSb6C6W-7X^i51BF2&NRăU"GYCGr+OZxKbl:O'v2mF$;hMbzC4/cemGaMwcenUO5:D]F?<\ue6(iG6Ka5I'CjhăU"kRfrpA]L9(OQ$\#/(U#UnQ3]4-T_LCD4t_R1fRT7#8kEPcU:RdBiZ^pz-GvaFY&ăU"$s4h:l5h(om<Dc=V6[a\0$=R)2)/8EPd,*B#+&dhhCh4zYLJrw?FQh&o4Lg%y-căU"sXtWYyME#?u;Xs$PKn0.-kUZ3]7)?iS>7%=h]pW$OX\%g,o6^h/B7(+*t%,e)v%ăU"ghov><0Wmi(Qq$ujuks/)'xy70NK?kD$(:8nHs2]UQfM>%D7w):yTIhB-whSDl;ăU"e7:kf:bN>'Z[;OWfeIeEXxn761$cSV%%>gj&t8;DWz9oF/t6<2V6A'l#Y5feMO1ăU"'I0A5,#5<9+U_':,d$+C35U$Si4uWc>]X?kZd9(BX]$)*_Kqe&_W2u>FID(gG=_ăU"FeU5M:[sH6#Wd2B9TQFx8>().qZU:HhZ9,rPe9\?1siH+rf\K0sjf2[v]#m2Be&ăU"J;Vn?S&)np2iIjlZGkmBV71#fZ,rioDO.HmZbw#?wxD::zo]_%<:d=Q[:A.o-&SăU"V%sL'&b9iHun*?)&nzIQjhEAs_1Qs)O&3Y4j8Ma*AQYPIOA*eZ'Q)xr$;zkM(sNăU"]p;,-Lm^2jV%Yg['WKsuD+eo.42F3jXjP0nZ4AX,5%27,:#at)P-;kA*gDxn4p0ăU"mik#/WMp\2f%%pG2iY[]UDF=%;4qS1&BpW/?DS<3\h>Yf^6<mQPnS_7^937Hup.ăU"SY=ci:,8tR$%h]cg$n])1u<6dA/8oXIJH;PxA?LxhDto7,Y6UnG;_2cf/a,D+AkăU"6A<K'P#>B4mOV[\)=.Z0=D5Xz\:<9E[)?7G%r$9ji(tF]Q=)pIn7D3>[E>JxTJcăU"IR;K%dzbwZEHiR&cD$8J>Tx[ZbA2-9/5-0LE+AcvQAG.WG32ki,hUme5i%VCq%JăU"'i0Y]E9PXhBGohaJQ#Bj(<?vdNZ-,.7D.Pfl[k^,)*I)J<[dm'3c%(MO,.\u2\4ăU"v)==?4?]R&;TCwgWhhH&oMh+-JHGFnQJor]EL-2W;mifL)GSL^oW1;qjZ^^'$0UăU")TA:wW?75wl0qLCmkLjlljYoX:H%e%_)Gu->&)mh>4?RhnBK[2<Iho_d4as9VL>ăU"Yh;+qgs<q#\#;KGTEI,PH9oCrxW%nVGB?g6eucf=qtYGGUD$Ax.DM0\vMr&mwN3ăU"SCivTb$+:kDh4_5uD%QG$v?C]P2\]d*ZwU4F7#vJXu*-/iNvt-gc\SH1FJyM',yăU"hRU<wf%L2x3o0O<w%:rT\Ln,[;XE>;:D%qey]PMK42dSu-Z-1'?i.(_OWlmFH2făU"mSB7OJLQfRxri2VxSfSa4i4^+.+3M$VdJ?nu_?7PYg_0)&2fpQm<'um,hgiAh1zăU"-bL=7Z#=&KVJ8]g/b(dO4-[QH7uCuLcEpDCo6/SQe8>7WUX/*[aueBHBt:D/0jPăU":M)O>*%6*YSHM2*8f6hG>fu+-GyCEYlyY68&o1f>)+[9Zi>;3CJ?Q9N=^zF)=&OăEND SUBăSUB V3ăU"dQ+#:i=Z+CG:2Qe317[2/+;(S)1u*PB^Eegm+%/51?Kx>t<?Ci6s*X6br;&7iHCăU"_;+38LCGg'gMF%wKeqW^XVqO2*/>eAaJ^g[%xB>g%$]hT6[X$Y8'5WhI$*WgkA9ăU"n26UJguBLIGUm_];.gduFu/WYN0WN-0W$gBEU7eaprgSWNtMB:=/bCD;AkC#lqhăU"Oj<:XDs0<RWQg0vqge3ltYP?kmMY41%65iL&;8PG\uZvWg'fxNIZdL%vJ^HI'_'ăU"[6g52r.:*UnVA\6e7nj'wxuu(ug(YXN3y]_&ykqh2m_n60*si:^LwCR[cNpGb6LăU"Y\SMa<G*fku4QxS5&)=eH)ro]Q$<b\g9w_q$%Hv.j/X>SJLz0w%x92k(IEx2sEvăU":=DRSuZ(z7wFD8/IS?#xH#.NP'6IjEhU1xL#JaNQ+M\.>&h=]OWyOJ;vc:?O3vjăU"Qj4;,aWM]8;biM2x:OZh1iyiENv8'*f<=^sa\R?Qm4D(H81_<We2:%nSdo*4'<7ăU"m18<C+nGn<\?6VsjSnO-$YVs<>X74ZyOUWQ2L3?)5optRth5xCw7$9TY+X=hk.băU"139qIG49K'rfmIR]5zWB)v5WnqX//6gQMI,lu#n*UFRA2[]>/+w$otrVmP:c2vUăU"nY;8eb6WZnpgn+=CVVr#)YY%ALA7:[\l.An^gLPMVhqNSNVz-+dUy8LN\brC(QDăU"13/;9<4hq/P32t;uh$xU?8j'2<VVq'WyHi^%z-ge1sf0b1Lro-;aDyyB>1x/B]MăU"m^u[.XLAF>KJ*F+7<5oBbj]^[Erff3^vimHP5bbQEVxdOHKU6'dK.,*4RH_nk:EăU":E)/3NmT\EuZLYO\hA>&DG:R;u[%A_\U-N,$_xE)<Tq:e*#Ys$LYJOA]Q;9*stHăU"j11u8=I%R-OA'Gh<jD5o3?j<o4CJkBNJg-Ujeg=:jRK?J;*5p%\A?::sGonFY2-ăU"I#CyNZ;C%,E,8%:1Q)7nUi[XTjSa&n4ah,^';P5j<]TPjOkg[J^*j%%+f;V*R8[ăU"gtn-7n%PbX=_-%Gkzgr';\-\v,_%x4jEc?'Q+P9)A#4/A\E3LU$r:(?1<hV5^AGăU"5-bC7NT$c[uL+K=2)^+gUo&CUoju[2hCdr:zjFmVa9\8GG([VOsE]Z0TFQ6Csx(ăU"UY$#$wV40(z'Sc**'5,*AKZ^oLlw\g:S=q*h+3c)xsp%B;];k[d)j,x-'MhvFZhăU"pN4nt;p4ZFw*so8oAsn78SmtcX,nZppC4X;x.JcrCV7J]<_7rTDsZYuJCh4dpsPăU"DHKPq:GJmfk9FzD1_,h.8S%p10;%v/?aXY?Kj8W3Pw6KPTBhrqb\d>9&I3MHOe)ăU"-WNqFJh$]w5t.z0FZM,C\BLP^Uro*h.xCZG%ie6[$al57i6uB]<2$-P#frwX+x)ăU"'&%VE5:h?sN)x9d4#%Apv$N_:W\SM\^.S8#a^F<3BieR:N$k>s+ip0dKxLUcqjNăU"f5j/yhnJxMF#ww,-:p2r[s*jPH5iG)?6>^9VYPEYj8RTO&G/&xF(WLgRrrg69)yăU"bH_a9A:\(k_#hKHng5G^Rkw2DJR\^iAy-^t(Ore_pkC/X5H<TlAHw(M&>tP.nzJăU"oBNS(G^0+aGr5__jd#sb-RaJAu6]2Mt-79]]B[V9prii$T:;m(JToU=s:JFG:$wăU"C^]WWj>dcxr(''&O0[_X69<k^-OP]0oQJZu6#W'DZsgBqq^(U]Vb=zc&[AYm*WAăU"9_k_&U]#Sps5cWHTXgpE1)ywZVrSU/%z\oMiith(d'_)gv'tx-4Zb$\BLA4JNkLăU"'S)<0u\VK)j7RQTq9=iWQ6H-\XshHl8G9tXr&xHX3:$0BUWfgvYPR]qD&bNX).$ăU"WR_;\R82NG\\rMiN0/na,GP0NuK9hmS$\:++XEVG4frba,/wWR64,_f:6l(K'.[ăU"plCh^3Rle_oWI>sq54JT$eym)eR&S=9W?6JA*eeJH4Fs^Zb2Noi,;,85%Q0_hz1ăU"[_#spU/D;OtsA#q\f+^LK]K]'j>[>[\bjb4bk6Cq.>nwZk;Mf5KhQ1B*3?vHMfdăU"QUk]rJ^0\O(v)JFn[U>LvqNu3'1P6a[wm)hN3W7]JTX)5>+YspL6cgF/.'MJK?xăU"Z^^/D1*0D-l.lY=Q[q4/0#,*jx,o199MRQ1-Xu\CQ&iyCP4OCdrau,MLR2d-0f3ăU"=1V0QNK$=M1=3ddQ.o--B?x^vhY2+6q9+EW21eb'=';;$2V_G;U1/kJoEb2VJ/#ăU"9o.D#B\RjEs)NwlGT47J^VHmpfiR#,1,8ZiK6.DzT]pdCG?GceO/%aFCXPBMFQbăU"&<dqE/m%5bT_lnco:NCTAp53n2?pCnZ5/Ief\lox/kX4/Xvrn24>X;rbLPc&^?TăU"''Hcq0%jn%X4:DY&.URHhlN=Gvquz/TW;05ieX8FxA?D$wkG0?-o3<f?'e'l'1tăU"+256zY;lHn6hzo9lsZ?%(:c1vd%up()%9%%%R-%CoK:G0k0[g''%%%F/%%%0%.%ăU"%%j%xfxz%gSgfFxNz,+tTU9eLstwAVPyx5O/Y2e8g7%D9RPqJTY)a=Vo_J]056eăU"$AE_j*h6Lr['Bq-7N44TnXBX\it#Ag-9oH][^_crHMh25EgK7Qu$xIh/BdCS)lnăU")'hn_B6G0HTLB#J5HssQhntJ<<VAhk0q^NSMN^Qr\I0B1)mQ^Vx4[>eu0+-XnUSăU"Pj:1)dA+Mm)<)IU\\wX?[)5u[?KD<[>QvK<K#5fmQJE5du+vW;1kZ$[m<u;gC<YăU"/T/z^AS^wKjX+olfcPYCgN3X^J31n^4i9^u'52pJ%6G%XP05EmzK#UsD($GA<.'ăU"8B=[EES*+h)L&WJMf8Rz\-<b0^%NTRXq/t(O)b8Cq,1R;YF9;/2w\T#0Pe8J%=eăU">m;e>uXJWS7RDFR]0yI8_x'*lP)u:-1-7+8)]a2:oAGH2jU2t+jFc.P1C>fi*CeăU"YpF8v),_2Pq:dWr_<mbt)7VSG$zW+&dYMl%*J5XdtTZb4IZ&[O9u7mY'+WAhnJ^ăU"J/YN:IJ8$nJ8V2Dqxo(OlR8DbvVW9d7/uKf%Ql'Y_b6S,+aD;L8o?V44HYuSzdFăU"e]#Z$/+0l>><c_-f8ZIClDhIAQW[fYT9?i2V5)p%[G%BulD,ze&g<5I2l=TF5Q(ăU"]I?P/Q*MTIivncQc#gS;yZfPy7iaK7mhu4N&v-HIclf0*e3T/^mG_(JFht/z31păU"MgaferN$VVkjN'>3#y8RR##rMfs');fv1x=doGO+#,H6oj]=+d%-P5knro,f>XdăU"Oi\NX'x%&up&%'9%9%%%%-p%V3<:G.JR%d^(%(%40%%%-%%%%%%%%%&%E%%%%%%ăU"%%%h%fqhS%fxru%p&'9%%9%%[%-%6+%>GYiDB5[[.%%+%Z%%0%%%%%%%%%&%%E%ăU"%(%.(%%%kqf%yrjr%Sfxr%up&'%9%9%%%%-%;Qa=G5Lv$J'h'%%%q/%%%0%%%%%ăU"%%%%&%E%.%%92%%%kq%fyxz%gSgf%xup&%'9%9%%%%-g%XaB+GSGo,ga&%%%M)%ăU"%%/%%%%%%%%%&%E#%%%Q%5%%w%jfir#jSy'%yup&%'9%9%%%%-^%*.#%Gh9k*i#ăU"'%+%P0%%%-%%%%%%%%%&%E#%%%a#7%%%%jxfS%nshu%p&'9%%9%%%%-%wa.#GD)ăU"XmaT#1%%+%A%%-%%%%%%%%%%%%E%%%%N:%(%%jx%fSug%qup&%'9%9%%%%-[%]-ăU"#=Gh%i&;x+%(%[M%%%0%%%%%%%%%&%E#%%%M#F%%%%jxff%xrSf%xrup%&'9%%9ăU"%%%I-%x[0BG.T<,,/57%%>f%%%/%%%%%%%%%&%%E%%%'sL%%&%jxf%uVSg%fxupăU"%&'9%%9%%%I-%x[TBGv>:Eq827%%hT%%%/%%%%%%%%%&%%E%%%'Q]%%&%jxf%uWăU"Sg%fxup%&'9%%9%%%I-%x[9BG=?12f84%%%pb%%%/%%%%%%%%%&%%E%%%'8k%%&ăU"%jxf%uXSg%fxup%&'9%%9%%%R-%CoK:G0k0[g''%%%F/%%%0%%%%%%%%%&%%E%%ăU"%(u%%%&%jxf%xzgS%gfxu%p*+%%%%%0#%0%5['%%J&'%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=241AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMatthew Pulley                 SLUG SCREEN SAVER              airwalk_mp@juno.com            06-10-97 (00:28)       QB, QBasic, PDS        46   2956     SLUG.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SLUG.ZIP",4^6:Z&=1937:?STRING$(50,177);ăU"%up()%9%'%#-%-EoBGtx8r:%(7%%'-%%%-%%%%xq%zlSg7fx6z;:>[kF9vCX*x?ăU"<jC.-EZdrC3NIyZ5't+)#.[r\#&+y2Unc5jH+sr0mP?pGQCU13N>rvQh\oUX$GAăU"l>K3b9ScarvVOB\S=0VaJYR#n/a,NNDk<p,reLm6+o%>b2Bv?C/rMkT)M9q1]6zăU"AHl&8Rn);.:/jF;'fWP2diOXzT189h4:)KLGOS#HU^pW2c\_$xcJQ4FoD-Rt0GwăU"/sOCSL]j(2\v4NuUJZaS5,fHcs]G0r(kr<gL*o#=V$WoRN'MroqFLDT2?<nc7w<ăU"sUM25(wp4\(/K*2LZbX81&VD]%eYd*_^Kga6h3Zk%lI,/Gu?0y[teSISR&K1Ae]ăU"K6<'$AaIwue?7zj%)P,7i+<(/(YY*,%r=FfGxa:7bFGW?HqYa,Vrc\S8]#C3k49ăU"a0(=)#V4&&l6<zl5gWmln3C)j\CN:'=3*gC(Nk;&[erz,MtA3:'&>,F72U<p'qNăU"th-h%sDtZbyAROK;1*Fw,B\NTROb*dN'I4%fQ#]G8aY-w0[WpV)P:'.heq$6b=DăU"adzU(e4YOYnO?2EgFa[G34PpJeY8q,_-IT5,N#5f0X<dSMD=Sc?0[3tBM1VfUg$ăU"iL]8HEBfx#GN)P$q8FT5Z&K7:h&j+.n,2-g$/AZErOErfAZ==CSPycd#=7ZC;nOăU"S('nH]S\N1oenV7TaE_V*<KU17B:Z3Z6tx1x/Lo<?o+x6BBXNfwnLo\hJQSJ=cqăU"l+rCg.7D;Si\w;JE^7l^]CsI+ynC]GSE$7I?o,Qs('$5Ul&6Cbi-+uYd%tK#pYdăU"LNhoIEH6YTeQ.da*)(pZPekQLCAQ]3bIL=>#*g%u9-He$]JjM1*_(MHDkVFAO_^ăU"RUsI-fgL14qfdl[P.7V<am1kd?<JfUf^$0YdV^61bu-I8+nR(A7;c&Tn5jP*qkTăU":jPCvTAY<H>HehGsrYPeI'qoNm;&O%1^X(ELE\0UG+\YLZb:r>B\E4&KiNW(:3IăU"++jPF'h;+gLE(QmD\hKX4G3))?IJol#iO<qXOUcQ.T89\k0()c(^cw('HWPLLwpăU"4:7FCDRz##KDX[C.o1O)$=7)BUflQ]XhjoO:s&f+'>DwD7qPrJ*ckQb'_CC8ZfgăU"ro8S]Hd*Q<X/+epFes_6PEukZ.E:TlG6YiSGChpCd.nz>usC%qLTHm)&sH46T5hăU"F=??rxe,6Rp%<kI=nmcgKZG-R8up%()9%%'%-%-s,hGSyGD%&O%%%'<&%%%-%%%ăU"%xqzl%Sunh<&_F/#gf-TS<DUT\q]qq\9bxmj]6)IqhzL-1OQJ;6krV,bnp#J3\CăU"tX+fT$EA=:kq$Eim%I5L:RqCA=[jzxkx+p8a.:ym=E=NmOaa8lCJrVyW4i(pXt9ăU"+A^.bv%aJ]iyT9m^A]m;CPK81]qgl;r5o*ejd2,6(hJ&%up()%9%'%m-%u1BCGvăU"e?_Mp&%%%e)%%%/%%%%wj%firj#Sst&T.xD=]TU55+0IdqCtD%(^D_x]1]<\K9/ăU"8#U'Kpfp):XZj$3Kii*XFNND8A2)KcE9F26E5<lSU=8B_d;:#qV\'T'C*DeSgn*ăU"=_Y*F2K$YAC;idsXh%U9&]]9ok\B*b%azm8'ubXw/uh0.e:p]-lHXtL[IgLgT[7ăU"6QP(*Hbohhd>hDisB(pi0ro)JZSXy%C'QUHSb;4UtEQD\G.9H\rPAY>=D-+K4[4ăU"W?9T;se3CQ\'6Y;eFK\Oh\WNT1N_Fj\rA.04A[lhKnhwBL8>FAsy+4$5R^9HKheăU"]<hb'^26'oW?s,#v,jg'Bfje*:R(]);CDT.CU2:<-,c#QrAkf8Z2sVC^i7X6'+2ăU"s8KQ,Yp\AV\+<^Mj=Gulu[xPgcVEW+u/qS4J6w<vhVNC7]O%c:k.dr)&+=ZU-5eăU"LQ)00k8KaIe]0SH1kJ68sEQP:I7j???5G+6u3_0I::*kwX.W-NEThPHgKPv:#);ăU"w&3k(%fgM7qCA4bTBB6l:^2G)<Dc)SRjl)QKH9jY-t5bqV-Atq\I#5lg8bx[3(.ăU"P>8W,SZtFn<gV9WB)DR:QToQY9IgIFxvkh9&JDaOg<'(+pFOlJyA#ulj:VG19F&ăU"aq:tauA#/F<XLMj6>J3s:c-BpL,uBDu%p&'9%%9%'%%-%-bEBGt$xr:%[(%%'%-ăU"%%-%%%%%%%%%&%%E%%%%%%%%%xqz%lSgf%xup&%'9%9%%'%-=%s,h^GyGD)%O%%ăU"+%<&%%%-%%%%%%%%%%%E[%%%K%(%%x%qzlS%unhu%p&'9%%9%'[%-%u-1CGvte_ăU"Mp%&%%e%)%%/%%%%%%%%%&%%E%%(%G)%%%wjf%irjS.st&u%p*+%%%%%(#%(%s#ăU"%%%f%+%%eI%x;D&6FExM2A44A=Ex02E4ASIEy78ABEh>M<<4=ACEnBLE(>D/AE)ăU"nIuk8;A4EfDMC74=MC820MC8>=%SăEND SUBăCLOSE:IF S=251AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăChris McKenzie                 MELTING AND FADING OUT TEXT    chrismckenze@earthlink.net     06-07-97 (07:33)       QB, QBasic, PDS        131  3617     MELT.BAS     DECLARE SUB beta ()ă'I creted this routine entirely myself but I found out it looks like the flameă'routine, I'd like to say that I did not refer to the flame source code toă'create this porgram.ă' The alpha version works and the beta currently does not, but the beta will be more flexibleă' sure you can spend an hour fixing it up and then send it to me so you can say,"Lookie what I done"ă' when truly you're just giving me less workă'ă'   Over and out...ă'ă'       Digital Reality---Chris McKenzieă'          chrismckenze@Earthlink.net (yes, it changed AGAIN)ăCLSăCOLOR 15, 1ăPRINT "  Versions   "ăPRINT "ÜÜÜÜÜÜÜÜÜÜÜÜÜ"ăCOLOR 15, 0ăPRINT "A        B"ăCOLOR 7ăLOCATE 3, 2ăPRINT "lpha or"ăLOCATE 3, 11ăPRINT "eta"ăDOăkey$ = INKEY$ăIF UCASE$(key$) = "B" THEN betaăLOOP WHILE UCASE$(key$) <> "A"ăCOLOR 15, 1ăCLSăCOLOR , 4ăPRINT "             T y p e   i n   s o m e t h i n g   t o   ";CHR$(34); "m e l t "; CHR$(34); "               "ăCOLOR , 1ăLINE INPUT text$ănumber = LEN(text$)ăSCREEN 13ăCOLOR 31ăRANDOMIZE TIMERăLOCATE 2, 2ăPRINT text$ăDIM graph(100, 100)ăăFOR x% = 5 TO 100ăFOR y% = 5 TO 100ăgraph(x%, y%) = POINT(x%, y%)ăNEXT y%ăNEXT x%ăăFOR I = 1 TO 3 STEP .025 'change for speed and exactation(is dat a word?)ăLINE (8, 8)-(number * (I * 8) + 13, 60), 0, BFăFOR x% = 50 TO 8 STEP -1ăFOR y% = 20 TO 8 STEP -1ăptclr = graph(x%, y%)ăIF ptclr <> 0 THEN LINE (I * x%, I * y%)-(I * x% + I, I * y% + I), (I * 6) + 42 - ptclr, BFăNEXT y%ăNEXT x%ăNEXT IăăFOR x1% = 1 TO 50ăFOR x% = 50 TO 8 STEP -1ăIF INKEY$ <> "" THEN SYSTEMăFOR y% = 50 TO 8 STEP -1ăIF graph(x%, y%) > 1 THENănumber = graph(x%, y%)ănumber = number - RND * 1.5 'space between pixels, gets bizarre after 2ăgraph(x%, y% + 1) = numberăgraph(x%, y% - 1) = numberăpointcolor = graph(x%, y%)ăcol = RND * 1 'color differenciation, looks fake after 6ăIF (pointcolor + col) > 16 AND pointcolor + col < 31 THEN LINE (3 * x%,3 * y%)-(3 * x% + 3, 3 * y% + 2), pointcolor + col, BFăEND IFăNEXT y%ăNEXT x%ăFOR atimer = 1 TO 1500 'all you Pentium II and 286 owners change thisăNEXT atimerăNEXTăăSUB betaă'Newer version, I'm still working on it.ăăCOLOR 15, 1ăCLSăCOLOR , 4ăPRINT "             T y p e   i n   s o m e t h i n g   t o   ";CHR$(34); "m e l t "; CHR$(34); "               "ăCOLOR , 1ăLINE INPUT text$ăanumber = LEN(text$)ăSCREEN 13ăCOLOR 31ăRANDOMIZE TIMERăLOCATE 2, 2ăPRINT text$ăDIM graph(anumber * 8 + 5, 15)ănmber = anumber * 8 + 5 'this line was so repetitive it was only logicalăăFOR x% = 5 TO nmberăFOR y% = 5 TO 15ăgraph(x%, y%) = POINT(x%, y%)ăNEXT y%ăNEXT x%ăă'Real cool magnifying effect.ăFOR I = 1 TO 3 STEP .025 'change for speed and exactation(is dat a word?)ăLINE (8, 8)-(anumber * (I * 8) + 13, 60), 0, BFăFOR x% = nmber TO 8 STEP -1ăFOR y% = 15 TO 5 STEP -1ăptclr = graph(x%, y%)ăIF ptclr <> 0 THEN LINE (I * x%, I * y%)-(I * x% + I, I * y% + I), (I *6) + 42 - ptclr, BFăNEXT y%ăNEXT x%ăNEXT Iăă'MelterăFOR x1% = 1 TO 50ăFOR x% = nmber TO 8 STEP -1ăIF INKEY$ <> "" THEN SYSTEMăFOR y% = 15 TO 5 STEP -1ăIF graph(x%, y%) > 1 THENănumber = graph(x%, y%)ănumber = number - RND * 1.5 'space between pixels, gets bizarre after 2ăgraph(x%, y% + 1) = numberăgraph(x%, y% - 1) = numberăpointcolor = graph(x%, y%)ăcol = RND * 1 'color differenciation, looks fake after 6ăIF (pointcolor + col) > 16 AND pointcolor + col < 31 THEN LINE (3 * x%,3 * y%)-(3 * x% + 3, 3 * y% + 2), pointcolor + col, BFăEND IFăNEXT y%ăNEXT x%ăFOR atimer = 1 TO 1500 'change this all you Pentium II and 286 ownersăNEXT atimerăNEXTăEND SUBăPetter Holmberg                PALETTE FADING ROUTINES        petter.holmberg@usa.net        06-17-97 (11:12)       QB, QBasic, PDS        748  49460    PALFADE.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PALFADE.ZIP",4^6:Z&=36870:?STRING$(50,177);ăU"%up()%9%%%7-%,c0HG,^%:dR-7%%Q$%%%0%%%%uf%qkfi%jSgfjxf*d7xG2;ix=ăU"dxo<NdgMyD$4$?DCM]3z-&+wPfo&h$$DLhFOcCrVoQs1xvF:nFs*EVoH]kIZZKRăU"^^$F.C^^%-tIJcUzY;OAGQ=Q9Yx>'COpdV[SS-1?]w1t->)'lSndOFhFEFo?ZaaăU"-2)CoNA07V_AY0WsCeSEBk8aIX]43/aKFLCF%,eu4s?0Ig$mk0$(+n1*Stfg(rXăU"nKE:HvL'D3TQ*BfTEUSLRmoO+6:GMNAAW-=*9I3Iz2_[SEmY'4c69P=8mT_7*slăU"qy#\YF(qkg*3po5Yf;:0PMnkGimIyYWY]KXEDLSM_zOE:A_ojSi+>7YcZ8FS1YWăU"YjhgMG1CMrB;Oy=h/i<$q:Suz*AL[o]D;5&)eGPZ*YTwu?prFzTVYlT_\i\Co/uăU"4l&VWc,;vS)*WnWYApuuVb:WRh49-f-X5I%#V.8N:VQ[3:r2CdmJWK.Q+KO392RăU"&R:y<j^QfyV2Z(lX#F:5g(U&r*ST>lL0ax_H.c0O,Soks\2ZVu/B662O_x_mlDsăU"o>QZ[IpX_J&n1dsJY<W&xY,u/8(p.F(uupFIHqUyQjeKMy9S7a7/nPc_G8u9vA^ăU"QM,o5:Hu-#*,'w6,g*ge2KN-nIXiK-a-IGBi>%D:[V2=Is>E1igI)?cPJ?eS8HeăU"s+(;I3bk%&u=YF1o$I?64Ssic,9VYco7Ga9pVE/U1QO7P/2.'+wjH;.B7=WBMAOăU"G?a[B.=[uFzqgQTrguHPkC/.-b8+qm:?7]157?.pxR+&1n_?K7='$UTZg:#Zl\aăU"^6\_v6b[2Us8/%2y7$g4oI(j8N0YCco:7m,63p8GASP4[o+2fu&0fdf?j*wJJ\OăU"66WF1,MhLOMsfgY2x:$#epq6+9rd+e[fuew7dM(Ede+YGCk_#GRcr%b*2rmJVK-ăU"$Hgqq%7(iw:R):=IR^pK\qz-&SA<i(6>qYNffH<;=V2L-r&-*64.q+J&;,iGFOUăU"Mw:\Dj]ZtE6rSq/G^%.:?shoa/5gLQ$71;j3]Sgoc0']5d:4-Sum=D2T)d9/hl8ăU"8=ew9dOr=uf#vI&We,(9cO2=u[Xn'LVhrs<AsrUZK[$g/UUPi#no0ch)(C4pYA.ăU"bUaeK,X00T+ugJcKOi16y$[DB'u'(4ilf+L^=e4lDu$t8YX9ooa*UKpzUO>:'\BăU"Y?tDkGeN&_V_PECGK>mlNtVh#'FHuZO2IUaN8;rM9.Vkl,zdRk0okeN?.3n&sn[ăU"W_A(Q0rbqq,&q]<G*,iU41>+^ms<WhQgQA-)zON3%Ln.ofcs]7FB%rmaS,4VBl%ăU"V%/:lj;'FB^$><J[G]Q#6.%Tr3#A?&&nJ4w1pixnp530wC*SjM?RhIs2u-;pKF%ăU"E3Q6%WQ6I:S.wa;.Z;Upi%14.BquOT><xZQ*Mp:)zor<6p=nwM(\EvHG3K=ki,yăU"1\H1,.bI9(&ZS43okm/FV+Y4:]N'2V*l:vt(jddBc<tg6s*c2W1\wG:q:uF$ijXăU"r'P'7_iC.NX:1A0,65S\U\1.h5(%atnffU-*[905:l'j-xY%]4XcR$]mk*gk4u<ăU"oJa?US2(_a<A#4$iP.Jilt^#lA2KY??^us+bs_:*NJ+MRiL[16]d)QGI-[WA043ăU"z]_1kg4'LbevAn4pXQ<b2<JAXg38x$Gdo6am>TE<IhmZrVcS:RDQ^m,X&&KU^t/ăU"2mbm&f)P2qq.0G>dLefW,#dsXGL'i9#Zt3cS$[G(X1g0iwdVPZa-%(Ve_x,i;yFăU"bSCo/mbe%B:64N?h#Dc%?E1p-A$1)'So?qRc,)9rYRb%0p1TQ<;#pulpk*+g;J;ăU"G4:is.5sWp>g_37?RDt>,[ldCr2ngd.LU,k52lhKGtZY^p;0NH2mg8-Q,Hict;\ăU"TrNPG<ctMbWha?:\lkY>ExBJ^a$gnP#JZ3)Jf=2AUvBTQn5C+qo*VSPu,ui/8X$ăU"Y,pr>*\N9rap_v>SG_q#P7ddQjSG-TQUH,aHVl*U%Uu&vpALfE0gQ\7fhV%%H<,ăU"I#_lgJQbS7vU(RdHQgNhe$eFS86JE;ULC>AetzM2WLu6c/1su;t0uqklrF/KFOzăU"v8zi&x,bP7<o.h^K,%0VNh(ZrW)*%YXt'v[INR_YhFv_Rmt]>JZP(fj8irn*f:qăU"rwQuGV/Q>:0QvU6+K25>azA=tkZmuq2sxcb$G_[p44wgq3#Pr/furS-7&)Nk(WXăU"BX2Z$pD]ZA^+FQ#buK9'<ML#'uRkfb1Ik*_LRGmzT%*Q;h\(XG77;*M1egzsR0PăU"dp;[9io/_6,&eR'WR3Sl.M<f#0kJL?r5Qsb&G2Y-_N:XLt[sFvERD(k5-H7tX2BăU">PV#J5?HxOF4;O)XxD$05ERld4SEl)YpJF8*V)IkSR0>Cc^,d'=0*X9CTx1#EAwăU"e6XxjTjZ8PtlxqZS\^=_/ZpwTJExfWzX:Xr>JAy*m-hxk1[4T82\>w9NT67gz+oăU"_o.'J<;/1*cF6YtXRIcvcQ4$'NKHad&GDOS^.0d-<-6k>E?DG=T\xcU+0opLFM/ăU"XJF-s?>p_^7rDImTG-wS#2P^e])cB+OE9nN]i&51AvgVf?Y(.1G>ToLDd3mBSlyăU"E$<s;E'rlz7anFQJ(;P_&\1ZN;,,$gCqtrn&Jog&OV>%\)'knI7t#k$($V']LX&ăU"v*y<Ea#pYZWuS7gvV[r'w,up%()9%%%%-%+*&JG,*kY[*xU%%+,s%%%0%%%(j'făU"r%uqjS#lwm[5kT=H28el,%=hF1Nkyh1pW]5h,UXF>mAV4tMq>,[:ExkPt[+W:eYăU"xIY%<M+H.MrDc)\bx2't&+*mNO,?/OvO&s(wOwJRw]6.1]^_[w6Pot0f.puwxpgăU"sdx48<szxZN&vn^Z7XFK98?CnBLss^#r5)MJ,tU19a$xpLv.Lisac0W?nv3R5V_ăU"=Mss<LiK=,Zqf5OZ[0m]x(tL$f(Dvq=iJ1MVAiXDMP8djRB$Cq^VqlYZmmY>394ăU"T4=6KkPYqFYWj(>kf[]5Z+7#-lGSn7[n/pBk]2qonS\6pah$lP3G*#r1hlg1S]qăU"Q6e;oO6n<j\rUQ8aunlS3Gjb,FeTS[tgMiq&E(Y.FKJ9,Fq7jDsLueVRZHptlpdăU"81+n5_MLr3>2oGuXD6l7gUXJ0=CLsd\Lv4qpN^ZMv*ms[#REt>sL$/M;Op4uN&tăU"t&n\is]^t3*'mq#3'xzTW4eDJd2w\Y*lzC51sTM\P+IxwDZa$7'1[dm5zT.D6fvăU"%<QXb&(6/^m#s&6B]AEMKT<8wCS%-;f?pSrA4,X+B%??DqK?C,V\+\di-'f7c=FăU"*PvmNl%m;Hra[^T[JY<W_H;fD505sR+EHbQPeQaMz9H9AOG)L2.f%YXE1(ZhbmFăU"tX+uS5-H<by8lTqOs5wIkY4>vjH'h3ftfvj9&Z.d&U=C#V?g7q%;/PXYZ>mwArSăU"+n,USgO&.ddOOG.TZT6eh#WR)fa&SftF4QLW2i[WEcuY4Slanxftq&G?sdGR#HwăU"m;jDN6XjEz*o^e/h)&4>l<^>^8f,g&uq1,kZmrPPQ(fQybw3j0./G>:&uF+<ol,ăU"1/K+f6Me/;4T:Q+#^Qaf3\MOeT*uY\Dq[7U2L,/>:zhI3V/ol<Fb-L9J,Bu-boLăU"EwGMTt3l:_Z5_rpWH%T52XM=uC/[RBsE-KYv_M+j'[NWnFXg+?htg,puH$la_V$ăU")Nbj(LcRAIvk5s0SQPL8rmLy0FSs&MFq,'N<PfbO&:[MpsOEBi6K7bphc%dYJ6HăU"bRsk7w+uuqQA*_#/csj.USjl]jfP:h(C7?ug&D65fyhhHF*Ak+Dh$WX-jNm>)0>ăU"c7K(7+3<j5EVGN'djpHiCr[R=r,3TrEbEB6uZX_45kp2>jB)U2c,7^hV0\Tttf'ăU"6'p)p7em;%BnR9*i0*V'sOct;5tMA)2PL)dpw;PyO8Qg1Uyo5*5BXuO#uZ7et2jăU"d<1uth9n<+%i'4QTc6Ds$fuX9tfL1Wnj78#T.6NH'X9baH70)(z,qs'vH6gq-)WăU"xdIhhr].>]0D^6#O?XjjTtGm\([L0Ms*1M\(+-T$*lHON>4Riz]kC^l>WCpkf^VăU"^?(E?L.X,+Y'8/H<S]6^.fjW47b0h<Hkj-#lxgG+cRb_S^JDA'&UXB;9$cI*KQbăU"?92tKAY9I?)ai,gcI^Gh4OW+*MxfA25,a*QE=X,QIa4K7CKKr#YpAE&eNOWn+4făU"JsHVWD]paI7ZAW2Omfl1%7i[.Lr^&b1uNcp7]QvmpmPD#oMRXaNK79H>kgLD2wiăU"TT+In:GBJ&1-SUp^(i)f1\#:8>WrYMhKHkcukMmS-4k5Qi\zY+;Pr(R*^8ITDpbăU"jpDnCGe1zVr1zSibRtdm%GS$yeGfgW/]5vIUHjT0ec=8Mn8r2W0k1sbftqMT2]YăU"L5lU-C0(8O6.:Xk$8y'mXnzL;-HD\>jqgBK/D>;Z09%5Zxu-hqjwp:jp5l-cqq=ăU"t9S[+>=ht\o6jf7nH]c&rY,$ZZ[,'wX:xr(s4<^em]boQtwXo<EHAZ45[7gqudBăU"d#u?Wd7-il90PK'=1(&IMs<\>2MpN:kbW(SV3,G[Gs2FN#C-E<Qf*cLxA*i.jt'ăU"pbjvnHe0aX;Qll>K5lw_a*?WW=x;.%gO;Q4IT/(1mH[>,tJke.j=1AZ(r+\4F0\ăU"\$lD=^#VCB+dA9.p8G6r]Rqn)A#cQUYB;jJBQ[20h;FvL8==w^y'uk%7H2r%FciăU"Hap=xtI'GXX&;gtQ<suo7bdHCpGR$<>9xY?$cpsNs7bCTdrj?7q20cXBw4WsM;băU"&gMC/?FBI\sxE/c(9.4WkqT096E9$Uu?(:u#<#yI4cb)iG6mk8=^fINIQ51?)/(ăU"S.IIJsFdCV6QclR/e65M*.+;q0CNeq+mWB(\DnV(gOBT=qeEjErg7I5GBc;B+dGăU"[/e8pNQm:%4oFjUP,6^EFTceB&)rC<P4iEVjni*kQB3k(HW:dBDCtn:L^(.<\lKăU"3KozaXuB>ptj4Ig7*p&CSLqi8Y+,*>Wh:BDe1DS.DlehjZk7BMNENJwUiEVk\e&ăU"Uh3YgZBK&aDw[MY+\pNllP3U;G;Pb.D+81aibs%-g:q:j#'$99x)Z=gHXZ550vxăU"6pfi#_yH)3YpG#Nb&J_:\8&5k>afA/BIcu[+'5X\Daa/&_1qc,NB4BHl;(\0aJNăU"I=8XwolYy;e&7IIlL9xb'pd%-%57LH%_)Rzv9BxntIuaT3u69xAF#v>><nG$&h[ăU"mTiDqnv#'.L%Uz(ubuT4#RCu<<+3DdUs$:Qowy#Fa#LtR5*w8\GO%,Jy-U&Lr^JăU"Xj(M3xG)-=Z9$Gg)n.vD%ScvgStq^ZBBB6c#4b+R'G-3-.<N1G;($:TGFHW/,.WăU"1K\Bi;ufjMG=O[Wf<$*[?<jjf3l$0+o;U<\Rr>.gw#c<XOi_J'KKu>zS[s*('&xăU"R?f2p.k]#z2DmQdgYo)Y-TCFWc8[\.Ognb,QdZJ,ZQ]#q7[K1/QuhUpB*e^KjMgăU"Na8ceWN#FDDubMi3w9U16ttE2mvl8jVtT[iwLP&jGifDDlv&h:tV(JL(vXIeYj6ăU"uipa)e_)1/zOX]Ox+f12qheqc+kR&Y-a3y)OJET4Q67>jRmWAQ>sy=ef+vT/8J)ăU"vpvQ%;h4k\GAZZ.pYgtnf8eF)pi*6BQgBTWe^5^[pR2a7CPf#5LCjL]+aQuE[26ăU"UpgVIDp^%*d:0FE]'0NcF4>_&:V4%N4WEn,j(d*0FgeE5lO'%Pn<DbuNqpsTeZFăU"sx,H3aSwCm$gJ<xPUHL/I.=[oRQ8qo6e6R7#Bn]o^DSzPuh4/_(O0HkA[kXB8h&ăU"8Q_4_ji$cs4;G2B68'YRH:%:pQ'gWees?K3paJ2Ts6EE4jag9H]/E9[2a:5wRMDăU"y%gYUQ0/6$ixgRS5>xbAxj)Rf8:sju35YJt%&J.'>/x3S&iOy-]+O1fKtD25AayăU"$q/&?3)Mh940[NPj3aM7yksMsbGF+vZgt\9IK34R_I)wx=m:Uhurk0aXU%5hj'xăU";D_T>l^dYEqIyoc*k/f5G6-'U-1dOy%iD=R(Q;jgvd7'N\-4C';5y_M&yN+EHR4ăU"f(_10eq47]*2'l?p+tCX-[/xS%Q.v0<gYE57k+*:+EQ<KO=qx6LSizOT\DWiGZ-ăU"ucD;xi[C$6'%'>o1hkfR2FBUk=,dlF$<u#U^LmB3%i&&N,et<SkmE\r*Hk4^dCXăU"d$Qv[&Cr3MlLi_;09;wn#jCqp5GJCQg.va1zozyT2BsVkxi>W11np]l7;:v-_L:ăU"Kj]M2v)J(88G%sFlPy1y86d4b:Df?PNI&eIEkYDPWElw'YUTvT]j%'v'*]X?e4YăU"tUq2H.fJl0Mk'8=0NLP><T9O)+tVS1%\*=06V[r<sqb:#VW;Zq0R'V=;_B3wy?XăU"%MXgE:Z+5Q9D$Uqdi:9MkWjwaj-mCZ3exv0+*9z<NS\$GQD:Y*#QH2&+%gN\&bDăU"Uf)#YDD38gf4(yxjDhSm>oZP07hoShLtinju^S6+fVsgrP(lWj;s(xHt>Iv%i.3ăU".b1/SM6j2D0)kNrQzGN%XJ_0#Gc&lTeyBqnrQ6):w\dp[;m.VCP>65O/sc'(U5VăU"c-u[sYF+gGS_,\Ek30]&W0NQ$/#().OCfnfbdq0dRj-33\?wB%atmT8r'G(dS(UăU"O$P6Lr$,b&M8_tqZMUa%gqms0?d>LO$6cgnX;J#O1b>d65lSZs+6koO9B)hW033ăU"\37dioEsctR,:<MRZRwPcuJcU#xA\>iI.[hh0NfF6-ux^F2=6MZm]<p=Ju&I%d]ăU"ksa)]Jj%z'R<--khlFt=y,6Wds2Mox+J*b9&br4er&SP[f>+,bUj\#PVB)&5CpaăU"yh_;QomfCbO4K24DeSyVmt*KU\h#5GK\D#VgH7eOj_BK+c5EQ'dWM0[xSS]5)%=ăU"xJ/PImFB1.)QEh,F13d1_8P)-u^WiTHW7>DVEkaO($^lASao4x\i<^Dtq3+R.>TăU"7'dQWDjXMNb2oaQDPM.trZc\&0Vq:pBaNT)U-FI3d1qoK<[Ej*j(8X;3c&K?wqgăU"4p;;pBCKWP,G*G9CcX(#tLV71&rY*hemf8b4J&o0_Y$$[9X[;v*\+9UM+=d?M46ăU"jHCOlJcTdGwhj((F1G>[5%\M3El&t/YX3+a7gmQ.(jaqUsHuLa-'m=GAltbfrC5ăU"Y=hyCg\TEJ7F9%BWdemS*=Y.pCni\TBtqrf^xs7lkW[/8MMgz1Dj9z?0=8U0)D?ăU"I5HM&m[xeKt\jw+BHuiptQVOx;\\*6rc(7oHAlPKZ4+bYQM*d>LFi6])kGRiaN8ăU"]Ss0Q6c-X8Upt&b3;KRV&f%;K>d/P)=Ogt9OCT?2raSIuBf*0m#NlqYN2rXUX,+ăU"_FFuKI75y&ja:y<J4V8y3'Ty[$CvuMS'+An?T[COZ4X:jMC>1)0CTp'eug7P$88ăU"d-&&uexJW.Q\]cV/3c[7<xj0I8guvt'8nn*8pWTV[fcWqXecuc8op,RJt3NVn?RăU"/-[.c)mawSdsT$A.t/Kg]>4-(#9Jc&2aIzaq5:+P$W[E6qXArNmbpqK-uOe#7zJăU"zeA,KI)*sP^5w]cBL&\OF;bEJKsVLLhLY%gB'BHn7j,c+Xhqkk#?[R0rM#x6'Z:ăU"nKm7EfR;]b?MTHCky()l7C1A#?e)T*hOvBCgQ*Vn)r%GMA1XdxUf?:oR#lACf--ăU"6NH]X.HagAfnlNu(,t2DT9cHc\3Pv70Lz^SL_W4&6aH,pQo#Mq+JYiPE[AMa%j-ăU"Z<AxIu$T23=f3IS3AJWE-tGejukiAosL+YN*8^NZ67dg4,K/3?K#hZiW[tx7Q&LăU"HCzt%vdhRh^3:lOVu<c\dHFa,kPnUu:fLp5,b;_mZR.L(JJC-XzuIq1WDlP>zC4ăU"f\qyJT-<m:gH3[.j1*OTQ'IEi]bwZCnJ#dT>ovq2:c0UH:dAJw75jOydk].(\HwăU"Q1%XAAw/#L*b\WSTWpTw&<Y.a910E-mo#cLMa^7re8RC2Zs)c(U9j;R)-7Z(:UqăU"/KRq0l\VtJ3XUd=1=YCF\x=SLr6tOXALh[_hkk^39DKo<^7jzYL'afn?L'vLTMAăU")XLJ.#kRYQUBibsh&a_xuf7nGqL[)CuIK5$hn_[^G>WPdc5(yhwU>hSJPPMbPY_ăU"3z#M$nNci\^O0tO9]tJ*a^K-BOZFou3(FwTSHn>A7.+,j&gVxNO?.D+^a=mYo<'ăU"WU9zIs/AeStVExk%etD\cI&7q(_z7NSRT'<ltC:.[+DYM+-gOU=&POV,N7\bXgaăU"*:<9CY-c#<'(N+*[#X4_Lk*;&A/e:c0mT%DVz<;88q:(L.dEsZ.+e%1Dv,/fgKPăU".&_)/,ImWa#VLG27JRgyBEkPwKGf?uY;KD0;4dhq-Khjy-WJdgb[gTNT(gEn*jRăU"*$8OZtl0C^zd6]icTIIA7X%G#9.9x:V)iDT>3GvcV,AeE9N8]a;ACwLN1'+/WnVăU"pH7U7>kXiTZ*GtSoHF&_N_4A-L2*d:x&eT]R(+,GDjTVC^>W'0Ckl\.hqXJateHăU";1;]b]sr4?wjSMl:Z=b8s8]eB5BCg7yFYae42tqmA#ojc=\%mO+J%kt-hW1t*e,ăU"hC_B7N-_ti4ok2p&quEujBJ-r(D5]fQb<3CMh[8vpavHLA$Pilx<uR:r;dmLDo5ăU"'uK(gm98H;kn7XsW&:&f#k:;tmK9Z:O0]mT[//fAi&/Gh94SRQqF03?1GsoS>sGăU"fIEY(Mj86w]XD-MN<k-cYk?A?Ja%hW>H?WQFA7B=ATO5,P_%qPoerL9XHA?:AVDăU"NPl3b:^#R#i%rd*vsLmB]EbF.,'uI^,r7s2<tlZ1r3?sDCMXr]h[8LaPxC1ctwrăU"&_7WEj9MmYTSsAxSn=hJ&/q<1xIEvJCb(BBIVP+v%VyBl2]Xxn*t7g]8L,:3O;AăU"YW<Z5k&w_*C54>jnS)T)Y&wJW\*Q9Z2VCHDNW4Y-qUYN-Of3kGUEfYahKp-$WVPăU";k^BID#eM6)%$g+gN)XB\lj-SGLIRn?dmMef;p9Z[JBO-9xj9;=KeCz:z$E'(PvăU"_0>P7BNT?0FHpVXXHZsS(v7DAxhs\mt\iww3U]Lh$n),ZE2b&uwuZv(FfYRg2JIăU"]bCV4ES$Sp-<b07V')LL)&UW%_x>g<9-j'k?K/6D*FwY>y>A.$NPE<X*8lRcXCSăU"FMEw&#CPX7x>(*:Ki+vo/K<1e9'8J3Irv\lr)5sX=)xXVStNatMZiEl4e/Vd)\făU"+SEI6'\sYsc'f5\;m?UzxB'#PNWI6A'1KVtD[-3hSd-hmG^wIx_H6p/\]qI>BBcăU"YIupyl2h]#)r[Xer,q^lR]uTh#OF.z..RNYPCbKCdJEB8GecX1_Yxl$h%p;bMxTăU"NGG:c?sSHPo>PD$*HW<q+?1C+/9:<+3=YYN<#Py]Gl3CWfg]GqpOONBPmM>kh'qăU"oNk=Bjd>rYT7];DNB0hR;],qQab*a&Ext[#zGiE1oHp%4J^*Z;vi</F3D-e4Lm'ăU"PBnx*+D9)2X3IybzD/\%zM-%M#VkdK.UMtcIWaM1>O#jfon>JMud12sNfTa9CJ/ăU"UlQuuJppAP<l#qcJCp&E^CN#:b,QDD<zZf-y4'%*>TseL*pG5GZTV%+wG^,t3ugăU"8-?>xUgt%RtqIlV$'&G>Pq?6f^1Snit[KUrb:[--ATgl5.IDg,E4EUB[/zn^Yb'ăU"Wy#MORn2ix8;Po(=4AJOUd#Yw8GU:vrQkTAwe4oWyTqv)i=F3&X2e=37NE*>SJTăU"BTif?bv%cUW)9zinVzxL_K0I*ZCjn'Pabc0wWgQ3KDW.Y<)Cq)dJ_/YY9/YVE:măU"kh:+(>?KZ'YQ=%kZFO\3/uP6&WSQFx_L]?-xZF4rKsc3Z_QEW1D'L1FHCHO6u6TăU"UFb/Ah?yT'k?6PqXgXp\B6,sZajhb;6KL7R-;EWMi9:gZUDIkXJqF1=g[hL*jgzăU"Z7KKULS-.fRoTjS1Bi3?2Lz+RZrWc^A%QVs#rYB5Y,l_p0prFv%T9%tE.dSvH#PăU"h4i-x2sSt45lV-=^*qwd9&qXndI(*6I,%ZL470dPZZlV>-[+9i6&&.nquDTQJy)ăU"3#B1et/T,e3Q/FqU;-9R=n=v3vt\/)<aXu,%-.hK=Awqm(qJHY8Lo\P[D/TG810ăU",-q^WYSMeIZM3)dH5dWwyCOZ:A6t8tOj6va<Cwao'F-n97s(U=Jj2E&v.LX0)L?ăU":wz-x:ak06d)\L)X6/D32Mjn=;M^LyyDoNqFke-#OlV1l[a]ni/McZ[6MAHw6R8ăU"7g;1gCv(Zp-ikCB%n8*Mq#Zc0jJ&B5DG#6u3Xs8OE=r9lCOd?\:ifJT3pA2Jrc5ăU"9oWkk+dhvc5qc3:.HAb&gS7IG]?Cr/]PfpYp)B?iM#Eqcco#N>*T(UdY&&t'?79ăU"vGWR$Pzj%bY+x6huvxU8ut\;M91,g>\bj8(X$CaJZz$u#nMRQLEaxo#d\XZ_N&?ăU"_bgV$rnnc4S+JF86&a;LHG)idOf&YGN2bNb]/P'z+lj',ltj5i/F$t%3Os&/m'căU"*&m[:MK0tG(CqYdS*o(<ponD-dqy1/&Qz8yQ*iBX8oqi<X:(JtmYlaqBMk[=)ljăU"J-%a<u0OvQGw*>.Ol[g:nDkO5-YsKjoGxM(jQ&DMji=>'A.tdd7x9c:G&-_WUbdăU"2>h?0m1^u\G8+GuN-goh]NX1i=D:z/eD<%Mts;YBVBUCImHBi#%Et.7?wE3)bv5ăU"h;P/9NHr(ruEJ0I9n+3RSOEz:w:qNu:&44mR4NTX%vk%cntPY9l9iS,SVPZ#2NiăU"erJa?'?s1jW-D2huG+'FH\'42W*Fhc(HKS/UaSAADNTkTfW*%D,=<L=RO#>A%UlăU"$6d+w:#u+s>VpVz]UX:Z7)KFw_:z7xMMY5l30EA87m0H.TO?3.X5G+9oi^maEm7ăU"bdwQt5r\PZ;MFnd?9(6glEt/LPU>LP;[I>YX,H^y:9^%5gB7_m':Zh8CVfjZf[aăU"1?H8P&rC\F<FK>BT*Xi0PN;*-Y[rhzX[TF]fT(A'(yBTrS-6;6x9t%YC&>5\P;?ăU"0T_S*h5OV0)NA8GF7^B>4DQS$Z;q'HX=HENo(jDK,=w&o#[b?iZ:cZe>J)2JQ[YăU"1iazylb7.UNUE?\IK7Q$Aj8o%MQ0mY$-DnjG2;gXlHqTN..w[_ZW)w/eixIv3'băU"$k<F?mOS>C?wCj=AyNpAxd4?t??SCtvNIn:DKRjf6Y7U:<B;9+lNOFq^zDWtLjFăU"ttaM&diYk[5Q=Z7PKJ,coQD[WsOCH?'lGDpG3*Ik%-'L/RM+GB6*6+&:gn./t&băU">ecI)X2o>:8_fepq:$K))QKkrihMP-z(ZcmkR=&aTE\$)]Rebc8SQ7D$wB[q*kMăU"M3c7JvuT\q?F'I5qL>[7MJE(lf3N)2+AJ^?mp<(Bs&H8fY\7e*&eAhrL<SK*lGlăU"Mq<UHF07.qIcO08PeF[r;SwjEnf&.^7hQ+LdPvd;PX,dPTk_\>0McYnh0jMHcJvăU"wXn5(kdIgZnn.%&X^GtEaK&eDe[?V[.&C)<r,OXikE4m1)d&kI;81qdJd&RmnLtăU"bUGoS?AmKUi.y,W;\OMnjwaK:*#3*r4j[KQ/b;W\e$gnCtMk)C874\O3>g0i(DiăU"TharwjM$K_j>3M%#.hN%W%I0:H08GBGOl=%xcH0IZyL9XTp?NiBK(*s*a1jTiQVăU"LPNdm<:a6GyIfcLS\h\T8Axgu4W\2DuG3<RH&M*?Utn-ldR?H]x$Jx$EDAW)YIGăU"iE*ci&j0gEJnD?5+4[x*P5?>0P>z<%6n;Q=WF8LclMI\8J;BrekCqlKsS?:dN7năU"%+do]9rx&xdZxPDHpM0mfJrLOc[sAy*qZQ0*P8qaFQnjLmffh=Hb&5hDBg8JaGoăU"Z>rFI6*Y$krb\v]e[[oS=g-7\bYd;wPlfll?px$<YF1u&1DKM5NB'U;oGKd]8ViăU"v83RnPU0wQw6kY>7DXWWm*QABAf8>[syT1w8lHR7Oh-xd09hWaP]BIVxj09Tm2RăU"<37jgW0L(,Ulbh^X=Sl\yS?nseStv%ysS^^Y]Z4_z/5TS7o'z8stZkVnG^lR'RjăU"h:WO#9>(27Ya$N]?9g#F8M7CM2u_oudSz\x\n.UHuuxvRxTtV1e/IW%OlB27rC\ăU"Nn4WEa$&$Ak^;YpG(jZQh2O5ZN^nZU6l6i^8gorY*Db$m^qcNT'Brh0QEIdeg&măU"1[6DMS:LjSX?\oKlaCi-^iF$Kq?^FFV9I#xYA]<,oG<eq04yti3Oa]/>6Z#Oj#'ăU"FB.M(kbMDM=u$F.q^g*n\0k'e-9usslBX0o$yY3ge<Ql;E3tDBrDfx*_gkxHFBYăU"7?r)t9Z?W<,5XsmKFIE?_9GXI'h?qJjM0D$OH5hQioBB0Pm)2B7hYOH8)<#*eY,ăU"ekJxu6Pf%=bZP-.>Dea4sc8%jX&;]JH:Kg8M54Gh%RJdDZ<j\N\[/l]AoAa+U'măU"rGb\izI(8.hgZh:dkj^Y6yjtpM:pc%vusMnzbBezQ+fk5VtQ9UY0iU0*_Y;w6%KăU"<BAp]lUEeL/4WTTdO#[Bd)k?jBqK.#i*4M(WS\H4I$\2b0.N.iq032\5iEPb\o=ăU"p'bp.EvC&iWtX'J98shYeMqvriaRkjj/-[/_BT5/POB^.a*t?*:fPl;oUf1*QJ%ăU"x#G*OFcOj2>;b(_5Vo^$1hV?P'0:4q'5xRM6+XjQ4((*0*DwdL:z>h6B)Bg\VkOăU".(ZrE10>xay45_pUirpxv%mY5)2/buU#SHbw8::(F,^U8nLiESW:fE1.U2l\pl*ăU"StCm:H&V=w7iw63UWf])M[X\\jDBB81v$S-J&_GFd\lf=Pg,HcX4&HMS19V$sa'ăEND SUBăSUB V2ăU"?oC/7(mfa&Rr['2n\LXQn79<SO[p=$M)>O)V3lad)=5LX[(iF/hU##J,:4h+dmzăU":>mO<OONggj#n0/[7D%/j9Y'IZZ(YcK$Iv1%Q>)hYPo3jFogf'W365*e7DzY-ZUăU"n>MWMa8t%D9I9ZpF$=\$dB#2lM]y9HCU7S:8B1$Ib^*G_a6jjtZlWAF7fDdCE$/ăU"iFonT)PQHWV[k*n0.*jj+k#p9nXWuI8%jkXhkzI##]ACs'KCZ$+:9*m#IJ8+UFkăU"K\+=M/<M2dVSi<aZ^_P:Vs060-*\*^Sop=AKsoqXgOS:[5[R2.H\Cf9cVSSrKN1ăU"#ipTbNJ7vPp'aN'l.Obal$&hd;qa_h,S_yt8XDC4>+Bg%n>Bbt4YJSPtI*-R6FQăU"v?MRriJmVz'AFR&I_mpY4-OY/qWeFHPG:%'b2^n,lP%[xK['-5%Y6<F)s?RHMWsăU":bM9bks+KoeBwGVk+h5>[MHzHd?0,3>7Ry>+559<4_tM2*zNSTm>&FfLUuYIX9căU"('vKZEZBl,G_/Hl\IkgN<0dY=KL?3r>l)Nl&HJQ%tiQB3l/Q$Rx$OhodgztC&Y]ăU"8rTDSHNM,2(hP;Al^s^ZEPPQ,M7[9]xX\>r*'P6xj7Y-W)kgHo%qe_8:E1',.O9ăU"6Ppf[*n'x%jXu;<aH5=]RTu8\_q<RXDW<F7myaHMENDRW(xA^-o39,M4O5[esHxăU"K6a6dZS7g-Ha^\IpelT'<MYO$6[bF'je$S9%:L,Eh(B&OMK\.r]T6uI+OW'oY4XăU"ZqSw&BG$p:Z12q)3?SE_Ia0%oXDQke^Z(.%P][;?Mb%kZ]%\u;.QK4mjvi27iK1ăU"xR%):::SuM==EKcoNO)aLRJ>OtRC(3MuVGC?aKMr.QNHuwFmfKkVr32b=VHaJ2]ăU"B<qHQ+g#2x>WfQH+qa_\KY,Aqo[h+bH=mO\)Wlej:4o_dST:qmgK0nb.\(mKuBGăU"G,dN*=8vKI9,)3Z0NObc4J5H76qw\HtomqM_u%FbIpTL4VjS_,2l*4%9.0XiD-&ăU"Pzgtrux*86]p$dGKSFM9?QIvyhAk;w]X]+MGuuW8*fcK<:+Y.,0HL+M*zjH+3wgăU"R\>o\r9'VHC>aF=*G,M[5V%]A1ZsF\2/(Y#QXh+qNCXr,)63<9mQi>2Ka3)cGqzăU"uKW*=N[kVB(oFB??&c[GSe_:jK[\Rl(kqgH/%ZfUp:m.=5EFI$F7:w+bIZ_33+<ăU"&)PI9<\l;7C4M+uW?NCDu.%r'2'h:0Dla/_-j//tod[J?N-q8OuK$ThIAeby[U9ăU"?o<wy[$fgKp3dl.E%%&C[LW5DI:RB[dYZ#mDCbQ0:-AkmDs/RYZ/MoiMQ%a\Lp%ăU"q]dF[f2+c(WJ0jcBmG;#f5GhQ_+T#sc)L_vEa5nN/K-vhAw>UuG*=sr,S7RHbW<ăU"q;lyhq9ZCZW?6)_pUo7>FlgLs#J74u634VZ0-_'Z814bL;7b;([9)'SedU'LDqOăU"E#\t/=kPb.;)\%K]RCYj'D+drJIOrC%eZI_jZ&.KvI1Aj;VolK+^h2#0EwBk$A)ăU"(%f,)v8.&B'2%LKhhig'&e)M>_yGfBBQCCOhr5rRK^gpd7m91gkFB7$'%1+b09băU"s_vUF/AJrQiq;gB9SrDU/U*,vEt(F==65hoq:;I0[lSR-Nbul>B_(YdL+Y^DcjXăU">KsBc4KIRl0b&2PvpI/]9/rftc7/fc.4E%8'tp2S8h)<U5AQpK47<V.nj'&NbFcăU"1kH*ig>#nUJzF:M(e<v&\xvn0[_5[5W$$CT=^PAeAXsVn)\3.;XQlda>mV,u;95ăU"S3rEea0h&53.Z;PXqB)^9k3e[]<K+V$_hLHqhn\%o;74&kP>3#Kktc=xikF;\EBăU"uS'u=K(Kt\\KT>5dfsM2L;ki*Jz68n8I%#58=u.mhaZL#2rx>,FUz+\Q+$4$piTăU"_6%ful(LSK8J2]X,qBmU2,_/QaeMT*9+tx?R,Y[:btTSxXov)APnEkX$ij9%iImăU"w.S2i>5rPC<RRSbtr],o>H]OeY^Dhf9?p$;R%$L9902uillI]kWpA$[B7kpLP%'ăU"0N2oIR+Oq;c#.9\h7S84T'O0Nt7;m-7q6h*t\[Bn<,=&fVcMOKo;-;/je[=7\W;ăU"yKB+4.g#cT/CLN9UFDgYDm4qq&t)<t;pR.\8<L#c4t/./1XWe'\>b?Psl)KeSlPăU"Gz8*[F=M;#l^<Q\>Y'>h,5X[g;.$/UzECZMF?^^Jrx\r:1#o.3[K8l(FP#i]jgrăU"S(<>U(/l(l_*Jb;tm&8rhw$VjJs**qE/D\*Dw5\cht]#hZO&uO>oOGcKx/Unk<oăU"1U\q?oPLNp6(tnatoMg=8nj#cI(hdgycZ&2upNJmEXYGFUdN3=9sb'uX><RsxM$ăU"/iq%S3<4i.Rnmj>H>(q^jQz4J6S6kuH=[EA96pf#3u7TW.OOe=y#*<3T[e-0(5păU"zPBCf,X[3(t1N\5^_J[R^S;R<'M;4Ok9GfJD.IQbLFYuwKc(^kZSwR%#L:pCz;păU"ROmTf2fCadB1.tPrq^0b8$v5p)wkLROfo4W,tTH6;,%=AMnjGu+YppR5sBbSM,săU"9Yx.iMD9T6U(ig3C1wq9dhhucrb=_HoV1D:oWs3ATO9Y'qc2E2$CwSCn(bZ%HKUăU"\B&mad<mXsSP.hm\.flJ*La<U-#l,&^*HM>xl9Lf<W/2?;F_d-/+YgBN<mp08,=ăU"&<hpN0j6j$Bvt<ul[aY8ef*N[$7i<j(Sd::+N+tN)ZxP8YoaDQSLbL[R#nniW%MăU"Bi4qZ[*Ho0>IQCYVi<VaEY1r#J)6zJ[3'P_j4B]8K+I/Gsti%Vs,(gY#rDA#_H[ăU"U3HtgDC?l71%MRY7mk>[l*,0ra(_j;l8]2W,58XfBQF2j^%_kF^2[.7nkPFw__lăU"Xh\n=(nj:qk1Q*fg/WweeDSWZhD6-DH;h8/J$d=DqmOE*=Ng-1ZE_fSjftXoAO*ăU"TWsvFsXQVb7$UgzNtK6uL8j(_pde\Wi=;%yqp4^IhPcUO;bQDl;m4D'7hBO?hs$ăU"jARoN)BB3QTrKcRcrKNCC;Av1#<;ElJ=-_('+?$5Y%(2hfc.muM=v>-''R[?3=\ăU"?_cI7rBua-bK2irnr*]#[Xrf-TDEE0*uf:Z=k6XYj]f>sMg?4p=VKw?\jo&x,fSăU"LZKC;2VOX7QvqpE7b]q3:nSixfvPJ&Ez^cuA\-IXl^(i,ihv1z9)7QrS5.pYV9NăU"[D[0+lKP8l.hMUpZ$F*8$H%)He.)Cl+XL&A?<GG8UNElX/ct>iRRDrY>*a)34x[ăU"-fi]7k3stU-XAHoMF.r_*aTS]ws2#8$BWb]/<i'8eOpOY+&A-N.:SQwBrS27do<ăU">Ckoe4a)v4[)wt=[*(1pPVOef\dXLV7jXKNw'80qKGu=m7ADOniqtklmrx*TQMvăU"O+N-oxdnBj^PfQ.>M:e4o=F1I3owuDHfP#cFk)$Wf\/;#Yc/QY/'EQm.W/#;Er-ăU"w$I&uaG3,a2VDmr?1=Vj;Gi?7%DmFpka<PNg9;&m2zd%I#2bBOH2;B?vJv',QknăU"#_Rv:-x1a-jLkr/QK..HHIw4B=,$>[qkfR>WKlF?#WS(K/.Az^T2bdpAk51noESăU"#x*a'k3(dUa/)*UM,17?.Dg_B;F:&8eUe/iA^9mSFc,V[V)LWCbf55qBPW<?BnBăU"6]>65NU]D$SvN'Phdhk8V/+aVnN.lt_HZVbj,]Zq)nBuc2xcc6M'SF>Na*W*>88ăU"Quh^5^=yFA;gttzo9C>Tu;wqYB$N=?S7U#.5dL$sg#Ro0]kE7a1B-h/26,-rZHnăU"#lF+_:m;8(LMm9dqnTBoK:.Zkb<-jx]z;#TZ-qO?h,o_wv9e.nw&f86W&B^r_apăU"qEmhW]vChTj=e\f')Lcs>K$H(*mr8L.HZ#MZhKe:T\$p^=['6X1Dz6..Yn3,.0NăU"/p8E_MRNLvtUB_3<Pa3Jv=$L$_1BjP\XTINg$\1OrCU0j:an[7AfNi[]l)^D?RtăU"?),3RK3RXr^fH(.D#fdMoHz_mbsF;3N>g5Xc-Ql0Fgynf%kX&6E9rJaII)2J%t>ăU"\d1WNB67rHK9\A%W-#L[SnT]<Ms]q1.NZ5N-TYc(s#OoK:QPbC*h)2Vg5;B2UaUăU":Eo/;Q'#[A0#.bQ9CS3_StfTw9$w%h3elZKaW9qs+AguDo&_d9p2AN<F/vu:*LfăU"]xAcxhb(gtsldbCsF.GEXE.u1PVT_0b-4X9ucG,JV8\Y1ugw4gTI;nM850>)D-\ăU"m9Agu0mg?&&[jeR_+IR::6W&^*GVJ]e6FfI-1scGt]mH$R?&jX#nN?(#2lJlB0KăU"Tf4*tx$[?7z\Ba:D(Y]E[pM_W>Zj/W(CMxO3t=%KTw'8mX#(-?(Sbe,bK;b.nM)ăU"vOT-/rAR++V50J],TLU?1Zavl:k<w]JWJEIpU[2UJCARE<0/YCYF4uYgfG4HQ$dăU"kAdRDn[%llK5J9fD3]5y^1.nGK\4*TJ>O(m-/72VO*CtAW2*-ejaX8dI\US.c/<ăU"ali\'A%#bMVMmPlt6$0#<Ix?0_*1aPEX\wah5WD3-N69M&*(cEhpO'4\6)t#gQCăU"=g*(4GD2,590D*E'_\]8^R\0,t$gXwk\;eF8vJMv%H.?1+$p;W]u0A-[<A]WXbSăU"ORml\L^;?&s_)Slx+3;aQs$D3<86$B?Pt<RO>ZErU=*eM#]Oe#M7lS=R>3NC:j2ăU".i#j;Up&Cbqo%FGH6?d-I74B&nnaV:TQO#&'WSbC1IRPup8<*&Yj.g]/eQ^B#KEăU"R,KRTN-;k#WL.fhSkGZ2#O=f.9T.oU.78pm-)\/;K%/\NV$<qPV:-d?$xc$Jl+măU"+iU8d&Kb^B_C5gA?dCCa8CfdK<N<TDk5SW*?9qG3oI/ea4--S#*&>N1dG*yIY\0ăU"'8=d[$?)h6Xn5A#?lT?V_ZW(QQZmTc,Aq#wUDZ,rDq6hD/fBk7+hV)02]8Uf1U5ăU"42zRNUd<B4zc+?XRe0E8u*2;W2htKB>c/ecbt,?\a<0BVl])waY7$Rkur?KX3#=ăU"/TsGtjDKIcyJ9u=E'C'[n9<(tPAD_H%ZnV75q0T:99_Et0fV'lA_n4\u;gxYu<lăU"*cGS4?vZq1z'EFA?^ZXrk+/rcyM(>v_H*;URZP?$Xu0j;'x/3j4kB$H.G\9uQOKăU"ll.%d>;8QKPh>ahsI4Xhh:Xg/_'&-8N;FV=qc)e:.M;m%r0WB=#:%rmAcj?&o-9ăU"[E>bl:UXWHB?>:tL_5aCChG<$m=\d)Rv8($)OtL.S9kNfp._L?n'kpf$1gJa_?păU"^e0/Xk3S_ca^#^HBrKMp[nuUX>*;2)mlJ89^v7QSHF:.4lCB4b/wWI\ad,4GB(OăU"HBZlgNu&:hXlraS%/lPz;jQ#K(-;E9s>jZJ%Z4+'d&EqZp703Uge%<e0$795RJbăU"B*7;viV.>nT:6JfT^..KQ3p&xc:d=?V_pHxk8nYJKZn4_XpOM^YN0sJJCss*f*găU"S;#4Bq2Aw;f/d<lgm<HskzT<[3af;HV^mZjE8?$*sTFk(ny+QDV5MGuT$44quf>ăU"wUZ=H1(fmag_ba+xBf?W]Z-WXnFU/C)SD:wB_8(qmi#25#*-a-h2M=+J=dAi*upăU"=nG9))sf>Z5nJZ7F$gUSslA>jFvhrcrLt$O?q&Q&/N>f-icE)k[k8)O9;y?-igdăU":E6.V3(%#?Z'$Cj_bAr<<#9X2<ZrB/NL>r?xO\JS:GAW0N?7xUmWlWC'37mF\6kăU"qz1Y??^T^UmBmfEGb,08_E]%3^]Kbm#0TZXYH)OIod<W8z*PgwIVEOqoTDE&glWăU"NMz27G(]jJ&?kJ=4hn(^>aDXN3riYJTtX(&[BWa64[+V=%]a[s*.hM[P];z]GUeăU"&vDsNy$#xnv2ZHfIL0h8cJ>zci7AdD?Q-n%,grk_pSRAl/B5VxKZ?I$s9Wr5Mj[ăU"78oGq?4bD6uf&^BqABnot%l$#1Yta?(79wf1eseci-c:Z^7&06ISATcbZwPF/7păU"A9Z&qYPF)CMVQxraa<Y7S0Kgb\;.zee'Rf'<M8'-[CsBUvQwk+TW96Ej,N5$bmLăU"7>:a&>44-L7Zx1<3D]Q9:\,)Diw-rU^*:h08,S?,-Ns)lAm$U=>ogugR_H=/ODfăU"O)B(-Lw>1zR;-AI?dfP+26EdI8.2gcr<7[wW?\,h<M9Oa.d\*uki.,'f&iGi/JdăU"\;%w^<Y;KD-yGH(8DT2woA&+Ye#$-4:,(-:),,EEQCPzOa)Cet$eptDUfVlbmD>ăU"k_YyPSZK5esJa[0#tbT&Dp3Kfw>MucXhjrK?+Ky^RM*SUzN(Rq]NiRj7w7<Hw?%ăU"PUtI7]G$iqr?sCw7HTIra+v:XxsZ+%r/Z<6Z=&I&:SlLC,o6qN$8\g%2qX)PB?jăU"ijF24-7E-5NV6^_GLN^f>_G3IeO3WtIXcSPsuBm*7F],dN%_'6xpl4RD[<DVLPfăU"$&Zh(=h,U^)UuNM%<P>t/+CuJqq)gj/ftbLsB$mA_6chiDIlOB4i8YQD,7#+radăU"7$qKh9Q)NK]'uXXqwsDuYafp_DOt)kX?%WfMr$1J>g.Cp)PhMlQc)%SQ,.PuMjTăU"v[r()>Lvmc$/?\At[b>6k.<Gb7M[HfG95'pHpIrP;4'p&[:/.qv)v/g(1hhcWLgăU"%s=pB_kE)]sN1846F6aygXw>).P7LIOV?_2L#$gsV_G)N[XQfL:EbNkg[JP1GMnăU"NlK.gGcvRC/ocqYJS5:vI-j1Ly.he?:9fh-bN#P^,^Nj+9^]T[di*M*DN?j0UPpăU"7DhTMb[H'mg_L=nZ]$Zgu(AXr:EfJ%Y<5>pj$HnPRVZ?9rLu's(pAL;cS3gg?k(ăU"G5o5--MAS+E]ajun'hR;ld:u)02Q&ScM-FGkTc-<%PC3M<u)(yx<:/l\yWO%tqTăU">=J(#M7[uR9?&m7areqsrisNO7Cr7R2jBblZqHqq+kui0/^9C8UrmGrI0.&YlxDăU"3_[lg$YHv#^0,DCaZ##I#,OY4EO=u#+8Ml2.Vq;%-[XTCpYi#7_uaZu5T5%$G3'ăU".\Dt]cYufU)DxW^8cKQX6a_Z,7)UX0U02;=AX*1#DxR'00R?(0C*v#\w$if']wZăU"0>5q_5/\XS?e7LbG/V,>=:n'Ab%nB4UiYd5DRFg&L,Bx'MJ<Tj.s->KFo2dxGhuăU"nElqD:><>P$Who(wU0a0FCbhMWX8BL]fa]d>OupJxvCl?8/ANB)NeA,Hk]7u9,-ăU"R3+I7h<\UcYo1[Zu%v8BJMp-7ib6#u$$KQlN2BP2j[AL$H*V\;qxSum?GM0LVjTăU"YkAaCo^h9',PupACjFIZU#FwaKHf$Fc5:(l:^lrR-[8Z/dXs?MiAcBc.PN(wTi.ăU"9MH2lmy8p%YLlM8ibXZngMk,Rt:T[_1RXQpt2HU%S7:I(:SA9Y(w#l5PphtmPu2ăU"cjxAuVf^3OUdLu2J7XiNa1wIeWw3lWruX0GXvl^B$d7q;3H,AnjOdKlLT35:V$>ăU"79jBRjO[N^,C\Kau;ls>5^;7W%lRm/NQlB;GcaGM+x^7]GZ[jL/s[0w#6MM)HmoăU"qon7*[UY9?ediA%8\4I/+/4_#m_A'B#v#EhRZROpwA.''>h_nL_\H32Q2H7>Sa.ăU"aR<T+H(6jvMq6te6ic<T69tmaH0l+NBU_tf^-_5D&+ZMv:c:hbh?p%Q]b\=BiIUăU"3p(N]FU3fdQ(qG+sL2.0HBSKuq-c5Z\B&=\?IvCU\l+Nbuv8H.MV)oQ<rpmR;/LăU"/0sPBrDsw(Yx]Pmj#=#7OIFmT?]Y;<Y<:I)u,+s+W*ypeHsgz<m)AiQ7IQiP3dWăU"kohdBF-*FNBt$7e2S58Zb8d:T/r.y;3S8'fj&Tr/xdKI(MlPUWcK(d)NL8^2;dJăU"(bqRs)xZZB<,+PRzJ:xY,B_)i12VTG8l[8NHj8KM%_Bv$N^R/LaN8[uTXrlXmd,ăU"u33#tY\zSq^-;mw4BwG7Wg6q3Qi]UlPhQ:e(E5kFD?c3M3,LLfUrxV+,q(=\CE,ăU"KjCF):*&Lrb15X'IW]JH,51U-%nqQO;VwhIUud^FgDI85C9mdImT4UDpX05qD7lăU"6E+6G#_aW;jzP5/VBM$neoM(wP7CtaCiX)=?Wtx]<xBGJ]Q6KlWQ3&6;f4NU&'\ăU"v(o#Nn'ce.:l&_3xTaB[DoBh12QUdng7n\b]u=[iNY'c;V/QUeM(0g[4#L?EN1PăU"iVNliubA#=D-b7a3jD.b-xUq8rwiD.S?#pVE>eLr;;q^D2F6'cN[e1AYWsit]^tăU"<uT\ND.CBKDj=$^qZOkrbo8'mHp5s9>=-I^)e^-eH$?)o+\y=o]'5?IsW%1n+k,ăU";CQ.d/<eRY[7)szIxOk\1;#q9*>=HIsnHcZB$$QlG]KNaARisem4V?xA>E=derzăU"hgT:X/5jRx$&UhM;mO-cfH[l]%a4yg2N\H1m#Ur4ieN7RR+1^a6]WKA2qSgZkwVăU"(<(LAP4(W1)aGFfVn*F2d*CU?-K9h>%su'l$h7JkD=X#rq1>evUgX(BC.#2t?*+ăU"*ELSX3JOF_E?ve[;sd+.Fg/A\qcwltlU4.3[CL*_ytB1M-&zLMtA*z'REA55Kf[ăU"qIz3S,]6tGXhnev6lP82YdN]D2r\:d)+3xY%AduXvWbHMNaxqhsZMow-ndXNWoXăU"jSvc\YD+/p[r&nns-&8,:0B4=\)cqxtnx5u6'C[SNe/hGnK#k^SZjNkxe<'j9,aăU"oMb\A*DU9zne-9,hL.(^Q,[tX^mBKMSG+:$f5A)N:_YO<l:c$RWUj]w9n-V;QJ#ăU"9IP&X&6k)J\M*]Y*(V.>ilcQle+OJV#8?3NV&$]Ii4EmvyVW0h&X<i*+.hvuvfOăU"?dF+dKUZBSu4p>]7s9r3w]Y^.H'5=](Jq]rB1s[qKjSGYyPB?TjCCIqMOaBZ-,>ăU"s#=DI$RbO8KR/>=-\*a61G\t*[FxEu-J'tm+S58HM,yci.83.4-BZg&WPH[j;k=ăU"qvZl-FEfb([#Ei)?8I[NHni:d.q'gNDz>)6al]0e/8aHcmwJYrer<:[I8b-)SaYăU"HZPB1?Em8JrK1LrW]*7/Zm8>e_iAEZny)&#nW#Ke:4R:DpRJv$8N3S7q..+>;(AăU"-lW=3;*uoub#Qkv0sL6L[MmtX<tC:+3N.O:KdPjKEl.FE.3:t%Nv;H&Nn6*a([RăU"7WFeIYQuzcp<:AjB<pjeBq0F\I;XI;wdlQC$80037+xB$:M_&Ci-sXK'(4iP'4yăU".T3]2qbJ9K3=zRLIX_8qta;MTA&)z5bOXbK93s:AJ[ih/25L,TT:(Un4V(u<J6HăU"PyBt-N6Hd9S%JJoPfKqoCmCB2-sfnLmd0cOtIj(CL=bBZXa,3O-*Ntt/s/SQof%ăU"rDv/d856t1ljmBpmc%\j.z<$bo)L<Z*fs0TFX6gtNVDH-bl(G/3:''VSMltg:XvăU",'W=]ma+yX_FhVTva>&4TX-wYsJCt1$&$ue]8BSee0Va0OkLu*x]]M<\$M5W;PBăU")wcbsJxU)nAG#W_8[_5=FJXZQ_m:3Xa5r7(&lTkjt?;vK-]ozsLtFBq2Kqm0#_.ăU"?:AKA+R8'Q<\hqudKLebi:v,Sjn6)KIC#YfrW\p[ALeTkvHG%9SXAXVl/HzJ[D1ăU"yx,rPgVYgC<[?QtLwyml'4L[c#0YDF^GK?Cll)GNd21YENH\1RGWJ[_B_XZVv<YăU"WnMV?i'Dw0+9H5\<>%XuXK^1rtf4&?II7*.ULRZVO$i#4gcW[\RlqWocW\kt0M+ăU"K)*v6vZQdF&jNrPLS?Jj1D/$)AV[/52Y:qg^<'_b:xSrTaZecPU.iS-0BQNgD>SăU"=t;/>Lf3MQ[7bVm+le7HN'4S8[_BD8PxTnWI_lO2#VVns:n,s+[\=IMes2mW3)XăU".ZYsW?Y>FvLu,Tv$-8hN=VSdYasxS]##7NbclZaRV*<Ntf6c<E_VCBh6dDd(.-wăU"XDUJLj:e0(of,.4)cH'ljWQE[OX3+4aF=iPQ-m'/)CUn)a+^=p+*K+If]zN$*+UăU"p.=;T>h_binyV5&*1^Ho58;-:-8SpMX';CctCH5A?'PI[r*I<LW.9RN%<]:X6-UăU"yS<-(JXlXo5$jt:,i3tT[.H8M6)e[e[k$KmwoFSLFN/MML4;hEMttYW#4GM)VMAăU"nfc)W[R?KrUF<Cu7QEcKB;L+P'G69&=XJ.3:NB4=j,j&<qEjG/7u6N8p*:M[VfpăU"L-R7eV6YVMJd7X$B/OhQP&twm5:a1:GbNI8hsH^WKjCdnXsfPfu2t/(NEwx05,măU"k%%SgsK8ST9j9u9+r?a4(DO:tz&mlMXmg0n<s6X7%%fmy9U#VAlY6/pYkceNIBmăU"W#F7G._SIAK%Rm=<2np_*axn0Pl%1a1y^]KN,7bU8H[aWVWTH6O[X([1Qg/sXr2ăU"FE+PYN5WfJdJ1zIi;-(S2HC^bd]8K.;)'#l$P3p2BUafFi.MOc;6'MrG9UOC*rRăU"q?BTmdxtIF1h2oL?NUiQ<7SVWIXL%0l49sXVg?4^\*maU[.ECfmTV>DT8/&=Ht*ăU"s,VhLj]w=bG'H3I*cmrH'DHjTINuHEg;AKkH6e<e,gA.dVFIb8tb-ZiF$(7JKRUăU"S$%Udw>jHr+NX7i+Lp0gR1-P;8>MRS-tjqEbG_,bRyd=JQx9Fxw/1D:WFye4)qgăU"BFE/]_[%uNhrl-0KA$u[ogxM%NSNX,V/8X99i(,L/vhj#gVepEe];wR[U[=EEflăU"[n#-i7),,T<u1wjP$u2Zkv.mage0Hd/(*G?q#CqY<T_LF(rEhTqnn+b(%Pvkpd9ăU"A:+tD9?Q7GbViH&[p,'9LkgXG^:;mH.;+Ak[%;9/(<(tGXk$n_[6(6DeP3<*WJ)ăU"362Qy=KE*vgY?8X2kU6Y%L&FK2:p-d]GR_w['96WJlKv%tuH*%?N#K](W;9T;-0ăU"pnEt+[#a+hKJjjB5b*8Z%_7azI)lL&aHL31+-c.J8'46\'Ff8&ZCK'?g6luTkZ$ăU"V^>MB'Z^C6MBeAhekrU.YUb$qS6<BzG((U0Kv;L\d.'lS8B4)+Dvp9\CRj5<55:ăU"douK%5a)?[Xr4fdZ**gZf6Gk/K)'YO?;Sp47]0Md0oWShxkFF-vX37B7zZX_1grăU"6cgi$pjzl=u&/Z77UjGi/-I*#^KCqeuYrs*__9mI_e*?EF0KG$muzlCa<A&C-ooăU"nOFwjBBJ/)Mhy.\CYMg]UQP6%1t#YBE+W-&nm,USZLKg/cDvb^-F97JwX=TCaWuăU"3lO31H?/Cin&MoZ5[TCkBt4ll:+dH)ov3jla/a=T^V&1cw=b1?-8D;e*\O5K_*oăU"PgEyD0,]XKNSw9A$YtG7lDLfYnQrt)c_su^q\Lr<Mj-?'i5i45e;=mN,<P4lPK<ăU"u]DAeF^i,yMG?]P0VM19%oh9lW#K_/xg9p5nw=Tt$;E)n6j?vZfqZ>=e&dxpd5LăU"^w-6a'vesA2V3st'e2r'=dqlN-zuhJgU3_=yc]dS0-?l\tF9P/e8sOON3]p43g7ăU"W0ANGa4mXfka3oyTGQ3MzoNThD38N:4&(M5?.e4<3c>+[djX&.Z^LksI$69)urIăU"</$unrdk<FLA/.:j58?Hi&[cWq&\KmpfFJ\xMUk<LKa*.i6O8L^\1;Dkc/;KJ2YăU"(ojoP)(_SL;nw4ft?_v'%$u1<h+aFb%^Snw[y;b:^IvhLqy9xF0;(5S?9EZTnz0ăU"BZ>B4%v,fR/g\(j?kO'$3/a#g;9dhvnnMUtNO[ts:\l4f+7bw5PH7#:=P.ZHJGWăU"SOYj%mGBKha_L>UD0;5>XiFu_Nxv9u51hgG&^hJ&^Q#aLrjN1Oc*)xG%H3JoSYAăU"-J(=(3K(%$YV?Bi:/lmaZFv'HFj96x*#].?Xm63_<A^\EGeO;Mj(cbh'YhF;*,oăU"_Swq0'=.KSm96U8u)N(D*4\f4>OkFxJ1p/0:_\H+B2M7LhUbB15.\+-p1u5*_s4ăU"CcT\NG7\OZ/ea$xE2r:+9<w>]BT#.:^mLBs^?=EQ#0:P\3XRwsNw36Y)e97c+gfăU"plLZ6OW=t[IT<hK\uCdjSagn1F^:dsVK[x2&ZZKo[bhfs9/_U%u5_4<FC0=VyT,ăU"g(OgA59LBB:E_qPcYB034Ggq8--kX[)PUCe)w.K=Ma%NmH1_MT7BGytyYe\;ZqnăU"k,.Q'18W41IhjHtu/p6c5FT>6<[iXArB$(W\K0CJv7;BxYUuuG%?2NGYpeg\aBXăU"SSK2d\xEDlEk<>H3+rq*m&34FsBJ;R&<SV-=r_cbDhZsa;U-^o]=.]sGa9md;))ăU"*\8f^ll>Tl18&x)*2*fjCn&v_kAdU*R4l>*8YC%U,-75?4_;6-m<BS4IAi(<)RzăU"&R6]El(4/0DT\Ev-Pk.sQ$.[JBwXqZ<r[,Fz$#10p=$DCW?C9TNtbeL+vE/F>8oăU"?c6e:YMM77s)F;F>-+.l&*JpLdF>&Vs4&y]w)deo+D?VTp;=1WX7P/.O&_e8nLcăU"mYxs2oY/O,C=\&q[f=5f-]ZJx/$?QuV&_Ti[<_r$acB<aRuo.qa$)k/R\hO9&2aăU"aVs>n7EJ6H&I1JFT6biu4ImJs&m\'#A['^?*k.[aVS>1GRgP$gY?nGUC'i_SY3JăU"l=Bk73qJ5&4\rmBADja+Fk4L4Kf03i21o?rXIn97Ru)#e8ptWreOh9dWMFFFJa0ăU"QJB?BU4kNF6L6Jk,IpF?0/;)y/EH7eqok:9,mo4_l3JALO5D6idu^lgnO)?W0bKăU"jrL*j+\u3<&Z[ol<OQ-)unKo=6L5M2=5yKtOU*+#Oua:/X2v<7t(Vur3iev<aRtăU"=j>tslOej02CR6qJkB[-.8(pLFM]=X*s+wK202AXTBb#qc$p8G_([8lP2>_p\GXăU"J^G+zqTe'XkPp/[NGo_DcKNZ3/adj*L2L13o/Q[[;Rf?.pHyK#ZN%$#)8_\CM9jăEND SUBăSUB V3ăU"9b1ZDgmfMULIT8-&Ib8DE=<OiE%G8IoTh_p.e:Y>liP00;A[CqB.oV6qN9f)iMgăU"*eHDQw:rVP-8>kH1a8TZAd$%e(Dg_CJD?$27u=V5u%CnkxVH)kl;97r2VA(g5)RăU"/T5USmf-kI1TD=hw3SN?]bN0+BTMd&<2[1LhR0sg5VZB1e$L/PL<rD61_yuY[j0ăU"OnysL<tP2vc>g4+^p88FV^QtT*=J4Su0NfQPM.f<Q&ou1=lvLZ'eFfhF<VzqfrJăU"]dMjY:DI:[_OVu8kJ-#pVrXE3Y'f5V2Q7bh?BAeK[#'fAc(d4BS4KSc/tRO4dhfăU"nY)sW%L?py\e9zo\GuQ'8rAMLhl=cM3mB]deZ?AHFV\Y:$<4[KAok-V^XJ?W.96ăU"s8W=#j.84Wd?sq)A[AVuUOj=&.2_Jb]uHNL&*,x?yQ_XQvM-nN_V\Nw-<6N9#7găU"O,?gNu<GpU/MBfVQ;6KL/_cES&TYd*btP;o^APJ]]jVBU*^a77&:Hm2_I/tHJMtăU"Ljq_R^^lB%&BcE$x+Z]zIJ>63<?E'XuMNiCt'&eKK717L:3,C-,([1=pGn'j333ăU"/uzM6ClPFP;Y$Da6-+nwTC)3a7(d&UI:aEcsUPk(a9niop<>#a2kx3oP9N%J&bSăU"1$9xv;8jlo=qM;hax_Ge6Dd;_aP)hBJkDG<PT&sO048GMjOt#:CCGO:n_\Dr*JjăU"s6#//K0p_LbL6ApxrJwyx-f]L:5\?CK[_0;u&mZ2X%J^[jrhDHZqpyVh7fu<#[QăU"neg(fS[BJ60<[;Pc?Yz$JNDZaND[n9R0PUAAug\9()*6_TtjZbIGkM,JBr*<Ht6ăU"WCeI6W.9nv#JGdv&o<##:Tcqx7c0&wuME75Va(<+V-INC40;I1I'v_qlCN,u171ăU"f4r%6TLlVp'WShZcmmN$lTW'c4w?SSIrx+Jetcb5<tv28$M&i'Mq.=([M3#ao9xăU"9OkdOd4IT=(\og*/PWr:N<Y1WK?k#4s[+$=TF0t3_(Hx1=o)AcYKPip_z[%'WqQăU"%nk,#kxC))\:Zx.G7^L_9NaSn0FOZnnOr;<sC3$fqp%Y=rb?i6L;C\[fc6JLQrfăU"E8r%\nMz5a5Jbd7Yd&[3csS9r\-UnjDnXGdB(dDBs\Qncf,d*/y;dzpq^=25b[(ăU"7fNr*,SG7djs-7PH(Qn[$R:z_%>1mKhJ\*-[Q9KQ8;==_[Ai?90c5_H\/UA-;Z4ăU"4;v1-00.)pzq3:N3V#ilOE3TZvjgaq:nlVw.m>r3C-Icw4rZ?x&WY6pV7ed%MULăU"DkU,NXd5bBj6kpR3b6?u_b92ST?.gK_AzZD.QqD3KA\Hp?Pj,mZD(%9OSn8XeLzăU"86ZqJ3,Q4G/mo]2ag]W5/s*%q0,uI2IY3u9=3HQlEPd1>EG/w<6x<Y69-szSZvkăU"&t:fCr=P&/.jQ1G#t?ItsWLG8m^9%>\tXFSpzdFTtHx3Sl3([s2auc<2=h*6fPxăU"Ng3I/P0BJU8*s5gR7z)aJ(/cwt\5/V>aEVz.ljGv[6/JKb%UDzJ$GK^tu]osNV^ăU"#?wWhe?\78Qs\A3dgoLrhCE'OB+ei-tnl-'-OAt0GAD=v)vR*Nj,_[XYRqeTe?>ăU"Ens$pQ)Oo'YP_K%b9^?P17DXPrGCFJb%.IjN)uDCYQV.DL$I>Brq:%X9W9YK&(1ăU"(dhg3QwB4R;Pacaj9*Y;fbK,.VRHM'?HeS9e+;xQBrG=3qk'dYSKM42q7]a9IhtăU"rC]03'nQzaBO5s6X?dkKNC<+$ciY3PT9wct+T)Gi,+keBc9/?ITUpb9,a2e_qwaăU"nSA;Ocn=\f1&eWU3>6BWa>N\Jj('Hk-Fgl5uBrS%h.+mVetZMndK06p\mpP-xu+ăU"3*LaJPMM?uFEO.CE6RFLQ+diS;1o5,E,W=,>50\Bq;vh)r=^B$Gk3$q1<\DnVpNăU"rw2'vsv;U1$^6Zq/dp,)Xher5,rPTk_n'SN%;3IL4RJzvsJswtXfjkw[b1>UZP6ăU"Aw;*Xq(RZ_Sc3c^BH7L+_Y-l%U_OZrW=T/J#'H-FSBjxZk5.fh+o^n<CjnU^sO&ăU"?NP-qy>TvFgiY(X(^>?=g%JF6Ok&l)SnR3f5)a=]b\lQVQR[KFccNNR0b^n2a+MăU"p=%Mw8A#g0&i3AvhZJg4rX'N?'n>)i;FqL.)u(GC?Oa8uU.gc*C'15VX%:lF+FNăU":bkNJ/jHMmr60E7_2/T<NQM9R/PPWfo)X>y(.#q-wldNTS<cDHlZM:hmRKV&P47ăU"OPVN\WT1&1)8>#=&DKERjN)$$$sy''JBuZbJ],.EMOLx>aZYUMVh]r[&*rQd_OeăU"GZP8*'MT9As\gDHIM$WM*rpJKa5P[STD>A[*hjRmwN6wTB42Q^m;W)Dr^p7x$UqăU"[np_<f^5h/<]Em3STh5C+-'X>U?]]h$<BUiqEZ4K+/dEFPR#H6Macskto*OG,Q1ăU"o_(<8d&v\O]AV<,.8)VN7A$Ea<7mfF8$\<y>32nd[Q17KTdhqU5VQV<0iH;FC;+ăU"EgvT),+0Pxq.,jf6-67*RWd5exG,MKyr:#i0E];Q_*[ZFd7=,LI_wI0#pG$J^%făU"BBU3qZol)7RE-GaKuu9td+v6<L^8+DMi1yw2aaz[tJjibULc$Tp(Mbrl(tZ;0sKăU"\Yq&?2G*c3Uu7Que=C2\DGuM0T*MYYE#&0+R$djv%=J([uX\s8)3i):el7+s5[jăU"(H5_[fXTG62Y4]VW,j.ZqIKV)(xfDP><921OM,lp>,+\6/%RCP47$kYhqHxPg*9ăU"u,7ZHUldVLErE-YQa4x;<(Q+swT9\8Xj?HeM)pkk3i[<1EO*=BsN2*<f/zFf/AwăU"XcBU2.R_/w*cDOCu7DoI>G2P]bIJLoyzQK2,Wrh\&*GTqy-s>:\7'l?=e8P(E7LăU"mX+_E(cA0H0'k'SU2M*h?tQpD,a1v(A<e4:5=:nb*>)$TsPpJs1Um4NmSBV6XOiăU"ceUTa'FTmv0=[0]117*Q]>5z$xSD/?C3[C/2xce,Yita3/-:AvL%R\ZIx[1^UV1ăU"9qe-XnpmDeQ.T8t7vg49&Vl$-c[lLZTGIDlZ&69u/+k,jH.3GTH_>yfDrLOZkbHăU"-$SCxNieX1nY/1AU2&9$l38AWduq-$-a;2u,QUg0OMl'V);UE+jZw,:tfQMPS&măU"AKD#xSjJbx0W/W5ONP<O<w'9PVIn0WiIMt&%5H),iu15IImx*6g>UK.\EuSUt<XăU"IQ?74XzfBZ8=pc_X8[(IW3=T\6\XLgYtQ:&:o1S;UpW>9UalG\SVsH)KJH?(BgLăU"m88Yh<U.uP6BbRA:2RPn,\o-((=49qTpmccGK],a6a/r,t?T_3ZZh8$E8d6f4X7ăU"yY(qASKCUZXd,f;-e]W4TiXK?8G#S#CW80r;LUwiH=he?6aX&cgrH*.^*PN.4;aăU"0H=mtrR#FCw79wdTNnLiDWto/4_zT:D>tkwpkQ)sCn0lgOfL:M%Bxy2l#u6KHf5ăU"(Fjb;u_1CD8S-TBM-O1NiQUUSpw%NJrNvd_m,as1j?Fre6Ph?<f2mDbrrDuKVWfăU"bh7Nq#JgMO0]?un-C6Bp(Msme(H6/BD3<L-rU\.tLXCCBmo40(b--Y/8fl\C*uGăU"bnRa/aE?p90Rq+pLQCcI,QG/lIoF>9bZaq/o;0[/4=u+.._dl'nbdwq$5pjqRJDăU"(gmF3K4&MaVMQN2PsYct'tTQeI>-BPS;^(62&BN%C=E;dao?*eCIpDR2G8n'FIDăU"B5>$x_a.pT?sSM2m.EKu-nc+R0Hk4UqZC'Y6^Rw]eaiX9K<hKko5R:X;eUDdp+RăU"fi<&S?;qd6nt][?jx.,,LP_e9zkQj?7_OS^V*EJr%OdL^,>GO)&9/114jwIX;G8ăU"IaluTJzS^1i:1=KK/sSv&?Bz=n_47WB:*uW?\O&>*'lj\P6rw(RZw%v>r;mgMGjăU"g$+&H:DN+MN=Tx.=y^fVt7Z5LmoE=,RFAUjp-i/<Tx0H?8Z_=-Y9*S+2V4o9MVMăU"6ii5[MhuH#pZyrHwIgxo0%#g:'m'7M),PO;/'foX)_Nh$F^.5h\b[7bq?vL#1mcăU"prt1jn^t?dnoVw%;smlD=g-p](aKAm3s')[Ca7fG*:5-km(T2EPgV<BpK)VO_=:ăU"(kFdP-;/eWOdM26UgCF=,sbkDKx:Vl;ix=B1u.7Pu&gqDS8'O=UFk9/YPm7:v#BăU"[YbLYV\5D.;sf%#3tTrwQ4NS1G4VAQ49^+.1Xz7LRy[Ojl?]*ufg10:aXTdQ1MIăU"vFWs.j.I8.I*)L(K[?<BUJ0dJ+LedtE,Y8&V%IhR%uWC7&nu+(kaaerhQNgtvTiăU")CwHDdHYS:;HJA]aba2'oZtqt^FsJoYg].2ZNX.Rz^aFL?-6/GfEtvpSCmxWrzRăU"vU;?jbLc>?x*\j$ED:_z#(z3NETi)p?r*F/SA[s=x0l?Ox_1[A^M9mLMRvH+'joăU"Gb4o89/;VY>SJV<.*zMy*ff/C]JFd*'kHpO_uv$c.tX1nR84'/by:3ALo)L=<s-ăU"Z8C&YKqhyn?B\;zkjg-4J^6.TA.1r<mbzW=<05:0]k_&gi)IEwZR\FLPkJEyNrgăU"#%Ir[TcNkKx/bSn2N3ncz:X0a.&?/pq9F&_8NK-u\J'(G-B;4,_1XES)^RY+F9#ăU"%AAT30+4A)OX<rXwcu?<K(f;A280:ZM2-zfoZSVZHw<:cmPbEHulkkep$lYqdT9ăU"/T>gsuBOV>xAMvE5<v9d-$49jlUH(3_=wuDyId0zhl?Q_jmB#&dkq<0S*d8[i?;ăU"3cj=bN/SHTvKU*GSe-WsTNyB,'s(c['Sf&:y<hBKtq+*H3d2MQny<.)e_[gt9'kăU"Ycmr4:B2a/I$-UiAwRnJA#2qaeKsvNQn0KCZT3R=Fm)kv2yER6*#92$bw0LP2^FăU"0W&xd/?Kr/6rKizKvYBuf.K7v4f*x(frV;emeThw&yJVsq'0qxe4O;;n0'3qQMZăU"%h[9S$8O/7mU_.0OUx7R\t$i]ey#b'2XKr(U&Eo^IlTXF7lljM8uV>QUE483cxFăU"<Yr)bvG1YLz*d#6^(ojuf$GtS)j;/v#_tPYoCF,Vp+T-X*k:rH[B8QkFo>)9D1lăU"ud'-GUEVPt7yoV\27UR2;T<YT6jl%Z1PnlHXLOVjJ7Lgl1<Y12A_.r/4P;iFVq2ăU"'nRZ(oFp+2rh5c%NFUMaGK*r2Kof,]#]c^XS$bZcG[hAr?^,xeb-toNg'ZI1b%găU",,tISJ0.]py'mw7ZS_snqVqMu%J6C:]n0'w3%'rnBc&:A'Bf?rzpcs9S0qZ?ZjkăU")$IS,T+;q(a*W2N9\%??F%pflqJIdP)ulYNjN4d3Q>vFJ1u:pB&M>uKx1Nl(bC]ăU"jRr[;fl_\zl679h2IfmQ.P(*6GHGflbrJ7_R^ka\?-_bfW,Gf*=fYzmnA/RJqs[ăU"Mk^_QZQ-Q:cP9t6'rILKK$Ibk^?N?hGU;&uvKct(:r:N/*MIX*:j5o>Pv[o++sMăU"+&W]EVyOOI9avgP9tTXg]G/IF8KzAH_<s1tYqOjYq^&tOmmXb1Ig5Kvs-qo(M>FăU"G=-5^/'gFYyKhLNT=_z>tx\5yfH5zVy9Pz/<ePKBC8XPuW18'RHE>LQK3IODzaGăU"%;:U(e<SwC7JtRS%rjLDraK-'egjJS\t4K2y#uINH_20&ho/SOgpBgY9'',+gNCăU"TWN=p_0VqLTBcLlfW8SB;U_m:4uFIh=69Du3fQoLLge,cQD(;fNUHVdSIV?0A,2ăU"K4Es<7F77lUbQ0xM#Lr0zQbeF[su9jyqz=xnp\5oX>a(eyoH0E/LJ]8pa=7m+O4ăU"B[&5WO&/&Q]G83*6(10:[vp1Z#91b(KH=1l+)XR,$-i(n:V_ByFH[itoL0CZ=)băU"8;QR(^pl92S9\^yY8hU?\F_VWWsjIc.7(f:BpVe3Wm+OodL&?AJF;q5jgXrf780ăU"0_.n/Xs<$L>S;dhOF6ZEcF[s?ueMC+juVnusVT\i=R/Jc*7'TrsBdn?LpM'Sj/'ăU"k/9fo#X[N2,Erf?F>CnhRSzL6XY%>kO#GrCHs6GMYRy_,_PC4qP_$<kuV1/UZ?RăU"f?c:e)i+4)H<LhJd$fW#yN.iTP_wUY:GDVWRdehm;8[la;vInBhmZuF$lSMHE;săU"KDz_sV?9ujk26SBNaH<mB62b#Z04<HF(0<_tHg%RVBj<=56u(hEWEhhkmvH6s/xăU"3]besTqj#;oE9pI<Aobf6t?_4Lx)5.L[.VX:xI8q#;ou/Ff7m&L*.>q-)^M,eH&ăU"umy2Jg$IF&d./?jf+0cjlQ&#5[pj3m3([jQ(Aam3YQ)f&mbCr--4o-e+0gsoDKJăU"rPvWKj1pw*1eUsaqKo?S9IeN5GKTM9Eqrcv1O.ISz;:%6J-r40q#a%mznUBsSu'ăU".0sVz)Cs8Kent(rse.Hw#NT:-(XLh=jLZM\<$FsSSA7-.JX=kNs\a::wDsDW<XYăU"Q<:P-?;c^81B.K-9/kNFX5%*0\pcX[/DI\D]_ujAnfC,An>'r$Cj^:7=8;U)04,ăU"-x1:0X0Ni7oJeq+xYnz^7vt]=D]k064-BT[4i%9z$fW#D1P0nO#$G5(E/%vnln6ăU"1<3WcrkA];puw([1yk8cTNbxlRdV6XkPV)*5H<*o1'm$7b_DgVEUhZ$Y$uL)hI7ăU"3ABAPid9%e^l%80F<hph;>[BKPRuvPE_SLq;K8KZJ*3O83IiCmr*_f=gOUZ7/I(ăU"3qZAVA5L&qjcWLB(h*5*(DF3&%R6t=\V$-sIVu8InNPaJ/?Q3tU4qthS<0;K_qdăU"jn8KOZ>rf=0Hp][]$q,+G$qm.9&^4b&.Z'FqM'fpA>zKhAKz=uZni<vE(w2vF?FăU"LNiLn8F&u'7;1?lv&(w=_\a^'V3fk.u_AR+LxjmXrK$8ops#M1+,d]C;9D)7obFăU"monC#o,:s*ODxDY1#3P15vBQ9f+bz),'Wh*TX1&]xF:;q)qZi_5UUNs?'(aP5.NăU"y)lycW9#bJH8wl(88g1sXsJ=6n(k[uCu7g/pX4Tv^FoWr[=Tl=JJCQpJ>$%aZo*ăU"b;Hm6>_:8Nk%+69Bw[m1XnV>)5\s?3Ym/+ceU8:z(rMkyw<taTajYj^-BaOf5QkăU",S)2nIHo?[ivR9N)E$_/IoC*&ARifXqQT<'C7Uh)^+*oe5_^W-LaSBXA8OmA1JcăU"(HGFqj'h>+cRCFr\y/.1w/83z68CHC+#iTZZtturj#cL0MeF9kiL1LCx]3IQy$dăU"G.JJZkGFW9tbmVU%v?CBb^\<$ndpJ9&pOSC1#8'<hjGxt4:xxu.lDwlDdg#Xi(?ăU"5J&x1J76J;_I1jI620fkGHG%6[e>)h-:S8OwYWdP)6<45-%tDz0mVUtLX5_mzJ1ăU"Q86Ig'-h_Otb/lT/7bs9O&2UFNaokJ7zss^TRTW0(&CY_X->ti,hw+DBmJnF_F\ăU"P,#-2SlK>CbE.5L[#X5Kr%5+0>dA\?k/GJNZ+Du\0B(*hC4LIF),7(q?A-VHtjuăU"PLr#p9b8+*k]B4]%[&]]9JE%rYmCx&#QeP]nSo1ylVY%Y:,r9wFR6'V%IGbcC(IăU";*L,+ZR%7oi=hUb&KialQgxpedD=jWw3x<sodHn?4\adNYn5(+H/O;7%w7.eRb-ăU"nu25%<B\NU[%A/(rolM%K5U.MZm<Q0?D5peHC^^vLE$o&c$,rxnuADf6J2TJO]JăU"'X:UCZrHFzZtB^ma,qas]]+k8o4$bUF[]fRvQC+U;rrDz9?s[M:UjUX?\?(u;N4ăU"nx40b]NaH[-&>IBsg]#c%-_^_/#i%xBZK<4qr[0dfSY[l)C1jm:=Sxf*O/YpuPuăU"&w/>Dl08(=0/XbenX;WESTt&=g2&<L<X8X&$m7)-._.fM[y,/aYJp&H9mUg*OiGăU"uSj$a(v+x+*H.8>1R[<c0XL;trML,3;\v_iqX75ty&UVI-z<pV6S6U1_$SOuC5găU"-\ZZiA;oVO27l'jA#P:AzDZpI^87N,PHFsle4I7k1/.r7Z:,T6uI9Yd=e>DS1n:ăU"1&&Q*WzMkU(ufYlVwva/h\cY>GjP]:'*lN9Fvv9X5vT,R13[f'5J)c:9uBd/0uVăU"&,fP\B,d:4>T,ZvD6D%Z)HcivS\IIc,IH+:P&L.5)yMOQA)KQ+80-WXuKcb*o+#ăU">j^jr,f7F2oRRP=rg_64lZs*VM%e/L)]792W-$bws%g?'#/.k\_=W-_-,d(KoKTăU"KMRsPxc;irZUv00Pe3oixw2UbkVp)]xq?O3/):cGKG[Sb&1_d^LN%BX>S9RXv1RăU"DCpzQ6QKn6g1cA[SO^k)AcZhU^19xpW9*LNtABl'KDxodUpK7qL6b#>]$?^Y.*jăU"3IBCzmB,D/gvXWO\*R^okiI5)[^_Cq<w*P$QqM]5A2k3+Va=KFJr&DR1Oli3Qn(ăU":qgRv9qt,F36a?('B&9oifN)\2Mo?/MVY<qlmLc(HPT\6.58]:Ew]#M>txG?,tjăU"OMB<f)k+Qs$&RgQ',kW36[/06eYSxJX#D/z$f)x'tVd^Q<AOEc-:R(?WXV5jY56ăU"8/MDOAhv:+N2ZSL&7a+dSxlYM^dT]nEV+k2h]vm*':v9k\jv(.):Pb1>:orA60SăU"sf,>Z:jO2k1fLO1q0^P;&l'*\RVof7,0ff#z4_7%b(X/U,iwk8RW/>m-oXY#f<văU"iT?93rlq1fe.z0_\/qoF6_iro=)Zu2=Hl0iuK*hU2m4%g]uLkChe[+pj'/[DkGcăU"SqC=-&Q-o4Au:qMs;Fsmu)gbUj3+dVHSYwG:FQG'*.3Y<mpwV=OZ&7aA#7bBb4eăU"%'I3e3S&U/6j/rk-[<'n8wU?hV[DdBKkg68WM8:P]-\+zX5),&g7VDmf.lEuWAWăU"0*vJkBW;TrtZ&/uE_R/3N8=D[SS3%nD(j>u%p\e&Lp3CUrp7..QEHr94QQO9Z^(ăU"yG&'.IJ\o'59)_Q?.gY?z\uhPebZJTZdTD;8/^>TaasF.jEU,lp4^4(Si'U&l)(ăU"GvQpQy'F6pe+DJE7Xx[w>1kCix%;-SMDB=uZ\wKIt_6k:tX:i^Cr3-^ggyo<IrlăU"Pi0u;#'t54qRUr5F2gIG<0&o]YJLW&t.(0xUIW3Hk%&%dZ&:ikoOd(FDQZZ+.SDăU"l4o<aK?CIBizmF]/,NM9\'l*Np&)_y-(>#=WagMa'X_bjk&uCd0'KXL1o'AFG_JăU"^<x^J?ZIN_rZ$<VfI>*%3VqMJfXqT\\lAZPQc*JZoAN9PT#=EZ>G1$7[y6.r,BcăU"Mty2I5mmj/kc(^Z&hoN<jQd4<rg^?%6gK2c$>S6fX:B)PkjOJ^<Clq/q.2G+?stăU"Fq$EZc$M_1c=?u=MPYt+.pW=bLbBklim_AlC/-G6pzBlus]oF?DO7.YDO.oxz?(ăU"?]f/NHKq:V)foORZ[bGg2/>h>'Y\1b1m>2IP\5]8qGpNgbZ.8Z%zMBi]o=4($=HăU"#GsAGdkIgjBe,Axq/ScMJRu6aa-.yHeA3YdgrR?uVFU<DT;j[T<4=_?J)^kI:Y)ăU"v(B-%#L[D1]'l7m(<DiWdkTK3Bk'1iZ))Y<?3^Rd0L'.&:TY?JRm.Iq5zastTKiăU"HLK$.,QR^ghiX+38_1o<3I>SI*pNmdI[(<BE5:N:(>:_)3^wkx:)/yDRjg4]BWQăU"TYOMQA?pLK'1p6JATOAcv+Y&I<5<Y)u-ETa$c<L(NFvcV0xh2p,w=twut%jRX7MăU"<PyC1V9$+KD8eiV]FCXX1>18xc?$pvtgF<5WhT=1Zm#O9.MG;)kU03U3OOu0\UIăU"mArcs/s/igM+X):XyGFqywfmh3mgG%Z7lk[HxA/jdk5)r5#m-R\9T=wEW[,H6$XăU"Z+I3U1EG_XN2mEOOCV7G-.,vd(:OW?*78gYz)S+T)>p'W5OE+nfIu:ZYHx6?xv4ăU"xSDCtBjRW#LmaxVo*)<Di,Gapu4;]]cIS\ud))k\AnI>.F7vT,Bi$TD9]cbO',.ăU"3UvW7TepMtCLp.t*XvCm>0\J004$sSaLWRKDxpX-'8SWHgtcpRq&:9oSd(DA1LWăU"Z[S'$fBP8\N=DRgOgxzMb\Du-/Q<_IT99mV,aIrQ%UeSm1:8J-:JZ4X7Q*nA\ysăU"*$4Yr&k]gdkFDKy+'sxKfo0RkWRYO0:bAs0Qy3o3fJ'Egqd?,a+U_,6^OHHmtTrăU"P*FhOj.<]j$;<US)edZSCS*CSQ^<m.nCzL59#rI5=uxyuTt*v^G%Mo.SlC6iEJ4ăU"J'ENH2<C=Pbe'fw,4a:Cj$T;]]r?lZN?9swz2Zc9/gCu^Z0N-XJWh44=8/ss5aXăU"Vi(9]nX+Yq?X2s:vVbk^Xn'DM?93I#[6*1[]gkL7(;9^KL+mMgkjCk1ju)D3BZ#ăU">PAku-)_+2Wj)f/\*\o9\I5gHVHKB4_OCB]%^cFa#nTp0Sj<vCQ>?^u\Yt<a#LPăU";%,2htW&6Ii1YqPHu5u>>*3H,FF)KZ?5O^^\NHQjl\qxIYEn2t4qRJ[VtciJOV,ăU"8x6=o7vxOMp2;S3e>IQ>)vm42#$\]10J2U\ien]oS-.OXg'G[e=V3OJ[%Vm$3#XăU"d,y?X%cvX</0Jm2PE_5RC4-:gK;/hwk[0*sfFx]F-#on-rGVJsaB,2uXo6d+DCtăU"_(f=D'Tl;tpxFgJ<'f^T=k<L<b0/Jx6T;D-2+yHm5yJF_#hzX)muGV,Xv<q_p?-ăU"fE]]O>>6$-moCLVZ/75>cP\nYb$805s//;TuLPtN0xc.>*J1Hgo._nNqK><Z(7FăU"/?E+mqkOH4#^cB^6/Dx1BL/B'<e4gdEq%k47wWG.,k7yo%bkoU963(<6$)b?E#,ăU"K5yDXQXu#.bD>86cDwlGRg<8/P%^?JNK\[W;jo/fKI5iYT[RGJN+DVuTS-ll_[-ăU"i$qMDM?j;K++eW?4r5)l0kU3.3+$upec8gPX#k%Qgt4xoo.,S/vX1uE;t_vpxU.ăU"YnRtMlVb]0Ui1-A_qF?&Jq4)'/rx)5TxxH(C=TVCu+2)IepnQs+GtKEK5jAeU3SăU">l#UGh*ww+Y(:][q?qw5KdN-)fRM4_;^zlcp3YXnluJfj9jW(l;^.XKg7%z/0]DăU"(z<f#bZjH[_15/d84mOI\C9,):N$p5r.0Og+]K/xi*>/b=T[/h3w6r&yc>owN/3ăU"bb:njvwvR/.sNYcWp>#?qfwl8%u4sH8tkN(5#4B0NoVu'NK+WU4a*b[6YM1HTJIăU"vEW]m(X:TI9LOKr*C>iBb+uoErLrRH];laZeS&(^(3N:&7tYb;kcB$toWPrNb;NăU"X?Nm9CDIR;RttF(J/VCf.Ev9S>3mHG&DRkz9CnL_N^'#Wr'):z^*U[rYDY]#]/0ăU"*%k6PqLNiF]n3P5rv=p$doKz6WH0PbcrN+w5jB)uo/y=5%X;R-fn#]mlhW1Cp-1ăU"4&'1jm^L:+Yr5;dT/Z$+g1G25y8aK_8EVa?Rs+H:_Q*Knz]8]>:e(+but9wqN2kăU"\1?<Y:D:u1T=m'SuDW(X=;nt2&BK5'4>l]\+l70gb?dK(72[RMpU;a9Zss^2,;CăU"EB;)L&:K(iqGLVLJ[ZuSXW$Ef0GO_D5)mF9RoMF%IIcKJDmGFY0KvZ7i>jx)_CZăU"dk*h^[qX8W>0zL,ul&k=DVvd?wls5fP5A_mhN+.JA%;cPqs91sGWTPf+E9+70p)ăU"K4GUGDXD(cQ.;'TdEB&jq]9#eCIjb4l=mHqq?Rb1Z8t[?Or?g:+D[?O=RSA:H6&ăU"v<q_TxI>K=^^4H_bnQ6fD)M,A<0LmCCQ1UcZLP'Cx5#K-?k5Cn1w[SY9Z>&$9,7ăU"O?7W'pu]O7KrVSQOgl&_[*2xsh8sT'r$xXMdblf5zPFBl>\Md*bRE9H:l5p0*33ăU"vQbGc9qP:k=n-ilQ#7Hu.l4gsrh35-^H&45*jp/:I.eI^xFL8'wk%Ctj,bUVc;găU"rcH'I/L-,j1T3qf\i6)5U3kR&E=XAMSncWiOJ1C^f%=t_vW%88V787TC(GnB^<wăU"I8rYGKBuG90JYn;b(_1_Oz3Rf#4j7R%[W/+j<sz4608J<$#fJuZdbX/>/7vPu8XăU"6vcd7^W?'72htEOfmPTooQ:/w95s[(>lK'^:c:t)1\2D3(amElJY&(CW<]V2g)uăU"fI.$ps?fIMZJw]IrUB/,&lWJp5x#w]19A#e<[kLbR>T7q\Bh5LjNZz(%3q&M<<văU"XQEQEq>r*9aTXeiyt/J3mrp-9d9aHfMLLXceUt4-m8,soUkpI/3122EyC=.wFA7ăU"7O7%oMXE/lwO?tiVhqO]vlfQif6vQXx<D$sr/:hF3bNPFtV%j*FiVKpD/qXbi&/ăU"VWaq>/y1^VM<s>u:X[C+or-CPoZa#Z]bJ[n1H43FHNUrp61m1Y$a9xXh#;o,ND<ăU"9hltg$bt?w:6p22tk9GHEBduD.Wd<'WQnU]lG,L1vtMr/,/2_>BG3_9rSi_x(k]ăU"tcDP-Z-n(]B2C9Te=g3b$-fWlf1U'XrA6_Ov.r:=fISksC<:Alt_cnP2j]F<Xn?ăU"RkAtdj5Sl>srXc(.XSf/KArmTW2iY\f375wEpP);/eHk^*V)zn*sBX<q(1:a.6iăU"IOg4A-20jL\5oDaOdRo*UaYhd#t(pCOw[TNUU#OXkuQ6Oq8;ijX+Eu\S,1$MIVgăU":8>QGF$4]9sAU.&/qCTP$O7F_NSW30=P<=>Qf76JksjV=?XesUqj0ngJP4E1V%0ăU"uV9Uk,32[F%usmP$_t.vDThwo&TA0O*XUOgv^fst7Yors3[uNrv2o_=^duF<roFăU"AvKs4'L/ZQmK]*<f0$AP&I-jco[uDrJR9Ptz&B<*VUF=$o8[5^FvIAavxrQ2oe.ăU"R[_>W43gguUE9gTmNm4#:XzQXVNJ#[/0[/#cHhHNZl=fCvH.GA=P]rkxgSoxYNjăU":&nlLedO5A^&pk8FC4d0GWO2C)jGQ:c17Z0+(,<.AM7&P&D0fo5BFZFxNhpbLt<ăEND SUBăSUB V4ăU"Wcj]4B3(oGutRT67+G(t9.2..B4kV>kD5HaS%<t>ubshYr1gEm8o'_#/5r4qNeOăU"Io1JK(kLf':m&REGYeMA+JMsDcT\L9u:QPfmRl8?5VB%);J2WVYo<X0ZfCzN88[ăU"]qTs6d6+YjTsJ\E?V_$hsN'Yi<70b]D++(RU?^uFSNOhQ&:K*s^N,=/d*u*t%rQăU"^T)3x7l,qy4*1CyLgr>)NWOj\l577[H-/V_>VsNZyu#P44HN>g6V(:prBM\FTp5ăU"U3sWw\GLfnkGOQ,N5DGES-0Y'p3YC2CrTaogUq:03[7oFu2t'_1D&'XZ;FK3c7YăU"j^F;;qh9d'[)g%IFzwc5^M=rlm9agSsY:poC*V#y5nUuYt]ld[>^6_Nn[JulV#NăU"l0N8O)/2^Uw*=kSR\%\=Dq:VH[q=0)kbPngKh]X]E[fWidY5Z5xZ6M4a$D*u4oWăU"qIm14pPd36(OO\m_s-xkMqjot2r8ok>G&pLEPnl]W0i1u1Q'/MXU6II124ZUfM#ăU"%JFMKbF_u<Ei09e*=6QUnYN.3,tdXe8qf]5jYY3>?FiE0Lqd3,J4uGGE+%F<ebAăU"5zfhd$/G[hDlWX=t$4$EzGsQ*Pk3-$GEptv\RaS412+]>Q'DP6W=JmorA#59T-oăU"Sq^1P<OP>r]?XXRW>9c:^<&nY.i:'^\QPz4(fT8UK%Qq8G1r+MFH#yS.)*Q*udpăU"\W<lBJ1uHh0HLMwT3b<g8>uSfoq4r<hSex+,*K%gJVq:w7at(Lea57NhYsFaUfrăU"GQG7sxr-/hBf8][*qj,c_Il35h/+kb_*+(9izEgSH)oLUmf*K]DmCDZrqB9Uk>$ăU"EA3CQ[,'2j1&*<mP8+(Z\nu^2x]*+ns[kYNmT:8/o(G3lJAD5^NnHS==JBUF<+)ăU"6/-Uk2Ql%+9)RXrgN0)8sawuulBNs'gpX-hC\$<^^vjc+v_2'XK<4G>CXD(HdB)ăU"C6)\5SyxN'eO'Hvc&<E,llC7FP=plfjT5/64mi&XS#yamSWVq&_+oR,'.m+?E%eăU"O0*kg2HB(?$W4CQ6[Uofx.cM2I0h$5&QCHP(\e[KSEL)wHD&G4'=('J.j[oi^5UăU")bSR8hTS$%MEX&bCn75d(tdg\]C$;J,Kba3fXvcHX2nj.:Fxyf>,MU9xcGb3$sxăU"]3*QXnJ>n$03c'GRL<&ja6kwE&%Z-tBZ>Xo1mpsMBpp33>F-?c3EE>Fi[og+_pAăU"7=-AF79CnqEBHNuY6dl\__SsnJLUtDo(\sGg^^7vJnvB;-fOQXS2v*PG]AmshVvăU";pi.Y2KYuxhk_=_8XX()*px<.&)i524H'o1PtB7A6ZguB^.#qE:fMmYT.W(w\s6ăU"y4+X2w6V[IiMXB\SGsKm?oU2GhQBuN3eSzqTQs0ckK&-A<cEFt;#%cb=?pQG,>-ăU"nkL612e=3+Li^z>_b)[TwNh<'_i<F,EN(au?S75>JgWd3c.yXjM_LvBd9$W/_;YăU"kQsj.uM+'?7QI8hqOvqx]3_'n3%n\ytcxns]^)*if>]3(/l(WCG_rQ7L&)6&A2YăU"Gu>'WkD.X4Bs$<a3Ewjs\&9T<\BL[#GV<YfOUh)9<4ONFQ'id7Hqq=qUTq';zwnăU"O0$=MZ4O[1=B4#tlo(*?O)[0=UPShi'j)H3&#XYD^o(S7W?a\B()]D+PL.rz$?\ăU"H_-Pv<5oLFxHV-h%w;5Tp6j:dj(983;Q)#LkLEX-Tu[_dJ1oRubYoE.%tRdcFC7ăU"FtlhV\FJ#NW8heW-7jE1bh/]n7zE_j.O[:Al]falSCm.+]9KH>kT?.&qA/8(*?GăU"y[F#MaPf9ffg;b;OTZJ;d+3WSji$A1LAez_i=okbH8k<QVMDj2]4N;2R1E.y0Z4ăU"]K=rR\<)2Y/[84yfOA>^ETScnSzSf*w.sb]5ir(=mj/o#c%OidSrxcq%%%XF,8YăU"jc,tk2.MizGv:vvm+kxp3B/CJ4u)i3(L$aYRt#I$gQ;wdM-[^iowrDHqYR(H3h+ăU"$jVH0%L'd^xU<Y5630uJO=<laes)pcltH<_z;[O4u%uq%n3XqfcwoRi$2F66gZnăU"a25$-tKPA%o6cO\0Wna<k-q?_u?YVC(*ae's4.ku1fdMJUKC1J$,wQ=BP)>u[kSăU"C.*ifrDgYD)1r]s\&Ldwad>v.p(OOJF:6*ZT^T^$>HTDH4?qtirNMg0w9GZP.k_ăU"ru<f&zRH&BTFN*9Qz:nKQdG/SG7=2j(tc#O%I*GO$r.s1W:Vq:&faa<._YbYHU5ăU"oO7es3\^Go4SOj:%Cw8'1t<TZ&B_I/_4Ep4;Pu[Cn8)$0-?^UX=t9UJ)'T17Dz/ăU"6#c1;(Kgeet[(RpnfEp=l(6la;wJUf4X1bUZ?h*NQsPMiDQ7uvmX6o+Lan8eb)NăU"+/nDh^tF>r]5smQ$xeKs+mhRs&qvdF%1?G?YLiM5X<h?oaNW#/KyRU(>qtb;$b<ăU"Qoh4C']en)HYbqCc_HQv5d17mNa5\:?RLK<I^:zLUP9UST]Ydja*9qY26_)duR\ăU"]SOibyr=lJIUo^u$12\v_?lg?ao%I,g9wocOn/ld):$hB2OwPNUv?DWldimg8u;ăU"$C]k)habF-+3,mqsC_ek7s\V.Ahv1V.WH>LG*ZNQD/SDK^\U_vQ'65/_*N*5;>UăU";qZ\SP.Bns6Qb0Y]Lql6n7JR-Q[04ltw3T9%p5Lgsv?$MC(2d+cY7clhepn(-)răU"IqPZ*Yw+K(Spff-M+871Zt3bu+4ar#&smlW1n\C?L?mrO^]\YJcm]/K$&k&5w(wăU"%7s746h#G-(EdsY*kC#FcQb*E86l2I3GLkB$mkUit4x(%tk;/pIm+=P3IT4lMfqăU"r0j7n^2uNQ94(ajTV?90;#'7m9krrxjb2?'nD\X6/wQ8Sl18\e=be1>,0Jp*t:lăU"08dF:$JFRUi+*zQKW\KZ*t-%X_\yj4R,SYd<+kq_o/#\%TElYel0oQo,m:QsqRFăU"b64B.dG=u?sd(n-)9hCff/U]0M5L%^TO6<DU74eA)J#G79a9;P'O6lDqz?bS'6&ăU".tf]L>LmkO4BSDP.72LJe(*X_W9,JbU.sw6K3:9J,^8Yfe[:<<fWA4[7VqweEDwăU"XPb,o1Bpv#a/m;)D#eY_ynBj_4J,,_T\djjLh8d2Z_:);x#FYvql]sn8:EI[[e6ăU";$bm+S0PBQ2p\S,?a)qj=6oX7W]gQ..2yg#f5iC9pi&l?ZD3W_R^9[Suh9uq\p(ăU"k[kn=iCt,V7:RF>\^Juu+>5zu?uGm):0/_[E+>Iih(h6[J0iC2QtE%i#hyOb8O;ăU"UC>94'(/4qYI\)QSK.Mq=\G?_16%=jJ#?5[b\&rR%52pMaeh?,[cD)DhJ8yk.J+ăU"<:t<*2&Lsc7YzURbqvxt7\xfex/6E:rz&3_I/f%MGW.afgcY9LX$gj8,)&&R;Y?ăU"uTLpCy2'^E<]<7ZtbOoH0.#.Q<*eYa0j^8:8/?\'SL;KX%Y(^Xdpy?-Uu^-p7>5ăU":hEe:KV10?lkn?iS*mRJ/'w\n91gdH.5MH::r7VlE%9mN;07%_s]M5K?l4tg<HaăU"Q_65AZ-Z7_MV#%j?x2xDL<ETm]7rvv;q)EE&qZ&WOCQwE[)f,)qB2mkMtr5i=+&ăU"i/6d][ljg9,?(VTgbMpMIj-,:2J*lU8Cb'<O)=MYRaHU^d^XqPU0M8bxpeW'x9UăU"6e?Mr2K'p=4L7]4-+c-J84l=/^<7#0.hxt3kpypkyg/D0=WALJhug8$NES/Ee$iăU"Ua0xLUB-jI64hXa&t*>XA/)uxDR,et/UUfbfS81-UL0mVPuP(gGijvT*>Oa6K,$ăU"L3]+z-1sK*TmJB6n_Dp*NDdI?ox'us8MuUE8b\5pnl9Com5/m'hc4H4JqaM<qcQăU"Z8'i/svafCX-9%Kh*Pb^XS#o%oJT7Wr',QN9M+gyf?CU(WL6f)EZF\u,\0k_lkkăU"o37vDNyPkc2,dBs,mBr+-b8DZP<qG;S2rW$h'IpoF:8z8np)]$s[q=4DnMT0<teăU"?0:%4z/uq2?Y'0BNYkZ\x>Vs50Ez9pV]?K&,1$JLs)V6pmnxt($;J+P5w%/3>$&ăU"$YK.tlPbm>\WsdRd],k-(gQ6:66;w/\Ph=waUiWf-';HQ&1&A)uZn;_NY%DOMP9ăU"FGSV%;fq-x94gpGL6?a9*qL'E8=&hYZIXePRD8.-+IL?Cp4b?$$q(&\.nVor0\VăU"a;f9%/2DngCl:]kZ_UGuE>10.uV&'kcgSr90SJYy)Ee8jRGI=G.f6Y.M%d8U8FjăU"vXPK8h7P#1Kh.^y*0Y^o*RO7%fqI<YW3rLF-?(d5VRVW,D;0/9A4Pffa:R%4>I,ăU"W.DHM0REjernja.<Z01e$qqUFfj4JtAbBmpc10:,4_?[tc,5w>dSP8cmcWFTD5găU"rlf0?L0>-/)AU&FJpimv91Q&6RAFErm\k:8D&?vtoqicHn$r&A02'rZtigXC&T%ăU"y_10.H#%E$Cr?^f1#U5$hlfg62Y$=[iQTDgzhH9UBnGW=O,aFuQpr1yr5oJRDLvăU"d_1pSA)0EcUw$QOhtWW2^Um,>pt/C&c/4_G$Hfpf?V/sPoFHsLD\a-&-h&[Pj_eăU"dp0*Ayf^Z$I=$N2b<S?.V$Sb\.(sPRwTINvRMf2%mC];;[4KNw=R-KA)UKv_p6NăU"rjG8Pm38\C8tH[VX9CSP=(V\FbFt#qsM%?0s$(=6vSShr[dt&eoQ0WJ)dKFZu^UăU"T)vf/g]lOq5);X*L=kY/=b8K$FMAmoO#yqUpBkF$F/4ltJuVZsV*5g30':q\/K3ăU"0[rD>>1Rq-Se9hWw9kj2g[?=b.(8*/f:4IOD>wLG?/<LSQ[r,7eq=2,:P(\_?W5ăU"DZ_<q9YVbi3^-grKimkgtaBOu^ZWW*4>:qkK^F#kb4Bzk8N22EoCE\'-K1.:/u_ăU"HZEH/Lp'rq0?fhYCi+P]*VG0be0^VW[v)szp6Ph3_CPT$?JG.c/z3)8rGo+NsS*ăU":gz#\9gYDI2j+,7er+<i8D-$e/oItnDe0*[Q#.vH(EORSH&fXWSi&D/_9]b*'^DăU"Q+P[6E$I1h[O9m9Y5lD6f-j-Jg.8al<Py6Ga,j=XdUA]m):pBhc:WJ3/?0jQg_FăU"a*1sxSTKh;bS$Z[*%r,%Q4e=z2FgkX'PCupP[\?/eM^sziLCaEf/)uSnHS=PnH&ăU"Ft:Eq'L\WutmL75R8z_wLN],Imbh<x]?T/Z'EC(,N6c=Mma;lr-5Wd/OIW-+lW=ăU"a[i[d9s#ou#XO)wJ,)+IQ*ejOQ;#toBjNoo%\:0lQt^7zKIjk.T1mSK8nmZ9dx3ăU"$QXPU*tP19HiCz_'TPq%e9LuAmL8')dC%C=A=Nl<64l-:x4uQ7&P;wNTM9[HO;1ăU"CbRvGq9:[%eKM.XdGPYjBnjR3uX;Y/4'GkYWnRM^5IDd[AVTh1Og,$Mpk6KaOeCăU"+PJLIKdRDILjGWLWC*cZo$(cm/p+qF\aj<_dN\FW'S1S(FYhBQ(^%]tzwvRo=M1ăU"7wKQOG^_+0MYsXn91-fxubj?9Xod;qElb+5YB6i1o5Z\lO/YQm2LaL)-?Q]7ZbYăU"53h72X'LYdo/CEffKP1$_(0vo;5,NdrYrLH/YbL%D=^0ibgXt[rxpK'Z]Tumr\4ăU"3iH-Yv&Wz)Je)o29)Y1qT?%<k=HY2*DZ\I*jU%a4/S7vJi[ll8(wfxK%M,]&KNXăU"K=TwXwE#[;>K>6fKn-U0v>G,7s[c9.0SJF=/&445%AX)DZu/*r#L#I:MiYdL(35ăU"4%#=ucuKsggN7$&J/EmzH*;s)_b=dw+L)\Z#4&FNeditsp[sT-(=^BJLT+Tdpd(ăU"R?ZO-f-$1hIKDphQHsh/IOFp6.eNJ%U9.cK%_[SktAmP6?sK],hJEdcjt>8Lcu/ăU"dekj\=#3=;$\8F/2aPBny5;2>HY4ZvBJkkfa:\<0fYc,x><'I$XBTc'GPogTgxYăU"H4=VezZRf$,vM)BNz$)XxQFQ$Ps^QL#JlH:(:*eW(rPq<tysOmMmRSe&OJfM+/măU"1d%KaT8U.Eo/?O87_QBpRjbN1WM_cjEWuO*VZCX_wMFbt4*'vfHRXJMY3c,&l'qăU"b0Mcqs5L#l3'PY,(Z,ieO?7KDtg3Gal_woJa>A7;R^CmB_*&'s&Q4b^pE]sX4o'ăU"pl?sOuG6\7fT']HAu7)(ra)>[OK,f*#Gw'NStTjU+Q//Hnb;,>=;X\WJoz>NOUEăU"vrKoAm:7xkmN4igMDCyJx-#[aiUYj4q*kE98d0mksvP?CHPM%tmJ).oVr47B'SRăU":y=y.vgD(i&>kv5shH5A1T5ZLR+\gafXS=G*HxrkUSv1R>up\4.Kzv=GiGpHP1QăU"hN=$c>7n6/(sztPr<#9GskZNDq6:E#=u5nL,hCV.P?1'=</2/CiTc7d4iQ<&%rSăU"1dn9I*YzAH4Jsi.L#t5p/_71>[sc0b,FWP9]8-5gLU_cV+8QJWr#=+h.uP]LYPqăU"Ao$QK;L<];9p<p(;-Z1wKlu2Rb/KFde<vyS?^h)t$jLKxBjQqt#VnV0rW&,,M9?ăU"]kJbunmE<xhHZh(.zk;N[j?m<K[rYi[mC8ydH0qJwr5zk<<L2E9.D[EYf#elA)5ăU":iDQ=g0P\9\CuG>y>$MK;v$>TYrW+f?EM&5.'>W=C9SU4'$r64$JFqc;cj\Cn-)ăU"JgJvHpIxikGOY3h(ZX[D/8rBnGA9ZOFOMlEkdb7*A]QBY<C>(&pqpM-ad.yPeXEăU"sH#pdclM#tGIDO9R%n#xfU1g>(noUL<ea+)ug)^xOdO7KgpZk<ajX<,3,BUkY\qăU"u/d3l5^oW0uX[)NMSIigLLZb;/qj$Gkv\<puOs__Wh?rNLDv6mc?$tjLQm$(#T/ăU"z%$I%EF[68=OU=50[G:WGBtdf\RRW?dTE^E24KAgI[cLSd9RC5?G[ZFf_P/DCAWăU"u'SV+I(326ef\CRY;Q-;t[Bltus<U_^^7T4wr#RNEpmDuKp2xWlD?[A7.ILO]LkăU"N0Sbmz8l/Pnoc.sKOkQ2O1TNkcVBLn([4%#5.JdgjGVIhlPB$v-kGtWOCP;%d>găU"KNG(ROpLVY[Cw3C5AR^^=U8I^\B+c1,\:GYu9+mF.,Tdt=:-Zm8flJLR'OKmK:MăU"^Mb4WZP[+z#D:l_HMor5:;bt+.VnYS't.nJ:1G1a8Mm>kA';Uy.N5P^8>12c,[)ăU"tNb+1vU7AaBwCz_sjZ3&D*jb-#[g)/$VbcQJ9LLl0Bhs\)6>nlN?Ur>L0*e,)GgăU"8G:Aca;E2B6n_u$Mub]nM9V;[tv?FYc=,NUi-tUH+<pM<qb).[F>\)=%[qE?q6xăU"ackra<Hb(laQv&sELDDN;Yhkoo>n\g6<m8#J[30NCF,&Cf,el(A-U^AKEwMguAZăU"Fpf1e[Q,?t\UAt7?v[K)4L9GFYu\iRfU/),i^dcb9t:PGlqFJ<xO1ZPfS(k<(I(ăU"Whi4;=.24c1(Z6H<76R;A'j((6p:r,)Uf_dU65uK7BQSr?oL%[s4E8a]*2EPc><ăU"U*-0BpFa,)h3p3v53+p(VN>otLBBwYWu$Wjr^Ah2Sdj[W50-UY$W9ruk5a9oB6)ăU"poAoa<0]A#'eG1>CKh^Ml^geq8Dridjulq89].VMZiW>80rdfR']ZGU]7a.sle_ăU"W:S<i?E(WK:WB\'HB,Qv?E>2E0*YjS/9Vqn\n<$&HK*<NsiqY'9Z2dVhMP+LHraăU"x;LDxSE8/U<YM[#u+M(jc+RiW)vKoW:J)fdCJ_ONi\1_bN?>9St#Ql%X(b/Yf#8ăU"2K+G<[ac0WL*K#B_.GASPvdn=FU2.4o4wiqG;cUT&MZ:2R-?TPPC&z0<OrBcL:uăU"kBM\:ha=lLdr,k#(y%w<3T]Y)'[o,;#P)a/]N+F_lOPr(>:s&L?iV.DgcrNujhMăU"s^;p7dz6/u,ch%AM]<hEY,7eHWi4AoT8nvZD-hbdz+gL.?F-,jqF'(WuyhpNP5EăU"TPinDWKi/GkWI9G]k6c\7'.gbiYUSwwG25:lh6:q&I3u7Q6cBEN3Cr8w.E-1r8ZăU"T-yTVPgUI,4_L>/oGN+vU&+E*;ywpY;69[s,upCG^hv-Flkr$b>dhr5nTY1RxjQăU"&,w\d+A5MsFwKgkh/(CrYr;bnF?$m;5X&Oq>AhMI092$F*J(%z^K.Ca8kjO]X\LăU"-AqEs(j>drLYW)6j5^S:hi-e.\oAqDasN%\LdWYTWmL544_K)RA&A)]e18iKa#jăU"qx(sWp/s[Nx[N+eI/uw,-XwsY75nTFCg'OHmJ5U]J>Zf=#E1uRw9AmD\)2F#5FAăU"VfH5R(penlR]*$I\tyE$k=$;)$RA_#ql34LVLk:z<WjhSniVPtt'x'up%&'9%%9ăU"%%%7-%,c0HG,^%:dR-7%%Q$%%%0%%%%%%%%%&%%E%%%%%%%%%ufqk%fijS%gfxuăU"%p&'9%%9%%%%-%*B&JG*]kY[x&U%%,'s%%0%%%%%%%%%%%%E%%(%%-%.%j'f%ruăU"qj%Slwm%up*+%%%%%%'%'%&A%%%)M^%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=51AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMatt Sams                      TILE-SCROLL DEMO               hack@dcr.net                   06-17-97 (14:08)       QB, QBasic, PDS        64   4134     SCROLL.BAS  'Scrolling Demoă'Hit 'M' during use for map feature/compile for best performance.ă'Send comments/suggestions to: hack@dcr.netă'ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLL.ZIP",4^6:Z&=2667:?STRING$(50,177);ăU"%up()%9%'%R-%$O&_GD1'B5f%.%%j&%%%.%.%%&f%yjwSIxu'd,_*2%%F1(h,hCăU"2#:U,of9MQA-=ma4ts?DP2?i>Cbk2R;T-3>D4#+gQGd2EI'0MKo3,Fgw\2KTC,*ăU";VW4%up()%9%'%.-%<+n_Gqg5Vb]%.%%j&%%%.%%%%lw%fxxSIxu'4b_:2<%U1(ăU"x*F_>_)po4\aMqQs*gq*OIp6,oGM=.B.YNNCupPj5W6^lWP(I*'\GNJ*MdM/0;3ăU"Z\X3%.;MVfV,L/oe-.[%kE%(J4L30]V=ft*WU27EUMjL#[-m,X&1LON=e3nM2:VăU"3=6wf-Fpm?+435BVgq5RL6y0qP'fMwrsy?/chmTk%0up(%)9%'%%-%Q^)$GHGOpăU"zC#%%%j%&%%.%%%%r%tzsy#Sxu';,_46&Oe-i*HS/Q<:WcM9?V/T;:#?&2enP,găU"a=0HTp^'DY=pSf^5$U,Pns89YT<Aq_n,r-t>:tO%hJSwe-:C._?;l=1+oggn40)ăU"FBeC6t.H-7o+M%wDWeFU3jF9Xq_>LeBLLS-NV%oUb>2fFD%up()%9%'%%-%i,n$ăU"G^<3AW$%.%%j&%%%.%%%%yw%jjxS.xu'zb_*2<%U1):#;Oy6/SyisPTi\%e/>soăU")-hJeW%NBolRIFIeb+NX9PL6D^lIKe+?P<1MlUyg3R8w*8-/4oM/Tlu%h5Bh<>3ăU"bATt.lAr00UdJM#ep&wE])b6J6_Q)S+NdG%A'UeReQ93;))G6,p(EF2C6c_0H1UăU"X>dOVDGl]#Uq\l?GFP^Ohf&N%up()%9%'%.-%w-/$GUm6/xE%.%%j&%%%-%%%%hăU"f&%jSxLu',^0J2OeR-hjV7.A:TPu40[?Xg^Q^K)M;q8A;6q)wp.FB+TvB%WyDVgăU"(5#HIsJ/2ExNO4?a-g;F\06sKi3Je&0vfH%Uec4x-16*/hbH6daW+/lRivK.4]>ăU"^G3F;i0YWv11QvJC&Ckc3w]At=Vx$,%up()%9%'%#-%NMeaGLu)7Ig%.%%j&%%%ăU"/%%%%ij%xjwy#Sxu';\]42%%E-iH*2.kf:fkJP'4k2;g's([a?gY<W2my)tSKv7ăU"WvQ?TOq>?Ifqw6AMNKePoYcNCg(XQrv&Rt%\8up%()9%%'%-%:A<JGVg2v>%Z*%ăU"%&+2%%%/%%%%xhwt%qqSgRfxf%Ct7A4s9x6RPhF=E=\Vc+\ayY?KSYfqqmQf:E?ăU"gk;eeZ<L8,gJZFXV)b?F1R[g$Q_=4x>b-Fbaf7(a'5)A$CQT%g4Gb_H(46&'/g.ăU"pCY#YZsWpLN,h\4m4^4)rlLh6uXh6hNHJ>5(<SY[;8Z[ECP5$X>;/N_2Y%:Sfo)ăU"Bqa/9_7T#+/7_j=7M(T>&d'\,Hzi)Y:qm'[nKsaDh\slU9LYM$%(C>wQ^;^n058ăU"jNt4g&JuURMcO2&x.]<rDD(?aE$q&?5/_8hkxt^N^a73gw;aF<QtcSp5N4s\p<)ăU"pj%dQXjGQ66QDn.hFV4y(Q%X6vqbzdN#Fgt0f2AG.NK'J)8S/b<K#n\tbJmkuPQăU"hA?Z*5By+Q:_BZmD,$#Luh%.Cq)m2lnMPJ>amu)w'1]E1;I'mIIR#P(()xOTG:0ăU"NSb4L'O;;PcndAvV1(hFb5no.:c9:^t.l5.5S>zM;.dNUW5p2Fj90p6:c::OmYCăU"is+/:Rg6%I_:]?/f)Q<3Xx+luQ*6;PZP?%'B3XKw_g18m&bM8xln[ZLVF;2^ApmăU"z.cAUMvMBE?z#,;^[rPpPp2mVyTqsu0_Nci%a(FVzz&G*.TjvPxB[Stl:x89Tb9ăU"6u'(4&\%0=;i0_9D_oX1gclxFx7DP]IW[G;vMuH:C[hbbC0Yt?&;1]wu;efYvVeăU"z1qQ_g'ifdv:8J0R6Obi4aX=v7'P<oW[3oZ8S?I%w[bf$3J+r2Q.^EGNQkt8Ck4ăU"T+yMB::1RZSkBOHKmJ4<eZ$VO5PoC#gkfZaYK\nG[i<=VhxW=D]a/6V)w;+SunRăU"=jOSJFKJ9PcS\9FLGlr>$Id[t.0A$#6s]cV6]Rk,KvgbsyG4-KvM(WWEz0rk_fLăU",Az\Rqec*DOpJYF#.g+gTCXf#FlR\=)X9Zc?D22BG_z8k]l8KVUl[m+Qsl6Qv1\ăU"S?d1GI*2RcBE\j6cSG]=(6:pm5P(k8P>cX**=GgPL8;14s49DhUOACLYY*#'T5răU"'B7s]'6]rqS='q6ja,Q**PnR5(\a<V#dFaSLB$bb:BgA]0g+VNFU%SW#e]F#.9=ăU"PgX7XO'm8.B_8KBXHZUt=YP/CKhpj4ab8zf+N_2x>XK2#?;_$/0<dq*hK/:2t]HăU"^/%MnPi\gC&jbYKNojGpx5_8X;ap7M*.a*?WGl*1J-urh-rOr<>Uba[d\J70[4LăU"dNuR/^-NT$<sHAaMoO63#-:sY65v-70B4gh3&JrdQBuL$d>s$gNS-N7_FwyT0qDăU"h3l&Y?ZrfAM>>Kwo(^de[VT<S.[Nh.].iTkU68l#1Rm:e8[DUH?F:;Vn:p#%9l#ăU"RSEb3.GBoqNU]><b3(G=ke;-#)X,\14?ooZ(*#=14xeBe<2JKiE;^:Koq^l'+k+ăU":LphyiVhx*u%TOVpWWi/[2Gb>h,Cg;C/jmSI>75].ll_yhhg6bnDC$rTT\Gd3B$ăU"<bRtG:BkxX%DAftO'r=9v::mG^DtY7R(skXW/0dYGzKuZ85oujBnV9bGCQG^fp-ăU"+gZp^_?dbM)/cei?1kn\fz4JW3-Kd-P]X_F)Fb5WBm,U&jJRnmT<o/21Z%WG'q[ăU"hCcm34Yl$;aVw1VTKoGAn>adqpUs+3KsstPVi*nmKl^,yDYF:&VK1qFklbk(NZ^ăU"4YQ=5PXB90:[+H4\qfFtHgnH3BLD2F0V,oWz2JY9bUGJPZ8'*bN&u%p&'9%%9%'ăU"[%-%$)O_GD+1B5f#%%%j%&%%.%%%%%%%%%&%%E%%%%%%%(%&fy%jwSx(u'up%&'ăU"9%%9%'%.-%<+n_Gqg5Vb]%.%%j&%%%.%%%%%%%%%&%%E%%%&7%%%%lwfx%xSxu&ăU"'up&%'9%9%%'%-#%Q)$jGHOp(zC%%(%j&%%%.%%%%%%%%%&%E%%%%B%&%%r%tzsăU"y#Sxu'%up&'%9%9%%'%-%.i,$GZ^<AW&$%%%&j&%%%.%%%%%%%%%&%E%7%%1&%%ăU"%yw%jjxS.xu'u%p&'9%%9%'#%-%wC-$GUXm/xE#%%%j%&%%-%%%%%%%%%&%%E%%ăU"(%?'%#%hf%%jSxu&'up&%'9%9%%'%-I%NMaUGLu7&Ig%%(%j&%%%/%%%%%%%%%&ăU"%E%%%%1%(%%i%jxjw%ySxu&'up&%'9%9%%'%-d%A<JgGg2v&>Z*%(%+2%%%/%%%ăU"%%%%%%%%E#%%%E%(%%x%hwtq%qSgf%xup*%+%%%%%,%,(%Q&%+%L-%%%%%ăEND SUBăCLOSE:IF S=163AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăThe ABC Programmer             PIXEL TUNNEL (WORMHOLE EFFECT) voxel@freenet.edmonton.ab.ca   06-20-97 (11:00)       QB, QBasic, PDS        100  2968     PIXTUN.BAS  ' °±˛ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ˛±°ă'°±˛Ű                                                                Ű˛±°ă'°±˛Ű PIXTUN.PAS - This source was coded by The Jerk of Hoaxers aka  Ű˛±°ă'°±˛Ű Stian S›reng in February 1995. If you have any questions about Ű˛±°ă'°±˛Ű this source, email to: stians@interlink.no, 100% answer. (Bug  Ű˛±°ă'°±˛Ű reports are welcome!) Boy, can this source be optimized !!!    Ű˛±°ă'°±˛Ű Feel free to use it at any time, as long as you give me the    Ű˛±°ă'°±˛Ű credits for it. Tested on 486SX/30: ok, 486DX2/66: fast and    Ű˛±°ă'°±˛Ű 386SX/25 slow. Conclusion: Requires mcga and a 486.            Ű˛±°ă'°±˛Ű                                                         stians Ű˛±°ă' °±˛ŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰŰ˛±°ă'ă' Converted to BASIC code by William Yu (06-20-97)  Public Domain.ăăDECLARE SUB pal (colr%, red%, green%, blue%)ăDECLARE FUNCTION LShift% (Byte%, Bits%)ăăDEFINT A-ZăăCONST Amount = 30     'number of circlesăăDIM circles(1 TO 360, 1 TO Amount) AS INTEGERăDIM ypts(1 TO 90, 1 TO Amount) AS INTEGERăDIM xpts(1 TO 90, 1 TO Amount) AS INTEGERăDIM xsinus(1 TO 720) AS INTEGERăDIM ysinus(1 TO 720) AS INTEGERăDIM r AS SINGLEăăă' ** Precalculate circles ** ăă     PRINT "Calculating, please wait.."ăă     FOR a = 1 TO Amountă       r = 0ă       FOR x = 1 TO 360ă          r = r + (.0175) * 4ă          circles(x, a) = INT(SIN(r) * (5 + (LShift%(a, 2)))) + (5 + (LShift%(a, 2)))ă       NEXT xă     NEXT aăă' ** Precalc x and y sinuses ** ăă     r = 0ă     FOR x = 1 TO 720ă          r = r + .0175ă          xsinus(x) = INT(SIN(r) * 140) + 140ă          ysinus(x) = INT(COS(r) * 90) + 90ă     NEXT xăă     SCREEN 13ăă' ** Set grayscale palette ** ăă     FOR a = 63 TO 0 STEP -1ă       CALL pal(a, a, a, a)ă     NEXT aă     sinptr = 0ăă' ** Main loop ** ăă     DOă       WAIT &H3DA, 8ăă       IF sinptr > 358 THEN sinptr = 0     'loop sinusă       sinptr = sinptr + 2ăă' ** Draw and clear circles ** ăă     FOR a = 1 TO Amountă       FOR x = 1 TO 90ă         xx = xpts(x, a)          ' store old ptsă         yy = ypts(x, a)ă         PSET (xx, yy), 0ă         xx = (circles(x, a) + xsinus((LShift%(a, 3)) + sinptr)) - a * 4 ' new pos ă         yy = (circles(x + 23, a) + ysinus(sinptr + 90 + (LShift%(a, 2)))) - (a * 4)ă         IF ((xx > 0) AND (xx < 319)) THEN      '  check if inside bounds ă           IF ((yy > 0) AND (yy < 199)) THENă             PSET (xx, yy), a + 5ă             xpts(x, a) = xxă             ypts(x, a) = yyă           END IFă         END IFă       NEXT xă     NEXT aăă     LOOP UNTIL INKEY$ <> ""ăăENDăăFUNCTION LShift% (Byte%, Bits%) STATICă   LShift% = (Byte% * (2 ^ Bits%)) MOD 256ăEND FUNCTIONăăSUB pal (colr, red, green, blue)   'sets paletteă     OUT &H3C8, colră     OUT &H3C9, redă     OUT &H3C9, greenă     OUT &H3C9, blueăEND SUBăThe ABC Programmer             TWISTED BAR EFFECT             voxel@freenet.edmonton.ab.ca   06-20-97 (11:00)       QB, QBasic, PDS        106  3607     TWISTED.BAS '   _______________________________________________________________________ă'  /                                                                       \ă' |  TWISTED BAR EFFECT (or whatever) Pascal version                        |ă' |                                                                         |ă' |  Coded by me (inopia) when i had nothing to do (again?!). This time NO  |ă' |  thanx to CONO, i did it all on my own! No small line routines ripped   |ă' |  from your sources this time. This is the STRIPPED version. I also have |ă' |  one with a writer, but you don't care about all that. The public only  |ă' |  wants the plain effect... So here you have it! It's probably the worst |ă' |  compilation of this well known effect ever, but don't come kick my ass |ă' |  around about it!                                                       |ă'  \_______________________________________________________________________/ă'ă' Converted to BASIC code by William Yu (06-20-97)  Public Domain.ăăDECLARE SUB pal (colr%, red%, green%, blue%)ăDECLARE SUB sortx ()ăDEFINT A-ZăăCONST pi = 3.141ăăDIM CosTab(0 TO 90) AS SINGLE       'SinetableăDIM SinTab(0 TO 90) AS SINGLE       'CosinetableăDIM SHARED x(0 TO 2) AS INTEGER     'Some X-valuesăDIM SHARED x1(0 TO 399) AS INTEGERăDIM SHARED x2(0 TO 399) AS INTEGERăDIM SHARED x3(0 TO 399) AS INTEGERăDIM SHARED L AS INTEGERăDIM turntab(0 TO 825) AS INTEGER    'TableăăDIM origin(0 TO 2, 0 TO 1) AS INTEGERăorigin(0, 0) = -30  'The origin of the three points (x and z values)ăorigin(0, 1) = -30ăorigin(1, 0) = 30ăorigin(1, 1) = -30ăorigin(2, 0) = 30ăorigin(2, 1) = 30ăăă  FOR I = 0 TO 90ă    CosTab(I) = (COS(I * (pi / 180)))     ' Calculateă  NEXT Iă  FOR I = 0 TO 90ă    SinTab(I) = (SIN(I * (pi / 180)))ă  NEXT Iăă  FOR L = 0 TO 359              ' Calculate 360 possible rotationsă    cnt = cnt + 1ă    IF cnt > 90 THEN cnt = 0    ' It's a cube, only two sides needed}ă    'Now calculate the x-valuesă    FOR I = 0 TO 2ă      x(I) = INT(CosTab(cnt) * origin(I, 0) + SinTab(cnt) * origin(I, 1)) + 50ă    NEXT Iă    sortx ' Sort themă  NEXT Lăă  SCREEN 13ăă  FOR I = 0 TO 127ă    CALL pal(I + 127, I, 0, 0)     ' Nice palette (duh!)ă  NEXT Iă  FOR I = 0 TO 127ă    CALL pal(I, 0, 0, I)ă  NEXT Iă  ' Now calculate a table of rotations, this wil make the bar "twist"ă  FOR J = 0 TO 825ă    turntab(J) = INT(COS(J / 100) * 100) + 100ă  NEXT Jăă  DOă    L = L + 3 ' If this goes too fast for ya, try increasing l by less than 3ă    IF L > 625 THEN L = 0   ' Make sure the table loopsă    FOR I = 0 TO 199ă      J = turntab(L + I)    ' Grab a value from the Turn-Tableă      ' after 20 lines change coloră      IF clr = 20 THENă        IF S = 128 THEN S = 0 ELSE S = 128ă        clr = 0ă      END IFă      clr = clr + 1ă      LINE (x1(J), I)-(x3(J), I), (x3(J) - x1(J)) / 2 + Să      LINE (x3(J), I)-(x2(J), I), (x2(J) - x3(J)) / 2 + Să      LINE (0, I)-(x1(J), I), 0ă      LINE (x2(J), I)-(100, I), 0ă    NEXT Iă  LOOP UNTIL INKEY$ <> ""ăENDăăSUB pal (colr, red, green, blue) '{ sets palette }ă     OUT &H3C8, colră     OUT &H3C9, redă     OUT &H3C9, greenă     OUT &H3C9, blueăEND SUBăăSUB sortx    'This sorts the xvalues from small -> bigă  x1(L) = x(0)ă  IF x(1) < x1(L) THEN x1(L) = x(1)ă  IF x(2) < x1(L) THEN x1(L) = x(2)ă  x2(L) = x(0)ă  IF x(1) > x2(L) THEN x2(L) = x(1)ă  IF x(2) > x2(L) THEN x2(L) = x(2)ă  x3(L) = x(0)ă  IF (x3(L) = x1(L)) OR (x3(L) = x2(L)) THEN x3(L) = x(1)ă  IF (x3(L) = x1(L)) OR (x3(L) = x2(L)) THEN x3(L) = x(2)ăEND SUBăJay Cook                       SPRITES USING PEEK & POKE      jay.cook@sandh.com             06-26-97 (11:54)       QB, QBasic, PDS        85   2848     QSPRITE.BAS 'Qsprite.bas _ Jay Cook _ 6-25-97 _ http://members.tripod.com/~jaycook/QB.HTMă'  I needed to write some sprite routines for the game in QB I was programmingă'and I was currently "borrowing" some routines from someone else's program.ă'I found out how to POKE it up. How it works is 1-64000 and color. 1=(1,1)ă'64000=(320,200) using the formula (y * 320 + x). What I did was build an arrayă'of a 16x16(256) sprite and the value represented the sprite color. If the coloră'was 0 then it would skip the plot and leave the background. I also desided toă'make a reverse sprite by having the x plot in reverse(instead of adding ită'would subtract) and just move the X value of the sprite over 15 pixels. I didn'tă'add Y-flip, but that could easily be done. I also added PSET plotting so ită'can be run in Qbasic without overflowing. If you use poke, you will have toă'compile because when it POKEs beyond 32000, it crashes. It is pretty fast andă'sure beats the hell outa PSET. Not bad for 3 am programming?ă'                                                       - Jayă'jay.cook@sandh.comăDEFINT A-ZăDECLARE SUB gets (x111%, y111%, s11%())ăDECLARE SUB puts (x111%, y111%, s11%())ăDECLARE SUB putr (x111%, y111%, s11%())ăCOMMON SHARED x111%, y111%, s11%, xz2, xz, yz2, yz, xz3, px, px2ăCLSăDEF SEG = &HA000ăSCREEN 13ăpx = 256: 'Amount of data for a single sprite arrayăxz3 = 15: 'X width of spriteăDIM SHARED gfx(px)ăă'(\/ Sprite)ăLINE (0, 0)-(15, 15), 12ăLINE (0, 0)-(15, 15), 9, Bă'(/\ Sprite)ăă'\/ Gets sprite in array(Upper left X,Y)ăgets 0, 0, gfx()ăăCLSăăLINE (1, 1)-(100, 27), 1, BFă'\/ Puts down regular spriteăputs 20, 20, gfx()ă'\/ Puts down reversed spriteăputr 40, 20, gfx()ăăăSUB gets (x111%, y111%, s11%())ăxz3 = 15ăxz = x111%: yz = y111%ăxz2 = xz: yz2 = yză FOR b = 1 TO pxă  IF xz > xz2 + xz3 THEN xz = xz2: yz = yz + 1ă   px2 = yz * 320 + xză    s11%(b) = PEEK(px2)ă  xz = xz + 1ăNEXTăEND SUBăăSUB putr (x111%, y111%, s11%())ăxz = x111% + 15: yz = y111%ăxz2 = xz - 15: yz2 = yzăFOR b = 1 TO pxă IF xz < xz2 THEN xz = xz2 + xz3: yz = yz + 1ă  IF s11%(b) = 0 THEN sc = 1ă   IF sc = 0 THEN : px2 = yz * 320 + xz: POKE (px2), s11%(b)ă   '|  use this line instead of above to run in Qbasic, otherwise compileă   '\/  using the line above(faster)ă   'IF sc = 0 THEN : PSET (xz, yz), s11%(B)ă  xz = xz - 1: sc = 0ăNEXTă'yz = yz - xz3ăEND SUBăăSUB puts (x111%, y111%, s11%())ăxz = x111%: yz = y111%ăxz2 = xz: yz2 = yzăFOR b = 1 TO pxă IF xz > xz2 + xz3 THEN xz = xz2: yz = yz + 1ă  IF s11%(b) = 0 THEN sc = 1ă   IF sc = 0 THEN : px2 = yz * 320 + xz: POKE (px2), s11%(b)ă   '|  use this line instead of above to run in Qbasic, otherwise compileă   '\/  using the line above(faster)ă   'IF sc = 0 THEN : PSET (xz, yz), s11%(b)ă  xz = xz + 1: sc = 0ăNEXTăăEND SUBăDenis Boyles                   PLAY .FLI FILES                FidoNet QUIK_BAS Echo          06-20-97 (15:39)       QB, QBasic, PDS        287  7279     VIEWFLI.BAS '[VIEWFLI2.BAS] - Public Domain 1997 by Denis Boyles. All Rights Reserved.ă'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ă' * UPDATE * - added Page Buffering to scene changes.ă'ă'Intrigued by Carl Gorringe's FLIPLAY2 program, I thought it'd be a fună'project to work on. Armed with the PC Game Programmer's Encyclopedia andă'Carl's program for reference I set forth.ăă'To my surprise, viewing the .FLI was pretty straightforward. However I'veă'tried to make it a bit faster then Carls'. Using a little bit of assemblyă'code, I think I've managed that, slightly. On my 386-20, I'd say for now,ă'that mine is about twice as fast. (though it's still slooow)ăă'However, my player is only limited to .FLI files and not the newer .FLCă'ones. Mainly, the PCGPE seemed to only outline the .FLI format and not theă'.FLC. (plus I couldn't seem to find any .FLC to test with anyway) Also, likeă'Carl's there is a 320x200x256 color image limit on the animation.ăăDECLARE SUB ReadMLXData ()ăDECLARE SUB DoLC (FileHandle%)ăDECLARE SUB DoCOPY (FileHandle%)ăDECLARE SUB DoCOLOR (FileHandle%)ăDECLARE SUB DoBRUN (FileHandle%)ăDECLARE SUB DoChunk (FileHandle%)ăDECLARE SUB DoFrame (FileHandle%)ăDECLARE SUB PlayFLI (FileName$)ăDECLARE FUNCTION FixFileName$ (FileName$, Ext$)ăăCONST FLIID = &HAF11ăCONST FRMID = &HF1FAăăCONST FLICOLOR = 11ăCONST FLILC = 12ăCONST FLIBLACK = 13ăCONST FLIBRUN = 15ăCONST FLICOPY = 16ăăTYPE FLIHEADERă  FileSize  AS LONGă  ID        AS INTEGERă  NumFrames AS INTEGERă  across    AS INTEGERă  down      AS INTEGERă  PelDepth  AS INTEGERă  flags     AS INTEGERă  speed     AS INTEGERă  expand    AS STRING * 110ăEND TYPEăăTYPE FRMHEADERă  size      AS LONGă  ID        AS INTEGERă  NumChunks AS INTEGERă  expand    AS STRING * 8ăEND TYPEăăTYPE CHNKHEADERă  size      AS LONGă  ID        AS INTEGERăEND TYPEăăTYPE RGBă  red       AS STRING * 1ă  green     AS STRING * 1ă  blue      AS STRING * 1ăEND TYPEăăDIM SHARED memcpy%(18), memset%(15), pg%(32000)ăăReadMLXDataăINPUT "[drive:][path]filename[.FLI]"; FileName$ăPlayFLI FixFileName(FileName$, "FLI")ăBEEPăă'36 bytes of MLX data for the MEMCPY procedureăDATA &H55,&H8B,&HEC,&H1E,&H8B,&H5E,&H0E,&H8EăDATA &H07,&H8B,&H5E,&H0C,&H8B,&H3F,&H8B,&H5EăDATA &H06,&H8B,&H0F,&H8B,&H5E,&H08,&H8B,&H37ă3 DATA &H8B,&H5E,&H0A,&H8E,&H1F,&HF3,&HA4,&H1FăDATA &H5D,&HCA,&H0A,&H00ăă'29 bytes of MLX data for the MEMSET procedureăDATA &H55,&H8B,&HEC,&H8B,&H5E,&H0C,&H8E,&H07ăDATA &H8B,&H5E,&H0A,&H8B,&H3F,&H8B,&H5E,&H06ăDATA &H8B,&H07,&H8B,&H5E,&H08,&H8B,&H0F,&HF3ăDATA &HAA,&H5D,&HCA,&H08,&H00ăăSUB DoBRUN (FileHandle%)ă  offset& = 0ăă  FOR y% = 1 TO 200ă    NumPackets% = ASC(INPUT$(1, FileHandle%))ă    x% = 0ăă    FOR packet% = 1 TO NumPackets%ă      SizeCount% = ASC(INPUT$(1, FileHandle%))ăă      IF SizeCount% < 128 THENă        DataByte% = ASC(INPUT$(1, FileHandle%))ăă        DEF SEG = VARSEG(memset%(0))ă        CALL absolute(VARSEG(pg%(0)), offset& + x%, SizeCount%, DataByte%, 0)ă      ELSEă        SizeCount% = -(SizeCount% OR &HFF00)ă        buffer$ = INPUT$(SizeCount%, FileHandle%)ăă        DEF SEG = VARSEG(memcpy%(0))ă        CALL absolute(VARSEG(pg%(0)), offset& + x%, VARSEG(buffer$), SADD(buffer$), SizeCount%, 0)ă      END IFăă      x% = x% + SizeCount%ă    NEXTăă    offset& = offset& + 320ă  NEXTăEND SUBăăSUB DoChunk (FileHandle%)ă  DIM CHUNK AS CHNKHEADERăă  FilePos& = SEEK(FileHandle%)ă  GET FileHandle%, , CHUNKăă  SELECT CASE CHUNK.IDă    CASE FLICOLORă      DoCOLOR FileHandle%ăă    CASE FLILCă      DoLC FileHandle%ă      DEF SEG = VARSEG(memcpy%(0))ă      CALL absolute(&HA000, 0, VARSEG(pg%(0)), 0, &HFA00, 0)ăă    CASE FLIBLACKă      CLSăă    CASE FLIBRUNă      DoBRUN FileHandle%ă      DEF SEG = VARSEG(memcpy%(0))ă      CALL absolute(&HA000, 0, VARSEG(pg%(0)), 0, &HFA00, 0)ăă    CASE FLICOPYă      DoCOPY FileHandle%ă      CALL absolute(&HA000, 0, VARSEG(pg%(0)), 0, &HFA00, 0)ă  END SELECTăă  SEEK FileHandle%, FilePos& + CHUNK.sizeăEND SUBăăSUB DoCOLOR (FileHandle%)ă  DIM RGB AS RGBăă  GET FileHandle%, , NumPackets%ă  index% = 0ăă  FOR pack% = 1 TO NumPackets%ă    index% = index% + ASC(INPUT$(1, FileHandle%))ăă    change% = ASC(INPUT$(1, FileHandle%))ă    IF change% = 0 THEN change% = 256ăă    OUT &H3C8, index%ă    FOR ct% = 1 TO change%ă      GET #1, , RGBă      OUT &H3C9, ASC(RGB.red)ă      OUT &H3C9, ASC(RGB.green)ă      OUT &H3C9, ASC(RGB.blue)ă      index% = index% + 1ă    NEXTă  NEXTăEND SUBăăSUB DoCOPY (FileHandle%)ă  DEF SEG = VARSEG(memcpy%(0))ă  offset& = 0ăă  FOR ct% = 1 TO 200ă    buffer$ = INPUT$(320, FileHandle%)ă    CALL absolute(VARSEG(pg%(0)), offset&, VARSEG(buffer$), SADD(buffer$), 320, 0)ă    offset& = offset& + 320ă  NEXTăEND SUBăăSUB DoFrame (FileHandle%)ă  DIM FRAME AS FRMHEADERăă  FilePos& = SEEK(FileHandle%)ă  GET FileHandle%, , FRAMEăă  IF FRAME.ID = FRMID THENă    FOR ct% = 1 TO FRAME.NumChunksă      DoChunk FileHandle%ă    NEXTă  END IFăă  SEEK FileHandle%, FilePos& + FRAME.sizeăEND SUBăăSUB DoLC (FileHandle%)ă  GET FileHandle%, , StartY%ă  GET FileHandle%, , NumLines%ă  offset& = StartY% * 320&ăă  FOR y% = StartY% TO StartY% + NumLines% - 1ă    NumPackets% = ASC(INPUT$(1, FileHandle%))ăă    IF NumPackets% > 0 THENă      x% = 0ăă      FOR packet% = 1 TO NumPackets%ă        x% = x% + ASC(INPUT$(1, FileHandle%))ă        SizeCount% = ASC(INPUT$(1, FileHandle%))ăă        IF SizeCount% < 128 THENă          buffer$ = INPUT$(SizeCount%, FileHandle%)ăă          DEF SEG = VARSEG(memcpy%(0))ă          CALL absolute(VARSEG(pg%(0)), offset& + x%, VARSEG(buffer$), SADD(buffer$), SizeCount%, 0)ă        ELSEă          SizeCount% = -(SizeCount% OR &HFF00)ă          DataByte% = ASC(INPUT$(1, FileHandle%))ăă          DEF SEG = VARSEG(memset%(0))ă          CALL absolute(VARSEG(pg%(0)), offset& + x%, SizeCount%, DataByte%, 0)ă        END IFăă        x% = x% + SizeCount%ă      NEXTă    END IFăă    offset& = offset& + 320ă  NEXTăEND SUBăăFUNCTION FixFileName$ (FileName$, Ext$)ă  FOR ct% = 1 TO LEN(FileName$)ă    IF MID$(FileName$, ct%, 1) = "." THEN EXIT FORă  NEXTă  FixFileName$ = UCASE$(LEFT$(FileName$, ct% - 1) + "." + Ext$)ăEND FUNCTIONăăSUB PlayFLI (FileName$)ă  DIM FLI AS FLIHEADERăă  FileHandle% = FREEFILEăă  OPEN FileName$ FOR BINARY AS FileHandle%ă    GET FileHandle%, , FLIăă    IF FLI.ID <> FLIID THENă      CLOSE FileHandle%ă      PRINT "ERROR: "; FileName$; " isn't a true FLI!?"ă      EXIT SUBă    END IFăă    IF FLI.across <> 320 AND FLI.down <> 200 THENă      CLOSE FileHandle%ă      PRINT "ERROR: FLI does not conform to 320x200 dimensions!?"ă      EXIT SUBă    END IFăă    IF FLI.PelDepth <> 8 THENă      CLOSE FileHandle%ă      PRINT "ERROR: FLI isn't 256 colors!?"ă      EXIT SUBă    END IFăă    SCREEN 13ă    FOR ct% = 1 TO FLI.NumFramesă      DoFrame FileHandle%ă    NEXTăă  CLOSE FileHandle%ăEND SUBăăSUB ReadMLXDataă  DEF SEG = VARSEG(memcpy%(0))ă  FOR ct% = 0 TO 35ă    READ byte%ă    POKE ct%, byte%ă  NEXTăă  DEF SEG = VARSEG(memset%(0))ă  FOR ct% = 0 TO 28ă    READ byte%ă    POKE ct%, byte%ă  NEXTăEND SUBăAngelo Ken Pesce               WAVING FLAG                    us0082@uniserv.uniplan.it      06-30-97 (18:51)       PB                     209  3850     WAVEFLAG.BAS' INIT -----------------------------------------------------------------*-*----ă$OPTIMIZE SPEEDă' 386 is REQUIRED...ă$CPU 80386ă$LIB ALL OFFă$ERROR ALL OFFă$FLOAT NPXă$DIM ARRAYă' ----------------------------------------------------------------------*-*----ăăă' --------------------------------------------------------*-*--ă' WAVETEST By Angelo KEN Pesce 1997 ken@uniserv.uniplan.ită' With FakeDoubleSmoothingă' --------------------------------------------------------*-*--ăăă' --------------------------------------------------------*-*--ă DEFINT a-zăă' INIT MODE 13hă! mov ax,&h13ă! int &h10ăă' DIMENSION RADIANS VARSăDIM rr as DOUBLEăă' WAVE LENGTH FACTOR1 *********ă %factor1 = 10ă' FACTOR2ă addval = 38ă' *****************************ăă' INIT SIN LOOKUP TABLEădim sint(3600) as integerăfor i=0 to 3600ăsint(i)=%factor1*sin(rr)ăincr rr,(3.14159*2)/3600ănextăă' INIT BUFFERă DIM bf(32000) as INTEGERă DIM segm as WORDă segm = varseg(bf(0))ăă' INIT PALETTEăfor i=0 to 63ăsetpal i,i,0,0ănextăfor i=0 to 63ăsetpal i+64,i,i,iănextăfor i=0 to 63ăsetpal i+128,0,i,0ănextă%coladd=63-(%factor1*2)ăă' --------------------------------------------------------*-*--ăăă DOăă' DO WAVE ------------------------------------------------*-*--ăă' RESET Gă g = ggăăFOR y = 20 to 180 step 2ă' INIT X1 : RESET G1ă x1 = sint(g) : g1 = ggăăFOR x = 35 to 277 step 2ă' INCR G1ă IF g1 > 3600 THEN g1 = 0 ELSE incr g1, addvală' INIT Y1ă y1 = sint(g1)ăă' PUTPIXELă select case xă  case <116:col=(x1+y1)+%coladd:'REDă  case <197:col=(x1+y1)+(%coladd+64):'WHITEă  case else:col=(x1+y1)+(%coladd+128):'GREENă end selectăăx2= x + x1ăy2= y + y1ăă !Mov     es, segmă !Mov     di, y2ă' SHL DI,8ă !Dw      &hE7C1ă !Db      8ă !Mov     bx, y2ă' SHL BX,6ă !Dw      &hE3C1ă !Db      6ă !Add     di, x2ă !Add     di, bxă !Mov     dl, colă !Mov     es:[di], dlă !Sub     dl,10ă !Mov     dh,dlă !Mov     es:[di-1],dlă !Mov     es:[di+319],dxă !Mov     es:[di-321],dxăăNEXTăă' INCR GăIF g > 3600 THEN g = 0 ELSE incr g, addvalăNEXTăă' --------------------------------------------------------*-*--ăă' DOUBLESMOOTH BUFFER (remove this routine to gain more speed)ă! mov es,segmă! xor di,diă! mov cx,&hfa00-320ă! xor bx,bxăjmp1:ă! mov bl,byte ptr es:[di-1]ă! mov dx,bxă! mov bl,byte ptr es:[di+1]ă! add dx,bxă! mov bl,byte ptr es:[di+320]ă! add dx,bxă! mov bl,byte ptr es:[di]ă! mov ax,dxă! add ax,bxă' SHR AX,2ă! dw &he8c1ă! db 2ă! jz jmp2ă! dec alăjmp2:ă! add ax,dxă' SHR AX,2ă! dw &he8c1ă! db 2ă! jz jmp3ă! dec alăjmp3:ă! stosbă! dec cxă! jnz jmp1ăăă' COPY BUFFER TO SCREENă !Push    dsă !Push    siă !Mov     ds, segmă !Mov     si, 0ă !Mov     di, 0ă !Mov     ax, &ha000ă !Mov     es,axă !Mov     cx, &hfa00ă !Shr     cx, 1ă !Shr     cx, 1ă' rep movsdă !Db      &hF3ă !Db      &h66ă !Db      &hA5ă !Pop     siă !Pop     dsăă' CLEAR BUFFER (I HAVE TO WRITE A FILLMEM4 ROUTINE)ă !Mov     es, segmă !Xor     di, diă !Mov     cx, &hfa00ă !Shr     cx, 1ă !Xor     ax,axă !Rep     stoswăasmjmp10:ă !Test    cx, cxă !Je      asmjmp9ă !Jmp     asmjmp10ăasmjmp9:ăă' INCR GGă IF gg > 3600 THEN gg = 0 ELSE incr gg, addvalăă' WAIT VRT (Vertical ReTrace, remove this routine for more speed)ăasmjmp14:ă !Mov     dx, &h3DAăasmjmp12:ă !In      al, dxă !Test    al, 8ă !Jnz     asmjmp12ăasmjmp13:ă !In      al, dxă !Test    al, 8ă !Jz      asmjmp13ăăăLOOP UNTIL len(inkey$)ăăă' SUBROUTINEZ *******************************ăăSUB setpal (BYVAL slot as INTEGER, BYVAL red as INTEGER,_ă         BYVAL green as INTEGER, BYVAL blue as INTEGER)ă' Sets palette color number slotă' Max red:63 Max blue:63 Max green:63 Max Slot:255ăă out &h3C8, slotă out &h3C9, redă out &h3C9, greenă out &h3C9, blueăEND SUBăAndrew K. Dart                 CLOTH TEXTURE BACKGROUND       FidoNet QUIK_BAS Echo          06-26-97 (19:37)       QB, QBasic, PDS        32   910      CURTAIN.BAS 'Curtain.bas    02/25/1997  by Andrew K. Dart  --= PUBLIC DOMAIN =--ă'Background for full-screen messageăSCREEN 12ăRANDOMIZE TIMERăLINE (0,0)-(640,480),15,BF ' This line is optionalăFOR x=1 TO 640ă   Fox = x+SIN(x/9)*8-COS(x/5)*5ă   Golf = x+SIN(x/6)*7+SIN(x/11)*9ă   LINE (Fox,0)-(Golf,480),6+x MOD 2,,INP(64) IMP NOT INP(64)ăNEXT xăFOR y=1 TO 480 STEP 3ă   Able = y+SIN(y/3)*18ă   Baker = y+SIN(y/2)*28ă   LINE (0,Able)-(640,Baker),0,,INP(64) AND INP(64)ăNEXT yă'Optional second layer of horizontal lines:ăFOR y=1 TO 480 STEP 7ă   Charlie = y+SIN(y/7)*4ă   Dog = y+SIN((y+1)/5)*5ă   LINE (0,Charlie)-(640,Dog),6,,INT(RND*32765)*SGN(RND-.5)ăNEXT yăa$ = "  Does this look like cloth or wood?  "ăVPosition=15ăLOCATE VPosition, 40-LEN(a$)\2ăPRINT SPACE$(LEN(a$));ăLOCATE VPosition+1,40-LEN(a$)\2ăCOLOR 14ăPRINT a$;ăLOCATE VPosition+2,40-LEN(a$)\2ăPRINT SPACE$(LEN(a$));ăSLEEPăENDăBrian Bacon                    SCREEN 13 BOX DRAWER           kyberteknik@geocities.com      07-03-97 (17:48)       QB, QBasic, PDS        65   2962     BOX13.BAS   'BOX13.BAS  - by Brian Baconă'Box drawing routine for screen mode 13 (actually any graphics modeă'will work.. just make sure to use legal x, y, and color values)ă'ă'note:  If you dont want to use both the outside border colors,ă'just set it to the same as the back ground color.ă'ă'it is easy to add your own box styles in the Box13 sub..ă'just add another CASE statement...ă'ăDECLARE SUB Box13 (x1, y1, x2, y2, style, inside, outside1, outside2)ăSCREEN 13ăăLINE (0, 0)-(319, 199), 9, BFăăBox13 70, 40, 190, 125, 2, 0, 5, 13ăBox13 5, 40, 65, 120, 1, 0, 7, 15ăBox13 195, 40, 255, 120, 1, 0, 7, 15ăBox13 25, 130, 235, 175, 1, 0, 7, 15ăSLEEPăăSUB Box13 (x1, y1, x2, y2, style, inside, outside1, outside2)ă    SELECT CASE styleă           CASE 1ă                LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), outside1, Bă                LINE (x1 + 1, y1)-(x2 - 1, y1), outside2ă                LINE (x1 + 1, y2)-(x2 - 1, y2), outside2ă                LINE (x1, y1 + 1)-(x1, y2 - 1), outside2ă                LINE (x2, y1 + 1)-(x2, y2 - 1), outside2ă                LINE (x1 + 2, y1 + 2)-(x2 - 2, y2 - 2), inside, BFă                PSET (x1 + 1, y1 + 1), outside2: PSET (x1 + 1, y2 - 1), outside2ă                PSET (x2 - 1, y1 + 1), outside2: PSET (x2 - 1, y2 - 1), outside2ă           CASE 2ă                LINE (x1, y1)-(x2, y2), inside, BFă                LINE (x1, y1)-(x2, y2), outside2, Bă                LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), outside1, Bă           CASE 3ă                LINE (x1, y1)-(x2, y2), inside, BFă                LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), outside2, Bă                LINE (x1 + 3, y1 + 3)-(x2 - 3, y2 - 3), outside1, Bă           CASE 4ă                LINE (x1, y1)-(x2, y2), inside, BFă                LINE (x1, y1)-(x1 + 3, y1 + 3), outside1, Bă                LINE (x1 + 3, y1 + 3)-(x2 - 3, y2 - 3), outside1, Bă                LINE (x1, y2)-(x1 + 3, y2 - 3), outside1, Bă                LINE (x2, y1)-(x2 - 3, y1 + 3), outside1, Bă                LINE (x2 - 3, y2 - 3)-(x2, y2), outside1, Bă                PSET (x1 + 4, y1 + 4), outside2ă                PSET (x1 + 4, y2 - 4), outside2ă                PSET (x2 - 4, y1 + 4), outside2ă                PSET (x2 - 4, y2 - 4), outside2ă                LINE (x1, y1 + 5)-(x1 + 1, y2 - 5), outside2, BFă                PSET (x1 + 2, y1 + 5), outside2ă                PSET (x1 + 2, y2 - 5), outside2ă                LINE (x1 + 5, y1)-(x2 - 5, y1 + 1), outside2, BFă                PSET (x1 + 5, y1 + 2), outside2ă                PSET (x2 - 5, y1 + 2), outside2ă                LINE (x2 - 1, y1 + 5)-(x2, y2 - 5), outside2, BFă                PSET (x2 - 2, y1 + 5), outside2ă                PSET (x2 - 2, y2 - 5), outside2ă                LINE (x1 + 5, y2)-(x2 - 5, y2 - 1), outside2, BFă                PSET (x1 + 5, y2 - 2), outside2ă                PSET (x2 - 5, y2 - 2), outside2ă    END SELECTăEND SUBăBrian Mahocker                 REALLY SIMPLE STARFIELD        Kain121182@aol.com             07-03-97 (12:01)       QB, QBasic, PDS        27   683      STARS.BAS   SCREEN 13: RANDOMIZE TIMERă'320 LR - 200 UDăDEFINT A-ZăLET NOS = 100ăDIM x(NOS), y(NOS), c(NOS)ăFOR GetInfo = 1 TO NOSă   LET x(GetInfo) = INT(RND * 320) + 1ă   LET y(GetInfo) = INT(RND * 200) + 1ă   LET ctemp = INT(RND * 3) + 1ă   IF ctemp = 1 THEN LET c(GetInfo) = 15ă   IF ctemp = 2 THEN LET c(GetInfo) = 7ă   IF ctemp = 3 THEN LET c(GetInfo) = 8ăNEXT GetInfoăFOR P1st = 1 TO NOSă  PSET (x(P1st), y(P1st)), c(P1st)ăNEXT P1stăDOă   FOR MS = 1 TO NOSă      PSET (x(MS), y(MS)), 0ă      LET x(MS) = x(MS) + 1ă      IF x(MS) = 320 THENă         LET x(MS) = 1ă         LET y(MS) = INT(RND * 200)ă      END IFă      PSET (x(MS), y(MS)), c(MS)ă   NEXT MSăLOOPăTom Watson                     LOAD/EDIT RESIZABLE FONTS      awatson@wctc.net               07-04-97 (09:26)       QB, QBasic, PDS        146  9662     FONTPACK.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FONTPACK.ZIP",4^6:Z&=6979:?STRING$(50,177);ăU"%up()%9%%%R-%;t0]GYw:m>d+7%%d:%%%1%%%%kt%syji%nySgIfxt';<BS]=5wăU"G1rx0HFCq#(&]TIr;En4-g8UP*>t?'6t$_1L1V#?Ggs(wvf+o+R>GaK[hg&8F.BăU"S\b)-J0,hi#R=dVnI&>TpkVX42Ljp.-wNb,jtNY)Cd6RT+YRp8MruYGO?a9B;_/ăU"i%epPGfDUj&^u.5ft?ux;N6JTx981RGS11(0;IT%cKEH4YI$OB+bpEnx5]=uofQăU"OSN-cjmF2s8C\0Hy)54IdToYY\ie_s7b5tRWN]Vw0a?O1Sd%'(.JOB\?>+&boDHăU"_lzxb_n_cf:r;T&r,,(nOkLI\M4t-z*P+,c$RN\SAu3D,YYZ8z7MPBkas7r<P_]ăU"(;Fu8fb3jS9frtk%[=%/B/H[acS(QP,DN8L'S,:1r;I>Ix%4m#XD,O8-E71G]Q%ăU"uUshXdQ[y+Euu/([k;O57;wj:pCa%XE,hqNpzVVgRHHLTdsfrH?If28^U$HTPB<ăU"\'\2lu3A7]+Kgii^#YZ(BYD3'c8]z&BSdew0ks:B:7_bNNIQxJ3]paETH=/=D_iăU"oN;<4IfSHE_69?d9I>WXo4&OF^il_V;3B=RLu&2L=Q]XKnS?;O2ENFsYb'I;^USăU"W0/KWnwYm'FUNGWBYJ.K,\gU*r)Ki\9q\I_&gxY\30o-h#LVUu=&(Qv7FDl^6\#ăU"BcXb_ZW6Prcl(hGI,CJYhCq)G_'c+#z?PWUnkRbeXvrWs:_jrIMP_C=a,.Tmw7măU">4p\HX#MC?4Aa)aE0xeHF6:Id,=ZFDeYy3=*.)Q,</_wk##plNjwPP>J>Jl#XYqăU"kV2Nj?LB4_6/:y5p8GW92\'Bchj(ThuPGCGFS+UB'H'6$Tp<57NU0bKMmItJMaHăU"C:c*tz$g<lx[NE$Ks;3vfBnQ_UT($Y6ou.oPGI'2mCYIcH7#Pv/Wmgbqpf*mPD,ăU"\EUk/%b;-yu(^1\g_1;iIV\Q/k+/OX4=^Tfngr)ErE6<&L=]U]R22L70[q>ZIQAăU"'UWWSoHm8Sd.<uu[uikgUDLJtW22WIG^7x]=6G-Uou%E;MTiaeo$RmTA<XfGJ-8ăU"_tko(H/#3,/e3B?(:5_^+b^2)t$yv]\S:sCchK7lVD-X:CK5?Qwr8CQf12\bkg%ăU"D->,P2(7chH]$r'NUG)eIaVT_:n]o-GTo5HD?_X'Iory(jUPU'e<kQ:-3T.UCelăU"4=Gk?9hUf9B<$g_Cl7.M#Z,jpM_9l4^Lmuqu;0chlUlYdmRqnkc8T/mZ7b,<P6,ăU"&SzPxZ<V<\9EAboEPZ(SQg_F<:lE3'4#g\L0Z+VeC_qx>jgauhHIOvo6$$z'2_tăU"3&&d7Gsk;h5;8]K.,1B00nPtgob\rQ_tsAEk\:n4Ap(u>:Z)8cjnF,Oa4g,e(DRăU"v/&\0P9-(QNT2E<UX6RHRl/*Pc6wH>xYFxHZY[Ffml;T(&bW=?Hm019rOq9i(j7ăU".$c=It+x1wS>[=3Mmtw-,2=,,<bXvG/,,2s):-R<U=IsoR*K'sV_h3[4i8G12=8ăU"ZVBn>%N=W)j_X6%Ityl)qIs1auBWsA9n)bNMMon:7(B%vtXZ+*pM:d;tr.O<jEBăU"aoxH06Pn;Os%d%amTfsL#/>pd$bpjwRQ0L]+ILcelHB^D,7a:$nvQIM:SoiDmQgăU"e2Lhw0#9U6LXl2P29(IAI[R]b9WR\,AkIBEBM>OE>&mWyX+5_6kf/ZFsQ#ynJJ1ăU"t;qqoNyB^cwfOBK-<g;HUiS$eTOhCL7'Sj3%qx73f(-_bYIFZm[Pj7rm6pD(lN;ăU"g.p7y)RA2wYPAmqaASO6&e<OZ7X7l6%2(dgtB2j:pOoE6#Wav(>Jr]eTROVxi>;ăU"]f=_+(+sh6mna9&kTeYHl[Q?\o^eB-L\f4^SeM3u:Fj*)IeK6h;c0_Rlf[SeB;GăU";9JIeH*P)z/SlCJsY/>5bLGU6G783aU\Ejz<[:w#K#t+s7:r[\DOf')q#\*8)X3ăU"2'R4C#=,Z.2ke$tUPY>c.m[$7W#iiu,]]0<L,ftUL2-EJ>J[mF40b4gzFthmB3^ăU"NHLljGXYQNC%RSZ6(],$72[NKZ8E.3t7DjSjy:Tc<M_$K'K^*KoIoILb:Qf4a96ăU"d&*K0rnI%nV.3m,ZVNII<DvX;PEdt3t>a,+<CyIR)=MXPYuxBT2DGUM&o&yqNN7ăU"O^^rbygi^wNw;*QBbPnM9K48]P8+=O8)i_xGkj25qG.;ABRH&QNOtJ]50.FR_Z*ăU">>^d\6iw,&jCH8Rn?RuEm.RfKa/KWx<7e;;FnDn83DFLN?%Y7MG>0D<q7t)x%4uăU"p(%)9%%[%-%G,t]G.Z)_eh[(%%N%-%%1%%%%k%tsyq%tfiS[gfx6gz<>[Rk5w=QăU"Bx0]Rh_t1#leoz)Zim)DeZJn=f*(r6tFPJd]]E3n-9qp)lhZ[02i9OCz\--ohalăU"e?,l?iCqRMPP$xv<+r=]AfV-W85.:yQ.Y]zQDf,4ESZWp/QHX:h?V(.,HHRwI;?ăU"&_p+=>5,HJPuGSO5^P<'mip<gCPjcOY#=HPA$0fKoz'#X=3._)mp.^qdopF,TLgăU"JvOLcV)yck_-(/qF5ZKcOPQf*e4ya^&cEI8460w'cb+GNM[+4yEK_p\)+_:QP[jăU"JRZx\6GVBDmwg<Wdb/12ZZpo,Ma_v;Ll,YY9F4)xmRlnsn)%AlDkY^^//G1SM3^ăU"zl'm?u:b5ig3tj.Jv8v(btoGKeS,;0g:IQsfB8/_hapO[nne+M#hfYQ1m)i%p%)ăU"PQitgjRH;+o9Oa#H;/*NAPg;2Y3oweI8Lf<-QOkiZ7O&R7I_nf3JJw(pT^7CQ'NăU"z0Jh4P/T,Y#\gaiId,'&gc#Q<2<\r<g%LoR2eYX's6nUEh:/=]-&U&W)]$pa/QlăU"to$sGWGRwf+T',$WTY=<7gtTWC:C&luN/Qegt&TgO%vLQ]j_RgIJP(179<3yGJ=ăU"DYhzZC6Esnd5OVioBVlH]uW]VG:bV,+pgsVnB-b63)ug8I]njz$1RkMo>VImv?aăU"#xlHj[^>sm4#&qrrto88qWGOh9wk5K[uWHPjLP<.*x'xowE2?,l(XqH[+QsY<j'ăU"<KjsbGdo#hH&<pi8US^xC([p?k8,gH-tq+8964)X#fq7U?4Y8pfoRVf%oD7g+KtăU"4lB+50fgsHLUF(qUpqT$0(:l,xuT);]]x8kyWfOYxm_Ng^sQJ.c1;rP(pq4:.DrăU"7$Q-g6B6uBA)qX=X6[Ol,ODhDfJM)il5ZKEIE9$BAW1>#JN9^lP>:s:uo6O#bR7ăU"p)6S86M[D3y8/\gVIZ3iRSRVs=k8&+1^=+[N-P&#]$Y5Vkj'$.zm%QgVs//aYjaăU"rAp-*%7W]TG([k*oAcOFjok$TD$.fp-2jh7A.l?<=Fu1[3dtYD[1HqR.=*G];CtăU"QU5iDS4hSu,ER+4il1K[c5F1M=uFluPspid'%V(4jYnMN^9eLU'Q'X=bHIsLW.zăU"xpDsfBUu\oZ%p0IK&x'5%,,d*u&uP>$BRckj=8q/)Pf)uMcA6cq_&Ns8g$[s3\năU";b<v2%up()%9%%%I-%FTT.G-e8)UC)#%%/I%%%.%%%%kz.sp(S[ksyfhi*=\[U1ăU"jxC0C4,nQ]dXcUEE/5DramL$<N=/O]CG*dW9Dc+[Tr?lrjJl\l2uNKZ3aInKh3AăU"anKh)3anK2h3aneMD(wT6euN<kI8s>uusCZTpBGLNEcDrR;hAAABueudn%FYa%'ăU"bph%6;$pz[$t>$1Or]B9#052Dym;q>e7W$j6[>y(6LeexzoLlH(p)BQl8<A)etfăU"+pZejvT97u(iF^.)_8\yjzOp8I%/FH/qr#TF0-aS(^.s+#YJRC[TzGMC_2ftu%]ăU"jgt>E3Tq;8-Rbr_iX_ncNeQzoM*b[x3Zl1vM6bUd6<C[F6*7[nXah61J<1(PdezăU"4;6AtH4Z[R]+^meW8GfRk5<th>4>K#0f#fy2Ml/Omq\(rYxdsyx5HfiKjV):X]:ăU"OPNjG3^qekxjYfiBga<sjCCSc*,\OsI(jD')WqC4A\:ySP>fGB7_DIRR7b[Y<iSăU"eA>lcT4k->=DO[&=K7uIv0lYNQ?x9Vr_SeNp6#Jxz_jX=LTKh>Jg^yorPFAtH9?ăU"tIlWbxm.Zb1p<bXcbGYr1c#'Wpg$XZn.G,UE#PP7^zODr;SYRaUBmh6UQSSJCKrăU"IStyIHq3B3lHrX.:,>-OBk5DTsk<QS,9QsP1=to<8ynK+>ODS_X#vly^WD[?iW$ăU"BSrvFfwK2cYlcWC+FDwi;*Ho'b;:_U9YqJKJS-rGeQl(sxg2bSAWO0t:F_3B)<jăU"*+*aD*[jEeL$.J4gH_V;uJYmF<]$rb7seLl<M4R%nK;b[QF<90Bn\AlhcUD9d><ăU"vaNL>L50pF\>8W?&Uz(HB<QggM0#L=tB35#PH*VX#uq4oDYdwI-Q>s4NhkUdGK1ăU"^#k4MVkQ])o76gFZrRA57ZUh'-4Hc)vM$[Uju8<P35[]aKL41vS8m<vqT)p?[0băU"5kqqdsnmHk?/%,)X%MQq*v?vCc7M>HiM>9ZVxLJL.d\(g2*&EPG3CW4eBlRjL0NăU"Tki+&r.uoe%qOW2)nl8h30EKNGF;&Or3J/MECr%%Ber3FB4$s[W?Lu2:of,hRJUăU"^U3P9hAj+9+UH'H;Cpo8&d5eJ%k*'=#FUHW]3$5Z4v)dNb\[ni0q964G=\MOND'ăU"OKC_n&l<1r0oXiS2NxaKOji'\U32ZK-%s;J]?8ch&E[+*MB7rG^6_RDOgl4knEEăU"Jw='l;>_^zB?w5R/J7WY].:t*GhKfRtiO4L*?tk6N<KmpkFT8Cb%$eY2<tNhoP0ăU"QmUczF:<l^?6v1Wd,-tEHnine5\%YWPCLj6?1;F^V)D\H:\DGQi5df?Q(a+GVw4ăU"$$9t$pj:r=(Vd\^K8jKbmeO<btGpSj5LlwNNVu<mXRlR'WTtB6hT[k#z%EOAu&făU"gjdln*M#iM'gOV->f#P$97<?*%Ty)\x>WktrNIrupT.=j$]VpLzt#R2m=:J?ad?ăU"8I3M2btst%vHVN5ULq7VCq]dDTsU22c9^XdI\bqWB3\f-I\bqWB(IbqW0BIbqFWăU"BIb7qWBI\bqWB(IbqW0BIbqFWBIb7qWBInbqkq8t<BI\bqWB(IbqW0BIbqFWBIbăU"7qWBIbbuX]'8up(%)9%%%%-%KG8WGvs*x>D#(%%#%-%%/%%%%w%jfir#jSy'gyLăU"%X,>T[5nMTIx]ZC+-L*;2ET):F*/&IOV4YVe1<:O6u?MB_qJ$O^[tqvn4%HJj3tăU"[6B]WVFXLWpRw1K6c0GnF40XogCYdi$.>wb'(#hFGOK=oi>X7>Ht_t(gWlh8?y'ăU"C8o0w57y0JhAzs-Rdt&Kh4euOU(7N*mie4+2Bvb>Lus^lv?wD]rd7KO+^;EdvO1ăU"swQ]K6(&qO^6,p(V=>92%jt'h.\%5Nj^[%vAteUf>cG%)K-lgYV2ELAA?pu>)6ZăU"rt1NR1ibhZ6&Z;JPjV]$7DIJN->WUd?_atAPMC'q8We(w_>[jCJfg,]W%&nu+wxăU",M:K1X'dOWk/M#KiP(Lxik'^+EBm5B-7SmIA?.:8yQhmRl4)CmqYiW4AS2*eUwHăU"PrEh8&jc*fsMel%jBf;:0fS/F^X+9'LY=uDAMnk#hK_2TO=Jqlp$%Squi<+2H=yăU"s-bLZYEBl]Fq$^nbJ]oq0XU3qA1q8d8L3d&pt-o>tVzznEcpjhGT&\xg#m>,7J7ăU"P>8CBV36=9B\'oCksuijW=Jh5?Flh'']gswt)CX;,iCf[ysNN=9;x[gi?fdbcz/ăU"Q,1->MN+<FLD%1%L5l9#aG]xedw67ZYq(x=>V?T?Ohw?#ZL1qPa*78Xc20f>)q3ăU"YRT_3?&Nveq>.zYiJOAY/mc)]IZ0]h/&AnH_a%CVrsZ*og,531>s3$/o'JeugjuăU"X1<MCXX/_=/:pGaT^vj/2El'cr9u8[*IOF9?z#oO**:S.HPWff^nuhnXhF_-a1eăU"T)G2PWrVfkFW/dKvs1vS7O0q3K&q0cmV)DR_0Mwhac]HKGYU0TlP'B(mj4'i1JWăU"31Ju4VC.W/w;cJEC$4<AV^s5j4w[*M(Zq1hP/z7]Emc8k)v5^qlhib<9h[uT^-;ăU"oo/AuUPYfZ2J4(,15HL^a-2TB<MG7zDv$;?d?M14i1bIH-EG,Iks>'AWK$2_&RLăU":q\-kGZ#4eQa]&Jj;MH\C9k+M1,^AR?B&SassFyX\omE+^1Dq(mx9gFqIjoI36uăU"CV0W)Qq6bUUsifqx+1]o.LvED%p\S>z+Er>8b+:#lKT=5T#aj>cO45_N)'rW7oFăU"++=^CR3cGHr\?yysWADl+$0$hRk'gQ#sGB+1io41##VIaJO^Gmaj:epH.Zv,<#uăU"#:4N]C_Xo7;%bmT&:&O5q)E>moVutia:0EiwGHW0QfvmtD>$G5VO2ePPhX,\h.năU"A-#?nkj/4V=/Lx%%up()%9%%%#-%1y'*Gme&1wS+#%%/J%%%/%.%%&n%onyx%SkăU"syNfi*a'T]1j0xxdbfE7OnE(=K<%.]<)+J2$ZWwPLEq/Y;>SjI]NrUNxscs)t61ăU"+Io,DIo,IJo,Io1,Io,DIo,ISo,s>Oetv-XdMSN5wnNAY-hxfKU>KrQ]Xk*u-WFăU"hu=xbU<xofhcxweTk6wMxf;<-bbw8$Z+1,HWRWmEb41s/8G8^1z;F8_Z)P>Ne8zăU"eW-_^JxJa(3i71h471bT6:[sBC7;cetk<g%CvkuMW;*/<FLQRcwr,bX0PP%XkwjăU"uW..q03jGou37<U0Gu(i$%)XLM]9wdKjMe02#zrVm<AAprR%Z]%</^pCg'#r^??ăU",Suc_$4hcc'c+4*ho5.jmf]<OnOnkTa/1y\DSf^y7kgsM*9^C4dPmXL9m-SYJMhăU"l0d?T9M_%L3^K,f&3#<VG*+wo/FT5)UZHPpXOrw88^1OPs4W*9oi3bY9vxE=FNQăU"F0kkWOMy?7p2>LBrC7ig;f=vR0E7%;a5nw<Vnba-/Z49Ye+FaOA)3z8?O0uP%[păU"]MHlqG4B\*78qjK0qI1\onp/#4L>,Z[%ssfw#FUCkY'l4'5;.8y?aN2PK,3'rD'ăU"N2hwBFz<FKS=9%33/h09eB0VDI?3x+-nouUKfeZydpBWMW4%0=hR34bZDH5e9o5ăU"+&$R=#N0P?l#Mvla;>yD\zT$03dNJRrvd^aV/;3gGjoK*[HFnL6%;m&l(10B7oJăU"l6AtK?R;OWoDK;eQgetet-2Wj>V%5*2%wkpKKVf-<lxn.ke*UHapJ[O-FjTZG5.ăU"[YiPQ8W_w.kpLPKE=b?Rfha'GwPt's*eJ#k]\MQDcjOQGB=-2/*<dKhMpyEoFh?ăU".4J.QEWZ]?rfhj4>E,bK)[%]rGjgPAxBDGQRAK+o.'Nk=nE-[H<V.XXU]D1nm2FăU"%^uj\J)9,U[Z5?&a*6+[;A]$E-5VF.<T9s:l3(<&=7w)5$oX;FCP+<n1B[Il>iJăU"dUm_>MVirX%k2)qwU,<S>f&A'vzC6bQ*=G5TX'=\*YG:=e.l:B<n$9zD7b=aR)HăU"]4+nUu>XJj?5-NbJ^-VVlS7BD>L%p$Kt4RnhO4iIWoVs:dWCLdc3.0jK5p(k\)zăU",26-.&9;G-smxy42&*V[l4%S0N>cT]N2B>I0uFk*mtjZ(m(URllb4'\+*MM]r8:ăU"?)d(C4U=&]%3B3HZmOsyGN]#_oa?gMV-HNF?erC5yy;+0(bK54jp#3jW\'j#om6ăU"190V$#7[P60u/<.j2LwRl^GFj9%kM>QZ4e?*kS(#[wbqK+uNQLQ8G+P]$,i^n$CăU"U0F]sSd/KPBgh:]UvElsFr=RCTAt90)q?&5<-n9m\baKll\6==^r4PW2sGMKlxYăU"i&]JM;q_a=:=DOl*VVDck:)1P(6-*g*[sQI>;WB5kgP>hWqjMnK,;3YAntmaOw2ăU">_K:];l5(aKVE?S=2tR2f#3R6-G-\:7E(UkHhoES+hvLkQkv]y.K-st4^OK8f'jăU"H[.:M[b9%VkVYQ?hJsMx-e9oP)Gxm5mHATQ;7JAr?=19>lfjjx6\Op<^BT2zTULăU"$/B[Hf(<iEr'P.1]UbiXIcsTv?lL*G%Rbma]%SAs<\FfO[m%XX^WO2ohCsd'sw/ăU"Os$VBSXcP(*dE/RGA%Zp4?2diMFOSa>_l]I([?Z(ea9o_7SV,UJkQta6\OQ[aqPăU"6Oiu_>;9/ksi(gCbwL)=$KSHUC*kq;.ItIS&(<<3R%lD*P3=BY3F)ZbVAlkES8\ăU"=+CC[u->nmf.XI-O%G#Ii1]o2A1\mN$(waw:R&+.e0mW5)2[=\t4q;jv'ZpSeF]ăU"R;Ikz0vi>=+^MCLmak)l(-Ke8Wg^4a]qt(<xE+/zR'b-ut?jT_^CcO2-ti[ZY1SăU"Bwy'r?FUf/\%_mF8[l8eYJ$/6Q8?hn8u4me+4me4]me4m)v-(b]I(bI7(bI(+bIăU"(b]I(bI7(bI(+bI(b]I(bI7(bI(+bI(b]I(bI7(bI(<vxPe+4me4]me4m7e4me+ăU"4me4]me4m7e4me+4me40meN-*s.up%&'9%%9%%%R-%;t0]GYw:m>d+7%%d:%%%1ăU"%%%%%%%%%&%%E%%%%%%%%%ktsy%jiny%Sgfx%up&'%9%9%%%%-%<Gt]Gs.)_e&hăU"(%%'N-%%%1%%%%%%%%%&%E%%%%:,%%%kt%syqt%fiSg%fxup%&'9%%9%%%I-%FTăU"T.G-e8)UC)#%%/I%%%.%%%%%%%%%&%%E%%%'Q/%%%kzsp&(Sks%yup&%'9%9%%%ăU"%-d%K8W^Gv*x->D(%(%#-%%%/%%%%%%%%%&%E[%%%B%4%%w%jfir#jSy'%yup&%ăU"'9%9%%%%-d%1y*#Gme1%wS+%.%/J%%%/%%%%%%%%%&%E[%%%5#8%%&%nony%xSkăU"s%yup*%+%%%%%*%*%%#&%%%7?%%%%%ăEND SUBăCLOSE:IF S=119AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMichael S. Halpin              WINDOWS-LIKE SCREEN            calvarygames@juno.com          07-05-97 (19:14)       QB, QBasic, PDS, PB    637  23725    WINDOWS.BAS '+----------------------------------------------------------------------------------+ă'| Windows Basic Source Code (c) For Microsoft Quick Basic, QBasic, and Power Basic |ă'|      Copyright 1997-98                                                           |ă'|                                                                                  |ă'| Author:  Michael S. Halpin                                                       |ă'| Date:  7-5-1997                                                                  |ă'| Created by:  Calvary Games                                                       |ă'|                                                                                  |ă'| I Michael S. Halpin do here by release this source code to public domain.        |ă'| This code can be included in any commercial or noncommercial programs as long    |ă'| as proper credit is given to the author and Calvary Games.                       |ă'+----------------------------------------------------------------------------------+ăăDECLARE SUB MINButton31 (X, Y, ButStat)ăDECLARE SUB MAXButton31 (X, Y, ButStat)ăDECLARE SUB MAXEDButton31 (X, Y, ButStat)ăDECLARE SUB Dash31 (X, Y, DashStat)ăDECLARE SUB MINButton95 (X, Y, ButStat)ăDECLARE SUB MAXButton95 (X, Y, ButStat)ăDECLARE SUB MAXEDButton95 (X, Y, ButStat)ăDECLARE SUB Close95 (X, Y, ButStat)ăDECLARE SUB CommandButton (X1, Y1, X2, Y2, ButStat)ăDECLARE SUB Frame (X1, Y1, X2, Y2)ăDECLARE SUB Form31 (X1, Y1, X2, Y2, FormStat)ăDECLARE SUB Form95 (X1, Y1, X2, Y2, FormStat)ăDECLARE SUB Pause ()ăăSCREEN 12ăăForm95 10, 10, 630, 470, 1ăClose95 607, 16, 0ăMAXButton95 587, 16, 0ăMINButton95 567, 16, 0ăMAXEDButton95 547, 16, 0ăMAXButton31 527, 16, 0ăMINButton31 507, 16, 0ăDash31 15, 16, 0ăăSUB Close95 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 4, Y + 4)-(X + 5, Y + 4), 0ă        LINE (X + 5, Y + 5)-(X + 6, Y + 5), 0ă        LINE (X + 6, Y + 6)-(X + 7, Y + 6), 0ă        LINE (X + 7, Y + 7)-(X + 8, Y + 7), 0ă        LINE (X + 8, Y + 8)-(X + 9, Y + 8), 0ă        LINE (X + 9, Y + 9)-(X + 10, Y + 9), 0ă        LINE (X + 10, Y + 10)-(X + 11, Y + 10), 0ă        LINE (X + 10, Y + 4)-(X + 11, Y + 4), 0ă        LINE (X + 9, Y + 5)-(X + 10, Y + 5), 0ă        LINE (X + 8, Y + 6)-(X + 9, Y + 6), 0ă        LINE (X + 7, Y + 7)-(X + 8, Y + 7), 0ă        LINE (X + 6, Y + 8)-(X + 7, Y + 8), 0ă        LINE (X + 5, Y + 9)-(X + 6, Y + 9), 0ă        LINE (X + 4, Y + 10)-(X + 5, Y + 10), 0ăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 5, Y + 4)-(X + 6, Y + 4), 0ă        LINE (X + 6, Y + 5)-(X + 7, Y + 5), 0ă        LINE (X + 7, Y + 6)-(X + 8, Y + 6), 0ă        LINE (X + 8, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 9, Y + 8)-(X + 10, Y + 8), 0ă        LINE (X + 10, Y + 9)-(X + 11, Y + 9), 0ă        LINE (X + 11, Y + 10)-(X + 12, Y + 10), 0ă        LINE (X + 11, Y + 4)-(X + 12, Y + 4), 0ă        LINE (X + 10, Y + 5)-(X + 11, Y + 5), 0ă        LINE (X + 9, Y + 6)-(X + 10, Y + 6), 0ă        LINE (X + 8, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 7, Y + 8)-(X + 8, Y + 8), 0ă        LINE (X + 6, Y + 9)-(X + 7, Y + 9), 0ă        LINE (X + 5, Y + 10)-(X + 6, Y + 10), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 4, Y + 4)-(X + 5, Y + 4), 8ă        LINE (X + 5, Y + 5)-(X + 6, Y + 5), 8ă        LINE (X + 6, Y + 6)-(X + 7, Y + 6), 8ă        LINE (X + 7, Y + 7)-(X + 8, Y + 7), 8ă        LINE (X + 8, Y + 8)-(X + 9, Y + 8), 8ă        LINE (X + 9, Y + 9)-(X + 10, Y + 9), 8ă        LINE (X + 10, Y + 10)-(X + 11, Y + 10), 8ă        LINE (X + 10, Y + 4)-(X + 11, Y + 4), 8ă        LINE (X + 9, Y + 5)-(X + 10, Y + 5), 8ă        LINE (X + 8, Y + 6)-(X + 9, Y + 6), 8ă        LINE (X + 7, Y + 7)-(X + 8, Y + 7), 8ă        LINE (X + 6, Y + 8)-(X + 7, Y + 8), 8ă        LINE (X + 5, Y + 9)-(X + 6, Y + 9), 8ă        LINE (X + 4, Y + 10)-(X + 5, Y + 10), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 5, Y + 4)-(X + 6, Y + 4), 8ă        LINE (X + 6, Y + 5)-(X + 7, Y + 5), 8ă        LINE (X + 7, Y + 6)-(X + 8, Y + 6), 8ă        LINE (X + 8, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 9, Y + 8)-(X + 10, Y + 8), 8ă        LINE (X + 10, Y + 9)-(X + 11, Y + 9), 8ă        LINE (X + 11, Y + 10)-(X + 12, Y + 10), 8ă        LINE (X + 11, Y + 4)-(X + 12, Y + 4), 8ă        LINE (X + 10, Y + 5)-(X + 11, Y + 5), 8ă        LINE (X + 9, Y + 6)-(X + 10, Y + 6), 8ă        LINE (X + 8, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 7, Y + 8)-(X + 8, Y + 8), 8ă        LINE (X + 6, Y + 9)-(X + 7, Y + 9), 8ă        LINE (X + 5, Y + 10)-(X + 6, Y + 10), 8ăEND IFăăăEND SUBăăSUB CommandButton (X1, Y1, X2, Y2, ButStat)ăăIF ButStat = 0 THENă        LINE (X1 + 1, Y1)-(X2 - 1, Y1), 0ă        LINE (X1, Y1 + 1)-(X1, Y2 - 1), 0ă        LINE (X1 + 1, Y2)-(X2 - 1, Y2), 0ă        LINE (X2, Y1 + 1)-(X2, Y2 - 1), 0ă        LINE (X1 + 1, Y1 + 1)-(X2 - 2, Y1 + 1), 15ă        LINE (X1 + 1, Y1 + 2)-(X2 - 3, Y1 + 2), 15ă        LINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 15ă        LINE (X1 + 2, Y1 + 1)-(X1 + 2, Y2 - 2), 15ă        LINE (X1 + 2, Y2 - 1)-(X2 - 1, Y2 - 1), 8ă        LINE (X1 + 3, Y2 - 2)-(X2 - 1, Y2 - 2), 8ă        LINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 8ă        LINE (X2 - 2, Y1 + 2)-(X2 - 2, Y2 - 1), 8ă        LINE (X1 + 3, Y1 + 3)-(X2 - 3, Y2 - 3), 7, BFăELSEă        LINE (X1 + 1, Y1)-(X2 - 1, Y1), 0ă        LINE (X1, Y1 + 1)-(X1, Y2 - 1), 0ă        LINE (X1 + 1, Y2)-(X2 - 1, Y2), 0ă        LINE (X2, Y1 + 1)-(X2, Y2 - 1), 0ă        LINE (X1 + 1, Y1 + 1)-(X2 - 2, Y1 + 1), 8ă        LINE (X1 + 1, Y1 + 2)-(X2 - 3, Y1 + 2), 8ă        LINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 8ă        LINE (X1 + 2, Y1 + 1)-(X1 + 2, Y2 - 2), 8ă        LINE (X1 + 2, Y2 - 1)-(X2 - 1, Y2 - 1), 15ă        LINE (X1 + 3, Y2 - 2)-(X2 - 1, Y2 - 2), 15ă        LINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 15ă        LINE (X2 - 2, Y1 + 2)-(X2 - 2, Y2 - 1), 15ă        LINE (X1 + 3, Y1 + 3)-(X2 - 3, Y2 - 3), 7, BFăEND IFăăEND SUBăăSUB Dash31 (X, Y, DashStat)ăăIF DashStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 14), 7, BFă        LINE (X + 4, Y + 7)-(X + 13, Y + 9), 8, Bă        LINE (X + 3, Y + 6)-(X + 12, Y + 8), 0, Bă        LINE (X + 4, Y + 7)-(X + 11, Y + 7), 15ăELSEă        LINE (X, Y)-(X + 15, Y + 14), 7, BFă        LINE (X + 5, Y + 7)-(X + 12, Y + 9), 8, Bă        LINE (X + 4, Y + 6)-(X + 11, Y + 8), 0, Bă        LINE (X + 5, Y + 7)-(X + 10, Y + 7), 15ăEND IFăăEND SUBăăSUB Form31 (X1, Y1, X2, Y2, FormStat)ăăIF FormStat = 0 THENă        LINE (X1, Y1)-(X2, Y2), 0, Bă        LINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 17), 1, BFă        LINE (X1, Y1 + 18)-(X2, Y1 + 18), 0ă        LINE (X1 + 1, Y1 + 19)-(X2 - 1, Y2 - 1), 15, BFăEND IFăăIF FormStat = 1 THENă        LINE (X1, Y1)-(X2, Y2), 0, Bă        LINE (X1 + 1, Y1 + 1)-(X2 - 1, Y2 - 1), 7, Bă        LINE (X1 + 2, Y1 + 2)-(X2 - 2, Y2 - 2), 0, Bă        LINE (X1 + 3, Y1 + 3)-(X2 - 3, Y1 + 18), 1, BFă        LINE (X1 + 2, Y1 + 19)-(X2 - 2, Y1 + 19), 0ă        LINE (X1 + 3, Y1 + 20)-(X2 - 3, Y2 - 3), 15, BFă        LINE (X1 + 19, Y1)-(X1 + 19, Y1 + 2), 0ă        LINE (X1, Y1 + 19)-(X1 + 2, Y1 + 19), 0ă        LINE (X2 - 19, Y1)-(X2 - 19, Y1 + 2), 0ă        LINE (X2, Y1 + 19)-(X2 - 2, Y1 + 19), 0ă        LINE (X1 + 19, Y2)-(X1 + 19, Y2 - 2), 0ă        LINE (X1, Y2 - 19)-(X1 + 2, Y2 - 19), 0ă        LINE (X2 - 19, Y2)-(X2 - 19, Y2 - 2), 0ă        LINE (X2, Y2 - 19)-(X2 - 2, Y2 - 19), 0ăEND IFăăIF FormStat = 2 THENă        LINE (X1, Y1)-(X2, Y2), 0, Bă        LINE (X1 + 1, Y1 + 1)-(X2 - 1, Y2 - 1), 1, BFă        LINE (X1 + 5, Y1 + 5)-(X2 - 5, Y2 - 5), 15, BFăEND IFăăEND SUBăăSUB Form95 (X1, Y1, X2, Y2, FormStat)ăăIF FormStat = 0 THENă        LINE (X1, Y1)-(X2, Y2), 0, Bă        LINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 19), 1, BFă        LINE (X1, Y1 + 19)-(X2, Y1 + 19), 0ă        LINE (X1 + 1, Y1 + 20)-(X2 - 1, Y2 - 1), 15, BFăEND IFăăIF FormStat = 1 THENă        LINE (X1, Y1)-(X2, Y1), 7ă        LINE (X1, Y1 + 1)-(X2, Y1 + 1), 15ă        LINE (X1, Y1 + 2)-(X2, Y1 + 3), 7, Bă        LINE (X1, Y1)-(X1, Y2), 7ă        LINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2), 15ă        LINE (X1 + 2, Y1 + 2)-(X1 + 3, Y2), 7, Bă        LINE (X1, Y2)-(X2, Y2), 0ă        LINE (X1 + 1, Y2 - 1)-(X2, Y2 - 1), 8ă        LINE (X1 + 2, Y2 - 2)-(X2, Y2 - 3), 7, Bă        LINE (X2, Y1)-(X2, Y2), 0ă        LINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 8ă        LINE (X2 - 2, Y1 + 2)-(X2 - 3, Y2 - 2), 7, Bă        LINE (X1 + 4, Y1 + 4)-(X2 - 4, Y2 - 4), 15, BFă        LINE (X1 + 4, Y1 + 4)-(X2 - 4, Y1 + 22), 1, BFă        LINE (X1 + 4, Y1 + 23)-(X2 - 4, Y1 + 23), 7ăEND IFăăIF FormStat = 2 THENă        LINE (X1, Y1)-(X2, Y2), 0, Bă        LINE (X1 + 1, Y1 + 1)-(X2 - 1, Y2 - 1), 8, Bă        LINE (X1 + 2, Y1 + 2)-(X2 - 2, Y2 - 2), 7, Bă        LINE (X1 + 3, Y1 + 3)-(X2 - 3, Y2 - 3), 15, BFă        LINE (X1 + 4, Y1 + 4)-(X2 - 4, Y1 + 22), 1, BFă        LINE (X1 + 2, Y1 + 23)-(X2 - 2, Y1 + 23), 7ăEND IFăăEND SUBăăSUB Frame (X1, Y1, X2, Y2)ăăLINE (X1, Y1)-(X2, Y2), 7, BăLINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 1), 8ăLINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 8ăLINE (X1 + 2, Y1 + 2)-(X2 - 1, Y2 - 1), 15, BăLINE (X1 + 3, Y1 + 3)-(X2 - 2, Y2 - 2), 7, BFăLINE (X1 + 3, Y2 - 2)-(X2 - 2, Y2 - 2), 8ăLINE (X2 - 2, Y2 - 2)-(X2 - 2, Y1 + 3), 8ăăEND SUBăăSUB MAXButton31 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y)-(X + 14, Y + 15), 8ă        LINE (X + 7, Y + 5)-(X + 7, Y + 5), 0ă        LINE (X + 6, Y + 6)-(X + 8, Y + 6), 0ă        LINE (X + 5, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 4, Y + 8)-(X + 10, Y + 8), 0ăEND IFă      ăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 8, Y + 6)-(X + 8, Y + 6), 0ă        LINE (X + 7, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 6, Y + 8)-(X + 10, Y + 8), 0ă        LINE (X + 5, Y + 9)-(X + 11, Y + 9), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y)-(X + 14, Y + 15), 8ă        LINE (X + 7, Y + 5)-(X + 7, Y + 5), 8ă        LINE (X + 6, Y + 6)-(X + 8, Y + 6), 8ă        LINE (X + 5, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 4, Y + 8)-(X + 10, Y + 8), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 8, Y + 6)-(X + 8, Y + 6), 8ă        LINE (X + 7, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 6, Y + 8)-(X + 10, Y + 8), 8ă        LINE (X + 5, Y + 9)-(X + 11, Y + 9), 8ăEND IFăăăEND SUBăăSUB MAXButton95 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 3, Y + 3)-(X + 11, Y + 11), 0, Bă        LINE (X + 3, Y + 4)-(X + 11, Y + 4), 0ăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 4, Y + 3)-(X + 12, Y + 11), 0, Bă        LINE (X + 4, Y + 4)-(X + 12, Y + 4), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 3, Y + 3)-(X + 11, Y + 11), 8, Bă        LINE (X + 3, Y + 4)-(X + 11, Y + 4), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 4, Y + 3)-(X + 12, Y + 11), 8, Bă        LINE (X + 4, Y + 4)-(X + 12, Y + 4), 8ăEND IFăăEND SUBăăSUB MAXEDButton31 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y + 0)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y + 0)-(X + 14, Y + 15), 8ă        LINE (X + 7, Y + 3)-(X + 7, Y + 3), 0ă        LINE (X + 6, Y + 4)-(X + 8, Y + 4), 0ă        LINE (X + 5, Y + 5)-(X + 9, Y + 5), 0ă        LINE (X + 4, Y + 6)-(X + 10, Y + 6), 0ă        LINE (X + 4, Y + 9)-(X + 10, Y + 9), 0ă        LINE (X + 5, Y + 10)-(X + 9, Y + 10), 0ă        LINE (X + 6, Y + 11)-(X + 8, Y + 11), 0ă        LINE (X + 7, Y + 12)-(X + 7, Y + 12), 0ăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y + 0)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 8, Y + 4)-(X + 8, Y + 4), 0ă        LINE (X + 7, Y + 5)-(X + 9, Y + 5), 0ă        LINE (X + 6, Y + 6)-(X + 10, Y + 6), 0ă        LINE (X + 5, Y + 7)-(X + 11, Y + 7), 0ă        LINE (X + 5, Y + 10)-(X + 11, Y + 10), 0ă        LINE (X + 6, Y + 11)-(X + 10, Y + 11), 0ă        LINE (X + 7, Y + 12)-(X + 9, Y + 12), 0ă        LINE (X + 8, Y + 13)-(X + 8, Y + 13), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y + 0)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y + 0)-(X + 14, Y + 15), 8ă        LINE (X + 7, Y + 3)-(X + 7, Y + 3), 8ă        LINE (X + 6, Y + 4)-(X + 8, Y + 4), 8ă        LINE (X + 5, Y + 5)-(X + 9, Y + 5), 8ă        LINE (X + 4, Y + 6)-(X + 10, Y + 6), 8ă        LINE (X + 4, Y + 9)-(X + 10, Y + 9), 8ă        LINE (X + 5, Y + 10)-(X + 9, Y + 10), 8ă        LINE (X + 6, Y + 11)-(X + 8, Y + 11), 8ă        LINE (X + 7, Y + 12)-(X + 7, Y + 12), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y + 0)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 8, Y + 4)-(X + 8, Y + 4), 8ă        LINE (X + 7, Y + 5)-(X + 9, Y + 5), 8ă        LINE (X + 6, Y + 6)-(X + 10, Y + 6), 8ă        LINE (X + 5, Y + 7)-(X + 11, Y + 7), 8ă        LINE (X + 5, Y + 10)-(X + 11, Y + 10), 8ă        LINE (X + 6, Y + 11)-(X + 10, Y + 11), 8ă        LINE (X + 7, Y + 12)-(X + 9, Y + 12), 8ă        LINE (X + 8, Y + 13)-(X + 8, Y + 13), 8ăEND IFăăEND SUBăăSUB MAXEDButton95 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 6, Y + 3)-(X + 11, Y + 4), 0, Bă        LINE (X + 4, Y + 6)-(X + 9, Y + 11), 0, Bă        LINE (X + 4, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 11, Y + 5)-(X + 11, Y + 8), 0ă        PSET (X + 6, Y + 5), 0ă        PSET (X + 10, Y + 8), 0ăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 7, Y + 3)-(X + 12, Y + 4), 0, Bă        LINE (X + 5, Y + 6)-(X + 10, Y + 11), 0, Bă        LINE (X + 5, Y + 7)-(X + 10, Y + 7), 0ă        LINE (X + 12, Y + 5)-(X + 12, Y + 8), 0ă        PSET (X + 7, Y + 5), 0ă        PSET (X + 11, Y + 8), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 8ă        LINE (X, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 6, Y + 3)-(X + 11, Y + 4), 8, Bă        LINE (X + 4, Y + 6)-(X + 9, Y + 11), 8, Bă        LINE (X + 4, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 11, Y + 5)-(X + 11, Y + 8), 8ă        PSET (X + 6, Y + 5), 8ă        PSET (X + 10, Y + 8), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 7, Y + 3)-(X + 12, Y + 4), 8, Bă        LINE (X + 5, Y + 6)-(X + 10, Y + 11), 8, Bă        LINE (X + 5, Y + 7)-(X + 10, Y + 7), 8ă        LINE (X + 12, Y + 5)-(X + 12, Y + 8), 8ă        PSET (X + 7, Y + 5), 8ă        PSET (X + 11, Y + 8), 8ăEND IFăăEND SUBăăSUB MINButton31 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y)-(X + 14, Y + 15), 8ă        LINE (X + 4, Y + 6)-(X + 10, Y + 6), 0ă        LINE (X + 5, Y + 7)-(X + 9, Y + 7), 0ă        LINE (X + 6, Y + 8)-(X + 8, Y + 8), 0ă        LINE (X + 7, Y + 9)-(X + 7, Y + 9), 0ăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 5, Y + 7)-(X + 11, Y + 7), 0ă        LINE (X + 6, Y + 8)-(X + 10, Y + 8), 0ă        LINE (X + 7, Y + 9)-(X + 9, Y + 9), 0ă        LINE (X + 8, Y + 10)-(X + 8, Y + 10), 0ăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y)-(X, Y + 14), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X, Y + 15)-(X + 15, Y + 15), 8ă        LINE (X + 1, Y + 14)-(X + 15, Y + 14), 8ă        LINE (X + 15, Y)-(X + 15, Y + 15), 8ă        LINE (X + 14, Y)-(X + 14, Y + 15), 8ă        LINE (X + 4, Y + 6)-(X + 10, Y + 6), 8ă        LINE (X + 5, Y + 7)-(X + 9, Y + 7), 8ă        LINE (X + 6, Y + 8)-(X + 8, Y + 8), 8ă        LINE (X + 7, Y + 9)-(X + 7, Y + 9), 8ăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 15), 7, BFă        LINE (X, Y + 15)-(X + 15, Y + 15), 15ă        LINE (X + 15, Y)-(X + 15, Y + 15), 15ă        LINE (X, Y)-(X, Y + 15), 8ă        LINE (X + 1, Y)-(X + 1, Y + 14), 8ă        LINE (X, Y)-(X + 15, Y), 8ă        LINE (X, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 5, Y + 7)-(X + 11, Y + 7), 8ă        LINE (X + 6, Y + 8)-(X + 10, Y + 8), 8ă        LINE (X + 7, Y + 9)-(X + 9, Y + 9), 8ă        LINE (X + 8, Y + 10)-(X + 8, Y + 10), 8ăEND IFăăEND SUBăăSUB MINButton95 (X, Y, ButStat)ăăIF ButStat = 0 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 4, Y + 10)-(X + 10, Y + 11), 0, BăEND IFăăIF ButStat = 1 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 5, Y + 10)-(X + 11, Y + 11), 0, BăEND IFăăIF ButStat = 2 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 12), 15ă        LINE (X, Y)-(X + 14, Y), 15ă        LINE (X + 15, Y + 14)-(X + 15, Y), 0ă        LINE (X, Y + 14)-(X + 15, Y + 14), 0ă        LINE (X + 1, Y + 13)-(X + 14, Y + 13), 8ă        LINE (X + 14, Y + 1)-(X + 14, Y + 13), 8ă        LINE (X + 4, Y + 10)-(X + 10, Y + 11), 8, BăEND IFăăIF ButStat = 3 THENă        LINE (X, Y)-(X + 15, Y + 13), 7, BFă        LINE (X, Y)-(X, Y + 13), 0ă        LINE (X, Y)-(X + 14, Y), 0ă        LINE (X + 1, Y + 1)-(X + 14, Y + 1), 8ă        LINE (X + 1, Y + 1)-(X + 1, Y + 13), 8ă        LINE (X + 15, Y + 14)-(X + 15, Y), 15ă        LINE (X, Y + 14)-(X + 15, Y + 14), 15ă        LINE (X + 5, Y + 10)-(X + 11, Y + 11), 8, BăEND IFăăEND SUBăDyselxic DJ                    METALLIC TRIANGULAR TUBE       Dislexic@Earthlink.net         07-05-97 (08:46)       QB, QBasic, PDS        34   901      METLRING.BAS        'DANIEL'S HI-REZ-LOW-COLOR METALLIC TRIANGLULAR TUBE ON BROWN PLAIDă        'WRITTEN BY DYSLEXIC DJă        'JULY 5, 1997ă        'YOU ARE A NEMOTOAD.ă       ăSCREEN 12: RANDOMIZE TIMERăă        'the backgroundăă        PAINT (1, 1), 6ă        FOR T = 1 TO 640 STEP 10ă        LINE (T, 1)-(T, 480), 0ă        NEXT Tă        FOR T = 1 TO 480 STEP 10ă        LINE (1, T)-(640, T), 4ă        NEXT Tă        PAINT (FIX(RND * 640) + 1, FIX(RND * 480) + 1), FIX(RND * 15) + 1, 4ă        ăă        'the triangleă        X = 50ă        Y = 89ă10      FOR Z = 1 TO 400ă        CIRCLE (200, Z), 40, 7ă        CIRCLE (201, Z), 40, 8ă        NEXT Ză        FOR Z = 200 TO 600ă        CIRCLE (Z, 400), 40, 7ă        CIRCLE (Z, 401), 40, 8ă        NEXT Ză        FOR Z = 400 TO 1 STEP -1ă        CIRCLE (Z + 200, Z), 40, 7ă        CIRCLE (Z + 201, Z), 40, 8ă        NEXT ZăDyselxic DJ                    MAC-SCREEN SAVER LIKE LINES    Dislexic@Earthlink.net         07-05-97 (08:46)       QB, QBasic, PDS        159  7184     MACLINES.BAS        '***************MAC-SCREEN SAVER IMITATION***************ă        '***************  WRITTEN BY DYSLEXIC DJ  ***************ă        '***************      JULY 5, 1997        ***************ăăă        CLSă        LOCATE 11, 33ă        COLOR 1ă        PRINT "DYSLEXIC DJ'S "                               'This is just theă        LOCATE 13, 33                                        'title screen.ă        COLOR 14                                             'Nothing special.ă        PRINT "SCREEN SAVER!"ă        LOCATE 19, 15ă        COLOR 8ă        PRINT "(Yes, it's a rip-off of that old Mac Sceen Saver.)"ă        DO: LOOP WHILE INKEY$ = ""ă1       CLSă        LOCATE 5, 33ă        COLOR 9ă        PRINT "YOUR OPTIONS:"                                'The user chosenă4       LOCATE 9, 1                                          'variables.ă        COLOR 2ă        INPUT "HOW MANY LINES LONG(1 - 100)"; lină        IF lin > 100 OR lin < 1 THEN 4ă5       LOCATE 10, 1ă        INPUT "WHAT COLOR SECTION(1=BLUES,2=GREENS,3=GREYS,4=REDS,5=VIOLETS)"; colsecă        IF colsec > 5 OR colsec < 1 THEN 5ă        IF colsec = 1 THEN sel$ = "BLUES"ă        IF colsec = 2 THEN sel$ = "GREENS"ă        IF colsec = 3 THEN sel$ = "GREYS"ă        IF colsec = 4 THEN sel$ = "REDS"ă        IF colsec = 5 THEN sel$ = "VIOLETS"ă6       LOCATE 11, 1ă        INPUT "WHAT SPEED(1 - 10, 1 BEING FAST, AND 10 IS SLOW)"; spedă        IF sped < 1 OR sped > 10 THEN 6ă        sped = sped * 100ă7       LOCATE 12, 1ă        INPUT "HOW MANY LINES SHOULD BE DRAWN BEFORE A COLOR CHANGE?(50-500)"; chngă        IF chng < 50 OR chng > 500 THEN 7ă        CLSă        COLOR 3ă        PRINT "IS THE CORRECT?"                              'Make sure theă        PRINT                                                'user is o.k.ă        PRINT lin; " LINES LONG"                             'with the selec-ă        PRINT                                                'tion.ă        PRINT "COLORED IN "; sel$ă        PRINTă        PRINT "AND CRUISES AT "; sped \ 100ă        PRINTă        PRINT "WITH A COLOR CHANGE EVERY "; chng; " LINES"ă        COLOR 1ă        INPUT "(Y/N)"; correct$ă        LET correct$ = LCASE$(correct$)ă        IF correct$ <> "y" THEN 1ă        CLSă        LOCATE 12, 35ă        COLOR 9ă        PRINT "GET READY!"ă        LOCATE 15, 21ă        COLOR 6ă        PRINT "(hit 'Q' exit the program at any time)"ă        SLEEPă        IF colsec = 1 THEN C1 = 1: C2 = 9: C3 = 11           'Get colorsă        IF colsec = 2 THEN C1 = 2: C2 = 10: C3 = 14          'ready.ă        IF colsec = 3 THEN C1 = 8: C2 = 7: C3 = 15ă        IF colsec = 4 THEN C1 = 4: C2 = 12: C3 = 15ă        IF colsec = 5 THEN C1 = 5: C2 = 13: C3 = 15ă        CLSă        SCREEN 12                                            'Switch to rightă                                                             'mode of display.ă10      CLSăăă        DOă        IF B = 1 THEN x = x + 10                             'This is theă        IF B = 0 THEN x = x - 4                              'opening loop.ă        IF H = 1 THEN y = y + 7                              'The line startsă        IF H = 0 THEN y = y - 6                              'at location 1,1ă        IF B1 = 1 THEN x1 = x1 + 3                           'which is theă        IF B1 = 0 THEN x1 = x1 - 8                           'common startingă        IF H1 = 1 THEN y1 = y1 + 5                           'point for theă        IF H1 = 0 THEN y1 = y1 - 2                           'earaser line asă        IF x <= 2 THEN B = 1                                 'well.  The firstă        IF x >= 639 THEN B = 0                               'loop will go asă        IF y <= 2 THEN H = 1                                 'long as theă        IF y >= 479 THEN H = 0                               'user told ită        IF x1 <= 2 THEN B1 = 1                               'to.  When theă        IF x1 >= 639 THEN B1 = 0                             'trail is longă        IF y1 <= 2 THEN H1 = 1                               'enough, then weă        IF y1 >= 479 THEN H1 = 0                             'will jump to theă        LINE (x, y)-(x1, y1), z                              'loop thată        R = R + 1: IF R = lin THEN 20                        'includes theă        FOR T = 1 TO sped: NEXT T                            'earaser line.ă        LOOPăăă20      DOăă                                                             'This is the loopă                                                             'contains theă        IF B = 1 THEN x = x + 10                             'the eraser line.ă        IF B = 0 THEN x = x - 4                              'It will followă        IF H = 1 THEN y = y + 7                              'The exact sameă        IF H = 0 THEN y = y - 6                              'path as it'să        IF B1 = 1 THEN x1 = x1 + 3                           'predecessor,ă        IF B1 = 0 THEN x1 = x1 - 8                           'beginning withă        IF H1 = 1 THEN y1 = y1 + 5                           'location 1,1.ă        IF H1 = 0 THEN y1 = y1 - 2ă        IF x <= 2 THEN B = 1ă        IF x >= 639 THEN B = 0ă        IF y <= 2 THEN H = 1ă        IF y >= 479 THEN H = 0ă        IF x1 <= 2 THEN B1 = 1ă        IF x1 >= 639 THEN B1 = 0ă        IF y1 <= 2 THEN H1 = 1ă        IF y1 >= 479 THEN H1 = 0ă        IF B2 = 1 THEN X2 = X2 + 10ă        IF B2 = 0 THEN X2 = X2 - 4ă        IF H2 = 1 THEN Y2 = Y2 + 7ă        IF H2 = 0 THEN Y2 = Y2 - 6ă        IF B3 = 1 THEN X3 = X3 + 3ă        IF B3 = 0 THEN X3 = X3 - 8ă        IF H3 = 1 THEN Y3 = Y3 + 5ă        IF H3 = 0 THEN Y3 = Y3 - 2ă        IF X2 <= 2 THEN B2 = 1ă        IF X2 >= 639 THEN B2 = 0ă        IF Y2 <= 2 THEN H2 = 1ă        IF Y2 >= 479 THEN H2 = 0ă        IF X3 <= 2 THEN B3 = 1ă        IF X3 >= 639 THEN B3 = 0ă        IF Y3 <= 2 THEN H3 = 1ă        IF Y3 >= 479 THEN H3 = 0ă        LINE (x, y)-(x1, y1), Mă        LINE (X2, Y2)-(X3, Y3), 0ăă        N = N + 1ă        IF N > 0 AND N < chng THEN M = C1ă        IF N > chng AND N < chng * 2 THEN M = C2ă        IF N > chng * 2 AND N < chng * 3 THEN M = C3ă        IF N > chng * 3 AND N < chng * 4 THEN M = C2ă        IF N > chng * 4 THEN N = 0ă        FOR T = 1 TO sped: NEXT Tă        T$ = INKEY$ă        LET T$ = LCASE$(T$)ă        IF T$ = "q" THEN 200ă        LOOPăă200     ENDăă        'I'm sure there are easier ways to do this program, but I don't knowă        'how to do it.  I only had one year of QBasic in high school, andă        'didn't pay much attention to boot.  Please e-mail me if you haveă        'suggestions on how to shorten this code, improve colors (I don'tă        'know how to use PALETTE), or just want to congradulate me onă        'actually doing a program that a little 4-year-old would have troubleă        'doing. My name is MR. DYSLEXIC DJ, and this is my address.ă        '                      -dislexic@earthlink.netă        'Again, thanks for taking time out and reading this over abundantă        'REM statements.ăJon Olick                      MASTER CASTER V.040 (3D ENGINE)jariot1234@aol.com             07-06-97 (21:32)       QB, QBasic, PDS        397  26286    MC.BAS      DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MCV039.ZIP",4^6:Z&=19469:?STRING$(50,177);ăU"%up()%9%%%[-%v'oIGk+7lGP)%%%d5%%%0%%%%hz%wwjs%ySxyOx.&<,BSk5QwQăU"X6TuD/y/61u[aT/L/&Qak'#A7>JXI\-$nOf[))dW8HI.L8v6x6JL[.py;qs8FYlăU"4VLo<Rf48ILHGk3q3I]lUVHnsiu9jtwM9r-;pc6($c)&p*:b1-L2\Jgw<F#[ExLăU"]?q90D.JA6_IsY=K0^T+NgW#Z/e?HR*3q1#D'TL)hGk;>R2N#75hMBXm/i.CO#NăU"udV%_YsGHtEfjVoW_#G*8#CZ4_.1HWPs?H1(BnFDBR,geV2m2wnne3v4^#rrl9IăU"fe8Vu#%2KlEjW+p:t]hvqe:((2wRElo+jL+2.jeh4RMyb=^J13Xx5fwl0VmS9J8ăU"nHn#<A=E4UaO_NKS;;K1tCo-$kYL/Si_>24vEt:P&pRB5)0WwKkh<]ps1+GdoBMăU"SOSj#5257O6DDZK$b=RKIDwj(5)Fg<fy&P;L[^yBt\bwcC&$^]f+E?&yO\uHf/YăU"wlW/cpBC+UUi&EMdr5Wgn$XF5dO_mBm-6#%E.]jEz$dQee#l4So/oq(&?:+lRuHăU"2W]ISjQ/kt0psHJR)1Y\=o+XZ)aTm(zNH7hPpA%2'y#VvWE1FK'0Jqt*f_P,rWKăU".J>*]]jDm11W*P2TBkTSdh??viRg^Qc?j_(:h6=LKMK?3^rQHH0s)ebH?b=vhj_ăU"P^ILmk5G_/\nOtaCd.E-gsSKcC?NR;iCf(I:5(:4qzSfZ6;$K5XTM]SUnm(Q1GDăU"G%Lw:1;?^PsFM\3-.R*re.#*L46#vEQ8Nvi4jtm&XpK&&(vLR^j1zdEki7.sY*kăU"-l4j\u#s<fQQCAs[[$HH_5aZ%LDd8oyrSbnjlN,&^V(z&:1vhuPT.$V#dwlA5pxăU"B&uE_nbmp7:riUdeNM?*%o4>eNGP\:zu5$^HjuD8RjtsoCpkhfc>RoN.;3j,v7DăU"E]Ji<L9cJSW?65k1^RT1od$drHi*93St1N^f9KxC)&^S9ti8;WE^jrZfsb[f4'?ăU"QQfRX/TsQbKV=KF&M0Tjc3Z.V^cjEnQI:Np/h_Q+%nFEq;S23m:b*k<5kp+gZi6ăU"902RI<Pu(RWkj;n<Nl52NXUY$>PN=)r(WrD#PaX?wXjZHlbSSe\J1,>&%t.3<-;ăU";S2b(EYnP3.h_+i#FLlD0PAwjSSkDD6gsQ/k^e_ixJ,\9VZ$<.N=G/ROlkbFgl7ăU"TV(rUnJ[-vUYkO<1Gu0r<u+RQr_.&(<1=^CW')e*XJCW*rb=,q$#hdqXs6.0a\văU")8'Nb*tff)6[tm4n9i<,>OvjfE3l-)Cwn)m0tiueW7U=v.8\];_In.v;]??mCB%ăU"yr'W]>km1*7u)yg+<EYq$4tep>7o>^v:)AYo[LkR04/_o:x=#rV(0+sTVB>j;X;ăU"i8kRBkoS)M*T_Juvo/B']Z%YV4Z&RMo7z;LfmMMo*58'aPQkQ,=(#d.243*E=;yăU"F.gDe1XE0mmu+4,4,2iDD]w[AV8gJ:;6F\85CS6XB_=jt.d8AmQnzLrCcW;1tS8ăU"=6G++ZII7w2cuJR+Mb#tB?v^L[5lS[UuLf1+6.=9cm>kN?VAFNw>c5ee&[4JLIRăU"mJ*n-)?g7aN4ae5+>b]H7*Mv2%up()%9%%%[-%z7IS5x?;nXG..%%K/%%%1%%%%ăU"lw(f(gw%npSl#nkJb_L+4OFC#tm%Kjoy(/dxNLbx.H+='gA38q%L+bAzv]-s9*ZăU"?-KR?;Kbfbt/MBMpzpr>E*rN4<LtM5M8bkMY0<SkX*BDgbNl8sc(H$QtwKejE((ăU",0<<O*oY2qx'<%U%(IO%e%1E(u[')%;.%VOI%E%51%-(i'R/%>O[WeJY(%?1]((ăU"+'&,O9eU4E]O7&_=m+/sAc)#='+PAS5eW(F35o&W%i=IG+$S.)eQF)0_mm(&s=wăU"1+xSACe]F6&_pM%%9=/+/TA?,1JUaf.N,<'&[%he[G-5=%-W)J#g%F[%5hmGR'5ăU":W#UiIq.%v[M%hyG345#WX'=J7%(.[)h%g3IkR7HB_;cRJ&(KO6E#.))1I'>Pa%ăU"Ee5K&W6I.1&S/g.=Fau#eMKc%6O.,;S2;>*Za-e.)KQ67F,'m.IKa67N,H..U*[ăU"'.nFo5FxAMc.9&YU(j[Gn(.o)xK;M$c#'oVt&[wn^\oAxG(Mfy%#OU:[#/^eU#oăU"qJr%w3G'Sg(?PK]5?W(^3AoA]%lgjH?$]1)?Q^)0kms1&vgx<?x]AD?]^6&kpS%ăU"^<g0?eTAoFOJ_a#7N,*(%Q%8e[/-)=#'W&t%eeEQ%58m/R'):QIUfso%euQM%8yăU"/34)#QX*:t5e%-Q)8%g3Ym%mQI8.w3%.e/.gu\'K.*/SqM)IT6eW3B^_I$:aUrNăU"joa1:nhu=)-AQ^/bD\ohPt/kMrwc'mo[i,lqT7Zak+NJYNv?<o_SGGTG;_*Dl+AăU"lk,<PvBYY+63+3s)t)9UH[w$0?b8O0WM+'hx,hisyKn+iU'kXDGodnP^ekNDc;FăU"&[R2jaD+Vi1Z*5-bm0*Bm%tDB<(<gvN#vqmVP8ql3sgB((XuORG_UtLV8sMM5?_ăU"Z%beIl[UtCLUmml1D_9Z])_H#>D?2:Pu.BlkGKkSLkDu^[UtW7,IA&?,lN9YXa0ăU"ew1K?CQ0;+Ml-V-1<IbxSzQGhn9ntZVO;o8p+eb\U#upn2P=?Gq&Zn^p+H%GrgtăU"N28NNjATW%h+_XjPgM4fWI]\$,NSF1bF>v3/q<2=]2MEH._o--;&$cORDV^BSwfăU"]olZhGkd-)-RD[vmfDLEG_&j??^iM84;jnwPXhIG;lT58c9wjT4m\K4fc5RF85wăU"mZsmr?79%8Z??'t1>Dk_cOECx=kLX<xcUu+uASWTMlK:O*UvqM17PN$D8\'4s$yăU"skeMe*6BdIi(<::E;c<?E;Epna\70&eU]jq5UOs#9rdd^a5/t(FKJdxu+&FX9X7ăU"XRZW\W[mrgM/X,O'jZQ,N>uZRcwOn7VI0TW%c6+S)w3qytL%OE]Q;x4l.n+<)RGăU"wfmZM&_u8GA:un7\?[X9sr*hGl;UF8rCRG*o=tnBM.[<6)I.7Nsd&m/Vx/zQ#kbăU"=qY]Y$k(,*7(Y8xl4,w/$rECRIO^k)(*+A9Y=0kdBeE]xp1fJVW>><<,oarL+<HăU"E%q_):un>-8FpNRbcG1X66=d/4mO$u6qkoEV1vr=l+TLKpwN6M1rh/BT^dqxX:0ăU"&^qqWIYmMp(C>jAAYDDDN)it=XvWI;qH%3dqx&]0-.jH$]kG?-J9[6yL;x1v<q3ăU"0]4=EXBWp>n:YTBbohvF6e&ZR%,S1\FEqJkYK.C?cX8Ns<OTN/4:V2&?+0g\YvkăU"dZVJIjN<uY*m;nL=eg+s256-lbImC0^<J<eFPnO3-,]3cC1xuE2#x)Y)CiH$S$căU"<=/?WR8\c1rcb)jtRdFd]Y'hv<<DWLzuwIHh'J-(,SL^%7_bEqikhdUAht/Bv\;ăU"8XhkcimKO;pW(dFPz;f+Q%27k)PQ;EhSN(ypg^nMlI&D$pZoqk*Z8rtYd6ZF_8DăU"4afIV#BL#E974gAb#ZmESe>p[o[XS(rwM(M?+HSdBLm80l)j'NNEqkrG<N6jp0năU"uw;Z6&xPV8F+r21\_&x>>&h.gqo;hl,08]dXv_1Ag6/Kx+F*Fgah_$ZK3ngGi/;ăU":co?XzV,.Y^sO^-;X,=\kQTxLHs:^2mC;QTeP.\ZW/DC^8?ZvapDKukR>S9c;jOăU"^hHeI,k3;9VnpJ#<Z%_wEu%qewZ3UiJZ*lU.Z^-#tkg&I6mTqH<3lPC^&;uvD]năU"4\V::?FQtvkUg^NvQg6Yewbs<Is2uL4..BpKylEf\sJi>[CX7=sJ?D4>BiKP=ItăU"H;1Zwu?g)$-+]Zfol4/nhU4UxNe0.Fko:J*eL%j5ic5NglZw7>X(v*b:miwNKTlăU"=haCWIg?H*gdN-_)*N^f2[:KE=88Z./c.t:(*+Rr_PRHY488nzjt6HPhKFJ-lh#ăU"4Np'<0%*_07z4dG3'p%W0JF[r*/v)'k6zLH0w9nZvYdDSHjpJ8ZlS>7<$kXO,DeăU"iox?5s&b2fzZg:OE$Vx-?C*kNz1c9f>0%n.9JtXB;b2c]SiSINbEMpTm_)M\#NmăU"b6HGagD<?$StOJ*b#jWLTC7N>lB&;BE]rP=I\,dw$L[Zt8<ZhDIiVZawo,*n$kJăU"l?N-e?Kwl&\8Sd7c(W?ir]jKe7OT^-odJ#FhEv8kjL6kOecuBJt^7x%M76[]]tNăU"BaeHXLU02+9<jBWk/;8w7l9327$HJKs7BHTX:Z/wctp_30SeCl:-Qd.2Ml23TlVăU"YO'q5Bo2zFl*x:cJ\h(Z++'7t-wee<oV>WExV,Ms4qB0s\X<j8qK=cZS_aiD=4văU"eM0(8TIxt<UB><:2FA.G&k+Tl1R]bKeaypDH8S*Rf/LPCD=MGU&P*FZc-:w$P6$ăU"g=ATZ\\LQ>_NLb1aFd05g2otd$bvXPS:2r_>uui8PxTVuM3Bq^6GDN^EN;d0WMVăU"=Ak\$4$e4bcGLWV979bB9pzRRt]0*/jOh')M9RR\<w-t#2MtXzsjP66rIydPlmOăU"fnt,Sg;fU:Xt5+$\PO__<t&7321tjOnD8>.<h:[eV_\sWQtbvP2pqSp\_D;FbK-ăU"hdH>gC):Pi6GVLt#MOe:TjNvsxHmWr.X,k%Sq[#c[iS6t/_;CZYOBnBSqw^Sh#jăU"CfC32\ZkwkjiD],VJFV18tr3W>'h)RfL<u,W#H^,\]3gT99ux?SRb&l]=*'W^ADăU"np6uGNjj_'dbf6Sf1<+tH6K#P7G9]n[Qk8iZXiMnj0R#4;_Z$_o,<_bU<X:T8,.ăU"u2m5Envp8UtM/^T_R$N^b=t\qLaYH<VvHTDjnrp3u4n9^O:srFM<G.y/Fpt$:7KăU"sd%up()%9%%%d-%177S5906HeK.%%%S/%%%0%%%%lw(f(xy%sSlnIkJcN8+3OCHăU"#HKcB_ltx%kq^tBsF7dW==8n#svaD-sF:j[ZL?.KcZu6,^kqwtvmD(+G*hML^3AăU"$hq[$/q?mfN47L+SS<Zg:ZT2^MKx_NLq.nHp-vrA::/'a6oh*59XDYxR(&/%m.%ăU"&O=.e+o).-%S&&1%ne%%E=5(+W)9C%Y&48Oo9&0Y=?+'1)'%2PP/e-AZreA1E>_ăU"_A3J9%5U-I&S%g1(FRug7)E;5(VWII%%71.&Rig/4E>_W7mJ]%AA1^RA+g&o'9uăU"UM-])_M(Vc1o#^G8/%)='7(fOEk&_FM6I'-0S%=g76AO-kS%FG6*)W1i>Jq7#O.ăU"]kkF(S$%m&/I=7GAQVaI=nUs+A*3U(&[%n%EE580A-c)(&QUf&[En-[E)8;1-$SăU"'IgVp[%un]E7A8G-&fi%G.U6[-(^KjG1V$[mC^AsO(N/9mI/&TgIgkps.-uSN&1ăU"9no.%Jg71kXs9CuYN48coC&3^gAk*2s'u2Px/y*A0WyA1O>d\A)69%AU3I_VOhEăU"FF\uA7)];A(V]IL8O8E.0\iA/4]>kWRsJ$ObBE^\_+A&1*9+US0]U<S1Vf[pC^QăU"B/(&g%w%eEE;&_.M*I''0P&gew5#E-;S%.G**DQ1fh/ow?E.];k.(ST%g//Fg5&ăU"A]fgJ1Fh_&AIo%sp9]4.UnWJG3kBG,X)iq*7RI.VeSBF(,d9pcC]$lVa2Bh&KLyăU"/dQ*bhJeoXtb3<Td08RK\Sarb0#n#djuZ[eeA;bH2c'DA$lrj/o#mZk9AqWAxghăU"0&TaWasYCYRgwGuImX(?cK[-3QGhVm20q-sssHTpyfRJ)(TE5uAVjQS=*_g+<'iăU"55>i?3F'rEVjJd%1,K4opS)#8Ec8^7N1QT*4O%L:)B?eru>6.P6k&\_T<2dnbF_ăU")Pb>TWCP:?FvmwTkiR/((zeHOKjr.pP7:%SC9hLhj$cUMSG-cm$A.v:'Yrj%gq)ăU"#\zF?Ar=[Y4MtB2_EqS=:'IIow'pGWHjVM25K&lbA5tbXg$\,>),I%>RetTtK.1ăU"Gh6,H28,I1Y)N5nyciZ_07l*XymL^3#hQeY)T>0NY(r.TuYlXdgCs)C*[HT>+u?ăU"qqfnQL=Zp4,pEid\f?MF'[JQL%VP7.SX?o3D6<Awnr+g%ElNc^L$28uO;bhLe8iăU"q;A6I28qX#0V_opQ14q4W)uin9xspPQEu+(eN$Gx?YIVYhfB&nq($04:QqoY0x5ăU"n5<\IV_f/YI$]<:sLjQ3eFTfqM2NLujVqK&6P&Mi8>08sl)M\5Tx>Yf0=tRw=7iăU"KCj&snL/:fwd%:-nC-raiYGTUNypRcYmW0uq:bW#8c1.\dbJWe<zMcG[-,zoe7FăU"&?Dp52lpB(bpw*5OZ48f#t?Ym'oN/4qmF=fUiUiG]X,dPX:xrcaV'+?OePz=JrkăU".3pV_CR9hI?Xpt6Xt/NrFgTp*Mum]gnWhmgteIo-f,YK0poxb9Yn?dtlIhIZC*=ăU"gY4.0nuY>9d)A=aWtpkrJ8tk%$x-<IQ^.Hzbh[eMVkZL1Gv7cn(wtQ&P#FuFNuJăU"]3QOhW%5ve'd^.G=bdKL>*0GR.xWZlib5.L^Z)v1$,ok3ek>DC.y_<G6wriUN1=ăU"j-rorvQg-I(>Re>jp(QiTj&reIq1C/pG765-]cCQ'c9<qneN](;h9ao1S6/O[$iăU"NMXNBLdgz%8#6^%*c,;D0[^ld>pVI[p9=pT_fgvhFVq>_M?+-r)uOwn\2gVPCKCăU"Sj=$f&,_ecs%O(a)#UWudVF,I4#_2S3u]$?zDOZsFT>Ar>akpXD#7QM+<RV*;0qăU"3ADdV0G_Vtu+5;'Pjs6na#t[]l%xrgA>aAbOK>%I>r]Yjc'_CDp#DoV&.Q<CIxgăU"6GZ$WNFe4N^roaTX*jOcnel7Kv'Ksk<1TtSxd%FC3p;8lFpfxrvG;Ty;Z66&L[\ăU"0llhm^6N8hHhLcSa:ZXAL*T2gG]L-h;;[XAQ'(z]lpwg2T8c;Z$0%ncD%Ln]hYdăU"-cTKSTTVH1*bLqq\AuVc&C,QT371:d/^x<\gbiixI^MB$hkMk&6dzwjfl][>xf,ăU"=C/_NIW9by&k4*vGll<Mrf+*C&tZZv?>zi]i6LpZ>c7T5D&^KrEBmkX6,=V/YJnăU"^zuzr#.\w5K$yzo[TT=MhI%CWV+&+=<cXu%sTJtYM<knRmKVJS\Frl^[HD2AhC+ăU"7w$wEy+r3AU>g$9Z,Ns4e$X/d%jOXNuwZJE<yK/MH5gh)SXnjB^H<f*$^HQ#d+3ăU"''AkVNIbMDJ3\(^2v)q2Tn:v6MwxQBh>A\GtSmj[7Ub0oHfJqKZ)jEJTnJkZ*4wăU"MFu+f#W>J62SxcSk]=YUPljlchFLXC=>a\&PW:tR\4DoE3sAsfK:)avaDs-$3PMăU"udZuv?[dnwl*iOgX]Q\.<bV+YGth,I-3d5)fYB[=JL8rQc)Fo*v8-b6mNNKfXZ#ăU"PKRS,U+mJ*Llv%w'TpW+U9#]Hag=cl<h;,30?Z[4W5?16MXJ*ZhhqEN5RrF?*FEăU"?AlM.jtp>X[u6mce7-&,nqkS0(D2sdN#8G:FQDJHjp3Tg;mQFGTUZ?nOtQ$;Wk;ăU"u]-2^^p?6^r_lJQgH&v[Qpm2tTMN^#..rtmV:w4]#d1Vp7gb(T4[SDQ;6oN>P.păU"#Jahfj;z\tdqWgbpH,D<&GjkzLMr)rd18+;c^VXB;r?Zw;j[xDbjzTx&ComB*jDăU"*pIiK*0m>#bn*Q7nPy]#3,l\kWsvkrwOB3q2vc89Cf>adnP>6D'J^t>gcUQ7okmăU"n,$X;Nt+o:XmSC#og.0hP;H*Nip0*Sor,DG6P1xtdlD,tpfHn2gpB+Lbqhd4bqlăU"1,;D?8Ji[LJ;7OzW.8xd$##<1RASl]INF_CI5reP[Cu>B/7<VMH\.B#BqnncjleăU".ti^aT-uH;=yobkl^3dS>Ud;lOkrP.oC+cNe868Fx\6q.3/cCG]*>TLJbmfm*A8ăU"2t&=v_64w;nkl[s2S<hvtUFTRF#TpHypK<Anb]wcb0p1Z<T3<.fZtTPMWbr2$jZăU"Tv/3BnUl_%EaDo5_4x;%A_M+P0fXEHst\qXHM#<(e3M.G#C+,p^:p+S$JfmhhYrăU"%dup(%)9%%%%-%a&zS5*LqOYc%1%%M%2%%-%%%%r%fuVS%lnkBDbLacurs#8i<săU"h%'F1kqrC[ZOJI-\VXsf'hi?g#h2cvKVI9x37oUB.KtRl;:jF44_(ktlg=40k5WăU"g4TBJ'O9:S$Mp%QK/4FPB%mN?fw7LM,N,NhL-nHQnw+pq94IC*]/51e-(O9*tP%ăU"u&BP+%%+&k&%1&A%.A'k'%]')%%)))*%-)m%%m-m/8_-I%9I5I9/o6/%//E/M*9ăU"o^v.)&q%1gBa%;1O;%K;UO0+5<M1%h=3UCA1]T'Z-H%Ike[o.U'0IK9mW$#9kG[ăU"%+=2VPi;7S.V%2EB?u=R?W4<50=5TF(Y68e%Au]e.]+?1K[=T2F-#&]IhAv?aAZăU")9(.W89.sEk)I].#af;nSL(%vFsIx]\?a+Y1=d>/6IHt=]QL]q?S*_q(mC%Y%W0ăU"9%Pf('r-1#6]E?FmY9P(HQ%).&.QGI-i_O%EFfw()X-?#5YI7_Yo6:1%QP)#h61ăU"I&Nj'f%'v)gGB$)_%)9.5AX&7R.Ik$=^G#e[,_=N7%lI&m('a)j(7WI&Ingas.măU"7$Y^E8mK#9nHa%&I(n\UG>m/m1XEAXM7p[^i%KDOq&qIVe2_'?M?h.Y37A]K]j\ăU"&WK%rLeio7F'JIo.nmb9.rGi+IY28i)q8iX_O5EFduYRWELu6s%6jHY&VBe+%u1ăU"e1%+=1WO=>/W0:&Rh(+v=A.V)/-'A59h(EU)1I.>a1Xm=IO&pFhx(1\=+.U13=qăU"Y0It%+V-WDW15i/z7O-Fuahh%5+6k8p4Y6#36sp(4_5&.6fp4%,jIiCITcS%lYiăU"Y&Tc=j#1i1T(cWG)U6qW>Yqx0.Rh=/L^>dketColjBj6^6sTplo)($1ai$-2g%răU"g^-s=g./;NlPsq[j/W4oF'OiLE[$O^HS&sn[%$N>fxCq)tOWWpiB=]Cj6#/=xjRăU"C$:zi;0LWu,uA0[g*3xSM)YV1t+MeZASrJ$FV;eXc\Vnnju.zOua,ZH^EMv\ZbYăU"PI2<]n]9XUS]=Z%EP^y8dne\\6>,G=[RYpO/D.kD84q/>G6O=i1+)r<>QK)b)kPăU"F-H;o8W6mq/miiM7KO7)5,hee1vJH_&I4FkxlGYH15P+kiMe;'->l]cxfUqN1Y'ăU"JG*%y5d^r#0:SLr_jqDMj6%q]#\fzTo+W+p(R*#q\%s\k8bw(HoK:1DKMQ.*20%ăU"dB.tHvwp$_,LQO2b)qf%i*U:6K+wFGqIpSvHv?E<NTe=mMf.\E[V&0G6V8nNXsTăU"e3/JSSU7n8MvMcvo,g8pt)t+&#G.b;:<<bMi(Kg.8tK>Ou$r*F$?;xruBTW391/ăU"7gf._\8Pootsq)qxV/k9=Y%MOc\I3n1Zc+2HjQU$fDCaD:wmA/g\_l+tIf^jrd&ăU"eQu;?ef3x5*_x=J8da'4zp?wk,.7,lSl.c6S>Y:lB/eZ-e&2]LtL7;cQDHg_qtgăU"6c\.[7-tD5#u&0xePI(^ZCB9ttGUa;B5w8Ykq^U0QuNc^bIv.ieE-c#J\ey[X\WăU":sj:>TwtgYuAu<4ygeY1PAbeao<bi(y[#Pt(;1Db4dV'fS\se?[-+t)8n)?,8RVăU"6P+ePG]U/&lvnw-ZD5>YcubPoZ2w5?SHs3,c?J%mitrpo0YdrQsh7LXN+8QM*J*ăU"$Xd0pal]vjZjX,>HYt\+t2_0Z#W6UVrrI?BK#^eq3wbWH\^l.Xf$Vh5%AY&DsmWăU"fd?T?WComteUQ2A=ecdi)#A-piGuLtoi<B'lwQ$_)NOQJs\zvq<ZjspVMCGc1PLăU"uV8xQAY,^L'oHZ:u>H*PdbBsdWP#$n;tfaMGE5QoPY)Z2F6nRgqlZ4'Kmg^KnRlăU"'h#LzW(VH8*a1aB*+6pWmK)S=8C,4(uz<(;W_iqh&HhK-/JffM<OX'7GtNJZ=dcăU"_t9D)/<CSt\L<=X?+</OpE-oku/Stf,5uilsu:as1;FGM3k\pgEbgQ-5K?:Q^mFăU"I[-FCV,W'.gW-+I9_mP=0GblpeV8dYX91RgA7[yS_?OMN]SQ&xU_qonVr5,7<>kăU"SafqrsgGv5TN8dnH<<w>tNg(j/D6teEYDvM%awG_3c_D>%'DLP(qEVPp3mOX>O7ăU"xZHcS>9%9l2nZK]>-XTz9eu->$Y+xduNGWk4^gn'NHrZ.ZEU^gS=Rts(YUr'1n8ăU"tI'e-&F1l5iS[kJfq7rJC-xL<:bJ>L5b#7#0g)o$rrHi[$BSQV[paFw$Cm]vWxAăU"VUR?5-b<tCB5Bylgn#i)lg_zC_Di$.G-(?Zr6'kdK33],t6A^U$#5WOb;e>\*,:ăU"S;D#k01rKqrb/r=:;V:)^Fu1nHvWs&TJcv<'%^#=ar]5u]*t<kr;3IqM<DD&v]căU"mJ&BTI8#\VzV,FaMUbG?03Sq6>ly,IRIL\%>4CjmIt#I.\ik:^bFR=k26v=\LW2ăU"t=5$7O'5EeOlOeMp*jqFxaF.RmgD=t8LYS#G'G4#1Q;6XiN:/8R8pu[5\HXQ?6HăU"Syk$k80$VZs'0qj9N\ReK[2_MjA.Yd5A?F\].qZ83^ldF:(J#tpJhOkcs<D9qp\ăU"Ji\k58BZBk<Ud(oWwD>yA'\6&$lCfsm1d9Er3U&0fg4<]<nj.duLtWf+46Czp$'ăU"KcsWo&cbh$u*bJwD#?^Tr?eZRuOIDSZi/EzNP7[:sC'dp:kcWkoHfhcpM%*mPGPăU"GK-8bwN'*>L>vd4;5(]s][/5?e%s0T7H0)rL1.8&32S;;,)&tVZa5hCTJ:DskiQăU")=P6+M>?#&?]T6jG2qp_rMD6/+?WB;T]/$Ib+pS1^USp:Fm,/5Rd<I6QN[0b1lRăU"Qu(b^-JtE&WSLZS%7Kk=S:rRx>$X1jeC6=/AHYVb:um$AfC)unilPI0:a12r9usăU"(uv2xr#gQOZ^GUFZ6pMHX*e0m-'>R[W\#$E7^qAQP+86lPNR6BYwcosXExgM/(^ăU"2Ht$'Hk8DwB3d2YChkgHelrfFX$Klg&v--)zSip6.RF>RJSI\PN\i-d6v(G2zluăU"B13Rig_sKeoaFd;)pG=RVH)C;8nrFXYVW=b1drw*;B,1i*j[4loVCwDS*kBo/baăU"Pkj((D4_G]?Z0RL=(F]U4E(?pB,KJdRM4E^6h&J+G/W[fM1]$XlIxQ&UdP(JngdăU"w9,c*/BU>S(:vXr\>P#$4xeGuUxIpB:5=GHt/,WJjDi03h]o:/Z)Rk-)#l9e.<qăU"O.I':bStK=2XmLSd^hpiL3H)f&JFM$Udq8$C\Nz(2:5YPRLRa$G#2zf;*Y_=>V*ăU"7dJGLr4rs#+_Nw3/+V,aU>-6_iu?oS.hPr5ZxaAIcRq2$TCl4+;Zs\b_;2\cdMCăU"n>KwYv;H%mM)0T8ml+$kvW+cp1:wOdH_;)83[uHY<_v:'Oa\x\*]TBDU:<j=O7SăU"5i6;Hlp?V=^1*vf=HQ]\Nt?6'PlXu6w(CnASY:>uSjedYg6G#$ZJ*xHE4:rTL&băU"j($P2EMf9mtxXsnH^vi\9\kM3boGK&at('2JSfE.y#x0FQJbm(DNBYU's*e8wBSăU"c*EYXTJA0Vfk/.&7XPwdRb,7i)hC]%cmwo.rR;ZAc<\2ep8<P>.>p5t85rN*54VăU"[M^bEO_ic,&XNs,%ys=DC=t$TCx:]$n.?.Nn8kfxe^Kwj+H)Pf=ycrf42tfBOHhăU"A:uneMht'J]hTt4:V]d-75>6kLCca7B7b$+T,nU<b1H/dn5=cuxEd0L06liI1FrăU"kZ\,.u+3EfwqEGsP3>?KgttoUl>o]D$\f$4np\kWOitB'l_sJmMUlPXMn]zgn<4ăU"%LQb#ND[[MRo(rB>WFpR*i0LHj:k[_<74?xVGzY-i&A=DqGr'QX]pFyU;uERn[găU"_-x\I\bz\VtB/tWZYIeJr3dsrIX3>BHqdufTXoV.A+>$_AfW+e+r4]c[Z<4->SrăU"_$]vMmG*Ga13s$.rkG('Op>]tB=qN9k,T8wr==G#*aVpE=5N/1x.PWRuQSSX(f/ăU"I>fT<Z#,)i[5BWr,Y9%M(->7TI$K1c4QO&J6(zEah0b(jj#*-IHrld+HKN#%H)VăU"Kt^#re?aA=m6/0Bw0%BxE_CYm/=xp>:f4$%$2gj,=9odaGf.5(snuRO8p5mR5k&ăU"n+cuL,k\+OWW<ExR&:EO4n3N7E]1$W20TX\/O/-Nx%u%p()9%%%%-j%^m:7G-fLăU",]b%%%%z/%%%-%%%%rfu%VSrfOu6e,+3;U1bRXLfa36gGAN_I/LYXlnJefnuP%XăU";kesqeP5HAW<4bT6u5mfLsJ-1HNaExR\<]0h_:>ijG1qv1G/2O:N[j?qYrF3iWrăU".[s^U.2fXn<+HE4YT[WHVo+Lg>4?FGQ&^2pqVu0OlvSggbJ-GUNfS5rQo]W8m4-ăU"IW=QH<PdbHrVLlX?h*[yH]-,>*'dmXH),FWW*#[K+Knv9oNV2;;Jc&>5=c20_AUăU"+(>[5\0iTh&2898d'NlddoFLye4.F8R$gBEzUvHn$l#6p/gGZ*_Vj^n<WDt:%%lăU"&G%up%()9%%%%-%:iI:G,*QQy%N%%%%z/%%%-%%%%rfuW%Srfu-fFV2%%e1(-*6ăU"w^UaSY6J&1hMZjfOtS=L([J0=U0U=Ur:rcy<G%&up(%)9%%%%-%PbRJG40wnjD%ăU"=%%5&+%%/%%%%r(h%UX%^Sgfaxfavsx[C+r8*>x?IdNZb(:*u;)(.Cpg+2DS&&căU"I?G2(OFgMAPMGbo?Zdwj>H3$Hb=4Ml3SJt6yE#=fuMvvvvPv4v6tu\OBocc2.<&ăU"N<P;n%.d$)Iu\gd>Kw]v;ZsG+f9F>^Yf4=wtrHb<Rfa9qu\dJk\27sgbaa7U48]ăEND SUBăSUB V2ăU"Xr$#.W?*m8/F+%DL_<wDTc;%1s;WtJ\w2CUp%UWAePknvdcRKp0wFCk&/tlUunYăU"BlOhPjQ/F,pgblQ01VD1MK?$Bpkf,F:bTrmA4Ftg9yff#G*m<$I1DR/[KD/C>GNăU"a]k87-HH.B9#36nMC?Gf6beMSU4/NlHc9Nd[VAVn7[*#+LX.'t6-l8j>bY]ToDLăU"_>96W=RY_f9m8?fliGJGtmN?K1:(J3e1*'GXEi5FSp4]h9>Rveu0Fd6sAO_7O^\ăU"T,h^*+=2eweZiW:lWR]$8Z%#.b=HMy5661,Mn*LF'Teif]0;raTi4Qf4-'sOhgvăU"Pff\F5UW3^2>lVBRIWkuS*FUHHw681:DEi-'03P$H=lQ?0]5c3_NOo:4qRQ(AprăU"iQ%j5_8jIBj)'x[a^6LIlrt-L7xH<skn5)Hy\j+vFk9oxmR$\R8l6kY\B4=RbNtăU"?.slH5VS/mjc]hBW9_2>Fqq<WE8Vy(Zzb03sf6ulpffG?fhGUs)<4vLByLCr9H1ăU"cm[\j4alX(sacTY\P\8(R(Pz[%;r^f?rfPnFZc^:ZVd+&cY7Xxb6f8*\h6l9(Q7ăU"L7RrJ8Ot6O0'xO+ckni8rL$>Ai8Gt?hWV[^c=op+zQSYwX-z]&kR0qe*doJ'0'.ăU"<B[&PGARodX:55q=sdx>BgWhy$SjFNVNW4IGv6ZOTlshj(ZOf,;I%.3/R0ZC5)OăU"V4aDwoRC&CV=>P\?No&MgmNGb:4ZaZkc<.su)?gUb+Yk9sI+*'T?.r0qWqN9-8\ăU"*\#%<O9PJro4&SB0[1%LUB:\kBRu*k]k<$rOoOeW,>G8Wfq00tcpE(])38hfR.7ăU"vh42M*ZvJGIC'>dP)F:4D#6Vm1&e3-XGkrx]p^Eg;49K0'eXG(=fS77dH#NxgiQăU"^q40IC^BUd]iZ&]5qW+Us7H0=jXFL)hSMGsJYAO7fs_rw&d-5)NEBVi\/d6%Mi;ăU"cG.3g<?m$,%9O4BbFesh7(=2f\/d^/9(\cUk5*$vJ1TwtClzjoQ\m^v',.+p-:QăU"B_9:NcMXb;eX]S)hXM#u/[bk4oBWMi;Jddkzskr+&MTT;'#]46_l>?_\3-\b.<DăU"HaA1injeNlF&(fm_YGJ4Jp:bED9h8:<Lq^Go(dPS^<N1'*m5IS)RuQDwb^z=O,XăU"*'tR:HX$A&$]k[$.lc9Qk&MCo:ZBH(TtNY9V7N#%BX]8vIok4Hx2DjOH8V(PzrTăU"aW-NTwLV5jG44p)bv?OTOV.u&o9clv\3a.rh/RTdB1;#4?r0Lv+VFdr[%V(=(VWăU"i3bDaNm30*e(E1)[VChb0)-w_q;o#9_m4bbI7=bH/mzh*P20+SU'/*+MsvTh_V1ăU"CGp-h=>H7/v5n'k**1T(M4**aEKK$PIW%kxm3TY9Ca]vxMv,(o0.Ko0z/Z8RbCLăU"vtA:H;]so)c*8ko=0UQEb$2zHJg4IYU)b\sacr3#nH(XM'+QG#S6z&'DU$7LX1SăU"p.+t-e_Icih<(j2Zj#$oN2w>7z$M1#C&HMHk2h0+zAjaC1.B8OtC0NS#svY8N6>ăU"-[;Yh(N.ORN)v]VDedkQjL)qvYP*e1DZ4*^qOHkE2wC*$lPAoosji\Z)rUSxb66ăU"su%tEmMMKN=DFDf6t+TR'7AM?B7b7=qWf(cA'QPQ/fbF?=_L92Uv#DVQ2.z=AbyăU"?n)Ikfw&(Q4mZ2jb[B,oO[D43Bp:*[q67uH9%'/&Pd8r^M#FR1BJu<#9v5f<Z8năU"Jcpg]g'L=Xe2R8>N\iE*->2Z[K8PtY\o0uqdVZ+XOW+NOvf(D[GALbo3nM$T2spăU"Ht$%p[^--?\#^fGZ(kam?c$cG/Y#1OZ=A<0h$PZ.:PmW^l.IFNyUsQUtSa9n>5WăU"lE6*k=+bC+Tt72Tigl&[c_Z+x\8.;eZ>9Ax$ie\dAY-b(\w3px^i)#Ow,F._qyfăU"71I?Hc.RtO#a+kH>NXEh#U94rm>b]ON'sh-8.mdETv6OxFNb.&f%twdQ%;luWZRăU"Ui(wAf[mBW]O.+\,0Ub71G2AA:53E2bS)qmjAs]*x^FIi5cW9I2D9<]]F^*H>r'ăU"op'Na2;.,&vhL3nDLo6/Rf*1cse+gKf]]Y0d=]xA[[=Y9:K?50$d9IXQaoF]HD^ăU"7-*Hzo'B1Ph,6k9(H'u1z,DRAY'3r0\Eu7+fl$$zg?\5L(/VTEB(Mp4k(BDq+JAăU"Owtrm'C&H.&DRa-6ywnQ2Ct*tI(Mn/jM%(Mjrd&qcDB[CWg\&*QU-%+eDT&?m4)ăU"7W=eXLHH/9pzG;j3j1>\QH7F:;y+E()rr<Dr)gu0Cg(V13.mT6iioIOk+faFbW4ăU"SSXV&)+EC'Sp2[dNiLnr:A=v-vkNT?,[DpV/%Hdm*[Yw*(<djWi74q;=iJ(cLYTăU"Op7S(/Nrm*<4m>*v_D(lm0YD3co<=VUZsA7uY*J;M,Nr^Xb'>[J9$4u-APYTq9-ăU"wk(2McKY/fKLh/iS,oUdF(=#1A0>z,4\Q^01hq#E245Fn5]xZ$Nj_-yVWNafCo&ăU"[%\bseqe)vDaSSQk4Jd^eFn907gr>wm0w4Cpnd+Koa.f4F'&ZRbD?5Rt'h'YPIxăU"GHCE,kfkh%LGZQ3&hfo6ND6\EE.FHHFkAgI+O>FF9GZ)=p1mjK,'k9kRE)t5'6SăU"q6]eHANbRH[xd;(%U)cN?\IIU16IlR9#$7C97*sm%SZl4^[Oo]4$7zndTd4*1i.ăU"<2mFhPnp$X(O:4rH)67*L9aVP)PH7;,g*:M,kCBiF1Tn?=M.SBI.J6E'DRoLU3oăU"=VV$\17h5dn,yJUJ657W\rX/$W'0<f]A,6lFih08qL3e=LKpVjv#YdpG=>7>pUQăU"Up=nNT6CZNLQ-3qNaJ*c3>t&YPCoueO7]LV=$t&r\pPP^si\\><(a/FSJZZUoi?ăU"R(cwkrq^H?&bb[Ufiwt+aM7p]NQ)xo.-<2WeM\dZJ:yqokoA2Hp(U9H-1UaAa9FăU"'w7C;FaB1v#D?.I+DWjk.:D^lUCtEO8_WOUW'Jm[4_+;f-8e243I7ZzMFX#lX<)ăU"=kwZ(3X,%hn]t3(+x0NE\L/A)jQ5X>4BF&/TU[&7D/i*D1$4DCe?O)=rmV-7l77ăU"TInAAoLI1K05.7>Oh)Y[%QZq+U)ol37,Xt1cV?'pN;S^tqIcIhFij#j:m,/loP^ăU"i#j$BVIl[+DyI:AVM*T<RL)G;?5]-kYL&9pn9R#'il9313$aHi?CsMEbUu(1Rg%ăU"8\NU+L=VYnl1pI6gM\7>OC'E0cN7hD29DI\\zKsWq+gg2Zf<=hkGwq+Tw:GJ8evăU"9x7BvT4QfZryUMZi-9%+SriB0CVrZJp7(bh]HEEwux+5dP3;e)Nk:#IN#Cq*)MXăU"38K7(nl-:qB:VG/F0[wk80;KY[to1u]s[)S.TaV=wHq9,<ucfE2Qlgd.=)E0OZ4ăU"u$Z,?'i]]^T%pd1MH4C3BM:0W*KxfrTGZwd6^9b;b[1<4Qpso)(KVD0Lq=<dG00ăU"LG-r:NBl8=ZG^%6]*I*2\#lJA/*_hD#DW?f\E8tT()W5yw1:/MES26f07=3%y?hăU"*YT3k2yaXGg;1rQ,Y5hq$M0jW-#B0ThFy+x#&CpAK\$/kp//B=5:)^<G.C:0Ph^ăU"1mN7B:^&P612eFo:^_7Ut[fS?F#*kQ1pcu-+VcSQ3;alSP1Rxgg)$OFctkW?$7&ăU"D+B-3Ly$cXn]6lUu6Mc0lIIV]>65xN#?(<Un+XW\hSnqrZp5P#v_LnW/00'%ftRăU"&5vSThAqri>8NN6gDam?G/S#DuiI7eN6[h$*=aHb6u>r59&2m3i/FpVM/QCmTGcăU"or0jGHG6n71Ln+mY:/$UHd8ggR2YU*rv3+a#:^5nI/FXBcHrk#AEB>5Rf;EM=6,ăU"CxB6L+N7xi&T\iy&Gxi>[97GCPojfYV7ZD7b>Hy'^n-zNAS<po9g;,u#0Vy]E2.ăU"wQhn5x550YT?)mFZr<?;RI(0gkKIE1':^a\1)ACi,?WhjKx=Kh%N5\P6rVx]*3FăU"sLMNYxWhfn.8xoG*[tH6-%8M-uxYQAn+R?SHjb8$3aO(m?KMvp4miBflvHGRuqeăU"-kP[7E?M4'[E8NE%DqC,)bz>?<I_m&72md=1TR<W=V2c=t0#%vLSg/<i?,$\8BQăU"<([/1NXD.nr=CBu6^f#K3/TKOD',u)D-<DH_fh%w6r:Emj_]:9Xqyn.m\+??F+/ăU"0dC3Qs%uCs%)$7J<cT3&az>kGfhPSkKjoPXbd<i^DK1dX,u*M3//F:7Ejl[n#1HăU"tG]kqgcDy-hrj8\wIUK\'482mQyhbdIUuO;_XRe$8\kig3--D=0u+iw-4Uk7X_SăU"iah(8jch^p^Pc*__1oWDRZ#quAiD[g7Y&cK+<d(F8&tuhokk?e0)-cRzWVRoOr/ăU"53D$Km?<,)c3ZTdd%WjZcr?TxYG/OJiCrlF.N\da%PJdxyOP6Y*%Rh-b%yaiP#-ăU"w1W0dc%A+xs/2(KkQAQXpK$fKwosiH/WgERboLOVFY]B'C0?')llFbI&UN;3>=:ăU"gP%qj_XV'o#I=5mFC2dtKM#M7l;#[RI.W\Q(p\:u<$'<rl]DJ;d7(=C:_+CMPhZăU"2c*F/ETlT):+jTK7O7FO9N#=g6?9Pgd34sb$9*P+M5I_sM9+S#SZ(Sy6Whg?VWWăU"bX#a&KabfN;W^to\8QV,Z)3ocD4IF'K8gsG1RsiCc?8p)lcgc/d$a=DPas$^[](ăU"\2_DuF)LQhx8+'J'o<8h=W3ppPM(bSwG]Ggtm>,4uDe2F\1MM:QB(Lesk%DUa-făU"NJ*a%fC>5skRVMmcwDm9Ov]4L9oNVPKSe?P#])+ImytBWGn(.d?c;fH>r%ugE7/ăU"LH2b2R1N\b0,rKWm=B1Zh8CWr8a1<imJx[D(]r8lb\uaS=D^Bqj/mCd_T5CoinDăU"F>p,9$F(3m8e$&0ZbTGE38'd[U.t<.vb&ppnx^TC%#7uOgPSNe2b'%q;MHCU#sNăU"el9TtxlC+0g2Gc2n?E+dF</XLYdJ_J)OyEeHMRQ5sHc'DOVk)OO9>$V^NF%,HLtăU"]5Ri=ph\h9fhD*4Uqx\8emQ>YUqx\8=[mk^Uj4V#xnu#jV7g(V206V()YxqVzFOăU"7Z[4F8=4q#R$VXIY^'o>P?'6F8IQJWo=FpNB<nB(E2^KO2Mo3&2kj:+X]]/U_3tăU"n>)ekLDX6L)MTtd3TA<6Fe*_X7wVw?hYM(.H.34uj<pyPQ[3Ld>CXQ?4>4tHXqGăU"^j:HbgI.olsu1a/tX01GtF-AMbC2_?46:K^3c0HlP]3SLkWt<./2>L\cE2X6oj%ăU"n;Y6s>vebkpva7>e.VtS,z'IIK$6N]#\3^FBiO8,BBv[pbF^L'R)j>h,[y2dK([ăU"f,ODWX=P7xz1<A[5QPr[Kqfk1#78]JJA-QtTdwh2fCND*B?/Y,3BO\k#.?48?L4ăU"NcUpqY>mRV:N6o-iL#F)]gYeP1il7]x:acWeJWM[vqY0RV2r#*wYB'kn+[QJFxIăU"'K:;t&ri0Va2:0gR)/Qi*#HAecL&b?&=CJ.m>)k2W^;4i)W]ZU)Awzjmoeb.%L_ăU"&6IHkO'7Z6Cg[fgAG'rs/iC)Aa7)c/^S\<m];%Gd>NJWE&NU2(dce-hu0h_8,CKăU"lb$CF2b\;Ks\[9L0nI%R0[sRoc%X?k,km,pmwDca)#tb=lguJ_$oSZU4(ips\OlăU"TGLhJTI7aTMBmw(3K8e$V[MRb;q,i<'k0#bQKN%7Ql2:N_b^;I]7m];h&SErr&ZăU"S=yb)hLWBF[,YJRlXI?%j<T)Sq=zP%Y(VR\;S^UT6G4:4x<fVljE/hVcW]Vyo;hăU"S1<T9>[#J=8XRGe#1lIsAcNj?&jXk0XS8hkkN^o(,SmzU9uZGG-h0q$BsKj[.yaăU"u(gf4fUMuD*u]\6iNuU7/lGa50GH-&q;aQN=Nm;W6:ayC5Zs-/v+0/]rqq2JGe2ăU",vsKb#=yIY^/hsmS-q?T/xTGD5>bDp*UEvG6-(tesZ%Y?JoKa_gS\#Y1xk[N[^>ăU"\NlBzVPNfuJkHO;MtoW:E&Q4Dcb?P7tdH%7HY,X2Bl$?-ja-Xub?Hg-w\6;w7&SăU"Q,4rg,aFT;r\ZM7LB:7,s]-bm5<#s454+av[TRt?i.$=dOiTodMp9YL&6x)ABO_ăU"8#M)Olm[4qG>oypP#+V3JzwxqPD2sX_LZf0u6:Xjr\>?ktH]2HQdX?6id]lnl(%ăU"ig271'Y?4c6i^#.VUS(\.&d*^HQh5?m+:mX=1\asE_kS2M&G&-)0h3>Zp)KKoQ8ăU"L^-*I(GJp3fT/(K(FMF.=*1S7GXig,JuhL(q_#+ubIX9,?;Xo:j=HK4ZUa*Lg1UăU"0;>anDPi-s%PofXs.^1Mi;4xujrUA=A=zYECscWtW);Y\/+Mmib_];XC*Xfh_T,ăU"lk<<d$<CrUvIl6N)'H8l.R9XjQh%5:OU6b\[8etis)4^#gf;#2MVC50Tsj2JJI%ăU"JY[UuRR#[Epx#74Aje:2*1kcs*6fN]GBS;JOx9D)72'[.q;(EMU$XbxD?l7R0-\ăU"2H7h:>EUgk'B22_#jPSor^dN\I<8j9]lWLhWV%4VI3uC&v)&7S^>NQ]?>kG>\%]ăU"1vi[4H\Q8e)8jnhi\NGQa:m]f?3[6&pb+_:CgQtmfYrL?Ij#[?w:&8jna/((',$ăU"-uS,B&-\lRZPetpROFWfSZS^O9t2#oBTjm8_G*,_Lg&X9BU6n4MC55ydjPIE_f+ăU"k0^]Om'qcQ$TWmVS0j[Gm(>IuiZe4bP'W8GPU_E)uvlq]YgkfE2R?Mc^(N$T^:HăU"u)Qni/+kkooE\NMUz/*x_uzGu]n.'j:9yqVcj0++n.BE-Xi'5)Wg:*q#LE;rNNmăU"Ccketg:t%m5<k985IZdSV\La:_VDaXlDDJiH&[FYBg^9(<q2MJXZ#SBBhbHF.*căU"$l1tc$+9o(tAccC*x4#$\e-3FO=V7Y8GMZKQDk)ny0j8^cbbf7_s?M#yLXxH]qxăU"P\uBN+p'CV2IX;_GnB[OrRKALJ'Pv]ZFl6IDoBlf\m2nF_Fgd^d78E#FOwC_2JcăU"vN7:tjgyod\CJ&,[-/7aG&S_uGKeEL73qBIqsKeIW2A)#s]41wS8A7:8b1DiqnUăU"5_ib=+p%=*APwYI>i*oL/Oi/QJHa,y5B(AN['af>rub5?\TKgBk;SA\U#RbIWB*ăU"vDAy>Lo*u%q%[p3)wO5#99ceF1jKx.jaJj*Ae[N^ONpdU6[-J:70#5xM$*F&rfBăU"aw7HeX67G.wb5OYcGex*k\=%gM>YRB&pk_?i3cVr,z1ledtg?;kX',>A(:7L3'BăU"J4?+MGpIQ23p\DG#0ob-\PZo1Hl;I5I2Pu2d:$,X#T[)#rZ>n]U>q;n<g<%J<9%ăU"eH?t+oSQLu&nYS)5.W.PS(/IE;wajWQY&tb%_mhSVTbL>XT:\)FJWZ7N=rP=u:+ăU"L?-1XQ9CaWk7oa*8./,QaUDVET61E,MP(Y0beL8FE2+Wn'*JR78)N6.PW>6xb_%ăU"7b%&ftV-7:xg(cNG)&WKS/^2DDJtBeJRm1\tGDWz.8<^RfxMw)Xi4.RxrfsnSrbăU"j/P$rquU,cA^mS*PxE=PXY,Kjia)xZc*LZK)d8*]v=Tq(vR64*TAyGB\L(t4%j/ăU"QTR\^D'Amq/IdZi7a;mMupyZJ\pk$Qa<bp5S(1L(=&4_Jt=1Maxg$Os?(N&eVd[ăU"C1a8<MSs/<I1j*K2N*$^UOc?NZ&'SM%6O2FVv9rYJ,I&l_e:(*H+S<Gxw,%up()ăU"%9%%%[-%3.AsGYd8sP%*.%%C+%%%.%%%%uq(f(wS%lnkJ)bLu:9?:>TS2MIgU+\ăU"nrR+f6w#Y[F7Uv2.O4(eREaMpj:&/JMwM+K9W'[-NM#3Gs+.eDMWmnqAN9S=d3(ăU"kayBr=CAQf*+4:/uYpV?N//qgh4kTn)CV8co(X$YkX2x;mcr0'k8E&=C9xD.&UOăU"%%'E&W)oO'u()Yf.A7%ro4>-O&dU)U:(-'%pS/>%OC(?)]?:B)7C-PUW.)IP5%=ăU"f5&&$5>v%u&Og*>w)ZSoKM[,)I%?4g<7)^RoJ-;[%I&m_g#a,3QB//pUY)A;'N/ăU"(*q59/ag%MCoPws%9PJo5RKsYRPRCO(Ws1PjHCQ+&sQPPNCPAs[APL<2Xd_7e%GăU"PaIe?'RJ7)\sJ$ZY%eo:8>V)XOoUZ8F)/Z[o2Y8<SWE/oR8QDSYEeoB8#QSB?ZAăU")m0:/$ele4+QO=L)R3_C2Yv/79>>k5XJ/YF>FkZ(V/1>l<?W*\/Q>DN?Y#/mA>#ăU"?'BU>H23S\m.%6_*]/E;:LG(3Z/1:'jG%*z1CZ'r%6,N12n'hO)CZ1R'spO+./1ăU"B'l6O*DWFqT/(\0P7943]OB/Wh?m43Rp].*s$x*ec]2psbLe]-](GS_Xe[R]0GaăU"?,e%]O,G$B*ek1TBA.^0.L7g7n_%DAAg)n_84)5M+7>W'InYX5%>Ny1)X0>.pTeăU"=+&[=:l*['kiIjmSV8Nxx$V0X(3<L:RjE7<v#?***x,r/c<Wp;ek)KgB]P\9hsJăU"UcQo<IvN,;>-W:HsM4.YmnHu?Y#8<hhE;wge4AVl<1&3?CcXs9Vd_<A2iZ/lN7hăU"D4/4i?[7azJXXX9SSBRb^/^O'QUBBO53gnc8%;Bjj[2,zAu-5/2o.n##,U>JDVXăU"Z2[WWu1#+jb2PRaJQB?(pcpOl\&lh.iFp4ewYXNd>VV^smuKW4J<scWLVn)TLDzăU"PU%m'UCC(rPLPb$Md82v.;YS9W8ne(4XINZ5EKwbtmeaHe]cnLojqS0*vfsYrGhăU"jGo=Rhvbd,#Xi5J;>DiJ,zZwj#cg4FKR)B5x=daMM_Uf1PZ,rS<RPk0#BhN#5lTăU"1FXhB:tClis(.l_q^[P;%VndGiFhfkEPL$bAF)XbffZ/jNKN*t;n_k[b0dh'XdYăU"YcFdtHCN\q-Zi=u4ub/[ONkQuD.RbTxOa$fJk>UL%LW:/.P0(IM.fvcLTr.hPcYăU"qjadR3xh?s:dxeQc'7mQVsI?*3lLh*JfwFYjeNq(EHUT<.8LSFkQalj\8sZ?YYkăU"TTn7j<Xn)_g\uIS_aZ:WTj>fZ7gGELUV:v\h*yMWofttNar8TxalVt(q+&8v1PyăU"Y-ofRTai(,DYN6aB.OYhg#<oixyq?)WOEk&wZrWitS:\H#lixM*IYXF2(C8b#B0ăU",Sd4jkUh3h2AZpb3wFxr5wEEPPKmArw=RZ1Jv*cRRS(xJG9nns;j>s?[=*($VLfăU"]n8_1Q>.*kt4ZQHOY9Vd2d[qz7NK)LINvzl&GCveCk;B(1dDAdwq+-VZBl4aFO3ăU"hKpa[wmOrjl0XV=zA*t#x;bri]-/-8V]^j$d0n=QX#<u#\,WNK*nLr.FaGh3.%KăU"2NY%ZPLq:NUf5T\MX,D#XNTxk,LZ\No*pH_X4wKjtIhUnYQ&xMbG?$/)>:pfc+xăU"4LVj0OTq*5s/+2P$gn=C3.9kLx?3vDRLZgQnd\:O+80GV&dZwt7qTU=xuMfa-G6ăU"PP-:cu\r272VXKd;+Lsik$cgJg^lzt*d(mkGC^0Z73(tADpwJZ>.;rZDT0FZ(KhăU"JE_lMw8*asu?\.V,mp$Po*VKOH6uB\*K2xuF;MB4W[Hc'__eKcMt+,qw<Eo6R_RăU"$26p0M0vLT>;:FSF-MGv2R2Y&]1?,'qdu%p()/%%%%%g%Z'3aGO^>%?,%%%%,%%ăU"%%-%%#%xn)%jSrf%uZVQ%ZU2/%up()%9%%%#-%Lz9_G%-3A:w)7%%>9%%%/%%%%ăU"wj%firj(S%YU3N'<x]\[5wWWhwVK^hvF-LY&3ESrXlINTuf%;7ogQ2oj;D>16*-ăU"dL0KgBMK.o+haF\$)31=^:Y)gn^%Hac4Prhfv:X)MB(0ZSBW/:=n:fWl'K=heOTăU"ot&-*64&Dj,PJo<m^-2v<4fl7QVJd7UZFVVn+_i4CH\tT3uR5ns$<G%v7CAm4)2ăU"G',Z%S_/*<+?m7Nha3Qu,i9F^GR5#Ey+Y/oG<J^No6QNTptgggQF:1Y%iWPfsXsăU"7>lstjw:-hq>wvaP)SkkBn=-G_,8Y?p4w.-#;:yw^p81(i</M&ZXv#M+FLn)BV6ăU"=f-_WE4GgC1d;T[I%;txLBgmBp#Zwd:-dT=LJdbc=&k2)E&Ba.^JR?,5ofG%][ZăU"6Zr(pa'B+u$IR3<>:dYh:vyQ$nqMEGr:9PR;x1C84JN=+cHW[g*A3V<,gM=%jG0ăU"NHfm6/AxMvZXt9&[JEd6rAQmd[9-;%<G.%xA2XxLEl$p(_FO))jR$UKM*<UH=11ăU"usW%E*'s:v(boZQUQ'g:;:\MV47*Wpp6?j]nVhH[,[JtN:-&f>Y<C&jM1f#fYV_ăU">o^xI/g/65G'TFFUH_xrLbpm/(X$zmNT19g'twq5DsTvOSZ?q_e3:#/6nlT2lRNăU"'bp6L(pr>Ffq-..Z+*d]=GMb(V&RX:+3In\D2_=:r''A]f$_d/Fj[/jwY9S?e$EăU"TPSWta:?=>PFLds]:JL#?Jz)<1[05$iRn2WIdXdVh<-aCNVrV%b9]p%/oLW#1.8ăU"G$cr/;K#3?Y%.\;w.OP(U2y60oiGBu730_ZPoh'qL$BC't6;AC[Iw\/mE)i.<,7ăU"&ntgE#eR#^^dGg,uo30j,QkS0m.[,1a/$b9q1Tr=*0H/gekYPJ'7Q1KQBZ?,m\căU"F53&\4?DQ\#;3Ck5n?6f#'61wd8Q:^f?1?2hn#%$2Cf$>s,_$#(]/Xo3UcD1GnRăU"=;+Pc[[?.;C'>>jt]S;lSd>4k.C+4o34l4<=8$0F1V0WvN*EDmHn\DlEM6m'C])ăU"(0#e67$Rh]<,v<.:Fv?^I6?g0+^6/9K1?BhetET#6j6+C_2F-Rd6+OlK<(1g9)aăU"VrUI,v)zoGo_x+5aC-etgX;EM'aQ$^Fuxw8K>dr8vPb?5##BG_kP82]<H6vVQp0ăU"8l2fV*V)?F>VWX<9<CKf9+pbmG'ldPdUwlJd.mt/xu0Z^$I6ZKRLQ6.2MI#zuGcăU"&s67\T_WNGc*KYO2qSyee0]VlVLY.,]+s#)1tW$82<\\+<%F8Dp$aPDZKJDHeBmăU"?K7C>?Y[$*Q/*e5cZAk[gHP9R0hMZSrM26My%oT3l5ZrhN<N*79O^k2j<D4wL]8ăU"va5Z.ZE+7cZaRM^^y55&KU/0M?_-GI,x</qFVLBb1)\J\g8u&EQ8k[75o7W8J8DăU"usc.0Ng'x1RqLO:/+HD+VUdFrIqGJbtQ_:(KTQB'?<VK:ef$q-$IyE3qs1j2qQcăU"1i4rB9p3r^/0([aC,o'c=j[RxmBFU'd:x=kL5VnpvlG?dn,p;RNw(%up&'%9%9%ăU"%%%-%=v'IG-k+lG'P)%%%d5%%%0%%%%%%%%%&%E%%%%%%%%%hz%wwjs%ySxy%xuăU"p&%'9%9%%%%-7%z7SL5x?n,XG.%(%K/%%%1%%%%%%%%%%%E%%%%%%*%%l.wf(g%ăU"wnpS%lnku%p&'9%%9%%#%-%1]7S59X0HeK%.%%S%/%%0%%%%%%%%%%%%E%%+%q3ăU"%%%lwf&(xys%Slnk%up&'%9%9%%%%-%(azS5I*qOY&c1%%%M2%%%-%%%%%%%%%%ăU"%E%.%%l=%%%rf%uVSl%nkup%&'9%%9%%%R-%^m]:G-f:L]b%%%%z/%%%-%%%%%%ăU"%%%&%%E%%%&&J%%%rfuV%Srfu%up&'%9%9%%%%-%:iI:G,*QQy%N%%%%z/%%%-%ăU"%%%%%%%%&%E%.%%5K%%%rf%uWSr%fuup%&'9%%9%%%#-%PRoJG4w(njD=#%%5+%ăU"%%/%%%%%%%%%&%%E%%%'.K%%.rh%U%X^Sg%fxup%&'9%%9%%%[-%3.AsGYd8sP%ăU"*.%%C+%%%.%%%%%%%%%%%%E%%%'uc%%#uqf(%wSln%kup&%'9%/%%%%%g%Z'3aGăU"O^>%?,%%%%,%%%%-%%%%%%%%%&%E[%%%H%i%%x(n)jS%rfuu%p&'9%%9%%%%-%LăU"bz_G%O-A:w[)%%>%9%%/%%%%%%%%%&%%E%%+%ui%%%wjf%irjS&%YUu%p*+%%%%ăU"%/%%/%P['%%E%n%%%%%ăEND SUBăV2ăCLOSE:IF S=80AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăBS V/D Berg                    TEXT PLASMA                    buzz@ddsw.nl                   07-07-97 (13:00)       QB, QBasic, PDS        142  2543     TXTPLAS.BAS DECLARE SUB txtpalget (col%, r%, g%, b%)ăDECLARE SUB txtpalset (col%, r%, g%, b%)ăDEFINT A-ZăRANDOMIZE -TIMERăCONST PI = 3.14159265358#ăDIM COSINUS(160) AS INTEGERăDIM RAND(255) AS INTEGERăDIM oldpal(16, 3)ăăFOR i = 1 TO 15ă txtpalget i, oldpal(i, 1), oldpal(i, 2), oldpal(i, 3)ăNEXT iăă'made by :ăă'omega , omega@inorbit.comă' buzz , buzz@ddsw.nlăăFOR c = 0 TO 160ă    COSINUS(c) = COS(c * 2 * PI / 80) * 16 + 16ăNEXTăăFOR c = 0 TO 255ă    RAND(c) = INT(RND * 4) + 1ăNEXTăăWIDTH 80, 50ăLOCATE , , 0ăăr = 3ăg = 5ăb = 5ăăFOR i = 0 TO 6ă txtpalset i, i * r, i * g, i * băNEXT iăăFOR i = 7 TO 15ă txtpalset i, (15 - i) * r, (15 - i) * g, (15 - i) * băNEXT iăăWAVESIDE1 = 1ăWAVESIDE2 = 3ăWAVESIDE3 = 2ăR1 = 1ăR2 = 10ăR3 = 20ăDEF SEG = &HB800ăa$ = "şúţ based ţú"ăl = LEN(a$)ăFOR i = 0 TO 8000 STEP 2ă     POKE i, RND * 256ăNEXT iăposition = 8000ăposition = position - (l * 2)ăFOR i = 1 TO lă     POKE position, ASC(MID$(a$, i, 1))ă     position = position + 2ăNEXT iăposition = 7840ăa$ = "ÉÍÍÍÍÍÍÍÍÍÍÍ"ăl = LEN(a$)ăposition = position - (l * 2)ăFOR i = 1 TO lă     POKE position, ASC(MID$(a$, i, 1))ă     position = position + 2ăNEXT iăDOă    WAVE1 = WAVE1 + WAVESIDE1ă    IF WAVE1 >= 80 THENă        WAVE1 = 0ă        R1 = (R1 + 1) AND 255ă        WAVESIDE1 = RAND(R1)ă    END IFă    WAVE2 = WAVE2 + WAVESIDE2ă    IF WAVE2 >= 80 THENă        WAVE2 = 0ă        R2 = (R2 + 2) AND 255ă        WAVESIDE2 = RAND(R2)ă    END IFă    WAVE3 = WAVE3 + WAVESIDE3ă    IF WAVE3 >= 80 THENă        WAVE3 = 0ă        R3 = (R3 + 2) AND 255ă        WAVESIDE3 = RAND(R3)ă    END IFă    position = 1ă    FOR i = 1 TO 2ă    WAIT &H3DA, 8, 8ă    WAIT &H3DA, 8, 0: NEXT iă    FOR y = 0 TO 49ă        E = COSINUS(y + WAVE1)ă        FOR x = 0 TO 79ă            col = COSINUS(x + WAVE2) + E + COSINUS(x + WAVE3) + COSINUS(x + y)ă            IF col > 127 THEN col = 127ă            POKE position, colă            position = position + 2ă        NEXTă    NEXTă    IF INP(96) = 1 THEN EXIT DOăLOOPăDEF SEGăăFOR i = 1 TO 15ă txtpalset i, oldpal(i, 1), oldpal(i, 2), oldpal(i, 3)ăNEXT iăăSUB txtpalget (col, r, g, b)ăc = colăăSELECT CASE căCASE 6ă c = 20ăCASE 8 TO 15ă c = c + 48ăEND SELECTăă OUT &H3C7, căă r = INP(&H3C9)ă g = INP(&H3C9)ă b = INP(&H3C9)ăăEND SUBăăSUB txtpalset (col, r, g, b)ăăc = colăăSELECT CASE căCASE 6ă c = 20ăCASE 8 TO 15ă c = c + 48ăEND SELECTăă OUT &H3C8, că OUT &H3C9, ră OUT &H3C9, gă OUT &H3C9, băăEND SUBăKurt Kuzba                     FLYING SAUCER ANIMATION        Tony Cave                      07-07-97 (05:17)       QB, QBasic, PDS        113  4944     ANIMA.BAS   'The following is by no means a finished product.  I just thoughtă'you might want to see the no-flicker animation and page swappingă'on screen 13.  The program uses PUT to copy the page to the screen.ă'Copying a whole page, though, slows down the animation considerably.ă'Any suggestions would be appreciated.  Just bear in mind that theă'program is not finished, and some of the subs with "Page" in the nameă'only work with page one.  The animaiton is done by:ă'1 copy screen to memory pages, page1 and page2ă'2 doă'3  place a sprite on page1 (color 0 is transparent).ă'4  copy page1 to the screenă'5  erase the sprite from page1 by copying part of page2 (PageCopyBox)ă'6 loopăăDECLARE SUB Attrib (Attribute%, r%, g%, b%)ăDECLARE SUB InitPalette ()ăDECLARE SUB DrawBackdrop ()ăDECLARE SUB DrawSprite ()ăDECLARE SUB PageCopyBox (x AS INTEGER, y AS INTEGER, PageNumber AS INTEGER)ăDECLARE SUB Stamp2 (x AS INTEGER, y AS INTEGER, s AS INTEGER)ăDECLARE SUB PagePSet3 (x AS INTEGER, y AS INTEGER, Page AS INTEGER, C AS INTEGER)ăDECLARE SUB Snapshot (x AS INTEGER, y AS INTEGER, s AS INTEGER)ăCOMMON SHARED snap() AS INTEGER, leaf() AS INTEGER, swp() AS INTEGERăCOMMON SHARED OldX AS INTEGER, OldY AS INTEGERăCOMMON SHARED Page1() AS INTEGER, Page2() AS INTEGERăCOMMON SHARED CurrentSegment AS LONGăDIM Page1(32001) AS INTEGER, Page2(32001) AS INTEGERăDIM snap(15, 15, 20) AS INTEGER, x AS INTEGER, y AS INTEGERăDIM leaf(10, 10, 20) AS INTEGER, swp(10, 10, 20) AS INTEGERăDIM t AS INTEGER, T2 AS INTEGER, T3  AS INTEGER: SCREEN 13ăCurrentSegment = &HA000: DrawSprite: InitPalette: DrawBackdropăGET (0, 0)-(319, 199), Page1(0): GET (0, 0)-(319, 199), Page2(0)ăstep1 = 3ăDO: FOR t = 0 TO 628 STEP step1ă      y = COS(t / 100) * 320 / step1 + 100ă      x = SIN(t / 100) * 240 / step1 + 160ă      Stamp2 x, y, t / step1 MOD 5ă      PUT (0, 0), Page1(0), PSET: PageCopyBox x, y, 1ă      IF INKEY$ > "" THEN DEF SEG : EXIT DOă   NEXT: LOOP: SCREEN 0: WIDTH 80, 25: SYSTEMăSUB Attrib (Attribute%, r%, g%, b%)ă   IF -1 < Attribute% AND Attribute% < 256 THENă      OUT &H3C8, Attribute%: OUT &H3C9, r%ă      OUT &H3C9, g%: OUT &H3C9, b%ă   END IF: END SUBăSUB DrawBackdropă   'Draw Skyă   FOR y = 0 TO 199: LINE (0, y)-(319, y), y + 56: NEXTă   'Draw Planetă   CIRCLE (160, 800), 770, 2: PAINT (160, 190), 2, 2ă   FOR y = 0 TO 5: CIRCLE (160, 800), 770 + y, 50 + y: NEXT: END SUBăSUB DrawSprite : DIM t AS INTEGERă   FOR t = 0 TO 2: CIRCLE (6, 5), t, 21 - t * 3 + 16ă      CIRCLE (5, 5), t, 21 - t * 3 + 16ă      CIRCLE (6, 4), t, 18 - t * 3 + 16ă      CIRCLE (5, 4), t, 18 - t * 3 + 16ă      IF t > 4 THEN Snapshot 0, 0, t    '  X, Y, snapshot#ă   NEXTă   FOR t = 3 TO 4ă      LINE (-t + 6, 2 + t)-(t + 6, 2 + t), 21 - t * 3 + 16: NEXTă   FOR t = 0 TO 4ă      LINE (-4 + 6, 7)-(3 + 6, 2 + 4), 21 - 4 * 3 + 16, BFă      LINE (t * 2 + 2, 6)-(t * 2 + 3, 7), 14, BFă      Snapshot 0, 0, t                  '  X, Y, snapshot#ă   NEXT: END SUBăăSUB InitPalette : DIM pu AS INTEGERă   FOR y = 0 TO 199ă      Attrib y + 56, 0, 0, INT(y * 63 / 199): NEXTă   FOR y = 0 TO 5ă      Attrib 50 + y, 0, (5 - y) / 5 * 20 + 20, y / 5 * 40 + 15ă   NEXT: END SUBăSUB PageCopy (PageNumber AS INTEGER)ă   IF PageNumber = 1 THENă      FOR count% = 0 TO 32001: Page1(count%) = Page2(count%): NEXTă   ELSEă      FOR count% = 0 TO 32001: Page2(count%) = Page1(count%): NEXTă   END IF: END SUBăSUB PageCopyBox (x AS INTEGER, y AS INTEGER, PageNumber AS INTEGER)ă   DIM xt AS INTEGER, yt AS INTEGER, P AS LONG, c1 AS LONGă   PCBSeg& = CurrentSegmentă   FOR xt = 0 TO 10: FOR yt = 0 TO 10ă      P = 320& * (y + yt) + x + xtă      IF P < 32000 THENă         CurrentSegment = VARSEG(Page2(0)): DEF SEG = CurrentSegmentă         PagePSet3 x + xt, y + yt, 1, PEEK(P + 4)ă      ELSEă         CurrentSegment = VARSEG(Page2(0))ă         CurrentSegment = CurrentSegment + 2000ă         DEF SEG = CurrentSegmentă         PagePSet3 x + xt, y + yt, 1, PEEK(P - 31996)ă      END IFă   NEXT: NEXTă   CurrentSegment = PCBSeg&: DEF SEG = CurrentSegment: END SUBăSUB PagePSet3 (x AS INTEGER, y AS INTEGER, Page AS INTEGER, C AS INTEGER)ă   IF (x < 0) OR (y < 0) OR (x > 319) OR (y > 199) THEN EXIT SUBă   DIM P AS LONG, c1 AS LONG: c1 = VARSEG(Page1(0)): P = 320& * y + xă   IF P < 32000 THENă      DEF SEG = VARSEG(Page1(0)): POKE P + 4, Că   ELSEă      DEF SEG = c1 + 2000: POKE P - 31996, Că   END IF: DEF SEG = CurrentSegment: END SUBăSUB Snapshot (x AS INTEGER, y AS INTEGER, s AS INTEGER)ă   DIM xt AS INTEGER, yt AS INTEGERă   FOR xt = 0 TO 10: FOR yt = 0 TO 10ă      snap(xt, yt, s) = POINT(xt + x, yt + y): NEXT: NEXT: END SUBăSUB Stamp2 (x AS INTEGER, y AS INTEGER, s AS INTEGER)ă   DIM xt AS INTEGER, yt AS INTEGERă   FOR xt = 0 TO 10: FOR yt = 0 TO 10ă      IF snap(xt, yt, s) > 0 THENă         PagePSet3 x + xt, y + yt, 1, snap(xt, yt, s)ă      END IFă   NEXT: NEXT: END SUBăBobby K.                       WINDOWS LIKE FONTS             christie@intonet.co.uk         04-01-96 (00:00)       QB, QBasic, PDS        870  57455    WINFONTS.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"WINFONTS.ZIP",4^6:Z&=42867:?STRING$(50,177);ăU"%up()%9%%%[-%2+A+GAA-p7P-%%%OX%%%.%%%%wt%rfsS[vgkf/'rWIIn:M$^6dăU">NDd)JY(9'q\<3VJxYy\IV_0zA>CbWEWlYFQjZ[+)Dej;J&;+E)<n$ziYDqWHGmăU"5tg>r\aGEA030Yj<pg4H-+\B[fI<DOs\L$n$>nLu6V4dmRDFP_($6hr6Gjw.GJ\ăU"m9IBsSrVrXJ5:m>?2W^WteXTW(>Z4[^Wj*jJ9j\jD.V/=)KX/]Rlt:rYK&EeXf5ăU"N>Ba$klk4:r6>Jwtz>>w4c\Zc*sv<sGhp<6>o;r6.mwrMJ4pkXiEq=qq,U70t<făU"/C=L$osnm#gM^cwkw7p8;qnOduP8K(uc8d)Wxhw&<tFsL<v&s4rtNf8TLDeLt<hăU"gWaTpCe*v2T?)KAU#IabG8uicYF%f=d68Nc7>NX]nXEHSKqUOi%WL3XxW?iH[;NăU"fib)kkJQaTPXwh7dj?W88nm(mCtKa&3k>v=^<EJ7Trr\?8&r9(aPKGd6i0i2qHeăU"/03>qqUM4q)K-HsC[sY0-2$I.IA2WhhEZchjB*Y(s0MAg?em_sI:mc=T#'_E%NJăU"WcqpU^*I&aMV'L1nO$2s(0;qfQ)Yna=-o2$c%i(p)>qP4=UY&X:q1=KQ'X1C*0)ăU"o\SKAlEE%?&AixO7P\^[9i.4$S/:j5Z#Wq<A^J]-#/PmHE0h?^Wt&[K4^-kL7icăU"h^<T^07u\$;g4q[.XmIU\<*qh%X>kOsu$fyPW;8-*4GcELO/+*5]D?V?a'qUovmăU"mc:%JAA5s,/Z;P6B$*jD[S6Z=0\Vik^>kv:Og*=5D9Jx1.?K%fbXoJpvS*RTD0kăU"2b5YqiSxC<fX<QL28$)Elg0vp(H,iUW6-ZBKR4<%?8P(DGTHr&<.c,K%%P,UN]lăU"L:)]:=\oZN11sieHqxO7d23^>LyAEswu<OGmc9A[uPA&7w^\GYq][GV\iw+YS/^ăU"([i,FPjCUo=h_ljr>>hD/qesTW:6a1=R.$C_=0ugIH9^p>SJZ*HqE4<CA0z-6$*ăU";DU;*;Ic2Dd7h<LcGQG2*4p^+,*^nHkmVUKr</gEP^*?\vyd1A^qif$HtbUADk+ăU"OG=ui<g)<8>LMc3h*>Cjf=DY;fPp5m0&wq(i_(9EKYky[#&4)/C+=Nm;/0]d(ffăU"EnCHDCK._'LN%=EXV,4n>WoAV4&P*CCN\[aOu5i+wdd^Ae4i9'Fd$AbF06AM8-1ăU"RAkmpj;tm2k?/K<enhrL&e6R,or73][c[O]>k8.U7'P__a'iY[:87s:+2dX9kNbăU"+5s%/F)iSR_6G[gTsK_kP0w_#WNu-IhF<+PNJVyF[V/:<U3IGE1Mf;,h]Ij.PuiăU"zaGAO5h>\;FA<[68_O\;14qc,%T(^KyP[*7X*pe+-2qCJw>'tBOz*g)zkLPH(=-ăU"MYuFmfPX(X-USIS#J48'Q2NHlJEv='rG=S;r*Lm_<o\#u'3QkF$Ww]#=?HUS;*jăU"&,\*/b$9iZGE^k%6-'woYP,?R^+5/KnHFNH=YFM8/rC*$MuRl-64=:\S+_j7XqVăU"D^0:&e\Q,-?eS1BrWyl__.W-/2urSm>3;>b\Z-BAJepi_y1<W/&oz]p?f,a;baEăU"D_Wx3WGcI#cgO5TU/.-mg8;/1*[#^ZL[OUN_PU.qh3&\CF+H]vf^LkLJ-lfDI0[ăU"^j&*m&D2gWQzX-?FLFf3?l[_Yw)Fx7T_HYtg]WtQB;;$ZpYW3c$Jl\fK4r/+\IeăU"1:p$/PL__ts/\Vro<V=UHxUE$qjvbNBy?Q>$liNpa+Q4Oy\kYnN1*/9i]qaM<F7ăU"3C>=x4a$-h-4VRcbtP#P_A_\l0q]9$%TR56+j?V/bB6l[9II9:9/wep1n$\?AU#ăU"B]\i-FzZFul1*A:<b*Nd<srRDHTxdWo[=Y'.)6lMlI;j_H*VD;EguhQCrr4c)STăU"*^w$Q:0'my04O34E%e:.2oO3#mSD<oh%aGfr0?RBF#U^Z>Eim52AZD,>yt<(VF^ăU"+F4EZ9oE_\DGilDJ,uuY*)h#*FSp^I8keSt9uR7PHpi4]I=oAB+=jB:kQ?+Z2H9ăU"C]#/k'HED./TK1.VS$b-/hH):NaCA_)0z5f>l*wYBAsx6VEd]hGFq.JYx>5k\H*ăU"Yp(:=TZoJue$J7w3Zc,6:DJ^x$Yd'S+M6z/ljS7^lQxjB3:cR=:J8jp/4Yps+&HăU"i_a'\4O7nnz9ZDkkNo7hudhM*w__j[\f/_Ep'EQU34*?0;L=2wrWH%V/5<3$4AwăU"EK:];0MaXa9j9lb;Lm._DU[nrT<*U7tvGngcW4B]ut0TtNO0v6-_h;HQofEcoRXăU"kJJc]B-hW+\AuNx0A3NG*p9-m.Kf4R5DZ),Tur>I'tMT%zk'$ASE&:1c;A24h3VăU"^_rfL4FlQiF2yW3>%>uP6MRlmL=NX?j?WlB+r3yW?sR2H-_^<)$[uNMIDF$Q;GTăU"CU<C^YfG5'eS7PuU,tgw9?^D/ptxtiNosAk_aMEvWOAX&lY>QliYs%fFqA7t6/uăU"4v9L?mMeKj]B.Ryy4.WdV\w9ok,<:Cx1Os;q;sFQ2T_(/.E:]g3bQH#RoH;k<W]ăU">TwpG-A3+a9[zevt%T)7Qt,s;a_5s>FD_\.jHv;sos.bv_czI7SD<Dc2:tL$qjMăU"AELqVASpoMFNUE*XLV;9vQa[VGW]ss;02Ft]_Ncwr]O_cwrS]_cw_r]_c2wr]_NăU"cwr]O_cwrS]_3g'w,up%()9%%%%-%4<++G+GgNF%=/%%%gg%%%1%%%%ynrj#xsjăU"&%SvgkEf(rW#In:M&$vxz4XV,:4(w[]_CvQ[AmYj+L,8u:s9J<c3JZf?e%90N;)ăU"&)4r<Em/KQC3<9u&J&/T^YW6#2W^IS]Zwm$<j+q7],1REM2-T/4fsQj7f$g>((VăU"n,X3)JV1U^5iAW<lh6GjT6<JiI1NIYhmuLs4JvXC^x.vXauXx8(uNyOsWJ\JC,răU"LrD6r<q,*JPvG.8tNpk>ddZs0s4fv<L7qFtpnKW4JNfhbM_EchDntH^ETrtnahWăU"pNXNc&8Wqim/>iu$:>Z*$UT10xU+b?t=RTtlvrRVNm6AY=hU>KGBm*q*HhC^l&căU"83kRd#OP8*HY2^VzMn)LIlntz8Y)v#9i*IMflCS6PtM+oK?S8P[dkt]7sasoau?ăU"agaLdr^\98_7cMM#K>-uc]W[D[*F_Wwu,UHVqL&w-byrv=0ohgW7A7](SVM$EnWăU"nmhxl,)7S$_5bWF9v>(g5X<LoT%#([^htqcBs,lT*to14^wXxVbyb[2F^R;Z.r\ăU"'TG-^WCWW#x028[%v6C,7'R.8gX/(KtW85<,G(q+*?A/1qH)98Z+fiOUKRRC9zdăU"tMh+pqee7j%2Vi3N0t#Uv^WIB1U+EbG8W$&kVB_iUo:'gXp$<ONhsB/Z#9Rk^.?ăU"IdiuI];z[5i,Lk7i/imezN'1^mC*M-l0h%Mli2TwItctXd*afVWk-_1f,V9BohZăU"Vn>6Ol9XoYXaw(??8m#<D36CY^+gbX-&iqa^9?MNR?CTvle*:32*PMv[,^PB]qLăU"U3,]bRDH\46'AheSVY9QNkQ2rOk(6\^<Ox%bg;;Dtj_O33Biwi=(t9FEdnI;q6aăU"Z5,v%n'sdG52$g3rZ*o(RxFJ]t(VT=a<>?;XMQGQSXh2g<+I$5SBqV_n:ol*Y00ăU"9jLiVNnn6\k'<R,Zi2UDQ=H7eD>ix+0qWYK5x1;_X-yLScVF'#t0+2:'Cf&id/#ăU"78G<ON?,58.b1D5#j[\<YjSsFNCY2.W&-*#:8<fxOA=I[ieg%B>qg\J8*<)V#oxăU":UqI%HBoRz7LEN9kk]TRLE/Nt9Eb:^hppJda;Aouc](BBZ[YF>h-;&K.7[JW^KZăU"L1Eh6Vtc]W(h%prgr\xZhMJm#NQFAcE+D$Wpq_5lL:jx8t5$Jru#[0<V6;d;CsOăU"d:8qgq/rs;>Qb:v0Ke(bt;#=I9H^^>7C=OfNhQVSiV_ET8T'W5T.]<A&(PZhS<făU"Mq?=JJYj#7axcX8;6s?ShvJt&c4p46u9(E#NX'V<QSK&M6YKR;1zkR26kiBjw%căU"\C)rGFME[]k^_u4emj;acU)VrORq9j+&&Fa%T_9hB9.UrK^L<LxX/*#mn&q/6X6ăU"lTT2kycS[3m'g,dQ\]f\kkiL7'#W]lZiYC2$DVE)F-IK:=]N[js8Pn=G\$<\)_QăU"t'DMQQY]Si\kHM.QCB7#R7Rt\KgxAbqDjW[Fx<L#Q6%ZwYy7?/\m2UHLKtiH#TJăU"c#OxiE+?bLGB(rlJl$=/C?7hA+HM4xYiE^;aDK&uQ7jMS5Yf5>Gg4?Q50\*XSRYăU"dfvN*r(OtF2'P<kV-+G>THSpq*l-]1xW'pNmvYbCJmy2UDxi+CRMmpJX2EbXsTFăU"XEHvNy>%$NB;-Qjm7VG2\D:pJ;*-<#t-'(?v$FB<C4a:e8CYhD.Ng&-2mUko0#uăU">Is.e5l/Nr_e.SLwX+\_Vf,=6c9CCObFyg9r[TE#'B7,n(B\nalH9BBHUXD<JQcăU"B)%h=QE=%LEu)>M:Dqx^FmQe-==9J7u*q=lT9mRo,]aNcn)rnvOPjTo5U-Zy;&găU">w7vflq1:7jhEGEEHp9cUSHXqWyD,?NwlW#w7g+w')Rl>Ni3I+SYb(0c&t^C3BIăU"A,YkgrG>\F6RTX#VKey?I[_JVG^C[tnstn4_.<Q+XD7[Dq=z?qy)(Ihy^/u22gJăU":LZRb2G$&Q;Vk/&XVesl7q+s),ECT&*>F=NZcvMz>>38Dp2sJ;Hl#$5BI7X)cl#ăU"V&M*BKk/)'I,\f%bdAR0kc.[UO+YSKruQTZa,\-4Q;XP<vQ$X,Nt#n;h#hK_V6păU";eh0I,*x'%=^/[b2X<Qj10g6&??:q.CI*_X4d$D-gZc*B0(:g)d^vx+dYj%[E4XăU"#z>*0_0(cV3E$Z%Ern3BKY12s)beTA0)Z;P0s&AUe+(+/'n[6v*-sRuU%hiz3'făU"5-0'QXZDKoFtPO-El%WbQD9Y'a(*+J]]e_J%ux]R:BYSJ55bJ^[]u'ZpA1w1#yjăU"s8ni*L[XmpNBe=kqa8opu\E>H#f9&=pGY]C,.Ga_yuUW<A:0yGY-#gy>e2Xk<GkăU"cQHGO6U/_5B>1h\BftRX]?*o[_OS=)_9Q0A3=tQB(+wE;$eW<I0+%tRq4aHrI+căU"1Vy<o]5R0]CQ'6Dd6CBC3#V0XF^Gl>*iD=an(M(H:iuAF;Lb):7#>N$>&nVljy5ăU"UtEtzA\0BO2aNmw810u$0X>M[C9IpFFp5)LQWJa>'084fVekF#3rU>N>Z[/W<rCăU",3i8>YN,$se>3^8S\f/_DXx=eH+2LrtPl:9cNqok;B=t)(-swoZC%Tdz8**c3GPăU"42i4Gho<#9pFe<=aB$u(d-0pCI4a>.2*NgeQn%1W:1Gk]MmWZc3e1pR6uo*o>n<ăU"3?<+Hgs/,MWt+:YDkz:8,xCFrV=fiFP=u64/HprPzI/X9O]pptAq=0AS*dh-f7)ăU"E8HPMd1*'FrVT-6(%jHp-$4W+X;?4iFtaCrHVL4YXJm=$[Yg6hL,MaLtMp\IAB<ăU"mD(yg/j8Vx^Tf-p;P4&C.M&iCXLeJQ_/?Mq^Z9rDospse5mhev/P;fDwqnh/6GoăU";.LEcHk7Cpx.f(jpPWT(?X>H>U/jG7cf6,iBBK+$.g,k/O,a%)2^VC.(;97-+gNăU"CUs:or[O\.s<5_83/nAQ:X\Z*Z<9DEBRVKt/QDP/T$oN0d\f<G/1mG2,HQ/m'CpăU"5jt:K8Z>EW:$r1_RXD,u9.Z6fkNdbiGnOB:2srWSXigd>R#d5[)?Zr0tf5V3\t]ăU"qb[v^GFnuAbS59:Uj=]^VQ(IV3;(B:>;]X,h)igCtzwVtmEjx6iOnrOcJx&?JR^ăU"U8Lkl8)&iG[WCy[>=/'x'_hPt=Fd\+D&tfGbU'oCZs:l]wA5m2ZM*[irG<Fp=C<ăU"5SP[ai(Sn\kvuQoAP:T?QEFLj]cYtgeFuglIdEJBXJ0\?,Lspht[f2IGl3YWu9&ăU"05D,oE/o<0An/gl-%Za+ruiGO.W'D&:k,d)Pu3O.'PD&:,rd)P3ZO.'Di&:,dt)ăU"P3Ol.'D&V:,d)uP3O.<03tT%up()%9%%%[-%9+/+G)l+mk3).%%qC%%%1%%%%yjăU"%wrns%fqSvRgkf&<6^UyI5DJ;&>5kK(jiMeCfRMWD0*p%)C8xi+oq(eaoaMr\;MăU"Nq)97w51NYcKLwY+Bjojc&MA)8d&W3)2pgQc:0Ji'WHoE#J<O>6Iivj*vBgYX><ăU"WK8bDSfFQcpZhq4'7V$\?)tYFLq8mu;ban3aKCV9396</L9L><VWgkC4rDrNXrNăU"rtf[P[s\[0\PRq9KabwIw+_7>Du?#j(9jdj0KqOe'WZ45UYnZ0GL#^?RH8ZxK(VăU"HJ^_n+mW%rcmcFr7n=4Ipa,ZB\]^Q]h3$8mpXoj4KzbunmlmQ4m%I/gCvdMvNtgăU"tlBWEHceoEaRt]taOtF4SnbCM*B;;T7sRGS3W(g'g_99)kQEP3d,hwBA#-6Jb;băU"9\+A#E=U%*m'a[I-OGHHNAtvLb(Lmb,wI-RL'9Svka/7an#cs,J(t_ub'fbRfVJăU"^E#'NCiKyUI+[7>PrSKIppt.:O8dn4$Cd6OPa*g(hLoHE;]qA)mJGfBDVwt:/Y6ăU"FFYDC,%B^pm0P6EAFPKR6VW^C)gj7t(.Qj:I'<Jn>lRSUg\yygO3]<-MJN-B?qeăU"\QPuOcKr]9:Y[2B(H_TUI3zc^%JxGPe4,]-v>,7OkfdItuFYQh+A&%p;Qnc2HL1ăU"CK;-VFCYa;e5_EFP(SZMq&>5'DE,mxZ(ATUlIF]PpRo3>=F>T9u'H&]IaLj[i'BăU"?-_o:_PL4=E5qudtFY4?,xh2>d.cv0\c9MCFc>VNQ^VBM_SO*HTi^B62?jOqmtnăU"kg_S73,0ZV\iBxE$9<<HQ_q[1S>C)o:rC=YBP$3>\xOwV\%n*Bfj_*lX$xSU]v>ăU"]e)=idJ=AYy;Fr\\qsbHQg)hL_K%/VlJl8D>\tO$EB_sdVeWe9]0ht,fTW:'iM9ăU"z:8Cx^CA5\qAyDd1BmX6'1M<,g<wVmCW)LZ(/3QGiU)oCFh-2]>fsA)3#u2i%.tăU"CP>7Rn2uN1\/%f>Jzs<((hDedA;8h9AzbP)hdiKm/6haZ<NW*J5M6F+j2j\a/BcăU"\EPB-]dVFN0]TQ\TlSrZ.V,\m(DYn5S=_9yVK;iM09,;x=.lO=;BMoPL*qTt&cGăU"k&1?A&yO2,Q<+Z_a?IFYe)RDb2'[BkXU4p3m[mW&m3^*RwrXNY.LPhqzu'1_ZWcăU".k+0K_3W'yOB-OpbV'Abq)pTP.BRmd?,>%-tFy8>H1<U>o6<f%9>)^TI/n8M0V2ăU"%0Ehf7Q;1f)OHVlHQmM])Lvu&>6:)*_aX<'G>n+g-rc9.7MxerL#Utb-TJ<T55dăU"[\CDNE0fktX0Mx%t*V(0)ee+/#9Muo(eP'*%/9Mu/oeP'9v4v,%up()%9%%%[-%ăU"8+8+GNt+Mfo*7%%g]%%%/%#%%x(%xyjr%SvgkEfhVW#Ij9UuXETRWRhbp79h2e[ăU"1iq?4uat6m6(R9'Ie1[u19Y1?99iU#_ii]H<Au[73V5eUMhY_7:K1uA[3V)6'ZQăU"0S;M4zrsDxN[xZ\,E'(biV>>3.r6Inc<Nzcc2uf7ii$CZgWJiwuR\lh]KGkn]V=ăU"^g^(C]Sk%tktllLj*\cp?\#2.\N?%dCdDH8C*nolR7<Odi>KBBTDLqKCpaQZJbrăU"J&Kvb;jbhK/^K^L0HL>AqNCunTjT#fK#\u60LTv4DuNsf^LvLX\ma_Z9R$,4t6$ăU",Hk6p5d'RDXXqJLw:?u,r\9lD$<WlvlNu_D>T>ZL><bZh<8jSw)Eu+P+p9,t+$ZăU"RHR4hE2H/u5654l58K)$5'?OWHW/(.VvWV3Rpn.h&s\)9g*QaGDUtvO6#QWVTUmăU")>w2MFY%O+2\=#_OeFm'p0Ag5wZ;3p+e'6d;A)r0di.u)D3'fUJS8RMEgi]D,2qăU"2ltAVU;BphdbADu2X[[5v,Tk9Tb\7+=d<tD)fYk6#qbjM9g7adlJplM9'Ta=*R+ăU"RD>T7S?#H5TKBvg0<*HpS;$RqkfT?>>+nPg0H_ryjlOT)*gt9WU\($7VsFkB_-2ăU"?TlEP<wA:/6LYw%$]/3<cHiTj].+p80PA*2A2$\yH5$gx$?Wu0TY$Tgx#uQ5=e-ăU"%fxlmRX[%avHKSk]Q>:oni-=?Ui+/51.^df*]j/o[6tjmF$DTP[^*=cvSK'?.U'ăU"W=FcmN'Cw.pP*vA0[3dpTTCv0(hv4:1^+qre^0LeXEI6AZ3t(=zF>+$rIH(\z7%ăU"W8BPdvV9bvEjWi'(=e7^7(O8pw26p;(?;pze^;Cg4kw(].0pt-*IITC-JV^fdX;ăU"Lg%wzM8(WwVR<J5S;Rh'9,,^aEsO^[KnO%>gvv;,n$yU$2glgrum#ll_i17V.$aăU"j9cX](=hiETQ]c5Z4&%2p^]riO5p[R+3L,2E1GCDuwS$9[/d4'Uf=PTEVT0n^'0ăU";t<tD^]I$W],vq$x0dpP0E50[D<w0LP0Lrd-6D)NfpBPT.VgR[$.\UuZx.MSPhPăU";EfqcSC+8,43aY:Rg89JcG?=bt^E,.(rJNLJh5Q$%CE0**h[#-BN2WO)kW.q->-ăU".-&5#Uv59e=\C,<tXa;]#)dpwS)X:fK9Kt):,:&/4RgZml)>&Z[pEocMQSL+JC6ăU"pDD)fR3$a0/6X5,5L<KS_<%]_D?pBeq9ovthw^EI&MQc^]nye/brQKct/TaTOKOăU"BG1Twh(Rp/5Z+N4_A_B/.M+ehbBqWj3p#s/^XQh)m%Be$%?S4,c'j'6g<YLMX>băU"&x4EAwLqm[kwt/]HBz4dG?5M'EslR1y<%1KlI%N=WTH[&L$9Iuce)<Q;:D_;lgxăU"$Hea5dZvS_'l0cWL5Qtc<.P\PS%&NXgLjj](&2Qej??m%_Q?$4g^QaWZQrV?g_găU"J#4^_Sz#Sg4qIHAohh=HGbc_BSct>Bm[VpCyhPZ?d*B_Tk4'#Bd,I6wx:U*U>QcăU";y\?UOc1-9rF6;3JfzW'l()]r\:2TVZJpX\eC]-8XwoU6A+ZppBx>izCUJB;j$)ăU"X%;SR,r;6bZb7'^aB'HU:5o_m#c]fk]qrMBI3Zo#>tQ)w:I2%y6.dIH[>(RbCB#ăU":U,edgJdUV$S1dF4wt0sHU$usUIbS8qrepUXm(I3[L\^GYsna.InaI(naInAaInăU"a.InaI(naInAaIna.InaI:na]*'kTup%()9%%%%-%46++G_XPSI'N,%%%3n%%%0ăU"%%%%xyjs%hnqS[vgkf2(,7A]P:c,6,S,nXP&mc7NNRujobr9)H'#l1P7puq7nS$ăU"\y9wK_Vq7S.MsqB%H7#7BApNUd+ipmd,/tIIc9YLV\*4_+wLc9B^N\D=#$:4S2găU"e(P:+bJr7Bhe_,8HDU7M4V3^2g^tBgr4*$mX#]L7jmabsVvV[=K_;%rhiLd[-^8ăU"M6vRKs]iz;LpoqZfT.Zr..NwUx:=vu\$\0u\dj6Tqpn-9v#n<ud8'x5z7&dOXlbăU"hZXHuF?_B?\1#*\dF[gZmq7M6rb5lTFhwDunjgdF&?x07]?t&R03,9E]Zt.2C6găU"HBDTEjl.tmxCuXpl8lT8ax/owyt2oostXHfSg>uZU;Hs<w2)u-1/quS[^>EtZPlăU"o$$8bWeE_fu73mc]K$pnN^6fNu)u?kptfx-Zugk(NCWwsouO)mlIU(>#xj)mWvgăU"Jg(cZl$PUQ0Rk)9+)FpMI<kgtG>Hu'6\c9r_n$A#7^F(_qTe647gHX,Wx%+Yy,/ăU"Em<8SDnX5<Bh:&P4pX=-IgCT&$aE?E?rtW'Gxw5K6pX(i-om:&&MP><.(*lu3HkăU"KF3Jx_saiI)ntQ:#XI^tj1eLm^fLKJK-77nKb6mR/=J49\Tl3X36MM9f:-W(.0păU"B5rSG9Ww-JBub:Iub%;Ie%L0$hfkeWv(+mj+L;$qg9],'E]9>9DiwUOkk%DVYo]ăU"0AIS$Q:>8g&K?Ob2XSH,8G#pj+D2Ht\TxU*uSK?<K)tykr=r5^WI7*5DqOZVF6dăU"J'jkuC]+'tmWaPBAXn7_CL+SOR*J$(HnUbxY*b-74^qS2]>#V*kk*QUXj+i=(?kăU"#EyvZ'YDC0evJR$pTlqZ^V',IbRlKVDOx?bCJ8])lM;S0RG,(HG)R[/fN*EKsa4ăU"n,2r>gGnx-A^WV(C[ZYyQNhYDb)la'zQEkDbpJ6956BkF2B7r<2a?L_T3W)VRqIăU";4no9:AXiZlz4t_Xmc+#oNL_ypx9>*iH[*$N7$kJ4_O]pItn#taky$%WvL\-erDăU"sN8:1D:?mf]'F2A$Z_7^KiS35(e\]?7t3Qwt*X3#iCbDo;-Q%8_3mRi(0mj:XZhăU"n,+O0b2I\RAsbAC_)&w0io>BFHFS6mSkdlTRx5k0X9lRlvB(60.7=B\NPPbwc7tăU"uI2CHin(mK8'JF:Ev<W)(A,TPi3#\>nccYFVu:u\CvG7tQc6gZ5]hlnPbb?eJLUăU"HV23%x,_hthJH/+:DAm#dkUhB[:.eY>aN(/&YHGJW6%?)>UU6B[s2%W_Y/*'zf9ăU"cj9Hr)gy?<gKB'iTcsfUgv).oO1*fK-x+42H.%8-,$BWaN#(a62iC$55h[Ht-2SăU"Bnm3e1ADDmo2^px^%[M8j0X5U7#5c._8V(qW)^aFb,S9I#iG=BM,1lJ2'ER[2%(ăU"P:ulm4MIhXbcmQ^2?mKI?K-83$:)Mn7x1JmrI&1.n(ZN):a$rVr:6oc8ZMb;Fc,ăU"/xK>lq0,1)t^Wp5K=gqK&X,J#SX7EJn$L3(:=h3Am*lziiaSBW7)crmyy0\>C.\ăU"GsMX-.^mEr_NfrXLYLABtJP>ApREBj*R/]v[SJI4uMm^VnJaL($JkL$zl6;p?4KăU"A$.X*i1z:I-5m/EiPs$%?#&n?B>a/0LTDMlY%o^#_P51'9/k;(n>/iCx3rD^0pdăU"a:d3>*'2m]DEmq5;uY?b<5/gFtneCD)z8WX#4Zud?g&.83]BtLd/o:=lj6SS_drăU"k^j=1;xmUe53eWBCGS8A^bEqYa.lrn<L3h_2L0rOmo#dxENOoctw\A>H$tvq#(\ăU"AwtAKo^XAA:BTu>M5w,bLoKq]&c/s_W%*h=6O&0Ur3k\i:n)r81p7(o5boE7v$răU"n(b*izCz;r\QD\x&co&)sip/Jg0rFRD#)Zs'?^3%lu0jh]2ilccLIfbb.[;_xFeăU"_d/T\jQg>kU?:c%6VWqd%Hp2G,Z$uaoX;Z5X%i+im1BTCTYxqCdiHO+)fr=hAreăU"7t/PPFkqw#(CG:b)UUc#?/dOmdUzL.V_HInX/vVI(1JP^l7]C[UP_k9QMwwL2ETăU"s(LZ3Ru0N_NR*floJ[Cz^/]('-WtC4EdeEwx60i[.92m3D%lp&w5iUm9hOr4%%KăU"3.wR'0+5wKST)2]wcU//>N8c5NbC#jBI<K.#7l)a?oI7AQ\uZoI,C3ckTZqYm0[ăU"Dr(q_otzM1G,v/KLZN3Sj9_kOLmn_'<KtHMB0;_Z(3]HYNi+aEIEx1vPT$>-y^săU"q&hU*eoernp]ECJ/w[Znb:V8jz8IrOdu.IoB]Y^PbwWopS^R8-_M-A#ZH_-vWzEăU"lLCgV:[?Ns>pSR(\KwWXLdY%UDJ8aD5A_ZiTrMjc#dLm[Yq*/q#l<_F*U;M7RWLăU"&apQz1)IaCKile]%&uSl)fGLW2BgugR;(AC)1JBugR];A9_AoU,T7^MEfA03_K4ăU"3+<S$wF5m-xj\8<#LEBkQ0uFXiL_u:NBFRCt]f$CT:zzE0lc:'1mH4i6NEL$cnvăU"Pb*qMu?]x8#.Muoe&P'*/#9Muo(eP'*%/9Mu/oeP'%*/9MCuoeP%'*/9.Muoe8PăU"Kax%up()%9%%%.-%]jJ+GZt*L=D)%%%;c%%%1%%%%xr%fqqk%tsSvRgkff*8:#năU"j9#6.?kc0Kb/)8E_Pc$i8P(r(.w]]I#0F$#Z]U^]#)Am$%Gj-S/+=aeIEKdZ.9KăU"d((38'n8pG>:LS+-0I3:&+5$[Y9_&GgY^w+V0a$S(*6l7RKb;iJEGf^HpqhLlWeăU"j\>.7c$:aVEbV0atQFtu97nGhH<>FuTi/6u70hvugvbv6\F4?YhnE-V5_rgthn4ăU"wYuxKNo\DqhTuwo;nERTH:C4$K8=rerR1Ku/Fc18;X+4:0fiF7$XC_oBsl22uH&ăU"usMP_$T=>00il>03QSB':\YlT>Mj_wgPFkd'dg2f-f+,t8oXl^rA0YK.5(BWODcăU"3XdvPHfCk4u4K(u/)^yq\%TzPSz$N.qyRcT?c#cQ8fQ5=B>m_$<IKG)OnBsskgOăU"KGi1owgm7_2kM&v[&'P>sEC=M/YuA7Kr<jXlALl$oADO^t3O,&:wI8sB7.oLiD[ăU"guil(2Emo.svyZqCA^&Usp%\Ct3,I4.d.W8YGSop0ql;B\yL8\Wsu]#vF63hO+dăU"'Csc,uc5KN\^xnIkUxwNDX?oV7%Rn9T*fLiN7N?sR2h6*d&$BhbcQSLlD8;uQjGăU"\#Y#./f$Jzfl7o7RffQLwRog1vg7S_BMV,$x'CLnG#YVwMir+)u1+riBRGaccX/ăU"MD=wNR3MLGf7EquF#[r:8,W'9Tlq'ZNf*.3eNs#8m]j'wt\a=H+faOnS3,TfKYUăU"#aOWW4lNINaw;=<pB<rXvl3Ro,r3*^PFc4voD=t<t<?B\d#<J<\8p4(#>A8/k$PăU"z0;lk8>T\,\XkZa36oKWI>BGo*B4OP3ARt;l0.I2xa$'t$v\dg4nFVc-ui$57-5ăU"k5hOBfr=zdHq#ie8Mv-Q7Fc+Tc'D9^,I994+/D_tOo5INc1)tAq>6qBNn1$m3u/ăU"r:rWxS_$^+PhaO+uMV<W6bakr7VfRE30/hKu4XfG3]PfScvAQ\LisL%f#,>=<a9ăEND SUBăSUB V2ăU"Za=jqTKg$##=*nxHL)Sv#N*j;R,6?4:$nEh_IEcpW2W/OZ[xf+dHd<l(qnlhS+IăU"2IaybYQ&$Y^M&E=<E(?S(NQR*lnb%X;cp4UGaI0jcNE3n=y4vKs\%wZ_fdw'al)ăU"$Lybj'IEwkf'dSZAX./lbmFP$p6>4hK00.WLwN%^_ZH\h6-CdV>6cht?uCNq)sGăU">uGAqlYZPd*tTfiTB^D_\WgdGAf4\9xVL7x#iZ3gIfWg\1Nx=Et<wCj6PZ?fjl6ăU"G^&3Nn&li?>k3^bB]nAMOA>IRYf*W.)dvD%LYiYJXuE?fm,qs]W1Mk:/IFqtt=văU"I4K.L?HQXs%ssss%ssss%ssss%ssss%ssss%ssss%ssss_.x=t%<up(%)9%%%%-ăU"%3$++Gw'3sp1%-%%W%S%%/%%%%x%hwnu%ySvg4kf'r&WIn:MM$hd.>z,xFz,1'căU"[1x\SIuuzn45sIqE&,;'1<:)ptQNqtRY:7XQ-+=Xjp3],YeMC\+vt+s,p]:nZE4ăU"R*Vr3CH_]rEAx6:DX3_CWet3,7Bpjk5gy4&0N,mSK0EaqHt-5p[Z6h6WN%_Is9aăU"xm9$Vo<b,gwg4[Mu<NOe6.LD+LgLJ(bz-Xw0N>*M.zTSGli3uibY2oYl:Du:&YPăU"6:6oB97Luuoqyq6RU2hUY:J4rJ^j.Y2-YM6K6?,7XaWQ<Zu)jAW\-\$\GHC#j\[ăU"n?*8\TJZTB$bYjBpbSnJ0bddK$7PoXzn9M$seVN&x'9xoxflXP0lk9l)l6,F>Y)ăU".;C\'h[DYsT.WR?3Wsq<d5dL9&$&dZ0wWiW.q.F'&6vg#gVvf7MJslggU7((RbKăU"9=cfK>Fy%3WOGcO6WhR/[*aM<Xk(ogE2BO70Ya03_*Hofv4eM^^qgs.i0raj8^*ăU"iBBE2lv'D4.4hXPS=-_u-qeA8t8JNV:B)V7iIg%jG^p(5Wq$L5fUP.>7\G-<OrhăU":]DaOJBr^YrMWG\Ar3GR8wrQV^Czyw0a1T4N*[Xkp41Zv67i3Q&6FXl4Y]CuECVăU"UWlEE\f$5dFE6%[BJ(ckRhHm&U^lm2ax=201e7S-:Ji9TEBe*Rue&X5<?6S9'dLăU";uS,.&guI?R]xGj::o/dAX]#%egD6bg31*'U+lWC9LNA1YTlYJspq\<W]6D#)d%ăU"q0q%#I_K5R3.Hj_.Gl>&KL=PvET5Klrm[]uZPrmPKSJ)d[2PDB?;g'_):lu;GE%ăU">E7-0ZtT$)+9].agteRKg^UaeG)UeoS'DR[0-\aNdm]X(e[NtFA>W0_nJauCrAjăU"[I7dtm=t&EC?d^UW<kL2hq:w[d[Q%2P,.aE'PC+\4yWR1kK)K]_\hPMj]$i<\D>ăU"=,F611;8:4T/T*2k]CIkJJEq6,ELW?1EkZFL]ifI2U3c(AH;?E&4Cp=1kl)VgSAăU"gK0HP$%8BJ[aYnEA$ktn45*Vtj#diPPPbO,]1;G]3pYOnC6afVHkf-HL+_X$aDyăU"U7HuK(XU?I8HCKLf7J>Qs9.3wpCE?#?NQeaf^C:g<SD\hiW2vZYaADqV??Mc1f>ăU"5JuX](?U=LxN9Er'0>6au-]^fnT35gn08>#CnMV'XD-u*go?*YIv()Jtps7rTc.ăU"j9wbD78_LiNqI*G?[sHcEqVFl'ZG=]Fy,%6*c>o+,l1ap?Yn*Y9hO[#n.63aGY1ăU"-g''oRp8]kIU>OuTETH=aR\BILi0w%M,q$&8So8_aF(SFq<]9>4,*=[^Nt)3=hJăU"#k+g;qoaUO?4;>P#6,38ungzMQjf&u4Iw3gO*w^42UFB6eSRsE''^DU#vO-uU6,ăU",VdP,d:FaV3WuV&s1H6nNT:OIfp&L62]c>C#2.G)I:XChFerS[bPFU8,cWHb>DLăU"d$DH[[US5KcIjVW7/f(_v$jRwfPBoY,Qwe%AbdTg-aYg_7AAb>ORh^EZ,tbKa^MăU"5DY0K0AQn=sp6;We(AP2PLDH65-9U[)*qrO9Gk1ebWwD%V*-N+05/%zZ'F>4iUvăU"p,fqaKWZ>wMzK+zlsO(rpCL7hkp;y<Hy::=dJDQ6XqOz2:_1)bt3G_pEenhmDcCăU"_INpYf+0Vi)zOErY0uuJF8&U\egx'TT<0EJkm-5)HC2zXO3Z5\uoOsdRBxa(27]ăU"g:y(Bc23m?bHcec2ft7pHk_P6eE4fOLA5.RE/M87^[91=8a<rmT4h9.6A6)R8cwăU"cPJ2Ay54q,vaMcaih?U714T8,lBo=dfGRT5Sgkro9V>+zqoMoVEfCknoDP;-M9_ăU"ecTEYkqTsi8E5$60ge5<:>6FL>XEhg6KQB**aS6WFzbXzV2M\_T+q6OqjK%]+K$ăU"<;LPkD,QWRt*Jwf\gb:hR$<injSjr6vb7*r<((Z=u?H=lu_pTG\4K.*Zf'9d,ISăU"N2AfV>kB+cgv6w-i228bm5NiTpEE,FoZz4M4bYjDsy2Kdc^h4XTI[D)<++hR4=>ăU"6DZp7]VrA^\oi1jCO5x#m,#tRn.$U1o>mPYLXV\8ZbeIpAKU;3])PS[U<,Z(:o'ăU"ftBr)-b4sPe_OeFO%GTnx:VOlf,xQk(>.<<5RzWE&96WWX5jjFtO=7p_Z+aOv]*ăU"J./q\8>b$tB?w$A$s>?ZTX[KJ_mPdb^lodlEmJDn]_reJAXiq_'96#F\1+64L.hăU",>6(xd/N5X>LH%o<%iF54nG;4DTKVDW,TlBA[7DWDV/KS3--(jGTmL:-Tcr$Nh;ăU"wT5N6rrG$WPYVKJEIzWTCUlDuidWfH\nmXFFL<pQi)Q-udH=Dl1xr<Sqjb)seGWăU"7XY_rDBbP0gumpoU;xddqbrKt,07G%<&,s:uH:\cdkF\x*\4=s]R8h]<XZvB%^xăU"6f+H9Zwu>Y0=7?wvA4q&3RxK&JzCV[mtG:IK.6q9BJ'f2wIn.5_JJok<kq^z[LWăU"jn*9l]792Ocve9Va%sS[hfm6Ygz)\?h154hU=JpTjto4h'Y-n+s'Fk'fgCJ+Z8răU"l<=+xG6<$1<-l3_B2>.eqZ^8?D4d$^H;WBbp:st5s'=n6s?XyqQ8MwxuiM9yxuMăU"i9yxMui9yMxui9MyxuiM9yxutiwXa%dup(%)9%%%%-%%*++GDa-QpF#.%%9%f%%ăU"0%%%%r%xxjw%nkSvRgkf((fWIn4:v$6Vl$Vldx^wY'9[xN/Jyp<#fo=u./944&JăU"w9*CFVbGO6bRVn(=3,\(>v:*2GuafQ\T6>w%1ES7S\Y[L*TC$+934fD/QMQ3)e'ăU"rL4updXOr,My6Iu_J>>LUaYAWsDxxq6xvW=^rfnJc,mzsF+6mNMr^w6uM$NPWM<ăU"n2rn6n3rsn+J^UI_3^6LLsPHm)s9nln<3mpMfoxwXNchaLFt6FPF4P?=qp[mTq-ăU">?d\;mW890xEMV9wpufWt[vp>LN7dNrCA_0uOHXu23r^0FD<kq*nRsHOOP*W(=văU"J$D=d.ML2J><tJTTt>82vu7m\bu$KvmbT-ox8cSK4Y+s[tNTfMIlb(f/%+DCaabăU"1VqZgYPRj]t'ot;ofesLRH+Ud5h5_B*6J:Gzh6<B>+1nDkDXsLS3(k&3Nn__7mnăU"9;n/YpHiR#O#<<^Y90G+UzYa'1h*,]6E[kzUUHbI6?lTl5<kimZ>>ML8]OPhti*ăU"+^.&)-J$3XD#^/w>8C.*Y3qyc^dMS&[a3KL^x.?5tNff5\%LxXDADz7r=&D0.$2ăU"ik&ko3?4(;#D9PHO%h%U]tNO'ny.pA%Y&%+JHP4kpE*9A:1.ls8PfJ4Vx3dp18căU"itet$?%MCy_^XkB*Nt($#(]85b]kzkC^Q$EKFik-zqSg<0PNQ0+t[TXKo8_W.$[ăU";]?r328s^>66vm;dX9osXYmY$On'WZ6&)/cC$[a:(D9TjxObRHiOzl]TO:QnHl6ăU"0]td00W*]\8YKu^B?wK>:vIizakCQr^888CJp22xg/3Y](<r\GM.1TmFwN-L9Q7ăU"NA*D#B(IxEvp<&FVmP*P_(R&pOp#kyeQ>b]6vJyo3ASkl5YbaE'3gQBB.5452^săU"$gdCa2vTk$-u7SNKDosWc[lT2-Q&lb?Z-uLU1M/E%PsR,$0\i-;PJ_IvN#-q.rCăU"Zt:=wUQ*%<9G(TfO=;%a5p_f(,#:IW>Cfn^6+)pAeQl0xI,maSaL5Px18GE?3'?ăU"+W25NNUlb9EwM3AkJd:[h4+/:fZCc0n/uhh(EvFc?qP)t[\iPmpk>q,3GYlftI[ăU".Q?1ljWL?b\avZIQ?2bhrbXeGn[h3VCBsZz_,AIiEcV_V>0E999$U1%UsONSi8eăU"n]C=u$g&D1.XUmB,1f=tUEL7cmg:cTw\nOXme2X,dlI*.Q=_*Fb?7-::YHq47K%ăU"?*x/NeO/YcGp3<*.E(BFgVgl(h*g#FhThnCywrW^:ywm4KqgEWXbs<c0D.#ooziăU"K^QWDis6D]a29GUXSCDku0gD^>FFXvzdZ;WEjrG$q_grM3'FVD^gR[XQ>n9=i[6ăU"UkxjZ_SAb\HGlg$fFS-)OOvUQh*Q;h=8Ha)W%srEpTmLIvHeG:q>[Vj.$$]r1.măU"AJmm/4y;6C.k<V.<$>w4,eEHZO:#_OY7$,Y*pqmSp_+3CENzQscI(U_4YM#v+WTăU"U_5]6VXTH'$n+(oe^]oZIl*ntxlJ9z5w%6?LD.*3vJ)i1bkD<LF\^O2pkn;niu2ăU"(;+xN2%zgCEGq9b(&P4N'qX\O<_*?M)5Slsut9is9O(#D+Z_wC20RW_]*[7$9,PăU"*b:9n^jt2=PL;mef[auSjcj%Hc>1qnAM$?u(Nw+pf2k3QV2w.-g^*S,[GooZGaKăU"Tp=..ODSQt^ImeOLn;BW:KFEu%>5[:<dRT+;#/R+x0JrmWu)HGo,276WWhh2'q6ăU"-/Ud,^o_m^6.wc*0W8m6TwQZH:ojd=J^NhQG';S?,yG#(PdauB5kGB^A+R4POh%ăU"7L1FwLz)9U>1FX^56=1T's&l=]RKtOnF2,]IUqR05EW67gqJen/TC*JQ;)J2:9RăU"La3,649:e9q]W,\M*pW_T,T<''h-yQ$0zS.j:?/r45)dF_e?q$K(k7PREiG#S_VăU"NGeP%V=:+1_ET:eB:s-<=4P50sPXl_$1?+$8UyPNMi$P2H5,;2S2aDft;%'^)K<ăU"q)[\h,i_ibED.YalF+RG2v2*efZL5gZob#6Z\a^BN&OK;1_K18'T\8f,cEV235kăU"1g^P,FVDAiskw5&Y=I:/,-ETLC/>WNbN)),OG::FL2$(rt9,wjPYwzm=a:fj$$;ăU"xRRH*7D$l5#2u\H2Z-,s=#g>Ai5C:;GlRTx7^OO\UdJucBLj.-YPnJzoP>8;-.PăU"l#Ww11v+0'M2;5W?2'/83S4>9AaN#Nky/j<LZ=U'HUl>AKZ+Q<0#K[ZrM$;GUuBăU"jG%<>?)Y9JZSq^,X_KR]H.;0FR^2_wM;wS3]k7X0]Ur5eFY0cX<kKNzv,BSn.Y_ăU"531f7wX^?oMMs?T7uY>7T(WVAdhK<BLHUNeWfvQu__v9:/gvKZ3129A(rRLMp1făU"D#aXea*#tNeXD>#)sd>.rDPX+D9XKWK-)gq1l?O(Q%>ZYQ>DRu$oliW=C^viJ-HăU"2km7xUJ(7GY.,sR+LCJ5v?&obr32lcbY6S+,Kh1[q+K&-\,\A'Tb+9BtgikVO2oăU"#=a?fMamJ=n1$Z7q?x9\l\bpb=hU:hzAa]Ef=3Q4b^6]g<7>FSg+wBfXB,bE2zyăU"v6-$esP7HGc8m&fJ/k'JX:K[VNRz#mX'Cv6X\e<B^KD$2w_X/9e8x4*A=XP,rF=ăU"nvR*Qx=HdFXZ4IHJ,q^;B#4aq%R$q2djh>VabK<g0[pP?+z1S*UH8>:RTl=?48căU"#$DKH96j)\F0ivL;D07bf0Kl6*Q6Do&U/#U>zBn\_<ALhH]q%H]]kC'<D=Rx$R.ăU"p5i,(OYn\'S_F<A#vE$J3;RY.npf9:^c-Z)Em9+_Xc*hHEH2MFD;XrZ0,fY-)fHăU"90h?G>_t?j.ra>YD&=Z#Y=nP%Jgs+m$JwgR%2DTk6kbJaC[),Io_8f/nzEI1LPDăU">^c356TbDX?f^MR0RZg?##KK=h#**Oci2%M^fhKjQ<X3^3Mj/?QupK^q$N(,flBăU")xW3D(j=1d'rn<WXf1scEaAcf_[^rxqo+MUZ<MHEvlF_')BME%1NVU?heEn/bi_ăU"Scy9b0NKx>JdnBHQtw2GUw%Bi<U8cKl_k8FD8A:G.0]TR2_e2\TlE4TULjiiiqRăU"_?cxSQmBu\]v7^2$>P=*&?+g4qp_+3xiV6ZZ&.>TBjb]A9rND_<&]Pfw&UCN;cPăU"*szRuZU7ni&>Ldt*XsOu07n&V>Ld*uXsO0Z7n&>kLd*XusO07Qn&>Lrd*XsZO07ăU"l,zvDu%p()9%%%%-R%(++7GIV4+.8-%%%;f%%%1%%%%rxx%fsxx%jSvg4kf(f)WăU"3l>iwz:/-Xeqt]8z.-%UqPC4aSSAfWSbf^5rlB[juI)QY:ZS>v_i3F(l[rHTYFJăU"ol9+=AR,T-[1+rQI/8qoT)<:+0=\Wi4j<*Yej<'sYtwhNZN(3.Ep;tER747ncZ\ăU"rNk.x.xq.Nvn5&.uptsaTmq,iI(TaBsa2I)Lxgbz]MlDc^c-HcbZUznfKu2lnGSăU"^_(C6wOHipdx8(qNyhal0nXw-M?x#rH<55ZjW?2j<7BZS6<wAuZLV(qCNQvtDp1ăU"tHHg<QhvRj:rhQ&F'#\4\P.RKFElZ<nu2q[>\J<DVusWOHr0-TscLOd/LS<ND<tăU"*TTk;x5tlhT^mbmebLWt#hfQ6PJNZaVddN6vEmiVH8$op$>Gk6s^pl8JN7WxZwNăU"$tn487;KZtr;*Zd?Z8<wdl^$>ONIM68iQV,NCFbeNkCXI.:;Qh&qBop8qVJbteHăU"6x?KdlyR-o&mO-SucA*Qz;M*Nzq,cam4%QObU'/bQp)Vs,>)^3YO0+(A:[L;N00ăU"ckc2%F^Eo2o2y=n>%.oA#8=p]0%LH^IpY=$9zeT80#&SNTgArQJUgV*etv4dX>'ăU"713_KAc:EAKg1CEa?Z)2kViAdb%FrRCGantI2n69Wn42GQ989,&BOVe8V$-Zc#văU"GfsIb&L>+'X*CJWPC\U,-(?fCMQ(lO:a+8ACPDCpC>nq&Ot,&'b0k'-APP&<9NWăU"=JOvc<tens3Jf:<Q4eHQZ$FEY5+^YH[X+t-19t&])4cm558w;IAUpO'c7'vsI,AăU"me&veq;+[_X:GTQ<JHI.4[bO*hT):<^&\e9>OCCtiJDBi^-:+WT)N*52mMl^h*dăU".X*'q:eY\p#Yj(:OUuaP6rhD0YShVCIVC][P(.':E:;$3aioP1es(Q19rllaUh,ăU"$12=.eWFN_gr^3#Enh#?QM)I[h.tCOV0+5^_cK5kPK.6,V=POvS9TC,,)CQvvU_ăU"^#7p<m4YfHVE=HT)/vWMZ'487b:=I'4H%gabX_4u142XK3f4>XUD:r?4nIW&T%ZăU"W%$%f3%,BrWP.R0<^qm2YG_=(_92c_.^IX<nbX-fu*\*u=LDojkOAk#cD9P9dO4ăU"+lLUFw_rBdD$RT_-prKFQplwVT8_Fz8CpMVasuQJPaQH=np:dBXG9XwX(E76+-8ăU"=6/1E$rvMJsj,oM3az7Ot9bB*o_AsfACSeavJ&HmIj_E;]G_VJAoSrA7<.k#4khăU"L>e%3AQ<cU,KjHD;r^C.V9%:oAaO?HF8w(gbR?Xx*XDQA&\>>c:*XSq(9r+3wrqăU"_&R^h3+Ar]yk?Q9,-A;M]Ir/#3aiZVtqgaEl,Qmr&oJWe*STjlq4%EA#WzgXTkWăU"e5+*.T\s#2,diOM3WXEdOCk(g/0LA2hRs,fSlV_B[eKeGlZ\.^r,bamNLyHAC.YăU")$:Kapv&Fn=\_<+lw?s3=G'*sQbaT([J,nNWRA3C3jbHwAPsS'HvhGUhCM1e5M*ăU"9a0i^sPqGHQ-v0&vda[IJ\$y[/a0dWshfD=>D(w]uON#Qc]_R/ywvP*]&Lg#+d#ăU"S8zyq^JAjQiAADDJS71R2FNocn_qxk7$Mgz#tnNkV?63Sa[#[JD^N.OGE92qdJbăU"7AHQbc'fhNaTsM%GS.3?Yko'_?PJeDjpcX#:QdU&xlyQD0kJ-V&O:Kff,p#9pZMăU"Kk>;lN%1F7VKE-#gxnjWKb^uB6WhQ#-Ye(6c62mLIQ^RtDABq/Nb7dt?RRj_OQ.ăU"6EkP,x=-v^[Tpb&&gi]4bpLvbegYd^5=DZN:vK's-i2\p46%2Uxn\]_a:b:9FPlăU"Nn8q5o3I6VfI\[d7-2FmQHjeX-.B8ER;zM\bvQ:K^\$[kI<zlC0f83Ud5Q^5T40ăU"v0^8(0HR4z5^uD$l4-8[:m^G,iWXW5j=jZ%KDF.3zJYp9p+gm+CV],(NBDSb8CDăU"VqF%4gAo+sI.Q>1X_ooo-h75zQahSKmnwt$F-Dl-p,(2?%J;.7iim#;Rs2%BFW8ăU"hXXQcdQ_kHDqURanBiG[qqCf;OXm.82we8aJ,y(l_otEh^SX8fTN%48q'&tJm&UăU"#fsZ<6Q595xHGzjJ'9m?)%u_9%khvN5R<ptUlhHR9Y$[)\H.WT1HP6PkkYu'HH[ăU"<DhF[$3R%Fm.Sy<_f*G9#^j8sfxj(I^t>U>=7r)(TG\>Sr<QJhR,Meu[PAN#]?UăU"6Fa[v(HbW%Xlu34)<[CG2WG]RL'50sDuvT3\TH6<aF4LhVHCLSklwQu]jx]2853ăU"_ro,EKkXehp:M>u]0VtEY)bk<8&q#RGX6^*3KD\mP4^TntNGm(VInZIF$sT]%2*ăU"ZkO8:rqo0/n+(?)k=]r-Q<K:]-Xg?(Z-^gCP8Nv_5BmxtE%Ph?=o-M>);q<67Y'ăU"?83e+/+dYp:q),y(yFwX9hox3WvjK%llA?<>#t2g-V8+?H&XR[beqm=\<8[bdqiăU"O$Hg34;0<(H5WDZx0rp32ZjXiu7M_qn&UG=:-3IQLo%2p%cE%2$zxg-GWrR/tgDăU"LonX)TK)Yw=b?r1$>zC:/^A$$R/iCgj#6akH_LFp#Zn&UNrJyc:l)_0wr9lY?GbăU"bper:g,jez]y8qz&^KrjnDQ+keJN,%])Vron3WPw'5J-n0NBY^iD'#d'FNC),HGăU"(EU\WU$1EG1Lc&5Mi,WB&x]gt9\/hz*,dz8$=ZYt1do&hKi1Pw)&r)-:^+8*cq&ăU"L9S>b,.hHm?8bxBbVq=YTA/VhM,e/tu:acMHVDEJX+Vab6-<Zf*xcA*a0rUzweIăU"rEBBlA5&ar%(.'qwK+?qRN_v2e<K^=R.MwmpR.M[wpR.'MwpR-.Mwp=R.MwmpR.ăU"M[wpR.'MwpR-.Mwp?xPmF%up()%9%%%m-%u*J+Gt\2T=v+.%%=S%%%/%%%%rt%iăU"jws%SvgkEf'tWFA><M<N,Vz=X4B3(??qgXWY8WjE&w%+7UVK1GaRL3ZF$f#(76,ăU"/>&&x9RQaF8mijOS7e5G,YYJ2O+MRG1vWVeW#b[t0r>a^dQ>z7Zcc'm;lhe37f5ăU"sJMKxxIQncz&6h6ysdmB1mFO6f6Ta0s$Q'L=E1<J_buFw#G<+Be'Z4Aw3W4Q4RMăU"vQfRlnYKikLi&)R9KZbWZ$i3Tqvq<eG^+Yk^kfqH4uXM;$.Za%_9b97b#6;0&l.ăU"k#dj\qtLj*qk3u0uOzuBKjb7.5+EW;D>ZH>4r[YYk=cr)a1S.fDZAlkaTurW_tFăU"-o.CC7B8pB:6L<ssnrudPOX3&wLtZtjoZTf\TnT/T-Nt8x8FX;q;l+0v*G[niH*ăU";6wxfSJMaeFwc)sLbo#dBJoeY1vI_mlxvla]c7kl2*[9&BIGp[Q:9?/=A%-u^okăU"Pvj(aI]W9wC]#vr;X(9tFvm+$V)O0nPj1iabC6f?sZ<,_)1HnnyuRLwEU\IyWG/ăU"X7/?^=suHBIKW%);CL-ImGRUAh[k9ji-uxP7/07(M:[Yg%j]W\b6*e;r6R=(Ep<ăU"t%xWi3<LxK37M>R%Rc4MeeeU9TP4xUvHXRC]n7]S'07iB4\hbQfM7dl/92oRS9#ăU"X\:=HtVt[H[g4Z'Dw+:+uOB-*XzqTRIf4_B1/J^mWk[a;r]Ssv=TILi%0pOtN0)ăU"e9H0vWB#]Uqv1p;K;J:\I&6>'G[l)w_Hl2FT%ZEDf/8^Na]0=1+<q/k0Hi?hMk4ăU"gK\_A:$K+8W_j21S<>8UiYMwbe&3uZ(Cro0IiEr,m^1cnW&.kh-AFpBlgA_Xc+oăU"Nq;'9K-X+H>%/<,4)_/Ws3<=70X$>Dw?:q\Ndu(:Po,1%qHTC.M:uGUJi[1k7c[ăU"_f%164hITpTM$Q5Yt(DG;=&Q3oCb4KCp,46[?5\2.YWw)j==ve$U]3Lc%5X=Fr_ăU"<TdgnRI'[B'Cnfkb?>&hH7^%sow47x1oU0.4j/^8(zHS>#3aaKD:fNceX484>SNăU"hE%(Rq]I4d.EK$$Y-2&lEnmx71P6cf'$KP72#WO<'?soSr#(IJfW;P54n-jp*&eăU"ED/JCE]EPe;pN,1$DPgR,^8PzYsKFzvkcCAI3&U+lT^lpNT^p=,PsOv5%SAjWHOăU"\Y;3?Q4GBLr8lh(=-hY?S3-q[K0wdRjy&xYdF(>KiwYb6cZsoY%,_=Mx_E,?D:kăU">tXFfeh=q4#GPMqs.n]V\D_M7tUL$iUJS\S&X#N57#R]$He'j$UK+&(-J)H$Ii,ăU"Yj'*$=X)8v.D&)hVk<Kb8jn#/h(>lPoUSdArCOjq-z$_-wxfk6g#Grv[A6F+Nb/ăU"W,JY<:OENNHnW[Z=yW'zl0.?4Gq6Czsj5n0&\/Zoo\>eajbS8e8p)k8]Y+B/:1=ăU"HrN\uu/F/u?G]Gy.\d\;gg5DeF2D6ctH8VX#o)HWbs;MVH3Vkafc[v?z(61gcQEăU"iBfI(f$?0dFQW*(ukXW$&l91gwS)3%wbAXbPAA30lzq_P:T>D<CvaiMLY4HXDR4ăU"x5ZQ]60$13Qf?Sl<0sR5R^9]>DVY)+gu0cA.O<#K&dO:=?C]N1GcB?%GI<(GraWăU"5vf,j,0Am%z=D0MBlC&h4/ENR6W^h#Dv(-ORO?IT*q1<3+(2XY:+V1CVKQeO_-^ăU"XAMd6r2'XLan?hL5^<HU00RGcQ*EY&)Ii>Ksnro\^E-l5&wflu7zj0diDNVHT0SăU"R&ig+BDutDGv^(BJ_4oa>f>XJ'Yki606XGQh%*=7vi>:<,='C_oADW5MDafKV\făU"5o9e'Z^*hhyykQ]dzax$a$Y[PO/ndtMilHfcbPuSG+ZxYkX1Fk>SBX7V\at\GotăU"Iu(c?UG:F:&0w<q^DTNXyrfY;jHH?or8V_wxKEo/pK,J=HST_-[IKq49CQIj5bqăU"0]X&9iu[8yoGYUt&podMs9o-&0/yeExVVotOow3lSYTniQmg?(IntuPB#g.xvZ,ăU"\zXm*osHq*94gTX4md#SAywN0T2(<hh*3D?t-UBSatx89C2K<j/>_]p(s2'q;Z^ăU",OG(no9#Nai8;MI^]F2Xwf0XLHut4%qX6A574t=cwwZC'\c2*LA\'D&<d<E4U=YăU"e0EyGF,QIiPj^t\L<\K.mH\YBKmH\+YKmH8\YKm^H\YK.mH\Y]KmHx,<r,u%p()ăU"9%%%%-R%0++XG&cL%cL.%+%gc%%%1%%%%qzh%nifx%fSvg4kf(f/WI(6M\.(lP(ăU"Vl,LNW_7HK^v0+4.QSLJe,B-n]j)G>.1w&ZC/9>8Q/PMV$,$Z?j)IsuR73>Jk1,ăU"uVr<9*G4u;$:R-_Q11J(BRA)x<:qLDjTk&wky%yb$Wh*:b[<HB&[DdGnMiuq7dbăU"s)aN3sXStDJ,BsLbrc7(wnPBnUIUlxO-YzPs+Wdz&8ZdNO*<&N-cW^LJJQJtTF?ăU"PD6lV-zvTuo0T8k9X=hifK4$nJ$(h$uLLmknl.muHvXql8pBxHL:\QG*:DQt(i^ăU"GtslDGnn_wgk7p64b>h;4cHeBfVL6hVqJ>e6u,pWWsLp(fqN:xNuv0oxf/DUHVVăU"ri:<Z\iL9ZD<lcZ$47qM?lY<.RT,JN^7FYnfwortIpHJ,TYru<a2a/jvp7:r3)%ăU",i$YE.hXoaZ4-o:j0abjg+r&[%5]4=9n-hT_WIihrj+ElH'31^pPbS9*>sl9(#kăU"'08Yx<tYp*[]./XrFf)-Y;DqHX/LqU[R[hGr,(C2CV/9HK)9BxANhWLqNX%K?2aăU"kv'8snX^(SC4q&e[?/YJSFJn3nkl8U*_XtG3910&n>=Xl5JY8eaE4i;wqxJMC&KăU"4<V\Z69^*TcL\G1%l<QoE9$Yn9*4b^XCfHH.ATxkXp)$O:#h1qW]'&X_=V+aFkcăU"CPk4QhTlNq4;vpy_;Dhp(r;H[^l00GVqzF(LP]/,fQA]HoHo(Mq'&SnkoddVbVfăU"jN:^ORL_)Hk'^$?3c3'BH_C5s5)j[KO<OqK%:s>J.7iim.sV2B#0ZTe+v<_2&*wăU"Z,_Mo=H+aE=%Z49=5Vw%ZS0a&T^d,+6*$]24G3L'6fT<dWUIn3ZAf'1RXo*YGCsăU"N^?>=hd,S-i)QNmq<il]8^OaV<Gt44Uq''mDpY(?,P'eMTTYD_T;j3R3X?Gi;GKăU"E_g^=,(C9s%/LS'8AFrLLEO3UUtn#iTtEr9:RVOWcmV#RaH+dM$Fu'<%FO#?tWIăU"Sv2/?kCxY#W6q7]3HV/E3k&(XXnzs+/#W'_?$jdbQ7i1Kh,X9rRJ2_v%#EURip5ăU"Ge4OHF8ul;lw%6^+m5p;A[MkST=^#</W:f_OD?zgc=uZgu,f#ih-Ml#1oSv7NZBăU"-FG]T?]O(]J/?l6\9AksRtVnFiIGTbBZkY-/C$l5e,n[JsMr#omR/^D4S;FEJlAăU"C8b,EFfR)l+--S=;wJyJe^v=:IW6)$JdqjFc$BkGrdSgO0qIY#vhO8a)&u0f,$kăU";78q#zq:OCI>v1#*Ws;CdQ]%/8h6FGD[cXX8o%g,I/6O;&WT[j6MWMyM8;IXw%AăU".+DO5VVu#?]kG:q_Ph[9)X>#1zG2PtS]];ByoqQV,Jk-TZqF)6]3LOxNBPHp;8OăEND SUBăSUB V3ăU"G.?whf&GBgQEN-*tJ0M?dA^1igfh.<Y.TU+N]fVi+X$Qp/$BkH;vc<(3r1^M>zjăU"ObYt78g=A=Q&]]q[b/Nnhphap^a8ehkNHoI6qgJAAuRoCTSPZR42/.Lbx'dom;7ăU"dCx0fGHC8O6D0+N4f\na+OJ(Ml:H+O+dDpFqXSgj;c1LuQHSWA*FD<p2vP)02l+ăU">*1>bkLyji^+Bc=cdf+x=Y8IO6fL:i412'fNPlTTam8,P3O-sztkKH$hR^zV/0NăU"EIs(\GozC\G>nF0$.dW^c%kE9IdFQSIry10dBoFZ3SH:^=.830b^5?0n5;d^L_RăU"PBk)<ZEd#39U=6ol?n_*E9)ql1CJljKR8'CF-wh[OB:qfcE#HsefluJ2I/1c&q#ăU"*PJtS'fY9T5a8DhYNas%D+kDsL/)]FqxWf0VXf,v&jeN-ZeoB_:Bg_$b.3'D:8=ăU"E3O=KV$F:d?bE_2C:js(2fdrD+,gY'*>usYi#-CiCK;_7K3xV/(^%KcDPsXD*wWăU"jUW3Lk#HLRyD+m$J>F[m.3k-G-8,2P&\$x]kW.2V1T?9*YRci_idrPh+97XM2ObăU"+$[JtN*Z?UJ5eJ>DdAYsg2Ar]h^Dn+W(a1UBCHQN?BQ7o$=QRXmZbr:$fW,>R3lăU"cR3\0Lba$NWG#AkUh3s[Y(Eqbgje$e35]6W0#Xvs2x[waP,$],sxte:R#&&m$66ăU"yB4qVz6Io;JVXbNG#bm6T$9RCi9GW,76TCPAl5BaK&Ak&X6,.?bzB_GsaK\?e65ăU"&0UHHJC#SkTk=VWoyqfl<''%ieW:nZ2Oa2c(YGT,OCsvNpmz*q>H7UD8-<9,*:tăU".cTG^UZ22K-7zq(6RRYn_RHC3:en7/as(49)9;=0kVR_rBW=^eI)zLg6DoE^7p/ăU"BCuFV-1p*YI1oMm2<6gFCO?/]vT>_3Y3,h[#_Sa8dKBeQCDAG9+Q<S%yl=&f8TIăU"MW,DJM<:p,abhhHJTLfL=#;0F/K#m&7vj\^uciBk#*p&n1<-TcY%Rp&9*AY6Cz)ăU">J^X7Zoh7q8[Zj'PV?$tw?9e8l=.APIFf^kW4^xo.'nZ:TfDYfVnsS#aC^Z$2KCăU"We)tF_VxzX-cP?qA^t]:1whn6H5=j?SG&<77Xv7cOaFG0M>=%XYdLVA=(1#upCoăU"S0Q37:td&3b-\%3AGzN8^WVsBbZ%;3[\bA>I]\Ws71/v[w*.[k9B^Sc\S)f.)ujăU"J,46'Ze:lX[0;Lrl$[hb)W7dJA1WW=x0,2*VtKGJa&3g\EtBG,a-EBBd*N)R,&]ăU"qf>tVDwEVET)to'G)0\?uo.9gf2jD$?\WNI5*gT'2J^sB&hNU,:_:CLfp:hKotiăU"og/IVYOQB3?IXC(ON_1;[.EvgPpM\K.Xr]cPS]MqCn=5/5y:jiM;qHepRjhD.X8ăU"piw;Ut]q_KnM/\+/aZ'hfkjl<9E/0ET&a8*\0-a^&M%5;^'[dd6kb9eXbX<^&?'ăU"E15t_>LgNXbZk(XOivGI;8JujFtt06x0UYz<IE#K;8N&gVbOkk71/v[7=.'Ej>_ăU"4xK=+.3DuP;07E\Hs#Bd^W4&;h2Z'Muh2+ZMuh72ZMu[h2ZM%uh2Z'Muh2+ZMuhăU"72ZMu[h2Zm8Nex*%up()%9%%%[-%-+/+G8i(Ny=4#%%/%%%%1%%%%qz%hnif%mfăU"SvRgkf)D.[#&Tnc\#1aj3W'\KNZQcM-misU+kIu,hl&deym$uHfuPHr0c^,-O[hăU"yQ')\,tnN/dud%%t-z:]5EyWdFgWW1zoHf+)b,7CE7LYeogYS;X).ko1Cgrrg+HăU"*,60nvhHjzNrPCf2upuvGU^FOtI[^C]T7kXp6dM?C&#S]<_ln^x)C]ZccSqg\ZjăU"?-#Vt#4#Q8t8FuPv2thYJ.lG$_\iKH\.7iwtHcKAL]KQdA^^i5D3QWS<vql.ZLEăU"YJ;tt;F;\H[#$#ta#0\[\rtB6\MY]o*>2d_ioV2hj$wN#VNGu\r\6ul9wtvdWs>ăU"sj.LcFG=^j6800sK]/g+N3l3Z6<hnSHqkpofSuH0xO-wqbdu1$hpeCtMwH]0tybăU"bx_rAxxtk6sFx8evdHsN4vNDcsxtL<66gJoc7($^a/s-funX_*q[[=?+)=(9O&XăU"n=Au#Ri*Bd-*>5<p^yf>r:]\xKNkwJb3xFpdeL#GTbM$*YcdQohSr4Jn7cemY'JăU"hit(6LeD)8^H?1%FOh8/eu9M2^)Y#MKTt0eVYXTCk-GnZmJLM)afxJx:nJf7[\kăU"m_bwv:Q3Ea:[ZKlk[*r#l8MJ3%NJb/[Xw(cEb^[8kvHnHusuvmj+JcM=r?]?bnDăU"gm:Fe?.0\Q2RQ_sj65onR9-aFdmo&Kd9^]pMYbB$FhX^<Jx:0dfoWwVQS&66JX5ăU"/[hhY6io1ZCWBBCo+/6,s-r7.o6*>'%dC(sx?7[QAQ+XD^ee.oY+RNF+o*].)O9ăU"_\_8Kj(F+5%_#M]ZgTHhwaw_OfHLUnA'o-R]RCMLP^)H1wC;jsOOV5kJe[(7tUMăU"s3Uat(;#X<D.PRv)UpR])GJQu^H]^lAawB4$d*EQuxk<R.>3,;Kh+*pY-:cOV5HăU"5E==f0>(<+'<4zIZeh:Al_%,uUWRvc9*eHKVpRhhPKbXkcEEk'eWM84Ad=uGLURăU"d5c)Qu*7Y&+bbOkQw^moOIj<QPa)2/+TH,-V#+am54J-F'8j=,N-bQ4UY7g#pQpăU"RAWZkF9/?J#:/Nlb-eqVF8BOZ/)Tr1]T#q\N*cd0i3$0J;&L/4,Q6FVrcHYC92<ăU"%s2WJ*#R)l:S/v&oL4[EGcxZpEu6,d5)BE>1SuJRqA1nZElZXN9S=t<UFRM3n)BăU"\v&6BVQe&;V,;8jG_ZfWg_AH5(==J,Hf)UN*4Tj_>g'8/%mX<Q9E];O-,=JMl17ăU"Vi)kv2Y(y1>#>J:cKi2OZ>h9yL(]b%tnvK;2=[ye%D=r=#,hyYegRko#]K8L0C[ăU"AU&4Snw2%)2/THKYB$/3/;5PQC(_hA8[T6'r-1*iYa482r/orrWFJ_nB^O\]IpYăU"rjtWl?Xbggy)h.>^;8ZRsom0SnmsL)^FmB3d7f_UN*?nqpUGRFW&F;'Kji*'Q2=ăU"%FHY5#:$Xq$3R(%XtlkGCh3k08'Rfa8d;m:1<CGfZQWlwfgUl7]Mlfw&dxIRY8jăU")TK^LO49-'h,G'ewY8hrM(A7+e/+%F,B]$;oNCT&gA$ktCAHhVO^6p\gU=]O<p.ăU"+G:%(jMQVhN?_?s%E4)w.5s\pqxa,9WtP6YNR4d=*S;AuEP4,?d4^u$sgOr2R-_ăU"pPPj9<][PywQ/6Oy%.FxC-MoZgRHZ058k0;#YmfP/d;Omev1WuLrpl._q^v&nf4ăU"Xc=g-6A4O5,:*eYnJbbNSBk,%oS_<qDN+#:mJGJu6V(2,,JGVA]5.2\7_ii\Tm\ăU"PgK)r=7%;Q*#S5dx2Wqa:O.%wr('QV\-/i8&+,9VuFPwK*&UXG,fx=m-oT)DYYdăU"^JIeI0-ANZT+>qDPomX3$BlF&:7=[D]S*4F)/Xc&bcrM&gHq[PQ:,TRSQALm8'%ăU"Eb9Rm*<.hmBNZvP0]1_((J=(z)PuGl[pq6*m+XMa1.Avt-d&fyu=W3gq.pDIlVDăU"OQ;(qe/\s1cG.ZWCE]f%z1_c0mUZ0?)Ob0&5V2QX_[*sc6i=zau:<F2g7O<i8F0ăU":=3q&C&cbg1LPJIK_e<f?[(/7t)/6\bHs?[qv1EshCe2VXh_=hP/Le8?\1&b;T8ăU"^92phHM*6WP'2gd+EhC6b1+R418;wYH1+O+zl02bJ;CC/h)xq0BLw)AR7bycCg#ăU"%h_2K7hybE)_$ctur(2^y9U3_Yh>H&$e'bA6p7p85*^>q)azN3)[TB<co,??=llăU"djp4d:ot)I4P*f#ZejM/$5B.ApB2g)/dwoOd5v9s;8vmg/4kaMlts#;NUr<zW\căU"&Ylk=bS_D:Dwn#]1$<kc<ujqn8J?H]av>HHPM[Z#GG]bt_WMkq,[6jmHaeV#Oe1ăU"n]hn'+?X6Noko%V6/tcjULd1FA)?qj4[XQEmbbb24=ojkl4;<:)Gq-B^0S$GD,TăU"WbK:,4X0f.Ls4uejB:^)h5q-T5W>Pg%A.x0c<4=>iTG_+-leQuG7RK0aTZ%Ok&uăU"x]ldG$Z^elq0Ss*h_)Zv(2\IAw4%N/Tg-oFi\QE#vGZTFqhc^GCP/Yi9Px1L=VWăU"M*h;ne_s<xT%P;aU2))y)^L1CCl6CqF0fwz?FeV'fL?;[LQ./6K&G3/o\.e270$ăU"#5Sx,f[\uR]KK#tV+Jn$V8DZacJdT>P.lG\xlkw5n:FHcEc9%=:ZXBTT[M#eXPYăU"'E/Fq6bgK7K#mz4)<j=Gh0u:H3IVOIraj#d_H]c2B/bYnT-)B[)[>97KhQI\QrGăU"QA3([0*%C3CeIOl>e;>,SmSeSll)]HT32Eo?/5h%eF:CO/ooEcV=^M46DNNpNTZăU"Vc1%K27$10F&-JyTsW7jO1mLALFss2aa?[QKL^tMHBQ5:GS7FjG3rc4>L3+b?pFăU"tgF\Ll$'ldl#[s*NNtQ/>,]1k$M]yOg34(_qo6P*,i$kR*DhNI9]SpKjOD:-)dpăU"\mcq1%*_,El](mE?-P<]8Ujn1%C294=F>1]M)31,cM$8stJ*2Ql]=3iM'j6D7Q*ăU"NmccH]mGw/Uy_*n[n'A.-x.W&0DxOQFbkb5Ks1NQ8fMV,AK:;dRcgRl,EKPshm?ăU"):h+eHHR%?PRk<od0ov;Rh/9qZUt:xpb7c0wV#<tfNTJ^*6qXh=9N6U.9q[6++[ăU"1-[\Oq$Y]UF9b6KsL6\s:jHra>gCp1.h[AxCR-A00=LRzS;4)3j\^Mh%,5JEptFăU"J%SGYD)Rt.-^&UbaNUvTIndWOh/X/EnB)luOz[)K.2a?B$'J.$*HPXmVc$e<[a$ăU"HcMvDvc,07=t3r&LB:Lim5q$LMP9FhtE;HB1vgO3y+;xH2x7]M.s[Y8M[sV,5gYăU")JSFoa>rw%^Hd+%gwDb1nOmFLi+HtL,f,K-n?]7YfHRIMSfDIW*)X6[GehJ&8u>ăU"k]Dcovl01CMAWiDr05WAkiqGbEjOgrE7$']g^<I*1RX.)>PcY5XR=,_u('g'^?căU"nHCjI13d<bAg%d3xu-NnJ^RN1NTjT6/6=:SLYF%kacJuo_as)q[Z.BC0%#aB[;aăU"#h<DIp2O,MssCsmk8RLV'NIW7r1,k^C10UVgbF/HP=C6D)#1%DC,_l1n3U*p)G%ăU"gbUKcox672bVV()b,DJEQLkypFvdiXp\r:vWeS4k/BlH<3]cj-Zp5[.4BGcebu%ăU"haPT<;SEz3d<L8kaXSE/grQbG'%zq4D9=6I5:6O/+#s:a>g[?=oxcy73laZKG&văU"k<5x2:2nPck_wjHe1]Q=H$EjH)0U_UeF4QM1$?4?H^gu/&*tc#jB7ZA[qbLvg%găU"Jt_omu;q)Ga]SfX_:M:<&'pdT_[He7x7VtDtcK'm>S<nICBEftcLM)Q^z.a8&7jăU"Cx'eIc])W5Z2u&VkY\0_WkG_A4bMCtH6Fv$]ef8l<[3&NJ$Z=XTqr33d1'2QN3&ăU"4[J#Jq%Vg(IY2xh5\V]'vUV7-7V4Wp,6'K['0+DSfz*,;QN&CJ<b;*cFI%<xvzRăU"w7NN,OXo+FAB/:To0/[)l,ElMlVjqj;6P%O32%1MY8zVaFl^Y.c='V#s7UEswkoăU"4k/VRnaR1</?n_icr3((Dc2ZV,/4,?gHN/P6YDP,>Pfe\P?>j[B[bcOtSwSm,ceăU"R3RWUNcU;#EA33<RqyplrR$bA2t)j%xsdfp7FIsS+69eykb5Qeb%=g#Uq4a5ky,ăU"??MRG$;v,poKw;J\0vR;0;U?+L+mPPhV75qY-MO]ee7gY/>[Oc,IP-]%U7G?rL+ăU"m6f4gcw9VzQ[cs;mhbc]6WR(lAx=-3d\/OeerKXy;RrEe+2d*[b+Nsjy&?MO-GZăU"ZO4zPmJpLmv73]TgJ3\hl-1Mq;kS0^L3U.YrW+V-pC-Vfwz(>2.ahl)1Qm3;]bkăU"xUV092o1WB1>TdE>Tt^0Yp\-_\ikZgrr=w-;VC\C.XH%NZiN5n4:Zn_xR$do?;*ăU":gD3E3L0cXvRe]r1[lE*hRmtA0<wp-tYuH1-FBu7jPsTFo>Sjw4uAVQxa2XXdjRăU"kuw$e]II(qbzu;Q/3tON97[0W*TGX8B8aJzlGnuKKEEE502g[xDT^h9H]^))BU#ăU"]d,lVz;>)fZ4YjOD0qwPBB'<#2t<5H*vR<gqmAQJFB?:cI\Q>2hh;m#9)\*4L)eăU"H++_fVfB=oaSf8rw=29'+(WT/jWw[*#Bxs&<B4N$g=:3Q8]o#V?TH2e7c.ne]U/ăU"Eq>wrgh0oa#IZ<x3rXpTtZUb6M=:vWZnABssc,]^-DBT'V1H?wT%g98y>ki'4h2ăU"&xts/<DgOsS0+_uP#Z^Cw0fcg\b$q67%rT$+n2TWyLQ<OELiDsa[bkPYZpip35[ăU"sNmOpVehBIY<4U)7URgVoO_g.]_)ARJS9M]Vx3'>A8gdL^rjTI1<CK44Z:\f7D6ăU"U<L$IdFK7WDroCZ3IrEGIQn?*^X[r*y(PINz-iny&6Tcz(IiNz-nqy&6cjz(INVăU"z-ny>&6czW(INzP-ny&c6cz(PINz-iny&6Tcz(IHNdb.'x&up%()9%%%%-%4*++ăU"G]a3%q&,3%%'7l%%%1%%%%qzhn%ifgq%SvgkEf)r[B]k:MZNg.J/FbETgE3Wb3găU"Oa(Ff:FQd]w:3(vsES.-SW()WUeGD#'_?V8XJ];6F>M57Rd%JXAeS%(A]&%77ffăU"_)>KB#iGqA*Y_(,1tQ'3)_G:)pk#SMutCN'5hRd-(o=Sj?XmSzQ(7INEnyAZ9sIăU"a&Ks;L^hmtNIu#>P>k8jWq)hGsQr>)$/KGblV7_dcaWRH2B3Ui'4Y'X0M5:f*LZăU"4hhMtst^gX43HCc,gB#Q_#MHQeN2nu)0eXZQx+2<$ZG^9$>$2T$06.um'p?l#0^ăU"8Y?uQXiHmGm$=nsUP#kpbmdbr#_bN$rsSp<gtfUlg+4VB\tFX,/u7oN.jlOM0beăU"&RPuW$VhkL<JK$tv\ijd$N#ux2x5Qx3NJuxlv#WsJv4cx/xL^xncn'.xdcFjMHqăU"dr/B?'nJvjbp=qi6lMae7Juv[TT2XyH8$m9^k0,1s3E0jou/36#sYfn?da,jF(măU"NOuB\arF+J5L9w(U_:EhG'L8m?2R&QrXP&+KJZ9QjWX_Mj(%szvOnN$u]Q%>>nlăU"/1N2qRH(+C)x+mG$9R4DlCWq)z3pqJS$6[1Ju1Ck#hC?d?pE1gL<2%GZZV?rG_făU"ih+TKdOubBVb#9B5AW$Uu53#_T(^bMeFEpV%fdZH$RU8u6m.y8^0X/;P<ORM#t<ăU"isKRqm^4AXJ$4J3h,,\XX]JLyyd3=mil6jVt([m-C^AXvBK)+LOz&nho7u>veCaăU"Z_Io,*qL0=/GQZ$\37*\..aN\ri=Y&NaNz-kXt%Ic#c97QN*7LouA:_Gho<.3(UăU"D=RGWgTSa:Z>F((&n5Rpq*T9Vi[;P2\R,CG_pE.VSwr*'[YRD(v19N$J4U09uxHăU"gf&JeYhquP<;g>G1=zer,$)p8]6SQHB:UV/+aFxT?E\m(vpbl)aS)j$-rKdR(l9ăU"8kRDY#^[7f7),bXv46.&t7)u,w8GLiYJ?4G#d0WFJ5BBr+#Jp-djgQ>29FQOzl_ăU"9K9^mqUI_q$hb[[rRCQW]S&s:U&CGHq_SLisBW4iQ4&,L#EBN<B1g^XUC[I>U4%ăU"OWCAZ:vAYqAtxm;/GgwBatrFD*Qoms#vWhxeQ6?_E)Q=LRoBSA(=FA[;J4*s4]OăU"<^g9eQVYBQ6O[:[wg181Y&cuHxraO_:3.V,KUe5,ZO*rF3P26_b_\\s8qsk+>KFăU"I_3,ZS[N,6R[=*qm6$I86#q8lY(Pt*F':K0%t^/hZlyUE_G#.+Es528-IsI%2W3ăU"144A(_pH&Spe0/mYTEA(BGN_>98mO(OQ,:&bdoSTfI$<cm)2Nm*cl5/U+7%bPAPăU"T&2rqK'5Q6K*U2Of)9=KEuq)uN0BP5KKQJ2l)9,g+[K(Nb>Kie5Dd^?7+9#R2KFăU"OZAJ_3?(yvg_<qJ#g3v7]P.QrKC$^9LSBEbtdBoYXOENhJzco\hdeuI/<O+s2]1ăU"l8?*1uNfMU6203ec?A(zjcJK1J4ciK-WXC9TJbW]S/c*lcDnN/BvDxYP_kv'Ar_ăU"#%?Dp7[/ab'9S\Er*=n8eC^-'o/lq;BqhG7E7Y9GjN1-[BF^36qHy8UlW+P]\ShăU"scEaC%<gEY10Ave.-G[WO1K',*F\w\k8?#kzWkF)JlC$d>5h2A/Mw1XG9(5&CuiăU"5L])'tt,&7(bEh'XD]-1Lxs:$Jta$(VbVq*A;jDA31fb&$,E3=^H:WGQpo<'[#\ăU"bTt)pih\HZnkh]t20bZ7a:kp]s2eJE>K9bvQS'O,^[onGqYd>4hU2JIql^fH#&hăU",;>jXl?q<o4;=qf)G-;Sle5vR:Q:4kWPG#T_lp7,+o;'b[G7<L;$lLav:iC0%b&ăU"#Dt9d_6?:br3*uI8Z3Ni=ih:Ud4G$,iZz4A0xl>3U,r9b'Z2.8C\-9[fp6-I9>)ăU"YAoJym'ELXU=,C$VK-)CP36/tJaW.I6#\jau(-n9K9Aqm>K$hEdI^ADCXD$E8joăU"NSdcBc(+Nws0WbA^5C8S=wDtmI^Vjo'#G)Lk1PYaEoPEPP4bO2e5[+Ss)^GE-74ăU"1%ES9IV'fye^ZDf,P>4GqMI3Y:3J)<]thie%4X1og:YAA+m)$T6f3/r06sEg0m/ăU"HN*h.cWj[h.3IWv#yQc*3w:^[9Fdh/c7^\1AEA(3XH%2qOUHBBdrMJuW7l6:oKAăU"0qlwI8XaV36+A01MJTRsZ6?S:s.\_=IBRwawG+]9I/.Y*,cAe<s8M4\\sKAj4ksăU",O.FCo&hSYHGne0IG-k<Cj>b:9<^#s]*JL]RJ)ym2a\TY/G:P-QiJpiIV3qtB/uăU"G3Og'npGJ&JA&H?%a3m.4R<T#CZr$cAu=3Sgr03Fb$#iFw&2ojsAZQC,sZX3Dp&ăU"tBrMD43+^yTb.%o;'dBPPp%.pRCx$cXj;%If-_,MlN8ZS87%_C]Oa+$A1:TeIckăU"PvFgdu=BHEFV?fE%cg)BvoFqxu=l-9<I^AD4E\qsK(GO<KIk=O6B,D%_eKxKnoMăU"]dBwle#rO+6b6G&L+4qA[m4_flHDML)zck+c%8(1pl>zlgFot%A_Qu^j>epa8iBăU"OL>UoBRO4hL[opF?PU)f+(pX::[cGjP0$Ke8ekrAO>a0+vkUL_U7<9H2J?0g*-IăU"$cX9QV.1S%pavNIwGy$02yVj6GE+1?Ve;9I7teNI\ptL-)Yo/t4A1&Y,vTZfri-ăU"c$)4X2XdM+t)S<'JC.KKNi#ekC%kwnBh3jSGO-3yg*jt6]Sjiq.,H1mB6'vO.X*ăU"bsf*_HT<lJ'831ghEg4JwWo4y;rGeMiFG7=xnVikYiZ/a+ScI^><j5p,K2\E8EFăU"XH3Hm<]xqa<*$5T9$;TP,?1fT6_X6:A4EUpPG(Zi,<QcdvJiE?iomE0C1K:YDY'ăU"/bNW8e0HTX'XV4*ySuy._oNc_(Ece?\eIkrC&&SaOm%k9J7O7L_.7(/1J80[1VrăU"dm65Zn?>8-Y93Kd:V29UihuNWi1UWP?oxpiX=>;z'UI#p,ke9AnV]%r6l>=]]iPăU"/GQ1agg-hNEa2j9uhd'k/-&xJ;s=;'.8HYzksUKWQ5KHA+2RN%6lAgvh,AtnJ[&ăU"5[$ZNaP/5R0F0jI\V?P9Am_\S_l9M7_PI.87>G7)zTS-%8d#qu0LOYOgZNt2->săU"?leBK6kdWRmy2Z*n8xVG0hT243'Dyn#hAjjF#\-r$[cEHIU6dD1DMe%fLWOZ]B0ăU"ogg_,JWQu8;SAMBsO<?kn'<^p-CXe6u0e:Pa\j-?Bi,X)MF%Kok7rygo]nox.dkăU"VWZ]r0UuC:yZxMufPNj*wlem^4$L?6mu*n2a_wd^sKc4):6,m9ovK>fDAP,nhzOăU"ptI_Uijs5_k?]RAa#;y>ihQicIfBoSQWM[&qgt7Z<RoNj(<^mV4G(>f5]Et]:y-ăU">-V=X8xL\tCDCJ:ZdV6LnbqzYfAQ<N>.WPEb\J.NhX]7pqX+[eYn4gVyMIrsX]făU"UPytnt7pZjJQm:rI#;1%ez_,tu95K^ZUzX=2?a>C>Dx6Dd<y\Fv$GZk$%_4&EhnăU"k]m+QL\4X]'R01qXX\H]*O,peEqLb,WXyVn,CMg<zT4u2v^#FfcRS9K?u,ZMU.7ăU"=mtT.*uB);#y3o%g7o*e#Orb2,A#520Aa/&F'*N%.Nm1XQj(\=[rmoV*N$Dci#=ăU"3K3GWu0l1fu59H<Sf=rC%HXo+LPtijp]a^(\xYG1$/xQ'M<UETSbHsG^+1ePd[săU"v.:FsW';?Z:RSe;XqiQ1t?31vdMuh=?I.zM>xd8/s>H(iru9ed<RDwCJHOX?F=PăU"Uq-2k4qR/5A(^sCXytpDABmwt>jh2E^(^v4;Ux_L:Cw=C$:HtqKZAcWQt[YFa\0ăU"G.?I*3AE4cuH(c/T9nD2Z%-C#eN;Kfy1Pc<0Kil\9a^_Bta6wgj[4c+wp4Qx,NYăU"NXLFZr(Jags+#-ik_PW63GK(Y.z$Qv<a:Wx.;6bQ?_'2Pm$WIAH[CrQusD8ij6iăU"$#oxX*KzTKCfs0MSd0MxiKx#2DY+vn53doZ7I\a=>$'8*ui&q:iTUxB=UJW0bn2ăU"V0(hB^+>i2^kXXGExe[1E\mTHsdYRp8N18P7#+1Vz36:FN.fxTww(/O1kTZ1*krăU"ck\M'v(af=+L,=%>QBCQ7T.q]x_ZXb#;i$dzpM)b2%C(X^]9)8JOI29HdYFj3]*ăU".<wfC/'jraIQNtcw(\sc_ZG$9aenT?W8X,QB7Sg<<)otlVi\47qgV'NANUA.NeLăU"]iLqk)fc^A)EssoM]QGL%5LF'K$ZtL9s.hv0tBtuoNN;Ib<L;$G^d>qW>??xMw;ăU"dI,LtV_M+u%?ylBJD8dN.84E?QXdPBS.V#b^1AwELw.I>_7JBKtN'H22SD84G.găU"G]3/oNxdXoMOrA&w/ZUMX[^Yn(vG>;ltp#JSq?8+;'uvldIM-t:)JLd+Ok02^C:ăU"F85\)O\GXpdjdFO3%F]onofgptGnN#hY;;0#5Ag]aX)xra5u.c]N?^iwd,^elsMăU"dM6Ki4G5H&./seMLKCMa-tljg/GhkvL%'>hW]otyt9KBLg.1,cR<2)AKhEE\_;MăU"&wdU+$NbJ2GwH&Sb_\76wsWTv-r\lBFF]m\K(5jk,p,CN^1TpX+A4;%Zhk)3DC\ăU"BCoQ2dt-^YN9GJ3fXud)_a?9d0IxJsuTSO/Z/.&<h<:*TuSO//Q.&<<q:*TSuO/ăU"/.N&<<:t*TSOu//.&M<<:*uTSO/c/6rf'8up(%)9%%[%-%s**+G;$%[G3%,%%[%ăU"a%%/%%%%n%rufh%ySvg4kfhr&;Il:$#.rT6LoGaE6JpS1Z\S)7l[SpUcefk%5l]ăU"h,s%%R[7,g1==>jY=iA[h3%S_m15a^-C3?ikKKpOO,SO-&7,]1LMJ'XZbJjF6^năU">\nQw(yvQSL2Fg;QAaX<b0lVi&(-jz6InD0^S$>qHLSK6kNp_Ymv(JwDwnPzXwNăU"twJYjK:8R6[,\+XjBu;iH$:$Rh^Hnjb-k36gdIvWt/fkScn.T(u63o4u.JsLTd\ăU"PNi1MJvN&D>Gt4qUi=P<h1nNZuTZi+x[Txjxerx:x'qN8\b)\j#dNSG:2u5rM_DăU"BjT=Z7/rZNFN=-gCLCmZbJDr;n]w_IOl^>VLAd:t*XSsljO>0Zw7np<jv?TS]4#ăU"NO?x:KtHt\TtnTwoooD/xc66XrZ=],b7Tq7^6r^sw_stw#$NH1.Rs3FAAXwSAi7ăU"]q]a[l2)%7CV0BVomX3_[a,YownUWJNm)g64YD40v,vR^,hBe^Op'OZpRkO7FQaăU"';4or4zFW1hx[WoGwMh?h\YOtP$r;b+w/k><TpUWb%cVw'ov7VaN84X3g0WGEo\ăU"ZLUO]qN<RA'OM,mOsK5Pgb87fOFQL3e6#d]aN3?6gHOb_WqhydXK?<R;z*s1rQ/ăU"Z8.'*pk-9Tg^8YVueVZd=w).f*p,O>t$:9Fq9=3F.W#tfOOY[O1%K?W?#>rR9vGăU"2c^>E[3L2>/,^n7tW%3NhL^)ix^y#P;i^(?$sg%f9a#ZZiZ3j+yIQP9nNR_K7bAăU"hOm^pfPI/6DGR8skx)K5*:P?)Y3fJ9lK^VA^P>(&eqJi%Sva8&+_PGIp_I'p_WnăU">7P7K8%Vp\LU2gltAVE\WQ2'[V-VS];6xdGdH:/bE)y^&qPm:4qU;:+0%^&*J5RăU"nDbmX<e%]9MVMSu?^SY>H8G]jL)KI(6/d:Q5#FJ[u$UU4taX+,9]Tf^74eerjD$ăU",b,E^<ASRsPqPvi+uiNlMOuYjs0GOcx_<i&HU*8sU/8KJbs9AM()AG/RLeCi>>)ăU"sec-.*R1UoI<U^WD;YL0juj:nCWn%uFYJMS.%b3x_0OP7D1Q,y*kDT'b,#FoF\RăU".N?9e5k#M0]CWj7KTo:Rdn=5B%-hqr2&uazsb(O33&#7,tn1KVv&DPUqXIaglz<ăU"4#Y+v*uLZ4[NcupqDB#cJcn&Bb=aH=-BvKQoXFgJKpa=#,[O\/7^nRajA/32(ywăU"tHehodv6/^=Kf%O:#0SaFtP;'i,fD1;?H2ZV^;3HEHn(A5p<6oW6(39w.c+.>^kăU"1lo,WH]^?k8(#pTv7,.D+7xggN-XDScb-jj*C&lO6?<Yg1EW*^'zhe\[Zh)BT3găU"HMb,9DB,Aubkznt8),6iFapq]0&jxox<$W,&W#K'q/ZtR2Jnh92kf3t2.,JDnP/ăU"P/7Q8^&z3r.[UXRO16^W'a\/.X6a?Td7D,6/Scid;DFFwHr#JU7J/AS$v6%d8UjăEND SUBăSUB V4ăU"8XJPWMk#Ssi)eEmYBP+Do]t)CasQtGb)sAk\\:\=+,n2vcjRw,H]R<A\5SnAj\=ăU"LU6J'j$(?naX-=BW$E_k:DUX6&dXpe+A;,L*Hs[>7EQbRwWNe)Wkd#l3DiTI$MoăU"$bp=mMJDtblI\&s=t,s<7/5J>0+qSfd$TnIRG:vWFzm[n&^G'^J=)'CKqs^S,QrăU"y6Yh36<H\5vPHO]3>yE2*?PW_ph(t5I?iO5IOIOQ'SZfB52hyScp=P3a'fkt4c^ăU"V+,1>uZ\5k)2)aooEU7tw))K^;8=Gc_1eLF^ddqB1jFtp%G<D-Jk)66(L=%qvXjăU"LAvg,MHDXjfh15-[vC^s^wfQ>jKJdxs8PihY_ej\V1p0g6LQ[sgV6dkXS[Zm)4WăU"qZVt/;k:qh\B34FSsfu-L,VvCVXnUYO&OtmN7MTiejW&c).N9M%Nsp2INC<:SD0ăU"rAiZkLm)XGr$r:)zK5$l[&GWMt^yjf0$e3i]ptO*%xRa5S.V)d4SIFR]'h/5ehgăU"8ru,-'Bh9n7fqSE0U*vmDFB&8L2:pC-K;hfXZ<1feTJsj(#]ZPBEN+T13b',qV(ăU"0q-0>)[$l'vL5lX;VU-nfr5fhpp_1J3dSp[&nMu^)<q91HLjtN2OxiCb4DXB\5DăU"Yt4s1af%R>&-0DRPVq5VR:4T&lvkIh0[tf6HofC$h/NybrJ=?^Kt^'?9r1]x2nuăU"G:OVr-o=>9_6WsQ0iTk2/bHX/XW2B;L+$')^:-oYWYu$llkCFhXmB-Xc63]jrORăU"6ja&;2L2T:4$JWrX<Okfs*5c65sUIlp[CR,5.]:^Q-m%l_R)nh(Q;VP5dZ)1$5tăU"))7L;hl$-x(uY&1$Q=oQvu/'QZ-8e6bV5z=u.RB,V;1[hKj/jUL6G[;7OZ+C;*$ăU"$lnH%B>DDYMr#gwy2Bcj$)5#*+7PRN=Lh4H7=mHGZ.1^nFrXn(WvS/hw]xcg'p]ăU"Q<E4jF3PZEn/xedr/q,&Pj8L3[]L0LLJ5%vhMx'wodngQLnxf-PIbtfV-Ibthf-ăU"IbMtf-INbtf-PIbtfV-Ibthf-Ib2tf-c-YkDu%p()9%%%%-X%q*+sGV:R*Tj,%+ăU"%Wa%%%1%%%%htz%wnjw%sSvg4kf(r8[AN6?'PVXab,d\C6+;8540dm:iQ<%=+&IăU"/-0:'H0]xAmmm9.ZrcRZ-jgYLdE.4H3*BQ0g3/'#%#...B/Q0CA7Lc_9b$UKPsIăU"+$9/06rBrsLN(W453JG5O=.uaKcTZWPnyQcNzyY&(PtISNIdjsL434sxsFLbx]xăU"bbc4cj2nXs=onNBrnol-fll6LurQ2^EUEC?MnA.ElH3fVk^UN1aHpvhkspiptxpăU"&$dZC:uc2js\?d?x?spFn_HdF4jrx9/uaZx:xk,x>wQxvV)aT/S-uwKs'Wn?ttuăU"oDf,ufDfdufx/8k>x9Z000>RtK/if?;W;HkZ8.UY+5/Gt:jo[T<p8*rS)37imntăU">l^#fxu-uok+\DdQadK^NZ2Iro>B&ljQ$Xlp9c8Jm]n,iuNU&S$1AHsm(zk3v4PăU"#\))^aC6rV?^qce0iS#L_mXbbbUiO=b3C;ZCkpsX3<e%^IB81jU\[+MR=h-d9%HăU"C.m\;]]MkvYQ:iSQ:YYH):?(mW9SjaLf2XDFhdc2qdnV]at\DlM&n%\'8yXhsCZăU"0ET2G]IEiU,>PG?PxN]ULzqP$^$Z2eBHTi5>rcvi8r,GU)3,0D%=H,T>rVJX*W_ăU"1Xa7+)evcP1U'KIv_g##Dm;R8#<jnc?*FO[8qf_h0MmD8Ag1OFK_6WA(n;^A5$$ăU"Q9EBA4[9I]Ifd&*9#SU%UBYnqH737OxC<9mW:X:R7N/.d0FWZATj.wl;b3;?b.xăU"5Cua]i-iUKee09IXO?*T1oRcm=o6dAZ(X;^cJgZIASlIo10*=-Dn;gikToFF-d0ăU"u-dI%HMAaUCZ=.c_:sy(Ic+:m;hWVo1)fq30iqa.0Cq.86J8=7=Oj83b[WU-hzjăU"]ElB,';4fQK/W4he&bWA.=8-(<1+ZOC#+v?:ru=Z'jgt[[fM>\rjH?wO?\WI=1WăU"_<5<.u(bU+m,+FGc\3+cK.MH['4dk5O);?>$FJ=q5w9orlpM>ZS4;G/8L*SoPGPăU"A2zeM]=HwMN0oJ=%(h/1sb\lvT#yo[I?H]2kJElH<5#3X-cPb?X:_,\zakNpiLaăU"ANbYqVugR-iV/EfP0+bT3&J=j%[pn/1M[nH2aT&d3E2T:61%GuMG:ESWq]&vv_\ăU"RKZ&>7GaUViWW(hX&Q)Z+x%.riC%&WQ:*))\P8$']KiM0frS3o,/HOqq4:pd)\săU"G2qyDfS>LmhkRW2k7OQ#,JWa#^C$fY'*9?NW-]?VqJ^yp&>(l8Qu,uTdv#zKuArăU"gF8_0ZtMDHF6Gd,&F/*,i1?FhNDt0ape.=TSZ;*5rSS;%bY7R\;r<4W,ReZGxQvăU"c<diX4_1ro*)Noq?-TI(SDXEP:MwIqLZ&a7Q8;RLRH]06m)&yZkkqn<;XLAp'lAăU"HL^[G*_qP(:nPnwUjM3q^poAmKQPtt2NNLEgUcJ0MMGfiuXFaKo'3.&pm*;mU?HăU"E9.t/aq#XGT9AbXTxBPGf+.j61^;uGioO:9R8UqHVk=Tw3$1*'qPLP7Lbk%jXmTăU"'D*OH6+I]PJ?s*0RpII0sSeqqj\/KkVYS-JC?'8zGdb.('0if/c0k7Sl5a=jmSfăU"9jEOdzF<39?bY;;=NO41Vfr3Mthz_\.roLbYe-RqL>_,nQqSW<MLZ1NskEaM(f?ăU"rTjMY2JwpHf.:h&%m:PYm9EQ<D82SppE+]n\9*5nc$WIePrkR&8h8n,:-<u$gq]ăU"cEw(Du[=8JYetK)0[;^a>hGfrVheU&B+^<Mm2>^NVoJ/lQvx4O&Gzj='_H3S(iLăU"3CD&kbg9m5M<X(hsbo^vIgZHAF,[Z6JVhp6LU706c4LU=CRUvro$TUIu>&XWt9băU"(qE[ST8M0UmW\tG_b3&V<\R2#X3FXU?fL^,ic?Ba\0:#pkyiBC5AA[Ws&H>1ZjUăU"#FR&C0I8H3smX)>lrIpV#iHl.9hG$f5'jHUy*.XjBZ;k<M;]-PxiOU0Eo3C3#KmăU"qq5l<&8H]+V3H'[,,dgjeE\kj3pC4H=*K>fzGM1.\Z0_sQMc(qvT\r>wQ9h_,q>ăU"8EDagj#YD#7^6]7n+C4yelQ;Ys^zoRy=rE7^rIr?vR4iYsvQKw]NYu?vetiV4:'ăU"r6y/A66o8Y>qm\a(]DFH<g6foH.,J;C:*M<5mgNc-:^SyJJqm(;LTC8Z<S9%)s(ăU"Lj5).);hbIJ*b;(lqD.X\Fa2pipXmb%+ei48,a_HeE>4MKp(Y%8Kr]vH*$6PwS+ăU",k^7G$a0c5LDka$Dn?reh;\$X2Q_fZBESf#uat'3;B(s^KBgPGG-i3Td7Pwk3ukăU"&Y,UF5tGU7&)y5*Dt9m?3qPUX<%J*<hC2t.-giG>9fK-g''0..PGcw,vV0jcQEXăU"'$*>aSh%Uboe?^'/-M\'*9nbxIj&JhxDG$#;Dwg#Ti#6AvpAn0C_H/KJt*Pch)+ăU"&7Eh6se6;U&-fgr+ZNyx7rZNy[xrZN%yxrZ'Nyxr+ZNyx7rZNy[xrZN%yxrZ?v;ăU"al%up()%9%%%m-%l*J+GVI*fe*/m%%wx%%%.%%%%fw%nfqS[vgkf/htWBRnB#zSăU"uLLb<EjPCd;>3E5*5G5LJWVVSSq5W&I5iTnIVc:eZgJI%Y7XbM]_R_i:jZ+Qd:jăU"Q10-U5)sV^).TSYEHc:CB.5<D$j<0T0uLOhtQdc&>l3X3+svjivuekV0oVz8sZpăU"tvy]3KWhjUOKB>K>UXs4Ed_PRojEuXw9wZUwSm<SG^bjPh*rHaC\%Z70kZVdN%+ăU"\\c>V_\M7vOVS'LY0nVzqn'66us\NXr'MYKn&TvaEKnS<3&L;Rq*J)olp.N'T6PăU"wCZu&q0TukuponT(xtCvHdD*fdDKr$f^jT8G^il&-7Hk4PNu6+3jEG\4>ns#XWuăU"qR?hp\qJtCln#LtLmCaVfrX[#sk#jLT;MEqBNlNfFd;'S]L\^b^8Uwlgq?uuOq6ăU"Bq6a4BapBPBYR]ns2XuTVds#wt8,l?V>RchcovW\oKXR7l1eF\nIqNe\m^:t_G&ăU"glS>aJ>pbE?*P'SBxiaw+9.MdJG;lLUgv57cCt#l9\\KPaiee-0j2:/d&WhvuCfăU"S-X>]4=G,tigqX?YiUd-83/-/\,T_t0/khODa)jQ8Y8aBu\5;MZ?=?cHk)]_LWdăU":t3/q4YCrtd*<0+b:)w$L+P4UJw$S+Vx7t_]#\HHH&m?>bE?b'tl6_ODdOT%jXsăU"gOEUDQP<*K>8LzOJ.e)gu:9r=;SqGTm[mUbhpfn4ki%pe9RRrgd.FICow<xZ^ODăU"g\jwhun1lTS&M$_Z)6DpHp1)>qoHSU7qUR2ok5S\AW#R=]=iF'N%5f7lQGL3A><ăU"cW;pv5Yx2Ry>pPcM)9n0,OMtAQf)3(xht_ZZ-]k_2-<\'OHoLP*rd))I:BLk7,DăU"I2_U=(hvwk=G[=o'E[;6q6u2%l.-KF3]%)TUQqQYu^Cqj-c1YsEtI1Le3x''dO>ăU"o]5Pd<CD7r][;7LwKH[sTW]dlMYhM+TWqP%Iw%a=a43NteH>((km<CW7:OzA/<păU"CB>gVlz738DI\Ok$^Y?Tp[?ySxdhy:dgkiK_XD2jd+(Z-,^WbV]s]X0&o($0*uhăU"'oRwe$-i3jzUDz*u9niM*Z.]H)BsQsA#5nkLF>^4pa:--en7CO.NID#:ScG<fQDăU"PC0YLvCu26&%Qmtq7P6F5xs]Y^:o/T1-\BnC]s\8OJ>qA8C#q1pak:kQ9AK<dJIăU"2B[+&\<h+'4$P&6NCV-22Sjy0P_JKV;dN0<F0=7^pWNsci8p98<X=QP3f6'E1A$ăU"]VXA.GR?_4E)>(H;PWe(X?_z_eZ5PL,al(>n>NG2:_XJ=#E3FK.UM'L:9]eQX%EăU"M=F>p8;O'hvH5oFL+8l]1*b*(t+'al/.*[Rl[Dlao=zpsjLtJLZwBPfmEAFPupqăU"9<Xst7?b&7;.rtloTOox5Y,&+c1q(%W0aWBv_4Y#_m][>=Te\[eWjxm?42<.jYnăU"P<(*J'fkECDTghHNBxTtheR$TWK]QHr>Lr'4-5]Oz$WtuSH3YE<UtqI$1dZ$Q\-ăU"5]FKI^sQB&eZEF'qZVkrurtP;V-5$Jg>5*k8-IWPbe0q'L>G<78[<*dN-Ju,RdPăU"emRXx?MsTOJ>s=blH;9..4B3#4\=m[[^iNGLSqIdlnV9FZtDzeSy;*.]zcB'J-1ăU"[a2XcqE9t9G_-dCkkTnapt[t-clu>ie)(hIY99U1:x/&]XZv7N=A:w^gNoE>BZ8ăU"B=7Erz7AU'HMp4'Qp/me_\+/l[8D_Tkiv04dhk'-Wi$Z9Xe5>k?O#mNQ>mToiH&ăU"XZi26u0slTj4-65Ol*hBL$N6Jvq3MAMQ,OEoz+HrhW.[es'VG9SFjNH_l;*s;>HăU"hwtEMtuSXjZ,Jn0XU'L6Y&$:dGka1ArkK(UdV<XgC0\<M;w6thqKLY-P^3MsI:kăU")2\s4VKKfx8LmyTpQkv_wCen)kG>o'OvGc8FvbQk6Go]]hNfV<SXb0>n'_2s2k2ăU"E2zbVxd_AK'mf4WVAa%5pD,>kAP]eL]=Z>rv<aE_Km3G0<X)UMw*C(HA#o9Vmm:ăU"upfhMECHt1;DYL8k0ZZy#3TMU9>Mh<l;4F,vS2<'<n_2eutH2\DV:,.r4[doRp8ăU"7f#2jr1R5Dn:mq=e5^XUlM'_fq.G#vJQCBrb4MQdl,nqb67'l0,_Rt1X'oMp8r'ăU"3s%VbS&4M+BVku\T%Il+/(>4+lH2P9_k/0au_,m8OLA;)jkD:Vc+V<ci:Lp6oM.ăU"_,X1+alo>4ZUKhlIY?OJr8AD$L,aK28%57R.Tk<P3VqGlSrPf\0[_gie(IhX7TTăU"aPjLt)A0]49XaW<'VI?n)fDoS;;g(2\+:)5Yn,u+8e$Xdd(THq\uv%fI$h3r4zbăU"TQb04?D*s$JQ[h[+<x6:Qu.fsQ$BLn&At;SIa$nDJT9hk/sBn4eUK-3<23.YyNpăU"?:FUEiZ2b?3b%bxc9pf6xNP[<#bD8XST*G++TsS3_mL$V9'88A[puRC[T*q$,(săU"XiX3aFt.>JAj^kImI;]o?9FClteQUl1b(=XCZMiRt6;7F/fu:ppQ3Ibko?Gd^oMăU"D6Fj'M:Tm[l&Eay25s$5&3,^n2ZA>XzS]wA\[^'^#RCSn9uB==p[e7e2lmZ]n\XăU"H2CE:voc7lMbhjnEL'U;.$&*lve:KP=U):]g^,Jn(2vr(%$-RtorYEb>p[8ax8DăU"27d'5KrfetKO,B)2%9>F4o%TjTE=kzJMP$U2C1rHk;tZEtY'0XbT0\$ZTJ_YzIlăU"tZxRU/-K:d)ZRV4wHc.&+<cYN-oJtDw%oV6AM5-Gu)[_no4x,a3:GgYjqVidPErăU"RX[Lz6aHLifp&qtYmHFZNJ,lXrgp2K]lt.&tir7/3e3GR#]2;5rArOF$U*7LJmwăU"5<&fI1Li<.Qso5bnF,KVI]MxFM'?qh[XYvCYzZ5.2Rf.],-tu8nrG/VXv^u<pTXăU"B0v(Ehqc(9QB]s?Qq8GHfGZ>Eu*RhHmkk>fWokgjoEXUn=sSle8&b29xo'KZl8:ăU"l8l\nYlLsE&bY%z<J*3#NLPFy2Tqz$>Bih^#CJ5/:=xEr9pbnox3SD*_uR5b3q0ăU"j#Gqxq_AI*p3VKGjd9Eq+p9c&O'%;DNM0fToRtNl1Xeq5mpH?xMB;&<7g-(FS5găU".-FS5#g-FS%5g-F&S5g-(FS5g.-FS5#g-FS%5g-F&S5g-(FS5g.-FS5#g-FS%5găU"-F&S5g-(FS5g.-FS5#g-FS%5g-F&S5g-(FS5g.-FS5#g-FS%5g-F&S5g-(FS5g.ăU"-FS5#g-FS%5g-F&S5g-(FS5g.-FS5#g-FS%5g-F<x:w2%up()%9%%%m-%n*J+G\ăU"n4(F1*%%%sa%%%0%%%%ht%zwnj%wSvg4kfgV&WIj9_U.tFueeEM)=j?AI+G1??IăU"):Fd1AV:.FGA=JX=WPMW+?P3A#P=MXWpPGP:FV)+7EkN#d+//?01E%G<=>(=W2<ăU"HBnvEu8cPvS&tP;-F'/gLbU>6V:-6IXznWz<'%m)b4m;6mhDKPimO%RkteAok)oăU"=o_(E\tg^JcF[L<K(at't7_gK\rb<+u$TN:nm<s+VwGFM(4ZN2btZb.b&KLDv^YăU"uHE-hh,nVGmv_Jma$8pH?WlJbFoCgMlj.mV.jXkiXn6ts<o(gtN2xDPM7GMujK[ăU"?u[L>0AZd;NgRm-7N5KNHhBHNru$kBNC0z\&jD%=(E7.b-pbz(aj#sewpn*vU*:ăU"z,DaDUbqlvYx<7<4Xcr5IqBKZ\V%qhYA*Rwi;_C1C/pCKBvgU8d;)o,5?bOY['zăU"CNpF2LkxymL&lQ\U]iO)'<gZ(/DQS+[c/c.3$)'%9JKNV$j.6pIGL2T+J&nmCo\ăU"7DZ)(T'f#H--:H(3w5gl3Bo*BnJX3*_E9O;%U[kDg(VhVc8)Om#6g[2Wo2R20=săU"<9GGssC=DEKLm#n*Y*(h0Jj%CPO:UMu=Gu5].42CQOkwVGC#Y;IIr'MMqMWX:H;ăU"$O(14bcG;Z)Zo/\/V]TIyMur2[X4A3^C:112<vX+HXX+<wh9&jBZbC%boQ-P%62ăU"WWmh+z,$_TLR1GVt#qM9&a&m:q^e]PKVc5BG1F<c[$W6g4UtI&d0kPrw(Wa[jLmăU"X&nJ6j(xI,pw5V,tDPq>N4qmRYGd$w/Ywwzkp#glN(]Uim;l%$/R/_0Bd-NT&:căU"VBd25B)&miNiL$mLwL(gv6kXTZuZ>J-$1eRi8jG'6>b$e=kjXG5hs(s/drUBG+năU"+W'0THz;#MFj3S1=b't4s*mktWn)[>9ba*pf[H-/$Yj)<v,pMConDMDS5UXrFGoăU"f/Bjdxk2<DSWg^b9:Q;:E=,.I$.$GARaaXEtTa-Q+l,_);5ylh#2*IB&9v=XuPvăU"Y-]j^I^*0w1t[YrVb^82v0<;vWrx<$Jqy/tv)]_fLd.C7a_u,m^Mv9xGboj=$v$ăU"%z.a;))]5l3UYYt)PybxAizw*bn:gnJsyK/OV*-T;A9p?^c-4*VL_P,/+j,N]5]ăU"a2^cce(&=hs2=afSvODfoL$5&OW7rlh>5O1l.VRIfmscQjWpF/79orziF?;*r'CăU"4DkWNfw^Ek1o#F08_1]48XWB9*Bnh9jUifP^VdciUai29)Z#'qWE%+n%=3P:#W&ăU"'qwPae$G,'\;q>Q6a2[eW\)j]Y-xpTX$YjP,)]iPtaaVzAuJHv9pX^xW5X?W_;7ăU"N98ifS;_N9,<ItF994;TPFHkp_*rhEqMFAVbrf_veXPY#DvL>C(d,hSyvKsgFZ7ăU"XnMBx'+gr5u<:6g5Lo26<ptNAi%07vtB/eaKH1Xr0n0p(TE:HZ[>ahZT6/7nHBrăU"rxkr_IRc*l^cn[3E>>j4pcrL['f0'_6>^P5Dx)xkj$lWW$.[gJ6DcohvHqb<?ruăU"RT=*]I,d3H?$:-n*I'lfq>&lemUu/D;x^,In1\:TZ8,FEasDJV3TZgM>Jx<u*cRăU"e&w^PBu<pR7FBn,EUkh0>fu?17]\PQ-kRfwh-T:v1$?X7OXR#;)7/F/4cm:?sf(ăU"_97RK^ON*lmJ9?2VO/NhvRI_wP*I.-hL,&^tBR#zd-25mXQ_A7LU%Fn)GRRIabHăU"s4b_LBGOna.InaI(naInAaIna.InaI(naInAaIna.InaI^naIr?XAXu%p()9%%%ăU"%-U%s/+OG2Wx(Q/*%+%X1%%%1%%%%kts%yqtf%iSgfOxN%<,B[[5iwmhu&VJ8K5ăU"_\7Epr.1_2u_gC#bE.?bfWq7U-J:ij=Dd]X5gPF&&WTntB6b-*Lh_)QTS6nJ,bzăU"d:]9HQV9']0F1Lix#-i?P;(q)Z])oKg3V9dt=8%J0%YFthQ.A3Q:6Keebu^'nHwăU"WvuNN+ZT%&#00+J4y52z+j7<jOGx^Mp-\.w2/FWKd0PeifSLeKcfbAk]]gHD>O2ăU"b7AlH[Zdkw857=QCf2Ed6lQi_W2DMCr3QpiIV=Lq&SyCJjP3r:*Mi;&fa(N3UotăU"K<M>GHDp$UgN>?;XHu1b-#]60W6?aksTK(ro*=R&>9LMxD9,dp_\8Ez^>'pwHwMăU"8&?x8$*\nY-C2+;qMmA:H+Y9/D0IXD'xAAJREoMZLb;[hSVt-#V29aO$Aa1V1\dăU"_SoEq+.cES?1H80>&rk75Kd%b'Vs^Iy)=aB,'<p=)pU7pspu8,Y+y9Hs10c]u;&ăU"Pc>*?)?PNj6h)Vdq&VVymXJ>U/.y;([9uCvb-uiQ)z#o;3ShnR_B3CCJ5)PyU;văU"&2%O\921h$Z;A)zgw*DQ1n[jN%o(XF+ZNzrODQlf=LEJ'1Tutq+H.I-Kr?_c2GYăU"]gX^vmi0?RUk^:/Eg#6qsy<)E*E'&Qj8%>&XRPT><I#ZKI:h$Nw--?IgIEruY4JăU"sn0ASHeFz9*nuj$VeG.1Z'wm*G%S%jLaz0)M*uK$nxUd(9ZM:Gk<V,ebP/v,/kSăU"=r9GIgEpRvX(T6bc)5tsNn/$[3.F:m#cH]x&\APxK0/Wr.ttO&+GhCU4qf>B^2YăU"mL?SjJ^b-[juR=;]j2RV6u[6YP]jWguhXnneppLSRZMnJ99qUhvYyV?O<inZx_aăU"Zg6.=7OSlQRt7AS8\x*e-'SkQF;[E9uVV4w$2B:7I8yqsQwtCE*)uPdnppl>79ZăU"l-Dg8iwK]NvQjvN4jLgB&spThI]6'%.AiUF]vB5$/Q,=(Dy8nrIpXu*q7M8UKJXăU"QttY*gpoy-'D$xbF9L2lkA5*YO\<wIe7fv>9V3;9//+iPS1$VJ?j[QGB;0*1u\aăU"-]_^?lg:LgAXPlHT?Z8j*f64pJ?UXd2](dqY*96CNWXW7z2+j9YdWg&Y?$n&C05ăU"&#m:9,a,6VB0j5_1\O-um;39g31>MU3VB<wI>h$tJ<v=V#pPKG4>&%.^dZ(JHMHăU"LV,*j1T(2vn'tBcWdKI5Uow:v0YxXQsLgLifm*shDkphDo3tIkoj_sIO4?[>DkkăU"9.OdqoT'H$/3I^IaY$Py7i\[Er?bLxIuPsQhb\SYqgn\tZM$*m^]4jx9AZeh:&7ăU"T;ddR_9x\j8JL7E5t%+\,,hp,IawC*.87()7^b)Es3b6KB&]M>t1UoZ5nkUGU;măU"yfKq8)K*W'k4?)[:si'BA[NtHM-?3DIjVs?>]G,P-CJGh8'ivonrw>.vbj4>B;aăU"3+*/X$7W$K_\(+^xAINL;8)N>PvC#)K8pWtd#u)3<O_P3PgdJp*h17OlmpFUj6,ăU"nvv9kH,JK49-YHl^t8YjPr%BwlkMeZ[A?U2Z[^Y6$b5&)J/pJK7v>mSs4Plp=S5ăU"jyBZZYNQmI-frJ>ZMS<hd%TT.5obNJM827P&aX,JU'O^.cR&b,LkUKYNOojI1W$ăU"ED0v-EI8+i+\$4-678Of^unb4FR0%6apU&[yW['Mz*8Ka,#)&L;2zA6nnf6G\,RăU";A6ja\IX1MjC5M$_P#S]BYb(<sa#E;*[S?eI3X=4$?o^?ci5s9io,Hl^PIKSN%%ăU"up(%)9%%#%-%b$.+GJZmEJ\#1%%S%Y%%1%%%%k%tsyr%fpjS[gfxf^?:xT+mk$zăU"<uV?pR:[Q]J.5/b]U>5YbZ*]DJ;[&*8DJeVPm<aKta99(-8g>b4k(oIZ042yAB*ăU"jiWgmbfi3JI->BgQc87Xg$?g_?ssHwZLc.DR_#'hMF9e_UcN<XBZ*P^uBNQm8BTăU"x>G+V5)WjpXM#P3ELyF+Bw#XbZVWpI=+BGnECY:_2/gl9hL$UB$p+:KgT?/f^_FăU"'e8.c.3DL%lQSNah;WM#DI>q,)aBO0_^Wgb)OK9300St?ACQ3QkbV^1Ett$9Mi*ăU"QhHQnJ3w6pHiLDLr3u^bRlL6^GR<c,YFjY3:6Wj,Dhjcr,l5?1Y1M)^<S:9u_Y7ăU"Zw;m$P_qli+[UVDh_9]U\p?bw:g7U\2fKY\Q0GA%F,_tj'FK72YK9^+:k;SX.[8ăU"b.HJh>*KZ8ZeUj1LbUA#t]I)eIf.j(S$4lDHMEgA.wUUkFPI>hLpWg51Y]$QDAtăU";-kgBgS%[(s]&sOTtrZ-:a'KAf?=RMN7on)ZJw>b+nd<GsxvR:cK3AF1._kKUq?ăU"Q?HsF=jsnzdDjX[U-D7&HeL'v\N7#xlEN0UPeP&N47VKingDNsbin$gn5I%n1'.ăU"Py%EkO8,%_PKiY5o8k<$u-F3*FMXakuVu[W[+s<AOw=qXVvJ,W_lK6YL/]g9z-aăU"uI8Ms(]KX?)9U&(61IWn<&#NDX1:aN>eknLVOK<vdc.u:CiVOVs$#pBZh1\i+cpăU"=-cH+qtf1+a>g&g%a3$DgSY+grkrvdT782X8^_Di4p3]G7hf)=G]VCeBfM3+a;QăU"BhT<P2Pyrh,0<So/.p/B,ck9D-Rp6^2kAU'm*cp'sK4uCg&Xvjx_H;kf&Vbpbg'ăU"ltOp;V5$Q9/=LTU]-LG,M>?8j4B3dBa1G\j88g^F*#^Iy:4>9264e3ACDSKbF$UăU"AA].M2(]LSN#;AkS(IY3'Hvg^OQ>qB&oEl#eoFEOhVf>HEpX'<ta$r?<gljA75'ăU"627t-\d,5Z.O2'$;=%6pr]R22._i0/PoK,e0U3%DM+P#X]9XU0:8^ljjB_^qu#jăU"H<^dYNl$.fe[Dz4B%O30#x3aubehpt'.:xz<R3pzl_l-pbdYAD52EN=0NaZkd\5ăU"C%8HG7\Yv]suD<-TF2YH=_ko6GF\u5Nk]9jKu%XfU%GR,UpU=GLMc>3Lrp2H.L.ăU"kBo22UtCV'7,;P-'tA)+'7A0nC.ha(1A,Gy97WD7ekGeir1]^W8*s7c+ml1b%$răU"?4Z?].ruhbo7jZ\IZ]7H4DL*)$%Z8)?XjtKbor0iLSdKBF<CO;aKBq2wdP$;o.0ăU"jH%B-MyTE9Rxq^zDtkqIAY*27TP5QahrRBZ1]1']14tTvm?^j1j,f+S8-NSs:S<ăU"09e<Tf/:xYoU5f/,siWR+[S%N[=H'=lt/74AJRcQ#CpL&]0Z^%-n+PkfNl[vE'KăU"AJLzcNB:3VsF.If2wfmc(Ov']QJb%qLchUUJL%J/gPG>^T:e0-loemOcKMl>O.2ăU"F=g>Fnm=F;keQu?wErQgOVk'tD1U$wFBah%a3e+78Gw/uV<&%&vabaCZVAc7IiqăU"+fr[jGK[*GKF,O&'>_<Wam&nMBm*:)Ve'&7hhxI<1%Xh%L<:]?PPo1l6hJdvlRlăU"Ua,BCg69S$mPp8?g&B*)sV?bnaPa#i.x#U]*w-k_Ga^LAeQ_gmS;G9SKVEsk^3DăU"N-5+^,gQhUm=(FE(&A>IVa5>>p$bc7jK<0*&ukI>-)p,eIWpF9LUGY#79%)=3k;ăU")U_mCj>JC&jXzB]'2Ol:JeY8CTJgYJ1xNfJ[2d\=1#XJ;oQrR9k:szA+_7m<$j'ăU"T0C_kROMhq#^wZm-rEmF;7,Z6LYD;%d9xAJmCQNfjfJ%b(Ae9Q1nwBF*(DX:W,BăU"&4kL8IT;*C/g8[z^#2,=&;7O1G2iuo7[5*mrEKMW?iiW;iC=>soQLfkm2-je.$;ăU"5<^-u.iVc[2rAhc+7>_r&#>'QJT^x#J4I(/WBn)RndR-;7D^Kt2lw=LP6+QgdC)ăU">rV'ZBsp0(C;OFjJ4_i7JKR>/sYe_&%%m3zw%_/.7d&zjo0fmj#K2Y&,gasXoqAăU"QAxz;(Woh6cQnLXve&#\?UrC4&CzTEi0<yFgsk/l=6/F,?P<T]I.PiMG8kbm+w;ăU"YSl%]S=Fw;7-r$Px=>n:WMBSRWODVUXP]kjvm'WBMllR9.;tq5fSaMW<PT:yB8CăU")?iB43-c&?kM9&y5nk3%7u1mc)T[#Oj^J[p9u&L;d01Q=;$,X/&.)mA00cB1ir\ăEND SUBăSUB V5ăU"Ua**0Q>&i3qqi^f.6Jf_\k-\)+g8QFj9Z)jk=De[;Lz9iY=#,P1m6qoH+<9&mgBăU">[K$]h7gZ<=ePkbf*3M$rs(A]U<b5_X%Gg4U&9MoDpJ8$o3nxeAW\M-528yBTklăU"7)Ef/'Is[H5t55LHXeo9dIl#l6Ua'VbodsZb3CIkJcIV(),\roPp$LP?6-Q3'fqăU"h&[OWtJ0BHpfxMQ\lmJ<(L+wo9[%zFfgQaS[COHml%%ngzeWW8)d0w'EW1$CNj=ăU"tEMXy6ltj2Cr3^fHQWnoa7/LfHD>lkq9*upsw]bz/K(aTq:TDbwd&LS=j09EnhjăU"c;$sI_H[l3&qFnHP:#te,.^)<;;W<M6<-%pO_a8F63vbx3lE).X(SMH)_dE.A\AăU"yX(_W>cPJk8utz:R/a=(pm2Ic*nq,L\-%OUN+MD]q)KGgbF^8TpAqyT;-:XRk*.ăU"Z$9.:e$=9E%hBI3d4cY8b*Vpp=TE18'sGr,>ipBO7>m[fuPc^1%E#3J9i_>uIA7ăU"Q9UP<Y;%V=1-;_ToTNlR-O2O9x(#R(#.JPt-Q1oAZ15pDJP#$G&3QPc2,12b=WcăU"vvXFKs>q9M=LNak^1*W2LP;R[Fp&^Nh<8*D^hD)t2w[Qt8felpK=72fENDLT\VyăU"6?>w_f$y%Y+zRqONFvgM-jvss*090qKF[XE_^)A8ucvP'F]k0]UUiF5_T%o6=ujăU"rj9Gic?*:s\C=h:aAo*&peYhG.&r_cJrUVJ[M.Jgt#/HOb^8f639;2dp:XofkM'ăU"(GZP33NGvF$r7r;p/xXJTBH)7Eh03DloAd-%H<ddhJIbGDv?=:kb:U&gSAS\tmmăU"ujO*yW(Obi1D3eth7E_SG\NU/m)m6qjBL^9fDdnx[:*OqUEnS3=0p?Y%/X>MNAiăU"FaB2LTMuIiT^5/Z.\G+gSb9\b20rg:vp],wMHObmYx*iC58kCa%8b/hjbb<+qnlăU"ST'%PD9y+L'.viaRSIogj48gDO,_xk2:TkdU:yX&3Xa1,/^uINbc#QCJM/T6%v3ăU"wMS-;^<L/4hRVBg;(MJT>3p9?xDs&jooDeq:^[$Rfscr?mB3>;4H)4OBjLo+*EPăU"6;kV9evK8fxZALhoyO%L.B\gq?s%:nYqo4H#$7]9p*(o8HqUZBxVww0)Q,pK3kSăU"ngsrN7,lC#fAKM7zdQmuJHkJK#E#R>FlRMFU9$_%q$sg5&afXsR>u>ww1n_8<mUăU"$wfrWLiuZ$X=65B8hSU\fFN-XG(q+v33k*-J[(Nlw*U5b:wd9wQ01=7cUPI,37hăU"DpMCCnY8n2^eZ?>IvPbMjDbR/k?*WPbBs_KhEKgLN$,*d#9]UO0vqM<X&Hm2rN]ăU"KBGwrxx2sz&*ZF2xmX;&elDYuP-K;c;hpRNw71uMpG3_+S_Abr?#Z#<4>G1,1*\ăU"8vG>eKr0q$8m\bZuiD4<%?IvWmaBF*_E$W<F<?YFBNYCm9FMusKgUL-Q44e7Bq5ăU"2Icl_W*J'5*]<8--)+?-75]=u2pl1L?%,>llmOk(')mYOL=F6YM0m#]Ri;bYY8săU"Ffsfc&:0XP/pq+LV^uQ/s4e:*_Pz3[*z^uHRXkNF\Q-Iffvo'1tEieI8L),cc;yăU"^H?RR7\Mg?;K.HE]RVmnO0M=PU7HN<MIArm*SyL['d%$$j$kcbkRMQI**A164>găU"d\s%+$mcJt;p/5HFn*8o&d.dk$75SEaJ:oOVuE)T_JeV/Qk\L:c8,R/'p#;[,hcăU";_4'M:YrBrC7Z$erd]ZXM*[tbsZ'eqC4RDd=Eh^)MF(94LRc&9a0ZDjlr:jaG%păU"8d\6MS(%V>(:Mhv4o*erCsGq;Q$q;q-8z)md%up&'%9%9%%%%-%42++GpAAp7%PăU"-%%%OX%%%.%%%%%%%%%%%E%%%%%%%%%wt%rfsS%vgku%p&'9%%9%%%%-%<*++GGăU"'gNF=%/%%g%g%%1%%%%%%%%%%%%E%%%%w-%%%ynr%jxsj&&Svg%kup&%'9%9%%%ăU"%-R%9++(G)lm'k3)%(%qC%%%1%%%%%%%%%%%E#%%%c%7%%y%jwrn%sfqS%vgku%ăU"p&'9%%9%%%%-%8$++GN7tMfo[*%%g%]%%/%%%%%%%%%%%%E%%+%E;%.%x(x%yjrăU"S%vgku%p&'9%%9%%%%-%6E++GXnPSIN%,%%3%n%%0%%%%%%%%%%%%E%%%%cA%%%ăU"xyj%shnq%Svgk%up&'%9%9%%%%-%/]j+GVZtL=%D)%%%;c%%%1%%%%%%%%%&%E%ăU"%%%aI%%%xr%fqqk%tsSv%gkup%&'9%%9%%%[-%3+n+Gw3%sp1-%%%WS%%%/%%%%ăU"%%%%%%%%E%%%&TM%%%xhwn%uySv%gkup%&'9%%9%%%[-%%+&+GD-9QpF..%%9f%ăU"%%0%%%%%%%%%%%%E%%%'2U%%%rxxj%wnkS%vgku%p&'9%%9%%%%-%(*++GI]V4.ăU"8%-%%;%f%%1%%%%%%%%%%%%E%%+%(_%%%rxx%fsxx%jSvg%kup&%'9%9%%%%-X%ăU"u*+LGt\T)=v+%(%=S%%%/%%%%%%%%%%%E#%%%g%h%%r%tijw%sSvg%kup&%'9%9ăU"%%%%-R%0++XG&cL%cL.%+%gc%%%1%%%%%%%%%%%E#%%%6%o%%q%zhni%fxfS%vgăU"ku%p&'9%%9%%%%-%-E++G8.iNy=%4%%/&%%%1%%%%%%%%%%%%E%%+%1x%%%qzh%ăU"nifm%fSvg%kup&%'9%9%%%%-R%*+++Ga3%*q,3%+%7l%%%1%%%%%%%%%%%E[%%%ăU"s&1%%q%zhni%fgqS%vgku%p&'9%%9%%[%-%s**+G;$%[G3%,%%[%a%%/%%%%%%%ăU"%%%%%E%%1%P#%%%nru%fhyS%vgku%p&'9%%9%%[%-%q$*+GVZ:RTj[,%%W%a%%1ăU"%%%%%%%%%%%%E%%1%2H%%%htz%wnjw%sSvg%kup&%'9%9%%%%-X%l*+gGVIf&e*ăU"/%=%wx%%%.%%%%%%%%%%%E%%%%M&P%%f%wnfq%Svgk%up&'%9%9%%%%-%6n*+G_ăU"\n(F&1*%%%sa%%%0%%%%%%%%%%%E%#%%yZ%%%ht%zwnj%wSvg%kup&%'9%9%%%%ăU"-U%s/+OG2Wx(Q/*%+%X1%%%1%%%%%%%%%&%E[%%%X&_%%k%tsyq%tfiS%gfxu%păU"&'9%%9%%#%-%b$.+GJZmEJ\#1%%S%Y%%1%%%%%%%%%&%%E%%1%8e%%%kts%yrfpăU"%jSgf%xup*%+%%%%%8%8%%b)%.%Er%%%%%ăEND SUBăV2ăV3ăV4ăV5ăCLOSE:IF S=204AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăPeter Barney                   CGA 136 COLOUR MODE            QBTIPS_M.DOC                   06-14-93 (11:54)       QB, QBasic, PDS        443  12879    CGA136.BAS  '>Is there a way to run a CGA card in 16-color mode? 4-colors is kinda tiring!ă'>and does the code work with qb 4.00? If you've got some, send some. Thanx.ă'ă'The following messages are some code that I was working on a coupleă'years ago when I had a cga monitor.  Included are a 16-color mode and aă'136-color mode.ă'ă'This should get you started in the right direction.ăăDECLARE SUB Moire ()ăDECLARE SUB Demo ()ăDECLARE SUB GPrint (A$, x%, y%, Colr%, Size%)ăDECLARE SUB Mode (M%, BG%)ăDECLARE SUB PCircle (x%, y%, r%, c%)ăDECLARE FUNCTION PixColr% (x%, y%)ăDECLARE SUB PixSet (x%, y%, Colr%)ăDECLARE SUB SaveScreen (f$)ăDECLARE FUNCTION Sequence% (PickCol%)ăDECLARE SUB Setup ()ăDECLARE FUNCTION Spectral% (PickCol%)ăDECLARE SUB TextDemo ()ăDIM SHARED ModeNumăăSCREEN 0ăă'=================== Main Code ===================ăăBegin:ăă    Setup  ' this creates the screen modes (do this only once)ă    Mode 136, 0 ' or Mode 136 , Colorăăă' This is where you would add your code.ă    Demoă    TextDemoăăDone:ă    SOUND 1160, 2ă    SLEEPă    WHILE INKEY$ = "": WENDă    SCREEN 0, 0ă    ENDăă'================= End Main Code =================ă'ă'ă'initial data for 6845 chip (80 x 100 pixels)ă'ăDATA 113:  'register 0    horizontal totalăDATA  80:  'register 1    horizontal displayedăDATA  90:  'register 2    horizontal sync positionăDATA  10:  'register 3    horizontal sync widthăDATA 127:  'register 4    vertical totalăDATA   6:  'register 5    vertical adjustăDATA 100:  'register 6    vertical displayedăDATA 112:  'register 7    vertical sync positionăDATA   2:  'register 8    interlace mode (non-interlaced)ăDATA   1:  'register 9    maximum scan line addressăDATA  32:  'register 10   cursor start (32 makes cursoră' invisible)ăDATA   0:  'register 11   cursor endăăDEFINT A-ZăSUB Demoă'draw screen (136 color demo)ăă' You MUST use this command to set up the screen properly.ă' (note that the number may be changed, however)ăMode 136, 0ăăă' draw Spectral circleăFOR r = 0 TO 19ă     PCircle 60, 60, r, Spectral(r)ăNEXTăă'this one shows how to blend the two colorsăFOR x = 0 TO 31ă         FOR y = 0 TO 63ă                c1 = Sequence(x \ 2 MOD 16)ăă                c2 = Sequence(y \ 4 MOD 16)ă                Colr = c1 * 16 + c2             ' this blends color 1 with color 2ă                PixSet x, y, Colră        NEXTăNEXTăă' this draws the rainbow squareăFOR y = 0 TO 19ă        FOR x = 0 TO 19ă                PixSet 40 + x + (19 - y), x + y, Spectral(x)ă                PixSet 40 + x + (19 - y), x + y + 1, Spectral(x)ă        NEXT xăNEXT yăSaveScreen "Demo.scn"ăSLEEP 5ăăEND SUBăăSUB GPrint (A$, x, y, Colr, Size)ă'ă' This Sub will print text on the graphics screen.ă'ă' Exampleă'  Gprint "Hello",10,5,23,1ă'ă' Will print Hello at position 10,5 in color 23.ă'ă' The 1 on the end specifies big or small text.ă' Use a 1 for big, 0 for small.  Add 2 if you want wide letters.ă'ă' If you make Colr < 0 then it will use the Spectral Color Set,ă' starting at color # ABS(Colr)ă'ăREDIM A(0 TO 7)ăăFOR M = 1 TO LEN(A$)ă    N = ASC(MID$(A$, M, 1))ă    DEF SEG = &HFFA6ă    FOR l = 0 TO 7: B = (N * 8) + l + 14: A(l) = PEEK(B): NEXTă    DEF SEG = &HB800ă    FOR r = 0 TO 7ă        FOR J = 7 TO 1 STEP -1ă            IF (A(r) AND 2 ^ J) <> 0 THENă                IF Colr < 0 THEN Co = Spectral(r - Colr) ELSE Co = Colră                SELECT CASE Sizeă                    CASE 0ă                        PixSet x + (7 - J) + ((M - 1) * 8), y + r, Coă                    CASE 1ă                        PixSet x + (7 - J) + ((M - 1) * 8), y + r * 2, Coă                        PixSet x + (7 - J) + ((M - 1) * 8), y + r * 2 + 1, Coă                    CASE 2ă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2, y + r, Coă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2 + 1, y + r, Coă                    CASE 3ă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2, y + r * 2, Coă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2, y + r * 2 + 1, Coă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2 + 1, y + r * 2, Coă                        PixSet x + (7 - J) + ((M - 1) * 8) * 2 + 1, y + r * 2 + 1, Coă                END SELECTă            END IFă        NEXTă    NEXTăNEXTăEND SUBăăSUB LoadScreen (f$)ăBLOAD f$, 0ăEND SUBăăSUB Mode (M, BG)ăIF M <> 136 AND M <> 16 THEN ERROR 5 'illegal function callă'ă'clear screen:      Character = &HB1, Attributes=0ă'ă' this part is necessary to run before any pixels are drawn, because ită' layers a specific bit pattern on the screen that produces the colors.ă'ă' BG is the background color.ă'   for example, if you want a dark blue background, do ClearScreen 1ăăDEF SEG = &HB800ăIF M = 136 THEN ch = &HB1 ELSE ch = &HDEăFOR CHAR = 0 TO 15998 STEP 2: POKE CHAR, ch: POKE CHAR + 1, BG: NEXTăModeNum = MăEND SUBăăSUB MoireăIF ModeNum = 136 THEN XM = 40: tc = 255ăIF ModeNum = 16 THEN XM = 80: tc = 15ăIF XM = 0 THEN STOPăYM = 50ăFOR y = -YM TO YM: Y2 = y * yă    FOR x = -XM TO XMă        r = INT((1E+07 * (Y2 + x * x)) ^ .255)ă        IF r MOD 2 THENă            PixSet x + XM, y + YM, 1 '(r / tc) ANDă        ELSEă            PixSet x + XM, y + YM, ((r / 15) AND tc) + 1ă        END IFă    NEXT xăNEXT yăEND SUBăăSUB Outline (x1, y1, x2, Y2, Colr, Colr2)ăFOR x = x1 TO x2ă    FOR y = y1 TO Y2ă        IF PixColr(x, y) = 0 THENă            IF PixColr(x + 1, y + 1) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x + 1, y + 0) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x + 1, y - 1) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x - 0, y - 1) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x - 1, y - 1) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x - 1, y - 0) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x - 1, y + 1) = Colr2 THEN PixSet x, y, Colr: GOTO Skipă            IF PixColr(x + 0, y + 1) = Colr2 THEN PixSet x, y, ColrăSkip:ă        END IFă    NEXTăNEXTăEND SUBăăSUB PBox (x1, y1, x2, Y2, Colr, Style)ăIF x1 > x2 THEN SWAP x1, x2ăIF y1 > Y2 THEN SWAP y1, Y2ăIF Style = 0 THENă    FOR x = x1 TO x2: PixSet x, y1, Colr: NEXTă    FOR y = y1 TO Y2: PixSet x1, y, Colr: NEXTă    FOR x = x1 TO x2: PixSet x, Y2, Colr: NEXTă    FOR y = y1 TO Y2: PixSet x2, y, Colr: NEXTăELSEă    FOR x = x1 TO x2: FOR y = y1 TO Y2ă        PixSet x, y, Colră    NEXT y, xăEND IFăEND SUBăăSUB PCircle (x, y, r, c)ă'ă' Draws a circle at coordinates x,y with radius r and color că'ă'ăFOR xv = 0 TO ră        yv = SQR(r ^ 2 - xv ^ 2)ă        PixSet x + xv, y + yv, că        PixSet x - xv, y - yv, că        PixSet x + xv, y - yv, că        PixSet x - xv, y + yv, căNEXTăFOR yv = 0 TO ră        xv = SQR(r ^ 2 - yv ^ 2)ă        PixSet x + xv, y + yv, că        PixSet x - xv, y - yv, că        PixSet x + xv, y - yv, că        PixSet x - xv, y + yv, căNEXTăEND SUBăăSUB Pget (x1, y1, x2, Y2, v())ăăIF x1 > x2 THEN SWAP x1, x2: SWAP y1, Y2ă'REDIM v((x2 - x1) * (y2 - y1) + 4)ăv(1) = x2 - x1: v(2) = Y2 - y1: P = 3ăăFOR y = y1 TO Y2ă    FOR x = x1 TO x2ă        v(P) = PixColr(x, y)ă        P = P + 1ă    NEXTăNEXTăEND SUBăăFUNCTION PixColr (x, y)ă'ă' Returns the color of the pixel at the specified coordinatesă'ă' To find the two colors that were blended to create the color, useă' c1 = PixColr (x,y) \ 16ă' c2 = PixColr (x,y) and 15ă'ăIF ModeNum = 136 THENă    PixColr = PEEK(((2 * x + (y * 160)) AND &HFFFE) + 1)ăELSEă    PIXELADDR = ((x + (y * 160)) AND &HFFFE) + 1ă    NIBBLE = (x + (y * 160)) MOD 2ă    IF NIBBLE = 0 THEN PixColr = (PEEK(PIXELADDR) AND &HF0) \ 16ă    IF NIBBLE = 1 THEN PixColr = PEEK(PIXELADDR) AND &HFăEND IFăEND FUNCTIONăăSUB PixSet (x, y, Colr)ă'ă' Plots a point at x,y in Colr color.ă'ă' Colr is calculated by:  color1 * 16 + color2ă' this will give you a blending of the two colorsă'ăIF ModeNum = 136 THENă    POKE ((2 * x + (y * 160)) AND &HFFFE) + 1, ColrăELSEă    PIXELADDR = ((x + (y * 160)) AND &HFFFE) + 1ă    NIBBLE = (x + (y * 160)) MOD 2ă    IF NIBBLE = 0 THEN POKE PIXELADDR, (PEEK(PIXELADDR) AND &HF) + Colr * &H10ă    IF NIBBLE = 1 THEN POKE PIXELADDR, (PEEK(PIXELADDR) AND &HF0) + ColrăEND IFăEND SUBăăSUB Pline (mx1, my1, mx2, my2, MColr)ă'ă' Not tested, may not work...ă'ăx1 = mx1: y1 = my1: x2 = mx2: Y2 = my2: Colr = MColrăăIF ABS(x2 - x1) > ABS(Y2 - y1) THEN         'x is majoră    IF x1 > x2 THEN SWAP x1, x2: SWAP y1, Y2ă    IF x2 - x1 = 0 THEN ys! = 0 ELSE ys! = (Y2 - y1) / (x2 - x1)ă    FOR l = 0 TO (x2 - x1)ă        PixSet x1 + l, y1 + M!, Colr: M! = M! + ys!ă    NEXTăELSE                                       'y is majoră    IF y1 > Y2 THEN SWAP y1, Y2: SWAP x1, x2ă    IF Y2 - y1 = 0 THEN xs! = 0 ELSE xs! = (x2 - x1) / (Y2 - y1)ă    FOR l = 0 TO (Y2 - y1)ă        PixSet x1 + M!, y1 + l, Colr: M! = M! + xs!ă    NEXTăEND IFăEND SUBăăSUB Pput (x1, y1, v(), M)ăIF M = 1 THEN M = 0 ELSE M = 256ăx2 = x1 + v(1): Y2 = y1 + v(2): P = 3ăFOR y = y1 TO Y2ă    FOR x = x1 TO x2ă        IF v(P) <> M THEN PixSet x, y, v(P)ă        P = P + 1ă    NEXTăNEXTăEND SUBăăSUB SaveScreen (f$)ăBSAVE f$, 0, &H3F1EăEND SUBăăFUNCTION Sequence (PickCol)ă'ă' This was designed for the 136-color modeă'ă' places colors in Sequence order.  Used by this program to make a niftyă' color arrangement, not very usable in your programs.ă'ăSELECT CASE PickCol + 1ă        CASE 1: Colr = 0ă        CASE 2: Colr = 8ă        CASE 3: Colr = 1ă        CASE 4: Colr = 9ă        CASE 5: Colr = 3ă        CASE 6: Colr = 11ă        CASE 7: Colr = 2ă        CASE 8: Colr = 10ă        CASE 9: Colr = 6ă        CASE 10: Colr = 14ă        CASE 11: Colr = 4ă        CASE 12: Colr = 12ă        CASE 13: Colr = 5ă        CASE 14: Colr = 13ă        CASE 15: Colr = 7ă        CASE 16: Colr = 15ă        CASE ELSEăEND SELECTăSequence = ColrăEND FUNCTIONăăSUB Setupăă'Color/Graphics Adapter DefinitionsăMODEREG = &H3D8:  COLORREG = &H3D9        'control registersăMODESAVE = &H465: COLORSAVE = &H466       'BIOS saves the regs hereăCRTREG = &H3D4:   CRTDATA = &H3D5         '6845 CRT controller regsăă'set up Color/Graphics Adapter for 160- by 100-block graphicsăDEF SEG = 0: SMode = 0ăPOKE MODESAVE, SMode: OUT MODEREG, SModeăPOKE COLORSAVE, 0:   OUT COLORREG, 0ăă'Load new parameters into 6845 CRT controllerăRESTOREăFOR REGISTER = 0 TO 11ă        READ REGDATAă        OUT CRTREG, REGISTER: OUT CRTDATA, REGDATAăNEXTăă'set mode for 80 column color enableăHIRES = 1: GRAPH = 2: BW = 4      'Mode register bitsăVIDEO = 8: G640 = 16: BLINK = 32  'Mode register bitsăSMode = HIRES + VIDEOăPOKE MODESAVE, SMode: OUT MODEREG, SModeăDEF SEG = &HB800ăEND SUBăăFUNCTION Spectral (PickCol)ă'ă'converts ordered color numbers to a Spectrum --19 of 25 usedă'ă' This will give you the number of the color on the spectrumă' Example:ă'   x=Spectral(10)ă' will give you the 10th color of the Spectrumă' right now, I have only a 19-color spectrum set upă' so the values used should be 0-19.ă'ăSELECT CASE PickColă        CASE 1: Colr = 16ă        CASE 2: Colr = 17ă        CASE 3: Colr = 145ă        CASE 4: Colr = 18ă        CASE 5: Colr = 2ă        CASE 6: Colr = 160ă        CASE 7: Colr = 162ă        CASE 8: Colr = 174ă        CASE 9: Colr = 238ă        CASE 10: Colr = 230ă        CASE 11: Colr = 236ă        CASE 12: Colr = 228ă        CASE 13: Colr = 102ă        CASE 14: Colr = 108ă        CASE 15: Colr = 204ă        CASE 16: Colr = 68ă        CASE 17: Colr = 64ă        CASE 18: Colr = 65ă        CASE 19: Colr = 81ă        CASE ELSEăEND SELECTăSpectral = ColrăIF ModeNum = 16 THEN Spectral = Colr AND 15ăEND FUNCTIONăăSUB TextDemoăMode 136, 0ăăFOR y = 0 TO 15: FOR x = 0 TO 44: PixSet x, y, 255: NEXT x, yăFOR y = 0 TO 15: FOR x = 45 TO 77: PixSet x, y, Spectral(y + 1): NEXT x, yăFOR y = 0 TO 15: PixSet x, y, 255: PixSet x + 1, y, 255: NEXT yăăGPrint "Hello", 1, 1, 152, 1: GPrint "Hello", 2, 1, 1, 1ăăFOR y = 17 TO 35: FOR x = 0 TO 79: PixSet x, y, 153: NEXT x, yăGPrint "Isn't this", 0, 19, 8, 0: GPrint "Isn't this", 1, 19, 15, 0ăGPrint "cool?", 21, 27, 8, 0: GPrint "cool?", 23, 27, 15, 0: GPrint "cool?", 22, 27, 7, 0ăăFOR y = 37 TO 101: FOR x = 0 TO 79: PixSet x, y, 254 - (y - 37): NEXT x, yăăGPrint "Add life", 9, 39, -1, 0ăGPrint "to your", 12, 47, -6, 0ăGPrint "old CGA!", 9, 57, -13, 0ăGPrint "CGA", 41, 58, -14, 0ăGPrint "Nothing is", 1, 67, 0, 0ăFOR J = 1 TO 10: A$ = MID$("IMPOSSIBLE", J, 1)ăGPrint A$, (J - 1) * 8, 77, J - 11, 1: NEXTăFOR x = 1 TO 78: PixSet x, 93, 0: NEXTăăSaveScreen "TextDemo.scn"ăEND SUBăDavey W. Taylor                RAINBOW PLASMA                 audio.squad@mailbox.swipnet.se 07-22-97 (10:17)       QB, QBasic, PDS        75   2117     PLASMA.BAS  'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                   ** PLASMA EFFECT **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăăDECLARE SUB setpal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB getPal (Attr%, Red%, Green%, Blue%)ăSCREEN 13                           'Gee...ăăFOR o% = 0 TO 63                    'Set a rainbow paletteă setpal n% + o%, o% - 1, 0, 63ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, o% - 1, 63 - o%ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, 63 - o%, 0ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63 - o%, 0, o% - 1ăNEXT o%ăsetpal 0, 0, 0, 0                   'Fix missed colorsăsetpal 64, 63, 0, 63ăsetpal 128, 63, 63, 0ăsetpal 192, 63, 0, 0ăăFOR y% = 1 TO 200                   'Draw the sinus patternă s! = y% / 10ă n% = INT(SIN(s!) * 20)ă FOR x% = 0 TO 319ă   c% = (x% - y%) MOD 256ă   IF c% = 0 THEN c% = 1            'Color 0 is not usedă   PSET (x% + n%, y%), c%ă NEXT x%ăNEXT y%ăLINE (0, 0)-(319, 19), 0, BF        'Clear the sidesăLINE (0, 180)-(319, 199), 0, BFăLINE (0, 0)-(29, 199), 0, BF        'Clear top and bottomăLINE (290, 0)-(319, 199), 0, BFăLINE (29, 19)-(290, 180), 1, B      'Draw a borderăLOCATE 1, 9ăPRINT "Plasma by Davey W Taylor"ăăDOă WAIT &H3DA, 8                      'Wait for screen retraceă getPal 1, rr%, gr%, br%    'Rotate ' - the safest way to makeă FOR n% = 2 TO 255          ' - the ' - a delay in a programă  getPal n%, r%, g%, B%     ' - paletteă  setpal n% - 1, r%, g%, B%ă NEXT n%ă setpal 255, rr%, gr%, br%ăLOOP WHILE INKEY$ = ""ăăSUB getPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB setpal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDavey W. Taylor                SINUS SCREEN                   audio.squad@mailbox.swipnet.se 07-22-97 (10:17)       QB, QBasic, PDS        239  15703    SIN-SCRN.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SIN-SCRN.ZIP",4^6:Z&=11507:?STRING$(50,177);ăU"%up()%9%%%#-%_hTlGeB'rG6).%%5/%%%1%%%%xn%sRxh%wsSgIfxd%<TA[kL5LăU"vYDN7$5jJ5aFN>*:v7Oz:EWTy)QFg1[jB0f?2Czs>%L<2L&\ME4rkYuXX'Kb7E1ăU";;bNtfImmGkgcLJ$,%NiQj'Y$W.h;'LV0fiht8UUU/;LYKW?k=0u63jXW7Ot:S8ăU"xNe.u(4a9K&nGf>8M/Flm_Q:$pXS1vXn4^1X5vQ^^ap24,RA+eXH$i:u.Q44q?CăU"c;]9]QZ5)#$+wLecR/:6VY&DAhfUOlb2_/OLL9m/7?)GW^a5]J6'uu6oq>Li6p?ăU">g5,0&SlY04q]W5_$$)GXFB_B_m_bSYLHCFYR%lW[*F)BBHjiSB=Wd_Y6Bp[ur8ăU"Kb.qcnJED/FGqIUw6K8-x-LPX9F\88lk)Xbd29q*3Rg]/8bFHky-7(;BqAs/O(\ăU"?qU[_KQ(P:[c3t7m(t0;SPYnUh><C4)fZ0O(M*v<N9gl)10Mb0EV5U)a#sU2i8iăU"5:i;GF1n(k'Zgd.jBJ))HKRwOn13?%p&G/y=(VV*02HY5wO.,_HPNO:zLOvi=U:ăU"Nni,2vcj+.26i8B/_)Xr3LXlfUmanlpKS(DXW=Fo_($+x1T*hir<[XvlM:erV5iăU"qgYJmkfb(EGe#ePG,Ts>fk2Iv?7^3U$*I(ac2ix4d-$v)e&aq\c0O9Hd1U/^[H/ăU"nj2HrGn/YUEvgz>.;%laX5Dw8E?5.x14XsmN4Uhl.jjr5p[2N=ci?]qKD_]+p2FăU"w(FfD#-Js]tKBd#A5*4('E]eBrFA;MtMZRW;xfKHSGy.E#(M/&SOm];VZ_P1?lFăU"Z03#\oE*;]yBMS<Mav2MVmss0L/QhIQ^m/N,BI,d5(p/E'b^LqRqxXp:R;12^E>ăU"=j9Ruud[#M9]7P8ciLIh<uFbgF((a*>Yn^Ctq1Mo%sMLv/4t[GlK^:N&8rfngt4ăU"M>?Wa'$eIN/6c3naE_/E^?1[w9Hwlq8LGQq+cj\b.w'91FW]1_g+I,02Z%t8Q0dăU"Uybcj4&?%0(1._EKxNh+<EN?IkaDw7Y<\-[9^/,B>:_qz+j>WSZ-=rZ\H9%Ku^?ăU"-X%:dR5-%pcv>UhL10?ZDJkru\Y&Z.*F&cOm(pJXQm+_,5vgK(&LW.86f9mm&'2ăU"/)rJlrp]ToN7#hofH?>ll&ql-g4>S]*qIz;\SqqUi?CfAZFT]Q%:iUuF7*Ku2iGăU"Qy'Ql2ie&=Jnz[QR3_A^NIPN8A4KddJSPDa79T^zDj.60ks-q7lGZe7YU(>FoI'ăU"uTrFspkrpqq'4Q3$*lNmoEdc.4(x2(&\9xnZ399b=FkAuLdg49:SrXDug3vHI+MăU"c\E]AlA:zgQ7=9O/i<C?6kq<Q/B-hx%u%p()9%%%%-d%udl^G:L%(avJ%=%9S%%ăU"%1%%%%hti#jRi&%ySwf5&fL0AKyziZ$hWy%oJ&HucYg%C(2pq2myswO1dE:chSsăU"Lk#3#?G,4j4ZN.T0)EI#<i&dmgAoKgZ+-/4).i*Qa(z7++2,vpl-K?Kr.OyY;1FăU"U&fUmtcE:mtc[LKx_?u_tG2WHyCbsyAduaE2^p=axp$ZXrGF6w$-_1CUDM+P?ukăU"E#R.d9K2hSY-ugU*K1_CTmu50Qj?\jp[<U1,G<]Up+8R)t/\_Fk*/;Wr58:Lu\9ăU"a)XQW-HBDw-*3/;)U.SV9Mg*'e'XRR3D,:Bw)V5+rAh#HI\f_R:0_=R%9Y;W1G;ăU"+/qyE-G8R?^6p5egRj#%*k>j%#\TR(f'=UIp\>)&+_31(RM<k?JK&1d;%5dBSRUăU"aE?PNMGI\KO+j<j*hU]HD(*/Nv,0ZH.MOHF[rd-M2Ck'9/#[RMt22*+uT$O);pxăU"M*BeIqj6k7aqGN^B$yS3u>[Y8,0[j>3Y15ofq'XX?F-W-+Iq[xLGFkY:$-58j'*ăU"Mu'P4ej_GM+F>Ugil]]J:NI,fN2OWg\S,Kdkv#s9j98zduUpQ]p1BLOA<_U28BbăU"91S,rLqf1Q')dnD%TZQC3cn]bH^nQrS+e7#B5gQUdKQK.*DI&?R5u(BwX5uqrq6ăU"Lo%[Q+?gHVf72?C-YxP(Zuyqf*W3/-b7*ACWx+&.NBbS4_,Yrb%?##5_9cV:<,CăU"NfR]HlfjZUEoWitXFUjU2t>&JQI#$%[Hc2yd>ZB]t/)A[>gPuG<1krBFM0X'epgăU"g??<?XBj,v191dBtm;?#??nH*Bjf0;*t_YzWLDBh=UJqhp4O[Y8LoR_&2ar*/o+ăU":RI\S\)O<02Hs<rgA8rO'wtbj6p+G?fNOu-t>,)+fR[5%+=U;nAQJzNhhX2mNu]ăU"=fhRH(MfL;L;Y5waE'WVNMZJ0HIB)q7%Me*f]6[FKze:=uaKgR(DpI\wn7ed6sRăU".XPwNn9ukVKJawP1bg+VIrJYgN-;+h1JFWaOkZCqlFE*gw1AJBn[QYDbf1rUs/1ăU"pkjYqdAb<]0nX^C_Js9-dUcC*C5PJz^R/\l\5-1Mu]a7Ld-J/CmWQqhJ]xw^hsoăU"baSkqPuU2M[Vy>-FJXDaglFWfOm6<[eC:,m%.0;R:a3b;7rUj]brR9Trtr<JLbIăU"gVT/)%*gUmVIw[A=1VwaTk9o/<(wk3=MfhKZSUBm0CVSs(;)Et#\z1/2ZMj+sp8ăU"E,Hw'D'qF)-onF<&w)$gMz7+b-\eUg\f/gLD:$vDSap(pxdo8ydF#CLX;gXCO0iăU"8j7^j4w&HB^=g2IaA\Ul\fl:]Mz1?:;Lx\B[y[:e>lc)HFI&;Z8*Hub7^4WNB=IăU"u,uJh].QpaA5=e;n8,jXzhBF*movwe?fn%n%&J7=7o=[DIeMxnFcJCD5VbxTpA5ăU"U)()]CynKJu6ZAx/h6>C&Nrju3-sWJ*hO61%*4t0V3&q:F7l3OjQfK*82p5Xc.0ăU"ntD66P4fiDe9NylOsH<y</t,VLQ&ne)HnxlB,dIt;bX>M5<Z8smCdwRcj\L6oWhăU"NNkMb_#dGX+Y_%sRE<D9J9Z1'.'q[u(.ND/_,h)-HvM\lz%W&-6LZBofzt&(V2iăU"$.-,I?9JZo*u,sR4?C:YM^nFr)gfTnfQR7;2\[TL\%5yB/X9dUKGS'kn4Z?+dcaăU";9wlIye[_0*:YvfCIP)$r+KtjV^/(_jBO>o2ie)&Y?3OcSt/PdDsbh8uicy,4bNăU"*';ZgV4E?6sw,N/AR1d\:i%HwNu>ul5wcl#4Ehi?A%'t595rVkmS?f>SpJBRG(oăU"hj7]D1vZ7mSr<<D1Nff[5jN96-M*:0d8&?::5d[Y#MlZd*E6Nzb:*=OiB_EB:x0ăU"PTq%+CSupD^Dnebxer+4DpWgJN-b#jQ4?&^O0+z:3Z'+DA^Gt5Xd+DQXDlX4FrNăU"+6n.a)9QVlkG*(Pcddh_zTkt'eYQjun[na'1&<fD38?H].oVcU9tcfJ'YIe6I??ăU"a#C4p<FyIz?O1?syPfN(y)$8RCK<_x.Bky]vmzD%&ufSTM]MY6wnFB&6YCe-nlXăU"OAd2Ty/lM(,0]Mk)-:-^*3Mp0ZsR_qd$O?5qZ#RDy/9>dbNO)f-P'L5]u[D%#^OăU"N1wD8W>7c)2j^s[Fg<v;]*yr=Jg98W5OCdH+VuNnL6.Rn:P?efsysvh%Hwh(-=)ăU"soA$h6E+.BuvhVr$<B78L9<cic'nP0ihpg\0\8Ci2202dbIen4cu/p+tu(3Ehi8ăU"5d;WJJA9H3&vLZOu?TbJD8n.W*IdiXz(Sz*S3MF0;OR;ri9jK?$nr).)%2xUiz1ăU"Ka&\moX\)W0\\q_mRNo..&/U&SRWhasUj767lH+R;AeOQ<ZIfX.hjb<00OPtgs4ăU"cwerSNDGu-Tv+q+FfhAL,K5<Zthxgm%PVAasy'[ipkPlB\b'Zr[Lk1.EJr;DRp\ăU"5n$3z;/edK0r3+b?b9B.Jh>d$[McHO9O8o/.n_Hzf&I&THpDvhY4QhfE<$0Nc1_ăU"O4QN[<IYE>oDq:%f4ZMZlL4_J=bLP24n8-(nXOEdMF]fZ^t^.X'7l8vKKUz(tr3ăU"?743>0k[Fb6%>oJY+(yOuSk4,:^x96Ne,5JP+$^iCwCUJR8e/6*?3NE<AsaP]x0ăU"qCrS>%slt0PJ4gS/0nistu(F/:MtG%YV3Iiqs7YuKDUT0e#H,K30TRQEhYVKW5zăU",;;,zF/Rf7SJ8rN5H)e)Q%Dt(6&.^C*is/2se)h&%(o)-l2>i%egeZt<$E\;eR[ăU"r+3n'YL.7ipd5)2R6%q,j[M/.$B_H#A=6*g=aYbCuHB-ZS37<Q&GY1-]f>AiFuOăU"gjRQr/)?vI_0O[Z[](0nEFktHuZq1RaI7^O-n;adMp'KV$&BN8at*\AalSoRjE^ăU"O%n.A__=q*-,_l;7Jq9s:T](UasuzqOfKvjl&oH]DPN&5=)*n5J1T-=6b1B>yg=ăU"v[AGg6G-c.zK.FabblNERjRFa%M6wm/U$F39+Wn[Rk**3BuCVR.pZN-K_e?$E17ăU"')UTUn>%UN10OV]S/O?5=+b.I9=Ia)]bLECr&fR5#,;CcQKV/*M/6(KsaG#le?3ăU"_bxlQP;&w:EAAwsJ?>R1dInOw4o&%FR1hR/7:BCG%Elw0<&fGv0S7$-D8S1lL75ăU":dfo0QPcT^J-][MyK#vxjx08zoF1n9v)0-//:/^6)DD$)mv_]Z\<lOidVhb#w:(ăU"OSIb>RU_6QHq9K;.H4%GffPe_FHdD5o:WI8p3si(-QG/7gxS)G;+9qdIKloF5a(ăU"O:DfTQRoY#T0TK,QM<sTa&WytmCZ7z75MM;KP2CWU/Z<3f5Y?'k,75Il0C*GIO6ăU"VY](C1xF81GZXGb^uLLQ[<W(Ga6g4SOCZ7B:aJi9tq?;Jw5z_9ufI4yn_h9kHgWăU"FP8B14Z&DM3#Mw7MU1d.:I0b9<DO1iht%$If,c>P'WjET(PeZ*m3--C0#Kk+4$9ăU"vZ#J'R7.hNy9&RMsu2$CUMlJ=OD#vm4rW&dBe.zQ^YXXvS7Y+licYESA#C^PNq:ăU"VkO=pSoST&iNb:(xv350'qU0V'L%v^vk8).^ubmWdpXvL(,Dna-mMYYA3_o0hU[ăU"mS_aWKIq.4YM'MWAZ&>I]r]3:vOkKM]'9xIoC+Q2WT:2ZgZ0dPZV-/1Kpgw(3t\ăU"Z[J[CvLh/zD#6TRx(^X'-$G&CY&<VQ$Qc[MM/*DmoUgD&aa4a+C6[&A-*S?c0Z5ăU"&qMT]^8V$BhxW%%&>GauShbKEK%:55T2:ZcV0G-%RHSIE>Pwbt;S%NAa)Djk8_;ăU"A&EfWm0'O=%uT;p<ohn7V*F=?Sl9;FEXe_-*8c>G-;pf>Pk4:T&a'T9]'-19qDRăU"&v.Q65A$x-IskK]3%%[('2Z9c<^C,3RHC'7S5R'WfXCM'IeYnJ+9+;IOSMUjp=UăU"f1kHXYO[?2o\qmy#r^9D28'1S6Q[1OFIGO*7IU?TYGy:w7Rc>aQ9RNiLF/1y.%aăU"0Xc0A,e':tf\wP]cW,;9b=J>g?[V+Y6#f'u*Rh3u+*1^IUyNXAV4J<tY$L$OLGKăU"W_](y5jZ5^<_8#6(8VjoR]+FvFEC'X3#10A_v0RS8Op&eV*2JEWMXIe/RUHIMXZăU"QZaj>*?%H3-0#.GSl8oorWLX7_fhz<;f+>]?(9[FXjE7c]&1xB[uEJYX2j%]t.,ăU"usQS#[Qo\'f/Su+2Qv%B&cv&)PwiIX=bqO'TiR(Rz;3vZ6.tEi(M0J$HisSDcDpăU"'e=:cO:f*MsPT]wwgI7$mBakBfV2q[7_0Et=/ag+9D+inWH\K/O*)E(SAv-1u15ăU"*O,E\K;2Q1]'()p#2<h+Jn:s;Ot5P-hM'L.Yob('.&S,VvFYq$pva&3ejpFNafgăU"9Of480F-T7;1Ksx1CqmF[Q--ENRiR(jDh-,#?*+z>OZO;.&BP\nRV-GTH.E4%ehăU"v^uSE)eU)S.7.(SdAGDE+ujSE_:CI#v%b^*]EL]\7](lhvTE#pm[s)&#OCrYLU'ăU"ZWfa+,DQY18rl1XT7EYQ0s:KN.,DPES]HD#;O+9+ODH6r1\>C)pGaGCZQRY8%caăU"HNMzpBi+0HJTSC:=GCkzT/mfU+<9t(HHlNz:;EO9q0%0k]q%D3?ZP?LT\d:&-T-ăU"6CZ50o7aUCYjt8Y;FDFQ-k=#2\Ol)QI$y]*Z^YG[gQDuv=x_gdq;V;sGg=:SVegăU"JklxmXP/EaYt<7R6.ROpY,Y;fncs'jfOA=9QT%'(h(;U.TNHx0_)]Ow-;1^(;.9ăU"/zrR.W2#;)+Oi:tfpA/lzz_a]Tv\cJNDHG(2fK?Zy[2)f4hOn0Qq#t7<bKtx,>ZăU"l8R^f?5.XgO-2=Pt:UR(3rytmLS,[Y<wc]u%#4cN3]MHBm-1rp/>#:Tc[5\Q>+săU"Y7Tfn[LM=%r0tgXX/4u,8hdmNr5?biB=%ElTpr;csRIPL-MHUv2'''ZBI_Nc:W<ăU"t:v2P(csP#DS^f_iN&ug[OU4ae>CMxHagI,.#X\Xq>.MF9m#M+5lzf%]nr?j7'TăU"gb%uN>W(ow->>u$VjUNs,UkzlYZRVt?4&m1k)U+_s?V*sd*e5R$kLD8Hu(C*r6aăU"'>HekW+3dfy4F1,M$)w;-ZdT&a0J&yNmN:Lu>%NV\K]<jEcUYqMUTDQ_q?T.0.)ăU"KSqNYM^fwu)N,TJ;65A2.EiB_EXC4[;x+.pFv_6NBE-E?eQw'eI&&furinPr%ILăU"NJCRU:\BYVm>etb%GfBI#:._5BRl1T]9C4l;[Ix)ZE1q;QtUS%(l6*6NH'^rDCLăU":$]FBd%nZD*CIoNP%Nn/M8>py?IYBO2+\F>m]D:XNV7?io'kH(_$>DN3vj2=Cx#ăU"f'2f?TWOHndr^A+QOf5&nfI3pAXvnzk9:g&ZqF0Mr.BFCBVTVl+=i']HtDvcFwOăU"e[7:Ih-SgXa#7A=Q]Fvp,/tvf2+N]Cu:JBZuy:w>%1dI=Fd/[*#o[As;H<<;J*FăU"ojaR;Tu\ybYbaji^?'4*RW#-oXFngl'+f5e=.[usjDoguVp1vs(dY<>aqwJ?U&4ăU"A(o1\#'0(PO[*#eTVq.8MlBod4qFLuc9DD5GJu&e-[4(3i7V4?HOq*bYf)MJJZdăU"Pf'<.9H#c(8WhTk),.1QVP8exSj.*JnxY?)$svNS'QK^Xn(,/<5]M7Jd^Y$6+EVăU"dle[ht^eo]fTUKx56S^1)\_Ho=hwuw1W:UB=U?jc[il7.]p>4\dHo&]:-zj9BbUăU"bqCyKJ]1aj^MUNc?0LZa_4u4-=90+BiXdyMtxcu[?]7v2,H=oU38[[=tJWm66a'ăU"-QZR%HngmYpNWIJ64r2m&W<$;Wa+?q7mtJ0T.66Ntu+WH?Uwf#:kO&C7z]T:b)uăU"KmHwv[tTfdPaP(Z1BkHn(n%EDd<<l_x(YL7<KV\sJ)lC\zg/)(K9s*a9sD5uqZ7ăU"6D0V>E6I+I\otfOO>_q;Tv^ObYq.?PXrw^H]>U/s_dPehzk5oW*xY&MEwBq4J,dăU"kVB*Lgzmd8u\K\86U6AZ4D\Ld_+s8#\cR-<S%)TL(q3:LKrloSJBmsy6:6(KXU<ăU"9YjvU+7i<VL.kne,7\J*a*oneJv-NTDb.LI9qYrkMM8B;%D60%cRO8/0pOu2a(]ăU">k;*J%g*RchAVQVj,*,ep->Zs9Z-&U(J>Tu,B'Dj^cT$uNmKlqZ-Q752nybhJ-năU"TiU13l5i.vff.WNl.6E]jp6PXO(GZIO5l0AOe&Gz1?&F9G/%p1):J^^Eig(>$NgăU"-?><55bs%t42SWIwXL5=0)PJ9(D[FM27Lmv>axThcayJd:_4a('?km5d00UG(]_ăU"Fo^o5d:#(=e9n[<mIyPg9^IZ:$8OK5lu7v5>M)uqs(=^L[1[RQK71+gZqKg.ZgDăU"3C7CM3/O*0,2N[UC-6'')^\#qI&T18v6j^/Iu*Vpw(Ox)YrPp?saMqa^a?L.RmpăU"8-oeZ,Hh-]7TPlYK>Rm3HYs#5f<.-$m'X+fpe33<o4PCpa'fPOM1#\SX#NHl239ăU"^#)N0<X+OH6/N%E'E[1xFfH8'>E)rMz(jho'9'3jD?ECggqE>L=).F&vr1r33H$ăU",G8l?>N1#.-0P.pe$Eef',R$9$ae'nVKst[h4#a=v8rg$ak=qa4tmd[oOR3ij:MăU"/A#3d)0cR[fC7(>2;^iVDEPqv,c]hog?8z7Fyd2KGEYX_>)U,+h\V;[k=/RKP]DăU"(N0FLO0A;:&FPXMI:-6WtLi^+dNp6$S%>dqm4'ROJkGl6Oz))aSK<)323FF-r];ăU"+b:]m$miY0<Mhze[U.qiFskee]+xSM]3,o1a4%Eqly&3Z<p>DauBL9=;q\Zn.AAăU"BZC)CxT04L^spv>ceiHWD*=u0eYE,OG-6x+AV*/vm/dgQMBDmVx/f3,X_8qb<=+ăU"eax_qhJD.+wR*NQjM^C%3QgDsR?zCEXz[49lzW/OP<RkfG'%7<f3s/3'hZ[1QS8ăU"6h;sQJZE)].)'bK,4TiG1-6J]M+c%+&;:,&I<77IEo6rPLpckwR^+UiF]i-*;$/ăU"N/gIB$=aH$X&6$;\f\/&L+n3^Z>CScposh[iQD$J<&0^dPz8[k:))$U%+-Ytv'hăU"+6xDf;M8AY0G+$kZ#/hB,S%&c-272B+_hHOMF,Z6$5Y0M_fO$kISV]:HTn0GCZ-ăU"_1)Q$[D^tvaAP5.;8.E4?b(+/6%=iC.&Ufm&4)&WSWwX%1.EWV^R47Bt4<Zc9CWăU"G&fI=7Czh99OT\BI%C0'G?5Awz2<J&g-S>&W8yF0s*#t(md'R0G&y51m,dr+A^1ăU"aEs#iJggzdi=$7V['YM8l#=a^ax6\#:+K+Uc)JsBC'8YaXuE%1V/O;,ATtah8'GăU"#=Nxf#D^&FE(=&>*H=%=7e8,r^>q.Dd2LPo.mtJf^%er&UDi+fi5pem'[$m,d+DăU"Ar6^Jv77zW+COQnxt>R%N7XpVejEV4K;c)6HV>JAp)7YnhzeD/1Y,&6r=ad0</+ăU"cA3?W+eOzHqGopP]nZRI]W&xjD^yc4vMKSm^2L,PQE=t.7XB9k;>7<B)uRCA7(căU"WL%2O:I6raXn9(]ZEPZ):=aUJ+:3fRUpe&6l+q#I9XzWQV-=T]M<nAAI8be2jM=ăU"=*q+2W7iLc]O'SO.e8)V>fe/x#hRS4O#WIR9ZgangECkU44\(')54pYlOCG)MARăU"lB1r*<g:-'-FH-\8(<++:yA'UF[O<:oD4x*YF%f];2#G4>]_?57]7$Xt+asK--EăU"L.:s&Q\EEaSA?q3tNLjaA=Spt#l_fRbDh<=/9j2G08B^EMk'$XkS&1K+l$;U1;DăU"7k3+o=F'<TPsJDtV0C=qvg]9$A.9r/:h&xCWdkAb$Sh.A#AXk9QTgV=tgA?P\VcăU"JWGcd2Fok9;mO1$JEV;+c^pB,d'shr5+Z30OKl-N$-(qzm&q:tTj4.Xp%^\*n9+ăU"r'5dK=9%[k2djJOQAieO96#<GpvZ::p,%D>Dir&Pm%SH'k'69$_V>4*n&80atF'ăU"S6pA[gS]vEI:<kZAj(*R9;#jUxB$k;M'MkoZTn_ED5g-5e%Q[<XV*QqFw]XCVTeăU"1k%*f;3]#\t-w7*]9Ie=l*u].hAycTT%E09hVT.kMQ>AoXT=0XeP%+YsI>9sertăU"TtaA,3I,s%X$7XQR2oMAb0'8HnTChk)fjWjS39Ab^A+?f&(+]QStcc9$cj;3mRvăU"2f&kcqe2Ckpb)p0ZaOsIk%go2z18:N'+i*$?>>AJNN-t)jA4bd:o[VBfC;G4BS%ăU"iQ^O4fpJCpX3rtTecRIYIh',;ZrW6^V6m8GCKhazkJqdQIyQ(li<da*h6sG.7=-ăU"8qX>j2zBLm[Uf6.J_Lc?y=P.8Mw8(3S;B6k<J(dra*;H%X6Lw)magJz#1jw8^>aăU"ej/cm#Le=5Z+1uGh&a(LX;kKr5:^cbDd,u$w_fQ)q.4,5EJn/aCVIkQ%7Rw,/M2ăU"p2es1-MvsG8;S._T:,T;<+8=m[aK[P(ZhR,E?F3p+ls7h:iRq.lu[(9xUSEHaWNăU"146NBa3U\?\9(>mq/o?++$c5It&$$Pi\lqV5(U01j^9ZJxXv/9,^J$TBn>r)(wHăU"%hr^nkGJ48H/a,\+JTpn-u>pKiOB^h#<?I'mqTSdTl;vo3+3JN&Xr1JB?<Tt),/ăU"7Mjov2J[2Cp/qfaEht&ebvicR82J++t<EiElJRQNjLtkbWEUtw(3C=_,I_NMh))ăU"hngc5Vb*a4x5>YDL%1JWJLBWYG*-E_S2%lu<9Wx;8mxolb)L^Eh1h2+><Qr('BjăU"MW3f.Y%XCvOubnvlJRKh8&yMbl,cKkN/5T2YstJ<luu?ICopE5x0loL4(Jll;r3ăU"Jx$6ixMs5I8qYtso9A1^qsCmSW6ahm]W(;+sl-Pls5/'\mB6$(ztl_&c+p+yg5tăU"ZObtYgwQX-YE]9aHO(MdLJN>6s)aU-ANjnPZUqBV^*RxkKI&bU0(MdJ+1J6W:jvăU"vPmokH^HAuU-k)7qMK$tC]5kBIufO(Lxji$WsY'P^Y\KdcJs^%FW4fwYw98cJ^6ăU"C7I\;GnaAEw.nKXtJ6f^\v3Yd8$r_Dzih%?QAs/KdENqkBMK.eF-dNsmsCl,'siăU"EJ.47^)HoKl=/_;-Wxs]o)gwNbJfH(+C+8n2bCJ2Sh1:g%.,S2-_Oeo#i[KG&s,ăU"s$N+i;rDnk^?ptloCn9bJNeoBg6Mq;oCk5Z+H0YM7^hF7oC%qKf=K;6Mstmt<p&ăU"5A[C_q>j#X<xX(LqI>v;&TTKtiJg[ie.sMRCphbs[Gb9I^HkbPQ%Ny,a]8VdlJ#ăU"MuH=;Lnu;i];eaLMuWQr,IG:6wgqz/SPFDw^[sGE7w$6TtG,N[Ld%r9<qH_;?,oăU"'gAY6c*7mu^7r_Y*VVs?;TV:9IxPV8.fpZld.1rce;ZvudXuOYlpFnn,ymIIhjBăU"mekdJ_t,Xu_imm*(5e_mOYMl*nmc()EpNilMf;L6H65lmD#RSZWCIzX^.]5fg'JăU"&>/Ak=p\'(VVmIUIm;?.Rk0KN+g.5H[C^(BTue8AkO\.BX2K6WM+wP/78osed.3ăU"d/K*&r/+0D54,)Qj4UDXlE8TXoO,$E5hr,6_Qz49^e4x=?huiLgE;Bw>&Gx)pq6ăU"wvj4gGq-gT1G5XfD$UMc_CIr8k=jvE2p0qrvC.y.E0)exxjsVXf]Wa8pdTT3am[ăU"NMnYT$Roj<UY=5A2K+i8j50/nwF,Sd6vx..%3h01ig%]1:]Dvk0glXX:A51gfKwăU"ag6g0CsmRm79YWv&fj$FGnk2KkKP^N*pY6_E+1TBXBw/CjhjXsD6>i?vS;7mg[;ăU"GSe:CN1S\myngn5vrr)=Fc6EUYo10*Se;,N2/0jU2*Bt4Eaw5)?3j;1geMC://KăU"IM9o%hQZ6OnUIUGUz9FV_3=LFJFgjvVNRK>YfJtZEw5CHr1w1q68XH<dJX=dUBfăU"T5oueuwrxGYws^xtxowdHUK2dI3%SFxBQ'BmK]T9=F&=o>Cg3i^&Jnkl=90M]tBăU"2V<i;cJ6R?H^wt:^.t0;J-g(gx=E2b=r4oa,kUZ6F2c]'UscYY=3vPF#l0vl]3=ăU"s<l*VxZkVLkrgjf0cXiegu&g81$ced8scH^3fnd5VGmdSge18WaXykVC$<c#lrVăU"Gds8Ki?rV7pDtr;H4DnLh't.;[u:O.;)x/RF,m#5<M8U_pXp>C_e^44KHjRjj,6ăU"RcqD5-UV$SYFH1,\oiEp6v<S1a5rWC'+]u9=jJFjj<>T<RhM-8=O7;sU%'%qXE_ăU"3>E0*Rqa-BRg>j+j?MOhe0MpS\2?Am.1L6Ij6?*2,L?W]+]45d+0cA1U>kL66+iăU">1#X>In=1_zg4N;1jUqH<X16sNZbXAiX&>62jpe&nfX.j*g82JH>NH5ZVBP2[:LăU"Ql_TH&Don.eCgx0N-uPW_P:_L^[%StF^Nijbl6XiN2z<%a*d]D5Es?VLQ)apNVoăU"^UNcP0&VE5Q'OLK^_Kh4GO1IUN?q4E4>i0Ummp_Seen.x.DeA6Ay?$T;\_.^-sNăU"Ag'LEfl:+'90]leTN/O*Qeoju)XY1w'Aq0VL>cDR_LAcueE<Oeu$3QE?$7Bk]kAăU"3p;.5[RC6s%a*4oJus>uA.XsB.)*l=9/HMjkkO\Tu10&SFC;c-aOmy3_G'q+O^4ăU"o8&Yi$pH-lewJwl*P\;$+vD69\&kmoJasY.xjN,u)wq*%$-jVhp;WkZJhCr^q9/ăU"*D4O0[R5glo;#=eGr9Q8Y)NPeA\OiFLs.re2<,H;g4BI'fAkK7VPR]09[Q60:T$ăU"/8/A7_MPP#D:1NR=PV^4Y1>^->V.c:^<3V(?,DIOak8s'ub9sv]YsISD*AnRrA<ăU"554uF:U]bX)5X'm0AhBC$+W4x*F;UhJIXJZd<aE$b+kE#u^4mgI$DJCF+<j/E1OăU"W#?+?I'hciKa4Dui/rFT7)KT1f+JU0[7jQK(a/E:oCn/w:_<^*Y63<Cpq*4=XSaăU"sw0SA^_Y^eyx]LDD:c9#0ah\H0qh0-3/U4F)#HOBQ5y1bHr5kVk)&H+[*uzE_o%ăU"Ah,FNdS]$huB>jjB6&x'yXYl73ftQ8B'rtdyY?rZkqqJbVAFa_:=+o#RBKgu,CsăU"%4W&Zh6<Du3iU:0ytgI,c=aYZ9:>PGG]+^L#99^MF$Q5b#v].RDj,K,X#Y7y6+aăU"[AYUw[6y=(ho;/)+ejA<JeRF)(Fbff92*&Ve'*=I'I*1rADA:OS4'.Q'g7F,.OjăU"Ffsc[gutzxuXVua+J/5<(RlpWJhE%J%gjC6i)=jxlD$Hk,17aghRaOsC2d#QfbPăU"S\Qpp53=bP5SeX^0:><+*-mF=#6r/CSH5lL$\((0Gg-a0a<fH9X*l_*?q=9YqYiăU"6-CN$8j[O#;F:'W1BlfguW+;'KAuJ-N(Mi^,&5<1F7Ms#oRvLro*L(3,d8akBn+ăU"%tMQ4gj.h32FCn5cJ\T3=Pjlhu3oYrlgjolhsQ?eRXLuXrO%HTQ-5Q1YG6.++#WăEND SUBăSUB V2ăU"(^#O88T8-j=ca]'Su+II\T+;9+bI&3i[Oe1mu6\=V-O[UHKYMO>xLbS_3T(?bK]ăU"9+[qsQD\Ph'caHe[A^.ZgFZ(U[9cU)S:6xMp#SISP\1):D:0_t2]jfDkE0GOCqcăU"tsBplu]XRWpNxJW,5FIYCou6kIk9k<HMElolDwH>N[7$?8viab=%Vv3[%m*-0FzăU"8JlT>+Q3:t*)9UMJO\%y+++tqpl];#]&%rXb8rx.KO0-;irB6+WEN%=%C2u1)aCăU"oIVuLxD%=Dvm>A+Mfg7(PACr5i>UF$*5ePidniXd8]huxla<?lC1yW[K=&.%i.0ăU"%M[\vM[B1-K6?<E]Ne\'O9EzP7agUNmW7<c<<h)iRU#h)#01WcoIE;Pa4u+311măU"hd>n&%<uo]NMm3<ZT>^P((U)N7/J->._AxP69b+t8<LF'9'TI>PN/Xl,2mPpLc$ăU"J(em16/)At9rF(mSsoR&wnqV&u+vhSR.l9SeQ=F=bpuG'OC3<164(iBL:-jjyL'ăU":Q96ixd3<dn'J(Y=W9s2QDPIZJ1^+3;9IY6M_k-6'q5^=::6E1Mn<iL=NvFDZ>MăU"TICKWD-6i0aXBT_Rs$-#2AqOG40cUI;J^,S<jhG#iFHJZCC=Ejg-t7.,&r^,4wFăU"*]2LI0*[mSNdEZMM;T='%ckcY.xc2T7IAUQ.sZ(RgBZ0&ePjw%*%Z<#;\j*#I9ZăU"qlfET,5/($nX3/REWhn8gKO*Sv%'#(#nej<[\]K(Ss%]?4+M+[IF=aasj;lv#(^ăU"+Lc[qE,BO3jOpiGN,5.(,[,C-/a$nr)=U-kHDG9i)HbgA1NPL>F:?ro\&<?s*hcăU"4:J4>#)m-aCXU54p?QaOS%PC4ah[E6x3^UN,%up()%9%%%R-%rd]lGTY>9xr&%%ăU"%%(%%%1%%%%ht%ijRi&&ySu#fq2a+6ISVd1jR:<[9)=e[;R>J7V'[g;ZZNu>>>NăU"B>4DM?s\<D<X*4X5Fgh^%X<%w=oT/6OvGhhIpNy9G5&ZFch6l=p=2G2fO_]\saHăU"t7Yn$rM'8^xNle'25^0XM.l_WTr7*K,<>hU,>_XoOO;Y5Q$2]PWe%)Gu/)gP$iEăU"9kUF0i\k=70j:L9sq>ukzE6,c*NmS-0rJdi0G7VTZ<Fnb+$[x1V*YDQOAtblq_năU"U5%J$p2_,(QrtfDTkia$vgl'B6oQCjX9KcCfRy\RBDN+3eqbHHF,j2vFkE'&^E>ăU"A0nE;Fn4r\^gp<[>^DN\.2d0*K%g*H8:10ob?/<]c72QhS%/aFu=A85la:q/('GăU"hno>Yh4?jHq7JQe0[zvx/0.rO<MYUfY,rcCCYI_91s^r0Ok:xGj\uEu(#_5/=fFăU"I*gkP,Ztwi#ZPv<>WFNPgnLmn]J6></z<R.^s]'YRF_Ydf,5[?ucnqj0gQp3u^PăU"='+GZD0&6>k(lz?$$14enoApaZ2^b3BLaRn9Lr,WnhcRuw$rU6$N:$P2X:FJxxLăU"8.dZ=BapuO*20Y+DV]i1tKp$sg_^3.):g=9(TC(fk;:I-w(N<<?(fiu;Ka.D&pdăU":eKXaB9qsew'=\)S'Tk;Vz6-$x4u%p&'9%%9%%%%-%_bhlGe,BrG6#)%%5%/%%1ăU"%%%%%%%%%&%%E%%%%%%%%%xns%Rxhw%sSgf%xup&%'9%9%%%%-d%udl^G:L%(avăU"J%=%9S%%%1%%%%%%%%%%%E%%%%$%)%%h%tijR(i&yS.wf&u%p&'9%%9%%[%-%r,ăU"dlGTrY9xr%&%%%%(%%1%%%%%%%%%%%%E%%%%1O%%%hti#jRi&%ySuf%qup*%+%%ăU"%%%(%(+%'%%%%TQ%%%%%ăEND SUBăV2ăCLOSE:IF S=70AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăErika Schulze & Gunther Ilzig  TRUE COLOR TGA VIEWER FOR VESA 100775.2275@CompuServe.com     07-20-97 (20:43)       PB                     361  23840    TRUEVIEW.BAS' Load/Run under PowerBASIC to extract TRUEVIEW.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TRUEVIEW.ZIP",4^6:Z&=17590:?STRING$(50,177);ăU"%up()%9%%%#-%Z7'kGUL*^%k(.%%Z+%%%/%%%%wj%firj%SVxySLyT=BT]5Ln]%ăU"v<FaSequ.V_+MH).S%ke:#hebCp;\e?[UvYmancTvs;lp[jGa3:/deKHGJk^6w]ăU">+fQ/AHF-bZrxs_ktTB+dR1okr6_S-V#vArFUlrACvIZOT<ZZ:P?.u7/;/f.=#4ăU"QTI_A)f%V]a^Zhq#Zij2Qg/,8^fOpr:H%9x46?&sg/'>*0rXq,#0j*&.,s3yrbTăU"Zu4.$#Lbu<&]Kg/J;B6oK>'DI:rX:z2J*?e)A8<sL=_-LQWmGOP'CWs3>7,'5dBăU"Y38hKgL#^oR2MveTw1+\TOw(P=[\a^sRGS=D99)<%a_5pWLGYrZUBSY03KQ]EseăU"<;BK>#7N$R4Klo54%VXE(A&pN]#Esn>9qS)G?8k_H+rb(r6-)mKBi)]l%r)QO]7ăU"e'G0A,.pZ2dCt7o+kdg)xX]G8s:Sp0c+WDiO\Gv&N.m1#y<4*RJpbHY.Om]dz'+ăU"37;C&9gO]wk*C1#v]\5_,YvJP;11b8c9EC4._ZLeK#m,*7:n8[fd5<-;8MHD2_răU"+5ts3r/x1]I>%bC;Q*DNKBsC+r6UArV:#L2E*\B,[<G:#LIPBG4n72PDSy\Bh^năU"$tR,arUKg:fk-nh5I)d,ayUy_?RI&7=lPWST#WuUEa:g-?;+jE/cX?YI2vZl-*KăU"H1i'>o]<;0ct-I6y/MeGqs71NERh)D;v\r%hGYBu0$U;:MmFg5'puZ'pbog+?,OăU"La_K]*Y$eK?6kNF-ZfpS?Cs_t^S]ioYvlUEM'#JouB1.&uYa/CgJENE0cF(V)X&ăU"vWs0kg*sfQ5&CwF)Vm%l)6.DL;VvHwxWHbcVRQtls6q4OflKt\K2oBcr70m2$Z#ăU"X.MUWOGKYi0dk'9TJ+;G4^3k<0\k2HcAnMm1Z3%eBQ06bE'?9kr,cKE4N18sK0KăU":y6NuH-'Ire8j&u*r7L*J0[Q;SaKf4kMvY9uWQhgQxqpp1WeXSKZJJk^q./q8cAăU";D-ql_U(sZd+#fmAt)%M<u_cjkvZ9)rtHJZK6icV+#]J]PgtpXdV3W-.3X+0P#MăU"c8^%&rdRL-5u<l9U]-$FqaZ]'w(up%()9%%%%-%:P6kG_I[][%<*%%&T6%%%,%%ăU"%%ylfS[ith.e&v>T.[5M\QYx?Jp=e%/#L$riF*A%va2K%<V)s?U+bK7BC6pjPhsăU"1za,^XBNcR+i>=>/kFXF=\F+D8$C3HZc(=Qg_%IL0,?3qb:H#y+0u+DRN-5bv3FăU"P%d+Y2g(mqL%F7]C0oW(#'#37kFC(;(Zw:qLT0()D=/H;%/qo59RobZK,-:OdRzăU"0:Vq&*5h^KQT,#g2-<mhd7h%a>>FwkPg#H3l[KHqA:JzrW1l9*L(>sK<f0nZ5>#ăU"Q^=zmYtI&8Bhea+as?3i7',=-/98ErPIV,<8qnt;zdZ;p%M$R[HC%Y7(\*;+^JDăU"3u'V9($&X#-CdYcQ.#\NTP=VS]>^II>-poL(e_P2a'%He_Jw&*(g9agf,cmqhp5ăU"mqAkh(S]:=xEW.f_6r*V0Nz'uY.f[QwyV*(^mM4%74=/=IcOeh=?Y-*CpR#Cx#QăU"/7]i5[E,lURT%?Rq4S\9\J3G6'SzqgNEr8*NQgQ>BDaM=:iPr2OCg=KNGS;u?W?ăU"&h]CuYqCUN4en0]IZ'%8nWieB'b=m$W*MpH]%$[VEs/oPmjFkpuBD2Gw$I&mg4]ăU"NzHkLf'NmHg;QO(pQvKkTeNnZo3AyV?#UhEYu;XV-^Lw:40h[g_z3x?dL<,.\v)ăU"akY%.mY\KB-)Bnd.uXOB-O7S'C)3D>sV-6.rI2L:4'%QF_Gt%$>i,XdEYYnKdbZăU"7QaOWk*W5aD)x'22f5R8t>,4K_yiYu%8WSV<^t)Wb0o9#Di9lhSxeE]'/:;QvqGăU"Z73sw:W>Q6S8'lICN4KgB,<Hgu6>Q:9R1A6;XHR;YBtE3i:Jc]01cE+pe3ujKN+ăU"4cJKj^a6G5sbdgw4pH0]Usfl[ZkU-ZkJW)GX5f*6Xfc^Y6AgIt/]P1DtbHm/2b8ăU"AOLl>O5J&ZK-l?9rJjZc%ED4;[uag;]B0FcqAu[:y^-P1%wvmN9x9Oe83f90+)uăU"<>pF4?uW02C#Zg]j'Zn_T[jwbZYyhKATQ:MUu*4fN.J+eIAQ/^b^lme\9s1;YrfăU"-<41]/BH#QiUUK,PyNrKXb897JUP;/A<oU($xG]gdkIPK3KP0%T8L7^4qsk.Q(]ăU"_HJLrf5eIh$I6z5Tp,J9B\(uDS+O\\TojZnahXvnk_rYUoQm_u_h6CjOI;?]liuăU"bBB]YIE9^)0v0*JkK/_oa/e6_Q,R6o_#3ol5F(>'*V&bVsRI4<%.Eb+xgc)QTx=ăU"-Pt,6Y$,6lv^a%l_4r0G*0kbdnb=F?/Vd1X,'RP,ROzuXL/%)&VKn)Hk_]xOPDsăU"5g6=rA$-py\rFB6uqYIbvdzbl966>^wAyrXLVh4V%&iZ/BP#7yJ-^7f-<tW7>IDăU"#>ic_XmZ^#vU3pBNmK=[#0(WlraV9_yFwqeV4asSs'+56Cmgt/-EPn;PO>33Qr/ăU"+0PU$^dFLsHHUNOB'F$ptU4wZbChhS%JX,N_[t5W'UbyzeD)k>aSF__8jyYo?%-ăU"_KY&MP*9^S7XWggP8f59EFHkBV4oodccVYn+6#sdf(QAUFj1wxvGcX.qxJ*7KuQăU"$%M6hy:rNg+ett0PFbJl)K9fmTOLA$Wa]'UEC2j1ZbaqWC#%c7si?Q3h&u?f]]RăU"\+NOYDjtxlr?e._e/d:-r6_ti8Tp%lfoE(35&3CBZ&Nz:#U3=.Ge1S.ghY[-B&NăU"%up%()9%%%%-%:$7kGQoPl<%H&%%%b*%%%,%%%%ylfS[nsh&PcJ9RdU9U(1:KVhăU"lR)T.G>)02RW.LCtwfQNM?*;tV9U_1,JtJWK*gD['_eE^Yklrnmd=pWS+]/j4+WăU"UW+D'4rpXyF*8>gCC:<)[8I/<e4E24vn#eC^wUIc>*nbZX33K,j0+jD#v0btGn9ăU"-vd/k&Ou.#^[KMHa>)aLBQcNfBmKif^ohLkARE_1mdToVtV[VaBlx3e45?2Ol]EăU"X5-o--cHT=XO2Td2>*S_(MfoyOQO27y.q;q+pyYpL)4/iv(4sQJU&XHgU8G&I5]ăU"(vpMc%aGEVOHK:49.sszJJ?H6wVz#4aQ9VMHMXaR5_oo=zGn=33GZrYqvusx:Q*ăU"KwYx26'b.-EuJHu2N*fU%1G,(:TZjL'^,up%()9%%%%-%:$7kG(ojcf&x&%%%N'ăU"%%%,%%%%ylfS#ugq<4vH:87f9wKQ,VS<b[T=mE_^p^Q2]wVh;alfGYRR51rR_R#ăU"&fTmHSVhpGpIpa.,FQ9Ub(nnrQj./2w$Q;^4QEwo3z5?M*ls8\8p,Wl5pLhQ\6^ăU"hG?bO>.U+?(C,vI2)j\&Y0HW[oF^d;=^s%q(h9%[+A*W8m,(lkjuB'EW'+BxPKGăU"=]473pNW66+,=;u9:);%aI;'h\?0F4,Wi8:VYfnZHxuHjSIc_qkW3K'bX2K_'Z#ăU"-/Xp(-eqc#,GX$TrBr>KcTX(_HI:XoiJjaE%VPZE]T$L2N*v8o2HSt^::GSw;_NăU":C*&.?cXh=*rGN1hNQ_/i9^)Fl8]Z+nf2F_W=6_dL*r2\6:B)DVf.Arys+pMhnUăU"9BBf*fId+7.THzK0hLz\hEdNKvj]iZTAfabneMmljLF7uB8Ud3=v*8jjd3/eSBKăU"ou$(MtPxjg&Y'h7t<i1p#[^_zLIIwRn-,0nIm,daVfV?N6930slS0KpDEX&$Y8kăU"G%e(Nk.m\3K]S%GhgLY.4w5Y(F0Tl7pA-UX\F]uu)>x%up()%9%%%#-%P60kG'8ăU"&thA-7%%:Q%%%/%%%%yl%ffxr%SfxrWf)X>BT]7M;5Ou4Ql/F,&>FLfX5QA,?[măU"#?CmijlBUb9HAoJO%(PZ'nu>CwnE#pM*9/nRsGlg:FMMw0U*l#]A5Ml$QgF>^H#ăU"s.FL2iuK+;6Pw..nKdM:gdiqmCC9Cu$soc*kI)<O<SY4)CkWmAHmx_-HLVt?.>ZăU"fox\u9jDpRdHZN-1+SY4c221?^L?-0V=zI5=Avn-?f#oD<1HEGe+mNkcsWn(:_JăU"n.w$r5]iiwHs&*X^SPIqtnza.FCRhDaH4F%5p3,-n]al13Lp8m5BCAvQx3B?j)TăU"t3VL3olTQZC<k'd*+gW7BCC[huA5RXglr\gj,lg:_FL5fk]C>6Ljb]lI)Z0o]m-ăU"UN=h5V*V<g^Tk)9L[M9a3^TigX=j0NS<Xn<D5V\7pa-B?q,-<T614X>SMnA*VYrăU"plIoi3uzD\h0C[SFq>ISIsrb3ru4Lp-Q\2iTL)o<G#>EgPu2_B)qW4Z74:3>x6(ăU")<F3E)pM=[+J=Og)2Fb4vq->uvYKo7(jcUN3T3#WMDQYw/L4jT_I4nii1rQWnC;ăU"BVt*AkUskHq<POrk4k<xIs%A?3a]#Jxer[mUN0Rel-dm&5fEqo(+SsC'*^ZAV$JăU"s8%ll3lNGQ&2B*;*2v-R&nLKN(8Q0-MHu7agngA:/ek7j3t?HbqI.tobpAqN)QgăU"KshF-F$)%8j-ig'1/%P;V^sF\U22BDJl6_l-vH+WP4Ow0Fy0-ELK\Jv'8;H%:b%ăU"-R$L&#5qmsd/Zb3:6u/5$&q]gnQC.1N(1*CQw5X?]B>P'ZYLY0Nhqz7bGAG-H2uăU"Qus$3>NP[$Z_Zrep$HG47[;xl1f1ECKJpPo0NA3+s+sId\YRSiChDv6%s,1Z_<aăU"QBGUzOBNhG?#J72?n'_Am$PO0T,z(RgGL&I=v*A-,Vs;8YjhLLJSc=]:+hspVB^ăU"5UBBqbd(_72Aq2.$ab0*Os<n[2$>U(BQ0H:RQhAu#_2#jM3Ojssz;e;<A=q<+XkăU"k]C4)\GWI7ArrIwp)hRs)_)F^DCkQx.\WpjZ/2FM.dUxGQM=fPVJN3M3dEu=L:TăU"-3D]7r/K4ZDWr9M-;.0WUH)<nXU\wT8ie'sGEpb6pOSj,qw):R%4)\RX_etL'[_ăU"u+f_QqE[Sjdt/2Rc6uS)&T_]i8V6e&j#;=TiiZ-rXO-uFbWSQ4],e108/Fc64J1ăU"^vnq#x<5ZbU3zCI<84alDvqpnEE[o?/o,A2Oeo8_G_Q[v8B.[)TiYDXu*b(=39zăU"9hS(EQ^u*$JRWFN<'q&2?2?38C*RPmhA0/0f3a)e%dg;#*HY?CQ<q(8D6a1G25lăU"#+JpzI(OFP?>IhI*tn&R]/5UlpBIbQK*X4l'7mLrX/PUlplU[KL:MZGDM01<o:uăU"f%bTWO?'*H9^1zUzyB.ki$Q$gGpY:E$^(jN#>.\Iq<JARt'J#Hpgz]T_4KD\P5năU"V6W*Zm<s$enPrhsqag&j7.zDmZin048o+%&u0Wbx.37heKjDVE*$e[vtT=wT[WDăU"%>Jn9)(g2fAmhKA0ka::4Do;Y1(%Jf+*rK+80:q3*TuCdIe.)II/p3j:h&[r$_YăU"V.3kOITQIS)kuqNY%#U<O:Ni^Fc*O<,$iGla%]I&NNxh%-Nr2A3&FtvMS,rAc.hăU"Vu\\bVj^1IjmW8X\3&P4iZ<r&uV&pw#G=>xVbZMQG04C(_0r:3G,%-D&g7q>pe;ăU"Iy'g9\2)CuZD1MF&?xaq/$jC<,_H=JIJO8ejMHauIMf<RqI3v7DQBgn1w,AFH]<ăU"CKQSx2iP1>h2#>4'V^Q*;JNx7RGJ6n[=V,o[nV;-CONKotO1XT?WZym%dA1WTUyăU"qbkp6\b?R2?*_DSUV'gMgp*P4C#nk,4GE#1xSzL]rX*bw3m59fMbQd8RQ0GJ+yyăU"SM7:*Xd8;M'W].f$9ccPqYf#DDID]tn^c:SnIi%(cl?YtL+Aewh?1-iA'y-v?p&ăU"SWAtwF&d;xB<_:OYqX0.^yYYGn^daN(s:G<bgnbFF5F/'z*_UT51kfe30n*p(/HăU"%J)nl:OhZ%e$/?l30-S=zJ2b]Svxp=_YU>ZgI6uFH(/tm12#x_4f-n6Ou>w'6kjăU"J_lO+_'ZPo?)#NoGi?0+=0*tNV-R*jjPjr9m+:NlMC/48N[PnABA]Rc7PhET90lăU"3FS;8fp+5UPyikji%6U[aWJmbXPZ%k'S[?'#LG^J%Bpb[:X53R73;M4p.zT4oXqăU"AIib<+Mg:tU202,s2$S/Y+kL6jw>INXzMSpB<Tx;4plULj:70a,oLQ'Zcbd9f0GăU"KZDwt;B\0wJ_H$D#f;,WdB'M,:xD,K\3s[rF5l_3w[JHbY35]>7K,CIaJ'sJUC5ăU"m?tbeoZ=tdw;yCRdB#NUL(=65?bG()o8oG3lNvu^.%*->>Ff;0NE*ChzMoeP.O[ăU"jZm.Z$WsO&re>Y5.-a&47/ash.tO\V;rYeoN=gx)OB-ZL)W<l*hO2/HG9Q9eDeKăU"iHnSODxt7&dWAKiDEkS9u(pePZYSb'TQ:#BTsdZ7Q\'MEo]ZgOj4Yl-o4.s7/VOăU"4)n<xdhiJWdGR\b=J,vIdia2'+\<la$El)nqBotJd58U'pL[N/P<5<v5Z],,-I$ăU"^cWsHGd?aZcx3]znP]H?widZsdnux4NQd7Z_w7caq4%up()%9%%%#-%$7'kGN&5ăU"$WS<#%%X*%%%1%%%%yw.zj%n(j&Sg7fxfa8<xTq)anr:<x0O,F,]V-0eISL/(S6ăU"#b$qCuaw/F)f.z&++Y?OI&\s?&iW.NL7bXKmAe.I3Z0/g+[jGpV[bbbva[VHhr6ăU"H6H?oOW]>50*B8KIkXMj+)&kLd*,$Th[AC:\8^;TsNa=GXv%0.Xi]K*<#PI)96#ăU"don^r7QK,TpBAhJI,?bT3qI4rU$39+po)&oTP2MICQWan<?Y2Vj8QQ(VM^5<l/BăU"M+V3xhaR,;X$^,^TB'1PCAI6$CXpb6pmSoe&bIIYg6i]5lbbO58Y9t(1/[)T,X)ăU"n3sR'^p;Lh)=%elVR3cmQxxhR9^qaDUKN5uTpxgNVM^)<b%(dH>xdaZOJJVa4h#ăU"froVp]QR5d=]nhs\__Ar&s.MwL/0fcK4Y7vrb#r).>>*#^a2nqxOPn&s?nthDEAăU"Zdw7FQ-^nDZ.jk4pqX1H6rf/vdK^u.K&D/S7^\\WbtNoNa^=,4ZCL,BX3Mpnb_,ăU"_xlFWYQ>0cDb-q,_^>e'PsoyEjOal7]WlulW;S#xL(eio+jkJJ\]W]kYaHb:ul/ăU"6.KL#.a;br0LQ#.)<Lt#T+'[rGSi_cB:\w%9Y+<vS^?851]K8=D5qS[GHm0Agj#ăU"Y3.*XQA;6X[p;*[7VT]IInrW*>+u=;\6vfHx(;hT;d?vT/<QF,cQI.,;XL38BNiăU"\:?[t<=;*'0o9%'2<^[QF7%-iXVzJrT71_\WS:Z>)%m'$GX094tLF\<'ef1#UbdăU"x#Af.bxNY-aqx#pnYF9ba6Z&5)W6\;?m.\)S-:M4_Um\2p*ii6H;#qzu?t6KRO,ăU"1t=2$;)IG?be.6DSI'dy\Oze4SI'fz4Zb<=/<n2L<n8+6$p1aT8O?>C[]pR?1W1ăU"Na]b4\Z(G59x^s,n#H=/Kb3JSClYf<,xhXnrH8(?3.q#eM2?l;T1_6G^)XKv;+)ăU"BsU2b7e^dD'rP:_AMVsq%\?gt85iRT<_WCuObv*_0Q.0&l$8*QMdWc#d'Jpl5%0ăU"l5C*oVn'jAqFw[t6>bwi05HT-H/P9K$*7t.<l\?/+JX,$da(qDV(:vm%$1<D6m$ăU"N\t,chJ))qOr9c5]D)A/:m:bljb-&#=Wm=8HJa[lQn5B24(m0n,sXhhC=OA#<QEăU"N=7#;f(7g_DkaMubV'<I^5aMc)Y*'--BU1$2RM^y')%skp6Hi=o.E\'#g$%E5%=ăU"t0s$n.<#?2n>=]4asT%s75'SX-gWePmGKeDE2,9X&tZmJ\QXPEqMIfq#xc\TV>1ăU"uAH[BTp?I^O_5VlT*6H9:SxN1V4EXo/-8.PfME8U1#>3a<Kxr23JZ5^T+U>^n6oăU"3.\Xz+mO:Wk^J00[+*oRj\o]enLKBnP896[e6+D&v)](-i_6lCZ#E)-0'VT8G4năU"YgeACXKS)dgK.&D&Z2t\h'F]f)m)?Q4nguFo0JH]%e1-Z>.L=Y]jopU^LGTqv5VăU"e8UViV.T'm'**sW)\boGpmMgjDsI?A8CY^Ole#JT=tb?>maCC$&89.s,K3%\g8VăU"AJn%t\'km;Li_+mTqO?'+?^%)'m;aI0p0wB7.j)Y$pLmLkAetmA25qQO$B=%y&NăU"fv'+\XOlCtP/0%fZ>h&=G36*0'o9Yeo?Y86$KT<=o.POaTxtaZf$H/5L]yXhh).ăU"oH^fK7EsP+1&Zj3Y&mroesZ)%0Hf<SG.?KrNG6Re7MT&,zUTo4/%YJ$98^mXUc%ăU"'[%Jz^lIr0pFL)g50JO(AjFo.b9DemPG6\JRS%8SzH%/AiRNCkgV^aXAX6VyJ\KăU".7H:emIMYnQeAmJc7#bfKK/GT3#;$LmHY5p&1;+Ysif1k5+C/L?uVZ61w=iTK5)ăU"$6Y[TwOI+Q-dn6^EMccqBr&rp'.)TmO&/V-$?Q;taa\_co#=%5;wHQ'p,T2vh)băU"sVaK_Q10w[E%KmJMrs-F5r95CJ&sRVagWJYU%(7Qa+G7:,A;#1LZ/)0Y1h0ru#EăU"UlMZi9^KK*/hhOg;/b17'=8>7fe3g#XQe_egrd14VfGij:&8f;jbsq^,$2<=.XfăU"cv#.k/P_OV.$%3'WXW<rj*J.rCU6+IOq1LrMRDYXTFQhLla3u1P'PKoy\4FS&xtăU"4D]0nPtl-sJpHvQD+I.#1ERAf;O-ag0olB:$3fk0O(m0yADm:4DAvJCH(fwKG$găU"MB(k4S4R5m3r'E>z%^N^)WF:m?Qhu+[n<q\W.L1;bJjg\zmdttNoI'$C<oGUk_0ăU"QU:mEqOB<RK=B0nk3$*m\t2Zh,cmgjf*YQrRB9q3_Tl/[1:WoXC5I4U4s,]HNvcăU"%8FBdpM;Vx>f#C.&V#v)=/B5TYf>='MBn77S.nblNK6**H+'3(^,LEnGjFn[7>^ăU"Q&i%athL-l;jt<56=WRjHPLLg/N$D[8aD-ei'Q9&]cA1C23t7)%j*5SZP\cc?XmăU"d/YvN,;$Ztl92mI,SrN\VQ.gynfQowfGg=tsIG:5CutN_&,_p$r?T7R[q-+8SvVăU"pko$53gqXzKkC#I+?T/([D>whDiLPvSk35WOoBI/93[aAR?K7B%wMImTx%e>FAXăU"S'#0G<#eyt1en%mr4N.6<43B9:mq%a%fB#U)zpz2uv'/oi^#mFs)J_fD;4+IJC6ăU"XKoD,bK(cs\52j&mTK273A->&S=>hERE,P<j/03_1HLA(gI<xVzY59;ri7j_v,găU"wtO?g4Hy;E&K%t,825CGuya4(Bw$3)bqy%1kv?'1hHU&7Eef4])O/'tA=#?,=LOăU"q>/tBCA2ms+D,jks+I8=hcUtZ8z,8*?A.Z6Z8=9FGUH.p+gqNROt8iPg^;SCK\(ăU"IH-wX>d;rR[plgPs8Fnqo0EO%e_&GF0*&)ehOO?ch]B]K2tgha$.4]s9cW2<opUăU"%65+CJ,$p_5KV<hZG['Cy6M/mp0X_&36h+#Ppvg%VS;x.,z\+B[?/44#[c1D#;FăU"Z;F]M:*-hWBN63U>K0(eUZNQ)19&d3IR2X<$q:/Oj8[YoM1t22?<Q-ao[Txm-WCăU"Heo]X*?>t3EU3_ycr9M0mGyo+ij65(Em3m5-l=CxdJ%R'z^X,jkbuMk,r+Xjwv:ăU"bzN;qcQPi.$[[-3DKJ0yls+EmR>[Gvo]mf3ikQa'me&ao1;I.M'cEaE\c910/;JăU"62Ti)l[lf&gS<'K7Pr2JTwciw-.]svet33qy=7%z4CUqX<q&d?BzN#/&ygw5F?MăU"_yYbYBhS]5s4ziqBcPG>oO\X_Efk3K]HoD$NPyG4z(Sv[K7]3g-p?/T07Ax/AoAăU"yV\:-pjFxabU<1]CeAOQPY,+GJdJ6VrS8gV,81G]pO(Hsz+n]yX**%rz%/>K/VaăU"d=R4UBXDK8Pa&F%)+(LPLJ:OCrU9:Omk1R9=Pz3_s#1MXAO,*&H9b;TWbr:Z5ECăU"_aQ^5.$NA/#%J[#*/1+*\(p6AVH8<_HC?>#o6Ikf-No;2BVAV*7K$BU(r/IN-?(ăU"=lNULA_gAz92A?eE0G1Vh\??70bD.*t(GnZ>%AO6YBHAqRsWMtg6uUIwW&=BD:8ăU"tMPg['fL=,v/Q(ALLEx(Zb(sp_Rf&T#EBh_Kir^KlV_$.;>C64$$cM_-*LH0ZzeăU".#Id:cf2<gr0e_.v0EAiIHY6%EqJ:s.=X*GybL*Va&F#*,LKtRr[Kp#Kc.%2j%0ăU"?ETXd=i^V;ypV<6ZDXDzMbg4[>DBq&QLT^=YY)+E[K_Hj=%mbLbEiWo%h1MYACKăU">9D\'mWPQWicnbw6m5BVc.A<Cu(3Og97SXYVCX_O6E7)hJt%dDCM71ajqh?ZQ)VăU"i.lNBc>HjctDulO2S):KI8,Y&oEEW2F^&h4l>EE#;Q1]Dj*DKD%YXua7U]efb.VăU"U6A9/3c-w#MShq]KdTT]sN1URY0+>uAjtpV>^Nk4BTFwdDi,f['U4?W/5xkR9nxăU"T5c5RF%o5?2;(I4Ylfth+g#e$.Cn93n1Py+Msxd;c9Fm(X0>_NXc(<ho$?8AaOgăU"]L-/Ql7qVq]OIZ:+GoV]p.t#b</X<[=6ees2=,he0xc\D.pU9&p'J*#4RCum44tăU"Gg_ZCYYRI8>sO^DuNIc%rkd.LPgGD_61*F4BbEU-<TbX-3%V2=4kn[)10Bn+JN'ăU"NpF56im#bn]%nJra(EvPZ7Ls>u4&oK>h:1ossg3(g)<*9?VaDQo>,CG=L:Pe?I/ăU"(Jk+dT7d1i&RLOX&P+Qu6bgbDD_Q1LoF4>D'zO5-ccI'Fa?y(J<cIlAZ0WY\7MuăU"p,$Af2Y*qE$+cNpY/w>#t9*S,p<W_Ov<tlb?>/)UbK9mu&UU8uTU9qiZF9KUJ<dăU"$L5=gmYlmQD$X$l(g(;R3V<iQ/96<J/I>5mfo4bS,H)Q2;<SWfbAUKVRv_(DZ.GăU"jg6],E:RI?Ce$Q<KMIwJK2*[ycbGe_Mi,de7J)pL7WVI>G;j)95#3LS.+2,]8z5ăU">Q>q*8GAEgCo</7e(R9fj3P;towR*Gk8&RaQbA6N4Bp]Qc&eg)=Ju>u:b'<c6[7ăU"u>R'+6bHq9g/DG#R/IR%igM:e/xPUZT7$59TW+4g,3(C3j*0)./?OK9P9I,;jU+ăU"C2<7-JRDn))2r$N+=\$v0t:L<N\H68(?s<jJ1Qk/:pC2#g^Hx\e1Bx2<cLfRd;1ăU"9Z\3M_XZ1=,($HtosrZW]0E<v/<XIf8m88L)7&'_7g*/OAos*;imN>pu5uel6?eăU"#)wF\5DOn%O3r\3>St$i.dz)P%-oo1gs]uZC+n_3IInltRA:Z-2=>'s4^Ekr,-RăU"N?NZ2_KlwuHxKae=Lb9c=AFhe.sAKlT\$[IUVfW?\&;piP^:A)d4($b#MQ?u*zHăU"/#G)-Wj<0UAv]1>C7X_2'Fqk-2<p9N'a/]ow<Ar24cqf$=&/'6SMBShWoWi[dRlăU"<$6fjrffPkr=QktDbv=M0FEG<:0/h)2i\ER0PEY37gIubsbts0[ewz9:dO.m?4QăU"rk:(]WFm-6hSSe.cxdjV4rLEv[A[2KoUk).RPQPoDZ%<uM1[kx%O$;u]+;-Fw\9ăU"HKsoiFYk%4]WQ241vI<RXb2B.,uZBf[TL4^&5OwN#jx4.OS7ETcq-ci5e-KqpT1ăU"m=FpjlR>W:2t6.EX%\;peQ1i\u;I=7=s\'gp/FI2-aco=3o&\x^2-\irHaXbkd%ăU"i<SfM-tb;;H?2aDjh*fjx+nNAe3:?18i=,i]>s6r/.:&Mm(gH8->5y,AIj#pVGGăU"B>>>J42*dRh0cKV[KD^Q_0%$4xq_<8h%r'o[%d_(bY?G>>-^:4nfnIC28wyX:]=ăU"/)A_jqmWk_0d]$Cd;,^-T:9.xMp\<D\bW2h1,uBN%:yuJouTMXX'yL.=>,M[IlhăU"Lj)\%E\wwaAGE]\m854Gu*kvHi#IEPpQ)a4HR<seR>4Ct[HQ;N[d>>knv_E6q-PăU"%GLvhvus52)bpSrpn#ckK]6Vw7ODb6ql15,<T%X9)Y(3<:dAOw<N>.&dBc2Jaq4ăU"yxi4/7E-D?'nZ&R#;B7inNypesv&Kc1Rq<QakNy4tQRfm%$>k71z>lIt&BTa7G\ăU"e<Z&\=O/wx]]szCjV:M;AF8/Yf=ZuZkZ4IquHrBzUs.pH.EV4lG\DKwQI>EJ?<;ăU"A,eA[B'Q.<WaX1?H]a^'[E>6LIaeZdq<VX4fO#KVmK.XU7S[uuYYf?p#na*=0a?ăU"[h<j7/X8ATqSm(11FW2v%u&rNC,T,4Xxc%-d)M;/JY*qac=n+JjMAz,U3y/R-rdăU"(J+ptC3*of*RV,I*PqD)swg#8l]ds#i41tSYg\Frw#F/nNh9n,Oimr5(^.xNXJnăU"J%OkFMJup_r$j7/U/V2ciN2i'3,z&s.DOI81Me5lFRiu&_hwMJo#B)2zj6WJ<:4ăU")#uC^S-JJ$ZAeqkoF\ckE?gtHLuNZ(I]eQAsr?b$+2\E91Zo$0jh2-p*DuGYesaăU"Xl5tC2lgD*dOhkru5)]sW:CN4[v5E%Vu>jSRiM)[-km\0ZF#+Q.JzO=HUP$5B_găU"lm%lvG;Q(r1itEG6?_$=c&MxaKZh&,BK_UvAwUz^9NeNL[W*OmfS:9/sq9JntgKăU"4bcG7FH#kSrlrK1O&6.>;#ZD=O%+Q]/u9]>?_:UbxOP],-Af?Tq6uAO#/*xKxLiăU"x,0$,/x2bVRU_x,$(iHDf;*>4T+JY&J-PEB[Yy>'3vzPEC-lHA%F6Z/<^mOEr5IăU"N#nrhfTd6hjZfZdkRz^$RVGu95$m$hmAx>FXi<hFR?7wOd)jLJLUl\oJ\O]^CF_ăU"duFt=8#oin^32>t%_q[JGX2bEnt):Incx?c)IruOKVRp7]iVB)9pIdNS1o_MM*-ăEND SUBăSUB V2ăU"Fvq9fX4k.<Wr55y]fA3e#uUG.Q:H.vQH,vLHUQhR?i(vV19T'm:nvT8C)b9]q>TăU"Uo9;is\Ge;#>9ikefIXL#]^#B\x:FOk&+<&QE*TS*Ws^Aj2j<9u2dfG(UoE[/Q\ăU"h)OF],v4*7&67=hrNRR%GzfjAme2\\qTUTF511.0F\KL&7lHLj(kp+B[n3DYdqvăU"&N+NAC=)hZBkZx?h+(tbT*B-6QmTp^7B_*D282is03aLw]FB'mafWg?CY-YoQpMăU"5pq\IfK5^'P)oEJ8g;bl76Gpcahm&pr'dck,)>=Nu9TC6g)M1sW5[W40#.,hYc^ăU"adN3P6&ia\FP3X4>T35-cWenKIzRz&+c*%aQ5GxTn&d*i0CdCW-6ec:pS-q<[8XăU"$2(X;,-[LI22l$\Abo7:JhY7S]]0'ONbp'wn<aM^^2DpKhiKuE>rVcj]Mb1Kef1ăU"WpXV]LFHLSCC,cYJZ,-6^vTd)Y0QN9]-+a_N02pct<d%Djl(H\wtaAqbVD't/[iăU"n+c8ir,niudqqu.Sg=M]9,Cu[\a3iarSrK2IWO9(rnfZF=fHM3&iob9v2yzeRp?ăU"mmOtX,u*GW%pZ]'%HpCB,f,[O0[FJ5xl/TBxSN:JLN*F4kxnZU&O9je*q9i,pFxăU"^bN?.>E*5Jp$ncAbuS>6KulUqN/s5m$xKC*1o9>rZWklz3Ho'jrfl:T)ZWzw/JTăU"xz-57+Phpj8cia'p=n,jf1%qR$v0u9trTMcAa8[c\Rh.FIil1,cLbD,<>8nXL8AăU"DS,:s[?jo:DY17MnTU^#JdC#r*'K9iFrM.rincal+k5p3_yB&H?Nu&Zfec<(jphăU"b_If&6QH']4*nBz]Ih36nl:5K?sG[9TFMk*gT#GMIL/^).Z?[?:=+>0(QCv)S([ăU"-UuIn)y<;EW5y$0*drb[wb;3ST=XM&drPq0tusBFBQ=L::Uo<Un,<L:o6b68&ităU",sK)%dBs#%boS-'A:[gNL]l(2>AQCj:Q&d6u:WgcpoXRp^zTL,_O6q&IF*cd-*lăU"7CoM5)bj?,ocBI\?/mfk_0<Xc]0tCLA>Ece7(Vp$(f[_P)k8l(\BT;LDP]5y1]KăU"39Wpq(jY7CApFpp#zV?$\=(M#^_;NEhE#9K63[Y$&=gBbTNzS)pDbHkzVN.n/d/ăU"v>aRviMAy1LYpjik(e.osVD_Hjcu(6]\003-5MgF.DD_TkPqq#9WhAW-4idhfowăU"^jv7D<]vP=cTM<l4)g=hYRf^CwVrHO]0Wmzwt6,i0ajbIJO-Y]Ihc_GJ+*S\N<CăU"JvfI'fw)nnTU)[f8t1IJPHF[0jHqVH8nZMnPMrJMU.qw&9G\wdZRq8_P;]u*[o\ăU"u:Fv.vxgvlZkk_K_$AiH:%edxV7$bBs7N>xM((d>M<eBE2i%<Je:2sND;-m8up%ăU"()9%%%%-%:P6kGZ1e1''N.%%%KC%%%-%%%&%jxf%SithW&(TABT]7L;eym43v5JăU"pq%X+eUrkn;gn]KRW=]CA+aBHm&QKKE]9*eR<C>f4EERd;cJYjI3>Xl>4sFclfeăU"cLs_Q=%5mrNU*Jgog?%?>J*8ZYE1[6Vv*;U$OW,1=UN5/p=W+#ffoFY=Y0,Q?eiăU"&vrD2=:*vD7r2A)AgUyx[G\5m%TENi,SS?7;xoI9CCgn0DEFcQm^?g-SD6cT7[YăU"Lb<1aSeIki$_0A9YO)\_s_E.SCW2qoZaB$0EOnK_fj*^v>qD_SS(e]LJ6:sJ=^'ăU"Qdb'\w#6G7Rz#fiJJ5F.O=,]ogk;iNeq:li+]#W/8P9N=-uJ_g*r^)AzN*2^hemăU"G]^(8pLEsp7u'L7/&NB(+CY&Wq:[?CX0j*gk$p2Y<FiEG1Fo%m5^^vS;]S5xa7săU"#UxQ]ovYghq3/9cs(;3<.>Ki0n>'_0E$3]va$'<X'?LP/bv?VAAk*)rYqU&Uw>?ăU"tJ+xsY<4%D;#Zu*t1ptd0k=/PCB0%a5Q(X,b*>8;Tq+ko+7NWV+rSR*2<R5n0N-ăU",-X0\['fPl\,6o=a_>&OEAq;4==Dk?;2*SrgNdOq(%P_Bg1'+T*5GgC,yr?rR^^ăU"N_a$Sgw#7RF0Ix1QG+R%9E'c688DpE9dt4H%LCmcnt<#/?x5>CxHOTLvaByKYw'ăU"TN%)Kj&tlD.J%s(Ls$tqM]ou5:DgV5A^>LhJ?T(L.T7jq#TrH9,Um6e-15+Cz_OăU"5U4?625cux#).qR/Ft4ow]OQ0[o$uxvLFTtw/IMVan77[XC78m?Nm]7lvuDJ6O,ăU"l<94jD8A*tOMcla2kS[X<<;[[in%-Da)g:B1x;-y3EhaG0,nBi1V>&[A<dZ.BofăU"9T\^q$^_*8-8DqhyZSDT(ZjQ-IO-kJ5cA[FPtD+cZUL>o4nIBqTot^?k+?'J+2&ăU"$=#KAe(+:ZIdPPVyYvU]G\gC=URaz5hG)9(9lXT$OFy=gw,b%PCq(6Jl=ok1<BzăU"d%zWSG#x(av).Xb4;/,qFSP?YukqhPUmurNUm+-5S2y9#UI=Yp<c]ce'qUw[lnmăU"=[nm&4ci2wPAgdHjX<e);qF?]]sbiYa(o&GARVROUZ%R?.^k93*g_G:q,\0UYXwăU"FGgNS5Z^Ii5QtD08)KlF>t^cdGzT5Eh%Z%G/zC]:[jRZSp*5c_W[D,_ke<t+-^.ăU"HI;q\NQFND)W,'9\Kh1>9r&lKG'NZ37W,jj=5*eXALG(e_o0'b.S_hi-'2k97v]ăU"Pd8H/rC+KmstJx4;-Ph/b]3OCL9M:1<6uE,B;].62nleP7VN/_e]:?)p,6f./H2ăU"xm;;?K7p=^]D8:M>NYaA)s]4d<K&kzI,M&Bn>$)tgZ2q1+X]#duDa2v:/[X#fB;ăU"=$GiZ)ST-rMu=WAgbk\bj:B>tjn_58Cr,d87tN0eN#iNNLqw*A,(9I9CsY\0\];ăU"X=b6a$$%c%ER1=y#WKm45l9M%?4v=c&8^zK3^W#ZKIIAGKO4%6Pedh-I2B>n4mdăU"1U\->nq_I4KvZqRB?qb9)b<s2'Sb&]z0Xk$h)tXqVU\pF^+2Kn$ao#B''OK'=INăU">gh2]qLA:7F1Z%[+5exU*CVNux0sHr(xvr4)vbWYrT/59((,t:uQvJJodnmDm;EăU"Erdm5pJI5SGOgP=>o8Sp2Q(#8mf8=lcI.An.T?N6I#OxK3ecOhJ>d.uwCI'WY:IăU"fc<Ce9W]k]:,B9dV5LL]8E,6(>(WV#+iOAV,F15'A.D)mdL]?:=(G97AELKOuJ/ăU"(Ge4]c'USh*^7#t4XEM>4Hqj>k0)-F&9ZoS(sk.o#9I/F2S0$IFy69<cDlp%U[măU"Y>,5n?k_25Y5)PL-3dfz,*ma<uG<=7DIU?N6lMo1h)U=HLwTK?x+P:5xD*'WM]+ăU"vEQ[Mu-tDK89xcG5e$,*j6xnV*$Sls>6#f0C4sl5G4p1oaw+ola$Y\<&Y1vJ=sCăU"zPv3lK5HCwUJe,=OQj;U5+oNQG0[H=rk%&Uqg?Az'e#L[nW\l_mWVB5o(E?l7omăU"+^v%7C>uc$D2N8a<?$ImT^Lnxye4g9U?%2o)[.cARH^:?FAv^ocpmlP$PI$qkO<ăU"Dqf%Lj^.N&5tXzXAcH6Ug\qkTF%#K,[G^K(['mN4+tFOgYH/wc#q^6*(o,YlZhcăU"IlI$^f+85U0x5SS1#bF?S0NGe>9aq=\6,x)Y:;qOTlU_j1jZ]TUzpM4g6b(]SDYăU"W77qqK)o.A*s=Ug42nPn4kgbQMwzn-Z>u%qAciH6G:EpBCdWrGa0YehV0ui:)JcăU"[F>gMtJ0<^;ZopqT0>Cf=5'd.d*XPD:E6&7\N(W-\8YlMjYrU_oQJEY1J?UPdBoăU">7jXoFca?p-23]VnV(b.TeNgUwM'dM::_90#8l9B2ls;N\9tKETP+jfiQ'648leăU"\7J\etrs3xsd*XYu1ibr4kmn0&MzU#a>)5(Ps)QTg=4p2C_z4N%ckzhuDFgCY;tăU"TIWkoP.ZfBLC,p#ixtN7q\l>7E&Yc=*DYxu+$D?1[EL>na3F;2wrbhv#h1Pmhx<ăU"^W,V&an'_gO:tRHRr]D?C5WsgW(WfrSg*Y]<=/J(QkW,[(T/WMd'NH1Ju7k;gWDăU"S$,E[p-h=k'%SXa#s6D:tP=IDM;(fD4dZ3qPk8Xu=leadT>S:>VlE%o4O]o=c:săU"X4+f(dqaP2u[Agw9;Dof=Xscpm\nabMBZ=*.sJ4evh*<B;2u(,9*gEGCoDXnVN-ăU"#51S/rp7Q#VzaZj\M^h32lE?)M&[BFMFUt9(b.^;Zf2d_8%K$R-kQBKTvfSIk&tăU"NeggSmt3=:^uULKe)iL8znpSK-]N6jkt.A8u:9mv?M^GCwVTjGp'-*2T?M4HZ?IăU"p(tjmQY#T\NTJx45-DRlF%MN8IL]Vfuv3r.wky;an4)*)y^cP4%X*8>t%E[rN-(ăU"ptrxb-QHUy&MC4(bUu%XJqkF3sFwR*jU]q*:[.hGL)8*6#fp<MTce-,:n0D'&/năU"NkVnt2Wx:w93U1PgpUaAo$f7>6iD)x8<s=lioU7]-o,?v:Ts)Jiofh^0FQbN,,<ăU"tR<vwQ::PDb/m*9ZxrF/P?Q8.(umL*DV[QO8?RjO>BnDs+M^\pWwUZ-:NUX>(\'ăU"NxaJh:B1WyEY8k<OZMF$M)gRi(nF6N7t%[1Vq21%-D,-*mn3u_5F;;Y35$5L$eQăU":^;Ks2:wZfZv?1\NY1oR4UelToi*>u=.=lgg'5c'xup(%)9%%%%-%$G7kGrL$4căU"l['%%A%/%%,#%%%'%rxSnRshF%<V>SUC5N+XcxZy.#/m*D,LT(h2Ks,YI-:p*?tăU"a9f[b7#RnU[tdDFEo&%coLfetkY]s]pt1ZD>/&+dWzOVIF6w1;S<]6u+;lEn%OmăU"qERi#kX.GL*cm9/R*TZ1F+_&PmKFZ*S1O,$5-nG<0*rcq]&iXcHNacoOON2J#P:ăU"$Mc4TAq_?D#/AVfdS04yF9).q_P&&/C<HS)I0AUp&rR,AFEFh'9qU([JoFo2egNăU"Icz;VYx-Tk,ZqT=;m$Mg-%],%JpE->Vw.d2wcY**t,muD]gf/o;6=moqoP[WTXMăU"7[.O9(c)s3]H.N#xg#\Un,yIQ9,t.u/_TPl>)X/SZu0R'd#6Sgk;d*pdqj,au'căU"4_:Ctr&P2^JP(Me-)ns^I[Gi0UlF*jy5Hj^H/E^1Rf,j,nIvejr=D0RJXAgO/Z_ăU"I)m8*EY.+*ayxn4cftkGh?RCao(=_mR7==ho:rQ?h6'VJ0D\/i==%Z[/iS&9<9TăU":NeyByt9Zsrrg]$FPQYVMG36$;Gi>C^ugCKmn%caNi5:q7]F-/A7kr1ggWs<%P*ăU"aCl49eQ<0WJV&tE&5yrWtB't?/]7w%wbUVCsw54rPrY2k6M=H%f#%NP9Fuw(doyăU"peu]Z&iUSSet^1+l[>o:m0YND0<jf(:oT^OY>+Sozi9c1R\Blv&aYK1;H^>OOQCăU"nm6A^tEbI05W2Umt;BSgLAWJ9i4g(G?xOhaRcv_eyv8B)wp1Q/tk'SsV2_a8qCmăU"$u-R35^k'S5+e=fN6WzJR>YxRe6sxYlR*Lv*+&&<rir^O%RH2pTkeH\C&n1YT*răU"=<5t(1vjNKIobn0y'Tf?cw7LMH44$He4ab]Bv,Cp<u%p()9%%%%-d%$7k.GdK*'ăU"vH/%(%z;%%%,%%(%'rx%Sugq3&gNua9$>#cX6$o%%.EE<JW]j19DyL,\]l8;bIAăU".Qa:lF9#fT%GmUC-sagaV50=u;4(/kL[o7r.8EkMKM\X)**F[8K%ol)P_8<$L^dăU"[XF)w8+p/an6YjrLSdul7HVufg>G*]^QaZtelLXdHtJWR,/;Mr)fo.Fi:I'e5m.ăU"5kxbr0[l5xYl6K7(\'P#TgXR;g;*\*Q7C+*n.rK%:[bVsC[F/S89Nu7DqhT7)CzăU"Rz#KGD%]Kg[c>'>I-N0HsWm\Iik=C)'qdgG/CSr8Eq]vITj0,FNhr7ia$H#;G9[ăU"/+(:#7/btJmSN*9Q#ixY^DdbfUJg,n?3.sCI&mqbaXr4^(,fS7>1-,\,BJTg6GOăU"':n3s(t0cfaBmnBa7dQ22C,$Moas0\-8hcd/Fv09eWS'RjD'%m\MM9Kw8ko%LsYăU"IOO::SK.CQlr\<-,kpgff^3,RWRw75^<R.QTq2<woM;8O'Pkhns57giuQO0M>x$ăU"UETuZo;ySc^2TN-Q]^0VQDh9f3UC2\\n(=S4;(*/a?_;ilUtH'd\i,7Po]AFOx(ăU"nESTI<ICQ-gz2i'xtL/T7G,bD4LJXSVkl3SIsjIfC:Oa:OR_U6/[qr\P#t5C^lOăU"*S+;+So<I[k08Z-lsJ?1/JLc)gA[OH0ZIe*HvkK8=2<wCen$s8]e)#MJfw84ABVăU"^-bS'P-B$JZX,3cU.sx&u#wIt0nAS&nq>#r5Kg]5gmdP7I;E'w[RNS,U'6-?OgwăU"WO#:8a;oW;Y=Rf-oQ*ir,K8bK.GXu6)(O1[O'cmZpwofiK4J.NQil3d/&e#0UmNăU"Vq_+\3[BD?4SGYTbVN:m,U4x[lXF(j)<*.X9,^7xKQJcLD]4Xbh4XQUW;G4'K9tăU"<P1SNg\Hcj*mC*w9p3twh:N\\5wOi*S)lu7=cDqp3'=7Q>2MDdK#L8z7'8.=XKfăU"n&%1jM7MBNk?0K3k'5m296FFNnFD;;cQC>?S<*w,qtItEv&&s1$HXd7QnbX+SfuăU"oV.?bHntiqF]/lNb61-&N2tB8ugN4#bg*tcD/t<dw1&f-wso,2-#tN:#&8mNv%SăU"Bvo401CymNR_KUVt-c+p8wo3^+IjdNz?b:ztm=VfM&c;%AbZ5t-Yp*#dw:2f-&oăU"1Z+IhUNh2CdgN(2&CwN^31C)NpZ#b04ob8S]vSN&dEby\tt:76kJt5oueDbvpKNăU"poueebdFFp_e2wnc''Rv8pm;/)FW7x\]0[_RYiiYf=PnD3d4Vo\YMaIKas7,#q<ăU"<XP)RUw:nufdYB(T_l-hhr6M?0Q)<DrJ9,IX]$_[r=*I<nq1,Yrva]DrG;r20C&ăU"v/K<r#6agqmm)CbJTF:1'GUJWC7k9F=ZRJ.r4==w#0V%Y,dU_[g:1Y$V<3Sg?5YăU"h2YJTSU1)uUlXTJRM?0*ArlcJ&hJ\XvX3:DqqAXk6aMG][v[2]rJ#H>D=,^jF0>ăU"S^V3ZmShD>%'Rs4-3^McD]$6,((Y#U89lpHg9NYJ+%3HM>m9a1$3#9xGYJZC:DpăU"q>dkVCr[_S;dV?IILF,>O[3OPRRNnL,[[QE+k1)HYm#Iqs$^0?H=P10*Por]O29ăU"jW5no'=*;ljf$JO;*;&+srltY+GbJ[g<PWSyBW_dDPE)BDYC=V&TEGt]7uvb'*TăU"\QInvCl]IJ[bl5hPp2?npV:b$2m^$lA]ifzWNf:)o1cbx(Om6xu9GUc0&h/GZ)păU"u+=OjkbcL>x*9)ylv_\hOhcIpZ43+y3q6Gs_;wkw2[CMaxFv4^.-rHVN%dIPx6$ăU"AIkr,/4yPqfff98Si_Gw9RW..Mxb9y&fvjWpzXM12i959DdxGsYuMMr)[)ExVnMăU"Bxcr,yM#qkRe&xdHz2puu)qoeCMfdm(NBMJkd'DyDwIcZDg[v:WNPQMOiWc5M2+ăU"Wn=wPvMcl.vP4OL4xZ9J9>r%QBMV.P?cui0KXyoku?_sS+rV//Fl\qI2Fd*2wqUăU">M4ex<Lmdyxrv[+C/c(xoIZ:/c(hu1m$&&x.M[9axVCs;9)ycvtuDMFx?_eEF$<ăU"JyMsTQldL4&Cshj=e3\8]%(Z=w)f__FeXRT7>fQ+J-6o)y'NW<tV3_)f&7<C%dYăU"-R=KPi=5C.QaeIZBNy4WWW5%JL-K)bZN+Gcl7S;*AjE9HJ7k&ZQGGy]0,uT-D&%ăU"0YRu.l:&;K8vW8OazCr]*5cDc1_;\51o)B'AkSB_YD-?.;#r8w&0TQiAz)>wHbJăU"(IB:alA:cLUO<K7>cT\Wn:ByOHt-m4&hGk2V$no+4anrO6J7TJNXlL-rlx.iLNrăU"Nnt.F4&zx_hF76FASF-oV#I$ia.bGXSff?Sx(n77X[$-t6$:+5]^N5TY5RpP9>năU"dF?]+u6PJ9YyAPJ/e;o<_\D'i]aDpvW(#;0GrA'E'&</uoO/\AEq'\_,CA8XORwăU"2d:Wx46P]0$]qG/4DM_45a</RJ3/38nq*aLJOe;#tm(dHj-rvE=h('8#7s/;PtZăU"X'HI(Hz&]/T1Y4?xrm'l<IR>R%(o\^+sk^D&o)SDPkku_mD,TYgFYXET<HK%=XcăU"FdT\8.5$)9K_J-F*$mI);-)c*%)L?JqDqag6DY*\HXk;;1si&UWdV.4qYHpSY#răU",6JSKj#h==TE;BIbh$,xE'=UFvbL-v<b9niP8WCqk;8Ut.N;0$?dJ/Rk/7TJG9EăU"lmP7kGN_=MAoi,y>H4/_mDKCih54:rmJYb.Bw_jkmkI0>.$Jk6?b,aKtwjDcuU&ăU"0G5b20&r3[T+yWt9L?AurNogUiaE76;;&SV4B2oHh$nW4,*LLZL?guCdzjh5UGDăU"0HsgOgO?eB8-+uH6B+Ndtp;3MfCEY[yZPb4Tc<MJ.>Gv,K*Uw8V8QVP;w$mz2bEăU"wNhFCn1SkXUA+72id>7WA\][k&<mfS,YfXsc;OcsNOm-#L'C9eWYulVMteU;&W+ăU"?4tG*\dmM&tBt?q><-(,L8&s0I>u*ph^rr83PQmb?a\.iO4qXr01uDsV)j^K^__ăU"CcU#/7r32/:BadPc\wTD8VmNGI:0k<l5,Jv&;8k\wrrAYm?l?>slGZZ0M[<+JVKăU"aR&<4DM(M[d;]SJ%7vm#\,E/[0aWWCm6*Va>FZ;']OE/s]JK]6-Le9k:\P[(Wd5ăU"cBFqV&9[dM,:2]Pl%%$0[3ToCQ<)V?N#<eM),f:;QN_QL4Ea*_+Tj+o2)j<:U9:ăU"sP62.[&EB9e;Q,(30q)5Rg]zJOzPhN:o^2m&UAx$LzsFfQ#?v+;Q*Uua<QXaex-ăU"mM8V?DK'xJDAXxX=S?-\:FEw&+NhT:7)FK-+(XM1s2&.B/VFE:y,Sx,u%p&'9%%ăU"9%%%%-%Z,7kGU4L^%k#(%%Z%+%%/%%%%%%%%%&%%E%%%%%%%%%wjf%irjS%VxyuăU"%p&'9%%9%%%%-%PG6kGI8[][<#*%%T%6%%,%%%%%%%%%&%%E%%(%=(%%%ylf%SiăU"th%up&'%9%9%%%%-%:$7kGQoPl<%H&%%%b*%%%,%%%%%%%%%&%E%.%%y-%%%yl%ăU"fSns%hup&%'9%9%%%%-d%$7k.Gojc(fx&%%%N'%%%,%%%%%%%%%%%E[%%%k%.%%ăU"y%lfSu%gqup%&'9%%9%%%#-%P60kG'8&thA-7%%:Q%%%/%%%%%%%%%&%%E%%%'9ăU"0%%%ylff%xrSf%xrup%&'9%%9%%%#-%$7'kGN&5$WS<#%%X*%%%1%%%%%%%%%&%ăU"%E%%%%)9%%%ywzjA%nj&%Sgfx%up&'%9%9%%%%-%:P6kGZ1e1''N.%%%KC%%%-%ăU"%%%%%%%%&%E%7%%+P.%%%j%xfSi%thup%&'9%%9%%%#-%$70kGr$24cl'7%%A/%ăU"%%,%%%%%%%%%&%%E%%%'&Z%%&'rxS%nshu%p&'9%%9%%%%-%$,7kGd8K*vH#/%%ăU"z%;%%,%%%%%%%%%%%%E%%(%>]%(%'rx%Sugq%up*+%%%%%%.%.%'b&%%'0g%%%%ăU"%ăEND SUBăV2ăCLOSE:IF S=39AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDavey W. Taylor                BITMAP LIBRARY                 audio.squad@mailbox.swipnet.se 07-23-97 (15:17)       QB, QBasic, PDS        1136 74701    BITMAP.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.3ăSUB V1:OPEN "O",1,"BITMAP.ZIP",4^6:Z&=54823:?STRING$(50,177);ăU"%up()%9%%%m-%i3]pG?C:xeV5%%%Rm%%%0%%%%gr%uRqn%gSgfjxN*VYAT1a]7tăU"zWPp\n$5cAXJ<D]f>PvOece'ZY%W+c]k,j&GN1m1TGnHmC+<G:f0ce>c>?7BURfăU"3&_Yk^w;HQM%aaRN%vp6Ja=YU?/bNWxvqBnCI7Y0a4Odb-8Ovd<9LWi7TjG6idDăU"Di3ljtldtNkJa:\N()E9Va<EJ-S[,/S#DUYee]</t.1rvYDQO>]o,)#wTBEm5O1ăU"?[\=q<s.nm0JMj3r.ouwvt[WgiW;c?UM%.g]nqS'=Rm.#'ZQ%n6x2a6B45:n/EEăU"MkIB6[)K(<&C=iC\AV'G#-ipn\P\+L2]5UDM%&YSabifWj2c/1sH1h/Y$Fi\k9WăU"X9+3Vw)d4Q';0Q-rO2gB-=DP0jB=?k;0MMUkX(M1&DVxP<4,hw)#]Y#fA=#R'5BăU"JC/<j4q'uqx<J)jiPa3BhUH3;Oa*bC<5p?I2s5^Y0bF0$Gzm)Je\1W'B0(Jp#SrăU"h8'Zw]F'q(SD5o7CX);MG;/KUp8]E=4mDwkxj%xiDo$OoGV5UfO^B-/..fI2cu+ăU"6pZu8_?asd)Om4CXV0iTF(mtml0r#hm$wlnn?QBg2$F96\4ao?gfY)o#grQ?U'<ăU"T%N,MPaWG2AkbwSujU.]'Qht.;L;4HT:lhnM9%rx_P9'':<P\>[H['D.0'5j-G+ăU"oyG.82UI5WFSYY<tjpV'QJDcO1&BCZYe0/$P*eqRgDT8'HlsI%p5;WX7_Y/E9i9ăU"lSUm#OEwI/KeYL%Y);M]G$Ukb?I8tpf7_U6#OEy1jUs>I>3>;JaK$)WrUnb4jhZăU":U.-89r.jVdft[KwNO:q_(^0yDGhGccZf<Cy'rSZb*pP*FCOCQ0^=J&uQ14>$X:ăU"/ix4%X#LX7Xr4pZM]:lFnoLK]hmjC3zg7B4;/](RH6rp7J-<QanzQjSEhx0R05kăU"nC%^*-f)\jNvc=S2[<Fq&<xhNm+BQxb5t/+Z1BVGFA+m:XyUee1KEN0WouMA^86ăU"demvYV99SR,LUxl.qUkL#?k(1pJXr88pjjLjr%&0vds[-eEG[BKpQWW>3?bt_K]ăU"Xg[S<A[h*P$Z=mu97Z%.xS<'>L<:jXjS+]4\qE(pFZs+:fh0a&wg=>Ify/H/t&ZăU"gDTe&hJI0arE]w/^/Vz'CaO)Oqs7*M+FhXVe+Frl#b8ku.%)KiA0u/BA/d+BxN,ăU"L>kN)$V;&;,.lNC\pP\j1Q<G#Q-5JUpzCU&?Y7trO*lY<H0=f1(76_G7ziI4nHiăU"oV&wr_KF4o(F+f2DUFuz\2>1S3VEB-HFdfjb&k'j,'4)isaY&pS90TLt>Gu6u1/ăU"'PDI0b,;JqN[bA-26I[lJy'P+3piPm8.T$^]^_I<3r>+(FFq.7.nsaL.\s2n35lăU"cr0NhCXtcQT6ek1(i]D>lOi;3G^zuad^dh6sfmIu=R4bomUM7S=[TRs&U0(D*?băU"OKv?CH0,Pw6Z=Q;-Q[nv+8Zz5IIoi_QjR<LJ[7<:&XB/]LOgAZp&;SH;h%GBT>băU"F>'\r(0DNpw+r_gy3=D)rxW)a+<0IneZXWGae1bP^uo9fl_-;Y8U*ISRHuSuy'băU",g7I6^0\sKbjHqGAd\+nEcoajGV]*9ambPC)jMdJ%T1kALTOOTJmXvD?5ETyUf$ăU"Pz<Iw;^9i[n+XgjxlBHwe\n2=W/8J?Sb]gcaPV(1E4994TBDHZuU53-b&T)GB[-ăU"/I6xFJ&e;Y.C#?R)bH408g\drVFT$08g,aI6\/jL7[SeMf15m\/?M**XvI-_t*TăU")Zxf2$TZ-Xmnan8x,dAD9crpQr\F;i/N.eG=1n1+r=x=PX,>gk]PLl_1,6#0g(?ăU"m:4Xt''a[sH6&]rD\-mlQYm$/9QfH-l^ml1(lO1fH;Bpyp?xb&Y\Q6\x7;0,z&yăU"4z36Xfh&2[=,<*lV(cs9Pc3]A4)Fx6U=%=7k/uNxc7L#;dC?;Hbg*pQ0tzG1:zvăU".F]l<R%\RYR38Op%-3pNTbYia6s.*NPUMJ;3JMIrsh(U9*Z:roY(ohY,Skog>w)ăU"w7f*;pwHNo0O47=#M.ZB_]SfqubM.N4RE+utFvbnI0pF$WtY>c\5pOsjI+^%;_IăU"VLQ?O^9qY>L$Z1Y*..,Rr1rN.,EDI0;Q[tW#-Lh<.TDls3D<eUDkx-xNszONG;AăU"d$.rZ87/kmIM.%BljyiR5z]LLK2Pru%42M\B=^aX'42&Wj=$1^cm:kpms](wqhdăU"N2Lf%E?FGi09nC/4bb-w,$E,_k%&q'S&Y-Y%zW9SRB<wcI5FtR6C5;XM4x#&1NtăU"i+#ojDQRij:6j&E'=^'l7V#NNK8?eUStKnQ,06K9u+]CTKWJUdd]/O*P<&Wm(X%ăU"/lg6mU[rfX8eVK_d=s;?0*nJ6AqS;BFIJFEIw\)7MCP_%9v3gCnLPQdf#YP3f9răU"OGfVAS+YrG-(>m5o#1zlkf?V_EhB7Ak>YIm*2(pp7(z8Nk.yy_i^(]XI]kl/3_8ăU"/C?ZkUAE$$g4^QMf-Z;sntMdhipvTo.c\9fQ*iS(u.J]%z#ATc^S14oZ[6js*;?ăU"C^$kWAJn>7.>sh'[MjX[_RNhZV>FIU&lcJd3i5Mi&XCc3KG0Es4qN^u=w64F(c0ăU"&3Vifba8byl5]2c$[NxSbZ+l)L.jJE9[(n/Qh/Zxtm]lK6(C,w)?TfSZFZ/=m,'ăU"PXkeh%\S&o4paWuVnZ#V<vTUsshpo:d8#Ea;RflH7F>xSl9GtE/Z<jlq\[U.UY&ăU"xM8^8FmP+<Z%Ch9#6$*+$E6OHYB<deLh4=[<Nj0*Bu#9g5fIkN<_#eVG+*:q*a1ăU"(nkI(ZLfhI+Td8jfRT0A[ckKKJ:8m'3MeoW2S)b.TQ(im-yPQw#_EQ1(.xrI/N:ăU"X)$5E5#j$u)YBs:1ML06M#54e)AcKV+&)LK=ORx-9KPmIL]61tb9x3tS'F0KS76ăU"2Y[0b'vKKCyYFOh0F:Ya0P&d^R\W8FC^p,dCd/&mu+&$BucCje?'&=Jy(78hL^UăU"ax&1XQN#d4o6A+E4*Uggop95G\L#(G,Y_&^Phw1S&y+]/Ryeyi\/ieG.P/u5E3YăU",5T5zq#w^y\pH*Tgh=pG3ZEKCUIwP/(ch4mJ,1Fr0gH\L+12E-C?*k(:gqaNNaLăU"C0e+uel0G\-ef(T%s>Zn)dSubb^UDK<yo)bd/I2#F6LVl/O'XW[F?-5nr[3Jz(aăU"M,86)Y.4+hX_>AXgrsiOb*Wo'=9m'QIJ.F\CDHSkP3>PQT._uv#o9.Q1Rrj.qVDăU"$,53$tgH05V>E2nOXsXBEwI^ZNvQ)DvCLiV:]J6>C]1mGEWX4)\V9\J;PG+wcu5ăU"II2QUoZ3#FwT_[Bvp26tkLeARpO[\paSl)>2wnsUI4eR(OkusIkPw6R0igv<]pCăU"v-aZC/Q^dZwuQT)g8s3:/.ry3MJn8=kr%bpsn?h*05:=pBP._;W3K%*]'=za.NeăU",\)($aP9eB_b1ti&?#1zKXC,E^p$XrMqI=ubJR?P+?oh8LNK_)uDk*_kWJE$n8IăU"KMS%VX,+$v.kC*f7dJimKXz_f.7G#,OFkoDlpfuDkhdK??,0Xyf/Fu3VQ5dusp-ăU"hYuemm]jqeX.O+18(<RLsO4hULPBTdsY9lp;e%qL>eWcFIw\.YSGacOTGBo*#)4ăU"X$faO#d^^lj1gM1H+U6Pj>=dWc#x;ji+<G;$FTb:'z9,pWG1tL[S.=(tiD:4a$eăU"\(dq=dK'b.*eJvt&Qbno([KdR11RZU:AG0LkA[A\E#P3kEGq&dR'oIj#.T>c,*uăU"E80[$^#H2m2f+B531w^xQGGqf5G#'AATFGLGkTO>H$kBl.0Mj,.DdgK-6K>Eb_#ăU"A]tnS9lpk,,>Y8.*:Kx6%/mRy&X+s6EI7cjIRjm\,RJTYuf:i76LtAu7S\Y-.]FăU"M0^-a#53^.d/kK6:Z,8TVBDMRTkr;mM*54%2xLo?iV^W<r.V^#fQ59>P^U+B^^făU"5\Bn2DsqeXsW%qC.HUkH2AKrd]3b=b2CLrJ:'ea+r05V;6QYM[B=,W,[OrgBg4]ăU"%^>b^hA?Ilw9EpsZZV$8e)VdO1-7mm8EvR/+*p)EaItmPb3Yz;GmjrAjtK4J3BeăU"VwHsfKV#W<k8d-L1BE3>08ZjEU4*(rwP5%*\E73<7sRg(B7S=aeuNJL.[t+;3KSăU"Be=:wJMoXK/d+td*h1:cPxkud)'+9B$gm1FIUIahL>]QgFH:4e.rW4y)750Xf%\ăU">ha4CAf^Rkw%Fp8Lh<XuuRL57;uKIRIm+A?h3+3nMX,f71Nazp<2$(1L/Q;hcHWăU"h>Zsbq5tu-4I,:?3-=R9:o#yia]a&]F_t*0ONl-RKW'RK-I(p0M35p;F&;2/pJ2ăU"4'5bbV1.Dahd:p3[/;wdLXn^l[r,c]$qDBQG.h[8wd(QkYI<_Li-SQrcBHuJB=+ăU"]Ez[s(V9AncIU:YXDL)xAXSR\x^cARuhG(06Y1uMK,fE^/B9gH%EsXGWv8sc7I>ăU"aLgbh'V0xK61_4S<FWStZ3'Z)nZ\iit953\eVh]hHt^^pOxTNC;UQfi21Nl,e*BăU"SNnF1;wMUPgxs3oq<'G;<S9i?,bhhM?55TIcutZ>M?pYrK4E2'yh0*BS6C3HjOWă'>>> Page 1 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 2 of BITMAP.ZIP begins here.ăU"/dVx$6Qt4knS(?Ej;4sCe??926NuVrh;CjufOnOl%GoQoatRI2_)E$B6[na*1wAăU"nSpSoB+g&zi:uHl^Mb/Dgj69RF^;8R#olnKkW^pa\rm\xqMSG3OiC0;(rB$$\07ăU">.&&pab>I$u.3LX^#.3Qh0wDiWBuuVToJR'Ser<9'=m4E'_-mRqY(r-62f=sR%MăU"iAi*O<W3bXB&iXbP6RX5FM=_J\['hq^J+jmr:>SDSd1#m'1=?R$5/i$ih[\QpM2ăU"N5kb9HKD3X8B&kMYR_L])[,dq8tgrM=kYbleHTIL[H1X$i/a2n>wA)O]Y40XJp&ăU"Se;qqjh\CP=,oqI+;)UMnQ,pNaxZ95AiyO*7Dkc_qD,48[q3,3#E(?r(E2,ZHJiăU"1_Fb%O]ZnVi/W^$&P^N4[>eSTI5tCxBmf2W^53-QM6j3TgVL)u-PqM1;fon>3FHăU"AVw*jn9wNUd_<(DoJ5E5HA#9NV/:^tQQojy#1%YX$KGGW\R4k.BL<Q$g#sAw'LeăU")aCg>Tj9F-bP9w%\uafkSka[d+E2=GY\q2cId0Q$Ql.$WmPS56c=?g3VV95z4]PăU"E:W$N#,*>e>62Yd7(Oe4\q=QA3AHAg>_pLGuKLXAu9n(wdJ_Z6]>hE3,=GK7N1VăU"%IsFU3hxQ^m()A-oqt1q_Z\[o&'[;+MYN?lq-GmUJqFl5QEv2rfhjV1pTDTO7F<ăU"Hm$lmjY[IhT4G7f/cmwD>\FT=O*BgQ:TQz+$cW/6S/Zi3TU#W6G<at6Vbm5UgPVăU"k<#DKf&*-BdJkASr]i$Cn<VXLiBX>cuaOQ7=T>1e9>0m5=3&C76B.)[sx'\KHOBăU"$=2:7#NNSFt6lm3th(4\8&?ZPR[XT4r)gSOX9;2XLNOHw66;EN6HmBW?IXb7?bhăU"Nr0GT4IH43n,H;M0?5yk<.t,^-R'sdup%()9%%%%-%>r2pG'nicH%R^%%%-x%%%ăU".%%%.WY&n%sSgrXu&5(nCxP3OSALznV$c2FCg]JhnO<.T/QRe=#B&IHp6R(tL(.ăU"-m_Rn6<te?+L#2R8(1g57%7-)71EPCI&_5mmImmn_qUSmBOct[I>ys$7rD#o6+ZăU"G=z0^V(hWf)ljlXpNxOd$+ql7vNdZV=vd]:d&u-L:d4Qut>j$w^ruTXPxJ9gDxLăU"&$yoIAt7nX.mIf;mzRe8XY3ng#qvPe.ynsz77n.ie)PdO:ps&7_8jiK:Q$ci0[?ăU"$=G-Pnt><K;[Ln0Z'%wL9N*sIAx]TsQ%u71tA[p0l'mA]jsHI]64Lj2^m#C?$c4ăU"qf]LkE?bl]<H,0S=$*C3iTbtfXWgbT5R[1pjT:CQ%%,H6^?^X]lL:CY9*1'gQe<ăU"W-5RD=5J\ldk-3EXnXLkk9kIat(O$ye/VJaGAXiJ$*M?5oZ1P>T2TTj[YX>^1A#ăU".Y$ImF$e_h+H^0c&PeRH;0#B&zI=(6Y?)>QC5a*>eR7Dpom%2'%+y2$n.M.7zXJăU"1r1#xGM7q>i9-Kb)ZB<dt;N\^;D<kO\l\UnuKdpv2PX]cuukN(sT7q>lMubLU06ăU"?6+tGRbZvOf.Y=6p*DI7tMCfpu'omdw#E8T8Bt>8xH,<lL01)1$mdN;zZI7R,]5ăU"hV6wU8z.\1bQQ'-j<dJcPfg'az:L2t&Y*a^Tgo>21TsuAhTu<)MsoMe;:ZTc>[3ăU"**1(EM>$DCZunfv6(3n\cs_5-xr9TNN'DIZQAdOiqXo*1#0D;8MZ7vOleNcBjW\ăU"YCuUR^]<NrFhuWJCwT0HLFAJfOCVpDJlaGXd7haO8ewNA58lYu$N:uXX2tGnt4,ăU"7MQ%9#.#CHPsAZv<XIpDBD,TW%J/=g,p)gE%M7/jI'v0P%eM9'&cGC8r)'BZ)_?ăU"uy[AQ*5ij&mYCZpu%szRMTTfvA:&TgJ,5wKVJpDNk?u=eBaBY/8hMDGbEt.sKDiăU"p-NdGfOs6/MCkz_bnTPf.?n4ckRPP:D/miGM7)I[yIxfk,6KcWUJ^dff3;eEQb\ăU":rcJkl2zSQ?mjnvU6k,:t9WI;X)1XqI>yHHxl//j'Z5snBNHNq:ZO$$Xao]O.1oăU"*'-<)/]OE1MOGUqAg8jNP<a\OyQ'<Y)jh#q:^aK=G(MJP]a'u1ukPQ4pkx%yZ;9ăU"#y;9wbu$s5GIl\,>jfXD:6;WG,H]6nnMfjK]c0\W]tL8T'2Jt%&2I7zp0S>ThFnăU"I\H_H$fEGXJ4]r*W4pP#u]Gj$SN?WRfNLS<+L?m3F>EXa,2BSM7e;Y4Cg,T3eEjăU"&FZ>L2QQ)jEqx,rh-4jHLZH&H/h]MumQNv2V.yyBN0)A&].J,a*3T[VGy[/]:PWăU"g&dg3m&hyOh\gO^uciRGqZ/'VFQ_2^-l7orV>lS+jo7J(:T[n7GKf,RXHUk-KB(ăU"vQ=*RaL0UJEWGHtp(:2&4A:\[Hu._4Z->ZlT8n1_N&z3TmnL)=7W3o1wvo_GHz,ăU"M'q-+f2A]F'^Fq5GQ.G0&XuuF^;PBMPX>)p^u*QPpAMeSe:\MW5J]4W-/Ljrl-năU"I>Ya;F^.a'5v)OQN<pe1'<MOxURXJ^BR%<PEA^5uwg5R>kr#9:-Y\FSblZ?&XveăU"6DVZR;9a3MYudrgT4Up%&9uHI=l--h(&n$r>zX76usRC1($fLeem_uRYrs6YnxuăU"d*PNU$Dq/vQm'*5.GHlH*[[d'[uR*tUZA=ZQ/QO$mN#\\eG:nAu(_puH2b:&DPLăU"^t:pd'UJtNtT8T<E^<NG&cc-TefdjVQof#5-)Kg%dA%UyBfpL$?>d(ot:-MbQ:AăU"]':dkGWQp\W5Md^l,HNS$Q5SAV&<R+EV<E]Uc#,qDy,EOHd0.Tcn[g^B7HTQdNIăU"Uo?$^<=1fkzit1>W<q&=7plH*h\I*'Wag_Po%r+y:bFnBpCo<x#$Eok6X'D]q_RăU"321:RR\UDIG63^PYRt6u'WqNml3vfY>x/4sp:Xx3o><BooP(uci_$x=>He'=T$qăU"M*]?M^Ce9s62tkL%FQ2iyLggckIIpBE6whN<r-DS'q+L)-0so(z)ro%g]3zK(WXăU"Nuio:7DD/R4RJKc[>$]?,<Xl3lNg+lkx0s*in3pRH[elQw*huw$Ccez%Ilu_58xăU"6vh%lH[jXFJ:?IglaGtv%TeS9C.:^mmYA%S#A]U>&$mWaY#ms*VN;VIU1;O0n4(ăU"E=?[KrPu(wqKcnX'J%BaK.-P$W3%r2Lg#Jl06L;aAS2x[B4Ni>TqMsdpvGEhcD-ăU"ZCbT.VK$9\Zi%-drMyV-.$qa3,afLu$]P3fr6hLs#4oofh<.uqyxNs6p8>6F.D[ăU">O;Q+$p\=vl?kDX)9R>(Tgpa24qEnV8eErp%00_2P,z(9o(:Q'6X\7dgYOtsQ.'ăU"j,h6$KP<dtbBp6]bF;3p,+ahG45Z.1)e:=Dg.k\cOR$K$7]^%w3lN%tz:,Xf?6*ăU"8QU:0(2/Qg;py%gD>D2D$mHL/sbsKNitZJHa<DpZZn55yDG5CA)[+v2_AQ]AKHTăU"97rcMZNt>(Xq;H7me4ltOwqxUGCIpO\]n/M6=sKoQ6C>bH;T)ucUZouuKn4zPUoăU"kp,4)mU591-3KI'^UfxI<;d%dy\%NLYz9*XpCds$>dg*RGT8?^p-vWAegFAId*^ăU"x)gZL^YF%^_hdAgY&dWy#(ZAou)pZm#pENuv5>K=(loSj8V+M^M,:4>WC5cT5p#ăU"JjC0P;JqA'E7X^/TG*oNq6qQc0&>ruKsu?VBRX7zZ&gZAx;YCRjjjfl)*kAS55HăU"M*SH*^iQ')MuaQQqY9&D]eBvN/F0Tw[3l2P)liAz#MF-c/Q'7:1gP)Ii%UW]WW9ăU"Y)42P4VSVn?V#v>D$(:k&',HY6wRn#p\,)'zf%g799V&x-vuH7pcNnnJ\OyWeKDăU"PoUinkbvehV:^6:>Xf95X90:PR\:rf,t$joVR6wsG]a2?ZD>lW'vnku,b1#ImRQăU"Q#o=Cp#E<5Dqk;MU]44:AqL-<nalDhJiiCy2-l$U:k#kyEmj2x'M[J)R?-PEle8ăU"jp%/cEUL\v3ths]25sI?8.c+;BjGJ?OD8kH6y'jxL;%>8a]s(.Tyj)PwITLten&ăU"s):=PD,D#o&7]*YVA,Dt_L\iUc;8zDQ\G$$rtYo(q7A#U_R9c6H'Pk9]7'wl%+-ăU"hzATUZADv>9X.o0Zok;QsJqdxOmd;O9lBljGc4tZK_,p)su7u2O39Nw'0IE1$w,ăU"UhvZsdO2g]]WuGi&BLED,.R$i-#-'$Zdv#rls^Jk:qu^O.D$&TF#/S%$z^<aT2UăU"C=b'C:[<4VNh?;pSL.y3?#qf&y6+=wcEF,)IZJ;.%Ngb\K<K;Yhjy60U]P$wDPFăU"&M,&M7np2XqZ\*6De2[at2uG2F+U5Cuw9*j4u^QPMKH,sY&z,#jIfpLwZs=M$7văU"-BNSrVK)E,Y(<6ahRdJ0b$HVN4an9C(x=1?gJ1l]stm.2\IqGJ$BY$r<jw\2jGPăU"#VP.J7GSW2U85zqIfc?*wB_BbPr5A[&b*M-s(CrkmTiUd*qZ:&^03^S$hHLEH:iăU"]H)#'mLE3pxb]HT*vjDjM1(gpI)7,m?ck-O#[xm6#3]t36pOzljR%>0P1AC^J&#ăU"^byAKge4Fv9rUGNj8Ux4FWSB&h6t5e\YtUmt,ihm8lX:IwXyNu6,cU(B&F+2daIăU"dH*fg3D5Da:\G//J^Nt6]N5jr]9iG+?g58WU^U$(2OW[522uNq9GU4?2Z\8#xYkăU"XC=?Gb9QEG_)-vNoU*D2DrY4lb\jy4%&xBTb$c2Up\?vF]>8qRWNKroN[ZW1UsMăU"cVtgM5o%o^qw9w/20M%A.yQ$UpTM&oeJHUEh&flk-DMr.^pQUiwGCe9CFRHT)DDăU"6(4uon<Nunt#qJFR]bqMY&J]ow/WMKDD1yl_no]o7F[7QJA0yK[BueM^pDFuC*.ăU"'B6A&DVKNPttj,fCZUN1mP9wiMG9qaoNV_?:_HmOqP#CHS5cpAJ74m>daM^Pj$kăU"Va^SUhF2OOZHyWYz>9$i/CLo3Z.iU;*>Bju#^1&5(KBEpPWMGE)V=UYN.BUBN_DăU"Unfl)<N;YncEno6$:AzUrrZ29%wGqZnKmNl8ES^TQ+GxYl07\OQMEJH'^+3?Hr'ăU"Z;6i9+GCvADz^leMJM#DuUk66eHO=d]-$H2O\i#xUdW.W0XpO-BNPK6fj^-ebm<ăU"k97lm:A,2E>u+mmx^p-eUtodckAf%uZ,>3QiOh'VVg4uea$q7d(EO./pC)tFydCăU"s6^8d#$J+QAWr83cO\6DZ5((bo^C9tFkF2U(Vx35p7O]0NWZ?(^W4]0XK?2--r#ăU"BRq$PYeDVBh,XbVNE#uL?,NM>oyX1DXktXPru-=Gwlt6BD:bK$MBzD.j[pXnl<Xă'>>> Page 2 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 3 of BITMAP.ZIP begins here.ăU"bLGlD*rD1JQx-g:l2);QBI*2)VedM=__=SjWaGh)sTTO.k&?*BT?I4M^g'v&2VtăU"\2sJ[3qhB%+GTDm=#-/Gxb.d%tALt4d,RgvfUtP'^W6Bjj0*8+kPcZ'u<'p9257ăU"=,P*1:&k[]ixVFhU3,#hjjaP34ARnb=%wd5Hx-D0s?M[Y$4-U90cj+Xl(V_*BANăU"5gaqtH>q%e91/:GxYy\Gc\B=JH&8V\S4Ju8?SG(GtEV+3zuTI4368sC:^DfWgmIăU"oWS?NuRY##K99jc7:qDKi#X\kX<wpzM.u7aq>Te*g<Mt5)/nS)pD01ZwYd)F]#6ăU">F%$^qdBAChHyAM4[j2u*.paxKlJA]/aomI%^d[^?ODq/3&U6Phv'd]^Fo?W8s9ăU"uID8rrWSGrO;'AL^qi&IB4l:U8)qd&:]G*FPv_Q.E%$$dxE.bz?LTAn-aNpQD^3ăU"A\Va5ftGV>cl:yc;6z=ibv_\4q:LwN.p'wK$lziRT+CHrjflb5*30+>.<lyE>N=ăU"Aq=vWMCb/V'(ALkl;DL(mAs6.B92F09;lZ9/ug%275cj&xfk[kdAD:T)RJt9IagăU"EJ)nYdP*[6W.PPYqi5i6cw\V8%jYsO\J$t+%](7Fz<x6nI)\,<c[1<mj&+PzV3FăU"F>fC<AbvG<Q];zk3$xX$AF.td,k8sN[T4^8RUO^b8(>XOMG4%=OE%k.GODj'OSxăU"f<-)C?CVeih;3gAdABaocyPsUxy$rKwG/:t>&ge%rF)=E]Rp3vVf6fcB9oDF5M9ăU"UZd[79'2FkejSB]rS<j$D:j2CEVJM(F)3TbQ^9-AgIOQ&\FVAc>dr?$#%NXd%P;ăU"fDxG6%e>E*>%4h>dPnD4gh+P&>kN1c$NB3FgieEZ<;4D3Q#sLA,pcn:[.RR><.-ăU"pGn6MkRzQ+:HYcq*xi(H]gBJeUYdqLDV<,DVhzF_/y4ISQ=ea;;>C.jghu(%:A%ăU"Ox9&=+wW.Plqs56-\NazTNaL4CAT_M2hKLUbc5cDc1u)UM'k=jND<FH$e=]32k-ăU"^<9p#&cUjX/oseF49AIM9=#MuoGU/BC8I5/3YcCg3X;-Ben>BuMeEm3DLZ->2w=ăU"XhI31q:I,gz)q-]KEN%.:/SG\0&d4jNZr)5kh)BS>t2w3CHK>gdTw$VzE^IOnm?ăU"*muGX-?B_oe2BGLsZ(PZ#]TbC0uH$:vCcQW)05zyS-QE:-EC0zXBtwV>U$7V)NkăU"_v+*+x5.p0t+CG5Pg.HajC5o&2XP_/nznJ^zE6boN=?g#lBfQq7=1Z8O+r6-G*MăU"rPA+EN:a<Wc8nG7,UpH:n^tFPYk.U;Of.m9&B#y7/X'0gN=GK-j\_DsiU=nP)Z2ăU"cd9gFu=Cj0y?Q9[:7BeTQyGPVN=9xp7vkM)oGn6k*)jE(+$Kf.l7LL&:<Z,k_W,ăU"s?HOp\XCmjG^O1];/t^prPk'4q.#kr$-MR)Fe\+l2q*P3ZIpvf7FV&$$m_7MU*năU"s_wHl^]\w'S<,HUS=%]l]JLCOT<r#(D]p&Q;EhrMk%.71p-)Z&#8-zV22Zf70mhăU"y57f^Hb^.kxPggi)y.Ng7r^rO)/B#?hGt%hQD5?Ds=W36'=5)f(IODF0B-Dspo)ăU"J1:Lr?n/Rklpgy/*1suLpgzF;=2AO.tzQIpV9MN2tLc(s]dI<7sMR-Bu^l15Jo\ăU"7-k/DV\=]9;VY[it8DU3'3%Eie0JUbCs*#WNP>):O)hQ1=F\*ORE0>fxu2_vw[făU"-6Vd=Q,>r(V82R>x9>::CXKN=v3=o>v1URl';s.(i0(xBK?xE(4y1xO?T+ZJFtlăU"MYq1KW[Ml_E*F3:aa\C2;aPZPtbD8T$2#frz_Kp5o/1[<g,75E^S^<lH.VTw3aUăU"rn;-HIyE+e,f_^=Qk+D0NUQ%,HSGrQ2kaJ)2t45)Q:5+/2bk&/swyBVdy2WR(SmăU"5d0s%&eq#N&;-:ZF)ZM<R-od'D8,e)f#ebbE;4B8Ozx7lq8zG.QIe*9\CSy/=j>ăU"Koo*m+:bR]a+LOMUs3Q_$P)HdOEhcZ3^^zDR3d3H/;[&2GB$$VUk,PiU'-pLI6_ăU"/w%<%Eef_19uQ6SNUe6(hO10Cj?[;QpKi5Xx*5Pdpjq;^W<zXDcqJ*)w\FM3n;0ăU"rCe)rY;Oj3e\$[OL*>Z#&,71m81M9/:HF*/oRodW/Ij/;C?hJ3;.:?aXpH$qHIdăU">nuOprA9fVo_c#%2Y4J4hB^u2Lea%[$6KEIj4R#5GUk^IK)gLH#Qp'A%h,[(qM=ăU"()RyUCmUGM.i://E\;-2];=8mfIfrV;.,PJh$%faoa?lg5ITPKcHJ;XT*;h$4+TăU"YoW8z%<1qu\:A8HW,(1)V_UkY-pRgr-s7^vR$V+:Su?*fK_d;%bCK1zuEli42[%ăU"2Zu*A.lPG'TS6/OvO%c]OYYpJF=l,g;&VBNW<A;-S]huRUdYog-7MK&^xI:JoNeăU"p7hQ;9)1POW.=GOIF[AB(M[0#UcnJ&i#60C9<+>d.Jm[6.omqUicHUK/lW?vXo/ăU"46W=87QkXbNY'YxcXyA7nH3NS7#25+WkMfOJO/PaOs)gd->Ru'*hMR]<MuA<JB(ăU"^n(<#DcC(*1jKEiRzG]=Y?YKY;I,$eYfBR>MFF*,KV;&^6>J<*)mO#'7?2=u%E^ăU"%i0IIXU%*'Fu+B=80BSHh0=G=BT.=KQ6_S[.[XY\9Rl&W<suqLWBZdMellqkfBqăU"tJj>gTaJ8O1HNSXtV+u\.WiHl-[VNcvT9&^>Hx+]1NzWeeR<GBA#&(jqRm&FVGYăU"'2F7;$-:\p_dX7dn=Tct8C;)0R8\S2gqt8bhXW2s;*W=P'iM2#nG)ZN9&j[&V#IăU"nGaI=eUb%q35h%*(e4(8]U-#;<wO7Q-#-::[;(Sa23wh7vN7OTusBue>9U?fqkLăEND SUBăSUB V2ăU":hV8#sdsv=,$hl4hNf+wRa]tPbNk2PlilUanb_$7k9<[+Y:-%Bks52)JsJr7(oPăU"?p_iaz6mHZ?bPID]90\y8lLkqE#9k8w0aM)Z)0uoDxP^B<?hIJ<'D-j#o<m'VbnăU"?Y4sB%33b&^I5\C1XXsDnP,c#de8PI%63xA?M5\%)GF_UAs<0I)0]0oi0)oho^XăU"mdXpUqY(#a4b;t#*)d^WlWg\%LUdMeV?j.h,+4Vt%%zpD*YE6\nW29FkEhsD<?oăU"gL^=<dE$2zIvpoTlCS/Uo)xqA,--:R(N\#w$Ut[C=TfdmoyeWuqiUpd$1-Vq%T8ăU"NeB/InvthiZmRULJE4I/tF$inWR,vE916G232du-\U&Mwm%h)%%d=Ig.f/QNR7.ăU"=q=19[?^a/GZC%10qgO/5$^qxpWrBz=UtjZ^pmwl7A3'LlbfsrIn?dE:T;V%h24ăU"B2f_im8;r:b5grch=p?rqhwAU8uqb>l=J_ulgCWn<zvLGy7nH:x+W=CS:t%fo1%ăU"oJ4p)rL-bs17HK1HQ%%ypBHr3/bcJlarVgW>':'qsOT-MV6DYA#1B=b0(UHmM%;ăU"'e1%icY'&+%='_:Wib.UeX&#9[71(]U5K:i'9:NAOk+)r&($e>keXC(a7V[crCsăU"=Y+h8kEZR9Z'p;ZmDioW8\Q8#iWLZSeE2j1oc=5]==5a=bI7\q>c?3wfJZ&JQ6&ăU"qJ,y-ZxB%2Pi+G^BN\4lwW19cc#1[;Bg.>T_PAy_r=[Xs>6)M7(C5;9\>)kWI]%ăU"3]b+u4Tamhg+-,QT08bVbq5WdI;o9F6r#3BQu-peXjRjA7E?5)r0K1'*:)Ba+;MăU"/QEZLeiE45ot%s9VceclJ)d^hp5FRt$HEuBKftR;_=2xO#H=O\,m8T4?XS\L&l*ăU"B:wqx:EeD*?AWhk>#(6Ncfyl6ld6($cBHCW,yu:2d/ICo*F\1Vaa;E'oe?EYe-tăU"k)P2n%'EPsniV8B_Vja1*BZ(WPr#6A\J230HWZCON_CBgTU9f4bRW%+)6W7W7AKăU"<6+]K6i%wU;3(iQe4*916nA;EA?H*L(Xs0WjdDXLD\OA4f,ota+hUhK_u:JHF;iăU"80]Wu)>X)=i(d(hfJw,QsI8Bos^#aZDegFE\Jd1Y6X*vY.bmnlKR&.r/RNs(b4BăU"xAYKidA+<'am/#u[2q9$EaDi9Bkd3=\R%;)_j&,n/Bqne5f?-rHs4FY>q\-Ee9jăU">V-m>Y,D,2n%Kh.OT_;T3<)&?9ne.7%QU8YW*=4eZ?eqq1:SR6nZ_UNCQeVLdUIăU"pXJilV$2Xs2^M5D32)>aGxg_(QPp;rcrrKDW>5tt3cmvO/i4w_kf-evu6:LEZgTăU"BReniEVh#4-hbvHZ2S^[4^t7%tD=$0D#kV1CEQC-C0Dl&y'gRbfOfc_Je:=o*7;ăU"[dY%)0S*Ldq==9t?6#(*p1(-Y_TYAC>,CZr#:pr7Ac=8$DI'9XxI#U$i?9cC*S.ăU"1%M++6%3k6V2;g0g7ux)q+]Y4LHFjXmuJPR2HTb(./s3L>5*2:o>+Ia4ED9;Ye9ăU"4c/:a%%b;)'0GGxSv':V-SUPxgm:UF]46W'VpKj=VLP4ZmUVEkK$M5qJBy&:d-/ăU"dyY^CQ-j1,2'upiLO:(,(4svX(f*./YiBHgX.C[V0]sgVGK9,OEiM4=-iq+a:CRăU"T^:%gUSkzP2lGHf=VFN]2U&LfId%a9GuJ=2P6(,qF[7?/>gIA?wb,oo0)-;-TYJăU"1n+At^5:Go7<RlUvGj=b3H,*K^41JQgYbou3d'M>*gm2P:u4BE]qHLoBXm5Y6q+ăU">]mO^vq5/oVuiut=i]je=s0fw#&jal?u%tNv[udrAN.x1,)s'#5q%gcSe\3a-(6ăU"s:?^n(-?jgI59']Lr]n0%Xl6[v-ef_XG5sK(#]2#jksQ,#<#]4&>E#Z'f6FE]j;ăU"I*%h^+2svy&TM9kCFWLw0smek7ReLf0;BkW3>.C3l6:;8:8l80a;#S5:D*wI974ăU"Ri,A^XUlkZrp[W,dnG>63EqV\8_MnIbi]2nrX;35X.Qe5\\&.XiSM7,:)$Tp+DPăU"A.0v<+2+mSfSMU:fM;otb'T]&sn$f&)5t%J][bOeXY1wm&DJhCJIbMu9M$:6sVmăU"&90#QWB3AK^18]5\_y0>O12goEXjAIS];D/r%F.jELFPNV)ooEh#16iM#t+mJP?ăU"OkK.2DN$H/ivAubL9Gg$P,h5voN>P,sg,BqU2hcbibI;3Gjhl#Iz'ueDQQln9]TăU"lEUJeT'$97P7w,Kl[FPAStkpii?EoW<-&V\G*WV%T%hN/)$U:z:?*n;.,2Om+P=ă'>>> Page 3 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 4 of BITMAP.ZIP begins here.ăU"5f#&hKQ4[rx&>[el7dbCqTk\pI)7C\O(rNS<RWhCcl;ERL&G<9.g%a&9tRC[e0UăU"h?mT&0O6K%GvO?Mr2_qgg_\A(E9%0MwASe3VR>*$0N]+ukNqZZtB6n=,$hKEpNCăU".Nw[iRPSm8Klh#pVTh8T=[3iTS4X(/8_>U<W>^grUu2x,MPPH1ZSF(T>T4+(E[5ăU"tZ2J&Ze4szh%+5L-',ESZ:8qQq+Wcc?sY4(-6kDg7(s^Jk?9hxM[e<n_VCPqD\DăU"34L,St>0<L<\?p_b+v%AfZ=?Q]ns,;C9A,Q8=MW'[6tMcO2>KpAwdApLvMYRq(OăU"(tIH6c]&R&MY_;$H]r=l];.<8VDWElqHHkQ(/TAVwUG2uk\Zv1?H35hIo8VB(VRăU"TP4FTO$O)Ti87hNdhR.S[BrEkGnj=Wk6Z,aDqLWNc2n<GA(Z'&%uaFaqY6j%grmăU"yh1_e2Lo)U)OR%\sDPp&[4C98(XkprwmCTV\Gp3%eX0Q;IM+m-V?4#b+Ay1Svr:ăU"0LTM<+MADRfHj\W'nw/7AV;;]$J)dBp_J1MP)1#u'QkL2)2^;$bh4lgv5#ArdRkăU"<s2t8Xd>pLY0C79pDJ&GS#i\'Nd3nx\FCO'q^%d0%\]4P:_5fH#TsaIbN[=Ml/XăU"4oeNB.uMgkIv.,UHC-NS3yloHf/5^Bj7M_H0)+T&4Ol4$cfT4OSq;_bE-:;2k,RăU"1]V^sv6I5sIA(#4hoQrnGV6#lThEp[&tS$YOLO>#(qSY/CX[\qS5(7&?=0(&Q]:ăU"hPOQ3aInIw';[Y#F$5K&?(DY_7>vAB4VU&7lsbjd[Bbd;mrs<kJs,wf0c*f\RQ>ăU"ThRSnJoLeQr,dU.lc/%sY]3h%je<=0hEaZov=r14o'Dk,v5auY6Ierteq^+3x8?ăU"]d&zx;KHPiUnB+'.<RyL_piMhAmvY^kd.st#b1uT&+Ag/,vn]u+jcvH&o>U'VKLăU"9VF>9N+UsrT0YCSt;2%cB>14/Q9*>UvI&THyQfGIaZdy_gGI)XRPDCUrt%%A>*jăU";L]MUXP&F5VoL$c,o89nibrdNu8OD=d-t(kAg,i>WMC<6eUJ(Tj0cP8t+T&t;ukăU"QH*(l]eMdA]c4:hX73BqO06'B5HA5TE0Lt9B;zD_bY9v/Y]'6JM*aiujeJk:XA,ăU"XU*TNXT1mseb_(E8#j)Rr#^I*g/#eD)5mBsqcnHR$j-og+L,74]%AgK[p6%-x%aăU"5Q,U-U8^,X/GUh%#M%P_?C)b9ebqaj#];DD^3,1FVL_VFt>qIv*Zrd10(bgcZjlăU"/bXd>oNrci7b-XwCcG#T5Li2TG5??-]Ai5_-2;b(6<QXp41rrZIgRthln6=pK7WăU"QM#aH5Unm-M2FjHf&>g,zeBTn8nB.W:a?GRzT%CKgO=m]N=keUI4lb39e\)X*K9ăU"e(>ycA4=;[cDckQ-?0>dWE2OIjK:+g;'AHM%']2+V=m.JM%2R;0.Gq#[Jd15O*&ăU"CU(-)+qO)Tt;a.8TV;8/ctnP?pvPc>HgDA.I4MpZCe4lAC6Q;]FiBlh+BhKT+.<ăU"Vrnao,]<9HN1?j,uuI8v>,h=RZ$QT];XFvXAFaH>#3iTCUVvSWT\r'd5)\+jEXGăU"n:D)p0ec/=P4'/[^4NC*Fw93lfyC%/f<C)gE,+f6,_'-7uIBZ;d5c>6[EG<lfyVăU"D'U%tr<Sh<)rui;J'O,782An=v)4mpE]Cj%uW;nIJH(_/._kBMY3VQiR0;]UNA#ăU"jtp>TJAt4gZRDUY/=$Wlro8BUvpf;h#rq]T:-rpX,pc6$WE*tSCrI^T+ZHLT>PiăU"K&I+gH>8pT'+(R]kW?2\+F2D.D2,dVLmdg2m9#tpcT&EgnS:dDQynX<N1ytI//qăU"?OMsbT^BL%aG]%Z;pw[=IgNgCq_c<h8F51BHpR&br#8nSgR=jRY8^kb.8mQZ&bEăU"0aI6UV\_U7Yvm0,[*&/W>sDrw/4?+Z:Q=X-NaVG$SHGRV(K_+Ft6o[C6e)lG*_/ăU"7DK6Yj7_hK2&(DQkQ&h*vFbHMfjXr6_MHpB_g,DE+VbzA^d0bV1L[[Ocjk:fmjKăU"[eYZB:U=L3j>L%J2lkTyeU=eOGASwr0V<oWH>oO5tuR.Va/^]8E+.N6K(d8FnRLăU"n27O]slS<XPtAg]/AQr5E,Tq5ATn.S<&#JH^mK-)G*j7^yW%IPCP_4'fTX\8%9CăU"/3gR>)>IvpMlu5.pHE6NkO&e-XJsiTMM;)2SW[4E6c\vAF8(K%cgGcrQVIp^$6băU"T.q_:fetrV:\Q?q(AEeTc1ItrF'/2?&4EE7AJj_b26o:LEB>vt<L,j*(OWv]+]1ăU"F8d2P=&dc>hdfP59\An'#3b;1*moa*+?JR#9qSYMEQ&bes#0;qkgTgAB_UvHN\UăU"J/,(-T/74a83EnQF4D1G)0&]OrHI*-GI)%Y3UW$e/)37]YsYK<'heE>>nuSr/k,ăU"&B&j9P0SCS.nH8DfWHb?,TeG+QK.UC-t;*jhDKODvci5L6\^<'Dhxp#FmsNpSUfăU"rDyIwLq#HbN1s*qEoxrBGle6Jf_N2e<j5XcMdM:8\*kwK(NQDbVdDMiSFP4FNDCăU"*J_L#P[kX*a-&lIB)]^Kvl3KcfGn+)_o2J,g#M_(L=GbH(5^--3N8:Ue2>TvJM7ăU"]#M38P)-i^Udgm#Eeh$rZ$YA.qPHg8)rQXP^r6-$eZbVmfDho.TYiw'Cktjal1PăU"qs=.d?fM8.F_nLUnTq<ZtX#6jvi-mL^eLxywEjIh)ZV]%7CUeYGJ/#ossbNYUoRăU"o&m.)4E5Rp_t+N.MysINQeeVZTran1Z%w=nNRgVD%hZ93=?s'*[i7K^G8/'A(avăU"_SVK5mYao<g;[j9UBMUY\0K1T0-.4KD')j8#Nk(uj)+<Apt/]Z/;;KF%aY?B.?2ăU"\qQdRRaQKgM97c]tO+bt_$ix53Z=2XE06s]8xr_(pm6DJd$ebtK6lvmF\0#d^QHăU"X+3l3d/^Z/1,:Q?lFqF,2uytKYV\<2Fl8,o%u/qtE0ZlQF7l)ctO_\2Sy>yG-$8ăU"ZA/*tONO*Z/.DI'yJfUGR2/Lob34nA5c-<4)%M4*y&$Az93%vGm';r7sMQOFp'eăU"*qU2NQX$3%Bpy;jo\.1Kh/5stBiY2/;GY[aY7Eg3TV?GIVvp01i2o5*K^8-LHj<ăU"r(I?HNoU]C2V^(,QHq6.U>+tGiTx>$tm78n'jTx,NWD^.9a3'Zltp862Z,PzYJoăU"%FE]qXJ]OA$Jo#CeifHZJ/fcA*d$F2z6MhYm;H*S-*3878jCIdM\sjF<^.Bnzd2ăU"/VHS\]m'48BHf&L\c^uALY,Z)uK1*--2E$VBtuu[ru.ZD$gD%MXOs3Va]>x.iG_ăU"qi*w]A/U+VglY[R<leI'4]J.d%5yd^[MHf0VX.O[c^BX_l.q\B)bj3W1usZUb8>ăU"<GarQH_#7BtVDO$s#?lw32iO>QY$:\V>:25(\x<NbK^l0.I_$c[HCW/?.MUi:X%ăU";:O7LNY808h2=8^ZZ(dYV0=aT-sSnVD_b%b#8ViR$iosi7Xuw%(W'EGNZPVu]UYăU"()h;M1L.K_m'/=EgM%32:tEIX)aq.YD,0bQclt$ZJIfiiZ:h$nf(d>mbT)-B2c)ăU":Xd>_gHc6ZpOApB4$sMW6?oV&d0dSknx8H$r.<GfuUJk>jB.t7l47DV.G<hXcNbăU"mc(f>'QaEwIqVzt#A92x)$T]KPk;6H+f+$,SCCf\/Z[;kD4q)$RIRQQD7E<<_+măU"-C&5]$UJ:Sio%%h1Ye+h\&?'iFq-.G(T9;K;LKLOhpbINWms[8N/..IE2wA8K*TăU"^hUk)SU(R$cYiid\OPd8(e2qxa$Xo'f5dMef,Bvgoh^p<;PZ8C>Mw0HsTu*s0uTăU"VSuv7h;h>Jnv>HHR,SBL8Tp[J[Wc]SL<SV%U*lQaBGiM8&sT-Jj3+$2DUKN1[d_ăU"Dt:&pvxC=$V;E[(VXIjH>vs^;b5f)NkAc9..EX&[e='=)/P%+0>Ooi<)7)77<r<ăU"%d%tx:7eWDI'Lq7%&t&>U9#IKQOo.RCCOZc_7>KLHcc?s9'MUUi-FWqCrq7mQPfăU"L^N?0lbDteGv-Qx;>:k&w#untdO'?u#:pux*keZ(D$MJidHNQTj>65]Wj]rk8o9ăU"uVmkt8xb08qZ>*,](^,Hu/ZtdFR,zLhrt<jLG?Vqd_Sg=2N1a;K:oZZp.'v-*N^ăU"i*Tj)7V(GXfG0mf\oKLSiA*Kc(=_q_]ZCXO.GUo3Q32UYvm1%S;'&#+I*EK(Wl/ăU"twRqJ5=Z6lDMDrVHHnUZ:9'*Ax(D5^4NVr?qvfttL8dEuH4Hxu3h;(nVTx/ZsuhăU"VjSw#YQ;(Jmrr8TjQtL:.S\DrKt;nLm'w4wp_FaphK>;>UW_-p[+aTfC>y0EzomăU"1<s8fmJNs;Bx+/d+gIKKCZl<\X+f.Jp_MPs1wA.G*QT6IU2+Pa+lS[i1tZ#X5tPăU"'EuEb*Au,>SO*;ZdhmPu#we4l:>qLh(y9-U&HHNj,T3EdQ8G_tGE62ZqchNH9?CăU"6duvqplstx-tQU(Jnut^Y>fX3+uZfY>NUQmx4HpL45jCv5s3Q&2l]7=_mlBYP4DăU"hd$X?^p;0r0Q,P_Lr<:b(cR4_c7<<pNeOu'nK[VW#h-BQ9cq(+YPE5[t[AU5i)BăU"J#D,--%l8Qy'4(huA=e*^Rfa*R;rPE-Aj>33'+&Yt+g;H8/8/0?&uXHyVIgB]E1ăU"Q.(A8jfMIfr>Y$Q#X5/C\J=pUL,nAX,06tNWxUB(,TqYEY;>otTw7PKwfTtv8XjăU"uqv&#]8>dklNapHJU4Lg$RNL*r$lA;k\9]Pn+h$4&gH2;,gHKJ5461vlb8;DOEjăU"Xt,<vk3:82\7X4%h(jVUQt=vXJo[>\2jm8;A/B1Dc/?nt&=Ki9SKL/%lT#[=)'JăU"8eep%x>'U;tV9BF'RvI1(uY;='To_E4GLHiabX\lXGlwp6QbibtX48]i$]>owp8ăU"f>HoPbYObERoRLgHkmqEtlj(vP$g\CwpMJYvW=m0R6,($X:T*Lt>RocQ'T:Rf_8ăU"8$Ukw*0,BlFI8gv#f>%&z6m%3VfEKrft/-or5QJ7)PoZY1BVn(UE[j,=g>C,Di;ăU"&GGWY#?CAU6=CHBR=BE<I,fAWGpE-l^CuW<Wg?+'n(JADsTLQV^8f(l'08,cnm_ăU"jF][Xd'scxdJEDNAM*w^HTruMiKn>PHvR+afH6_#,ttM0lB$hEbjrF]#ge\Hj1păU"8.5B;;NNX,IB5cZJgX&D>mN<_0YO4ttK+xeXK0*tqEYoC^7s,>kWeea.m?l&hV1ăU"v9;&+bkK>6>ou%P=/0?j312\V+#l=SC/O#G%I&ivU'BIaB/PHh?9kkKJjznQ5m'ă'>>> Page 4 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 5 of BITMAP.ZIP begins here.ăU"j.W^^KS+n?P2klJM2XmSdtD>$Dx]coKd:ip]+wY2nK>m,Tu/kAwf^8Bdg^?lvgXăU"j4okwG=$8.QF%LaQVxM;fw21[:*JcqsT,Oc0Vx:=LT>4tl^)J4rjU]UC+\u-\%3ăU"pum5qI%d])bXd'XD(7,Kd%];'G=dUYN;1^a?Ad6+zF)7.Ha#_8Am.33\h%yV>31ăU"rUrL.Xgs%HF)dh(Ja>a;m%b_j0kSkhy]Pqt2w&(Z#pVls^jFg],dC1?mtJPfx]IăU"^gd%nxg(;1hH,8QlrtHbet^DHur)Go:OG;C>Zsa#hbLhk_G-l1l#XksCBJ,?,hBăU"DUZB+;kqJ;<r*PMwDji,sqKcaog1[%D;EY:o1/GtN):[NC4MrX5(T\W?qX06kn4ăU"rC#Q0sV16v=S9=3=t+<xD;EQO;3UmknB4AM(Eh'Y/(amFB[Nae<%8bSoA<BC:YLăU"e&lhqdQZKfB2k.Emug33Ea'[Tl&rITXoklx8r_hn;Huw)mEj4D68q.Ks4rrbXEjăU"CxAkNiVht;*P&T+^Lt#cQ<BqM1rL*q,N/-nX5D.Y+bs&dq'P3Is0]/:hKqQpc^>ăU"fXU:C_rDTO>m699Z4>iG&aGe5c>,)=,;:L7c(L7TU#Y6=k.%HoWFE,fs--]5&'#ăU")%oHt\NNRYn=beGaxbFY9bUg7(H4h>jJ]qKGw?Zic#b2:.<bZjfux=,tGFk1_nwăU">MPb,Wlv7.savv;HLp<mrsEoq4<L:D/^CIT-2t_ZPDBeGagHAal=_*edXZL),w[ăU";<pz<E/fd\l.0p#;)<qgH/PuY#ht,)CHORmrtm:TeK/O3\C$hO0/g/0LHm(1n43ăU")VgK0bf781yE[m%28n5J*sAR$w3++mU%k#O8)kxffZXY,fNgnn#r8O+Vb#$(,:găU"h/zD\BrvKsJDJBtKu,l]Po,L7UYIul8^MjCtYKg=f3T^N[u.oJqoZ$R6h>TE5B]ăU">_<m-Be9DE8qRH^&i#\\jGPk;q4B++ZNPA/P+[?9;R?G)f'\%&\c1i/:[UTCC5măU"N<sFJJJAm-Yv(PTKn_#]LL5?Q.CA6W&2EaG:Vc<i_?0i99+C;9&F,h2A,+FFE4lăU"u'IIO:<qA]JLK$7J-L#(LFkAfRb6.4bl#d=c?4P/?ZF[xoEurSQw##hP>pKF8E1ăU"qlrK-G3XLC1PJln<qN>*C9rGeh+MHZ8Zgqb\;8O?0-TuFg;&P1>]7BO4_JM48S%ăU"HA\].g6E)/.XV]kQabo_5095vbeWLg9eQlOuGwE)h+Cl(h)x0a^CmsfVDRGGXZ>ăU"[w'fE<Xo*4Lw>cU&I]H%/myk;Ji\H/qcIusBieZrAeT69o6bLH^D/fL_:3WJeNhăU"#WUVx59>z_R(Udyj\=yS1.(\v+wSOOCwB:zEq.=IG'bns.BKZ:1RPpbjL-d_g(jăU"OF%L/=W/0I;fU2/iY>N9d,1_p2bss9$P-4jc,///\q2TVvg*<by;^U\7b.6']-=ăU"8q>5Y$Aq1&#t=K-p)Kj5dP9*d'FNfjg*q7pq2%d^JD(:MU-yu/Zu9R81j&u%w/dăU"zPVv'Pme18:O;:[+IvPex(iaw6'UfKOiu.qr'LB??*JIWo?+Uc/:sAYM\=0/V[păU"U%A/?3k<(,a1CS=PMT-p4V31xKCK5Y5K/;qYEsa5bV9%ign)8e&qw,Rwi+:K\W5ăU"[QT*3dRsx%,c8R7gKs?d\^gI&[9o9UaRCGgCS&FymeDwQ.c\>:o'\Bx(XiAEqtyăU"?Y$n*NO4g)%W8/HJ62E;OIoQ7Yp.]]?]b4i7):4yp7Zi9]r[1SAg&d%qHaX*69:ăU"Y$,.#Obk5-?B1A:lxeMS$>_/Gt:H+a&OfLQNS5p,/\BKa7gcd5VVfa:Q#w<jvk.ăU"wL&oaAO:=STe3R7N::p*w%&0:UBs&&Q0>Rhx,Iac+*pN%te/;sWC(OenJs.=l+eăU"rN_[W>*fU2\,/+8RVK.Xo6K,We]^*ApA))?/ANdQ7F*9%X9YDEC.Td#,)kn&)KxăU"D&Oi?hvYq%:'+Di7EeUo(WF0&?0mH&bqFi98OV)2Gopg/^F?+=4;sO>hVqk+q/SăU"Rd)VG??d23\*JRuz]LUR2/\RY%Ch]$R\.9YoO[b-v^J\i+;#%Uf,(N$Nj5Nw&h<ăU"x.xi]U5NN].b3(&d.&P.;W7J%>X>=Ti,E39Iq)K.G%*u+km/X/O(<&a8B?JDMK%ăU"oU(=ge[(yg:o6EAD*#OC7+rIl(.ur3Lbxm]jUuM\'AA-p3<j'S#&X^(f=#F;BadăU"^2&pgC8afxDG9UgY])-qJ-sQTb_dL3(o$If)Q/[2]0)CqM;P%Eg+'Gm+KGe$%KiăU"2hoT/?Rb)27?:-&?:a_B&gdVe1k9Sq)\o,57tN]3s)]XeASd$]LH.V[>dn?7JE[ăU";P_#3gf%[tjx5^5y&a2*uArVQo(Wptv&>/I(&0Yu+wNW9Aij>a&A1kT;qlAGS&băU"CI1SLH(o0;O/n]BI8Y$%f%)M1&Yh/YjA)X&Y=&;+>/u-8bBU)aq=0l%LA1$%Z+VăU"iU2Ph\KZng(I%h2/3fGI1Lp^Ibl<gGOR:nSRCv:E;&uh(9WT^,l1sN4hkj5q'FqăU"Vu+e).5Arv7Z8/54Lq[QNzNO\o(/>ZO=iRqyIY;oSe&:]U&yX=m?#7(l9&J1(=AăU"JOek0JS._$+F9/2(COb_\/m-?NYUGq:+0C,8-%7U0:n='WUPA[QrLrOI.t]IX8<ăU"G''O6r_/QV*E)3qe(IfH7RF1cVuoPrmtAwS,%HVMN&A%oIT:Evx>&k-6HE]imu=ăU"MLn=&/yqq-MEi&/b*G/(i;AQI0*L3.v=$FAS.f0C+WEFFv9)>/TeG(mi-GIG^*KăU"Gs/)u%XBQ>wI&4)^%e;cnIep^1JxvNIik0YCGAAwr?7=)$_eDkLWo/;['?Y1?oIăU"h%s1>Rn[BqNbk:.</W/LCqvS>vO784J^7exqWg3cIwqCn0v#M(t+(szTUJZf=ECăU"]=ilIL60Y()hWR56.IoG1;/(NC-cEq#)*uOA:fHQ%'Mh-S\dQVsH&aj^5/Wq5(9ăU"3*]1=XY&r6tu[fq6RgNN5;Dnh)y-ub6EPXC[Rp-p%9ta<7=Jo$iEVUb//HM;n4#ăU"%k/6HYG*7n_LIv^0_g9)F8=uf/4rTCqEr6Yn/4.lTRzda[-?fr6--BA;)3o9DE)ăU"eK=CW*F=Yc9+(B&QmK/Jgb/;5o%;7^*/OX$mAGkSmTE9;3WmVmG.u4i)-kuFHR6ăU"[rRYOW[VRzX1LJ[fgu,XeYb*5di4#K&>m:?Vui%EquIk\sb<;G1I#0H]rN/JM=.ăU"jiF_]#n5$+(2t28;]E4EoBH;uS_G2o242%[R+laA;],a6/G?GU9a,A%r*#m=4AIăU"']4kJZq'A&aF%T,41CHV+'FM)eG%Fbos'e%CYe?IhA&7d;Weo;StBZq=2'mwKD'ăU"qCbYmh2GIahL)-1f/:7%(TDi:NY\.g)XGkOI+]'BCCn))R#8BKK8o#O+V_PAwG+ăU"oauoHr%>u;f4GZC:[W,u%ae==276ljfeq6VI-*)6P]YeR[BY?]m.H5E+l9=_4&iăU"Do68#%Z*Y.e#g7cTUs=5aj*AOL5-W8^fVT#cO[],kee%J^T,>IA:N_1?+$=-<KxăU"4])dB)vUKu-_^KzguuRnL^28J(I42K2o^_FY_QusF&phX41.Z&IZ93I&aB%lL':ăU"1Q8%;31$62f'j%DW/??IIhat&qIfG%*A%B%5A(&\b55A9ZY#?75pF2r*+C-s%jZăU"gAMJ2LOX*1qL'%+&;%8j()o7I=eOor;txtlx.8L'x2up%()9%%%%-%>w2pGK'zQăU"6%G^%%'ew%%%.%%%%WYtx%WSgrsu&5pnByP3sRCvvTw&0-0V_JD2Rs]w)z*wP3-ăU"AFPn6n&Gi2&-6:_6^m&_egmCEQ%0)[\2+nR2QY&S2[+####6I#,;kWfLoxlpLJXăU"k+Fa^5Lhzx-nWxrM%D+:8]^?\r7>G2>i3/DT4\jNox,utchit8uB,b8G<sDjP3+ăU"Ah*%'KPeamckhQYTv8fk0CLxw9sf+/h5IgKzarB:]k:_h5jgK>dBhi3A6Ci)R$lăU";dI2f5zmXOOD>e<C9>7Uz>02P9TXT0N<FDqH8ZAAd(L-CDiaqpS:ag;6U?3UJa4ăU"2rjl*=uuiA:-&TsQpBKZ]HL015gK6Z-duz5)K+P:&t-2j\HEund'3oORAco:j^\ăU">Kuq2>5lo#pPg4$jGs^s]1v<B4+WHa)q%LEb83*+9Cg=6x3YdddNL:Kx-y.ORQKăU"h$w3kL7b:s*-AeIfKot&2K:$mPj>aI)$waLOl.4Z%qQOu*]f9;tc^__%pI:w_(răU"yShgjza^\/T7Zm>2ZsD/m\tt.&C=/6PdunKdpF.xiJpTMrcfP<.uq19wB$bTX\TăU",L$eqmMdosT0Wt7RZ-L.\T.QjSqnxclXgju20XxZ$/rb/HGxi)qeoPTZ7FlV]hVăU"6/a8zZj2Vq5=ab<dXZXfK97z9Lrr&Y*K]TgY/twdQ_.lPK2;Msg1Q=$oWTsKE,xăU"-nI%OwOoN.D<L.b3n\m[_5-lx9TN-ND9b1QfzIhaAx-G0D;HsU/vODlNcBuj\+kăU"f?R^]P;rFTl/:CwGTHLFgAfzmeVDJl<aXdW&TK\tQrA5Hu&/tNt:XX2<tnt4>,AăU"HT;fWdDVHs9ZkvWIp+DD,T(m4O==g*1q#IO5Z#JGnM&mmQ;((c'&j8)'G<\_ju%ăU"YaQ:Q5j&mTYZ*'mvvWQ-L^vN5:=1ZU4wUVdJCNku?=eB-AY/#2mDG8qE.cKQDp-ăU"N3dfe3D6=3kLzjjzHM0=n?4kRPfPD/E:i='1eIyoIWe,6KQcUJtE^<3;6eQb\YzăU"d3BSBP=q\9zvVZUk,:+tWIh.XwhgpGxDFXv0-hu'5snPBHNqt>cHF&$9NZJd?,MăU"Oc9Q$XP\tx[7UNrkv>K0Jp(AxN-[>TI4Vd4(nao9W2HK?tKZkDY.hWBVu+L_Mf&ăU"mf2vhm$ujcFXZm&/NSNi-H5Ze$lP32HT^pzTUPGhn;5C$eA16[$i%wJ7<k=XLc_ăU"\jdhA+_Ld>d]_Nue'qjhb>m4EuHlfYv)10?nJd[)6;p32[8RiA+QzwKlzdHIG>7ăU"-aO&<^9N%:tqlLpS)\n3Dl2+L#rjr#'9gduw*2usIFwkqwSHMIL+.Hx*.40-vuiăU"(]lReo]Aa*;yG<\VH;Z90n<T7XHL?mk.DZfg]e+RCR^]n;t[*>:d=4qMel*YJ2wăEND SUBăSUB V3ă'>>> Page 5 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 6 of BITMAP.ZIP begins here.ăU"58leAmjU7l??T8D5'4yuD9/AP/yR*IpMmXwuvMr4qii/ULA8Lrk#9de-,#oPqisăU"+CW>dDp$a+3;.)F'H.6<Xj\4w.QFf&yyL8ZDTsofZ#l'6E\H$6l-Duq$,Kmi:^năU"&ODXHuAH/C;HMg]+&I^I$1gyMH'AP:aG*10;&0Of_d'ABTifmqw?$KpX>UsVLIoăU"#C==vmM-p9+F^swI&GDe&gZQ#]i]cCoqI-5s?fD(d0a[_^.^wh1oBtTQZxeln?8ăU"ks4&5l)QLocvQK0[>M>3D_l#ea$E/n#h]2kf&Ft$ar*ZJj&]'#yP;\::oVrcr(5ăU"GCf,ZO$k>NEtF=sYkF2y/qwjbge_Rn33E$m%I)uV]Ho:XaC3(xP%*+-eUUxqku]ăU"*Z^H^m6umAd0ow]tunv2&_W5+Fe0Fz,+-ka8\9DOSiOG1Mz_'+LFb&h$kCGggK)ăU"7NsSn[6=2[kGzfpbK^_GJxAjC^mLQCMx:XaoCPchlms+#mdaD;K=H>kX-S#Ys$JăU"Ou4Oi</,P$eKoMj,YI_c\q.LMIZXwo>t*/]vrv>xOrS=8kfC4>7rln*mOSiAmD^ăU"KCV\i,yBld%g0L4OtcBBZ-bMif3#uOGxv<hqO33Tdz42e%.N_x75^7fm0MVcDt^ăU"J.X'qR^^i0o)iv_sRkQYi[*FwHHvmMDd16KE6Ep]mYX/xuO4x2H+sOOcW5^$rhNăU"x4fN6NuuEVcsS=[+BG8x0_70J[?&mLR4&zK03EE*G$[2tA6HwOD*B0C(j)D'^dXăU"$*1C6wCzd<7Cv\MN3VOsn?p2\SlxFnZuFLi;jT%^90OZTV(u*JtO90qhxV4Ut,1ăU"AfHp]B)3T7.(%<:p;9Ef^m8p(]f]MHr3.;MicZmk(u6vt>O<89;u*wvhS*I[a*FăU"jj[P&q\*ux5ukd\&=?cdDuMZQ'V66p(,xtxd%G?aCcP3rAdMjt;^hm_KY7%STtzăU"Y*X*CcY>xHfUbHs5l>L<I<4-hA(](PP4>VJ<%0.kZ#t2[i$rg#%vQuz]:hui'h;ăU"Fq'igb=;Z'%NsNd03kUSJ6F8TCLubcv>H6$0d6>iIs%sjQb#4^kx&y'^f=A]_;făU"M\E6uic0P,>uaYVIo6<Xe&'SfGOZC)\]eUu.=>pQQ68bpH3)Ikdn<2Z22cYZG2^ăU"f)5Fb2%FM7NSSmC1MQ%h.gu+%NRuvVs)x8NOE&d<eMZtyk-UuR^d*^*k?>Avy('ăU"ugcqmcu*eUl%E22Q&od[f<MB9PfRRSG(Vuujp8cB41QV:>wA<rdtR;<5AeOu7g<ăU"HU>P.G*ev#\miGBI<ps%XXv[zrX-6jZlblF:L6Hy4y0WFrxZD/h;e;G:6<B6RheăU"];O6$;$YWk9itYkkC_yCS,\FixPRJ;DHOANKFGy,ypASEwZNkodXCjd7#[:iIxSăU"%bXyBrSpH#q/F[1oSWQ]\25Ag(^_Dk)r>M-i&'7naM()Cgr$Llo6&(QxU2sYB/]ăU"Yjir$=6eb6dq+JeF2?Cvi.'3z?CA.#lhLYYf,=gF/M_r6V[T#DRtmOjG,u$DHr.ăU"WkCV0G=qn;eMkr+x]X_Lwew<l)7dI_&Y%5o,ad&N;x&XT(k;9M-hO<qvNmAJrgcăU"Ge^PYLnAGAZcim]kbDz(H**jH&PwG&)vyQSZ&LMEh7j[N9nBuN_p_ODnb9^]1MAăU"B/gEgS3)zE(94R(O+r7:R-E(dnj5T09)$U(W+>.Jv:OrogLduJsP6nSww)wOO*LăU"(Spy^eg?q'L\mI->r*jp[;KaLo&8J]kzZ2]27.C_v?c6_'+PCJz':V89NT*(5UiăU"w4RmwoO=d;F]+>MdHORc5E(.Nbl.k-'(:cvP$is8I2:Tu8O-Da&RJ=/[%dzNDaTăU"RUC=c'A;%<4Vzil;pSL.y3?#qvCy3+swcEF-)I?JE0;*wb2g-K%<gr-A<13(FskăU"ra)V3ru3+_IGzv/kIdOcU*mcT-#S21*bTvN45Cow]7z/^&$o%y6:#b1hloih;raăU"xk:^.4YC/8VJ84Rxop;%oV7+F#y4.M&/kg+2IUEbc4qNq(BEO2Wh8-vQFS[l&/jăU"5R]d*xYkP=e%$t8*FM0L/mdAhPj;Bnf:8_>po+?,7]jO?_(UQ11=\%.PP[QAiK&ăU"(>R9L_\ud&jJg?4ND]\kwsh:F+FLJ.lKN/$vBT5tDO'ODKAd#/'2\_<Z4gFo9=uăU"k.vi/Y;]8.;l/iE]&&&/]Z#SqbTi?qHd)FxCs.2yS]Y7/B%8#szJKakFdI<l6I/ăU"+h+c7-dguPOM25RC,e0g0+k-J9Qi/+EH5Q3&U-x;fl_u;+2JuTP[(%/VwP8G#HdăU"*=I5e;[bvs2['%69zW>.)cgd9SI'R=tZ7#UN/p7xS9nLbXXS;a:c'6wMD%Yg6vuăU"AD(k(Fuof,J>aKi2?Te=*DrTuNjgI[QMu#Cd=7oA&/k-LHo.^Ypei7.)ed'Bg+făU"/?dG+CFqdT%:/f'<dk\.i\W/ff>(sD)IxTLWSxoIRPixUSBxk(^Jxg?gd?FUOoVăU"NDO?3o+)TM/v,qf=O/lD,&\VJyv:$sx;k_O=h;0&6GOa8?Ndp6A:DBN'E\Nio'wăU"]=pDk/cB]od&x$9(xhuR)%P,0YgO&x>()Q/MPR)0-=.#UHbr4cO-,R\V#rvz5ldăU"TX9(p3y3IyE(Rtw7&Ad#Q&W<n8_[4QZ;.yRSyVl/$ATZGdkn9)dTA7rrQhff>YSăU"ofa)]v+4E[K7ZxK*_3XIWb.6S9*O:qS[*gEaD'uL70ky*r-p)Djw5cS+JMJiRX/ăU"B7hT(78Iy?XMj,;y[<]zk1tzT)03S^QE=9F*K%0>lhXDWR;:yrH'c$%'S'#cponăU"i.gRf_Z*oR6F?JQwguTD*L*<0gn_kxapoCOTS&.0Zdg[Uy:h[[jag<n#P0s[J):ăU"*D:*S4#w)6]a)S,=[j)?W]HSG-/32y#Z/H$Wn8._NXZsNEwx*HH&$ADkEn:LIKYăU"8Ms]*HsV7x)]/p;m;BkR#eTn#3osjD++ni2KFmKC6Yk,d4T-3oo)OPRg3'Pt-PqăU"yD)-E*pi+U<NOY%p*>nYGGOHAy8+oPg$xsB5xQx9RUIZKu$(Ml,ZfF87ju:MyTmăU"qm&'\YW4oZZ3LI0OkuV_%/:*BxL0I&>4UB\zq9lYX0dh.RTEK+f9O/OL?VYaZ.#ăU"W([(*QlYrp)M^gB1#.n/o.uGh+3r[;]R]*#tm]jr6/9lR-jFG0.#IP&t&n9'5[wăU"*:niRM'Jt?4[fU.^jt5X]NgcFS]iOhclxO8C?0CuC6eRpC[9Z'q*J%>,t)?y^FkăU"$D_\SdOC.kOH)3t'zD(9#T:VwQu&mz/JMAeaA/PItU:[(OpSS/&)J/Pz'G\eFo5ăU"9:syK;I8r%rm)r;%>AL\(qRvf_[R2$</P&POBFtDokW0,P)su7sFxy*>nEP<JA:ăU"0'ObG$jCC;g+8=uO[)x6xS%&(n)KmX:TxnFU)1ps=0&Op=RM:=.gOs>reU>K.f9ăU"xTi>0A2B<vu'&tZ:[adZ_yc\II7&:ikF2WRta;U)ej66Fotii1i))<Z;(P4)Jy*ăU"F'O81g[PdvN2]\_6Bq%ETMYdtai&e,#kuyXSOcd1CjN2xM9PyV6O38xhf0oHe;ZăU"'fXK4D7Hpa?\(WH(D)-t'tY\u2Zg)yc;DDY*H1MTTv<2_Eo)S%KME,K(0Gt;'+săU"[;+r383Rz8%0)O5TG5T5&GRS^<qoG_nyoAgLtQo]sR%At9-RFp3v>ZZ-46l*6]găU"JDS&JNHFS2T1eEW:C'0opoD*;k\)f[AM0X.[Ge<0/%^*RKIn//2[m/lb\Ix-*[zăU"QY91/*J?(fSz#cAO-<muGE$B+>K*'Yz-D.S;GW]RBK4QV[?(elSZLd.lfHP6)GZăU"apTi[%Gf7ZE;/:<D?m'0Tey;W/ruVJJ[gD>P<P?<KPuTmjPOglp0j]rD?UwX\'FăU";:7?,99L.dj+G?;WpW7(hGAdezd*9C.t2p-'K\.D1.,oH7c%d&\;YvT_A$T,C4CăU"#]Sv?P\>.5rNvO?K^^z7/S)C+/r#/ecGP;r%Ac>gGTy5tzV0P:ALKA%$Z5^HRDAăU"<nEScF^$C(LESmf\&]QS\lAk:=FG*ikOLE=Y&SMQ:$3%PQdx[y+(C.GqOFcSy5,ăU"6-7FbU;cdN\<+92bIAq-nLdVDGUEt^#fl;H?;lfKkZ0FgL.j'2GvNT%Oj..O9;,ăU"<&*DC*kcr[e47#7n+vW],)a2cuWF'.u[tcfr,i7*ck'Y-P9<GRbB'2XoPjgP_(EăU"9P5Ild_M-e('nY2j05-=&0_Ms6i#z/Z6d2d*Ir%vSeC+dqu(gg5VUCnP\_Hlc0uăU"T$n[;g^9b:IPJY%k,+Ql7sU7iuQ9Qtl[p88c#^,F0cg5VcYlAsonWgEYX[9H.?[ăU"zS;/DyCbawbMss.qLC_e(rZx+Jk.Sh'sWGaVqZItG*KU%DGNd_+%TYo\u])nURxăU"PM?3dbcof:vT1VcPo;+C00%Brasn1,/0)0gJ?D'9G.DOr\;O/3^a0X2QiYeyS'5ăU"Ci*=a-;nRDATG$i[O9Gk21lDlpPB-?9+rJ5)cwBw$^OyJ7PzmpJd+8Xgju#$HP[ăU"*)E3w^)KO$)6hj<?hi'7\Bckn7-TSQWOq;l)+:2L(7S%bOv<wi8skAZZ+1rj+cGăU"^D0IbR_*//K]](7QA<mMQ/'Y9nxwE[.R5k4UZ=H/uS:&/*8X/frZ>2%ad#,E>1văU"]>yCIosC'.E[;[k^<N[%1MfeH3_9vqfhaylK=w0-'kbP_r*n;vpFyVZwIVq8<>BăU"FWbH.v8T'^ki^3K0EK8z71vJ>5-$suR(thLxO4X9&[Zc>)<,\88g\j*BH5PgHZHăU"LfDOXJomQ4k78nZ%'qE-,\[gi^E[,;RSWI<6ka*1]>J_Qe:5Zr.bk/s8%uN\Uy<ăU"R(*Uev[.L&eg=<G(4a;M,YaM(4Ae:^H&;.-Dg+xahJ]fNrXP7&8zuW.I]2*9?SGăU"c0ks3kAxiQ/:RcF'+/0VUsS_G$D*d/yEc0^9t:.6FsEH,/;&2+GBleF=reG(=X8ăU"1jjs(S-H+-ueO.UaCeg-S[-S-A$)/=$CgETr&<W:O-dryI9BTJzKmsxi=Xr3MnQăU"w#^>&t^zSc)1x9n<aGp/L%)1&OU/Q-wQI+sN9Rp(ys#Hd&mP+2gb_*PqopEj5I$ăU"6wrv5<KC*u4s&*.IwBoPSuS(>Kc[Fg1B,5Lf;)Il&05gIJUxs^*=L9sT+Y^62hOăU"n2F+ReOI3)w/&gey&8u5G*dV[S*%&48UiSXySUsh5yFmHyj>FPR31YI][Et]ZJYăU"^MT%=Yv4ob)#93_7PS%0Ilp:;q21e=<EPkqYi[^Fb<Zu;<)TS)l2&U28[*:Jd30ă'>>> Page 6 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 7 of BITMAP.ZIP begins here.ăU"F4q3p+RO8c7;d/Tjn1VCSty[csPu7ErZ,L[9=\R4qJ]rjK%-/k%13iSk%u)sx3-ăU"np^/e.A-Cx_(y/we_)Ga1%Nf]Ue<t(G#qB:lQGu)J7&U$?SkGHJX#;Rg2r5=6\tăU"E8<DIf6$C*hdMyWo*wJ04zNkgiAC$;;Ug+N2-w^(A<jRX?Cwj_WDE&L>vO2uk8SăU"%MMm$dC9kqB\B)zE3%lyJg'g+,SUSzLFL1CikMLEFfQNN4#DD*A,b%Y.1(FpVe.ăU"12a(%eIhv:-bXD+)Nfa)#obOd=GR5'u'FWm5kAQ=%G)3saI[VfODJSL$Hlmf68*ăU"w4W*CTH/qj1ihfprP^ix*HOMpU$Ah;u;?4X[dzp)R/gM;qPe/5Y>jKC+[e;z024ăU"y\XHnOB)oTsiq;q]-qk2vZsiwSTO3;/rpPxK7j]t_r'q-j0DJY%D*J+b%G5YSurăU"%e1jvAWI;_0Z9j*-=K&dlI<U;UQQ>V[9E09%Vq,G<iO['7S_KfQEpUmqC]6aGn4ăU"B*rw3aibF\l8nn]kv?aZh7EDn,5[dEKXA?2d>JWaxF$gzWE&w$lp[_koTg,ZiLGăU"y?Iw**wVvBJXw<tk',e&wWs:N0v4dgS-M[\N&*/L+e.-QRQ<A:#kWCqjz#_R+MVăU"%\F\AFN'-zR6#]rm]=2pZmQj)i8OKu16bpb&\]3*v,$)dA&3g&Km9g)Y7='8%n:ăU"4qQS?D43MWlD[t-?/8:6,rMtL]WAuSp\#eM=.ttMiIvm]u.m;$NP$H=Ez:$sK,lăU"M7bFnQW2':<W(JX,,U[w]K_yM8aycHQ>&XYNW$iPkxCPjl[oS%';SQ/5>qbmPZDăU"9C4B?-,uOhmn7$a6[YF(VRXCQV(PK6E&,nV(CO&2dp(ne*M)SnJ^\]-)AM/OU/păU"/VvJm-0)qR+4Q?WA^QQkwkj2R^xka,FkO^ip57r66]$TLW:.6M]Mb)fv_LiWDpNăU"J7hlgJC4L?,MM^lJTL$ja1VEuT$uSNoe3,H-uO545_6*jX3-uFw'R=x[8SoS7l^ăU"VR^N6hqe+-;IP$TW.gI-Pxw*hDx(U=<m$rv=%X-><'q7sT-cYVDYAI#B=b.0UHMăU"7M;ue%1icY(7+%=(':-lAg5eX%'9SA23HU5dKigXK^tRkh+r&vL$>UffX(a[&VcăU"rAosY5h:8=Z(?x'pgeZDSp]W2T8O#SLZEWE2jc1c=5o]=5a:=I7LricO3FwO^&uăU"O.&%;:y1JD,w0xj?<tf1nDJgKR=_dI?[;B%g>Tw&yO_q&=Xs#96)-&m4[Y?%1siăU"7.A,kCPRV<C\IqS(uRfT-TBnL-%i7,u<YWu2CW;UWBIiHP,'=D.)#$5#GQQ/O+3ăU"vF9>*_Ic+psW$eJPDYV=5nruAC#:tt4UK:BEw3-7v;[ol+*n=+2nruP=D'u*DqmăU":z;k?LVD\l/L0](uZlFg<.iwJOrHKHfH3Dt&WgDvraQ>F-j[;mY2%%w&hTM5+A1ăU"Jgq,xh//I&_:GvE=0-kZK4Y=k[OZEajhiU-R<6Vh?4UeB3Hgq=ij8A&(D'RXi.#ăU":/vp.UAhU%GN52Hr<&oL,/#WaIGDkZ41bPoq*hqZnq7^pk]VD$%LCWBpFcBWLa1ăU"5,ZVUlP=Q1>n'GPtrvf4bu,v:LQ_MB]rJf2VZh?oMZ=F72=t6KfYkKT&5D/Rz$văU"JoSJvy\W(Otc-=I^P8EKQOX7M<i9=MNsSo\%_0^uMX:A'-/_nhVKa^Ho>5Q1JZhăU".bcr#LFR5EbH%C9l]lBIN5_;'(d]G.%m'e5%k6[?%*Ma3#myA'%$GN9[Y*4TFW(ăU"w*D>53MUcAejuMJHeUH&d[%LP$tcOocTq/M7JYA*BMVxytxE+u(iJ]Jl48NtYYlăU"4tE[TYLZ,qF+bPNtgB\$grrgpH)dwrK]fC&UFcBAB/Bbk.dd]e&Nc>OZs]=d$+7ăU"%CI:JHde=8:.n8U#=U5Xh<mJ*&O)A<?E2[S^u>\.t\K3D[GX\aMoYNY\)QGM'9năU"';)#V9*R#-*GWm=S=+(fwN]+[]LgU.Be[P6mD=rgEc9F<Bh.Uk&gio[<-v8V:N0ăU"#*Z,Y\jDPMXBF(,n$zeA[T#T'Yn%eie:K^4k6'VoSK=RLTPZmU4VuK#VMq:B(y6ăU"d-#/yZ\:OC*gJLmpt.J?:n/<\sv4XB'nL?iX/0FI<FOE2b571Di&XE5HR7#a7&YăU"^#YE[3%K0uDcnQ_K-$?/2/I(^F.%B%44+nhc*RYHRwm_eZ)RJ^E^+cpIwvu9w5\ăU"0V]'[fKUH>?l,hTpeK9)5=#WlfkCrRa8m$qI>wg3PEre$Df<?JR=A7am,,k1bohăU">7e+#6orQ8bnL7\Yxc4^ruJ]wg#j;Gr$mN6DN4+DMt8:o,+umDSMri>4uSL[rRqăU"J;I4TFkJ;a3._[>.U6c.RL2YJ>-5H0EAK+^ZP]ngga=bL>8o1RA=\ER$2UdYTm,ăU"6W[RdEl&#&'jCz_k0L9SGQ;y^[=-Mu184EVPNaxej$oI#eop$$r4q/#U;?tJ^t5ăU"1t_r(I%c(#HDcI:TLixk1dD):$;uZG1crIB_KbLhblL#-8l[[bMF57qoB&b;;VcăU"RKDzUl?coB'/LO.<j'rXDFrsSb;bpeI&4fa&+]?q&4KCW6m(c+H4poG-u9Md:6săU"Um&90#QWB3AK^18]5\hy0(G12goEXjAIS&Q-+..mg0m=mYXf.MMwEdp+_X:xMCCăU"AgZL-Z<#X]LSKc'usM8lq]NPt6Bv.k8ec_;#cqf5(_K4Yp>)uI4VmyPBlW[E?V8ăU"\[a$pC0'd3U?DkN<nDGBEKYx:6u0.BwXZf&el(R<DPiMr9)aeDnC8\Rv;.,(OM+ăU"P=5n#(hKa7V6m%jknIBn=4R^E?Ja'T0#dUt9;ZeSB_tl;ERL&G<9.g(aM9tmCS]ăU"ZVQ?mT&/O6G'<6_7M4q_qMQ_\w(%9%0DwA)f3VR>*$/N]+ukNqZWtX6n=,_hKEoăU"NC*Nw[mRPSm8;uh#:VWhbT=[3iSS6L(/8_>U;W>^erUu*x,]PPHqZYFvT>o4+(/ăU"\btZ3P&.e4srH%3,<-u4ESZ;7L(aam_yU3Y4(-6kAg=(s^JkC9fbc[c0ju,CQ+LăU"\D32LlSq>f<L<f?p]_+L%AfZ=?QEtl3S=Nao,oUu5ri<m/=U#[sQ#6G95LuMYP;ăU"(O(8]ZUo#%&d9?H/i69f[s1Z;ZX<49_sua,He&Uf]=N<gVMrS;M+daBWidtN#]&ăU"j5fN,$fdA:Foq.XE?nm:T3?]K$H5srKur,I'g4WX05I26#WV:ne%:9t-(8GiQ/.ăU"#c9a>]J'5q_p;106r=D/7%2U+??OaV6c3QTDCJfasO^X'/)=qfv#ZWgE3PUORD8ăU"t?Qsf[[cd26:D$r(iOIGO7<pT\qyIG+i\yI(gq;*\c%0$X'Oa2ZM]tRtJ8RjBatăU"0vuwQw=Ot*L.ngW(SN#-zDaAJ_Oj_16c_kV/dmGzvT3dlVzZf,o$[<LC6Cd#19uăU"ThKtE8]RMmqr6LC2ga^$c;,Clt_ZTN?c\#cA5U&bfP*Mq,Bc/;,4&60An5)AZZ6ăU"MX(Gm0&C4YTs*kdo.ub/8t-%X\WfB4JJPLfBr98d,%&K<r<2(O#Oi,&.1MST%1făU"[]G^e+G:6?\CY4o#15&-cdpd)H]qUN9kRNZd>6Xtu3GNs^TvhMjKm=&*v[c/vK0ăU"eG$Li?,q7ti)x:Vo:xfeqXI#:OOLA7iZlh#i7nGmR&9dr,zX1BK5<kLoX74UdsaăU"p.sCImF)fEs9[ZJ/n)$Q_/qyXK'R>zL'gnByH]<'zAK>Fs?AuD,y;wMMm/7+[)SăU".Di0C+?/f6LaE=Plo-jj:^+O((gEj&#F9nApUB\-*jiMeh/sK5Pmod5d_an#%ljăU"O$>cHrq[NdVqpLXGc%v))85tw_eN?/VX4gwO)iJ<a=G2k*=\pWeoeg^9=w6f%g[ăU"MHe-QPHl]8D^kQVYp>JV3Kd))P^-b3W<4JgLD]WN)lmQCw<4JlH9wuJ.:+u/-G7ăU"i4I//qqJ/RpAVKF#fV[i[&l\kp/S9[od-Ea3nhKcl,HZ5KU2u6LD?'HRq=DG#6KăU"dGC)>20m[;\['*eG3.u%ed,h_wnL[$o1[VQ[cFA3=kotE,hlWipt0<lN=D-JUL6ăU"[$<LqNYgxKMZLb-QwCcG#T5Hi2hK5?S-]Ai5_)2;b-6<QTp4KrrZYgUtRlnl=oKăU"[WXM#aH1Ufl-M4FjHf&Cg+Ph>TA9sODMPqU'Rj4%CKgO;i]N?ke(9<HMG/DkPd'ăU">/D%1zD3(10kD[os;(QT[Dhe+eaF&/(q[']6Y%'k+'=GsSmS/P;\+C5u=fmq)K9ăU"/%O_+A'>[hE=a0m2XfR0:UnvIc)txxr[6:^[T7,8R?_o,GG^X;T#$q]tF22pq<RăU"(/mWt-L3#0Y6>'1FRJMm;NfP$#DX^o/2i[,1_q]6]F5PATsBoyPH?5J.w_2kPd.ăU"BT9nkxmP[i_'H$9Ok$f,4D3riPwloI(Qw\.%8sPGwpeV/%7YIKUg/%rU:<UI[DsăU")5V><Z4_%L3F$Ct[5V\KU3JOk9a&40t)2wA4UKqZ3^Gk&rJtghpD?5M_F>?km;qăU"E5>G+5B(osE1q[&03/o\bXm<TPVDOipM[Hh1BgeNdLY;B=gB,*kg$cl1RlXa,vuăU"1NDt$$qkVwSQJlYb2]2PrADPi=zPI:YBu2m*9x[AYy7VdGLLJ<&R*ZiOf.zqVJ:ăU",>6&+NtY8t-d#1_eGLMyGU.u/uA+9fE-U,XT#AnBUHqk%(VQ[/hl&%cd^/PI'X:ăU".?98:.BQmn_fL8&_d;2.I7p92Yy/_m8?E)Uh*FR4<bl\o1b9#>DpMPugJDWMX&oăU"Rco:<*Nb:mh(#_zLh^LdWGNPXAE2Xa9Usm0s=T-LLu42,v3*60w]UDdL:DNGZBsăU"Gc#W>i7/n[aV>=bOY+$r<z044Dzbb12[8<?.$aUu2Wv6gU=I';s+mLgDSX\oQ9^ăU")s7<(+l;n7s3U$9p&b<_<.jV[tbTWhYAj.$>f$B,Ed+ucah^2))10-NEI-MlR'eăU":Cd_]goeu;Dm;8IoZkAP*nEQ9v:f5<.aW<u.ULmb:6PNec2u[NqCcVRL8m#_m*PăU"Fkt5P9&\Jf-P?U#=$p\c6IpgGxg/84r\d(UX)#m43_'tfY.B[ub7IBOKeOu\NlnăU"t>_5;+?0OCoWEDod4o\Av3t]MQ#'afHG3Zp)1Mg+YT\)(uRM\;Sm^V0V3$C/skzăU"#0oT3+5-'ICILAgd*Q:c?jUD)#%jh/q0i%-%9skv<h:QiI??M7sj*XRgSYUr,k<ăU"W4)d)XN%>Ckl7qK5y5kliY5.Qc2)r7sa5oR'[Xdq+csNbEtIPJY+$W&>8UJh'e.ă'>>> Page 7 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 8 of BITMAP.ZIP begins here.ăU"3Tefyov>h;Kke8vf%NK&8ildY]QBLt>rn^\ro>8s0;30u4jmB7qJIxnJ\YH03:oăU"0g8.9#<,G_m'P>9QNCf*K=/ZIThJ8KKj1=u;d;UYOEcB)jKCUOhiAwA-(F>%UiiăU"G*Y;u$uq\I[_P37JAR%2T&Vl'H7XRM./H:8tmdkE5fQ#L38l^WjIQYgaBc+t(_JăU"wXis=6d?fM8.F_nLUnKq<ptR#b*vMCmLtf6xi7Bj_hyQ+J(%e>Qyp'9[evt*+W2ăU"i,T-b.3A;Ltfmo2PywxqE?_y-mO:$Cd/P0ngt-hBu(EmtdGSe.ELk2$+i4M++=kăU"%t4Yb0m.T(^.NQQ#br1R9&p=5;)Crju5DQtzcDeq1/SYHTU'u)kC<C39<Ighr$tăU"pJYA/CdFu>%UNlKH,5.h45.$-_X1TQ5ZjHepd#S;cMObivA3^HG]8.n>dvVuqjHăU"<?D0%hZ$S22X2Q:9EDK8M]A=$NEfNq:iT,:Sd&PcFu7V&qMKb>vuG7.O:]pbBXzăU"Oss:7':8>pnO''Q,.9cM?2WC%'D79HsI3)a#5%>ZoIe+:>xjN<IYVaGV9b.InG<ăU"<C-9)flLg1'<_<o*.#K;/68#;*jc-2.3kVl#hhHPKEu77-%#B6UpZ-u8cJn]O^văU"+3ijy6u8;timP&agD]i1VtuCYS#0TsL$upmv&2^Nhali'Jugg&/&kXQvlUSEs&răU"fh,Wq$ZGE;(BmiUTF)lVg:k;oN$/OGh#OIWK4VhB;oH;3vqt:2X+u[#;Y2fT/L%ăU"STX3l+CA$)E9$kS(_=7D<'q=C;4ht'?D7BfE9_prr_jo7;B<v'%2XOsiqQX?a5GăU"UnmhAw]AI),VQlY[R<QUI'j]J.d%5yfZYMIf0Vs.O[Mlfj)l.q<J)bj3W1usZUbăU"8><GarQH_#7BtVDO$s#/lw32i4>QYvL[Ts485j.x<LlM$l0.G__9\Hc]OuzxtWGăU"7&K?%L^u<Lu[tUeKC<<.P:?;UI0Qn.b5%FL&K1L1W&0Zfle9)uw%CW'EqNYPVp]ăU"V10)S;)28%88p'%\5qYh^U]>_hGABsTB$RRy+CrQii7?qGqRYuAFBNL3sw<H(2+ăU"nl.=mmfHanSqJ:]I]VBL8n-]t<ECTDfuHx-$Hu(06_MgbrZF]SvSr,X^=R5ZqklăU"c?HEPC4f)DsZbK<zL2CZUNlJ<lr:H/Ga(EWdO=8ZNdV;8Mb_XKQAe9$<9_;_Z^AăU"19)^%<#B<7O<<GO#F;?o)0?d('q5K))$Tg/4c/88AlmXX%I:pUKjI\)p'_*Bg9jăU"S;FFFE'?<wEmM/Gq4N9djjevZuaDl>J%]WDdo$R]xprpktZ69>.4XdxT$O<w'LEăU"wfhfkMXFZu06HwZ5$eR<2bXgJjb#>kAfbZ7h%gRG;m^6Hk-PDfS7N+G\S4g8y,?ăU"oI_xyehW+2[/>[_-SgI+Qf;cv#3B?E7\H^o.:I_='#E1&1FV8DR&1:uGJ'1'X2ZăU"0/%VOv]o1d$08#N[&OCwO1g,2\N3,tSfK&hfDmI4xx$$CU39%ydUi-HWqArq7mQăU"PfL^N?0lbDteGv-Qx;>:k&w#untdO'?u#:pux*keZ(D$MJidHNQTj>65]Wj]rk8ăU"_9uVMktoBb0\hZ>#,](^,Hu/[tdaQ,:6tr>&*L'?VQJ)cgs2N1a<K9oZZ$n*.?%ăU"oEvfUaPhp1m1$-/LurWM[ZplF1f%U\7IsqC1/'mE[8S$)u2n/.%Fje\k&nwCyUoăU"4Ha]EjOC?1htaCSU_kk_<qoNP&*]P4XPV8gKZuwovl7XD_Z$V$NrVFZPN<fN*>LăU"wphF<x]?cZPbHuu-fquvb.(3?^KcQ/s89Tx,Btg$XtpDqZ\R5B(Jk2m<v3rN(_CăU"i3V0vUpqc_gocNR%o(qWtH0>GTliTo&aJN9(wKy^8$':<+=wV0+nRsfgGUviC>WăU"LN5IAn?0]wRQo9'Z>CEseM1noVn.4VxF#_^)gQ5Zsy'%WT\Q0O_pGF62ZtcbNH9ăU"?C6duvqplstx-tQU(Jnut^Y>fX3+uZfY>NUQmx4HpL45jCv5s3Q&2l]7=_mlBYPăU"4$bd$j-^pg0o0',P_Lr<:b(cQ4$M7<<gNd&x'nK[NWHh5269c1]+YPE6[t[AU>iăU"-lJ#D4--%l8Qy'4(huA=e*^Ifa#R>rwm-SfCov(XMYtjg;r[.N?0?G5KHCV9gF[ăEND SUBăSUB V4ăU"01'#jM#(-=D-Dta$U#X-/C\B=pUL,nAX,06tNWxUB(,TqYEY;>otTw7PKwfTtv8ăU"Xjuqv&#]8>dklNapHJU4Lg$WNL7r$li;j2x]P8+h$$9RHn;GgHK3%Jbwnlj8;DaăU"Ejn^*&LkC:8:\8X4%h(4VUQ8Pwh7t2[nU58s*+Ras9,%U)0>O8v%]xc)c1-9:%9ăU"oF&+Yb1qbONmZ)gY*H[W#CUdZbuQ/P20>$Xh\nqAxYEgm^.5qVTWvMqTcX:Nok.ăU"s<H?,8g&^q6CEgc#NoZ=0T^SNb6E>>milnh(h#Hp5BgML\iH3RiI?i-&:R$'93AăU">ZTYkJ\2jl74FB0%/$R3DwYeA\W.7B[4O*,3HV/f%Hn)*]#rcE)Q0;'(52;DoM6ăU"JZYXiI7)7?=7OPhD/8CU0BF)BFUBKHq9\gs44ChXgD\TML01i:Ftt+oHXS]DqGHăU"c=\ZuHu1s-u(lTrx#qrpd]5ict:p89&ap#Zi-$h^DFbrcVGL8?Tn=\7$C4\;];[ăU"sb;jK4ovzHa7Jhais#*(GmaxUEg;cFB9^Jx0+r[gzYX:fBXU53G66RP79aZ_XJ2ăU"=qSg,3Jq5YHY6X%P=2(?j33&\,,lJ'cCO(#G%&K=IVx#)aBP^HdAk&Uxj:2DqkaăU"Rzz8Biq+GZV%1^rYx#7,5MofHkfx#ehtNQhsB2u#<ctX3k-q<^ouTD$kMUB_6tVăU"6Coe^vVTGL7ib(tI,uxvau=#]=06o]hCtE&>4Gv?U-?S;Bpk0pE\=2BR2X?*+s:ăU"9eqFMgo(#7-K;':XD(,aKd%;7'G=UUYN;H)a?A6U+zF7&.HY_.8=m3(1\hy**8CăU"r)ivLb[gK&FUU$A_&XYCpG8mBH1^14j9teeVt1dd*2LF6stK,te\^,Sv>MmCdV]ăU"-r^?N$x%tjQteRTp$Mn-_t\'kXdQVmL)W4UVjcis#IXu4Z2PRah$[fZ8lESP+P+ăU"W&01shhdxTPsaen>NV_Q[OP\3]65S9SV*liIbS'8OZ:)Yo#(n0HRd[qj+LF(QJ$ăU"RA4Ao<12=>n0UU#<bHUi9fF>lHhaF6Vu%(O^m%J&r+V^tB'C7^KyYj4kACJY7<:ăU"TF9$SMJ3C>JkQ<9,L8(nhB3qBDv%ClZ0L$hN)M_>v>,dmQbl<?kRh<knw=wo]\,ăU"#$8kauV0IbebNdpGcML+gn?$7Qk/X%T/fN=IAtoB.H3w:bImy(z7(l)FCcK;nQ#ăU"[Egq/4A^=gd[-=/Yi1,G5%6SE-t,H)=,:5L7-L,7HdY0ZDk%:HoLEf,fs-]=5.#ăU"%]%o6'*I6n,_*)C(p7$12?^pqsvS_T'_C^Dbi8V5usj]SD&*tKp$Nc:N7BWgrrvăU"8XtDs:u,xh<ttN8imivTv7nlbw>ZmS#rbVWpeB7st,l+>naJ64C/ZlFoh3c-'y&ăU"#p0Op[5TntjGSs#1[7K*E6*x?i1ES>'^$<ZsJKY1<E8eJVk^FK9**T?)7$&kUs+ăU"QdhqbE+E-._#XkKV0B)WR+P2fG)$UQ12OW'A/eXDbmK.u+\)QP%-gL^KVL2$/grăU"77nPr*rnItdI>NgX>EkmuIoN=f*^ANc24iL2nHklqAtljHuO#c?dKsL,p&3Y]faăU"^hv2:>RfQSr&8)-nTQ%/<AcS298QRECaD>;E>O6'DG*hz_,oVYW?V:Eh\$.RYRPăU",gZsVW=qVv#b3d#0bUsk$X1Bk/+?#Rm=1-^[4J4V$Kp=$)%nVU>UMP/LvXfEX=%ăU"L;<mCo)?lt2Em2<qmPkP%Xl+it/If?g]J4SU4UYgS+\Gi8a(7s[/x?QICjX9VT,ăU"xl$aX,Hgm.R/Nn>#NLCAYC?bipYTXl>Q147rli=DFJ<[c_J?e/UUH)#R0rC0g3TăU"9c6/v%b>#;QFUq+-)#(CV<=c[.,jd)8'iC-_DlDmow2.)UcAK?8R3C/C]W0#8'YăU"dkir7q?sHfSbPY=dJV>.g*AD,oGA,>9oVLtVU5HVn6Tq0Fdd>Hf%BjO\*x2/P[WăU"cU&Xnj0Y-JZV2(&lF,)JkOqy\+[%;nfJb.*oxMTpVdSmqW=<+'J74=SBg_*8c)OăU".QKq&PF8k9:;M%++(5(S-'aS)]D$&sDJh?/JBON%]W:?&m/3t9K>9Y(oukm[]GqăU"Y.<h3a<fZ?apFgU<Ji9,)er8X=Z;.ltby37&l*/VKR4)cJ-acsw-&,mz1Z1(V]uăU"yBo&2jGN0u+*'CXAz\gyp$A/YJ?,ShIxNGZ_tF_w>edoBMBk\zP]>;RrrR^MCT:ăU"R%E<H)?-AmpWGq&mu<W$$?Gq*$Jh-k0kNWO#OXfu'?%8*.J6'+'Yp37'jYq?K6făU"'-NkF(kSAj*?&*IqmHZODdCi-SePxq*cjJu,'/1yPcQu*LEKWO->6+x6Y/(e9rHăU".:p'G8GgAP%C>rKI6E;8OIQ7F5o]Ge?]<iba)4SThJZPBBl#++]UP&Jgk5q1HO8ăU"GJ:8C9/[o^xe8]]K&hvWbHE<oPXl1ukMR0yCpr1J?d$q3ubLO44gTJ'[iu>q]-8ăU"u(eCjt?WR.0>(*IyPg;2tv;*S>I%:&Q>TthLvInL1gx:%m9Q)wM4%('LwK$1D'^ăU"YvAA3+)-\YEGPr3??QmM)bmEXH\ME^SA59PS#I*?6E>#ssdTIW.N;>A57R.66AxăU".&5a9lODyaW?.R8X%ojPBumR)uK.d4WV_bM(?];[e8#<'0PmXE/I+,E]9-^-*H$ăU"F-'[)87YU+Y?2g9&_;3)]P2W%%MXkp2]LI;OyME(id\AhE#M91)DtqqpeurS.2văU"N<vbihts'%bVEG&;:5'*uR&P>iaNx%Z%\x&X*Bhmd\;f>J+Pe%3--rr9n6itj_MăU"O31*r*3uR.*pQ%ETD(&IMYf+DnhZ2$hsxc\]hr2\2XFUQm:r^N>]c0m,;1U,FucăU"lO0WJWvqxN'Y&0N=ucYlIH]26DQ%K7&Pk*5^-aXY+A9W6%A'f+[2Ia^+qiG.-qYăU"X&70B-X%F#Y_e/(QJBF$UNh1P[](-dAfI4Ema]ABmA*8h.GCX]H.hV[dj4k\ESMă'>>> Page 8 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 9 of BITMAP.ZIP begins here.ăU"3P#3)R<[tq(20+\qC2*Y'EXQZo(ptiv&/I9(&YuS'yS1hAi(a,&Ik,q<;IGbU%qăU"941Sr]ho0O]3s#oL)/q'%%-u'9%XBWv%F8B[#'QO3&p6K$K1.gW+<_t]1=EA1)1ăU"WC'9X#<8FU,%Uu?9Sj0M=e?fnKUVE*[PkB),G%>NAE):,7'40$_kihHLz+l%/s+ăU"?7)1ArE_xJ<;NFCEsgy%i%x:ac.9;&eX2ja&O:f.6Sv?1b(b5aG\$+]8O(=+EU3ăU"&P%]h-8LErQO%:?a%VJC9_>_%:2]ji4;8c45%MK0Qf9U)1(&hCHw)rO.tq[I\<<ăU"G7?6%n]'vJjd7q%f(&H_7R/mM2;^jZelJlj3%y*ChxSf-Bkfs'xP].7GkE\AXgzăU"qTh[9wPgQWh&\%K0ci]4T)G';?6sApU)qQ-8GQ;3_O&wqOF.W/Q9i+AE_kp4\FqăU"i9/^6kBQ->a&4))^e;%cngp;\1Bv7GZrULj4G3KBv.K9QBF].HNJE/=k2?7'2mhăU"T%7%P\/1)VC46gjW&;(VY;a0wMzDYq1wh+F1kFDb^yuQ8Po)s+Px'w8P9hA1J5KăU";16;aWUjj&;Q3_^'=[u6,)'%Y)o.%vQ'ZAH0O#6f&c1fSU--m[mP*vG5U%>-3U\ăU"(&S?a3q==%8y5x235Ym7t5bnDoYm\I%nCI#Ai-4^*e=oT>,V$ecXc)#*G;-%O(UăU"w.]0FSCeRaP3g.O9s'7D9;OA6=WL9+:L$ID,5L3]ChLfp>Y7hjqCr5H?C%,+PQrăU"<ENcE;'p%6#m3G/*6WAE,#Qc)0uAIN%kXag;Xk3j3u6[KH6eT#(vo.nE^-O?B_XăU".-%I0L&z5?0t=ZULrbh8D5GPT%Cq'W[a^3rJXigo%m?J7i<GKI%#p$HCnJU5TjlăU"E_']N5$/+2t2g8]E4aEBH;I-m$K*IAvPC<THCa^DSm%-a2aF=m(3POQGI/q37A7ăU"AHajF[a%m2_fR,)U_h(.Q9'E*5/do+sU%CFUiIh&wmD;CYo;O-tZq=>:mKK+DqCăU"X[Yh4G7UhLIK-f/:%7(TDdiNY$I.)XGHk=X],7KCs&'(V8+8eLf9\Q3F%(vj3(eăU"pqE'r>u;RfGZD7:Ytv9%e==]r6ljCfp6VQI*?0+PYeR-eY#]Gm<DAZs:=_*4iDoăU"^6#%Zp*.e<$Q-TUssYho*rPL5h-n^dbR#cG)[Bke3etGTg,Iw:1NA?+9$.<wRx]ăU")d1>vVK=u_^LIzuuR0n^rN/J]82N=p^_:F_Q-*CO8uRGhf1#e2*(Fd>2O^HPZ*#ăU"&P,,5UW#E2&O4ih*27a2pv%[2/6PR']3%-q]O?g74_Yj#+2.W<IUu'#S)wOgrF3ăU"cmbc9=g&u-EJ^%0O/X*'u&.1EeauZWxuvxS--bx+u%p()9%%%%-s%=2pRGv17+[ăU"Q6%(%'E%%%-%%.%]&n%sSgr1uLf4M/b4M]#D#Ps6$Vb^.SnWus/Tmey$6h[/79RăU"k4>jn]UIs9P%e5y%-6F2]n+nst>*-r-LK[)OMb.iZ+fel;QP/wOefImA7N\iNo'ăU"*jqj_In5i0D-otHWp>HW$rswul-V8apLtnHlvcwwah,*v8#si;?k8j.rCTWD>zjăU"5(jAg'q[pT7R8cHj><.A_JpeY_mmC2ahhn?+++m)--CVShq=/BAH_lOC#C3\?UkăU"5'WSWUI5FLL%8I=1>$''f%7-15kzNZ\pV1*1A#r5BsB=fg.'Xb=h\%kp)R8&P[<ăU"QbO6JZ+;sc$[,LCnDG)vn2IFp$JhS(;5[RI\(^'a2fW4=sQ1C1-J,T:.[?1,#\6ăU"'#(IpIDEL''PD=Ir3+EL:^?fz&+#Hfk7eQ?d%YIvGL=2,:37+e>ZB[*.H4:=l9jăU"1':#B&IaP005p-Gi].-5z\7gQg.S1Un$aaDEOK,7lpqZ3cvJ'LUDOGYEP7#%PpjăU"1iwH.Z7Vd^'ESQ:31-3)/=D=6I&VT8l.uc]i68=-?fDECkZDB^KWcHb^lk%TZJwăU"/F1d41;Lk0+-:a'(0debS]PgqIDdt\0a3m#U6IgO+.\YgmH':-N*2/3GqU%a)%5ăU"l%a6a+GL#U\i[^3kXsgVnIHUHHIxBD05roBo5i?(HFHcWYz[NgY0=()BLU:\S.răU"Sgt$I0:=O+XH_;n%J-B3;a:cGJIHAb/:jkQdI0-kt[A6WOeuL&3:[P>^&B'Eg5găU"RY$:r(23GBO:C)z0kO%mGXgC#Btn$$=RtWskpZ>YBQo1)ZDbSrY7>M=?0:r=ElVăU"]pN/nP<aM1>7-6,F=OUOevoUR'F[O:+b44udK5]HZS&169SIH0^]W:NsCW*X;u3ăU"Rg6+Vqh2l+%Gr#_(<Y)%3-=TmqbW46rTPHgIe7X(%DWr*HBAH+G<HRgQ-qHZfPnăU"JS'$]13kQ^9F+V6o#Aa2=i8b2'&#(Q%P]U;?IV-a#aHQs:O:h?+vPmH;Y[n+KsNăU"V/sv/N9FyT-G>^H'c$8b,\7slMN645TZBv\BWXg21KI]3(faIf*0%P-JQM53M3WăU"Gv>>KIhQ(6u*ilwE#,B0#1THROL_6Vk6>2\+LiNac+4Mt>B.NOdE&xUrw&xyWlgăU"OGSG#*HrrusXxP#->>8+h0STFCP_=J,ykb-l(PDb)r\R*0:y\k(+nMLmQuGi^r\ăU"P%yOn%LPhbmIsVaItKalT=\W/m77iFBQRDfuAszS.4P''&tK\+en\]cABWM.g?&ăU"KY*G]=fk*,CmP\4-p7ulI<$8e9]QOPOW8kdX)_oI-;?C,fS(EJgS7<x4>^[nq#BăU"6rOkk'6%)_##A3a[^?hGo;*bbtZh&Me7Y83'ez%m=tW+udoP'*r5'4[4e3WEA9IăU"v+csYR0jR7<FC'he8#9InckRhN0DK(f)>I:+B[?VHF,_6kR_XijR3p\:O10m)O-ăU"agml*U8CiNfY4:/%^Yz[NNNE+<l-M^Fa/AW-TRZ=Jj'Z<Ht*-nN<5-?2^Xb>o2'ăU"ndn6%'mr<rIuW/e9^ri9nYl<\kOH*F?caI]gM,-hm<72>wm6P(BNw29;>2oSY:văU"))ii4Et=[E5I%65P#x6Cx[a2_<OEDXR7ke$,-LY-HI51bdeFe91hEWQBR:MsccQăU"ft?&b%ISlw6&F-aQwrqT44UJSEGp6qRAf3:9JD^]#INh+]qUZo;HEGmDYs^_VlBăU"#amj0,-j,OoWd=L<uc.tCM<b%'O\Gopv#ME?6O9iTQ?[.0S*5(m\$%og_MA=H=+ăU"i&wD%U=/3]e=t2HipPFV?6KQ5t\)fUg)^KkpK'ZO5;;vuxXI+ek6\_$Gk$*uEQ&ăU"D>exrw2dOzxIY?dc37vov=J+?6YsdP(K[itM;?k>L\RCp8u7YTD2EswQ*D&=y$KăU"r4&+O?nve3X?f5D93s,1)i.;+_E6/sj:<i((T(ZSjC#?ILKY1w1eEeX>A/>=])_ăU"As67w4TM9f^frmD4z5mS]i)LHd5Wc5%LBzJ7]'^-1>aYkVP->iDm,JWLnIs[-47ăU"Im,//95*^oO)IcbRRBQ?nQ?=(]m.Wla^n1+^i],nEwMlMec5D7PHLu]cCLfQr'\ăU"snn_+-BAfBZ-/VM<w#]^MNpkJg-g_.9D(5<Pr[7IUXRJ=nO<r.//5C+lYA?G6ScăU"k=H+rnJ0s/SF#nm#^f[h&-+m//dL^,m/Gw+9afl]-^t4fB?PX96As#p(t_[nEjfăU"-M1CEuTH?>(Y-/K:IiogTO4JYCP47qwj.7>n*m2Y^gu%PnWlZg;1mR#**j&ywWgăU"-;)w_&[HMA,PVTSW)Bk<Lma^B7sGGwH5t*4IG0Ua;6I8=&HZSm&a*.nR^;qMdLJăU"aH.HPBIAM)AO#i^g#^f+4d.->bE'>pk3[5,xGKAw(_NAE;(45HRWYXhb177mY&>ăU"Yd2a=YMA)aJo]r_1taqo6j>LI>\u3t-_uZ-^Dxx;dC0;CX3fa65Fx9+\EC\Af9FăU"PE0gMBUS.wRMxxxp*43:7Z8vLjK.GR\)Gc7EA$,y/&L_jVa%6OB=^_HZjqp,dMFăU"=L32lK:u-B0tn2YRcy-CvZJ5^ac[A,q)QDybSct=R+>dyx%/*LLfy,,6&ITjo3PăU"18l99;H9]%MzSiOYx-%pZ44ZrKKX4J-=1GJfsa'BAkMk7AyV&a=yPo)4_DI/ND&ăU"ffX<7X<?gX7z\gl78\QhVJ[mIWO[M$xL93QdQZD84KuncN^>T66bU24v*Xj>-_EăU"Q;NdXcPBk*M7YZ^:o5[sRX1(M-Oi6nnR5t-g40Nk6)p%,5vHwa'=x#RC$\I#wx>ăU"Ut$_-es>&t)lHPb8q^]WW*WKD)6Nm>:l[jZP\eo=([IIO4)YBGXG$*o_'=+D-=5ăU"M4TRdd8F&.t\e?vvTI8-&5m'jz$w#a)34CIBGpdu-#StEQQRNR8KpLMnAop0Q/păU"<pj8TR<x5C<MB>hgHcbCRlIGX1irbl]dPoeVEJ>2;-rR,YahjKR+Wt%#Pjn.-SCăU"F[7-nv7%L7n2aB&T*Z8u\f'&[tjqLvR$ElDx_r2;4R8&Ch:MdI=7Eaj]pm4(.oBăU"YS1v-DLCUhiZY3&Lc-W8fZq/T\r0CS7[:X8M*_mYLtjod:=zNq5>daXQfX=1S1oăU"hj27AGrJ%GGJQXz?\ahQ4fsr,&3#4d,4)NE)3/C=\ej#Ik>LVVbo^QnP?-Z*VO/ăU";:EV9YbXF8'U[[H%qIob13ei'ozN=xTWsE6h#KorbV7GmNq^'3][[%[ZjF.hx[8ăU"%ru=Lik5l#m^5-2<em\C+eSoa[Ctl$5.7/SjgSI/N&2uUb1YuK(9dh^CXpu+EFdăU"P$WMnNdC]z,Q)m+_CWDz(z_Ty/hBvMJ._MMt(&?zJz5]>11=9_T*UFw37SaPAxEăU"iOx#Txt7FoHbpu'],dUlOTl'g2HwBIDbmnc8&u12HKWv;12ZU?-ECArAhZ'4w(săU"kCwV$9j6\/VrvNs=>.v>8Odu0$u2l1FP%k[FsT&fu,<^<=PTBpkP('65S5koD9^ăU"/Dd5;2;[tfD^BIRNxGm+V'n3Q,m_jTf$#N:x[A[sQ1G>;;Pq/Ck%I,BI4[IIO7BăU"M)zlm$S)iRJ=TH;](6AvH7u]VrCh#Z3?_#_eMx00O^fEzrFUc*5<QOS5r[m&u#UăU"iq<7L^H1/V0UmS(?moI6$u4hB.d>,f-^GR()RDg-&fpsvF7s&7Ei<.>n]fFzg4kăU"a#6,8[8[AqUILw$\,z4\;JJxu-P4puiw6WZ\Oc9^yDbTsh92T0Pjb:S5h_+r7[săU"ZPcZ0hl->=&WS,nAsj>W6ln?KlNWqY9rmhFGI]c;7ltp>^1f]Rc_rkM,IZaK8g?ăU"c7]=(tLzr4Fh+CDF^lmJ&(ji)z9Pi'9zd=>(j*8Ck(4#B#sOW?7[4UsWchr7CbKă'>>> Page 9 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 10 of BITMAP.ZIP begins here.ăU"RYu<j5.*%zXzf'EQR&gKcQQs^)o,\)3o=vRiO\]vi#7c>\7qsO&6WLoV<,Zktn.ăU"4%=thSz#z:a=90d_blUW1>q=5,RKduWcMb>Mp,76wfhkBhtJ1zGXP]b.rqj;(5,ăU";V*3r3y,OP4,fcGcQpmp.C[_DYe\f#;ZMkiQvn?HniGc^^6diVo)eWXsIgAZ3c5ăU"Dtm3#c#Ooo9cTd'QVSK6TH_G<M7YNP5*5KoVkn*M$Ln6kBJDC;+?f..:W#^4y5lăU"flBtDWssZspWz7bzPfa\Qg*<P7UT5BQ,]Ro^-Mm]lOlidN=l-enB^-3,Kuld%AOăU"_EECdU]D]fYVEvl)P]eNhEHxU5G17Y<:Xp*K$U&6P^f>NuP1$XfNN8Vs:Fw_R[9ăU"j$PV.y&Y&<G*P*9(vP)0LN*J7gsXYJhocupY\kKeLou&/sGXH$p;^2GssFt/+[[ăU"22$VM\JIL3vt6c:Q:a6f'/^drnrJBL]VpwLC/uvhvxi,LDn(Lr]t/O?Oop_iWDlăU"%q9=fa[YCSVj7Q-/Z6_<iB+h2JY?ltbjdL^?/aVwK<3^FihuV4Gkt,rKcr0s6t#ăU"sQ*P]/Pun.Z.-7DPf\kD->WGA_d]hMCw4ot6eF9^jVnB/93\NFC3)<oD/]S4L&aăU"mWxt9Z(uwu?_OFZsb^Xh?waaFma%&hEg044)1#MO&Bw8A*Sny4hYh#GW0<WA>9LăU"lrlwP.Ud2u.dm,Zd4R#?OfmBbMVr,VV4%yx/l^FPXF(E;qqLu]vtl2BNi6f0.dGăU"GijN[x8j.Y>Wu%lbJU:=CrWSiFU=i(:tA_PUZZQQ?:#%b&rNa_<OM#uRK+bttF)ăU"TmxMC0<]paaRsq_+(?%Yr+]-N$mbsdBXOxgR\c(bF'FRRR0&Tl+G6T_M,:8Aog3ăU"C[tMQ_0TSrsR8[43eIG=Q_W%m\z$Jp,d/-SgP9<qR?m/W.qM1+[\6qAE[%^7l.CăU"?boQM'$EBY=cNHdR4sT5gxh>.(Y^X;<hI?f*R+weZY1XD%FeQa*4xC]M:8Hxr&răU"-%+l*J2HjFlH,rnq^pnI'6NL=FmHm8RV]RtnF,_LCMgRJ.JPBl;cq>1kXsVCrq3ăU"e(hW[bVbfWI-4?l3NHkc>0>a[j+_JiKIy<Oy,Mz];vtJ'1qV'a[+=LZlj#6^Lg;ăU"Cm>CP5$3tRQCIvBc7<>$Jcm>ld$X.<$%M$OD?,,E<-^)G?=Cw&kVJuVTF]8SzhpăU"$=WuM/rQ_V4$Xl$Nrs?VQQa9AQ^U+NLAXCav7]hm=<',=kXt[YaLsg[lIdsqFJgăU"mboSx2:miID];/oAhonDZZIbeMP5iw%8LsY;l7gh1Vnx^EhMi$qrm^/tc$*R9RUăU"$qrDkAEjA'*p_>v[nrnlatKb#>;6sburJvtN?c]ITXj6\^45B-CMeTcBAMA58k.ăU"L9:XM$h(IZn3l>tmsrHgtL?m?url$<V=5CM(vGq[zMd.0I,fV-sE?C+0l]PhkhhăU"alhad[a$8]x[0\I)ux%>]$xF6^AG6x%qGeV]?^5l=Irl5q=hjx,i85w<;bb*n'răU"&VQ(dEUb%.3eXtpaqPC&cEB5YusUp;5_]K7mO/5;gjMEPoKeNmGW64WR0aCc+tcăU"O#tip*^9K^n<WJh[88.EKiq7A5;u:f'KA%Yd_<2mF4vI^TrASvU]'u*if&2ME>KăU";M(5;/oB[qLPCAcXHmVa'NPy83x.WAn[%n^.qIM;mv1,khngOie=oqaKFMBX8CnăU"S^_[+Mv$[BX<]n3I:7KWiyMyf^uxNkB,bldkq]E[j1/5&$XR#p(Rg6#U]WV%V73ăU"LRFgU(5k<AllA2Bx)H=clUN^QK#2eEl/[82FI?*6AhCCcw[Dk^$]GJJe48cZd](ăU"tK[]CfFs_zS-\c[>vY=uKYqmIeIl'BLy4q:kQ>+#;&Rom,8MAD]aYfXv)N[y4F8ăU"%,up(%)9%%[%-%B-2pGJ5)HBg%9%%)%B%%-%%%%]%wqjS#gru<M(N+bWplxU+LHăU"h'Eqzz2RpCs_h=<<Pq=;a=WGIF8qFtTVrE=S;G)g;z-NMzi)IvF-)+Yee1i1w?$ăU"uP)hh=2*.hx/t3NN2,<C*F7gU<1+zFK_=Hq/6fvtg6p$9t)0d/]<8m<kL8duhHtăU"lrrK8Xt'd0n+W\dpEn[bQW$6i'2^V]>liIMWGn&b5nMcxukB/7JLGennBH;T-'EăU"///&'nn.\B]AE/5P0jUj%5&0=S,oXV(0fm23?R09eS*nRFOT)JX*'tREbmH[v9zăU"Vw7?ijE)=OcUU0GQ>E=F*[Bd]+P9z17SP[9cZ,'uq,[8&cq4-H6m0\:p9HR[\Q/ăU"aeQ%13OD(<fE+Nm^#i5Cjnm+HEV+A=?$9W4)'):O2EK'd?X#::(&u]?ST2'j1fkăU"7eT?d%YIva(%>3-UIy&(R]/T[]o5<[+CT)HF9_(^f#Tq-[YhsKg%BI6\%q^3;;]ăU"&/%w#.rjk%AHOD;*3vWbgJk]GJ]:#%(PfR_ru.QGUTw]1ZQ:f5E9$E)(3YO=PKkăU"OAOnN%uia)WYtp,h6;I4qS(spuqUe]=-_^4u5xX7[\B\65A6BYeA7ROO'/a3aO)ăU"L_OPMn*X-4)pp>?XA%Q5plM>YB5)4loIv:UF&if&AT\';tWRVqHEg,m/AT0J*I(ăU"y7M/EVbqH$8.N1SHRN0(B>a/Q])C6/hWff%m))-?1geRB']/&6S3d\PEm^WzB.UăU"NE;vL/%O+joew6?N?u(60:h'/6Ak6V?U9Hp.KAJh\)f1B::)&^TG'Ii\4%qcOelăU"fcY,Bv'^DmF8v/q7^i-3Y$B.d5'jgxX$iwV-0SO_0SC;RwH'iB-%*+ND]muE=ZUăU"IY7ICe+y7p.O3IW#1*Zf=\5FsaPQn>*A07^=#_$q^]>DW2jk4'i%]uViTGXAiV]ăU"rs*Z4+:SA:Osq'P(_cU#eATPgj'].e8Oc4(A-9(R>I2j?Wd;m-$*\^aaZ)[5P&ZăU"CQAv'agOhE2XjBl/<O?5.3c.;0iZ[,>gh&jl_W:UPstT)qEP]w-[kh?+$,270;aăU"<Y>l>\R,h<\1EAExHk%#zzS)M2e4(#vQ;Z2Q6IwhVnK\q\qNH>g08YNH5J8k0JkăU"f=K\o<VfK#w&y>0/6xClF+-+O%Ju/QOS,kOz.qMJoD0I0*6'AHKuZ8xPCI*QH'<ăU"^pPZ#FgkL*dz%?vlkLkfx4ZLaboz4Mu]nedrdDSn^qh^EwWQEwSnfc(D,HN\y#KăU"Tq4l-Gk4edX:L6T^pBXk<cf'v\eR(x0:JTTi[,FZ_Zy11M/1IPq4x=;PxKimBGBăU"[zU;HJkOL8#H4vRyJ\dKJ(bMO70gne.uPIgq4j,l4lmdR4%LOHrzJ5rj[(+WF]GăU"WKqFSLWR%oF\]$pTK-W83W^:F:'%Vrsl%rq9-R+Vtd_4F,k:g&8w:JQpd(BO<G,ăU"<KImW_B1yz2f;$N6JCn(-kMRafOK>a61P+<yj:LQ;c#?rnY4XFd>ZgFlC*wGYkHăU"RaN4PUdg%k+1L(Khd60Lhy%ZS5rTR0z^PTNT^#H(h&2ZWmKJU3gggmWW]^,:k2/ăU"h*3m4W]OGcP05N3jaFqkG6?idW^jU^sS&HHHX7Q&XfQNT0pv-T=;'Bxay<Gl,i^ăU"O8(:e0ZckklV<3[x?0vop2,9MY4EJ7arV.H<K$#1Sq)=mjVoR;l%e-O+&253cbDăU"E?j$BCW:E8nO%NS+]wVs*l8k?a^4Qn34ru1--y4jQA-^/%zZWfx#cMID/&\25wuăU"(VTzg,N-/MPlr99mRB9VfX\w?2A.TO)r7qe4J5o6U+o^qWP)r9(i^ikrnI^X/b[ăU"-q(iCI8M[M=4Q_;4,/h^6+v>j^Tz)1azhQg1(%Uv&&/0a\y]\6Oi[;YaxdK<p%\ăU"niqp(o3D*;I^peM1N&_&0AUh)gZN>R7ffZhgIzFgQA+-0<,6S-Eh:KLiBQYC$rFăU"1,;f;H5^OeS,+.cXtr'w=#YY;D\*NFel.q^8+Tcf'Us=g0I/i*:;3'-P\uE\n\tăU"/GD<jMBw,(f%:Ct1oVaE+5/0+<Z8z#RP$wCuZOF$kHeuh507*'=GO_VY9M),[SzăU"I]UQj//w'4n=%E0m9dFBe/:vv,nW,DiUS_1V#maM0I2-O9)(O6R7qE5M.#ZtA/eăU"kx?FoNuhEQY-TLdOa7\lq:H9+usIoNWpx]<nWZNM;T4&*Q?/XqM6hTU)ulS\An8ăU"FQ+86Go9weROc4fM>PYa8uua:BLPG?I_R6=1A<%?DRyVg)HCFBL<7Zq]bJ6A/.KăU"NJ83FXJ2_3utu<$A]ScEHo(6$n?<Uoa^J%L6A\C?qs<nyO<MSucGa,BA&6,aOXQăU"iSyWg$RehtqnMW$,3R)VUSRNhQR4,:^Ul'jHBK1\5PXZHqj&-._-gV8\VIigfsTăU"P7ov-K3_rpr3M;I*(gdcxbx+GHd91IcB9*Ax/9m<D7qH$Mt8vbIu5/uI(wwvu15ăU"mTf>zk6?8Za<GD:*U*SCzZkbK/yfXH'OwciLl_PDC$6dU5Z,2T9R)/Di$b6ss,FăEND SUBăSUB V5ăU"IM'IQ8^7^E)tv($(GFjy+I&pUjH=qk[>%lw[Mm9F,V4WQNbLOk.hC830ccer\:YăU"pIF?=E^V]]_9mW97jS8OK%(xcQzOzL*rkg__L)MszQ+A6^a;K_Dm1<hf#\H/_NMăU"W;DyLCN$nD'>y6NCQ$qovMl_WF3+mSE]>q7nu.r7l5JRbSDy.<2V[^XXJBnumU^ăU"VB5NKbHBZ,GkbB9sN9sr\\->*ghPUn&S92'uWf03sds9bEX]u3yq<m]i+aKeOUDăU"'02fDx:jC[b)'qx9V9S63j\_w2K)DXs^.0d1/:pRJnc6'Fj\s$oMMWe77yX-0.2ăU"bYIGfs\U\EC>KGHjud;ks.tJvbQ5LYoQzLWuPPwjE'ZZJC:0+>\_ZTmPKoss+c:ăU"Wh3BR8Ygj&THKo+I9usPP'l%&,xUf.rTr&*]4SGb.b'ul+VRNKQREjGaKM_npQPăU"$3xuVvumpESdP&HO'dBtu86_f;;TQ]niFJ;+3k/$jj2U&J_FJC7a)ep5KMGQ%T&ăU"pZZtX.-xIh40&LapffZJO(bdCl6FwhK4:qeE(KD.bjmQkIli-hXaqssq5KvtqEeăU"/^6$GkNn4fAm0;*3FJ'cPc</Qa-tALEIa%n+d)Lna'5ekNbjJ?bWc)E.llg,skbăU"%MRRb?LJX,Am0<-FxrQxRyq7zgfjH-AA=q(..oVCnaFG_\TgF1HlS.Jdtt^v3^<ă'>>> Page 10 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 11 of BITMAP.ZIP begins here.ăU"tBpq.C+I$_o6$dT0^)^2s)6ed77r\C^i.M=C.MR3SQIua$WPmS&&rfA2ctmnSDVăU"L_YJ$'cHDnLP.'kqSgd4JY[w;Ek^nSpxtyk,(Ml(z6zpQV7mA>nHPlkoki&?^7SăU"Q:f6Mr1#5%p_p^'&3'oMLY*I]8ob/QDr0<dlfr5q5YuV0-J4+3h7$a>1D+&K0YcăU"IBLh,vRG/l$F_Slz'29Vb4Sn;RX?Xv#TL9.ObW'Ptrr#24tXr]WAF,/,5tKsr*:ăU"nZLLBK_H-:hF/BHuOkkoKww.._.NRftA?HEi*?g9Iqdd$$]d&Os=PVKE#hjA(,OăU"4[%Z*bSjtIB-Pt.zZq3f0tXottK0vPxSMB[dx/?]h)^pA=<Frx/$2Oz#KWUYX1LăU"GAGz3&t8Uk'^#._k=&#Q*cee5egmd5J2K#OQgN<ORnzHU]dKV&hFnq(?\cV#>/văU"fWVY#>*VYpdM9z=97A1/Ur*gVpt;B7/h%Wyl^cPgtmoptHcA0*.=cEmNeu4V<T*ăU"qGP\]mmAI,a.G,z'*)eDtKdD$VDMiq*.vMyLnz6BlK.t)^b$Iop.*XTd#V)Pm:săU"DT2VW[EBi;'m5W.%lChkL7ws$ig%^Lg>;J[s0XwlUTNt:k.T%WPB3yyTs*hMuc3ăU"KPb9(3,9E9D1DBqNiLa1hkU1XIq]4JoeUfs\x5ykGasR>NNnDT9SKO;fvGtFpl]ăU"tA]cO8E_1&119xoQdaW.'>Xn#MnXoD*zuhe/zb,i*xt.X:73+uNHg0>R:Sv#o1wăU")0>1Vchsjc[GSwrlqzyB^)A%z^<J)Hd,^GLVdT%,W*w+ll]fMld%.QsV9vrM*9.ăU"2bgdG9OZgpN*vO<X:;_y9/w[U=))+3rYZ4z2mlX+^Ao52^G]ndo>iC#Z>uVCncuăU"6a7VAgg?Q_BwvnIZDnFlI2$zykzx085FxX\*pJt$m##J'ZtquQK\F.>%O:sn^V8ăU"O\1KnGg&2(#>Mpi=E.^#E\i5)&0GNxcJY8rw<DD\=dmO<#tr)V5r0_;LO[8>EwaăU"r&\nYbeDO*Xg%pjGwpdSJ24FihClo%YZz,H5o8m)Ul$#_lm<5rofJa_6K=0F=3oăU"YT:ncX#tn+*\$EFj6q=\#%\KeZl+bVGhUUUV/\Cf89Y8oSF7[iRO*o>ttXb<i$văU"LG:%B.xRAStZu=JQ<MMp*8uLDDHkuXT2,epFGSW^IOJ5qdW8Btpzd8z2fj:qt^TăU"h>*VW'YA\^#,sK=]CRqUs2oi='(V#zpdKN2I8Ag$Dm%tdtz33SFzvgo^,v:_r0KăU"P/)E5qVQ<hN^4SPs-gE0I&ph>)>RhD/o1H+?KHakYH6S5<Rt<H/NUz&0ET.*)f?ăU"qG%TrhHrb27QXNT78xm\WcrH6g]s=ULeD<jRQL3;)*ds,noY[kDnC0tHpfTupwtăU"&Z$S38U8+(k?*TX)%0a+:RvqjxSrgl-s,D(xWj'DM-XBx$Ko))jL?i)J>IWbckFăU"kf#9DTm)o3(4)rTy.oX8T?W[jqmB=d[n\*Qrhhuh5RnX0tWNpZ5]n9NBoD(cU;băU"or2,ifsosiro5YPp/:07$2<16YaYL9?I3edLLON1raiptn>DTPtBkCWgRPep-uhăU"B2ZQTTFRYDUJi?F0Pi>^9Sut^TkVB%d'CGio4OJq-)I9GQXp.CAIZII.ZRPt7AuăU"eaJ'lp4NZtH(ZicJgCt2X,j(q*:/g$r7tF?jo6]S+Cuq\D12;8A739&D+KJ.cVqăU"V'U=?xl(5LgY6$XHYvtQ/H$(_^tC6,dVQr4:lL_ZxtEc\\_LLtZuA'VO%,,Ya8EăU"Qv)d)ER#)VUOXSEu^:gA,R8-kt$4XDV-vu8oj7\^tB#N.0,.=d82M/dFCM3CvbWăU".Z2.C1>XB2b7F#=YA^QucF$[wtoLx\+24fX>?m<budsST6PNk_?WP8<9#a7O.J^ăU"Z).;v26#KKkg)0Qb=\X5jDk$<lwshh7t0\hV[Bq$$XVt:LuN0Fl968M.p(1a_:8ăU"Q6,7cQmKQIHH?/&1G7>j,-x*T:tQFePJ7LA$H#.rRSMs'PP]2*>0?V'-H8w8X)năU"v1Ks^uMK#Q(gG=B?_]eK$nJ2wV_VW(Z#4DcAZ]AJ&rGR\.B.]vDC\DFLTCe&SAHăU"rXO8OX]l6U?[BH'YE3<eUwhui+,*#.Ou*W#%XI_h4/qBGe3s'im52%K0Xt#c1jUăU"__$c;o+eLP[wjY[IF[^;>7u:4N9A;b>r?0wCJeq\=JE+wg_QZa&r#\mH>umSnCYăU"x;7($1>Q4vML+LDkOo(AdWXzL8eY=;1H^2ZNU2kbgub+6xb3l[Gi1w0C#OdtHf,ăU"zbbduL8Dg)tAuc/VFrPW)z_R,ducR3avG;F^QNoF,x2BsGZSIg5)[F&XiKGd88=ăU"l;6&HD2<I>(j8X4psAS92BGC^IZ'T*6NVedC2&$[noS'n1gpVbQ/Hw8j6[.:h&$ăU".+jJ.Eu$Y#Ldj\^*$.1_R6(_6I*&?wj34Awkq>1)G%W_RnNA#,/GsLJN33c]0KlăU"B>S4kZvj4+L*hJGc\*rhnKy,\1(Tk:\M<3,9eIGZ'=ibk>'G-Een_NmM?2vNo<+ăU"JHM5DEmjBQGg3fZJsQnftiHcwhf-CZ-N6;_$okC=36CO+bMZwAY0X+p$mpbJ/lcăU"eZ&mH\>b&)inwW+n$yO&TBj/BLRNxYnK>_M=SL#1grWtps2iOZwD2\.((6,6wg6ăU"d6TqF#^\mdxuZB\8uu2;hkS,vb:%S$]+r:FfkPgig\i=f/Nk3KAYY'c:l(5Dg[LăU"d^pEZxP&Q'e7=l?\x.]qoMa7kv0^,O[755u4-Q:AjK_)$9lApGE3=lha*<XbCHNăU"kI^vFtWD8?KL\l;afp$U:gA;i:6jKSR7yr:%hQXg/b6nqp1zS0V,Kt).iZ]j_rxăU"M[,YZyQb[VI?MShwS%XiU'g8bp=nGC_NU]T>CG*C+Hj]?4k$fJ-dK=.7jq55qqLăU">7#-(nKzqbnC-H;30Y_.K8sHF<xS;RKkm8IYOtC'Jqc$k(aD1Ib>YU-#2of;lU+ăU"M]Dsj(;2Dm_XY,Ewt](G_YzVJ7Z-k05r/_gj\dw9#[J;G23aD5qH(Mr3LlC=lm#ăU"qKnZQ1R;Jk0=B)L[>MAxMRvBNq-t1uGe8t0,Vg'BM*J4X#\^pY.LPTRQ%Xb0&=NăU"k,P\bDrcD%QX\EN_QWV3FiZv>C[yGDMd#I9C[8mX4vvDKY$w)UR5KU=%RX]jL[+ăU"^\+WvY8Ck2Ve=B>W+MkspqK]8hLZrk8.3_D#xHOiQujpF\+V++OqTJ5&ZdwW2JQăU"dPr2222wvPg<Oh((vcF>Tb4COWPt_'6=/j7hF5grv\P(e^&[[<k88A<2KrWlnH+ăU"=-t]87^&xmi<3P$)-(h,]*C2x/H*Q=M<#wo-t[x>r&Nup(%)9%%[%-%G-2pGdO&ăU"KUp%6%%a%D%%-%%%%]%txWS#gruLJf4/bV4M#2o\_[5)lme_WB*WCSjS3BH_'jQăU"X'4%GgXmj5asIyeE_*jWa-bp6r:jmXV18lvGtfpO5awtN?TGUN%=mP&TMS$XMeAăU"r8t^.*2d..,(eHxV)UdVpJPmpHbF9xa<ta_fttKkvw9waH80\8^Qk&Y#0:wp1B&ăU"-Dzy(M=vQpwKj>%<***P)&%vZLbnIl,R;*S'=?;RU=nI-<Amo.5'$m.GA]*GRJeăU"/l=h^iK55Xs+]GR-pfZ>Z/E,/[cDkahCXj^R<:sP#JD_R%.0abs56M92m_Bu:0aăU"2QsuHbm%'BA[W<:$a<M$$:P>/EZ3Tc2%$ljd\wn?I^lA^=qQHGY=XM-Z[s5QZ'EăU"+=n,k:).QR7)Bg%H#tQkJo\gD>I?A-L+b*66YnueU]aiP1aVn<^7k$?P';5=:i>ăU"]2dqe6mA\ix$2$S*-O]UM]#<=X6FY*3.(gv\>7>,DliE+g*+)nkst6)qu>0WZX?ăU",5T<e0^n<I<XiLI_(:/^).U>.0Hk$-;kfXC</QM%sm=qbk>BL[#Rk,V//UIqbR\ăU"VP[R11t'6:]ii\gE<5$ZA9w9hpn?gE[5]+]6F8dXisf5RE.l15dG:Z*N*=7W0<:ăU":gecCZti'7=Lid2KZ>[2\0%^Hq\+S5cE?7f(\U\('kO9(\j_1Hv6)FXD>[/[TKrăU"U-uUPbS<D\&Lvs=**OylNQ7Eg9rE<*mq;8:%Q=Rf90Ta5m'Q$o&TxKXK]X73+E'ăU"5,(D26q?%TE,g].[Zlu%J=09eS^YlJ[^kO/g<(DD)7L;FgDse=E%=$;if7H0,AKăU"5d5/s]6B[.3K'l5OZKKhZ/3VVIU$GC,2+fD=e<[C1:YB1;]6R)kXVXpQ6_U\IH(ăU"lfY;RJG3ZBkW<</?+15ZVLu75]^,PAH'<80zs/>C+pKU*iQ5:73.^39<MYg0pneăU"EoiCf?X6G5F_lA%,J-puoPb'.*_bsIKEb9-+a([o9jC*)-hv%9r<:X:JiYY-=JVăU"q.NV)ogvFGQ$h3g$$f?7o6x&S<2x]n8dM_R4Nw*lAmwnX(ogKO/doXHGe(fBJPvăU"w%Zwhxzhxqq;6JT&y^r8A0(TxOR-vPz4l(sj[X$NC*c1[LNUGt')Wn7#DJtwsOYăU"dDJ9%6kyrt\woG(rFQ6LN)L&NjY4H\T2PO0LP&'N7rsG18+D9A>7Ng9&y<(%]G&ăU"6HG+v\A'i:KctZlGL<cfepyxb;2U>d]oM9.b)p4*Pj$-c_2.%m<ub;jK5>FzzMZăU"OO51(VOID]iN,K5mz,MI.R)'&SY9f(+Oqi]<Z>6;kdP&yYP4D98-qV)sb4j4VE#ăU"9K$ORJa-WU1eqW]Ziwh%Dcc<9KDpEyEbqguDGlosfNpYhAnw\c4d.[WiUtT1SraăU"IiSdJd%L$ycH;HHQ<Bo-uT[gy'+;?#jwq$-7g]rgAZTh%(?5M>F3hy>wl$kwzdBăU".Y>i[$o3WbqGxV%b[j](GM*3U?9#LmP?-SelPfJZiBdY]x->TXy57_#;<:7-O(7ăU"V#))vzWgBUa9pd\4%;XEmCIoQ6?u:PZ^\YYsJv/Z7pZr<?/mT-Ll_^dX?X*SEI7ăU"^qAYLjKxfXS(u<YL$X[A9F=>p=^p<woMFnYjm[pl_*Xg;f]$kXcR>)tF:Q>(%PAăU"S+,nU^^Tx(lXx_:i)9Dr7x?]l(+p]h^&.Q(q)Nt[\*NR,.7.hTZ6fr#JdwD_b0CăU"4gtkC4q3pzE7P6[q4#x?oST-orQOo<Trpu/TS'x#RNgB&zh+S6#cY5koa::N7qXăU"n:VHb9.wM9gRhu6K1#MHj?2k:])'D<1]\xPS'8>XQs<aDlHo='>okNscsic+OqLăU"rf\>?hC2OnkQe9Xq/WEXh8XpOTb,0?WD9u?uMO-'w=;,,Me$Sa+\DX,PCFY5TSKă'>>> Page 11 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 12 of BITMAP.ZIP begins here.ăU"f&eVfFIwG+b#)AYI]F[+zI$4b$yWEDp5V.O7dMa/aSUHmqSY-GJH;4RxaE4/TafăU"&W(zf,$bj)&SdHl45vdA4v[W7&VSgA-kXA5;H^w;?^Hr+C3T]1KG2(]&;6JJSfhăU"^A^MhhBOA5o5=]-mSE#2[/.ysKIIfi^a1mOhj9=p'C21aaV[0]9Zeo]ro[FA?H0ăU"H.B;=hV%l9E-;AJ3:vfna^2bjgPB[dG0)9(fLO.?C6xKR3JW+NCcgx\6'gnIh)0ăU"L<2nq:1AYK/93Gn<3g,(4&TXKONBSqkY']=V*Gy:jJXHD0XkHFQEiuOf(1dZQ8făU"3_upWV;t9>judA8#7tNdSb\W,gbMLomWRaF$>fX<\(41)XaE7OL#9Y(h=;0kn3JăU"8]m'%7,e-9Dp[EqL,FSS*BaWJIH*WOL66Kh:IW?Pf/IW]^fmiO&C_,ie$%4m\+>ăU"BfW9Q+:VkC,+1C3>vMaC5[3Bhf]r8N^CBEq()-&bGnA_MRBaoR2/=lE^i&WGRkCăU"pkP&MM>55V5C2s7gITd6S%4>MG3qcF*JIo=9gL>SS&I:Mqc2AZ':3fY>U.<KF+8ăU":RuoTvCM5eAUOtwi/$kAkVrt,PXec=ZUZ*0=o.YPONgA.s5dP='MXsa=0[I6_)7ăU"a?Nf9oyRM>xx<:4TSdf'^*4GfGMaJrtQdTDn;W3GC3fYqks-Txef/sjVS3*3Y4găU"cOZBT\w*Is#P]-b#qI7b(BaX:YyDSPlS+JcQO',*&&VYY$Q-$5)\erx-R>;vcJ2ăU"s[f]Lbr0r%Ygi5t\t]Sjul$UB:p*UBt*r[[-P1[>+HA5fIDlqQhJ2bn^VngY(:>ăU"6-I6W(F);%d?hh1h4-5TMa5\-C=TxJ*o9y(fpmof'Wk=;+1+&:mC4<I-E77hN((ăU"R?Iw:5hOUV0)Zs'mk$;*FGGNM?I5Hfb/Wkr5bvflQ_PP&oc>CW=C&,E7u#i)nB4ăU"wV4#olZ..Z_]]*r3IW&kiW^tL%&7rS=0PRdK)%UT_5^hf0_N*4%SoHmIY[$[pu]ăU"2NXbmf]l^.jzT.roZP5FFxX[/<nI6Fs)+Og<)IdW$6qyF2^]M8jLs$89>CU2u<băU"kmNr(:4>4Ad*XfOSEe>jubhe\u,Pk]&/Y]/nlj-kOZqHj60MNo5GGV.7Rj30JdRăU"-lL_%s(LR)BAhQH2sz:>Z#>pm().mct03e<))T,lD5pI\/BsvJDrKAU7PY$Vmh:ăU"I1WSz=-\i(KEaC+,qE&INr\8bdshW%fZW+:__F?RO)ryor=sGEEcAa1_aI,9EsnăU"5Nc/#kQ[kfVB;U(_W9>^#LdEifT)IPF<R0T\/x8rNYEKK1aRU]BJ7XkFNzkXun-ăU"/%$jGCf^.\l#E<&LRoy-\G%oB)*%[]Ci,xY12bx9X+>BA\pueNLJB+PDkI4?ocDăU"qJknVJho6dsWcpQ[46Ln[>G9k,^hfd<(2o=l?W>cM3da3)Km7,]EU6&r&Tl8r2]ăU"vR5\G/d(Nlk=.vo>8XxhMtDYkSF%vc%)4NtERo3hZgQ^dEsiaMhjjbVK,6YTl4/ăU"+p[jD^Nkgyz3dnT=<0GeSLtzOI<]#YY%I.L:[,s_d&:S^L^Na]I%4[myZI_]j2kăU"me;YW+V--vQc;X]?v4d>3a,/Oh[f??Jqzu6V_-3THj2ty#oE4XI4muU,9*T/d7NăU"tNV1EB:==&U%Uno>$Zuh$n.dVH]-^R0(+RU06C+_8l[tXcYD/76o(lgE2Y8&HKqăU"a\m^v;:>w0eduUV1T;%,vt3tSLl+3e8s'irru3N<G2a&GbW.%o%Ag4XB^F/M4pDăU"[\nsW&E7#at\Pnunto.W*4OLbdnrI\6[$_)G0f$)?/#.8A+m^o[I*&u**D,%enKăU"co-dV1k6H=tU.fL(9f<QHu'?V4qjGP,F'tGC*?_<_([m*rGq=pkFMKXJZrk^(LeăU"\<HMd>;;uUL]+9lUr-<TV]eo4c\XT0(.'7-_oDAbnArInN(n^pkI+MDd?MZK$[năU"uW64*UVG;=\Nq]KZPF<9Y5,R*Ap56vlEs1^4k2Q-T$/jT,ziW?Q,8S=?+6s/]8#ăU"]I%z(RStj633rS-v%AN%[&27H:r>44En5Lo(k#4NgX,Bgh4CyZBqX8-4ki'%pNQăU"Ls':2LDDp).zD;FFhuT>DY>D%qpZ)A-chgWH#8bqs2GrA%4Q+\LRRnRLs1i_kL(ăU"vK&g**uTth0;k=fl(0;*b-=+,IO3WTbVWRcV\?Ib8lu$-HXchJ2<4ivRfGk6Du9ăU"9jwKLlNM]Q_aYuhpP9mOTO*[lOL+/kq.5g3EDgrqP7puQ6x']CP1NYFr3I2pW^căU"nqv7/s;e56#:]#cC#EAw>kACn,5tBM0xbZ^nn-H6HVT[?Zm;W<bMHNX\xCdTuW7ăU"DV<*FA$V+BorcSofcs?n1Jg]$kG\?U/bs&EeedQwBgPb,:^u7UTLlLpMxGJ'x\8ăU",bv(ie$i&9wB.$eid9'=bU7<a[8dw+x\iOR<(NSuO*2=reg=2_K=g5?iob\]HAdăU"WoX#bugj6FX3ji0pkNXe&t6x\QE#VhpaZ)[PLzUA;BBA9juR=%]$d+zW[SyJ.>eăU"7ATtK7G'SmRFRGDX2L,KeUA/O[U+ijp['&YKJshMeRsO8bP1$?k06k*/mWfugvhăU";\fo%XMUl0Hl?uJZt?S2JVhRJQjWtk&$^W.F],=Q.lQU]>mg'siXpFWYH\IpMfKăU"llX-N04cDTZ#BSl+t*6,ql5>kdimAY?9%<'r&u#RMa1hoF%nS]GgHgFT>4&4R:HăU"--J^.K<?wX7$kgo%N_I?]fk]frx\7(bV5,NmCDDqFFp5\K+]Tp\_&v[oY\IFN[0ăU"S,[BAz0WSJUU'QoO]&h5b]GKLanPo)e$i%u]\oVC>&Q5/(^xb/>-2Q^^7_V=.MHăU";WB#-29n/u<-%+sh;pr&F&1eOXhbkIEP+K2QRO<\MH*s&;ZRkRmO,QggfJ3t:9,ăU";4*[M;(K]<OyHWbtr$s4;LE$NBX$wg;LWM*>AsuZT.DAI\=rLB%GKbtaGGL$fGnăU"cR?Qe%hYBv[hOC$xfQW:ofOUa3F6HbMp6l?<WdlZR[^WR.)V_t)m%tc^<E<)56năU";ovSQOW/vhcEo5&S^Thq.K5jAR2>]N5qa$Ls2.WMRZ7;leP9F]Rc<='r2n2qYCPăU"_9WR#d>yVn&SxC^>%KL<eNKWRtoE7EQE5a_EMuvzxELVbpEik1>scvoRi_2p6YAăU"Sx:DPiA]A3/eBp2qk[TZXV$LScwbILtEm'e/hVqn<7Y8-HDv_tXRr^aes#g.6%[ăU"sI__ZT72xEDIB]K=Wu\\uXUu\WFjHkuriaZGn8p6Y]4lwAC5*l#^I^8O9$g;A<SăU"VfgkF>1ZiObnZwmmVf#S+1Z)DfU$#i2+dLyTKAx*B+4KJhZ#c>L#Je^BB6BXo$NăU"bFNENZ6=_kO8(L62XFF*ChGkE%G?>9kwWnD[58BuBJEpH:(>yQqmC9\)_E?_t2,ăU"OGb^%7gSiksC_OA3(g$s/2b#;s*cZQ-5[FN80^_wn]^A4Z[qK^E<=Van172.X7YăU"iFYepr6tRb;D1l?_qL/bx.0F7$&ODqBNTkmI.KG'AfLI/<zMQ&r9[VyYEQ%D-['ăU"N^?5BRe3=hf79nKe7y.+9M5Hq/jkkQ1KiYTfI(k2A8I?dc=M'KZ&lR8b7=._KK)ăU"Im,+a0]2nqJuXKYJo.vnpwtx_LL#0koY'EJ=-JGX6%[W+1-roQ:jnH=\j&G3Go)ăU"k4]]nF/>rQlxHM#FlS^BMg2O2OC1s1/V7'+]L8848aJ=E[kdnGb)t$LTA-nQG?dăU"O5qa&3C6[pf%K%,J12k';^)IcvX9b:\5b3Cx[]e0s;P.]_gCnOX7.yNm8^gj$%uăU"p()%9%%%m-%c2BpGP.&=<^+.%%W3%%%-%#%%Y&%nsSgRrufe$::##4<#vF]#7=^ăU"^5qrM.o]=(W2S^&#O*q1A%bIDX3;,8MBCzdH9Ih\]P[N6^I\IAStQQ-2vSYJd.măU"/Q*M<xP17DNdnMna'DjSA)(O<vB?SQCsoAdImuFe'-W+l3V=CtE?k8prhZt7p5%ăU"k?CN'gfayi1-VdXR1WV9dJ-#=*jXboW:=lu$HJZf<nCbQ,xr3T_73)DNYS+KvB\ăU".S)jh,qwr,$]7iL#3(qrLsLIJZr,7uU%*YcVPPG]^6lH2AU^VvW[2I7*4HORi[$ăU"[5#p,Fx[BV+K5k1LJlfa9MapmX=j;d&w<c#;6,cD)5a\FlU7\F'T>g8'_[Eq-AFăU"SRVp#:Q0&nG<5YQ#HLCiH;9/-I_:WBH_9U],k;=CUiEZ.mtlSe?wK'i+a=-wQt9ăU"8[08*f7,=-HPieM3QX3dY&J&UgHqCiJi<M2oa<<=AXCaL)F\.+?-#Gal3c]RD#AăU"&gq+.%8/044=nbc5^V<9n,K4D,uc?\nJ]1E4\dN9Ts=]&BhoAAubd\=#<q%u-eqăU"pU]5Jy2_/T.u.ww=;sv*6oqdeV;9g1dMGnpG;84XlMjnTg\RDg^].<&wmq$q(*<ăU"nNSPVg<ejiTKg\Tq9htgdhq3rfH&,2whqD66-<;(hTV)\l>o2F)UqA6l-CZ;EW9ăU"27.T>9S3W.]ljr%,gTUSs2ggPsZJI.Rr5P8a*Ir&%wSl2Q*5T8<Je\f'By>lnz:ăU"jkk5?DUDevI7\dMi>pm%0a*)/uYLzP'-1[a)M\*2^M\D^)boo',EdUVH%bZ=?AFăU"p>=9X?3'#mNvdO^KC?AI(E+6<6w_oIAWa17Z]U#s9.3ZEa9[j1P9mu#^e_lF5,căU"vd5gA3mM'\dMC7VU2CkH:#5jNXM1y1GO1EjQ.32gDU0YEo&8=>eD[Xv'^:0ddV9ăU"eAY#Qtrl[,Kz_[W95STLN;BOjFxypwQR,?Z#QQN2].KT,eACM0)n&K^7B,;UiueăU"QMjgnjyk]A$[qa<C_X*e>8*Z%W\F2DgL/5^;8,%yb:7-llLkDgMKq3d3210oYlEăU"d/H3OjI?2_MX4WMmx5dU[+32q]TWMpAtFrGa%T]Q(+9Bs,+oN=,QcZ2A#483lJqăU"(hA>cB%a>+atzZF_5dm<b(AX4&,iH7i+H:8p'=+/+dFeW#=*;d<.H0_c+m74.\OăU"*%wZwQU<4Bg4sL2I\(FJvCdox1I(pHUTZ4*d59TE8MUmepLjb/:L+U0W+hVc$kkăU"*iWu;IXA254h2'Em*q5Vpv.kpC;ePt2;=^O&)LtUOLZXzRo<1j%ohZrruK_0Y2\ăU"+0G]3WLH[AAl$o]Z.hEK_x'Q]2Zx2'Zp\3+/VXEn5(1:98oZ>4h[s-KqyQ/A75\ăU"A*,mHtBOXjDA.ktMTF-BG;:0u\wm[6/?UEd.?=v8+ap$iJ=D9<^xgTc#>,?93qbă'>>> Page 12 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 13 of BITMAP.ZIP begins here.ăU"YbU=3sCEQA&ykp5Lli-Mv_Xr/-S_gCsz.xQ%o24M5=a_g><M3hG4w;^>f0*DL0XăU"p0o\qVdlIa48+p'>/1/Ej%Bs9Ko\E(DMeH<I8[mbYiBXUa<fEOC5wSt-Ri%+nEwăU"eJaLI\]aXfA>F5fDBVCBZ2QEb_v/LIgikKPwuv=(21DhjTT(-:U^HlD(8uqSyt,ăU"d%B]%Q[(Wnn:qBbfue?4=X.%Kkc7YXQAk3_8:QhB+cnU(VE;uD.;5wPMl$Lu3J2ăU"'OfD'U^YaK]_gWr<B1*d*3lW#C9dt?euj?PpZq+OR_4rGsJkaBf-(cu&1gx9ht=ăU"z;umn8^(l9o-VhkP^1Ti;[x5E'CKbH84;1F_73;7Ux13)4b1F_Rt*w[b<0t8P+RăU"R=8#?WGh:hRqRT4WD&0uIZ<P*lX[?0cN:^:lk)iTX$alvU-,L'k27SNmSEt<\^3ăU"6QD)pGx)/E[KB1M\UIG?($Z.#Y/Q25I*>g?1IX3X0hcZ?Rm2bp72ltSov?5Xk6hăU"fmog*EY44)quLJN,(hvgjdK2qU.(TQj1ngNaz8D.k)<J>J>]0lSO.;JBaQ3TRbdăU"b6E5R,iu5/JLZR=mJ+katu%p()9%%%%-s%h2p#GeN3'8L,%+%1/%%%-%%%%Ywq%ăU"jSgr1u\%v8:#R>06BQ=nS53Sk_F95dxpGN.)q0$hxxc>>3FA4\jK4?XX4FrD*\)ăU"U[cYi/XnbDu0*)HN=(*^R/pg3<7IUE[/<x:R<c<bKre[44N]pti^Nyh4]*a\][4ăU"Ybpq]kI0j/?rJkF_K$j$XFhlnUtt&#GcZh+6?Fc\s6')>_8iSYg]^cBa_wUaNwkăU"/kb*EW0Mr6:w'1j-ggcJX\gwj=QXSL=d5*p<'+x2;H6rSPHllz?]F2P>3rs2<+KăU"nO?2+5AO6Acu$(vMBSxx2kO_fMdC#yx(QssXN&_)ja:fxcuO,XB^FTKlPkmD,QlăU"t_n+1yhE)L'&-0\nsxsZ>Tm-%[l:bXp8Aa>buf>4obfycF2,s>_W4iEL>dADcxbăU"I0hGDmSYHkcssEJmRjojBq)qx5&kCg9b$hn2]eVgJ/V8fNfv(Cb]-dqhd.iIGDBăU"]6C_A^g;H\DAZAa)G$Iscrp8b]?EBs=VcIY.uCO[;+IEon0J.TV(Jjb]aaXyoRrăU"jt?g2uV(m8LA2EvB7i''pYs8s*7fx*XKw*mF$DmaG27h8-x\^_C&bSKIszfD&dAăU"ivSt<2Aa?XzvDxI.N]$7ycCp]oH#Pm/TrcJ(wcMr[#etNLvgLwy$__BYced_i>KăU"0Id)Vv7m%)MKtvaN<vl-x#J^?sD8HrBh\pNwZJnfXn[*a62Ekcotq]RJW<^8wFoăU"of0lu1\5K2JVRs+(60.]h%yVXe5TEP<kxPi/rO=SGPS9agZH=MsQhTl%XPLO)=IăU"<XmfZ2nr\P8l%:u;Jq30rL50>y_*_p^\2hTEVAd>GFStTgb*7ok[c/AGkNfCBaQăEND SUBăSUB V6ăU"$R8<e]OnOnQ1[OTjF[x9,p(9$AlBE1b)ZaE/dyxT89'6eUUvV;$SkhOV;jd^#NHăU"3$*;ctKc<Yn6V%8Q/UfI&Zg_3Tn[>FLrlTF)2V+xTQ*X=6y.7lCY7GG'ccR)1<\ăU"wYZ&uLJ-';W^Q-lcJ7)^,jZ=LRzp8f>s*dlk2Rf&[8m1ZrHvDBVW^3^:%(Ko^x=ăU"I+?'%1r$mMChU8h_ZCCtW0<i[F?Ubl9/QF.lEMyz9LZzP=5DYgo][1B$(-./899ăU"1O2h2DL.*2(X#2+:ZOJ746_s'=^8rN[p[U?h386':z3gzG]f8ME+)/QhM5n0w0FăU"rNuObroaa5Y_:,?PeURnM*4:rc77w4D%<g<R42=kaVoWLTMkf,I8*&9;%4FkJyqăU"_3)g%s8O0ROFkL_:DgQZa&KkOFtC<?ZrVw7YQsEY1UM64r;U?5v)rR+Z+JdM.3VăU"N[rpP/4\;5&Jp2]<UF5VrC9EtWdh5)Z3c-paNYtowr<q:fr)zTqC3PYHa/Z#aP#ăU"X/%5A3DKR-vVjeJ7/M<K2cW,GOtOa3Y\j.VObm$2Iira85hv,RAgZCu&oF/HB[qăU"E5ggEi\_Oq2;ir5Ff[OQZ=WKr2K.gC_KFQ]v>;AcPPds_]0fAWj/4Yn5^H2n(u*ăU"i4yjNcFn:Wqg.T,'IB)q*Ahdgl':/i39y?$lXV;MZddNIQj5q#n'=+AcLruYr5UăU".nH)63r0cd=<Si24zcQTAoa7$0fQh(kFoal?4ZF;$Y:wwTR-Crg;)[#jdr]8V&,ăU"jF$$B0<<;?&TTNjY0)-TL3IsR%X<Po>-_wH[owtn=R;Ipr*<oc[I1kR7^]BO(U*ăU"PIde)Fuq../b#FUOueFNsklR]9JT1Kk8<CS]ZVip)YJ<I\oC,6;Cf*P16Je1T%găU":feo?]qh7_D'SL>Ix3Xy-/U]>4Ap13-Sv].E(ItJs(+tpds[Dq$l%B*-h-8;5jnăU"/=AR0g[2$Ad_^R/niz4a(iCm0CE.J#n^q3mahE*ASOV84Pn#]_'WB\QE[abaYBpăU"b>;\#CJtzKe[kg9M>mjr4gm%keL>h+*MMG[tyfVgKp#jA;GNmF4Sgv*8:5[[L6jăU"d^IUIm<#RJzre[a\%ZtJNXo5U\o(A#+mM0.fAOFGLE4Oc$U<J)a=Qy^#kd>cqGPăU"4P3SBLl$.i:c,dJ,'S9sMcB\bB.:Zm>(]9ryLu)'w%ca5=-%X=;%A6a.[Q\lr#măU"[mAT:Uk\T&CPwI/:6+;=R$$Ly,)'lA8$Ho(de>Lv2al/Wyw(sT9ruVXdx(b>M#jăU"78ocL5-e(e,km'DU-tXBb?'MIYNAP-l;>]#gK$Xh)?V'BVFXeH(16W=l[TVJ/cLăU"+7&R)W&BeN[MA5han#Cd*'JS>C5]uQD*)$RXc78,lQ34RL?-$7Pse/,6P0GiSpaăU"C*Lu4L'(v<>>K6Ud80hBie&n%aPiEo+TflqL>4P:hLKcashEw%GW6bLJR<]i$ybăU"Y^gmq-n'vC:cZ1?Y_^5=w7ZJx*%up()%9%%%m-%n2]pG\]'s/K+.%%+3%%%-%%%ăU"%Yt%xWSgRrufeW::T%sA#.K\2Nappu9.S5;K[gmTj%E^SS[A+$-p4mKtVC+sRQ#ăU"['$Q=XnaQt),<hTgh_'b.MXqRBQ5ufM<,+jV4[.t4wOeCL[5:G(N*8zH(mD'EpJăU"tamRLb+<<]t*p,*sqZttwM68pmaXakW=G]>nGWfQP*9U,UPoUsg>/Z<V3dJSLweăU"2GLbY9\RTMzN].;)Hxgu\e2(1s].bqAA[AZiRjB+<?LKiG]^<Kp5Yk(hM-(lj1?ăU"Q8K=h-I(VC/W$>W4&/)(>WWV#vKIH*Y$#^T8]sh1j)V\Sh8RLXD=kaw.0-=ZHh-ăU"YptaVM2C[aegUD+d_7&#)jsRaWqP54-GOp56EwA09^Tj5UWeOe8n]tCan>OBj'WăU"rZtGw0L-L,mSJMepiebncA):O+f(RH=UlqYttZ'#ieM]Uq_61t=='g'+?-GQpl3ăU"]r5.#fh(q[,8\/02=nmd3^OV<\VKKt,u4ViOKX]),RW7GTY:0[2FK>4$mPn_\0KăU"-D)E'uC7qsw\\-sU7WX.DfIKY[9x09hwLe?v:s1T>pDJ4dWGT9=Aq-=O(81Wi6căU"oJN3Nunw73/pvaT[JJT4qk7T+xu?HxE7p=\d;1kfFt=LCUhY8=H=5+VW8s_TgeoăU"85o9MgtO$E_si&XT<zi*9;:o1I13#txj,%x\eq&vBe\3N9t7?N>CKnurS/.,Ja:ăU"a9&z>]D#>P5ETm73(%r5[zbvT/shRgEJ3:1A8ntwhp;DG=K'DEFm0,gLJYXXD2,ăU"i7_A-OC75hPYJdnX9T0[W8\AC%ZWS:>K-/=EbjFOQ<T6n1EC\;RnNB3Zy%Ly.5BăU"#.V:8B/?])zXGU*7]hAs7K*DAHe9tUIYByBgVU>#'_I/&MSMWMTu03%%vkET)O;ăU"M-Ok>Q+P+aZJDCg3,TB5e.mtv-3pdK[)n&oUJJ_KPrGabq->0/=dt<u.)A-SvfPăU":wB:4]QC]lpC8=HK1M-HIsGMm5)7ZS9q,G=X.g2(H)8>z.3TXgv-L/l$nOU>4''ăU"bgCt_dYU,hOG6+B]rXWMbmFPR.>:Aj;<.AFJkp)[;HqA>P%2ah/u2yxk5:02b;TăU"83,l:>>ZD>B[[ajbt[zZBO=DHmQN]hO(EF0QR0$O.*e1B-8g_o2.58/Z=$8*oEOăU"LWS#f9'xbgniZIe3yv^pVa%Ybao+aYca9aqm0q\9ao.Q&z*ht6BIqn])Z(<QI>păU"=Vn<?gLR>07#lX>(Su(Lbs&\)w9-EkW1BJ8S;blC;u:-'oDC'ze2D*$:Tau'kdPăU"<uaOU73[J<xlvXSL2rq38tGScp>1(F&qC$\hDPe4_[*XoCu,96%&N_MwL-qa)\NăU":*Y1fOSiKMicgP'f\X)[FCHLYK)Rw]apaia^?Ry_oujfCQKe7)U::nt/S[.f+zVăU"+$.UNyhs6l,R**;v>5Todz%6sF(4j6+E?>Rf;&sW$t;ch2nq[6Mk>CjCu&dVS8YăU"qt;q1gl>j&L3p]PJ2m'cN>Ie/Y+kMsy?_5pSj?.BbVQt[w]PcYq0T8MJo9fA?E'ăU"_6ne^1JeI8C%94gSQ/4+ePZcgC#5y,^m'H:M3]kiYmaBA>*u'YqnC2_GL=(M,\4ăU"Ly<8n*aUJ3*L\3v+2oD%2,QNTlx8</om:SCY<aXf'*kbFqY;s1Q*I#\>eof'y)oăU"Mh5^p&xq8=\ipoZkRC[3#N<y=$S7TN#&dN'EkzqVDSB&5#>\>bDa?_&4wtgKIUyăU"x<leD2c7loB^k\.Vh%C/Y<KV;U_h6DtKubUVN=5\q_c):1wg_c\Ld=4e_*RBs-EăU"tP+(A<(.2ubmY:Z::;,Bhv=c6WmDQ<4RIRk4ib3[x4CqcFW>>OaT</Wq5qVG3pYăU"+JF=2i%[f#Gu),gd(e8IIVPIV(A'L&2jwL*CS_5LJhMV4sU=J<^bT?;E=xKp#=LăU"Cg2e$P0?GS0b7GXmj&b6&ljKvm^01L3L8OWM2%k%uMM9drhBN4/VD['K-h,u6U9ăU"Zou-nBj3C76kcItn6(Lh>h\w+%up()%9%%%[-%^30pGZ*9V-Q&7%%i)%%%-%#%%ăU"V&%nsSgmruNM(VZ8fm9%Y0N4PGY00,um16=&5MBlT\YQU]](h<IdH:[)NDO\&0\ăU"v$52<C-%Qov(;f;$1xg'3qm6B4qe0lHTj$lTRhRanZ4iJTF.-lW7leXq_qd3eO]ă'>>> Page 13 of BITMAP.ZIP ends here. Continued on next page.ă'>>> Page 14 of BITMAP.ZIP begins here.ăU"h#?,Ym*LGhHhof\b/=X;E;qM8g?]5xcYzAPWd(=K9rS'>tK\fuLLH-k^Kp#fzH[ăU"LuDr.zL[6u&Y#*8j;Pun%j\,4jrbfJbzB0+=yy$4kQ=puP'r*lCH[UYXSy=TiS=ăU"itvW?7Jh$PV;\xXFXH<mW8JgIcwc^iLq\35NF?0nX#=1ARZ6'#e=1s.XZ<3yV#[ăU"nREwxB,W[>=h]R4>^=x\]+YzH?Cc>(vdjjHg_fpV<F+^Qk/=w0BOAvaN>F$,A++ăU"bDhpVGl<mEdbd?#ZnCig^[PBIbXVVpa$pfK6]bl)bU6Ibt6W%lV*n[bh4zfp[>dăU"hr:=PM1)[N^+XrE/?iEu;]sp:/pdHmA]s,qI=][9S2szp^f4a37?Tsf?XT8^NinăU"$?Dp?4lujrwt/AoZ7u5-I%6NskOoB5$LB&<j$N)VmbB>_<A>PE9)PnX1T^LJfm4ăU"6QggA9SH#V83z6[arU6)I:,m^=kTXv'u*up%()9%%%%-%=b3pGi+xD*'G&%%'I)ăU"%%%-%%%%VtxW%SgruHNKd:%9f9%?i04,Y6u0PM'+#3#t5TlDT\g/Rs6.$'t-;6'ăU"u%[C.-$,eUId6'G(s*SS;m*<QCd=]196f.UM;E5qm>wgG+Z,?qeTX7tJt_VreJsăU"cJs,5\ca7np)BG(.),Wmt1<Wk4$WfRr^7#-<L4w\<B7bBer?&[>r:CT3k(Nn?qyăU">Ug0N,>zt=vg1h-x,d;Vvn\ZnAM;V6vn'h\[jRCw[:gekd^HT>^.o'&+'TVl#)VăU"-aUU1u79GqPn1[Kj=rJ]YM]($,bAymGeW1fcwUE#szABi71<GeO_l5wl,%BM=,văU"L]X$;XW&B$AuUwK]+q+0tR>hWqZub55\4qvLAGD_AK%F*c3V=&&yb7',,#/gczIăU"wtG,3:5wx'V0^jGd3Cul9]ud]ZcT]G,8<6?+pEWVRqj>buSbxYcH<%rS,U$t>:făU"7]Dn=x?+h[nteY7t[T.ef*dbL4<5N91\lX3e^uUAcO^=p[uV^($aijZxMz]S:oWăU"MfrH4qp2afXm1/KfrGt/#mOiU)_2E*qnyW9m&mIO3b/0Q%>*V=dQLD-A8(>uV=yăU"(55%(XxOc>,2P2&_::LkYbBs>'i<up%&'9%%9%%%m-%i3]pG?C:xeV5%%%Rm%%%ăU"0%%%%%%%%%&%%E%%%%%%%%%gruR%qngS%gfxu%p&'9%%9%%#%-%rc2pGn%icHR%ăU"^%%-%x%%.%%%%%%%%%%%%E%%%%+6%#%WY&%nsSg%ruup%&'9%%9%%%d-%w29pG'ăU"z)Q6G^7%%ew%%%.%%%%%%%%%%%%E%%%&)o%%%WYtx%WSgr%uup&%'9%9%%%%-s%ăU"=2pRGv17+[Q6%(%'E%%%-%%%%%%%%%%%E#%%%r&R%%]&&nsS%gruu%p&'9%%9%%ăU"[%-%B-2pGJ5)HBg%9%%)%B%%-%%%%%%%%%%%%E%%1%pd%%%]wq%jSgr%uup&%'9ăU"%9%%%%-s%G2p[Gd&K)Up6%%%aD%%%-%%%%%%%%%%%E%%%%.&y%%]%txWS%gruu%ăU"p&'9%%9%%[%-%c-2pGP).=<^#+%%W%3%%-%%%%%%%%%%%%E%%=%I4%.%Y&n%sSgăU"r%uup&%'9%9%%%%-s%h2p#GeN3'8L,%+%1/%%%-%%%%%%%%%%%E%%%%T';%%Y%wăU"qjS%gruu%p&'9%%9%%[%-%n-2pG\-]s/K#+%%+%3%%-%%%%%%%%%%%%E%%:%KB%ăU"%%Ytx%WSgr%uup&%'9%9%%%%-m%^3p^GZ*V+-Q&%+%i)%%%-%%%%%%%%%%%E[%%ăU"%A'H%%V&&nsS%gruu%p&'9%%9%%%%-%bc3pG+qxD*G[&%%I%)%%-%%%%%%%%%%%ăU"%E%%=%?J%%%Vtx%WSgr%uup*%+%%%%%0%0(%&'%=%3L%%%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăCLOSE:IF S=77AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăBen Paine                      ICON DRAWING PROGRAM           lozt@hotmail.com               07-24-97 (13:28)       QB, QBasic, PDS        72   4716     IDRAW.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"DRAW.ZIP",4^6:Z&=3262:?STRING$(50,177);ăU"%up()%9%%%[-%k%9qGM$8Zbl).%%?4%%%-%%%%iw(f&SgRfx6&3XBr[L5M6Urx0ăU"D^1F=?/]=s8KjpH#i]>xDqq16Smf_C3E[^qU1t/#_w-s'I)-kHpCG)H)SQoLv>MăU"&zdAld-J&&J,_4q=JQnh+WR^76APy,4D7J&3AsL,7v;k-:JSm1k-QDFe;]jNhh/ăU"kqa4/#R[HJ1?/#oA$]ht[4(%bYgABBT-tm.$g,FW2#*doDWA%qfPzCoLBh]SgS6ăU"[fVEp/[<OYKUPk\57q+lQMn)Z>StUW5[R*rzOxF7?vaEE;z0TVg,yQm5E:NaOxRăU"_H=hTWdHp;l_wLP:BQOsAqI**W4QK7m.HC5['2e,_p/^Tl<k&65fq3CFKjCy/;zăU"AY$o?aw\_HT6,8cwdsOUrL4y^r\9me=kIzy4J0Ry4g^U/+7FlubuTv=A-rPDYQlăU"I:wNA^LiViBwu<\T3\>1=Kke7hz3B6S5U+0u1e&K<$+5(kU4)?Q9I*,?-&)Jv\?ăU"OC.48ZJHTZXmT2]),?rQ8J6\j;>I#6RpX?D&Kem?3R^sMOg_\H/^7<I^F+JnH?&ăU"<5j2iX3gK-nblXSI(yaw%hvLSW5D/<25.GgRQ#g9udv>5RxjT4766J4L_GC1dfQăU";Nd3P<5ntv>_:uN.r;bLnK,YLFAHsFmr^QBafdq?8VSKY,W$5soBIQB?ITBe)Z(ăU"+);58i7:KZe%YP4T\.ME8+)hn+fiE1_FIn_vk,#)ae$pHLV1dZ?s#b/Xc&cqwW;ăU"tRpS\Fzc;MgebV;E:YA:BFVdJkl)E94BY+rfz?L_gfYsda&B&>9BaT>*as&*mT+ăU"Rpyg&Y#?qc_0NpKyB<[ptBQ&:\XzKu%Tg_:B0k+mkE:bpAt7N?#P*]kfLYakQK$ăU"RAo;W48jt&1SdYu-P83B/V5Dze(6O-5m3I^*#rTE^YkNdD%3/bz5x^L[')3^,8EăU"5ZTNe_jE*eq?5-%^jXZ2fQVV=_(-C^7Y>4BMiUdm6Wxvln+d/m^y9c8:s\,/u$8ăU"<\4T'uO-Q-zJ6U0V=Nfro<9p+^Zm&Bq,SJ$5R#0h,z32,;$7n/LIm2uU0()kN.FăU"H1.1*abU3]Y]W7$H:e_uaPpr2Vv3s1&vMW]No+h^nVvGlCUa]>ve06Rhv\kk^&-ăU"p/>,=CV=N[DA2bcAFqRvUtM,QgV-%pD2PCRJ2C8p8NJ[R4lqS?kpztPF[b7NRnUăU"k=j]Cy\^C_4ZjPaF9m9Dk\es>V7K_ILAAl,)R70kA<2NYl(+3UsJ.1#<Zi;M6c5ăU"N&g]WO;(U4_k.og(uCU3uPYrSAfT+.lL3R,.l^>o)*pMK*JyOK#vS:buAPZ[[ZaăU"z&MX%cr0?*cwjhg.9:a;pa]*1$\$A&vW=CxFREsO)#=_FazlG-?NM6MDSCZxF)]ăU"QQW,(6bJwYkV=?R=0_49&sTL4Q^j=)cU3\Sl/.POM(5l#OnPwJ8-;rQ9GK]e4OhăU"^IAdwmO>6YihT9K)R4Fo;]tSoVd^5]f-x=-02[y[klu6$b-W<uocneJ9\'bH+<hăU"DVF.t9QS/\kKPpxb:Gsn]&G%n[.F3uk3_h$8J9Htn&WD4ykrJ&2s<rgT58<+f*MăU"(qC\6eA*i'S,F+7[a<VYBk=\6FYpo0+EoReBK/UP(]zRtkz*<(cfVWx%'up(%)9ăU"%%%%-%hc%qGM.OnwZ%&%%N%'%%-%%%%q%tfiS#gfxLbaJs;dU9UhGjmBMb/?NN)ăU"Cokn.YV*,ap_ka;GO;+e(WrZ1kGJtT4.[Tdn<I/Z(xrIpgs;m)Dp5Tc,)mk41FVăU"N?dp&,ANx\d=L)h.LAI&kajB#m,[Y-#^x%<w+m[?HgnnC1%uOhUr_;fZor=[p^RăU"HpT37Osj]ey:i6VwU7AS25<LE60y#^0I6'lJfkq/Ds/GqU:Ui=Be=<)4iMjvEw*ăU"FR])UbME.*3^'E-Cyy:u;H$<[rqrrRa^Wpte_J6x(qS+gImcv'fp/#7gea(b_&\ăU"fI$>f$lZ.VNtW#hDg2_dR+SPe,Fk]Fm9N4$KGJ9Zlo;tz+cf<46N?s$i0n,;M6XăU"^-T.2Fl:$h81UODgOF8N06^,Wc%&AMA0i:Q>Rt*LOZ]NI/$]>%up()%9%%%I-%aăU"00pGU*'Wm\&.%%R,%%%*%%%%uS#nrl<KLp=S[e1)Idb7FY:%(YtlxGN+DOj+&\8ăU";Hn&zFS(nbhG\?h)dHYIeTseNY/67s*(r^ysFjP>TDyK(_7OAqJv_8YQA/B5p#căU"I[M<'&iMmja_+%hpxVK1-T+od1j8qE(:8U\,Eau_EW:$7)OqYvD_YYsaduo$iTIăU"*$5B%z[SL##;mFPRA;]]0QjTT1d'hSD,bAgG-Op+a\?ea$<+,4McU<TP$(]Fn;iăU"+a\e6aqfX5+F?ZH<N1&CX)R(]Ao[+0xMFQ/FQFORt;+aZf#mQ'L0rtO;+a<t(GwăU"Vn*/[_jOO&%0(ynQM3,-D*?Px5C2\?a)4H2u^3[($)o?5hR$4FP,#YA9p31l:%RăU"^u3S[($oq??0a%nR5MO,?PBmu]1vuu-oFln%2X'w&up%()9%%%%-%<9-pG1.p7NăU"'X(%%&n<%%%-%%%%kfij%SnrlD,fby[EV1?NsTFV)FORGc#r$xEBe>EgEA$;V/kăU"Hyi].Mxu7(ltcl$\7\ybzxP.>Hy<uyvy<\zOx6F(it6.79aQNwyKbylzv2x7.>VăU">XD?,BPIwKXUcPDxOQtD6:Z]*o]KMD>n5TC5T5TC5T5TC5T5TC5T6Tg6,41E2:7ăU"xn>=C9dyeeK-,.?lAJl8cC<e5DaFcgM)Tw0v(<qSi;,W36nDH3C;?BPIFwXUc2PăU"xOQ2t6:Z5]o]K.Mtw9/q9q9/q9q9/q9q9/q9qYJqYqz.1\Fr+Gn2h^>g/AUwI/%ăU"W\7h75QkS?IgYS7F-J5q#FihW&U52F#?kY[oaO<FD,bmLB<u+uO'+cmc&N]S1$iăU"oa)pu5r(FigY_T7/J(9qNi1xWu6mrH3C;?BPIFwXUc2PxOQ2t6:Z5]o]K.MtwJIăU"ipWe#5RF)Og-S7F.J7qS4iDWo'WUU:ZXM\114/OmEpbRh)\r68r.C8890J;AqRiăU"*GW/5<aFSg-_T7#J1[qz1(\FrG'n2h>8g/AwkI/%\P7h7Q*kS_g;CSa-0J6qHIiăU"lW]%5BF_gkC[aXO<F,ebmL<.u+u'i+cm&9N]S$qio5+lOe]FQkQ;^uFsQeb^F'RăU";;_F/$RYh/1G$&B5t8JA-bX=3N<C%e2&0Jx&]fiX/v\-v?g[U=Y**gqZV>4ZnG<ăU"l'rc,V4rCF.htyXN82zO&(0(/-B95o1R^A:]on?Q[QQ=*Y2F<#W]h<kq\m9D8dsăU"MvV\Xmx??p=u,+T5/TjAA1Gis^6j%u_QF*_k2$#;I]vA#0_[C)YqxAlv'rm_F^HăU"vO#<0g?GCkO;;>CVqW7_mZ?,'2Y.#;]&\BP$_EEQfcQSNSssjo4>]KXb5]m>1)VăU"0_PrDz)6FN#EqbhL#H(/^BCRpa/Gu%jQ\Q*A2b_vwa>-^h_obNp]KB8VAUcb%Q(ăU"6;ouA2RW5s/>a:b$oIQouQe*SY20#AP^fmqop988odMvVo\mx?e?=u,c+5/T)jAăU"1Gni^6ju%sQnl*e2TQ#3^L%D0d[;MYkxYkx'r3mF^HTv#<0tgGCkgO;>CgVW7_uăU"m?,w>2x#,a%7%i1.O>%8K)YP)OA+uWgO4]HKXb]Em>1V\0_PD>z)6NK#Eqh9L#HăU"La&7.i:vO('nK;Y4[%D+q1Wok+tcTY'PrmF^aHv#<q0gGCKkO;>KCVW7H_m?mW(ăU"Sida577;8&gqo^-..Z.PFKJFi27q/+.FB5t8JA-bX=3N<C%e2&0Jx&]fi8_v[[HăU"3HnNu%p&'9%%9%%%%-%kc%qGM^$Zbl#)%%?%4%%-%%%%%%%%%&%%E%%%%%%%%%iăU"wf&&Sgf%xup&%'9%9%%%%-m%h%q+GMOn&wZ&%%%N'%%%-%%%%%%%%%&%E%%%%>%ăU"*%%q%tfiS%gfxu%p&'9%%9%%#%-%aG0pGU+*Wm\#&%%R%,%%*%%%%%%%%%&%%E%ăU"%(%C+%%%uSn%rlup%&'9%%9%%%R-%9-BpG.p87NX(.%%n<%%%-%%%%%%%%%&%%EăU"%%%'G,%%%kfij%Snrl%up*+%%%%%%)%)%'N%%%'L0%%%%%ăEND SUBăCLOSE:IF S=143AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJoe Davison                    JFONT!                         lithuania@geocities.com        07-30-97 (15:11)       QB, QBasic, PDS        81   5327     JFONT.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JFONT.ZIP",4^6:Z&=3721:?STRING$(50,177);ăU"%up()%9%%%[-%],KvGmm*^\N(%%%UX%%%1%#%%k>M=C30DC0S3V0Cfe(v]AV7-iăU"xHo^KlZZ3x^qGs#Y/1/2Fle$G:.HK5*y[%XvSPvnnn4dSP(%,3A]Y?Y9P[(,3u$ăU"HO2Ya'24_K9*Yo?MibdMx8eeehgj[M%2$-#(?>LK7N&\GPOdUif+N9NN]O$FC9.ăU"?Tbd8)cSEXj_P%03;]JT&^K,)oRI3+i47e\Ra'kEoF:?m#jCOwtVe3<#ob\ZFIhăU"?U*C:G&e]3+&Ub8jg]q246cb_=,X8^'1H61L[ec_\?^&&zapZ_<_$Y^,6dVKQ-'ăU"/)j+$H^6^8L&KcCiO]RAOlCDr;2sxBQtl?neuHG_82;[)T7Dh\9//=cuR6*A):JăU"X'BIZjgbi33W(qJQ%+'kV9Uu>C:/+,t$gu/](O=RPAZP^f3+'_k6_u#&gC8Kt*WăU"x.$Dfj6KdQ;*vZBh:6c-Kqaw1str-Fp\c<GyOM/a5Yc^]'^QrdiHKDG6<NP1bnDăU"x9g874s(PGSitwir7PqKWjD0-a]-'9X/vj88HQX#=1U\iY\7UZ&-cl-o\JX$1RkăU"u(\:$1K=aQrYculYWERX;4E-K>$M0s)8HV?nVHKIFk6P+[bH/qJi6j1)TipklmKăU"]tm$IS8$9K<'^jP^9oaHqmCLK6hGR5F+LznE%::#XZhs3r9KU6&4HmrIS5ji2BPăU"\9>0ZWkV?9<E>kmSa&Re&o9lm>b6;0ut:X<mD(eE9pc(i;YroPoZ$I:KdkDpuW-ăU"M5t+'^$u5fqq/Z<WMxeBPql/1ZBnk9$VTV:c<Rl&tfl9u1f)-6U#xbiWjX-80,qăU"YmBf>#bhk6+l*rEoNoU)31:?FUoerKIFdoJi7?L9#%:u'w9*)g72h^QPt.VTp(\ăU"O;goRl?tO#puOWxJ9tupo/c48O[Uqgyh/ES*+u>uRA%rKPMAjB_\_/,X/$g-.0năU"8LeNe]K+Mr=-AS<ko4[(OUlhmt'd;ZY?hrCkfQCN4Ld)jS+rBv_:0.'%<WcKsWsăU"mhr/yZlBi?nB/oqpHOk&$W#([g%]\)CP]9ke:35Ek[\w^DUWTX#M+-8%u%p()9%ăU"%%%-g%fCw[Go?F*JW/%+%e?%%%.%%I%o5>D=CS1V0B&';<FSkX;wgBKuD=wAF&<ăU"WE*2LE_b;VA)\)1SS_[buB4$m2*I)mymX)aglwpLgA[I)EfU[v+Y\>Elctw_^rsăU"nneWhdjH3LD)hAV+sz^hr\gJ_Slzlw9p0sh0pF>>[ACYZdHHnO08mBfzA86sQ;AăU"$JGrX$?a_[V2o[WX\TjKJl)bxtu_rr&B+m\n8=Xc&tmIz*=lMCVz)5VDVVYc/$tăU"AKMQ_CKaf7*qtv;J(7LWo'mBmNi][>&S+C4/gexMW5,?ZpD1Tsv7OaoJr9?tg2WăU"V1xQO^<2&^T*hC2nYm+'C%zxpEUb-+k&+cm[eK9]IY3v(Ei=?H0%+.b7:L($>lIăU".VOGdG^fFv5bs^y[Bd;__C/2t7.U/\%1WpxmGKk(DuP)kYkF1]-8'VLk*NdwP2)ăU"beP^rb=+FWSw\K5][bj?6:#J#'mOT-khZq.U:(4WN<T]OwV;:62jiCi2nm\[YurăU"n;IlCqQdGHBHpIcP$)Oj'R'cjDXWK_CbP2i#U7Z^%?y>&)'H'/)QSG>[,_6Bd_JăU"msTDVu4L>S05bzMMnKdjwR;HgcxobZT,.G#b+8,gTZ,A.-(T(+PQ$9C>;Ily\sfăU"o?xBHcGo2U6a-UP<PT58KkZfQ.;R+qYi#HQd#vvC>KPqH>U\5.UiBm.wwvU*VGNăU"8%tMnJ:.T9T^pyiWIGnoz&?2JS])\t[J#M6y8-L\m+k9V$9DosNJuD3q%(MLzg]ăU":hJoRMrp=gbY;9T_)&3=st+V+,FT26OL+tiZ)NqvBFjUVZZ+8PTRy;^UCKB3+WcăU"%Q5ps-j&Z.qgUIImhg&>1)S9KYAlq1QLG1t:N$Ed_LSc:_y1)&P=pMGmhJw;fLOăU"B,*TG6>Iz-lU7r=?p^;;N#F5Gts1w(S7Or.m.UaL3+IS#*1%aBSG7U_Mn:UNSadăU"bdLsiD'w9/:qDOMqJ:1P^F1;#&kKXPgN7=l>/H>m)Bi*CcdVS&)qKw&8H9y;hBkăU"$gyIGa>-Xm,Mr%>C-qR4u96,XXu*WiGsSE2EA?#Tr[q=HNN#OL,:tTWU+pF+V8eăU"nivI?ZZT5m;uC.'aOrYfL9jKKqYwYodmxB4[GXDX(RtD5poy+*nu3*'M76IX5XhăU"c5$BpRsysBHO5-zdya;2ITPZtPA8)sr$^&MAMqv;3[gb8+HA9Me__fI]eW%;kTWăU"phQ:_kM*Y[EX)eW'.1AM2,Z'[_$b<[33q^_2$0lZveK:3<K=t#4';Y_LoKG6VhWăU"*8gk]'n&YOVS4](vjgG6?Yk'M,3?*.2L%2,YDL)[6E+O(5pq]=J>nM[';MNe^H(ăU"Thpu1)0;FzIqS+T=oA/mQ#ctWN0x8mQr(WaGgM\D+Lu;R,h>0y8rVeu7M6N^Nm_ăU"s4T#g8ZK;JhoVL:#O)*s'Bzr/][)8Jr<\+]WV:j(RwK(aMvHEumzp-;+m79*[kMăU"CBjin\96p,sY<hh:2)6suxSvBhp$Jfs1opSWVp^=XSmmOe-vx=m;NXSe9.Bk;UxăU"tM&[UV$CX%dOJzRVp2A=:cOOMl0i?k]Z+/BWuiKaA(ewe<mu?bfhoV1UWAWo3&(ăU"NJ-C&'S[U*^Zw3e5OCt0[hvdHuibIXO0vp/Cf58EaJ\>LleQpUZ?8HIX_wg.*9găU"OE6Krtg4e?G>WvxJ>>eh^T632&<E9xKGV:C:;cj'+mcoa'L+38pPxtqhXX0NDShăU"/=YgQLd*H-8\;R4AY<>mehV77&sr=?nJO5kRdzc/kGNhAu;WM+6j6.#8'cr77OaăU"5A,g^VYwJyakdOG>,_O/52Zzr#D.;pNibIV&[HZWmQb$VYWOECro4.8G6w0-;;FăU"thMV.=)D,6YAZaqawRklulJDv8mrZ:la;w)\B#+YjLUxV29iDdgFc2lgKSgG$O1ăU"6*[I+JAcf.I#U;>fu-PcvJB66*h\k7(2b0S_fp'nrx/ij[eW25<0I=J1-)1caL9ăU"3;Xf\B,?0lB?pcC>.]bUbfHUnYE^3,E&Wm?WpuUim()N$ek<TZE&$lv6D;6c-hvăU"8v+Gy:U-aCk/Q0GW;q)J&?<fr_]C2i1Ch'DIe$'.iZkh5TrBgIa?+7LekaQ\4HcăU"81V3\.R<QQ<k3O1^Pae.YuI-Mb(_;Z8KO?wadRv_U#V7NZd/8rED=0nk&vFmZfTăU"djOFnN?[+AxMY<vmm7S,vD>pAw\k/^(GFol&PGgQTZQ94r#7MaG?gPctR&+>.2UăU"TpqDOr\SJ.6dm%i\8]jR]<'Wi,HKkuemer5ZlrLh.N#iqfNuno)w&8?stHTY.x$ăU"NsDwt05)\.j2n8mau9O$mSQeSK>e4O(^ml_piH^DEn[G$d]e&9fUiiZ0-57M3o+ăU"JdEuoUlMH&r,rs?[wa&Q's#.MIL#3EEld38sO<n_NrTmp%TMoA,c>?&P(5O)4J*ăU"MPNEIDIAkV+1Fy]_*xUG?LTJ69qUB(nz1IfWp>a<P>]E$l:7BWUDgU+T[R]/AbOăU"dvG'k0W[G(zE%?:D1,s]pT_gXuR9onst^qpU#)-RrPD2Y*.5xUmof1KFe,g'5][ăU"DV;s7;'LzSw[$.u+%>\F[T+FJa0ox&XTr_jP)mk2)+Ho=#GD\%.G9OR=X4#*=H(ăU"ve)%&4Z>q*v?EV4>JeV&#=0CAqF[sh'q[KI<%'.I9?B==O:w,L[=FQ.3,'/ZBPmăU"BrL*:I+S98-Y$O+]ArNAF*yEZbkr6TDW3eyxtd-mY>za]V.w.[Soj5q2[;F4foOăU"WRBA?l%IFn%DUK#kekXUXt=Kwu>3+EIA^thb%>pgsD'VGGPju8/)1RD'c:cnPPZăU"6R7Xr(opLh;2lu0UfZC^:],rK)13S:TyTH]5\LS4P;/6u;#X//U<=?/FaGC3sjsăU"0]I2KXVsk&?^SUVQ'%A;dm#&mt3m#\mWsSSpI:+K(nUa^,1iN;6o[oo>2D'1yG[ăU"i.m]8+35Ng_Vu_+dS8C%3]qNIF:1Xp5ta;jf36V$^_,KauGcBnaU]Hk_ICqrM/NăU"^<JoHDS42Ckj,svn4iDW64<_4<],i:,:*AfRbA)/3T3p;pH&>]bU[8xJ+8#Zg80ăU"q]%HW(hhfG64U;anYa_%JJfKjZ)>J&=YD(c0\M+xZ,%ILKk,v9$786CE-gaO7akăU"]6?cbN3/2vil&jNOS5.<q\pBRl?tr5xgY*^#_pE/[*^;5A4MT1v*mX[dh9,I4N^ăU"3;ae;Jw,f'-e/#;r(^p4F2i+227,Gr?CY:K1QLk8KocsExQc(6MhR<U+pf<Pm9;ăU"1ZSWBiPcP(b/ac48tT;?ZkEuCVemhd-1CK8Fbc2%&>pt?ohp]%,d7wNiO%7hUL'ăU"DvXqXukB3\*OzhB.]BreyAPt5?U%'^jPL)=_=&SVwT45*%;C$_A:jl.sEwuRYE?ăU"r0ln#)z2>SJev*<_7S==?Q$%gFQ'92m[=[.kw'&49C$D:c=Bsq8M/)F9+zR1M)hăU"ERqK>;('x,up%&'W0%9%%%[-%],KvGmm*^\N(%%%UX%%%1%%%%%%%%%&%RE%/P%ăU"%%%%Lk>=CM30C0LS30C%up&'%W09%%%%-%;fCwGmo?FJ&W/%%'e?%%%.%%%%%%%ăU"%%&%E%*/Px(#%%o52>=CS210Bu%p*+%%%%%'#%'%#%%%%'%3%%%%%ăEND SUBăCLOSE:IF S=239AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăBen Paine                      SPECIAL EFFECTS (LOADS GIFS)   lozt@hotmail.com               08-01-97 (17:33)       QB, QBasic, PDS        197  5697     EFFECTS.BAS DECLARE FUNCTION pixelate$ (sz!)ăDECLARE FUNCTION fx1$ ()ăDECLARE FUNCTION fx2$ ()ăDECLARE FUNCTION size$ (n!)ăDECLARE FUNCTION PalBSave$ (FileName$)ăDECLARE FUNCTION loadgif$ (a$)ăTYPE Colră Dat AS STRING * 3ăEND TYPEăSCREEN 13ăc$ = loadgif$("c:\bud\hbclogo.gif")ăc$ = pixelate$(1)ăăFUNCTION fx1$ăfx1:ăp = POINT(a, b)ăPSET (a - 1, b), păPSET (a + 1, b), păPSET (a, b + 1), păPSET (a, b - 1), păa = a + 2ăIF a > 320 THEN a = 0: b = b + 1.5ăIF b > 200 THEN  ELSE GOTO fx1ăăEND FUNCTIONăăFUNCTION fx2$ăfx2:ăp = POINT(a, b)ăPSET (a - 1, b), păPSET (a + 1, b), păPSET (a, b + 1), păPSET (a, b - 1), păa = a + 1.2ăIF a > 320 THEN a = 0: b = b + 1.5ăIF b > 200 THEN  ELSE GOTO fx2ăăEND FUNCTIONăăFUNCTION loadgif$ (a$)ăDEFINT A-ZăDIM Prefix(4095), Suffix(4095), OutStack(4095), ShiftOut(8)ăDIM Ybase AS LONG, Powersof2(11) AS LONG, WorkCode AS LONGăăFOR a = 0 TO 7: ShiftOut(8 - a) = 2 ^ a: NEXTăFOR a = 0 TO 11: Powersof2(a) = 2 ^ a: NEXTăIF INSTR(a$, ".") = 0 THEN a$ = a$ + ".gif"ăOPEN a$ FOR BINARY AS #1ăa$ = "      ": GET #1, , a$ăIF a$ <> "GIF87a" THEN PRINT "Not a GIF87a file.":ăGET #1, , TotalX: GET #1, , TotalY: GOSUB GetByteăNumColors = 2 ^ ((a AND 7) + 1): NoPalette = (a AND 128) = 0ăGOSUB GetByte: Background = aăGOSUB GetByte: IF a <> 0 THEN PRINT "Bad screen descriptor.":ăIF NoPalette = 0 THEN p$ = SPACE$(NumColors * 3): GET #1, , p$ăDOă    GOSUB GetByteă    IF a = 44 THENă        EXIT DOă    ELSEIF a <> 33 THENă        PRINT "Unknown extension type.":ă    END IFă    GOSUB GetByteă    DO: GOSUB GetByte: a$ = SPACE$(a): GET #1, , a$: LOOP UNTIL a = 0ăLOOPăGET #1, , XStart: GET #1, , YStart: GET #1, , XLength: GET #1, , YLengthăXEnd = XStart + XLength: YEnd = YStart + YLength: GOSUB GetByteăIF a AND 128 THEN PRINT "Can't handle local colormaps.":ăInterlaced = a AND 64: PassNumber = 0: PassStep = 8ăGOSUB GetByteăClearCode = 2 ^ aăEOSCode = ClearCode + 1ăFirstCode = ClearCode + 2: NextCode = FirstCodeăStartCodeSize = a + 1: CodeSize = StartCodeSizeăStartMaxCode = 2 ^ (a + 1) - 1: MaxCode = StartMaxCodeăăBitsIn = 0: BlockSize = 0: BlockPointer = 1ăX = XStart: Y = YStart: Ybase = Y * 320&ăăDEF SEG = &HA000ăIF NoPalette = 0 THENă    OUT &H3C7, 0: OUT &H3C8, 0ă    FOR a = 1 TO NumColors * 3: OUT &H3C9, ASC(MID$(p$, a, 1)) \ 4: NEXTăEND IFăLINE (0, 0)-(319, 199), Background, BFăDOă    GOSUB GetCodeă    IF Code <> EOSCode THENă        IF Code = ClearCode THENă            NextCode = FirstCodeă            CodeSize = StartCodeSizeă            MaxCode = StartMaxCodeă            GOSUB GetCodeă            CurCode = Code: LastCode = Code: LastPixel = Codeă            IF X < 320 THEN POKE X + Ybase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă        ELSEă            CurCode = Code: StackPointer = 0ă            IF Code > NextCode THEN EXIT DO 'bad GIF if this happensă            IF Code = NextCode THENă                CurCode = LastCodeă                OutStack(StackPointer) = LastPixelă                StackPointer = StackPointer + 1ă            END IFăă            DO WHILE CurCode >= FirstCodeă                OutStack(StackPointer) = Suffix(CurCode)ă                StackPointer = StackPointer + 1ă                CurCode = Prefix(CurCode)ă            LOOPăă            LastPixel = CurCodeă            IF X < 320 THEN POKE X + Ybase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineăă            FOR a = StackPointer - 1 TO 0 STEP -1ă                IF X < 320 THEN POKE X + Ybase, OutStack(a)ă                X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă            NEXTăă            IF NextCode < 4096 THENă                Prefix(NextCode) = LastCodeă                Suffix(NextCode) = LastPixelă                NextCode = NextCode + 1ă                IF NextCode > MaxCode AND CodeSize < 12 THENă                    CodeSize = CodeSize + 1ă                    MaxCode = MaxCode * 2 + 1ă                END IFă            END IFă            LastCode = Codeă        END IFă    END IFăLOOP UNTIL DoneFlag OR Code = EOSCodeăGOTO dunăăGetByte: a$ = " ": GET #1, , a$: a = ASC(a$): RETURNăăNextScanLine:ă    IF Interlaced THENă        Y = Y + PassStepă        IF Y >= YEnd THENă            PassNumber = PassNumber + 1ă            SELECT CASE PassNumberă            CASE 1: Y = 4: PassStep = 8ă            CASE 2: Y = 2: PassStep = 4ă            CASE 3: Y = 1: PassStep = 2ă            END SELECTă        END IFă    ELSEă        Y = Y + 1ă    END IFă    X = XStart: Ybase = Y * 320&: DoneFlag = Y > 199ăRETURNăGetCode:ă    IF BitsIn = 0 THEN GOSUB ReadBufferedByte: LastChar = a: BitsIn = 8ă    WorkCode = LastChar \ ShiftOut(BitsIn)ă    DO WHILE CodeSize > BitsInă        GOSUB ReadBufferedByte: LastChar = aă        WorkCode = WorkCode OR LastChar * Powersof2(BitsIn)ă        BitsIn = BitsIn + 8ă    LOOPă    BitsIn = BitsIn - CodeSizeă    Code = WorkCode AND MaxCodeăRETURNăReadBufferedByte:ă    IF BlockPointer > BlockSize THENă        GOSUB GetByte: BlockSize = aă        a$ = SPACE$(BlockSize): GET #1, , a$ă        BlockPointer = 1ă    END IFă    a = ASC(MID$(a$, BlockPointer, 1)): BlockPointer = BlockPointer + 1ăRETURNădun:ăCLOSEăEND FUNCTIONăăDEFSNG A-ZăFUNCTION pixelate$ (sz)ăpxlate:ăp = POINT(a, b)ăLINE (a, b)-(a + sz, b + sz), p, BFăa = a + sz + 1ăIF a > 320 THEN a = 0: b = b + sz + 1ăIF b > 200 THEN  ELSE GOTO pxlateăăEND FUNCTIONăăFUNCTION size$ (n)ăsizer:ăr = INT(RND(1) * 2)ăp = POINT(a, b)ăPSET (a / n, b / n), păa = a + 2ăIF a > 320 THEN a = 0: b = b + 2ăIF b > 200 THEN  ELSE GOTO sizerăăEND FUNCTIONăDavey W. Taylor                CIRCULAR PLASMA EFFECT         audio.squad@mailbox.swipnet.se 08-02-97 (20:02)       QB, QBasic, PDS        77   2186     CPLASMA.BAS 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                   ** PLASMA EFFECT **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăăDECLARE SUB setpal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB getPal (Attr%, Red%, Green%, Blue%)ăSCREEN 13                           'Gee...ăăFOR o% = 0 TO 63                    'Set a rainbow paletteă setpal n% + o%, o% - 1, 0, 63ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, o% - 1, 63 - o%ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, 63 - o%, 0ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63 - o%, 0, o% - 1ăNEXT o%ăsetpal 0, 0, 0, 0                   'Fix missed colorsăsetpal 64, 63, 0, 63ăsetpal 128, 63, 63, 0ăsetpal 192, 63, 0, 0ăFOR n% = 1 TO 319                   'Draw the circle patternă c% = (c% + 1)ă o% = INT(c% - (c% * .012)) MOD 256ă IF o% = 0 THEN o% = 1ă LINE (n%, 0)-(319 - n%, 199), o%ăNEXT n%ăFOR n% = 1 TO 199ă c% = (c% + 1)ă o% = INT(c% - (c% * .012)) MOD 256ă IF o% = 0 THEN o% = 1ă LINE (319, n%)-(0, 199 - n%), o%ăNEXT n%ăLINE (0, 0)-(319, 19), 0, BF        'Clear the sidesăLINE (0, 180)-(319, 199), 0, BFăLINE (0, 0)-(29, 199), 0, BF        'Clear top and bottomăLINE (290, 0)-(319, 199), 0, BFăLINE (29, 19)-(290, 180), 1, B      'Draw a borderăLOCATE 1, 9ăPRINT "Plasma by Davey W Taylor"ăăDOă WAIT &H3DA, 8                      'Wait for screen retraceă getPal 1, rr%, gr%, br%    'Rotate ' - the safest way to makeă FOR n% = 2 TO 255          ' - the ' - a delay in a programă  getPal n%, r%, g%, B%     ' - paletteă  setpal n% - 1, r%, g%, B%ă NEXT n%ă setpal 255, rr%, gr%, br%ăLOOP WHILE INKEY$ = ""ăăSUB getPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB setpal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDavey W. Taylor                BIDIRECTIONAL CIRCLE PLASMA    audio.squad@mailbox.swipnet.se 08-02-97 (20:02)       QB, QBasic, PDS        90   2566     BIPLASMA.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                   ** PLASMA EFFECT **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăăDECLARE SUB setpal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB getPal (Attr%, Red%, Green%, Blue%)ăSCREEN 13                           'Gee...ăăFOR o% = 0 TO 63                    'Set a rainbow paletteă setpal n% + o%, o% - 1, 0, 63ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, o% - 1, 63 - o%ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, 63 - o%, 0ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63 - o%, 0, o% - 1ăNEXT o%ăsetpal 0, 0, 0, 0                   'Fix missed colorsăsetpal 64, 63, 0, 63ăsetpal 128, 63, 63, 0ăsetpal 192, 63, 0, 0ăFOR n% = 1 TO 162 STEP 2            'Draw the circle bidirectional patternă c% = (c% + 1) MOD 256ă IF c% = 0 THEN c% = 1ă CIRCLE (159, 99), n%, c%ă CIRCLE (159, 100), n%, c%ă CIRCLE (160, 99), n%, c%ă CIRCLE (159, 98), n%, c%ă CIRCLE (158, 99), n%, c%ăNEXT n%ăDIM lin(1 TO 162, 200) AS INTEGERăFOR n% = 1 TO 200 STEP 2ă GET (0, n% - 1)-(319, n% - 1), lin(1, n%)ăNEXT n%ăFOR n% = 1 TO 162 STEP 2ă c% = (c% + 1) MOD 256ă IF c% = 0 THEN c% = 1ă CIRCLE (159, 99), n%, 255 - c%ă CIRCLE (159, 100), n%, 255 - c%ă CIRCLE (160, 99), n%, 255 - c%ă CIRCLE (159, 98), n%, 255 - c%ă CIRCLE (158, 99), n%, 255 - c%ăNEXT n%ăFOR n% = 1 TO 200 STEP 2ă PUT (0, n% - 1), lin(1, n%), PSETăNEXT n%ăLINE (0, 0)-(319, 19), 0, BF        'Clear the sidesăLINE (0, 180)-(319, 199), 0, BFăLINE (0, 0)-(29, 199), 0, BF        'Clear top and bottomăLINE (290, 0)-(319, 199), 0, BFăLINE (29, 19)-(290, 180), 1, B      'Draw a borderăLOCATE 1, 9ăPRINT "Plasma by Davey W Taylor"ăăDOă WAIT &H3DA, 8                      'Wait for screen retraceă getPal 1, rr%, gr%, br%    'Rotate ' - the safest way to makeă FOR n% = 2 TO 255          ' - the ' - a delay in a programă  getPal n%, r%, g%, B%     ' - paletteă  setpal n% - 1, r%, g%, B%ă NEXT n%ă setpal 255, rr%, gr%, br%ăLOOP WHILE INKEY$ = ""ăăSUB getPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB setpal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDavey W. Taylor                BIDIRECTIONAL LINE PLASMA      audio.squad@mailbox.swipnet.se 08-02-97 (20:02)       QB, QBasic, PDS        72   2051     LIPLASMA.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                   ** PLASMA EFFECT **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăăDECLARE SUB setPal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB getPal (Attr%, Red%, Green%, Blue%)ăSCREEN 13                           'Gee...ăăFOR o% = 0 TO 63                    'Set a rainbow paletteă setPal n% + o%, o% - 1, 0, 63ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setPal n% + o%, 63, o% - 1, 63 - o%ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setPal n% + o%, 63, 63 - o%, 0ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setPal n% + o%, 63 - o%, 0, o% - 1ăNEXT o%ăsetPal 0, 0, 0, 0                   'Fix missed colorsăsetPal 64, 63, 0, 63ăsetPal 128, 63, 63, 0ăsetPal 192, 63, 0, 0ăăFOR n% = 0 TO 319 STEP 2            'Draw the bidirectional patternă c% = c% + 1ă IF c% = 0 THEN c% = 1ă LINE (n%, 0)-(n%, 199), c%ă LINE (319 - n%, 0)-(319 - n%, 199), c%ăNEXT n%ăLINE (0, 0)-(319, 19), 0, BF        'Clear the sidesăLINE (0, 180)-(319, 199), 0, BFăLINE (0, 0)-(29, 199), 0, BF        'Clear top and bottomăLINE (290, 0)-(319, 199), 0, BFăLINE (29, 19)-(290, 180), 1, B      'Draw a borderăLOCATE 1, 9ăPRINT "Plasma by Davey W Taylor"ăăDOă WAIT &H3DA, 8                      'Wait for screen retraceă getPal 1, rr%, gr%, br%    'Rotate ' - the safest way to makeă FOR n% = 2 TO 255          ' - the ' - a delay in a programă  getPal n%, r%, g%, B%     ' - paletteă  setPal n% - 1, r%, g%, B%ă NEXT n%ă setPal 255, rr%, gr%, br%ăLOOP WHILE INKEY$ = ""ăăSUB getPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB setPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDavey W. Taylor                STAR PLASMA EFFECT             audio.squad@mailbox.swipnet.se 08-02-97 (20:02)       QB, QBasic, PDS        77   2105     SPLASMA.BAS 'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                   ** PLASMA EFFECT **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăăDECLARE SUB setpal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB getPal (Attr%, Red%, Green%, Blue%)ăSCREEN 13                           'Gee...ăăFOR o% = 0 TO 63                    'Set a rainbow paletteă setpal n% + o%, o% - 1, 0, 63ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, o% - 1, 63 - o%ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63, 63 - o%, 0ăNEXT o%ăn% = n% + 64ăFOR o% = 0 TO 63ă setpal n% + o%, 63 - o%, 0, o% - 1ăNEXT o%ăsetpal 0, 0, 0, 0                   'Fix missed colorsăsetpal 64, 63, 0, 63ăsetpal 128, 63, 63, 0ăsetpal 192, 63, 0, 0ăăFOR y% = 0 TO 199                   'Draw the star patternă c% = NOT c%ă FOR x% = 0 TO 319ă  c% = NOT c%ă  IF c% THEN n% = x% + y% ELSE n% = x% - y%ă  n% = n% MOD 256ă  IF n% = 0 THEN n% = 1ă  PSET (x%, y%), n%ă NEXT x%ăNEXT y%ăăLINE (0, 0)-(319, 19), 0, BF        'Clear the sidesăLINE (0, 180)-(319, 199), 0, BFăLINE (0, 0)-(29, 199), 0, BF        'Clear top and bottomăLINE (290, 0)-(319, 199), 0, BFăLINE (29, 19)-(290, 180), 1, B      'Draw a borderăLOCATE 1, 9ăPRINT "Plasma by Davey W Taylor"ăăDOă WAIT &H3DA, 8                      'Wait for screen retraceă getPal 1, rr%, gr%, br%    'Rotate ' - the safest way to makeă FOR n% = 2 TO 255          ' - the ' - a delay in a programă  getPal n%, r%, g%, B%     ' - paletteă  setpal n% - 1, r%, g%, B%ă NEXT n%ă setpal 255, rr%, gr%, br%ăLOOP WHILE INKEY$ = ""ăăSUB getPal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăSUB setpal (Attr%, Red%, Green%, Blue%)ăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDavey W. Taylor                3D WAVING FLAG                 audio.squad@mailbox.swipnet.se 08-02-97 (20:02)       QB, QBasic, PDS        479  20148    3DFLAG.BAS  'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                  ** 3D WAVING FLAG **ă'ł                Created by Davey W Tayloră'łă'ł Please mention my name if you use this code in your program!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ă'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł ATTENTION! ATTENTION! ATTENTION! ATTENTION! ATTENTION!ă'ł  This program contains more than just 1 flag. Checkă'ł             the variables below! It cană'ł also be used to save the flag as a series of bitmap'să'ł  to be used in an animation for example an animatedă'ł GIF. You can also easily modify the program to displayă'ł the flag at a higher resolution by modifying the vars.ă'ł If you do this you should also implement reading fromă'ł  file. I will probably write a flag editor where youă'ł       can also change the flag resolution!ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůăDECLARE SUB Fill (x.ul%, y.ul%, x.ur%, y.ur%, x.ll%, y.ll%, x.lr%, y.lr%, c%)ăDECLARE SUB GetPal (Attr%, Red%, Green%, Blue%)     'declare subs and funcs.ăDECLARE SUB SetPal (Attr%, Red%, Green%, Blue%)ăDECLARE FUNCTION GetCC$ ()ăDECLARE FUNCTION SaveBMP! (f$, x%, y%, w%, h%, bpp%)ăă'-  theese variable should be changed!  --ăskip% = 0                     'flag number (0 - 8)ă                              'sweden  (0) / usa     (1) / ireland (2)ă                              'iceland (3) / norway  (4) / spain   (5)ă                              'denmark (6) / finland (7) / france  (8)ă                             ăcnt$ = "sweden"               'name of flag files (max 7 chars)ăoutdir$ = "c:\temp\flags\"    'where to save the filesăsav% = 0                      '1 = save files, 0 = just animate on screenă'-------------------------------------ăăTYPE pointsă ul AS INTEGERă ur AS INTEGERă ll AS INTEGERă lr AS INTEGERă c AS INTEGERăEND TYPEă      ăCONST pi2! = 6.283186                               'pi * 2ăCONST speed! = .6283186                             'flag speedăCONST movement! = 2.5                               'movement amountăCONST space% = 10                                   'space between pixelsăCONST startx% = 0                                   'start x coord. of flagăCONST starty% = 0                                   'start y coort. of flagăCONST xsize% = 22                                   'amount of horiz. pixelsăCONST ysize% = 12                                   'amount of vert. pixelsăCONST wavem! = .5                                   'waves multiplierăCONST cinc% = 16                                    'color fix aăCONST oinc% = 7                                     'color fix băăDIM d!(1 TO xsize%, 1 TO ysize%)                    'dimension varsăDIM xc(1 TO (xsize% - 1) * (ysize% - 1)) AS pointsăDIM yc(1 TO (xsize% - 1) * (ysize% - 1)) AS pointsăDIM cr(1 TO (xsize% - 1) * (ysize% - 1)) AS INTEGERăDIM flag(1 TO xsize% - 1, 1 TO ysize% - 1) AS INTEGERăDIM buff(1 TO 23102) AS INTEGERăăRESTORE flagsăăFOR n% = 1 TO (xsize - 1) * (ysize - 1) * skip%     '(skip flag(s))ă READ dummy%ăNEXT n%ăFOR y% = 1 TO (ysize - 1)                           'read flagă FOR x% = 1 TO (xsize - 1)ă  READ flag(x%, y%)ă NEXT x%ăNEXT y%ăăSCREEN 13                                           'gee...ăăbuff(1) = 1736                                      'initialize bufferăbuff(2) = 117ăăFOR o% = 1 TO 13                                    'set paletteă SetPal o%, 0 + oinc%, 0 + oinc%, o% + 15 + cinc%ăNEXT o%ăFOR o% = 14 TO 26ă SetPal o%, 0 + oinc%, 0 + oinc%, (25 - o%) + 15 + cinc%ăNEXT o%ăFOR o% = 1 TO 13ă SetPal o% + 25, o% + 15 + cinc%, o% + 15 + cinc%, 0 + oinc%ăNEXT o%ăFOR o% = 14 TO 26ă SetPal o% + 25, (25 - o%) + 15 + cinc%, (25 - o%) + 15 + cinc%, 0 + oinc%ăNEXT o%ăFOR o% = 1 TO 13ă SetPal o% + 50, o% + 15 + cinc%, 0 + oinc%, 0 + oinc%ăNEXT o%ăFOR o% = 14 TO 26ă SetPal o% + 50, (25 - o%) + 15 + cinc%, 0 + oinc%, 0 + oinc%ăNEXT o%ăFOR o% = 1 TO 13ă SetPal o% + 75, o% + 15 + cinc%, o% + 15 + cinc%, o% + 15 + cinc%ăNEXT o%ăFOR o% = 14 TO 26ă SetPal o% + 75, (25 - o%) + 15 + cinc%, (25 - o%) + 15 + cinc%, (25 - o%) + 15 + cinc%ăNEXT o%ăFOR o% = 1 TO 13ă SetPal o% + 100, 0 + oinc%, o% + 15 + cinc%, 0 + oinc%ăNEXT o%ăFOR o% = 14 TO 26ă SetPal o% + 100, 0 + oinc%, (25 - o%) + 15 + cinc%, 0 + oinc%ăNEXT o%ăăFOR x% = 1 TO xsize%                                'calculate 3d patternă FOR y% = 1 TO ysize%ă  d!(x%, y%) = (x% + y%) * wavem!ă  DO WHILE d!(x%, y%) > pi2!ă   d!(x%, y%) = d!(x%, y%) - pi2!ă  LOOPă NEXT y%ăNEXT x%ăăDOă FOR x% = 1 TO xsize%                               'increase all pointsă  FOR y% = 1 TO ysize%ă   d!(x%, y%) = d!(x%, y%) + speed!ă   IF d!(x%, y%) > pi2! THEN d!(x%, y%) = d!(x%, y%) - pi2!ă  NEXT y%ă NEXT x%ăă p% = 0                                             'calculate positions andă FOR x% = 1 TO xsize% - 1                           'colorsă  FOR y% = 1 TO ysize% - 1ă   p% = p% + 1ă   xc(p%).ul = ((x% + 0) * space%) + COS(d!(x% + 0, y% + 0)) * movement! + 1ă   yc(p%).ul = ((y% + 0) * space%) + SIN(d!(x% + 0, y% + 0)) * movement! + 1ă   xc(p%).ur = ((x% + 1) * space%) + COS(d!(x% + 1, y% + 0)) * movement! '- 1ă   yc(p%).ur = ((y% + 0) * space%) + SIN(d!(x% + 1, y% + 0)) * movement! + 1ă   xc(p%).ll = ((x% + 0) * space%) + COS(d!(x% + 0, y% + 1)) * movement! + 1ă   yc(p%).ll = ((y% + 1) * space%) + SIN(d!(x% + 0, y% + 1)) * movement! '- 1ă   xc(p%).lr = ((x% + 1) * space%) + COS(d!(x% + 1, y% + 1)) * movement! '- 1ă   yc(p%).lr = ((y% + 1) * space%) + SIN(d!(x% + 1, y% + 1)) * movement! '- 1ă   xc(p%).c = (xc(p%).ul + xc(p%).ur + xc(p%).ll + xc(p%).lr) / 4ă   yc(p%).c = (yc(p%).ul + yc(p%).ur + yc(p%).ll + yc(p%).lr) / 4ă   cr(p%) = INT(d!(x% + 0, y% + 0) * 4) + 1ă   IF cr(p%) > 25 THEN cr(p%) = 25ă   cr(p%) = cr(p%) + 25 * flag(x%, y%)ă  NEXT y%ă NEXT x%ăă p% = 0ă FOR x% = 1 TO xsize% - 1                           'draw it!ă  FOR y% = 1 TO ysize% - 1ă   p% = p% + 1ă   LINE (xc(p%).ul, yc(p%).ul)-(xc(p%).ur, yc(p%).ur), cr(p%)ă   LINE (xc(p%).ur, yc(p%).ur)-(xc(p%).lr, yc(p%).lr), cr(p%)ă   LINE (xc(p%).lr, yc(p%).lr)-(xc(p%).ll, yc(p%).ll), cr(p%)ă   LINE (xc(p%).ll, yc(p%).ll)-(xc(p%).ul, yc(p%).ul), cr(p%)ă   PAINT (xc(p%).c, yc(p%).c), cr(p%), cr(p%)ă  NEXT y%ă NEXT x%ă ă FOR x% = 1 TO xsize% - 1                           'remove upper/lower edgesă  p% = 1 + (11 * (x% - 1))ă  LINE (xc(p%).ul, yc(p%).ul - 1)-(xc(p%).ur, yc(p%).ur - 1), 0ă  LINE (xc(p%).ul, yc(p%).ul - 2)-(xc(p%).ur, yc(p%).ur - 2), 0ă  p% = p% + 10ă  LINE (xc(p%).lr, yc(p%).lr + 1)-(xc(p%).ll, yc(p%).ll + 1), 0ă  LINE (xc(p%).lr, yc(p%).lr + 2)-(xc(p%).ll, yc(p%).ll + 2), 0ă NEXT x%ă FOR y% = 1 TO ysize% - 1                           'remove left/right edgesă  p% = y%ă  LINE (xc(p%).ll - 1, yc(p%).ll)-(xc(p%).ul - 1, yc(p%).ul), 0ă  LINE (xc(p%).ll - 2, yc(p%).ll)-(xc(p%).ul - 2, yc(p%).ul), 0ă  p% = p% + 220ă  LINE (xc(p%).ur + 1, yc(p%).ur)-(xc(p%).lr + 1, yc(p%).lr), 0ă  LINE (xc(p%).ur + 2, yc(p%).ur)-(xc(p%).lr + 2, yc(p%).lr), 0ă NEXT y%ă PSET (xc(231).lr + 1, yc(231).lr + 1), 0           'remove an ugly dot ină                                                    'lower right cornerăă IF sav% = 1 THEN                                   'save or animate?ă  in% = in% + 1ă  file$ = outdir$ + cnt$ + HEX$(in%) + ".bmp"ă  IF sav% = 1 THEN r! = SaveBMP(file$, 7, 7, 217, 117, 8)ă  IF r! THEN WIDTH 80, 25: PRINT "ERROR!": ENDă END IFăă IF sav% = 1 THEN                                   'stop if saving?ă  c! = c! + speed!ă  IF c! > pi2! THEN ENDă END IFăLOOP WHILE INKEY$ = ""ăăflags:ăsweden:ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0ăusa:   ă DATA 0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2ă DATA 0,3,0,3,0,3,0,3,0,3,0,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2ă DATA 0,0,3,0,3,0,3,0,3,0,0,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2ă DATA 0,3,0,3,0,3,0,3,0,3,0,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2ă DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ăireland:ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ă DATA 4,4,4,4,4,4,4,3,3,3,3,3,3,3,1,1,1,1,1,1,1ăiceland:ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,3,2,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0ănorway:ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,3,0,0,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2ăspain:ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2ădenmark:ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ă DATA 2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2ăfinland:ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ă DATA 3,3,3,3,3,0,0,0,3,3,3,3,3,3,3,3,3,3,3,3,3ăfrance:ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ă DATA 0,0,0,0,0,0,0,3,3,3,3,3,3,3,2,2,2,2,2,2,2ăblank:ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ă DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ăăDEFINT A-ZăSUB Fill (x.ul, y.ul, x.ur, y.ur, x.ll, y.ll, x.lr, y.lr, c%)ă uw% = x.ur - x.ulă lw% = x.lr - x.llă uh% = y.ur - y.ulă lh% = y.lr - y.llăă l% = uw%ă IF l% < lw% THEN l% = lw%ă IF l% < ABS(uh%) THEN l% = ABS(uh%)ă IF l% < ABS(lh%) THEN l% = ABS(lh%)ăă FOR n% = 1 TO l%ă  ux% = x.ul + (uw% / l% * n%)ă  uy% = y.ul + (uh% / l% * n%)ă  lx% = x.ll + (lw% / l% * n%)ă  ly% = y.ll + (lh% / l% * n%)ăă'  th% = ly% - uy%ă'  tw% = lx% - ux%ă'  FOR tl% = 1 TO th%ă'   y% = tl% + uy% - 1ă'   x% = ux% + tw% / th% * tl%ă'   PSET (x%, y%), c%ă'   PSET (x% + 1, y%), c%ă'   PSET (x%, y% + 1), c%ă'   PSET (x% + 1, y% + 1), c%ă'  NEXT tl%ă  LINE (ux%, uy%)-(lx%, ly%), c%ă  LINE (ux% + 1, uy%)-(lx% + 1, ly%), c%ă NEXT n%ăEND SUBăăDEFSNG A-ZăFUNCTION GetCC$ 'Reads palette and returns it as a 256 color rgb stringăcc$ = STRING$(768, 0)ăFOR p% = 1 TO 256ăGetPal p% - 1, r%, g%, B%ăMID$(cc$, p% + (2 * (p% - 1)) + 0, 1) = CHR$(4 * (r% + 1) - 1)ăMID$(cc$, p% + (2 * (p% - 1)) + 1, 1) = CHR$(4 * (g% + 1) - 1)ăMID$(cc$, p% + (2 * (p% - 1)) + 2, 1) = CHR$(4 * (B% + 1) - 1)ăNEXT p%ăGetCC$ = cc$ăEND FUNCTIONăăDEFINT A-ZăSUB GetPal (Attr%, Red%, Green%, Blue%) 'SUB to get a color attributeăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăEND SUBăăDEFSNG A-ZăFUNCTION SaveBMP (f$, x%, y%, w%, h%, bpp%)ăSELECT CASE bpp%                                '--------------ăCASE 1: cs% = 2                                 'do needed calculationsăCASE 4: cs% = 16                                'ăCASE 8: cs% = 256                               'ăCASE 24: cs% = 0                                'ăCASE ELSE: SaveBMP = 5: CLOSE #1: EXIT FUNCTION 'ăEND SELECT                                      'ăvl% = INT(8 / bpp%)                             'ăIF bpp% = 24 THEN vl% = 1                       'ăIF INT(w% / 4) <> (w% / 4) THEN                 'ăaa# = 4 * (INT(w% / 4) + 1)                     'ăapl% = aa# - w%                                 'ăEND IF                                          'ăIF bpp% = 24 THEN                               'ă'isize# = 0                                     'havn't figured out how toă'fsize# = isize# + 54                           'calculate file size inăELSE                                            '24 bit mode....ă'isize# = ((w% + apl%) * h%) / (8 / bpp%)       'and the other modes tend toă'fsize# = isize# + (cs% * 4) + 54               'cause an overflow... theyăEND IF                                          'are not nescessary anywayăoffs% = (cs% * 4) + 54                          '--------------ăOPEN f$ FOR BINARY ACCESS WRITE AS #1 LEN = 1   'open fileăx$ = "BM"ăPUT #1, , x$                                    'headerăx$ = MKL$(fsize#)ăPUT #1, , x$                                    'filesizeăx$ = MKL$(0)ăPUT #1, , x$                                    'reservedăx$ = MKL$(offs%)ăPUT #1, , x$                                    'offset to pict dataăx$ = MKL$(40)ăPUT #1, , x$                                    'size of headerăx$ = MKL$(w%)ăPUT #1, , x$                                    'widthăx$ = MKL$(h%)ăPUT #1, , x$                                    'heightăx$ = MKI$(1)ăPUT #1, , x$                                    'planesăx$ = MKI$(bpp%)ăPUT #1, , x$                                    'bits per pixelăx$ = MKL$(0)ăPUT #1, , x$                                    'compressionăx$ = MKL$(isize#)ăPUT #1, , x$                                    'image sizeăx$ = MKL$(2835)ăPUT #1, , x$                                    'width in pels per metreăx$ = MKL$(2835)ăPUT #1, , x$                                    'height in ppmăx$ = MKL$(0)ăPUT #1, , x$                                    'used colors (who cares if ităx$ = MKL$(0)                                    '             says all????   )ăPUT #1, , x$                                    'important colors (i don't :)ăFOR p% = 1 TO cs%                               '--------------ăGetPal p% - 1, r%, g%, B%                       'Save paletteăro$ = CHR$(((r% + 1) * 4) - 1)                  'ăgo$ = CHR$(((g% + 1) * 4) - 1)                  'ăbo$ = CHR$(((B% + 1) * 4) - 1)                  'ăo$ = bo$ + go$ + ro$ + CHR$(0)                  'ăPUT #1, , o$                                    'ăNEXT p%                                         '--------------ăIF bpp% = 24 THEN cad% = 255 ELSE cad% = cs% - 1ăFOR yp% = y% + h% - 1 TO y% STEP -1             '--------------ăgot% = 0: c% = 0                                'make a loop to save fileăt16% = 0                                        'ăFOR xp% = x% TO x% + w% - 1                     'ăcr% = POINT(xp%, yp%)                           'get POINT from screenăPSET (xp%, yp%), cad% - cr% - 1                 'ăIF cr% < 0 THEN cr% = 0                         'ăIF cr% > 255 THEN cr% = 255                     'ăSELECT CASE bpp%                                'ăCASE 1                                          'if b/wăIF c% = 0 THEN v$ = CHR$(0)                     'calculate the 8 bitsăp% = cr% MOD 2                                  'ăa% = 2 ^ (7 - c%)                               'ăIF p% THEN v$ = CHR$(ASC(v$) + a%)              'ăCASE 4                                          'if 16 căIF c% = 0 THEN t16% = 16 * (cr% MOD 16)         'calculate hi/low of byteăIF c% = 1 THEN t16% = t16% + cr% MOD 16         'ăv$ = CHR$(t16%)                                 'ăCASE 8                                          'if 256 căv$ = CHR$(cr%)                                  'use entire pointăCASE 24                                         'ăGetPal cr%, r%, g%, B%                          'check the paletteăo$ = CHR$(((r% + 1) * 4) - 1) + CHR$(((g% + 1) * 4) - 1)ăv$ = CHR$(((B% + 1) * 4) - 1)                   'ăPUT #1, , o$                                    'put the values directlyăgot% = got% + 2                                 'to the file, leaving blueăEND SELECT                                      'for the loop PUTăc% = (c% + 1) MOD vl%                           'ăIF c% = 0 THEN PUT #1, , v$: got% = got% + 1    'PUT byte to fileăNEXT xp%                                        'ăIF c% <> 0 THEN PUT #1, , v$: got% = got% + 1   'if not done PUT bytes inăx$ = CHR$(0)                                    'the fileăDO UNTIL INT(got% / 4) = (got% / 4)             'ăPUT #1, , x$                                    'PUT the extra line-bytesăgot% = got% + 1                                 'to fileăLOOP                                            'ăNEXT yp%                                        'ăCLOSE #1                                        'close fileăEND FUNCTIONăăDEFINT A-ZăSUB SetPal (Attr%, Red%, Green%, Blue%) 'SUB to set a color attributeăOUT &H3C7, Attr%ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăBrad Bailey                    MONITOR MADNESS 2              ducttape@info2000.net          08-02-97 (08:44)       QB, QBasic, PDS        76   1957     MADNESS2.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă'ł Moniter Madness 2                 BY: Duct_Tape łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł I was playing with COS and SIN and I made this  łă'ł neat looking screen saver type thing.           łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł If you would like for me to explain this code   łă'ł to you then email me at ducttape@info2000.net   łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł Duct_Tape's QBasic Page                         łă'ł http://duct-tape.home.ml.org                    łă'ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăăDECLARE SUB pal.set (lo%, hi%, red%, green%, blue%, r%, g%, b%)ăDECLARE SUB write.pal (r%, g%, b%, c%)ăDECLARE SUB get.pal (r%, g%, b%, c%)ăDECLARE SUB pal.fadeout ()ăDECLARE SUB pal.cycle ()ăCONST speed% = 250     'change this to make it go slower or fasterăăSCREEN 13: CLSăxpos = 220: ypos = 220ăsize1 = 25: size2 = 25ăaddx = 1: addy = 1: col = 40: n# = 0ăăDOă x = size1 * COS(n#)ă y = size2 * SIN(n#)ă CIRCLE (xpos + x, ypos + y), 10, colă PAINT (xpos + x, ypos + y), col, colă xpos = xpos + addxă ypos = ypos + addyă col = col + 1ă IF col > 55 THEN col = 32ă IF xpos > 300 THEN addx = -1ă IF xpos < 20 THEN addx = 1ă IF ypos > 180 THEN addy = -1ă IF ypos < 20 THEN addy = 1ă IF n# < 6.28 THEN n# = n# + .04 ELSE n# = 0ă FOR i = 1 TO speed%: NEXT iăLOOP UNTIL INKEY$ <> ""ăăCALL pal.fadeoutăSYSTEMăăSUB get.pal (r%, g%, b%, i%)ăăOUT &H3C7, i%ăr% = INP(&H3C9)ăg% = INP(&H3C9)ăb% = INP(&H3C9)ăăEND SUBăăSUB pal.fadeoutăăFOR n% = 1 TO 63ă  FOR i% = 1 TO 255ă    CALL get.pal(r%, g%, b%, i%)ă    IF r% > 0 THEN r% = r% - 1ă    IF g% > 0 THEN g% = g% - 1ă    IF b% > 0 THEN b% = b% - 1ă    CALL write.pal(r%, g%, b%, i%)ă  NEXT i%ăNEXT n%ăăEND SUBăăSUB write.pal (r%, g%, b%, i%)ăăOUT &H3C8, i%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăăEND SUBăBrad Bailey                    MONITOR MADNESS 3              ducttape@info2000.net          08-02-97 (08:44)       QB, QBasic, PDS        119  2943     MADNESS3.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă'ł Moniter Madness 3                 BY: Duct_Tape łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł I was playing with COS and SIN and I made this  łă'ł neat looking screen saver type thing.           łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł If you would like for me to explain this code   łă'ł to you then email me at ducttape@info2000.net   łă'ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă'ł Duct_Tape's QBasic Page                         łă'ł http://duct-tape.home.ml.org                    łă'ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăăDECLARE SUB pal.set (lo%, hi%, red%, green%, blue%, r%, g%, b%)ăDECLARE SUB write.pal (r%, g%, b%, c%)ăDECLARE SUB get.pal (r%, g%, b%, c%)ăDECLARE SUB pal.fadeout ()ăDECLARE SUB pal.cycle ()ăCOMMON SHARED căCONST speed% = 1           ' makes this a smaller number to make this progă                           ' go faster and vice-versaăăSCREEN 13: CLSăRANDOMIZE TIMERăăFOR c = 1 TO 7ă  READ lo%, hi%, red%, green%, blue%, r%, g%, b%ă  CALL pal.set(lo%, hi%, red%, green%, blue%, r%, g%, b%)ăNEXT căăCALL pal.cycleăCALL pal.fadeoutăSYSTEMăăăDATA 1,   22,  0, 0, 0,  3,  0,  0ăDATA 23,  44,  0, 0, 0,  3,  1,  0ăDATA 45,  66,  0, 0, 0,  3,  3,  0ăDATA 67,  88,  0, 0, 0,  0,  3,  1ăDATA 89,  110, 0, 0, 0,  0,  3,  3ăDATA 111, 132, 0, 0, 0,  0,  1,  3ăDATA 133, 154, 0, 0, 0,  3,  0,  3ăăSUB get.pal (r%, g%, b%, c%)ăăOUT &H3C7, c%ăr% = INP(&H3C9)ăg% = INP(&H3C9)ăb% = INP(&H3C9)ăăEND SUBăăSUB pal.cycleăăxpos% = INT(RND * 200) + 60ăypos% = INT(RND * 140) + 30ăaddx% = 1: addy% = 1: col% = 1: n! = 0ăăDOă x! = 25 * COS(n!)ă y! = 25 * SIN(n!)ă CIRCLE (xpos% + x!, ypos% + y!), 10, col%ă PAINT (xpos% + x!, ypos% + y!), col%, col%ă xpos% = xpos% + addx%ă ypos% = ypos% + addy%ă col% = col% + 1ă IF col% > 153 THEN col% = 1ă IF xpos% > 300 THEN addx% = -1ă IF xpos% < 20 THEN addx% = 1ă IF ypos% > 180 THEN addy% = -1ă IF ypos% < 20 THEN addy% = 1ă IF n! < 6.28 THEN n! = n! + .04 ELSE n! = 0ă CALL get.pal(ro%, og%, bo%, 1)ă FOR i% = 2 TO 154ă   get.pal r%, g%, b%, i%ă   write.pal r%, g%, b%, i% - 1ă   FOR dlay% = 1 TO speed%: NEXT dlay%ă NEXT i%ă CALL write.pal(ro%, og%, bo%, 154)ăLOOP UNTIL INKEY$ <> ""ăăEND SUBăăSUB pal.fadeoutăăFOR n% = 1 TO 64ă  FOR i% = 1 TO 154ă    CALL get.pal(r%, g%, b%, i%)ă    IF r% > 0 THEN r% = r% - 1ă    IF g% > 0 THEN g% = g% - 1ă    IF b% > 0 THEN b% = b% - 1ă    CALL write.pal(r%, g%, b%, i%)ă  NEXT i%ăNEXT n%ăăEND SUBăăSUB pal.set (lo%, hi%, red%, green%, blue%, r%, g%, b%)ăăFOR i% = lo% TO hi%ă  OUT &H3C8, i%ă  OUT &H3C9, red%ă  OUT &H3C9, green%ă  OUT &H3C9, blue%ă  red% = red% + r%ă  green% = green% + g%ă  blue% = blue% + b%ăNEXT i%ăăEND SUBăăSUB write.pal (r%, g%, b%, c%)ăăOUT &H3C8, c%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăăEND SUBăPaul Maunders                  3D ROTATING STARFIELD          Cyberax@hotmail.com            08-04-97 (01:22)       QB, QBasic, PDS        60   2570     3DSTARS.BAS SCREEN 12ăRANDOMIZE TIMERăăMaxStars = 60ăPI = 3.141592654#ăRad% = 360 / (2 * PI)ăYA% = 79ăSB = .0001  'Magnification AcceleratorăZA% = 0     'Roll Direction (Angle)ăSC = 0      'Magnification FactorăHYP% = 300  'Maximum SizeăHS% = 320   'Middle X Co-ordinateăVS% = 240   'Middle Y Co-ordinateăSpike = 0ăLines = 0ăăDIM S%(1000, 10)  'Starting Co-ordinate (Relative Position)ăDIM P%(1000, 2)   'Current Co-ordinateăDIM Old%(1000, 2) 'Previous Co-ordinate (Last Position)     ăăFOR STAR% = 1 TO 1000ăS%(STAR%, 1) = INT(RND * 360) + 1ăS%(STAR%, 2) = INT(RND * 360) + 1ăS%(STAR%, 3) = INT(RND * HYP%) + 90ăNEXTăăFOR REVS% = 1 TO 1000                   'Revolutionsă        FOR YY% = 1 TO 360 STEP 4       'Single Spină        ZA% = ZA% + 1                   'Change Roll Direction (Angle)ă                FOR STAR% = 1 TO MaxStarsă               ă                SC = SC + SB             'Magnification Factoră                XA% = S%(STAR%, 1)       'Relative X positionă                YA% = YY% + S%(STAR%, 2) 'Relative Y position + Spin Amountă                HYP% = S%(STAR%, 3)      'Relative Distance from Center Pointă               ă                XXX% = (COS(YA% / Rad%) * (COS(XA% / Rad%) * HYP%))ă                YYY% = ((SIN(XA% / Rad%) * HYP%) * ABS((SIN((90 - ZA%) / Rad%) * HYP%) / HYP%)) + ((COS((YA% + 90) / Rad%) * (COS(XA% / Rad%) * HYP%) * ABS((COS((90 - ZA%) / Rad%) * HYP%) / HYP%)))ă               ă                P%(STAR%, 1) = HS% + (XXX% * SC) 'Work out Position using Center Points + Position * Scale Factoră                P%(STAR%, 2) = VS% + (YYY% * SC)ă               ă                IF NOT INKEY$ = "" THEN ENDă                IF SC < -1 THEN SB = -SBă                IF SC > 1 THEN SB = -SBă                NEXTă        'CLSă                FOR STAR% = 1 TO MaxStarsă                PSET (Old%(STAR%, 1), Old%(STAR%, 2)), 0ă                PSET (P%(STAR%, 1), P%(STAR%, 2)), 15ă                IF Spike = 1 THEN LINE (Old%(STAR%, 1), Old%(STAR%, 2))-(HS%, VS%), 0ă                IF Spike = 1 THEN LINE (P%(STAR%, 1), P%(STAR%, 2))-(HS%, VS%), 15ă                IF Lines = 1 THEN col = col + 1: IF col > 15 THEN col = 1ă                IF Lines = 1 THEN LINE (Old%(STAR%, 1), Old%(STAR%, 2))-(Old%(STAR% + 1, 1), Old%(STAR% + 1, 2)), 0ă                IF Lines = 1 THEN LINE (P%(STAR%, 1), P%(STAR%, 2))-(P%(STAR% + 1, 1), P%(STAR% + 1, 2)), colă                Old%(STAR%, 1) = P%(STAR%, 1)ă                Old%(STAR%, 2) = P%(STAR%, 2)ă                NEXTă        NEXTăNEXTăThe ABC Programmer             SIDE SCROLLING DEMO            voxel@freenet.edmonton.ab.ca   08-03-97 (19:16)       QB, QBasic, PDS        106  6965     SLIDESHW.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SLIDESHW.ZIP",4^6:Z&=4950:?STRING$(50,177);ăU"%up()%9%%%I-%C?d'H*=.I&$'7%%q*%%%.%%%%jl%fxxS#gfxTgy0>S7e1vC=NxăU"Z.7VZbg\D&[Shyjc;1&p_iN2CRLM2,uqLf*Tol&xMopJcIKd;j+gP;8JM*/B)^NăU"ioeZn.NMfWv.uKZ=p>A<2g(U0T%e]h<W5\i%2j?76Kld4NOjQ?>\v+QR_]rL,#CăU"AobN]pZ1BKH8mG8rV#fWsHdnaJH=j.HQYp1h9'r<YbI+$oJ1.DLSXEvfLlZjkd6ăU"RIrt/,6hm,.5?X4LaUAPo5;h%3*\C0)1o63*c&._3S(bfwN?&ne2.*.Vf[YN1.+ăU"IIF)q2X2k/4#=]UT^e?Th>N$&?l;B:WmJbpFC+jm_)Cn$ShvopW]OAKil1I*KC0ăU"<q\M^36LC9sX9D^PAioXa1$c2?v^UUtjQss]8^%KWS.$&1n[uJ0Xu:A_\#es8[7ăU"qh(c&R*9K_Egg$*fmfJIWgj2Gqd)[1E;v9#LEz'hj^?b[QwWJ]Q9Ci]R3ccYUJ%ăU"chGf*l,\Uo_#xskk82kdLoSxraT&ncTMCd&ve\D+BM(lEM.Dx+5FF[csr3Ae-3YăU"PPIrg<_WB)MPVJzjcD?rA%xd8j9sBeN#<k82nXgrj=PtC3<1J=.j[K.n<nsmd)TăU"iNm*\OZ0wCe2N5(nr2pUO/-f\,A)x=c'SM1*qYwp%s7;LpVAmfpc4w5;xm3/QT3ăU"&JPPJHJ/)g%lPeOBcRJl.(>-(E].1H+,8Xd'muIea_3bHX,gC9IS'Tl9(N76AjRăU"Tqf,QAO)it7teZ$2GTc6&4y16>O3?JVc7)8/w)=kOfV%Dw\cAFF#oe+#wTiOLJeăU"8gU.t%I64,\a1\Io(LDpJdI>2du?J<A46>Oc0>Bits>mq,<D3x(%up()%9%%%I-ăU"%'?['HNj'(bV(7%%;-%%%/%%%%jl%flwu%SgfxN&d:^BSk9U98HjD9WE.0[#mb7ăU".xZd1($GRvX#RWw0b\V]A(9;wt(MoXWpkj48<EKoi&S/eW$+WHWH/X/Y-]RBYM=ăU"l2q],7Gt^#%qs,0huDGTTj^R$TtX'Kpa?]VEpls6MhOsGf-^Q$aEZY$Hz?Fsry9ăU"]=sjVEGu0.]?DhrgYe(t(/w_s<tLggXU&ilvwCEaP+-;X9W]^eMTh#gwU??cICtăU"8hFR3,b*$-9g.Nm+uH>b)rF#QuMl>#+X<tfEH,t_UDp:dh/G4&hRkrl;WvW:vWfăU"Mv<GOF6Unux(Y7\MFhSPY[J31tS6'5)IgfsW%TcfaT(hd/U&3vftk&th0I<KvwDăU"$5g;</y2*X+p547^(Ay)$BRV#?%KqJG5UmpaTvlYR+jwc:dLC0=A/RSXd72u5zXăU"*keBTdIi#?M?(O5H,(&1TiEm_G)39^q$i%QHss5D]FMod2\\0Z^b&Le3I>W;^l<ăU"UJD*OaERG37cgqeMz8N-^I5xMa:$5%fJA??JC\?F)U?gO1xz(ZsdEIB6VD4d/T[ăU"K/J>ra\8BhE9/F8q^Ko]B\uu'C1QE5u(\;siif[EVO<fND<>G6PXW5\niDNsSJCăU"5ea)<:YN>Vc+oVA;/7t0P'*oIY[g8F^&]PwFkU4^=k[SA#]mMp8RuD=4#>K'H)zăU"1h;bhoGYJFI3;<5jYE/LKSm>_Ls7)HuAH%/t^FUDLilu<0kkDZVEtqQ_hK-m13zăU"=rDU%>C5m$7:bB%3,$cig5l9KOci9#44OP=i%+n5u^.Rdd7Bgk8%RPo8/7[R%3)ăU"yrNt$8OzqszOM5eQi\=p0y/^ju-HR%iYri62&%8[v0<V7B#._&Z<k$9HMFP2$LPăU"y\ev#U)oys\&zZ3p8\n-Wq+MwSiCC)RGKKN=iO/j)bi+k<E.lOltvUeW(yDLhl#ăU"&6SpO/Pn1BvqsMlMEupT-acYLWhT5GHA<Lv[OfEc\NuRmw2QlBhwYf_.v\t5pntăU"6h^M49iJ25;cNS%q>0MHPa+*WY*neIR0V[?9g#k:Un_8va-GYx%0up(%)9%%#%-ăU"%ZAy(H'tk;Ug[*%%+%0%%1%%%%m(t&yt%zxjSCy'y\h%0>T7[5vSXexZY&MmW]aăU"O+3V:u;<A'#pa])E5^nit$aGd;#YmjmC]s$dFlCb]T:>O'=_4ukV4pWg]5h4d;AăU"3Hpr=e:\2ALG&mV)rEvLj:GVD3(Ctww=Yi*rtblxxJfK8AWZKQb%K%p(8tjZ6qKăU"\Ya+>.#eM6)7)?$:/?u?P<d3>,E^fE&S']W=0i)?G<u59b/l;[]:oS2R3\WJdM:ăU"V'**x54b/JR:_IWC:%uCfihmh\0cwM(w75z:*\*-eA:ge_sz,i>Xr%25LlD-4e5ăU"mX\1&ia2pN5=D]ojRdS(G%h$?mZU\Gvi5NtZf7?xBz[<UklP(7S(-TUV\Yx<Dm#ăU"w%_DD6J?dR^UD'K#DDDEI#6DKc\I1LNKHoU.&Qg:&Z#i-l(;aom0+6#+fn<'5Q6ăU")m]JP.2V\7B9;NfyIkyOQSEl8W4[6<-i:E6I>9KPVC9B;cgbHwRMQ%&7C.?i*7.ăU"nBLtS#Bek9wg,YSrf?6*5)aqkT]K<]w_KN,:']ml\,BuXp\um$*#tCKL6_#wB](ăU",T+WoFve:Vm>R?\+>u1*/eFt..)Kc'5NTWZo;oBFAUM8bPH*du2DyZjT2X&yRm$ăU"f(PhxObB,-<>n:]f<,+5b#X)#KssYC-O->(9'Dn4FdimS[73EOWitCP'PTaaJ0răU"NU3+31R8+'<3R.\J^B_ED&Ud8T:/0,08I2h?2E1mj$YsS]M7e6t/1\BLiM6^%D*ăU"fpK%-ID/)45BN$.7-&*)kK5Qeuq8G.lT?WW$$v87uIDdJ)LeynMZ1FHI&_&*;>măU"mcg\;J#but_MGi,Yp%7AUVS4r5;UH%-FOd%rxpsz?NdK=;J721E<qa:k<36T(1,ăU"IWSQwqtw/KXjARK'2\^]aeEYM4g&]kj4e9sDWewiSRYR&HB^UnA[e_QjUYcR)#BăU"Hy1knG5%o67vT4hf4uT)Ma$,>yj:IVt$bm%D$HpXBki5F9E'L%KL[2\H%7rUKehăU"P:xR;)pV3nRBx--a5Ir7f9eGY^hJ?C+bQ24VuX0jAB:S^t15rJ0j-G'%yl+a,kAăU"=NN5vR\+Qo:t4A_Jl'CsB=v:,_[uuMB6Y5GJ>k$n85GK5,=)=lQWaenRNHhUD5văU"6]Rqq/eJSU7l+>KhZt4WL7ALAIPtN8l.\[d1'6ZT78]N3T-v7.T4CsTXUV^,^#,ăU"#bcu-fY[32NUFe?C3jgDGsIu&aEOgcCMFJlKQ))'<fV+joPOhaGF;[Ttv>j#P_ZăU"OADJx_uM)?#?s=C$)%1u7;5FNL=\bqkcK&v*C15-?z&unMp'*ToLId,WR-k5RkCăU"/VwP7TzBIoQ+[?RbtJHs1wmDo4\hWeT;aZOu^B_)D5,*3%)t3Z<UnB[Er]fqL4*ăU"[#c34]T0c--1MhBg4cpwysi]ur*#D]*ZL]/JDh[;D#J>6c7VtUt$Z_4ND22xA6UăU"<gS[rp[QY\)]BGodgLTkff_Uww>e(J##P^N#sq2wnH:Q#ZPqIy,TwrQ=^E\odx2ăU",Nr[5CLd7E\\a)rp?/&a*YiT3Vv6#6Q#>*eirsXcXPj229t4%okpC%jLZSJo58DăU"ijUj<SD<FZ%hT./<0CcRF[5ulkl<<;7A_N2IiW3z9A_\3%;9G?gbI6b/X#hyWt7ăU"6zYChVL;GT7s5G$;7M0X/&r?hjVAQ?<e(leyd%;Jh=^i%uxvMlgVvv<5/-U])ZnăU"<r612vttgdwGZlV+<:WcE[rmNOEGqg#p]jQNc4/u+8SPL-EBf/a2>Rpja]8?N[KăU"15g4LLIchEgQ-B*kXO4pCgeb<%%s*$2Gr\uv\$k<X/w):5ZjG>q5p*-C#S)=bzdăU"7*^Z]^ytD)8Si/fh.b7m[9Oem54\t_Xk&[lG9%dh5GRBOtS&FGc>D=HW]G+I[,$ăU"ymt[(QiKj^8ooWDV+ZZP&HXkn#YKD?LU:z2-\#_8j%tYXL]&.up(%)9%%#%-%T\ăU"?'Hp/06VT[(%%5%-%%/#%%%%%lflw%uSgfOx&d:,>[k9bU8HjFDWj9U((QIVKvcăU"%1W3?Q7v#Rs-Mf\T6dVoJ[eruTkNXB?5fQ_mb$STBuQH25Wlm:BMTH$6+tr6td4ăU"^Er[_dC,K[D+Nci\:7b=/i7og0UtM-aKgnHn8PuhVArEKZJao4>uu58.(d)lYAhăU"-8A34#d1lrG=Ar$ovZDOQXv1NrSL:i:*K4d4BlYQ/QUT\<rrXp6_*cFYSJh,sFRăU"eOd^'?Y;nvepJ#_;BdA[N$n*AP>tM4Vei7\0a'StKc6;N_v0,a*dk/iH4D.ND/hăU"BSpb9MHq2+oduEb\qB'(N0)Td&Zf7,[N[$63D6Jhc0:X_4xvbfE'Xm>xx6<iL1'ăU".J0p5X&FTVE.L*j$:=BEOh\n2?S\9srKx-+poADl#iHHP<s[T^#nFTbcrpeJU7păU"JmVVkn*YHR9fO]Q06V_tW;iGra+zq/mW>CWH\7N^'2'.rsI#A_(.qb?r.0*WA&4ăU"0lEmTIJKb.:z)n]jY=c]2)s(u..lr6'&aSgl=&XBZm83tu8F&0F$lnuci;M68dVăU"CHWO#=;X$kD3g'Ybed/JoED1:+Dc<_mM<O7(=OHw&*>[0TGT<#wF$r*y4a3;w,_ăU"<\K^2',%n,eF;R-eSZ;SikULPdLYRQSE8g4hE8H90fg>ei[7ct%/j_:_q._]=[^ăU"]mq86e5/J5k]<1[&b\m+bMSudVlu.9t9Q17q<M8UKJ>y&BD&YTg$BVhhZ)cN3_7ăU"df$2H]%VH#cUz9'N=X.Q2w3pA&/4Og%8df=0dL]kxNZe=Y0.Gqm05ZL;cop_ikmăU"g0'T83AiiT[EvHj2[y<^19<-[%6r8v;=zNiHM;jFo#k&Gr[TJG7XoloD3.Ed,4MăU"+\qwyLF;9\<w827&1tf89/1Wl%[MnCYjaZQK%Yu%J?_<vo$7N\4\szVBIk#dh/OăU"/QDL3#xwxhvnlbhZz+VQ]v-W/^QF6K>-Gx'gqVj,aC:qN7tQzLlk]jZV0P>$_M4ăU"iFJ25cadS%hY0MXaN+*W:6nfI4jV[?g+#k8n5_8v-9GYx0%up()%9%%%I-%gyd(ăU"HaF1,HP'7%%P*%%%.%.%%%l%fxxS#gfxT^y<tSmu9wW>sxZ.V0(J1h)/q?LRx?PăU"aGU[6?N:7VQP>5ohuc;wNtlB*T]jMSrIm0$acH^$foX=taCMav8deVdZw>H6nKtăU"$lYC/9CU*'G(rV8MHoTZLq>[jet,Q^Op?iu1gr/IYcJM9m+8H/rHQg+3e=LAh8dăU"aIFBSA^Dm)#Cg>WqlGb2t8gkD&Ck-gIo='LEbNHYgW^[Y7JDvj?#J7Y[ZNNAgkLăU"_1OU+RXM/=&#Y>eD#GFI+=W3w=J9e7,um,RL-6^G3*IC?]*;hx(]*GQJd<v$TOpăU",4-OI2v]&BEhbM48m'n<#f6GoafXpc$1npGI*C^(:irJ99G,(yw<SY:&QkX8?JEăU"V]8mQm-cNd6\Tu&r)61\%&GfumJ0X?6)?=NIKVUuDpncR.nOB[qg]Of8mh>GgiZăU":;ej=[Y?Me+^ta3;6^^Up7LuX'2jx23XL+MrvNj]ma*;S*]p<gKl+0RYO_I:u#UăU"'QpyY3qk)gqz3r.bq?nUIWhOY5A.b<[;m*$j<VXB3jo;U'4cIS39OAekg]oT6MIăU"$VuJspdy_,LKb1qy+j,dk;4+RJKKakEN6b%N[PRQLo1:L0BJ+$8s*Sd^+]1B1c0ăU"6A1WuU+f#Q7;ZX=SsC;nchTHKDK0sbdfrIX_j6sJ]onbs$*CG$8b[dv5S1b$*dSăU"jwV7dkLbI*L,?d\uOs#_kMA<5+/.[J*d7>GtBh#dTxvNJD6<XC9OFL]?m6Kb)tuăU":$-8ws:-\IS<D1si8WiNJ6G9Sa$9,j;bN[J%pf9M]u,#NwVr.[*nu'at#O:>lK/ăU"x$CJYTek&>dBw,%up&'%9%9%%%%-%)C?'H,*=I&&$'%%'q*%%%.%%%%%%%%%&%EăU"%%%%%%%%%jl%fxxS%gfxu%p&'9%%9%%#%-%'&?'HN-j(bV[(%%;%-%%/%%%%%%%ăU"%%&%%E%%+%1'%%%jlf%lwuS%gfxu%p&'9%%9%%#%-%ZAy(H'tk;Ug[*%%+%0%%1ăU"%%%%%%%%%&%%E%%%%6+%#%mt&%ytzx#jSy'%yup&%'9%9%%%%-1%T?'4Hp06&VTăU"(%+%5-%%%/%%%%%%%%%&%E%%%%N#1%%%%lflw%uSgf%xup&%'9%9%%%%-1%gy(:ăU"HaF,)HP'%+%P*%%%.%%%%%%%%%&%E#%%%O#4%%%%lfxx%Sgfx%up*+%%%%%%*%*ăU"%%=&%%%M7%%%%%ăEND SUBăCLOSE:IF S=11AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDavey W. Taylor                3D WAVE PATTERN                audio.squad@mailbox.swipnet.se 08-13-97 (08:25)       QB, QBasic, PDS        54   2598     3DWAVE.BAS  'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ů  ůă'ł                     ** 3D WAVE PATTERN **ă'ł                   Created by Davey W Tayloră'łă'ł  This is the original pattern I used for the 3d-flag program.ă'ł   I would like to know if it is possible to map an image toă'ł  this pattern using pure basic (no asm). I'm not looking foră'ł          speed, just a good, working program!ă'ł   Anyway, if you use this pattern directly or as a base foră'ł  some other graphical thingy, I would appreciate if you mentionă'ł my name... So if you have some code for the image mapping, email!ă'łă'ł NOTE: This program uses real time calculation for the pixel pos'să'ł       precalculating this into an array would increase the speedă'ł       tremendously! I simply didn't have the time or will...ă'łă'ł       ALSO! THE 3D-FLAG EDITOR IS DONE! YOU CAN DOWNLOAD THE PROGRAM ATă'ł       http://dix.dubna.ru/flagdraw/ă'ł       I WILL RELEASE THE SOURCE IN THE NEXT PACKAGE...ă'ŔÄÄÄÄÄ--ÄÄů-  ů   ůă' ** If you have any comments / suggestions / questions, my email is: **ă' ** audio.squad@mailbox.swipnet.se                                   **ăSCREEN 1ăăCONST pi2! = 6.283186                               'pi * 2ăCONST speed! = .1                                   'flag speedăCONST movement% = 2                                 'movement amountăCONST space% = 10                                   'space between pixelsăCONST startx% = 100                                 'start x coord. of flagăCONST starty% = 70                                  'start y coort. of flagăCONST xsize% = 10                                   'amount of horiz. pixelsăCONST ysize% = 5                                    'amount of vert. pixelsăCONST wavem! = 1                                    'waves multiplierăăDIM d!(1 TO xsize%, 1 TO ysize%)ăFOR x% = 1 TO xsize%ă FOR y% = 1 TO ysize%ă  d!(x%, y%) = (x% + y%) / wavem!ă  DO WHILE d!(x%, y%) > pi2!ă   d!(x%, y%) = d!(x%, y%) - pi2!ă  LOOPă NEXT y%ăNEXT x%ăDOă' WAIT &H3DA, 8                                      'make it not so fast...ă FOR x% = 1 TO xsize%ă  FOR y% = 1 TO ysize%ă   d!(x%, y%) = d!(x%, y%) + speed!                 'calc. and draw pixelsă   PSET (startx% + (x% * space%) + (COS(d!(x%, y%) - speed!) * movement%), starty% + (y% * space%) + (SIN(d!(x%, y%) - speed!) * movement%)), 0ă   PSET (startx% + (x% * space%) + (COS(d!(x%, y%)) * movement%), starty% + (y% * space%) + (SIN(d!(x%, y%)) * movement%)), 15ă   IF d!(x%, y%) > pi2! THEN d!(x%, y%) = d!(x%, y%) - pi2!ă  NEXT y%ă NEXT x%ăLOOP WHILE INKEY$ = ""ăAngelo Ken Pesce               PARTICLE FOUNTAIN              ken@uniserv.uniplan.it         08-20-97 (18:41)       PB                     151  2511     FOUNTAIN.BAS' Original particle fountain source: Daniel Daviesăă' PB PORTING, MODE13ROUTINES, SMOOTH EFFECT, DOUBLE BUFFERING,ă' CODE REVISION AND ALL THE OTHER THINGS NEEDED TO MAKE A GOODă' EFFECT: Angelo KEN Pesce ;-)ăă' Email me:Ken@uniserv.uniplan.ităă' W ITALY!!!!!!ăă' TO DO LIST:ă' 1)OPTIMIZEă' 2)WIND# & GRAV# ANIMATION (I'm not too good with those x=f(t) functionsă'   mabye x-bios can do something...)ă' 3)EVERY PARTICLE MUST HAVE ITS OWN WIND# AND GRAV# VALUES (needed for w&g anim)ăăă$OPTIMIZE SPEEDă' 386 is REQUIRED...ă$CPU 80386ă$LIB ALL OFFă$ERROR ALL OFFă$FLOAT NPXăăă' Init mode 13hă!mov ax,&h13ă!int &h10ăăă' Init Screen bufferăDIM screenbuffer(32000+(320/2)) as wordăDIM scrseg as wordăscrseg=varseg(screenbuffer(0))ăăă' Paletteămaxcol%=128ăOUT &H3C8, 0ăFOR i = 0 TO 63ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, iăNEXTăFOR i = 0 TO 63ăOUT &H3C9, 0ăOUT &H3C9, iăOUT &H3C9, 63ăNEXTăă' UNCOMMENT THOSE LINES FOR 192 COLORS VERSIONă' maxcol%=192ă'FOR i = 0 TO 63ă'OUT &H3C9, iă'OUT &H3C9, 63ă'OUT &H3C9, 63ă'NEXTăăăTYPE particleăx AS singleăy AS singleăxm AS singleăym AS singleăEND TYPEăănum% = 3000ăDIM objs(num%) AS particleăwind# = 0ăGRAV# = .019ăDOăăFOR x% = 1 TO num%ăăIF objs(x%).y > 199 OR objs(x%).x > 319 OR objs(x%).y < 0 OR objs(x%).x < 1 THENăobjs(x%).x = 158 + (RND * 4)ăobjs(x%).y = 0ăobjs(x%).xm = (RND * 2) - 1ăobjs(x%).ym = (RND * 3) + 2ăELSEăă' Put pixel into bufferăx1%=int(objs(x%).x)ăy1%=int(199-objs(x%).y)ă !Mov     di,y1%ă' SHL DI,8ă !Dw      &hE7C1ă !Db      8ă !Mov     bx, y1%ă' SHL BX,6ă !Dw      &hE3C1ă !Db      6ă !Add     di, x1%ă !Mov     es, scrsegă !Add     di, bxă !Mov     dl, maxcol%ă !Mov     es:[di], dlăăincr objs(x%).x, objs(x%).xmăincr objs(x%).y, objs(x%).ymădecr objs(x%).ym, GRAV#ăincr objs(x%).xm, wind#ăEND IFăăNEXT x%ăă' SMOOTH BUFFERă !mov     es,scrsegă !Mov     di, &hF8c0 ; 64000-320:Don't smooth last lineă !Xor     bx, bxăjmp1:ă !Mov     bl, es:[di]ă !Add     ax, bxă !Mov     bl, es:[di + 320]ă !Add     ax, bxă !Mov     bl, es:[di - 1]ă !Add     ax, bxă !Dw      &hE8C1ă !Db      2ă !Mov     es:[di], ală !Dec     diă !Jnz     jmp1ăăă' COPY BUFFER TO SCREENă !Push    dsă !Push    siă !Mov     ds, scrsegă !Mov     si, 0ă !Mov     di, 0ă !Mov     ax, &ha000ă !Mov     es, axă !Mov     cx, &h3e60ă !Db      &hF3ă !Db      &h66ă !Db      &hA5ă !Pop     siă !Pop     dsăăLOOP until len(inkey$)ăăăăăăăăăăăăAngelo Ken Pesce               PARTICLE EXPLOSION (FIREWORKS) ken@uniserv.uniplan.it         08-20-97 (18:41)       PB                     244  5050     EXPLODE.BAS ' ***********************************ă' ANGELO KEN PESCE 1997             *ă' Email me:Ken@uniserv.uniplan.it   *ă' ***********************************ăă' (Smooth routine made by X-Bios)ăăăă' Some "standars" pb initsă$OPTIMIZE SPEEDă' 386 is REQUIRED...ă$CPU 80386ă$LIB ALL OFFă$ERROR ALL OFFă$FLOAT NPXă randomize timerăăă' Init mode 13h + SQUARE PIXELSă !Mov     ax, &h13ă !Int     &h10ă !mov dx,&h3c2ă !mov al,&h0e3ă !out dx,alăăăă' Init Screen bufferă DIM screenbuffer(32000) as WORDă DIM scrseg as WORDă scrseg = varseg(screenbuffer(0))ăăă' Generate Paletteă maxcol% = 255ă CALL setpalăăă' Init particle arrayă TYPE particleă    x as SINGLEă    y as SINGLEă    xm as SINGLEă    ym as SINGLEă END TYPEă num% = 4000ă DIM objs(num%) as particleăăă GRAV# = 0.01:  'TRY OTHER GRAV# VALUES LIKE 0;0.01 etc...ăăă' ********************************************>>>>>ă' MAIN ********************************************>>>>>ă' ********************************************>>>>>ăă DOăă' FLASH EFFECT ********************************************>>>>>ăă' Clear screenă    !Xor     di, diă    !Mov     es, scrsegă    !Mov     cx, 16000ă    !Xor     ax, axă    !Push    axă    !Db      &h66ă    !Db      &hC1ă    !Db      &hE0ă    !Db      16ă    !Pop     axă    !Db      &hF3ă    !Db      &h66ă    !Db      &hABă    FOR i = 0 to 4ă       out &h3C8, 0ă       out &h3C9, 0ă       out &h3C9, 63ă       out &h3C9, 63ă       !Mov     dx, &h3DAăasmjmp12:ă       !In      al, dxă       !Test    al, 8ă       !Jnz     asmjmp12ăasmjmp13:ă       !In      al, dxă       !Test    al, 8ă       !Jz      asmjmp13ă       out &h3C8, 0ă       out &h3C9, 0ă       out &h3C9, 0ă       out &h3C9, 0ă       !Mov     dx, &h3DAăasmjmp12b:ă       !In      al, dxă       !Test    al, 8ă       !Jnz     asmjmp12băasmjmp13b:ă       !In      al, dxă       !Test    al, 8ă       !Jz      asmjmp13bă    NEXTăăă' GENERATE PARTICLES ********************************>>>>>ă    xsrc% = rnd * 320ă    ysrc% = rnd * 200ă    FOR x% = 1 to num%ă       objs(x%).x = xsrc%ă       objs(x%).y = ysrc%ă       lx! = (rnd * 2) -1ă       ly! = (rnd * 2) -1ă       dist! = rnd * 5ă       ln! = sqr(lx!^2 + ly!^2)ă       IF ln! = 0 THENă          objs(x%).xm = lx!ă          objs(x%).ym = ly!ă       ELSEă          objs(x%).xm = lx! * (ln! * dist!)ă          objs(x%).ym = ly! * (ln! * dist!)ă       END IFă    NEXT x%ăăă    FOR sloop% = 1 to 600:  ' Main smoothing & grav loop *****************>>>>>ăă       FOR x% = 1 to num%ă          incr objs(x%).x, objs(x%).xmă          incr objs(x%).y, objs(x%).ymăă          IF objs(x%).y > 199 THENă             objs(x%).y = 199ă             objs(x%).xm = objs(x%).xm / 4ă             objs(x%).ym = - objs(x%).ym / 2ă          ELSEIF objs(x%).y < 0 THENă             objs(x%).y = 0ă             objs(x%).xm = objs(x%).xm / 4ă             objs(x%).ym = - objs(x%).ym / 2ă          ELSEă             incr objs(x%).ym, GRAV#ă          END IFăă          IF objs(x%).x < 3 THENă             objs(x%).x = 3ă             objs(x%).xm = - objs(x%).xm / 2ă             objs(x%).ym = objs(x%).ym / 4ă          ELSEIF objs(x%).x > 316 THENă             objs(x%).x = 316ă             objs(x%).xm = - objs(x%).xm / 2ă             objs(x%).ym = objs(x%).ym / 4ă          END IFăă' Put pixel into bufferă          x1% = int(objs(x%).x)ă          y1% = int(objs(x%).y)ăă          !Mov     es, scrsegă          !Mov     di, x1%ă          !Mov     ax, y1%ă          !Dw      &hE0C1ă          !Db      6ă          !Add     di, axă          !Dw      &hE0C1ă          !Db      2ă          !Add     di, axă          !Mov     al, maxcol%ă          !Mov     es:[di], ală       NEXT x%ăă' SMOOTH BUFFERăă      '!mov     es,scrsegă       !Mov     di, &hF8c0 ; 64000-320:Don't smooth last lineă       !Xor     bx, bxă'      !Mov     bl, es:[di]ăjmp1:ă       !Mov     bl, es:[di]ă       !Add     ax, bxă       !Mov     bl, es:[di + 320]ă       !Add     ax, bxă       !Mov     bl, es:[di - 1]ă       !Add     ax, bxă       !Dw      &hE8C1ă       !Db      2ă       !Jz      jmp2ă       !Dec     alăjmp2:ă       !Mov     es:[di], ală       !Dec     diă       !Jnz     jmp1ăăă' COPY BUFFER TO SCREENă       !Push    dsă' !Push    siă       !Mov     ds, scrsegă       !Xor     si, siă       !Xor     di, diă       !Mov     ax, &hA000ă       !Mov     es, axă       !Mov     cx, &h3e30ă       !Db      &hF3ă       !Db      &h66ă       !Db      &hA5ă' !Pop     siă       !Pop     dsăă    NEXT sloop%ăă LOOPăăăăăăăăăăăSUB setpal ()ă out &h3C8, 0ă FOR i = 0 to 63ă    out &h3C9, 0ă    out &h3C9, i / 6ă    out &h3C9, i / 8ă NEXTă FOR i = 0 to 63ă    out &h3C9, iă    out &h3C9, 0ă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, iă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, 63ă    out &h3C9, iă NEXTăEND SUBăAngelo Ken Pesce               SMOOTH FADE                    ken@uniserv.uniplan.it         08-20-97 (18:41)       PB                     543  35915    SMFADE.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SMFADE.ZIP",4^6:Z&=26698:?STRING$(50,177);ăU"%up()#9%%OI-%hYI9H_c0<l8).%%=1%%%/%%%%xr%kfij%SgfxN&%:B]Sk9v>+FăU"adNU5)[\*>0M+w[?w8Pi%9.5H0L;8vL6&7f$ji4[%+sF87tg5^/#7r?=1?)$gb?ăU"pgRb(0653hLNALf0B&P<Go4&SjQIa?;hg-<?WF5rM.7u=j=wfQ]0Q/>U+t?*x+RăU"Hsw<2'kXQ<a?;]?0npD1gBYbyZdIr:.U?sJC)R/h05gJ1>Rh9#_)=OiN(7Hta,găU"]yI83UDuh[B/u#86sELS9xIlWAj94]i.,oouP7Hl#8>?avZgL]E,V=(6jRf-qzNăU"?]Xt(WXm973u]ND;G,),X(itLgcAR9=4o\(?c4P[U1L#T$3deNV9gdU58'*xBWsăU"#i1dhu.0Lr]=/>NtVc[,cgTEC1b1.&c;#^y7zoPW9MT.c(UC^P.K/Xr:D8MN<,dăU"H1fIVKS-CY<]7jIatSnApZdVuY8q7GgZVpequQj$V#E)3XQ2th;,ZJdA=)-%PnIăU"y07_R74&E/j4V:3F+oWTGImvy:KLJ\1YG:KH19r)AB^T1hCK0c[EMXO(SE*=cO%ăU"*k5Om=q1&h0]jjIXEoQOoGf;;XI/R?/um+9b78-=S;TC'6UyL&lRShOtc_p.Y0răU"JpdC0FA1bJKI0D\bvCXl0czJlrlRNY\YG7LNrkpk_Vy2Lu5Q>H9N)>\--66)?wfăU"=#H23[vL>;GQ*UO(+S/^h&MuxU1XVFQ&X\oKUnAgb)cvu(/>ZHFJ27lZgJAZ*roăU"g2Twrx^#lf8v^5+E==K1.Q[;K29MY,em&GW7bl[ku[M29:5'5hY0wU=.;qgi*#&ăU"^mdGu3m+t-M(svH\/)ZL*)FZm3o]Z=k,W=v;/Rl?3DP)an^S>B+OOkzAXU[tQ*BăU"qA2pVPWqKo/)uB13JE;LLv:h,Y4+513<xQP95+_DI4JESwID&ziU65m(z(73a\yăU"iswr$:MLM&+QF,4Gg8^=fhN,;%*e#gX^x+*HE$MRCu(Cy,d=;,h*k$tXBdr2%2#ăU"L;E*+pDQ32^eV1^,+&H4G+.4YZ2:up&.YFqX+3_RvIq';\k<PA0XT[fE/AZ7#ehăU"'[\<\ql>,Q.*z*PUW#PA3^Cir'D&e38MDi^a,?56YNnVZw*w&X>,\'$?qWpdx.%ăU"<Qu;cZ9$w7*0$f8yjnU%(N'oxQU?4Ojg49+'A60$7kuAe4Jt[]fqy)qDh_b3=aHăU",wVUHiREU.>AVW<AnbDJsl&,j3JR-Kb1vp/f9X^$l(DQEqcvbK[VZd8.<vgF/.;ăU"(31^K(v]N^d-Ch=^_pn=XP5feg0Q9p*vlb5&N+G+>>v9VIeFCVDkf?^U0eA,2/qăU"bhqS0qnlsseES7OVn^LktuKY'mzixm;<8ASSQMZ'Qgr3%]%V;JhMe;H5i_e]Q;>ăU"S0i67M10$F;t836iw^ek07IL+YF74Mb;^Nj'TndXoK0];O5l-<)NW.1h&?w50/SăU"g;JF]%fXf,t%<up(%)9%%#%-%S\S9He:+>A0&2%%,'s%%/%%%%x%rkfi%jSifOyăU"eLDMK+6e-^uV$9TnHq,BKnLBV&LUg]X2/IBL55)55KnVe;B1M5555&yO:m#JSVrăU")h<LVN>EI5ZHvWJFz(oao\Yege>\.K0&i%yUzvGtkBhFdc(x7r=TxkTuHxn$ullăU"rr3uKMcgdnnHuH$$lulrru5KwN]?x\hcuxsx9rZ.C86Jrn]689H2Z$nP.oxJG8uăU"xt8xr#Nu#tN[uc>&8sZNG>?M,Zl$_?8$GD>Sl?pk]oVq<xWv'9srm#9b\\&Wa#iăU"?JGuI;.a*IKWm[ahW*vqNj*k)=1=-S:.&*g%+6I&QqNG\Fs\xqOrTNsLs$hwrsTăU"h6p'w,D3Qtar^)V^=^GAMLrplNsR26n^>ul>Q*6\?\Dpd0;=&X8LrAiY>61/lx(ăU"=3to90u^M1dda0;uqj\?n\Bt>JgVnNQoRvrClNW9c]A6<Xdware0DMirwJhvu^HăU"h7$lvd6cvODXGKl2o'v$E1P?xb?%Ju.vsCGxVn'/9bJ?(;o-O(.Ye/k_6Qlg.O0ăU"PUoZ/A9_?ul>1j#8Lrhus^m(56EibPFWQTDZfQ*W7ANiH.d[;lU-4dH/f$EZgS6ăU"6uh7vt#4AaGuaIZ<(l]A^mO_qP*<V4Dp_Gi9tPvtoZgR,JcPGBTr/=R5t8<s.V:ăU"%(+r*;b[mj0_HelX:_3P.L^PDCsX6\#LV1+w]?..iV&-H8%r.'8''NC.Rs^)s=#ăU"]xRUcB)H04PcLV]61?_#:c1MLDnMc5QeqXbevqjwunERld;Q)+t;^c.fd\<Rr/BăU"p71(V^CpdD?=NmkTtQ.&RbMZjVv60(.eD/?m7D'Gi31yCCqIQs+++AwdK%K_OO%ăU"WGaQ[Y]MIuXH#DuLVNRuJW?cYQ2R(GrLL^RB^1NZH'f*g\>'0Y5^ktSZ;EjCX:+ăU"Oeka#uKQVnN6sBw6f<>Y=%n(5>g>h#xBLVAc5Fi6AhG[E)]L4cu-a\6H7d&b-N4ăU"x.MpZ2oU1*ZeSk..5v,u&$-Q1\v[rGm,)N+D?#-pk2-L3Z[X[tqnH-EBPQ)eeMyăU"P4cYy3ci)r),LhhLh222IhhLLVlu/uGy+g,;ycDImj*2R:>8B.G#J6pFfwcm9'săU"o[ke_u?&vtAbr-NHG_<j\%k,61bT[*l5QHu)V-ZA6D>NmZ,*):ki.Cg/]m=4xn1ăU"DNM?qGnlYFVWR-r/1n3q\*/hrSJYiN*b6OPl.lrVZV0.D/7iCpAoDCfFTaC)d4:ăU"z(ZD2rCR<BlTVb6LBv<T,o3q$KVtZvLK6b,lZf&F\rnicCBkwjX&sUT$78E?i\UăU"*,qbI3^l#=CdA>?XgB8*\&,C6fQkpd6OP<LvvDeVu;/f(25/U'I<gu<telFT?rgăU"(Y4?tf6:zOY=Q5<W$mvVD]m]<M;5=8t2he_-b\D)Eq18aoLW,:1ah+*$u9^uc33ăU"ji4&9Z<itJJ3X$TT),icZZ09t(Gm*0,KUxb[2+G<h'Zv5V,=Af%TJk$:C?cQZ(hăU"JF<Xr+#Vc+:D=.EB_L_Ud3g?Sg3:P>UuSd3<_.7RT)q';SLxhab0,(p\:GutT]măU"OY<U5\&hS%Y#WV$>M0826?haeossH#H%dUM]%YQGW%_[SF%V^JR%bHXP%$L\\#TăU"TTns37__N_364M5svumIJ?#B>ijU)VT),X+qrIqJH14]3]^QA$TaFuOqEB$\kTUăU"R'+'Q(Pkd<Vm?Sc#n%u?nSD7Hbq,%Y=p[Bdj*6.+mIj)U4\rof$jeXW<Jnb>4TlăU"K#o.V\]X>\,5H$FT'>(TS^m]_21Q32JG>HtqW#9hg(Tae]W)Z^t5PlqGS[6)6=kăU"_I_Y/o%NgNGboBqEA)0u,*/5;/MW1Eil_#Zmi:L)JE'd<kQD;1TkvXcZHklXKu7ăU"WAPa*(h9rnR'uH5A['bbkP#iLoe4D65WL6EiUX>Z1N+-Q>u#g6t#4B^E9[9iXLbăU"6=07n%S$%]_X)%b^-(%'&Gu%1200.44^5+3w^Q%QYY)'A*+7&Ec1aR\5H$Mp648ăU"q0MGer%XJb.xL]Bj^-Nh<glTe%e'5cS_=qt2]PKg3l6#k;rrYdI9f,Y]u0(LQ^AăU"vRrhL&hFh'\PDT,W-nQ4eTr5D#'[bid;uHA]%R>%5/)8<h-(_#-7,SWccsc777hăU"MMMwHww&C('P<BhNNKLfP<Nguff^^rBP$%jjhQ>qHQHqQEbbSNXPLJtEfQ/AHHQăU"gd=]Ng_;<W<VKoOSKnMw>?=8IJEPN4IYU]LR]hrhqtC/tN6ERB&BXWVKYoXjb,văU"H=85M)/U-I?;12CA5-%'g4t-Vj7Dos+wQN<l]jMjjzz10^mRbRHAi)hi=#el^DkăU"Hq*HV#47&$(2A%7:($Bq'$&i=1;QW%#E<kUYuYXS_owcto>%T^B\S4nHOn.H=0^ăU"D'DKWB*l0hSn[Ca1lXbBq6d/47:[&m[em)331)Y^0B9jd4]MZ^bbebHp#9<leXjăU"*v/7uYXJ<8V3a(*1W(u.#jGLAw*u63<I-uOi:n]So&r-NL$>oZd\d\<J)PL\c#aăU"t1=KoD9E<u#.9d6<'V6E?Z]ai2m%/u,+ei5&,G]5=RmKEQ%-/7;aj=[ETPH%y48ăU"#0Bp*.t4.M]S]XE9pJbLq]TBvy9FDXKpfUH#ROM9\[fc*h]#Rccua-d\W=AYA&PăU"%f-B-7C]mZ7]mx)Bds5ZIGQ[GAIu5#c)0jsd';ikISu^QI1fpsB\N]IAc&*HFLqăU"4qKYtQ^cR'Mg^7Kar--iB]:mxDNpFF**MB?ED=l:dD%=7;C%>B8<Mn_gcMkaiiMăU"eemmnmVABiE3.K?LLKw.xwaNL2[\]&[-0.ukpn_NC0*:#p0o1%u5Dd%Oi6uD?l[ăU"[C=If$l)i^-80bTZ2?LR)_-QtHnE*o&t,(ht[s#.2JZ22nU0ntPbNwQO#?5R36)ăU"<Bx[pfIIS=SG]I3U4e3?gmJ%3CdKU+_,01BOk<AsUG3GQ[iUk&2-xU#<Q_VKKSqăU"m<^mY+82cS)>h\=<vghXd[V42/Z5INJ?uk?Yr\'NZU-#l1*6RXRE7lPEQc-Glc=ăU"#+n0C9n,:.%/(s_4HA)%,F2QNZqp]SfksJ#DZ)ju4Dn2DhuA]Cd#j/u22/ZSC]+ăU"]+XE+sI\BZaQ\6IAA(SA#;,4M<+u7krF3q+e;(mF1]W8#V(>OKS];_=.wv%WwWdăU"J1>Kb,\4D06b+i5i,2N,&D76tVd,oCeq_hQSTS-#e]vI(T%E9$>(i10k%e8Hc&YăU"AYU,0*SMI9HIh^EvyxRB%7Qoj3gt5G&>5QqAIXSMgcAe]p,%#>QaSpa7eQkAI(\ăU"h'((JC<QuZDor]$]ZUI'iSZA:$,qU5;^TZrbk)OG>2?vX^%K^t+1Y8j>-7a5&1,ăU"4D$,-k8Yr#AK>xmYx.dW/%M7:vF;;DQ&%_PpAfso/lXI]E(o=hGIDDxY>$96sb6ăU"Z#tVWAsnc6bHCKHu'MW-uf%3-ftibsF9#BVLcp8,d_fhT(Fv[hXM+ci%^n9RcbqăU"S.Hu?UIP;+t4-9B'5O%cHa0_&MmTj=>ek[\rot%ub'i.JTYf2iY[04D%5F$=)s4ăU"GtbZLHCImEAS3)QZA3hk.CI46Ghz_HKi_%GX0H<ESn1-QMi#Fg1o3[eVq.jA(7băU"1&7g,Bw9%.lctCi+.fZBnKg[##NSAKq?M5nk9b6Em.TAwgEmak(li0xT&mrR/3*ăU"xOLwKqS48Fl=Tgi,517Dbm4h^seRc,]Tae73ZciL6I2ocrEZ%&^U\yi1k*9f%]CăU"=KQ<BwtVK)Q%T[iWPH,cOr.O0D<=;l%o?[SY48OLE%L?$+BObfG5m,3,BAEUc:NăU"6?Z]^V#B_\VCxqvTmIJ=#%klv.#7mZWSV#LpJx-0TkkOOpEgu=;G'B.(]EE%wn-ăU"L#a7zGSiAIU%.g+n0_RWMtC<i#*huduqC2R3Jy*6]1a.D+-i.yq+gm79tEr%kU5ăU"WuQ;q)1XiOqbdA^C/Twt:wdkl&twO:X/25s.iKbo)YZ/0ikBB+,o$LLs'<Ai$I/ăU"ea-\>hm#wch_<Dqp8DORV?'Ku19629&*<iv<\tCaYR+liB7RYxM<dqYOY$E8+wjăU"&))IUTY(Mjvwu)3kf2F9i)x/91heHN[464.vB[G#]Zzw)Px<7fCILAF.gaO&+F1ăU"%'2I5VG'#e#(5M*%6xvd%SKZ\t]IVy[l;^Ls2pR$4G8,.zqIx\:InSQ)#D9IW?năU"EnV[t<hVI4Ei_Umg+bMcccgEAiE+#XBC_8+Ere_AQIdRXzXZ9]=_+Ij%akNC+o%ăU"%o5&MpU?]XF.YPU;]pkc66-(mY+olQaXIHL/4vRn.+aK_0Bevu&$eE'_cZFe1P:ăU"Ru:<SsEZ5=>:q+sjttb3(L(7;]N*?SnV1'O*,:&?[d4)9n);n-J[5'NpRhI^YSaăU"jOgIZ^il0n<3gqocBOv$Y)DuTZf[I=FwsLMO>^oIdGCd8C%;.Bk%/(KYdVP/N0KăU"T&6D,Dkvq8Z'\:PtBc9vzWAV.R35(NhuTViI;>RaZ(hS[-TpHqUH0g<#n\J'((iăU"1;J+W$]8S51MB5P5cE1OTh4p9DO>58Y^':]wW\ju%Ntg:[f*8>\PQ7_FQSb:o/eăU"fl5-100<^A)a0S27Cg-\+yg^RVU4KI/,LI0Hq/Axk(AsF1qTeKO-1*^eO+H-[fJăU"LGD1MY^:Cqe5s<635*HoxY+rMO76mK,GrqgWEX#(IwY3MZ-aUN69&]IMK&q-ZUQăU"(6':2^\\m&\6O<$7>GaDV1Z_;X(Sapuz=)RIkXQ_hqTEGEiX)Ch5VRX&qKyCr.XăU"G,HWLwT%i?J2m:d$uiq2dfmtI:3mIl]Tr)^f%Zn+<pS+))K)UvB;-CQ\-EjL<gmăU"L/^1XR$T3fGHub*D>m-M.;q18RQ*$xS=km7%nY:8xn+nh0hu<I8LsR-2--,,(rmăU"Si^.hk:,X4bc;p^J$(?s2loEjrnNo%hXXX*M?[[[WqN;FNHqQUC)PGiL8#CD<-oăU">_3i1oE/4>l6>XJT2g-w6:)QgZy.F\S07A17FC_d(2qVp];QBnVG$shU2GOSBEhăU"Kr+TYo]*2.jdv$'*CSZ0:tnctDcMB\bLta:DK$9.i-w]#KKAYH__'WhI)q1XREiăU"2'V5B&'P.)YQ)Y&D&P+%3oKKxJrQ0Yu$mij3df(u/t+I;#uu77]nx:fqF+q>9BYăU"CdE/[KE4uL='a9IuhvR77JSRLRE'eSG6K/)\8R*u%(Re)TSiR2J&i(_s*0,di5wăU"$;^^8/&QI,r;6;<W#((r:sAP>PhaDAPi$#Cl8RklZwvt?<oYGc%[B2A/^5W1FhcăU",gSi/oKJPx*hqG7B81P6HJod=(=p-D)7m*#Era'9f=N9p+oEQG2zKWfln$7+TY^ăU"L]B%V72:Rp#BZu<5rAf[&abcsV_jYX&26JtEhW.G:PsE>EeQfV.EJSR^kEP\p-găU"G5gHl8=5-]j_&L%r'*=bN:pW:+1n[m0_KdQi6X-F[/-VD6gp%qYLFEMkq-t>HteăU"pi%%riN/L,mOmo*6(OsVio+ubsfTr0<T3bDd;ZY;V3\>umrV&L(1*7xcH,n7;;FăU"O*(?UgHo/:/q_GUC05S?DoeZC[;]57XD,Wphj<)q+=vixgSEq?GiOdXW?u1xAd(ăU"AG$TPAgpK;S1V#Ro;lU18l,5jr,#KQ3PDoTcOW3=AM\LRua5xdfF]509sIFduusăU"/q6o6kQ:5ma16XUKu27.L2SNgZl%(M<>'*_:\ph9>Vc6'l-$er0MV3K.]:?ri4VăU"3Kn%#b%3gh)2(9Bs'=foGVD#bs=mFXKocLbnFhm_Ao3_g^tTiD&8F-s2UV8)&7\ăU"L=kC2G%(G/]#a<E;2<2uBJiO2KXX_ISC9L(?z&W().9o^ouX5yNz&7GEMFlA-<'ăU"],L%AeV7BW)SD4INkPqM5aI_#Fu#2)#-4.oGMe=)+[I#34\A,[4-mrN:Z,(m$T:ăU"8)OH[#80+S,601LoLSO,]%r%'GGeY:S[&95v):Fh*F%,^Pc#LyPI)^CgPH$h9^#ăU":2F4+2f'2pR'1g-pspkL2-lM^'Mg(8apGQPT3[NUn1m]4-a#\B+[7Ie/CP0Y;R+ăU"t+]q'1(&p3f-?:f%n3A]i$\Ye'eqVg&6MG4>639P;gaScnbig_[jPK^p;MqYP<YăU"v&aYEl6ANo1[TE5Q^C6w>kd/v(^V'[Ml.-=>BE;n/2'JIpf?/VU3Q()Q_/:39=+ăU"m1a(>BHE/>rN&lr?bM:_bi[I?')1F%U,vXolWHoiF:H?;W\A$RXg(PW(\/B84iaăU"80R2Fa9$<U;7c^Df6:JZ2h(5AA9j(1lh%T41H=19l_+0O7u%9h1,4(x5'97OvirăU"W>IKhRXuE,KrnFH73'M<5ekw9q+)4Ki6MZ[;V%BbYn>AKre]O+lm7>dx6M5=0]KăU"eiJ7y:XyJEf45i4Fm)%73Bp#oF\02HfVsZGIZF-Oz%tdH&]8HQgZgJ>,Z&h\[PfăU"I*s((_HEX(IIQ.*%H+U7Q$GfZp39tI<J)WYD[$%)h'3Se)cft#8Yju\R#<Zp\:&ăU"hnMQnog6%pksOIH^.#u=[c86t<Y[o0i7^VH$9I<j#%/)+j^IQp[?yHEI.7SS'Z^ăU"gtYGHQROWw8b<9p3nm+zADFaYT-ZL*h>hqn_5/7LTs8X%]^+E53CObwdWq[&]ucăU"-qVpl#av\'XuFieZD6<[1dgIOqh#^ID8^C=-Lr(Yc9:AK9Fa7ahu+Gc3aOX\fITăU"T*2MTDg/D]AD[r%-F(lf+?UNCQ0t,Ptg#JHum;TOr4d+.huui7f-PZLKdEh_#iHăU"';8<sD)[AT>qVj>-YLs\YPmWFFYoknqM#5OU(uVlHpF#id:2Zqj(04uqE#l9#tFăU"rDHu=*j&#dl=q<P>z]Qh\Z&YN)N7S%/:l1+7s*cP\xTLYHd;wYGpbLmm:7^GK[NăU"60]Ue$al#_C.3Cke&1TR^h+tDcB*veU)Kr1?/R3R;>juwhb=Cw%s\k:&1>4LI6,ăU"3q56Fie&.6LZ6=+bwUea^I<'+-8f,FJnW(6Z)]+^<E,9(L_t1An-d<=+&>t2^NUăU"jeWFM$o-CIQ09(9R&'YwY#rleRFAs4R&tUA&eNIIaGhh]#$P25h,F=U--kiv$'AăU"%ccPCa;fd0BQj+?;\I,M[?i7<emA;o-Ud\ulevUAipO][-W1[7RKY<d1q+FXX4UăU"CQL2u&T1Yr05+EqtGmQL[\-Bs$'>:(R=QLdt=suL0?4,'.Hopjg&G7uP]l8b0G(ăU"ANQE9#S*:V',X=idQinYr#>OKPueFC;Gh(*Wc0ZLUt]#cch(X3D%k+*+IF2-Q+>ăU"9A8D)BO+&kSlN3FC:fRPh9ne%'?=U#tdcIsUlN+HhVfq<hfL2iE&W7^'ML.$(P$ăU"%GTDGV.-cy_p5Hnk:;$l8=B&vS*\CQ(%%*BpUe_6L?ej.t/ObTX3[i$W>7Wx.'uăU"#Ut%Yui=%a'4UM.mLQHpLpml2/$:X2:fRb4*k[++q>6SKl=15xQG*9dJsR*\_85ăU"I98?dqpcC\,V#;=qwLt-1CSZCu5t\\eV[RZd'->9SINm_'&]6&u>_D&+IZxdH'măU"%KH5t#y-qQ_%+dgJ=ljY#aHj7t;r61$0Ae'UFTOUJMWn9O3']6AeE9fj/-&p5J1ăU"%Iy*2&E:$XF-wX>%>ay*%f$eq]O8]p\bb2Ude4?c?tS49T0dBRk$8C),.&d]Vb*ăU"Y>FYAV&l%GM=m$GW3iOmFnK+O4Y0tw2Xk$m^qhhJJW6*OW(1(9fm1w96XgiP$]XăU"i49?,SB+P$er<CJ8TUTiNE'-jnqhO:IOOpAM5tbRn7t&7H.q,fTn''q5b+E4sJYăU"B7,sikilFSeSpPa5bT,UIZY.#$cvZXn\$Jf$VB976d%T^Id_3=)=I7HX-t0>lS-ăU"8.I;ePP81%.N>[Ox2[IED?8C6q59h'.jKi7MkbR4EuR*w9&1mph*cle(vs-7XvZăU"ZF0SSTShNa%kVoG\si[TXq:KTP/_JHiM^01oR\._#&JfXRFGkNZ\&nYMsW>s0.AăU"pdA&JGtqn<DoN;?#X&p:lq74'Z;4K6AAU(uW:EIR8t.xaE;&6:(%w=;gG%&%Ob/ăU"YA/1VZT5gop.FtO>qvZop8NE\^=E&0PFe$6^cwuq\Z<:l]u)ERZ]JoOD2;e:dLGăU"2i<B6cH\^Tq(hj/apU8<jLC,OW&,8\ZiT.J<pmVl&h,U[++cL4oI5;gOBia:E2găU"q0]>E.Me)Uf;S?;%f%'w3HP')XMa9WTgdI6OuF*ZNb(L[j-RC^;oh^3g:ca\,qkăU"Mv*)O4?ZkKhh)Cp]1]A8$Hi<o:,bHUUKa=GIe$#Hs%J*mL)i17>ZEWa_[kq.^82ăU"c-r\1=lHu_'V?2m**0M#kaXi\UBQV;DRqMak4c5fZrLPfS+:D*),fd%I*w#)ITuăU"3iLL(PIkm,[LK'HymiNHW)u.gH3BC#W&Q^0w1rkACsjAk&4,E;XAouAt:rU6KhNăU"Re.lwCtSXY<Y2RD$Dm^q?=J\-,5&QBQqr+FkFXoANqsc[P[EK8^6,=;<>\UG2+MăU"$94<_6KUjTqG$rUi>^LvI>dl)ItlstV?,s_9;%:::<Lp4YYu3___)U)_ZLZiuuZăU"?ssi3Kaa7Lj4LJAFlhd'+MLX(lqy9R<9_tOLILVQ1qs[g'xy%1q-ktEPe/4N1FrăU"cO9_4tf=lVs9lXcc$g][$o2_qm,8Jm#T$jO#/:=(F8Q$w%-iltlO3PjT3J-=:?ZăU"p3==d=W\WWKdlc85de)2y[cdDXUTY\rbvtrbXq8hPItgL,#>-#w8=PE*CAo^k<6ăU":Umd#.76n9%B66rLPz?1m7xKKsW+,L3[r?4%FGaI%IMIWmc_APuD<NW?C:FBXHJăU"g]8]S7f4&W;/sD8>>ST2qITs+sJ5OIm&9Z61Os8]^_##=AUmP31bm5A]d?Zcg#LăU"7bcc#5:6b%9D:7#9A;jtS#CBIntYZ3#d$mEgAiON0zZrH6N^%)\_j%4fgIP'$m[ăU"vC;T1C'bGIW/.rl]%C^1%K]o/<./MGeshuYwbMnPIchFdw-bHD1I#cY<*UsX;H*ăU"uXOsmmL4#KMsmp4l=)B:*lFst3O:9&:j0SX-o4,BjYJKgBWz,M:fFgFMgibEl/iăU"MDr86%L,[$>HWQA%xx[;;uu$RZeVVlt7Q<OuGOKm*UT0UZ9lOEc/M$*E)v68C,VăU"0egYW8HqU)feP;GjlW,E;T(K&llm\uRD->F\]5cg^i=k+DG8pfe>nG]T*[>7P'năU"^e'iTMnqaARm(xk_TYZU?qZiazD;HenXBs;cX\c*xC9aVoE:S'1-&(\D3u9-hPMăU"auwqo4$hNYu>bH#'XO/'dg9<)JL_5[wfqU_''oAbhk*vk59v'bw+0TO<m5?c#4kăU"=8eZU><f-g0%t;&[x^kJrG4QKenTor*OY.[c^.p*zl-HBL*NZ__;UGqfT'<Q)ZKăU"Jj:0X&(wp,L?LBC6-.D*rD,eR1epZ(VoF9DIUD&J)J&Dd/NDFD05rSDePmZ#C'LăU"e2#t<$=Y'S:YtDjRU.7R:$I'#u7u?_]1G*'Pe(Qk,%r#^tu2b$wf-Wt0&(M-jphăU"jM0:QsqPM?8v<#l)W0<(l^>\e8O=l<Gg:4WO[t10e<.-HBlq=%BL,DFp73l%cppăU"6b,vh;*buu=HV^0Ys-j\$]e6nU,L20ge-Y7htYh3KW+$l5n+tBQ#AHke:)n6,pSăU"DrJtN]^bq96$]3e76h$\e[qD8J[tQhe36)<V^].p0*$X?d3OCCn2qMejZRN4N7GăU"5G).U9'QZ3)'+yY2h>KIIX(>&hiNt5i9Png-.)UXdZcBk1IIOQsL9R#0Soj\W%(ăU"*G%c&]+[nYkkj.9FX\pBB3VdZ8P#.0&S2BNoDZ5XTN?wY\ti?[nkXJ>QHYB$Ek:ăU"VLc9Im728oFUi\>Qh;JVI,Xrak$TQ=]3tl9=L\'M/91;Lq3GC\K96J<#VZ,#'7ZăU"Ri57?Ud0uI)hf0HZ7Agf>A20#*_Jz0O]/sS7&osMSH,Zk$2^zr#Tgx3G61LQFC#ăU"*LE.$&FBk;ib/fOsmW2odVHam^kd2ZQQeO]56=]Wf6*Rn>2W^kA_KaGUcECL6=\ăU"uXe$fK_I+?H)-]6-?'\EJl^Mk#22Du<vxT\f(*O,/utmUc_Lv<Nr<P;X#+oY3x>ăU"N0#+/3_QZpn3r7>wj,lpd?urrqBNL6P2)7LFF5iBe\A]D\Ms'TAB3(c+F>QhINdăU"X#&8PW=;X(o,vvLv-y_CnZpcPa5[s,g)EdA.ttF2F&FTlxIwqOmkQ$'1*=>jiPmăU"vtQuUf[Rqq&leeleJ;Bk,B6'H#IZU[=$9T+tl;cL6eL'K6L&krZ[,j83&r)4<%?ăU">C:VfW4S+v11<C?\PU_xXVZePcCv-KFLU%IG[6$PRxQ5pDV.?*1Z?=5Ydl4\]glăU"h#Asp.4-iw:oR8]&H0\Bs3gV*>4vCJ3l6M^YHU$r[lv6pmcviH]hW1X%KPK/'woăU"Dd.ITN%TvcuG<m'9\FDj&1p7SR24X8m[\4GB/:8$T,YZIDERGw[N<iwj^[]NahfăU"ii+]BFmpY/T.Vl+)Iz[NxO__.%dS:2.>>tdTd>3+H]<7a9]lpUI<fWps]O_rOOGăU"R?:>L,j9?tD:]Ef78Oi>j=l?=k%j)**fq*Tre?\euF(:[>1\FneCD>DFLLsk-&PăU"fFf^c?;quTVNT2^,[2X0op6up[Q.(]gRpl(AtI%R^\\L<__,195\zH'Lnz&ZsB$ăU"W->P%m%]hdSx8#Lg[iy1m4dqY;LOA[Z>5tv-0W'*YNpT.j#[Va6jGJD\\?XZWD(ăU"le*%OEg,Bwp<#W+smk[QPY.Vp'j?EfmHZV\AhQl_%E)]=cfjvB(1L^mde[-%H<OăU"(b)MD77y;&Guum^)-40>ELP\[5sbAU#p>Pf2YcBnESg1Hse*[9[wKW^wbW,&?WxăU"7.7wa8$jFAf2m[W)8LM,.M\OLJqHGsZS\.krqjk:1mgAGX9W1m0,u=KQdG7F,;2ăU"(s9[CCoi'[L('ARh(_=1s)*fKU2/W,W4a<<UdQHEFq[msBR8>Bd3:C06tnUWPf9ăU"Qtqr^[cgBt]ZU%raCNHYLE;'[CDY4gih*NwP/qv2DvKb><jY.#p[>W5Y8vSd7p;ăU"GJ;(;S9W=](6WGl87WbYNC(fiD<p_Cmq&(0P#R,<hO?)Q-ArUHGFLq]^]2[YS63ăU"[ACq1GtKv(VGBUfBeIoiw0$]uM65UM+8JiMZZbbPV0>O2nN?i/Co5s(s5kSrVjGăU"H#ot(YN14mQ&.<:<j#C,;)[[04s3kjjL0XXSI>xc\%nnnpP/pU2e2GQ;J2%,C2;ăU"+;AiTjYd3;cA+EZ#6g16/_1O+I,DAFkfit20^#l,b.%+QEqsRBb1J?DS^026NT=ăEND SUBăSUB V2ăU"RgwcW46<#cLC]1EF=>8?#5[Q3AO1dYr7>wbFT<kMpc0seRjPO=Ui1+2Ete2:/&QăU"hdtJ_mb*L_](%cISP<P;Q1rmEf^H3^L[sSQS4T1&7g*=[ay#6*^8ciNV-%faSF%ăU"VR\d%PRN>O\?#..a&]41<J28E\$-V/RyGB')o\4-x9uI9Rvjn&h*j*5Hra7)4xgăU"vMcfj^O0vTHoRn*jO.B#CKt<HB#qogCmiU+hN-cS3,++sq4oDt,Unp.;/XV06$jăU"#VjR.nBxjNuy/X)qTgnw5UMF+'vpHUS.Nb3gCeE'pHFLTY,nJrJ=eN_uv^XBQ.8ăU"pZ+Y-]B8mC:7y)tjkJUve0m8WPHd^>kWir[i\F>9YKBtLpbNbc2\*po-gW*%/&TăU".qUPc8qW5HWQ>tDRSS1[a[,q<)hMa%]=HWwF$Q*B(w,pCPO,zCzJtGbR9#www%CăU"z*xptaB]CHK+wD1z4x1*Z_;f#99;dBA0Xb48\2Gb/.>2X*>>TGT>WdIov)zlb5CăU"vLo>2hFg'ydjO^au>C=n]cS1&mDrbw#&>dJPD.%G$(osJJZk+ciMiiAdJqi%gMbăU"$kgMkimd/bT$;O<JiSrukeE.qEhA/^g^[9WjK3cXYew0/d]#0T'V9=7:>2p>b.răU"uRL#oY=X)AcjU>LgKrQqAkdy\$jj(X>J$f\?>qvosUXH?Utj.?->3R$/o-p_lU7ăU"HV_y40$EGi^Bu?%Rld<R**eU[0LsGj<#:sg\W)o.ui#qgo-&$yvvlXOLj-cF$4ZăU"gX4#r2v4,tt2.&0$wNtIlpLD2T)pOYz%&z.Qzd9N$4tu\4<m]Co(f=MI1CCe;wEăU"*o+oLIQQU'&q**PMtBnw\/vtmc5NS.xM)%(,CKf;5nvL#IE;6oQf;G_ULJt64K$ăU"p4aD1xg,uLISNPNnA.)&:(OK_oo-&%zxx2,-)Gi:Jd<'OquA&]LL'0,E&7=79/+ăU"-Kw=\_=j*V?;olfO^b3>tLW]]fZb*O^R.YpKdTxpPSU\l?j\?Wq8D=#sD7pgWT)ăU"uMuB\poh.U\sP1[&Bs<(S1&L\G(Owl,*+\'kWg)0;G=A17zfd[=V&Pd_1Z&g-2)ăU"K;ks)9=soIiysfM.7C1=O0qU%JcW9%6UIQ%W_FN%RP$$+0HDN+)uu%n1I8hb^/:ăU"1gGXoB&7iDT19K#.EB8>h&TZ<DG+gyx#$Dby\d9NtG*L7rFgvbkufZeR#zA):HMăU"Dc;0TV1+A<u-4X<tRE/2;KHqq1\[%887eiMg7/WYSo*O+L]=PGBgw5?Sjtp+[MWăU"<VZO]H+f&?BHcC=gsEe$_[]DQr28FK-r,F,&q-8cUz2ksGXMCPo+Uev;FDqv-ouăU"$i-XpdCUb=C[X*DO=HW2<AgS4bTj\(..m9XOm&$8-Atj0hSVF_fSsU/no'DMOMeăU"$N3B[6.fZ0J.x>--5JP[$H*j%\a/zs%kbE4A/7I+2GTF[FS1(%UMIQ&c[_HjMsHăU"2Ix)E#-lm.1D\Y(IG(R^dZ&pgd$C4wF66#<o=nF0tU/p+oM?EUJqv*='3gm--ntăU"fU'_<)^:Q&PXYCg_4t.ba$e7T&RD82Bf\kpIT8G/tVs4M9Yfje]Qgk33mWBUC?kăU"p5suW[CS3/4<GmaW5FdUYd]t#06+6_p3kQmt8MZu-[,tkC1JtSCD4TcTu2x;<;făU",<W&+8DipMwZCl_pQ2O:%Gg2+S9r*E\/,lt3BL^#ausHH34_Q,w.'3gR,$jq8LjăU"W,BRTS#qo<q7/g%H^b$?0)1M#dT#8%FsoQWKYagQ11SG;SaQMW]77C/RDp<I*0LăU"]Le-MMr<RtVUOx-sHog\letJ\H;nx+xgFqG<FZJ2EhS9cRbG6vq+bj9cj7R01=iăU"<2jFk#GX%qspp)6ZsMqMOr-;_QwILF$q'gY*hh^nxYi9l4]/KHmqti(fj,?6^2XăU"o#3eUW+=>1U-Q,5EEg^:uOeR,6$EmZqbd-I.;k^=kulN9S^jX^^kLVbGz2p&t>SăU"7$CED(^XCW8JZ$_n:jm4+7JABLjs;QL6?%l_&EJPwHDDDh,an'Q.[M8T7Moo_l)ăU"+_UL*8_cvPp5yur/u3+M+,%yOwAYA[5X8q/tIXQ)C?+=1CXQFLXVqYZ-wJrXsI(ăU"'QJIy_9CZHD5f]tLUjVqJc32]4T+45Ot6YogVsuZlMrTx8Vx8qTrmm=IN4bg[%iăU"cX80?epHp*WJcPF]R;0H1MS++qF%kbtBp0ik1hM:77dmvU7fQge/4q=KkI,mf#năU"^pg4\ej\nGtQrl$<*<ix.Lf*=c'>4SRDjXFiBKvGk')KVF;I1h[.:XAf>\0=J5*ăU";FEL]bV)]lW[1$>P#W6]w/geCx5*5usx%yuywn+y9&13adE3sQ>>)8()mn#.t9;ăU"]Ks)qO+]Oqxxbbeo*JF^NGFeAbv-\r][euCGXiqh;IK((f(GR&uHzYCdJw).-'UăU"*uIDnkKj4utXjje24++Amnk*^j>z,RWDqs)eBI%z5X02-#%LHR:L%ac_1-/xgA6ăU".c3:/y'f87TsAC2opjqGQbTmS3O_gKv]elT.H<_9uoL7)Bnu28mg?Ef.rj=YwlvăU"F_uMJXfmv?$=6mw=;(U%BlbqlYg\mHRI$/;qsEes9F$oAgc=CoBu*pe\#+l?^LsăU":AJ:#z/09w4[*Ybo67TZ.-GPk7H^n$A>sU[&-'1ETLmP8j+\'wg115iwTUW/LxbăU"xRmiN+Xc8&h^*Wqdu'^3Krv\J)?zsG/,i,tJ^t$UBD^9.j73M?p9mqo]^-WmnJBăU"DEGdywdJjT>n4Z.N#z:zdK^/(MeIWAb,[EG^LC'-'\Wy.j#\PT^ucjU;/k'x?HhăU"0oa&d?D'st$ce<e]9*%Nab3Dx2YCKVeN>MF6J:*]Ol4?gR/>'6r[w*+a$Pq/WIqăU"D6LbDZKQHG$u-Lup5LxmKWlnKsVbd2jpO;S?/$96oc)KWqTL4aAr1[;dikBi*1$ăU">O),J7WXHU<b[HwJCZK?c9M8X)(e(QdC-MNrbX\hXNt?h_n$DfTXtLmeJNn:,DDăU"Ya'7fcj4.Rb4gLZxqT>Kt_jcp*sb$K^nI=LbHUn,yDrnBD'C&enaJju[(xnuP$HăU"7n:TGGu&v_rs4xnXsd5qZQ>,z0DMmCyaLXdv?wr,<$HmbtM%%'E4BxtorNEhrGZăU"$TMcqd4XDNNpdF2<Rcl0XHk?eB6p.?z8Fu+j;K;yz0CtLxYGb\d\8tLuerr0FsTăU">y+;vjg3I#Z=OM,r2D02Ok&e5#kje3-ilg%*/q95Xg;O\X#I$*uDgXJfPZzQu-YăU"5R/.rlUjk9^UdDj.Mk=\uGk+)Kf/eBJ4jWu7h^'LEGbeF5sBoAaEQ?eQ\*6bX_4ăU"iWPc)w\770DO_7Xp]cY*+Ausepi]UlNNF\Qwv>=M+99;ucagb3dzzQISQ$w:#IsăU"ShEF,2Qvi-NCh<F;RpwUIZr_f]u3sD01DDz0E+B03etzi/c4Xd2R'/$v_vt<ot+ăU"6keqV>gX<2D6N?Q#<HN5),'Zo]8mIYz%zXJ+SvQxv.FAiyZ<66V&Duwi)(Gx*qiăU"hbdvaZ5viEqF*XnWTFt:*DZ00JYIA(djzNxBf,t=V,;%zhy:9'f(Od=lqtT>QA]ăU"yyN']Uu0kodWddF[a>V%C;Q3SxrtVofU=s0B[(wj/<L?#t##Bn'kK7_HkI;d7&$ăU"8J(J>F=$85vH(q9J<g4eLyE<VO*4OQoePrAvqR;,7hZR-Hitn2WX^r[ny\]dozYăU"k9cO2oB:RrzS>kn?l&8z*l51s3u'6,4/rsru%\Y\[0.Zc<tfN/nQpmcqJ$Ix:<6ăU"G*r2$fbNY81oo1tmbx.uQd9uD3hXfM9q_CpqEiY*n[X%GTXJj[Un+g2Gy10'<F-ăU"&b7z<kAeV&bd^:^-cG#t33X:]pj<Ph2,8c:C:&Y,<2A*3%N[ak_0-j\_tz\(cpMăU"9_1;edG/sNB7[(HwiAZW0AG2LXwnJJBC(oqtxAAk*1_9C7BN#=i_QR+d,^cu#.răU"e9Wc+zD<Ttgln-R.GuM-lt\MNsqEj$0C2;^QLuEs./:ZjMT**S:<7DcKqaYVB6TăU"RZ5[\_.6HcOGdNWHMHdux))pwOK]/44MLBNNJ.tFFLR1Xqi/tz4kr&x7r/t&2Q.ăU".))pQxO-/FY89[*jWFu>wwsh13Vbl>C*pEstjH1j?6jR:\h8KkmS\AXfb+lomJkăU"S%v:M;w%VaKJOyMKobkmgq(HfHbV,^4T:Nypz.sg,j_W.Z>w[ycDpD-^\wJ>LJiăU"mZ-6&5H84-_wCn4dmM%zceN]dd&V%yMw:>Z+Wokx<VPpa55N,'SM8e#c4.0xrx]ăU"#noV$*\3Q^h6$PV?,45c^Kjl)5M^n39^Y4>Y7<dr^90F:U.3(fF;/9kQJwXu4hYăU"ZI8k5ekEGc&#hh/\.oJ0WJ(w)-1Mffz5oi10's9or.hhFtCt&l*Gl+i(uOQOLuVăU"JVMuKMWSQRR'Y;fq''g::Zl:0*sT;E7]^5H2WIrR<0g9-pl0sfD;G1#^duJ-N4ZăU"SYp&I-s)-:7ri)4BK<Mvpf$rXBxuR$fCpz7kHSNt-jvkIIm2&nCcwP$CGIpd>D6ăU"Xa-4VzPedo9cNtJjy[z/a&p7d3+qrz,6)%(yuJ'w&*e,xuCCP_94Mv53G9R$1iVăU"tt,3aLSDB+DYXc>LuifZO\#p76r/rPOd'2rW7r[or50q737i(0v5Llq]hqNkk>zăU"Ot>V>i:(OYE):bC]tCaAjoLK$&UB+J1ARM>g2__Te(<V1ZN8'p%Vp6To[I%:CPiăU"3UmuoWGg6??9:E50lJ2.FFlnJ,wP3V-&wJqO<=)=8SRgNwy2,C*>>20--[rkhC7ăU"1$&d*fr-grA\\Dd5v#pg#-3.^doSJsJl9Y;8G5ih+(<PU=an4<3fAhwZVqu0k&hăU"bhGiIK=Z1oq)qdQ[+ggp=8Zrf>]S9^wtut[^g#K:R.gyc8StIS4SXYN>dcN&bP3ăU"sIz:gJaq5W%k-/%Dl$LqncE-uEME]gI1n2Pxjx2GVpx25BTEYhGoseSpCL=,=[)ăU";W51BQg^.8j3\a6iQX*b6E9K\;jHu]I.QBtUKUS$2B#t>h5,)Dg-wc42%SFJ*LgăU"8KELkA5It=*5--5/sxA*vGvm5wOIuNRSONK+,%_%-vPuIPPPuTLWOuTLPX0Ry*'ăU"J2TRpu$Dcs1SEe<Pq*mjk\U*OYD$+)Me._fpPx4r'&KRK^1A$CqQG>LqvTAPi;RăU"KVtxn]Zp<iMlH[3oukyeIuq<J$LVV,ni>iWTt:_z^JC)nwxdOxzNgoHX3Yph_\iăU"oeAud#bbOrg]GOK+o((t:dNw)z,:zdO>IiFj26MBal*TtuK[?,c=]\Pzl6\7suZăU"j.rrGcq9_JSPY6;1e;0VXiKTB78iOYlumt\4GW78/Z7DP<6W7JTa6gM4%u&0+&SăU"-KmG,%B+5_%re8^0Dr.Pk]zt(OMKuORLMP)Po8'&zX(Mywz:V9R,zDxxu&syO.oăU"t.ehdNd7<9r2Kdw?6'G/'./x-&H*wr)>>tZShSmte[qH#\\P2kuuuU%kqsV0)cgăU"v-,SK?9p?&jqJ0C-%FIuDIX;GgMgF#i$dto4C&Y$tTR[\WIMKxx%?LxV\B6OU]]ăU"IPJ)*M4:Z6v0mcQ5Rux^vf(;]+_][-GSo]%hMb2Mi9t+pKzf1rQBtsYtwgmIP\>ăU"+h>efA/aB;R+qHAl$RTcUn5/4Ul>7Lt*1X$[cg/+ua8iHxalmHbk4EsbVBe%+$8ăU"4,4T?pd9'Qm$*:7+#\&2b3T6K9RhAqw04C2DB&>.5q&>XPF#]&\_T_995$L/ZZ4ăU"[222FIrRDi1WD4z2<J&Tii:=Ii-F,6YBxrZ-#0SZ/8U5FLTT2c4mKphoJ[Q[Wo:ăU"0j\4yk]J8C-&#Jjv4'e<57pLLu5RE:nC2'ovP-Z$:9Y,qe(^Hu^gObfz:?5u]ksăU"p.__r<z.+s7;(-gy,xbr5KtW\rl4glW8L&623q1evy,P5]#:RdTH];XDCYOq4isăU"gldHnvciu*^P^vfzIx8rqmANj\)A-IPOI->r9rq/va*opDJF5OfpQgFRaTND8XfăU"mYt.<Mv#ZIP9^XDY?hD^A8XdkKu$mRFK4\rjsf-b1Q%oIuPNTWu&8M=>>;h<zP1ăU"CLvspW%y7pl'*p2Jpy,-RvzXSsuULTJ)z-%h%(.PYFt:rq>=mPY&_]yTS_4:%/wăU"wv>w;x:pY,6VRIf6dVdv3#',^bWKQDYueNm[kEbF*8pNX*J,4*CS:5.5(7GxhdTăU"hyA:l7xu.u3o[<[lRz.X474-%4NzK_&o(Q>Jv4LuXW8NmwxROQLT,P*;**6Z/3/ăU"zYv6.uCopu$CdSY'Jyf,-1zx[paht)keNe?)l46hBlb\VI>OT)C',APV]]*%R\OăU"PXXh<*(qjeutoquOX(5NHad[mTUX#ZMYEt$<U#S^I+,a?MD0$/Fkw)O)$Y%cKPTăU"_vw56Z/]]?<XOEgXqvMe2fy(Zhi&y'Q&(>wG>'PTHvO[CK<aI)=#Mio0C7cvl.6ăU"f'mYz^^pN*TcDYb8aQAjs4u^.W39SIBkUzfXENlIL9.iE5=N5LRqZNX8_)uvJLfăU"]b8paKuavT;74.EU_N)LC,xzqw7sg^nBzDqFFtD,_$nfr9yGTQphC:9MO2iuSMRăU"LrJ'?KI'jH,A64''&T7g]IAUk4_,8r2]5]JBZ<>?Ug;7(T0SE<c5X+<,^IbzDk8ăU"S_Si-;zKnmb;1Cc,>uDm_[N,Hf\Q8IUlj<X7\;8ilUj3\3JE/cG^^_<;g\a*ouWăU"35LhyAeNj<+NBk/m86[\AhyyomMv;HSwvN5>6DDYgZiUsXkkSdqiu7WugG'/h]eăU"e?C+d),1F(Dl+l,_dshKUU%ItKZSUOOa$W*\DWl8.=t$kS<N3c?i=Qkm.DWcaHRăU"KJj,Qs[Y^C#sgFuXYqSW$^My_Z^TZgRxMqiq1<#9<$nIBw(dD5DXl##Rz:yg7XsăU"5Z340rX?.*)1N$cZLHt9:gke)?J8fay/)rTon)5^fq34$[LrRZg]fUkNE/L8im;ăU"pIu_-WF,7z5UN2U/]3/2kO4G)CW[s=bk$QPAKxhEjQa*4Ab_G:M^1kHH=KRot:GăU"YHqIo#21/\5[BUu)Tkc\sJ9XV]V$H8LmYwv%w:fX#gMuogi97%K&xeqXQbgU$vEăU"[0--M\Z/eP_Q(<fYZWN&^5/sN9#TCW[o]5eLGSe\X=/&ufHr.onsqFy=iL%.wBqăU"-MZcYvX$u.ge$c68e\%PQZ^OcAULXrPeVv9/v'yb%mdbP=eP/#mJ[i1FYePu0(.ăU"P;wdKGPX-pvO<'tt/(x-ugE8;d2;<xL=0$iP*'yf$gk(ga5SR_UT8mms:'KUAssăU"eT*t4Vc^YZ_Hnp$Fg5tTMcWB).HU0TNEEZo+dAs0_F;2GVODS9\OFej[J:9+z-,ăU":,V&q['6vA\lYGXY6hA%,Ut,)VVu=td:n39](UPScX<#2+8SD:FzCW4g.sx;J1jăU"LB/<h2p)8TwzcLU/q*3j#?5jc9?CpAm4%wPZR12(#ns*c3SUGiXRDoivM*vY?*JăU"*oAAt5nfd3^Xp&9WMPaVLQln_NfhKGmcjr4<]M,RL\X_W1*HJTMt7b^;qtPlkm-ăU"d<>JV/pM]M)dwZ,2*TRUF/f9zOd$S,Oq7)cdV9Z,BMY:*)_)jyK.7:T8'YLPyKMăU"yztW>TJE/%c-&cIxFk]tAb)5:TUZ0Dm2fTH,0+d;R2F]gRy7-J_e[dxUNoA[TL^ăU"l^LfPbgm'^PCskTUP%,X8'Om[WI;X]K6,]m[Y[Z0r/RAg7fp((\RGW+'lE3NPcrăU"ac8C?o0BATycDwc:ds:k%MfMGT+l3*x.?.25yVuwOo5Kd8PdTR>%u(LMBulKK+4ăU"PN\2_dhVJTr^aiMxar7^v#slM\]Q'YwgjXh(4F([zjeRT#E.ZRleORT#waSBj2TăU"39gso[=[oGC]w6RHch/d5aQFk:=wlivixl*cDKiSsVE6^tWtF3y\celOPJdEFA\ăU"kx*q,pE><L9KY>9M>W%jNj9MWaT4.U9dYmLaAB[bM/c^bUAE?G;rvEDE33ut(7?ăU"PopK1*YIIW*U[J\e7cF_$mx8#a-qVbs*JpdN2Zoa)1uBdjppxO,=Qm_Bw.ok#B6ăU"$w8Aho<17lvwnyyY7'5U\90<c#NDhAztIkx%z+el\pq-%RWs2(PK_',vTuVTLNSăU"'H&yqy:hgN&x%43_c7_33jBVJ^7ls3'>wN1n]ZotcmW45g#i$&#n>z5F(eIrtJ4ăU"IJix6^k_4^4(8b8W$hL#c3eOPHdiV^9cu$dU-x'[(rfP%+a#HCUBdQsqORi(oq/ăU"#f&kV0)MD7Q[FLbGCr<.p7?ntJc-s7E*O8%gHz?ZRD.o8gA\KN=6\^.Z1:3-%CiăU"to>b\Q40='[jX<1-EsJ25jF0(U(CXXM5K&AG2_Iob]tq9rh\0WWv?=vZ\ZwwOh-ăU"P=6[K^GMI>OakDqSj%^p$L.\4QT%E]Q_InK:;Zdc8Cu28/6K5qhjn,uJStD$SVYăU"*0T)qzd>>)At?:-i.Pbiv&>XW8N^)2*tsmlOMDnc?Fpat9oX33L*&97lp)HtbkcăU"TR$#djgTMB01JbUb4GK32PlpNG5C\)zM8cldMtdlb>>?N,dbzDP7DoUAJ;SgnZ0ăU")+DnC4ugN8NG'I7:d_nkwMwW<.8<?B#if&K/_UI^*a]_>mb3tH*pcYd7WjtFhXhăU">:?4yqpya7tG^cN$WAZC[^>yUo;'MVMaKD:WXt'=&\YPHsVMPMU3aNeGDMZiCf&ăU"VvpqloNI1?fqZV'eIgCTdr;B/6xCKKV)YZXTNmC[k,7.18z'e?5#Duu&,*MA5rWăU"H*RPkMMFmV\[Fal.M.7t#x:v34fI$gYiYCuC?swpPFJnr6D*037)%M8&OCPsS0păU"ok,4Hp2InuyO'P-+;))LyZXSM#0$kNzn-7sP'-$aYpWz)^NkdzfgY(piE&7JfloăU"UGiZaB6*<P>-krR/+hMQ\R.Y)D.j]0T:seaOVJY*,leQ/GtFb>0Js(,Ujj.LO>băU"35lj9%kRpu#UHPvu)+hoR\4(,KOesxue8PVJ-z))rPB\?]&$4hY.bd:5SmVi%ddăU"\$%bJcF[KlwTQOW*ia5_<c)=D9b\^rYv[\0hq8bK*jR>X18FvUQRlq53jj'9VRKăU"9n2poX0qJ9Q+Z\&F6JarUEN>s5vJglV5Bx0JX5aGMq0BL8$xx\x>^>5HR(n5#B#ăU"nMX#x8M7,1u7$,HM#JJPZp/wC_qyA2%%UTL#*kHKaRK)6kZe-ESeSM)o:tZ=v/năU"*U*1LrhB/OSu0jjpO-qgcq=HIY5nmU<l,N?cE)HR4)Tf?,U43T*.]GVjM[EPnb>ăU"0g5i8=+fV,K>u'A)%Ew-$rd--=j9:QF-tW4/-v#K/QxKk2-MEY>uV[XaW,wkEksăU"7d05=(9/)VgxnY.<5(TaoLja7tb&h8l39ekH-[(<XamCAG=^NgH>'I4W>S),+?oăU"Z'/,X<\^2pk^I#k>uc(/6T'gj<m%Ih63oTYSY6I?\/6l1sh,E<ttJTY)VeZXVLaăU"'XY+I()t]zU$nzVcMakkaMiiki;c%%wMededK]v2[;IWmnOB%L]9wEF56I3D?r_ăU"4TOpVQ;O#v_U08e+Ma:55&EM/muZgi60)Q-6a5'nU?jR<EQAICxBBL0:I&9jDqGăU"]Nf<KL<,owY'cCtE,m#Up]#ITg46n+jg,&Z+VjN>+^e8iFWiHgar>u7;ltr^HL,ăU"k6%sBdgl_4M^9K*,V30P$lR1A)hOl/4B0w'/WYffboKd2n]iu'SX&VHdB(\H_#^ăU"41]HMjZHRQ2lf/n_(<Z/6R;ABbx87keR\_BZhH25xliePlb_/_A+1IG3smXDQc'ăU"+I[uqz2macq(DoeDbk9_)d1ai#o\+ri?dU24LpoLOH16ilO&St<q>JZ5X.&&vCZăU"ok;#&\KecFi7RsC[<U^JF?2*/qPLI=hB3sDdY^KD?$g3gWr;I^C^UFPRlRQqJmFăU"Z-B<w7nthNBWwaJq[z3QD(*-ngX?7XlgfjQ]eNZQ*?LfX-D\Lq/mo&3.-4'Si_#ăU"0RX879/rcV;u=XuX,T<dr1u[M(a&%Y]_kng1H2kX(dbc<$of<&)SLHN0zNJp0I\ăU"1sTckN.F^Nx,%6Bo<ukJ)BvY.0O/6jN+WelIOYNL/9(bKA3SSJSQS;%IFFFa0R8ăU"+LL_S_JTZ/'CwsGEk&#)*NL8::s<tTuaYlLEs^H6pYLhtM-Xh\&Y3_lhQjo2ZmYăU"I]]l2pHgNlkB=Id,QL>k1i2AYSZif_=JYql:8qWq&8KZxs4>>l?6zD-jeg;Q<IkăU"GZx+4%$ST<#zz/TX6UiKG)]<X3H;(N(N3>A/,JaB.l<8/8.W^$1qoxQ0-koBognăU"HGg*6)uV1x4zkw'<YWvW\3V0;-ac7Rfm)wU]q&q&gy,MIW(scWROIux-AbO#g3kăU"KklTX\\cPT_WCbW2oFRsVmul9l;k=miVl6R<uL?52HlX>:s-N;b,uU?rvOQ>??8ăU"0J8'e'1vKV_/h:g*/bCM%KnXW]&CTj4ts*fa:Va,,#mI&h19&1W.HUJbF$q;9neăU"TwlM^nL]O0vdzl6vwg?A>f%/H;SLLWE;ffi7iuGRnN-F8rYBL+l#Na3->Yl>hYTăU"(*oUmFjxl5A(51X5x%aO7JKfn<DqGM4DLKu[EV=%]=S&0)RA>)t+6kSAflRSdLiăU"eZ4v+^sj1A.60661.R^z>01#;nRL#q&R(ST)f..A3#$,5PV-:[JpneSvoKKJ1csăU"O-aB7t_qbs'Kv-=>,$R&s_&EAN,DW-U69YuWPP'NXe_i2dJo=dIdMLCIzYF5CnOăU"m1g11LtNIfU:[wVsbk8aulw$nvrPNu\ll8LoTt#8KHp[^piZQg<I5E8%WUZ^<f&ăU"W4j#4/\]7CmwW57qhlg7<E?QWMsSR]g.RVF?e'4MTELtWfPOWF*]QJsSf8$mx:>ăU"D;ma>+x?,k9a6HLL.yyyJW?NTr(Y4,&+e$_Hr--h4+&\7,LG8<q#sd&aHX6%,zrăU"5vEHiVBN?[(_f;eI)G/:G_YVA>Q<-?sXLxmIA>Q:hF=+YL%8?Sl2^;(klI<QSUWăU"Zt^>1i>YjR.HKe%+/N?GiSe%d>]LoN=#=b1[uQ[1CPwe0ts+cQpGTztf'vkif:făU"HdHtR6ZQPTJPs&dXbQj0:PZ\OYTIxuF>WJoMTVDwRe>+'>V#E,(X$%>X(<CA+F5ăU"TNCcR)&M_'-S:.f)dNdRb,R-6Bh4)t4ocD*-SMH]uZ=rFVC^'6&Cc2wb_q_?aA?ăU"Yw\YPNULh_<J/?8#4J<g%'IQT?Ls&>K]qYE0f^1md6'tbCu%th6m]Sl:2MacphCăU"mmZ-bmVr9iD&CToTH50RYzLV*1Fhv53^ndyCtgAVjI=;gbdeH'#N[f;GtFq5;F<ăU"ZvS2dG)nMobw(d//B<<f+Q^34w)2FJW62&t<FE%f0L(2M[b?Rn-\]vYgqB*.B)9ăU"8s?9TIWxo3Ts4A%$UY%EG>dL7w?vc%Qc2_E>X][x[I8z*aC<fM^DFkg96wCgQS2ăU"j=r7g1RMmI)TYL2[U_/0<W)SL_^b9Lj5$_ZJ>e(nptc4ZbX._^[\s:Rw/C\lU6+ăU"dHRI\E7nVRD%:0?Gv<aGsxe']p9W%]Nb\iUMroi-lvBJh)+TU5OYAno2jK0-P;?ăU":Km#0x:,[\<D,KicOBv4e20u5,=lmLN?07,io0aX,k%jX-3ZbY>0nY.4srGOZPrăU"JI1+IiA.BrLEfQ2ushV3?A&Ret;uC(dU\w=w)>V,c3z6h.5pJJUi-)2q+apE]X+ăU"U>p+?T/v_(jdLOq[1gcg>j=I1$Co:>lSHUF-(*.C/TY^CSj-c,c1uPqQNKFnUjKăU"qX#RC>x_-:h&v#2c^h:3XX'QQk#1Y%puQntT7k<s9)vM2Ft6e6<dCR8k.<;L3a1ăU"/,]B?=*W>PA&S3mOD7A8p=[RDI<S,3#6XUOKdIz3sUfT3R,soDinR-O>FkuN^m*ăU"s[9MaSs(3/4>>ZQxB-VV=A&%z:x#Z2z.T%E.PtERT^15sL$C_g7TfGq#$t]&T=.ăU"]jhlK)xhRBD.7lJM1s%ra8nn%o,j>WW0_KS//OL$wMA-58q17PJSXWoiR<bPVs'ăU"jL]PH^2Nui*RR(Ij'i=91Wx1mz1uM[D6xaSL-ak\jnLMw=%Xe7%XS:&3gJIW*TqăU"&hrAfS?P%r=QC?dcddQOF<I3k3>4X7hYxK,hRv:f?chcbNf'8F,./QfF_1conAfăU"*^UC]kFkGhb8)n:E6rCs4&mvKrCPcd1PpAPNGV?iPI-'9E;r[;lZQd6G?:T=pL%ăU"%u%;;l7+$/O(O[\ulAi&_E.c*#]HmC>84z_P:*v=kJ>1)--6C*+NHr9T2nm7m)>ăU"F>B32&.eM?U7Xgo)rr_gxcNYH8idc9l86lhwoH9EYFdtdDulDND3bnMQ7nZ>%pMăU"6pSLZtiD...AEpgAlS71U#8Uh;sl2PNO3+&b^o5l4Bt,slcgdD=Sk;;T_2_nBW\ăU"'qp4\.q.8N9.'iZri(br4D[\^kOJ:u;MzFzNCQ$1z8vrK5EwDzz4$4_42h?MS.văU"I#[=bmwj?((3M?bB]9Aa<'RLSp9ZBbP(CBdLjpID/crkhuQ4CwZ5-aON+Su8O\RăU"HXjy5<//mKK>90XkH?$EKK5E9=7QP=XbhcYZ[(4ydC?1XqDGWom++Hqo*J,\mk+ăU"MG6tgtLEO5krZN2iH2(m?.R>*^;([mAj*KL.P/*:(7Al,]neS;DQqNf+Qs6rF\1ăU"XjCfsSYt62ru,,8peGdq.tzpMR)PPx(VLO/XCJ)z#6ww1yOCqMBu,,=cA34kVd=ăU"doxYRJF%/$jQa)Q1TNF>TX&8H/Zt&oyf[U'\,W]hfG<_edpb\QS#?Xs]bFRxiLVăEND SUBăSUB V3ăU"4D%_'Ot\-V'dJSBP3sa7D93m/^*&uE^zg,K%+B+7PF>=((tq55i>oR&$Kh]IGujăU"YK-cBlDP%crNZ7HYFE(7T8Y*k)A$FhE7=hUGxqnlrU]ujp8ct[/bc:?HD,pady1ăU"(Y0J%0zANJ\Bl<W&s.F%B#ejQLLZY*)t&l).6<^Qff<WW3MU%s+ivYU[QtA2JF:ăU"xd:3t3t9olC+0kXW?o^gr(n$\dhE056&#(msb:I-Sam_.x)X\tsZ<WU.)W?gegzăU"RBT[.2-aRwIwm=FDmYtI(axMrR#=faWHQl$Ar5$9F0J6:9kCNf8E,cAcA7^-%ENăU"RFM)GI>^D9PopG&^lB8]bEflSd#eoU2nXyYgRDFUoO=?^E+>T,X/clkD6vsMNepăU">K4hmf3bMp_?:T13KR5c'[i<mhGr+?jKi^qeWr5*a4OJ.Vz43NPiP^8N*u#j7'NăU"o2_Z_En]N40gEDb(iRqkv4lh?,.-H=7sAsi?$W;>ntqy<X$?[67r(jCfCv0D5%făU"0qEU/a-QBV<UMZ=>ab1$]fhE.=CL#JvHLWE^C<d7WMRZZYmoNc&:f>fU/A*wJ(răU"3\&[-ev#Bt,:FqVj^KuVKJ?$d2H^)nw(#MsYpQT_ubPF'OwhM1]deUIbWggzsm7ăU"ZoSpH;h'5-jOkh,JusUK,:;h5auLf;Qq8_N\NDgIl*vbp)5GAsQs_c6\ub$tB2JăU"dW\]rrHgQy9h;2^k?F]2Ia*[V]Y()%N)XBa5P&O_aYnSC)5b&rHm[L6)Ql(vo$&ăU"mb('JBpB*/Fdsi'$eUdC\K2,Zmd<RNaaCDunp-PAeM&.psECGV\:I;J*<\mWh5>ăU"K0;K]t:qctUl6&Alf>;mx:9x$.0IC1D8y&;[*no>8E'IJgIJP=Cq3x0.0+*A=nvăU"/HWMI$0%4hqX_*)/Dj>gkGy;Aq5yX=.kVQ(L$21>=2p/fQ/Zpbdk:'#Laqm,.#AăU"ivm#x)3[$D4uGN+[g*EcTc>,nAj$tx+T8t2iFIew4.C=O#bbXJ*(MNoNU1d,dLSăU"1qC\2I3orts&,F&<()1[4;OR=%re0C\;?B%1)o%i)9Y?TQVP=<PK?URkE>Q_^<HăU"c\os\W/[RYGL&62IyrIbz3?q1ZWng.hp:XX>\NwJ0o#nSfl3YRp4+_cBGpX2bY*ăU"H(hKt_]F^70-DXN/.W]Cy>-rgg5+C5hdrbH[]\4Xsu7gQ$'Idq#FE1-YeN=]:#năU"O4ZclXG-K,F.,E*Ix+Gq1Z4pO^QUe[bK'%Lp1$E.,mm\Qt^h-gHX+Oo'Tqudue0ăU"#dzS1\:U$Q:6n-\b,(AnFxBdWJq=Aj[kmU:Pb(o(%'[U3T=_]]d;M9)^xj$9,q(ăU":8JiO-iC?i?j[#eb$$7t)4i7$,E>%JMghh-T;]6%2,ZEmEkZv1a&Sc9]sGPuQNaăU"P-(>_TI^SANTQI>M?Mnn^bAa40j.0&Cti;Ypj1H)sJ6g>?RkZQA>K.ap869J%BCăU"ScC-sEt>ofDsZO*?7a[P[EiCQw^9vnw\qc,HRzv[\B,J[-3&,sXNZmU0D/=SMaSăU"1%kLbQ1%=IAW5U7rUzaG.xM&;ryAiLMp'BsU(^owJ&Ib,kY=+*1*2P&m8(2H%%găU"2V])UIZF-JMi<)VOOsdf98,V6BT*Xu\xO5kfXldv7p)xi?:Hote3?%gkN,5Hbh0ăU"e2H8uehf8ijpNCGVqlfq-P[^SLP6j(EAamv++eI(*jd<B4[/>rC1TpT1k6Owd7%ăU"THH0:v,)dp0j1)N1qcu2*7^x-A=Y'jv8C&1?i#\Z#8Oq:wQg:)a:-rY7>JWEXU;ăU"v5u')_\7:-7+amUw69+\z#A(9RLM--N$r4?CgSmzs=-12b(XhKKjMwKqbHetf%-ăU"9,el^7Zd.A&c->KJ14W&ZZ[qg1E1/,YnwWwr[m53u*b<iT[<e>DOog+]a\#U?>'ăU"26_GFnSJh^2$P%PS=5[&A%vNqXSmj:#Ffj7.ZUJUp3*S>Fc^U*e%=[0T-vXU-uTăU"efJI2W+Gy,z*dl%Bo_4uKgRqe\1Mv1h=qW(.[Lz#2j(Lqpfb?C8[PNio<mCKw*TăU"pik^UJO+T0RoS/#B(:[p(e8oE?yZ:;r2WyrgljMI9wARjxJGhNcSq^99aTi9LWZăU"0da&&#-%$)D$VRRK1*[\rgm4?$FW^;&NY1*(b(#YT-UO/F=F=bMcXS_3,J3i,>WăU"4H6,yRuFN[F#dh;>$teELj1-&a-ZDPWGu%'],#):GBScQ0,f-=6]F8OIg[hjr&7ăU"Kj/t*AZV-0(dYUc=Xjj.78C7d<=NpC/:,J'BI[el-'He%2W8OV^5ZvgcRC%FMAnăU"35s.V9'2Pf35S2GdZ'9Mu]R8xi(L]Gx:I7mIIa,A8rdVNi;EmVOG#=xb[5'GmFYăU"VdE((3zMn<;;f7P(&I,c9a4SYr:lRkgvp^8+t6#%G6\E>E[ssU1?3?Ss:u%KUI#ăU"*O_K+*,%1dTdHN=$Q/n:&XQtoK_P?3s6rLvqnGUQx[^M%vcwRX.U&tqn&Y*;%#IăU"hs+e/YOSZ;NY6a'IZ:cFK[59/0(2Go*V-Dt\ad9b?CfWb5&6Ut?lepR*V?>Ps2JăU"R#(kC?DvM[ihCkx>ctY[H*wxK/o:9QGxVtR$enb_qXpw\dH=7d+%]6]_FPVYSDRăU"ecqTqkHfO+AStMUS:VeZ)vX+mf/(DOP:/IP&k-2Y.#*CTt$pdv1_i*(-po=AD4măU"]ZQuuM\w%C$&x[qFqPrmOIug%C<[%B&8u*BAO,28)%3;Jwv75d/r't#-,__n*;]ăU"/g0CQiT+BuCa7/&]S):.0_:;'l\V9Vs*lZvB8:gE\Np2-kf_X^Fk#F2,c5i>h86ăU"LuQutt$.?vvLHcQX$i0VZ=Y%&Mj1PEiB]1,oHet/&?H)'7pAA7HybkQ<JY't%Y$ăU"2'40,Ce%p=ZmR:6Uq2pAg*i6Tl_pepNq%TnL:MeHl/+m-f%8R;at:,u]5&=?_Q+ăU"Q-.ha3(FQUxc2^pF,MVmOQ-Ya%9cv\?*NVt8vP4V=kkn.B*ldTldfnCF&hFb;hoăU"t=Dt;((hOZh[b$uFT6Z&F<tf+<9-Tb'QK+]O0;'U4jtQDTjfWD-P(p[^'XUJ>l.ăU"R0fR;%pIQ+;Z<$smtIW'i(b-6'_n#S/4t8*1?84gC/vH?9#&]X;F%3tO0Q&w&X1ăU":H*a)cAeBFF;Op;Ko<O&*pu?VRRsrihCBm&UFxrmQvqUl7qTq'64?Gbx9Q\n\%hăU"R4W:Fdse2\ubB:_()cHnSL\CUDCNMObpP5lA[oMOB+)b<<S=<<P>R56W1D4b'ozăU"$MoPcw5gt&G+pl3dtl)ZFP3V.1%Si8IH>Q?;T+dERi8YeX6.Mn'QNVXmQpT/lcSăU"F<KkI\XAK<qxW4$7on86706G.<T0t98uug4t9?Jk[dQh+n:#B9uyu>uqQdMhZ5băU"rWo]k;'Ze).hpRmWZ4sJT#]zRt&'\CxH+\0h*(w(UoDWVnZ5uZSHXAtvnS.84EgăU"]AO#Wz/MbS_Jt.6DRDU(1(1=y]gL>G1+CIaM[O=GjGQIu=I9$S/)bT4EDoS6^WJăU"TIX>a2R,pQ?v>a<,zGd3kV[df;G/o-%x$,Kq.\WQT*)i=(BPFNfQDO_L:dO6#)qăU"PZ$Xc_w(=M*3eMSQrlrox]V-T68Ggv<HdtE)g2=mbTZGtS\,JM7bIgL.yfiePl>ăU"d]qx>U4T(T;T-EWo.VK?Z$9\[[Y'6-0Ylz%DUU%/L#g.RiqRCId_^loGgZa9Bw5ăU"9P08Sk$d=CWK%#y>*+X:8k2XJ6gjnLE]Cqiv;w3kP>.'AEdM%yqU8bLoTe&?slpăU"ZhIZilg-p*n;HL8O.F4x),(/)LoVH;0%cj1;*i'gI\%Fru.^K#E''k7od#-JX/făU"B?EECC;HiAufVgk=Z5a:#M4ip10dyzCwq%C]jpnWK&n?piR2ptfgl/$N9SnN'p7ăU"d2b/1%-9TUoJ']$f$M'lOq=_=fyrZF)QJKttY$6uUmge7,$%)h3SgZ>7,BEUVT9ăU",P7YtB?cIJbDa/(LcF7)WYnUi=&$u+FZ<C=cpm0l6rU5c4^.8]*f^=<0Rf9E[z&ăU".#3]'LO%CFu]8T0:+(:-WI/:&7<48W0m.FObZ01*vF36'Dpica([Fy2f=w%;tBcăU"<CNYXsNcjm.nxEJT6ET(,:j6Q:m9e1DPU]:mF%&/)dBbNCG,N5+L>u+2U\<B*G%ăU"%h5K2i^TZ8q]&Y2sn<W1]>gzL/.gL>1&_.e]ZL)YT=UZ6^J.tq_\ka?&]BXG,OWăU"AAqp\)WdJZugn$%EFf\\GIhM&TU1u\0E5ScXIBZyKi$>NvfmP\Z_ESV(p:x>/yeăU"%N])u;(A*^?&AV>WZ$psCZ<Ha(X=p#11M1l;]/H^35/j(DPqFdO%,uXOqF#Bj#IăU"Y2IbHU-EMi36Ya,Yt2QdUmXAm]DBzD]4gHUtc/(cv_sGVi&TI4N,l<Y3r5tX14UăU"q\%bo$?etJE#X,VZ3s+:^&Xc)YLi*JvzT?<:$\/yty(j*_A+BHa$4c&%Q$n(\tEăU"#PzI6#&sdJ#xzJKLQK%[VT3pYooFR97<Sp_U\^)L>fIU0-q?ia1'Lly\z8Bk2cwăU"B20_356bg'[)ARDi)[ZgmZ.GfcMXo)AF5*%:h?WkkrlPN,K4sBf/&(sa<$4yOp9ăU"F#vnR*d.J\TNNcqVG$i70NvaGVX-L.(DKH+%a^'jHf/$Ib:lR(JTU%2hOpS1OvJăU"I]R&AIDYYk(PxPwORNd]_eerxf,*3+TgvH%QlE?H1M]+zIfl>zBn%TLZ=lqK:YKăU"c.hhWVn8\:?u3>S9$&+UK33UM15>F&T$'%vaYL$7W&AKvp<U3)rc<MJRW$BcqI%ăU"M%GebsqD68*HRsg^ssCc0lZgtq&vjLoZL2<4r60SS=w3SFcq;u>Cj<\3?x1k/F)ăU"MXoY-m5=L.V'FudWo]8N<u7i7MiFR%QYBZ?:]inI6Pgl'DG'KYZ/lTmaH.xTA>#ăU"2Do6P.mT8l4U1^4\_e%nCHItCCu#P<kkkS.K6D+&A0H'B^)IO5\[01AH?.efk]$ăU".umh0r5es'*W2-srEn6EMg[K_NQ^^3:q#$g39UFqk:4/I;[3a(V:_i_$.'Esf&căU"n7dc7lht9_369rbQwxRuqKsqlE2#DIkj873Nv5[cA:bqDVk;nfJY/K-]Q'#7o2KăU"-3g0,knt+a/w\>E)KF)e*.VJ)0NCe-[y%[LrviCF+s:/5gBvZ,'5&UU:e6DxlM7ăU"mZR(CqnHLYMn.),'1)ET&sIqZs1Pj&n,gGKW7;1DmV?qMJ\bIqGN?FZZ#CZOfDeăU"CMOsUr%V\3O8SFDGW1MdVqv-B-x>Qnn5fi&o][4NJQVm$3/%8^r&m'60b2dQ%eCăU"V/Uiab(mh3Renj'U#fB3TGek'OOad0pI<a?BmDpoV$S=.7fJ'78Ln<iP3:4[wM&ăU"xEo1]78)(6Q'E2l[]B]h#5>m]zp-\UIfad?I/PKXx-C_IX\\,JPN5;JVg*)&OKZăU"N]R6wGga6\VCB\0U*.*dR]w%#PH=e.WQ#h7'Z0R(Nh#Hxj&lsB^;OfV+y<mmEI\ăU"s,.p<#<2Zccg.mMVj*rY%i'uf8[?=a4IUIyZ0W=o,7t<CX67IVq;Jo$JU(G7&4-ăU"KeK8qK9d_$AlHN\5#):Hp^j.[]%(_mFFvuBA%_l,1p[LMhs)Xb,]E]a^AxiN1kQăU"moN<+]uq<bP$Nxy_lo2FI66*tjhmeVbHqV+KYr1BhpI1,Sf;'wCp=fO?<'XVY+văU"vKzs2D[N*NC<aH^,SojPf*'<s/ruYDx\L+h3zWh<bmoM=:)xeqTSdQ[^9[QwKJ*ăU"L%I8PU[O%sK<i/i386Fu)ZBppu&_-U6WMwn.KeTj,Ib4Ti.IsKmoQLVUi6Qpkv6ăU"I%1<aH&VnDoHQY4Xm':r'='En=VSX-.&0t-I?cgOu=Rjuv)#tn1K&T+h<4dVoTGăU"BZxr73Xdu]Z\7P*9n_G(x,k.KX-6/^%O6gc;GzGKBFIw5hhCu4a:6l/p:Sj;5u_ăU",$H\eN#&Pw,:i>q^_+RvWDHLRfqjZ7J#&]cc7>bLG[Jm$I_9v_='MY#dSJK[;1iăU"FxRP(eE-Q%B_Z5lwR&\r[$u9;3TgEst4^(a;#.]7T*9<9p3$O9o4_K9;ZhSc=9kăU"h^/bRNLv#5gB;&B6j$34G:O#i2It.?j/XWf<s$PRI(=]dcY)_MfAq\]N%eMD$.=ăU"qPWSz?,QkhDm\4cg32tq4x%%W%X?=H>Y%q(0dj>nqVEu4lnRL)&jjm1U-O49/%PăU"Qm1KC8$w8s-OMc\MqxQf?0%4M>xE[fLWw&nu5ObO\d0*;aFQ;O;7X$ZYlOLn2k4ăU"%jbe-^E%jm/C;])o=XLMCCHA.Ptc62.6VUQ,\G2cFPe:o6bllQj\cf$Zts3tKMPăU"UF^V)cH4-_WP29LILU'.3d0Uc6lU\PTw4cm_%mTNVW=)[y(Zi2FeCH;o;]f+ZA;ăU">eCAyfP5-]43*t4UNng6VhUO$t]I^-*0C(pi0+w:E(%K3ZsW_;n-$sE6_Nr[=tVăU"$Te+ar/YjX4P,JQc)-vF)ta-s5mc-mb]ukIj&q>xecE4Qy)%pre20De&S>=cNQdăU"dBKW<6:c;p:K:vscda4a*mGe$ZoQ;/zm?-AI4fVFX^BN3dZk,Jm6%T\m]^i7^QLăU"yL\B;+K(WV6KG$Ju=Ph1H/J\+-2)J'B&QF%sjXM]>%?exmJzQk/[x(BmeS_/_1făU"Em2U?KMIhUcEu&(<4PYBQiHg7V6hq]NAVu4w+^YeJl%(W%C[DVo\Z87%&Y7G6a%ăU"0asTX[yDf:_&y,djZO3'K*nv2ZB#g[.i2X?rngFELN,iZ=_uQWndf22AD5cJKhWăU"#_Yp_4C(]J\Iuq?U?iknQwF5-?Q(Q3q$hPJ'kZ)W;[*9'b:Je11Y.e2nN52E+iAăU"ajL&U<JmlDkK]8N<x*9hs?$K4tjSy-cVrh:PDoNrqGmR/Xh]cGJMFJR\qi\c2F:ăU")bXFNa,$27ef>rgb*e0(EX/bF*B>+L4A^byv<xu'&L.,j8#)C\bj5,3g6:/.\m2ăU"hR&S>w7Wc3mPOgk[hbZA6m>WTyZJ&<^W,J]cv9FvS3fh0tRHPJkLHBa*G7.guB8ăU"+CJh6*.TrdRkP&H.<+M#p\>\,dQN8-KL\\K:yO-jAElF7^in^DFcm*hbPa3-$-măU"TBR$F-q5th442#CUCOsjfbgRu%4p9MdOT%90:\)W^JW$=WOcY48a/HXX#VReb]dăU"b9#rVPC'LEb4CPq:qWUr14tGt,-XBGe0AyG9>/al7,6Gi6D#qWC^XLWh68Glx<.ăU"xQ_?>NcptdwlbHnxin>NxTt<x_Hn><NlxT.x6krndZt<hN-pTtcQwaR.lvuvPr(ăU",vJ9^0$,ptnadob_SWKKu&,Lv%K//Ns%_KFPF;HV-ci?ZpcP4T6wr^pnXKU=ZXvăU"tRh7tueQ4V9%VsELYX3K#E$klYPA;[l9nj/*gWpm+oVPK^F4:Nrn1$Sp$?ceKr0ăU"fNYCnSJ.d*MDaNuct6l$N&MO.K0l\pvHuwihxHobLK?o]$du2wGTf<<VG\l^.qbăU"]-ZLOq+sw/O46JXL?#=rT[a\#$Bd?j\(,0U-I\l*-#LhEheFC#pfBSEd1[/+8#LăU"I9fnH'\U,pDGzd?7a.Xh\HdlhCQ(8Elp4C5xlZ8Mmid^Nl*B\#\scvmL[#\cr]]ăU"\Dx$sr4buBqLprWL$cbdD<X^'C(6]#_$qi[,t?US\hDt=X+jgrkK[=jp[0XS4cNăU"X>5I\.aS7H$49rxGKVNv2tgXtS_y+^X;=>tJA>eX5+4bf_Ihf=-DRoComS#=/wfăU"\OtH_^^G3bX>[,OcNJx//uN2lyoS<$g]G<TvdQNpUmJUtw:?*C#I=0+:tAy1z.uăU"(53ul.PN1nAZ-djEv=)RzV[6pE+V]C9:JbNKZ#)V1QZfCxO4hd-icdlO'-nK<\-ăU"*<jy+,bfoWTflMd.:,qNKE)p0\f4$]V6FGi).qz/p/Lh2p.V.lfpp%j.qLMgUtHăU"l_Hk.)/:*;T0<S0R_)s7+]0s<\x#kVZR$KH<v*V)ZEmUj2P6cbo/-Mc(_yrhkTRăU"]f2ZwG6)y7<Wt>]fS:O/g%Odwt)pV#7V9GpDkg4W9H6s5e'4yn;_(\HjQ$Rm^DaăU"t9uH=HA$H[T9l(lD[tChP7h5K=-^zU'Eoa3?uLD'2>VJ\r9YL.7)t.&(Ok&dzn<ăU"x>v\%up&'%9%9%%%%-%)hY9H;_c<l&8)%%&=1%%%/%%%%%%%%%&%E%%%%%%%%%xăU"r%kfij%Sgfx%up&'%9%9%%%%-%)SS9Hfe+>A(02%%+,s%%%/%%%%%%%%%%%E%.%ăU"%$)%%%xr%kfij%Sify%up*+%%%%%%'%'%&?%%%*=6%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=86AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăPetter Holmberg                CROSS-FADING DEMONSTRATION     petter.holmberg@usa.net        08-22-97 (17:10)       QB, QBasic, PDS        286  8276     CROZFADE.BAS' A crossfading demonstration by Petter Holmberg, -97:ăăTYPE PalTypeă  red AS INTEGERă  green AS INTEGERă  blue AS INTEGERăEND TYPEăăDECLARE SUB BuildPic1 ()ăDECLARE SUB BuildPic2 ()ăDECLARE SUB BuildEffect ()ăDECLARE SUB PalMorph ()ăDECLARE SUB Crossfade ()ăăDIM SHARED picmem%(32001)ăDIM SHARED palmem(0 TO 255) AS PalTypeăăDIM SHARED colormem%(255, 1)ăDIM SHARED morphpic%(32001)ăDIM SHARED morphfrompal(0 TO 255) AS PalTypeăDIM SHARED morphtopal(0 TO 255) AS PalTypeăăFOR memfill% = 0 TO 255ă   FOR fillarray% = 0 TO 1ă      colormem%(memfill%, fillarray%) = 256ă   NEXT fillarray%ăNEXT memfill%ăă' --- Print start text:ăăCLSăSCREEN 0ăWIDTH 80, 25ăăPRINT "A crossfading demonstration by Petter Holmberg, -97:"ăPRINTăPRINT "Crossfading, or palette morphing, is a cool graphical effect mostly used in"ăPRINT "television as a method to switch between two pictures. On the screen you can"ăPRINT "watch how the present picture slowly fades away, while at the same time a new"ăPRINT "picture emerges and become more and more prominent. Finally, the first picture"ăPRINT "has completely disappeared and been replaced by the new picture."ăPRINTăPRINT "This effect can also be used in computer programs, and it's a really cool way"ăPRINT "to switch between pictures. The good thing with crossfading is that it only"ăPRINT "requires a gradient change between two palettes. No pixels need to be read or"ăPRINT "written during the effect. However, a picture containing information about both"ăPRINT "the pictures in the crossfade and two palettes, one making this picture look"ăPRINT "like the first picture in the crossfade, and the other one making it look like"ăPRINT "the second one must be calculated."ăPRINT "This program shows two pictures, builds the crossfading picture and palettes"ăPRINT "and then cycles between them until a key is pressed."ăPRINTăPRINT "If you want to, you may replace the simple pictures used in this demo with some"ăPRINT "other pictures and save the crossfading picture and palettes for use in your own"ăPRINT "programs, as long as you credit me in your code. Also note that I don't take any"ăPRINT "responsibility for any kind of damage due to the use of this program."ăPRINT "Petter Holmberg, -97"ăăDO: LOOP WHILE INKEY$ = ""ăăSCREEN 13ăă' --- Display and save the first picture:ăăBuildPic1ăăLOCATE 1, 1ăPRINT "   Press any key to show picture 2...   ";ăDO: LOOP WHILE INKEY$ = ""ăCLSăă' --- Display the second picture:ăăBuildPic2ăăLOCATE 1, 1ăPRINT "  Press any key to build the effect...  ";ăLOCATE 25, 1ăPRINT "     (This will take a few seconds)     ";ăDO: LOOP WHILE INKEY$ = ""ăLOCATE 1, 1ăPRINT "                                        ";ăLOCATE 25, 1ăPRINT "                                        ";ăă' --- Create the crossfading effect:ăăBuildEffectăăCLSăLOCATE 1, 1ăPRINT "  Completed. Now press any key to look  ";ăPRINT "      at the crossfading effect...      ";ăDO: LOOP WHILE INKEY$ = ""ăCLSăă' --- Do the crossfading:ăăDOă   Crossfadeă   FOR swappalettes% = 0 TO 255ă      SWAP morphfrompal(swappalettes%), morphtopal(swappalettes%)ă   NEXT swappalettes%ăLOOP WHILE INKEY$ = ""ăă' --- End the program:ăăSCREEN 0ăWIDTH 80, 25ăăPRINT "That's all for now..."ăPRINT "Petter Holmberg, -97"ăăSUB BuildEffectăă' This SUB builds the crossfade picture and palettes.ăă' --- Memory locations for the three pictures:ăăpic1seg& = VARSEG(picmem%(2))ăpic1ofs& = 4ăpic2seg& = &HA000ăpic2ofs& = 0ădestseg& = VARSEG(morphpic%(2))ădestofs& = 4ăă' --- Set value for first color index to be used in the crossfading picture:ăădestcolor% = 1ăă' --- Create the picture and palettes:ăăFOR buildpic& = 0 TO 64000ăă   DEF SEG = pic1seg&ă   pic1pixel% = PEEK(pic1ofs&)ă   DEF SEG = pic2seg&ă   pic2pixel% = PEEK(pic2ofs&)ăă   oldpixel% = 0ăă   FOR scanpixels% = 0 TO destcolor%ă      IF colormem%(scanpixels%, 0) = pic1pixel% AND colormem%(scanpixels%, 1) = pic2pixel% THENă       oldpixel% = 1ă       DEF SEG = destseg&ă       POKE destofs&, scanpixels%ă       EXIT FORă      END IFă   NEXT scanpixels%ăă   IF oldpixel% = 0 THENă    IF destcolor% = 255 THENă     BEEPă     SCREEN 0ă     WIDTH 80, 25ă     PRINT "Sorry, the pictures are too complex for the crossfading effect. Reduce the color"ă     PRINT "depth or picture detail and try again."ă     ENDă    END IFă    colormem%(destcolor%, 0) = pic1pixel%ă    colormem%(destcolor%, 1) = pic2pixel%ă    DEF SEG = destseg&ă    POKE destofs&, destcolor%ă    morphfrompal(destcolor%).red = palmem(pic1pixel%).redă    morphfrompal(destcolor%).green = palmem(pic1pixel%).greenă    morphfrompal(destcolor%).blue = palmem(pic1pixel%).blueă    OUT &H3C7, pic2pixel%ă    morphtopal(destcolor%).red = INP(&H3C9)ă    morphtopal(destcolor%).green = INP(&H3C9)ă    morphtopal(destcolor%).blue = INP(&H3C9)ă    destcolor% = destcolor% + 1ă   END IFăă   pic1ofs& = pic1ofs& + 1ă   pic2ofs& = pic2ofs& + 1ă   destofs& = destofs& + 1ăăNEXT buildpic&ăăDEF SEGăămorphpic%(0) = 2560ămorphpic%(1) = 200ăăEND SUBăăSUB BuildPic1ăă' This SUB initializes and saves the first picture and its palette.ăă' --- Draw sample picture:ăăCIRCLE (159, 99), 100, 15ăPAINT (159, 99), 32, 15ăăLOCATE 13, 15ăPRINT "Crossfading!"ăă' --- Save the first picture and its palette:ăăGET (0, 0)-(319, 199), picmem%ăăFOR readpal% = 0 TO 255ă   OUT &H3C7, readpal%ă   palmem(readpal%).red = INP(&H3C9)ă   palmem(readpal%).green = INP(&H3C9)ă   palmem(readpal%).blue = INP(&H3C9)ăNEXT readpal%ăăEND SUBăăSUB BuildPic2ăă' This SUB initializes the second picture and its palette.ăă' --- Draw sample picture:ăăLINE (55, 13)-(263, 185), , BăPAINT (159, 99), 40, 15ăăLOCATE 12, 10ăPRINT "A cool effect coded by"ăLOCATE 13, 11ăPRINT "Petter Holmberg, -97"ăLOCATE 14, 10ăPRINT "petter.holmberg@usa.net"ăăEND SUBăăSUB Crossfadeăă' This SUB crossfades between the two sample pictures.ăă' --- Set the first palette and display the crossfading picture:ăăOUT &H3C8, 0ăFOR setpal% = 0 TO 255ă   OUT &H3C9, morphfrompal(setpal%).redă   OUT &H3C9, morphfrompal(setpal%).greenă   OUT &H3C9, morphfrompal(setpal%).blueăNEXT setpal%ăăPUT (0, 0), morphpic%, PSETăă' --- Save the palette for use in the crossfading code:ăăOUT &H3C7, 0ăFOR getpal% = 0 TO 255ă   palmem(getpal%).red = INP(&H3C9)ă   palmem(getpal%).green = INP(&H3C9)ă   palmem(getpal%).blue = INP(&H3C9)ăNEXT getpal%ăă' --- Crossfading code:ăăFOR morphpal% = 0 TO 63ă   FOR morphscan% = 0 TO 255ă      IF palmem(morphscan%).red < morphtopal(morphscan%).red THENă       IF 63 - morphtopal(morphscan%).red < morphpal% AND palmem(morphscan%).red < morphtopal(morphscan%).red THEN palmem(morphscan%).red = palmem(morphscan%).red + 1ă      ELSEă       IF 63 - morphtopal(morphscan%).red > morphpal% AND palmem(morphscan%).red > morphtopal(morphscan%).red THEN palmem(morphscan%).red = palmem(morphscan%).red - 1ă      END IFă      IF palmem(morphscan%).green < morphtopal(morphscan%).green THENă       IF 63 - morphtopal(morphscan%).green < morphpal% AND palmem(morphscan%).green < morphtopal(morphscan%).green THEN palmem(morphscan%).green = palmem(morphscan%).green + 1ă      ELSEă       IF 63 - morphtopal(morphscan%).green > morphpal% AND palmem(morphscan%).green > morphtopal(morphscan%).green THEN palmem(morphscan%).green = palmem(morphscan%).green - 1ă      END IFă      IF palmem(morphscan%).blue < morphtopal(morphscan%).blue THENă       IF 63 - morphtopal(morphscan%).blue < morphpal% AND palmem(morphscan%).blue < morphtopal(morphscan%).blue THEN palmem(morphscan%).blue = palmem(morphscan%).blue + 1ă      ELSEă       IF 63 - morphtopal(morphscan%).blue > morphpal% AND palmem(morphscan%).blue > morphtopal(morphscan%).blue THEN palmem(morphscan%).blue = palmem(morphscan%).blue - 1ă      END IFă   NEXT morphscan%ăă   WAIT (&H3DA), 8    ' Wait for a screen update.ă   WAIT (&H3DA), 8, 8 ' Wait for the vertical retrace.ăă   OUT &H3C8, 0ă   FOR setpal% = 0 TO 255ă      OUT &H3C9, palmem(setpal%).redă      OUT &H3C9, palmem(setpal%).greenă      OUT &H3C9, palmem(setpal%).blueă   NEXT setpal%ăNEXT morphpal%ăăEND SUBăMoritz Muehlenhoff             ROUTINE TO DRAW PENTAGONS      UMuehlenhoff@t-online.de       08-27-97 (14:34)       QB, QBasic, PDS        20   784      PENTA.BAS   DECLARE SUB Pent (x%, y%, size, farbe%)ăă' Pent by Moritz Muehlenhoffă' Can be used in any graphic modeăăSCREEN 13ăCLSăăPent 60, 80, 3, 4ăPent 240, 80, 3, 4ăPent 150, 90, 2, 12ă                 ăăSUB Pent (x%, y%, size, farbe%)ă LINE (CINT(x% - (size * 19)), CINT(y% - (size * 4)))-(CINT(x% + (size * 19)), CINT(y% - (size * 4))), farbe%ă LINE (CINT(x% + (size * 19)), CINT(y% - (size * 4)))-(CINT(x% - (size * 13)), CINT(y% + (size * 17))), farbe%ă LINE (CINT(x% - (size * 13)), CINT(y% + (size * 17)))-(CINT(x%), CINT(y% - (size * 15))), farbe%ă LINE (CINT(x%), CINT(y% - (size * 15)))-(CINT(x%) + (size * 15), CINT(y% + (size * 17))), farbe%ă LINE (CINT(x%) + (size * 15), CINT(y% + (size * 17)))-(CINT(x%) - (size * 19), CINT(y% - (size * 4))), farbe%ăEND SUBăJoshua Dickerson               3D MODELING                    comp.lang.basic.misc           06-29-97 (22:30)       QB, QBasic, PDS        271  8700     3DMODEL.BAS 'From: iowrath@aol.com (IO Wrath)ă'Newsgroups: comp.lang.basic.miscă'Subject: 3Dmodel.BASă'Date: 29 Jun 1997 22:30:46 GMTăăDEFINT A-ZăăDECLARE SUB SetPal ()ăDECLARE SUB Tri (i%, c%)ăDECLARE SUB QwkSort (l%, R%)ăDECLARE SUB MainLoop ()ăDECLARE SUB DrawObject ()ăă'A simple example of 3D graphics by Joshua Dickerson (C) SEPTEMBER 1996ă                      ăDIM SHARED rX!, ry!, rZ!, tx, ty, tZ, nPts, nPlăREAD nPts, nPlăDIM SHARED World(nPts, 2), Plane(nPl, 2), Index(nPl), mp!(nPl), pX(nPts)ăDIM SHARED pY(nPts), Z!(nPts), Dst, frameăăFOR i = 0 TO nPtsă   FOR j = 0 TO 2ă      READ World(i, j)ă   NEXTăNEXTăăFOR i = 0 TO nPlă   FOR j = 0 TO 2ă      READ Plane(i, j)ă   NEXTăNEXTăăDst = 1100ătZ = -1270ăăty = -70ătx = 90ărZ! = 2.8ăăSCREEN 9ăi = INP(&H3DA)ăFOR i = 0 TO 15ă   OUT &H3C0, iă   OUT &H3C0, iăNEXTăOUT &H3C0, 32ăăSetPalăăMainLoopăENDăă'DATA 16,17ă'DATA 0,0,-100, 15,0,-20, -15,0,-20, 0,-5,0, -15,0,-50, 15,0,-50, 40,0,-30ă'DATA -40,0,-30, 41,0,5, -41,0,5, 42,0,-30, -42,0,-30, 40,0,-80, -40,0,-80ă'DATA 140,0,-25, -140, 0,-25, 0,-15,-20ăă'DATA 0,1,2, 1,2,3, 0,1,5, 0,2,4, 1,5,6, 2,4,7, 1,6,8, 2,7,9, 6,8,10, 6,10,12ă'DATA 8,10,14, 7,9,11, 7,11,13, 9,11,15, 0,2,16, 0,1,16, 1,3,16, 2,3,16ăă'DATA 32,44ă'DATA 0,-50,0, -23,-47,0, -34,-32,0, -37,-6,0, -33,10,0, -12,35,0, 12,35,0ă'DATA 33,10,0, 37,-6,0, 37,-18,0, 34,-32,0, 23,-47,0, -23,-27,10, -23,-23,12ă'DATA -10,-18,2, -6,-25,8, -5,-4,10, -10,2,5, -23,-13,10, -23,-17,12ă'DATA -37,-18,0, 0,14,7, 0,18,5, 0,24,5, 0,29,7, 10,2,2, 23,-13,10, 10,-18,2ă'DATA 6,-25,8, 23,-27,10, 23,-23,12, 23,-17,12, 5,-4,10ă'ă'DATA 1,2,12, 1,12,0, 12,15,0, 0,15,28, 15,16,28, 28,16,32, 0,29,28, 0,29,11ă'DATA 10,29,9, 2,20,12, 12,14,15, 27,28,29, 10,11,29, 20,12,13, 12,13,14ă'DATA 27,29,30, 29,30,9, 20,3,18, 20,19,18, 18,19,14, 27,26,31, 26,31,9, 8,9,26ă'DATA 14,17,16, 14,16,15, 28,32,25, 25,27,28, 18,14,17, 27,26,25, 3,18,17ă'DATA 17,4,3, 25,26,8, 25,8,7, 17,25,16, 16,32,25, 17,21,25, 17,21,4, 25,21,7ă'DATA 4,21,22, 21,22,7, 4,23,24, 23,24,7, 4,5,24, 5,6,24, 24,6,7ăă'BacterioPhage.ăDATA 108, 185ăDATA 0,70,0,  17,50,30, -17,50,30, -35,50,0, -17,50,-30, 17,50,-30ăDATA 35,50,0,  17,-10,30, -17,-10,30, -35,-10,0, -17,-10,-30, 17,-10,-30ăDATA 35,-10,0,  3,-40,5, -3,-40,5, -6,-40,0, -3,-40,-5, 3,-40,-5ăDATA 6,-40,0,  6,-40,10, -6,-40,10, -12,-40,0, -6,-40,-10, 6,-40,-10, 12,-40,0ăDATA 6,-45,10, -6,-45,10, -12,-45,0, -6,-45,-10, 6,-45,-10, 12,-45,0ăDATA 3,-45,5, -3,-45,5, -6,-45,0, -3,-45,-5, 3,-45,-5, 6,-45,0ăDATA 3,-50,5, -3,-50,5, -6,-50,0, -3,-50,-5, 3,-50,-5, 6,-50,0ăDATA 6,-50,10, -6,-50,10, -12,-50,0, -6,-50,-10, 6,-50,-10, 12,-50,0ăDATA 6,-160,10, -6,-160,10, -12,-160,0, -6,-160,-10, 6,-160,-10, 12,-160,0ăDATA 3,-160,5, -3,-160,5, -6,-160,0, -3,-160,-5, 3,-160,-5, 6,-160,0ăDATA 3,-165,5, -3,-165,5, -6,-165,0, -3,-165,-5, 3,-165,-5, 6,-165,0ăDATA 6,-165,10, -6,-165,10, -12,-165,0, -6,-165,-10, 6,-165,-10, 12,-165,0ăăDATA 6,-170,10, -6,-170,10, -12,-170,0, -6,-170,-10, 6,-170,-10, 12,-170,0ăDATA 3,-170,5, -3,-170,5, -6,-170,0, -3,-170,-5, 3,-170,-5, 6,-170,0ăDATA 3,-175,5, -3,-175,5, -6,-175,0, -3,-175,-5, 3,-175,-5, 6,-175,0ăDATA 33,-155,50, 27,-155,53, -27,-155,54, -33,-155,50, -60,-155,4, -60,-155,-4ăDATA -33,-155,-50, -27,-155,-54, 27,-155,-54, 33,-155,-50, 60,-155,-4,60,-155,4ăDATA 40,-260,69, -40,-260,69, -80,-260,0, -40,-260,-69, 40,-260,-69, 80,-260,0ăăDATA 0,1,2, 2,0,3, 3,0,4, 4,0,5, 5,0,6, 6,0,1, 6,12,1, 12,7,1, 7,1,2, 7,8,2ăDATA 8,9,3, 2,3,8, 3,9,4, 9,10,4, 10,11,4, 11,4,5, 5,11,6, 11,12,6, 7,8,13ăDATA 13,14,8, 8,9,14, 14,15,9, 9,15,10, 15,16,10, 16,10,11, 16,17,11, 17,18,12ăDATA 17,12,11, 7,18,13, 7,18,12, 13,19,20, 14,20,13, 20,14,21, 14,21,15ăDATA 21,15,22, 15,22,16, 16,23,22, 16,17,23, 17,23,24, 17,18,24, 18,24,19ăDATA 13,18,19, 19,25,26, 19,20,26, 20,26,27, 20,21,27, 21,27,28, 21,22,28ăDATA 22,28,29, 22,23,29, 23,29,30, 23,24,30, 24,25,30, 19,24,25, 25,36,31ăDATA 25,30,36, 25,26,31, 26,31,32, 26,27,32, 27,32,33, 27,28,33, 28,33,34ăDATA 28,29,34, 34,35,29, 30,35,36, 29,30,35, 37,38,32, 37,31,32, 32,38,33ăDATA 33,38,39, 33,34,39, 39,34,40, 34,40,35, 40,41,35, 35,36,41, 41,42,36ăDATA 31,37,42, 42,31,36, 37,43,38, 43,44,38, 38,44,39, 44,45,39, 45,39,40ăDATA 45,40,46, 40,46,41, 46,47,41, 41,47,42, 47,42,48, 48,42,37, 37,43,48ăDATA 49,43,50, 43,44,50, 44,50,51, 51,44,45, 45,51,52, 45,46,52, 46,52,53ăDATA 46,47,53, 47,48,54, 47,54,53, 43,49,48, 48,49,54, 55,49,56, 49,50,56ăDATA 56,57,50, 50,51,57, 51,57,58, 51,52,58, 52,58,59, 52,53,59, 53,59,60ăDATA 53,54,60, 49,55,54, 55,54,60, 55,56,61, 61,62,56, 56,57,62, 57,62,63ăDATA 57,63,58, 63,64,58, 58,59,64, 59,64,65, 65,59,60, 65,66,60, 66,60,55ăDATA 66,55,61, 61,67,68, 61,62,68, 68,62,69, 62,63,69, 69,63,70, 63,64,70ăDATA 64,70,71, 64,65,71, 71,65,72, 66,65,72, 66,72,67, 61,66,67, 67,68,73ăDATA 68,73,74, 68,74,69, 69,74,75, 69,70,75, 70,75,76, 76,70,71, 71,76,77ăDATA 71,77,72, 77,78,72, 72,78,77, 67,73,78, 73,79,74, 74,80,79, 74,75,80ăDATA 75,80,81, 76,81,75, 81,82,76, 82,83,77, 82,76,77, 83,84,78, 83,77,78ăDATA 73,79,84, 73,78,84, 85,79,86, 79,80,86, 86,87,80, 80,81,87, 81,87,88ăDATA 81,88,82, 82,88,89, 82,83,89, 83,89,90, 83,84,90, 84,90,85, 85,84,79ăDATA 91,92,73, 93,94,74, 95,96,75, 97,98,76, 99,100,77, 101,102,78, 91,92,103ăDATA 93,94,104, 95,96,105, 97,98,106, 99,100,107, 101,102,108ăăSUB DrawObjectă   'I will clean up any inaccuracies, shortcuts, and inefficienciesă   'in my third release...ă  ă   CrX! = COS(rX!)ă   SrX! = SIN(rX!)ă   CrY! = COS(ry!)ă   SrY! = SIN(ry!)ă   CrZ! = COS(rZ!)ă   SrZ! = SIN(rZ!)ă  ă   'Pre-Construct a table of rotated/translated/projected points.ă   FOR i = 0 TO nPtsă      X! = CrX! * -World(i, 0) - SrX! * World(i, 2)ă      Z! = SrX! * -World(i, 0) + CrX! * World(i, 2)ă      y! = CrY! * World(i, 1) - SrY! * X!ă      Z!(i) = (CrZ! * Z! - SrZ! * y!) + tZă      pX(i) = (Dst * ((CrY! * X! + SrY! * World(i, 1)) + tx) / Z!(i)) + 320ă      pY(i) = 175 - (Dst * ((SrZ! * Z! + CrZ! * y!) + ty) / Z!(i))ă   NEXTăă   'This provides the Z midpoint for a primative hidden surface removală   'routine.ăă   FOR i = 0 TO nPlă      mp!(i) = (Z!(Plane(i, 0)) + Z!(Plane(i, 1)) + Z!(Plane(i, 2))) / 3ă      Index(i) = iă   NEXTă  ă   QwkSort 0, nPlăă   FOR i = 0 TO nPlă      Tri i, (14 * (i / nPl)) + 1ă      '      ^^^^^^^^^^^^^^^^^^^^ă      'A novel shading algorythm I came up with. This is not entirelyă      'accurate, but I thought it would provide an adaquate illusion.ă   NEXTăEND SUBăăDEFSNG A-ZăSUB MainLoopă   DOă      rX! = rX! + .1ă      IF rX! > 6.28 THEN rX! = 0ă      Page = 1 - Pageă      SCREEN 9, 1, 1 - Page, Pageăă      WAIT 986, 8ă      LINE (0, 0)-(639, 349), 0, BFă ă      DrawObjectă   LOOP UNTIL INKEY$ <> ""ăSCREEN 0ăEND SUBăăDEFINT A-ZăSUB QwkSort (l, R)ăi = lăj = RăX! = mp!(Index((l + R) \ 2))ăăDOă   DO WHILE mp!(Index(i)) < X!ă      i = i + 1ă    LOOPă   DO WHILE X! < mp!(Index(j))ă      j = j - 1ă   LOOPă   IF i <= j THENă      SWAP Index(i), Index(j)ă      i = i + 1ă      j = j - 1ă   END IFăLOOP UNTIL i > jăăăIF l < j THEN QwkSort (l), (j)ăIF i < R THEN QwkSort (i), (R)ăăEND SUBăăSUB SetPalăFOR i = 0 TO 15ă   OUT &H3C8, iă   OUT &H3C9, i * 4ă   OUT &H3C9, i * 4ă   OUT &H3C9, i * 4ăNEXTăăEND SUBăăSUB Tri (i, c)ă   DIM xpos(-100 TO 449, 1)ă  ă   x1 = pX(Plane(Index(i), 0))ă   y1 = pY(Plane(Index(i), 0))ă   x2 = pX(Plane(Index(i), 1))ă   y2 = pY(Plane(Index(i), 1))ă   x3 = pX(Plane(Index(i), 2))ă   y3 = pY(Plane(Index(i), 2))ăămny = y1ăIF y2 < mny THEN mny = y2ăIF y3 < mny THEN mny = y3ămxy = y1ăIF y2 > mxy THEN mxy = y2ăIF y3 > mxy THEN mxy = y3ăs1 = ABS(y1 < y2) * 2 - 1ăs2 = ABS(y2 < y3) * 2 - 1ăs3 = ABS(y3 < y1) * 2 - 1ăăy = y1ăIF y1 <> y2 THENă   DOă      xpos(y, ABS(y1 < y2)) = (x2 - x1) * (y - y1) \ (y2 - y1) + x1ă      y = y + s1ă   LOOP UNTIL y = y2 + s1ăELSEă   xpos(y, ABS(y1 < y2)) = x1ăEND IFăy = y2ăIF y2 <> y3 THENă   DOă      xpos(y, ABS(y2 < y3)) = (x3 - x2) * (y - y2) \ (y3 - y2) + x2ă      y = y + s2ă   LOOP UNTIL y = y3 + s2ăELSEă   xpos(y, ABS(y2 < y3)) = x2ăEND IFăy = y3ăIF y3 <> y1 THENă   DOă      xpos(y, ABS(y3 < y1)) = (x1 - x3) * (y - y3) \ (y1 - y3) + x3ă      y = y + s3ă   LOOP UNTIL y = y1 + s3ăELSEă   xpos(y, ABS(y3 < y1)) = x3ăEND IFăă'Polygon is broken up into horizontal lines (No painting nessesary this way)ăFOR y = mny TO mxyă   IF xpos(y, 0) > xpos(y, 1) THEN SWAP xpos(y, 0), xpos(y, 1)ă   IF xpos(y, 0) > 0 THEN LINE (xpos(y, 0), y)-(xpos(y, 1), y), căNEXTăLINE (x1, y1)-(x2, y2), c - 1ăLINE -(x3, y3), c - 1ăLINE -(x1, y1), c - 1ăEND SUBăDanny Beardsley                FAST FIRE                      beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        84   2232     FIRETEST.BAS' $DYNAMICă'FAST FIRE BY DANNY BEARDSLEYă' COMPILE ME! 10 TIMES FASTERă' COMPILE ME! 10 TIMES FASTERă' COMPILE ME! 10 TIMES FASTERă'_______/----------------\______________ă'This is the fastest fire routine that i have ever seen.ă'If you COMPILE it will be !!!10 times faster!!!!ă'This is not true fire it only spreads to the leftă'If you want more code for other amazing feats thenă'----------------------------ă'Email:       dsb@cyberdude.comă'Homepage:    www.dnai.com/~beardsă' FFFRRREEEEEEWWWAAARRREEE (just put my name in somewhere if you use it)ăăSCREEN 13ăCLSă  FOR t% = 0 TO 63ă    'ă    ' Fade from black to redă    'ă    OUT &H3C7, t%  ' Slots 0-15ă    OUT &H3C9, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    'ă    ' Fade from red to yellowă    'ă    OUT &H3C7, t% + 63' Slots 16-31ă    OUT &H3C9, 63ă    OUT &H3C9, t%ă    OUT &H3C9, 0ă    'ă    ' Fade from yellow to whiteă    'ă    OUT &H3C7, t% + 126' Slots 32-47ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, t%ă    'ă  NEXTăătim = TIMERăDEF SEG = (&HA000 + &H7D0)ăRANDOMIZE TIMERăDOăLINE (0, 198)-(320, 198), 0ăFOR r% = 1 TO 320ă  POKE (31360 + 320 * RND), 180ăNEXT r%ăcnt% = cnt% + 1ăFOR y% = 31 TO 98ăFOR x% = 2 TO 318ă  v% = y% * 320 + x%ă  c% = PEEK(v%)ă  'IF c% < 0 THEN GOTO 1ă  c% = c% + PEEK(v% + 1) + PEEK(v% + 320)ă  IF c% < 10 THEN GOTO 1ă  c% = c% \ 3 - 2ă  POKE (v% - 320), c%ă1ăNEXT x%ăNEXT y%ăLOOP UNTIL INKEY$ <> ""ăs = TIMER - timăCOLOR 180ăPRINT cnt% / săSLEEPăSCREEN 12ăPRINT "FAST FIRE BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "This is the fastest fire routine that I have ever seen."ăPRINT "   If you COMPILE it will be !!!10 times faster!!!!"ăPRINT "   This is not true fire it only spreads to the left"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăENDăDanny Beardsley                FAST FIRE 2 (TORCH-LIKE FLAMES)beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        127  3260     FIRE2.BAS   'FAST FIRE BY DANNY BEARDSLEYă' COMPILE ME! 10 TIMES FASTERă' COMPILE ME! 10 TIMES FASTERă' COMPILE ME! 10 TIMES FASTERă'_______/----------------\______________ă'This is the fastest fire routine that i have ever seen.ă'If you COMPILE it will be !!!10 times faster!!!!ă'This is not true fire it only spreads to the leftă'If you want more code for other amazing feats thenă'----------------------------ă'Email:       dsb@cyberdude.comă'Homepage:    www.dnai.com/~beardsă' FFFRRREEEEEEWWWAAARRREEE (just put my name in somewhere if you use it)ăDIM xo(23) AS INTEGERăRANDOMIZE TIMERăSCREEN 13ăCLSă  FOR t% = 0 TO 63ă    'ă    ' Fade from black to redă    'ă    OUT &H3C7, t%  ' Slots 0-15ă    OUT &H3C9, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    'ă    ' Fade from red to yellowă    'ă    OUT &H3C7, t% + 63' Slots 16-31ă    OUT &H3C9, 63ă    OUT &H3C9, t%ă    OUT &H3C9, 0ă    'ă    ' Fade from yellow to whiteă    'ă    OUT &H3C7, t% + 126' Slots 32-47ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, t%ă    'ă  NEXTăătim = TIMERăFOR cnt% = 1 TO 14000ăăxx% = RND * 315ăyy% = 99ăclr = RND * 180ăPOKE (yy% * 320 + xx%), clrăPOKE (yy% * 320 + xx% + 1), clrăPOKE (yy% * 320 + xx% + 2), clrăPOKE (yy% * 320 + xx% + 3), clră'LINE (0, 199)-(319, 199), 180ăăIF cnt% MOD 2 = 2 THENă  DEF SEG = (&HA000): ty% = 100ăELSEă  DEF SEG = (&HA000 + &H7D0): ty% = 99ăEND IFăăFOR i% = 0 TO 23ă  xo(i%) = INT(RND * 3 - 1)ăNEXT i%ăăăFOR y% = 0 TO ty%ăFOR x% = 0 TO 319ă  v% = 320 * y% + x%ă  c% = PEEK(v%) + PEEK(v% + 320) + PEEK(v% - xo(co% + 1))' + PEEK(v% - 320)ă  IF c% >= 4 THENă    c% = c% \ 3 - 1ă    POKE (v% - 320), c%ă    co% = (co% + 4) MOD 23ă  END IFăNEXT x%ăco% = (co% + RND * 6) MOD 23ăNEXT y%ăăIF INKEY$ <> "" THEN EXIT FORăăNEXT cnt%ăăs = TIMER - timăCOLOR 180ăPRINT cnt% / s  '* 64000ăSLEEPăăSCREEN 12ăPRINT "FAST FIRE 2 BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "This is another one of the fastest fire routines that I "ăPRINT "                    have ever seen."ăPRINT "   If you COMPILE it will be !!!10 times faster!!!!"ăPRINT "  This is true fire it only spreads by random amounts"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDă'c% = PEEK(v%) + PEEK(v% - 320) + PEEK(v% + 320) + PEEK(v% - 1) + PEEK(v% + 1)ă'+ PEEK(v% + 1)ăă''''''''Torch ideaă'TYPE trchă'  x AS INTEGERă'  clr AS INTEGERă'  tim AS INTEGERă'END TYPEă'FOR r% = 0 TO 20ă'  IF torch(r%).tim = 0 THENă'    torch(r%).x = RND * 315ă'    torch(r%).clr = 180ă'    torch(r%).tim = RND * 65 + 10ă'  END IFă'  POKE (31680 + torch(r%).x), torch(r%).clră'  POKE (31680 + torch(r%).x + 1), torch(r%).clră'  POKE (31680 + torch(r%).x + 2), torch(r%).clră'  POKE (31680 + torch(r%).x + 3), torch(r%).clră'torch(r%).tim = torch(r%).tim - 1ă'NEXT r%ă'DIM torch(70) AS trchăDanny Beardsley                FAST SNOW FALL ROUTINE         beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        110  3089     FASTSNOW.BASSCREEN 13ăCLSăDEFINT A-Ză'init the paletteăFOR I = 1 TO 60ă  OUT &H3C8, Iă  OUT &H3C9, I / 2 + 33ă  OUT &H3C9, I / 2 + 33ă  OUT &H3C9, I / 2 + 33ăNEXT IăăNUMFLK = 1000      'Number of flakesăă'Define the snow flake variable typeăTYPE snfkă  X AS INTEGERă  Y AS INTEGERă  C AS INTEGERăEND TYPEăă'-                                         -ă'Draw what you want the snow to fall on hereăCOLOR 64ăLOCATE 15, 15: PRINT "ESC to exit"ăLOCATE 16, 9: PRINT "Any key to clear screen"ă'-                                         -ăă'Dimension the snow flake arrayăDIM FLK(NUMFLK) AS snfkăă'Init the flakes pos and speedăFOR I = 1 TO NUMFLKă  FLK(I).X = RND * 320ă  FLK(I).Y = -4000ă  FLK(I).C = RND * 50 + 50ăNEXT Iăă'Move the flakes a little so they're not so bunched upăFOR REP = 1 TO 80ă  FOR I = 1 TO NUMFLKă    FLK(I).Y = FLK(I).Y + FLK(I).Că  NEXT IăNEXT REPăăTIM! = TIMERă'Do the snowăDOăCNT = CNT + 1ăRANDOMIZE TIMERăFOR I = 1 TO NUMFLKăă  MVD = 0         'Set up theă  OY = FLK(I).Y 'ă  OX = FLK(I).X 'ă  OC = FLK(I).C 'temporary   (not array is faster)ă  TC = OC         'ă  TY = OY         'ă  TX = OX         'variablesă  TYH = TY \ 100  'Set another variableăă  IF POINT(TX, TYH + 1) <> 0 AND TY > 2000 THEN 'Check if the current pixel is filledă    MVD = 2ă    IF POINT(TX - 1, TYH + 1) = 0 THEN                       'how about the down & left pixel?ă      IF POINT(TX - 1, TYH) = 0 THEN TX = TX - 1: MVD = 1    'no so move the pixel thereă    ELSEIF POINT(TX + 1, TYH + 1) = 0 THEN                   'how about the down & right pixel?ă      IF POINT(TX + 1, TYH) = 0 THEN TX = TX + 1: MVD = 1    'no so move the pixel thereă    END IFă  END IFăă  IF MVD = 2 THEN       'If the flake cant move then put it on the topă    FLK(I).X = RND * 320ă    FLK(I).Y = 100ă    FLK(I).C = RND * 50 + 50ă    GOTO 1ă  END IFăă  TY = TY + TC    'Increment the flake verticallyăă  PSET (OX, TYH), 0                 'Erase the flakeă  PSET (TX, TY \ 100), TC - 40         'Draw the flakeăă  FLK(I).X = TX                        ' Put the flakeă  FLK(I).Y = TY                        '   where itsă  FLK(I).C = TC                        'supposed to beă1ăNEXT IăA$ = INKEY$ăIF A$ = CHR$(27) THEN EXIT DOăIF A$ <> "" THEN CLSăLOOPăSCREEN 12ăPRINT CNT / (TIMER - TIM!)ăDOăLOOP UNTIL INKEY$ = ""ăPRINT "FAST SNOW ROUTINE BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 2 TIMES FASTER"ăPRINT "COMPILE ME! 2 TIMES FASTER"ăPRINT "COMPILE ME! 2 TIMES FASTER"ăPRINT "________________________________________________________"ăPRINT "This is a fast snow routine in 320X200 with 1000 flakes!"ăPRINT "    If you COMPILE it will be !!!2 times faster!!!!"ăPRINT "    I think that every variablle here is an integer"ăPRINT "  If you want more code for other amazing feats then>"ăPRINT "--------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDăDanny Beardsley                3D LANDSCAPE GENERATOR         beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        278  6612     3DORG.BAS   '|______________________________________________________|ă'| A 3D LANDSCAPE GENERATOR USING FRACTALS IN SCREEN 13 |                                           ă'|                    DANNY BEARDSLEY                   |ă'|               EMAIL: dsb@cyberdude.com               |ă'|          HOMEPAGE http://www.dnai.com/~beards        |ă'|------------------------------------------------------|ăăDECLARE SUB LOADVAR ()ăDECLARE SUB INITPAL ()ăDECLARE SUB Splitbox (X1%, Y1%, X2%, Y2%)ăDECLARE SUB Newcolor (XA%, YA%, X%, Y%, XB%, YB%)ăDECLARE SUB DRW3DLAND ()ăDECLARE SUB DRAWLAND ()ăDECLARE SUB MAKELAND ()ăDECLARE SUB setpal (Attr!, Red!, GREEN!, Blue!)ăSCREEN 13ăCONST normaL = 0ăCONST GREENVALLEY = 1ăCONST ALPS = 2ăDIM SHARED MAXX AS INTEGER, MAX.Y AS INTEGER, MAX.COLOR AS INTEGER, ROUGH!, K AS STRING, MUX   AS INTEGER, MUY AS INTEGER, MBY, MBX, BBB AS INTEGERăDIM SHARED ww AS INTEGERăDIM SHARED ColrăRANDOMIZE TIMERăMAXX = 175ăMAX.Y = 175ăMAX.COLOR = 254ăDIM SHARED Z(175 ^ 2) AS INTEGERăăăDOăăRANDOMIZE TIMERă ă  '-------------SPECIFY THE VARIABLES HERE---------------ă  Colr = 3      'THREE DIF COLOR PALETTESă  ww = 20       'WATER LEVEL 0-250ă  ROUGH! = 1.8  'ROUGHNESS OF TERRAIN 0 = SMOOTH 5 = VERY ROUGHăăMAKELANDăCLSăINITPALăCLSăDRW3DLANDăSLEEP 4ăLOOPăăăăREM $DYNAMICăSUB DRAWLANDăDEFINT A-ZăăăRANDOMIZE TIMERă'SLEEP 4ăCLSăPSET (0, 0), (RND * MAX.COLOR) + 1     'set the cornersăPSET (0, MAX.Y), (RND * MAX.COLOR) + 1     'set the cornersăPSET (MAXX, 0), (RND * MAX.COLOR) + 1     'set the cornersăPSET (MAXX, MAX.Y), (RND * MAX.COLOR) + 1     'set the cornersăă'use Set13Pixel to plant "seed" pixels here, if wantedăăSplitbox 0, 0, MAXX, MAX.YăăEND SUBăăDEFSNG A-ZăSUB DRW3DLANDăDEFINT A-ZăLOCATE 25, 7ăPRINT "(PRESS THE SPACEBAR TO EXIT)"ăN = 0ăX1 = (6) / (374 / 300) + 174ăY2 = 255ăX2 = (MAXX * 6) / (474 / 300) + 174ăY1 = 255 - 255 / (474 / 300)ăAX1 = 6ăAY1 = MAX.Y * 2ăAX2 = MAXX * 6ăAY2 = MAX.Y * 2 + 254ăFOR Y = 1 TO MAX.Y - 1ă  IF INKEY$ <> "" THEN ENDă  FOR X = 1 TO MAXX - 1ă    YO = Z(N) / ((175 - Y + 300) / 300)ă    YO2 = Z(N + MAXX) / ((175 - Y + 300) / 300)ă    N = N + 1ă    X1 = (X * 6) / ((175 - Y + 300) / 300) + (175 - Y) - 2ă    Y1 = Y * 2 + 254 - YO - 2ă    X2 = ((X + 1) * 6) / ((175 - Y + 300) / 300) + (175 - Y) + 2ă    Y2 = Y * 2 + 254 - YO2 + 2ă    LINE (X1 / 3.2, Y1 / 3.2)-(X2 / 3.2, Y2 / 3.2), Z(N), BFă  NEXT Xă  N = N + 1ăNEXT Yă ă ă ă  EXIT SUBă  FOR X = 1 TO MAXX - 1ă    YO = Z(N - MAXX)ă    YO2 = 0ă    N = N + 1ă    X1 = (X * 6) - 2ă    Y1 = 174 * 2 + 254 - YOă    X2 = ((X + 1) * 6) + 2ă    Y2 = Y * 2 + 254 - YO2ă    LINE (X1 / 4, Y1 / 4)-(X2 / 4, Y2 / 4), 0, BFă  NEXT Xă'DRWBOX 1, 253, AX1, AY1, AX2, AY2ăEND SUBăăREM $STATICăDEFSNG A-ZăSUB INITPALăSELECT CASE ColrăCASE normaLă  FOR I = 1 TO 63ă    setpal I, 0, (63 - I) / 2 + 20, 0ă  NEXT Iă  FOR I = 64 TO 85ă    setpal I, (I - 64) * 1.5, 21 - (I - 64) / 4, 1ă  NEXT Iă  FOR I = 1 TO 63ă    setpal I + 85, 32 - (I / 4), 15 - (I / 8), 3ă  NEXT Iă  FOR I = 149 TO 170ă    setpal I, 16 + (I - 149) / 1.3, 7 + (I - 149), 4 + (I - 149)ă  NEXT Iă  FOR I = 1 TO 84ă    setpal I + 170, 32 + I / 3, 28 + I / 2.5, 25 + I / 2.6ă  NEXT IăăCASE 3ă  FOR I = 1 TO 63ă    setpal I, 0, (63 - I) / 2 + 20, 0ă  NEXT Iă  FOR I = 64 TO 85ă    setpal I, (I - 64) / 1.5, 21 - (I - 64) / 1.5, 1ă  NEXT Iă  FOR I = 1 TO 63ă    setpal I + 85, 16 + (I / 4), 7 + (I / 8), 3ă  NEXT Iă  FOR I = 149 TO 170ă    setpal I, 32, 15 + (I - 149) / 1.6, 4 + (I - 149)ă  NEXT Iă  FOR I = 1 TO 84ă    setpal I + 170, 32 + I / 3, 28 + I / 2.5, 25 + I / 2.6ă  NEXT IăăCASE 4ă  FOR I = 1 TO 63ă    setpal I, 0, (63 - I) / 2 + 20, 0ă  NEXT Iă  FOR I = 64 TO 85ă    setpal I, (I - 64) * 1.5, 21 - (I - 64) / 4, 1ă  NEXT Iă  FOR I = 1 TO 150ă    setpal I + 85, 32 - (I / 10), 15 - (I / 20), 3ă  NEXT Iă  FOR I = 235 TO 255ă    setpal I, 16 + (I - 235) / 1.3, 7 + (I - 235), 4 + (I - 235)ă  NEXT IăăCASE GREENVALLEYă  FOR I = 1 TO 85ă    setpal I, 0, ((85 - I) / 1.349) / 2 + 20, 0ă  NEXT Iă  FOR I = 85 TO 170ă    setpal I, (I - 85) / 2.666, 21 - (I - 85) / 16, 1ă  NEXT Iă  FOR I = 1 TO 85ă    setpal I + 170, 32 - (I / 4), 15 - (I / 8), 3ă  NEXT IăăCASE ALPSă  FOR I = 1 TO 63ă    setpal I, 32 - (I / 4), 15 - (I / 8), 3ă  NEXT Iă  FOR I = 64 TO 149ă    setpal I, 16 + (I - 64) / 5, 7 + (I - 64) / 4, 4 + (I - 64) / 4ă  NEXT Iă  FOR I = 1 TO 105ă    setpal I + 149, 32 + I / 4, 28 + I / 4, 25 + I / 3ă  NEXT IăăEND SELECTăFOR I = 1 TO wwăsetpal I, 0, 0, 255ăNEXT IăEND SUBăăSUB LOADVARăOPEN "C:\WINDOWS\LANSCAPE.INI" FOR INPUT AS 1ăIF LOF(1) < 1 THENă  Colr = INT(RND * 3)ă  ww = INT(RND * 70)ă  ROUGH! = (RND * 3)ă  KILL "LANSCAPE.INI"ă  CLOSE 1ă  EXIT SUBăEND IFăINPUT #1, Colr, w$, ROUG$, CR, WR, RORăww = VAL(w$)ăROUGH! = VAL(ROUG$) / 10ăCLOSE 1ăEND SUBăăREM $DYNAMICăDEFINT A-ZăSUB MAKELANDăDRAWLANDă  FOR X = 1 TO MAXXă    'MOUSESTATUS MUX, MUY, BBB%ă    'IF MBX <> MUX OR MUY <> MBY THEN VIDEOMODESET VMODE: ENDă    'MBX = MUX: MUY = MBYă    IF INKEY$ <> "" THEN ENDă    FOR Y = 1 TO MAX.Yă	 R = POINT(X, Y)ă	 IF R < ww THEN R = wwă	 Z(N) = Ră	 N = N + 1ă    NEXT Yă  NEXT XăCLSăEND SUBăăSUB Newcolor (XA, YA, X, Y, XB, YB)       'puts a new color based on averageăIF POINT(X, Y) <> 0 THEN EXIT SUBăavg = ABS(XA - XB) + ABS(YA - YB)ăCOLOUR = (POINT(XA, YA) + POINT(XB, YB)) / 2 + (RND - .5) * avg * ROUGH!ă    IF COLOUR > MAX.COLOR THEN COLOUR = MAX.COLORă    IF COLOUR < 1 THEN COLOUR = 1ă    PSET (X, Y), COLOURăăEND SUBăăREM $STATICăDEFSNG A-ZăSUB setpal (Attr, Red, GREEN, Blue)ă OUT &H3C7, AttrăOUT &H3C8, AttrăOUT &H3C9, RedăOUT &H3C9, GREENăOUT &H3C9, BlueăIF INKEY$ <> "" THEN ENDăEND SUBăăREM $DYNAMICăDEFINT A-Ză'ăSUB Splitbox (X1, Y1, X2, Y2)            'this is the main subroutineăIF (X2 - X1 < 2) AND (Y2 - Y1 < 2) THEN EXIT SUBăăX = (X1 + X2) / 2ăY = (Y1 + Y2) / 2ăNewcolor X1, Y1, X1, Y, X1, Y2ăNewcolor X1, Y2, X, Y2, X2, Y2ăNewcolor X2, Y2, X2, Y, X2, Y1ăNewcolor X2, Y1, X, Y1, X1, Y1ă  'MOUSESTATUS MUX, MUY, BBBă  'IF MBX <> MUX OR MUY <> MBY THEN VIDEOMODESET VMODE: ENDă  'MBX = MUX: MUY = MBYăăIF POINT(X, Y) = 0 THENă    IF INKEY$ <> "" THEN ENDă    COLOUR = (POINT(X1, Y1) + POINT(X2, Y1) + POINT(X1, Y2) + POINT(X2, Y2)) / 4ă    IF COLOUR > MAX.COLOR THEN COLOUR = MAX.COLORă    IF COLOUR < 1 THEN COLOUR = 1ă    PSET (X, Y), COLOURăEND IFăăSplitbox X1, Y1, X, YăSplitbox X, Y1, X2, YăSplitbox X, Y, X2, Y2ăSplitbox X1, Y, X, Y2ăăEND SUBăDanny Beardsley                ANIMATED BUMP MAP              beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        179  4389     ANIBUMP.BAS DECLARE SUB init ()ă' $DYNAMICăSCREEN 13ăDIM x AS INTEGERăDIM y AS INTEGERăDIM D AS INTEGERăDIM SHARED pic(32200) AS INTEGERăDIM SHARED mp(15751) AS INTEGERăDIM vsp AS INTEGERăDIM vsp2 AS INTEGERăvsp = VARSEG(pic(0))ăvsp2 = vsp + 2000ăPRINT "hold on"ăinităFOR i% = 1 TO 127ăOUT &H3C8, i%ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, i% \ 2ăOUT &H3C8, i% + 127ăOUT &H3C9, i% \ 2ăOUT &H3C9, i% \ 2ăOUT &H3C9, 63ăNEXT i%ăăDEF SEG = (&HA000)ăFOR y = 1 TO 100ă  FOR x = 0 TO 319ă    POKE (y * 320 + x), RND * 250ă  NEXT xăNEXT yăDEF SEG = (&HA000 + &H7D0)ăFOR y = 1 TO 99ă  FOR x = 0 TO 319ă    POKE (y * 320 + x), RND * 250ă  NEXT xăNEXT yăFOR w% = 1 TO 9ăCIRCLE (160, 100), w% + 35, 250ăLINE (160 - w%, 100 - w%)-(120 + w%, 180 + w%), 250, BăNEXT w%ăătim = TIMERăFOR D = 1 TO 3ă ă  DEF SEG = (&HA000)ă ă  FOR y = 1 TO 100ă    FOR x = 0 TO 319ă     ă      s% = PEEK(y * 320 + x) + PEEK(y * 320 + x + 1) + PEEK(y * 320 + x - 1) + PEEK(y * 320 + 320 + x) + PEEK(y * 320 - 320 + x) '+ PEEK(y * 320 - 320 + x - 1) + PEEK(y * 320 - 320 + x + 1) + PEEK(y * 320 + 320 + x - 1) + PEEK(y * 320 + 320 + x + 1)ă      s% = s% \ 5ă      POKE (y * 320 + x), s%ă   ă    NEXT xă  NEXT yă ă  DEF SEG = (&HA000 + &H7D0)ăă  FOR y = 1 TO 99ă    FOR x = 0 TO 319ă    ă      s% = PEEK(y * 320 + x) + PEEK(y * 320 + x + 1) + PEEK(y * 320 + x - 1) + PEEK(y * 320 + 320 + x) + PEEK(y * 320 - 320 + x) '+ PEEK(y * 320 - 320 + x - 1) + PEEK(y * 320 - 320 + x + 1) + PEEK(y * 320 + 320 + x - 1) + PEEK(y * 320 + 320 + x + 1)ă      s% = s% \ 5ă      POKE (y * 320 + x), s%ă    ă    NEXT xă  NEXT yăNEXT DăăDEF SEG = (&HA000)ăFOR yy! = 1 TO 100ă  FOR xx! = 0 TO 319 STEP 2ă    e = (PEEK(yy! * 320 + xx! + 1) + 128) MOD 256ă    e1 = PEEK(yy! * 320 + xx!) - 1ă    pic((xx! + yy! * 320) \ 2) = e * 256 + e1 - 32767ă  NEXT xx!ăNEXT yy!ăDEF SEG = (&HA7D0)ăFOR yy! = 1 TO 99ă  FOR xx! = 0 TO 319 STEP 2ă    e = (PEEK(yy! * 320 + xx! + 1) + 128) MOD 256ă    e1 = PEEK(yy! * 320 + xx!) - 1ă    pic((xx! + (yy! + 100) * 320) \ 2) = e * 256 + e1 - 32767ă  NEXT xx!ăNEXT yy!ăCLSătim = TIMERăFOR l% = 1 TO 180 STEP 3ălpy% = l% * 1ălpx% = l% * 1ăDEF SEG = (&HA000)ăFOR y = 1 TO 100ă  ym% = y * 320ă  ly% = y - lpy%ă  FOR x = 1 TO 319ă    lx% = x - lpx%ă    yd% = ym% + xă    DEF SEG = vspă    c% = PEEK(yd%) - 125ă    ny% = PEEK(yd% + 320) - c% - ly%ă    nx% = PEEK(yd% + 1) - c% - lx%ă    IF ny% < 1 OR ny% > 249 THEN ny% = 1ă    IF nx% < 0 OR nx% > 250 THEN nx% = 0ă    nx% = 125 - ABS(125 - nx%)ă    ny% = 125 - ABS(125 - ny%)ă    DEF SEG = &HA000ă    POKE (yd%), mp(nx% * 125 + ny%)ă  NEXT xăNEXT yăDEF SEG = &HA7D0ăFOR y = 1 TO 99ă  ym% = y * 320ă  ty% = y + 100ă  ly% = ty% - lpy%ă  FOR x = 1 TO 319ă    lx% = x - lpx%ă    yd% = ym% + xă    DEF SEG = vsp2ă    c% = PEEK(yd%) - 125ă    ny% = PEEK(yd% + 320) - c% - ly%ă    nx% = PEEK(yd% + 1) - c% - lx%ă    IF ny% < 1 OR ny% > 249 THEN ny% = 1ă    IF nx% < 1 OR nx% > 250 THEN nx% = 1ă    nx% = 125 - ABS(125 - nx%)ă    ny% = 125 - ABS(125 - ny%)ă    DEF SEG = &HA7D0ă    POKE (yd%), mp(nx% * 125 + ny%)ă  NEXT xăNEXT yăIF INKEY$ <> "" THEN GOTO 12ăNEXT l%ă'GOTO 23ă12ăq = 60 / (TIMER - tim)ăDEF SEGăCLSăFOR i% = 1 TO 255ăOUT &H3C8, i%ăOUT &H3C9, 63ăOUT &H3C9, 63ăOUT &H3C9, 63ăNEXT i%ăSCREEN 12ăPRINT qăDOăLOOP UNTIL INKEY$ = ""ăPRINT "ANIMATED BUMP MAP BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "      This is a VERY! fast animated bump routine"ăPRINT "    If you COMPILE it will be !!!5 times faster!!!!"ăPRINT "      it is very delicate dont mess up the source"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDăăREM $STATICăSUB inităSCREEN 13ăFOR y% = 0 TO 125ă  LOCATE 1, 9ă  PRINT CINT(y% / 1.25); "%"ă  FOR x% = 1 TO 125ă    nx = (x% - 125) / 125ă    ny = (y% - 125) / 125ă    nz = 1 - SQR(nx ^ 2 + ny ^ 2)ă    IF nz < 0 THEN nz = 0ă    mp(x% * 125 + y%) = CINT(nz * 250)ă  NEXT x%ăNEXT y%ăEND SUBăDanny Beardsley                FAST ANIMATED BUMP MAP         beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        331  7879     ANIBUMP2.BASDECLARE SUB plasma ()ăDECLARE SUB Splitbox (X1%, Y1%, X2%, Y2%)ăDECLARE SUB Newcolor (XA%, YA%, x%, y%, XB%, YB%)ăDECLARE SUB init ()ă' $DYNAMICăSCREEN 13ăTYPE pntă  x AS INTEGERă  y AS INTEGERăEND TYPEăDIM x AS INTEGERăDIM y AS INTEGERăDIM D AS INTEGERăDIM SHARED pic(32200) AS INTEGERăDIM SHARED mp(15751) AS INTEGERăDIM SHARED SN(360) AS INTEGERăDIM vsp AS INTEGERăDIM vsp2 AS INTEGERăDIM rond(360) AS pntăăDIM u1 AS INTEGERăDIM l1 AS INTEGERăDIM r1 AS INTEGERăDIM le1 AS INTEGERăDIM u2 AS INTEGERăDIM l2 AS INTEGERăDIM wv AS INTEGERăăăvsp = VARSEG(pic(0))ăvsp2 = vsp + 2000ăPRINT "hold on" '     (NUMPAD MOVES THE LIGHT)"ăinităCLSă'PRINT "(NUMPAD KEYS MOVE THE LIGHT) press a key"ă'SLEEPăFOR i% = 1 TO 127ăOUT &H3C8, i%ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, i% \ 2ăOUT &H3C8, i% + 127ăOUT &H3C9, i% \ 2ăOUT &H3C9, i% \ 2ăOUT &H3C9, 63ăNEXT i%ăFOR i = 0 TO 360ărond(i).x = SIN(i * (3.1415929# / 180)) * 60ărond(i).y = COS(i * (3.1415929# / 180)) * 60ăNEXT iăCLSăRANDOMIZE TIMERăplasmaăGOTO skipităă'DEF SEG = (&HA000)ă'FOR y = 1 TO 100ă'  FOR x = 0 TO 319ă'    r = SQR((x - 160) ^ 2 + (100 - y) ^ 2)ă'    c = PEEK(y * 320 + x) + (SN((r * 30) MOD 360) \ (r \ 10 + 1))ă'    IF c < 0 THEN c = 0ă'    IF c > 250 THEN c = 250ă'    POKE (y * 320 + x), că'  NEXT xă'NEXT yă'DEF SEG = (&HA000 + &H7D0)ă'FOR y = 1 TO 99ă'  FOR x = 0 TO 319ă'    r = SQR((x - 160) ^ 2 + y ^ 2)ă'    c = PEEK(y * 320 + x) + (SN((r * 30) MOD 360) \ (r \ 10 + 1))ă'    IF c < 0 THEN c = 0ă'    IF c > 250 THEN c = 250ă'    POKE (y * 320 + x), că'    'POKE (y * 320 + x), SIN(r / 2) * (120 - (r \ 2)) + 128ă'  NEXT xă'NEXT yăskipit:ă'FOR w% = 1 TO 9ă'CIRCLE (160, 100), w% + 35, 195ă'LINE (160 - w%, 100 - w%)-(120 + w%, 180 + w%), 195, Bă'NEXT w%ă'tim = TIMERăăFOR D = 1 TO 1ă ă  DEF SEG = (&HA000)ă ă  FOR y = 1 TO 100ă    FOR x = 0 TO 319ă     ă      s% = PEEK(y * 320 + x) + PEEK(y * 320 + x + 1) + PEEK(y * 320 + x - 1) + PEEK(y * 320 + 320 + x) + PEEK(y * 320 - 320 + x) '+ PEEK(y * 320 - 320 + x - 1) + PEEK(y * 320 - 320 + x + 1) + PEEK(y * 320 + 320 + x - 1) + PEEK(y * 320 + 320 + x + 1)ă      s% = s% \ 5ă      POKE (y * 320 + x), s%ă   ă    NEXT xă  NEXT yă ă  DEF SEG = (&HA000 + &H7D0)ăă  FOR y = 1 TO 99ă    FOR x = 0 TO 319ă    ă      s% = PEEK(y * 320 + x) + PEEK(y * 320 + x + 1) + PEEK(y * 320 + x - 1) + PEEK(y * 320 + 320 + x) + PEEK(y * 320 - 320 + x) '+ PEEK(y * 320 - 320 + x - 1) + PEEK(y * 320 - 320 + x + 1) + PEEK(y * 320 + 320 + x - 1) + PEEK(y * 320 + 320 + x + 1)ă      s% = s% \ 5ă      POKE (y * 320 + x), s%ă    ă    NEXT xă  NEXT yăNEXT DăăFOR y = 1 TO 100ă  ym% = 320 * yă  FOR x = 0 TO 319ă    yd% = ym% + xă    DEF SEG = (&HA000)ă    e = PEEK(yd%)ă    DEF SEG = vspă    POKE (yd%), eă  NEXT xăNEXT yăDEF SEG = (&HA7D0)ăFOR y = 1 TO 99ă  ym% = 320 * yă  FOR x = 0 TO 319ă    yd% = ym% + xă    DEF SEG = (&HA7D0)ă    e = PEEK(yd%)ă    DEF SEG = vsp2ă    POKE (yd%), eă  NEXT xăNEXT yăCLSătim = TIMERăr:ălpx% = 160ălpy% = 100ăwv = 79ăDOăălpx% = rond((l% * 2) MOD 360).x + 160ălpy% = rond((l% * 2) MOD 360).y + 100ăăl% = l% + 1ăDEF SEG = (&HA000)ău1 = lpy% - wvăl1 = lpy% + wvăr1 = lpx% + wvăle1 = lpx% - wvăIF r1 > 320 THEN r1 = 320ăIF le1 < 0 THEN le1 = 0ăIF l1 > 100 THEN l1 = 100ăIF u1 < 0 THEN u1 = 0ăIF u1 > 100 THEN GOTO sktpăăFOR y = u1 TO l1ă  ym% = y * 320ă  ly% = y - lpy%ă  FOR x = le1 TO r1ă    lx% = x - lpx%ă    yd% = ym% + xă    DEF SEG = vspă    c% = PEEK(yd%) - 125ă    ny% = (PEEK(yd% + 320) - c% - ly%)ă    nx% = (PEEK(yd% + 1) - c% - lx%)ă    IF nx% < 10 OR nx% > 240 THEN nx% = 1: GOTO kă    IF nx% > 125 THEN nx% = 125 - ABS(125 - nx%)ă    IF ny% < 10 OR ny% > 240 THEN ny% = 1: GOTO kă    IF ny% > 125 THEN ny% = 125 - ABS(125 - ny%)ă    DEF SEG = &HA000ă    POKE (yd%), mp(nx% * 125 + ny%)ăk:ă  NEXT xăsky:ăNEXT yăsktp:ăDEF SEG = &HA7D0ău2 = lpy% - wv - 100ăl2 = lpy% + wv - 100ăIF l2 > 99 THEN l2 = 99ăIF u2 < 0 THEN u2 = 0ăIF l2 < 0 THEN GOTO skbtăFOR y = u2 TO l2ă  ym% = y * 320ă  ty% = y + 100ă  ly% = ty% - lpy%ă  FOR x = le1 TO r1ă    lx% = x - lpx%ă    yd% = ym% + xă    DEF SEG = vsp2ă    c% = PEEK(yd%) - 125ă    ny% = (PEEK(yd% + 320) - c% - ly%)ă    nx% = (PEEK(yd% + 1) - c% - lx%)ă    IF nx% < 10 OR nx% > 240 THEN nx% = 1: GOTO să    IF nx% > 125 THEN nx% = 125 - ABS(125 - nx%)ă    IF ny% < 10 OR ny% > 240 THEN ny% = 1: GOTO să    IF ny% > 125 THEN ny% = 125 - ABS(125 - ny%)ă    DEF SEG = &HA7D0ă    POKE (yd%), mp(nx% * 125 + ny%)ăs:ă  NEXT xăsky2:ăNEXT yăskbt:ăLINE (le1, u1)-(r1, l2 + 100), 0, BăLINE (le1 - 1, u1 - 1)-(r1 + 1, l2 + 101), 0, BăLINE (le1 - 2, u1 - 2)-(r1 + 2, l2 + 102), 0, Băa$ = INKEY$ăIF a$ = CHR$(27) THEN GOTO 12ă'IF a$ = "6" THEN lpx% = lpx% + 2ă'IF a$ = "4" THEN lpx% = lpx% - 2ă'IF a$ = "2" THEN lpy% = lpy% + 2ă'IF a$ = "8" THEN lpy% = lpy% - 2ăăLOOPă'GOTO ră12ăq = l% / (TIMER - tim)ăDEF SEGăCLSăFOR i% = 1 TO 255ăOUT &H3C8, i%ăOUT &H3C9, 63ăOUT &H3C9, 63ăOUT &H3C9, 63ăNEXT i%ăSCREEN 12ăPRINT qăDOăLOOP UNTIL INKEY$ = ""ăPRINT "FAST ANIMATED BUMP MAP BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "COMPILE ME! 5 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "      This is a VERY! fast animated bump routine"ăPRINT "    If you COMPILE it will be !!!5 times faster!!!!"ăPRINT "      it is very delicate dont mess up the source"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDăăREM $STATICăSUB inităSCREEN 13ăFOR y% = 0 TO 125ă  LOCATE 1, 9ă  PRINT CINT(y% / 1.25); "%"ă  FOR x% = 1 TO 125ă    nx = (x% - 125) / 125ă    ny = (y% - 125) / 125ă    nz = 1 - (SQR(nx ^ 2 + ny ^ 2) * 1.5)ă    IF nz < 0 THEN nz = 0ă    mp(x% * 125 + y%) = CINT(nz * 250)ă  NEXT x%ăNEXT y%ă'EXIT SUBă'FOR y% = 0 TO 100ă'  LOCATE 1, 9ă'  PRINT y%; "%"ă'  FOR x% = 0 TO 320ă'    nx = (x% - 160) + .00001ă'    ny = (y% - 100) + .00001ă'    nz = SQR(nx ^ 2 + ny ^ 2) + .000001ă'    a = ATN(nx / ny) + ((180 - nz) * .002)ă'    qx = (SIN(a) * nz) MOD 320ă'    qy = (COS(a) * nz) MOD 200ă'    IF qy < 0 THEN qy = 200 + qyă'    IF qx < 0 THEN qx = 320 + qxă'    rd(x%, y%) = qy * 320 + qxă'  NEXT x%ă'NEXT y%ă'ăEND SUBăăDEFINT A-ZăSUB Newcolor (XA, YA, x, y, XB, YB)       'puts a new color based on averageăIF POINT(x, y) <> 0 THEN EXIT SUBăavg = ABS(XA - XB) + ABS(YA - YB)ăCOLOUR = (POINT(XA, YA) + POINT(XB, YB)) / 2 + (RND - .5) * avg * 3ă    IF COLOUR > 250 THEN COLOUR = 250ă    IF COLOUR < 1 THEN COLOUR = 1ăPSET (x, y), COLOURăăEND SUBăăDEFSNG A-ZăSUB plasmaăDEF SEG = (&HA000)ăPOKE (0), RND * 250ăPOKE (320), RND * 250ăDEF SEG = (&HA000 + &H7D0)ăPOKE (100 * 320), RND * 250ăPOKE (100 * 320 + 320), RND * 250ăă'use Set13Pixel to plant "seed" pixels here, if wantedăă't# = TIMERăSplitbox 0, 0, 320, 320ăEND SUBăăDEFINT A-Ză'ăSUB Splitbox (X1, Y1, X2, Y2)            'this is the main subroutineă                                         'ăIF (X2 - X1 < 2) AND (Y2 - Y1 < 2) THEN EXIT SUBăăx = (X1 + X2) / 2ăy = (Y1 + Y2) / 2ăăNewcolor X1, Y1, X1, y, X1, Y2ăNewcolor X1, Y2, x, Y2, X2, Y2ăNewcolor X2, Y2, X2, y, X2, Y1ăNewcolor X2, Y1, x, Y1, X1, Y1ăIF POINT(x, y) = 0 THENă    COLOUR = (POINT(X1, Y1) + POINT(X2, Y1) + POINT(X1, Y2) + POINT(X2, Y2)) / 4ă    IF COLOUR > 250 THEN COLOUR = 250ă    IF COLOUR < 1 THEN COLOUR = 1ă    PSET (x, y), COLOURăEND IFăăSplitbox X1, Y1, x, yăSplitbox x, Y1, X2, yăSplitbox x, y, X2, Y2ăSplitbox X1, y, x, Y2ăăEND SUBăDanny Beardsley                FAST STARS (SPRAYING EFFECT)   beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        69   1722     SPRAY.BAS   SCREEN 13ăDEF SEG = (&HA000 + &H7D0)ă'DEFINT A-ZăDIM num AS INTEGERăDIM i AS INTEGERănum = 5000ăTYPE pntă  x AS INTEGERă  y AS INTEGERă  xs AS INTEGERă  ys AS INTEGERăEND TYPEăDIM p(5000) AS pntăFOR i = 1 TO 50ă    OUT &H3C7, i  ' Slots 0-15ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    OUT &H3C9, iă    OUT &H3C7, i + 50' Slots 0-15ă    OUT &H3C9, iă    OUT &H3C9, iă    OUT &H3C9, 50ăNEXTăFOR i = 1 TO numă  p(i).x = 16000ă  p(i).y = 9000ă  p(i).xs = RND * 120 - 60ă  p(i).ys = RND * -90 - 40ăNEXT iătim = TIMERăDOăRANDOMIZE TIMERăFOR i = 1 TO număPOKE ((p(i).y \ 100) * 320 + (p(i).x \ 100)), 0ăIF p(i).y > 9200 THENă  p(i).x = 16000ă  p(i).y = 9000ă  p(i).xs = RND * 120 - 60ă  p(i).ys = RND * -90 - 40ăEND IFăp(i).y = p(i).y + p(i).ysăp(i).x = p(i).x + p(i).xsăp(i).ys = p(i).ys + 1ăPOKE ((p(i).y \ 100) * 320 + (p(i).x \ 100)), p(i).ys \ 2 + 35ăNEXT iăw% = w% + 1ăLOOP UNTIL INKEY$ = CHR$(27)ăPRINT w% / (TIMER - tim)ăSLEEPăăDOăLOOP UNTIL INKEY$ = ""ăSLEEPăPRINT "FAST STARS BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "This is the fastest STAR routine that I have ever seen."ăPRINT "   If you COMPILE it will be !!!10 times faster!!!!"ăPRINT " This true movement (800) stars (not just incremented)"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDăDanny Beardsley                FAST STARS (COMING AT YOU)     beards@dnai.com                08-28-97 (13:59)       QB, QBasic, PDS        63   1935     STARS.BAS   ' $DYNAMICăPRINT "Start 800 stars up/down control number"ăSLEEPăSCREEN 12ăTYPE stară  x AS SINGLE'INTEGERă  y AS SINGLE'INTEGERă  z AS SINGLE'INTEGERăEND TYPEăDEFINT A-FăDIM star(1800) AS starăRANDOMIZE TIMERădiv = 1000ătim = TIMERăstrz = 800ăDOăFOR f% = 1 TO 3ăFOR i% = 0 TO strză ă  'wh% = ((star(i%).z - div) \ 20)ă  'LINE (star(i%).x, star(i%).y)-STEP(wh%, wh%), 0, BFă  PSET (star(i%).x, star(i%).y), 0ă  IF star(i%).x > 640 OR star(i%).x < 1 OR star(i%).y > 480 OR star(i%).y < 1 THENă    RANDOMIZE TIMERă    star(i%).x = RND * 640ă    star(i%).y = RND * 480ă    star(i%).z = divă  END IFă  star(i%).z = star(i%).z + 1ă  star(i%).x = (((star(i%).x) - 320) * (star(i%).z / div)) + 320ă  star(i%).y = (((star(i%).y) - 240) * (star(i%).z / div)) + 240ă  'wh% = ((star(i%).z - div) \ 20)ă  'LINE (star(i%).x, star(i%).y)-STEP(wh%, wh%), , BFă  PSET (star(i%).x, star(i%).y)ăNEXT i%ănum = num + 1ăIF MID$(INKEY$, 2, 1) = "H" THEN strz = (strz + 50) MOD 1800ăNEXT f%ăIF MID$(INKEY$, 2, 1) = "P" THEN strz = (strz - 50): CLS : IF strz < 1 THEN strz = 1ăLOCATE 1, 1ăPRINT strzăLOOP WHILE INKEY$ <> CHR$(27)ăLOCATE 1, 1ăPRINT num / (TIMER - tim)ăDOăLOOP UNTIL INKEY$ = ""ăSLEEPăPRINT "FAST STARS BY DANNY BEARDSLEY (made in QB4.5)"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "COMPILE ME! 10 TIMES FASTER"ăPRINT "_______________________________________________________"ăPRINT "This is the fastest STAR routine that I have ever seen."ăPRINT "   If you COMPILE it will be !!!10 times faster!!!!"ăPRINT " This true movement (800) stars (not just incremented)"ăPRINT "  If you want more code for other amazing feats then"ăPRINT "-------------------------------------------------------"ăPRINT "Email:       dsb@cyberdude.com"ăPRINT "Homepage:    www.dnai.com/~beards"ăPRINT "FREEWARE (just put my name in somewhere if you use it {:-)"ăSLEEPăăENDăDavey W. Taylor                FLAGDRAW (FLAG EDITOR/VIEWER)  audio.squad@mailbox.swipnet.se 09-02-97 (15:36)       QB, QBasic, PDS        198  13169    FLAGDRAW.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FLAGDRAW.ZIP",4^6:Z&=9619:?STRING$(50,177);ăU"%up()%9%%%R-%eP%3Hng87aj67%%+h%%%-%%%%kq%flSgRfx&*$dAGB,Awt)3h_ăU"1J#(7UOr'rVRN.S_UA'2MO<jkn^K#LiubOo9VE6L6?b-DTY^DM/8QBwB4,%n2?)ăU"7'8FLi&4MYd036X<xpNTKdNy<uQcDU%N]Bl>xQMHHr^+Xc:0VPNdC.uYrnZLjc;ăU"r\=^ql'Q=kPtGKWR=/7:u;*#Df2U_8]:X+)BP:c7BI5dL&*)G;92C:=#ek:/;E.ăU"x02Ll*g/kgIMc11:^4SR5^\4XF4UM6u6'OKE&/_9B+?L)%e^2GohPT)KY0Fx3Z5ăU"R-HckGoV8P6lXpB$ww'uF&K1w\?l'F/S3SIX)</+9q%'dAlW<jW>vXL6n4QgQ)2ăU"5?>pJ6Yd6G8wlQ)9gch7[wG&%B(<Di4U2;bHZ=F_w4mFBY<tVZ)VgBEIVJbHNUIăU"kC)/Gg3heEo51+Pj*#7QM9N7Yv2hI;qOb?WPL'H71YG.<\,\cJB*]6hP5Q_F]S/ăU",-F1V\Lqsk*_Q&Y;:b2GEdeebO^-pH6'Y^+#V&/]JnqiPEAq,S25B=i=f_=gbCtăU"6U6PBD(l-=vlEa?1;p(N%)h4ExW04%D$2dqQ.9FuQ-4(B'mf%(05q_7T/QmO'JZăU"GB/ZitmS&P)VM#+n.DZR]YAoD>iHHOr)ax=/bHnAYI[+]]D_SdNanM%=s;6UBhrăU"8Og4mVn\L[;XIT32uZqxAL2E%u%gO]hG[Zlmgh^+pYR=K7xVrD\75Rv76Z<lP=CăU"02*4G7.sp_c%\IZWR\f'08MrCsTWwPXq*W<8hq#]R[G_qBQ+VuhpsioK#o93-CBăU"GX/XS,FMuh\R,Z<kj9Y(IPC3>.GViUO%D?#BGtaU<(1Q9H5Q,K3n-$V/51rpvs&ăU"Dp?VUB3(2pj-o8xP]<u>&PW\oR/k?2G,Q\Rtuq,\2*=AM;wY\qXvKuQM=j$FKsAăU"CHSFm(elgc5vbe^Z2X;aKH2NJ2:R<>bu$/2DK]?F?3<op<4^Hsrkh(N6l.Ib?jQăU"gc4&[Z/Bs-2JHV:5;DrHGs$5xZh.S#F\JJktq,<9^Ys(_2n3G?OiVS5fI(DBe3?ăU"SUkr7TeJ2Ixl*-&=_\2sj01^Q9='Q.;E'/'Z;3iU=pRx_:r/.(#8)QV+qh)PntvăU"tDI(*5-YL0MlM_i6:6ip5L)\95??mh]#^nk/ap<jHe=,JenCDs8f:hzNdC1oXDMăU"G/Q\-k^Ge^U#%r21H$$YtR<'/'p1]_u<nE\R%7hdev^#Ywr6>7.&9spPq$V=YN-ăU"qYToGB_L6T__wv(VrTZx9l*?LAt+1J_yx/IARiRvi2=;EYhb[OHw'^U=[[Ez.mpăU",G;dcMz;7cZApoza*b[O1tR<W&]P0Kl;.qv&iOSm,+_&spa^P#[q4kw3GNrif\&ăU"IXnFJ7U=edY9<AE-r0S<ZS\&Fg%GWAg]Y)E%H9s1OA3T^LK4VNo.UqOyus.?D,qăU"eGiH2)<vE40n\pAw#Ns>z*N9-Y.e184P;0#J<2>5/mU1Li^1\06<AmEvR]r;8BUăU"GU)o:/&IKA),Cnh,/?Ph$06Oy,xD/%fs0a^+z]Wisw<4EMp/R3#$BJ3V:R;/Ft2ăU"o:b>b7_SxRpO?REc;X9u=Hg(.Y.3=A?d%5l5V[tEn*VG&W>$k.I.%LtaJ=d9QuPăU"QLf'rhbD8#2S<QfFmi_D&=^6=);h15otS]wYep1wbXRxA),)s<+3tTQ-#=?QFz0ăU"KL#ZRxvK4<SSR5+R4qDk>O[6,=q()+h%9P<vH<ZViFb$q#[r[2/(sbOeEjIKsEAăU"cng-/6+xx>Vdd[Fq0uM(6pVj$x>SUFKj+w(ihFOK=j>/kw%X+L&er.)FNHJfwWZăU"esAX1/_HTEVN3XDFMAPq?HFJK7j^'>tFLfwc&DdTIHcZ:0HliPEkoV6)w2\<7FoăU"#u2n-YJ60/)1.*;2*aYt36\TmdKbZZUfR?HZ-ASy*_%NTNMIfW4_Hj_TCrTM%JxăU";U1NAZg'2PyW%G[Rt69?a_.AYTic7/RPA_lqij^W5K=OeSLZBFF%#PG\xpiQSMQăU"ZaHxYfe,A-F$=e#=fzwS2%B,p')1NU#cA5$[FBf>UxDm(8=(.D8de)&tE2_BVqmăU"P[qsELMT+8v?DMAEDbbnu&,moK2Mgl?WT4[p8l[-p',x?wOEL0EKSJbb1nu,mdoăU"Kl?&rUGSS1c6WoRWsf9Y3jO[S1f%/15z=]=O+*iSSg(OsOJIMrEL*Q8vGbA&h*aăU"fu)DRAXJbMA.ihr9gE'M3hCVJK%$VzuS#DD64s4^BedF$<sPDb7f=XO(6,6,^3)ăU"UCYmrILb)XtV^o(g=8IEc?EV,?,'C%;3.pl]MAGC4UHmdf2+/c?n:ly?zalb(N2ăU"130V:ZuD&4:$?ZO9LH,I9xd7f9N&<A1LOEKC:7-b.\?Z%Q:GfR#giw5ghRmBKk5ăU"$V?khRjmI%LQnTOGPJaCV^FUCKTcVKD^KY0nEIMBwj8:2%^OlKrTX+f0E+v\1%=ăU"YmIp>]j:Bo+BH&k7D?eE[gJ_2*#]oB+^\oG+,r2FJRnqbY#FC+FjRnspI\V$?$HăU"rTy$A6:;0]g4O>TuEr9&L*BO\)vCoLi#VUIAr9d2W;r,tI_[rD-_OmI5im7y<OwăU"h*D7=,77+%J]s;BRU&cR6hU9?b#2s1#xN/DOgG;d%Ph;$N/G\=>ku<R=tTY=Lh-ăU"0_#/>Pn1rC+IGEMbl]vdPn%X+3Iq&1mBO/ScBw_<6MDe,aebs5I%_8o/(=->?[wăU"EW,T6DQP*?+J_1CyS$53$pUIq-+s/+:D#;ys]-6\j)i'iC^\B;S=u7-r-Lwt6uhăU"Wi/e%X\2l_*.I8:'#UHHYL7MwDjTo0Z(<YM$D8S8UeneeiD2jqLj%hrjk4\*F:OăU".Ek?dGv',#\QYbuG6Bph-JUSERB[mXZ7N+5fR]rtF:3bxfCj0)omJ]N1cQ4X(k?ăU"C1K%<:cbGJKQL:h9K2d3,BH9cEvE3lR$To:Mt5Qk%uJu/q&lY'k-6637g&r0-WuăU"p0GLoiXUN2#8#4M>LkEL/CrH.'RHn_^kH<;j:on0ZCv?%&6q]K#kQ63RGlK.=2BăU"oVPo\A\,dneEx#ZHYaQovtYtMdT/tYP_Bg]Sbk2ULA+=V5>ae\r>xjuhgBpC3Q8ăU"/Nr-DVgc#<l4=AZ80+ZNY<20(d;dPl9&f1^o\Q.,x5Yjt/.qU6two-mq6/.L')RăU"]H9eh5&>:$?E>U>=27,:BJN6Xn_CJA5C(K4g,LY7?rV-;RKU#pd9.BEcj/)M'N2ăU"3:^nTxVcX+qHgULU;7nXK2Wxp;gj;Y\2aVnBC:2XB8:=dTXZ&dHhY2aIiM8]uJNăU"E#p6GA+15Jq=2And[K#/;Wl>lxrlHsrDwVS#bxLr*+v,NW7--t,XUW\LQiAb.-JăU"U16sZe\uJ93(tu09kmj)0>zFRbR9O:dW'[g':'OC=G_JIyY-TVa>y?\NE.\xx(%ăU"q:Zr2jZ](C6u6HWb3U$vay'('._t&v&j*^UD(06]:5O#.rXe4N0TouN8/w#Sx9?ăU"kkv:x?h7r0C9Mi,PJ&V0=#ic4hV_vWZ6Idc>E;Q&-gbq5N7EVlY&qSIF=-vYpx;ăU"2IUOOI06&).m,QOh>^)TYG7Kq)D&[WSEiZSmh-R7,tkU<CHDA%uy-v&q3&XWd57ăU"^=aHG^=o9m*jNhE5KCm&ey:?:7Ms>U/NT/,X_2vsnjj'J#1_G+%Vk&&cOY+L5XyăU"Apv7i;D87b;>Q1:oU1iTsn6jL:'ga>[Ci^z*SQ+dF:i[;2&2KA1utf:PLT<oS#;ăU"_&=:drK4rNNH$&ant:>'JpwZ'0bJsNP0mW6cD/3su3Lfi<w;%wSC51'b*yL>f4găU"S5+w[QO%a=,tay>Df4mVDt'M/M4W#+#^EEx(oDav-pi]MO.iA[IEM)rE[jyKdK8ăU"kOPk:88KfTd9H1mOpeqD_ljAMq=J.Nd3Wv;6mgPM)3,dq+dP&uyM/\DB8B:H0#RăU"_(n#N^Y438,s4U8NNDuhK^Vk#0[OenJ3%1pE8be+,DnW,nG*b&a0#_dlo((p;gkăU"m&yg,5?j[Y](VtOaY4UGdi%u?n_G;X\^HY50e+R#uQB<U1#97Qs_a^VC0)</L1=ăU"KLyn#da76A1.tS^Pohg[ERmR%o:BGg$$uC0U,i[0?Y(/>e5Ha^L61hm2gLSKsP#ăU"[%=1tYlgD8ubo_'L'gSSFC*hV4-OKs7J(SO\j)xq;ug1LVScV*Od&w\C9mkeBeEăU"bTC3cNZVQ%?&k'bw\q-hq*t^8*:ddbW8Z2:xgfYL:TD6sH)'l8-Ut8t9IA8(te-ăU"mAG7AI;qhp,i+8OKa\$_^H%6T(hqfrHf&T%/5oy/A<eEOSFR>=J%qMg)e\%I:wZăU":>4t;l6&JFKmu3S(HfO5?i+sq6gpx9[GbH660\CC<6>TnPIwA*/dW[5\=i+''f3ăU"/Oo*$<9:rD,Qo?nW%hH>K1j2x6<*Y&IppRjd:D2csF4Qf8CU4v[9v/Hk)[BT'ZnăU"kJ$6c,5Y3cXmhe2Bbapfs.N(]u]j'?$R,QQL)\z&B-G.N5vgm);ZuvEgUx2>8(TăU"/J/UFZr/AE6:F;t80>Y:G(^WNwN-XDwY;?nthr_zN[UqJ#<+-fAUYHVp/n5R9,aăU")OI9Cwo<?VLdfIGe+]$(.?JrAV0,KSYgV$?Z:U?/2g*R$'%.v8B&a%ZU5\y0[(;ăU"i.y6v5IqkfxTc-]QH#)U,T*7oe>Bbo2gJT1kn\.)WnhXZOdg-TiSzHUYkX_u^PPăU"B+lu2'_%LUvMp..Q:W8pc4x)g,h:-^DssdxW38on$</1o$L:+i+4:gRjhcWQQKGăU"10^./ir+_Yh\8[RMQW82$U:7?2f..tspK;^+H)u?h3]rNJ^&AgiDkFEg<[OA6;#ăU"OF4Hl?OT-2VRN*U8C=6gNv[7w,*jK)87'>vgSG[*\ZQ<E]Q\hVaiC3#_v,t?VU+ăU"[PqagV^/M_[KUKlAi+)Tj]#'4Wwv(a(XW98BF<Wr\'?JLF:/1FJ%,<ulgksn7T[ăU"T8'[\wTf^lkfx<7bt(;/$kNS]mD%iqqPPK15bP'^q+OL)1.T.m.XSj]9#P<xl\MăU"6DjMGk&;cDjYLC04Y/P;Z3Fc8*j9X&p94cZO2>I[%+)7j>Is5CQ-/]p8Y_8&xPBăU"3>K=?M6h514>>(CaX*5#VW]ovumfI0GI:HdLJA\dTFZZm4*+M[?E82[ZK.*+pI.ăU"DTj1n['Gt&\,:(yD$bpIqWj&[\Yd>1UfC\wKf&d#rsgR^%Mfpfy>lW0G-]h1YYqăU"e4\Ea64Hi#?\,tB8:zA:IX8a/rp5y>1*vGXx)aCt$jO<jz&/&bos$X5D9<CP$D&ăU"6q+,_D/zXS%ApGr*F*=t:J-S,4Qdcg;^(1Rb(c1.Xn['wVg03ssDhkC2-;#RQC,ăU">,Rd2E3wC9\.[IcQsGmV#5#q-cS0tO?.ddBSQVMK]k];YLbbk4QNK0wi=zBx(ogăU"tD(hRn8*/-cHO*>:<%Wte#By&e2)UR'.HmVaq\+mj2DwgXEcGpp97S1LNv(5;5/ăU"+)(SjkP#Am(wdk'YwJ,eSdiQXUssFRwR4NUWh0_4yopl%jOASY>u1gk&&QXTEgaăU"qm2p6mR*4\vLB$5t6Bx]m3C?\,]lf_mqS/Isj#l%Xr$l.rGGP5O[y\Pw#Cz<:&ZăU"]arxS+=AQI#iHA7'L%6C8>yWn^Nqk21#^)kRH7INn6L^es/(&r6m4VonW>GpWOqăU"lMIR4nn7&+OG*nE,r/d\4-JM(5n0i<%Ns:^:,=6\1bB/*KReg'fEu$DLhVeU05:ăU"?MqMxEP3]:1v:C?0l.14\*hL\]K5>)=j/mAj210+=OB7Ca$t,vh17?3TY$]_OhrăU"7D__^7hrF5Se,?D2q-4hi]o<PgZkX)Ju_X?uk.v[$MG_&JYYwZ=(-ix&u%p()9%ăU"%%%-.%oP3:HB-G+k[0%+%>S%%%-%%%%jin%ySgfaxf?fb=[mkSNIWpB[r;g%F^căU"Ka.<s_\]&LqeeV(iM;5sb#s3YX^42Xwgm?-dk-YMUjxUjeZ8dc=*T<(.M3E&)_8ăU"$7eucccs?cccOtYxth?sHJ6]x,l8a%uwQaPw#OVM-6Q[k<Ss]fpu4&iV=wTAKe]ăU"4lEOqfYKQ'\HtG1O+<[;HP<.Kha#6rZ)iU*EHk(L11LYDo1UjEp,gS_]&4xPp(4ăU"eG1<e<+GedM/g^[P\+4fvgHbCKu(t/sA3=PH)A]^L/.rFAh.I0u8/P$T%8&A48VăU"Q3ag7<T8tcbuLJ'>TlyF29zPgg:kI1BdRvSq1Z)acu*ulioeqT1Q7L42>B*ehEBăU"L3+x/RK'Ks38U8Dblo8U_E]>]If\S^vU,:Z_rYg+r$uVvSi:]<<(uDh#HatTK1qăU"cKf7r6A;MreI?T6>NUN$$#/%lqn3fZk3CF/g-?*d$.H&AtaD.ri<6\*6oeXnv%eăU"0JO;o%mN_&[qQIe>IJjK<lCNsB8by0cmb(qSCjLV#w^*.,KK$MO*Ua/feB5?;?YăU"Y2OoW0=r=EFBm/_');mMYsV+nKFrkCA=p/%aU:6J*'SC<UZ3k?Va.U=,j%B3,h'ăU"1A=(M?+s+HQ4?9f3&Y_h'P4SrOr^UKgPcO'o6kb(oq0pEXIIVp:W=0o8U#uMj)YăU"Mddup_eVyl>&XZL3sXH6b]r>G1##pZo:0nOP]9C?FmWudJH^NpD5g>u_mbMejbdăU"ZAc>DQox9m..$2hipBIu;qgji&-Q<\k\pL:._L8KNe.X6GZS(3+u:FRR%6-0),-ăU"AY7urInf+qsJc^)#ql5u_zn2s5)Q24apsUc#1zzV;)r)lRz8//K0t#=J)3Utu))ăU"Pbe^7:*a-SB/'(:&o.keVHQIBRa%g+9W-Y7Ff%z/zLJ%EPIa9MHo.g'\M_7SsTkăU"e$->TIwTVUP^U*5=afJ\ScjaQ4_3d'6FB>YUG7S3Upo3TXltzL8MqrgdT[HWgOcăU"GYsoN]:&lomnTtqx;osbd_y.3CA79+%eC*nJcjR\l>F'==b29V=PeRSt8AQ7v<OăU"rm]:/=ArdMH];GrDKs/z988Lonr/k/RSK0ZM#y;y<;#P5jyjWiM[GrP)PaOf,)PăU"'s.(-K\=Fu(X2f#t^RI0YkTm?*X&wyWosc,9srx0m#;osGR:z0Z()#2NJ=jr4mPăU"mufWh6_'1435$HBV_D3H:[25__V0?p0T=D;02FVZ2m(u-Mw=.n,o(J2#99-0i36ăU":ax_g/L>ScO]%GdfV>?m8W66c,wZ,r$]4qHcrfG6x)[CY:n?jtbL,_TTOLg;/(SăU"6Sa7tiN'Qu.)L1#$C1o#n&?RuO'Ys35YZkI&fn7L<fAy4UTY=k#K%-[p,ERX3^5ăU"x'.4W5J4'Cd9>=:x8kmE?A-U<F\e9=D-N?=M<^Hj%VC9gqHAX,=l0lYQ$=XZ>u7ăU"OSZ[p3qK/j&Y0ON^8/?l:d4E/YMMHi/PlhIiTcYoemw4\0[e2aIG3U:7L.P'dB,ăU"?/Mu^[0/X#u'&LCgcG9V(Y:ypLuC#4n>bH[Q/U$V;d9.0mH(=+vqW^n;fJ]R6y#ăU"US+n:1c+bPQh9x4o7zJAuo&XQa;LsaF^0j7:utHmz+c'6;5=eN:[I]tX22YpqKIăU"mcoi0-.$BDYPQdp5&wNlp1yCv\7aMj(G$b.HB?ZOC1]^Sl]aXmu*UM+N0S+XDKEăU"1xgB#Oo+ZVQ_Gi/m'o[]<N>h$W\R8RbC3UoKAVObpsdYDKL.=a[rT;j6MxNtLMEăU"b2=e\*vwFI0\[zuK-HZ'SK0iw+JGICeB[X1IjM2&)tT>)N=B1<o&xAlJcq6QVHjăU"FC*:E]za=5oK0>MLNaDBhi&IBs'LR&GA,k.f*:c+u++PNsMlZ=QEDgxRf(G*9/&ăU"q4QHird(IDCrYs$?M*.(\4_ud8A,0mZ(7h=Z3f/:Y00I>A?'iZ7d:\S<^,.2n8păU"\[Iah^b7szbQtW8DfD8dl[^H6I^deH2>[Eeuf=i*5%K,P'42fr_VSFYN]#(K<,xăU"k]nb0$'ZmZA,v5[iGO^jL4.$sha*mJ;^RCueeR765jC#)$S2a4XR$JO.\HOMe3jăU".n]nlRmgG:V6V4_^5Xu%m^s[%'Wg^HIKLfaMH<cUp\UP%r?Gh]iVmhiM)m?E';KăU"QJ3;;.QqBSHGP15FAaiCqAj5'29qx#^$CT&Xkb+$h8M.70;iN)hmIh-&RG1A8MuăU"9+92/w4?-d:#PhRj+:P&8wg^Ifn032w&?IA]?n32VX[9MaR7\'MaW]b(9+b&$uCăU"\7Bn-E&eq:E[L$EtZ8I;*IMsk>oKgw=KvHyp3ROqB]5u2D:Lk:n<uN&;SAg$,=AăU".)nuOnTZHT-uRPqp<)QA^5NImZkl]7u*d]+xVwB1Vfd=zm1sgjjCmi1R]+Z1TbWăU"sPbjiq8dB.=%Y>%sNFFPY-07fCxKU0Qe+-Pj]M^/(mU*:oP(l?Bn'M\6h5RwH&:ăU"WM>mcB,YLwMu_2xD)J*(li.rOGz2tuoR>d05eIG5M=0ppcgkH&-YMb=7L5UrmlCăU".p8$PSYS'G,j2P3NWFp:kSwKte8)FdMS9jp$U1EV2L)t-=hNAi3pV^[DQNK0h9TăU"3sfTlUg,eo9g6KCh1.C'[eif1<pZYI=BcGZ0#,2-U)jtjdAWYIbaa1s:&fCFs)MăU"of,acQFBc<Xuqp<1Tg:hM])gpa$2agb9r1\>X85grpXL_CL6.*PzYZRc_G/eDGpăU"R,1HCiuTXFkYE?HDlb/wEGs',h1bO7k+JD42(]uSOWHJ3c;ZNF38VMe..lo*-tdăU"Q*]c-p'kr9,=E_)f*pZ;Oi*Eys)^damM\6>'-])/1VpfZ4fSDtdzh#-[n2kdJQqăU":bee)p;;kH7=bF+T-.^T)q6%srHO06]k%X:R>jw>$VSfdO1'Q?k9VSYf?+4K*LyăU"1Mhq'BMt=4ZX?:SilQ0d=leqUE2qJ)UVxe\Q*Mcz6I\zrUY94DZ#vq8#b#twF:;ăU"&iKsFJG)+6UHkQKG8^(_tJ<[RtJbKxaPbimkm9>X/9n&)o.s(V^i&2q?dJE.u&dăU"=TEi;cMSKMnUgM0uM:k+-&%PVEx;>[?noaA6_Lx4JrB*(Cq%,bTULVB'3#e#JMkăU"V4hj3N#_wRRJ.<A[w/:VNSe]g^uOZ_Q6=.Rgy7pcA^,Qkj&qyFj;;i%Sjus3+D)ăU"tEM;>p]GK23)jE]p[FLTUqM^V)(d8J:B<lGn&N$H^MAFhs.yd&sblDiu%-^;qv2ăU"[a#:9ZbQk1PTOI12;S*C4d#pr>+]^n#JQVtI^qxl%HT4Eu,cRGV#SK?&o'BV3s3ăU"Y19l^/$iFUj=pAXw3)tou9fGnSs=d(M]d]Fr$Ld*uKT,LAAjPg0+2P2o27s,O;/ăU"DWV1?g4oG>#=68h+v1EC%trI3,YAg7bd+a]0T5q*_$&cH=T3'h[W,PH5o^[^iFrăU"bEDgV<]F/Rs$.sCS^gp7cLMIhl\e#ma/=<_KpRa0Hx6rSI\F&5$^W<83h?[*Pn6ăU"-<2*dbs1%fwA2;I$=6\E_Z]Z;2I-8;6\$]JZBAS(3(g4qx&0ZThIH.Y,M_a7uH?ăU"[-loknl'7H(XsWdq\-Pl%F2]smrn]%dDB8t-OKfX_g[XmHFnDwbEshe_D:Ut.;BăU"bX*u6e+?VuY]$/VleIqY.I]/bke*#Jdi_\gqS^5*];w7,V^kru?ZHtE[hM:s+\făU"]_0tS*QReVYL^T>XyqDocXYkNkI[E-uvvc^qfwXg:3d2guv2xwjEfKrXC,'9jNvăU"ql*2\]2nlVtZt#Y;Q,Dg.PPsDha],zl)VWA*]Fc(*0XRHnbDnBz*IVxG8DGUy+RăU"cr3/6bM9'o'pY0+.-FHT8n9>)3?R&>nAYkd'cd:7L.qq^'nJInu)&_hM3e(,\wDăU"u%p()9%%%%-1%'%)4H.]+%V=%%+%f%%%%/%%.%x&j%ijsS#rfu29]7\VA1''5)5ăU"5KM:ERBq.-u=*(:g%u%p()9%%%%-1%?g)+H/ns*.P%%(%<)%%%1%%%%gwn%yyfnăU"%sSrfLutc,(7OE-5SBhagh,rl,.'D:s\#NR9[juCJ/f?(;^<0=\ajXmd.SM\Qo*ăU"VxBqk)J,%#.5.1,->-':UKH>'-C12?x0nY#ZU^A:M<7<tqr#>3^4s=\ao>/1u\^ăU"7*8qhtGx**Krn(.F2jYQAKa/GYr'qlErAp2MTu**anup%()9%%%%-%(0d*H/lFNăU"A'G%%%%*)%%%.%%%%rxit%xSrf1ulbv+7;U-Oi.lc,+:Tb]xR2)Z9?]vEKhyHT9ăU"'J6MJN-lIq;j,_^.82ZCw>+_kdyU?2/_=>L?$1HQ\/o*S[6EO/T0^Ze+^7uj%S6ăU"e7KB$h-d5e-LUvXteK_&S8zSgn9U'S0<mxata0Tq7#a/6lU65tt^9GJW2k<;g-LăU":/*HtTVMvB^:A[TpP7Fs,amx9$WN9VBci;0IEL<+*6b;cwKdu\,h4%&0M0mCh<[ăU"_te&2FnzXBH*nmI$a<l>E/KM;TNWr>IX7u%p()9%%%%-1%V:)sH'=;%_=%%+%e%ăU"%%%0%%%%ijs%rfwp%Srfub2]7\(V1%'%[[[+dMEeBIk-_84S&g%%up()%9%%%I-ăU"%s:d)HET,JH=%7%%e%%%%0%%%%kn%sqfs%iSrf:u2]70\V1(%'KKK#[MEeBBi-_ăU"S8S&g%%up(%)9%%[%-%J\:)HL8A%o5[%%%e%%%%/%%%%k%wfsh%jSrf:u2]7K\VăU"1q1K/rK)/oK%%%up(%)9%%%%-%M&;)H]1Y\4F[%%%e%%%%0%%%%n%hjqf%siSrdăU"fu2]F7\V1M1112M//2Q%%Qq[%E%WFI9[Os2Oo0('?)%u%p()9%%%%-.%_;).H+MăU"y&P5%%+%e%%%%0%%%%nwj%qfsi%Srfub2]7\1V1sKD/rK/&uK%%%up()%9%%%#-ăU"%z;I)HIl+KsF%7%%e%%%%/%%%%stCw&f(%Srfub2]7\LV1//M/211)2O%Q%q[E%ăU"%WF9[MOsOo80(?)%%up(%)9%%#%-%4A;)Hg&Zc)6[%%%e%%%%.%%%%x%ufns%SrăU"fub2]7\LV1//&/+&+7U=/q%%up(%)9%%#%-%XA;)Hm3$h+E[%%%e%%%%,%%%%z%ăU"xfSrdfu2]F7\V1&Q%[+%[+K[R5(;32Q?7EO/,\Pm23b9%)%up%()9%%%%-%*Ph)ăU"H^qFHN%g%%%'P%%%%1%%%%rnsn%kqfl%SrfuV23N5L8011)51g50EEOK\UE]9eOăU"2WQ/OI[%p.O>R6QQ_9N9S_3Xv-*#gEx0\,Oc&nP0PP3FEU?g1+SDA&;%up%&'9%ăU"%9%%%R-%eP%3Hng87aj67%%+h%%%-%%%%%%%%%&%%E%%%%%%%%%kqfl%Sgfx%upăU"&'%9%9%%%%-%(oP3H,B-Gk'[0%%'>S%%%-%%%%%%%%%&%E%%%%<7%%%ji%nySg%ăU"fxup%&'9%%9%%%I-%'%R)H.]%+V=%7%%f%%%%/%%%%%%%%%&%%E%%%%DC%%(x&jăU"i%jsSr%fuup%&'9%%9%%%I-%?g7)H/n4s.P%.%%<)%%%1%%%%%%%%%%%%E%%%&.ăU"C%%%gwny%yfns%Srfu%up&'%9%9%%%%-%(0d*H/lFNA'G%%%%*)%%%.%%%%%%%%ăU"%%%E%%%%/D%%%rx%itxS%rfuu%p&'9%%9%%#%-%V\:)H'-=;_=[%%%e%%%%0%%%ăU"%%%%%%&%%E%%+%xD%%%ijs%rfwp%Srfu%up&'%9%9%%%%-%)s:)HkETJH%=%%%'ăU"e%%%%0%%%%%%%%%&%E%%%%eE%%%kn%sqfs%iSrf%uup&%'9%9%%%%-4%J:)4HLAăU"%'o5%%+%e%%%%/%%%%%%%%%&%E#%%%P%E%%k%wfsh%jSrf%uup&%'9%9%%%%-.%ăU"M;)#H]Y\&4F%%+%e%%%%0%%%%%%%%%&%E[%%%2%E%%n%hjqf%siSr%fuup%&'9%ăU"%9%%%#-%_;#)H+M(yP5%7%%e%%%%0%%%%%%%%%&%%E%%%%(F%%%nwjq%fsiS%rfăU"uu%p&'9%%9%%%%-%zA;)HI8lKsF[%%%e%%%%/%%%%%%%%%&%%E%%%%aF%%%stw/ăU"&f(S%rfuu%p&'9%%9%%#%-%4A;)Hg&Zc)6[%%%e%%%%.%%%%%%%%%&%%E%%(%TFăU"%%%xuf%nsSr%fuup%&'9%%9%%%I-%X;d)Hm$)h+E%7%%e%%%%,%%%%%%%%%&%%EăU"%%%'6F%%%zxfS%rfuu%p&'9%%9%%[%-%P&h)Hq8FHNg[%%%P%%%%1%%%%%%%%%&ăU"%%E%%%%'G%%%rns%nkqf%lSrf%uup*%+%%%%%3%3%%4(%(%=G%%%%%ăEND SUBăCLOSE:IF S=97AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSami Kyostila                  3D FILLED POLYGON              hiteck@mail.freenet.hut.fi     09-05-97 (19:51)       QB, QBasic, PDS        913  25505    3DPOLY.BAS  '----------------------------------------------------------------------------ă'           3D Filled Polygon by Sami Ky”stil„ 1997 - [v1.1]ă'----------------------------------------------------------------------------ă'ă' Here it is! My first real polygon engine! The sorting and cullingă' algorithms aren't the fastest/best ones around, since I had to makeă' up my own routines, because every other 3D-program I've seen had onlyă' 3 or 4 point polygons (This program can have polygons with virtuallyă' unlimited amount of points). This program doesn't apply any officială' shading methods, only my own shading models (looks kewl, though ;),ă' but most importantly, it runs fast. It uses a virtual buffer to hold theă' VGA screen for flicker-free animation, but that takes up lots of memory,ă' so if you run out of memory, then adjust the MaxPoints(per polygon)/ă' MaxPolygons values below.ă'ă' Features:ă'    - Polygons can consist of any number of pointsă'    - Full 3-axis rotationă'    - Filled and shaded polygonsă'    - 5 different shading modes:ă'      + Wireframeă'      + Flată'      + Shaded 1ă'      + Shaded 2ă'      + Transparentă'    - Backface culling and polygon Z-sortingă'    - Double/Single sided polygonsă'    - Disable/Enable culling during runtimeă'    - Flicker-free animationă'    - VGA 320x200x256 graphicsă'    - Point number displayă'    - Panningă'    - Zoomingă'ă'---------------------------------------------[Made in FiNLAND]--------------ăăăDEFLNG A-Z              'For speedăDECLARE FUNCTION PPoint% (x&, y&)ăDECLARE SUB TheEnd ()ăDECLARE SUB StartUp ()ăDECLARE SUB Separator (Col&, Char$)ăDECLARE SUB SetPal (i&, r&, g&, b&)ăDECLARE SUB DrawLine (x&, y&, X2&, Y2&, Col&)ăDECLARE SUB PPSet (x&, y&, Col&)ăDECLARE SUB RotatePoint (x&, y&, Z&, rX&, Ry&, Rz&, Nx&, Ny&, Nz&)ăDECLARE SUB t3d2d (x&, y&, Z&, Sx&, Sy&)ă                                  ăTYPE Filltype           'Buffer to hold polygon dataă  X1 AS LONGă  X2 AS LONGăEND TYPEăăTYPE Pointtypeă  x3 AS LONG       'Original Xă  y3 AS LONG       'Original Yă  z3 AS LONG       'Original Ză  x AS LONG        'Screen Xă  y AS LONG        'Screen Yă  Nx AS LONG       'New Xă  Ny AS LONG       'New Yă  Nz AS LONG       'New ZăEND TYPEăăTYPE Polygontypeă  Points AS LONG      'Number of pointsă  AvgZ AS LONG        'Average Z coord.ă  Col AS LONG         'Coloră  Culled AS LONG      'Culled/Not Culledă  Dbl AS LONG         'Single/Double sidedă  ZNormal AS LONG     'For shading and cullingăEND TYPEăăă'----------------------------------------------------------------------------ă'                           Constantsă'----------------------------------------------------------------------------ăCONST True = 0ăCONST False = NOT TrueăCONST Pi = 22 / 7ăCONST MaxPoints = 25              'Max number of points/polygon, adjust ifă                                  'low on memoryăCONST MaxPolygons = 30            'Max number of polygonsăăăDIM SHARED Polygons, PointsăREAD Points                    'Read max pointsăREAD Polygons                  'Read max polygonsăDIM SHARED Zoom AS INTEGER     'Zoom factorăDIM SHARED Sine(360)           'SIN tableăDIM SHARED Cosine(360)         'COS tableăDIM SHARED Fill(199) AS Filltype    'Polygon data bufferăDIM SHARED Upper AS INTEGER  '  Highest scanlineăDIM SHARED Lower AS INTEGER    'Lowest scanlineăDIM SHARED Vx, Vy, Vz          'RotationăDIM SHARED ShadingModel        'Shading modelăDIM SHARED Culling AS INTEGER  'Culling On/OffăDIM SHARED MaxZoom AS INTEGER  'Max Zoom levelăDIM SHARED Pnt(100) AS Pointtype     'Point arrayăDIM SHARED Sec(100)  AS Polygontype  'Polygon arrayăDIM SHARED SecPnt(MaxPolygons, MaxPoints)       'Polygon point arrayăDIM SHARED Pointer(Polygons)   'Pointer for sortingăDIM SHARED AvgZ(Points)        'Z ArrayăDIM SHARED SrX, SrY            'Screen centerăDIM SHARED Mx, My              'PanningăDIM SHARED PDisp               'Number display (True/False)ăDIM SHARED Xr, Yr, Zr          'RotationăăSCREEN 0: CLSăCOLOR 15, 4ăLOCATE 1, 1ăPRINT STRING$(80, " ")ăLOCATE 1, 1ăPRINT "             3D Filled Polygon Engine by Sami Ky”stil„ 1997"ăCOLOR 7, 0ăStartUpăăDOă'----------------------------------------------------------------------------ă'                          Rotate all pointsă'----------------------------------------------------------------------------ă  FOR i& = 1 TO Pointsă    RotatePoint Pnt(i&).x3, Pnt(i&).y3, Pnt(i&).z3, Xr, Yr, Zr, x3, y3, z3ă    AvgZ(i&) = z3ă    t3d2d x3, y3, z3, Sx, Syă    Pnt(i&).Nx = x3ă    Pnt(i&).Ny = y3ă    Pnt(i&).Nz = z3ă    Pnt(i&).x = Sxă    Pnt(i&).y = Syă  NEXTăăă ă ă'----------------------------------------------------------------------------ă'        Calculate average Z values and cull non-visible polygonsă'----------------------------------------------------------------------------ăă  FOR i& = 1 TO Polygonsă    Sec(i&).AvgZ = 0ă    NormalZ = 0ăă    FOR i2& = 0 TO Sec(i&).Points - 2ă      Sec(i&).AvgZ = Sec(i&).AvgZ + AvgZ(SecPnt(i&, i2&))ă      NormalZ = NormalZ + (Pnt(SecPnt(i&, i2&)).Nz) * 10ă    NEXTăă    Sec(i&).AvgZ = (Sec(i&).AvgZ \ Sec(i&).Points) * 20ă    NormalZ = NormalZ \ Sec(i&).Pointsăă    IF NormalZ < NormalZ \ 10 THENă      IF Culling = True AND Sec(i&).Dbl = 0 THENă        Sec(i&).Culled = Trueă      ELSEIF Culling = True AND Sec(i&).Dbl = 1 THENă        Sec(i&).Culled = Falseă        NormalZ = -NormalZă      ELSEă        IF NormalZ < 0 THEN NormalZ = -NormalZă      END IFă    ELSEă      Sec(i&).Culled = Falseă    END IFă    Sec(i&).ZNormal = (NormalZ) \ 10ăă    IF Culling = False THEN Sec(i&).Culled = Falseă  NEXTă ă ă'----------------------------------------------------------------------------ă'                Sort polygons by their average Z valuesă'----------------------------------------------------------------------------ă  Closest = 32000ă  Furthest = -32000ă  FOR s& = 1 TO Polygons                 'Find out closest/furthest polygonă    IF Sec(s&).AvgZ < Closest THEN Closest = Sec(s&).AvgZă    IF Sec(s&).AvgZ > Furthest THEN Furthest = Sec(s&).AvgZă  NEXTăă  Sort = 1ă  FOR s2 = Closest TO Furthest STEP 2   'Loop from closest to furthestă                                   '^ă                                   'Adjust this value to get moreă                                   'precise sorting/less speed (def:2)ă    FOR s& = 1 TO Polygonsă      IF Sec(s&).AvgZ = s2 THEN    'Found a match?ă        Pointer(Sort) = s&         'Store ită        Sort = Sort + 1            'Update counteră      END IFă    NEXTă  NEXTăăă  Upper = 100                      'Reset High/Low scanline valuesă  Lower = 100ăăă'----------------------------------------------------------------------------ă'           Create a buffer to serve as page in VGA 320x200x256 modeă'----------------------------------------------------------------------------ă  DIM SHARED Buffer(0 TO 32001) AS INTEGERă  Buffer(0) = 2552ă  Buffer(1) = 199ăăă'----------------------------------------------------------------------------ă'                        Calculate polygonsă'----------------------------------------------------------------------------ă  FOR ii& = 1 TO Polygonsă    i& = Pointer(ii&)                     'Get sorted pointeră    IF Sec(i&).Culled = False THEN        'Visible?ă    FOR i2& = 0 TO Sec(i&).Points - 2ă      Col = (Sec(i&).Col - 40 + (Sec(i&).AvgZ \ 16)) * 1024ă      IF Col < (Sec(i&).Col - 60) * 1024 THEN Col = (Sec(i&).Col - 60) * 1024ă      IF i2& < Sec(i&).Points - 1 THENă        DrawLine Pnt(SecPnt(i&, i2&)).x + SrX, Pnt(SecPnt(i&, i2&)).y + SrY, Pnt(SecPnt(i&, i2& + 1)).x + SrX, Pnt(SecPnt(i&, i2& + 1)).y + SrY, Col \ 1024ă      ELSEă        DrawLine Pnt(SecPnt(i&, 0)).x + SrX, Pnt(SecPnt(i&, 0)).y + SrY, Pnt(SecPnt(i&, i2& + 1)).x + SrX, Pnt(SecPnt(i&, i2& + 1)).y + SrY, Col \ 1024ă      END IFă    NEXTă    ă'----------------------------------------------------------------------------ă'                     Draw polygons into screen bufferă'----------------------------------------------------------------------------ă    IF Upper <= 0 THEN Upper = 1ă    DEF SEG = VARSEG(Buffer(2))ăă    FOR i2 = Upper TO Lowerăă      'Calculate shadeă      Range = (((Fill(i2).X2) - (Fill(i2).X1)) \ 2)ă      IF Range = 0 THEN ColStep = 0 ELSE ColStep = ((30 / Range) * Sec(i&).ZNormal / 6) * 1024ă      ColMax = (Sec(i&).Col - 1) * 1024ă      Col = (Sec(i&).Col - 50 + (Sec(i&).AvgZ \ 16)) * 1024ă      IF Col < (Sec(i&).Col - 60) * 1024 THEN Col = (Sec(i&).Col - 60) * 1024ăă      'Draw scanline into bufferă      SELECT CASE ShadingModelă      CASE IS = 5                'Transparentă        FOR Fl& = (Fill(i2).X1) TO Fill(i2).X2ă          TCol = ((PPoint(Fl&, i2) MOD 63) + (Sec(i&).Col) - 50) * 1024ă          IF TCol > ColMax THEN TCol = ColMaxă          PPSet Fl&, i2, TCol \ 1024ă        NEXTă      CASE IS = 4                'Shaded 2ă        FOR Fl& = (Fill(i2).X1) TO Fill(i2).X2ă          PPSet Fl&, i2, Col \ 1024ă          Col = Col + ColStep \ 2ă          IF Col > ColMax THEN Col = ColMaxă        NEXTă      CASE IS = 3                'Shadedă        FOR Fl& = (Fill(i2).X1) TO ((Fill(i2).X2) - (Fill(i2).X1)) \ 2 + (Fill(i2).X1)ă          PPSet Fl&, i2, Col \ 1024ă          PPSet Fill(i2).X1 + Fill(i2).X2 - Fl&, i2, Col \ 1024ă          Col = Col + ColStepă          IF Col > ColMax THEN Col = ColMaxă        NEXTă      CASE IS = 2                'Flată        FOR Fl& = (Fill(i2).X1) TO ((Fill(i2).X2) - (Fill(i2).X1)) \ 2 + (Fill(i2).X1)ă          PPSet Fl&, i2, Col \ 1024ă          PPSet Fill(i2).X1 + Fill(i2).X2 - Fl&, i2, Col \ 1024ă        NEXTă      END SELECTăăă      'Empty the keyboard bufferă      a$ = INKEY$ă      Fill(i2).X1 = 321ă      Fill(i2).X2 = -1ă      Fill(i2 - 1).X1 = 321ă      Fill(i2 - 1).X2 = -1ă    NEXTă    END IFă  NEXTăă'----------------------------------------------------------------------------ă'                       Dump buffer to screenă'----------------------------------------------------------------------------ă  PUT (0, 0), Buffer, PSETăăă  'Print Point numbersă  IF PDisp = True THENă    FOR i = 1 TO MaxPoints - 1ă      Ty = (Pnt(i).y + SrY) \ 8 + 1ă      Tx = (Pnt(i).x + SrX) \ 8 + 1ă      IF Ty > 23 THEN Ty = 23ă      IF Ty < 1 THEN Ty = 1ă      IF Tx < 1 THEN Tx = 1ă      IF Tx > 40 THEN Tx = 40ă      LOCATE Ty, Txă      PRINT LTRIM$(RTRIM$(STR$((i))))ă    NEXTă  END IFăăăă'----------------------------------------------------------------------------ă'                    Handle keypressesă'----------------------------------------------------------------------------ăă  DEF SEG = 0: k = INP(&H60)ă  WHILE LEN(INKEY$): WEND     'Empty keyboard bufferă  SELECT CASE kă    CASE &H3B               'F1ă      ShadingModel = 1ă    CASE &H3C               'F2ă      ShadingModel = 2ă    CASE &H3D               'F3ă      ShadingModel = 3ă    CASE &H3E               'F4ă      ShadingModel = 4ă    CASE &H3F               'F5ă      Culling = Trueă    CASE &H40               'F6ă      Culling = Falseă    CASE &H41               'F7ă      PDisp = Trueă    CASE &H42               'F8ă      PDisp = Falseă    CASE &H43               'F9ă      ShadingModel = 5ă      Culling = Falseă    CASE &H52               '0ă      Zoom = 100ă      Xr = 400ă      Yr = 315ă      Zr = 0ă      Mx = 0ă      My = 0ă    CASE &H4C               '5ă      Vx = 0ă      Vy = 0ă      Vz = 0ă    CASE &H1E               'Aă      Zoom = Zoom - 10ă      IF Zoom < MaxZoom THEN Zoom = MaxZoomă    CASE &H50               '2ă      Vx = Vx + 1ă    CASE &H48               '8ă      Vx = Vx - 1ă    CASE &H4B               '4ă      Vy = Vy + 1ă    CASE &H4D               '6ă      Vy = Vy - 1ă    CASE &H4A               '+ă      Vz = Vz + 1ă    CASE &H4E               '-ă      Vz = Vz - 1ă    CASE &H2C               'Ză      Zoom = Zoom + 10ă    CASE &H17               'Iă      My = My + 5ă    CASE &H25               'Kă      My = My - 5ă    CASE &H24               'Jă      Mx = Mx + 5ă    CASE &H26               'Lă      Mx = Mx - 5ă    CASE 1                  'ESCă      EXIT DOă    END SELECTăă'----------------------------------------------------------------------------ă'                 Update rotation velocitiesă'----------------------------------------------------------------------------ă  Xr = Xr + Vxă  Yr = Yr + Vyă  Zr = Zr + Vzăă  IF Xr < 0 THEN Xr = 360 + Xră  IF Yr < 0 THEN Yr = 360 + Yră  IF Zr < 0 THEN Zr = 360 + Zră  ERASE BufferăLOOPăăăTheEndăăă'----------------------------------------------------------------------------ă'                        Object dataă'----------------------------------------------------------------------------ă' I've included a hexagonal shape for the demo, but it may be too muchă' for some machines, so there is also a simpler cube shape at the end ofă' the data lines. To use it, REM the data lines of the hex-thingy.ăăă'Number of pointsăDATA 16ăă'Number of polygonsăDATA 10ăăăă'       X    Y     Ză'ăDATA  -15, -25,   15ăDATA   15, -25,   15ăDATA   30, -10,   15ăDATA   30,   5,   15ăDATA   15,  20,   15ăDATA  -15,  20,   15ăDATA  -30,   5,   15ăDATA  -30, -10,   15ăăDATA  -15, -25,  -15ăDATA   15, -25,  -15ăDATA   30, -10,  -15ăDATA   30,   5,  -15ăDATA   15,  20,  -15ăDATA  -15,  20,  -15ăDATA  -30,   5,  -15ăDATA  -30, -10,  -15ăă'----------------------------------------------------------------------------ă'Polygon data format:ă'----------------------------------------------------------------------------ă' First number - Specifies if the polygon is double sided (1:yes, 0:no)ă'                A double sided polygon is never culled, ie It is visibleă'                from all directionsă' Second number - Number of points in polygonă' Next n numbers - Index numbers of the points that form the polygonă'                  Make sure that the polygon is fully closed, otherwiseă'                  it won't be filled correctly:ă'                    For example         (a filled square):ă'                           5, 1, 2, 3, 4, 1ă'                           ^              ^ă'                           |              |ă'                    5 points              return to first point to completeă'                      NOT 4!              the polygon.ă'ă'ă' Last number - Color of polygonă'               1 - Whiteă'               2 - Redă'               3 - Greenă'               4 - Blueă'----------------------------------------------------------------------------ăăă'   Pts.                          Col.ă'      |                             |ă' Dbl. |                             |ă'    | |                             |ăDATA 0,9,1,2,3,4,5,6,7,8,1,          2ăDATA 0,9,9,10,11,12,13,14,15,16,9,   3ăDATA 0,5,1,2,10,9,1,                 1ăDATA 0,5,2,3,11,10,2,                2ăDATA 0,5,3,4,12,11,3,                3ăDATA 0,5,4,5,13,12,4,                4ăDATA 0,5,5,6,14,13,5,                1ăDATA 0,5,6,7,15,14,6,                2ăDATA 0,5,7,8,16,15,7,                3ăDATA 0,5,8,1,9,16,8,                 4ăăă'----------------------------------------------------------------------------ă'              Alternate object for slower machinesă'----------------------------------------------------------------------------ă' To use, REM the above data linesăă'Number of pointsăDATA 8ăă'Number of polygonsăDATA 6ăăă'Point dataăă'       X    Y     Ză'ăDATA   15,  15,   15ăDATA   15, -15,   15ăDATA  -15, -15,   15ăDATA  -15,  15,   15ăDATA   15,  15,  -15ăDATA   15, -15,  -15ăDATA  -15, -15,  -15ăDATA  -15,  15,  -15ăăă'Polygon dataăă'   Pts.              Col.ă'      |                 |ă' Dbl. |                 |ă'    | |                 |ăDATA 0,5,5,8,4,1,5,      2ăDATA 0,5,6,7,3,2,6,      3ăDATA 0,5,1,2,3,4,1,      4ăDATA 0,5,1,5,6,2,1,      1ăDATA 0,5,3,7,8,4,3,      2ăDATA 0,5,5,6,7,8,5,      3ăăSUB DrawLine (x, y, X2, Y2, Col)ă'----------------------------------------------------------------------------ă'             Calculate the points of a polygon into the bufferă'----------------------------------------------------------------------------ăăăIF x < 0 THEN x = 0ăIF x > 319 THEN x = 319ăIF X2 < 0 THEN X2 = 0ăIF X2 > 319 THEN X2 = 319ăăIF y < 0 THEN y = 0ăIF y > 199 THEN y = 199ăIF Y2 < 0 THEN Y2 = 0ăIF Y2 > 199 THEN Y2 = 199ăăIF y < Upper THEN Upper = yăIF y > Lower THEN Lower = yăăă'Calculate deltas and scale by 1024ăăSteps = SQR((X2 - x) ^ 2 + ((Y2 - y) ^ 2))ăIF Steps > 0 THENă  XStep& = ((X2 - x) / Steps) * 1024ă  YStep& = ((Y2 - y) / Steps) * 1024ăEND IFăăTempxx& = xăTempyy& = yăăxxx& = Tempxx& * 1024ăyyy& = Tempyy& * 1024ăăDEF SEG = VARSEG(Buffer(2))ăăIF ShadingModel = 1 THENă  FOR i& = 1 TO Stepsă    IF xxx& \ 1024 < Fill(yyy& \ 1024).X1 THENă      Fill(yyy& \ 1024).X1 = xxx& \ 1024ă    END IFă    ă    IF xxx& \ 1024 > Fill(yyy& \ 1024).X2 THENă      Fill(yyy& \ 1024).X2 = xxx& \ 1024ă    END IFă     ă    PPSet xxx& \ 1024, yyy& \ 1024, Col&ăă    xxx& = xxx& + XStep&ă    yyy& = yyy& + YStep&ă  NEXTăELSEă  FOR i& = 1 TO Stepsă    IF xxx& \ 1024 < Fill(yyy& \ 1024).X1 THENă      Fill(yyy& \ 1024).X1 = xxx& \ 1024ă    END IFăă    IF xxx& \ 1024 > Fill(yyy& \ 1024).X2 THENă      Fill(yyy& \ 1024).X2 = xxx& \ 1024ă    END IFăă    IF ShadingModel = 1 THENă      PPSet xxx& \ 1024, yyy& \ 1024, Col&ă    END IFăă    xxx& = xxx& + XStep&ă    yyy& = yyy& + YStep&ă  NEXTăEND IFăăăEND SUBăăDEFINT A-ZăFUNCTION PPoint (x&, y&)ă'----------------------------------------------------------------------------ă'               Returns a pixel from the screen bufferă'----------------------------------------------------------------------------ăăIF x& > 319 THEN EXIT FUNCTIONăIF x& < 0 THEN EXIT FUNCTIONăăOffset& = VARPTR(Buffer(2))ăPPoint = PEEK(Offset& + (y& * 319&) + x&)ăăEND FUNCTIONăăSUB PPSet (x&, y&, Col&)ă'----------------------------------------------------------------------------ă'               Writes a pixel to the screen bufferă'----------------------------------------------------------------------------ăăIF x& > 319 THEN EXIT SUBăIF x& < 0 THEN EXIT SUBăăOffset& = VARPTR(Buffer(2))ăPOKE Offset& + (y& * 319&) + x&, Col&ăăEND SUBăăDEFLNG A-ZăSUB RotatePoint (x, y, Z, rX, Ry, Rz, Nx, Ny, Nz)ă'----------------------------------------------------------------------------ă'                    Rotate a point in 3D spaceă'----------------------------------------------------------------------------ăăSine1& = Sine(rX MOD 360)ăSine2& = Sine(Ry MOD 360)ăSINe3& = Sine(Rz MOD 360)ăăCosine1& = Cosine(rX MOD 360)ăCosine2& = Cosine(Ry MOD 360)ăCOSine3& = Cosine(Rz MOD 360)ă ăăăTEMPX& = (x * Cosine2& - Z * Sine2&) \ 1024ăTEMPZ& = (x * Sine2& + Z * Cosine2&) \ 1024ăăZ2 = (TEMPZ& * Cosine1& - y * Sine1&) \ 1024ăTEMPY& = (TEMPZ& * Sine1& + y * Cosine1&) \ 1024ăăX2 = (TEMPX& * COSine3& + TEMPY& * SINe3&) \ 1024ăY2 = (TEMPY& * COSine3& - TEMPX& * SINe3&) \ 1024ăăăăNx = X2ăNy = Y2ăNz = Z2ăăEND SUBăăSUB Separator (Col, Char$)ă'----------------------------------------------------------------------------ă'                           Prints a separator lineă'----------------------------------------------------------------------------ăăăSELECT CASE ColăCASE IS = 1ă  Col1 = 1ă  Col2 = 9ă  Col3 = 3ă  Col4 = 11ă  Col5 = 15ăCASE IS = 2ă  Col1 = 2ă  Col2 = 10ă  Col3 = 14ă  Col4 = 15ă  Col5 = 15ăCASE IS = 3ă  Col1 = 8ă  Col2 = 7ă  Col3 = 15ă  Col4 = 15ă  Col5 = 15ăEND SELECTăăăăCOLOR Col1ăPRINT STRING$(5, Char$);ăCOLOR Col2ăPRINT STRING$(5, Char$);ăCOLOR Col3ăPRINT STRING$(5, Char$);ăCOLOR Col4ăPRINT STRING$(5, Char$);ăCOLOR Col5ăPRINT STRING$(40, Char$);ăCOLOR Col4ăPRINT STRING$(5, Char$);ăCOLOR Col3ăPRINT STRING$(5, Char$);ăCOLOR Col2ăPRINT STRING$(5, Char$);ăCOLOR Col1ăPRINT STRING$(5, Char$)ăăEND SUBăăDEFSNG A-ZăSUB SetPal (i&, r&, g&, b&)ă'----------------------------------------------------------------------------ă'                        Sets a palette valueă'----------------------------------------------------------------------------ăăOUT &H3C8, i&ăOUT &H3C9, r&ăOUT &H3C9, g&ăOUT &H3C9, b&ăăăEND SUBăăDEFLNG A-ZăSUB StartUpă'----------------------------------------------------------------------------ă'               Read objects and print StartUp messageă'----------------------------------------------------------------------------ăăPRINT " ţ Calculating Sine/Cosine table..."ăăă'----------------------------------------------------------------------------ă'                 Precalculate tables for speedă'----------------------------------------------------------------------------ăFOR i = 0 TO 360ă  Sine(i) = SIN(i * Pi / 180) * 1024ă  Cosine(i) = COS(i * Pi / 180) * 1024ăNEXTăăăSrX = 320 \ 2     'Screen centerăSrY = 200 \ 2ăăăZoom = 100        'Initial valuesăXr = 400ăYr = 315ăZr = 0ăMx = 0ăMy = 0ăPDisp = FalseăShadingModel = 3ăCulling = TrueăPRINT " ţ Reading"; Points; "points..."ăăă'----------------------------------------------------------------------------ă'                   Read object data (See end of program)ă'----------------------------------------------------------------------------ăMaxZoom = 0ăMinZoom = 0ăFOR i = 1 TO Points                                   'Read pointsă  READ Pnt(i).x3, Pnt(i).y3, Pnt(i).z3ă  t3d2d Pnt(i).x3, Pnt(i).y3, Pnt(i).z3, Sx&, Sy&ă  IF Pnt(i).x3 > MaxZoom THEN MaxZoom = Pnt(i).x3ă  IF Pnt(i).y3 > MaxZoom THEN MaxZoom = Pnt(i).y3ă  IF Pnt(i).z3 > MaxZoom THEN MaxZoom = Pnt(i).z3ăă  IF Pnt(i).x3 < MinZoom THEN MinZoom = Pnt(i).x3ă  IF Pnt(i).y3 < MinZoom THEN MinZoom = Pnt(i).y3ă  IF Pnt(i).z3 < MinZoom THEN MinZoom = Pnt(i).z3ăă  Pnt(i).x = Sx&ă  Pnt(i).y = Sy&ăNEXTăăIF MaxZoom < 0 THEN MaxZoom = -MaxZoomăIF MinZoom < 0 THEN MinZoom = -MinZoomăIF MinZoom > MaxZoom THEN MaxZoom = MinZoomăMaxZoom = MaxZoom * 1.3ăăPRINT " ţ Reading"; Polygons; "polygons..."ăăFOR i = 1 TO Polygons                                  'Read polygonsă  READ Sec(i).Dblă  READ Sec(i).Pointsă  FOR i2 = 0 TO Sec(i).Points - 1ă    READ SecPnt(i, i2)ă    IF SecPnt(i, i2) > Points THENă      PRINT "   - Point"; SecPnt(i, i2); "in polygon"; i; "not found!"ă      ENDă    END IFă  NEXTă  READ Sec(i).Colă  Sec(i).Col = Sec(i).Col * 64ăNEXTă            ăSec(i + 1).Points = -1ăSeparator 1, "Ä"ăCOLOR 7ăPRINT , , "         Keys"ăSeparator 1, "Ä"ăăăCOLOR 3ăPRINT " Arrows/Numpad",ăCOLOR 7ăPRINT "- Control Rotation"ăăCOLOR 3ăPRINT " J/K/L/I", ,ăCOLOR 7ăPRINT "- Translation (Doesn't quite work yet ;)"ăăCOLOR 3ăPRINT " A/Z", ,ăCOLOR 7ăPRINT "- Zoom In/Out"ăăCOLOR 3ăPRINT " 5/0", ,ăCOLOR 7ăPRINT "- Stop/Reset rotation"ăăCOLOR 3ăPRINT " F1", ,ăCOLOR 7ăPRINT "- Select wireframe mode"ăăCOLOR 3ăPRINT " F2", ,ăCOLOR 7ăPRINT "- Select flat mode"ăăCOLOR 3ăPRINT " F3", ,ăCOLOR 7ăPRINT "- Select shade mode"ăăCOLOR 3ăPRINT " F4", ,ăCOLOR 7ăPRINT "- Select shade mode 2"ăăCOLOR 3ăPRINT " F5/F6", ,ăCOLOR 7ăPRINT "- Backface culling On/Off"ăăCOLOR 3ăPRINT " F7/F8", ,ăCOLOR 7ăPRINT "- Point number display On/Off"ăăCOLOR 3ăPRINT " F9", ,ăCOLOR 7ăPRINT "- Select transparent mode (Sets culling off)"ăăăCOLOR 3ăPRINT " Esc", ,ăCOLOR 7ăPRINT "- Exit"ăăSeparator 1, "Ä"ăSeparator 3, "Ä"ăCOLOR 9ăPRINT "        You may use this code freely, as long as I am credited for it."ăSeparator 3, "Ä"ăăDO: LOOP UNTIL INKEY$ <> ""ăăă'----------------------------------------------------------------------------ă'                              Set paletteă'----------------------------------------------------------------------------ăăSCREEN 13: CLSăFOR i = 0 TO 63ă  SetPal i, i, i, iă  SetPal i + 64, i, 0, 0ă  SetPal i + 128, 0, i, 0ă  SetPal i + 192, 0, 0, iăNEXT iăăFOR i2 = 0 TO 199                    'Initialize screen arrayă  Fill(i2).X1 = 321ă  Fill(i2).X2 = -1ăNEXTăăăăEND SUBăăSUB t3d2d (x, y, Z, Sx, Sy)ă'----------------------------------------------------------------------------ă'         Transforms 3D coordinates into 2D screen coordinatesă'----------------------------------------------------------------------------ăăăIF Z - Zoom <> 0 THEN Sy = (y + My) * 60 \ (Z - Zoom)ăIF Z - Zoom <> 0 THEN Sx = (x + Mx) * 60 \ (Z - Zoom)ăăEND SUBăăSUB TheEndă'----------------------------------------------------------------------------ă'                      Ending messageă'----------------------------------------------------------------------------ăăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1ăPRINT STRING$(80, " ")ăLOCATE 1, 1ăPRINT "             3D Filled Polygon Engine by Sami Ky”stil„ 1997"ăăCOLOR 3, 0ăPRINT " Final location of points:"ăSeparator 1, "Ä"ăCOLOR 11ăPRINT " X", " Y", " Z"ăSeparator 1, "Ä"ăCOLOR 7ăFOR i& = 1 TO Pointsă  PRINT Pnt(i&).Nx,ă  PRINT Pnt(i&).Ny,ă  PRINT Pnt(i&).NzăNEXTăSeparator 1, "Ä"ăCOLOR 14ăăLOCATE 6, 40: PRINT "String Space:", FRE("")ăLOCATE 7, 40: PRINT "Stack Space:", FRE(-1)ăLOCATE 8, 40: PRINT "Array Space:", FRE(-1)ăLOCATE 9, 40: PRINT "Shading mode:", ShadingModelăCOLOR 7ăăEND SUBăSami Kyostila                  DOOMED V3.2 (RAYTRACER)        hiteck@mail.freenet.hut.fi     09-05-97 (20:15)       QB, QBasic, PDS        1424 37439    DOOMED.BAS  '-------------------------------------------------------------------ă'               DooMed Raytracer v3.2 for QBasică'ă'                by   S A M i   K Y ™ S T i L Žă'  ă'   ă'                           1 9 9 7ă'     ă'ă' Well, I finally finished my first raytracer. It's still has some bugs,ă' but it works! And it's quite fast also (around 30 fps on my Cx6x86 P150+)ă' This is the only QBasic raytracer I've seen with distance shading andă' a map mode. Special thanks to Peter Cooper for his DOOM RayCasteră' (modified by A LOT of people), it helped me to get the basic idea behindă' raytracers.ă'ă' If You have any questions, comments, bugfixes, etc. please mail them to:ă'ă'   hiteck@freenet.hut.fiă'ă' or:ă'ă'   kemple.oy@mbnet.fiă'ă' or contact hiteck in IRCă'ă'ă' You may use this code freely, as long as the original author is credited.ă'ă'-------------------------------------------------------------------ăăăă'-------------------------------------------------------------------ă'                           Known bugsă'-------------------------------------------------------------------ă'ă'  - Texture-engine sometimes shows a large block in the middle ofă'    the screen.ă'  - Sprite-engine has some alignment problems.ă'  - If the Viewwidth-constant is changed, sometimes the screen won'tă'    center properly and will have alignment problems. 40 or 30 works fine.ă'    (or even 100, if you want a bug-eyed effect ;)ă'  - Different screen sizes may cause screen alignment errors.ă'ă'-------------------------------------------------------------------ăăă'-------------------------------------------------------------------ă'                          Revision historyă'-------------------------------------------------------------------ă'ă'v1.0ă'====ă'ă' The first and the slowest version of them all. Still used screenmode 7.ă' Around 0.5 fps, with textures 0.1 fpsă'ă'v2.0ă'====ă'ă' Rewrote the whole engine, but now it's a Doom-style thingy, with polygonală' sectors. Actually this is now a separate project, since it's completelyă' different from the other versions.ă'ă'ă'v3.0ă'====ă'ă' Rewrote the whole engine again. Now it uses screenmode 13 with distanceă' shading. Added all the tables, so no floating point calculation was usedă' during rendering process. Had a simple map mode. Also had texture- andă' sprite-engines.ă'ă'ă'v3.1ă'====ă'ă' Added even more lookup tables for speed. Rewrote map mode and keyboardă' handler. Added Intro screen. Added compass. Added framecounteră'ă'v3.2ă'====ă'ă' Added distance shading to map mode. Added Exit screen and error handler.ă' Optimized speed. Fixed most of texture-engine's bugs. Added a coloră' lookup table. Fixed some alignment bugs with map mode. Added strafeă' and run keys. Runs at a playable speed. Fixed some sprite-engineă' bugs.ă'ă'-------------------------------------------------------------------ăăDECLARE SUB ShowExit ()ăDECLARE SUB Update ()ăDECLARE SUB DrawScreen ()ăDECLARE SUB Smooth (xpos&, YPos&, XLen%, YLen%, Times!, Rate!, Lowest!)ăDECLARE SUB DrawMap ()ăDECLARE SUB ShowIntro ()ăDECLARE SUB Center (Text$)ăDECLARE FUNCTION Trim$ (Number!)ăDECLARE FUNCTION Error$ (Virhe!)ăăăDEFLNG D, X-YăON ERROR GOTO ErrorHandlerăăăăăCONST Pi = 22 / 7        'PI  (close enough)ăCONST LevelXLen = 20     'Level X LenghtăCONST LevelYLen = 20     'Level Y LenghtăCONST ScreenXLen = 240   'Screen X LenghtăCONST ScreenYLen = 140   'Screen Y LenghtăCONST Viewwidth = 40     'Player's view width in degreesăCONST Turnrate = 6       'How fast the player will turn (degrees)ăCONST Textures = 0       'Draw Textures (1: on, 0: off)ăCONST WalkSpeed = 200    'Player's walkingspeedăCONST Sprites = 0        'Draw Sprites (1: on, 0: off)ăCONST SkyColor = 1       'Color of skyăCONST FloorColor = 0     'Color if floorăCONST Darkness = 1       'Darkness level (higher = darker)ăCONST Framerate = 1      'Display Framerate (1:yes, 0:no)ăăCONST UpArrow% = 72, DnArrow% = 80, LArrow% = 75, RArrow% = 77, Esc% = 1 'KeysăCONST Alt% = 56, Shift% = 42ăăăDIM SHARED Level(LevelXLen - 1, LevelYLen - 1) AS LONG   'LeveldataăDIM SHARED Visible&(LevelXLen - 1, LevelYLen - 1)ăDIM SHARED Shade&(LevelXLen - 1, LevelYLen - 1)ăDIM SHARED OrgShade&(LevelXLen - 1, LevelYLen - 1)ăDIM SHARED Sine(-Viewwidth TO 360 + Viewwidth)           'SinetableăDIM SHARED Cosine(-Viewwidth TO 360 + Viewwidth)         'CosinetableăDIM SHARED Px&, Py&, Pa&                                 'Player coords. and view angleăDIM SHARED Tx&, Ty&, Sprite                              'Texture and sprite coords.ăDIM SHARED SpriteX&(20)                                  'Sprite coords.ăDIM SHARED SpriteDist&(20)ăDIM SHARED SpriteMapX&(20)ăDIM SHARED SpriteMapY&(20)ăDIM SHARED Spritecount&(20)ăDIM SHARED Sprite&ăDIM SHARED Message$                                      'Message displayed on screenăDIM SHARED Dist&(300)                                    'Distance tableăDIM SHARED Dist2&(300)                                   '-ăDIM SHARED ScreenStepăDIM SHARED YStart&ăDIM SHARED MapMode, ChangeăDIM SHARED Frame&, Start&ăDIM SHARED Strafe&, Fast&ăDIM SHARED Colr&(16, 300)ăăRESTORE TextureăREAD Tx&, Ty&ăDIM SHARED Texture(Tx& - 1, Ty& - 1)ăScreenStep = ScreenXLen / (Viewwidth) \ 2ăYStart& = 100 - ScreenYLen \ 2ăDIM SHARED BufferDist&(ScreenXLen / ScreenStep)          'Buffer 1ăDIM SHARED BufferCol&(ScreenXLen / ScreenStep)           'Buffer 2ăăăăMessage$ = "DOOMED v3.2 BY SAMI KY™STILŽ"ăMapMode = -1ăăShowIntroăSCREEN 13: CLSăăă'-------------------------------------------------------------------ă'                       Read Paletteă'-------------------------------------------------------------------ăăRESTORE PalăăFOR i = 0 TO 255ă  READ red, green, blueă  OUT (&H3C8), iă  OUT (&H3C9), redă  OUT (&H3C9), greenă  OUT (&H3C9), blueăNEXTăă          ăăăă'-------------------------------------------------------------------ă'                       Draw border and textă'-------------------------------------------------------------------ăăFOR xx& = 0 TO 20ă  LINE (xx& + 19, xx& + 9)-(319 - xx& - 19, 199 - xx& - 9), (xx& + (14 * 16)) \ 2, BFăNEXTăăDEF SEG = &HA000ăăLINE (7 * 8 - 2, 22 * 8 - 3)-(8 * LEN(Message$) + 7 * 8 + 2, 22 * 8 + 8 + 1), TextCol * 15, BFăTextCol = 12ăLOCATE 23, 8: PRINT Message$ăFOR y = 22 * 8 - 2 TO 22 * 8 + 8ă  FOR x = 7 * 8 - 1 TO 7 * 8 + LEN(Message$) * 8 + 1ă    IF PEEK(y * 320 + x) = 0 THEN POKE (y * 320 + x), (TextCol - 1) * 16 ELSE POKE (y * 320 + x), TextCol * 16ă  NEXTăNEXTăSmooth 7 * 8, 22 * 8 - 1, 8 * LEN(Message$), 8, 1, 1, (TextCol - 1) * 16ăLINE (7 * 8 - 2, 22 * 8 - 3)-(8 * LEN(Message$) + 7 * 8 + 2, 22 * 8 + 8 + 1), TextCol * 15, Băă'-------------------------------------------------------------------ă'               Initialize player position and angleă'-------------------------------------------------------------------ăPx& = 1351ăPy& = 1605ăPa& = 360ăUpdate                  'Calculate & Draw ScreenăDrawScreenăă'-------------------------------------------------------------------ă'                       Draw compassă'-------------------------------------------------------------------ăCIRCLE (20, 179), 20, 8ăPAINT (20, 179), 8, 8ăCIRCLE (20, 179), 19, 7ăPAINT (20, 179), 7, 7ăCIRCLE (20, 179), 18, 15ăPAINT (20, 179), 15, 15ăCIRCLE (20, 179), 17, 7ăPAINT (20, 179), 7, 7ăCIRCLE (20, 179), 16, 8ăPAINT (20, 179), 0, 8ăă'///////////////////////////////////////////////////////////////////ă'\\\\\\\\\\\\\\\\\\\\\\\Start main loop\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ă'///////////////////////////////////////////////////////////////////ăăDOă'-------------------------------------------------------------------ă'                       Draw headingă'-------------------------------------------------------------------ăIF OldPa& <> Pa& THEN LINE (20, 179)-(20 + Sine((OldPa& + 360) MOD 360) * 10, 179 + Cosine((OldPa& + 360) MOD 360) * 10), 0ăLINE (20, 179)-(20 + Sine((Pa& + 360) MOD 360) * 10, 179 + Cosine((Pa& + 360) MOD 360) * 10), 14ăăOldPa& = Pa&ăOldPy& = Py&ăOldPx& = Px&ăturn = 0ăă'-------------------------------------------------------------------ă'                      Handle keypressesă'-------------------------------------------------------------------ăăGetkey:ăDOăKeycode% = INP(&H60)ăIF MapMode = -1 THEN DrawScreenăLOOP UNTIL Keycode%ăăDO WHILE LEN(INKEY$): LOOPăăăSELECT CASE Keycode%ă  CASE RArrowă    Dummy% = INP(&H60)ă    IF Strafe& = 0 THENă      IF Fast& = 0 THENă        Pa& = Pa& - Turnrate: turn = 1ă      ELSEă        Pa& = Pa& - Turnrate * 2: turn = 1ă      END IFă    ELSEă      IF Fast& = 0 THENă        Px& = Px& + Sine((Pa& + 90) MOD 360) * -WalkSpeedă        Py& = Py& + Cosine((Pa& + 90) MOD 360) * -WalkSpeedă      ELSEă        Px& = Px& + Sine((Pa& + 90) MOD 360) * (-WalkSpeed * 2)ă        Py& = Py& + Cosine((Pa& + 90) MOD 360) * (-WalkSpeed * 2)ă      END IFă    END IFă  CASE LArrowă    Dummy% = INP(&H60)ă    IF Strafe& = 0 THENă      IF Fast& = 0 THENă        Pa& = Pa& + Turnrate: turn = 1ă      ELSEă        Pa& = Pa& + Turnrate * 2: turn = 1ă      END IFă    ELSEă      IF Fast& = 0 THENă        Px& = Px& + Sine((Pa& + 90) MOD 360) * WalkSpeedă        Py& = Py& + Cosine((Pa& + 90) MOD 360) * WalkSpeedă      ELSEă        Px& = Px& + Sine((Pa& + 90) MOD 360) * (WalkSpeed * 2)ă        Py& = Py& + Cosine((Pa& + 90) MOD 360) * (WalkSpeed * 2)ă      END IFă    END IFă    ă  CASE UpArrowă    Dummy% = INP(&H60)ă    IF Fast& = 0 THENă      Px& = Px& + Sine(Pa&) * WalkSpeedă      Py& = Py& + Cosine(Pa&) * WalkSpeedă    ELSEă      Px& = Px& + Sine(Pa&) * (WalkSpeed * 2)ă      Py& = Py& + Cosine(Pa&) * (WalkSpeed * 2)ă    END IFăăă  CASE DnArrowă    Dummy% = INP(&H60)ă    IF Fast& = 0 THENă      Px& = Px& + Sine(Pa&) * -WalkSpeedă      Py& = Py& + Cosine(Pa&) * -WalkSpeedă    ELSEă      Px& = Px& + Sine(Pa&) * (-WalkSpeed * 2)ă      Py& = Py& + Cosine(Pa&) * (-WalkSpeed * 2)ă    END IFăă  CASE Esc: EXIT DOăă  CASE 15 AND TIMER > Change + .2ă    Change = TIMERă    MapMode = -MapModeă    xx& = ((160 - ((ScreenXLen) \ 2)))ă    LINE (xx&, YStart&)-(xx& + ScreenXLen - 1, YStart& + ScreenYLen - 1), 0, BFă    IF MapMode = 1 THEN DrawMapăă  CASE Altă    Strafe& = 1ăă  CASE Alt + 128ă    Strafe& = 0ă ă  CASE Shiftă    Fast& = 1ăă  CASE Shift + 128ă    Fast& = 0ăăă  CASE ELSEă  GOTO GetkeyăăEND SELECTăă    IF Pa& < 0 THEN Pa& = 360 - Turnrateă    Pa& = Pa& MOD 360ăă'-------------------------------------------------------------------ă'                     Update Screenă'-------------------------------------------------------------------ă    IF turn = 1 THEN Updateă    ă    IF Level(Px& \ 1024, (Py& \ 1024)) > 0 THENă      Px& = OldPx&ă      Py& = OldPy&ă    ELSEă      IF turn = 0 THEN Updateă    END IFăă    IF MapMode = 1 THEN DrawMapăă    IF MapMode = 1 THENă      xx& = ((160 - ((ScreenXLen) \ 2)))ă       LINE ((xx& + (OldPx& / 1024) * (ScreenXLen / (LevelXLen)) + Sine((OldPa& + 360) MOD 360) * -5), YStart& + (OldPy& / 1024) * (ScreenYLen / (LevelYLen)) + Cosine((OldPa& + 360) MOD 360) * -5)-((xx& + (OldPx& / 1024) * (ScreenXLen / (LevelXLen)) + Sine((OldPa& + 360) MOD 360) * 5), YStart& + (OldPy& / 1024) * (ScreenYLen / (LevelYLen)) + Cosine((OldPa& + 360) MOD 360) * 5), 0ă    END IFăă    IF MapMode = 1 THENă       xx& = ((160 - ((ScreenXLen) \ 2)))ă       LINE ((xx& + (Px& / 1024) * (ScreenXLen / (LevelXLen)) + Sine((Pa& + 360) MOD 360) * -5), YStart& + (Py& / 1024) * (ScreenYLen / (LevelYLen)) + Cosine((Pa& + 360) MOD 360) * -5)-((xx& + (Px& / 1024) * (ScreenXLen / (LevelXLen)) + Sine((Pa& + 360) MOD 360) * 5), YStart& + (Py& / 1024) * (ScreenYLen / (LevelYLen)) + Cosine((Pa& + 360) MOD 360) * 5), 14ă    END IFăLOOPăăDO WHILE LEN(INKEY$): LOOPăă    ă   ăă'Leveldataă'-------------ăă'a number between 0 - (-16) : a Spriteă'a number between 1 - 16: a WallăăăLeveldata:ăDATA 008,011,008,011,008,011,008,011,008,011,008,011,008,011,008,011,008,011,008,011ăDATA 011,000,006,005,000,000,000,000,000,008,000,000,000,000,000,000,000,000,000,008ăDATA 008,000,005,006,000,005,006,005,000,011,000,000,000,000,000,000,000,000,000,011ăDATA 011,000,006,000,000,006,000,006,000,008,000,000,006,003,006,003,006,000,000,008ăDATA 008,000,005,000,000,005,000,005,000,000,000,000,000,000,000,000,003,000,000,011ăDATA 011,000,006,000,005,006,000,006,000,008,000,000,000,000,000,000,006,000,000,008ăDATA 008,000,005,000,000,000,000,005,000,011,000,000,000,-06,000,000,003,000,000,011ăDATA 011,000,006,005,006,005,000,006,000,008,000,000,000,000,000,000,006,000,000,008ăDATA 008,000,000,000,000,000,000,005,000,011,000,000,003,006,003,006,003,000,000,011ăDATA 011,008,011,008,011,008,011,008,000,008,000,000,000,000,000,000,000,000,000,008ăDATA 008,011,008,011,008,011,008,011,000,011,008,011,008,011,008,011,008,011,000,011ăDATA 011,000,000,000,000,000,000,000,000,008,005,006,000,000,000,000,000,005,000,008ăDATA 008,000,000,000,000,000,000,000,000,011,000,005,000,005,000,006,000,006,000,011ăDATA 011,000,000,006,005,006,000,000,000,008,000,006,000,006,000,005,000,005,000,008ăDATA 008,-11,000,005,000,005,000,000,000,000,000,005,000,006,000,006,000,006,000,011ăDATA 011,000,000,006,000,006,000,000,000,008,000,006,000,005,000,005,000,005,000,008ăDATA 008,000,000,005,000,005,000,000,000,011,000,005,000,006,000,006,000,006,000,011ăDATA 011,000,000,000,000,000,-05,000,000,008,000,006,000,005,000,005,006,005,000,008ăDATA 008,000,000,000,000,000,000,000,000,011,000,000,000,006,000,000,000,000,000,011ăDATA 011,008,011,008,011,008,011,008,011,008,011,008,011,008,011,008,011,008,011,008ăăăă'Palettedataă'-----------ăăPal:ăDATA  0 , 0 , 0ăDATA  0 , 0 , 42ăDATA  0 , 42 , 0ăDATA  0 , 42 , 42ăDATA  42 , 0 , 0ăDATA  42 , 0 , 42ăDATA  42 , 21 , 0ăDATA  42 , 42 , 42ăDATA  21 , 21 , 21ăDATA  21 , 21 , 63ăDATA  21 , 63 , 21ăDATA  21 , 63 , 63ăDATA  63 , 21 , 21ăDATA  45 , 0 , 45ăDATA  63 , 63 , 21ăDATA  63 , 63 , 63ăDATA  26 , 8 , 8ăDATA  29 , 11 , 11ăDATA  32 , 14 , 14ăDATA  35 , 17 , 17ăDATA  38 , 20 , 20ăDATA  41 , 23 , 23ăDATA  44 , 26 , 26ăDATA  47 , 29 , 29ăDATA  50 , 32 , 32ăDATA  53 , 35 , 35ăDATA  55 , 37 , 37ăDATA  58 , 40 , 40ăDATA  63 , 45 , 45ăDATA  63 , 48 , 48ăDATA  63 , 51 , 51ăDATA  63 , 54 , 54ăDATA  11 , 0 , 0ăDATA  13 , 0 , 0ăDATA  15 , 0 , 0ăDATA  17 , 0 , 0ăDATA  19 , 0 , 0ăDATA  23 , 0 , 0ăDATA  27 , 0 , 0ăDATA  31 , 0 , 0ăDATA  35 , 0 , 0ăDATA  39 , 0 , 0ăDATA  43 , 0 , 0ăDATA  47 , 0 , 0ăDATA  51 , 0 , 0ăDATA  55 , 0 , 0ăDATA  59 , 0 , 0ăDATA  63 , 0 , 0ăDATA  8 , 26 , 8ăDATA  11 , 29 , 11ăDATA  14 , 32 , 14ăDATA  17 , 35 , 17ăDATA  20 , 38 , 20ăDATA  23 , 41 , 23ăDATA  26 , 44 , 26ăDATA  29 , 47 , 29ăDATA  32 , 50 , 32ăDATA  35 , 53 , 35ăDATA  37 , 55 , 37ăDATA  40 , 58 , 40ăDATA  45 , 63 , 45ăDATA  48 , 63 , 48ăDATA  51 , 63 , 51ăDATA  54 , 63 , 54ăDATA  0 , 11 , 0ăDATA  0 , 13 , 0ăDATA  0 , 15 , 0ăDATA  0 , 17 , 0ăDATA  0 , 19 , 0ăDATA  0 , 23 , 0ăDATA  0 , 27 , 0ăDATA  0 , 31 , 0ăDATA  0 , 35 , 0ăDATA  0 , 39 , 0ăDATA  0 , 43 , 0ăDATA  0 , 47 , 0ăDATA  0 , 51 , 0ăDATA  0 , 55 , 0ăDATA  0 , 59 , 0ăDATA  0 , 63 , 0ăDATA  0 , 8 , 26ăDATA  0 , 11 , 29ăDATA  0 , 14 , 32ăDATA  0 , 17 , 35ăDATA  0 , 20 , 38ăDATA  0 , 23 , 41ăDATA  0 , 26 , 44ăDATA  0 , 29 , 47ăDATA  0 , 32 , 50ăDATA  0 , 35 , 53ăDATA  0 , 37 , 55ăDATA  0 , 40 , 58ăDATA  0 , 45 , 63ăDATA  0 , 48 , 63ăDATA  0 , 51 , 63ăDATA  0 , 54 , 63ăDATA  0 , 0 , 11ăDATA  0 , 0 , 13ăDATA  0 , 0 , 15ăDATA  0 , 0 , 17ăDATA  0 , 0 , 19ăDATA  0 , 0 , 23ăDATA  0 , 0 , 27ăDATA  0 , 0 , 31ăDATA  0 , 0 , 35ăDATA  0 , 0 , 39ăDATA  0 , 0 , 43ăDATA  0 , 0 , 47ăDATA  0 , 0 , 51ăDATA  0 , 0 , 55ăDATA  0 , 0 , 59ăDATA  0 , 0 , 63ăDATA  7 , 7 , 7ăDATA  10 , 10 , 10ăDATA  13 , 13 , 13ăDATA  16 , 16 , 16ăDATA  19 , 19 , 19ăDATA  23 , 23 , 23ăDATA  27 , 27 , 27ăDATA  31 , 31 , 31ăDATA  35 , 35 , 35ăDATA  39 , 39 , 39ăDATA  43 , 43 , 43ăDATA  47 , 47 , 47ăDATA  51 , 51 , 51ăDATA  55 , 55 , 55ăDATA  59 , 59 , 59ăDATA  63 , 63 , 63ăDATA  26 , 2 , 0ăDATA  31 , 4 , 0ăDATA  35 , 4 , 0ăDATA  38 , 5 , 0ăDATA  41 , 6 , 0ăDATA  43 , 8 , 0ăDATA  45 , 10 , 0ăDATA  47 , 12 , 0ăDATA  49 , 14 , 0ăDATA  51 , 16 , 0ăDATA  53 , 18 , 0ăDATA  55 , 20 , 0ăDATA  57 , 22 , 0ăDATA  59 , 24 , 0ăDATA  61 , 27 , 0ăDATA  63 , 30 , 0ăDATA  17 , 12 , 12ăDATA  20 , 15 , 15ăDATA  23 , 18 , 18ăDATA  26 , 21 , 21ăDATA  29 , 24 , 24ăDATA  32 , 27 , 27ăDATA  35 , 30 , 30ăDATA  38 , 33 , 33ăDATA  41 , 36 , 36ăDATA  44 , 39 , 39ăDATA  47 , 42 , 42ăDATA  50 , 45 , 45ăDATA  53 , 48 , 48ăDATA  56 , 51 , 51ăDATA  59 , 54 , 54ăDATA  62 , 57 , 57ăDATA  13 , 0 , 4ăDATA  20 , 0 , 6ăDATA  23 , 0 , 6ăDATA  26 , 0 , 8ăDATA  30 , 0 , 8ăDATA  33 , 0 , 10ăDATA  36 , 0 , 12ăDATA  39 , 0 , 14ăDATA  42 , 0 , 16ăDATA  45 , 0 , 18ăDATA  48 , 0 , 20ăDATA  51 , 0 , 22ăDATA  54 , 0 , 24ăDATA  57 , 0 , 26ăDATA  60 , 0 , 28ăDATA  63 , 0 , 30ăDATA  12 , 12 , 17ăDATA  15 , 15 , 20ăDATA  18 , 18 , 23ăDATA  21 , 21 , 26ăDATA  24 , 24 , 29ăDATA  27 , 27 , 32ăDATA  30 , 30 , 35ăDATA  33 , 33 , 38ăDATA  36 , 36 , 41ăDATA  39 , 39 , 44ăDATA  42 , 42 , 47ăDATA  45 , 45 , 50ăDATA  48 , 48 , 53ăDATA  51 , 51 , 56ăDATA  54 , 54 , 59ăDATA  57 , 57 , 62ăDATA  22 , 14 , 0ăDATA  25 , 17 , 0ăDATA  28 , 20 , 0ăDATA  31 , 23 , 0ăDATA  34 , 26 , 0ăDATA  37 , 29 , 0ăDATA  40 , 32 , 0ăDATA  43 , 35 , 0ăDATA  45 , 38 , 0ăDATA  47 , 41 , 0ăDATA  49 , 44 , 0ăDATA  51 , 47 , 0ăDATA  53 , 50 , 0ăDATA  55 , 53 , 0ăDATA  57 , 56 , 0ăDATA  59 , 59 , 0ăDATA  10 , 8 , 0ăDATA  12 , 9 , 0ăDATA  14 , 11 , 0ăDATA  16 , 12 , 0ăDATA  18 , 13 , 0ăDATA  20 , 14 , 0ăDATA  22 , 15 , 0ăDATA  24 , 16 , 0ăDATA  25 , 16 , 0ăDATA  27 , 17 , 0ăDATA  30 , 18 , 0ăDATA  33 , 20 , 0ăDATA  37 , 22 , 0ăDATA  40 , 24 , 0ăDATA  41 , 26 , 0ăDATA  42 , 28 , 0ăDATA  0 , 11 , 11ăDATA  0 , 13 , 13ăDATA  0 , 15 , 15ăDATA  0 , 17 , 17ăDATA  0 , 19 , 19ăDATA  0 , 23 , 23ăDATA  0 , 27 , 27ăDATA  0 , 31 , 31ăDATA  0 , 35 , 35ăDATA  0 , 39 , 39ăDATA  0 , 43 , 43ăDATA  0 , 47 , 47ăDATA  0 , 51 , 51ăDATA  0 , 55 , 55ăDATA  0 , 59 , 59ăDATA  0 , 63 , 63ăDATA  11 , 0 , 11ăDATA  13 , 0 , 13ăDATA  15 , 0 , 15ăDATA  17 , 0 , 17ăDATA  19 , 0 , 19ăDATA  23 , 0 , 23ăDATA  27 , 0 , 27ăDATA  31 , 0 , 31ăDATA  35 , 0 , 35ăDATA  39 , 0 , 39ăDATA  43 , 0 , 43ăDATA  47 , 0 , 47ăDATA  51 , 0 , 51ăDATA  55 , 0 , 55ăDATA  59 , 0 , 59ăDATA  63 , 0 , 63ăăShowExităENDăăăăTexture:ăă'XLenght, YLenghtăăDATA 3,5ăăăDATA 07, 07, 07ăDATA 06, 07, 06ăDATA 07, 07, 07ăDATA 06, 07, 06ăDATA 07, 07, 07ăăăăăăăErrorHandler:ăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1: PRINT STRING$(80, " ")ăLOCATE 1, 1ăCenter "ţ ERROR ţ"ăCOLOR 7, 0ăPRINTăPRINT " Error number";ăCOLOR 11ăPRINT ERR;ăCOLOR 7ăPRINT "has occured."ăPRINTăPRINT "Error description: "ăPRINTăCOLOR 15ăPRINT Error$(ERR)ăPRINTăPRINTăCOLOR 14ăPRINT " ţ Memory status"ăCOLOR 7ăPRINT "   ú String Space:",ăCOLOR 11ăPRINT FRE("")ăCOLOR 7ăPRINT "   ú Unused Stack Space:",ăCOLOR 11ăPRINT FRE(-2)ăCOLOR 7ăPRINT "   ú Array Space:",ăCOLOR 11ăPRINT FRE(-1)ăCOLOR 7ăPRINTăCOLOR 2ăPRINT " Aborting program..."ăENDăăSUB Center (Text$)ă'-------------------------------------------------------------------ă'                    Centers Text$ on screenă'-------------------------------------------------------------------ăăăLOCATE CSRLIN, 40 - LEN(Text$) \ 2ăPRINT Text$ăEND SUBăăDEFSNG DăSUB DrawMapăă'-------------------------------------------------------------------ă'             Draws the map with raytraced wallsă'-------------------------------------------------------------------ăăMapX& = 0ăMapY& = 0ăFOR yy& = YStart& TO YStart& + ScreenYLen STEP ScreenYLen / (LevelYLen)ă  FOR xx& = ((160 - ((ScreenXLen) \ 2))) TO ScreenXLen + (160 - (ScreenXLen \ 2)) STEP ScreenXLen / (LevelXLen)ă    IF MapX& > LevelXLen - 1 THEN EXIT FORă    IF Visible&(MapX&, MapY&) THENă      LINE (xx&, yy&)-(xx& + ScreenXLen / (LevelXLen) - 1, yy& - 1 + ScreenYLen / (LevelYLen - 1)), Shade&(MapX&, MapY&), BF 'Level(MapX&, MapY&) * 16, BFă      Shade&(MapX&, MapY&) = Shade&(MapX&, MapY&) - 1ă      IF Shade&(MapX&, MapY&) < (OrgShade&(MapX&, MapY&)) THEN Shade&(MapX&, MapY&) = (OrgShade&(MapX&, MapY&))ă    END IFă    MapX& = MapX& + 1ă  NEXTă  MapY& = MapY& + 1ă  IF MapY& > LevelYLen - 1 THEN EXIT FORă  MapX& = 0ăNEXTăăDO WHILE LEN(INKEY$): LOOPăăă'-------------------------------------------------------------------ă'               Update framerate every 2 secondsă'-------------------------------------------------------------------ă  IF Framerate = 1 THENă    IF TIMER >= Start& + 2 THENă      COLOR 14ă      LOCATE 1, 1: PRINT INT(Frame& / 2); "fps  "ă      Frame& = 0ă      Start& = INT(TIMER)ă    END IFăă    Frame& = Frame& + 1ă  END IFăăăEND SUBăăDEFSNG X-YăSUB DrawScreenăxx& = ((160 - ((ScreenXLen) \ 2)))ăVIEW SCREEN (xx&, YStart&)-(xx& + ScreenXLen - 1, YStart& + ScreenYLen - 1)ăăă'-------------------------------------------------------------------ă'                   Draws the screen from the bufferă'-------------------------------------------------------------------ăăxxx& = 0ăyyy& = 0ăBuffer& = 0ăDown& = YStart& + ScreenYLen + 1ăăIF Textures = 0 THENă  FOR xx& = ((160 - ((ScreenXLen) \ 2))) TO ScreenXLen + (160 - (ScreenXLen \ 2)) STEP ScreenStepă    LINE (xx&, YStart&)-(xx& + ScreenStep - 1, Dist&(BufferDist&(Buffer&)) + YStart&), SkyColor, BFă    LINE (xx&, Dist&(BufferDist&(Buffer&)) + YStart& + 1)-(xx& + ScreenStep - 1, Dist2&(BufferDist&(Buffer&)) + YStart& + 1), BufferCol&(Buffer&), BFă    LINE (xx&, Down&)-(xx& + ScreenStep - 1, Dist2&(BufferDist&(Buffer&)) + YStart& + 2), FloorColor, BFă    Buffer& = Buffer& + 1ă  NEXTăELSEă  FOR xx& = ((160 - ((ScreenXLen) \ 2))) TO ScreenXLen + (160 - (ScreenXLen \ 2)) STEP ScreenStepă    OldDist& = BufferDist&(Buffer&)ă    IF (BufferDist&(Buffer&) \ 4) > 15 THEN BufferDist&(Buffer&) = 15 \ 4ă    TyStep = (Dist2&(OldDist&) - Dist&(OldDist&)) / Ty&ăă    YPlace1& = Dist&(OldDist&)ă    YPlace2& = Dist2&(OldDist&)ă    yyy& = 0ă    YStep = (YPlace2& - YPlace1&) / Ty&ă    FOR y = YPlace1& TO YPlace2& STEP YStepă      Col& = (Texture(xxx&, yyy&)) * 16ă      YPos& = y + YStep - 1ă      IF YPos& >= YPlace2& THEN YPos& = YPlace2& - 1ă      LINE (xx&, y + YStart&)-(xx& + ScreenStep - 1, YPos& + YStart&), Col& - (BufferDist&(Buffer&) \ 4), BFă      yyy& = yyy& + 1ă      IF yyy& > Ty& - 1 THEN yyy& = Ty& - 1ă    NEXTă    yyy& = 0ă    LINE (xx&, YStart&)-(xx& + ScreenStep - 1, Dist&(OldDist&) + YStart& - 1), SkyColor, BFă    LINE (xx&, Down&)-(xx& + ScreenStep - 1, Dist2&(OldDist&) + YStart&), FloorColor, BFăă    xxx& = xxx& + 1ă    IF xxx& > Tx& - 1 THEN xxx& = 0ă    yyy& = 0ă    Buffer& = Buffer& + 1ă  NEXTăEND IFăăă'-------------------------------------------------------------------ă'                        Draw spritesă'-------------------------------------------------------------------ăăIF Sprite& > 0 AND Sprites = 1 THENă  FOR i& = 1 TO Sprite&ă    xx& = ((160 - ((ScreenXLen) \ 2)))ă    IF Spritecount&(i&) > 0 THEN SpriteX&(i&) = SpriteX&(i&) / Spritecount&(i&)ă    Size& = 16 - SpriteDist&(i&) \ 2ă    IF Size& < 0 THEN Size& = 0ă    CIRCLE (SpriteX&(i&) + xx&, YStart& + (ScreenYLen \ 2)), Size&, Colr&(-Level(SpriteMapX&(i&), SpriteMapY&(i&)), SpriteDist&(i&))ă  NEXTăEND IFăăăVIEW SCREEN (0, 0)-(319, 199)ăăă'-------------------------------------------------------------------ă'               Update framerate every 2 secondsă'-------------------------------------------------------------------ăă  IF Framerate = 1 THENă    IF TIMER >= Start& + 2 THENă      COLOR 14ă      LOCATE 1, 1: PRINT INT(Frame& / 2); "fps  "ă      Frame& = 0ă      Start& = INT(TIMER)ă    END IFăă    Frame& = Frame& + 1ă  END IFăăDO WHILE LEN(INKEY$): LOOPăăăăăEND SUBăăDEFINT X-YăFUNCTION Error$ (Virhe)ăă'-------------------------------------------------------------------ă'         Returns error description for error number Virheă'-------------------------------------------------------------------ăăSELECT CASE VirheăCASE IS = 1ăError$ = "NEXT without FOR"ăCASE IS = 2ăError$ = "Syntax error"ăCASE IS = 3ăError$ = "RETURN without GOSUB"ăCASE IS = 4ăError$ = "Out of DATA"ăCASE IS = 5ăError$ = "Illegal function call"ăCASE IS = 6ăError$ = "Overflow"ăCASE IS = 7ăError$ = "Out of memory"ăCASE IS = 8ăError$ = "Label not defined"ăCASE IS = 9ăError$ = "Subscript out of range"ăCASE IS = 10ăError$ = "Duplicate definition"ăCASE IS = 11ăError$ = "Division by zero"ăCASE IS = 12ăError$ = "Illegal in direct mode"ăCASE IS = 13ăError$ = "Type mismatch"ăCASE IS = 14ăError$ = "Out of string space"ăCASE IS = 16ăError$ = "String formula too complex"ăCASE IS = 17ăError$ = "Cannot continue"ăCASE IS = 18ăError$ = "Function not defined"ăCASE IS = 19ăError$ = "No RESUME"ăCASE IS = 20ăError$ = "RESUME without error"ăCASE IS = 24ăError$ = "Device timeout"ăCASE IS = 26ăError$ = "Device fault"ăCASE IS = 27ăError$ = "Out of paper"ăCASE IS = 29ăError$ = "WHILE without WEND"ăCASE IS = 30ăError$ = "WEND without WHILE"ăCASE IS = 33ăError$ = "Duplicate label"ăCASE IS = 35ăError$ = "Subprogram not defined"ăCASE IS = 37ăError$ = "Argument-count mismatch"ăCASE IS = 38ăError$ = "Array not defined"ăCASE IS = 40ăError$ = "Variable required"ăCASE IS = 50ăError$ = "FIELD overflow"ăCASE IS = 51ăError$ = "Internal error"ăCASE IS = 52ăError$ = "Bad file name of number"ăCASE IS = 53ăError$ = "File not found"ăCASE IS = 54ăError$ = "Bad file mode"ăCASE IS = 55ăError$ = "File already open"ăCASE IS = 56ăError$ = "FIELD statement active"ăCASE IS = 57ăError$ = "Device I/O error"ăCASE IS = 58ăError$ = "File already exists"ăCASE IS = 59ăError$ = "Bad record lenght"ăCASE IS = 61ăError$ = "Disk full"ăCASE IS = 62ăError$ = "Input past end of file"ăCASE IS = 63ăError$ = "Bad record number"ăCASE IS = 64ăError$ = "Bad file name"ăCASE IS = 67ăError$ = "Too many files"ăCASE IS = 68ăError$ = "Device unavailable"ăCASE IS = 69ăError$ = "Communication-buffer overflow"ăCASE IS = 70ăError$ = "Permission denied"ăCASE IS = 71ăError$ = "Disk not ready"ăCASE IS = 72ăError$ = "Disk-media error"ăCASE IS = 73ăError$ = "Feature unavailable"ăCASE IS = 74ăError$ = "Rename across disks"ăCASE IS = 75ăError$ = "Path/File access error"ăCASE IS = 76ăError$ = "Path not found"ăCASE ELSEăError$ = ""ăEND SELECTăEND FUNCTIONăăDEFLNG X-YăSUB ShowExită'-------------------------------------------------------------------ă'                   Shows the exit screenă'-------------------------------------------------------------------ăăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1: PRINT STRING$(80, " ")ăLOCATE 1, 1ăCenter "DooMed v3.2 - Raytracer for QBasic by Sami Ky”stil„ 1997"ăCOLOR 7, 0ăPRINTăPRINT " You are free to use this code in your own programs, as long as"ăPRINT " credit is given."ăPRINTăCOLOR 14ăPRINT " ţ Final location of player"ăCOLOR 7ăPRINT "   ú X:";ăCOLOR 11: PRINT Px&;ăCOLOR 7ăPRINT "Y:";ăCOLOR 11: PRINT Py&ăCOLOR 7ăPRINT "   ú Sector (";ăCOLOR 11ăPRINT Trim$(Px& \ 1024);ăCOLOR 7ăPRINT ",";ăCOLOR 11ăPRINT Trim$(Py& \ 1024);ăCOLOR 7ăPRINT ")"ăPRINT "   ú Angle:";ăCOLOR 11ăPRINT Pa&;ăCOLOR 7ăPRINT "degrees"ăăFOR y& = 2 TO LevelYLen + 1 STEP 2ă  FOR x& = 2 TO LevelXLen + 1ă    IF Level(x& - 2, y& - 2) <> 0 THEN Char$ = "ß"ă    IF Level(x& - 2, y& - 1) <> 0 THEN Char$ = "Ü"ă    IF Level(x& - 2, y& - 1) <> 0 AND Level(x& - 2, y& - 2) <> 0 THEN Char$ = "Ű"ă    IF Level(x& - 2, y& - 1) <= 0 AND Level(x& - 2, y& - 2) <= 0 THEN Char$ = " "ă    COLOR 3, 0ă    IF Px& \ 1024 = x& - 2 AND Py& \ 1024 = y& - 2 THEN COLOR 3, 4ă    IF Px& \ 1024 = x& - 2 AND Py& \ 1024 = y& - 1 THEN COLOR 3, 4ă    LOCATE y& \ 2 + 4, x& + 40: PRINT Char$ă  NEXTăNEXTăăăLOCATE 11, 1ăCOLOR 14ăPRINT " ţ Memory status"ăCOLOR 7ăPRINT "   ú String Space:",ăCOLOR 11ăPRINT FRE("")ăCOLOR 7ăPRINT "   ú Unused Stack Space:",ăCOLOR 11ăPRINT FRE(-2)ăCOLOR 7ăPRINT "   ú Array Space:",ăCOLOR 11ăPRINT FRE(-1)ăăPRINTăCOLOR 14ăPRINT " ţ Toggles"ăCOLOR 7ăPRINT "   ú Framerate display:",ăCOLOR 11ăIF Framerate = 1 THEN PRINT " On" ELSE PRINT " Off"ăCOLOR 7ăPRINT "   ú Textures:",ăCOLOR 11ăIF Textures = 1 THEN PRINT " On" ELSE PRINT " Off"ăCOLOR 7ăPRINT "   ú Sprites:", ,ăCOLOR 11ăIF Sprites = 1 THEN PRINT " On" ELSE PRINT " Off"ăCOLOR 7ăăEND SUBăăDEFSNG X-YăSUB ShowIntroă'-------------------------------------------------------------------ă'           Shows the welcoming screen and calculates tablesă'-------------------------------------------------------------------ăăăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1: PRINT STRING$(80, " ")ăLOCATE 1, 1ăCenter "DooMed v3.2 - Raytracer for QBasic by Sami Ky”stil„ 1997"ăCOLOR 9, 0ăPRINTăCenter " Keys:"ăCOLOR 1ăCOLOR 15ăPRINTăPRINT " Up arrow",ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Move forward";ăCOLOR 15ăPRINT , , "Alt    ";ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Strafe"ăCOLOR 15ăPRINT " Down arrow",ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Move backward";ăCOLOR 15ăPRINT , , "Shift  ";ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Run"ăCOLOR 15ăPRINT " Left arrow",ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Turn left";ăCOLOR 15ăPRINT , , , "Esc    ";ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Exit"ăCOLOR 15ăPRINT " Right arrow",ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Turn right"ăCOLOR 15ăPRINT " TAB",ăCOLOR 8ăPRINT " - ";ăCOLOR 7ăPRINT " Enable/disable map mode"ăPRINTăCOLOR 2ăCenter " Modify the constants at the start of the program to create"ăCenter " custom shading levels and toggle framerate display etc."ăCOLOR 7ăPRINTăCOLOR 14ăPRINT " ţ Init game engine ";ăCOLOR 7ăPRINT "(";ăCOLOR 11ăPRINT Trim$(ScreenXLen); "x"; Trim$(ScreenYLen);ăCOLOR 7ăPRINT " mode)"ăCOLOR 7ăPRINT "   ú Calculating Sine and Cosine tables...";ăă'-------------------------------------------------------------------ă'                    Make SINE & COSINE tablesă'-------------------------------------------------------------------ăFOR i = -Viewwidth TO 360 + Viewwidthă  Sine(i) = SIN(i * Pi / 180)ă  Cosine(i) = COS(i * Pi / 180)ăNEXTăăFOR i = -Viewwidth TO 360 + Viewwidthă  Sine(i) = SIN(i * Pi / 180)ă  Cosine(i) = COS(i * Pi / 180)ăNEXTăPRINT "Done"ăPRINT "   ú Calculating Distance table...";ăă'-------------------------------------------------------------------ă'                     Make Distance tableă'-------------------------------------------------------------------ăăFOR Colorvalue& = 1 TO 16ă  Level(0, 0) = Colorvalue&ă  FOR d& = 1 TO 300ă    Distance1& = 480 / d&ă    Height& = Distance1& + Distance1&ă    Distance2& = ScreenYLen \ 2 - Distance1&ă    YPlace2& = Height& + Distance2&ă    YPlace1& = Height& \ 30 + Distance2&ă    Dist&(d&) = YPlace1&ă    Dist2&(d&) = YPlace2&ăăă    Col& = Level(0, 0) * 16 - (d& \ 4) - 1 - Darkness - Light \ 1024ă    IF Col& < (Level(0, 0) - 1) * 16 THEN Col& = (Level(0, 0) - 1) * 16ă    IF Col& > (Level(0, 0) + 1) * 16 THEN Col& = (Level(0, 0) + 1) * 16ă    Colr&(Colorvalue&, d&) = Col&ă  NEXTăNEXTăăăăăăăăPRINT "Done"ăPRINT "   ú Reading Level (";ăCOLOR 11ăPRINT Trim(LevelXLen); "x"; Trim(LevelYLen);ăCOLOR 7ăPRINT ") data...";ăă'-------------------------------------------------------------------ă'                       Read LevelDATAă'-------------------------------------------------------------------ăăRESTORE LeveldataăFOR y = 0 TO LevelYLen - 1ă  FOR x = 0 TO LevelXLen - 1ă    READ Level(x, y)ă  NEXTăNEXTăPRINT "Done"ăăăPRINT "   ú Reading texture (";ăă'-------------------------------------------------------------------ă'                       Read Textureă'-------------------------------------------------------------------ăăRESTORE TextureăREAD Tx&, Ty&ăCOLOR 11ăPRINT Trim(INT(Tx&)); "x"; Trim(INT(Ty&));ăCOLOR 7ăPRINT ")...";ăăFOR y = 0 TO Ty& - 1ă  FOR x = 0 TO Tx& - 1ă    READ Texture(x, y)ă  NEXTăNEXTăPRINT "Done";ăCOLOR 8ăIF Textures = 1 THEN PRINT , "(Textures:on)" ELSE PRINT , "(Textures:off)"ăăăăCOLOR 14ăPRINT " ţ Memory status"ăCOLOR 7ăPRINT "   ú String Space:",ăCOLOR 11ăPRINT FRE("")ăCOLOR 7ăPRINT "   ú Unused Stack Space:",ăCOLOR 11ăPRINT FRE(-2)ăCOLOR 7ăPRINT "   ú Array Space:",ăCOLOR 11ăPRINT FRE(-1)ăăCOLOR 4ăCenter "- Press any key to continue -"ăăăDO: LOOP UNTIL INKEY$ <> ""ăEND SUBăăDEFINT X-YăSUB Smooth (xpos&, YPos&, XLen, YLen, Times, Rate, Lowest)ăă'-------------------------------------------------------------------ă'                 Smooths an area of the screenă'ă' Xpos&, Ypos&  - Start X,Yă'   XLen, YLen  - Lenght X,Yă'        Times  - Iteration timesă'         Rate  - Smoothing rateă'       Lowest  - Lowest possible color valueăă'-------------------------------------------------------------------ăăăăDEF SEG = &HA000ădone = 0ăDOă  FOR y& = 0 TO YLenă    FOR x& = 0 TO XLenă      avg% = 0ă      avg% = avg% + PEEK((y& + YPos& - 1) * 320 + (x& + xpos&))ă      avg% = avg% + PEEK((y& + 1 + YPos&) * 320 + (x& + xpos&))ă      avg% = avg% + PEEK((y& + YPos&) * 320 + (x& - 1 + xpos&))ă      avg% = avg% + PEEK((y& + YPos&) * 320 + (x& + 1 + xpos&))ă ă      avg% = avg% + PEEK((y& + YPos& - 1) * 320 + (x& + xpos& - 1))ă      avg% = avg% + PEEK((y& + YPos& - 1) * 320 + (x& + xpos& + 1))ă      avg% = avg% + PEEK((y& + YPos& + 1) * 320 + (x& + xpos& - 1))ă      avg% = avg% + PEEK((y& + YPos& + 1) * 320 + (x& + xpos& + 1))ă      avg% = avg% \ 8ă      avg% = avg% - Rateă      IF avg% < Lowest THEN avg% = Lowestă      POKE ((y& + YPos&) * 320 + x& + xpos&), avg%ă    NEXTă  NEXTă  done = done + 1ăLOOP UNTIL done >= TimesăăăEND SUBăăDEFLNG D, X-YăFUNCTION Trim$ (Number)ă'-------------------------------------------------------------------ă'  Converts integer numbers into strings and removes null paddingă'-------------------------------------------------------------------ăăăăTrim$ = LTRIM$(RTRIM$(STR$(Number)))ăEND FUNCTIONăăDEFSNG D, X-YăSUB UpdateăON ERROR GOTO 0ăă'-------------------------------------------------------------------ă'                    Updates the engineă'-------------------------------------------------------------------ăBuffer& = (ScreenXLen / ScreenStep)ăSprite& = 0                                         'Set sprite index to 0ăSpritecount&(0) = 0ăă    FOR A& = Pa& - Viewwidth TO Pa& + Viewwidth STEP 1ăăă'-------------------------------------------------------------------ă'                   Calculate ray anglesă'-------------------------------------------------------------------ăă    x& = Px&ă    y& = Py&ă    XStep& = Sine(A&) * 480 \ 4ă    YStep& = Cosine(A&) * 480 \ 4ă    d& = 0ă    ăă'-------------------------------------------------------------------ă'                       Fire a rayă'-------------------------------------------------------------------ăăScan:ă      DOă        d& = d& + 1ă        x& = x& + XStep&ă        y& = y& + YStep&ă        Found& = Level(x& \ 1024, y& \ 1024)ă      LOOP UNTIL Found&ăă      IF Found& < 0 AND Sprites = 0 THEN GOTO Scană      Visible&(x& \ 1024, y& \ 1024) = 1ă      ăă'-------------------------------------------------------------------ă'             Get wall height from Distance tableă'-------------------------------------------------------------------ăă       YPlace1& = Dist&(d&)ă       YPlace2& = Dist2&(d&)ăăă'-------------------------------------------------------------------ă'                     Calculate spritesă'-------------------------------------------------------------------ăă      IF Found& < 0 AND Sprites = 1 THENă        IF SpriteMapX&(Sprite&) = x& \ 1024 AND SpriteMapY&(Sprite&) = y& \ 1024 THENă          SpriteX&(Sprite&) = SpriteX&(Sprite&) + (Buffer& * ScreenStep)ă          Spritecount&(Sprite&) = Spritecount&(Sprite&) + 1ă        ELSEă          Sprite& = Sprite& + 1ă          Spritecount&(Sprite&) = 0ă          SpriteMapX&(Sprite&) = x& \ 1024ă          SpriteMapY&(Sprite&) = y& \ 1024ă          SpriteDist&(Sprite&) = d&ă        END IFă        GOTO Scană      END IFăăă'-------------------------------------------------------------------ă'                Get wall shade from Color tableă'-------------------------------------------------------------------ăă      IF Level(x& \ 1024, y& \ 1024) > 0 THEN Col& = Colr&(Level(x& \ 1024, y& \ 1024), d&) ELSE GOTO Scană      Shade&(x& \ 1024, y& \ 1024) = Col&ă      OrgShade&(x& \ 1024, y& \ 1024) = (Level(x& \ 1024, y& \ 1024) - 1) * 16ă    ăăă'-------------------------------------------------------------------ă'                      Store wall heightsă'-------------------------------------------------------------------ăă    BufferDist&(Buffer&) = d&ă    BufferCol&(Buffer&) = Col&ă    Buffer& = Buffer& - 1ă    NEXTăăăEND SUBăSami Kyostila                  WINDOZE ENGINE V2.0            hiteck@mail.freenet.hut.fi     09-05-97 (20:15)       QB, QBasic, PDS        649  42837    WIN2.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"WIN2.ZIP",4^6:Z&=31892:?STRING$(50,177);ăU"%up()%9%%%.-%Vg#-HKvSC5CG.%%=d%'%-%.%%&n%sWSgRfxeL$TAH26*YJlKmdăU"/CeIIA3AsFNxG*&BH%3JvRQga5$AL$$6(\YImSez%qhzYaalQ#LWqvLR8V?Sv=găU"lGM;ronm<'?GX&#9u<Y[b;ZWM\r=X.jE$m(%XiGt$ASQm9dx^jhtq*tDQe)KCvdăU"DWUX#M>gx(]ujux:rc>W5?wpFJ_NmdTt/?HX5M;ndNv\MNIwDNqB%d6OjqDcvl<ăU"XNHlQXNx8VdITsbwvhZ8xlnlwo&ui9>coVVa+N6rbvdZc+OV.gR/zuRHel$$ncxăU"]mlOtnfd[hEXNt^HEq5Np=5*8X-qHqk+7IqSvmxJr7I%Qi'-fNj*%5xlf(NwC8MăU"Q7ionx4lxs6sfvnLu>d+wo#%WrcoF9HwK-c.K>Mt2R-w/C+?WXxTfh#*.uS8hh&ăU"f&#h/=bxDSZ(]7?umLDm4dHx-kLD$hnjnHpdJ[b5VHncZxhHluHVHWu$,Hx'lTdăU":74gSJANzB2gaxn>KVEXwcxmku;JlOH$w>c[2^spbk3l??H?gR6e=U6v8?WZfm7ăU"$e0#XCL-p=W#W,;=Gc[2Hm$1nNZrYLg?k]>a=),3ELQ+.LF=nJ.hXcudU[saYBOăU"2Ge;2(bh#kFNU2nd-a*Z*u.Lb.%YO)mBf[oL8XZH1&:.D$&q<acX?\ecJwF/H#săU"F;Gn;>BFHGk$d#IK9n+[^J3=Z2T:1'>2^+[,v8?;2H:cw+Ik3,g,t3e>%%D3]I5ăU"gQIXoHD9)7lQ50eg$lsP-Xd2?f?E4eR6K/eh$0vAW4aw&B=kUTM^SG+Uk'S%/38ăU"C=VPpB'_J#Va0;i9T4.\=[a,7ggGPVf6eN9TehTY=RQA+'suJ$e[dzJ/euDVE=0ăU"sw1oa;N2l6ie,)-GTejLu=ERH3UOKMtr?+928vJhibtlf*M7)H;3f2mJ+ki?hBFăU"8N$lGm=RH$<jMS'l6Q=+,BP0ySVzU-I]p'Lc$n4B'0UYYjWNAjII5l+_-CJ'k&păU"Je[I17%Lt0JDUxd]+]J%r55/=K\==FU6WX6$-Rd/\?5g).DZ3*P6u0n&sZc_oyNăU"siD0AQnC3/2\5bKG(_o^xnLU8nH#LCGx\6=8gQ_Y]<qL\nt8=>s_OU?mvi3AIP/ăU"6g.[S<Qg?-NHESIq=LZ9#8IU7v1]0pM+8*N4^jTVJjIBXF1*#bB8n\R,EperL\FăU"SoQ>'G6#fGs6<BZk1O;&6Ft+U3[0=yU:ej9Q=UW5s*]/6x'5Dy8Jl.c-K;I0_r>ăU"cvIB]J9_DRVglFQ,'-uyio9vOP87>db%OnUIMfU37(cm'+vC69-Mg#ZZj4ty;OUăU"l5pInc5eKhr)f$JX#lGV$t#$&GwL5DGL)nv]9cLkm]*wE;K.'6edqHFJqP>n)<tăU"zt*Drsphlmc-?WA+YQYZ_eVCH[sNm6<lzrX++2LkC2(QXDxRl4-UlR>EaGk]\eyăU"PGm1H/;R7[Kresrd$-.uC$4#Aodb<9ff5$[NUY2&*+Sc<n#E?8b^R#.91J,cnmgăU"[_wU9&uX:#R5kS/7Z*DWyb3^S/7=U1GU^'5NQ1:QE$V/*$Ajtr*>9Q&j+o,g%^IăU"'_LAk%<C64BMV-R)\S=<E]N-l%iG'pPS);G+.I];B&XUv7)F'x=9s*EZEp[SDe\ăU".V[t%;=bEo6'?k6qF99$HD6mV7uaZ_&wYomT3M,,Z7&w<qg,P0Dk&QEGJMUd[TZăU"6XiM[7P)#JKMhKAb]wOE>cUD:HF;84C>]EEkU(NkSiTkFL)1R]_Iv..(TX:nyPXăU"fGB2C2tT)a[YIEsQg/o^:93LDCRfK#u&1$e45jn1O9=:F3(8.v^-,?V.SZi47rCăU"OJ1&?TW?k2IKe<>=HTSw\ZbS8=2$Z$HRO\OWBP(/YpkMKb2emO\Aos]t:l3vqQ8ăU"'I/IUas+$J,Sis:QuIKNQ^4B_tJQ8lU=a7L)NHiPaHF8G;I=xK:/6:E$fd4gdR9ăU"_^*e13OD%0E)9c2FoI+F^PuPh;aLkrIJDDAbjIJXPy.:j0I/(Paa\03idIC=JbgăU"B\Hx7K+]S)X(3>T*.S\-5B0%12R*COJIcSV^/%ab_>n]7*Hc63csg*4XX6x&FU5ăU"^m76ma6tInrO]A<77d$mnFEUwA*Eb)UuJul5NAjImpDU9(kvWO#*QL8960v(9qVăU"$<[b_='j]nBsw1.^2[tj+4*<V/nXhW++hmOV#*7J.W3J1vVaEd'b^Ubk1lh#Gf(ăU"fUeLeE2M]QOjHZv+]kSw:&Q.<oW$)4SgkZ3,YU3(s?Zsdd*IE67u7S3Gu,i26tnăU"[(m6N5Dg7MnA1C6d0:<eq8-H$&c?:=:+%AO;$1/vBAa\jvE,SM0lef<l'-9dKArăU"01%#Zvi'i&9BE2S0\YVX.cIb4U;E1\6c/<S>tW,:ADT'g2]XUkznqiC3F*q,yJ=ăU"OLkCqOSULj)AhkU7IL2/w;*^XVgTx=vi8tn*]>dLULr5qd&zv1n'XolZ6N5c[ILăU":fgTF'XjHIo/5l4HRJ;gutKBte7\Q6R4#+Wp^srm7ao4^^F-I.WrktB)E=u%g)PăU"j3TBQU#VN:$[&IM##3/T]s[:Ot+BsZ\CSJ<^KJ,UA\p#Y;4)=M*d7;LoZiCpg.năU"SJPkF/%CvEX/9ucZ&UM=UcVEcv:WKr]apb?$+a9%w7e7g_)Ro5+ru0FFdrDBJYNăU"R?w'hM::D%J$(V'aM)q-:x4A9r&mE%TKZqNuP\FjU8B$6X(UZ'&R0Opo>X.k(^<ăU"]js#-XTnn58Lkzaqj+3+X42AyE4\kOrS<[QlDf[fLs=40I#)&X#>>19C-i41oh3ăU"&]seyQ]s7j$:B6M=lP:nun=pQ?h;f'o/e*FaI1XAjMV].7J3dE24*[,7#)72bg4ăU"BAw*Y,mO8GiG1>[*r=)YnU&BY/CdisL^_kOg.W^^J)kY;49G/+r1RXE9[i/;Lq/ăU"*q%2#V#&P;K<Jc]#Lb.(M3T0uCR*+=R28z:*t6<Gne/VBIvXQ4kF9UA]z-i,WP-ăU"2R/Bl]SOL*/65'$<SXYCFcfwdJFt-)D/LmOZg[5W[090#4T>d?XlwQOf:vft4S:ăU":pMu351(ws;MsG]9>RFMI[i+IE:(c?u*VWLePjHPZo*3M\EUW](*MQqALMa/.\QăU"xoI[;IoChQe_UB:?e1L7'J\4[IQ'JO,;/U2+<i<P)[4DqpYxJYq/F%Y.,X2n>4?ăU"_V*nS-xJ;4&Dbz(GKJb^Ro,EDPo.G.#8sKQ71y]G$SHCG47JUFBaWEClejb[2ScăU"KkA%eJdVuItS*/2J[S1Tar(.#3u1#Oke[,q5YH;,,la?XIZ[yY;E/]V^7et>t/+ăU"=-e-sGew)/]A7tak[(OoX?wXD=Wd\tiq,O$^#GBt.<^2j#FGjsas(?5Nl^2A$TPăU"_rlJ?s\0=2[pY(-Gidv.xg$2bi4;p2mc<0L'^DfukuiHIlbLK7E#*+$[Z/'I6TMăU"^MGSt&J5\d[O)p,WLJjJgyMMk)d<r+Yc=4OBA'';r$YC\grIu)5=%t]1Im7qrouăU">#BmaB:%a_]G,3'b,M)oJizK>mYs9Gac(?9nOmoSj;AkwBQ2kC8/g5DFHptH_cGăU"A0'WhCNJeVHRX=DQ0Vjjlg2)g<=dqRi^D9qv:6M3H,>2I<BF%G:,eH/YTRT^tQDăU"$er-:Eo5i,=iT)OAExG=AGu&AB,EruME.I,<*XStYL]#6w<<1l'EW%d^=_M;*IcăU"A210g_qDx-[?(q,(iLvDh(J:4q4<d&s2_#w,b.nFEs%jXs84lgYHVqRkM&dJ6?găU"Utak?Q+uo&;k6FVgo.LN6JQI%.Kv_HsSr]K29RI:Iry'qGA'M[c6=Z;c.JHa(^EăU"g?jIpTU,.;$9#rSKJn2>gYEs:Ci]#yXsM<;1?H7N^)I17_?'7Z[>sY,_^-eb#v1ăU"Xofv[)bBMIwLfh*9>JgrvQ_Kn4J'W;uxaw,fS\=nvS^$QEo(fi6ulot-x-?Ya,DăU"]kuT4C4q74]EYh#vx'B*v-<\8IA$Z&q&f%qg=VAT<ZqW#wZIgb-6v9R,7En-bRMăU"6[%S'H%-Ll#>4t)4Q(\)R53Jy;]QP^AO,N(y)0qB]JRnA(79#Cat=7/]K]($SS9ăU"%Yq0,^t>jM>/ZZk(_7TtinT_kq,%lG3v&(0k##UM,6p?cK3f^D#tdl[1Cn'Q%JiăU".[%o&E/LwI:_M=SfR*JDN'(bDKR$EUJnCuErQ&+UVv?/#fD>7$BsQkmJE;9uV.$ăU"W]0iSZLE'^[K6IPQ]/Xm..;VyQ+p12HfbH7,+_MZZNty\;JN^>6o,\ogUC/<nA#ăU"up&#DYU?qcbW;;Q9H)LGQR^h$rX,S;y0PiK\Ei8l:C2Q>P8xCr_uHVpM/\i#sPqăU"y%/YmlHg908)g19/t9x=BRoBsM*H\mY(rGU8XrdALBC:mTep(G.Vt'OR%'(\o$:ăU"Ol9&,(lYKX<N#prT(1[4(N,9;BGxp>_WJT_yBXg:(_kFdF47QvuOz/W7yVPBtXFăU">*%6Z94EP\\(8f)Nx#*+,[x,cMNP6.[a+Z[PUHJpF#Z(zK-TM72LI$dd9k*f:^'ăU"[\QZUw]I7N_UoR$QGSZa%_&]rcC&J8lcnN7HbYpZ9j9i%5>.QxFk^/>?c;$c6WJăU"V;&w$Jabb<H8aTkZ>R&F9'Gthlt;PiZ,P?+%vV]MCrqY'mYXMNOLcfYF19d)C<năU"h?**p3p$ldLduy+5j%m]+W_kW9M7+h48Vy5FBTyzv)lQ2T\D6]6Ln:U2c#aD<g;ăU"uv3Swzu;Y3h67uEJ]Qdlpu-FwcZI?A7t:G;S5rac3&^\IF8mH1U:>[v2\,_*F;8ăU":uY4yDYcvCIVdt*&PR85[AQc'X$qr8&,Y&bISou[bShqVIc,'KHI?&nUL?%vXoAăU"rD&lS2j;+:%Ag06i=YUDM02G.So]&^4EcQpC8utaY#sL#E:V[UE8Aoz_YLeHQBOăU"/-Ub;i=nDY2$)mh#H-89BS-3f&80>;2-;L<)=F'KUKpTdL.vR0w*;w;yi1m.;HuăU"QC7kydQsO%2t:D_G0paQVKU_FNR8kakU(n0cUOY9%1XaVqRJJ6O4o[vS'RMTNplăU"Zew:I.97:E(Xcr())?4ew#=iIkik(-5$AN+xpUc[LMecl1mg4ebzU2UrW^$eW)1ăU"Jf86aYrSv1r?c%<-57_2t/$)Z(xI4?,;nwRJHsh\Zmj1Q^KtC?F0f4?,y;8aQtKăU"Y_k#m=c=g_GFbu<f.h#-hCHl-L57d)YNNQj\%2E3ENglpA_No/r95'vzU,-Ys-:ăU"k]b%$V.1xCLxFR]NuS#k7mBJLv?ZE?_=?XuPp$aeg-J9t$<S)=xI7,5-[WO'sSQăU"[:CH*U<uu6aIG3jEX7^je,AC/gT_21zFy[vwql+a).jEnm8P)_?]UQl]VwvH?ZtăU"'XniJ(P>;)3c)#0[y[?toM:(),QN/:pm.)Q.1q7,_e%F%maa3TL)goFx6D2OK8măU"]*=iWsR3)1&9gXuY%YqkT\V7H974;gL3V;,4\=l[?-T:2Y^fL5L?R[2/MO*VEowăU"S<ZV9E-*.;jk1NEOg;:n.cH/4ql2/:/AkD-[J2GyMC>qA9H&JNiqI\'9cHD'eNWăU"lsQaA<)\7m5,CUC&L$ARHYQvH6[+BuQ^BZY_WN=C4%K&-hNPl4n]>C^z#a^58t]ăU"ce<\Fnc?2'<APoa?%>H$%UuonZGcJZNWLgDL2zb)W^J&4A#T64ATj9SdjkA]-GkăU"TlTt#A?,,$9hs_jSmrW67x#SXt,<)k_fdKTIb.'J%*3TXvarIbGemb2Yr<?g1h0ăU"#qH3b]Vvksa=M?Rp?tUa#h*_Q[F65j\M]/50XfBv<r(^KZm>jvkZ_Htuar,\TOnăU"tqiDijxF+Hl6lFde*JQAm.K*/(SgT5b(dBkNhu>hud$MZ)/q+5Z,0IB/vm%\k-QăU"x?*mpAIBPK%':y.e).WC]W%+(vNK*WfrDA4/'HW_ZQ0(6PlHo1,=*T^(mJ_#]iJăU"r8an/z__YK?20&=WlGK3sTby3/fs<O)9rjq]070rfQ'[1?pW#Nn#xhd<M6:tMhSăU"Aoc:g&__dv?d,^J^Hp1sfr7l&A\r8tdAekQljOku,,'I%uHf-/2W=Mc64hl1Ye_ăU"VEdVo19qr\*.450Mwb-T.4ZQaI-DQa0A;E>)0)-G9JeDtCo*sG+;<miX4/dPWJbăU"#Y;tBgGN5J$jmhl1p#k#ut2Jngq/w0aP;0T/U2Tw\*3p:%vV[LXOSVk*7(F-P<7ăU"RDH]^qdtmKjCc=rjHgWE$ITA-h'm0pN2XGWMF\#c7fmA7.A*>AcEFQ%3f+v#fiQăU"k/v7VMb'M$a-.rZ.\wGnr)9vKX1BA5d9l'wz9/2gR8./)^s=9G,blin/Uz7:''IăU"1zSdSM'QnFuY$1y1cNHc)4$:$L:OjM*tA_Ts1+MFw?$D-eB)>CXGKqEuU6BZv,KăU":X'^W]1A3,Vkq5I&DTt^gD3Jqbi#absA_iDZ;YNv$Cniu?0dRs(]>wB[Bc'VPDVăU"0Q(7PwaPkj/c>[Pl*kDXWK<)jw_\.$]1pAF']h9)'/8BJF&P.^YRps?OeqC*P%aăU"Gc%&<9\rzm=J[*YLvda,4UBAL\^;1?eUGzP8'7AGH/V'T,]X)][dpKq66iT^MkrăU"NCi%1X78LZ*VKX1?d3$IfFR%Y,g9Y4?f<z(DLo8<lR$Tb^>(^6#In&'f)n\QIOtăU"'i6?%[&$7Q78HcjTP]CCCUN1F?Q2aWD&Cqg(UPf??%UP=[,V/DxdOMzxwe2u:0&ăU"%%N/oSe<K1Ka7()5]6wmqGn4p-+lW-ZjIcS=zgPj_hDwj\M,Xp4Mm0709lembL8ăU"HT^xwHJV1Y=s9%%a-M*0Rs>A.uGD319NE<7%BP4gBV1ZL>I:Ej,IgQ_iIE<xOfrăU"Nw<tWf2i,;O9h#*)I(<aHS8Hcpt^kIn-fCf#ZVSF16If^d'1iHjk?eB1QjQHE(BăU"EGT'/hp7/jvpuSCimuP_hIWV1&36/0XBMXllJ_^?spi=rrL?\E6&zv#3HRb3;BHăU"jBrVQ9DJ]hRtiR-ET-'5M&k?EC&#DrI:IF\U:nm\a7j0-7%ygQAN\U/[pD2OwfPăU"PHO,_Rg'aupkpe#Qu=\=f5]#lo+D,VHXEG^^z+E.p,Nsiq6OcZ0^:q^2;E)1h=[ăU"QYu4775_5>T4;fCwgs$jd_Z>j^HltX)%KTc>,CdNkfROS9+kL99cotVskT/T9xTăU":s4K0P:X2YdQjQn$)U/0L-?lLJmPtiXwPM8?8xZcSY1U,/?W&'IFtIM++Et5fY9ăU"Q67V_rQ59jGu8,vrmB[YYev9Bb:8Ahr858_s]Ym(%55Sl?7K%SzPKm)It3sIWD^ăU"m3A30]FN>\FwqpwWo;J3A#LVaj1rQQJHO#psK$6:m,'CMeS)#G0B<lAm3Zj[6HIăU"W_c2On]</9fI,t1hV%8-^SUV.ZYj6noZD*Dr2J(UfO4'6e5IbU,Q]BX8(?Q4b'<ăU"qN)ZBSl&FvSlAx$a&r.p8^Ek?tT)xDHZuVb>_qKanpeYO8ps.t'RH_lPh0-'Ua=ăU"2hQ)*%kbaK+w]fqCC>adkPj3e#Q\\,?H^ZP5:PgV1:X\skKS&U3oJ%o'S^SN#6iăU"4h2g?SI$1LSR7\7Pb9aWgg;zO:78q$(jcQ64&DuNDK2Hs3m8)KJ]V&yls0U[;O0ăU"2GupUn'9s8$r,NgvzeU_6fYC_md2rkO/RV0lgDct[Rt#+)\bPv(5Ac\rXi&6(A?ăU"#<ryTocCYTX<VO*D'p=j>67X\9+%R)0MK]g98MrUJnSd].qOwDJ%w];A<(qetsuăU"UFUgOta_lqq,V(9M80UgYm0-a-lQ_B*]%3RZ:ON#-c-&uDK^3F\Ak*fZ056&4$căU"1Lnq'MSKZ$RTr;W^0RPVMgqb#a#;?S5&nGc^Js<R2u/3']s<\Fm&wy=rr3CA9J>ăU"e/M3N=Wd/p6V&^o]'#En7^*U_NU>AT2a0-?]P_6?0$d?Jx?rVs5?l]c(ZLkcy(PăU"iz*=xhKD']w0Jc_HBiRAWIBqM=,ltaluc&chQ7;O4f&kkj*Dkefpv+fc]#GV$#oăU"T^KCjYQn53'[s60]Qi$)e\5WGdS*i%en\5CrlE5a1Q)P_d9;Na,6\Gq*imU]D>?ăU"uWEU7sp+=GStNimt7^6q'Tq2CD&j;f'f.&2:eQ##'QOQ-4csh^S:bZ-ck=/<iFjăU"(Ru^S)V?=e&\8A^BT2U?=>[wBFMJ3h2v5Us.XW3>.'K_O]B,E*7<Q,*WcsW/]C7ăU"yX$LZ*s3FSZ'rz$=PU=8:4sc)pgBfGJqfDS=U05*3=DiZDl;gZtR9E:(R3:jIa7ăU"CFXe1WqA&]k)3s(DZK]Gix\9wH-?huQ;nr+gsa;mzg6nRH=fEEn6fHk7\cc*R5VăU"sva#^W5YlD2_[PEh>Q&l\0s%<dQOBC0JI0:l3k,1LgiYa*k8VJ9Ir^=6L\s7GRpăU"fK]>HY$p:0S1hYGaEt(Q4n];>Ni]eGq1_b#AkJsxl5Zx<lzORiB\G_.BH84xk/%ăU",<5//a&&Xh1XWuV,+kM,i1xE?vifZ?2v>5eLE0P8>4ZqI-$IQ/]^4x/A(s$C_=>ăU"O9Yy,I4X;3+k:Ma,S'ehPH=>0'=cS\VT]D>C\(+*A2PlTMUybro2'e:N2]+q#L3ăU"]BiG<g$L0PT,,tOP;ATtB=EEm(1o\G^oWLrRZ0&GN7v]FDgngC=*omDk-MrkQp5ăU"+Nk%mJz^Z65L5U;.3+;;YGBp9WwTJQ*R3q0ck+pV438O^;[D/kOs2?vn???*S6kăU"^'Fo5u7^=)BTC5wN#2Rss>bHcVuVRZ0eBI.Ea/gC-&mazPO%?+:Xj?ktm5j1YZbăU"i#u.tmW&oq'Hi(Bk_6g;$*tORqvct^qp-9/KW/V>VtA5B+u*#_i>mh3JpFTd%m+ăU"%E?YN_ty4J#<fBO^V<-0]A0IPxG4,/rA5?t;%m_yV]ZR-1X$^IL[MPBgCa8?7VbăU"5^Z2sY0k2L8jnJ$KB:_6fy$^nZUaZCn*vDTtHO+Or_X.[,X'Q0f%#Lqx7R(TeZ[ăU"Ep(mbD/(gqigu&#/[g7;W''o00%G2Q$Cce(/^qxan_\ZJ;&%k66r$51/;^OH61lăU"_VEG0#]c]>84,[-1y^Q*[/';[?9,cJ2VX/C3[0dY%vjq(3%i\'*GCq_RtP:,YylăU"bLK87.s955#Cm?ZgfZ;F]]vtl?3f%Y%.35N(%z4-:J$JYfarkmSL$+)sNp[V(I4ăU"'cBY?\[*Hfe$3s#e%5;-I1mmf83R0JmqC9+A>OT)3YzhQ\-%TrYl'ggd#e+'+*+ăU";PoR+e'bJZuwZ.j0/suZQBEPfvQ5%:0?x=Ose)Dj7=.<+__y\eJIckzMzXmCARfăU"B?N1%ha)+-+IAsGVC4&g0$Y)1E]G>0=rcKW3+UEdCX8Ep/q3J5_B93BMOp:%^/zăU")turN_M9dh5\e*krvSqGH[(miPr.G,uvXH%[.jTg*)9?CW_dZU4s-Q>MMh/YFQAăU"x\?2'))#k/V1DoFSG_s8WClN-q^Ax#1#l-?n>N5sw&(?bf<q_npRYEuTwa_qonNăU"NV%KkQ[6cG5VTPgn5YX*MUSMf;:]>qmJQ(,s:knET*1%H-l3>/7/M'n640Ptd1eăU"vPtq]MuaPspax\cbkYOIY'FFZZoRBmBU6qaDdK(V=z;DDfFf,lejm_jnw$a$JQrăU"JCYER>OtKFRTh(#d:WBx'Jkatk;4&V*gDaX8.Qt-o?3p)45-hzH1F>hbmMT'KN%ăU"+yS98jQEs^y+B<q?+[_Yq0hh+gaDTX><4hWLQA1*70FPWoO#0KxMnla1nJq5ra'ăU"b%K=[:wk/DL+gm.dX+oXxGFG/d?*O\HoP(JugaLldnO&4ZO[i#ao:XQ.S)YOjvrăU":oU,%/>>X0;Wi:t9^Gb,GXxg_3U#BJo^Dl+fbrqpe8':\fZ5G#>/hRJPg$Jo-HgăU"MfcgZ-&&SHs;hjB)&t<c)u&cTT\($7Za]0M8s:<v4G_99dYli1(Nw*ey.\B-O5yăU"$&y<JFLgx?5-m+D5,)[#qgzeT.VQaT/mdrtGE9_&WFrOZuCgdcEl6LfZPEtik1uăU"++6VP/WE2=Z^,ht'CK#%NCkIvqkN7H%(J*d,2.Tj%:q<u$f]\<:;0cU?[$%&*mSăU"'9575LeY9ZaR\5Q0BEFsB/p?80RqakCQ=DG0.HIc'6;X/:kIX5j'_e<_mEaRV/5ăU"qB$_9OaYQ:-s-:J*?</0jHS/i1cNwkON+fx,>ud-b2hEaj$kYW)85vLv2bO:M/ZăU"'F/,&l3WUs_Hn0.t'j56Oy=&+.BI$'PdPaMq*SJ1ekNbT$/&VZ2+-af1I2[\cUoăU"99TQpH/?)w'.%DUa>eT8=[d%L_3M-^rF13;/rhqdY=^HnetSxHPnJDp(L;H/%pXăU"obcW[s?>KkaIQYE,&7X\V:jp,7>k*(=V<<;P#F/o71H>NqO92+qyU1?XG.5jr=aăU",A%a6rM,$?4+0t)[l4)h2x>,<_T2B>Q=P9YKEi(2u'j+(vj5S*#YWy>6&,s):0FăU"]HrG;cP8Hnt9/0KQ(quWqC/I7t[k)Pbt['[ddY:Q<_gKt7hmRvrMy5nH\Ve[gTTăU"luHQ[7qotH$FoF*lh[s/lA.6xqWdl1O-;3=K3OO*;Ty0ZI\^I*vG%4u8#b;_gcNăU"$TGoJj]&f<i%oM1W_w]qL/,Ta5V^FbFtU*%^u81PW)Qc&9LG\jp$hYR]aSu:,7uăU"9R'uS8NVcx,=Nr-^dc-1EO6_/%,hhDy-X23nilkq*D#(Y5OWgfD;Zd+2CX-+(w8ăU">pV7HNC7Y[?0N+XOELbsFQ'6.ve561jeLBPQ/pi,O/Ej_mmWn$5h%XD#p(NB:3+ăU"F+YT$zrjGV6V=n8w-YJg(eR6j.^zz[m,)c2+%[G>jRq*k40x'52bU3aQ9P#NRBkăU"Aa/MvBl)m\whLC[yMQO_U9I:*#T&4HXZoitq*b/gMyz<M9c$/HI\QDalQa%kCn.ăU"+,e=A;/V:5/cfvfc=gbji4uL5E6GDJ#_b';pyfY.M,ru;<9Ts7$^.>^ABvBe=fiăU"SeP/WKrYcGJDDzD&u#MYR/MN+m,Y-,s]jh;)hZ[QxPn7&k&%&O'R3mW</tJBO/TăU"%y-T^&r:8UIHFwB=KE*ot^WiES.Xp,-TeIHV:t/tNF*)TNr9bNd%4<-&sEG<0NlăU"E>mF?h_Giv]9GD?x<(emia+^:6#1n,N(p5n=bH'40PFC-7VoRdiK6R?hqpEnTRyăU"XJTV2Gvx?$H8w[W=[gX4+Vm$:EkiVPCo;&&B+KJgY4vQ3ESI\2r-5Xj0Oaih%$XăU";DwuZ[B^RI3h.$BqbUIJGPF*_g6R->I'\-y=zoWR%v5G18U&?7%,a9q(o.a9VD=ăU"DTC]uE+'b0ZUR]#7^%R1EY=d%\OO9,j\.3I.ySgF._FKmwUngh1Wgh6+wp%NjPlăU"g$vNUd*]Cr5)Vdur,,DKDP<<oXt&gl&d:Uqwzh4QToA*,JwQZc:DX.rd%$V)HZNăU"(Z9LhAcjVxo_zvC0PEJ7w:'-3OD?vsCHmku8(J;YUlpP5Se)LXYmr7YP#k.=$=UăU"Y0'*:gh%85ITr^1Wi,aS=l,.WUW^'5X*A<mVu3<uu<mc7'GWfSoPZ^O2DV_D#sYăU"qcr)rYKi6P/AH5HSYWQR%^^;IrVPdQZInu(e35M>%HvcK6$**SEdSeV(M#xe^>năU"B[FG3bN9GKg%/6$'hk>k?+eEI_[sScT078\ZEH4LWV3,S1_5ySpHH$B=leW(9cRăU"IAEKB,CC2J;aDjGBa*-sa_YnDhGcI(Re84*M\hD/V.kj$>ba_gWVC;D+N'P7n:găU"Y0l7+R86vEF)isCcc6%Ia&ps&6K^EiR:($j%%Q->)^+SjErn\w9ZjL=y$Qe5ps;ăU"[gF[e]L,^%=7nRhTaJ0YF>Z:;S^k';7S-+mtW*<bm/$C7U4Vr5n)g58,j>+51-băU"m(4l/8CLEW9m++r\SV/>(XDhmiNilNIswF)*YL?]1)&P-TvU5pk#7B$sK<0gNtKăU"isHssu/%GeTR#2mB+BP,FRK_hB>aUaH$kbqJUq:.0G$RZs0ERT]NJ.=g8*.1t5dăU"'8.#LW5-_/SW0ZM#*D:'RK$*(3f$D1:*bO4+SsySsM7PC;$/YeuLf^r&gHi#x5săU"(W-[;ht%cte1)=T]?%*H_B5D+IPj7p>-165zPzD=%B6.*6M,X>z;A7D,lVSqd8DăU",efq_f]<8W$K'3_Iwa,;4z<#%Cu+a_h3ZG#2uZgP-x*;-&X/;R#bNqi%<,-k;?[ăU"qb<K?db.h3emTN)'rG#cLzEIN%R..>p9_slqMYWguM.ww/^.nq/NAX?<0M$rCfXăU"98KiZ-b&tMyRhO6pNT6E%&X:L2zQYU\:f.$Yj)e8feKhy]9&V8B3*5qg,F4=\/7ăU"E]qwJm\dm46fJ:HUN2h+$9Jf<J[J6FEU#m*9hf87A5dW*AX<mEF/H5F=Y%_Y0tjăU"9]Q/MF0nC8Ns(1h>LVsWzrb&V'?<*,/.jdmx(5+ad$S6fqEq,O^'_E?2B?$q4RiăU"z?/\uR%?20eaj-90T_EV:xmZ%v1%;4/%x[$ua*Iy,e6'&0(VS<u:Q%*c*+.7tI:ăU"(-3yPh)rP*C3g,th7f$Gfi+gu6'T>t]4;C4U_WM[0]O;k^%+G5qim/LB*Bo\a()ăU"b-jsS6kX'B^d/oMdRuI9<o=jls8?q'up*c-K?%KngNqR<sg2&8rmooAAHhf_0OcăU"T)O?do:sJWeaS#j<K8./MmbAV'0esJUhz]\Hkn*GWMiud=l9Gu\0eKdw9BE1/7eăU"kpCJmBO*#iG7p>WZ:&0)*RNb%JRj6epqh9fQP3hu?R,2nc&M=*9<,Tse)PkfMI<ăU"B$,9:=vH5/a*qo6*v%TgudzM$CJ#Xd8'yWdTrC4:myalhk,0[Mx*:4OHb*^zk6CăEND SUBăSUB V2ăU"X_jMlgT%x8IgkARYGc;J1$yz0c?Vc*m_xRJdf]k.UT)=gHNF/]RozS:]fA='#q3ăU"3p#v/?&/cRZw]/&%cgA?YqReQ]BaeXBb(B-3S381xG2?T]%Hkq2NHlkWhCo[WxOăU"-ED=V2#$5u3BgX'+cQ=qg;xON7oBZX?81NYfc'VkUipw#z*;C)=I-Mu+M]sWg&+ăU"waaRNceE.OGaT^q8mQwR$K^mfgLTT,i=>M^]_=6V#I:z3b\8faQ4,RU9]mgF\pSăU"^15nJ01Woc=IF[yJ,%6wC3<u,L7,:t>L^TIEw<1MM=m9wy,8#HzCmkoZ*I/dR-YăU"Kb9J68Zp3xfsX)<uJjtISnfI<g1cWPpIUij8eL09Z+nJd&T3tMu1=Jj9_RNC<K%ăU"-(f4]Eapx+/74#&9tLo\4j%WaIv[f0R/[D9+IaKK1RODme$LILNbD;OW6K;nfR6ăU"O-gL2z)<Fp-uoxS6TZ?tHv-*kVExa$MKlfU^/fZMzY(7Q0CM3*n&-H*4r5-=3tPăU"t2$j[r>V_DQOR4]1jJjTcBwkyrTj=Eg54>K-]vL^/MoI2[H0%=#Y4w*6SflF=\ZăU"^1\?D97-5jCM)\F1_bhSSK$s95A=j/%:gi_mqTnWEIrK&#NzN/Iuvsb\Mw)hameăU"J<HOwcKZzudI.XteVrHV>_u$a?)E#w>p/ezeGW8ZG#Q);RCb'2,sE'H.g,[8>l=ăU"'kX)ADcL5yGZ3u?CDWRhYQDK>LP6Lj+J'JjpmSVr'9I[WyK0r2qQ/)]e-ro+kOAăU"VLa[Fq2y,U5.BAhaA7?#Uta7KIM03N8h$=mxESTkee9LIc*_^1W%Sm\$tP*gu1&ăU";fnoK#F9$9iS[#wIlcVOS.uN,F^ISW5$&1SEp7jPN>F>a_#D1^o#df<i)?_3/fNăU"Ld'u6a]=mm2s3UuMOx[AB;I\?X\;Yi\mwcB&yZtkskpRGas?5vLUk:B>NcNZP%%ăU"2oz?7]>8kCZk;b1&llNQ&Lox-XM1\uPK:lALcCcd0p'd^po+Ne%O^'u:)v,oGTIăU"e%4H;&]u0ec]a),8^[QPGeDOI[jDhj_EV[^Uk0,pfrITb:?husPUp0vQHVH&JbrăU"&)b]I#w3Yd:T(o8Yz5Ih(Yd+nYocEUz:LK=F)*yK:oDu_&yX.jw*qlT[zfi(MylăU"VI0?Ha$D\9Bf[K[6qcg)o;11#,cB*[*1S#ry9-/rZZlw9.XgjP+:>/i4i^WwvuqăU"9F(at*Nw,8p%94O9-Z<):8euxp)jXotX=$U>\mdC%-N91o.D,R,9X_?iJrd\r_eăU"2jU;NjxpPuZ>cw9>.(,gOZ?v?&,tOn^p3MnoZ'Fx50>NN88onI^=TrZGV:%m%3HăU"cg&^._M%o&3.^eJyakKto%-<BN>KHAD8RAvIrr9S\;m<]DHLDe$<0&EhQ[V*>PeăU"3\%b'9TGz9*33IuF:()YuG]&dL/^I%T5j&]oU]LD0Jz6lJrvGZ#G9XT-/80/[^6ăU"sAJX*eaGY?o(WbHJ_Qh')en-%^/cT*k4f]w(\3QPvb_K4,cbc]:'YLPd4LQ[ac[ăU"(([FX49?3:P5-?.)K9Y'-)Qa$PTd^igvr_sBCsj6cTftfOxwUV6;N<=jI9J7]%AăU"-d/G<T;*WLWChJk7,pq#'O9TGKn+.f7UIUvh*5P>*423)1CG93_liVf9wn0Kp[\ăU"o[5ImT#+9jh<m+\Bt&8[JT.5/02gv_x+W19ICcgW(#tY8^)Sz=0=mMBPf&PGOAQăU"kVmS^(>mG)dGH7%JMZv/h773;6IK]<\Q1?1&B6ng-f\sTYF7yG7.NX$2tFFMaZ.ăU"i(E&](?;W*>5_oUR'TH,YWq5?tRdMFRI6dO#G&Lc\6i1?BsW[R^>6xTM/krN6fdăU"Da.swLr+'CXf=Dp-0ta&oyZ7_Z;A2GY[[o*Cp<J/9bR9*JiSB^R\Q,fY'>PFt2XăU"jrW;L;FjVis9al&Te;L_X]>_]DN=Ps9R&S5On:Dnf?/8M)db&k7C2w&1VPdH3>RăU"$G$^R6ep\v]_V)wFh.kshZJaK]4eYQkpI_7DM0ODJvlJ;NgZWDNNT.xXWt$vDHQăU"t-jY2DO24T-xjfu\NOU_eB8\+<C<=o]Xdt(QLvgQre,%t,A'wCOru\5'V5ZklFyăU"pL[1x]H](8C3eD>:$?z8e5$h3\;3kQN.sE,Q^l'=K.(>:'s\*X*FBkfrT(,[z^&ăU"'l9Rt[Yvs9ir,*-TygBuZ8t5[a3zR-(;%#F1m*GTa98:(hwr_DVs2hMb5b=0^i:ăU"*[3zNQ16YCo8ng\ak0NpAn9lvDb?5^qd^=9a$TzomR6#e*LKh7PdPv3O8=-_[[dăU"-MOvXM,NvAS]$g&e6:x[qz(ZD$O57OvlS<;FDhoP9XYxv55C^iV3lD+W0>F&D3<ăU")Ga\%3Qy>#z55'R]/HVMn/2g%S<.jC;6:fl>W3c/Jh^4?Ae3'%_9NUD4eW.gmz3ăU"Bp6Aga?CIKyCV8m,*NLD$%y$OH\?jjW7u&'u$\l^XE=3pS#>NwU%:E\ZLBrOe^făU"Y<&5).Yx$C_9cPt=MpI;q??JR0^#5K0a$J8N&q'j:hwUUsen:ffJTre'aEG/g>găU"9e^KN3//VD$2L>gegoph21y(=q%Nc_tkTcS1\:IdgTrVi;PI0DG-(tz5(rE(j2aăU"A0Jp)X%4vKgPcA1PU)6/LC?),OnKpjTg8c_7o,B]I\fFsALHESq_(Lv&m(/Pw<qăU"\[USY>]bw.s,AU?&U+B%m_#<%RGyHLS.9ehyz2mSeD<rb+9/=trNGQtdS5naAuuăU"38'QmJi3&]sW>fB3Gf:AVO,l9eAHRpYF1api&eh=\d^TtaHa4&'C1J5v*sEZ#GMăU"s,#n3r'OBXJtv<rwv[#q-yJgNT)'9rC8>)ogeL4gOzU0+EV*(UV+u,IdgcU>HQnăU"L,y68R7=e,-FF%Hu-tLqoouIsfq.qO/Z+uveK4'6e$L5<2Oo?X-mW_HFkh&J9.xăU"D<T=ZarGQui_L$J4_YnYWy_IJ/VGfBh53XSVwS[g=2YK';n#2*Fv2dI4.<U^Dx7ăU"(*Sf0;l$,aT:AcoQ>,=AVg=QDAQT)tHwEY+dUs:c73:gATL-qm-Ur/hwkoQIRM6ăU"AkJZ?RZ.n+vlloK:iD)ZdiF0_JsAd%e%lvE$BFrMCTT1H)-nNSeE**yIitGb[Z0ăU"+*UJdzr/PSINtLzvTV/U5d<o0o2<[Q<8%^Qxg14x]E>t08ws+rNMp(5u3IV9sqRăU"Qb=$PO-,ATa'4zMC'YOPpH,7dNsxpnr/nG61U,7,Fm^of,*6Ao1VkwzJ$vnoKBsăU"xm^w4z6tcsAPQf%U$oNEF*f[2(H_FR#2eUo*nA,-VUqIkn*?J1NupBm[Q*w1AP(ăU"#z49()fkK8\bZu$q2-RSc+0^^u<lFS>*m79Fa)3=vMn;&L'hFWWWWk7r6\'G/W:ăU"dGb>OD&VZEacZ/xYO?)YW(??TxljNPWpyv?#:qowD[N3b5BDS8p;nAoi%k[WdQ]ăU"5c47WFrN&:4b&XQ&TKqf-2gV<;4B*hfEX.%Jy8^H<P%_8?7gsrUOD+T_#0e[39AăU"I3'2yJmPhc9s0<YJ$XYhA\WR0nCzn7jOt?4CKauf2m&44k<<\103mNJeMFu&/ySăU"JT&(voyr%kM6ITGDxX_AK7cNl7j^R&t\Fp3IjZmls3YH[w$jsQ3T<4.K.?DOLU6ăU"cra&-V/_?0/?8:Noet-JaRBF0jAb#/J7B'iSp](%GTms'IG395PvGlhKQ2T)ZYyăU"KN/FyGnZ-ghD18CJ>3-DN+H1mM9P'S-+bNz+t(rC(QXJu-f/v>$5&-2S-7cJJrjăU"Ap5Y32mq'PT[Q<cUJom,kX4Y)^IcBW7wuHkuJpd*h2rQ\u1rh2G-%_COq0Jiz]$ăU"?kIA_><YfAmXaR22J>[e1Q2:umVT\bjfCkG<D[uc+pVVa(AA:=W2GY\Lh[.;cQnăU".:%o,bbVV'^_g<*yF=^2AutLkg[twT75t/#$FT\UY.$(MaWu>U1]9egF18qk#hnăU"W6f?9%,/$u1dhl/3*jT<)eF'UB[\[I,=(rFOL#4j>d/AO]4G*,$>Fc=1t?m\9u?ăU"c/Z:()Y1?).LB/+]MbbDi4o8h*g\ye\ZGN*jl1F*Pul8'g$d#5R)jD?O.ZkIGAlăU"\FOgczCqj-gN%4$eA]\[^aI3BVG]kXq>P<J0/P9t[?#C9/1W84MBE.&t(B)F0[9ăU"Uu*Hn7nAsA;4l5DH'U6amz(0e<B(Q,#-j'URE6FfnSeq6H,Ovf%BZ$RH5J6?<x:ăU"r?.(maTqbO\,#6*[PjcSJ&2bjRfDimgzsf:]3%sc4,3ui^MVH6Hwhw-+JDE#j\<ăU"[Y/p1OI2yTMM'w;-+Js8#j4JI:Z\YE/ZP9U9&my<1qPJ%:B?:ht$$KSFi93lfL?ăU"??%/2rBhO%2.najsC*I/>[R0>J8;e]E:pwi_*dvr-Yy,<-+?uf>.l3\^/L$CYh\ăU"csST$U>V,8]#$*8a*]1^(V2lBs86M%rH9sg5SV*VMzzdFPXT0b82;t6:dT?nSdkăU"(.KH4WXGNwlhec9Zh]ZFd#$\6967qb29z3&,VKNr42-e+bhwnl^P(%4GNmUtC(SăU"yqq;0X*W?E&em_g*'F\Zl0.5HZZVE.ZU(4N)o1QR/DmGTZ#\lP=uMila1oAgCp6ăU"8acAc^NqwE;u>MUsooW='kvYq.P%WI[gY4/)zxEP^9UFrpdV/A9nLy:0DRk:T7păU"7j2vq/0_mGhjwBkYDAMh[nG1Qhe5gTZ\l$<3PYV=>6V8SJ+AO7])wO8,eYmkGrvăU"Cc,qK_-%;5GWI+,YoL1.v>hq[X?Y%^+PK.Qy-U0\Vy/aub;+ep)urY0-gGVVQFhăU"CnT$$EiWg34d'MFU:m\_W#%A51B8)YUn.xSpqV:vs3)sK2l$GC:LK+?[PRiOo,HăU"Y_/RB*##*%ckQ\.<kpP81UQ,DbY4/(*ZJuqY-\izVj?e+LW%h+<I'C:1nd6YgJfăU"n=JTEci&M%B+if-?N$HVr0_sMsyvf&s3=vbMT<V>YCv[3Ls>=prn+v1q9YEKh38ăU"S,FQNkr,,nO%kl)kL?m[X:w.%(n5+dJFC??oti.4:<8J,=Y'Y9wSf;:s&,_;Uo[ăU"1^9OU32,/m7g&AWo6),Ol'e8Tw4KsG5^M_vl.^+uxl5cW#-;gP&px>W,teB0T86ăU"Jfi^EOuxQ_nw9I-%=2/rhFIUG%Z,Ii>BJg2$(7XQhLIlGkB9Lt5O&L#'A(g(2vMăU"cWt)>6P,$pxaduc\5m4J:6(IDQq#F0p%#n$UYkhZ1a$]K??Gsg>6:L?)vPxAe1(ăU"v'Gso;Er1dS&-K2hQYyn*;)E8'Q^v#)QhyNWyR.6NrX_geh2nW3j70PJYU^>dOFăU"ptZkE;cMgC8/ab,nXSu&H;'1W^(N'bRQl5rLi)n9Z:yurLn*_,De6S9PUw:aLZ'ăU"][4[Y#r%GCZxfBi/G\2(z1cei=_.+f(lU1Jr2B6*:v/iN>XA2A$)p3>2<6)kye.ăU"3o1xLjcXw(GxqQT;d.X=]);238(*M;f0S&;GoTM0MeHrWHAJtZ/.Nsf'6w<u]+TăU"a>HBcW?e=pG/aJSbs*36R?Jh:K0FNVs(ayD22AtH;+q]gPmNnDX]llSUW8-16xXăU"mkd[:C$_M'9B0U]LCJKQ%6eH0uQ$Z7/Iq<#/x>#<hXGy8c1>5tD8AWB<3[v%$p0ăU"oocS<Z/nIv:GV'q;Z[';]ak0m;;)$eoH>daR,CBbmFc9Bmq_b).qKiMd1qWL/6>ăU"*tx+_bps5wAfP&ZEu9Yx/HZH:]:xpH$\x;EUNfd2&cO%Jb?ad]%(e)Jph57b*XPăU"Gm#$Fo8-HT)0kmiCQxV'bP%;kT6BY946X*&o(;l6.B.:>c7HlAbIwq?c;Ci#>IwăU"eUefs0*Ke<;3DR3bNPu[,4gh/dF7UP5C1zPBEdDMz'0pKybi],c+Z7*.OlrJh35ăU"L7]x^1^M&uVO[6oOd-L;qLOxHh+iLGyhJM02V$<$9\Cr.vCtMZqMYaR;NQvoR#.ăU"kVli.JD%DYARYZkj*89:(lvRSKor-)\PF8aFfdJBOr+qJQe]zBg5A2\=Oym8l2EăU"2u)FjjN9k_cVM*=%z*B%74>BnoID7K9UxDX:-oro3K3+mm;-EI<7ohZ[iR=wa4NăU"JR792F=C08Bjw$X_CL[Y<9BS)%q2mj8o;G+R^gKQM^a7,)XqbNMM/-+tF(T$%TOăU"*66T5DBQU&Yf-'dYV[oeN)6T([.)2:8:Ft3zK?<oIk/.JT*TQ9EM&ZNU2LIa$dkăU"LX5a[7+Kc7/'KbdF\>=]E(WwHb1?Val#WEF3J'mCleQ0$uV6<8uQNX:N,cBkt.PăU"X<:RJ*C*ukh.Seu1<MlN+*TmA4k0H7B94YVansD6[MXdZ1V6IdxtB+[W.,:4HFuăU"Sx9fDkK4RLY-hb),:Y=s*(>3S=p_S;j1*es2j*]j;P<;%;5w7u/a8<G1W3;1>9PăU"+KxzR5Z;R$&.:7Lp8KhrFX3T>bTP(qM^&e-.*v.e:TOlu0o2z5#_1'r[tn<Fa7.ăU"L>mKFgh#1T0JZTRI:kiUF+2fh<LK1LlllB2R^(W&A1Gte#TR'K6tC%<oLa,7]xPăU"f6>:\=I\ObKh-v:,gL<DAiwb[jwwD-L6fnmy\HaJ5vLZ4bdW72(a9i'+]zjhXC;ăU"ecL=cgl7q4xSTHeFX$[Enc)vt_QZ=%5C'Tpp#moRy56_'XgR$TEC)_m+pO$q9roăU"8o[qb'$m$]#6_Db;j06Rpk:/m9G,o=:1S0p=bTE(5)c'[>gRN5Mtmhiw#i4J'JJăU"If]^60s[Pt&y03iNEC<Y*PH_^k$d2<*Ks#zgZ/wGjE(#B\QuJ^>m+3S_(c*G>*MăU"=W[hWNrhb+**2OFB&c'3w3EF;cy$n8/&/h370SDrJxrZSwA\24;+*gdldsTd7f:ăU"Us643%%BK^HY<x+WtcOFc^<#Q\a?ZkE#to&mIKRg2##O)+s&VN_J*/4TYXs>mVgăU"V7EA2jBQF?Buuo?if,s.P$$;G]5B^=GLAF)vO+,'m;4aOR7nkBQUn9uTti%e]Y&ăU"EEc.B,muEG;h84..;':D0%.fn>HMK&A\;0UfuO:2<\p?$FDRt^#BJ#szOq_19yRăU"]Vv[#IW2aj<70*<(ZLx;rRiW)M;)h);nd7NL#/%IRRT65Md>98MLPe+EP)j;I'căU"(G,n&FZ[z6p).q^:o#eskXL2:1<;%1<9>J#&Zh*?SVSHJG*.=xd)p0KAP\u9wm,ăU"ZEu?P5_Q$JL)[xMPOYH#p*&lgZ<xQbo,hwXYIIhCVN?YG7'uI44KOj*^*x+'3:FăU"VhNrtY/rAWuIJ)/,tnLiEL1.VL0Fm;nY*1c=#_b];rV'WShtP:>2k>SYV4b)0]eăU"7[=e9:f^]]VxAh<(d>t-oE;dyixDXeCtEQW].,U<Z^ihG_r*D(i7:)BaKl1C62văU"Y0+_q8/2'M-jw'4LQYA5C9jpgA(Xwg&2#)zkft+hIt/5Yjpg%aFkWvNjNY_2pd5ăU"UNKKBdsIEBKb/Fvp%\B3anI+H]f&csnYDv7UoUY]aaHr)x%CNv^c4YecRqos^-FăU"-kx5t.$:Csw*RVo;X$<aCn:_g:Z20q.3_M[FL<W>mPIT/6r$?UM5gCE?P[Df5q#ăU"+1xfQXaB#UN[7)O_MYYo:Ld8kE+DF*-o<>HjP:>:P,2Spc?_NDUH\akMmlFYAiKăU"EBLOoBo*VDPAvl[3ODc>.Ff2)*x_nvLf<1\^#8#=]o4*9GRN5ZC*2fA_A[5Rm[#ăU"cEk&6?i/Z=T?/*Nai?RpPTAUdnLE7;dx[Bq:o=^6T#c<v%/]Kt8obp1[aKtV'/JăU"xa8V)9YRVVJudKN3wOYvSt'^4B>BJER/.p$-j[F'?G0_AfnSM)O;hvXA;ho5GI9ăU",0&20lqQC9\^<V82TSg9$=c0o+E&FA*O$KpCz^=-=58>s;Kej,$uhL_unc$qoWjăU"[5NTrMWs*7y)ND\dhB)5?dN#Z(EWx=m<lUb.0P-$GDL/uYb4gp<Y0's[_Aw:2^zăU":a/?3A(>V58PBJUh,X68E:?Ov2y).OvX9u#RU<&wN#DeYJ&:(Tb3bT=K68#n?l.ăU"^rn_ol#5LLH#Ujc>h<OJ'eB++TjV*34(2)]]GH\;.h18qZ?wY5n3[g;#/lG^k3<ăU";o<?ZbUCRmdu5S.dl9C.X;r%I5:X-VRm0TpmcepL]wmmbevkY6>g$LM-kZ[_#)4ăU"Frlc2BmcoeE=]OZiDZM4vWSWiC&1D.iVIU?q(UH#x0HN;$579Nift,\e0%o>B9xăU"o0JXB%r9ASaI0GO(&i.\*bfRk8#w-U;$uTV94mj.1s'EKgijAp9B7a7gBO$<QL'ăU":T0d5c5>ipMGb4R4Ds*5GA3FH_fu9%#maQOlq=Qa\91g.h2&KQO^ta(iPEnINh8ăU"[O-;_a0:BBi$EV[Qs2u.9*'m<$='.?7VA&S2wc]oERh32eFgTO_w9ONsndmV$B0ăU"OjoFv$VK/k,&Dx^7a<Ykf[(tj?vdhJ9pltWTTY6$\0a<S+Vm-?r3=KlS0ZHt:\jăU"k*0BGDY2QM?y$<hy3C9n6==%<$lthi(v$7*MCXc4HL0&oB3VZ;TvJ(kM-3QUB^săU"MF<GAqS;Dctqb:&-rd.t)nA)PBaD5UI4n.57lSkV%E$V%$:4Go_PRO1v<L$#+eMăU"Y?\Egts6):zM3(&3J'_>gs&f.gVA3GR?U-g4Q3:']%\WJh-UNR#VoV=P4rgx9<,ăU"^L;F(hHy)tRA+esiNHFIQKF*:%7GmRU\:$]hu],h6ShIQ0o,-gK'89irYS$gi1>ăU"_RV[A]]daH*&mKDW/*p4Fdf-3Fn*7wz.AaJR?6c=iBUmb=Be5_tOmF$\,Iv=+SfăU"gE&vjZ&=FEi117)Lz-/S>\/i?O7FUqCv2K$d)RX/ByI;kIX^vNIo<7r-JfOBwS0ăU";[hihdk#f0eSTh0>i*RUO?X/VCq+-Z*.FAR2HGrqzhB7YWFhcE5T$%=sC89KetYăU"GmY,UOCMQIfVmWTj+/-]bHn+h,kwRe):%9IGuGC'lf:p$=7f%<l[z*alwRSV\jrăU"4]KxZUpUSTA-\-JN%^ME\Lm\?Q8aYlP^F0.ODqUrG#Ek=d9X>Q_Re%V0b1)$mM*ăU")-?R36N2odD_1r*vfT9+g?kY=IfKPZ,#3.]VSg%?QrQc=iyVEQ:/paSGba,<z;căU"D-#jqU5f#8-]iHek]IWfI\I?Uk%>/5dQK_2pu6E/+BGbcX.==VU=bmp#^<u2)=7ăU"_=cj)0H2VUWCG'M.ob/UIY[wQ\gT._>nD6WEmw=FknPFTfEA$RxI/_3sNbN$:7zăU"UhL#1s5J:4FB0E6?lS;.ZomEV;n?i;[0n^Ew<k/Y(AOaQ\R[hh+$\i?mN'?O(EaăU"oQn\(.9p'UQLGWv&,G'^H,mjb-IZwx<9U97[K9L&iO-J8u.kaa(]0IfuiC4VLc;ăU"mKb1F3tLOtvB<4OpKVmc-g.BR*atB9:cns%?7><hhx(cAPk[U7',n\t>ELVlYJjăU",hRw(=OAs69p[=tm$i$/\<.,9vLDUij]?'TgB%-Fxg&,(arhePEV?(GORy(<ia9ăU",^ktET-#sLN$i&nY]sm7S]$Q3#OC8%WG&Y+E-NGaAajD]UUi-5k*P=enEVEH^39ăU"D#lQ]b*'tJ/pKUwuG?&y2fd&zq2-<TvQF&p1P6+lqIy:rH/iIebh4bP4c1H1$a>ăU"(%9SN,W);qNGCCLZ\>TMNEYOwq'5B#V4])1HU:b8$=P69WMME&s+eR/IDdRFCONăU"=J4<q/?YJpXyn[VnVjbBd/dW)wm=;1Cu^RS)eg-g-'E*&7F#?>ARG06cjr75IPYăU"kRmDo,ed,]b#+v>k[(#$]Bo8;0_HNNuu(G+$23FA<DcP>48R^q<l)[9gfln5(oUăU"WV:nu=sN\$bStD*7\K;+\KQDI;$]U6#eM:Tj5UPM=g1#xHHXU&[+b]KDVH#;HF6ăU"&R0YG[TEu&<pfqbr<#'>'T8deYs*m/AvPh%+#R\g=iP(/9](Fq(9mTli>vl)^ebăU"Iz-)0np91NOtCWu*('o&fUx15G_\A<f\:m7qTl42pw8#5\%Wi04:J/Nk+cQ[VyuăU"1,djA'[6V=x[Gn\wN-\>5;Nn_Pkci,D1sb+jlt4]7ktw\>#EFL1zu&AV7HVo&R0ăU"tZjB^C^*l:>.i:+cqhMWE)H\X0_;^)rwqKXtBc^>'&3Ne?QvLKmNnR:.>1/P?;GăU"t^GQ5IYEt]8[>=o^+igsV[nRn5sos6TiS2lODjdlK*f&:vtMu74PYUXxTNULiiQăU"0n)lP%%^oqHA+DT$kG77iYE,vZ#A=N^\xR>J;^9vv90AKN;LhW;?Y3Y=L8'D_vuăU"A%ccdMetwKT6Kw4j2gGhe3a]#sp)1oL^BVKRPEaEW#0=&\DV3*GG\D+fT]QQj+(ăU"Fx9<J'k\THPSeaT/iCHE3if%$][G/90ib=b5Nch/JVuh/VAWh5a_iY9KfJ]HGx<ăU"TdtB,1BhAgj\.RL;X?LP:br6GmI2BE##U?n2D5mZLK+=cd[\/b%qj&XDS4v>>jsăU"\Yv*k7r$7xa)SIUt\vLnkH?CHi&BiyJ0i9'&JQy^EMivG#$#],W7da]x_7#B=/GăU"*2F1:-v8A4EpWXQ)xslLhNi]ic>:?=nqzHZ0NFOzikUcwYVXWjaBDjNK\&k;fROăU"VX\7g=lvQk8,OYa6&RT3Pv?dQ*pR5$&]+;B*w'Mn_q\1(tqKxWXWfcN#9IPlI0<ăU"(w4j44>k?tQ8q33Sbng$)6GXPB2I45>=RV]FUFS8uSpX5T^FdZ7_LEk=t+K*F83ăU"ZVEeT//^;kJel-AY*M9p3rT6QC^*DZkqI6,mH,pni>.bJ/Y==;<Gaw1Gm(WXM);ăU">X*BSP$t,5wO;[hcb6w5/X_f^%Whn/ebng\.sWhmvBgz?T>3^_I]TasB[OkBio%ăU"gqaWs*e0qKv3A1DeMp+bBO>Xt),=^5Sb-byAO7K9K*X6U0bWmPqjLLy$VE)kh4VăU"Y?Gv=sAs%agsmcRs>uc;?(W].8E)7E99ZYn3kpG.ga^dd?)>HX_Mpweu,Qf#2mVăU"W7[m3pA1sBF\nn>qb.'KlBm&*U,OMa^29Hw?WWHo=mJL$]r6*6YaO[i0eqhlDY2ăU"Uef(89]5RuuwXlmfbg]snGFeuHo?<bzQ4aI2y87KMF.e.'ByRGEVF8g7X+4O?ZGăU"&ljS\5\0GGi](a\rGJ^j&bMk<=Usfka,9v6S+<KV]t,?phN<%C+D2Hdx)u:[r,:ăU"O_hNX[$1F63K0a7g)9r[rwk;;NeFHXIB\VK>AOJM=oJ\V?h\nDYW,$B%9xU%sM-ăU"L?8lbB['#aE3'yJk<8B*TYnw&JKiA2BkVrPf.\R.MZT/XASCT]?FCKh.<4/mk>văU"mpC%LziS$XDOYktdy5ptl#6,[s/067MrsAq]Ieos4R,/2RJgoSZ)#SwLq*kwtUlăU",g3deVDU5_Dbt9fSH%$RnsFcJ]Vz:^uH\$DfFxeqFIpkmsd(5^[FYCtYViCV^1păU"XK%x4=SdO2rI/\Zh8i(hI<HX4KJ\^FG#:U7Kcn<Ywn29viQXA4obfQMcQ,hQWMHăU"Mh\HU7$]V8+;a&QdDW^brvLuEmR0mfDO?_r$dm;G8lWW%4^4=Oj%Z'sFFDuoU)$ăU"0H;&:r[AKNu'reMW6EtLOQ\dJ+:Roa8:T%bim2I$b.;U/,ZjQYe;*6XkHV4eNWaăU":'NqTb^6u]l0D-/\[mFOpwc\-hHe\bM59)O?cT$JuyQ9ThGI\+>xQo+_m5MI-<oăU"YNTn++:2<Nrq*<H)[sXkDUPH<7lwV>Yvw4C*#QZ7[c.wa]Y49q2aB(a+5GO,:puăU"7H$oJxn$WcB$(i(8a[Pd8XA.Tf2rm32pOO<vcdIONB?bMsPMtQ_>J.owV7t7#W#ăU"A]5S,:rYPkbuQmOBS^X_9c&9Ja:^Lvo75e[(GJu&5%'aJ8Pe#U-,=pD2/RqZ0k8ăU"IglNna86hmXTG/Rjc>G8:]jFvT\A\F$<m<;to>r?Z,rcki(*xgc9pErszd8aD%zăU"&7^ISt$Ei;1xnLE%#9Bh#p,MNLe(XvS2nmh1\>UP5y(*pp//]J,_O:s&T>.IBuIăU"1dn+q5V:I_r?'gdp\)<+nA[inByK_cY#(K4ArX23WKja=tj0eLr3pEC]Dht<_#căU"*X_r\3g3e6>6M1grmz1>nI<QdyQjso=WOHoT)2Xn?1N+xW4Bac.a<oua#:T8u_^ăU"e*?bv;anj'-uK%cM2:udI1Uo:.g\9'4$)/yKfHO]e;nmw[,cL.2lyNgW#fGi,H?ăU"MT3Zun^U4-ewZ-*+r:0F&k;3,+0M5AF:Gkt&<-;a7%mkVmeVB6-Rd.iV4$Kicq*ăU"b^YF\5c$_(5_(Il/D21u$.]N+/vAa<Ay;[vw5rLvC*tMqjwN3Y3ic/*F)ZGf%0,ăU"daQG4VLW22t^$^-[=n<76i?Uaem]BrPGF),JIZDBEDo:MdFT_OlQ%neDS:VdG01ăU"&C20-TJkT<R1pJxo.H:7JVb)BfQ.B4pK3r0)KJ9c5^j+kFNdKgw*blj^K,JDl1WăU"<WS'VmcLdD[a8STQRu]a9e0Dmpx^<:tvT%R,:&1K?YhH,k]a86x^vIluRt,e+]:ăU"#p[^+PDCzi5egb<0FN*h50Rs.q1EBO[J(:fN9lmH#W<_S3/=hOgWiNBQl%uRd^SăU"==\8nt/h8I9JQZ<.T(tUNVSz?>%n(A:k1w2#q*VwaZHG\ydPX)v?5W\eZn:znCNăU"Ocdct'eDN#9CbbhddV9t9S3:q8wmeMzy(K\PFJRKc]jADogRJ.33$[oK6=dMU-;ăU"7Pb0N\q;[0M7KDA/0]4MVd9^hD_ZiAqLix/OGdd'bp?[%WA_*h9T2=Jds0\3+jyăU">4kpp/qIkKH]t$gcgOV\iPHI8x#91envtgn)rNd1i*3+1=,F;JN-hjV1#9LkLFyăEND SUBăSUB V3ăU";zhlPA)Pe$?GUg:#08?*JrmI+A_JQ]^x8yEi[#DNJ8-zB*j8$g:[Y']nD(#>ky3ăU"]%Q&lh,?eC7=r+*6ZHm5f/g[1R3W0bBwMHUv;IcPv[%$54Z6es=d*1/j&kq9fP]ăU";MD=A:t_WREq;V=Wn)q84;r(Q8hU/4Hm7nGP3ADq6djPo#]9i[=MN6Z-%+,[d'XăU"^A>Oni#uuK%3PT2G_ccC<jrpN4k'Lm'qT1Zd4'lVvle2G-VsJbU0JwQ#FUP4'moăU"rNY<>p<_t4_ot^QWTZI5-H_eg#Ib-J[J9[.uQI&2Zq4?(;0v]ajv3or/Z*]iyRmăU"\H=1iqpW_<e7#8M0#IP0pM%0QQJ04WP)V#V>,(81TLsdaX[v,WHWeXT:z?E3BUnăU"_]4jp.Q^3&OX]B-p6c3GH0,cPSo-R%-e:wl$^<$#+qWH$B?9<A18Ks9d\R#9=7IăU"hCkC>L/kmS8c7D(T%,o>Y/bsDp6O.Va6k_?onr</(7(mg^Dw^cMS'$dy(Q7GYwIăU"i0qIiA*Y9nVa/q;2>f&BaN.$h=P[k?6;TE4?mZx_sMz)TfD?,q7OlXib)[,_**TăU"8^5=o$UA8w\Z),B[NEq?yGn]f$:IQ1;0SPa8Ch1AnO?V]YMwQ\q35E+>8q7T(3&ăU"lTFRYF?Z<M(:/Z=$,dGO[=(,-D&Tl&5za>.U0E->e-p%qTG(6GILyba,vhkbZk3ăU"Y-;WY>^^$JJVa=6Wb0_Ee:J/14Qf9U46]]^+q5tYHys8uNY]k-app9i$oVewl60ăU"FVbc'LK<MJ\nc2MlU<(MY$:1C4FR;q]LZb*v4?<l#>'o1%v,AqJ*<KsT%6d7E\(ăU"-.?j]Nub0SGX:+Q/k64^Pq1Z#C0^&SqtzYZXV%tS<D5Uk\PjG5w&Cs.yJQAT9<păU"qF8**g_Xj<.(.fr*#<-MwBo-XiTDm[q8IH$okxNX73'qtHVJO1,k&g-\1*=n<EbăU"ZP']uTO<-yIm91hd[J:3$]Dn$Q/\k5(yl>H_le[<5s_ce+JAVL7jgG];vWABc$YăU"d^TNp+WG?q>XdEK2O:r=E;^heSupT7A8pG+6odCxon<g1B/kJOcnr=h<\35179?ăU"2<\a.Ee0llUKMN/='h<\TuR#tdUepEJpnHCaZwN$j/A>ZYegHAL4swXjWAT;,jwăU"YDHICSYm;?KAWu9s,:e-a'H\c)'g,(tPY]O,.Nq.-9q4D])(]K3ug3Tm.0Eba]]ăU"zr8+t2XzR7]UV#OnA_nq$B+,g_/Cj[Z9dY-*RTk%KBsS_w7H:'5E-SIdHCpfK29ăU"_bI)+oF&/:d:q?ZuBh^pEDlpOCus](_Kt:4+_D&_k1ofT6-k8wBP:%p'A*O&)KsăU"U=1'?0DssHs$t;.C05iug[Meo6kLFajNWgJ16^l/'=T82Tui02.GMSBGCaOdQ:tăU"_)g[C^)=GY6qpcq#^U^JzzTXiE$v92ncI$Mfiv;7HZF#VsKtkc*h46gTW--n^VOăU"<\Nf=V^<SvdI<10Soo=16NnITR<<dZeJ>=RdHu_&egXS^Zj/IQAtTIV,+NdIDBOăU"&]BJ8(wYC:VmM>#9s&rX;^>o:RO[KZ6:LCa<BEKSlVw[8jji/i-.=&SgT2dbe5păU"JY:d>/.PbOGgNK]adbNS2v>j],Z;PK'K&WLOGcu5l36NMZU^3OqG^oZe8&2xMSpăU"PlgbL*Tbx\c0Tq+jen*>_f$vF*N;M5k$,(w\LqVZlPc,uL&?V>r\c,uyr+*r6e:ăU"]LbmB*qQlt:tYq,0W3iA6oW+eTuw+.]mB[:Jz?h'lpVv*U3$]'WXF+jL)CU6o\PăU"$m7pB$B1oznFJXNp6*k7_IZ=uH:1C<1VmK\,Wq#CYV<y3aU6=)gC7e)3tp2kOY&ăU"EhLQh_R%+?>\kmM$I1TF3uH-d2bTpY^OJI&OEX/X]X-]IjO*,]8Hy=m$^k%U)F;ăU"sG;eiRi%TPb+flrK9+G=uet*X-6ctFNP6zzJ7C?W3GZ2=&ysFe=+OFHO=8G[m1kăU"Ir9-w9*cW9B&4VO]H13JjI,=&aG79K9[D5.XV]vC/-u/f#J]*<Ct%84<giH)=p\ăU"aT8Z)Kf,&d]Cq'\kr&P:Y3P5fcB<*],cqd#<Ukd48;->P#8+'N0]V2a-SfCOZ?YăU"VRf1(J2=[4alc5?KkQ+-Y4j<6Vr4C(jedU08AP:r^8xwIKYmfr0a9,#I4&=/*DWăU"N'#9iC41\=-;pD;Yf3IFQggj,.X3og5#s%Zj.jX%A%eM/0K?95kI'mUA<018[%uăU"O?aN)Y)fpC['S3VD0Fq#A:x;I4(PVxm[_xl+zoN=$,=UgWpgT^I'+VX#FPU]b]xăU",JQ/g(?3f0(VU=Z%PcV1x6'+]UID+/&'T>U1(P2e<?N\,J0m^6_#?bTkr^5-&QFăU"N5xJJw=>Q5?/6cDSDvjS?a\[*7mf&^&bL7J33S;iOX<])T;)k_R\Cm=E1&<n.kqăU";:3W^6P>IOlFf^k=?($nm/]\Xh;FPU>S8=c#.C)Li%ooijUcO5Z2rV:]Ag)&[IHăU"'wTj?2[A(u8#Yctv%*0#6&Cq[RIrO8R0yCik')N&>d]OPFRk/d-y*;g);wa5^OBăU"*4D1T+?u)V%a,zl\#5gX(.1ez/Y(WOGS585IW6Bc39y3l/V5kI3<Sn/>\%fb4MAăU"B[>l+P1,U6tAt+dFJTb6d+Err8w8$sr2+v_5CE#03-R)TE#$Y2-(&(;)E7pTN'căU"Ne)vbW-wU-]voBe;o',t/=[DdU=.Y&gXC1N.Mb.G[XPF)+?kY=naug.'e]f\tL8ăU"'2m^]WGBeBlm-gQ;MKTW6(-0,R%u+rE>%V,;_':\OgibiYupl%+km.VV;_oHl/săU"Rtinu?iQhII3r5(tk*Rh4laM,;<<FrJ/V,9\ZHn?YW/qS[/f,UH7;'eKx]dW'o^ăU"4]qyz6Y$uRE^xxHgi(Uw+>=N;kx\fg\+Q']d]i8>8<<.0T^9st)Kq>wf$pSw.3WăU"#q2qYn*?j^u_G&N_RiOUSFeix(fB+F2EU%Ahzn52<TRKDeU1b,[rb<B,XK%MpT.ăU"w:Ly5i#d+*\eS8V>**F^?,Vj[JQP2P1qiG(KN_AFff')SUuX*YH=#_RR'U2i,NmăU"f2QI#OFe,1RAjW(.].5PIO*Ndd5,C>wJ^NFOlKc>.>9lZ)Y=(6BTmUDI&?MvM&JăU"\=c$YiCP-gfItGL^Sn>3OfWD89Le_:EmA05Rw0AHfEelj0'=;ZuLWX\Po[NF,\NăU"+JCEK,AjBsLy;3eL/\yRTd)7+,f=Y8/v]fwCOnG&#CNpP)irR'.QX1g_PX-ZpWFăU"K*9GXbh3dggXi;)hq*>yX=&lw_=[m1r.5Fbj3#kt$?ovJ<lcu\lucrddarX^[HnăU".Nb(4i9n>r5Nw$nn=t$Ynwu6]slDxcrHdvuf(xqX$w:>?meH^u5xj\D^NnHB.dgăU"CIgPGNn1dvm]\tdwqTGx\XTqhn2Nq^qWrbu1>g=wHbpxNZ$D54x;XqxXejb5%V6ăU"nkup1).xujp8vX:xEwcoXmVbNx#votvurR$Jvl+-qXBt(MoLZsbivR\d.bQX&t;ăU":ouiIKbp#gjG'J<[0Ds,rX+sV:pEb3PJiMRN#,?fq$HPWRUk19+3T_2Z?e?^1S0ăU"E?*1&Ca1-(?XO9ta4?_oA*Xn[q,t>i3.9/QpG0#CR%A(]+PK<1G\3ZgG,OB+C1săU"gs/b*G*md*]*tq#QoRFcX;+7Qvk*$&Zs*lTLHo)E24Gd[3#V>H0)-V3BthsXe.]ăU".H*a8oOTti<>Ql4'HpM_g=n;krL3ZdKby^e,L;[C8'+Orr:s3_z=MB;N)d[_VC(ăU"VqFi_P*7ci87gLvp;3>'VA-KZhwKJy[/ILfVigUCW*u,E5c&c;7G17JZfRT=i5aăU"Lx_YEOY4-Uf]a<&r+1j'LO-4>*jCnzdNC2u2[W=*bDwT#8Gq&$[:v+&(?_TASnNăU"\28-QRbKC?Dxq['8NR$\o6.[P>_o&nfoCHU(lNm)NqZ%p.>\9e3oh,3+v]R3R8WăU"+0^wBXx?*YKE*TkVdSfjb&3X<5e>%I:=85FXF?&Qg4RzpjhT8U:1n_cRko0PGJcăU"Ah4Ul5t](pbt*mju1*SKvmHVao1m.8[OD%jNDx-cv8RT3OZYt[Z[r99ii.?4,K;ăU"ozZSBhCQarpZT10U#,,K$tp#>#l\#yo-mH*&=07s<3j_Tki[lU[(3..]/)S5w=WăU"2tLG/<fN4j^=l$GPh%<XTUXvYort$pjkj]&oop-r$eiE.%\VTxatS2VI0CZz2ElăU"^l%L=Z)HS]Itf.n(x7cZ7t1AbOe>2YtcI+pO74b1^PEtQGMLPeyw/Z-TWNvmM$FăU"RHDj<D[me1\rP&(=K1z-=S0>#c+L5B_Gcao5oRQ,BOmlhZ&Y-OzjKy\_tJrRyF#ăU"-*0=1+Eop%9<n$hJE6Qq&KLaDq1ta7OMXuUsqL>Amaw$mLC-v/p^F$??Sf4^/_căU">gQDV&2q0%Bhvbz,_Yg7<&h5J/(69fidy^].&uflfO6c*sUV(q66+PrQ_T&;OqkăU"0*GjY0#G]b=tFCKlR*W_CQnweDtxh,f.=<msOf_?DG2Q+u=3^9GlINph<&=L&Z8ăU"bcdEwTb/WImngUXkNeXEkIJ7e]CGTTA<II(P?6EZgOe(q<-*_YJJDE5uj#0=fR)ăU"/M5HAPKw+3)=t7hJ$Ya2C1>)TE2lpF[vO98vq86E&hN[fogjZGJvOLb?Yse#79'ăU"<oG3'voZ*r\B.J)CBpCb&K?i))/s;sK9^tk;p(zWVN9=0*B0XPJudG)&jaL,QN9ăU"uyPoFP;8aQe[D*ATlh2XCr=pPl/K[R8Q9SV^*XS6\eU&iW/p,<SqyerOuXXe,SjăU"4+-JbatIyFD=yvh1[z$zDDX/<:ou97qi>:,Y.oY7^A9L#1:ay;nxWcNlK%TYeZWăU"\IVu9w9OLjtW3OGbpuA]0+5mvc$#_qrdS%<BL]lCp)\8P*6Qmb>jeu8Sj??)mT&ăU"HqupQ[hz.ju64/kR0[eG+;s;&tQ3C$E'UXq=')sML/fU<8DF?#P)sX)v]:NeGnEăU"1pub_mINVOw7QX#5&b5#i^askj[R2wN-&B=tUyp,VU9b+)N.$6u]9#dgV-9El$QăU"\b;d1R6V3x/zN2w_>F0Y]7NV\5dZe*+6q+alu%%Qy(FVoQ%D,sH<YM\cMu_,7y]ăU"EXQLF$.WyUq;BIAO;,Tcm*R9[7sgn_PBm:9oRN&6:.RjMqTvi>qRCwomBzvGP[^ăU"v%.uleY;2T;yn$YB9q1w/ZP(=e'bT]#41/cAltJHR^'K1Bb%y_1F\hLIQ[e/r\XăU"z08.e8Ku4qli[.,+p_.6dJlsarZwJZSCeYaNcCLp$$[w?+27Qt=(%DXPdte'^weăU"2\FbwEdNFx_gw>*AQ0.]qB;h5v4[#6A\&^*3:z#gyX=VwSuF^f8Y'eh<*I&ERc2ăU"hn7(cwpoH,>*U6\l+<+,9wR?i+roF5G?5CJ$X2Kmqx513maohft_Z)#-GWFE<r*ăU">SOZ?Km.C-snMMt/hT%w+ycKylukH&kub'C8'iR?WnK&zK]0w.XH0/RDy78L(zAăU"0/<Va>x)tDY6Z-K^l%j.pvEated%]TH0Faeqfo(G^.rSjgaaj-M?aUMa$g&L.N/ăU"L?)D$6Rh<rg8AjjX]I'pI7HVjPoKZtYVR\tA$CWQ7(:]p:L/xQ>n>LUb##]Jf<7ăU"//ECMt,$eb'^xWhvKr?m_IU5$ClMh#\DNlcr(,7J>$+&_N+;Os;1f'RQN5+f9T(ăU"grRI&)Wz9\%(0kU,*cGqE(Qk3/LE_qI3Z-^K[)KbAjg^nUGF%jCDwYPj,6gtZbEăU"qC\^7d9KSXJIx#^PK?<e5(Ws+qU+(QlGTb#[j1\9OtNU=frEt\$20<GqXqE-7tAăU"B_S:yCfpzD6:kz=b746$[Y_-z,Oh3LtqY+bMSD)eyBYa<c(+9^5CD+x_d1VrF$făU"R)Pe-%)mdL\V)PB*'2,12j>u9OolJqi)O&tKxaaV'K_EmzMa<hW1Htu&6L#1joRăU"xC>Y21SR?uU>t75tBly3aSg[o)I\jZxu_+wDgaN$_S8V/9LR:b%9;rVOJH5/%4dăU"R<5/bK$m-V<qM3$W+zI3[49S6k.6Ab:bxhnB:iUo>#CURiJ_2t1hlEH$Rf#ct65ăU"#.oozV78#=F9V)0EsA1l^hhQ.qQN&/mRk1-qV$XlW_=h'dQ$:NO4Mt;V$Wnaoc#ăU")elNV>(k.1rLlq(Cm5nH=x>)%xgUK$gqX><98itoD;$petv8P<wKk$)ut=dY.%#ăU":,BXsVW,K(lA04LuY'0GZ);?IX,b;&AqKh^K3H9ZcaZ%t5<w'Z4CS3TvjS,0H.UăU"]nJI9v[4+dLP]q.yFf-2<eLJrm<;&MZ]lb2/hvefHc\7$nAV<Di<hnKC]Hf8I1)ăU"mg38l4gZR*_;pX,^DBE/XE<mG1R6+KA>-q7&A7RfWga+m+9iE(A^/Nb1_9^^xnXăU"iaM4?9qvniCAkyv3,w8-N3)42BtsN[o[XMc9'cV0Q6hd6$c90HuIdr<sns]BuoqăU"uUL0ZdClV/JInSG*p$Fbsd%rvJNtdZbj<bXryB&bG[>WKEW2WrM4FReHU*5ytc&ăU"0iP\PXpMG0bnN)VJB5FRWC#2g>=yh3mtZP6VH;i*v?T5Q$voSW'jg8Z<\E(UqycăU"eg/.<gckF;4FO54EQJG6XhE5X'fF9l\tw0f%t)Uo/k,Q*.A\OE<dEB:WN[p(o7*ăU"::pb8?>kEhtR6HA8xRQ_gf*))DL=i:7tF+84&a-.;r%F%g<S'$B5'Zh8IHfh.lPăU"(nA_cA8DO8r8?5Wa(8PeGbwccP4s,EZZs<V.[o-nc/CdvX'%'8#\Vvb,J+DF=S^ăU"-=uEW4<tlLoJYp3evR$%C[8.&))>j:qf&Sq>eZ/i:v-%VFeX>3%WL;TX,AILR%LăU"#b9rgymRp1GMov38R:FJsE]_*0S/fShK^8kH[cj\ogXmlU^p*YojIMXC;1x2*F)ăU"y]Nyn>A<]Jg1o<>6.1M[nXt\luEs1(nPT^7%8C=Ua\-cM1#?D*77w6QmI-EW?&'ăU"9vg.&;C^lfUi1\W.oI;E*,5kWw<UPn+)hpz.7UqOuQUSyz/kcS+Q\[E=GUZet_MăU"q$K44ZFLO2aeQO&OaSDv[a2f9JGwlvGMkUS^&atSb>WoW)IxieYtt&lsx/Leo-=ăU"_,]k-d01$1z+hnqzpuXUZQC2v*dc=JnoQ5,?9QKMCij(QTI+-c_fSB9sL2\o0o0ăU"IX'\BC^CIP)sUh?WPr\>\u#<9\MOM,-c9BJ>9J?Cg*HyM%CyrJ=A37(1lC+BP;făU"Uq%F6'+E;FC0T1)4o3J%5VXauLlHR8a#4C<FTVN1&:/4r-e[&n*.zG;DK-C6J[băU"Q[1CTz]Hd/E>]bcr(8G*^.,6'+cz+,_#RBj7:yF58AZ_DREe[Fu<(IFI+IJgd/DăU")\o]]p3/>F#PyO*l%$l4W\MEm3+B'5RjVVh$+<H(r'>*L'IBkHR<k.tD+^W2+u^ăU"ZC<?0Il5G*7^^OMV=re%jCq$BHd:>t[H3&LWRuYRXcSZFwDC/(G+W]0<'CJ?&(WăU"Bi94sy4tNM&'<#sLI2Kro#97*syq<>)2v#8F?:_<N4jr693fSj%*ICMLRZz9dj0ăU"w\88s/$DaTn?Id:XqFci%iV-L%&_opIIVNU46)Dd4]8\-G*s?x5$wO9w2/Hyd0\ăU";F?)++%;rX(Ih<*/qGR]d8l=[H/8fGik#&&(U50UjXEdKHSRLy7y]$C]PVY?YofăU"Yv,*pf,V/GUH;u,.9\MLiQJX]0Hzn9$/g7rClhae#'Cgf;ppDgBP2FCE4?L,\U$ăU".0KPpsM8#b;tR<p,3jb;NQY8IPfqej7[BNQD0W</kCK^68V^w%C6b>0c)HGGnzPăU"DAYdLWzc%8ZoA36sqd#T_MgRAZIEy\dlcX2ZO<WS'i8R0.=Tu6uZ#._?Q-gNOP,ăU"v<;Z<gls3Tal55Gi1BpK6#:<<dmW<jbd^Qh^4$PQ^HgAA8pFq%qH>K1(V9KV>QHăU"3MVl%04O-uUFYI8CYw*U6:t+Wru$KXGvTilIfBRPZ1*D3fghYXmLraYsLBjz;z_ăU"49B5tq(ZCQ(9Vo96^BqccFBr*qtHO]PsOs5G)8hunY:^Q6J$%pk8L(&?s2RMM5iăU":wsXkY2-Id&e3RxwteCOnWduozBa,7Xwk$W(a'DLgal\h/[?i3&;T+NNG6JcU;păU"0iBL/e:).'Jx-o&a-6IVekvv?e.S0Dc?sCFrGM-j?&1]UVjbN2Bu(zo'v%X=A>MăU"j+Mfqv6nRq/%dQwC26]_d.SGs[XlAx,:eW,^XlAx(=iAD^=gwXG*Nx-F6FG]^#;ăU"&JSMP%:j70mSQ^N,230J\959hOTi-Pbyc]$P(c2:ggUf6;viPumh+'nI3e'ed__ăU"BDyIK.7.nyk(AqA.hoa^>r;uuqU+kaplTo=[]gJV<_r2CrL#ugXYfZ4UQ'*gPj^ăU"9amJ)bMI\F'qKL_,$NZ0KLl?p]22'i'dah-?u5#pq[14Ffy9Ky+Za[]C%u%s,,dăU"WZMb(CiiQ%WMYyMkKiYYDFb$=^^%M-$JL8G)p(hdWH5G'AAD&+Y$)p1_L)o/J&)ăU"?/b.K[,2HMsTCq%3iH,zqO';c%OdHcS%k[dlLFzC?Lq&YQE3K<t3)*9jQf7Z]mlăU"0OnO;FNvQ3GxxV)&vB/5.s1(2KiUYdjlzlw59_Mm#%.6FN#g/,mu:5i*Yz70G+5ăU"aoV7l<0w6?(FY#D*5kkIOt3.Hu[26VH_G8?Y39$W62e;?5JYbBQYO#au3/kashaăU"#W,=$=G#kOP^R)#9mu9#GjVbhTqAaM\j?GjCHC]0(6t8Q4<6LoMKI-%Q(/8TNxJăU"cF$8eX;w;X7B/*,r<nAn],DQtiB[-1eD>UoLWd3)LW,dVj1.rJ89JRdJ]X+HnEEăU"'[AAl[4RD^,0gmqzdI1y:(+=TFeuXw;+'^bjP(BJpO$iS;*uaL?CoX)E<ZBGVgPăU"6clVSj#]c,>\lrQFH5K75^.G5BlQ9>/(H[=M,i$l3#$u$$BPSrK,w,QR1sSDy/HăU"O>a?3S%M+;ICOieLe+ifS$.5cs*.C_)bq=R,iB1%7<85J2jjSa2xcD=Wg(&BbuaăU"375>H:AL8T;-XKb2G,WNz3Q<TICtJ$AW6eo8GEk1^O7lG]2^l<Xk&9Bv0_o;$:VăU"GWZOJ'eCVu*h?<jPTg6\-7j)fAHflH%rE$qWNY4n4_9]85xcE'&6Chsu[AM)SYCăU"W)elr7?KGo(&;rPOEPq/fgU#Oo#FQ9)_#ZNX%OYdX7[6F,R.RZ[Jguk,HNRyLf-ăU"O8,tc'qiH2KEK[NJtRhy9V8,C;;L0/I,8T4x[ZeU4>T0tRtA.iT9%;0V4z.>g5\ăU"2BWu_umHGs.CP=t7&Ni(3U,EY<me*wj5J*IN'LgxOV,Oee[J[\-3mTSH.$sX8,(ăU"%kp)f%2#h+FL7<p))kMSUPrW'<K%=.0]Z.FR8j54O_LjNn:i0esMEdD$#TVkEPRăU"VW=]T.AdE)1I(u]VLOPP<CMjkqXy]%X0St_78+CQbe2b01,t-E#RCf)8r)Gp$M,ăU"uXJ(5X8TqT#r?Ma*hW.1*Pc9KKL4SyQ9,Lr$/Sj4A')-gYh?t\2r<r[Z16:Lae<ăU"BES1lVw3.j$O*^*.=5f2R6x>%Be:jx0/8h%*Xv#$^bEq*J%L8Ih\JmCt<2,_Q+&ăU"Lkw%:t8XUgsYX01pKm,;Y)tic9Y3O#_\)hG\BYQOME)4%oXo8f1Js*>s>TthC/yăU"*dV(<,-\x-zZE,hWz2(h>s#3dtuhbdHKHSvahc.%qK<X6Ay9O55NG\R,J&z<D\EăU"p(6kq00khjGrFo3mpIOMC%'-r1;]oo6]oQ<Bjfzhk4eMG*j[q7B1qwFg2gGYI[năU"G(M'\=h[Qp#'\/TETj2o0,*k>I8>(uyL[D8z>sSGKm]U^PkfIKSoP0vdfRx*T_FăU"1Tm('%a?1ClnT^J+Y09FHC_t\72XM[B]NE-?-rZSKE6X^6Z_6\JawlBc?]32&-măU"5O2Y?oRN'(IGoURm^fkt*uKRxs%>:.h*tkNRlZtQ4vBFAjbBxfrgunf&tfTJ)JJăU"y%A,9B]3?137[O^XwGwhkfd4Z3efsvaX8cKq-YU;jWLj'S4=rmuGBe9s/T^6Y>săU"Pl$8+X5I(Q;Dv80CLh'S-h5\l#YHG_HkQLMB3)H>SA-=t2w:d_FR&=fFP'0i)0răU";uR;t(]Xt-ZL0,DW([odq:L<g7&ue7aT44w/.MWmebQ8J3:W$;=f=ImH;&thZY\ăU"F;O5&QxA6NFHQSg,xi:R)CEn3_uG8y.Xz>Shn*h(_%]AyNEDZ.$*uYnD%BQboQjăU"nKwj9pgY$8o1YSl#UxA1<%WPo/xSpu>rgIIk>vZDgck<E)r&#i5v$j9JYeph.y;ăU"cmkeRe=%0R1x\efM4f;0,$nHY-CDjSm$#cUM:]5?T2$AiGKau0n&'ArCmGA&N:hăU"x-D,c-d^<.FCWa'%rHO&&zpJ=O:tY1>utSPD<az3dO0Id+01\o&oF+Kdj&#.UonăU"_Zo#5LE^2_XdWF^RtcwI1pz5)^OJ?zSU.]d9OA.fK09%SYsc=:4^7=FuB:PMYLFăU"=dFkbl%k8GPOAiZ+>di)g02DX'fVLd$4J3hT$Da1P3U]h')g;(Rl^0bxN-JgSjeăU"aGW_,3CQhzR#XM(aL9^/Cb40x$)-vb=x.^MS]8SYe^>FUYPH7lfwVYvfw4TRDIhăU"JzD1$JzX2ZAbTSSCzfk^qJ>OL,UVWXg'grSCuTZjX:dD7v;E>Jo22,?XSb)&/'2ăU"rFvG=hBayDW#x38V4)puHAGZ>TUU5k+bgZY7RNwnIL&GHbJnZ$v=A=HY8d8pZF:ăU"T:38q1hl$v>kb<,o7ZheCbCV=weHITRs3rjTP2bD&U?tC\n0BmWk]Z?i;Z=.3o/ăU",$Qsw4))S;%D#g=+Sgk/YTH+Gob;RU]#DP)Hl=E^ClVLpw%a0M4p$2I+sG)eh((ăU"2e1ZO;U_i.o8#:BIxa5;l>jd7M,4N&Og^4f,ER.pX>e='Vze=KgHoWL*[J\QaX=ăU"F'-k8p^<Ilxha*jGgi.,mt-d6#'^)O#s&O]+(*Uh,l_uU<u//>8&b8Yb2[OD_b1ăU"h68l4duBQ'ZPv1nSHY2%0]'\,Yu0]&R6,e5;^C9cGcAG'Lpd')rOSY;]aM#Od7săU"<4pUZh74$gAqmXV?9^AQ%oEH.k9QJMoe<N$84_*bF?'SXjHjaO=$onR^k[85Ns$ăU":iSj0\W4e>GC.$?pd5gEtUWmE%phA?1,>*U-Tn;(abxkTRyqI5,?Em8o0%]OIr8ăU"51tvLrfR#>=8sL^^bHQ-5.CXdWJUBV^=SMQ+k9di,Me,h_;o-V7.pQZ$+R=ZFCrăU"1_7Hq0cl]qxfN<>*n:CvY1P?dOo(u=Eu'>Mv)#ko?b8od_uHdq-6[;=5j6<nbWSăU"L-=VXPjZrZqibXO-d_m8H]0u]<2Cv]Z+,\/R7?NZ]dJm9u$f:N6lY6Jc*-Ti9ZTăU"XF(jborh&[tTN8S(O*-[:pKq->u=E:pDcX?ZpEX.M/YSWe8qgpGFLbEOCxLorYWăU"mNyA%-Hf*NyQV&1oped^S%/&Lz5s+z;tXd-2X_067qchHQ6Iq*+sM]N$pSQlC*<ăU"DkGb[C\b$-[p=&FB)8*_O1/[LT3$:$?Z&?HRRWX&B(45chY:\YHDi&FED5mE1bTăU"7&c:T>BrT(JTX;RTY3i>-P?Kn1gN83ZzEJ85v*L1[5YVwZPRg8NLd%Ugd+Ihv5%ăU"S.u'Cg_5]t9.C:SwEHjNDon=NGY4iC0JvqUY4_0*qbMbDA$;#(^VV5Ub>;f=Gi'ăU"(M(Xdp:5g)nm>goS_a_Ji/Cfh3p:crjGS+]\lY;-1,V)>u7<&VH0Ci'#6wI\bs)ăU"U1h?WTWh*vwB6S5B)LT)_;si>v]oO=v,G2C&LqeMVK%A$txAj-p#iSMFbDf#s23ăU"W[&L$VFyINaobrx35snMBpWrc1>6ya8nOHLZO[]ei?)g5B+e'V\hWtl%f38pDaEăU"W*YN^>3gaya)JYTOt%_rxA2ciu^>g8UHZ1L*>_h8jFN-q4i1z%)%%xX^mkLhRgIăU"<iaKtN-,smT=BtuRJ&x';VHdQ1PW_DkUp\Xa(0kgux2UU[DRVc_tWQq/aRZpSZIăU"m<GbU>XP;T)aUet:cn:p/kJI36i9ZUHD1E8S\&p'jUXNM_FOgwQ,<X1y+6'HuA6ăU".VcKp1?<UGG;YKNR]V'*AEL%)y1+IH\CVY,keva_Todl.CE2$so'E\vC4>R1fnQăU"fAMJain,SHprsou\WdK[-$eE-(b[Yn>7Gspm.<,&0R_m=p>'X4-os6RYS7_2\8YăU"c4Kx<J)Q:kG6Zee&XXD>M.=oSn+Iot,H2CCkadEPQPYUfo0Hl]8:5EQ&s%(t^gCăU"13)vkfo^o>YB,7j<Hn<bhD9Pu6$nV[N1:nm/RQL4,dK(%;3:jep\?v8pd5%'*ILăU"nUf;lP>Z*<z2WrrL<Y+aAL\F)^MZaS_4tMo7^_%eg$g;K_\bzk+lsW_IbC,Q[iFăU"f?]Slk<?^&iA(&hw(VQ9C+o:583ACGD',nsqHa[%=ocd[$QF=$)&xI;a97dG,e$ăU"pNw6d-YuA6p_i44Fo;MQ&wlq9W(akS8OwS<\K]6PU>MxLdoj\7qT6iYF^8co$RuăU"eh/lWm)FMl&n^Vek*S2w.AUPU\%HdTGe;fV(xX2YpBMt[[X[/LNm-K#%nS()':HăU"?=4CZA/0IL5c$.[qp-93x45J<DOrX)jNm$Kc=Mmda=J<lgm0$7B^bar$I.H=[HRăU"[Li*U+lFX^V'7DtjBSs5U2-fuPI^HXHZc=tM$eVCq/Eh^2?5]HyMsDQP=,q(neqăU"$4vFEZB^#W,lMKNxd#EhW/<Y>622iDM6#3CrS1KFdHCrK9f.<p*pWWr#*880^_QăEND SUBăSUB V4ăU"c#LF2)4%hun_4Fp[7plUTs&U45%(6TWu_PZN9[)Ttbnn3/k6C&clRX1pvQY.$5?ăU"*q$-ZrqjLw+J:X,#gOz0,JMq+Hae-[a6nmJT-Q1l?Vn*s1eH+Ar7Kbc3xGf=u\IăU"r-8Bm04pV8(6pnci?HSYY#rCEbl:A)Y'd=k-Al5)'=?f<kA5vl+3/f^*t#B9fXiăU"PbVg-uC^9eP.k%#QCw%.7q$V#p2Q9.N2h<hGLs^RWHeibLAQ,P^k/9s#+5eTTUFăU"s9V%xnO3re?gp]CH]iL...6g/8-[:.j8iMhe,-76,1>2y#Oq4imPEC/u'=jv:k-ăU"(7e$pMdCVhmEFmmX#\I&PI,W77RgR[)ZSsI2WfIV)So:cE/xyu1;%$t$26WN\q'ăU"X*0IZka6-=yOOl[6x5F20zdR\6C8ez*gUCss5Q^NI9H$QCogYI(+e?<YOH2C1PgăU"]\53&n2T'G&6=DlXUplSf9>^9HwE-9g\H%=x9;crvYERFJ.mmLP+RrMobth52>]ăU"/XljxZE2i;TJ0EI.9id]G*1;fRoetQlX;6Q2E*p+Ye$I1s$hDcKZ-Ne4uPnM9XIăU"bDsORLhf+\Fj&$l\fUQ:QL>Cu3>bB6egRt+h&4-olq9?CDOc+HA4wL9s,:ju2GhăU"XOY40;'uHsImx(D_;-6dnRXs\nFL&q>3H1t5ocLBBdyDPD]sq8mMZN5<mM:ygz1ăU"6U0Hfj%c(;fKL6*r+L<GCsqcW&CaYKuTZ/skkEAIo]KT_HQT]ajY6v4'WA/WfyhăU"MP-cVUuR*;0t\oR'Y2]aeb;fB#'ipQA4Q.]gU*3=+b#].zK??dE9N;=hFS_[H#4ăU"[=$LnhKY/qxS3xBu%7qy]:2n4C<t?m(n_vSbD>Pk#)zP<HBsS26'vp]d%]L2LHxăU"#bKeOJN6V>1)l2oX-&%up()%9%%%I-%5(KvG/>7mHo'%%%T:%%%0%.%%&n%sktsăU"%ySifjy&gJ(w+V1=hn9HXh7xBQD+XL83L2U$L<N%_>_RRavKBlttPdnPLuK*-JrăU"eh+6bP_UkHFG\O26[^2);D/fMNJgU)eqotx=4<Ks>:YzAlY0=]6.%sfeF*JwtZ9ăU"1G23O0qRh0x,2vY-r>CLHA74h%1omKCjtjJPC<ncn(_^/,<:]A5Ndp]0W>3Oed\ăU"RsC3XB80u+HeTp[MZ7R#OIgVzwYsVJ>#=Zn4K%%4nXo\sYnYvLMBM^w\s0_mWAjăU",.4sR0JK9ieSrNZ#9ce9PppmD(\aaU7h&2C[%2ScQ_JAVQKbOjptBWUoR40-j*kăU"%(+AqU)S%YV_(Q,.VX[]&'uFVt)Y7Nq29Lm-YaWSTt%3E1y[d<SP+fBm8=iLIW9ăU"LaMZ;VxP(kVSH%,p.Ct3?oszC:\N?Y)afwHfi8^jXtJ/87w#nM\sL(f,oWRtfU_ăU"u7*RDD.V1FtVt<SK*3NWWd<)-mD>Xmu1<li'+OUs%T9><#mUW4+M>W'xP0IF#UTăU"Q%</&ccVUcTRUQ>X_$P&tcS(u>Y/qcendl2puBRSlBDrnmsuUn,=p>e8Ll8gvZKăU"draYoeNij*YQ:](L^sbtmHkul991*:,0kTDG''a'ZcdbPv/pn^L>a=9jhR<)+&5ăU">GY+M?tnN'i7.5bh4b+,LyP5f&>&s=;JFGWC)BQb:aoR[cidn/.(,TNg,8M*ZtjăU"X5VO+2c=P&XcL[P3*in7(cdtGgP2#+#+?fW^uV<.==]ePe^N).;a5H$&1O;'UqJăU"56_\B/D]mFj7GH'uFuUh](iU'd]NDLWGo2Yk+mZl^m]qOR>nko*I9?5;3^ILp;RăU"s9cCY?hM7C$ik5:piAE7r<W^M'BWsVA#N(X6L<BdP3M;01/AcB6U2TTW;nm%%eaăU"QI9WQ#*?Kgjh*C_f9\bFmdWH?V=Eh6EDf:,V:EtRl4mo(tdu?ptH4uT0Xh[di16ăU"EW*;Q+Gs4u%p&'9%%9%%#%-%V%g-HK_vC5CAG%%=%d'%-%%%%%%%%%&%%E%%%%%ăU"%%(%&ns%WSgf%xup&%'9%9%%%%-g%5(v1G/>m+Ho'%%%T:%%%0%%%%%%%%%%%E[ăU"%%%iAG%%&%nskt%sySi%fyup%*+%%%%%'%.'%>%#%%4K%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=5AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSami Kyostila                  ADVANCED BASIC PAINT PROGRAM   hiteck@mail.freenet.hut.fi     09-06-97 (01:04)       QB, QBasic, PDS        570  37712    XPAINT.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"XPAINT.ZIP",4^6:Z&=28049:?STRING$(50,177);ăU"%up()%9%%%%-%l/72HCV?oYx+.%%=S%%%/%.%%'u%fnsy%SufpEf(rZ'\k5RX.:ăU"9/GqTm9lB,Jm'QKq[=>dcee'-SV.e;axOE0TkZo]8b#d?mN3pz9nN/b_TEYmBJ3ăU"v+,Do(c3furj0XN8IMMtMlZvftDMs6k4>dr5Mvs?R(<\lH\nm.,6D2r'%('/r#EăU"*k%BD<u'<OdBnU1LTXP4=cQ.=ZTcOnNl=onDGfkc03p#dM_&iJo4OND2$<-bScPăU"(CP+<QBlE7fC8sr6wZhAvX6o4ATt3#SdcI/S&)a)*$^uP>u.+A,O(VE.stW:E;făU"YS&fC&75X1V_HC;W]E#fi<GPUJxa#;u$BSBZ6tvmohR6DlDQ,&YU.b(DTAtI.znăU"=ELQA]d-9Decdbi$8E:)Z[(Km,p<X5,^mC#=O?&R3C<1\S95s-*Aa3>-Q>r0TXrăU"2bog?=pgL9[usjuTgoUUkw.S]B_=A49W/l&m'^h\mHui60X<29OL%1craLqhBg2ăU"Gsb>6<o3_cN1Yo>UDPgL5hrMtr%8=:D?#;j<CV&e+cGm&l#T+&gquoNjo0?W,TQăU"MLf/0on:;RphsPPUE*rR.2P\(kQ^;7X8WTCK'Ilfk9>oqxCG4d>;MUr.?.:vLu]ăU"V]W&LG0nM6-CH:EZk5T<\n],3JUYN*J%#2vQs4#3F^CVttL,mn$AnB+Q4=.^BmFăU";wVX'G.Od:.>uqdS_=-un8KrZVP9ou4]XU4>uey3+G4]5BLah;oDe..ggdvrn_GăU">8(.?MI/hZt=o]nyDNZ;ove7/uGLoY?.(Q=T&#wBV4CZfmj[lT$UGnWX:r:jO#năU"<2MLJtc?;T#4z=isHRbaouV[1Rr5?43ugmO&^#4&,HLH:/$k(\Oj[Mn<n;4/_JFăU"4A2_Nv_H0NauG/L/<)Ksau_1c*r;+pmj1]r0=Gc81<q40Q*B,w'F__%n'otor,ZăU"sV4>jeG5En-SI8bt#xu51Thk^OAr-,MM5Gg'#I\C'U?<V=:ad9?,Z3<Tnb-*oZXăU"I0fADm8Y[8OK=m=6L8J-%=VNl6*5#wYgrStIwk,;;bDl+&uX]KrjgUz..d1#:0CăU"=N>u1'LQdhFIo73o0ePZ=Ywk3ouBd_0\R9kUbBn?#qL)rc^YERkf2,\+C$RNDiNăU"[VA?x*rQ:2cl47$u[nq*sb)GDP0P.;bMZd8p>+uu&5'\yTP0pvb2lNztnn'oip5ăU"SGQ$.nam.l%98,EK[trw$fV2,o^/;.:>GkuK1sZunR1iVS\xp/JIdt>dLF=pwjXăU"l#Jh(u+Si69O247PbdU,tRbWOV.6nRitw1Pa24'4W&N/MuwwVTcphcQ1d_Sdk^5ăU"Kl3_:N=-Ngp7Wv+TvGOs\w;uW]7923*aUCdNS(OkwFgq+SK_ewH,47x(L)kvNQ\ăU"c-sG[pIBl)%1qV^%Y9N3k,yv4G>)XtO8Zf\*BF]V/nI+^B<u)[qn,1CS2F$EFwbăU"ucVtDu1ImDgUD5&WKxf=X*J_892-?tXQRHRR%gn>6Q*=ai+soQeS$V_$#U$:MAuăU"h?$#6xyYeH7XDCJs38(kisJGd>'D33kjX%97p^.PRy^P_?\W&2SvIIx.K.=.M,8ăU"DUFMB%Bop'K;/jJ(X%=r11lEBBD2]*pM<;*I1.w0&Q6O)A)Ng;\SRX?#+ka'T9hăU"M$=&D&C&z[2bYga=1Ah+E:i,[p$_Qo?#]$)u<#a:j$P&+o<_u9'v8$gmXhv-mAIăU"]%hvV'GQ'$Jf9wrR'[u=-Zl8&g6yxRkFjP7Y8D9__\pO.2>rw9ByoNteQ2e:L=1ăU");3N7P2:eq0D:[NTS1]Xd[fF[9aI)U#TGrD'bouKl_>(&CG9e<Q\(m%Yo480H]%ăU"='\&wH&Z5[(8.Aa_5-)keW3,#hHCgRJNZ8uiUE>0PtQhX0nmIu?gB?'DlJON>+TăU"8)%656:>dA0lj8CD0KAwkpU/3./Bh:(gXe5*U6^UsR:$#4^??w-=#JE[qZ69_h'ăU"gA?usC%TWTWDKJIZ%[IfcD.p%%=<_=Wo%rUAjsJP9R1I?#J',(,A\rymw+<,DdgăU"[Ra>P'=deBXcKO=9&]H9,Gxl;w[tV7PV(Y2n,+z9O<*#AB.-42u.'JN\ln1Y0:NăU"_,_,-5gP<MY8?P=J.wA&%Xg#%dP[g?k&WT>]k_dg,_a.Qv<eW4M*ws?p1&/1K'+ăU"4k']RqJ+fG&c:LT\e2Y#J+Jh3E7j3W^u.BmrVUi*WQjK.0DdkO=(Ipv2El'*539ăU"n;Huo.I%/IAS,_uh10?cUj1La$#am<j$sd0A#c=u$G;^.'Hq=Mq3WR2Qw>Y45-8ăU"-zr%>ndAYu,h-PE/O+*mTu%p()9%%%%-.%1XGFHD&'(xDr%.%UA&%%/%%(%'uf%ăU"nsyS[gfxe2L,&H=^+Y$c$iDM=C3)#s#e-rMkyiRo:9U[5:)z?ZgGGm'=sq[+KL\ăU"XXrRn+J6DF.r_4xeCbz-L7PXvfpfDXVSu/ec(gpuMC9agp?ANC0]wQT&QKxS+P.ăU"3M_V_vSIB.oOsofcs]Q\].#T[47$?Sgg[L(KTyop([okmUodHnA5X.=k0dSADB,ăU"^=$X8L#T#G;f_8\?VQh'eTZ-+$fHI2?pA6\:=a=#:L'[Vn[aKla7PD=bsQBq'V,ăU"7+a-q\[',Tn=U3=VwK=6,H9xVkHHhJ0aJGt?S+yAcj^[Ybr/G#]7Q+2(tX-hA,UăU"iz8DD2^aIH-G.RXG]]]T1&jqp-7j[6QfJIToDvP4#JI*-Mc*jsj*)+DzS'Zes]XăU"u\oT%\YpTn%0DeEejKZWm*;/ZF6pgbl]5EAn0h*srHI3jFpzrtWq\I6A\v]5xq:ăU"DgCuZFrwuRB:krK0dac]5hoaPx3Xm4sp(V)svx#nci=lHpQ]<9^3(e^9jZ?qs$WăU"\pD\eZ\SZ^cGHJ,fazg1#.RWu7%8s$a+A.u9R4s(.T*N181w-7+4v].Dr-;e/R.ăU"tMH/*-QINn(TlSB3YStMnU=(0d^]b';Y62PF8NadhOSpDHUa_l+BBuR$C\r,TAaăU"E+qoFD<v_KQ*i$HX8tuF;*o+is2>Y)Nlr^udTVcOq9jr/Pdk.\Db8c?aLrfZ$][ăU"kbKi7W\)wald(/G_k]*2VLMpnf+vq]qG%%/)2FF-\bRP;QY8aoiM6fsGc]s(XmkăU"'2PefBid=45%q^hIJ>eNDHJnssB^_sdn,^+NAqsxPjA1G&-W2YQu4)\;s7L4Ug>ăU"Hm(*I?gXW3ma*vdu6X68d-waWJEvG8$TP,9MQ+YlUQY,oIT,rg3;MEHl4/%HRtSăU"VPefI-41#H-e>z'JoG:LO>MP5-p?quacFjxn?m<o+eK/bU0SA4;]r6[VEEsh2y)ăU"?_?EW8Aco^pr==6$M\xK\mwcErObO7Hj8qSqWbf.nXnN_8<<2e.i<RufAf'tnlQăU";WMU;e&rIW&\3:L:_?cAr<Wo0g/YB>1XWjJj?%Ya$En/=E#Shh4'bH;p+qh\wf5ăU"CUjSjW20aDP1d72lgdnIVv58Av5tK<T-iin&=IF$n(>R&.Yi8NK(v+^+s$cmVfQăU"?He3p2l\W.U60Fx5YV-XX?>p-nkgn:jp=?*D(DDM4^lQvsO\EnZLI#MBHpfzS#[ăU"o29IT/W\b%lws=kGVLl>TRhd8x=(01d1f+zPTtL114>Z6]LjwU^3-pw89GQ+&o(ăU"NbxT9aLpd_(cC24bH83,7byH[s'db610R1UcPC^YPZ94Z>gExj/#3WW1dmFjGx$ăU"/WnKmG9d>SqLgkV.5%KS1L,=Kn6F_.H\FmpY+%[(,8aw<UaAP4,6_b5=6n5WRM*ăU"_bR2=)[T#Hdm]b7j\-O9vTY97'\f0]N]1cBxYei2XVd0$yJeL]$0%ls($H^^8XYăU"hZnCh'RAuKtnV:ADzXTxP#MmtdFdGB%v-/UjJHM]gx[sq6]?w;Xgx:B6b$R<=dqăU"9[h3.%*?AvF*/d/3r,9rP%m)Csw7E1,+X9Fm1fX?:+B(Vd#&r,dsWUn,Z648\GeăU"n9#FeA0N3*iv\sH&ok^%hr0Atk/o(Mefef?'oH4aTGsw'6j_L\6RqcrU+/Arn4$ăU"QhBJ--T5iA6(TQVoloTsV]2_^xCeMFjV_#VUNNlm+kV]j%?]OrF=&M+/,].X>nIăU"uaEKvR[[[gZqom(PRB<9Dbc^UAn_KHO7a8\t:J2ySRwE_U\v&lKG34'IlU/#,5PăU"$f9>Anl4c?:4WDy\gnduF$1]>5FAtt9W6#F1#3*I9*S4cKmD8%iVxibR\QVx$CCăU"=I.Yjed?otp(Mg$81e<xe7;FJZ<,i-HwZG<9rTH7H0F]3BGaL$uEsq4qM&POJO.ăU"D[.-8'\L=A/hIE_q$v</$$WFlZuQ^#VkAmqk$oj9wzd5[IUlgN-kFsgen9N:gy#ăU"4[kv)D&mL3>?tv9rCk$lY'-iNzZV#JYfrA(HX(d26Fc<om3Kx\#mR8mH$njyK.răU"_x2*tBX>[;kk;:>7R(qFg95Gh;u;<e_G*58M/)F^TJouc]5LKs%r*DRTV)[Kr[uăU"Z-m\#\hAtaTh8vLPo80hLAO(t'EOc0qn72<?AfL)Mm#Tnm+?&h2[P=up5G>se%ZăU"f=/RUm*9K.<fDkf.ru:d^^J-1Iwgg8J>]Pn/0an)\iW3XPRI1W\q_d1:s2o]Z,MăU"\mR?N9c(%Z:_M+(eJbRBlK<>3=wxz3DSNNVhI/9i;V26gG5]*48'l9)Wh'0S'daăU"RHV='kWGS=ma'-q2&f&5/G?SWVZY>VlOvR\hM/^y5KakuC*)NW00N:E[eyfkNUuăU"tj]8KlcYB2NC9G*m&snk:]KbVXJ^DWWF,CN%poo9/[*MU^f-HIn,7*,c^3l_Y5=ăU"jm(2sGdPr+Ou255R(X2tuFAR=CAkP[0mR%'nj8*&[qIX0pVbh';=0(FW,E-AXh8ăU"toPdS4tVU-PFa,=h4DX9U2%%QTr1g9[:e1XxK7>HQC(ytW[\oV'_V)d:',O/9XqăU"R#YU0tgIq#sz;2(''4z:?>tUSALE5n<wDSXTtQ3Ls<fB\6]vvfB?Mb$?XGCq0\7ăU"'Pon97l_*UXt3_*_l0?M;HfsOZaVYxIm0npWj2s-%'k[^2rEEYn]uIyvB_U[K9măU"K0]C9OrsJG6;+6UVd9HM/S2.#ibi%=+j[d)[]<T:EuqC:21:[*(\c8J;8ARSWp$ăU"IDa'H0nOf0PiAz/qD>-xG2]kmVyqGgAH9k-%d/lf)^Cva;Z&1?,1$)nam[TgmuPăU">Q<UC44fl91xcQ]sDY<fj(LB%%JESC3Ha%BL;YD/MtF:N/)IGSC8P1.Ywm4sTD(ăU"pv<,*tl;N<LN.WVx&Dwn#S(9$1-Ex)X5gd6a,R0SQKw7qLL6iY&9)IlaVPCbGiKăU"jukK#JO/>M?MKTI6V\LTuI2Kzb-:8%E9C'Q++%UEv_W-+=[s:EU&P0M+&(M[&O%ăU"p%xazPbEo3PoSEf2=GF47\oB=,)F+]DpAKkB8.TgD-%DYjeg0*WFHU\#VOXIw9tăU"IZB,+46x6uT1U$<T['xyE.Nm+f4cX[GC]FU#CjiMqBp=6t;I$vrL1ZF_#P[Dn,NăU"*CA&Dlr_Sdn58V]jD^l0'/os]:K/6LVPIjkHhE9]7t$km8)kIh\V6:a8i8pn[ceăU"\C1SZIlODGV;GrTo$t3GB,qE5EDs*bnFWR_;dnnVOL(=QL$ye37>v0pI_2<:X^-ăU"'5*eJ2#/e?TGx.=QGR<WxNP8)ldHV9XZ^.e'Q.lChZ/<L]/;I*Q1(:uZFBeX/-QăU"DQTa*g5%?Nhebl)axvT:M_[+loSTJlA$q#QzR$<G#dA33O^:5+3aE8Sh<v6Itx%ăU">H&lh'/<$^^7R>:fn6EYO33rPGj9M:2nk>AG+-nQ[+I^G<Yn+Po:xtY,yN_Lc.săU"C:>0%R1//6%Kh*D;s+SHgHs%xG&L*OU*gS?nG/;Mq_i6c5terZrfKA=2ftM0aerăU"e=NE#jYIr+_&$z0k0;*[F**-0/xd?Im=83E&aclF+/1NLLFAv+L$Rw5S/eO*>I2ăU"?644*O]lZSv+a;XgNK=LobtWAhV&pXj?fvHR[w=*6/?bHA.;=z[.Vt)VY$8U?/8ăU"7Ph<_QR7uYrm[f[7HP[_HPf*GM,sUKDdgME=0'i?s0%Zmk#sK1U]X:p=<Vcr[LpăU"MSaAZYD#(B9[3F9((vgc12V-i4+W,g$3099gkDdl1eOO^#aG6jflI[?RD/<m,1?ăU"RULCSFG3MMVx.b1eLu)OZr33t5P;7<Aog<%VuE5ZtlK%q0T?AH\*>H8kQ8+&lNlăU"7/T[od+jIa*<fbmZ3B2B']Wg\XX9P;%;Ue)^dOj*edw>0o4E32mEh^Be)qdPQ?4ăU"4ElqQ*d(E:)<=g9,\1F:nG+_KrVK?wW>t+9*d_+_?[T2zLNC'd7)4c7tjVPhG)+ăU"ZrKPNlGgBJV[N&z0U\tzjLrR$<45bDZQwAY'xgV*fEth(1?6ALTQ[V_hFEF3I_<ăU"$0u-v]5m^H<l$GVJ-W(95DcK7EPgS#J(:h3#?5XHA/\IR10hQ$jd[Kon5m6:X=)ăU"gYFo9eqqZZG-c0s]Nr#O<]oP6keG?r9rJbG5zg.QCRH>,+l:5>4]2v*.4Z;pov[ăU"KS^%*<<]#IiPAI=><oCeb\1hC&EHwR&w#x+y]**_-r-B_J'L*Ls7,n;C'^A\51UăU"\gVTxP/C=Y[^(uwL?qBqR%qxk+G5Zctm>:J;Z>1mudyK?wu#oJ.eQzW9mFYF2,;ăU".c;AZjsN#.3fk=OI9-aN:S)eu<r.sfB0;WUXf/61Y>JF8sb#.[\DuEsg.E8cgCwăU"YCYDZA^RWTJ3a.&^*SaidLN3H-_:GA;gzv0i-Mp/fdR&XV0NCESxx#WY2((t\V=ăU"E2*1sI;Ag^5fBs]]iXL$t&;79wp>\:ZeE;$YP.VX#=IZ]a?CM\FH0e-ad9-_-QJăU"gpiXam4i9cvof*X.NdX5fQ=k&h[wED(2^RiN'MRbuN9#/Ga](8Tg)aT?;nHV?IJăU"=ZjOQ[Q+5Tg.DfXPFsq3)O6,;T#Ey1k1<AO0#Q&zA/^FDA2]CoYm9HSSOcv<e9AăU"dQv)<*gDAOO9N%y,##^tz.CF<at<^]vKA3O>>^#>ArD:sTRqHb/Nyj%w)3WqFISăU"b(SR8Tn0-LV$e8Q+;E>#Wx4-/^J*0Ci'0_NQhLO(_;a3Rg+jgDJAn&CqGCBK4&hăU"GqcL'M+G.qs55[&iqmyW'mXK1S25K5SW\f<L$#Bo_C%Zu4WOEkHz:EZwWUY1RW_ăU"O5O/GJ39'^Cg>'248Ln8ZKW5rE8f8/.:8N>;W1iKwnz,4(:4RDj/ox&S8+PWk-LăU"6<P_m8MwLT0YR<:pl(L/7#_'o0i.pSQ>F5#FF<1VJ'[w^&,q#Qp:%X;8.+Hoj?+ăU"eS\;q>*s=JRb>OhCK5$GKX#u5,#%:>3?Q'kBXnS)fJ^8NEPwDi9QBlCk?Ur=4ceăU"l-WMBuSe3E_6p5M+\YDx$O>2&f&BeDi(:36NGEm(02:i$1*r+59A'_Y)ppy0b5>ăU"L6J/St)4f2PI/3QU03+_\mquuq9pfuXicmUj.K_2;9a5^0ucx*?rCx2mb:,z5Q/ăU")*54>e]AYr#-OFSzK7zPY>CRjKwV&>ror,VEbECt3>\3dtBMEgyUB'mWsZOX%KhăU"q&(\KWb^-w$&C3#tcbdL_ff8DuAs^hB<&Cui$Wh':E2X=O8VZ+k+[Z&c28:k_HXăU"36)g2[z[WjguR>O$AT[9%;-f4QJ;K,Lolidx;7LW6zmj?0XZ&6n1CP?NKBn+dQOăU"c3&07R-L$fsjAQ^4P?=d+Pj[H5$4_$0NWxz(#4w]iRRblPE$9tI-OZM^T_/2UwxăU"VWUJMIaKsQxx=JV+IWq0$R';kTJao)aEG02WU)Ae$>gQFu,$UHcD1^OrEgA8FPLăU"$4eO/O$nupvEtZF>Uk8^Bn3o6T&dGgadS3[a^72JTx,l*AZ:U60+:['>gPm$5W1ăU"2Q&[]R0e:Gxfm(''E<CYT('nNT7_<]aASQ.V/&kY7a?M#la/?7eJ=;GxY8$oJ%)ăU"If:]RpH?(rdGFr6r[._n-A:k8p*+l6.2M\G5kJD7gU^c*KCXE:'Zx8(lgr1Mm8#ăU"o)M6voC'dHF,OqR-.,1dE3=z*LVGaU4BOsb0&$tc%irbx*fhpCXr1SN+QZg<qCLăU"kU^41]btM#'5V#(lob/u825GkqTuYui07gnT:TDW;5i:h9A2V2i09_9E>pWdV6găU")+52/Zws[*onWisk;n$DS:sP]D7PW'q<7JgpgMN,TbjYBe0tJA(mBPHNBijMhI:ăU"v$+Cc51&8hGks8Ls2J:6gmC%mZQH&2\QnUpIriQU^a8K4Zu>uF.s?uZ>u>B7PpPăU";bLpY3l>8xu#/4^n*9K-;qOSHsN/n(,8nsO'ha=DZ3x+KT+I61%=(a51HgWK.ZyăU"_r\^7e%i'qLR;Cz8\P(l*a6:%l/B*sup8:PfxsNXqb,/m1(VJ#CfRH?LcoQ0#M?ăU"[QE&K)j7Af&.&F(^.%Z#fb+#:;]e,'QDiAZ2;,u0T5*Dr<+8mO<oqtFf(Vue=I-ăU"UZa[>eU_g0S)=mlYw;YIr.Kjj+_<7C5B/fW9bl^E&j:<tU>m0?h>eSeA1xV]_XdăU"kYTw*^m:)U':*V#%)h_2&I.qtNKkU=(G?r=:I'7ISZwB<'?0YK=$4$W=82pEHU7ăU"immt;N.uQ&3\pW(0av4VmD1]vq10:?UTY_U*B<6&=oBB3QGP70pZgAaM/gELW^răU"AiK/?dJJnGI$Lvq3T?Py)zfwXgs]a%84NB1iF&:-se$muMS+L7o+$HjU1DPUM1.ăU"ogU$3w[Ixo;Y&Ice&>09]pQiu1*,qQ&9(0V8g1Dk.u.dww5pCz8]bfX;^\ju)hHăU"_4f^YK2pv-N3Ho6.*DtEW;gF(j$xI6Mf4:N*u2Hl*J??U9Ji1^v-:-KF&4qRWx?ăU"ORwJ8w*Lgw94ReiZ1g_$[^lcX&:5'*2WE9-PN*yR?9i8(q#.bIaPFe2\N%&:k;&ăU"giC?'7BXrOnq^]0DobQUo$(M5niR)OGEP+$dB^FCdN?i%G[o'bAz%_&pS'HAj()ăU"bl1X3)5zYBrND(s:1JxaM$=efMgm0UOoZ2.;%]Kw'DU06S2h&)DRZ,tO/x%TFhEăU"B3R%,Q5&x>%+:-qQ;X%G/\mgz*&-kRd3C*&rE(5YRGtTE\)?uChu_Q(D(Q1<=G;ăU"Fb-$B&p;Js%fsRJ(Mv.f^NU^83nOmbl2*OM8d.p0?Qfv=8%/J0u)h:sgUru*C9eăU"8ff=uqLb5^l5wb-B.oN?l^(Fqio(-?v#:q\RShGh7]6UjY6RAoYH6Z(FhHX:I7kăU">w<[[GG[ELoQUP$7C4bAPM,ON'-:?i^6N&HgLhRV=JTGRtU[A(-dggP?m;]bH.BăU"jR4Oa6nQd-d+x<9%Z*)fG*sk?.$oaUN9XRrn#G1N&WUknomg<]sUiOBOk9:FfBHăU"S)Apzba]T.>;.WB=PM?C\JrZIdn6)mR\dn\LOuM7q-l7QcwY[buJYuk>vfj*vigăU"*v>5tp6;(4sTixpi5LUsnQB_fQF>:Rv+?.?tPvpfEA2OF)+K)7;A%sVefKFnm;4ăU",)SFctG)87M.DQDFtYV+3qOb/r)KPWbVPAuOOS#AA[7cTUe,lkJ(mrC*l..\b90ăU"XHy_b%F[9S\d97mnve1LZp>tWtZ+5vr?h't&1JhwG6PC?<7;48,pI#q$$*Q3*0*ăU"gxAo)b/m;'1.+vs3D0R4WTjuK(AsaI*^=Z8.)l5$$5R0e,(r]1:jW=qd-A;k(7KăU";).3SMB%cPDlj8=TElE>h0bO:J,il:gHJry5R7EHd=:ZQMm(vYiNX#5'Pm$'u]RăU"a,3p+fPnv>-^C&?XM9#%'a<^$knrE8&GQfIKEERkCnwbSYmSL,E1mn.UL\0GOc+ăU"_S5jKP?)RUX#S#'*JI)p,7v+vUGrt&=iDw]V>dPb\M&tHvoP=V>9S?:.<dg5*L[ăU"A>W'4$]91bUt1=Q_xf,9Y$yh2:zUTUZ2X&Rh#/'n;gEVxIKvO-sy)5<0pn:$HSNăU"P4&9?[*vE85UJRDcmZW(i*t;0(s*,B1'vvej;0^;0LnjjEj//[T>?Nv[##y3>4WăU"E)'&0u>C5D?CRhelo:Aw\pk4uki-H*(cN02mW.48[J%uR00/]gwAoUjYO58N>.băU"7_^Ct]nQpIGM/6[,POe$pM#>(.#>9f%;UC4]3v36PeMJ3S,QQLL)jm3f&vl?qmGăU"hHFGY9N/yoHudGoOU;KYbSoP97hP?n/>ZG'0CvWFOK$F>&Mc/pT5vnBrk)s35W[ăU"xYAP7)P8(wb^Mu.;GeK;Ul6,e&tPOP$]kW;\RTeBPe\IkkMmBCE^?ZmYK5GT.ypăU"lfRTK=ZfES[yt:SEv,I&:]QHHf5sDssu(<-HPQyccn5c&7P+KG(c.SipA.aF^jjăU"9x>RvLxFPY^)::S4_O=6gPhPJyl49286(k7[:'jhk:U+PF]dQK:/r4SbAewqJcJăU"j_U_mkQ^S+-D&;Xh:oag8diDC,<Pem#;o>K<NsMs3g6g7hqu$*[qh.YFaAJcD:0ăU"Lo<n;_'+-(5MJZCP_w&.4ptGAgtg20I25:\SR84ux<IzczJQ>?V+AV>,MJk?&9'ăU"bgI-D>&0;kk0$A&G%?\P9oC7u\6QToQ/]Ug+.)IlLv1l\EW)GEE7m<Vw4]OOCcaăU"3ZP:yc4%S&\7--rhGAIC3c(-76G*qE10Jaz[sBY9F\N;5K&uPYcLPF/ic1>hO$KăU"L(8-gM3)X8[p,ZW=l$8sg*NBtDsk,_X-T4av8PTs)p37%w^'&uxP6M]T1K02'Y:ăU"wqr/dZ7.s9[plrb8?jLPCqM[rW^Z<5HeMbtC8&9oQ9h)&<yBr:+evwVk'dJUa=văU"a=fe^KHc,0uG,%zVjlX&UC9=i>MdMInN.N;;jfUdO8H6HQFN;wX^<e.?:nIWsXRăU"le+gNHWH>Tv;mYU83h&)ejN&wZ2/GmXg+8-BaqPBJRc-pI:+/O$-[ZGc_7tA_:&ăU":Z4:.J$^4x'rr)%'+LOJ+ZQ_Jt-sq-4BH4UkuPn;s1(tIcf>a-9GPMsHT?+tU(#ăU"?y_1.MeD$21F01cCDl+e$fG%dH)d5zoo2q-sq=/8s&ZI6WBf:)t;f.X<#E%eQ%:ăU"O*%O%(L0zZCPC8(<'uY]Kv6[.^WLHMb7JSYhL7ztwrFcU_UTEXrL$g6b(X_n]'XăU"EJIBXzlhi0#$'T]ue?,/p-iQ/;8F-l&%nuLpLa5o[?H;\+-k995u>0aL^LWlq:0ăU"8eE$&2Yi,Y+oX9cB1zF<8aKbfs\^7ki_pgKefmg^5HBToe+l_^iN8FHDY>FiigUăU"s=_ifM,EV2_Yyt6fpF**t&1j.Tg]XxTR*?IDhOjxg3vO.S)rXX-;_t$#98_n^B9ăU"[+Zc_,^JkCkl\+un[g;i):;/DjVk4bBcFWp%-T%ZI64=1/*5+\vJ_#fnkop?wWiăU"Luav0lh=)c%k,5Xl^AVc0IS<nZpLK2uV\eBd]?-h66=5ZQ)S-e-*Hw5^2BmHgGMăU"r5q5X\5<4kp5k-(7j4Ql+cw;9l/LNjZ$oy9/Fa)pBP<:r_3wQ_AP2ZNgfosBh_găU"mf:O_DSVltUZZp-Fkak6O5I5-giT'LWRQ%5+-l4Y5x*IYB=ahff=Q+HTFX:wCLQăU"he*-+=1,ULXjVBs,.]*jhME.Z5vk?t+6cyL,8of?[dt<cG*=_QposT%hCdxAZ3MăU"u1ERQ<tKgkr=4W*r%+M(*>;39kqHccQE#GU%Je0r%6jMBK.e6AMcb0)Ag\g/rsdăU"OKJ2RiyjjN7e4/LQG)w\,N'KYv(3DpJ:?CDG*BZPDG2o0,,71N/+As.N]AI7^w=ăU"p$1'/<pL](N^j+i;Uw>q4,+]405dwb;KfGD6JMFs+/&R%-1\F9l2v.Ib+]2_]P<ăU"bKPLM0Z2mT8WKD;sGMBV0G5?'f(e9*gug%yP>5oXuO2E)xz/5]aMl8[F7O9]*hGăU"lsTv8]0W,CPfBO5p17?YF;<*P%$3J;M#&'0Lm&22=%\[3'#)'T+TnzCrq,XnQ.5ăU"*dR,CMF$0)C>VY[2ZCM]cMcdL70QqfEHDIgID/*3\59Jt;/9J<XM[GAV%=7q4kLăU"Gx2'PTiF\Em4OzXAw'$h*zV-Imo%6Xf)rh/mGA^3HE5uC+FzwmhtG:Shh3XAW:BăU"e]Jsm^<r7onh[E80a3g6ujJ*?^fK1,77k/dkFO?SVrVIoD/DmTA&b;^JtfsKMH3ăU"dK]g]/t:ig55UQ+#xPT.;oRqVr##rBY*a5paZcB?,%vFviO3OeQuyCCiKzsG?0<ăU"&Zb-8[SSLe?bwXS5.$#1ogq\2$2p)MI?[%P*9gJ#QKQm]U4<WTGntA+>FN:x8?;ăU"uC$wew7h=;F+#xT86g<ezidl$V\fl7.PA%*Q*WSi)9m38t'EVy]U8.uMI,d2,5lăU"/n5_uD+mTp]np(]a<C1BV1X^gdz<((4>4sVKa1R;Sn?E#]iD>]hDC_p<UkE_%1;ăU"#9\Gp[d3,r=rDo*EdPM$N)^rICe4mY7DQv-?$\evt0JMGmEu_RdOZ?/lBU))?h'ăU"\Y*J]e=E?.l6kdru48dLPR//I;<+(duum%-H*TcbLg1q<S4WThn.3c>s4UlZIVPăU"+1I'fAWx(rTXMegVT>#JG#k2/\(#2Qp+V>Rs#+3\qnBTt2jZsx7'C;UlcrPd%KcăU"wV;Pq6N+j4m)Jp=Ikkk%mJi/n[r9GY/$[TL7LD-$L7oRK2&R89ZsKIj7Y7O4s/jăU"Pd]p*7L0]+la\MES2jlMnB)uGXLYPt1mgE_uFlJ^$Hc65bhr\iDM57Rnf.xa_,năU"NuU*A>81O$sS]u\yo0WQ3^UG-RmpcA<o0nk(=]wo\'FIFNf/m,vgR[X$bf:bQR:ăU"TZw,Y9ru9bRLZ2EtzDQ<:r^0<C-T>QM_z8't\p:Z1.ZTuk:Rnm#nuQba95_+xy7ăEND SUBăSUB V2ăU".cY&$Egb$/K(eH?FD[QY_TdK\ua;)h-+9;d0ea;V,Ba1#XLGdNUuz^Qsk>5\_w[ăU"zX+nYLB0p;2B\)F5dS*M^<4diYc;k20tWG#:JEbb2'rtd-)/+,0Q]Z3SSp^?LH8ăU"'ZTHLV\^6?gqM0]1&70GcKV.%iyvjE2lUDqy>SlL%P=a:g%g-'D*A<1Gea6Dq[5ăU"0/Ya<B2DsT9-A;H:Z+?[9?bb1tD&VigBos;$Xg<LHmAFjAY^:.:=-s1[Pb2['(răU"y'v3q<Jx0-3$pD.W1YsY=raK/6l-SiDWy:?'8>-N)I8=q\/3Vya$o,xIkS-]otsăU"KX]y>okPQ.0lrBC]C0y#SS:<v=.;)b\)nJ5/u2NO'V-dp3-;xZMGnTl1&K&L4O6ăU"cVj%l[lt?I55#YJo^p6l#WeYsZEU(gp>Ohi]ga:nn'FY]c5]'Uu+tg/S.kzOd.,ăU"->64EAVVOcc>gTF#92q,pXrk:6k3lV^=+&09r9,Lci6f9q&10a>,N,,-T+AtkIQăU"VUk,X0Qf33rn9&M-+[NgCiQ*;o-&\3%8vyF&Egg#,L:EqHPI*NwC5?pXGU<A*PaăU"(Ji,,DYlTaa/5d\f>j-An,cV*$%-:iMX40U&p^ed&TiOG1pFb$=Fr9akpH[VzwkăU"Xt>OmLclk$,]tY'W\&4BJDgBM?ZTWz>Aof#,+-B1)/h2PGyJOhZUp5O4ImJe_UMăU"Wkb2hFof>qn6I7K^-umiYx#;+FTY,Pe?]%*NXg-%9xQB>48<[J6UhU:])r8Zu#IăU"vmn22F,wN)5To,ATYHE/hSloVmpkZII.tbI=$-6ow7IaW^tG3RWAsw=(q0ZSmH_ăU"M%uQa0py/lE,]7VD7RD<,;oR.m+Am(Jk?EXv5c+TIPXd1NW=XD'U:cBrbNh,uNcăU"n^X-Bk7??,vYY%A3laKw>oc:keN&o]a2BN3-BEW6/>#:D,kU,qnq+;R>dNZu?\iăU"b%VT=-RUW?r0jL1M^ciOF15L>C72#0Sxt:0HH$y8)dvQpJ:qiCL2YNhIo1+q8mgăU"Eh.=bGHJ\?v]TMYOp<p'W1eA9gq1[loa3gCKTF.B(a&dqKh+De>gU7kVDecoTqrăU"fJ+lgQpSV7[M8B^V)c4_$+tTu(K95op)D)lI$&)8hO%<9woo-ClTD:AWv+/S3d;ăU"8;5vEUl^ccD[Uo7XOlf_SsIov]j#ALi3i<yWuC?om^RqJ<])l63TJxaa;V>*ueLăU"/naGaF+gUyP7.UmRVCg\I7n&Y9Tl\P0#Gjw3#4EeSiDfF+'6^YAs8<VJBId;(GAăU"0T_j59#K](pNMoh=HhT4OJ<%%8zr5s?q[e5uSpX;6=nR30,*[Ce1DS%YWC-19aFăU"9RL+,Tzm(9jJ&w\?195Xpcm>b2b16Y*-40C%Pj-<e;)ycC>+^0;/E:5WXIm4ck_ăU"&<Bgtia^W519#QGB6dGI%J+SF9Jw7$625qp;ql+.7\q)&sy))pTa73drwbu->9păU"kk#E;tTwheb-YTInHwn-I$KV#t\mK_rAZ*TWZv##>k7%X>=n:3/25P9LMjdI/\ZăU"QUJZZ3e)KL9+xX9UrTO9^[$#;V]<RSsik\IKI7LQP8N^b3a1nW%T.>'jm<Et]$)ăU"fk.In>a[km#Y?Jrjv)m\/Jn5Wopw,oPTQ.yYFOf*0dx+CK>/*-^qP:aBI0-B?THăU"8yMOw&09Fpgbq'scLjH>w2:ULWdjRKcnS:-_,,a'qG*rULx)C<TF8nde(F0#sdNăU"w==$u#)$B[qC(:RW*jxLpjAK3Z;y$3D99o2BLL^CM4c)STen1rds6qp,xNV;gcXăU"TKko)+rKM7UJJ<kFtvqgK&y4+5LiOD.]'=ePPn2M57I,MPNR$o/J#A1;<=i7iBHăU"3<-6TWt2cSJq#Y'ofJ*+Z;kKjyzjP^4B1O+*Pjn1>?]T%7/p&g#+=Fz*>BF^X*0ăU"tj2mCVQG4_.>qnY8vencU)#SJOVa#Goqe<ie0=G[h)W06c^qj)kC9-]DTlRWZ'măU"Jj[Yh\caffJBFb,6(</Od0<5MGgX_ViV+.0Cn,[1\[cgwVZ5RK4Q8%g43UjF>RhăU"39(/ub;Y.b-FY3)nS*%;rf\\Y0F?V=P\bU)A4Qd9JN,OiO[+l?lH]o$?L7G5/uwăU"mLpdLn1iV)p(f\]9Nhnj;G+61wF9'gdWTn=ZIX]01oaU#ttj%=rpFhh<)mHJx;răU"pu(q77_I8O=-:O=$Kl5,gt%[\1e'Be]$#(BvUmf(d-7Myfeh(\)K<RhK<2?WRqUăU"ZZ6nAc\C[S6_DBk]-r>:_ZNnD%uR,wBBIt_2[__zI8eJfno):2$Tyv=p;dZ;;iHăU"-ZAAE:<UrZ/u(r*Xj5*LoR0&*5]\w.d,KraUs4Tu+cahLOX2xu3I%JJU+Evo4]$ăU"$UG-b,011icmuqiosAGAha^*.r1;3EDW8G%K4Np[xT1QtFJTpfZ<DZ\*uFgtn_2ăU"jk:d_QL3Sn#QJ:o>pOH_v_BRNLuaZn[h(zr(>wG6TV+Rio>_?Fh>$tobTLX9+gRăU"\(gsb/WIffi838hD-3gT?ioAt99SP>)/3]Mp(+$;Ez%:*?synh+)F]\I[-Z1wbFăU"?i]M(N8*I41s5<;X=&+m1vtEJ3#MP&:VHjsWi-]AKki^3&#EXt1YmVTHMsq^;4/ăU"W:'C7t^Wt3LdFpM9Y);QQFFW>dBL%s*qFTlip,:2_:IN\AX5if#EO+IJ[&ONa<TăU"W6<BCFB]h:FfwAXx8LgkIWWC&pPDgt_m5:A4m(;T;Qj?1?xcr9tr4op-l3NHFo0ăU"'0oH^q0;6Xl-uD<\ImEMUa\o8;qkSx/d69^V[L3m86mY*ir7SJ<]Xo*FgaJq69&ăU"JvSR[boQFo^P[WcmilR<d8m1AE]VNWmrl.<5#_OewbC?gVYF/U(2Wi;gqKYxr(uăU"jtl.Rq0QZJsqLY-FXf_.Imz5_tJLg-6Gkt$M:c5V'1nTSQk-fxY'qwM1c8npjd$ăU"WqsQrO#QUhxzBRwPJ^-pB<$Iq+oXQ+T.3usJTHpjQEnj[3-O27LI4Q(Y^C2CA:PăU"sn-</vvuUnto*/?D7:DIwFi[GZd7x\As(C6fYH.#]3[7]ZBhl+.Yr=7Z-5.F\[NăU";Pl;=6$;=vQ[R.0V3d'Gr1FNMPQP-_0#0[Xj6me5guaK2T8xHGA4$.+B7chiqE6ăU"kJ9=5brw:=i,ZN;qd=lH%c**<x/kEL>_r62L[Vj;9>MCp^)eVkpd6Cypt[:/'mJăU"WvuptCf^NW(T,r?)'W1(.;GrH%[jKhT4QIFN_(J%TX.DeQ,.r(JuEqPBr]b*^7WăU"nh6Q#i7)C'TgNKJ0K(<OOUHZD5q/1%MD$\Chw7aOw:$R'n,'jRDDqaZ(?Z=>Q%:ăU"\v(DKH[u+PiY_6$ceD=hgz;Go5,,f)qZ+-G1GQ<B32r*k;NlmA)/QEMD'94D41%ăU"=)GJex8ob+viOupEEAcM^(YcW)jR8Z3K,2kT:E)0l,5=/.Fx(OgSu2,_d9cVPbKăU"?amTVfQNqxH,*mE6K(/%*qT*RUcSTE>GnaaiN3eO?$e%Zl>X3g3%#^XfPOfoEN\ăU"DhHih/L?:Xl9/;_[=h5ReP$Sa8nPuatA>QJGf7do&C+wr4ENQFAj=nSo[pWJ^lUăU":S3/9zpp&j4CiCkaPKx_5LWDwxk=(eNpa5ZqO8X*/_fN;6I;?*abQXt,+qp;*#SăU"jww$CNnY7>(tI32Rojn(<RCGIm(ZkSC>>AV2?_mOfH9#NqV>#)B$;TFT&oF5ST7ăU"9QXH/Qu_Fi6;+_ncqv$l))>=;Q4T&YEfcXixCg1T9kJR5%?+AdX>iY5u141,T9UăU"%lba8L#+onWfYYd6SGYk4jh2<d]bLz7_G,wb4sCnFUIm[DMSSw$iVhA<sF^?GzaăU"daaoR9az>G9%ma1m<e;[GM)PMH/L?5W2?>Q1bN.c]sTNHLfFTV6Gsp)P7'Zaj%LăU"UER[&#2+5'w*^_92BLk02P?=9)vhvDcB5j\rHM'IAmWht(L7N47^#;boc\-k&QTăU"WslZ<HnKXl0m3emhyiP/21#LUJV&hXz=Q2G[HL4M[46He^s^wqy[7[6LI6oU+($ăU"uN=Cuapx9fpX;Esn5arrI,bBI<NIEvD7nO.D:IpnN%G_zeq.9bmeK&<u(NoTK\oăU"qY2\k?7qqJzI?myB3SRCkg3f?ONtVT%#=TI$nR$P*C8f]+Lt;4EadPoFZ=lJRzDăU"eu\N:dC,OrU1V%A*$^G'hKbGbJFD5<U6.A'OF6$hfPZ.6*x&Z/uG:)hmBfFxnv=ăU"/5'-/&cJ5Mn6Egyi?#86M+\S6naU(NRe-2^(G?)EeUZc/taO-FcYp+dj;X5bd\AăU"Z411E:gEp$,dl7'\9d'S/':R'#Ch18=CJJ9tEGa7SvCjAFSwY#j^=8o:h^j_$#9ăU"*d5BxpVX42:Pjba4PJ,fOjxeaadA\,m=[j:apIJO)-6U,LdbV+,4]jlX:YrM_*:ăU"L6w<>#dg4XBFA>$%;'t0\CdmKS5l;?R>cWX/(??G,^:Q>bxr2,8K,5fYd^V>&t-ăU"7XCcJTGS'1&Ozqvkf_jf]&$<L=qlc7s-P+CJj4REMZ#u,Lh3F26;*D2s-Gkm&3JăU"p0GWHPBsS\SDJKPr;\%^+(FABQBZEdZ\?=R(:&PmB;S04a=F7Q0%6;.b'^ntmgVăU"zy1B+D,q':?%-yK:,Pw)sYplFObxWh&cZ;_duI'iVi7BR?*_c'(VdhFk-o66X,yăU"W#5z9qMY]wqCFyQW*Aoml#Y<j)fL1Ym,u^vI2ESylX?K>+_GC>LkzBEGqD6R1X^ăU"ipzDq;0K,eAd.2_Rx\+an+x%pJIrNVP2$m,T'-BqVL&L,vuCDcnxVgNQH1XVM;zăU"iY6]Ko(l8;3xa<u=S03LT^0mXh,d)AUM(Uln&$YFR.a,w7Cz$Say>g$R<B&oby5ăU"[0h=I-ft\b.HlVo,\H1_^dilQIqQ1X<UE%yr/Bn^pZ=^$DOJnFHkeR*vH5+W7==ăU"2TfqMV[fn52$*R9$5%*H3)Nm?TwDGcv&9d[5?-;n:kw\4ojAU&YrJ&)youR&OHyăU"S=-'3dj.,v4(W6JoQ$]%q_P3z;A'iNH<x]n6<49Xs95Fk1q&g[*#wxj=Ci$#MF&ăU"XQAJ29h=(R5mS:]%-:V2#T+uEa4Ym)HU.JQHshYWvn4>zn*-EA4ioijja52dtGEăU"ueD/vn'4b/Vw7NB:J:ZjP/WTQaD+Y-V+:82\<](L:'Z<Q4qH*B^ChB(H_wdfoVTăU"2eh%ZmhOwP\8\]Z>DVGLYg4SvNSlhx+WMvs/pPYwcd0x43j&yRJZFT7J+dm\q2?ăU"sUtgMI;d>[)fxPsO$7EICL=c(5f)/-^X/GV'K_\-nm.mh-_#tnEsC75>#:vf#,eăU"f*X[Q\6nq4OkmlkIbB1$<JXknGUijT?3<.D\WXqixn>o5,Aknq<C^gFJF/cYpP>ăU"XZ:4Q[Yjus?nmV2_EWudfvH=Rl3rhh;<kEUx$327,2o]1P;CcXe<NKl>-:T=-:0ăU"?0^Q#g1<Co/mzXz9W=+tu1e,&DCkk>4%h^O8b.5$qYMIXeRnFY<>tMp(v'_yRd+ăU"u&a9LT-4QaOV>]%Bi#JtEH\QPp_CuB^e=L3\V(0D_&gTiXAB$3UIL;&MfW\kPvmăU"e0G6<7jqtGmR/]5cfDbs9#5V6'2&hHH,..:Ux&>O_k[l&xCa-Y71f3?1nA5b;\\ăU",r/5RFX2vq^ES%qS38:+/F[.(.XmP[o(V/RSDGYxBSAMd<X_$Zfkd^tN9C0wunCăU"Ip$'Cpkv:5bgM,YYo/(A^8\Wa$=N3m-m5DotZECDV(^2Sr3]nQx[NS+/x<:Yg9JăU"1vWC'g(A6(k-VBcZ%ADas+xG;sE2$g5CetPkVtlO:oh&Ra4V.Hr<&3io%+H6QjUăU"W62.lK]D%4#t5av%4T%Lni[3qj$N:NBR&$#r/2x&BM8_Hh[GiQUDX8_E\-3p+e9ăU"<)QD=kw9%HQ-VgL:;(Cn]'HA?X/l,G5rBz0wvN9mL+='X.JoUkXpGd[j+546R(oăU"SK3ngQ3*GIC^c4E+W1IaD:*_rg.8=e9SOh'$O'70Ubhl3VX.7Cw*%ae=(U\y=QYăU"B(:=JdF_kAU.3oV,oSEHnm#sdcWt4tii:Ef\Pvb-ItgSNO6Q&E5oEH2pmWaiI4[ăU"51-3'e>1ox.>ns#qH=[n#E=6_.1K/bdK6/tC9J9bjD<)o0G4IUQIBfJ+Tk)o>+ZăU"?K0_WXhJ++F8n))j,KZbfzi]ZnUI('>kCi=\P09nMg]JiV5c?\ZmR86ev8\8u,/ăU"M%F]]*%K4dk,R^'4,e53$XzZ*O#9o56lOJ,A-QQcnDP.1NYnx6\nW<^j0i3/04%ăU"mZ(:IbR$7juM&947/?E*rHgV=.rUCdJ1yKJ8rATBdS&uoy6pW$tJo5%YMvlzb<,ăU"d[:*t_%Jku8t0$3_3DP&VI<jB5FaiKLONa0v]_PpYff$g9ue,yN__:^<jeokwW%ăU"4zH,r65:w^7nal2#kQBWFYLBdR&cWECC^kN)VZGos='52TSf^J/OM#k^7>uMIoAăU"pkVua1R]1gI7K&6GN5o+fp_e:q/D.RmWhoPLkduT(At0+^n2fg:nKdHrZ6<ii>,ăU"qp-t=#6W.p8F9d^zGP.1baI>pH.**l'Idm[$z,PWEKo&:)48mQF3/>'8NRL#u$)ăU"-F;h3z^z:=4?);8z&:W';O,Q5x%>%+-,qQ;%6G/\gsz*&kBRd6u(/Km6#/avzfNăU"7J8p5ZMjJdBEY$p)]1X:TV3f#hjs]4QW+Z)\7y9pB+/G0lez=#,QFQ)DQG1m.pkăU",E1Z2L1K3jgO[pmY=wC94=P?,7vF.b:WxZKDrqjfY<SY]j+ggY/.6[p-'rG'Ls/ăU"\a#*BYUhGjji(%nO5dH,24/s/;z^>gH9&'-MoTL#UlhzfyOB=pzh6R#IxQd/KnMăU"yR?\[WNAUnVFGRsCRaOhyF0]onHI=O#V9d>C*RUL2BW9>2YVJhgV]-=#:fMOn;OăU"<[#=7$-Ofcq$>P<:(VBHeLYS0(1Lf$<T#9RS(aG86WV#6/]6f[hZf'3*:CE?Q;UăU"r5G[I/e*3A2pgCAir'N=#FWj.HlI,+i#UYAf9z\0[62$Vx6ZRqJ;h&Z-skDmvW^ăU"'Axy[:<z'WLvhxyCE-t-gv_vUSqs<7\xIHV3OA5#E*1#gEN7(2mz,ZYgL-h_BZhăU"802=P^Z$+-:$3_go''u-];,g^,w%_xdy4r9K2EZ?ekmbxw\k8ti_g^MAw**DHauăU"f:h^GPt0'd\g_3^?v3E,4O*-UIy?Xb1_YV:WwT'4x_qpbNe2Y=5I/=)XBjFrL;KăU"_+J$XJAtQk;T[&-hAEKXjj5pxxr,Y2=]9>av#0JK/an+h%i*)(.D2S#^H,YIMNuăU"'buLl5/i05NttXj=e1j<WOQB>9bW+#tw7M/+MS*NywYJXN*\CMd6r8gfFnOr'b9ăU"$R%RinGF>HY==3^AMvl<5gp]yIE6v?JmenBd;u;wROG^>lQnT(uuw;HreW\$HPQăU"J206V-u2HlL7J:5x/&Zm\1Dr-1Jb+WgAZ1p)M/g:V6M-_'4QP-MU),79+L.n:ZoăU"NbKl?gUJEUF>Al.#L-1HoGzE#nN*-HTSHlTA2[pp0E9Kj4W\k%;,n913-BPK36/ăU"D7:'P=Tga(6Ov><b9RkB'V-]%<=)qb9fKe.u3:ODq.K+]Eb\Reqs?Fgwo^TQe_RăU"J\anJV2L]sc.B,.wwK)^r]F6gYZ$GXBRg)9aTFZbW4/,DjG7b[9U/O54/DnFggZăU"PwG4:Ic4fRNg_e(M.kLs+E*vq^ipFO9HdnTHx-%=^Fu\tg/'G;Zd*we^p+Le0p,ăU"-qG=<f^GS:kG,F0=\;>j-Ijj$#td^MQ$RU6Is)__Q;lS%2-ELnE[sCV:dij;3jnăU";9m5e7%R]C^[#L47>J9?lp+tLFj^X<uzCC#N)dQqf$>DOgP\mNuo.G.;Tr(>)SdăU"v-%8$DiZvZMBu5c]7r[;n3a?cIlai0-ohUm[A/ZF-Z];'%;;S:)(CohlWi)$&O]ăU"+#(:OhDCiT/?8W?T$j<^tdU'3AJQ_VDLtuwRp7M+:.0i((V&RJaVwa1mr$I;NiaăU"2#0_Rci(4vOl/c3TH\uh)lV&nHaaz*D-13.CQuLk3&#ZQY*pA7<e?K+\vY#$ccsăU"T'quHlidED&Z1%]6rSy;j<,\QsAQlMGo293zR]fEu%ad*m6mQAJ+Dy=arNcuy)'ăU"=E3,V)GlfG9[zy%CK#TP.LDy.KK$0KMYF,enwDBGp*eD]KNv]eFSgD(dzz>b++NăU"Cs7U-ahuSf)%_*^NsPL%S1YplJf/s(r(tyo#*Hwy8fPAPvNW58,a_&x800?<ai]ăU"]Wh'&h#.N220%^B;$pTob17Pp4kKrO.b9tFt1<GS6c/d$/R]bif^Rc<F#7rL>k&ăU"Kmv-jkcic:p&nXfnOP[L6cEy/*^a$H_-CSAOFFSj[n>Zt3YUr2=$TsX\Ta](&&văU"ByaBL0vLt-7)tbd.K1A[8yLpBo9[qlzq[[4bGR1Ixi.,nL+,axb,1766+,axZ4,ăU"aV>mcwHaFnxopRroP&vF%+)fF9c$BG/SN8*oD=kq>X*Q20P3KCOlTI<Q'<qBiK8ăU"f72Le$i8<Wa?qKDM%W6>\aG\k#0>;=/#DgWkIx?+67\KN/QI5tpM%X5IBjmMghyăU"u>)g6/8^UtUk06p3SKCM2(Y<>+KOAcYU'U[E9f?'VcQ^P.a7Q=^e.D]e#hhn^)8ăU"5OiKwHpH4.JXwX(8^/lW1i.Zpj3b'tmTG$.gdkkd^L0TI]Rlw[2T4,$1c/v&W_săU"0;7A,)r#>C+w+^Ra2#%<yMj)9\nJAyuL#t>^zNEa=62%vnAR-F&KDn_/]*eK4h+ăU"OIt[Uxkh21/(_P9s=\31((YTMDZ<]o/SIvWH9d[;eihX6L8v;b0/c)Y(j#:Hu%kăU"588_%li0isHuD&nd8cz-s_Wwg)tChx/GF&t<T]muJ,ykd-m<le>Isa22dCFx;7IăU"IMK1eP^eENMVG51_1a]'>heltd>3M*>8;tbQR6u&V&Yg>DzNuKa&gAni^YKUxsZăU"avp[S#exxH,u_dpFhpF%dcpbtWJgOm&u26l;az+RRY'R#S\eaIO7snntu:*kPEwăU"^Z*.[RmJ3x'eb_.tL(LcLC^/%'-ul+C-)*?$/k-IBs94Wl5&5O2nFbe3>2rP8-TăU"kc4t9&HlQc2A_=\FTUQS:qQ*?O]q4+8/4^s9p=5MT[Wf5LAZv9^Z4Z*$qy9g#UiăU"Uh?6028gVVIb<GE&PRQPLDP<z&;SB$KpI;Xe%g*8m21ugyC8pV1/>H-ZTh+(xjXăU"kT+1+&($nOdZXeqS>PM(\d0b$S3OD07y\'4ge>_'fVD8%jXw4v<(v#hXlNnI0YXăU"PB?\GQE/],2A*$?49WM^.l(:ABiZJY>1$Ns'#njns;&Cu=qlSnc<LskUd\87A2.ăU"y2S(w4)FgD/)Lt>(m4kRg:i.0eU,nS;#Lp8ZPfJ;n'r:^/>-^m+28TJq8r6P8FiăU"s[aGH4<C)_#cLa1()48^Y'h($M3%g22]bT(BRjHE)Eg>Kn.HsgscvsDckvvF7Y%ăU"[0XUYc0nkwB<)%MIl5[K8$*oC[skw.].ww<SG$nsCId7e9omKeTZ]RVUimg<-mUăU"XU-%ri:GN24k_LFQ\24:;I%ar-*\4+.[x6Fg]TaA59%#\].nn1:RV5DpVJ=DG4LăU"FuB?P*G6ec:=K3Z<(q0$oLv]%%&J><uFf-%s>N:[//GFTa(v%9&Woj#>;ZGIk.făU"kw13%wa>^rHD)'e:*8tiSsRI*dm=NU=:Q/p$%kk5l1'vSP;YNQMfnQ[jlTb$O7căU"2D$j%IrRv^T9H]6dFzWQ_]iVL<I8n4lV-$tLAg9#Kr=gY19D-SFqotT#L)D+GFpăU"Tl1$RaErX1m0A<#tM(gy)1qP_jAChQxJ%U#h2CHS9quq;Xdr>yCX)cYNK:NQG_măU":cBkweTmn%u+X=bUXtTP24/T]2cur:v0=lG3Kmacv\Y]uZ30&zyGyGMU.uoQgPgăU"sA14.7KR?h+x)ZSLDnkdLFCf]jUtm)B/TqQ)at:8qO\U>F:6dV?WoIj2Ti(unrfăU"pOpX5u62UZN+)U431U-opc2-'QtExG\M83&waS0Er:ew$JYt(OQZk>Wp\?:9w78ăU"o<#lFaUM=3X]yM3D(?;H7&oAUV=#2\%+4OFODD&M0h>RM(O^(%[+I03g.L8,^2&ăU"XkJJ]#=T9>]1C]rcm+q#JZkfjgVXCW]u^#9p\/44O?A*p)a;G$[3WX71CJuRo.UăU"g7je7Z6l.\QM]qwh>Xf-:9Fu_X+qr$wX+lQ$78><*HvkM#%W3H=1_QEUKp_yC7XăU"'U1GvtJ8U>i0Fv<DW)um/o-?S('P&e6t+s1SIB<OtV8K?6D]=Z-vErD8BHmXDV-ăU"b)2M5-Yt)X&#;IYgtFvvnifHy+nc]?\\YKwH[36BQbDSTED4%0)5#S6cQe67T^=ăU"NgOz=MvK?/SQ&N+isZ.3?kkl?>0>BcM]9f#GCk48[1,TSiFBhNR0aH$AkFMC]W*ăU"B#u6_zg-&av&1cXs<$7k-Ixs]pL**0?sAEnwD\drY.=P$gfLnqYLY_5h%EsL.q#ăU"0*5'ILuq^ElfljYf.(uJa6?ZX(O7hc.bWlag_cL3w1_5k%phBW?AMNd2zq2BJ^*ăU"JH]7'(&.V4KxG+gbi&U?^0fl5Ae9VQ/B_dq#r9Onp&#CNGis71]'X,cYZSO=6v$ăU"5ch&O/jkUJV#[J.*IQ$_vwWuRbb:X6W9&1BEL'G?D^/m[N7IDfG/S)D9mm=+osqăU"*x?8nf[4M#e'/vIyuwWYHa;v%63fmJQ-WO38gv($)7.R^c3<3)vZT,J6M5QJsN_ăU"u[?._<Yxf)Z<cjYNHuwS#5LP&s9;P5ul+G+K'&UFd2G(c+E'qu&&o(tD8qgqq5SăU"mWE=w/?sUDrmJ(?^H4RuKh]=j:g^DXjmm:lKZkmLb^K%jY%e0AvK$p+oG($Y4WWăU"dPz(b-c%(d\<5j24:SVk0:A[k?J)#+p./9)^YH=<.cVQHg2wk-.w/6:DbZ;qSNAăU"X]VPy^DZgaEjDa9BD6g[+8l.LT,+8_<'NY?RRID;/*\/G?mjMhmj2OS_fBeXUL_ăU"u[D9.&lB%%Y0FX=ZA%a[b^[Y8Avoc))#hngAkl6[lHWR3pklD&nudu8I&VD8-l?ăU"CXp(R42c5#WtKr2tAnI*[i(fOi7Jh\F8T73v)\d4P#Ki;Q<Rd%Yc1xqINQ2VnpSăU";crrtZGb*rJ&BlLd]4I[0;[HZW;'P1N<ya%<1qD%irv&\Z>dAUR.fs,onkad6OtăU"m%Z'CiSRVApPYh+1zPJ[d(oiFB[p*9ekB58TTz=u00dlC05hG[6U<:YM0)pImPHăU"1]aNM7NX92T8a5.t.&V64Jp[y'[Of$Od_-Z+b2;FI[[a>pPE*>)kC^:hbH*w1)\ăU"J+rb,c'pQQ47I;-(8KkQE?pi,MLVK>ViJ2YM&h1DT8>fXwd'(mP>vh5:Qjo#iziăU"&dP%4DD'CpS?W(M0B(=vd'9dVvO#6&6XBWk#RWW$)d5cTnA.-GW\5'8U;znG6]EăU"$^8&/fY*?<Gw40M$;8<w9$L*.Zno;hCV3Bb$F<HfMgj4BCD&R\#]BXiRh2sU/L]ăU"rtUqcE7pw[_XqM'L^yhg:OYiPI>S#2-rq-hk2>B\iB32Zftr5NlV>U'6$H%d_C8ăU"NID7tLH[_'E8)+Q>stbwP+UxL&)nhCa'#*qV%k1hq(:Uh3heKbbO02cJ4QflrV0ăU"?iu2GO5RjlbCUIb:QAPnB]YL8OG,WL&GL&M6GK'kogZo?<P(UB2swe&\GAx.R&kăU"hUxtmilm#mSW_U&d2=u0(0GQ4AiqL4%'OoU>/mFQ\_%?cEU^.;:?>]1[4^',3LpăU"xZ7'ESdA69-=7QOlN*gREnm<%9$q*%50A6J)<wI1M#i.b^BLAk_z(t;L-NQ]MezăU"t1gknP3G14Hs(EP+t//pNG=b86p4'Tf2*H6;pF)XFy>/<oLf;NbUW:l;xy:JKOUăU"/e\LR;d5C]UwAzE(F2,QYxh)==$u^x>Zs%ilUmctm]gs3JtE=U#Mowq'sHoEjmBăU"6L5\HH3(%_]zQ&i+Md.V&H71EvfLm6*'7Xceuh4-oQBa'%-[A/&JCwVt0JsL1?DăU"J=AC_[]2DJ<bW\Gn8B?'TQ5Mjk%/p048#*Y1eIDpW)EzQZZWs?*HT00ChfKv4=9ăU"eV%SFw<&+]\I>*UCxYV&x3ec;#l%qbB)v4\[[e,R5h/tGc+XR=C01;rxr-'TALYăU"V7q_1CC>.QJNR,)q7W,A62EUSUx(_$9Mkak.'-U+HAm6R<&+[;)F#sw$S_5;;Q(ăU";a7iNem18u;ltF/lAuY1icZ_Aj:b7M:.H&tY_nDQ5gmm5HVTV'T'BS^?'MM<cn?ăU")W%'E5/2mCe*5VC5[+Qq/'XCPR/_<L0]EA[Sip^T4Z_FD+Uul0&*TEQRYBV^wg*ăU"pEiJY<XLVMCUzdDf').Hg&RD[.,GSKQJ.%nE_fm5g\ok-,t1_&j>1?kLCb2$Ul?ăU":]AP'ws4>;T[7BrGS$K(Br4WuWgj(Q7af_H*R80ku^<rIMTrROUMnOj<kH,VN-OăU"15<qh*dD[^t7ss2]tI>X?*kNMEB/=vRD=jzg]Bw+CsKD4UzEWTc,RtBSF'1B5J:ăU"-G)/?;b/LHzbV8:]*.3?B5H*3X0%FB=le4.R2F66Lh**_X>H_/wh%PE5g/MyOLeăU"A2tw)SOrx09te'R7;Mr>'A_8)S;ShAbgFT5iups?LnY?3O;<LR1hpH:rvfU]GtfăU"g0G(_<NWI/[m\9u:gzr5rhXP>X1urrRPJ9)ViROMS^o4%F5T$(YC#D5#^J'i*AwăU";yK9KOHG$-2\l6e:kweJ$biXD\uNe;UNW++lU>%E/\Z3vv'Kc;?QMa\oopt3$FlăEND SUBăSUB V3ăU"?#%dRC^Z=4T'gx4b78'$eO>mvadcBYEd,kRV=EpzuOVh[.Qt>Oo&ALjN<W4w='DăU"qSl:Kf(]_o8oB;ZY_[d=S-09T/OjNPY+4x$%/)%krCCLCH<o+54&IsWY>9jmupaăU"Y1rg_0R*<^3b&#?U9P[bN#Xqek6-=UOX($:yo.s8i5w>0QD#Eon?7\M>T%*37t_ăU"TM-o=j+uJa6*i92b+k)XTU/u:.5,N3)IF8NHX9jW+RU/kY^y\')6OX=y3r+4<kFăU"V-k*6gz)DG'*uXbw[e&Tr.N)1,Yn1z+qe?&5<Lor=phX+r8#=68wf(qMc6KJ)YaăU"Y$+ql1H+6D&XPRO,uKf9_ElPV3]8;>Gh0>$Ih+'kcuW858Ze50h$%#TWUiU/)&2ăU"\cJ4hezn(Rv^-e=5&RG2hvC6h0CB&iKG/j;jSLs-i%Ir3)H4IR(uaYwzbl,5Z+5ăU">\3I.hhNUHx7Og$oBE^p;tM[6b%&>dA1YwJyGEGf-=?0^4E=)=VE4].U2qh34a%ăU"S-?_6kcVZvdm*vdWHmkd?YGe?/XJL6(sN/9*1F=<][/cZ&isQ8:/Mj0v([8#D%3ăU"T<OFdi$&$ui40Q0Q/LOZnz^R.#$t>tR>W:p%VHgp4*eg71N=r#V&&4ORF*8qN;SăU"]Ij1?-5#L9UxZ>*$B%p=+7FX-RiQU:$mck9.p3/(4o#2;;6?^t78cMnNk,FSkVBăU"'?DCbj+2(CJvTQKMD/FWTv/KC#E#Sjpbc31<fb1u3%X+liY[-]=o6r4>68b7UP*ăU"?Y6nL-)7hbJ4[dO]><ACu'5tPg]AyMquR9GrAnS,$dK?hNr(.JcL;x)B8o8&=K/ăU"vNcDk5)6Zk_Cc1LvR]]6TTrQZt$:=c%%\6Q2F-LNNiWNR^q8)darv/Vn?APDgabăU"D.1_n;q:Hxh/2204ztmvW$GPN)7EgOKedr,0+I4G-\=JT>#I#seJGRp4/sPB)<qăU"<=ymFJK2[/G5Z[ejO4SlW3OxU?8ieu-[Vk>9<h<:b,q&xV,EZcFUx#FK:X3kc9văU";0&G8k4DHw9_%,3)(m:=C9q?4Akrj&Mi\\u(h6#]xHbYw2Q293#D>ok#.V,[\XCăU">9VR#^V$F/#+d'6sgVQYv[V;qVFJf30j376:n:btEWf>X.VCeo&/+w?qAEaZgoaăU"hZSLoWXq_I0(SCii/:]%c<:B\zZPk<3fq=t\A[Dx6=ukR]2\VLO9OY3t%CHE4p+ăU";MfHna/PdzyMCLUzXVe#'fehOEzsSmyK>hgHhcOj$K,hcMtie5qrD't:B6KQZ4CăU"&XF#Je(a]r:RUYa?s)uC/X.3N*3.2'TmPsc.fOC]uqiq([ObI[iZjG1R74PW+XqăU"6k/'sORI91jY=UGlM9WDbba6h.6nN8hXZwnuh_MpG:WfW*VP>09276'9N25R)<,ăU"Q7nfDn<nn:bq7NCvnB(MXcD=oD_pAUoc%BLreD6)smlPa8.eHX*$v;pV:R+(SQYăU"90.:x*(ob.1r$vk/dc7zNI6NGyRXs6[K>=a.QKg7lMd^VrC,Cw($(15/*Ed\aImăU"N2Rk3Q&V<['.dOE(o:._c1ON4i^\AT)*-N68FS'?Uj1$)Gx+OO9Z#h_lYoV\eQmăU"LRqBe83yxSBb.'msdtMF*qtQ%#Ij_y[jkl*DYX\^DLx*PmR457qDcm9Cf-7vWM,ăU"Go$j3i(%AE8tpj/'BEE26oATW8Kb^syfQEdC+/.?6]j93>r[tHvx;)nWDhD+daNăU"QFbde-20jqHMuZPr>4f7g2\z$mCS^6PI]GbCErpIQgj])JZO9RLm%sGlXw%k<A+ăU"\<D9$FT8KtEr_Zi>DNT[u#SSAjt%c5AUQPI'uU_p59I(u0JG1AoaGFc(t=QYF_HăU"*=IQAd601DGvK^oVrg9HK0ru+bK.S0):ek:cSm;l_og.]k&lVRG]#^r,KA=.sisăU"mqDWRHG3cj)PTVqpE*PDZEOKK2_nmR:H2x(%up()%9%%%%-%&)[5HD(6iGJ+%%%ăU",W%%%0%%%%yt%tqgf%wSifjyfhX,^Ti5-#pQp,&KmvtA.6W'.xF)QC>URQ;ROS+ăU"-8O)6mgdLbmtkss9^8ZdDj1oMVF6;;.M-nnzGHnbAcl,l87hVW.6w4TxU?mFJQ]ăU"'5i+PB?:;/2fe]e$2He4wLop</0#WURX2>x$5dh9SZ:A,$9,%t*NC)<TjmLS)WBăU"+xN+WH4=Q0'8*C[6^b9ihv[1b<ZSOPfv6_P,*nm0Y:eCw'$'ddshgi+0r97?eWXăU"O<HAL._IgN:*gshr?gG'r'5Lo61n<zYF$Kh9XKQuV%'*Y>ET+Q>8T9sSH\4kJWQăU"&JV%/8:Z)It4#1,^4F&KJ2lod0E<bfbvhdq-$XqD0'1Q%z)N,kzuqHUQm(OYDbAăU"YHu_)[JvzR<ZkjET#JhfX+50GpdMJ9OFYdAk<J,J*8:mH.\E2FOiWLT].]v]=X'ăU"/KmPZtY1K,oKrc3^_MU>^9EDP[HD<:';aowWo.5n#H,bzk/?FG7uFA1NuDs;a*$ăU"g.E3M%n#qrOEH#R'V_>O<s^WYa%\>DsdUC&Fjuc]49Ab>21n>>4&>7>XxBHfKT?ăU"*7-P.IxC^XnMgalUtow5LvaQvLqb7Y-?&g5l)?BB)</na.d:MK=%*Gj6*5u?Ie1ăU"PM#p7#DOO]4,kbhwDW=K'rfhw1vKmF*G0vIe4],k?#?3sBC<vsKTc^B/bULJ7.6ăU"B'1SH,rA%X<H5.T.-<Y-qb.<<_5iQHIs*W]:C*r=e8+e\B6>$F>8K</:F:vpz?CăU"g>1;BLM))d0IX<=h>^tEW1Ln2yOd<wM?/&OTL.\MUlvnK=fM-N'N?]PMl;d6Tq%ăU"z>[De]0#d,rf_1M:gc]vq%sX^<?)O[j6giWR+vYeA(eSfG.)ObESb+tYV?BrQ8'ăU"IcBribHrA<BsZ1nbN'RKW(0H0Ap5h;j:7AENe.gDrk3cS_%zzNd?<;:H'RZl8nbăU"h(*[vSl9S;;tmBCcLltNd*AIL8\DKxE2kgVZt>Zr+Z86IXs?vivp?m\cJs60VagăU"p/[mGRd\P8Fmw-9g4P;ugWo1Z%Rwx86_m[7K%v_ZuvdhY-,YS0N82iB838\nKRvăU"ErfPt\NjR)0MUmnLV*NhJ,ea%q^mNKwr)Mim4<>#AgbhH8+0OB<_j4#vE)5dlpDăU"IwT3J%:Jpxh-nn:XJAi#xM-u8->k:,(Y2?t2p4B=78L)m\[#PLw\.l6;MLj>QCHăU"?1sF(\-&=pJ;(2=KeL8**e.,)W2\.Z/lqGHZvR#66FKmVBW0+jYfRHFCafyti+GăU"bPj?Q$%A<($UQ:WUCYeEEz5Y/PB0:+JXFp)2D;\pwV9MdW\?_ok_j1P>.FkiIQIăU")Es\i+K]dO&TB^SJC/-OeOGfKXxlSQHY4O.$[H(bU]hsR*\hr;MD.3VdOt9d3L3ăU"F7kmnxb8\<UoU)TfOn#,\R<Lf^^Wlx^bDFf7hDWBs%8zQhhMBdskQu=12eWdb=qăU"6?<L_0[h5H4FQG]Uqqc1j(rbcbbU<)jHcdzhKkBjlDEJ9[LDAk[#VWdRu-/nJ94ăU"5#.RvhmIqmH<n/ldKY1fb0wb7,lpSaSZC8/G^RBJ?u[gcqAM:a#KuG=hL*yXA#ZăU"1l:aCsBcXoU?'nF)l^E1']trs^Ea/>WCaY?qB*03RdaJb7,m<1wVGRTbmnZ_x/8ăU"P7iI;:RF0-sbRqbg/xa(LDRK91>vo8'/N8lAx6=l(J^)W+p49%B[Gvn<l+4/JR,ăU"*pdsg+rNvYOr*>8rl3'=8?skR<Gnh#r?D?ovX2H(^OBS.Z;hkwpew<%0N1=_sFOăU"t46ga1hLsTX<-J%jZxMO+1u<.zR,'%KZ1(BRkd6<)M.<j:NnlsQ16_Uj6%H>OREăU"D7NBu2AyNh<:J5ga^S=mELt<i60n6B&0[KNA*;Y^cgHdD[GMZM2_?%dX6jLfZA/ăU"NE8>ssfu/+$Xtxsd+u_u<sSt_hYWvs4N$$WZs>0O=DY0owDY[U8G_M%cPWo^XNtăU"JwDHsdvq<upX6OkI#6P7Twkj%id5U%rt^kbVbL8c-Bl/i[>ZS37xM0o.vH/,]W?ăU"fRAL/OGPc+kDxBQVp-IS<[KlXu9wfd:f_&i+Fhc?>enbc$GV3=yNBlxe\O)aTR=ăU"hv2_wN1n_^P2nY^,QN%up()%9%%%.-%$1I6Hfg/DW$%.%%;(%%%.%%%%gw%zxmSăU"#ifyd#sn3RRU54*0ktAEsRIovUT:/a,0?my^gObW[WvC[Fv7N^F<jIeYcLKW[o2ăU"i%WvNWUP:CU?;zwROTg,diHkU*VkeQNQl2HMLDK]XP4l]:WsFM#3e/&lPdJ8>D>ăU"X7Q=+og6FFYM7nNGiX-IM<y\,1<*Ji+32QszKU:Fqoj&A3=I&TwlW>5f\XT%up(ăU")%9%%%%-%\#[6H*3<KO[&%%%(.%%%1%%%%lw%finj%sySuRfqfa3daqU15TJk^UăU"O306^[W3P-;Q#%w-g%?JmldlO[4pHPq):qFtcuBq_^d(c?R[RYU?=kYr&be.0VoăU"j6jui/E+)z7zrLKMbX8iP]\Gm:\jF;kZ>9.Mqc5(]?^TD<+<T$^4o(1%%6%*'Y%ăU"'%m.fD;aU=]?aY>a#bu:,x#(3)XMT%W0M[#Y8h]HRFGlx.Nls9\PD,?HW#Mu3+&ăU"OeeIJW;1WI=HuW4^[.d933'0.v)c'9$E=e.dBOLm(t'8<vvkcTJ:$R=)'7-qujAăU"E8%3T+^a,AoMj2mXjHhi\H2hCM+-1KiacI*i#R-+'[%C.O^;Y5T[=tNoC^-CM(YăU"d]8_:=,T-Yd$oKcZf8gRh_52$V%Cmtwm+s$Dl^0GPYWEeF_lZS/v>?2dn_UnaV=ăU"7\Q0MtY3'46'4+S%(d?8%WZ2\.UdfstkqBpu$w1]TNK(NYfF79g4qz3?7dHwiCzăU"Nn9FZWHppp7C9$i=?dwhu/;3p]p/(u(VoR9kMWUHn<);[cQuNl#lQ2/]\n[slMjăU"b)(B*8yG6QN7<YiLxHU$(wHVg=jejQDtgLHSDT>T,2L,6=7&a1tYaz>DW/ziXFFăU"wkdx&wk.rN^rxdxx4XxN%%up()%9%%%d-%X4m#H*Q>z&X0%%%SG%%%-%%%%mj%qăU"uSiRfy&(q.BT1:6N$1?8<oN*K[I$>f4mKelc'/qaG[Q?'^UJS^52a(uR)4d%HzHăU"ov-v9NV,OcjQ$5S(MHvqO'tNFYN45.e:4\,CPvO'[P40=.?/*Ze7UoR?;?b5u)GăU",>I;sYfFdFzt?Z<odpc7lhtb[mNs-i*9=K9K_g-:SbQ#T#mC>zoCXHQ%DE*U2$TăU"/s(C'&16JS)\:*rqoU3tl]RY0_(+7'x79n+euA]fT+,\.-;<%dBE'tp%<<8;H%.ăU"iu,;C3of57QC;ch7BIzQ:1n6/p(4*t4\d0cH$maiTRxzPKr;P&4(lM)IYr*nY>MăU"le7oayZ)BMqUxJ%rS(Gt/gj2d<C62)VChKNJGqn(E%):kvqGXN3HfkG%c'#lG5ZăU")'0BY(.#MA;b]Ub8hLHccXKZ+ARL(L+j0*z/MzDf.Aov[DiSsfll%B<pduCd_1;ăU"y6,9N/Ln?>=<Lz:Q=:1a=B:2,J&D/=qX1Q;WtQFG7c;0F]>H8-sWIMhm21oyUtqăU"D8#D'/Si093h7y,u+c1,0R?(tm-93erbP:rh:sl^7KE#J/ne/)(r%ALIJfqrd:4ăU"Z+E[-9eJL>*sNAvem)7\$-LLxUu3?a:gmd-wl,n;-]sj%%Y<4cQ%K^y*7_nC5%4ăU"3VGV8:,T/&dlcu7un-MZ,]Csh$O/+Z]vqMsU3Z%<IUO%.%.fs.G3&ZIROBm=?f<ăU"^-Wj*Q?[Ph5'KXhiHr(whT,J_S0t*77=d[XFTQ9Wf]+EBIg^A(>_<:[q/fkX_7zăU".U,Z;AxI*>Swn26a5;+l9l<tdbyke\ewlhQH3N)33E)C3k_m/\KM.*M$m'dkAPEăU"5cIpAPMhm^R;-/^_chu*D1i6taiBHRn4Q_OjRa:h,eKbdp7JZ%]%Z.f7u3'W>eEăU"Q]WpyK3nY]#Cq)Q)V1.</m[dhLtx-ecK.G4<b\<.E)<Tngn^N+^[5<Mt.%P:po)ăU"VXANkDx+=.86$Kd'.KjlUqq2Z%jU<ODp;V1%)r^nJ:)1T.HkTuLim&LGnP3*)1uăU"rS?KgA;pLfuIR?8*ZW]Nb-7Axt.xqOjRRLEqeC)YrE^G[#etJ1X'$O'o#F(xkT[ăU"F8\%2kD$,(p6TMIVOi</P?;=UXTWGd'$Z]r]2Cb5>1SUsYenLOuPEOcVg71S<xZăU"#ktYN<e\2&s:]YPw=^H]?)LX+TWB;Q]gd0I>TWcXL[bX.Dj8J[Kyj;P<Mej7hLAăU"6>;H.P_ImuA;.VuEE+ZFFXI80k;72YDp4T*eX2^AWsH172,n6&&#%ANHE/ch0EfăU"suqT->DDI9/]j_'8x_64+Na'i2;VV?sT$7(zjeai1>AJ$F;Cb'DP_F6hrm;-[SSăU"Q&<d+M\V]WgdXD1Q<?wQ83BhY7JtDhVncbsXrse37b5_-+\EPpMeSx:*vii^Ab3ăU">lkl[ybWslAS0^OD9D>f&:1Q^X^4vd%<141V^g+NwXKBXn#fGkKl8W+a^[kyv-*ăU"GZN+5&$UmZ;XZ<dQP?P1bgmD-b4^,eUWODjJ0_]T4Bq8dbS*LUZeQt.x6:x96nnăU"]jwi/mg(hD^:yx*3Q))^k/EpV-TG+>T&G):?[+NH9Lu_U6Op?pJ0&QC6UYYQ\f:ăU"j[Z+R<dn(QUOScO%I62e]R8-1)gFKH)d_oXxLS$iT3?)x,BGX6g45.O2bICt-msăU"=P%T.tWR2ZA?tt>oeW[TM1<DP9KI>OG[p1HOks16gAVN-<Sp9bAvO1[?T2u7=POăU"Ed7m#Jf;?'==?[cM]#HB7FJ]6mKUzu>,:G,:.NU$DkZV=+.NQIx,=j'\HGqO)5\ăU"^2_FhOGF,_b_0w+wLrk1tjDipE*+dj)'<9=\)(tnm2QVjgY,$5#kODrowvf9BY_ăU"Y<\E8xKTD$5Hpq=mqch?bqi4$$4B=WE;xZ&=e&7AJto[,Q.*b8IK*Imd^<LDx9KăU"j=gV?2Ns.>JPQe1]PApf;T:CLMVaMmi6Jbk=H;?7dLbR:W^v>3+<W6rkD)TJsNmăU"Kel[W+$V^G$fvs('O&>+o?_r4AD4cQQqWr+FMlqU-;S,yjJ#I+NEW2Ch$wsk8m+ăU"-HgAJpUH<*gdOg\VX1Y6S$4+w$V[qOt;)$X_1.]CcVj,HVe54>\=^l_'%ej?CNOăU"Ukf8X$F#jrVOu&-)fPH#k>w8Td&rnKO[m&ZcAr*5$UP*E%tlAA*oRz^w0'$6&\WăU"X\Q\A?NR:24*qt(C>KT)Ok'7PHc0p7[ZLrR>f,.^Klp*d=6,*2Ic]KtY,P#X_hkăU"55%L;'eC9'(wqguU%Ki-]S-T&L=S=b,dyFp^h1BM*mONKq[s=cQMOj_+e$3+<mjăU"-Q.l>X+t#WQ7U4zT=[&iC+:;?\I[D,rVUJ;]e)S,uX))[W,f$1S4N)$nUq&+64băU"%UEm3\p3nR42<qw6QC11QHS,<At.bEfb#S.a5Qj)hERm81+TgQ=E=D*i.syoCf,ăU"8VPOIRfvb^v=vl8WA3G^J01u#H^9FL5;h=h($64%]p&J9q=4er]#fl-fvMNpZg+ăU"Z5U*FsXdWgQS<T/-/GnycLKIJ?twmT'.LFa[FDBcRLS*h(i]k1J6$RaafuaB2%DăU"2LQm7Uwq/w06>>'ksG3C$%B?+SbyCb/P?q6PiL+T(8]nf5D,7c3K;%L*#_E>h:&ăU".\Q:Qd&Z=1m>DZ1D:qUUqBRCrU3b+fC7N[MfdVXXK6$;.$e6W[5&^^+?phJYpU5ăU"(5S?-5%R5r>^iKZ38lm0rif)x*'upkTi:O?Mr0M4Jeez6;ji6+I%EMD_POWj^osăU"C[5me;uWJ(s59mZUFdQ7Qk)y+JsYo?]RTDd\ulT&U2gd63hOt7\vEZXSt1[1pICăU"X=g:0oq_+*nN'2A2<%tmCsFR&kqPJ,u3scgB6D>ej$WMdn?H\0k=\i8UX>^Ra0GăU"[+B=Gsu1'cvD(b#8A<uvD*U26^i&4[xGm10#]b>V]6_m+E2iN[5m6m(C]P+Oi;(ăU"Y=_k]*PQlIXF(3h(bfZ4j1%Y.2y(BCBhI.2TB^xCnF\47ptjP0'UuCzfN=K<e,YăU"='Letd%c%4Gsb)P4UC-=c[l[PSI:r*jkGl/VAK*#Jn3U3pOim+ETsK'/rH6eu4dăU"zdQbhvJgWQU8Vz?DdRAQGg53uQ4,rQe[wg/^b1;iPp2Kug0RV/fLB_1L.mb5nItăU"7WixM7DKm.Asg^.R1sojd&mR-*Kt9::)HSnzCb(Rdq,IX:p:HAWPYIvj8bLi6TdăU";G<FzJz=0$XEVJx&,#mP*KWN6j]4kynL.KFXoN<P<NMuWGE2(c>y8Vz3]Ze4d47ăU"*\9J?>JaP528/lipwBRu<hyrxX?jE/6>.<=,f0kpPD^#GNhWf,kbRQ'I8][YKhxăU"#'X3leKe&fnltbdjq#&27FIO\:AaySJfT9#j+p=-W,qWj._S^llMh%HE/WtR:kdăU"DjMuBrv[dJE.NL]vPQ/,;.f4ja3B(TK#:;DYFe846n=_Yk92Kk#*<QpNpd;i-[aăU"XNVl,+?G'hLN06&l:-sOzS^,4/R)Ti99*:rJ=j[o_IRy_:cK7wbs$Rp$9K,USLQăU"NT_a2j=gifYFKc;]F6/ZZSv^k4pe8Aio3)x%9jBDDEH*OKiXV-;##q$fgrq,->.ăU"\[IxXQ6\a^jLARM\b6KQ/I]Qx===QDNo+FjBLa$79nH1E$gV\Ka'a#ds*kiDVb&ăU"K$n2'CO#KR?NpcHVFtWHO0A8BKgdhQF]0kAH^HsW?24\j:kt>a-rg#t^DH1p&pfăU"(h8:)n61t8egglI/]z\8APe&-T#BonbLkO^BP$PS]$Dn5$pdG2\]oD?pZjHHMLmăU".leW?L#-#kCiw^ef2GEL&Q[j2+JJ5nkoqA^V7CQHwn6>ELtawfDTZMnd.GS+^I+ăU"[yXD0N=URl=^/dw^%+aDq>\'8up(%)9%%[%-%q\YGHSD:J-g#&%%3%'%%0%%%%kăU"#nqj.%niSiLn)4$7tt\eX1>h$0kBK)mN2^++P1Z9NfPEjmzP=N_qU]l:Tijy8jbăU"$H<iPPN%O<sHlHQMh6v_tjfo'vT5I2S*-eJVa\\DnQps)XWHVvQZr<=v1?R%9*BăU"Hh3eCbH=g_rSjabI+3DK[tRXY.h&t4?okK+PL)+KR=UP&1sS,/2Uvje(m/#0W,PăU"POXsxQAchibc&\u:$aUVcOJB:LA,;bQIxl6D1)Y;'nNRtUUIp#y%Qq;ZToP[$%năU"hZOTSz)FIFmFxsC+U-VgSC1KW4V;qWoR/=:5-,H1S^SB05Bqg-.&Ik:-5,P*&>iăU"Zvcr#,0k.T6hM22mtAt9LGw\L#=5wW+.6s+A:6sP-:[6*cH=GB3a6vLfmZ;8St%ăU"$9h7xB]$vgYLdX3WI/]D$jpT/FSCB^:;'Bo*RoxJDx.m$NP(;yYL<8FCfe*Vir9ăU"5%rIe);.8kB?i-Yi5K&:jaefMwj,pWS;JaD1oHz4KtH[kV=aLr6im;6R:^J7-WqăU"Uj53Pd'RW/XeC?f_,hxup%&'9%%9%%%%-%l/72HCV?oYx+.%%=S%%%/%%%%%%%%ăU"%%%%E%%%%%%%%&'ufn%sySu%fpup%&'9%%9%%%#-%1X7GHD&/'xDr#%%UA%&%/%ăU"%%%%%%%%&%%E%%%%L,%%&'ufn%sySg%fxup%&'9%%9%%%%-%&)[5HD(6iGJ+%%%ăU",W%%%0%%%%%%%%%%%%E%%%'=y%%%yttq%gfwS%ifyu%p&'9%%9%%#%-%$#16HfDăU"gDW$#%%%;%(%%.%%%%%%%%%&%%E%%1%7*%%%gwz%xmSi%fyup%&'9%%9%%%%-%\ăU"#[6H*3<KO[&%%%(.%%%1%%%%%%%%%%%%E%%%(E+%%%lwfi%njsy%Sufq%up&'%9ăU"%9%%%%-%,X4#Hl*Qz&'X0%%%SG%%%-%%%%%%%%%&%E%#%%Q-%%%mj%quSi%fyupăU"%&'9%%9%%%R-%qYRGHS:/J-g&.%%3'%%%0%%%%%%%%%&%%E%%%(V9%%%knqj&.năU"iS.in)u%p*+%%%%%,#%,%X[&%%k&:%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=16AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAlex Warren                    STAR WARS SPACETEXT            comp.lang.basic.misc           09-13-97 (15:55)       QB, QBasic, PDS        84   1753     STARTEXT.BAS'Here is a program I made a while ago that makes text scroll into theă'distance, as in sci-fi films/tv programmes. It looks quite good, bută'it is veeeeery sloooow.ăă'If anyone can find anyway of speeding it up, I would be very pleasedă'to know.ăă'Meanwhile, for more QB programs visit my BASIC page ată'http://www.users.globalnet.co.uk/~dewarr/basic.htmăăDECLARE FUNCTION surndpoint% (x%, y%)ăDEFINT A-ZăDIM p(192, 64), sp(192, 64)ăăSCREEN 12ăăPRINT "Star Wars SpaceText v1.0"ăPRINT "(c) Alex Warren May 1997"ăPRINT "email: aliwarren@aol.com"ăPRINT "Graphical pointlessness"ăăLOCATE 10, 2: PRINT "Scan 1: Calculating Special Effects"ăăFOR x = 1 TO 192ăFOR y = 1 TO 64ăIF POINT(x, y) <> 0 THEN sp(x, y) = surndpoint(x, y)ăNEXT yăNEXT xăăLOCATE 10, 2: PRINT "Scan 2: Adding Special Effects     "ăăFOR x = 1 TO 192ăFOR y = 1 TO 64ăsp = sp(x, y)ăIF sp < 6 AND sp > 3 THEN PSET (x, y), 7ăIF sp < 4 AND sp <> 0 THEN PSET (x, y), 8ăNEXT yăNEXT xăăLOCATE 10, 2: PRINT "Scan 3: Reading points             "ăăFOR x = 1 TO 192ăFOR y = 1 TO 64ăp(x, y) = POINT(x, y)ăNEXT yăNEXT xăCLSăăcs = 0ăFOR y = 265 TO 32 STEP -1ăSCREEN 7, , cs, 1 - csăăLINE (0, 0)-(320, 200), 0, BFăFOR xx = 1 TO 192ăFOR yy = 1 TO 64ăăIF p(xx, yy) <> 0 THENăă' The next two lines are the only ones that REALLY do anything in this programăănx = (((xx - 96) * ((y - (64 - yy)) / 320)) * 2) + 160ăny = (y - ((16 - yy) * (y / 320))) - 50ăă' Great eh?ăăPSET (nx, ny), p(xx, yy)ăPSET (nx + 1, ny), p(xx, yy)ăEND IFăăNEXT yyăNEXT xxăăcs = 1 - csăNEXT yăăFUNCTION surndpoint (x, y)ăsp = 0ăFOR xx = -1 TO 1ăFOR yy = -1 TO 1ăIF POINT(x + xx, y + yy) <> 0 THEN sp = sp + 1ăNEXT yyăNEXT xxăsurndpoint = spăEND FUNCTIONăDavid Calhoun                  EXPLODING TEXT                 _gotmilk_@geocities.com        09-18-97 (21:59)       QB, QBasic, PDS        83   1369     XPLODE.BAS  DEFINT A-ZăDECLARE SUB explode (w$, x, y, z)ăDECLARE SUB setcolors ()ăDIM SHARED xx(10000), yy(10000)ăDIM SHARED xi(10000), yi(10000)ăSCREEN 12ăRANDOMIZE TIMERăSLEEP 1ăsetcolorsăexplode "DaViD CaLhOuN", 260, 150, 1ăexplode "PrEsEnTeS", 262, 150, 1ăexplode "SoMeThInG", 262, 150, 1ăCOLOR 8ăăSUB explode (w$, x, y, z)ăăCOLOR 1ăLOCATE 1, 1ăPRINT w$ăăFOR y1 = 0 TO 15ă FOR x1 = 0 TO LEN(w$) * 8ă  IF POINT(x1, y1) = 1 THENă   xx(arr) = x1 + xă   yy(arr) = y1 + yă1 :ă   xi(arr) = (RND * 10) - (RND * 10)ă   yi(arr) = (RND * 10) - (RND * 10)ă   IF xi(arr) = 0 AND yi(arr) = 0 THEN GOTO 1ă   arr = arr + 1ă  END IFă NEXTăNEXTăăFOR c = 0 TO arr - 1ă PSET (xx(c), yy(c)), 15ăNEXTăăFOR atrib = 0 TO 63ă FOR c = 1 TO 100ă  WAIT 986, 8ă NEXTă OUT &H3C8, 15ă OUT &H3C9, atribă OUT &H3C9, atribă OUT &H3C9, atribăNEXTăăIF z <> 0 THEN SLEEP zăăDO UNTIL atrib <= 0ă WAIT 986, 8ă FOR c = 0 TO arr - 1ă  PRESET (xx(c), yy(c))ă  xx(c) = xx(c) + xi(c)ă  yy(c) = yy(c) + yi(c)ă  PSET (xx(c), yy(c)), 15ă  IF INKEY$ <> "" THEN ENDă NEXTă aa = aa + 1ă IF a MOD 2 = 0 THEN atrib = atrib - 1ă OUT &H3C8, 15ă OUT &H3C9, atribă OUT &H3C9, atribă OUT &H3C9, atribăLOOPăCLSăăEND SUBăăSUB setcolorsăăOUT &H3C8, 1ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, 0ăăOUT &H3C8, 15ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, 0ăăEND SUBăDavid Calhoun                  COLOR MIXER                    _gotmilk_@geocities.com        09-22-97 (21:59)       QB, QBasic, PDS        74   2314     COLORMIX.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă'ł This is HEXCOLORS.BAS by David--- łă'ł Calhoun '97. This is a helpful--- łă'ł prog. for finding the RGB value-- łă'ł of just about any color. -------- łă'ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮă'ăSCREEN 12ăCOLOR 4ăăPRINT "Press R for more red", : COLOR 2: PRINT "Press G for more green", : COLOR 1: PRINT "  Press B for more blue"ăCOLOR 4ăPRINT "Press 1 for less red", : COLOR 2: PRINT "Press 2 for less green", : COLOR 1: PRINT "  Press 3 for less blue"ăCOLOR 7ăPRINTăPRINT " Press "; CHR$(24); " for all up        Press D for Default color.     Press "; CHR$(25); " for all down"ăCOLOR 3ăăr = 0: g = 0: b = 0ărr = 310: gg = 310: bb = 310ăl$ = ""ăăDO UNTIL l$ = CHR$(27)ă l$ = UCASE$(l$)ă l$ = INKEY$ă IF l$ = "r" AND r < 63 THEN LINE (30, rr)-(50, rr), 0: r = r + 1: rr = rr - 3ă IF l$ = "g" AND g < 63 THEN LINE (90, gg)-(110, gg), 0: g = g + 1: gg = gg - 3ă IF l$ = "b" AND b < 63 THEN LINE (150, bb)-(170, bb), 0: b = b + 1: bb = bb - 3ă IF l$ = "1" AND r > 0 THEN LINE (30, rr)-(50, rr), 0: r = r - 1: rr = rr + 3ă IF l$ = "2" AND g > 0 THEN LINE (90, gg)-(110, gg), 0: g = g - 1: gg = gg + 3ă IF l$ = "3" AND b > 0 THEN LINE (150, bb)-(170, bb), 0: b = b - 1: bb = bb + 3ă IF l$ = CHR$(0) + "H" AND r < 63 AND g < 63 AND b < 63 THENă  LINE (30, rr)-(50, rr), 0ă  LINE (90, gg)-(110, gg), 0ă  LINE (150, bb)-(170, bb), 0ă  r = r + 1: g = g + 1: b = b + 1ă  rr = rr - 3: gg = gg - 3: bb = bb - 3ă END IFă IF l$ = CHR$(0) + "P" AND r > 0 AND g > 0 AND b > 0 THENă  LINE (30, rr)-(50, rr), 0ă  LINE (90, gg)-(110, gg), 0ă  LINE (150, bb)-(170, bb), 0ă  r = r - 1: g = g - 1: b = b - 1ă  rr = rr + 3: gg = gg + 3: bb = bb + 3ă END IFă IF l$ = "d" THENă  LINE (30, rr)-(50, rr), 0ă  LINE (90, gg)-(110, gg), 0ă  LINE (150, bb)-(170, bb), 0ă  r = 0: g = 0: b = 0: rr = 310: gg = 310: bb = 310ă END IFă LINE (40, 122)-(40, 309), 4ă LINE (100, 122)-(100, 309), 2ă LINE (160, 122)-(160, 309), 1ă LINE (30, rr)-(50, rr), 4ă LINE (90, gg)-(110, gg), 2ă LINE (150, bb)-(170, bb), 1ă OUT &H3C8, 3ă OUT &H3C9, ră OUT &H3C9, gă OUT &H3C9, bă CIRCLE (400, 240), 131, 8ă CIRCLE (400, 240), 130ă PAINT (400, 240)ă COLOR 8ă LOCATE 7, 4ă PRINT ră LOCATE 7, 11ă PRINT gă LOCATE 7, 18ă PRINT bă COLOR 3ăLOOPăCOLOR 8ăDon Schullian                  DISPLAY MONOCHROME .BMP FILES  d83@ath.forthnet.gr            10-07-97 (16:03)       PB                     116  6154     MONOBMP.BAS '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă'' Display monochrome (2 color) .BMP files on SCREEN 11ă''ă'' by Don Schulliană''   October 1997ă''ă'' This routine is released into the PUBLIC DOMAINă''ă'' fMonoBMP%( X%, Y%, FileSpec$ )ă''   PARAMS: X%        left most pixel column to start displayă''           Y%        top most pixel row to end displayă''           FileSpec$ the file to be processedă''  RETURNS:  0 if all clear and as the image was displayedă''           53 if FileSpec$ did not există''           54 if FileSpec$ did not appear to be a 2 color .BMP fileă''           nn any/all other PB error codesă''     NOTE: This routine is in its most basic form and can be speeded upă''           with a bit of work. I left it this way so modifications cană''           be made without doing a bunch of reverse technology.ă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăTestCode:ă  DECLARE FUNCTION fMonoBMP(BYVAL X%,BYVAL Y%,SEG F$) AS INTEGERă  DIM FileName AS STRINGăă  SCREEN 11ă  FileName$ = "IMAGE4.BMP"ă  LOCATE 25, 1ă  PRINT "ERROR CODE:"; fMonoBMP%( 0, 0, FileName$ )ă  WHILE NOT INSTAT : WENDă  SCREEN 0ă  CLSă  ENDăă' -------------------------------------------------------------------------ăăTYPE BMPheaderTYPEă  Ident     AS INTEGER      ' 19778 = CVI("BM") if .BMP formată  Fsize     AS LONG         ' File size in bytesă  Reserved  AS STRING * 4   ' junkă  Offset    AS LONG         ' file offset to start of dataă  Version   AS LONG         ' 40 = Windows 3.x  12 = OS/2ă  Pwide     AS LONG         ' width in pixel columnsă  Phigh     AS LONG         ' height in pixel rowsă  Planes    AS INTEGER      ' number of color planesă  ClrBits   AS INTEGER      ' number of bits per coloră  Packed    AS LONG         ' 0 if not packedă  PackSize  AS LONG         ' actual length of dataă  ''''''''''''''''''''''''''' OS/2 stops hereă  Xscale    AS LONG         'ă  Yscale    AS LONG         'ă  Colors    AS LONG         ' actual # of colors usedă  ImpColors AS LONG         ' important colors used 0 = allăEND TYPEăă' --------------------------------------------------------------------------ăăFUNCTION fMonoBMP( BYVAL Col      AS INTEGER, _ă                   BYVAL Row      AS INTEGER, _ă                   SEG   FileSpec AS STRING   ) LOCAL PUBLIC AS INTEGERăă  DIM tBMP     AS LOCAL BMPheaderTYPE              ' header typeă  DIM  BperRow AS LOCAL INTEGER                    ' bytes per row of dataă  DIM  D       AS LOCAL BYTE                       ' incoming grfx dataă  DIM  FileNo  AS LOCAL INTEGER                    ' file numberă  DIM  Oops    AS LOCAL INTEGER                    ' returning error codeă  DIM  P       AS LOCAL INTEGER                    ' loop counteră  DIM  X       AS LOCAL INTEGER                    ' screen X positionă  DIM  Z       AS LOCAL INTEGER                    ' loop counteră                                                   'ă  ON LOCAL ERROR GOTO MonoBMPoops                  ' local error trapă                                                   'ă  IF LEN(DIR$(FileSpec$)) = 0       THEN ERROR 53  ' file not foundă                                                   'ă  FileNo% = FREEFILE                               ' next file numberă  OPEN "B", #FileNo%, FileSpec$                    ' open fileă    GET #FileNo%, , tBMP                           ' read in header dataă    IF tBMP.Ident   <> 19778        THEN ERROR 54  ' test if this is a validă    IF tBMP.Fsize   <> LOF(FileNo%) THEN ERROR 54  '  monocrome BMP fileă    IF tBMP.Version <> 40           THEN ERROR 54  '  54 = BAD FILE MODEă    IF tBMP.ClrBits <> 1            THEN ERROR 54  'ă    IF tBMP.Packed  <> 0            THEN ERROR 54  'ă                                                   'ă  BperRow% = ( ( tBMP.Pwide + 7 ) \ 8 )            ' compute whole bytesă  INCR BperRow%, ( BperRow% MOD 4 )                ' pad to 4 byte gulpsă  INCR Row%, ( tBMP.Phigh - 1 )                    ' set bottom rowă  WHILE Row% > 479                                 ' all this is off theă    INCR tBMP.Offset, BperRow%                     '  screen so just skipă  WEND                                             '  ită                                                   'ă  DO                                               ' start processing dataă    X% = Col%                                      '  set left most columnă    SEEK #FileNo%, tBMP.Offset                     '  set file pointeră    FOR Z% = 1 TO BperRow%                         '  read row dataă      GET #1, , D?                                 '   read next byteă      FOR P% = 7 TO 0 STEP -1                      '   bit by bit data readă        PSET(X%,Row%), BIT(D?,P%)                  '    set pixel valueă        INCR X%                                    '    next columnă        IF X% > 639 THEN EXIT, EXIT                '    past end of screenă      NEXT                                         'ă    NEXT                                           'ă    DECR Row%                                      '  up one rowă    IF Row% < 0 THEN EXIT LOOP                     '  past top of screenă    INCR tBMP.Offset, BperRow%                     '  increase file pointeră    DECR tBMP.Phigh                                '  decr data row counteră  LOOP UNTIL tBMP.Phigh = 0                        'ă                                                   'ă  ExitMonoBMP:                                     ' clean-up before exită    IF FILEATTR(FileNo%,0) THEN CLOSE #FileNo%     '  close the file if openă    FUNCTION = Oops%                               '  RETURN error codeă    EXIT FUNCTION                                  '------------------------ă                                                   'ă  MonoBMPoops:                                     ' local error trapă    Oops% = ERR                                    '  store error numberă    RESUME ExitMonoBMP                             '  jump to clean-upă                                                   'ăEND FUNCTIONăAngelo Ken Pesce               ASSEMBLY BUMP MAPPING ROUTINE  us0082@uniserv.uniplan.it      10-05-97 (11:53)       PB                     1030 67963    ASMBUMP.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ASMBUMP.ZIP",4^6:Z&=50755:?STRING$(50,177);ăU"%up()%9%%%#-%W>#FHtq'R:G+7%%W3%%%1%%%%fx%rgzr%uXSgRfx&&qJB[34:xăU"n>u7<R4*^UIKB*rg'-/e3)taI_:s)/,0\lrl/Y3%='E7e&bCt.B*4+<5$3pEznjăU"WKHu3G*A3Jo\mO?nZ<j*.A%[kTwf43j,>a#CcgN+]fzPCmn/o#''Sb[3CD?uLJVăU"annhUpfglFIrh,wvusjZDTv%cBH[%>Ge[vV1FT9a^02nRiC7eQeM+SVhFJ1B,'XăU"qLB*)3'WIF.FPGTD^X+1)h/;pW$IIu[6M1'YYob=EmEA/67?+;lmvJPW^V+aZp'ăU"EnTi=])_,/L:TgTGc>ak;PB3'-B$ael%PUm(.49)7kBrGF6K<$dW:Y<=acA&l='ăU"%w^GqibK6Wg[5V<PGc1J'S>5,Vw$tO$IQ46TVJzPD1n#Q[K'R0)n<YMuz0fNnhuăU"hj*p=#[$[>]wugu.4WaOC3N9kLsnF*^m3knFQ=s*^dP'*:g'zkX340>^MhF75.GăU"_G0N/aCLndFJfIe;k%HsEphlUJ$v7/xu1g:VE</-%Nlu)hX0C%uP.[^JZ0<bC4-ăU"n'Q%7CWz+BC9_5KfBFL:ay*^]Zm9_aSfTH)H1z54-ikEL%d4hojVtldU#^X<oM[ăU"VTDf/WRrwfVzzZ2pCe,i<5IL[n^QLEN;)Xg&%PmS_Tdnf,U.B,7JrU<r-t.--QYăU"F#%Yauv*&GG+'WZF6^]Ym<fw+MUIW2=7%\22v*&SQr#/JJ^S9KASsjI)w)oAEiXăU"y&)_*wCPsH7mzwZLJv?]kl$k*$)vSsAQ-C4$.,'Ln\.L)zXlCUKoo5[;AMRl&KuăU"gqy;l%L9cHoO3Vk_qvC&dq/.]$$-C3LupVmMl+T94kMX,dufdt'rN_8#kD>N+n^ăU":dB>%aU(c>sPcKtQShRuUkTbz5l[JTfL\3lAkCm?ocAIcd&-1O=vMjvw&4'qk]jăU",6vU?dL5S;+TQ2L8B7v'nl()He*UZB=?+Tt.gq%e=n+2usd;C$[.(S:b&bOR)fBăU"F7mD/ihiUh3uQ3,-aX%]%ga<^<m']aP8%SK2^-L-$r,rUuZ<494KVKSOhM8i\u)ăU"<E+G[ameT(2WqyI*huDr8yKY\Awhv0g6,j\C:VpuBceR\B'hrcJr<^cXo]gSU(#ăU"o8KMqb%oXcN,*tC3U?/6t$[ud;/H,Rz%kv.=T/T&kH]]IJrH_oRd%77GGO2_RtiăU"i0imZHaA<XwL=Q(E#M,4OD>9&>PVq20Fa.,0%XD=#m99?Hl'E_yr>*g?;K[Zzl*ăU"Q9J9-'/2XDU2)digULO%qFHpkS0w(z;LRO3atHRtMwH1lG($DcJ9W^9/,YEyWYlăU"/i0#>PDHPrx0cgiM0k.&['^%dc.8iU6>NW6V=Mz(G0%[Td=XmLQHR1$aiumx:HGăU"a,(n(xM?bYnkhyVc.[IDiQ9vDXV.ju*QI-DDh+ijMR5i2[N&PkiecA9R(m3VqTmăU"PmoMO#=lot.l7%2*21#nm0g;fPJbkUjYXV[dhaNc*D?XD5NR\oa,Q7-JPk\rq,ZăU"0WV%r8:b*RpAG_psIWtvK>ka9CBZDHaJwInBdoO[TIUCumY?JUYf(b*gx*(/zy?ăU"lG?,3/6:.f4;80Z<>E_+-GJ+MjZi#N7eNAi9=q;?[yo<%DbL#yOxwaa+E+$$/p\ăU"<xcd3#V\Cl\Vic)lV&&=SnWYma^n/.>lYftbsMUb=Y,g$j#Yt>&e(xkex>]l4qiăU"8ePZfs*gd0d(EBgnDi,*pt]iXGC%cuUdJ$F8V+*BXYg_%N6o6_P=3t6Q:I\;/n2ăU"TU/AGbb<5Mg9GHMZG#xa2ReAr;TZF=uD%W>pCxW_J_qEFc57Jqqd?\JPhdGo=;BăU"+vf8$VASrk])6-Bkk]?#W=Y\-I5j/c*tIBJ:[?ZL.Yrom(M6iILL*6PJtQnaYx-ăU";#Pkq(+n)k$:6V<]/Kp:1zU6AExb/QpwpjBP?K>jNJ8l4Hcrq0S6Y%>R+./R?PGăU"qt;J:<dX$xhKHHt&NILV.>;TWCnt0'g\H$i:?UCE=NJJhkeN><Lx%NNOp60bN%%ăU"up()%9%%%#-%F>dFHah8ihF*7%%o2%%%/%%%%fx#rjs%%SgfxW&&xB]S[9xSl$wăU"VEP=Q_1_x\84oatb77mC;R-,-fY<Pg30d>zZ)e6>UcrdLRdW=igW/D3anbcht\JăU"ttg:6C#xB)SS-[zPlIGsIDLp=E#\ow)'sW,=.q]Y>,C^F/GbYw\vG#[=3MNdzLFăU"7Y=;zlpsfT?Bvtva4c0[&;5ai9c5p0Po$pj_k_m9U/2:GcQA1:uVYoV,;S&p#IEăU"7a#U<U+.Rm3e^Xs5kAGf'8,BgLEmvJ]?Lm1S44m9(S(GX'jD^TQ0RP'ntOuM/LOăU"312T.=hYVs0$Y52+R/0I;M,^+L;L9CN?:C6]lS08nlKyfA#HMA$(oFH.kH^R7NpăU"WmUBptmb.1Jj7SuVk=BL9sAaWVZ:vF\^a0Al<1Co'#s7=\jD]m+C*CLbHg(oNt=ăU"\qX[TJ[ed3k?rl(Ojxn;Sp-I\=1wicf&'7-i>9oAoM&k5t'w[?e)AcM?W.TGK:9ăU"Ijvv><X-'mgQ?-HkgFUGEj/Yg<:VTSO1hJLl)eFN$CQx-,;8iDtFhs,8(DcV&.KăU"Qi/(IYw.$a+VCSsK(E7?C$C%b)p8<YH1Vz4-;W<=CNmJjvJYVUt9j*<d%[1R6(uăU"WXUm^LHiGZKlcE9La/qgXZ7Fk2BzY[wM>PSMM4jjE2XtM4]0,pp8/W$6Ahf4N(%ăU"a7C(4YFFZEb8vUb=(UR>_h<Ue'&%gq88hrGHo^bvgpCi78;a]G+Yrwmnu/Kpn__ăU"'_)aRgX2A,&n\VnKD%%l;KE*p5;AjmWlI$/%a;p5mD\SxqGBOuBB'4m[\OBJ4;CăU"&]y;xWrR_Ha0_VR:eEF*E=32c7I)cF%,DJ;s\oLXl+T6NBCA8xZBAK._6\Gf,.răU"y9P&YK$3Neq,3k?h(Z+sC4,G'+zlg&CgUNvc]dEP;]uGb*o+?OcpC5g%nZFv&AVăU"8I:Hf[h0]QYqdfNL[-F#[P7O/g<lQWVT''&3Ju08TF_?1#9[WXhO\u<fii?M)6uăU"8bmQr,?L\Zv4'S=e%i'&0avDcAVCy^sGUuBO0'),.K_c(lC(Js/[md_8XxojO$[ăU"=Ni('s4*06p8kLL4:._zR8)em7#L5>bH+i6DUAs)mTP&%3^^BMaUs/L[O)GiKh&ăU"&6u(dDV^>o1HNqsn2Z9?0r%ztk_O[T7=V%>G&:7:3?lI*b:?)6p%,2bISAU0gwbăU"D]gpD<eld/0_Kfq:fXKEgphHM-&u)Ddtb86SpXL-OGDH=Z^ofxdEO_8_qKBGy,UăU"O2#T$7fRt7j+)<5DoxUoP]Gf/&PR#Iug>)s[EWnslRZ+J4<-gQonTpFU&$^S0t4ăU"UTwDv(tAoM$iAF:xW?lHU-,7qf&yS80L8k2;AO+\4^u2'0ZpGqr>)J%sO.G-UA6ăU"5RT[4ye*n-tiHXxnE\9r?\PgGg*E#r9ku:\24x8RKxugw^Vs%Qw(fo_i2;UJB'.ăU"j.39YF7LYdAoL_cFf=Jf[uHu1Jy_T?hVJm9%inwl3_v\$*HcOtF=c/8^O)$cDv1ăU":%exUk&Z4m9yGIYUMi;9y38h>c?J<:tUhD#pF]I9i;829)&GhKJEH+hZH'CDn7XăU"iFG-raELM6+g%[EVbrFi+%6x2PT:7r1vs<myej+E^M_x<ZsTG<_HJkS8VMA]=.YăU"kdGD4s[F11PpTc271cwuHexsBoKc9VWLlhdaqJ,srsy0:Ga\&FA/S-to+(VC3eDăU",jvhOLC8Cmd0eZe[F39<qoLK#Qed<(Qaa7rQbCIT8W'SYfB(N3%\394;5;hMocaăU"NoItz5evLzg/TsrDvR0c]^Ah7[g/c?hwIZ%p]b'G,hsTkp5c+&Q?/bMlUo>d7Q8ăU"H#q*d$=Ns7_/ZPvf[Qwb/<Wb6$NXtp5>uIp+kP?#40#p>f&s\L$i[6yxg?*xs)7ăU"$R,\Nn3$+^ycKS&.up(%)9%%%%-%*A>FHei>bjV&e%%,'s%%-%%%%g%zruS[rfuăU"e35Fk:-Nv\CkEhlW?tEUNZ0gVY+QNeeCicGY$[rMJ\7YOK1;_qG%i&JO2egwvMYăU"OWT\7YV:o=MKf(?:9f'>;#-bw*EHutE64ug[prrv-Hx*HV_$kJHkl+chtdK,,MAăU"fttMkDb>g^IwImt8BSh-ERue?R>kKGgsFJ-R);<u)7UW0aC&u3,$'ZYc&An3f\iăU"t+h>f*s)64s5WK5r6PRc1j:Xw-xj9b)?1qBEIZJ5&*Xbt/)LK<stD;'QdRAF-wgăU"?P&MN-1*Aninl'2;WKEkv&m3UH'bi)=C2hD68cnFVc9(Lpt:3RVRJeXglFHe$2JăU"-)7%SPntNT^1:Pv]jko(>16Ba7^DeNqt=WHP=\.o84=JAW;AU,=fEp=aed<'?//ăU"2^V)*joY%Hwy2.Rv%cj;Vug_#rHd(?v]9Sv=7v1Mm'TMt'\$6\9eYrG;:,8D$&[ăU"f]I.BA4yzCN=opwnggUY;#COUX(#DGB3Nuq1Shi>K$BPxJ4]ipV4RZ9F:%veoc1ăU"SBDUhg2_%F?4?pDR12>Y#cS2P3hg;G-pUrUJ'H:JQ(E)+\7R11<vT*N+4EiIN.<ăU"Iw-nYZ3a'\mm#'Jv^'XcB)QH%9RC4g9(^\27(#9kdZ(GI7Gf6):Czr8X'FpPmDJăU"aN;Way+N1;1''kq0JeKAET2i_u87vJW=1W*j%orVY^l(7HU:*k%XcD*QlD+i;XvăU"7^5n3>HZFN*S.t%l*?:$aRErJcAdhk78^q+u7]ST>,xZ.]S\kD79#V9/C%*:%zsăU"]C+g:-^L9TWCQFHP-GZ11n386,Z.#b?FmFM/5ZRnp.M?:MyDuU;2A%MhZalF4p.ăU"8J$Ti\]UqsC;Dia]lne]SGK2wYpjY9v)D#RP8Vq1B[NZ0*HLXz:pD>#_t^'iqW#ăU"7BzsC]PoxQ5BF2fk_.DeU_,iN&Klu>9/:Mi/a5^P+=6;#p7M)6Y>C2q.bg?)1ZHăU"F1rt'l7-Y<UAs9Dy;;w?+'F*7LcKq+Gt0.I\YGG0Y84vM?1i$a>fBUH:f+e:RKNăU"j;1jhYtN)_2rnWAw33_XAuAPetP/t5M(>6eRzEG(*Ky<2O[>*#Abx&DW2*ieR9)ăU"J)K637)$oZFR$]]Nbg(-P[CicEZDc4hhig_7)x\=-V%r.mSL)7l<KaEi)Y1CGk%ăU".kHFM/5Ai;pPN[TT_Vt7LEV(X&>[yIPP2wv(Xn%1i-<JW[]a1dyN3Is1Q101YpJăU"tz\eazPsPnAE5I6,0,YVS[Gh7A<LNhUf7vN)k%9I3bXd#Bsmt_99*?(N(cY3?d(ăU"t<I\1Je%*d90%P;2;lf%GBHmCv4w3*yWrc[I8H^[1#[*7ZiRae*71vYZnl\]-uOăU"KYJc5D]RrgtAm-5QT\[irRFVas,%BRq#PQHAm>Kq*dF*EUgFD2yW6WQEX5c>)ZJăU"S%iB<RQmIHAe;irfEvQ>StiC0M(wDZPt)a<U$D&y0]piE1:4]t#0wR:8co/>)JqăU"Fp_m+pJH%giEA2cYHIHUGZgw3%F%=^x1Rh$':<Mc+TdM*PpRqk*oMY8peBH/Yv4ăU"h&3^*&WORp>$F]#Ano0Xa74iWc%DsD\ksC7RO='Dja)jE^4oE(*(P<[XGJSVemhăU"(^WQqac)+Lb4AP7erBGSA'o/A*(ka;r)-5>sDb7R*?G=Vh-PY:JWCAb[M2diL2\ăU"bAu&ApX9lRi[55vsUO-l'e.5ud4i:fF<q_xFANEtm=58BURY+PN<=rRo1)HB+W$ăU"]FN7U^)6,)iwa5)$-%Y<Xg7Mshx=kD+<s3SAzA#In-vG#:Q2lkJS4(]c%+A&tZ.ăU"5%MeY0'\aAzpV;hHAO9>gUK^>%3)v4P1bAFSd]_*sGci%,&E$K=NsXCQ'D=QSt0ăU"I938r3&h)T'IjeBP?o8BBXIb/UO93^Ccsj\;yQkpZ+/2/3=m3j:_[1Y7,.k^;j>ăU"X8DaaT'DoWy:bw0j*B/qD8iG1of?xG#]lB$dfrcGF&ZZ/1?3fJwg9U$Ckw/oDAaăU"Mp=R3]jKFn%rXSuSKyROm'(hnbR9&$0&m_37*LOOT)oI<?*\O9FY01swDY,XPg,ăU"%4:^dAe>dce4X6+Cw,N.(S4HnPPbu:I^nQX(\JAKojcHqjA1a_J+H9wj,O[CjX5ăU"yD[*tUv]<ifDTtQ#'3)r?>aUcUW*5;;I?EX;?OrQ#\#ZioX1Rye.),$.b;gA<WJăU"R]cH4$AX_l%-tD#[H.9qmVN[I^sY;e*y4XtC%I^VhnMu6U?ew(kXWuk/3u/^kYYăU">'JZXL%:?zvA4Zx^dB^z,Ro9B0J;+u:T+kWs(YP.(k$.(1%3O-Qs\IUsL_,d'FjăU"[w5G,a0klYq#?rOSAYj]P0a8i9XEMj(re$L<^gH'INYmv9*Yrx;mHm#G>0F:G8:ăU"cN1)5)r0hke[$0mKaXM#3[wbtgcQ0YX#VAttd_g7RSvr2AUAZ5'Mvhlen]9]jN#ăU"lIO4T\t%#sK<5GFv1p$5Eq'LlCX6[]rxg?1t9UZY/o^*T;,WHWZve]CDE4V#k]eăU"IEbJn9MG^<Ur?1pd9aA22V^],EQvH[lD$K$_H6S=jb<kSnUC2G[k.vO3txw,4tDăU"b83qRxAd?_\Bv6ij3Z'*Pn6G<FGJMV2Rf&XbDkkRANUWn^pb5=1%6HkD>F[avURăU"8G$dZJ]vIUx>s#^OdC-Ei8L9u7labE)Gl_mv:\M[(._#2bH?pQ*PQ0IE4Qn]VD*ăU"BZ<R(pw0qL$.AHH9lUQYM1Ok95w'o=6K1,,R4CUBeTu[9KhYry>=M]NX,4AmMZ0ăU")GpJa5WmRJ.#NOR,4[(y-U#6Wvx?p?G\2E.wXRsEL=Os,L4Xe$H</eqRvD8b>D]ăU"i5>L+H<^b21XIAO<<D<OIr=(EGbt^7Nin7)jqqS-F*NMa/hHKLwB2F6\_D>]q+HăU"hV1R4]<q+8m]Z^(o#gP;AJR[CmAIoukSQCR$,=BU2&m/D8rcQ>1DA<oP8mn)(47ăU"/cnIVo;7+oC5Zu8WYL+aFV7JDsDo7PZWyb'C4<4UX'/p4,MKp=-JZ$FeUT52Hp\ăU"QP\eylQ3:pXbmW>iL=cFO]'wSS,d0$;r3RhV??Kpqr\-R/=glnWxSYF/qClo>ebăU"AGN:>G'I_13rdbh3L<5ria3#Acbu&kBRgc>x'3W3s4CBBi+mU5oD^'61SuPr?\DăU"Q4OaJ7VAp3:eG/2hQs9<+[E?,p',jYPO\u%m<^z^w;rGHP$=\=8fA:63*WCW]K#ăU"q*sH>r9^6<=\\2jn3YpA/&dk9:>CpUSC1zqQ[<ixmmJsTk;rJ#mV[oCHn]X3W6TăU"aA/OHImFWk^OY-a3#pmNYZB+M:Chfihk,a.x3,4hLSH5zL4zO\VIbM54YiXuv]*ăU";i+E_Y[h*V>]2#2#Ar2*7'Zg_b\#^:cP>m_JBb+fJq^df%1MK0:P%Ih^hv=S(SxăU"YgJ(z]c<-wR'E5$O:Sp;tk2mJ_1\M^&jdf6%G$,(nHg/)q8e&Qk8WYYX+tHN.h$ăU"Y1>#-OksVr[*B&L:&.LH>[j&sS5g?ZXx_YIPLSAuCkt]qs1;?Tr0'+kKnqrD&+răU"U\,#^9JxsBj?A6T<Y-/YYsP'1_Hcr<3),&v]mpBiTd#;+n34za,ggMBN4t,uf.0ăU"g-GMOlc$G^:d*I=_PBXiIQ/$IM+G)mbgdgP#Y?FrferSx94maij.xi_.EnYDPXAăU"Nvd&$;8k:Fce,2JUakU)tBr;dZ(2[yQd'-K8-2^l(srR+jJ0sdS-S)HcG'xl)D5ăU"n3R5)TK$QrA3)iqU/4h*T'e:]Vn4S;qo03o^E)rlh44rol\b(N[YQ9MAqE8UjvoăU"]wB]MWY<o2$&x^&jL<TDX]nHF?Vr:=Q+.GD.]>S&0oU?<p-YXXa&kU;<Gx0Sft\ăU".cLD?[D?+anq%GJOJ$[x'._ltMAn\W(h)^Gk#exYA)pSIs781?6GW;3dE2r-MDYăU"85D4c2w,>CSN^DwkMwM=p/6RLKI,4tw9-L(,v8'HK<[1lt(p<'d(KS/O.[5yakeăU"5ujalRVjFP-K=+t$<UM3OKq-x5W%t5dE3$4RvAdZnU'hF?4r+L/Imt^N=o]gea]ăU"r'=QtAL+hnJgb0OzB-UWg7)/iAJk5+-+gA$2Njm\DdUK1:$0Z/9n\$-BoB-i*(OăU"XaccJz\'f8F6>ndWrbBP<o;Rc,K'UV/4^qk.c-[o42:>mKbTYC=EsAU*&I248BpăU"Eh?pcFPA]P#CQycVR=lGc_(eJqgBxU=*:;5]5\i>=tnoLVjI/UH[;zkGr]cm]+)ăU"7n+or$<D-AYML.lSKpJ4i&trKN?>_k'ks>vKbHTB9lI;Ytme6,+yH0k>Rkk]YXAăU"k82ot\0&T1\Crr&e5pQAiJk3;^^VjO1[$1E&CyA9^hkm%>0+l3)EepiF7/#E?2:ăU"P4mCOl2Lyyj)Va+&zYZQ,qZ0Bd?S>N]CT#8<ep:H*A7xWFD%pS2X=Ow-M.vlFB3ăU"h)&RRM7DBp^-I,93q7;di'^-\jkkg0*yY%2E[adb$YL*W;IuJ>cAtA_*A]8.lEuăU">k%]NRGHI=%P-D(QWlrb^IM[Vh>'P.833MLFc#cm8&:N>zd)39J#_ETAJ'&ny/4ăU"r*vPCX];L.]j2#>V-YSAkp45YO_SpvtH4G[n^9^tQ:B;%bDDZsu0r*SC2<U<'WjăU"hNw<7HIjA&HZmQJG;[O8#khG,kY,3'JjY%Ck*uUu1FME&6Fri<_8cOI)5wJ?3$3ăU"0yFYHzHnerPMmI+HkMW\H+0C:bpbm^Z>6^K0Q$OuRHX$0DoQ'E:M1pr#mruAiY9ăU"8]:zDBw]xDVSpZL^(uGP\ZCh5z^j'#ZDm)&cTG.Q%&tG/Tf]5ZkbSclCC1O&^/_ăU"<j#/SeMPb[*p4HChRYnN<>U+^h:(O0,CNCriV4'F]-;T3*K)nq'NBD<P1q=bfdPăU"al[#grIm0l..j4yF6/P23M7GPeZd^RToJ=gSazSC8w(>QZA>ERF*%pnB=JCD2Y_ăU"Nq>byTC)8bH,na^_a$=AF'k%FG5PfRS;KTzGsIdYM.EfRK5?)en&=Jnc?.gILMXăU"ak#frItn3rSJW;Qdr[akWaQ)EBHJPoZ8%v7bZqzX3:9r[EZ3+r?%X>Y^\j#0;WWăU")8lZOna)w%P,/R]tw7[V='80HD_rjL\<k*i+D,ICzU3Z_pjb^H?#\>uU-nj/\t<ăU"oP1JTw)t3(nC4bur*]chxkcZKAK^x4lmvbDEVbZV^Y>W)DEDurjL[;k+[1Q,^7oăU"=r9l^QX$PeKk6K:mj)Z?pmG[#.+^=_+[2[y2jUKj-xW+]E;9_m1vl+_(7/q<KujăU"0#\%2)w_VJINVU*4[%NA60O>K(<N-H7NeQ;Y_Jo;uQ-Zj#2#[<QT3DKl/^W%P]SăU"$f^*//>tir<t30S8[&_IN<IZU+R9#UbY2Q5bzVK(nh4GKLbe?]d%2L&Uz4BDEqPăU"Z1a\(fpZgQn2kg*lu-CQG+c'[VJzK&,xWydL13J[ZubZfF9&(n#IwWWAY%9\WsiăU"uQ#?myJs[HW[UNWPdR*n\0K9t6?X5R1hT;w;2HA8FOQSucT0vRbRGN*'cA*20/kăU"l)6*DMNIWq\OqJ39Trd.3rVH7^AZ.oPj;$QKJgJj981$*t<rH(C0i/<w+e4S]C\ăU"HC.uQhl_G.nqGK3\s5\/cJ*AXJEy-[Vd[JrZRD>MN'v9ye8[fJWcY7Y)sSv^b.HăU"V3E$g?tS4IXD1xIkz'LKomN+6w-F7W_)l:K1Dh?Nmq?u?ws&YxgP[.LGHX9E%W7ăU"GAUk-'GxI#nR]c%A:)FC<6ZsK^+#NI#NUF%iTw.tMhmOQE)VmNZ'T/]tiM3(&9+ăU"kbqToR7ha=/Z7:M9+>,=G;=O&8R^Rjg>]f;D*L[5OG)p7p*M;kmN5__BKWKCsXJăU"6%p#A>M)pZ;719'ffK8jcrd.tF'/iMwJ+L#xicVyZ5kC]?n/B-YYm0=)>\%E*h5ăU"$>uv$ar#*d%Uy#vd-x8J4RAmJNSD]$qu']C2AzrG)B#ILlOkw#cq/fN3Kw)\9$răU"k5+;>k,^.oRDu]+72m**<Q=nMBX.:an8ACSRiAa:n;^550vXDX3HcT_rTr/<RmWăU"qU&XPAUsgeW^YnkK;q0p\>Qk-]_r#o/Kbg:7&-y3FCqv^nqwOOvc4,=t>m]W.SRăU"4R=9w9;:bVh?u^qOuhk3f--=\Ks.cs$bX?b70rRA:*bU8iF='SvKxOP>ggk<EQlăU"/nSf$7rmRQ<+d]f<:]Q&3m^SW#T1Ndw-hC/b]yK0\=M\A#QB&eL[xP[hsHlFMoYăU"2c3xbN%1,3N^+T4jv0%lE&u&y9SwH;jC:P$2_%O=9+w2SUFHA:.sK*i.>HPxV5GăU"W#Yi[=kp#q%rnAoGRpQ4PN't1pw-eZ,4JdbD5+f_hyHu.JVZWt5VW[p)2mM?j8'ăU"dxCR29mklqg]YEecuzL7>JFuGCke%(Qep/R8<C$D%A?ERD_S>16EZM5T1A9Xy[7ăU"X;A'o:K&t,QjpO0jjQ:fBLji1;E=jjzA1ej)erzYnG=c_sU6c&)9C1<CT6uPtSwăU"+PeXa=5y[:p[C/_+toAQ9_\MDi+fDP&n4C:):<dxtA-a_Njs4Ac4H,PLl2+x0?HăU"DP+-5Mxgt:/T-ZQ00;<y6wJ(?okHu?kB'i[qBaejfJ0VUPjW'&_c(_\5##$zfiuăU"IGp3*[s;QWOC]#P&3)I7RJ6DH6GI9+h=ag7Fds:lwrSV1oKLE3,eZ$,++NPeKt(ăU"rs:#eEdjFOLsZ1[d8p2#i4y\PaM;,nw8_($heoTTaR+Afdp,?'EHHo**qN$%fSyăU"M5pYJYPycyd.PMhe&^GHyR)b(W>m:_Q6RB)>JUjwr:/1;d*T$MFfK?Q=K^+kfn^ăU"W25%qS=^AW/m-72/*44LAYObpZ[q\_jbQZ#*ncHatQ2f+WJnp$lgvN&N3iN7zs_ăU"(3\nwRBZI'Lb2hmK;mpOLSp)f30CZoI/;T+9J9Ie[qP_<6B'aBfnuv:<W)9+95:ăU"266&)EJt?2IM2<c4B/c6a&)A0tt4yIRqqa$5gUGkOb2wC2_/lwT9\ds$KHu0_\DăU")6W1.?_7p%cwYJBEEus1wYt]2p&A9?VgW<u.-AZ8'I^AdR+(MO&JjdNKqQmkRfhăU"nSy9dY*e4I^qe8M8EB=MuS9M'>f>*,YMGXz0CW(Y0%h5-B.tMl?AxYGAOF]S[^TăU"ARvYJa51E^1pA(5UMQchaCc;XeCvVu2)%DuVsbhu='i=:X+zfJT3Z^34oD7f<=EăU"&2F#62Zev9/+LU+^.a5s4Q3l/:-;36/RO7p.KTz^gnOV,'dJVMJ52&?FM6Q6e_\ăU"6[5aP3$#/-FoWM6$4[9<iE#+1ptNR)ep4B'Uj&ASxGGZ'Gt:Fs\YtTkdD*rw^PBăU"SWQso%E%C;4Y6YrHV/m.aa^Ws6SCaFWqvc*.NwH<T1/6OEQ[icFd&(4WAI0G7<=ăU"e)s5Y>Cp$6X5q&9n2hA-lB$ZRh#*(b:9&5>j3FcwY[rN'3_\K/B2]Z]+\Y49hNNăU"H93BBkkD+)/E>?as;>'qjn9'cbY=oJi\jRQ+fdC+&jj<J$Yvjv-:Emp1>l([6O*ăU"#hP:7ngVRI'KYrpgjRu^m7;^rSal*y_Xkfm.?]vV.eJ-w#xQud+x5;$dgVRw_Q1ăU"^3?UIQH(#RrW_ipFsQQ'4rU*R/gXwC$s61arluZ4RILT'wKkY3X.PJaqzPUhYcEăU"gDd+Ru'#3cVIed5OF3ogW6r0E<op/p-I]aQ%E*YM:8I-fE$=:%h82Z.%jcX;m3RăU"'+HAO?K+GTUr*q=3gzac37KyW1GUbkvq:w-O&v.*W+IL2*DRf55?S/?MQ'CiP&/ăU"Nqf/4>.Tng?S'^G:NAuWJP.IX/T)Pq_ov&aghn/#piN*T9RlIl^*#av;mtUr;&yăU"Hriayh14r9OyIY458mb6't-kR\rN2V=2T[bF]j-\G%JfDDyO:y/Y5cH4<.hMA;uăU">lIxnGS\m?o]raE/si2kjFo]%)P1=zuFPw5q*pM04I[^nQd%V[)&#P<_eOE4AWlăU"rI8<+2l3_E4]64]r9J[A)e8d*OD8O<g5q'1O#IF79zBW3F;LF3Aq*P4]>-^_xu;ăU"C^J)^Lm-i0G%1o2_/((fW)SAX_FWre0ApLo23,TE)')h&n=-;sGnnj%AZ,A\?CoăU"Qk^)y[;W)>3(xj2m)=17ourKUxRR)QOE:&'ioO+Okcj04Yn7:gk#u_k[FlN5Ua\ăU"2RA\QP6IcqX)FdHG'xcYCy[W9jyE(*D^b?u,rRWgahDZf_1-l6&b2=3/JNz'CTrăU"'>'$?99&d9P/e<JbZ7xN3+4/'A]+d:XZe[Od[s_NAYpaTK,oB&]%$[5vgT?,m_OăU"7D#/(FVk#qgt4b\VZ03C5oB\M-f:rIX58#e%wG.W]yaZW*E*k.d1L?VkMjlfgd:ăU"i)?9fpnZvX_dw9o&0bnD&p:cdJL>$By(zF=ai5qZ33fq[CEDWH4bT,*G'-Y2B_?ăU"CXNu?9<bs>PG>m9xPI'tU&[)wU<MdTidA%%#N[W>6=)RO1t'Iss5:d=B\LT-907ăU"_kpH7)pL92d*lECSEh,3*b5+lXs]1/;Ziag.f*Xw+B8cH(mugO2eq4gWJ;mQI9săU"W18;YSEu5YZM#-hV8hPbGqs'#(Lk_Y20AYj\R^KlG]BcB(x[[J\AN.ak^Kq%Pb:ăU"7qkQ^-PjPN)p0B-*_O;,ZQ\YSSm0t]+vpDJkS7DaVPR>$r\?hE$G)N6^?n+4OsXăU"UI32L_'h:W]6l:eb0GPcJT=$FM)cFAjKE,MlMP)[(JeqZtoKoAjk7fuKE=Om)#hăU"hk5<>Qd*3-E'F$CyAAaJI17hyr>b2Z#s>=_GFA&5<BhV^1:^Ml[3V-3#.&\^K7<ăEND SUBăSUB V2ăU";ss-wb^cF$B]]_dA1r)D*'rGNQmZ'K:JT,]F[Hu9L&?'0O9$BkpG'+EpU-E#D)băU"R4*V[svF7Sii[01hX(X1ysYG=2)dV/G&,/Qf^[U*H]]KOs&&sfA9K1w+UU<$-r)ăU"R-PnQV1C%ORm7D%^-gYi6Vh#-7rfQ/r1XX=LV=GplpaE3Te8:(Zmk^,*$zA$CWaăU"P]0N19E,Acr++R+8Bgwmtk\sU+j&t.CUOi;JYQ&)-_:%tLtYg]JD1]it\xaEM0)ăU"ykcIg*na5RI?#7q$Xy8CYOZMp$(-.Mepv/[6wUH_I=B*<50j:Hm=tewBg*A%H-iăU"FmNUxA=]1R(82]1ks3i9b61?:b3.E_iLy(kK%79MXCcIT7UTP-(?^'(;6p0v#<-ăU"wrAyOV^#X)]t,b\vnajl'*%l;l#MkkU=K%*<S104?=+2#OyIo[K-GWKNh<'dlC;ăU":7VHgZ[o0875d^W4o_Bt=YP0LMi9hha'bK/:x[E^*4wLo)=q)<%Q<%ViyAq'^01ăU"L.E;FGUz#<aXNi/[DIrKz2el$=a66QXRS.3n$DSUMg*ke[_9GkdEgETSneOY5;*ăU"pYN>mZsRkV27F5qk[ao=Wm%M7qU]T\=/u53<oFqn#MIA\:s<ZE;mpCH>=Q_vJCuăU"O\HshJ)s3S/[rpvjJbCC*)HJ3pqG+s3%v(gh'^'A(gB:l%s)V2D2pNT,A6IZ%6<ăU"&,_U3]EexwS+XG>B[7JZPn*+xo]6vYr0stLS7<8k9FIonB5k-n:B80V#vfL(vGnăU"gZv['bXLrqmC:]rlvF4Hm;p5CtjY8lC%XL/usma5<SS.(<]DdPHSsx8bK0rdAdLăU"kB=Nx6^rhYv&Q.<qq>jvd4^,5q?8iK>#8KrlXc&&<0Gj<<T-r7?4gTTX:L.I[PJăU"sSX7XS9,:TiI[GH_yKY/C%x/<x6qegcD_$%x<Hi6CIT\SN8SE_-a<QOEXb_u,Y$ăU"i;8G;PSB<b/5rjcHtK06CrmZJHkM063EiSlV-GJQVHGOc.0Ticipqx,CK,UDQGMăU"8<CX6qjpYBs]dn<1'aXSKGW5Gks.n</WnggTECpNb<N[sx<YgEmhOx$,].:snW>ăU"<G>XE(gcL$;S>LCTg]HZ_>LvrG74YkQbg^tTL$v8I+7cYJC-XHL_sl>HZ(TemV<ăU"?Dc8Xu^rmb4t<?=jE\ncGHi<*(2X5[a40d*Deg][=q-CixlBx\u/2Ak)<Fe[gKOăU"vSKcrIgu<xbxdPH/>P\'>:.t127p;kRxtWw>]$9l*,5$3[50)Ya>:jkVEt/y$%TăU"?4dWZtFV*u6/^FSu2n/^Up&&'r71^c$T&Q46fo4Prg+*ml/TeXr,5^+U$=8<HbfăU"P&pQ,,sT':DfW''+CWN,Dfi'-HTs/U2lW'4D&Z%;PeW&+33-bKJpe%S**t9nc^ZăU"0X7KQnK*frXLpKVt:g+Q2[]dUpf(-Q,om4WD%%+u.uo4fPQ.2GK>BFrWJ#+4JDfăU"RJ,sU'r.I>cq4ziB:$%(I1<z%Sh,Y0gq-B$kpzzg2nJ*g&V+HTa^$%S#$-%R8Y<ăU">k4$D&S4P:^adK0R,BiPA[5Y1R+tuDg5pBgz=;iryJhB6,0*r*1b+ZNp'+tE$+^ăU"kF%(.e;:u*kCbY^iD>,+>;FK:^PfR8rl]4gr32nfQ0()HNp,z&WW##YuTh2pJm:ăU"zegR,AthiJf(D+L,9#GDRWS8rLBAhqQdSjY>]0D-qYgnf?Qjv.#GO?6k)OfN1XUăU"A[JH([2G,J#zCck_Go-RRp5OL(la9M$2=%)2mhj\%:b,CSV82+*2+lKM1k0CPIbăU"<&(Uj_kZcG9O/*\QMhd$7ZO$=wXNIJp(:7V8)W[=^,)GjD]Phn9mUuMH&eZAzf?ăU">1VZIl3u7WZ.onpto)IQwvA;]V4SJ:]Gjdx>C7Q4:*YhPiZno5iZM)kP-&f2^]7ăU"$_<0.f]E^+#7D$D>$'t/E^']XeU8Q/E_)Y<Mr+9jDC_xdRwkHS&mKGl&pVr3OZJăU"wFelpB.JA6V1ZdteJ0qQhkDVewJLjWFI*_(A6NlPVy(#agn1sW?,BrZz7\]pOH_ăU"zelN0[vaD,q-s3-$?GRsGjl=Pc9q'jyKc)aJmh#*o,$iD_^x[>)?:fn0npM;5&<ăU"vFrlU\)d1R3KIqd?:W$^HMjd2]NFI-xISwP.:3LGa_yYMdhpR<YNQZdx&>kZM$LăU"/HNfjAPt1.2d3jd%-9rjG<];?IEX%wq%IP7C2c9Iht+5VD1(Nr]j&40F\2MY8q5ăU"3=Y#p^93B-J'9btngQGop\VaC7Ho=nn%z;je.3vF9l?/vWGg/Pdqpo^'AVjy5T=ăU"+0Y]0YWDs_ZZFdf<wmSrJ7Db868rD8%0f6Mn^ZN1*OJ;y3?3o*cW&0C:10-f#_IăU"q2'(55J0REM46qJZvswAHFRpr=11/S0[ru196r7fG*$QcL-#<3%yoIFJB3xFZYUăU"z6gMj>?RkdZKWj,V3lB$6Vo5jb?-Bko%NEb5\hsN3kYl\]omJ\jhKLL'sF_=QoAăU".bS_=k>OSZf%9A0swlp+(B?hmlDK[NJrNFw.KRBPOy,.jQ$4FZDk<txIU,.:aU+ăU"=F=DF3<]c?=jLK/e<.CU&)Yy;[&Kj2B':_=Z'JkAVati=5F9^8)ny8#;1[o=P6?ăU"($k14#.pg224;PsFlafAjVET=Y+HDAi$mzUf)(MYs5N[Oj<Q#nI2[&ZcMJ%GCyBăU"UK\\I+;ie,qAFDC\9vLFYdWy^uwXq-9H$>(A8gqPn._:6C7d:F^]o5/pVnTgED?ăU"j.s*RaZ8u,QR9[.y0%TJKU/2'OjhHPV#B,H$53LkN*^iuy0.vtN;HG<Ff$Gz+CMăU"-5?A_;)2)4wU//YEQ=*$3kSO?AO:X=G;([ZBn&n0*A8$IOy*I,]uhB\>F6nxs/IăU"#ywuUsx;9OFhBYHT&AaGa&;U)%626sGJ,/z,edomE9AAYI?cqEFXiv?BLR*D[LNăU"r#qw;[&L=\eA&);rxNS^*FZhW,6lH$nhEvKT3UD$v_sT7ukuD(7uQc8.LlnNNxuăU"tX(7Qws:A=#X,4u87v_;j>7JVQNANN7z+DWAFXMXl]9FR,_]Z=TB(h?]txfm3A9ăU"h&]d,3)_#3Iu<fT8\^aA,r9Speow1kbqv3'tNo0-JacXr'jdv;pGvBdnu7tWtuhăU"6xw(,_4dtKdf0$WM,k]ZlDvbVAl]ZPW6dpJLwJZ#]krmtcwqK\tW_WH2n.tNnX(ăU"?xtn\q.2*X\Kr;nLR(%4Y8BCaWBM8JcHg)8]6.[tsPifx.G&_EZqX(#uplHpMK-ăU"TFuhWvtEBN-YiXM*rmr+x'U8IXE(aRelVsYQ6=:rx%Bje,A<qN^7Xhex1Xd_.^jăU"a0Q9eVe?p9g)%tjcRnYR/Io_u>Yd4XdqYLJQ#ORo5hwePI$l,64WL45NZND>LuBăU"l+edHGcxr-xZ[kVF$XR%liHENk*R6=+05&<-\M.z7N&/f;&8$P-bOYDI*R*FE*:ăU">Df^T(WZ#CFLM?hvuduBLi%\^dFXE/nqHS.,^yhS;VgX5m77O,'zK;h_u5m)4uiăU"&z'Ic=rit':eLsn,4J:-,XeKa-um8gCg;Nu;X\WxQ2nEQ6Vd>eu/8w_oo\0hqGBăU"#oU\FeGulVpWqL>P4-4Aw-\GD8aC-I.Q:.2XLl4)6HGN8&S0Xy7w2t.qyWXLx,]ăU"#[(80H8QzPd0lN-BS-X>#l</fb.IxErga_X5v\3ZCtS(3V]+<TuOYL]oN&d/RhtăU"XX:4[&4&(qD+:qdJ0k.p,A(O;./$)v4RcHcin7WJiHHp6;TxhMD1$_J^b$$EH=dăU"xUPpi-V252$]Bs=bvp5E6&j-fFB$YF72Ruu6l&<0E7466x_QHv8u+6;8>7Z^c=YăU"dD-gi<(y8./SdwT&'1%dC)ID%Z$4d,#qCtS4%;^.tStp.c\P&VYPGa0S8:aEFKkăU"?$*CN$eEeQEPH&k<$XT8%O?pRti'WqI&/0$$\MoZ>N6q:V=A5\Yh<)Cx<CU/DNQăU"-dl,ZT08hX%puBk*0=Vakwa*3nX<tq;Jwrg<-Lnhd&E7E.2,Pp3rgU62\d/r+XuăU"tZ.0WIF0tgwmqqXPF:fr%lpfPGIkbp/i>LCik^Qhv5XoM+QNQ\#BwhKRJlI*hCaăU"UQ1O$:_w.8&k1/+ZHd)/'jT^F-*1'$$p:sk+m'^-abva&6ijpdGxvIB$E/,8(5CăU"sbpe,$HadHe/c>5Zws',/>LY1L-FNi-aqLE^Num91(-j[q=Gm*f#C,x<ardDqR;ăU"S5HrBLmK9)-H-n.BikEgK^NN&mNigHKd'/LFT6udT<uwvh0j.00NX7lp,Q>qL*RăU"Jk4=?-\0$>P([D6oh:lHh,/Ij%h\fRT'26iAcnV)%h$ft#top0WH91-:Y,_/OpmăU"w=fhLta8i7eVmIcxpR*/Y\_iG1moeUr=;euFOA%G]'hPOe$QZZ7foOO<oc[0DeuăU"r'hmXt8uo[p(8#saP%P*.ynDQx$F-7sO5uR1bJZ#O&JcY:,PrWBhSYJP',6tYR4ăU"rwLV<odDT5DX/mWO-emNcZBL0Y<S+h-94Chsdr]8q-Gfnu0XwHplnhtlud>8?f=ăU"8sL?+D<rX&rP:jJ8Ic=R2FkOLIvM\f-M<sh&trYgR?dlDLm8n]:kXCjUBqSWh6UăU"0DrQ+UieL?N&9liIJN#KG/E*K/aUd&/R4acq9(doOb5gc*#%[oLT5iuS8XS;hwjăU"Ft5)['C.I$Fu5ocloHdr]5eF^cl3g>dcwoLArvNtdmh4v\_$\#/V<Joh2f-I(0lăU"Ie5+9u53uY&0ieXLmUZ5wZDO4',JBHbP%3'+a-lKTdpuU6oHR4c5=HvsRjVmKkXăU"aL0bj3=bj%-V<4dKuE$VpD-pq\eRtw*d.E[Z5u$JYXrtusxaKg_Fz[_u9goi<^VăU"Q4.KDQ.u6lodt>5qmHLT[=PK]nNcvdhp7hUpdZ&tdr\^K57rs5;:Bvz%zr8za:qăU"50b(j6iOVR(4UFEXiZ:-g;TGupVp9s(Y:OMvnMP4Mk^5]%)$Q[%u4Yj&4DNOFg+ăU"BUL$NFi',JxivNL]nn]/pEmZT<8NHZEUUSXLBfZU9Zls8RVEF()>AlF\ZW11,Y=ăU"5jeV*e%+>DHSduxrhd-P(,Nj[&.8-gh4%H$4FFrVDpSr.Nrt9\#/a]n7&iRH7f%ăU"?;,G&-fpz*4si:\hNJzqFzf;PuhX(8Hmmx*m\akAXhp(,#poMwkMUMtqlFwj,^YăU"5E7).XqX%u[ZbEe3-Q<pM4ob:i)]g:p)2aj>EDQNvdp&WQfNn*nU^C&5eOu[9wbăU"gacirXk9X=c=n\q+Nvn4\VC8J9Sz&Z(6xpdl[<U?omDT?6j?Sd'FQ6YNxt.gt=MăU"uNhN-JNHy4NZ1jSzm;Q5e]+^:26e+T0l(3Ej,\0QfEv5R0(#pB]U/QWKoDR0UYKăU"DKtX)U8&(%K,O35F>JSE^Ip?7X0,qvX&bty7tob&Bh[Jv\-N=.avHU&>r<O\VSHăU").BrWorJ0Xcr#dvn\Eqce]/Ot5z*4'EX6.K2SJ*7*i%Q&)?Z<R5))/F&Mf;Rt)uăU"TXlW53^b,pdqNi2*mUGU)RPQf$E1$I*CofW=u7*0_hg;+H^(Zg-UdI5=U?oEDTMăU"=NR'Q;P.Ncj>L0>;q#DWh(nViX,JNf;p6HemV4[f=nw4CtiYx<&<?jqf-/iROe1ăU"cq/GHVYFX,9cNKdUZq4>&P,njTrqBfhV=(/9rf.w*$^x<0RL1U*\\RO7'08*Pp-ăU"%jT8f)H:9\l/CZ*td/sDYt\i6zfXtILnPe+^NwlU2fEel$FWfujZ(?8r/:tNuL3ăU"(ln)(,F54#d-+%kr&S6=50/rlk%7GJhQHB_$Emb6sO,$E>h0i\ZPwoe8tPS6TeiăU":Eokza4*gPZdI1V:)pz5F3r]a2l(.UB-B;3G),Mrj=ETNaCiXy48W4=Z4W,6-\QăU"xN(6elV=Ui1nbXZ8q^(B8?d40?jB7j1x?DdRp>2j*cLNW;.Hh5BJ;mPA\etTpcmăU"^m2t85#Bv[?>x?G,U3C1^V9mMP5.[IP97(8csJq6vQs8.K\9PK+bIRD'u4sC24<ăU"Hk_bHC)AScNL5e,W>wl[df%H1ht^D=U6K-xvtdf&''NfV4E7rs+tKuBC$EbmW[jăU"?ulH^<$k,Ei$kBw9r8T%H[(<,YJ<Kde:C'pfQ;q=Bf9q12eSKdd1V>GgQChGX$hăU"eBoGclEaXHctZelGj_OX%;Wd>3\[E-hq]mXT8-mKXt2RKN&ur'4srkZS?PntZnVăU"nIkX'#D0>S]d#nkGkx\uGq^q^n<X_p5,7cg\&,.ci+^,[T)j#U8hMENZkT&ZV1măU"mu.xQifEp>elsarHWpNPmhKCA7rf$;pOBW2N=l_oN,PhBMsTR#NZ0wwiWrfGis[ăU"ZU,uHurbhvlESNbvnH$oSN,pS()q0_::C7E%g%bONaf%p'DGk]P/lmDHU4P0jQHăU"*,vtaKxA?/6eQbOpWEe1aXG_$WuXL6rxIZ.-8>caNIXQnazB,qmCJaV8K(:DiinăU"B_NbvlANCgYkPAC8gE#Hxu$Fk$xei/QYQY/6m-R32;u$W^0V-F>t><\H?kFkX#RăU"3d_w$:R+vS;E]W':l3b?_Q\smA$g%\.&NI#2oV20?9?9d9bDej]E:u/s>B;t-4eăU"WKtCP(ZV7d2;a3v5WYE]<of5/LTh,$$lqWF9'7R#Cq)J#&EP,^Fc_M0G=cv-V/răU"l\?UV1=w(vrt^ZfEluiEiF^72pS&[q--NXtQ0RCuVU6lBFZBcKHd$D[#LlY?UA$ăU"E<VDl?AiZH8^$ZIuEnu/rRgdF#p-*z5%iRo39l_T0R%o\u6f5,%sD$+Ch_6U#7>ăU"[;p)h#bS3P$-YMnhf?(w\hixK3\]?2#Zleg,whJ_>kc28]r'q6l2X?Q8>HhWbJZăU"oaJrY6HWL-tnD]YGai2dtI*q4Pi<a':3AbsFZajXLu(#M6\nAm6%5$Jp2*.ZR7dăU"rD^X'&c:dq9tYtv7s(7o5Z\D=HZ5lsZA*\aCAN*co>FCa6*<]a'e*]7Y%6l3BjVăU"scL*Hj'/.7%X8*ro/EGa&4/osO]4^>9,m0G'GHAVDb3*io&(#3LW/E9ofR&V1D.ăU"d-.Q8q-C<F8lNQ3,.t+q_nG[iCd=Im:dwL5>g?)6EB%smI^<)K?tctDHsdH^4EEăU")r$Yj^r2fvm]Y1a9M<6J/Y=\N0p^xBpH?Wvs4p_9q*$#naoNM#SD%BAB]b7iv<eăU"^dHUf(K--EiF%?c\,)9'6.&$ru24b_zunfhTx]-Bpp)pmD7fVri^tg?1nsPo_s6ăU"Y1<v\CFVm-;mH[*.Fl(cVd4_AQZaLGk^UzB95lhNkI%IeZAG3gl(Z/s:66\U4m>ăU"aYihMLI.Q//EVu-/oc?L$i&JR-S2:.Ql;.6/%BcjGoUulQ3t/aFutja$[*CL[aIăU"<Aoc56VTV%Dd]]AEQwVv?v[UNQ,_.BkL[ZhE8NRP>>wE0qMHSan0lE8DD'xLe,VăU"fDmki+Rt+7'7c72lh'7dBY0q=168^JQ2<s(xci6^*ueV0^cut,:<J^DJ%ETkPMYăU"F#v^h;LItf4DL-MN.vq6ApVE)'tD&*()[%AM-(-sGS4uDuzTl,H:TsR>ZeWlw6JăU"-+Y\api2pp2Yt.XO.Hl[Fs%W)[N7DjnhJ\7iMv._W:<z(u'$+U,Wa0bRs,mdLlSăU"6t2KZ,8=ZbWSv<XO:le^a0Ue(8vH)(Chz;Vn(IDJ?AS980)&p.Ix\[5RbtXAWxWăU"epHOY+*LSK\556Z\l-;'Sh4olYAeIPJN^G?2>^+9P3I_xd#X>jCZ6\S&0iU);SLăU"s3.Ai3EZ)<S%qau]Wpp*tw<eg\tsb0fKYzx)e%55/qcidmXH7xFCRn%e?c7NW$năU"&:s6ZqmONuU8sO]dStYR#_)><Hesw%F<lv+A$02ZF&v]#=k%+5ClY,W);MKgmtTăU"1EF&.K5d.nXogI+mXc632-Z^wFuX\-Lmsbn-52lTg8xq/&dqcI]gn6kLL[jGr6tăU"YVnb-uy>cmVqAdl[/Ato<t-0/yV=&S6sbJ<um[eOFIng*Qr?*9iIoD[w?pp;PhMăU"Rvht^(H_q4>+#/Kuv.S/c6diPC4qQP$)tlHQW)[S=<n>#GypT=Zbv,rt]xrqU>&ăU"u=uRvxUnY=_\u6t8fr]O8hiY.QX?W'izliTTIj4O>rrhp6$em[I_H]j(jcCr]AYăU"G'dIVhb#]s#S6Hho029qB7i3%Rt6DP+B%.bz;lOsco1ZtRBK*Ziu*f4duAlrhHPăU"Ofd&12APE]Giq#2H/i]JC(&_iWt_=pU9)-ubW\s\]:+I9DghkIv*O,Bhu5ui^s(ăU"l9)8tlh&^::Wn#774asen[Bo8afqep(J(7o%<VuTLXgZMqWC&srEqIY^$1.c<TBăU"dTtmIlUt6#5kqZnhf-Ldl6xK[\h34ut,Pa(c6Lu:WhZ=Fqo-xNq&Jouo$d4W)G8ăU"Pv6Xd/lWGkq05D]fuloagA.jRL+S\]^k6bI/g'9B$no,&CtjA1b95V.^A^WoDI#ăU"P:+-c8dlv$t,p*8Mg]&mhe:l,v<-GpC)0'bah6n(,Nt=+3s'biYN>P'Ph81#Td1ăU"jZIUSFguTQ,gSmZMt3g%BE$mc5uQ9WFmtA%554ufhgcF6W.I5Uv%[lQHC3J^El#ăU"FJd,it1?YMc(5t-j4Ng4<G_d:9ypQfd)J4^I-E1,cJ$o4390r4YX/IlC)LsPei2ăU"qv>tJN5b&0TCRv]p=D?=#p;RPp*Kw.%BDyW,-[_7?qAS4oh*mka(gbq+dDb()O/ăU"pT+ui)%&g=fwS'e/%=vx*EP.8%QHWQhN9AltQ*':Fh*mSZFI9i'ITBJ,uVkFsgRăU"6lm<ext57Y8Y8Mru]H>m]Eg1T'4:j&q;sWnE5\l_;LpX\r-&(;*MxHrT-RwuW#tăU"8FmCTdEqtw.BdM&ENgF_]F,[fQ9XXTCW2Nn<$P+_f;fvvDd;Df4RDcmsAE'cf\căU"GnUj,Nz9Yf%6kY>rJ*1ml3n+p71/R3_sSt#$-FeP6++,QM.-SKivV_OKe(cxx&6ăU"k32fZ<vs_CMSQv_q7?C]+0Gb8j;4NHtuu<B$T(dsR&FB*,iVZB6hPj]rY<a]4-\ăU"dBr0U^d\J4_oHMj<.YLdSNh=zSI0f.+<#+70'Z:hDs;*cmOOPq<N,5Td.hMBvwEăU"kcD>J.Gh++h(fEREQYLlA8-TM(P>,g,K3f>TU)DM:=6HM8'+7b7bXY-a\O%ta[EăU"FFIk&K^HV5w=;[bduOUG+K'N&96aWvdUGQL_DaklQUzq6DE2:$Ml'DH<eURK)rDăU"voEG%icPYuZMxG[pNGu7\$9nk=N.omd_]2B6-&F4u)#sEtSdSB,3c]g8D5<(bgKăU"oVoYpuJ'fHRcv:>6SRvys4/fR'M:mLFQ-AMQmQB5OT3hG[5)C(qaop7#:\QgYl9ăU"Pz4*(pq-tZ(ToWWjqB5&^Mc[FdQ6lHvk$rAp(I)eG$RjMK$D[r'.):BN<uVLBmqăU".D?jq3Suj>fUr(-&W>;K^#iJ*oR#fCkQI>$mWHs<n7Al;ZzXUJbLVas^pUG](?BăU"UBIIhOOB92(tU2*sQnJh+=xX:L6w+<cO1Yu6?08tnmJ%eMu2u7<L)M.8f/Jm\W8ăU"s^XkG_r'Eq\]6BBr<ki[iye6Hes0&U,'3+cZQMEii,auAfr$X8X*7-o=X-tKF^UăU"d4Tvh]rr4V%E/(VC1,DCG6#e<t0'UUb:95[VUvHhg,hT9Njs$R14><M*>\BdYp^ăU"fX-2oF1XW=bj=_oY=%W)gORIkA\^l^]+)N>abj]*Ataf'h34E16QAP3T$.U1R\tăU"BaK\NBf^FPrsmRe]d2Kl^9>\T,.xaTszKklq7run+vYve.yDpqz9<1,QXPtt;sdăU"S6T'nd?f5LkaBR4h4M1UOuj%6+6\biB,e34=p^=[5f>PaUlZ2yo$G8$dPsZRInPăU"_ZVZfXujT%sE\Y4R/legA,dcWZ:T,Q1y*NiKc4VurU?7k*7gZUQwMEXm.)AD-GdăU"RFk.:3=mr'ia?:X&Pl3h\Uc1Z29^Ugr]\'U4b5QB/nm6/pAKI&&OlJwcvZp#NR0ăU",^>P#wAa3]3YQp_JSkNX%1-P>%C;7>L5<iyiziiJFtjPH=wfdD>8>Mw%.Dv^CIkăU"GpAeAh)dUcgQe5h(a>gtFmQl/X&+l[_gzfqlMGQq$Rs-t/x$/Qx5UPXO*OGT*BZăU"r0dEkJ_z&L-=T^=q%*e7o)n^_<GA7/Kjv_>NG>rpk-9Pc)L[PgLNnu]f/5(1lGJăU"p#G6]IplOGb<=QA\4pH]W0Ka<j_TT:b8yMofUkcVg=&YoQKN-=H8,Z5bR&fWj^eăU"uTo?QVP]wC_dQzL<P]W\ZXeVZn]a:hqnN3lAuPThPA_g0^(IY]RW:uwHX/d)ZOjăU"O)\nFL:.%GSKnh(-p$'j<FVhG?#4hsD,qK6/<7<6qQ=AcB)R5)Z];4aN4Sw'16măU"m'YZCh_4n%&>pg8n)7dgyV'&[C_)Rs(qFjZf?.c_X_;nfc$/YYowvI$p7S>j>#wăU"u(A[)[nphq*nlNqOSC0at+w?2B]=UXr>ew<tW6OYVX1g6yExw;W1$)>:X,k>f4dăU"a=*<8Lt-bMHbr?aXOQ*25C9GG=6LAi0]6mM8uS>N;QfH5K=dRP+i5kaub--Z7J\ăU"<ERoC:bo.F4Dmxs*l.Fse,?e\>4isohkZ2],r'r%FyS&KHJ'%WP+]SbOuc9VE(LăU",%IP.K](<_FU.g=G]Nxwzy9U3YRJE+-skx.FX*7L&D1v.*tqM[=Q#)bvadP'VZqăU"FD>HrX?r^UPE0.l6I]XTq)86smu085rv$)XVX0Fusj$DFD9p]p?LlfN7LnKluWjăU"(Xa0r>Zp&18'JJ:*+SZ2h1>>dv[lzD,Rlu&ooM_a1+XSm)[-'c/Hg:Z?4C$^#O.ăU"\Vbo:zl7qv(?[[RL8?'2g.wFe39G.%5$h2J?Hz^'/PK-ZZM8.3F$Hd-y9X4&5;1ăU"Eq+1$B(36V'Q(%M?D8(3\#a^>#mwgcrs_g^jhHyY+\5'CB;::kO,]O?\;<tUajwăU"1uO7vlKubni8ZH9w$$urxn<7IkO\#E,3Na=A'j+qLkWWj(QnO4%2b<ja[SP,n9-ăU"A:%/.Ah*,WTNMjD15/?pE6-F%Hj=YenDwI3hSr4n>N>WH]c\m.o;>_AhMlAN&eeăU"5FQ'5Vk-+Ib5YcF2Sy%Q>096R,krQa9k6(8xJXWGD>&0UEsg'JI(18eu[B,]2YwăU"ZVlY9YoEHGogGa6Uk&Jpe=&ciD5meo'Xlm[OJ+T]Tu#b'6$r/J;GvjIw2kH^8,MăU"ZH6r=_TN,7cdMasl7vGQWp.v?LszIW(/<IA'NF)IMTOSO4lo:NbS/KjaU/BqZZ6ăU"WK4p[O.bMdmKj4dfI](F<QoN5hHjGaV08nOUe'Z4Za(ID^%Fmi8y4iQw8m%#3p$ăU"cF]CAKm_AYPL\Nu,p_jszN$s87JBC?PSla%t>.fC'SuB%m=2h#51j[AQqdU%)W%ăU"7(+dOf]iM/$G'%K_.)-70a36,n,%>H-FOOol6iMP_'0/'/eweaXWlM8:6&6E'r$ăU"6h6YNVH(]N/no^\JbdYlX$L60mz?jr-mGC8sir#dBVwQ)8[_9NQ_nsd/:g1'OGmăU"8HW5A1d]mH*bIAINrqN,ny1w$Ze4QNu(*3<oR(D'$4t&q^b\';$$/-A*BjO)0]*ăU"gsI.cUmtSXR,459^FVOVAo(Z$*QOREZGB2'P*QwEE.W5/a'1//)um^fO8ZvXYKVăU"v_qTN6Zsn3DrjLfN'I>.hvGkOB-w_n1h(L\=V.^-KHz52O?pMJ\WKR)-v9GeMG/ăU"g?W:8$5w1SoSEJ>R^%#Ia>#Qi-0On1?%F%HM<CoG:%0,aSg$Z>E/3alC8>%?X1qăU"ebPLcA]x'TJ-tFb2ImheEcr=8,V8BGBaqYAo&Fsd+$r?PWt-6jl(NovmsXLShxrăU"Ha'qN35CX&]qJ&AYbRsh\bl;pGZ<(Za599u0s6My*<I/Rq=YvY_KVhu['Snu]weăU"\hH=9Vz18_DHKl[cQBdE.o2/cEq+A-gmUHs[s8lePJ5ZXAq]e'>1-PwjJ84MSH'ăU"9PPNJ56mZ^CPtsZ:nm2+fS9Ab^:c;3:?N/?P\oof_\$YBXG%\PgmD\.?Z9I&<qnăU"p*\zUC[YHVAdDWIc95zpbck=0(o7ljX9RCUZ+:Dn;E8Zo\]i7gcL87ONtKeaZTvăU"y?;^IlQE%F4'4H%?TeH=hN%Wj+*/-SQ7]g#>hmt2La_3VP'32A+SLG76rj+gg:CăU"aKe(D8(UC$98o%q]Dv<FsGla+W(a7P1n2KPI=(Kt2c/o,1\x1Y-DIgC%,b'N&wdăU"r]B<ok1PwlaR_5*]37V;g+$%3$lZlll3'dp%G;m4:0p&gG=H(4TUdPWdi>T;88aăU"bjx2>^''9ibbYMnA#fQ<ds:#0BL[QJQ,#']Yfwj#PC$\rZV+LugoFdPeG1q(?CdăU"I0V7Ui0%3>]EJ^W+3mZw*G[a=xFRRm'U)r5,/=Lpidw72gNR=da&Zd=jZ,FbZ;3ăU"pY]bI[2a5)Ghn::Q+F1QyvlRETvk=tHCp.V3&xDmN]kCCwZQ(hy\<72Id5s4t1iăU"0<C8-^d+awTt(;)Ms>4b>/w/u6st$7'wN):*RJUN4q;FN.nfb%LaEcKB)QzX\o0ăU"F-<gw[d?1w+)p)D4#_hyXnN><x=HWggxGuxueemRy('(lh-0bj#&\Ti;A09pAe2ăU"3Udh&S</*mEC/)Gq7KZWV\Zf<;aJ:ua/NPuNNNEgfB7Q^EIumF-]*v8N5b-\wOSăU";D^V%b+aUT4gAQmN])7)Phwtbc3lSY0>/3-^u)(Nb^l)ZsqUHDPj\hHs:ZcxMbLăU"dqZi<Fxs\><Sm/Stp6Jo2]9%WwW.=;'9T4NjZhK?4d2cYPs29#r\p;guD0C.\G5ăEND SUBăSUB V3ăU"Ath.cGC#xHI%2:94-HgWd;FE=$$OjN%\nd$,\Xb+nHN3/V]f7+CSgmQT,u'lU]<ăU"GqLJz(Xd9%]Y(vxjU*c-wyXB?O\.AJSAZ>d2f5LjI+4DE>N>A4JH0CoU1^i(7g'ăU"DK0EU5cYJb_=4Rt>>FNN0>9TNrJfVXT6M&UFHoSFtZulqv5S*LHVnTO%;z]CQe9ăU"',I(,=>MEx7PM4x7KE)D7L&AdX/x\^wKd=%1;-FHbLyl)??L=ZjK+la&^v=,OO-ăU"l'T+&CJlDU3&oB75d9k'&'L$-0bC2RDWo2V$sXSjGH]0GXiM*K0nCbA5lR#<#mHăU"%0+3jDDu'&ZraK1YeW24a&MM2Eh.UGU8[<JS+d40if>wsZkW$.kbwEC)xVw\Ha5ăU"1MTB%*Zoj57s7/?uG4QY<A:<E8/&Myemr:>l3g:W-Asx4]6/]hPDu4rK*'LuD*tăU"*\X9$ao/F==;RjTq:Bh,wWm08QMAj\OKlOe3f<'Rea(wq;1Nu#JM5Q4&002'NZkăU"1og<$q%RxC&-lNQpd3)K5HmneS_yRhD0Cf'EiXRust_w%5K9Ro%kx5k7^+>;OY>ăU"Q1y9czpZbrsqNbJ?u7)w9CJ<:2qJMjB9U+1\ChJRv_6m/a7-MN%WA&/>d6AHsGXăU"WX=-KNO$ka2r#=uR04E.6JiX\:R'*3WEu&oFw&fXbUUY#(tzQt=W9MFUtoS[Va%ăU"5S:H/w7*vYlqqi(,3S8X1R#Mux,,2m57e00QK+vBl%AJF./sUAjtA2GLNT95cAbăU"q1oNcNk6>kRkHiIhS'vtdZ8J=/fFQdMC,B6=hXhb>7lNH8h:+Fwv,bK<0yP;pckăU";4LZpFI)*=)#_0+_IjUQC\.$yqS<yib+B./dg7mM>RHLHwc8fC)u&/\g&xebC?qăU"J[(JR7$FKxo6s*.)yxIlykQLDzD&6G%*h7B7mlEg:g)8(c-EgC?wj$dE#AHX4N%ăU"??>TKZh^]r9<gi62#:5zY4>aa4fra'8b%CZKF*3yl\rRDgOuBjhJ\YH:L'nY;X^ăU"EaVdSiqf3\kE=rix1OdmBpf9#%ELJ/_QY']t)YVBN/5Q^>/\MrA87m4um&GkskWăU"(G<>qP.tO*FwuXKuENyh[uJ&FsH%s;eSQ(?8%wh9DP$Qt0q..Ob-H<c\u#C]By]ăU"E__/*8UVI+O1y8okl8MECpTo_AFIOAp0g-ipCja&Sg'J4$9,5:t7U+fRr80wkE.ăU"*_m>GrAVswXh8-he2t,fEemgO>vs#L_>\k%?>\%/nVB[;V*8]wd08<1SXb2ok=LăU"7o:#4*Lm5CUJrgMUnz<c[QOJATh*\d3j:>h;N]]4-qr57CIZgGp)s9%dw8Z>?xAăU"8]C%80)sHL$Ei(x$i7#I\L43vZ/B7eY>09ZrPV>x42jxdm$t^ur<dTtKLZ4rTx1ăU")NlI>N67RaHE)i#=>eA+E]=M<Y_jHG/+SZrX4m0X-s4Wa?5RT_(Bwk%lIa?;vKlăU"ldZIO%+sP0dlah7aHhc2jhjjx8bX+5e8.C_XL6a9cY<7xu8R',Ig)(+OkRe:hO4ăU"7u[&7kX&4DZ&^/=)zSf+5I:/8ZKmMb/5pZ6d0CFavWQmdwXh/4(f7*8Co-EoQtdăU"$T$%;7%oq2/4&Vnu3(4F&y+m0<r.;t'oD:o<uqoDS7tweSDLdhMne=-16m=2%)uăU"5J-uOJDGPeduoPY'VW1HDe/V[rS^cLwRu95)TdOgQhEc%i'dtt[kC2?$G6xaP7KăU"_$5auqN9w%rOTRRSExZg-)xx3X3r9gVv/AMWYyHQDP=9kLkTP<WSoO<[fEb']/căU"TYqo/L2ll,OEu]8M2j>*ig'B(ue55MA^dEx\Lw].UtDDb(j98ci<q4\ku[['Y7zăU"+Ua]M\H2%XahPR0EibSf^ts$q4uR*1y^p\%\6>,4<By#9?[O/HElK)r,Ng_8Dk;ăU"e^OTr[**T[^pNB?Cm=qJ+JjP>3Q^Y\]G&oxq8gVbP4id\i40E<LBj_If515kO<XăU"k/oLfBo)>fW]:HpA$Edf9;W4c[o>QX,-8/;VYJe,;xKq:eyoix>H\EnROanB(K[ăU"\;d(a&rC%E9(aKh#)[c,jhsM^/[Gt3I=d-KLHO0/icN.PwP:jt%*/Oq_KBuetPdăU"5E88=M=ydC,pvAASu&d:oc]iNOF4FRW,nHbhuOV0'GUCxX5WYjxkF#LFRBteN3făU",Qtm6d2m]PJ2afB9gW*SzC'?[qfs*[6XPcqRJu0c^Mo?w?+O8x^r<FW$m-'t2OBăU"(0aub4=#/h<Htm(k9G>wW1QXw[9(MV<VRKH'a\=\sl5Z?iN/2Hais&nlnQo7X>jăU"gsd.%M]=k,l,_O5/'sQ$rGbcYHfdRP56j:H>^WPC=_YFDi$>\V+06ivhz-'7dPmăU"tC*?8VAuN5AQD><uIcT3#>KnP>uA'rxRZp(9zDeIVp(%1JNWn>mA=FVvNj?iWl+ăU"-X-fBX)2UwYlGM&.qPe\#[AU%UCFX9N=)*5&]>H=>Pt3u5%[=SH,Umpm17K&43uăU"_?p96q]AMdk8-c<ZH$afG\aTVR83+:dSIX9qO>;8v2'<9Fk#m?TfbdFSxFV/6c'ăU"_:fO/C&Mdksw\Pxjoq<_0nPCd&g(K(%=z:d:B-UtPpMlkgj+5)F8Apbrq4-n09tăU"cH398A3lAc&ZQ%uP[0[WLKPGqOpJGeES.$Ed)tBu5mH<=kwb_9HmJODR^d6Hai>ăU"l'a.rXu/6KHAI\/s4pXDZlTESEOjB;aNCZN167rW7IA.Ftua0%>dUDVxMs*L]_8ăU"22G(sh/aC-dkd3b\_(F7-#eYi$11YU9Zj\qp9Wt-Cd%Md)bF)HA'3(e7CMctpeSăU"(ABDl$)zr=^Z$'ij.2_G\#1?]NJJ=#8:*iMjbZ\JPoi$:+3Yui&S);xLhX[TDfRăU"YmcG6BZDSEMuu5,blc&OhnX.vBx.dy$XB(AViD'zet\G0-BEh(b9'2#-e;=O$XrăU"f$8DUV$BS(dP<3l1%Yo5iH<%X/(5U9C#<AC+A(1RF(KkvL5.+YMO7:dm*c\2((măU"FcTEtHN..U2\1eO%8*'0agt(St^Q0GbY(HnUpX_-o6tDO_k6Q0h#8O_\\ZpZ]'BăU"=hs&9kuH\P=Tihx7LP:.qp%l9&2<$:?B%G'QU4:'dScmfrR%P?9cM+hq=vwCp(UăU"wFm5x:.'#w0OVuS\PYIOC+_Sj>o#cjttn=6-o46v#MhYoc)dU2\D&k0_;n5y?U?ăU"p/,1hEi\y7p2ak;o/oCTE7fttu*+v2Upy:T5-<>qX-Nqts]XD[T$s[6On:^U5JZăU"Pn&Pv?jG0V:b-MhTf<cmj7OU3^RbGtWA?SjS^$cJLue[G=B0>oO[S:n0+*S62]4ăU"/cw-oH=Xj')D48^tob^L-\-oQw\O:fCPvHDz*sScWnY230k+[#:3eT1/3LOT<lhăU"[D;nILs#Ao6F%quD;uh7IqIAuKJdG5ljNqDnc5w>uM-3s>$WOHdN_#cEFPu2%qgăU"^ig:\:Y)^>lp#Nd=vM4R#N9ovwr=#p9>VcF3GR%#Ff.Rj8RHQ2rgUWBsws/loNAăU"07\*JVBzNZ%[t]4^Zc#$G/'+[qA+d:AXKw>0rU-\uq&;D4v>LW8Kqs-^cacB$\-ăU"wrY,Ne/q6yuv?89hN][Dme^Pck:ICgE-\b)uc=EKY'qr>)[92y2d=ZYPoEwp<'WăU"o^SlfHpLgA]I&U*CI=aSWJ[(;#_7(EMIXIYm[i(;.cl4YRBgtQw\s*VyfL?fZ;iăU"4k,8u*\=[6js/I.k?A6:7;Zc-2ICkt<G5tmHV^L=Vo;T+q#skM(7ezK1Ns^)LYJăU"dhxqn\XwB<7&0:6zFL3;7^P<R4.zc>w&XAlwt#Awy]i>DN(:E\45(R8SEM[-rI2ăU"X.Pv%)T\c<tUp9<$Mlip2,_7QSv/(a9jHpp<mnk#0_Z/Ets22&-.2>8pF\NY8$FăU"[++T#N6GBOp<-^uf1Z7?.O&^nD2]NPXnP+gaRKLWClbYvxrb]x,or(Q\pH[Zh[năU"NjVo%o-Eb;6V&h;p:Pmce,%N3NxLbqMvMsknUvH0(xaTPgCGk#.N%[UMsZ]^/I+ăU"uO-W0)4M6d\X0tm$$i:Lp+#ECus[Z_c^zFdINUUPsc/_RpHVJ]NR_jU3qgtWEWbăU"oM%#Cuai#O8rj^f2Iq7U6w2kRha[CZIJ7LWI9%ZJHJ.GdxrdB8<4P09kK>)%*SJăU"C&s30>D0;yQU.w_[xuag-;b/&os9g6rHb+kY$s[e7u$Bn6=<[EDswUW7A4Fm]1băU"C?T9A7wOhG-^<S?=Nc2wlg+(m0YtOg10W22hmi6JF.a'8+cR\2EtVUvmXAb4W1FăU")kg[;0o*'Wq3^d\st:nXVhJtm'V2cr$6S8KxSM5+)ahlS-dmqB]fK^']'->Dh_găU"BNsc%^nwdK[jdf81AHN'HGYM<hC+v%4l?<s$a[D/nj.V>L+6ch\KL.Lsf8QRtTiăU"klZiDxN4Dt<T<u5QL/u^7N.dXL\_FY]/TMg2pYb.WeaI_:5*nEdBZ($HgJhLxDJăU"hsiECa99CBKTd\.j*#>x9ZH(D50u,YSV=vhC/c5n=uHZD1Z0;N\W8nu9Oo2dq#/ăU"s^N$4abgEe/B#:KMg<G^[lQAnJkje_>UWm)E.oJidLCt//AQvciy(/c06tDS]C+ăU"+C7mkc,':'-+Z(%*c[p8n7pn'/tzeLr9#Yrq,:wcjsz(EsPLsi;^Ep+Usb9N19KăU"(jVjnbug&_jj,(?h?xgCmM6FN+BcDfLkXd$P=4,G*Hr2.5#'N8(2wm.x3Lff6]tăU"'L=H]w64dDUN=LcJoDcHLTecXx1]P>fAy9oX?hYPUR&NC17F'IANrtQ8pjAfLsQăU"9wH0G.xY'NC?wb?Yyvt>uj\n8PmnzXZLdO_]wC^k]_6[4o.&.2cBY+)R7#4JulqăU"DA6YbD^$=lE_&]Qaj.k8I'?Am9xLf[kj(B6'ml2)HZV43ib]rCB*UT?;?UnonaiăU"rzk6AKb?_jTeNZqTvp-V=)T?s03>2Oi[-$#QPw(^[NU=E(]=G#=g(K(L8Buo$JNăU"3I73.&T+[(%fMy%c>4itw]'dXuR'bdv9vp?r>vupNiS4A]+UQWR)[?n1iaSKpc1ăU";Zx/p;ptK/yhW6ECsLh<SKl(yI/L/AVcoXA_u+]ggE<SCi:yqR9,p*OU7G\onlUăU"4NL<uSKFlFA2Zr.sbv;:GR942=QNLvW&5v&Nr<GHD*y%u\AsH-*phhl;]Lu*6T\ăU"uWAIO)b1H*,nF8QXM#s&u=s%lw#<Q-v4]Od?#<qv]d&]A^iNq<+,g4*,;hY;k\0ăU"FSjbPEV[N96<PRMb7d=5aucKO:i.10WHQg.hv#VH?gVQ[eiX?3Mf]=P?V1EE=snăU"[5q9]E0stiyC):'x%]=T=8%V6;FB-LmpcGiYlltOXVyH%(g<C)(k$>ns7qUY(doăU"PuP2/Q4T;[n-,JrxL,1oel$Sd76[h%&f3hM_)taxixpWXW9$HSxB)k-.7nOk]>VăU"jJuWibzYlKOhf?%:w0L#_C#+&UIO1JLNR<1oW(RM3Ypw56I9EK,'7Cc3aPi;I$făU"LS&(7eAmF:i(.:nL>3t[xTci<=NYenD6J&gLX+fTM\Ai1-dN57;P6N)3R4KI72]ăU"?<Q$jrc3PXJN=>cCMg+h_D4rN<+WykNWzxapu(iN(/L&5bnO'7D_mQ$#>+iGrRPăU"U[D%yILHAd^h^Nwa>ZKF<+05sdVo';^E*sby:H'uMsDZ)D$md12MONizoh5)Ht%ăU"VtiS-wXRR=HVC,&fR88U2Ak<:*OC$ECVws8veu9?2FISMD:Fek$j;S1nby3nY/=ăU"\'OXRlLq#w0:63:p#eAup(T8*_]MdqDbrP0.cCqb^KV3fe6>?\iuyX50<?/\V>făU"JrNMPgH1&XP1K[>8?Og2H'\SM6F]'NJugmN8G(fD)HF+jHwQ793g_]gHlBxeCtuăU"a^?cj$YLpc6uWZuP3boNcy#78f7Ph([nr+bPqLvao?zNG_v^CHmQlsf6Odf%qrcăU"SsJ#G4\c7E(*Xz)xJ#Q;\rK&6r.TWN-*wn2EG$u\<nQ'hXE8nz/KOQhJg(Z.[YaăU"iiJ?$uf-_jM.+NUebF+9k8-IZQGp967<uoZPEH/0^kx(cQCe6Cu[GE<A2:Oc\MBăU"-gu;wcXP35<5>HH(UNxlj4B\[ibfvYF<EOOrrz\csp7peW2sku%/F)rgzFeMbhwăU"znXdMcJHg5gNXFwNq:>[hh%H1TNEOY+_uAwOV9:-]ym&In&JjZtkkh8xpHV4]eSăU"S40]B=[6^dP1='\Mtn&)1YLuC109J'YlX1ur,h4_FU/7f]60+8[7xlAz^J\(IRaăU"o$.foETgc+6HXl,.bJrEir4jEXr9;c.oDrrgTx*u+Dpk&4>GudDDIKdk*hfL9lXăU":28XS^8,p/+BoW(c8t#U8ylR\.7re[&l]]x.nu.isONW(i8I9vh%(6;/eEiuzoiăU"/>%*<_#I6,Bty^0)cYA?LS/Md7.EMtfSa?Sl=>>9<Yp-w,SM\VA]2sNgw92/h^$ăU")Q:6oJl%nYJ&-Mvo?7ZFjhTb9cJct6uXs((7sHcltF3u5L(Gh8qqK3NR*&219N'ăU"_1?&?l,7*-_hb;(^voCpD%6MfL'EBo*phwJjISKlr\&#/^Dt6MUVieOmgR9f?7MăU"x'G2UXSOpO=>=Rn]):p8Vt4S1Zdj*(kcEvbKo]?YD_1XRchvsg+m%o]46X);9GRăU"9h8W;r17Oe8kz?^2l/N^WSCR)Di?*SG1H&pwjyR6)HsE7j_mYGw9:?(7sAlUh,.ăU"U\^4UfQG5\WXaq$GzGhss2pPo9]FkC5+uaztfG''k3>(j<4A$rpO4naM.Eys>^=ăU"hU](nr$l_Hu[5^,7\(')j*ht^jr<[QF9]6ywmpQvbV?V<e3k%s3i-jZPcSoeK2oăU"Mp0Mh^IcM'#NNR%PPB/]nrM6,$L1dPy8qQA\F)4)MZb'Ch]9cdxcZJhRA[Wi(NsăU"\WbR(auu:vWLvJ2HM#MciblVOuV;Gp?08Zz\<0$rhriA/#DK4t%(p^';rtBH6-?ăU"mR:GKtNr_<k4nk4uJN3uQ]NXUjCwSKfMyJe;qeu;tKqY9k\;4[Qa(1=gNP>or0=ăU"2&/bWEwPs]VV18qqpO(%i-gUxJnz]wKY(W;&QscgFCX7[Uwr6iYWw2Rjvsz6NvPăU"<J87JYPZ9(nPNTzv](?a#k?8-1<YM^]M\Fbpk&FW>_'D&oo*R-S^nz<iCKudd9QăU"<nmbWZb/86MFia_qW\5ZnCu$+sHG=CuzEO=PQ_,\q[8*s#n$%0x$XDFzh^MbChbăU"i>b=(dD=mZX.pl[=:vUoIKutA<f=)%6#4n8WL7M+S.rgmQPMa#QDN%cD$oAq'XbăU"ju:t>5jcs6Y#UQhY+qL$+zkhW+jc?u>^zJDr*E1dJSwQX,6J^0mA)DCDNp#pW,uăU"lhp'%(r.atmPM8[4$I'eDVQ/jmdGnN4IB]m3pxSju5q3?=K/r&Q5ghdG2:SW1L&ăU"]yS(z<b5xqhjmNDaYp()YRGq8$IR)=kHV(0^SA=z,YSlelx=qwa6Wu.u6J9mOhTăU"qFp<uW,hYpP>5jV6a8JY&F4Mlq9;K2m*d8[>rFW^4TSY=,ptCt:1nIfQp,B254&ăU"W&;nFu9oIh7?nwun]M2c_sP]IJ.etf+(URsZlTo>M*d5N-O))9=*V91;XY&2<*BăU"KIDLY+c+Nt/aiV6+tc'ZxO35ilHnZYmN;#i3()OHQG*:N:LO4\4bk5/J%/6#+sHăU"PA+'<O&qh>Gcc.?OdZ;?08vHKrjJgNp\?6o0;CUDf;<ItmrNq:*t,xVeL.F88.UăU"nrLZL,yTxMskmWeLRhHpvutDJwPH(7aMG[&79ZRQ-C9:Y[9Oukpi8.J+H+b<-)8ăU"_6D?P&((R<Rg2zs96]=t3\nBmTjcW#g%H9cxDoD,%,y?r5Vp:nYo9H)ww=Lq\nDăU"sGJ9t^qOIAkL6O^1RmO'U;sqEiL-?5aut6hYhzNMpJl\-LsCZlkTRqwIc[$%v_LăU"'*;r8e#pT8NZvd;W4N;_3swnTu?l[gt'(+Y1e0.qnJ\3UUAC8vpRw$QqEdE*IB5ăU"YZC?B51RY:l-0T\ip:h97K-+%-+Jw[e+?0vpXt0jg;\-+.272L-kvHJ4y8MkOK)ăU"0M\+;e^L-8S,]gTb=g)g9ja58r-qGXo4?8jc0SJC2fPVHS.2A=.tDdiqSTH-xiSăU"ngjO-2XpW2;ly/eP_Mg4o:fef51MXTK+L2BkKPsD2?-H5[%2u?Z#AOG%kET(J2KăU"zNFxx*i3C8vDQ(\?iu3&0'<Mm'[=-xx4\:VpBR')xUfK3[O2pQppZ=k-&yO?U+%ăU">VP.wT^*0klO;pWZ:RC60[neyYWXCsOcigP$fhjhg#iV\FXHcp6d:<w$uVWu/x-ăU"awZlbB#e/nNh:Na3;fb9<7CnuP,>LwI[;FxAZz/MXOl#kg,UN2Nlwp4g]/3Ife'ăU"w?Upd7\FkD0mpYh?A1KDg2Sk4u7B1WCK.i+_pC4TU;T1W?Ir4ClKV[5p1%\vu/&ăU"V3D\$ru>=Csj'ms/.YX/%%slo9#aKC6;*TRHKh's=GtYkoqQ5aqG<SltZVhZ6tCăU"BcExwnsO]+B0.H1z>bhDBt[cDcrt'qur>X,$QM>ecDAnG^kAMfm.D<I=jeS0Cd8ăU"\(unyKK)[IH$b)d;:3u=>1?+y*#y3;fFR8)y,%dQ81pmJgRk9VDapScY7OJRtOrăU"kI[E??pB4H(=R,)rDAE0<KS?Q[kyfvMNs+?8MU9)t_0Yr%6y)P;dN>I:T*:hkLiăU")-FRpaLoY29pr:Vh5os'l8[yc-<qMzi\Yd'ky]c$[jii^VHYxKPxtybB_Xus,kVăU"T+apf9YHr:Jyol4Id&\qbDL[2KNX[d>;F8\c*(AZQnvZlD?&W1YbbpJzK\tKf^$ăU"OkApvPBL''vrDbUxE[EReQ84*UP>ecjT_S;CrcqrLOVX)soWfJvmn:JS&G.kcjGăU"l.^HhO7K2o&q48-2sMmOT(*mt-rYAldD39jX^DRV5_a?qjc:eTT:0NeIUTnNytdăU"jzfb)FpOqbTE2wd[0b)i=A&IblG0>it998h<QEXR%zxLzUQ+pVEMt:NG(0'C$?8ăU"XcSj4w#HW->B4%YQ^3Lv[HI*sSKgHce#mL#s,g/Y+uEEyziK94J8nBux[QK*b6lăU"E&.34']5?Cs4P3^g-*^Qg09q*5OOBjVa-^-jMFWWE1m-Zm:P=t9T,xo^\Wt?i,HăU"c?tiV\X3edGTY3CNmVaY+.K$PMbD,^NS*?O=?Rt;6\11n>]8yLJetMz%KCoT^-<ăU"EdD.nRNYF^vcjDkurCEl.oPZeCPLY[V5/-gE#KIX&[TW5htaWXMtpW>b+WeMUykăU"97hBTcL6Xq]CL86bKF?=&_P;F)V0;UTa>wEr0ItSOI?/wbknmk*Dvl*/W#&]791ăU"7^jp9lXunED-u.h,HXdxiRmdBU0-l:$vANN#g[Bwm*5;tcTXOnbi5Hqf7dcPP,DăU")P:2/gI$X0uw+-T<4gRonWAutDxEdV,a8IO-Y[8+8#mI52P[PpY=^fqNrR65Bb*ăU"u&N#JV5W;&Q/iz(sgSg]1?$+t45ddhA83[a^p2dBXr4o6-u0r,(CdrZilHfHqNgăU"*6.Cd1mMQEh)t951BosKnW_Y$tQ^Qi^393su]'SbGPd-sPsj*wa%ouk#jT_O9ypăU"QH?>=Fr6amgda<Q^e\Xjr(&7v%X#NKq3Z$q#'tNX9WeDx'R+a%$aB<gc3kTvJC[ăU"kI2Qy-)IDM7*8)fwKlqaR3=ctibU/oBPDc.x_FBo3ft.p+TIDjpIX'nbEjb:YHWăU"69p,*6Igo-]UNl1Vlld[K&yb]hVjws;efw>(PRk3q^tp*bR'IL%8L1ZIdB+]%wfăU"n?&XX<rj[-x<-ahdP4<x;8:[5c^81G:T1,wz/iXr7EXUEzG8Z-q*XQhjO)Af8k6ăU"D6mgn6n<I%CK19T(0T$7HgblYuGIpHnl-Pf^Ig<lT9c+hZ0PemOd849p$9p_dqBăU"Udp;^afQ08d>0fPXzH2tTc?21>6I\Wp=\-R>4qnxbvVat,NNYQc82/GGb&\''C&ăU"QN\q+?Kj)(6iffOZ#Yfhw=q=W;bVkMvZdok]\NtFxUImj')2,+^>5jJC)Ro2]<măU"lcUl=N5Lw7slI/5.]L:OA751ZivrrmTcx_J:SON8Q(R'(*U%3$A\*^k_5P^SI8qăU"gU^YpwS-V3x2yGi_:/gmIaN+mq\x%yBaDpDi<8gm>iBE#+2aXdRc5=Jkr.%EsZLăU"sK8t3wRo+m/EgM(lZ3U(c8OchS^pX\lH]Q3xPx'81xH,R/\4%OSBhJZ^7L.Vr$aăU"*Df<(]9^zuj-Cerj6891WxFeSY6h8BS9cfA.p5v?f3$i<Q0*h$eOEMXYKvvFcXJăU"CPhF.Lwrp^U4u+s_d=kI=h5g(2a]Ld8ZIs^\haHP(lkOBnUonzb'aOjz\CLvJS.ăU"D&w?;q5jD3<^e\Ap#iz4gCU;/Az1pfpev)BKcS-PaD2jJ#MEr-j/2#nw/<oYULcăU"5^g_7/Um'7wJL;2<F17,M-]Qn\kxO68N1.-m-F0d4>tV^m;F26sfYlOL\._7,*JăU"BufuTQ+d-BvT8JJ>2bEmXU.r<Pub-Y\B4rWHd54##d2L>_jH+ZfwcK,ajq6>d=kăU"Q-Q[#+*CcM6u4sq;I+c>ruxwMDxyNC5Ew_G;O;r5]TbiD3(wlf%'m%3Pa-$%XdKăU"W.E0V6iSBmsUh^4*en&\*^j3EROrHtNZG;t]yRrmq$l-[q]UZ$>&?(\OV%5W6xbăU",nM8(7KTC)5*=J+%ZiOE#^NtUHw[q[c'L).H/#)3_3urqn.03q8Blg>vqU:Z:pVăU"FWXnri.;.r(upi60HPWWDq;8j9YM22R\vtTCdT=KF]a.\GtRq:t>askBV&lBN<MăU"tLC_&v_>WtPh>[w%)f(a8%nU%fE67%o+i0c-4/X+2r1+#6k5bK]cZ:%74(:KKR+ăU"NVju[RDX5s<1w)d.zab<=oi-k8<MI#4T6aKi97V^$JrlR%Cp?k5+<s=(-e94SqHăU"kIIBv[9En'1&6G&02qS,KQESf=*7H%8$6lF6DZ7lCBP^hK?6VCT%>?=81O&(zogăU"%rT<%kr%fExEq)jcF-<nFYna]sK0FEB[r%b42Ml%hw%T.o'GgOvYE'Re')9'K]KăU"-<v8sE(p$FnASOO>Siz<rs4qHVV?p8ts2Gn-r#C[QG$<pUd;<0eGr)d,2TTg&aNăU";EFNi$28LE==LaHV$sr#SWt31]a-bae\&Dwnd:#?5A(*C]My.BvSHgoV^]kB^s4ăU"+I8AcViium(&G+F9Y$iEu8Xo9b,0'9s.^<x<^fYKA,x_9$eD\GQ'>gH.Pr)gJ1tăU"yE=qo?tbt4N.=eSxl:pnN$bCGoD]<m%R5,%-wpXFs-Fn\krIRkFPI$Moj#%/Jt.ăU"7-Z=kKEN+[cKKeA4)L^u#AOi+wEBnA&.?c=)W=N[\nT]B3pPsb^,RUQ-AfH\$ZPăU"cBQh=VJvuiI=iRAV6qNdzu,_P&5/'jM7]iwKsz=Q]$>Z<7V6j9xX+,l$YJh5DcZăU"e#(nnUgSCvrkfk^6=cQFl9&QV6xD'HXT8-Zw#?jy6w_hkExnT0xfSAbZQ%HgtFxăU"o:A8,\6&Ef)nc%iLxr]5'hOv=ICbq[3grSU#M#Vi%+'.)(I-#[XWxB7.-t0=,gOăU"A%+f=W\Crja#%GeAXDa,=PL(EbvCqjV:f:Gumc+g'6?(I/_'G$TtRv\2XJk^]otăU"x<*B.Hk^B\VHOjtz$<bX\J(MMY^,#Qkp(Qlh[FEYR5tv;&mT0j%h)2,GWR\oX]năU"sQd(nIZ\F,zU#=8JKLHJnsKjtu^)*VRWR2Fdk3^3]3]Ynw:23x*?Dc#yp25qj*văU"X)EDiarz.#VM\ABk:<_]z=#*(YnM+BUinHhK::+IZH,GIqU\]KmTu=Z[b*8BV,_ăU"k<ScBfKZ4C4Y5=;R0<B3W/BVT]i&bmZv7sg+&qG0,3aFQ2,Si;)]gglgqa]9^.BăU";MpQ<]8$s#kY8SDqw>QhKjQ/Bd%tx8l?bP$CXujivdP=8D#un5R,D>hb:QW;UdtăU"FUv9IHyx01$Ac:nXN6i0MrvOItQ2Z/n^v-rYTMneXWO4b8VtL:BzR-0\Ac\/6qnăU"sDZKUV7p.hwg)L3r:]I]eG#JS-jgipF?pIvHdP+W,k5J=[s>qhUa*mgrADtJT3hăU"*Ev'd9*1fb-)$3G]g$&&_&lQE>2zh.Q.6SPb1v;mdZ$uBY<A=S]h'\[EJ:]hCc)ăU"Y>hGVsD5pG<T&WopN5v&dPFK8t8Vl=d0TBqe/T8:eGOQcA'j2.evGW1*GmdT/jeăU"(+'j3s'<9^WH(%nF)r0;S1V0<LiENg(,.wL.pSeY'/^6n?6Yru[0R-1Z>Wx\;hHăU"TI>(kYMg'NsI3HreT-Dpj%VpOJmwI.p%A6JcCQK#ibdq8mB:s(E^j4ZYIdo.dGXăU"e7;pi6tO9hKbF-pv8R4W^tKY26bJ/&:VDFVHl$fFW>Hp64?u_Z3CU[3puGsr$*-ăU"4hs'9SXs)xEFn_LeImB%o%bEq$)M'mV&-mwDZIluIeFMw\;oov4u;\n%BV^fZ/6ăU"*ptpg0i.AJO)9UDqchI>Y-ChkOjE_'t(qGl[p6frdF5S9B)n_QenEPp1]\]BbHlăU"MQ/ryR_$DUKb([?\dMLFUan_4wsBoP,mZT0$Fe*DMiZ:thN-Yw,ChKG*#rhnQp6ăU"uDwYXUqqU2E4^uA^yr,0kxYU8a+\<8A0qx\A8#<-h=<D;LCe==liBLFDXr#Rn0tăU"C:.MJDJ*M-0\-hkh<1C6t2-czVij1)amz#r>Y-T;-2fQm1EXHSR9U6\).+FJ1mNăU"l)#l?JRcnM1#D/stU4lqZmAtTu\,Z8wnl]P4Dqu\7686X*2#e,$EeVH1XB27#qqăEND SUBăSUB V4ăU"HFZxeSOnkvK;N(STbqCoUwQrmbLugC(;(*eXEqWjS>7(HoxXHI&Scg8<nT8XtVDăU"EWOv;P+F%4]S?(8w/9r7;5+5I(E3=8(6H<5\IFno7&;1a:h1)pKiqZA=\Hu*BIlăU"vajh7DLc\COGWK;+LRWcsh5=\K/.=o<ai#ZxQ0Fuh\8Xutq\tqmNwY=P(w.V4%9ăU"VUy^Y23xw9,4ouq;-?Gy\'Ecdjd&u$9hZ+T8-q[pE'AEIV'U4QwgTG)gXW1aL^JăU"J%3VJEtN6rDnm%/>'1/N+HO$_.Ni2t?.:C)hNocX%cZhx6n^u8sFpM^LKk8pl3păU"'J#\g(QQF%]Hu9qWb.XM+0#A]9iA43dC]?qpt>5tKW,nN?onPmlmGA*(vBn:g4jăU"AnlwdFeWl6q62vw[EX,i=fA_f]a,295Ec7w_Z;w+m*i;O[W9j9m9X-xo.6ew.d$ăU"Eq?ra_U0lLIIll/a-mt:cTWloedEZ(dUHcQwczbOuqB;;-k$54A4Z<e#d6GSkclăU"^r8NobtvxnOWT>\cD&-^Koq:5or6FWrd%Ra(Xns7fbs_w+hQ_[u%wo+N]nP+iX>ăU";h++Tu5$1FY6oZu>$Oli\^XpdUdF9M09B'\Kt+.tV0W)SN$sWWSt3Br_O2WwdeCăU"j:RbXquC?B\>JxibMc.u_W2qmpEJXKQU?(HqkO)YVF#Zv.0dl&qQNxtmdcv]GbpăU"FSuh5nOY$0XH?pf0d?qY,t:FKXuqpPgrm'xX]K1lvybYN(5ns0?x8l^lB'x)?:)ăU"Q;8^i^_6H>MlF\#Lsg^]8Efe/DB&Q/-OG/DSvI*BAEm-FW]/I3$J:-r7Gg5'm5yăU"lpAbw^1lKX83A<ktp[NQ7IEKOa74^<6HutLnYMkb.QRn.N]vPihr,NuvdDy4qXsăU"66(N'oEy\bZzq,ak,'Him>7FUt)s(Dsii8$f1Jk3[s?dLsk=Zx7eD/xz%'Irjo%ăU"gnpQ:HjDgm/y>97O[jWdXHiK^,^D42c8upogbOVSB4Q^a0w7E<C]M<Mp_LsM\xxăU"ei]he5PgLnKorRvqTfP->G2KF$0<Et]3D,D+A.j14>pbLsE]pAeb1(_MwYxjp+(ăU"-(erC=m]hVILD=.ENFNL]s7AO7?-_V.u;e2kqo,;J]x;Kr-I94LRfsqmsPD:H&KăU"lW=?jb]uT(i9#DHUF)8'5omT8wG#_YHP6K#DWrX\ACnEBlV,y;d?sbC&Hm0IOm1ăU"eN$MwwS_#UaPPYG'$dkq'f20x9,sZ2'myh-Eivg5nuq&ebV>pqUe2rlY_C*7RJDăU"U/O1dDnM)QJvsluJNsn5cQjd;tCB0s]L*JqH4k_k2->c%-uo9%?ug%I,Pm^m#dNăU"D6%FFmt8U(AEsaDwZ<ql47qAf<)WPD2odEZ6[Kx^nKju$cx=UaGPTKG&7k0KFb\ăU"Q9%+$tOqu?i\rDSN]FS\_SWEe6sl?bL;hlqNhx1sIf3s=^qBW_Ga&qE61(N^uNEăU"ACtAMDsnW[OkBN6H?Tx2MG-rRDntIbBr8AEGIN%EuY-+i?9bHuSRUx=sP^]Q.Z9ăU"imxS>tBA<;DfL/t*Cv.Z^lWFvMXUS%'=b.Ltl_]<%aDcWS4m<-IBEX((0T]fw<#ăU"WwxdALWfQk^_(tfVHtucb;?$^E]n$.+Ctf)>N5iHXFq<H+'ia,Sacf]NwW>+gu=ăU"cDF.0(&QS#cy4<u6A>%,TIF_LXKX(u_WdJhCThK=ndS.GwOfP<\QSTmXkT)v$[WăU"oBa,H2ouun701.q5vT[r0:Kn,#4b5=-4v3)Lnc_,lJ3G8=E_9H9oPW/6^<S8nk$ăU"3HQE?ljtM(n.3l=dk^V<Ja^;;sfYURY0A3X?=xE$6=*Jh1&WkBmrv-0F,y._YZbăU"Wm.EA&Dr)&6Z>U*VX2WMU[Q%fY]B$:gH[GA=i^^T55eD-^c,J>>k8%2:3VF>E?jăU"FZY[geQ;v:?Y-2bp3bYeW$F=l2Ml733mF9X/C+rkDCHA534/?$V,GT(MoXh<)%lăU"VhThCa#C;^CCeDf=8o1ZZ+Bah=.Q04\1Ue?t1CklfzpZiV>e8>LeI[vBd*?\\D\ăU"A?h1D*V0FNhFX$o)r(F[A9sqI2_>PIJH+gb4._I4gMZsG^D<?B4RcZY_AFE_8\[ăU"6+MSr&E0g-Tm%yQg1U*Be1WDHhVXo>5[U/?:S19m1?Qfl$\+F4JZ*e/gXXe-8U*ăU"bO$SW=mP*egbr'$._BYg'PjFRJQFW93MYK?qr%^-82Ghg,[S_<)x9BZ7)*p]1P3ăU"En1M,26[hYd?V3NowgX(:U9/^rnE6G3dC(i\R^(HuNZj?05[6GiH5^T0[[fPqi6ăU"C):*Db+&^P=;D\QF78B=KBD5\=F_5hZWb/A?.n*WtosDY.2klG;('XI+8U&zXs3ăU"p7k&dLCnNAu\jZ6LKD;Lh)nCP&QRH/aqzxK(:L(g6N=xl7O7U/o<QVVOsJIIEnhăU"gGgAXZ>qFe\Q4\q%52PiBX>/;qPWY^IGBVkbWXx.g;;QO6J\0GS)]wT?+7;((WsăU"zmMCa:F,'d/+rtQ<cnJGq%n#TuMWWOWB_P==K['NO-c><3?Is)U_ejQJnV$8nXaăU"6-d,K](\6H,A>hs+f\q\27,$%)Drh[Y^B%^[;?R7(aVvq%<1[R2uIkS)bw:18Q5ăU"m:(1#lrd>3vPUGIv%t2=(LC#\K>nuh$*J*A-RoWCAGDAh1qE6NQ1rOJ=-jcOC,YăU"/DC\P*&UC/zPeNn9XKnm[x/XMoFT;(K\V/sZI45X+&aWGJV;f<T=J>dYSn#G9/>ăU"CHv([)9Uf4^7aUX>QiblXkWXqD91OV6&E=(;MF-Nrk7+i;n-\iIlrn)\aTm*YYtăU"^=L)=&aCAC=1=YRW]E92WEsjlU2o6?-ugq>I3YiM+d'B8Orv^Z'HvI7Cj7>B?lXăU"hRQ7i,gV+4*Bn&H[>]ZY+4TZ[u,Wd*0p2)1psrW_L03V[4gU;/Q3EeWQ#bBW/1EăU"1s;FJ%?&*i-e?kKLZM=l-2CVgj^^Pi>O8v#t_[W,+\;ElT?Z)ae-V,iNa1F37jJăU"^d/ZGSUFfiN7D3rv00WsM?UjAgL$0'L_fXmY^eWdEQY<19D9Y3SC:MemPspj6UXăU"unWTgNld.%0$/^5a+<Gq\F=5srPo,WMejL6cFDGiK^3Vn$K+lrq]TEks:+<3YLhăU"U-vcP3qb215]>#1a0cm:t:eTK#UipYf<fFWd1E56;=37JQ_Yn2Ee+HdKq$jq,&MăU"HbnC^^vnf<VQq?7-JpViB,e+V)C3jjOhAqD#_ibS+7<-e=SeJ-j>?C&X(v^'FE#ăU")#<M5q8Q_eKVi>amZD['hHnh34a/C$+[OpAcequF2<U&r>/.m\Z3e\3>M?[0RbnăU"5fiaRVD$OrwZZw9RCZ<&8kLYcX[Wrk1j;8FJc48J\&FEG$<9Al4VM0RZ7ngnlF4ăU"XI?-YUjc_w#6VPY\H&p_BAQkxi?OZBD,/,^Xm1_&/9HTmcWa_?3Tg</(db.>1NxăU"L.DkF8%8r%0b+'cj0<uNP'%Vx(7yl*70Z8Q*NZR0;&,k,67Nl3Te&u3dO>jPdePăU"9N\OTl'&z'P-SG:uV;cc7JPd<HMNS-l115b*kt22#2ZpefPSw(P.+54c<Cz0sR'ăU"8.P#rai$s4]2Pp70HXRas\kZ_&XN/;(26\[ijo.Z0'b'Uu4YAN[iV4Zdzudjs>oăU"0R(&V(+41+>3b2h:i=8i6pIwl;si>9nPd<KPT>'uU)%'i/IMFE+d2D$DfT:&8p;ăU"TJ-UN0(RW5pPzJ/xY-11IA#R3'sv8c'FZD?y/:#eQn*z,)?7wGZtFU7+Z/oO*I<ăU"T,(Q8-x#s>g+'t5J[?bdnpc.#<&TW%(5CRn2G>M7w,+N6ou=*>l2PD&%(_h4:eOăU"-OPs%ML)j=>QIpVL#TM3KXRbm]2QleYN'D+Q8JhKXg3L9=9LU_SBii3t5v2tPN'ăU"nL-v4V9X0stIVDq:g0Z0(GrJo\sjdwNvY*wxJ^Z2A>&i:5XL1mO%*-s0F,nH9TcăU"QiZ?p_i0.l0f=dqG;TOYe_/efOB*Te*$E.Z..0Fc-.YhuURwtuXfS7l..L$lO&*ăU"JP[b7:6TJPdl.f;XuRwAO6/O]BV^E->t::x/l//E-u0.eU?JS/:_N>fPq5*d/BfăU"$C:QX2B:p#-X3qDF#OHo&$Eig=<XuJOK/VrDd]Qoo,^r/=V2N4<::splOOW_ef^ăU"Oc3:FLl:*J^PIDFY<40=Z<H0>N#.**6//Car/LTOml$iP?&F&RrTF-hNa7>=kLmăU"FTZ0ZN7kbYlx37DJluDO&TZT/.>DJ;LM3'LJp$T2B4uT/./U[>f7ZVW32qJ:tg:ăU"l*/cuKU5&T&2$;q<=gauQJ*t3*]<RT&RT)pDLe*,,q2RlfT)TpC:XNr*D/Nnm8CăU".tsnJ3B;>?^Y%ApggQ=b&ih\Nu<G4.*/2Srh6Id\sblFBf3dCG(.3)_;CriJ3T*ăU"=F556U<lDk16RT>jrg]dg%^mV_;s).7WaqInV]g.34$VG\374UH5WMhAQ]PSVf?ăU"N2+=N&ubC5e8t]VucI2Yk7.=uV=^D=#5Q;JMu*C+ifC3?dBK^#YtHa2XY1+1*WWăU"X5-M41[3Jl8YhhKRUmm,%j,oO=2^E5q=#XXXT_CVkmH>m;>UkU>0X;.?_fXMS+IăU"a.\/apP/wD?%e>ok>%bqIzNh45lQkY2Q\OZ,ns;J58q4W(()ILa02is;ZaN$vBBăU"_S'iI9^RQ$#,]UIAWJ:nWR^2wWq-2irm2K:%0P^l_shEggG:oFiX7+nuQ;5?=uMăU"$DA6It<&&^R=4hh\5:'[62>sc6ajp]<_;(AF-y$Mwb]oBRs^NNh-nTB;p9NnEb%ăU".q8Cv.#My[Y>ON0Q,>jb58Mh6*RZK63<&QXI$Taf.JE%V.=QQki-',JCAnS,7HiăU"v3Y^#\Dj=f#:\;[=EK'&0Znw0r;p6nX$;#Tm?\2U=.#=hSJE/(egjC+51(Wlm(7ăU"rc,8/>W/40#hUiq+rB)-2F[l6w9wRs5BE;gRuvbpQM(DM4AZ-:fV0N6[J(WfmKRăU"<_;Z)nmg]ep=+,::X[r<W[l*lEt9Jc6)E:%&62:=U'a1Kb<%lH7jf3qJC>;Kzc#ăU"VTT58O2QTM6BFUi_qHMR5^,%#1(Ta2K'J4*'3M/YL=9^HEii'?1p9Rt^TyKjhOYăU"';m=(j^:WD(Pihv5z:bB8E?VKK(=ATq+P%7$JgBJpSU5Ujs,(I&GWh;Q0F8R3i(ăU";FB::X+2tFZkDsL>L*K\CVN<7E5?$Q%3kjF1jRkH2EAZ$hzf0?\o7e9Rna?k-83ăU"Gddec?Ul$)U9=qJ#iIQNO:['e<sz<M<FiRkQG9DX*HLnHABkIYQYU:6)R1Vr8NAăU"Nqgop?0Uk3]WoWN6'K&LH,Q2c_GRH<X6QFW6_T_JY79rq.PrO2TfGFMn55#ks#0ăU"io>%[)ifX(jOJB6*hAIqER*0E3:9^H9+6BQdT9-EI+il&V:.'2uxU&7*pm+56;LăU"-13S&U>fXoHn1RQcX^3^DI,gU$G6[Qf,WpMD)lSih2VK\-_m6l[]LXYW)I+A;,qăU"NHb7e+E+0dB&/jsZi5.iJWqC=&?j;m:.&8+BW[I1$1JkSz(h2DJmbqB0f0i-UY:ăU"ria1#GK[*C1i1bFkMfD*&qjLkgt7iS+aJzQVb8QEJ8U)2,-O8:47&[7t1b^%w.păU"%LxQ)r*DqX,Ug#tO05ECHh[YTam>5*>kB\qRhb$0.%%j,W/*8A$CR935dfi=$6năU"ckC052j0hc*ZL>5-SqKGqb,^iWRQ\_-*,NVGm(&06o+qK\bO9e&viIfPsjP0u[%ăU")Bi=YnX+J$[:2MFT],EpnW<OE83.1AuZU1PfeX6u1gfeKDgSYl]V:65)0.yqmp\ăU"aL/lsFG$#xrPFl[vfr#ZEQg>UT,ViLI5%9JgK%r_WR04Z;W&u.C8P3EaX,cC9esăU">?'.L0%Z/L0'DUtORdmF?F;nlXa\1A[S8ds=u1FbwRC/K1bpwXh(03&6JGCc4P=ăU"mbU+UK?hnbqhP+VBkoP'<;%ZVNQqeIjsVLd-NQ8k%b>+:^SgQ7wcTffuVzBt[^făU"ZpA[/=QWJP*%bRN$aZ)'lIA/q\[a<?yl09OEMK$D7US\\;x9,V%kU5V58_8RP0]ăU"O6-roX5EDF9nVs'&)R>KWJu,VTs:?/I]2)r[Nv5/86;1)&r:tlZm#<=W:KFwk:năU"5JuelcL2/a,_>f>_?p$5m=4.^dxhv-NV<qY:?>z>d3ET_QVi[UC:e,aDm3]y88lăU"'6=U?.^\kn]?_mC+,+zan\24sA<(tEN\x>Yw5wu;X2?#(jjZ;Z-QnMouW0Pnfd7ăU"krS8l'VjC\S0CWnLYo*1,5)X[.[xLs2coSNLt5FsNeD:dP[kZ303>;F=H'&=,+6ăU")*+&\DzV<E>k4'&=\./4?wjq](-9gOgDStwFa-I0M/HV=maV+y_ibSui9wl4/AcăU"Z1Cd6n+4Ckl.<Bjg3o3/=e9Y8av^WvQk?Y#ebL2;WtUCPU?ZB=hDu:n:;NE7[nEăU"pOn7FGs8Opme&Xq?fTi_uMm\C+Dk=/U+f<3.'EB/hm^4$hOSN(F5blW=H8],&>/ăU"5t5vXIe/)dw(tLoD*8LZ[o?[F&MTAO4mWrG-F1q)'rf>K=xK'Wv\x,cO0YTqakNăU"VYJo'6H7,Wzu+WHvOatkBY.VaP]N(?;qa_NI%W;[6>mQ?=UP[*R#%GApY_M0*WVăU"OSoRE-Z$%lqaEfe^LX2LPPB<?]i1d.a>jF,]zDu*Vpm:>C#cqDFf%lUrLXQsO)hăU"3$V.l7.7-Gh4lU_dxDMe]Kh,3Cs/6K]w_OtnY:UlUnu_N]wx&tGTr8S6XGjt<7căU"Nfo9Tc7X;a=&$:OK1o9gxco5bcp4r6zA\y'zP<og5;sjWE4#5OKB?njZdC5RXs^ăU"sERO#t-C8\L;i3B><tr4g.LQl4E?T(nSld/<0=y.HUl_4vJ)G=[whk3c>&[]0a7ăU"^]QnRKod4n6^yYFX[UUW0jd*ddat0rYqvM[CPnqj:Pf7jQaDYPXXy:jt]pb(rm^ăU"/BfudPho>t?^%4%$vdbj0)DriZqXhb7lHYj%8y^01wi:\]ANG((>dnX>m(cvfX5ăU"VE&BDu9cosUbN[[T^aV>V;)XI\8=49H1^Vg#[u;Sd556j*I2G'lm==0*TQt6Q78ăU"u9CS$nr)K0_ZTUc$0CAQF2lxx=#ZoOw+E=aDID3zD,rxHV\t*I&#N3L8T[Rdt*oăU"qm>SPElvnH1otjlFfPHsBKDhBt5)'JloqNcks$W2/EFG:Pp_\nKvMl<*'H8bAp^ăU"w6xrjV;X26>C#e4XBOQ1\PM^:NZtG8=3LOU_GsBL]A82RWYugLFX3^lf%San7b=ăU"CMk*.N+;7V2uX_TOK7?0kD3rE=O/6OB904)OWUTmG)4.:o6_OKdOvtB0pJlhGbqăU"$#8T_nMKUU4RaA5ugv0Wo444WG>8\>O\t=kXU7T]<s1RRuvfp7rv\(Xlx?Jh<8DăU"x$Qhv9y;Ux]jovxl.jlhKdufp8lt*hxo?+^kd6R<v#p/5vhuEPw\l0WHpZfh5NlăU"x&>wR/DHHpq&[kWpM$FiWH:ROiv\>tM\VXPIp-ESgS,_Z1reh<PRwDrE^ba;#MiăU"TMImBX%R=+t6FQF*b6e\wNX;'&1_ugWrlZ0hZ8p&FcW;hEp,Ouv0UU(slvo97fmăU"l>6Zlgv>u6vgt*pNnX#4ekI/T+._&Dni?n;OKOU&D]b^Vy$o524n=NFjcEJ],zOăU"1iRXH/^0Nnscx%rN;A9uqRiZt9MB<XjVxQlOf'rkC,B+I9;/Vri$Ri$TaTs,=*WăU"45R.(phmYr6TfRU_l4wrn+m5>4E<lxtlBl;ni&EQ&'eg4Gr3h#wwCs2DtK6>^saăU"+,=4Ju&yLf*#.oSL-e*L&?ej?$Dj;9>a1lrwiHLKr*$l(o]E(>V1[ZT+u:-pA]wăU"G3un)O,,NwS$<6_j[GxLNQhGbhS>[6yhUI-g6xd-?AS.5]5wpbvIAzGda#>wa77ăU"v4,[YvIF?kFIOV/zG<,V=67K>K1#&K;WSW9o(QKl(j^12H7qs[$_8G[SfBr,jgKăU"s#W+2Q4Q;H;J/ZDl[>nNC^tadiRKEZ[4Ty^%_gzqSR_Tm)jO_-g';HMnWgCC_8MăU"MXbg$t>epT490$hfCM4ENH4*)0(tBt[A2sotsgj4j^jm)AA,1ch>t79HKt/WkvTăU"^MrhEr\i$=^x6vKgtwek6d/^O,RGDZ:^8-Puh&eMYvpbmAs6,LTUn6QV6l_ul*DăU"8dSsL[8hvG,Sqb8&gk#of\q\u9PbUGtibtYu#M_A<$Sim#T-&?5W?uB?#mw*u%ZăU"1aU3BTZrM(_j1=yxol=Dxr\QBAr1r+I^rLT,'AeB3W>VPn[fHD#lN-mR/?oD?E/ăU"Ge(Tt:w%2AIJ?[n)jBHoF><evu8tkv-g$Xy/Ez42U9q'lJNLZ+hd_*[YQek[lG$ăU"h89bT#'XcfcI2(NE$7m#sgC8.;9UAr(LiuuoMs27m3?x=idN<ICgT<cthVfNxeUăU"uy6BcgOS]:QbfE&Yw5XDn_=A;QPbeE)5HTgx$f0+oeRD9IpjUNcDI<+O/7z+#A$ăU"S[cvdwh9bF^B'd.b?x?.p=Dv+nf)YdSbMcPl6uBwco.#0J-j5ADE(XF7^gvT6uuăU"'tT]+R=bY9LS-Yt^+1G1R;P(G5(ksdf$nEp5mM/M^uP6k_fdIr2i.RMbdDWEAJ<ăU"-x>p\gJpV'p$4[s-ixP\d>%KFiN&-7oi[SeAo^]IDm0ty(aE56.HkqeA7Md8hivăU"KSNf9V.LI#FHMtS3JUMNU?p>MpSbvu,ZXj/ZXu4ue.=PXxqNd3krm\EvqctPSwNăU"iD5at_Jsg?HGbEa3+P-0:Wbp#],jT'WbYd;J<Y#0A2T%q$2R7m7p=rBYqqO4RBwăU"&T*5DSZrB5YfxI9u8H^wI&s^B??33b$\H^CwHVD\lq9PpnN<?<Ssdsa.A)/f)uNăU"w;D+<7>ueCJxFCsoUK/st=Yfoz5*iHrkbZB[2v;L-):I]/8+$C1ScP1C3=+c0A-ăU"QjZbVe^dKo\/^eb.0YxyRiH6k=Iu:,dDaIuuqZL#^4MrXVSOAA>*M7OWbjXJZkeăU"JR2V^maGG-AT?jV%xqq4nf2nmfo)Rm2.kseZ(cGl,efMsE3VivZ>JmaKQftbJouăU"uB(hL?n%o].Yy'rM*c#;Y&+127%uR[./^\_fn8>gdmV[A=TL]'wb?&dCHQHRa>XăU"lh-kKm*iR,4emSoqcG675/eu&0pYHm]*ZR,4[DThubRQh64yF5CBLl4npcIsq-<ăU"$DcPGqZxi'1zK9lI_KI5wS93UYKQ^hx_\O[,MDQ5,:3D;+(e.(Rx&:c7tqa*llwăU"meqSK5'i#cl$m89ld<p[3^AiN,ZmUNGD1_%sC+3ddWQ8+Rdg-ZDjZhYp<9rL7E4ăU":&Pe$TxQ$rJcrcQPYq8Ak_a78c4?t2/p9$wxiE>kZckE#PDmw20?=Dx*xGh.b.%ăU"sI3Id/-n?-E][$gI^fubv$LwgE?I';#>mYX8v/bpMVucf>^Ex\kLIE+;AWAOeG0ăU"2kL.kF1&LFaBf+Vv0Al+jZ<*hePioKz;g8J%JTI:^T#UEi_*4o\)jsmm/JgBt5qăU")yzIMQb'PjRu>VZqMyCyhuq+s9]9e3bNAMj5:UKMlsN>DBYSO>']u.90iWEE\KjăU"W'+aV/eLX;/JBQtRYQMn&J:bRCKGSN:46hk/]3G36Qh&NI'X#2o,Akx1=dA]n8#ăU"EP5m,_[e2;#L:jm_YQ(h\riLpIJLUA.f*KPx2PQ1lYPHZKl$34vXk3V.Ffl,X8#ăU"M\/uS$u6wc5xwkpUOm3UAV>gdN6wjGA0fZ^xVO.N9w'THnbaBmX1q:6)k8&isu<ăU",/'L6\AX*]80K-suAc31M#&Ryu'VzLNLFxm$8Bm%c)cjVhkUecBWv4wi*[dVZ1AăU"??>Ie^1bnC2bn[j[s:<Y\fK0\[Ye8GUp/sp8mmmhig\/6tmb5TxL^+6Z4vUgjIZăU"l^+;8uxqRl3#^makL5SMEh8k08OMEd)k:046;FcNA5z9fN,r/6PG04(Q$_NjBC+ăU"Asg-8g=_%iJHCcGYnZMsJRr#Nv[(4*)GiNf\.XYtN46swXD'#C\NVj.=Lu4f:-găU"Rv:+kQ^F*l1]f$l(QR?V\x&fXFw^npaGoe?j\#t?xuHVb_,zK,k&HLI5],29,-VăU"UDGUU3gLd^tT-O)%Ah[U0W)5%saLCQH<5tB>fcp7#s?&XkVhH/0PwW;X5U.&kCFăU"WvTN=o;zqQj[9Jy\NCQv$VF1#pCMr?Ux:*n:DB/<2V1,zewqQiVS+8iU<)A%J;PăU"u<lnrQgoAIC^1?Zn1,w=OWc4FOdJ7NXT.a_kiD\ef#<V9*uA?kfd57l?>sDjLJ2ăU"3P(JK],lPb$Y8\*wl%1bRtDr:jbO/iBqE.h[_$^2/'DUReZ)4K8sI<xtHCIhXoTăU";l42RP2g%n,_28H)$032/RmtP>&-S6lr0#Zt=^IR>2BH0_Q7rL'4Mn)U#[KN_ZnăU"gu8XEDpU//H<kKt<6P'L2.u/y(Z$[DBI9rtbpNXi13';C%7D9(7q:;8M&.owvm[ăU"<(3FmIg3iB>-4<RNT22LbXr;(J:T=S8rJg$e(A#/tQ_[Tgd&f:CXrCj.(X?$)IQăU"gUcHdVd[2YX4x\tbJW5ttY*L6:FXGgG*L?UT%#=P%V*h=K;WR%kf?Pe>(RW8j\6ăU"OO6THq2f1ofn;VMT(s>DGVd7fvS$A/cKk3bUC,C5Yn_<yQj>Ki&*XPptnH8ouN<ăU"uiJN\A[]Mk98fXcwXD4Eo.cj\]=7Aq227)o-_#4*2Yr3GEMJm.i(7o^0Ro7Y3%KăU"9V%>0n/EfGxQN)LKfwdNe85d1tNpni=Dno9sEwZde?j(?&TX'fB0OS<^$sMDEbBăU"0aSg^q#?aBba[[L:-Sa'6)Esixw\\vNjNI6W*DW't0)Op*%(Pj[05[8DFiSx]UnăU"Mg5;d^CEzAlU_3D<-0bFG^5It8HmYd$DFORhd2]7=k(65Y;1'F=E64Peb:B:&rXăU"NCYZ*X4D0;We3;+6[5uhxMMEf25RrdQ)7<cVsk4YH%_sHiO,z9nd$H\pucAqve7ăU"[MV1B&Yzbq\iEgU3FH\3TEM5J&n[e[p]WnIK-9C-FN=n/_i(^?VfdrslCF]?S?căU"75;09eECVQZ_o1:/CGy1&G758.eQzorq^lE)^N]<qcI+5;BpMZW05iS>+9<IjJ[ăU"Cvq&VxplFCsf9tYie_3s;43-(1ynG3])iJecm3-3fYMG4D2DAM1p+Si<;^S$GbWăU"M('V2d;P32%88U>,#x11=GQqKn^zK6^_a%j6*TdQU0%33C=+1SnTa\*K7qBCpbDăU"VO*2Su6TU1P8D(d9PMqRQBqWH0/3b8.[)*9ZJaq/g9VmS#O>ZI,NoB\0/f*g1O)ăU"$DY:(YC7rn'AiU'#\hX%-ZRm\GnNlf\7U6DUhbaBwyw'M[SZjM]xZ&FXW=y*OymăU",JWcE7)EH/tXkG\;NT9Kg7K:5ldG:?B=^^->I3rL$FJ=j6ii5xS/G\=k[CN2gGVăU"eq2ZIN%iIS/c&_(Vv*)Pa'd%HM)'R,Kw0*Gl<Md.?R;?(_:x1]n5+-&c18aP.9CăU"\2z':Ea[Zlin//;liTuG0N_-vSWjUtV,.^p#D&r;,:]?7Dj'[%i'W(lHS_:83g,ăU"+[O*5VjtqLvw%CG&gUiq:O4i3[2KFP]qa%DK7.;0yZB[MNph:^S[eJCzQ&4Jib]ăU"%.#<_p6\BNN^nEY=8:QGXYpZEBhAjiJ%das]76:_d2bxaj#_nd*r_i/t1(9,UNjăU",W4lfEX#bC0eJoq%)FUgJEMC]+RYuJuK7WMy8h%b64=&9mnNC;-9OEnlpu2AlY7ăU"J)ESB4-MQZYmh4KaA^_[a%vFCio#NM-[c'(f,7S*/i1Cu]>iA9aCPIGxiU7kVa)ăU"KGzya8#,+;9J^xzK:5Ion8OPKqyS$))s$lv#R2(\fM0Vcd^u9<9/U&kk&W#8d-iăU"d/B2Gnlo0'oOLES_(F+/>W1DvdK8#gcQb=o;=gT(Z_c5T3'Dzi[RKO=r*Fr+cX$ăU"1yja:9XdkZM<I.$O1_$C%h)q)g>/m*dowMtpbgg5PM]H$XX[Jsa<au8?)qt%)1&ăU"S>-*AdT\N%p#5(6Cac1=gpJqS-:++FK>$JC2MkAs]n;(oTGod3PJy7Cxm/VK>.9ăU"49TP^Ev,P>SAQ(Wfkf1.Vq>VY3gx[fryO5&4xyJjbSI0=$[35w%*LH1Gk0=-h#6ăU"O^Ke&R>&xqF+F=(=fk/)0lHG(ns&,],)$)6YQSV;02mYAL0*e3<^z3wkMah/.3)ăU"P$F5K'FF&05/i.b15TEqNVq6?c;+$VFW[H9NQ>=BSz?t\NCFbB1]BYk[sBXU4nEăU"EW-t%cdk5VvJ71S'^ruDTfFC+k/S^['.=X1<DkG(n[m-)C&%DEkc94n.Gp$Gr,JăU"XBSOmoDy6hiV6*Qcs>71+'=%W6'>nws(h,D45=^4IFO#.%'eY+1JfS:$p40cgd=ăU"tpbW8A5gt=V74+pP9;D'eefMe,c+RYGiac\g5&M5:AB^a#B:*.0Av(SxR1LJXRzăU"U^[Qk$38h\EW=#\*4w+A%.CP/qOXlIR(x^%^vUY?5bJDVo%).fK41?x%$ZAGUP3ăU"f_F4v6.:4WL-WZ&T]5r=VnAZck4X++.O8';%hLJrhK7GUQ;4[b^Z;wH1c>Qsk[ZăU"uboOr](GSYiAO$pM95Q2+s#m59Ln\M<)g9>70YTT\]CsXR+l[d5Q.Qm=g0^:FhHăU"v7dhnc;k.W'7,o[n*dKxiFg16m>bFVf.e4no8w]i?PIJc4E=lhd(\dm%'aYaDV4ăU"w0lS,lBu3A0h*;Ft#N6hZ>O9KOo>,;BcM]B+5W2tKD;X\qka^B'4Q&u&Wn_YC(TăEND SUBăSUB V5ăU"34QC,)JWL\(%RqNLzf?t_9)=S,q;mJW:>3LUCW5TEYRU3.Ws972ZyNzk?IF'TJ2ăU"-1$1h0^iX'#D_vb9)ETRDT6,=C^^iDfZtP8lS/6/mn/dEH7LiA(bVeR#zWC&'U$ăU"5WJs1-3E3=UAf^NQ#41(t4Mf:Nca=:NV-N65L(PiPM0,9'B3y?f/rI,yDc]shH)ăU"8>_Q:%$X;wg:8^:ajC%%i:Amjw6.rgFVO8;?7p:%miVU;0]XYVb04a=O3QAWPO\ăU"IEw%-H>IZBo+r^1LF=2#;EmC1Y73\+Sw;j$T;cr=)mc+ET%qgIxqsB[aZcF^A];ăU"i&_^C>M1N%-ja=jMG7a-eU>VeellCAFT*XODGm=U,kJNTU[G*Y+L1du\sOCipKXăU")f:&??CSZ[Lh:adi=g.UY1-k&=XD%rx^YX7)tr,zI;R.(WmLw/ssUqvlrco6](3ăU"+cVn58%Z$l1(H6%lL\9n?.J55B#,'h13.;JJhXSd8g3F1SR%28c?RREk:_xOZ9kăU"5aKkWZ_0.l/2n)CU^1Ic>C3O6()]cUz7ZjBldFkg0j?,YZ;2Y5E&Pn(+J)vp-TSăU"AMsqcug*:boL7-'?Qpd+xAcI89%$#Eh;I2?w(>>7n*ST#HWblA1O'duoNf/O<Y_ăU"eeHfBQwNel8lv'FqI\tUd(I(lV;7T9m_JiUoTAm>j?43cPqJ?'n:wY\E;j-f8GQăU"*=XPUSET\^/j:eJb2mDn7TuC)?W=&(W>]h1oBH'b_G_^1[*$U4XdA/K3.(me)**ăU"KI9'\41QY(>dJoZ4TgUKKz2pYR.g;c]gAp7.b8q=WMu?8OQ.gTPsFDNv[?aQgo(ăU"Z7B-JO//rqkg&GQ?R77.N)2<o;W%OP5L<(UytpssO'78&%_44$TA14,v2V#W=aiăU"<Mo?=reJZ3;Eh_]nL6YToH2]m.'WHn>)^0RiC95(NcnVT;3Y>CL0o<f=R%]o/4TăU"dl1%_IEffV4%ZwA6v^u])O2gAJ&BO8o)+j%e0_Y>N*5=ik9Y=9?ESkH:t;B-hkOăU"$Piebd#K3+HcT=3^F/anPT%(K7*FBc+nXGeAO.QKRZd7.4d(Uh/.Xr((gMlI7AlăU"aCg70QAE7Sn2I&AOR16C(oSb3S0r&9WAc_Ml3/SI%N$l.?x9eY7XDieG:3tLba*ăU"$bXR7P&76'D9F=pyIgMT>Z&BLp;TRALkTn/\DpoXj0Lc8/bF]h=)&:Tv^c\n'+QăU"u]Yolvd+%]NjVW.Wwb0J-gf5O\z5CGozP4;_k^)sd*Y$gG*jo1sM/gr_HcJ#owRăU"$:U9U\]5The-9(RA272[>-'H\%NO2Dq)l+2o0%8WShfs$bix%7?\Ubr+SbQQj]qăU"Dq*r$fL0=<4Q01#U+:EYS$c#DYAp_*O)k(B0=DezBR%J,s\n;RccXI63yQIvJW^ăU"EajiKIz]$iv0rlu=f-BS+f-/bvEm1JEK]u#ciX79k?T\b=Vo\Wke&w*8QXNf0YWăU"LXS[J(=)>L081+C\_3H*Q44?w1TGG^JMd+*=N*<zS=VFPF'[4qyUH\3*+F:r,ubăU":-*fJR_WL;/:oscY\/0HoC2<Y\ZE&YgjHb$NRBDTuN;.mK-j;%g9hB(G9:eSTpQăU"ejE)X1yFgL2Yz\]H<k;\-8of:=*,Ss8v$&P')pIoq[pRZ]+goi_&-/,[i;I0i04ăU"7sT5XaT+]*z9>e0LB(pIM7*Bpkn\+jOCcG#b/uJB:^6-j=)K%G7DL#&myU3gCe*ăU"2VycTACs<qaG:F[#\a1^?9:]U,C6QroOPAT)c01nL8w(3)<oKQU.:5Ray2d9#TgăU"rc0tCqnKJTA]hq-CU^;D<e*$wJO?\P]CF;y%t#7XB.I+W_rh-R15W9E-Nt0RCmQăU"S0OqT$SVKR+6s?gsx(%up()%9%%%#-%r6#FHD_?0>$F%%%%e%%%,%%%%js&%SrfăU"1uDJ,q*dPKio>HXFI?9\-*>S;#iv5t=mh6ochK[6QpWJ>,YK))XvMmBlGhHhDJ5ăU"bJkbl,XH3'iTk6hJs3EihL%YW[FNrH9ICk%s-3:ZawD*Hj4J4jH(iBZQUl%mc=WăU"Qwi_So%86OcW--M-m--cWWcH>Kvu(.'(R'm((vv_Lnbl?jj?T#bbbnNkGIH=dlnăU"4%13.2%0022%.3/1uilnotK[ZgloapdnR,p^paGYsuAV<lM(O.?/Gy;gA1wo9%_ăU"MMQ%ONRP%PRN;lm$X*_$pfwZHmL=A^CbAhBBNu?Q\Bx#FienDGGaMQeg].H4B8GăU"u?v*#IxtaXsh3rbsl'phX^X6B-tORLgLv*0Y=X7BuPR>NuF<DD%TMYG%_KSc%NJăU"RX%#GMO.SSIvM_fl$&i9D:s;eh\Kr)nM>?X^Cq]ZDv+,'4nGU4fL0a/m1jxp,qIăU"5CHO#leK]i#20tuw640hl=+8bEn/HrNzP'Y,8bCut'D<T#CWM/PF06RvVjX%E%_ăU"M[QQQAG&JlU4+sIbq#Nq9djn&+O*9dVQ1pkltlh[Uh$Bj$*G,aiL_#S?q6OX5YMăU"nkte.S-1Y?wuTd0<N2tCrCNKdsF+aC3bj'o2-/L2^[X(tIs:u]$$$'^%cF[KGIYăU">h$\l74etR_vj\'lX1#\,uLRFVPa1FG^AIZaW6N$a+Hr#axGg1PbL\:S&SxAuZuăU"2,jdxK_iEhnHem$NZ$[tPPt=W2hucwMTBPdMS)%_1#uAGBFlBGscRHguLtm343păU"]z]'PYQcQL$Fd48O8k_m3CY*YsD$SsUuws1Zq.a>No$XCdlcLlcMxL_vN_l?l2lăU"<LT.BAJU/mI4dlv69=J;-=X,+WOXK7HhSFB6,F$;itF^k^(pfSh55Mju(e(xO6PăU"',8ayuC$C<mpf]]fhN^:M;ac$G'vEM^dKY^l<^/vsn^YJw[d4#0lD[a'&7APG%GăU"Lf)IIDI9o1/+y7%i1N?hY]Aga6n6UXVyh5.o8SQuovjaOqkZMhe4JY801MadXHaăU"XlsarfBkbXLxN\xnM=cxDz;iOt8$(6&:D0$V#t?<$H)nvI(7cQi>eS4G.d#CKbaăU"Vw:x_iT34^_6d$+n;TgrLHr2nWCiXtluo=DX>skZqo]FCdk_B73'1(mTYqJ5#jXăU"nZBBBX^.O4krnKecFgqPSW8/Y>'UyL5rDB+\ZL'HlB.Dw?<Zquu2MyY<rq>7_urăU"_=BEhNaLoo'jfoul#?%LIKKaK=H_O*tHHUaC2J^pTt_VNP6-m,_fShTmMpd3*/băU"k&iNOIH)kv2zhn>uqh:viP.Lni8.LnTn\XMup<b,ZYxgLXpx9^PZ#XZs&58H8blăU"p.>Nn+v6w^zer8BE*2,/isq1NMljj<z:IdTUo-qi]-lxM^IivX>7is.m(K7c#a3ăU"q&>_kZq8xOv9^ZM^Z\Xp1V\<Nok>*/e4:7WmJp,sJ5[1]4VQV92JgLRI]=<O1YqăU",[Mg%io8:uxKrDRN-g[zL3qnv4Lh/3C+1i&D=:G),<bZkTQl9l=45vp$=H404dWăU"3Q31u/kA^Iw;GG*_l>2cNnzU*'ubs%>xbTUTP='V\&5#6][%TYH;QpEL0thyKRgăU"tCTrwIH=Y^.Tw.5bBSXh)v^f&gR$p97f'<P6\ddPu#e[E1t1ML?7rsPXHxhMZubăU"ut6d0,DeJcbislqQQDg7onr/Nhomr$uFM*F,+$VTu]tYAAA5W)_EqN5N#[q'1>aăU"1,\Ms9=p(1o+Au7%&uE#/5(SivLNc?ErD\fgcK[l&K&g&rHHgYRu58>K[r7WC=WăU"U;dIInn_K[[787YGfJ60:C9Qn?REg,[$=0)YHd?Sc[%+d\p%?9(EaNdkZwr;dPjăU"G=mcm6-SMm$M?eOimT,_wJ./H\=^mxpw:A0vwz2stvF=g?#i%g-&cJw&mad-K(QăU"GrLrb;QkMQ4=r0*,]il/o7^jf9pdw)rlF3p/'/OM'):D<=,o<gce?L+r5An?l&4ăU"OpI.-X[q4YGGuFDDF(fUos2W\Y-26DRGSRY1h1iL*xH.B49+9$i(8U%?deSdyxNăU"7V^,Yy[rpD1K4/DK&jdQAKF,%C&cY%OS>*#gc/c,a[GNduESQ?i)I5[VlD(/vCuăU"uV$Q9sA-,&6fe)KtTfn+NO&cFLfc#WM1<:c?R>?Ekh>[^K*8M86?K<Td%YOcJRbăU"$8wWM5NVBr5g9(/3;:%>CKZXGfJ,_\Pl%EKXFa':fJEp9KpV0pdkcnB3R$'WHTdăU"&wZK3Ki.3.>s(?lW\Vk>NXBT]SQH\a*LB/pD;dZDunnn.WNd^t#5gs%(oAwG.*<ăU"pI)G$)\/SlelV1b0w:(gZ*lFxsY=,]XXS/D[F_V/BelLoL=Eq=o1Xf=8D<pPtxrăU"XoiQYs-eQtakc3Q?_eete_?sBSO/p,_NgO.XKD<=Aa$0(b_)9Ar4Da8Q$c:^5PIăU"ZDn_/'VNk4?O.NVz2V>_KFCNcsaTeXmNIV(qjvr0JhXx(ru>^NnZF&flVllf<#RăU"r2Dg5Q\>J1s%5\)ow5d]to8=T&j.;z1&aJT'iP+N9Ihc)qfnZ^oM.Lg^ulGWIe0ăU"*XTj,KV=0^HKp4XMYNmhD&3(K2*6FtM>>F&D6JPS1u&2P4h*--\*E**\cf%gR)MăU"3nUcL[?[pVi\JYwO-'+1pH^TLD7jLe:F3>q]vNpPjv&>uiQkcxq%ky'x&<,v(DAăU"v4ICMOSuiEcy/*S8V%$'w5l,m3/mp<\t=pB=e/+]M7BZk$R[NN0f>7hGcU7P7smăU"nh^vVT%(<iWFLO^F45mnaU0smpruYS?,%941%3223s1mpn)_SK/(&uuI%<;zgLmăU"?/O08D>kEW-3fJ?[+P(Te6S#45wLR(Rg2CIoGs;RNU;gu.pCi6V65O(aIh/HuMhăU"dplFXc9IUHQIYo_-IWopVwx-d%9WII#Le)s[%VF9IDi778AM[[Q8PhXLA4V._/wăU"Iv$qGkWXu>$,F.GP&:BUV5E3-Ss>.XUSBiHHr7]H<9LhNF6:,<*;+)55PCm3=0%ăU"y/.3.3/qV[u/u>G20lA_2$0Mf\LmAS5M3sB]oqWFXqc-eIvKqA_<^^Avc'nJex'ăU")t(TMOoNpqJBJV^r%HHhhGL6b,=B&F3('mLJ.mqY-+4#*yFzZl4Mw&oCZZnJVe&ăU"ye57NNHxuY7[utaIiM18HW\5(XOunAtH(>pkt,%&d[[%ccVV%cs7kpFQWgt]/_săU"YiC+1's&7hgGzwaSwM]8#H-A)LJwGul0$/W<r1\8AbXW_EFmXMjUnW-r5(ZY.VdăU"_=UC\)jc<9HK+\i88&b]8IM13G?7%)-['OzHGB;+EP&cI-9FI=ibAW-Ae%1opm2ăU"77']J9bS+HW2XGQTC_3#k(90ur,=ZovBH>mKcHAIR9G$scY:uu]]MMJsC70tw80ăU",W&x7u^gi+R%74f&d8OwY;PTBdfFd?V,6DFX%PL\4f*Hfp'6IFe7i*]-8x+\fh1ăU"I%W5ZKY?g+mmwSp6^LM99IIsoH=qQaA/.5&4'%L*_bdV$msk#9IKW&<J'R%Jz3SăU"(\xMDdWW#FHEDTKgv++EuH]$IbD>+<0<H'-c#lK=XL,l_2By9#L)M?3$EOtHTEqăU"Dh)hkADXBcd=)>8eg%MRK\;(qK93U3ax;/-qCO&Edb2ff.u0AA=_.RZs?9*(J0găU"9WK92D)IKCcOl.=U\N\l./FnKm6MY9IX,]W_^bxkXJpwig]e?L_Rnb)\k)/2G?jăU"yn5*,18s)f:2*H4zJDr<,JLh22RhbmuMmbT*^Ts+Fhs43^f_<a=CW**GL,I6F(TăU"Td^%ZX$Lq6MGu%^Xb^X[UX29iFDa[JE(p9Q1^#\aSO:J&&%#Mji*)?TSS$Gg#_)ăU"5jcyP0Ci?Ej#]5$B]<;fcC\Z.Wn\F<FBYB]%\_c^[b$\8tO,AxXRi(Z\BXx\i=>ăU"<%-.ine_%5K)R.3GZXpCCz%u\Y/J?l6&Lt>..Bx%s.[tdy#h^ep^l=HaQLw*4DjăU"R=R#<TSnfuQvq=uMEU;Q[[akf^JB_;6v?lR+9X%(gK-%#L$LV).%e^(/IHX^\$,ăU"eLV3KK2CG35cGLQN1i8#vD$H?;B0we,iVG-9gLv6_K_<feMf&]lZ^^^TQ2bX$bPăU"Ws>JV\$ON\U%)/%3=?_i*$Y<8_[=Q8C7#MEIA9+1O0J-MPyz5cT;[YH1B_I/FP'ăU"fl.q(Q%cHxL,N*g)jh=B1IM,:DLxE.44s'T[Q8'ljRfl6uv<)X>hRr*hK^KJuCkăU"[U?UMQU3A>:f.jz\xsxPIM(g:,Y%WBI*hjnTYpFBY7T;&izmZ^qd?[uEIP'a9:&ăU"1%iN1w'Oxoqg:>WQ:>N]Yc8L&B0pP?qid\qA-(6M+-iRKw+Jh#h?v'+gbEz9LALăU"1.*tCw^1?&>D(JR.)PNQScEK%4ETh&;FyZ0/sP$^iEiy?YL8HJ7MCAE#Zr^SjY\ăU"F&<L^**j;>-&SEKO+ptR/O_>5*HS)uhv80bEH-k-:.l\_'W)A](3e]=%+b>O.N:ăU"a[osZK]?+yE=RYE^2\rFsS''&q>=heugff6tJ000-4l;)#QTeO0<(LQt5SN]O5aăU"7#bW'kh(Pz'S[WH&9t.XQQ]U%&D\E*Y,%O<#Gg]p:dHaeRSIDCjiV*IrIqBJpV6ăU"w:J^s,thoWW=5-A,)(r7E%^yD&&\y6DwPF8)N\QEZ0SzCTXMVj95%qmr7)+&39eăU"#B'hZ')t;(>Qj&xx:*yhBu)YXguf8xi4vGV4nV,t42*>-SBl0kV5_#Jv*R)[t$wăU"vJWFepT.L6M22T<G9]?873Qlm<QS\*u0OQPN$8.%hfR6&&[Dl)5#9Z(7WGi4F?qăU"ZjaL6Jktn]se9goEsz:M-:Q--Qah2<R$e<vTsLbE+3u2^mI%#YY>%8+M(inhn1-ăU"g;qto221n_P0D,EmwBdD?TKZ8MJt>xi\PvH.M?vnPTe.cNsQqZ/>_JL2qdXm1<RăU"h(o2DHm)+Xv8Z'sj)7'<iQ8O#F-^wg<t/4%A?6s.tt^il(jxRPT^fO6XVNTui8văU"oR#MqK-mZb1jeiv?[F%y-R(Q%H4m;WknK69SeN6oq-q$P/&OSYY8Ow)lD?Jj]AeăU"ELv0$;&)?wVt4plSxvHpXfO9[PxxguOcMZ%dtI)J8,(4K^W&E7)xZmLcx0<28i6ăU"dhyO_'l/PZ0s-ZJtM:KcESjrAZxZab3;bOTnnc70<]>i*E7&ApAz#\\1FZO:1F/ăU",2XeZ0?li#jP-(=)LN#(\]J[5FcsjSq1/gUq,>387J8e4L(BuD]Eiu\NYHplopYăU"9eIkK(O_wWBg,0PS8t6hBBLvBn?r/.+:p9)sY$J9>6&,W+ReFg)-SxT#VuFkqxHăU">7D9_6kUS?<eu.FnI='7RRTrM27AE7)muu)*[s.QE#pnI48p'\E/8UCuZohaGa/ăU"xLHXDx=&lthVaP#(<8_=9ia,/7+&/y'#gX8nxPIt6_OFJMIO$Mqm+7:wnOjd,=YăU"sNtXwuq\H8Qws>KS7tu.2g><gIzKhw'2zIUUOT#a(FOI-<we:,m*u:D#z;(wIo;ăU"(pO-+5xrn\&0P1qncur8ws*t>u%YKS8T&^%aMI3QLTNS)U=:JO*x1r/hk<1uqoQăU"9OeYq0BvFMis4x1-%&zaw?u/1&N/y6x$ne?#*i4<YN(IrwQvWb=fNMHO)1/'['&ăU"BZVM9c%Ifp*ucvCtZoT0>-00I8(^]mmsjmofS]/xZ50w.]a+xH\<hjNJ)U.KeL(ăU".,tJhxAfIJ%eMVaTxPs4_Xg'eM*?F:EDYt[,44cpg%KcxkPZZxwt.uxwp8an9D8ăU"=vvt$_*:PC4c\FPY>kAp4]Anmh0\i3o>'_>bg&e5\x;moMETQ<3rfD9\Ht7viwJăU"0X%34'9YncXK].YTbVfFA5E9&ze'lyyofbEdD^ELulX%\i#'qBNK9om<Ss&XfR]ăU"H$bt<t3xXrQ&qx-u$d+oxmKHc*slYIveo9b2RKq7y%gb39.'YFvISJ7WtwA(mwQăU"3t?opp'rtb,'h4*D'ePa-XEw$rUhuxd\T>K(RC9Z\>S0RoIv[ed\&yzP.C\O^JJăU">1kV>jaJ&QO,:HFZ,m]<hw*;Noa,ouV^x<$.xwrmNY8M-(ge9s805aN:v9VpK\<ăU"4.q\rSe,G'rq%e*ng\>Mct<h9.ABL_._g8(#733]9JJsdt]x$hsUxph/E[.T^q^ăU"2ntE-AfK2iy&*6R-amT25oS]0wY+k,Rvs$9pB6RJvtXwHiKq04:[,Q.*mI5bW9*ăU"WN5.Wuto>9EtMd[d^WI6&>J.:p6:TT.^iJ%J%U'PZn>;awiGs:($eL<[)$=4cZXăU"RN/G?7>h98QnKHwRk#+.H(P7vFm4-9V)kf;N_,#:9i.4IOQC:j*4957C2U\kgl'ăU".orj,wpMc0m2[-,iv<cMi(jRDni,ni?bh;9<YB05m>S2I,d027b5E;Y.kMM\N:*ăU"BmSgtTq:wF#$*an^v*/uo'C[L%,Y+mTmhmpEq.S[R4gsIYD^N\S&L2K-T>dU:a9ăU"grN[JON\6^;.-x>9YT9,)m[tl-&_S6=+Fq>CQ7&to43p0LP/BHLBHFnzASBPIJaăU"HNT[V>;Jms4;x5N9j;qIC,Z6dN2$x55cxTLQyH7/K/>'kp[N/7<D8WWqpoK].]băU"QuNK9Gp:t(ucTjR$O,tI#t2/RVn2iZrr9Aclr(c7+Ft7di:-/YZ#7p/_]khznWdăU"6?Mp)nNr>X7ok9/SBcU.?YZiqH<MWk(ZFp9-[EplZvX[qb2&>Rjp7/L->w+&Rd5ăU"jtvKEjao(sORH]D90mXmn\T89?K8YhKu7JsYOVQI-di_^rkT?[r8wOXjpiTXF>găU"RK7PwiA?j2vb0Ub.S.s4F[kXm\oQ>wY7cxKX9qtl?0E1Q7AED?G.K>MF3$ZNvFPăU"N]T]-wws8eanS4%GWMpRQhgLZIG'+,L$K,0T#yB*?6\%T>ljPMZr+-7ueh5rVQ$ăU"rn3)sRJo$+=r#]7\+58bW^8L#idmb2vr&9ua4bjW(Ru&9>Og8H/jiRN<1/)Qb8CăU"tGd=Nw$TE[=3Cc>V[^DO%&1ALD:-<IF/v=W[SWm$^ULM+&x<tjx?(Xl46>V7;K1ăU"n.Sg-$s^3uRt/'FD8q$9UwxF[Wl(qG]c%t6lVSG,sKPgJtP'?S0x4M(usV;ws7QăU"X]a*;=w7lpwg+&*Ny+fXW*Mg%0*)%]Y;=p>h#GGU=5ZJ/a<W0kXPn.%ukOOGIIdăU",l^*chi$Ntt19J5p^>$pwUcf$U+7/mBKtZjD;&gr#Ut3,)d]kWuNjzsVcccdDC&ăU"olnwsiao:ldfhQFW+Nlw)pp.E-[m=Rf[)=0R=Fte^57Py.%bH.c3x_N>=#gfbU(ăU"riL;Smnr'+tKc3Q^SeBiS>E[<+Ri9KAL[rR:_Ce<HOpIw9xXlIoe$cR.iL;ypK&ăU"&nP)93)(+nZj<suf_;%%QTdpA2LG7fUpt0zQ''&OjZ6SAWV6Fya:oq;OUwPuBT?ăU"r.;je.[jHu2VPHmNzXQjHZWl<fgE7$*>u9:3U:d'wP$pA(+L-?gO7bM7:6oJCifăU"DqI/+JKVl38gVRf\'Y8,)=dWc:IPcn&Dwq.f^fU/zfEpKTUyI)T.z6]%>8)3cTFăU"kIr7Gw/Ky,zd[q[QOPPbd1rK]AUU9eP-nHQAQ#09*9<$73r?3.=nsXskV'Fqd84ăU"'Oz23&[997,bhurfEtLJgKs2hbmsg'W>pUcR8tE_>O:VdtcAc<-iNuiEvLOG;cZăU"K5H8'qu$'&4wsRw3mdf9V5uCo)Ur?B=n^8MjN(1il.\Zt$LXQ2O0q]iTuP#$odTăU"Tk<kN2,'8;2mj69k)aJ/tb4hrWaUJT2xdn.+sf;'Oe$91(m+*019>.nH3X'<XP_ăU"tD&Xk5$2flNjM5Vqj:OPC%t/CZxe<<hdQcXpgSYKK<Hh.nAekpjBU?_Po15.1crăU"T3en.'=&e6$ZG23j\EB1,ZKIP2&5IwV/*\#[g/wKUO\#VJU$*czrCYk+4w\qV&făU"104)fx#\CuBRKTQdSuTKd+YI4vqoHLR%6'SB_tsET=>lHI[Ze>A\DCr8:89S6o#ăU"q:;>rrR8BJ*Q'UXIlS/u,5]99lLw/xkiuHfmvZge2'FL[TVU5'/_KbY8Jya'lFZăU"cr2TE=rf\3-CnsP'X5P-*w2_b$72^\f%OB1UA%(YJR4P(wq',Dl+jXl%tD&i/%]ăU"<0rHc>r^Gp%tT=32_oT7QAdgYhO*EN&3)ol6_$wQgOU9L#cni1=Rd4).hn,C+$%ăU"[5J*4xXSj(fI888Lr:_Oe(27oCP,x(EBu]5k_dE<^P=#mdY2nG.;hc-Kr69?v/EăU"=.nLfEIA&+y5k0gAGd0l0_B'UI6eAT)E<sbbUBOY8-ZWWfQ>hkc-\?-oAjBg'SbăU"CvE'dCWM9$0YJ2(oZJgLWq-]aNv?;kM/B,eBOfe3mq'#f$>i%-'lVPOH_aplM[qăU"n4N8DcZ%5xx_7IEl/gc<5LrKUMBNJy)vn]os>6pAMo/KywDheu?)BO-./%:OSN[ăU"ZxKW:9O/dO^&jnI\o-u?[BuMnEeIdE^SmU_q/Car=mM^(%lBRO=ToIr_3KLQ<A6ăU"r9hJ>jPUq1<^qFG)%*B=7O6&:-h4dD3Y=:bn11lT-YP:A&-S.]h'<8W8+;60_>_ăU"#nquaEKaj+Kh^;wg,cNMKtTo2>Ujd3;KR-b#s+[*%8E/31o%5?rFq<;Cmbm(-GuăU"QR%5vq,IU,hBUF)pRLiJfJvlV9Jd_2nDxK_ld[s'b+=4n7,^ib*2VC?L6b_k%k&ăU"U,tCAqNq;kAWeR%?p/4eUZ:(R\G,5J$.Gb&9CfwlsrIdVtr,%rZzF[ILzR?z/qZăU"u%-c;S7Yxrx_8iHhHZ?/)e=F7ReSTJkcBm1Uq:\5+5$s(bu9ARz.?[Qk'c0^1pDăU"Y0mfMN:wjIC2z[IJ$kvJ#s(XH#iDI><Z#S<V%*99Hs+AA3$4&l^-k&hhs_]a\W%ăU"t0&*i8CkmNW;IWBZE><ME=Ks^Zch0NzlO_*#F5XtijE8V\XPujkojn4-)\9l/;NăU"&Gl<<KGU^$Shs8]V63IRR^txoQEB7CKO%p&'?s_eF?LNuYW?W1\db&'AZJ&n7PdăU"Q:ZlZ;\r8;P[:ZO$>]9l6?%;-\%eCSX(E>NW09;4ihh$[;\&/<-2eC1oiUP;$#LăU"j]:1gHrEc3)sQCIHkSg<mBTFUTjD1WJK0UTdn+C0<9on+-s,c($o=l;Be#vsCB9ăU"0qFgLBR.vxOGg_MvR<_28-<E6P[3Wb[#)r3x22ZbhToOWFW%4.WBIuQ8]Bf/-=LăU"Zeag;pdN-OG)t_*j3p6SE.))rNeqD,5L5GC;&3h:JVRJiUZ)=/XE;hv+F1;#bC*ăU"NS?5NF^Z6$i+GRvYbEUQJq7j8+fDMz(sZ5G7xzRCp6K';#22OI&Bx(,u)K/fIY'ăU"_h1=TBA2mZr>u3)Aca,^t-myej_LbsK-T:Oe*.Wrk,9BmAs/VQ655.up4/R#Kb#ăU"KLZ5)Tpz*[UaGWFokEKTbTd4tnh1A$?^zvIJI'*svR2r3SQzG<5[*#F#EmwZ*BEăU"F1^'%(bsF0lXe#aQB,(Sx/y%UYb%i&fjTTsNARP,ycwmYeMlt'*Fo+?d1fC-ee4ăU"nw/Geia5''r/mJR1gDS^k_dGl+''#R#I'hJw1l[e)UAbOILUs\BK'r-IkF&a3NmăU",f;d(ezgh+=Q=&Ql%%Wk]d1_i:Vb[ckPuo*KJGoj:cX>*9VC:[W%CH<#:5%*)fLăU"((MeGC,>%QPB&haJF4hh,^D]T>,6E+>5Gwi..RH)MZUk/[W.qB[0;,+?z<RAr'găU"p%4=KPBeM=B$K]qcL:0nIr5rlR4-e>Jd7qT^V<r9b.7=j;#A3_-/)IKR*f>az0kăU"x$7W,VUXRHoFnqsl4QbCfY=TK7K_N_^7MUpzcEYn96>QT%^S%yT+.IR>C8e5?&iăU"ryFP:+#3$#feV<N8b,'_vOt+:Q>SFO^Nb)\$Oj+]/b&;6>_]syQ$h&x(6r:xZg]ăU"sU]i4uJ>)7k&jpxn=jh]_5\s//;y$a/6;SospB,Zh)(bf#Yk=m\%0Da*+'g/-c%ăU"rWjCu-0?JbOy3^ZqwnusiX-&E#.X.tk=+H>yM823AAV.9X&Y8I*Bb*4.js-/QgQăU"N)Qpq3T.KCHrv\]CR2[6o+YS5%F,$-28Uc5'iCsm=dZfcq3??1EvURuO?IKZWJNăU"4/t?=<]Di;YmW;%))eY=)JwBp\2MToO7B9LdP7_m,2v'v34zbkej\iToTNYJw_LăU"4k\;i3RSsF7>E(ix$>m1?pY'lYrof?/ya;r?Xt'sL=Ci-ZD/;wQaCb?GG.Ja'JnăU"T2omH:1-c2W_H[*8y8[p/CWv9BMnMw2zt/IDw9#V%&1+uDXtTKS(PfV:/1YPi_GăU"zI>CS%c)vXY3MKXyelXAA00?2:[MvJ4d,q/?UdTK<Y<,DZv7?m.2Z[93maS*f;1ăU"smHq8fpZODqP_\R[+8*SyAZ-*<ukrN,'6%NT/ZKF4=kTmokBZEOtk?jKh9.A7k3ăU"0sC(M_u+D>Ndu+JRB9*&kXZQ<l_).\J/42SNu.3K-Ta5(DPrK_/48OTSNB672*jăU"JR'2[Sy14_pAXPDRixLS\x]Bh#<d?c%2sc<3NpG[er3O&f5tIy_3U^)?3*GWJX$ăU"_sjq?E(T4cEJ&5(q;uWA$_JGHS4TRmQc*6*;_NE/#1&BlYlC5wq]>S]7Gzck-(%ăU"701.T9p(gdSANl?8hF^5uQM*xSJS(nOtM;;4BdTaUVUCx-A$+4^PGmj=&TSZgwuăU"V;*liqq^e(+2$]i^Hiim-z]kK>8,zY%/[4i,j,%Y;'VYT.hd+QA?YLVQ=>BRVDfăU"mFmReN2mPUtd&LmOl7(UX.;P.;MbHcY<k8,aAmqS84j]iT%45^sPeVr20iKdUmkăU"8HJI?(D%LG.?_8&'qk4_W+4TK*uSg9CK+XrJZw[]#Ba1^h5Z>+oaHh'sYiCEYIKăEND SUBăSUB V6ăU"D<KY0NFuNwaQPl[_Dui7MueeuYJa3'u'(;\IB%H2&-_SFu1gl3Mh$t=,:[V'D1\ăU"]lhHrRh(xoq4&c89ARA?C)d^oEto<h]n2QooeKdCPFm0g<E*4s5>%*C;?pA7W<*ăU"If#C$dTDp?fix(%up&'%9%9%%%%-%(W>FH:tqR:%G+%%'W3%%%1%%%%%%%%%&%EăU"%%%%%%%%%fx%rgzr%uXSg%fxup%&'9%%9%%%#-%F>dFHah8ihF*7%%o2%%%/%%%ăU"%%%%%%&%%E%%%%q+%%%fxrj(s%Sg%fxup%&'9%%9%%%#-%*>dFHe>VbjVe[%%,săU"%%%-%%%%%%%%%%%%E%%%%f1%%%gzru%Srfu%up&'%9%9%%%%-%(r6FHpD_0>'$FăU"%%%%e%%%,%%%%%%%%%%%E%#%%ir%%%js&%Srf%uup*%+%%%%%)%)+%V%%7%u>%%ăU"%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăCLOSE:IF S=117AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSeppo Vuolteenaho              AN OPTIMIZED BUMP MAP          seppo@geocities.com            10-04-97 (17:46)       PB                     631  15940    ABA_BUMP.BAS'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'ă'	A bump map.ă'	You should like it.ă'ă'ă'ă'   Original code: Danny Beardsley (QuickBasic version)ă'                  dsb@cyberdude.comă'                  http://www.dnai.com/~beardsă'                  It was called "ANIBUMP.BAS" in some ABC packet.ă'                  And it was very nice indeed...ă'ă'   Optimized and modified by:ă'                  Seppo Vuolteenaho (aka Abacus of coi)ă'                  seppo@geocities.comă'                  http://hem.passagen.se/abacusă'                  http://hem.passagen.se/coiă'                  Called "ABA_BUMP.BAS"ă'                  And I think it is pretty good!ă'   More:ă'                  Tab size in this source is 4.ă'                    Danny and I worked togetheră'                  to bring out new and faster ways foră'                  this bump map. He helped me to solveă'                  some problems with the the asm.ă'ă'ă'   Wishlist:ă'     - Even faster routine. (Yes, of course it is possible)ă'     - Lots of snow this winter.ă'     - More colors! Not only one shade, but eight (or more)ă'       Blue, green, red, yellow, grey, and.. well, anything!ă'       It is quite simple, but I haven't bothered to do it yet.ă'     - Some credits from coder to another (as I am giving Danny) ifă'       you use this anywhere, or get inspired to do anything similiar,ă'       or just because you like this code and wish you could doă'       something like this :)ă'     - That you e-mail me (and Danny too) newer versions you make!ă'		(After all, I gave you this code.)ă'ă'     - ­Let inphormation be phree!ă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă	$DIM		ALLă	$CPU		80386ă    $OPTIMIZE	SPEEDă    ' No error handling needed, sinceă    ' it shouldn't do anything weird.ă    ' (The code was created with error all onă    '  ON, but was later changed, for more speed)ă    $ERROR		ALL ONă    $LIB		ALL OFFă    $STATICă    $STRING		1ă    $STACK		3000ăă    '$COMPILE	EXEăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă	' My main idea for speedup is to decrease theă    ' resolution to 160x200 pixels.ă	' This constant here will compile the codeă	' in two different ways. For slower machinesă	' let it be = 1. If it runs too fast (huh, youă	' can never get too fast!) then set it to = 0ă	' and you'll get higher quality, but slower.ăă	%SkipOnePixel = 0ăă	' Special effect! Try to set it to 1, andă	' watch everything... disappear.ăă	%SinkDown = 0ăăă    ' He he, Danny doesn't know that I amă    ' naming this variable like this... :)ă    ' He had a small trick, that wouldă	' increase the framerate considerably.ă    ' Try it out! (I admit, really smart,ă    '  but it leaves some ugly trails behind)ăă	%DannyCheater = 0ăă    ' You'll get the fastest bump map if youă    ' enable the both constants, %SkipOnePixelă    ' and %DannyCheaterăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă	DEFINT A-Zăă    DECLARE SUB Bumpize ()ă	DECLARE SUB FadeOutPic ()ă    DECLARE SUB PreCalculate ()ă	DECLARE SUB LoadLogo (FileName AS STRING)ă	DECLARE SUB SetMCGA ()ă	DECLARE SUB SetPalette ()ă	DECLARE SUB SetText ()ă    DECLARE SUB Soften (BYVAL nTimes)ă	DECLARE SUB WaitRetrace ()ăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă    DIM x AS INTEGERă    DIM y AS INTEGERăă    ' A virtual screen to store the graphicsă    ' we are to draw in the bump map.ă    DIM STATIC pic(31999) AS SHARED INTEGERăă    ' The environment map, 127*127ă    DIM STATIC EnvMap(16129) AS SHARED BYTEă    '                               we use bytes!ă    '                     Danny insists on keeping integers.ăă    ' Some global variables.ăă    DIM PicSeg     AS SHARED WORDă	DIM EnvMapSeg  AS SHARED WORDă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă    ' Do some important light calculations, and setă    ' some global variablesă	PreCalculateăă    ' Load a 64000 byte raw data picture.ă    ' It should be a general image loader thată    ' would automatically detect if it as .GIF,ă    ' .PCX or something.ă    LoadLogo "f:\big_coi.raw"ăă    ' Add some bumps to the image.ă    Bumpizeăă    ' Soften, so it'll look really nice.ă    ' Uncomment too see how garbled it looksă    ' without this. (Or try a lower value as parameter)ă    Soften 3ăă    ' Finally set the graphics modeă    SetMCGAăă    ' And a nice palette for our bumpsă    SetPaletteăă    DIM LightPosX AS INTEGER, LightPosY AS INTEGERă    DIM ym AS INTEGER, lx AS INTEGERă    DIM yd AS INTEGER, ly AS INTEGERă    DIM nx AS INTEGER, ny AS INTEGERă    DIM i  AS INTEGERăă    'ă    ' Main loopă    'ă    DOă    	' FOR i=1 TO 360*3ă        ! Mov    i, 1ă        ForLoopWith_i:ăă		WaitRetraceăă        ' The path for the traversing light is a circle.ă        'ă        LightPosX = COS( 7*i*3.1416/180 )*77+160ă        LightPosY = SIN( 11*i*3.1416/180 )*40+100ăă	    ' Commentned lines tell what we areă        ' doing in our asm code:ă        ym = 0ă        ly = -LightPosYăă        'FOR y = 0 TO 199ă        ! Mov    SI, 199ă		ForLoopSI:ăă            lx = -LightPosXă            yd = ymăă        $IF %SkipOnePixelă        ' Only render halv of the pixels horizontally.ă        ' Better for slow machines.ă        	! Mov   DI, 159ă		$ELSEă        ' Every pixel is rendered. Should be OKă        ' with faster machines. Gives better quality.ă        ' (Personally I like the other onne a bit more)ă			! Mov   DI, 319ă		$ENDIFăă	    ' Our inner loop This is the place that shouldă        ' be optimized.ă			ForLoopDI:ă            ' Read a pixel from the picture andă			' calculate with one pixel below andă            ' one to the right.ăă            	'DEF SEG=picSegă        	    'c=PEEK(yd)-125ă    	        'ny=PEEK(yd+320)-c-lyă	            'nx=PEEK(yd+1)-c-lxă				! Mov	ES, picSegă			  	! Mov	BX, ydăă              	! Xor	DX, DX			; Clear out these registersă			  	! Xor	AX, AXăă			  	! Mov	CL, ES:[BX]ă			  	! Sub	CL, 125ăă			  	! Mov	DL, ES:[BX+320]ă			  	! Mov	AL, ES:[BX+1]ă			  	! Sub	DL, CLă			  	! Sub	AL, CLă				! Sub	DX, lyă				! Sub	AX, lxă				! Mov	ny, DXă            	! Mov	nx, AXăă            $IF %DannyCheateră            ' This is what Danny came up with:ă                ! Mov	AX, nyă                ! cmp	AX, 10ă                ! Jb	skipă                ! Cmp	AX, 249ă                ! ja   skipăă                ! Mov	BX, nxă                ! cmp	BX, 10ă                ! Jb	skipă                ! Cmp	BX, 250ă                ! ja   skipă            $ELSEă			' Almost the original code, now in asm:ă				'IF ny < 0 OR ny>247 THEN ny=1ă            	! Mov	AX, nyă            	! Test	AX, AXă			  	! Jbe	SetNyTo1_001ă				! Cmp	AX, 247ă            	! Jbe	NoNeedToChangeNy001ă            SetNyTo1_001:ă              	! Mov	ny, 1ă            NoNeedToChangeNy001:ăă              ' IF nx < 0 OR nx>247 THEN nx=1ă			  	! Mov	AX, nxă			  	! Test	AX, AXă			  	! Jbe	SetNxTo1_001ă			  	! Cmp	AX, 246ă			  	! Jbe	NoNeedToChangeNx001ă            SetNxTo1_001:ă            	! Mov	nx, 1ă            NoNeedToChangeNx001:ă            $ENDIFăăă				' I guess this part is quite slow?ă                ' And really, I dunno if it is needed at all.ă				'nx = 125-ABS(125-nx)ă                'ny = 126-ABS(126-ny)ă			  	! Mov	AX, 125ă			  	! Mov	BX, 125ă			  	! Mov	CX, 126ă			  	! Mov	DX, 126ă			  	! Sub	AX, nxă			  	! Jns	NotSet001ă			  	! Neg	AXă            NotSet001:ă			  	! Sub	BX, AXă			  	! Mov	nx, BXăă			  	! Sub	CX, nyă			  	! Jns	NotSet002ă			  	! Neg	CXă            NotSet002:ă			  	! Sub	DX, CXă			  	! Mov	ny, DXăă               'DEF SEG=&hA000ă               'POKE y, EnvMap(nx*128+ny)ăă        		! mov	BX, nxă               	! Mov	AX, EnvMapSegă			   	! Db	&hC1ă               	! Db	&hE3ă			   	! Db	7				; Shl BX, 7ă			   	! Mov	ES, AXă               	! Add	BX, nyăă				! Mov	DX, &hA000ă				! Mov	AL, ES:[BX]ă              $IF %SkipOnePixelă                ' Fill entire AX registeră				! Mov	AH, ES:[BX]ă              $ENDIFă				! Mov	BX, ydă				! Mov	ES, DXăă				$IF %SkipOnePixelă                ' Plot two pixels at once.ă					! Mov	ES:[BX], AXă    		    $ELSEă                	! Mov	ES:[BX], ALă    	        $ENDIFăă            skip:ă				$IF %SkipOnePixelă                ' Since we plot two pixels at once, weă                ' skip the next one by adding 2.ă				    ! Add	lx, 2ă					! Add	yd, 2ă	    	    $ELSEă                ' Get next pixelă                	! inc	lxă			    	! inc	ydă	        	$ENDIFăă                ! Dec	DIă                ! Jz	SkipTrick001	; PB has these annoyingă                ! Jmp	ForLoopDI		; fixup overflow errors...ă                       					' So we can't just haveă                                   		' Jnz ForLoopDIă			SkipTrick001:ă			! Add	ym, 320ă    		! Inc	lyăă	    ! Dec	SIă	    ! Jz	SkipTrick002ă	    ! Jmp	ForLoopSIă        SkipTrick002:ăă        ' Chck if ESC was pressed.ă	    ! In	AL, &h60ă	    ! Cmp	AL, 1ă	    ! Je	ExitLoop001ăă	    ! Inc	iă	    ! Cmp	i, 3*360ă	    ! Jne   ajmp_001ă	    ! Mov	i, 0ă        ajmp_001:ăă        $IF %SinkDownă			FadeOutPică        $ENDIFăăă		'NEXT iă	    ! Jmp	ForLoopWith_iăă    LOOPăExitLoop001:ăă	' Clear keypress from keyboard buuffer.ă	! Mov	AH, 0ă	! Int	&h16ăă	SetTextăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăSUB PreCalculate ()ăDIM X AS LOCAL INTEGER, Y AS LOCAL INTEGERăDIM nx AS LOCAL SINGLE, ny AS LOCAL SINGLE, nz AS LOCAL SINGLEăDIM I AS LOCAL INTEGER, t as LOCAL INTEGERăă    RANDOMIZE TIMERă    picSeg = VARSEG(pic(0))ă    EnvMapSeg = VARSEG(EnvMap(0))ăă    FOR y = 0 TO 127ă        FOR x = 0 TO 125ă    	    'ă	        ' This defines the light source (environment map)ă        	' Change the division values to something elseă            ' to get another shape on light. Bigger valuesă            ' make it larger.ăă            nx = (x - 125) / 122ă        	ny = (y - 127) / 110ăă          ' This formula could be changed too,ă          ' if you want a square light, or something.ă		  ' I won't present any code for that,ă          ' you should be able to figure it out.ă		  nz = 1-SQR(nx!*nx + ny!*ny!)ăă		  IF nz < 0 THEN nz = 0ă		  EnvMap(x*128 + y) = nz * 255ă        NEXTă    NEXTăăEND SUBăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăSUB LoadLogo (FileName AS STRING)ă'ă' A very simple image loader. I didn't care to includeă' any TGA, GIF or PCX routines, else the code would have beenă' bigger than it already is.ă' For the wild programmers out there:ă'    Add a multiple file format loader... perhaps... withă'    pull down menus and file boxes? And send it to me ;)ă'ă'ă    DIM ScrnPtr AS LOCAL DWORD PTRă    DIM BufPtr AS LOCAL DWORD PTRă    DIM Offset AS LOCAL WORDă    DIM Buffer AS SHARED STRING * (1024*16)ăă    IF DIR$(FileName) = "" THENă    	BEEPă        PRINT "File: "+ FileName+" does not exist!"ă        PRINT "Cannot proceed. Program ended."ă        PRINTă        SYSTEMă    ELSEă	    OPEN FileName FOR BINARY AS #1ăă	    ScrnPtr = picSeg*65536??ă	    BufPtr = VARPTR32(Buffer)ăă        ' Expected:ă        'ă        ' A 64000 byte .raw image.ă        ' These can be created e.g. in theă        ' painting program "PSP"ă        'ă        DIM i AS LOCAL BYTEă    	DO UNTIL EOF(1) OR i>=4ă        	INCR iă	    	BufPtr = VARPTR32(Buffer)ă			GET #1, , Bufferă	        FOR Offset=1 TO (1024*16)\4ă		        @ScrnPtr = @BufPtră	    		INCR ScrnPtr, 4ă		    	INCR BufPtr, 4ă	        NEXTă	    LOOPă    END IFăă    CLOSEăăEND SUBăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăSUB Soften (BYVAL nTimes AS INTEGER)ăDIM Offset AS LOCAL WORDăDIM tmp AS LOCAL INTEGERăDIM m as integer, counter AS LOCAL BYTEăă'ă' How many times to go through the screen and soften all the pixels.ă'ă    IF nTimes < 1 THEN nTimes = 1ăă' A simple status bar.ăă    COLOR 7: PRINT STRING$(40, "°");ă    LOCATE , POS(0)-40ă    COLOR 14ăă' Ouch, the bottleneck in my initialization!ă' Would someone care to asm optimize this?ă' My asm version just crashes, so I am skipping it :(ăă    m = (63999/40) * nTimesă    DEF SEG = picSegă    DOă		FOR Offset=0 TO 63999ă        	IF (Offset MOD m) = 0 AND Counter<40 THEN PRINT "Ű";: INCR Counteră            $IF 0ă            'ă            ' Badoumm. Doesn't work. Why, why, why!?ă            'ă			   Mov	ES, PicSegă			   Mov	BX, Offsetă			   Mov	AX, ES:[BX]ă			   Add	AX, ES:[BX+320]ă			   Add	AX, ES:[BX+1]ă			   Add	AX, ES:[BX-320]ă			   Add	AX, ES:[BX-1]ă            ' It claims "Division by zero"!?ă			   Mov	CL, 5ă			   Div	CLă			   Mov   ES:[BX], ALă            $ELSEă				tmp=PEEK(Offset+1) + PEEK(Offset+320) + PEEK(Offset) + _ă				PEEK(Offset-1) + PEEK(Offset-320)ă		        tmp=tmp\5ă	        	POKE Offset, tmpă            $ENDIFă	    NEXTă        DECR nTimesă    LOOP WHILE nTimesă    DEF SEGăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăSUB Bumpize ()ăDIM Offset AS LOCAL WORDăDIM C AS LOCAL WORDăă'ă' Add random "bumpiness" to all pixels on screen.ă'ă    FOR Offset = 0 TO 31998 STEP 2ă    		' The RND function shouldă            ' be replaced.ăă            C = RND*120 + (RND*120)*256ăă           	' ES must be changed in the loop sinceă           	' RND seems to destryo it. (Why elseă            ' would my system crash?)ă			! Mov	ES, picSegă			! Mov	BX, Offsetă           	! Mov	DX, ES:[BX]ă           	! Or	DX, Că           	! Mov	ES:[BX], DXăă		   	! Mov	BX, &HFA00ă		   	! Sub	BX, Offsetă		   	! Mov	DX, ES:[BX]ă		   	! Or	DX, Că		   	! Mov	ES:[BX], DXă   NEXTăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'ă' Standard wait retrace sub.ă' Can be used anywhere, sinceă' it doesn't destroy anyă' CPU registers.ă'ăSUB WaitRetrace ()ăă	!Push	DXă	!Push	AXăă	! mov	DX, &h3DAăWRLoop:ă	! In	AL, DXă	! Test	AL, 8ă	! Je	WRLoopăWRLoop2:ă	! In	AL, DXă	! Test	AL, 8ă	! Jne	WRLoop2ăă	! Pop	AXă	! Pop	DXăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'ă' Generates a random palette from black, to ???, to white.ă'ă'ăSUB SetPalette ()ăă    RANDOMIZE TIMERă    DIM R AS SINGLE, G AS SINGLE, B AS SINGLEă    DIM I AS LOCAL INTEGER, T AS LOCAL INTEGERăă    ' ..ă    R=RND*5+2ă    G=RND*5+2ă    B=RND*5+2ăă    FOR I=0 TO 127ă    	    OUT &H3C8, iă	        OUT &H3C9, i/Ră	        OUT &H3C9, i/Gă	        OUT &H3C9, i/Băă	        OUT &H3C8, i + 128ă            t=(127+i)/Ră            IF t>63 THEN t=63ă	        OUT &H3C9, tă            t=(127+i)/Gă            IF t>63 THEN t=63ă	        OUT &H3C9, tă            t=(127+i)/Bă            IF t>63 THEN t=63ă	        OUT &H3C9, tă    NEXTăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăSUB SetMCGA ()ăă	! Mov	AX, 19ă	! Int	16ăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăSUB SetText ()ăă	! Mov	AX, 3ă	! Int	16ăăEND SUBăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'ă' Makes everything "sink" and disappear.ă'ă'ăSUB FadeOutPic ()ăă	! Mov	ES, picSegă	! Mov	BX, &HFA00ăă    FDOP_002:ă    	! Mov	AL, ES:[BX]ă	    ! Cmp	AL, 2ă	    ! Jna	FDOP_001ă        ' Decrement value on picture if it is above 2ă	    ! Sub	AL, 2ă	    ! Mov	ES:[BX], ALă        FDOP_001:ă	    ! Dec	BXă	    ! Jnz	FDOP_002ăăăEND SUBă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăRyan Shaw                      READ SPRITE                    kathleen@iafrica.com.na        10-10-97 (20:02)       QB, QBasic, PDS        260  10172    RSPR.BAS    ' RSPR.BASă'ă' Description:ă' Read SPRite is an example of how to open a RGB encoded BMP file andă' retrieve information about the bitmap, display the image, save the imageă' to another file using BSAVE and then reloading the image into an arrayă' using BLOAD and finally tiling the image across the display.  RSPR alsoă' describes how to use user defined data types (BMPPal and BMPFile).ă'ă' It also describes how palettes and setting them works.  All sectionsă' seperated by the ' ****************, can be used seperately (well, theyă' were meant to be, but if you can actually do it, I'm not sure, thoughă' you can figure out what's wrong - probably the DIM's and DataReq& wouldă' be the only problems.) in your main programme.ă'ă' Remember:  this program is a sub-set of code, eg.  use it as a sub.  Thisă' is the reason why there are no other subs in this programme - none areă' required.ă'ă' Author:ă' Ryan Shaw (kathleen@iafrica.com.na)ă' Date:  10/10/97 (mdy), 19:47.ă'ă' Other:ă' Use at own risk!  If your computer crashes suddenly while reading theă' bitmap and you lose the image, your problem, not mine!  Make backups!ă' All credits used in program (including who programmed your program :),ă' should be directed to the name above and left (under the Author: bit)ă'ă' Um, use wisely, and no *interresting* pictures... this programme cană' detect what you display :) (maybe I should add that... need a lot ofă' testing though...).ă'ăă' ********************************************************ă' Sets all undefined variables to be used as INTeger dataă' types (eg.  if you typed 'X = 3325', but haven't declaredă' X as anything (as in 'DIM X AS INTEGER'), then X wouldă' be thought of as an SINGLE data type (which uses moreă' memory than an INTeger, and is also much slower ină' calculations.  SINGLE is the default data type.  DEFINTă' sets the default to INTEGER), though I doubt there areă' any.ăDEFINT A-Zăăăă' ********************************************************ă' Read BMP codeă' ********************************************************ăă' The following is a file format of the BMP files...ă'  The record format for a palette entryăTYPE BMPPală  Blue AS STRING * 1          ' Blue colour component of palette entryă  Green AS STRING * 1         ' Green componentă  Red AS STRING * 1           ' Red componentă  Reserved AS STRING * 1      ' Reserved (mostly unsupported intensity comp.)ăEND TYPEă'  The record format for a BMP file headerăTYPE BMPFileă  bfType AS STRING * 2ă  bfSize AS LONGă  bfReserved1 AS INTEGERă  bfReserved2 AS INTEGERă  bfOffBits AS LONGă  biSize AS LONGă  biWidth AS LONGă  biHeight AS LONGă  biPlanes AS INTEGERă  biBitCount AS INTEGERă  biCompression AS LONGă  biSizeImage AS LONGă  biXPelsPerMeter AS LONGă  biYPelsPerMeter AS LONGă  biClrUsed AS LONGă  biClrImportant AS LONGăEND TYPEăă' Create a string limited to one character (a byte)ăDIM PCol AS STRING * 1ă' Create a record for the BMP fileăDIM BMPHeader AS BMPFileă' And a temporary palette entryăDIM BMPPalEnt AS BMPPalăă' Open imageăOPEN "SPRITE.BMP" FOR BINARY AS #1ă  GET #1, , BMPHeaderă    ' In all valid BMP files, the first two bytes are the string "BM".ă    ' If it's not, then the file is probably not a bitmap image.ă    IF NOT BMPHeader.bfType = "BM" THENă      PRINT "File is not a valid Microsoft BMP image."ă      ENDă    END IFă    ' The image may not be wider than 320 pixels or higher than 200.ă    IF BMPHeader.biWidth > 320 OR BMPHeader.biHeight > 200 THENă      PRINT "Image exceeds maximum dimensions for screen mode."ă      ENDă    END IFă    ' The image must be saved as RGB encoded, not run-length encoded (RLE).ă    IF BMPHeader.biCompression > 0 THENă      PRINT "Compressed formats are not supported."ă      ENDă    END IFă    ' The image must be a 256 colour bitmap.ă    IF BMPHeader.biClrUsed <> 256 THENă      PRINT "Image must be a 256 colour bitmap."ă      ENDă    END IFă' Create an array to store the sprite which is a bitmap of 20x20 pixels.ă' SizeOfArray = XSize * YSize + 4ă' The value returned is how many *bytes* are required.  Because an integeră' takes up two bytes of memory, the answer is divided by two.ăăDataReq& = BMPHeader.biWidth * BMPHeader.biHeight + 4ăREDIM Sprite(1 TO DataReq& \ 2) AS INTEGERăă' Another bitmap array - notice that this array is not altered until theă' end of the program when the image is loaded from disk and how muchă' quicker it is than the bitmap routine reading from the BMP file.ăREDIM Example(1 TO DataReq& \ 2) AS INTEGERăă' Video modeăSCREEN 13ăă  ' This sends out the value 0 to the graphics card.  The graphics cardă  ' interprets this and sets the data at the *read/write* port (&H3C9) toă  ' prepare to receive the Red, Green and Blue components of paletteă  ' entry no. 0.  After receiving them, the card will prepare for theă  ' next palette entry (no. 1) automatically, so we tell it to get readyă  ' once.  The r/w (read/write) port is also used to receive informationă  ' about the palette (eg. if you were saving an image), but in thată  ' case you would OUTput a byte to port &H3C7, and not &H3C8 as here,ă  ' and you would INPut a byte from &H3C9, and not ouput a byte to &H3C9.ă  'ă  ' In 16 million colour modes (16 million is the maximum colours an humană  ' eye can differentiate between), there are 256 shades of Red, Green andă  ' Blue and theses shades make up the colours on the screen.  In memory,ă  ' there are no palette entries, only data for each pixels Red, Green andă  ' Blue components.  This is why you have 16 million colours - 256 ^ 3ă  ' (256 * 256 * 256) = 16 777 216 colours.  This is also why a modeă  ' requires three bytes per pixel (the first byte represents the red, theă  ' next the green, the next the blue, the next the pixel's red, and nextă  ' the pixel's green, and so-on), but in mode 13, a palette of 256 coloursă  ' is used.  The palette entries (Red, Green and Blue) can only have aă  ' range from 0-63 (64 shades) of each RGB component.  When the image isă  ' saved, the palette stored along with the file has a range of 256 shadesă  ' per colour so that it can be loaded into a 16mil GFX mode, 65kb GFX mode,ă  ' and so-on without loss of colout detail.  In mode 13, this means weă  ' have to divide each palette entry by 4 (256 \ 4 = 64) to get the correctă  ' shade of the colour.ă  'ă  ' The palette in the file is stored as one byte per component (3 bytes peră  ' palette entry), with 256 entries:  1 * 3 * 256 = 768 bytes palette.ă  ' What the ASC function does is returns the ASCII equv. of the byte read.ă  ' eg.  The red palette component in the file reads as the character '!'.ă  '      Character '!' is the 33rd ASCII character, and so the shade of theă  '      palette entry's red component is 33.  Divided by 4, this is 8 in theă  '      64 shade mode 13 palette.ă  'ă  ' You might have noticed a 'Reserved' STRING * 1 above in the BMPPal TYPE.ă  ' This is not used (it is for 4gig colour modes, where there is a fourthă  ' byte which represents intensity of the colour (I think), but it isă  ' reserved until more graphics cards begin to support 4gig colour modes,ă  ' because at the time of creating the BMP format, possibly no cardsă  ' supported it and it was still being developed).ă  OUT &H3C8, 0ă  FOR SetPal% = 0 TO 255ă    GET #1, , BMPPalEntă      OUT &H3C9, ASC(BMPPalEnt.Red) \ 4ă      OUT &H3C9, ASC(BMPPalEnt.Green) \ 4ă      OUT &H3C9, ASC(BMPPalEnt.Blue) \ 4ă  NEXTăă  ' Bitmap data is stored from the bottom, right, going up to the topă  ' left.ă  'ă  ' This is certainly not the quickest way to load and display an image,ă  ' but it is the easiest.ă  'ă  ' *Up* Y (pixels begin at 0 and go on to 319, eg. if sprite is 20, thenă  ' go on to 0 from 19)ă  FOR Y% = BMPHeader.biHeight - 1 TO 0 STEP -1ă    ' Across X, from *right* to *left*ă    FOR X% = BMPHeader.biWidth - 1 TO 0 STEP -1ă      ' Read a coloură      GET #1, , PColă      ' Draw the pixelă      PSET (X%, Y%), ASC(PCol)ă    NEXTă  NEXTăă' Close the fileăCLOSE #1ăă' Grab the picture to a bufferăGET (0, 0)-(BMPHeader.biWidth - 1, BMPHeader.biHeight - 1), Sprite(1)ăăăă' ********************************************************ă' Saving codeă' ********************************************************ăă' Change the data segment to that of the bufferăDEF SEG = VARSEG(Sprite(1))ă  ' Save DataReq bytes of information at Sprite_SEG:Sprite_OFFSET to a fileă  ' called SPRITE.DATă  BSAVE "SPRITE.DAT", VARPTR(Sprite(1)), DataReq&ăă' Save the sprite's palette (the palette MUST be the same throughoută' your entire program, otherwise some sprites will look deformed).ă' Probably best to use something like "GAME.PAL" as a single maină' palette, though perhaps you would like to show an picture afteră' something occurs in your program, but the palette is different, thenă' seperate palettes is what you use.ăOPEN "SPRITE.PAL" FOR BINARY AS #1ă' Retrieve palette data from r/w port and save it the sprite's palette.ăOUT &H3C7, 0ă  FOR PalEntry% = 0 TO 255ă    ' Create a character, and convert to a 256 shade (only foră    ' compatibility, as the shades won't be enhanced to 256 seperateă    ' shades as in a 16mil colour image).ă    FOR RGB% = 1 TO 3ă      PCol = CHR$(INP(&H3C9))ă      PUT #1, , PColă    NEXTă  NEXTăCLOSE #1ăăăă' ********************************************************ă' Retrieval codeă' ********************************************************ăăCLSăPRINT "Press a key to tile the image."ăSLEEPăăDEF SEG = VARSEG(Example(1))ă  ' Retrieve the saved image into the array Exampleă  BLOAD "SPRITE.DAT", VARPTR(Example(1))ăDEF SEGă ăOPEN "SPRITE.PAL" FOR BINARY AS #1ă  OUT &H3C8, 0ă  FOR SetPal% = 0 TO 767ă    GET #1, , PColă    OUT &H3C9, ASC(PCol)ă  NEXTăCLOSE #1ăă' Tile the image across the screenăFOR Y% = 0 TO 200 - BMPHeader.biWidth STEP BMPHeader.biHeightă  FOR X% = 0 TO 320 - BMPHeader.biHeight STEP BMPHeader.biWidthă    PUT (X%, Y%), Example, PSETă  NEXTăNEXTăAlexander Meyer                DRAW SHADED BOX                Meyer.Karl@t-online.de         10-19-97 (09:09)       QB, QBasic, PDS        55   1434     SHADEBOX.BAS'                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' SHADEBOX.BAS -- Written in QuickBasic 4.5ă'ă' Name: Draw shaded boxă' Author: Alexander Meyeră' Date: 10-18-1997ă' Description: This program draws a shaded box on theă'              screenă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăDECLARE SUB DrawBox (x, y, Lang, Hoch, Farbe)ăăSCREEN 13   '--> VGA 640 x 480ăCLSăă'****** THE BEST SETTING FOR 'Farbe' IS 31 !!!!******ăCALL DrawBox(50, 20, 200, 100, 31)      '--> Call routineăăENDăăSUB DrawBox (x, y, Lang, Hoch, Farbe)ăă'Draw shaded box--------------------------------------------------------ăăLang = Lang + xăHoch = Hoch + yăUntenA = xăUntenE = LangăUnten = HochăRechtsA = yăRechtsE = HochăRechts = LangăăLINE (x, y)-(x, Hoch), Farbe                  '--> Draw boxăLINE (x, y)-(Lang, y), FarbeăLINE (Rechts, RechtsA)-(Rechts, RechtsE), FarbeăLINE (UntenA, Unten)-(UntenE, Unten), FarbeăăFOR i% = 1 TO 15                              '--> Draw shadeă  UntenA = UntenA + 1ă  UntenE = UntenE + 1ă  Unten = Unten + 1ă  RechtsE = RechtsE + 1ă  RechtsA = RechtsA + 1ă  Rechts = Rechts + 1ă  Farbe = Farbe - 1ă  LINE (Rechts, RechtsA)-(Rechts, RechtsE), Farbeă  LINE (UntenA, Unten)-(UntenE, Unten), FarbeăNEXT i%ăăEND SUBăAlexander Meyer                VARIOUS CIRCLE EFFECTS         Meyer.Karl@t-online.de         10-19-97 (09:09)       QB, QBasic, PDS        181  3549     CIRCLS13.BAS'                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' CIRCLS13.BAS -- Written in QuickBasic 4.5ă'                  ă' Name: Circles in SCREEN 13ă' Author: Alexander Meyeră' Date: 10-18-1997ă' Description: Various circle effects in SCREEN 13ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăSCREEN 13         '--> VGA 320 x 200ăRANDOMIZE TIMERăCLSăDOă Stepped% = Stepped% + 1ă FOR z% = 1 TO 15ă  FOR i% = 1 TO 200 STEP Stepped%ă    z% = z% + 1ă    CIRCLE (160, 95), i%, z%ă    IF INKEY$ <> "" THEN GOTO NextCircleă  NEXT i%ăNEXT z%ăLOOP UNTIL Stepped% = 400ăăNextCircle:ăStepped% = 400ăDOă Stepped% = Stepped% - 1ă FOR z% = 1 TO 15ă  FOR i% = 1 TO 200 STEP Stepped%ă    z% = z% + 1ă    CIRCLE (160, 95), i%, z%ă    IF INKEY$ <> "" THEN GOTO NextCircle2ă  NEXT i%ăNEXT z%ăLOOP UNTIL Stepped% = 1ăăNextCircle2:ăStepped% = 0ăDOă Stepped% = Stepped% - 1ă FOR z% = 1 TO 15ă  FOR i% = 200 TO 1 STEP Stepped%ă    z% = z% + 1ă    CIRCLE (160, 95), i%, z%ă    IF INKEY$ <> "" THEN GOTO NextCircle3ă  NEXT i%ăNEXT z%ăLOOP UNTIL Stepped% = -240ăăNextCircle3:ăCLSăz% = 16ăDOă  FOR i% = 1 TO 200ă    z% = z% + 1: IF z% = 25 THEN z% = 16ă    CIRCLE (150, 95), i%, z%ă    IF INKEY$ <> "" THEN GOTO NextCircle4ă  NEXT i%ăLOOP WHILE INKEY$ = ""ăăNextCircle4:ăCLSăz% = 33ăDOă  FOR i% = 1 TO 100ă    z% = z% - 1: IF z% = 1 THEN z% = 33ă    CIRCLE (150, 95), i%, z%ă  NEXT i%ăLOOP WHILE INKEY$ = ""ăăCLSăDO WHILE INKEY$ = ""ăRadius% = INT(RND * 400)ăFarbe% = INT(RND * 254 + 1)ăIF INKEY$ <> "" THEN GOTO NextCircle5ăCIRCLE (160, 95), Radius%, Farbe%, , , 2ăLOOPăăNextCircle5:ăCLSăStepped% = 0ăDOă Stepped% = Stepped% + 1ă FOR z% = 1 TO 15ă  FOR i% = 1 TO 200 STEP Stepped%ă  Timing% = Timing% + 1ă    a% = a% + 1ă    b% = b% - 1ă    z% = z% + 1ă    CIRCLE (160, 95), i%, z%ă    PRINTă    IF INKEY$ <> "" OR Timing% = 300 THEN GOTO NextCircle6ă  NEXT i%ăNEXT z%ăLOOPăăNextCircle6:ăTiming% = 0ăStepped% = 100ăDOă Stepped% = Stepped% - 1ă FOR z% = 1 TO 15ă  FOR i% = 200 TO 1 STEP Stepped%ă  Timing% = Timing% + 1ă    a% = a% + 1ă    b% = b% - 1ă    z% = z% + 1ă    CIRCLE (160, 95), i%, z%ă    PRINTă    IF INKEY$ <> "" OR Timing% = 300 THEN GOTO NextCircle7ă  NEXT i%ăNEXT z%ăLOOPăăNextCircle7:ăCLSăDOăFOR i% = 0 TO 300ăCIRCLE (i%, i%), i%, i%ăVIEW (1, 1)-(100, 99)ăPAINT (1, 1), i%ăIF INKEY$ <> "" THEN GOTO NextCircle8ăNEXT i%ăLOOP WHILE INKEY$ = ""ăăNextCircle8:ăCLS : VIEWăFOR i% = 0 TO 300ăCIRCLE (i%, i%), i%, i%ăNEXT i%ăDO WHILE INKEY$ = "": LOOPăăCLSăFOR i% = 1 TO 135ă  FOR z% = 1 TO 40ă    CIRCLE (i%, i%), z%, i% + z%ăNEXT z%, i%ăDO WHILE INKEY$ = "": LOOPăăCLSăFOR y% = 150 TO 300ă  FOR x% = 100 TO 300ă    FOR i% = 1 TO 99ă      FOR Delay% = 1 TO 20ă      IF INKEY$ <> "" THEN GOTO NextCircle9ă      z% = z% + 1ă      CIRCLE (y%, x%), i%, z%, , , -i% / 25ăNEXT Delay%, i%, x%, y%ăăNextCircle9:ăCLSăDO WHILE INKEY$ = ""ăFOR i% = 0 TO 300ă  IF INKEY$ <> "" THEN GOTO NextCircle10ă  CIRCLE (i%, -i%), 300, i%, , , i% / 50ăNEXT i%ăLOOPăăNextCircle10:ăCLSăFOR i% = 200 TO 1 STEP -1ă  CIRCLE (i%, i%), i%, i%, , , -i% / 50ăNEXT i%ăDO WHILE INKEY$ = "": LOOPăăCLSăDOăFOR z% = 1 TO 15ă  FOR i% = 1 TO 200 STEP 50ă    z% = z% + 1ă    CIRCLE STEP(0, 1), i%, z%ă    IF INKEY$ <> "" THEN ENDă  NEXT i%ăNEXT z%ăLOOP UNTIL INKEY$ <> ""ăăENDăNigel Traves                   (6) VARIOUS FRACTAL SETS       FidoNet QUIK_BAS Echo          10-09-97 (01:29)       QB, QBasic, PDS        130  8566     FRACTALS.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FRACTALS.ZIP",4^6:Z&=6153:?STRING$(50,177);ăU"%up()%9%%%[-%6%.xH/x2U<,'%%%d*%%%/%%%%rf%sijq%SgfxJDx,>BSe5KFl[ăU"d;CDyI_pu?T#.i/Uo[m)lYAy[4dX3,:vtmhSlsvC8hl'j6SY'+ejhlllV?.(;99ăU"Znab)ylZ3MACrMZ(X4i]BaV8HJ[CE26gq[QK.XvIyOSb0*dscr9Z*)ngc:n.NZcăU"QSDGpw8luc12X$iyIA:A7:XG*Gnp-U*CkagU+g$<y[?R9^jDI3a6er5)(5uW,2:ăU"]]y)YI^#&aIJAhf5,uJD9k+p]V0'c&?8Ul<OwveF4UY4<m>NIZ.*o-O9,f'hW8,ăU"DxTbR^c5$-4^2'>kV]'7c9RAZFIl9k:&pA+(^_^.WJhfPKME/VJ]hH1I6Z352^4ăU"qwqo$#Jn3Hq:e98a=#C8J;'Jo3GAV87l..#NbPn(7cb(?cr<w8FsWe77we3kEB[ăU"DVn=p4e:38q;DQN]8HNqKrWLR)c.ohWP^W91*>1GH\?iL/xQr6\=FR?S[+'u+CuăU"BY6'-#c;3ZKtEhZGOPHZI&m)sk#CV\a%+gjkfmcb2R8_:WSO'x?cjNi[.sIum^^ăU"^.TrZ=#0OyE.=Hs6TCb1w);qo1lkL>^)Gjy[Kr,t\-+-I1>gfVrZSe=K=j3\Y.8ăU"Mis<xrhF./8<RxdPHnSHH9\+nF*F$.,^uz<IZ+f6R\a^?:x:I__CXpM^,f7tM$iăU"hES2B,-^zwH?c8M#C]N)CZG]e1.Ot[n5D*VF>*2E=)6HiD:gSedRYVsls=*0KCMăU"-Lq\^k1y0B;xUzhM]UnN5hV?FBVgKGBDNfEA9CTj5nJ>sXgpw%'up(%)9%%%%-%ăU"J'%xH;4Uj:Y%'%%G%*%%.%%%%o%zqnf%SgfxJDx,>BSU9Lal[dURbqV7iCOL5B&ăU"72;21qsGqhceF.nA1NrQ,e%6ihFT3rA'<MX1nJ-Gj^306.A3(dygUui2J\iJGC,ăU"#7_vNGGBxWQHil8Vr3F#69]W()r^)FdXFTZgEz2E.pu(rIh4\5Kig3uU#$Io;3#ăU"?d.AChqeH6fC.%Wv%%#.>p113y)h]6nBahAh:EZ(.8#uj[&6;WhfkqCadA6JxcLăU"Zd_Q.cMHrMj/RgahB4%4q*:Bd9ptu#)kZjT3F3+ADI0<7*lo>M14Aw4Y87Zp$AYăU"8LP5SaF3=:4-*')1:T^Y'gP?pdo_QBTH7RPh[B5+T&qtKs^=hY=GIB:-.9o'Dn=ăU"ohKNnEMO.KL&:G>ZPKN+o_O2^Zh*#j)R5=Bm9iKZzUS8>QS+L(.)8c[HdLOn70tăU"3RB%EkA07o&jH$-HBCXPHlb'hk=Dh\JIUnM,p2TwdsFu1J-.<ggqGW9a*xu$TgLăU"J/X7Z=F?pdn3ZAVTIDJg^O>8U&d:CL<RF._5G7RBiFsa-i)u:brN0=20'hLk*a$ăU"c)y4Ur3jrGeX6ILvFdCGb,C.PHvim:J]dQ5bsJ]MMo#N?w=S1)X*S47Klo7#hb1ăU"6eR'ZoDoP>YcUx]04\.S$V[R5NRx3C)Mj*I,S,gHJVQn4/r,<<WGF8hKpveewZcăU"0QJCIy=muia&SixQmnH]((G[<_56&FmwtGEdUOS?a3KXl\J.%up()%9%%%[-%$%ăU"RxH&n'(yF'%%%X)%%%1%%%%mj%stsr%fuSg.fxLw3h^iea5vs;BxUV8+s(o)iG+ăU"jwlq[0G9]3FfMbM,f[z[&OreQ+x;L6Y1<P93IjW,>_K6\RF*Hqw:Q5+r#XBP2JMăU"aUzbKIGRl\T_<9Fq&zt:opZz$k+9I0.qP<oE=BRft*cA1&6;j/iqkiqp]A;%1U]ăU"XC094hDwTS4(Jzhlc&msO&U5xX_\T$N$MSE<eP:[P&a(<:)EH%NeE1ir7j8?MKJăU"=ca+:eZZazn)Gf+M__SwzO?Sk'-9L3H00f#OK9r][ej:kn=99G^skgCATL:#XUlăU"IR186%mhUm^(kBRf'53rIEOp(Or,cY+u+Nq5FJ$#Hm5w\&U8P?^f2GJMW\o%(u:ăU"01hjK>jC=SxKtVZ[derdT2I<aSZg%'d:lEpQI.4(^c=rDZ,YS:UD7QjwA5r/;/\ăU"[DM/,LeTUb-7I'r,]08[w=j]JzD[KN9-8/Vr>9+:L(7jRv1:J<<9l+7RwEaFDK2ăU"GA.EnrURGlT]d%C;3fN?_$&^*fq_*Cfe_8Vu.icX')Vg4=5lnYMDME-_HW#)$6hăU"1c&W33bB=9xFhYvP2ahW-aa*3gXQ2-=aVMj+RU$93BX7)Rf)uFEAXObw+f?--O3ăU"Cjh>D9UH$2FOxwV;Ynt_qMr'XEkVZ.0G[XwF=0Ajl#6j+[NKx)3V\t#$snqwI>HăU"YnY?l<,FAvs#GLvjfoYLeW,wr,u%p()9%%%%-7%p%x+HRPi(ii'%+%D)%%%1%%%ăU"%npj%ifrf%uSgf[xzxh,>SU5]vCNx$<Xo\.lN:_63'y_V81bY'M'Oq*T&83Wii=ăU"hofeuXHhGn)nU)75tJpWVg^Cv(916iQ#/8+0cIvJfFCeCp]?Xv9.6F&l-AM&f3_ăU"%Pj$&tzS(6=FFb+\+O43/)I&eMH7)Iz\ELYQ$h(qT+OrX2'kd_HBkC7e2lGv&phăU"A)M0a.w>x9,Y]qr3K'7Y)gJ_I\)>Hl[BY9.p*tPKAIvxW#)l%^<cWMBC.HL8#E6ăU"+L$6vUp;>X?orcW+U7UJbldKGtJMA2Dh2'Gt2']IH1L9Je77B;ht-.9+4ta[&K:ăU"a1:B<sEpg\$Mn%&#T3w2di*;V/k*gKN8an.:W6>9k:r3:f'Dppzi5_DMLj8Uf)găU"T-/8l2=lZYtD87RCjHKQA^\/5ZEAasd])hpNlL&NQgGu_C\&I*%F/MWrhdAj#coăU"c0&2E)3hEx?5))YDoMZH#A%&9Wx^nA\]BN&seSlkVWXnp/gZIW1+LU9CU[,=;EvăU".N4L4%6v7_W#n'X'>v9v1y44oQjNg:udq_SW8bHqYi->2Lkebf:]m:zI=qmeG0iăU"UNbPu(d$993J:JN;%Tahf):fXJ=gSo&9Flaj?+36/+muvYakCvM8A5LRLUW.oKBăU"UIqje's6xmJ;ugZVk9r)*eaj;,Z3?]&G+7M+b<*([7RTEW9+\q(,\1r_lVm;#M;ăU"sOsQZ4<5qR7IdF>?[%<zMUDQl_\zF<nL.y>rEb[qyhw#sQpZ#pf<CiYAZSEmpu>ăU"7;tcn%C\/(rOSuhl]?mb;H7Q<mpM_Git7<&1qaP;,ZfEb;*l\xjRqix7w)hBFităU"=ndx&tl,,,CFL$FPCbcn6>8&9,T:du%p()9%%%%-:%;%xdHy,G-YP)%+%[.%%%1ăU"%%%%kwf%hxyf%wSgfCxLz<,>Sm5]wCNx)0SO:&Ie(rlK4-TebFU1IJK6b(K$sLjăU"Ro1($)FRhm_Apd5>?:'4IN(o]5$THjal5W%so;>Jef7'&xtts4tWI5sPrO9))y2ăU"=StE(q+9Qwz7+qCFO:SwAL09T&;p0NEVg<:Pox8j;CEYnh#ZTodJcQV)K)w(u%[ăU"?[q&ROjG=ID+R+9NW8+_^V-m.1[C5/=tw8:)cfkzZw4h_B=O_d[j;J0Jayi]a+1ăU"n_VHMK8m]f4NDSq,)I[J/b_2k(MX]jW?h_N)C/x/k2I>2DT:YO^>z[5+95)K>2YăU"*U0A(d3]+;KfhQb:<WDg^L2S(/os$_H27v_%MF=KVg8]v)iJM/XQSau)Sb:1ah;ăU",-OFKI?PEUY_wn;dWOH8ujM,$1%#wMS3wEuqOAWcOG(F[[[93#loc:R:qh0r]SWăU"1??p9OIN40/$BqZ[4Gja(SrdAcc:oFC#8P**S5mHA4kw7:A2tz-pX'lfaw*W'bPăU"JKZ4+/y'h<'\hgFW)&s?7/6)'LU#(*i#rIxGzKJXy0b#/?I3gE3<'S(s>[DHXMgăU".<&>iAe68ucP=hN09yHYVPR#VUT?JTg%.6vL4f,gh'PR(BlSaaf500&uwqCtev4ăU"uqZ;I0/X[ArT=2kJ+a>SE66,w?<l$k&k+4U#-#<s%bB9>Tk8(m<Y?d<0c-u9WiDăU"8TJeP,53UT$U[(pGyumQ]ClG'w'KbsDHlL#8GUmK2s/^KZ]?,(DU$j8740C>UwIăU"DAk4SM6tIW'$;8ZZgRfxdW4P,gF,&hjq?P(b,jo5xP7n)lC(lbI-wfBgErD,x)făU"T77Q43:oV04dF3i^[((C&6ROB%'3<)PfXQa:oRPU:$0Q6O7&2>wl(*-hAJcZAI\ăU"a91y?WS0aa$>Qnv0bMf;PmgC</Z9Hgj8PeC1e-4km9Y\n1<ZRyivnvKQ*LfW+LwăU"/_R;Y^+Yi_4rct(qUMvIlj'Q_zzF;LM&>i#)nu2uxaIEY?S8G25PR9K=bUcknVUăU"<,u.lxtGJDPWn/Dh%ZBcITa$\u96D2-A</m4S&rN7s[Yfu.:hFY<*.5/IGqi9VjăU"rd:18;;0#f[3F=c3kKwY)YZ/LH2ps6_+4hkUW^5uR84:XP<V(aC5jO'[R5G7[i-ăU"JWRri'es5&aK%)L?dacLG_in];_vV=18r<EvZa7O4v9O?sWtJ+IxP/E4:rdDdKJăU"#9dC*slnhFZl)<&%=uP>,c4jEhv5,hObx9MD^_(sL7EpVC2sxv*P=I$E:ZbN_o>ăU"r8;%(:Zd/KJgW0p47pdCZ*;#kE(ri;H_P'/Fgo$$Epk>mJoGp$+<65vDik&-CoeăU"qNpei(&B168o5SnIw47'PVAQ]m9c<WnZwr8A/8Au?T>5tP8Yte-ajHY>p0>A7eaăU"vnJ6^xAOu&uBi2.]i$0JMZRdb*3uGo4+bxmdElK<InV:kVbV>Sn0t\c\FZmrJ2OăU"Iq(YFw;jA(zP;R&;MmtDdm=ln(EXSI$]tMy[_kK?I1(Uy4E?Go6QYIw:toZd1p3ăU"uPYm]\HLcfY&G:[]fObh9W=7'4[vG>ccniTcjdF(Tp(WbCO?<F:&Iv,%up()%9%ăU"%%d-%Y%RxH/-6I\W).%%y.%%%/%%%%yt%umfr%Sgfx8\zht]\]5vq-xx<DKRSt#ăU"0*sv5bgsb:[JD/pMQgf&^4L^3Bc'rrekfIY5xsJW\s-4*r?vvW?mjjnh\HZ;/=dăU"gXzm:x1QwA][=33_PToSn8qj0pJpuP%'3Qn#pwGNGSuONt.3Rtq)U&9QFzO,y-RăU"OJ(;u/#8/qPky;mAfXWtS&k$KecRZ;I^SuseC]H-I3vUz,,amEIKW.\'Ck2EP1oăU"o4_G-*Diw*\<2zcXvvIU%Nhj]cJ0epD+*<_X^oZ*+D1';nO?Lq[+60d2O6iOS4LăU"Q]Yd0?b$*PoQI&b4y0jAJ2d*x<.7.ck%%A9Mn&2JmA,XZL[4&Y4ps0uR>.'RO88ăU"<;S-^r\Nn&a*2-j\agDfMFp$s5txMqc)BC0LowH):O8/rdnL(C/l:S9ee)rKi_^ăU"G76G0Uc.h-H^RJOe#/j^hjzW3a1*[QX*g0Ik2usm%0[?MCO[[:E%f('h2WrfIEVăU"(Ui2x)tJC0#N:0l-_DEO%E1KTSJSSfElX3D'bFg>UDs%v#]9fiX/UE1\+OYa,HkăU"#s*miBc+<YB?lzM.bYCi8vHsBf,$q<bcW5oIkH(3h'Kb>IdxSMrTU_[0^r7)nIlăU"7):sSc?V^)IVdUl,sC_9P]WMps\Tqjp(>W[:#[MNKcfJb4/eyp-ptAk4.KhG5o(ăU"dTlHJ)TC3pPelv>d7)\Ai]INn=SgAI-en:94k7iDhKDb%?x?ZDcX]q27.%J-W<]ăU"st$'$'\:67?cvayNhz10DuK'ua,H]VD0N=gAoBu^BpI58c99[#Hjpv83/qMzJiPăU"06=#,$'GIwsZY^%3y>Dq$TT%S>l<HE^kEo4<1x?aA^W-5vI&c:jo27sZ./AirE-ăU"Y253QWB=5xalg\/T6Zjmi_Qra.6iVM]8s1T;ryPg%Mm,wYM(Zc]JO*.k3)jSaK=ăU"TN-bTN:B/6B'MA\$&1\ZWJPn&eMql+IFK#DCjt+KX$dLyx%$IUH(:4fpneApv<ZăU":^eIAEtL2Yi;7Mm=3O.unYxmVfbZocff8QpOBOD3c;Yz_=&+o1YI/AAnsSU&RyQăU"Vq3QLBs^[[GF^/=eQ1Odekb#6V=g&*]=<4fB7xV\[[Q=?]go)3CaAt'o;TsFJ']ăU"UGAhbo]a^RDz;rRY,fVk<hc2qVR4Ha0Zarcc_,VMbiWP26D;MowNeYqCfAURP*hăU"#HgN>u]aOTtY0f6sR5f'Qpv;:M>ofAsdp0Pc?xP&pHd9hs$TWRqiW7hH5s%5,19ăU"v<C]qdw;2>wVH2V4eu$(R<o$db'c-ZswF0uA_kK6ixgyFAt1CxMoo6i+F$Y-tp?ăU"8JOz-x>oHm*U+Q1S)InalxB_Y&1c6Z.V5muFg3Nk<kDWJ\S)#%qMiS]BX#8_Dp4ăU"BDDA^v*DF4.RBSb5<omGkftxZ7R<xE;3R8HT;7662hIXCo8)u8ND;D:DQd4V3V]ăU"pD\:buB*k'a>eG$-\uGE#8>T(M<[*?Q_AoULlHTp=MN%up()%9%%%[-%;&.xHLKăU"/I^k'.%%Q*%%%0%%%%kw%fhyf#qSy'ay&wH,>Ta1o6#ix69T)EQfK,Ua+QFbpTGăU"ds8pr0BI,j514Z+gntCv^8%DNLB?S&0/[mEx]l\\Ju3mUvQ+eHbr2/IL2i(nj'hăU",/k9?Ftb5Q1<tM;^Fh>'aWwPsNNN>=ZUXrW8.EnDRkv_%G1;Lt?t&sEkB[l*<PeăU"Cl_kB<*k?WcC?nClqMSjBZ]<bB5OR;3p\u>EnrQ_V'[&R02F'14*D7Q#hn-APPyăU"cK&PBmUv=QC[OFG+0z7)KMgo<$dQ3)r_k*s-fE/E;P#Q<izB_[/WV=2K?H'1EtSăU"j&SU9Ri2)Wec=:2/ejssfiV8[if;OR^iy$:S+j,8Skr#145n/7Rye:>/pV^-D6&ăU"xwoCghZUBRuB[<XOL9IxS>P'YasM<o-/]g#1Y==ASSk9+s/S';2<&q;<yM>pDz5ăU"UZpp=QNH.$h,%PJi:QdR3O?#P(u7k2[*Pi'5p$fo1f9x^RITe0Yw:*jsqvU-&PAăU"ppV/_Kp-bO=+ZkmdGS./5=E]f)Y)wRP8[S(_W2t#+Z8Q_?2(WMGn,PlGGUZP'5XăU"q00]DSO)U)IcKsbEaV.?zW2RN\j2#,8MoF[NFm\;wk&fUk/51<k;j*&hG].8.jEăU"tCka&O)CqvW1UW#FHw/tBx9Yb:5^;oR#,[p[a4J)LTieTj0OF.*Egz^%un\1pW*ăU"GTqJaQ=--(_A;%48p2(+u2qGK=UL&\<mUof[r>=H*SNnz%M^Zpk8PW=__epZ*a<ăU">*V7.7ZB?%fpnr<qJxlLtIpDln)L4EBCNV*R[LvFjnOZ3HlFkq*t<V<)c+JP*coăU">\7e8rain;:'QmNNWM=bTq=(u,B)\FBS,,cpD$n9x[vn)q%2up&%'9%9%%%%-7%ăU"6%xCH/xU)<,'%%%d*%%%/%%%%%%%%%&%E%%%%%%%%%r%fsij%qSgf%xup&%'9%9ăU"%%%%-7%J%x[H;Uj&:Y'%%%G*%%%.%%%%%%%%%&%E#%%%T%'%%o%zqnf%Sgfx%upăU"&'%9%9%%%%-%+$%xH<&n(y%F'%%%X)%%%1%%%%%%%%%&%E%7%%Y)%%%mj%stsr%ăU"fuSg%fxup%&'9%%9%%%[-%p%7xHRP.iii'7%%D)%%%1%%%%%%%%%&%%E%%%%P,%ăU"%%npji%frfu%Sgfx%up&'%9%9%%%%-%,;%xHpy,GY'P)%%'[.%%%1%%%%%%%%%&ăU"%E%7%%h.%%%kw%fhxy%fwSg%fxup%&'9%%9%%%d-%Y%RxH/-6I\W).%%y.%%%/%ăU"%%%%%%%%&%%E%%%'i3%%%ytum%frSg%fxup%&'9%%9%%%[-%;&.xHLK/I^k'.%%ăU"Q*%%%0%%%%%%%%%&%%E%%%&o8%%%kwfh%yfqS(y'yu%p*+%%%%%,#%,%]#&%%4%ăU";%%%%%ăEND SUBăCLOSE:IF S=146AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăYariv Habot                    CAPTURE SCREEN 12 TO .BMP      mastic@israelmail.com          10-19-97 (21:36)       PB                     159  5497     SAVEBMP.BAS ' SAVEBMP.BAS - Public domain PowerBASIC sub to capture screen 12ă' images to 4/8 bit BMP files (no compression).ă'-------------------------------------------------------------------ă' Yariv Habot, mastic@israelmail.com.ă' Based on Stephen L. Maxson's (smax@isc-durant.com) SAVEBMP8.BASă' Adjusted for PB 3.2+, probably works on earlier versions as well.ă'-------------------------------------------------------------------ă' Call the SAVEBMP sub by using:ă' SAVEBMP BMPFileName$, Colors%, X1%, Y1%, X2%, Y2%ă'ă' BMPFileName$ - The .BMP filename. SAVEBMP kills the file if ită'                exists!ă' Colors%      - SAVEBMP saves .BMP files in either 8-bit (256ă'                colors) or 4-bit (16 colors). Colors% should beă'                16 or 256. Any other value is equal to 256.ă' X1%,Y1%      - Coordinates for the upper-left corner. Theă'                values must be valid, as SAVEBMP does not checkă'                these values for validity.ă' X2%,Y2%      - Coordinates for the lower-right corner. Theă'                values must be valid, as SAVEBMP does not checkă'                these values for validity.ă'ă' There are differences in speed and output file's size between 4ă' and 8 bit .BMP file processing.ă'-------------------------------------------------------------------ă' The SUB makes use of Coridon Henshaw's GetPalette SUB, so if youă' wish to use SAVEBMP in another program, GetPalette will have to goă' with it.  ă'-------------------------------------------------------------------ă$STRING 32 'See line 72ăDECLARE SUB SAVEBMP (BMPFileName$, Colors%, X1%, Y1%, X2%, Y2%)ăDECLARE SUB GETPALETTE (Attr%, Red%, Green%, Blue%)ăSCREEN 12ăăTYPE BMPFileHeaderă        FileType as string*2ă        Size as longă        Reserved1 as integeră        Reserved2 as integeră        OffBits as longăEND TYPEăăTYPE BMPInfoHeaderă        Size as longă    	ImageWidth as longă        ImageHeight as longă        Planes as integeră        BitCount as integeră        Compression as longă        SizeImage as longă        XPelsPerMeter as longă        YPelsPerMeter as longă        ClrUsed as longă        ClrImportant as longăEND TYPEăăSUB GETPALETTE (Attr%, Red%, Green%, Blue%)ăăOUT &H3C7, Attr%ăRed% = INP(&H3C9)ăGreen% = INP(&H3C9)ăBlue% = INP(&H3C9)ăăEND SUBăăSUB SAVEBMP (BMPFileName$, Colors%, X1%, Y1%, X2%, Y2%)ădim FileHeader as BMPFileHeaderădim InfoHeader as BMPInfoHeaderăăif Colors%<>16 thenă        Colors%=256ă        WriteIterations%=5  ' Every 5 lines, Buffer$ reaches 32K, so writeă                            ' data to fileăelseă        WriteIterations%=10 ' Each byte holds 2 pixels, so write every 10ă                            ' linesăend ifăBMPWidth%=X2%-X1%+1 '  Width andăBMPHeight%=Y2%-Y1%+1 ' height of the imageăă'Each raster must be a multiple of 4 bytes, this next line takesă'care of 'padded' bytes at the end of rasters of odd-width images-ăIF BMPWidth% / 4 <> BMPWidth% \ 4 THEN PadBytes% = 4 - (BMPWidth% MOD 4)ăă' BITMAPFILEHEADERăFileHeader.FileType="BM" 'BMP format markerăif Colors%=16 thenă        FileHeader.Size=((BMPWidth% + PadBytes%) * BMPHeight%)\2 + 118ă        FileHeader.OffBits=118 ' 16*4+54ăelseă        FileHeader.Size=(BMPWidth% + PadBytes%) * BMPHeight% + 1078ă        FileHeader.OffBits=1078 '256*4+54ăend ifăă' BITMAPINFOHEADERăInfoHeader.Size=40ăInfoHeader.ImageWidth=BMPWidth%ăInfoHeader.ImageHeight=BMPHeight%ăInfoHeader.Planes=1ăif Colors%=16 thenă        InfoHeader.BitCount=4ăelseă        InfoHeader.BitCount=8ăend ifăInfoHeader.Compression=0 ' No compressionăInfoHeader.SizeImage=(BMPWidth%+PadBytes%)*BMPHeight%  ' Image size in bytesăInfoHeader.XPelsPerMeter=0 ' Picture dimensions in pixels per meterăInfoHeader.YPelsPerMeter=0ăif Colors%=16 thenă        InfoHeader.ClrUsed=16 ' Colors used in pictureă        InfoHeader.ClrImportant=16 ' Important colors in pictureăelseă        InfoHeader.ClrUsed=256 ' Colors used in pictureă        InfoHeader.ClrImportant=256 ' Important colors in pictureăend ifăăif dir$(BMPFileName$)<>"" then kill BMPFileName$ăopen BMPFileName$ for binary as #1ăput #1,,FileHeaderăput #1,,InfoHeaderăă'Save palette data-ăBuffer$ = ""ăfor i% = 0 to Colors%-1ă  GETPALETTE i%, Red%, Green%, Blue%ă  'Palette is saved B, G, R with unused byte trailing-ă  Buffer$ = Buffer$ + CHR$(Blue% * 4)ă  Buffer$ = Buffer$ + CHR$(Green% * 4)ă  Buffer$ = Buffer$ + CHR$(Red% * 4)ă  Buffer$ = Buffer$ + CHR$(0)ănext i%ăput #1,,Buffer$ăBuffer$=""ăă'Save image data-ăfor i%=(BMPHeight%-1) to 0 step -1 ' scan lines, beginning from bottomă        if Colors%=16 thenă                for j%=0 to (BMPWidth%-1) step 2 ' scan columns, 2 pixels per byteă                        Buffer$=Buffer$+CHR$(16*POINT(X1%+j%,Y1%+i%)+POINT(X1%+(j%+1),Y1%+i%))ă                next j%ă        elseă                for j%=0 to (BMPWidth%-1) ' scan columns, 1 pixel per byteă                        Buffer$=Buffer$+CHR$(POINT(X1%+j%,Y1%+i%))ă                next j%ă        end ifă        line (j%,i%)-(0,i%),0 'Wipes screen during scan. Remove if not needed.ă        if PadBytes%>0 thenă                for j%=1 to PadBytes%ă                        Buffer$=Buffer$+CHR$(0)ă                next j%ă        end ifă        if i%/WriteIterations%=i%\WriteIterations% thenă                put #1,,Buffer$ă                Buffer$=""ă        end ifănext i%ăclose #1ăăEND SUBăDavey W. Taylor                TRANSITION EFFECT GENERATOR    audio.squad@mailbox.swipnet.se 10-21-97 (10:51)       QB, QBasic, PDS        229  15052    TRANSIT.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TRANSIT.ZIP",4^6:Z&=11019:?STRING$(50,177);ăU"%up()%9%%%#-%[r[ZHy=+0BF4%%%]j%%%-%%%%kw%trSgRrufj=r']mg:T.S43#ăU"NI$DOB9&O.78RII?;/P^2+gQP<)U2e9Wjb)S[DkBHkVE57I8MzV77Y>cyq&4SZrăU"q=Uxt?v_pZ8ufjr?njrm^cx;T$4q+?W;T=YNr.LPMo5npT.75$6TTu=87q\scx=ăU"XrxPHXcjr#7BxPcNl;$^qKu3n.QZlZMupTTn:Z-\ZG-\Z-9\Zw4pk:fsm8B&N3,ăU"?n6i;NT=b)>].b](Rp]w<me5sAMq4>-)cAUH;fctg*p:8g=ce'\Nw<SsX.+K/wcăU"ka*EZIPGG'q0d=7pc<LqcjQ?R5Ar7:#z(WGml>dVRT7QJZsIs]nLI)hUy4F-u+YăU"W*(GbR<YYdW2qRGgQ#WKRi$oM:&5ixyht/X?oY;4p^S9y?iO8Rm+-T-WhQ<YAnZăU"HOgN\PAw_cnN9hUfmTOjy7Xfrb5e8_zK]Q1wMy?B&?>FJ[HtJZ/7eYp>]dHUNu=ăU"HWTR#c^JeBTm\>UL9F]).hY;L\8]G'I'$E;csV_4BPiFe2aqtl._Y:HbK?1<vIPăU"jI/s;Bvvd;[IpZ#FQZhxs'g3RECJ44RA4u1U\gWALkNrbm&=[5iL/eRxpw.;>rkăU"os&RS&MOQFnbR_w>GL;#$3xsJaS==g6R31ytaeN.D5K8WkfF,eAK:C&mIrZjZRXăU"=%tm)N6cf_5)*u;pM8<02hX1B=Zg*?lq=APJ_S*F#PCRTca5(d=J0-r)G:b\maAăU"Lp5GNGeE;jNq'11P1zH\_2[q[(NtXg*+KI.aNUrU8KQj+GQa+kFG1#=3'I3tr:văU"9V;4(&qX:3*N.:F-G<%u:U=;wmS<)lW&ng_ac=T-M8Hx:FawsBrd>hb__+NU/_<ăU"y;v^?oFMf.k4.)C1=,TRG0]?t[28C4;/:72d&c]fC*/L:R?'GHJ[\N.3xFOq_HRăU"TQc8#(tLn360n0v&'x[D50*];2mJInJz6k8j='\#U%&l/m(lU4ur)Si[c:N6AT_ăU"NI'pWW$c*VGU[L=DRp?u7*cN9ZZL&CA'J7zyS50wsm.:N0Sszdh?-S62X#?_E$PăU"SsS<P,ZQxd=vp'rBvsGRkYe;ouS//sp5hQTUOx&p:FafexNL\(o.kWj2d;&cfR]ăU"Rmx[PRGQQ]Z9kT)vK64;XZOiRQ$o]rb+xU>k$n'g1<*DL=mN=RqleQF:66<E*a.ăU"_NT6;=u&6/M,v]-nPfT9pPX^+P6'W#ll;f<j>j\YSUqDjnQmD:Q9X2Z7uu.lTeyăU"3m320k3<TGA8:18i<$5D';GVUKhHjrOb$w?P_]PxQ'i/lb\C5]7qdD[-/&2Y<QDăU"i\hF_&0'%H[Z0^/$t+2Cl_p#mftmohXJ7vtk/Z3w]e6>rC0?s?/-F^;#9eecxm;ăU"*;S[luRMSMtvn/%#Pv9'VL5n2;G=>P;+[70sxBUnl.7((x;jN&1#^#$V2KTDi=făU"nn;07]NP$=%)9w)SfL3/2lCZ%f$%6'j+n/v1V>;E#uuG_\T3QmNEsyVz+qkCwbaăU"C5Y6^#&RL81/1J>.C6o<J10H%uZe^vEy)=RDfK\xCIA9uEJ3HU?+GCTVxnB/Kc3ăU"F#pNlZX*.O'#pP9DG/$YS3W91J;;r;)dlrSPv(PfLUKW\%'>gIiTA/<rw6*&_uxăU"il*3^0mPe^MQW&jT\R28g1e;B;JJa9GYOMfpatW&tw###(H*S4Suk*Q9lcM7rq_ăU"Wa,/S76:bo&IgaV/BK)D;2onA2#<%ap+yDkOfep=:XRw.TyaGJh7_\_\z?D&s0zăU"f(Ya^eb77UHJ/petu-3*FOi_s[F+?;tQ&?uZS;#&=OdFevLUyimouN<2*VlbC?găU"];5SvO\za>QOv;Q4Bft9T)q1j0m6FGP6,'9kb-EqlC$W;&6f&RX[+b]aRM:JBMKăU"=KG.7;mE2O?dD2zcT74RiO8A60;YdyKKbD1KA\2=i$u<%fKC6R=)-Gr+s?FYl9&ăU"hWk][XL)1A+#of\'q(>%/2gvh,O,<K^m]p-<nELC>;%U\qPnN'*/4PO*so+ZEEMăU"zA6rArm*.>e'*yWv83+D=CSDs[Hf^g<59,9QgYwobb1m29;z^XoE,yACz$3c[-[ăU"iN#pJ1$DkzcCr3o[:wT9?ThO2mq:r\S--*nJl*]xh#KC8&s\n#XoosS<V/D6A+păU"Pf+8t05%emK9jYJ/?()5dez)7UZK&nJE<0M<iSKLWZ<_Dc=(8i7\IRL:TX.MlXMăU"/=>jA7j3swS%=<;dt\FcgrV3U3Inz)ob[/>$-fs-eA>M))0Ev]]_X1dHU..ND4IăU"?5*WCV[9t:8fRsn_5V7fBAMO9,P[xCjs4\QcCl%2hA:#y-A=IWIxH+K'mDZD]5XăU"PNgn<0<LGSvJ&lJ\70emF:^s&O>0'2];<v$(ir\?/ah=o7U<nr1cWLuEFIYShReăU"ynAcD_7E/+Z3/m/mN2ZktD&EgznR2,G0MIGSD6;eD:#imP-KJE'MjS_4E%mUgB#ăU",u6'T[=h>0:G[an6kWR_4/s$8_2_t5Cd;E3)O'9QbRw<3^YuTNigBL>;uxGd>16ăU"qmB7W;IqF.2=(3jUI'?u^nJzB+*l;fJ;f%GSP$axL,Niq.ZHI4bwCAZD6DCusL)ăU"1i55gf^KAX.dmsidOVm1loWA3,Y9;q/ZqD,rALZ;;)iA9?7/EtJ>AjkY3::1LIFăU"8>6Im1.m))mD1blj=uAM/2vQAFT/?^zM,:a5taIecV6lp50-UIc?c8LzFb5grhjăU"&gEj^:-Q/+z<d<=j)?%.nkhsuZ8^o[zMT-6_t1J*4cPj0VIaZH2YbNZ8^72wtPnăU"K*K'obq]kzn%OV__DkBC^[Ai=3,%G\FN]%U+x&Tvm;ikIw_S.G>Zrf_\1N+9,:JăU"KMnyz2QQka)z8.d\iHY/b<\E.$Ah'xpmR<?_\(<^tzmEFrOzO?W<HJbLf]y9(Q*ăU"J-WT:/hNAAR8Il#TuKs.t_mmOKCiMrcbp9ZM>T3,NoCQOzC>e6C:)/ZrBB+##[kăU"jHi2d3?kg?c,[[ZD;36O3c4..t14#X9-2akd/vFD3MFf?.?&N&y32O7BnWw5jD<ăU"E+LjOgF(3,<uH?r=a+ew25jZ]2V$^coS[wgHdx+w83d$l:Vtc+kg$>k/?Z&d2^[ăU"=KTL*5?0^9C^QoRp'-a-D_*JoBkTJAJjjGtV7i>t$s/Qrp;G*)k6l?5eZe9\[/KăU"DtS3n50lFpM/^kQ.z69o^^i1>U_EETobNE8<A$:AKsW_=PW&hz56x0I<Tf&F[YpăU"NFZWe%SBo5(2m-#4>ja^9,)-Iw[K5<+=qMEqu>K\O$acbNTLXtgZZQQ5<,=C<p1ăU"jxIWUYEOr5b$OsOG7%tF#RsN6'NA;PH4yCSGb+xJ;GUi]4qr%b/;T,sW-RQViVcăU"NJUR)Jo_-#7t)O?&P8P45^lP>.e<Ak5Gh4HC-&GGGQL?adPP>74;9_Pfa-\V66eăU"N]nHeuu=[qvcah3$cmo2_TCWv%b0?^&bIeja4&$vL,&QAeRTUqxmXk,2:h:;1pwăU"$atuH(Gcd$L=_fTRkK6d:.uG7sY25dIQ[T>VF2D9Mgo#oJ3QpF*6E(zM%mya#F*ăU"]I0(NkbLp<Y5R;g#ZC_<;k56lVJpl>ZmSe2RALTTiagU6tx-C5oGJ&-y%8GN;e*ăU"2agl17wrsC#)Zddy0_?9HxLwQ/SO#4Hb%0j'i2L=AL\0O6h%#bx81J3X*$jeGj)ăU"G$NLGSV-z3TLaKhv<'c2L,gcmvZM5W)Q=SUo%3('q)oMTbHNNtr[9m/efAvX=f<ăU"4Rh0vpm3OMJZ%%6oNDM-WGf;<XtrogjME$73NkqXt,n&%M_,N7&nYl-/[>d2[vLăU"1uxmB(Vxd;V<PE,cnLGxM.taycX>+:SwW8'?>cMXe.znSkp-30=dUveUNBU>.W[ăU"?vBJ9o&l&B]JteG?Y_3XcT,wkK+H#_3d4w#(o:'5+:?'W,?kk](iGp:Sedp7+0UăU"#*K0B<Yyl1RB20O_h1J_1]LR,c#AT-'KYJ[=avek?O4UE*hweVZ+m/AryKE*UiJăU"&;EYY4q;S\?4ToahTa2GoUYirC+Zx$d3+,4TDv._#LwSLsu(_wYr2),wO+ZyfdvăU">*ScQ]oNQ<LNbrfje/5gQ_.il/02u*J-2;B]nrUA\Q_I$#,x#I[TEFk/=jX1'SAăU"%t[OzFPgtyXvGII5&3,BaAD3CQSRcl:qr(GGteRbD]uOVU%bmVjrj4.$M4$gK)'ăU":1jGdJ(rKv:O<E[NCPTvt-V5W&?T#t8CsgfQpP+NzcFwcq$3NaTaWd#lcQO;/>iăU"RiW$'&N*n0ns*4WK'6ER2[5xNwO*H:]:vrlORA+3%cln(14-P#c;$rr.k%IX^#?ăU",Xs#pE#qLQshwSFOD]1MtA].RCc(Sj5Hmo+B;ZMo:/t77OY\g9#On2vFg_[*U);ăU"Qv<^Ej[9LQI$yQv-(tDc6tz#QlckBEnNLTallgaMnW,XL76$3.,I>mJ2JKDEoltăU"lm\fDbKxsMtDP.gSF$lsWMUDGYqNxHCA.MfXdt_pu5BZ*Mu8=K\x<RVYCe<=2fuăU",n5Q7'>rH<f3S*ZlXEqon8rP1OwiTm&2YwD&x<6p*.^htarCg\G8uU8T;R<S;5$ăU"7rp&43W%Mrekc5_*+k^iU=y6A$V2[NHS,EM??'uA;%mfZDOM-ZbmTDSv2ZsT:Z_ăU"^3dP\[YUVmF^XoF;P3DdEg$%v<4CVojq8)T6umct7uFw60ga#u[$&MeA]R)xNRvăU"X-IFb5c9C.Lc6,?16GjbCc,ht?.4J&XtE1]>oHNNJ]7Q\]CGSVz(Ao,.;0O6XHDăU"Xn$.Iu8-eXVR2b?ZpO^<]2/CPuLx3Zq-uvDi\A)JKT5F:;;D5)ehD=)h&MnuqASăU"dpuh]K?5&H-fH1+&JdbZm7txwmX8Ba5]i6NTwrRZoTk:N.LboOCXQA7JncjjZbqăU"bMk#$w&TX-lH8cljn:5r?:5?Y:5?:fu4\0-0x%u%p()9%%%%-.%_rZ4HqR&(&:.ăU"%%%]j%%%+%%%%ytS[grufnjp'e.Y5UtiKHCpbX4>++)Q&8LK&1W,SQ+hFI?1'1'ăU"*/.);PJUUg;^alQ'yxdT$^L]$GIMMeAtbV]bs+i^yARZp<0.bLl7Tstln>GKvZ.ăU"lXF&lhAM$oulPbs0eJ,DgdMkxV,MxKl77k(s4lnvGKvU.adGdvgc.NErPnln<pKăU"vWt.8GPk>jLpV6J/6PJ/6Ji/6bO=Qfwd;;\/hs47r.?px'Z]Q3bn?_PgdPCx&)ZăU"<fjVQqwM^RhDwcJ7lswjb]NQHdKAGB$Lg:Gf/HE2I9&wu1J/ifW2tw($?Ihp:]9ăU"cCtdGADVQ3n'ODdZ_+,+xMOJwDm4Zn/LaH)iqVz6l=V/&CEiTIQg#/e[AC7v(U5ăU"J?pSlsOTkMlRnUE+6Z#>3/P4G%$>pAr*jo>#D,QVU9?\<0T&4><#LP'8J7qK\%dăU"ayKg0Y=ul:943sU1]\%V2-^u+kT](g+:1QjV6\YOG[3H)d&,3V_r?E[(Ki/eeb3ăU"taic;\PYQmG7hL;=YiCFm5mVa?O=yQq8ed&]8ToEayrT//WrsCsg9K5kP?T0)6făU">citCcZ64CAUMw82H,sRGS0e.ch;*;+P_19vx)^Z-G5%STq]+3Yk.um081%*/0eăU"]&p$^p'aDvAMRcpw2<0)=[A%?SFG[]5I^n#sa,a>N#[SR^a-5CB_kpdCi?pWI%aăU"Ap6N:u8Y/AWjXCVPp9t*sE6daA(;fi5+\QZCSojW\&InuNDbn[wfS:IcpgsL.DUăU"b[E1vLb;d+RL4Zoj(DB(F8-vs>k5[5F2Y;bCAU.I'J<)R=?eYQWv0/Sr=9<r5--ăU"-rUPW[;r_J4g$>0i/Mt*gjO=,MqEH%S<eW(uOfiEjq(N?:ba$,Z-L5ag9bceo,uăU"k,[MCIt<xH'0.kuNc%Z),7]P$s;??Y5'>rd*wk08:V&xsC,Qd;E21AUMP%5Wc^*ăU"PSf<.$5rg,#W+8Ve^+YH4aK<;/^j<\f)U?*?bi<61Mu+%8]Y)\Q2bruEE&7Fr.NăU"As>BYpf#?b6MRPhW_LeWgd_n?%'%%;eM_Gh^1/O;eibg=(:$]2RwC%5xE;3X_KgăU"Gf?Qyjr3hcI%R7j9x=W%V&*VmgEP/.WbF>N+zI;Ndh.6L175<4&;-\?t)?k_/?%ăU"=#jr\&H=fA?YNJ\rqA,S/V+>[nABX]F+%[n>7\O#.FWTI&7gv42(BA.ivsG=Hi8ăU"FLuXMq,1Z)?sD<4(^fc<+X36J=gJ[q+((lh_hbS;UB^'nX_]ZAb-[l7.RWm.;N7ăU"67S)E5a>FaK&_q79Mv?YeZB+*bUz=<0=c=LC-<PUenK:/9RwI.,?$_ZII94g>N?ăU".aJ66RKX_>(hDh?RRT,3\ZZ(*qcra8EB=.+RhUN.,../.8kq^3[8RK+L?TJbjOjăU"0+*/8FY.,?.w$?j:bu<]p)e,?.;u<0KSgvYBD15XXV2;G_.Tp8GlHa$E#P<yO4)ăU"\H3I4G&IR0H2W/Z+,^z#8#a.EALAJ'Z5%p\1rg96hF1K+1PeL,T(\$7(.)tc)+2ăU"/JLj6>V;Qh;]qek-vPXehc$B/3GRvHg:Vj%pwXBAI3t:2;5a64sRu6aYf9\56fSăU">dmCX=bE6K1,7cH:G]/9vuDc2#*Yay=0i%]4T%9nU_;fX4#aq\8Uk$04n'xTNcQăU"=MFmQ4)2-eIgX>x&iSCZjIromSHF1MjdU2Y1r^UD'1;F?d56K1rrsmo?$XC]gSnăU"oih5G.;E<70/uo:BgKEjS(h)DguvZ2fF.6wQ<K]Oo+fsTcr)EjWf))T#'rWzLe;ăU"cBYrXE;U=*[9W9Y.J=kbQMU(Vrl*KlG0^Pl.+=FSF7aPrnIaU3$/&:6\l5+\=PFăU"S(7,hq'o^;;vG;_KOh/p1UZRZ*n1IZ(df)-+n,:a\qAQN:d;ggw5r5;e;aE1.]ZăU"a1.=\r3v35(H1]rEHQIb%KYK'$Md;ah/'kxfp%<+?U[=,0VGb^bl=RL/=KP^z>>ăU">C5#g%S&8WRagIEpp]+7Xwi4]jajKU1aAD,oNjV3Sv0DrkKfXJ*W/3VTH=FOgG;ăU"Ij5osKJ_9(4:QCoG)GJ7fE+tr),rANP\]+E5T&y]r#%;b<kiCSj^+O8h#Yz,%BYăU"oP4go),rZyhYkLne[[]VNQ[kCq0AmP:F#+[MBk>)H>7JXoSDHqG&P$P%6,k%)KOăU"G5XbEJWrpJ*HK8,d9[e[2d?^(3*yAZMuJ>IrU'g*N6*qO?82Q6=wiW#BQbB[#&2ăU"Rq=VQ/P\+r\h6QjOcI+,NNNhTPaP*fRjoR;kZce/Q/mjMuOAMRW$fWv30&-THT-ăU"&J/L&yXf[I6wVZ)mTx+rCVb\[=9m/?V?+k&k%/%KRu,WSXY132n;\)2*q^EP.z#ăU"A%%E4KXu<+i;?;_e2*]MqeV=Ko'R/5sef&-;X*/;DQgR'd/Yy[)C\QPFc#kHX\OăU"pw'g3c/hZG/Fov&/4i(ikia=:QOAW$la7a]-F6P82=l1]tOamtrQ%.rD7aB&zCCăU"ylKy^azZLibT</9?[eZ?0/>4*g5;6f9'q?r1Z'w<.f**FOd8+fI-o,cC#*DuuY%ăU"M%;#O3[3_e.Pph0EXuQ,O4]9u1\pFA%1)#>s9X/,]0$.E$$A<X_Dr;u-JebGFT)ăU")ZGd<?9dTYSKfEl>'&0g=Rpj31zU]t)?kcn[IMm+#9J&0W]53]6VS36cio%2HtNăU"n'hjjnb;/MaLQ/\on9VODLZH;tFWl)SBF5&+e$2U_rz%9MeSSb&w_vYPl%#2o?HăU"O\VHrWnAY7z;6*:5zCpV\DkNQ<H32bPLMlkac5QR8.WMnh#D?LV1^]cbMiC4&wiăU"-,rmhj[<2-*(,gG\']k54#2q[/$qA34IGmAsa]s,3&>/IAK:*uQ[Nf,ktSAhmN>ăU"U76F;J%prL+%BZ1wl2L[.HgC8unkoH/U]fnU),LAvg$$V3h;0rNCfb.&6m8E-klăU"W96cDTQA>p<$2u0S6s>(/n8djj^N?,iiwUvgh(qM\w<W#L40\n_VV[OdiI&44\=ăU"i.^&?M:tvJZ[7Pyh^%='c50NS2)^yU*n6[_>=7fbixttsoKRj0Q:/s,lhq=)V6JăU"/6MJ&JH'r,up%()9%%%%-%*M9nHR,M*A&v0%%%=E%%%0%%%%ywfs%xnyS[gfx.jăU">TESsmkV$oqDCqVQc:]CJ.7J4K,ZfMECUOs4ABE_2R?I)X_YwM2/N:_N/DoaPotăU"_V<z3*d<U]\)k,B#Yig3&DDDzzNwnN>hN]^N7,Ax*?iPgsEvnuLcW5&(HXe3+lHăU"fD:Q26D)=C-ssZLdn#'j.ac$&cX:SL='o9FCr/W7O#%_0k7)4giuf%+n?t%w[(AăU"0GXS<(V[IODWcj((EQ]'RcCl$_O#5k41?Y+%5a)66%[H/R8[<t90^21'1=Z-.9=ăU"qT'RQ.^i=2g?:03*S+UJ6x6'232=-\qP%U&>g&ZY$>i+;>()c*cSZuOfp#sDB7căU"nS31s(qem$xOtG,/il(a+6cw>7WmCLaS8I)?<;)TghG_*^[lw-2R/G/cCQV2xqtăU"fhB[189MtdjjwuzirQ.#a%Qu3HjD2Y;O9f\9W(_;[hg_,+<r3;Xo[l8wPkd#R-1ăU"l>0pgC9.AAJv1/BdWto+d$E9x$&3c\^n/L-aWZp8ch^.lwIj]-ZbHfbwCf*65MvăU"G,q?$;&vaVVA2YB#KbTyWjT/o9Qn\>/3][HimFgj7+1$gSb>*W81QkJAhQ/a/S0ăU"'qDHYi0[70-=(CGx;,LFMs4<LgdTkySkktu(XZeg-lV%vRF5/i?(DbJ;QY$)io[ăU"&rFKo<+m22^nFNf$6MXMSBM78em04WVeUFn9p2[15[gG[+.),MXD7g;A/D&a7/3ăU"])fLuFCgkNk$XRf4b7(&Dp1H&+W&k;7Y1t<?pD[GJ?/nZQ<b\#>j<tiU.Xe.'J.ăU"q.OlrARBBmJg73,Rv53Kk+mVRMLcQ&G/FZ$7hELbwH42)$XK+sZ=CpW-VfZ]V#OăU"4To9?Q&9=U4FSir&GkS,97qqmbw-Z]KiCUP\Oj5rfjGrj8[JRnu&9g?(5ZNt/B7ăU"Z%$BTVl/09vNIw/&Ju=,Ndlms/R4:/#Y(f?VzIvreodMrtQclILg816d9g^10AEăU"vaTT0v.i6.=*Fq3<bb8a5b/_M(Oc$]M1uhd*lPiEt>cn$>tIhd/XCUf'(=p0w&xăU"3[)p*U7mRJ^n7m;3a+*o12q/-h]&&>:7*,4$Eg<cU.4ub5OZCo,MXGWbi#eSc'oăU"abj5zd+BRyflKNg$+HH],>#6VVpX,zXlb3gI-4)qGA+KP]J^M[BH=A#zV7p3/X3ăU"2U%v\2??sM<O6ePhiI]oY52jh#%dk2sl*I=FYD<X3j4_.E^KiUX]ZJu;_v4$as0ăU"2gXRB85SCogd7=[3VritYqp$]oE4gvGS$Q'#Vof357<JFhcJI,U-t792RbOSnF;ăU"S.ZyAHflZ[0>0uh:'r5G&4+ch7F6IBc$-:Ml$3*\K*tePI\EjSC=/)EG/%LPvR%ăU"ENB0z58J+Ok'Q**m\my1DN=xxm[w^iF\pm-rHD(JwP<'xFg8Z87(\0[lmt1J.eCăU"'6:1dGpLU6i_SCYRDv8SGv/G6oNo\]x?TAv#kv8[Ej9[J/17:A#g8WSa9bY/B<aăU"h9ESCcTi8-BS\B2;#7;#pZk[ipR_Bc7Q1\6[:xXmFu3GfXfTvsNk^D7Y'Yn_h_(ăU"l/WPu^Hkq%KHLg41Hi1cB/jNby\W>998bR;<g%A41?,j#MB=ALKy>MDlod/uoR9ăU"(e,.+RXw2R>A^-:f*(j%H*zi)0Ao_'R<<]AfD?C4iIpV-:xF6aR-zXk7S^v#(HjăU"J6cZsAO3b/Po;;ctm$U3GfhCAWiclv7jfXnSb*Vx%6MvcRJ/AshVO_&GaO&X9CtăU"h\AM*m(&s2)''<IYOj^(=-C-f0_-V0,YaA)^j7p_FY7Ln0((F_P0l;-zb^q/lZhăU"kFPHqDEWV'B.2,%&g;CT=iGqMk]u&C-%OnOBd7F;1^I>HE=d'GjG1TXjTA<8II\ăU"T+g>2.Uc/p6W4H%Lvbk*\lXEm^(?3R0Y[Ev:xeQ*QGY,Rq[/')Qsd:+27_O(5FsăU"*HaEuVVB=^cK%HZv]mFAF]j>jvtdr1$^bw9?LnDWM*3fVi=bv_EFiB^,]&2K_xwăU"$Cfr\/\lwW*UspW^6$+I%(0KcgVepU<l5Q9Sa5f][nskw4L:V#yu34dS0H-.SkHăU":[L=A+s>&9OCW(iD_(hvSAKRYspciNsuM.Qwn=:x&0IP-2>3Y5UVHDWwJW]'p?FăU"4-_971]$RNBDEC\T_Npt')7XTU2A%*+_bN88^np7q=F$RI/;<M*#DHG;4lCzW=+ăU"CyJV37qgX?kX)/nU?q/nbi-L8#-\ZX:KjDkaU;7Lg=9D(LyO_$1;PY-%l#d6NebăU"zX9B*+m8NOLv)$9C77G1tMGKaQ]gi%2FSS]YZtv(=CcJ9K.>L#)z2zN#Pt]nRpCăU"Z_:IG?idmIC2hn:E%T<%7/1PbcWfs_oe4=nU$oPftJe7_8-K'_\'F']N13^v=$oăU"zV%Rr1s^[.PK%<]/fEHC6hziXE1.DpJ7%U0)uE(y,b<UziizbQcls;0wDYCWmlrăU"T+*]hiMQ\=qkTTk4IM47\Rxz-W,?:%d>:J<q_\7C'_TD9e\'0B)JS6Z/rU[xDnvăU"UaPCi>WEibyuFycGqW3OJc(j7k.UgYO0T6LI(0&7Ht:0WrU9kN5D_=I4V9/Fff,ăU"9pBOOE?7URHH(SrCHjEVKkET#S\I0Xzab(F8RMJY*_SM6A1ONb67aN4:),'3d9$ăU"[\1g:e7Jv0M8c$V$4h*P\3+KTFAxg2UYyGU*_i$zlN,j#Q*Et*XE;Ol(rGLsFRbăU"u/_nJ*r7+*Ty$7(CfO,W62i?WRam2q\UyKF+sCJRWp^S0K^RK=G\3L6]Z5)-jtWăU"YxK^H%cVy8N$v&fY:mfkH7v1LrtVad6\mxCK3JKsWXerNIzN64;NRN4V9vHM/_VăU"dJjj*^Uu,<.153b7OT(+,/C;SQdk;V*6dT5d;/cY=GFr*[XZ+B9b.$ve(/SQBM,ăU"QasE.$yl%bMx)OVI/c*EfWTY*,Qlg)=)7F-#/TS^:rW4np_PYQugId[YM83L7*1ăU"9N:8%;-ES]PO*7MH=4B6#'HjW<byVy4dm/pN^QQnf6ec5F3hLE2eHKX+BhF8iM:ăU"ma5(p]y$ucU;9o2hUHBFc3[=a6%J::l0XC6v_*>&K-aqMW:F>orR&\D=EpHSBUWăU"A92GKchnp;#2:l:02kZF:ja07d:O7Dni1'WqR&Uc(mp+ILt-=_Ot,qGGsOyyT(aăU"jBPml''JcDATQ]'vbApqgC>Mdvn(N$[3p^h_ISUMc(4(GsR'dJ<g4Kk_7'^GMu9ăU".t6[V+mD]fpu&nuN^01A'*?=1,q\KDH9N.h=YnC]/rp4MqtGtYe[T)h%fnNSABaăU"N_o46R4m+AjXf<C5<O-XQ>:7tWa$X/ljF:zFZI84P(lU%>Q6]1_CJK9[;R$'\kqăU"r;ATL8;Di:^xQjmr[\qkM6ZHCP#CK.Q.WuIf_s#p3g,ts*Ym^33t7iFq\kuY:J#ăU"c,O$v^OrWn*7kGZ>sBh2,)2GBecwj,4w>\nT+8SusUJp7=cBRwGC^6fR,AZx=U,ăU"EZe8[OfY<92_O#)6*S/P+>GN0gT;4S_:uIwKdu0BYfcW<r#Ov0UlaHqJ8nkRim7ăU"6nQdQ:2LDqMDrGZ73Ufbh2/OF^SC4Gdped'PeuD-IDv;Hb0=y^ZrpOHv.p%k(s.ăU"<518I##PL\Yivq&MZV;_Xr1#kAC<>_b.HJNc5j&7Ds357TB6$U[&B]+(cR[LfA-ăU"AvFChT%Ds_-8HHbkkdAO7BUgPh$b9CwnILZlT&dj3mgr$d<+qg*A2]nkJr-w/u/ăU"se%Nd^kqEbTV4aUJ8NZRYt7R+$B.xKM9D7yIwN$\\YoJDB<L2yH/EPI1x<[eM3HăU"U)aB'*$&N&up%()9%%%%-%*Q9nH]?*+0%o*%%&i6%%%0%%%#xmt&%ywxS[gfx6kăU"'VASRk976DUF]uAE2.w([mqx3HCu=EO'2$[=FLnB^/;phX_W-sWZ2s='6axfmrKăU"P)BE*m+VM]8e&XgvZrGHMc$T:drLNwWlv-)s+4-C%gCydLpdpq5nI*'LK*ku:oSăU";)dk:ODZ,RBcWa,$C:HjbKQ#pV&>.*bMTG%i6+T7/\SZ9S9l#*NQa9QtqAN)htWăU"9$Ni-B=<c.8S'[NcE[JA\gKfG<ibiMOZ-R8^5Y9?0Tm9W;_U#x0<U/:k6)[,&?găU"vaEgTPg80Sas0TTbe%/gJ5[THm[#q+6Ibk?.?N;[Qxco:H2$Bp58<qWby/[JiirăU"SpH$1'M)TZHQ')mbK5,V;3]U=fPgVRUliPU^Fim/\kFrF=R3Ep_&o&2Zg]0Mf\\ăU"R\0M]_.V<$19[-_PAWMym)yu.xaD#8*mnKH[m-Bu.+Nph0mP23SCy/xJRu1j78TăU"C_9FI>zsPhhZcT[vhB5e0j95,EH5b1rS.a5A8HIKf;s\nXcrq\56qDZ$SRIjIsPăU"9rbvMOtH_93#Dhj0KaIsgxhiidNGTF91ys/1KQ>*E)%LAaf3m[U^sQ[%H&Gq7j8ăU"5q<_=?I)a85r)cjY/#;0F0%^8._.*de5KAH?6OascaVge,'EUZi#oG8*07[bOBAăU"CA+rBTPmTaAk5cIBNbbIK]1Q5NtX5L6M.T/h]8yXPgV_YPL8ye%EPGR-qD4kL_/ăU"P:TF6w)f(bENL9t)^>DB?mQ]896i_J--_U<LNnB?<N17nlK.#IK63YpCk<8HL(EăU">OQUrHtvQ]gx9&t$=z%Ph,XMQizF7WNucR5p]xs*0dfDvF]$>wpwvXR0Ti:<Z01ăEND SUBăSUB V2ăU"';5Kf93-roLN*=kBP[;I-xg^q>]YpQ/dE&0H*.-q3fPsX,tl-aa6?p<+U/^2^qZăU"FHu<Tk3^-L..,uoUbr'%EdJD#MT2)\],Jz]aVGy^y$j['0=Ts]ppi\/r7''y(P8ăU"CZ)$W6\r:/w>-5/0]S3_,v)FEv_pJ)'WnkG'&?+KT3+hD%Vsth=f\)J51l2$fM]ăU"(5%)MOmd%9UXaV?%bn2]XeSKG1R_6B3MDQBl=v0gBq2'k3/o6t+pb.&9$O[A\tOăU"KR[_s0I2inO,4N#Di<;Q)9;l[$_pM5>\7.d'H^9AVt\/.^I9A+cB+.C7+cOBU1NăU"B1m-d'PCVjb<.g+_xnZZ?%JE\Vqy5L7.(TCZ;&^iR(U&Fie]GhoW]#nElZ+0#wNăU";xMqfIL&js5R,pau<1*rgsZ3<%wl'b];AyhF,\BN06ke'\g2d_M.Nbf_MO.bd_năU"-.b^N]uZbd7X>G$O:1T[xc6=cELPu)idhRi;BYj72KHsBd^+IN^HHhWNr(DKQp3ăU"gAyN81Nd[yxl2<#qfQV,qlj_qP58;*?3Q&F%)4-MV<vuIZ8Gj7:f?T2uS,=([ijăU"E0kAfI'i(e>nDgdmiS#oe\dYT<U*-#SS?GXqd%5,H*RPYKGanOBix$[1,uiT888ăU"JO;YjDNn;Y3TMn;nY#w4;9pv7t)Q,c;L)Qh]9cReQZ[J9IFd+-;;R5S'6H3^CIYăU";V#B>jZfhPin=#Z>YKL_Wm?kdk5tIC(Fqfq$YI#1kylXh8_%6czd<,lw:EUB)sBăU"mt&]G0=]g^+2=#D0kec0Fb$=;3:;I&]sJI/1S?Qi8Qhc./kf_2D8r0,.rGkGuDIăU"e5Qg8l6c?\hSC(#1MDN=Qao2Um?ojIT8Ij^6Z63kgV)x7B[FP9b&.up&%'9%9%%ăU"%%-.%[rZ7Hy=0'BF4%%%]j%%%-%%%%%%%%%%%E%%%%%%%%%k%wtrS%gruu%p&'9ăU"%%9%%%%-%_\rZHqAR&&:%.%%]%j%%+%%%%%%%%%%%%E%%%%l4%%%ytS%gruu%p&ăU"'9%%9%%[%-%M&9nH,OM*Av%0%%=%E%%0%%%%%%%%%&%%E%%+%O=%%%ywf%sxny%ăU"Sgfx%up&'%9%9%%%%-%*Q9nH]?*+0%o*%%&i6%%%0%%%%%%%%%&%E%.%%uI%%%xăU"m(t&yw%xSgf%xup*%+%%%%%)%)+%U%%%%>O%%%%%ăEND SUBăV2ăCLOSE:IF S=78AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMichael G. Stewart             TRANSPARENT FONT IN ANY SCREEN mikegs@juno.com                10-30-97 (10:48)       QB, QBasic, PDS        72   4702     QBF.BAS     DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"QBF.ZIP",4^6:Z&=3252:?STRING$(50,177);ăU"%up()%9%'%R-%ml8-Hwm2z_j(7%%JZ%%%-%#%%k>D=CSCVGCF*<fAeEX-vXh'7hăU"D&uWx^g*VsOE\q-KVq86R?8;5r]mAR9v*sPdFhKNxP^5>&j(HxgBnr-Vp(Mf;9uăU"sUmx\&8%(bnpQM=y5fvj)5.SDttVZm/n<[6h3+D1d.L.[u*__isG**d1+IP<(5?ăU"g&JQy)f'uH5bK?bcl$plGSVNf'aW%;cFqVS0qhL,[gewR0_Lwq*j<CsXYBcJA9qăU")[MpSvg'>hXa6c3r)<&-r)J#XF2ARI^,\FnHh%(76^'O\lAU%g$o$9OS%5.70lTăU"#B,qd/x5Yg3*cxTCF;Fh*+HvPbh38s#7K8LI+CyppYDQ*-YiXzYp'S>o'y,RLvTăU"G1fMS(i:H-D]2At-JQYQsU#)QynE:\TS#lRiq2;u_?GOB/#L0\K7(4qI^9.VbL=ăU"Q-'5nicM%2Wg._A+zNO%hCwM78V'KKa>c]_398;.3x+3pUi/Ku'RH&egB4S=xH*ăU"DuGq(B.x:/m=)eZFI,wb8QVC-$<K#bv$L/T%)[0o,eZP:r/I_5O,oOzk=QMJE:HăU"AF;L?5QS59Hnv%KRu['r0r;0A1[^.%Rq5nVxJKRF:+Le794UJVE1pSH%4qRb?oZăU"G3-lW4L?Tk[g-8+dV=4L(musbTF6ao')kv+5b9h/<20XaR<u1?Nl4Sv)kiNyGvQăU"*&tZ+L>?NN[a'PMsp.=>B_CxVRS+A=V0#6&t(&7[]?Ko;uui)NOost.K%e.kwNWăU"jTK$1:+Xv1;LKti7UqE#Bow7n8B=__:eg5VuYRrEQxZIMuLvmC(GD5rCumI0Hx2ăU"K7trHVQee;9ggcv_JjKcKk<2yDM_wcT)5gAqd2^QLdgx9ZHvLVvj*+D%pM3g0<xăU"$lhUKT>Z(aT+.J6SU<]I5)g#6H^0081d1&qMnFnk+)+h#E;B8k;+\uPKpDVWra\ăU"K=8,Ve<F7v;p2B+9Ei#h$qrq3K>gcTK43ZP<#FqF\<t3?2dK(UYPWgairXqqDa0ăU"7bkf23<7ORG4kgfV]&_sM)X=Zonhy4v0KB4'7.iKDn*utqb^cv7)M_ex._x4'x/ăU"^>rydaY7rF56b3gbBHEkxP,$pFO_B#_/F#K9gMqaMC4&UMsJ3p/2]h\OXQ-VgxNăU"r4j1Q=B$RUDBQNvS+.uuh>0OZrb?Y598;-d_P#+Af\b],#qsfG;dk\.q^d>aChMăU"KNv%(up(%)9%'#%-%V_q-HF0>DPr#-%%\%V%%,%%%%vD15S1V0Bf)h,BqEX77XyăU"Kv4l;sw?%*F)8Kxd_<Y1<*-8sRYL_a'aIwFe/&=[<8N4,%ue6^tdFWA;=W9XsbVăU"HmW#S/tXOV?l:/rtKom_v_$KDRlB3/<b\b'a[a4W>2hiJaxcw&:?#[K,2<TevKnăU"/7Za:Y$b8tlaR'1VY0^ou%R8hUFlwm=S?cM3KUQ0H6\d&<*tro^AJ2]DQ,[SJp#ăU"T,*f\dkP'tFXAMJCF0IU6=U['(qrxF2d.b:?oZW4uD%v,r>*M8*KffNKhE#,F4hăU";$hiu/woHZm>DaM3DgRN33R1sNGdGU?-MLm*GIfW]Vx8O)\&1ETJ3o;h0L2&LXdăU"ns'a_WRM5vGD\a^bBe(t9qc'1:NCAf)Gt$=qx#<oTYlCl\Y1nktPq%dGD9-S_[eăU"t/N.CDbW<x$bJvU)h6'o#h(8.CKQ>p5ftN1aE=Da<PiuHm[3b8IS_sG4Z4/?B3,ăU"2u1(m#k'&8jT:i;:B#;O1jP*)[_EEXD$7Wlt>QT?I^HS7qe*Q)J%1p.F6U[Z^w-ăU"\B.Q&(Wf_kgS(/SV\1U8ia<]5<aq*1D/]em)Dsxr.ebEn+,_:_1t<d>OZWW1L.(ăU"bL_6P1PAWlFFEJrYU]hU<*hPB'$=?o;+Z>&0E(8d0_zu%>CO,._Su*'*_\OU5>EăU"7$/-+K6kvNH)*#Hn>0Vic&)R#u;nrh:wn7[d#HcsA*Oo(*]4/CO)0C6V973oP#hăU"#hmzW3Mq+F9R:ilF20'^K+B'*SIW]1r3]axFrV,F$/V)ODv,hg/Q:#-=lKGfN*#ăU"=_l>[JTKii;*ImM5c>).S/E;>ebat1+V6Ahyhz.9GXfrbJZIIf;^<9K:-JB)/yRăU"n_fv:cDQA)G_r;6g.B3i01P:XhTXr)Dc$.=n+Qn\;g>F=6'Eb>Ft*jCpR04eHU,ăU"ug6&a-]ZTaS_5Ot7>$=xi90o:8k\SIa&,UbVoq0ZY]Cd-Ue3)h]Z4^Rk+7gn+8_ăU"dPa)D5bx>*:XIKfdCV9mDU,:UMFR.Fk\WvDuxwFHrFv;j+UVhtGJ^3Cb+U.QRAyăU"F(gvmr4?iDO;2BLy>3iojX-dV^^pRO]vK(;oS3c,<3ka_o()SAr67\E?'k&[9#năU"PZWT(vd/ET\t&Q)vA:tC7etN0\yrL&Arq;cW%z(WdjtpL2.d<9i6^yZE/TI1.dFăU"Pf0KY\=cC,DWvlcbA.=0OFAAz^m0yrZ6/LtBoAdc\+>gNs:t>YfZf07N78Ls<9VăU"6[;b>6D=12-vB>+YY7;[>Nc9gwuhV;==_?uN>))MY^DEbF^.g%sqR7s't]d^tYgăU"hb'pHm$fZr^O0*kPQ$<$n*eh?#SYb(8j7KI<)\fA%6E3CBZ('tPy:4QXowlyF4(ăU"*fU.?xHWFVPRoD)1xZ5g<(_?h%pAnXDM^B+K9?v$P&:\tY_)XMDE_dQ6KTskC_(ăU"o;iJ1jv9qhv9YBW.wBn(j7Roe7bTIV9cI)1/nd=GlNMjeg2oLDuC5X>GbLHE7k9ăU"l<*OX#,bj%p,[A=cgZQbkHBgAdJguE6;z9MbS:NW(2ZI6b9>^dv$$3NGWBqGHklăU"[kP+v$1gqTt>[ADQ;bi\,Y#$4k?hmwQW^%9k\&ICzyiD1DR5Nn6$);^aCw+]&jNăU"E&vU)/\6)$XM[^25\xy?ZH+NGte&?,J;JX4GzjQ2V\6R:jaD)\b(??Hu+NqHmEYăU"2?E,;Zm>4&jQsV[D#+?x:Zhm4zjLQ*\6cRC6Dk'\(Os?H+PqGe.?H,%ZmY4%jnLăU"f9A\56R9a<D)\hm6t8juHuY(TvrHW8)kMVVqUJuV.cpBgi?lu,v85e&B0.9$KgCăU"/1vM+oUfkC?c.2f?7n$,oa-[t*7CuS$_X+/HpGM$6R\GFEIQ4U;Sc3)$6]Mb:>\ăU"a2$4n%D1V2REi=a2]8/+t6\r1$)jL7bVd[5/)[2bc_HMzkwS$#D%n2X6X_[5g3<ăU"g8X_0(a<#73oy,3E9E3XJ?FC'UPe=V2.:tEmV63[2^ySaQfI#1&I^^3sg\]kuO9ăU"+$.;n=RWx$I,DBiY9;Z%r5Y)DdO\WRkrHHIO>]JOLK*3dl43a^Z<fS/D,[DY,g*ăU"15=P9c72AakMCZRj&[?,zRX=Iw4[OE1CPIPxTGvF\W4BuV9,&W4C(to2?-bKG*DăU"Z>Z\B].4\&]ejWpOcm]aWPvgyLXt#&-kG'4:?6bc+%Y1(+fHE/IK+q]CLNReY[WăU"?H^PqP8l^*E[IIaNnvdj6\]M+*N('SA+pL<UerkZW+#I9_qcq%2%Iqz6(.drWF/ăU"W]BmL4%jD%TXgDuds3xj(meawhbA.\7_<Er#h)8CKwNqmrq7'r)_9nG<3e.5IXHăU"sz5jMQU8Ts]a/7mf1C6+-z1/?PwFT*cr&==.1sRDv[IF0ctD<BYX_S$1Hm;_xUSăU"2qQcJ_R&-I+H2c].VQNd;zjGM0wN?,R%.YZ:Nfqb[xZ3C<Pf,7Ymj<C\_glP2cQăU"VHS<gcg5PX?kb[dG[)jgF-$Fu=&]y1B_TQ+brAZ)RSEtV(+=SOYjsf]MQn-tS_8ăU"B$.WVm+H3QcM+U%WqdYCIcX)>7M=kaWv_-rsp#b*bIs3.n'Hl_QYrl,(8CCCoANăU"%8FJzQ?FgSYM<jdWsnxB047*ZErOzzNeL:KnKRspN\\4^u0\d&08C>QGJ5j%(R-ăU"2HD.gb%u<8J-6Q5wPS<JO2tHt+0ZBTv$$M4]O5z([-E/>N]4*azGFG71$,ikTu%ăU"p&'W%09%'[%-%m_l-HwLmz_j[(%%J%Z%%-%%%%%%%%%&[%E%/&P%%%I%k>=JCSCăU"G&Cup&%'W09%%'%-L%Vq-=HF>D&Pr-%(%\V%%%,%%%%%%%%%&%Ej%/P:%(%%vD1ăU"5S1)0Bup%*+%%%%%'%.'%:%%%%X1%%%%%ăEND SUBăCLOSE:IF S=142AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               TEXT PLASMA / TAKE TWO         zapf_dingbat@juno.com          10-31-97 (19:23)       QB, PDS                525  18498    TXTPLAS2.BAS' * YOU MUST LOAD QuickBASIC 4.X WITH /L/AH TO USE THIS PROGRAM *ă' * (This code should be BASIC Professional Development System 7.1 / VBDOSă' * (comapatible.)  If you can use this read all the comments before running *ă'ă' -----Compile this for maximum speed ! (after testing)ă'ă' This first appeared in the September ABC packet (09/97)ă' Original TEXT PLASMA made by :ă' omega, omega@inorbit.comă' buzz , buzz@ddsw.nlă'ă' The major changes:ă'ă' o All screen maniplulation is either Direct Video Memory Access,ă'   controlled by INP/OUT commands, and DOS function calls !ă'ă' o Reworked for EGA & VGA video systems using 2 scan lines per byte ată'   32k -- ALL of the color video segment (I think ?!) !!!!ă'ă' o More Plasma variants & possible colors !ă'ă'ă' Disclamer: I hearby disclaim all warranties to the fitness of thisă'            program - I cannot be held liable for unpredicted eventsă'            that may happen while you used the revised version ofă'            Text Plasma. I have tested this on 2 computers and ită'            works, although I will not (cannot) garanteeă'            functionality under your computer system's environment.ă'ă'TEXT PLASMA / TAKE TWO by Zapf_DingBat@JUNO.COM (It's my Email address)ă'                          ^Please feel free to Write to me, I'll absorb youră'                           comments (by osmosis :}), but reserve any flamesă'                           for a fire !ăăDEFINT A-ZăDECLARE FUNCTION Monitor% (VSSegment)ăDECLARE SUB ColorSelect ()ăDECLARE SUB GenLookupTables ()ăDECLARE SUB Help ()ăDECLARE SUB MakeGarbage ()ăDECLARE SUB STDOUT (MESSAGETEXT$)ăDECLARE SUB txtpalget (col%, R%, G%, B%)ăDECLARE SUB txtpalset (col%, R%, G%, B%)ăă'REGTYPE.BAS - Include file for CALL INTERRUPT & CALL INTERRUPTXăTYPE RegTypeă  AX    AS INTEGERă  BX    AS INTEGERă  CX    AS INTEGERă  DX    AS INTEGERă  BP    AS INTEGERă  SI    AS INTEGERă  DI    AS INTEGERă  flags AS INTEGERă  DS    AS INTEGERă  ES    AS INTEGERăEND TYPEăăCLEAR , , 2048ă' don't change the constants !ăCONST PI = 3.14159265358979#, Spaces$ = "  "ăDIM SHARED Registers AS RegType, SinusLimit, TextPlasVariant, ColoringMethodăDIM SHARED COSINUS#(0 TO 278), COSINUSx(0 TO 278), RAND(0 TO 278)ăă'test for helpăIF COMMAND$ = "?" OR COMMAND$ = "/?" THEN Helpă'test video capabilityăSELECT CASE Monitor%(SSeg)ă       CASE 4, 5ă         'set screen modeă         Registers.AX = &H3ă         CALL InterruptX(&H10, Registers, Registers)ă         OUT &H3D4, 9: OUT &H3D5, 1  'Fourteen Scan linesă         Registers.AX = &H1003 'turn blinking off !ă         Registers.BX = &H0ă         CALL InterruptX(&H10, Registers, Registers)ă       CASE ELSEă           STDOUT "VGA or EGA Graphics adapter is required to run Text Plasma." + CHR$(10) + CHR$(13)ăEND SELECTăă'Seed the psuedo-random number generator with the current time.ăDEF SEG = &H40ăNewSeed& = PEEK(&H6C) + PEEK(&H6D) * 256& + PEEK(&H6E) * 65536ăDEF SEGăRANDOMIZE NewSeed&ăă' blank screenăFOR Blank = 0 TO 63ă    txtpalset Blank, 0, 0, 0ăNEXTăăTextPlasVariant = INT(RND * 10) ' select Text Plasma VariantăGenLookupTablesăMakeGarbage 'create random pixelsăColoringMethod = INT(RND * 13) ': ColoringMethod = 13 'used for testingăColorSelect 'select colorsăăWAVESIDE1 = RND * 1: IF WAVESIDE1 = 0 THEN WAVESIDE1 = 1: 'prevent 0 movement initiallyăWAVESIDE2 = RND * 3: IF WAVESIDE2 = 0 THEN WAVESIDE2 = 1: ' ""ăWAVESIDE3 = RND * 2: IF WAVESIDE3 = 0 THEN WAVESIDE3 = 1: ' ""ăR1 = RND * 5: IF R1 = 0 THEN R1 = 1: 'prevent 0 movement initiallyăR2 = RND * 15: IF R2 = 0 THEN R2 = 1: ' ""ăR3 = RND * 35: IF R3 = 0 THEN R3 = 1: ' ""ăMethod = INT(RND * 6) 'choose form of sinus clippingăDEF SEG = &HB800ăDOă    WAVE1 = WAVE1 + WAVESIDE1ă    IF WAVE1 >= SinusLimit THENă        WAVE1 = 0ă        SELECT CASE Methodă         CASE IS = 0ă          R1 = (R1 + 1) AND 255ă         CASE IS = 1ă          R1 = (R1 + 1) OR 255ă         CASE IS = 2ă          R1 = (R1 + 1) XOR 255ă         CASE IS = 3ă          R1 = (R1 + 1) IMP 255ă         CASE IS = 4ă          R1 = (R1 + 1) EQV 255ă         CASE IS = 5ă          R1 = (R1 + 1) MOD 255ă         CASE IS = 6ă          R1 = (R1 + 1) 'basică         END SELECTă         'prevent ubound array overflowă         IF R1 < -278 THEN R1 = 0ă         IF R1 > 278 THEN R1 = 278ă         WAVESIDE1 = RAND(ABS(R1))ă    END IFă    WAVE2 = WAVE2 + WAVESIDE2ă    IF WAVE2 >= SinusLimit THENă        WAVE2 = 0ă        SELECT CASE Methodă         CASE IS = 0ă          R2 = (R2 + 2) AND 255ă         CASE IS = 1ă          R2 = (R2 + 2) OR 255ă         CASE IS = 2ă          R2 = (R2 + 2) XOR 255ă         CASE IS = 3ă          R2 = (R2 + 2) IMP 255ă         CASE IS = 4ă          R2 = (R2 + 2) EQV 255ă         CASE IS = 5ă          R2 = (R2 + 2) MOD 255ă         CASE IS = 6ă          R2 = (R2 + 2)ă         END SELECTă         'prevent ubound array overflowă         IF R2 < -278 THEN R2 = 0ă         IF R2 > 278 THEN R2 = 278ă         WAVESIDE2 = RAND(ABS(R2))ă    END IFă    WAVE3 = WAVE3 + WAVESIDE3ă    IF WAVE3 >= SinusLimit THENă        WAVE3 = 0ă        SELECT CASE Methodă         CASE IS = 0ă          R3 = (R3 + 2) AND 255ă         CASE IS = 1ă          R3 = (R3 + 2) OR 255ă         CASE IS = 2ă          R3 = (R3 + 2) XOR 255ă         CASE IS = 3ă          R3 = (R3 + 2) IMP 255ă         CASE IS = 4ă          R3 = (R3 + 2) EQV 255ă         CASE IS = 5ă          R3 = (R3 + 2) MOD 255ă         CASE IS = 6ă          R3 = (R3 + 2)ă         END SELECTă         'prevent ubound array overflowă         IF R3 < -278 THEN R3 = 0ă         IF R3 > 278 THEN R3 = 278ă         WAVESIDE3 = RAND(ABS(R3))ă    END IFă    FOR I = 1 TO 2ă    WAIT &H3DA, 8, 8ă    WAIT &H3DA, 8, 0ă    NEXT Iă'**********************************DON'T CHANGE !!***************************************ă    Position = 1ă    FOR Y = 0 TO 199ă        E = COSINUSx(Y + WAVE1)ă        FOR X = 0 TO 79ă              col = COSINUSx(X + WAVE2) + E + COSINUSx(X + WAVE3) + COSINUSx(X + Y)ă            POKE Position, colă            Position = Position + 2ă        NEXT Xă    NEXT Yă'****************************************************************************************     ăă     XXXX$ = UCASE$(INKEY$)ă'    Scancode = INP(96) 'a cheap easy way to recognize scan codes - unusedă    IF XXXX$ = CHR$(27) THEN 'Exită        Registers.AX = &H1003 'turn blinking on !ă        Registers.BX = &H1ă        CALL InterruptX(&H10, Registers, Registers)ă        'set screen modeă        Registers.AX = &H0ă        CALL InterruptX(&H10, Registers, Registers)ă        Registers.AX = &H3ă        CALL InterruptX(&H10, Registers, Registers)ă        EXIT DOă    END IFă    IF XXXX$ = CHR$(71) THEN 'New Garbageă       MakeGarbageă       DEF SEG = &HB800ă    END IFă    IF XXXX$ = CHR$(73) THEN 'Invert Paletteă       FOR IC = 0 TO 63ă        OUT &H3C7, IC: red = INP(&H3C9): green = INP(&H3C9): Blue = INP(&H3C9)ă        OUT &H3C8, IC: OUT &H3C9, NOT red: OUT &H3C9, NOT green: OUT &H3C9, NOT Blueă       NEXT ICă    END IFă    IF XXXX$ = CHR$(78) THEN 'New paletteă       ColoringMethod = INT(RND * 13)ă       'ColoringMethod = 13 'used for testingă       ColorSelectă    END IFă    IF XXXX$ = CHR$(84) THEN 'New Tablesă       'comment the line below if want a different sinus limită       TextPlasVariant = INT(RND * 10) ' select Text Plasma Variantă       GenLookupTablesă    END IFă    IF XXXX$ = CHR$(127) THEN 'Restartă        DEF SEGă        Registers.AX = &H1003 'turn blinking on !ă        Registers.BX = &H1ă        CALL InterruptX(&H10, Registers, Registers)ă        'set screen modeă        Registers.AX = &H0ă        CALL InterruptX(&H10, Registers, Registers)ă        Registers.AX = &H3ă        CALL InterruptX(&H10, Registers, Registers)ă        CLEAR : RUNă    END IFă    IF XXXX$ = CHR$(22) THEN 'Variable dump - used for debuggingă        DEF SEGă        Registers.AX = &H1003 'turn blinking on !ă        Registers.BX = &H1ă        CALL InterruptX(&H10, Registers, Registers)ă        'set screen modeă        Registers.AX = &H0ă        CALL InterruptX(&H10, Registers, Registers)ă        Registers.AX = &H3ă        CALL InterruptX(&H10, Registers, Registers)ă        STDOUT "Variable Dump" + CHR$(10) + CHR$(13) + CHR$(10)ă        STDOUT "NewSeed&=" + LTRIM$(STR$(NewSeed&)) + Spaces$ + "TextPlasVariant=" + LTRIM$(STR$(TextPlasVariant)) + Spaces$ + "SinusLimit=" + LTRIM$(STR$(SinusLimit)) + CHR$(10) + CHR$(13)ă        STDOUT "WAVESIDE1=" + LTRIM$(STR$(WAVESIDE1)) + Spaces$ + "WAVESIDE2=" + LTRIM$(STR$(WAVESIDE2)) + Spaces$ + "WAVESIDE3=" + LTRIM$(STR$(WAVESIDE3)) + CHR$(10) + CHR$(13)ă        STDOUT "R1=" + LTRIM$(STR$(R1)) + Spaces$ + "R2=" + LTRIM$(STR$(R2)) + Spaces$ + "R3=" + LTRIM$(STR$(R3)) + CHR$(10) + CHR$(13)ă        STDOUT "WAVE1=" + LTRIM$(STR$(WAVE1)) + Spaces$ + "WAVE2=" + LTRIM$(STR$(WAVE2)) + Spaces$ + "WAVE3=" + LTRIM$(STR$(WAVE3)) + CHR$(10) + CHR$(13)ă        STDOUT "X=" + LTRIM$(STR$(X)) + Spaces$ + "Y=" + LTRIM$(STR$(Y)) + Spaces$ + "E=" + LTRIM$(STR$(E)) + CHR$(10) + CHR$(13)ă        STDOUT "Position=" + LTRIM$(STR$(Position)) + Spaces$ + "Method=" + LTRIM$(STR$(Method)) + Spaces$ + "Color=" + LTRIM$(STR$(col)) + CHR$(10) + CHR$(13)ă        STDOUT "ColoringMethod=" + LTRIM$(STR$(ColoringMethod)) + CHR$(10) + CHR$(13)ă        ENDă    END IFăă' Auto Reinit - prevent 'zero motion' side effect of sinus clippingăIF WAVESIDE1 = 0 AND WAVESIDE2 = 0 AND WAVESIDE3 = 0 AND WAVE1 = 0 AND WAVE2 = 0 AND WAVE3 = 0 THENă   WAVESIDE1 = RND * 1: WAVE1 = RND * 1ă   WAVESIDE2 = RND * 3: WAVE2 = RND * 3ă   WAVESIDE3 = RND * 2: WAVE3 = RND * 2ă   IF WAVESIDE1 = 0 AND WAVE1 = 0 THEN WAVESIDE1 = 1: WAVE1 = 1ă   IF WAVESIDE2 = 0 AND WAVE2 = 0 THEN WAVESIDE2 = 1: WAVE2 = 1ă   IF WAVESIDE3 = 0 AND WAVE3 = 0 THEN WAVESIDE3 = 1: WAVE3 = 1ăEND IFăLOOPăDEF SEGăSTDOUT "TEXT PLASMA made by: Omega, omega@inorbit.com / Buzz, buzz@ddsw.nl" + CHR$(10) + CHR$(13)ăSTDOUT "Heavly modifided by: Zapf_DingBat@JUNO.COM" + CHR$(10) + CHR$(13)ăENDăăSUB ColorSelectăSELECT CASE ColoringMethodă  CASE IS = 0ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 15ă     txtpalset I, I - R, I - G, I - Bă    NEXT Iă  CASE IS = 1ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 6ă     txtpalset I, I * R, I * G, I * Bă    NEXT Iă    FOR I = 7 TO 15ă     txtpalset I, (15 - I) * R, (15 - I) * G, (15 - I) * Bă    NEXT Iă  CASE IS = 2ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 6ă     txtpalset I, (I / R) * 127, (I / G) * 127, (I / B) * 127ă    NEXT Iă    FOR I = 7 TO 15ă     txtpalset I, ((15 - I) / R), ((15 - I) / G), ((15 - I) / B)ă    NEXT Iă  CASE IS = 3ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 6ă     txtpalset I, (I / R), (I / G), (I / B)ă    NEXT Iă    FOR I = 7 TO 15ă     txtpalset I, ((15 - I) / R) * 127, ((15 - I) / G) * 127, ((15 - I) / B) * 127ă    NEXT Iă  CASE IS = 4ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 6ă     txtpalset I, (I / R) * 127, (I / G) * 127, (I / B) * 127ă    NEXT Iă    FOR I = 7 TO 15ă     txtpalset I, ((15 - I) / R) * 127, ((15 - I) / G) * 127, ((15 - I) / B) * 127ă    NEXT Iă  CASE IS = 5ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 15ă     txtpalset I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .11: G2 = (G + 1) * I ^ .22: B2 = (B + 1) * I ^ .33ă    NEXT Iă  CASE IS = 6ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 15ă     txtpalset I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .22: G2 = (G + 1) * I ^ .33: B2 = (B + 1) * I ^ .11ă    NEXT Iă  CASE IS = 7ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 15ă     txtpalset I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .33: G2 = (G + 1) * I ^ .11: B2 = (B + 1) * I ^ .22ă    NEXT Iă  CASE IS = 8ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 15ă     txtpalset I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă    NEXT Iă  CASE IS = 9 'GRAY 1ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 15ă     txtpalset I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 10 'GRAY 2ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 15ă     txtpalset I, XC, XC, XCă     R2 = ((R + 1 + I) * .11) ^ 2: G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 11 'GRAY 3ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 15ă     txtpalset I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)) ^ 2: B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 12 'GRAY 4ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 15ă     txtpalset I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3)) ^ 2ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 13ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 15ă     txtpalset I, XC \ 2, XC \ 4, XC \ 8ă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3)) ^ 2ă     XC = INT(R2 + G2 + B2)ă    NEXT IăEND SELECTăEND SUBăăSUB GenLookupTablesă' compute look up tablesăDOăSinusLimit = INT(RND * 80)  ' not make bigger than 80, it doesn't work !ăLOOP UNTIL SinusLimit >= 30 'this is to prevent most visual distortionăFOR C = 0 TO 278ă    ' We calculate these variants double precisionă    SELECT CASE TextPlasVariantă     CASE IS = 0ă      COSINUS#(C) = COS(C * 2 * PI / SinusLimit) * 16 + 16 'Originală     CASE IS = 1ă      COSINUS#(C) = SIN(C * 2 * PI / SinusLimit) * 16 + 16 'Variant 1ă     CASE IS = 2ă      COSINUS#(C) = (SIN(C * 2 * PI / SinusLimit) * 16 + 16 + COS(C * 2 * PI / SinusLimit) * 16 + 16) \ 4 'Variant 2ă     CASE IS = 3ă      COSINUS#(C) = (SIN(C * 2 * PI / SinusLimit) * 16 + 16 - COS(C * 2 * PI / SinusLimit) * 16 + 16) \ 4 'Variant 3ă     CASE IS = 4ă      COSINUS#(C) = (SIN(C * 2 * PI / SinusLimit) * 16 + 16 * COS(C * 2 * PI / SinusLimit) * 16 + 16) \ 4 'Variant 4ă     CASE IS = 5ă      COSINUS#(C) = (SIN(C * 2 * PI / SinusLimit) * 4 / COS(C * 2 * PI / SinusLimit) * 4)   'Variant 5ă     CASE IS = 6ă      COSINUS#(C) = TAN(C * 2 * PI / SinusLimit) * 2  'Variant 6ă     CASE IS = 7ă      COSINUS#(C) = SIN(C * PI / SinusLimit) * 32 + 16 'Variant 7ă     CASE IS = 8ă      COSINUS#(C) = SIN(C * PI / SinusLimit) * 32 - 16 'Variant 8ă     CASE IS = 9ă      COSINUS#(C) = COS(C * PI / SinusLimit) * 32 + 16 'Variant 9ă     CASE IS = 10ă      COSINUS#(C) = COS(C * PI / SinusLimit) * 32 - 16 'Variant 10ă    END SELECTă    ' clip values to within Short Integer ranges (2 bytes)ă    ' limit to avaliable colorsă    IF COSINUS#(C) < -32768 THEN COSINUS#(C) = -255ă    IF COSINUS#(C) > 32767 THEN COSINUS#(C) = 255ă    ' put result in to integer arrayă    COSINUSx(C) = INT(COSINUS#(C))ăNEXT CăăFOR C = 0 TO 278ă    RAND(C) = INT(RND * 4) + 1ăNEXT CăEND SUBăăSUB HelpăSTDOUT "TEXT PLASMA made by: Omega, omega@inorbit.com / Buzz, buzz@ddsw.nl" + CHR$(10) + CHR$(13)ăSTDOUT "Heavly modifided by: Zapf_DingBat@JUNO.COM" + CHR$(10) + CHR$(13) + CHR$(10)ăăSTDOUT "Press G for new bit garbage." + CHR$(10) + CHR$(13)ăSTDOUT "Press I for a reversed palette." + CHR$(10) + CHR$(13)ăSTDOUT "Press N for a palette." + CHR$(10) + CHR$(13)ăSTDOUT "Press T for new a plasma table." + CHR$(10) + CHR$(13)ăSTDOUT "Press CTRL-Backspace to restart TEXT PLASMA." + CHR$(10) + CHR$(13)ăSTDOUT "Press ESC to exit." + CHR$(10) + CHR$(13) + CHR$(10)ăăSTDOUT "L8tr kids !" + CHR$(10) + CHR$(13)ăENDăEND SUBăăSUB MakeGarbageăFOR StringAdd = 0 TO 511ăZ$ = Z$ + CHR$(CINT(RND * 255))ăNEXT StringAddăRegisters.AX = &H1100 'AX tells call DOS set font routineăRegisters.BX = &H200  'BX tells DOS to store 08 lines per char and font bank 0ăRegisters.CX = &H100  'CX tells DOS to change all charactersăRegisters.DX = 0      'DX tells DOS which char to start fromă' for PDS change VARSEG to SSEGăRegisters.ES = VARSEG(Z$) ' ES tells DOS where the segment isăRegisters.BP = SADD(Z$)   ' BP tells DOS where the address isăCALL InterruptX(&H10, Registers, Registers) ' call int 10 and make changesăZ$ = ""ăDEF SEG = &HB800ăFOR I = 0 TO 31998 STEP 2ă     'POKE i, 32ă     POKE I, CINT(RND * 255)ăNEXT IăDEF SEGăEND SUBăăFUNCTION Monitor% (VSSegment)ăDEF SEG = 0              'first see if it's color or monoăVSSegment = &HB800         'assume colorăăIF PEEK(&H463) = &HB4 THENăă  VSSegment = &HB000       'assign the monochrome segmentă  Status = INP(&H3BA)    'get the current video statusă  FOR X = 1 TO 30000     'test for a Hercules 30000 timesă    IF INP(&H3BA) <> Status THENă      Monitor% = 2       'the port changed, it's a Hercă      EXIT FUNCTION      'all doneă    END IFă  NEXTă  Monitor% = 1           'it's a plain monochromeăăELSE                     'it's some sort of color monitorăă  Registers.AX = &H1A00     'first test for VGAă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.AX AND &HFF) = &H1A THENă    Monitor% = 5         'it's a VGAă    EXIT FUNCTION        'all doneă  END IFăă  Registers.AX = &H1200     'now test for EGAă  Registers.BX = &H10ă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.BX AND &HFF) = &H10 THENă    Monitor% = 3         'if BL is still &H10 it's a CGAă  ELSEă    Monitor% = 4         'otherwise it's an EGAă  END IFăEND IFăDEF SEGăEND FUNCTIONăăSUB STDOUT (MESSAGETEXT$)ă'writes text to dos's standard outputăRegisters.AX = &H4000ăRegisters.BX = &H1ăRegisters.CX = LEN(MESSAGETEXT$)ă' for PDS change VARSEG to SSEGăRegisters.DS = VARSEG(MESSAGETEXT$)ăRegisters.DX = SADD(MESSAGETEXT$)ăCALL InterruptX(&H21, Registers, Registers)ăEND SUBăăSUB txtpalget (col, R, G, B)ăC = colăSELECT CASE CăCASE 6ă C = 20ăCASE 8 TO 15ă C = C + 48ăEND SELECTăOUT &H3C7, C: R = INP(&H3C9): G = INP(&H3C9): B = INP(&H3C9)ăEND SUBăăSUB txtpalset (col, R, G, B)ăC = colăSELECT CASE CăCASE 6ă C = 20ăCASE 8 TO 15ă C = C + 48ăEND SELECTăOUT &H3C8, C: OUT &H3C9, R: OUT &H3C9, G: OUT &H3C9, BăEND SUBăJohn T. Pope                   HOLIDAY SCREEN SAVER           74676.2453@Compuserve.com      12-06-93 (00:00)       QB, QBasic, PDS        398  9147     HOLIDAY.BAS ' Holiday Screen Saveră' by John T. Papeă' CompuServe 74676,2453ă' GEnie J.PAPE1ă' 12/06/93ă' holiday.basă' requires MicroSoft QBasicăăDECLARE SUB treelights ()                       'subroutinesăDECLARE SUB makehouse ()ăDECLARE SUB tree (tx%, ty%)ăDECLARE SUB lightsoff ()ăDECLARE SUB lightson ()ăDECLARE SUB delay ()ăDECLARE SUB pause ()ăDECLARE SUB playmusic ()ăDECLARE SUB Initializeflakes ()ăăDIM SHARED FlakeX(200) AS INTEGERăDIM SHARED FlakeY(200) AS INTEGERăDIM FlakeEraseX(200) AS INTEGERăDIM FlakeEraseY(200) AS INTEGERăDIM FlakeColor(200) AS INTEGERăăDO                                              'configure PC speakerăSCREEN 0                                        'text 80x25ăCLSăLOCATE 1, 26ăPRINT "PC Speaker Sound Setup"ăLOCATE 10, 30ăPRINT "1 - Sound On"ăLOCATE 12, 30ăPRINT "2 - Sound Off"ăLOCATE 16, 23ăPRINT "Type selection then [ENTER] ";           'get user inputăINPUT A$ăIF A$ = "1" OR A$ = "2" THEN EXIT DOăLOOPăăIF A$ = "1" THEN musicon% = 1ăăDO WHILE INKEY$ = ""                            'main loopăSCREEN 13                                       'mcga/vga 320x200x256ăRANDOMIZE TIMER                                 'initializeăCounter% = 0ăty% = 99ăăCOLOR 15                                        'draw groundăLINE (0, 99)-(319, 99)ăPAINT (1, 100), 15, 15ăăFOR tl% = 1 TO 3ătx% = 4ăDO                                              'make 3 rows of treesăCALL tree(tx%, ty%)ătx% = tx% + (INT(RND * 3) + 5)ăLOOP WHILE tx% < 320ăty% = ty% + tl%ăNEXT tl%ăămakehouseăInitializeflakesăăDOăăFOR i% = 1 TO 200ăFlakeColor(i%) = POINT(FlakeX(i%), FlakeY(i%))ăPSET (FlakeX(i%), FlakeY(i%)), 15ăNEXT i%ăăIF INKEY$ <> "" THEN SYSTEM                     'exit to systemăăIF Counter% MOD 10 = 0 THEN lightson            'Christmas tree lightsăăIF Counter% MOD 15 = 0 THEN lightsoffăăIF Counter% MOD 100 = 0 THEN Drift% = Drift% + INT(RND * 5) - 2ăIF Drift% > 8 THEN Drift% = 8ăIF Drift% < -8 THEN Drift% = -8ăăCOLOR 15ăăsx% = INT(RND * 320)                            'accumulating snow on treesăsy% = INT(RND * 20)ăIF Counter% MOD 5 = 0 THEN PSET (sx%, sy% + 79)ăădx% = INT(RND * 79) + 41                        'accumulating snow on driveădy% = INT(RND * 65) + 135ăPSET (dx%, dy%)ăărx% = INT(RND * 89)                             'accumulating snow on roofăry% = INT(RND * 11)ăIF Counter% MOD 3 = 0 THEN PSET (rx% + 116, ry% + 109)ă                                               ă                                                'accumulating snow on stepsăăIF Counter% MOD 24 = 0 THEN PSET ((INT(RND * 17) + 152), 142 + INT(RND * 6))ăă                                                'accumulating snow on sidewalkăăIF Counter% MOD 24 = 0 THEN PSET ((INT(RND * 68) + 119), 148 + INT(RND * 3))ăăFOR i% = 1 TO 200ăFlakeEraseX(i%) = FlakeX(i%)ăFlakeEraseY(i%) = FlakeY(i%)ăNEXT i%ăăăFOR i% = 1 TO 200ăFlakeY(i%) = FlakeY(i%) + 2ăFlakeX(i%) = FlakeX(i%) + Drift%ăIF FlakeY(i%) > 199 THEN FlakeY(i%) = FlakeY(i%) - 200ăIF FlakeX(i%) > 319 THEN FlakeX(i%) = FlakeX(i%) - 320ăIF FlakeX(i%) < 0 THEN FlakeX(i%) = 320 + FlakeX(i%)ăNEXT i%ăăFOR i% = 1 TO 200ăPSET (FlakeEraseX(i%), FlakeEraseY(i%)), FlakeColor(i%)ăNEXT i%ăăCounter% = Counter% + 1                         'counter incrementăăIF Counter% = 10000 THEN EXIT DO                'enough snowăăLOOPăăpauseăăCOLOR 0ăLINE (130, 125)-(145, 135), , BF                'lights out in picture windowăăpauseăăLINE (170, 125)-(180, 135), , BF                'lights out small window 1ăăpauseăăLINE (185, 125)-(195, 135), , BF                'lights out small window 2ăăpauseăăFOR f% = 16 TO 31                               'fade in moonăCOLOR f%ăCIRCLE (159, 29), 30ăPAINT (160, 50), f%, f%ădelayăNEXT f%ăăLOCATE 9, 12                                    'text messageăCOLOR 43ăPRINT "Season's Greetings"ăăIF musicon% THEN playmusic                      'play music or notăăsx1% = 122                                      'chimney smokeăsx2% = 124ăsy% = 104ăăFOR f% = 103 TO 0 STEP -1ăCOLOR 24ăIF POINT(sx1%, f%) = 43 THEN COLOR 43ăPSET (sx1%, f%)ăCOLOR 24ăIF POINT(sx2%, f%) = 43 THEN COLOR 43ăPSET (sx2%, f%)ăsx1% = sx1% + INT(RND * 3) - 1ăsx2% = sx2% + INT(RND * 3) - 1ădelayăNEXT f%ăăFOR f% = 1 TO 5                                 'long pauseăpauseăNEXT f%ăăCLSăăLOOP                                            'restartăăSYSTEM                                          'exit to systemăăSUB delayăăFOR increment% = 1 TO 5000ăNEXT increment%ăăEND SUBăăSUB InitializeflakesăăFOR i% = 1 TO 200ăăDOăBadflake% = 0ăFlakeX(i%) = INT(RND * 319) + 1ăFlakeY(i%) = INT(RND * 199) + 1ăăFOR j% = 1 TO i% - 1ă'IF FlakeX(i%) = FlakeX(j%) AND FlakeY(i%) = FlakeY(j%) THEN Badflake% = 1ăIF FlakeX(i%) = FlakeX(j%) THEN Badflake% = 1ăNEXT j%ăăIF NOT Badflake% = 1 THEN EXIT DOăLOOPăăNEXT i%ăăEND SUBăăSUB lightsoffăăCOLOR 119ăăPSET (134, 134)ăPSET (138, 134)ăPSET (141, 134)ăPSET (136, 132)ăPSET (140, 132)ăPSET (138, 129)ăăEND SUBăăSUB lightsonăăCOLOR 10                                        'tree lights onăPSET (134, 134)ăCOLOR 11ăPSET (138, 134)ăCOLOR 12ăPSET (141, 134)ăCOLOR 13ăPSET (136, 132)ăCOLOR 14ăPSET (140, 132)ăCOLOR 15ăPSET (138, 129)ăăEND SUBăăSUB makehouseăăCOLOR 0ăLINE (120, 120)-(200, 150), , B                 'draw houseăPAINT (160, 130), 4, 0ăăCOLOR 0                                         'draw roofăLINE (115, 110)-(205, 120), , BăPAINT (130, 115), 21, 0ăăCOLOR 0                                         'draw chimneyăLINE (120, 105)-(125, 110), , BăPAINT (122, 108), 4, 0ăăLINE (130, 125)-(145, 135), , B                 'picture windowăLINE (170, 125)-(180, 135), , B                 'small window 1ăLINE (185, 125)-(195, 135), , B                 'small window 2ăLINE (155, 125)-(165, 140), , B                 'front doorăLINE (125, 125)-(128, 135), , B                 'left shutter frameăLINE (147, 125)-(150, 135), , B                 'right shutter frameăăăPAINT (175, 130), 92, 0                         'light in windowsăPAINT (190, 130), 92, 0ăPAINT (135, 130), 92, 0ăPAINT (126, 130), 23, 0                         'shutter fillsăPAINT (148, 130), 23, 0ăăLINE (175, 125)-(175, 135)                      'window trimăLINE (170, 130)-(180, 130)ăLINE (190, 125)-(190, 135)ăLINE (185, 130)-(195, 130)ăLINE (175, 125)-(170, 130)ăLINE (175, 125)-(180, 130)ăLINE (190, 125)-(185, 130)ăLINE (190, 125)-(195, 130)ăăPAINT (160, 130), 23, 0                         'front door fillăPAINT (171, 126), 54, 0                         'bedroom curtainsăPAINT (178, 126), 54, 0ăPAINT (186, 126), 60, 0ăPAINT (193, 126), 60, 0ăăCOLOR 0                                         'porch lightsăPSET (153, 125)ăPSET (167, 125)ăăCOLOR 14ăPSET (153, 126)ăPSET (167, 126)ăăCOLOR 15                                        'ground in front of houseăCIRCLE (160, 157), 71, 15, , , .2ăPAINT (160, 145), 15, 15ăăCOLOR 4ăLINE (155, 141)-(165, 141)                      'stepsăLINE (154, 143)-(166, 143)ăLINE (153, 145)-(167, 145)ăLINE (152, 147)-(168, 147)ăăCOLOR 113ăLINE (154, 142)-(166, 142)ăLINE (153, 144)-(167, 144)ăLINE (152, 146)-(168, 146)ăăCIRCLE (160, 130), 2, 2                         'wreathăăCOLOR 119                                       'Christmas TreeăFOR f% = 134 TO 141ăPSET (f%, 134)ăNEXT f%ăăFOR f% = 134 TO 141ăPSET (f%, 133)ăNEXT f%ăăFOR f% = 135 TO 140ăPSET (f%, 132)ăNEXT f%ăăFOR f% = 135 TO 140ăPSET (f%, 131)ăNEXT f%ăăFOR f% = 136 TO 139ăPSET (f%, 130)ăNEXT f%ăăFOR f% = 136 TO 139ăPSET (f%, 129)ăNEXT f%ăăPSET (137, 128)ăPSET (138, 128)ăPSET (137, 127)ăPSET (138, 127)ăăCOLOR 0                                         'drivewayăLINE (120, 140)-(105, 140)ăLINE (120, 135)-(90, 135)ăLINE (105, 140)-(90, 199)ăLINE (90, 135)-(40, 199)ăPAINT (60, 195), 7, 0ăCOLOR 15ăLINE (119, 140)-(106, 140)ăăCOLOR 7                                         'sidewalkăLINE (168, 148)-(100, 148)ăLINE (168, 149)-(100, 149)ăLINE (168, 150)-(102, 150)ăăCOLOR 0ăLINE (151, 148)-(103, 148)ăLINE (169, 148)-(169, 150)ăăEND SUBăăSUB pauseăăFOR f% = 1 TO 50ădelayăIF INKEY$ <> "" THEN SYSTEMăNEXT f%ăăEND SUBăăSUB playmusicăăPLAY "MB ML L8 O2"                              'Tis the season...ăPLAY "A. L16 G L8 G- E D E G- L16 D . ."ăPLAY "E G- G E L8 G- E L4 D D-D ."ăăEND SUBăăSUB setsoundăăăEND SUBăăSUB tree (tx%, ty%)                             'make pine treesăătc% = INT(RND * 9) + 116                        'select tree colorăăDOătt% = INT(RND * 9)                              'tree trunk colorăIF tt% = 0 OR tt% = 6 OR tt% = 8 THEN EXIT DOăLOOPăăCOLOR tc%                                       'draw treeăLINE (tx%, ty% - 20)-(tx% - 7, ty% - 4)ăLINE (tx% - 7, ty% - 4)-(tx% + 7, ty% - 4)ăLINE (tx% + 7, ty% - 4)-(tx%, ty% - 19)ăPAINT (tx%, ty% - 18), tc%, tc%ăPAINT (tx% - 3, ty% - 8), tc%, tc%ăPAINT (tx% + 3, ty% - 8), tc%, tc%ăCOLOR tt%ăLINE (tx%, ty%)-(tx%, ty% - 5)ăăEND SUBăTika Carr                      NOEL CANDLE AND FLAMES         t.carr@pobox.com               06-20-97 (00:00)       QB, QBasic, PDS        65   1771     FLAME.BAS   ' Fire and Flamesă' by Andrew L. Ayers (andrewa@indirect.com)ă' April 30, 1997ă'ă' Modified by Tika Carr (t.carr@pobox.com) on June 20, 1997ăăDEFINT A-ZăDECLARE SUB Flame (ix%, iy%)ăăSCREEN 13ăăRANDOMIZE (-TIMER)ăă'Make some random starsăFOR i = 0 TO 100ă  x = INT(RND * 319): y = INT(RND * 199): c = 80 + INT(RND * 8)ă  PSET (x, y), căNEXTăă' Make a red candleăLINE (135, 83)-(175, 181), 16, BFăă' Put in text & color in text background (messy, I know...)ăCOLOR 68: LOCATE 15, 20: PRINT "N": LOCATE 16, 20: PRINT "O"ăLOCATE 17, 20: PRINT "E": LOCATE 18, 20: PRINT "L"ăLINE (151, 111)-(160, 144), 0, B: LINE (150, 110)-(160, 145), 68, BăPAINT (159, 114), 16, 68: LINE (150, 110)-(160, 145), 16, BăPAINT (155, 123), 16, 68ăă'Light the candle :)ăFlame 155, 80ăăăPALETTE: SCREEN 0, 0, 0, 0: WIDTH 80: COLOR 7, 0: CLS : ENDăăSUB Flame (ix, iy)ăă' *** Original palette routine by PHOBIA ***ăFOR slot = 0 TO 63ă  ' Fade from black to red (slots 0 - 15)ă  OUT &H3C7, slot / 4: OUT &H3C9, slot: OUT &H3C9, 0: OUT &H3C9, 0ă  ' Fade from red to yellow (slots 16 - 31)ă  OUT &H3C7, slot / 4 + 16: OUT &H3C9, 63: OUT &H3C9, slot: OUT &H3C9, 0ă  ' Fade from yellow to white (slots 32- 47)ă  OUT &H3C7, slot / 4 + 32: OUT &H3C9, 63: OUT &H3C9, 63: OUT &H3C9, slotăNEXTăă'CIRCLE (159, 100), 2, 47: PAINT (159, 100), 47, 47ăCIRCLE (ix, iy), 2, 47: PAINT (ix, iy), 47, 47ăăDOă  'FOR y = 98 TO 69 STEP -1: FOR x = 157 TO 161ă  FOR y = iy - 2 TO iy - 31 STEP -1: FOR x = ix - 2 TO ix + 2ă    c = POINT(x + (INT(RND * 3) - 1), y) + POINT(x, y + 1)ă    c = (c \ 2) + INT(RND * 3) - 1ă    IF c < 0 THENă       c = 0ă    ELSEă      IF c > 47 THEN c = 47ă    END IFă    PSET (x, y), că  NEXT x, yăLOOP UNTIL INKEY$ <> ""ăăEND SUBăMark Junker                    WINDOZE ENGINE FOR PB          mjs@prg.hannover.sgh-net.de    11-02-97 (18:53)       PB                     660  43523    WIN2_PB.BAS ' Run/load under PowerBASIC to extract WIN2_PB.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"WIN2_PB.ZIP",4^6:Z&=32366:?STRING$(50,177);ăU"%up()%9%'%#-%0T&1HkmWM#?H%%%*n%'%-%.%%&n%sWSgRfxU*(pB#lGa7tS0xhăU"(F,)Y3-qbcuKHg%2Q/s-ZT48I:K\5\/aI'u5r+#g,.s]_1$jbf4xnTHe4:B0v.PăU"(xSvTvW,yBJ%?cE<:_1.<7PkJFz%%n%c7EmOaQ;$d>TSkv4\6S5lN)hjyr#e%blăU"vq&iRiXdMG6qnLkpW&.rI'ht4yZbnD:YMvqZ?u6oD4dCrDqtP40uMpt0oXNnoZ4ăU"h8fjd2KtQo4nMHu^2Noi\2p<vi7d<8MvhrJFZ<ebk*XopkVUl57HvtRmvrj,wJtăU"hl+yK+,W9ddwdrv=2s&3atxadh>&V$/P<VT's;B;YuvDjVnM]^V*uvb>WtFtZkpăU"SNE5$l>VsP4VT7pVfA.,\vd\t=SJGdGFl\#^xroK0*u6vp#,^PZSXRr;dJNR7O\ăU"*2QYuWFe$KPdC=&i\L\C;&t>t-VupOr$uJM2>]>Kw8:+K2-B$65jQNt,rPf_1?qăU"ec5w1x1ch^hLbiPmA3Ku(Z%G\:kb9ISORNjx&bT$oM.9DqSbpn41C,iiQN?.vJ.ăU"qa022srM'7WnH:B]/G\bZ',RN)0Mi#f2*7bu,]J&HL4Mc]5y:D^#KuCK3smK\)găU"4];4T:Dy=qW[SgjH%XubZIaMwfMigV$A[V>Nri];P5sf.I172W0vvmZF+Ob\;bHăU"4p.X+lkjat1U2rUtkTYHCCUdB-cS\ytqAD<w_8N4wnWv=xg?Shn7>9()iI_V9g*ăU"aW9o_zXn?7[r*c;yu*-XKc#H_qVKQpIDD*X]RAuh_2/a1kh)T$00eD;mwq_(wIWăU".q<.4.$Ox/\J7mn<Pt#ynYg9KgF(%/e)IT\8g2<3ID#_fZSD=Od0FCsOnYX-PhhăU"QuE;WTd)5CMrtu00x%(gCnz[auN1oa#nH2j])XUq2%EOdEX>g1vJ)O*NZv\7_[PăU"%H(Ve:#gtn#7hG2=1_AQulot'6;hwFN%BF/TG<_jTUK-)m[Yb\fr1Ya06*v(fr^ăU"PN+EWaxC$^cH)iLmpmHP,2lWXPIlZR8PlJsGsJx_SxikGmSW#fG.MxB(oE*TgT7ăU"_?_uuI#c=Eob]\U,hs9ptv/(*'E?$VF6TF:J:NJ((B_-14iyC.ACHuYG.ES=XOqăU"1u0Yj#$)_*I[)l_fSjn?c$5<2[:U[(n&).)ndPv&PaHTD:F;Rj^-\93QE&>7^^zăU"[c)d'829gyGAebs^-4GtotiWcT7QcTOXmM'sA1^T\_C7,(Q6(?mD\>.JcS&yer,ăU"[&_aUu6u,%)DitM:E;G,ubmBZ/z9KK:DU*3\%k_Kgvy]l+M>1VlQ#^/=$F$,S:,ăU"d34_B'F(z/+[+g(_]WQmg=Q\hr^CPG]XlBlHZB&sYX)J'70R#=c>KJ)+/a1T4FMăU"kU&)>bYb\2HkP5KpdKE?3th$lTT\g0DSe^.1rnA:H%pm+LBqb2j[D]Pv,FA<7tAăU"\N0*6*>dkqwn^f4L(uJ_D\]G1P+C<gmOB??ktVF(__A0T(TLYg*LrrEmrftWE'MăU"&ic;r*]?Q,+)A4-Y_Sg]33;m.lu*OsB.B;2#Z2#K*eo/X7g.aqSteAS'(%MDeyJăU"OR1Fh1V8:_p(Xj6u31r*5pNtp/uh2),#mE89>JxD;b_=jh?^g;5UFWl2/moibHGăU"5LL_1v^DtQWshhS\*/pt91e5$^2k,fB5,sZZg_+.L:K_WG2ch0*TNnr/qR[?#o*ăU"T^8U4I%s9oByUtL?:kIj't5Y)cKpYa7Fw24VJ_[f%cP>_U3uIq^g7AKlVT0.gs]ăU"yj$+(c1nlV?<''[V#4mffZ\*cR+0[tvNUBL*?mIiyeHCS<Ek-Ol>[$23E=u>k4RăU"%2;5&2Eq7Ju+Sf?KtBqcGW05xgT:B\g,/nT_*iDGPY)+7UfyBVXV*SUDrMu:+=NăU".x#Uz4B#S/)+2[WbGFE70oB.Y/nhyXEkJQ.IMT=L?qu%J8$ve)o1gpZF8kMgIp*ăU"MaO_1MZcVc1%][-X.,RkEfS;wKD6aq4fucBrZ1jm6^%mBI.P+5w%i[Cq5%5,xw9ăU"eRN?4&fui2+ZjZ'mER\KfKEK;ni?6K%crxD35m:[*#p,()-wI%Gg'5<DpB8B1yaăU"#eSmqH0\UV6r:>Lu*N-M3KZo=vC+=7cf1(JN#H#=#h;Cd+Zq?e=itHa?%.yb;K0ăU"EIL-F?4,MfyKQFM/]0]x/7F6j'e?D-*>zA\5F(^4jQVWc[[:A1;Dz_2fMh8*B?hăU"DYH[lQi;:5,QuOu23la0X]#jS;dlOX6Zi:H-j3U75pO]K_H%utdO\X><%Zo?SIdăU"Fk99zfy^xSd=/ajKjtE<uheH2:>&b>T#1cyDu,SI_$*fCf<6/Eh=[u*U:K_AC_1ăU"Xs3Ee[XUIb21R[h:_Ve#0dik;9DTE9<p[w$.-'::6s?u]<62EQ]Ip7=TW.[:n7FăU"3eFnn'Q%2UZrW;uXVQ6hONlV?c1^5H\o1uYOnKz$9EDR^V)*orvP7#a,G$*hHnUăU"H*o+RngA>iseH+M<QY>;$B%JpgmFAS-Pr.X^YWPxSxzstccLu3s%'YE/jVR#$4DăU"'o.$4MtBpdJWxbheB1*c(>8\l=[oC7-<]vPjt,GecUt='+**aLqza#FF-'/'2f?ăU"jNd$$Hu,d9M<B*(bBB6MmTAg'WWe)9zOtb_O>'R.K1a]cz73J77N1XWQ3_2q9v>ăU"NIA<1)R;OIM1>cSFl,:Xbtu==y,4)j2.Ik6%&9tI7bP1n1JQ6::Y/NL]\o+&.lwăU"y)?HavHl2+1\>[Gm(%slx:ej*+F)KOQ$p'IB$c9='-3g1T'S>LuS2blm$%OVUD0ăU"yNxO'>-mD4#)4D%L/d?eJ:?*t1pCDjw&0DVP9y+-$:UC&MWT*6T_FFC\mKBiaBlăU"/jAHsSqiEvCSc.]5TN_*6aY:=)SjRz09?g(5o]_e\g0Mi3Z0'iecg)e0^.zTVSUăU"4D3*N[_'8G-$9)nci-r&NTrk,a,o(Ob^s&d%.;$$%LeWn0[MkCWL^5RI_%yW,i5ăU"=[i8FH%PK:EtissvFMmEl[B.C6eJP/rzkhKr_$AXEAdkn[k2M(]5*9KC&J21?=7ăU"W'[2f?5)E2Ue[h%CDi[v'8XHH7/tJ;woYRC5JfJc_&,x15I\nyLOtk6?4efX?m:ăU"(hjcAp3iW?3]m/RG2o\]5jk0IYeKN#hss;NaZVcMlHI8fgk1X_AOX?Pc-+RNNQ/ăU"^Efm[o2,xJ7X(;W$]C;PcH28:KqoYOBWPrY$eXp#3W<s[EcB*#+k&C52#8YACHqăU"'9^mBj5?5E[.%KpzloAHlAh7-YZI')g'>c#;;hUs3[RcMw=llxV4tGTV?ZT6'PmăU"w.tpI]aFboUyTJW8dwffX;*%0o*#XIz5<k=e)>0u,,vr$PNM%Kh:v2QE<VVm_qFăU"47Fxn0AwJ9c%u3UQ4UB+nA5GAhB5lea/zomg#Ne_.t,J'S2ELJ8U-p_TT1N7+:?ăU"#GsWL\k#,^;0us4L[C9,qRWh?(a5r-po=93.cA$43/c%8z0Rd%=dRh6jt?aiAn&ăU".fcv4Sz#CMkXaMCfSdPsk'<hpK9I-4HC3FYmzo)D*2HOXD+m=h;e'2\LYh\^>jPăU"-+abG%Qq%Y:$Rr^tAfO,To'7.f>q)n2uow9fAJuwSARit]Zg9'l^LS_:wV2Rg1'ăU"uQds&2]W\,3XP56(pzrD6^$bcbe]INCNGJji_Rm=]4p3VB(qBI+WYZ->pWIO0qVăU")'uxRbehLM0KSz<)5nNv%Ec?uGuX%MtlK3J5W+-ftp*HYdIglEk)-1&AKTZ52-LăU"d*Y1&<kds(YQRVma55[QYZ*%x87QR01#s=l>&6um4gc:J=V=L_XSpE=e0T'=tnTăU"$cOb5VTb]Z#$T)IH5;)ah>B$Gg#$f6;\K=e9K'ohOXYA*IIxh&X2_lE4AFt(MUOăU"ft>Y97dZ-vDal_N8#8XFmmn25SD%gE/nIx,E)ACTnkWfiB_#HEo&F_*ARV*A071ăU"nd&$S[qYiMTH0\S]%JaT_pGxk-M3tVcVh?<%0/IJyjZ$5kuR<_en=_B:;Qm;:P\ăU"7Yg$]zNZ[^+F7<%q1J*BCL>G/?>:qp[oScm+8?Ks<tGSgJo:NT?X(o'E9Yj3xo[ăU"t-$NYCN<*mGeEK=rO)sxToZZSVoed_xvcbX3eSoQzHMgVN)7oTvh45M9o4GOL.lăU"C<*V=H,,7hT7T1lNT:d]G07iUBi?%K(GG*pHf3boY4ebmR2RrI,WTlBdr$fXE]SăU"kJ.V:T?&]BkN9]s2u%Har<SlUbB:&nA_N#Hg(ggzt+aKP+2#opzmmw>qlHHB[P7ăU"E810)'j,q8M-'lmL_)*7QxCs-:$tk5YMO$LblW:='9FV<.]Dx-GBP19ci0Mj94#ăU"Q20?q)]^pm4;of6]9=$#y6sCH=_Hh$E5?ww''KXnsW6n1rX/Kcz3rQFR_-?9jdsăU":ZN-HezZhI:EB3(>xKU\0rB))+rdhL95pYHhDs\SHSFT%<dSRTy&LusmYNHvNr0ăU"4SEmugJMZo;\EQJFj'WJFrramWjW+<<kAXg?8^s:Q'$jUqPTGJ28UTw$pa#WaOZăU"H$GKV8XT'Y[QWlh8]Voa8aMYt+YQ<A)8QrSDK&,&>m4C:ms\y+Oe6%=#FerzV#LăU"6=\70PqcL.0Q?Y(PEh>Q2QWO?#3bA8,:&^dY$PMuYR0uiIBpi-=PC6O]3k^jqT]ăU"B3x])aQXN4'3jjXbZ0BA?ZF*Ht1q&uQbQmevcD8wOf?9Z&m#gP0mOfH1--1FH5+ăU"_&_jthJ]fgu$(>YW't3l+ov&=m,Q_-Mu$EH&D/U/K[1t\B1o/l.oFQ.^Zq1_O7măU"WTI7VQ,(ZHq;wKSswa1NBKAZ]pxJj-)Yc4_uh)Q$rO+8%Ql#zI]r.dQeDtE2CQlăU"ISMm7rQlDZQL(#ZW^hpO5U5Mve_IReC#\bgC[]1>xYTCHGbQ1=R3;A(7i?F2NW:ăU"R#?q)8h-#gz<vJ*Q<Y;H.l^%>ROtiANBLK^]Vc(9]S3uW'h1,AuZb<mIbr,ua24ăU"7)v*RNNuZNp^wOxvK>2z*\Q1bX8^H*NVoI+E<S4lpFrV&9EsWM:/Ud^x3SZgvUoăU"S_EE>l^\59pz:iLx]+,L8B%&&f,)XAiZYJ<6zl?Gr3vT*bg*g0yvnB[')<2zg[\ăU"'8/IyESITRVpAc_lCgoHbkh1lQu**5%tH_NQQDVFi/6E_h%pE%MJcxelCwj-M-CăU"k_JyAbOk^8cG.d^WqA4h<]l2cvr)o/hw8Bv\A;]I?,%8N.A0OzjwYT[eP3FO,rnăU".x)*_AYjj60[c,TiQ+Eb#^%A0gu%9pP3SSP2[0+gAA$V%;5D$8Vin?*Ge8^hw&;ăU"[UGUmB0RQ'u1RxDw^.j+_3=LM9hS^'C;rUT9DsBV3=3+TfX2q]$HDpJSte0nG%GăU"^pH]9Gmed:D0JEWo:P+:Sd\i5\.WfXL6Zte<F'1#Byrll'B?i,Gu&A+2O<TlpX)ăU"RNnNaK4vlL2Bp'yEcTicPkO2D?i+VzSM047WEzGt(V(tT9$&416W,Fs2sK]e:KtăU"N^oZ\dU)ejHBeRKFY]dBITSps11LdfY]q5c_2N^?vz\p3.bSktO:]&Q.0V)j5m>ăU"=4vv6*V-s'dp#0\Y<O,)C3q/F&=fPOT_Y-ua0%2pp+dlpwuLcaeGJk.sS>hh:&TăU"eu1Kr[n-F+T%vc)BF^-NSlu2f[Qu1r&JwR_%/1Ouy<O&'eNJP>OA2SmsHg]=l8uăU"vP+;Zg>hjh?-pOzsc/2\j\,X\>'Q6e:W0%mqdCOko*i1SRn$oEghhK8_<m<-*1/ăU"A<ts_T:JVFAVictF[t,VZfL'9t=vn6.d*uDiku3W*\RRRFie?,_C68,Cv&xOo7>ăU"wsC#ks>>;G41rkwHGtQ9W*/Xcwr[NfHsu&\_>dfN+fMlkziEMn&%ReoWviqj<EcăU"H%upkA$2qa2goFjpHYL[Gtq/,6,2eV#YYoY3bd5[:0A9\NH4f6ORIC.SqeLrJxfăU":I1pk?DmK;hV4=o2R+Z.tNTZ_vD%?x&'$_#R%Xzc=XydK-[(?w/?FfL98)#%1P+ăU"V+9n9$>Nq=#niDMtExIDf:aE^Y9,p:J2$ac;hJ(tIAII_Z606)Ma3TT:aL>(_7&ăU"7L0'=c1'2t*HD4^l9(LSinTY.%R_j7?6'>RHU2x[NhiSk2'K&POle%$L.t*j[]WăU"Yl-<.X<X_00#bSW^(kF%mTN#+:CtvjnvI:#9#H'HjvS)<C,0Nv]SKOI4y^I,/ipăU"U6(QrL,3QH&oRqk:dLDCpGlKi5a^$X)kB&>labk2Tpk0ie(v8RB)TCf-_H_$]_[ăU"n+o%UL//)K-s#;>&PUc7oh2dGqPgaUGewO.rijr<pf)Sv$n^&2WD.m(1ln(9Q#1ăU"'oDQTAYfG6>Jbq*uZt&t:BPA4lBM0DEtcIz'J$Ba.Y]t,/l2,egRv,J?5tt_YkSăU"rkPjS&YC=2j=Rp\1EyE;\l2+D>y[H61<1m=d8QZqo;E#eZe&IFGlbEpNhNWc3ZRăU"4NJkY4[A]>7)(+%%LCEX07BSU#L?)S*5^3Ixw-7*__qlxRhPktO)lR2BgmO5h(KăU"mL3?6UeC4#Sy2R-9U%>'F^eUFST<.9&.^_<Q>/;i2(KS:^.t9qB-x1i-)H36*?IăU"<>kv+2#d&ag8GxoONBubhO/F3)>;>nG*u%3_S^0N--\VhRUie.r_D_/mlZ0md?=ăU"r9Bup24UrK3$F,2%aY=L:X5bN6on+nru$W%Zdm9DOY0>w..]u?>*c;XZo'4MF0zăU"o)+PE*\0j(R&0Wlb&kw;s8D5eWTsCNkBi?kS*GBJD4V-,F338RrXan/5OX0,:RPăU"j08;;8O)(e:HdJ.xEEG+#WJkuzkhaR'8.c7dNB[B-e*E4;GNV:UE;WeFa2Zz+LgăU".H]a2ePDaGL1t6pK7UbdS*#K_3u00j;o&q7<t5k.C<UkOP:bd?$:f22-m,u;o*_ăU"-h;1<G<rW=w[4OY8&wGz_p>&&[rd+B[lI0S0d7oztb\2_f>3BH&\%lQFDJH=neFăU"]pP/xOOVnU:<'8fCU_9ha%i4mwL+^$&z4DQvLoF:TprijH8Kpp*9*3CmW;N%?'eăU"pB9.,XCkFN8XwF)PdY9:;P4loiT?r3=Pv-rZNQ'JlmOv0nOV[RU^bQ:\E39vgsdăU"OQZ>>RT;IAObI(KrnD#12^iuPFsbFJaVdd$8xfneDT[L,<hNv8RGF$hACrN.M/EăU"tY[CPm;LR>A[TSHnW]tc33YUo$(#faxPw78mbdoNT\]\tUgj<E[zaMtSh#-0lESăU")&p$W<&+.97dylB0]rYE'XtH39ahGMW=r22#kz*\erQM4qn:'AUfINxM'18Nx=$ăU"G#oD^8dTUoE>0&=W(SNcSK5HcpSV,FVT0>LcGdf]Q4wQ2\_ZGdR-]E9>r5VIgOZăU"S6iDhd9Cw[Sf1M<XC6iWb^rmVh:PEr[Q6<5qeMvG08;rOFHnWejp[+S/[xhfK\săU"y,g#WPwK5aC6k*gWHeq$^UUB&GV,u2#j7iSXQmIv7bDp\N^guQ8^$Tk\j8\B2VFăU"t]w6g/=gWO7:E.UML]5q?Ag7*VPwB7f0?yXKfjm8fd3NDJ.oM(7zK%=$'3sLdcmăU"&_v7lFMz5wbepPft^B;S/<t.nSHg8:9;faJ9Z$DqcUvuZoUV[ui30p9ypVtStZxăU"-p=*D<Intii6E0m3(M#B%6s/O)G534'2a8O70MSar)sqa<f%LJPsc%J5eHL&X7*ăU"ut(SwlDVj2lrX1Ek5gJEMu.qv$XsT?<w?p]&Gik'OE>S9>I43J%FHas%CCCLY^HăU"4#eF$'(T<'jma>j=GZRaS>7,oq/=t9iV+TWlqeV*gjgaK?jlg%tgb7Z]pEZRe-ZăU"gg/Ruo>rJ?BDY>caUeWlUk/:I6UUR1aC-Y0Qy%\LeNCAEJI.b#p5ql<hjIJ/?(?ăU"ngEeJ7lY6;1A+^]pW)U)QsWNO$GH\*:13Z:Lg-[nep5DGce%l,^HF%78Y^t\3i/ăU"IZN(h:gzX:*V?s0x[CBZK*TUpWO#_:030QT\G7_vb0KDh<gDad7\O^C5*JgHjmSăU"*\Zn$[1\W'Q):]5;EZMQ/s?dR_;-Xb,caS7T;K4ZI$<^6+<pvJA(N]EjxE_Tg<*ăU"vN^EUsxb5/3$Ze4,Dkmm3CqRb[[5Yl]PcHa$fJDXp-<&HPC*H3+PPkjL4aKOl(,ăU"19W&6SYw0m['OMh4jG8JdpkvkJ(n;pgD%%UVQD3&KB2VR<]Z;B<se3_CKO+8#2>ăU"VswWP\4pbst%pMqc6h8vL&RVcY4+\^=TOhJ7[ou3#;vVquax--,qQR=J5vQ9v*LăU"94Ql)3Cvn[Na5=Z(_uB1[5rIjD(dFFum&W/8*%SKe/zev]3GL7Cr#>SB^w+H0GtăU"SjZowl5*E,2'pDU0+$<d[4<HX&dk[zuVJ1cXYV0'#[JF44lvz&Ln)x9LqBX#3\3ăU"C$quX6_:Id[(S^%'/7(:p-V0p3'S%IdQZvM^:APiI8rc[9Yt/*5-4VK_bhoS%<UăU"u_&-CYv3iipyVAS/mj8NKj_c<?l]oP140Eb1gqlS4:#:,Fu&Oqc+\T&M=8EsU,KăU"5bYjU:UoCOZ0Y2yvXJr<1gmszC0)k70A+;,J]B]:Td]aflZ^mm;p9^#L;/?rN.>ăU"q76:DW*CS&B<rRi?^8Kj<[-7($R6_YEz7<rc+7AR..pY;9T]^y5io.W6(t+.F*zăU"3XJHs_5RN9g<[RlhfJ?<;R[7k<<m5F9r9-$(?MVg4UC(u^=0U\jNJQ<M'_>PHC>ăU"L+.ba+lBEe'T&(I0uO)Fh(Sw[#,T8WP9aA>i0mAQh-?UU-$IvTmp(s.2k-Bh&A0ăU"+<sekYHz]Kd[G),UHOVtzb5%lW9JF6Gu[;Vi.itC]0<O$3i+b_sR4R4+V=UTbL\ăU"N.u(?U.o<iSoAqHQ+RWg_0Qi*H_z-]VIA3SgM#+^Tfm0PD6ImG)Rmt\w4dG8k-/ăU"o-E=6Z4Lc5NDB,k_t&eXO:&hSw3%=F0&dZHD8sr2^.O6kfA40M8OGRDI:(2?:*&ăU"#B>X6.'XOXm9VJ=*iq>U[4:/M*mxYdB67HyXPN>)sv(8MQdcRrQPIT4JE](P6w[ăU"6L2aU=i.QolB6f1WyTuSlb<Fd9cu==ur%;rKw7<$,89dGnJ:I4I;**4tf3G$Pq2ăU"[j=onWdD_]Y:x*jr2u*KcL84nE<_&p=_\RG;RctN>;lrIBjZEm;S6EqI.7xpE9.ăU".jSTv6tg26fH_MKNnei_H,-+uG71M4,E#'g5>B&br(.%GJP;4>%-:_;5)ms]jGnăU"oK&P&jw+#0SsR>)>Sd5;N9Znh9/GJc)MxUcek&F2/Up*R.Pg_Vy?MVjdEeJ*;PjăU"/9oYd6D_CAcL)r05u*3fuKCeG&[>]JR]x.5j,eg*3R,:FfKB\_;V4d)S-pITIJaăU"J%n,1.E3nwr_g;MdnTrb_56o2Y%Cr6=ds?X(H>%>a,#1U^-J#T)%H$xYu6N%/-(ăU"qEm*MHDb:?7n+38KFgO2TB=e[xK*so%sZc'r0$)-9g5R7M\0ehYiDaWQ?,1dr]_ăU"o8;4B?bWI;'$(&qoU>\QM<.JW_get'ZS.wvhLUG0)2t&r_L1.T53-q[)W>'Z.Z3ăU"$5)OrKp15z1ipUkakylQX=/&+bn_]Ku:d>j?)8sK_DJ.\_7D,<wD^iX/Sv:Mr'9ăU"PXK'd(q_SU)zWIJibqYvS<L,DbZcS&&-Oa1?f3%%1FmSGA/*pZ#UCI<*<C5=8$.ăU"b68td*Yhd[%C2y1T]Yn4kh%=0'p-<':g0dhjm=c:,'q.0pS#Orkbq%zQXm>F*mDăU"e9JbLbrngbKe^kW+fBe*m^If7:y*cdnhGnA[?MsA9OsOPliDaeEYPMCN5-L&W5năU",h=3y:=P*pk]928(166z^lh'z-I2^WV2/1De[=mzr%yAZ(hS)nek2HXU.XhPHLjăU"oxY6w&-jB\TF9Tq8bD;9I/QNwKQsN[^XQ2:unmt]J=fTv$wP\i0nInu.\nsT)pJăU"rrko3t7ej';yNwy=ZHQN_T0aQT.z&6?6is*W8\q(h^Bze?j&D;i/ew32>4\Y[=hăU"nJ4)r:D8+g=bn8aBc<#-B_(t2Z6IreUbY76Y[Rz/-I9Hri[h0A>ELEk['A[d\mqăU"c62(muMR0SgC&>I=GhO'I/^=Q)G5^Xl&WQ(ve/JFT/JAFK&Q0]d++%PP+Y\itnaăU"J:%#]YT]1[GmoM[tBWIVRA+Hp]mrST;<CzjtFojaK\/dxWI.o0Xs*[v.=-%NodAăU"hbwXlhgFtQS/vUe-If6/N?Gg8t4g)m4#XZiVp-p,<Wr5d9=vfi%0n]WpKNOL3=2ăU"_*08e:)*TASNe=pfmB1rui8v\F[A)'jz'Y.ciRS5AUP(/&-jtjFp_8gJA/dS;u7ăU"e>Ze6PomD2Z6'U3\ktKqYa7UMd=E*D)?.JY#]4,Gc-'t'twIe^KRTP'&b.(_J'TăU"1I2[::xR'(['.oVPo^9A)uae)?N>:lG[eA>H-Pq0br\+jj8>^\vRh>(QOjR$*X]ăU"q%]qbco\+5QKtD\vT$fkS-i2s(_E1EHXZDBbQCS\W(\:gFCIDak%U)xrHiGt?=8ăU"GFGlm$#KHsb''e>QvV&xg1**,G*])eIH%C#($?>bi#AiT0QU/3:**BIA0:SwC-]ăU"?T&2.9Z3TrjQ<S7BK$Ji3+g?VA'5Xg9m[A.g$u&rRKu:#ri#1mo2'e8eZ?WU$+.ăU"[gorbw0D3-6SEW:VJ+*6&gl=UBbXdX\N9qSu9c?abPCw3]B3R#<%Jw%avtOkRDIăU"b7y4$/$Qw&<tV*&c4T5)dYy]M%wKQieYIBFQ)EuO64pO3[Z86?l3\eY8\VN=>*răU".X$u,RI#?wJY:b^rJ_;J_I\#I#^=','n\/m6H+XP4#.gIoc#XWS\I.S&tJep\s2ăU"2K=Cj5s\$;hZ+s/EO#Px),Iiaxu(+ku-6j6U?>MOGXyqIIAM$,*um_Gpv9po1*+ăU"lxc+M*8(6dTHTG^\-dO\h06WI?=5-o*>uS>BLS]h2__1/9O\q;c/E&'-eZAW6%%ăU"$>TYsi98yhdQ?m?-vdf/9iazlW)LvT:oUl4*(4M0H;Ad/S;6cF;K_pjnLTFIE5&ăU"aH&r%K&[k)Tw>Us2i40j%=(T8;Lb[bASALDVd*3h<ld]8qFM<sm8:K&6E<;NB/băU"4eoDqJq6Jx5dJ])TL3?NZ'E]b;XPk3/_<\']8USqt,G?TB#-MU)h/VL?jG]8F+/ăU">h;n_W8x]^7P=i'O*sh:K=.G,[yjI[6xE91uSSsz&Uctkii5.zSdO/BXY_sD$_,ăU"X?GD6JFYYuQllx&SA]Z3JHkM$RY1UGdWC[=e]=mZc]r[I+]4J$UT]3z*vy_e'<NăU"]gUrIL>/c'Ubiu+hT81W#eX&EI8SW6s56p1;g)idjk0L0:Y<Yb/wOp3($]X?Zx2ăU"N)u[gJ\wONP]([IPch'(Hml%KH>c%Aka9)B6g26?g0ka\C&M1/jrSE[m-hWOf)CăU"O>pK(+Fj&?P];akqjS\Z<M&rc+o42sj=?rRw6)G$00u(='$#B#$&<*?Ua(55'.CăU")Fpnvd9Xuq#g1Q^'5*h3^+eXogZR?\LLX6qPL\N4<]YY*$$Gp=o7P+#oaS(9y^\ăU"bePV$l&o^(D*P_3>'wo>;,+RCQ'gjH0]j:#_*5QffAjxQlZf-e#+Fbu'tR4P%.zăU"33XP9q\m'5p)j4W<=J1</mZ*SJg:v[.hd.e0,%G5PB5+,O>9xzu>W%z:4:\I>m-ăU"PO1VW5Feo7vTS&H[iIC?w1t4IQp?kLi'UfCUMdWCOLkc9,MbrXk%[60jmst?B;eăU"x+QD)]XjM_U=u;9(isqgaAvgJC%vXIgr&NEKZBK*QPSgwn0R/t9l<5/K2OziH8-ăU"_3.FGX(W8s4Wu3BX]N:,/O8c\&(UERuD1%U2:x^]i[_e&C9pY0I<=^'ZwjspWFiăU"aS6;3O/vgy95r]N*Q2skSQf:$Bbcb4(nF&-B4M$$nF3Yh1&(N5+%uEqq_1D4k5păU"n'9%gIyD-)LocR#89/n;dm$sl)e?a&?oI4b2?LK/G8.mS-BB.JrK8D*wmUS-f-%ăU"]B'TJmL/V/MI<32,PMO]V2nx6]=U&4:DhJpI+TUbQex#4F2Q$'e2+D)xndlRxSiăU"scMEkY:/KQHS0W/khS%#FjEoeI;K7glhSe[\HdmD?U8NWIIBa9.Ee-%kTYRJgJYăU"zJq+G]yx.GKb0%(/M+:B%0;Dk^WfRS/:b:/U3nf&m':N?&YqCw]SsRXG08jCI5JăU"1WXdua;4lm77K/Z]Tf$gj1s,\9_x,DUUx^r:]zYVG09;1U&zeBK+u*:0m1>L8gpăU"+'n*ECCpL,lKi<U-*1%6F]6/x#4eMSU)G'iy\o^ksjtgdt0[=L33VhORm__:\nVăU"W.wV9F,#0X61\p>7lE2o6ZDul][kZ-ZSqR5D/N+b&Ed8m<J'vRc>;QUwS:62)axăU"-R6<A,59nK-TDzBCe;6atim+<63Izm4+\UMwE\hlp)]f:gM#&KPX%:niCWzQ.7WăU"ujG5sd1E8,ec_CHU'/'5>,S17)p/kIVD)^H5Em*mZc(?.,X';9iZCmRx3idQQe'ăU"8uzv:TTZcJ(uMqM]Dx'TPt4x<1V>%/iJ31JF4IXW;B7-)#M<gx*:<%G7cp^G%7AăU".S2mBdw-s2y.]YIuf5?j9y$V[C0FsCA>%;R%3,RPl,)^GKn:Zw\N-^HJO::^3f3ăU"/EQ)awJs<a1k5Gg8#y)6k*Z(pq7%'iC\0Xaw>P_)1nS*pv#e9oRkdi<a'7Y%^b8ăU"Z+Wc*?i1FC+GJw3[bT8ZOgwq0+gow7)OrXL>R?jc6=lw4's65UI%O=0z>c%R^GtăU"\ssWV9v/_QyUBKQf0d7KCd+hc_VMG/?2nsCpq^#sTckmV0>Eqo\Vt#%$u]?U9&*ăEND SUBăSUB V2ăU"LE=Zy;+1R*,P^hX?Nu*?6uaIyRh7]P[G^+I4<.]V^i[fY2UPyqBe'kz?pOs>jJ6ăU"CUoGs's(NqLgW:&FWsavj;g#zo&S5iCsg/kS[43.&o<*7TePoqwn.3H?9[wN3v_ăU"*[ZG1vD%4s_[qaSsj[(e(R2Xsy]*)dB(l_$=/l+UyVa_#K#Rb#wYHOSTBAZ0q,BăU"FoL+s'Uo*[KPArXx,K]O$sGA_Hr%blL:]T)YIk85gj#G5'f<Kj8SHamCt[DXSURăU"gd:<u;wSQ='H,:]^8OT:1_iAZk6t1+fg\:Mx5b6k*,7_olr7KITixN]HMu(0[<TăU"Cpls,jq[i,OJG&_J,rZ1RS4UU>G1Y:cU>XGb6(lc=R?9?[r:Gm'U+<<uG-he(#1ăU"X+:gaXu$BBM^^x\s=bwU$=*\?vTj\2>IONjEbiDIjsg$:VveR\RW7)e08&kE&A[ăU"Au8>o8T\jjL;:6'pjh#pAO;mr3N)sbXCDI-/-2$<3/(lLm=l7=yMwy%[<Kx&)>uăU"b,7/J;-9S&;[;Kk+2SKjaM5=r3=HMrK2+zpl2%?qy*Mk0UPfSY,9Ah,?CaH:=MpăU"WyY59bbR]S60i],Wt./-.M;#Wqia(L-OU:QGk/;tYffr-K3.P((9$p7.+qD6qIlăU"#88p&jM,7sXp2DoJAxS,J%'(gt0gjb-wgjP7%DHEM71rS7r:6Ff/3C.d/&(_PGUăU"i'QY3KJo01/fXP0GPln[za/ruB*Q=u+j7O7J6nFL'u8,oaJUnXtXazr5FSD<bmYăU"0ZFt\dtZ1)UB5Voa:5C>sH)bVona='0=ZEFDM&+fj?(vS7CR$P/tK2p,P.l7y*JăU"8Ia-V,*(9[/MyCTRP(su_I*%nB]udQjGUKmxhIf)A$-1IMs^&hDW0n3]_a5t2KqăU"[Q9VW7(j-,DZa1*anIECS-$]8/^.1i%qP25?>:3#S9;aXde^AeuD-iS=;ND0+62ăU"S0W/4),LPflPj?+#(PN/LFvR?;')6x6ZS5td31BA0(84lVlYJ_PQUylq0j\qPwBăU",dnFuVWsf;6p]0>\MQfq+BkXP+'gk&^K'vHkOkBhG*(SxyS%B/x>R5W]9OEHLd*ăU"*2zDWvmYi=s6RSq5O^UC1wOjhPtm\br-vNI0A-Eh#A[RhPAoraO/h5ADHXr]#+9ăU"A#1$$D9g-L([,,0<bAp3,H41S)6SM4+'Y:F&d9a>RNLeN-i+%&c8syOSB)kGB=măU"E_Pkg']nVCD%uPz9F$Y+MoX8_9ugQA[sk],5N]5k?mtF]&br*Q72>9ZKRJ28czRăU"-(5_3s*8?c/.p4De$Dc:8r[o(-\93&4Au9\a'm[Wem^_.-0Q)I<QG.*D7S\\^u>ăU")9MF2$:nNiYiO0)XaEk:'sTq?5]'5ZdykNoi8&/l$*N'4IS-5,yzDiriXnXXOx<ăU"lfx0AxxO6&[-lOAN)=.m*MIqabSwI$>$FQIH'<:tp\fT+X^FAJ>GD9/QA.jGBfEăU"Qs41^H<WoJV/jL'_Y<j>kTLn+Y7EIlzdHc7)mY*,<>i3(TRsDgr9REc(o]WQS_0ăU"j:<$a5y#.Hh?YL:00[dUwKeKl5g^UeA=cb3#m.f9hOoOBJyg6u2ZJ:ixSfuZ+;păU":MKH2)&&1qYu%q[2E2#IA2$I:e%1X:&]6.ZH8KegaZ8S[_]#.dUdr's'nC??ZcrăU"f:mT(8ElSiZEj22-<rGaT1DQ;16GgxN:%lc9;7Um%N>0=SX6JG$ml#F:gpiZHOVăU"[NPtO/b_R,]vo\^NEBfV(Exe)*de^^]'JdPwB_;%i-1#iYcx)Z-;cS%b(w#6VEoăU"S,q$S+uK5VgCOyjd=Q5(,6V]YQ+UjfKIOw9sL_'oPQeia,8K&=lgdWSK,TpqB')ăU"HT/-qOyV.XhgM.^,i%+^JV/>Jp?MlfFjDS$BcMUCp6*>G[IdB?3.Os?vEXuk%JxăU"4JG(0J+ibnfPG^L(<,o8d*hlm/y)A*r\j(W821u?K*[pFZ6wtc^1$R&eFO.C+66ăU"I<kh>$Qd)x=kMHkM,>\wF_rji4\V39#N6sj:dbg]QIh6bSo32kRn)%%k6o)]cw%ăU"B7(P+kc-;^Gd)<FMFQG7XRML\kQKpVOa?]8L_bBWt.en]0e*9p%=8wfa\[kmT,9ăU"69QOuBr\zRE([C:VEssxSM;s'_a?$0rV2GJdChEFoPq5:YZ[/(5RqPwX9VP&qc+ăU"H4Sfo9'=khOp]3EFa6t]F4mpm[hUS$?3Djl[-YZ?o4ojn/9m'2Hc>\0B.X<RSh1ăU"ep=I3_\cgufF(t'Y74dXPEWIqPl0m7]$Q2SPHd[E<wI#iobLgi4.A,:>X4(urq&ăU"B[,k*s>^.hqArvlA\RL7]5Ar7a&9n0e#MNud5(9x9:7EgAXFf93x#\[PFlA*yr^ăU"0H\vC^>y[MHav8Zhg484Ymp?gyP5fJ]rz9UF$&BVB=%*0hI;tHh,;aL/ks[Po:măU"Z9]Je>-FmVK45coA1*8AbfeJ&YI,;^5:PT6o%hLL0UB=AbrDk4_HEv;*i4x3kl)ăU".w0%g[m\RSuYD;ZKU'pwpsT]6*J1Y>'H'JWy7mZUrkV=JISmg.r,%Y-p]YpIPI]ăU"1A>wNU9[ZyZ]s-*He++^866gGd]Isvu(83Jc)xXf4Cq-G2_krZf??;w#lvlQ]uwăU"O-&BYP2AE\e;ZGS2eVmdm-M.QfO7(PkF8W4mr:^ThgNi[,=^gcSJ/:;R-hRq*YoăU"o(2178A03.TCdn:oXl:I?JVh2PEg>G7OCRBEc>p/+DwJ:IZBQ1)'kkkkS$Vt8>_ăU"gOqEOkCZbmv*g4[uHNDXAc':qJ[*RED.<$70mb;P<Wi<g[sVLkapk(q$05jba)RăU"#3d$qrSw/opy2&C$rhC8Js](rxd_%vDs9mT&Gr.xV6&]mde5r^a&8Mt+jGJ+5VkăU":'&;9:GL*M-R#TkeyBDhEQM<+\ab4F%CHW4+[]T;8V1Vvi%t094)5a>R(1NKC^EăU"eS*PmS&$),YIfY2Zv=wajO]#M--;U+]VO9Zl/;r(DK<=XaL4jr]MMj*HcZhYZz,ăU"ANft><_41%ibkm$cWE_2F[vMc]1w7OWY8,uFhx-Ud]X^U7?1H&t6]K'\CIgkSE:ăU"m?eji&SbdU,tHV=;H\kVaSw/=B*KX?lhmC+SQ6V4fkEb-]cT\*X,HFS\DbR)jQ%ăU"HCZa0bJLeqVPDFrig%08/RQ3OLx#(,z)Tp#KI-W+7M[JOqg*f-nK>i-wKl&dPBaăU"8,o-W5t;jLbcrB24DTKvM08XQE(RiX2S_7+D]SoC]n/fHGdN9YiDQy-X6(d.YpwăU"N'JmNqhk94'D.gL+b%DoZa5%L1e4a:bal.ucdG%>J2Uy.0r[g;:KQc*k+U*f6wTăU"xvGpok=tlL%_YSP1d/r5#8p=k=k7Up_^;sfcR0m+wH=%/ZOpXj(ib:oZDZK.B<NăU"*oMl(G]f#;ndCk.H[5uANU\BIWB9'=Fjkb3+GA6OI7s1'k*N2du+N_awlDN]W;*ăU"jlmr#t9H)Sc4C..B.'+9,JG&+D'5T,GLSBRiPg[mMC76g/+GT_T8zp;k7d<jQG(ăU".My,MZb\<i8uLvsU3Z]V3^.PVCNcqQCX%b-8k5:m/Bo$^FE,?5UBZJ*iPjY]D3răU"KQ\?rb&[mcZYLF,,S)>Wd%E5z/CdD[z3.wbeu6R&*zbE:waHeJO8g*B+%Gsi[;qăU"#RgC5fsa=jF]2vg[['5Ms_dCMj]<'reEVmM)JgIP-5[-T#pHgofw%jlA9hHIknNăU"K;WV^uIH]%=;YN:?0gv(S#S?rXkA60r?li%rm]e2U7<Rd:nSQ5ir$J-Dqf<Mt$tăU"Q[IR^t>sV)-el/gq7CVYL.MNb7>pO*o[Mf0z3X-]8Vw=LaRLmkXs?Z+Wr99VX[SăU"8(0eFD=Sx3.LN:3HP9(n<o?=X<P$.)NcoCX\2;gDm$B$oNvE/;R\7eCtT1ehqIEăU"2j0N_m^m1S)THFvi$MlmBMrFV^%?\d<DFtoT]IstQRQP4Ou?o1q3frV\R+pb-o.ăU"3%^_o6'mb[M:#=%=CA&-1^]S?;t^cEeb9uPVky)P$Z0-a)1wTIdcH(GeB&=UKG?ăU"Q%g/H4&MW.eoI)XhsE1#Z'Z8?q98qsD[zN,f3,R7At$l8C-/g,6F2g5p\zyDb5$ăU"mI<P/xRA^$M4H(lmy(QbK(,W,OT(J?+\5f/<a0*]>33.-wXvKRDRD0&+>e5fK:4ăU"aDAamcnC8bKbQI^BN'L6Zjnjo.(9y/DW2Gi_>Kp0;]*t<l:w=42t,[o'$05yTL%ăU"r6'h.D*YG-.xVRF4,18=wzMv/?,F,8CC?\lqbR*\0'1fDNfC2Nfp*8oks.fT'fkăU"p8o3i8ou8PonkQ)E(f2eNfp8/o2Nf\j^*f$*Q1I5aj;&bR.hVnh+.N#+^mO1(cCăU"W:AYe.1]*H5CUo]o&AuI9OsHb&r4OGLC)n^)dcM18CoLs./Jz,l7/wf(151ahg(ăU"n2#)f,'V()0xG%i,A59;]^9X#dd\_\Y';LI8vN761RJo(\c.0FUVc6EKV#t06REăU"hp>5blP<51$.dh81j<dG1ut?/gXMqNZq.r2H[DSP9FDVrVuR)ehw*QhGQ)vzg>*ăU"xYjG2]p*>A'jpQ+X97rDwLr+cGbNZ/=ch[2poPol:EYWB:tMc-:C:mu_:gLM5L&ăU"g>9Q\Ki'baz$#IQNUze3LyA>\4)[6fd#ET#O^qc2v$hk<H7p'F26z*.XzGfD)X4ăU"?F^7&L(C,&i+3g=c3PZOzr:v?S9F/3XDP(Mq/*-Q_:[2X1fvEZ2B_S2.Wha6?'2ăU"bC1S.3il7s%8xO]RSXaObt=9K2-4a93k'gfXg?:,:VfYb)dG)_FXWoQLef%g;a,ăU"nR].)eoZS.27aMb:/$N%<WS9n+U6XnqvQ\P<>kU'LunRzbj>u/%\0e3=S\N[<:oăU"iC/nCe:h;>T4?vC1S?>I\xBJN1ZKQ8wk05f4iIR]-.O55;,Y?]YyDE4Ts-p#00UăU"fg#h3sy.P0-O/-?;Y$qf>cFS0nQov>c0(Vev73sXFH$z]:P)CLRIZr<JU*3CpbJăU"2Gz.8?KYD<^]%.OOor#uhMUvPb7]]TX9m=-s]P*1)IMhUOM$DHJN9$[AFX--vh0ăU"MeSDA#L?pF^-&tpe$8?\sW,Q'(kXTw3VJX4I6sbF-Bt.Ru%.4HNn2P9E7G&[k\$ăU"&sfX]QsE7i6<aj\&GnZEq.nHtlk[_^)xNo*9&5nZ>u8B,BK#qN.m.5L??aIuJIxăU"%7PT9a#9A>3v#D3w)6k**9c1Y5D(R9NK>TrZuIQuMIdG.%ae=fPXf_Gn*9rwWn0ăU"9Is/9'yjxM,swjecNe(crmQQ.'xLQ6.Gn_cCD07?=4xg*/CF>Lm,E:N;nvGSusdăU"g$7yr-JfZ:yjHstFYjgUh6:widPPW3aEFmh,Xe+U(mtbSl2Od(x/1;_1kLE$LF*ăU"';z]Ob#u>zZxR:*h(u\:k^O55Jx7qc)pd=ajh0Nn8c6XS&uK<:7&_NaEH93d>,KăU"(*z\p?:L5uYdAMn5u7+oV%J.'ae6ctjS#,CH9nR4WM_r=6J$eZ\6]8qTEy3pIWNăU"B>,X4_7f;*:,1nnj^D:krjf3Vj3Zb&lu*,]UV5Y)86%_2wOlFW>jMJ7h*uaJY0^ăU"xu7.&>n<P^oVGEWV&RGNQODiD&sMXe&;_AD\lK.k<[e;PU,jt\0RM5G+n_D1W,?ăU"(najA<_JAw/MelbEn_g+\ZN#OYZ+CUupuiT(I:frw-CS+UXq=DA&XiT'g?]o<mGăU")+-bmivp9:BAqI81\-K-1x&^7^4kr7Y=T.=usDC;(T'C5'XtWWU?i+Jn;yiO;x0ăU"FV-;$osQ/O'<,7j?D:N7)Qm.LReRT,nV0(n$iPgCtA:,ki?fTGdljounJE/c2I.ăU"q?%i;kk?gR/'.+lJ=,D[L]l7iYKrS8FW;6LJSkZo'DiW0Xkj9l4w\AtGXeXX]u+ăU"Q(w906^;V.naJYhJbe8jp,EG)y[UxnvU4j&zy5LcI'MVk^eb(1:IQTtt,_cFj/8ăU"z83q_W\JUMaTV8SWk#nX3CxcEfCCA>%%y6UjuEV^^)w8,g;=(3?POPeueyXIPArăU"b#sCb6B5W3xII^x1>c7hUM:$kspfsFE=EQa9ai18iRHLDxd61mU_YELr;IYqMIeăU"%ybUKTGTG^A-dOJ4uWaLR?5'Q>>*dY(MAm.U1]49$-f6^(iiyaX0/i/'7gP:[5văU"]gDj&*MmWG>Qg]W6[8kH7ydb4YVU74r8kY7RLD.fq2<$7qh30R5mIa/3]?QHH=NăU"/15HjnZABD$*?'=AE>Hd9^T2WD;ftuIe%fB*VTJ;6D5s8rR:+Vo#5cS3DYu^56HăU"?:oG$Re$>yS=WPB114>X,V;K6;+&[N&0_uGX-P;;G6W%tUl#Kj6s7/)m/An#>hPăU"lIMst>I,^ah_WM>6>HU:/GhAZxig%ga'gFEBt6*Oq/5)0/v%*0oge3Dcr)YWJ0răU"gXVYS;$1,UQthgd>T6$1-n5K\>le-prr?TX.bce(+-L^4jBQqeGhC'UH7.%)bddăU"Bq8w+#Y5RBXqE%6Ddn0sj..:;MP4fb#nJ]g+R',&=)Y5dci4e*2F>3<p$-ubih\ăU"QYnw0,-2Dsd\1k^LCD%0q*>GM5m;yBFabmfAb/<QSa*yd+IwHUE>Ak#:FLd*#3răU"$A6z<GGCJu:L2bWdXtrsy:*80;jmN3.lTCe<Q>H17f<bNo%u\=tD:m[gtj4R[dRăU"[N8sWj7.O[[JQWNIGkRi[\.Q$SV2M)MdBdA#oJMB=8<YcM=4R&YGin^QU?cu\;1ăU"L.G;b26>JA'=lN31^W]^kVo]sWRoH\^^&-r;xA(5?GS&0OL*)s)4q[aIv#BragdăU"c>XiP&jFO4UE]VEH+00u%i%H#FZ/[\q^2r[u\r>IOaOELcD?dWDsMj&)-/iUV$PăU"D<WifDvE.?<g?W^Ba#8*b$<Ci84yeV\.p+P(2+n4:84_2/%KHsT7ZFuX^K?R'b2ăU"0<nY3(>K5qR6T30z7rR;WC:<UB\k1<PN6$\(k$d=/PF6'zUTI*u)-+]XAdf7+H_ăU"_nr2^Md.My<>k9_#n6)Cu*:qyu&oX't&xmj\HSu(6I?iEuk.KXwjp-/,>w$4v1CăU"LP15M52>/u(3]MX=&Q)L(ZKZH:<1H'lC/1&>+f<_fTY;<Y(XsBARH;Fo;v2*jp;ăU"D$2e?,R2&#,shv5[Uq&c7AMm(hi)yD:mZ^QGj-v>/y*'e#OgEV2,^]t;$;cjJaQăU"Z_qhMhezYB&pkx#21)GR=:GwQ/E05NDW0p7t.kx*pHle+?a9<HU&vcr?v6gmwbGăU"3:k&>CJ%7B;%us^a+zdX80YjKbAc5oIpcqr=';,Jb_16RNRsZ)?Ohvcs_EyC1WKăU"y'Qrrd2OM(),9Lcp*C<O+gpJ.J*2Zncoz*Ei[3i^1&lm;E_%ubJ;B<ElCIEou2păU"exCDS-2IAL8Pr&=1*c8&odCGREg(,OPoB3h6HQX*JyX8wX+aFD>&xXVm8]=+N'AăU"DzGg.R.j#C81JxuC#e(mFOq-yo>urJBDUl4fdo7/A(j:/m5S\W/p(9fWUksLx^4ăU"B<6yFVa.DSNi+<EgTmSKRb_+?U*DA*2W87.sm7=ECoW4X)V/6f9W4e/mTiq#^1AăU"u2Z_X'_DrVnbvs<Oe%+U?nefpwZ/n%Y\;(QI'F^lJirE&,[4pgtE9eDlP6P&jfgăU"hS&JHnKv$Am),%CTY<pqQ-7[xwXQNlaImOnEJUoZFF7O>BN8r[mH$0538yd;UMGăU"hNN1hog^xrUzM_X3E[vZnmXs)i_kg(94LY;7Fwa%SVw&=\.],^Ed-#;VZi^*ipiăU"0l<.L<6.pdnXaNq'uUj-Pwl?NH&[yHY%i,JFJ&/<Cq5ad?C&rZ4J1Xv7Gmsg*c-ăU"IIDQ$t&,DqrpEm$.0EiBIGmy$=Y,ZD90#^G+d32N1p\MBiOW:5#ZTFRVt*0CGJ>ăU"^]b6R71$uWZ-*]WTqJ*)].604ai?]r'(-LqF8pB=DGHh)>;E^b?X)L[\$#)nuu&ăU"<;#DdYDMYrNxI)o.y[:F]Cz)'$%ksp<wC8NK.Uoe<*_M:pMHg_u'm$(.*qhfTahăU"sfxCbbs(-xc^bL5R0Q+brw5j8;sn6*j&9Wnn.2xDZLl\15#9M*^U/04H*I8?0S?ăU"\+\rlfr7rWs5a<Vd$$jGWcAvf1Td+BOHQh?86AcMt^$p,]/OomYP6A#q00R%B-%ăU"QQ<Q.$-ao)#HLME:7fC\d&]P%^bTbkKIXK.]%znjkOmoc#J2N)%bYQtalO>,^$LăU"_N(fvqe>Z8LIGblohjgRV_Z,r*\=vAnYIjtw^<+rs]aA5HR2YfUMlj'hG,n+nkDăU"mu(Z)dqILUi9igRZUWNiOf]jSsDa,93<[.#KfI4CY8%eABPxA-r1WWJ[s/+WeJBăU"eGtW2+KI5h>:p<ffkNPNgFk[u%cC215,a4q0K<Y)IaLQZ_/%(4dtSu<a]1sKrd7ăU"Urq/W56D$]lO;ia;>SfF.(KVKizl:aIKVZQj/UE$k=dq/jt?t]ui,Pa=W'4(3zXăU"dtsoq=F;BdE]>.;NKVW3+)BI:61.I]Sg#S/\dWd(Jl]=XLP*o%Zy#chyz7K/2Y-ăU"^R#k<ghd5&vNfzr2=x*0gU(i:390&[1#FIXc\\AN<MF0U;oV:VZ57iM9h,JHU9)ăU"#,$AId&3B6z)DEHYu2'DFDj:x>7rN4(>cc\CvuN4X_.4h1=8RCC.]14QP$?-PfvăU"%(cek\LVAepc-0#<E-M*e>8#IPVpxq)^7OY'][h4n$y-^./Ea1OzLnxsZwOP$,(ăU"j6,$Q+s,R:U[i<NL<rL+m[g0;fWR'1nuItA^mbn32X]CTc7OnK#9Lm.3iFHM.GYăU"vcZ$o0v/'&qod/u.E.*;rpIt]TUo>6Adr0LW/bpk=]dd-mCkXB882$EFg0pk_'răU"w#9Nr*j\/KeGjmHO06)#Yec[&oX,PPbCc[SpDj%.qIWPcjl/am>.HV-uVhF\Mi;ăU"3KL'<o5Y'eEh:h5w%(*\=7^Yl6bWe<AXNP[8(jR[TH2#A.v6#Ymx'__MY5cS-JqăU"IQ?NG:sAMf0uUv3I#>9:'aUIl:k%+64>V23K6?;P]Ac3Y;D=5ao8O-&%r.C;1j]ăU"Ust0'E)5H]&1i*8#d2-_B7l.]t46,]Y\T)?=?h&tefZ>qAs9?WHBmuYTGO6qieaăU"+e0%K\s?GEW9BYYhiZRKLX$aqAQ&^uWJBglr4/0gBKzb*b8QeMxx_YJ482f;Z5văU"7=1G]5%)dAB[Dxf_0KhvI2c2.g73n\CTYB7M+Xar%[MFf(2B^zfeAA.:o8T\jSvăU"fh#U6aW%glhV(\&dvrU(Ar1I(REqmvv1Mc+2gIGt4by#,2'17&]]((tLKko+IdqăU"[w[grB7):)jjNb?4*2G*FaKbp9n-?;f(Em52QTq5#YzrL9uQThaMDaNR_=AbV$]ăU"_WJfoq8L7QtHE?p5dQUSOFU2dXYIOC/$dP1NNMROxdW&7;-4'Gb%T2uAs]qMw^dăU"OjSPT9-3q)OojJMszqvAq3t0hzbO(#\15D?4x7:ZNZ44,73'78tRl[#Au66(-J\ăU"yQ91a:R$+bh<YgV9=#FR.1?=Qk%]$fXgxv\R=.OV)qBi)ZlKH8:Aupdv1&*h+lqăU"b<eG58sTsI#4f5ZOHu:cG6P(yxC?uNYaui0TwM&Z4n?VsbD$iQqPL*:0YoOJayyăU"XqUxcJ[+L+?KDvZMoo^s'e0z*=3,IdJ?&7z;?>O_MHBCMPIkw+DaD';()<OEh0FăU"LNUzm8cCs,P#JB'gD9BY_VU,UidJe>-W4;ZpykOJqD'c:pyao4+M\jNb3#lPbHLăU"*&6B_Bt#dsk>BsDW42a1GB,Ul43jV+&D3IWj=R#bhH^H%;G4KFnDYo7i=pf]MJ>ăU"8gOqCJi/GK/qJ[O%UZBTE0NsMDNhW8odQD*(M;%m>NZ:oRbrP&q0:9zdN+aQ(%tăU"S6p_>bcMGB&#\+pgw6M.UDbD:;.Qh9c:)Nuuf:BHgYtOwj1%gonG[.DcGB<VOlnăU"YO*QPAb)%'6gIw5B=Q;I'oNSy>Qj$&E3rqR-..Z-^t-lbK#B\9VHBlSj+bx=g2(ăU"d3.8GvxLPayqAs3vYBd%f['w>N5JEW8v[QgO-&GWR7ehzEemt%6?0suA*_RxPX2ăU"l+.t;TMarpIYktJG14%B*i/quoYXHR5z2^8MDZ<]il9,l\iaK>h'I:^XnPPgDJ^ăU"C)E4PK^B:uF79nNd/7BY&9nweLP7&]LOdUx>&.'Ry4NR8Ynokn?hey4Hhysy[KRăU"CKfkbC]wN.AlC_x1yRWDdWbLoD'<A%qbQG/1X+dfAHJXB<hJM#ntw:z3HuJlS&wăU"*EV49uXQ)QD7wd(Mt?EG1ch[L^*7**ru]skqu3IbIqkx+2W^#?mI\A[9P5ed6[găU")VJj-DM)g=Xt0YfoTh%ERG[IB4'A4jRVoYfiTRbhp*^V^-&cZKF:Q#Bv7)aqtxeăU"BBsOMvcq;;t60k(N=naGImW%K5.qX)w1YsKYw2)ONCnhMC#*b;m<XC:B+5grxGZăU"3d=,v#Lgdoe,dj9G&q\Dc2oDPWC_TYteo)55>vt4<;GT-Dc<JP78NO.Is4?a)E+ăU"sX>$K:$A1p4(/*wb%'eMDr,^BdmkZjTK>>Cc3o\BVo'+DB0fF8VY(=/VgpYEm3DăU"$grT$7vdkvS&o1e?+];+)ibqf0$NcALZWVV&NOz1*J5KRP2bN><2And[oKN6_h&ăU"ji>yV+39Is.LZEmLhK5SW>-[G)lPOS;^<ZS,D(n>PWk0/.w.8as14kL<R(7jK7WăU"wrds]fwZTpDV$&JA.yiSbUcK9Er0?W_t<J5YuCU5pH7rO#&dBn*Hf4OioPvI%VOăU"MSrmO-+l81k08&rTp;emZOKQ.>Zg)T*bNk+d=r5XpR_D.x8e\.IWRb?+rW;1;$lăU"5G.Nd>?Sqxju+X1&uUDUa\:'-&1_PR:wZh1dIl[T*\T4G\&\ggYvq>:CkhFfGqWăU"bglcqJ+S^q=#*,=>,[XBlu4Jl7=,<\N:?aM+-3N2Mz>Qm5'\un^:au9-nYx5TVyăU"xJGiu4jE[ax+BsM_kkq\raVAY'qAoEV0eO,w?EEifQdOauAB&>w+6WEw>LwC=5]ăU"M1N3^\yK<]:5^_T\]RB1S66'k4J]]bi=-6?6Xx>O6-im58OL3]c4Lv\^gnK)pT6ăU"$R9_2$+&+DKE\CW]]=woL%i^aA+l\n?ecdXv2=.3WRmc?$Qqp2knMq=8t_jmj$KăU"=jM&HBV^c>C:B9]kg;sy,3ZA0Z3>FAVgE'l>C)*=%)?:78M&F99K%;wc\nt[BsJăU"2?gOX8FfXDfYom3B;o#)e8T>/HLjDO;cIDGA<owWi?uE)tuw/w#7*Dan3ICxOMNăU"r'C\1Ju,_-$H&8,P6nWA3+#_cVr#LWp_.FM7.-\Mmud]pE;eJ#ujMgO(RBkrBU4ăU"IuD8Q;(_5p<yF_;KH?:/0,xjq%HM$TJTJ'q_<xZp4LR2][<IfswKi*38<;y'E=<ăU"yuT&r.TVW.luW6/LpTx&hm?(\B2nt8sM<=:9,H3io#isJs3f9(;mHt)f7GstDm,ăU"fmD)3c)D]xUBxpxiwZFDaMPlNNx]EL.+8R5LN/X=n==&$Yvr62MO7[Tnp3RJcv0ăU"rIR.2WI(v'P%M*)LHj(ufst*<[d-rX]hkglQEAz=?ts)HKrUKIC6L7+N<yL[UcuăU"7Y-G3$b0cL2_A9Me4:Bob7qxw:^LT1.iL;D:o9'1=tBrEWQ10Q7Yp+Jbt^\pD>AăU"1zR.PLOdqU0.9.FZQ9y#R^As_*J9vXW>Stgew/PunY,EikHv7:CcpP7f$3seQDuăU"xhc]bWmDoc>bk5N08y6;^4)7-:tN&<OZ-R1VMySFwpoRQJ(9NZgiq::\oDPK1IhăU"jiq);/'E^S;e#ZMPhPaJF$M8SsX#IT9.i;jF%mY=Rny&#8rj5btW_Lbwe+7e+MvăU"OkZ/sUiu_7=dk5x/Jv.8PNPQbc:a_cepfLio5TwH?aaX:eq4XwZr^Woml+qHLT6ăU"v70A9bD3t1],9FJLrh5v:CMCl)LaD7,[B(kt?Arc%e>[YP:\SrE/p,SF*d-12jGăU"&l+7Q_-4,SeUS^gkn3&LoYf39Iq515:mv3bN:e<Y;]L#BJ0LR8MQw&eZ&HT6[mVăU"=bynrN7FZVF6krUSIxcx$+B1JpOzxewSbaMpqs-$MBk>fX1C6Tc6p[=c:2hH;WHăU"VW,Sca&9BA+FJU[3rtCXR>jK+yinCF[q$C/VN[\[<GJgtmd>64KK3a(qNdFIE4HăU"L#aU=o\ypL(fArcH)fypaoZto.sLB##T7[x$jpw9NMr<T*r3_zg,0#3ny2R-^RdăU";E&FbNg?%I3oUvbBw-/dO.jcLsuEJ5zc?7TfO$A::Lo3n?wbgXsk)1ET,2rkw0hăU"DWhbA5gAQ4o8_:nVK\TOq=*y%pAK.Z8I-O&5rT$e([t%<&Jl1a<DXLP$d;w8$u[ăU"Qgo*a-qcx>3bkk#+\D]mAd0p_mGhE?6US^b/6SPu25hTULI\UvFo,hIcj>r<CruăU"-iueW4EfU=>kB<Ta2FuTVeeBcVq<hm0UV.#w8YreP<WfQ>mdLij9G40_RCTV9xeăU"N+3*98O%VkDU]d*$M2vPDRyE)bse>6JXgb79Do=ZMybupELSZ.Rf^BiLy),&ii,ăU"kG,zW_pf,jB?PkC<gm9y4PHJmW5u^ID:X2Xu$$bO<+uQ3Oic1cv(q+2L.6s*8M(ăU"Z1rsD$i]wT4Z$8Ugd_T8dKEUeWL9A1i0lr2_,mii6c<q_j:\1N:%(9L\/%)<q5IăU"YTQaW:M':Y?blL,X'OXRuE9.K,48$(.?j,fTRGIKD0&x1VMv\,eIo^7_u-BwS>aăU"S&isl<Ht)yww[PhKUyh)oFF5a:t+V0:'jSiF.(>wQe*bDH;+31YM&s.Wg7j.GIJăEND SUBăSUB V3ăU"^9n_1Ur>C=GucYOLcfrU'/fPB6)X\'rA.%6WXkgbY<0mcJ=X)u)6;PfelSrGE#/ăU"I7Q/vD:AiZBCnK=OO;:hsnAUZnrpZ4w3^PpA?RRn6]Y9+G&)h\2^Ebz#2o*A7N^ăU"CwPo1et;^OT][/.<I%/&bTRNJBgW>J03awC\GDcI:-U+SMP*+]C.cj#E*8]s)cMăU">._zRYK2sI1JxKSSnQ/+vDeonz0K$OML4\ToPu-x(+2=e'(^d$>C6v=cl.v]YnHăU"6>bXlMsA$3RrfES;Mf_mdiD'LV=Us2'Aq8ywI#JZEGZ6.-G2S6bmy8z?9.T\e-3ăU"PsGhQS79dV]Z*yb:A\GcZ=C))Gi+1t14#X35_IR%k-bzJBY?(d.^Mi'L>xe-$A4ăU"+^isE?sRh:%n3prMLKgzY;YZgsv:N<vXDd4UC.%_oz_()NYJ_2p53FU\u-i>wg5ăU"QDibj>>;NU9g%l/5ju.3,X%U)$Bw(L2rn8NN#Np^9]a_ZJd.V(4'4o9L'6q//veăU"z^%k4T..jxG\_14]L,z[x_whf%H3SbQ<,z\g)o],t%Y*?mCeOl2%>V5Zp_Xo#uDăU"anEN=bxbjaOw3eM4/K2BKgZ59+e#_9A$vkp-/wO))4dIfuzBNDopTlLFHEcYuQ_ăU"-,4b3%nRb%*<sqCj&^3-:CA5r(0bNXGxvE7073K/0Ug.4dcF[?9X)i5hie8m.FlăU"RePFNsp7c,k(^tPUU?7tWIMT>8^CKVG^(7pd3E4C[R&FLAu;DEjQKWv2hMG&j47ăU"X-v^g]A;P[al%8+;K7<H:8>Wht[*gfTp1?G$5H]7CllXh3APST1iLTG3Dx\J+6*ăU"mb2XAr.gaVGSTp;m=9&YQ?h80:sQT^iq,dU5(O'9^;q34KVmjB1?CG$vKRHZ6-EăU"v(&.1Xv+i04x^YdGZw6\*=+Xp$MOa8]UM*k>\TYZ>Qht#1$^E_&iOQ\\J3ps\xdăU"=(9RsDh=Tc'/pOl1O,NzOX=A-dJQY>mK20mG+2W&D..vy6-\eGt4C--$YDnt</IăU"G7,yo1r$P-uLu.$b2]oabPqmz$Sa0a^qODTIhOIC9N%kI^#PF=I&F/,l_WFXw&=ăU"9]8FSKiTT$:,IRYEfYWZ+dp0MUIk&C2ZG&XbG<B:yA-idl(.f5g9cj<o%>AXOhoăU"IGG-n4marnB-jnIB6<*F\Zg>i_1S\V6ZUYmu4Gm9U;Y(+E(&Zkjf3;k;=>m$)ceăU"r,PH*Bw1<28ij3;:(P29N/A%SQ[UQg<ZR/Dge*qv69_1)_=B>XF'U,ZH>e<%=lWăU"\gVBQ\RaXwh?6P([..RV*qo$IWQF9/^TKug/N%SqpWy>v?%3VN[+oPiih;D\&DyăU"Lw4=(g/A''-+\rfD9pOJi;F\2/%?dk?N=>Lv7^1Zp=oup=%2PFF)mofbpZYwmENăU"BZh<%ssT'B_izP;<0TR.Tp?YjH8D;#h_Q.c&,iK7H.>A,q#7n*6fpR>2A8.Rr?=ăU"K*xS&=(..:?]d=r+rtN##f3tK%NON#K:QcEflMV7O.I50:emD^?7ERXQA0zhWLPăU"$Q'^mrt]CdxRMS;%59h0yc\d7G/]8G5m+Hkoz%j,h+D1Lvq0^S)LfbrL8]^.26eăU"a;ZHa%F+ofe',u1qloE7>m*b:mI0V'%pY5f?s]NSrGv)L#i_eBVTZ;UKjPEKE3JăU"EH%&;El%L<JY.3yq+>ao]z528X<-Xc01FX0XX3p]NQP#rhhOcEuNVHM+G$s5[vkăU"Hd/j<m*T^)\.Ubq[1,pBI5Qmu:.ps/;^j)CZgiP_z/B.LiV3GuPoseuI>+5SPj]ăU"-OW7]U'/#cCG55OY?>eMnFUFpoPkkpFRVA;^8CwexhMq[)De4r';#kP>p:jj%N_ăU"c:ia0IqIl.4<qN$dgQo=1c5M]r&&f:,[=J8i0JgwL<IFK>eI&'\)*2SOj-&JIH&ăU"]u-on+dq(.__t*8JjIl^06NcO._AT(XCU>2oifxmO'e4/]va)fdJr5IesSpn7'SăU"milDPQY%mQF-C\(i=1XNVrqpP;YCDpg:SQtb(#a_p=)1+5b/<jl4GA2-^r;1)#&ăU"X6FkYW\N/IWGctnC$1e?:=wC%Yyz5DYxA?f]G'8ass8)'ZfovYbkB/U1J77D[DaăU"<.d4Dj,RgEsott#:.,VFe9-mw>TOZVO$$Q7jBmU>Xkl^6Y4&Q32(5z*qK_j6X9&ăU"I;QS.sJwS;)DuUEUOsMlw^iDM\VpR1]%DD?;0;=]637\:5u?iiD]_j/%RwqfvPwăU"V$mF\7lv8XRF$/xP/<Dc*9zA$lvC9iA=U6<Gmm)VGIbEO-P?u9R-,YW6B7\Sc>7ăU"Bd5Y/(Ij2:6*Hr.?Z/9fsgn>2I=uJY,Yrlz:$BqxaytYE=c2-<hd%4kD&]X.[O[ăU"VWK74fQ3%Jv/3n:m'e1*8mg*.xiL<IWHSq4nBUg(yVEY6QbRSlQ3D#mDwU.1(ALăU"OC$CE%JIGj0ZMf?,oClAhgM)om\O]1fB1?1IbWcI+[o8epb&h:P(ud1+8oj-l=oăU"e]O9[zcc?Qfn+d-n^W[)e]ATv';9INKabGYO4;TY?jo.8pS$+(-XJIN%I%p<40GăU"G/<Fn[=h])%_B4kCUE+2^eO7U454FM&*IK6,#.)[(JzBk8?wK<WbxKg%yMmv)$dăU"eM-Xh(uGJhgXD%HOy6Mwg1*Hpj[E^Fih(hG[C$^OnA*Ck27l-bDdeQ-#S7p?)kcăU"e)w[CoHp]4P';OTQW:[Tj,Jb9hv$qu'tO1?B(?d(WFJW(FYI1DMd(GDwSkZrB[QăU"l4xAu2(v0j-*pg$g,bh8I+Gme:U]PQV^t*E&5l*dZT*.w-oBWdb^v.QT45)AmEUăU"1ZArROhSTn0$v,1<Y59\#CWmhq[jQBxsvF$RWASXMtee+$Y_#a:n?8gqZrU./XrăU"Hk^r_cH%bn/8wLy>,sBJJgRe8WY&g+7R'd]u:U=7a.20nOyutAoK>2G9H6?$E]XăU"_X[?SkWkVr<']l[(PTs)sjWL'DF)cTp%Ytp1'VRITauC'X.?,j*21[Q=hL.LeiSăU"gEL1TBYI*;EmaaK#d7;N?WY,>:?A:ZjEm)7Bfd+f-1p*^LCKb;_<;[/k\I4,O6]ăU":ho']9#.TA')z;:IgG.(rbBrKP6v/FrkN-N3SkZ6CFVU4arGo8=[*bSUe^ihoQ+ăU"VS3F;fK9'cL[0VEWA;F:qO-^6wZuV<%iyuh%K&_TL5EM,YNzM9o5#9n2HPR[XdSăU"NnIWZ4)2%\B=Y2:J3sbzekDdx(]+,Y^g:*Y&h3**^kU0F+]WnkC,I:1;]InKMa-ăU"A6#I1P)I8=w.Xc/kK\Hdo\TpUh8^UiMbm<$Kwo\tqXjDxRwounvl:lYsH+6AULuăU"f8u^;nRYTcxuTxpgNa$t.wkHuxo#xTqXwR8.9oTp^8xvUtNs&>lOsl/4R7zHS8+ăU"NlvdnwNsvNtu-xw(cq$Tx[qd(ob^qP9>wYX*$v.j3>;jidXzn83kZ#QfN[D)lW9ăU"9oNuurXwYWxE7co864lxu>mT$tcnRdxMneXeUR27w-,_SNbr?dD8CPX8*TKUu9;ăU"+86^Ce8mN*7jmY*Hu$4X5'sN578H3gDS&UGK^=Wl1yN[UKa79ELOE?nbbm(EswPăU"J#7='='NmB.,CwY2?&f3GN=$b743/,:j#BWoKOW)eTJf6w#HYe=-Ye0j'P%7q/VăU"-WJjdV5kA94M6_EnGZUWdK8*/2z[r=*HRxZ*Y_=V^4g?.XxM*Mz#g5bEnyMU5NCăU"4dvP'fX)H=A<bhADIa5V'SWmk,[s7TrfMOP_4TII_Qs4k7M$6-RIi60t-[-N-6%ăU"bXDZa:JK-bx6n2VtyxD)LXb+(bw;*AJt$tRZ*__X[\3aBp-<DEV5ibGUP)G^QVbăU"C6Vni]JOLTRak&YGM2PFn&j$Y7zpA0De>j;:&7Cd(^Ax23wv6HQbMzu*c4Z2Bc'ăU"t:3u(/8>3vF52y)(yE9\]k4ZX,MZ7-x4=DP_o,iK?;E^ztEF-TC'5.UW,#l]K+QăU"vn9oT8VfBuSd+GJ%dB3D0H(%:UiPq<mdw2UQ?[9;h5^M>otM)lr3OPb=/OAA&+QăU"^p/N</Qe/K#(hGPW#?Rlr?QC[;<C2?'H?e=\EDXi>Q(/eujd7es)gr^;q)dA4-răU">KEf+c*1>tREOMzZvUng*tfR>_77T<.wbXoND]&)*vboo3$'UF=Joau]]0)ImV'ăU"]$e/][N2MBHJB*CHwf;PQC(nNO2YZdF,]$qGYl,rM#x1URJo56<&p>rFrqY_7ixăU"XpE</cA&M_blR#KYvmI6U(cSXx$0tKC.a-M+7kdTi9f*MeenMt_#dZt*q$cSvckăU">v0se-+6OjTs$2.y1_GFfTn;-7CIf>:BEIRLZB]Rs+$#q)*e)$U%zq)c$t2irc$ăU"\Q9T?c&Pl:e2jMa\\)$u[8ySIKMI6WuqU7c]8CAp(c4C^2;(SLUR\lceB=)?4&căU"Te]qU&DlGsAZp&lV%0g9+J]Eruic^6:iZS+*.KXb9*'b.G=,JbMH0FG]Fj1OX0găU"c]DRmJ3L3'^ndT$<Ib.q'ksLNe[BKBQ[m$#-\cM#k6JqO.Q%[eU4e=+SaW>O*H3ăU"7%KD?8Lbs;13=jGKi46W_OPolKe'SzZKd&&RE.nV4jpqL-gAAj8VpXwVN_Zqfe=ăU"f)Me[>NTQF[*mGl',70-#j576(4P:56<1<<slok3a%u[=XVp$%_E6B6eHQx3QZOăU"tFnxb,O2MlWT1pZX?41IWW=rk6hH^WNfhS10>_'T.Pe8N6smPceFIlj;KCj;-F:ăU"wS2*0*nS]'72qL3b&I*v40L%-f'X'\ScL6jDyshwSDP(Lt;zD(NFBc&v+mALXTvăU"INT>9Ov2A:P$NjHi-i[\aK3$Z#>#cGqxVEBU^3JkCjy1F',L*;c.8wRjy-G,5asăU"Ih&=&2]4;J%Wpb/7km3X%+buki>6^)'PdSuv&u;d.^/z#<ITfB%Jo%7AGin[&lmăU"/WjeVPZbY2Tg-2?oJ:/AGDz/rXB/:]0xXWSbI1EYat1ho3lZ)W=+p7q?e%sTZvlăU"U,wKmafFqt]L71fwjece=oLJn&P(sX6^_*j2Ycn3^RaX&M4s?l4;%1i=::&NP5oăU"e4*<Az?r(oK97]jr8fEU<;a+.7uk#=o,fd7g2ADYW3.IycCQ5h;0vHJJ>SBUzQCăU"kE,4;(G*qE&C79(BXn:AU]k#1PfJ046f^7UC>9=]Ri*aD7f7kCU-6%;i&yU%''>ăU"vyU'Z-q2SyfK2zxd2/\\f>FWHV0tEg7qKkAN(Wk]$.+3iG.ON=G#^>,>_H0t$ePăU"sRv)W49$>(D9NFZ+H-EiNp\ND0hVxfj*l:W=]PKLl:m2Q.e$)<o;Vy)[0]CQ==iăU"Zj&l?fYpWl_Eh((U)R0uoY:CHkb\^ya>%N2x)4;6Y=32v<#aC6K+ZaV=UtH74SEăU"L.(;9'ZzQ']nr7%1P'-tRBj7]pZ?2q?UC]NyXN_wp/l-Ai*Xj62_b'']g,#nKKSăU"-8HGRp3NZO3F3ttXHRRN5-#(q^[HQ;2<ZIc9T^r'uu0A</Hxh0(_:wP1/*gz+MdăU"BPp0)sCQj;;>X=6B_a8$:]Of>lHl+EArBW?uFsb&m)o?6N5R8/s-].ts%M0IV24ăU"8x8k$G(kg<rg:NW3J<%:;=Q<tkdU2c20Dh6Oj\b6dxf#u\o3[_]RTHAoFXM&s<LăU"XJO9aa%)]qQ%9JJHsOc-Ptdkx6C3r%cSb1R]jr.\F[Xzu[h/9>OYwO_7AUg%zGGăU"'03k2IOX'L=[#:MaR71WZ9*P;c\C+MK^w^Vb1,2C&Jw9*g;TAmhbVG#g6+'w[vuăU"nud=L:l_7yk1$RR0<$B2<>af)?t(GD>dJ3&YNNP<ijV;Sn#Yc9<\'Ey^4[xLM;ZăU"YLQ%kTVh;d[smsb'+HKs4JcV-$eVGfWYliC7g/h9hB4](W_mQ[E\s.,5pHLVEW\ăU"n<6cWPES%7/'btP9VF?27)4BjY3;/sjvqmTmqv%Aq*3pd]Jb7u\OZ>\rW7;AZ9KăU"V3Qv=3u'571dtF,B=<KhBGPmm;cvhgs.\Ksc)Pz\ababLVky1b.nnlRT^<fk]XmăU"\=\kw_32KCCF4b*a?mtJ[6_mLXS)P2pu(qo5R]D8+K7>TK^KHA\ku77:O^h%sEMăU"8r[GUFsq19cPw>h545U]*cvn\_mJn]X6l%WgT8Kr0%Fj:uda964N5.*Q)igf]l&ăU"#m<8mDNXx(xjmigV3s^SY[WaDd+3W;.I?Pja#k$<)VLzKaB:Ua9ng>5:;EQtDI.ăU"KP<8oi)WvD/k\z#qW\.dMpPqjvaE?k99N0Q6Yq*c$nz3W8kNEhMJStn%/8OQjqNăU"(PViZ?;JH<k]\32Jk($LR=uH_9[aEKvip>FXUaptolP4O(ciQbk/H#LGJzpGL9:ăU"c94k'&5e)prt)o;(?n,[e$IDb6;qRmj-b/j'eW(3xz7k^s=#q(9BpBtG$GT7t(AăU"B.Za>r+JT#,9<3;u&?lI9<vu$O;?f.JWQ/&+%i*iuAW]cdOCX&t_W<5*WT_*q>EăU"HT3&f4s1Gu%6hIE#g>Uk_HiaYyFgQXOp.nE0d&p&S4qHVo.7wKWI8r4*^K)--m(ăU"BmtKE\XVM3nG:H9L-daHS*daT$i?2bjgppF=Tbha3ucYccTAQ($BJ]FL\zD=cZHăU"auu;E<D(h\5h6mB%lh6[nYkk$IWM*1^4API9q6Rjt^3A;b]C>cvEgxd6Dc?tlg_ăU"rS4Wn;w,i4vJpR,hI.6oE#U_O/4u<F:=/iwy'?fP)&uSFM\J\SW3:sNfrJ:.Zt#ăU"I%\MlhCcsKl8DaISs85^kSc*+,?Ck/UVJl.jkmEvMAuiAdtGs+'LNb7tBq\Buw>ăU"JbF.X:_Td)^F0/-pfJRiSei2U1Z%lgjlMLOM[/QWY91kE?Pp8cdd=\nnoAD3S]]ăU"s4_nO<it0LWaWQqd1]i8u_&/P]ZRYk,JS[Cu:uGBa[50Zhq>nD4kZ4i*GX#P;+GăU"N,:TgJIrssk=jr?,nMPR*l]a3iQrJA,B<%)&%/wW'fQmGO5Y1y%)s)qt*0=Gi[văU"JU93f('rWx<Kj7+2**5Nj18g_2:4+vT3#XjB?:3*HUpnd\4#&4_,c6Q67b(''WFăU"9n,JyK?FAiq[9CQ&FV?f7eYGa)UowFt7P\Oowj)8LPET'-G<,B_p>'3-U:5a5'săU">vJN7\u[J:BSrJVj^>7C\#kEu:16'I$r1$AF]CoI_A0Vr8W<V?cYHb#_=WL\dhDăU"C*sHGbpgTHaQ<EA;$C]_2GM'F.cZj-[-XCb'j3(Is+nk.1A=BB=BjO7o#t%/I(UăU">(%b5J=Bj&)U<r])Em*YT$\cwNR)f$1&g5g1UbIVIncB>)MM_v&E^jLO/ClVUN8ăU"f-5LCbjh#g;7'2=)o$g>9_m.6;C+&Rv<F*C30F1gIp,,c+Fy+,#Z[*UDKxoT33jăU"RzYb\8RL::<%#KVqH^Rlb$P\/[jtivJC=Pe8y9\yaOpdR6[wGYTaF))J)1Zn?p*ăU"1z5C6A:N#,v%:wBsz&5.DCrPnpj6X)cJE;4#EA[\,h.f[6Pf<GiVQro*;Q/k]ClăU">s-AZK0X%lB(&M'tArx_'Hk:cqlEaDKW%Y1[5=<p<6Pl4s&EiOmZ$wFg&^Y'45;ăU"2pji.T],TMbfU%ETD3bj>n6dwJXF1eP9HIu4_A$&>-*wwouU>Yv\JeF5XAm31O0ăU"kK?DDD$=P-gXcjG4'G$go-g9;iAKMbXfTjSdwgE1EB,Xl6[G1[#G[4&ML)cG80\ăU"dKdy]V,$lfl+H3/7=8^t%8bV>1QRfH_VfJ*fL*Rg3KlG^0S<x*IDl.n5^i.,&:xăU"UD<J$CeY0gbITLL3u9r.g,D=maKOeUpg8V4WAc.W+flvl%dmiqAN2o%(R+X4BarăU"K67oHAih5.n-'4mDIkcX&g>/avuH%k>BK[Ep^OOdvig8FFUWdhmncm#+/FY>4nYăU"#*j[6?I=<$u49n:*5e;54i./XtJui)WT):5)Mi0aUY+#tZk=WpaRbx-KSl-VSdtăU"J9p?R=lqs^MH0pM8Z+PMEcta*g;>&81Z:MN#y\/Nix+/'[vo:cHCo.ykuI3qrytăU"1;?9st8t5-HRK9958[T[9huaC+TMPl>.S%DIbJGI0npZ^9p9\/Ec[W3+N-b%%1băU"3\dJbe[I3*Ke^c$\ZIdb$?u\ijg,XkwFN01VHf&U,BR2ldjJen7u(q.vM#JitE#ăU"LG7;#kaJZ:kNHl)PZwd;rISeK>N2E5qx&K>iN]+X>tF0mqxRM6GEy^:$zKD(;xtăU"]LLbN)UIb?k=qwH'MhS*BXWrXZ53k1s=KxXG3Fxxq:Yy8rg.Eon-?O'^8<zQuVRăU"0m,b/&-/KiUC9Z;^COB??kYjiXz08HxsrPVhcl2CU2JMhyWFaO[BHp0b)uV_akkăU"<J/rmf<QHe0#hVo\^urpSs[0<+]91+k[9Q#0i0+>dy(D'_b&Y0g<IIo3\T%6gz;ăU"(2;k*$z8C?nQM7=P#/TM[dCNt*mZtEV.r:ds[.zYdyTG>7o,qYpPH2C?qcQN9u&ăU"-?#jt(l2qJTA/49]Yn[:B1jU<X7cpU+6v&I\]H^KUl>NP$9xdXBRZy$p6x.\g9XăU"%OXHBG_Oj#SA;&>*2U3-N)ll';9d2Oo0-xzC'^Ujj]AJiiqc[JU<A)o:dalKIYaăU"6s4taf^$>9v/AHVs7U?'KldVjxZf7VZ1JP&2)*eC7()H&05n4$.DsgpH*f3XhDPăU"KLpAvo_W\PlPuHFrEL'G9Hxc^VzNVoC>*4-I6zS1uc/KdYynU[L<>z37bBTO2L8ăU"KCjlVRVlv#?sX)8:L=LsjhPFM?R:T1PC(cG$oc?jft41%Fi3Hz3%\4(dTh6^6WdăU"r#qUP1S6q)(v4Df9PwYN#bZr*\[R+/'AbnN>eyRlAL2-gvVD&<hYF+1,(Ut+Z^yăU"R3q[TSiFz)/)l(a7HbF8eO\]G'1h^W9M+1t2NbSZot#*^BEs?9,f#OBucAD#cnXăU")wUB$bm6Y^FlAPFX^6^#_N]O]3[JUONug%z%7QD'L#^bQ:N]54g/FoER9/>9F[uăU"J5p?OQp_e/jHGHJQ_+T')78/s):=vS_y%;-1Q*a&Vw)1g,(9aS7Mt/eDR3xz9S-ăU"gXO$ba#s57p_Bnv+:)==V?Td%EyO>9P>2KRbnY>xt6&\YC#)LmOpmiy['+bUkz7ăU"^EWDOqs7v8XZ=H6FYfnExrtT&>yy:sarJ.?:%bf<]WxEL;'EEZ9aV,9<(VGnK_;ăU"%$tGiF=[]DspSQ-690)l'r?ADQ',EPoQ)QT-TU3Q&h\u:*9muV,I6RDoSChO^NnăU"?Znr,BKVDY-%1a]d52T+WHtX^TZ.eIO\lqkW0+?V(AZ6=T&l0#R%4)q&R%k2IR3ăU"XVelZ*2#W>PcpuO+.r;arhlo\[G;3Cnq3s.%,8\;C[o:3:*<dcFIhd'<Z1Dj?'făU":jjE1=f>^\p*1mQKF1J*n^%/&Z.od^W$6:>/A[&y#vr4125-JM#r:d#Ll+Q:sW<ăU"=p0Cg#M1S+5ixKGmc[DT8rN>4zlh:=\(cQL&dCMrVsuaeox**?J?DSZ)Gru0+IBăU"MAwfOlD']8?IWT,o49k='<0TIyL]HaM,F:EM#*X#+;G2b5%yc^:Py_qD9K;ug8EăU"Ug%0?<K)4bmuu'=BaPn;LYP6aHGT7*dL>]Afp%(>*Tn5.[bg\k0NRTn%FU'd2b[ăU"ZpS4>))a8PCf8r;SL.01q2L6*,=_^wVZ\v%gZ7=d](hf3klB2hHq#7fqo9IQP9OăU"9Y%z=[X$HI[HGf$L.he6gFll5Di_4H[/>Bqp*GH+ZSoeoH,)vEac]Tb3C&?A[75ăU"NWZd\ftODpX+=0#JvU[kIj'aPslfJ8z]D9cnC.GY8oJ7V^h\\jEm+ekdBk(FX1CăU"YR^tSUW7VAfg]ULJ8f56,qg1RQE;%n\-v&O_0'wnTtot%Hupo$^p8.X0'>wS;YYăU"b-NVIDnG\8/?sgatq.+*NwCH^-uTgv:8_6l5x.9bAK8XxDk?[=lD\(60GX[[+<1ăU"'7oN?]Wp.Jd52,DLyOlFOBMx3=CMiTU=(2bEm#s:s4/54VfDSc%ACo1#jPPIrI]ăU"NAOiMA5<upQ8hK'eC%]mwv$WcKqR9yZ3L=s'TeqKIb*Jl5E'=K%qtGE]r;BOwz<ăU"Y,9y-#5XVh?QW7)kkYP.Wrgr3-QXCRceE08KIi[9g.>'#4A=YLV+,?qo1Qu%KbfăU"-+D]w8a*93M+X/aC%KpE)V*O,0&wWc/_RNP];ibeuKM1mn9'sX2(PhL&9sd]NWcăU"*la8/>kX/*ZleB^>oVn6\k7497j0.Kf)zGy>%L3emfy]x;Xp)Vw0%F:,oP%%4NcăU"rBb2J*vV#8jw;iS.x?ENJU_<VCSHJEeCbGo8blH$3=uf<[;Qh>^>l<M?AMR<7JPăU"&)-LMfV]4KPVVc4%*D\F.$#g,]c42R[<aWD+D<K00p-Fk:&tUUcC5U_zRDeMc6(ăU"ww%z5U0:yZ\c5%/y6Aqhb/IS$KCI297&ix(o(uW<RzMR6Khn3s2v:+&NrUbjJ3păU"\9+NvhMIZ+H(OLzFJ>K%Y0?0xUF%$sya]QMZtD;h\C721tW_803iS)-SJiO#KjbăU"5H+1hXQ:H1/_]TttChUynLoOyJT/OO-Y'YPs6X^l8WaQ(6]M[6x^%QIZ$dR3rsRăU"%v:a-3,913_ue0^\OSwl-qMIa4e*L4a;[r,-?bZdYk5>.5/Kv-G<IC%8?$3seQDăU"uxhc]bWIDo=2p:J$$Xzl]4ei2U[^\\(Ef(Sdx9s_5yj+fs?h(,3kr1lmX6p[r8jăU"oCaBXV)7pVax:&Q(d313>sYYFN<?tBUw*1U%]O(U*U+mD*jOhKO,p,M/RiGNW9.ăU"kkm0QX.s+2]ejd>fIC)Og2Sfj=/Y,\<$^BV$1arw/aBE]#]hm1LO>_P.5^Eh_<dăU"k39nY2YxBJ=C3XdhMjpERiK4uDVL'BKI^R#2W^YqddGBmY2MAVzA+9ZO%#Xr02KăU"B*AghFh6K1iX]qZ&rWzv+Q,\O&eqWu:LDYpUC;j4f0<HRsAU+4h+U1asQU+LXv?ăU"Zxdz2F&sto9^C\$=vI-#,fNxUd467mb:/XxHCY*U:e/7N/S(ir)5BYet-l?io&$ăU"x-ct%HSE2<eOdKOUMP0J04BaXP%Z]8y+;dcAK:ughcuB)JGFHdOTW6dNhe+mcL^ăU">.,V=e+?=dgOu3QK^Q,_ZIb#mlZ\FYt]3rQ_%^2%uZj?\GWY\S5GER[#ngF'tqFăU"hq):=>nTa0:y)hsINIfx9^?/xagn0j5DQOyBJ1'cmM'=]Qft$Y(yMNfYgQ:i.s+ăU"&.zdi[r_y42qIb]B68Ab:8Dbpi6L#wUm#8ah271b*A4MFE+yv?^#8'76V*Rw[aMăU"MY+cA4F8T<YX^EuUWL#w/<J^sM7i6Js:UUs$7lr7.4t[YrQ1CvG1Zl8?R.JWMr.ăU"<gvNumtL\FOv=wRDDN^PnM^FV^drUL^FVf.J2Ape:*=KN1MDR/w&g05l]'FadLrăU"IDzx/rOGILT0%;M4lMpO7Udyh^2^<VjLZRf59Y5Rq\\zU=q%;FGSWU3sE(Htco^ăU"m#\IYn6:5f+)\RZka>kRi6iUId\?Rj]^S*h55_=^37eT-H*kV[6IJj3e81o003JăU"fCl/bhq#h2'HOe06Gk++=\;SZJh[5D>Q%#8X.ppoaMvS9N]x:UZ=\/;G5?CNY0RăU"%6oq]<Ej&Z-$)=*6KU:nR[0P2(kt=9_v*fa16'rVdm]ELvo&?UO-Bl(Q[#5)1;*ăU"6#F,;4MwUZab4&i.%ZYSynNuj?=7WMs9^xVWZ1uIh8V=8KHPHQ)RPqHMku41MahăU"a4yW:*;PNYpAUOb/5wCv5=znkF;Qzg=/$roR[/RnNGXYuaB7uDWqXAX<+<5B.6wăU"iP-9L3Ac7mBZ)2277*$\X;7Z'_:C<kT:;KrybRIZtW=>pE2_m3?p)eLzzWLNrNvăU"HbV8GphN<U>8V)NY6C;vXQu?*YlUSG1Pb&<VW_Q-*gRpMHZ?84pbm00f6=\H\1iăU"wn=&a/xdB81'm_S=kTFR9l5-_jgY:5IiLz7e(B3'S6bAi6X.1_.:uBlFbZwcX0săU"ahhSH/r\OcRr[stSaNS^S9=#NV1;q6GiMYs/Wg7DxQQY?;94,5YYdMmb-C)SH#măU"J#x].$dZ$G6C#C,#*SN_3%c4kD%P*?qu*x1fJca0QctV1'F9'M__6Q=c&J.Ei^NăU"S)^-s/)Tex9EQ9-d1CgkrwXbpt'FpXRF+[?Amomf(=[%&lcySB)%&7isVl&#TgMăU"22$:\(n4U6$(W2#.Mkb7UfBRZ)fTNK^Yh?tQ6qb'jLJaakhMyb]]WR]%=i#[i\OăU">VjIbg?=p>oc0:+zuC>6GO9=-/5\JlL4i$1*Na372PEjHI'U$ui;ubqm)+Q;OW&ăU"N>3tRbZcMSAEs2O/cq(>r>4.rR_p&*imMBc>PvKa<4vA)gA7V.-bNB2pl?B,;_MăU")Rs#S6?4t&l&4hgm4ZUOidcIo\Eh;N=EA9ehHn[cpL?6bw\\U&vGZ/$vhQ=YhF(ăU"O)t&7rNu..B>9Jtr/6,8[XqAO):M<&]G%Xg1fx8yYU3.VB^%<q.?E]tc2'B'-w4ăU"IYA^''MU*HLl[%JFplEO?Np2yaOCL^NhMvxk3#>\I8aW_ISCE^lA)J8;Yexz5xpăU"RE<I%d==z(VOi:(zn%h>PQ6FNx.Hip/z/35w[8Z=S*d+%9&O1N<P&at]q*xJ4:KăU"Q1ougLCaiDD5L^l[udFah=B'cD(i9OIgFuiDlNEc],GrNcnD%\QbU([An[xS=7năU"aojy>fa4=s*OhLehPhMKDLS)e[81]k:5BJDQiwhy1-oY_+(5-6N>55We)sl1XRTăU"jwu8vQ#^k[^<93d.4$u#,C<(,Q3,09s?M0/zVlZ#&thp+473T77t&][Ev?NNoP/ăEND SUBăSUB V4ăU"(Sqw+#(n^6YPMNoZREs4LV-//t=&<T<u5Lq^1E+lqb6i7s9:p?dV3s,ZuHA.LWkăU"#icU_uLPLW8g86?f8aKdk#6L4GN/#,>Y4WlyO=s*bcZk[WKGwBSeW0J4V-Pjf>9ăU"(uI^,dQIhR=s%T)^'QOd:_rxWW+l\$F\7?C<Bq42)[m>BRuWf):?;0LZObmAIC*ăU"g<3gEOIepXsS4TiFnV:0f3_##[[mn?XBIT-G'q%YLg*v/$A>AmaP(=TpLz>D3'kăU"\Q-q-J;$iph93Vm'ZE\gMrf)\:de-FYW'&hGG8)g')JTT&&W(0DXaN'6(KPgnY[ăU"kpX4)n>'4#s-nU&C7mUP=zNlc,g-mB3#x+[<%13/jT$\g;^*rwDdeL-_%T+xq[JăU"X<MuI+nti'^)dFp87<TGD0pON</YSSQD0BG.U0'pe^O>[Ki^>OcaC-+%rZ>vgM.ăU"us/P7lKu=bwjH]DxI+sp'%rsebw6PKPOMM'o;]*mbQF5%O3^])TJk*1KAy?VhYuăU"C_I]eRPep^9T)\1H[Q[EB)\'[:l*_&A(9SdasgmbG.]'z])+t2K'\ECjjN1:sI/ăU"pN/MUMMV7Ci+yj\Cq(:Je/^#Y&WaRsvN,Cy&[,U\g'lRIX+H#uLmo2IK1P3=3yQăU"9f-f7eNjrpNjWMvZ6:$1j;Ser)+JA4lZameDY>O1Thq.t7M]AT1HZua6cZRXl*_ăU"apa1ixWaWI.E-Y?+H:wF9Z3QOzQJ_T7M)[(.n_T;54d.I)[3e'#We$QhwO:4772ăU"PXILYrWBw\F5jPnyoXbZ3lMmIo?gv6t&w&3C1+YW.n_&kvwTNkh:ku$cSpedht,ăU";c(H#,Hao#a2YLwkROP<^bZb5UnFNa0Y]qVp*txEmjDfkfIF=)V^'aP*62ffx_'ăU":+F/67q/%92zSGTbSTU,s-s/My%i\zOBUoM&*:9i#gEOd'S1Jm3F97U:BYnat6PăU"svsjBas$x(2KlCDhX;y<DyC>R.s%utDEut%&uhkS+K^L$RWb]K<<AwnT$QKQP4wăU"bd)jp/5#rQxP/7yuX5z)5GM;+?h$AJMfoAbg:RV+3(cJ%ZJ+='fM0r7>-?P_^6căU"m:-j'1_;Aefn7:pMIKZ$=/')1*HH.FN4z-X\q1c0$*,mY<O9[KElz1(vv<l/rGgăU"yK4(V9Fp\)RGw]GxeNbbsW3^G7l)UlZ%/'Oua5_^2R)F8i9m$1NEN>l=I5&+N?hăU"9a750OB,KCgtL?qYx,%up()%9%'%I-%5(KvG/>7mHH'%%%T:%%%0%.%%&n%sktsăU"%ySifjy&gT%sIV1FiH(^XHuxN'40qA/fTlEdVgQoR=$7dpP<oluZdln6T7NR-btăU"01&fy2P=[K$RDF2+qahu<PmeZO,fTM-u-$t5d4LV0jV\DA(k2Tg6&GqC%nmGDXeăU"1v2#J9[3;utx/*Ug-wXlgEL)Oa,<S5r$'mWNCd-Zopr$CgTQa40Q4q9x/.j]Ku8ăU"-1C79U)HXRh1a8]f^#FMo+M9XKdLo=43iZ\wTuI=\f?_t;Lz\;r)XttYUJeIvCAăU"<asm5N2-^;u',Ls/BpEAtIMKpPP\C-r8YE_in_95-g2/-m-]UAl]TD2:80%^9EGăU"^=u'=GRQ]%#D&1.jQZSA2c?2YS[W4F^XqH*$mQu.pV2j]#Nf'nG\9'mhAgf-WsuăU"'(Hbp9i51kb<I2v1$i?ZR^>6RZDY2RTk06n_mkX&$U_qOY=QK[6ULphUaWJ;]8hăU"&mz8DBr?pHsly9/XSJqS[;kC)P2W%c&Y&#:s7BKqM$Bu\d<oL4w)_EEI4kJ<KPnăU"N*[9NlO2+\:6-E#I*WVkp*S18xGq^Uj-:(onc?Iq9=JvS=UEY%-(-Eh)<Pl5.8KăU"iw-%eNFzkrQ7JBKZ9tiEJ'qaeNuu(]4QGajW0&:%vc20<A2N/&5Ye<$4j[ORErfăU"Mkoh,E1OYuJ6TJ-1Ml;/f9z?VEBe]NDB<Ww-TMoT4d?aM6&+^kg57IC6#>,Q>0;ăU"/VY9UVaVi-(B6ZL'ZQAq#g=omwgSss+AqQbUS(aGfZ9k?77P?bts34HTugZy\##ăU"CxTT5k^Dg>/u*U)VHf_OmX\cefJq<RXxKB3AwFpgp6nkjOdWB::QDzdHU16-Mg-ăU"]VrtY'Q1N_-(2<K>qo\j&DQ5ix:I4&fPt$$r3xa\P(UC$$Gro&0kWv$'*<nT*tcăU"HPdsh_ox0l,QUY.HnD:nDt4%up()%9%'%I-%5Ee1HER/dKp%7%%M%%%%1%%%%wjăU"%fikt%sySg#fxb\94/;U:9UpeQWZvQ2'X16l=>p/JvJo8.n'-[^vSSNnphtoZ_-ăU"YA:]KxRAvg#^2CDfg1/f(GVRSx+Pnj<mdmBk0iSc'+=uN:5q,iovt84nd'JjMODăU"Zr[x66*H;RqqsM\]([iX:/B-U/[70lqL3#R5MBVq_Q[2a.NS)(j7uAnWzaFI;f\ăU"(:[Cnw.q\v'\]oN+jx^7U,e[,u%p&':%09%'%%-%0)T1HkjmM#?&H%%*%n'%-%%ăU"%%%%%%%&[%E%/&P%%%(%&ns%WSgf%xup&%':09%%'%-g%5(v1G/>m+HH'%%%T:%ăU"%%0%%%%%%%%%%%Ej%/PeAH%%&%nskt%sySi%fyup%&':0%9%'%I-%5Ee1HER/dKăU"p%7%%M%%%%1%%%%%%%%%&%RE%/P*]K%%%wjfi%ktsy%Sgfx%up*+%%%%%%(%(%&ăU"x%%%*(L%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=193AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               DOS FONT TRANSLATOR            zapf_dingbat@juno.com          11-05-97 (01:11)       QB, QBasic, PDS        204  13562    FNTRANS.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FNTRANS.ZIP",4^6:Z&=9915:?STRING$(50,177);ăU"%up()%9%'%d-%S1&3HDf'Ed5)7%%,5%%%1%%%%hl%fkyw%fsSgIfxtg2L>rk:5VăU"xlT[$E0\.47#F'uOv>\-:p2Q9202?J&z;y?5v?IrY)W1]8LJF<2VW=eVDm9j)ENăU"u5mlO*F3W,<#2%-VuJp^h61p;jkMz^BQ.mLY(iI3ex1bjE1^[OUVOlK=^wE'-I?ăU")e8=6D%UtwubnbD]3tGKdNsuPdOQAQYR2%>Zbc%fn&j?ai0lQX&KY4a5F66Wi'3ăU"W%CCiek]PZ:#v[X?UQfuI_8:5W<DL)a6M-vEgd?LA)nb%)3b_,me7UrQUP\A0sEăU"=1c+Ye#&JW3=RV.h4huB%8F09Y>OZUgck10.Y*j?1:0$4.ZheA##k8*mZYqnm3qăU"6VkVY$SG>pGGeXWo8)#ah-q;6s(_Lg<49,tj8+*,k8aD<%)%$aLF?/F/#CY$d%MăU"G%b(Luu4e3.wh2<?x9ZoEQ]\u33^IraY+Dh6fWkcGJo[eNniLccE\E]S3a]H+d(ăU"TE3x9y^G3tU*YnF/45NcJR$o,K^?5>u.+\C,X(k\v^vv\Cb1GW.sC63SaW.84<9ăU"gR&&3W+$qQKlv.%tptSrl(CJ,Dc6gyrF5V=DN76I;8(dMq[K6=q/wMygtX/HytzăU"Pi-]yf-pboCvds8fK^yK7Rr3l1zItn*hO/dW)^q:S,j7t2ejrVIpj&YH,D/13+QăU";TQ'Rrr;]FU6B2h=0J&b/pd:*qC0+)?u2,6Dd[IsD71Y7;ackjvh,bGY\T#cE=,ăU"W+#LKR2#Ef\7E\D+ExcTVaB=PY,jV-QHi\KHj>XGq0sqZ0=J*Vfc6DLSJ*ci6LaăU"6sRGW75S6LSeJlc6;Ba6HZGW2SE6BSJV&c6Jba6PGlW6S6/JSJtPc6Fao6LGWsPăU"Lxxk.3Yd=3uHYoCn8m:[g0<tGG1'(;9?lf%[/tc-pBT)%6uVZNXM6G>ct$PTdypăU"W,C/M*tck8%0*=QBX#^=JRZ*Tl$EFU.,u_dDU49b=1OMXRLVM9?.HCRJwj6Fp*UăU"'x>q:Xj_BF2?b<JTkIBwcq40-eIIqviUC#eJnFkC;7NxWf.g>OZ8C+>a3SXTi?oăU"+yb:=Pv_e_eKa;a;njM^)JCXs,s<hUBn.>N_=<z$,l'77JPqCUL:A.-;up+=FE<ăU"jZJr,$2tx;H/M5;Bp;KPD9,+xNA(R<KrEg,R&6:TERnFC0_$_QwJa(H\Q+u7sKgăU"SDGJZ^\-YFdh,Gy6Z>?SF'[YowqFAw>2MQ:39)$.rGNEg*usESn0Y.y$Gf2$9^TăU".Mwl'I)jyBDQomDAa]xS?6s>>nyA,VYv\<8cW6K^8N-Q1nhalbACdG.LbT#k<]&ăU"ii2fqGjYiFV8nM#K<iw;[rY:G7W'x&up%()9%%'%-%6C13H#]68r&%)%%&e6%%%ăU"1%%%%hksy%Wify%SgfxMtg<>]c[9#9XHjBKG'*bAeG7m+O3z/N:8rtR&JbE+\frăU"ME'=Y=J+J5c8>dTn,OiuE^jwoe>Bw#dhn2CU[6WR#s,voh2943bE<?j#2,=PdbUăU"7w&(q+cP(>^_1K<MW&M/aWQh;UB%&OD,v#W4MXLfM2N5U36>I/=3U/6q8%eIYZjăU"U73(x*92]rmm)[lL,]b_W6wFe#Y%6s,)*R,GP^q-e'eNnh]PM#%5*dUn_\juo?hăU"8*-A)G0S'+e\:7oRG]i(mpS/jUo;MUSQ>o:7?>(Ip*A4p999\*vqRsmER(Nm<Y%ăU";.+^M0zQ&.WL$GnskEOE_uq;fe%AVK*0^2Q/Hbg$51aLGrNW'H*B.AAA1Uh[v?zăU"p2ou%Pne.oQAcz*MnL%&NT2(xXiR6Hk$8V.)&>iM)l9,Ep8#,LYqBjftVX<30&^ăU"b)(seGa=VQ'AKFDY\_nsY[o.503_6wA>38DtC-HOlA0?u[$1))-yZ9&&K:(m?(TăU"kUgp3AkfP;Ci)TMi698#TJEJN1]uG+'L:=Qo7[KvrH:h/LuGQ;Dbe2*u.;k8+:DăU"AX=]VP,9E*RCWSh0$ZbP^\%u(_RT:Eelg6'5.21U#gdLfa)FU0Q^scwj'MYg+hqăU">Qj]ZO^/ubkA+X^sMm2P_C^x7M'Hl4812$p9M)j]OEd#^/J8n:xfN+0My4%MxXiăU"j_wJK2MYej7mlzS24ntwo7L\bA=zb_K$VrO63UsFyhtnjmL4wW+Ldp>D,(p1^KXăU"AT*Xo&%qAHoYmYamZwiDR?Jh(1<]BA,Qc.YZHJ?fa+y6T7:bWP4HF3p,>eV9;P(ăU"s^h%cI3Vwf_2zL*uNkQcYf)NBu*.D*W.bQ);H;f58E^$t5wTfx]0tw0oDx08tceăU"o2rQlD*7$L*$H^*$.Q;gkZcV6A4SJ74*=C4tJueg2QZ6D*JjL*J^i*J.;iglZVTăU"8A4N474.C5*1e%ZGvOwbN?F>kF2vC=bVMX#zw))W*rCe?4bCWn$f:'edT>H8=$7ăU"bC[CDPuZ2/^LYGzcPi8Ge9l-Ku*p/Ck^]PJlJt]Q)c&oXh?j^-Vo4+.NKsjPN?KăU"We+uMt-Z-LKKX5<[[^C31b]JR:.g<1?^B*E5oIJ'?OR67r*C*NY=53Zydg1P.7<ăU"O,NYVD;3U._lhEP1:h0Dij=H5ZtKO2JhsEh$qZQYEXWQP8M4az#'&qRh(IPYNpwăU"ucFjU8;mD;UbHkhfQk&+gHi=<4CN(FZ7I+IU_<;[YI33qOdE;SC\*M*TB]/VLZiăU"#IKPGtQ?Z;m*dNO(_^M;ViS5F45N5&($OwD;mpYX9TdaaG>+58sm*j#TNw;0[pYăU"96TuaGW>Z9hXGumv[ZyM,Wn^R-4Z(^nBwt5Mf&I>[ZW328,.8+vaiaZ5E+pU)NYăU"5B,HFTF,-]6aH>#ErT-Ixup%()9%%'%-%)z_rF]NW$^'1)%%%Z>%%%1%%%%jlfkăU"%ywfs%SgfxMthL>\rk5?Zx0=F2g1.43k1H&E8-#X\_Jf.f**s6&zOz].K/93dseăU"iq*TF<1[339-miv=DZE,tj),>KtP=)=gL3wfNGA6#2s*Pt=##-H?NOO3$$d<Qs>ăU"i#0O5+tP#Bff4RR))VN0oi?Gg\WnVCI[eG[IdyTr?zd^R\6-?l$fWS4'M/<bH(EăU"Qdh6=v&<A+%ci4<>ac2g<O68OC=5'0Ydq1U2'2L(_'tDCI[tC)gnF4;#6ms$3BvăU"mkUbLq'(+S2pgdm3bi<'Ox'%ke(+2+><'?/%.*$0:',bX;,HrTx:wQNVbfU#;_păU"Mobo;5'NUc3[IU3-D.SE:6M2'\Hax9T2HjVA)]tM+1]$-L8?P%55oU9<Q5^^-GjăU"Lg8uRP[eU*/lPuF[7;lDL>5yoYtYv.7F$kHnr51mt0=/C<^NU:y\+,;&imItq\hăU"SYhi1Lh)=-udj.V(nfmPUd]tYim31&xSppmz7KPYulp\Ecwib6dbM9#L#\]<Z&1ăU"IpZC5hjdIOUHi4Rl2yE62()(7#fCepbCCsWWug;-uE/R\Om9W5x1k-[;]rc:B5,ăU"3C(g&,_.I8<_TAoa)LF-Bzs.aiyzb$l528%jBhMc)d#7CW'zGh]Fb2)d8CFW&zhăU"T^F,))dHCW'(zfjtHJxMrp'Ysg/rq=Yw7?wIMWyykAs85E<.,Q_9:g7feG\]plKăU"o:DsJrqPJf?#:s.NKM-tXyAH(p;#/:616/pWW0P(wyFDJR,.Js-cq,_*juK?.RPăU"\B3=VU-F],'RvH1$16lG,Qv*MEXd,h93fQ$RtOoGeaw*DCh:,e=ifRcJ^SDOS04ăU"&5'RdkMETl,ub;'-n4D,+n^#R#?ee\Sue\/e:8%onOHtSlPLKTLiKeLCKCc<3>năU"+,td$ADLH/aX%$m(Hse[BLOP4R6<uR$%e9lko^=$t50lt5Y6Jqb0=KcuB&SV_-DăU"Jwx.VfS\Eehl,ZOf'p>Pl&2:VoVF_oR3ZpFJwhRVAss*7cV\F_#K4ZFDHwhjMVYăU"%\PT8c+cYx6r2XVcajDJKD<*[Ne?Am=9*-;PA;vMmF)ApjNPEm=qN#'Jrn9]t4-ăU"o5marG92OIy,R5n*p<5AoCge_I>#_jRiy6_Q6diD1GJx\X<e8ZXx=N.&FBQ0G%\ăU"kUdZi&25)k(<sarE28dGcSB\-6<H\MMPApCikhJexL*KKf0g(M&sKwc5jpZIb_RăU"Ca'2&AfojkCQd3RGXZ2aza52;(8JNA&I>QQMe_DY6,l>R:nRMKPNQ0i:aLF\rARăU"L0*FfVH)M\4#kV6md-CN&QLS:c.'C;kf$,cho<x&9p7eEG[9t/g<I#im^&hFV^băU"S$sK>MZXb_?NLPmnuecbrM_\aK[tQ]\X_o^SKF0c;$)4z:N04o[G54XXv,seqV;ăU"Yc6Ppk$+4]>Mwo]8=jC.3>rm0Rh29jN4;%Yjf=VD2d^#3c'4sK5a%hX80(td1bpăU",:tIbU:M]q4J6s#gQ^xqoU;EqgH3\lZ?we:2AQU^R=,kA4t-5Z):]BW4V80tMYTăU"L<g?wgs4%up()%9%'%#-%.O/(F9v,Zh&*7%%u>%%%1%%%%jk%syWi%fySgIfxthăU"3f>ymX9?8j0qdkj/F0LVs3[dVJ<gD;*B)YekFh=oL0%ia]ng(1u&xvGL1QqtHYIăU"Y\T;^HhuX5Yj'b)tZoV'n_NhI<q=b;V[2Ai1#K%^o]+y(R1qI*9pXOU2mgB;0c/ăU"J6WxGFfm/a*/<'-fA4eeKFNg%yx#pjUo&G/Ym\ein%PlU3qRaQYW,Uo7,e$#4L-ăU",ok+.SK;-'$hI<ubd=YLjdi/)TI\,q&R,atVF(w0J]vgp8t_C)nO\i=b_F$4J8=ăU"5GRa-XelS7e,SlSC]e.xZN8*6<GW^iu[X:i.BVYX.6C0O>\rEaO=asv:,80obXnăU"Rrme[nU7*2a3QU_s+UHB[iT'xNR#%yr0L00c]_'d%.+qn(u+zZ;pPcZn</,r[yiăU"7ueI0lgRe&dPu=hOB)IDhEE8mDP:2CN+IDmP4r5CtrrtXEs&G[\VS[%dbJQ6$iTăU"Bi9>dE-#Bf<psKFy0K%BdsZTIBgInjWEn%#)gsE7zh7+]Z')1VQv*9W[u1rGeA:ăU"0jdsCQo;v_QQpwBQWA(:A(0g1eqmwOPc4hK,Tn=SMk0o?n[?%AMGiG.lD9xHa)QăU"6Kc93d<xSzNgT0'f8X7-;(tUejO:#x\-rJTBUs0E2(nZDrjU/'ryqV60u/4Y>]QăU"#:Q,lCtIsxC5qLdn<(L;#0e/hjGpRUh7^a,LQ$F;#0ZjC#22I\%E3fn%-_.n+y]ăU"Ii9GzbI1Fl+:#J.vA+z3nmL\&tf5SmAz'snmdM&4_SC1AzUFnAU&U*tLZr7gXv=ăU")$HU^ov=^'HVoL^>L[D\;#dY'hrvZr#1+e^7\9SH4LoFJjqF*]uG\^hetws1)5'ăU"<gdX_[D,fAaUH,1QMh47^XrJ-[-LMP50'4^5>.ogekL?OGf#kTQ&WD#zf;k4*u^ăU"l*^1g;hDG*w1jaTr0cZGrMl+gc3dVDvK15FC1PE$2PT]Q/d/.w.*N,ZVbDi4*WVăU"Z^#g%l;ge>igl^VsP=gjG2pO0lpC1p?H#g<t1pr*rtd)tb4*,$\24/*X,uQRjoQăU"R+uQ<l*;VTQh5Me0JWe0b=)TrphE><?yNIvp9\\?OXYxj-9:JI.OWF)>=W&C4U+ăU"]sZy6U)p/IB#azi*f=SR5lPU,YT[yMp>ZBhHwb=tcpH9/\AsI<2W_?;#=%J=V7%ăU"<o)#jW%tmyk5h9EWu;L9<XFE_2-N;U[M\hu.WL>r#iubxbTpEUxjK%,H4.ZlIClăU"],\jk\6cUuX*xe?.wVKwjQN;1.Z/uI0Q%2_2RIR[E?:9#3MEQ)0C3N*.gKXnVX2ăU".0R[eZ#X&RMcI\,t/nc.e[6djR_kni2X6GqAAz7Q(2RR4<r0hZAb_,AhI<v,ul;ăU"wks\i($T8hm9[l<FQl)-&*fvj<9Pe)zGXGQr+liArs[+'atPjnYh8<pcsb=5:qaăU"&16%8KLmS^G?cUsUC&MCpV3V8g0pHN6MkaN.Dg04Ips6?B#8h:(,,<cMIFD/ePaăU"Z\M]j+0O5vm9Oa[9HBSpkCG((Y.xI:v2#Y3rdQs$%HF>Na4Z;G\$T$z?LPB3ucjăU"CAR,<5Wl)U+n>3s_]tPI_0_5MgkaPBKV($kn;cb+tTEs#X4rtfH/$-rJJanbp'0ăU"q#)&mhhB'K?9_LHe542s+fjdu%p()9%%'%-1%h_r7FieN+[f)%%%<A%%%1%%(%%ăU"lf%kywf%sSgfLxt(:)>rk9rv=BxTZ;4,uA<k>U[M-\OiA_'H.**3E4*zy\?q9M4ăU"Q%OY?j8h1[=AA,/oFYGjCpm2H$GUk1A=Wc(\;uTWx90=o_p1Wi>=&e,R6'AsnfOăU"Sk30THK0O+J978ge+4u=i3VJEJT)h#^)ml]-LfKsNayDGD6d>&.W-/d=+NS1ynNăU"#3((E)b.,=6r9oq%iR.2H^Cb0(TEdE>sV,)E2'2B2Ltj,-FXM,Wn+3il>Sp)^BjăU"RH#s$n]14YC*-BI[;,5h;Z?(e9q:_cX0a/*IP(W8T'q1,7vWdUqG?V&Qch-l=B6ăU"2K%k;/_.2oVzjRa/4jZP0*fKjcY]0P=oSv/QF:YMX0QtBZO-wsf1=3)Gq0WuPrEăU"Smh\ddv5SD146gd&V=csy=s%^#Et.\egwOucWGcta,BaKA<[wj%$?(Sx;bY\JG7ăU"6[GA/C.P6]Wu.9xH(22_d\jB0PA<xZMLa2fTm>PYbsP<w$+k.z/WV=b-4=>:LkYăU"YF1ts&-V>>X*pUtSfUXz%Vh),#Epj:V/U0Rw3U0A;2W^0erO\O/BW_Jr\s<,;2oăU"fmQh:E'W<CC/t>sgFgTY)V_1j9Gg]w&cf;W#Mj>5FF<wc%v;WO7jv+5Jt94k)T[ăU"pvUK(AsL94iT%qpvUS>TwoE8V+f8F=l;22H^VJ>WeFF>l[2DHnV>UYmcCWkGX$^ăU"T,v..YV*e^7Z9sjgss,7zP,zB4d]6]0o8(naiN1\P*V=[86w3eYNA4^*?760HC]ăU"xuYm_L.*BjQIQwi,Jhq:j<dv2HpTF%]t]uU*p.F%D>,_^Sh&Afrl2Dv1$PsSPStăU"cYt1cwscEYvc7jWfR3rUV5UVVdUV6uUVrT14dA4DjAD^zADj\BDZZUcyD,?Z^'yăU"qA&q27Pr1PPD2^H$2^P2Y^r2^g#;D\c3ML5fMLdM=LuML1ruLwPftcflt-atqcnăU"t-O.p8<b4<RdW))P0L(0V\ScBOftEuS'PU1:qrgiB4cSs32.*C%P^a;EjUu=MO]ăU"SO42e4C%d^a;Emr)$K<]Sw42K.C%Zgb;oor)$U<$SI42.*D%P^c;Er1Uf<a9u0BăU"^'vdhTnEvBkk$^j/g^.E>m9Ttx$87xfJZdg)=>G%5?QHca1)):zCHxhAqm66(>7ăU"*KyMjO5hkZ2#:$uwYr$Wi#0:EwO7SmbX\$YdK#0'4lsi$65KVXxvDs+QhxXG:XxăU"^(E3q2:9yJdr7SMOOLm,mLy<I-R*Wx'l[XfO3pa4=EE9E5.eFN3f%AF=>(VOC]eăU"*&P=O=(A3fYiGzK51kiB[JPn]K=^V^pGl(f#otubPYX*wnRM&Wnk'qx)3h;k<ceăU"bWV0aLelu%%]]25G]KWF$mFGbHWK'ieU(>FTw;Qa55=/SP#rnq1?X5%MSBnfBpVăU"pXYPW*GMv]t\7eKO,u%mXSitwO(3-I,iEIsL\%/w-#M^fY%KKLm?J_])IN?pkIEăU"jzcL8s7u_AQ9fJ%s_q+FD.w3-;H<iT$xDg0B3t-k;A>-<5Ul]OVTE>$2E0_B3dPăU"VS0([GCXN;jrrZjK<3g>-&Rl]EoDKG=q7xA.cglba]7D=,6ieTkHwZTcd^$YBtFăU"r1]VTnkq9/(&'x&up%()9%%'%-%2/N(FU0K+7%$*%%'EA%%%1%%%&%ksy%Wify%ăU"SgfxMth>>\ym9?<XjqB3GqF0Z0&jor[n4TSSO/3IR?pF<h=o2]&YJdJT+?*?8vGăU"1_Q1p:f:Y\9s^HEhBE%L^18<y#L;wfN$P:8vX3'0$TL9T/0F&Jwl6/'K?D;p#j:ăU"',Ha3/UnT6-=x$4EI)a'T0P,E],Egc$NP2yx^JF=tP6CjskoVIz9H4*J;nG?\cSăU"o7,elBV.gf1A/zR)[O2w6(FChj(V'Unb&&fnZ(J,p(mvLO&xXL)Nqhdh$$0d>>YăU"NK^l$4J8=7G:a-XepS7e,SlSC]e<p9wKGIRi3eYq<7JXcb2p7:t:)(6Y[/p(1meăU"5*^w-SpIK7ZF*Xm?o=_p+7D^AK.\BawajY7d_Goun/(oMe++7(kQ&xI79^yYiI9ăU"IUrn;;#c:vQlX'oTdCO/V>aqV_5(H=-?]HlHr)P'SBY2:GMWf=.$8.mNZ#,2xB:ăU"-Y2%wUHW\5w-q%B)FC-ki9>289'8VzD&i];3F6ms>_p&%'FLE4yF.)O?+'Yk<v'ăU"jZ.u1;reA>S0dtCcS;v_ZQpwBkQA(:T<;7ba.A8NWsKp,,5/Ch9TTECE'-(OPR*ăU"uBggv)c2Ws7X7x$3c3Lu%xKU0,_)d05Q3WgOcQ&Pu=%5k0$F1BUf\3JR$9$0+VnăU"xW&;<qER9a$+y)jA-mm(ctgm9hy/2.qp*%^Osig=#2IC=Jp+iG]Q;9)YG&2Ack5ăU"Ve/7Qh%g7:^1.$Bz%_nmLM&tjSDCBzI#nmT&#jngc2+dM7-KHz>IIFR+)d07WoEăU"z:-H5qnLop*G(^UuJ?Ku?2)>3E(Wqu4?uL_2)7ruwKeYU1NM7YjNAGZB+aq7sIWăU"lVpCXrCCX?_.Ax'2'Y9q_/u>[[,6w5qNbTfRm<G0n5Rn4hu7)D<px$ES+AW[YKRăU"4*'lH+a[B#0*&$D#PM02(;irC;2p5*_#ned;_jpwS3JB_Dv>_3<trVx-Qtl+QVZăU"L*4TiQ,MeS=Je=t(eWbcQ6gedCdE(:7E(Q$/A_/pwW&ie2Pd)td+QvZL*tTiQLMăU"eSMJeMt(e:b$QRgeR&doo47ooQloiCeS0Fo_1DJ'.VJ'3*uZaK)91r</JL?%:QMăU")KvQ?Lyd6aNyYn::4.HKf?Aim:'UN)0T]j2^9e_tj[]uaS)1G<</Lg#%:UW)C$UăU"+A&#;Np='pkH<9Vg#e=Xh_rN<'[+3P2C?#SL4Dagckw>1D$Roa/ZYF>6$?)7?\DăU"3n94>hBJxi4c(.;LX/KDG]kTRK%e)?[F'^q\S\wt9#WXj3#X(;.9Z;SnkC5-nAWăU"]GI7FY7u^Lx[<xr(Ofo9(7u8R$x$O<X14pn]R/Q9;?(Bd$uR9lWKh>2]B1sZe(*ăU"TI;k/7Od%RcMI\l/6\N:>RPX\e,\cZxMj82aDza5<<23Dh4ce'\GxpIv*$E_$F\ăU"nTNj(xIwRPiHE/C;Q2+4oO[gux$U^7EH748eKQPG]AM[(&CvrFI>eTS,c>b>5:qăU"a&16%nKLmGpG?WU+UCBnCnv3V8g0pRLbNkadZ+h^RMPKW3]:Ne7(TQ<J9.a4TD:ăU"B)DVkG()B$xIJ:dAY&32osk$%TB(NaZ^7^j+[^MvmOaM^9BV)x5jlfA;^Sd^+22ăU"H4]12*-hHgpf&_ZAm^d4^+Tp6CI&k?uUBatiK0Yf4L/s/7rM^ts8=qXte0mHv(xăU".pD<Hl>r(imss2W?>8.KL6YZ_puF58LiQzP7-/w,u%p()9%%'%-X%r731H\SC*ZăU"s,%%%^8%%%0%%%%ksy%wfsx%SithN.'<>\rm7wP]=NwaBbYjj-t[X$[3dUN.pl?ăU"bR:(Qk(HfT:[=#MR=Q9bZnwszG=)(hKJr=d:h$Urn&dnMM*&b8Ai953OQB2%Ss>ăU"E(-q=C^8Ga_QH$YK+JRzIS_KfC\=2eQ\I3Q]piQ#+W7kVHz<^H#8p]pM0JWd:OaăU"]u4/\^7S=?YHaE(*>zjpzKG+A?<J^liNiX-;M.aH[qBkSWz)H<k'e%Y55QtR#%iăU"rdd^O#SYM>h0B/k&j)J-wp?mJg'p%mv\3%3TkB=7Dm,S8^F%cXG3r<&4*5;g1SOăU"fhI8W/r;aBl#G6ngo08?bs#O3nEF?I72+lan>4:(Ow[m1,37Z>VHWP0U$x(UzXFăU"_MXZefo?'3<w2%6X%ddLk,h^HP'apm^nQ0O87Ue\<)IVVc91L)r3<6XB7f5LbKTăU"jokKQ.pMJj0T:j.l?D\Ur-Q6*]';IXN#he'rTsS+^TNjIw^9Q>dZ<(:vk2>1\)GăU"%x$-i;.rW#24,RU/:rirPDx3rBzX8tH*jE_:G$=r0rj3eFBEPb6%K(%p3ytRR\YăU"vCtd>Q(wNY=j1d:P[bnn1<c<Hmr]Ftv[C&<AdGa3b>2?o^/SQPZ;V2G\(usuy54ăU"F0B#JQ$P?bs):R*TD%kWiwQ'jqzm>mlv_^k$.=gvQZTIY(ekj)qP\T)9Yh<%=U^ăU")0H9'C_ie-)o]bt,Y5HmObeq?+,lXNgXT6r_u_zxR4Fkq-)_7ziJ*\K5PoZ.-rRăU"+9DG4hbVATT$tHmc2(7JE<.Lochatd3?B)cFGdpzI&:kHuu^\L\V)L<]CV+Cp*SăU"\7qpug^4bUC7VjTJj0yrUvHF);0wl6$83Pf?T]^8PTt&QgWsaakJqA7m7F4:a[/ăU"L]R07/3$_=vDVyye5,%QPh$?H:8a2D[g-hf[,W+jhn*B)/%7i/l>Hk*5[xz.L4QăU"\0v;)'J]Db_Q(CKygs)n'6.+Rsn'fH6i*akP9bcZ9\i#pzy_pCZ<jre:U&QB=CQăU"O3j6iUqclGJ(#6+_g)iXK11Sy1E.pCdNbAB.:jsnB>PBiqGB3iHr]Sx6pY(fCelăU"tQ0N$n#nyGDpD[zORq%rJ5c*kuK1WM?+3u>d\e;ZiBm#Ph(ic=%W5wN7=t>%585ăU"yt,Oe>zz3:D&O#BdozMpw'ioK3wdn^9eqil]+X^stq/eFVng_?=IwN8i5#LUNniăU"y)ll3m%Sf(\$%/5,7Z<PuY%9wgR<gToO0Z]4IQQGeeZcTjoCz^cspR%IPMqA[];ăU"L>8,^2ac^Pk]S.ljv*g)\]J(%C2$a;bCF%.*8z_07m+rZjGx;pZ,GIl_wvcLb%xăU"4H]Vgmzc6DUH>N/^kH=,Y7H,zK5*NV1,e4QdNGmXne'lki3n#/^6\?B1a5+K^[SăU"=)TfV']IY%a;FWw1F'J_TBtDnth]:b*+j-g,hQ\#eCPC6$:,\<j8XE-*+r(N&J[ăU"0Z.o'cwLxbwK_pfU$^E?u,WU+rkMTAAv/463k>v>IE\8]?]Tqske(GAD9dN;Ng'ăU"v1C[Iloh%%UC*_$^7w-gnI%0nQ1$Tic<)K9*Ycl9FD<yOmW^NgOdhRckHY>FOGNăU"pgIO_.;Zd)9<k6aUrcAD'7'[pOak7ea]6YcccEi:R4TUUp)?IQLom$0g,MC9o]EăU".bzhGrD.::C<upLc9&Xk(>d$P/we&e/K-+.DZ9<EBYpby%WHP&Bfs'1^^W_n$UhăU"9t$W/D61wny/Qj];8bh18ZtTHIG9DPPfF7i&D,*w,rO3Aa'p[hQmL(wYw(g0C_năU"86Mr;)7?(lkl,31i&-z:St8.YvrKGOz*5B3Tq5pa(DVeDT8^FoS*E/q5ei&3d7DăU"uD0$:W;/p0O;O&dX9c>p]%J81;AI3*vP%Yo-Pg[gwNCkGPe4Q;[r:KZFM,nq6#AăU"<JXO2=+)R+:4y0g2&<DIyg<e9)mdA'k0(FHWqAVK#R3[zpA&emWykL_6SaXwIsYăU"J*V1ma4wb*A<UaY2jO+7*Y&z6R.w'YU]HM-Jd&)PT8Ug:<=:=_W$aapnX0#=LEoăU"pUK^>Zh7D5#e>n6Q,s36,&U$Y(*AtOz8Je&9BmB/MogNy(3Ko7X*4sB&+.5b0SFăU"1bQ$EIeDG$O3FOMs2KF(?oryL8(Zm>hQ-1L0i0)LCI&s%hZw:2sU=jb^R?q2B9'ăU"=CFc[+3#v.;K1E-gS3kg7A(6zH,+cezJyg_Ma^$iYQCswns+'pv9w>+LVn4e+=AăU"tauP.IzYi1kiM&uW,u#.+#H_WFx][T3gD%hj'%?>AC<r7A$MaP,kaL96&TA,^=uăU"H=+<m23\qW&e=6>?CpdMo,MEKFaV;&J-pRh>.v-r00AY(j_\^[c9FiplGQUhP(oăU"c&RN:e'0ky-N0+xDT$(N]u=Gx$IN768J$Hq=oCA'vDbuFK\tHR17u+<oX#K'q'6ăU"jHNRjA021gXxO#tAL,1LDW*S6qsKOsTqo1p5n5+2\dCqrP'ECBKglihqGC6:b7dăU"\=\Pi.Dw2/F:[sw(%up&'%9%9%%'%-%5S13H7DfEd%5)%%',5%%%1%%%%%%%%%&ăU"%E%%%%%%%%%hl%fkyw%fsSg%fxup%&'9%%9%'%m-%C1&3H]618r%).%%e6%%%1%ăU"%%%%%%%%&%%E%%%%_)%%%hksy%Wify%Sgfx%up&'%9%9%%'%-%)z_rF]NW$^'1)ăU"%%%Z>%%%1%%%%%%%%%&%E%7%%3-%%%jl%fkyw%fsSg%fxup%&'9%%9%'%#-%.O/ăU"(F9v,Zh&*7%%u>%%%1%%%%%%%%%&%%E%%%&k2%%%jksy%Wify%Sgfx%up&'%9%9ăU"%%'%-%)h_rF+ieN['f)%%%<A%%%1%%%%%%%%%&%E%7%%#7.%%%l%fkyw%fsSg%făU"xup%&'9%%9%'%I-%/NA(F0K*+7$*7%%EA%%%1%%%%%%%%%&%%E%%%'W<%%&%ksyăU"%Wify%Sgfx%up&'%9%9%%'%-%6r73H_\SCZ&s,%%%^8%%%0%%%%%%%%%&%E%%%%ăU"hB%%%ks%ywfs%xSit%hup*%+%%%%%,%,(%d&%%%5J%%%%%ăEND SUBăCLOSE:IF S=92AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăHauke Daempfling               FAST PALETTE MANIPULATION      hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        295  8187     PALETTE.BAS ' ***** Palette.bas *****ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă' Give me credit if used!... thanx! :)ă'ă' Super(-fast!) palette-manipulating procedures!ă' I'm not gonna write about all of them, just check out the samplesă' below (I used every procedure)ăDEFINT A-ZăDECLARE SUB CopyPal (FromPal() AS ANY, IntoPal() AS ANY)ăDECLARE SUB InvertPal (WhatPal() AS ANY)ăDECLARE SUB RndCol (Clr AS ANY)ăDECLARE SUB MakePal (WhatPal() AS ANY)ăDECLARE SUB RotatePal (WhatPal() AS ANY)ăDECLARE SUB FillPal (WhatPal() AS ANY)ăDECLARE SUB DumpPal (WhatPal() AS ANY)ăDECLARE SUB FadeIn (WhatPal() AS ANY)ăDECLARE SUB FadeOut (WhatPal() AS ANY)ăDECLARE SUB FadeInto (FromPal() AS ANY, IntoPal() AS ANY)ăDECLARE SUB GetPal (Col%, R%, G%, B%)ăDECLARE SUB SetPal (Col%, R%, G%, B%)ăTYPE PalTypeă  R AS INTEGERă  G AS INTEGERă  B AS INTEGERăEND TYPEăăRANDOMIZE TIMERăDIM Pal(255) AS PalType, Pal1(255) AS PalType, Pal2(255) AS PalTypeăSCREEN 13: CLS                       '320x200x256ăFillPal Pal()                        'Get current paletteăăCopyPal Pal(), Pal1()                'Copy palettesăCopyPal Pal(), Pal2()ăInvertPal Pal2()                     'Invert palette 2ăăFOR x = 1 TO 40                      'generate random backroundă  FOR y = 1 TO 25ă    Char = INT(RND * 27) + 65        'random letteră    Col = INT(RND * 256)             'random coloră    LOCATE y, x: COLOR Col: PRINT CHR$(Char);ă  NEXT yăNEXT xăFOR a = 0 TO 20000ă  x = INT(RND * 320)                  'random pointă  y = INT(RND * 200)ă  Col = INT(RND * 256)ă  PSET (x, y), ColăNEXT aăFOR a = 32 TO 288                    'show palette at bottom of screenă  LINE (a, 180)-(a, 200), a - 32ăNEXT aăSLEEP 1ăăBEEP '---------------ăFadeOut Pal1()                       'fade out from Pal1ăBEEP '---------------ăFadeIn Pal1()                        'fade back into Pal1ăBEEP '---------------ăFadeInto Pal1(), Pal2()              'fade from Pal1 to Pal2ăBEEP '---------------ăFadeOut Pal2()                       'fade out from Pal2ăBEEP '---------------ăRndCol Pal2(0): Pal2(255) = Pal2(0)  'random color at beginning & end ofăMakePal Pal2()                       'palette to generate a flowing paletteăFadeIn Pal2()                        'fade into new paletteăBEEP '---------------ăRndCol Pal1(0): Pal1(255) = Pal1(0)  'generate new random paletteăMakePal Pal1()ăFadeInto Pal2(), Pal1()              'fade from Pal2 into Pal1ăBEEP '---------------ăRndCol Pal2(0): Pal2(255) = Pal2(0)  'generate another random paletteăMakePal Pal2()ăFadeInto Pal1(), Pal2()              'fade from Pal1 into new Pal2ăBEEP '---------------ăRndCol Pal1(0): Pal1(255) = Pal1(0)  'another random paletteăMakePal Pal1()ăFadeInto Pal2(), Pal1()              'fadeăBEEP '---------------ăFOR a = 0 TO 255                     'rotate palette once throughă  RotatePal Pal1()ă  DumpPal Pal1()ăNEXT aăBEEP '---------------ăFadeOut Pal1()                       'fade outăCLSăDumpPal Pal()                        'restore old paletteăBEEP '---------------ăăCOLOR 7ăSCREEN 2: SCREEN 0                   'easy switching back to screen 0ăSYSTEM                               'programs's overăăSUB CopyPal (FromPal() AS PalType, IntoPal() AS PalType)ăIF UBOUND(FromPal) <> UBOUND(IntoPal) THEN EXIT SUBăăFOR a = 0 TO UBOUND(FromPal)ă  IntoPal(a) = FromPal(a)ăNEXT aăEND SUBăăSUB DumpPal (WhatPal() AS PalType)ăFOR a = 0 TO UBOUND(WhatPal)ă  SetPal a, WhatPal(a).R, WhatPal(a).G, WhatPal(a).BăNEXT aăEND SUBăăSUB FadeIn (WhatPal() AS PalType)ăDIM WorkPal(UBOUND(WhatPal)) AS PalTypeăăDOă  Count = 0ă  FOR a = 0 TO UBOUND(WhatPal)ă    IF WorkPal(a).R < WhatPal(a).R THEN WorkPal(a).R = WorkPal(a).R + 1: Count = Count + 1ă    IF WorkPal(a).G < WhatPal(a).G THEN WorkPal(a).G = WorkPal(a).G + 1: Count = Count + 1ă    IF WorkPal(a).B < WhatPal(a).B THEN WorkPal(a).B = WorkPal(a).B + 1: Count = Count + 1ă  NEXT aă  DumpPal WorkPal()ăLOOP UNTIL Count = 0ăEND SUBăăSUB FadeInto (FromPal() AS PalType, IntoPal() AS PalType)ăIF UBOUND(FromPal) <> UBOUND(IntoPal) THEN EXIT SUBăDIM WorkPal(UBOUND(FromPal)) AS PalType, Direc(UBOUND(FromPal)) AS PalTypeăăFOR a = 0 TO UBOUND(FromPal)ă  Direc(a).R = SGN(FromPal(a).R - IntoPal(a).R)ă  Direc(a).G = SGN(FromPal(a).G - IntoPal(a).G)ă  Direc(a).B = SGN(FromPal(a).B - IntoPal(a).B)ă  WorkPal(a) = FromPal(a)ăNEXT aăăDOă  Count = 0ă  FOR a = 0 TO UBOUND(FromPal)ă    IF WorkPal(a).R <> IntoPal(a).R THEN WorkPal(a).R = WorkPal(a).R - Direc(a).R: Count = Count + 1ă    IF WorkPal(a).G <> IntoPal(a).G THEN WorkPal(a).G = WorkPal(a).G - Direc(a).G: Count = Count + 1ă    IF WorkPal(a).B <> IntoPal(a).B THEN WorkPal(a).B = WorkPal(a).B - Direc(a).B: Count = Count + 1ă  NEXT aă  DumpPal WorkPal()ăLOOP UNTIL Count = 0ăăEND SUBăăSUB FadeOut (WhatPal() AS PalType)ăDIM WorkPal(UBOUND(WhatPal)) AS PalTypeăăFOR a = 0 TO UBOUND(WhatPal)ă  WorkPal(a) = WhatPal(a)ăNEXT aăăDOă  Count = 0ă  FOR a = 0 TO UBOUND(WhatPal)ă    IF WorkPal(a).R THEN WorkPal(a).R = WorkPal(a).R - 1: Count = Count + 1ă    IF WorkPal(a).G THEN WorkPal(a).G = WorkPal(a).G - 1: Count = Count + 1ă    IF WorkPal(a).B THEN WorkPal(a).B = WorkPal(a).B - 1: Count = Count + 1ă  NEXT aă  DumpPal WorkPal()ăLOOP UNTIL Count = 0ăEND SUBăăSUB FillPal (WhatPal() AS PalType)ăFOR a = 0 TO UBOUND(WhatPal)ă  GetPal a, WhatPal(a).R, WhatPal(a).G, WhatPal(a).BăNEXT aăEND SUBăăSUB GetPal (Col, R, G, B)ăOUT &H3C7, ColăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB InvertPal (WhatPal() AS PalType)ăFOR a = 0 TO UBOUND(WhatPal)ă  WhatPal(a).R = 63 - WhatPal(a).Ră  WhatPal(a).G = 63 - WhatPal(a).Gă  WhatPal(a).B = 63 - WhatPal(a).BăNEXT aăEND SUBăăSUB LoadPal (WhatPal() AS PalType, FileName$)ăăff = FREEFILEăOPEN FileName$ FOR INPUT AS #ffăLINE INPUT #ff, x$ăIF x$ <> "PALDATAv1.0 by HD" THEN GOTO ExitLoadăLINE INPUT #ff, x$ăx = VAL(x$)ăIF x <> UBOUND(WhatPal) THEN GOTO ExitLoadăăFOR a = 0 TO xă  LINE INPUT #ff, x$ă  WhatPal(a).R = VAL(x$)ă  LINE INPUT #ff, x$ă  WhatPal(a).G = VAL(x$)ă  LINE INPUT #ff, x$ă  WhatPal(a).B = VAL(x$)ăNEXT aăăăExitLoad:ăCLOSE #ffăEND SUBăăSUB MakePal (WhatPal() AS PalType)ă  x = 0: y = UBOUND(WhatPal)ă  DIM cStack(256) AS STRING * 2ă ă  TopStack = 0ă  cStack(TopStack) = CHR$(x) + CHR$(y)ă  TopStack = TopStack + 1ă  DO UNTIL TopStack = 0ăRePalMake:ă    TopStack = TopStack - 1ă    IF TopStack = -1 THEN EXIT DOă    tmp$ = cStack(TopStack)ă    x = ASC(LEFT$(tmp$, 1))ă    y = ASC(RIGHT$(tmp$, 1))ăă    z = (x + y) \ 2ă    IF x = y OR x = z OR y = z THEN GOTO RePalMakeă    q = ABS(x - y) \ 8ă    '*** redă    R = (WhatPal(x).R + WhatPal(y).R) \ 2 + (INT(RND * 3) - 1) * qă    IF R < 0 THEN R = 0ă    IF R > 63 THEN R = 63ă    WhatPal(z).R = Ră    '*** greenă    G = (WhatPal(x).G + WhatPal(y).G) \ 2 + (INT(RND * 3) - 1) * qă    IF G < 0 THEN G = 0ă    IF G > 63 THEN G = 63ă    WhatPal(z).G = Gă    '*** blueă    B = (WhatPal(x).B + WhatPal(y).B) \ 2 + (INT(RND * 3) - 1) * qă    IF B < 0 THEN B = 0ă    IF B > 63 THEN B = 63ă    WhatPal(z).B = Bă    '***ă    cStack(TopStack) = CHR$(x) + CHR$(z)ă    TopStack = TopStack + 1ă    cStack(TopStack) = CHR$(z) + CHR$(y)ă    TopStack = TopStack + 1ă  LOOPăEND SUBăăSUB RndCol (Clr AS PalType)ăR = RND * 64ăG = RND * 64ăB = RND * 64ăClr.R = R: Clr.G = G: Clr.B = BăEND SUBăăSUB RotatePal (WhatPal() AS PalType)ăFOR a = UBOUND(WhatPal) - 1 TO 0 STEP -1ă  SWAP WhatPal(a), WhatPal(a + 1)ăNEXT aăEND SUBăăSUB SavePal (WhatPal() AS PalType, FileName$)ăăff = FREEFILEăOPEN FileName$ FOR OUTPUT AS #ffăPRINT #ff, "PALDATAv1.0 by HD"ăPRINT #ff, UBOUND(WhatPal)ăăFOR a = 0 TO UBOUND(WhatPal)ă  PRINT #ff, WhatPal(a).Ră  PRINT #ff, WhatPal(a).Gă  PRINT #ff, WhatPal(a).BăNEXT aăăExitSave:ăCLOSE #ffăEND SUBăăSUB SetPal (Col, R, G, B)ăOUT &H3C8, ColăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăEND SUBăăSUB SwapPal (Pal1() AS PalType, Pal2() AS PalType)ăIF UBOUND(Pal1) <> UBOUND(Pal2) THEN EXIT SUBăăFOR a = 0 TO UBOUND(Pal1)ă  SWAP Pal1(a), Pal2(a)ăNEXT aăEND SUBăHauke Daempfling               ITALIC FONT                    hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        33   879      ITALFONT.BASDEFINT A-ZăDECLARE SUB ItalicFont (text$, xTxt%, yTxt%, CL%)ă'ă'   *** Italic Font ***ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă'This program displays text$ in a italic font at position xTxt,yTxt in theă'foreground color CL in any screen mode with a character box size ofă'8x16 except 0.ă'ăăSCREEN 12ăPRINT "Press any key to see the italic font..."ăDO: LOOP UNTIL INKEY$ <> ""ăItalicFont "Hello! This is an Italic Font Generator!", 10, 10, 15ăăSUB ItalicFont (text$, xTxt, yTxt, CL)ăIF xTxt < 1 OR xTxt + LEN(text$) > 80 OR yTxt < 1 OR yTxt > 25 THEN EXIT SUBăx1 = (xTxt - 1) * 8: y1 = (yTxt - 1) * 16ăx2 = x1 + (LEN(text$) * 8) + 1: y2 = y1 + 16ăfar = 8ăăCOLOR CL: LOCATE yTxt, xTxt: PRINT text$ăFOR y = y1 TO y2ă  FOR x = x1 TO x2ă    PSET (x - far + x1, y), POINT(x, y)ă    far = y \ 2ă  NEXT xăNEXT yăEND SUBăHauke Daempfling               BOLD FONT                      hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        45   1413     BOLDFONT.BASDEFINT A-ZăDECLARE SUB BoldFont (text$, xTxt%, yTxt%, Clr%, dir%)ă'ă'    *** Bold Font ***ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă' Give me credit if used!... thanx! :)ă'ă'This program displays text$ in a bold font at position xTxt,yTxt in theă'foreground color Clr in any screen mode with a character box size ofă'8x16 except 0. The argument dir means in which direction the text fontă'should be extended. It dir is positive the font is exteded to the right,ă'if it is negative the font will be extended to the left. Try it oută'and you'll see. (Gives really cool effects :) )ă'ăăăăSCREEN 12: CLSăPRINT "Press any key...": SLEEPăBoldFont "Hello and Welcome to this Program!", 10, 10, 15, -1ăBoldFont "This program displays a BOLD font!", 10, 12, 15, 1ăăSUB BoldFont (text$, xTxt, yTxt, Clr, dir)ăIF xTxt < 1 OR xTxt + LEN(text$) > 80 OR yTxt < 1 OR yTxt > 25 THEN EXIT SUBădir = SGN(dir): IF dir = 0 THEN EXIT SUBăx1 = (xTxt - 1) * 8: y1 = (yTxt - 1) * 16ăx2 = x1 + (LEN(text$) * 8) + 1: y2 = y1 + 16ăIF dir = 1 THEN SWAP x1, x2ăăLOCATE yTxt, xTxt: COLOR Clr: PRINT text$ăFOR x = x1 TO x2 STEP -diră  FOR y = y1 TO y2ă    cP1 = (POINT(x, y) = Clr)ă    cP2 = (POINT(x + dir, y) = Clr)ă    cP3 = (POINT(x + 2 * dir, y) = Clr)ă    IF cP1 AND (NOT cP2) AND (NOT cP3) THENă      PSET (x + dir, y), Clră    END IFă  NEXT yăNEXT xăEND SUBăHauke Daempfling               BIG FONT                       hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        43   1503     BIGFONT.BAS DEFINT A-ZăDECLARE SUB BigFont (text$, xTxt%, yTxt%, Xpos%, Ypos%, FGC%, BGC%, Fill%)ă'ă'  *** Big Font ***ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă' Give me credit if used!... thanx! :)ă'ă'This program generates a font double the size of the normal font. Worksă'in any screen mode with 8x16 character box size except 0. Arguments are:ă'text$ - The text to be displayedă'xTxt - The X position for the normal size text (has to be displayed ină'       order to generate the big font)ă'yTxt - The Y positon of the normal size textă'Xpos - The X coordinate for the big textă'Ypos - The Y coordinate for the big textă'FGC - foreground coloră'BGC - background coloră'Fill - Look at the example.ă'ăăSCREEN 12: CLS : PRINT "Press any key...": SLEEPăBigFont "This is a pretty big font!", 1, 25, 10, 20, 12, 15, 0ăBigFont "Yeah, it's cool, man!", 1, 25, 10, 160, 9, 15, -1ăăSUB BigFont (text$, xTxt, yTxt, Xpos, Ypos, FGC, BGC, FillOut)ăxTxto = xTxt: yTxto = yTxtăLOCATE yTxt, xTxt: COLOR 15: PRINT text$;ăxTxt = (xTxt - 1) * 8 - 2: yTxt = (yTxt - 1) * 16ăxTxt2 = xTxt + 8 * LEN(text$) + 3ăFOR x = xTxt TO xTxt2ă  FOR y = yTxt TO yTxt + 16ă    Xp = (x - xTxt) * 2 + Xpos: Yp = (y - yTxt) * 2 + Yposă    IF POINT(x, y) = 15 THEN CL = FGC ELSE CL = BGCă    PSET (Xp, Yp), CLă    IF FillOut THEN PSET (Xp + 1, Yp), CL: PSET (Xp, Yp + 1), CL: PSET (Xp + 1, Yp + 1), CLă  NEXT yăNEXT xăLOCATE yTxto, xTxto: PRINT SPACE$(LEN(text$));ăEND SUBăHauke Daempfling               VARIOUS STARFIELDS             hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        390  11677    STARFILD.BAS' ***** Starfields! *****ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă' Give me credit if used!... thanx! :)ă'ă' Check out the examples below to figure out how it worx.ă'ăDECLARE SUB SFExpl (Star() AS ANY)ăDECLARE SUB SFBlackHole (Star() AS ANY)ăDECLARE SUB SFInitBoom (Star() AS ANY, x%, y%)ăDECLARE SUB SFBoom (Star() AS ANY)ăDECLARE SUB SFBounce (Star() AS ANY)ăDECLARE SUB SFClear (Star() AS ANY)ăDECLARE SUB SFStd (Star() AS ANY)ăDECLARE SUB SFInit (Star() AS ANY, x1%, y1%, x2%, y2%)ăDECLARE SUB SFSuck (Star() AS ANY)ăDECLARE SUB SFTwinkle (Star() AS ANY)ă'$DYNAMICăDEFINT A-ZăTYPE StarTypeă  x AS INTEGER   'current screen posă  y AS INTEGERă  s AS INTEGER   'speed (x speed)ă  b AS INTEGER   'bounce (y speed)ă  c AS INTEGER   'coloră  x1 AS INTEGER  'field bordersă  y1 AS INTEGERă  x2 AS INTEGERă  y2 AS INTEGERă  xc AS INTEGER  'center of fieldă  yc AS INTEGERă  v AS INTEGER   'current explosion statusă  d AS INTEGER   'distance to explodeă  sx AS INTEGER  'spray distanceă  sy AS INTEGERă  xv AS INTEGER  'explosion centeră  yv AS INTEGERăEND TYPEăSCREEN 13ăRANDOMIZE TIMERăOUT &H3C8, 200ăFOR t = 1 TO 20ă  OUT &H3C9, t * 3 + 3ă  OUT &H3C9, t * 3 + 3ă  OUT &H3C9, t * 3 + 3ă  'OUT &H3C9, INT(RND * 64)ă  'OUT &H3C9, INT(RND * 64)ă  'OUT &H3C9, INT(RND * 64)ăNEXTăăDIM Stars(300) AS StarTypeăăSFInit Stars(), 0, 16, 320, 200ăăLOCATE 1, 1: PRINT "Standard"ăDOă  SFStd Stars()ăLOOP UNTIL INKEY$ <> ""ăăLOCATE 1, 1: PRINT "Suck    "ăDOă  SFSuck Stars()ăLOOP UNTIL INKEY$ <> ""ăăLOCATE 1, 1: PRINT "Boom"ăDOă  SFBoom Stars()ăLOOP UNTIL INKEY$ <> ""ăăLOCATE 1, 1: PRINT "Bounce"ăDOă  SFBounce Stars()ăLOOP UNTIL INKEY$ <> ""ăăLOCATE 1, 1: PRINT "Twinkle"ăDOă  SFTwinkle Stars()ăLOOP UNTIL INKEY$ <> ""ăăLOCATE 1, 1: PRINT "Black Hole"ăDOă  SFBlackHole Stars()ăLOOP UNTIL INKEY$ <> ""ăăSFClear Stars()ăăLOCATE 1, 1: PRINT "Multiple starfields"ăDIM Stars1(100) AS StarTypeăDIM Stars2(100) AS StarTypeăDIM Stars3(100) AS StarTypeăSFInit Stars1(), 0, 16, 320, 61ăSFInit Stars2(), 0, 61, 320, 122ăSFInit Stars3(), 0, 122, 320, 200ăăDOă  SFStd Stars1()ă  SFTwinkle Stars2()ă  SFBounce Stars3()ăLOOP UNTIL INKEY$ <> ""ăSFClear Stars1()ăSFClear Stars2()ăSFClear Stars3()ăSFInitBoom Stars1(), Stars1(1).xc, Stars1(1).ycăSFInitBoom Stars2(), Stars2(1).xc, Stars2(1).ycăSFInitBoom Stars3(), Stars3(1).xc, Stars3(1).ycăDOă  SFBoom Stars1()ă  SFBoom Stars2()ă  SFBoom Stars3()ăLOOP UNTIL INKEY$ <> ""ăDOă  SFStd Stars1()ă  SFTwinkle Stars2()ă  SFBounce Stars3()ăLOOP UNTIL INKEY$ <> ""ăSFClear Stars1()ăSFClear Stars2()ăSFClear Stars3()ăSFInit Stars1(), 0, 16, 320, 200ăSFInitBoom Stars1(), RND * 320, RND * 200ăSFInit Stars2(), 0, 16, 320, 200ăSFInitBoom Stars2(), RND * 320, RND * 200ăSFInit Stars3(), 0, 16, 320, 200ăSFInitBoom Stars3(), RND * 320, RND * 200ăSFcount = 1ăDOă  IF SFcount = 25 THENă    SFClear Stars1()ă    SFInitBoom Stars1(), RND * 304 + 16, RND * 200ă  END IFă  IF SFcount = 50 THENă    SFClear Stars2()ă    SFInitBoom Stars2(), RND * 304 + 16, RND * 200ă  END IFă  IF SFcount = 75 THENă    SFClear Stars3()ă    SFInitBoom Stars3(), RND * 304 + 16, RND * 200ă    SFcount = 1ă  END IFă  SFcount = SFcount + 1ă  SFExpl Stars1()ă  SFExpl Stars2()ă  SFExpl Stars3()ăLOOP UNTIL INKEY$ <> ""ăăREM $STATICăSUB SFBlackHole (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  SELECT CASE Star(a).vă    CASE 0ă      IF Star(a).x > Star(a).xc THEN Star(a).x = Star(a).x - Star(a).să      IF Star(a).x < Star(a).xc THEN Star(a).x = Star(a).x + Star(a).să      IF Star(a).y > Star(a).yc THEN Star(a).y = Star(a).y - Star(a).să      IF Star(a).y < Star(a).yc THEN Star(a).y = Star(a).y + Star(a).să      s1 = Star(a).x > Star(a).xc - 2ă      s2 = Star(a).x < Star(a).xc + 2ă      s3 = Star(a).y > Star(a).yc - 2ă      s4 = Star(a).y < Star(a).yc + 2ă      IF s1 AND s2 AND s3 AND s4 THEN Star(a).v = -1ă      'IF (s1 AND s2) OR (s3 AND s4) THEN Star(a).s = Star(a).s + 1ă    CASE -1ă      Star(a).x = RND * (Star(a).x2 - Star(a).x1) + Star(a).x1ă      Star(a).y = RND * (Star(a).y2 - Star(a).y1) + Star(a).y1ă      Star(a).c = RND * 20 + 1ă      Star(a).s = Star(a).c \ 8 + 1ă      Star(a).c = Star(a).c + 200ă      Star(a).b = RND * 4 - 2ă      Star(a).v = -3ă    CASE ELSEă      Star(a).v = 0ă  END SELECTă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFBoom (Star() AS StarType)ăMaxS = UBOUND(Star)ăIF x2 - x1 < y2 - y1 THEN m = x2 - x1 ELSE m = y2 - y1ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  SELECT CASE Star(a).vă   CASE 0ă    IF Star(a).x < Star(a).sx THEN Star(a).x = Star(a).x - Star(a).să    IF Star(a).x > Star(a).sx THEN Star(a).x = Star(a).x + Star(a).să    IF Star(a).y < Star(a).sy THEN Star(a).y = Star(a).y - Star(a).bă    IF Star(a).y > Star(a).sy THEN Star(a).y = Star(a).y + Star(a).bă    IF Star(a).x <= Star(a).x1 + Star(a).d THEN Star(a).v = -1ă    IF Star(a).y <= Star(a).y1 + Star(a).d THEN Star(a).v = -1ă    IF Star(a).x >= Star(a).x2 - Star(a).d THEN Star(a).v = -1ă    IF Star(a).y >= Star(a).y2 - Star(a).d THEN Star(a).v = -1ă  CASE -1ă    Star(a).sy = RND * (Star(a).x2 - Star(a).x1)ă    Star(a).s = (Star(a).c - 200) \ 8 + 1ă    Star(a).d = RND * (m \ 3)ă    Star(a).v = -2ă   CASE -2ă    IF Star(a).s \ 2 = 0 THEN s = 1 ELSE s = Star(a).s \ 2ă    Star(a).x = Star(a).x - să    Star(a).y = Star(a).y + Star(a).bă    IF Star(a).x < Star(a).x1 OR Star(a).y > Star(a).y2 OR Star(a).y < Star(a).y1 THENă      Star(a).x = RND * ((Star(a).x2 - Star(a).x1) \ 16) + Star(a).x2 - ((Star(a).x2 - Star(a).x1) \ 16)ă      Star(a).y = RND * (Star(a).y2 - Star(a).y1) + Star(a).y1ă      Star(a).c = RND * 20 + 1ă      Star(a).s = Star(a).c \ 8 + 1ă      Star(a).c = Star(a).c + 200ă      Star(a).b = RND * 4 - 2ă      Star(a).v = -3ă    END IFă   CASE -3ă    Star(a).x = Star(a).x - Star(a).să    IF Star(a).x < Star(a).x1 THENă      Star(a).x = RND * ((Star(a).x2 - Star(a).x1) \ 16) + Star(a).x2 - ((Star(a).x2 - Star(a).x1) \ 16)ă      Star(a).y = RND * (Star(a).y2 - Star(a).y1) + Star(a).y1ă      Star(a).c = RND * 20 + 1ă      Star(a).s = Star(a).c \ 8 + 1ă      Star(a).c = Star(a).c + 200ă      Star(a).b = RND * 4 - 2ă    END IFă  END SELECTă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFBounce (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  Star(a).x = Star(a).x - Star(a).să  IF Star(a).x < Star(a).x1 THENă    Star(a).x = RND * ((Star(a).x2 - Star(a).x1) \ 16) + Star(a).x2 - ((Star(a).x2 - Star(a).x1) \ 16)ă    Star(a).y = RND * (Star(a).y2 - Star(a).y1) + Star(a).y1ă    Star(a).c = RND * 20 + 1ă    Star(a).s = Star(a).c \ 8 + 1ă    Star(a).c = Star(a).c + 200ă    Star(a).b = RND * 4 - 2ă    Star(a).v = -3ă  END IFă  Star(a).y = Star(a).y - Star(a).bă  IF Star(a).y < Star(a).y1 OR Star(a).y > Star(a).y2 THEN Star(a).b = -Star(a).bă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFClear (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ăNEXT aăEND SUBăăSUB SFDraw (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFExpl (Star() AS StarType)ăMaxS = UBOUND(Star)ăIF x2 - x1 < y2 - y1 THEN m = x2 - x1 ELSE m = y2 - y1ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  SELECT CASE Star(a).vă   CASE 0ă    IF Star(a).x < Star(a).sx THEN Star(a).x = Star(a).x - Star(a).să    IF Star(a).x > Star(a).sx THEN Star(a).x = Star(a).x + Star(a).să    IF Star(a).y < Star(a).sy THEN Star(a).y = Star(a).y - Star(a).bă    IF Star(a).y > Star(a).sy THEN Star(a).y = Star(a).y + Star(a).bă    IF Star(a).x <= Star(a).x1 + Star(a).d THEN Star(a).v = -1ă    IF Star(a).y <= Star(a).y1 + Star(a).d THEN Star(a).v = -1ă    IF Star(a).x >= Star(a).x2 - Star(a).d THEN Star(a).v = -1ă    IF Star(a).y >= Star(a).y2 - Star(a).d THEN Star(a).v = -1ă  CASE -1ă    Star(a).sy = RND * (Star(a).x2 - Star(a).x1)ă    Star(a).s = (Star(a).c - 200) \ 8 + 1ă    Star(a).d = RND * (m \ 3)ă    Star(a).v = -2ă   CASE -2ă    IF Star(a).s \ 2 = 0 THEN s = 1 ELSE s = Star(a).s \ 2ă    Star(a).x = Star(a).x - să    Star(a).y = Star(a).y + Star(a).bă    IF Star(a).x < Star(a).x1 OR Star(a).y > Star(a).y2 OR Star(a).y < Star(a).y1 THENă      Star(a).v = -3ă    END IFă   CASE -3ă    Star(a).v = 0ă    Star(a).d = RND * (m \ 3)ă    Star(a).x = Star(a).xv + RND * 3 - 1ă    Star(a).y = Star(a).yv + RND * 3 - 1ă    Star(a).c = RND * 20 + 1ă    Star(a).s = Star(a).c \ 8 + 1ă    Star(a).c = Star(a).c + 200ă    Star(a).b = RND * 4 - 2ă  END SELECTă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFInit (Star() AS StarType, x1, y1, x2, y2)ăMaxS = UBOUND(Star)ăIF x2 - x1 < y2 - y1 THEN m = x2 - x1 ELSE m = y2 - y1ăFOR a = 1 TO MaxSă  Star(a).c = RND * 20 + 1ă  Star(a).s = Star(a).c \ 8 + 1ă  Star(a).c = Star(a).c + 200ă  Star(a).b = RND * 4 - 2ă  Star(a).x1 = x1ă  Star(a).y1 = y1ă  Star(a).x2 = x2ă  Star(a).y2 = y2ă  Star(a).xc = (Star(a).x2 - Star(a).x1) \ 2 + Star(a).x1ă  Star(a).yc = (Star(a).y2 - Star(a).y1) \ 2 + Star(a).y1ă  Star(a).x = RND * (x2 - x1) + x1ă  Star(a).y = RND * (y2 - y1) + y1ă  Star(a).v = -3ă  IF RND > .5 THEN Star(a).sx = RND * ((Star(a).x2 - Star(a).x1) \ 16) ELSE Star(a).sx = (Star(a).x2 - Star(a).x1) - RND * ((Star(a).x2 - Star(a).x1) \ 16)ă  Star(a).sy = RND * (Star(a).x2 - Star(a).x1)ă  Star(a).d = RND * (m \ 3)ăNEXT aăEND SUBăăSUB SFInitBoom (Star() AS StarType, x, y)ăMaxS = UBOUND(Star)ăIF x2 - x1 < y2 - y1 THEN m = x2 - x1 ELSE m = y2 - y1ăFOR a = 1 TO MaxSă  Star(a).v = 0ă  Star(a).d = RND * (m \ 3)ă  Star(a).x = x + RND * 3 - 1ă  Star(a).y = y + RND * 3 - 1ă  Star(a).xv = xă  Star(a).yv = yăNEXT aăEND SUBăăSUB SFStd (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  Star(a).x = Star(a).x - Star(a).să  IF Star(a).x < Star(a).x1 THENă    Star(a).x = RND * ((Star(a).x2 - Star(a).x1) \ 16) + Star(a).x2 - ((Star(a).x2 - Star(a).x1) \ 16)ă    Star(a).y = RND * (Star(a).y2 - Star(a).y1) + Star(a).y1ă    Star(a).c = RND * 20 + 1ă    Star(a).s = Star(a).c \ 8 + 1ă    Star(a).c = Star(a).c + 200ă    Star(a).b = RND * 4 - 2ă    Star(a).v = -3ă  END IFă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFSuck (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  IF Star(a).x < Star(a).xc THEN Star(a).x = Star(a).x + Star(a).să  IF Star(a).x > Star(a).xc THEN Star(a).x = Star(a).x - Star(a).să  IF Star(a).y < Star(a).yc THEN Star(a).y = Star(a).y + Star(a).să  IF Star(a).y > Star(a).yc THEN Star(a).y = Star(a).y - Star(a).să  Star(a).v = 0ă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăăSUB SFTwinkle (Star() AS StarType)ăMaxS = UBOUND(Star)ăFOR a = 1 TO MaxSă  PSET (Star(a).x, Star(a).y), 0ă  IF Star(a).s \ 2 = 0 THEN s = 1 ELSE s = Star(a).s \ 2ă  Star(a).y = Star(a).y + să  Star(a).c = Star(a).c + 1ă  IF Star(a).c >= 220 THEN Star(a).c = 201ă  IF Star(a).y > Star(a).y2 THENă    Star(a).x = RND * (Star(a).x2 - Star(a).x1) + Star(a).x1ă    Star(a).y = RND * ((Star(a).y2 - Star(a).y1) \ 16) + Star(a).y1ă    Star(a).c = RND * 20 + 1ă    Star(a).s = Star(a).c \ 8 + 1ă    Star(a).c = Star(a).c + 200ă    Star(a).b = RND * 4 - 2ă    Star(a).v = -3ă  END IFă  PSET (Star(a).x, Star(a).y), Star(a).căNEXT aăEND SUBăHauke Daempfling               BITMAP-TO-BASIC CONVERTER      hcd@berlin.snafu.de            11-11-97 (11:43)       QB, QBasic, PDS        151  4328     BMP2BAS.BAS DECLARE SUB LoadBmp (file$, xpos%, ypos%, mx%, my%)ăDEFINT A-Zăă'ă' by Hauke Daempflingă' hcd@berlin.snafu.deă'ă'(c)1996 Hauke Daempflingă'ă' Give me credit if used!... thanx! :)ă'ă'ăăSCREEN 0: CLSăPRINT "***** BMP2BAS - The Bitmap-to-Basic Converter ***** "ăPRINT "By Hauke Daempfling"ăPRINT "June 9, 1996"ăPRINTăPRINT "This program  creates text  BAS files  from Windows"ăPRINT "bitmaps. Bitmaps must be 16 color and RGB (not RLE)"ăPRINT "encoded. Useful for adding  small bitmaps into your"ăPRINT "programs, eliminating the  problem of lots of small"ăPRINT "data files. Maximum bitmap size is 640x480."ăPRINTăINPUT "Bitmap filename? ", INf$ăINf$ = UCASE$(INf$)ăIF INf$ = "" THEN PRINT "No filename!": SYSTEMăINPUT "Output filename? ", OUTf$ăOUTf$ = UCASE$(OUTf$)ăIF OUTf$ = "" THEN PRINT "No filename!": SYSTEMăOPEN OUTf$ FOR BINARY AS #1ăl& = LOF(1)ăCLOSE #1ăIF l& THENă  PRINT OUTf$; " already exists! Overwrite?";ă  DO: a$ = INKEY$: LOOP UNTIL a$ <> ""ă  IF LEFT$(LTRIM$(UCASE$(a$)), 1) <> "Y" THEN :  SYSTEMăEND IFăăSCREEN 12ăăLoadBmp INf$, -2, -2, mx, myămx = mx - 1ămy = my - 2ăOPEN OUTf$ FOR OUTPUT AS #1ăx$ = CHR$(34): y$ = CHR$(13) + CHR$(10)ăăo$ = ""ăo$ = o$ + "defint a-z" + y$ăo$ = o$ + "declare sub Draw" + INf$ + "(Xpos%,Ypos%)" + y$ + y$ăo$ = o$ + "screen 12 'Any 16-color or more mode will do" + y$ăo$ = o$ + "Draw" + INf$ + " 0,0" + y$ + y$ăo$ = o$ + "'Call this procedure to draw " + INf$ + " at Xpos,Ypos" + y$ăo$ = o$ + "sub Draw" + INf$ + "(Xpos,Ypos)" + y$ăo$ = o$ + "Rpos&=66:restore Pic" + INf$ + "data" + y$ăo$ = o$ + "read Xmax,Ymax" + y$ăo$ = o$ + "for x=0 to Xmax" + y$ăo$ = o$ + " for y=0 to Ymax" + y$ăo$ = o$ + "  if Rpos&>65 then read InBuff$:Rpos&=1" + y$ăo$ = o$ + "  i$=mid$(InBuff$,Rpos&,1)" + y$ăo$ = o$ + "  col=val(" + x$ + "&H" + x$ + "+i$)" + y$ăo$ = o$ + "  Rpos&=Rpos&+1:pset (x+Xpos,y+Ypos),col" + y$ăo$ = o$ + " next" + y$ăo$ = o$ + "next" + y$ăo$ = o$ + "end sub" + y$ + y$ăo$ = o$ + "Pic" + INf$ + "data:" + y$ăo$ = o$ + "'*** Pic data from picture file " + INf$ + y$ăo$ = o$ + "DATA" + STR$(mx) + "," + STR$(my)ăPRINT #1, o$ăăo$ = "DATA "ăFOR x = 0 TO mxă FOR y = 0 TO myă  r = POINT(x, y)ă  s$ = HEX$(r)ă  o$ = o$ + s$ă  IF LEN(o$) = 70 THEN PRINT #1, o$: o$ = "DATA "ă NEXT yăNEXT xăIF LEN(o$) > 5 THEN PRINT #1, o$ăo$ = "'* End pic data for " + INf$ăPRINT #1, o$ăCLOSE #1ăăSCREEN 2: SCREEN 0ăPRINT "Done converting. Goodbye!"ăSYSTEMăăSUB LoadBmp (file$, xpos, ypos, mx, my)ăIF LTRIM$(RTRIM$(file$)) = "" THEN SCREEN 0: SYSTEMăFFile = FREEFILEăOPEN file$ FOR BINARY AS #FFileăIF LOF(FFile) = 0 THENă PRINT "Error: "; file$; " not found!"ă CLOSEă KILL file$ă SCREEN 0ă SYSTEMăEND IFătable$ = INPUT$(54, #FFile)  'Get the file header (54 bytes)ăDIM table&(30)           'Create numerical array for headerăDEF SEG = VARSEG(table&(1))ăpointer% = VARPTR(table&(1))ăă'Poke the data from string "table$" into numerical array "table&"ăFOR x% = 0 TO 51ă POKE pointer% + x%, ASC(MID$(table$, x% + 3, 1))ăNEXTăDEF SEGăă'Check for valid file typeăIF MID$(table$, 1, 2) <> "BM" OR table&(4) <> 40 THENă   PRINT "Error while loading "; file$: SCREEN 0: SYSTEMăEND IFăIF table&(8) <> 0 THENă   PRINT "Error while loading "; file$: SCREEN 0: SYSTEMăEND IFăIF ASC(MID$(table$, 29, 1)) <> 4 THENă   PRINT "Error while loading "; file$: SCREEN 0: SYSTEMăEND IFăăthecolors$ = INPUT$(table&(3) - 54, #FFile) 'Read in pallette infoăă'Read in Bitmap data and set pixels accordinglyăy% = table&(6) 'Put number of vertical pixels into y%ămy = yăxdata$ = INPUT$((((table&(5) - 1) OR 7) + 1) \ 2, #1)ă    IF (table&(5) \ 2) < LEN(xdata$) THENă       linelength% = table&(5) \ 2ă    ELSEă       linelength% = LEN(xdata$)ă    END IFămx = linelength% * 2ăDOă  xdata$ = INPUT$((((table&(5) - 1) OR 7) + 1) \ 2, #1)ă    IF (table&(5) \ 2) < LEN(xdata$) THENă       linelength% = table&(5) \ 2ă    ELSEă       linelength% = LEN(xdata$)ă    END IFă    IF linelength% > mx THEN mx = linelength% * 2ă    FOR x% = 1 TO linelength%ă      pixel% = ASC(MID$(xdata$, x%, 1))ă      PSET (x% * 2 + 1 + xpos, y% + ypos), pixel% AND 15ă      PSET (x% * 2 + xpos, y% + ypos), pixel% \ 16ă     NEXTă    y% = y% - 1ăLOOP UNTIL EOF(FFile)ăCLOSE #FFileăERASE table&ăEND SUBăWoody Pope                     XMAS SNOWFALL                  comp.lang.basic.misc           12-19-96 (21:26)       QB, QBasic, PDS        311  6798     XSNOW.BAS   'Here's a QBASIC program I whipped up for your Xmas Cheer, enjoy!ăă' XSNOW by Woody Pope (c) 1996ă'May be freely copied for nonprofităăDECLARE SUB windmove (mydata AS ANY)ăDECLARE SUB putit (mydata AS ANY, x%)ăDECLARE SUB moveit (mydata AS ANY)ăDIM tree%(2900)ăDIM moon%(2800)ăDIM moonblnk%(1000)ăDIM santa1%(1600)ăDIM santa2%(1600)ăDIM SHARED flake%(18)ăDIM SHARED blank%(18, 10)ăDIM SHARED maxsnow%ăDIM x%, z%, wind%, s%, m%, v%, n%, st%ăDIM santaflg%, santaph%, repeatflg%ăDIM SHARED d%ăRANDOMIZE TIMERăăTYPE fdataă xpos AS INTEGERă hilimit AS INTEGERă lolimit AS INTEGERă ypos AS INTEGERă ftype AS SINGLEă offset AS INTEGERăEND TYPEăăDIM sflake(0 TO 9)  AS fdataămaxsnow% = 470ăăsflake(0).offset = 32ăsflake(0).xpos = 32ăsflake(0).hilimit = 57ăsflake(0).lolimit = 0ăsflake(0).ypos = 25ăsflake(0).ftype = 1ăăsflake(1).offset = 96ăsflake(1).xpos = 96ăsflake(1).hilimit = 121ăsflake(1).lolimit = 64ăsflake(1).ypos = 360ăsflake(1).ftype = 0ăăsflake(2).offset = 160ăsflake(2).xpos = 160ăsflake(2).hilimit = 185ăsflake(2).lolimit = 128ăsflake(2).ypos = 100ăsflake(2).ftype = 1ăăsflake(3).offset = 224ăsflake(3).xpos = 224ăsflake(3).hilimit = 249ăsflake(3).lolimit = 192ăsflake(3).ypos = 275ăsflake(3).ftype = 0ăăsflake(4).offset = 288ăsflake(4).xpos = 288ăsflake(4).hilimit = 313ăsflake(4).lolimit = 256ăsflake(4).ypos = 0ăsflake(4).ftype = 1ăăsflake(5).offset = 340ăsflake(5).xpos = 340ăsflake(5).hilimit = 377ăsflake(5).lolimit = 320ăsflake(5).ypos = 400ăsflake(5).ftype = 0ăăsflake(6).offset = 416ăsflake(6).xpos = 416ăsflake(6).hilimit = 441ăsflake(6).lolimit = 384ăsflake(6).ypos = 75ăsflake(6).ftype = 1ăăsflake(7).offset = 480ăsflake(7).xpos = 480ăsflake(7).hilimit = 505ăsflake(7).lolimit = 448ăsflake(7).ypos = 27ăsflake(7).ftype = 0ăăsflake(8).offset = 544ăsflake(8).xpos = 544ăsflake(8).hilimit = 569ăsflake(8).lolimit = 512ăsflake(8).ypos = 60ăsflake(8).ftype = 1ăăsflake(9).offset = 608ăsflake(9).xpos = 608ăsflake(9).hilimit = 631ăsflake(9).lolimit = 576ăsflake(9).ypos = 150ăsflake(9).ftype = 0ăăăSCREEN 12ăGOSUB clrblackăGOSUB flakeăGET (0, 0)-(6, 7), flake%ă'draw santaăGOSUB clrblackăGOSUB santaăăăăă'get moonăGOSUB clrblueăCIRCLE (52, 48), 48, 3, , , 1ăPAINT (50, 50), 3, 3ăGET (0, 0)-(100, 100), moon%ăGET (0, 30)-(100, 55), moonblnk%ăm% = 100ăn% = 220ăăăGOSUB clrblueăGOSUB treeăGET (0, 0)-(100, 110), tree%ăăGOSUB clrblueă'set treesă  PUT (100, 364), tree%, PSETă  PUT (288, 364), tree%, PSETă  PUT (433, 364), tree%, PSETăă  PUT (m%, n%), moon%, PSETă'set snowy groundăs% = 476ăLINE (0, s%)-(639, 479), 15, BFăcounter% = 2500ăz% = 1ăwind% = 0ăsantaflg% = 0ărepeatflg% = 0ăsantaph% = 0ăst% = 0ăCOLOR 4ăLOCATE 2, 22ăPRINT "MERRY CHRISTMAS AND A HAPPY NEW YEAR!"ăDRAW "bm200,20 c1 p1,4"ăCOLOR 15ăă'main loopămylp:ă'adjust snow heightăcounter% = counter% - 1ăIF (counter% = 2500 / 2 OR counter% = 0) THENă  wind% = 1: santaflg% = 1: repeatflg% = 1ă  v% = 100 + INT(RND * 100)ă  IF RND < .5 THEN d% = 1 ELSE d% = 0ăEND IFăIF counter% = 0 THENă IF maxsnow% > 400 THENă   maxsnow% = maxsnow% - 2ă   s% = s% - 2ă   LINE (0, s%)-(639, s% + 2), 15, BFă END IFă counter% = 2500ăEND IFăă'put flakesăFOR x% = 0 TO 9ă CALL putit(sflake(x%), x%)ăNEXT x%ăă'move santaăIF santaflg% = 1 AND repeatflg% = 1 THENă IF santaph% = 0 THENă  PUT (m%, n% + 30), moonblnk%, PSETă  PUT ((m% - 100) + st%, n% + 30), santa1%, ANDă  santaph% = 1ă ELSEă  PUT (m%, n% + 30), moonblnk%, PSETă  PUT ((m% - 100) + st%, n% + 30), santa2%, ANDă  santaph% = 0ă END IFă  st% = st% + 4ă  IF st% > 200 THEN st% = 0: santaph% = 0: santaflg% = 0: repeatflg% = 0ă  savecnt% = counter%ăEND IFărepeatflg% = 0ăIF savecnt% >= 10 THENă  IF (savecnt% - 10) = counter% THEN repeatflg% = 1ă  ELSEă  savecnt% = 2500 - 10ăEND IFăăIF wind% = 1 THENă FOR x% = 0 TO 9ă  PUT (sflake(x%).xpos, sflake(x%).ypos), blank%(0, x%), PSETă  CALL windmove(sflake(x%))ă NEXT x%ă  IF counter% = (1250 - v%) OR counter% = (2500 - v%) THENă    wind% = 0ă    IF m% < 300 THENă     m% = m% + 2ă     n% = n% - 1ă     PUT (m%, n%), moon%, PSETă    END IFă  END IFăELSEă'clear flakes & move to next posă FOR x% = 0 TO 9ă  IF sflake(x%).ypos >= maxsnow% THENă    sflake(x%).ypos = 0ă    sflake(x%).xpos = sflake(x%).offset + (RND * 5)ă    IF RND > .5 THENă      sflake(x%).ftype = 1ă    ELSEă       sflake(x%).ftype = 0ă    END IFă  ELSEă    PUT (sflake(x%).xpos, sflake(x%).ypos), blank%(0, x%), PSETă  END IFă  CALL moveit(sflake(x%))ă NEXT x%ăEND IFăăă'check keys for exităa$ = INKEY$ăIF a$ = "" THEN GOTO mylpăENDăăflake:ăDRAW "c15 bm3,4 nh3 nu3 ne3 nr3 nf3 nd3 ng3 nl3"ăRETURNăăclrblue:ăDRAW "bm0,0"ăDRAW "p1,5"ăRETURNăăclrblack:ăDRAW "bm0,0"ăDRAW "p0,5"ăRETURNăătree:ăDRAW "c2 bm50,0 m30,30 m40,30 m15,60 m30,60 m0,100 m100,100 m70,60 m85,60 m60,30 m70,30 m50,0 bm50,2 p2,2"ăDRAW "c6 bm45,101 m55,101 m55,110 m45,110 m45,101 bm48,104 p6,6"ăRETURNăăsanta:ăLINE (0, 0)-(200, 25), 15, BFăDRAW "c1 bm5,12 m10,14 m20,14 m22,12 m20,9 m28,12 m27,14 m32,17 m34,17 m36,14 m41,14 m41,16 m38,16 m36,24 m0,24 m0,22 m5,22 m5,12"ăDRAW "bm10,17 p1,1"ădeer$ = "m+2,-2 m-2,-2 m+2,-2 m+2,+2 r20 m-4,-4 r2 nh3 ne3 r4 nh3 ne3 r2 m-4,+4 d4 m-4,+4 l16 m-4,-4"ăDRAW "bm60,16" + deer$ + "bm+24,-6 p1,1 bm -20,+6 p1,1"ăDRAW "bm105,16" + deer$ + "bm+24,-6 p1,1 bm -20,+6 p1,1"ăDRAW "bm150,16" + deer$ + "bm+24,-6 p1,1 bm -20,+6 p1,1"ă'draw legsăDRAW "bm64,20 m-4,+4 bm80,20 m+4,+4"ăDRAW "bm109,20 m-4,+4 bm125,20 m+4,+4"ăDRAW "bm154,20 m-4,+4 bm170,20 m+4,+4"ă'draw reinsăDRAW "bm41,14 m60,16"ăDRAW "bm84,12 m105,16"ăDRAW "bm129,12 m150,16"ăGET (0, 0)-(200, 25), santa1%ăLINE (60, 20)-(174, 24), 15, BFă'draw legsăDRAW "c1 bm64,20 m+4,+4 bm80,20 m-4,+4"ăDRAW "bm109,20 m+4,+4 bm125,20 m-4,+4"ăDRAW "bm154,20 m+4,+4 bm170,20 m-4,+4"ăGET (0, 0)-(200, 25), santa2%ăRETURNăăSUB moveit (mydata AS fdata)ă ă IF mydata.ftype = 1 THENă   mydata.ypos = mydata.ypos + 1ăă ELSEă   mydata.ypos = mydata.ypos + 2ăă END IFă IF RND > .5 THENă  mydata.xpos = mydata.xpos + (RND * 3)ă  IF mydata.xpos > mydata.hilimit THEN mydata.xpos = mydata.hilimită ELSEă  mydata.xpos = mydata.xpos - (RND * 3)ă  IF mydata.xpos < mydata.lolimit THEN mydata.xpos = mydata.lolimită END IFăEND SUBăăSUB putit (mydata AS fdata, x%)ă  GET (mydata.xpos, mydata.ypos)-(mydata.xpos + 6, mydata.ypos + 7), blank%(0, x%)ă  PUT (mydata.xpos, mydata.ypos), flake%, ORăEND SUBăă'ăSUB windmove (mydata AS fdata)ă IF d% = 1 THENă   mydata.xpos = mydata.xpos + 5ă   IF mydata.xpos >= 631 THEN mydata.xpos = 0ă ELSEă   mydata.xpos = mydata.xpos - 5ă   IF mydata.xpos <= 0 THEN mydata.xpos = 630ă END IFăEND SUBăWilliam T. Jones               ROTATING 3D POLYGON            wtjones@tcac.net               11-17-97 (20:11)       QB, QBasic, PDS        499  17063    3DCUBE.BAS  '                 ********** Polygon 3D dev 3.1 **********ă'ă'                             November 1997ă'                                   byă'                    William Jones  wtjones@tcac.netă'ă'---------- Overview --------                    ă'  Basically a cube you control with the keyboard. Press "f" for filledă'mode.ă'  There are countless numbers of this tired type of demo, but I am in theă'learning process and it is my duty to make one. This may not be original,ă'but I bet this is THE MOST THOROUGH 3D cube progam ever madeă'for QBASIC. Scroll down a couple of pages to see the controls.ăă'---------- The story thus far... ------------ă'  This demonstration is loosely based on the "VGA Trainer Program 8"ă'by Denthor of Asphixia. I first ported the C version of his trainer toă'QBASIC, then wrote this.ă'  In order for a program to be a tourial, it must be very readable and easyă'to understand. Because of that, his version is not optimized for speed.ă'  The basic elemet was a line, which means the starting 3D point and theă'ending 3D point. There were of course 12 lines to make a Wireframe cube.ă'That's 24 points to manipulated each frame of animation, 3 times as many asă'a cube has. While messing around, I connected lines in through the center.ă'The more lines to be rendered, the slower it got.ă'  I then re-wrote it so the basic element is a point. In the case of a cubeă'there are 8 points. That is all that needs to be calculated. Each point isă'perspective projected into 2D screen coordinates and stored in an integeră'array. Then the points can be used for polygons.ă'  Here's how the points are indexed:ă'ă'     1- - - - -  2ă'    /|          /|ă' 5/ -|- - - -6/  |ă' |   |       |   |ă' |   |       |   |ă' |   3- - - -| - 4ă' |  /        |  /ă' 7/ - - - - -8/ă'ă'1 through 4 in the back, 5 through 8 in the front.ă'ă'  The polygon() array contains the indices of the four points that make upă'each polygon (for use in the cubePoint() array). There is of course one foră'each side of the cube. Having the polygon structure address already madeă'point's instead of having it's own is probably against good practice, bută'I don't see the need to keep rendering points that in the same exact spot.ă'You will notice that the only data types are for points. That is becauseă'QBASIC doesn't allow structures to have arrays. If I move this to C it willă'look completely different (and easier to read).ă'If someone has a better way that I should be doing things and you have theă'time, please email me at wtjones@tcac.net and explain.ă'  Each polygon isă'drawn by connecting its points. The first polygon (array element 1,X) isă'the top of the cube. Its points are 1, 2, 6 and 5. They are in that orderă'(clockwise) so that when the normal is found, the outer direction is drawnă'when visible. (It doesn't make much sense to me either)ă'ă'---------- Controls ----------ă'  -num lock must be onă'  -on numerical keypadă'     -"8" and "2" rotate on the x axisă'     -"4" and "6" rotate on the y axisă'     -"7" and "9" rotate on the z axisă'     -"5" stops all motionă'     -"0" resets valuesă'     -"+" and "-" move along the z perspectiveă'  -arrow keys change x and y valuesă'  -"p" toggles printing variables to screenă'  -"h" toggles hidden surface removală'  -"f" toggles filled polygon modeă'ă'---------- Features ----------ă'  -Decent speed for QBASIC.ă'  -Many aspects can be controlled with keyboard.ă'  -Set 'VariableOutput' to 'true' (or press "p") to print the angle andă'     velocity of each axis.ă'ă'---------- Errata ----------ă'  -I want to implement a freely movable 'camera'. That way I can set up a 3dă'   world and use the keyboard to wander around it. It seems the way to do ită'   would be to tranlate all objects using a constant factor when a certană'   key is pressed, sort of like it is now but instead not having theă'   perspective fixed.ă'  -Also planned is matrix mathmatics. Almost all references to 3Dă'   programming have matrix content so it seems standard. It's best I learnă'   too.ă'  -If you give points decimal values, 'CubePoints()' must be declared ofă'   type 'Point3d' instead of 'Point3dInt'. (another picky optimization)ă'ă'---------- Updates ----------ă'  Febuary 1997ă'     -Finished dev 2ă'  April 19, 1997ă'     -Cleaned code/typos and such. Now called dev 2.1.ă'  November 14, 1997ă'     -The line-connecting system is gone. Four points can be declared asă'        a polygon to be drawn (conneced with lines).ă'     -Hidden surface removal is added. Only visible polygon surfaces will beă'        drawn/outlined. Press "h" to turn it off.ă'     -When moving the cube with the arrow keys and plus and minus, the cubeă'        doesn't rotate around the same axis like before. The points areă'        first rotated and then added to a base to fix this. xLoc, yLoc, zLocă'        is the base. If anybody knows why it moves so jumpy please tell me.ă'     -Program is now 3.0ă'  November 17, 1997ă'     -Added filled polygon mode. Press "f" to use. I might put in a fillă'        routine, but for now the PAINT statement goes outside the lines.ă'        I don't know how to fix it, but it's annoying.ă'     -The frame rate is now printed at the bottom of the screen, but theă'        numbers don't seem right. When I turn on fill mode it feelsă'        sluggish, but I still get an FPS of 90 or more.ă'     -Program is now 3.1 (who cares?)ă'ă'|---------- CONSTANTS ------------------------|ăCONST pi = 3.141592     'single precision for speedăCONST true = -1, false = 0ăCONST NumPoints = 8     'the original 8 make a cube, you can easily add moreăCONST NumPolygons = 6   '6 faces of a cubeăCONST XOff = 160        'VGA sceen offsets for projectionăCONST YOff = 100ăCONST ZOff = -60ăăCONST HScale = 256      'change these to make it look really weirdăCONST VScale = 256ăCONST OutlineColor = 15ă'|---------- DATA TYPES -----------------------|ăTYPE Point2DType         'VGA screen coordinatesă   x AS INTEGERă   y AS INTEGERăEND TYPEăTYPE Point3dType         'floating point values for translation equationsă   x AS SINGLEă   y AS SINGLEă   z AS SINGLEăEND TYPEăTYPE Point3dIntType  'used for 3d offsets from DATA if they are whole numbersă   x AS INTEGERă   y AS INTEGERă   z AS INTEGERăEND TYPEăă'|---------- VARIABLE/ARRAY  DECLARATIONS -----|ăDIM n AS INTEGER, m AS INTEGER      'looping indicesăăDIM polygons(1 TO NumPolygons, 1 TO 4) AS Point2DType    'point referencesăDIM visiblePolys(1 TO NumPolygons) AS INTEGER   'true or falseăDIM cubePoint(1 TO NumPoints) AS Point3dIntType  'loaded from DATAăDIM cubeVidPoint(1 TO NumPoints) AS Point2DType  'projected  2D pointsăDIM ccos(0 TO 359) AS SINGLE, csin(0 TO 359) AS SINGLEăDIM trans(1 TO NumPoints) AS Point3dType   'final translated pointsăDIM boxErase(1 TO 2) AS Point2DType  'holds the immediate box around the cubeăDIM xDeg AS INTEGER, yDeg AS INTEGER, zDeg AS INTEGER    'axis degreesăDIM xRate AS INTEGER, yRate AS INTEGER, zRate AS INTEGER 'axis velocitiesăDIM xLoc AS INTEGER, yLoc AS INTEGER, zLoc AS INTEGERăă'-tempsăDIM midPoint AS Point2DType   'for finding mid-points of polygonsăDIM temp AS Point3dType  'temporary buffer for translationăDIM timeTemp AS SINGLEăDIM nextSec AS SINGLEăă'-boolean flags-ăDIM done AS INTEGER                 'boolean for escape keyăDIM variableOutput AS INTEGER       'boolean to print angle/velocityăDIM wireFrame AS INTEGER            'false for just dotsăDIM hsr AS INTEGER               'hidden surface removalăDIM filled AS INTEGERăă'|---------- SETUP ----------------------------|ăDEFINT A-Z  'all variables integers by defaultă  'load nessesary values of sine and cosine into lookup tablesăPRINT "Creating tables..."ăFOR n = 0 TO 359ă  ccos(n) = COS(n * pi / 180)ă  csin(n) = SIN(n * pi / 180)ăNEXT nă   'read in point offsets from dataăRESTORE CubeDataăFOR n = 1 TO NumPointsă   READ cubePoint(n).xă   READ cubePoint(n).yă   READ cubePoint(n).zăNEXTă   'read in the indices of the 4 points each polygon consists ofăRESTORE PolygonDataăFOR n = 1 TO NumPolygonsă   FOR m = 1 TO 4ă      READ polygon(n, m)ă   NEXTăNEXTăăxDeg = 0: yDeg = 0: zDeg = 0     'degrees to refrence sin/cos tables,ă                                 'each will only be in range of 0-359ăăxRate = 0: yRate = 0: zRate = 0  'degree incementsăvariableOutput = falseăwireFrame = falseăhsr = true  'hidden surface removal onăfilled = falseăă'|---------------------------------------------|ă'|---------- MAIN PROGRAM ---------------------|ă'|---------------------------------------------|ăăSCREEN 7, , 1, 0        'page 0 is visual, page 1 activeătimeTemp = INT(TIMER): nextSec = timeTemp + 1ăDOă   GOSUB RotatePointsă   GOSUB ProjectPoints  'produce 2D coordinates ready for drawingă   GOSUB FindVisibleSidesă  ă   '-do all drawing-ă   IF variableOutput = true THEN GOSUB PrintOut 'angle/velocity                                                                                  '''''ă  ă   '-draw the visible sides of the polygon-ă   FOR n = 1 TO 6ă    IF visiblePolys(n) = true THEN GOSUB OutlinePolygonă   NEXTă   IF filled = true THEN GOSUB FillPolygonsă  ă   PCOPY 1, 0           'copy active page to visuală   GOSUB UpdateFrameRateă  ă   '-do all erasing-ă   GOSUB EraseCube    'fill cube's bounding box with blackă  ă   IF variableOutput = true THEN GOSUB ErasePrintă  ă   GOSUB GetKeyă   GOSUB Motion         'inc/dec angles based on ratesăLOOP WHILE done = falseăENDăă'|---------------------------------------------|ă'|---------- END MAIN PROGRAM -----------------|ă'|---------------------------------------------|ăăăRotatePoints:ă   FOR n = 1 TO NumPointsă      trans(n).x = cubePoint(n).x 'restore original cube dataă      trans(n).y = cubePoint(n).yă      trans(n).z = cubePoint(n).ză      GOSUB DoXAxis                 'translation equationsă      GOSUB DoYAxisă      GOSUB DoZAxisă      trans(n).x = xLoc + temp.xă      trans(n).y = yLoc + temp.yă      trans(n).z = zLoc + temp.ză  NEXTăRETURNăăDoXAxis:ă   '-rotate on x axis-ă   'x is unalteredă   temp.y = ccos(xDeg) * trans(n).y - csin(xDeg) * trans(n).ză   temp.z = csin(xDeg) * trans(n).y + ccos(xDeg) * trans(n).ză  ă   '-put new values into translated array-ă   'x is unalteredă   trans(n).y = temp.yă   trans(n).z = temp.zăRETURNăăDoYAxis:ă   '-rotate on y axis-ă   temp.x = ccos(yDeg) * trans(n).x + csin(yDeg) * trans(n).ză   'y is unalteredă   temp.z = (-csin(yDeg)) * trans(n).x + ccos(yDeg) * trans(n).ză  ă   '-put new values into translated array-ă   trans(n).x = temp.xă   'y is unalteredă   trans(n).z = temp.zăRETURNăăDoZAxis:ă   '-rotate on z axis-ă   temp.x = ccos(zDeg) * trans(n).x - csin(zDeg) * trans(n).yă   temp.y = csin(zDeg) * trans(n).x + ccos(zDeg) * trans(n).yă   'z is unalteredă  ă   '-put new values into translated array-ă   trans(n).x = temp.xă   trans(n).y = temp.yă   'z is unalteredăRETURNăăFindVisibleSides:ă   IF hsr = true THENă      FOR p = 1 TO 6ă         zNorm1 = (cubeVidPoint(polygon(p, 2)).x - cubeVidPoint(polygon(p, 1)).x) * (cubeVidPoint(polygon(p, 1)).y - cubeVidPoint(polygon(p, 3)).y)ă         zNorm2 = (cubeVidPoint(polygon(p, 2)).y - cubeVidPoint(polygon(p, 1)).y) * (cubeVidPoint(polygon(p, 1)).x - cubeVidPoint(polygon(p, 3)).x)ă         zNorm = zNorm1 - zNorm2ă         IF zNorm < 0 THEN visiblePolys(p) = true ELSE visiblePolys(p) = falseă      NEXTă   ELSEă      FOR p = 1 TO 6ă         visiblePolys(p) = trueă      NEXTă   END IFăRETURNăăFillPolygons:ă   FOR p = 1 TO 6ă      IF visiblePolys(p) = true THENă            FOR n = 1 TO 4ă               total = total + cubeVidPoint(polygon(p, n)).xă            NEXTă            midPoint.x = total / 4ă            total = 0ă           ă            FOR n = 1 TO 4ă               total = total + cubeVidPoint(polygon(p, n)).yă            NEXTă            midPoint.y = total / 4ă            total = 0ă            PAINT (midPoint.x, midPoint.y), 4, 15ă      END IFă  NEXTăRETURNăăMotion:     'make sure degrees are in range of look-up tablesă   xDeg = xDeg + xRateă   IF xDeg < 0 THEN xDeg = 359 + xDeg           'add the negative value toă   IF xDeg > 359 THEN xDeg = 0 + (xDeg - 359)   'be more accurateă     ă   yDeg = yDeg + yRateă   IF yDeg < 0 THEN yDeg = 359 + yDegă   IF yDeg > 359 THEN yDeg = 0 + (yDeg - 359)ă                ă   zDeg = zDeg + zRateă   IF zDeg < 0 THEN zDeg = 359 + zDegă   IF zDeg > 359 THEN zDeg = 0 + (zDeg - 359)ăRETURNăăProjectPoints:ă   'project 3d coordinates into 2d integer screen coordinates suitible foră   'VGA and store them in an arrayă   FOR n = 1 TO NumPointsă      project = trans(n).z + ZOffă      cubeVidPoint(n).x = ((HScale * trans(n).x) / project) + XOffă      cubeVidPoint(n).y = ((VScale * trans(n).y) / project) + YOffă   NEXTăRETURNăăEraseCube:ă   FOR n = 1 TO 2ă      boxErase(n).x = 160: boxErase(n).y = 100  'start from center of screenă   NEXTă   FOR n = 1 TO NumPointsă      IF cubeVidPoint(n).x < boxErase(1).x THEN boxErase(1).x = cubeVidPoint(n).xă      IF cubeVidPoint(n).x > boxErase(2).x THEN boxErase(2).x = cubeVidPoint(n).xă      IF cubeVidPoint(n).y < boxErase(1).y THEN boxErase(1).y = cubeVidPoint(n).yă      IF cubeVidPoint(n).y > boxErase(2).y THEN boxErase(2).y = cubeVidPoint(n).yă   NEXTă   'fill in bouding box with blackă   LINE (boxErase(1).x, boxErase(1).y)-(boxErase(2).x, boxErase(2).y), 0, BFăRETURNăăOutlinePolygon:   'where n is the polygon to outlineă   FOR I = 1 TO 3ă      LINE (cubeVidPoint(polygon(n, I)).x, cubeVidPoint(polygon(n, I)).y)-(cubeVidPoint(polygon(n, I + 1)).x, cubeVidPoint(polygon(n, I + 1)).y), OutlineColoră   NEXTă   LINE (cubeVidPoint(polygon(n, 4)).x, cubeVidPoint(polygon(n, 4)).y)-(cubeVidPoint(polygon(n, 1)).x, cubeVidPoint(polygon(n, 1)).y), OutlineColorăRETURNăăUpdateFrameRate:  'I don't know if these numbers are rightă   frameRate = frameRate + 1ă   timeTemp = INT(TIMER)ă   IF timeTemp > nextSec THEN    'one full second has passedă      LOCATE 23, 1:  PRINT frameRate: frameRate = 0ă      timeTemp = INT(TIMER)ă      nextSec = timeTemp + 1ă   END IFăRETURNăăGetKey:ă   k$ = INKEY$ă   SELECT CASE k$ă      CASE "8"ă         xRate = xRate - 1ă      CASE "2"ă         xRate = xRate + 1ă      CASE "4"ă         yRate = yRate + 1ă      CASE "6"ă         yRate = yRate - 1ă      CASE "7"ă         zRate = zRate - 1ă      CASE "9"ă         zRate = zRate + 1ă      CASE "5"ă         xRate = 0: yRate = 0: zRate = 0ă      CASE "+"ă         FOR n = 1 TO NumPointsă            zLoc = zLoc + 1ă         NEXTă      CASE "-"ă         FOR n = 1 TO NumPointsă            zLoc = zLoc - 1ă         NEXTă      CASE CHR$(0) + "K"     'leftă         FOR n = 1 TO NumPointsă            xLoc = xLoc + 1ă         NEXTă      CASE CHR$(0) + "M"    'rightă         FOR n = 1 TO NumPointsă            xLoc = xLoc - 1ă         NEXTă      CASE CHR$(0) + "H"     'upă         FOR n = 1 TO NumPointsă            yLoc = yLoc + 1ă         NEXTă      CASE CHR$(0) + "P"     'downă         FOR n = 1 TO NumPointsă            yLoc = yLoc - 1ă         NEXTă      CASE "0"ă         xRate = 0: yRate = 0: zRate = 0ă         xDeg = 0: yDeg = 0: zDeg = 0ă         xLoc = 0: yLoc = 0: zLoc = 0ă         RESTORE CubeDataă         FOR n = 1 TO NumPointsă            READ cubePoint(n).xă            READ cubePoint(n).yă            READ cubePoint(n).ză         NEXTă      CASE "p"ă         IF variableOutput = true THENă            variableOutput = falseă         ELSEă         IF variableOutput = false THEN variableOutput = trueă         END IFă      CASE "h"ă         IF hsr = true THENă            hsr = falseă         ELSEă            IF hsr = false THEN hsr = trueă         END IFă      CASE "f"ă         IF filled = true THENă            filled = falseă         ELSEă         IF filled = false THEN filled = trueă         END IFă      CASE CHR$(27)ă         done = trueă   END SELECTăRETURNăăPrintOut:ă   LOCATE 2, 2: PRINT "X:"ă   LOCATE 2, 4: PRINT xDegă   LOCATE 2, 8: PRINT " at rate of "ă   LOCATE 2, 19: PRINT xRateă  ă   LOCATE 3, 2: PRINT "Y:"ă   LOCATE 3, 4: PRINT yDegă   LOCATE 3, 8: PRINT " at rate of "ă   LOCATE 3, 19: PRINT yRateă  ă   LOCATE 4, 2: PRINT "Z:"ă   LOCATE 4, 4: PRINT zDegă   LOCATE 4, 8: PRINT " at rate of "ă   LOCATE 4, 19: PRINT zRateăRETURNăăErasePrint:ă   LOCATE 2, 2: PRINT "             "ă   LOCATE 3, 2: PRINT "             "ă   LOCATE 4, 2: PRINT "             "ăRETURNăăCubeData:ăDATA 10,10,-10ăDATA -10,10,-10ăDATA 10,-10,-10ăDATA -10,-10,-10ăăDATA 10,10,10ăDATA -10,10,10ăDATA 10,-10,10ăDATA -10,-10,10ăăPolygonData:ă'topăDATA 1,2,6,5ă'frontăDATA 5,6,8,7ă'bottomăDATA 7,8,4,3ă'backăDATA 2,1,3,4ă'leftăDATA 1,5,7,3ă'rightăDATA 6,2,4,8ăXtance Coders Alliance         CREATES A WAVEY EFFECT ON IMAGEharryst@castel.nl              11-15-97 (00:24)       QB, QBasic, PDS        326  8151     INTRO.BAS   '         .$$$$$$$$.  .$$$$$$$$.     .$$$$$$$$.    .$$$$$$$$$.   $. .$ă'         $$$$$ $$$$ss$$$$ $$$$$    s$$$$ $$$$$    $$$$$ $$$$$   $s s$ă'         $$$$$ $$$$$$$$$$ $$$$$    $$$$$ $$$$$    $$$$$ $$$$$   $$.$$ă'          $$$$ $$$$$$$$$$ $$$$     $$$$$ $$$$     $$$$$ $$$$$   $$s$$ă'           s$$ $$$$$$$$$$ $$s      $$$$$ $$s      $$$$$ $$$$$   $$$$$ă'             s $$$$$$$$$$ s        $$$$$ s        $$$$$ $$$$$   $$$$$ă'               $$$$$$$$$$          $$$$$          $$$$$$$$$$$   $$$$$ă'               $$$$$$$$$$          $$$$$          $$$$$ $$$$$   $$$$$ă'               $$$$$$$$$$          $$$$$          $$$$$ $$$$$   $$$$$ă'               $$$$$$$$$$          $$$$$          $$$$$ $$$$$   $$$$$ă'            s  $$$$$$$$$$  s       $$$$$  s       $$$$$ $$$$$   $$$$$ă'          s$$  $$$$$$$$$$  $$s     $$$$$  $$s     $$$$$ $$$$$   $$$$$ă'         $$$$  $$$$$$$$$$  $$$$    $$$$$  $$$$    $$$$$ $$$$$    S$Să'        $$$$$  $$$$$$$$$$  $$$$$   $$$$$  $$$$$   $$$$$ $$$$$     .ă'        $$$$$$$$$$$$$$$$$$$$$$$$   $$$$$$$$$$$$   $$$$$ $$$$$    s$să'        .$$$$$$$$$$$$$$$$$$$$$$.   .$$$$$$$$$$.   .$$$. .$$$.   $$$$$ă'ă'                Xtance               Coders         Allianceă'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ă'	This program is made by Mr. Snow from Xtance Coders Alliance andă'					      DeeJee'z Team 1997ă'ă'		for All Basic Programmers in the Big Fat Worldă'   ă'  E-Mail to harryst@castel.nlă'  or     to mrsnow@freemail.nlă'ă'ă' Credit me please.. if you use any routines from my sourceăăDECLARE SUB Center (Text$)ăDECLARE SUB Wave ()ăDECLARE SUB DeInit ()ăDECLARE SUB Init ()ăDECLARE SUB txtpalget (col%, r%, g%, B%)ăDECLARE SUB txtpalset (col%, r%, g%, B%)ăDECLARE SUB SinusWave ()ăDECLARE SUB PcxLoad ()ăDEFINT A-Ză'$DYNAMICăRANDOMIZE -TIMERăDIM SHARED B1%(2890), B2%(2890)   'punch picturesăDIM SHARED COSINUS(160) AS INTEGERăDIM SHARED RAND(255) AS INTEGERăDIM SHARED oldpal(16, 3)ăDIM SHARED WaveSide1, WaveSide2, WaveSide3ăDIM SHARED Wave1, Wave2, Wave3ăCONST PI = 3.14159265358#ăăăPcxLoadăSinusWaveăăăCALL InităCenter ("Hello,  I'm Mr. Snow and has programmed all this stuph... okay i ripped some")ăCenter ("        routines, pictures and music files.. but that s all..")ăCenter ("")ăCenter ("        Please enjoy you looking at the sources.. this are the sources from")ăCenter ("        1996 and 1997 (not all are sources..) the moast are things that i")ăCenter ("        like the moast..")ăCenter ("")ăCenter ("        B.T.W There is also another pack of me... but you can only get it")ăCenter ("        for F 5.- or $5 that's not much but atleast a bit for my study")ăCenter ("")ăCenter ("        My e-mail is: harryst@castel.nl or (This is the best...)")ăCenter ("                      mrsnow@freemail.nl")ăCenter ("                      xca@freemail.nl")ăCenter ("                      djt@freemail.nl")ăCenter ("                      hstok@freemail.nl")ăCenter ("")ăCenter ("        my page is for now http://www.page4life.nl/mrsnow/")ăCenter ("        but it could change to http://www.page4life.nl/xtance")ăCenter ("        or to http://www.page4life.nl/xtance1 (or xtance2)")ăCenter ("")ăCenter ("        Thanx.. Please send this allover the world")ăCenter ("")ăCenter ("MAIL ME ALOTTTTTTTTT")ăCenter ("")ăCenter ("[Any key to return to your normal dos prompt or windows prompt/system...]")ăăDOă	CALL WaveăLOOP UNTIL INKEY$ <> ""ăăăCALL DeInităăPRINT "                    ----> Xtance Records   <----"ăPRINTăPRINT "                        Rensumaheerd 102"ăPRINT "                        9736 AD Groningen"ăPRINT "                        The Netherlands"ăPRINT "                        +31(0)50-5417749"ăPRINT "                Ask for Eric (Only English or Dutch)"ăPRINTăPRINT "enjoy.... "ăăREM $STATICăSUB Center (Text$)ăi = CSRLIN + 1ăLOCATE i, 40 - (LEN(Text$) / 2): PRINT Text$ăEND SUBăăREM $DYNAMICăSUB DeInit STATICăDEF SEGăCLSăăFOR i = 1 TO 15ă txtpalset i, oldpal(i, 1), oldpal(i, 2), oldpal(i, 3)ăNEXT iăăWIDTH 80, 25ăăEND SUBăăSUB Init STATICăDEF SEG = &HB800ăr = 3                   '-\ăg = 5                   '  |- For the RGB Colors (3,5,5)=GrayăB = 5                   '-/ăăWaveSide1 = 1           '-\ăWaveSide2 = 3           '  |- Think it's for the speedăWaveSide3 = 1           '-/ăăR1 = 1                  '-\ăR2 = 10                 '  |- Think it's the start positionăR3 = 20                 '-/ăăWIDTH 80, 50            ' Set the screen mode to 80 x 50ăLOCATE , , 0            ' Set the cursor offăă'--------- Counting / calculate part ------ăFOR i = 1 TO 15ă txtpalget i, oldpal(i, 1), oldpal(i, 2), oldpal(i, 3)ăNEXT iăăFOR c = 0 TO 160ă    COSINUS(c) = COS(c * 2 * PI / 80) * 16 + 16ăNEXTăăFOR c = 0 TO 255ă    RAND(c) = INT(RND * 4) + 1ăNEXTăăFOR i = 0 TO 6ă txtpalset i, i * r, i * g, i * BăNEXT iăăFOR i = 7 TO 15ă txtpalset i, (15 - i) * r, (15 - i) * g, (15 - i) * BăNEXT iăăEND SUBăăSUB PcxLoad STATICăDIM Buf(32002) AS INTEGER: Buf(0) = 2560: Buf(1) = 200ăDIM i AS LONGăăBSEG& = VARSEG(Buf(2)): BOFS& = VARPTR(Buf(2))ăăă'       Change Back.pcx with one of your pcx files..ăOPEN "BACK.PCX" FOR BINARY AS #1ăă	Fin& = LOF(1) - 767ă	SEEK #1, Fin&ă	pal$ = INPUT$(768, 1)ă      ă	p% = 1ă	Fin& = Fin& - 1ăăă	SCREEN 13ăă	FOR T& = 0 TO 255ă		OUT &H3C8, T&ă	      ă		FOR hue% = 1 TO 3ă			OUT &H3C9, ASC(MID$(pal$, p%)) \ 4: p% = p% + 1ă		NEXTă	NEXTăă	SEEK #1, 129ă	T& = BOFS&ăă	DEF SEG = BSEG&ăă	CLSă      ă	DOă		p$ = INPUT$(256, 1): FPos& = SEEK(1): l% = LEN(p$)ă	      ă		IF FPos& > Fin& THENă			l% = l% - (FPos& - Fin&): p$ = LEFT$(p$, l%): view$ = "done"ă		END IFă      ă		FOR p% = 1 TO l%ă			dat% = ASC(MID$(p$, p%))ă		      ă			IF rle% = 0 THENă				IF (dat% AND 192) = 192 THENă					rle% = dat% AND 63ă				ELSEă					POKE T&, dat%: T& = T& + 1ă				END IFă			ELSEă			FOR rle% = rle% TO 1 STEP -1ă				POKE T&, dat%: T& = T& + 1ă			NEXTă			END IFă		NEXTăăLOOP UNTIL view$ = "done"ăCLOSE 1ăPUT (0, 0), Buf, PSETăăăăEND SUBăăSUB SinusWaveăDIM lines%(1 TO 144, 1 TO 200)                     'allocate memoryărmovement% = 20                                    'the movement amountărspeed% = 25                                       'the movement speedăăFOR n% = 1 TO 200ă GET (19, n% - 1)-(299, n% - 1), lines%(1, n%)     'get the 200 linesăNEXT n%ă'CLSăăDOă s! = s! + rspeed% / 100                           'increase start valueă FOR n% = 1 TO 200ă  c! = s! + n% / rmovement%                        'calculate positionă  p% = (19 + SIN(c!) * 19)                         'for this lineăă  LINE (0, n% - 1)-(p% - 1, n% - 1), 0             'clear the left andă  LINE (p% + 279, n% - 1)-(319, n% - 1), 0         'right sideăă  PUT (p%, n% - 1), lines%(1, n%), PSET            'draw the lineă NEXT n%ăăLOOP WHILE INKEY$ = ""ăăăEND SUBăăSUB txtpalget (col, r, g, B) STATICăc = colăăSELECT CASE căCASE 6ă c = 20ăCASE 8 TO 15ă c = c + 48ăEND SELECTăă OUT &H3C7, căă r = INP(&H3C9)ă g = INP(&H3C9)ă B = INP(&H3C9)ăăEND SUBăăSUB txtpalset (col, r, g, B) STATICăăc = colăăSELECT CASE căCASE 6ă c = 20ăCASE 8 TO 15ă c = c + 48ăEND SELECTăă OUT &H3C8, că OUT &H3C9, ră OUT &H3C9, gă OUT &H3C9, BăăEND SUBăăREM $STATICăSUB Waveă    Wave1 = Wave1 + WaveSide1ă    IF Wave1 >= 80 THENă	Wave1 = 0ă	R1 = (R1 + 1) AND 255ă	WaveSide1 = RAND(R1)ă    END IFă  ă    Wave2 = Wave2 + WaveSide2ă    IF Wave2 >= 80 THENă	Wave2 = 0ă	R2 = (R2 + 2) AND 255ă	WaveSide2 = RAND(R2)ă    END IFă  ă    Wave3 = Wave3 + WaveSide3ă    IF Wave3 >= 80 THENă	Wave3 = 0ă	R3 = (R3 + 2) AND 255ă	WaveSide3 = RAND(R3)ă    END IFă  ă    FOR i = 1 TO 2ă	WAIT &H3DA, 8, 8ă	WAIT &H3DA, 8, 0ă    NEXT iă  ă    position = 1ă    FOR y = 0 TO 49ă	e = COSINUS(y + Wave1)ă	FOR x = 0 TO 79ă	    col = COSINUS(x + Wave2) + e + COSINUS(x + Wave3) + COSINUS(x + y)ă	    IF col > 127 THEN col = 127ă	    POKE position, colă	    position = position + 2ă	NEXTă    NEXTăăEND SUBăThe ABC Programmer             3D BOX ROTATION                voxel@freenet.edmonton.ab.ca   11-28-97 (23:55)       QB, QBasic, PDS        172  5871     BOXROT.BAS  'PUBLIC DOMAIN  1993 Peter M. Gruhnă'Converted from Pascal to BASIC by William Yu (11-28-97)ăă'Program draws a box on screen. Allows user to rotate the box aroundă'the three primary axes. Viewing transform is simple ignore z.ăă'I used _Computer_Graphics:_Principles_and_Practice_, Foley et ală'ISBN 0-201-12110-7 as a referenceăă'Okey dokey. This is kinda slow, and does a nice job of demonstrating theă'problems of repeatedly modifying the same data set. That is, the more andă'more you rotate the box, the more and more distorted it gets. This isă'because computers are not perfect at calculations, and all of those littleă'errors add up quite quickly.ăă'It's because of that that I used reals, not reals. I used floating pointă'because the guy doesn't know what is going on at all with 3d, so better toă'look at only the math that is really happening. Besides, I still have toă'think to use fixed point. Whaddaya want for .5 hour programming.ăă' DIRECTIONS:ă'   ',' - rotates around the x axisă'   '.' - rotates around the y axisă'   '/' - rotates around the z axisă'   ESC - quitsăă'   All rotations are done around global axes, not object axes.ăăDEFINT A-ZăDECLARE SUB Init ()ăDECLARE SUB myline (x1!, y1!, z1!, x2!, y2!, z2!)ăDECLARE SUB Drawit ()ăDECLARE SUB RotX ()ăDECLARE SUB RotY ()ăDECLARE SUB RotZ ()ăăCONST radTheta = 1 * 3.1415926535# / 180'per degreesă  ' sin and cos on computers are done in radians.ăăTYPE tpointr  ' Just a record to hold 3d pointsă    x AS SINGLEă    y AS SINGLEă    z AS SINGLEăEND TYPEăăDIM SHARED box(0 TO 7)  AS tpointr   ' The box we will manipulateăDIM SHARED SetColor AS INTEGERăăSCREEN 12ă  Inită  SetColor = 14ă  Drawită  DOă    A$ = INKEY$ă    IF A$ = "," THEN RotXă    IF A$ = "." THEN RotYă    IF A$ = "/" THEN RotZă  LOOP UNTIL A$ = CHR$(27)ăENDăăăDEFSNG A-ZăSUB Drawită' my model is hard coded. No cool things like vertex and edge and face lists.ă  CALL myline(box(0).x, box(0).y, box(0).z, box(1).x, box(1).y, box(1).z)ă  CALL myline(box(1).x, box(1).y, box(1).z, box(2).x, box(2).y, box(2).z)ă  CALL myline(box(2).x, box(2).y, box(2).z, box(3).x, box(3).y, box(3).z)ă  CALL myline(box(3).x, box(3).y, box(3).z, box(0).x, box(0).y, box(0).z)ăă  CALL myline(box(4).x, box(4).y, box(4).z, box(5).x, box(5).y, box(5).z)ă  CALL myline(box(5).x, box(5).y, box(5).z, box(6).x, box(6).y, box(6).z)ă  CALL myline(box(6).x, box(6).y, box(6).z, box(7).x, box(7).y, box(7).z)ă  CALL myline(box(7).x, box(7).y, box(7).z, box(4).x, box(4).y, box(4).z)ăă  CALL myline(box(0).x, box(0).y, box(0).z, box(4).x, box(4).y, box(4).z)ă  CALL myline(box(1).x, box(1).y, box(1).z, box(5).x, box(5).y, box(5).z)ă  CALL myline(box(2).x, box(2).y, box(2).z, box(6).x, box(6).y, box(6).z)ă  CALL myline(box(3).x, box(3).y, box(3).z, box(7).x, box(7).y, box(7).z)ăă  CALL myline(box(0).x, box(0).y, box(0).z, box(5).x, box(5).y, box(5).z)ă  CALL myline(box(1).x, box(1).y, box(1).z, box(4).x, box(4).y, box(4).z)ăEND SUBăăSUB Inită'  turns on graphics and creates a cube. Since the rotation routinesă'  rotate around the origin, I have centered the cube on the origin, soă'  that it stays in place and only spins.ă  box(0).x = -75:  box(0).y = -75:  box(0).z = -75ă  box(1).x = 75:   box(1).y = -75:  box(1).z = -75ă  box(2).x = 75:   box(2).y = 75:   box(2).z = -75ă  box(3).x = -75:  box(3).y = 75:   box(3).z = -75ă  box(4).x = -75:  box(4).y = -75:  box(4).z = 75ă  box(5).x = 75:   box(5).y = -75:  box(5).z = 75ă  box(6).x = 75:   box(6).y = 75:   box(6).z = 75ă  box(7).x = -75:  box(7).y = 75:   box(7).z = 75ăEND SUBăăSUB myline (x1!, y1!, z1!, x2!, y2!, z2!)ă' Keeps the draw routine pretty. Pixels are integers, so I round. Since theă' cube is centered around 0,0 I move it over 200 to put it on screen.ă' if you think those real mults are slow, here's some rounds too... hey, youă' may wonder, what happened to the stinking z coordinate? Ah, says I, thisă' is the simplest of 3d viewing transforms. You just take the z coord out ofă' things and boom. Looking straight down the z axis on the object. If I getă' inspired, I will add simple perspective transform to these.  There, gotă' inspired. Made mistakes. Foley et al are not very good at tutoringă' perspective and I'm kinda ready to be done and post this.ă  LINE (INT(x1!) + 200, INT(y1!) + 200)-(INT(x2!) + 200, INT(y2!) + 200), SetColorăEND SUBăăSUB RotXă' if you know your matrix multiplication, the following equationsă' are derived fromăă' [x   [ 1  0  0  0   [x',y',z',1]ă'  y     0  c -s  0 =ă'  z     0  s  c  0ă'  1]    0  0  0  1]ăăDIM i  AS INTEGERă  SetColor = 0ă  Drawită  FOR i = 0 TO 7ă    box(i).x = box(i).xă    box(i).y = box(i).y * COS(radTheta) + box(i).z * SIN(radTheta)ă    box(i).z = -box(i).y * SIN(radTheta) + box(i).z * COS(radTheta)ă  NEXT iă  SetColor = 15ă  DrawităEND SUBăăSUB RotYă' if you know your matrix multiplication, the following equationsă' are derived fromăă' [x   [ c  0  s  0   [x',y',z',1]ă'  y     0  1  0  0 =ă'  z    -s  0  c  0ă'  1]    0  0  0  1]ăăDIM i AS INTEGERă  SetColor = 0ă  Drawită  FOR i = 0 TO 7ă    box(i).x = box(i).x * COS(radTheta) - box(i).z * SIN(radTheta)ă    box(i).y = box(i).yă    box(i).z = box(i).x * SIN(radTheta) + box(i).z * COS(radTheta)ă  NEXT iă  SetColor = 15ă  DrawităEND SUBăăSUB RotZă' if you know your matrix multiplication, the following equationsă' are derived fromăă' [x   [ c -s  0  0   [x',y',z',1]ă'  y     s  c  0  0 =ă'  z     0  0  1  0ă'  1]    0  0  0  1]ăăDIM i AS INTEGERă  SetColor = 0ă  Drawită  FOR i = 0 TO 7ă    box(i).x = box(i).x * COS(radTheta) + box(i).y * SIN(radTheta)ă    box(i).y = -box(i).x * SIN(radTheta) + box(i).y * COS(radTheta)ă    box(i).z = box(i).ză  NEXT iă  SetColor = 15ă  DrawităEND SUBăDanny Beardsley                ANIMATED TUNNEL2               beards@dnai.com                12-02-97 (00:36)       PB                     189  4206     TUNNEL2.BAS 'ANIMATED TUNNEL2 BY DANNY BEARDSLEYă'MADE WITH POWERBASIC 3.2ă'USE THE ARROW KEYS TO MOVE THE TUNNELă'IF YOU HAVE ANY IDEAS ON HOW TO IMPROVE IT EMAIL MEă'ă'EMAIL: DSB@CYBERDUDE.COMă'HOMEPAGE: HTTP://WWW.DNAI.COM/~BEARDSă'ICQ#: 3758561ă$DYNAMICăDECLARE SUB plasma ()ăDECLARE SUB Splitbox (X1%, Y1%, X2%, Y2%)ăDECLARE SUB Newcolor (XA%, YA%, x%, y%, XB%, YB%)ăDIM absolute scrn(319,200) as byte at &HA000ăDIM x(319,200) AS byteăDIM y(319,200) AS byteăDIM PIC(255, 255) AS byteăDIM MAX.Y AS INTEGERăDIM MAXX AS INTEGERăshared maxxăshared max.yăMAXX = 256ăMAX.Y = 256ăshared scrn()ăshared pic()ăDIM CONV AS SINGLEăDIM CONV2 AS SINGLEăCONV = 3.141592 / 180ăCONV2 = (256) / 360ăDIM s AS INTEGERăDIM x AS integerăDIM y AS INTEGERăDIM i AS INTEGERăDIM COLOUR AS INTEGERăRANDOMIZE TIMERăăRANDOMIZE TIMERăPRINT "ANIMATED TUNNEL2 BY DANNY BEARDSLEY"ăPRINT "MADE WITH POWERBASIC 3.2"ăPRINT "USE THE ARROW KEYS TO MOVE THE TUNNEL"ăPRINTăPRINT "PRESS Z....NO W...NO Q....AH THE HECK WITH IT, PRESS ANY! KEY"ăSLEEPăCLSăPRINT "INITIALIZING...(HOLD ON)"ăPRINT "GENERATING TEXTURE..."ăplasmaăPRINT "SMOOTHING TEXTURE..."ăFOR repet = 1 TO 4ă  FOR y = 0 TO 255ă    ky = y - 1ă    IF y = 0 THEN ky = 255ă    FOR x = 0 TO 254ă      kx = x - 1ă      IF kx = -1 THEN kx = 254ă      s = PIC(x, y) + PIC((x + 1) MOD MAXX, y) + PIC(kx, y) + PIC(x, ((y + 1) MOD MAX.Y)) + PIC(x, ky)ă      s = s \ 5ă      PIC(x, y) = să    NEXT xă  NEXT yăNEXTăPRINT "GENERATING TUNNEL..."ăFOR y = 0 TO 200ă  LOCATE 4,21ă  PRINT Y\2;"%"ă  FOR x = 0 TO 319ă      A = (x - 160): B = (y - 100)ă      IF B = 0 THEN ANGLE = 90*SGN(A): R=5000/(ABS(A)+.0001):GOTO SKIPANGLECALCă      R = 5000 / (SQR(A ^ 2 + B ^ 2))ăă      'SQR(A^2 +B^2)ă      ANGLE = ATN(A / B) / CONVăSKIPANGLECALC:ă      'CORRECT ANGLEă      IF B < 0 THEN ANGLE = ANGLE - 180ă      ANGLE = (ANGLE + 360) * CONV2ă      x(x,y) = ((R) MOD (MAXX ))ă      y(x,y) = ((ANGLE) MOD (MAX.Y - 1)) + 1ă   NEXT xăNEXT yă! Mov   AX, 19ă! int   16ăăFOR i% = 1 TO 128ă  OUT &H3C8, i%ă  OUT &H3C9, (64-((I%+1)\2))ă  OUT &H3C9, ((I%-1)\2)ă  OUT &H3C9, 0ăNEXT i%ăFOR i% = 1 TO 128ă  OUT &H3C8, i%+128ă  OUT &H3C9, 0ă  OUT &H3C9, (64-((I%+1)\2))ă  OUT &H3C9, 0ăNEXT i%ăăTIM!=TIMERăDOă  SELECT CASE INP(96)ă    CASE 72ă      inx! = inx! + .5ă    CASE 80ă      inx! = inx! - .5ă    CASE 77ă      iny! = iny! + .5ă    CASE 75ă      iny! = iny! - .5ă  END SELECTă  i% = i% + inx! MOD 255ă  iy% = iy% + iny! MOD 256ăă  XSEG??=VARSEG(X(0,0))ă  YSEG??=VARSEG(Y(0,0))ă  PICSEG??=VARSEG(PIC(0,0))ă  !XOR SI,SIăă  SILOOP:ă  !INC SIă    !MOV ES,XSEG??ă    !MOV BL,ES:[SI]ă    !MOV ES,YSEG??ă    !ADD BL,I%ă    !MOV BH,ES:[SI]ă    !MOV ES,PICSEG??ă    !ADD BH,IY%ă    !MOV DX,&HA000ă    !MOV AL,ES:[BX]ă    !MOV ES,DXă    !MOV ES:[SI],ALă  !CMP SI,&HFA00ă  !JB SILOOPăă  IF INP(96) = 1 THEN EXIT DOă  F&=F&+1ăLOOPăFPS!=F&/(TIMER-TIM!)ăSLEEPă! Mov   AX, 3ă! int   16ăPRINT FPS!ăSLEEPăENDăăDEFINT A-ZăSUB Newcolor (XA, YA, x, y, XB, YB)       'puts a new color based on averageăăIF PIC(x MOD MAXX, y MOD MAX.Y) <> 0 THEN EXIT SUBăăavg = ABS(XA - XB) + ABS(YA - YB)ăăCOLOUR = (PIC(XA MOD MAXX, YA MOD MAX.Y) + PIC(XB MOD MAXX, YB MOD MAX.Y)) \ 2 + ((RND - .5) * avg * 8)ă    IF COLOUR > 250 THEN COLOUR = 250ă    IF COLOUR < 1 THEN COLOUR = 1ăPIC(x MOD MAXX, y MOD MAX.Y) = COLOURăăEND SUBăă'DEFSNG A-ZăSUB plasmaăăPIC(128, 128) = RND * 250ăăSplitbox 128, 128, 384, 384ăEND SUBăă'ăSUB Splitbox (X1, Y1, X2, Y2)ăăIF (X2 - X1 < 2) AND (Y2 - Y1 < 2) THEN EXIT SUBăăx = (X1 + X2) \ 2ăy = (Y1 + Y2) \ 2ăăNewcolor X1, Y1, X1, y, X1, Y2ăNewcolor X1, Y2, x, Y2, X2, Y2ăNewcolor X2, Y2, X2, y, X2, Y1ăNewcolor X2, Y1, x, Y1, X1, Y1ăIF PIC(x MOD MAXX, y MOD MAX.Y) = 0 THENă    COLOUR = (PIC(X1 MOD MAXX, Y1 MOD MAX.Y) + PIC(X2 MOD MAXX, Y1 MOD MAX.Y) + PIC(X1 MOD MAXX, Y2 MOD MAX.Y) + PIC(X2 MOD MAXX, Y2 MOD MAX.Y)) \ 4ă    IF COLOUR > 250 THEN COLOUR = 250ă    IF COLOUR < 1 THEN COLOUR = 1ă    PIC(x MOD MAXX, y MOD MAX.Y) = COLOURăEND IFăăSplitbox X1, Y1, x, yăSplitbox x, Y1, X2, yăSplitbox x, y, X2, Y2ăSplitbox X1, y, x, Y2ăăEND SUBăSteven McGranahan              USING 64K BUFFERS FOR VIDEO    mcgrnhns@mc.net                12-04-97 (02:43)       QB, QBasic, PDS        139  4987     BAGPAGE.BAS 'BagPage.BAS by KAOS Soft-Ware.ă'This is a small demo program on using 64k buffers as video page buffers ină'screen 13. If you like these subs then please e-mail me at: mcgrnhns@mc.netă'Thanks to Jonathan Leger for memcopy and fillchar.ă'KAOS Soft-Ware:ă'http://user.mc.net/mcgrnhns/ăDEFINT A-ZăDECLARE SUB NEWPUT (x%, y%, array%(), subscript%)ăDECLARE SUB NCLS ()ăDECLARE SUB COPYVPAGE ()ăDECLARE SUB NPSET (x%, y%, pcolor%)ăDECLARE SUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăDECLARE SUB FillChar (segment%, offset%, value%, bytes%)ăă'$DYNAMIC '*** Hey it runns faster :)ăăDIM SHARED buffer(1 TO 32000) AS INTEGERăă'*** Go to screen 13.ăSCREEN 13ăCLSă'*** first make a block 20 x 20 pixles big in buffer.ăFOR y% = 0 TO 19ă    FOR x% = 0 TO 19ă        NPSET x%, y%, x% + y%ă    NEXTăNEXTă'*** now copy that to the screenăCOPYVPAGEă'*** Capture image on screen with GETăDIM array%(((20 * 20) / 2) + 2)ăGET (0, 0)-(19, 19), array%ă'*** now clear the bufferăNCLSă'*** now use NEWPUT to put the image on the buffer 10 times.ăFOR yay% = 0 TO 9ă    NEWPUT yay%, yay%, array%(), 0ăNEXTă'*** copy the buffer to the screen then clear the bufferăCOPYVPAGEăNCLSăSLEEP 0ăCLSăăSUB COPYVPAGEă'This sub copys the contents of the buffer into the screen.ă'To use it just type COPYVPAGEăMemCopy VARSEG(buffer(1)), VARPTR(buffer(1)), &HA000, 0, &HFA00ăEND SUBăăSUB FillChar (segment%, offset%, value%, bytes%)ă'Do not use this rutien directly use NCLS instedăasm$ = ""ăasm$ = asm$ + CHR$(85)                             'PUSH BPăasm$ = asm$ + CHR$(137) + CHR$(229)                'MOV BP,SPăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăasm$ = asm$ + CHR$(139) + CHR$(86) + CHR$(8)       'MOV DX,[BP+08]ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12)      'MOV AX,[BP+0C]ăasm$ = asm$ + CHR$(30)                             'PUSH DSăasm$ = asm$ + CHR$(142) + CHR$(216)                'MOV DS,AXăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(10)      'MOV BX,[BP+0A]ăasm$ = asm$ + CHR$(136) + CHR$(23)                 'MOV [BX],DL <------+ăasm$ = asm$ + CHR$(67)                             'INC BX             |ăasm$ = asm$ + CHR$(226) + CHR$(251)                'LOOP 0112   -------+ăasm$ = asm$ + CHR$(31)                             'POP DSăasm$ = asm$ + CHR$(93)                             'POP BPăasm$ = asm$ + CHR$(203)                            'RETFăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL segment%, BYVAL offset%, BYVAL value%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB MemCopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ă'Do not use this rutien use COPYVPAGE insted.ăăasm$ = ""ăasm$ = asm$ + CHR$(85)                             'PUSH BPăasm$ = asm$ + CHR$(137) + CHR$(229)                'MOV BP,SPăasm$ = asm$ + CHR$(30)                             'PUSH DSăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10)      'MOV AX,[BP+0A]ăasm$ = asm$ + CHR$(142) + CHR$(192)                'MOV ES,AXăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14)      'MOV AX,[BP+0E]ăasm$ = asm$ + CHR$(142) + CHR$(216)                'MOV DS,AXăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8)      'MOV SI,[BP+08]ăasm$ = asm$ + CHR$(139) + CHR$(126) + CHR$(12)     'MOV DI,[BP+0C]ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăasm$ = asm$ + CHR$(243)                            'REPZăasm$ = asm$ + CHR$(164)                            'MOVSBăasm$ = asm$ + CHR$(31)                             'POP DSăasm$ = asm$ + CHR$(93)                             'POP BPăasm$ = asm$ + CHR$(203)                            'RETFăăDEF SEG = VARSEG(asm$)ă   CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(asm$))ăDEF SEGăăEND SUBăăSUB NCLSă'This sub Clears the buffer to blackă'Usage: NCLSăFillChar VARSEG(buffer(1)), VARPTR(buffer(1)), 0, &HFA00ăEND SUBăăSUB NEWPUT (x%, y%, array%(), subscript%)ă'Replaces PUT by puting an image to the buffer insted of directly to the screenă'Usage: NewPut x%, y%, array%(), subscript%ă'x%, y%     - the position to put the spriteă'array%()   - the array that contains the spriteă'subscript% - the starting position of the sprite inside the arrayăxlent% = array%(subscript%) / 8ăylent% = array%(subscript% + 1)ăPtr& = VARPTR(array%(subscript% + 2))ăysize% = y% + ylent% - 1ăxsize% = x% + xlent% - 1ăseg1& = VARSEG(array%(subscript%))ăseg2& = VARSEG(buffer(1))ăFOR yp% = y% TO ysize%ă    FOR xp% = x% TO xsize%ă        DEF SEG = seg1&ă        byte% = PEEK(Ptr&)ă        DEF SEG = seg2&ă        IF byte% <> 0 THEN POKE xp% + (yp% * 320&), byte%ă        Ptr& = Ptr& + 1ă    NEXTăNEXTăEND SUBăăSUB NPSET (x%, y%, pcolor%)ă'Places a pixle inside the bufferă'Usage: NPSET x%, y%, pcolor%ă'x%, y%  - the position of the pixle to placeă'pcolor% - the color to place ăDEF SEG = VARSEG(buffer(1))ă	POKE x% + (y% * 320&), pcolor%ăDEF SEGăEND SUBăJohn Charles Bull III          VIEW .PKG FILES                vividbarrier@hotmail.com       12-11-97 (00:34)       QB, QBasic, PDS        103  2438     VTOOLS.BAS  DECLARE SUB VLOAD (FileName$, Picture%, XRes%, YRes%)ăDECLARE SUB VPAL (FileName$)ăDECLARE SUB WriteRGB (red%, grn%, blu%, slot%)ăDEFINT A-Ză' /........................\ Vivid Barrier Software 1997ă' |.oO..oOo.oOo..vivid.....| QBasic 4.5x Useful SUB Proceduresă' |.oO.oOo..oOo....barrier.| by John Charles Bull IIIă' |.oO.oOo..oOOOOo..=O97O=.|ă' |.oOoOo...oOo.oOo........|ă' |.oOOo....oOOOOo.........|ă' \......................../ă'ă' This is an example of how to put an PKG image onto the screenă' Use this source code to load PKG files and palettes created withă' vEDIT (http://pages/prodigy.net/wyzel/)ăăSCREEN 13ăVPAL "title.pal"ăVLOAD "pkg\title.pkg", 1, 135, 80ăăSUB VLOAD (FileName$, Picture, XRes, YRes)ăăif$ = FileName$ăib = PictureăOPEN if$ FOR BINARY AS #1ăăGET #1, 1, ivăGET #1, 3, iaăă'        IF ib > ia THEN EXIT SUBă       ă        d = 5: in$ = ""ă        DOă                a = a + 1ă                z$ = RIGHT$(LEFT$(in$, a), 1)ă                GET #1, d, bă                in$ = in$ + CHR$(b)ă                d = d + 2ă        LOOP UNTIL a = 30ăăin$ = LEFT$(in$, 21)ăăd! = ib * 4 + 66 'caculate where to get resulutionăăGET #1, d!, ix          'xresăGET #1, d! + 2, iy      'yresă ăa! = ib - 1 'image numberăb! = 7200   'image lengthăc! = 150    'added from aboveăăd! = a! * b! + c!  'caculate where to start getting gfx dataăa = XRes: b = YRes: c = 0: d = 0ăăDOă        GET #1, d!, că        IF c = 0 THENă        ELSEăă                IF b >= 100 THENă                        DEF SEG = &HA7D0ă                        POKE ((b - 100) * 320 + a), că                ELSEă                        DEF SEG = &HA000ă                        POKE (b * 320 + a), că                END IFă     ă        END IFă        d! = d! + 2ă        a = a + 1: IF a = ix + XRes THEN a = XRes: b = b + 1ăLOOP UNTIL b = iy + YResăăCLOSE #1ăăiy = iy - 1ăix = ix - 1ăăEND SUBăăSUB VPAL (FileName$)ăăOPEN FileName$ FOR BINARY AS #1ă ă        DOă                b = b + 1: GET #1, b, red%ă                b = b + 1: GET #1, b, grn%ă                b = b + 1: GET #1, b, blu%ă                CALL WriteRGB(red%, grn%, blu%, a): a = a + 1ă        LOOP UNTIL a = 249ăăCLOSE #1ăăEND SUBăăSUB WriteRGB (red%, grn%, blu%, slot%)ă  'ă  OUT &H3C8, slot% ' Write RGB values to slotă  'ă  OUT &H3C9, red%ă  OUT &H3C9, grn%ă  OUT &H3C9, blu%ă  'ăEND SUBăBert van Dam                   SPRITE MASK MAKER              bd1rsd@usa.net                 12-14-97 (17:05)       QB, QBasic, PDS        236  7442     MASKMAKE.BAS'Here's   another   program  for  the  abc's.  It  will  take  a  sprite andă'autoamtically generate a masking for it. Then you can see a (silly) exampleă'on  how  to  make  an  animation  using  the mask, with preservation of theă'background,  and  use  of vertical retrace. The mask itself can be saved toă'file  for  use in other programs. Not very spectacular but if you're new toă'animation (such as myself) this will clearify a lot. ăăă'-----------------beginning of source code---------------------ăă'Mask Maker produces masks to mask colors in animations       dec 1997ăă'Program by Bert van Dam, donated to the public domain. I can be reachedă'at Fido 2:285/750.16 or the internet BD1RSD@USA.NETăă'The masking technique is based on the program MASK.BAS by Dave Sheaă'which was donated to the public domain on January 19th, 1997,ă'adapted for use with screen 9 (needed for reasonable resolution withă'2 screen pages) and for sprites which are designed with the SHAPEă'sprite designer.ăă'The mask can be saved to data lines, which can be merged into anotheră'program, an example is maskdemo.basăă'The animation demo uses a separate array to preserve the background. Toă'prevent flicker drawing waits for the video retrace. The way to do thisă'is from a mail by Steve Gartrell.ăăCLSăSCREEN 9ăăElem = 385                  'These dimensional parameters are generatedăx = 64                      'by the sprite designer SHAPE and recordedăy = 48                      'in rem statements near the dataăăDIM Rups(Elem - 1) AS LONG  'DIM the array to hold the spriteăăDIM Mask(Elem - 1) AS LONG  'Do the same for the mask arrayă                            'and dim an array to preserve theă                            'backgroundăăDIM Preserve(Elem - 1) AS LONGăăTCol = 0                    'Color you want to be transparentăMCol = 15                   'Mask color, this must beă                            'a color that is not used ină                            'the background nor the spriteăăFOR i = 0 TO Elem - 1       'Read the sprite into the arrayă    READ Rups(i)ăNEXT iăăPUT (1, 1), Rups            'and put it on the screen on 1,1ăăLOCATE 20, 1ăPRINT "---===[ MASK MAKER ]===---     Masking in progress...."ăăFOR a = 1 TO xă    FOR b = 1 TO yă                            'The following commands search the sprite, andă                            'change any pixel that's NOT the transparentă                            'color to the transparent color, and any pixelă                            'that IS the transparent color to the mask coloră                            '(This is the masking process)ăă        IF POINT(a, b) = TCol THEN PSET (a, b), MColă        IF POINT(a, b) <> TCol AND POINT(a, b) <> MCol THEN PSET (a, b), TColă    NEXTăNEXTăăGET (1, 1)-(x, y), Mask     'Get the mask for the spriteăăLOCATE 20, 1ăPRINT SPC(70);ăLOCATE 20, 1ăPRINT "Would you like to see the result (y/n)? ";ăAnswer$ = INPUT$(1)ăPRINT Answer$ăIF UCASE$(Answer$) = "Y" THENăă    CLSă    FOR a = 1 TO 100ă                            'Draw some lines for a backgroundăă        LINE (a + 80, 80)-(a + 80, 150), a / 6ă    NEXTăă    PUT (100, 90), Mask, AND    'Lay down the mask using ANDă    PUT (100, 90), Rups, XOR    'Lay down sprite using XORăEND IFăăLOCATE 20, 1ăPRINT "Would you like write the mask to disk as data statements (y/n)? ";ăAnswer$ = INPUT$(1)ăPRINT Answer$ăIF UCASE$(Answer$) = "Y" THENăă    LINE INPUT "Filename (incl. extension and path) "; FileName$ă    OPEN FileName$ FOR OUTPUT AS #1ă    PRINT #1, "'Mask generated with the MaskMaker"ă    PRINT #1, "'Elem = "; Elemă    PRINT #1, "'x    = "; xă    PRINT #1, "'y    = "; yă    PRINT #1,ă    Regel = 0ă    FOR i = 0 TO Elem - 1ă        IF Regel MOD 5 = 0 THENă            PRINT #1,ă            PRINT #1, "DATA "; Mask(i);ă        ELSEă            PRINT #1, " , "; Mask(i);ă        END IFă        Regel = Regel + 1ă    NEXT iăă    CLOSE #1ăăEND IFăLOCATE 21, 1ăPRINT SPC(70);ăLOCATE 20, 1ăPRINT "Would you like to see an animation using the newly generated mask (y/n)? ";ăAnswer$ = INPUT$(1)ăPRINT Answer$ăIF UCASE$(Answer$) <> "Y" THEN ENDăăCLSăFOR a = 1 TO 600ă                            'Draw some lines for a backgroundăă    LINE (a, 1)-(a, 250), a / 39ăNEXTăLOCATE 22, 1ăPRINT "Animation demo using the new mask and video retrace timing..."ăăăDEF SEG = &HA000            'Define video segmentăăăFOR xp = 1 TO 260 STEP 2ăă                            'Save the backgroundăă    GET (xp * 2, 90)-(xp * 2 + x - 1, 90 + y - 1), Preserveăă    WAIT &H3DA, 8, 8        'Wait till _start_ of vertical retraceă    WAIT &H3DA, 8           'method by Steve Gartrellăăă                            'Draw mask and spriteă    PUT (xp * 2, 90), Mask, ANDă    PUT (xp * 2, 90), Rups, XORăă                            'Wait a bită    FOR t = 1 TO 200: NEXT tăă    WAIT &H3DA, 8, 8        'Wait till _start_ of vertical retraceă    WAIT &H3DA, 8           '(method by Steve Gartrell)ăă                            'Put the background back to erase the spriteă    PUT (xp * 2, 90), Preserve, PSETăăNEXT xpăăăăENDăăRups:ă                            'Designed using SHAPE sprite makeră                            'ELEM: 385  X: 64  Y: 48ăDATA  3145792 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA -2139095040 , 0 , 0 , 0 ,-2134835200 , 0ăDATA -2134835200 , 0 ,-2134835200 , 0 , 0 , 0ăDATA  6488064 , 0 , 6488064 , 0 , 6488064 , 0ăDATA  0 , 0 , 2228224 , 0 , 2228224 , 0ăDATA  2228224 , 0 , 0 , 0 , 2228224 , 471604224ăDATA  4070428 , 0 , 2228224 , 0 , 0 , 0ăDATA  0 , 1044266496 , 4079166 , 0 , 0 , 0ăDATA  0 , 0 , 1310720 , 2139062016 , 7044991 , 0ăDATA  0 , 0 , 0 , 0 , 0 ,-33024ăDATA  16777215 , 0 , 0 ,-2139095040 , 8421504 , 0ăDATA  0 , 2139062016 , 7044991 , 0 , 1310720 , 0ăDATA  0 , 0 , 0 , 1044266496 , 3554878 , 0ăDATA  524288 , 0 , 0 , 0 , 0 , 471604224ăDATA  1842204 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0 , 0 , 0 , 0 , 0 , 0ăDATA  0ăAndrey Berezansky              SINUS - COSINUS GRAPHICS       nikolai@nsi.co.il              12-17-97 (01:04)       QB, QBasic, PDS        36   1249     SINUS.BAS   'Just a simple (SINUS - COSINUS) graphics ,with circles instead of points.ăă'Programmed by BEREZANSKY ANDREY (email - nikol@cs.bgu.ac.il)ăă'DATE - 07/12/97ăăăăăSCREEN 9ăpi = 3.141592ăăFOR x = 0 TO (pi * 4) STEP .01ă  col = col + 1: IF col = 15 THEN col = 1     'chahging colorsă  y = 60 - SIN(x * 6) * 8                     'functionă ă  CIRCLE (x * 50, y), 5, col: CIRCLE (630 - x * 50, y), 5, colă  CIRCLE (x * 50, y + 100), 5, col: CIRCLE (630 - x * 50, y + 100), 5, colă  CIRCLE (x * 50, y + 200), 5, col: CIRCLE (630 - x * 50, y + 200), 5, colăNEXTăăSLEEP 1&ăăFOR x = 0 TO (pi * 4) STEP .01ă  col = col + 1: IF col = 15 THEN col = 1     'colorsă  y = 100 - SIN(x * 4) * 20           'function (change it if you know better)ăă  CIRCLE (y, x * 50), 11, col: CIRCLE (y, 393 - x * 50), 11, colă  CIRCLE (y + 100, x * 50), 11, col: CIRCLE (y + 100, 393 - x * 50), 11, colă  CIRCLE (y + 200, x * 50), 11, col: CIRCLE (y + 200, 393 - x * 50), 11, colă  CIRCLE (y + 300, x * 50), 11, col: CIRCLE (y + 300, 393 - x * 50), 11, colă  CIRCLE (y + 400, x * 50), 11, col: CIRCLE (y + 400, 393 - x * 50), 11, colă  CIRCLE (y + 500, x * 50), 11, col: CIRCLE (y + 500, 393 - x * 50), 11, colăNEXTăăDO WHILE INKEY$ = "": LOOPăJodie J. Cunningham            SHADED BALLS SCREEN SAVER      jodiej@prodigy.net             12-18-97 (16:26)       QB, QBasic, PDS        39   599      SCREEN.BAS  1 SCREEN 13ăCLSăPRINT "Press CTRL+ Pause to exit this screen   saver"ăPRINT "Initializing......."ăFOR i2 = 1 TO 10000ăNEXT i2ăPRINT "Starting..........."ăFOR i2 = 1 TO 10000ăNEXT i2ăCLSăRANDOMIZE VAL(RIGHT$(TIME$, 2))ăa = 31ăb = 0ăDOăCIRCLE (50, 50), b, aăCIRCLE (51, 50), b, aăa = a - 1ăb = b + 1ăLOOP UNTIL b = 15ăDOăe = 1ăDOăi = INT(RND * 320)ăii = INT(RND * 200)ăLOOP UNTIL POINT(i, ii) <> 0ăa = 31ăb = 0ăFOR q = 1 TO 1000ăNEXT qăDOăCIRCLE (i, ii), b, aăCIRCLE (i + 1, ii), b, aăa = a - 1ăb = b + 1ăLOOP UNTIL b = 15ăe = e + 1ăIF e = 100 THEN GOTO 1ăLOOPăăJodie J. Cunningham            CIRCLE PLASMA SCREEN SAVER     jodiej@prodigy.net             12-18-97 (16:26)       QB, QBasic, PDS        49   1071     CPLASMA.BAS RANDOMIZE TIMERăSCREEN 13ăsubt = 3ămaxx = 319ămaxy = 199ăFOR s& = 0 TO 63ă  PALETTE s&, s& * 65536ă  PALETTE 63 + s&, 63 * 65536 + s& * 256 + s&ă  PALETTE 63 + 63 + s&, s& * 256ă  PALETTE 63 + 63 + 63 + s&, s& * 65536 + 63 * 256 + s&ăNEXTăx = RND * 319ăy = RND * 199ăxb = xăyb = yăc = 1ăăFOR cs = 127 TO 1 STEP -1'1 TO 127ă  CIRCLE (160, 100), 128 - cs, csă  PAINT (160, 100), csăNEXTăăFOR a& = 1 TO maxx * maxy * 15ă  c2 = POINT(x, y)ă  IF c2 > 63 + 63 THEN c2 = c2 - (63 + 63)ă  IF c2 = 0 THEN GOTO skipperă  c3 = c + c2ă  IF c3 > c4 THEN c4 = c3ă  IF c3 > 63 + 63 THEN  ELSE PSET (x, y), c3': PSET (320 - x, 200 - y), c3': PSET (x, 200 - y), c3: PSET (320 - x, y), c3:ăskipreturn:ă  y = y + ((RND * 2) - 1)ă  x = x + ((RND * 2) - 1)ă  IF x < 0 THEN x = 0ă  IF x > maxx THEN x = maxxă  IF y < 0 THEN y = 0ă  IF y > maxy THEN y = maxyă ăNEXTăENDăăskipper:ăIF x < 160 THEN x = x + 1ăIF x = 160 THEN x = xăIF x > 160 THEN x = x - 1ăIF y < 100 THEN y = y + 1ăIF y = 100 THEN y = yăIF y > 100 THEN y = y - 1ăGOTO skipreturnăăBert van Dam                   CLIP PIECES FROM .PCX          bd1rsd@usa.net                 12-18-97 (23:15)       QB, PDS                112  3861     CLIP.BAS    'CLIP.BASăă'Program to cut (clip) pieces out of .PCX files. The selected parts will beă'copied with GET and saved to disk. Change the screen and filenames to youră'liking. You need PICEM to make this program work.ăă'Mark the top lefthand corner by pressing the right mouse button. Then markă'the bottom right hand corner with the left mouse button. Press space toă'check the result. If you like it press S to save the clip to disk, oră'press Q to quit without saving.ăă'If the text on the screen is in the way you can move it, or prevent ită'from being shown.ăă'This source is donated to the public domain by Bert van Dam. I can beă'reached at Fido 2:285/705.16 of the net BD1RSD@USA.NETăăă' $INCLUDE: 'qb.bi'ăSCREEN 9ăCLSăăDIM Reg AS RegTypeXăă'Vertical screen position for text (change if the text is in the way)ăVertOff = 1ăă'Filename for the clipped part of the screenăBewaar$ = "c:\qb45\pictures\test.dat"ăă'Source (.PCX) file nameăsource$ = "c:\qb45\games\tafels\kop1.pcx"ăă'Do you want text on the screen (1 = yes)ăToonTekst = 1ăă'If your copy of Picem is in a different directory modify the next line.ăSHELL "c:\qb45\utils\picem\picem /e /k " + source$ăăăLOCATE 1, 1ăIF ToonTekst = 1 THEN PRINT "QB4.5 picture clipper                                1996 Bert van Dam"ăăReg.ax = 7      'Horizontal limităReg.cx = 0      'MinăReg.dx = 632    'MaxăCALL INTERRUPTX(&H33, Reg, Reg)ăReg.ax = 8      'Vertical limităReg.cx = 0      'MinăReg.dx = 478    'MaxăCALL INTERRUPTX(&H33, Reg, Reg)ăReg.ax = 1      'Switch onăCALL INTERRUPTX(&H33, Reg, Reg)ăă'MainăDOă        Reg.ax = 3ă        CALL INTERRUPTX(&H33, Reg, Reg)ă        LOCATE VertOff + 6, 20ă        IF ToonTekst = 1 THEN PRINT "Status & pixel position "; Reg.bx; Reg.cx; Reg.dx; "                  "ă        Positie = INT((Reg.cx / 8) + 1)ă        Regel = INT((Reg.dx / 20) + 1)ă        LOCATE VertOff + 7, 20ă        IF ToonTekst = 1 THEN PRINT "'Locate' coordinates    "; Positie; Regel; "                       "ă        LOCATE VertOff + 8, 20ă        IF Reg.bx = 1 AND neehoor = 0 THENă                x1 = Reg.cxă                y1 = Reg.dxă                neehoor = 1ă                LOCATE VertOff + 9, 20ă                IF ToonTekst = 1 THEN PRINT "Lefthand top corner    "; x1; y1; "                       "ă        END IFă        IF Reg.bx = 2 AND neehoor = 1 THENă                x2 = Reg.cxă                y2 = Reg.dxă                neehoor = 0ă                RectHeight = ABS(y2 - y1) + 1ă                RectWidth = ABS(x2 - x1) + 1ă                ByteSize = 4 + RectHeight * 1.4 * INT((RectWidth * 4 + 7) / 8)ă                PicSize = INT(ByteSize / 2)ă                REDIM Image(1 TO PicSize)  AS INTEGERă                GET (x1, y1)-(x2, y2), Imageă                LOCATE VertOff + 10, 20ă                IF ToonTekst = 1 THEN PRINT "Righthand bottom corner"; x2; y2; "                       "ă                LOCATE VertOff + 11, 20ă                IF ToonTekst = 1 THEN PRINT "Image is recorded, press space                            "ă                plaatje = 1ă        END IFăLOOP UNTIL INKEY$ <> ""ă'Switch mouse offăReg.ax = 2ăCALL INTERRUPTX(&H33, Reg, Reg)ăCLSăLOCATE 1, 1ăPRINT "QB4.5 picture clipper                                1996 Bert van Dam"ăIF plaatje = 1 THENă        PUT (50, 50), Imageă        LOCATE VertOff + 8, 20ă        PRINT "Press S to save clip, or Q to quit without saving."ă        antw$ = INPUT$(1)ă        IF UCASE$(antw$) = "S" THENă                OPEN Bewaar$ FOR OUTPUT AS #1ă                PRINT #1, PicSizeă                FOR t = 1 TO PicSizeă                        PRINT #1, Image(t)ă                NEXT tă                CLOSE #1ă        END IFăELSEă        LOCATE 10, 10ă        PRINT "No clip has been made."ăEND IFăBert van Dam                   READ FILES THAT WERE CLIPPED   bd1rsd@usa.net                 12-18-97 (23:15)       QB, QBasic, PDS        22   535      READCLIP.BAS'READCLIP.BASăă'Program to read files that were made with clip, and display them onă'the screen. This is meant as an example source.ăă'This program is donated to the public domain by Bert van Dam. I can beă'reached at Fido 2:285/750.16 or the net BD1RSD@USA.NETăăSCREEN 9ăCLSăă'Filename of the clipped fileăBewaar$ = "c:\qb45\pictures\test.dat"ăăOPEN Bewaar$ FOR INPUT AS #1ăINPUT #1, PicSizeăREDIM Image(1 TO PicSize)  AS INTEGERăFOR t = 1 TO PicSizeă        INPUT #1, Image(t)ăNEXT tăCLOSE #1ăPUT (1, 1), ImageăThomas Nyberg                  BMP LOADER/MAKER               thomas.nyberg@usa.net          12-19-97 (09:36)       QB, PDS                197  5906     BMPLOAD.BAS '-----------------------Bmp loader/maker by Thomas Nyberg---------------------ăă'A little program that loads a BMP-file in less than 0.2 seconds, thenă'you can save the image into a new BMP-file and that takes about 0.2s!!ă'It doesn't use any assembler at all, instead it uses interrupts, so ifă'you don't know what that is then don't try to modify the code.ăă'This program doesn't check the format of the BMP-file because I thinkă'it's alot easier to read and understand it if no format check is done.ă'If you want that it's not hard to write it yourself.ă'Because of this the BMP-file must be 320*200*256, there shouldn't beă'difficult to modify the code so that it opens all kinds of sizes.ă'If I get the time the next few weeks (alot of homework, you know:) I willă'do that myself.ăă'The format of the BMP-files has been taken from a file called BMP.BAS,ă'unfortunatly I have lost the authors name but I give all credits for theă'format of the headers to him (or her).ăă'If you use parts or the whole program or ideas based on this code pleaseă'give me credits. This program may not be used in any kind of non-freewareă'programs without my knowledge (If you or anyone else earns money sellingă'programs that uses parts or the whole program or ideas based on this code)ăă'It should be very easy to change this program so that you can open TGA oră'any other format saved like the BMP (64000 pixels in a row).ăă'If you have any questions or improvements on this code please send them to:ă' thomas.nyberg@usa.netăă'IMPORTANT!!ă'This program is used at your own risc. I, Thomas Nyberg, does not takeă'any responsibility if any information, data, files or any other kindă'of software or hardware is damaged or destroyed in any way.ă'I can't garantee that this code is safe but I think it should be, thereforeă'beginners should not try to modify or use this code in their programs.ăă'Please excuse my english, it's very late :)ă'-----------------------------------------------------------------------------ăăDECLARE SUB savebmp (filename$)ăDECLARE SUB loadbmp (filename$)ăă'$INCLUDE: 'qb.bi'  'Needs QB.QLB/LIB to be loadedăă'The header:ăăTYPE bmpinfo            'what it should say for a 320*200*256 bmpă	bm AS STRING * 2      'bmă	size AS LONG          'wid*hei+1078= 65078ă	r1 AS INTEGER         '0ă	r2 AS INTEGER         '0ă	offsdata AS LONG      '1078ă	hsize AS LONG         '40ă	wid AS LONG           '320ă	hei AS LONG           '200ă	planes AS INTEGER     '1ă	bpp AS INTEGER        '8ă	comp AS LONG          '0ă	isize AS LONG         '64000ă	xpm AS LONG           '3790ă	ypm AS LONG           '3780ă	colus AS LONG         '0ă	impcol AS LONG        '0ă	pal AS STRING * 1024  'blue, green, red, 0ăEND TYPEăăDIM SHARED bmpheader AS bmpinfoăDIM SHARED regs AS RegTypeXăăSCREEN 13ăăt = TIMER 'Time how long it takesăloadbmp "boris.bmp"  'loads a BMP-fileă'savebmp "test.bmp"  'Saves a BMP-fileăPRINT TIMER - t'If you can't figure this one out...ăăDEFINT A-ZăSUB loadbmp (filename$)ăă'Loads the headerăOPEN filename$ FOR BINARY AS #1ăGET #1, , bmpheader  'read ităCLOSE #1ăă'Loads the paletteăOUT &H3C8, 0ăFOR I = 1 TO 1024 STEP 4ă	b% = ASC(MID$(bmpheader.pal, I, 1)) \ 4  'blueă	g% = ASC(MID$(bmpheader.pal, I + 1, 1)) \ 4  'greenă	r% = ASC(MID$(bmpheader.pal, I + 2, 1)) \ 4  'redă	OUT &H3C9, r%ă	OUT &H3C9, g%ă	OUT &H3C9, b%ăNEXTăăfilename$ = filename$ + CHR$(0) 'filename must be ASCIIZ (zero terminated)ăă'opens the fileăregs.ax = &H3D00ăregs.ds = VARSEG(filename$) 'segment of nameăregs.dx = SADD(filename$)  'offset of nameăCALL INTERRUPTX(&H21, regs, regs)ăregs.bx = regs.ax 'filehandleăă'move filepointer to &h436 in the fileăregs.ax = &H4200ăregs.cx = 0ăregs.dx = &H436ăCALL INTERRUPTX(&H21, regs, regs)ăă'Read and display the fileăăFOR y = bmpheader.hei - 1 TO 0 STEP -1ă	regs.ax = &H3F00ă	regs.cx = 320  'widht of the fileă	regs.ds = &HA000  'screen 13's segmentă	regs.dx = VAL("&H" + HEX$(y * 320&))  'Has to do wiht QB integersă	CALL INTERRUPTX(&H21, regs, regs)ăNEXTăă'close ităregs.ax = &H3E00ăCALL INTERRUPTX(&H21, regs, regs)ăăfilename$ = LEFT$(filename$, LEN(filename$) - 1)  'resore the filenameăEND SUBăăSUB savebmp (filename$)ă'reads the paletteăOUT &H3C7, 0ăFOR I% = 0 TO 255ă	r% = INP(&H3C9) * 4ă	g% = INP(&H3C9) * 4ă	b% = INP(&H3C9) * 4ă	a$ = a$ + CHR$(b%) + CHR$(g%) + CHR$(r%) + CHR$(0)ăNEXTăă'creates the headerăbmpheader.bm = "BM"ăbmpheader.size = 65078ăbmpheader.r1 = 0ăbmpheader.r2 = 0ăbmpheader.offsdata = 1078ăbmpheader.hsize = 40ăbmpheader.wid = 320ăbmpheader.hei = 200ăbmpheader.planes = 1ăbmpheader.bpp = 8ăbmpheader.comp = 0ăbmpheader.isize = 64000ăbmpheader.xpm = 3790ăbmpheader.ypm = 3780ăbmpheader.colus = 0ăbmpheader.impcol = 0ăbmpheader.pal = a$ăă'saves the headerăOPEN filename$ FOR BINARY AS #1ăIF LOF(1) > 0 THEN 'file already există	CLOSE #1ă	KILL filename$  'delete the file and reopen ită	OPEN filename$ FOR BINARY AS #1ăEND IFăPUT #1, , bmpheader 'write the headerăCLOSE #1ăăfilename$ = filename$ + CHR$(0) 'filename must be ASCIIZ (zero terminated)ăă'opens the fileăregs.ax = &H3D01ăregs.ds = VARSEG(filename$)  'segment of filenameăregs.dx = SADD(filename$) 'offset of filenameăCALL INTERRUPTX(&H21, regs, regs)ăregs.bx = regs.ax 'filehandleăă'moves the filepointerăregs.ax = &H4200ăregs.cx = 0ăregs.dx = &H436ăCALL INTERRUPTX(&H21, regs, regs)ăă'saves the screen into the fileăFOR y% = 199 TO 0 STEP -1ă	regs.ax = &H4000ă	regs.cx = 320  'number of bytes to writeă	regs.ds = &HA000  'screen 13's segmentă	regs.dx = VAL("&H" + HEX$(y% * 320&)) 'Has to do with QB integersă	CALL INTERRUPTX(&H21, regs, regs)ăNEXTăă'close the fileăregs.ax = &H3E00ăCALL INTERRUPTX(&H21, regs, regs)ăăfilename$ = LEFT$(filename$, LEN(filename$) - 1)  'restore the filenameăEND SUBăAlexander Meyer                COLORFUL BOUNCING LINES        Meyer.Karl@t-online.de         12-20-97 (10:33)       QB, QBasic, PDS        57   1171     LINEBOUN.BAS'                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' LINEBOUN.BAS -- Written in QuickBasic 4.5ă'           ă' Name: Colourful bouning linesă' Author: Alexander Meyeră' Date: 11-23-1997ă' Description: This shows four bouncing lines in VGAă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăSCREEN 13                 'VGA 320 x 200ăăDIM x(1 TO 4)ăDIM y(1 TO 4)ăDIM XDir(1 TO 4)ăDIM YDir(1 TO 4)ăăx(1) = 0: y(1) = 0ăx(2) = 319: y(2) = 199ăx(3) = 0: y(3) = 199ăx(4) = 319: y(4) = 0ăăDOăăFOR a = 1 TO 4     'For all four linesăăIF x(a) >= 319 THEN XDir(a) = 1ăIF x(a) <= 1 THEN XDir(a) = 0ăIF y(a) >= 199 THEN YDir(a) = 1ăIF y(a) <= 1 THEN YDir(a) = 0ăăIF XDir(a) = 0 THENă  x(a) = x(a) + 1ăELSEă  x(a) = x(a) - 1ăEND IFăIF YDir(a) = 0 THENă  y(a) = y(a) + 1ăELSEă  y(a) = y(a) - 1ăEND IFăăNEXT aăăc = c + 1ăIF c = 248 THEN c = 1ăIF INKEY$ <> "" THEN ENDăPSET (x(1), y(1)), c          'Draw linesăPSET (x(2), y(2)), căPSET (x(3), y(3)), căPSET (x(4), y(4)), căăLOOPăăENDăAlexander Meyer                WINDSCREEN WIPER               Meyer.Karl@t-online.de         12-20-97 (10:33)       QB, QBasic, PDS        42   985      WIPER.BAS   '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' WIPER.BAS -- Written in QuickBasic 4.5ă'               ă' Name: Windscreen wiperă' Author: Alexander Meyeră' Date: 11-23-1997ă' Description: This looks like a windscreen wiper from a cară'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăDIM Wischer(640)ăDIM KeinWischer(640)ăăSCREEN 13    '--> VGA 320 x 200ăCLSăRANDOMIZE TIMERăăLINE (5, 1)-(1, 480), 15ăGET (1, 1)-(6, 199), Wischer        'Get wiperăăDOă ă  IF Richtung = 0 THENă    x = x + 1ă    IF x = 315 THEN Richtung = 1ă  END IFă  IF Richtung = 1 THENă    x = x - 1ă    IF x = 2 THEN Richtung = 0ă  END IFă ă  PUT (x, 1), Wischer, PSET         'Show wiperăă  PX = INT(RND * 633 + 2)           'Show raindropsă  PY = INT(RND * 479 + 1)ă  PSET (PX, PY), 9ăăLOOP UNTIL INKEY$ <> ""ăăENDăAlexander Meyer                SIN/COS/ATN/SQR CIRCLES        Meyer.Karl@t-online.de         12-20-97 (10:33)       QB, QBasic, PDS        95   2793     SINCOSC.BAS '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' SINCOSC.BAS -- Written in QuickBasic 4.5ă'         ă' Name: SIN/COS/ATN/SQR circlesă' Author: Alexander Meyeră' Date: 11-23-1997ă' Description: Circles with sine (SIN), cosine (COS),ă'              arcustangent (ATN) and square root (SQR)ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăSCREEN 7ăăRANDOMIZE TIMERă'*****  Kreis zeichnen  *****ăNext0:ăCLSăDOăFOR Winkel = 0 TO 3.18 STEP .01ă CS% = 50 * COS(Winkel)ă SN% = 50 * SIN(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN GOTO Next1ăNEXT WinkelăLOOPăNext1:ăCLSăDOăFOR Winkel = 0 TO 3.18 STEP .01ă CS% = 50 * ATN(Winkel)ă SN% = 50 * ATN(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN GOTO Next2ăNEXT WinkelăLOOPăNext2:ăCLSăDOăFOR Winkel = 0 TO 4.8 STEP .01ă CS% = 50 * ATN(Winkel)ă SN% = 50 * COS(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN GOTO Next3ăNEXT WinkelăLOOPăNext3:ăCLSăDOăFOR Winkel = 0 TO 6.5 STEP .01ă CS% = 50 * ATN(Winkel)ă SN% = 50 * SIN(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN GOTO Next4ăNEXT WinkelăLOOPăNext4:ăCLSăDOăFOR Winkel = 0 TO 3.18 STEP .01ă CS% = 50 * SIN(Winkel)ă SN% = 50 * SQR(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN GOTO Next5ăNEXT WinkelăLOOPăNext5:ăCLSăDOăFOR Winkel = 0 TO 3.18 STEP .01ă CS% = 50 * SIN(Winkel)ă SN% = 50 * SIN(Winkel)ă CIRCLE (100 + CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 + SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 + CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă CIRCLE (100 - CS%, 100 - SN%), 20, INT(RND * 14 + 1)ă IF INKEY$ <> "" THEN ENDăNEXT WinkelăLOOPăRichard Colletta               RDRAWPRO (LIKE TURTLE DRAW)    riley007@hotmail.com           12-19-97 (17:34)       QB, QBasic, PDS        120  5123     RDRAWPRO.BAS'RDRAWPROă'EMAIL ME!ă'Send me your cool programs!ă'Please read the RDRAWPRO.TXT file!ă'Draw a gridă'  FOR X = 110 TO 500 STEP GridSizeă'    LINE (X, 2)-(X, 386), GridColră'    LINE (110, X - 108)-(494, X - 108), GridColră'  NEXTăCHDIR "c:\tools\grafix"ăSCREEN 0: CLSăCOLOR 13: PRINT "RDRAW FOR QBASIC by Richard Colletta 1997"ăCOLOR 15: INPUT "PICTURE NAME: ", file$ăfile$ = file$ + ".Bas"ăOPEN file$ FOR OUTPUT AS #1ăPRINT #1, "'RDRAW FOR QBASIC by Richard Colletta 1997"ăPRINT #1, "'FILE: "; file$ăPRINT #1, "'Use Dim, Get, and Put"ăPRINT #1, "'For help read RDRAW.DOC"ăPRINT #1, "'EMAIL ME AT RILEY007@HOTMAIL.COM"ăPRINT #1, "SCREEN 13"ă1ăCLSăCOLOR 13: PRINT "RDRAW MENU"ăCOLOR 15: PRINT "SELECT OPTION"ăCOLOR 9: PRINT "1) DRAW"ăCOLOR 9: PRINT "2) HELP"ăCOLOR 9: PRINT "3) QUIT"ă2 ans$ = INKEY$ăIF ans$ = "1" THEN GOTO rdrawăIF ans$ = "2" THEN GOSUB help: CLS : GOTO 1ăIF ans$ = "3" THEN COLOR 13: PRINT "BYE!": COLOR 9: PRINT "EMAIL ME AT RILEY007@HOTMAIL.COM": ENDăGOTO 2ă'Main programărdraw:ăCLS : SCREEN 13ăDIM box(1 TO 3000) AS INTEGERăFOR x = 1 TO 70ăPSET (x, 1)ăNEXTăFOR y = 1 TO 70ăPSET (x, y)ăNEXTăFOR x = 1 TO 70ăPSET (x, 70)ăNEXTăFOR y = 1 TO 70ăPSET (1, y)ăNEXTăGET (1, 1)-(72, 72), boxăCLSăDIM dot(0 TO 200) AS INTEGERăPSET (2, 2), 8: PSET (3, 3), 14: PSET (4, 4), 14: PSET (5, 5), 14: PSET (6, 6), 13ăGET (1, 1)-(10, 10), dotăCLSăx = 100: y = 100ădx = 100: dy = 100ăcol = 1ăPUT (x, y), dotăpcol = 1ăbcol = 1ăcrad = 1ă3ăLOCATE 22, 1: COLOR col: PRINT x; y; col: 'COLOR pcol: PRINT "P"; pcol:ăLOCATE 21, 1: COLOR bcol: PRINT "B"; bcol: LOCATE 21, 15: COLOR pcol: PRINT "P"; pcolăLOCATE 21, 7: COLOR 15: PRINT "C"; cradăans$ = INKEY$ăIF ans$ = "u" AND crad > 0 OR ans$ = "U" AND crad > 0 THEN crad = crad - 1:ăIF ans$ = "i" OR ans$ = "I" THEN crad = crad + 1ăIF ans$ = "p" AND bcol < 255 OR ans$ = "P" AND bcol < 255 THEN bcol = bcol + 1ăIF ans$ = "o" AND bcol > 0 OR ans$ = "O" AND bcol > 0 THEN bcol = bcol - 1ăIF ans$ = "p" AND bcol = 255 OR ans$ = "P" AND bcol = 255 THEN bcol = 0ăIF ans$ = "o" AND bcol = 0 OR ans$ = "O" AND bcol = 0 THEN bcol = 255ăIF ans$ = "]" AND pcol < 255 THEN pcol = pcol + 1ăIF ans$ = "[" AND pcol > 0 THEN pcol = pcol - 1ăIF ans$ = "]" AND pcol = 255 THEN pcol = 0ăIF ans$ = "[" AND pcol = 0 THEN pcol = 255ăIF ans$ = "+" AND col = 255 THEN col = 0: newcol = 1ăIF ans$ = "-" AND col = 0 THEN col = 255: newcol = 1ăIF ans$ = "+" AND col < 255 THEN col = col + 1ăIF ans$ = "-" AND col > 0 THEN col = col - 1ăIF ans$ = "8" THEN GOSUB dot: y = y - 1: PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), col:ăIF ans$ = "2" THEN GOSUB dot: y = y + 1:   PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "4" THEN GOSUB dot: x = x - 1:  PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "6" THEN GOSUB dot: x = x + 1: PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "9" THEN GOSUB dot: x = x + 1: y = y - 1: PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "3" THEN GOSUB dot: x = x + 1: y = y + 1: PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "1" THEN GOSUB dot: x = x - 1: y = y + 1:  PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "7" THEN GOSUB dot: x = x - 1: y = y - 1:  PUT (x, y), dot: PRINT #1, "PSET ("; x; ","; y; ")"; ","; col: PSET (x, y), colăIF ans$ = "w" OR ans$ = "W" THEN GOSUB dot: y = y - 1: PUT (x, y), dotăIF ans$ = "x" OR ans$ = "X" THEN GOSUB dot: y = y + 1:  PUT (x, y), dotăIF ans$ = "a" OR ans$ = "A" THEN GOSUB dot: x = x - 1:  PUT (x, y), dotăIF ans$ = "d" OR ans$ = "D" THEN GOSUB dot: x = x + 1:  PUT (x, y), dotăIF ans$ = "5" THEN PAINT (x, y), pcol, bcol: PRINT #1, "paint ("; x; ","; y; ")"; ","; pcol; ","; bcol: PUT (x, y), dot:ăIF ans$ = "f" OR ans$ = "F" THEN PUT (1, 1), box: PUT (73, 1), box: PUT (145, 1), box: PUT (217, 1), box: PUT (1, 72), box: PUT (73, 72), box: PUT (145, 72), box: PUT (217, 72), boxăIF ans$ = "C" OR ans$ = "c" THEN CIRCLE (x, y), crad, col: PRINT #1, "CIRCLE " + "("; x; ","; y; ")"; ","; crad; ","; colăIF ans$ = CHR$(27) THEN COLOR 13: PRINT "BYE!": COLOR 9: PRINT "EMAIL ME AT RILEY007@HOTMAIL.COM": ENDăGOTO 3ăhelp:ăCLS : SCREEN 0ăCOLOR 13: PRINT "RDRAW HELP"ăCOLOR 15: PRINT "(+/-) These are used to change color"ăPRINT "Use number pad to draw. NumLock should be on."ăPRINT "(*) This is used to toggle between move mode and draw mode"ăPRINT "To move without drawing controls are:"ăPRINT "W: Up X: Down A:left D:right"ăPRINT "Toggle paint fill color: [ , ]"ăPRINT "Toggle paint border color: O, P"ăPRINT "Press U to decrease circle radius."ăPRINT "Press I to increase circle radius."ăPRINT "Press C to make a circle"ăPRINT "Press F to toggle sprite frames on/off."ăPRINT "Press escape to quit. Saving is automatic."ăPRINT "Press any key to exit help"ăPRINT "Richard Colletta 1997"ăSLEEPăRETURNădot:ăPUT (x, y), dotăRETURNăPetter Holmberg                FLOOD FILL ROUTINE             petter.holmberg@usa.net        12-23-97 (00:57)       QB, QBasic, PDS        225  5468     FFILL.BAS   ' SCREEN 13 flood fill routine by Petter Holmberg, -97:ăă'$DYNAMICăăTYPE pixtypeă  x AS INTEGERă  y AS INTEGERăEND TYPEăăDECLARE SUB FloodFill (x%, y%, col%)ăăCLSăSCREEN 0ăWIDTH 80, 25ăăPRINT "SCREEN 13 flood fill routine by Petter Holmberg, -97:"ăPRINTăPRINT "Finally! The routine everyone have been waiting for: A fully functional non-"ăPRINT "recursive flood fill routine for SCREEN 13!"ăPRINTăPRINT "This routine is similar to the PAINT statement, it will fill an arbitraty area"ăPRINT "with any color. but unlike PAINT, who fills the area until it hits a certain"ăPRINT "bordercolor, this routine will stop filling when it hits any other color than"ăPRINT "the one being filled. This is the kind of flood fill routine you would like"ăPRINT "to have in a paint program. I'm sure many of you know what I'm talking about."ăPRINT "The routine is a little slower than PAINT in large areas, but in complex"ăPRINT "images it will actually be faster than PAINT. This routine is small, doesn't"ăPRINT "need much memory and works for all images. You'll never use PAINT again! :-)"ăPRINTăPRINT "You may use this routine in any way you like, as long as you give me credits!"ăPRINT "If you use it in a program of yours, I would be glad if you sent me a mail and"ăPRINT "told me about it. my email address is: petter.holmberg@usa.net"ăPRINTăPRINT "Now enjoy the demonstration of this routine..."ăPRINTăPRINT "Special thanks to Thomas Nyberg for advice and testing!"ăăDO: LOOP WHILE INKEY$ = ""ăăSCREEN 13ăăLOCATE 1, 1ăPRINT "In the beginning, there was only PAINT! "ăPRINT "     Good enough for most images...     "ăăCIRCLE (159, 99), 100, 15ăăDO: LOOP WHILE INKEY$ = ""ăăPAINT (159, 99), 14, 15ăăDO: LOOP WHILE INKEY$ = ""ăăLOCATE 24, 1ăPRINT "         ...but far from all!!!         ";ăăDO: LOOP WHILE INKEY$ = ""ăăPAINT (159, 99), 0, 15ăLINE (65, 23)-(253, 175), 12, BăăDO: LOOP WHILE INKEY$ = ""ăăPAINT (159, 99), 14, 15ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăLOCATE 1, 1ăPRINT "  Then came this flood fill routine...  "ăCIRCLE (159, 99), 100, 15ăLINE (65, 23)-(253, 175), 12, BăăDO: LOOP WHILE INKEY$ = ""ăăFloodFill 159, 99, 14ăLOCATE 24, 1ăPRINT "...and there was never more a problem!!!";ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăFOR y% = 0 TO 199 STEP 2ă   FOR x% = 0 TO 319 STEP 2ă      PSET (x%, y%)ă   NEXT x%ăNEXT y%ăLOCATE 1, 1ăPRINT "With the usual PAINT..."ăPAINT (159, 99), 6, 15ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăFOR y% = 0 TO 199 STEP 2ă   FOR x% = 0 TO 319 STEP 2ă      PSET (x%, y%)ă   NEXT x%ăNEXT y%ăLOCATE 1, 1ăPRINT "With this flood fill routine..."ăFloodFill 159, 99, 9ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăx1% = 4ăx2% = 319ăy1% = 0ăy2% = 199ăFOR i% = 1 TO 24ă   LINE (x1% - 4, y1%)-(x2%, y1%), 7ă   LINE (x2%, y1%)-(x2%, y2%), 7ă   LINE (x2%, y2%)-(x1%, y2%), 8ă   LINE (x1%, y2%)-(x1%, y1% + 4), 8ă   x1% = x1% + 4ă   x2% = x2% - 4ă   y1% = y1% + 4ă   y2% = y2% - 4ăNEXT i%ăLOCATE 13, 16ăPRINT "Watch this!";ăLINE (130, 101)-(131, 101), 12ăFloodFill 199, 99, 12ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăPRINT "The final challange! The following image"ăPRINT "is too complex for PAINT to fill. With"ăPRINT "PAINT, you will run out of memory when"ăPRINT "trying to fill it."ăDO: LOOP WHILE INKEY$ = ""ăăCLSăFOR y% = 0 TO 199ă   IF y% AND 1 THENă    FOR x% = 2 TO 319 STEP 4ă       IF POINT(x%, y%) = 0 THEN PSET (x%, y%), 7ă    NEXT x%ă   ELSEă    FOR x% = 0 TO 319 STEP 4ă       IF POINT(x%, y%) = 0 THEN PSET (x%, y%), 7ă    NEXT x%ă   END IFăNEXT y%ăLOCATE 1, 1ăăDO: LOOP WHILE INKEY$ = ""ăăFloodFill 159, 99, 15ăăLOCATE 12, 13ăPRINT "              "ăLOCATE 13, 13ăPRINT " Satisfied??? "ăLOCATE 14, 13ăPRINT "              "ăăREM $STATICăSUB FloodFill (x%, y%, col%)ăăDIM pixdata(1278) AS pixtypeăăbcol% = POINT(x%, y%)ăăfirstentry% = 0ălastentry% = 1ăăDOăă   fx% = pixdata(firstentry%).xă   fy% = pixdata(firstentry%).yăă   DOă      IF POINT(x% + fx%, y% + fy%) = bcol% THENă       PSET (x% + fx%, y% + fy%), col%ă       IF POINT(x% + fx%, y% + fy% - 1) = bcol% THENă        pixdata(lastentry%).x = fx%ă        pixdata(lastentry%).y = fy% - 1ă        lastentry% = lastentry% + 1ă        IF lastentry% = 1279 THEN lastentry% = 0ă       END IFă       IF POINT(x% + fx%, y% + fy% + 1) = bcol% THENă        pixdata(lastentry%).x = fx%ă        pixdata(lastentry%).y = fy% + 1ă        lastentry% = lastentry% + 1ă        IF lastentry% = 1279 THEN lastentry% = 0ă       END IFă      ELSEă       EXIT DOă      END IFă      fx% = fx% + 1ă   LOOPăă   fx% = pixdata(firstentry%).x - 1ă   fy% = pixdata(firstentry%).yăă   DOă      IF POINT(x% + fx%, y% + fy%) = bcol% THENă       PSET (x% + fx%, y% + fy%), col%ă       IF POINT(x% + fx%, y% + fy% - 1) = bcol% THENă        pixdata(lastentry%).x = fx%ă        pixdata(lastentry%).y = fy% - 1ă        lastentry% = lastentry% + 1ă        IF lastentry% = 1279 THEN lastentry% = 0ă       END IFă       IF POINT(x% + fx%, y% + fy% + 1) = bcol% THENă        pixdata(lastentry%).x = fx%ă        pixdata(lastentry%).y = fy% + 1ă        lastentry% = lastentry% + 1ă        IF lastentry% = 1279 THEN lastentry% = 0ă       END IFă      ELSEă       EXIT DOă      END IFă      fx% = fx% - 1ă   LOOPăă   firstentry% = firstentry% + 1ă   IF firstentry% = 1279 THEN firstentry% = 0ăăLOOP UNTIL firstentry% = lastentry%ăăEND SUBăSami Kyostila                  3D TEXTURED POLYGON ENGINE V2.0hiteck@freenet.hut.fi          12-24-97 (15:25)       QB, QBasic, PDS        1393 36384    3DPOLY.BAS  'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'         3D Polygon Engine v2.0 (C) Sami Ky”stil„ 1997ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'    Comments & questions can be sent to hiteck@freenet.hut.fiă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'ă' Here's a new version of my previous 3d engine. Actually it's almost aă' complete rewrite, with tons of new features. Currently there are 4ă' drawing modes:ă'ă'   + Z-Shaded Wireframeă'   + Z-Gouraud shaded and filledă'   + Z-Shaded Flat, ASM-Filledă'   + Z-Gouraud shaded and texturemappedă'ă' These drawing modes can be selected with the F1-F4 keys. In additionă' there are also 4 animated textures:ă'ă'   + Fire - Looks very kewlă'   + BumpMap - Nice and fast bumpmapă'   + Panning textures - Looks like flowing green oozeă'   + Sinus plasma - An animated plasmaă'ă' These can be toggled on/off with the F9-F12 keys. NOTE: After you haveă' selected an animated texture, you must press that same key again toă' disable it.ă'ă' The object is rotated with the arrow keys and the plus/minus keys. Zoomă' in/out with the A/Z keys. The object can be panned with the J/K/L/I keys.ă' 5 stops movement, and 0 resets the object to the starting position.ă' You can also rotate the object with the mouse by pressing the left mouseă' button.ă'ă' All of the drawing modes are shaded, and the ambient lighting level cană' be varied with the F5/F6 keys. F7 toggles point number display on/offă' F9 toggles FPS display on/off (this slows the engine down a bit, you cană' also see the FPS in the exit screen)ă'ă' If the texture mapping seems too slow, you can adjust the texture sizeă' by changing the TSize-constant below.ă'ă' See the end of the program to find out how to make your own objectsă' If you want to save you objects to a file, insert the followingă' statement to the SUB TheEnd:ă'ă'   SaveObject "filename.dat"ă'ă' When you press ESC, the object is saved. To load a saved object, use theă' SUB LoadObjectă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' You may use any of this code freely in you own programs, as long as youă' mention my name somewhere in you program.ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăăDEFINT A-Ză'$DYNAMICăDECLARE SUB HiiriLue (vasen%, oikea%, keski%, x%, y%)ăDECLARE SUB Hiiriajuri (ax%, bx%, cx%, dx%)ăDECLARE FUNCTION Hiiritarkista% ()ăDECLARE SUB LoadObject (File$)ăDECLARE SUB SaveObject (File$)ăDECLARE SUB HandleKeys ()ăDECLARE SUB TheEnd ()ăDECLARE SUB RotatePoints ()ăDECLARE SUB ColPrint (Text$)ăDECLARE FUNCTION ShadeName$ (Model%)ăDECLARE SUB Separator (Col&, Char$)ăDECLARE SUB MakePalette ()ăDECLARE SUB MakeFirePalette (MaxColors%)ăDECLARE SUB MakeTexture ()ăDECLARE SUB Switch (Var%, Value1%, Value2%)ăDECLARE SUB MakeLight ()ăDECLARE SUB Fillchar (segment%, offset%, value%, bytes%)ăDECLARE SUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăDECLARE SUB t3d2d (x%, y%, z%, SX%, SY%)ăDECLARE SUB RotatePoint (x%, y%, z%, Rx%, Ry%, Rz%, Nx%, Ny%, Nz%)ăDECLARE SUB DrawPoly (x%, y%, x2%, y2%, x3%, y3%, P1%, P2%, P3%, Num)ăDECLARE SUB DrawLine (x%, y%, x2%, y2%, Col1%, Col2%, Tx1, Ty1, Tx2, Ty2)ăDEFINT A-ZăăTYPE Filltype           'Buffer to hold polygon dataă  x1 AS INTEGERă  x2 AS INTEGERă  Col1 AS INTEGERă  Col2 AS INTEGERă  Tx AS INTEGERă  Ty AS INTEGERă  Tx2 AS INTEGERă  Ty2 AS INTEGERăEND TYPEăăTYPE PointTypeă  x3 AS INTEGER       'Original Xă  y3 AS INTEGER       'Original Yă  z3 AS INTEGER       'Original Ză  x AS INTEGER        'Screen Xă  y AS INTEGER        'Screen Yă  Nx AS INTEGER       'New Xă  Ny AS INTEGER       'New Yă  Nz AS INTEGER       'New Ză  Shade AS INTEGER    'ShadeăEND TYPEăăăTYPE Polygontypeă  P1 AS INTEGER          'Point 1ă  P2 AS INTEGER          'Point 2ă  P3 AS INTEGER          'Point 3ă  Col AS INTEGER         'Coloră  Culled AS INTEGER      'Culled/Not Culledă  AvgZ AS INTEGERăEND TYPEăăăă'----------------------------------------------------------------------------ă'                           Constantsă'----------------------------------------------------------------------------ăCONST True = 0ăCONST False = NOT TrueăCONST PI = 22 / 7ăCONST TSize = 40ăCONST LSize = TSize \ 2ăăDIM SHARED Polygons, PointsăDIM SHARED Sine(360) AS INTEGER     'SIN tableăDIM SHARED Cosine(360) AS INTEGER   'COS tableăDIM SHARED Fill(199) AS Filltype    'Polygon data bufferăDIM SHARED Upper AS INTEGERăDIM SHARED Lower AS INTEGERăDIM SHARED SrX AS INTEGERăDIM SHARED SrY AS INTEGERăDIM SHARED Zoom AS INTEGERăDIM SHARED Buffer(319, 199) AS STRING * 1ăDIM SHARED ShadingModel AS INTEGERăDIM SHARED Ambient AS INTEGERăDIM SHARED Mx, MyăDIM SHARED Fire AS INTEGERăDIM SHARED Anim AS INTEGERăDIM SHARED AnimType AS INTEGERăDIM SHARED l(0 TO LSize, 0 TO LSize) AS INTEGERăDIM SHARED MaxPoints, MaxPolygonsăDIM SHARED Xr AS INTEGERăDIM SHARED Yr AS INTEGERăDIM SHARED Zr AS INTEGERăDIM SHARED Vx, Vy, VzăDIM SHARED FDisp, PDispăDIM SHARED FPS&ăDIM SHARED WaveSide1, WaveSide2, WaveSide3ăDIM SHARED R1, R2, R3ăăFOR i = 0 TO 360ă  Sine(i) = SIN(i * PI / 180) * 1024ă  Cosine(i) = COS(i * PI / 180) * 1024ăNEXTăăăSrX = 320 \ 2     'Screen centerăSrY = 200 \ 2ăăăZoom = 700        'Initial valuesăXr = 200ăYr = 315ăZr = 100ăMx = 0ăMy = 0ăAmbient = 10ăPDisp = FalseăFDisp = FalseăFire = FalseăShadingModel = 2ăăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1ăPRINT STRING$(80, " ")ăLOCATE 1, 1ăPRINT "             3D Polygon Engine v2.0 by Sami Ky”stil„ 1997"ăCOLOR 3, 0ăPRINTăăRESTORE ObjectDataăREAD MaxPointsăREAD MaxPolygonsăDIM SHARED Pnt(1 TO MaxPoints) AS PointTypeăDIM SHARED Poly(1 TO MaxPolygons) AS PolygontypeăDIM SHARED Pointer(1 TO MaxPolygons)ăDIM SHARED Txt(-1 TO TSize + 1, -1 TO TSize + 1) AS INTEGERăDIM SHARED ASMMemCopy$ăDIM SHARED ASMFillChar$ăăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10)ăasm$ = asm$ + CHR$(142) + CHR$(192)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(126) + CHR$(12)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(243)ăasm$ = asm$ + CHR$(164)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăASMMemCopy$ = asm$ăăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(139) + CHR$(86) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(10)ăasm$ = asm$ + CHR$(136) + CHR$(23)ăasm$ = asm$ + CHR$(67)ăasm$ = asm$ + CHR$(226) + CHR$(251)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăASMFillChar$ = asm$ăăăPRINT "Number of points:", , MaxPointsăPRINT "Number of polygons:", , MaxPolygonsăPRINT "Starting position (XYZ)", , Xr; Yr; ZrăPRINT "Texture size: ", , TSize; "x"; TSizeăPRINT "Initial shading model:", , " "; ShadeName$(ShadingModel)ăPRINT "Ambient lighting level:", , AmbientăSeparator 1, "Ä"ăCOLOR 7ăăPRINT " ţ Reading points...";ăăFOR i = 1 TO MaxPointsă  READ Pnt(i).x3ă  READ Pnt(i).y3ă  READ Pnt(i).z3ăNEXTăPRINT "Done"ăăPRINT " ţ Reading polygons...";ăFOR i = 1 TO MaxPolygonsă  READ Poly(i).P1ă  READ Poly(i).P2ă  READ Poly(i).P3ă  READ Poly(i).Colă  Poly(i).Col = Poly(i).Col * 64ăNEXTăPRINT "Done"ăăPRINT " ţ Generating texture...";ăMakeTextureăPRINT "Done"ăPRINT " ţ Initializing mouse...";ăăRESTORE MouseDataăDIM SHARED hiiri$ăhiiri$ = SPACE$(57)ăFOR i% = 1 TO 57ă  READ a$ă  h$ = CHR$(VAL("&H" + a$))ă  MID$(hiiri$, i%, 1) = h$ăNEXT i%ănapit% = Hiiritarkista%ăIF (napit% = 0) THENă  PRINT "Mouse not found!"ă  MouseNotFound = 1ăELSEă  PRINT "Done      (Press left MButton to rotate)"ăEND IFăăăPRINTăSeparator 3, "Ä"ăColPrint "   &FF1&7 - Wireframe  &FF2&7 - Z-Gouraud  &FF3&7 - Z-Flat  &FF4&7 - Textured"ăPRINTăColPrint "   &FArrows/-/+&7 - Rotate  &FA/Z&7 - Zoom In/Out  &FJ/K/L/I&7 - Pan  &F5&7 - Stop &F0&7 - Reset"ăPRINTăColPrint "   &FF5&7/&FF6&7 - Adjust ambient lighting level "ăPRINTăColPrint "   &FF7&7 - Point display toggle"ăPRINTăColPrint "   &FF8&7 - Frame rate toggle"ăPRINTăColPrint "   &FF9&7 - Animated texture 1 - &EFire"ăPRINTăColPrint "  &FF10&7 - Animated texture 2 - &EBumpmap"ăPRINTăColPrint "  &FF11&7 - Animated texture 3 - &ETexture panning"ăPRINTăColPrint "  &FF12&7 - Animated texture 4 - &EPlasma"ăMakeLightăDO: LOOP UNTIL INKEY$ <> ""ăăSCREEN 13: CLSăMakePaletteăăCOLOR 255ăăDIM Temp(0 TO TSize, 0 TO TSize) AS INTEGERăăFOR y& = 0 TO TSizeă  FOR x& = 0 TO TSizeă    Temp(x&, y&) = Txt(x&, y&)ă  NEXTăNEXTăăDIM Cosinus(160) AS INTEGERăDIM Rand(255) AS INTEGERăăFOR c = 0 TO 160ă  Cosinus(c) = COS(c * 2 * PI / 80) * 16 + 16ăNEXTăăFOR c = 0 TO 255ă  Rand(c) = INT(RND * 4) + 1ăNEXTăăXAdd& = 1ăYAdd& = 1ăAnim = FalseăăDOă  RotatePointsăă  FOR i& = 1 TO MaxPolygonsă    Poly(i&).AvgZ = (Pnt(Poly(i&).P1).Nz + Pnt(Poly(i&).P2).Nz + Pnt(Poly(i&).P3).Nz) \ 3ă    Pointer(i&) = i&ă    Poly(i&).Culled = Falseă  NEXTăă  FOR i& = 1 TO MaxPolygonsă    coord1 = Poly(i&).P1ă    coord2 = Poly(i&).P2ă    coord3 = Poly(i&).P3ăă    z1& = Pnt(coord1).Nză    z2& = Pnt(coord2).Nză    z3& = Pnt(coord3).Nzăă    x1& = Pnt(coord1).Nxă    x2& = Pnt(coord2).Nxă    x3& = Pnt(coord3).Nxăă    y1& = Pnt(coord1).Nyă    y2& = Pnt(coord2).Nyă    y3& = Pnt(coord3).Nyăă    IF (x1& - x2&) * (y3& - y2&) - (y1& - y2&) * (x3& - x2&) < 0 THEN Poly(i&).Culled = Trueă  NEXTăăă  FOR i& = 1 TO MaxPolygonsă    FOR ii& = 1 TO MaxPolygons - 1ă      IF Poly(Pointer(ii&)).AvgZ > Poly(Pointer(ii& + 1)).AvgZ THEN SWAP Pointer(ii&), Pointer(ii& + 1)ă    NEXTă  NEXTăă  FOR ii& = 1 TO MaxPolygonsă    i& = Pointer(ii&)ă    IF NOT Poly(i&).Culled = True THENă      DrawPoly Pnt(Poly(i&).P1).x + SrX, Pnt(Poly(i&).P1).y + SrY, Pnt(Poly(i&).P2).x + SrX, Pnt(Poly(i&).P2).y + SrY, Pnt(Poly(i&).P3).x + SrX, Pnt(Poly(i&).P3).y + SrY, Pnt(Poly(i&).P1).Shade + Poly(i&).Col, Pnt(Poly(i&).P2).Shade + Poly(i&).Col,  _ăPnt(Poly(i&).P3).Shade + Poly(i&).Col, INT(i&)ă    END IFă  NEXTă  Memcopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă  Fillchar VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), 0, &HFA00ăăă  'Print Point numbersă  IF PDisp = True THENă    FOR i = 1 TO MaxPointsă      Ty = (Pnt(i).y + SrY) \ 8 + 1ă      Tx = (Pnt(i).x + SrX) \ 8 + 1ă      IF Ty > 23 THEN Ty = 23ă      IF Ty < 1 THEN Ty = 1ă      IF Tx < 1 THEN Tx = 1ă      IF Tx > 40 THEN Tx = 40ă      LOCATE Ty, Txă      PRINT LTRIM$(RTRIM$(STR$((i))))ă    NEXTă  END IFăă  HandleKeysăăă    SELECT CASE AnimTypeă    CASE 1ă      ShadingModel = 4ă      FOR y = 0 TO TSize - 1ă        FOR x = 0 TO TSizeă          Txt(x, y + 1) = (Txt(x - 1, y - 1) + Txt(x, y - 1) + Txt(x + 1, y - 1) + Txt(x + 1, y) + Txt(x + 1, y + 1) + Txt(x, y + 1) + Txt(x - 1, y + 1) + Txt(x - 1, y)) \ 8 - 1ă        NEXTă      NEXTă      FOR i = 0 TO TSize \ 4ă        XPos = RND * TSizeă        Temp = RND * 63ă        Txt(XPos, -1) = RND * Tempă        Txt(XPos, 0) = RND * Tempă      NEXTă    CASE 2ă      ShadingModel = 4ă      Lx& = Lx& + XAdd&ă      Ly& = Ly& + YAdd&ăă      FOR y& = 0 TO TSizeă        FOR x& = 0 TO TSizeă          Txt(x&, y&) = Temp(x&, y&)ă        NEXTă      NEXTăă      FOR y& = 0 TO LSizeă        FOR x& = 0 TO LSizeă          Txt((x& + Lx&) MOD TSize, (y& + Ly&) MOD TSize) = Txt((x& + Lx&) MOD TSize, (y& + Ly&) MOD TSize) + l(x&, y&)ă        NEXTă      NEXTăă      Lx& = Lx& + XAdd&ă      Ly& = Ly& + YAdd&ăă      IF Lx& = TSize THEN XAdd& = -XAdd&ă      IF Lx& = 0 THEN XAdd& = -XAdd&ăă      IF Ly& = TSize - 2 THEN YAdd& = -YAdd&ă      IF Ly& = 0 THEN YAdd& = -YAdd&ăă    CASE 3ă      ShadingModel = 4ă      FOR y = 1 TO TSize - 1ă        FOR x = 0 TO TSizeă          Txt(x, y - 1) = Txt(x, y)ă        NEXTă      NEXTă      FOR i = 0 TO TSizeă        Txt(i, TSize - 1) = Txt(i, 0)ă      NEXTă    CASE 4ă      ShadingModel = 4ă      WAVE1 = WAVE1 + WaveSide1ă      IF WAVE1 >= 80 THENă          WAVE1 = 0ă          R1 = (R1 + 1) AND 255ă          WaveSide1 = Rand(R1)ă      END IFă      WAVE2 = WAVE2 + WaveSide2ă      IF WAVE2 >= 80 THENă          WAVE2 = 0ă          R2 = (R2 + 2) AND 255ă          WaveSide2 = Rand(R2)ă      END IFă      WAVE3 = WAVE3 + WaveSide3ă      IF WAVE3 >= 80 THENă          WAVE3 = 0ă          R3 = (R3 + 2) AND 255ă          WaveSide3 = Rand(R3)ă      END IFă      FOR y& = 0 TO TSizeă        E = Cosinus(y& + WAVE1)ă        FOR x& = 0 TO TSizeă          Col = Cosinus(x& + WAVE2) + E + Cosinus(x& + WAVE3) + Cosinus(x& + y&)ă          IF Col > 127 THEN Col = 127ă          Txt(x&, y&) = Colă        NEXTă      NEXTă    END SELECTăă'----------------------------------------------------------------------------ă'                 Update rotation velocitiesă'----------------------------------------------------------------------------ă  Xr = Xr + Vxă  Yr = Yr + Vyă  Zr = Zr + Vzăă  IF Xr < 0 THEN Xr = 360 + Xră  IF Yr < 0 THEN Yr = 360 + Yră  IF Zr < 0 THEN Zr = 360 + Zrăă  Xr = Xr MOD 361ă  Yr = Yr MOD 361ă  Zr = Zr MOD 361ăă  IF TIMER >= start& + 2 THENă    FPS& = INT(Frame / 2)ă    Frame = 0ă    start& = INT(TIMER)ă  END IFă  Frame = Frame + 1ă   ă  IF FDisp = True THENă    COLOR 255ă    LOCATE 1, 1: PRINT FPS&; "fps  "ă  END IFăă  IF MouseNotFound = 0 THENă    HiiriLue B1, B2, B3, MouseX, MouseYăă    IF B1 = -1 THENă      Xr = MouseXă      Zr = MouseYă    END IFă  END IFăăLOOPăăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Object dataă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăObjectData:ăă' Number of pointsăDATA 5ăă' Number of polygonsăDATA 6ăă' Point dataă'ă'       X     Y       ZăDATA -100,    0,    100ăDATA -100,    0,   -100ăDATA  100,    0,   -100ăDATA  100,    0,    100ăDATA    0, -190,      0ăăă' Polygon dataă'ă' Pnt1 Pnt2 Pnt3    Color (1-4)ăDATA 5,   1,   4,   1ăDATA 5,   4,   3,   2ăDATA 5,   2,   1,   3ăDATA 5,   3,   2,   4ăDATA 4,   1,   2,   1ăDATA 4,   2,   3,   1ăăăăMouseData:ăDATA 55, 89, E5, 8B, 5E, 0C, 8B, 07, 50, 8B, 5E, 0A, 8B, 07, 50, 8BăDATA 5E, 08, 8B, 0F, 8B, 5E, 06, 8B, 17, 5B, 58, 1E, 07, CD, 33, 53ăDATA 8B, 5E, 0C, 89, 07, 58, 8B, 5E, 0A, 89, 07, 8B, 5E, 08, 89, 0FăDATA 8B, 5E, 06, 89, 17, 5D, CA, 08, 00ăăREM $STATICăSUB ColPrint (Text$)ă'----------------------------------------------------------------------------ă'                           SúYúSúTúEúMă'----------------------------------------------------------------------------ăă'----------------------------------------------------------------------------ă' Prints color-coded textă'----------------------------------------------------------------------------ă' Color codes:ă'ă'   & followed by a color value between 0-15 (in hex)ă'ă' Example:ă'ă'   This text is &Credă'----------------------------------------------------------------------------ăăFOR i = 1 TO LEN(Text$)ă  Done = 0ă  DOă    IF MID$(Text$, i, 1) = "&" AND INSTR("0123456789ABCDEF", MID$(Text$, i + 1, 1)) AND i < LEN(Text$) THENă      COLOR VAL("&H" + MID$(Text$, i + 1, 1))ă      i = i + 2ă    ELSEă      Done = 1ă    END IFă  LOOP UNTIL Doneă  PRINT MID$(Text$, i, 1);ăNEXTăăEND SUBăăSUB DrawLine (x, y, x2, y2, Col1, Col2, Tx1, Ty1, Tx2, Ty2)ă'----------------------------------------------------------------------------ă'             Calculate the points of a polygon into the bufferă'----------------------------------------------------------------------------ăăIF y < Upper THEN Upper = yăIF y > Lower THEN Lower = yăăIF Upper < 0 THEN Upper = 0ăIF Lower > 199 THEN Lower = 199ăă'Calculate deltas and scale by 1024ăăSteps = SQR((x2 - x) ^ 2 + ((y2 - y) ^ 2))ăIF Steps > 0 THENă  XStep& = ((x2 - x) / Steps) * 1024ă  YStep& = ((y2 - y) / Steps) * 1024ă  ColStep& = ((Col2 - Col1) / Steps) * 1024ăELSEă  EXIT SUBăEND IFăăTempxx& = xăTempyy& = yăăxxx& = Tempxx& * 1024ăyyy& = Tempyy& * 1024ăăCol& = CLNG(Col1) * 1024ăăIF ShadingModel = 4 THENă  Tx& = CLNG(Tx1) * 1024ă  Ty& = CLNG(Ty1) * 1024ă  TxDelta& = ((Tx2 - Tx1) / Steps) * 1024ă  TyDelta& = ((Ty2 - Ty1) / Steps) * 1024ăă  FOR i& = 1 TO Stepsă    IF yyy& >= 0 AND yyy& < 204800 THENă      IF xxx& \ 1024 < Fill(yyy& \ 1024).x1 THENă        Fill(yyy& \ 1024).x1 = xxx& \ 1024ă        Fill(yyy& \ 1024).Tx = Tx& \ 1024ă        Fill(yyy& \ 1024).Ty = Ty& \ 1024ă        Fill(yyy& \ 1024).Col1 = Col& \ 1024ă      END IFăă      IF xxx& \ 1024 > Fill(yyy& \ 1024).x2 THENă        Fill(yyy& \ 1024).x2 = xxx& \ 1024ă        Fill(yyy& \ 1024).Tx2 = Tx& \ 1024ă        Fill(yyy& \ 1024).Ty2 = Ty& \ 1024ă        Fill(yyy& \ 1024).Col2 = Col& \ 1024ă      END IFă    END IFăă    xxx& = xxx& + XStep&ă    yyy& = yyy& + YStep&ă    Tx& = Tx& + TxDelta&ă    Ty& = Ty& + TyDelta&ă    Col& = Col& + ColStep&ă  NEXTăELSEă  FOR i& = 1 TO Stepsă    IF yyy& >= 0 AND yyy& < 204800 THENă      IF xxx& \ 1024 < Fill(yyy& \ 1024).x1 THENă        Fill(yyy& \ 1024).x1 = xxx& \ 1024ă        Fill(yyy& \ 1024).Col1 = Col& \ 1024ă      END IFăă      IF xxx& \ 1024 > Fill(yyy& \ 1024).x2 THENă        Fill(yyy& \ 1024).x2 = xxx& \ 1024ă        Fill(yyy& \ 1024).Col2 = Col& \ 1024ă      END IFă    END IFăă    xxx& = xxx& + XStep&ă    yyy& = yyy& + YStep&ă    Col& = Col& + ColStep&ă  NEXTăEND IFăăEND SUBăăSUB DrawPoly (x, y, x2, y2, x3, y3, P1, P2, P3, Num)ăăFOR i2 = 1 TO 199ă  Fill(i2).x1 = 321ă  Fill(i2).x2 = -1ă  Fill(i2 - 1).x1 = 321ă  Fill(i2 - 1).x2 = -1ă  Fill(i2).Col1 = 0ă  Fill(i2).Col2 = 0ă  Fill(i2 - 1).Col1 = 0ă  Fill(i2 - 1).Col2 = 0ăNEXTăăăDrawLine x, y, x2, y2, P1, P2, TSize \ 2, TSize, TSize, 0ăDrawLine x3, y3, x, y, P3, P1, 0, 0, TSize \ 2, TSizeăDrawLine x2, y2, x3, y3, P2, P3, TSize, 0, 0, 0ăăSELECT CASE ShadingModelăCASE 1ă  OldPos1 = 321ă  OldPos2 = 321ă  FOR yy& = Upper TO Lower - 1ă    XLen = Fill(yy&).x2 - Fill(yy&).x1ă    IF XLen > 0 AND Fill(yy&).x1 > 0 AND Fill(yy&).x2 < 319 AND Fill(yy&).x1 < 319 AND Fill(yy&).x2 > 0 THENă      IF OldPos1 < 320 AND OldPos1 > 0 THENă        IF OldPos1 > Fill(yy&).x1 THENă          FOR xx& = OldPos1 - 1 TO Fill(yy&).x1 STEP -1ă            Buffer(xx&, yy&) = CHR$(Fill(yy&).Col1 MOD 255)ă          NEXTă        ELSEă          FOR xx& = OldPos1 + 1 TO Fill(yy&).x1ă            Buffer(xx&, yy&) = CHR$(Fill(yy&).Col1 MOD 255)ă          NEXTă        END IFă      ELSEă        Buffer(Fill(yy&).x1, yy&) = CHR$(Fill(yy&).Col1 MOD 255)ă      END IFăă      IF OldPos2 < 320 AND OldPos2 > 0 THENă        IF OldPos2 > Fill(yy&).x2 THENă          FOR xx& = OldPos2 TO Fill(yy&).x2 STEP -1ă            Buffer(xx&, yy&) = CHR$(Fill(yy&).Col2 MOD 255)ă          NEXTă        ELSEă          FOR xx& = OldPos2 TO Fill(yy&).x2ă            Buffer(xx&, yy&) = CHR$(Fill(yy&).Col2 MOD 255)ă          NEXTă        END IFă      ELSEă        Buffer(Fill(yy&).x2, yy&) = CHR$(Fill(yy&).Col2 MOD 255)ă      END IFă    END IFă    OldPos1 = Fill(yy&).x1ă    OldPos2 = Fill(yy&).x2ă  NEXTăCASE 2ă  FOR yy& = Upper TO Lower - 1ă    XLen = Fill(yy&).x2 - Fill(yy&).x1ă    IF XLen > 0 THENă      ColDelta& = (Fill(yy&).Col2 - Fill(yy&).Col1) / XLen * 1024ă      Col& = CLNG(Fill(yy&).Col1) * 1024ă      IF Fill(yy&).x1 + XLen > 319 THEN XLen = 319 - Fill(yy&).x1ă      IF Fill(yy&).x1 < 0 THEN XLen = XLen + Fill(yy&).x1: Col& = Col& + ColDelta& * -Fill(yy&).x1: Fill(yy&).x1 = 0ă      FOR xx& = Fill(yy&).x1 TO Fill(yy&).x1 + XLenă        Buffer(xx&, yy&) = CHR$(ABS(Col& \ 1024) MOD 255)ă        Col& = Col& + ColDelta&ă      NEXTă    END IFă  NEXTăCASE 3ă  FOR yy& = Upper TO Lower - 1ă    XLen = Fill(yy&).x2 - Fill(yy&).x1ă    IF XLen > 0 THENă     ă      IF Fill(yy&).x1 + XLen > 319 THEN XLen = 319 - Fill(yy&).x1ă          ă      IF Fill(yy&).x1 < 0 THENă        XLen = XLen + Fill(yy&).x1ă        Fill(yy&).x1 = 0ă      END IFă      IF Fill(yy&).x1 < 319 AND XLen > 0 THEN Fillchar VARSEG(Buffer(Fill(yy&).x1, yy&)), VARPTR(Buffer(Fill(yy&).x1, yy&)), (Pnt(Poly(Num).P1).Shade + Pnt(Poly(Num).P2).Shade + Pnt(Poly(Num).P3).Shade) \ 3 + Poly(Num).Col, XLen + 1ă    END IFă  NEXTăCASE 4ă  IF Anim = False THENă    FOR yy& = Upper TO Lower - 1ă      XLen = Fill(yy&).x2 - Fill(yy&).x1ă      IF XLen > 0 THENă        TxDelta& = (Fill(yy&).Tx2 - Fill(yy&).Tx) / XLen * 1024ă        TyDelta& = (Fill(yy&).Ty2 - Fill(yy&).Ty) / XLen * 1024ă        Tx& = CLNG(Fill(yy&).Tx) * 1024ă        Ty& = CLNG(Fill(yy&).Ty) * 1024ăă        ColDelta& = (Fill(yy&).Col2 - Fill(yy&).Col1) / XLen * 1024ă        Col& = CLNG(Fill(yy&).Col1) * 1024ăă        IF Fill(yy&).x2 > 319 THEN Fill(yy&).x2 = 319ă        IF Fill(yy&).x1 + XLen > 319 THEN XLen = 319 - Fill(yy&).x1ă     ă        IF Fill(yy&).x1 < 0 THENă          XLen = XLen + Fill(yy&).x1ă          Col& = Col& + ColDelta& * -Fill(yy&).x1ă          Tx& = Tx& + TxDelta& * -Fill(yy&).x1ă          Ty& = Ty& + TyDelta& * -Fill(yy&).x1ă          Fill(yy&).x1 = 0ă        END IFăă        FOR xx& = Fill(yy&).x1 TO Fill(yy&).x1 + XLenă          XPos& = Tx& \ 1024ă          YPos& = Ty& \ 1024ă          Buffer(xx&, yy&) = CHR$((Txt(XPos&, YPos&) + ((Col& \ 1024))) MOD 255)ă          Tx& = Tx& + TxDelta&ă          Ty& = Ty& + TyDelta&ă          Col& = Col& + ColDelta&ă        NEXTă      END IFă    NEXTă  ELSEă    FOR yy& = Upper TO Lower - 1ă      XLen = Fill(yy&).x2 - Fill(yy&).x1ă      IF XLen > 0 THENă        TxDelta& = (Fill(yy&).Tx2 - Fill(yy&).Tx) / XLen * 1024ă        TyDelta& = (Fill(yy&).Ty2 - Fill(yy&).Ty) / XLen * 1024ă        Tx& = CLNG(Fill(yy&).Tx) * 1024ă        Ty& = CLNG(Fill(yy&).Ty) * 1024ăă        IF Fill(yy&).x2 > 319 THEN Fill(yy&).x2 = 319ă        IF Fill(yy&).x1 + XLen > 319 THEN XLen = 319 - Fill(yy&).x1ă    ă        IF Fill(yy&).x1 < 0 THENă          XLen = XLen + Fill(yy&).x1ă          Col& = Col& + ColDelta& * -Fill(yy&).x1ă          Tx& = Tx& + TxDelta& * -Fill(yy&).x1ă          Ty& = Ty& + TyDelta& * -Fill(yy&).x1ă          Fill(yy&).x1 = 0ă        END IFăă        FOR xx& = Fill(yy&).x1 TO Fill(yy&).x2ă          XPos& = Tx& \ 1024ă          YPos& = Ty& \ 1024ă          Buffer(xx&, yy&) = CHR$(ABS((Txt(XPos&, YPos&)) + Ambient) MOD 255)ă          Tx& = Tx& + TxDelta&ă          Ty& = Ty& + TyDelta&ă        NEXTă      END IFă    NEXTă  END IFăEND SELECTăăEND SUBăăSUB Fillchar (segment%, offset%, value%, bytes%)ăăDEF SEG = VARSEG(ASMFillChar$)ă   CALL absolute(BYVAL segment%, BYVAL offset%, BYVAL value%, BYVAL bytes%, SADD(ASMFillChar$))ăDEF SEGăăEND SUBăăSUB HandleKeysăă    DEF SEG = 0: k = INP(&H60)ă    WHILE LEN(INKEY$): WEND     'Empty keyboard bufferă    SELECT CASE kă      CASE &H3B               'F1ă        ShadingModel = 1ă      CASE &H3C               'F2ă        ShadingModel = 2ă      CASE &H3D               'F3ă        ShadingModel = 3ă      CASE &H3E               'F4ă        ShadingModel = 4ă      CASE &H3F               'F5ă        Ambient = Ambient - 1ă        IF Ambient < 0 THEN Ambient = 0ă      CASE &H40               'F6ă        Ambient = Ambient + 1ă        IF Ambient > 63 THEN Ambient = 63ă      CASE &H41               'F7ă        Switch PDisp, True, Falseă      CASE &H42               'F8ă        Switch FDisp, True, Falseă      CASE &H43               'F9ă        Switch Anim, True, Falseă        IF Anim = True THENă          AnimType = 1ă          MakeFirePalette 63ă          FOR x = 0 TO TSizeă            FOR y = 0 TO TSizeă              Txt(x, y) = 0ă            NEXTă          NEXTă          FOR i = 64 TO 255ă             OUT &H3C8, iă             OUT &H3C9, 63ă             OUT &H3C9, 63ă             OUT &H3C9, 63ă          NEXTă        ELSEă          MakePaletteă          MakeTextureă          AnimType = 0ă        END IFă      CASE &H44               'F10ă        Switch Anim, True, Falseă        IF Anim = True THENă          AnimType = 2ă          FOR i = 1 TO 63ă             OUT &H3C8, iă             OUT &H3C9, 0ă             OUT &H3C9, 0ă             OUT &H3C9, iă          NEXTă          FOR i = 64 TO 128ă             OUT &H3C8, iă             OUT &H3C9, iă             OUT &H3C9, iă             OUT &H3C9, 63ă          NEXTăă          FOR i = 128 TO 255ă             OUT &H3C8, iă             OUT &H3C9, 63ă             OUT &H3C9, 63ă             OUT &H3C9, 63ă          NEXTă          FOR y = 0 TO TSizeă            FOR x = 0 TO TSizeă              Txt(x, y) = RND * 64ă            NEXTă          NEXTă        ELSEă          MakePaletteă          MakeTextureă          AnimType = 0ă        END IFă      CASE &H57               'F11ă        Switch Anim, True, Falseă        IF Anim = True THENă          AnimType = 3ăă          FOR i = 1 TO 63ă             OUT &H3C8, iă             OUT &H3C9, 0ă             OUT &H3C9, iă             OUT &H3C9, 0ă          NEXTă          FOR i = 64 TO 128ă             OUT &H3C8, iă             OUT &H3C9, iă             OUT &H3C9, 63ă             OUT &H3C9, iă          NEXTăă          FOR i = 128 TO 255ă             OUT &H3C8, iă             OUT &H3C9, 63ă             OUT &H3C9, 63ă             OUT &H3C9, 63ă          NEXTă        ELSEă          MakePaletteă          MakeTextureă          AnimType = 0ă        END IFăă      CASE &H58               'F12ă        Switch Anim, True, Falseă        IF Anim = True THENă          AnimType = 4ăă          WaveSide1 = 1ă          WaveSide2 = 3ă          WaveSide3 = 2ă          R1 = 1ă          R2 = 10ă          R3 = 20ăă          FOR i = 1 TO 63ă             OUT &H3C8, iă             OUT &H3C9, iă             OUT &H3C9, 0ă             OUT &H3C9, 0ă          NEXTă          FOR i = 64 TO 128ă             OUT &H3C8, iă             OUT &H3C9, 63ă             OUT &H3C9, iă             OUT &H3C9, iă          NEXTăă          FOR i = 128 TO 255ă             OUT &H3C8, iă             OUT &H3C9, 63ă             OUT &H3C9, 63ă             OUT &H3C9, 63ă          NEXTă        ELSEă          MakePaletteă          MakeTextureă          AnimType = 0ă        END IFă      CASE &H52               '0ă        Zoom = 700ă        Xr = 400ă        Yr = 315ă        Zr = 0ă        Mx = 0ă        My = 0ă      CASE &H4C               '5ă        Vx = 0ă        Vy = 0ă        Vz = 0ă      CASE &H1E               'Aă        Zoom = Zoom - 10ă        IF Zoom < 0 THEN Zoom = 0ă      CASE &H50               '2ă        Vx = Vx + 1ă      CASE &H48               '8ă        Vx = Vx - 1ă      CASE &H4B               '4ă        Vy = Vy + 1ă      CASE &H4D               '6ă        Vy = Vy - 1ă      CASE &H4A               '+ă        Vz = Vz + 1ă      CASE &H4E               '-ă        Vz = Vz - 1ă      CASE &H2C               'Ză        Zoom = Zoom + 10ă      CASE &H17               'Iă        My = My + 5ă      CASE &H25               'Kă        My = My - 5ă      CASE &H24               'Jă        Mx = Mx + 5ă      CASE &H26               'Lă        Mx = Mx - 5ă      CASE 1                  'ESCă        TheEndă      END SELECTăăEND SUBăăSUB Hiiriajuri (ax%, bx%, cx%, dx%)ă  DEF SEG = VARSEG(hiiri$)                  'Segmentti talteenă  hiiri% = SADD(hiiri$)                     'Offsetti talteenă  CALL absolute(ax%, bx%, cx%, dx%, hiiri%) 'KutsuăEND SUBăăSUB HiiriLue (vasen%, oikea%, keski%, x%, y%)ă  ax% = 3                         'Funktio 3ă  Hiiriajuri ax%, bx%, cx%, dx%   'Kutsutaan hiiriajuriaă  vasen% = ((bx% AND 1) <> 0)      'Luetaan nappien asennotă  oikea% = ((bx% AND 2) <> 0)      'bx:st„ă  keski% = ((bx% AND 4) <> 0)ă  x% = cx%                        'ja hiiren koordinaatită  y% = dx%                        'cx:st„ ja dx:st„ăEND SUBăăFUNCTION Hiiritarkista%ă  ax% = 0                        'Funktio 0ă  Hiiriajuri ax%, bx%, 0, 0      'Kutsutaan hiiriajuriaă  IF (ax% = 0) THEN              'Onko ajuri k„yt”ss„?ă    Hiiritarkista% = 0           'jos ei, palautetaan 0ă  ELSEIF (bx% = 3) THEN          'Kolminappinen hiiri?ă    Hiiritarkista% = 3ă  ELSEIF (bx% = 0) THEN          'Ep„standardi hiiri?ă    Hiiritarkista% = 1ă  ELSEă    Hiiritarkista% = 2           'Tavallinen kaksinappinen hiiri?ă  END IFăEND FUNCTIONăăDEFSNG A-ZăSUB InterPolate (x, y, x2, y2)ăP1 = POINT(x, y)ăP2 = POINT(x2, y)ăP3 = POINT(x, y2)ăP4 = POINT(x2, y2)ăăYDelta1& = (P3 - P1) / (y2 - y) * 1024ăYDelta2& = (P4 - P2) / (y2 - y) * 1024ăăCol1& = P1 * 1024ăCol2& = P3 * 1024ăăFOR yy& = y TO y2ă  PSET (x, yy&), Col1& \ 1024ă  PSET (x2, yy&), Col2& \ 1024ă  Col1& = Col1& + YDelta1&ă  Col2& = Col2& + YDelta2&ăNEXTăăXLen = x2 - xăFOR yy& = y TO y2ă  P1 = POINT(x, yy&)ă  P2 = POINT(x2, yy&)ăă  XDelta& = (P2 - P1) / XLen * 1024ă  Col& = P1 * 1024ăă  FOR xx& = x TO x2ă    PSET (xx&, yy&), Col& \ 1024ă    Col& = Col& + XDelta&ă  NEXTăNEXTăăEND SUBăăDEFINT A-ZăSUB LoadObject (File$)ăOPEN File$ FOR INPUT AS #1ăLINE INPUT #1, Temp$ăINPUT #1, MaxPointsăINPUT #1, MaxPolygonsăăLINE INPUT #1, Temp$ăLINE INPUT #1, Temp$ăFOR i = 1 TO MaxPointsă  INPUT #1, Pnt(i).x3, Pnt(i).y3, Pnt(i).z3ăNEXTăăLINE INPUT #1, Temp$ăLINE INPUT #1, Temp$ăFOR i = 1 TO MaxPolygonsă  INPUT #1, Poly(i).P1, Poly(i).P2, Poly(i).P3, Poly(i).ColăNEXTăCLOSE #1ăăEND SUBăăSUB MakeFirePalette (MaxColors)     'Asettaa paletinăăFOR x% = 1 TO MaxColorsă  OUT &H3C8, x%ă  OUT &H3C9, 63ă  OUT &H3C9, 63ă  OUT &H3C9, 63ăNEXTăăăFOR x% = 0 TO (MaxColors \ 4) - 1ă  OUT &H3C8, x%ă  OUT &H3C9, x% * (63 / (MaxColors \ 4))ă  OUT &H3C9, 0ă  OUT &H3C9, 0ăă  OUT &H3C8, x% + (MaxColors \ 4)ă  OUT &H3C9, 63ă  OUT &H3C9, x% * (63 / (MaxColors \ 4))ă  OUT &H3C9, 0ăă  OUT &H3C8, x% + ((MaxColors \ 4) * 2)ă  OUT &H3C9, 63ă  OUT &H3C9, 63ă  OUT &H3C9, x% * (63 / (MaxColors \ 4))ăNEXT x%ăăăEND SUBăăSUB MakeLightăFOR x& = 0 TO LSizeă  FOR y& = 0 TO LSizeă    Xd! = (x& - (LSize \ 2)) / (LSize \ 2)ă    Yd! = (y& - (LSize \ 2)) / (LSize \ 2)ăă    Light! = (1 - SQR(Xd! ^ 2 + Yd! ^ 2))ăă    IF Light! < 0 THEN Light! = 0ă    l(x&, y&) = CINT(Light! * (LSize * 4))ăă  NEXTăNEXTăEND SUBăăSUB MakePaletteăăFOR i = 0 TO 63ă   OUT &H3C8, iă   OUT &H3C9, iă   OUT &H3C9, iă   OUT &H3C9, 0ăNEXTăăFOR i = 64 TO 128ă   OUT &H3C8, iă   OUT &H3C9, iă   OUT &H3C9, 0ă   OUT &H3C9, 0ăNEXTăăFOR i = 129 TO 192ă   OUT &H3C8, iă   OUT &H3C9, 0ă   OUT &H3C9, iă   OUT &H3C9, 0ăNEXTăăFOR i = 193 TO 255ă   OUT &H3C8, iă   OUT &H3C9, 0ă   OUT &H3C9, 0ă   OUT &H3C9, iăNEXTăăăEND SUBăăSUB MakeTextureăăFOR y = 0 TO TSizeă  FOR x = 0 TO TSizeă    Txt(x, y) = RND * 32ă  NEXTăNEXTăăFOR Iter = 0 TO 0ă  FOR y = 0 TO TSizeă    FOR x = 0 TO TSizeă      Txt(x, y) = (Txt(x - 1, y - 1) + Txt(x, y - 1) + Txt(x + 1, y - 1) + Txt(x + 1, y) + Txt(x + 1, y + 1) + Txt(x, y + 1) + Txt(x - 1, y + 1) + Txt(x - 1, y)) \ 8ă    NEXTă  NEXTăNEXTăăEND SUBăăSUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăDEF SEG = VARSEG(ASMMemCopy$)ă   CALL absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(ASMMemCopy$))ăDEF SEGăăEND SUBăăSUB ReadObject (File$)ăIF File$ = "" THENăEND IFăEND SUBăăSUB RotatePoint (xo, yo, zo, Rx, Ry, Rz, Nx, Ny, Nz)ă'----------------------------------------------------------------------------ă'                    Rotate a point in 3D spaceă'----------------------------------------------------------------------------ăăs1& = Sine(Rx MOD 360)ăs2& = Sine(Ry MOD 360)ăs3& = Sine(Rz MOD 360)ăăc1& = Cosine(Rx MOD 360)ăc2& = Cosine(Ry MOD 360)ăc3& = Cosine(Rz MOD 360)ăăx1 = (xo * c1& - zo * s1&) \ 1024ăz1 = (xo * s1& + zo * c1&) \ 1024ăăz3 = (z1 * c3& - yo * s3&) \ 1024 + ozăy2 = (z1 * s3& + yo * c3&) \ 1024ăăx2 = (x1 * c2& + y2 * s2&) \ 1024 + oxăy3 = (y2 * c2& - x1 * s2&) \ 1024 + oyăăNx = x2ăNy = y3ăNz = z3ăăEND SUBăăSUB RotatePointsă  FOR i& = 1 TO MaxPointsă    RotatePoint Pnt(i&).x3, Pnt(i&).y3, Pnt(i&).z3, Xr, Yr, Zr, x3, y3, z3ă    t3d2d x3, y3, z3, SX, SYă    Pnt(i&).Nx = x3ă    Pnt(i&).Ny = y3ă    Pnt(i&).Nz = z3ă    Pnt(i&).x = SXă    Pnt(i&).y = SYă    Pnt(i&).Shade = z3 / 6 + Ambientă    IF ShadingModel = 4 THENă      IF Pnt(i&).Shade > 32 THEN Pnt(i&).Shade = 32ă    ELSEă      IF Pnt(i&).Shade > 63 THEN Pnt(i&).Shade = 63ă    END IFă    IF Pnt(i&).Shade < 1 THEN Pnt(i&).Shade = 1ă  NEXTăEND SUBăăSUB SaveObject (File$)ăOPEN File$ FOR OUTPUT AS #1ăPRINT #1, "--------[ 3D Engine (C) Sami Ky”stil„ - Object Data file ]--------"ăPRINT #1, MaxPointsăPRINT #1, MaxPolygonsăPRINT #1, "---------------------------------------------[ Start Point data ]-"ăPRINT #1, "X", "Y", "Z"ăFOR i = 1 TO MaxPointsă  PRINT #1, Pnt(i).x3, Pnt(i).y3, Pnt(i).z3ăNEXTăPRINT #1, "-------------------------------------------[ Start Polygon data ]-"ăPRINT #1, "Point 1", "Point 2", "Point 3", "Color"ăFOR i = 1 TO MaxPolygonsă  PRINT #1, Poly(i).P1, Poly(i).P2, Poly(i).P3, Poly(i).ColăNEXTăCLOSE #1ăEND SUBăăDEFLNG A-ZăSUB Separator (Col, Char$)ă'----------------------------------------------------------------------------ă'                           Prints a separator lineă'----------------------------------------------------------------------------ăăăSELECT CASE ColăCASE IS = 1ă  Col1 = 1ă  Col2 = 9ă  Col3 = 3ă  Col4 = 11ă  Col5 = 15ăCASE IS = 2ă  Col1 = 2ă  Col2 = 10ă  Col3 = 14ă  Col4 = 15ă  Col5 = 15ăCASE IS = 3ă  Col1 = 8ă  Col2 = 7ă  Col3 = 15ă  Col4 = 15ă  Col5 = 15ăEND SELECTăăăăCOLOR Col1ăPRINT STRING$(5, Char$);ăCOLOR Col2ăPRINT STRING$(5, Char$);ăCOLOR Col3ăPRINT STRING$(5, Char$);ăCOLOR Col4ăPRINT STRING$(5, Char$);ăCOLOR Col5ăPRINT STRING$(40, Char$);ăCOLOR Col4ăPRINT STRING$(5, Char$);ăCOLOR Col3ăPRINT STRING$(5, Char$);ăCOLOR Col2ăPRINT STRING$(5, Char$);ăCOLOR Col1ăPRINT STRING$(5, Char$)ăăăEND SUBăăDEFINT A-ZăFUNCTION ShadeName$ (Model)ăSELECT CASE ModelăCASE 1: ShadeName$ = "Wireframe"ăCASE 2: ShadeName$ = "Z-Gouraud"ăCASE 3: ShadeName$ = "Z-Flat"ăCASE 4: ShadeName$ = "Textured"ăEND SELECTăEND FUNCTIONăăSUB Switch (Var, Value1, Value2)ă'----------------------------------------------------------------------------ă'                           Switches valuesă'----------------------------------------------------------------------------ă'ă'     Var - Variable to be changedă'  Value1 - Value 1ă'  Value2 - Value 2ă'ă'----------------------------------------------------------------------------ă'ă' if Var = Value1 then Value2 will be assigned to Vară'ă' if Var = Value2 then Value1 will be assigned to Vară'ă' This SUB is used with Checkboxes and Radiobuttonsă'ă'----------------------------------------------------------------------------ăăăIF Var = Value1 THEN Var = Value2: EXIT SUBăIF Var = Value2 THEN Var = Value1ăăEND SUBăăSUB t3d2d (x, y, z, SX, SY)ă'----------------------------------------------------------------------------ă'         Transforms 3D coordinates into 2D screen coordinatesă'----------------------------------------------------------------------------ăăăIF z - Zoom <> 0 THEN SY = CLNG(y + My) * 100 \ INT(z - Zoom)ăIF z - Zoom <> 0 THEN SX = CLNG(x + Mx) * 100 \ INT(z - Zoom)ăăEND SUBăăSUB TheEndăăSCREEN 0: CLSăWIDTH 80, 25ăCOLOR 15, 4ăLOCATE 1, 1ăPRINT STRING$(80, " ")ăLOCATE 1, 1ăPRINT "             3D Polygon Engine v2.0 by Sami Ky”stil„ 1997"ăCOLOR 3, 0ăPRINTăPRINT "Average FPS:", , , FPS&; "fps"ăPRINT "Ending position (XYZ)", , Xr; Yr; ZrăPRINT "Shading model:", , " "; ShadeName$(ShadingModel)ăPRINT "Ambient lighting level:", , AmbientăSYSTEMăăăEND SUBăKa-Lok Fung                    BMP PALETTE STRIPPER           kalok@vcn.bc.ca                01-03-98 (14:37)       QB, QBasic, PDS        215  5990     BMPPAL.BAS  'BMP Palette Stripperă'Programmed by Jason Downey <qasic@hotmail.com>ă'Public Domain.ă'Various Portions Leeched by Publicly Avaible BMP Loading Source Codeăă'Requirements : VGA Monitor and Graphics Cardă'Purpose      : Loads a .BMP and saves its palette to disk.ă'Instructions : 1) To create palette file, run programă'               2) To load palette file, copy LoadPal subroutine into youră'                  programă'Comments     : Code such be self explanatory. As with most public domaină'               programs, author asssumes no liability for the use of this              ă'               program! Use it any way you want.ăă'DeclarationsăDECLARE SUB Delay (Seconds!)ăDECLARE SUB LoadPal (FileName$)ăDECLARE SUB WritePal (FileName$)ăă'Introduction StuffăPRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"ăPRINT "BMP Palette Stripper"ăPRINT "Version 1.0"ăPRINT "Programmed by Jason Downey"ăPRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ"ăPRINTăă'Input BMP FileăPRINT "ţ Enter .BMP File: ";ăLINE INPUT ; "", FileName$ăFileName$ = UCASE$(RTRIM$(LTRIM$(FileName$)))ăIF FileName$ = "" THENă   PRINT "Cancelled..."ă   SYSTEMăEND IFăIF RIGHT$(FileName$, 4) <> ".BMP" THEN FileName$ = FileName$ + ".BMP"ăPRINTăă'Get InformationăPRINT "ţ Retrieving Information...";ăOPEN FileName$ FOR BINARY AS #1ăheader$ = SPACE$(14)ăsizing$ = SPACE$(4)ăGET #1, 1, header$ăGET #1, 15, sizing$ăbmpinfosize = CVI(sizing$)ăă'bmpinfosize - Is the size of the information header for the bitmap.ă'              Different bitmap versions have variations in filetypes.ă'              40 is a standard windows 3.1 bitmap.ă'              12 is for OS/2 bitmapsăăă'Reads in the appropriate headers and colour tables.ă'   nbits is the number of bits per pixel - i.e. number of coloursă'   1 bit = 2 colours, 4 bits = 16 colours, 8 bits = 256 colours, etc.ă'   the 24 bit mode does not have a palette, its colours are expressed asă'   image dataăIF bmpinfosize = 12 THENă   infoheader$ = SPACE$(12)ă   GET #1, 15, infoheader$ă   nbits = CVI(MID$(infoheader$, 15, 4))ă   IF nbits = 1 THENă      palet$ = SPACE$(6)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 4 THENă      palet$ = SPACE$(48)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 8 THENă      palet$ = SPACE$(768)ă      GET #1, bmpinfosize + 15, palet$ă   END IFăELSEIF bmpinfosize = 40 THENă   infoheader$ = SPACE$(40)ă   GET #1, 15, infoheader$ă   nbits = CVI(MID$(infoheader$, 15, 4))ă   IF nbits = 1 THENă      palet$ = SPACE$(8)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 4 THENă      palet$ = SPACE$(64)ă      GET #1, bmpinfosize + 15, palet$ă   ELSEIF nbits = 8 THENă      palet$ = SPACE$(1024)ă      GET #1, bmpinfosize + 15, palet$ă   END IFăEND IFăIF LOF(1) = 0 THENă        PRINT "File Not Found."ă        PRINT "ţ Aborting..."ă        CLOSE #1ă        KILL FileName$ă        SYSTEMăEND IFăCLOSE #1ăDelay .3ăPRINT "Done."ă    ă'Check for BMP FileăPRINT "ţ Checking for BMP File Declaration...";ăft$ = MID$(header$, 1, 2)ăIF ft$ <> "BM" THENă        PRINT "Failed."ă        PRINT "ţ Aborting..."ă        SYSTEMăEND IFăDelay .3ăPRINT "Passed."ăă'Determine Correct ScreenăPRINT "ţ Changing to appropriate Screen Mode...";ăIF nbits = 1 THENă   SCREEN 11ăELSEIF nbits = 4 THENă   SCREEN 12ăELSEIF nbits = 8 OR nbits = 24 THENă   SCREEN 13ăEND IFăă'Determine PaletteăPRINT "ţ Getting Palette...";ăIF bmpinfosize = 40 THEN ngroups = 4ăIF bmpinfosize = 12 THEN ngroups = 3ăIF nbits = 24 THENă   IF ngroups = 3 THENă      FOR c = 0 TO 63ă         d = c * 4ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d)ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1)ă         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d)ă         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d)ă      NEXT că   ELSEIF ngroups = 4 THENă      FOR c = 0 TO 63ă         d = c * 4ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d) + CHR$(0)ă         palet$ = palet$ + CHR$(d) + CHR$(d) + CHR$(d + 1) + CHR$(0)ă         palet$ = palet$ + CHR$(d) + CHR$(d + 1) + CHR$(d) + CHR$(0)ă         palet$ = palet$ + CHR$(d + 1) + CHR$(d) + CHR$(d) + CHR$(0)ă      NEXT că   END IFăEND IFăPRINT "Done."ăă'Load PaletteăPRINT "ţ Placing Palette...";ăFOR x = 1 TO LEN(palet$) STEP ngroupsă   zb# = INT((ASC(MID$(palet$, x, 1))) / 4)ă   zg# = INT((ASC(MID$(palet$, x + 1, 1))) / 4)ă   zr# = INT((ASC(MID$(palet$, x + 2, 1))) / 4)ă   zc# = zb# * 65536# + zg# * 256# + zr#ă   cres = ASC(MID$(palet$, x + 3, 1))ă   PALETTE ((x - 1) / ngroups), zc#ăNEXT xăPRINT "Done."ăăă'Save Palette to DiskăPRINT "ţ Saving Palette....";ăPosition = INSTR(FileName$, ".")ăSavePalName$ = LEFT$(FileName$, Position - 1)ăSavePalName$ = SavePalName$ + ".PAL"ăWritePal (SavePalName$)ăă'Clean up codeăWIDTH 80: SCREEN 9: SCREEN 0ăPRINT "ţ Palette saved as: "; SavePalName$ăPRINT "ţ Operation Complete."ăPLAY "T120L16MLO3BF#"ăăSUB Delay (Seconds)ă  JINX = TIMERă  XDELAY = JINX + Secondsă  WHILE NOT (TIMER > XDELAY): WENDăEND SUBăăSUB LoadPal (FileName$)ăDEFINT A-Ză'Routine "borrowed" from M \ K Productionsă'All Hats Off to Themă'LoadPal: Loads palette fileăăDIM Byte AS STRING * 1ăăOPEN FileName$ FOR BINARY AS #1ă FOR Att% = 0 TO 255ă  OUT &H3C8, Att%ă   FOR RedGreenAndBlue% = 1 TO 3ă    GET #1, , Byteă    Valew% = ASC(Byte)ă    OUT &H3C9, Valew%ă   NEXT RedGreenAndBlue%ă NEXT Att%ăCLOSE #1ăăEND SUBăăSUB WritePal (FileName$)ă'Routine "borrowed" from M \ K Productionsă'All Hats Off to Themă'WritePal: Creates the palette file.ăăDIM Byte AS STRING * 1ăăOPEN FileName$ FOR BINARY AS #1ăFOR Att% = 0 TO 255ă OUT &H3C7, Att%ă  FOR RedGreenAndBlue% = 1 TO 3ă   Buffer% = INP(&H3C9)ă   Byte = CHR$(Buffer%)ă   PUT #1, , Byteă  NEXT RedGreenAndBlue%ăNEXT Att%ăCLOSE #1ăEND SUBăDavey W. Taylor                3D IMAGE WAVE PATTERN          audio.squad@mailbox.swipnet.se 01-05-98 (12:24)       QB, QBasic, PDS        214  14067    IMGW.BAS    DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"IMGWAVE.ZIP",4^6:Z&=10279:?STRING$(50,177);ăU"%up()%9%%%#-%TYmII?F<w7J5%%%%h%%%-%%%%yj&'ySwUf&f*^2GyNthwgZ^_lăU"3bdIs6#2#g[1e8W3<,_?Fr%gm+wIP:TDl4Vt+:JZvnWQw&,YfKOip-%dCJ^u;d,ăU"%4Kya;T?&LEwX85Y/Pi*<y9U/j)zwb_?yCbq)Bsom$$Up$BG2pdQgLV=n^LtmEvăU"GQrGkJtA$WltmptG#*%'o+(q&'.%vOGJOwOA/O/OO8OYS)7O.=.lMc_O%FiEqJoăU"gVc(3d_ISCMNp0?(M'd*)1Qf?0HQ1kV14^yHFfARG4c;JpC,.fBqCFMngt.47-măU"0sEd,C:Mw[JUDYK(ui,z(*_3eAH&.GjE[T1a4KfiR5MCR%wdy*%F>Ec[ap=udC-ăU"2$AMM0aBK%yS\oO1b%M9,m7_+*'kq\_545==hUIQX\%g_3&UDSis16wYf03-1&uăU"[#*>#F?EXpUx9C.)9TE0H0Paj-\/C&oO&:(j_sg.ImYGQ=dPQ.amfh994*UkX[HăU"D#E9EtJ#mvoSq9KdL5Z_yJAMY$SC:=2II?PY%Iyzg033Qf#738,^,n4kZk9hV%eăU"%gF#mIEhGS+Is1Opu;,9dE;CL$MM%gzR9#)m^Eq*s$r.F?Vy(RSG5<#PNgIE)4dăU"R5RK2R.M(TJ/)Ya^u).BJ)7]R'#0cdC9SE]T\TOZ.xIeI,t.I9AVm'1ani,JLKXăU")aC<OE-\nMN'%J*6-FLmmaB=wI+8y,[5Lsa7Y6=*(-AQ.gC'ilm19tNL00[IkG<ăU"J)[0[fEf50QthC5xNRnH[jh->cq\iBpfExm,x387mT93cDnu&'gt5t%%'NbD'r,ăU"9hC.kqSbipR.\gW<0u:I&&%;8D*oXb)B98G-.QKDttc]NaDHdC.c2gpbFCm+XT0ăU"ype*bs%m(%KZCt>2'\V^TW1D,^8>kd#*\gFG^[aBh*9KtO\Fop^u(bosaVNFLMMăU"hMMD'b#IT4EjP-V?d+>4bU<6BDng_D0cI5:EK^n'YcuLvUtn:[babD?7t2D<DYRăU"ptFwUgRC3rWdmo/w3P(,5#:0\-yu:vl$<H6?a#YcF%2?7Z;CRil\PzI'S0#JZ;măU"R6#PQMMC\X+)-X0[0)XkM/XwH/^;O,S4\?V7,>^-KP6dMMOpdS*4.RGYEeFNpO0ăU"50Yt\v_Y[-B-v_N0oW;#w7d[qhoGdw3m2s$ut2(8w;yGgv_C^.v?8mKpPr[?U3*ăU"1']*vP(,>sjgd;?/8]l56Jp,YwvQrx+mhlW6*mKpP4G3_h6+)AtfQ'w'ia?JNnyăU"Q'm3&_&fKrc4*KtJZdTTT#f?rJWcMzUcU_E=uI****HxlK#4h0]6d[vnJ3X#PjEăU"Q]rhhq'l<VDpFbXfKiTI6_$'bKxY*$iNV7M8_-12(*%**S2%Kqiq'YRb&5:<K/QăU"o\NO5)$zLUlE1W0lmgfA8uaH3k3=:Fr_McKuJ44XxqV.2%%%q'w?dJYN^-8bduiăU"LSur<%]q^hmEHmZ:B/m9'nmNs(h77gD'v220uiIUIoIEs,nCv#bXh<+G)z:KD]-ăU"YZ.:=4bvk'/;Rs2mqrb4D?b+U*1Gk%U##^B.,1m>4mrc;\rk,b.V0h)+:Z5^7<+ăU"]QaY)\<#MqcbH=3/\Ny,[y1c8k6HW.?sEJXtM]A1e2,hxjcG#;)EI^RX5<h<i7LăU"+=DjeS]7EFu?S:X(\Fvc=boQ%jkoDTxC3]UfN]]+>]>ZeAXixTtvBKN9QBqJ;NGăU"xs,TCW<E,hXvFh&MsQH)PW)(uV666f[<Eocog9vU?A;bOgr#d+G/GPtC$3<iK%_ăU")?2,,X?dge9+o?>[q>HQ-^DsI+sj6A2GA_c3&X3]06-'&FZV8&:u%q/q5GU=(ojăU"&t?i8(0Zhq*=5-j?:k2V7)+ir4SZA>fxD1\-^UKur7y6wHM3<*gT^LPZTnbuqyOăU"S=yunNuJU5rs*YjhbYJGhtf-sXvutgO+]2GUycH[Zsss)2wpnXNjr-irW?;2[=văU"2SB>+Oc6W\W=/<<6mFMPsZ^kr<iDTM.)6[KkhknaPpk[3OXhNMlL%7G7[S?f.l>ăU"JCMA;u'VJKLJw,LuP$1/kx,nWFcK/=3k?aH<O;/)0eYqdOPAcm,S#[V4q8hDzYQăU")Oq60e)jicTSl4r2exu+4PKr)h(TeT<7.'re-o0#i80SgujwAM2Vq6#]sBK3'mBăU"P=kpTEfSCJelE3fI%GJ^<.K0j*0'c<[cb&Sh,6IH>ps.qT>D>tqF.Ac>LM5RO>făU"K:.(-_'(Il_5]gWj7=RIc[==\P^*#?hSy;G.1hwUAUMkUUrWV[?e.[d84_)g]a%ăU"*>WGP7l49Hg59r(Rf0ID%alONtI)P[l_d$D#lA>g_?rlFQIJTYNo]%u*(#)9;FlăU"2r>T-)Zs\ExYZ:k+v?D,ypIre%H.%>uqC/g81NP$wZ:xsOqxRF3;)?6nN&TG-qtăU"ZaN'[*aiqcko:g0ZY,kj^pT?lHkx(n\3_n,zsz^_8m5N<f9s6]1>H>'%QN>H=HwăU"ptk<aBlt?AHx%61?v'0hvI;'?oM/700dYgiDpmrxo9)%e-ev_(0jG2N(R2t5$uAăU"#<0r2m&b6/t/wu2OECZ5q5,>n#*W/%-^uMLW1N&ppXg;AA-624,TZlPh*tXcSQtăU"x<UK>Iy0e8lft,:vf0T14f2zAM9:;Kr$qW%?%HCF-JuoeZwjC-'n.E?(\:u=YbtăU"h=)hHY:<Sl^vg2&qD#$,;OA'gF12GEphvMZOL#^Z4H\6s\DxS17laI++P9/giMLăU"BF+[-I(M21FdP1#k%=wGwOaeSdB?YdOGu^dqVs0qn7jxnxP\J:7tSwWWYMnd,[9ăU"aqNqR%0[,N]v+)5>hh>HWS$a^/?sf[ftp]Fm6f$m2xd8R[c's:>pg(:Qu/)*K<.ăU"9[C\m>#0;T.#5;e<XqObSe=NlG:O=DZSsnE0ZT8_:dV8Y&78Q5YNIcK7#-wn&0#ăU"-03sax[%5WA=/nO0kMh83:B1_pt;5ib01CwyYI2^NPl#RA=^OzT_a>uUPUIYDT8ăU"N%niVr$#'CitprmGU79[*k0DJ.Y:<^Yn&[*LZ.0p2)>ukTucU<.#\Ote<qj=kTuăU"j)UvTCh76)\AP,Qz#bOVE<e/Lx>:4V8C-LHL\6cNp&w6C>dHKpQdLXw9=]cA1J>ăU"XP018T1]K?*U_r6o;[>'oDafAJN$FUk*:h#[##>0nxasmrYiG7_:I.aM3S]E&DAăU"50A=uAhFx%DW0Mx.jd&:Ev]<=E)n0ZDMvS/9i.?6A,t]Yj2f#W21Jnxm0HqMHRbăU"Q'm_[,qd8]rvp,*/UF4'&vB,/tl*<n#)9Zg:x][;mb'c'#-IFALqC2S*MM-MMmoăU"AB3;[4W#ihKU_;0IU0FO2wQ;UcRt$1RsC&2e21>WNSavn9hC*[ER-xD\Uj(QGF<ăU"701g%#WFax>8$3+LM'WTN=%r*Z-kT9QB#2/ehqk'/o/zLSM=oeD?wwsBO']b6%hăU"y+CW+lvp'$Lg'<<0w>Q-B*kR6WgC:f4#6F<k>4bbs6$pK>j)Vbgl%MIGbDcjOV$ăU"U;>QBRh3(Aq,#=B984L;8ceo$Zu,<Jfp3^gevI0D%FyyEk8g2:%N$3=0]n[f]?HăU"ws6;1Zu^yCdN>:9++mDY1:YOu-:\*D:)9v6^SlQSh>eR4*h&P[k=n*[XTe5dVIHăU"qL4,O7PgnNqb=xq7*nF-TfC74[Oda,hjr$G6lR.u4J9PZ%G(Kg^V4Cqd77oosQ7ăU"Q+G'2NVeK_Bm+c4=q5/xqV8]>\QoPfv=SwG[+UHss.X;Wp^ARib3SI]7evsyD?FăU"U>1gLqgjCFR#YGkGxLAmf3b'&^1X6MmMsa4h(#1yIOZ/?x[m^EN*'tQ>juUs.9WăU"[9gX05'A*R1/6uQa5mjn4$=vU3S3T5Rvi?7)00NYi'9u9e\w&RW=v'8P9[XW#[NăU"cT;AqRq>3i5j-,1hO<,=V_<wC'j1P*d6o>*p(a\l;-(oYd>ojN-9U7NC/6o;WtDăU"hH1)kdl23E;Wtp$>ylJ#%VcD(m]t2qr$lxHoav2e1\D>D$rlTeH_BK'E]A$]BHzăU"8:dDC[:j$T7-^ckB'j$<_0t:47Olp:[Fke^Oku8hEY_^L/Eo)VI-QTTt,fHFXJ3ăU")dp8A]L:R=uc2qUcR_?KHI:-m\n$SYDQ=*KUxC529o,(Z;J-#4s7*Mk*gj&s[^căU"oSBX$rZxtf9PUm3E5^lwigB;JEC1y=Tr1f=<ENX+q='2s>+9cTC=DF0=\&Nn]<tăU"ftJ*HA$9*hc'Yz()S<g[[MXzmNT%D6w<RDvQVa--V$tAdA'#Ux;\Hc;Fv#TMc0TăU"h+fi#K8plAiYW4sf*MZ<J86NJzU=Et'$&HJy1vCc\9h[dkNH_F#eXE7nvA6_[mhăU"1mbo=lZKCsobW$loX2Cl2iOD3QD=EXE^\\$'[ft?k*;$8sul)Lj00A(F7Xc?8(<ăU">]oYpZ<+\/Aa]:Y_JF^XHV[oIp_$\5EoG<xZ8e^d>%G6uNVYjGho.SwjPKop^u2ăU"Z\jP,3$s>=U;rK?olx:Zi_v9<iF^)<4ZZ\g,r?R=JTWr+EGOH1%x5.X0wI<W8i7ăU".eQkTSn\s2x2=%Nta,mlKqKiOMDu6hHHY&W9_/P.\n;=MUR^JsL%de'#F'$Htm#ăU"&V:wUS+vf+>r1lr-wT\rU#<ktjUg0\Ey8d,%.$ks%Ee>GI$>XJtTEC^$V.sKaCxăU",$4k(X6ieZ9mT]G8'\+n]-&ElvV4[,<Owo,[Am_Z=n3TW/.#L5S=s[Z4J[p;wLIăU"RJ7=txGqMD*JG.roOP/2=Lj^oM4Bug:v2a)?Pt=kN7l'FbvHF(/<G/cjkQ\.8SwăU"js#s><4j8CuTgOZ'<MYQrh/]O.NdqW]\lsgqJh?q>P5:]<p4'Uu]m><uX2#1jZhăU"1[<[M^o.UbPPGmO$hY42H&o,B.0N&1VdL[2)lKVZJzZ<CC;QZ1\z*rzaS9nz#,HăU"*rpKP6Mfkn*Yj&XvP&?J9V>XHFoM4+VsNC&\'lYV-A^db&w21]6RV,NWHL='#=măU"40=^Vv+=0gq:%KIS/NF3%ceK<[SMNE%Cqo9PQ)FNrhk?L4t>K]BE'Cv1oJ8CxW#ăU"-4?<2kA<P=(n7/wR+LAK^A4K>wjkhTCQ^6DH]uWeR=:$PE]C9s&l2q[nQ_dM)4jăU"<,nSIN%4DpGEJhH,PFmbCH[Hc++(-#89X(C=y0Pw\PFqAi\'colPKk/Ay\iQU]XăU"h++m$xwWUg3G^hLD\o)u=Er>z+M,_plB[gjFt9^/C4Lw%K''J4tP3ttmx,-I=eNăU"wG)g'JR.1te/QR1HccP0u9ZcOb2D/D//PL,Ph.u%EJUQ<TraT9pD2IN?5*EP86făU"607\>'T$$r,r620kJ*O%XMfz<RL:1KyrflW8n'np?TWobRNfa4uh4kzH6uvZJj[ăU"h.-cIM*Xfv-.5?wsdyix6AhM.77,Dzu]GL/R>r#ihFpeHaV:coR[T-I#JM:N5LAăU"dkXsb1fpV?uoG>eSI8,4kFe17tR/;Ah0K'r=v\?+,)fh;)=/ebd6UuSdNxCdUy)ăU"fhV/xtN&Pd'u%p()9%%%%-1%JKIaIag(,#u*%%%%8%%%.%%(%&fy%jwSwUf&Nf-ăU"6/PZ^1Tl/K]Q))M))))tmx*IQ00lhVkJ1cIQK(XsRB+%qn<F>llDDvVI,8,uPhPăU"nW#DvHM,NTmWdYDNp?9%ru^2aPhp.uh*rmBRhjMLKcpHrp=I/g]ZTeBpM.6Gz/IăU"0-DiO->>s4sn^8HCanovLs$K+4IKX630ZsLv<-$$%4#2LgETVG]/fT7U7m^TM]iăU"OliM_<vUuRrf6mxTc^rC?$GT^6H$lcqB%OE&$zb?PBmwNqig2qY4Q]5$GkV+F*YăU"X6InV;Mbm>(ZC&(G:Mq,)jEFa^qFz.iZum'&*L\kh)-F_rMR68TI'3WKosU-pKTăU"WH*;jJ4&?TI6SSp?)OkOZZ5%t/pE9GS_lAs'b?/k-UKmo0.u>&;'lmgBQ#aEIb8ăU"5mYD/G),2T=8LQ7R7PcTqA;l7(-lqiT;g:C1U1>^PDV)5eHq6eK:yXH&6_Zr5aFăU"r)T>R9YYUIsB0#EQM13$aOQQYA0PJ1b5Ef1x$PKj(^22H9#OMK<=1-'u:/5'9fwăU"92Q.-qjjhf+EDa>da^#qsEqX/n2Y-B5rlq);JUo$*uc4Zh;)1vfi=v\Xjr88KvUăU"epPifo0nl.oXEZ903tnu,L>jhHFV\>q>eul2Ur<jcxGviRurY15,7&Ph:*+GOuEăU"^n^%XN:i&YD6')u(w7OS)Twy08y=<IX9L:_D0EZTbpKjNlyIDUz\eH/hOXK>&dPăU";ii6Z*D(b/xTwrc\e.e0_5q-y)jH6YUn)bWuNW/y_A*9cTC^\,y%n77EEaIxh>băU"J]E>_LNvf[x\[j0*U)4fu+bdTWQ1,zEvKR-n+jEEzuEJPat\KKUc)4WQ(nH$.SAăU"TNI2zSiyce0dh8tSUK=lMxS=xHeLzOt9^g'EfeRtq)*,,a]rxJ>qOu&)KTP(T7VăU"b-Ctp_D(y#O[tAWk2(JV&kVgsFS7MxGu#rsJoTZ')-PcqCdOM<cY3'=0pb5AJ_;ăU"r7QN.vk#&lIUmi*V/X^%cnV_)2A=*KjO-$WliQ#(H2y/*>0/u2hYE/K$xHT'G?+ăU"R77q:N^*rm)9f*+jnx*ekUjrKt%RsjT#)N/\,q(#lNwaRC.2>E\m3&jC4r:gG>9ăU"Q.<Ac-b-;BJ?7#xKOOi7K9EhR0U^N-fkd/kswU7t-BroEg(qL+n\'>%$k6K;Oh[ăU"CLsnuS\RldLt;YY;C7=tnJB>6aKH6WYg%[bT9a0bh]w/sRG.t8=/IG6tDCU+1wEăU"AT439]V.\)^(cC\kCR6$DSJc$rmL5IzXBQ=b=P?6#IOPW2(>#\p,8?4^?k$0$\RăU"x5iL1>9V'qkh\Qs/l?R.korXf)k;+-WAQSk,PhLY/*?CoQe%In(UxKJiJ'dd9rhăU"J/(pC8Q9$qo5nT,wp8e%k^OPTF:CHI2]L5d>qCnmJpDUs<cra4ZQpOBViOKP*oSăU"VS:d95lIC;F)Z6<Fo&$>puX^v=YVJmqPBZ]Qre7EYB?u]+c^KmBxXBro$0fcsBVăU">nFSUcd;;?d4\=31xeJ2;,x4<20lbd1esp;$o3bxfUu6\#Z)\4[9x$O)dY5$HmnăU"l>Qngu4g%dkUG'V>ENNxlCIt]<Q(A+A4iwAbF<[=)h]qLY>iNy:.S>g1ttZBvqeăU"?MEp%mQ$.fMQ=7;i#jz7x%)?k5T3ECz*#=>'LuU:;?)Yc7g?JoV#?PtG[d'U]=_ăU"[BV?0S+\7CU:%.\$,KV7d?<Pq<;K\xXu7?HjjzPNqH[v;.:tZ42WxY(VsDx9Xr3ăU"]303IbN;_\Ghm;G1c8jj#Ev=8Dp=r(eWF;Gh<v5BU73=yMgx(2zprhvJL66[eE=ăU"E)q8l$gXZe(Ex8+8bxN%kM%FdZT>eM^^.O$+k>Mh5:2F+G,:cIOJ6CE[&RZ7=RnăU"SMgtnm;q[MnKKdPC<?=8cyI<ld.,lNOxeM*kaST$Nw6sFD)VjA(C92R6$9tiKguăU">54h2x&DZ;280u\q=vS*w>up%()9%%%%-%)THIIlsdZF%:&%%%%,%%%-%%%%knqăU"f#Swf&EfbfZ&RU5k7d8>Q\Gne&N-E#',q.ZbtGiY:?Xx,[=;/NyuPVD+&Vc+)*XăU"[8Km3%Xp&T5v97nN\]cG+QHSBGK)NPD<[t8T/dZ37hV80=l&.&iO)A1E(A\O%2MăU"JO&)og(I/EH?hOU>&5[4I(C2KF*?aG.a-&.c1#'j*/Y-=j0f22KS;U[eV[:2l6văU"AAB&4^+I/OOj5)mspsrd7I6$D(<qzmC?mYJ&tby2[Nadl*V0r]hLA>lwLA#_dHUăU"$a_]:V&Px,H*TLj]lhNY^1lluo01p1Hd1xrAjV(XoKV[%Yv8TqbLg)Xt]<zNm?KăU"ne#ascl$n*v5>$nHsD$xoZxWS^u&vSSuH&vw%)up(%)9%%%%-%n&YII+leOfh%(ăU"%%^%-%%-#%%%&(f%jS#gfxlgz:>SRm9v]E=N]3(n27m&GQne3VC,XpI=9/M;vc^ăU"RS1=y<*(T)QqpJ6A;Cjx$/)Ii?E2$cW$G17$noT5X^#AJ?\)5Yi^#Whk*m78o>-ăU"'0:2q1yUQ+MM'lhyRI/x>aY1:ZtM,Gzx^D,Lxu%5bXa0H47Uljd3BfThme-LkqQăU"Eq1]7pu<NJuvG$S1;>B/mG\UEpxSYpXXrMstZH)2\%'JjAbzq6sZK0clrx*7Eo5ăU"Nab9JU)nAt)^6S)Dp]i#W(':Tf?cvYFq5#-9BA4'n?YjcG?:#KrS<<:1$/2VF-NăU"8W])i<3+*EUWw68+#*id&Nk#Ohrq<i\#NVn5Z]LHG'IcB=0oVxrQn*tp<)P*%2năU"euQVubT#6&.clzZC4FZ35lM94X4IEpAt4=UB%yOp1vVz4qhR7cc1E;Ii#^AYH]IăU"Lm'L*kOPh'<D7i=k4HRM87BAs%fDLBX7T_,5[W8?/R6Gw&jeu&5T_u\lLOZJvo^ăU"Q]./)gPQjVn[30-61uB?uJagC#g3r<NxlpfqH[OqpWSLnV=6k8gP&kAvx6m?3Z+ăU"l_56[DHXie8f-t<>#'BIriM\eAT\-=A6quk?<vyS3\JyWPVItKTk4GaUt12o:IwăU"Q[mjiphvC&\[#olMRlL/\RJQo%p#6T>W>abR%dkR+$ni<b)(WPxP(J1-Ez1NE1MăU"k**tJPiaCYd*^vFUC9JG,O*J%.?&TLKsJi,;KbQkNecEUrXoR'[uv>^33L?:N8&ăU"?CCh$Y1,,[tg+YLv[('8niU]'OV3EpjTQ>htw5fqcy>?m7imD-64<6RtiJrc_:WăU"1<0*sWt'T$e(8\-CGx'PdEPW=+t_wOT>Q+P;HtsYMOG69VufVIyr2]g(jx6mqm>ăU";skaP*Ly\dd64TJ_T0l_a)tYO[r^;AZqMqF/PwEK#fbm)S_,dqVQvo-;5^ElOOJăU"JcpBWPPj0+UYvVWB(qmF9kX6E_>X\*^xGCEcX_E&8tEh(x&W'PxKvNVG520r?nvăU"hu$yDRyb.Y*t+wwM4l]gde(]DjQMs-*Wb#3;8sGJE/c?6We(BSnMJU'[E)j$D)$ăU"7x1mu4cNh-ikRI*Rq7nQHtu[hSQ<24c]qEye5To?:$(mS9,DuuYSJe+5.(QsABeăU"yy9YQgo&>cN*o3V(N[/p[4R?#$X]8V;&QJuVuME3'TL,lRn?1=%lTGo8[4[j-nmăU"t5StI:drF&DBO2<6i\7T>.On$QQr=n<?ZZF0fuNKrf(CTk)>A7R(;-]j<YV5IimăU"_VHOTO.VTH.Y#XA>#m'x'up%()9%%%%-%)0JII?ljPO&\+%%'9-%%%+%%%%rjSwăU"Cf&rb(0Gyls:#b>5S^A$ql-(LA#_>IRBSLjYDV?D2,2s4SomdrBSMc*+C><o.g6ăU"rJPPK%iDUUl?#Rr'Q(vYGVT&7.oO;X4x#K*D:[e\IDiK;jD&yzh&<8m2.u*$ThuăU"gevvZHrHhd^$4CAcmI1Miu4((=2oN)2[hU7K=<-aFDw'9D-*q.X6\w6#jSEB/R^ăU"^VHmDg(>X]=d0oLP.zg?gOaG<SpI2M/E*46[sH^^A%YBM;5XQ/)bMi+OfY0Zk2AăU"=2U&WxL:e^J2JQ1k1mCyQ$elb4qSR8NBb^SZX#f.v[SL'*#9DB3K13JywDUx-MbăU"$7Cb:CJ6Srnk]M?O3+9Kh8*5C78nB8(uP8&p:g<*::t/tIUhu6D*Q7Qt$[-SYf;ăU":#gf2kq*M%)x.5]7sQU(Xxicwfi:id]Vgf:ciAhxBE?D)^6mQB]S/e06l(A^x#JăU"(N.1rDSl[C3]gYEh%P$$kGw+\SpJ:pzQ=2%H=J[Sm8l9Yq+SFIxuhbPs#h\C9B7ăU"aYHM'A:NT'*A#B94o/t*)[Rj5#pKv=:')hz83lyrW-^4nJR7C(aOQgQx/?.].PaăU"k'c7$c,:r>kQEN:Ybi;w*f0+nfM-.9tIQ1F8+]HU/IP-7E^z*7osr[1IM_UwQ&săU"0[.^zgnygf=ve;j7]Mg7efEYFbS[C,FJ5<IA.wUf^x[Q:(>V[B?T*Z<9e>g[gG0ăU"+Y'mA)i69^U,j6_0b';57k+BGA=.Pb$%*Z)&_d[qed&AF=3M6cBg2*1(K&t3yYEăU"FW5cChbuk^^S_SF#KNP>(PlCmVv=-AvsZ_XiA1ir78nF<_d0Q>/Pk*_>nSNAD:oăU"yBT<g8A\2YDu?6l'hN?mUrjUr=AAaafoWpNe9X(P*d1Y2nNU*Lx$u^c-csqRmWsăU"HlrFX$p6#_&SP<HjwtM:Pvc][$u>O2PozW'L,'KQu4bcI9Usr(+vsShwB:?Wog*ăU"P;7P>>g^X_4#8DFl]cC]AJcyfWk#p^]Pzmm_/q'8=6F6?L/9T0>wDjdrv_iP\hZăU"pS*MeFlGb5wU\.wz;%8o'4R2Kl4GWYvxR:-:6,kDncLFyS&^mUAu3^:HMi'Stg%ăU"BQ1MR8_7eUPL+92QV.?non't)ay&7T;HMXgwn%1Xu\t%fcFx0=L<P?Ar.2;p/%,ăU"tEHoUFa'<jCDUUuv;*zA9<G7./m*eP=tMr:FIP3V&DQ3j(h(pOmb]?VSkC)<^_*ăU"eCUVK+XI.jKnT%PPXL$e_V4Tdm3F$Jqj66n0.'C?h[eLd.%e1^zV)'cZAarK%tQăU"Y2bsLh.:zABm2hcl$HnHn3WHHdUEeOEVnsvh&<.x6r?vC42j?^%iKxO_d-%whj.ăU"vLD<Dt;rb(4o99xtHL8QKpIyM3R$$\pBKm4:elV64pNH)iI2i*n#m0*<rmgflUEăU"Bf?9f$Q*5W74hVY>5jlUd<7:bGSY92Lif+\RE<uW2FNarfF%4TthhYMNot6NvB2ăU"2%E=BR,OvE-WkNd,sz06.6^vFYLB7;9kyw1rkg?Lx<NGidi:F%oYudg;kI1DjK[ăU"D;GKkbx^ef4^lRgf\ol&7ENJa2\:lX03tH3O(.lvUL<*>pd1t^_H9^+QEQu*%7/ăU"PMjUFkK4HTkldI7?pF?h3>ppF?Y(5wlA$RYQ=P:&uOfV/ifP<Xi3zHVosR&&o#%ăU"dwcCG(HcxqHBYtt7Nt3d\VitE>U?4_bLbMnLFIllRK.=L=guhfsVr,,VpXdlTnWăU"eMo$4bVNB%>/\U+C2Z<NGLpzh:B&PDplBleJC,j>fEAuB*-+04)rfSU=*Tmr2>HăU"'ptC-Xi,K6D4LH[9>D].&dY%FQV_-j\r_l9T#$[[MZ^eJ_%,8&AW&+*Jtf_p-sdăU"U,bMT$P15#a7FA[EUPt>VuR1tFE%?xJ?L(4nB=#=M3[/copEBx_=PQ<V^Kku,2răU"ukooG>n(bT[;f6k%Q9]0luqugsh47MlRrxGb,8ex-Ig((;?LRQ<q6<Ft:qQLu0VăU"o^Zvt8ZP[KGM[F$=ke++8:MTZ&+b#Be?^jBy\5P86TU\_Dk<47udKshMC:Ij4A)ăU"rRTsXwmh/Em._N=%qb.H:DUTg?mJ*oxIA#DH_$LYI+=xq+x8xN]/7FsO]#+0R8văU",m,ZedhjwaL-q^xF+coOu%p()9%%%%-1%<YImI69?('V(%(%[.%%%0%%%%gru/&ăU"f%j%SgfxJdz<b]S[5wTG1x0V^_l#RT1(lU3<L?'Y0YN)5[XYaXvG\[*YZ+aPD,găU"c(ho_IS]p&\ncU?<SLmaZH'Oep$+;Ai.Vm\K;_ao9/-VVLqF;R3)3^-)Bu9oC&MăU"+2<sn:7LaeT$i5w%%34aZgCl$u;ht/V90M%'?iiwhutl+YvY]jI^j3F3HM2PyhsăU"E>T,*XkT<%U9&)P$)cu'0f*OAQ2L-5S,a=/?*K2D(cgiqop(/D+;W?jcw)&.yPrăU"tqZ9^LVC5<C=[xef3fmzB;Z0Fh7AefLZiPn12Oby]Cz.(sp3g4L;h&&]2BJuXrYăU"Pu3knGUg.<=]kEo1&30[=U0YGL'%E9Sh<Z->N.W=uR;?Oaf,WTrf*31TVm3ggI0ăU"gJed#swsmZX^h$FS?^b\8JBiKl=aGUmQw99#\'T9j()6\3;xV\1uE(4[ID7w.4zăU"ZO[EVfr&Wf&S/)LwSQD:\hD1Hg$4v2C(#Vf;o1YkAXgMhKal.GG)f$GWofBp-5?ăU"[]u[ieHo/JvLFZ9gTncHeKiP_^O,/Lw0uR;1M9U.^l1_gf-a#b$=;rM5J;UaatBăU"-5*&q,.88cx+6],C)%WfCQpX3-H\Aa37'8L?JMAniSA^r$M]8nxCnqMk]B%_vCDăU"/:T;$K*aDvojH*Wedz4;/[C[6*&gD1XnQo:XUP,JaG0c1QeE#gy/^iP#0TjDF#văU"Xc5_1,_aH5,PIxBVMP>KX]+d&if%vP:=kaUWT6uJ6CxmHWPDwelZjyV+e4Qh#(hăU"5Ko0^ZPlf9DWg\\QVpKyUC##v4%M60j82Fk]u8*o'sS;[f#+G#1teHAmGA6tt*[ăU"XU,i:)EgaG*+)x07gpu]B\U>O>5CvGmvYS6n/Gp<S*Y^uIbpln]W(S<&-Wwj0HhăU"L2J.JYYi1nziZ1CnitC+8rKd4N?JPIHu\40I8=YYtKaZmhE25EiY+s2H(>ox%')ăU"cmiRvc4,-E74xV,+f/S-e8-?&EedXaCAdt6HClpV#p8W&22$&1yZxaViX;'Pe,2ăU"NM<:sj;R4H6Zg4Iap[HC[i\'+hdmg2%mHp\%?nFjMSJr(S-hP']lBqAGTw'XYdrăU"%:8gx2u;A(#f*Z6o4LQxP[CvVw.'X8E;Co3&wIy/,F:(a67+)%Ys)GO5i_J#v5+ăU"ix'u%p&'9%%9%%%%-%T\YII?lFw7J%5%%%%h%%-%%%%%%%%%%%%E%%%%%%%#%yjăU"'%ySwf&&up&%'9%9%%%%-1%JKIaIag(,#u*%%%%8%%%.%%%%%%%%%%%E[%%%p#5ăU"%%&%fyjw#Swf&%up&'%9%9%%%%-%)THIIlsdZF%:&%%%%,%%%-%%%%%%%%%%%E%ăEND SUBăSUB V2ăU"%%%?<%%%kn%qfSw(f&up%&'9%%9%%%#-%nY[II+e<Ofh(%%%^-%%%-%%%%%%%%%ăU"&%%E%%%%z=%%/&f%j%Sgfx%up&'%9%9%%%%-%)0JII?ljPO&\+%%'9-%%%+%%%%ăU"%%%%%%%E%.%%9A%%%rj#Swf&%up&'%9%9%%%%-%)<YII=69?'&V(%%&[.%%%0%%ăU"%%%%%%%&%E%%%%#H%%%grCu&f%%jSgf%xup*%+%%%%%+%+%%k&%+%DK%%%%%ăEND SUBăV2ăCLOSE:IF S=53AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăKenneth Green                  FIREWORKS                      alt.lang.basic                 12-31-97 (22:37)       QB, QBasic, PDS        772  13825    FIREWORK.BASREM Fireworks   By Kenneth GreenăREM QBasic version made on December 31, 1997.ăREM I decided to make a QBasic version of this program so people canăREM see that it is made using a BASIC like language called ASIC 5.0.ăREM I only changed the lines with random statements, add GOTO statements,ăREM and switch the X to vertical and Y to horizontal instead of the otherăREM way around for the PSET statements.ăREM You are free to change it anyway you want to, but be careful notăREM to wreck it!ăREM CCX is the vertical position, CY is the horizontal.ăREM All the variables starting with D are the directions to move.ăREM There are 12 seperate stars that move at one time.ăREM As soon as one moves off the screen, it restarts going another direction.ăREM You can easy change the speed just from the wait loop for tim=1 to 300ăREM just change the 300 to something else. That line is easily seen betweenăREM long lines I made for you.ăREM Have Fun!ăăesc$ = CHR$(27)ăRANDOMIZE TIMERăCCX = INT(RND * 159) + 10ăRANDOMIZE TIMERăCY = INT(RND * 300) + 10ăRANDOMIZE TIMERăFINI = INT(RND * 100) + 10ăCLSăSCREEN 13ăPRINT "       Fireworks    (QBasic Version)"ăPRINTăPRINT "        By Kenneth Green"ăPRINT "        ken@onramp113.org"ăPRINTăPRINT "This program simulates fireworks."ăPRINT "It randomly starts the explosions"ăPRINT "and also puts them on a random place."ăPRINT "This program is Public Domain and may"ăPRINT "be copied for free."ăPRINT : PRINTăPRINT "To stop the program, press Esc key."ăPRINTăPRINT "Press enter to start.";ăINPUT st$ăCLSăx = CCXăy = CYăxx = CCX + 1ăyy = CYăxx2 = CCX + 1ăyy2 = CY + 1ăxx3 = CCXăyy3 = CY + 1ăx2 = CCXăy2 = CYăxxx = CCX + 1ăyyy = CYăxxx2 = CCX + 1ăyyy2 = CY + 1ăxxx3 = CCXăyyy3 = CY + 1ăx3 = CCXăy3 = CYăxxxx = CCX + 1ăyyyy = CYăxxxx2 = CCX + 1ăyyyy2 = CY + 1ăxxxx3 = CCXăyyyy3 = CY + 1ăx4 = CCXăy4 = CYăxxxxx = CCX + 1ăyyyyy = CYăxxxxx2 = CCX + 1ăyyyyy2 = CY + 1ăxxxxx3 = CCXăyyyyy3 = ccy + 1ăx5 = CCXăy5 = CYăx6 = CCXăy6 = CYăx7 = CCXăy7 = CYăx8 = CCXăy8 = CYăx9 = CCXăy9 = CYăx10 = CCXăy10 = CYăx11 = CCXăy11 = CYăx12 = CCXăy12 = CYăRANDOMIZE TIMERădirections:ăone:ăRANDOMIZE TIMERăCL = INT(RND * 50) + 20ăRANDOMIZE TIMERăD = INT(RND * 4) + 1ăRANDOMIZE TIMERăD24 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFătwo:ăRANDOMIZE TIMERăCL2 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD2 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD17 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăthree:ăRANDOMIZE TIMERăCL3 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD3 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD18 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăfour:ăRANDOMIZE TIMERăCL4 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD4 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD19 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăfive:ăRANDOMIZE TIMERăCL5 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD5 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD20 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăsix:ăRANDOMIZE TIMERăCL6 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD6 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD21 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăseven:ăRANDOMIZE TIMERăCL7 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD7 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD22 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăeight:ăRANDOMIZE TIMERăCL8 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD8 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD23 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăănine:ăRANDOMIZE TIMERăCL9 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD9 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD13 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăten:ăRANDOMIZE TIMERăCL10 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD10 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD14 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăăeleven:ăRANDOMIZE TIMERăCL11 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD11 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD15 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFătwelve:ăRANDOMIZE TIMERăCL12 = INT(RND * 50) + 20ăRANDOMIZE TIMERăD12 = INT(RND * 4) + 1ăRANDOMIZE TIMERăD16 = INT(RND * 4) + 1ăIF tt = 1 THENă   RETURNă   END IFăbegin:ătt = 1ăgo:ăsta = sta + 1ăIF sta > FINI THENă    sta = 0ă    RANDOMIZE TIMERă    FINI = INT(RND * 100) + 100ă    RANDOMIZE TIMERă    CCX = INT(RND * 159) + 10ă    RANDOMIZE TIMERă    CY = INT(RND * 300) + 10ăEND IFăREM --------------------------------------------------------------------ăREMăREM      Wait Loop!    Change the 300 to another number to change speed.ăREMăFOR tim = 1 TO 300: NEXT timăREM --------------------------------------------------------------------ăPSET (y, x), 0ăPSET (yy, xx), 0ăPSET (yy2, xx2), 0ăPSET (yy3, xx3), 0ăPSET (y2, x2), 0ăPSET (yyy, xxx), 0ăPSET (yyy2, xxx2), 0ăPSET (yyy3, xxx3), 0ăPSET (y3, x3), 0ăPSET (yyyy, xxxx), 0ăPSET (yyyy2, xxxx2), 0ăPSET (yyyy3, xxxx3), 0ăPSET (y4, x4), 0ăPSET (yyyyy, xxxxx), 0ăPSET (yyyyy2, xxxxx2), 0ăPSET (yyyyy3, xxxxx3), 0ăPSET (y5, x5), 0ăPSET (y6, x6), 0ăPSET (y7, x7), 0ăPSET (y8, x8), 0ăPSET (y9, x9), 0ăPSET (y10, x10), 0ăPSET (y11, x11), 0ăPSET (y12, x12), 0ăx = x + Dăy = y + D24ăxx = xx + Dăyy = yy + D24ăxx2 = xx2 + Dăyy2 = yy2 + D24ăxx3 = xx3 + Dăyy3 = yy3 + D24ăx2 = x2 - D2ăy2 = y2 + D17ăxxx = xxx - D2ăyyy = yyy + D17ăxxx2 = xxx2 - D2ăyyy2 = yyy2 + D17ăxxx3 = xxx3 - D2ăyyy3 = yyy3 + D17ăx3 = x3 - D3ăy3 = y3 - D18ăxxxx = xxxx - D3ăyyyy = yyyy - D18ăxxxx2 = xxxx2 - D3ăyyyy2 = yyyy2 - D18ăxxxx3 = xxxx3 - D3ăyyyy3 = yyyy3 - D18ăx4 = x4 + D4ăy4 = y4 - D19ăxxxxx = xxxxx + D4ăyyyyy = yyyyy - D19ăxxxxx2 = xxxxx2 + D4ăyyyyy2 = yyyyy2 - D19ăxxxxx3 = xxxxx3 + D4ăyyyyy3 = yyyyy3 - D19ăx5 = x5 + D5ăy5 = y5 + D20ăx6 = x6 - D6ăy6 = y6 + D21ăx7 = x7 - D7ăy7 = y7 - D22ăx8 = x8 + D8ăy8 = y8 - D23ăx9 = x9 - D9ăy9 = y9 + D13ăx10 = x10 + D10ăy10 = y10 - D14ăx11 = x11 - D11ăy11 = y11 - D15ăx12 = x12 + D12ăy12 = y12 + D16ăPSET (y, x), CLăPSET (yy, xx), CLăPSET (yy2, xx2), CLăPSET (yy3, xx3), CLăPSET (y2, x2), CL2ăPSET (yyy, xxx), CL2ăPSET (yyy2, xxx2), CL2ăPSET (yyy3, xxx3), CL2ăPSET (y3, x3), CL3ăPSET (yyyy, xxxx), CL3ăPSET (yyyy2, xxxx2), CL3ăPSET (yyyy3, xxxx3), CL3ăPSET (y4, x4), CL4ăPSET (yyyyy, xxxxx), CL4ăPSET (yyyyy2, xxxxx2), CL4ăPSET (yyyyy3, xxxxx3), CL4ăPSET (y5, x5), CL5ăPSET (y6, x6), CL6ăPSET (y7, x7), CL7ăPSET (y8, x8), CL8ăPSET (y9, x9), CL9ăPSET (y10, x10), CL10ăPSET (y11, x11), CL11ăPSET (y12, x12), CL12ăIF x > 198 THENă   PSET (y, x), 0ă   PSET (yy, xx), 0ă   PSET (yy2, xx2), 0ă   PSET (yy3, xx3), 0ă   x = CCXă   y = CYă   xx = x + 1ă   yy = yă   xx2 = xxă   yy2 = y + 1ă   xx3 = xă   yy3 = y + 1ă   GOSUB one:ă   END IFăăIF x6 > 198 THENă   PSET (y6, x6), 0ă   x6 = CCXă   y6 = CYă   GOSUB six:ă   END IFăăIF y > 320 THENă   PSET (y, x), 0ă   PSET (yy, xx), 0ă   PSET (yy2, xx2), 0ă   PSET (yy3, xx3), 0ă   x = CCXă   y = CYă   xx = x + 1ă   yy = yă   xx2 = x + 1ă   yy2 = y + 1ă   xx3 = xă   yy3 = y + 1ă   GOSUB one:ă   END IFăIF x2 > 198 THENă   PSET (y2, x2), 0ă   PSET (yyy, xxx), 0ă   PSET (yyy2, xxx2), 0ă   PSET (yyy3, xxx3), 0ă   x2 = CCXă   y2 = CYă   xxx = x2 + 1ă   yyy = y2ă   xxx2 = x2 + 1ă   yyy2 = y2 + 1ă   xxx3 = x2ă   yyy3 = y2 + 1ă   GOSUB two:ă   END IFăIF y2 > 320 THENă   PSET (y2, x2), 0ă   PSET (yyy, xxx), 0ă   PSET (yyy2, xxx2), 0ă   PSET (yyy3, xxx3), 0ă   x2 = CCXă   y2 = CYă   xxx = x2 + 1ă   yyy = y2ă   xxx2 = x2 + 1ă   yyy2 = y2 + 1ă   xxx3 = x2ă   yyy3 = y2 + 1ă   GOSUB two:ă   END IFăIF x3 > 198 THENă   PSET (y3, x3), 0ă   PSET (yyyy, xxxx), 0ă   PSET (yyyy2, xxxx2), 0ă   PSET (yyyy3, xxxx3), 0ă   x3 = CCXă   y3 = CYă   xxxx = x3 + 1ă   yyyy = y3ă   xxxx2 = x3 + 1ă   yyyy2 = y3 + 1ă   xxxx3 = x3ă   yyyy3 = y3 + 1ă   GOSUB three:ă   END IFăIF y3 > 320 THENă   PSET (y3, x3), 0ă   PSET (yyyy, xxxx), 0ă   PSET (yyyy2, xxxx2), 0ă   PSET (yyyy3, xxxx3), 0ă   x3 = CCXă   y3 = CYă   xxxx = x3 + 1ă   yyyy = y3ă   xxxx2 = x3 + 1ă   yyyy2 = y3 + 1ă   xxxx3 = x3ă   yyyy3 = y3 + 1ă   GOSUB three:ă   END IFăIF x4 > 198 THENă   PSET (y4, x4), 0ă   PSET (yyyyy, xxxxx), 0ă   PSET (yyyyy2, xxxxx2), 0ă   PSET (yyyyy3, xxxxx3), 0ă   x4 = CCXă   y4 = CYă   xxxxx = x4 + 1ă   yyyyy = y4ă   xxxxx2 = x4 + 1ă   yyyyy2 = y4 + 1ă   xxxxx3 = x4ă   yyyyy3 = y4 + 1ă   GOSUB four:ă   END IFăIF y4 > 320 THENă   PSET (y4, x4), 0ă   PSET (yyyyy, xxxxx), 0ă   PSET (yyyyy2, xxxxx2), 0ă   PSET (yyyyy3, xxxxx3), 0ă   x4 = CCXă   y4 = CYă   xxxxx = x4 + 1ă   yyyyy = y4ă   xxxxx2 = x4 + 1ă   yyyyy2 = y4 + 1ă   xxxxx3 = x4ă   yyyyy3 = y4 + 1ă   GOSUB four:ă   END IFăIF x5 > 198 THENă   PSET (y5, x5), 0ă   x5 = CCXă   y5 = CYă   GOSUB five:ă   END IFăIF y5 > 320 THENă   PSET (y5, x5), 0ă   x5 = CCXă   y5 = CYă   GOSUB five:ă   END IFăIF y6 > 320 THENă   PSET (y6, x6), 0ă   x6 = CCXă   y6 = CYă   GOSUB six:ă   END IFăIF x7 > 198 THENă   PSET (y7, x7), 0ă   x7 = CCXă   y7 = CYă   GOSUB seven:ă   END IFăIF y7 > 320 THENă   PSET (y7, x7), 0ă   x7 = CCXă   y7 = CYă   GOSUB seven:ă   END IFăIF x8 > 198 THENă   PSET (y8, x8), 0ă   x8 = CCXă   y8 = CYă   GOSUB eight:ă   END IFăIF y8 > 320 THENă   PSET (y8, x8), 0ă   x8 = CCXă   y8 = CYă   GOSUB eight:ă   END IFăIF x9 > 198 THENă   PSET (y9, x9), 0ă   x9 = CCXă   y9 = CYă   GOSUB nine:ă   END IFăIF y9 > 320 THENă   PSET (y9, x9), 0ă   x9 = CCXă   y9 = CYă   GOSUB nine:ă   END IFăIF x10 > 198 THENă   PSET (y10, x10), 0ă   x10 = CCXă   y10 = CYă   GOSUB ten:ă   END IFăIF y10 > 320 THENă   PSET (y10, x10), 0ă   x10 = CCXă   y10 = CYă   GOSUB ten:ă   END IFăIF x11 > 198 THENă   PSET (y11, x11), 0ă   x11 = CCXă   y11 = CYă   GOSUB eleven:ă   END IFăIF y11 > 320 THENă   PSET (y11, x11), 0ă   x11 = CCXă   y11 = CYă   GOSUB eleven:ă   END IFăIF x12 > 198 THENă   PSET (y12, x12), 0ă   x12 = CCXă   y12 = CYă   GOSUB twelve:ă   END IFăIF y12 > 320 THENă   PSET (y12, x12), 0ă   x12 = CCXă   y12 = CYă   GOSUB twelve:ă   END IFăIF x < 5 THENă   PSET (y, x), 0ă   PSET (yy, xx), 0ă   PSET (yy2, xx2), 0ă   PSET (yy3, xx3), 0ă   x = CCXă   y = CYă   xx = x + 1ă   yy = yă   xx2 = x + 1ă   yy2 = y + 1ă   xx3 = xă   yy3 = y + 1ă   GOSUB one:ă   END IFăIF x6 < 5 THENă   PSET (y6, x6), 0ă   x6 = CCXă   y6 = CYă   GOSUB six:ă   END IFăIF y < 5 THENă   PSET (y, x), 0ă   PSET (yy, xx), 0ă   PSET (yy2, xx2), 0ă   PSET (yy3, xx3), 0ă   x = CCXă   y = CYă   xx = x + 1ă   yy = yă   xx2 = x + 1ă   yy2 = y + 1ă   xx3 = xă   yy3 = y + 1ă   GOSUB one:ă   END IFăIF x2 < 5 THENă   PSET (y2, x2), 0ă   PSET (yyy, xxx), 0ă   PSET (yyy2, xxx2), 0ă   PSET (yyy3, xxx3), 0ă   x2 = CCXă   y2 = CYă   xxx = x2 + 1ă   yyy = y2ă   xxx2 = x2 + 1ă   yyy2 = y2 + 1ă   xxx3 = x2ă   yyy3 = y2 + 1ă   GOSUB two:ă   END IFăIF y2 < 5 THENă   PSET (y2, x2), 0ă   PSET (yyy, xxx), 0ă   PSET (yyy2, xxx2), 0ă   PSET (yyy3, xxx3), 0ă   x2 = CCXă   y2 = CYă   xxx = x2 + 1ă   yyy = y2ă   xxx2 = x2 + 1ă   yyy2 = y2 + 1ă   xxx3 = x2ă   yyy3 = y2 + 1ă   GOSUB two:ă   END IFăIF x3 < 5 THENă   PSET (y3, x3), 0ă   PSET (yyyy, xxxx), 0ă   PSET (yyyy2, xxxx2), 0ă   PSET (yyyy3, xxxx3), 0ă   x3 = CCXă   y3 = CYă   xxxx = x3 + 1ă   yyyy = y3ă   xxxx2 = x3 + 1ă   yyyy2 = y3 + 1ă   xxxx3 = x3ă   yyyy3 = y3 + 1ă   GOSUB three:ă   END IFăIF y3 < 5 THENă   PSET (y3, x3), 0ă   PSET (yyyy, xxxx), 0ă   PSET (yyyy2, xxxx2), 0ă   PSET (yyyy3, xxxx3), 0ă   x3 = CCXă   y3 = CYă   xxxx = x3 + 1ă   yyyy = y3ă   xxxx2 = x3 + 1ă   yyyy2 = y3 + 1ă   xxxx3 = x3ă   yyyy3 = y3 + 1ă   GOSUB three:ă   END IFăIF x4 < 5 THENă   PSET (y4, x4), 0ă   PSET (yyyyy, xxxxx), 0ă   PSET (yyyyy2, xxxxx2), 0ă   PSET (yyyyy3, xxxxx3), 0ă   x4 = CCXă   y4 = CYă   xxxxx = x4 + 1ă   yyyyy = y4ă   xxxxx2 = x4 + 1ă   yyyyy2 = y4 + 1ă   xxxxx3 = x4ă   yyyyy3 = y4 + 1ă   GOSUB four:ă   END IFăIF y4 < 5 THENă   PSET (y4, x4), 0ă   PSET (yyyyy, xxxxx), 0ă   PSET (yyyyy2, xxxxx2), 0ă   PSET (yyyyy3, xxxxx3), 0ă   x4 = CCXă   y4 = CYă   xxxxx = x4 + 1ă   yyyyy = y4ă   xxxxx2 = x4 + 1ă   yyyyy2 = y4 + 1ă   xxxxx3 = x4ă   yyyyy3 = y4 + 1ă   GOSUB four:ă   END IFăIF x5 < 5 THENă   PSET (y5, x5), 0ă   x5 = CCXă   y5 = CYă   GOSUB five:ă   END IFăIF y5 < 5 THENă   PSET (y5, x5), 0ă   x5 = CCXă   y5 = CYă   GOSUB five:ă   END IFăIF y6 < 5 THENă   PSET (y6, x6), 0ă   x6 = CCXă   y6 = CYă   GOSUB six:ă   END IFăIF x7 < 5 THENă   PSET (y7, x7), 0ă   x7 = CCXă   y7 = CYă   GOSUB seven:ă   END IFăIF y7 < 5 THENă   PSET (y7, x7), 0ă   x7 = CCXă   y7 = CYă   GOSUB seven:ă   END IFăIF x8 < 5 THENă   PSET (y8, x8), 0ă   x8 = CCXă   y8 = CYă   GOSUB eight:ă   END IFăIF y8 < 5 THENă   PSET (y8, x8), 0ă   x8 = CCXă   y8 = CYă   GOSUB eight:ă   END IFăIF x9 < 5 THENă   PSET (y9, x9), 0ă   x9 = CCXă   y9 = CYă   GOSUB nine:ă   END IFăIF y9 < 5 THENă   PSET (y9, x9), 0ă   x9 = CCXă   y9 = CYă   GOSUB nine:ă   END IFăIF x10 < 5 THENă   PSET (y10, x10), 0ă   x10 = CCXă   y10 = CYă   GOSUB ten:ă   END IFăIF y10 < 5 THENă   PSET (y10, x10), 0ă   x10 = CCXă   y10 = CYă   GOSUB ten:ă   END IFăIF x11 < 5 THENă   PSET (y11, x11), 0ă   x11 = CCXă   y11 = CYă   GOSUB eleven:ă   END IFăIF y11 < 5 THENă   PSET (y11, x11), 0ă   x11 = CCXă   y11 = CYă   GOSUB eleven:ă   END IFăIF x12 < 5 THENă   PSET (y12, x12), 0ă   x12 = CCXă   y12 = CYă   GOSUB twelve:ă   END IFăIF y12 < 5 THENă   PSET (y12, x12), 0ă   x12 = CCXă   y12 = CYă   GOSUB twelve:ă   END IFăa$ = INKEY$ăIF a$ = esc$ THEN GOTO done:ăGOTO begin:ădone:ăSCREEN 0ăWIDTH 80ăCLSăENDăThe ABC Programmer             SMOOTH MODE13H TEXT SCROLLER   voxel@freenet.edmonton.ab.ca   01-14-98 (21:45)       PB                     93   2175     SCROLLER.BAS'=====================[ Mode 13h TEXT Scroller ]=======================ă' Scrolls using an 8x8 Character Font (more like 16x16)ă' Programmed by William Yu (1-14-98) for PowerBASICă'ă' I don't know who wrote the original Pascal code, but I used that asă' my basis for this demo.  I had to use 16x16 for it to work properlyă' but at the moment I don't know why... if you can tell me, that wouldă' really be appreciated!  This code is Public Domain.ă'======================================================================ăDEFINT A-ZăDIM FOFS AS SHARED WORD, FSEG AS SHARED WORDăDIM Bits (0 TO 7) AS SHARED BYTEăDIM ColTab (0 TO 15) AS SHARED BYTEăDIM ScrT AS SHARED STRINGăDIM Position AS SHARED BYTEăăFOR I = 0 to 7ă  READ Bits(I)ănext IăFOR I = 0 to 15ă  READ ColTab(I)ănext IăDATA 128,64,32,16,8,4,2,1ăDATA 1,1,9,9,3,3,11,11,3,3,9,9,1,1,9,3,1ăScrT =" Hi folks, this scroller was brought to you by William Yu "ăScrT=ScrT+"with the help of some Pascal code!                    "ăăGetFontăMode13hăă  Position = 1ăă  Mode13hă  GetFontă  DOă    Scrollă  LOOP UNTIL INKEY$<>""ă  TextModeăendăăăSUB Scrollă DIM I AS WORD,J AS WORD,A AS WORDă DIM CharPos AS BYTE,Character AS BYTEă DIM Colour AS BYTEă DIM Addr AS WORD,COL AS BYTEăă    Character = ASC(MID$(ScrT,Position,1))ă    for CharPos = 0 to 7ă      for I = 0 to 15ă        DEF SEG = FSegă        Addr = PEEK(Fofs+(Character*16)+I)ă        IF (Addr AND Bits(CharPos)) <> 0 thenă          Colour = ColTab(I)ă        elseă          Colour = 0ă        end ifă        DEF SEG=&HA000ă        POKE ((23*8)+I)*320+319, Coloură      next Iă      WAIT &H3DA,8ă      DEF SEG=&HA000ă      for J = 0 to 15ă        for I = 0 to 318ă          A=((23*8)+J)*320+Iă          Col = PEEK(A+1)ă          POKE A,Colă        next Iă      next Jă    next CharPosă    incr Positionă    if Position = len(ScrT) then Position = 1ăEND SUBăăSUB TextModeă  ! mov AX, &h3ă  ! int &h10ăEND SUBăăSUB Mode13hă  ! mov AX, &H13ă  ! Int &h10ăEND SUBăăSUB GetFontă  ! push bpă  ! mov ax,&H1130ă  ! mov bh,6ă  ! int &H10ă  ! mov fseg,esă  ! mov fofs,bpă  ! pop bpăEND SUBăNick Kochakian                 STAR FIELD 3D                  NickK@worldnet.att.net         01-07-98 (19:26)       QB, QBasic, PDS        139  2512     STARF3D.BAS DECLARE SUB draw.stars ()ă'Star Field 3Dă'ă'verison 1.0ă'ă'This is my first GOOD and FAST 3D star field. (Compared to SField.bas)ă'Please adjust the settings before running the program.ă'ă'This program currently has 3 layers of stars. But that's going to changeă'to 3 to 10 layers by Star Field 3D ver. 2.0ă'ă'(If you didn't change the settings yet they are currently set for:ă'a P60... Look at the chart below...)ă'ă'High res mode looks impressive with 500 stars. :)ă'ă'Have fun!ăăDEFINT A-ZăRANDOMIZE TIMERăă'Computer speed chart: (values recommended for best performance)ă'286, 386 -> stars = 50 to 150, res lowă'486      -> stars = 100 to 200ă'Pentium  -> stars = 100 to 500ăăres$ = "low"ă'res$ values:ă'lowă'highăăvideo$ = "vga"ă'video$ values:ă'vgaăăăIF res$ = "low" AND video$ = "vga" THEN scr.mode = 13: GOTO ok.ok:ăIF res$ = "high" AND video$ = "vga" THEN scr.mode = 12: GOTO ok.ok:ăăPRINT "That's not a valid configuration!": ENDăăok.ok:ăSCREEN scr.modeăăDIM SHARED starsăstars = 500ăDIM SHARED x(stars)ăDIM SHARED y(stars)ăDIM SHARED z(stars)ăDIM SHARED c(stars)ăă'z ===>  1   -   2   -   3ă'        far  --------- nearăăFOR i = 1 TO starsăăIF scr.mode = 13 THENăx(i) = INT(RND * 320) + 1ăy(i) = INT(RND * 200) + 1ăz(i) = INT(RND * 3) + 1ăEND IFăăIF scr.mode = 13 THENăIF z(i) = 1 THEN c(i) = 20ăIF z(i) = 2 THEN c(i) = 25ăIF z(i) = 3 THEN c(i) = 30ăEND IFăăIF scr.mode = 12 THENăx(i) = INT(RND * 640) + 1ăy(i) = INT(RND * 480) + 1ăz(i) = INT(RND * 3) + 1ăEND IFăăIF scr.mode = 12 THENăIF z(i) = 1 THEN c(i) = 8ăIF z(i) = 2 THEN c(i) = 7ăIF z(i) = 3 THEN c(i) = 15ăEND IFăăNEXT iăădraw.starsăăi = 1ăămove$ = "<"ăăDOăăPSET (x(i), y(i)), 0ăăIF move$ = "<" THENăIF z(i) = 1 THEN x(i) = x(i) - .7ăIF z(i) = 2 THEN x(i) = x(i) - 1.5ăIF z(i) = 3 THEN x(i) = x(i) - 3ăEND IFăăPSET (x(i), y(i)), c(i)ăă'FOR a = 1 TO 999ă'NEXT aăăIF x(i) < 0 THEN GOSUB re.rand.star:ăi = i + 1ăIF i > stars THEN i = 1ăLOOP UNTIL INKEY$ <> ""ăăENDăăre.rand.star:ăăIF scr.mode = 13 THENăx(i) = 320ăy(i) = INT(RND * 200) + 1ăz(i) = INT(RND * 3) + 1ăIF z(i) = 1 THEN c(i) = 20ăIF z(i) = 2 THEN c(i) = 25ăIF z(i) = 3 THEN c(i) = 30ăEND IFăăIF scr.mode = 12 THENăx(i) = 640ăy(i) = INT(RND * 480) + 1ăz(i) = INT(RND * 3) + 1ăIF z(i) = 1 THEN c(i) = 8ăIF z(i) = 2 THEN c(i) = 7ăIF z(i) = 3 THEN c(i) = 15ăEND IFăăRETURNăăSUB draw.starsăăFOR i = 1 TO starsăPSET (x(i), y(i)), c(i)ăNEXT iăăEND SUBăNick Kochakian                 PIXEL ANGLE BOUNCE             NickK@worldnet.att.net         01-07-98 (19:26)       QB, QBasic, PDS        61   1608     PIXANGLE.BAS'Pixel angle bounceă'ă'11/4/97 By: - Nick Kochakian -ă'ă'Ever see thoes balls that every time they hit a corner of the screenă'they angle another way? Well, here's the basics to that bouncing ball thing,ă'only I've put in pixels instead of the classic ball.ă'ă'e-mail: nickk@worldnet.att.netă'web page: http://www.geocities.com/siliconvalley/heights/5914/ăă'DEFINT A-Z 'This is so the program runs fasterăRANDOMIZE TIMERăSCREEN 13ăăpix = 10ăăDIM x(pix)ăDIM y(pix)ăDIM dir$(pix)ăăFOR i = 1 TO pixăx(i) = INT(RND * 319) + 1ăy(i) = INT(RND * 199) + 1ădir = INT(RND * 4) + 1ăIF dir = 1 THEN dir$(i) = "7"ăIF dir = 2 THEN dir$(i) = "9"ăIF dir = 3 THEN dir$(i) = "1"ăIF dir = 4 THEN dir$(i) = "3"ăNEXT iăă'x = 100ă'y = 100ăă'dir$ = "7"ăăi = 1ăăDOăPSET (x(i), y(i)), 0ăIF dir$(i) = "7" THEN x(i) = x(i) - 1: y(i) = y(i) - 1ăIF dir$(i) = "3" THEN x(i) = x(i) + 1: y(i) = y(i) + 1ăIF dir$(i) = "9" THEN x(i) = x(i) + 1: y(i) = y(i) - 1ăIF dir$(i) = "1" THEN x(i) = x(i) - 1: y(i) = y(i) + 1ăăIF x(i) < 0 AND y(i) < 0 AND dir$(i) = "7" THEN dir$(i) = "3"ăIF y(i) > 199 AND dir$(i) = "3" THEN dir$(i) = "9"ăIF x(i) > 319 AND dir$(i) = "9" THEN dir$(i) = "7"ăIF y(i) < 0 AND dir$(i) = "7" THEN dir$(i) = "1"ăIF y(i) > 199 AND dir$(i) = "1" THEN dir$(i) = "7"ăIF x(i) < 0 AND dir$(i) = "7" THEN dir$(i) = "9"ăIF y(i) < 0 AND dir$(i) = "9" THEN dir$(i) = "3"ăIF x(i) > 319 AND dir$(i) = "3" THEN dir$(i) = "1"ăIF x(i) < 0 AND dir$(i) = "1" THEN dir$(i) = "3"ăăPSET (x(i), y(i)), 15ăFOR a = 1 TO 99ăNEXT aăi = i + 1ăIF i > pix THEN i = 1ăLOOP UNTIL INKEY$ <> ""ăNick Kochakian                 COOL LINE                      NickK@worldnet.att.net         01-07-98 (19:26)       QB, QBasic, PDS        32   485      COOLLINE.BAS'Cool lineă'ă'This was originally made on my color casio graphing calc.ăăSCREEN 13ăăx1 = 319ăy1 = 0ăx2 = 319ăy2 = 199ăăcol = 16ăcf = 0ăcc = 16ăăsiz = 7ăăcolway = 2ăăFOR i = 1 TO 50ăLINE (x1, y1)-(x2, y2), colăăx2 = x2 - sizăy1 = y1 + sizăIF cf = 0 THEN col = col + 1ăIF cf = 2 THEN col = col - 1ăIF colway = 2 AND cf = 0 THEN cc = cc + 1ăIF colway = 2 AND cf = 2 THEN cc = cc - 1ăIF cc = 30 THEN cf = 2ăIF cc < 16 THEN cf = 0: col = 16: cc = 16ăăNEXT iăNick Kochakian                 ENLARGE A GRAPHIC AREA         NickK@worldnet.att.net         01-07-98 (19:26)       QB, QBasic, PDS        54   1253     ENLARGE.BAS '-------------------------ă'ENLARGEă'-------------------------ă'10/20/97 By: - Nick Kochakian -ă'ă'This will enlarge a graphic area whose color is 255ă'* NOTE: *ă'This program was initally designed to enlarge text!ă'ă'If you have any comments or questions please e-mail me at:ă'nickk@worldnet.att.netă'ă'check out my web page: http://www.geocities.com/siliconvalley/heights/5914/ăăSCREEN 13ăăLOCATE 1, 1: COLOR 255: PRINT "A"ăăx1 = 0  'x and y(s) for the box "pset"ăy1 = 0  '""ăx2 = .1 '""ăy2 = .1 '""ăăxstart = 0ăxmax = 8ăăx = start 'Where the x and y pixel read beginăy = 0ăăscale = 1 'Don't change thisăăgfx.x = 8ăgfx.y = 8ăăgfx.size = gfx.x * gfx.y 'Just like DIMing an array.ăăxdraw.start = 100ăxdraw.max = xdraw.start + gfx.x * scaleăxdraw = xdraw.start 'Location of the scaled drawing... Make sure xdraw dosen'tăydraw = 40          'go under 100ăăyour.color = 15ăăFOR i = 0 TO gfx.sizeăIF POINT(x, y) = 255 THENăLINE (x1 + xdraw * scale, y1 + ydraw * scale)-(x2 + xdraw * scale + scale, y2 + ydraw * scale + scale), your.color, BFăEND IFăx = x + 1ăxdraw = xdraw + 1ăIF x >= xmax THEN x = 0: y = y + 1ăIF xdraw >= xdraw.max THEN xdraw = xdraw.start: ydraw = ydraw + 1 + scaleăNEXT iăăCOLOR 15ăNick Kochakian                 XOR PIXEL                      NickK@worldnet.att.net         01-07-98 (19:26)       QB, QBasic, PDS        45   766      XOR-PIX.BAS RANDOMIZE TIMERăSCREEN 13ă'XOR Pixelă'ă'11/5/97 By: - Nick Kochakian -ă'ă'This does a pset put but after the pixel moves, it dosen't erase theă'background!ă'ă'If you like my XORed pixel, please use the source, but it'd be nice if youă'gave me some credit for making it! ;)ă'ă'e-mail: nickk@worldnet.att.netă'web page: http://www.geocities.com/siliconvalley/heights/5914/ăăx = 1ăy = 1ăoldcol = 0ănewcol = 0ăăPAINT (0, 0), 1ăăFOR i = 1 TO 10000ăa = INT(RND * 320) + 1ăb = INT(RND * 200) + 1ăc = INT(RND * 255) + 1ăPSET (a, b), căNEXT iăăoldcol = POINT(x, y)ăăDOăPSET (x, y), oldcolănewcol = POINT(x + 1, y)ăx = x + 1ăPSET (x, y), 15ăoldcol = newcolăFOR i = 1 TO 999ăNEXT iăă'ăIF x > 319 THEN ENDă'ăăLOOP UNTIL INKEY$ <> ""ăDavid A. Wicker                FULL SCREEN FIRE SIMULATION    pyramax@fastlane.net           01-23-98 (18:52)       QB, QBasic, PDS        71   2519     FIRE.BAS    ' Fire Competition Entry by David A. Wickeră' Very quick fire!  Change SP to any value from 5 to 20, greater than that,ă' it doesn't look like very good fire.ă' ---------------------------------------------------------------------------ă' As always, if you borrow anything from any source code for youră' shareware projects, please give credit to the original author!ă' ---------------------------------------------------------------------------ăăDEFINT A-Ză'$DYNAMICă' These two yield maximum speed and memoryăăDECLARE SUB RGB (N, R, G, B)ă' Get in the habit of making Subprograms to handle all your GOSUB needs.ă' It's much more powerful and easier to use and maintain in the future.ă' Tap [F2] to see existing Subprograms and Functions.ă' Use ALT-E "S" to create a new Subprogram.  They can each have an argumentă' saving you from having to use temporary variables in a GOSUB routine.ă' Also, any variables used inside a Subprogram unless defined otherwise areă' not carried over to your main program!ăăDEF FNR (A) = INT(RND * A)ăRANDOMIZE TIMERă' My little Random function routine.  I like to use this instead ofă' using RND* in my statements.ăăSCREEN 13ă' Yield 320x200x256ăăFOR I = 0 TO 63ă  RGB I, I, 0, 0ă  RGB I + 64, 63, I, 0ăNEXTă' This uses up 128 colors to make our fire, black to red to yellowăăSP = 5: ' Speed of Fireă' As always, you can compile this to an .EXE to see it running full speedăăDOă  FOR I = FNR(SP) TO 199 - FNR(SP) STEP SPă    FOR J = FNR(SP) TO 319 STEP SPăă      A = I - FNR(64)ă' FACT: Using RND inside a statement that does not return a value is =MUCH=ă' quicker than putting the results in a variable.  Don't believe me ?ă' REM out the A=I-FNR(64) and put in a new line beneath: A=Iă' How much faster does it run ?  Whenever QBasic needs to store a computedă' result, it takes longer than to just compute it for a one time task likeă' plotting or printing.  Use this knowledge to your advantage.ăă      IF A < 0 THEN A = 0ă      IF A > 127 THEN A = 127ă      LINE (J, I)-(J - SP + FNR(SP * 2), I + FNR(SP)), Aăă   ă    NEXTă  NEXTăLOOP UNTIL INKEY$ > ""ăăREM $STATICăSUB RGB (N, R, G, B)ă  OUT &H3C8, Nă  OUT &H3C9, Ră  OUT &H3C9, Gă  OUT &H3C9, Bă' Routine I "earned" by trading source code of paint routine for C++ă' Apparently this is common in good QBasic programming practice so Iă' will probably not give tell from where I got it again in new programs.ă' =NEVER= use PALETTE.  It's much too slow.ăăEND SUBăDavid A. Wicker                ROTATE PICTURE 360 DEGREES     pyramax@fastlane.net           01-28-98 (10:33)       QB, QBasic, PDS        89   2969     ROTATE.BAS  DEFINT A-Ză'$DYNAMICă' Free Rotate v0.23 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ă' Thought up and Written by David A. Wicker                      Jan 28, 1998ă' pyramax@fastlane.netă' http://www.fastlane.net/~pyramaxă' ---------------------------------------------------------------------------ă' As always, if you borrow anything from any source code for youră' shareware projects, please give credit to the original author!ă' ---------------------------------------------------------------------------ăă' DEFINT A-Z and '$DYNAMIC as the first two lines of every QBasic programă' ensure maximum speed and maximum memory capability.ă' They are chiseled in every single program I write.ăăăDEF FNN$ (A) = MID$(STR$(A), 2)ă' Easy way to convert a number to a string without the preceding space.ăăSCREEN 13ă' Many a good graphic program and game are written in this favorite of allă' resolution modes, 320x200x256.  You could be the next grand prize winner!ă' :)ăăPRINTăPRINTăăCIRCLE (28, 28), 24, 13ăPAINT (28, 28), 5, 13ă' Yes, we're using fixed size images for this example, but you can modifyă' it to work with an image of any size, especially if you store theă' "string" as a random access file.ăăPRINT " Hello"ăPRINT " There!"ă' There is a preceding SPACE before each printed item because we want aă' little bit of BLACK pixel space to pad the rotation.  Try taking oută' the spaces to see what happens.ăăA$ = "H28"ă' Jump UP and to the LEFT 28 spaces from our beginning start position.ăăFOR I = 0 TO 55ă  FOR J = 0 TO 55ă' This LOOP will include J for horizontal position, and I for vertical.ă   ă    C = POINT(J, I)ă' Read our pixel starting from LEFT to RIGHT.ăă    IF I MOD 2 = 1 THEN C = POINT(55 - J, I)ă' Read our pixel starting from RIGHT to LEFT.ă   ă    A$ = A$ + "C" + FNN$(C)ă' Change the color to the one selected.  Note the use of FNN$.ăă' Type out DRAW on a blank line and hit F1 to see how this complexă' image drawing command works.  Be sure to press [PGDN] once the help isă' up because there's more.ăă    IF J < 55 THENăă      IF I MOD 2 = 0 THEN A$ = A$ + "R" ELSE A$ = A$ + "L"ă' Add our PLOT to the RIGHT or LEFT depending upon our vertical stepping.ă' Please get in the habit of using ELSE in your programming instead of GOTO.ăă    END IFă  NEXTă ă  IF I < 55 THEN A$ = A$ + "BD"ă' Move our plotter down one pixel WITHOUT drawing a dot behind it.ăăNEXTăăLOCATE 8, 10ăăPRINT "Munched " + FNN$(LEN(A$)) + " string space!"ă' See how much string space can get eaten with a DRAW pixel image!ăăFOR I = 0 TO 720 STEP 4ă' Variable "I" represents the rotation factor, valued 0 to 359.ăă  DRAW "s4BM160,100TA" + FNN$(I MOD 360) + A$ă' Scale 4 (or 1 as QBasic divides by 4), plot in center of screen,ă' Horizontal=160, Vertical=100, and then rotation plus the actuală' Image.ăă' NO DELAY is needed!  It's quite slow enough on my pentium!  :)ăăNEXTăKyle Petersen                  FIRE GENERATOR                 Kyle_Petersen@cocc.edu         02-05-98 (20:08)       QB, QBasic, PDS        236  4962     FIREB.BAS   DECLARE SUB fire (y%, x1%, x2%, cnt%)ăDECLARE SUB makepal (tpe%)ăDEFINT A-ZăăSCREEN 0: WIDTH 80ăăCLSăPRINT "Choose a size for the x from 0 to 100."ăPRINT "25 is generally a good number. A higher"ăPRINT "number will result in lower, but bigger,"ăPRINT "fire."ăINPUT "XSize:", xsizeăIF xsize < 0 OR xsize > 100 THEN xsize = 25ăCLSăPRINT "Choose a size for the y from 0 to 197."ăPRINT "150 is generally a good choice. A"ăPRINT "higher number will result in faster,"ăPRINT "but smaller, fire."ăINPUT "YSize:", ysizeăIF ysize < 0 OR ysize > 197 THEN ysize = 150ăCLSăPRINT "Choose a palette:"ăPRINT "0 - Fire."ăPRINT "1 - Grayscale."ăPRINT "2 - Red."ăPRINT "3 - Green."ăPRINT "4 - Blue."ăPRINT "5 - Shaded primary's."ăINPUT "Palette #:", paletăIF palet > 5 OR palet < 0 THEN palet = 0ăCLSăPRINT "The skip number determines how"ăPRINT "much the fire should decrement"ăPRINT "with each average. A higher"ăPRINT "number results in a higher"ăPRINT "fire. Some interesting side-"ăPRINT "effects will happen after the"ăPRINT "number 1. A range of -10 to"ăPRINT "10 is supported."ăINPUT "Skip:", cntăIF cnt < -10 OR cnt > 10 THEN cnt = 0ăCLSăPRINT "The number of flames can be from"ăPRINT "0 to 20. A 20 will cause a wall of"ăPRINT "flame. 10 is the recommended number."ăINPUT "# Flames:", amntăIF amnt < 0 OR amnt > 20 THEN amnt = 10ăCLSăPRINT "Movement is what determines how"ăPRINT "fast the flames switch positions."ăPRINT "Lower numbers cause faster switching."ăPRINT "Try 3 to begin with."ăINPUT "Movement:", movemăIF movem < 0 OR movem > 10 THEN movem = 3ăSCREEN 13ăCLSăăRANDOMIZE TIMERăăDIM scx(99), scy(99), frăDIM SHARED divfour(2048)ăă'Make a look-up table for the divisions.ă'Dividing and multiplying is one of theă'slowest operations on the pc. By makingă'this table, the program can run faster.ăăFOR t = 0 TO 2048ă divfour(t) = INT(t \ 4)ăNEXTăă'Create neat-o palette  :)ămakepal paletăăx1 = 159 - (xsize / 2) 'Determine where to place the fire.ăx2 = 159 + (xsize / 2)ăăFOR t = 0 TO amntă scx(t) = INT(RND(1) * xsize) + x1ă scy(t) = 197ăNEXTăăcount = 1ăă'The Flame loopăăDEF SEG = &HA000ăDOă fire ysize, x1, x2, cnt  'The fire subăă FOR t = 0 TO amnt  'Redraw the flame ignitors.ă     IF INT(RND(1) * movem) + 1 = 1 THEN scx(t) = INT(RND(1) * xsize) + x1'Randomly move the ignitorsă     PSET (scx(t), scy(t)), 255 'Plot em.ă NEXTăăLOOP UNTIL INKEY$ <> ""             'Continue until keypressăă'Let the fire burn out...ăFOR t = 0 TO 127ă fire ysize, x1, x2, 0ă IF INKEY$ = CHR$(27) THEN EXIT FOR 'If escape hit, exit.ăNEXTăDEF SEGăă'A fairly fast fire routineă'I replaced the points with peeks and the psets with pokesă'I only multiply once and my division is stored in memory.ă'I think this could be faster still...ă'(Without converting to assembly that is.)ăSUB fire (y, x1, x2, cnt)ăăadd& = (320& * y)ăăFOR t = y TO 198ă FOR x = x1 TO x2ă add1& = add& + xă ă  c = divfour(PEEK(add1& - 1) + PEEK(add1& + 320) + PEEK(add1& + 1) + PEEK(add1& + 320))ă ă  IF c > 0 - cnt THEN c = c + cnt - 1ă  'IF c > 255 THEN c = 255    'Uncomment this if you don't want the funnyă                              'things that run through your fire when youă                              'use higher numbers. (If you don't knowă                              'what I'm talking about, don't uncomment this.ă                              'You'll know when you see them.)ă  POKE add1&, că NEXTă add& = add& + 320ăNEXTăăEND SUBăăSUB makepal (tpe)ăOUT 968, 0ăIF tpe = 0 THENăcol = 0ăFOR t = 0 TO 15ă OUT 969, 0ă OUT 969, 0ă OUT 969, colă col = col + 1ăNEXTăFOR t = 0 TO 15ă OUT 969, 0ă OUT 969, 0ă OUT 969, colă col = col - 1ăNEXTăcol = 0ăFOR t = 0 TO 63ă OUT 969, colă OUT 969, 0ă OUT 969, 0ă col = col + 1ăNEXTăcol = 0ăFOR t = 0 TO 127ă OUT 969, 63ă OUT 969, t \ 2ă OUT 969, 0ă col = col + 1ăNEXTăcol = 0ăFOR t = 0 TO 31ă OUT 969, 63ă OUT 969, 63ă OUT 969, colă col = col + 1ăNEXTăEND IFăăIF tpe = 1 THENă FOR t = 0 TO 255ă   OUT 969, t \ 4ă   OUT 969, t \ 4ă   OUT 969, t \ 4ă NEXTăEND IFăăIF tpe = 2 THENă FOR t = 0 TO 255ă   OUT 969, t \ 4ă   OUT 969, 0ă   OUT 969, 0ă NEXTăEND IFăăIF tpe = 3 THENă FOR t = 0 TO 255ă   OUT 969, 0ă   OUT 969, t \ 4ă   OUT 969, 0ă NEXTăEND IFăăIF tpe = 4 THENă FOR t = 0 TO 255ă   OUT 969, 0ă   OUT 969, 0ă   OUT 969, t \ 4ă NEXTăEND IFăăIF tpe = 5 THENă 'black to redă FOR t = 0 TO 31ă  OUT 969, t * 2ă  OUT 969, 0ă  OUT 969, 0ă NEXTă 'Red to blueă FOR t = 0 TO 63ă  OUT 969, 63 - tă  OUT 969, 0ă  OUT 969, tă NEXTă 'Blue to greenă FOR t = 0 TO 63ă   OUT 969, 0ă   OUT 969, tă   OUT 969, 63 - tă NEXTă 'Green to whiteă FOR t = 0 TO 63ă   OUT 969, tă   OUT 969, 63ă   OUT 969, tă NEXTă 'White to blackă FOR t = 0 TO 31ă   OUT 969, 62 - (t * 2)ă   OUT 969, 62 - (t * 2)ă   OUT 969, 62 - (t * 2)ă NEXTăEND IFăEND SUBăKyle Petersen                  SPREAD PALETTES                Kyle_Petersen@cocc.edu         02-05-98 (20:08)       QB, QBasic, PDS        65   1315     SPREAD.BAS  'Simple program that illustrates using a spread for the palette. Thisă'function is highly recommended for anyone dealing with the palette, whetheră'it be in games, drawing programs, or anything else.ă'----------Have Fun!--------------------------------ă'Kyle PetersenăăDECLARE SUB spread (col1%, col2%)ăDEFINT A-ZăSCREEN 13ăCLSăăFOR t = 0 TO 255ă   LINE (t + 10, 10)-(t + 10, 190), tăNEXTăăLOCATE 1, 1: PRINT "Before spread..."ăw$ = INPUT$(1)ăăFOR cnt = 0 TO 3ă   READ number$ă   LOCATE 1, 1: PRINT "After " + number$ + " spread.   "ă   READ first, lastă   spread first, lastă   w$ = INPUT$(1)ăNEXTăăDATA "first", 0, 31ăDATA "second", 31, 63ăDATA "third", 63, 127ăDATA "fourth", 127,255ăăSUB spread (col1%, col2%)ăăIF col2% > col1% THENă   OUT 967, col1%ă   r1 = INP(969)ă   g1 = INP(969)ă   b1 = INP(969)ăă   OUT 967, col2%ă   r2 = INP(969)ă   g2 = INP(969)ă   b2 = INP(969)ăă   ml = col2% - col1%ăă   pl! = r2 - r1ă   pl1! = g2 - g1ă   pl2! = b2 - b1ă   pl! = pl! / mlă   pl1! = pl1! / mlă   pl2! = pl2! / mlăă   r! = 0: g! = 0: b! = 0ă   FOR t = col1% TO col2%ă      OUT 968, tă      OUT 969, INT(r1 + r!)ă      OUT 969, INT(g1 + g!)ă      OUT 969, INT(b1 + b!)ă      r! = r! + pl!ă      g! = g! + pl1!ă      b! = b! + pl2!ă   NEXTăEND IFăEND SUBăKyle Petersen                  RANDOM (ROTATING) STARFIELD    Kyle_Petersen@cocc.edu         02-05-98 (20:08)       QB, QBasic, PDS        296  5709     SIMSTARS.BASDECLARE SUB setGrayPal ()ăDECLARE SUB moveStars (xInc!, yInc!, zInc!)ăDECLARE SUB readData ()ăDECLARE SUB transformZ (nCnt%)ăDECLARE SUB initStars ()ăDECLARE SUB dispStars ()ăDEFINT A-Zăă'$DYNAMICăăCONST NSTARS = 50ăăTYPE stară   x AS SINGLEă   y AS SINGLEă   z AS SINGLEă   trueX AS INTEGERă   trueY AS INTEGERă   trueZ AS INTEGERă   dest AS SINGLEăEND TYPEăăDIM SHARED star(NSTARS) AS starăDIM SHARED flyTypeăDIM SHARED text$(10)ăăflyType = 0ăăSCREEN 7, , 1, 0ăăRANDOMIZE TIMERăreadDataăinitStarsăă'Part IăflyType = 0ătransformZ 0ăst! = TIMERăăWHILE tElapse! < 5ă   CLSă   moveStars -5, 0, 0ă   IF tElapse! < 2 THENă      LOCATE 1, 1: PRINT text$(0)ă   ELSEă      LOCATE 2, 1: PRINT text$(1)ă   END IFă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăăă'Part IIăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăflyType = 1ăxDir! = 0ăăWHILE tElapse! < 15ă   CLSă   moveStars -5 + xDir!, 0, 0ă   dispStarsă   IF tElapse! > 10 AND tElapse! > lastElapse! + .1 THEN xDir! = xDir! - 2ă   IF tElapse! > lastElapse! + .1 THEN transformZ 1: lastElapse! = tElapse!ă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăă'Part IIIăflyType = 2ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăxDir! = xDir! + 5ăăWHILE tElapse! < 20ă   CLSă   IF tElapse! > lastElapse! + .2 AND xDir! < 0 THEN xDir! = xDir! + 1: lastElapse! = tElapse!ă   moveStars xDir!, 0, -.1ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăăă'Part IVăflyType = 2ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăangle! = 0ăăWHILE tElapse! < 20ă   CLSă   IF tElapse! > lastElapse! + .1 THENă      angle! = angle! + .2ă      IF angle! > 6.3 THEN angle! = 0ă      lastElapse! = tElapse!ă      yDir! = SIN(angle!) * 10ă   END IFă   moveStars 0, yDir!, -.1ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăă'Part XăflyType = 3ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăangle! = 0ăăWHILE tElapse! < 20ă   CLSă   IF tElapse! > lastElapse! + .1 THENă      angle! = angle! + .2ă      IF angle! > 6.3 THEN angle! = 0ă      lastElapse! = tElapse!ă      yDir! = SIN(angle!) * 5ă   END IFă   moveStars 0, yDir!, -.1ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăă'Part XIăflyType = 3ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăangle! = 0ăyDir! = 0ăzDir! = -.1ăăWHILE tElapse! < 15ă   CLSă   IF tElapse! > lastElapse! + .1 THENă      IF zDir! < 0 THEN zDir! = zDir! + .001ă      IF zDir! > 0 THEN zDir! = 0ă      lastElapse! = tElapse!ă   END IFă   moveStars 0, 0, zDir!ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăă'Part XIIăflyType = 1ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăangle! = 0ăxDir! = 0ăăWHILE tElapse! < 10ă   CLSă   IF tElapse! > lastElapse! + .1 THENă      IF xDir! < -5 THEN xDir! = xDir! + .1ă      IF xDir! > -5 THEN xDir! = -5ă      lastElapse! = tElapse!ă   END IFă   moveStars xDir!, 0, 0ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăă'Part XIIIăflyType = 0ăst! = TIMERăet! = TIMERătElapse! = et! - st!ălastElapse! = tElapse!ăangle! = 0ăăWHILE tElapse! < 10ă   CLSă   moveStars -5, 0, 0ă   LOCATE 1, 1: PRINT text$(2)ă   dispStarsă   PCOPY 1, 0ă   et! = TIMERă   tElapse! = et! - st!ăWENDăăăDATA "A simple starfield..."ăDATA "   ...Or is it?"ăDATA "That's All Folks!"ăDATA "END"ăăSUB dispStarsăFOR cnt = 0 TO NSTARS - 1ă   x = star(cnt).trueXă   y = star(cnt).trueYă   z = star(cnt).ză   col = 8ă   IF z < 2 THEN col = 7ă   IF z < 1 THEN col = 15ă   PSET (x, y), colăNEXTăEND SUBăăSUB initStarsăFOR cnt = 0 TO NSTARS - 1ă   star(cnt).x = INT(RND(1) * 320) - 160ă   star(cnt).y = INT(RND(1) * 200) - 100ă   star(cnt).z = 0ăNEXTăEND SUBăăSUB moveStars (xInc!, yInc!, zInc!)ăFOR cnt = 0 TO NSTARS - 1ă   star(cnt).x = star(cnt).x + xInc!ă   star(cnt).y = star(cnt).y + yInc!ă   star(cnt).z = star(cnt).z + zInc!ă   x! = star(cnt).xă   y! = star(cnt).yă   z! = star(cnt).ză  ă   x! = (x! / (z! + 1)) + 160ă   y! = (y! / (z! + 1)) + 100ăă   IF x! < 0 AND flyType = 0 THENă      star(cnt).x = 160ă      star(cnt).y = INT(RND(1) * 200) - 100ă      star(cnt).z = 0ă   END IFă   IF x! < 0 AND flyType = 1 THENă      star(cnt).z = RND(1) * 3ă      star(cnt).x = 160 * (star(cnt).z + 1)ă      star(cnt).y = (INT(RND(1) * 200) - 100) * (star(cnt).z + 1)ă      star(cnt).dest = star(cnt).ză   END IFă   IF (z! < 0 OR x! < 0 OR y! < 0 OR x! > 320 OR y! > 320) AND flyType = 2 THENă      star(cnt).z = 3ă      star(cnt).x = (INT(RND(1) * 320) - 160) * (star(cnt).z + 1)ă      star(cnt).y = (INT(RND(1) * 200) - 100) * (star(cnt).z + 1)ă   END IFă   IF (z! < 0 OR x! < 0 OR y! < 0 OR x! > 320 OR y! > 320) AND flyType = 3 THENă      star(cnt).z = 3ă      angle! = RND(1) * 6.3ă      star(cnt).x = COS(angle!) * 80ă      star(cnt).y = SIN(angle!) * 80ă   END IFăă   x! = star(cnt).xă   y! = star(cnt).yă   z! = star(cnt).ză   x! = (x! / (z! + 1)) + 160ă   y! = (y! / (z! + 1)) + 100ăă   star(cnt).trueX = x!ă   star(cnt).trueY = y!ăăNEXTăEND SUBăăSUB readDataăcnt = 0ăDOă   READ a$ă   text$(cnt) = a$ă   cnt = cnt + 1ăLOOP WHILE a$ <> "END"ăEND SUBăăSUB transformZ (nCnt)ăFOR cnt = 0 TO NSTARS - 1ă   IF nCnt = 0 THENă      star(cnt).dest = RND(1) * 3ă   ELSEă      IF star(cnt).z < star(cnt).dest THENă         star(cnt).z = star(cnt).z + .1ă      END IFă   END IFăNEXTăEND SUBăMarc van den Dikkenberg        PCX SAVER/LOADER FOR PB        excel@excelsior.xs4all.nl      02-08-98 (15:37)       PB                     275  7970     PBPCX.BAS   'ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»ă'ş PB-PCX                    Version 1.0                8 February 1998 şă'ĚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍąă'ş PCX Save: Marc van den Dikkenberg                                    şă'ş PCX Load: Dave Navarro, Mark Phillips, Al Musella                    şă'ş                                                                      şă'ş Status: Freeware      ---------> internet:    pb@excelsior.xs4all.nl şă'ş                                                                      şă'ş The PowerBasic Archives -------> http://www.xs4all.nl/~excel/pb.html şă'ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽăă$LIB ALL -ă$DYNAMICăDEFINT A - ZăăTYPE Pcxheaderă	Mfg AS BYTEă	Ver AS BYTEă	Enc AS BYTEă	Bpp AS BYTEă	Xmin AS INTEGERă	Ymin AS INTEGERă	Xmax AS INTEGERă	Ymax AS INTEGERă	Hres AS INTEGERă	Vres AS INTEGERă	Pal AS STRING * 48ă	Resrv AS BYTEă	Colpl AS BYTEă	Bpl AS INTEGERă	Paltyp AS INTEGERă	Filler AS STRING * 58ăEND TYPEăDIM Header AS SHARED PcxheaderăDIM Times AS SHARED BYTEăDIM Chunksize AS SHARED WORDăDIM Maxscrnptr AS SHARED WORDăDIM Textofst AS SHARED WORDăDIM Handle AS SHARED INTEGERăDIM Buffer AS SHARED STRING * 32256ăChunksize = 32256ăă' Screen 13 (320 x 200 x 256)ă   ! MOV AX,&H13ă	! INT &H10ă	DEF SEG=&HA000ăă' Put some lines on the screenă	for t=0 to 199 step 2ă	   poke$ t*320,string$(160,t)ă	next tă	Sound 420,.5ă	a$=input$(1)ăă' Use PCXDisplay to view any 320x200x256 PCX fileă'ă' PCXDisplay("picture.pcx")ă' Sound 420,.5ă'ă'ă' Important! This version of PCXSave will only work with Screen 13hă'            ( 320 x 200 x 256 ) See The PowerBasic Archives,ă'            http://www.xs4all.nl/~excel/pb.html for possible updates.ă'ăPCXSave("PCXSave.pcx")ăsound 420,.5ăăENDăă'********************************************************************ă'*  PCX-Save, By Marc van den Dikkenberg                            *ă'********************************************************************ăăSUB PCXSave(F$)ă	header.mfg=10ă	header.ver=5ă	header.enc=1ă	header.bpp=8ă	header.xmin=0ă	header.ymin=0ă	header.xmax=319ă	header.ymax=199ă	header.hres=300ă	header.vres=300ă	header.pal=string$(48,0)ă	header.Resrv=0ă	header.colpl=1ă	header.bpl=320ă	header.paltyp=1ă	header.filler=string$(58,0)ăă   filhandle=freefileă	open f$ for binary as #filhandleă	put$ #filhandle,headerăă	DEF SEG=&HA000ă	for t=header.YMin to Header.YMaxă	   temp$=peek$(t*320+header.XMin,Header.bpl)ăă' ****************ă      poke$ t*320+header.xmin,string$(header.bpl,0)ă'     Erase the current line from the screenă' ****************ăă	   count=0ă	   while len(temp$)>0ă		   CheckFor$=left$(temp$,1)ă		   while left$(temp$,1)=CheckFor$ and count<63ă			   count=count+1ă	         temp$=mid$(temp$,2)ă		   wendă	      if count=1 thenă	         if CheckFor$>chr$(191) thenă	            put$ #filhandle,chr$(val("&B11000001"))+CheckFor$ă	         elseă   	         put$ #filhandle,CheckFor$ă	         end ifă   	   elseă      	   temp2$=bin$(count)ă	         while len(temp2$)<6ă	            temp2$="0"+temp2$ă	         wendă		      put$ #filhandle,chr$(val("&B11"+temp2$))+CheckFor$ă	      end ifă      	count=0ă   	wendă	next tă	put$ #filhandle,chr$(12)'						Start of Palette Markeră	OUT &H3C7, 0ă	FOR T = 0 TO 255ă		R = (INP(&H3C9) * 65280) \ 16128ă		G = (INP(&H3C9) * 65280) \ 16128ă		B = (INP(&H3C9) * 65280) \ 16128ă	   PUT$ #filhandle,chr$(R)ă	   PUT$ #filhandle,chr$(G)ă	   PUT$ #filhandle,chr$(B)ă	NEXT Tă	close #filhandleăEND SUBăăENDăă'********************************************************************ă'* FAST PCX                                                         *ă'* Original idea from Dave Navarro.                                 *ă'* Changes by Mark Phillips and Al Musella, DPM                      *ă'* revised 9/23/93 by David Yunker see PCX.BAS for original code    *ă'* Source code formatted by BFLite, by James Davis.                 *ă'********************************************************************ăăSUB PcxDisplay(F$)ă'display .pcx f$ on screen - only works for mode 13h nowă'Set up the buffer to hold raw dataă  Textofst = VARPTR(Buffer) 'the seg = ds for fixed len stringăă'Open the file and get the dos handle and file sizeă  filhandle=freefileă  OPEN F$ FOR BINARY ACCESS READ SHARED AS #filhandleă  Handle = FILEATTR(1, 2)  'The dos handle for this fileăă'Make sure we can do this fileă  Get# filhandle, , Headeră  IF Header.mfg <> 10 AND Header.ver <> 5 THENă    PRINT "Not a 256 color PCX file!"ă    ENDă  END IFă  Wid = Header.xmax - Header.xmină  Dep = Header.ymax - Header.ymină  IF Wid + 1 > 320 OR Dep + 1 > 200 THENă    PRINT "is too big for Mode 13h"ă    ENDă  ELSEă    PRINTă  END IFăăă'Load PCX Palette (have to divide the raw values by 4 toă'get them into 256 color formată  Tmp& = LOF(filhandle) - 768ă  Seek# filhandle, Tmp&            'this is where the pallette data is storedă  DIM Palete AS STRING * 768 'ă  GET$ filhandle, 768, Palete      'read it all in in 1 chunkă'Now divide each entry by 4 to scale to 256 coloră  Paloff?? = VARPTR(Palete)ă  !  mov     AX,DS                      ;set es=ds to set up stosbă  !  mov     ES,AXă  !  mov     CX,768ă  !  mov     AX,Paloff??ă  !  mov     SI,AX                      ;let si and di point to palete stringă  !  mov     DI,AXăPalShift:ă  !  Lodsb                              ;al<-ds:si   incr siă  !  shr     AL,1ă  !  shr     AL,1                       ;divide by 4 (quickly:) 'shift bugă  !  Stosbă  !  loop    Palshiftăă  Seek# 1, 128 ' go to beginning of graphic dataăă'Set the graphics mode 320x200x256ă  !  mov     AX,&H0013                  ; set mode 13hă  !  int     &H10ă'set up the new palletteă  Palptr = VARPTR(Palete)ă  Palseg = VARSEG(Palete)ă  !  mov     AX,&H1012                  ;set new paletteă  !  mov     BX,0ă  !  mov     CX,256ă  !  mov     DX,Palptră  !  mov     ES,Palsegă  !  int     &H10ăă  Maxscrnptr?? = (Wid + 1) * (Dep + 1) 'points to the highest posible postion on screenăă  CALL pcxshow 'actually decodes and displays the fileă  CLOSE filhandleăEND SUBăăSUB PCXshow()ă'must be called from PCXDisplay - not directly!ăă'Set up es:di to point to next location on screenă  !  mov     AX,&h0A000ă  !  mov     ES,AX                      ;es points to VGA bufferă  !  mov     DI,0                       ;di holds screen offsetă  !  call    getchunk                   ;returns dx=buffersize, si offset of bufferăpcx2:ă  !  lodsb                              ;al now holds the color byteă  !  dec     DXă  !  jnz     pcx2aă  !  call    getchunkăpcx2a:ă  !  mov     BH,1                       ;bh holds run count, assume 1 for nowă  !  mov     BL,ALă  !  and     BL,&hc0                    ;check if the 2 most sig bits are setă  !  cmp     BL,&hc0ă  !  jnz     pcx3                       ;if not run byte, just display color al, bh Timesă  !  and     AL,&h3fă  !  mov     BH,ALă  !  lodsb                              ;al now holds the color byteă  !  dec     DXă  !  jnz     pcx3ă  !  call    getchunkăpcx3:ă  !  xor     CX,CXă  !  mov     CL,BHă  !  rep     Stosbă  !  cmp     di,Maxscrnptr??ă  !  jz      pcxdoneă  !  jmp     pcx2ăăGetChunk:ă'  return dx with # of bytes in the string to processă'  return si with start of buffer in dsă  !  push    axă  !  push    bxă  !  mov     AH,&h3Fă  !  mov     BX,Handleă  !  mov     DX,Textofstă  !  mov     CX,Chunksizeă  !  int     &h21ă  !  mov     SI,DXă  !  mov     DX,AX                      ; DX=len  si=offsetă  !  pop     bxă  !  pop     axă  !  retnăăPCXDone:ăEND SUBăăSUB PCXResetScreenă  !  mov     AX,3                       ;'set text mode and reset paletteă  !  int     &h10ă  CLSăEND SUBăSami Kyostila                  CONVERT BMP/PCX/GIF FILES      hiteck@utanet.fi               02-09-98 (23:31)       QB, PDS                3536 96057    CONVERT.BAS 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'               C O N V E R T  v1.0 - by Sami Ky”stil„ 1998ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'ă' See Program/About for more info on program.ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' You may use this code freely, as long as you give me some credit for it.ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăăăăăDECLARE SUB About ()ăDECLARE SUB Append.Code (Code$)ăDECLARE SUB SaveBMP8 (Pic$, X1%, Y1%, X2%, Y2%)ăDECLARE FUNCTION LongToString$ (L&)ăDECLARE SUB Load.RAW (File$, XLen%, YLen%, Segment%, Offset%)ăDECLARE SUB Load.BSave (File$)ăDECLARE SUB Save.Palette (File$, InpFormat$, OutFormat$)ăDECLARE SUB Draw.PaletteMenu (Col%)ăDECLARE SUB SmoothPal (Iter&)ăDECLARE SUB Draw.Palette (ActiveCol%)ăDECLARE SUB View.Palette ()ăDECLARE SUB Edit.Palette ()ăDEFINT A-ZăDECLARE SUB RotatePal ()ăDECLARE SUB Roller (x%, y%, XLen%, Text$, FCol%)ăDECLARE FUNCTION FindBrightestColor% ()ăDECLARE FUNCTION FindBrighestColor% ()ăDECLARE SUB Save.Image (InpFile$, InpFormat$, OutFormat$)ăDECLARE FUNCTION QueryFile$ (WildCard$)ăDECLARE FUNCTION ScanDir% (FileSpec$, Output$)ăDECLARE SUB SeekFileItem (File%, Item%)ăDECLARE FUNCTION RealLen% (Text$)ăDECLARE SUB Center (Text$, YPos%)ăDECLARE SUB ColPrint (Text$)ăDECLARE FUNCTION DirEntry% (Entry AS STRING)ăDECLARE FUNCTION DirFirst$ (Mask AS STRING, Attrib AS INTEGER)ăDECLARE SUB SetDTA (FileInfo AS ANY)ăDECLARE FUNCTION DirNext$ ()ăDECLARE SUB DrawFileList (File%, Offset%, Selected%, Max%)ăDECLARE SUB DrawWindow (x%, y%, X2%, Y2%, FCol%, BCol%, Topic$, Shadow%)ăDECLARE SUB EraseMessage ()ăDECLARE SUB ErrorDialog (Desc$)ăDECLARE FUNCTION InputField$ (Text$, Key$, MaxLen%, TPos%)ăDECLARE FUNCTION Query$ (Text$, Topic$, MaxLen%, TField$)ăDECLARE FUNCTION Load.Palette% (File$, Format$)ă'$DYNAMICăDECLARE FUNCTION Load.Image% (File$, Format$)ăDECLARE FUNCTION Getbit% ()ăDECLARE SUB Plot (a%)ăDECLARE FUNCTION ReadCode% (CodeSize%)ăDECLARE SUB Show.Image ()ăDECLARE SUB Gauge (XPos%, YPos%, XLen%, Value&, Max&, Char$)ăDECLARE SUB PrintText (Text$)ăDECLARE SUB ClearScreen ()ăDECLARE SUB Set.Palette ()ăDECLARE FUNCTION ReturnNibble% (Byte%, WhichOne%)ăDECLARE SUB FillChar (Segment%, Offset%, Value%, Bytes%)ăDECLARE SUB MemCopy (fromseg%, FromOffset%, toseg%, ToOffset%, Bytes%)ăDECLARE FUNCTION ReturnBit% (Byte%, Bit%)ăDECLARE SUB Create.MenuItem (Num%, Caption$, Style AS STRING, Selected AS STRING, Active AS STRING)ăDECLARE SUB Create.Menu (Num%, Caption$)ăDECLARE SUB Set.MenuTopic (Num%, Topic$)ăDECLARE SUB Main ()ăDECLARE SUB Set.MenuItem (MenuNum%, Num%, Caption$, Active AS STRING, Style AS STRING, Selected AS STRING)ăDECLARE FUNCTION Get.MenuItem$ (MenuNum%, Num%)ăDECLARE SUB Get.MenuItemInfo (MenuNum%, Num%, Style AS STRING, Selected AS STRING, HelpText AS STRING)ăDECLARE SUB Draw.Menu ()ăDECLARE SUB Init.Menu ()ăDECLARE FUNCTION Exist% (File$)ăDECLARE SUB MStatus (x%, y%, B1%, B2%)ăDECLARE SUB UpdateMouse ()ăDECLARE SUB PPrint (x%, y%, Text$, FCol%, BCol%)ăDECLARE SUB PokeChar (x%, y%, Char$, FCol%, BCol%)ăDECLARE FUNCTION PeekChar$ (x%, y%)ăDECLARE SUB Draw.Border (x%, y%, X2%, Y2%, FCol%, BCol%)ăDECLARE FUNCTION Get.MenuTopic$ (Num%)ăDECLARE FUNCTION PopupMenu% (x%, y%, Num%, Click%)ăDECLARE SUB MHide ()ăDECLARE SUB MShow ()ăDECLARE FUNCTION MInit! ()ăDEFINT A-ZăăTYPE RegTypeă		 ax    AS INTEGERă		 bx    AS INTEGERă		 cx    AS INTEGERă		 dx    AS INTEGERă		 bp    AS INTEGERă		 si    AS INTEGERă		 di    AS INTEGERă		 flags AS INTEGERăEND TYPEăăăTYPE RegTypeXă		 ax    AS INTEGERă		 bx    AS INTEGERă		 cx    AS INTEGERă		 dx    AS INTEGERă		 bp    AS INTEGERă		 si    AS INTEGERă		 di    AS INTEGERă		 flags AS INTEGERă		 ds    AS INTEGERă		 es    AS INTEGERăEND TYPEăăăăTYPE MenuItemTypeă	Caption AS STRING * 50ă	Active AS STRING * 1ă	Style AS STRING * 1ă	Selected AS STRING * 1ăEND TYPEăăTYPE MenuTypeă	Topics AS INTEGERă	BarSize AS INTEGERă	MenuFCol AS INTEGERă	MenuBCol AS INTEGERă	MenuDisabled AS INTEGERăEND TYPEăăTYPE MenuSelectedTypeă	Menu AS INTEGERă	Item AS INTEGERăEND TYPEăăTYPE DOSFileInfoă	fiReserved            AS STRING * 21  'for DOS' internal useă	fiAttribute           AS STRING * 1   'file attribute codeă	fiFileTime            AS INTEGER      'file time (in DOS format)ă	fiFileDate            AS INTEGER      'file date (in DOS format)ă	fiSize                AS LONG         'file size (in bytes)ă	fiFileName            AS STRING * 13  'file name (without path)ăEND TYPEăăă' Type directory entry:ăCONST IsNONE = 0                'directory entry doesn't existăCONST IsFILE = 1                'is a fileăCONST IsDIRECTORY = 2           'is a directoryăCONST IsDEVICE = 3              'is a deviceăCONST IsVOLUME = 4              'is a volume labelăă' Maximum length of directory path in DOSăCONST MAXDOSPATH = 67ăă' Bit value of carry bit in flags registerăCONST CARRY = 1ăă' Boolean valuesăCONST False = 0, True = -1ăCONST Lines = 25ăăCONST F.NOR = &H200  'constant for "normal" files (*files* displayed with DIR)ăCONST F.NON = &H100  'constant for files without any attributeăCONST F.ARC = &H20   'constant for archive file attributeăCONST F.DIR = &H10   'constant for directory file attributeăCONST F.VOL = &H8    'constant for volume file attributeăCONST F.SYS = &H4    'constant for system file attributeăCONST F.HID = &H2    'constant for hidden file attribute (may return directory)ăCONST F.RDO = &H1    'constant for read-only file attributeăCONST F.ANY = &H0    'constant for any of the aboveăă' Named common block with DOS error codeăCOMMON SHARED /DOSError/ DOSError AS INTEGERăăDIM SHARED Pal AS STRING * 768ăDIM SHARED Regs AS RegTypeăDIM SHARED ASMMemCopy$ăDIM SHARED ASMFillChar$ăDIM SHARED Buffer(0 TO 319, 0 TO 199)  AS STRING * 1ăăDIM SHARED Powers(8) AS INTEGERăDIM SHARED Prefix(0 TO 4096) AS INTEGERăDIM SHARED Suffix(0 TO 4096) AS INTEGERăDIM SHARED OutCode(0 TO 1024) AS INTEGERăDIM SHARED codemask(12) AS INTEGERăDIM SHARED MaxCodes(12) AS INTEGERăDIM SHARED Powers2(16)  AS INTEGERăDIM SHARED Xstart, XendăDIM SHARED FList AS STRING * 12ăăDIM SHARED Num AS INTEGERăDIM SHARED Bitsin AS INTEGERăDIM SHARED BlockLength AS INTEGERăDIM SHARED FileInfo AS DOSFileInfoăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(10)ăasm$ = asm$ + CHR$(142) + CHR$(192)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(14)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(118) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(126) + CHR$(12)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(243)ăasm$ = asm$ + CHR$(164)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăASMMemCopy$ = asm$ăăăasm$ = ""ăasm$ = asm$ + CHR$(85)ăasm$ = asm$ + CHR$(137) + CHR$(229)ăasm$ = asm$ + CHR$(139) + CHR$(78) + CHR$(6)ăasm$ = asm$ + CHR$(139) + CHR$(86) + CHR$(8)ăasm$ = asm$ + CHR$(139) + CHR$(70) + CHR$(12)ăasm$ = asm$ + CHR$(30)ăasm$ = asm$ + CHR$(142) + CHR$(216)ăasm$ = asm$ + CHR$(139) + CHR$(94) + CHR$(10)ăasm$ = asm$ + CHR$(136) + CHR$(23)ăasm$ = asm$ + CHR$(67)ăasm$ = asm$ + CHR$(226) + CHR$(251)ăasm$ = asm$ + CHR$(31)ăasm$ = asm$ + CHR$(93)ăasm$ = asm$ + CHR$(203)ăASMFillChar$ = asm$ăăDIM SHARED MenuItems(1 TO 40) AS INTEGERăDIM SHARED MenuItem AS MenuItemTypeăDIM SHARED FBuffer(0 TO 2000) AS INTEGERăDIM SHARED QMenu AS MenuTypeăDIM SHARED MenuSelected AS MenuSelectedTypeăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 0: CLSăIF NOT MInit THEN PRINT " ţ Mouse not found!": ENDăăIF Exist("Menuswap.tmp") = True THEN KILL "menuswap.tmp"ăIF Exist("Itemswap.tmp") = True THEN KILL "itemswap.tmp"ăăOPEN "Menuswap.tmp" FOR BINARY AS #250ăOPEN "Itemswap.tmp" FOR BINARY AS #251ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăPALETTE 1, 40ăPALETTE 3, 35ăăDraw.Border 1, 1, 80, 25, 7, 1ăVIEW PRINT 2 TO 25ăăMShowăInit.MenuăăDOă	Mainăă	IF MenuSelected.Menu = 2 THENă		LOCATE 3ă		SELECT CASE MenuSelected.Itemă		CASE 1ă			PrintText " ţ View BMP File"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				IF Load.Image(File$, "BMP") THEN Show.Image ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenă		CASE 2ă			PrintText " ţ View PCX File"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				IF Load.Image(File$, "PCX") THEN Show.Image ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenă		CASE 3ă			PrintText " ţ View GIF File"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				IF Load.Image(File$, "GIF") THEN Show.Image ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenăă		CASE 4ă			Show.Imageăăă		CASE 6ă			PrintText " ţ BSave BMP File"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				Save.Image File$, "BMP", "BSAVE"ă			END IFă			ClearScreenă		CASE 7ă			PrintText " ţ BSave PCX File"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				Save.Image File$, "PCX", "BSAVE"ă			END IFă			ClearScreenă		CASE 8ă			PrintText " ţ BSave GIF File"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				Save.Image File$, "GIF", "BSAVE"ă			END IFă			ClearScreenăă	 ă	 ă		CASE 10ă			PrintText " ţ Save BMP File As Raw Data"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				Save.Image File$, "BMP", "RAW"ă			END IFă			ClearScreenă		CASE 11ă			PrintText " ţ Save PCX File As Raw Data"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				Save.Image File$, "PCX", "RAW"ă			END IFă			ClearScreenă		CASE 12ă			PrintText " ţ Save GIF File As Raw Data"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				Save.Image File$, "GIF", "RAW"ă			END IFă			ClearScreenăă	ă		CASE 14ă			PrintText " ţ Save BMP File As DATA Statements"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				Save.Image File$, "BMP", "DATA"ă			END IFă			ClearScreenă		CASE 15ă			PrintText " ţ Save PCX File As DATA Statements"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				Save.Image File$, "PCX", "DATA"ă			END IFă			ClearScreenă		CASE 16ă			PrintText " ţ Save GIF File As DATA Statements"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				Save.Image File$, "GIF", "DATA"ă			END IFă			ClearScreenăă		END SELECTă	END IFăă	IF MenuSelected.Menu = 3 THENă		LOCATE 3ă		SELECT CASE MenuSelected.Itemă		CASE 1ă			PrintText " ţ Edit Raw Palette"ă			File$ = QueryFile("*.*")ă			IF File$ <> "" THENă				IF Load.Palette(File$, "RAW") THEN Edit.Palette ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenă		CASE 2ă			PrintText " ţ Save Raw Palette As BMP Palette"ă			File$ = QueryFile("*.*")ă			IF File$ <> "" THENă				IF Load.Palette(File$, "RAW") THEN Save.Palette File$, "RAW", "BMP" ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenăă		CASE 4ă			PrintText " ţ View BMP Palette"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				IF Load.Palette(File$, "BMP") THEN View.Palette ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenă		CASE 5ă			PrintText " ţ View PCX Palette"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				IF Load.Palette(File$, "PCX") THEN View.Palette ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenă		CASE 6ă			PrintText " ţ View GIF Palette"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				IF Load.Palette(File$, "GIF") THEN View.Palette ELSE DO: LOOP UNTIL INKEY$ <> ""ă			END IFă			ClearScreenăăă		CASE 8ă			PrintText " ţ Save BMP Palette As Raw Data"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				Save.Palette File$, "BMP", "RAW"ă			END IFă			ClearScreenă		CASE 9ă			PrintText " ţ Save PCX Palette As Raw Data"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				Save.Palette File$, "PCX", "RAW"ă			END IFă			ClearScreenă		CASE 10ă			PrintText " ţ Save GIF Palette As Raw Data"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				Save.Palette File$, "GIF", "RAW"ă			END IFă			ClearScreenăăă		CASE 12ă			PrintText " ţ Save BMP Palette As DATA Statements"ă			File$ = QueryFile("*.BMP")ă			IF File$ <> "" THENă				Save.Palette File$, "BMP", "DATA"ă			END IFă			ClearScreenă		CASE 13ă			PrintText " ţ Save PCX Palette As DATA Statements"ă			File$ = QueryFile("*.PCX")ă			IF File$ <> "" THENă				Save.Palette File$, "PCX", "DATA"ă			END IFă			ClearScreenă		CASE 14ă			PrintText " ţ Save GIF Palette As DATA Statements"ă			File$ = QueryFile("*.GIF")ă			IF File$ <> "" THENă				Save.Palette File$, "GIF", "DATA"ă			END IFă			ClearScreenă		END SELECTă	END IFăă ă	IF MenuSelected.Menu = 4 THENă		LOCATE 3ă		SELECT CASE MenuSelected.Itemă		CASE 1ă			PrintText " ţ Append BLoader"ă			Append.Code "BLOAD"ă			ClearScreenă		CASE 2ă			PrintText " ţ Append RAW-Loader"ă			Append.Code "RAW"ă			ClearScreenă		CASE 3ă			PrintText " ţ Append DATA-Loader"ă			Append.Code "DATA"ă			ClearScreenă	 ă		CASE 5ă			PrintText " ţ Append RAW Palette Loader"ă			Append.Code "PALETTE"ă			ClearScreenă		CASE 6ă			PrintText " ţ Append DATA Palette Loader"ă			Append.Code "DATAPALETTE"ă			ClearScreenă		END SELECTă	END IFăă	IF MenuSelected.Menu = 1 AND MenuSelected.Item = 1 THEN About: ClearScreenăăLOOP UNTIL MenuSelected.Menu = 1 AND MenuSelected.Item = 3ăăMHideăăCLOSE #250ăCLOSE #251ăIF Exist("Menuswap.tmp") = True THEN KILL "menuswap.tmp"ăIF Exist("Itemswap.tmp") = True THEN KILL "itemswap.tmp"ăăCOLOR 7, 0: CLSăSYSTEMăăGifDATA:ăDATA 4,8,16,&h20,&h40,&h80,&h100,&h200,&h400,&h800,&h1000,8192ăDATA 1,3,7,15,31,63,127,255ăDATA 1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384ăăREM $STATICăSUB AboutăClearScreenăLOCATE 3ăPrintText "               ú C O N V E R T - (C) Sami Ky”stil„ 1998 ú"ăPRINTăPrintText " Convert is a multifunctional image convertion utility for MS QB 4.5"ăPRINTăPrintText " This program can convert BMP/PCX/GIF files into formats that you can"ăPrintText " use in your own programs. It can also extract palettes from BMP/PCX/GIF"ăPrintText " files that you can edit and save to RAW palette files. If you are not"ăPrintText " sure how to load the files made by this program, not to worry! It even"ăPrintText " writes the loading routines for you!"ăPRINTăPrintText " Images can be saved into the following formats: BSAVE, RAW, and DATA"ăPRINTăPrintText " - BSAVE is a very fast format, good for full screen logos and such."ăPrintText "   Palette can be appended to BSAVED files, too (320x200 only, see Options)"ăPrintText " - RAW is good for saving sprites and other small images. You can load these"ăPrintText "   files on screen or into an array. Palette can't be saved with this format."ăPrintText " - DATA is also good for small images. These files are stored directly into"ăPrintText "   a QBasic source file (QB45 File must be saved as ASCII)."ăPRINTăPrintText " ú Press any key to continue..."ăDO: LOOP UNTIL INKEY$ <> ""ăăClearScreenăLOCATE 3ăPrintText "               ú C O N V E R T - (C) Sami Ky”stil„ 1998 ú"ăPRINTăPrintText " Palettes can be saved into the following formats: RAW, and DATA"ăPRINTăPrintText " - RAW is a 768 byte binary file, that contains RGB format data."ăPrintText " - DATA is saved directly into a QBasic source file as DATA"ăPrintText "   statements (QB45 File must be saved as ASCII)."ăPRINTăPrintText " NOTE: In order to edit BMP/PCX/GIF palettes, you must first save them"ăPrintText "       to RAW palette data files and then edit those."ăPRINTăPrintText "                       ú This program is Freeware! ú"ăPRINTăPrintText "    You may use any part of this code, as long as you give me some"ăPrintText "                              credit for it."ăPRINTăPrintText "    This program was completely made by Sami Ky”stil„, except for:"ăPrintText "       - The BMP-saving routine, which was made by Stephen L. Maxson"ăPrintText "       - The BMP/PCX/GIF loaders were modified from Otso Karhu's/"ăPrintText "         Kurt Kuzba's/Unknown's programs."ăăPrintText " ú Press any key to continue..."ăDO: LOOP UNTIL INKEY$ <> ""ăEND SUBăăSUB Append.Code (Code$)ăMHideăăOut$ = RTRIM$(LTRIM$(UCASE$(Query("                     Enter the output file                     ", "&0%7 Save Image ", 60, ""))))ăIF Out$ = "" THEN MShow: EXIT SUBăăLOCATE 3ăăOPEN Out$ FOR BINARY AS #1ăTemp$ = SPACE$(1)ăGET #1, , Temp$ăCLOSE #1ăăIF Temp$ = CHR$(252) THENă	PrintText " ţ This file is probably a QB compressed file!"ă	DO: LOOP UNTIL INKEY$ <> ""ă	EXIT SUBăEND IFăăăSELECT CASE Code$ăCASE "BLOAD"ă	PrintText " ţ Appending BLOADer..."ă	OPEN Out$ FOR APPEND AS #1ă	PRINT #1, ""ă	PRINT #1, "DEFINT A-Z"ă	PRINT #1, "SUB Load.BSave (File$)"ă	PRINT #1, ""ă	PRINT #1, "' BLOADER from CONVERT (C) Sami Ky”stil„ 1998"ă	PRINT #1, ""ă	PRINT #1, "DEF SEG = &HA000"ă	PRINT #1, "BLOAD File$, 0"ă	PRINT #1, "DEF SEG"ă	PRINT #1, "File = FREEFILE"ă	PRINT #1, "OPEN File$ FOR BINARY AS #File"ă	PRINT #1, "IF LOF(File) > 320& * 200& THEN"ă	PRINT #1, "  TempPal$ = SPACE$(768)"ă	PRINT #1, "  GET #1, 320& * 200& + 7, TempPal$"ă	PRINT #1, "  FOR i& = 0 TO 255"ă	PRINT #1, "    r = ASC(MID$(TempPal$, (i& * 3) + 1, 1))"ă	PRINT #1, "    g = ASC(MID$(TempPal$, (i& * 3) + 2, 1))"ă	PRINT #1, "    b = ASC(MID$(TempPal$, (i& * 3) + 3, 1))"ă	PRINT #1, "    OUT (&H3C8), i&"ă	PRINT #1, "    OUT (&H3C9), r"ă	PRINT #1, "    OUT (&H3C9), g"ă	PRINT #1, "    OUT (&H3C9), b"ă	PRINT #1, "  NEXT"ă	PRINT #1, "END IF"ă	PRINT #1, "CLOSE File"ă	PRINT #1, "END SUB"ă	CLOSE #1ă	PrintText " ţ Done"ăCASE "RAW"ă	PrintText " ţ Appending RAW Loader..."ă	OPEN Out$ FOR APPEND AS #1ă ă	PRINT #1, "DEFINT A-Z"ă	PRINT #1, "SUB Load.RAW (File$, XLen, YLen, Segment, Offset)"ă	PRINT #1, ""ă	PRINT #1, "' RAW Loader from CONVERT (C) Sami Ky”stil„ 1998"ă	PRINT #1, ""ă	PRINT #1, "File = FREEFILE"ă	PRINT #1, "OPEN File$ FOR BINARY AS #File"ă	PRINT #1, ""ă	PRINT #1, "DIM ReadByte AS STRING * 1"ă	PRINT #1, ""ă	PRINT #1, "IF Segment <> -1 AND Offset <> -1 THEN"ă	PRINT #1, "  DEF SEG = Segment"ă	PRINT #1, "  POffset = Offset"ă	PRINT #1, "  FOR y = 0 TO YLen"ă	PRINT #1, "    FOR x = 0 TO XLen"ă	PRINT #1, "      GET #File, , ReadByte"ă	PRINT #1, "      POKE POffset, ASC(ReadByte)"ă	PRINT #1, "      POffset = POffset + 1"ă	PRINT #1, "    NEXT"ă	PRINT #1, "  NEXT"ă	PRINT #1, "ELSE"ă	PRINT #1, "  DEF SEG = &HA000"ă	PRINT #1, "  FOR y = 0 TO YLen"ă	PRINT #1, "    FOR x = 0 TO XLen"ă	PRINT #1, "      GET #File, , ReadByte"ă	PRINT #1, "      POKE (CLNG(y) * 320& + CLNG(x)), ASC(ReadByte)"ă	PRINT #1, "    NEXT"ă	PRINT #1, "  NEXT"ă	PRINT #1, "END IF"ă	PRINT #1, "DEF SEG"ă	PRINT #1, "END SUB"ă	CLOSE #1ă	PrintText " ţ Done"ăCASE "DATA"ă	PrintText " ţ Appending DATA Loader..."ă	OPEN Out$ FOR APPEND AS #1ă ă	PRINT #1, "DEFINT A-Z"ă	PRINT #1, "SUB Load.DATA (XLen, YLen, Segment, Offset)"ă	PRINT #1, ""ă	PRINT #1, "' DATA Loader from CONVERT (C) Sami Ky”stil„ 1998"ă	PRINT #1, ""ă	PRINT #1, "IF Segment <> -1 AND Offset <> -1 THEN"ă	PRINT #1, "  DEF SEG = Segment"ă	PRINT #1, "  FOR y = 0 TO YLen"ă	PRINT #1, "    FOR x = 0 TO XLen"ă	PRINT #1, "      READ ReadByte"ă	PRINT #1, "      POKE POffset, ReadByte"ă	PRINT #1, "      POffset = POffset + 1"ă	PRINT #1, "    NEXT"ă	PRINT #1, "  NEXT"ă	PRINT #1, "ELSE"ă	PRINT #1, "  DEF SEG = &HA000"ă	PRINT #1, "  FOR y = 0 TO YLen"ă	PRINT #1, "    FOR x = 0 TO XLen"ă	PRINT #1, "      READ ReadByte"ă	PRINT #1, "      POKE (CLNG(y) * 320& + CLNG(x)), ReadByte"ă	PRINT #1, "    NEXT"ă	PRINT #1, "  NEXT"ă	PRINT #1, "END IF"ă	PRINT #1, "DEF SEG"ă	PRINT #1, "CLOSE File"ă	PRINT #1, ""ă	PRINT #1, "END SUB"ă	CLOSE #1ă	PrintText " ţ Done"ăCASE "PALETTE"ă	PrintText " ţ Appending Palette Loader..."ă	OPEN Out$ FOR APPEND AS #1ăă	PRINT #1, "DEFINT A-Z"ă	PRINT #1, "SUB Load.Palette (File$)"ă	PRINT #1, ""ă	PRINT #1, "' RAW Palette Loader from CONVERT (C) Sami Ky”stil„ 1998"ă	PRINT #1, ""ă	PRINT #1, "DIM Bt AS STRING * 1"ă	PRINT #1, "TempFile = FREEFILE"ă	PRINT #1, "OPEN File$ FOR BINARY AS TempFile"ă	PRINT #1, "FOR I = 0 TO 255"ă	PRINT #1, "  OUT &H3C8, I"ă	PRINT #1, "  GET #TempFile, , Bt"ă	PRINT #1, "  OUT &H3C9, ASC(Bt)"ă	PRINT #1, "  GET #TempFile, , Bt"ă	PRINT #1, "  OUT &H3C9, ASC(Bt)"ă	PRINT #1, "  GET #TempFile, , Bt"ă	PRINT #1, "  OUT &H3C9, ASC(Bt)"ă	PRINT #1, "NEXT"ă	PRINT #1, "CLOSE TempFile"ă	PRINT #1, "END SUB"ă	CLOSE #1ă	PrintText " ţ Done"ăCASE "DATAPALETTE"ă	PrintText " ţ Appending DATA Palette Loader..."ă	OPEN Out$ FOR APPEND AS #1ă	PRINT #1, "DEFINT A-Z"ă	PRINT #1, "SUB Load.DATAPalette"ă	PRINT #1, ""ă	PRINT #1, "' DATA Palette Loader from CONVERT (C) Sami Ky”stil„ 1998"ă	PRINT #1, ""ă	PRINT #1, "FOR x = 0 TO 255"ă	PRINT #1, "  OUT (&H3C8), x - 1"ă	PRINT #1, "  READ Red, Green, Blue"ă	PRINT #1, "  OUT (&H3C9), Red"ă	PRINT #1, "  OUT (&H3C9), Green"ă	PRINT #1, "  OUT (&H3C9), Blue"ă	PRINT #1, "NEXT"ă	PRINT #1, "END SUB"ă	CLOSE #1ă	PrintText " ţ Done"ăEND SELECTăăPRINTăPrintText " ú Press any key to continue..."ăDO: LOOP UNTIL INKEY$ <> ""ăEND SUBăăSUB Center (Text$, YPos)ăLOCATE YPos, 40 - RealLen(Text$) \ 2ăColPrint Text$ăEND SUBăăSUB ClearScreenăMHideăPCOPY 0, 1ăSCREEN , , 0, 1ăCOLOR 7, 1: CLSăPALETTE 1, 40ăPALETTE 3, 35ăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăSCREEN , , 0, 0ăMShowăEND SUBăăSUB ColPrint (Text$)ă'----------------------------------------------------------------------------ă'                           SúYúSúTúEúMă'----------------------------------------------------------------------------ăă'----------------------------------------------------------------------------ă' Prints color-coded textă'----------------------------------------------------------------------------ă' Color codes:ă'ă'   & followed by a color value between 0-15 (in hex)ă'   % same as &, except for backround coloră'ă' Example:ă'ă'   This text is &Credă'----------------------------------------------------------------------------ăăFOR I = 1 TO LEN(Text$)ă	Done = 0ă	DOă		IF MID$(Text$, I, 1) = "&" AND INSTR("0123456789ABCDEF", MID$(Text$, I + 1, 1)) AND I < LEN(Text$) THENă			COLOR VAL("&H" + MID$(Text$, I + 1, 1))ă			I = I + 2ă		ELSEIF MID$(Text$, I, 1) = "%" AND INSTR("01234567", MID$(Text$, I + 1, 1)) AND I < LEN(Text$) THENă			COLOR , VAL("&H" + MID$(Text$, I + 1, 1))ă			I = I + 2ă		ELSEă			Done = 1ă		END IFă	LOOP UNTIL Doneă	PRINT MID$(Text$, I, 1);ăNEXTăăEND SUBăăSUB Create.Menu (Num, Caption$)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Creates a main menu number Num, with the text Caption$ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăIF Num >= QMenu.Topics THENă	QMenu.Topics = QMenu.Topics + 1ă	Num = QMenu.TopicsăEND IFăSet.MenuTopic Num, Caption$ăDraw.MenuăEND SUBăăSUB Create.MenuItem (Num, Caption$, Style AS STRING, Selected AS STRING, Active AS STRING)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Adds a menuitem into the menu Num with the text Caption$ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'ă'     Style - "1" or "0" - If 1, then Item can be toggled on/offă'                          else it is a normal menu itemă'ă'  Selected - "1" or "0" - If Style = "1", then you can choose whether theă'                          item is initially selected or not (1/0)ă'ă'    Active - "1" or "0" - Specifies if the menu item is active, oră'                          grayed out.ă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSet.MenuItem Num, MenuItems(Num) + 1, Caption$, Active, Style, SelectedăMenuItems(Num) = MenuItems(Num) + 1ăEND SUBăăFUNCTION DirEntry% (Entry AS STRING)ă'----------------------------------------------------------------------ă' Establishes if a directory entry exists and returns type of entryă' (file, subdirectory or device).ă' Type of directory entry returned by the function is one of theă' following values:ă' 0  (IsNONE     )ă' 1  (IsFILE     )ă' 2  (IsDIRECTORY)ă' 3  (IsDEVICE   )ăă' Examples:ă' FileExist = (DirEntry(FileName$) = IsFILE)ă' DirExist = (DirEntry(FileName$) = IsDIRECTORY)ă'----------------------------------------------------------------------ă	DIM fiAttrib AS INTEGERă	DIM Temp AS STRINGă	Temp$ = DirFirst$(Entry, &H77)   'attribute for everything except labelă	IF LEN(Temp$) THENă		fiAttrib = ASC(FileInfo.fiAttribute)ă		IF fiAttrib AND &H40 THENă			DirEntry% = IsDEVICEă		ELSEIF fiAttrib AND &H10 THENă			DirEntry% = IsDIRECTORYă		ELSEă			DirEntry% = IsFILEă		END IFă	ELSEă		DirEntry% = IsNONEă	END IFăEND FUNCTIONăăFUNCTION DirFirst$ (Mask AS STRING, Attrib AS INTEGER)ă'----------------------------------------------------------------------ă' Gets the first file name with matching mask and attributesă' If an error is encountered the function returns "" as its value.ă'----------------------------------------------------------------------ă	DIM MaskZ AS STRINGă	DIM Reg   AS RegTypeXă	DIM Zero  AS INTEGERă	MaskZ = Mask + CHR$(0)ă	SetDTA FileInfo                       ' Set up FileInfo as DTAă	FileInfo.fiFileName = STRING$(13, 0)  ' Clean the data structureă	Reg.ax = &H4E00ă	' search attributes including read-only filesă	Reg.cx = Attrib OR 1ă	Reg.ds = VARSEG(MaskZ)                ' address of file maskă	Reg.dx = SADD(MaskZ)ă	CALL InterruptX(&H21, Reg, Reg)ă	IF (Reg.flags AND CARRY) THEN         ' if erroră		DOSError = Reg.ax                   ' error number in DOSErroră		DirFirst$ = ""ă	ELSEă		DOSError = 0ă		Zero = INSTR(FileInfo.fiFileName, CHR$(0))ă		DirFirst$ = LEFT$(FileInfo.fiFileName, Zero - 1)  ' the file nameă	END IFăEND FUNCTIONăăFUNCTION DirNext$ă'----------------------------------------------------------------------ă' Gets the next file name with matching mask and attributes.ă' If an error is encountered the function returns "" as its value.ă'----------------------------------------------------------------------ă	DIM Reg   AS RegTypeXă	DIM Zero  AS INTEGERă	FileInfo.fiFileName = STRING$(13, 0)  ' Clean the data structureă	Reg.ax = &H4F00ă	CALL InterruptX(&H21, Reg, Reg)ă	IF (Reg.flags AND CARRY) THEN         ' if erroră		DOSError = Reg.ax                   ' error number in DOSErroră		DirNext$ = ""ă	ELSEă		DOSError = 0ă		Zero = INSTR(FileInfo.fiFileName, CHR$(0))ă		DirNext$ = LEFT$(FileInfo.fiFileName, Zero - 1)  ' the file nameă	END IFăEND FUNCTIONăăSUB Draw.Border (x, y, X2, Y2, FCol, BCol)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Draws the menu borderă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăFOR I = x + 1 TO X2 - 1ă	PokeChar I, y, "Ä", FCol, BColă	PokeChar I, Y2, "Ä", FCol, BColăNEXTăFOR I = y + 1 TO Y2 - 1ă	PokeChar x, I, "ł", FCol, BColă	PokeChar X2, I, "ł", FCol, BColăNEXTăPokeChar x, y, "Ú", FCol, BColăPokeChar X2, y, "ż", FCol, BColăăPokeChar x, Y2, "Ŕ", FCol, BColăPokeChar X2, Y2, "Ů", FCol, BColăăEND SUBăăSUB Draw.Menuă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Draws the menu bar at the top of the screenă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăMHideăăIF QMenu.Topics > 0 THENă	xx = 1ă	yy = 1ă	FOR I = 1 TO QMenu.Topicsă		Menu$ = Get.MenuTopic$(I)ă		IF xx + LEN(Menu$) + 2 < 81 THENă			PPrint xx, yy, " " + Menu$ + " ", QMenu.MenuFCol, QMenu.MenuBColă			xx = xx + LEN(Menu$) + 2ă		ELSEă			PPrint xx, yy, STRING$(80 - xx + 1, " "), QMenu.MenuFCol, QMenu.MenuBColă			yy = yy + 1ă			xx = 1ă			PPrint xx, yy, " " + Menu$ + " ", QMenu.MenuFCol, QMenu.MenuBColă			xx = xx + LEN(Menu$) + 2ă		END IFă		PPrint xx, yy, STRING$(80 - xx + 1, " "), QMenu.MenuFCol, QMenu.MenuBColă	NEXTă	QMenu.BarSize = yyăEND IFăMShowăEND SUBăăSUB Draw.Palette (ActiveCol)ăBCol = FindBrightestColorăCol = 0ăFOR y = 20 TO 140 STEP 10ă	FOR x = 20 TO 280 STEP 10ă		LINE (x, y)-(x + 9, y + 9), Col, BFă		IF Col = ActiveCol THENă			LINE (x, y)-(x + 9, y + 9), BCol, Bă		END IFă		Col = Col + 1ă		IF Col = 256 THEN EXIT SUBă	NEXTăNEXTăEND SUBăăSUB Draw.PaletteMenu (Col)ăăCOLOR ColăăLOCATE 16, 34ăPRINT "R G B"ăLINE (299, 130)-(300, 193), Col, BFăLINE (283, 130)-(284, 193), Col, BFăLINE (267, 130)-(268, 193), Col, BFăăLOCATE 17, 1: PRINT "ÚÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄż"ăLOCATE 18, 1: PRINT "ł Save ł Restoreł"ăLOCATE 19, 1: PRINT "ŔÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄŮ"ăăLOCATE 20, 1: PRINT "ÚÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄż"ăLOCATE 21, 1: PRINT "ł Gradient ł Smoothen ł"ăLOCATE 22, 1: PRINT "ŔÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄŮ"ăăEND SUBăăSUB DrawFileList (File, Offset, Selected, Max)ăăBlockPos = (Selected + 1) / (Max) * (Lines - 9) + 4ăăCOLOR 0, 7ăFOR I = 4 TO Lines - 5ă	LOCATE I, 31ă	IF I <> BlockPos THEN PRINT "°";ăNEXTăLOCATE BlockPos, 31ăPRINT "Ű";ăăLOCATE 3, 31ăPRINT CHR$(24);ăLOCATE Lines - 4, 31ăPRINT CHR$(25)ăăCount = OffsetăSeekFileItem File, CountăFOR I = 3 TO Lines - 4ă	GET #File, , FListă	LOCATE I, 16ă	IF Count = Selected THENă		COLOR 15, 1ă	ELSEă		COLOR 7, 4ă	END IFă	IF FBuffer(Count) THENă		COLOR 10ă		PRINT CHR$(16);ă	ELSEă		PRINT " ";ă	END IFă	PRINT FList;ă	Count = Count + 1ăNEXTăăEND SUBăăSUB DrawWindow (x, y, X2, Y2, FCol, BCol, Topic$, Shadow)ăSCREEN , , 1, 0ăPCOPY 0, 1ăăCOLOR FCol, BColăXLen = X2 - xăLOCATE y, x, 0ăPRINT "Ú" + STRING$(XLen - 2, "Ä") + "ż";ăăFOR I = y + 1 TO Y2 - 1ă	LOCATE I, xă	PRINT "ł" + STRING$(XLen - 2, " ") + "ł";ăNEXTăLOCATE Y2, x, 0ăPRINT "Ŕ" + STRING$(XLen - 2, "Ä") + "Ů";ăăLOCATE y, x + ((X2 - x) \ 2) - RealLen(Topic$) \ 2ăColPrint Topic$ăăPCOPY 1, 0ăSCREEN , , 0, 0ăăIF Shadow = True THENă	FOR I = y + 1 TO Y2 + 1ă		PokeChar X2 + 0, I, PeekChar$(X2 + 0, I), 8, 0ă		PokeChar X2 + 1, I, PeekChar$(X2 + 1, I), 8, 0ă	NEXTăă	FOR I = x + 2 TO X2 - 1ă		PokeChar I, Y2 + 1, PeekChar$(I, Y2 + 1), 8, 0ă	NEXTăEND IFăăEND SUBăăSUB Edit.PaletteăMHideăăSCREEN 13: CLSăăActiveCol = 0ăSet.PaletteăDraw.Palette ActiveColăOrgPal$ = PalăRotPal = -1ăăCol = FindBrightestColorăDraw.PaletteMenu ColăăMemCopy &HA000, 0, VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HFA00ăRBar = ASC(MID$(Pal, (ActiveCol * 3) + 1, 1))ăGBar = ASC(MID$(Pal, (ActiveCol * 3) + 2, 1))ăBBar = ASC(MID$(Pal, (ActiveCol * 3) + 3, 1))ăăOrgPal$ = PalăăGradient = 0ăăDOă	Key$ = UCASE$(INKEY$)ăă	MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă	Mx = HiiriX% \ 2ă	My = HiiriY%ă	Ml = HiiriV%ă	Mr = HiiriO%ă	IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă	IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă	IF Ml = -1 AND Click = 0 THEN Click = -1ăă	IF MouseMove = 1 THENă		WAIT &H3DA, 8ă		WAIT &H3DA, 8, 8ă		WAIT &H3DA, 8ă		MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăă		IF Gradient = 1 THENă			LOCATE 1, 1ă			PRINT "[GRADIENT] - Set color to fade to";ă		END IFăă		LINE (297, 193 - BBar)-(302, 193), Col, BFă		LINE (281, 193 - GBar)-(286, 193), Col, BFă		LINE (265, 193 - RBar)-(270, 193), Col, BFă		PSET (Mx - 2, My), Colă		PSET (Mx + 2, My), Colă		PSET (Mx, My - 2), Colă		PSET (Mx, My + 2), Colă				ă		PSET (Mx - 1, My), Colă		PSET (Mx + 1, My), Colă		PSET (Mx, My - 1), Colă		PSET (Mx, My + 1), Colă	END IFăă	IF Mx > 20 AND My > 20 AND Mx < 289 AND My < 119 THENă		IF Ml = -1 THENă			OldCol = ActiveColă			ActiveCol = POINT(Mx, My)ă			IF OldCol <> ActiveCol THENă				WAIT &H3DA, 8ă				WAIT &H3DA, 8, 8ă				WAIT &H3DA, 8ă				MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă				Draw.Palette ActiveColă				MemCopy &HA000, 0, VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HFA00ă				RBar = ASC(MID$(Pal, (ActiveCol * 3) + 1, 1))ă				GBar = ASC(MID$(Pal, (ActiveCol * 3) + 2, 1))ă				BBar = ASC(MID$(Pal, (ActiveCol * 3) + 3, 1))ă				LINE (265, 193 - RBar)-(270, 193), Col, BFă				LINE (281, 193 - GBar)-(286, 193), Col, BFă				LINE (297, 193 - BBar)-(302, 193), Col, BFăă				PSET (Mx - 2, My), Colă				PSET (Mx + 2, My), Colă				PSET (Mx, My - 2), Colă				PSET (Mx, My + 2), Colă					 ă				PSET (Mx - 1, My), Colă				PSET (Mx + 1, My), Colă				PSET (Mx, My - 1), Colă				PSET (Mx, My + 1), Colă			END IFă		END IFă	END IFăă'  IF My >= 130 AND My <= 193 AND Ml = -1 AND MouseMove = 1 AND Gradient = 0 THENă	IF My >= 130 AND My <= 193 AND Ml = -1 AND Gradient = 0 THENă		IF Mx >= 265 AND Mx <= 270 THENă			MID$(Pal, (ActiveCol * 3) + 1, 1) = CHR$(ABS(63 - (My - 130)))ă			RBar = ASC(MID$(Pal, (ActiveCol * 3) + 1, 1))ă			Set.Paletteă		END IFă		IF Mx >= 281 AND Mx <= 286 THENă			MID$(Pal, (ActiveCol * 3) + 2, 1) = CHR$(ABS(63 - (My - 130)))ă			GBar = ASC(MID$(Pal, (ActiveCol * 3) + 2, 1))ă			Set.Paletteă		END IFă		IF Mx >= 297 AND Mx <= 302 THENă			MID$(Pal, (ActiveCol * 3) + 3, 1) = CHR$(ABS(63 - (My - 130)))ă			BBar = ASC(MID$(Pal, (ActiveCol * 3) + 3, 1))ă			Set.Paletteă		END IFă	END IFăă	IF Click = 1 THENă		IF Mx >= 5 AND Mx <= 58 AND My >= 133 AND My <= 147 THENă			LOCATE 23, 1: PRINT "[SAVE] - Enter Filename:"ă			File$ = ""ă			DOă				Key$ = INKEY$ă				WAIT &H3DA, 8ă				LINE (TPos * 8, 24 * 8)-(TPos * 8 + 7, 24 * 8), 0ă				IF Key$ = CHR$(13) THEN EXIT DOă				IF Key$ = CHR$(27) THEN EXIT DOă				File$ = InputField(File$, Key$, 30, TPos)ă				LOCATE 24, 1: PRINT File$ + SPACE$(30 - LEN(File$));ă				LINE (TPos * 8, 24 * 8)-(TPos * 8 + 7, 24 * 8), Colă			LOOPă			IF Key$ = CHR$(13) THENă				OPEN File$ FOR BINARY AS #1ă				PUT #1, , Pală				CLOSE #1ă			END IFă			Key$ = ""ă		END IFă ă		IF Mx >= 61 AND Mx <= 130 AND My >= 133 AND My <= 147 THENă			LOCATE 25, 1ă			PRINT "[RESTORE] - Are you sure? [Y/N]";ă			k$ = UCASE$(INPUT$(1))ă			IF k$ = "Y" THEN Pal = OrgPal$: Set.Paletteă			Col = FindBrightestColoră			COLOR Colă			RBar = ASC(MID$(Pal, (ActiveCol * 3) + 1, 1))ă			GBar = ASC(MID$(Pal, (ActiveCol * 3) + 2, 1))ă			BBar = ASC(MID$(Pal, (ActiveCol * 3) + 3, 1))ă			LINE (265, 193 - RBar)-(270, 193), Col, BFă			LINE (281, 193 - GBar)-(286, 193), Col, BFă			LINE (297, 193 - BBar)-(302, 193), Col, BFă		END IFăă		IF Mx >= 5 AND Mx <= 90 AND My >= 157 AND My <= 171 THENă			Gradient = 1ă			GradientStart = ActiveColă		END IFăă		IF Mx >= 93 AND Mx <= 178 AND My >= 157 AND My <= 171 THENă			SmoothPal 1ă			Col = FindBrightestColoră			COLOR Colă			RBar = ASC(MID$(Pal, (ActiveCol * 3) + 1, 1))ă			GBar = ASC(MID$(Pal, (ActiveCol * 3) + 2, 1))ă			BBar = ASC(MID$(Pal, (ActiveCol * 3) + 3, 1))ă			LINE (265, 193 - RBar)-(270, 193), Col, BFă			LINE (281, 193 - GBar)-(286, 193), Col, BFă			LINE (297, 193 - BBar)-(302, 193), Col, BFă		END IFă	END IFăă	IF Gradient = 1 AND ActiveCol <> GradientStart THENă		Gradient = 0ă		IF ActiveCol < GradientStart THEN SWAP ActiveCol, GradientStartă		r& = ASC(MID$(Pal, (GradientStart * 3) + 1, 1)) * 1024&ă		g& = ASC(MID$(Pal, (GradientStart * 3) + 2, 1)) * 1024&ă		b& = ASC(MID$(Pal, (GradientStart * 3) + 3, 1)) * 1024&ă		Ln = ABS(ActiveCol - GradientStart)ă		RDelta& = (ASC(MID$(Pal, (ActiveCol * 3) + 1, 1)) - ASC(MID$(Pal, (GradientStart * 3) + 1, 1))) / Ln * 1024&ă		GDelta& = (ASC(MID$(Pal, (ActiveCol * 3) + 2, 1)) - ASC(MID$(Pal, (GradientStart * 3) + 2, 1))) / Ln * 1024&ă		BDelta& = (ASC(MID$(Pal, (ActiveCol * 3) + 3, 1)) - ASC(MID$(Pal, (GradientStart * 3) + 3, 1))) / Ln * 1024&ă		FOR I = GradientStart TO ActiveColă			MID$(Pal, (I * 3) + 1, 1) = CHR$(ABS(r& \ 1024) MOD 256)ă			MID$(Pal, (I * 3) + 2, 1) = CHR$(ABS(g& \ 1024) MOD 256)ă			MID$(Pal, (I * 3) + 3, 1) = CHR$(ABS(b& \ 1024) MOD 256)ă			r& = r& + RDelta&ă			g& = g& + GDelta&ă			b& = b& + BDelta&ă		NEXTă		Set.Paletteă	END IFăă	IF Key$ = "R" THENă		RotPal = -RotPală		IF RotPal = -1 THENă			Pal = RotPal$: Set.Paletteă		ELSEă			RotPal$ = Pală		END IFă	END IFăă	IF RotPal = 1 THEN RotatePalăă	OldMx = Mxă	OldMy = Myăă	IF Key$ = CHR$(27) AND Gradient = 1 THEN Gradient = 0: Key$ = ""ăă	'LOCATE 1, 1: PRINT Mx; My; ActiveColăLOOP UNTIL (Key$ = CHR$(27) AND Gradient = 0)ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăMShowăăEND SUBăăSUB EraseMessageăPCOPY 2, 0ăIF Row > 0 THEN LOCATE RowăEND SUBăăSUB ErrorDialog (Desc$)ăRow = CSRLINăPCOPY 0, 2ăDrawWindow 40 - RealLen(Desc$) \ 2 - 2, Lines \ 2 - 2, 40 + RealLen(Desc$) \ 2 + 3, Lines \ 2 + 2, 7, 4, "&0%7 Error ", TrueăCOLOR 14, 4ăCenter Desc$, Lines \ 2ăEND SUBăăFUNCTION Exist% (File$)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'                       Checks if a file existsă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'ă'    File$ - File to checkă'ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'  Returns True if file exists, else Falseă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăăIF File$ = "" THEN Exist = False: EXIT FUNCTIONăCheckfile = FREEFILEăOPEN File$ FOR BINARY AS #CheckfileăIF LOF(Checkfile) = 0 THENă	Exist = Falseă	CLOSE #Checkfileă	KILL File$ăELSEă	Exist = Trueă	CLOSE #CheckfileăEND IFăăEND FUNCTIONăăSUB FillChar (Segment%, Offset%, Value%, Bytes%)ăăDEF SEG = VARSEG(ASMFillChar$)ă	 CALL absolute(BYVAL Segment%, BYVAL Offset%, BYVAL Value%, BYVAL Bytes%, SADD(ASMFillChar$))ăDEF SEGăăEND SUBăăFUNCTION FindBrightestColorăBr = 0ăIndex = 0ăFOR I = 0 TO 255ă	OUT &H3C7, Iă	r = INP(&H3C9)ă	g = INP(&H3C9)ă	b = INP(&H3C9)ă	IF (r + b + g) \ 3 > Br THEN Br = (r + b + g) \ 3: Index = IăNEXTăFindBrightestColor = IndexăEND FUNCTIONăăSUB Gauge (XPos, YPos, XLen, Value&, Max&, Char$)ăLOCATE YPos, XPosăPRINT LEFT$(Char$, 1);ăPRINT STRING$(Value& / Max& * (XLen - 2), MID$(Char$, 3, 1));ăPRINT STRING$((XLen - 2) - (Value& / Max& * (XLen - 2)), MID$(Char$, 2, 1));ăPRINT MID$(Char$, 4, 1);ăEND SUBăăFUNCTION Get.MenuItem$ (MenuNum, Num)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Returns the menu item number Num caption in menu number MenuNumă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSEEK #251, (CLNG(MenuNum - 1) * 6100) + (Num * 122)ăGET #251, , MenuItemăTemp$ = MenuItem.CaptionăăTemp2$ = ""ăFOR I = 1 TO LEN(Temp$)ă	IF NOT MID$(Temp$, I, 1) = CHR$(0) THEN Temp2$ = Temp2$ + MID$(Temp$, I, 1) ELSE EXIT FORăNEXTăGet.MenuItem$ = LTRIM$(RTRIM$(Temp2$))ăEND FUNCTIONăăSUB Get.MenuItemInfo (MenuNum, Num, Style AS STRING, Selected AS STRING, Active AS STRING)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Returns info about item number Num in menu MenuNumă' See SUB Create.MenuItem for info on menu item variables.ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSEEK #251, (CLNG(MenuNum - 1) * 6100) + (Num * 122)ăăGET #251, , MenuItemăStyle = MenuItem.StyleăSelected = MenuItem.SelectedăActive = MenuItem.ActiveăăEND SUBăăFUNCTION Get.MenuTopic$ (Num)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Returns the caption of a main menu item number Numă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSEEK #250, CLNG(Num) * 16ăTemp$ = SPACE$(16)ăGET #250, , Temp$ăTemp2$ = ""ăFOR I = 1 TO LEN(Temp$)ă	IF NOT MID$(Temp$, I, 1) = CHR$(0) THEN Temp2$ = Temp2$ + MID$(Temp$, I, 1) ELSE EXIT FORăNEXTăGet.MenuTopic$ = LTRIM$(RTRIM$(Temp2$))ăEND FUNCTIONăăFUNCTION Getbit STATICăăSHARED ByteBuffer AS STRING * 1, Powers() AS INTEGER, Bitsin AS INTEGER, BlockLength AS INTEGER, Num AS INTEGERăBitsin = Bitsin + 1ăăIF Bitsin = 9 THENă		GET #1, , ByteBufferă		TempChar = ASC(ByteBuffer)ă		Bitsin = 1ă		Num = Num + 1ă		IF Num = BlockLength THENă				BlockLength = TempChar + 1ă				GET #1, , ByteBufferă				TempChar = ASC(ByteBuffer)ă				Num = 1ă		END IFăEND IFăăIF (TempChar AND Powers(Bitsin)) = 0 THEN Getbit = 0 ELSE Getbit = 1ăăEND FUNCTIONăăSUB GetFileInfo (pFileInfo AS DOSFileInfo)ă'----------------------------------------------------------------------ă' Gets FileInfo about file which name was returned by DirFirst/DirNextă'----------------------------------------------------------------------ă	pFileInfo = FileInfoăEND SUBăăSUB Init.Menuă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Call this at the start of your programs, initializes the menuă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăQMenu.MenuFCol = 0ăQMenu.MenuBCol = 3ăQMenu.MenuDisabled = 8ăăCreate.Menu 1, "Program"ăCreate.Menu 2, "Image"ăCreate.Menu 3, "Palette"ăCreate.Menu 4, "Code"ăCreate.Menu 5, "Options"ăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCreate.MenuItem 1, "About", "0", "0", "1"ăCreate.MenuItem 1, "-", "0", "0", "1"ăCreate.MenuItem 1, "Quit", "0", "0", "1"ăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCreate.MenuItem 2, "View BMP...", "0", "0", "1"ăCreate.MenuItem 2, "View PCX...", "0", "0", "1"ăCreate.MenuItem 2, "View GIF...", "0", "0", "1"ăCreate.MenuItem 2, "View Currently Loaded Image...", "0", "0", "1"ăCreate.MenuItem 2, "-", "0", "0", "1"ăCreate.MenuItem 2, "BSave BMP...", "0", "0", "1"ăCreate.MenuItem 2, "BSave PCX...", "0", "0", "1"ăCreate.MenuItem 2, "BSave GIF...", "0", "0", "1"ăCreate.MenuItem 2, "-", "0", "0", "1"ăCreate.MenuItem 2, "Save BMP As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 2, "Save PCX As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 2, "Save GIF As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 2, "-", "0", "0", "1"ăCreate.MenuItem 2, "Save BMP As DATA Statements...", "0", "0", "1"ăCreate.MenuItem 2, "Save PCX As DATA Statements...", "0", "0", "1"ăCreate.MenuItem 2, "Save GIF As DATA Statements...", "0", "0", "1"ăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCreate.MenuItem 3, "Edit Raw Palette...", "0", "0", "1"ăCreate.MenuItem 3, "Save Raw Palette As BMP Palette...", "0", "0", "1"ăCreate.MenuItem 3, "-", "0", "0", "1"ăCreate.MenuItem 3, "View BMP Palette...", "0", "0", "1"ăCreate.MenuItem 3, "View PCX Palette...", "0", "0", "1"ăCreate.MenuItem 3, "View GIF Palette...", "0", "0", "1"ăCreate.MenuItem 3, "-", "0", "0", "1"ăCreate.MenuItem 3, "Save BMP Palette As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 3, "Save PCX Palette As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 3, "Save GIF Palette As Raw Byte Data...", "0", "0", "1"ăCreate.MenuItem 3, "-", "0", "0", "1"ăCreate.MenuItem 3, "Save BMP Palette As DATA Statements...", "0", "0", "1"ăCreate.MenuItem 3, "Save PCX Palette As DATA Statements...", "0", "0", "1"ăCreate.MenuItem 3, "Save GIF Palette As DATA Statements...", "0", "0", "1"ăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCreate.MenuItem 4, "Append BLoader...", "0", "0", "1"ăCreate.MenuItem 4, "Append Raw Byte Loader...", "0", "0", "1"ăCreate.MenuItem 4, "Append DATA Loader...", "0", "0", "1"ăCreate.MenuItem 4, "-", "0", "0", "1"ăCreate.MenuItem 4, "Append Palette Loader...", "0", "0", "1"ăCreate.MenuItem 4, "Append DATA Statement Palette Loader...", "0", "0", "1"ăă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCreate.MenuItem 5, "Add Palette To BSaved File (320x200 Only)", "1", "0", "1"ăăEND SUBăăFUNCTION InputField$ (Text$, Key$, MaxLen, TPos)ăIF Key$ = "" THEN InputField$ = Text$: EXIT FUNCTIONăăSELECT CASE Key$ăCASE IS = CHR$(8)ă	IF LEN(Text$) > 0 THENă		Text$ = LEFT$(Text$, TPos - 1) + MID$(Text$, TPos + 1, 255)ă		TPos = TPos - 1ă		IF TPos = -1 THEN TPos = 0ă		Key$ = ""ă	ELSEă		Key$ = ""ă	END IFăCASE IS = CHR$(0) + CHR$(75)ă	IF TPos > 0 THEN TPos = TPos - 1ă	Key$ = ""ăCASE IS = CHR$(0) + CHR$(77)ă	TPos = TPos + 1ă	IF TPos > MaxLen THEN TPos = MaxLenă	IF TPos > LEN(Text$) THEN TPos = LEN(Text$)ă	Key$ = ""ăCASE IS = CHR$(0) + "S"ă	Text$ = LEFT$(Text$, TPos) + MID$(Text$, TPos + 2, 255)ă	Key$ = ""ăCASE IS = CHR$(9)ă	Key$ = ""ăEND SELECTăăIF LEFT$(Key$, 1) = CHR$(0) THEN Key$ = ""ăăIF Key$ <> "" THENă	Text$ = LEFT$(Text$, TPos) + Key$ + MID$(Text$, TPos + 1, 255)ă	IF LEN(Text$) > MaxLen THEN Text$ = LEFT$(Text$, MaxLen)ă	TPos = TPos + 1ă	IF TPos > MaxLen THEN TPos = MaxLenăEND IFăăInputField$ = Text$ăăEND FUNCTIONăăSUB Load.BSave (File$)ăăDEF SEG = &HA000ăBLOAD File$, 0ăDEF SEGăFile = FREEFILEăOPEN File$ FOR BINARY AS #FileăIF LOF(File) > 320& * 200& THENă	TempPal$ = SPACE$(768)ă	GET #1, 320& * 200& + 7, TempPal$ă	FOR I& = 0 TO 255ă		r = ASC(MID$(TempPal$, (I& * 3) + 1, 1))ă		g = ASC(MID$(TempPal$, (I& * 3) + 2, 1))ă		b = ASC(MID$(TempPal$, (I& * 3) + 3, 1))ă		OUT (&H3C8), I&ă		OUT (&H3C9), ră		OUT (&H3C9), gă		OUT (&H3C9), bă	NEXTăEND IFăCLOSE FileăăEND SUBăăSUB Load.DATA (XLen, YLen, Segment, Offset)ăăIF Segment <> -1 AND Offset <> -1 THENă	DEF SEG = Segmentă	FOR y = 0 TO YLenă		FOR x = 0 TO XLenă			READ ReadByteă			POKE POffset, ReadByteă			POffset = POffset + 1ă		NEXTă	NEXTăELSEă	DEF SEG = &HA000ă	FOR y = 0 TO YLenă		FOR x = 0 TO XLenă			READ ReadByteă			POKE (CLNG(y) * 320& + CLNG(x)), ReadByteă		NEXTă	NEXTăEND IFăDEF SEGăCLOSE FileăăEND SUBăăFUNCTION Load.Image (File$, Format$)ăMHideăCOLOR 7ăLOCATE 3, 3ăPal = ""ăăIF Exist(File$) = False THEN Load.Image = False: PrintText "File not found!": EXIT FUNCTIONăClearScreenăăFillChar VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), 0, &HFA00ăCOLOR 7ăLOCATE 3, 3ăăPrintText "Loading " + UCASE$(File$) + "..."ăăSELECT CASE UCASE$(Format$)ăCASE "BMP"ă	DIM Tavu AS STRING * 1ăă	OPEN File$ FOR BINARY AS #1    ' Avataan tiedosto binaarimuodossa.ăă	FOR Otto = 1 TO 2ă		GET #1, , Tavuă		Tyyppi$ = Tyyppi$ + Tavuă	NEXTăă	IF Tyyppi$ <> "BM" THENă		CLOSE #1ă		PrintText "    ţ BMP: File is corrupted"ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	GET #1, 11, Tavu                'Ottaa tavusta tiedon, mihin palettitiedotă	PaletinLoppu = ASC(Tavu)        'loppuvat.ăă	GET #1, , Tavu                  'Sama kuin yll„.ă	PaletinLoppu = PaletinLoppu + ASC(Tavu) * 256ăă	GET #1, 19, Tavu                'Kuvan leveys tavuista 19 ja 20.ă	Leveys = ASC(Tavu)ăă	GET #1, , Tavuă	Leveys = Leveys + ASC(Tavu) * 256ăă	GET #1, 23, Tavu                'Kuvan korkeus tavuista 23 ja 24.ă	Korkeus = ASC(Tavu)ăă	GET #1, , Tavuă	Korkeus = Korkeus + ASC(Tavu) * 256ăă	GET #1, 29, Tavu                'Tieto kuvan tyypist„ tavusta 29.ă	IF ASC(Tavu) <> 8 THENă		PrintText "    ţ BMP: Color depth not 8-bits!"ă		CLOSE #1ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	PrintText "    ţ BMP: Loading palette..."ă	FOR I = 0 TO 255ă		GET #1, 54 + I * 4 + 3, Tavuă		MID$(Pal, (I * 3) + 1, 1) = CHR$(ASC(Tavu) \ 4)ăă		GET #1, 54 + I * 4 + 2, Tavuă		MID$(Pal, (I * 3) + 2, 1) = CHR$(ASC(Tavu) \ 4)ăă		GET #1, 54 + I * 4 + 1, Tavuă		MID$(Pal, (I * 3) + 3, 1) = CHR$(ASC(Tavu) \ 4)ă	NEXTăă	JotainTarkistuksia = (LOF(1) - PaletinLoppu) / Korkeus - Leveysăă	RuudulleMahtuvaKorkeus = Korkeus - 1ă	RuudulleMahtuvaLeveys = Leveys - 1ăă	IF Korkeus - 1 > 199 THEN RuudulleMahtuvaKorkeus = 199ă	IF Leveys - 1 > 319 THEN RuudulleMahtuvaLeveys = 319ăă	IF Leveys < 320 THEN XAlku = (320 - Leveys) / 2ă	IF Korkeus < 200 THEN YAlku = (200 - Korkeus) / 2ăă	PrintText "    ţ BMP: Loading data..."ăă	Rivi = CSRLIN - 1ă	COLOR 14ă	FOR y = 0 TO RuudulleMahtuvaKorkeusă		FOR x = 0 TO RuudulleMahtuvaLeveysă			GET #1, PaletinLoppu + 1 + Korkeus * CLNG(Leveys + JotainTarkistuksia) - (y + 1) * CLNG(Leveys + JotainTarkistuksia) + x, Tavuă			Buffer(x, y) = Tavuă		NEXTă		Gauge 40, INT(Rivi), 20, LOF(1) - SEEK(1), LOF(1), "[úţ]"ă	NEXTă	COLOR 7, 1ă	CLOSE #1ă	PrintText ""ă	PrintText "    ţ BMP: File loaded successfully!"ăăCASE "PCX"ă	PrintText "    ţ PCX: Loading palette..."ă	OPEN File$ FOR BINARY AS #1ă	fin& = LOF(1) - 767ă	SEEK #1, fin&ă	Pal = INPUT$(768, 1)ă	FOR I = 1 TO 768ă		MID$(Pal, I, 1) = CHR$(ABS(ASC(MID$(Pal, I, 1)) \ 4))ă	NEXTăă	SEEK #1, 129ă	rle% = 0ăă	PrintText "    ţ PCX: Loading data..."ă ă	Rivi = CSRLIN - 1ă	COLOR 14ă	DOă		p$ = INPUT$(256, 1): fpos& = SEEK(1): L% = LEN(p$)ă		IF fpos& > fin& THENă			 L% = L% - (fpos& - fin&): p$ = LEFT$(p$, L%): View$ = "done"ă		END IFă		FOR p% = 1 TO L%ă			 dat% = ASC(MID$(p$, p%))ă			 IF rle% = 0 THENă					IF (dat% AND 192) = 192 THENă						 rle% = dat% AND 63ă					ELSEă						 x = t& MOD 320ă						 y = t& \ 320ă						 IF x > 0 AND x < 320 AND y > 0 AND y < 200 THEN Buffer(x, y) = CHR$(dat%)ă						 t& = t& + 1ă					END IFă			 ELSEă					FOR rle% = rle% TO 1 STEP -1ă						 x = t& MOD 320ă						 y = t& \ 320ă						 IF x > 0 AND x < 320 AND y > 0 AND y < 200 THEN Buffer(x, y) = CHR$(dat%)ă						 t& = t& + 1ă					NEXTă			 END IFă			 Gauge 40, INT(Rivi), 20, SEEK(1), LOF(1), "[úţ]"ă		NEXTă	LOOP UNTIL View$ = "done"ă	CLOSE 1ă	PrintText ""ă	PrintText "    ţ PCX: File loaded successfully!"ăăCASE "GIF"ă	DIM ByteBuffer AS STRING * 1ăă	RESTORE GifDATAăă	FOR a = 1 TO 8: Powers(a) = 2 ^ (a - 1): NEXTă	FOR a = 0 TO 11: READ MaxCodes(a): NEXTă	FOR a = 1 TO 8: READ codemask(a): NEXTă	FOR a = 0 TO 14: READ Powers2(a): NEXTăă	Num = 0ăă	OPEN File$ FOR BINARY AS #1ăă	FOR a = 1 TO 6ă		GET #1, , ByteBuffer: a$ = a$ + ByteBufferă	NEXTăă	IF a$ <> "GIF87a" THENă		CLOSE #1ă		PrintText "    ţ GIF: File format is not GIF7a"ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	GET #1, , TotalXă	GET #1, , TotalYă	GET #1, , ByteBuffer: a = ASC(ByteBuffer)ăă	BitsPixel = (a AND 7) + 1ă	GET #1, , ByteBuffer: Background = ASC(ByteBuffer)ăă	GET #1, , ByteBufferăă	IF ASC(ByteBuffer) <> 0 THENă		CLOSE #1ă		PrintText "    ţ GIF: Bad file."ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	PrintText "    ţ GIF: Loading palette..."ăă	FOR a = 0 TO 2 ^ BitsPixel - 1ă		GET #1, , ByteBuffer: Red = ASC(ByteBuffer)ă		GET #1, , ByteBuffer: Green = ASC(ByteBuffer)ă		GET #1, , ByteBuffer: Blue = ASC(ByteBuffer)ă	 ă		MID$(Pal, (a * 3) + 1, 1) = CHR$(Red \ 4)ă		MID$(Pal, (a * 3) + 2, 1) = CHR$(Green \ 4)ă		MID$(Pal, (a * 3) + 3, 1) = CHR$(Blue \ 4)ă	NEXTăă	GET #1, , ByteBufferăă	IF ByteBuffer <> "," THENă		CLOSE #1ă		PrintText "    ţ GIF: Bad file."ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	GET #1, , Xstartă	GET #1, , Ystartă	GET #1, , Xlengthă	GET #1, , Ylengthăă	Xend = Xlength + Xstart - 1: Yend = Ylength + Ystart - 1ă	GET #1, , ByteBufferăă	a = ASC(ByteBuffer)ăă	IF (a AND 128) = 128 THENă		PrintText "    ţ GIF: Local colormap encountered."ă		CLOSE #1ă		Load.Image = False: EXIT FUNCTIONă	ELSEIF (a AND 64) = 64 THENă		PrintText "    ţ GIF: Image is interlaced!"ă		CLOSE #1ă		Load.Image = False: EXIT FUNCTIONă	END IFăă	GET #1, , ByteBufferă	CodeSize = ASC(ByteBuffer): ClearCode = Powers2(CodeSize)ă	EOFCode = ClearCode + 1: FirstFree = ClearCode + 2ă	FreeCode = FirstFree: CodeSize = CodeSize + 1ăă	InitCodeSize = CodeSize: Maxcode = MaxCodes(CodeSize - 2)ă	Bitmask = codemask(BitsPixel)ăă	GET #1, , ByteBufferă	BlockLength = ASC(ByteBuffer) + 1: Bitsin = 8ă	OutCount = 0ăă	x = 1: y = 1ă ă ă	PrintText "    ţ GIF: Loading data..."ăă	OutCount = 0ăă	Rivi = CSRLIN - 1ă	COLOR 14ăă	DOă		Code = ReadCode(CodeSize)ă		IF Code <> EOFCode THENă				IF Code = ClearCode THENă						CodeSize = InitCodeSizeă						Maxcode = MaxCodes(CodeSize - 2): FreeCode = FirstFreeă						Code = ReadCode(CodeSize): CurCode = Codeă						OldCode = Code: FinChar = Code AND Bitmaskă						Plot FinChară				ELSEă						CurCode = Code: InCode = Codeă						IF Code >= FreeCode THENă								CurCode = OldCodeă								OutCode(OutCount) = FinChară								OutCount = OutCount + 1ă						END IFăă						IF CurCode > Bitmask THENă								DOă										OutCode(OutCount) = Suffix(CurCode)ă										OutCount = OutCount + 1ă										CurCode = Prefix(CurCode)ă								LOOP UNTIL CurCode <= Bitmaskă						END IFăă						FinChar = CurCode AND Bitmaskă						OutCode(OutCount) = FinChară						OutCount = OutCount + 1ăă						FOR I = OutCount - 1 TO 0 STEP -1ă							IF x% > 0 AND y% > 0 AND x% < 320 AND y% < 200 THEN Buffer(x%, y%) = CHR$(OutCode(I))ă							x% = x% + 1ăă							IF x% > Xend% THENă									x% = 0ă									y% = y% + 1ă							END IFă						NEXTăă						OutCount = 0ă						Prefix(FreeCode) = OldCode: Suffix(FreeCode) = FinChară						OldCode = InCode: FreeCode = FreeCode + 1ă						IF FreeCode >= Maxcode THENă								IF CodeSize < 12 THENă										CodeSize = CodeSize + 1: Maxcode = Maxcode * 2ă								END IFă						END IFă				END IFă		END IFă		Gauge 40, INT(Rivi), 20, SEEK(1), LOF(1), "[úţ]"ă	LOOP UNTIL Code = EOFCodeă	ă	COLOR 7ă	CLOSE #1ă	PrintText ""ă	PrintText "    ţ GIF: File loaded successfully!"ăCASE ELSEă	Load.Image = Falseă	CLOSE #1ă	PrintText "Only BMP/PCX/GIF formats supported!"ă	EXIT FUNCTIONăEND SELECTăCLOSE #1, #2ăLoad.Image = TrueăMShowăEND FUNCTIONăăFUNCTION Load.Palette (File$, Format$)ăMHideăăCOLOR 7ăLOCATE 3, 3ăIF Exist(File$) = False THEN Load.Palette = False: PrintText "File not found!": EXIT FUNCTIONăClearScreenăăFillChar VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), 0, &HFA00ăCOLOR 7ăLOCATE 3, 3ăPrintText "Loading palette from " + UCASE$(File$) + "..."ăăSELECT CASE UCASE$(Format$)ăCASE "BMP"ă	DIM Tavu AS STRING * 1ăă	OPEN File$ FOR BINARY AS #1    ' Avataan tiedosto binaarimuodossa.ăă	FOR Otto = 1 TO 2ă		GET #1, , Tavuă		Tyyppi$ = Tyyppi$ + Tavuă	NEXTăă	IF Tyyppi$ <> "BM" THENă		CLOSE #1ă		PrintText "    ţ BMP: File is corrupted"ă		Load.Palette = False: EXIT FUNCTIONă	END IFăă	GET #1, 11, Tavu                'Ottaa tavusta tiedon, mihin palettitiedotă	PaletinLoppu = ASC(Tavu)        'loppuvat.ăă	GET #1, 29, Tavu                'Tieto kuvan tyypist„ tavusta 29.ă	IF ASC(Tavu) <> 8 THENă		PrintText "    ţ BMP: Color depth not 8-bits!"ă		CLOSE #1ă		Load.Palette = False: EXIT FUNCTIONă	END IFăă	PrintText "    ţ BMP: Loading palette..."ă	FOR I = 0 TO 255ă		GET #1, 54 + I * 4 + 3, Tavuă		MID$(Pal, (I * 3) + 1, 1) = CHR$(ASC(Tavu) \ 4)ăă		GET #1, 54 + I * 4 + 2, Tavuă		MID$(Pal, (I * 3) + 2, 1) = CHR$(ASC(Tavu) \ 4)ăă		GET #1, 54 + I * 4 + 1, Tavuă		MID$(Pal, (I * 3) + 3, 1) = CHR$(ASC(Tavu) \ 4)ă	NEXTăă	COLOR 7, 1ă	CLOSE #1ă	PrintText "    ţ BMP: Palette loaded successfully!"ăCASE "PCX"ă	PrintText "    ţ PCX: Loading palette..."ă	OPEN File$ FOR BINARY AS #1ă	fin& = LOF(1) - 767ă	SEEK #1, fin&ă	Pal = INPUT$(768, 1)ă	FOR I = 1 TO 768ă		MID$(Pal, I, 1) = CHR$(ABS(ASC(MID$(Pal, I, 1)) \ 4))ă	NEXTă	PrintText "    ţ PCX: Palette loaded successfully!"ăăCASE "GIF"ă	DIM ByteBuffer AS STRING * 1ăă	OPEN File$ FOR BINARY AS #1ăă	FOR a = 1 TO 6ă		GET #1, , ByteBuffer: a$ = a$ + ByteBufferă	NEXTăă	IF a$ <> "GIF87a" THENă		CLOSE #1ă		PrintText "    ţ GIF: File format is not GIF7a"ă		Load.Palette = False: EXIT FUNCTIONă	END IFăă	GET #1, , TotalXă	GET #1, , TotalYă	GET #1, , ByteBuffer: a = ASC(ByteBuffer)ăă	BitsPixel = (a AND 7) + 1ă	GET #1, , ByteBuffer: Background = ASC(ByteBuffer)ăă	GET #1, , ByteBufferăă	IF ASC(ByteBuffer) <> 0 THENă		CLOSE #1ă		PrintText "    ţ GIF: Bad file."ă		Load.Palette = False: EXIT FUNCTIONă	END IFăă	PrintText "    ţ GIF: Loading palette..."ăă	FOR a = 0 TO 2 ^ BitsPixel - 1ă		GET #1, , ByteBuffer: Red = ASC(ByteBuffer)ă		GET #1, , ByteBuffer: Green = ASC(ByteBuffer)ă		GET #1, , ByteBuffer: Blue = ASC(ByteBuffer)ă	ă		MID$(Pal, (a * 3) + 1, 1) = CHR$(Red \ 4)ă		MID$(Pal, (a * 3) + 2, 1) = CHR$(Green \ 4)ă		MID$(Pal, (a * 3) + 3, 1) = CHR$(Blue \ 4)ă	NEXTăă	COLOR 7ă	CLOSE #1ă	PrintText "    ţ GIF: Palette loaded successfully!"ăCASE "RAW"ă	PrintText "    ţ Loading Raw Palette..."ă	OPEN File$ FOR BINARY AS #1ă	GET #1, , Pală	CLOSE #1ă	PrintText "    ţ Palette loaded successfully!"ăCASE ELSEă	Load.Palette = Falseă	PrintText "Only BMP/PCX/GIF formats supported!"ă	CLOSE #1ă	EXIT FUNCTIONăEND SELECTăCLOSE #1, #2ăLoad.Palette = TrueăMShowăEND FUNCTIONăăSUB Load.RAW (File$, XLen, YLen, Segment, Offset)ăFile = FREEFILEăOPEN File$ FOR BINARY AS #FileăăDIM ReadByte AS STRING * 1ăăIF Segment <> -1 AND Offset <> -1 THENă	DEF SEG = Segmentă	POffset = Offsetă	FOR y = 0 TO YLenă		FOR x = 0 TO XLenă			GET #File, , ReadByteă			POKE POffset, ASC(ReadByte)ă			POffset = POffset + 1ă		NEXTă	NEXTăELSEă	DEF SEG = &HA000ă	FOR y = 0 TO YLenă		FOR x = 0 TO XLenă			GET #File, , ReadByteă			POKE (CLNG(y) * 320& + CLNG(x)), ASC(ReadByte)ă			'PSET (x, y), ASC(ReadByte)ă		NEXTă	NEXTăEND IFăDEF SEGăCLOSE FileăEND SUBăăFUNCTION LongToString$ (L&)ăăB4% = L& \ 16777216ăL& = L& - B4% * 16777216ăB3% = L& \ 65536ăL& = L& - B3% * 65536ăB2% = L& \ 256ăL& = L& - CLNG(B2%) * 256ăB1% = L&ăLongToString$ = CHR$(B1%) + CHR$(B2%) + CHR$(B3%) + CHR$(B4%)ăăEND FUNCTIONăăSUB Maină'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Handles the mouse and menu.ă' Call this once per frame.ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSTATIC ClickăăREDIM Ml&(0 TO 1)ăMl&(0) = &HB31003B8ăMl&(1) = &HCB10CD00ăDEF SEG = VARSEG(Ml&(0))ăCALL absolute(VARPTR(Ml&(0)))ăERASE Ml&ăăăMenuSelected.Menu = 0ăMenuSelected.Item = 0ăăMStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ăMx = HiiriX% \ 8 + 1ăMy = HiiriY% \ 8 + 1ăMl = HiiriV%ăMr = HiiriO%ăăIF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ăIF Ml = -1 AND Click = 0 THEN Click = -1ăăDEF SEG = &H40ăIF ((PEEK(&H17) AND &H8) / &H8) AND DragWin = 0 THENă	Mx = 1ă	My = 1ă	Click = 1ăEND IFăDEF SEGăăIF My <= QMenu.BarSize AND Click = 1 THENă	IF QMenu.Topics > 0 THENă		xx = 1ă		yy = 1ă		FOR I = 1 TO QMenu.Topicsă			Menu$ = Get.MenuTopic$(I)ă			IF xx + LEN(Menu$) + 2 < 81 THENă				xx = xx + LEN(Menu$) + 2ă			ELSEă				yy = yy + 1ă				xx = 1ă				xx = xx + LEN(Menu$) + 2ă			END IFă			IF Mx >= xx - LEN(Menu$) - 2 AND Mx < xx AND My = yy THENă				NewPopup = Iă				DOă					MHideă					PPrint xx - LEN(Menu$) - 2, yy, " " + Menu$ + " ", QMenu.MenuBCol, QMenu.MenuFColă					MShowă					NewPopup = PopupMenu(xx - LEN(Menu$) - 2, yy + 1, NewPopup, Click)ă					MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă					Mx = HiiriX% \ 8 + 1ă					My = HiiriY% \ 8 + 1ă					MHideă					PPrint xx - LEN(Menu$) - 2, yy, " " + Menu$ + " ", QMenu.MenuFCol, QMenu.MenuBColă					MShowă					IF NewPopup <> 0 OR Click = 1 THENă						xx = 1ă						yy = 1ă						FOR ii = 1 TO QMenu.Topicsă							Menu$ = Get.MenuTopic$(ii)ă							IF xx + LEN(Menu$) + 2 < 81 THENă								xx = xx + LEN(Menu$) + 2ă							ELSEă								yy = yy + 1ă								xx = 1ă								xx = xx + LEN(Menu$) + 2ă							END IFă							IF Click = 1 AND Mx >= xx - LEN(Menu$) - 2 AND Mx < xx AND My = yy THEN NewPopup = iiă							IF ii = NewPopup THEN EXIT FORă						NEXTă					END IFă				LOOP UNTIL NewPopup = 0ă				EXIT FORă			END IFă		NEXTă	END IFăEND IFăăEND SUBăăSUB MemCopy (fromseg%, FromOffset%, toseg%, ToOffset%, Bytes%)ăăDEF SEG = VARSEG(ASMMemCopy$)ă	 CALL absolute(BYVAL fromseg%, BYVAL FromOffset%, BYVAL toseg%, BYVAL ToOffset%, BYVAL Bytes%, SADD(ASMMemCopy$))ăDEF SEGăăEND SUBăăSUB Message (Text$, Topic$)ăRow = CSRLINăPCOPY 0, 2ăDrawWindow 40 - RealLen(Text$) \ 2 - 2, Lines \ 2 - 2, 40 + RealLen(Text$) \ 2 + 3, Lines \ 2 + 2, 7, 4, Topic$, TrueăCOLOR 15, 4ăCenter Text$, Lines \ 2ăEND SUBăăDEFSNG A-ZăSUB MHideă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Hides the mouseă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăă Regs.ax% = 2ă CALL INTERRUPT(&H33, Regs, Regs)ăăEND SUBăăFUNCTION MInită'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Initializes the mouseă' Returns -1 if mouse is present, 0 if it isn'tă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăă Regs.ax% = 0ă CALL INTERRUPT(&H33, Regs, Regs)ăă MInit = Regs.ax%ăăEND FUNCTIONăăSUB MShowă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Shows the mouse after hidingă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăă Regs.ax% = 1ă CALL INTERRUPT(&H33, Regs, Regs)ă WAIT &H3DA, 8ă WAIT &H3DA, 8, 8ăEND SUBăăDEFINT A-ZăSUB MStatus (x, y, B1, B2)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Returns location of mouse & status of buttonsă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăă Regs.ax% = 3ă CALL INTERRUPT(&H33, Regs, Regs)ă x = Regs.cx%ă y = Regs.dx%ă B1 = (Regs.bx% AND 1) <> 0ă B2 = (Regs.bx% AND 2) <> 0ăEND SUBăăFUNCTION PeekChar$ (x, y)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Returns the character stored at x,yă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăDEF SEG = &HB800ăPeekChar$ = CHR$(PEEK((y - 1) * 160 + (x - 1) * 2))ăDEF SEGăEND FUNCTIONăăSUB Plot (a%) STATICăăBuffer(x%, y%) = CHR$(a%)ăx% = x% + 1ăăIF x% > Xend% THENă		x% = Xstart%ă		y% = y% + 1ăEND IFăăEND SUBăăSUB PokeChar (x, y, Char$, FCol, BCol)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Writes the characted Char$ at x,y in color FCol,BColă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăDEF SEG = &HB800ăPOKE ((y - 1) * 160 + (x - 1) * 2), ASC(Char$)ăPOKE ((y - 1) * 160 + (x - 1) * 2) + 1, FCol + (BCol * 16)ăDEF SEGăEND SUBăăFUNCTION PopupMenu (x, y, Num, Click)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Handles the menu when popped up, called by SUB Maină'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăItems = MenuItems(Num)ăIF Items > 0 THEN DIM Menu$(1 TO Items)ăăLongest = 0ăFOR I = 1 TO Itemsă	Menu$(I) = Get.MenuItem$(Num, I)ă	IF LEN(Menu$(I)) > Longest THEN Longest = LEN(Menu$(I))ăNEXTăăMHideăPCOPY 0, 1ăSCREEN , , 0, 1ăăIF x + Longest > 78 THEN x = 78 - Longest - 3ăăIF Items > 0 THENă	Draw.Border x, y, x + Longest + 3, y + Items + 1, QMenu.MenuFCol, QMenu.MenuBColăă	X2 = x + Longest + 3ă	Y2 = y + Items + 1ăă	FOR I = y + 1 TO Y2 + 1ă		PokeChar X2 + 1, I, PeekChar$(X2 + 1, I), 8, 0ă		PokeChar X2 + 2, I, PeekChar$(X2 + 2, I), 8, 0ă	NEXTăă	FOR I = x + 2 TO X2ă		PokeChar I, Y2 + 1, PeekChar$(I, Y2 + 1), 8, 0ă	NEXTăă	FOR I = 1 TO Itemsă		Get.MenuItemInfo Num, I, Style$, Selected$, Active$ă		IF Active$ = "1" THENă			IF Menu$(I) = "-" THENă				PPrint x, y + I, CHR$(195) + STRING$(Longest + 2, "Ä") + CHR$(180), QMenu.MenuFCol, QMenu.MenuBColă			ELSEă				IF Style$ = "0" THENă					PPrint x + 1, y + I, " " + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuFCol, QMenu.MenuBColă				ELSEă					IF Selected$ = "1" THENă						PPrint x + 1, y + I, CHR$(7) + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuFCol, QMenu.MenuBColă					ELSEă						PPrint x + 1, y + I, " " + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuFCol, QMenu.MenuBColă					END IFă				END IFă			END IFă		ELSEă			IF Menu$(I) = "-" THENă				PPrint x, y + I, CHR$(195) + STRING$(Longest + 2, "Ä") + CHR$(180), QMenu.MenuFCol, QMenu.MenuBColă			ELSEă				IF Style$ = "0" THENă					PPrint x + 1, y + I, " " + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuDisabled, QMenu.MenuBColă				ELSEă					IF Selected$ = "1" THENă						PPrint x + 1, y + I, CHR$(7) + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuDisabled, QMenu.MenuBColă					ELSEă						PPrint x + 1, y + I, " " + Get.MenuItem$(Num, I) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, I))), QMenu.MenuDisabled, QMenu.MenuBColă					END IFă				END IFă			END IFă		END IFă	NEXTăăă	Selected = 1ăă	Get.MenuItemInfo Num, Selected, Style$, Selected$, Active$ă	IF Style$ = "0" THENă		PPrint x + 1, y + Selected, " " + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă	ELSEă		IF Selected$ = "1" THENă			PPrint x + 1, y + Selected, CHR$(7) + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă		ELSEă			PPrint x + 1, y + Selected, " " + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă		END IFă	END IFăăEND IFăSCREEN , , 0, 0ăMShowăăOldSelected = 0ăăMStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ăMx = HiiriX% \ 8 + 1ăMy = HiiriY% \ 8 + 1ăMl = HiiriV%ăMr = HiiriO%ăOldMx = MxăOldMy = MyăăDOă	Key$ = INKEY$ă	MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă	Mx = HiiriX% \ 8 + 1ă	My = HiiriY% \ 8 + 1ă	Ml = HiiriV%ă	Mr = HiiriO%ă	IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ă ă	IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă	IF Ml = -1 AND Click = 0 THEN Click = -1ă				ă	IF Key$ = CHR$(0) + "K" THENă		NewMenu = Num - 1ă		IF NewMenu < 1 THEN NewMenu = QMenu.Topicsă		PopupMenu = NewMenuă	END IFăă	IF Key$ = CHR$(0) + "M" THENă		NewMenu = Num + 1ă		IF NewMenu > QMenu.Topics THEN NewMenu = 1ă		PopupMenu = NewMenuă	END IFăă	OldSelected = Selectedăă	IF Items > 0 THENă		IF Key$ = CHR$(0) + "P" THENă			Selected = Selected + 1ă			IF Selected > Items THEN Selected = 1ă			IF Menu$(Selected) = "-" THEN Selected = Selected + 1ă			IF Selected > Items THEN Selected = 1ă			Key$ = ""ă		END IFăă		IF Key$ = CHR$(0) + "H" THENă			Selected = Selected - 1ă			IF Selected < 1 THEN Selected = Itemsă			IF Menu$(Selected) = "-" THEN Selected = Selected - 1ă			IF Selected < 1 THEN Selected = Itemsă			Key$ = ""ă		END IFăă		IF Key$ = CHR$(13) THENă			Get.MenuItemInfo Num, Selected, Style$, Selected$, Active$ă			IF Active$ = "1" THENă				MenuSelected.Menu = Numă				MenuSelected.Item = Selectedă														ă				IF Style$ = "1" THENă					IF Selected$ = "0" THENă						Selected$ = "1"ă					ELSEIF Selected$ = "1" THENă						Selected$ = "0"ă					END IFă					Set.MenuItem Num, Selected, Get.MenuItem$(Num, Selected), Active$, Style$, Selected$ă				END IFă			ELSEă				Key$ = ""ă			END IFă		END IFă	END IFăă	IF Items > 0 AND (MouseMove = 1 OR Click = 1) THENă		IF Mx > x AND Mx < x + Longest + 3 AND My > y AND My <= y + Items THENă			Selected = My - yă			IF Click = 1 THENă				Get.MenuItemInfo Num, Selected, Style$, Selected$, Active$ă				IF Active$ = "1" AND Get.MenuItem$(Num, Selected) <> "-" THENă					MenuSelected.Menu = Numă					MenuSelected.Item = Selectedăă					MenuSelected.Menu = Numă					MenuSelected.Item = Selectedă					IF Style$ = "1" THENă						IF Selected$ = "0" THENă							Selected$ = "1"ă						ELSEIF Selected$ = "1" THENă							Selected$ = "0"ă						END IFă						Set.MenuItem Num, Selected, Get.MenuItem$(Num, Selected), Active$, Style$, Selected$ă					END IFă					EXIT DOă				ELSEă					Click = 0ă				END IFă			END IFă		END IFă	END IFăă		IF OldSelected <> Selected THENă			IF Menu$(Selected) = "-" THENă				Selected = OldSelectedă			ELSEă				MHideă				Get.MenuItemInfo Num, Selected, Style$, Selected$, Active$ă				IF Style$ = "0" THENă					PPrint x + 1, y + Selected, " " + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă				ELSEă					IF Selected$ = "1" THENă						PPrint x + 1, y + Selected, CHR$(7) + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă					ELSEă						PPrint x + 1, y + Selected, " " + Get.MenuItem$(Num, Selected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, Selected))), QMenu.MenuBCol, QMenu.MenuFColă					END IFă				END IFăă			 ă				Get.MenuItemInfo Num, OldSelected, Style$, Selected$, Active$ăă				IF Active$ = "1" THENă					FCol = QMenu.MenuFColă				ELSEă					FCol = QMenu.MenuDisabledă				END IFăă				IF Style$ = "0" THENă					PPrint x + 1, y + OldSelected, " " + Get.MenuItem$(Num, OldSelected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, OldSelected))), FCol, QMenu.MenuBColă				ELSEă					IF Selected$ = "1" THENă						PPrint x + 1, y + OldSelected, CHR$(7) + Get.MenuItem$(Num, OldSelected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, OldSelected))), FCol, QMenu.MenuBColă					ELSEă						PPrint x + 1, y + OldSelected, " " + Get.MenuItem$(Num, OldSelected) + SPACE$((Longest + 1) - LEN(Get.MenuItem$(Num, OldSelected))), FCol, QMenu.MenuBColă					END IFă				END IFă				MShowă			END IFă		END IFă ă	OldMx = Mxă	OldMy = MyăăLOOP UNTIL Click = 1 OR Key$ <> ""ăKey$ = ""ăăMHideăPCOPY 1, 0ăMShowăEND FUNCTIONăăSUB PPrint (x, y, Text$, FCol, BCol)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Prints text Text$ at x,y in color FCol, BColă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăxx = xăFOR I = 1 TO LEN(Text$)ă	PokeChar xx, y, MID$(Text$, I, 1), FCol, BColă	xx = xx + 1ăNEXTăăEND SUBăăSUB PrintText (Text$)ăCOLOR 7, 1ăLOCATE , 3: PRINT Text$ăEND SUBăăFUNCTION Query$ (Text$, Topic$, MaxLen, TField$)ăăRow = CSRLINăPCOPY 0, 2ăDrawWindow 40 - RealLen(Text$) \ 2 - 2, Lines \ 2 - 3, 40 + RealLen(Text$) \ 2 + 3, Lines \ 2 + 3, 7, 4, Topic$, TrueăCOLOR 15, 4ăCenter Text$, Lines \ 2 - 1ăăCOLOR 0, 3ăLOCATE Lines \ 2 + 1, 40 - MaxLen \ 2ăPRINT STRING$(MaxLen + 1, " ");ăăTextField$ = LEFT$(TField$, MaxLen)ăTPos = LEN(TextField$)ăăăCOLOR 0, 4ăLOCATE Lines \ 2 + 2, 40 - MaxLen \ 2 + 1ăPRINT STRING$(MaxLen + 1, "ß")ăLOCATE Lines \ 2 + 1, 40 + MaxLen \ 2 + 1ăPRINT "Ü"ăăCOLOR 0, 3ăLOCATE Lines \ 2 + 1, 40 - MaxLen \ 2ăPRINT InputField(TextField$, k$, MaxLen, TPos); " ";ăLOCATE Lines \ 2 + 1, 40 - MaxLen \ 2 + TPos, 1, 29, 30ăăDOă	k$ = INKEY$ă	IF k$ = CHR$(13) THEN EXIT DOă	IF k$ = CHR$(27) THEN TextField$ = "": EXIT DOă	IF k$ <> "" THENă		LOCATE Lines \ 2 + 1, 40 - MaxLen \ 2ă		COLOR 0, 3ă		PRINT InputField(TextField$, k$, MaxLen, TPos); " ";ă		LOCATE Lines \ 2 + 1, 40 - MaxLen \ 2 + TPos, 1, 29, 30ă	END IFăLOOPăăLOCATE 1, 1, 0ăQuery$ = LTRIM$(RTRIM$(TextField$))ăEraseMessageăăEND FUNCTIONăăFUNCTION QueryFile$ (WildCard$)ăMHideăăWCard$ = UCASE$(RTRIM$(LTRIM$(Query$("                    Enter directory/file                       ", "%7&0 Directory ", 60, ""))))ăEraseMessageăIF WCard$ = "" THEN MShow: EXIT FUNCTIONăă'IF (INSTR(WCard$, "*") = 0 AND INSTR(WCard$, "?") = 0) THENă'  IF RIGHT$(WCard$, 1) <> "\" THEN WCard$ = WCard$ + "\"ă'  WCard$ = WCard$ + WildCard$ă'END IFăăIF RIGHT$(WCard$, 1) = "\" THEN WCard$ = WCard$ + WildCard$ăIF WCard$ = "." THEN WCard$ = WCard$ + "\" + WildCard$ăăăIF INSTR(WCard$, "\") > 0 THENă	Directory$ = ""ă	FOR XPos = LEN(WCard$) TO 1 STEP -1ă		IF MID$(WCard$, XPos, 1) = "\" THEN EXIT FORă	NEXTăă	FOR I = 1 TO XPosă		Directory$ = Directory$ + MID$(WCard$, I, 1)ă	NEXTăEND IFăăMax = ScanDir(WCard$, "temp.tmp")ăăIF Max = 0 THENă	ErrorDialog "No files found!"ă	DO: LOOP UNTIL INKEY$ <> ""ă	EraseMessageă	MShowă	EXIT FUNCTIONăEND IFăăOffset = 0ăSelected = 0ăăOPEN "temp.tmp" FOR INPUT AS #1ăOPEN "temp2.tmp" FOR OUTPUT AS #2ăăFOR I = 1 TO Maxă	LINE INPUT #1, Temp$ă	Temp$ = Temp$ + STRING$(12 - LEN(Temp$), " ")ă	PRINT #2, Temp$;ăNEXTăCLOSE #1, #2ăKILL "temp.tmp"ăNAME "temp2.tmp" AS "temp.tmp"ăăDrawWindow 15, 2, 32, Lines - 3, 7, 4, "%7&0 Files ", TrueăCOLOR 0, 3ăLOCATE Lines, 1ăPRINT STRING$(80, " ");ăCenter " &EEsc&0-Cancel   &EEnter&0-Select", LinesăăFile = FREEFILEăOPEN "temp.tmp" FOR BINARY AS #FileăăFOR I = 0 TO UBOUND(FBuffer)ă	FBuffer(I) = 0ăNEXTăăDrawFileList File, Selected, Offset, MaxăăDOă	k$ = INKEY$ă	IF k$ <> "" THENă	ă		IF k$ = CHR$(0) + "P" THENă			Selected = Selected + 1ă			IF Selected > Max - 1 THEN Selected = Max - 1ă			IF Selected > Offset + Lines - 7 THEN Offset = Offset + 1ă		END IFăă		IF k$ = CHR$(0) + "H" THENă			Selected = Selected - 1ă			IF Selected < 0 THEN Selected = 0ă			IF Selected < Offset THEN Offset = Offset - 1ă			IF Offset < 0 THEN Offset = 0ă		END IFăă		IF k$ = CHR$(0) + CHR$(81) THENă			Selected = Selected + (Lines - 7)ă			Offset = Offset + (Lines - 7)ă			IF Selected > Max - 1 THEN Selected = Max - 1ă			IF Offset > Max - 1 THEN Offset = Max - 1ă		END IFăăă		IF k$ = CHR$(0) + CHR$(73) THENă			Selected = Selected - (Lines - 7)ă			Offset = Offset - (Lines - 7)ă			IF Selected < 0 THEN Selected = 0ă			IF Offset < 0 THEN Offset = 0ă		END IFăăă		IF k$ = CHR$(0) + CHR$(79) THENă			Offset = Max - (Lines - 7) - 1ă			IF Offset < 0 THEN Offset = 0ă			Selected = Max - 1ă		END IFăă		IF k$ = CHR$(0) + CHR$(71) THENă			Offset = 0ă			Selected = 0ă		END IFă	 ă		IF k$ = CHR$(13) THENă			SeekFileItem File, Selectedă			GET #File, , FListă			QueryFile = Directory$ + RTRIM$(RTRIM$(FList))ă			EXIT DOă		END IFăă		IF k$ = CHR$(27) THENă			EXIT DOă		END IFă		DrawFileList File, Offset, Selected, Maxă	END IFăLOOPăCLOSE #1, #2ăKILL "temp.tmp"ăClearScreenăMShowăăEND FUNCTIONăăFUNCTION ReadCode (CodeSize)ăăSHARED Powers2()  AS INTEGERăCode = 0ăăFOR Aa = 0 TO CodeSize - 1ă		Code = Code + Getbit * Powers2(Aa)ăNEXTăăReadCode = CodeăăEND FUNCTIONăăFUNCTION RealLen (Text$)ăăLn = LEN(Text$)ăFOR I = 1 TO LEN(Text$)ă	Done = 0ă	DOă		IF MID$(Text$, I, 1) = "&" AND INSTR("0123456789ABCDEF", MID$(Text$, I + 1, 1)) AND I < LEN(Text$) THENă			Ln = Ln - 2ă			I = I + 2ă		ELSEIF MID$(Text$, I, 1) = "%" AND INSTR("01234567", MID$(Text$, I + 1, 1)) AND I < LEN(Text$) THENă			Ln = Ln - 2ă			I = I + 2ă		ELSEă			Done = 1ă		END IFă	LOOP UNTIL DoneăNEXTăRealLen = LnăăEND FUNCTIONăăFUNCTION ReturnBit (Byte, Bit)ă	 SELECT CASE Bită			CASE 1: IF (Byte AND 128) THEN ReturnBit = 1ă			CASE 2: IF (Byte AND 64) THEN ReturnBit = 1ă			CASE 3: IF (Byte AND 32) THEN ReturnBit = 1ă			CASE 4: IF (Byte AND 16) THEN ReturnBit = 1ă			CASE 5: IF (Byte AND 8) THEN ReturnBit = 1ă			CASE 6: IF (Byte AND 4) THEN ReturnBit = 1ă			CASE 7: IF (Byte AND 2) THEN ReturnBit = 1ă			CASE 8: IF (Byte AND 1) THEN ReturnBit = 1ă	 END SELECTăEND FUNCTIONăăFUNCTION ReturnNibble (Byte, WhichOne)ă	 IF WhichOne = 1 THENă			IF Byte AND 128 THEN Total = Total + 8ă			IF Byte AND 64 THEN Total = Total + 4ă			IF Byte AND 32 THEN Total = Total + 2ă			IF Byte AND 16 THEN Total = Total + 1ă	 ELSEă			IF Byte AND 8 THEN Total = Total + 8ă			IF Byte AND 4 THEN Total = Total + 4ă			IF Byte AND 2 THEN Total = Total + 2ă			IF Byte AND 1 THEN Total = Total + 1ă	 END IFă	 ReturnNibble = TotalăEND FUNCTIONăăSUB Roller (x, y, XLen, Text$, FCol) STATICăăCount = Count + 1ăăIF Count = 8 THENă	LOCATE y, 40ă	COLOR FColă	IF RPos = 0 THEN RPos = 1ă	TText$ = SPACE$(XLen) + Text$ă'  PRINT MID$(TText$, RPos, XLen) + STRING$(XLen - LEN(MID$(TText$, RPos, XLen)), " ");ă	PRINT MID$(TText$, RPos + 40, 1);ă	RPos = RPos + 1ă	IF RPos > LEN(TText$) THEN RPos = 1ă	Count = 0ăEND IFăăWAIT &H3DA, 8ăREDIM ScrollBuffer(0 TO 8 * 320) AS INTEGERăGET (1, (y - 1) * 8)-(319, (y - 1) * 8 + 7), ScrollBufferăPUT (0, (y - 1) * 8), ScrollBuffer, PSETăăEND SUBăăSUB RotatePalăă'FOR i& = 0 TO 255ă'  OUT (&H3C7), i&ă'  r = INP(&H3C9)ă'  g = INP(&H3C9)ă'  b = INP(&H3C9)ă'  MID$(Pal, (i& * 3) + 1, 1) = CHR$(r)ă'  MID$(Pal, (i& * 3) + 2, 1) = CHR$(g)ă'  MID$(Pal, (i& * 3) + 3, 1) = CHR$(b)ă'NEXTăăTemp$ = RIGHT$(Pal$, 3)ăPal = Temp$ + MID$(Pal, 1, LEN(Pal) - 3)ăăSet.PaletteăăEND SUBăăSUB Save.Image (File$, InpFormat$, OutFormat$)ăMHideăăOut$ = RTRIM$(LTRIM$(UCASE$(Query("                     Enter the output file                     ", "&0%7 Save Image ", 60, ""))))ăIF Out$ = "" THEN MShow: EXIT SUBăăLoaded = TrueăSELECT CASE UCASE$(InpFormat$)ăCASE "BMP"ă	IF File$ <> "" THENă		IF NOT Load.Image(File$, "BMP") THEN Loaded = Falseă	END IFăCASE "PCX"ă	IF File$ <> "" THENă		IF NOT Load.Image(File$, "PCX") THEN Loaded = Falseă	END IFăCASE "GIF"ă	IF File$ <> "" THENă		IF NOT Load.Image(File$, "GIF") THEN Loaded = Falseă	END IFăCASE "BSAVE"ă	IF File$ <> "" THENă		IF NOT Load.Image(File$, "BSAVE") THEN Loaded = Falseă	END IFăCASE ELSEă	MShowă	EXIT SUBăEND SELECTăIF Loaded = False THENă	DO: LOOP UNTIL INKEY$ <> ""ă	MShowă	EXIT SUBăEND IFăăSCREEN 13: CLSăSet.PaletteăMemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăăLOCATE 25, 1ăCol = FindBrightestColorăăText$ = File$ăCOLOR ColăăSELECT CASE OutFormat$ăCASE "BSAVE"ă	Get.MenuItemInfo 5, 1, Style$, Selected$, Active$ă	IF Selected$ = "1" THENă		DEF SEG = &HA000ă		BSAVE Out$, 0, 64000ă		DEF SEGă		OPEN Out$ FOR BINARY AS #1ă		SEEK #1, LOF(1)ă		PUT #1, , Pală		CLOSE #1ă		Text$ = Text$ + " - Image BSAVED to " + Out$ + " with palette"ă	ELSEă		DOă			Key$ = INKEY$ă			MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă			Mx = HiiriX% \ 2ă			My = HiiriY%ă			Ml = HiiriV%ă			Mr = HiiriO%ă			IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă			IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă			IF Ml = -1 AND Click = 0 THEN Click = -1ăă			Upper = Myăă			IF MouseMove = 1 THENă				WAIT &H3DA, 8ă				MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă				LINE (0, My)-(319, My), Colă				IF My < 100 THENă					LOCATE 25, 1ă					PRINT "   Set the upper bound with the mouse   ";ă				ELSEă					LOCATE 1, 1ă					PRINT "   Set the upper bound with the mouse   ";ă				END IFă			END IFăă			OldMx = Mxă			OldMy = Myă		LOOP UNTIL Click = 1ăă		DOă			Key$ = INKEY$ă			MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă			Mx = HiiriX% \ 2ă			My = HiiriY%ă			Ml = HiiriV%ă			Mr = HiiriO%ă			IF My <= Upper + 1 THEN My = Upper + 1ă			IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ă														ă			IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă			IF Ml = -1 AND Click = 0 THEN Click = -1ăă			Lower = Myăă			IF MouseMove = 1 THENă				WAIT &H3DA, 8ă				MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă				LINE (0, Upper)-(319, My), Col, Bă				IF My < 100 THENă					LOCATE 25, 1ă					PRINT " Set the lower bound with the mouse "ă				ELSEă					LOCATE 1, 1ă					PRINT " Set the lower bound with the mouse "ă				END IFă			END IFăă			OldMx = Mxă			OldMy = Myă		LOOP UNTIL Click = 1ăă		MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăă		DEF SEG = &HA000ă		BSAVE Out$, CLNG(Upper) * 320&, (CLNG(Lower) * 320&) - (CLNG(Upper) * 320&)ă		DEF SEGă		Text$ = Text$ + " - Image BSAVED to " + Out$ă	END IFăCASE "RAW"ă	DOă		Key$ = INKEY$ă		MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă		Mx = HiiriX% \ 2ă		My = HiiriY%ă		Ml = HiiriV%ă		Mr = HiiriO%ă		IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă		IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă		IF Ml = -1 AND Click = 0 THEN Click = -1ăă		X1 = Mxă		Y1 = Myăă		IF MouseMove = 1 THENă			WAIT &H3DA, 8ă			MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă			PSET (Mx - 2, My), Colă			PSET (Mx + 2, My), Colă			PSET (Mx, My - 2), Colă			PSET (Mx, My + 2), Colă		 ă			PSET (Mx - 1, My), Colă			PSET (Mx + 1, My), Colă			PSET (Mx, My - 1), Colă			PSET (Mx, My + 1), Colă			IF My < 100 THENă				LOCATE 25, 1ă				PRINT "   Set the upper left corner   "; RTRIM$(LTRIM$(STR$(X1))); ":"; RTRIM$(LTRIM$(STR$(Y1)));ă			ELSEă				LOCATE 1, 1ă				PRINT "   Set the upper left corner   "; RTRIM$(LTRIM$(STR$(X1))); ":"; RTRIM$(LTRIM$(STR$(Y1)));ă			END IFă		END IFăă		OldMx = Mxă		OldMy = Myă	LOOP UNTIL Click = 1ăă	DOă		Key$ = INKEY$ă		MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă		Mx = HiiriX% \ 2ă		My = HiiriY%ă		Ml = HiiriV%ă		Mr = HiiriO%ă		IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă		IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă		IF Ml = -1 AND Click = 0 THEN Click = -1ăă		IF Mx < X1 + 1 THEN Mx = X1 + 1ă		IF My < Y1 + 1 THEN My = Y1 + 1ăă		X2 = Mxă		Y2 = Myăă		IF MouseMove = 1 THENă			WAIT &H3DA, 8ă			MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă			LINE (X1, Y1)-(X2, Y2), Col, Bă			IF My < 100 THENă				LOCATE 25, 1ă				PRINT "  Set the lower right corner    "; RTRIM$(LTRIM$(STR$(X2 - X1))); "x"; RTRIM$(LTRIM$(STR$(Y2 - Y1)));ă			ELSEă				LOCATE 1, 1ă				PRINT "  Set the lower right corner    "; RTRIM$(LTRIM$(STR$(X2 - X1))); "x"; RTRIM$(LTRIM$(STR$(Y2 - Y1)));ă			END IFă		END IFăă		OldMx = Mxă		OldMy = Myă	LOOP UNTIL Click = 1ă	MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăă	OPEN Out$ FOR BINARY AS #1ă	FOR yy = Y1 TO Y2ă		FOR xx = X1 TO X2ă			Byte$ = CHR$(POINT(xx, yy))ă			PUT #1, , Byte$ă		NEXTă	NEXTă	CLOSE #1ăă	LINE (X1, Y1)-(X2, Y2), Col, Băă	Text$ = Text$ + " - Image Saved to " + Out$ + " as Raw Data - Saved Image Size: " + RTRIM$(LTRIM$(STR$(X2 - X1))) + "x" + RTRIM$(LTRIM$(STR$(Y2 - Y1)))ăăCASE "DATA"ă	DOă		Key$ = INKEY$ă		MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă		Mx = HiiriX% \ 2ă		My = HiiriY%ă		Ml = HiiriV%ă		Mr = HiiriO%ă		IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă		IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă		IF Ml = -1 AND Click = 0 THEN Click = -1ăă		X1 = Mxă		Y1 = Myăă		IF MouseMove = 1 THENă			WAIT &H3DA, 8ă			MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă			PSET (Mx - 2, My), Colă			PSET (Mx + 2, My), Colă			PSET (Mx, My - 2), Colă			PSET (Mx, My + 2), Colă		ă			PSET (Mx - 1, My), Colă			PSET (Mx + 1, My), Colă			PSET (Mx, My - 1), Colă			PSET (Mx, My + 1), Colă			IF My < 100 THENă				LOCATE 25, 1ă				PRINT "   Set the upper left corner   "; RTRIM$(LTRIM$(STR$(X1))); ":"; RTRIM$(LTRIM$(STR$(Y1)));ă			ELSEă				LOCATE 1, 1ă				PRINT "   Set the upper left corner   "; RTRIM$(LTRIM$(STR$(X1))); ":"; RTRIM$(LTRIM$(STR$(Y1)));ă			END IFă		END IFăă		OldMx = Mxă		OldMy = Myă	LOOP UNTIL Click = 1ăă	DOă		Key$ = INKEY$ă		MStatus HiiriX%, HiiriY%, HiiriV%, HiiriO%ă		Mx = HiiriX% \ 2ă		My = HiiriY%ă		Ml = HiiriV%ă		Mr = HiiriO%ă		IF OldMx <> Mx OR OldMy <> My THEN MouseMove = 1 ELSE MouseMove = 0ăă		IF Ml = 0 AND Click = -1 THEN Click = 1 ELSE IF Ml = 0 THEN Click = 0ă		IF Ml = -1 AND Click = 0 THEN Click = -1ăă		IF Mx < X1 + 1 THEN Mx = X1 + 1ă		IF My < Y1 + 1 THEN My = Y1 + 1ăă		X2 = Mxă		Y2 = Myăă		IF MouseMove = 1 THENă			WAIT &H3DA, 8ă			MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă			LINE (X1, Y1)-(X2, Y2), Col, Bă			IF My < 100 THENă				LOCATE 25, 1ă				PRINT "  Set the lower right corner    "; RTRIM$(LTRIM$(STR$(X2 - X1))); "x"; RTRIM$(LTRIM$(STR$(Y2 - Y1)));ă			ELSEă				LOCATE 1, 1ă				PRINT "  Set the lower right corner    "; RTRIM$(LTRIM$(STR$(X2 - X1))); "x"; RTRIM$(LTRIM$(STR$(Y2 - Y1)));ă			END IFă		END IFăă		OldMx = Mxă		OldMy = Myă	LOOP UNTIL Click = 1ă	MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăă	OPEN Out$ FOR APPEND AS #1ă	PRINT #1, ""ă	PRINT #1, "' ţ Image converted with CONVERT.BAS by Sami Ky”stil„"ă	PRINT #1, "' ţ Input file: " + File$ă	PRINT #1, "' ţ Image size: " + RTRIM$(LTRIM$(STR$(X2 - X1))) + "x" + RTRIM$(LTRIM$(STR$(Y2 - Y1)))ă	PRINT #1, ""ă	PRINT #1, "' ţ Start of Image Data"ăă	PRINT #1, "DATA  ";ă	XPos = 1ă	FOR yy = Y1 TO Y2ă		FOR xx = X1 TO X2ă			Byte$ = RTRIM$(LTRIM$(STR$(POINT(xx, yy))))ă			Byte$ = Byte$ + SPACE$(4 - LEN(Byte$))ă			PRINT #1, Byte$;ă			XPos = XPos + 1ă			IF XPos >= 50 THENă				XPos = 1ă				PRINT #1, ""ă				PRINT #1, "DATA  ";ă			ELSEă				PRINT #1, ",";ă			END IFă		NEXTă	NEXTă	PRINT #1, ""ă	PRINT #1, "' ţ End of Image Data"ă	CLOSE #1ăă	LINE (X1, Y1)-(X2, Y2), Col, Băă	Text$ = Text$ + " - Image Appended to " + Out$ + " as DATA Statements - Saved Image Size: " + RTRIM$(LTRIM$(STR$(X2 - X1))) + "x" + RTRIM$(LTRIM$(STR$(Y2 - Y1)))ăăEND SELECTăăDOă	Roller 1, 25, 40, Text$, ColăLOOP UNTIL INKEY$ <> ""ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăăMShowăEND SUBăăSUB Save.Palette (File$, InpFormat$, OutFormat$)ăăOut$ = RTRIM$(LTRIM$(UCASE$(Query("                     Enter the output file                     ", "&0%7 Save Image ", 60, ""))))ăIF Out$ = "" THEN MShow: EXIT SUBăăLoaded = TrueăSELECT CASE UCASE$(InpFormat$)ăCASE "BMP"ă	IF File$ <> "" THENă		IF NOT Load.Palette(File$, "BMP") THEN Loaded = Falseă	END IFăCASE "PCX"ă	IF File$ <> "" THENă		IF NOT Load.Palette(File$, "PCX") THEN Loaded = Falseă	END IFăCASE "GIF"ă	IF File$ <> "" THENă		IF NOT Load.Palette(File$, "GIF") THEN Loaded = Falseă	END IFăCASE "RAW"ă	IF File$ <> "" THENă		IF NOT Load.Palette(File$, "RAW") THEN Loaded = Falseă	END IFăCASE ELSEă	MShowă	EXIT SUBăEND SELECTăIF Loaded = False THENă	DO: LOOP UNTIL INKEY$ <> ""ă	MShowă	EXIT SUBăEND IFăăSCREEN 13: CLSăSet.PaletteăDraw.Palette -1ăăLOCATE 25, 1ăCol = FindBrightestColorăăText$ = File$ăCOLOR ColăăSELECT CASE OutFormat$ăCASE "RAW"ă	OPEN Out$ FOR BINARY AS #1ă	PUT #1, , Pală	CLOSE #1ă	Text$ = Text$ + " - Palette Saved to " + Out$ + " as Raw Data"ăCASE "DATA"ă	OPEN Out$ FOR APPEND AS #1ă	PRINT #1, ""ă	PRINT #1, "' ţ Palette converted with CONVERT.BAS by Sami Ky”stil„"ă	PRINT #1, "' ţ Input file: " + File$ă	PRINT #1, "' ţ Palette size: 786 bytes, RGB format"ă	PRINT #1, ""ă	PRINT #1, "' ţ Start of Palette Data"ăă	PRINT #1, "DATA  ";ă	XPos = 1ă	FOR I = 1 TO 768ă		Byte$ = RTRIM$(LTRIM$(STR$(ASC(MID$(Pal, I, 1)))))ă		Byte$ = Byte$ + SPACE$(3 - LEN(Byte$))ă		PRINT #1, Byte$;ă		XPos = XPos + 1ă		IF XPos >= 60 THENă			XPos = 1ă			PRINT #1, ""ă			PRINT #1, "DATA  ";ă		ELSEă			PRINT #1, ",";ă		END IFă	NEXTăă	PRINT #1, ""ă	PRINT #1, "' ţ End of Palette Data"ă	CLOSE #1ăă	Text$ = Text$ + " - Palette Appended to " + Out$ + " as DATA Statements"ăCASE "BMP"ă	SaveBMP8 Out$, 0, 0, 318, 198ă	Text$ = Text$ + " - Palette Saved to " + Out$ + " as BMP Palette"ăEND SELECTăăDOă	Roller 1, 25, 40, Text$, ColăLOOP UNTIL INKEY$ <> ""ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăăMShowăăEND SUBăăSUB SaveBMP8 (Pic$, X1%, Y1%, X2%, Y2%)ăă'Calculate width and height of image-ăBMPWidth% = X2% - X1% + 1ăBMPHeight% = Y2% - Y1% + 1ă'Each raster must be a multiple of 4 bytes, this next line takesă'care of 'padded' bytes at the end of rasters of odd-width images-ăIF BMPWidth% / 4 <> BMPWidth% \ 4 THEN PadBytes% = 4 - (BMPWidth% MOD 4)ăOPEN Pic$ FOR BINARY AS #1ă'General Picture Information-ă'  BMP format marker-ăBuffer$ = "BM"ă'  File size minus header-ăL& = (CLNG(BMPWidth%) + PadBytes%) * BMPHeight% + 1078ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Reserved 1-ăBuffer$ = Buffer$ + CHR$(0) + CHR$(0)ă'  Reserved 2-ăBuffer$ = Buffer$ + CHR$(0) + CHR$(0)ă'  Number of bytes offset to picture data-ăBuffer$ = Buffer$ + LongToString$(1078)ă'Information Header-ă'  Size of information header-ăBuffer$ = Buffer$ + LongToString$(40)ă'  Picture width in pixels-ăL& = BMPWidth%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Picture height in pixels-ăL& = BMPHeight%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Number of planes-ăBuffer$ = Buffer$ + CHR$(1) + CHR$(0)ă'  Bits per pixel-ăBuffer$ = Buffer$ + CHR$(8) + CHR$(0)ă'  Compression-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Image size in bytes-ăL& = (CLNG(BMPWidth%) + PadBytes%) * BMPHeight%ăBuffer$ = Buffer$ + LongToString$(L&)ă'  Picture width in pixels per meter-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Picture height in pixels per meter-ăBuffer$ = Buffer$ + LongToString$(0)ă'  Colors used in picture-ăBuffer$ = Buffer$ + LongToString$(256)ă'  Number of important colors-ăBuffer$ = Buffer$ + LongToString$(256)ăPUT #1, 1, Buffer$ă'Save palette data-ăBuffer$ = ""ăFOR I% = 0 TO 255ă	OUT &H3C7, I%ă	Red% = INP(&H3C9)ă	Green% = INP(&H3C9)ă	Blue% = INP(&H3C9)ă	'Palette is saved B, G, R with unused byte trailing-ă	Buffer$ = Buffer$ + CHR$(Blue% * 4)ă	Buffer$ = Buffer$ + CHR$(Green% * 4)ă	Buffer$ = Buffer$ + CHR$(Red% * 4)ă	Buffer$ = Buffer$ + CHR$(0)ăNEXT I%ăPUT #1, , Buffer$ă'Save image data-ăFOR I% = (BMPHeight% - 1) TO 0 STEP -1ă	Buffer$ = ""ă	FOR J% = 0 TO (BMPWidth% - 1)ă		Buffer$ = Buffer$ + CHR$(POINT(X1% + J%, Y1% + I%))ă	NEXT J%ă	IF PadBytes% > 0 THENă		FOR J% = 1 TO PadBytes%ă			Buffer$ = Buffer$ + CHR$(0)ă		NEXT J%ă	END IFă	PUT #1, , Buffer$ăNEXT I%ă'Put a fork in it, it's done-ăCLOSE #1ăăEND SUBăăFUNCTION ScanDir (FileSpec$, Output$)ăFile = FREEFILEăOPEN Output$ FOR OUTPUT AS FileăăFile$ = LTRIM$(RTRIM$(DirFirst$(FileSpec$, F.NOR)))ăIF File$ = "" THEN Found = 0 ELSE Found = 1ăPRINT #File, File$ăăDOă	File$ = LTRIM$(RTRIM$(DirNext$))ă	IF File$ = "" THEN EXIT DOă	PRINT #File, File$ă	Found = Found + 1ăLOOPăCLOSE FileăScanDir = FoundăăăEND FUNCTIONăăSUB SeekFileItem (File, Item)ăSEEK #File, (Item) * 12 + 1ăEND SUBăăSUB Set.MenuItem (MenuNum, Num, Caption$, Active AS STRING, Style AS STRING, Selected AS STRING)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Sets menu item Num in menu MenuNum information variables, seeă' SUB Create.MenuItem for information about the menu item variables.ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSEEK #251, (CLNG(MenuNum - 1) * 6100) + (Num * 122)ăTemp$ = LEFT$(Caption$, 50)ăTemp$ = Temp$ + SPACE$(50 - LEN(Temp$))ăMenuItem.Caption = Caption$ăMenuItem.Active = ActiveăMenuItem.Style = StyleăMenuItem.Selected = SelectedăPUT #251, , MenuItemăEND SUBăăSUB Set.MenuTopic (Num, Topic$)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Sets the main menu topic number Num to text Topic$ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăSEEK #250, CLNG(Num) * 16ăTemp$ = LEFT$(Topic$, 16)ăTemp$ = Temp$ + SPACE$(16 - LEN(Temp$))ăPUT #250, , Temp$ăEND SUBăăSUB Set.PaletteăăFOR I& = 0 TO 255ă	r = ASC(MID$(Pal, (I& * 3) + 1, 1))ă	g = ASC(MID$(Pal, (I& * 3) + 2, 1))ă	b = ASC(MID$(Pal, (I& * 3) + 3, 1))ă	OUT (&H3C8), I&ă	OUT (&H3C9), ră	OUT (&H3C9), gă	OUT (&H3C9), băNEXTăăăEND SUBăăSUB SetDTA (FileInfo AS DOSFileInfo)ă'----------------------------------------------------------------------ă' Sets up FileInfo as Disk Transfer Areaă'----------------------------------------------------------------------ă	DIM Reg AS RegTypeXă	Reg.ax = &H1A00ă	Reg.ds = VARSEG(FileInfo)ă	Reg.dx = VARPTR(FileInfo)ă	CALL InterruptX(&H21, Reg, Reg)ăEND SUBăăSUB Show.ImageăăSCREEN 13: CLSăSet.PaletteăMemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ăOrgPal$ = PalăRotPal = -1ăăDOă	Key$ = UCASE$(INKEY$)ă	IF Key$ = "R" THENă		RotPal = -RotPală		IF RotPal = -1 THEN Pal = OrgPal$: Set.Paletteă	END IFăă	IF RotPal = 1 THEN RotatePalăLOOP UNTIL Key$ = CHR$(32) OR Key$ = CHR$(27) OR Key$ = CHR$(13)ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăMShowăăEND SUBăăDEFLNG A-ZăSUB SmoothPal (Iter)ăDIM TempPal AS STRING * 768ăăFOR I& = 0 TO 255ă	OUT &H3C7, I&ă	MID$(TempPal, (I& * 3) + 1, 1) = CHR$(INP(&H3C9))ă	MID$(TempPal, (I& * 3) + 2, 1) = CHR$(INP(&H3C9))ă	MID$(TempPal, (I& * 3) + 3, 1) = CHR$(INP(&H3C9))ăNEXTăăRVal1 = ASC(MID$(TempPal, 1, 1))ăRVal2 = ASC(MID$(TempPal, 4, 1))ăRVal3 = ASC(MID$(TempPal, 766, 1))ăăGVal1 = ASC(MID$(TempPal, 2, 1))ăGVal2 = ASC(MID$(TempPal, 5, 1))ăGVal3 = ASC(MID$(TempPal, 767, 1))ăăBVal1 = ASC(MID$(TempPal, 3, 1))ăBVal2 = ASC(MID$(TempPal, 6, 1))ăBVal3 = ASC(MID$(TempPal, 768, 1))ăăMID$(TempPal, 1, 1) = CHR$((RVal1 + RVal2 + RVal3) \ 3)ăMID$(TempPal, 2, 1) = CHR$((GVal1 + GVal2 + GVal3) \ 3)ăMID$(TempPal, 3, 1) = CHR$((BVal1 + BVal2 + BVal3) \ 3)ăăFOR Iteration = 1 TO Iteră	FOR I& = 1 TO 254ă		RVal1 = ASC(MID$(TempPal, (I& * 3) + 1, 1))ă		RVal2 = ASC(MID$(TempPal, (I& * 3) + 4, 1))ă		RVal3 = ASC(MID$(TempPal, (I& * 3) - 2, 1))ăă		GVal1 = ASC(MID$(TempPal, (I& * 3) + 2, 1))ă		GVal2 = ASC(MID$(TempPal, (I& * 3) + 5, 1))ă		GVal3 = ASC(MID$(TempPal, (I& * 3) - 1, 1))ăă		BVal1 = ASC(MID$(TempPal, (I& * 3) + 3, 1))ă		BVal2 = ASC(MID$(TempPal, (I& * 3) + 6, 1))ă		BVal3 = ASC(MID$(TempPal, (I& * 3), 1))ăă		MID$(TempPal, (I& * 3) + 1, 1) = CHR$((RVal1 + RVal2 + RVal3) \ 3)ă		MID$(TempPal, (I& * 3) + 2, 1) = CHR$((GVal1 + GVal2 + GVal3) \ 3)ă		MID$(TempPal, (I& * 3) + 3, 1) = CHR$((BVal1 + BVal2 + BVal3) \ 3)ă	NEXTăNEXTăăRVal1 = ASC(MID$(TempPal, 1, 1))ăRVal2 = ASC(MID$(TempPal, 763, 1))ăRVal3 = ASC(MID$(TempPal, 766, 1))ăăGVal1 = ASC(MID$(TempPal, 2, 1))ăGVal2 = ASC(MID$(TempPal, 764, 1))ăGVal3 = ASC(MID$(TempPal, 767, 1))ăăBVal1 = ASC(MID$(TempPal, 3, 1))ăBVal2 = ASC(MID$(TempPal, 765, 1))ăBVal3 = ASC(MID$(TempPal, 768, 1))ăăMID$(TempPal, 766, 1) = CHR$((RVal1 + RVal2 + RVal3) \ 3)ăMID$(TempPal, 767, 1) = CHR$((GVal1 + GVal2 + GVal3) \ 3)ăMID$(TempPal, 768, 1) = CHR$((BVal1 + BVal2 + BVal3) \ 3)ăăFOR I& = 0 TO 255ă	OUT &H3C8, I&ă	OUT &H3C9, ASC(MID$(TempPal, (I& * 3) + 1, 1))ă	OUT &H3C9, ASC(MID$(TempPal, (I& * 3) + 2, 1))ă	OUT &H3C9, ASC(MID$(TempPal, (I& * 3) + 3, 1))ăNEXTăăPal = TempPalăăEND SUBăăDEFSNG A-ZăSUB Switch (Var, Value1, Value2)ăDEFINT A-Ză'----------------------------------------------------------------------------ă'                           Switches valuesă'----------------------------------------------------------------------------ă'ă'     Var - Variable to be changedă'  Value1 - Value 1ă'  Value2 - Value 2ă'ă'----------------------------------------------------------------------------ă'ă' if Var = Value1 then Value2 will be assigned to Vară'ă' if Var = Value2 then Value1 will be assigned to Vară'ă'----------------------------------------------------------------------------ăăăIF Var = Value1 THEN Var = Value2: EXIT SUBăIF Var = Value2 THEN Var = Value1ăEND SUBăăSUB Toggle.MenuItem (MenuNum, Num, State)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Sets the menu item Num in menu number MenuNum active or disabledă'ă' State:  True - Active, False - Disabledă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăCaption$ = Get.MenuItem$(MenuNum, Num)ăGet.MenuItemInfo MenuNum, Num, Style$, Selected$, Active$ăIF State THENă	Set.MenuItem MenuNum, Num, Caption$, "1", Style$, Selected$ăELSEă	Set.MenuItem MenuNum, Num, Caption$, "0", Style$, Selected$ăEND IFăEND SUBăăSUB View.PaletteăMHideăăSCREEN 13: CLSăSet.Paletteă'MemCopy VARSEG(Buffer(0, 0)), VARPTR(Buffer(0, 0)), &HA000, 0, &HFA00ă'FOR i = 0 TO 255: COLOR i: PRINT "Ű"; : NEXTăDraw.Palette -1ăOrgPal$ = PalăRotPal = -1ăCol = FindBrightestColorăăCOLOR ColăăLOCATE 23, 1ăPRINT " R - Rotate Palette    ESC - Return"ăăDOă	Key$ = UCASE$(INKEY$)ă	IF Key$ = "R" THENă		RotPal = -RotPală		IF RotPal = -1 THEN Pal = OrgPal$: Set.Paletteă	END IFăă	IF RotPal = 1 THEN RotatePalăLOOP UNTIL Key$ = CHR$(32) OR Key$ = CHR$(27) OR Key$ = CHR$(13)ăăSCREEN 0: WIDTH 80, 25ăCOLOR 7, 1: CLSăDraw.Border 1, 1, 80, 25, 7, 1ăDraw.MenuăMShowăăăEND SUBăMatt Sams                      TILE SCROLLING DEMO            hack@dcr.net                   02-12-98 (00:25)       QB, QBasic, PDS        314  15685    SCROLLER.BAS' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Tile Scrolling Demo/(c)1998 V0id- łă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮă'ă' Introduction:ă'       Heya! =] V0id- here just explaining why I wrote this, and neat stuffă' like that.  Basically this is an extremely simple tile scrolling engineă' for beginning RPG coders.  I'm not saying this is the best way, it's just aă' way, k? =]  Anyway, if you have any questions, send email to hack@dcr.netă' and I'll be happy to help, write more example code, etc.  Ta, ta.ă'ă' Shameless Plugs:ă'       ů UCDOD - A engine (game(?)) I am currently working on.  It is reallyă'         ł       a dev kit for creating small miniRPGs.  The game will workă'         ł       on a level by level (dungeon type) type thing, bută' ÚÄÄÄÄÄÄÄŮ       depending on how you design it, may or may not matter. ;]ă' User                    Included is a complete set of ready to go, customă' Configurable    tools to create custom sprites, maps, items, monsters,ă' Dungeon         magic spells, and your own story for each scenario.  Ită' Of              will be EXTREMELY easy to use, your only task is to developă' Death           your game idea, and leave the hard stuff to the engine.ă'                 255 items, 255 monsters, 255(?) spells, x amount of levelsă'                 (may be limited to certain amount of levels... who knows.)ă'                 Anyway, comments, suggestions?  EMail: hack@dcr.net'ă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄăăREM $DYNAMIC                          ' Use w/ /AH to allow better memoryă                                      ' usage.ăăDEFINT A-Z                            ' Default type INTEGER, allows foră                                      ' maximum speed.ăăCOMMON SHARED PLAYERx%, PLAYERy%      ' żă                                      ' Ă Give all SUBs access to these vars.ăCOMMON SHARED KEYBOARD$               ' Ůă                                    ăDECLARE SUB HANDLEkeyboard ()         ' żăDECLARE SUB HANDLEsystem ()           ' łă                                      ' łăDECLARE SUB LOADtiles ()              ' łă                                      ' łăDECLARE SUB MAPcreate ()              ' łăDECLARE SUB MAPupdate ()              ' Ă Lotsa, and lotsa SUBs! =]ă                                      ' łăDECLARE SUB MOVEdown ()               ' łăDECLARE SUB MOVEleft ()               ' łăDECLARE SUB MOVEright ()              ' łăDECLARE SUB MOVEup ()                 ' łă                                      ' łăDECLARE SUB SCROLLERend ()            ' ŮăăCLS                                   ' Clears our screen.ăSCREEN 13                             ' 13h (320x200x256)ăRANDOMIZE TIMER                       ' Seed the random number generator.ăăCONST MAPmaxX% = 63                   ' Maximum width of map.ăCONST MAPmaxY% = 63                   ' Maximum height of map.ăăCONST PLAYERmaxX% = (MAPmaxX% - 15)   ' How far the player can go (width).ăCONST PLAYERmaxY% = (MAPmaxY% - 9)    ' How far the player can go (height).ăăPLAYERx% = 0                          ' Starting position of player (width).ăPLAYERy% = 0                          ' Starting position of player (height).ăăREDIM SHARED SPRITES%(807)            ' Large bin for sprites.ăREDIM SHARED MAP%(MAPmaxX%, MAPmaxY%) ' Map array (Each number represents theă                                      ' index number of the sprite toă                                      ' display...ăăCALL LOADtiles                        ' Load our tiles from the below DATA.ăăCALL MAPcreate                        ' Randomly create a map.ăăCALL MAPupdate                        ' Show our starting area.ăăCALL HANDLEsystem                     ' Main SUB.ăăEND                                   ' Not needed, but you never know. =]ăăTILEdata:                             ' Oi!  That's alot of DATA, no?ă                                      ' I could have just included the spriteă                                      ' files, but I like the easy use of aă                                      ' single file...ăă DATA &HA0, &H14, &H7676, &H7676, &H7676, &H7676, &H7B76, &H7676, &H7676ă DATA &H7676, &H7676, &H7676, &H7602, &H7674, &H7676, &H7B76, &H767B, &H7676ă DATA &H8C76, &H7676, &H7676, &H7602, &H7676, &H276, &H7676, &H767B, &H767Bă DATA &H8C76, &H768C, &H768C, &H7676, &H7676, &H7676, &H7676, &H7B76, &H276ă DATA &H767B, &H7602, &H8C76, &H276, &H7676, &H7676, &H7676, &H7476, &H7476ă DATA &H768C, &H8C76, &H7676, &H7B76, &H8C8C, &H7676, &H7676, &H7676, &H7676ă DATA &H768C, &H7B76, &H7676, &H7676, &H7B7B, &H767B, &H7676, &H7676, &H8C76ă DATA &H8C76, &H27B, &H767B, &H7676, &H7B76, &H7B76, &H7676, &H7676, &H7676ă DATA &H8C76, &H768C, &H7B7B, &H7602, &H7476, &H7602, &H28C, &H8C8C, &H7676ă DATA &H7602, &H8C8C, &H7B02, &H7676, &H8C7B, &H7676, &H7676, &H8C76, &H7676ă DATA &H7676, &H7676, &H768C, &H7676, &H7676, &H7B76, &H8C02, &H7674, &H8C76ă DATA &H768C, &H7676, &H7676, &H7676, &H7674, &H768C, &H7B76, &H7476, &H8C8Că DATA &H768C, &H8C76, &H7676, &H7676, &H7676, &H8C02, &H7676, &H27B, &H7674ă DATA &H768C, &H7676, &H276, &H768C, &H7676, &H7676, &H768C, &H7B76, &H7476ă DATA &H7676, &H276, &H7676, &H7676, &H7676, &H768C, &H7676, &H7676, &H7402ă DATA &H7676, &H7676, &H7676, &H7676, &H7676, &H8C76, &H7676, &H7676, &H7676ă DATA &H7B76, &H7676, &H7676, &H7676, &H276, &H7676, &H768C, &H7676, &H7676ă DATA &H276, &H7676, &H747B, &H7676, &H276, &H7676, &H7676, &H768C, &H7676ă DATA &H7676, &H7676, &H7B8C, &H7676, &H8C8C, &H7676, &H7676, &H276, &H7676ă DATA &H7676, &H276, &H7676, &H8C7B, &H8C02, &H7674, &H7676, &H7676, &H768Că DATA &H7676, &H7676, &H7676, &H7674, &H7676, &H8C76, &H7674, &H8C76, &H8C02ă DATA &H7676, &H7676, &H7602, &H7676, &H7676, &H7676, &H7676, &H7676, &H7676ă DATA &H768C, &H7676, &H7676, &H7676, &HA0, &H14, &H7676, &H7676, &H7676ă DATA &H7676, &H7B76, &H7676, &H7676, &H7676, &H7676, &H7676, &H7602, &H7674ă DATA &H7676, &H7B76, &H767B, &H7676, &HA76, &H202, &H7602, &H7602, &H7676ă DATA &H276, &H7676, &H20A, &H202, &H8C76, &HA0A, &H20A, &H202, &H7676ă DATA &H7676, &H7676, &HA76, &HA0A, &H202, &H202, &HA0A, &HA0A, &H202ă DATA &H7676, &H7676, &H7476, &HA76, &HA0A, &H20A, &H202, &HA0A, &HA0A, &H202ă DATA &H7676, &H7676, &H7676, &HA8C, &HA0A, &H20A, &H20A, &H202, &HA0A, &H202ă DATA &H7676, &H8C76, &HA76, &H202, &HA02, &HA0A, &HA0A, &H202, &H202, &H202ă DATA &H7676, &H8C76, &HA0A, &H20A, &H202, &HA02, &HA0A, &H20A, &H202, &H7602ă DATA &H7602, &H8C8C, &HA0A, &HA0A, &H202, &HA02, &HA0A, &H20A, &H602, &H7676ă DATA &H7676, &H768C, &HA0A, &HA0A, &H202, &HA06, &HA0A, &H20A, &H602, &H7676ă DATA &H7676, &H7676, &HA0A, &HA0A, &H202, &HA06, &HA0A, &H202, &H602, &H7676ă DATA &H7676, &H7676, &HA0A, &H20A, &H202, &H7606, &H202, &H202, &H702Aă DATA &H768C, &H7676, &H7676, &H28C, &H202, &H2A02, &H7670, &H676, &H2A06ă DATA &H7676, &H7670, &H768C, &H7676, &H7676, &H606, &H762A, &H7076, &H2A76ă DATA &H7606, &H7676, &H8C76, &H7676, &H7676, &H7676, &H62A, &H7676, &H7676ă DATA &H2A76, &H206, &H7676, &H768C, &H7676, &H7676, &H276, &H62A, &H747Bă DATA &H7676, &H2A76, &H7670, &H7676, &H768C, &H7676, &H7676, &H7676, &H702Aă DATA &H7676, &H8C8C, &H762A, &H7076, &H276, &H7676, &H7676, &H276, &H2A76ă DATA &H8C7B, &H8C70, &H7674, &H7676, &H7676, &H768C, &H7676, &H7676, &H7676ă DATA &H7674, &H7676, &H8C76, &H7674, &H8C76, &H8C02, &H7676, &H7676, &H7602ă DATA &H7676, &H7676, &H7676, &H7676, &H7676, &H7676, &H768C, &H7676, &H7676ă DATA &H7676, &HA0, &H14, &H600, &H606, &HF70, &HF0F, &H1E1E, &H2A70, &H2A2Aă DATA &HF70, &HF0F, &H1E1E, &H7006, &H7006, &H2A2A, &H1E0F, &H61E, &H7006ă DATA &H7070, &H2A2A, &H1E0F, &H61E, &H606, &H2A70, &H2A2A, &H2A70, &H62Aă DATA &H7006, &H701E, &H2A2A, &H2A2A, &H606, &H670, &H7006, &H702A, &H701Eă DATA &H606, &HF70, &H1E1E, &H2A70, &H62A, &H7006, &H701E, &H606, &HF70ă DATA &H1E1E, &H7070, &HF0F, &H1E0F, &H701E, &H606, &H1E70, &H1E1E, &H7070ă DATA &HF0F, &H1E0F, &H701E, &HF2A, &H1E1E, &H606, &H7070, &H1E0F, &H1E1Eă DATA &H7006, &HF2A, &H1E1E, &H606, &H2A70, &H2A2A, &H606, &HF70, &HF0Fă DATA &H2A1E, &H606, &H2A70, &H62A, &H7006, &H701E, &H2A2A, &H7006, &H2A2Aă DATA &H1E0F, &H2A2A, &H606, &H7006, &H606, &HF70, &H1E1E, &H670, &H2A70ă DATA &H2A2A, &H2A2A, &H2A2A, &H62A, &H606, &H7070, &HF0F, &H1E0F, &H701Eă DATA &H2A2A, &H2A2A, &H2A2A, &H2A2A, &H62A, &H606, &H2A70, &HF2A, &H1E1Eă DATA &H606, &H2A70, &H702A, &H2A2A, &H2A2A, &H606, &H7006, &H2A2A, &H2A2Aă DATA &H2A2A, &H606, &H7006, &H1E70, &H2A70, &H62A, &H606, &H2A70, &H2A2Aă DATA &H2A2A, &H2A2A, &H606, &H7006, &H1E0F, &H701E, &H670, &H7006, &H2A2Aă DATA &H2A2A, &H2A2A, &H2A2A, &H606, &HF70, &HF0F, &H1E1E, &H7006, &H2A70ă DATA &H2A2A, &H2A2A, &H2A2A, &H62A, &H7006, &H2A2A, &H1E0F, &H61E, &H606ă DATA &H2A70, &H2A2A, &H2A2A, &H2A2A, &H606, &H2A70, &H2A2A, &H2A2A, &H2A2Aă DATA &H62A, &H7006, &H2A2A, &H2A2A, &H62A, &H7006, &H2A2A, &H2A2A, &H2A2Aă DATA &H2A2A, &H2A2A, &H606, &H2A70, &H702A, &H62A, &H2A70, &H2A2A, &H2A2Aă DATA &H702A, &H2A2A, &H2A2A, &H606, &H7006, &H1E70, &H7070, &H2A2A, &H2A2Aă DATA &H2A2A, &H1E70, &H2A70, &H62A, &H606, &H7006, &H1E0F, &H701E, &H2A2Aă DATA &H2A2A, &H702A, &H1E0F, &H701E, &HA0, &H14, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &HF69, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6909, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6909, &H6969, &H6969, &H6969, &H6969, &H6969, &H969, &H6969, &HF69ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H690F, &H969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &HF69, &H6969, &H6969, &H6969, &H690F, &H6969, &H6969, &H6969ă DATA &H6969, &H6909, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H969, &H6969, &H6969, &H6969ă DATA &H969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6909, &HF69ă DATA &H6969, &H6969, &H6969, &H690F, &H6969, &H6969, &H690F, &H6969, &H6969ă DATA &H6969, &H6969, &H6909, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ă DATA &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969, &H6969ăăREM $STATICăSUB HANDLEkeyboardăă SELECT CASE KEYBOARD$      ' Let's pick out which key was pressed...ă  CASE (CHR$(0) + "H"), "8" ' Up arrow key or '8' is using NUMPad.ă   CALL MOVEupă  CASE (CHR$(0) + "M"), "6" ' Right arrow key or '6'...ă   CALL MOVErightă  CASE (CHR$(0) + "K"), "4" ' Left arrow key or '4'...ă   CALL MOVEleftă  CASE (CHR$(0) + "P"), "2" ' Down arrow key or '2'...ă   CALL MOVEdownă  CASE "7"                  ' Up/Left diagonal (NUMPad ONLY!).  Use '7'.ă   CALL MOVEupă   CALL MOVEleftă  CASE "9"                  ' Up/Right diagonal (NUMPad ONLY!).  Use '9'.ă   CALL MOVEupă   CALL MOVErightă  CASE "1"                  ' Down/Left diagonal (NUMPad ONLY!).  Use '1'.ă   CALL MOVEdownă   CALL MOVEleftă  CASE "3"                  ' Down/Right diagonal (NUMPad ONLY!).  Use '3'.ă   CALL MOVEdownă   CALL MOVErightă  CASE CHR$(27)             ' Press ESC to end.ă   CALL SCROLLERendă  CASE ELSEă   SOUND 100, 1ă END SELECTăă WHILE INKEY$ <> ""         ' Â Clear our keyboard buffer.  Kill the BEEP.ă WEND                       ' ŮăăEND SUBăăSUB HANDLEsystemăă DO                          ' DO...ă  KEYBOARD$ = UCASE$(INKEY$) ' KEYBOARD$ = The uppercase value of the key...ă  IF KEYBOARD$ <> "" THEN    ' Was a key pressed?ă   CALL HANDLEkeyboard       ' Yup, handle it.ă   CALL MAPupdate            ' Update our map.ă  END IF                     ' End our IF.ă LOOP                        ' LOOP!ăăEND SUBăăSUB LOADtilesăă RESTORE TILEdata                  ' Start loading from TILEdata:ă ă FOR TILEindex% = 0 TO 807         ' Read 808 DATA statements.ă  READ TILEdata%                   ' READ it.ă  SPRITES%(TILEindex%) = TILEdata% ' Load it into the right array index.ă NEXT                              ' NEXT DATA statement.ăăEND SUBăăSUB MAPcreate STATICăă FOR MAPy% = 0 TO MAPmaxY%            ' Loop to our max Y position.ă  FOR MAPx% = 0 TO MAPmaxX%           ' Loop to our max X position.ă   MAP%(MAPx%, MAPy%) = CINT(RND * 3) ' Put a random number in there (0-3).ă  NEXT                                ' NEXT MAPy% position.ă NEXT                                 ' NEXT MAPy% position.ăăEND SUBăăSUB MAPupdateă ă FOR MAPy% = 0 TO 9                                           ' Top toă                                                              ' bottom.ă  FOR MAPx% = 0 TO 15                                         ' Left toă                                                              ' right.ă   TILEnumber% = MAP%((PLAYERx% + MAPx%), (PLAYERy% + MAPy%)) ' Get oură                                                              ' index.ă ă   ' Put our tile according to the MAP% array, and our current position.ă   PUT ((MAPx% * 20), (MAPy% * 20)), SPRITES%((TILEnumber% * 202)), PSETă  NEXT                                                        ' NEXT Y pos.ă NEXT                                                         ' NEXT Y pos.ăăEND SUBăăSUB MOVEdownă  ă IF PLAYERy% < PLAYERmaxY% THEN ' Are we below the limit?ă  PLAYERy% = PLAYERy% + 1       ' Yes, so move up.ă ELSE                           ' No, annoy the user.ă  SOUND 100, 1                  ' BEEP.ă END IF                         ' END IFăăEND SUBăăSUB MOVEleftă  ă IF PLAYERx% > 0 THEN     ' Are we above the minimum?ă  PLAYERx% = PLAYERx% - 1 ' Yes, so move left.ă ELSE                     ' Nope, annoy the user!ă  SOUND 100, 1            ' BEEP!ă END IF                   ' END IFăăEND SUBăăSUB MOVErightă  ă IF PLAYERx% < PLAYERmaxX% THEN ' Are we below the limit?ă  PLAYERx% = PLAYERx% + 1       ' Yes, move right.ă ELSE                           ' Nope, annoy the user! >=]ă  SOUND 100, 1                  ' BEEP!@#ă END IF                         ' END IFăăEND SUBăăSUB MOVEupă  ă IF PLAYERy% > 0 THEN     ' Are we above the minimum?ă  PLAYERy% = PLAYERy% - 1 ' Yes, move up.ă ELSE                     ' Nope... BEEP!ă  SOUND 100, 1            ' Muahaha. ;]ă END IF                   ' END IFăăEND SUBăăSUB SCROLLERendă  ă   CLS                                         ' Clear the screen.ă   SCREEN 0                                    ' 3h (80x25x16)ă   WIDTH 80, 25                                ' Make sure it's 80x25.ă  ă   COLOR 7                                     ' żă   PRINT "Tile Scrolling Demo/(c)1998 V0id- "; ' łă   COLOR 15                                    ' Ă Print some end info...ă   PRINT "ł"                                   ' łă   PRINT "ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ" ' łă   COLOR 7                                     ' Ůăă   END                                         ' Fin.ăăEND SUBăDavid A. Wicker                SIMPLE EXAMPLE OF PCOPY        pyramax@fastlane.net           02-16-98 (17:39)       QB, QBasic, PDS        65   2066     PCOPY.BAS   ' Simple example of PCOPY >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ă' Written by David A. Wicker                                     Feb 16, 1998ă' pyramax@fastlane.netă' http://www.fastlane.net/~pyramaxă' ---------------------------------------------------------------------------ă' As always, if you borrow anything from any source code for youră' shareware or freeware projects, please give credit to the original author!ă' ---------------------------------------------------------------------------ăă' DEFINT A-Z and '$DYNAMIC as the first two lines of every QBasic programă' ensure maximum speed and maximum memory capability.ă' They are chiseled in every single program I write.ăăDEFINT A-Ză'$DYNAMICăăDECLARE SUB Update ()ăDECLARE SUB CLR ()ăăSCREEN 7, , 1, 0ă' Setup a screen 320x200 with 16 colors.  Also, set it so we are VIEWINGă' Page # 0 but WRITING to page # 1 .ăăD = 1ăN = 50ăDOăă  CLRă  ' This is a simple SUBPROGRAM to clear graphics display.ăă  N = N + Dă  IF N = 50 OR N = 100 THEN D = -Dă ă  CIRCLE (160, 100), 25, 2, , , N / (101 - N)ă  ' The "CIRCLE" command has quite a few options!  Tap [F1] with theă  ' cursor sitting on the word "CIRCLE".  Oh, and call it, heads oră  ' tails.  :)ăă  Updateă  ' The real magic of SCREEN #7 - up to 8 available playfields !ăăLOOP UNTIL INKEY$ > ""ă  ' Exit when any key is pressed. "<>" is not needed because noă  ' keystroke can be less than nothing.  :)ăăREM $STATICăSUB CLRăă  LINE (0, 0)-(319, 199), 0, BFă  ' Use "B" for drawing a hollow box.ă  ' Use "BF" for drawing a filled in box.ăăEND SUBăăSUB Updateăă  PCOPY 1, 0ă  ' Very quick and efficient way to copy screens.  You could easily do allă  ' your graphic work first, then clean it up, then call UPDATE to showă  ' what changes have occurred since the last time UPDATE was called.ă  ' Tap [F1] on the word "PCOPY" to see full help for this QBASIC command.ă  ' Good usage of the "PCOPY" command can ensure completely flicker-freeă  ' graphic displays every time.ăăEND SUBăPetter Holmberg                BEZIER CURVE DRAWING ROUTINE   petter.holmberg@usa.net        02-23-98 (08:40)       QB, QBasic, PDS        222  4654     BEZIER.BAS  ' B‚zier curve drawing routine by Petter Holmberg, -98:ăăDECLARE SUB DrawBezier (x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, col%)ăăRANDOMIZE TIMERăăCLSăSCREEN 0ăWIDTH 80, 25ăăPRINT "B‚zier curve drawing routine by Petter Holmberg, -98:"ăPRINTăPRINT "A B‚zier curve is a mathematical curve based on an iteration of two third-degree"ăPRINT "equations, and it can be used to draw almost any type of simple curves."ăPRINT "The B‚zier curve was invented in the early seventies by Pierre B‚zier, a french"ăPRINT "engineer and mathematician, to be used in CAD/CAM applications. Nowadays, a"ăPRINT "B‚zier curve drawing function exists in most sophisticated drawing programs."ăPRINTăPRINT "A B‚zier curve is defined by four points; the endpoints and two control points."ăPRINT "By setting these points to different locations you can draw curves, straight"ăPRINT "lines or even loops."ăPRINTăPRINT "This demo demonstrates the possibilities of the B‚zier equation."ăPRINT "If you are making a painting program and want to include B‚zier curves, feel"ăPRINT "free to use this routine. All I demand is that you give me the credits."ăPRINT "If you use it in a program of yours, I would be glad if you sent me a mail and"ăPRINT "told me about it. my email address is: petter.holmberg@usa.net"ăPRINTăPRINT "Press any key to continue this demonstration..."ăPRINTăPRINT "- This routine was based on information at:"ăPRINT "  http://www.moshplant.com/direct-or/bezier/math.html"ăăDO: LOOP WHILE INKEY$ = ""ăăSCREEN 13ăăLOCATE 1, 1ăPRINT "A simple B‚zier curve:"ăCOLOR 12ăPRINT "Red    : endpoints"ăCOLOR 14ăPRINT "Yellow : control points"ăCOLOR 15ăPRINT "Press any key to draw the curve..."ăăx1! = 100ăy1! = 150ăx2! = 200ăy2! = 100ăc1x! = 130ăc1y! = 100ăc2x! = 170ăc2y! = 80ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăDO: LOOP WHILE INKEY$ = ""ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (x2!, y2!), 12ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăLOCATE 1, 1ăPRINT "With the B‚zier formula you can draw..."ăăDO: LOOP WHILE INKEY$ = ""ăăPRINTăPRINT "Lines..."ăăx1! = 100ăy1! = 20ăx2! = 200ăy2! = 20ăc1x! = 130ăc1y! = 20ăc2x! = 170ăc2y! = 20ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăDO: LOOP WHILE INKEY$ = ""ăăPRINTăPRINT "Curves..."ăăx1! = 100ăy1! = 50ăx2! = 200ăy2! = 50ăc1x! = 130ăc1y! = 80ăc2x! = 170ăc2y! = 80ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăx1! = 210ăy1! = 50ăx2! = 310ăy2! = 80ăc1x! = 240ăc1y! = 100ăc2x! = 280ăc2y! = 30ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăDO: LOOP WHILE INKEY$ = ""ăăLOCATE 15ăPRINT "And even loops..."ăăx1! = 150ăy1! = 150ăx2! = 150ăy2! = 130ăc1x! = 200ăc1y! = 110ăc2x! = 200ăc2y! = 170ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăx1! = 250ăy1! = 130ăx2! = 220ăy2! = 120ăc1x! = 250ăc1y! = 180ăc2x! = 310ăc2y! = 170ăăDrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăăPSET (x1!, y1!), 12ăPSET (c1x!, c1y!), 14ăPSET (c2x!, c2y!), 14ăPSET (x2!, y2!), 12ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăPRINT "Press any key for a random B‚zier curve."ăPRINT "You can quit at any time with ESC."ăăDOă   DOă      key$ = INKEY$ă   LOOP WHILE key$ = ""ăă   LINE (0, 16)-(319, 199), 0, BFăă   x1! = INT(RND * 320)ă   y1! = INT(RND * 184) + 16ă   x2! = INT(RND * 320)ă   y2! = INT(RND * 184) + 16ă   c1x! = INT(RND * 320)ă   c1y! = INT(RND * 184) + 16ă   c2x! = INT(RND * 320)ă   c2y! = INT(RND * 184) + 16ăă   DrawBezier x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, 15ăă   PSET (x1!, y1!), 12ă   PSET (c1x!, c1y!), 14ă   PSET (x2!, y2!), 12ă   PSET (c2x!, c2y!), 14ă   ăLOOP UNTIL key$ = CHR$(27)ăăCLSăăSUB DrawBezier (x1!, y1!, x2!, y2!, c1x!, c1y!, c2x!, c2y!, col%)ăăx! = x1!ăy! = y1!ăăcx! = 3 * (c1x! - x1!)ăbx! = 3 * (c2x! - c1x!) - cx!ăax! = x2! - x1! - cx! - bx!ăăcy! = 3 * (c1y! - y1!)ăby! = 3 * (c2y! - c1y!) - cy!ăay! = y2! - y1! - cy! - by!ăăPSET (x!, y!), col%ăFOR t! = 0 TO 1.05 STEP .05ă   x! = ((ax! * t! + bx!) * t! + cx!) * t! + x1!ă   y! = ((ay! * t! + by!) * t! + cy!) * t! + y1!ă   LINE -(x!, y!), col%ăNEXT t!ăăEND SUBăDavid W. Hayward               SCROLLING TEXT/SPRITES V1.0    dhaywa01@mail.orion.org        03-09-98 (15:31)       QB, QBasic, PDS        137  9074     SCROLL10.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLL10.ZIP",4^6:Z&=6538:?STRING$(50,177);ăU"%up()%9%%%I-%Gw\7I1C56xx1.%%ob%%%1%%%%xh%wtqq%VUSgRfx6)q<BT1=6wăU"g>WxU'D#sRr3UzsuM:n)>wk1n;RY$]Dt*Lh#oeQIkrMq_c4lFm.V>vWVq$tpDSbăU"ho,-<8u4%(N$;..^.)_\$m%4BHS;G9)%.,b:Pdwkt7MWlWC_s1nMD,r76TU.Bh^ăU"bDS/yy,#6oOl7sZ,FlnoxVUDHV-i7'<iO1=r]<LnV-QE/=dYBZToYU);9Fw<.d&ăU"y\Xn$u>lu2$[$S'NnmnV8)U[*1a#D0==c6Z\[*aFC+r^wm4vKR]O?qQE.9D4;-păU"7,HwuuB<s$;UGv^^4z\ZI&qL>Ee*3)m_)D/':#&4-pkRAJHS%f:FgsaD3GhQ]7\ăU"020D9M&n'c<'/gSKcVmSadM#IIQa&XA^O]1,>a9GnD2uG$jb].%PU0pH/#;E?FIăU"jQc'0V.9<I-=TB_YidY>e6:gZe9Z;[5+U#DO2d/I&lHt<Mcr3m4'g2+Ukb,YrF9ăU"i5p1n#B^lX4]6clc>uK&%XD:;j%vtE9L+L2>q[K?[8p69y^shV8/6Y29Y2<#]<8ăU"rRt%CRl*.*I.O\/9Te#%Va7U%aiWf4ag)V0mMr)5#=OtyWqeJh7.\t%pu+QW39EăU"I7ad6A00+edP+0M3VB:fr\#;e8pOCc10um#?i7Fi)^qM+TFz+\2oZXZ&lW\El79ăU"7tRiaL(lAuK%*rSH-[22?nQwED4ieGo9)YUj*M)J]?+T);w)[wYtY9b>k3TE3OeăU"y-0gErFfm9M4,E\s=Xi)+?;pYfCInkTrM.O5Ympq#qH*IdgUI/Gm)97bt6;\ovHăU"R,N:G-/h(qX-M,7RA24FF7QG/m#q^[q7[ct]]\c8D((h<qE5hbK['(QthtawPj_ăU"_jVk-dyWe:[otPpT:-pfvrgQ/N8-XZT6=W7T.bIHM)/<[&]1*>&ipIZxUmT4<CoăU"B>X*rp[g):5,'chK<'R2K:&pHDwU-G7a.*miJV3[_+g[nu67N0=<;?oXn:6DE1oăU"JwZZlt32f>/%X('Qg2gy2^$>w$s%1AtQq1Y2eU'BBbuKL*cfi2*mOb-A,pK.cV8ăU":PY(t)hWF-qYsc%ByCy:wNXU)qMfN'rTRLnv:QuLS)TalU?;*L[XsVkU:i-e22(ăU"575Z(MYF</1BVA3Lm;)Q*T/\(3h)kFv=oNsdkNTCvmjJw\SUas6]qvRws8eh$r]ăU"lttG'4f+gBt.Mr[NVaut8P>[xJ>SPrqZc>E;eNWEQ^9g86pU4:MjFi6+D7*^;S'ăU"FDK+2#i0=FO,o;W&9N*8#/z/),cW3QBTk&n/(hVz+gMin#/L3qWm7]4P7i+g)GBăU"GK1oskjag^-_gYEfwD4)5t7'M1WIBB#fm>uYZp,B]Y0Guo?g53MA5;*tFn*W=>năU"q[*gkxPXst;_A%mz-0oRu]mr?^K/X79iW44bewW^r.';WGktma$'eh>qWw3s3Y/ăU"Tb98btqshq=L^h#XV<uUDUWnoj[$$pwirM.jeFH'\0FFHYl.&T+OVw<>i>NJt-2ăU"PrYk]4p^4xH+Utnfee,z'mLi46ME/T4;?PYM^U8HUZxC=A,QBI/jy(E2rz\A4+:ăU"T%T2b%lYMLAdr0suQPn6nJVM9btW7^sYGJlo7mti/:iZ7D\.o)O(Jn1gNup3c:băU"t8Lm0rH;M(hY;pJt?^Mvh<nY4HCu)9xm3-*U$?Houw*3xYrX[06P4jt87,XhDG&ăU"#t[iRR(HM3%Rq8S2c'ZrscC*_uD*VO0%:W[]92,J)RtYe<;UE14EZ+um'Z)e%ORăU"\(2(^WMcck.YE00q^SL.?]o;Z9B4xVO]p+8D%BlpG]Fb/e<96E:\Yiq_7;kVMeRăU"N5V4VeRv4hpH=WSc^UOQCKW*9UC0CMh7Hef.B[F)H:94bS[RE0x;QD];clEKg8JăU"AM0Gd(&\F?AOai>Q4$l59,R%6[H&w9[Cu'dNmhnuTk^0t.2iHY&a7s*#GFIbtUEăU"j]m;%&,F<M]98Fo'?\5v5M;S(p0ZaTUt$V4j=^K]ykQS\2f=++eqH*N23i+[ES\ăU"mZIo#:XOekugdR/va:FC>it%Fm#FW&a=Pp[977BCOHdB\&w'C\B,QGjss;EH^'oăU";S'8vR2q]DL'O6_xP(fef%8dKZM$l9nARY0bK%HX23;K$y4tJ:W+>&8FCg:(q5NăU"kkb>'GMkFp*cBLfccEhHL-h=Z>)Z8d97<7BtAU6U2wwi%uq4S7]D=9v]\=aI%9tăU"C]J&2O;C+IHY2H$gq;>V;C)fC.9W]FJT#$Pm*V0(ZZ/V:;,Q.0(T-f&=0boJ?-SăU"XY=de[xhQ:[<^WkyDFuajR$CQem%']Q-A7OJJtW7>=8B;bUm+:aI<r&e,nNYbCcăU"J=eh]>c^[I+Vq)cKZ*1k;w7AKYz;\T)*>b?O$(pmu'2;ZJM42/AdTg<Ul*oAtwMăU"Re0u['t>i,N\=g66[X3pt$>rOW3NytW?Ypd\]BeJ#mb>\l_0K5l?<E6pE2:X;[=ăU"rgSqh#%#ET$:S&QOQ<oGT4k-u)J(C?zCo]%qS),U1tqKp)P)9qz>TSY;><lAv6+ăU"(K-+1eI[&HVuG?QO6ph;^oFvxg/<(\Gpn+1ZVI470/Ftd-jiA3XxFFCnBXRU2+>ăU"-xk:XNMTue&LfRap[BNp]ymCo2Q*?CHX29c9xS*xm1[.D#,Ju+jgS8Z?(9S\lQ&ăU"<aj+%w&na1av76giyPmm*PK>esM=4U/*mSW)>(JZP9UpBUJIj2ixu)$R;\)DMJPăU"9YM/+1Ax^w$[CI\0K6zA1^Ia8l)(xQ82X)dK>'6V]8JgdY>Wrx%\xb>]BmxeWJ+ăU"o8s,RxRw=A<.e;N=]373d>/u\i*8Rt4Xf#GbbUOknboP]PomXC=HR&)kvS[zl,NăU"mWy\.$cs;(+zD+vun:\ScmssD5W.q<AIYGY'-G/m&u%'0ux<pT_*T4J)%8_8j,DăU"e4;gZUN4o.47UP&0G>&>gN3vtk4.*M<9rtLj;[2dlj^oi9^Gc#x%(i(+b*Fu$$1ăU"pTeB>G)UcIuC3J<7KVW?m9<G1DQ?[[?j,v4GB^s*rFut<[)D:\g#J<Sc\BSZ:K#ăU"N&n^Jc2FKN.Zdu(Gf]pgZXp_sfaqWl,gv5^Tn*tQ;qrcFU\#]f5<D54MAyn<<PtăU">MLEcB\[Z/J+xg9JBV.&SJ[T'ElbjW5SnZ0$n=kB0GN,9e;HD?-+rmiEf_8FbYOăU"GDQ#:R?0nQEehkvBwC/LSv%HpZTdeq8bJ5R)cf*0/(U';Xm8j8\DcuC<>H&8?#EăU"#^$PXxDr#8a=X^A#8cc=^E3#Hr8]$MD$f&sk\DKk0l7]Lr]CRl]vor]8Pd_tzr4ăU"eX7*RwU;t&%E*J)+8*w/?g*P__Q9'B.'N'BZkP_SQ;W87*wigIlP_QO=3)Ps9EIăU"LH3+OgEZ%P_nQ>7NL/s/U3p)P9QEil%#E*XKKI/s//Ud7*IwURp7:m:1)u%E*=XăU"M-':NgZeS:S%/8Uh&e^/5]KL/s/U,2&e/85]J/2s/UxB&e/5HQJ/sV/UX9[*wU<ăU")m%E*+XunP__Q>76O3JzOU<h%%E*XyB-'Ng,p%:mo:1(-d'NgZ)T%E*=X5M/hs/ăU"U$_)P9E-)(:mT:1X:[*wU<4D.m\:NgZ\_)P9EFuM/sM/Ua%+EB14;CGveOTL\)iăU"c_fGtv40(r\rbHuvBQok%+c5&Or<>el7IwI9FQ).$B^z%id\8OlS:vl\RvRW+<_ăU"xuqC#qV?KN<==1^T9Li)7FduOR2GX5ID*laxlN*qN]k*#/2Z=ml6^mZ'BRJT%=zăU".aZ=lk0ENDFMzt?Kh\5%Z,a/r<T,#z?fXVWjBQ?>,Np[gy=6'Em[\jw&rp7#jKFăU"A\Nj$Sv=&feh>4.P[+R[l+<[+qr[+\P[+b[H+LQjfB6I(i2%$^V\$^]P$^^$i^_ăU"$^2$$?n+q9t.qR$^4Y$^5$6^6h:#kXX]M(mj(Mmj(mMj(mj*b/w9_qYQ(oEQ(EOăU"Q(9(t-N+5_y43H2S&#e6WP*bcqnj&mvT<Bi\6(-[kG\$BP\Dq3rmwbavOC(BPcKăU"D-rtrV8,#F\<I<7j<2>dBK5NYfndzjcZhn^D'6&*ODxoqpLq<=I2l3jmXChO08%ăU"dx9FuP\7M%PMLS&>20Ff5s;Z.bN8060.>-d(=4):1r9Fr7G%&Y<VSQO)gLuZuk3ăU"*T[YI,;qTu%p()9%%%%-1%Hlb[IlQ\(P*'%(%r-%%%-%%%%kts%ySks^y\z2,a^ăU"E1QE09N-[>81:-Ku3.jmsO678%<bV*b,F&/&x]NmRu7n=+PLS4fYZDffv)>fOIUăU")[NvTCPm_1\H0m^^a*+2#EnT<;BrI)*Vs,fT<m#J8S:1ALI35%peyalLBP_=E)-ăU"k/_38B5p:aP:j#ni')RL(Gg(1U5PGVRMX6XSu#_>lbV%aTUeFX6YQWID()Z_6hzăU"3Z7KLHb'cReIpOE:?6Ha5pWu6+hW,g/bb-:A:&iq=vAMA_$49m8(c8?B\I[[kG&ăU"t;;JA+TwxY6^=V_t.F4Tq5u0Y%j)h,/pbP1M(^yT]MH**24.NNF:m=1k&:Yh&.VăU"htprw5hO7DofVc%'1'1jmRE=BsNP_DB5MU'vKNY(QsBd5an8F['lfC,BG$WaT$făU"\2IgS+)b&kCh>OF00yDHhhn.p?F'pM4w3g$iD('mGIYh=yHxwPv4r<MynhU*]W5ăU"s4aggBSj$b+m:$?$Ehnt9'2yVH\cBfLjcf[D]^Z=N&F<TnOVF/w/UZ/=1_fzg^zăU"YV^,'/$$*F:QvM>q(TSYFW09ZFPvt46<Cb&>nEg[i<kTej1KZ:a,#5A,O\?NGMlăU"5>p9JEmU:&e<ey7W;IRXdD<Wo?,?Nk)duJ40'3wb5n39cr5c&Vdy8XnjEL$&Qx&ăU"HR^_BYrW:LTyMCSM*41w2'uoW7S%t[fdQSs#l&=T-4HF*w>2KN:Om:_)MN9MEa'ăU"DR:oacYK;S\=]L,u[v_Soq3Np#EZ6c0>g0n,2W=r]JP,uUU<^?Hmx&%up()%9%%ăU"%R-%L887IY=16Sx&7%%#7%%%-%%%%xm%nuSxRuwfe:rYUU(5Tpb)/<g0V5$m1h?ăU".p$O'o(5tdne<9-no^.f3rc-9UfU+<Iw(A]OJ^DM-,I%<-+di7T7Dqy&aZ?cXVTăU"UGJxT.c89O_W;f]10q>*EJ'5h7NHK[=H3\qI7$0KGD\L(Xl<jKC>mz)7D^+BEWeăU"bUZVr[mBL_VA:O#$WMNl^D9J4sicxQ<ou4bXbux]C5=_,]o^pkS<Of^[\hEG+oVăU"7E#Z1$c+>t0DNSYA>kp1MkP6aU949='wU-M22uUbt7WV-1ONb?CQmo\5c[iPK%ZăU"MoILs#l7).SQ-S+HKcP]w/1&fC24KIJl,^96MB_7&(5D*v5.1mUpO3a_AowaLM_ăU"5%+9q?aN]ArW4\FbPnl)%LIt$MH-Lf5tm[nbMrjfYt=BFf0D?JHNI=ixQ<lo48făU"r2Am]SeQRF0f:lc7W;-AMD'A4G\oiv\aPlCk<2)hLA3mPR%]YJgHE\22>Sp7WbtăU"[xkz9lgNIbv,IJw&0lxKOl6(cqD<mH^Drt9vKSu:$ycv8GS+(n#G5$T&GEndR&-ăU"dJDu%p()9%%%%-L%#Q7+I'w7%5p,%+%L8%%%/%%%%wjf%irjS^y'y.h&<>U9A2wăU"C4ExPVtAQ4dZg;d-cS4hL1[>VQ5i=V_cvIt>gmqsbM]5cHrj)>vEqaA8t&d=g,jăU"4U1#nhcKBAF^k<NRwCUdQtMh&tF?>7T9lW5X)(Gnx0TWuJ(;Xw_jrtV_sqQJO%GăU"'<4%#Y':N/tr3Z0^0M$)4zI0-eyf-scnBw$Iag;d1*6#7m(:b.=9jhmcu.36mv(ăU"D4iQqV?Yz7N42OLz2AMFSo4(q3RML2_6s)kOf%F_MBA#QHhJ)W=8>cgIT4fR9)+ăU"\QM(UFu353P]]fHfu<;Evg(_O<]r#qtYSRrZz^Z3rUmHFR3EAptf==53Fr])hYRăU"vevdq;:7x,AnmMh%14J<1%9-z3./7<$Xl22\oK_(x$:-#i^9Rbr>Wp9V<OkaR%YăU"v7kSRp)&1[Q]AoQQGS4itBlLMCv)[lUlo.J7z:2+)St^nf$)%SGMGi$9$>=#Nn+ăU"g(;pJQPu-igylWA2mPc6FfnCJ]^VXar6:5cIE]u*dO0J$SFiEJ^Qr>OQ)&Tj_#=ăU",S,YK&/43ssAb)04R2^%fRASy)7%:v7t)'h<L#2sQgghPKCZ3PC:jz)&%(WPy_GăU"z.^4WrdaCQd*mBQfV(1>3$hN[5tZE/qb<52k,tChLx['r69-JFFc7>&Iy+Ph&9făU";%>].%CF$7qP,;gPqtB7Ke%j15DHE3xg<qdT;*H1].,j5g\'sVEY*82'=8Q#;;BăU";oS4>OaINr$%->.;&?aGmJ:aRxR7[pWesBhSTNM5g^k>IR?3<*V?nld)+9hG\-+ăU"GowQP>rd2_PufrGCWgG[WZBOhEm.cKcU7(nU9MpJ[]$8jbviA/sDwm_](tDEkr#ăU"^wVruBEpTF-t5el6O93B8:CO7W;8UN0wUeEX/e+)WC'ee:SCjYuVB2DW)[SQkZ]ăU"C>8b#s;/q+KfGnq3t:qpi9?f.XA6/Rf4lyG$szsb5I[*Jttt1qAJ_XL2VAy.Ao*ăU"F\3zz+Uh;w7R[_:iLO:1jk;MU.:ay+Bf4'ALs<#5maGjz]a(::B8eR(<=kRV=%)ăU"cg17OTsC(h3&KB<u9MYMgM]7n/UmeVR#\Dp?Zr$j*1<5Q7gIC3;)]&Jrycp+?PaăU"32OuKX:v91[Az*?gnAra(M=tclC4SmoiKt90Ek1'4RAqmT)0gsTO1I/[S-IE:%,ăU"Cvk/1r&6U*s=*]kc=>)<DIQc-EiLG2QmQ-3_YHara5tPS4gK1*o<SP=pW9Kn3J5ăU"f&sXp*UL9FS[II1&p&JC*e\&Ek/2*\#X<&kCnlG<T<m3r$l$xb,=8B?$L</j[00ăU"8lxhJ<[(qmEr_Tj3V8661(_LAjhfzjDI$qjg)FhjOP,:etQ+Z#=tQJ)]eo=v.o6ăU"_Qu:(<HG/?VAX3scCIa^F,uMiggH\]U=:48XmqIodgh?3V>P9gK.#UlkKDhlCjrăU"2KAgaK?c3Bp(gB_j/$y'XHk<i0HS5#\kbK7ek'H?ZZ%E+p9h_RqQR&2+cl6/;lzăU"1-\20bpuBSa7V6h*M,5B5w[&OjP\x][dg9snEBGR3Tc)GfAQ$n7Y$Z5V1A\qSmlăU"s0cG6]s06)52ya2eEEeEE#F834_M$mjtI;t[9ZI*j2I;miusPG*mm%DcT\H;kRfăU"gn]7Sb*0Iuu_wALACingD6[Pgw[_SIg/2K#6>z(Y^ii4wYYVF64-&f3,CN:/45eăU"H=-=-vtzl'G8nN[CDD_'dT8hLef,3aK4X,*QA+VCSFauOr6pBSk]2H0HCosB94făU"8V\iZgNlN,css\Xa.;\m3/SfduFS>xnA<3ltYrf0X%(0&u(W6QW7Nl6VIlD=;49ăU")STk^XqtxqUe/l2it+d7yN+$=[<U(no9Vgz0y0h4jdszQ1r$reVFg+Sc;PG^jM:ăU")Ld+Lf=&gLR<B^<J%'7ENicwY='FsOhgzqe?Ei(mrNCnMrC,nsGs9Ml_cd't:mAăU"FRNLk-U2Hk0RD'?8)Oe5R#Gi1#p3?cWf*vX2jZhrEQ,3m\[mL)?t2km+9l>KYX&ăU"]LAI3E64Mmy9L.HbWlJh3tUKXP<u[.lzN[YWt8U'\T6?x1C#\rOWGGB:e::F5MKăU"mvQUQ'S<L%kJh;,teEt;m.KlG6eof/RtUS1S'gf;(1_x^*m-lAo4Y2EJ*I\gC#oăU"l8tLreTuui<pRu1i)b,d/WVy0(KU*&']$mO>&Pb:)AR^*%7b62&RO&')an0^G<tăU"&'dI_f)>W/eOdvjq+j=eU)Im\l3fl?&=4SJVU$Sp<N^/-=Z54?$BCleh?eLmfEXăU"Q*uvi6XJ1)cSb1RN-+<l^L8cxmW^YMSF.IG%u\O'Z_6ROY*1xBsP&7#.El5cH?kăU"]gSZi0tM;Fyv'lpvM2V*>.Q,y^R_?Xu*HEG:lPZ.m8PcNcC6hJ8aW%d&up%&'9%ăU"%9%%%I-%Gw\7I1C56xx1.%%ob%%%1%%%%%%%%%&%%E%%%%%%%%%xhwt%qqVU%SgăU"fx%up&'%9%9%%%%-%)HlbI7lQ\P&*'%%&r-%%%-%%%%%%%%%&%E%7%%L1%%%kt%ăU"sySk%syup%&'9%%9%%%R-%L887IY=16Sx&7%%#7%%%-%%%%%%%%%%%%E%%%%y4%ăU"%%xmnu%Sxuw%up&'%9%9%%%%-%2#Q7I''w75%p,%%'L8%%%/%%%%%%%%%&%E%%%ăU"%H6%%%wj%firj.Sy'y%up*+%%%%%%)%)%'W%%%&e=%%%%%ăEND SUBăCLOSE:IF S=13AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăWayne Wallace                  FLUORESCENT CONES              www.qbasic.com                 03-18-98 (21:30)       QB, QBasic, PDS        90   2349     CONES.BAS   'Title: Fluorescent Conesă'File: CONES.BASă'Source: Computer Doodles: (ISBN 1-887112-01-4)ă'Date: May 1996ă'Author: Wayne Wallaceă'Send all comments to: Wayne Wallace, 3129 25th St. #212, Columbus, IN 47203ăă'*********************** Please Note *******************************ă'The program line "speed = 10" controls the speed of the program. ă'Adjust this value to match the program to the speed of your computer.ă'To stop the program while it is running, press any key.ă'********************************************************************ăă'How it Works:ăă'Three different colored circles are drawn at the starting coordinatesă'of (50, 50), but each circle is slightly out of phase by one row. Theă'cones are made by increasing and decreasing the size of the circles asă'they move diagonally across the screen. ăăSCREEN 12ăDEFINT A-Zăspeed = 10ăRANDOMIZE TIMERăă'Select plaid colors-for backdrop---ăk1 = 4: k2 = 8: k3 = 0: cc = 31: aa = 480ăb2 = 480: d2 = 480: i1 = 8: i2 = 8ăGOSUB backdropă'--------------ăa = 50: B = 50: c = 25ăd1 = 1: d2 = 1: d3 = 1: d4 = 1ăk1 = 10: k2 = 13: k3 = 0ă  FOR m = 1 TO 9463ă    IF INKEY$ <> "" THEN ENDă    CIRCLE (a, B - 1), c, k1ă    CIRCLE (a, B), c, k2ă    CIRCLE (a, B + 1), c, k3ă    a = a + d1: B = B + d2ă    IF a > 620 THEN d1 = -1: k1 = INT(RND * 7) + 9ă    IF a < 6 THEN d1 = 1: k3 = 0ă    IF B > 480 THEN d2 = -1: k2 = INT(RND * 7) + 9ă    IF B < 6 THEN d2 = 1: k1 = INT(RND * 7) + 9ă    IF k2 = 11 THEN k1 = 15ă    IF k1 = 11 THEN k1 = 12ă    IF m > 4283 THENă    c = c + d3ă    'cone effectă    IF c > 50 THEN d3 = -1: vx = 2.5ă    IF c < 1 THEN d3 = 1ă    IF c < 10 THEN vx = 4ă    END IFă      FOR delay = 1 TO speedă      NEXT delayă    NEXT mă    SLEEP 3ă'clear the screen in whiteăk1 = 0ăGOSUB clswipeăENDăăclswipe:ă'---black cls-----------------ăo1 = 640: p1 = -1: o2 = -1: p2 = 480ăf1 = 1: f2 = 1ăFOR m = 1 TO 325ăIF INKEY$ <> "" THEN ENDăLINE (o1, p1)-(o2, p2), k1, Băo1 = o1 - f1: o2 = o2 + f2ăFOR zz = 1 TO 20 * spdăNEXT zzăNEXT măPALETTEăRETURNăăbackdrop:ăLINE (0, 0)-(640, aa), k1, BFăa1 = 4: b1 = 0: a2 = 636ăc1 = 0: d1 = 0: c2 = 640ăFOR m = 1 TO 40ăLINE (a1, b1)-(a2, b2), k2, Băa1 = a1 + 8ăa2 = a2 - 8ăNEXT măFOR m = 1 TO ccăLINE (c1, d1)-(c2, d2), k3, Băd1 = d1 + i1ăd2 = d2 - i2ăNEXT măRETURNăMarc van den Dikkenberg        SINGLE PARTICLE EXPLOSION      excel@xs4all.nl                04-05-98 (17:20)       PB                     198  4156     EXPL.BAS    ' PARTICLE EXPLOSION (FIREWORKS)ă' Original Code: Angelo Ken Pesce -- ken@uniserv.uniplan.ită' Smooth routine made by X-Biosă'ă' Modified by Marc van den Dikkenberg -- pb@excelsior.xs4all.nlăă'---------------------------------------------------------------ăă' Some "standard" pb initsă$OPTIMIZE SPEEDă' 386 is REQUIRED...ă$CPU 80386ă$LIB ALL OFFă$ERROR ALL OFFă$FLOAT NPXăăRandomize Timerăă' Init mode 13h + SQUARE PIXELSă !Mov     ax, &h13ă !Int     &h10ă !mov dx,&h3c2ă !mov al,&h0e3ă !out dx,alăă' Init Screen bufferă DIM screenbuffer(32000) as WORDă DIM scrseg as WORDă scrseg = varseg(screenbuffer(0))ăă' Generate Paletteă maxcol% = 255ă CALL setpalăă' Init particle arrayă TYPE particleă    x as SINGLEă    y as SINGLEă    xm as SINGLEă    ym as SINGLEă END TYPEăă num% = 1000ă DIM objs(num%) as particleăă GRAV# = 0.01:  'TRY OTHER GRAV# VALUES LIKE 0;0.01 etc...ăGRAV#=0.001ăă' ********************************************>>>>>ă' MAIN ********************************************>>>>>ă' ********************************************>>>>>ăă DOăă' Clear screenă    !Xor     di, diă    !Mov     es, scrsegă    !Mov     cx, 16000ă    !Xor     ax, axă    !Push    axă    !Db      &h66ă    !Db      &hC1ă    !Db      &hE0ă    !Db      16ă    !Pop     axă    !Db      &hF3ă    !Db      &h66ă    !Db      &hABăă' GENERATE PARTICLES ********************************>>>>>ă    xsrc% = rnd * 320ă    ysrc% = rnd * 200ă    FOR x% = 1 to num%ă       objs(x%).x = xsrc%ă       objs(x%).y = ysrc%ă       lx! = (rnd * 2) -1ă       ly! = (rnd * 2) -1ă       dist! = rnd * 5ă       ln! = sqr(lx!^2 + ly!^2)ă       IF ln! = 0 THENă          objs(x%).xm = lx!ă          objs(x%).ym = ly!ă       ELSEă          objs(x%).xm = lx! * (ln! * dist!)ă          objs(x%).ym = ly! * (ln! * dist!)ă       END IFă    NEXT x%ăă    FOR sloop% = 1 to 400:  ' Main smoothing & grav loop *****************>>>>>ăă       FOR x% = 1 to num%ă          incr objs(x%).x, objs(x%).xmă          incr objs(x%).y, objs(x%).ymăă          IF objs(x%).y > 199 THENă             objs(x%).y = 199ă          ELSEIF objs(x%).y < 0 THENă             objs(x%).y = 0ă          ELSEă             incr objs(x%).ym, GRAV#ă          END IFăă          IF objs(x%).x < 1 THENă             objs(x%).x = 1ă          ELSEIF objs(x%).x > 319 THENă             objs(x%).x = 319ă          END IFăă' Put pixel into bufferă          x1% = int(objs(x%).x)ă          y1% = int(objs(x%).y)ăă          !Mov     es, scrsegă          !Mov     di, x1%ă          !Mov     ax, y1%ă          !Dw      &hE0C1ă          !Db      6ă          !Add     di, axă          !Dw      &hE0C1ă          !Db      2ă          !Add     di, axăă	if x1%>3 and x1%<316 and y1%>0 and y1%<199 thenă		!Mov     al, maxcol%ă	elseă	   !Mov     al, 0ă	end ifăă	!Mov     es:[di], ală   NEXT x%ăăă' SMOOTH BUFFERăă'		 !mov     es,scrsegă       !Mov     di, &hF8c0 ; 64000-320:Don't smooth last lineă       !Xor     bx, bxă'      !Mov     bl, es:[di]ăjmp1:ă       !Mov     bl, es:[di]ă       !Add     ax, bxă       !Mov     bl, es:[di + 320]ă       !Add     ax, bxă       !Mov     bl, es:[di - 1]ă       !Add     ax, bxă       !Dw      &hE8C1ă       !Db      2ă       !Jz      jmp2ă       !Dec     alăjmp2:ă       !Mov     es:[di], ală       !Dec     diă       !Jnz     jmp1ăăverder:ăă' COPY BUFFER TO SCREENă       !Push    dsă'		 !Push    siă       !Mov     ds, scrsegă       !Xor     si, siă       !Xor     di, diă       !Mov     ax, &hA000ă       !Mov     es, axă       !Mov     cx, &h3e30ă       !Db      &hF3ă       !Db      &h66ă       !Db      &hA5ă'		 !Pop     siă       !Pop     dsăă    NEXT sloop%ăă LOOPăăSUB setpal ()ă out &h3C8, 0ă FOR i = 0 to 63ă    out &h3C9, 0ă    out &h3C9, i / 6ă    out &h3C9, i / 8ă NEXTă FOR i = 0 to 63ă    out &h3C9, iă    out &h3C9, 0ă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, iă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, 63ă    out &h3C9, iă NEXTăEND SUBăLior Zur                       COMETS FALLING AND EXPLODING   zur@inter.net.il               05-23-97 (00:00)       QB, QBasic, PDS        295  9005     LSTARS.BAS  '+---------------+------------------------------+-----------+ă'| Lior's Stars  |  Lior Zur <zur@inter.net.il> | 23/5/1997 |ă'+---------------+------------------------------+-----------+ă'| This is program is amazing: it shows comets falling of   |ă'| the sky, and exploding on the ground. Try to change the  |ă'| constants for great effects. My favorite is to change    |ă'| NumLeft to 50. Or change WindPower to 0, also nice       |ă'| effect of raining. If you don't know what to change and  |ă'| how much, I've added examples with explanations.         |ă'+----------------------------------------------------------+ă'| For more excellent QB graphic demos, stuff and goodies   |ă'| please visit my homepage at:                             |ă'|                                                          |ă'|    http://www.geocities.com/SiliconValley/Heights/9246   |ă'+----------------------------------------------------------+--+ă'| !!!!!!!!!!!!!!!!!!!!!!!! IMPORTANT: !!!!!!!!!!!!!!!!!!!!!!! |ă'|                                                             |ă'| You can publish this file anywhere, as long as you haven't  |ă'| made any change in this file. If you use any of this code   |ă'| in your own program, please make sure to give me a credit.  |ă'| Also: I don't allow to publish this file on a CD without    |ă'| my permission.                                              |ă'+-------------------------------------------------------------+ăăDECLARE SUB NewLeft (num!)ăDECLARE FUNCTION INT1! (number AS SINGLE)ăDECLARE SUB DrawPart (action, num)ăDECLARE SUB CreateNew (num)ăă'----------------------------------------------------ă' change the following arguments for diffrent effect:ă'----------------------------------------------------ăă'==================================ă'these are to do with the little stars that remain when the maină'comet has crashed into the ground:ă'==================================ăCONST ExLevels = 50'Explosion levels: the bigger, the longer each explosion(50)ă                    ' TRY THIS: change to 200, and change Pulse to 0.04ăăCONST Grav = .2  'gravitation to pull leftovers to the ground...(0.2)ă                 ' TRY THIS: change to 6 for interesting effectăăCONST Pulse = .025 'energy pulse for leftovers when the comet hit.(0.02)ă                  ' TRY THIS: change to .06 for interesting effectăăCONST FloorJump = 1 'will the leftovers jump on the floor? 0-no 1-yesă                    ' TRY THIS: change to 0...ăăCONST LWind = .01    'what's the wind for leftovers? (0.01)ă                     ' TRY THIS: change to .07 to see explosives all over theă                     '           screen!ăăCONST NumLeft = 20  'number of leftovers. put here 10 for greater speed.(20)ă                    ' TRY THIS: change to 40 or 50 for bigger collisions!ă                    ' * Changing this to 50 is my favorite! do it now!ăă'==================================ă'these are to do with the main comets:ă'==================================ăăăCONST WindPower = .1    'wind power (can be negetive too.)(0.1)ă                        'TRY THIS: change to -.3 for larger and strongeră                        '          comets!ă                        'OR: change to 0, for raining effect!!!ăăCONST JumpWalls = 0     'if you wanna the comets to jump from the walls,ă                        'change to 1. it's good only in strong wind.ăăăCONST NumParts = 70     'number of comets(70)ă                        'TRY THIS: if demo speed is too slow, dicrease.ăă'you'de better not mess with the following:ăăCONST StartCols = 23    'start of comets colors. better not change...(23)ă                        'TRY THIS: change to 78 or 63 for rainbow effectăăCONST NumCols = 8     'don't change this! number of colors effect speed.ă'----------------------------------------------------ăăăăCLSăSCREEN 13ăCLEARăRANDOMIZE TIMERăTYPE LeftOveră x AS SINGLEă y AS SINGLEă Col AS INTEGERă wind AS SINGLEă d AS SINGLEăEND TYPEăTYPE CometTypeă active AS INTEGERă level AS INTEGERă lx1 AS SINGLEă ly1 AS SINGLEă lx2 AS SINGLEă ly2 AS SINGLEă lx3 AS SINGLEă ly3 AS SINGLEă lx4 AS SINGLEă ly4 AS SINGLEă lx5 AS SINGLEă ly5 AS SINGLEă lx6 AS SINGLEă ly6 AS SINGLEă lx7 AS SINGLEă ly7 AS SINGLEă swind AS SINGLEă wind AS SINGLEă x AS SINGLEă y AS SINGLEă Col AS INTEGERă power AS SINGLEă loops AS INTEGERăEND TYPEăDIM SHARED s(NumParts) AS CometTypeăDIM SHARED l(NumParts * NumLeft + NumLeft) AS LeftOverăFOR i = 1 TO NumPartsă CreateNew iăNEXT iăDOă FOR i = 1 TO NumPartsă  s(i).loops = s(i).loops + 1ăStartLoop:ă  IF s(i).loops >= s(i).power THENă   IF s(i).active = 0 THENă      FOR nn = i * NumLeft TO i * NumLeft + NumLeftă       PSET (l(nn).x, l(nn).y), 0ă      NEXT nnă      s(i).level = s(i).level + 1ă      IF s(i).level = ExLevels THENă       CreateNew iă       s(i).y = 0ă       s(i).ly7 = 0ă       s(i).ly6 = 0ă       s(i).ly5 = 0ă       s(i).ly4 = 0ă       s(i).ly3 = 0ă       s(i).ly2 = 0ă       s(i).ly1 = 0ă       GOTO StartLoopă      END IFă      FOR nn = i * NumLeft TO i * NumLeft + NumLeftă       l(nn).d = l(nn).d + Gravă       l(nn).x = l(nn).x + l(nn).windă       l(nn).y = l(nn).y + l(nn).dă       IF FloorJump THEN IF l(nn).y > 199 THEN l(nn).y = 199: l(nn).d = -l(nn).dă       PSET (l(nn).x, l(nn).y), l(nn).Colă       gg = INT(RND * 2) + 1ă       IF gg = 1 THEN IF l(nn).Col > 20 THEN l(nn).Col = l(nn).Col - 1ă      NEXT nnă   END IF 'active 0ă   IF s(i).active = 1 THENă   DrawPart 0, iă   s(i).loops = -1ă   s(i).y = s(i).y + 1ă    IF s(i).y > 199 THENă     s(i).active = 0ă     NewLeft (i)ă     GOTO StartLoopă    END IFă    s(i).x = s(i).x + s(i).windă    IF s(i).x > 319 THENă     IF JumpWalls = 0 THENă      s(i).lx7 = 0ă      s(i).lx6 = 0ă      s(i).lx5 = 0ă      s(i).lx4 = 0ă      s(i).lx3 = 0ă      s(i).lx2 = 0ă      s(i).lx1 = 0ă      s(i).x = 0ă     ELSEă      s(i).wind = -s(i).windă     END IFă    END IFă    IF s(i).x < 0 THENă     IF JumpWalls = 0 THENă      s(i).lx7 = 319ă      s(i).lx6 = 319ă      s(i).lx5 = 319ă      s(i).lx4 = 319ă      s(i).lx3 = 319ă      s(i).lx2 = 319ă      s(i).lx1 = 319ă      s(i).x = 319ă     ELSEă      s(i).wind = -s(i).windă     END IFă    END IFă     s(i).lx7 = s(i).lx6ă     s(i).lx6 = s(i).lx5ă     s(i).lx5 = s(i).lx4ă     s(i).lx4 = s(i).lx3ă     s(i).lx3 = s(i).lx2ă     s(i).lx2 = s(i).lx1ă     s(i).lx1 = s(i).xă     s(i).ly7 = s(i).ly6ă     s(i).ly6 = s(i).ly5ă     s(i).ly5 = s(i).ly4ă     s(i).ly4 = s(i).ly3ă     s(i).ly3 = s(i).ly2ă     s(i).ly2 = s(i).ly1ă     s(i).ly1 = s(i).yă   DrawPart 1, iă   END IF 'activeă  END IF 'star's turnă NEXT iăLOOP UNTIL INKEY$ <> ""ăăSUB CreateNew (num)ăRANDOMIZE TIMERă s(num).active = 1ă s(num).level = 0ă s(num).wind = (INT(RND * 13) + 7) * WindPowerăă s(num).swind = s(num).windăă s(num).loops = -1ă s(num).Col = INT(RND * NumCols) + StartCols + 1ă s(num).power = NumCols + 1 - (s(num).Col - StartCols)ă s(num).y = INT(RND * 200)ă s(num).x = INT(RND * 320)ăă s(num).lx7 = s(num).xă s(num).lx6 = s(num).xă s(num).lx5 = s(num).xă s(num).lx4 = s(num).xă s(num).lx3 = s(num).xă s(num).lx2 = s(num).xă s(num).lx1 = s(num).xăă s(num).ly7 = s(num).yă s(num).ly6 = s(num).yă s(num).ly5 = s(num).yă s(num).ly4 = s(num).yă s(num).ly3 = s(num).yă s(num).ly2 = s(num).yă s(num).ly1 = s(num).yăăăEND SUBăăSUB DrawPart (action, num)ă SELECT CASE actionă  CASE 0 'eraseă   PSET (s(num).x, s(num).y), 0ă   LINE -(s(num).lx1, s(num).ly1), 0ă   LINE -(s(num).lx2, s(num).ly2), 0ă   LINE -(s(num).lx3, s(num).ly3), 0ă   LINE -(s(num).lx4, s(num).ly4), 0ă   LINE -(s(num).lx5, s(num).ly5), 0ă   LINE -(s(num).lx6, s(num).ly6), 0ă   LINE -(s(num).lx7, s(num).ly7), 0ă  CASE 1 'drawă   PSET (s(num).x, s(num).y), s(num).Colă   LINE -(s(num).lx1, s(num).ly1), s(num).Col - 1ă   LINE -(s(num).lx2, s(num).ly2), s(num).Col - 2ă   LINE -(s(num).lx3, s(num).ly3), s(num).Col - 3ă   LINE -(s(num).lx4, s(num).ly4), s(num).Col - 4ă   LINE -(s(num).lx5, s(num).ly5), s(num).Col - 5ă   LINE -(s(num).lx6, s(num).ly6), s(num).Col - 6ă   LINE -(s(num).lx7, s(num).ly7), s(num).Col - 6ă   PSET (s(num).x, s(num).y), s(num).Colăă END SELECTăEND SUBăăFUNCTION INT1 (number AS SINGLE)ă she = number - INT(number)ă IF she >= .5 THEN sh = 1 ELSE sh = 0ă INT1 = INT(number) + shăEND FUNCTIONăăSUB NewLeft (num)ă FOR ii = 1 TO NumLeftă  l(num * NumLeft + ii).Col = s(num).Colă  l(num * NumLeft + ii).d = -(INT(RND * 100)) * Pulseă  l(num * NumLeft + ii).wind = INT(RND * 100) * LWindă ă  gg = INT(RND * 2) + 1ă  IF gg = 1 THEN l(num * NumLeft + ii).wind = -l(num * NumLeft + ii).windă  gg = INT(RND * 10) + 1ă  IF gg > 2 THEN l(num * NumLeft + ii).wind = l(num * NumLeft + ii).wind - s(num).wind * 1.5ă  ă   l(num * NumLeft + ii).x = s(num).xă   l(num * NumLeft + ii).y = s(num).y '- 70ăă NEXT iiăEND SUBăLennaert van den Linden        BLUR PORTION OF SCREEN         luckyone@xs4all.nl             04-20-98 (18:58)       QB, QBasic, PDS        234  6994     BLUR.BAS    ' blură' blurs part of the screen in mode 13, with the use of aă' temporary file(BLUR.TMP). It does not change to current palette bută' but seeks nearest color in the palette.ă' It can be used with any palette.ă' uses a maskmatrix of 5x5, which can be altered. Have fun.ă'ă' larger areas may take a bit longer to blur.ă'ă' you are free to use this code, as long as you don't put your own nameă' above it pretend it's yours.ă'ă' Lennaert van der Linden. April 20th 1998ă' any question/suggestion can be mailed to : luckyone@xs4all.nlăăDEFINT A-ZăDECLARE SUB Blur (x1%, y1%, x2%, y2%, matrix%())ăSCREEN 13: CLSăă' ******** make some art ****************ăLINE (0, 8)-(319, 199), 1, BF   ' draw a blue backgroundă' let's draw some random linesăFOR t = 1 TO 100ă    LINE (RND * 320, 8 + RND * 192)-(RND * 320, 8 + RND * 192), tăNEXT tăă' draw some random filled circlesăFOR i = 1 TO 50ă        x = RND * 320: y = 8 + RND * 192ă        CIRCLE (x, y), RND * 25, iă        PAINT (x, y), iăNEXT iăăLOCATE 12, 17: PRINT "THIS WILL"ăLOCATE 13, 20: PRINT "BLUR"ă' *********** end of art **************ăă' set a blurring mask. see end of program for masksăRESTORE Blur:ăă' create the matrix and read the valuesăDIM matrix(-2 TO 2, -2 TO 2) AS INTEGERătotal = 0ăFOR x = -2 TO 2ă    FOR y = -2 TO 2ă        READ matrix(x, y)           ' read valueă    NEXT yăNEXT xăă' set values for box that is to be blurred.ăx1 = 120: y1 = 70: x2 = 200: y2 = 130ăă' draw a box around the area so the user knows where to lookăLINE (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), 15, BăăBlur x1, y1, x2, y2, matrix()ăăENDăăă' the 5x5 matrixesă' the total is calculated automatically.ă' the more the values are spread over the matrix, the more blurringă' will occur.ăă' NW wind effectăwind:ăDATA  0, 0, 2, 4, 8ăDATA  0, 1, 8,16, 4ăDATA  2, 8,32, 8, 2ăDATA  4,16, 8, 1, 0ăDATA  8, 4, 2, 0, 0ăă' slideăslide:ăDATA  1, 2, 4, 0, 0ăDATA  2, 4, 8, 1, 0ăDATA  4, 8,16, 2, 0ăDATA  2, 4, 8, 1, 0ăDATA  1, 2, 4, 0, 0ăă' very blurăvery:ăDATA  0, 1, 1, 1, 0ăDATA  1, 3, 4, 3, 1ăDATA  1, 4,16, 4, 1ăDATA  1, 3, 4, 3, 1ăDATA  0, 1, 1, 1, 0ăă' normal blurăBlur:ăDATA  0, 0, 1, 0, 0ăDATA  0, 1, 4, 1, 0ăDATA  1, 4, 8, 4, 1ăDATA  0, 1, 4, 1, 0ăDATA  0, 0, 1, 0, 0ăăSUB Blur (x1, y1, x2, y2, matrix())ă' blurs part of screen. assumes you are in screen 13.ă' matrix is an integer array with dimensions : (-2 to 2, -2 to 2)ăă' make sure distance is at least 2 (horizontal as well as vertical)ăIF (x2 - x1) < 2 THEN PRINT " x2 must be bigger than x1 and distance must be at least 2.": ENDăIF (y2 - y1) < 2 THEN PRINT " y2 must be bigger than y1 and distance must be at least 2.": ENDăătotal = 0ăFOR x = -2 TO 2ă    FOR y = -2 TO 2ă        total = total + matrix(x, y)ă    NEXT yăNEXT xăă' make sure the total is not 0, or we'll get a divide-by-zero error.ăIF total = 0 THEN PRINT " Total can not be 0.": ENDăă' now lets read the palette into an array, so we can lookă' up the values quicklyăDIM palet(255, 2) AS INTEGERăOUT &H3C7, 0ăFOR a = 0 TO 255ă    palet(a, 0) = INP(&H3C9)    ' red valueă    palet(a, 1) = INP(&H3C9)    ' green valueă    palet(a, 2) = INP(&H3C9)    ' blue valueăNEXT aăă' we can't write directly to the screen, if we did we would read alreadyă' altered dots. We could write to memory, but might end up with memoryă' shortage problems. So we'll write to a temporary file on disk.ăff = FREEFILEăOPEN "BLUR.TMP" FOR OUTPUT AS ff: CLOSE ff  ' make sure file is emptyăOPEN "BLUR.TMP" FOR BINARY AS ffăă' this string will hold a buffer, so we don't have to write a single byteă' every time. Writing a multitude of bytes is a lot faster.ăbufsize = 0ămaxsize = 2000 ' we'll flush the buffer to disk, if it reaches this sizeăbuffer$ = ""ăătotaldots& = 1& * (x2 - x1 + 1) * (y2 - y1 + 1)ădotsset& = 0ăpDone = 0ăLOCATE 1, 1: PRINT USING " done : ###%"; pDoneăăFOR y = y1 TO y2ă    FOR x = x1 TO x2ă        red = 0: green = 0: blue = 0ă        FOR xx = -2 TO 2ă            FOR yy = -2 TO 2ă                px = x + xxă                IF px < x1 THEN px = x - xx ' mirror the dot if it fallsă                IF px > x2 THEN px = x - xx ' off the borderă                py = y + yyă                IF py < y1 THEN py = y - yyă                IF py > y2 THEN py = y - yyă              ă                ' add RGB valuesă                index = POINT(px, py) ' read color indexă                red = red + palet(index, 0) * matrix(xx, yy)ă                green = green + palet(index, 1) * matrix(xx, yy)ă                blue = blue + palet(index, 2) * matrix(xx, yy)ă          ă            NEXT yyă        NEXT xxă        ' divide by total and we've got the RGB values of the blurred dot.ă        red = red \ totală        green = green \ totală        blue = blue \ totală      ă        ' find the closest color (closest RGB values)ă        td = 12288 ' set total difference, bigger than will occură        cc = -1  ' closest coloră        FOR a = 0 TO 255ă            ' calculate differenceă            rd = palet(a, 0) - redă            gd = palet(a, 1) - greenă            bd = palet(a, 2) - blueă            t = rd * rd + gd * gd + bd * bd ' distance = r^2+g^2+b^2ă                                            ' we don't have to do a SQR(),ă            IF t < td THEN                  ' it's very slowă                ' this color is closer than the last close color foundă                cc = aă                td = tă                IF td = 0 THEN a = 255 ' found exact match, quit searchă            END IFă        NEXT aă       ă        ' cc should be greater than -1 by now.ă      ă        ' add byte to bufferă        buffer$ = buffer$ + CHR$(cc)ă        bufsize = bufsize + 1ăă        ' flush the buffer is size equals maximum buffer sizeă        IF bufsize = maxsize THENă            PUT #ff, , buffer$ă            buffer$ = ""ă            bufsize = 0ă        END IFăă        dotsset& = dotsset& + 1ă        IF (dotsset& * 100) \ totaldots& > pDone THENă            pDone = ((dotsset& * 100) \ totaldots&)ă            LOCATE 1, 1: PRINT USING " done : ###%"; pDoneă        END IFă    NEXT xăNEXT yăă' there could still be bytes in the buffer, that have not been flushed yet.ăIF bufsize > 0 THENă    PUT #ff, , buffer$ă    buffer$ = ""ă    bufsize = 0ăEND IFăă' we now have a temporary file (BLUR.TMP) that contains the blurred boxă' all we have to do now is read back from this file to the screen. QBasică' does not support a poke$ statement, so we have to PSET each single byteă' which will be a bit slow.ăSEEK #ff, 1 ' go to start of fileăă' read a dot and write ităindex$ = " "ăFOR y = y1 TO y2ă    FOR x = x1 TO x2ă        GET #ff, , index$ă        PSET (x, y), ASC(index$)ă    NEXT xăNEXT yăă' we are done on the screen. we can close the temporary file and delete it.ăCLOSE #ffăKILL "BLUR.TMP"ăăEND SUBăAndrew S. Gibson               SAVE PALETTE AS DATA STATEMENTSzapf_dingbat@juno.com          04-21-98 (04:10)       QB, QBasic, PDS        173  8351     PAL2DAT.BAS 'Converts 256 color palette file that are 768 bytes in length to DATA lines.ă'You'll need QuickBASIC, E-mail address is Zapf_DingBat@JUNO.COMă'Program has internal, but dated help - I wrote this when I didn'tă'know any direct access VGA stuff...ăDEFINT A-ZăDECLARE SUB Help ()ăDECLARE SUB Pause ()ăăIF COMMAND$ <> "" THEN Help: ENDăCLSăPRINT "Palette file converter version 1.0 for BASIC by Andrew Gibson": PRINTăLINE INPUT "Input Name for Palette data file >"; InpName$ăLINE INPUT "Output Name for BASIC data statement file >"; OutName$ăIF InpName$ = "" OR OutName$ = "" THEN PRINT : PRINT "Conversion aborted.": ENDăLOCATE 10, 29: PRINT "ŐÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ¸";ăLOCATE 11, 29: PRINT "ł °°°°°°°°°°°°°°°°°°°°° ł";ăLOCATE 12, 29: PRINT "ł   0% Percent Complete ł";ăLOCATE 13, 29: PRINT "ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍľ";ăHandle = FREEFILEăHandle2 = Handle + 1ăăON ERROR GOTO HandlerăOPEN InpName$ FOR BINARY AS #HandleăOPEN OutName$ FOR OUTPUT AS #Handle2ăăFOR PalFile = 0 TO 767 STEP 3ăRed$ = INPUT$(1, #Handle)ăGreen$ = INPUT$(1, #Handle)ăBlue$ = INPUT$(1, #Handle)ăăPRINT #Handle2, "DATA " + STR$(ASC(Red$)) + "," + STR$(ASC(Green$)) + "," + STR$(ASC(Blue$))ăPercent$ = Percent$ + STRING$(INT(PalFile * 22) \ 768, 219)ăLOCATE 11, 31: PRINT Percent$; : Percent$ = ""ăLOCATE 12, 29: PRINT USING "ł ###% Percent Complete ł"; (101& * PalFile) \ 768;ăăNEXT PalFileăCLOSEăENDăăHandler:ăCLOSE : LOCATE 14, 1: PRINTăIF OutName$ <> InpName$ OR InpName$ <> OutName$ THENă   KILL InpName$: KILL OutName$ăELSEIF OutName$ = InpName$ THENă   KILL OutName$ăELSEIF InpName$ = OutName$ THENăKILL InpName$ăEND IFă SELECT CASE ERRă        CASE 5ă        PRINT "Error Number :" + STR$(ERR) + "  Cannot perform internal function request"ă        CASE 7ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Out of memory"ă        CASE 14ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Out of string space"ă        CASE 51ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: INTERNAL ERROR"ă        CASE 52ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Bad File Name or number"ă        CASE 54ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Bad file mode"ă        CASE 55ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: File already open"ă        CASE 57ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Device I/O error"ă        CASE 58ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: File already exists"ă        CASE 59ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Bad record length"ă        CASE 61ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Disk FULL"ă        CASE 62ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Input past end of file"ă        CASE 63ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Bad record number"ă        CASE 64ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Bad file name"ă        CASE 67ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Too many files"ă        CASE 68ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Device UNAVAILABLE"ă        CASE 71ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Disk not Ready"ă        CASE 72ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Disk-Media error"ă        CASE 73ă        PRINT "Error Number :" + STR$(ERR) + "  Program Error: Feature unavailable"ă        CASE 75ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Path/File access error"ă        CASE 76ă        PRINT "Error Number :" + STR$(ERR) + "  Disk Error: Path not found"ă        CASE 53ă            CLOSEă            PRINT "Error Number :" + STR$(ERR) + "  Disk Error: File not found"ă   CASE ELSEă END SELECTăPRINT : PRINT "Pal2Dat file coversion cannot continue."ăENDăăSUB HelpăVIEW PRINT 1 TO 24: CLSăPRINT "Palette file converter version 1.0 for BASIC by Andrew Gibson": PRINTăPRINT "This program is used to convert DAC palette files to DATA statements"ăPRINT "for BASIC. The DAC palette files are exactly 768 bytes in length with"ăPRINT "3 bytes that represent Red, Green, Blue for all 256 colors. 256*3=768"ăPRINT "The resulting DATA statement file will have 256 lines is this format:": PRINTăPRINT "DATA  42, 63, 0": PRINTăPRINT "The palette is calculated in BASIC as follows:": PRINTăPRINT "'Read Palette data statements"ăPRINT "ColorChange = -1: FOR N = 1 TO 768 STEP 3"ăPRINT "ColorChange = ColorChange + 1: READ R, G, B"ăPRINT "CL& = (B * 256 ^ 2) + (G * 256) + R"ăPRINT "PALETTE ColorChange, CL&: NEXT N": PRINTăPRINT "This code sets a variable name ColorChange to -1, initializes a"ăPRINT "for/next loop which causes ColorChange to advance one, reads three"ăPRINT "bytes, sends the three bytes to the Long Integer calculator, and the"ăPRINT "palette statement Loads the appropriate color for the color number."ăPauseăPRINT "You should use the RESTORE statement with a data label to help"ăPRINT "organize your code. The Palette Calculator formula shouldn't be"ăPRINT "changed at all, except if you want to change the letter variables"ăPRINT "to different positions which will change the order of your colors"ăPRINT "or make new ones. If you are using a an all gray palette then the"ăPRINT "three variable's postitions do not matter (in the Palette"ăPRINT "Calculator formula).": PRINTăPRINT "If you need to store the calcuated results you HAVE to use a Long"ăPRINT "Integer array like this,": PRINTăPRINT "DIM SHARED Paldef&(255) - (You might need to reference this array"ăPRINT "somewhere else in your program.)": PRINTăPRINT "and to store the Palette Calculator results insert after the"ăPRINT "Palette Calculator line like this:": PRINTăPRINT "'Read Palette data statements"ăPRINT "ColorChange = -1: FOR N = 1 TO 768 STEP 3"ăPRINT "ColorChange = ColorChange + 1: READ R, G, B"ăPRINT "CL& = (B * 256 ^ 2) + (G * 256) + R: Paldef&(ColorChange) = CL&"ăPRINT "PALETTE ColorChange, CL&: NEXT N"ăPauseăPRINT "There are many different ways to do this, the information is aimed"ăPRINT "towards the beginner, who may be trying to figure this process out."ăPRINT "I was ignorant of this process, learned it, and now shared it with"ăPRINT "all of you. The process described herein is compatable with QBasic"ăPRINT "and Microsoft QuickBASIC 4.x": PRINTăPRINT "Basic program operation:": PRINTăPRINT "You will be asked to the proper name for the palette file, the"ăPRINT "name can be any standard normal filename. The same idea is in"ăPRINT "order for the output file name, too. You can (just like using copy)"ăPRINT "use pathnames to specify the location of a Source or Destination"ăPRINT "filename even across diskdrives and directories. If you make a"ăPRINT "mistake then you have the chance to correct it, the left and right"ăPRINT "arrow keys are used to move the cursor to the place at which you"ăPRINT "have made an error and type over it, or if you have to insert"ăPRINT "some text you can press the insert key to activate the text"ăPRINT "insertion mode. The cursor will change slightly when you press"ăPRINT "insert. A flat cursor means that overstrike is active, tall cursor"ăPRINT "means insertion made is active. If you bump certain keys you will"ăPRINT "hear an annoying beep which means that the key will not be accepted."ăPRINT "Blank filenames (at either prompt) are not accepted and are"ăPRINT "considered to be the `signal' to abort the program."ăPauseăPRINT "If anything goes wrong the program will cease to operate and"ăPRINT "describe what happened. If you see this,": PRINTăPRINT "Error Number : 5  Cannot perform internal function request": PRINTăPRINT "then you would have to start over, because i'm using a clever but"ăPRINT "`touchy' conversion scheme. This program is bug free when used"ăPRINT "according to the instructions. An error that is caused is most"ăPRINT "likely of human origins. Errors may also be issued because of a"ăPRINT "potential equipment failure. Most errors aren't serious."ăVIEW PRINT 1 TO 25: LOCATE CSRLIN, 1, 0ăEND SUBăăSUB PauseăLOCATE CSRLIN, 1: PRINT "Press a key to continue ...."; : WHILE INKEY$ = "": WEND: LOCATE CSRLIN, 1: PRINT STRING$(28, 32);ăEND SUBăRichard Colletta               ZGUI VERSION 1.0               riley007@hotmail.com           04-30-98 (14:24)       QB, QBasic, PDS        109  7198     ZGUIV1.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ZGUIV1.ZIP",4^6:Z&=5128:?STRING$(50,177);ăU"%up()#9%%O.-%LGnjIJ)<h/X,%%%G>%%%/%.%%)l.zn%V%SgfxN6'*BBSo7MqvYăU"xIhuKP.D?C&[7xnG63K/z;dI;0#$Bj1+#v*I]UI1QVQlTFI\Cj-Tq#EP^p7rg(?ăU"8bg>rn+G7P.X9?k6tP\f2E+iuNCR<X;?GC,=rXu?5>;3^hZoB+uO+Db0%2Ap\m8ăU"uQl?goB]gVU:yJ$)Rs-XXW'ajh..((#B<a1&IDdK'cSD,CnN6sG3Cj,ql6^V8kLăU"dvdurMghcpuv4RthdVQvN#6HWl<gcs/:Sp&'iEFImLkZL02<*F;dfG^5z>LBUmjăU"1\'HPY'(YP7N7]c.qw2-]Mj-0.P$7IHY*ZB05ae.;Y[WK:4Hi[(ufWG$FlSO(XJăU";^/]hALnO89._;9hmQKpmKn:.ZUI/FgJfH&<SZMrIEOh#)O?pA%M+zLI)-A6aApăU"2WRuS\1L#6Nm:U#2hdQJua%31zb$u[vloxK7^#K9cUf]2kJP2pX:b;VR<(Q%d%GăU"-#a^d831*>2S54w)\*0LUQ;\U)ZqWs8Fs2UYn$'_CSunk^bw=AA[H]H<Mru[$8IăU"FQpCApL:q8BY1KiaFueBk9rC['f/]&<FnE]00e:p4DReD/6*N0Ev]6t=5f^exzKăU"cPm.AZFhQ%O+kgOPHTR;.KfLHqk?)>9#k=;8JmmVb,qgm^HmYoZfL2dJv-kN<T7ăU"\RMKKj*W,6utJ2alfG$eX3RsiL8PnF#NAevjB*ioT4;pjiATo+$78hPry^I]9e=ăU"ld>gWnmVp?f'Xgc[&g#)BRGrq7>;5GH1.^kxFm09W_)zlXr8t:ufhV072LMoQwhăU"luaw&'#qYh^7qYP.Lto-/_*q/8r*AFUGhR,;.gP+,^u.aIMMLK;SgA6^4?M9Q$dăU"yVMK78g7.hWuY9S5E#(oskQ]#9hE\XVKN2Yx[.BJf5zAdm,n9:AB/=^'0T:N(X=ăU"DREgT#'q17).%P%J2Gz/:B2l+ujCFq*1ML4Zc.Lj(?kxzVrPCp8uCPHM%]a?[EYăU"MsnU?c]\MgJM(ZHGhl4FD(.]gnbB'r]-f:+NB-.riG0$JX:hdFh5bn9_Qd5M[7JăU"E^PoMXqAal=.tQXOd[YL6EB,mUnuSY4(v,Az3/$,.^9>dVa.&RM(,)L>igr5;AzăU":9&43V#&yq=;W-&1TA)]p_#:7EA(r\99N/JzlIsJ3t>=%>K\6^Gk=9#%Ut?*[a0ăU"ilSMJ%-Ga3x$K%:,G[PGso<RN'>nCd9)mhx8R6;#?Bf8f?h%.T8oE7Im*ABBy.tăU"VW>K0IoVt3$A%6bJ<=nS')S[I*s7XT8T1;Ae2=p,=0Cj-]V)I//Ef1)HCCOBmJwăU"0k.Y>qz=i=Wi_t_jNHGqxQ\'R;NN2')K,e8YOU[c[=GiL60n$->mE*AK/#TB39QăU"J?Z[ar%l;[*4JTi')5P*[T]r3.m#tdq3I0hbXpLf?NKNYCNq9*Ogl^2GjUxIXZkăU"Y/'F=r9+,bEs)QXbGmk7dRi[8Pk1ab*aVAF=LSuhvYpNwDAzrG&lL[(&,kB5]?DăU"N;+Zt(.T'nBg4huBJs^(kl/VN0a3b2^))ckfE)Y61C*sU.vIi;e>\iobi=o^979ăU".k]PKp-/2,Fys.&I<]^toT94FG00NE,j<SCNibLsO^pm#Q<)?+4#Oz>?T%^cJC/ăU"Im9TS>l[Ct<GrmVFe'ZXY*')<YA:cPr*,g8,$#ui/z4k.q?7,0GCt%d$k:IE'eQăU"ON+]IIn/aIQd&&($QtE&W6I2%0pI55,&%+JUVy%qydpg16wBv8j7lnQbNCae$YiăU"nhSt$K6ms(Z]Gx-8+kj/1;.I^BPX>]oAXZ'v0O^W6%xQ7HXv?qIc#>5j)f5=8W&ăU"a7xe.lJOHx;[$]?9HWPi6Wu#a-FTOjVKS#(ygUpnH=+ZgIFcmJ6hm2SWlV?C[R#ăU"tsp#,0\l8Y\$DT>FwAn8%Ynso<\$W5mtW76cuUa#KNNij#g_\T;7=Kk'ebX?EBGăU"IYaF&)K9CWngi7*>iXTfa&c5D*n;yN>1l_7lXp_jZP=D6]oMdq\d(f)%ILS-*saăU"kE<>ke1cq\-'s3_Z$^Wrm:Br_fvom?*\*cb.,w(kTxnPbt5JW:<#^vueO8mHEw#ăU"6cTPklqNjnpB*DGWDAgi(3?b4EOh6#<QrNJ_YF%51C+bsEuPB[#?tc2C&O+&Ki2ăU"uX8>b#-61D8hS6WJK+px%N5(g$,(A_D'>9*3f7n53KlkI:tm:/OKuL$+D7FPhM2ăU"eZ3Iuq]HBVa(s7*HiemM8_+k<C;nvXe[mm)lg];-73Xc;)ZgZ\f%ld.f0LV3+q+ăU"uC>K-2tiATfvdSJGD7Zn;T>dkh1d;Gq&,96s:,;dOYcYL<Yg>$.I8X^VK&lGoi]ăU"-r*>[)9PJM>+#l+>WO]U'gElC%^b^qmnW9nZ<uJ;Z.b0qF1r(VpH>ujr1+Zet*QăU"Y(A9uh^F-#n3K:r&HJd-:0)xa^%FH5daWEW'Se+)j:JORNjsqE$+9w&H4gw(<;)ăU"c.pEX3xxB,#J3][M$WILZwAVHQH&H9J/cO?=l0Zh-#B>wL$<t_=DGM4RiF3S<x8ăU">0k4/P3g0DTeKTZt45TC5c$G=1tdg[73]S8l+*:(gJ%qV,Px4u%p()9.%%O-C%7ăU"HjaI'h)&?z0%(%sQ%%%.%%%%lfx%nrSgRfxF);*BSoL7MvYu8)T#J4,'ZRi<gd_ăU"s%+R8%R0*#^^L>T=M/9F&*E1rQVvfBTbXaIk<;kPb,DydM=DptKVvnD75Ywum^_ăU"GSUtg5cdrPI<Wy>g-bd&KZWv\;pXV'8,'1fU(hxZU*fM,K>EXsrgzjN8#B^IH'TăU"B2uZtBTIU&K*UCb:wi=gX-L]i=)d6G4FpbFr:jBX+#>ufHXWltDFxuVE7(ou2o4ăU"bmV,w;5Z&p/Gex<+AY(yk04EV:^b'\rgE4T]1ga4DFh]?Df:9,UkeefsU_4Rh1#ăU"O2PJ8#6q*f)#p'rSp\n9=1;B>0yQYOJGFi^2FhjzBI5Z4h*TM<2ggP/M#'d,<RiăU"uo'at(PoIX&,sT?SV7^N*/IFp*RR8ZUHW9BgdfHE(,M?>o(6sjRo4YQPv1rTjDvăU"qbafdo<P&4E-9+m5,*hdS-nj<#i3IkFtnapBa0gDlFe+-#15.hStZ_&7B$fr5,BăU"HdC6DP/:f[A^?6X$VG#x6+a9cdWRR;bx8gZ?&4RxeuDQYrz<d?K?pbPUbQ=,$QLăU"s8&8TQ36\VrNU+rsP^0#T(S.Iu8COPYF<'2V^U5Z66kQ0UMvIebsScK>7ALa;IBăU"pm_n/;eK/u-Kaj8#s'SX^jTH#Q:J13Jr>Pv>'0#C'8,S*,U06joC%l^l#5:c[KbăU"%*Uf.sQ:-Di-Q?gBKOblQe)$$^I8:]'l8iISuwPgXQI,J'%g'e545$cM5Jtugf]ăU"5ZuBefZHWUm0:JyO[:w3eNWHhrIO-qOS%fd*Te]-MJDuQp_h].n63K9P1;M.N\DăU"pv40MujoA,2JuIQ.Jpu5>]P2p(R?U?iZ4apJQcHKfNUbpM2JUPEJ58ORB*;bWD;ăU"c45soh9__i8JoPI%#zR;l3v8*(Ug7l5#BZ*0t?UHm,mZUP)<1p/>^/3CkFxZ#]$ăU"#]EGY*:9Q(t_YrtFiMmXIWAYp*vJ)HM8b/Shq;;2&dPrxGQ7v:sY,[/'_mZyu;măU"[79?C_bN?G5('FaX445]hSq6E^=VrTt(u>n?XT3Ta?,(Z1p4TW4TAEBn%^zf:>IăU"]OF=Bc;Pt;Tj*irNTqtSu2u5;y(6tvHUVyHuiG7K?C_Bj*n\9_=*Ziw]PhaSwsVăU"PMKEdk1\Y(nfpC*4YP^O2&f)'zwR/rZ+WgFE0&O/dGD1RD2bT1V,zJ_%<o+9&n9ăU"tZ)PA97fo_>T%PGQtQ+^*F(erG5WGBmH4WYI1wuD.C)AfI^7*3c%>iNTN+*OsivăU"lGPEG19]dO?c*f'ffS^LOCSI\*/S/2h1:TiCVgMsiCML_.=E:&%\.2W-id6j)V6ăU"%D9Z3&=zN\DYud7r1,d'sQ2%.7\D9O4%mLI\m8)uMZO7<2d])/9u^Upn$lF6=u3ăU"$*84w;^^2ZK^nB].aKi)98(K\11H9VTjYfuATbTMxPebd1=gc>7<tzaJ<[7>)A(ăU"8^0BKiqS2ya22Z?O=C>ACU;O^,pi_fB$En('B]fVci0$OIKjZoJ=(r0kET;<POBăU"rnJBM+n>xDd^sw3rX</d1^Ko#&W\umeF:>Jpkb0=LSa8(D?pc9.,wJ#'E[&[iN1ăU"0w?-[9_)-;<tbGF:mcLYpikp5yifOc9FGrOW9QV,%XkpL[4co6z9f_WlOF#/GVOăU"0ky'EQfb)8%L<Cou2VL0ez&pHoINBUvRF<%Z:V4&(xz[c&NGLI^\\D(_9Yy^Q^NăU"qAiCS*b^wxGpssmF8.QuLrC9Z&t+Q&$9,%DEgRD7mfeQ-s>BF#tPJfQdt,f9L,PăU".VOP;hD9p#+GSpyeH,o>''u$V9cTXA)UrPrDK9M.V$HBXgNK1)A**L25zHCILtjăU").y+?Gbu5(7DIdhq3LYOgqYmb)XY6[3ci]*E3].F//apL_i;]of.9\OS=(O),Y=ăU"uZgKX2Ik9fS]db7q*o6v5dKfm*2tqr44s//i)Ao,->Wn_k)rDG&PWL-n)rC8&::ăU")07a:%:QP<vJ$*'[>-nqW9EhSFSXum(m2Pm?NhnH-pkm$p?Kcl9FW/-sd*Kl7I-ăU"dr%$_0JtBFupLlb(GDOo6HO'DF/5Il>WA>q?9xA6'^wYg&\v.[K4)$T64si0=F4ăU"2)nHYgYY\T$bb7Srj.cg+I$m2DZGFm3HatRq1[V(q.%>uWfD=#CZ'a??7]gWLY8ăU"XQNc#VNIK.bicxutl?.i86Iv>WZAv==#qdH#I#k5P]%vRuIdbR+oH.G3SFSvgUPăU"ioiP9uu]NW(eYDw-S:d-MMO;jcj3WlonkGpXJU?<91)d$uz'2SAoGQqalk$I8ZNăU"_],.aW1dHToMSRW/sVqhuyxvA1Nh']MvYq*smFT_<%2FSaa73/E)\^g2FGZDxTyăU"M<fGr*H;tUQo'bbo#RMx079EGPb1\t<>Z3rpux4Ds(/ijt7vDox+:1JrX[M,USfăU"n<4#'v1]8L3[WAPM#ug5hfpH-rh\&oT1La[qm44em$Y.58re'Qp-p(>0T59o7;WăU"^g'K?Y*6;ZRjN=XbUw_2RIkOI+WusS2b$DW1<rbp263,pb'P_2SkkOD506*Ss4[ăU"GY]Te5TOgH.t3bf:T*C$SeWKSJhLSP+>1vaC6&aK'JVF+dKD+N[<X,S&Ua'&swLăU"2OU9sL7>qjbIXh<.7C5M\yw#gI&^W]XBmFX\vJ7J+QW,A5laP?Iot4jcOH^5bTBăU"4q=9s2?f2#[]nLd.TBt1eAB\>UP3cvb)h0PnV5Ud&_$hoq7*S,4B:dkuUK$RW'BăU"itVth.LBCYM?h^T[qfV6aryYPrEHeQS$R5cA;nJ3?v_or5V_i2:IK/[+?wk1]C%ăU"KCBRr0q^5W)M?9dm6=XTG5#'ln*?eE1w&ok<.wJ>sJtu=/NHA=Z^4Xn7Dv?K%LGăU"R\;q1Zl0xvtRCA:p*/Gc1h8_o.A&qyG=$s.iW^*U5S0dE-UMrZzK:lIS6<vb<uYăU"7PG$SSm$qj=j4#9b9b<I>KqJQOnCGu<xZxL.Ny2=s;[yBo]qMg7)3?<VCY-8c;TăU"i1]Im$%/Xg.B>.t3D$wvk(tumdAmtG]3U;GAlH^a[II\j_PbUK[a8k.deJJ^FgpăU")9qlQMq*Yxj*X[26bdmY[b1:zgMgqb)EM:XKPseWTAmPiass_-[TFqoChuf'\(aăU"cg$<KIy:<tfR)/i+Y)v68Ga0U8sUoAl\Il)hc?r4CjYtUF/nG?qpf$%pM9fxC<DăU"S=jsm84fuQalk.mUL$hG8aqt9w*c%x=sRV%G0)g4CsKEe;Du[SkSQ0?M/6^N2X9ăU"\G2s;u>W<$XQ'9gI/9VjEjnE7.[=0#eqL]m>d9M6en3juPep:?u3n<?49Ffe%EIăU"4dN:a-m,(e#A^q7P7WYw4Vqiam$lu;>];vyo+'Lv=q_.hs%eogI]i5Z:$RG<=0IăU"ZeVk:gh#(C:DSG]21(KAtm>d*h?f6r1B&1sHxQf=\Aj+8>G02MO+S)rQBMe::GxăU"[6y+-4nbCn30^Um&f(BGgfiOmFqm$-d-Q\u-no<%?$JT'YM7rjfaB'vu&sD,GFbăU"X>45CFh6.FUr<)+LPD-3)f/?+6ISsxLzoaJ47.ZQb>2lp8UGD%Vl<=$FwEEeH/căU"hZ&EHX)8Y9?#q#8[RdDP4&UwFR5WvfVWJx)]_9iG&)+CZG/5ofh<[r./9D5HGA$ăU"IE5SWMAN)h>([i:_Xg(P\O+0$F1:SKj$,2PUS-Q>=1P%-g#xw7<R/MaXlIQ(QMaăU"5q3-Zx,u%p&'9%%9%%#%-%L^GjIJl)h/X%,%%G%>%%/%%%%%%%%%&%%E%%%%%%%ăU"(%)lz(n%VS%gfxu%p&'9%%9%%#%-%7^HjI'4h)?z#0%%s%Q%%.%%%%%%%%%&%%EăU"%%%%,-%%%lfx%nrSg%fxup%*+%%%%%'%.'%>%.%%R8%%%%%ăEND SUBăCLOSE:IF S=221AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               SVGA TARGA IMAGE VIEWER        zapf_dingbat@juno.com          05-15-98 (02:52)       QB, PDS                1081 43550    TGAVIEW.BAS ' This is a SuperVga Targa image viewer, I am able to use this on my 386sxă' that has a Trident 8900 (512k) with a VESA BIOS Version 1.2 tsr resident.ă' It worked charmingly... Alas now I have a Phoenix S3 Vision 864 with twoă' megabytes of display ram and these QuickBASIC SuperVGA Routines says ită' can't find any display modes (BS, I have used 8 other programs and theseă' find everything !). As we all know Vision 864s have VESA BIOS 1.2 supportă' built in. If anybody knows where I can send email to Glenn Stumpff, Authoră' of QBSVGA 3.2 - I'd really appreciate this. I'd like to get an upgrade, oră' find something much better.. anyway this program has internal help - it'să' meant to be used as a command line utility. You need QuickBASIC 4.5 !ă' If you can make sense of all these things feel free to translate this toă' another form of the basic language. Hey as least the VESA detectionă' actually works... only a couple of routines from QBSVGA 3.2 are used, andă' I got the VESA bank switching code from somebody else's submission andă' incorporated it in this and other programs.. My mail address isă' Zapf_DingBat@JUNO.COM - a text only mail service.ăDEFINT A-ZăDECLARE FUNCTION BIN$ (NUM AS LONG)ăDECLARE FUNCTION DPOINT% (XCOORD, YCOORD)ăDECLARE FUNCTION SelectTGAImageMode% (TGAFILE$)ăăDECLARE SUB BSCREEN (MODE, CL, APAGE, VPAGE)ăDECLARE SUB DCLS (HorizMax, VertMax)ăDECLARE SUB DPSET (XCOORD, YCOORD, CL%)ăDECLARE SUB FINDVESA (MODE, HR, VR, NC)ăDECLARE SUB HELP ()ăDECLARE SUB PAL (Act$)ăDECLARE SUB ParseCmdLine (cmd$, Params$(), Found%)ăDECLARE SUB PressAnyKey ()ăDECLARE SUB STDOUT (MESSAGETEXT$)ăDECLARE SUB SwitchBank (NB%)ăDECLARE SUB TGALoad (File$)ăDECLARE SUB WriteSuperVgaRaw (SRWName$)ăDECLARE SUB XBeep (High, Low, Duration)ăă'REGTYPE.BAS - Include file for CALL INTERRUPTăTYPE RegTypeă  AX    AS INTEGERă  BX    AS INTEGERă  CX    AS INTEGERă  DX    AS INTEGERă  BP    AS INTEGERă  SI    AS INTEGERă  DI    AS INTEGERă  flags AS INTEGERă  DS    AS INTEGERă  ES    AS INTEGERăEND TYPEăăTYPE TGAă        Info AS STRING * 1ă        Clr  AS STRING * 1ă        Img  AS STRING * 1ă        Orig AS INTEGERă        Col  AS INTEGERă        Bits AS STRING * 1ă        XVal AS INTEGERă        YVal AS INTEGERă        W    AS INTEGERă        H    AS INTEGERă        Pix  AS STRING * 1ă        Desc AS STRING * 1ăEND TYPEăăCONST TRUE = -1, FALSE = 0ăDIM SHARED Registers AS RegType, DisplayPictureWhileLoading, ApplyEightBPPGScaleăDIM SHARED r(255), g(255), b(255), SixteenMillionColors, ForceGrayScale, ConvertToSRawăDIM SHARED Bank%, Table&(0 TO 1600), HDR AS TGA, Ingraphics, BPP, VesMode, SeeInfoăDIM Params$(1 TO 10)ăăCOMMON SHARED /DEFAULTS/ ACPAGE, DEFLTC, VESSUP, HMAX, VMAX, BVCBL, BITPLANES, BITSPIXELăCOMMON SHARED /VIEWPORT/ VXL, VYL, VXR, VYR, VCOL, VBORDă'$DYNAMICăăCLEAR , 2048ă' Mode listă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 22:  1600 x 1200 x 256ăă' program defaultsă  Hrequest = FALSEă  SixteenMillionColors = FALSEă  ForceGrayScale = FALSEă  DisplayPictureWhileLoading = FALSEă  ApplyEightBPPGScale = FALSEă  ConvertToSRaw = FALSEă  SeeInfo = FALSEăăParseCmdLine COMMAND$, Params$(), NumParams%ă'IF NumParams% = FALSE THEN Help: Noff = TRUEăăFOR II% = 1 TO NumParams%ă  Q$ = Params$(II%)ă  IF LEFT$(Q$, 6) = "-CSRW:" THEN 'This HAS TO BE LAST !!!!!!!!!!ă     SRWN$ = UCASE$(RIGHT$(Q$, LEN(Q$) - 6)): ConvertToSRaw = TRUEă     EXIT FORă     IF SRWN$ = "" THEN STDOUT "You need to specify a conversion filename." + CHR$(10) + CHR$(13): ENDă  END IFă  ă  SELECT CASE Q$ă  CASE "?", "HELP", "-?", "-HELP": HELP: Hrequest = TRUE: EXIT FORă  CASE IS = "-C:16M": SixteenMillionColors = TRUEă  CASE IS = "-GRAYDISPLAY", "-GD": ForceGrayScale = TRUEă  CASE IS = "-DISPLAYPICTUREWHILELOADING", "-DPWL": DisplayPictureWhileLoading = TRUEă  CASE IS = "-A8GS", "-ABP8GS": ApplyEightBPPGScale = TRUEă  CASE IS = "-PI", "-PICINFO": SeeInfo = TRUEă  CASE ELSEă  Filename$ = Q$ăEND SELECTăNEXT II%ăIF Hrequest = TRUE THEN GOTO Term 'bail outăăON ERROR GOTO HandleErrorsăIF Filename$ = "" THENă   STDOUT "You must specify a file name on the command line." + CHR$(10) + CHR$(13)ă   GOTO TermăEND IFăăVesMode = SelectTGAImageMode%(Filename$)ăSELECT CASE VesModeă  CASE -2: GOTO Termă  CASE -3: GOTO Termă  CASE -4ă    STDOUT "The Targa image you want to view is too large for any modes supported." + CHR$(10) + CHR$(13)ă    STDOUT COMMAND$ + CHR$(10) + CHR$(13)ă    STDOUT "has a Height of " + LTRIM$(STR$(HDR.H)) + " pixels and a width of " + LTRIM$(STR$(HDR.H)) + " pixels." + CHR$(10) + CHR$(13)ă    STDOUT "This Targa Image viewer currently only supports these VESA Video Modes:" + CHR$(10) + CHR$(13) + CHR$(10)ă    STDOUT "Width  x  Height x Maximum Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 640   x   400   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 640   x   480   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 800   x   600   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1024   x   768   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1200   x  1024   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1600   x  1200   x   256 Colors" + CHR$(10) + CHR$(13)ă    GOTO Termă  CASE IS = 26ă      FOR Height% = 0 TO 399: Table&(Height%) = Height% * 640&: NEXT Height%ă  CASE IS = 14ă      FOR Height% = 0 TO 479: Table&(Height%) = Height% * 640&: NEXT Height%ă  CASE IS = 16ă      FOR Height% = 0 TO 599: Table&(Height%) = Height% * 800&: NEXT Height%ă  CASE IS = 18ă      FOR Height% = 0 TO 767: Table&(Height%) = Height% * 1024&: NEXT Height%ă  CASE IS = 20ă      FOR Height% = 0 TO 1023: Table&(Height%) = Height% * 1200&: NEXT Height%ă  CASE IS = 22ă      FOR Height% = 0 TO 1199: Table&(Height%) = Height% * 1600&: NEXT Height%ăEND SELECTăBSCREEN VesMode, 0, 0, 0ăIngraphics = TRUEăTGALoad Filename$ăIF ConvertToSRaw = TRUE THENă   WriteSuperVgaRaw SRWN$ăEND IFăXBeep 5, 8, 350ăZX$ = INPUT$(1)ăPAL "FADEOUT"ăBSCREEN 0, 0, 0, 0ăTerm:ăENDăă'256 Gray Scale - if needed (0 to 64)ăGrayTFSC:ăDATA 0,0,0,0,0,0,0,0,0,0,0,0ăDATA 1,1,1,1,1,1,1,1,1,1,1,1ăDATA 2,2,2,2,2,2,2,2,2,2,2,2ăDATA 3,3,3,3,3,3,3,3,3,3,3,3ăDATA 4,4,4,4,4,4,4,4,4,4,4,4ăDATA 5,5,5,5,5,5,5,5,5,5,5,5ăDATA 6,6,6,6,6,6,6,6,6,6,6,6ăDATA 7,7,7,7,7,7,7,7,7,7,7,7ăDATA 8,8,8,8,8,8,8,8,8,8,8,8ăDATA 9,9,9,9,9,9,9,9,9,9,9,9ăDATA 10,10,10,10,10,10,10,10,10,10,10,10ăDATA 11,11,11,11,11,11,11,11,11,11,11,11ăDATA 12,12,12,12,12,12,12,12,12,12,12,12ăDATA 13,13,13,13,13,13,13,13,13,13,13,13ăDATA 14,14,14,14,14,14,14,14,14,14,14,14ăDATA 15,15,15,15,15,15,15,15,15,15,15,15ăDATA 16,16,16,16,16,16,16,16,16,16,16,16ăDATA 17,17,17,17,17,17,17,17,17,17,17,17ăDATA 18,18,18,18,18,18,18,18,18,18,18,18ăDATA 19,19,19,19,19,19,19,19,19,19,19,19ăDATA 20,20,20,20,20,20,20,20,20,20,20,20ăDATA 21,21,21,21,21,21,21,21,21,21,21,21ăDATA 22,22,22,22,22,22,22,22,22,22,22,22ăDATA 23,23,23,23,23,23,23,23,23,23,23,23ăDATA 24,24,24,24,24,24,24,24,24,24,24,24ăDATA 25,25,25,25,25,25,25,25,25,25,25,25ăDATA 26,26,26,26,26,26,26,26,26,26,26,26ăDATA 27,27,27,27,27,27,27,27,27,27,27,27ăDATA 28,28,28,28,28,28,28,28,28,28,28,28ăDATA 29,29,29,29,29,29,29,29,29,29,29,29ăDATA 30,30,30,30,30,30,30,30,30,30,30,30ăDATA 31,31,31,31,31,31,31,31,31,31,31,31ăDATA 32,32,32,32,32,32,32,32,32,32,32,32ăDATA 33,33,33,33,33,33,33,33,33,33,33,33ăDATA 34,34,34,34,34,34,34,34,34,34,34,34ăDATA 35,35,35,35,35,35,35,35,35,35,35,35ăDATA 36,36,36,36,36,36,36,36,36,36,36,36ăDATA 37,37,37,37,37,37,37,37,37,37,37,37ăDATA 38,38,38,38,38,38,38,38,38,38,38,38ăDATA 39,39,39,39,39,39,39,39,39,39,39,39ăDATA 40,40,40,40,40,40,40,40,40,40,40,40ăDATA 41,41,41,41,41,41,41,41,41,41,41,41ăDATA 42,42,42,42,42,42,42,42,42,42,42,42ăDATA 43,43,43,43,43,43,43,43,43,43,43,43ăDATA 44,44,44,44,44,44,44,44,44,44,44,44ăDATA 45,45,45,45,45,45,45,45,45,45,45,45ăDATA 46,46,46,46,46,46,46,46,46,46,46,46ăDATA 47,47,47,47,47,47,47,47,47,47,47,47ăDATA 48,48,48,48,48,48,48,48,48,48,48,48ăDATA 49,49,49,49,49,49,49,49,49,49,49,49ăDATA 50,50,50,50,50,50,50,50,50,50,50,50ăDATA 51,51,51,51,51,51,51,51,51,51,51,51ăDATA 52,52,52,52,52,52,52,52,52,52,52,52ăDATA 53,53,53,53,53,53,53,53,53,53,53,53ăDATA 54,54,54,54,54,54,54,54,54,54,54,54ăDATA 55,55,55,55,55,55,55,55,55,55,55,55ăDATA 56,56,56,56,56,56,56,56,56,56,56,56ăDATA 57,57,57,57,57,57,57,57,57,57,57,57ăDATA 58,58,58,58,58,58,58,58,58,58,58,58ăDATA 59,59,59,59,59,59,59,59,59,59,59,59ăDATA 60,60,60,60,60,60,60,60,60,60,60,60ăDATA 61,61,61,61,61,61,61,61,61,61,61,61ăDATA 62,62,62,62,62,62,62,62,62,62,62,62ăDATA 63,63,63,63,63,63,63,63,63,63,63,63ăăăHandleErrors:ăIF Ingraphics = TRUE THENăPAL "FADEIN"ăPAL "RESTORE"ăEND IFăBSCREEN 0, 0, 0, 0ăCLOSEăSTDOUT "The following error has occurred:" + CHR$(10) + CHR$(13)ăSELECT CASE ERRă  CASE IS = 5: STDOUT "Illegal Function Call." + CHR$(10) + CHR$(13)ă  CASE IS = 6: STDOUT "Math Overflow." + CHR$(10) + CHR$(13)ă  CASE IS = 7: STDOUT "Program Error: Out of memory." + CHR$(10) + CHR$(13)ă               STDOUT "I used up all of the DGROUP space, Try again." + CHR$(10) + CHR$(13)ă  CASE IS = 9: STDOUT "Program Error: Array Subscript out of range." + CHR$(10) + CHR$(13)ă               STDOUT "Upper limit of allocated space exceeded." + CHR$(10) + CHR$(13)ă  CASE IS = 14: STDOUT "Program Error: Out of String Space" + CHR$(10) + CHR$(13)ă  CASE IS = 24: STDOUT "Informative Error: Device timeout" + CHR$(10) + CHR$(13)ă                STDOUT "Turn on your printer or activate `on-line' mode." + CHR$(10) + CHR$(13)ă  CASE IS = 25: STDOUT "Printer Error: Device fault" + CHR$(10) + CHR$(13)ă                STDOUT "I can't talk to your printer or print que." + CHR$(10) + CHR$(13)ă  CASE IS = 27: STDOUT "Printer Error: Out of paper" + CHR$(10) + CHR$(13)ă                STDOUT "Put Paper in your printer." + CHR$(10) + CHR$(13)ă  CASE IS = 52: STDOUT "Program or User Error: Bad File Name or number" + CHR$(10) + CHR$(13)ă                STDOUT "You provided a bad file name or I tried to use a file number that's closed." + CHR$(10) + CHR$(13)ă  CASE IS = 53: STDOUT "FileManager/User input Error: File not found"ă                STDOUT "I cannot find the file you requested." + CHR$(10) + CHR$(13)ă  CASE IS = 54: STDOUT "FileManager/Programmer Error: Bad file mode" + CHR$(10) + CHR$(13)ă                STDOUT "I am unable to read a file properly. Make sure the input file is NOT a" + CHR$(10) + CHR$(13)ă                STDOUT "text file !" + CHR$(10) + CHR$(13)ă  CASE IS = 55: STDOUT "FileManager Error: File already open" + CHR$(10) + CHR$(13)ă                STDOUT "A file was already opened, all files are now closed." + CHR$(10) + CHR$(13)ă  CASE IS = 57: STDOUT "System Fault: Device I/O error" + CHR$(10) + CHR$(13)ă                STDOUT "I can not 'talk' to a specific device." + CHR$(10) + CHR$(13)ă  CASE IS = 58: STDOUT "Informative Error: File already exists" + CHR$(10) + CHR$(13)ă  CASE IS = 59: STDOUT "FileManager Error: Bad record length" + CHR$(10) + CHR$(13)ă                STDOUT "A database record of some sort is not long enough or is too long." + CHR$(10) + CHR$(13)ă  CASE IS = 61: STDOUT "Informative Error: Disk FULL" + CHR$(10) + CHR$(13)ă                STDOUT "Free up some disk space." + CHR$(10) + CHR$(13)ă  CASE IS = 62: STDOUT "FileManager Error: Input past end of file." + CHR$(10) + CHR$(13)ă                STDOUT "Attempt to read beyond the end of current file." + CHR$(10) + CHR$(13)ă  CASE IS = 63: STDOUT "Program Error: Bad record number" + CHR$(10) + CHR$(13)ă                STDOUT "A database record of some sort doesn't exist." + CHR$(10) + CHR$(13)ă  CASE IS = 64: STDOUT "User Error: Bad file name" + CHR$(10) + CHR$(13)ă                STDOUT "You specifically told me to use a file name that is incorrect." + CHR$(10) + CHR$(13)ă  CASE IS = 67: STDOUT "FileManager Fault: Too many files open" + CHR$(10) + CHR$(13)ă                STDOUT "I can't open more files than listed in your CONFIG.SYS file." + CHR$(10) + CHR$(13)ă  CASE IS = 68: STDOUT "System Error: Device UNAVAILABLE" + CHR$(10) + CHR$(13)ă                STDOUT "A user serviceable device is not accessable to the computer." + CHR$(10) + CHR$(13)ă  CASE IS = 71: STDOUT "User or System Error: Disk not Ready" + CHR$(10) + CHR$(13)ă                STDOUT "Insert a diskette in the current drive. (Excepting Hardrives)" + CHR$(10) + CHR$(13)ă  CASE IS = 72: STDOUT "Serious Informative Error: Disk-Media error" + CHR$(10) + CHR$(13)ă                STDOUT "The recordable media surface of the current disk has developed a defect." + CHR$(10) + CHR$(13)ă  CASE IS = 73: STDOUT "Informative Error: Feature unavailable" + CHR$(10) + CHR$(13)ă                STDOUT "An advanced capability is not available within this computer." + CHR$(10) + CHR$(13)ă  CASE IS = 75: STDOUT "FileManager/User input Error: Path/File access error" + CHR$(10) + CHR$(13)ă  CASE IS = 76: STDOUT "FileManager/User input Error: Path not found" + CHR$(10) + CHR$(13)ă                STDOUT "The path to a file is non-existant." + CHR$(10) + CHR$(13)ă  CASE IS = 77: STDOUT "FileManager/User input Error: File doesn't exist." + CHR$(10) + CHR$(13)ă  CASE ELSEă   STDOUT "Error is unprintable. The Errorlevel is" + STR$(ERR) + "." + CHR$(10) + CHR$(13)ăEND SELECTăENDăăREM $STATICăFUNCTION BIN$ (NUM AS LONG)ă'ă'  This is a "functionized" version of code extracted from a more generală' numeric base conversion program by Robert B. Relf, (C) 1984.  This justă' uses the part of Mr. Relf's code that converts decimal to binary.ă'ăDIM x AS INTEGERăNUM = (NUM + 65536) MOD 65536ăBIN1$ = ""ăFOR x = 15 TO 0 STEP -1ăIF NUM >= (2 ^ x) THENăBIN1$ = BIN1$ + "1"ăNUM = NUM - (2 ^ x)ăELSEăBIN1$ = BIN1$ + "0"ăEND IFăNEXT xăBIN1$ = LEFT$(BIN1$, 8) + RIGHT$(BIN1$, 8)ăBIN$ = BIN1$ăEND FUNCTIONăăSUB BSCREEN (MODE, CL, APAGE, VPAGE)ă'ă'  Subroutine BSCREEN emulates the function of QB's SCREEN statement.ă' It uses subroutine FINDVESA to find a video mode supported by a VESAă' bios that corresponds to a "QB-type" mode specified by MODE.  Theă' resolutions for each supported MODE integer are given below.ă'ă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 15:   800 x  600 x  16ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 17:  1024 x  768 x  16ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 19:  1200 x 1024 x  16ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 21:  1600 x 1200 x  16ă'   MODE = 22:  1600 x 1200 x 256ă'   MODE = 23:   132 x   25 x  16 (text)ă'   MODE = 24:   132 x   43 x  16 (text)ă'   MODE = 25:   132 x   50 x  16 (text)ă'ă' These routines should not be used with modes not specified here.  Modeă' 0 is an allowable input; it corresponds to QB's SCREEN 0 and getsă' translated here to bios mode 3.  (Except for more colors, I'm not awareă' of any higher modes, anyway, and why would you want to use theseă' routines with the lower modes?  QB's SCREEN statement will do that.)  Ifă' a mode with the desired resolution and colors cannot be found, a modeă' will still be selected if one can be found with the desired resolutionă' and *more* colors than necessary.ă'ă'  The first four inputs are just as would be used with QB's SCREENă' statement except that CL is the default color to print with, not someă' switch that determines whether color is displayed at all.  Unlike theă' SCREEN statement, all parameters much be specified in the CALL.  If theă' input video mode is the one that is already in effect, BSCREEN can beă' used to simply change default colors or displayed/active pages.  (Youă' might want to use subroutine BCOLOR for the former purpose.)  BSCREENă' should be called before any of the other routines are called.ă'ăDIM CMODE AS INTEGERă'ă'  Store active page and default color in global variables.  (Alias VPAGEă' with VP and make sure its value is valid.)ă'ăACPAGE = APAGE: IF ACPAGE < 0 THEN ACPAGE = 0ăDEFLTC = CL: IF DEFLTC <= 0 THEN DEFLTC = 7ăVP = VPAGE: IF VP < 0 THEN VP = 0ă'ă'  Get current video mode.  If it is same as one being set, no mode changeă' is made.  The routine is just being used to change default colorsă' (subroutine BCOLOR is simpler to use for that purpose) or pages.  (Theă' value of CMODE may get changed after VESA-awareness is determined.)ă'ăRegisters.AX = &HF00ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.AX AND &HFFă'ă'  Set visible page.ă'ăRegisters.AX = CINT(VP) + 1280ăCALL InterruptX(&H10, Registers, Registers)ă'ă'  Make correlation between "QB-type" modes and resolution of bios mode toă' be searched for.  (Set default mode data in case invalid mode was input.)ă'ăHR = 800: VR = 600: NC = 16ăIF MODE = 14 THEN HR = 640: VR = 480ăIF MODE = 15 OR MODE = 16 THEN HR = 800: VR = 600ăIF MODE = 17 OR MODE = 18 THEN HR = 1024: VR = 768ăIF MODE = 19 OR MODE = 20 THEN HR = 1280: VR = 1024ăIF MODE = 21 OR MODE = 22 THEN HR = 1600: VR = 1200ăIF MODE = 23 THEN VR = 25ăIF MODE = 24 THEN VR = 43ăIF MODE = 25 THEN VR = 50ăIF MODE = 26 THEN HR = 640: VR = 400ăIF MODE = 0 OR MODE = 15 OR MODE = 17 OR MODE = 19 OR MODE = 21 OR MODE > 22 THEN NC = 16ăIF MODE = 14 OR MODE = 16 OR MODE = 18 OR MODE = 20 OR MODE = 22 OR MODE = 26 THEN NC = 256ăIF MODE = 23 OR MODE = 24 OR MODE = 25 THEN HR = 132ă'ă'  Define global resolution limits (zero-based) and viewport defaults.ă'ăHMAX = HR - 1: VMAX = VR - 1: VXL = 0: VYL = 0: VXR = HMAX: VYR = VMAXă'ă'  Set VCOL to a negative number so other routines can tell that BVIEWă' wasn't called yet.ă'ăVCOL = -1ăIF MODE <> 0 THENă'ă'  SCREEN is not being reset to text mode.  Find VESA mode with desiredă' resolution.  If FINDVESA can't find a requisite VESA mode, whetheră' because system isn't VESA-aware or other reasons, BMODE is returned asă' -1.  (If system is detected as VESA aware, an "error code" of 0 isă' defined via VESSUP variable.  If VESA cannot be detected, VESSUP is setă' to unity.)  Before using FINDVESA, however, look for overriding biosă' mode definition via DOS environment variable.  (This environmentă' is SET with the syntax "MODE##=bios-mode", where ## is the two-digită' QB-type mode integer that corresponds to bios-mode.)ă'ăQBMODE$ = "MODE" + LTRIM$(RTRIM$(STR$(MODE)))ăEMODE$ = MID$(LTRIM$(ENVIRON$(QBMODE$)), 1, 80)ăBMODE = VAL("&H0" + EMODE$)ă'ă'  In case FINDVESA isn't going to be used to find a VESA video mode oră' it *is* going to be used and in case it fails, set default bit planesă' per pixel and bits per pixel parameters.ă'ăBITPLANES = 1: BITSPIXEL = 8ăIF BMODE = 0 THENă'ă'  "MODE##" environment variable didn't exist for input QB-type mode.ă'ăFINDVESA BMODE, HR, VR, NCă'ă'  Except for text mode 3, there are no bios modes less than 4 that areă' of concern here.  (There aren't likely any below 13h of any importance.ă' I'm just taking into account "wierd" video adapters, such as mine, whichă' will do a hex mode B.)ă'ăIF BMODE >= 4 THENă'ă'  VESA mode was found, hence, system is VESA-aware.  Redetermine currentă' video mode.ă'ăRegisters.AX = &H4F03ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.BXăIF CMODE <> BMODE THENă'ă'  VESA mode was found and it is different from current mode; change videoă' mode.ă'ăRegisters.AX = &H4F02ăRegisters.BX = BMODEăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăELSEă'ă'  VESA mode couldn't be found.  Assume "OEM SVGA" and ask user foră' hexadecimal mode integer that corresponds to desired video mode.  Setă' VESSUP according to value of input bios mode.  (Put screen in standardă' QB text mode so prompt can be seen in case it was already in someă' QB-unreadable graphics screen.)ă'ăRegisters.AX = 3ăCALL InterruptX(&H10, Registers, Registers)ăăRES$ = LTRIM$(RTRIM$(STR$(HR))) + " x " + LTRIM$(RTRIM$(STR$(VR))) + " x "ăRES$ = RES$ + LTRIM$(RTRIM$(STR$(NC)))ăSTDOUT "VESA video card may not support this resolution:" + RES$ + CHR$(10) + CHR$(13) + CHR$(10) + CHR$(13)ăSTDOUT "Type this from DOS and try again:" + CHR$(10) + CHR$(13)ăSTDOUT "SET MODE" + LTRIM$(RTRIM$(STR$(MODE))) + "=(Vesa BIOS mode number in hexadecimal)" + CHR$(10) + CHR$(13)ăENDă'ă'  Video mode is changed regardless of its present state when mode had toă' be prompted for.  (Even if the above text-mode change hadn't occurred,ă' the prompt for the mode needs to be cleared.)ă'ăVESSUP = 1ăRegisters.AX = VAL("&H" + M$)ă'ă'  Use VESA call to set video mode if it is 100h or above.  Otherwise,ă' use standard bios call.ă'ăIF Registers.AX > 255 THENăVESSUP = 0ăRegisters.BX = Registers.AXăRegisters.AX = &H4F02ăEND IFăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăELSEă'ă'  "MODE##" environment variable exists for desired mode.  Set VESSUPă' according to value of bios mode.ă'ăVESSUP = 1: IF BMODE > 255 THEN VESSUP = 0ă'ă'  Re-acquire and test current video mode before changing it.ă'ăIF VESSUP = 1 THENăRegisters.AX = &HF00ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.AX AND &HFFăRegisters.AX = BMODEăELSEăRegisters.AX = &H4F03ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.BXăRegisters.AX = &H4F02ăRegisters.BX = BMODEăEND IFăIF CMODE <> BMODE THENăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăEND IFă'ă'  Global variable BVCBL is normally 0.  BVIEW sets it to 1 just beforeă' calling BLINE to draw a border around the viewport.  (BLINE uses thisă' variable to know not to enforce viewport constraints when BVIEW tries toă' draw a box just outside of the viewport.  (BVIEW resets it to unity whenă' it's finished.)  Define fictitious values for global mouse positionă' variables.ă'ăBVCBL = 0ăELSEă'ă'  SCREEN 0 is being emulated.  Use what should be a standard text modeă' for any SVGA system.  (This mode is also set regardless of whether oră' not the video state is already there.)ă'ăRegisters.AX = 3ăCALL InterruptX(&H10, Registers, Registers)ă'ă'  Just to be safe, make sure QB knows what screen mode it's in.  (Theă' above call to interrupt 10 could probably be skipped, but QB's SCREEN 0ă' by itself doesn't necessarily leave you in the text mode you want whenă' the screen isn't initially in a mode that QB recognizes.)ă'ăEND IFăEND SUBăăSUB DCLS (HorizMax, VertMax)ăFOR VMx = 0 TO VertMaxă FOR HMx = 0 TO HorizMaxă    DPSET HMx, VMx, 0ă NEXT HMxăNEXT VMxăEND SUBăăFUNCTION DPOINT% (XCOORD, YCOORD)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN SwitchBank NewBank%ăDEF SEG = &HA000ăDPOINT% = PEEK((Table&(YCOORD) + XCOORD) MOD 65536)ăDEF SEGăEND FUNCTIONăăSUB DPSET (XCOORD, YCOORD, CL%)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN SwitchBank NewBank%ăDEF SEG = &HA000ăPOKE (Table&(YCOORD) + XCOORD) MOD 65536, CL%ăDEF SEGăEND SUBăăSUB FINDVESA (MODE, HR, VR, NC)ă'ă'  This subroutine returns the VESA bios MODE integer (decimal) that hasă' resolution HR x VR x NC, as input via the parameter list.  If no suchă' mode can be found, MODE is returned as -1.  (If it finds a mode withă' the desired horizontal HR and vertical VR resolution but with more thană' NC colors, the mode is considered valid and is returned in MODE.  (Ită' will first try to find a mode with NC colors.))ă'ă'  To qualify as a valid, the mode must be supported by both hardware andă' bios.  (FINDVESA is usually called by BSCREEN.  There is not much reasonă' to call it directly.)ă'ăDIM VESA(1 TO 64) AS LONG, Byte AS LONG, MD(1 TO 257) AS INTEGER, COLORS(1 TO 256)ăDIM PLANES(1 TO 256)ăSM = VARSEG(VESA(1)): OS = VARPTR(VESA(1))ă'ă'  Set VESSUP to unity in case VESA bios cannot be detected.ă'ăVESSUP = 1ă'ă'  Confirm VESA support and get pointer to list of supported VESA modes.ă'ăRegisters.AX = &H4F00ăRegisters.ES = CINT(SM)ăRegisters.DI = CINT(OS)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SMăT$ = CHR$(PEEK(OS)) + CHR$(PEEK(OS + 1)) + CHR$(PEEK(OS + 2)) + CHR$(PEEK(OS + 3))ăIF T$ <> "VESA" THEN GOTO NOSUPă'ă'  VESA = VESA bios version number.ă'ăVESAFRC = PEEK(OS + 4)ăFIXFRC:ăVESAFRC = VESAFRC / 10ăIF VESAFRC >= 1 THEN GOTO FIXFRCăVESA = PEEK(OS + 5) + VESAFRCăPSM = PEEK(OS + 16) + 256 * PEEK(OS + 17): POF = PEEK(OS + 14) + 256 * PEEK(OS + 15)ă'ă'  Look for video mode that supports desired resolution.ă'ă'  NMODES counts number of modes (possibly with different colors) withă' desired resolution.ă'ăNMODES = 1ăNEWMODE:ăDEF SEG = PSMăMD(NMODES) = PEEK(POF) + 256 * PEEK(POF + 1): POF = POF + 2ă'PRINT PEEK(POF) + 256 * PEEK(POF + 1): SLEEPăIF MD(NMODES) = -1 THEN GOTO NOSUPăRegisters.AX = &H4F01ăRegisters.CX = MD(NMODES)ăRegisters.ES = CINT(SM)ăRegisters.DI = CINT(OS)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SMă'ă'  First byte at segment SM stores "support information" about mode underă' analysis.ă'ăByte = CLNG(PEEK(OS) + 256 * PEEK(OS + 1))ăb$ = LTRIM$(RTRIM$(BIN$(Byte)))ă'ă'  Bits 0 and 2 indicate support (or lack of it) in hardware and BIOS.ă'ăHARD$ = MID$(b$, 16, 1)ăBIOS$ = MID$(b$, 14, 1)ăIF HARD$ = "0" OR BIOS$ = "0" THEN GOTO NEWMODEă'ă'  Bit 4 indicates graphics or text mode.ă'ăGMSW$ = MID$(b$, 12, 1)ă'ă'  Bit 1 indicates the presence of extended information.  If no extendedă' information is available for this mode, it cannot be determined thată' it supports the required HR x VR resolution.ă'ăEXTINF$ = MID$(b$, 15, 1)ăIF EXTINF$ = "0" THEN GOTO NEWMODEă'ă'  Character sizes are needed to correct stored resolution data for someă' VESA bioses.ă'ăHS = PEEK(OS + 22): VS = PEEK(OS + 23)ăHRM = PEEK(OS + 18) + 256 * PEEK(OS + 19): VRM = PEEK(OS + 20) + 256 * PEEK(OS + 21)ăIF VESA < 1.2 THENăIF GMSW$ = "0" THEN HRM = HRM / HS: VRM = VRM / VSăIF (MD(NMODES) >= 0 AND MD(NMODES) <= 6) OR MD(NMODES) = 13 THEN VRM = VRM / 2ăIF MD(NMODES) = 14 OR MD(NMODES) = 19 THEN VRM = VRM / 2ăEND IFăIF HR <> HRM OR VR <> VRM THEN GOTO NEWMODEăCOLORS(NMODES) = 2! ^ CSNG(PEEK(OS + 25))ă'ă'  Get number of bit planes.  (Subroutines BGET AND BPUT need it.  Theyă' also need the number of bits per pixel.  This is actually what was justă' reported by the VESA bios, above.  It will be reobtained from the COLORSă' parameter later.)ă'ăPLANES(NMODES) = PEEK(OS + 24)ă'ă'  Get all modes with required resolution, regardless of color.  (Lateră' on the one with NC colors, if it exists, will be chosen.  (But theă' possibility that the one with the right number of colors will be foundă' first is taken into account.))ă'ăIF COLORS(NMODES) = NC THEN GOTO RETMODEăIF NMODES < 256 THEN NMODES = NMODES + 1: GOTO NEWMODEăRETMODE:ă'ă'  Since VESA was detected, store corresponding error code.ă'ăVESSUP = 0ăFOR I = 1 TO NMODESăK = IăIF COLORS(I) = NC THEN BITSPIXEL = INT(LOG(COLORS(I)) / LOG(2) + .001)ăIF COLORS(I) = NC THEN MODE = CSNG(MD(I)): BITPLANES = PLANES(I): GOTO QUITăNEXT IăFOR I = 1 TO NMODESăK = IăIF COLORS(I) > NC THEN BITSPIXEL = INT(LOG(COLORS(I)) / LOG(2) + .001)ăIF COLORS(I) > NC THEN MODE = CSNG(MD(I)): BITPLANES = PLANES(I): GOTO QUITăNEXT IăNOSUP:ă'ă'  Requisite VESA mode couldn't be found.  Return negative mode value asă' switch for calling routine to recognize that fact.ă'ăMODE = -1ăQUIT:ăDEF SEGăEND SUBăăSUB HELPăSTDOUT "Targa Image viewer Version .7200á" + CHR$(10) + CHR$(13)ăSTDOUT "Command line arguments available are:" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/? or /HELP  - This help text. This switch takes precedent over any parameter." + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/C:16M       - Allow use of Hicolor/Truecolor palette in the Targa image. (If" + CHR$(10) + CHR$(13)ăSTDOUT "               any such palette exists.) Video adapters that only support 256" + CHR$(10) + CHR$(13)ăSTDOUT "               thousand colors will not display a Hicolor/Truecolor Targa" + CHR$(10) + CHR$(13)ăSTDOUT "               image in the right colors!" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/GD          - Force displaying of picture in gray scale. (If the Bits Per" + CHR$(10) + CHR$(13)ăSTDOUT "               Pixel in the image header equals eight then a gray scale" + CHR$(10) + CHR$(13)ăSTDOUT "               palette based on 0 to 63 will be used, otherwise a full" + CHR$(10) + CHR$(13)ăSTDOUT "               two hundred fifty-six gray scale palette will be used (0 to 255)." + CHR$(10) + CHR$(13)ăSTDOUT "/DPWL        - Display picture while it loads, otherwise you see a black screen." + CHR$(10) + CHR$(13)ăSTDOUT "/A8GS        - Apply the 8 BPP gray scale palette to a 24 BPP Targa image." + CHR$(10) + CHR$(13)ăSTDOUT "               This only happens if the image has 24 bits per pixel." + CHR$(10) + CHR$(13)ăSTDOUT "               Recommended for 256k color video adapters. (Takes Priority over" + CHR$(10) + CHR$(13)ăSTDOUT "               'GD' switch when applicable.)" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/PI          - Display picture info for 8 seconds." + CHR$(10) + CHR$(13)ăPressAnyKeyăSTDOUT "/CSRW:Name   - Converts TGA file to a RAW image format, Replace 'Name' with a" + CHR$(10) + CHR$(13)ăSTDOUT "               valid DOS filename, a pathname may be included. *THIS PARAMETER" + CHR$(10) + CHR$(13)ăSTDOUT "               MUST BE THE LAST IN THE COMMAND LINE SEQUENCE !!!!!*" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "Any valid DOS filename that is a Targa image, a pathname may be included." + CHR$(10) + CHR$(13)ăSTDOUT "Images that are eight & twenty-four Bits Per Pixel are supported." + CHR$(10) + CHR$(13)ăSTDOUT "Pictures that don't seen to have palettes in them are displayed in gray scale." + CHR$(10) + CHR$(13)ăSTDOUT "A space must be present between a filename and *any* parameter !" + CHR$(10) + CHR$(13)ăSTDOUT "You can press ESCape to abort loading a picture." + CHR$(10) + CHR$(13) + CHR$(10)ăăSTDOUT "This Targa image viewer was coded by Andrew Gibson, whom in no way is liable" + CHR$(10) + CHR$(13)ăSTDOUT "for any problems that may occur or accidents that may happen to your computer." + CHR$(10) + CHR$(13)ăSTDOUT "I have tested this program to the best of my ability and have not found it to" + CHR$(10) + CHR$(13)ăSTDOUT "be an unstable program. Although this image viewing program supports many" + CHR$(10) + CHR$(13)ăSTDOUT "modes of operation not all of them will be available to you." + CHR$(10) + CHR$(13)ăEND SUBăăSUB PAL (Act$)ă   SELECT CASE UCASE$(Act$)ă   ' "save","fadein","fadeout","restore","blackout"ă      CASE "SAVE"ă         FOR colour% = 0 TO 255ă            OUT &H3C7, colour%        ' Set color to readă            r(colour%) = INP(&H3C9)   ' read red valueă            g(colour%) = INP(&H3C9)   ' read green valueă            b(colour%) = INP(&H3C9)   ' read blue valueă         NEXTă      CASE "FADEIN"ă         DOă            done% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if saved palette not in use.ă               IF red% < r(colour%) THEN red% = red% + 1: done% = 1ă               IF grn% < g(colour%) THEN grn% = grn% + 1: done% = 1ă               IF blu% < b(colour%) THEN blu% = blu% + 1: done% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE done% <> 0ă      CASE "FADEOUT"ă         DOă            visible% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if colors are still visible.ă               IF red% > 0 THEN red% = red% - 1: visible% = 1ă               IF grn% > 0 THEN grn% = grn% - 1: visible% = 1ă               IF blu% > 0 THEN blu% = blu% - 1: visible% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE visible% <> 0ă      CASE "RESTORE"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, r(colour%)     ' write red valueă            OUT &H3C9, g(colour%)     ' write green valueă            OUT &H3C9, b(colour%)     ' write blue valueă         NEXTă      CASE "BLACKOUT"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, 0                ' write red valueă            OUT &H3C9, 0                ' write green valueă            OUT &H3C9, 0                ' write blue valueă         NEXTă   END SELECTăEND SUBăăSUB ParseCmdLine (cmd$, Params$(), Found%)ă'This parsing sub does NOT mistake filenames like "F-14G.ZIP" asă'containing a switch. That's why it looks so big.ă  Found% = FALSE: Sep$ = "-/": Temp$ = LTRIM$(RTRIM$(cmd$)): InParam% = FALSEă  FOR p% = 1 TO LEN(Temp$)ă    C$ = MID$(Temp$, p%, 1)ă    IF InParam% = TRUE THEN 'Inside of a switch?ă      IF INSTR(Sep$, C$) THEN 'Found another switch?ă        'Terminate current switch, then start parsing the next one.ă        GOSUB MakeParam: MID$(Temp$, p%, 1) = LEFT$(Sep$, 1)ă        ParamStart% = p%ă      ELSEIF ASC(C$) = 32 OR ASC(C$) = 9 THENă        GOSUB MakeParam: InParam% = FALSE 'Terminate current switch.ă      END IFă    ELSEIF InParam% = -2 THEN 'Inside of a parameter?ă      IF ASC(C$) = 32 OR ASC(C$) = 9 THEN 'Terminate parameter withă        GOSUB MakeParam: InParam% = FALSE     'space or TAB.ă      END IFă    ELSEă      IF INSTR(Sep$, C$) THEN 'Found start of a switch?ă        'Make sure all switches start with "-".ă        MID$(Temp$, p%, 1) = LEFT$(Sep$, 1): InParam% = TRUEă        ParamStart% = p%ă      ELSEIF ASC(C$) <> 32 AND ASC(C$) <> 9 THEN 'If char isn't aă        InParam% = -2: ParamStart% = p% 'space or TAB it's a parameter.ă      END IFă    END IFă  NEXTă IF InParam% THEN GOSUB MakeParamă  EXIT SUBăMakeParam:ă  Found% = Found% + 1ă  Params$(Found%) = MID$(Temp$, ParamStart%, p% - ParamStart%)ă  IF Found% = UBOUND(Params$) THEN EXIT SUBăRETURNăEND SUBăăSUB PressAnyKeyăSTDOUT "Press any key to continue." + CHR$(13)ăZX$ = INPUT$(1)ăSTDOUT "                          " + CHR$(10) + CHR$(13)ăEND SUBăăFUNCTION SelectTGAImageMode% (TGAFILE$)ă'Test for Vesa Support before AnythingăDIM VESAX(1 TO 64) AS LONGăSM2 = VARSEG(VESAX(1)): OS2 = VARPTR(VESAX(1))ă'  Confirm VESA support and get pointer to list of supported VESA modes.ă'ăRegisters.AX = &H4F00ăRegisters.ES = CINT(SM2)ăRegisters.DI = CINT(OS2)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SM2ăT$ = CHR$(PEEK(OS2)) + CHR$(PEEK(OS2 + 1)) + CHR$(PEEK(OS2 + 2)) + CHR$(PEEK(OS2 + 3))ăDEF SEGăIF T$ <> "VESA" THENă   STDOUT "A Video Card with VESA support *IS REQUIRED* to use this Targa Image viewer." + CHR$(10) + CHR$(13)ă   SelectTGAImageMode = -2: 'No Vesa Supportă   EXIT FUNCTIONăEND IFăERASE VESAXăă'Test Tga FileăON ERROR GOTO HandleErrorsăOPEN (TGAFILE$) FOR BINARY AS #1ăIF LOF(1) = 0 THEN CLOSE : KILL TGAFILE$: Ingraphics = 0: ERROR 77ăGET #1, 1, HDR: CLOSE #1ă'BSCREEN 0, 0, 0, 0ă'PRINT ASC(HDR.Clr), ASC(HDR.Img): SLEEPă'PRINT ASC(HDR.Pix): : SLEEP: STOPăă    IF ASC(HDR.Clr) > 1 OR ASC(HDR.Img) > 2 THENă       BSCREEN 0, 0, 0, 0ă       STDOUT "Possible Reasons why this will not work:" + CHR$(10) + CHR$(13)ă       STDOUT "1) Unable to load TGA file." + CHR$(10) + CHR$(13)ă       STDOUT "2) Image may not be a TGA file." + CHR$(10) + CHR$(13)ă       STDOUT "3) TGA compressed images are not supported." + CHR$(10) + CHR$(13)ă       SelectTGAImageMode = -3: 'Can't load Targa Pictureă       EXIT FUNCTIONă    END IFă    ă     STDOUT "Picture Info" + CHR$(10) + CHR$(13)ă     STDOUT "Filename: " + TGAFILE$ + CHR$(10) + CHR$(13)ă     STDOUT "Width:" + STR$(HDR.W) + " x " + "Height:" + STR$(HDR.H) + CHR$(10) + CHR$(13)ă     STDOUT "Bits per pixel:" + STR$(ASC(HDR.Pix)) + CHR$(10) + CHR$(13)ă     STDOUT "X origin point:" + STR$(HDR.XVal) + " x Y origin point:" + STR$(HDR.YVal) + CHR$(10) + CHR$(13)ă     IF SeeInfo = TRUE THEN SLEEP 8ăă' Get bits per pixel so image doesn't get screwed.ăIF ASC(HDR.Pix) = 24 THEN BPP = 24 ELSE BPP = 8 'Bits per Pixelăă' Mode listă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 22:  1600 x 1200 x 256ăăSTI = FALSE 'Assume Worst Case - picture too bigăIF HDR.W >= 0 AND HDR.W <= 640 AND HDR.H >= 0 AND HDR.H <= 400 THEN SelectTGAImageMode = 26: STI = TRUE         '640x400x256ăIF HDR.W >= 0 AND HDR.W <= 640 AND HDR.H >= 401 AND HDR.H <= 480 THEN SelectTGAImageMode = 14: STI = TRUE       '640x480x256ăIF HDR.W >= 641 AND HDR.W <= 800 AND HDR.H >= 481 AND HDR.H <= 600 THEN SelectTGAImageMode = 16: STI = TRUE     '800x600x256ăIF HDR.W >= 801 AND HDR.W <= 1024 AND HDR.H >= 601 AND HDR.H <= 768 THEN SelectTGAImageMode = 18: STI = TRUE    '1024x768x256ăIF HDR.W >= 1025 AND HDR.W <= 1200 AND HDR.H >= 769 AND HDR.H <= 1024 THEN SelectTGAImageMode = 20: STI = TRUE  '1200x1024x256ăIF HDR.W >= 1201 AND HDR.W <= 1600 AND HDR.H >= 1025 AND HDR.H <= 1200 THEN SelectTGAImageMode = 22: STI = TRUE '1600x1200x256ăăIF STI = FALSE THENă   SelectTGAImageMode = -4: ' Can't match an Image size to an available screen modeăEND IFăEND FUNCTIONăăSUB STDOUT (MESSAGETEXT$) STATICăRegisters.AX = &H4000ăRegisters.BX = &H1ăRegisters.CX = LEN(MESSAGETEXT$)ăRegisters.DS = VARSEG(MESSAGETEXT$)ăRegisters.DX = SADD(MESSAGETEXT$)ăCALL InterruptX(&H21, Registers, Registers)ăEND SUBăăSUB SwitchBank (NB%)ăRegisters.AX = &H4F05ăRegisters.BX = 0ăRegisters.DX = NB%ăCALL InterruptX(&H10, Registers, Registers)ăBank% = NB%ăEND SUBăăSUB TGALoad (File$)ă'OPEN File$ FOR BINARY AS #1: GET #1, 1, HDR: CLOSE #1ă'    IF ASC(HDR.Clr) <> 1 OR ASC(HDR.Img) <> 1 THENă'       BSCREEN 0, 0, 0, 0ă'       STDOUT "Unable to load TGA file." + CHR$(10) + CHR$(13)ă'       EXIT SUBă'    END IFăăON ERROR GOTO HandleErrorsăOPEN File$ FOR BINARY AS #1ă     dcl% = HDR.Col * ASC(HDR.Bits) / 8: dcs& = 19 + ASC(HDR.Info)ă     dce& = dcs& + dcl%ă     SEEK #1, dcs&ă     PB$ = SPACE$(3)ă     FOR reg = 0 TO 255ă        GET #1, , PB$ă       IF SixteenMillionColors = FALSE THENă          Rr = ASC(MID$(PB$, 3, 1)) \ 4: Gg = ASC(MID$(PB$, 2, 1)) \ 4ă          Bb = ASC(MID$(PB$, 1, 1)) \ 4ă       ELSEă          Rr = ASC(MID$(PB$, 3, 1)): Gg = ASC(MID$(PB$, 2, 1))ă          Bb = ASC(MID$(PB$, 1, 1))ă       END IFă       OUT &H3C8, reg: OUT &H3C9, Rr: OUT &H3C9, Gg: OUT &H3C9, Bbă     NEXTă     FOR BlackoutTest = 0 TO 255: OUT &H3C7, BlackoutTestă         Red1 = INP(&H3C9): Blue1 = INP(&H3C9): Green1 = INP(&H3C9)ă         ColorExist& = Red1 + Blue1 + Green1ă     NEXT BlackoutTestă     IF ColorExist& = 0 OR ForceGrayScale = TRUE THENă           IF BPP = 8 THENă              GOSUB LoadLowGrayScaleă           ELSEă              FOR GraySM = 0 TO 255     'Sixteen million Gray scale if neededă                 OUT &H3C8, GraySM      ' Set color to writeă                 OUT &H3C9, GraySM      ' write red valueă                 OUT &H3C9, GraySM      ' write green valueă                 OUT &H3C9, GraySM      ' write blue valueă              NEXT GraySMă           END IFă     END IFă    ă     IF BPP = 24 AND ApplyEightBPPGScale = TRUE THENă        GOSUB LoadLowGrayScaleă     END IFă    ă     PAL "SAVE"ă     IF DisplayPictureWhileLoading = FALSE THENă        PAL "BLACKOUT"ă     END IFă    ă     SEEK #1, dce&ă     IF BPP = 24 THEN T$ = SPACE$(3) ELSE T$ = SPACE$(1)ă     FOR YY = 0 TO HDR.H - 1ă     FOR XX = 0 TO HDR.W - 1ă         GET #1, , T$ă         IF BPP = 24 THENă           IF BPP = 24 AND ApplyEightBPPGScale = TRUE THENă             ByteColor& = ASC(MID$(T$, 3, 1)) \ 3 + ASC(MID$(T$, 2, 1)) \ 3 + ASC(MID$(T$, 1, 1)) \ 3ă           ELSEă             ByteColor& = ASC(MID$(T$, 3, 1)) \ 3 + ASC(MID$(T$, 2, 1)) \ 3 + ASC(MID$(T$, 1, 1)) \ 3ă           END IFă         IF ByteColor& > 32767 THEN ByteColor& = ByteColor& \ 2ă         'STDOUT STR$(ByteColor)ă         ELSEă         ByteColor& = ASC(T$)ă         END IFă         DPSET XX, YY, CINT(ByteColor&)ă         Abort$ = INKEY$ă         IF Abort$ = CHR$(27) THENă            CLOSEă            BSCREEN 0, 0, 0, 0ă            STDOUT "TGA image loading aborted !" + CHR$(10) + CHR$(13)ă            ENDă         END IFă     NEXT XXă     NEXT YYă     IF DisplayPictureWhileLoading = FALSE THENă        PAL "FADEIN"ă     END IFăCLOSE #1ăEXIT SUBăăLoadLowGrayScale:ăRESTORE GrayTFSCăFOR GrayTFS = 0 TO 255ăREAD Red2, Blue2, Green2ăOUT &H3C8, GrayTFS     ' Set color to writeăOUT &H3C9, Red2        ' write red valueăOUT &H3C9, Green2      ' write green valueăOUT &H3C9, Blue2        ' write blue valueăNEXT GrayTFSăRETURNăEND SUBăăSUB WriteSuperVgaRaw (SRWName$)ăON ERROR GOTO HandleErrorsăOPEN SRWName$ FOR OUTPUT AS #1ăPRINT #1, "SuperVGA_TGA_viewerSuperRWformat";ăFOR PalSave = 0 TO 255ă            OUT &H3C7, PalSave    ' Set color to readă            PRINT #1, CHR$(INP(&H3C9));  ' read red valueă            PRINT #1, CHR$(INP(&H3C9));  ' read green valueă            PRINT #1, CHR$(INP(&H3C9));  ' read blue valueăNEXT PalSaveă' Mode listă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 22:  1600 x 1200 x 256ăSELECT CASE VesModeăCASE IS = 26: H = 639: V = 399ăCASE IS = 14: H = 639: V = 479ăCASE IS = 16: H = 799: V = 599ăCASE IS = 18: H = 1023: V = 767ăCASE IS = 20: H = 1199: V = 1023ăCASE IS = 22: H = 1599: V = 1199ăEND SELECTăFOR VPIX = 0 TO VăFOR HPIX = 0 TO HăPIXELCOLOR = DPOINT(HPIX, VPIX)ăPRINT #1, CHR$(PIXELCOLOR);ăNEXT HPIX, VPIXăCLOSEăEND SUBăăSUB XBeep (High, Low, Duration) STATICăOUT 97, INP(97) OR &H3: OUT 67, 182ăOUT 66, High: OUT 66, LowăFOR Z! = 0 TO Duration: NEXT Z!ăOUT 97, INP(97) AND &HFCăEND SUBăAndrew S. Gibson               SVGA RAW IMAGE VIEWER          zapf_dingbat@juno.com          05-15-98 (02:52)       QB, PDS                1136 49770    RAWVIEW.BAS ' This is a SuperVga Raw image viewer, I am able to use this on my 386sxă' that has a Trident 8900 (512k) with a VESA BIOS Version 1.2 tsr resident.ă' It worked charmingly... Alas now I have a Phoenix S3 Vision 864 with twoă' megabytes of display ram and these QuickBASIC SuperVGA Routines says ită' can't find any display modes (BS, I have used 8 other programs and theseă' find everything !). As we all know Vision 864s have VESA BIOS 1.2 supportă' built in. If anybody knows where I can send email to Glenn Stumpff, Authoră' of QBSVGA 3.2 - I'd really appreciate this. I'd like to get an upgrade, oră' find something much better.. anyway this program has internal help - it'să' meant to be used as a command line utility. You need QuickBASIC 4.5 !ă' If you can make sense of all these things feel free to translate this toă' another form of the basic language. Hey as least the VESA detectionă' actually works... only a couple of routines from QBSVGA 3.2 are used, andă' I got the VESA bank switching code from somebody else's submission andă' incorporated it in this and other programs.. My mail address isă' Zapf_DingBat@JUNO.COM - a text only mail service.ăDEFINT A-ZăDECLARE FUNCTION BIN$ (NUM AS LONG)ăDECLARE FUNCTION DPOINT% (XCOORD, YCOORD)ăDECLARE FUNCTION SelectRAWImageMode% (RAWFILE$)ăăDECLARE SUB BSCREEN (MODE, CL, APAGE, VPAGE)ăDECLARE SUB DCLS (HorizMax, VertMax)ăDECLARE SUB DPSET (XCOORD, YCOORD, CL%)ăDECLARE SUB FINDVESA (MODE, HR, VR, NC)ăDECLARE SUB HELP ()ăDECLARE SUB PAL (Act$)ăDECLARE SUB ParseCmdLine (cmd$, Params$(), Found%)ăDECLARE SUB PressAnyKey ()ăDECLARE SUB STDOUT (MESSAGETEXT$)ăDECLARE SUB SwitchBank (NB%)ăDECLARE SUB RAWLoad (File$)ăDECLARE SUB XBeep (High, Low, Duration)ăă'REGTYPE.BAS - Include file for CALL INTERRUPTăTYPE RegTypeă  AX    AS INTEGERă  BX    AS INTEGERă  CX    AS INTEGERă  DX    AS INTEGERă  BP    AS INTEGERă  SI    AS INTEGERă  DI    AS INTEGERă  flags AS INTEGERă  DS    AS INTEGERă  ES    AS INTEGERăEND TYPEăăCONST TRUE = -1, FALSE = 0ăDIM SHARED Registers AS RegType, DisplayPictureWhileLoading, ApplyEightBPPGScaleăDIM SHARED r(255), g(255), b(255), ForceGrayScale, AdjustTFS, ForceHicolorGrayScaleăDIM SHARED Bank%, Table&(0 TO 1600), Ingraphics, VesMode, RawHeight&, RawWidth&, SeeInfoăDIM Params$(1 TO 10)ăăCOMMON SHARED /DEFAULTS/ ACPAGE, DEFLTC, VESSUP, HMAX, VMAX, BVCBL, BITPLANES, BITSPIXELăCOMMON SHARED /VIEWPORT/ VXL, VYL, VXR, VYR, VCOL, VBORDă'$DYNAMICăăCLEAR , 2048ă' Mode listă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 22:  1600 x 1200 x 256ăă' program defaultsă  ApplyEightBPPGScale = FALSEă  DisplayPictureWhileLoading = FALSEă  ForceGrayScale = FALSEă  ForceHicolorGrayScale = FALSEă  Hrequest = FALSEă  AdjustTFS = FALSEă  SeeInfo = FALSEăăParseCmdLine COMMAND$, Params$(), NumParams%ă'IF NumParams% = FALSE THEN Help: Noff = TRUEăăFOR II% = 1 TO NumParams%ă  Q$ = Params$(II%)ă  SELECT CASE Q$ă  CASE "?", "HELP", "-?", "-HELP": HELP: Hrequest = TRUE: EXIT FORă  CASE IS = "-A8GS", "-ABP8GS": ApplyEightBPPGScale = TRUEă  CASE IS = "-AJ256", "-ADJUSTFOR256": AdjustTFS = TRUEă  CASE IS = "-DISPLAYPICTUREWHILELOADING", "-DPWL": DisplayPictureWhileLoading = TRUEă  CASE IS = "-GRAYDISPLAY", "-GD": ForceGrayScale = TRUEă  CASE IS = "-FHGS", "-FORCEHICOLORGRAYSCALE": ForceHicolorGrayScale = TRUEă  CASE IS = "-PI", "-PICINFO": SeeInfo = TRUEă  CASE ELSEă  Filename$ = Q$ăEND SELECTăNEXT II%ăIF Hrequest = TRUE THEN GOTO Term 'bail outăăON ERROR GOTO HandleErrorsăIF Filename$ = "" THENă   STDOUT "You must specify a file name on the command line." + CHR$(10) + CHR$(13)ă   GOTO TermăEND IFăăVesMode = SelectRAWImageMode%(Filename$)ăSELECT CASE VesModeă  CASE -2: GOTO Termă  CASE -3: GOTO Termă  CASE -4ă    STDOUT Filename$ + CHR$(10) + CHR$(13)ă    STDOUT "The Raw image you want to view is too large for any modes supported." + CHR$(10) + CHR$(13)ă    'STDOUT "Width of " + LTRIM$(STR$(RawWidth&)) + " pixels and has a Height of " + LTRIM$(STR$(RawHeight&)) + " pixels." + CHR$(10) + CHR$(13)ă    STDOUT "This Raw Image viewer currently only supports these VESA Video Modes:" + CHR$(10) + CHR$(13) + CHR$(10)ă    STDOUT "Width  x  Height x Maximum Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 640   x   400   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 640   x   480   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT " 800   x   600   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1024   x   768   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1200   x  1024   x   256 Colors" + CHR$(10) + CHR$(13)ă    STDOUT "1600   x  1200   x   256 Colors" + CHR$(10) + CHR$(13)ă    GOTO Termă  CASE IS = 26ă      FOR Height% = 0 TO 399: Table&(Height%) = Height% * 640&: NEXT Height%ă  CASE IS = 14ă      FOR Height% = 0 TO 479: Table&(Height%) = Height% * 640&: NEXT Height%ă  CASE IS = 16ă      FOR Height% = 0 TO 599: Table&(Height%) = Height% * 800&: NEXT Height%ă  CASE IS = 18ă      FOR Height% = 0 TO 767: Table&(Height%) = Height% * 1024&: NEXT Height%ă  CASE IS = 20ă      FOR Height% = 0 TO 1023: Table&(Height%) = Height% * 1200&: NEXT Height%ă  CASE IS = 22ă      FOR Height% = 0 TO 1199: Table&(Height%) = Height% * 1600&: NEXT Height%ăEND SELECTăBSCREEN VesMode, 0, 0, 0ăIngraphics = TRUEăRAWLoad Filename$ăXBeep 5, 8, 350ăZX$ = INPUT$(1)ăPAL "FADEOUT"ăBSCREEN 0, 0, 0, 0ăTerm:ăENDăă'256 Gray Scale - if needed (0 to 64)ăGrayTFSC:ăDATA 0,0,0,0,0,0,0,0,0,0,0,0ăDATA 1,1,1,1,1,1,1,1,1,1,1,1ăDATA 2,2,2,2,2,2,2,2,2,2,2,2ăDATA 3,3,3,3,3,3,3,3,3,3,3,3ăDATA 4,4,4,4,4,4,4,4,4,4,4,4ăDATA 5,5,5,5,5,5,5,5,5,5,5,5ăDATA 6,6,6,6,6,6,6,6,6,6,6,6ăDATA 7,7,7,7,7,7,7,7,7,7,7,7ăDATA 8,8,8,8,8,8,8,8,8,8,8,8ăDATA 9,9,9,9,9,9,9,9,9,9,9,9ăDATA 10,10,10,10,10,10,10,10,10,10,10,10ăDATA 11,11,11,11,11,11,11,11,11,11,11,11ăDATA 12,12,12,12,12,12,12,12,12,12,12,12ăDATA 13,13,13,13,13,13,13,13,13,13,13,13ăDATA 14,14,14,14,14,14,14,14,14,14,14,14ăDATA 15,15,15,15,15,15,15,15,15,15,15,15ăDATA 16,16,16,16,16,16,16,16,16,16,16,16ăDATA 17,17,17,17,17,17,17,17,17,17,17,17ăDATA 18,18,18,18,18,18,18,18,18,18,18,18ăDATA 19,19,19,19,19,19,19,19,19,19,19,19ăDATA 20,20,20,20,20,20,20,20,20,20,20,20ăDATA 21,21,21,21,21,21,21,21,21,21,21,21ăDATA 22,22,22,22,22,22,22,22,22,22,22,22ăDATA 23,23,23,23,23,23,23,23,23,23,23,23ăDATA 24,24,24,24,24,24,24,24,24,24,24,24ăDATA 25,25,25,25,25,25,25,25,25,25,25,25ăDATA 26,26,26,26,26,26,26,26,26,26,26,26ăDATA 27,27,27,27,27,27,27,27,27,27,27,27ăDATA 28,28,28,28,28,28,28,28,28,28,28,28ăDATA 29,29,29,29,29,29,29,29,29,29,29,29ăDATA 30,30,30,30,30,30,30,30,30,30,30,30ăDATA 31,31,31,31,31,31,31,31,31,31,31,31ăDATA 32,32,32,32,32,32,32,32,32,32,32,32ăDATA 33,33,33,33,33,33,33,33,33,33,33,33ăDATA 34,34,34,34,34,34,34,34,34,34,34,34ăDATA 35,35,35,35,35,35,35,35,35,35,35,35ăDATA 36,36,36,36,36,36,36,36,36,36,36,36ăDATA 37,37,37,37,37,37,37,37,37,37,37,37ăDATA 38,38,38,38,38,38,38,38,38,38,38,38ăDATA 39,39,39,39,39,39,39,39,39,39,39,39ăDATA 40,40,40,40,40,40,40,40,40,40,40,40ăDATA 41,41,41,41,41,41,41,41,41,41,41,41ăDATA 42,42,42,42,42,42,42,42,42,42,42,42ăDATA 43,43,43,43,43,43,43,43,43,43,43,43ăDATA 44,44,44,44,44,44,44,44,44,44,44,44ăDATA 45,45,45,45,45,45,45,45,45,45,45,45ăDATA 46,46,46,46,46,46,46,46,46,46,46,46ăDATA 47,47,47,47,47,47,47,47,47,47,47,47ăDATA 48,48,48,48,48,48,48,48,48,48,48,48ăDATA 49,49,49,49,49,49,49,49,49,49,49,49ăDATA 50,50,50,50,50,50,50,50,50,50,50,50ăDATA 51,51,51,51,51,51,51,51,51,51,51,51ăDATA 52,52,52,52,52,52,52,52,52,52,52,52ăDATA 53,53,53,53,53,53,53,53,53,53,53,53ăDATA 54,54,54,54,54,54,54,54,54,54,54,54ăDATA 55,55,55,55,55,55,55,55,55,55,55,55ăDATA 56,56,56,56,56,56,56,56,56,56,56,56ăDATA 57,57,57,57,57,57,57,57,57,57,57,57ăDATA 58,58,58,58,58,58,58,58,58,58,58,58ăDATA 59,59,59,59,59,59,59,59,59,59,59,59ăDATA 60,60,60,60,60,60,60,60,60,60,60,60ăDATA 61,61,61,61,61,61,61,61,61,61,61,61ăDATA 62,62,62,62,62,62,62,62,62,62,62,62ăDATA 63,63,63,63,63,63,63,63,63,63,63,63ăăăHandleErrors:ăIF Ingraphics = TRUE THENăPAL "FADEIN"ăPAL "RESTORE"ăEND IFăBSCREEN 0, 0, 0, 0ăCLOSEăSTDOUT "The following error has occurred:" + CHR$(10) + CHR$(13)ăSELECT CASE ERRă  CASE IS = 5: STDOUT "Illegal Function Call." + CHR$(10) + CHR$(13)ă  CASE IS = 6: STDOUT "Math Overflow." + CHR$(10) + CHR$(13)ă  CASE IS = 7: STDOUT "Program Error: Out of memory." + CHR$(10) + CHR$(13)ă               STDOUT "I used up all of the DGROUP space, Try again." + CHR$(10) + CHR$(13)ă  CASE IS = 9: STDOUT "Program Error: Array Subscript out of range." + CHR$(10) + CHR$(13)ă               STDOUT "Upper limit of allocated space exceeded." + CHR$(10) + CHR$(13)ă  CASE IS = 14: STDOUT "Program Error: Out of String Space" + CHR$(10) + CHR$(13)ă  CASE IS = 24: STDOUT "Informative Error: Device timeout" + CHR$(10) + CHR$(13)ă                STDOUT "Turn on your printer or activate `on-line' mode." + CHR$(10) + CHR$(13)ă  CASE IS = 25: STDOUT "Printer Error: Device fault" + CHR$(10) + CHR$(13)ă                STDOUT "I can't talk to your printer or print que." + CHR$(10) + CHR$(13)ă  CASE IS = 27: STDOUT "Printer Error: Out of paper" + CHR$(10) + CHR$(13)ă                STDOUT "Put Paper in your printer." + CHR$(10) + CHR$(13)ă  CASE IS = 52: STDOUT "Program or User Error: Bad File Name or number" + CHR$(10) + CHR$(13)ă                STDOUT "You provided a bad file name or I tried to use a file number that's closed." + CHR$(10) + CHR$(13)ă  CASE IS = 53: STDOUT "FileManager/User input Error: File not found"ă                STDOUT "I cannot find the file you requested." + CHR$(10) + CHR$(13)ă  CASE IS = 54: STDOUT "FileManager/Programmer Error: Bad file mode" + CHR$(10) + CHR$(13)ă                STDOUT "I am unable to read a file properly. Make sure the input file is NOT a" + CHR$(10) + CHR$(13)ă                STDOUT "text file !" + CHR$(10) + CHR$(13)ă  CASE IS = 55: STDOUT "FileManager Error: File already open" + CHR$(10) + CHR$(13)ă                STDOUT "A file was already opened, all files are now closed." + CHR$(10) + CHR$(13)ă  CASE IS = 57: STDOUT "System Fault: Device I/O error" + CHR$(10) + CHR$(13)ă                STDOUT "I can not 'talk' to a specific device." + CHR$(10) + CHR$(13)ă  CASE IS = 58: STDOUT "Informative Error: File already exists" + CHR$(10) + CHR$(13)ă  CASE IS = 59: STDOUT "FileManager Error: Bad record length" + CHR$(10) + CHR$(13)ă                STDOUT "A database record of some sort is not long enough or is too long." + CHR$(10) + CHR$(13)ă  CASE IS = 61: STDOUT "Informative Error: Disk FULL" + CHR$(10) + CHR$(13)ă                STDOUT "Free up some disk space." + CHR$(10) + CHR$(13)ă  CASE IS = 62: STDOUT "FileManager Error: Input past end of file." + CHR$(10) + CHR$(13)ă                STDOUT "Attempt to read beyond the end of current file." + CHR$(10) + CHR$(13)ă  CASE IS = 63: STDOUT "Program Error: Bad record number" + CHR$(10) + CHR$(13)ă                STDOUT "A database record of some sort doesn't exist." + CHR$(10) + CHR$(13)ă  CASE IS = 64: STDOUT "User Error: Bad file name" + CHR$(10) + CHR$(13)ă                STDOUT "You specifically told me to use a file name that is incorrect." + CHR$(10) + CHR$(13)ă  CASE IS = 67: STDOUT "FileManager Fault: Too many files open" + CHR$(10) + CHR$(13)ă                STDOUT "I can't open more files than listed in your CONFIG.SYS file." + CHR$(10) + CHR$(13)ă  CASE IS = 68: STDOUT "System Error: Device UNAVAILABLE" + CHR$(10) + CHR$(13)ă                STDOUT "A user serviceable device is not accessable to the computer." + CHR$(10) + CHR$(13)ă  CASE IS = 71: STDOUT "User or System Error: Disk not Ready" + CHR$(10) + CHR$(13)ă                STDOUT "Insert a diskette in the current drive. (Excepting Hardrives)" + CHR$(10) + CHR$(13)ă  CASE IS = 72: STDOUT "Serious Informative Error: Disk-Media error" + CHR$(10) + CHR$(13)ă                STDOUT "The recordable media surface of the current disk has developed a defect." + CHR$(10) + CHR$(13)ă  CASE IS = 73: STDOUT "Informative Error: Feature unavailable" + CHR$(10) + CHR$(13)ă                STDOUT "An advanced capability is not available within this computer." + CHR$(10) + CHR$(13)ă  CASE IS = 75: STDOUT "FileManager/User input Error: Path/File access error" + CHR$(10) + CHR$(13)ă  CASE IS = 76: STDOUT "FileManager/User input Error: Path not found" + CHR$(10) + CHR$(13)ă                STDOUT "The path to a file is non-existant." + CHR$(10) + CHR$(13)ă  CASE IS = 77: STDOUT "FileManager/User input Error: File doesn't exist." + CHR$(10) + CHR$(13)ă  CASE ELSEă   STDOUT "Error is unprintable. The Errorlevel is" + STR$(ERR) + "." + CHR$(10) + CHR$(13)ăEND SELECTăENDăăREM $STATICăFUNCTION BIN$ (NUM AS LONG)ă'ă'  This is a "functionized" version of code extracted from a more generală' numeric base conversion program by Robert B. Relf, (C) 1984.  This justă' uses the part of Mr. Relf's code that converts decimal to binary.ă'ăDIM x AS INTEGERăNUM = (NUM + 65536) MOD 65536ăBIN1$ = ""ăFOR x = 15 TO 0 STEP -1ăIF NUM >= (2 ^ x) THENăBIN1$ = BIN1$ + "1"ăNUM = NUM - (2 ^ x)ăELSEăBIN1$ = BIN1$ + "0"ăEND IFăNEXT xăBIN1$ = LEFT$(BIN1$, 8) + RIGHT$(BIN1$, 8)ăBIN$ = BIN1$ăEND FUNCTIONăăSUB BSCREEN (MODE, CL, APAGE, VPAGE)ă'ă'  Subroutine BSCREEN emulates the function of QB's SCREEN statement.ă' It uses subroutine FINDVESA to find a video mode supported by a VESAă' bios that corresponds to a "QB-type" mode specified by MODE.  Theă' resolutions for each supported MODE integer are given below.ă'ă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 15:   800 x  600 x  16ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 17:  1024 x  768 x  16ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 19:  1200 x 1024 x  16ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 21:  1600 x 1200 x  16ă'   MODE = 22:  1600 x 1200 x 256ă'   MODE = 23:   132 x   25 x  16 (text)ă'   MODE = 24:   132 x   43 x  16 (text)ă'   MODE = 25:   132 x   50 x  16 (text)ă'ă' These routines should not be used with modes not specified here.  Modeă' 0 is an allowable input; it corresponds to QB's SCREEN 0 and getsă' translated here to bios mode 3.  (Except for more colors, I'm not awareă' of any higher modes, anyway, and why would you want to use theseă' routines with the lower modes?  QB's SCREEN statement will do that.)  Ifă' a mode with the desired resolution and colors cannot be found, a modeă' will still be selected if one can be found with the desired resolutionă' and *more* colors than necessary.ă'ă'  The first four inputs are just as would be used with QB's SCREENă' statement except that CL is the default color to print with, not someă' switch that determines whether color is displayed at all.  Unlike theă' SCREEN statement, all parameters much be specified in the CALL.  If theă' input video mode is the one that is already in effect, BSCREEN can beă' used to simply change default colors or displayed/active pages.  (Youă' might want to use subroutine BCOLOR for the former purpose.)  BSCREENă' should be called before any of the other routines are called.ă'ăDIM CMODE AS INTEGERă'ă'  Store active page and default color in global variables.  (Alias VPAGEă' with VP and make sure its value is valid.)ă'ăACPAGE = APAGE: IF ACPAGE < 0 THEN ACPAGE = 0ăDEFLTC = CL: IF DEFLTC <= 0 THEN DEFLTC = 7ăVP = VPAGE: IF VP < 0 THEN VP = 0ă'ă'  Get current video mode.  If it is same as one being set, no mode changeă' is made.  The routine is just being used to change default colorsă' (subroutine BCOLOR is simpler to use for that purpose) or pages.  (Theă' value of CMODE may get changed after VESA-awareness is determined.)ă'ăRegisters.AX = &HF00ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.AX AND &HFFă'ă'  Set visible page.ă'ăRegisters.AX = CINT(VP) + 1280ăCALL InterruptX(&H10, Registers, Registers)ă'ă'  Make correlation between "QB-type" modes and resolution of bios mode toă' be searched for.  (Set default mode data in case invalid mode was input.)ă'ăHR = 800: VR = 600: NC = 16ăIF MODE = 14 THEN HR = 640: VR = 480ăIF MODE = 15 OR MODE = 16 THEN HR = 800: VR = 600ăIF MODE = 17 OR MODE = 18 THEN HR = 1024: VR = 768ăIF MODE = 19 OR MODE = 20 THEN HR = 1280: VR = 1024ăIF MODE = 21 OR MODE = 22 THEN HR = 1600: VR = 1200ăIF MODE = 23 THEN VR = 25ăIF MODE = 24 THEN VR = 43ăIF MODE = 25 THEN VR = 50ăIF MODE = 26 THEN HR = 640: VR = 400ăIF MODE = 0 OR MODE = 15 OR MODE = 17 OR MODE = 19 OR MODE = 21 OR MODE > 22 THEN NC = 16ăIF MODE = 14 OR MODE = 16 OR MODE = 18 OR MODE = 20 OR MODE = 22 OR MODE = 26 THEN NC = 256ăIF MODE = 23 OR MODE = 24 OR MODE = 25 THEN HR = 132ă'ă'  Define global resolution limits (zero-based) and viewport defaults.ă'ăHMAX = HR - 1: VMAX = VR - 1: VXL = 0: VYL = 0: VXR = HMAX: VYR = VMAXă'ă'  Set VCOL to a negative number so other routines can tell that BVIEWă' wasn't called yet.ă'ăVCOL = -1ăIF MODE <> 0 THENă'ă'  SCREEN is not being reset to text mode.  Find VESA mode with desiredă' resolution.  If FINDVESA can't find a requisite VESA mode, whetheră' because system isn't VESA-aware or other reasons, BMODE is returned asă' -1.  (If system is detected as VESA aware, an "error code" of 0 isă' defined via VESSUP variable.  If VESA cannot be detected, VESSUP is setă' to unity.)  Before using FINDVESA, however, look for overriding biosă' mode definition via DOS environment variable.  (This environmentă' is SET with the syntax "MODE##=bios-mode", where ## is the two-digită' QB-type mode integer that corresponds to bios-mode.)ă'ăQBMODE$ = "MODE" + LTRIM$(RTRIM$(STR$(MODE)))ăEMODE$ = MID$(LTRIM$(ENVIRON$(QBMODE$)), 1, 80)ăBMODE = VAL("&H0" + EMODE$)ă'ă'  In case FINDVESA isn't going to be used to find a VESA video mode oră' it *is* going to be used and in case it fails, set default bit planesă' per pixel and bits per pixel parameters.ă'ăBITPLANES = 1: BITSPIXEL = 8ăIF BMODE = 0 THENă'ă'  "MODE##" environment variable didn't exist for input QB-type mode.ă'ăFINDVESA BMODE, HR, VR, NCă'ă'  Except for text mode 3, there are no bios modes less than 4 that areă' of concern here.  (There aren't likely any below 13h of any importance.ă' I'm just taking into account "wierd" video adapters, such as mine, whichă' will do a hex mode B.)ă'ăIF BMODE >= 4 THENă'ă'  VESA mode was found, hence, system is VESA-aware.  Redetermine currentă' video mode.ă'ăRegisters.AX = &H4F03ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.BXăIF CMODE <> BMODE THENă'ă'  VESA mode was found and it is different from current mode; change videoă' mode.ă'ăRegisters.AX = &H4F02ăRegisters.BX = BMODEăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăELSEă'ă'  VESA mode couldn't be found.  Assume "OEM SVGA" and ask user foră' hexadecimal mode integer that corresponds to desired video mode.  Setă' VESSUP according to value of input bios mode.  (Put screen in standardă' QB text mode so prompt can be seen in case it was already in someă' QB-unreadable graphics screen.)ă'ăRegisters.AX = 3ăCALL InterruptX(&H10, Registers, Registers)ăăRES$ = LTRIM$(RTRIM$(STR$(HR))) + " x " + LTRIM$(RTRIM$(STR$(VR))) + " x "ăRES$ = RES$ + LTRIM$(RTRIM$(STR$(NC)))ăSTDOUT "VESA video card may not support this resolution:" + RES$ + CHR$(10) + CHR$(13) + CHR$(10) + CHR$(13)ăSTDOUT "Type this from DOS and try again:" + CHR$(10) + CHR$(13)ăSTDOUT "SET MODE" + LTRIM$(RTRIM$(STR$(MODE))) + "=(Vesa BIOS mode number in hexadecimal)" + CHR$(10) + CHR$(13)ăENDă'ă'  Video mode is changed regardless of its present state when mode had toă' be prompted for.  (Even if the above text-mode change hadn't occurred,ă' the prompt for the mode needs to be cleared.)ă'ăVESSUP = 1ăRegisters.AX = VAL("&H" + M$)ă'ă'  Use VESA call to set video mode if it is 100h or above.  Otherwise,ă' use standard bios call.ă'ăIF Registers.AX > 255 THENăVESSUP = 0ăRegisters.BX = Registers.AXăRegisters.AX = &H4F02ăEND IFăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăELSEă'ă'  "MODE##" environment variable exists for desired mode.  Set VESSUPă' according to value of bios mode.ă'ăVESSUP = 1: IF BMODE > 255 THEN VESSUP = 0ă'ă'  Re-acquire and test current video mode before changing it.ă'ăIF VESSUP = 1 THENăRegisters.AX = &HF00ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.AX AND &HFFăRegisters.AX = BMODEăELSEăRegisters.AX = &H4F03ăCALL InterruptX(&H10, Registers, Registers)ăCMODE = Registers.BXăRegisters.AX = &H4F02ăRegisters.BX = BMODEăEND IFăIF CMODE <> BMODE THENăCALL InterruptX(&H10, Registers, Registers)ăIF MODE < 23 THENă'ă'  Initialize mouse if driver is installed via interrupt 33h.ă'ă'IF QRYMOUSE = -1 THEN CALL MOUSINITăEND IFăEND IFăEND IFă'ă'  Global variable BVCBL is normally 0.  BVIEW sets it to 1 just beforeă' calling BLINE to draw a border around the viewport.  (BLINE uses thisă' variable to know not to enforce viewport constraints when BVIEW tries toă' draw a box just outside of the viewport.  (BVIEW resets it to unity whenă' it's finished.)  Define fictitious values for global mouse positionă' variables.ă'ăBVCBL = 0ăELSEă'ă'  SCREEN 0 is being emulated.  Use what should be a standard text modeă' for any SVGA system.  (This mode is also set regardless of whether oră' not the video state is already there.)ă'ăRegisters.AX = 3ăCALL InterruptX(&H10, Registers, Registers)ă'ă'  Just to be safe, make sure QB knows what screen mode it's in.  (Theă' above call to interrupt 10 could probably be skipped, but QB's SCREEN 0ă' by itself doesn't necessarily leave you in the text mode you want whenă' the screen isn't initially in a mode that QB recognizes.)ă'ăEND IFăEND SUBăăSUB DCLS (HorizMax, VertMax)ăFOR VMx = 0 TO VertMaxă FOR HMx = 0 TO HorizMaxă    DPSET HMx, VMx, 0ă NEXT HMxăNEXT VMxăEND SUBăăFUNCTION DPOINT% (XCOORD, YCOORD)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN SwitchBank NewBank%ăDEF SEG = &HA000ăDPOINT% = PEEK((Table&(YCOORD) + XCOORD) MOD 65536)ăDEF SEGăEND FUNCTIONăăSUB DPSET (XCOORD, YCOORD, CL%)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN SwitchBank NewBank%ăDEF SEG = &HA000ăPOKE (Table&(YCOORD) + XCOORD) MOD 65536, CL%ăDEF SEGăEND SUBăăSUB FINDVESA (MODE, HR, VR, NC)ă'ă'  This subroutine returns the VESA bios MODE integer (decimal) that hasă' resolution HR x VR x NC, as input via the parameter list.  If no suchă' mode can be found, MODE is returned as -1.  (If it finds a mode withă' the desired horizontal HR and vertical VR resolution but with more thană' NC colors, the mode is considered valid and is returned in MODE.  (Ită' will first try to find a mode with NC colors.))ă'ă'  To qualify as a valid, the mode must be supported by both hardware andă' bios.  (FINDVESA is usually called by BSCREEN.  There is not much reasonă' to call it directly.)ă'ăDIM VESA(1 TO 64) AS LONG, Byte AS LONG, MD(1 TO 257) AS INTEGER, COLORS(1 TO 256)ăDIM PLANES(1 TO 256)ăSM = VARSEG(VESA(1)): OS = VARPTR(VESA(1))ă'ă'  Set VESSUP to unity in case VESA bios cannot be detected.ă'ăVESSUP = 1ă'ă'  Confirm VESA support and get pointer to list of supported VESA modes.ă'ăRegisters.AX = &H4F00ăRegisters.ES = CINT(SM)ăRegisters.DI = CINT(OS)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SMăT$ = CHR$(PEEK(OS)) + CHR$(PEEK(OS + 1)) + CHR$(PEEK(OS + 2)) + CHR$(PEEK(OS + 3))ăIF T$ <> "VESA" THEN GOTO NOSUPă'ă'  VESA = VESA bios version number.ă'ăVESAFRC = PEEK(OS + 4)ăFIXFRC:ăVESAFRC = VESAFRC / 10ăIF VESAFRC >= 1 THEN GOTO FIXFRCăVESA = PEEK(OS + 5) + VESAFRCăPSM = PEEK(OS + 16) + 256 * PEEK(OS + 17): POF = PEEK(OS + 14) + 256 * PEEK(OS + 15)ă'ă'  Look for video mode that supports desired resolution.ă'ă'  NMODES counts number of modes (possibly with different colors) withă' desired resolution.ă'ăNMODES = 1ăNEWMODE:ăDEF SEG = PSMăMD(NMODES) = PEEK(POF) + 256 * PEEK(POF + 1): POF = POF + 2ă'PRINT PEEK(POF) + 256 * PEEK(POF + 1): SLEEPăIF MD(NMODES) = -1 THEN GOTO NOSUPăRegisters.AX = &H4F01ăRegisters.CX = MD(NMODES)ăRegisters.ES = CINT(SM)ăRegisters.DI = CINT(OS)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SMă'ă'  First byte at segment SM stores "support information" about mode underă' analysis.ă'ăByte = CLNG(PEEK(OS) + 256 * PEEK(OS + 1))ăb$ = LTRIM$(RTRIM$(BIN$(Byte)))ă'ă'  Bits 0 and 2 indicate support (or lack of it) in hardware and BIOS.ă'ăHARD$ = MID$(b$, 16, 1)ăBIOS$ = MID$(b$, 14, 1)ăIF HARD$ = "0" OR BIOS$ = "0" THEN GOTO NEWMODEă'ă'  Bit 4 indicates graphics or text mode.ă'ăGMSW$ = MID$(b$, 12, 1)ă'ă'  Bit 1 indicates the presence of extended information.  If no extendedă' information is available for this mode, it cannot be determined thată' it supports the required HR x VR resolution.ă'ăEXTINF$ = MID$(b$, 15, 1)ăIF EXTINF$ = "0" THEN GOTO NEWMODEă'ă'  Character sizes are needed to correct stored resolution data for someă' VESA bioses.ă'ăHS = PEEK(OS + 22): VS = PEEK(OS + 23)ăHRM = PEEK(OS + 18) + 256 * PEEK(OS + 19): VRM = PEEK(OS + 20) + 256 * PEEK(OS + 21)ăIF VESA < 1.2 THENăIF GMSW$ = "0" THEN HRM = HRM / HS: VRM = VRM / VSăIF (MD(NMODES) >= 0 AND MD(NMODES) <= 6) OR MD(NMODES) = 13 THEN VRM = VRM / 2ăIF MD(NMODES) = 14 OR MD(NMODES) = 19 THEN VRM = VRM / 2ăEND IFăIF HR <> HRM OR VR <> VRM THEN GOTO NEWMODEăCOLORS(NMODES) = 2! ^ CSNG(PEEK(OS + 25))ă'ă'  Get number of bit planes.  (Subroutines BGET AND BPUT need it.  Theyă' also need the number of bits per pixel.  This is actually what was justă' reported by the VESA bios, above.  It will be reobtained from the COLORSă' parameter later.)ă'ăPLANES(NMODES) = PEEK(OS + 24)ă'ă'  Get all modes with required resolution, regardless of color.  (Lateră' on the one with NC colors, if it exists, will be chosen.  (But theă' possibility that the one with the right number of colors will be foundă' first is taken into account.))ă'ăIF COLORS(NMODES) = NC THEN GOTO RETMODEăIF NMODES < 256 THEN NMODES = NMODES + 1: GOTO NEWMODEăRETMODE:ă'ă'  Since VESA was detected, store corresponding error code.ă'ăVESSUP = 0ăFOR I = 1 TO NMODESăK = IăIF COLORS(I) = NC THEN BITSPIXEL = INT(LOG(COLORS(I)) / LOG(2) + .001)ăIF COLORS(I) = NC THEN MODE = CSNG(MD(I)): BITPLANES = PLANES(I): GOTO QUITăNEXT IăFOR I = 1 TO NMODESăK = IăIF COLORS(I) > NC THEN BITSPIXEL = INT(LOG(COLORS(I)) / LOG(2) + .001)ăIF COLORS(I) > NC THEN MODE = CSNG(MD(I)): BITPLANES = PLANES(I): GOTO QUITăNEXT IăNOSUP:ă'ă'  Requisite VESA mode couldn't be found.  Return negative mode value asă' switch for calling routine to recognize that fact.ă'ăMODE = -1ăQUIT:ăDEF SEGăEND SUBăăSUB HELPăSTDOUT "Raw Image viewer Version .4210á" + CHR$(10) + CHR$(13)ăSTDOUT "Command line arguments available are:" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/? or /HELP  - This help text. This switch takes precedent over any parameter." + CHR$(10) + CHR$(13) + CHR$(10)ăăSTDOUT "/GD          - Force displaying of picture in gray scale. " + CHR$(10) + CHR$(13)ăSTDOUT "               (Takes Priority over the 'AJ256' switch.)" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/DPWL        - Display picture while it loads, otherwise you see a black screen." + CHR$(10) + CHR$(13)ăSTDOUT "/A8GS        - Apply the 64 shade gray scale palette to a Hicolor/Truecolor Raw" + CHR$(10) + CHR$(13)ăSTDOUT "               image. Recommended for 256k color video adapters, if the image" + CHR$(10) + CHR$(13)ăSTDOUT "               doesn't look right. (Takes Priority over the 'AJ256' switch.)" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/AJ256       - Adjust Hicolor/Truecolor palette in Raw file to work with 256k" + CHR$(10) + CHR$(13)ăSTDOUT "               color video adapters. (Can be used to darken an image.)" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/FHGS        - Force the use of the Hicolor/TrueColor Gray scale." + CHR$(10) + CHR$(13)ăSTDOUT "               (Takes Priority over 'GD', 'A8GS', and the 'AJ256' switch.)" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "/PI          - Display picture info for 4 seconds." + CHR$(10) + CHR$(13)ăPressAnyKeyăSTDOUT "Any valid DOS filename that is a Raw image, a pathname may be included." + CHR$(10) + CHR$(13)ăSTDOUT "Images that are 256 colors and above are supported." + CHR$(10) + CHR$(13)ăSTDOUT "A space must be present between a filename and *any* parameter !" + CHR$(10) + CHR$(13)ăSTDOUT "You can press ESCape to abort loading a picture." + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "This Raw image viewer was coded by Andrew Gibson, whom in no way is liable" + CHR$(10) + CHR$(13)ăSTDOUT "for any problems that may occur or accidents that may happen to your computer." + CHR$(10) + CHR$(13)ăSTDOUT "I have tested this program to the best of my ability and have not found it to" + CHR$(10) + CHR$(13)ăSTDOUT "be an unstable program. Although this image viewing program supports many" + CHR$(10) + CHR$(13)ăSTDOUT "modes of operation not all of them will be available to you." + CHR$(10) + CHR$(13)ăEND SUBăăSUB PAL (Act$)ă   SELECT CASE UCASE$(Act$)ă   ' "save","fadein","fadeout","restore","blackout"ă      CASE "SAVE"ă         FOR colour% = 0 TO 255ă            OUT &H3C7, colour%        ' Set color to readă            r(colour%) = INP(&H3C9)   ' read red valueă            g(colour%) = INP(&H3C9)   ' read green valueă            b(colour%) = INP(&H3C9)   ' read blue valueă         NEXTă      CASE "FADEIN"ă         DOă            done% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if saved palette not in use.ă               IF red% < r(colour%) THEN red% = red% + 1: done% = 1ă               IF grn% < g(colour%) THEN grn% = grn% + 1: done% = 1ă               IF blu% < b(colour%) THEN blu% = blu% + 1: done% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE done% <> 0ă      CASE "FADEOUT"ă         DOă            visible% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if colors are still visible.ă               IF red% > 0 THEN red% = red% - 1: visible% = 1ă               IF grn% > 0 THEN grn% = grn% - 1: visible% = 1ă               IF blu% > 0 THEN blu% = blu% - 1: visible% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă         LOOP WHILE visible% <> 0ă      CASE "RESTORE"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, r(colour%)     ' write red valueă            OUT &H3C9, g(colour%)     ' write green valueă            OUT &H3C9, b(colour%)     ' write blue valueă         NEXTă      CASE "BLACKOUT"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, 0                ' write red valueă            OUT &H3C9, 0                ' write green valueă            OUT &H3C9, 0                ' write blue valueă         NEXTă   END SELECTăEND SUBăăSUB ParseCmdLine (cmd$, Params$(), Found%)ă'This parsing sub does NOT mistake filenames like "F-14G.ZIP" asă'containing a switch. That's why it looks so big.ă  Found% = FALSE: Sep$ = "-/": Temp$ = LTRIM$(RTRIM$(cmd$)): InParam% = FALSEă  FOR p% = 1 TO LEN(Temp$)ă    C$ = MID$(Temp$, p%, 1)ă    IF InParam% = TRUE THEN 'Inside of a switch?ă      IF INSTR(Sep$, C$) THEN 'Found another switch?ă        'Terminate current switch, then start parsing the next one.ă        GOSUB MakeParam: MID$(Temp$, p%, 1) = LEFT$(Sep$, 1)ă        ParamStart% = p%ă      ELSEIF ASC(C$) = 32 OR ASC(C$) = 9 THENă        GOSUB MakeParam: InParam% = FALSE 'Terminate current switch.ă      END IFă    ELSEIF InParam% = -2 THEN 'Inside of a parameter?ă      IF ASC(C$) = 32 OR ASC(C$) = 9 THEN 'Terminate parameter withă        GOSUB MakeParam: InParam% = FALSE     'space or TAB.ă      END IFă    ELSEă      IF INSTR(Sep$, C$) THEN 'Found start of a switch?ă        'Make sure all switches start with "-".ă        MID$(Temp$, p%, 1) = LEFT$(Sep$, 1): InParam% = TRUEă        ParamStart% = p%ă      ELSEIF ASC(C$) <> 32 AND ASC(C$) <> 9 THEN 'If char isn't aă        InParam% = -2: ParamStart% = p% 'space or TAB it's a parameter.ă      END IFă    END IFă  NEXTă IF InParam% THEN GOSUB MakeParamă  EXIT SUBăMakeParam:ă  Found% = Found% + 1ă  Params$(Found%) = MID$(Temp$, ParamStart%, p% - ParamStart%)ă  IF Found% = UBOUND(Params$) THEN EXIT SUBăRETURNăEND SUBăăSUB PressAnyKeyăSTDOUT "Press any key to continue." + CHR$(13)ăZX$ = INPUT$(1)ăSTDOUT "                          " + CHR$(10) + CHR$(13)ăEND SUBăăSUB RAWLoad (File$)ăON ERROR GOTO HandleErrorsăOPEN File$ FOR BINARY AS #1ă     SEEK #1, 33ă     PB$ = SPACE$(3)ă     FOR reg = 0 TO 255ă        GET #1, , PB$ă        IF AdjustTFS = FALSE THENă          Rr = ASC(MID$(PB$, 1, 1)): Gg = ASC(MID$(PB$, 2, 1))ă          Bb = ASC(MID$(PB$, 3, 1))ă        ELSEă          Rr = ASC(MID$(PB$, 1, 1)) \ 4: Gg = ASC(MID$(PB$, 2, 1)) \ 4ă          Bb = ASC(MID$(PB$, 3, 1)) \ 4ă        END IFă       OUT &H3C8, reg: OUT &H3C9, Rr: OUT &H3C9, Gg: OUT &H3C9, Bbă     NEXTă    ă     IF ApplyEightBPPGScale = TRUE OR ForceGrayScale = TRUE THENă        GOSUB LoadLowGrayScaleă     END IFă    ă     IF ForceHicolorGrayScale = TRUE THENă              FOR GraySM = 0 TO 255     'Sixteen million Gray scale if neededă                 OUT &H3C8, GraySM      ' Set color to writeă                 OUT &H3C9, GraySM      ' write red valueă                 OUT &H3C9, GraySM      ' write green valueă                 OUT &H3C9, GraySM      ' write blue valueă              NEXT GraySMă     END IFă ă     PAL "SAVE"ă     IF DisplayPictureWhileLoading = FALSE THENă        PAL "BLACKOUT"ă     END IFă    ă     'This is much faster than traditional X,Y loading !ă     XX = 0ă     PicBuffer1$ = SPACE$(RawWidth&): PicBuffer2$ = SPACE$(RawWidth&)ă     PicBuffer3$ = SPACE$(RawWidth&): PicBuffer4$ = SPACE$(RawWidth&)ă     PicBuffer5$ = SPACE$(RawWidth&): PicBuffer6$ = SPACE$(RawWidth&)ă     PicBuffer7$ = SPACE$(RawWidth&): PicBuffer8$ = SPACE$(RawWidth&)ă     FOR YY = 0 TO RawHeight& - 1 STEP 8ă         GET #1, , PicBuffer1$: GET #1, , PicBuffer2$ă         GET #1, , PicBuffer3$: GET #1, , PicBuffer4$ă         GET #1, , PicBuffer5$: GET #1, , PicBuffer6$ă         GET #1, , PicBuffer7$: GET #1, , PicBuffer8$ă         FOR Writebuffer = 1 TO LEN(PicBuffer1$) STEP 8ă         ByteColor1 = ASC(MID$(PicBuffer1$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer1$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer1$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer1$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer1$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer1$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer1$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer1$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 0, ByteColor1ă         DPSET XX + 1, YY + 0, ByteColor2ă         DPSET XX + 2, YY + 0, ByteColor3ă         DPSET XX + 3, YY + 0, ByteColor4ă         DPSET XX + 4, YY + 0, ByteColor5ă         DPSET XX + 5, YY + 0, ByteColor6ă         DPSET XX + 6, YY + 0, ByteColor7ă         DPSET XX + 7, YY + 0, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer2$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer2$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer2$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer2$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer2$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer2$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer2$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer2$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 1, ByteColor1ă         DPSET XX + 1, YY + 1, ByteColor2ă         DPSET XX + 2, YY + 1, ByteColor3ă         DPSET XX + 3, YY + 1, ByteColor4ă         DPSET XX + 4, YY + 1, ByteColor5ă         DPSET XX + 5, YY + 1, ByteColor6ă         DPSET XX + 6, YY + 1, ByteColor7ă         DPSET XX + 7, YY + 1, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer3$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer3$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer3$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer3$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer3$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer3$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer3$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer3$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 2, ByteColor1ă         DPSET XX + 1, YY + 2, ByteColor2ă         DPSET XX + 2, YY + 2, ByteColor3ă         DPSET XX + 3, YY + 2, ByteColor4ă         DPSET XX + 4, YY + 2, ByteColor5ă         DPSET XX + 5, YY + 2, ByteColor6ă         DPSET XX + 6, YY + 2, ByteColor7ă         DPSET XX + 7, YY + 2, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer4$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer4$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer4$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer4$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer4$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer4$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer4$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer4$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 3, ByteColor1ă         DPSET XX + 1, YY + 3, ByteColor2ă         DPSET XX + 2, YY + 3, ByteColor3ă         DPSET XX + 3, YY + 3, ByteColor4ă         DPSET XX + 4, YY + 3, ByteColor5ă         DPSET XX + 5, YY + 3, ByteColor6ă         DPSET XX + 6, YY + 3, ByteColor7ă         DPSET XX + 7, YY + 3, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer5$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer5$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer5$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer5$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer5$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer5$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer5$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer5$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 4, ByteColor1ă         DPSET XX + 1, YY + 4, ByteColor2ă         DPSET XX + 2, YY + 4, ByteColor3ă         DPSET XX + 3, YY + 4, ByteColor4ă         DPSET XX + 4, YY + 4, ByteColor5ă         DPSET XX + 5, YY + 4, ByteColor6ă         DPSET XX + 6, YY + 4, ByteColor7ă         DPSET XX + 7, YY + 4, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer6$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer6$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer6$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer6$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer6$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer6$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer6$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer6$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 5, ByteColor1ă         DPSET XX + 1, YY + 5, ByteColor2ă         DPSET XX + 2, YY + 5, ByteColor3ă         DPSET XX + 3, YY + 5, ByteColor4ă         DPSET XX + 4, YY + 5, ByteColor5ă         DPSET XX + 5, YY + 5, ByteColor6ă         DPSET XX + 6, YY + 5, ByteColor7ă         DPSET XX + 7, YY + 5, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer7$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer7$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer7$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer7$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer7$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer7$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer7$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer7$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 6, ByteColor1ă         DPSET XX + 1, YY + 6, ByteColor2ă         DPSET XX + 2, YY + 6, ByteColor3ă         DPSET XX + 3, YY + 6, ByteColor4ă         DPSET XX + 4, YY + 6, ByteColor5ă         DPSET XX + 5, YY + 6, ByteColor6ă         DPSET XX + 6, YY + 6, ByteColor7ă         DPSET XX + 7, YY + 6, ByteColor8ă         ByteColor1 = ASC(MID$(PicBuffer8$, Writebuffer + 0, 1)): ByteColor2 = ASC(MID$(PicBuffer8$, Writebuffer + 1, 1))ă         ByteColor3 = ASC(MID$(PicBuffer8$, Writebuffer + 2, 1)): ByteColor4 = ASC(MID$(PicBuffer8$, Writebuffer + 3, 1))ă         ByteColor5 = ASC(MID$(PicBuffer8$, Writebuffer + 4, 1)): ByteColor6 = ASC(MID$(PicBuffer8$, Writebuffer + 5, 1))ă         ByteColor7 = ASC(MID$(PicBuffer8$, Writebuffer + 6, 1)): ByteColor8 = ASC(MID$(PicBuffer8$, Writebuffer + 7, 1))ă         DPSET XX + 0, YY + 7, ByteColor1ă         DPSET XX + 1, YY + 7, ByteColor2ă         DPSET XX + 2, YY + 7, ByteColor3ă         DPSET XX + 3, YY + 7, ByteColor4ă         DPSET XX + 4, YY + 7, ByteColor5ă         DPSET XX + 5, YY + 7, ByteColor6ă         DPSET XX + 6, YY + 7, ByteColor7ă         DPSET XX + 7, YY + 7, ByteColor8ă         XX = XX + 8: IF XX = RawWidth& THEN EXIT FORă         NEXT Writebufferă         XX = 0ă         Abort$ = INKEY$ă         IF Abort$ = CHR$(27) THENă            CLOSEă            BSCREEN 0, 0, 0, 0ă            STDOUT "Raw image loading aborted !" + CHR$(10) + CHR$(13)ă            ENDă         END IFă     NEXT YYă     IF DisplayPictureWhileLoading = FALSE THENă        PAL "FADEIN"ă     END IFăCLOSE #1ăEXIT SUBăăLoadLowGrayScale:ăRESTORE GrayTFSCăFOR GrayTFS = 0 TO 255ăREAD Red2, Blue2, Green2ăOUT &H3C8, GrayTFS     ' Set color to writeăOUT &H3C9, Red2        ' write red valueăOUT &H3C9, Green2      ' write green valueăOUT &H3C9, Blue2        ' write blue valueăNEXT GrayTFSăRETURNăEND SUBăăFUNCTION SelectRAWImageMode% (RAWFILE$)ă'Test for Vesa Support before AnythingăDIM VESAX(1 TO 64) AS LONGăSM2 = VARSEG(VESAX(1)): OS2 = VARPTR(VESAX(1))ă'  Confirm VESA support and get pointer to list of supported VESA modes.ă'ăRegisters.AX = &H4F00ăRegisters.ES = CINT(SM2)ăRegisters.DI = CINT(OS2)ăCALL InterruptX(&H10, Registers, Registers)ăDEF SEG = SM2ăT$ = CHR$(PEEK(OS2)) + CHR$(PEEK(OS2 + 1)) + CHR$(PEEK(OS2 + 2)) + CHR$(PEEK(OS2 + 3))ăDEF SEGăIF T$ <> "VESA" THENă   STDOUT "A Video Card with VESA support *IS REQUIRED* to use this Raw Image viewer." + CHR$(10) + CHR$(13)ă   SelectTGAImageMode = -2: 'No Vesa Supportă   EXIT FUNCTIONăEND IFăERASE VESAXăă'Test Tga FileăON ERROR GOTO HandleErrorsăOPEN RAWFILE$ FOR BINARY AS #1ăIF LOF(1) = 0 THEN CLOSE : KILL RAWFILE$: Ingraphics = 0: ERROR 77ăRawHeader$ = SPACE$(32): GET #1, , RawHeader$ăFileSize& = LOF(1): CLOSE #1ăăMatch = TRUE 'assume best caseăSELECT CASE FileSize&ă  CASE IS = 64800: RawWidth& = 320: RawHeight& = 200     '320x200x256ă  CASE IS = 77600: RawWidth& = 320: RawHeight& = 240     '320x240x256 modex m1ă  CASE IS = 128800: RawWidth& = 320: RawHeight& = 400    '320x400x256 modex m7ă  CASE IS = 173600: RawWidth& = 360: RawHeight& = 480    '360x480x256 modex m8ăă  CASE IS = 256800: RawWidth& = 640: RawHeight& = 400    '640x400x256ă  CASE IS = 308000: RawWidth& = 640: RawHeight& = 480    '640x480x256ă  CASE IS = 480800: RawWidth& = 800: RawHeight& = 600    '800x600x256ă  CASE IS = 787232: RawWidth& = 1024: RawHeight& = 768   '1024x768x256ă  CASE IS = 1229600: RawWidth& = 1200: RawHeight& = 1024 '1200x1024x256ă  CASE IS = 1920800: RawWidth& = 1600: RawHeight& = 1200 '1600x1200x256ăCASE ELSEă  Match = FALSEăEND SELECTăăSELECT CASE Matchă  CASE IS = TRUEă     STDOUT "Found right image size !!!" + CHR$(10) + CHR$(13)ă     STDOUT "Picture Info" + CHR$(10) + CHR$(13)ă     STDOUT "Filename: " + RAWFILE$ + CHR$(10) + CHR$(13)ă     STDOUT "Width:" + STR$(RawWidth&) + " x " + "Height:" + STR$(RawHeight&) + CHR$(10) + CHR$(13)ă     STDOUT "Header: " + RawHeader$ + CHR$(10) + CHR$(13)ă     IF SeeInfo = TRUE THEN SLEEP 4ă  CASE IS = FALSEă       'BSCREEN 0, 0, 0, 0ă       STDOUT "Possible Reasons why this will not work:" + CHR$(10) + CHR$(13)ă       STDOUT "1) Unable to load Raw file." + CHR$(10) + CHR$(13)ă       STDOUT "2) Image may not be a Raw file." + CHR$(10) + CHR$(13)ă       STDOUT "3) Raw file size doesn't match." + CHR$(10) + CHR$(13)ă       SelectRAWImageMode% = -3: 'Can't load Raw Pictureă       EXIT FUNCTIONăEND SELECTă'SELECT CASE RawHeader$ă' CASE IS = "SuperVGA_TGA_viewerSuperRWformat"ă' CASE IS = "GIF_2_RAW_Save_File" + STRING$(13, 32)ă' CASE ELSEă'       BSCREEN 0, 0, 0, 0ă'       STDOUT "Possible Reasons why this will not work:" + CHR$(10) + CHR$(13)ă'       STDOUT "1) Unable to load Raw file." + CHR$(10) + CHR$(13)ă'       STDOUT "2) Image may not be a Raw file." + CHR$(10) + CHR$(13)ă'       STDOUT "3) Raw file size doesn't match." + CHR$(10) + CHR$(13)ă'       SelectRAWImageMode% = -3: 'Can't load Raw Pictureă'       EXIT FUNCTIONă'END SELECTăă' Mode listă'   MODE = 26:   640 x  400 x 256ă'   MODE = 14:   640 x  480 x 256ă'   MODE = 16:   800 x  600 x 256ă'   MODE = 18:  1024 x  768 x 256ă'   MODE = 20:  1200 x 1024 x 256ă'   MODE = 22:  1600 x 1200 x 256ăă'Try 1ă'PRINT RawHeight&, RawWidth&ăSRI = FALSE 'Assume Worst Case - picture too bigăIF RawWidth& >= 0 AND RawWidth& <= 640 AND RawHeight& >= 0 AND RawHeight& <= 400 THEN SelectRAWImageMode% = 26: SRI = TRUE         '640x400x256ăIF RawWidth& >= 0 AND RawWidth& <= 640 AND RawHeight& >= 401 AND RawHeight& <= 480 THEN SelectRAWImageMode% = 14: SRI = TRUE       '640x480x256ăIF RawWidth& >= 641 AND RawWidth& <= 800 AND RawHeight& >= 481 AND RawHeight& <= 600 THEN SelectRAWImageMode% = 16: SRI = TRUE     '800x600x256ăIF RawWidth& >= 801 AND RawWidth& <= 1024 AND RawHeight& >= 601 AND RawHeight& <= 768 THEN SelectRAWImageMode% = 18: SRI = TRUE    '1024x768x256ăIF RawWidth& >= 1025 AND RawWidth& <= 1200 AND RawHeight& >= 769 AND RawHeight& <= 1024 THEN SelectRAWImageMode% = 20: SRI = TRUE  '1200x1024x256ăIF RawWidth& >= 1201 AND RawWidth& <= 1600 AND RawHeight& >= 1025 AND RawHeight& <= 1200 THEN SelectRAWImageMode% = 22: SRI = TRUE '1600x1200x256ăIF SRI = TRUE THENă   GOTO FirstPassOkăEND IFă''Try 2ăRawWidth2& = RawHeight&: RawHeight2& = RawWidth&ăSRI = FALSE 'Assume Worst Case - picture too bigăIF RawWidth2& >= 0 AND RawWidth2& <= 640 AND RawHeight2& >= 0 AND RawHeight2& <= 400 THEN SelectRAWImageMode% = 26: SRI = TRUE         '640x400x256ăIF RawWidth2& >= 0 AND RawWidth2& <= 640 AND RawHeight2& >= 401 AND RawHeight2& <= 480 THEN SelectRAWImageMode% = 14: SRI = TRUE       '640x480x256ăIF RawWidth2& >= 641 AND RawWidth2& <= 800 AND RawHeight2& >= 481 AND RawHeight2& <= 600 THEN SelectRAWImageMode% = 16: SRI = TRUE     '800x600x256ăIF RawWidth2& >= 801 AND RawWidth2& <= 1024 AND RawHeight2& >= 601 AND RawHeight2& <= 768 THEN SelectRAWImageMode% = 18: SRI = TRUE    '1024x768x256ăIF RawWidth2& >= 1025 AND RawWidth2& <= 1200 AND RawHeight2& >= 769 AND RawHeight2& <= 1024 THEN SelectRAWImageMode% = 20: SRI = TRUE  '1200x1024x256ăIF RawWidth2& >= 1201 AND RawWidth2& <= 1600 AND RawHeight2& >= 1025 AND RawHeight2& <= 1200 THEN SelectRAWImageMode% = 22: SRI = TRUE '1600x1200x256ăRawHeight& = RawHeight2&: RawWidth& = RawWidth2&ă'PRINT RawHeight&, RawWidth&ăăIF SRI = FALSE THENă   SelectRAWImageMode% = -4: ' Can't match an Image size to an available screen modeăEND IFăFirstPassOk:ăEND FUNCTIONăăSUB STDOUT (MESSAGETEXT$) STATICăRegisters.AX = &H4000ăRegisters.BX = &H1ăRegisters.CX = LEN(MESSAGETEXT$)ăRegisters.DS = VARSEG(MESSAGETEXT$)ăRegisters.DX = SADD(MESSAGETEXT$)ăCALL InterruptX(&H21, Registers, Registers)ăEND SUBăăSUB SwitchBank (NB%)ăRegisters.AX = &H4F05ăRegisters.BX = 0ăRegisters.DX = NB%ăCALL InterruptX(&H10, Registers, Registers)ăBank% = NB%ăEND SUBăăSUB XBeep (High, Low, Duration) STATICăOUT 97, INP(97) OR &H3: OUT 67, 182ăOUT 66, High: OUT 66, LowăFOR Z! = 0 TO Duration: NEXT Z!ăOUT 97, INP(97) AND &HFCăEND SUBăDieter Folger                  PB ICON VIEWER                 folger@bamberg.baynet.de       05-28-98 (20:19)       PB                     251  7887     ICONSHOW.BAS'--------------------------------------------------'ă' ICONSHOW.BAS for PowerBasic 3.x                  'ă' Version 1.4  05.07.1998                          'ă'--------------------------------------------------'ă' Shows all *.ICO files in current directory,      'ă' 36 per screen using original icon palette.       'ă' VGA card and color monitor required.             'ă' Freeware (c) 1997/98 by Dieter Folger            'ă' E-mail: folger@bamberg.baynet.de                 'ă' For comments, improvements or questions          'ă' I'd like to hear from you. Have fun!             'ă'--------------------------------------------------'ă'==================================================ă' MAIN PROGRAMă'==================================================ă DEFINT A - Ză File$ = DIR$ ("*.ICO") 'get first *.ICO file in diră IF File$ = "" THEN     'no *.ICO files foundă    PRINT "No icons found in current directory"ă    GOTO Quită END IFă   'switch to graphic mode, setă   'palette and prepare screen:ă SetScreenă DOă   IF File$ = "" THEN GOTO Finish  'quit if there are no more filesă   X = 50 : Y = 60                 'position of upper left iconă   FOR Icons = 1 TO 36             'maximum 36 per screenă       OPEN File$ FOR BINARY AS #1ă         'Check if it's really an icon file (has always 766 bytes):ă       IF LOF(1) <> 766 THEN DECR Icons : GOTO NextOneă       Count = 0ă       REDIM Pixel?(1:1024)       'dim array for icon pixelsă       FOR i = 1 TO 1024 STEP 8   'get AND mask of iconă           GET #1, 638 + Count, Bă             'When a bit is set in AND mask then background should lookă             'through and we mark this position with a dummy (16):ă           FOR j = 0 TO 7ă               IF BIT(B, j) THEN Pixel?(7 + i - j) = 16ă           NEXTă           INCR Countă        NEXTă        Count = 0ă        FOR i = 1 TO 1024 STEP 2  'get XOR mask of iconă            GET #1, 126 + Count, Bă              'when pixel array is still 0 at "i"-positionă              '(=no dummy set) we have to calculate pixel color:ă            IF Pixel?(i) = 0 THEN Pixel?(i) = (B AND 240) / 16ă            IF Pixel?(i+1) = 0 THEN Pixel?(i + 1) = B AND 15ă            INCR Countă        NEXTă          'Make a button as icon background:ă        MakeButton x - 6, y - 6, x + 38, y + 38ă          'Prepare to write file name centered under button:ă        f = (12 - LEN(File$)) \ 2ă        F$ = LEFT$(SPACE$(f) + File$ + Space$(f) + " ", 12)ă        PPrint F$, x - 29, Y + 40, 14, 6ă        Count = 1ă        FOR Row = 32 TO 1 STEP -1ă            FOR Col = 1 to 32ă                  'When pixel in array is a valid coloră                  '(i.e. not 16) then show it:ă                IF Pixel?(Count) < 16 THENă                   SetPixel X + Col, Y + Row, Pixel?(Count)ă                END IFă                INCR Countă            NEXTă        NEXTă        INCR X, 102ă        IF X > 600 THEN X = 50 : INCR Y , 64ă   NextOne:ă        CLOSEă        File$=DIR$  'Get next *.ICO file in DIRă        IF File$ = "" THEN EXIT FORă   NEXTăFinish: 'No more icons in dir or 36 shown:ă   IF File$ = "" THENă      PPrint "No more icons found. Press ESC to end.", 160, 440, 15, 6ă   ELSEă      PPrint "  Press a key to continue (ESC = end) ", 160, 440, 15, 6ă   END IFă   DO : K$=INKEY$ : LOOP UNTIL LEN(K$)ă LOOP UNTIL K$ = CHR$(27)ă SCREEN 0   'back to text modeăQuit:ă COLOR 10 : PRINT "ţ ";: COLOR 7ă PRINT "ICONSHOW is freeware (c) 1998 by D. Folger"ăENDă'==================================================ă' END OF MAIN PROGRAMă'==================================================ă'------------ăSUB SetScreenă'------------ă SCREEN 12ă FOR Clr = 0 TO 15  'Set paletteă     READ b, g, r   'read dataă     SetRGB Clr, r, g, bă NEXTă MakeWindow 0, 0, 640, 480, 6ă PPrint "I C O N S H O W  1.4", 235, 10, 11, 6ă PPrint "    Freeware (c) 1998 by D. Folger    ", 165, 25, 15, 6ăEND SUBă'------------------------------------------ăSUB SetPixel (BYVAL x, BYVAL y, BYVAL colr)ă' This routines replaces PSETă' because it's fasteră'------------------------------------------ă ! mov dx, &h03ceă ! mov ax, &h0205ă ! out dx,axă ! mov ax, yă ! mov bx,axă ! mov cl,6ă ! shl ax,clă ! mov dx,axă ! mov cl,4ă ! mov ax,bxă ! shl ax,clă ! add dx,axă ! mov ax, xă ! mov bx,axă ! mov cl,3ă ! shr ax,clă ! add dx,axă ! and bl,7ă ! xor bl,7ă ! mov cl,blă ! mov al,1ă ! shl ax,clă ! push dxă ! mov bx,axă ! mov dx, &h3ceă ! mov al,8ă ! out dx,ală ! inc dxă ! mov al,blă ! out dx,ală ! pop siă ! mov ax, &hA000ă ! mov es,axă ! mov al,es:[si]ă ! mov al, colră ! mov es:[si],ală ! mov dx, &h03ceă ! mov ax, &hff08ă ! out dx,axă ! mov ax,5ă ! out dx,axăEND SUBă'----------------------------------------------------ă'Following routines paint window, button and framesă'----------------------------------------------------ă'------------------------------ăSUB MakeButton (x1, y1, x2, y2)ă'------------------------------ă LINE (x1 - 1, y1 - 1)-(x2 + 1, y2 + 1), 0, Bă LINE (x1 + 1, y1 + 1)-(x2 - 1, y2 - 1), 7, BFă LeftLine x1, y1, x2, y2ăEND SUBă'-----------------------------ăSUB RightLine (x1, y1, x2, y2)ă'-----------------------------ă LINE (x1, y2) - (x1, y1), 0ă LINE (x1, y1) - (x2, y1), 0ă LINE (x1, y2) - (x2, y2), 15ă LINE (x2, y2) - (x2, y1), 15ăEND SUBă'----------------------------ăSUB LeftLine (x1, y1, x2, y2)ă'----------------------------ă LINE (x1, y2) - (x1, y1), 15ă LINE (x1, y1) - (x2, y1), 15ă LINE (x1, y2) - (x2, y2),  8ă LINE (x2, y2) - (x2, y1),  8ăEND SUBă'-----------------------------ăSUB MakeBoard (x1, y1, x2, y2)ă'-----------------------------ă LINE (x1 + 2 , y1 + 2) - (x2 + 2 , y2 + 2), 8, BFă LINE (x1, y1) - (x2, y2), 7, BFă LINE (x1, y1) - (x2, y2), 0, Bă RightLine x1 + 5, y1 + 5, x2 - 5, y2 - 5ă LeftLine  x1 + 1, y1 + 1, x2 - 1, y2 - 1ăEND SUBă'-----------------------------------ăSUB MakeWindow (x1, y1, x2, y2, col)ă'-----------------------------------ă IF x2 < 100 THEN x2 = 100ă IF y2 < 32 THEN y2 = 32ă MakeBoard x1, y1, x2, y2ă LINE (x1 + 7, y1 + 7) - (x2 - 8, y2 - 8), Col, BFă LINE (x1 + 6, y1 + 6) - (x2 - 6, y1 + 6), 0ă LINE (x1 + 7, y1 + 7) - (x2 - 7, y1 + 7), 8, BăEND SUBă'-----------------------------------ăSUB PPrint (Text$, x%, y%, fg%, bg%)ă'Allows to print text in VGA modeă'at any screen position in anyă'foreground and background coloră'-----------------------------------ă SHARED Seg16??,Ofs16??ă LOCAL i%,j%,k%,z%,char%ă IF Seg16?? = 0 THEN GetFontAdr 'first time onlyă DEF SEG = Seg16??ă    FOR i = 1 TO Len(Text$)ă        Char% = ASC(MID$(Text$, i, 1))ă        Adr?? = Ofs16?? + 8 * Char%ă        FOR j = 1 TO 8ă            FOR k = 1 TO 8ă                z = PEEK(Adr?? + k - 1)ă                IF BIT(z, 8 - j) THENă                   SetPixel x + j, y + k, fgă                ELSEă                   SetPixel x + j, y + k, bgă                END IFă            NEXT kă        NEXT jă        INCR x, 8ă    NEXT iă DEF SEGăEND SUBă'-------------ăSUB GetFontAdră'-------------ă SHARED Seg16??,Ofs16??ă ! push bpă ! mov ax,&H1130ă ! mov bh,3ă ! int &H10ă ! mov Seg16??,esă ! mov Ofs16??,bpă ! pop bpăEND SUBă'---------------------------------------------ă'palette data as stored in every icon fileă'(would be slower to read them from file):ăDATA 0,0,0,0,0,32,0,32,0,0,32,32,32,0,0,32,0ăDATA 32,32,32,0,48,48,48,32,32,32,0,0,63,0,63ăDATA 0,0,63,63,63,0,0,63,0,63,63,63,0,63,63,63ă'------------------------------------ăSUB SetRGB (BYVAL c AS BYTE, r, g, b)ă'------------------------------------ă  LOCAL Col?ă  ! mov ax, &h1007 ; get palette coloră  ! mov bl, c      ; register valueă  ! Int &h10ă  ! mov Col?, bh   ; bh holds value nowă  OUT &H3C8, Col? : OUT &H3C9, ră  OUT &H3C9, g    : OUT &H3C9, băEND SUBăViktor Rootselainen            TV-TEST SCREEN                 viktor.rootselainen@pp.inet.fi 06-03-98 (19:13)       QB, QBasic, PDS        242  8059     TVTEST.BAS  'TV-test v1.0  1998 (c)Viktor Rootselainen   ă'this program is freeware(z)ăăDEFINT A-ZăDECLARE SUB dely (time%)ăDECLARE SUB DrawTV ()ăDECLARE SUB GfxPrint (txt$, x%, y%)ăDECLARE SUB Makepal ()ăDECLARE SUB pal (r%, g%, b%, c%)ăDECLARE SUB palsub (Act$, delaytime%)ăCOMMON SHARED orgpal$, tvtext$ăDIM SHARED palr(255), palg(255), palb(255)ătvtext$ = "Nelonen": RANDOMIZE TIMERăIF LEN(COMMAND$) THEN tvtext$ = COMMAND$   '<-- remove this line in QbasicăIF LEN(tvtext$) > 14 THEN tvtext$ = LEFT$(tvtext$, 14)ăSCREEN 13ăăDrawTVăSLEEP 10ăpalsub "save", 0: palsub "BW", 0    ': palsub "fadeout", 30ăăDEF SEG = &HA000ăFOR x = 0 TO 319: FOR y = 0 TO 199ă  POKE y * 320& + x, RND * 255       'RND is very slow...ăNEXT: NEXTăăFOR i = 1 TO 20: k$ = INKEY$: NEXT   'clear keyboard bufferă'palsub "fadein", 20ăăDOă pal RND * 63, RND * 63, RND * 63, (RND * 254) + 1ăLOOP WHILE INKEY$ = ""ăăpalsub "fadeout", 15ăSCREEN 0: WIDTH 80, 25ăăpalsub "save", 0: palsub "blackout", 0ăPRINT "TV-test screen  by Viktor Rootselainen   1998"ăpalsub "fadein", 10ăăDATA 31,14,11,10,13,12,9,0ăă' Millisecond delay routineă' The time variable can be any integer valueă' 1 = one millisecond, 1000 = one second 32767 = 32 seconds.ăSUB dely (time)ăăOUT &H61, INP(&H61) AND &HFCăOUT &H43, &HB4ăOUT &H42, 166ăOUT &H42, 4ăOUT &H61, INP(&H61) OR 1ăăFOR N = 1 TO time STEP 1ă    DOă        OUT &H43, &H80ă        t = INP(&H42)ă    LOOP WHILE INP(&H42) > 2ă    DOă        OUT &H43, &H80ă        t = INP(&H42)ă    LOOP WHILE INP(&H42) <= 2ăNEXT NăEND SUBăăSUB DrawTVăboxstep = 20ăăFOR i = 0 TO 63: pal -i, 0, 0, i + 100: NEXT    'redăFOR i = 0 TO 63: pal 0, 0, -i, i + 163: NEXT    'blueăFOR i = 0 TO 5: pal 63, 47 + i, 0, 44 + i: NEXTăpal 45, 49, 45, 42ăăăFOR x = 0 TO 320 STEP boxstepă  LINE (x, 0)-(x, 200): LINE (0, x)-(320, x): NEXTăFOR x = 1 TO 320 STEP boxstep: FOR y = 1 TO 200 STEP boxstepă  PAINT (x, y), 8, 15ăNEXT: NEXTăăLINE (60, 19)-(260, 180), 15, BFăFOR i = 61 TO 240 STEP 25ăREAD colr: LINE (i, 20)-(i + 24, 60), colr, BF: NEXTăLINE (260, 19)-(260, 70), 15ăăLINE (61, 61)-(99, 90), 17, BFăLINE (99, 61)-(137, 90), 25, BFăLINE (137, 61)-(175, 90), 27, BFăLINE (175, 61)-(213, 90), 28, BFăLINE (98, 92)-(213, 105), 0, BFăLINE (79, 106)-(259, 123), 28, BFăLINE (200, 106)-(250, 123), 43, BFăFOR x = 0 TO 5ăLINE (195 + x, 106)-(195 + x, 123), 48 - x, BFăLINE (247 + x, 106)-(247 + x, 123), 43 + x, BFăNEXTăăFOR i = 0 TO 24: IF i AND 1 THEN COLOR 15 ELSE COLOR 0ăLINE (170 + i, 106)-(170 + i, 123): NEXTăăFOR i = 0 TO 25: IF temp <= 1 THEN COLOR 0 ELSE COLOR 15ă  LINE (125 + i, 106)-(125 + i, 123): temp = temp + 1: IF temp > 3 THEN temp = 0ăNEXT: temp = 3ă  ăFOR i = 0 TO 34: IF temp < 3 THEN COLOR 0 ELSE COLOR 25 + tempă  LINE (84 + i, 106)-(84 + i, 123): temp = temp + 1: IF temp > 6 THEN temp = 0ăNEXTăăLINE (157, 124)-(157, 150), 0: LINE (163, 124)-(157, 150), 0ăLINE (157, 124)-(163, 124): PAINT (159, 130), 0ăăLINE (160, 60)-(160, 123), 15ăLINE (61, 140)-(120, 160), 101, BFăLINE (61, 161)-(120, 179), 9, BFăcolr = 100: FOR x = 117 TO 180ăcolr = colr + 1ăFOR y = 140 TO 160: PSET (x, y), colr: NEXTăFOR y = 161 TO 179: PSET (x, y), colr + 63: NEXT: NEXTăLINE (180, 140)-(259, 179), 42, BFăLINE (220, 140)-(220, 179), 15ăCOLOR 15: GfxPrint tvtext$, 94, 95ăCIRCLE (160, 100), 118, 15ăăEND SUBăăSUB GfxPrint (txt$, x, y)ăDIM bitmask(7)ăFOR a = 0 TO 7ăbitmask(a) = 2 ^ (7 - a)ăNEXT aăăDEF SEG = &HF000ăFOR luuppi = 1 TO LEN(txt$)ăFOR loopx = 0 TO 7ăFOR loopy = 0 TO 7ăIF PEEK(&HFA6E + (ASC(MID$(txt$, luuppi, 1)) * 8) + loopy) AND bitmask(loopx) THEN PSET (loopx + luuppi * 8 + x, loopy + y)ăNEXT: NEXT: NEXTăDEF SEGăEND SUBăăSUB MakepalăPRINT "wait a moment..."ăăpal2$ = orgpal$: pal3$ = orgpal$ăMYPI! = 8 * ATN(1) / 240ăFOR colr = 0 TO 239ă                R1 = 32 + SIN((colr + 0) * MYPI!) * 31ă                G1 = 32 + SIN((colr + 80) * MYPI!) * 31ă                B1 = 32 + SIN((colr + 160) * MYPI!) * 31ă                R2 = 32 + SIN((colr + 10) * MYPI!) * 31ă                G2 = 32 + SIN((colr + 30) * MYPI!) * 31ă                B2 = 32 + SIN((colr + 50) * MYPI!) * 31ă                OFFSET = ((colr + 16) * 3)ă                MID$(pal2$, OFFSET + 1, 1) = CHR$(R1)  '* REDă                MID$(pal2$, OFFSET + 2, 1) = CHR$(G1)  '* GREENă                MID$(pal2$, OFFSET + 3, 1) = CHR$(B1)  '* BLUEă                MID$(pal3$, OFFSET + 1, 1) = CHR$(R2)  '* REDă                MID$(pal3$, OFFSET + 2, 1) = CHR$(G2)  '* GREENă                MID$(pal3$, OFFSET + 3, 1) = CHR$(B2)  '* BLUEăNEXT colrăCLSăEND SUBăăSUB pal (r, g, b, c)ăOUT &H3C8, căOUT &H3C9, răOUT &H3C9, găOUT &H3C9, băEND SUBăăSUB palsub (Act$, delaytime)ă   SELECT CASE UCASE$(Act$)ă   ' "save","fadein","fadeout","restore","blackout","bw"ă      CASE "SAVE"ă         FOR colour% = 0 TO 255ă            OUT &H3C7, colour%        ' Set color to readă            palr(colour%) = INP(&H3C9)   ' read red valueă            palg(colour%) = INP(&H3C9)   ' read green valueă            palb(colour%) = INP(&H3C9)   ' read blue valueă         NEXTă      CASE "FADEIN"ă         DOă            done% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               Red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if saved palette not in use.ă               IF Red% < palr(colour%) THEN Red% = Red% + 1: done% = 1ă               IF grn% < palg(colour%) THEN grn% = grn% + 1: done% = 1ă               IF blu% < palb(colour%) THEN blu% = blu% + 1: done% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, Red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă            IF delaytime THEN dely delaytimeă         LOOP WHILE done% <> 0ă      CASE "FADEOUT"ă         DOă            visible% = 0ă            FOR colour% = 0 TO 255ă               OUT &H3C7, colour%       ' Set color to readă               Red% = INP(&H3C9)        ' read red valueă               grn% = INP(&H3C9)        ' read green valueă               blu% = INP(&H3C9)        ' read blue valueă               ' Test the color values, decrementing if necessary.ă               ' Set loop variable if colors are still visible.ă               IF Red% > 0 THEN Red% = Red% - 1: visible% = 1ă               IF grn% > 0 THEN grn% = grn% - 1: visible% = 1ă               IF blu% > 0 THEN blu% = blu% - 1: visible% = 1ă               WAIT &H3DA, 8, 8ă               OUT &H3C8, colour%       ' Set color to writeă               OUT &H3C9, Red%          ' write red valueă               OUT &H3C9, grn%          ' write green valueă               OUT &H3C9, blu%          ' write blue valueă            NEXTă            IF delaytime THEN dely delaytimeă         LOOP WHILE visible% <> 0ă      CASE "RESTORE"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, palr(colour%)     ' write red valueă            OUT &H3C9, palg(colour%)     ' write green valueă            OUT &H3C9, palb(colour%)     ' write blue valueă         NEXTă      CASE "BLACKOUT"ă         FOR colour% = 0 TO 255ă            OUT &H3C8, colour%          ' Set color to writeă            OUT &H3C9, 0                ' write red valueă            OUT &H3C9, 0                ' write green valueă            OUT &H3C9, 0                ' write blue valueă         NEXTă      CASE "BW"   'blackwhite is not correctă        FOR c = 0 TO 255ă            a = (palr(c) + palg(c) + palb(c)) / 3: pal a, a, a, că         NEXTă   END SELECTăEND SUBăDieter Folger                  REALTIME PLASMA FOR PB         folger@bamberg.baynet.de       06-18-98 (12:31)       PB                     75   2630     PLASMA.BAS     '-----------------------------------------------ă   ' PLASMA.BAS for Power Basic 3.x (Public Domain)ă   '-----------------------------------------------ă   ' Realtime plasma by T.C.P. of DiABOLiC FORCEă   ' This source is PD. If you use it, credit me.ă   '-----------------------------------------------ă   ' Turbo Pascal -> Power Basic: Dieter Folgeră   '-----------------------------------------------ă   DEFINT A-Ză   DIM Stab1?(0:255),Stab2?(0:255)ă   Setmode                               ' VGA Mode 320x200ă   FOR x=0 TO 63                         ' set paletteă       x3 = x : x2 = x : x1 = xă       SHIFT RIGHT x3,3 : SHIFT RIGHT x2,2 : SHIFT RIGHT x1,1ă       Setpal x,    x3,x,xă       Setpal 127-x,x3,x,xă       Setpal 127+x,x,x2,x1\3ă       Setpal 254-x,x,x2,x1\3ă   NEXTă   FOR x = 0 TO 255                      ' make tableă       Stab1?(x) = CBYT(SIN(2 * 3.14159 * x/255)*128)ă       Stab2?(x) = CBYT(COS(2 * 3.14159 * x/255)*128)ă   NEXTă   i1? = 40ă   j1? = 90ă   DOă       K$=INKEY$ă       INCR i1?                          ' i1 and j1 influenceă       DECR j1?                          ' speed of plasmaă       FOR y = 9 TO 89                   ' 9 -> 89 pixels verticală           i2? = Stab1?((y+i1?) MOD 255)ă           j2? = Stab1?(j1?)ă           FOR x = 10 TO 149             ' 10 -> 149 pixels horizontală               c1?= x-i2? : c2? = y-j2?  ' get coloră               c? = Stab1?(c1?) + Stab2?(c2?)ă               y8 = y : y6 = y : x1 = xă               SHIFT LEFT y8,8 : SHIFT LEFT y6,6 : SHIFT LEFT x1,1ă               Address = y8 + y6 + x1    ' get pixel offsetă               DEF SEG = &hA000          ' VGA segmentă                   POKEI Address, c?     ' write 2 pixelsă               DEF SEGă           NEXTă       NEXTă   LOOP UNTIL LEN(K$)ă   SCREEN 1                              ' back to text modeă   ENDă   '----------ă   SUB Setmodeă   '----------ă   !  mov ax,&h13ă   !  int &h10ă   !  mov dx,&h3D4ă   !  mov al,9ă   !  out dx,ală   !  inc dxă   !  in  al,dxă   !  and al,&h0E0ă   !  add al,3ă   !  out dx,ală   END SUBă   '--------------------------------------------------------------------------ă   SUB Setpal(BYVAL c AS Byte,BYVAL r AS Byte,BYVAL g AS Byte,BYVAL b AS Byte)ă   '--------------------------------------------------------------------------ă   !  mov dx,&h3C8ă   !  mov al,că   !  out dx,ală   !  inc dxă   !  mov al,ră   !  out dx,ală   !  mov al,gă   !  out dx,ală   !  mov al,bă   !  out dx,ală   END SUBă   '=== eof ==================================================================ăRyan White                     PHOENIX (PLASMA-LIKE EFFECT)   bigfooty@yahoo.com             06-18-98 (09:12)       QB, QBasic, PDS        97   3355     PHOENIX.BAS 'Phoenixă'By Ryan Whiteă'bigfooty@home.com  &  bigfooty@yahoo.comă'6-18-98ăă'Yes I'm back for a while making more eye candy for everyone.ă'I now have an even bigger collection of stuff so if you would like toă'share learn etc, just gimme a shout.ăăSCREEN 13ăDEFINT A-WăCLSăDIM c(255, 2), co(255, 2)ăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăn = 0: x = 5ăFOR I = 200 TO 40 STEP -1: n = n + 1: IF n = 256 THEN n = 1ăx = x / 1.003: FOR j = 1 TO 10: CIRCLE (160, I), x, n, , , .5: x = x * 1.003: NEXT jăNEXT Iăăn = 255: x = 5ăFOR I = -10 TO 160ăn = n - 1ăăIF n = 0 THEN n = 255ăx = x / 1.003ăăFOR j = 1 TO 10          '6.28= 2PI= 360deg   so 1.05 = 1/6th a circle.ăFOR w = 1 TO 9 STEP 2ăCIRCLE (160, I), x / w, n, 0, 1.05, .5ăCIRCLE (160, I), x / w, n, 2.1, 3.15, .5ăCIRCLE (160, I), x / w, n, 4.2, 5.25, .5ăNEXT wăx = x * 1.003ăNEXT jăNEXT Iăăă'!!!! BLURSăFOR g = 1 TO 7ăFOR h = 1 TO 99    'this and j will cover one quadrant, which I can use on allăFOR j = 1 TO 159ăă'1st quadăk0 = POINT(319 - j, h)ăk1 = POINT(319 - j - 1, h)ăk2 = POINT(319 - j, h - 1)ăk3 = POINT(319 - j, h + 1)ăk4 = POINT(319 - j + 1, h)ăă'2nd quadăb0 = POINT(j, h)ăb1 = POINT(j - 1, h)ăb2 = POINT(j, h - 1)ăb3 = POINT(j, h + 1)ăb4 = POINT(j + 1, h)ăă'3rd quadăl0 = POINT(j, 199 - h)ăl1 = POINT(j - 1, 199 - h)ăl2 = POINT(j, 199 - h - 1)ăl3 = POINT(j, 199 - h + 1)ăl4 = POINT(j + 1, 199 - h)ăă'4th quadăm0 = POINT(319 - j, 199 - h)ăm1 = POINT(319 - j - 1, 199 - h)ăm2 = POINT(319 - j, 199 - h - 1)ăm3 = POINT(319 - j, 199 - h + 1)ăm4 = POINT(319 - j + 1, 199 - h)ăăc1 = INT((k0 + k1 + k2 + k3 + k4) / 5)ăc2 = INT((b0 + b1 + b2 + b3 + b4) / 5)ăc3 = INT((l0 + l1 + l2 + l3 + l4) / 5)ăc4 = INT((m0 + m1 + m2 + m3 + m4) / 5)ăăPSET (319 - j, h), c1ăPSET (j, h), c2ăPSET (j, 199 - h), c3ăPSET (319 - j, 199 - h), c4ăăNEXT jăNEXT hăNEXT găăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăLeandro Pardini                PATTERN GENERATOR V1.0         lpardini@cefex.com             06-18-98 (17:14)       QB, QBasic, PDS        120  4383     PATTERN.BAS '==========================================================================ă' Pattern generator v1.0                                lpardini@cefex.comă'==========================================================================ă' This is a simple program that captures a screen area of 40x40 pixels andă' rotates it 90 degrees, creating a pretty pattern. This program fills theă' screen with the 80x80 bitmap  they  created. Then  the program saves theă' graphic  in  BMP  format,  using  the  name  "PATT0000.BMP"  (of course,ă' increasing the number). The program continues  until  you  press a  key.ă' The program uses Windows' standard palette.  You  can  use the BMP filesă' they  generate as Windows' wallpapers. Better, you can (like me!) createă' 366 miniwallpapers and then use the PC Magazine's CHANGER utility to setă' a different wallpaper every day. Enjoy!ă'==========================================================================ă'                                         | I like mail, so contact me foră' __________   ____---____                | any  doubt or  suggestion  youă' \_________D /-/---_----'           LL&P | have for this/another program,ă'        _H__/_/          Leandro Pardini | for  get my  last routines, toă'       '-_____|(      lpardini@cefex.com | chat  about  computers  and/oră'                                         | programming or to say "Hello".ă'==========================================================================ăă'$STATICăDEFINT A-ZăăDIM Matriz(1601) AS INTEGERăăRANDOMIZE TIMERăăSCREEN 12ăă'Set the Windows' paletteăOUT &H3C8, 0: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 0ăOUT &H3C8, 1: OUT &H3C9, 32: OUT &H3C9, 0: OUT &H3C9, 0ăOUT &H3C8, 2: OUT &H3C9, 0: OUT &H3C9, 32: OUT &H3C9, 0ăOUT &H3C8, 3: OUT &H3C9, 32: OUT &H3C9, 32: OUT &H3C9, 0ăOUT &H3C8, 4: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 32ăOUT &H3C8, 5: OUT &H3C9, 32: OUT &H3C9, 0: OUT &H3C9, 32ăOUT &H3C8, 6: OUT &H3C9, 0: OUT &H3C9, 32: OUT &H3C9, 32ăOUT &H3C8, 7: OUT &H3C9, 32: OUT &H3C9, 32: OUT &H3C9, 32ăOUT &H3C8, 8: OUT &H3C9, 48: OUT &H3C9, 48: OUT &H3C9, 48ăOUT &H3C8, 9: OUT &H3C9, 63: OUT &H3C9, 0: OUT &H3C9, 0ăOUT &H3C8, 10: OUT &H3C9, 0: OUT &H3C9, 63: OUT &H3C9, 0ăOUT &H3C8, 11: OUT &H3C9, 63: OUT &H3C9, 63: OUT &H3C9, 0ăOUT &H3C8, 12: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 63ăOUT &H3C8, 13: OUT &H3C9, 63: OUT &H3C9, 0: OUT &H3C9, 63ăOUT &H3C8, 14: OUT &H3C9, 0: OUT &H3C9, 63: OUT &H3C9, 63ăOUT &H3C8, 15: OUT &H3C9, 63: OUT &H3C9, 63: OUT &H3C9, 63ăăDOăă'Put random boxes on screen.ăFOR a = 10 TO 0 STEP -1ă   FOR b = 1 TO 50ă      x = RND * (39 - a)ă      y = RND * (39 - a)ă      c = RND * 16ă      LINE (x, y)-(x + a, y + a), c, BFă   NEXT băNEXT aăă'Rotate one triangle.ăc = 0ăFOR a = 0 TO 39ă   FOR b = 39 TO c STEP -1ă      PSET (a, b), POINT(b, a)ă   NEXT bă   c = c + 1ăNEXT aăă'Copy and rotate the two triangles into a 80x80 area.ăFOR x = 0 TO 39ă   FOR y = 0 TO 39ă      PSET (x + 40, y), POINT(39 - x, y)ă      PSET (x, y + 40), POINT(x, 39 - y)ă      PSET (x + 40, y + 40), POINT(39 - x, 39 - y)ă   NEXT yăNEXT xăă'Capture 80x80 bitmap.ăGET (0, 0)-(79, 79), Matrizăă'These FORs copies the bitmap to the screen.ăFOR a = 0 TO 639 STEP 80ă   FOR b = 0 TO 479 STEP 80ă      PUT (a, b), Matriz, PSETă   NEXT băNEXT aăăStartTime& = TIMERăăFile$ = "PATT"ăIF FileNum% < 1000 THEN File$ = File$ + "0"ăIF FileNum% < 100 THEN File$ = File$ + "0"ăIF FileNum% < 10 THEN File$ = File$ + "0"ăFile$ = File$ + LTRIM$(RTRIM$(STR$(FileNum%))) + ".BMP"ăOPEN File$ FOR OUTPUT AS #1ă   PRINT #1, "BM"; MKL$(3318); MKL$(0); MKL$(118); MKL$(40); MKL$(80);ă   PRINT #1, MKL$(80); MKL$(262145); MKL$(0); MKL$(3200); MKL$(0); MKL$(0);ă   PRINT #1, MKL$(16); MKL$(16); MKL$(0); MKL$(8388608); MKL$(32768);ă   PRINT #1, MKL$(8421376); MKL$(128); MKL$(8388736); MKL$(32896);ă   PRINT #1, MKL$(8421504); MKL$(12632256); MKL$(16711680); MKL$(65280);ă   PRINT #1, MKL$(16776960); MKL$(255); MKL$(16711935); MKL$(65535);ă   PRINT #1, MKL$(16777215);ă   FOR b = 0 TO 79ă      FOR a = 0 TO 79 STEP 2ă         v = (POINT(a, b) * 16) + POINT(a + 1, b)ă         PRINT #1, CHR$(v);ă      NEXT aă   NEXT băCLOSE #1ăăFileNum% = FileNum% + 1ăIF FileNum% = 10000 THEN EXIT DOăăWHILE (TIMER - StartTime&) < 5: WENDăăLOOP WHILE INKEY$ = ""ăăSCREEN 0ăSYSTEMăLeandro Pardini                MULTI-SPACED FONT MANAGER V1.5 lpardini@cefex.com             06-10-98 (21:21)       QB, QBasic, PDS        98   6451     MSFONT.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MSFONT.ZIP",4^6:Z&=4566:?STRING$(50,177);ăU"%up()%9%%%#-%^\KCIwi8M;)1%%%VX%%%/%%%%rx%ktsy%SgfxNf)J>[G^7x7dwăU"7h1Rf+e9LU5giA76$[-F\U#67*%7X^&WaWVsaFrLk<:8Q-Drw+^gDuH\BDhJmVnăU"ceT^bnDz^kIQLkHjFcV7,LP8jt2AEY;g9rKi:[giHm+x%.'Vvc'HJ%3tG2;s]'hăU"wl>_^uN./Z$$?Ix?]Yo)Y*s^G=aV^/XVQ#9tqSzL;ejtdool,-:;Bn2;5ad(EO*ăU"Q)3cEOw\h)IP?0s;NYpbM^l6ri8>,ZrX%%lq+/'mwfsqmm1=nt'E=:i2v;q2,;tăU"$uJiKGNr*M^$ldXG9%FJ%F3e2k,rmrIg2Ho.JKm'X[+_:uuorTu0pXW[L&]lnleăU"9&:vw?gU=G[ICvid^In:jQR*o='XL-'>MN30bCn7QJ'A9%#n7%I;C?\LYm,w0q3ăU"GJa<hsfL1&i6?LK'yO3jXAK_AmLW>\=9l6VMrX=dCC+/?'SVc=Ykx]Oa9v5Vv#PăU"QcW(<I=A+Y[_?L*R8*F8Cq*o8gfn<EYVfVxJt9_j\?U[Ic\Nzrgh:0g*RJXq:/HăU"3QI[l$fgrUvZClubU'q4LtIqz.4F5Mtup83BgD%h[A5&bCCY>>36cEmR.V)^_TjăU"U2&EbfQwkLMC#BJtuF--O:l+*icuGUbTiAvn+Kb0W(pp(DBA.&3;&fql*\;25+*ăU"oy,r2t_JQ^oU[AI4ULlA8Vm,\0&gS3I6WO,tyq?DLF?9NFBY+-4\34J7Y5j&-43ăU"g)\p>7mYtDI1%7n.f$_pO*C:dTuSwN$%fifn,V[3]Fk^c#A$m8>el5ZndH.M*L\ăU"2;PdYW(C1fVhfo\Y=_'H6i'S?45VfmJ[+r3du/7o$[bvlUdohx.ZNb.qcgT$U^%ăU"hKl.t9GM*YSMHkqWL(HX3[2N4f)MM)NljD-Z)IkGI:W-.-7oM)\lE90*RGdSMn&ăU"szG.k^sB;a3hZzil(O7QG,&zCHxRwN3.%\.?GG$%GIWkv5bQ0m;;u*Ehb[F1k11ăU"][$V,9he-oTLI1W4$-f^[(2%:iKc,efl;:+ZG/-'$[50/=fkt%psUh&;rEd#8'JăU"+Dn-1]=(.g/LxFJK=A>A[F',JoB?us]q'Fafc,goD'Ud.c;?=&WeTx=a;^r74k;ăU"<8Xex.-'2+5pd8Om5IE%qo'Z_%,yxWb4&f?WDVQ1[)E53;N3H?LETj]iUmBG.WRăU"7e#mhtdj2SGeKAw['f&H;1Kd/INZj&lE+h%z9Ok;Z7&_\+NnK]*7nD[/OQ&6/8căU"K)M=STk87U;%aux\N[[5Rm9^7U+1cR'B]1DT'611Aib+I]YqXeXdf]zc'4XCCB#ăU"w$B9ZP-J'?EGLUMT^(u.&=*8)uO/pboGh$PX]?]M/tmaD0Yl[FoI*,=#jCFDMu)ăU"Ixw*5pu[vj:YQTX1R)8C0o67/SuLI&gLFA[b2U#HZG_=Z0(0+jti<oS(??89QO\ăU"VPf'-P3II/&e6*7t.E'VxBkUgte9*r&5'-lkp8xm+:a^1lt-iT\A^/2H,vKpz6-ăU"?O'$kW*1.:I=c#2B=8.68JnH^%k-UFd_X&EFTn%He?*<'s.3[^09k-E-5kE,GL:ăU"EBx8h8i.-,=h4eeJ&Kem)g)U-D\zre(Sd;\m0A1fH.s;y2?(8PLW+r\TlWrUEJgăU"NFiY#g389mdW#;2HC+#1U=9\=&OWXjbNLAb%bq-]2fXc3UPHPu1;4FIxXMd?;))ăU"nap=[XNZNI00+uqva9](s:N<iJALG+Bg5<,]Y7('eyt(NLO\0O_M;alZaHeGp?2ăU"(CD_aa,1,N[Odt1Y$_E7ioQ*K+G:NGuNEdA#g\.4-N[?qx3dw0&l'R;9#v41K<'ăU"4l]1vb/dDN%c\7Q^'POne5L=S3Vn\oZdLH[t51\)N1G3Yqhj$MjrGBIkN55YF0+ăU"Yo'p03],W^S6,WtDhv%<AA;U4%M</A%(RN1-%,uY[MNZ]Q4.GUTOTRWDRvF[,N<ăU"m7'_0Q[J%W4jATsT%0G)RNT1/0n(ykv?&0?B\?Y/K%'W)\5BcY+jK3?7_GQ8_)<ăU"x3eu:cPO2.9S$re2<[/+F,:?939j'fA(SrF&jR\&XlrqO*g/q(Y6pq8;VGoO*^NăU"Req;5d#]Dww9U1,Vi0z=,%$hLY&,/WqPIO3mldI94KBUUm]hKP9UbI.(4GVWQ0;ăU";m-h3;fDCw\Fx=5FOO.jq4V3v8Gw.Qg=V?U]ao(R$.uZ#?&i1AEY;0(i7cp9Ul8ăU"(tsWC=AVECR+v(uP]4UE].WsZ,.Eu9NHOrSXAUnG<k1k3%DX.1K?v%RBBqAbBAFăU"Q;I2l/5_](,_uL4lsUGyB3#o9NUCyG1hLt(Kw_GC4?0p9o6P6ino+H=XUXj.9V&ăU"dmURUB8Z5<S_r%9LWvC>?H^T_k)OMqQ$Cl)wpo2Ocg0ILct6rpoK'JUXrX69m#VăU"?sbO<#56lGs>^ANt/_f%_ow8ONV$-+i$.?h9f4i:rY7'%Tb]Cv5r+Toc;)gL^h[ăU"=.fH(&BDr/8ksYUBH^+7>I>MAt+Sga38.f8fH6o:z*CII&;D(/U1JMQ]<z#.#wcăU":v8t[^VSM-Z&WF_/p9zP,QUW%?>3NBI?WcB2xa9n^MHQRGF(.Ddvqw\QD$Evs*făU"gXP*p3ZSh4itHN6I*rU#1*3j/or/0DKq2e-GE9be52/24zx\PZ<nD2M_Ak<,0FbăU"%_*qgW3g6<\mq)Rb<p>_k:u]Dnn+i4-8=tn>M7P4IWuInJ,FH8FlRo[:2\lfIQ-ăU"JfZ+40+S^V4[<(R+_VP*300m6/QQSE\JAC+;W(rxX]tSCS1(pU4lg<o).aj=L-<ăU"$v/5Y:TWtdj=q'SM.2NL-i>NC5zM_<6*4Z5AE=%PW(v#;#slnen&m;w$]w^y=ihăU"7KxPYhdF)YSs?ngJI_$wDpprbCijVTXJi.tA02(.c9#C,-JUpjLoax'P6/i/A1NăU"A-MOZXQX[>M6h72w;8A2My?Iv<U$YgUse9Mb#+aYOohYL:7\4D^</YnRrn,^MMBăU"448wOa?L\(LQ8q'?5Mq;7;378*R9[DdhpTGT]vMYv:\cOdD.<pc%l=#OlJnV<=XăU"MGv<6B15Uvc>WLc[J>S*T8ZkHobk,jbiArj[QI=cjhuyP?Ij8=hcvE:bE[>8>p+ăU"tllEsFyi.pP]3uI[>c4>b++atug?&t*t'EQ_XvF%0Celo]'j<uWkOeBqh/p9sL^ăU"GG76Bd]15D:#:T_2wS*ck+wHn5;rfg;y)oQ._uC)&m:=xC;gY1Mm]vl>3[-knFJăU"HXs?O;<tL5>bQmm2G=:)^ob=VWi-O&\9pxh%vW[W=&p3kjC8^S(%k=V&g*:&=0WăU"bq2itmt1$acRh08B%'9rrIvm^a.oE,UtCn1asOK>u99yn'wKFOM^sigJ3eg?5[<ăU"/JB-0c2/pVmRA+eJg$xT1ox*\Z^fVP6d/qFF+GluNRDCY,Y%QjBDGh*Bjo3^<e*ăU"McvJi#w_OW5NYsS#+Z9[#Vp=M^EZ5'[a1aNOeI%9^?yURmPA\U<a_^0&-hm1r1KăU"Mk(2IWMA*)3XXyDCpJHf5Y^9?u]kWA2vtA?uYCw;F]VR0Wv'V.+;^ygacV#1neoăU"=.E6#PxpIK/8[Ew.107\=O<jmh2Sjo3tQ[wUea/p$oS+OUTpBf503w&l5b=3D\8ăU"W7AdB9>Rq-8*hgT=D_cs;:XQdVRQ8*&BgR]wM,.>Wv/sn96txt]cXaPw;f3)/<oăU":.W?#U[t)HeQKs+?IVR*gQaiO-0lFug-U<((KpVU,YjoZCncj'Z^5e6ae<Dk,ZpăU"d>u^7/xot>'v^?u9TI$xj7xfKVCiVAM5c'vxBDJ?;ad>^:5J30l=ho.eh0#Ry0UăU"Q0x?de//Sh_M\u,e\B.iVMFZC5KrDc:rGf_R?PK#g.dkFVUQFVt<2iEa^=Z/R?2ăU"Ejo0)<BhMrW-kh4lOE,.jHc#NIicFd2?j%O+%TI2[7u/OK/+=94Q+%PMaQ>DfpjăU"X:9gI[5E+NFD),1hjZaZC5w:rmiRd-o^v)%k(RM9^7-MLUs\M*&#9y/:K.wcUYTăU"OqPd/FS3_BF(6:#OWI\YdBQOn5V#&]v4G*=Y30,6:kZ796:6LH^i>Nx$4n1mbKWăU"EMJMz+YXlju#Y))COpp[cK#,;mO06PDxHqe%SsFumd8m-Po)Z#DaiHb4Ld8WPaeăU"f/jp2<6T\w3#_N'%up()%9%%%.-%)8dM%Aa)2:u)%%%s.%%%/%%%%xx%jwnk%SkăU"tsT6z*=%A\5Bta<^CI_McD\Wz=:7GuZwJT0d&/;Fsw0ZWT78smbwI&)3ZqBq;>NăU":?$A70:r%#<Sy+&#j/<Bp,.QGK9*?B*-;FnHX]W,ltE\G'W#ABA>3V2^mEd%hD(ăU"8%*zgfHJmFi<MI3X3.,VXDJ9'dX[sC.-S0Y[ktnCZ:;K_s0b1:uQ)-EU.R>-$%lăU"2e(Sj/K8/:F[t0)&1?9J^FVTLx$'JNB5YV0^7$aBl>PCaDCmp>w_pZ9$-sBa5BHăU"BsRq(N]U4\_)<SYGdqN.kB\xiomcpD6U4[$267y6%r6ljD&Cl[3V-<*$jh$uG&iăU"GP+d$.\Tg6&7l]QMDe>ENk82#V/8x#Jphih'E0Ep/t/L=K;HT6VfZ/9AOh&56#:ăU"QG;GQ=<kijTr%$%qMnDG[%evbi8SA*QkO8Y<B%M_ha)Yr?+<kJi?kt2'aRR8IiTăU"jlN21dG*o][q\H=xnKWo)Pf:c451%iG<WIg'LoxgjWlC7UbY<tmS,dk%OiL1.1RăU"y=y'Aay2BVwH4ON\k:m%.[;BKK=eh)lb%=G./.NbKwc?[;mb]*7F[LatJdY*FIcăU"Li=O>=MZDbLQdFb?f8#/36:?[FdIPd-.'Uf\K7JGeQ2<m*eA2nXDoX6PZM1kCK*ăU"aGAa-[JYGaXWb&QW[W3v07.Rs3/SZsl*b1MxC5OUnECZxmI>%)q%;C]OH>i8b-:ăU"XspZ6O3v*=^=k52;87B=ARk&]tNmLn4xS]sK(VxfNK^xi6.(kdlHHvjnk9]Pc8EăU"NWB<,Aq&e7+IGp^JCDe]jaJw2ve]/'QaTv#whYn*^(HKJOc/+X7Ek&cA>4$?vldăU"Tq>VlWm[5-YzN<jlA^5uB\2U_>b6SgL,_$bAL3$3f?&dFD\-b]_ajU8G?l<l\]+ăU"TnR.q$0ZIo??F<_<A6YhG]FngDE]8<OhD<_#:xy$PS2fw9I.vguHE&VTbDaTL^RăU"MX5L.E=Npwh2-s?mnD3=$]plXT/)+FY$cWL4[Z\R:%:T0x*Wmgngo2VgR;Nme4(ăU"y>rz-e1UV5_$oa\xQ^'[l(p;/5y^XjCBW[:LHo=;HWvFHgIFm:.34d'JalURz1CăU"p*BZUU-QfX_5h#yaFRtLhWrSqc%:z8/7?Y:=FzfU0&7L_[A%WBFW;$s=I-D/LrpăU"c8\aNQpQD)(WAkh1*.47so.W?7OqEk8qK5y5'[(vGv]M(-7$1dS,AA0l0FOfCDKăU"8>8PNlhRJGQQCW1#f*U6>JZ?&Rd7tRpR6g1:u=KPWsHDf9Btct/MW%dSY^H4G0[ăU"CdNUratr_Ji+ebcaCr7oSP5EZT*DJZ\w&7Y[U7GtfCp$)5m(.*>v(Qw%;kJG;CTăU"bCwyB&lS-BL$U.\f]9pgd#wkUN-G[Q&MS1TGaDh:f0,76/WJ$uIHC%;G]w*%up&ăU"'%9%9%%%%-%:^\CI2wiM;')1%%%VX%%%/%%%%%%%%%&%E%%%%%%%%%rx%ktsy%SăU"gfx%up&'%9%9%%%%-%&)8M%PAa2:%u)%%%s.%%%/%%%%%%%%%%%E%7%%Q1%%%xxăU"%jwnk%Skts%up*+%%%%%%'%'%&?%%%%u6%%%%%ăEND SUBăCLOSE:IF S=44AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăLeandro Pardini                90 DEGREE KALEIDOSCOPE         lpardini@cefex.com             06-19-98 (18:22)       QB, QBasic, PDS        81   2762     CALEI.BAS   '==========================================================================ă' 90 degree caleidoscope v1.0                           lpardini@cefex.comă'==========================================================================ă' This a simple caleidoscope I created today (06-19-98) at work. It's veryă' simple, and I think that put any comment here will be useless. :-)ă'                                                                   Enjoy!ă'==========================================================================ă'                                         | I like mail, so contact me foră' __________   ____---____                | any  doubt or  suggestion  youă' \_________D /-/---_----'           LL&P | have for this/another program,ă'        _H__/_/          Leandro Pardini | for  get my  last routines, toă'       '-_____|(      lpardini@cefex.com | chat  about  computers  and/oră'                                         | programming or to say "Hello".ă'==========================================================================ăă'$STATICăDEFINT A-Zăă'Initialize random number generator.ăRANDOMIZE TIMERăă'Set graphics mode 640x480.ăSCREEN 12ă ă'Set random values to line's coordinates.ăx1 = CINT(RND * 319)ăy1 = CINT(RND * 239)ăx2 = CINT(RND * 319)ăy2 = CINT(RND * 239)ăă'Set random values to change the line's coordinates.ăx1i = CINT(RND * 4)ăy1i = CINT(RND * 4)ăx2i = CINT(RND * 4)ăy2i = CINT(RND * 4)ă  ă'Set the starting line's colorăc = CINT(RND * 15)ăă'Loop until a key is pressed.ăWHILE INKEY$ = ""ăă   'This will change the line's color every 100 lines.ă   IF cc = 100 THEN c = CINT(RND * 15): cc = 0ă   cc = cc + 1ăă   'This will clear the screen every 10000 lines.ă   'If you don't want to clear the screen, just comment these lines.ă   IF lc = 10000 THEN CLSă   lc = lc + 1ăă   'Change line's coordinates.ă   x1 = x1 + x1iă   y1 = y1 + y1iă   x2 = x2 + x2iă   y2 = y2 + y2iă  ă   'Check that coordinates don't go out of bounds.ă   IF x1 >= 319 THEN x1i = CINT(RND * -5): x1 = 319ă   IF x1 <= 0 THEN x1i = CINT(RND * 5): x1 = 0ă   IF x2 >= 319 THEN x2i = CINT(RND * -5): x2 = 319ă   IF x2 <= 0 THEN x2i = CINT(RND * 5): x2 = 0ă   IF y1 >= 239 THEN y1i = CINT(RND * -5): y1 = 239ă   IF y1 <= 0 THEN y1i = CINT(RND * 5): y1 = 0ă   IF y2 >= 239 THEN y2i = CINT(RND * -5): y2 = 239ă   IF y2 <= 0 THEN y2i = CINT(RND * 5): y2 = 0ăă   'Draw the lines!ă   LINE (x1, y1)-(x2, y2), că   LINE (639 - x1, y1)-(639 - x2, y2), că   LINE (x1, 479 - y1)-(x2, 479 - y2), că   LINE (639 - x1, 479 - y1)-(639 - x2, 479 - y2), căă   'Set here the proper delay for your system.ă   FOR Delay% = 0 TO 4095: NEXT Delay%ăăWENDăă'Restore screen mode and exit.ăSCREEN 0ăSYSTEMăRyan White                     VARIOUS GRAPHIC EFFECTS        bigfooty@home.com              06-20-98 (03:32)       QB, QBasic, PDS        238  15625    FOOTY.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FOOTY.ZIP",4^6:Z&=11449:?STRING$(50,177);ăU"%up()%9%'%7-%9>]MI6\>LPF)%%%g3%%%/%%%%yj%hmst%SgfxWV%X>Ark5M4l[ăU"N=tlS?7?Q':<f0f<Nmpgg%1KE3$29J>=$(PAeB30cVQwnl(A'(F$3l_vKpvev_uăU"#GGEU\?+3,MA*1:+RGS1n?PQ6m+b9T5]gi-?Bj3ulU\iJ6=4[9ov)64GDN4aj;+ăU"7%m%3u*gTg52UIFV'lw+NW\:iG(3*N']bJN]e1,XpGd:kqA#;kx&efK%VLqjaFuăU"upAlY43>7I-G359C?1PXY(W/#+1%L%nq>L1SS[2+J_X^tqLm;D<:RY0K\:c-TljăU"]3,nmNA?0hO47WT7i\TRVi_7,Na>FapZTIZCGRRbO#_6cbjd6E]R\KL[w6[*9Q8ăU"w&uj.mo5?$4>;bk)X'11bC2/_z,T-t:fZEDQib=flK8^zqP-HxomZsHGb1QTrdiăU"]I+3Us0*4ra#''+?$t(u'C;qkRAjB.l#W[/yaCLEQJar#mg;>'*Q9AsL$-hMpvVăU",\i&p5#MKN(7tM2Vs[GWDsx9a0,Q(z61q2#^GFVN'sHL15q(g?uQ\m9Es$r[;qAăU"AdGsr\C6emqfiH*x*njL0gI<GGM(H4T(n2f^uVbj;Dg0XBz0hn5Zt+0AWl=(,bfăU"V;:jua9T2j<a/f^1?wXdk7*3dk,[7%2u#uZ&__f?_I*l<UZt*%2)v]+%mA)&ou/ăU"oI[f;a'$=2?voD59D>F_LPSG4Oh.Ozi^8uV2+<k^kF;I*GEM]G)V9&'?+joBW=DăU"7EbjE<r7^VVO[$JD3ZtnJ,O)+5_o]mygdueXuy\#uw*7.?cQc;kQ^%nms4jg-enăU"*Pum;hl?F3c[g,tf>ReJ&<1Et)_ke%'FyFC+M7<Yz.4Rj(lu+t/tpYtfoL3i*:XăU"nQ\ptMOD6Mv:.W++l<6riW4ey7+e&LAq6'XVO-=:_f/rKx.E)^Y5loDgoAawU1GăU"5dlPz%_lKs*_f\Ohhc45Jpyfs/.Y#O1*leHM9soB0oO>T^Nfn&hm-lh]S;t5Yi:ăU"vCF^2fERF(8RM.MRF]hqH=M;SVsEJ]mxK+kjp>Q6=xB=A;QbaiY_c04Y==&bWQ]ăU"UKA#dqOA[']ei97)z_Zj)VzAKL1*A+[4X2MFItIhtA-/[1TAE$)w3Ergfi<?$J^ăU"tFbY3_O]JL0%$YT^Z7P395cUDmZj5dO^o%w'BqCO6rb_mI*=qll1t'zg9&/.P8căU"_'>,fvqI'u5.*LjHu<C$e<>?ql,\uMKlWrZW/HZ245n.tNj>TFtRg3%675<-_N8ăU"As-1.?UktOg]CdJ</OXH%Jt&H.3?/u_Oz+1gG_YTIvmhJNmu9%81Olf.8xHlM.yăU"7<5*w[RY>TOA2y3\aROt.L<i3(abwMOTgkIXJniH>SdT.tJYMRtIY>Nf:)cxZ$.ăU"2TkvW>Sc*Y>Pm%cNljx2z;(zoH<v(jv4UOkj7WHc'[$Oluv2Flx[\XJS):I0r9.ăU"ALzZ^U\g/ZvlM-zdk>Ss*V*s**Dsp94Iqu>q;2q:oeDgP>Qq8kp/G.DiB%)M%-\ăU"+u#g[c-#B;;(*?etxV-(qQZ&\<cDBfXz+2tFG.1Zgvdb)j#,EqWyZM5>X8?kchqăU",IVCctYdgw%(up(%)9%'%%-%na<MIDpd>+H#'%%d%-%%1%%%%w%fnxm%fwiS[gfăU"x.jzX>LIU5M^YcxZgC5:lilRG^.%:EkmW.W'xfSqR#2xcD8UrsJVZo8$;0#n;,9ăU":0bh>bhgcDNFcnEHZaV?T4]+>adRQq*s(i;#llt1L'lC=o1XbsB/ut-bjlz#BsDăU"FWNMd>&ybe(/lCEz9>VmpuD$c]=_',s;%83%s?1G$^9X014CVBhCW.HclV;59,qăU"A([Em/xxkFPh^7PMZbI5MAo5$d;+Jt,3W%u.<5[sf%M^)g392*o#BI<,,W[o-k/ăU"+\d\*9EG[u1HPDvK:fS;=i;*:ECp[c=lJ'n'?PI3)jGx:I\vliUhIugHMj?q2fOăU"Dr&<>z/PbQsg\wO+E)sgYzG;5N4,lv0Y;g95'LWrhyS/=NZU*iFo5/\UgmJe<I]ăU"Eeeo9w.Q9(5*J9\_Q%:(tlGKU2TN1t&*NB./[Ew_/IPJ5XVU'5rS9qu,bV95WV]ăU"'+xB=9$;5u)JuH<F*O*z&:\L>y#cQyT*f(]IAN;:yL/F<Z$m:&^X9Mqo;KKYuJhăU"gM&39jjEf:y9t_-\<O/)LmAjHt0FN.&kK;7d+)jluZ]YWCid+6:778'<b71kG]păU"A$J;NF/RqKf*MU[.+lpuf^_k\C-feLdg'x$k(bt1Uka&a\H/(J[m>3#XHcoO-xuăU"moU]1CDr1_qe+_[dxRwjWU0Q6d8Ddn0xtA=^1js&b-mOVUIHBv1toIa$*cH?=.EăU"E?p1WkLtW6Y(Yl=kUxW=ceY&#[tTj2n*.7gB^kXA66LZP4vK+-NGCJ5o,w&oh.]ăU"mZwgBKocfYLGNj2L%aL6oP$7qa\7x:17u:)p5\p'3DFZGjXh/qa_MJ2hXc9R(;JăU"VRrYGNTSkGxXO.hM*QC,qDJ?s)7V<>h:5iC.vc(CtRoV*c.7WpA&T&Tbw?^J+9hăU"c]wXj=dGRaWHf5y'8&up%()9%%'%-%8I<MI5eQog%4(%%'L-%%%1%%%%wfnh%twăU"uy%SgfxT.zX>AjU5M4l[N]OzLi=Ps;UsjJcy&:.(Jw\W-v0N6t[T.i*qYlLCN8răU",\rV]#N4:lXVLwEgKcnitj,sPcvT88Eaw^Pk+rytkX^Y*$j9CH\VN1ZdVoFqelkăU"HD#eif)0e%e5X^j]KD=W]YE3HArQs8Y[=Jvk[9BZQ?9Dg^dot_eeamRVm0Gj_G?ăU"A^?exOy+tis/f#'Vy4,5HB\>ORivazuTgNEJ?M'S5]4c/(OLB>/bk#,-,COYKO-ăU"e755kS*z_m.4NK'[B'4A7mz;fMyPMP[u/D9&k%,m(#or%%c'><2#2r3m6&:)9drăU"tr++f5V_wcedsM$I2n;iEdIsMRy[u;jc#K6T$r*(?0#zV88.wXw>bN&<j12s('AăU")\z4ecN'\C[TJzG7I[Tpz%*mpKSOGWH79sQ:DpE(Yd:Y4l>5kQ<Oqo0PJTq2Og5ăU"$d(3DH5^<<&'\s.^dI/o\]+nVOCpYsZD,\$l=QZOn>A%Ro?=c/F0#m2\cS)Z4YPăU"cVEE]gqu4j:<RL/)E3WPlo%Pd<4.(vh4Z240J[=[n0jYh+;D2j:N41ElOA1DS\4ăU"[AO8ioO&581\ugoS0t]GqpdNK'==nSF/'iAl+ZE7O_e]jJ6Vl-UVkc1ac:O)&fUăU"I]fPAN3*)0ek.mjCBc#SPcfM.9=O4ozJfj;IDqZ>uC1[%dRWgULCcY4XO9ty#>[ăU">\UMYQQER'.#]0UYK,NN5Rj*%]$x:e63*1t0bW\PCWUqJr]IZkb#yZkS\#^:B&WăU"VSI8DyNZSX21apwK>v:HR2j2/T;%E*A9+v;MD9]QP*1A9pWgWVPqZt#KET952&5ăU"Fhg=vt6a\)xy7n%wg&':C4WQeMjxCGL3QXA&tq-eqDF49*O.;o=/?j.R$1p..6NăU"9s3;A#ZRa>oBiTgq[:H<OnnSDkJiy0s,jr\Gl#tDs^YfQWLU>RHB(1UF5o^$0HMăU"xu:wp-g3d>:F6Ee$w1O0qiuJs'=lx157OB%L&,Cvdu%p()9%%'%-[%Y=MOIL8-(ăU".<)%+%*2%%%1%%#%ux(%hhtr%gSgfjx.&T,AT[5bL$1xq0jbM8AQD)5G*xn#Xr9ăU"H;q%.Y/aa8DCj):8?l[cwthvsgm')hG3qtI55X,64(3O:%YlFphf8Ct*Mv:6ngXăU"'3da)7*ZS0hf?3t&iC3+.QY9W1uY^+O'D0Ofi7PW=.^Bt(AQcm12aX>gZc(Cr,-ăU"F[JX;uwRe+FYRegW9E0M.3gN4cH49X]\]q/F(IZ,_*];\'jBUxQP7[>^LFPqbCrăU"rP+kLJ'tbX:h>#Tg(OdhRntehxg&I3cWbIa?/9Q^u1E?_'k8-,/R[?KZq2OXUJ^ăU"#]1RHM++KaMNi\>)P+wLQzY4=z*%Knez>+qyg'VKG;__jA%59V;,lJ#nD11aIiCăU"%.F-OZ^&-,Yg'gb$C^5:1:7QD[2jFVqBW7GwQ)9zwKIUS<Oi%j%.Of4OP4*9W*$ăU"BN6T#Okjo'M=coK)Nl_>[a8PUMvO8&h^Y8yF1sax;z,P7kuSk*E1:h5[&OuH%:%ăU"JuPo5C[&X7NRH65jRO_Y1\TS?s%,%_R-)M-%d&\2+]&N9)_k%(_jD.#.MI)J>EfăU"-OP(:\dU9'6c,gTShPP*)>K5;z&m(\S^#MUZg2USWZCIGv$S<_hk#z&<Dl>NG1SăU"tK/rk2DGVhct51a?4#x3*Q3-k9t/-VL?SVb5pPq$bz^;Yp]j'S<T5[W3L2\Z=$2ăU"%0%Y8x[GjFonQT/U8sgN0\rwp=BiS&NiDb*.VPL>l7_tNZ1oLPP8/(<U5t=2F80ăU"ej^8B+u+,B_8ADp2a;9/-gxQC,XNB^A''nRDgu/7X_gmLJ];eAZmL.I8kOKQ6JMăU"CobKnC<OSs/&.K)Nc%)%dyh;g'[zcTBDQ.K(urya+7JZV/#Nmo5b>7_qUmu:.=+ăU"meaT1/[:]1kyPq<8/2Nn9oGyn+y2,mDiBv3^bF;+\'iAsTe#2;W8gFz)A6$\so-ăU"Y6O&m&d_HRuwHMK94KmKWTeA42092FRR3Y_tEj.;W:=_5H91_JTvSvFcWHO0g6NăU"DTP44D>Aa<.'h7&qc9#pD>#8:MN%rw(,R/P14U5ru,y'b>p=jHiGaJXhqZzxQ8VăU"%(44t%XxcZ$VWJ$h0Y;h,*0O>,)i%<o8r/#AoYN^duAL$-8v>1=\Z;-=:XrdweUăU"],O/Nk=Flcg[yDDG++ms5wNHJK?$AA:H$R:MbEqe&lw8rh(GDE,,>BPUyA\&rOxăU";Y?(_$cP2lDUnC#8+8AzHc[^Fkh&XsqQjEuq4C4e)M?ZNi/V;3s+Tja[Hl=lW$FăU"6HPHbu[j=)ZW<6.TG-yTkQ>Z&X<8T^K-q5u1YbS/K^-f?.Eja///%%K(%9Gp-j&ăU"m+oIO[+%np46k$eGM.5?N$0iqJ<^>\d)NS4DuZV4ka;Uc?0'$^Vl5dZ<dp1FWd8ăU"L)#:nex$C5vSuCUIBy9x1%i;(Xk7H^$R2h%Vd;g.ha.iIDywRDLnCU[jDL'mdupăU"%()9%%'%-%7s=MI^T74'&>)%%%O1%%%1%%%%Xixn%srsy%SgfxN&%*BES%5MrP[ăU"w<O_Lxp_eX30<SiQ8IG)7[AP&J8*vEQ./r?s3na']PG6pA,?90/YuEQ$3l4XM4MăU"J%vb1J^&A)=rYqSG5?yGAS.r>3Z(Fp/L1XW:vY07CjBsX(wA0H3\FKJ,)X^s\8săU"D\t+0w3FVH?$O9ZiFGQQG+'w\y$)ZwQ0iUPrA_QE(+)*+S^t2D$(c?\nfr75oHaăU"6^mGp/2^G0>b01Y]%clRpf*8.()v4VcH1Sr2c^+Y1t8O-_30L2:nJ4fq_>?)Z(YăU"7suVanGmP7[Lvib'K0t8J'*pV'seG\/FAeacjPZ5Yntr#PP/:=r-Q;nS^$7W+GSăU"x:4zb)bbJ]e$ou3$ojREQIJnkjbOo6x&FZ*Yrf^ntJiKzyK.#t00>&99>+(Wu:LăU"Y.W;2zGS9=y/iChg-TX2oP&kBOD3;en-r7(g'=]+5'd8>Uxtx_dh^.o%6)3m+_9ăU"b_fM,S%rBFZ4TmN5:bOWWY/uRP\.,2lggR<2T3i>>?%/a7-LZ1?R+a^sgrYhwMUăU"5a=<6<d>]J'St<pGBkTlZ&yG1omxj&0Kt*>.LxFd?Za^LE+JZs4U8Cx-q#&Q,8^ăU"(17u:G&'_Ar1b<$uI<k32QBUf#V<aK39aYU4il72/0)x]n^(H#E=EIQJpA=?aM:ăU"=YLn\L8*F0L]P#e*:eyOL+6FmaA5l18\US0_'1876L#$&ikmZT+,eIK\xlGAyVGăU"rbZy*<w2UMrs=uIOhJ3Lf4zp2iB7zfHVfHmuZ&Ht?&ZFLQrF42521K)Kl=l83YwăU"HVQ>=['Y85,_<HGis7w2RQDDvb#B42oEqC5tjPuh;^ZdXmB#M\JO1wmtfd^Fv)+ăU"_gzONcK)[jBjZf3z)+<%mjlc:7fNbFq\FX\JAO^]j%;aA9,A;[Xax5?lZK3r/eyăU"VjQc[q8#Ak>z]t%8bf)s'GU2KNAIVSJ#otU;sj'+hn_R;_c#1JfK,h%;S4hnI7)ăU"-0Lwq:AAAkTT.m2QmB:\o=DT]h#mI)ldfnPLb(N4CkY9(w-,da7xrVa?'HEQ1eUăU"]<h,XdY).>AQH]$e5ACQTOwZI_V#B'<lVO=/9v^gtJh+E?N,Q<mC]pJad1QTOSoăU";P#g34?<kT3[+&#QRfCIt^k()<Ra4]z9]:[wX(fZBpOQZBN$9^&,Y1-QRb1Qf16ăU"W#9jT+v4X:OKoM]0Cre;O])0sk]bL)JC2Hvr0Ki1UFh[yJscDUy9oA\AS:>.-o%ăU"JRZk([7KoATPXE*r]MHr;,RI5H(LON,Ed+F..Z'vHL0lb_Y7\Nu%R%++V=4>uuaăU":7Uv0qW$cC>^'SYZeP=+AbU:jnAE,-RpeXKJr('e'/hpaX8nI.Ev+Wn.rSz)<A+ăU"U&70?D*-oFMe5Y2/xHa8ch/4K8#-/PJ(r6L;mzc8(wqz=]?obgP+2t07bDsbqs>ăU"gH6m*BVsNQmH#\.\,yk(u%p()9%%'%-[%H?M^IDY_'DP'%(%$)%%%1%%%%uqf%xăU"rfy%WSgfCxDw0)>iu9Tvs;N1]8ez_&;)-hls:O1Nu3/pk8/n+#[hmD$6)*Zb(XLăU">O%/qUd?XHipmJg5L$K;tJb?D0Q3yQ>lxAVcH6)8f;M2[aA&(Gl,uJAs\eK$##%ăU"Ze8JF$'AcJoD'<M*ts=a,Zp$UnGiTU$(Y/2H_AT1c^fr3MaLJ:UCKhdtfUy6Jt?ăU"p=K\%Nv'4ZTa914*W9z*K5Av.K/k)58E.m-jOt:Q=EJuAu>'yTm5l3\\QG.mepNăU")2XaLkNe*e3?1g0jo#:l[[9TQoB>ygL$r.1$_u8hND38](?AKAAk*/Z4oGH>O^9ăU"Mp6:wo0j?guGCm^xdJ_S:rFr2O?GIA,KRj/PPSSfJ8D:uo/.+_Y0Y8+e(eprOVcăU"AoDXI_4UQRE_><Vmks$:Q>$JL'qz6.-#LefHNeHuLZ/1U&Nri(b,d?AONIIst:]ăU"Y:,E&.Qrtvr$L8==#)E%KCImI<t+Z0lIPh-FSeBi4W\GHpOMgY=#&t4uq;BR'-kăU"A;IPARW9gnJtDxJwjee+9GAfsrKl/s&8QAC*e+W]ULG.).e<\K+Y*gOSC;i*qG;ăU"/+_qTO$=Csh<Wr+Yh#k(b)e$xc<H:va,,s>=#<(zgV5oQBh-L.>&j0<:*/ouiakăU"^Q&c?-?LY:%ml&/4sr4;M;&3fs51b9;/O5])M'*P--?-rX=SLU?1s;o;nCoL?)LăU"LK1X\g+bt8%up()%9%'%%-%)?9MIAJ%PpF'7%%H)%%%1%%%%uq%fxrf%yVSg.fxăU"Dw2,^iu^5LLZLdk;i<'EJ/Uy*FEEL%V:KO:r;6sjU-I0NA\oISutEG+5DH.5UBEăU"ghXn?PlQrp\=_hqozCnf0'Z;Frib[pWnva%^5GPi7S1\90b*&1u2T#O/:oyF5N.ăU"rm9GjZ<fKKpU64fEa#TMpk2%YKA7(ilt3AUXFiBgq;Z'e5CJ?pY:+F6S8dW:G(AăU"0Lm,2jgz,=6yhQe4NLAIhep1S1$a1HZwgho0U[oHS>OdtWKem[^VS,F\9T5Me#<ăU"k+fA1H)%>CdxzULhty[%rj3_Yb:d<R/blG2YrTL/^[ha/=<Aj>#B][IF9[ZAL2IăU"bpoCVQB=P#%Acb[+6.4:jwj5imQ]#tW/)6qz.jy)(;m,>Vq4ybg_Q2$1a8?yBCqăU"ydicMz(Lr%wcRhQ[?N?Kl=n(pdk+^6v)CCYeJfytYv]YHf6^sjokRPfPu\j#AXSăU"/*5Yh;;hpP>2o/rhS:=RG/i^bNuF^:sTr+0FH13OXnHZ&>M;SF+MFZ>l1HZZT&yăU"W>xoIBF2=4RGRNfm[Q=U6XTOr?kJU_ql)^y4j_$UePK[uY,if]m=):?O=bU7qRcăU"-jknz9_pDfLnve(V39TBiwBB^O>Arc,Zk?_V*Rvt.?Z7A+e,+4eVAke$?:).k/9ăU"jVSZ+.3d*#JQpaPd.()f8A[Rd=YD3xfhKdZ5+o9s,iA+SS*+zw&u%p()9%%'%-^ăU"%J#MUIA40*Ca*%%%w4%%%1%%%%qtl%tgqz%wSgfOx.&<,B[[5cwG1xq0bbm*AT5ăU"pQ/2_8'(r]W*#c0YZZ_S^9?]Qf9/xTALlNLFsJD(]TSTn3t1maJbrNoW>,62:f4ăU")5jjKgEWoUCYZoYii>d4W^SH:_N]Z,<(M(AI(\.3&n'.a]MA=8SfE,Fb,N*=$,văU"5kZ*ACEL.qF9UE#qTf;DXSj=p14z,+J]m2'HZ=N3K7,xj;G-M,(L)HR%pvRa8O#ăU"#'>q9VgL54#TgMH8_.I>yD&+6i#(IZ]nR,%pmqbP8leNf$X2F-i*RV?ZT[sE%PtăU"OoXY-aY.3fj3K$2zV9,S80B3Cc]3ci*Xk$'BnXT<brSc1fvo+95-Hn5tML1g\^năU"]\7^ahCFNa]IDKbJq/50l_0A\6t.;F>2f=6aeJi/sa.UC0ofci,jcS-w9w$b2HHăU"3BK9*Xq>)[:g]$v3(<JeRb)kK93<DqU^/PyDue=ZYPoR,#oOrT3GV'u&G7GS^AgăU"j2XHA*pX8iqzGXf91bU<DRcGG+0OZmAOZ&-a,YAQ%UD\Y&z5x5t+-RuVGfB*%g)ăU":K'iOOZ(18[G0Oz:M+f^u?3>y,aGF3gUS%V78p:D*3mYfnj\&kc7kUM,92z,t#]ăU"n7k<Gu=mJHJ]rXXvZ>QoF=(eMn(R(^r&gFiJ+JIu+lBED).hQA.:7IX&E+iCP_uăU"J9xIUYP/QAp)Sc(1G;OJU7kFJ_k1hU&tb%Z?Rso%MPcQwLR1J?9Q,j).KvY?rALăU"AJuO<L__AL2.-GkA[lODnySqZB>n5I1tBhJ31D,GVMpYJ1SF4dr2.9JZaMT<MC/ăU"jq4Uro$Juq9JA\w-kwulUF-o]KsO[SP62%wIZNE$8q9tkX&f.w*.%NgIK'hIayIăU"0-U^[G34Iv?&cqJthSCeuWJ#_nr$Tp^7K:JT*]<y7HDTSvhS>]Y&(]5Vje&1\.]ăU"0f5,g?T8[&.3XD8kat25cI-05\Y#^5(I=51A:GM^(NqW4zhBeRPMer0*/H4X](&ăU";NO++feC;5i6jm0aAjetL1IUP>8T;,luhDU;1yYpqXX)xln=O3n=Db/sD/YS\iSăU":f7fNSdiGBw37SRV2moY(0,fH4^C7L#f8sp.v;nDHbv_[y2C?HH)4kS9<xeY.jCăU"k^8EGg_#q%C4Jd?MLgQZa:FSn')<04HJUxJII2/81KVE$8*(t;8BqRbqb\i)=apăU":d.P\-s06nkzjotj=;8IZ$R&swc/&F'QD;(xRL3,pRU?'?3-GOx*C5eFX6,JV<AăU"T514^bSwuJW^seap6-#^jh%dJemYT$:IR5&+j>-\3EC;$&Hqd65Iap]<dOZ8kyOăU"cfmk<kfZK%N9TyOr;w5.;2H-,I>xqG?0+%ZK-%Y7tKf7ht9COQ$C,Gow;QShdLyăU"com[lJCgO;#l&H4.OF+pg8Gbth0(4HC:a]beiF:_I'uhzq?'1:?)XlJLYS$-;iDăU"1La7r>-b\l6?]U-3l'nW=l-EN+ZJM01Bi*:7C^3J:\K^un%=uNQj2lpBr_h(4#7ăU"AOSy[43I.VI*uCZq.fYdy?<iO[d^Q9T::kuDZ8>j5:Wj%=*^6>zkaqF8=a8=8=+ăU"8=8JZHK5_8GFjg<[T=0p0-0,DGkQpQsv2U81?O%K(%IHp-j&ZedsZMn:FIHTX#căU"hcF#\D^.?8,pQuv>+(VAsrndd]^yM0''hi=RH]POrg3-s5Uc/a'>J;<pg/-XM=RăU"]<AFcXTvUX+m>JbdNOtnW<b>8lL?$DwX?2jcFw9W9S^?uVJAG]0<h32t6<UbhG^ăU"tsju7%Hp3Au;a$.97**784JCp;cn.13,]gwA'gkxV2F%sTqdCc<RK7u-2eDu%p(ăU")9%%'%-a%]=MOI3hh,f%(%+%Y-%%%/%%.%h(s%ijjS#gfxLM%0>rRk5v]E=N=l\ăU"y+\YX?1Ut3aA9T(F\z<Os/r:Et<(j?9NeknOTWwHsGQZLF]BaO*4>5lW7hVLBKAăU"xXiG2<_lKw)Ryq9fqq;n5kK1f+az8;+H[Lq%^%Jm*Rgo;;70bPj*RO9AF/O%RVuăU"d.A)PXAo?J-n[A:pNigNI-t9IoA[>kNI;pAi%__+_FI2UQX,f'RhU*Ai1FR>Or\ăU"kR%XsA#U\I'n^yQ\vEH[h]6;T,otbY2wko^%?W3#P3B$zUK>EC=xWlN992(fN)YăU"AMT;)3QXE7;DR-eHc9v0DWCl<M?0L##f(F$:Z*PgOy7ox3m4iB:j9qH6#cO-Eh?ăU"7k%jRZ*<COU&i&Z53\,dRCs=>g+[21ad<V1*l*F[D^M27*S7oC*4$tMs<:D<2[\ăU")uu9/'l[dH+YUX5N8?ax8AEs]#4fb6KXBxET;OU;1[NarYk^q>#tn9hbccox0.JăU"^:pTj5ne=YRt*W6.FBPX.^IbC]8oRcRD(TMh]?^5Y41R%D>uq?j%$^0gLafv(KqăU"p->WQHOu?EU2K5ObFZT)H7:QF[>*i)c4<\_0cQbPfq._wVcG3O%4<U#u2H7$o'YăU"xT3pU.>,MnaE\G;UisP<x3SJLQw28?[4Y^m=Z+z5ls=6bQlNgY[YiUd#hA$xi7WăU"hEG;&q.Uh<Sv'u(m^]f5P/infQrKU>DN>NJ[x,kKKsyZMo9GJXMeeCY)3vq'$N:ăU".EniBKoPNWh_v<R_[n13&Nf9uXH$a>t\YpsYJ6-+g<bR2V*gmhK;&:c1F6maP9?ăU"(<8eCa0H2RY.UTnlx_V8sa?T2fo7i2&g5XVNpqP.D7sM2E'Xq#g$YGugB]q%3o+ăU"U'2RUk0]qHU?zQNeK]=_Bsx$L]U[*#bm4mLlH/D2A'f)ulFY0xjW8)X'9^S?&kjăU"5LG&=\=m#_=/YejsEqh_*8Zi/>m*VbXaG/e=CYWROD]3)&sW[tYnY0(2,$<^\ZHăU"^2012g0i'#H=C^TiJC]^eWJj).:G>X)d?Te9rT3W06GKM^Iu?0t_]>1kD[+3nMvăU"cVQ-?JAc6&hSzc2OEsqH+8wK3/8nB&<NdqD%o_rXCYi,5PV;*P+E-rTpY8isaOxăU"Xv0QM0LN+ev&2.+YgA1/MJi,qQpIH.M578Ii]xb\xGiltAnYO#T;#\'/7rS9rG^ăU"WO3-#-vSl;YbTos4>x<=5E]Nu%p()9%%'%-^%9=MCIJcA&n<'%%%y+%%%0%%%%hăU"tW#kqt&%SgfxVdcT=Aje5UNh$GV[vyZIE[E4U2cwv9F8NOTd-8tf2lT8fIOkAkQăU"A5L6'P0=hZ%MUGQ7rFUivfllo>h2FeZZSRqA*bS$rf?[kI2U465Q5GsSwu';y<văU"^?(Cer))d%R2yfHzp.U34?%Q%EbNAdbbi'R5HQphoY+P5/_p:XxAICK?jZrTx-$ăU"XFZkgf'9RrF7]>1Q:,^E_iYrYaMQ&(eri%$:U6.5:?:KA5-RdXz9.8%F2+K4GGZăU"r:0c1:'4h+.JIbZO]>?'.m/io5?m:j^S:P<jifvZ9e.W9F2vDX(mD;vS06,<2,ZăU"=8PGrdJ9q34S\ARu_#2>#0f[%mcmg-7;,rkU3,6i/]jH1og+VM.pQsEE_9VQu)AăU"[l09j8TlQ*GCto.I8XMeMu4*>)v>TWIj#-*YRfB,QtG)RrO*m#a0pG=Fe,e7aynăU"Matp/_Gp%l#5Tdi8RhC)?iFpu-[xO31ar?^hElLnq0YeMF47cT,FntyAg_ecVhIăU"X=L;R<l6tZJ]tV1dVFmCtb*]>9n$2=r2<Eg8Fe:szF_]TA9#K\$+/744(vYAcwnăU"U;^jHb9k1fBQlIm,(-D=;AABP8l?;THl+>6W%T%RW5Tv8WP,^=$Ux>I=9V.J^:5ăU"2_:bKc;4DHYp4=GYFn2H%X1JWq#K12bHYOpwjcxl*5Kx-66+Gn4u%p()9%%'%-^ăU"%^=MRI*up)p:'%%%Y+%%%0%%#%gt'%htwj%SgfxMDc,>BSU9U9hH^d8kzL?:[/=ăU">S7fV&&8uv>gqcyT,t\I(^:Wy1u)ld$hB1jH2#PKCT8c(L<ebdSrdCY/>cro2%%ăU"aQ\s>p6d\**X>X\i5'NgA[fqNZ+UPxhZAbl0j2^+?mj^j(Gl4b&kTDej<'=PQ7QăU"e&P'i[RQ\[=Z$Ta9LHQRqA'jfR3yG.l8Za#':QnK75k7\m=dsW&,WArl_irnQ%#ăU"rnmE'OfIZF9oJG]lPSSTIPKr9II/X-38';+G8.U1s.%G8u-pDopB5w.T+XD.s?>ăU"YOoG)7h)+RlZWvO.R6bIL/DG)m[),X$*A42Qbnx6>E3cfW+#o[DCBkOnkJ-+DR;ăU"PW=1*=6Pput2BGFDa2ms]LcYj/rCGGQg*U&*;Fx-h:$]\cdy:h.bokbBTjoso)GăU"LZWMt18d#o26]KYM[29FW,OQ,=mRWTBYRgJ*A<Tx;-(004rF[j\M40P4y;QI*L>ăU"(aiI5=mWM#G9-'hTcfS7)qw4Y;xpIubk;q<Te9OH4-sm[Q_SeDeDL$,XZ<d#&UKăU"]\mZ8$?t5[UU]^Z#IMDrA&fiC7/eqvydJwQ&]Sz9nx*NvsTUu>2A8+.M0Az<snkăU"pWA^H1Cunq(L_m4AneP]#:dhbUDdleyI4;Y$;.C.9nvrVXt_<.n_$EXKETaQ-d[ăU"'MUdrF3E#C\l&tj74[MPGp-#M08nE_EuT<A:0v<y]&9_69^S0vXV,l-?.N25;mlăU"lQnq*#RY2ozZc1AD:vDJlWESPB4[kvL.igYh^?Zsdo_*uH0\>.Zc/+DTdu%p()9ăEND SUBăSUB V2ăU"%%'%-^%V?M:Iz]')E;'%(%T*%%%1%%%%uqf%xrfy%ZSgfLxDb.)Bie9l>XhZU$kăU"BC/y[9*/y8lY;<rQ]H*[MhEwHHCINq_Dp%*roH64EWp?-QvufV,$ZW6T'SUs+#dăU"w;r(:O\t1kzEXi'V4wKH_:D^olYteol2d3JK(o35h\BS_oyua/k^N>maC<:%dd-ăU">^wnjQ]?QnYIi>-'DUcH0e[G+G:hs4Me1Fg$7V\f/I:z(^V&u2OV5wCGN7%dXC^ăU"lR;YKbuqcje#UbuWD-b0-iiNM)0^t^a:/IUU_ND\_^#.iKk9>zt(-U7C4,JS&JpăU"Fm+e$K;LB+2n[San%:02/>h:n6&c:)4vCqImmXCY_Fmu?2F?xif7mF0::I]M'PnăU"5i_TeS-Qo#):U\5-.aXSwE*:eLn0iASg_mJg^**x4Y?v__x>zId;P9?hi32#QuYăU"uZ,?CPZl$?1?YhJ$-d\N9JAA05ILv7&_QDS2H#dF1RMCg1\u$\1WEH*+UoJhkK4ăU"MduTcdR[IP.HZ?V.egd;j'(?e8U2opx,T&L#/>D[Vj^R&,80#>28nXv'F8fzl[GăU"t=mXkA=o$Prs-Zi-)6VByDrHrl2=Nh?DdO,gZ9]&;85a87$ImyjeEjS'wCe;ojgăU"bwGhA2C=x,_8_6L5U<KM,gve4Q\UZyOaL?80BP9Hq:\YCVa+\H.)7FnhW9bhefpăU"y+_+j[k8?orUd<;w;T(vZuCx.$tnyW0%54wcLb%WskH:C0FDji=\43('TDp-frbăU"SNHp;9Fe[96wI8^BA5naoB'dU,;M?tH6W^g(]iA:#pOA;-MONoLT)s(NqS<\jkzăU"w%(up&%'W09%%'%-a%9>MRI6\L-PF)%%%g3%%%/%%%%%%%%%&%E4%/P%%%%%y%jăU"hms%tSgf%xup&%'W09%%'%-[%n<MFIDd>-+H'%(%d-%%%1%%%%%%%%%&%Ej%/PnăU"%)%%w%fnxm%fwiS%gfxu%p&'W%09%'#%-%IF<MIe*Qog4[(%%L%-%%1%%%%%%%%ăU"%&[%E%/,Pg,%%%wfn%htwu%ySgf%xup&%'W09%%'%-[%Y=MOIL8-(.<)%+%*2%%ăU"%1%%%%%%%%%&%E4%/PL%0%%u(x(hh%trgS%gfxu%p&'W%09%'%%-%s+=MITS74'ăU">%)%%O%1%%1%%%%%%%%%&[%E%/,P74%%%Xix%nsrs%ySgf%xup&%'W09%%'%-[%ăU"H?M^IDY_'DP'%(%$)%%%1%%%%%%%%%&%EO%/P&%9%%u%qfxr%fyWS%gfxu%p&'WăU"%09%'%%-%)a?MIA%JPpF['%%H%)%%1%%%%%%%%%&[%E%/,P%;%%%uqf%xrfy%VSăU"gf%xup&%'W09%%'%-^%J#MUIA40*Ca*%%%w4%%%1%%%%%%%%%&%Ej%/Pp%=%%q%ăU"tltg%qzwS%gfxu%p&'W%09%'[%-%]a=MI3hhhf%[(%%Y%-%%/%%%%%%%%%&[%E%ăU"/,P,C%.%h(s%ijjS%gfxu%p&'W%09%'#%-%9F=MIJ1cAn<%'%%y%+%%0%%%%%%%ăU"%%&[%E%/)PVG%%%htW#kqt&%Sgfx%up&'%W09%%'%-%8^=MIO*upp&:'%%%Y+%%ăU"%0%%%%%%%%%&%E%</P#I%%%gt&'htw%jSgf%xup&%'W09%%'%-^%V?M:Iz]')E;ăU"'%(%T*%%%1%%%%%%%%%&%EO%/P*%L%%u%qfxr%fyZS%gfxu%p*+%%%%%1[%1%+[ăU"'%%j%N%%%%%ăEND SUBăV2ăCLOSE:IF S=249AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAnders Olofsson                FLAMES EFFECT                  anders.olofsson@mail.bip.net   05-31-98 (19:52)       QB, QBasic, PDS        94   2156     FLAMES.BAS  ' Flames.bas, by Anders Olofsson.ă'ă'             E-mail: anders.olofsson@mail.bip.netă'                     anders.olofsson@zonline.ostersund.seă'ă' Compile for maximum speed!ă' Included with small linebit font-routine.ăăDEFINT A-ZăDECLARE SUB Palet (Attr%, Red%, Green%, Blue%)ăDECLARE SUB fPRINT (sx%, y%, Text$, C%)ăăSCREEN 13ăRANDOMIZE TIMERăă' Set paletteăFOR A = 1 TO 63ă Palet A, A, 0, 0ă Palet A + 63, 63, A, 0ă Palet A + 126, 63, 63, AăNEXT AăăDEF SEG = &HA000ăLINE (55, 100)-(275, 100), 145ăFOR y = 99 TO 50 STEP -1ă LINE (55, y)-(275, y), PEEK(320& * (y + 1) + 175) - 1ăNEXTăăfPRINT 114, 60, "Flame effect", 0ăfPRINT 115, 60, "Flame effect", 70ăfPRINT 69, 80, "By Anders Olofsson, 1998", 0ăfPRINT 70, 80, "By Anders Olofsson, 1998", 70ăfPRINT 50, 120, "Press any key to burn this!", 140ăăWHILE LEN(INKEY$): WENDăDO: LOOP UNTIL LEN(INKEY$)ăăCurrentColor = 20ăDEF SEG = &HA000ăăDOă IF CurrentColor < 140 THEN CurrentColor = CurrentColor + 15ă IF LEN(INKEY$) THEN CountDown = -1ă IF CountDown THENă  CurrentColor = CurrentColor - 25ă  IF CurrentColor < 0 THEN CurrentColor = 0ă END IFăă FOR x = 0 TO 323 STEP 3ă  POKE 320& * 199 + x, CurrentColoră NEXTă  FOR y = 199 TO 0 STEP -3ă   FOR x = 0 TO 319 STEP 3ă    C = PEEK(320& * y + x) - CINT(12 * RND)ă     C = C + PEEK(320& * y - 1 + x + 1)ă     C = C + PEEK(320& * y - 2 + x + 2)ă     C = C + PEEK(320& * y - 3 + x + 3)ă     C = C + PEEK(320& * y + x + 4)ă     C = C \ 5ă    IF C > 0 THEN LINE (x, y - 1)-(x + 3, y - 3), C, BFă   NEXTă  NEXTăLOOP UNTIL CurrentColor < 5ăDEF SEGăSCREEN 0ăWIDTH 80, 25ăCOLOR 14, 4ăLOCATE 1, 2: PRINT " Flame effect "ăCOLOR 7, 0ăPRINT "By Anders Olofsson, May 1998."ăENDăăDEFSNG A-ZăSUB fPRINT (sx%, y%, Text$, C%)ăx% = sx%ăDEF SEG = &HF000ăFOR T% = 1 TO LEN(Text$)ăFOR ty% = y% TO y% + 7ă mask% = PEEK(&HFA63 + (ASC(MID$(Text$, T%, 1)) * 8) + 11 + ty% - y%) * 128ă LINE (x%, ty%)-STEP(7, 0), C%, , mask%ăNEXTă x% = x% + 8ăNEXTăDEF SEGăăEND SUBăăDEFINT A-ZăSUB Palet (Attr%, Red%, Green%, Blue%)ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăDon Schullian                  CIRCLE DRAWING ROUTINE         d83@ath.forthnet.gr            06-08-98 (04:14)       QB, QBasic, PDS        106  3817     CIRCLE.BAS  DECLARE SUB DRAWcircle (Xcen%, Ycen%, Radius%, Colour%, Sdeg%, Edeg%, Aspect!)ăDECLARE FUNCTION fDeg2Rad! (Degree!)ă'ă'    ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·                            GENERIC          ă' ÚÄÄ´          DASoft          ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ·ă' ł  ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¶    Copyright 1998    ł DATE: 1998-06-06 ÇÄ·ă' ł  ł FILE NAME   CIRCLE  .QB  ş          by          ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄ ş şă' ł  ł                          ş  Don Schullian, Jr.                     ş şă' ł  ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ  d83@ath.forthnet.gr                    ş şă' ł                                                                       ş şă' ł                                  Public Domain                        ş şă' ł                                                                       ş şă' ÔÍŃÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ şă'   ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽă'ă'  This routine draws a circle or arc with or without a pie wedge. Theă'  parameters are the same as the CIRCLE command with one exception:ă'  Sdeg% and Edeg% are the starting and ending DEGREEs, not radians.ă'  (I don't think in radians!) 0 degree is assumed to be at the top ofă'  the circle and they proceed around the circle clockwise (to the right).ă'  eg: 90 degrees is EAST, 180 is SOUTH and 270 is WEST.ă'ă'  The STEP value in the FOR/NEXT loop can be adjusted as required dependingă'  on which screen you are using. I've found that values from -.005 to -0025ă'  work with most VESA screens but #13 may not require such fine stepping.ă'ă'  Please, let me know if you experience any problems with this routine.ă'ă'  C'ya,ă'ă'  Donă'.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.ř.řă' ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř ř řăăCOMMON SHARED pPi!:   pPi! = (4 * ATN(1))ăăSCREEN 12ăăLINE (320, 0)-(320, 479), 7ăLINE (0, 240)-(639, 240), 7ăăDRAWcircle 320, 240, 140, 14, 0, 0, 1.51      ' complete circleăDRAWcircle 320, 240, 205, 13, 81, 163, 1!     ' small arc in lower R quadăDRAWcircle 320, 240, 130, 12, 175, -40, 1!    ' pie shape in upper L quadăDRAWcircle 320, 240, 130, 11, 40, 175, 1!     ' complete the arc aboveăDRAWcircle 320, 240, 319, 10, 0, 0, .75       ' one BIG mamaăăDO: LOOP UNTIL LEN(INKEY$)ăăSCREEN 0ăCLSăENDăă' -------------------------------------------------------------------------ă' -------- see CIRCLE help for parameter detailsă' -------------------------------------------------------------------------ăSUB DRAWcircle (Xcen%, Ycen%, Radius%, Colour%, Sdeg%, Edeg%, Aspect!)ăă  IF Aspect! < 0 THENă      Xrad! = ABS(Aspect!) * Radius%ă      Yrad! = Radius%ă    ELSEă      Xrad! = Radius%ă      Yrad! = Aspect! * Radius%ă  END IFă  Srdn! = fDeg2Rad!(ABS(Sdeg%))ă  Erdn! = fDeg2Rad!(ABS(Edeg%))ă  IF Erdn! >= Srdn! THEN Srdn! = Srdn! + 6.28ăă  Xo% = -1ă  Yo% = -1ăă  FOR Rdn! = Srdn! TO Erdn! STEP -.003ă    X1% = (Xrad! * COS(Rdn!))ă    Y1% = (Yrad! * SIN(Rdn!))ă    IF (X1% <> Xo%) OR (Y1% <> Yo%) THENă      Xo% = X1%ă      Yo% = Y1%ă      X1% = Xcen% + X1%ă      Y1% = Ycen% - Y1%ă      PSET (X1%, Y1%), Colour%ă    END IFă  NEXTăă  IF (Sdeg% < 0) OR (Edeg% < 0) THENă    X1% = (Xrad! * COS(Srdn!))ă    Y1% = (Yrad! * SIN(Srdn!))ă    X1% = Xcen% + X1%ă    Y1% = Ycen% - Y1%ă    LINE (Xcen%, Ycen%)-(X1%, Y1%), Colour%ăă    X1% = (Xrad! * COS(Erdn!))ă    Y1% = (Yrad! * SIN(Erdn!))ă    X1% = Xcen% + X1%ă    Y1% = Ycen% - Y1%ă    LINE (Xcen%, Ycen%)-(X1%, Y1%), Colour%ă  END IFăăEND SUBăăFUNCTION fDeg2Rad! (Degree!)ăă  IF Degree! > 89 THEN F! = 2.5 ELSE F! = .5ă  fDeg2Rad! = (F! * pPi!) - ((pPi! / 180) * Degree!) + .0001ăăEND FUNCTIONăPer Larsson                    3D LANDSCAPE CREATOR           www.algonet.se/~emden/         06-21-98 (11:19)       QB, QBasic, PDS        195  6046     3DLAND.BAS  'ă'        ŰŰŰŰŰŰŰ  ŰŰŰŰŰŰŰ          ŰŰ      ŰŰŰŰŰŰŰŰ ŰŰŰ   ŰŰ ŰŰŰŰŰŰŰă'              ŰŰ ŰŰ    ŰŰ         ŰŰ      ŰŰ    ŰŰ ŰŰŰŰ  ŰŰ ŰŰ    ŰŰă'            ŰŰŰ  ŰŰ    ŰŰ  ŰŰŰŰŰ  ŰŰ      ŰŰŰŰŰŰŰŰ ŰŰ ŰŰ ŰŰ ŰŰ    ŰŰă'              ŰŰ ŰŰ    ŰŰ         ŰŰ      ŰŰ    ŰŰ ŰŰ  ŰŰŰŰ ŰŰ    ŰŰ  ă'        ŰŰŰŰŰŰŰ  ŰŰŰŰŰŰŰ          ŰŰŰŰŰŰŰ ŰŰ    ŰŰ ŰŰ   ŰŰŰ ŰŰŰŰŰŰŰă'ă'                           Gizzmet productionsă'ă' This program makes a nice 3D landscape.ă' You can change the variables a bit down to make a supercool-lookingă' landscape.ă'ă' Please tell me what you think!ă' Per Larsson     [eliott@kd.qd.se]ă'ă'ă'ă'ă'ăăDECLARE SUB land.3d ()ăDECLARE SUB initcolor ()ăDECLARE SUB palman (ent!, r!, g!, b!)ăDECLARE SUB smooth ()ăDECLARE SUB greg ()ăDIM SHARED Xsize%, Ysize%, Smoothing%, Water%, Pixelsize%, Scale, Height, Tilt, Landtype%, palettetype%ăăăă'************************************************************************************ă'                                                                                   *ă'     You can change the vaules below:                                              *ă'                                                                                   *        ă        Xsize% = 120        'Xsize of map                                           *ă        Ysize% = 120        'Ysize of map                                           *ă        Smoothing% = 2      'Amount of smoothing. For a funny ,fast map try 0!      *ă        Water% = 3          'Amount of Water (not 0)                                *ă        Pixelsize% = 2      'Size of pixels in first draw (not 0)                    *ă                            '                                                       * ă        Scale = 2           'Size of 3D map, dosen't effect height (not 0)          *ă        Height = 1          'Height of mountins (not 0)                             *ă        Tilt = .2           'Tilted 3D map (0 gives untilted map)                   *ă                            '                                                       *ă        Landtype% = 1       'Type of 3D map                                         *ă                            '1 = Solid map                                          *ă                            '2 = Dotted map                                         *ă                            '3 = Grid map                                       *ă                            '(1 looks best whith low scaling 2 and 3 looks          *ă                            'best on a small map with much scaling)                 *                                              ă                            '                                                       *  ă        palettetype% = 1    'Whith palette?                                         *ă                            '1 = Nature (sea, grass and mountins)                   *ă                            '2 = Gray (grayscale)                                   *ă                            '3 = White (dosen't look THAT good!!!)                  *ă'************************************************************************************ăăăIF Landtype% > 3 OR Landtype% < 1 THEN Landtype% = 1ăIF palettetype% > 3 OR palettetype% < 1 THEN palettetype% = 1ăIF Pixelsize% < 1 THEN Pixelsize% = 1     'Correct invalid vaulesăăSCREEN 12ăRANDOMIZE TIMERăăinitcolor                   'Inizialiting colorsăăgreg                        'Make random mapăăFOR i = 1 TO Pixelsize%     'Black around mapă LINE (-1, -1)-(Xsize% + i, Ysize% + i), 0, BăNEXT iăăFOR i = 1 TO Smoothing%ăsmooth                      'Smooth mapăNEXT iăăland.3d                     'Make 3D mapăăSUB gregăWater% = Water% + 1ăăFOR x = 0 TO Xsize% STEP Pixelsize%ă FOR y = 0 TO Ysize% STEP Pixelsize%ă  vaul = INT(RND * Water%) + 1ă  IF vaul = 1 THEN vaul = 15 ELSE vaul = 1ă  LINE (x, y)-(x + Pixelsize% - 1, y + Pixelsize% - 1), vaul, BFă NEXT yăNEXT xăEND SUBăăSUB initcolorăSELECT CASE palettetype%ăă CASE IS = 1ă GOTO Natureăă CASE IS = 2ă GOTO Grayăă CASE IS = 3ă GOTO WhiteăEND SELECTăăăNature:ăpalman 1, 0, 0, 32ăăFOR i = 2 TO 7ă palman i, 0, i * 2, 0ăNEXT iăăFOR i = 8 TO 15ă palman i, i, i, 0ăNEXT iăăpalman 8, 8, 16, 0ăGOTO okăăăGray:ăFOR i = 1 TO 15ă palman i, i * 2, i * 2, i * 2ăNEXT iăGOTO okăăăWhite:ăFOR i = 1 TO 15ă palman i, 63, 63, 63ăNEXT iăăok:ăEND SUBăăSUB land.3dăSELECT CASE Landtype%ă CASE IS = 1ă GOTO Solidăă CASE IS = 2ă GOTO Dottsăă CASE IS = 3ă GOTO LinesăEND SELECTăăăSolid:ăFOR y = 0 TO Ysize%ă FOR x = 0 TO Xsize%ă  vaul = POINT(x, y)ă  LINE ((x * Scale + y * Tilt) + Xsize% + 8, (y * Scale - vaul * Height) + Ysize% + 8)-((x * Scale + y * Tilt) + Xsize% + 8 + (Scale - 1), (y * Scale) + Ysize% + 8 + (Scale - 1)), vaul, BFă NEXT xăNEXT yăGOTO readyăăDotts:ăFOR y = 0 TO Ysize%ă FOR x = 0 TO Xsize%ă  vaul = POINT(x, y)ă  PSET ((x * Scale + y * Tilt) + Xsize% + 8, (y * Scale - vaul * Height) + Ysize% + 8), vaulă NEXT xăNEXT yăGOTO readyăăLines:ăFOR y = 0 TO Ysize%ă FOR x = 0 TO Xsize%ă  vaul = POINT(x, y)ă  vaul2 = POINT(x + 1, y)ă  vaul3 = POINT(x, y + 1)ă  LINE ((x * Scale + y * Tilt) + Xsize% + 8, (y * Scale - vaul * Height) + Ysize% + 8)-(((x + 1) * Scale + y * Tilt) + Xsize% + 8, (y * Scale - vaul2 * Height) + Ysize% + 8), vaulă  LINE ((x * Scale + y * Tilt) + Xsize% + 8, (y * Scale - vaul * Height) + Ysize% + 8)-((x * Scale + (y + 1) * Tilt) + Xsize% + 8, ((y + 1) * Scale - vaul3 * Height) + Ysize% + 8), vaulă NEXT xăNEXT yăGOTO readyă  ăăready:ăEND SUBăăSUB palman (ent, r, g, b)ăPALETTE ent, 65536 * b + 256 * g + răEND SUBăăSUB smoothăFOR y = 0 TO Ysize%ă FOR x = 0 TO Xsize%ă  c = (POINT(x - 1, y) + POINT(x + 1, y) + POINT(x, y - 1) + POINT(x, y + 1) + POINT(x, y) + POINT(x, y) + POINT(x + 1, y + 1) + POINT(x - 1, y + 1) + POINT(x + 1, y - 1) + POINT(x - 1, y - 1)) / 10ă  IF c < 1 THEN c = 1ă  PSET (x, y), că NEXT xăNEXT yăEND SUBăPer Larsson                    AMOBE PLASMA                   www.algonet.se/~emden/         06-21-98 (11:19)       QB, QBasic, PDS        199  5604     AMOBE.BAS   'Nerladdat fr†n Qbasic Universeă'http://qbu.home.ml.orgă'Flera hundra andra qbasic-program att ladda ner.ăăăăDECLARE SUB quit ()ă'AMOBE.BASă'CODED BY: Per Larssonă'ă'This program demonstrates some palette manipulation stuffă'ă'ă'This is one of those build on programs, thereforeă'the code may seem a little weirdă'ăDECLARE SUB palcycl ()ăDECLARE SUB initpal ()ă CONST PI = 3.141592654#ă COMMON SHARED melă COMMON SHARED band1r, band1g, band1b, band1w, band1pos, band1să COMMON SHARED band2r, band2g, band2b, band2w, band2pos, band2să DIM SHARED palett(255, 2)ă RANDOMIZE TIMERăSCREEN 13ăă        '*** You may change these vaules to find a different pattern ***ăres = 1      'Resolution, higer vaule=faster rendering lower qualityăzoom = 128   'Those two variables changes styleăzoom2 = 64   'and dimention of the patternănoise = 1    'Adds "noise" - try 256 :-)ăăCALL initpal    'fix the cool yellow paletteăă                '*** Paint the pattern ***ăFOR x = 0 TO 320 STEP resă FOR y = 0 TO 480 STEP resă  LINE (x, y)-(x + res - 1, y + res - 1), ((((((SIN(x * (PI / zoom))) * 255) + ((COS(y * (PI / zoom))) * 255)) / 2)) + (((((SIN(x * (PI / zoom2))) * 255) + ((COS(y * (PI / zoom2))) * 255)) / 2))) / 2, BFă NEXT yăNEXT xăăFOR x = 0 TO 320 STEP resă FOR y = 0 TO 480 STEP resă  IF POINT(x, y) = 15 THEN z = 1ă  IF z = 1 THENă  FOR x1 = -1 TO 1ă   FOR y1 = -1 TO 1ă    IF POINT(x + (x1 * res), y + (y1 * res)) > 128 THEN c = 1ă   NEXT y1ă  NEXT x1ă  END IFă  IF c = 1 THEN LINE (x, y)-(x + res - 1, y + res - 1), 0, BFă  LINE (x, y)-(x + res - 1, y + res - 1), (POINT(x, y) + INT(RND * (noise + 1))) MOD 256, BFă  c = 0ă  z = 0ă NEXT yăNEXT xăăăăăDO              'start of main loopăă                '*** Find random vaules ***ăband1rz = INT(RND * 64)ăband1gz = INT(RND * 64)ăband1bz = INT(RND * 64)ăband1pos = INT(RND * 64) * 4ăband2rz = INT(RND * 64)ăband2gz = INT(RND * 64)ăband2bz = INT(RND * 64)ăband2pos = INT(RND * 64) * 4ăband1w = INT(RND * 112) + 16ăband2w = INT(RND * 112) + 16ăband1s = INT(RND * 3) + 1ăband2s = INT(RND * 3) + 1ăIF band1s = 3 THEN band1s = 4ăIF band2s = 3 THEN band2s = 4ăăă                '*** Fade in ***ăFOR i = 0 TO 64ă band1r = band1rz - ((band1rz / 64) * (64 - i))ă band1g = band1gz - ((band1gz / 64) * (64 - i))ă band1b = band1bz - ((band1bz / 64) * (64 - i))ă band2r = band2rz - ((band2rz / 64) * (64 - i))ă band2g = band2gz - ((band2gz / 64) * (64 - i))ă band2b = band2bz - ((band2bz / 64) * (64 - i))ă band1pos = band1pos + band1să band2pos = band2pos - band2să IF band1pos > 511 THEN band1pos = band1pos - 256ă IF band2pos < 256 THEN band2pos = band2pos + 256ă CALL palcyclăNEXT iăă                '*** Main part ***ăband1r = band1rzăband1g = band1gzăband1b = band1bzăband2r = band2rzăband2g = band2gzăband2b = band2bzăFOR i = 0 TO 512ă band1pos = band1pos + band1să band2pos = band2pos - band2să IF band1pos > 511 THEN band1pos = band1pos - 256ă IF band2pos < 256 THEN band2pos = band2pos + 256ă CALL palcyclăNEXT iăă                '*** Fade out ***   ăFOR i = 0 TO 64ă band1r = band1rz - ((band1rz / 64) * i)ă band1g = band1gz - ((band1gz / 64) * i)ă band1b = band1bz - ((band1bz / 64) * i)ă band2r = band2rz - ((band2rz / 64) * i)ă band2g = band2gz - ((band2gz / 64) * i)ă band2b = band2bz - ((band2bz / 64) * i)ă band1pos = band1pos + band1să band2pos = band2pos - band2să IF band1pos > 511 THEN band1pos = band1pos - 256ă IF band2pos < 256 THEN band2pos = band2pos + 256ă CALL palcyclăNEXT iăLOOPăăSUB initpalăFOR i = 0 TO 127ă OUT &H3C7, i: OUT &H3C8, i: OUT &H3C9, INT(i / 2): OUT &H3C9, INT(i / 2):     OUT &H3C9, 0ăNEXT iăFOR i = 128 TO 255ă OUT &H3C7, i: OUT &H3C8, i: OUT &H3C9, INT(64 - ((i - 127) / 2)): OUT &H3C9, INT(64 - ((i - 127) / 2)): OUT &H3C9, 0ăNEXT iăEND SUBăăSUB palcyclă  FOR i = 0 TO 255ă    dist1a = band1pos MOD 256 - iă    dist2a = band2pos MOD 256 - iă    IF dist1a < 0 THEN dist1a = -dist1aă    IF dist2a < 0 THEN dist2a = -dist2aă    dist1b = band1pos MOD 256ă    dist2b = band2pos MOD 256ă    dist1b = dist1b + (256 - i)ă    dist2b = dist2b + (256 - i)ă    dist1c = 256 - (band1pos MOD 256)ă    dist2c = 256 - (band2pos MOD 256)ă    dist1c = dist1c + iă    dist2c = dist2c + iă    IF dist1a > dist1b THEN dist1 = dist1b ELSE dist1 = dist1aă    IF dist2a > dist2b THEN dist2 = dist2b ELSE dist2 = dist2aă    IF dist1 > dist1c THEN dist1 = dist1că    IF dist2 > dist2c THEN dist2 = dist2căă    r1 = band1r - ((band1r / band1w) * dist1)ă    g1 = band1g - ((band1g / band1w) * dist1)ă    b1 = band1b - ((band1b / band1w) * dist1)ă    r2 = band2r - ((band2r / band2w) * dist2)ă    g2 = band2g - ((band2g / band2w) * dist2)ă    b2 = band2b - ((band2b / band2w) * dist2)ă    IF r1 < 0 THEN r1 = 0ă    IF g1 < 0 THEN g1 = 0ă    IF b1 < 0 THEN b1 = 0ă    IF r2 < 0 THEN r2 = 0ă    IF g2 < 0 THEN g2 = 0ă    IF b2 < 0 THEN b2 = 0ă ă    r = (r1 + r2)ă    g = (g1 + g2)ă    b = (b1 + b2)ăă    IF r > 63 THEN r = 63ă    IF g > 63 THEN g = 63ă    IF b > 63 THEN b = 63ăă    palett(i, 0) = ră    palett(i, 1) = gă    palett(i, 2) = bă    ă    IF INKEY$ = CHR$(27) THEN CALL quită  NEXT iăă  FOR i = 0 TO 255ă  OUT &H3C7, i: OUT &H3C8, i: OUT &H3C9, palett(i, 0): OUT &H3C9, palett(i, 1): OUT &H3C9, palett(i, 2)ă  NEXT iăăEND SUBăăSUB quităSCREEN 0ăWIDTH 80ăCLSăPRINT "Code by Per Larsson"ăPRINT "E-Mail    elliott@alfaskop.net"ăPRINT "Homepage  www.alfaskop.net/~elliott/start.htm"ăPRINTăPRINT "Greetings goes to: nuzic & Damn You"ăENDăEND SUBăEverett Arvin                  BOUNCY FIREWORKS               www.algonet.se/~emden/         06-21-98 (11:22)       QB, QBasic, PDS        201  5582     FIREWORK.BAS'Nerladdat fr†n Qbasic Universe.ă'Flera hundra andra qbasic-program att ladda ner.ă'http://qbu.home.ml.orgăDECLARE SUB ResetPal ()ăDECLARE SUB Pal (Pn!, I!, C!)ăDECLARE SUB GetOrigPal ()ăDECLARE SUB RestorePal ()ăDECLARE FUNCTION Bucket! (I!, C1!, C2!)ăCOMMON SHARED C1, C2, C3, C4ăSCREEN 13ăRANDOMIZE TIMERă' Programmed by: Everett Arvin (|Malice| on IRC)ă' Structuring sucks, so if you don't like myă' programming, please feel free to bite meă' This thing was made on a 5x86 133 w/ 16mb ram don'tă' complain about speed problems... Edit the Speedă' variable below.  And for even slower computers oută' out there please edit the MaxExpRad variable too.ă' send questions, comments, etc. to jester@si-net.comă' watch what you didn't think QB could do...ă' Special thanks to Destruct for the Elastic ideaă' Actually it was just some suggestions, but Iă' gave him credit anyways...ă                   'Rec.=RecommendedăElastic = 1        'Elastic fworks! 1=bouncy, 0=not bouncy (1's cool)ă                   '**Note: The fireworks are launched furtheră                   '        and faster when this is on... It addsă                   '        to the elastic effect...ăSpeed = 5000       'Speed of launch >=sloweră                   '{0 - 10000 Rec.}ăMaxExpRad = 100    'Fragments >=more {50 - 500 Rec.}ăGravity = .1       'Gravity >=more {.01 - 2 Rec.}ăTFrag = 1          'Type of fragment: {1 - 4}ă                   '1=Regular dot (default)ă                   '2=Circle      <- these can look funky at times...    ă                   '3=Box         <-ă                   '4=NIN (for those nine inch nails fans :)ăTail = 5           'Length of fragment tail (some bugs occur here) 5's defaultă                   '{1 - 63 Rec.}ăIF TFrag = 4 THEN MaxExpRad = MaxExpRad / 2ăDIM EX(MaxExpRad)ăDIM EY(MaxExpRad)ăDIM EXD(MaxExpRad)ăDIM EYD(MaxExpRad)ăDIM EC(MaxExpRad)ăDIM SHARED OrigPal(255, 3)ăGetOrigPalăCLSăIF Elastic = 1 THEN Inc = 7 ELSE Inc = 2ăExpSize = .01ăDOăX = INT(RND * 320) + 1ăY = 199ăYD = INT(RND * 3) + 2ăIF X > 160 THEN Xd = -(RND * Inc) ELSE Xd = RND * IncăC1 = INT(RND * 7) + 1ăResetPalăC = 1ăLaunch:ăDOă'IF Elastic = 1 THEN IF Y + YD > 200 OR Y + YD < 0 THEN YD = -YDăY = Y - YDăYD = YD - RND * .09ăIF Elastic = 1 THEN IF X + Xd > 320 OR X + Xd < 0 THEN Xd = -XdăX = X + XdăLow = 1: High = 63ăIF TFrag = 1 THEN PSET (X, Y), HighăIF TFrag = 2 THEN CIRCLE (X, Y), 2, HighăIF TFrag = 3 THEN LINE (X - 2, Y - 2)-(X + 2, Y + 2), High, BăIF TFrag = 4 THEN DRAW "BM" + STR$(INT(X)) + "," + STR$(INT(Y)) + "C" + STR$(High) + "d5u5f5u5br2d5br2u5d5e5d5br1bd1u7l16d7r16"ăFOR S = 1 TO Speed: NEXT SăIF TFrag = 1 THEN PRESET (X, Y)ăIF TFrag = 2 THEN CIRCLE (X, Y), 2, 0ăIF TFrag = 3 THEN LINE (X - 2, Y - 2)-(X + 2, Y + 2), 0, BăIF TFrag = 4 THEN DRAW "BM" + STR$(INT(X)) + "," + STR$(INT(Y)) + "C0d5u5f5u5br2d5br2u5d5e5d5br1bd1u7l16d7r16"ăLOOP UNTIL YD = -ABS(YD)ăExplode:ăI = HighăFOR O = 1 TO MaxExpRadăEX(O) = XăEY(O) = YăEXD(O) = RND - RNDăEYD(O) = RND - RNDăNEXT OăDOăFOR Boom = 1 TO MaxExpRadăIF Elastic = 1 THEN IF EX(Boom) + EXD(Boom) > 320 OR EX(Boom) + EXD(Boom) < 0 THEN EXD(Boom) = -EXD(Boom)ăEX(Boom) = EX(Boom) + EXD(Boom)ăIF Elastic = 1 THEN IF EY(Boom) + EYD(Boom) > 200 OR EX(Boom) + EYD(Boom) < 0 THEN EYD(Boom) = -EYD(Boom)ăEY(Boom) = EY(Boom) + EYD(Boom)ăEYD(Boom) = EYD(Boom) + Gravity * RNDăIF TFrag = 1 THEN PSET (EX(Boom), EY(Boom)), IăIF TFrag = 2 THEN CIRCLE (EX(Boom), EY(Boom)), 2, IăIF TFrag = 3 THEN LINE (EX(Boom) - 2, EY(Boom) - 2)-(EX(Boom) + 2, EY(Boom) + 2), I, BăIF TFrag = 4 THEN DRAW "BM" + STR$(INT(EX(Boom))) + "," + STR$(INT(EY(Boom))) + "C" + STR$(INT(I)) + "d5u5f5u5br2d5br2u5d5e5d5br1bd1u7l16d7r16"ăNEXT BoomăI = INT(I - ExpSize)ăIF Tail <> 0 THEN IF I < 63 - Tail THEN Pal I + Tail + 1, 0, 0ăLOOP UNTIL I < LowăCLSăResetPalăLOOP WHILE INKEY$ = ""ăRestorePalăăFUNCTION Bucket (I, C1, C2) STATICăM1 = 0ăM2 = 0ăIF C1 = 1 THEN M1 = I * 65536ăIF C1 = 2 THEN M1 = I * 256ăIF C1 = 3 THEN M1 = I * 65536 + I * 256ăIF C1 = 4 THEN M1 = IăIF C1 = 5 THEN M1 = I * 65536 + IăIF C1 = 6 THEN M1 = I + I * 256ăIF C1 = 7 THEN M1 = I * 65536 + I * 256 + IăIF C2 = 1 THEN M2 = (63 - I) * 65536ăIF C2 = 2 THEN M2 = (63 - I) * 256ăIF C2 = 3 THEN M2 = (63 - I) * 65536 + (63 - I) * 256ăIF C2 = 4 THEN M2 = (63 - I)ăIF C2 = 5 THEN M2 = (63 - I) * 65536 + (63 - I)ăIF C2 = 6 THEN M2 = (63 - I) + (63 - I) * 256ăIF C2 = 7 THEN M2 = (63 - I) * 65536 + (63 - I) * 256 + (63 - I)ăBucket = M1 + M2ăEND FUNCTIONăăSUB GetOrigPal STATICăFOR X = 0 TO 255ăOUT 968, XăOrigPal(X, 1) = INP(969)ăOrigPal(X, 2) = INP(969)ăOrigPal(X, 3) = INP(969)ăNEXT XăEND SUBăăSUB Pal (Pn, I, C) STATICăSELECT CASE CăCASE 0ăOUT 968, PnăOUT 969, 0ăOUT 969, 0ăOUT 969, 0ăCASE 1ăOUT 968, PnăOUT 969, 0ăOUT 969, 0ăOUT 969, IăCASE 2ăOUT 968, PnăOUT 969, 0ăOUT 969, IăOUT 969, 0ăCASE 3ăOUT 968, PnăOUT 969, 0ăOUT 969, IăOUT 969, IăCASE 4ăOUT 968, PnăOUT 969, IăOUT 969, 0ăOUT 969, 0ăCASE 5ăOUT 968, PnăOUT 969, IăOUT 969, 0ăOUT 969, IăCASE 6ăOUT 968, PnăOUT 969, IăOUT 969, IăOUT 969, 0ăCASE 7ăOUT 968, PnăOUT 969, IăOUT 969, IăOUT 969, IăEND SELECTăEND SUBăăSUB ResetPal STATICăFOR C = 1 TO 63ăPal C, C, C1ăNEXT CăFOR C = 64 TO 126ăPal C, C - 63, C2ăNEXT CăFOR C = 127 TO 189ăPal C, C - 126, C3ăNEXT CăFOR C = 190 TO 252ăPal C, C - 189, C4ăNEXT CăEND SUBăăSUB RestorePal STATICăFOR X = 1 TO 255ăOUT 968, XăOUT 969, OrigPal(X, 1)ăOUT 969, OrigPal(X, 2)ăOUT 969, OrigPal(X, 3)ăNEXT XăEND SUBăJohn Mair                      SINUSOIDAL FLOWING TEXT        www.algonet.se/~emden/         06-21-98 (11:25)       QB, QBasic, PDS        34   920      WAVETEXT.BAS'*************************************************************ă'Author : John Mair of SipSoft  #P^bă'If you would like to use this program in one of your programsă'PLEASE give credit where due....ă'*************************************************************ăSCREEN 9ăDIM PI AS DOUBLEăPI = 4 * ATN(1)ătext$ = "Sine"ăDIM TeXtMaTriX(LEN(text$) * 8, 16) AS INTEGERăPRINT text$ăFOR y% = 1 TO 16ă  FOR i% = 1 TO (LEN(text$) * 8)ă   TeXtMaTriX(i%, y%) = POINT(i%, y%)ă  NEXT i%ăNEXT y%ăCLSăcc% = -LEN(text$) * 8ăInC% = 8ăXRaDiuS% = 50ăDOă SCREEN 9, 0, 1, 0ă CLSă IF cc% > 640 THEN cc% = -(LEN(text$) * 8)ă cc% = cc% + InC%ă FOR y% = 1 TO 16ă   FOR x% = cc% TO cc% + LEN(text$) * 8ă	 x2% = (SIN((x% * (PI / 180))) * (XRaDiuS%)) + 270ă	 LINE (x%, (x2% + y%) - 100)-(x%, (x2% + y%) - 100), TeXtMaTriX(x% - cc%, y%), BFă   NEXT x%ă NEXT y%ă SCREEN 9, 0, 0, 0ă PCOPY 1, 0ăLOOP UNTIL INKEY$ <> ""ăAlan King                      ALAN'S PLASMA V5.0             www.algonet.se/~emden/         06-21-98 (11:25)       QB, QBasic, PDS        318  8469     PLASMA.BAS  'Nerladdat fr†n Qbasic Universeă'http://qbu.home.ml.orgă'Flera hundra andra qbasic program att ladda ner.ăăăă'              ============Alan's Plasma Version 5.0=============ă'                           *  Coded by Alan King  *ă'                                November 1996ă'This program creates a plasma effect by averaging two points' colors andă'adds a random "noise" to that value. All created clouds are tileable,ă'meaning the left edge matches the right and the top matches the bottom.ă'ăDECLARE SUB AltrntPal ()ăDECLARE SUB Instruct ()ăDECLARE SUB DrawPlasma ()ăDECLARE SUB LivePalRot (S%)ăDECLARE SUB MakeRGBPal ()ăDECLARE SUB PaletteRot ()ăDECLARE SUB InputCommand (Cmnd$)ăRANDOMIZE TIMERăDIM SHARED StartRes%, StartNoise%, NoiseReduction, TotalColors%, S%, d%ăDIM SHARED ReportTime$, StartI%, StartZ%, Z%, I%, ScreenX%, ScreenY%ăă        StartRes% = 32          'Starting res. Powers of two for best result.ă        StartNoise% = 1         '"Noise" in the paltette transitionă        NoiseReduction = 0      'Reduction of noise per resolution increaseă        TotalColors% = 193      'Total colors. Default 193. Max 255.ă        ScreenX% = 320          'Size of plasma on X-Axisă        ScreenY% = 200          'Size of plasma on Y-Axisă        ReportTime$ = "n"       'Report the elapsed render time (y or n).ă       ăCLS 0ăăInstructăăCLS 0ăSCREEN 13ăREDIM SHARED Pal.G(1 TO TotalColors% * 2) AS INTEGERăREDIM SHARED Pal.R(1 TO TotalColors% * 2) AS INTEGERăREDIM SHARED Pal.B(1 TO TotalColors% * 2) AS INTEGERăăCOLOR 1ăPRINT "INITIALIZING PALETTE...PLEASE WAIT"ăăS% = 1ăd% = 1ăăMakeRGBPal  'MakeRGBPal creates a RGB palette with 193 valuesăăCLSăVIEW (0, ScreenY% - 1)-(ScreenX% - 1, 0)ăăDrawPlasmaăăSUB AltrntPală       ă'This section alternates the "center" of the color bands.ăă        RndmAdj.R% = RND * TotalColors%ă        RndmAdj.G% = RND * TotalColors%ă        RndmAdj.B% = RND * TotalColors%ă        FOR Col% = 1 TO TotalColors%ă        Pal.R(Col%) = Pal.R(Col% + RndmAdj.R%)ă        Pal.G(Col%) = Pal.G(Col% + RndmAdj.G%)ă        Pal.B(Col%) = Pal.B(Col% + RndmAdj.B%)ă        NEXT Col%ăă'This section copies the palette to the second half of the color arrays.ă      ă        FOR PalCopy% = 1 TO TotalColors%ă        Pal.R(PalCopy% + TotalColors%) = Pal.R(PalCopy%)ă        Pal.G(PalCopy% + TotalColors%) = Pal.G(PalCopy%)ă        Pal.B(PalCopy% + TotalColors%) = Pal.B(PalCopy%)ă        NEXT PalCopy%ăăEND SUBăăSUB DrawPlasmaăăCLS 0ăăStart:ăă'This section resets all values in the "start" loopăăX% = 0ăY% = 0ăCurrentI% = 0ăNoise% = StartNoise%ăRes% = StartRes%ăRndmNoise% = 0ăredraw: 'This loop drops the draws a more detailed grid with eachă        'iteration until the resolution <= 1.ăăIF ReportTime$ = "y" THEN TimeStart# = TIMERăFOR Y% = 0 TO ScreenY% STEP Res%ă        FOR X% = 0 TO ScreenX% STEP Res%ă        IF Noise% > 0 THEN RndmNoise% = RND * (2 * Noise%) - Noise%ă        Col% = (POINT(X%, Y%) + POINT(X% + Res%, Y% + Res%) + POINT(X%, Y% + Res%) + POINT(X% + Res%, Y%)) / 4 + RndmNoise%ă        IF Y% + Res% >= ScreenY% THEN Col% = POINT(X%, 0) + RndmNoise%ă        IF X% + Res% >= ScreenX% THEN Col% = POINT(0, Y%) + RndmNoise%ă        IF Res% = StartRes% THEN Col% = RND * (2 * TotalColors%) - TotalColors%ă        IF Col% < 1 THEN Col% = 1ă        IF Col% > TotalColors% THEN Col% = TotalColors%ă        IF Res% > 1 THEN LINE (X%, Y%)-(X% + Res%, Y% + Res%), Col%, BFă        IF Res% <= 1 THEN PSET (X%, Y%), Col%ă        NEXT X%ăăLivePalRot S%ăăCmnd$ = INKEY$ăIF Cmnd$ <> "" THENăInputCommand Cmnd$ăEND IFăăNEXT Y%ă       ăIF Res% <= 1 THENăIF ReportTime$ = "y" THEN PRINT TIMER - TimeStart#: SLEEPăPaletteRotăEND IFăLET Res% = Res% / 2ăIF NoiseReduction = 0 THEN GOTO redrawăNoise% = Noise% / NoiseReductionăGOTO redrawăEND SUBăăSUB InputCommand (Cmnd$)ăSHARED ScreenX%ăSHARED ScreenY%ăă        IF Cmnd$ = CHR$(32) THENă        DrawPlasmaă        END IFă       ă        IF Cmnd$ = CHR$(43) AND S% < TotalColors% THEN S% = S% + 1: GOTO EndInptCmndă        IF Cmnd$ = CHR$(45) AND S% > 1 THEN S% = S% - 1: GOTO EndInptCmndă        IF Cmnd$ = CHR$(8) THEN : S% = TotalColors%: GOTO EndInptCmndă        IF Cmnd$ = CHR$(61) THEN S% = 1: GOTO EndInptCmndă        IF Cmnd$ = CHR$(122) AND d% = 1 THEN d% = 2: GOTO EndInptCmndă        IF Cmnd$ = CHR$(122) AND d% = 2 THEN d% = 1: GOTO EndInptCmndă       ă        IF Cmnd$ = CHR$(97) THENă        AltrntPală        GOTO EndInptCmndă        END IFă       ă        IF Cmnd$ = CHR$(100) THENă        MakeRGBPală        GOTO EndInptCmndă        END IFă       ă        IF Cmnd$ = CHR$(114) THENă        FOR Col% = 1 TO TotalColors% * 2ă        Pal.R(Col%) = Pal.R(Col%) + 1ă        NEXT Col%ă        GOTO EndInptCmndă        END IFă       ă        IF Cmnd$ = CHR$(103) THENă        FOR Col% = 1 TO TotalColors% * 2ă        Pal.G(Col%) = Pal.G(Col%) + 1ă        NEXT Col%ă        GOTO EndInptCmndă        END IFă       ă        IF Cmnd$ = CHR$(98) THENă        FOR Col% = 1 TO TotalColors% * 2ă        Pal.B(Col%) = Pal.B(Col%) + 1ă        NEXT Col%ă        END IFăEndInptCmnd:ă        StartZ% = Z%ă        StartI% = I%ăăEND SUBăăSUB InstructăCOLOR 2ăPRINT "                               INSTRUCTIONS"ăPRINTăCOLOR 2ăPRINT "                       Spacebar:";ăCOLOR 1ăPRINT " Start a new cloud."ăCOLOR 2ăPRINT "                         +  key:";ăCOLOR 1ăPRINT " Speed up color shifting."ăCOLOR 2ăPRINT "                         -  key:";ăCOLOR 1ăPRINT " Slow down color shifting."ăCOLOR 2ăPRINT "                         =  key:";ăCOLOR 1ăPRINT " Return to default speed."ăCOLOR 2ăPRINT "                      Backspace:";ăCOLOR 1ăPRINT " Freezes the cloud motion."ăCOLOR 2ăPRINT "                         a  key:";ăCOLOR 1ăPRINT " Alternate colors."ăCOLOR 2ăPRINT "                         r  key:";ăCOLOR 1ăPRINT " Shift all red values."ăCOLOR 2ăPRINT "                         g  key:";ăCOLOR 1ăPRINT " Shift all green values."ăCOLOR 2ăPRINT "                         b  key:";ăCOLOR 1ăPRINT " Shift all blue values."ăCOLOR 2ăPRINT "                         d  key:";ăCOLOR 1ăPRINT " Use default RGB palette."ăCOLOR 2ăPRINT "                         z  key:";ăCOLOR 1ăPRINT " Dissolve effect."ăCOLOR 2ăPRINT "            Cntrl + Break  keys:";ăCOLOR 1ăPRINT " Exit program."ăăFOR a = 1 TO 8ăPRINTăNEXT aăPRINT "Press any key to continue."ăSLEEPăEND SUBăăSUB LivePalRot (S%)ăSHARED CurrentI%ăIF CurrentI% > TotalColors% THEN CurrentI% = 0ăFOR X2% = 1 TO TotalColors% STEP d%ăOUT &H3C8, X2%ăOUT &H3C9, Pal.R(X2% + CurrentI%)ăOUT &H3C9, Pal.G(X2% + CurrentI%)ăOUT &H3C9, Pal.B(X2% + CurrentI%)ăNEXT X2%ăCurrentI% = CurrentI% + S%ăEND SUBăăSUB MakeRGBPalăă'This section resets the RGB arrays.ăă        FOR Col% = 1 TO 2 * TotalColors%ă        Pal.R(Col%) = 0ă        Pal.G(Col%) = 0ă        Pal.B(Col%) = 0ă        NEXT Col%ăă'Use this section to define the palette colors.ăă        FOR Col% = 1 TO 63ă        Pal.R(Col%) = 63 - Col%ă        Pal.R(Col% + 130) = Col%ă        Pal.G(Col%) = Col%ă        Pal.G(Col% + 63) = 63 - Col%ă        Pal.B(Col% + 63) = Col%ă        Pal.B(Col% + 126) = 63 - Col%ă        NEXT Col%ăă'This section copies the palette to the second half of the color arrays.ă      ă        FOR PalCopy% = 1 TO TotalColors%ă        Pal.R(PalCopy% + TotalColors%) = Pal.R(PalCopy%)ă        Pal.G(PalCopy% + TotalColors%) = Pal.G(PalCopy%)ă        Pal.B(PalCopy% + TotalColors%) = Pal.B(PalCopy%)ă        NEXT PalCopy%ăă'This section substitutes the colors to RGB.ăă        FOR Z% = 1 TO TotalColors%ă        OUT &H3C8, Z%ă        OUT &H3C9, Pal.R(Z%)ă        OUT &H3C9, Pal.G(Z%)ă        OUT &H3C9, Pal.B(Z%)ă        NEXT Z%ăăEND SUBăăSUB PaletteRotăSHARED CurrentI%ăSHARED StartI%ăSHARED StartZ%ăStartI% = CurrentI%ăStartZ% = 1ăDOărestart:ăIF S% <= 0 THEN S% = 1ăCmnd$ = ""ăFOR I% = StartI% TO TotalColors% STEP S%ă  FOR Z% = StartZ% TO TotalColors% STEP d%ă        OUT &H3C8, Z%ă        OUT &H3C9, Pal.R(Z% + I%)ă        OUT &H3C9, Pal.G(Z% + I%)ă        OUT &H3C9, Pal.B(Z% + I%)ă        Cmnd$ = INKEY$ă        IF Cmnd$ <> "" THENă        InputCommand Cmnd$ă        GOTO restartă        END IFă  NEXT Z%ă  StartZ% = 1ăNEXT I%ăStartI% = 1ăLOOPăescape:ăEND SUBăRyan White                     TIE DIE SCREEN SAVER           bigfooty@yahoo.com             06-25-98 (05:45)       QB, QBasic, PDS        85   3172     TIEDIED.BAS 'Tiedieă'By: Ryan Whiteă'Bigfooty@home.com  Bigfooty@yahoo.comăă'Only the best gets out.   8')ă'You'll notice alot of my programs have the same code, just a few differentă'lines.  That is all it takes to make some of the coolest screen savers ever.ă'If you make anything cooler out of this, let me see.ă'                                                     -BFăSCREEN 13ăDEFINT A-WăCLSăDIM c(255, 2), co(255, 2), zr(6)ăzr(1) = 0: zr(2) = 1.05: zr(3) = 2.1: zr(4) = 3.15: zr(5) = 4.2: zr(6) = 5.25ăăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăFOR i = 1 TO 260ăn = n - 1: IF n = 0 THEN n = 255ăFOR x = 1 TO 360ăPSET (160 + COS(x) * i, 100 + SIN(x) * i), năăNEXT xăNEXT iăăă'!!!! BLURSăFOR g = 1 TO 4ăFOR h = 1 TO 99    'this and j will cover one quadrant, which I can use on allăFOR j = 1 TO 159ăă'1st quadăk0 = POINT(319 - j, h)ăk1 = POINT(319 - j - 1, h)ăk2 = POINT(319 - j, h - 1)ăk3 = POINT(319 - j, h + 1)ăk4 = POINT(319 - j + 1, h)ăă'2nd quadăb0 = POINT(j, h)ăb1 = POINT(j - 1, h)ăb2 = POINT(j, h - 1)ăb3 = POINT(j, h + 1)ăb4 = POINT(j + 1, h)ăă'3rd quadăl0 = POINT(j, 199 - h)ăl1 = POINT(j - 1, 199 - h)ăl2 = POINT(j, 199 - h - 1)ăl3 = POINT(j, 199 - h + 1)ăl4 = POINT(j + 1, 199 - h)ăă'4 th quadăm0 = POINT(319 - j, 199 - h)ăm1 = POINT(319 - j - 1, 199 - h)ăm2 = POINT(319 - j, 199 - h - 1)ăm3 = POINT(319 - j, 199 - h + 1)ăm4 = POINT(319 - j + 1, 199 - h)ăăc1 = INT((k0 + k1 + k2 + k3 + k4) / 5)ăc2 = INT((b0 + b1 + b2 + b3 + b4) / 5)ăc3 = INT((l0 + l1 + l2 + l3 + l4) / 5)ăc4 = INT((m0 + m1 + m2 + m3 + m4) / 5)ăăPSET (319 - j, h), c1ăPSET (j, h), c2ăPSET (j, 199 - h), c3ăPSET (319 - j, 199 - h), c4ăăNEXT jăNEXT hăNEXT găăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăRyan White                     STAR PLASUM                    bigfooty@yahoo.com             06-25-98 (05:45)       QB, QBasic, PDS        97   3397     BLMSTAR.BAS 'Star Plasumă'By:Ryan Whiteă'Bigfooty@home.com   Bigfooty@yahoo.comăă'This is just something Bill thought was neat.ăăăSCREEN 13ăDEFINT A-WăCLSăDIM c(255, 2), co(255, 2), zr(6)ăzr(1) = 0: zr(2) = 1.05: zr(3) = 2.1: zr(4) = 3.15: zr(5) = 4.2: zr(6) = 5.25ăăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăx = 160: y = 100: xc = 1: yc = 1: c = 1ăDO UNTIL INKEY$ <> ""ăIF yc = 0 THEN y = y + 1 ELSE y = y - 1ăIF xc = 0 THEN x = x + 1 ELSE x = x - 1ăIF x < 0 THEN xc = 0: x = 0ăIF x > 319 THEN xc = 1: x = 319ăIF y < 0 THEN yc = 0: y = 0ăIF y > 199 THEN yc = 1: y = 199ăăăFOR m = 1 TO 360 STEP 3ăz = z + .01: IF z > 255 THEN z = 1ăn1 = COS(m) * (m / 4)ăn2 = SIN(m) * (m / 4)ăLINE (x, y)-(x + n1, y + n2), zăLINE (x, 199 - y)-(x + n1, 199 - y + n2), zăLINE (319 - x, y)-(319 - x + n1, y + n2), zăLINE (319 - x, 199 - y)-(319 - x + n1, 199 - y + n2), ză'FOR d = 0 TO 10000: NEXT dăNEXT măăLOOPăă'!!!! BLURSăFOR g = 1 TO 4ăFOR h = 1 TO 99    'this and j will cover one quadrant, which I can use on allăFOR j = 1 TO 159ăă'1st quadăk0 = POINT(319 - j, h)ăk1 = POINT(319 - j - 1, h)ăk2 = POINT(319 - j, h - 1)ăk3 = POINT(319 - j, h + 1)ăk4 = POINT(319 - j + 1, h)ăă'2nd quadăb0 = POINT(j, h)ăb1 = POINT(j - 1, h)ăb2 = POINT(j, h - 1)ăb3 = POINT(j, h + 1)ăb4 = POINT(j + 1, h)ăă'3rd quadăl0 = POINT(j, 199 - h)ăl1 = POINT(j - 1, 199 - h)ăl2 = POINT(j, 199 - h - 1)ăl3 = POINT(j, 199 - h + 1)ăl4 = POINT(j + 1, 199 - h)ăă'4 th quadăm0 = POINT(319 - j, 199 - h)ăm1 = POINT(319 - j - 1, 199 - h)ăm2 = POINT(319 - j, 199 - h - 1)ăm3 = POINT(319 - j, 199 - h + 1)ăm4 = POINT(319 - j + 1, 199 - h)ăăc1 = INT((k0 + k1 + k2 + k3 + k4) / 5)ăc2 = INT((b0 + b1 + b2 + b3 + b4) / 5)ăc3 = INT((l0 + l1 + l2 + l3 + l4) / 5)ăc4 = INT((m0 + m1 + m2 + m3 + m4) / 5)ăăPSET (319 - j, h), c1ăPSET (j, h), c2ăPSET (j, 199 - h), c3ăPSET (319 - j, 199 - h), c4ăăNEXT jăNEXT hăNEXT găăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăRyan White                     ANOTHER STAR PLASUM            bigfooty@yahoo.com             06-25-98 (05:45)       QB, QBasic, PDS        101  3722     BLMSTAR2.BAS'Ok... yet another star plasumă'By: Ryan Whiteă'Bigfooty@yahoo.com  Bigfooty@home.comăă'This one is another Bill liked.  BTW Bill is the computer operator at work.ăă'Wait for a while, and when it is in a position that YOU think would beă'neat morphed as a fractal, press space.   Then it blurs, then color phases.ă'Neato   This was made on a pentium 75 with 9 Lan apps open at the time.ăăSCREEN 13ăDEFINT A-WăCLSăDIM c(255, 2), co(255, 2), zr(6)ăzr(1) = 0: zr(2) = 1.05: zr(3) = 2.1: zr(4) = 3.15: zr(5) = 4.2: zr(6) = 5.25ăăFOR n = 0 TO 15ăc(n, 0) = n * 4: c(n, 1) = n * 4: c(n, 2) = n * 4: c(n + 16, 0) = 63: c(n + 16, 1) = 63 - n * 4: c(n + 16, 2) = 63 - n * 4: c(n + 32, 0) = 63: c(n + 32, 1) = n * 2: c(n + 32, 2) = 0ăc(n + 48, 0) = 63: c(n + 48, 1) = n * 2 + 31: c(n + 48, 2) = 0: c(n + 64, 0) = 63 - n * 4: c(n + 64, 1) = 63: c(n + 64, 2) = 0: c(n + 80, 0) = 0: c(n + 80, 1) = 63 - n * 2: c(n + 80, 2) = n * 4ăc(n + 96, 0) = 0: c(n + 96, 1) = 32 - n * 2: c(n + 96, 2) = 60: c(n + 112, 0) = n * 3: c(n + 112, 1) = 0: c(n + 112, 2) = 60: c(n + 128, 0) = 45 - n * 3: c(n + 128, 1) = 0: c(n + 128, 2) = 60ăc(n + 144, 0) = 0: c(n + 144, 1) = n * 2: c(n + 144, 2) = 60: c(n + 160, 0) = 0: c(n + 160, 1) = 30 + n * 2: c(n + 160, 2) = 60 - n * 4: c(n + 176, 0) = n * 4: c(n + 176, 1) = 63: c(n + 176, 2) = 0ăc(n + 192, 0) = 63: c(n + 192, 1) = 60 - n * 2: c(n + 192, 2) = 0: c(n + 208, 0) = 63: c(n + 208, 1) = 30 - n * 2: c(n + 208, 2) = 0: c(n + 224, 0) = 60 - n * 2: c(n + 224, 1) = n * 2: c(n + 224, 2) = n * 2ăc(n + 240, 0) = 30 - n * 2: c(n + 240, 1) = 30 - n * 2: c(n + 240, 2) = 30 - n * 2: NEXT n: FOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năăx = 160: y = 100: xc = 1: yc = 1: c = 1ăDO UNTIL INKEY$ <> ""ăIF yc = 0 THEN y = y + 1 ELSE y = y - 1ăIF xc = 0 THEN x = x + 1 ELSE x = x - 1ăIF x < 0 THEN xc = 0: x = 0ăIF x > 319 THEN xc = 1: x = 319ăIF y < 0 THEN yc = 0: y = 0ăIF y > 199 THEN yc = 1: y = 199ăăăzz = zz + .1: IF zz > 10 THEN zz = .1ăFOR zzz = 1 TO 360 STEP zzăz = z + .01: IF z > 255 THEN z = 1ăn1 = COS(zzz) * (zzz / 4)ăn2 = SIN(zzz) * (zzz / 4)ăLINE (x, y)-(x + n1, y + n2), zăLINE (x, 199 - y)-(x + n1, 199 - y + n2), zăLINE (319 - x, y)-(319 - x + n1, y + n2), zăLINE (319 - x, 199 - y)-(319 - x + n1, 199 - y + n2), ză'FOR d = 0 TO 10000: NEXT dăNEXT zzzăăLOOPăă'!!!! BLURSăFOR g = 1 TO 4ăFOR h = 1 TO 99    'this and j will cover one quadrant, which I can use on allăFOR j = 1 TO 159ăă'1st quadăk0 = POINT(319 - j, h)ăk1 = POINT(319 - j - 1, h)ăk2 = POINT(319 - j, h - 1)ăk3 = POINT(319 - j, h + 1)ăk4 = POINT(319 - j + 1, h)ăă'2nd quadăb0 = POINT(j, h)ăb1 = POINT(j - 1, h)ăb2 = POINT(j, h - 1)ăb3 = POINT(j, h + 1)ăb4 = POINT(j + 1, h)ăă'3rd quadăl0 = POINT(j, 199 - h)ăl1 = POINT(j - 1, 199 - h)ăl2 = POINT(j, 199 - h - 1)ăl3 = POINT(j, 199 - h + 1)ăl4 = POINT(j + 1, 199 - h)ăă'4 th quadăm0 = POINT(319 - j, 199 - h)ăm1 = POINT(319 - j - 1, 199 - h)ăm2 = POINT(319 - j, 199 - h - 1)ăm3 = POINT(319 - j, 199 - h + 1)ăm4 = POINT(319 - j + 1, 199 - h)ăăc1 = INT((k0 + k1 + k2 + k3 + k4) / 5)ăc2 = INT((b0 + b1 + b2 + b3 + b4) / 5)ăc3 = INT((l0 + l1 + l2 + l3 + l4) / 5)ăc4 = INT((m0 + m1 + m2 + m3 + m4) / 5)ăăPSET (319 - j, h), c1ăPSET (j, h), c2ăPSET (j, 199 - h), c3ăPSET (319 - j, 199 - h), c4ăăNEXT jăNEXT hăNEXT găăDO UNTIL INKEY$ <> ""ăFOR n = 1 TO 255: OUT &H3C7, n: FOR m = 0 TO 2: co(n, m) = INP(&H3C9): NEXT m: NEXT năc(255, 0) = co(1, 0): c(255, 1) = co(1, 1): c(255, 2) = co(1, 2)ăFOR n = 1 TO 254: FOR m = 0 TO 2: c(n, m) = co(n + 1, m): NEXT m: NEXT năFOR n = 1 TO 255: OUT &H3C8, n: FOR m = 0 TO 2: OUT &H3C9, c(n, m): NEXT m: NEXT năLOOPăMatt Gulden                    FAST FIRE EFFECT               www.thrillhaus.com/basic.html  06-29-98 (00:08)       QB, QBasic, PDS        101  2744     QBFIRE.BAS  ' QBFiRE.BAS by Matt Gulden (aka Folter) -- mattg@thrillhaus.comă' This file originated at www.THRILLHAUS.comă' Fastest QB fire! Probably...ă' Compile to EXE and it's like 5 times faster. The EXE should be included ină' the zip. If not, grab it at www.THRILLHAUS.com/source/qbfire.zipă' My favorite, at least :)ă'ă' A couple of reasons of why it's so fast:ă'ă'   1) Doesn't PSET, it POKEs to video memoryă'      To do this you only need to DEF SEG = &HA000, then to draw theă'      pixel, just do POKE Y * 320 + X, COLOUR.ă'   2) Doesn't read from the screen. Instead it stores the fire in ană'      array and reads from that. Reading from the screen is SLOW.ă'   3) Uses integer division... Use a backslash instead of a frontslashă'   4) Screen is modified to 320x100 so the fire looks bigger.ă'ă' This is PUBLIC DOMAIN! But pleace give me credit if youă' modify and redistribute this or make a demo out of it or whatever!ăăDEFINT A-ZăDECLARE SUB pal (a, r, g, b)ăăDEF SEG = &HA000ăăCONST StartX = 0ăCONST EndX = 319ăCONST StartY = 40ăCONST EndY = 105ăăDIM fire(StartX TO EndX, StartY TO EndY) AS INTEGERăăSCREEN 13ăă' Modify screen to 320x100ăOUT &H3D4, 9ăOUT &H3D5, 3ăă' Set kewl fire colorsăFOR num = 0 TO 63: pal num, num, num \ 2, 0: NEXTăFOR num = 64 TO 127: pal num, 63, num \ 2, 0: NEXTăFOR num = 128 TO 191: pal num, 63, 63, num \ 2 + 31: NEXTăFOR num = 192 TO 255: pal num, 63, 63, 63: NEXTăăCOLOR 191ăLOCATE 2, 13: PRINT "Folter's QBFiRE"ăăWHILE INKEY$ = ""ă ă  ' Creates line of randomly colored pixels on bottom of screen.ă  ' This will be our "seed" line.ă  x = 0ă  DOă    x = x + RND * 10ă    IF x > 319 THEN x = 319ă    fire(x, EndY - 1) = (RND * 250) + 50ă  LOOP UNTIL x = 319ăă  FOR x = StartX TO EndXă    FOR y = StartY TO EndY - 2ă     ă      ' Gets the average of 3 pixels and decrements, and plots pixelă      IF x > 0 AND x < 319 THENă        PixelColor = (fire(x - 1, y + 1) + fire(x, y + 1) + fire(x + 1, y + 1) + fire(x + 1, y + 2)) \ 4 - 3ă      ELSEIF x = 0 THENă        PixelColor = fire(x + 1, y)ă      ELSEIF x = 319 THENă        PixelColor = fire(x - 1, y)ă      END IFă      IF PixelColor < 0 THEN PixelColor = 0ă      fire(x, y) = PixelColoră      IF y < 100 THENă        POKE y * 320 + x, PixelColoră      END IFă     ă    NEXTă  NEXTăăWENDăăDEF SEGăSCREEN 0ăWIDTH 80ăăPRINT "QBFiRE by Folter"ăPRINT "Have you ever seen a better fire effect done in QuickBasic?"ăPRINT "I'll answer that for you... No, you haven't ;)"ăPRINTăPRINT "Hehe..."ăPRINTăPRINT "QBFiRE by"ăPRINT "Matt Gulden (aka Folter) -- mattg@thrillhaus.com"ăăENDăăSUB pal (a, r, g, b)ă  OUT 968, aă  OUT 969, ră  OUT 969, gă  OUT 969, băEND SUBăAnders Olofsson                DOS '97 (GUI)                  anders.olofsson@mail.bip.net   06-28-98 (19:52)       QB, QBasic, PDS        807  53391    DOS97V10.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"DOS97V10.ZIP",4^6:Z&=39825:?STRING$(50,177);ăU"%up()#9%'O7-%1QA8AK#-].N*%%%%5%%%-%%%%xf%sxSkIsyL&(t:H\79D+Ukv:ăU"jWgi2aDMMOpT23oR2ap8gh+h0qTgh:IA.?O5\Gfv-Tkt$-s.B;U=JC?A+(1Ers$ăU"jt9<,QP,XrcJst2ssLs3)NIt-KtTNnHifF%D\\DuWXU-O+DdckZ&c&)d7+EM-k)ăU"KD)?/(V(=0*K?oV*bgE=l2JOWfOwJEPd#Ex:r+Mr+dSbNjlw<Vp+0<dDtLrN5(,ăU"iLkg=w3&q,NsndY,iffgZMlHcFPoFD04lrRk&Cb<2Wkt>4tVn0]egH40/nqsrlBăU"#U^DtdLsLI-6./L9.Kq[Qd(%z5.H_9*]qO?(FiG8DkG:,=;&Pw3EkN19i#;uU[3ăU"=J(n-2zUs2ODTVeYZ,)OTa[aR/GqVPa;>HZ\:46=ui_4[c.c.LvLp1\sPiSA#T0ăU"jYLLZ1.Y%n3Q(=L$\Yu=N'P5W(:&JVm&:ALEzW40?]eNt1W;3ScJNQ3r7bVIWF8ăU"n?)DF]%nvd8e>-g1HTeDS[2<P_mfa1I3[1?]aRLY.ZkR1;'s&Z[3WT/A4.8w%=0ăU"ZODt/7/R]fT]Zc\h;_G6leBt1):OD+tCG:RtO8[,MCC-1nX7t..X_Q\#D6<nTe:ăU".(OsV?c'md<SId9&h'r396uMDl5vVGV6s<lVlNTDR#FeKb00XtrR9)ntp,:Ps$eăU"-UWfe6dfhQhv<)b%;Rmkw0pd;gu$s+=[K=cqnrZNUirJX\pl:uyAIw\.)VLh0V?ăU"'8IyNTI%7r.a/'g9Zd.rN&DsHn]Xl_NlYwoD2RwI/B;%;[,8OdXht']vkIxRj7DăU"$IbCn6cUNPsq&TX?,.2%+>,w<ssrh^.MZ]].[Ydy4s/Bj(Xv5$h[/NQ.WWbqzTMăU"IovFNuNyszCYOuvZY[en$AdFdA:ac<d,+B70V^0qlf'i8wC:7GYuboB4L\_,JdFăU"TlHgML^EK4+Cjl5)N\V&%a+KIGO<_N9SY,Jnt79]'p-aXjhp[uDH$5NdF44Q0E]ăU"JBGVpyfnGgc*?4&DQRz;npQwQV8La0Ag1DLgTEI<'+#YjM^C$%:=\68YE7<6_4oăU"'<idFIA4?D+OvmG1Z#i%z,,Q-?/-BKc=kogdLBO=SP(Z/geA4Wa^4S?adllkSr3ăU"meD]np/Pd$D$]V-\gR+R[8UBo8*aZ0u)E0teXQ(cOT^Zq3eaq)tq^DF8N(NU2EuăU"bsn1Xu]t>o^E]bO?,\aBq<qTMC=PNw_.sT7%2U;zRVY^8I?Z/DEp\:HwTAM^&I,ăU"1?QA(Pk3)S%y:bMP#pJih,G+X9v[JGT3?CalMT4,S;SBAhOitwur>0Zc$4d<rH.ăU"(<14Ji3:6AqwQLWK*^RU%#uktMB<#3U6lkpxDA,XW_;:$KL/9&VmExZem.V>n9iăU"*KG_.JWmD^n.iwo1/m8WCv:=TLa]NLs3C=VL]_.O*w$-lWEFk]?_>rgP-.?Koj0ăU"gO+o-GTxN3G3]n8Yq.Us)lQ8#5EUIWqJScrOAE6b^gMk5Hf\2clc?MX7l&MlGhkăU"VR4P/rA;C9(Iokv:LX?pH/LThXl3H[]'?W6u78M(x.?5X8O3$qQGp=vUgD>\HZ_ăU".$v>c]8DAo-7>ap1&N9Pbrh](+OUaDaLJ*Iqh2x;N$TDa92c4K>5'T;t^Y^pB1FăU"Qf3Dh.453bR*Dis$dRzdun$#YB)gdmz4-VXrx&]rTHYp9\N+.FYqFD'NH,Yw*u%ăU"p()9.%'O-#%gYM.G?x$'tN)%%%%-%%%,%%.%]']%SksyRrz69%Il5S%IXs+D8lZăU"77^^I(XY/Rjho(P1f9T?Bgj\3Sm/+,JZ3:f$bcd&5'Z*sA%$:1-(K9[a.3k-[baăU"+hJ3WOVCS&zpkM+rlity'wcN0*_wu3rl_)=Dxz7h$Ud%2z>g,?>)KhT2-1/Q9=7ăU"%:3eMdJ%UZ9bCf,su_eERM=g&hFFztuZid<ZX6p%L>2cwZ=bpvdwSm0/&<&<[<dăU"dOqzFcbOn6*,Y>4I<W(0h/FC_,J)W).vgN0W9o9zTw2ECC)3lZqQ^0>^O)y1$Y4ăU"#Q--)o&j&nXa]A4ecoJ5(PDBh_lg:Jk%T,,0-9]_j^I&Ad7IcP4BA(C+Ko_Q'/HăU"V^e\<KdYuc>-k:TfWdifS*M)p&9q8q25/Mo1j&C-CC6k;o)N#KFuDJ37=+P%\B4ăU"l,AgF$I)RcT-^Oa#CvGymFNp*LV^mI<3gZ)%IJ#)eAZX'BqA$2'UoixMi5:uKeCăU"6xijaO87oKY,,R;V9ZrJ$XJ464VGgCiTXD<_MEJoGpeEkt.SDlj52M_Qn.hR*$<ăU"CQ\TTR5BCVq[l$Jc/UY^i['^^\&AitFK/7?7C2FjDhMD;iu4QQnk:aChDiec4S5ăU"6vEVStax]N1mx^oUo9VaD;L=AJx;Wa*%j4lIUYh<InNi7;Mra'T(p(7GQGX=?8IăU"E'^])[PFW0.=Z_hmooZs#JCAee9^Cdykcsh[d*EDWB*^sySS*#h<L]5Qc-_')GeăU"m%mU/O5rm1=Hl7]$'e-;D&CneK[L-Y:i_1NNo=h8jZUiK/0wDP5:zKANH]U,juVăU"NuxVxDc*NvG_G+_/OO'c2sCx51rO&Xe2O[Xbt5BpoXf>n*LgTvA7ukb=/S/wjzTăU"1xi,8Ulb0ETNj7pz=aVd*^Fr1yfl*hUVJ_B$QQC=Dy:Ct(1\IHbpUn_vkQiJ&*6ăU"*%SGMKuzLG-HW[_V7=rTw[^PZl*T;VE.s8P>,HEq:0V/?x/f?'_)UX,xhp%8t:>ăU"jWv?UNf'%A>BrH\d)uDS%obrGo/k]-)8Xhe$B=/uNOwX2l\PPeto1'iFtjq5vmPăU"cxu7?DjgD,IXn$F5$u'F5EUXDn4['nHfmfkSrT44iZ^$Zs.aa7wVd8T=?X=Vc26ăU":M^dnVJk[GuFq(^FNh_davwAfcjv^&f,C4Oo\_d>OMH5r9vUsp[NUSr?\n\TijkăU"un4F[WV]WVT/7#7jrk^mkaIUv+QQju#.GCepA7h(?W72EBYkO%vrbZd>Fj(H.[>ăU"wXc].dYO$9]_B3:,_q?L,?\KQGl6?KGAmzqb#7aN3qzh;=8ucI]_Ih)S^D<fQ-wăU"aeT,hH4Wv*qhhsj%1EHNT6tC.;U8D/INxMDuN]^b>,<E<Ne<]zY%dup(%)9%'&OăU"-%h(YMGo$Z49L%+%%%%5%%/%%%%x#hwf&%qSksLyD&>&7#l;oXM3.VpJ+i/eWt_ăU"GJT8=LdSExqR>LTW's.#j7iVt2_M7VBfk;A[pj5po#:7F2)a\ON$A#a^0+2POPUăU"#.Tgxsp%5m'P'BMsH]Ugpd9Kd1IF]^]Y3Z]13tlpWeZEeG=[StEbZ0h6hs\hv_QăU"F%?n9Q8&4h9NJphZ(l[sjp/tY4$Wq]GQotLEei31]x)apii_3E'qyKY;4'l=ob:ăU"A_/aGxS+tgD:_FAd3hp%Yb[5CaC$:\=c5TGs)$PDdb-bZc-n'jkeoEh-D3(;S)PăU"naW\kqO+D;iK%a45]oHUJLNVincEFB[UGWossh,IkTWVP521-R/zNJj)ZXt0V/năU"*ZSm<,vR7g*3e?IfsYeKQj\_V+7?hTuu\ec?P8r6(m+5w]bnx:(FDR*dZT;t2(TăU"cjT##Rt'bf-N+E=w'SP,/U6uuqC*1?Jwl_su;Ld?k^*oKE<tEU2Jl19vT2uh4nfăU"$k^CIE;cSJAG;b%SqD4Bb4BIFc,x']5$^b<>e-c68)0JpC)r=T?c;x^d+O?CJcAăU"NZ\OT-#R2H*2EyzrC?oQ6?,Zr5I9ped#IG.%$Io9#UGxE3UsB.lguW3',?Qm.guăU"qAXK35,#mQK[qF9RIKf)$>xqM4fvQ8g'MXecd-%7)ok*[pQ7'5Tom^82V?681c_ăU"Lw'F29*=:h.:L:*>I&ay]pacITZlwTGV<N%da+)Vqt)#guMYDLW8?3,EX+5#.'+ăU"(ereZ#:PI>c1#'DI$/*bn%%tLoOsF1N&E#/._Cea6Lj[PIhu[>lN:JjJrLbkME3ăU":g7za.g\c-$w(f'gxO$dzQFa8MsvuV.y.A#8xX4Y>8nllcn<I6(KQ4P'R;>U4J)ăU"Km?snH[fc1<qgiwp7Wm9d=)Z*/B#.>ih*4Q,$22X^TfPhk&:Q61m'660Op#jgj$ăU"lA'dx,p\u$lrrdtT.wXxLh>^Z_;dP>^h2W2>(lZp\L6sbvSc*_>4AlieB2>2OsWăU"Sls)=&%Bpa-ACJ-YhhAUYpj_AZWefqXkn.tooyZ)_YwC?r7D[=7#dPl+Ng9ZAc_ăU"w;=Trqm%/*))07fxrbVKtIh#zO_G5K)%Pl%&/0?d\[+5]V%(bi[C?-Ln$5-s3^JăU"yuPQ9Vg?t&>;]xY>mv-tUlf)Q^<UYlvkj?lkk,/5/:9\Ksz%//Wchw&M69y>'q)ăU"vY>TYUYVmCFrnndDiD\R-'w'J%/zdteW5sKGYu0';i8B]$^0'HB>^xs4Yf)qGt5ăU"W9[?\Ir&Zkc(Ai2Xld%c*;[DpM[mea2GH7.-eRf)GXdX:SI3DHJ+qjWnOJ^EBTsăU"3_<r-V6UXA5:.Z<NP=n%VRSPFQ-M22Jv=kk1W[qCbZ*reK[2*u#Ba&tCR23s)'.ăU"(v1:TlE^OcDTjE+.E6r(smhHb9Bq7FpvYA+v[(IgtYOhjZ#sIlnm?q=l(ieH;CjăU"MG2D6I;K/cq\r$>\#l*P^#0>f55nKD8mDmCdVbJ/mdu=Wc6css?;aJ6JeLRQdt:ăU"^ET*P>QJfL1tr2SXt7'%sulju:WjAQj>n<CXLxpKi8y=_,?o$cba#bt,EJM';30ăU"^>YLTK;bL:umIaoWZ,lRP'x=Hv\F8<u#2qSC0Nk5,HnP^B3Q3X^?'lKsAn0jUfdăU":4Bd6[JJAxnGT58/mMQcG.uZCuUD1\29TaSAc8f>.Nqzge(/lD]qQX,O^O$T,p7ăU"(7Gge3ZUE30h$kbt#pxy2r%$v?/t?w<,1H1[C$lsFqKv+\f9/o\,lvZkK9q8\JBăU"+#Dmg1N-stJqlnG*Z4IkOeTJFC<?d4cv4VqS#M7WX6sw4uhWCRUBPN:G?V&9#8băU"&;J$qlago-2C6J\9LtNLL0Md;b7W7Bl.K9NK8b.F+g]sFVJ?aOr<wpu)co7dNHLăU"aGI3)W]D2,.s3PhII0SLFx/66wYG?wp>8]^xIx&;a\G+'x?*K+#$pVWSVwHueq>ăU"YHlFrlwv;sMdX%:]&f358PX2Ad^FwnZJ[VCL.-OIW]Ip.Mvid$<K)nhTGiG&oKTăU"ir4ouv[?ql6aY[-J1IfhdSeNdB2Nth)i?c/T$8vpX8Ia1fllriL<Zw[O<0x_AEpăU"K)6lSfSf'b(#dX?o2tOV8%:Da%'fO(rA>/<6-)LpK+'Y6sh26Si:=Okl5G?-??9ăU"j:z(^wcqwJnbI6/PcZo*obI$DC3m/%p%*z5C-m+7a_/N+[k?LZ^.l4z/tF0jfWYăU"<>Jb(*^X)YTj8<wnu4%up()#9%'OI-%/w.2FM)3,9W)%%%%-%%%0%#%%]'%]ymnăU"%sSks%yrzV/:A&5aCO#*'>Gb3GP0]A5zF1S3:gdAWE18ke%TjD0VFaE9ey:^IsfăU"8+7-<G6F[hIp^gP9;'YgdEjrwR9%E<Nwnvv\CEcQ02o4U4rQ_6FeM6>>=l_Fjp6ăU"F5h^qAspx]UdbRHP3^>]GS?v>o'dOm<IkCoiaHd3s.$0&r5^v^I4iMdY<6)8>mgăU"M0.Hx^%$^bbg^:e'tKmTZ-ZZyOMt3sr<ndn].CdN/u7kBH^Tmk$Hk[gmplJHXiOăU">nhY$0Qz_JZC59cMKWCohMt?R\#4b*&;nu/l+E$xh?%A)#$gLZOB&a-Y9[4S\sMăU"T%hYq2;+^X0/SYg_Rt$Fms/Gq_:?#WSJ7;G.FcdNIrZmc_q-F6%/3LdO*[)no+făU"ovcJJHQ3#E.1Qx*o'm)f93sW(lKO]%SGihk\nC,V6HFcE0aSydSiRm7RF[%ufofăU";q8_&<tn/5qgo3iSsZC,22B<#:Wo)80duEl8u0WuluUs37K2cs)QejrqW9$>bR8ăU"DIu%MN*dMFN:odKo(vdIW.nO9LeWP8L.YraI_las3SH\Jel#45v5j]2wh5jqU.IăU"Uvj6Xp#vRYn4(j\VuVg=SLT*pU#Ehi;\sk;HD:?1r5=$w'CBRPkgu[4FHhD'n2$ăU"Y&=(k#b$nes(_<Zoi;*)_k;=GnEXGD3C[u*<Lco]5IXrN04.uIu3^:^'&xHqh=găU"sPFxdY]K\#zz1\'%*rG*i5?TvwB:H:]ND;hCOfu*65s?#PPha3QC9BquCTh%I#TăU"E.15?-Ow6Ti3:NVg?u3:GeY4?OO'HL&C:BNlBN$*^SjWVT6DwI:gUHTx[1\XDU=ăU"^,QdGK'43aiX:'5q:uW*5XF2Wo#Q-;Q:Er.rI<S6<225r1#bnJdk4RrI]>NzgXpăU"A1(T<X#T6\9.9DApRdN.&=.]_]_#KUlD/Ela^(tpI1G)qW2:<Gz[AMGX=Ucd^BcăU">s^%QB8kbi9KK\=ja/tGkI^3^fO^=B&Mz?>b$nfI1PY-5:i85#Jz/(ymqh7VVkeăU"Xek.670A'aCVpSmIZfl(F'[D=dA>&>p*EGtpa_bSc[/8iORJG'gJCiZ;EDcIC/măU"b#5w-mDd_ucRanA6dCG,3'&bBRo,8:0%qsR,iB$YLgv4knl.GQx\&K7eTV\<l4IăU"P<5KI$Z<$s&Xcd$SmzL8kQX:eN06Xr,Ho')-+_xB\WxiDu3)I0LJ'X.FWS]<#ZNăU"q89Ko8DSkdX_ncLI#0YMNY8V[mP(*HvZ3ZPU7hkn$1)o1_hvlHjCUVI2vWO^WH+ăU",;P]W'weTBdR^i(j6&]CTJO02StOUoA%a]W6OhiY\9:l*?[JV#71+qhUffu)L9JăU"CB\b,/Z0(5dEROxOwddxUbO3_C3rd7k]'pL8C<pA-JbZ6u=IW;pjhNY6+:[BRy>ăU"6>l>EL(8iC=bn2-W-S0QZqG[?7JUaq+_UDJh&4Wc.o,WRJkpF(\i'T1tV;EN[xlăU"BboD&q%dup(%)9%'&O-%IbPNIZV71N;\4%%q&w&%.%%%%i%tx^\%SgfxEeLrBjHăU"2aQ8(BJd]9\1&CC$XcCCzmYOyh7E^nYyL8r;nmroV?dIhnSsfSKz-Oz>%:O4tj;ăU"<h<f-QtYRLTi4)6FGWtH%kKc/CepMy?X5V23#9uJ+7AqI:7X(iaG*lUXdxdNp$MăU"wDfD<4ioxmwhlx)Mw=#r#rHixeMn0dxrFdvlh]m4t<],4^;bEi^;lOmN>;n<Y^răU"xbRWOv$fv?ZrHDc=HxilxVe$cxR)xpd,fnA.>aoZEh;cTULj<=7%Ah2_aVIBEW?ăU"$SzlKZ[;YnBS3>Xs/8A$U=GWJvop%i?1>0W&V0GpF<ZD)I*dcK1:IrBr8?rBhPgăU"V$j<nABcUjZqPtsdttF]B5hfU*nbh-cxKPQa$+E#z:\c+-s'TO>BCZ?K4G$6+%;ăU".:J81OYgQ3jf+g%G$BQWm;,]pGL]G48hN]RNaa5c2$q31n[JdtfeH2];Yd0E0D]ăU"'%gJUTEs'QhGXmC7+fXB_DSGr'RC-(J[fW/G5eX>R])$4b)_[jQ'FHSW+_T'X?făU"lBzd29LLlhU>6tOP3Yb%li%_:,qcI)r8k<65UeT]A'xRM,OSG;\p3YYYP0FU,q6ăU"UEtzE+/a:4]nXF+TNvSQOax;Ww25l5EHMeS[S=41=E5LIcV2Vb:^M[Kb[fQ?po(ăU"E\YFO5dW>7?Dgu%vX_gl_jVHLdU'5ar,5DLQKI2\TKl(s79b>ap9yrMvB&OmwF#ăU"C931ePkJ*ibW=4Z&A>+P5A2%uSF6r?U<5mFRL1/nMSZ*iPYE8G\Llsb_A$uo7nIăU"7.hqck&/rY[yOv:YuSsD%>9hG];Bw$>]l?$BK6TxhJNfm+m6pW],ga2?Onj3Be2ăU",nKmUg7GSoJGNDV&Dk$rvjfO-BYzR8VA6$XDE#bSBWrkUQRt&YssJ2q?fider4năU"Y$PfKton-87--YxpIL&T\&Q*Bl_s9JH$83<:Nkc5s&IBT><_cv$>4xssICc/f8kăU"il=g=H?;]52cJO^va\4g3+%c49HtfpF+)$X6Y3PT8B%BHvA46eHK5pTpQwjRt_)ăU":4>[Y/2Jdw<8oBZP\+M_X9A8p=Ft6-PPE/lII1[Le)*.Y:$vGM4lddRYn0j6rC:ăU"$,<C$c^ML/NHAY2$r0RO-uUwLDMF$2at0RI(u3Y^b]1TeGgGf:Hxnqe7*cl;Y1,ăU")+7K)&NxObU:B6EwC:N3JSOn[9)VD^CfyAkHGjOfBnpRm=Zq,?DNjWDf*KiTDR8ăU"bpIG1aI,.xe#:UqaR]fKs;YnD%'#v?SMw%zqB;$/6t;24?8V&a;<uiKYKu$_zl,ăU"Qna'\zAIko+4kX6cY%K3f?n;T#-PI*bWf=VA&D=Ik\aEEeyM+6[ar<a25+[RBQ\ăU"ecgJOdf#$H;vGgRL;RGD^:^X3)1;2e,s%=5K+JqZS/n,[A1tDc$nBNDKm_XffDPăU"7F;+q>3foc''kxc-v;De>63H&DS,b]1plQQRb:ZWLGMKTnp<pP9u3HR7&T&KR?5ăU"z$(AsQ?P*SpGiL79SbSergf%F]e]RM4W,w>[l,U_q4?9d$/r2LQ4sFX:(,A.2(măU"Yfc\[6CM'v6f0xWl?bqfSOhSDE04T0/PlskbbhJE2Q7d4(nAzOr/7',9g+]J?4găU"asOH?O8;Ju]H3.-LX8kA-[hBhDtafiXlKY/jA'G(9<vDQaO?DU941%brMj[2%b,ăU":,;3?Q=p^sVIb=zkcWQ-rQvq_O+?yg_v3VxkMngJo-]](:xY5I<%+e0_+vsUn\4ăU"Y\4ME-:t5J0:Zvif[ayX)JU'JfLe?p(BONFksC+>suEZJur:Wp>vF+DqireacAaăU";NNFc)P4g6[ii;Uk+RZGv:G[qDT#R4&s[AL5#Ao&.=Zu,'N.Qq)R#d7J:\lbpcuăU"I6]c>=:GfZ1G&:#wZjWEhQ?gj<.%CM.*,b]boc9Cf<#.-.Rg2oABS#fd0C_('VQăU"#Ginvn57\fHMoZ2+blk^jq:\Z/&3ta+3&%xwb(W6io.TB>.SaG-^mEpa;N(prZ1ăU"Els/nmAHDNT>9Ok,TR#?7#ks'Cv7_o#*H?x[ci[::N,KEGt<zyFY4qq%e+;3XU8ăU"feT%Y)b^tM?G1mDe*7.[4xfrTU<2nEBEJ'E4F3Gq(.c<0XGD*)W>hBgZY[;F[MiăU"\c5%Ay1K)c(g6Up^k_-t=OJ.%8+%k4n)qJ#QV?+R\okJhZT;f2&HB<3$Dr.V3PGăU"XLNndAiFEwIdt1U0+BahV?xVvGWA/gul-1d192m;Mf\8V'nK*6<)D]A+[)H]D3\ăU"//&tN]Sr']75KcqmVFNa9SJN[yJX8WzTUhdA_WaW?n76)kN#PS>Yr6]V:t-%8r)ăU"eiE[gN&4O3%7,HANVI1w/E2]kNLB(el-6gp6tPA^hIrej>4VYKYpm';J3p>$p^7ăU"^b'sO.dTf_0cT,L/cGy3U$Dd>??An(EL;2n<PNa%1%JPjg_TcUCa(l+azD:DWkaăU"dWxWF2an_6:#bU<ZbIjt_V*ceWc(,>Fb:bQP:(e^Q#^;Lc[0l&N6INJ,e5YJ4U9ăU"bO#u)gIgNg$(mD?QsoO$)(dn]yGQHI/p#A_U&T0cLr8K*09x#w%u:r^>8_qbRsmăU"g\D7<Iqg&IXWcAn4tVXxo6>eLD'XXt%h&?p_pYaY8T%oh\DYa[.e%?hMuc[adF9ăU"i.<8J;[GNU<Cqnophz,eGSWgY3%;lq?ORMqJzN$OU/\;7<J.XUs;QHB;3uTr4>KăU";cLBnnaWhWh#U5'OU5&d[VD;RmWNd:iuEl?jZ(iC-u]WW-Y8;;wBBF>^j;knka3ăU"2d?U]bZrJuv_3-sL?NMbs%ICSBfE[3P^582.i.drs%/n(BfEkHfS2euU4G;cHM)ăU"NQ/be1W#/4#n4)'M;K&hm>VJ/E>;2b\lZN%XCqM#NI+00h>mx_rW>&l44r>B>G*ăU"\8z\0[[T2V?0KN5p%>8VfJ5Ry<S<']9DDZq&JUYjE%1J/p=u9Y3:qIg$UhIYf*]ăU"T$om,JXr&1WDdQE7JC37L$t<]dRV.V2zuQTa;,Q>(TsY04N&N_*>IDI%FYvoT7JăU"P#()6TS[Z#qG_6BWcklFU]SgYc3CcL,nfobhpa[qG?U8eU5%5Q&1sLi.Bo8/B)jăU")H>\/CUMph5>IL]Z.qL+'63kjdoj(57:yy[</SP&++G,'t5SIB?#?q'NLswt=H\ăU"T#0(.aDz-R&$[Kf#MZyI3=cJcyCX)irjIkliTr-Cf%FwV/ia7eWB3mc;1O:M&BHăU"%;T7OEjBtXlH)Nu13O/m8Y0BAE_vkzt9<g&zz8%+T\sOw?DAFgLt(VK^F3GO[c3ăU"$:zG&&[<.rXx9cJ3en.Lqz^eXYt>Kfs1_b],j3REKIYk-'ngf.kB>mV+*).^gK,ăU"tc5?eHqX_ktjlio=Biw4OQ2%Gqg^3aLj$s9nJS?^4v5C:A4e)WB)asK]b=T<ax#ăU"'p,elP_b5BaqY)/.0iBRbV\UjFE7a(>a8A$*D;niEM?vfb[XPoJG$nA;WJl:_85ăU"K,R,>I)#Zj*h[90)a1x3_B2:Q:%433OtNjk>8GiGL>BVk[ANXaVJ0B8HKf_8PB9ăU"*BALCBCA.(*NhAO+>mPniP<%awJS*[WCy3=&\8'Qj'8GG'Og6)0e*IGUxWm8FHXăU",1]I(IkKXfnx]Z?\8/x=4+n'$V;w//bOl?iI0dD(/tPag&t3'b)yrMOZ,Wr[ttYăU"IBnVrr44v\i^*4ZD+ZDqsbCMRPLPdJO#*L:WO\M(M:,U\?%eH.dg&fSA.G&cKzmăU"ZEstdZr07jOI;0)Di7QPvasEK33T<o9KPNS(A5hrg%v/S&HXb./^L\O;\jorWZ+ăU"iY>PM(K;EpZF5$+bc7PUqg:/QYP9buTGR8U]I_mi1Q^Io&Mk7Ild)4=;G/rQ$;RăU"6C:^E00+PFM0cA)e[W7w,JR[98z\bRIoIIpm?8Gt#o=gZs5/E*Ag,cQ$KwtesQ9ăU"cxpb'SUiF2X?jSP;'o\uUhG21DK$,buNrqfh?fz35^Fd<VpbSueq]q]9V48_[$DăU"m2m.zm*B+BMb1HB:&J>mn42HETz)LN;Y'Jsybp9L&T/Tk;G#cu:V-S]Om;Oy?wGăU"\HNAYIv2EdE<q#$=:6+s,K2_KL#OMW=BQ2Wdw5Y_rt4FX+U/$:fgV3/jUMY.BjMăU"nB(9FD2/&<X<?*I+)[%lyDd&<WQY8E$NQtjxsh9=O6mT+UL2g>(R.BYyu^YcJrBăU"dPi/TWE?352G^S.RGt&RRJz0r<xp4.09,]1&^_9<:R#9U*JRAF1w62sJx]_dSn\ăU"M8i<b(K>WxCj]?+o;BJ.qSUYrh4TKHQ#7u&'TuBx:nK*S*:r9I,B%s#)z-h1iNdăU"bB3ewBU[Cq/sNpC^yK95k5NdjjYrc&)J),VXmCQ]C9X):gtbpP.mF1XVS2gBhN#ăU"XE,dHiZhvN&SURs-0/W]9/2sMe3923#9jBd0%NO7kH7C%+b$)$fTKlA0-ev+C^făU"jEg7g0Z-(mvYbWBVTWJ([;./;rltAoV&Z;m58]Z8&tq,:-?pZ%Gg,+\]gsh[5A%ăU"h-XAF;F5bxEjj<1tL5od.=la/66t).*1*P,WI<dZOA&U[YZw)MPupd7'['XVSqaăU"hyj.rn&uO33-g&OchgPTP/-B[GbqFy0aZ>;I=c9:1Z>HwYDNxm5(lkyJz]sH8Y;ăU"GekKA=.T.NO>=$^QSkpNdFrW;d\n2p/Eg[a;x3?RrjBN^aAeghF&AKu[_<-gL1MăU"8>&vE<a_<YR+>GEg0pP-Q42cixY=poZSAA%Gk\t#=Tc$F%VhCsDO8Uo/lc\p:x?ăU"JBk6A>h>ORmC#]^VLW?C#\][cEo?rY/YHA1RO6_<T(tn*f7GNP'Q.Rac0ihb6YhăU"um\u*a0m>.&qx1h9Mxj1bK6ZTF#CC&,Og2koB;9E0mqQOve'[cA.gmjn]X2IQNVăU"gB(20kq$*mVO6e>:*Qwk>QKvTILQ'nZddZkH4P:p2/-zP*oQ*n70kJN+iO#BpFGăU".6OhJ,u+UL1H3-tex'ir/]icDGl8?/KA/*Ip\F8$kDCJ0r?agr[Mp+Pq2jeqGu/ăU"ceijkPq\/Vw]8\Ce)jPcq)go1IT6-Ms8%dafe6&D:^HQ5tiPzHofGheex1A#WA9ăU"P'.kU2(Dz:m;C?#8JQ)Iv$_huN*AOG(Rij#Pa8FUS&W)EIJ[/7?F5sI--5G1iSCăU"xSWo?Fgr85b#*a8\k5?8(M]c]Wnq[^i(JLW[w%ooa76$V+]'fR$7&lY9ZXMcP(găU"TI-VR%[[7e7>gdx,IxI?d%>'3C>8h8o26b0u%chPb0oIDP>Y++M9Atu-dw1\Tg*ăU"fn6BvKf'xF*sk,VT_3]obX?)P1lX$bFV'4+.U(>>f']9].-PF9)MF,P8jY_w71#ăU"9JkQ%RoXj$lUShg0QP=Da0fg?AU^m)1iNr]#jlQ%LV6/C15t<Rg.pEL921lS+0$ăU"GuC(#=BRBrWrS3Cv:U,>S',4sB<)X=>uU$/4tkY059)P.1cbY?SrT/l[/4:305XăU"OecB$no:-=9RFpn1%9DLACZN65?N:trm%cgWy/aiWLJG3w+]>%XmSpSU$,08I*HăU"kz'9uX]tf5Xg9)Pc.xtHU(wIH+a8#lGv]r?J#d[5iX_LN=bU?+fH<:4\K#RG#6făU"PYdR^B&l79S9Jf?gj_IY5b;;o[<DwCpwgA<oKRQuZ%\?,>H0Xevzks\f)0\Z<_AăU"u*iWE1,G2)rn$^pgW/:45'=4rnYrQktJNS\BwvDRNsG'jprSe]bh%B-McQqo^^8ăU"G3F0$#Gr.Y=9uR1^-M2V/]c90k%?JJZK0Mx2EM*Tx9dMBT:Nx.j:n,6IB.zH6\qăU"=^utAVci0F/;SE#3>M_q?%;5VV1^&=7l*O7[+1J:WK.q)3^p3v6a]5ANUDB$Y/,ăEND SUBăSUB V2ăU"G4\AwpaWMJc?M^8eP)iu&;/_+KoPX*_$e8v=q*Z]&%Y3\Bq+1Xju+q)BZlhQ^UHăU"zWMQhA9DCH8D=5#D_W2*XPB:(2c,7&'RnisWooGRm6QF7Z3U[<76EmPt-bi/$KSăU"el2<h>]eN(EpUBuH_LVb9gl:[4><mUK[aQ0=a$DovsWFQB0>iU(gx.q2d?$#<zmăU"8EP-8huT',%iBcLo9Js,smG7XUA_zATM(k_V945UkNAoFE25I(d?r,0meQ,gc5SăU"V\FRngCFim(;oTGtQf2b$/XBEmA$BY[-rDRR(#W6D;40Cp0^6+4]lk3++9g7EfuăU"fiH.:KCXJ:eZO&MViDN+[a<v]1/):Y,B*Qud=<jGg=pQS(j%(k_6%:&.sH:,'atăU"K3CN#zf).NvuYKn0PPWY-6eHh(W*oTnT%,sv[/Sva)^V^cilA)E9jBZ]B*crX$*ăU"0tNtXM+(5[*LU%:03?<JM1UT&']Gp-M1Afi_+)uS-_,<tM:$)cA(&U3OYNQu$pJăU"Bi(XopDXqRZZ,w<^]Iqcxc[gL;(w($uU3]#tlmkep2t7m%'NyOT+pPNxJ.AD82iăU"D8cJ,<N2h,)T3sYDcKbK3Sw2%Dhng$syBY;c6Vj&TSi72-X&BJYEi13We&WJI(ZăU"%/pbSn0p:qRj=XUJ8;0i.[qz-/2.NaB[Q&ZQC#xrk6s%_q$mR-dWb.H><R2rD$zăU"r*3q,n4A,2n5Z<,Z/ms+6RZ)Yxv0EGgPCrhT.We_J3&Y8F_aG_(SnF]YggU[ZR/ăU"?syxk%OF3idvmiDUUZhlKsI%ulZ#2SyrGy^UTG,lr#ZW*R?cDYe9<+05Hqb7]eIăU")R/5st[s,A0mvW9j)Wk2l6lVycC42KnZ#c=zh$24W?]C5hgoo0G^+J*BeS2c:j3ăU"H5<]FM3T4NYho,_lS2GSQCUJ*Lrt#k+,qgYUA=?Zi;&8r1&-gIDwV7e<NH*o6[DăU";-o.BDc0[Hu#1u2^3b3tlGT(<'dCB&;-ZvfQ5v\Wu>OEf/>%E_H:a9/,k^>S<wtăU"b;U5;Z7Ah*i4]((iu2qOoJSGDE6(brx?T^mCghbJsY_)e(W(0UU_CtY&:pgChGhăU"1+Qg5g>BocK65+V>xT6CrGC?S.SQiRyS\DLgQ*i=#j-rp4gh]mdU\*bIXwDIPrkăU"mu/r:50P'V2hHGyUCXS\Z0[08:Rro1(j',r_lmlUNCG-S/n2'#=])^WBl9PX^*HăU"HMqgKV7;K=8'HfWM(+;W'ZtIyS598FLF1.'#PB0W)9L=%XHKnb0kg&KccPKa=6FăU"mWZU(GH3sHmaO:=R^h4wtyZjZd/aUD;7zj.YV.l9Eg]S)N/%RH<2pY%riLhEd2-ăU"Vg*)hM(9q6_;RnmWkp)d<OHuTZGm/b?dKa;lHS3_g5LEqRb(K;iDpNk?>0D*;f(ăU">8=fX\kR<O]qgK_ybV2>T:qSZAcaSuiekxk37Z+023qb>[P>%A8gU[Xx0jv&YmqăU";L$HpISha/%;[0>EOuQYq[nB0v2/u$-C+OQ+:vs%--TL63^o9AW'RU[H>3gh0<-ăU"3Q(d0mB3=u\l-L[G6_]&pHp<mw^L+h\6>tnH_Lic7fNJ:>Nu8d?miFRj[]:<T=PăU"hi5T=0d]-;'J8?91f>QMa0KQ5-']0)aNvV2GZhNy(E(v-K(*IW7kUV0i_OVwJQqăU";c'rB)\5RQ6*MVhYyr(;c5]%j13hdVM<_AnfIZN?Ss+N9[$s]<q-d&g>&1rSSEQăU"Ns,An$T-ig1cn8;9Os?8o)O9$XU7-+8WLpCU/RHEggpKXh5SQ9F7(_q$CDO$GE.ăU"/Oe;ayOOU+Zc_p3O5p5FuFK/GX:/#\b7l=UD%p^,.s7lNvH'2t%BO(M*$:d&1P?ăU"vv?lvUo>hY&?,O46Z\;E[sk?D9D<.$#<8m$tgo.J44WdX,9\(CVG%HP1cSD$4b&ăU"KpCKDdRl+f=EXCek*['Q1X^T0[Poidu45er.J,CFlk3'(m;\DdY&De>*)I:a6$MăU",s&I2sCP^=OKe4325mrs+&Y$M[W>h)L_4^&bct[0L7f<b.%G>vH#'teA1:Y?Nb)ăU"T:-k=^]Mf_s(s=6#[<GeL,$<eAG?$T(e=)C?ZApMP1(x^7pu.+MOQq$+lZ\)^#jăU"UM.m#j>fA-RA.;>TPp.YTJ;Y[H?cOH2bwLggMxeJ)lAf:2:^4V'O\fzmb)EaVPcăU"R&hDT1ZLdS=.D=i\=R:?Jf+<sWp0m::VmSm8+9q0,sU<E(7G#ZZJ>C;=ul$oD#[ăU"MxdJ9u]o&U,MXuQpC1Fei/T1du>+c>['InGiY#$EY::V#k$U::ES#N(n,[OGcK*ăU"TM7l^UBSi8a]97#.[;UyX_Te=^'-?>_%24WJI07vZz\HsKxrLev(0ZqE]/jtuhOăU"1FRB12gRe^C7ikC#K'jC3JLK$NJ>(_F.hF0N\'j]e\O5l3<^\C^_5M'R5F<U4L=ăU"vEhBYO$YuI.]v6uu?oHWvYVe\]Td0B1q'i]]XOedC(]N\ba\d+xe0j'F:sIlCLQăU"t4_J-w$8VEkWIqm4?cTNWm/94_5;_?&pG>rtkEKFfi0aaaMGa-=VDtAI0ZeD7vjăU"1rEoVC=vuJ2W3L2Sj=3?si+'la]O^O.]h[QrGQ^k.vjt3[H-3V^_7P9'vkJ<J&CăU"]uU\JtiA_b:Na?[k$*:vxo[;f;YdzhYj>ij]#jSq.J[)93\^?YW9e^%AXTIT:QMăU"-Vz/[n7//^YU>Yg*,U*=/'hEkiJD5no'*Vr'FtnfZ%M0GVn+M9i_nk'(c_9gUl%ăU"6*Jx4_EiJYQ$xVlnXCtS/$9a3<7biUvoVDO4HVsvvKWfgu(T/+1]7vDn<cM43sYăU"Tkd>06L;#U2DGY/8T\$3VYTcexsvh7_fN7^)o);=rW>3]si2%.Xe=U4B4QS<M-hăU"9L^=QN?BZtL4PzbGE6VQAq:qrDTafeg%aLY[N1jC2VLTwF++-(?'$,91&bfcPS[ăU"'eVO810<SgNC$O^scMRbIr,00<-_s(D-YPlJ036D'D(2B>'XB8W9?<xW5&3-Y>oăU"]e\rL5zNSIZ_aDga1DMWcM=:5)h]u[obm:BCo_g<G'f3,36kg2m,(T-qSzqWOBoăU")$eN&<GyRCpC+EeTQSVIjFz5,W(2+2qqV>Bg5;Wjh(Q<:q6n^ZCe]t1u'SW;brmăU"0=d0:-(>D6J5dBwyjt\N,vbB#OOLunmV15u>u\c*Fmn7,GAb/SvJ%/B:[l\^GOuăU"jG/#h)Q[g-%wR]a1e0(Fj5T*Z1E5qJOY6^r.Y)6DCU_h_9rj)/_=8Z&$*aE-hxTăU"An_7gZ7lr?e:D\Y\>->N4<sY9ii>)-q_J^:>aSoOCK2_<[9iHl6=XAMTdtm7Kj.ăU"nqy5'50c_T\Bl?*#HYZ6=:xu4gh\HEmYfZ<V6?0h[PzY3jYy>1?5,Ho[Bsm$A4năU"f_/K'W27m$K/q4804a?Vq.[E49)p2'E:keUWF(luu.vX+ynB.ACEQ1MSa(F*jbBăU"*sSSdV%$K$>8Td?.i>Xov%&[oe>2556Ckt^BH>OO^p+-d]7G7LgYi46?dlP#>eTăU"g(2[TbC%qchSk\HnVA*/Y.vaRe:,/<iX),=5(:\tR&999T1dPB-Bpm%fwmQ7RE-ăU"I\pLpn[#z5<P$>9%.VPT2F6AP<^^Fn8k,,>';2rP%lP0afq$i<vQAsib</-o9E5ăU"o0zLGMPmf;2W(*E:7=uNiYtCj\:)mN4jt<bx9+ba[D9f;zscw'#Lymlio;fk#I?ăU"Nc(nivU_N'I/d0=xRr?TW,qB.YknR$Sh*W1m&v2^J].Ngb.Qd:5?*dW9hSiEV0NăU"FU[*<=BeDI>Q=+OT$_<k_=>=d-Z4EjW<:b%jG5+.b'A=npZ<+]pe-837>4L,1?VăU"E,'cLrj,)ScOC*9J3oIA>Ru'4]G6z1_D,he%Nd0aW\NWX?,)V?%d0a=,lHP1m<(ăU"*nDcVLK3^b-4/QixbK-9^Co25*VQla=D,Tsb4);DWAY$RicIvwPnXVWN,Y_U6QuăU"2xv1,Y#+5?Q3Se?'khCu)rP=\>D'K%lDUcr7Ir[d7d,+:t6iF2f_c,$INJv&f=1ăU"_G_qT.d)Csoq5RcTZjB';CrS+6#BSW]Tu(Yp9)(89PXp5U&WL#'Q+:HW,-Bk6Z.ăU"^gd75(pOlEK1f+&t$.9ubYh&F\J'p:?99R^K\+ecTK#^E7>$&:KT4iDHQ#\/k'.ăU"AL5sDd+kF'lInk#\<uuxWdG5s3ZPYUOuN9WKcBqO6ZD^5t*#/J#E7/%BLBl>uM[ăU"]ljUrHU+eg%TbmY/b%Zjx%qVfWY6)8V:Rarj(/SgFruBumVg=.GccDls=nPL)'QăU"9l+Ek+*%w<a8dhY+i;oRH4K[O1773I%a-zF(F'.n;fb+=uw^x)'fac9%(FmX%0YăU"v=N2'A#aVY$?+*BM((P\3OzO't4#um$S)^#yF6?1MKGetx]fJh%_-I1mlK#K+[tăU"]fqD[T/,<_>xA+0H2hs+a2:.%TeaR;GE/3Xb^Cs7MKr*XLA2CZqZ?qsc<*Nl=WgăU"A6[[AUCQEm2O?x5D3qb-T75\T#L;_9CfSXJaFT\OCq1nzAPn/m2+OzQBXMeanB;ăU"[b2TGq5f7E#;o[?DLIm_/LUB%'T=1J:>M[+&?.pbN*ge>k3P7.KHA666VgV%yOYăU"V]1V*G%U+j$Ijs&A-09cE0=lMaP9fkK#6K77:%FkQ7sLqr=[bPohD*k<2U=YITfăU"wM8Qm&\u++7GSJ?ilQC_(/z2TE\t?FOhmm2HN/\5c39BTMA;*YUb<.YPTBK.u;păU":S_9QPP^LwuzYjb#mLKSkI49t2BI3oMR&-fkghR*IVwrt7TQY-$25S<h,*7gEpxăU"Wsig2.Ym0d9ZdJRcC/<Sm#-2&$c;Wa$FV)LJ)Cr-cN/'8;246;$:,Vb4TU%fNjkăU"aKpr8hX>nmx(k^QjI6TmrCW>.eqI=E;q#O:ZsElrj_5]v/:OwN=86AKGi\9a\MNăU"&]g31_YlIl[=U(H)>GOc4NX[u11'*o3D/NfF9Tk%HM>YnkorZkgq<\nm?OksEq;ăU"akNt5Q;7gbLS_S*4beoG;$0>E14A;Yd=s3WvCsGP;]6;du1myY?lM?>0/dToSRuăU"goq;gsi1=O7EJbXb\TlkHu'$REj#R$Xch>hSD<LD(PAUboOhYwYW:YAbAS-2du1ăU"L-Q[;(+B#4)2-p=Ueir5c8UaO$MO$_fQK82?acTB)d++LPm$xK,xM.e=E97-Gg?ăU"BLuMA,2a_YXlOLNvxa6Of4YTcqEcr7./dn_\fkSL?AkuB4\bj+6C0_APo,n<P#eăU"SEr8Q72P/ieM&UAW3wIpp]Bt*WC[a<&Ye+cpY2gW,S$,EEvkm^[uB$4hSU395jpăU"b7n+)>gaEDT-h^:o8-Gg5s)up]?)><<&Bjwe9GVHO+/?kA,:p>:3,J*z28DGzJ[ăU"&=OFLSW#4&Zye)mHw?4gKLK-;]cF[*Fz&A+tDDYVLb3mo34kg;E0MfKIoo_+aDgăU"NjpE\kmXd\LAIB^/ErJ-Z-ups%L*Kb.]94^oH9.i==>xbYx5w:rih$[p,neUR$#ăU"D8uYu\N1qxf1>zOFVPwCkn.kqSDAtU(8h-8BF74rqFZFrarGa^;%?<K,^dws.D>ăU"Ir[h_>[\Q(tI]aU=lm3L]ilnlk0gfMFF(Tc$ZgU2_Uv4sK(20$IV\\B,Ft48T&EăU"4Qub1jr-I_RYM/0e:DZ:\YLNAR:7'DHudf([$L.DJf'L8oQUofm/5XH23($hM)făU"jvSE:9.>gii';8:P40'(djYjr&;-AqPHgSVk)UgW/yhVA<B.an<z^FP2-NQ^QOAăU"+].F7l/2L$l?odUo'-3utr*iPD<K^(9XEd'8&Q_MDAvu]JuVs]<--BrA\(2fibiăU",LgK2d'6AQV)gH\cp&Kw#yChJQXDfRk3oM:f;/cviTXplVtA,R(Mh8Q$K,Cdl<căU"$F2-hij7rgj)Y(VuqNC<j4\-j%6K:?Kldwjkd:cgGSoPH>_p]lbS=i&dhb)t9GRăU"pVs\LU8<VbNkJBF)a,^klY5r?_kjaN\u+/OO;QDCGe,<utMea+,sDX1:d&(WOZUăU"</IK<5&2^*>/<:b3,BhL:R0([3<rleUqw$JRfQuG\OgjpH4RfA(5ATl:Jk<;P<8ăU"IlR5yeZ)YU310nd]XHyT9onjb)+1_bRr=bKffJY>(dAR/k&TG+0:A%g4cE-U4bxăU"k#Gmlrtq+U1%tI7Uv>[Cl#XgZ=m^GN:W$-y9/^;esb=4lO1oTZt7B:yrWH7(*'uăU"Uj5_%,Vk_WgDj<#+P,\u-&PqakTVj9=R=26&b9sn#\O^b4mEu6-NP%<wTtycr>săU"4V\G/C//+&Gepki6jm,X1+tX>6(CJfBiabQtQ:78Q,cGd*N3Qe7eHj(>RTSe]YHăU"#lYNu7u/hGv$d/\aS<S;>c1[#cQNF6p9?F2r55rPFOB&p;#/ghP%Fl0'9KD='=&ăU">ls_]azb^H7yKLrkO[d<-;BdVH?DR%r6?_$:bFNp>Gp9Se9e/-%'AiT-&5\YJC-ăU"9KbQG>7bptO6XI2<zK&CCTXWp->/w=IaL*RQD&b2'kJ/0ZzM-4)o5pqGn[g_>1LăU"L.#8JMAt[8tOP94=L?a6T#g,+M6XVap\E$l$pL.;W35w$c=lR5ku[[f(dv.UBB4ăU"e7EQa+B<a;\VEDu.=WXG$0Crx90sSB#WN7^&IF>uIBOfYKHVcQD_zR=X]>fh66)ăU",Cerr]-<AQ%Q-<T)E7A%zC&%hWOb7p\Bu0%\9W9erroQMM9ps.un;-Vc+i\'3DNăU"_mtH)LSMemli24Tl>*+OiwU)vSdA4cpe#$Moch,:#fhVYOzNpl%jrx+GhByDhR<ăU"t/Rnac7H(%tD_[O1o\OO+L8Ky^0cD;9*G2Fay[_o\:h_3z8GVoVz-*.E?_i=kgDăU"e]o*U_A0Cbs0Y'&K$+spcABZW.Sj1=tV+KeN;l>/ia:iZWIaIk,nu_1X^pbrV+băU".Hl&'ZVA70&[,cDU2mtE=7hhPaWa8qmJ*t4XR^w/ps&Ze5n-c.9((j=(Ro/;CMiăU"A[qurd'gP)/D8a<nkODy;4&t7OwA=3h)J?c_IFJMCy/[T\Im[)yF%QOlei0/;XJăU"\tyN#'?&#qngVWT1#J#d)FTlFV4*w^G.\HGKrZ]LjD;T<ocFp%l/>rUQQZ8-=A?ăU"2GpS6]:OGx1=3k+*f:\wdiUz_0^.NF&lM>WunJL(6#uhBhAaOqw,t'NV_cl(aStăU"8Lfwaw='\>*.Chr3E:O4[tuK%F17+X6VbKLH$kj2]LIQLs2**WK7Nko7Y&;:^BLăU"Q_HJ3FO(_A[P6KKaG9jI,XiQNXtH2r;#A7Y([AOxAV;]ZpBqeOU.z1=bLcn&6<XăU"/-pQga(HFzZ,[FX283*1gEQa7eP0[l%xUiHBU4ObqaBNAB)4Twsk,jZvc*9appiăU"$xBMmX8VIx<8.P#l0cZ5H&Y[Lo.OS&UF)R7uS_LYXtmXv+pSYC?14l+ni*^Ug7tăU"]DHW(Qx&(=hQ<7*TuulDrWeIq#YYE.[]lkKi^8t:#=B$uz]u2Br?:V31*?kx^ucăU"+JUC&n3vlNDD#OrB^St\?R)q8QZ_Eh-)vhl'l:\7Ep18[F>SJp263_0JMM_\anlăU">+XV2l'3tvw$fzH.fEOC]:6KP)_:)Li'ex\t6;Z_ls$/Cn)se?,DM\Gv_Hiue=răU"#Y/u/^9hYi<SuaXiLb8CQ?b1,QvHV'1D4']^5_oTF--]-22LRu-7eeU-ILGG3o'ăU"PH7m6LZx#e;+UPQ4Wa8*.;jOAp_)DJ*c,lrn*tJjE7Usv0%rK,qQ.gnk#]9v5UJăU"i?GuJm\dr1H77h2v73vFEpu8Q773N4l_r,xf&9DM(Y=CjwAN=)Bw5V_PF6:SkwrăU"g%;$Yl[)41moz0ho0mE-7[kB-FPh#lfUITgSy<#Tc_GMrQ%YFX2vuwL-M3Pk>bwăU"JC[kLGY)PimGghOVU.mVIVeF?&4;96dG#=M;8A]P0m/omssY4:,.Gd?uL[,+y?\ăU"R;GD3D5ETVzit7Ss5UB(DI'#n>bQ.ljjq7&u1[09OmLK\g-SA5?&(KFK_.P><_năU"AA>zT.9z-rN%x+MU(mS-)G9DF32BJ7K1Us&/P/N+P;]M&BOZC\ao7;EK2zzQ*$qăU"nS*%J\_hcCFDBb]FkcpF1qf$v#j/3v7_2r%;e/B9(UbTAf*#q7][/:e%:gV**,;ăU"Y<il05'xNRBltf;xCsR=T4w^p^B4jgZwekoR\OeeewH'E_EEj[*;?3\WM&DHDGnăU"($C-'hgbZeKezw93fk^:QB*\qtA*L-Q\*]pv^UO68Amd$&KIj_>/*\^H:oXp9OgăU"0+Jbeu/%\HltU1i#+(8;?P%WFx1?-,Nw<22R<e:#FZi)Y82[$9**i)e8,V7Sc/0ăU"*I<<X2TJHR1.]P/O+>z$2Ym&eBjqpS5mPK/&GHXSo2Yf/k8cc2PpU7BJ.^28&&4ăU"&sY2PPDXHpJB.uO+hKf=SY7oKfqm_B<L+T#T]1&Y0XqN_Jm\^['6OASy\b9KZE9ăU"]AI3>$]0YB:]53,=4ug6T7*1S8*k<sbuNLmH)=9Mb]xI//<+TiS]zlUU*K)EFE2ăU"JosW7gT9K6t%YLYnKYYp^%5vs^p*Qx[Ptm.;_D]y9p9qrdaZqWai)HcT,Rl#\osăU"FW<s<Pv:uP]ZJMDD_2HqGPVtO\C279fCdd$pQw3liKS4RfBn88U9%bm4iAGdOe%ăU"rg^S<b'Q1AAZo8?A^/3uR;3pwl83va0vEj8BbY9MPmwwt',?]=$i,Aq.S;K<X47ăU"GSi(Bp$^aYAn$Ctuj6c<f_;HG%hb2;,8e-5qZgM16_\ZU$#ekiXbd)Ql#VBPvW=ăU"a;JTbWnl%X0+wMFaue5PRb_Li'M5UqMM%fB,4cK3k:ygq1F_e\eub1]D,Z]E41LăU"'[nrUh)UJdml#Z-JD#gDHHDPy<p\1VbgyKOC?oiRar*\^)N++-LTF&/f'8+E$Z)ăU"/&Ma'R2?kr=2.%1^h^l.vyorW*wKPj^A*:aMPTPwfLv0xegQkWLa7YyOAF'O4,KăU"4Dg7it=OJn^PW^SkOtZRp_P#+'gM4q:qAYm7j3o31d$JE&,L4+8TAQXt8^1:f$EăU"+[*%u&peI,sedl&>r>rV(zAAEz3C9T?sIP>g)bK=d[rc30&l;PGFt]set1lHI<iăU"W/?YmCC_iC2\srtxJMaEqVJC'UQAb8^oPrB>xD^8i?4r,cFA?V-WegLY-bmb;,aăU"J)[,KSmBh:uSmNc;KhO\f3d[%ZMQDj'5lEILRLA.5#),?^MS18pUWWOiK#irz3'ăU"nj5;%0oWOi8m)[uSE=5lU,b7mNhy>wr<BQFg7Q?Jb;Y-Pl('ep.[GE:J+SQ.4PoăU"JE_Cl'NZ+_C40onc&nSV7<zqXUPLd8>th]?\,gjPNarkqf4LCU7YAsahKZev,LhăU">O%0]#z%x5ZZ5bD))Vr_G(&w5v/svW:bCQt=tQ2Xj\^,JNWf$Jn:hcG/c<)qNEdăU"KRW$_+s\c4VURr1/=.]mCk[7r*MTQ8[u\38'Uu7,uRPwtTAv4A/=3aQd4-e:J&(ăU"i&C^H2_myItQt]vG'2177B(m)We3:3P/FQ06Mun7ctaHjk>#>+G%<*]0F]SiT85ăU">2.qf4qfT?k]WSK/+/O>Xqo<?>B]=oa&>/F&at'_bmA&Tp_/JrjNL-lkjoibqG3ăU"CRQ;o)[9Z:;W'$/fOI,7eGEJ]kL5+(CM(+&nCn'Z%=hQ_FE'qdZX2#q3csAuGxbăU"\eD/$9YELA)x_03%r(Qw;y%*(Y/LOpGM?.k3'ejM6OM.2%weTseW'f+]\p58>h8ăU"b5XU0e?^F<_CiHGNuiX+4\0m5YIXBLjCHw$4YHpkw9O_4b3Rjo4';Yb\)uXbo^băU"AS=Uf9;r$SaUg',\;-&kKH;93TgoIH1euAqk/&:Z*)6+F3Mnf/#K=#,Csyj]5(:ăU"8mP1(Cll';56gXs_6i4q#/=t1-ML243_CtSL9:.X4Yv'^fV5=uu:CjETixBNK(RăU"830<5$js&g=>.C>ue[qEt*U>'lERa4*jWy^M$j4?qj1xmmojU).JQjwAtfH;e]WăU"37TN-X+t>H_4t'gM[8D?SCRfI;bZ&F/Idw17BtOq'#W=/S$r8#cY)>Y6WlrBKf(ăU"0wBVnKM,bX#H:ARo^PK\N=iPqC8K9,vG1G(A9HF>C1j)Sp)(509H5r&-<%;hb%păU"/ISgMPfIFN/BDIYt2&#kfZeLtD(kb'V9db(aPb^8U%QbB';R7/%fw?$U0*;mHZ[ăU"KDVYEf*)&rU>^4qWCy=42S9RLdbP\6%j+7HV%,\YYR-X5.+c8%h98DK;05Q#0ChăU"1zj\+kNhgHjpLxU*6F#2?rUNl^]s'P](NHmFBJYKJnY^91'l+_N:S.iJQGvG%m&ăU",gXD:sW]ORU:hpz;&M];x6H%WN'k0*VUL_Pb]BubRg=m?$d72T>-\zjrV;$B?9făU"71vYGYH0OXpd:Qss]dKQs4+wYQSt)e1Ch5GRAXV9&_tbp?a6=#yds6+oZ.GL_+tăU");7%+\,-:x?[fIo<eou6j5<5*jJ8DYO#dG.6rl.Y$8&mvzkMsdx-v<TG=27uG&MăU"O_*n.uq\=Dxi0=,w\Dg&)p,CDe)Xt1*sD(TNUM%Y:*)%wD=[q6Y9#2.()sAO=9)ăU"&491?Oi$Ogj9SY;3(q3E]i,'A389G_U&b;0FSBdW5QrvdKA9lOoqyZ7u8UYLAGrăU"c[4t_>m#<C7;FhIE[52QUMfJUz]hjc>Xcm4=&ao?n;/_t<Co9/gLWl]J9Eic&ESăU"f0U\c:%eA%C,5f&qSKdj2Z,q4fwTTez+)ea'+\1L0q*K1iY>q*9;XE)&C>dD_N(ăU"Jh\O+\pXDk.t,w)sa3oCYQ:\5/OWxa,[)p-?UYw\:>>qt9PNpBOd>,7]+tpVW&băU"X-xn=+5[JYR%#CDaUrq8e9FfhCFif:E_I_FHxn>GEZ_V$.daLEE/H(zU<*1Xv'EăU"hY/bY_k(FcS4X#JFei=_*M]N\;dkkd-vU'QXPi,;H7<K.7jtB4%M9c9O%wcV;sOăU"Ex;mHCXPPc8mlR$huAPcQz#TW2PE_^\)OF'EGL=zRUe)6z?tf[aMnp?,,cZig%hăU"jTe;*2]Le_\w3791\>hG=GSIkRZ=.<Twv*4t/'M+INjVqYb:R>[t$_NG[/k.BlKăU"pX[&kfchSUMknc.s$rfg)V<eAw?lj0^k/.TYKQxWjHF45sFC:5I9cmd$iKGW*qmăU"u?+mKk2ITqM0P'B.s<abk(\80uDZYq#VzIu^'U13Gy%(tBeym90)(+%t^E^O\)=ăU"JT.%o)izrrN,L*\UL:_7U:kv3/\4ju<:U/45DN+[T;FGQ.HbxH>JeM;O\:y)4nvăU"17]oXZXTks/n$#L^F$lGDL6ksHC$h1Wh=P^^WttQt3n&igeK)4c'gG/__=6u:eMăU"iXfxFm)q2&Aj.c'X:k0AItF1kN/K=4UwW*YR3QoLm+KAmq?dZG#ZQ(%xUrWG'=făU"]09oh%hZDGD&zvL\0%])<&?^q9h6Wc<H_R=j.TfJL:auo^D'U0mbT()iP^)By[găU"]l2*>lqV+==c6ETsbG&dUH\%M_:X+vTf[<M&UIDAyWYGb*2S=F7)2jI_5-K:rHJăU"_n87WUaq.Y&s=HvSP3=%s=#L(UShe,F,DJY1PcoI8J-(N=n<a?njIY^]<$0qbQSăU":7mwoo;^Mt.WS8*mjLU0H(W1q]ee#%^LIbI#CCpQMLMoXrYE8#z_jJ-<<_ZI&\găU"\(?G.DM6A12+C&ZHHVQg&b#v\?<TjU2gae%DzOK>HmIhLRYb0AP=YSMXC^b4:SeăU"bBWx2)Az+qeF%6->\=3)-(]poDpxWv-d'CR>sgmq&%1-?(6%gkOl(7ua\q4AA1făU"u9y=7?8?_%9Y[4HHjE)(otXC3i]CBdn]w_9m*>6j]gy&,k2k12JeG?/jF]$QFQ\ăU"J/fb,Ow>vKFE^K+NkWr7+_JwO\7Z)4%:3Zz&h*[+'v.BngeMc(n'='EF#A=4AQ:ăU"f/;Z3i%d>rV<lJq;q?k>]gOl9&Bu#$6b4JSB*GQYp%L:6bFulVcRA3Ipv-.3',ZăU"LKR3X[Mi,J%C##AX$X:d4H\qOMx6G4:BKRa(htv]dhnx9suKdBdhnN0O,^uCDYsăU"u\R_>N:o-R%ZTH9?qJJkjGZg+'lHjcYCKvvV[POcJ6om*/B3hHI2;i&U]/fNsk%ăU"sEeF_^>'0[;7$W8yTtk%DkK%1Hx1ig1'B]uX*3%ilv6cfK-M^KRdigLQ#6,lJzOăU"V[7fUeG#%g;*Yj0mZPX91B[AuL;[aL6?;GW0xM1wI/K3AK&5MAMoTnc%+p0,HGXăU"=z%pOGKYYH#=5/#JuX=3gkclnB8Q;<j)#CqnuJNI9</ES:)h5i(iVhqAHE%a>-EăU"A$KL-w&DIiN<-q77BT$j7sFBKXCOmRHcNBtMo:t4qra7f<ZZlsEpaQYBGf%iI^<ăU"M'NC6biuV2r&KG=1Lu2oiEv*UK$\L0es;iuMDFsOG6>Bvz=H)O=PnHVvI5T+kI<ăU"bZU&.XnML[\WN0UE=a6w=jgOc/RT6vb0o=jEqpX>Z)xDVC<h+WKOsn.kK25_.K$ăU"2an\/W>k<;ed#$c1gJ:G.wE2u=;'mesj1MQ7wDZ'>('RjAf_Rs#JVh)W7KJN_SdăU"I%+htCdHFR)\XFYXl6H#6QF0e+^??4Iga&>uJq?3]jjW&U^J6<mGCFY\q=a2IOdăU"xAOZ2%)D=b4BH3[by>o#5q.D)C3].=WobIsqi.9nZE4T0&8-^B*?e/*n5UGSX9hăU"_.tc)w$L&tP-1&<W&Zdhv)?v5%3A]=j_Dk_$6BsxTqv*L,6n,<H5JT\B\#Au$lBăU"18oqS0sudCIWd4yqzBqA*uYKZZVM[S\HQrY^W;?_GWdMyO#9s(&ftes\U_Jv)V'ăEND SUBăSUB V3ăU"/)%/:/rOFd7WDGvE=BCss4MGb%)93+Kp6=UqEo(e+9>\wg,Pt[6QR)C^-Hs8M?-ăU";#3]6I'[i0]8<,rGh5F-i<VzpPN2VnG;oW:Kojv)lZu1(lYt*)c$)yF%S=)ZN_SăU"r](z]'(AlmVu9:A]7_;LBULGS#/v-SS_b^mt6eTMoB1bJ56w8mCe+#L0rvy:OsFăU"h<7xSVgt+/6o9pY[N7Sa?a,<xdY/oo9?KD$7Pn#a;4g&G/Ui7_ZTTE^=,&#a+_+ăU"M?,Ar2wKC)wNvg>(e=>UkMMmFciN\bBS&:EEZ(P8_-.'LY*.kc$qU+A2Exfj15<ăU"*Car%4/G6X&^$JskVlFLNlKT$LP];XcP++6'ixE\JH*=4<TumxA-a=e^]eWp+-8ăU"P3X+8x.YJXSjak/JsR^RnNoQL\=S?woPg'2;RS$%TXS>L:2*a8eRJ\Ou;Sr%>PFăU"G*l&QpPl.gZn=&l.oJhc[Z]V^b&\cX[)XJ6fPIT$]PNF(g>r9isU=Fju((oBNivăU"<lN&(NV:U7i'nGO1R_ZdINFYFm^Mj::i&\hO83rg^Xu^w,,ijqkBLa5%%57:3#/ăU"O-N\4]H,JG2v.tz3>6(xUEssUk)gh%wIP0^%vODGqkT?3(;fI>L_L_G5ul_]x9[ăU"sIYL&[x6U4H8H((q'y[%$Yb?96+RnA&ozplm]Pq-4PqFo0r-6*MnETy_NRycRYNăU"q1;&xt<Qw)%v?.H7]<lwj0OC]m.+LWh/$#hDKER&8'G'>cpS'Mt2deneM(tsO>8ăU"IocLUud%I+ocLstd%t?D8kU<AsZ&TLT.Au)7mEQco^pGXIF\rQCsu8\nBzSm\ztăU"Y5wKDVPR(HZ)3nFQKqZ>plUlrC?t_ZC7<zW\X8p-wQk7tB^4Z[wqiF&V3<qyyagăU"h?4AVjzx#zZ%fb^ceb5Mvyd2AO&-4lQpuQ^IkTcVX<:ttVDK^po3f%A1z+4=KyKăU"LKr8-^#gJN_Z&Z+>W8]Z;Q(kge'\pR6P5EEX,?k^VD2raR$9A$gr+.7>JX^>5.8ăU"QTA#sMC%l]o=+Q+oGR9AY9/_wye+Rr<->tj8NQO?7q('>ebs8&RA[mr>T*5ZxUkăU"xi)S4m<h0XFgO<-DgnFJ]yd=eb^ZQi$#Al7jX1n&=vaWnXLBuCVz9P5]VCV_)s0ăU"A&jSLX'+='p4Y&mU+odLp*onE89utoJV]6w=<.I\-c]UEGe,u>lrqnDJaaOOg2RăU"q?YVh\\2Uz>4NYyWr3Cf18G&P)I4;Y:dbphNpBqG7%<27Ij=<D/'(D.R(4WmfN/ăU"kZJN>&wQuT5LR6tZ-rlj%e&]KG/uL&*rh1%%Pl^;OmCAx)='sn_Juh<5'C>/Dd2ăU"SgS:;^<sJ%%+Klx*u3-T4yH,xD\=4cA)J[\b>dRJ%YIy9,6Vls(lO5&)Q*$'41lăU"C>kqWpQ%<aS3g+<ET2MKBQ?p^GcUSNGYEFn%-9,?;0l]<7&\L-w0Ul)MJO)&uajăU"oXe2S+YhmTWZLr+J4DH2;3:T_I&;7rDnTNlXPO/;mDn.BbNcjq4APIL1)Ft5g^8ăU"r-p[-k;*CBt1Qtu:WcPb:F*Nt\[#cK2W9\oWQLd7paY2bX6R_PP_+SQ0i\clcB*ăU"P_AbqRF/cbQ\KofHh0%1Ht])5-O[z6+GThVq$3GdCGpW9<0j;9%xYHl6E\LE?7păU"5fH)q<tDnnzVqeHP/[9:zgA0oE*\?,aIhVYMRI1JN,:$CTNT%-Du)^dt'3nf*?dăU"gr?8J;:&UG.,J/h(HkC++kTvUYF;%QL^1]EgS#rg-:BJAUT]ho2r]V2[izb5[StăU"^\ARPj2Uk#tr2k1caNnEuiWbtsV)x7%C/T[)D*>)Kr9b'\1^r6]*GoKmMg9%c.păU"\hc/y3Smg-F\799GmC1.KOlEqN]^Y_c<.F6_QsP-n[iYuFVd_BPa#nplXiB$fr0ăU"h)%)&9-t?,*Svwig,Z%YQ[2zmj7H,n)TWt<BHVbaQl?\S&=H+hL8tJ&o6%OI&WHăU"LitJI7])M1a90b;hy#H%gw\Pu.i(=q[d7TTg.]*gNX(M9J,/9Jlz.A=zM;GpQk8ăU"yGOnB8^GE[_C4N)SL;e9A,\qHBfHUpCaZeR1EdLPdDuJ^C;-68LON*em5wA:M5RăU"H1r,RLSgSN\4cp3=XN#;C)/.7gfi-)78<>BHDhOM3oK$G79ZchD$,\gg,$?W*)săU"OP<39DeqG2+jv]ttJjM'kyY2,o3Yr2&/TVC:ed[JP1eY[n7o0'8(xO%C6$gku&9ăU"Oq<<?GwT_*'jhpP+1TKb*Q[%wZiVRvCD^]kaQdReYBuWVih1FkTU8$9'\jtsQ.IăU"ZTnAbD48;>ZHjxf9F7^U2L]?bO-RwO2uUlv*v7&jOs)On3oF=ac#L5u_ihBi.1GăU"#qYvs]SK7D//SRUuGZ+'xIuX,=wx*=%%p>h>Fi31o_f,?(Xnk\;ZqnZ=LiQ_h)+ăU"?V\r0$$(E5)<H^GZCI>tD1Hxgr:T%m^k'N$1Zh=9ilJFf45H+k3*FC/Dnu_/G6?ăU"9'Vp63B94/&zoW4zmRpyOv=bI[=BR(%8Jue&6JkwQ*X#^V3YkNh'$$<+AH6\k(hăU"IYaJ\mV<JQ5A4xKHOf]47qJi6m<T]&TvvT$>F$8[oV,BV77+kf.T'+6p*##iCr_ăU"p,PGApq9/rici.E[7Ip)h_PFNzpA9(:%BBi?JO\R^t83-Cg9pnF)jw=?aMS9jB?ăU"v_+NL92#K##2zUC1+vp/WgDm4)aCA??rI:nn6L4U]<HVNjk#VV?s[8^(g8WkIM.ăU"%1*&pENDTEs59kc2h]<LY#fSpPF5u5G*6]SUNjmY3[Ym73#'.jC;;j?r]md15:<ăU"aC\,(I/\q_LEd:#HU1CBLeq1GCeA_oGOY'VFindF2CQ_dI?wQ[tS:B;0RGo&)_?ăU"Db%WJ.Yzle]TbUNAjMn9NCb]+9&w(mOhXKj$-FV0*xvV-Yg]'tNduB/bIa9$i;9ăU"'e5N],EU(YPfR1MjjU<+>4nQ7;7+?%W_=dx=n-hoW*H7l\A88e%PG3,&fm2F)K-ăU"m^7RVzEAI82;)6RUF44c^E*L%FRi*:Aa,eFG;*,?JEI$j..BCkokj%FBY-S:$z4ăU"C:22SxCsolQUb,5C4\JLqAMB.tXRlh?3#ApDJ>8#I&q&igNBNycTs:ai_tn7fT1ăU")'It.9SD-mSqPo+s0JPT#GFWhHwP&VL^U([jL\Ej?^^lpR>B'u0/97eE*%N6j>/ăU"C=hJt=0ohrG%Vd/F\B7yiGqH3ExkhaBOoDr>jtJYn=J<qtdUu4AsUl%tH<eH/C&ăU"QQb=9CFH$JHgEOR]TCrw&EGbIbMtLWb/u(H..)7Ccw4k\[rT,DFMZp5lYPaYMR^ăU"IM69\$zjIB[%;Vh3YoPK&XhFiZ_QZ+#q4f)#\V9dlmonm(ano-ffGk9X\u[?+k0ăU"%=6)frEaK#tfp37IWnd-^aV$Nq(S\X+=BfiLF6uCW>P7BOZ<NrpZiknJQM'RQ$KăU"c\D2tP,s_Vr#Ilw[]sak\vsQa;Vh%8$j,I$KK*b/\Nf^$0(+9'YR9E<ij?M:B*(ăU"sY$vuhW*)h>]e9CI&ercXR[j<+%&R7d[qu4RN##/1Qe4JXpa#cH[YvM^JdNb0I+ăU"1%]kpVX0ek-xQ8=^n_b73g/C$3XX,M4I%#_$jEFN=b-^2Ny=,:FN[2zcm5dXR/păU"gc6<a2&1#Y,ontHrHNKO87ttj5Yjkm^Pms9EQ^nnIbxT[g#J,3wjX#kIDcU^apDăU"G35k80&Vg*G96H3+Fc>a.H6R[BOVx86l%l*\9CgN'cN_e05GH:lU\wP9#'FLV6DăU"3b>qkdehC#%cEl4FAk#_[atDh:LkDG:MWAPB8v?H%L0T%k9pB0zICoC%\n1Q-KnăU")bh;J.h6r?R]A8Kp(Xuk92o8*O(^&g6hYP[h>1Hw#_#k8:q7h/+DdWml+=YZp<wăU"&gQaj_*B\6=4a<Z?2&W;N#;4tom8O/mKPj=NRH5_Wt3TG$qEQLam_pN&o$8qn5hăU"/lLOh[eFpcLV*4njl,tQJFQp4Zg<W\niN4,7u$?qx-1_E2Aye>Lg8&m]$$$<83XăU"%,v?U-;iLg&X),3_Z_1xE$ZDtt&0lcvr(T;rU,4cx$E'-4ZPOBq^.GFbR(C]%87ăU"yR&T\JcODkp&HWQ18BL2z%Wmdd/HgMPVPpE>j&LW,hKd69bN+1;&JshB7fV:Iv=ăU"IfH3bRAtbg#+g[(.%-qbtC39oJEO8%BL_vgLl9#J+OKEUBE4?do,jBq:Csk0i^4ăU"dt?(NYf>G6\/Ydf*j%-DcejB9VqE[>T^_D0_JGMQc7LfcS:.eW$N3i[qUXNt-soăU"*)e^ZXJ7(gXZpt(:D/imV0.;V<tuD)lAj9G(5M+Q<B%Y1otP40^8xO%-O5wE692ăU"'>]*V4Y1_a$X.>M]S,ZPbSf/J(FW4&iMASM3H\B'lp8Gf&=^sM&raKu^8A,RbusăU"Y1g%#:/(P2Y)z#][w5V_9ti0V99ISkoqJVEZiqk6?=I&mhL-:)vW,Yz(\xAD#4SăU"bP^yP/g5,sS4TkH'0A)su^TPgMYUv(Uk%NNN4zf-,M,D_qo(q>THKioo*j35E64ăU"eR?-#<ne^p_Y/JD4mSgs?7e4q>;Nr>a)T;K[t]V:iH+TjHu]a/0u3rvU*aj)2j,ăU"?8od3x3JPX)SVC:l'KqXU4j3\%M:pE4b>$?/F+NhXvJJ^MEO\Vx??tG'5k#<x2kăU":*)6FX+H]pDdEJBQ4>twNRuB>u%U[,rr5(M3AcnL>&(hh-/<1oNdV%qF+0-5/BdăU"==GsooDCX0FE_%+&$Ukv:UJk/<7)80[Qus2']t$a_C1'#idj72t5:0?_or9>OY^ăU"qC.iY$&TJ['C7%\C9*z*.2aB2(rFh$eF2-Sa_32#TAP$;SQR%Mg_0J-3bi$?Fz?ăU"Z2==00rcLo+?5Pb*Jis5X7WHa6\YuK#sZNI0ACUU.mC'r]v#c?+>-Tk&Sa2F_$OăU"DG*,I+4c-6ok[Q>9,MWuTvh6r6NvdDSJF,u)0xCut000lpXSiOYDjl4cqT$ko&]ăU"/JMP*jQT[fx<64.F_F$#Xbr*[-glrw[MSG9n7W7f$_B:#4=m\[P8G=<ikpe5l+8ăU"pIzN&g*m$HqrwVO^faRA;;dHeL+11RZv0$XGo7$jcYY;'<B,k/t,YcsA:dQ8>'LăU";*x]suYQ,(S\:#R(x$,,/LVLsaC[2G,]3(/niz9.1NM:0]:#/V4eu%k.zmHpScpăU"HF#1\dTU^ViJiHoJIh]B^^fxdMH>Lu-b1lm]t,(:n(=(e[;>VNLMeoWE+e6xd5aăU"8C^D3W2yp,.nLC(4<zC3S]WYZ5wI)LhC60V9B0Tbkru8f25b09hU4kSd$scLZw:ăU"vI=&6bb=<r3=bI42,B4b5cVkh#4l21LR^n=(OYUmVS*ZY'DZj5o:g>VN,=S0TT&ăU"+bmkTNV#LcN:].0d$Ph=#<pMTmb:IHM%#&#b>%4XC7YGh^&,2Qr1+'F&J[HMu5UăU"6BAT0H.58cW/z5Ap3D-bf^vgm$Bn3t[,Pm$F_R4FQ^iiao-*P0MR6fU8RA:u'D$ăU"f+tpCtw>po1#;oNac5PkVOS.YS>Z7.Jph>>V.<AYl-kk5D#gR)FgWRa$]<o+\;eăU"=y2k\mj\s&n\JR_mYCN&n8b/'8#b/TxOa$[D^/xaOAv1:RAm(r*rib*=XkT1?FPăU"I+x05fnq-*__&+06;>dK.5=$WQE>GU7X1HOOmZ-m;_Q^51&QqN]Uy8gDB-FZdglăU"mH*+\5y3E^l'vhn\u,b432,h1Rf1_\Kc]&JfD<DrGaSNLdBZU-7DO-*[a_aRI)jăU"c;pYH;n=4>AM(<l=8-Jq(snU6mdoZNswmqBLYH&/E86$k$mc-U:B,/_;d)'sNBiăU"K?jPulvGl%gKe'q\6+jwL'L(oa4Z2h19fQN:%[hS(3Sl4Fae^IxDP<FHjTAqxksăU"a%XTlH?XTr_mD^?>^fC/f*:3$vxyt%;TxN3h4IkW3L4vUNVGDEpfVsgaMwRb)gjăU"%JtytqkYxEW/9l7/C$k(>^.S?/Q<.k<8P,[mCF^DbT(=haLPQ=#KR$*L9\h+gKWăU"gMFVDu7b:gEDsYp)5a,\_QDNW8uKE:)ss8WqrgBW.Y=*gmu<)Na9nR[Lg3upkOeăU"<.8YCG[^Y69];FnST?\3C?6*^E61eZ39DwBC&DUPgbD%CRANRb7#8o%?Rp/Aa%[ăU"UbrbetSJ*'HL>jI/D6Mh.=j-Hrhk%7\mN&D;=jq7\ml&^8AA)T7L(2^Re5lSJC<ăU"^&HZmX4=2Z=UpCats/;h1vytn5('a(4'AD1Or.jQ#HHxnJ*_[n-\Ok?]&h1u0(FăU"N:a(Bwq2M]IS<\i#+foa*V8ZrYCpb=nokCD\Y.b?6RCV+=P[UB>W)MRBh20(Bu'ăU")=1,Ah$lNKlzBsK6eAJ6dd;:(,#<7cr#<Gw$MX'G+\wo1U'd2P.=d)_Lpw]K*vHăU"R*n8kg,Q-aLs(-V?W.O1c^EXb0J:'J\1Ei?:g-CJtT5=L_tWr,/\qL:a[[JnukbăU"2$<l-KU]neK;_WTXc,/'aq=.+]YDR5Q2p<I<kM,ioNFWow?QpmrzMJo$*M8d2>8ăU"4m3>LG>qw'U%uiA56c3cnTgHY&XXG*6V1a/Mh%M'%-8N9HEerqv3JPWj1m.nWXxăU"oX,[ET7:m,,dFke9K:_LtfoZ*Lc%NkXlfC</W1QR#?e#FbG13xVdVCI)iDXZ/6TăU"<tr>96ZKoWpQd<p173mj&TL991j+FD+8%3^6POM%#uS#?$iV'Rm*#_PqLe&O\g:ăU"%4od5bBoZDMl.=V*0hAO5X,'8iGJm0Bg0Vk5k$H23\zyX2-mS#f$5=<LAI\^KDeăU"q<\k^Db5Sd1bI&KZ=UkV^#4Se:q\<7?=t*UQ)iXwv0(qGAw1Ms\yX#(IIFQExA.ăU"2S5?AT]mx<\Z9YDS#\jn5'\6U+Bj6?#*94bhg?5pqjs?r6>U2uT0wu>9h8l]RmaăU"1go^3M;9NcaXB8DHe-\fFhLf;J#Pla-r((Y^5*b;zS&[1)FK&r7JB>Vf3r:.&rsăU"wu<oSs1[QZD%AI$SHIC:aSfF>w)]MK])sfDn'<A>u17tFHh[Ae4:0tR*:Qe5/^4ăU"AjTN7?a(LyOO(uG_EhB4K%2Xe8\BciGjj1(Mjz)JD35Wq.UosEd0j^]d+q)U.emăU"%%TYeQd36M.cMsL)&4*^A4]Mo#gD>%-V$4MO&/jht>K=w&FoVJVWnGI4_j>nwtQăU"T]4F1bHxkM7\juL8ist/eTd4o.Y:J$J;YIsu9bE8oA.HuQN-8>h(^xJ6-:WsY\-ăU"q-%&Fgg-<<Z%='vd?mfp.^'v)%*B,%Z0:7;,M.:0J7tZ.EeCrxLkV'+rG2RIB=ZăU"^dz*0?u8S</)*GXK(tJeKlqD88'\U#)bSQ,j&%dpl(vmNrLCJ9J2?j;Lc'+1.aUăU"UGR5*20T51af2y.0+YLZ#Pl\^$i%_YO^S1lXwA-+&6DuyLMNZd6>Xob]JnD:SC4ăU"5YMC>a#*9Cl$?wnCwNf4yg281da)ZsJ.&L4c;7X8#*U;si8P5bOtVpirKsR:d+JăU"6B0e[92l;\3H%;,<Vy%%9y6>NwJo3&RMQ>V8e<,gH^RHMTm>RL(Rp;G3JCVQwGaăU">#xC8$0ooPHtrRX6E)S8Pj4qnl)IY&$m9S7-U.Y_p:jLx7?G[ewPGGpw#-aIpAFăU"Oqi\A&R[*&)<uR0HC\a(?hTo''6,db4m++bnPIf$+(.qmm&PHkhxgM_hrO:-B_făU"c8_9dk8v%^-_q-eI6I96l4F)'<wOF/&PbAe))XAK5AQ1(EZk[h^aA\UiVb[$S1(ăU"&Q&R,7,Xd_QIgePJCW,:+^\kHk4/RES8TpC(,m(eAh(ToVJXaaJ+t_OJ5t:3tL$ăU"7)^3]pmt+k%S?T\ed16KQENJIO.O$*_J5Q/=[kXueDAbQJLttKmVS^ZNsICHgGlăU"9VAUmCtr3gvtLPd]4t%PTad]1tBU':\Mrn*w]C0^dK_PK/U:-RAY\?(dkpVWDYJăU"clvP6eQz)GM8tcL%*pBE3lBb8^D)FnmE]*je,]cuL3)1i?771^VG]0kB>y*(XCaăU"7^:NG2I(GTN<sOR#T1?RIc?kY?NuD)0*o;2b%kk%8sx'KQM>E0Nn'QXu%?KrLW5ăU"r*$ogQRi07Yg(CO^,W<Q1fOT+e6c-Oa%drg]M&GG=]ufLGJQ/=I3e039tR3st=/ăU"mQ6_>uYXP&f<ywtXN=HPu4\9,*h90o6jd-VkT?MkB0xhbP]m<OokOO9<DFZ_OcFăU",c6$U?'Im&LK$Ud;7JKBUXkU%b4kL0Y4DkRO)^7c2n0(1cL*m7FT\X%,Up1)mouăU"hi=UP6YLGD0cb.7skEPe8D5-=(X07D<9K8V\^_Fl=PtIAiklarV;1+pZbiK]b\dăU"9l?T%#N+hdbrfU\6%t9nSBI^jIW1]YberMDAV#th#8VY.;N2.rkvehXgO1OH(RVăU"Gu'%1nUK&EfM5l2H^upo(,5k<MKJ8QDSj\:bj7CNiPkaXnqE3all>D(%h)1TtF]ăU"*11P<<&ZSGZ1(o[R-SlneIqiH-FeR8;z\S]u5thbU=MZX5c/aWjD9inF)1p]BG:ăU"u9)2RK\V^x[4rrWgtpkXV%Nc$vDZu)e((wB/CAAu2D>;W)KfsS\,nT'U0CH=.kAăU"Wd$;=l9JP]-<7d;*&#_5N0IQLk)Z61Ba0^d]3V4=Z/J2Tq7J0w2X/3wl>0EGQ3săU"&TiE9f=(tptQ4]L,Ak>B:vJuGj03QCZA^.bBr7$t#j%B+_8vwA)3w.\V&I0q=0BăU"G;#SR*7BU7?wXIZ=X4(4w%Asf*HnJ9>MO40o16wl>^Y<VSJ]E7UkZ;;:bi'(w+*ăU"aj5f[-8%:QEp#tPk\NcB#V;<D*A3tLZtc56Ebx7pok1JjuIB#g[2$_pd*F1c7/<ăU"t%oxAskV$.l?kuD,)-eds%urf$HmswI7g,'-dTOKY]^i;nm,?f=.Nv:5o]5uu.kăU"G?JH>-Q[,UjYB<V]AZLT^:'KMg,1ZQHJQ,4>H5UQ58ou6HjVA7_*Lbe%vR9:R)2ăU"HpfEj#aaM2mt2Lr3MN:'PZOZ*l-9p(d?/'nV^m>>?pjM'U[*=F.8ECl#0[*kQ\TăU"Kc&uuQ.0)MSV.zRK#Y\#eBcO9]3GX:TD7YtJX4Z&9Zr6v/2<$#SI-B&[+r7L_j\ăU";CT+;]8\Mc)eXO]6DR94$rG-A,R<#G/E'1qyq,D0bre(i-JiEJ2[(]6LJ;AsXgwăU"7M+0rX)Wz/Ftg-NuNQpp$UX&Kzpotpb,)n0zX*xMXMep)w290*03^)xy_1_-:?3ăU",hjq7E2AS)bwP>zbRv/tdIlCZuhOWHcFeJ8OoW-tA(iaq(Gmu&I;2Qis25Ej&]jăU"?tttQs7IM/\s*hvuoVxGZY9s<atGibDP_eO'.nY,'aOcYQC3N3liYIF.<a'0(%+ăU"3z_X)seP/6G(/:kTEISDy#>du&yFz>ujST6A'UD1G/?9F'<%?zbE9*+*wZ>XIpHăU"O(OM5o0wt0tU6]'Nu;_'KluN)ILkh<Vq+FYfwljQvx7K]I\o9.Mn=G9sN0sjewuăU"*361mtBvQ:K4#$/W^[-h*>/kj?>M;+gVrg)haNJWBXRtugM58Z(\KhmE57CEVM<ăU"fKHph8pnCg3+g/4u56TXB<6qAJDE.xOZ>#Lbrogki3^cZ*pAcdi)WH)mcitQ$a<ăU"BSFD(\07be9<eF[89,:fJtk4Yk?r10t1]=-mCrRt0lCI#?XpU]iHA2i%Ua*32VOăU"#e[)Ypq$9.YI,62WOPtnv,R$Hs0-Poa)OaSyhky0h)Z5^VbVNhrj=.6^4ZdSVv9ăU"XIwkV99idBkXCJ?2ccLo'[v]m$euI_A?\]S.)'f/:unC0Gl.F</%\&^HDYbArjDăU"6Qi:2),4X;bsbgGHUd0KM#)?B'),sYvB#ht8%fopt1^RcXjoZMKjzuh;6dpdo:eăU",k4R)Ioa]N8Bx9uxLm)85NRLHtdtAk>N614HoE)tDBO7FNY*LGI$r.R,4TVvrmdăU"S(482:9E&&[z=]R$+Sd)O-_^bb3?/Fbcl82)n>mEL\Vu&g<nbf[[iqc$\%$,pBsăU"]r$\5ql&dsfs]Tb:\K-R\+[e0[E0.VcbNcOxohbMpMtWvuo?wk<^dN/uLN5tPz6ăU"1IJ:0)coqZ4UB#?hNHdkp::X_QN:tOE&,NPRl7I#,_G4n78wmagq;k]_#4^P&=jăU"<?J0%E8;IsCG)Vf8Qe*T.Mog;qUSja:Frm\90;\?W&FuhQZ$-\;b)N'R%D;cYr,ăU"aPiRl'O-(O;qD^v%,uBQe+TJUMA$6_.d6;Y[WPaaru20x/^a/K*:%dYEhi7mk^/ăU"A;LX\;JV=;T+d8RPK:h_oZy4iONweLRwoJ\Cx2j^Kj*z8f^)z*Y+(lg'59qk-/XăU"O+\%Nrj5e?1]E'.bk%;j78F?)PVS6)98q#feS<hb0qVV\'?c%36XS3qBDrLrk>SăU"K:f:cI#<nF:,wZgOs^CGFs<F)w?.Gtfd^$-ra0jpy0;Akce%4jaNEx_SrF9DN[<ăU"Z9aSWFDw&oKZM8Fr(>yrzU3s/O(Q)1=0]RGh0-'9zJwF4Ypje<5]'%3X#MDU;/făU"*8:r:*m9eTU)Z]8hQ^4\%]Q3F^Z$cB*ye0D'l#rYLwGpUkqZ4f9GOH-q$k0#b%5ăU"0X(%^:M#j+&VOoo1f/+w7'xYCYZ8a_Y\4q1c%vjc^B:WR,A.9mWR>O/EoN*it:xăU"kKX5=C((9LfR53'O.5UGxA*aZER?>rkmcXugeGrO&Q%ozmi,+CB'cnJ<wa>&jJNăU"ul#OZdNl19Vwq:TnalgmGaE&&<cG%nyq4HksX?D:j$S)&eB]j%^v,f7^$++5;KSăU"P-1TKn*q8^^-xQF7GCjO^sW]-M_DkS$(xjU)#s-4aKB]zAcuAc#<9f:mDCT9_CGăU"\KZE+.6w_+[KD#.Y&AamRi+_'[eMC6tQisc+4JV&/+]gK##xF^bWi>f=tq[ea4DăU"DumhO7BC]WOW/qH,9wFA0&G+cIRL1aRI-TgkaJ9_%xIK=.n-r(fNv1V23J-F1d3ăU"d],5^+z117<xkYiW3k[?d>k'EF>PHX_(9rHoM%fhWDDZN=Jl*_4bjBO[FNevz&$ăU"e;D65n#Y$JI;a+c\)nWZTcvKpJG2+)9]yvZk[]iu.8G#6Jed#5,sp7u)#exVV9oăU"([RG'vn'&$N9]xn&u7lY574ziGOr_V^$i,]1O;&nqr<kf=GkOvbjf4-*cnKsv8oăU".2=8m>M9=*JPYq]V9].(N(1S.e/Ss&3,h/yFamY4._;^=t6*HhZjptR2HQ.jW6VăU"#.[(L;_bavZ$lF#+ie1)pqTp$W6OfdQ<)-66<q5Y>X?>eI.2/_YbJVLWCU9TIARăU"]nmfeZAmNajIG-B=9F]GrT1S^6v=?ZrkVP.o./s)U-K/ptm&Z%Br:&WtT*FUiu7ăU"gg,%N,teZ0T0aU^K=T9,G%DT*HEix2wC%S.;\;-i&.JHX-eh=laRexgxaQIfnc(ăU"WTV,c?fUhWVCYpt<:>0HL*,G?4INuu9Rm-JZ$1PLJ7q9Zw>wHjR[dh5F#uB]3-AăU"dHwYq)hjHSlc9Wc?u';szoLLG,A]k\Z?7ORW4%iGNy-S*k4Au)K3PX/Akze7Av%ăU"TI-QD-9W*1YQC.Nuf+Ph4P&I%oGO=(kr%WjWdljzobuuQSC?8Rro*7oS:fo#)#păU"73j(-y4;uO&*e;>/lKGs7)1.MuStg=h).g,cUam^X6KH/F0J<$&\HOrsP17P)QmăU"we/?G:KxnMvG*Y8;qB_dCeEoAV=PG#*'h29i?'dn/,9serNM\[ZQ9W;C\Pd<xSuăU"<IAuO)2^M5V-><9Hr?WPg>oaD#d>(j[2jCpq.<lEqrpC\.&Evh96eg:Cg.*]Cb,ăU",JU%_FVA5+eT5#LSl7gS>>\DHp3qpGRZ^c=:2B$4.^%3lwWa\SSiH=ZkQ$4>aE4ăU"/a0(W?=j&<+(WBw*Z3T(hj,(HoYTGhN[&sW23ydEEH5Ic_bV*ra.u]k1ndYjXq3ăU"c-R#n^)Vt]CDP&8yWN5A35b3ULK?_Pj]n];jr-#GorLYXa0>8;B9j+>q>FG2>p7ăU"k>7?beouo-XP]P&u??rb5Ba^ca=UJWXfq08c7+[ejLFl877))PWt>r=je7\GQ/WăU"W+S%248lIq.&,qwut0[:k?#*JuJC<\u&;^rl82A?a$wkIbWwnl?-:Z5P(X(a\U>ăU"etI1BH.N:TD/6=>ovW?F.-x)]i'%0)8vEL7/T^WR.e+BB.ucg+k-'\mkdE27ackăU"TX4JfM_3fmB+/?M+U>Pb54^rHP18^bWrQT<awfH4tE&[MT'yl9Gf<2yJ&4Bz_&măU"Uoiio53qa#ggIsWVfAKclE^\NhG]r8WIh._Bf#?[7P(lX21kYeS7<nDr-BH0ieqăU"W;S$>>C9X4Q<HrYvTa-Q/Yd>DGQj'hphT%E-P[&Yi,7UBMZcH\:0GEG1K(V2hKHăU"+RZ4v<QsuA92M8k/ds-8LVpvgOE00+#onYN\ne>=#TO/m&HPdP]IY+)%)1p[>D+ăU"/a?V8LJ_We=vK%frFpB;U6i%XxXW1jr'YaAdYmeO<u$1_.hx5.[m9J%V2sk7DAJăU"9VV34maR9NqELrg96xMB<t-G%nS5:im1l9Q%$aUBWZp^)c:L31/_RaFhnez;_bOăU"9a_XdbLgS:Z]58HWZc+r7i7NDwtPkkX6c:0'<[##1^]8[=50lOhx+]sD]C*6>\FăU"NNP:'(L\z5Be4DnadtGLvWXC\ccjxM9>+6S6TElCT.S$=[n3d&j/pjSMf8/Ndm/ăU"/_M2^F_h(haqs3BqF[(QpcW;<?Ml9I2kf,Lo8hgcyWr[x:sqSQ#T^(HiBh6ICu8ăU"qx(jS2)fV6mj.tAbN;;.EQ.8IqK8nD,5Wt:f=6^jyK7l.tpVV9CHHPC=z:XE:UjăEND SUBăSUB V4ăU"=L))f4d[D^Y,=lC9vZA20n&PQF;80Z8z;0kOANB<87RKT#jSN^EES4nB5Z,7Qt)ăU"dz591.9h'ErR(NCTd2m.2Q;jV-$ti=l87:Fue/:^.I6l_GYfvW^KZQ$].9N%'B%ăU"YHzi'%L/rH(B:wU^JEOif16AGfNurK[oqR#%gT9pOq'Hh&R'R#hbGRL3#aI*_BtăU"C6bCPr$6'=:7#HIg>M18dd,x8^f=(c$]ltDUP9pnwprfn9-Nb+elwj_/:a\XS8RăU"B./VaZ<'F#&z_Kh1Kmi:]s?b$4R+cXA[oJW&]CHscGd-Imhp0]bfr#3IhjPb9%*ăU"r[y35V/s7[>yE5nKoF)s=\paY8rF(*3[Er\e8)Y1DWI$P9%E[Q*ct+$_]bznZF_ăU"UFODKz7G[+3C05NsB&[]Cd0x)V9/lziQN&eW-11Vd$,I]F?]ZVaYTBRoU+zd[(MăU"WhQbKh<lwMhCkhJ7xGuL.7AuoOVL^Xq?(FQ?(u6EAuHJKtOpb\Yvrpa/.oOskniăU"AWh[wQA1u6iJ$#pWRASdgDRAmr9uQdc6Xv4.=F)h=WX8OQGB)'7Bw>&rH72&r]7ăU"FlAD?-4t%gCTodT;a3(Fq1FTs.H&gtm)lsk.aDeZQ,[k)XC8NcqnxW]$Bb*xolKăU",h[1Cf&IY19iu./5U#o2D2e1tEx6y\M(vEr[FqA-[kuv<,2.LgtbZ>4^JKoINkkăU"q8d,t(b8yilI]vH;nnK_e=ZJu_mjQk8:qoju.8%za/3G.=&K8r&#fljK;%?w#%^ăU"k<6nUZ+,?o-)s;>48lSMIx5-Wasl#[a*stfu7kC8+jlj#aib5Q]9N)ssS0qf,M,ăU")(x(9;D8JudCyK#>Ru-/JbHD;b1A\n83/g\l*]hEn?h,-%pjDtMrT>BuR0o3xspăU"X8Vk.[G?Yara=pY\?C1QayE.ke*?kD?B]5;4oOYh+T#2C6'0a.k*#7&Cf.S-+&1ăU":q+t&dA47sDAIX^ZBv;CR=d9kGrraIbc:d+u/(?DqTIM*o0emnsk\ag5y;r*#.KăU"&S+V3_I_,4y*5)Eq#dUPn=Lh_n]q464JURwjR$9BCx&B>Te'1opURpkLc7R7oRFăU"+RNW#ZNH1WXar?k.be<DHrXUMQfz3IfpS_gVx.9%r_U=UOCrxHL6SgAD(*Pj%;NăU"j(mHkrans?t4xTk%+$;1^)Q7ew)>z-?k-4&Dqc\\TR9t9VMG)3O(fp#.]7]TM9găU"h^(o*M_5V8#9h*]Dan<7QP2:=oMQjit1%/y-:aKI;0\PVR;*(7O?Z7RzjrdH<07ăU"OkX%>HAV3w>>F\na)T6.G[Nv((4-_.=Cu^\suW[#H3Il4X_IPO6do2a#>L\/&M+ăU"CYC/Lgq_$EEOnpQ98NulTusypntb56y[fAr&#<.dk-*kk1zp6qYCUjPL_hpqI_\ăU"DIC.UrwtOFrfI9Vx4W2WowXofD^+B)=mY>=EN\C,pFUC]rOLNQ%Nz][uO&HqX&făU"DUt,wZHn+oWDqyWp#vKy4a)$sLV.H<y2+V4TNt5F'aKf5W4=wA_C1\WpIvkC7=%ăU"Zx'%up()#9%'O[-%M'oFI>U4x^x%7%%w'%%%.%%%%it%x^\S[nhtNat42;.U5LEăU"C?*iq8qsB=_[e6U03pZibEi-M_hOR;AJ<Gl&$-w_lgdFH)F6($59TmE5HgPXrlTăU"WKf(5N9i3C5aB3^nHCMtUzLWh0i'_IznD0jII5':0N>M:8+E]+ZSA9e7A^2Ua_)ăU"Tk]HE8VJ;;f?d>oh/<9=5.^mmj(m/r,&/I,W$x/S3D5#)m^4yr5o\\Hk2\>c-TDăU"&6<6>A<jFk'%up()%9%'%%-%hY&MGm6&yaN+%%%%5%%%.%%%%wt%rfsS#ksyDe&ăU"rWTIk9ER4v=q_/930o,+(.ci]/YK2go=j0,ZZn6</S7aobnjbiRw=S1wii1y7bAăU"%g3p4J*?1In</6n\gh'gp_W)1Y8a:;.#8eADy*7)HC_5sl7J[_#lsd2$ev\lH_6ăU"\>]7\OEN98-X8=2'1Ji3bR,3iMo;qOB*RTKi<gXj0So7IS/(^XLKma9SqE5_._9ăU"\EsT.n6\kF6vlfH=FKE_SMY1DJFU1Bsh,.FlvVo?Hu<=#$MeWk)M\2f2^,PHf7jăU"fal^o^QAZZNB0p:RFcR_>u#or&uEZD<u6TXUKW#-5ok&&-Ni3ps=BYwhCYu^0.FăU"[rM\9[0)jON>eQee+QOZ$]uG1^iN1A]%sS%[tAS%nC56f>aq,_c>KUGt3pLJipBăU";2u^Ko'j.q?sqbwe=0:FDs(8rt<Tl;G'17I/mRET+4Q#,sF,9kqH;v]C#'>?cqiăU"k&V%ZHk>pOFpbbXDs^l=qgOux*FMeD3)ZNGRJ0-C/Zt:vHjMGlHRSCp+%9MrL'2ăU"gu-IYANMDU(od5/d2(_O3tD+d/7$fuG2&S:25;WW,W.q>$s$SO3,Y>MTOJKW8CMăU"VS9gUU&NrXu0n(mfnvzMDDiu>,ICgLHIX+v8Tv]N96PYIy\,As:WwaFudT+&:^,ăU"SEaEMI=E$e4=9<HV69&UbrPk5js'5jkHX;tG:\-dU^0^>iA6CmO0y]2^=]k5JSYăU"7UOi1F_&,b$B3_UNo(A$ax(,&KOXyMp.dg<j<8sk+'WC7$-lq88aGLL#P<_MZ#6ăU")a=M+dc>f_x;hUGPC6tfE$MO>JnE2R=g<vY:UeuL98r\LJppa[Rq^<=/7TW-pQ^ăU"t*RgtNM7q6B$6dP=.m3AKVoPdB6n$j/xSWkK0c>X4DZNbwww1$VDoSH.i3ZchJeăU"j5f=bgcA6k<cBqNN&N.-?5hU7Ejy(6w_QmaYNoa?b+9D.;hn2#Ia&<j0)9hm\)YăU"8&]C+VhZt4rSx+BnIR1t:U03sjUXHw.lTXbPnI:5MH8[R'h3Z+qCUKZrP];v'K,ăU"Cg.^#HKc8Fd*DMv>OI00bda0tA;dn#]Twcn0+se%bGD[lJ6:JLm4le-c]c*)d8eăU"M,&I'qJrt(D9M'[nuH+HposlSDQC\[/djDpssRmpY1bhhd)T*t;:I-kIiiSJ^DBăU"tu&]W='ts1%QiIR\5XNmv'_H;J[*\6Zm=xBwNF/EC=<'U8dQ#0^EA<1&Beoi9qwăU"D42ouO(:Ie\g>lXlD[[?gr9yx9PKCM)hn<ynkPNI*duvefFJYb4N5wnCdb-+&=<ăU"%O4r*fPDonf_Dr+:b+M[BKU_9y1ZpvQ[usfKnvZJL4Nf%v0wZ&+lErV.waC>.txăU"=D%O8Wn&A3E5ktqG&c(v3tLyv7k-o#c$q.H0i.+2Tu5o:'TtT1nE,Ada^]X\'XPăU"U8jJi0n[;(\(r2l.GH8-fc0WaY-s#fWeb5tPhh^5w$Y^g8WkVAYxohQD$^0smZQăU"TEEk:$J5fmf<-E<c11RKV42W=t'Q=T3Nt**VRs(u#Z:0\iVT]HGv#vKb=W*FlbJăU"Umtd^fNgIvS7^5YvQspyx8M/X:VMa8*^DyDm595g6]R8qj=<tF]pW%^uHq8Y\oHăU"u:l5pa0a0DTJ5_Zzw_>^;i^>NJ5_7CJrs&$DTxa3dICruhZldoc%NMw%,FLh-=RăU"5?5Sm))PR<u^_(CTrnqGgcn\$KZNIk9EY?i8\T02p#95l[w+xG6Yj5&Q^_BJT;DăU".OtAr$r:sAYCmXaHZRu3rHs9dIgpCN>g_V?:7\N4?=DcmfoplI<[uvh.YqV)Vl6ăU"G)dl#<Q]^i8[SFG\t)qfvA2ffNB5fhWS1+Ww<s?<vkqKf4Db_X9<kmXRX#?if%căU"VpL_j7ZS8Pao:EZfo^eJXZRsJ.?5EgLkeda.3&AP,=m:R*&m:]fQjPZ[>pAN?6'ăU"H+Kh&8G?e4gw,>/mC=7NMAT4QI]j[ls$]fEp'w9nkA,uZ>;IS>ce%8xagN;FjgrăU"Y?h3)ad7,iX0(;N%up()%9%'%%-%hYSMG]X&zFr*%%%%5%%%*%%%%rS#ksyD/&tăU"ZHIj9>aSt2Q5&R,Nm'AQWD)o0JY'Q17aZaFlmoS>a2pY:\;L?sxm-nY,u&%A5aGăU"Hi#Gq(7EKeG-hTa7A5?-D]G7.a1B-ZV7s.<(5oJsFr^6>Ixdzi.FV[WbZf>T$TGăU"v?*=-b;.>TR_\diS4'JgM[qe):9qnTcsF*>/f*5$[URvfKT7:8S*BC_rP2<nn38ăU"IDckfuVh95laA\W/2e[\J)Wj'pQwQ46->2EjB]pErjqtRp8w-h1d3W1<+un##L.ăU"q+_],PQK1epL16X#DDvI=Ygt'L4qqX)OiG?cia*:l0-N<)wkqKpA]<Rr^Ate$\#ăU"U,K,oP_sc''*KmX1Krn*R\.FZ<8?m-+f5'/4MK1DuZ;T*;hJwuI7D6jwh))$xoAăU"2xTVAWEtuu$j\max=tLke84ukS'%,0j5w6a0kzWffl&v;0.A<IzZzyGZ3Sslsi$ăU"&ISER_rLOikDSs<?Ec$uJQM?#Yt+MN/cx-9Lct[7XDl]D_pUxGG_sNZIo_kr$/$ăU"m5ED%KdOU*0K7+Ateomc=>RG1*MROeYuy]o[D['XX8/g\o\itW.v;B_0eLo8e'TăU"[&0Q<-^JIFC.K$Inb%G[OgSNNO)?dL]Qd<dEnIxd-/v;cp'Rl;?x69l_XsHFZ(hăU"k>:Z.\iK$(7xH\&BJ=V:r4a9VorN>9FD$.*Rcr'WHjhV\anAi2-tlxs5,?%.wgoăU"rPfLd8k\jUt?X;j/82[iT:JY/Nc1*tej/C;.1#xj$jPL,Xk4-47Wu+evVXLX^;IăU"p9KdJT>Xe8]BMI7C;E%j7eF_Q(Tl:=1WU3n*/E_n-CF;]fpfh#DW$mC>K<x3),YăU"k7o(1hMjED9csiiAvqt2i-)rs,b(XpJZ)ixX=glAGv:G3#U'eU+/ns<uAbL<oNpăU"(&o*YeeR9tk6c20kO\nSRv#J/85bh%G(xCndkeLFN(lKo$sZ7(uTfMiN,WdxPZPăU"fI['uc)sivtE(y=17tZqq^dA3B*6srtx;-E[%5HgM3/Gm_LETNU\fc.][0w%H#%ăU"hPGA/46e\?v<fV2Lw.e2n\hci=VB#og4/WH?)<;jQ-hr+'gEa]Cj'Er51w&kVX-ăU"'T77Yjg*r5*?1Io/H5865ro<E]*fKWcKc4b>;%>&rQ'P+B.c6hc1>?cJ'B3G]Y=ăU"IuoQi+iN3x6L&j$.:hB#Pz.04c?wqoKCs,:t1Hrxp6%'v*m4n+^H,=QtAX&jR'AăU"PHa?RG%&O:adkh-r+*/jrN5ukEhbYRuf)ujutY9YtCrL(pgSd,W_V$DOLR9dUr[ăU"/;%WAsW>=Y4&_MHT6?XfH4bn\<2;n=he<r^5Rq-vcSsM\:QYd8oL06'bsO,[RKDăU"rE,vX+X_g&MY'AGNB&e4L&Jyu1kqEil)FvFBj(c\^xANh8ac/B2Wn_?=O+EiF<lăU"nMvEM)=R(Pp\HBC[Pvflb?*>j^e4M#5(,%+>)hGzerGI&H$qR#AZB8GFrd_2La0ăU"S^mKIFFlMh#j6is?KvrP:Q7)f10[_D,.K<tXw(8J]tqC2B=8\?az_05PFPGoUX^ăU"11[Yih-8mw:6)p&qg6e-.[\I[\<?Xh<Y1=KZSZZ%Au'sSUHuHkfpt06(^,_4kY^ăU"jd*[bX&gl?DS*<K1l_mB&Mo<j6jN\TYVY,'qcBMtQ0B;t^X?t<Zb48:YDJcvCNjăU"dwT60Fa[a'hR4PT_4vz-TjD)c6N<rjH2dr$r3Ilbn:dUgdci#:tVw,%up()%9%'ăU"%7-%0Q/8AaQ9D:6*%%%%5%%%1%%%%gw#tfi&(f(SkIsyD&*H:#lL9-*4_tRuUBTăU"wRA7Mb]9&e-[#Oa%ksu=0mM>2bC0.PMZQCNP_GHR.V'DfaCIXMg6fBw4&t1'vTgăU"f(+t):sQNg&i]2rRqV4lQX8kKha;LtlW5Hh*Fj\HT\AKl1DFECZehesqcf,+>kGăU"DW/4?#&D$Gp[1THXqmR%_l$24&GIx]'?Mq1$>OJ?KY7Ke94:fC\kg)SK3uxY:wPăU"cC*\k^';w4+*8ue4-/:m.-h-m$3=Y%ILa00,5q\pdmIBK&>gRX>NXmf]Lv>]bncăU"RW?KJ;Z-u;>aZEjg374(N5BQW-NYN9N1[j<Z%6Ur3%'Tc]>W6sfCG4:tjq,fCUAăU"P2VIFKS^TcjVa&[^f64]kirCKbgqbf[G7jIaa$%Jnvm07IXLKOpRV+&x6/=xp*GăU"tFVE>4DE9Z]8$%&P9^u.bzZLV$hI2Tm#Ax3jlP6v>n]W4ZXUxiHsg]PP1(=p<^AăU"%_F4Oi_(']e.1GxGQYz]Ra+CC>N<HT>,IQyo<ULoD\Bu$g'k6^(0qP\:o$<=:>eăU"bXbBt-NmEKcC*,J'Tf>'XT#2Yu83i>g\jRt5Hh_\6tIt'^g*#UA?rzcxKT8=B,făU"*V=\#:LB0nG+S>p^%0<l(EL6o*a=8N)a1b-x;z5V[2'KM=h=;;mp(nhF3wr#^gCăU"^h*3Z?Wd.GCSS'Ltkh8S6l\7#1Y#HwJ]^m\aCl/flKa1?kpdjovH%$w[O?9S?PDăU"k\g=WgB\gwqOQF0uta^pu\*i8s$5p>_6:\(V.NHIFHxlXri^C8C'Z0atK=v\unGăU"[,M<t-U.9qMiYut=a<r.xcnLmrG-HH[b?tkSSf\4nU$neS'-+sQnfrr'vg&VOr'ăU"8?1a94v&QLUHlO<A:/#i76r\Ur1jLUL_e43)P>vke$6#\_Cd_DA+&K<vyNs44CJăU"PJ+3qHXN]&:n-O($T[,bCR_r0ZV;PSN3wE]eH^)Wd/K[[+E?<??Zw]Rn_v6T_UtăU"h7ebN<=v>\:r0f>c,Z)D#Abl?jl^+^^P]nms.C??8;:aT[D;s'YdheH*Ygq)ZDjăU"J;aN3Z>>s2aS&d]7HE&dlJh-*P:GS%F='%%oX2Qc=+iL5blHW=Ej0Eh2\C'Y2LLăU"LvUrSEkNJ9FRPoT=hL:nm>i]W*Zff*=R.Q-LcfQ%uHf^m._qw$DU)E<zDBNl5P-ăU"3B0yr*^eBsARL^[C/<)hEtAQBg9CUaIUU]-gAA[.kH:$?7L_.aVsPF-miVb3([4ăU"\JYWg^8mFr0Q:uPU83su:aArL$O8B4]9?Hns&TII1h$J0aiSY'QZ,Kb3=W^PBZTăU"6[;N;E?Vcn$N5U1daSFImQY5an7HqY-Lk;8qD*XoIZO.Je-D?=^uFjS#R1o[d%(ăU"eM#P*liG%/<JrrZmeAtKM83G#Ke>XI=U<<qK]8&Kd5)A>D5doT1B6H=W>eLnkinăU"4:ZT6Xf8x//,MOCL9Z3*Tco%f_?QmtVnYy(HNLw.NKZ&7%FK\y2kf4)>aDNfs*UăU"M+PN22ALBG3-KNS2;[E\UvmpjGe^O['sZxJf:LG6:K^/b,Xwgu%[7>r?:SD8)c'ăU"O3w.D_*C;Bltd8NgVBtj%^#NzBmtNmbGG'trjP.Kb'opbc&<>_oH5DGNhs4kD#tăU"l#.Pyw'ItMnn[Boo2U]uX/[+i<*2TcU7Tc\1TsK,Du08g+:j-stN14U==y#o^00ăU"(pR#]GbOT]0JS6elF:f'KvPLK:f0ppC0_D?]eaLVbhndE[h]BdB#R]le^kWrHKRăU"qC_gY.bfdYg)'js5I=fYQG%a'C3)JzdTq']anGhpUIuV_5Jh;)1.cR0hKk,bD6măU"ySi)^lYhRebXDgf#/N9r8,92&JC(?THFCD#QY,VOsiZ)dcNPj+Su4u%p()9%%'%ăU"-1%0w2dFdrk*+L*%%%%5%%%+%%%%rqS#ksyD.<r:#A&ui04Pa%VCbSl48sCu([)ăU"+FA8q9Lpn>b$-+y)^i1IqPis5jMm.L9)UXb$INfIp/Bi;uV>37dT2mso93+:LeVăU"u=edEGjpRFue.Xe$Ej\X>>/,(uBJlftZ\$H_^^7;f2]=/^g;^Z\lqEiSSV.R7&0ăU"[+Frg.#>^*=F7$]*MA=Np;)Z1pP%_W$_'C7pT;].7amS9vOCLnV-UE?BPb:G=ukăU"aA-Uux-Pd0&Sf7rV2t0u81vrlpxKPXD?k;-OiiIo5vubYA._KN6)usavMDG^]n2ăU"tj6ZJLAD$*7cPLb-S-(%_E58%m'V>2%d5D]#\z\LTN#FU#l5+-^(%maN<'D]HpEăU",(N)H3wPQS16SEf\\1RXKc0-ops-[4EiRkPd<GVd:BvDkj%S999Y/ijv(^QJ:ApăU"jC-njku'&tQ<:o8g]='OZn+Tn-7d4+MLY4eUJzcD;(eH53X62t&-9X[(k/Qk;^văU"1ePOPx%[nIn_\xM=T6JXdQH'.qmm<nJ\jYFBKm4xbm\2vu?Q*bY(LD/IDE4,uAtăU"k_;YUhG3cAN\E.(K(NGL%HAmN$&$tlHYk5-.rOuPi+(vt>Z],M+=?Nc-o90g+:+ăU"gXLV9:k#MD%7\3AJ\X1Us-pJ]7CXj<>pVTHkJCk1b.(-hy1(#x_HbX7N$'/Sr-(ăU"CgfSHJr$XIx]<kO$ExXNiLM02z_)s\x-x94)?dA?sz.,+MznHu2*p$]<jLp=HihăU"rvV_mc.?NWI-9>8>)r_g<d6aD7DKav=jx0yQtP4maTpHMbW[>a;*'Y+B#?m+kILăU"/H[x]7,3%?#POtQSd?oF?+)53d)b.O1^]X_[)Yu[HY-Gx%/kk+G$Qv%JFh](wv;ăU"z1U??sU?D8RH2:Q8C0[X]^xKMmufx[)rLw*r,Q6LlMpb6Tn6A'\huz+PB4>)?H.ăU".jET4YVNSlUR7e\64D%Kx>2swUL^+-xX9)sDqxsGW6TutA/O1WoHbXCkW4p\>_8ăU"I6AKPVD?.m%zt&PiLsm_dRqsB>BbUd'3;u2=8v6dcTM$=4's$]\8VH6b'iY#Rc'ăU"g;um^eT*<VfND]o'[>44?6uaq[KC3V??>pLhbLnX'BDa4ueo]\]rS3fq:VgS5ZtăU",ATrB573uMeel&2GEk)8.BBu=aJ>*PnhM+^a3W*G-'J&zDy?HlkLil#t(<:$8-oăU"aj)X2XF5#G_et(FLaL_Y#6RR[d%CE&IbY-BD00;iGl+\nIEKv'&aRpuE_ZZ6ZZGăU"rO2]lY](#D=h,Nyq,jlF8bLvF0bks'EO[UohVWoqS)yFqz>?8&<K3Ykc><nf/QwăU"t:m(Ro?sVM\[$Q>,b.Bgo;5?NPn[SgQcIIV>78l1?F1rw#HxubuUriFLMsl?x0PăU"H<^3yiWw0jfUq\C[ED4rrHrAeui:q<Jr(N:f?XSOaD$u7HPZ(LZRA$6-ZuIg?w9ăU">G?U8<clku#XQ0cMi>=U\[P8c#;DRX3_t<)x7'dD$%khvYX>g$JX**BV/-X7E1XăU"#XW$9\fRYY[6SoP/8$6-nj8Mui8j0s-9Gm[)<&U7/EUlTi93*kDo'Vj,>zc::eaăU">0OE+xb59wUn,sBp=ZF4]Y/[ncL#pjZ=?:UdeB'mKX-saF4Z9_(/HHPP>6BwLiEăU"KuSh0E?iS1Ph5:a]\*t%crq>pUxiqnE\_us]HlEn&dCEaJ1)XH#b2UaCt^el,SlăU"*1n<?c#r>4Ym?J'-5^93mD_P/U):8c<^M(e\bY\+TuccCQ'v%#_.gzp^kCXgcNXăU"S8%IAkx.)h.zL=[z]6xf8c7d(q4%up()%9%'%7-%0QS8A]g(EC(+%%%%5%%%0%%ăU"%%fs%ynvz%jSksgyD&F&:#l9t.[)qu)Ac>F1NGj%wqMJCQeve)I':x%i4Kbr.SIăU"<;3&%j9+M;.2]7ezBUhsp$#Qp(c6m4A&pYEQd5^S-)c/1o1f_1B;)+J9o#,,TVhăU"lHlB1tsscX7\h>JWE?n>v+tZ<ggbZ6VVSNZ;k43<8eJ&+GoVi>=h\0+#z5.e]lsăU"(&O'L>G*=yO)I.(+sLFV.eMN-3<\\5jow?h<Bb6F$\&phQ'om0'c>q=78)Q%i>\ăU")<6:MlraMg,vs%LOmP79[R:Vk;VDbNUgoEsLL<R3iE9#<EwTNp69cB5EU[,%IUJăU"0HsSr8hwj;GK8g:MVj-62J79H2OM%B+owu'bpyqPW4fbCYWD(Ax*94I3o$r*O;UăU"=8s/59,tJJ.cD'##;8yq7Z#'%f[kss]tj>4j67C]GW%kwrZC\XMPl>-DQjTg9lmăU"<af8ELHCV#Lf:5=pn<pt.e)G/_0eZ$DMogxmvs'_RogKeE\^H\me51(_1($V>AJăU"Z+aZBH[[P?hPXN%iUU0(2S06LC1*Sb;BJ%'Q%8ip88&#t47J>K4YF_ZsMJ01HKEăU"qB,PRscKwW;i\08/vOMGJc0l\WcGV$<Uiw,G2uR]u5\nbxqph+CxKM7$G:&ZpGEăU"OUA/e,YciAd1Q2sC*A+(8^C7FIc0joXbwbcjp4oP(4itZK[[Y<P;wrWj(aVt#atăU"ZO>>-BXD0T/WxWBnPDaU7tl+gk.vP=FE]vj[n5a7vZ:lJ7om,T8+x5[Fg/u[H.[ăU"%n<U'R<=sSht&bEU6kdXiXT)jU$n]kjxqsdn00W(.8Ir.H=mn,B^=$fn6X2JYN^ăU"uxYYXS-nirn-pQtb9-dbiStVHDN58;W5&afJ&ct<iA#zN;=F4-X.wFjCnai<tYXăU"qw>,P7QruL^Xh,BdqWLV-.Np(K_ff<Vjoj%d30/=&+Y3t#QGKplrAB\_>Y$k+rhăU"#I^ecarpcKXWioq7V]a>iYTP=]V%d:T)/*F\j]MrR$upk)6<?#\<;ls]p0#HR_lăU"j7R\wKNmpyn6$Pq_LRzy0kzV4kql%4TqZ]buU%=*.pULIxZlO&*nN/uZrG$MHu/ăU"538:-n-%Kd%2\'=804HEHs_]e4qN:zki:>=(eI=]3NZf2j^*Zs&Gi99l-&p)M^XăU"TeIJvsw7^3ug_*9c(v_-6$D1j-KE,u-w4ig<faxoDA-#A/ku%S7iD%K2j)HnClKăU"R];R9f+.g\9zkBG2$m#b[Ot(iq]*jQc/ma[(f'3&rtWiX5YHj)N/$4=<^'B)eF]ăU"-qMm5xsXc.:8L_,.VC%I;VmS[*A)Q7geg%B;B:b=nQ(^8mxd0Tx_dd?]i^bVUecăU"0'QL*ZC9NV#,N)G:(xNJK<wxrIeK:bn+i5Vl[87)=T6E9M2y;x4XI<:/FM'$EtLăU"NbZucXZT)HWTh+>w%V$W1d5:BU(NmSzQr-B?NnDO)DQcNu6%f?h?:lxn]J8x6[MăU"W1B8NqJZ^PSOv]x)v$#j]'6<HA4%AhHHusT[5w$/[d\\#)Mqn5=k9b1^r:n[-SOăU"Tp7qIP,MpALy3MrIj*JUvbt18Xrtsqruu#[$p,J>4]&nsZI;?lK.?t'lPn'&dkgăU"Lu_PtX'OqpLuQFKeny+heAN-g6?yr08y_,=EL]X\,C9gf%ku(iPsf-_K+Nq5N>8ăU"90%ZkG$x\vmRLXW7cd(9kebnH/t-A,adWR.30wq^t.Phr5<haEDdB>>^qvp&H,YăU"w%bW8I6S'7qHh;L\;YEL7frT[W*T_rwH$',<Ifn_E-EEWn'Ir:a4*?ICv%S^Y5PăU"otoviBDfI^&&WAaT#fK+SMdZV:#Om*S]DGCX_lrff\%j\ll1YFGHk_lez=^^)ShăU"XV2Klo&,.hE9=H]QW%aoGA'wLOoJyF)S<Vm>1P20<PCpd/_0N;FzU_,RJ.lK.diăU"a[+hs9_ZxN6zw>^%[;k-Uv:fa;HFB\DIJ4JV3I)M;nSa8#Cv,%up&'%9%9%%'%-ăU"%01Q8ApK#].%N*%%%%5%%%-%%%%%%%%%%%E%%%%%%%%%xf%sxSk%syup%&'9%%9ăU"%'%%-%gYAMG?x+$tN)%%%%-%%%,%%%%%%%%%%%%E%%%%t*%%(]']S%ksyu%p&'9ăU"%%9%'%%-%h(YMGo$Z49L%+%%%%5%%/%%%%%%%%%%%%E%%(%l.%%%xhw(f&qS%ksăU"yu%p&'9%%9%'#%-%/Aw2FMO),9W%)%%%%-%%0%%%%%%%%%%%%E%%(%g5%.%]']%ăU"ymns%Sksy%up&'%9%9%%'%-%:IPNIiZ71N);4%%*qw&%%.%%%%%%%%%&%E%%%%năU":%%%it%x^\S%gfxu%p&'9%%9%'%%-%Mc'FI>TUx^x[%%%w%'%%.%%%%%%%%%%%%ăU"E%%4%UI%%%itx%^\Sn%htup%&'9%%9%'%%-%hY&MGm6&yaN+%%%%5%%%.%%%%%%ăU"%%%%%%E%%%*%J%%%wtrf%sSks%yup&%'9%9%%'%-#%hYMOG]Xz%Fr*%%%%5%%%*ăU"%%%%%%%%%%%E[%%%u&P%%r%Sksy%up&'%9%9%%'%-%00Q8A8aQD:'6*%%%%5%%%ăU"1%%%%%%%%%%%E%I%%;V%%%gw#tfi&(f(Sk%syup%&'9%%9%'%I-%0w#2Fdr6k+LăU"*%%%%5%%%+%%%%%%%%%%%%E%%%(x\%%%rqSk%syup%&'9%%9%'%7-%0QS8A]g(EăU"C(+%%%%5%%%0%%%%%%%%%%%%E%%%*ma%%%fsyn%vzjS%ksyu%p*+%%%%%0#%0%*ăU"%'%%E&h%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=40AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDavid W. Hayward               SCROLLING TEXT/SPRITES V1.1    dhaywa01@mail.orion.org        06-29-98 (18:08)       QB, QBasic, PDS        157  10412    SCROLL11.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLL11.ZIP",4^6:Z&=7545:?STRING$(50,177);ăU"%up()%9%%%#-%#[nkIc'<Cog3%%%>l%%%1%%%%xh%wtqq%VVSgRfx6*;<B\[>awăU"gONxU:JP6O%\B%:JJ??\DIlJQA%P\X18LWhzz%ofGI#FK.TI%Rz9]xzcfXpNgVlăU"v)*.Tt(gM*Fp&ueqIY?TEU#xe'7Pg/v#7a0V%hbt'4wruh[dH*T*^w\NWDVOfERăU"OmjHaJdl.-FOpTZs*Kzd$D(8Tc[_H4EbVpZ1FE,NXeLLxTAO7fp%B7;eUmPAv,tăU"uV'?M6(vkw?2?4HnFyjMnmB1V_7+.(CUY)aq/d%LymJ[P[pj==sBm\OAP4[_5vcăU"GR]U3G^.r'ixI17Hw1.z(\5'K7VD>I:yese8Q%q5YgUT;EZ_ly02/177XnN<19[ăU"HG\(i0u#'EVTU&nE1[[?p^tdpsn4Vm6tk[5h[VCM4KLMvww%u/R/'B1GS&ptF6CăU"/\jImS/*3M2t)zf$Vk[-%>(kAQLQk-=Ut+jw9cBdVts3N:cKp<MS?F:8Qj-&UV4ăU"f/]N_iGX##6hH4t%i0>_3i&D:98UU\.M]SQ1?[bJ=N?cupLF/1e*EWbuA+V#tR+ăU"Vnh2SpAd+Ipm'*a'?A,TlJM#s?*q/2)r5gjn)D%h;VV)uM_.u.[JqN]da-q6lgbăU"h4zBNu7DiM%K0$U(E$3g+$UxW$<GAL99TkP;u1;Hc:s&N^hxi^7=,,%XpL>g%qKăU"Y7BA<XmB=mab4iKGX<OCE9(-U+kDLki$&hYK/i);'MGo,<90p)h>:VsKrCwBTuRăU"Q-%x1oTSNb^h\?K?tX_F]D9Gj)Z;gRw:sX6Ue&l#&au4ekCBBIfwtV+nMw9.v];ăU"g&(ZY(^M5gK<ixe5%wO*?,V]C7u]/2Y7KNTF&udLQAu_boVH1Eb39NY&,?=;HTlăU"P>KZ4Td+<.IfXraMaoiS&?Plwg,$r'LN7EgD\)iQYoluoCk$\SmB=<bsN[HsNaMăU"+.t)?Hc<3Poo6$1;7LraNSb5y-LnJ^O1?C?]8vO=)/1'-#AG?&;9_/l22x=:/[aăU"i]ENur1TWLv/;u<%z7/=4*p<g.GG1oez[]M)Gd(chEW96[Mhbc^V0p<a5[xxgqlăU"M(;=QkYY]A_\ZDiX$?X2]3n;V[0A2%q.I'+?ZEy89pf#lvseGis+(1HMv.xchW7ăU":[+]1XLJ;?>8MBOCqZswj=imwjFn&/M$YXsx#c8W5Bviw+\)]Q:'%+R&(&^ke=)ăU"'jzA(;2Q3=v8JeS^7ADROt$$2a-L=#'hF^0w]Bi:m&9;m&dP8W(&G#IQo8RXl[]ăU".7dsZ9rM*d.2'<?b[r9<U>boAgzlr[8kl+[&[uf]fLZi/=VH5V>jM=IS%b4uSSXăU"rI7+g.=qf%=7,v*Sz'?qmCrH9.SQ3WTTZKMvD4*92[&16.EPu3Q?Y$l-0NMV3q*ăU"#]kH,+*)'CK4ezfdOWhq2$%s+3?IKU(xETc3'O76'S%97<7qUjluP)MO7miMZjyăU"ETAC.7^dX+\D+(^jS?vTnRWV?CZ(PTWfcqrD&+8eQP%IaT%9sOu8(DXX#s*7'bnăU"tX9#/wnh84NZcK[x$U0;Eui:wgKcOqAWY%:bx7+neKIqX$Fe8Q#>a;h/_hh2'suăU";Zwu/qbkYIac1wg](MW4MqRR\NtmRRM)=sO^rl5)MJ*95%0=?-Pig;_6.Pshu[LăU"-SM;r07JVS]L(dugeJn+Ki[8k*PnN9nwHX8dDcv.mu\fL[DMNU.Y->x),[,#+r9ăU"Ye.cCF-q^\NN;xrTb7xcHS1T]bZNP$i[Rh6F51HHGnbuBQF6',Lc+qK4Py;d_ZpăU";mfu]b*uyWrBS=/L(O%=59D)4zmKNaU1O]*6,yrrxq\9L.:*Zi+ttJ+'G_tyO8VăU"Q]Zt:I^bKWNDhk/RdnHT%E+rka(atqlif3lVH5iPoFJQ3w06<#]';*ChM$?OS(VăU"I2K_WhHDmgESd<'bx_mTICzG/hCy\I1)Z(FrFA7WN+9Tjg:/\7CL/eQRe.=Z^yTăU"1Bu)s;fW]?>DVL0C'Q])?eIv^S8m?SS8n+0eO%n.Sq_&]ilrFqYc%422tB]MM)_ăU"*7c_k)MR/<]Wdb$9gaY;w2J<uIIekprIae^N8>T9vj)ohqG(p\L3qcd'5$o2cagăU"l#H#,?X-h3l*d>scbYNAr4R$)d_pjl[ZCNL8:-:^e'ij/Z16lbZ8By)M#8W[6$uăU"Guirh%Lu]r63T\,7:oW>NT*Zb86RY\P&,CR,q[AJ'Sc&.$$,:jfNn1D7kK'(l_VăU"86#adm;pY,p5b&M%#]8v<Q3DOG$m2JpVj0E0K2C^MRv<i[9uG;YXIp#mZNHt8IXăU"'chU'n\4O:r)Lh/IzCHD>'Zam#.Ywi%LYIR3:XhpV*09rjWY;xjH::5cd?un%/TăU"paY#542zV$FC4q,OYNL;YsXD'&]\B)de&4q%DYeMsgz<nEqj759b+fTpg.lrbHQăU"pO?nI4*bEeJXk],LC4I\?JCyx955()hXvBb4;FJD3ob#i/l0)RsTo?\E\>UKJ$AăU"eU1N7#-Dl3IImkcaAD\zgh(Ee&_2OMhDhbYUjff?7(KT$yY-1zvm+Lq$G;sj?jUăU"2CMEmF9aU/Jb.Uk(cWrP&.5=g(=NqOP64vFufo./%k,'Q:&B9xtT)(L/>K.qA(UăU"tN[F+w?(Np8NYi]L_DjB>4e,U*]:o4GVX_t3uDF(=cXmfR$Kj?)\ck2D)ra-THPăU"D%uBtg6oQ.MW*uYlVj71wgr2T^g9X_n=q_C6OH>Zov_;LA4?t16Xj[MTaXqF^CaăU"Pc\9IJ[gohjn7UHMeL_1_#9q8,G5aWdRi[xZd*J3dVZ)bzO8P6eJ^1tsR9b:aq.ăU"h%%6L,V*^:5DmJkca?%7Mpz)J=g[M3FHBZSc.D%i\/XEAmRX9EYY33>3BbS+=b5ăU"D'Nsgp);M$b=:qhk[mP<AOlh,iE;>VWWD'Jr)jlQ4m402lUNzwj+W,pC_femf:<ăU".;Q'3X.oXe$sQToV6Nc&UT*5rOA*Pz%dq=>fo);/65AIIEsagYoDe]7Mc5D2)OrăU"[PYWs(ksSf'9,=>y)(4F=efMeOJqVNj%<#IOImI#3-3g9VEcorKk3aL5))XE2KuăU"R,j*VV%J+SXFjoa.p--N$EE3Wh6feOntx1Qh\x^E\)$3vg>:.SS&]t:ap4vx_Y%ăU"vf+r008'&=Bz3ro.ON<056ws*nro[a#(R^JTC>KEt:RVnaaMA89(ys_SnV-BTDiăU"q?IR.LzdXdayneB,i+.\%1IWqMa0<q=ccc([(&h;k6jBL,a_C4\N\;8s#s03(V3ăU"VZP,jj4,K&RTTM_$_<cUWjft?emV6M5OVrtg\Q^g\;lp?IpY5*oRkdgV>?S$VX4ăU"O7K(+TdlkjS.#2Ox<E)6cL+x-m>AcCZ5r\QcK'%$\lQt0O]([CC6+emKIl\+*G;ăU"g^QDU7qwU^TnwMf48g[tpi:MBL]4&?re5(cfWS'cY>_fdXZN764$4nQ%;g:/OqeăU"R]o),>v6MHhYw-j5wZTNp,]O0%DLYE[IJp>sjx4&KC+,HvVEImSd45s<.<pNl<.ăU"YXwMh7$as=4P5rzkNVvhqB$U$3IzN9*MzZM9pnuYGwrQisynk)M-TIiMz]j8i'iăU"F)iFVz&EDt(u46+o<Qub(Y^Ie'+<NT?o<DZ-9Vmg3f4i,xSND;P>X74B=3b%]cVăU"/y#AL7^YbfAA4anFTMX_0in,/q1F4e'd/jkQ8aBQGG+p<WqH\1R'1*da;)I?$9jăU"iC>SqUXhtE&S&5oPWh]Kb?2Oc*+?R_#%pWQ?ncf^jBXLSXpt\hHM0l.Z.lcV>UcăU"6&NQG[,(h\uIU*WA]\#uw&\pkA%isSTPtf3>DZ*w,D7(q1;nE4F\,t\QrF[BUX+ăU"J8(in_d0:Nuwg-Nn<dT8$ckbT?0Y%/\-*f'TTdmOU:xdkW(:U<3fi$^W4:6V<VMăU"10pToT4hJuk%tw(4Nir\h2:VgXUMMz.ZUhXCq3q/AH-_TWVL#=gv_41[VsUHC=UăU"aC<;hfXH]2UH-K]_p\EY>C=K3^UHv=K_*#_5vqEiP=g8^Td8cV=oXe=/cAi2ftQăU"_FwJzxMo]+C/,OwH4>Vc/ccAk0_tQ_KNJFtQX_kJ,Mxo]S]MR:MM$$ItJ%1][-măU"'yumlks7%yulkDI.Ow7HHvu(OwHH\LM:MV$$wz%yulkBko*DD3skxho][MRQ:M$ăU"\$3pV[t]WKLvxo]>[m+y#ulkI.zOwH.HBf/ccAm(Ip*D3MsIxo;][-x(OwHHALzăU"OwRHHfd=/cAmnNMn-i:$$w',yul%k_N:NM$$9)tQ_W+w.yumlks+%yulk*sqyu.ăU"lkIx(OwHH]6M:M)$$3oL*D3s#DpbZhC3sxRS:M$2$M&O\wHHfnf/cA(mdwfmB>băU"d.wf&>UnNYZO4iW^nYCjNs:(2m.m*n+>DX6rdD)LcV*pT*?R4a>1aDpH#pgT+eSăU"59fe(yy;07vyDFE&bZNCNE3Hs_cR5)qgcDY)1*9$A_Tbnc.E65U(*uvASDfo_EcăU"inyoPru#/ct685)?pjvB.XI.QViiopY1oFzor8o>bC[$)5ZblbZ##kVhD[yE8[\ăU"+\G5H<^$]dgtoaUTVP*c<n4Kgr3n2q>GsaGJso6kG6t5G6<)kJl^rp-_UhJdBhsăU"]$Wd:ajJ6hKZ/&+FH#T]HBTH7DTHF+THHTN\a-O#DX2-Pmh-mil-mpP\58;Q]G2ăU"m$$\aH1#Hm\0ka>QRtKGQY<Aly,$$zHNHz5mb&Fa(Yi2ZhKjOl_-p&s4;MJJaS:ăU"zZGun02.RkG0va\0De>IH-CX</7)D>,JDTlG/-W'6fB?a/8vtAX0giMfLv/9e,dăU"M7NJHKL_R,k0xNLoVOo2lfV4tV'Hn<:B5jCr0U32:z5f3ufx$3SzDWFH'jjTe%<ăU"M\9&dId4_KHwbFr2+UwiQgGM$F4n.]65Zb/&U8[2x,%up()%9%%%R-%Zk&eI%V4ăU"+?T'%%%o.%%%-%%%%kt%sySkIsy\%-2'BFa1fH^LDm=lN[P0e0XfcykeqM>+#DUăU"X'BP=[mT,tQEpM7U$eYpRPt[AjQv-ExRgg9'2LyKg(Dhn04hC$Iq_T,t0uFJSnnăU"IdIrb/r;ot]f^gqs^=-Ge--)Y6]^9IC=QDl$nVqC]IEJaOH#9ni)P[L(=(%1[(BăU"[4p7GF7BCZ+<H0^hHeP'c7H%6b(P6ETd)%aFQs3^gi14*5bMR]$<lr$V,+edkDpăU"U--Vb0kl%AOh2A9(CLWq[Mc;N,'t25=?1-str7U?qjPNkugTqv$z;G&Tq?m_5-GăU"0aFC[LKhO_v9GnInf3(*P.w*<VVAzZ)]t&2jpVKOy7FX,8Ixo^L&WUpas_[U^uxăU"o3DB3+h(vGYh(QSd^5JchLQ+^cj4?k6p*.W#=<mV^m.w(a<W6_0efyDhcl=Tn=$ăU"$tW\cW1q/I&&7>aZhyoHD*LlV&<Cen>U=JWQkGiU<ETn+n$C]QVc8DNLwZDta>păU"]e-?oEb5Yfh&6cXb,-I=<-R:?r_ORIH6-/4ON?c2?RgaYc'*if[iX0N2U7V*kV-ăU"rC_KV:(Mab_<u-T]Thb?(:Yw,jA_bO\OHGIl<$p;Jmn5P'UJOyLTc.RZ6hnFU(ZăU"c7ILKJ'4$-vvPNLL^(.DqtT<8OU)<[u)A#8y6ogYSOtuP6&ph_Q7B>BSfu4BoKdăU"h*XEOZqu:l:l8:O6;*+^LMhoZEqM+0TMZTVA_*p\5'xPxRUB/kQ*vKoQB0yMl2OăU"jsS;1_rq<>rMyShOb</'0LTK-*=:s[Wab/JD0'94,K]phTJq]<HajXQB8qiKGp6ăU"fUA74pi:&A+Vr0u%p()9%%%%-O%5Pj#I.:%+XD-%+%K<%%%/%%%%wjf%irjS^y'ăU"y.5'd>#T#6x=Xex<'&?oNFe(v\L3Q\bMAew6$%JHwd'-M5Q<he52rpEHtgEDTxuăU"qGEWhZCs3DxJ5Sl6ThX6EGJ^rrsH:p8Ge2WFkN)nh:UBot%,bBedUs*$\UvEaRLăU"n5)PRLVBbDJS)%E/='0..f[CeO:bocN(6D$'Xob6'snSsLNG%8l&Su-(6OAe1XiăU"9P[cB8ik,B^PRV9q0p/_3%s:yTCae;0t^b>a%CqRZ?YI\'H]:E&CHfc7K%jOdQEăU".FPS8V(_GR[W4A]sP]5-&*-;W;ZVG'#O^K\%WRyNfV=SBX#.-+[.2c=i^a;n(6eăU"G6fb$NL#[8f(^xN[g?Op13$18bL.b#rGp_#o]#MN9G,5uhrJWGeUTe?qliq0z-2ăU"UTSaA(82/TF5^M:Dt)s$vZ3&$:p./8Gir-(A02:0Vh2K<Ow/6-/;)ukPeiAnX#NăU"wfiE72b,'CEqqK/=&3'\kl;4w+%Z=#I#-y3lXr-k-2cdeC-_)w#kIHCESFmQ439ăU"8XuMdbd?(W8u^34Aq)8>nVqj=Q)0Ok>kb>(In99_pOr5*4u](Gu3/g_M3oYTVsCăU"/]g4*?q1iu.-yXtsgE1b[_;/%RF9if-=46sJX*lYNi)_++J'Gj4Q6q_6^-x4^NfăU"DELrcr4U=HiqpCg4nm5AW?Fo3q7N.C1tH-kf46k7aglDU5CCkN-e^ROuA(It>hgăU"8Qh.(S&k)pyHou7)[KFu0I%hcbBEQH?&:b3l6vxFi4PsRn_RwGBARV9BpU^-8RpăU"G[iDH[<qrmBRHck.?VU5Jeg$Y6CI1R47*PDj'#u'pUyh</'rf),/*vII.2PV+.JăU"UP=$nVo,uGi0dH4r:Wt6iF0q?GA]cHY:Er(N3qHt,tE_qRLxaz2J2p\:m7ep%9,ăU"/=r>0lZB,3D=RPI+n#t6MR=*Rb'Q=I^gtqnG_Iw5.6/ts#8m49[FEM]8-i/QA&=ăU"<$OrT<Q_r/faDIg[ko9'R-^YzuYJvq_At*K8%r4CC&l]3QA=GHRh+I7<#UQ2.x*ăU"N9#rUui1kU9(Jc#*njNPhkdYg6ndbFb;RqTB/S.V70O\L6wT77NAl$,h36NIhu7ăU"M2)f1rIoW+rd3nqC5R_)Zc;pYm4HuqHUD/??Ly;Q?<:RVmXlrL%5xY9G^Hz/I2eăU"R*Wq^os]='8,n94\o(b8OM?EI[16-P$)$Jqw9C.2Ph7IgGuV%WKP5A+TPd[Qs+găU"3iloN0u5hBEpEhsO.Il)-$\GuNt5Qt<,4h'^u5F<8%o'HW^g+e8r>fgCv/kpAtaăU"*.8X1foH7^UgE;kthhAezsJ)J>:i.eR3rlNHZk%B&fS1',LQQ(NNG8q)rI:<[nNăU"1+Cd)q<c;t\T]/J>bg+mq92C&0sin&;XYfCHe(_Xj\W%8C78hE$[a4IGzqF.v*săU"xQMWv?&U+?)(-PFa29*pm%S+(vBtJavsw+-FqObR+B]wXkXs32r[Ngr0jCIum2uăU"c-+^nZNnXRKO*]Llb08OYZu.qK,)VYuBQ+q&M^jxxSKN_cPphOYY]1wzyG/iKH+ăU">pY\'7i1/9qpxMJ&BV>Y#RW*:Ml[_ieDHYY7+[QlT?Hgmk>E4B>%nA4qUwI$AD_ăU"%ZArYw5u=>/.UCrrPU',##A\Jkw7E<(p'bIo67+SKUa,l6pX6mmt&y*Qi3/53yRăU"Dr.B0'KsyU=pVj(]q);,n:P]6:>Q;$,^qb*r^2bNU,-+mL5upXjCEENpCFFZKfkăU"f[ddtT;XC1X^#;UDuNFd,K40g\q#nWXowa87\Rh_m'ZLM*n?Z87/OH3_C^mAL'năU"JHAH\T=M*q#uOGMh*YUiknBN/ePxTHKxO^H==A;fXCDKh6i'gSW_c(_kuuB6mryăU"1L(qU04J#zLY(WKqVHRW/b4nCtEDhsi^w.7ihfNbnfTt^i-.]tu^0vkVjMry;.MăU"JTXLvkfYMrHMQr#MHfMT^tZ^p-sqRB5lmmOk5Yj]IIe)uxRto*iq+cVxp^n(hOrăU"x.'(uiIlro$%$lQTP&6'l\<dQ\d_EiGRm*8Pk,gEckkl%/zxYH)Ib'Ag_9x5SJOăU"K0cFJF_yypR'/S[nhj=Uf^]VmJs\ptoXfa6*#DC$fFnKaDp+4qsSftjRUMVUsT-ăU"t6_[>_jL%z\+3.dY>:^^Yv.UFJ'eapbI.ecyM/8qs<O>l:D%9*o7I(8\')Hb<5/ăU"NpGLJ_0#xk^H.fMnAUNg4MI[[94<M4h_'Vg\%W)Y]rK2;UpDHl;RuHwkA^l576oăU"0xtxAlo,iLc0>xf/4*Od;^gov(''?bD70eOqV5;L$lI$%*6WF9Cpfp#2#t-st1JăU"?-r[Nm2')I8as'*odxfO[FdAX&Z1NOwXAaC$exzd'v.5'q?;ZhkZ\CTZwM*rZA1ăU".EDO0h9Io71&#UlT)BCRL8320*'K5B*N[:*eEK4o7]kpC,T9Gbg&w27y<KdCxhYăU"ua?^K[mZlq5WRuE$FM0R$Qb7e$CQsRr+n^b)dv,OL=JGLx:L<gjX-;SvhY\aZVxăU"H+h=lD8^W:/K5UGgjdW)]:RS#i0d?dV$V,KdHrWmAR-zH:?fZmW9Y'+HlJkqV<săU"b5g<:]ZX4=w&4f<*rDs8grFfX+qe(Z*e/e'L&1crAk)lYi\qp%kYlH/97RYvPS%ăU"?:8aSD^Q05vJ^4k<Uq4jHB-=k;f^S71>UC3b]Aa7rFTqjlAne4qAsTNbd1zSDk%ăU"A]wJ(b5IlbjXaL>O&[fndsB?pgllD2HqR;hZu*$v<_Kb.]p*TqB$eJ_P0M_42WwăU".:3Tk-Xrn9cE#FdRuQi,LUnhf1)M$\EG^_>cuhtqmM;Evgl9.n>\3&uP**=^x/eăU"qCZ1k1Ro$W;>yN9$W9N50U2mfJxGW\YKsm84o1RL'x+up%()9%%%%-%3L87IBY=ăU"6S&x&%%'#7%%%-%%%%xmnu%SxuwEferYBUU5TIpb/<Ig05$Nm1?.bp$'oh(5dn?ăU"e<-n'o^f3nrc9U[fU<I.w(]OLJ^M-(,I<-R+d7TP7Dy&uaZcXBVTGJ*xTc8J9OWăU";Ff]0qS>*J'(5hNH]K[H3'\q7$h0KD\^L(l<EjK>m(z)D^T+BWepbUVr<[mL_CVăU"AO#K$WNl;^DJ4osixQs<o4buXbx]cC5_,B]opkaS<f^M[\EGP+o7EE#Z$ce+>0DăU"lNSA>EkpMk\P6U9a49'wKU-22huUt7sWV1OmNbCQ0mo5cj[iK%;ZMILus#7)t.SăU"-S;+HcP2]w1&JfC4KnIJ,^P96B_D7&5Dd*v.1AmUO36a_owLaL_5;%+q?9aNAr4ăU"W4FbsPn)%kLI$MHH-f5)tmnbaMrfY>t=Ffp0DJH]NIixoQ<o4Y8f2A6m]eQ<RFfăU":&lcW;K-AD'hA4\o1ivaPjlC<2G)hA3)mP%]EYJHEP\2>SSp7bti[xz9YlgIb)văU",Jwq&0xKtOl(cSqDmHT^Dt96vKu:r$yv8aGS(nd#G$TS&GndpR&dJ%Dup&%'9%9ăU"%%%%-I%#[ksIc'C,og3%%%>l%%%1%%%%%%%%%&%E%%%%%%%%%x%hwtq%qVVS%gfăU"xu%p&'9%%9%%[%-%Z)keI%RV+?T%'%%o%.%%-%%%%%%%%%&%%E%%%%=4%%%kts%ăU"ySks%yup&%'9%9%%%%-O%5Pj#I.:%+XD-%+%K<%%%/%%%%%%%%%&%E[%%%<%6%%ăU"w%jfir#jSy'%yup&%'9%9%%%%-O%L87+IY=6)Sx&%+%#7%%%-%%%%%%%%%%%E[%ăU"%%/%?%%x%mnuS%xuwu%p*+%%%%%)[%)%W#%%%T%A%%%%%ăEND SUBăCLOSE:IF S=8AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMatt Gulden                    SINGLE PIXEL SCROLL-TEXT       www.thrillhaus.com/basic.html  06-25-98 (00:00)       QB, QBasic, PDS        91   2776     SCRLTEXT.BAS' SCRLTEXT.BASă' by Matt Gulden (mattg@thrillhaus.com)ă' http://www.thrillhaus.com/ă' A single pixel scroll-text demonstration. Not much more than that. Enjoy!ă' This is public domain and may be redistributed in any form but if modifiedă' must be accompanied by the original version which can be grabbed fromă' http://www.thrillhaus.com/source.htmlăăDEFINT A-ZăDECLARE SUB DrawDumbStuff ()ăDIM DataString(638) AS SINGLEăSCREEN 13ăă' Draw nice background graphics.ăDrawDumbStuffăăWHILE INKEY$ = ""ă  ă  ' Get a line from the DATA statements belowă  READ TEXT$ăă  NextPrint = 8ăă  ' If "END" is encountered in DATA statement, start from beginning of text.ă  IF UCASE$(TEXT$) = "END" THENă    RESTORE ScrollTextStartă    READ TEXT$ă    NextPrint = 8ă  END IFă ă  FOR num = 1 TO LEN(TEXT$)ă   ă    IF NextPrint = 8 THENă      BYTE$ = MID$(TEXT$, num, 1)ă     ă      ' If the ascii code is over 150 then the it will be colored text whereă      ' 150 actually equals 0, 151 is 1, and so on... Feel free to change thisă      ' it won't harm anything.ă      IF ASC(BYTE$) > 150 THENă        COLOR ASC(BYTE$) - 150ă        BYTE$ = MID$(TEXT$, num + 1, 1)ă        num = num + 1ă      END IFăă      LOCATE 13, 40: PRINT BYTE$;ă      NextPrint = 0ă    ELSEă      num = num - 1ă    END IFă   ă    GET (1, 96)-(319, 103), DataStringă    PUT (0, 96), DataString, PSET: NextPrint = NextPrint + 1ă   ă    ' Wait for vertical retrace, reduces flicker, also causes nice pause.ă    WAIT &H3DA, 8ă   ă    IF INKEY$ <> "" THEN ENDăă  NEXTăăWENDăăScrollTextStart:ăDATA "This is ˝sľmżoŔoÁtÂhĄ scrolling text...  "ăDATA "do you like it?  "ăDATA "It's just a small, yet cool routine by me, Matt Gulden (aka Folter)... you can mail me at:  "ăDATA "¶w·e¸bąmşa»sĽt˝eľrż@ŔtÁhÂrĂiÄlĹlĆhÇaČuÉsĘ.ËcĚoÍmĄ  "ăDATA "... and you just GOTTA check out my site! at:  "ăDATA "¶www.thrillhaus.comĄ ... It has more high-quality sources for  "ăDATA "Qbasic, C/C++, and soon Assembly-language...  "ăDATA "This smooth scrolling text looks śmuchĄ better than those ugly demos  "ăDATA "with text moving from block-to-block.  "ăDATA "One downside to this little scroll-text routine is that I ran into a  "ăDATA "bug that for some reason skips the last character of a DATA statement  "ăDATA "and after trying to figure it out for quite a while,  "ăDATA "I just gave up and put an extra space at the end of each string... That's all, and  "ăDATA "happy coding! "ăDATA "                 —Restarting Demo...Ą                     "ăDATA "END"ăăSUB DrawDumbStuffă ă  FOR X = 16 TO 43ă    LINE (X, X)-(319 - X, 199 - X), X, BFă  NEXTăă  LINE (0, 94)-(319, 105), 0, BFă  LINE (0, 93)-(319, 106), 8, Bă  LINE (0, 92)-(319, 107), 7, BăăEND SUBăMatt Gulden                    SCROLLING WITH BIGGER TEXT     www.thrillhaus.com/basic.html  06-25-98 (00:00)       QB, QBasic, PDS        142  3858     SCRLTXT2.BAS' SCRLTXT2.BASă' by Matt Gulden (mattg@thrillhaus.com)ă' http://www.thrillhaus.com/ă' The second version of smooth text scrolling... Now with biggeră' text! ;) ... This doesn't run very smooth when other programs are runningă' under Win95... Freakin Microsoft ;)ă' This is public domain and may be redistributed in any form but if modifiedă' must be accompanied by the original version which can be grabbed fromă' http://www.thrillhaus.com/source.htmlăăDEFINT A-Ză' Prints text double sizeăDECLARE SUB BigPrint (BYTE$)ă' A fast palette routineăDECLARE SUB PAL (A, R, G, B)ă' Draws stuff in backgroundăDECLARE SUB DrawBGStuff ()ăDIM DataString(1193) AS SINGLEăSCREEN 13ăDEF SEG = &HA000ăăDrawBGStuffăăWHILE INKEY$ = ""ă  ă  ' Get a line from the DATA statements belowă  READ TEXT$ăă  NextPrint = 8ăă  ' If "END" is encountered in DATA statement, start from beginning of text.ă  IF UCASE$(TEXT$) = "END" THENă    RESTORE ScrollTextStartă    READ TEXT$ă    NextPrint = 8ă  END IFă ă  FOR NUM = 1 TO LEN(TEXT$)ă   ă    IF NextPrint = 8 THENă      BYTE$ = MID$(TEXT$, NUM, 1)ă     ă      ' If the ascii code is over 150 then the it will be colored text whereă      ' 150 actually equals 0, 151 is 1, and so on... Feel free to change thisă      ' it won't harm anything.ă      IF ASC(BYTE$) > 150 THENă        COLOR ASC(BYTE$) - 150ă        BYTE$ = MID$(TEXT$, NUM + 1, 1)ă        NUM = NUM + 1ă      END IFăă      BigPrint BYTE$ă      NextPrint = 0ă    ELSEă      NUM = NUM - 1ă    END IFă   ă    GET (2, 94)-(319, 108), DataStringă    ă    PUT (0, 94), DataString, PSETă    NextPrint = NextPrint + 1ăă    ' Wait for vertical retrace, helps eliminate flicker and adds pauseă    WAIT &H3DA, 8ă   ă    IF INKEY$ <> "" THEN ENDăă  NEXTăăWENDăăScrollTextStart:ăDATA "˝SľCżRŔLÁTÂXĂTÄ2Ĺ.ĆBÇAČSĄ -- The 2nd smooth scrolltext demo by Matt Gulden  "ăDATA "(aka Folter) ...  "ăDATA "This may not run all that smooth in Win95 with other programs running,  "ăDATA "but it may just be my crappy computer.  "ăDATA "I don't really consider this a 'demo' in the conventional way,  "ăDATA "but it's just a demonstration of the routines...  "ăDATA "feel free to use code in this source file in your own program but if  "ăDATA "you do, please give me credit. Also if you have made any changes,  "ăDATA "and think I should know about them, you can mail me at:  "ăDATA "¶w·e¸bąmşa»sĽt˝eľrż@ŔtÁhÂrĂiÄlĹlĆhÇaČuÉsĘ.ËcĚoÍmĄ  "ăDATA "... That's all for now... Happy coding! ;)ăDATA "                 —Restarting Text...Ą                     "ăDATA "END"ăăSUB BigPrint (BYTE$)ă ă  LOCATE 1, 1: PRINT BYTE$;ă  FOR X = 0 TO 6ă    FOR Y = 0 TO 7ă      IF PEEK(Y * 320 + X) THENă        PSET (X * 2 + 305, Y * 2 + 94)ă      END IFă    NEXTă  NEXTă  LOCATE 1, 1: PRINT " ";ăăEND SUBăăSUB DrawBGStuffăă  ' Set colors 64 through 191 from shades of black to red to whiteă  FOR NUM = 64 TO 127ă    PAL NUM, NUM, 0, 0ă  NEXTă  NUM2 = 63ă  FOR NUM = 128 TO 191ă    PAL NUM, NUM2, NUM, NUMă    NUM2 = NUM2 - 1ă  NEXTăă  ' Draw starsă  FOR NUM = 0 TO 500ă    PSET (INT(RND * 320), INT(RND * 200)), INT(RND * 10) + 17ă  NEXTăă  ' Draw cool red patternsă  FOR X = 0 TO 99: LINE (X, X)-(319 - X, 199 - X), X + 64: NEXTă  FOR X = 0 TO 99: LINE (319 - X, X)-(X, 199 - X), X + 64: NEXTă  FOR X = 0 TO 99: LINE (140, X)-(180, 199 - X), X + 64: NEXTă  FOR X = 0 TO 99: LINE (180, X)-(140, 199 - X), X + 64: NEXTă ă  ' Draw gradiated box around scrolltextă  LINE (0, 92)-(319, 109), 0, BFă  LINE (0, 91)-(319, 91), 25ă  LINE (0, 110)-(319, 110), 25ă  LINE (0, 90)-(319, 90), 28ă  LINE (0, 111)-(319, 111), 28ă  LINE (0, 89)-(319, 89), 31ă  LINE (0, 112)-(319, 112), 31ăăEND SUBăăSUB PAL (A, R, G, B)ăă  OUT &H3C8, Aă  OUT &H3C9, Ră  OUT &H3C9, Gă  OUT &H3C9, BăăEND SUBăMatt Gulden                    VERTICAL SCROLLING TEXT        www.thrillhaus.com/basic.html  06-25-98 (00:00)       QB, QBasic, PDS        133  3077     SCRLTXT3.BAS' SCRLTXT3.BAS -- by Matt Gulden (mattg@thrillhaus.com)ă' Found at http://www.thrillhaus.com/ă' This is the third smooth scrolling text demo, now scrollingă' vertically! Uses new scrolltext keywords;ă' WAIT4KEY - stops scrolltext and suspends until key is pressedă' PAUSE n - Pauses for n seconds (type double)ă' END - marks end of text (required!)ă' The DATA statements need the color, then the text.ă' All text is right-aligned, you can edit it though.ăăDEFINT A-ZăDECLARE SUB DrawStuff ()ăDECLARE SUB PAL (A, R, G, B)ăDECLARE SUB RightAlign (y, text$)ăDECLARE SUB PAUSE (LENGTH#)ăDIM DataString(6240) AS SINGLEăSCREEN 13ăăDrawStuffăăWHILE INKEY$ = ""ăă  IF NextPrint = 16 THENă    READ Colour, text$ă    IF UCASE$(text$) = "END" THENă      RESTORE ScrollTextStartă      READ Colour, text$ă      COLOR Coloură      RightAlign 24, text$ă      NextPrint = 0ă      ' These next two lines make the text look skinnyă      GET (1, 184)-(319, 192), DataStringă      PUT (0, 184), DataString, ANDă    ELSEIF UCASE$(text$) = "WAIT4KEY" THENă      WHILE INKEY$ = "": WENDă      NextPrint = 0ă    ELSEIF LEFT$(UCASE$(text$), 6) = "PAUSE " THENă      PAUSE VAL(RIGHT$(text$, LEN(text$) - INSTR(text$, " ")))ă      NextPrint = 0ă    ELSEă      COLOR Coloură      RightAlign 24, text$ă      NextPrint = 0ă      ' These next two lines make the text look skinnyă      GET (1, 184)-(319, 192), DataStringă      PUT (0, 184), DataString, ANDă    END IFă  END IFăă  NextPrint = NextPrint + 1ă ă  ' Wait for vertical retraceă  WAIT &H3DA, 8ă ă  ' move text up a pixelă  GET (0, 115)-(319, 192), DataStringă  PUT (0, 114), DataString, PSETă     ă  ' Make text italică  'GET (1, 184)-(319, 192), DataStringă  'PUT (0, 184), DataString, PSETă ăWENDăăScrollTextStart:ăDATA 30, "Smooth scrolling text #3!"ăDATA 40, "by Matt Gulden (aka Folter)"ăDATA 50, "webmaster@thrillhaus.com"ăDATA 0, "PAUSE 2.5"ăDATA 0, ""ăDATA 50, "This is just another example of"ăDATA 60, "the quality source code found at:"ăDATA 70, "http://www.thrillhaus.com/"ăDATA 0, "PAUSE 2.5"ăDATA 0, ""ăDATA 70, "Also check out our free software,"ăDATA 80, "compiler(s), utilities, and screen"ăDATA 90, "savers"ăDATA 0, "PAUSE 2.5"ăDATA 0, ""ăDATA 90, "Look for projects like THScript,"ăDATA 100, "LightBasic, SpASM, Bastard 98, vTXT,"ăDATA 110, "and more!"ăDATA 0, "PAUSE 2.5"ăDATA 0, ""ăDATA 0, ""ăDATA 0, ""ăDATA 80, "Restarting Text            "ăDATA 0, ""ăDATA 0, ""ăDATA 0, ""ăDATA 0, ""ăDATA 0, "END"ăăSUB DrawStuffăă  FOR NUM = 0 TO 63ă    PAL NUM, NUM, 0, 0ă  NEXTă  NUM2 = 63ă  FOR NUM = 64 TO 113ă    PAL NUM, 63, NUM, 0ă    NUM2 = NUM2 - 1ă  NEXTă  NUM2 = 63ăă  FOR y = 0 TO 113ă    LINE (0, y)-(319, y), yă  NEXTăăEND SUBăăSUB PAL (A, R, G, B)ăă  OUT &H3C8, Aă  OUT &H3C9, Ră  OUT &H3C9, Gă  OUT &H3C9, BăăEND SUBăăSUB PAUSE (LENGTH#)ăă  START# = TIMER: WHILE TIMER < START# + LENGTH#: WENDăăEND SUBăăSUB RightAlign (y, text$)ăă  x = 40 - LEN(text$)ă  LOCATE y, x: PRINT text$;ă ăEND SUBăAnders Olofsson                LOAD/SAVE 320X200 BITMAPS      anders.olofsson@mail.bip.net   07-06-98 (22:27)       QB, QBasic, PDS        181  4970     BMPVIEW.BAS 'ă' Fast BMP-viewer for screen 13, by Anders Olofsson 1998.ă' This program loads a 320 x 200 256 color bitmap picture in about 0.15ă' seconds. (On my 486/66 mhz in QB 4.5)ă'ă' Thanks to Jonathan Leger for the Memcopyă' routine and Davey W. taylor for his BMPSNOW.BAS, where i foundă' the BmpInfo type def.ă'ă'   E-mail: anders.olofsson@mail.bip.netă'ăăDEFINT A-ZăDECLARE SUB ShowBMP (File$)ăDECLARE SUB SaveBMP (Filename$)ăDECLARE FUNCTION getfilename$ (Text$)ăDECLARE SUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăăTYPE BmpInfoă id AS STRING * 2ă filesize AS LONGă reserved AS STRING * 4ă Offset AS LONGă SizeOfHeader AS LONGă BMPWidth AS LONGă BmpHeight AS LONGă Bitplanes AS INTEGERă Bitsperpixel AS INTEGERă Compression AS LONGă Imagesize AS LONGă Pelspermetrex AS LONGă Pelspermetrey AS LONGă UsedColors AS LONGă importantcolors AS LONGăEND TYPEăăăZ$ = getfilename$("Select 320x200 256 color BMP file to view: ")ăăSCREEN 13ăăT! = TIMERăShowBMP Z$ăPRINT USING "It took##.### seconds."; TIMER - T!ăăSLEEPăăCLS : ShowBMP Z$ăLOCATE 1, 1ăPRINT "Saving BMP...";ăT! = TIMERăSaveBMP "TEMP.BMP"ăPRINT "done."ăPRINT USING "It took##.### seconds."; TIMER - T!ăăWHILE LEN(INKEY$) = 0: WENDăăFUNCTION getfilename$ (Text$)ăSCREEN 0: WIDTH 80, 25: CLSăLOCATE 1, 1ăPRINT Text$ăLINE INPUT I$ăIF I$ = "" THEN ENDăgetfilename$ = I$ăEND FUNCTIONăăSUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăDIM MemCopy.ASM AS STRINGăMemCopy.ASM = ""ăMemCopy.ASM = MemCopy.ASM + CHR$(85)                             'PUSH BPăMemCopy.ASM = MemCopy.ASM + CHR$(137) + CHR$(229)                'MOV BP,SPăMemCopy.ASM = MemCopy.ASM + CHR$(30)                             'PUSH DSăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(10)      'MOV AX,[BP+0A]ăMemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(192)                'MOV ES,AXăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(14)      'MOV AX,[BP+0E]ăMemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(216)                'MOV DS,AXăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(118) + CHR$(12)     'MOV SI,[BP+0C]ăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(126) + CHR$(8)      'MOV DI,[BP+08]ăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăMemCopy.ASM = MemCopy.ASM + CHR$(243)                            'REPZăMemCopy.ASM = MemCopy.ASM + CHR$(164)                            'MOVSBăMemCopy.ASM = MemCopy.ASM + CHR$(31)                             'POP DSăMemCopy.ASM = MemCopy.ASM + CHR$(93)                             'POP BPăMemCopy.ASM = MemCopy.ASM + CHR$(203)                            'RETFăăDEF SEG = VARSEG(MemCopy.ASM)ă        CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(MemCopy.ASM))ăDEF SEGăăEND SUBăăSUB SaveBMP (Filename$)ăDIM BMPHeader AS BmpInfoăăBMPHeader.id = "BM"ăBMPHeader.SizeOfHeader = 40ăBMPHeader.BMPWidth = 320ăBMPHeader.BmpHeight = 200ăBMPHeader.Bitsperpixel = 8ăBMPHeader.Imagesize = 64000ăBMPHeader.UsedColors = 255ăBMPHeader.Bitplanes = 1ăBMPHeader.Offset = 1078ăBMPHeader.Pelspermetrex = 3780ăBMPHeader.Pelspermetrey = 3790ăăăF = FREEFILEăOPEN Filename$ FOR BINARY AS #Făă PUT #F, , BMPHeaderăăFOR C = 0 TO 255ă OUT &H3C7, Că B = INP(&H3C9): G = INP(&H3C9): R = INP(&H3C9)ă PData$ = CHR$(R * 4) + CHR$(G * 4) + CHR$(B * 4) + " "ă PUT #F, , PData$ăNEXTăăDIM Buffer AS STRINGăSegment = &HA000 + (64000 \ 16) - 20ăăFOR y = 200 TO 1 STEP -1ă Buffer = SPACE$(320)ă Memcopy Segment, 0, VARSEG(Buffer), SADD(Buffer), 320ă PUT #F, , Bufferă Segment = Segment - 20ăNEXTăăCLOSE #FăăEND SUBăăSUB ShowBMP (File$)ăăDIM BMPHeader AS BmpInfoăăF = FREEFILEăOPEN File$ FOR BINARY ACCESS READ AS #FăGET #F, 1, BMPHeaderăăIF BMPHeader.id <> "BM" OR BMPHeader.SizeOfHeader <> 40 THENă PRINT File$; " is not a valid bitmap file": ENDăELSEIF BMPHeader.BMPWidth <> 320 OR BMPHeader.BmpHeight <> 200 THENă PRINT "Size of image has to bee 320x200!": ENDăELSEIF BMPHeader.Compression THENă PRINT "This program does'nt show rle compressed bmp's!": ENDăELSEIF BMPHeader.Bitsperpixel <> 8 THENă PRINT "Only 256 color bitmaps can be displayed!": ENDăEND IFăăPal$ = INPUT$(1024, F)ăFOR C = 0 TO 255  'Set palette to black while drawing to screenă OUT &H3C8, C: OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 0ăNEXTăăDIM Buffer AS STRINGăSegment = &HA000 + (64000 - 1280) \ 16ăăFOR y = 199 TO 0 STEP -4ă Buffer = SPACE$(320)ă GET #F, , Bufferă Buffer = INPUT$(320, F) + Bufferă Buffer = INPUT$(320, F) + Bufferă Buffer = INPUT$(320, F) + Bufferă Memcopy VARSEG(Buffer), SADD(Buffer), Segment, 0, 1280ă Segment = Segment - 80ăNEXTăăCLOSE #FăăFOR C = 0 TO 255ă B = ASC(MID$(Pal$, C * 4 + 1, 1)) \ 4ă G = ASC(MID$(Pal$, C * 4 + 2, 1)) \ 4ă R = ASC(MID$(Pal$, C * 4 + 3, 1)) \ 4ă OUT &H3C8, Că OUT &H3C9, R: OUT &H3C9, G: OUT &H3C9, BăNEXTăEND SUBăAnders Olofsson                PLASMA, 320X200X256 VERSION    anders.olofsson@mail.bip.net   07-06-98 (22:27)       QB, QBasic, PDS        291  7502     PLASMA1.BAS 'ă'  Plasma, 320x200x256 version.ă'ă'    By Anders Olofsson 1998.ă'ă'      E-mail: anders.olofsson@mail.bip.netă'ă'-------------------------------------------------------ă'   ** Compile for maximum speed **ă'ă'   Press space to change palette rotation directionă'   Press "P" to get a new paletteă'   Press "N" to get new plasmaă'   Press Enter to save current plasma in a bitmap file!!!ă'-------------------------------------------------------ă'ă'   Thanks to:ă'     Davey W. Taylor for the bmpinfo type def.ă'     Jonathan Leger - Memcopy routine.ă'ă'ă'-------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăDECLARE SUB CyclePalette (Dir%)ăDECLARE SUB Paletteget (A%, R%, G%, B%)ăDECLARE SUB MakeRandomPalette ()ăDECLARE SUB Pal (A%, R%, G%, B%)ăDECLARE SUB SaveBMP (N$)ăDECLARE SUB SetScreenmode (SM%)ă                      ăăCONST Noise = 0           ' If you want noise, change the value to 1ăCONST StartSize = 5       ' Bigger value = bigger clouds...ăCONST Plasmatimer = 120   ' Changes plasma every .. second(s).ăCONST PaletteTimer = 30   ' Changes palette every .. second(s).ă  File$ = "PLASMA"        ' Name of the captured files... (this will turn oută                          ' plasma.bmp, plasma1.bmp, plasma2.bmp and so on...)ă'-------------------------------------------------------ăăăă' Needed to save screen-shots in bitmap format...ăăTYPE BmpInfoă id AS STRING * 2ă filesize AS LONGă reserved AS STRING * 4ă Offset AS LONGă SizeOfHeader AS LONGă BMPWidth AS LONGă BmpHeight AS LONGă Bitplanes AS INTEGERă Bitsperpixel AS INTEGERă Compression AS LONGă Imagesize AS LONGă Pelspermetrex AS LONGă Pelspermetrey AS LONGă UsedColors AS LONGă importantcolors AS LONGăEND TYPEăăăSCREEN 13ăăGOSUB ChangePaletteăăCurrentDir = 1ăăRedrawPlasma:ăăFOR y = 0 TO 199 STEP StartSizeă FOR x = 0 TO 319 STEP StartSizeă  C = RND * 254 + 1ă  LINE (x, y)-STEP(StartSize, StartSize), C, BFă NEXTăNEXTăăăDEF SEG = &HA000ăFOR s = StartSize TO 1 STEP -1ăFOR y = 0 TO 199 STEP să Y2 = y + s: IF Y2 >= 199 THEN Y2 = 199ă FOR x = 0 TO 319 STEP să  C = (PEEK(320& * y + x) + PEEK(320& * Y2 + (x + s)) + PEEK(320& * Y2 + x) + PEEK(320& * y + (x + s))) \ 4ă  IF s > 1 THEN LINE (x, y)-STEP(s, s), C, BF ELSE POKE 320& * y + x, Că NEXTăNEXTăNEXTăăIF Noise THENăFOR y = 0 TO 199ăFOR x = 0 TO 319ă C = PEEK(320& * y + x + 1) - (RND * 10) + 1ă POKE 320& * y + x, CăNEXTăCyclePalette CurrentDirăNEXTăEND IFăăPlasmaCounter! = TIMERăPaletteCounter! = TIMERăăDOă Keys$ = UCASE$(INKEY$)ă IF LEN(Keys$) THENă  IF Keys$ = " " AND CurrentDir = 2 THEN CurrentDir = 1: Keys$ = ""ă  IF Keys$ = " " AND CurrentDir = 1 THEN CurrentDir = 2ă  IF Keys$ = "P" THEN GOSUB ChangePalette: Keys$ = ""ă  IF Keys$ = "N" THEN GOTO RedrawPlasmaă  IF Keys$ = CHR$(13) THENă   filen$ = File$ăFileCheck: F = FREEFILEă   OPEN filen$ + ".BMP" FOR BINARY AS #Fă   IF LOF(1) > 0 THENă    CLOSE #Fă    FCounter = FCounter + 1ă    filen$ = File$ + LTRIM$(RTRIM$(STR$(FCounter)))ă    GOTO FileCheckă   ELSEă    CLOSE #Fă    KILL filen$ + ".BMP"ă   END IFă   SaveBMP filen$ + ".BMP"ă   Keys$ = ""ă  END IFă END IFă CyclePalette CurrentDiră IF TIMER - PlasmaCounter! > Plasmatimer THEN GOTO RedrawPlasmaă IF TIMER - PaletteCounter! > PaletteTimer THEN GOSUB ChangePaletteăă 'Lots of retraices... else it goes to fast!ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăLOOP UNTIL LEN(Keys$) AND Keys$ <> " "ăăFOR x = 0 TO 63                  'Fade oută FOR C = 0 TO 255ă  Paletteget C, R, G, Bă  IF R THEN R = R - 1ă  IF G THEN G = G - 1ă  IF B THEN B = B - 1ă  Pal C, R, G, Bă NEXTă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăNEXTăăSCREEN 0: WIDTH 80, 25ăăENDăăChangePalette:ăPaletteCounter! = TIMERăR = INP(64) \ 5: G = INP(64) \ 5: G = INP(64) \ 5ăPal 1, R, G, B: Pal 255, R + (10 * RND), G + (10 * RND), B + (10 * RND)ă MakeRandomPaletteăPal 0, 0, 0, 0ăPal 64, 63, 63, 0ăRETURNăăSUB CyclePalette (Dir)ăăIF Dir = 1 THENăFOR T = 2 TO 255ă Paletteget T, R, G, Bă Pal T - 1, R, G, BăNEXTăăPaletteget 1, R, G, BăPal 255, R, G, BăăELSEăăPaletteget 255, R, G, BăPal 1, R, G, BăăFOR T = 254 TO 1 STEP -1ă Paletteget T, R, G, Bă Pal T + 1, R, G, BăNEXTăăEND IFăăWAIT &H3DA, 8ăWAIT &H3DA, 8, 1ăăEND SUBăăSUB MakeRandomPaletteăDIM used(0 TO 255) AS STRING * 2: used(0) = CHR$(1) + CHR$(255): s = 1ăăDOăgetnext: IF s = 0 THEN EXIT DOă         s = s - 1ă         c1 = ASC(used(s)): c2 = ASC(RIGHT$(used(s), 1))ă         current = (c1 + c2) \ 2ăIF c1 = c2 OR current = c1 OR current = c2 GOTO getnextăă Paletteget c1, r1, g1, b1: Paletteget c2, r2, g2, b2ă  T = (ABS(c1 - c2) \ 8) * ((INP(64) MOD 3) - 1)ă  R = (r1 + r2) \ 2 + T: G = (g1 + g2) \ 2 + T: B = (b1 + b2) \ 2 + Tă Pal current, R, G, Bă used(s) = CHR$(c1) + CHR$(current): s = s + 1ă used(s) = CHR$(current) + CHR$(c2): s = s + 1ăLOOP UNTIL s = 0ăPal 0, 0, 0, 0ăăEND SUBăăSUB Memcopy (fromseg%, fromoffset%, toseg%, tooffset%, bytes%)ăăDIM MemCopy.ASM AS STRINGăMemCopy.ASM = ""ăMemCopy.ASM = MemCopy.ASM + CHR$(85)                             'PUSH BPăMemCopy.ASM = MemCopy.ASM + CHR$(137) + CHR$(229)                'MOV BP,SPăMemCopy.ASM = MemCopy.ASM + CHR$(30)                             'PUSH DSăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(10)      'MOV AX,[BP+0A]ăMemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(192)                'MOV ES,AXăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(70) + CHR$(14)      'MOV AX,[BP+0E]ăMemCopy.ASM = MemCopy.ASM + CHR$(142) + CHR$(216)                'MOV DS,AXăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(118) + CHR$(12)     'MOV SI,[BP+0C]ăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(126) + CHR$(8)      'MOV DI,[BP+08]ăMemCopy.ASM = MemCopy.ASM + CHR$(139) + CHR$(78) + CHR$(6)       'MOV CX,[BP+06]ăMemCopy.ASM = MemCopy.ASM + CHR$(243)                            'REPZăMemCopy.ASM = MemCopy.ASM + CHR$(164)                            'MOVSBăMemCopy.ASM = MemCopy.ASM + CHR$(31)                             'POP DSăMemCopy.ASM = MemCopy.ASM + CHR$(93)                             'POP BPăMemCopy.ASM = MemCopy.ASM + CHR$(203)                            'RETFăăDEF SEG = VARSEG(MemCopy.ASM)ă        CALL Absolute(BYVAL fromseg%, BYVAL fromoffset%, BYVAL toseg%, BYVAL tooffset%, BYVAL bytes%, SADD(MemCopy.ASM))ăDEF SEGăăEND SUBăăSUB Pal (A, R, G, B)ăOUT &H3C8, AăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăăEND SUBăăSUB Paletteget (A, R, G, B)ăOUT &H3C7, AăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB SaveBMP (Filename$)ăDIM BMPHeader AS BmpInfoăăBMPHeader.id = "BM"ăBMPHeader.SizeOfHeader = 40ăBMPHeader.BMPWidth = 320ăBMPHeader.BmpHeight = 200ăBMPHeader.Bitsperpixel = 8ăBMPHeader.Imagesize = 64000ăBMPHeader.UsedColors = 255ăBMPHeader.Bitplanes = 1ăBMPHeader.Offset = 1078ăBMPHeader.Pelspermetrex = 3780ăBMPHeader.Pelspermetrey = 3790ăăăF = FREEFILEăOPEN Filename$ FOR BINARY AS #Făă PUT #F, , BMPHeaderăăFOR C = 0 TO 255ă Paletteget C, R, G, Bă PData$ = CHR$(R * 4) + CHR$(G * 4) + CHR$(B * 4) + " "ă PUT #F, , PData$ăNEXTăăDIM Buffer AS STRINGăSegment = &HA000 + (64000 \ 16) - 20ăăFOR y = 200 TO 1 STEP -1ă Buffer = SPACE$(320)ă Memcopy Segment, 0, VARSEG(Buffer), SADD(Buffer), 320ă PUT #F, , Bufferă Segment = Segment - 20ăNEXTăăCLOSE #FăăEND SUBăAnders Olofsson                SVGA PLASMA, 640X480X256       anders.olofsson@mail.bip.net   07-06-98 (22:27)       QB, QBasic, PDS        281  6489     PLASMA2.BAS 'ă'  SVGA Plasma, 640x480x256 version.ă'ă'    By Anders Olofsson 1998.ă'ă'      E-mail: anders.olofsson@mail.bip.netă'ă'-------------------------------------------------------ă'   ** Compile for maximum speed **ă'ă'   Press space to change palette rotation directionă'   Press "P" to get a new paletteă'   Press "N" to get new plasmaă'   Press Enter to save current plasma in a bitmap file!!!ă'-------------------------------------------------------ă'ă'   Thanks to:ă'     Andrew S. Gibson - Switchbank & dpoint & dpsetă'      (Switchbank has been converted to asm-code, so thată'      Qbasic users can run this program.)ă'ă'-------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB Switchbank (NB%)ăDECLARE FUNCTION DPOINT% (XCOORD%, YCOORD%)ăDECLARE SUB dpset (XCOORD%, YCOORD%, CL%)ăDECLARE SUB CyclePalette (Dir%)ăDECLARE SUB Paletteget (A%, R%, G%, B%)ăDECLARE SUB PutBox (x%, y%, c%, s%)ăDECLARE SUB putpix (x%, y%, c%)ăDECLARE SUB MakeRandomPalette ()ăDECLARE SUB Pal (A%, R%, G%, B%)ăDECLARE SUB SetScreenmode (SM%)ă		     ăăCONST Noise = 0           ' If you want noise, change the value to 1ăCONST StartSize = 7       ' Bigger value = bigger clouds...ăCONST Plasmatimer = 120   ' Changes plasma every .. second(s).ăCONST PaletteTimer = 30   ' Changes palette every .. second(s).ă  File$ = "PLASMA"        ' Name of the captured files... (this will turn oută			  ' plasma.bmp, plasma1.bmp, plasma2.bmp and so on...)ă'-------------------------------------------------------ăăTYPE RegtypeXă     AX    AS INTEGERă     BX    AS INTEGERă     cx    AS INTEGERă     DX    AS INTEGERă     bp    AS INTEGERă     si    AS INTEGERă     di    AS INTEGERă     flags AS INTEGERă     ds    AS INTEGERă     es    AS INTEGERăEND TYPEăăDIM SHARED Bank%, Table&(0 TO 485)ăăFOR Height% = 0 TO 485: Table&(Height%) = Height% * 640&: NEXT Height%ăăSCREEN 13ăăSetScreenmode &H101ăăGOSUB ChangePaletteăCurrentDir = 1ăăRedrawPlasma:ăăFOR y = 0 TO 479 STEP StartSizeă FOR x = 0 TO 639 STEP StartSizeă  c = RND * 254 + 1ă  FOR tx = x TO x + StartSizeă  FOR ty = y TO y + StartSizeă   dpset tx, ty, că  NEXTă  NEXTă NEXTă IF LEN(INKEY$) THEN EXIT FORăNEXTăăDEF SEG = &HA000ăFOR s = StartSize - 1 TO 1 STEP -1ăFOR y = 0 TO 479 STEP să FOR x = 0 TO 639 STEP să  c = (DPOINT(x, y) + DPOINT(x + s, y + s) + DPOINT(x + s, y) + DPOINT(x, y + s)) \ 4ă  FOR tx = x TO x + să  FOR ty = y TO y + să   dpset tx, ty, că  NEXTă  NEXTă NEXTă IF LEN(INKEY$) THEN EXIT FOR: EXIT FORăNEXTăNEXTăăăIF Noise THENăFOR y = 0 TO 199ăFOR x = 0 TO 319ă c = DPOINT(x, y)ă dpset x, y, căNEXTăCyclePalette CurrentDirăNEXTăEND IFăăPlasmaCounter! = TIMERăPaletteCounter! = TIMERăăDOă Keys$ = UCASE$(INKEY$)ă IF LEN(Keys$) THENă  IF Keys$ = " " AND CurrentDir = 2 THEN CurrentDir = 1: Keys$ = ""ă  IF Keys$ = " " AND CurrentDir = 1 THEN CurrentDir = 2ă  IF Keys$ = "P" THEN GOSUB ChangePalette: Keys$ = ""ă  IF Keys$ = "N" THEN GOTO RedrawPlasmaă END IFă CyclePalette CurrentDiră IF TIMER - PlasmaCounter! > Plasmatimer THEN GOTO RedrawPlasmaă IF TIMER - PaletteCounter! > PaletteTimer THEN GOSUB ChangePaletteăă 'Lots of retraices... else it goes to fast!ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăLOOP UNTIL LEN(Keys$) AND Keys$ <> " "ăăFOR x = 0 TO 63                  'Fade oută FOR c = 0 TO 255ă  Paletteget c, R, G, Bă  IF R THEN R = R - 1ă  IF G THEN G = G - 1ă  IF B THEN B = B - 1ă  Pal c, R, G, Bă NEXTă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăNEXTăăSCREEN 13: SCREEN 0: WIDTH 80, 25ăăENDăăChangePalette:ăPaletteCounter! = TIMERăR = INP(64) \ 5: G = INP(64) \ 5: G = INP(64) \ 5ăPal 1, R, G, B: Pal 255, R + (10 * RND), G + (10 * RND), B + (10 * RND)ă MakeRandomPaletteăPal 0, 0, 0, 0ăPal 64, 63, 63, 0ăRETURNăăSUB CyclePalette (Dir)ăăIF Dir = 1 THENăFOR t = 2 TO 255ă Paletteget t, R, G, Bă Pal t - 1, R, G, BăNEXTăăPaletteget 1, R, G, BăPal 255, R, G, BăăELSEăăPaletteget 255, R, G, BăPal 1, R, G, BăăFOR t = 254 TO 1 STEP -1ă Paletteget t, R, G, Bă Pal t + 1, R, G, BăNEXTăăEND IFăăWAIT &H3DA, 8ăWAIT &H3DA, 8, 1ăăEND SUBăăFUNCTION DPOINT% (XCOORD, YCOORD)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN Switchbank NewBank%ăDEF SEG = &HA000ăDPOINT% = PEEK((Table&(YCOORD) + XCOORD) MOD 65536)ăDEF SEGăăEND FUNCTIONăăSUB dpset (XCOORD, YCOORD, CL%)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN Switchbank NewBank%ăDEF SEG = &HA000ăPOKE (Table&(YCOORD) + XCOORD) MOD 65536, CL%ăDEF SEGăăEND SUBăăSUB MakeRandomPaletteăDIM used(0 TO 255) AS STRING * 2: used(0) = CHR$(1) + CHR$(255): s = 1ăăDOăgetnext: IF s = 0 THEN EXIT DOă	 s = s - 1ă	 c1 = ASC(used(s)): c2 = ASC(RIGHT$(used(s), 1))ă	 current = (c1 + c2) \ 2ăIF c1 = c2 OR current = c1 OR current = c2 GOTO getnextăă Paletteget c1, r1, g1, b1: Paletteget c2, r2, g2, b2ă  t = (ABS(c1 - c2) \ 8) * ((INP(64) MOD 3) - 1)ă  R = (r1 + r2) \ 2 + t: G = (g1 + g2) \ 2 + t: B = (b1 + b2) \ 2 + tă Pal current, R, G, Bă used(s) = CHR$(c1) + CHR$(current): s = s + 1ă used(s) = CHR$(current) + CHR$(c2): s = s + 1ăLOOP UNTIL s = 0ăPal 0, 0, 0, 0ăăEND SUBăăSUB Pal (A, R, G, B)ăOUT &H3C8, AăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăăEND SUBăăSUB Paletteget (A, R, G, B)ăOUT &H3C7, AăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB SetScreenmode (SM)ă'SM (ScreenMode) may be any one of the following:ă'3 = Text Modeă'&H100 = 640x400x256ă'&H101 = 640x480x256ă'&H102 = 800x600x16ă'&H103 = 800x600x256ă'&H104 = 1024x768x16ă'&H105 = 1024x768x256ă'ă'Interrupt converted to assembly code by Anders Olofsson.ăăasm$ = CHR$(&HB8) + MKI$(&H4F02)ăasm$ = asm$ + CHR$(&HBB) + MKI$(SM)ăasm$ = asm$ + CHR$(&HCD) + CHR$(&H10)ăasm$ = asm$ + CHR$(&HCB)ăăDEF SEG = VARSEG(asm$)ă CALL Absolute(SADD(asm$))ăDEF SEGăăEND SUBăăSUB Switchbank (NB%)ăă'DIM Registers AS RegtypeXă' Registers.AX = &H4F05ă' Registers.BX = 0ă' Registers.DX = NB%ă' CALL InterruptX(&H10, Registers, Registers)ă' Bank% = NB%ăă	ă	ă	 'Converted to Qbasic code...ăă       asm$ = CHR$(&HB8) + CHR$(5) + CHR$(&H4F)'MKI$(&H4F05)ăasm$ = asm$ + CHR$(&HBB) + MKI$(0)ăasm$ = asm$ + CHR$(&HBA) + CHR$(NB%) + CHR$(0)ăasm$ = asm$ + CHR$(&HCD) + CHR$(&H10)ăasm$ = asm$ + CHR$(&HCB)ăăDEF SEG = VARSEG(asm$): o = SADD(asm$): CALL Absolute(o): DEF SEGăăBank% = NB%ăăEND SUBăAnders Olofsson                SVGA PLASMA, 800X600X256       anders.olofsson@mail.bip.net   07-06-98 (22:27)       QB, QBasic, PDS        281  6488     PLASMA3.BAS 'ă'  SVGA Plasma, 800x600x256 version.ă'ă'   By Anders Olofsson 1998.ă'ă'      E-mail: anders.olofsson@mail.bip.netă'ă'-------------------------------------------------------ă'   ** Compile for maximum speed **ă'ă'   Press space to change palette rotation directionă'   Press "P" to get a new paletteă'   Press "N" to get new plasmaă'   Press Enter to save current plasma in a bitmap file!!!ă'-------------------------------------------------------ă'ă'   Thanks to:ă'     Andrew S. Gibson - Switchbank & dpoint & dpsetă'      (Switchbank has been converted to asm-code, so thată'      Qbasic users can run this program.)ă'ă'-------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB Switchbank (NB%)ăDECLARE FUNCTION DPOINT% (XCOORD%, YCOORD%)ăDECLARE SUB dpset (XCOORD%, YCOORD%, CL%)ăDECLARE SUB CyclePalette (Dir%)ăDECLARE SUB Paletteget (A%, R%, G%, B%)ăDECLARE SUB PutBox (x%, y%, c%, s%)ăDECLARE SUB putpix (x%, y%, c%)ăDECLARE SUB MakeRandomPalette ()ăDECLARE SUB Pal (A%, R%, G%, B%)ăDECLARE SUB SetScreenmode (SM%)ă		     ăăCONST Noise = 0           ' If you want noise, change the value to 1ăCONST StartSize = 7       ' Bigger value = bigger clouds...ăCONST Plasmatimer = 120   ' Changes plasma every .. second(s).ăCONST PaletteTimer = 30   ' Changes palette every .. second(s).ă  File$ = "PLASMA"        ' Name of the captured files... (this will turn oută			  ' plasma.bmp, plasma1.bmp, plasma2.bmp and so on...)ă'-------------------------------------------------------ăăTYPE RegtypeXă     AX    AS INTEGERă     BX    AS INTEGERă     cx    AS INTEGERă     DX    AS INTEGERă     bp    AS INTEGERă     si    AS INTEGERă     di    AS INTEGERă     flags AS INTEGERă     ds    AS INTEGERă     es    AS INTEGERăEND TYPEăăDIM SHARED Bank%, Table&(0 TO 805)ăăFOR Height% = 0 TO 805: Table&(Height%) = Height% * 800&: NEXT Height%ăăSCREEN 13ăăSetScreenmode &H103ăăGOSUB ChangePaletteăCurrentDir = 1ăăRedrawPlasma:ăăFOR y = 0 TO 599 STEP StartSizeă FOR x = 0 TO 799 STEP StartSizeă  c = RND * 254 + 1ă  FOR tx = x TO x + StartSizeă  FOR ty = y TO y + StartSizeă   dpset tx, ty, că  NEXTă  NEXTă NEXTă IF LEN(INKEY$) THEN EXIT FORăNEXTăăDEF SEG = &HA000ăFOR s = StartSize - 1 TO 1 STEP -1ăFOR y = 0 TO 599 STEP să FOR x = 0 TO 799 STEP să  c = (DPOINT(x, y) + DPOINT(x + s, y + s) + DPOINT(x + s, y) + DPOINT(x, y + s)) \ 4ă  FOR tx = x TO x + să  FOR ty = y TO y + să   dpset tx, ty, că  NEXTă  NEXTă NEXTă IF LEN(INKEY$) THEN EXIT FOR: EXIT FORăNEXTăNEXTăăăIF Noise THENăFOR y = 0 TO 199ăFOR x = 0 TO 319ă c = DPOINT(x, y)ă dpset x, y, căNEXTăCyclePalette CurrentDirăNEXTăEND IFăăPlasmaCounter! = TIMERăPaletteCounter! = TIMERăăDOă Keys$ = UCASE$(INKEY$)ă IF LEN(Keys$) THENă  IF Keys$ = " " AND CurrentDir = 2 THEN CurrentDir = 1: Keys$ = ""ă  IF Keys$ = " " AND CurrentDir = 1 THEN CurrentDir = 2ă  IF Keys$ = "P" THEN GOSUB ChangePalette: Keys$ = ""ă  IF Keys$ = "N" THEN GOTO RedrawPlasmaă END IFă CyclePalette CurrentDiră IF TIMER - PlasmaCounter! > Plasmatimer THEN GOTO RedrawPlasmaă IF TIMER - PaletteCounter! > PaletteTimer THEN GOSUB ChangePaletteăă 'Lots of retraices... else it goes to fast!ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăLOOP UNTIL LEN(Keys$) AND Keys$ <> " "ăăFOR x = 0 TO 63                  'Fade oută FOR c = 0 TO 255ă  Paletteget c, R, G, Bă  IF R THEN R = R - 1ă  IF G THEN G = G - 1ă  IF B THEN B = B - 1ă  Pal c, R, G, Bă NEXTă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăNEXTăăSCREEN 13: SCREEN 0: WIDTH 80, 25ăăENDăăChangePalette:ăPaletteCounter! = TIMERăR = INP(64) \ 5: G = INP(64) \ 5: G = INP(64) \ 5ăPal 1, R, G, B: Pal 255, R + (10 * RND), G + (10 * RND), B + (10 * RND)ă MakeRandomPaletteăPal 0, 0, 0, 0ăPal 64, 63, 63, 0ăRETURNăăSUB CyclePalette (Dir)ăăIF Dir = 1 THENăFOR t = 2 TO 255ă Paletteget t, R, G, Bă Pal t - 1, R, G, BăNEXTăăPaletteget 1, R, G, BăPal 255, R, G, BăăELSEăăPaletteget 255, R, G, BăPal 1, R, G, BăăFOR t = 254 TO 1 STEP -1ă Paletteget t, R, G, Bă Pal t + 1, R, G, BăNEXTăăEND IFăăWAIT &H3DA, 8ăWAIT &H3DA, 8, 1ăăEND SUBăăFUNCTION DPOINT% (XCOORD, YCOORD)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN Switchbank NewBank%ăDEF SEG = &HA000ăDPOINT% = PEEK((Table&(YCOORD) + XCOORD) MOD 65536)ăDEF SEGăăEND FUNCTIONăăSUB dpset (XCOORD, YCOORD, CL%)ăNewBank% = (Table&(YCOORD) + XCOORD) \ 65536ăIF NewBank% <> Bank% THEN Switchbank NewBank%ăDEF SEG = &HA000ăPOKE (Table&(YCOORD) + XCOORD) MOD 65536, CL%ăDEF SEGăăEND SUBăăSUB MakeRandomPaletteăDIM used(0 TO 255) AS STRING * 2: used(0) = CHR$(1) + CHR$(255): s = 1ăăDOăgetnext: IF s = 0 THEN EXIT DOă	 s = s - 1ă	 c1 = ASC(used(s)): c2 = ASC(RIGHT$(used(s), 1))ă	 current = (c1 + c2) \ 2ăIF c1 = c2 OR current = c1 OR current = c2 GOTO getnextăă Paletteget c1, r1, g1, b1: Paletteget c2, r2, g2, b2ă  t = (ABS(c1 - c2) \ 8) * ((INP(64) MOD 3) - 1)ă  R = (r1 + r2) \ 2 + t: G = (g1 + g2) \ 2 + t: B = (b1 + b2) \ 2 + tă Pal current, R, G, Bă used(s) = CHR$(c1) + CHR$(current): s = s + 1ă used(s) = CHR$(current) + CHR$(c2): s = s + 1ăLOOP UNTIL s = 0ăPal 0, 0, 0, 0ăăEND SUBăăSUB Pal (A, R, G, B)ăOUT &H3C8, AăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăăEND SUBăăSUB Paletteget (A, R, G, B)ăOUT &H3C7, AăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB SetScreenmode (SM)ă'SM (ScreenMode) may be any one of the following:ă'3 = Text Modeă'&H100 = 640x400x256ă'&H101 = 640x480x256ă'&H102 = 800x600x16ă'&H103 = 800x600x256ă'&H104 = 1024x768x16ă'&H105 = 1024x768x256ă'ă'Interrupt converted to assembly code by Anders Olofsson.ăăasm$ = CHR$(&HB8) + MKI$(&H4F02)ăasm$ = asm$ + CHR$(&HBB) + MKI$(SM)ăasm$ = asm$ + CHR$(&HCD) + CHR$(&H10)ăasm$ = asm$ + CHR$(&HCB)ăăDEF SEG = VARSEG(asm$)ă CALL Absolute(SADD(asm$))ăDEF SEGăăEND SUBăăSUB Switchbank (NB%)ăă'DIM Registers AS RegtypeXă' Registers.AX = &H4F05ă' Registers.BX = 0ă' Registers.DX = NB%ă' CALL InterruptX(&H10, Registers, Registers)ă' Bank% = NB%ăă	ă	ă	 'Converted to Qbasic code...ăă       asm$ = CHR$(&HB8) + CHR$(5) + CHR$(&H4F)'MKI$(&H4F05)ăasm$ = asm$ + CHR$(&HBB) + MKI$(0)ăasm$ = asm$ + CHR$(&HBA) + CHR$(NB%) + CHR$(0)ăasm$ = asm$ + CHR$(&HCD) + CHR$(&H10)ăasm$ = asm$ + CHR$(&HCB)ăăDEF SEG = VARSEG(asm$): o = SADD(asm$): CALL Absolute(o): DEF SEGăăBank% = NB%ăăEND SUBăArthur Podobas                 SCROLLING TEXT USING GET/PUT   artur.podobas@swipnet.se       07-18-98 (18:53)       QB, QBasic, PDS        46   1412     SCROLL.BAS  'This is program that illustates very smooth Scrolling using the Get/Put functions.ă'Use it freely.ăăCLSăSCREEN 13ăă'init All Variablesăcheckiftimetochangeletter = 1ăDIM grab(1 TO 100)ănextletter = 1ăREAD text$ă'Init completedăăDOăănextletter$ = MID$(text$, nextletter, 1) 'get a new letter from textăIF checkiftimetochangeletter = 1 THEN LOCATE 2, 40: PRINT nextletter$ 'Only print the new letter onceăă'Cool Effect I putted in! check ită'FOR i = 5 TO 15ă'IF POINT(300, i) <> 0 THEN PSET (300, i), INT(RND * 10) + 20ă'IF POINT(200, i) <> 0 THEN PSET (200, i), INT(RND * 7) + 40ă'IF POINT(100, i) <> 0 THEN PSET (100, i), INT(RND * 7) + 50ă'IF POINT(20, i) <> 0 THEN PSET (20, i), 15ă'NEXT iăăFOR i = 1 TO 319             'move every row a step to leftăGET (i, 5)-(i, 15), grabăPUT (i - 1, 5), grab, PSETăNEXT iăăcheckiftimetochangeletter = checkiftimetochangeletter + 1ăăăăIF checkiftimetochangeletter = 9 THEN  'If its time to change then change increase the nextletter variable toăcheckiftimetochangeletter = 1          'Later get the new letterănextletter = nextletter + 1ăEND IFăăIF nextletter > LEN(text$) THEN nextletter = 1  'If we are at the end of the text then jump to BeginningăăLOOP WHILE INKEY$ = ""ăăăDATA "Hello!!!! This is a nice Scroller made by Artur Podobas. It's really easy made and can be made by anyone who understands it. Use it Freely    "ăTyler Barnes                   UNCHAINED MODE 13H ROUTINES    Tyler.Barnes@crcn.net          07-18-98 (00:38)       QB, QBasic, PDS        142  5847     UNCHAIN.BAS DECLARE SUB InitUnchain ()         'Initializes Library RoutinesăDECLARE SUB ActivePage (PageNum%)  'Selects page that we write to (0 - 3)ăDECLARE SUB VisiblePage (PageNum%) 'Selects page visible to user  (0 - 3)ăDECLARE SUB FlipPage ()            'Swaps active and visible pageăDECLARE SUB Pixel (X%, Y%, Col%)   'Plots a pixelăDECLARE FUNCTION Powers% (Bitval%) 'very limited. Internal use only.ăDIM SHARED XDivs%(0 TO 319)        'internal use only (look-up table)ăă'InitUnchain - Initializes the unchained mode 13h routines. Must be rună'              once before running any of the other routines in thisă'              package.ă'              Format: InitUnchaină'ActivePage  - Selects page that all PIXEL commands are written to. The modeă'              supports four video pages numbered from 0 to 3.ă'              Format: ActivePage 1ă'              Default: After InitUnchain is run, ActivePage is set to zeroă'VisiblePage - Selects the page visible on screen. Automatically synchronizesă'              the page changing to the screen's vertical retrace to avoidă'              flicker. The video mode supports four video pages numberedă'              from 0 to 3.ă'              Format: VisiblePage 1ă'              Default: After InitUnchain is run, VisiblePage is set to zeroă'FlipPage    - Swaps the active and visible pages. For example if theă'              visible page is 0 and the active page (page you've beenă'              writing to) is 1, it will swap it so visible is 1 and activeă'              is 0.ă'              Format: FlipPageă'Pixel       - Writes a pixel to the page selected with the ActivePageă'              command. Three parameters are given with this command.ă'              The first is the X coordinate which must be between 0 and 319ă'              The second is the Y coordinate which must be between 0 and 199ă'              The third is the pixel colour which must be between 0 and 255ă'              Format: Pixel 319,199,4ă'ă'Note: I don't really do much BASIC programming anymore, and just wrote thisă'      to refamiliarize myself with some of the vga registers. Because ofă'      this, the program hasn't been tested thoroughly and I've failed toă'      include routines to draw lines, circles, output text, etc.ă'      You'll have to write your own :) .. have fun.ă'ă'      Also.. I have some of the divisions and exponents and stuff ină'      precalculated data tables. Goes a LOT faster like that.. especiallyă'      when compiled. Also.. I haven't tested it, but if you want to changeă'      the color palette, I see no reason why QuickBasic's palette commandă'      wouldn't worked with this tweaked screen 13.ăă'Um, that's all for now....ăăSUB ActivePage (PageNum%)ăSHARED AP%ăAP% = PageNum%ăIF PageNum% > 3 OR PageNum% < 0 THEN ERROR 5ăSHARED PageVal&ăPNum& = PageNum%ăPageVal& = PNum& * 16000ăEND SUBăăSUB FlipPageăSHARED AP%, VP%ăA% = AP%: B% = VP%ăActivePage B%ăVisiblePage A%ăEND SUBăăSUB InitUnchainăSCREEN 13                   'screen mode 13hăOUT &H3C4, 4                'Sequencer Index 4 (sequencer index port)ăA% = INP(&H3C5)             'A%=current value at position 4 in sequencerăA% = A% AND &HFFF7          'Zero out bit#3 (bitval8) to unchainăOUT &H3C4, 4                'sequencer index 4ăOUT &H3C5, A%               'write new value to unchainăăOUT &H3C4, 2                'sequencer index 2 (color plane enable register)ăOUT &H3C5, &HFF             'sequencer data (enable all planes)ăDEF SEG = &HA000            'Video mapped hereăFOR I& = 0 TO 65535ăPOKE I&, 0                  'clear entire segmentăNEXT I&ăăOUT &H3D4, &H17ătest% = INP(&H3D5) OR 64ăOUT &H3D4, &H17ăOUT &H3D5, test%ăăOUT &H3D4, &H14ătest% = INP(&H3D5) AND &HFFBF '(FFFFh xor 64d)ăOUT &H3D4, &H14ăOUT &H3D5, test%ăăFOR I% = 0 TO 319             'Precalculates all possible X/4 answers for theăXDivs%(I%) = INT(I% / 4)      'PIXEL commandăNEXT I%ăăActivePage 0                  'Page 0 default for active pageăVisiblePage 0                 'Page 0 default for visible pageăăEND SUBăăSUB Pixel (X%, Y%, Col%)ăSHARED PageVal&ăSTATIC OldBit%, FirstTime%ăIF X% > 319 OR Y% > 199 THEN ERROR 5ăBitnum% = X% AND 3            '(X% mod 4 also works but slower)ăIF Bitnum% <> OldBit% OR FirstTime% = 0 THEN  'modify register only if neededăOUT &H3C4, 2                  'Index 2 GDC (Color plane enable register)ăOUT &H3C5, Powers%(Bitnum%)   'output bit value that we're modifyingăFirstTime% = 1                'Set flag to say we've set the CPE register b4ăOldBit% = Bitnum%             'Save our bitval for next timeăEND IFăDEF SEG = &HA000              'Video mapped hereăY& = (Y% * 80) + PageVal&     'convert y portion to linear, mod for actpageăPOKE Y& + XDivs%(X%), Col%  'complete conversion, write it to memă'Xdivs array is a data look-up table to convert X to X/4. Faster thană'calculating during pixel write.. uses quite a bit of memory, but mostă'people can probably spare ităEND SUBăăFUNCTION Powers% (Bitnum%)ăSELECT CASE Bitnum%ăCASE 0: Powers% = 1ăCASE 1: Powers% = 2ăCASE 2: Powers% = 4ăCASE 3: Powers% = 8ăEND SELECTă'This sub used instead of calculating exponents manually to improve speedă'Sort of a look up table to avoid one of QB's slowest routinesăEND FUNCTIONăăSUB VisiblePage (PageNum%)ăSHARED VP%ăVP% = PageNum%ăIF PageNum% > 3 OR PageNum% < 0 THEN ERROR 5ăăPNum& = PageNum%ăPageVal& = PNum& * 16000     'calculate offset val of 0,0ăWAIT &H3DA, 8, 8             'sync withăWAIT &H3DA, 8                'vertical retraceăOUT &H3D4, &HC               'high byte offset (CRTC index)ăOUT &H3D5, ((PageVal& AND &HFF00) \ 256) AND &HFFăOUT &H3D4, &HD               'low byte offset  (CRTC index)ăOUT &H3D5, PageVal& AND 255  'CRTC data portăEND SUBăThomas Ludwig                  FIREPRO VERSION 4              lycium@hotmail.com             07-21-98 (06:23)       QB, QBasic, PDS        415  7994     FIREPRO4.BAS'$DYNAMICăDEFINT A-ZăăCLS : RANDOMIZE TIMERăăCOLOR 15ăPRINT "FirePRO v4"ăPRINT "=-=-=-=-=-"ăCOLOR 8ăPRINT "Thomas Ludwig 21/7/98"ăPRINTăCOLOR 7ăPRINT "Well, I'm back once again with the constantly-evolving FirePRO series,"ăPRINT "this time with a MAJOR speed increase! I'm now using a fire buffer,"ăPRINT "which essentially helps to eliminate reading from the graphics card."ăPRINT "Unfortunately the buffer's a RAM pig (32 KB), but it's well worth it!"ăPRINT "Because of these speed increases, I can get rid of the horrid 'limiting"ăPRINT "line' that appeared just above the fire. This line is where I stopped"ăPRINT "calculating the fire (for speed's sake). It's gone now..."ăPRINTăPRINT "Press a key (if you like)."ăăDO: LOOP UNTIL INKEY$ <> ""ăăCLSăPRINT "Resolution..."ăPRINTăPRINT "1. 320x200 (default)"ăPRINT "2. 320x100"ăăDO: res$ = INKEY$: LOOP UNTIL res$ <> ""ăăCLSăăPRINT "Palette..."ăPRINTăPRINT "1. RealPal"ăPRINT "2. RedBluePal"ăPRINT "3. IcePal!!! (default)"ăPRINT "4. PsychaPal"ăăDO: pal$ = INKEY$: LOOP UNTIL pal$ <> ""ăăCLSăSCREEN 13ăăIF res$ <> "2" THEN GOTO NoResChangeăăOUT &H3D4, 9ăOUT &H3D5, 3ăăNoResChange:ăă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă'Precalc divide by 3 arraysă'Used ~31000 times every frame!!!ă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ănum& = 255 * 3ăDIM div3(num&) AS INTEGERăăFOR t% = 0 TO num&ă    div3(t%) = CINT(t% / 3)ăNEXTăă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă'Precalc divide by 4 arraysă'Used ~31000 times every frame!!!ă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ănum& = 255 * 4ăDIM div4(num&) AS INTEGERăăFOR t% = 0 TO num&ă    div4(t%) = CINT(t% / 4)ăNEXTăă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă'Precalc divide by 9 arraysă'Used ~31000 times every frame!!!ă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ănum& = 255 * 9ăDIM div9(num&) AS INTEGERăăFOR t% = 0 TO num&ă    div9(t%) = CINT(t% / 9)ăNEXTăă'=-=-=-=-=-=-=-=-ă'Precalc mem add.ă'=-=-=-=-=-=-=-=-ăDIM mem(319, 99) AS INTEGERăăFOR x% = 0 TO 319ăFOR y% = 0 TO 99ă    mem(x%, y%) = y% * 320 + x%ăNEXT y%ăNEXT x%ăă'=-=-=-=-=-=-=ă'Double bufferă'=-=-=-=-=-=-=ăDIM img(32320) AS INTEGERăă'=-=-=-=-=-=-=-=ă'PsychaPal arrayă'=-=-=-=-=-=-=-=ăDIM c(256, 3) AS INTEGERăă'=-=-=-=-=-=-=-=-=ă'Set up palette...ă'=-=-=-=-=-=-=-=-=ăIF pal$ = "1" THEN GOTO SpecialăIF pal$ = "2" THEN GOTO NormalăIF pal$ = "4" THEN GOTO Psy ELSE GOTO IceăăNormal:ăFOR t% = 0 TO 63ă    OUT &H3C8, t%ă    OUT &H3C9, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ăNEXTăăFOR t% = 64 TO 127ă    OUT &H3C8, t%ă    OUT &H3C9, 63 - t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ăNEXT t%ăăFOR t% = 128 TO 191ă    OUT &H3C8, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    OUT &H3C9, t% - 128ăNEXT t%ăăFOR t% = 192 TO 255ă    OUT &H3C8, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    OUT &H3C9, 191 - t%ăNEXT t%ăGOTO EndPalăăPsy:ăFOR t% = 0 TO 63ă    c(t%, 1) = 0ă    c(t%, 2) = t%ă    c(t%, 3) = t%ăă    c(t% + 64, 1) = INT(t% / 2)ă    c(t% + 64, 2) = 63 - t%ă    c(t% + 64, 3) = 63ăă    c(t% + 128, 1) = 31 + INT(t% / 2)ă    c(t% + 128, 2) = t%ă    c(t% + 128, 3) = 63ă               ă    c(t% + 192, 1) = 63 - t%ă    c(t% + 192, 2) = 63 - t%ă    c(t% + 192, 3) = 63 - t%ăNEXT t%ăăFOR t% = 1 TO 255ă    OUT &H3C8, t%ă    OUT &H3C9, c(t%, 1)ă    OUT &H3C9, c(t%, 2)ă    OUT &H3C9, c(t%, 3)ăNEXT t%ăGOTO EndPalăăIce:ăFOR t% = 1 TO 127ă    OUT &H3C8, t%ă    OUT &H3C9, 0ă    OUT &H3C9, 0ă    OUT &H3C9, t% \ 2ă    OUT &H3C8, t% + 127ă    OUT &H3C9, t% \ 2ă    OUT &H3C9, t% \ 2ă    OUT &H3C9, 63ăNEXT t%ăGOTO EndPalăăSpecial:ăFOR t% = 0 TO 63ă    OUT &H3C8, t%ă    OUT &H3C9, t%ă    OUT &H3C9, t% / 2ă    OUT &H3C9, 0ăNEXTăăFOR t% = 64 TO 127ă    OUT &H3C8, t%ă    OUT &H3C9, 63ă    OUT &H3C9, t% / 2 - 1ă    OUT &H3C9, 0ăNEXTăăFOR t% = 128 TO 191ă    OUT &H3C8, t%ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, t% / 2 + 31ăNEXTăăFOR t% = 192 TO 255ă    OUT &H3C8, t%ă    OUT &H3C9, 63ă    OUT &H3C9, 63ă    OUT &H3C9, 63ăNEXTăEndPal:ăă'=-=-=-=-=-=-=-=ă'Display paletteă'=-=-=-=-=-=-=-=ăFOR t% = 30 TO 285ă    LINE (t%, 0)-(t%, 0), t% - 30ăNEXT t%ăă'=-=-=-=-=-=-=-=-=-=ă'Half-screen mem addă'=-=-=-=-=-=-=-=-=-=ăIF res$ = "2" THEN DEF SEG = &HA000 ELSE DEF SEG = &HA7D0ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 40 TO 99  '40ăă    ym% = mem(x%, y%) '-= Used 4 times, calculated once - 300% saving!!! =-ă    ym2% = ym% - 320  '-= Used 3 times, calculated once - 200% saving!!! =-ăă    p% = img(ym%)ă    IF p% = 0 THEN GOTO SkipFlameă    p% = div4(p% + img(ym2%) + img(ym% + 1) + img(ym% - 1))ăă    IF p% < 3 THEN GOTO SkipFlameăă    c% = p% - 3 '-= Used twice =-ăă    img(ym2%) = c%ă    POKE (ym2%), c%ăăSkipFlame:ăNEXT y%ăNEXT x%ăăLOOP UNTIL INKEY$ <> ""ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 30 TO 99 '40ăă    ym% = mem(x%, y%) '-= Precalc =-ă    ym2% = ym% - 320  '-= Precalc... =-ă   ă    p% = div3(img(ym%) + img(ym% + 320) + img(ym% + 1))ăă    IF p% < 4 THEN img(ym%) = 0: GOTO SkipTrueăă    c% = p% - 3 '-= Also used twice =-ă  ă    img(ym2%) = c%ă    POKE (ym2%), c%ăăSkipTrue:ăNEXTăNEXTăăLOOP UNTIL INKEY$ <> ""ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 30 TO 98 '40ă    ă    ym% = mem(x%, y%) '-= Take a wild guess... =-ăă    IF x% > 0 AND x% < 319 THENă        p% = div4(img(ym% + 319) + img(ym% + 320) + img(ym% + 321) + img(ym% + 642)) - 3ă    ELSEIF x% = 0 THENă        p% = img(ym% + 1)ă    ELSEIF x% = 319 THENă        p% = img(ym% - 1)ă    END IFă   ă    IF p% < 0 THEN p% = 0ă   ă    img(ym%) = p%ă    POKE (ym%), p%ăăNEXT y%ăNEXT x%ăăLOOP UNTIL INKEY$ <> ""ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 35 TO 99 '40ăă    ym% = mem(x%, y%) '-= Precalc =-ă    ym2% = ym% - 320  '-= Not again! =-ă  ă    p% = div3(img(ym%) + img(ym% + 320) + img(ym2%))ăă    IF p% < 4 THEN img(ym%) = 0: GOTO SkipFreezeăă    c% = p% - 3 '-= Hmm, I wonder what this does? =-ă   ă    img(ym2%) = c%ă    POKE (ym2%), c%ăăSkipFreeze:ăNEXTăNEXTăăLOOP UNTIL INKEY$ <> ""ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 30 TO 99 '30ăă    ym% = mem(x%, y%) '-= Precalc =-ă    ym2% = ym% - 320  '-= Precalc (yawn) =-ă ă    p% = div3(img(ym% - 1) + img(ym2%) + img(ym% + 1))ăă    IF p% < 2 THEN img(ym%) = 0: GOTO SkipInfernoăă    c% = p% - 2 '-= Precalc ahoy... =-ă   ă    img(ym2%) = c%ă    POKE (ym2%), c%ăăSkipInferno:ăNEXTăNEXTăăLOOP UNTIL INKEY$ <> ""ăăDOăăFOR b% = 0 TO 319ă    IF INT(RND * 2) = 1 THEN img(31680 + b%) = 255 ELSE img(31680 + b%) = 0ăNEXT b%ăăFOR x% = 0 TO 319ăFOR y% = 35 TO 99 '47ăă    ym% = mem(x%, y%) '-= Precalc =-ă    ym2% = ym% - 320  '-= Precalc, yet again... you get the idea =-ăă    f% = img(ym%)ăă    IF f% < 1 THEN GOTO SkipOveră   ă    p% = div9(f% + img(ym% + 1) + img(ym% - 1) + img(ym% + 320) + img(ym2%) + img(ym% + 321) + img(ym% - 321) + img(ym% + 319) + img(ym - 319))ăă    IF p% < 3 THEN img(ym%) = 0: GOTO SkipOverăă    c% = p% - 2 '-= EVEN MORE precalc!!! =-ă   ă    img(ym2%) = c%ă    POKE (ym2%), c%ăăSkipOver:ăNEXTăNEXTăăLOOP UNTIL INKEY$ <> ""ăă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă'NO MORE PRECALC HERE!!! MWUHAHAHAHA!ă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăCLS : SCREEN 0ăWIDTH 80ăPALETTEăăCOLOR 15ăPRINT "FirePRO v4"ăPRINTăCOLOR 7ăPRINT "Comments, questions, hate mail, etc."ăCOLOR 9ăPRINT "lycium@hotmail.com"ăCOLOR 8ăPRINTăPRINT "Thomas Ludwig '98"ăDO: LOOP UNTIL INKEY$ <> ""ăSYSTEMăRichard Stanway                SIMPLE SPRITE/PAINT PROGRAM    rich@acorn.win-uk.com          07-27-98 (20:16)       QB, QBasic, PDS        213  3039     SCR13.BAS   SCREEN 13ăăPRINT "Please select you work area options now."ăăINPUT "FILENAME: ", filename$ăIF NOT filename$ = "" THEN GOTO loadafilegoddamnităăredo:ăăINPUT "X2: ", workx2ăINPUT "Y2: ", worky2ăăIF workx2 > 150 OR worky2 > 150 THEN BEEP: PRINT "150 pixels maximum": PRINT : GOTO redoăăCLSăhadesishere:ăăăăLINE (workx1, worky1)-(workx2, worky2), 10, Băx = INT(workx2 / 2 + workx1 / 2)ăy = INT(worky2 / 2 + worky1 / 2)ăăoldcol = 0ăcol = 15ăăDOăt$ = INKEY$ăăăIF t$ <> "" THENăăPSET (x, y), oldcolăăIF t$ = CHR$(0) + "H" THEN y = y - 1ăIF t$ = CHR$(0) + "P" THEN y = y + 1ăIF t$ = CHR$(0) + "K" THEN x = x - 1ăIF t$ = CHR$(0) + "M" THEN x = x + 1ăIF t$ = "t" THEN cons = NOT consăIF t$ = "c" THEN GOSUB changecolăIF t$ = "s" THEN GOSUB saveăIF t$ = "r" THEN GOSUB save: GOSUB resizeăIF t$ = CHR$(27) THEN GOSUB save: ENDăăoldcol = POINT(x, y)ăIF t$ = "e" THEN oldcol = 0ăIF t$ = " " OR cons = -1 THEN oldcol = colăăPSET (x, y), colăăEND IFăăăăLOOPăăăăchangecol:ăăoldx = xăoldy = yăoldoldcol = oldcolăă'OPEN "n:tmp.tmp" FOR OUTPUT AS #1ăă'WRITE #1, workx1, workx2, worky1, worky2ăă'FOR i% = workx1 + 1 TO workx2 - 1ă'FOR h% = worky1 + 1 TO worky2 - 1ă'o% = POINT(i%, h%)ă'WRITE #1, o%ă'NEXT h%ă'NEXT i%ă'ă'ă'CLOSEăăăăFOR i = 1 TO 255ăPSET (i, 140), iăNEXT iăăFOR i = 32 TO 103ăPSET (i, 141), iăNEXT iăăFOR i = 32 TO 103ăPSET (i, 142), i + 72ăNEXT iăăFOR i = 32 TO 103ăPSET (i, 143), i + 144ăNEXT iăăăăăBEEPăăIF oldpaly = 0 THEN oldpaly = 140ăIF oldpalx = 0 THEN oldpalx = colăăy = oldpalyăoldcol = colăx = oldpalxăăDOăt$ = INKEY$ăăăIF t$ <> "" THENăăPSET (x, y), oldcolăăIF t$ = CHR$(0) + "H" THEN y = y - 1ăIF t$ = CHR$(0) + "P" THEN y = y + 1ăIF t$ = CHR$(0) + "K" THEN x = x - 1ăIF t$ = CHR$(0) + "M" THEN x = x + 1ăIF t$ = "c" AND NOT POINT(x, y) = 0 THEN EXIT DOăăoldcol = POINT(x, y)ăLOCATE 19, 1: PRINT POINT(x, y); "  "ăăLINE (1, 180)-(20, 200), POINT(x, y), BFăăPSET (x, y), colăăăEND IFăăăăLOOPăăcol = POINT(x, y)ăăoldpalx = xăoldpaly = yăăx = oldxăy = oldyăoldcol = oldoldcolăăăBEEPăăRETURNăăăăloadafilegoddamnit:ăăCLSăăOPEN filename$ FOR APPEND AS #1ăIF LOF(1) < 2 THEN CLOSE #1: KILL filename$: GOTO redoăCLOSE #1ăăăOPEN filename$ FOR INPUT AS #1ăăINPUT #1, workx1, workx2, worky1, worky2ăăFOR i% = workx1 + 1 TO workx2 - 1ăFOR h% = worky1 + 1 TO worky2 - 1ăINPUT #1, g%ăPSET (i%, h%), g%ăNEXT h%ăNEXT i%ăăSOUND 2500, 1ăăCLOSEăăăGOTO hadesishereăăăsave:ăOPEN filename$ FOR OUTPUT AS #1ăăWRITE #1, workx1, workx2, worky1, worky2ăăFOR i% = workx1 + 1 TO workx2 - 1ăFOR h% = worky1 + 1 TO worky2 - 1ăo% = POINT(i%, h%)ăWRITE #1, o%ăNEXT h%ăNEXT i%ăăăCLOSEăBEEPăRETURNăăăăresize:ăLINE (workx1, worky1)-(workx2, worky2), 0, BăăLOCATE 15, 30: PRINT "OLD X2"; workx2ăLOCATE 16, 30: PRINT "OLD Y2"; worky2ăăLOCATE 18, 30: INPUT "NEW X2 ", workx2ăLOCATE 19, 30: INPUT "NEW Y2 ", worky2ăăăăGOSUB saveăCLSăGOSUB loadafilegoddamnităAnders Olofsson                MOVING PLASMA                  anders.olofsson@mail.bip.net   07-17-98 (21:02)       QB, QBasic, PDS        173  3870     MPLASMA.BAS 'ă'  Moving plasma, by Anders Olofsson 1998.ă'ă'      E-mail: anders.olofsson@mail.bip.netă'ă'-------------------------------------------------------ă'         ***  Compile it! - 10 times faster ***ă'ă'   Press space to change palette rotation directionă'   Press "P" to get a new paletteă'   Press "N" to get new plasmaă'ă'-------------------------------------------------------ăăDEFINT A-ZăDECLARE SUB CyclePalette (Dir%)ăDECLARE SUB Paletteget (A%, R%, G%, B%)ăDECLARE SUB MakeRandomPalette ()ăDECLARE SUB Pal (A%, R%, G%, B%)ăDECLARE SUB WriteString (Y%, x%, s$, C%)ăăCONST PaletteTimer = 30   ' Changes palette every .. second(s).ăăăă'-------------------------------------------------------ăăăSCREEN 13ăăDIM Sine(525) AS INTEGER, Cosine(405) AS INTEGERăăCurrentDir = 1ăăDEF SEG = &HA000ăăNewPattern:ăRad1! = (4 * ATN(1)) / (RND * 70 + 10)ăRad2! = (4 * ATN(1)) / (RND * 90 + 10)ăFOR x = 0 TO 520: Sine(x) = SIN(Rad1! * x) * 255: NEXTăFOR x = 0 TO 400: Cosine(x) = COS(Rad2! * x) * 255: NEXTăCurrent1 = RND * 200: Current3 = RND * 200ăCurrent2 = RND * 200: Current3 = RND * 200ăGOSUB ChangePaletteăC1 = RND * 4 + 1ăC2 = RND * 4 + 1ăăDOăCurrent1 = Current1 + C1ăCurrent2 = Current2 + C2ăIF Current1 >= 200 THEN C1 = -C1ăIF Current1 <= 0 THEN C1 = RND * 4 + 1: Current1 = 0ăIF Current2 >= 200 THEN C2 = -C2ăIF Current2 <= 0 THEN C2 = RND * 4 + 1: Current2 = 0ăăFOR Y = 0 TO 199ăFOR x = 0 TO 319 STEP 2ă  C = ABS((Sine(x + Current1) + Cosine(Y + Current2 \ 2) + Cosine(x \ 2) + Sine(Y * 2)) \ 2) \ 4ă  IF C <= 0 THEN C = 1ă  POKE 320& * Y + x, Că  POKE 320& * Y + x + 1, CăNEXTăNEXTăăPaletteCounter! = TIMERăă Keys$ = UCASE$(INKEY$)ă CyclePalette CurrentDiră IF Keys$ = " " AND CurrentDir = 2 THEN CurrentDir = 1: Keys$ = ""ă IF Keys$ = " " AND CurrentDir = 1 THEN CurrentDir = 2ă IF Keys$ = "P" THEN GOSUB ChangePalette: Keys$ = ""ă IF Keys$ = "N" THEN GOTO NewPatternă IF TIMER - PaletteCounter! > PaletteTimer THEN GOSUB ChangePaletteăLOOP UNTIL LEN(Keys$) AND Keys$ <> " "ăăFOR x = 0 TO 63                  'Fade oută FOR C = 0 TO 255ă  Paletteget C, R, G, Bă  IF R THEN R = R - 1ă  IF G THEN G = G - 1ă  IF B THEN B = B - 1ă  Pal C, R, G, Bă NEXTă WAIT &H3DA, 8: WAIT &H3DA, 8, 1ăNEXTăăSCREEN 12: SCREEN 0ăENDăăChangePalette:ăPaletteCounter! = TIMERăR = INP(64) \ 4: G = INP(64) \ 4: B = INP(64) \ 4ăPal 1, R, G, BăPal 255, B, R, GăMakeRandomPaletteăRETURNăăSUB CyclePalette (Dir)ăăIF Dir = 1 THENăFOR T = 2 TO 255ă Paletteget T, R, G, Bă Pal T - 1, R, G, BăNEXTăăPaletteget 1, R, G, BăPal 255, R, G, BăăELSEăăPaletteget 255, R, G, BăPal 1, R, G, BăăFOR T = 254 TO 1 STEP -1ă Paletteget T, R, G, Bă Pal T + 1, R, G, BăNEXTăăEND IFăăWAIT &H3DA, 8ăăEND SUBăăSUB MakeRandomPaletteăDIM used(0 TO 255) AS STRING * 2: used(0) = CHR$(1) + CHR$(255): s = 1ăăDOăgetnext: IF s = 0 THEN EXIT DOă         s = s - 1ă         C1 = ASC(used(s)): C2 = ASC(RIGHT$(used(s), 1))ă         Current = (C1 + C2) \ 2ăIF C1 = C2 OR Current = C1 OR Current = C2 GOTO getnextăă Paletteget C1, r1, g1, b1: Paletteget C2, r2, g2, b2ă  T = (ABS(C1 - C2) \ 8) * ((INP(64) MOD 3) - 1)ă  R = (r1 + r2) \ 2 + T: G = (g1 + g2) \ 2 + T: B = (b1 + b2) \ 2 + Tă Pal Current, R, G, Bă used(s) = CHR$(C1) + CHR$(Current): s = s + 1ă used(s) = CHR$(Current) + CHR$(C2): s = s + 1ăLOOP UNTIL s = 0ăPal 0, 0, 0, 0ăăEND SUBăăSUB Pal (A, R, G, B)ăOUT &H3C8, AăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăăEND SUBăăSUB Paletteget (A, R, G, B)ăOUT &H3C7, AăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB WriteString (Y, x, s$, C)ăMemloc = 80 * (Y - 1) + (x - 1)ăMemloc = Memloc * 2ăăDEF SEG = &HB800ă FOR T = 0 TO LEN(s$) - 1ă  POKE Memloc, ASC(MID$(s$, T + 1, 1))ă  POKE Memloc + 1, Că  Memloc = Memloc + 2ă NEXT TăDEF SEGăăEND SUBăDaniel Davies                  LENS FLARE ROUTINE             ia53@rapid.co.uk               08-07-98 (17:34)       QB, QBasic, PDS        838  55321    LENSF.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"LENSF.ZIP",4^6:Z&=41265:?STRING$(50,177);ăU"%up()%9%%%R-%&ZI,J%72XqL)%%%O.%%%/%%%%wj%firj.Sy'yALzv>BT]1M8]&ăU"x,dGTF<]KYn4f'MUZ<++3*6P-,wDoLz;FKOreR1n'j-vsHJmLr4n?uY=7?rj\lCăU"wQ\nfhl.?cDR)'buPp1B5?Tun8'xtc%/U/hhaj;kvB*?WLr2_./S]eAY4LNn(vBăU"5hnhMvu\.#v0vbj:$W&<#o#rLmq:VOn)rZktFc#1A?EJg/KbepE<)%;GJ'xJxC6ăU"7zOhb4t]D)13^.)F\+r,unX?QHKiAcu$x[\EZRG'M^)Twi60bZ?oh4vl=J&+Ky4ăU"fg/;xlhj<&.BfH=.3kvtsDHGR-WT?FsXCM/(\Rk]J)Iwk6J6PwTueiS+jS0LT,(ăU"+8CgO&Q$/lMb)d(I;>tB*,GzShCD8swoJ\,pcM8/:9jkG#F9MNL2/u.9x\>/5OtăU"Y&\f4ga+F-4)SA[GMH%Mf:$Hrpi4m9I=v,Ad>DXc<hgv4?<wa(i'8'C(]ck?:?[ăU";e'\1^j1EWB+HKP4%m+iH3/caTf955D$fh;JhUN:$Axm:a-OJMr$Ay)XNA[shUvăU"pneAFWf([EVEn%/GqF;9ViU/.Wl:?DP\%)iG)>b&=o%mm=+-rAD$k.m,dZm#PC)ăU"+CDgF%3P7^Yf?+R4-2un=9Hneco*4$4PbJU#a0druLi<rqk[ah=sa)gSXB9*qC8ăU"+/nuID:*L7U-bq+S%Cz,VxlZR/iUYs6MpA\Pn^I+#DKfa#s75Si&IP?yX/w/h^/ăU"'pTSb5;Hm5bMo/71l$);L-BLsy'#qqbjd4?>FNWRr_PDhX%5iC4=P$_F]%_T_VoăU"C.NmuUM:sn#3KB20V:9C?1]OWl(5l3e7m>5Q1N36gSi>D_a3WeU0\ig<$g._e#YăU"6y9s<U_HS=INYFA,bOR.(/2d6:v(stL^]YB9r-Jbo[A1#*O\tf0\B1Y=Njh\%G]ăU"dhLc$JC5T,b_)6G#:KA^N,Dgg:k7Ha%CJ[&tG20[c73J+\mcOgB2C][6Jh4s%zFăU"\/770u2?rU^J>YRo2KiNuE.x0(F'-k:kf[UC4IB7ft]QEzWd_D;;gaa\M7ip1MPăU"Kd_2.:n[slZ)6<-ak5o(<vc\_\UtDsg'v$$pnKWYyHh>AIyxV[/X4<.XMtwTU5făU"[39n0GBW&\Iqg6ag+N)r#060u/&\90,oV.h2gScwd2Egp#aA]teQoKSTrRxq&+3ăU"22d2]q/siqiy#PG-KImCwRAZ/V;xH4\L+,i-V.8IH.u_#W4hecEuTWHo)(r:/D;ăU"EMso5l-$%5.]ob3lX+fvcb<Y-.]d2WIMPx-$W(A)lS0-mfsW-gSk]Ea:-5EYl#OăU"3QV.[hrFf4WI_-P(Pt.10_#LT%eu\rfNQ-xDEfr'/E%/z/4-s5,$cbl<FB5#UMGăU"=&FTp_ZbqZhr-NWp?pY;dC)eV$bofka(Xvu]iRFE$1uTc%o\7$_<0U,C&y38W<0ăU"sdMKfJJ1SLio-<cgIa\EFH>_KzCps'#^\S/w%,up(%)9%%#%-%u'6+J6mYu'C%;ăU"%%%%e%%.%%%%q%jsxX#Swf&N&*V1TTo'\^BFne+INmoMqI2vkY,Fp?6pvD'n3UXăU"Pae3lj]O+#2#k+D[1+B9Q0Xkj_j*cXr8N8tpsngg&#CCCQjjGNuxqmmHA$&Vlw_ăU"]xR:Du.p\C7vln2$aM[JVn&\t))aa97mWLr=f%IaU.hKgOTmT59=bn9Dq]S)2YMăU"vv6K3A.CC->$XDcg8k:>\35%M67#>Q;=H$kvJ7YpXNdrJa+qQ?X[(Mu1533EpR'ăU"&E1\kbp4NBXSci5r6YtvNF]:pC67pr),fARA^r:ZH%lwfI(MP]d*<v-]N,-+l7>ăU"P).2WpDh'Lrx,g2iudm_c\4_Q]<B,T#84+cB&F3oKJ&uxu%Ic>.Z;m[1D;+L<UrăU"BDW1uMPX7kngEmZ4Ti>9BwHXlN9jK:.A%)%r-;Dn>;T*R-D*rA+h$hI1Y-W.]HtăU"i9EVX&n02cXCHVwnXq*b'&.#)3VgOMH7qR2T';R>R;^m_y-Dia./&PUoIg'nO8PăU"4WRRd1tKPg)rP\X]'dHZmJgItMTpuOsTB,BPF?gR15J1)#3^E%N5Q5kYv*6_&fLăU"2h2#v4Qd=C/R$%oLZ8TgClS6oDYvXhQj1IO8%*:I;))zJIavke7Q:0^n.fMmUC^ăU"_aaMHaGIDFRT]G:tco+$vCe9<fI40i6Tf-0L+zNq:f-2SmQMF]*ey:&MqlTqwfdăU"]Od.*j8H=jc>T%h+'3<+\0=1\dfYW;J7]WQtM0TdbEi9=(-1'NR)v9yNio'?]t6ăU"&Cocm&#f^#saV_FT#]v[fp]sf=Zn[+<JP?+g]*\#At<?rZEK=.IL+5J+2%5n7(1ăU"r7rG;OMs,8AMNsP+wXHLtFvFrpWd1&G53l4VG;aehs&T$nKc<&htf'^3g6meJiQăU"$&$A-'C?a%1m%d;#ri/x\\bU[3:g6',EZ/]hV]5j1</g(\*BIxKWB5.)t>/TNg7ăU"S[\%&d*6HY4IV1K(7fs%b:VTVlu&l08VOkbIbG;X6h7&IY=rkuj3+D,vn%qc(/VăU"(;jIn],Qt/k8+((+f=ICCkQ'IL(*?o+N>5&9D,pd06b8bJza=^nV,d4ov5a\rbKăU"2UG=lR_BLYNY0+szW1t#aQsr0TFk92iH7KVWF%%*o34f:Zw%)[jdU8om-D'lL0<ăU"hC7bHm&,hL#]vZ$NIp06FCyOAY1Aw_B+dF+/u.A[N/5*/(RW'm-g(dQ4%ZU$';&ăU"Z]XV,W5a9Uf#_A;KV#JDEZjivMtW4H_-dn[(MI$5H)hdettYxr8u5Ufcm7QBk[aăU",l9kYfiM&1])49AU;^SO*Fu9inp/NxaObfRv9HS9,&B)L'?mJ,a(<$qp0YK^z(QăU"QZ^0&6x$N0g5ae463'Y9<+_\BW+34i#hD+0,n^uo_P?-;415Zps:wB_B.YwH4FoăU"0YkiEe1VC-[Q_(-Lqabj_vP0PE\1%K];Q>'wy93Sj+e/6')P(GWOJOM/*mEQ:lUăU"8zZJeFq5jt%Y<[ahoYVt1:dmR'au;;XFH0N95HdM>Rm4UZ0V;Vr4biP0/)US4)jăU"y%%cp'CMOEOI'aQG.(NTEhOkPk7*<iW<S0W\uro'd%(c1l$DGzZ3CHdCkavq\p$ăU"u',RTYrf$:NWYXD5wq?SfiTK,GV?r%fljCUqloR\5/_>,kB#c60$]WjSB4T_hfQăU"E:1W.R&?HK<Q=s6*2&&s;#Oqro?eqFO434LbwdQVhOYC6&OZ=51,K^^ZI5-S\63ăU"5hkTRTVLFz6_VzrT^pKZf/pQb+WRR\v]A5YZ\dRGL)$,vTrqgeJKrFuNTq5V5'7ăU"m>K2/'5R%ZkG'\G/*NK]:b,_C/.^K#-D9^eQQbZ6tZ?WAn;JMNOMbE9vKR(/epYăU"Y9a\so3wXQUraz'8a]VGXFJ1dsUE(HuaH/j7*$O(R0b0c\<7$iG9*GgP0,(GmNWăU"AbeJ8.UE=HFKq+,ouAl$[WhSO>q*ZVL%5OdEpjm*>>f&AVB61,O>xjqI;)[$;FRăU"cFFnl6qjn#-Ce%C<OM2sHc5]3T,m0i0]r?p2H8&CgjPZhMhu<7;U^iT;U8'pJ'oăU"GT]>9tI#L>9)[mWM[5$Tjpc<lm:J%phleMYm&,?tWb;sLPVp5>T39bX8B*p[Tm#ăU"ee-HYT?S<OxL,+pY)P49+EX%%x5l&T6%B/spCYv9B1Umkn#50jji-4*TZkxK9htăU"b^OK[:2J&FB$(rHOT^=DLnB5kQgA[jY\T,7eUkcfP\.9^Efj))Q,R_o$hwCOiItăU"S&gb,Q8unKw5BUWPKdK^OCCnYbrN\,/%V2^]_j7IkGUXdgl[FR:A9/W<O-Aig0năU"Sc:3L;R^d#5eDIdG-%\(Cz=Lp)6_iMMhBNB/;nO&%'[J]ge]H,Ag3hSS4S22pFRăU"hi6>nj?;-h5b+qw[TEc,WApRlZxF-uI^gAH(61*h3w6=NCaK90WWDS45mG'Om3căU"1rIE(cAOM/Ma,It?kRA.jWR=T]w[NbRHYQN/8*irW-eAXF^RIRoWQ2\&iTi0;1/ăU"32K&=4uUPB3HqV%E;Vkf[M=b44j8\M_W)Y3%%p47iROi95m.XIh0):O1Gm&E*K7ăU"lpJ/ifpKdyT-%ilqy0=&]W7cExQ7VZf-CA6uDE^^T*dErG9DbL:%Od&zm1[xF4'ăU":t-(<126:]0S_jefmsQx,vIo-(QgoI4R,sSTR5'5N\0n1.gWRI,PK/XRc*tG&L8ăU">RO1X3h+;NSB\grhAflL=h:]axS?>Xin/0g5EXtPl8aA+B/'Q6bp8K.XEr06Zj6ăU"T:73ZRX&08:Qkitn\6$&lNFjqCnt#t<6W:j7H2CHKS9[e+=p4^,X4#qY?,Ts>)eăU"hm<C=:6-8QttIQ+uoeZ(/:IQ\F9ky;\-bwtGa93$8o7*ZdTollD5%P8)V&14ntTăU"89$ZQTK+_r.9n2e-/[&]g=&VwO)P3EOJ6VAaP6]88sPY86HVheUVpWw'hNkPhaNăU"i92*:G$uei(Q6hib2]-n]l(MDuHep4<J?3NY^nK<l:X'WaLJ.xd2*]VdgI&M7m3ăU"Y.K$H0S);p&A41XZYDndD]\65TKisgUm<mer#G6l#K_KP-V:WkGPE\><2+];3=AăU"/M\GN(1-198(o4Dv*i>bBL%d.5-K6WX#TefRU-/>c(:2Cq_9D*TmHYKi7nRgSGmăU":4'R,cDI8GkUH^w(X'WYRX%Hm?q^EFr*SUH6UaO;Nb3HpC6#?v8p1uR/a_%QTqcăU"5$LU1Gh^XB<k[#s*P+(;jR-%E&ILgE;oiSKwsJfJE-$\4ZYamZeuPojbXM)\vkyăU"M%8m>5%9V%l7:6Ta(^lQTLD=z<]'$BtItdYAjMrISubA]AcZ'nT5EtOte389FLLăU"D[UKjfpd=xYZ4-oN:EXQ;b4GF^mYqkFA^W3&]1mcK%6lxSD:tb[u\D2hr9UT\H^ăU"UU<K*-oM7NCWu#6MhGLjLuwi8$c/$i:G$g:44#vsshdiV][PJ^^Tgi/Q8I%$#%?ăU"9[^Djv49pT-2IzA'VbxT&-37tfm^g'oG50Ta5;6k3KR'lQ^%wdrjCLp)_F[I7QaăU"ai:V,\v?A9yB>+2K_r[omEZnJS\<:,$rFTPpOvUdg&YQV8Qeo(n0p2DKEh+y236ăU"*Jc:Y&?i'%L*7#n$]S4XrX^:w>,RON-P2Kc=jVG3].H-9&;97cJ3w3Q1QMUn/(tăU">Y8.z4NR:;I'91///^i/+phH,;,>\;$=lY^([:#+feWU*fIRR,CGV,K=09?;B-HăU"i$HYCf;wOUpK/MNlsw:$8XQK?6kvR6Vap_>d$Tj-EqG+^FK6r._9JqU\W5Iei2ZăU">VL](j]X8cK_)c7CUQ(?0mDVYH*q-LARR[tIX-Xh-%8Dv%HWX0:JY&adf9lIOsaăU"\DQU0pXp/mG3GYi(?NG^irL=q.:GL*M^2/?>RG?sYI<9*TEte%DLPlN6:7LdT0wăU"L-SHlWO(+Wg,wXw)S^/smLA(lTv&K6/+6n#\DyZm6jsH3rup9POZJeocQTuqiRMăU">/sQ=6P6?0D05D5s]$Vn1i40N2*jcioxZD])Fh)uL>Wp&quW#dR3ssq7=qN%k#TăU"qFiF\VS#\YzlX]Gowze?EWYdCNKeEbrj/*qNS-RW3mvrqOgmXq\0wpXN\0LZrweăU"N5(x/FGP8qF3#p4_9_:fT90HjX_RQoq1/niWcKx0vO,xrGF3wleig)&m#d'Dhm)ăU"'9%:q5\8Oc,.s$wuNuV>)NLDr4#<S9d1&\B%-$M[-idt7QF#1APBNX;p8JNYyz8ăU"PQvwJ_cHb*7ri&79x_o<ci3Z(ik,e&;ur)P9jjuh.zl3mf6Mm&naGX(sRCt(&XtăU")=%3/o$5wxG=\?+/jY2tp[-MH9riv=Wqip'qCmsv\NBiBwNK#$o\pvsljAol.W&ăU"05c7=u38KmK#5W,G.bAX'#k\k:[bqB2C/P#Mg5Me*yqJ8i,w(<+NGdhKsNL>43(ăU"gah4OxE>+k_,da-Ep(u$0b4wFjm#?N6g6PV<DKftoa%wzj9JIk[ZM.F_YNnJ_eRăU"$Us=Vwv8#LEy8mH05&Zp4Itk19D[eN:Np&.v&M*,4auorTVxQZw-ESLMZuiuN-găU"6p'x^=Gtv_p(KLb%uY<S7pI9#_Crmu:Qhw7]xDzjb$c4JqG$$*AV5q]*RK>D33;ăU"o)GOA+D'I2/ULyOIZ7t49:R%YSfPz3yIaSPB6OPYrU=+H[l+::Ly;OaOln%E2s%ăU"QqUzM.Jb(thhIY3.k:yh.?N#H#isrJ^CL(8;^tKEfvCSZa<BHp(]:Ug3votO>>văU"nsPrxP*s^nBhr=TIkrEf\p]/jLY*+sQa7-M:,WWh#=VQ%_fgg\?Q4'qMd5IrJRjăU"d-yU7yw_ojje&?i2vGh2?=u_Trr7AnfB;eh'K*cw\?I2s3.yk4/e>R<vxLSMa\zăU"KGHiWWZ;*Lo&hL5m7cCqqU&:q0^yNkLTky>+RobY;gu3dIw*l=d]A>dt1N<8PQgăU"'N-vgaOjkn:Ld?9gR;wou=YWY[fqMy7KuM:<2'novu&>Ul;3S#-uO*)INcve9n8ăU"#2PYTsN.rPb^3oV9.EM[?l7v/fLI%89a\&fS9U_SVOo,6HqZ'oq^e[gOe0/kva2ăU"_m)4bllqs)\$MT<hFT+%]-;5s9.tuQDotrXiscVs3cE3MjinDF.-(CB:QXJRDuXăU"o8G9vl'gfJqvf5qvV?<uu\YK6d=JKw'm+I-2:CZPt3wSx*Tv[Vnvs-5a%8gcxO)ăU"$:wz:a0H[tfPaE%W88wx;sf5cN3f#-6Pt1bkVirkjQsn&sxpdo;j;8(An>eQQLbăU"^u-De]DkPxAW6lhySCM9SFdd/Cl^5Exd*>bX-+oqV(>rSxt#G3X/:'KEc0EVEViăU"bjuv/f1OK8p*clj-3F4UA4H0$(\+1)t5UCaCM)?Wf8iX_CO/X#M)lW2T.ZcZc#MăU"TWY#PZGKc<%%n6nBn%W3)ma-3vF*5NiFddV5Ce7/VOD8pI5>01'*Z1%el\Z--DoăU"r&\PDn/R;_hRBTDxJW&vk5a;$)w9feGa?;F$:F&[CL:f?UwaU>aZFjjR*M'6t(=ăU"5AYco(6\;t<pG)'kZ:qQQhsleY66miKwJUvuwtbq=cv&R)UAQd'GO?qY2Fhw3/VăU"gdkH1gxG_l\QF&e++m\1[JYy'doe:^UfX$+,K2MQ.Cti9.2kFZ2w;0iM$R9BIC#ăU">)9Ct)KkjZqB6gPNZh&=VbwM[$V+n1gKN5Xt0B=ODEjmAN>1G7DCGZOmDlg4kmyăU"W;(r[7HAj#0$rG/iFsFD,[1ccB&+%1UC(NU]?,Nj](D*T[%ZIsZ<Z^YnNkPs8hrăU"9&M1=P(sZBe4Qor?^uQ$jr>X<\_a1%=TFZtbQPNP,]0C+YbgWb(U$'ru8t9luMlăU"EhvdOq.udB8WYHHM:olr>mDrT1ZNELh)#1OWTCf=]I#rO4=_IB]EYxSl;XplC=eăU"\+p:V3QYfdFCd]AC5nE#[AGq(k^KWqpy[VEC00#)is^x<3.LhrGdU;V\uCDiYc.ăU",C?\E:8PEH,+H=fkN8p\)3*gTv5,ha=BQIk?^]0AJ?nfZUxw5TwtEL)Nf)YS799ăU"qfq,B8lv:C6Uszv=ZS,Bm0keUt9<BUy-Y[+YHGKv/qPp9pUu7GySN:iHPg5i[m'ăU"6jAsFQlu9\tq\K$^o5^p[b4(YY9rc_ao50wxSB%a.I8Ly?2mSotl>iEUeZ6bg?2ăU"-78Cp4]u8a:1HksB9\?\ulu$T1^74+MGpY4Ie3l2#EF=1rmE4rujs3c.3aRGtB3ăU"%FB\*;L[7Xt3_rhhUqLNu:C8_0=s[t7336iN:5Yx=/Pi_^>7zU?AG_t+,j)hRjYăU"K2F&_VNDCQo)>:pYBB?W=CTGO9=W5uLME:OE'YN7DU1x:LZ>Q_u0(o<qvZx/=]năU"+?h76$.a+H?]?6hxd[r.L.m1XfkawBqRLDoq.-2;?4U;7;cNcZVO0[7Y=9d#dgmăU"nzNkI/Y>Hq*T5).8Pk11/n,s4N6X3'l?U0?xwRK'/i_(&Ck$\R=8h&8zA4ut<8CăU".VZ:uFmlA[892YQU51eN'u]9$ay1\L<N/=(MF+Hsmz-e<jY=-MuTBP0Y2Q5FN;jăU"-1*RV(wNktl=a$e4#J74t7k_f^#f<dVPjD(JwbA8d7l[e-diVMZwE?AcktDb^R+ăU"Kig1K[Bh=lU8nuqLJxhHXNUsqgQ_;(az>K*i8'Ccl)Y^q,c4<+6)l_Wq98rb8DaăU"^<RB_aAHG^H#r$=vUB_T^]o4I7)iW'&5iB1m?<AIj.Q&[<kjFI,-RIM]#Wo?;5păU"R]IH>ebuJ<lr04M$<B,->60+=-KM$?]dS'8E&]j2<Y3YWi#km1H%9%/mUAV^Hn1ăU"$.eDD[JcEhKQ(X$lYAzl/oW>GhX$.om^W[rBo&&v9fD^3/(14[.-Com1=T'ka=#ăU"i#/GWjs#KeC0KSaYo2?3>E2E]'c0JibzT?#XN=(HDfeA;+f$x?yEZ<N5P$\bne\ăU"/oO9(.8.L>s()(+iI-W6S5NhW^4*IXGuv8Qt_F:q79hj'-)HKta>924=wTM'iW1ăU"Bh)MqXp_<Wt9jy44tFPWenO.OXl7XJqB(pmvR:M*QgiRx525V6jM,W+brhB5>PnăU">tTQx^XGr2LnkYKSu$=khTDIB:aP=%Wu80DU;6X^3,<+^bOAj5^i;C#'A/*LuATăU"cV5x4XdW9b7gM0f8G*hq.'nR=DHvu^o64H8JZnK1+a(AnBGdawa^Ht%O%W+7F&tăU"(-=_^fln,xLxf5&?2X'9TVtajkg^'-rs>M[w<kz09$h&;//Si?*Po/&^JfjD2lrăU"st5r[8TKD>D]HTQZW+=LCn%mSHZ^1R,zfmJ-Snm*O.D9lsVvPb.H#1$06']OCeZăU"+)Q<neSuheG8x*Yll2wJW=ew4BEejx9MANNNeM,e#++hjg^IW=sEkA&)t+u(h$wăU"]0[j:GJI59b*-Z^lLjrn:_5l1pHrHsk,Mnm-*xXSP9h[-&Hp]GDttE$vJGk#h.eăU"6XxQ8'x4up%()9%%%%-%,p6+Jt1sX#%z5%%%%e%%%.%%%%qjsx%WSwfk&f*rn&?ăU"T+L;dHcU>73jM577I3g=u-(3OH3_ww-CY;kOItNxh(,E0K^NpkbOYIH6:(b:>hTăU"OWr9Y&N'yk,n4f7xc^x+c^xc]^xc^jxwz>Zm\Lzl%vV=cm,+x&w?-w^,-\]H^LdăU"1.3(:(S38=;$*gfYX(uSGrJ0fX%M-Bf,*%E[tjFZ)uTfi4EN9V>5=ujZgUpB<[văU"R[4lVZA4BVC4KPHU=f-D^)r_;%0Kg'CGJkDf2>T-3Y?D9V8ohL*M8%d5).O)uMnăU"44m?_,;3>%ixr2K0i_gBsBU4^^4UGJ/'Q=mIQ;\S7h&8tt&:I9Zm*qUNL<Ev-D4ăU":%0e]U81Ihqw%EIn5.i7Zlo<f8HrdAQ&L;,R^r<VLdn6la:dmQ$=#xyKj6DJHhJăU"7_jpLm+&0lDdESu%_FnG^<l#1,VF%&IM7t_aOr$nhGD+AkFQ*53kC[SlG*G%)YeăU"[=U[YhTYF_DDCNMQEZx1,+M+ATRoE+s&ZMoG6H*oh,U;8vV?RT8ZP\Y2;K>/]/kăU"C.e:dJ'uB])va%::n.+iLYz(z3n9&_/>WL>^SK+CV.#:D1urtzV,^X4=AC8YS)%ăU"^H&pth&^bbkC7gHY6Lb3=W7RTHB+Q8;CPG8.)WP0tAKS4M,O[>tD1v7#5f68/e:ăU"3n*wAc?st$,juiwgw?w7xU%=1DluLR\>:[.Mod*_b;g7$oH3^EQ*KW<T_AAQ[vfăU"PD[Zn3_HjqyseX4dHVtYRTdzuDl,\r\bLGrr4pg/MUiqFk<h$dPf'_[NQ?kQrU_ăU"]4[WD4s%Wgm++;vWDjp*X/d3n;nbfxwVqBM=+Zp?$J\k2F-(R__m_c4cdt;^<\%ăU"nwk(*iG7f:R^VP5R+NX$7BS9YbwmRaj^HsfMc<NjGGFWV8.j64n)jFxD5MVtA.)ăU"Yzh.^7sT'kPb$0(#z>[nFp#hMk^<5WDGBKOuI,QY'SjUG#xM;T5Ip8VB7dd99fZăU"CJ1zU*L#0'4ILnaydUO.o]oG_6:21E(R,X>'r]?H&A=j_h*0b2p,'74iUCOj<4DăU"x#$.$U+A0Zp/DiJy-+$h0YIs%PU1LgmY%']N444W0r(L9.O+qGe=GM6(LY9YGl6ăU"FD>T83n]6qKQjL1GqHEIq^we*q6Pb+SJfr6_53,_4#FRm9>x7Vclcn6lS%jYg&+ăU"OC35Gee\']FU=fM$zL0f20yIKT?dllRB8kB-&(69Bhg([jnx19dquC*Q4wF?]>eăU"t&DTFVrZwCSMz_(:c\#HtM0<3H2+,oMQ>;g,<ge5dHx[Esz4lBlFb0,2yX;&(WLăU"_r=fVLP[D-y;U9dGOg+koOtES$05b:<jA1i/^)VKS$B3)P&+aA$sJ>]Uvll%+g7ăU"r<0l]&kn[+>)_A1?_#a'rG]-Lfqigh6GtmVtHSjFsgIhLPuX'Z9d+(NWO>U-%d4ăU"8mIR,kZ^P#z3LE,8i:x/qMc]\P,ohT_JO>wCX[#iaQ/6NIIbB,9JkevbC6C0&J\ăU"%b8N<1Fp*Qr^f^ckt'M^)Dh+<l^/D[]3]&0.51GJJ';.%/O#Q+rqoHNotIVr>#qăU"LuS*WIa%HGQN5:B;IQ*9pNWmWGCS$:TOy7'EAunCeE)y<7L1:7Dg0(a'M:uPml,ăU"vb<qZAX[>a;is]%_N.a%F4E'-Ih]G.wnhE#JOB'o'ngtt$bbN?lv1DKW#&em7i(ăU"Olh/my4T<Pv4<X$DR,/WUEd9%F-Z<.Wtkmjp%KpH.XbwAzgVf.shb*1M?+QujLrăU"JDn-bP8)X3MVz\\bNbqzW'>A>4\GF4(MO^ym6Vf^7t?l.Ch;KLUtw96DmwNuN$jăU"NF(C/O078UTfC;DVl_$HANC.4+'JU.pYF;IRjyq]b=:ue/L'(N;F,uvV(i&.:%<ăU"S30%+;:EgLu6+;_qX3IdWIB9a=KId3&Gdx5tc_xo0(39/bnHGXfx/-pARC)xpYlăU"$MjTfzZ;B*^>RGBWAHREp&Y1VumM/ks(%n>tSfH#i9sEq](NZ.<_aIAq/1EcEsYăU"Jl4a+1Fe)NCODHDKWcV1T[t>h-=K4Hh/Y\HFd2Ma7t27KZ'kofKYvM?S$<j4x_(ăU"/40ro5#T#%_DI<SNY[A*qoqU6b$eeFdkq\284bwz''IL<*s-:WPAmIX(jGcFTXRăU"D\*(Amu'n)C2sufj5NBIutX<'-k\*i#H4JoicuV(H4DRV?P4L[nYVeo6'/I<*KfăU"(TkqXDqAVIL]<8H.Vp$iuk^7#8N&(L%Hb4vm5&NvZLtbT&oW9;lo2;DetEGb+gLăU"<3.6>-yCL^\VfTOfHsEdxG0rdK%d+m4kM+xM?p$l9T7Mp=EI*QfQ=57<Bp3v+%^ăU"um14<&iE?*W.CD<<#]%onp,t#YNpK)e[h:/+;N(KUD]QfwwBk5?/*;Sh1CK,zYhăU";[',m^fVsN/H(iYTa*6sDRwNIS0sS.]R3&%,jtg]d_i_tdcJ0I5EgOIAF%(Z]/>ăU"<fJ%]%3&_/,;X\UOdUu7CL1O,2^r+vmR4Anm=([=wev<iIwu,eQA6*RAf+;)qhiăU"/tD9t^W*9.QBLDz7OhZH<idi8L_M]dt9fDBC=IkieS1/trvJQ9,V?Pk85Frs;UfăU"t:a633;XUxX.06dH%Pd:q'_=lbGuMNj0K[y]&TMnx19(Q]XWbfa*d+d=uCuaq4IăU"=f:nj2_Y=X#q_4ripn*/Jg#7H;8YJa]VNluao\8Rnbx9&Ny*Xm*-9L6t2YWLEC0ăU"E$l>XYbFu=;=THsL;\FZh=2eHZ/4:K8o;4?Ad'Tf$?p#n7Ot(]^66Yf&/NvU)_iăU"Y*6>El_7X:9mAuwhqUb*i8QaPwbY8r/-Y^cYdinN&rxEwsvIYZvxOt.Kf8m?ck8ăU"\wrvu=.re#-fHe4?Mb(7tN(q:RMf,OmdaT&l;vvWSO4pnj6DJ$^4Bj_-Yw*a3/tăU"uvC_MEQldq^$eJZ$Bi&[nMojFxee.3-iOvw(uL(SvnBF:1vmWA(FB?<uMf2A95DăU"&wdI^*US5dMz*VH#2O?k_xfCnN+7NK^4$8[sQbFPpv_(7_h'u*w\K5a\ct4.\>zăU"w(VZh0<73v(2KGK5^N%y(TY'g7gQl*&0w>^%<mGS$ZeH'4*2_sg=(1U9U%mww'văU"qg'O5pvRcL6?5sbms8X/5WNaeqfs9T6=a\d-SVKxEKFI-H7]r([#$<F<*-J^4KtăU"fo(VwsP#AN<6z:g)d'_:O4%O>-/4'VBv'3m,>S2>ROE.Kj%avPftt<4KRD^/CAhăU"Hqkwx+K0xKgb]qgn1Z7CB1?IRP92GM_p&FE_c_IOmN36bvnnvI_L5'QZCmep\<'ăU"iF&B&OyBd/,B%Y.+oOcD<);nOiL9t6Wc]k^:d&l>RtJ=)=<>f%:-_U=aD;2OAp^ăU"EBCM*$c?t0tZ2Bqj<YRgDE3Fn<>km_tsU&E96tDTK75p8do:&avsNi&Bto40&H+ăU"mD.j%8QPlj,wtD>,3nI3Jepe/)r8Ld&HN4,[xaqsOZ-_^uDIkRwAqrjbfJ]dT*\ăU"?QCW.gq]32&grJgJ-YQ)V*Ms3GTr(mmRMCjlej50ep/7uIf5Nkutunu4(6MN;%OăU"U,HHh8-:Suj=pI.D_BK(E3(%V\-[6-seoF+#I2SrXc[n?x#H8-'UBv=%4D/Av8lăU";j>C9i<B=poM_^^lOKMX(30qDGi;SuvRioB)v;Y]s-'x[$21i-Pr8LM7\rj3J1făU"z'a1C.4em<Q2V>IV>ONZ.(K/)F_8ft\\Z(=:]aX5KVGXu(s&<mANp_GZbYS]5.=ăU"r/)?D_I)WM0V'PAw4I;LR;:J[Jxkp%^Yr)Lvzx0>Glr<6%[d1NOL4mb=xjt)nYuăEND SUBăSUB V2ăU"&5VQpCWdpSQv)\+S<.*=IiecsS/+,B?81hYB8MWnAPV-I+/bsm-7GFV5LgTK*JGăU"_n3^B[wby.sh-_vBf2Of69jKY5v?b0C)m7rxv:uTkAVzE?^WPvIW-i>a?l7<wrTăU"N,Q^j$(^Yp.y9;Z42+NJAbiCcI<4grWeD*OgiLn]xh:WDY19;_J:<,P#hs(TPI'ăU"_JREGl<v2QD?_X)&)o/>I>cdtL_Fbv0u?jsu3V\%U[PT%9R%SaRo*1DklNW;K:băU"=PP=WH9b.ipNYkV?bsR<qW\KJ\iJLW;4vX.\xH-0?<>tLxY-X?4idXyI(OfD#\\ăU"kH)7^8I[3bZRT(ypG&EdRP5-LZ:8h.:MLxweO\B.VH?KRc+.2Tfa1mIBpT#>B9lăU"+?:]Q*=\mR/YtQbP:ZRBwE(nUnYsQtJwUNthO.w_G[O,48-jOPj#X<v$Hev'YK7ăU"ia5*9tL,f(*'Z)=[I_^C5]5HG%YPvP^lvzN,Rl).>[/Q0e<0(YfN0>LeSoPj99XăU")-sRba]b3L<flOvh0XgMBKWMKz/=Fp3-3&SEUBsL?^WxVq<oGXb5=fKN)xa-OB9ăU"'7<:D0v-&S)fwaPT$fr\=hbHT<<hDfG=)kSvwgY;'8\(4R_fkj<Rof(^U\Z=sNCăU"?jM4]XbQVUB.TQ/b0r/d,&=k5d:%>;s+1pihDK&$4j'_FO8)LCW6LxY#_FX;VpKăU":7+'HUA5AgG_O#V,ELs^*\_)tw&PqnBxq+xgeZgh0]QG(nmk6vUE#NuQWU);7[-ăU"VX#<WYO80-eXh.)'TUeB5u4UiXmng,>H$LFL#,J-T4$$j%V;.t]G30tRBlm''z8ăU"*rQ^;_mV170>(W<g^Vh1wGP#<\.Lx(kA_:v<O47Ll:qns\_&f<$tlLLGoRjpcE_ăU"=Uidsk^tUZ$\/V)m;2u?ovpsH0X%A0vGUCZ?Ei)SXO(C$5jx8.'v'Kq<^R7fD]&ăU"fa<bb5;sGv%<F=]*aF-E*:;&*i^,vx&x7]E%-GV1GIsg$7<:&yb<Vq7ZwH0>,.8ăU"cd#dT;Z,8(zfII=T2E+C/^,Uue'u+6WtPFaO+p%H9bOkuj3^OdP++ja/:+zL9jYăU"HZXw;YuAW]Ml+Q(TGWAtZrYS_*-Hx5LiI98qq]0PS;Xs9Gd[i(iMuz4rOHeh?=(ăU"]&D39njk*OXa.5,D-4BTd]b%/Qe_+0Y%E6yK&&eN,'gco%Z5G913I]Smc?<_t?BăU"o;fb*tEu_D3'4-L6*AXQY7$jMXrM&v0If\LN3uXX=wQ:p>vsH;tUuGz:fJ?ZX>7ăU"Es]lv%cE+)j.&_:-8l]6rp;\F=^hhR6)w1(&f,y-oc)=q\F'Gi(4R&]F_[D)fEDăU"FmANJei(R%igqCJ59Z8MRfm+&L$%*?M_c3>E;W'L5ga1kP[&ngQ_\_7T[iOpDs-ăU"b_,X4Dx9$Vtj:Q?Q0o<If)+ZfG(-x=u8x*3l*6_j#m2=aa/EJ+NA#_p*IvVp>6RăU"pqPp#s74/od]Cj\6-i8rdlDSvu68rN5ix0>xn&+T$4:qct$rc:]'x%up%()9%%%ăU"%-%(uQ,JBcgwz&C#%%%%e%%%.%%%%qjsx%VSwfP&.*HV?k^Hl#O4BZO.SdQoIL:ăU"4Jf9T^neJftL(-3*&*W+]D[;/T:eL31?ir.QQkT<(qa;g1Fp8XRFN2g)uhU.:YlăU"bI7r?CqL$hCi1d7jq:XlG5hu0u8W$HX>N8>&aV\P5Ui.;HmtJW$7uW4W^ERb^J?ăU"reB^uTxo'j4m3:ZUcu-s-A:GQTj;vHZp&m>FDl&Db_J.d:JN#i,\Yp^rPkaT0iWăU"P[/2.hL8-4Jg+r/#JbjQ%F3h,.1:JM;qK0GB[Geh:tJ#XZrgOFT6^wT*ZmPrH%/ăU"B?N]5\ZAtUHYhMGHkqXgsdQ&K2HWa95<uFQ6H7R&T:ci,>._XPwE$[j;,gU5+W-ăU"\qpK\/i'%^->c<qCrpgTaEZb*%E0aT?tWtW-i>^l8_fXxg]$pY6Gm?lqGTV>^OCăU"noA$iMc.5*yKBW.,A<MmQS0hqo/?kwUHJx5S3a-I-ZoV7)lQfrveGwQ,A/^IQM%ăU"9qMOsOMQ[f4:Pc<cTS.VxZ4f1%dOpt#CCCZDDiPsTqIXtd[TqRlJttC-SJ7?NY/ăU"a*IS?*kn>-ETP+kPLwP'-W:v+kN8/)WF/B0p+)KL92wuG#eKrsDHU7uT[TzS4(HăU"M^83:;OEes-Y-)uG$'tAZbgVO6Gbf=>%rIzvX.c3Cowsbl0^na0tRCGSRy)eG#'ăU"jWi)O0hP%9;]4GutO%Mb)yCzztIsMb1ODa1/5gxG;Ua[A=p5.LlI9ZT9h8%<$C-ăU"oar=<;O7>1N]RZZm(A<U=y_yW1s$7oeAsfkYV<BOZzJr<Q6bGK_9q&QT3IObo:&ăU"9qKXq]tOE*#3W?_:91s&yo_wdB.nnmEh9&hL0]e>(k>w]f>CPK'E?rhXp#cZcaLăU"1B:DR5Yb*SoMvNsz#EbM&j-A19Q'qhGsliKRl,Sb>Vda7REhIh\..e50BiQ).,6ăU"*-/dQiSBA7'.I%K&aEGp*tasWI3;+BY>dh.DHtl]^T27zgT1ENu?B4R9:RtKrssăU"eIKQ21e;OyP[?9Ld:NsM-=vw0nT7_^rh](cqm1mtHRP&ml-4ySY7+Mia)X>5VppăU"*$;Xw#L[6&/iXr,*iN-$;pJkq#N(n]77F&4Nn*1Mvv(+mStnq,$Fj;ijg#0ek>2ăU"999E7G?at*nQ2i2UhGuOn/o?_o'2B4$>qbU7-_eUjYV$W[$]DazN)H3YDO)S-HIăU"jq*)a07KuIidiU8%I>;r-W#e95I%B_]/oUNLL'EVVB_6_,YmYbi$n\)AQY&<<ZFăU"q&t$2x.xU\Q)UOKipe)To<3Rf79]AouO0J]8_Mh&P6<]TTY(8k:HEs2''7u*2**ăU"Pt.th?:TT$#_eg*)*:p0Bw,:ohy$3:i3'rP(.&E]UukjSl2J'jK4?KeXb4TYXo6ăU"W7g6E%PuIMKMuMSWSoK/Uo>]G'Sqqp66Z&.6,Iuj+7P9[N=_xxGu_A],%/TjY#)ăU"a-ElKpFOQDqLAARo]Ef$:n/>c\DhaOr1E:\*l,9VP=.EMFECCYD/0FMECEObuo[ăU"[.fx2bVhr;PFW><zHqR[w)XI*Affpcd?<Xc.,mgs/KXq+>G:h)9XLY4JYI3i*p<ăU"7ac$c;H3\)F0ADOK'j.&,tW%J;-'JcU?&Q/\deY.E*]J=4V&C.fHLm2SXE2+vZ(ăU"s4a66N/=:FnF\7g$/Q*OUSK0rH&2v'kr>3%s67)%Lq9OqC%)+3ts(YLuNDQd=yZăU"oUr3I:t'_;w^>Ug/7l5F=h[&6bmZJVN8Qf*E'<&lfR1QQI;C&QH8+fR&RC&h]w2ăU"-.7DM6i/MF>^YSj4_bYlRROrEYIL,i1vfJBtA3KZSaQJ-%ViiCtF<8;1Z-h2ZTcăU"%1d\2v\X?,o\y7ui+zL,c8K,Y2Q]lszgHZR;t*b;/dckF3t+qe,ZpZQI.en>t/>ăU"t&,iEpTvX6r^)e2+N821Ry)$o7a8_Sv)oF%5CKH1:y:G0>H6u<50os%4H_>?pn^ăU"t,gwwp&VDf#)>sf6<g/oPI&sYcFKBNO\MhyCFO/<RUSI3pGyq^on&G2q-T73p?EăU"(cIbYzbYGU$CTm^tP-dbD=s]ai10VS^,4y1+SPK<0RV5'Ti'R#Z[9;7FZ8I[;(.ăU"oM%'0*whP)u&Eh^cpHP]J>Qn$.W]n+Ir;Mg[x,0cVgI-nMtx:,0(d9cmr'WHJJhăU"R0=1^#Zk)nC>*4Y1eo(<&7r2K/P$2#%&)Qy5)#'2(j/7W3uepDCm6bm?03+1G8kăU"3r_gPxlFcO$Ca'p13,+':ma.^[emXK[jG+Ye#BbCp4o+$fu'RG%K9&>Hle)%7ETăU"b_:T[gMc\Hi/&s>o(g50Fei97NS/C;ifEVL-bmAAd3iajt?Ihp)HVlk36p'GgCYăU"U6[,4317m.9&LPK262*bC(>?=;+&xa81FujX0h.bC9uh<b<lhNb]QboCFgwBfLAăU"LM=^]#g&('P<-+SKchwm<D7Q8'aab*a?^B)EE-b6OG%[9;_=g*qOoJCDc?geXg9ăU"O^Hb3kWtd^IABBNNA2X#LgLMqVrbAonJHkr2;xWH4$:VGJ/7I[(=Ri\4rBSH^>#ăU"n:#*mP.B)3TUg9k&;4(pKR&+?oXcK1T1Mhtm;(u7*7*W.Rm]nMMmU4Xa\i'<&mdăU":9]I.R+g*G%QA3)2Rp7Q77=m]'sAU*MJFJ:&:PaVBZh*x%wOP:1c/.;m(WqCcnDăU"MNZO<h*]c#msWf,])?ATm4)\UG6*xWT1AHLwxujBb*#yObmn[j<J>'Q$2LKLV/.ăU"?(=l[TGH^()\295WEuO3?&afs27csubs;rH\s+rbhLBqQ+O]=Yj<gCr4kvWn?I]ăU"p=*9bi)9KaZDemo^\\ts[DR7-[nGhJ9ZiIIo3,fqwX$>;uGIGp$j7hU(pnIrw#măU">Ozdq9DduQoAi>JUg&)^2];tZt6:A?YVdMmgikMkkhjMlmi,Mghgi&hof+0WFNGăU"6^p_37GC*+B9(v->=K\w3^3Q'Pm<oUBv/c6c5^_6av[\0i/FafH:e,V6;j/E#A.ăU"kalbBXb0<0ZpTDPlVW$f_6]_;;_RKxjo'HDsI_RR3a\n2)-B06c6]_K([7n^c6hăU"$U3iW,bw1(v=yyR>MPVusBd<'kb(h8pyE4fJLa1ug;KKuK[[KZCSk$5rDZP.PPVăU"L7L7:e7Y'nAe#$kiGRApSC+_:iAyvgc8f/uGoJ:BLr/ERvjmnRhc$dHVq;dqi?3ăU"<*IJ;RcgMkhg-M',**S*d3#q1DZAZ*n4^H&(Dm^mt7j>3=$0R,43kL-T%1#%^f%ăU"%fs+*&MK4x0jjfpW:Vo#NY<o[2Vr]B6wVj-NtrX'MAEM5qE8fghJ^n1?h7FXbvGăU"c)t#e]JdHpbbZb2B3,3]uElefFQ%5,]5IE#8w$,oSL\B9yL0)'h*_7:C+MM+.&YăU"<[5RK[CJMa#MDK$pJHYuvmZ^6NNJ\1s;m^cpAlg=dlAhhjj6Ho%SHH#SQraDDIhăU"paF=mCs+3&fT](c/PP_9lb[;$YR<MqQcv3?,)qLm[s6mZp=,u*5%QTZ^X\0)MZHăU"*\vsCui#WH.2#6rs\pYNkJVj[P^%T(SGtM2$W>.I5T#%gg%:3a;:z/+e\sB3e-oăU"guu04$Y&>Fk;vsvcEwc3YMMd^=k?LXjPdz#$G;cmQj&zfgT<Lcu;O^dA&CbLtK\ăU"q*?^BMi[I;a]Xr=5RpCv6PlSJe:W0wq9.?Ml4kDBsnjH^Vqdr'n-5nY<mJEkaVQăU"Ykb2lb2t.\JtciYV$(.r4GbsLx&=M3oXz\pSN[U3vve4o<J=\B:mEg$mJAoRc)[ăU"],Eb'Q[;/g^*^Y%/7:*ExD<.m.9:<c,ouCku=h:*v08d_mItB-)Xd/rpr&zP'uVăU"q,$u8q$HtLjrHk,7G^E*V\%5e$uKsK?\J%eU:_0ak=o3q<Y4nua-%h;6K^$oWaAăU"NPz99j^h1jqFC*o^4V7iZvJ*XQRrtrl#GMuHsnLn,MZPTnL8$dXTU1CHfkl]NVLăU"3420EIGO6lJ29ZhA5V0Pfh'tx5;\8=z\A9JO2ANfFvAm,-.;>3mK)%M]dHKwhpBăU"YmUi:mv$;p;^Vtli\*PVmLj*rXH^tu(vih?7l.TlWUIuC86\^-&'Q'+de#.LkU,ăU"wC2w=_$pV,%QG[N]m'u^#?o#uL9g0Xl$aLsH\OT;ip+r*jkXrtNBtscI?ZjdT?5ăU"uSd6u]\\6w^6d<qj(dqF8dKRLDW'2.hnq=L<wv>.MdF'r0DQBKUFN2pNT*e9BqUăU"/.8L1b+dP7=D[hD^1t'wn?AO8i)I3l?mr&PtnrKXZwq$>uwcP8uw^d(l6ufHk+6ăU"Cjue*n>*bCW61/]]inLC4630zZOc;_K7jdjn]jTn.[?hB:T5r+r+ALb[NfG$(xXăU"'BJ/L]$iijb5I]*MRta>E\lTkMhnWuuX0XPMdNMrrbh7NqTznr7Kc=Y$r2x[yG9ăU"k=2#vC94(>FnY6;(E(t-O4Y1ka8/n*=$J_'e46o.M'+dSalYww:H>cTQ=D]hpS[ăU"u?jMml,-s$j9ngt-Ios#(7wtn8vVj$8JdfF\-t?SLPcuj]bL>FH(A/m=^kIhH2păU"%fLwV$4lNYk9AQ/gy4tA=&-&5sSt.pP6tzdlW8lg5^E>Y1^SkPMdml*e(dDsPX&ăU":Nljk:xrsj0wihlFW?wNddbGb0PNH.H?flCS[*m'I;%?B03.G:S08e/Ie0qyXO$ăU"qq/QO*8i*Xr;v$WrPxpKjhrrNw3IEt8vg,pDIccrL.vWq^MwX>>8l$lUx6(PLtTăU"j1<=k^'*[\\\bs7xI8cFnuLW&U_mA%OfxWTx17N>SacbDjE8%?O?Y8<^77#ojT[ăU"x,BY:pWJugJHVbG_pXlrtnwo[\8vrf*8rr>^7xHK,t-YIcUx2rZZxN\XoNnCIZlăU"U]'wy'v>2_>\wV/XDp(dru&mHKftT_]SqqG=DRQ]TplP>Zwb,NQvV&Nukhxjq.>ăU"wTsd7kkS.b.DHj[D;7Cd3a1X$s5#=h-Ek_v8m>^e(Ql#wE?U\oB:a6R,gM^9F?1ăU"MWkdMagk*G+X]HcoZtXr1#\2r(LtNtn7jHu(xqtuXuclfPdDZV$B#]0WbF=d'-]ăU"q=h<gc')Dr6k\w>ppdJ0ZVf8fn]vtTt_n$mEIDDj(_+)$3>#cw4t.U3mN]B.HNrăU"d&N-qSPTtNr2Hb-S_8MH9LH24IEGSh/t1=6qXArxvQ8ZOxgO8.Feth2Lwst+vw]ăU"n3)bN1)A^H##LsN>Cdk8qnHw>tf7nkp\-skFXPSmu8ua_cVdpl-LbiMI;-s14HvăU"=<%wEJ*6^qf:MN=P.849vCKg\D'8JBvhjHwGS#<3J625_FCs^7j9q2*$HWXKshiăU"$.GgQ2H.NZu*l^nnc61%cdVb8mesZ.?4]1tGU9h6A3N[*x4&KC8_g$5LI+l;.<'ăU"xu[(.#]Z>Ae,Fp,u\Bk8\QA4ffb&g^v$Ar<'k-6Af$Bj\(k.2Kji*^lRNU',)SgăU"o?246X?E1aY9*tt)&0Z,6.XWVN&$)Z/v(6CtZ%(Q*DGrwB#,,YkTYa$T_4lZ;wJăU"'\A1I,aJuIm.'_$2f^matEoJ#f0S+98N</St,qabh\\JO(;vLLjHJoP[<222%]&ăU"i>%s)ud5elnWjZx$qVHqjrb[R]v7Tlw,rpR]<^otaKpdf$Y\7I>lg,1XMu]mekTăU"sbpkGKYhNZuqNjq&>W56m*V[J^D((2-(k?UpV<-HM$cc^e+%-B0vlam'53*bhm4ăU"rVvkB4oi0=-VzSL>-MW)tl6^e/TGC1NZHY972Sy^mm'j$;ukkKs6?_h,oGbuIB2ăU",tnZ7x7J0P<54KHtv1Y$IA?7IY]K)K'dZGqI+y^<LU/5N;vb(.t'9luHfFdL7OGăU"5/_ML,DR.Ce<,V#IZ=YpoG4>#lKLV$;6&g^tHc=jc\p6q'B8l</&;5KCLvx$X%KăU"XgX<Kh2JKwN+3W;yX3L'U^Xu%[6ccH'CRdmxt'urYuMy<7=YRtht<?ZD^iYZq;#ăU"2i72lbBxb3rtdzpIqp&pATYPlPP5$k5#bB&31fG.;>A]920<:^M:DK&.?,-rx.EăU"u$H&/IUQKkNFm92+8OY.w'H22Ztj<bb#DAjABhh7e+gv^$u8+3+OU8?3M<8M#M<ăU"DM9\AGnF(5nd7j>bv]k.9Z2/WwNw7HaL(gHK(xaowxhTj%FGcJvUP+vnh&L=l=wăU"se8Tg43?rcA>E7\%v:W$mX$01;Q?5Y%XXddC$]['%5:gY<gB2a>9vTi<O^:AlPXăU"+xM8i_JOZ&65ae*=rXycED'Mdj)_7<jx-<WlJ)O6M5-lL:hau;Nu2ikmh.ZYfs9ăU"\4Bu1=#FI)k[3_%aCSdsNo+l[l,mHTv,ROHYN)t(&sye+ot0>75?8kgXD>2-lRsăU"_IeJg:J/YgWJG4\Ut2jj*NjCIKM1A;KMIIK;&1GjB:VC;5ou3np6ReStN7^*/n7ăU"e)kaPL]FdAKR(RQ?evQ/8->-YWPJ[&9*%(9SBs6p:0Y)/KHma*<vm=&??Lgw2wtăU"*JVokZv<<Pk7MNImb]QP-VTHh\>HpXS;ixtc5-yL>THbd#Nhd+(D\'B*FkQi%&LăU"F=r*?4VB^>aWm;5EIp<X:M6<MNp)sqEOk[%jY1,pJs2&ndpMn%mS]iIk#-Nx&2ZăU"5/xe_f8eBSXHF,Ii,QvX3UxRs/1tVqmRi=_09cs3vp7Ym=e>bEn\3VuYr<<#s]/ăU"j?F^eF?^\_lpb^;+X$)RB=m.xoaZY&Jux=a<D7pAsgvs0a&6v(75MFDM[5rI5g&ăU"3(78/-03FhfkL;XCUpCj.DDhO<La=%0kqD_=tpf8gW8G'/dEBcd<4H_va>o'[B2ăU"U4t:,9U*942v?WSA&Q.:*l]3DnQe;M$uZj5'viDYZNON4=h^HHm%SvATnpo>Z87ăU"9f3VNA&jatq2Mn$UGiUSqg+d%5Bs*-qVNaQ][+)<m-]#wn=']i]=[=B^Q2^mR2#ăU"F<H_?GGgst9u9hPBx(&)-$b)uDPmxEp3rNe30c5+U.ej[Co)IQ-&Vz%f?Z1%134ăU"49thIi&>E]WO]]#Jj+U7v<oAl#tePOJOk<#GLvZP)8.gsJQtoxj[%a&K-[D3a3.ăU"ox,.Nz_X7Fm9o.lqlA%3?fE=R>I&Hfq&va#l4M=$66a;Lo'0u?;;n//9\n9-;8eăU"pXOBe%bm<uLIiO+DUp5v[Y)OQTImL->y?&YtR91DjfR\L=r*Jb0YgUmsfKW<eBeăU"pr:Yb'<TlTgKr^EXl4Wlnq7<m'bliUl;>_'SI'_t2=s_\iu,Z>%bLeWPn?#qDZBăU"Y'bEXIComFS[b:XcF;j6=mvw?S7Q(jMUHw4Il_g^*n8jAy?CJf,)7]BVsx&4_VEăU"7T.(/=?0RV3Ta*']2876Lh^/TcZL:er>Ql'(,9$P0(cV&iYOQ10RTy>LD/wEbOeăU"'_UF6Y'54AV%$*u+t\MGP^=9+u'\Y)Qf/TkkS*.xrjEgIJ$r83tYZ0llh,g:7uhăU"fi&dse9Hv;G1wPV'wy:7L<;ECZ#3%w;C7wqaxa3bMD71*+ptU+(vDN(9qGFCXuoăU"u&lF<crC\qUT#GF'-*4o.YD\R5$C_8%=N,Pa]iG-3RPg8r%cY2#<JZBW9h)[y%FăU"M6JM6oWfq\TjGEWB'.T.LfDam2E4;jA1Z/^3_?JdIC(+g:+PF.Hw/.epv82KP=yăU"C[yum#]8t#pD>Xt#%u7EHY$Q3PC>_Ga:Co*2;fOF(#AMb<>0IwhaKXGqV9CuGsbăU"(e9lovZV[;5Wt[D9.DJx#yr;;SKv-k>22mGG.I]Gl,F)g_E6WTXh_b^YbCm<XO:ăU"VCd5$a,vx[r'Eq&>(9BK,O[%T-6JC%;<lb1dkH6=W5;=i.-[O/2)N8k8lOkaO_5ăU"IPb1H-0+HOtYTT<RRH#%Bs/+'Yp'=+1l4G11(/zFtI$.qY9;8uO/Zf5ioXrETxcăU"PGs(PY6-h4%XNepXDATe8J+4DKvQN[.deLFU2'S:SI&-=nne9XN4<Wo165YT^HAăU"lc%Gir#+R5OHp-WY>TQvouQV^sA($U)['];L#S'KQ(Zs+aL>wz2VJoKUGE*?j4?ăU"dGJNF1u)Pv?orbLA/2[-N;IH]IR.S,aQ00xRZ&S1;5nh:qA2F*>P=RI-swkv]YfăU"/Q[]majFK*/DHexbxSj6u:nooi1Bj^0HGtGg;jn=1&_o\[?*cR[(>?([EgE.S1*ăU"J;pU_]BS=][;S*eUJbZvhF.Og5*,^0V]pDwY&0LO-f.IV_AZqOqaGUUKbD?F_lZăU"Q9M=]:O$rtH0Q8I9)7F;>dvtSd'2d,QvtHJ*IHGs8,=E$Tn:C'wLTht6oG+9pT0ăU"PcX/Z1%qbGMmM6T8PANg&7a25-k)F*)-Nmz:dL^duFTCptc#PQYq9T8t?w&?0jMăU"RW+ALQORp/-9&YwYIS=#dqyQbn[+dvNf:k(fTar0rh7DPlpO(qXpI(.c;.p[cL[ăU"^X3rM4yiQGQ(wedefOZa=Od0RuxW.trB,9G')Eh'8V*[(#G89,Ak/O=>x2#+mtDăU"c^ttTRBHfX3.H54Ma7TC]3's&+OT\1&[)f2Ns>dJKs;85l_H,bwweH)?tWd68JNăU"B&,PT+'(WLf5WA*J)Q#*D&-J?Kao:58'M0u44F42jQ;p^515sYgRpvabJ(Se&=yăU"Nanq$;b&kfF1KI$g_Qe/^0N*NNuh&5xZAOt*lTv<W5,B6-QC,n1dz>ct,ee<TX3ăU"qbVuko[6oUc$nCve5S19YYW(tNo91uuu]Qdv^%TfWaFBm%ndXg7mVi[<bs3ux'&ăU"R:qRvbK4Ut$gF18QvV0M_MU.Ch*wq;*EJPFI#.zLNxd\Mm,49o*]?e7LFM=PqK>ăU"#(#hWIX8d+mzVFO823ukVu#oqwn]w:oqjg^4Q0/\WOlqf+Wr4Iw1I\#.H:)gn9FăU"Ud6us/x7idX97X)N5-M'A^$bCfLD>P/.9_MvyPU#/RdAOCZyA>N(iOF&2YOp/%#ăU"u)KdA2ZoW6ikz8Fm/,C.PVC3VESflQFALUl:b]RieiV]z+ivRQP:7o.nm^bH>o8ăU"Hqx%,up(%)9%%%%-%;AZ,JZU8X]h%q%%4%s%%/%%%%x%fruq%jSlnpkk4rq.aRtăU"lqHL,%(OEOKY+WYP:1uu4+1z>.S>=*M=x(ph(((<Gu[?iDhd:uL[%5g3S'((M9tăU"45E4dZ'P%O'2<DcFY97c7DZXxYJkM1N3s<G2(nBDGl2I-06Spc7q_6_;A>FAxZ%ăU"%%e5/SgpUR=1wNC2Xeo&_mY/eTfr*,7-&+;2W>?3Z?G(L(QPP$*pFBHAA)^[\J5ăU"EAWiW$%mZ[[(L$Qq%qQrrB&qr8255CWehfpQCuxqBhylT2$6t*DuCK:SiC$5fOiăU",Ep$L+>m&4[1[QL?\8r\0Dmu-,n+l0l5RpT6Rt=_)uA(B%]^'s$$*]1],3L]B+,ăU"Q1D+HEe4f=Ee/\EPw4*gVVJ1vLlSf6hsf6-l0Py^]WVcDt&tsiivK2vkK\&qXJqăU"('48Yn=+=)[ULE84/1W64/qfbC\tuj1dqRG;Y#Evm?)I7mkJ'm%G_7EiQYUAikqăU"wWUauA5aABuzvj_1q\(5-.TD=H_#9??'W?K#TY^$Ve50RbF'GsruG=hS,:PBe;IăU"eXI&VbQ-of3&PIJn)iiQpLp$vt,c'pR2*n%S_+v9&o(5&(Io<%6_W9WLb:,Woh4ăU"6y+FXd\3ZfHB=6AV?E(TvVThv82gtpu5<\j[CRbkXQWrU+)^q7pqQ<OQ\jPTc<*ăU"M*E;:ONWM1W$]O,W><4Fu/hRVu70]]LTJMdlef_w&AoSb2t_lS)dnNxMCefm1zeăU"Dz4O4yOKGz&9V9y3:PzHz9uHPfdqx&ngQ(d:wZ8IQ?lZYPX8i?t4jB5G1obwlZIăU"pl^+FcOa?cua:n$*zR#nNdJkGJd.<q*z'6k<i3t=u#(h/v_Utkn3E_?mnGXs\3GăU"WF]PZqm^\S&r2H7tt%Hr*U0L0No4UWxiTlZv(8fTrU1+7Jt4YWNjPpN8KsevL1UăU"wJ]samqs'.LH\2m[]ao6^selOFx*Y*H#>ad8Xw>1[GD8FLm4BgtdKuikJ<M&b^.ăU"UdJs5?cRT<uHXvjQ[vz&1D55cr7HljZfT85t6$X6Ztm$ne.cKqQkP.NtNsmvQh8ăU"NKutoHpuhxwllHHNxuvh$HsjAx(Q_uNV*xj0A'MG)eh(S:Mm_^CQ^VDiL.Wy]\tăU"q+>;AfwM7ji\W4+X'zE(=d;6c$TkpZ,Ekq3.#+5e]V4$t?gd](lesvWK)e0M725ăU"Q&UR'p?N=Su#&:%2ei2B5s*qt/sv.?jkHH>ot<]N1D4\4+-erZ;UpEHhZM/A$2GăU"I38]7Eb1lKQP(lBrc7Q%?;(>9(q8D'%r0s8ffu0thyq#AcD28#><mmHphu&McbLăU"CCXp4seWnni_mBCR=TK=i^d1E\+XLn^pLU*^nKuEI2Ozu]+0,-)D[F]>U)rg_fSăU"PxUe/?$KD/;_Xk-9,hsl[%TTpHED-[bn6r'MFqq]c;1x;W[,#Y\$c$7A380]f?iăU"&g&0-AgHm&tjtJ(U9U&G+_Wp/T?A]X_wf<R5>SHdi]3Y^Xr/;0R:x7G$OJ_T.M3ăU"a9Fh,se9f$$%AI=D*EaOm=#_gG4RKZi_tsz-rQ0uCs*.UIG&HDy<l37Xr#H\1htăU"58;SQwLckq4?kBs7SQr3#1'fUOjr(.99Ul%_pb#^A%U>rjnleaRdc57e1'^<0N_ăU"U115N&A9)cn*,>riF8Qi[fUv)/#y9f>h>oNfb2z6sdbZm=/x1/r4r;:s6Sb_^8răU"[C)X8)Z#$xy91AUv,7#Rsq+.^G\qu8IR6CPgK-%%4DbSo6-(1bG7.-Fs]ux4:?3ăU"j1IMW./cb0;MspIHh_rB$^E($$Z4P3h1M1kL2L1dSqnVA]4h\=dI?>56cDM*OW;ăU"oS+HYe%vWI)s,lnr>nOf0.f65y?M5BF[HC$2fMYz2Z4EgoRdHU9M:NFwKrK<;hgăU"dS^5]/dZst<FO#jtPWJ0(vV41'[o1[E,IM-_lBMiOca:c*W?g[]AO]:m.rLRpeTăU"3;.p]8eg..8CM6A4#>EvL0pUhk6xM]Nt=5*50SnjWj^q(1S:o]$:uZY&[:$66/\ăU"8>31<t*,pMQPmz;*A6UiB3JY4gp*vXPDKfIFdRdyB\^g'%U[YrF3lG%kt;Cl+c$ăU"lb:bqb>pO>zB>GASjV;U544xJH/Mm7,Hq=FMgl>+:O?YU3\(iC#R>BSf8'hJW_2ăU"$)SdxYg^U$(&VaUqckUK<Nn&<J6-[RLG_Uxo[/es6\LGr*^woeM(D^8xtMu*noUăU"F=MD%Xp;+m=a.85OYa.hn-hhQX2=JC9L^Lk=pQc9%kmL-^]V$nh,H5sUUE9v<[năEND SUBăSUB V3ăU"RB8iP7zEj<N.k)gb(C?w(:L^JQJ1H-kP_\\U[8]C1KpQR<J0P93lWx,f^yAE*oMăU"G3[Puffr<ta>I):Gv:>.cu#i\5:8o)Iq.sOpf=2=?aW$IAhC5rr-CndULc/mhX.ăU"Z<UHX&FHc[>\hYg3K=_<6MR:8+[Uv;2ir7I:k9]u&BkE#e,h3kGJjVl_uy%h>mAăU"lI*b94(4^3NXMpbv:#3++j$06A7xk$75#rIA0bVcsrLpPa4fkgCF:G)\R3g^u<TăU"0iQp\$;?Mh=A-:4Fh:7>NNUcC);g%Aql,Ax82W7cCPE2>i+keOBvRktDi$Pa=IwăU"A4Zi0.bGPX.LF?P_),zm-R5X$XFu'A/xfX_GgbCZPm(fHrtd*Vi_>>b$-PRV4C6ăU"A6Q<<n]6),-e8rH<fIgR.02lRa[*F0RCDEOK9'AO?2:Md.g:>Gs3r:Q.^pIvE&\ăU"B?LKnB2KrCu9(86tNY2nEK(E_xbA]$xu3*kClWY^)_uK7Yi6sUh_(=-9u]4,irLăU"Hf2cR=J;m_(:<s-6uWN?OcEYo/cBF,-7-gTE*^P;6Hj03.#a&7z<$p_XOmQNV.GăU"f'U6wfi'K(,*&%Jt3oSNxaR/ZP-.uPj^_m.2aiKB2SI6.;ES]8VJ5?L-\f'bWVBăU"Mfpfh,EoK=(^YuaID>pi(X0Zf%$K:nPxo*>YgmdtlNjR?)90N,o>XS;e(1yN3[băU"'2>LD(DEJ0XTM2Rlm8vdn'eUjIrhglJJ4_M_^Rky*Y3xaowX3TQDGrr(oEB=r_hăU"4ub?/mb\/'\1/3&?+BwZbQ-]cUx#]Fu&-jAgXm_2xocs4REIw?kDB8Pa43eA&vCăU"NE.suIYpP/SPUP$>4r?+B&bE-.:Wr>G->M?%/jgexP-+d$d.TX#O^PkAL/yWNnkăU"UfI=1T)%)C/8<gLid6.^.PxuYLA9_vO&JZ_b^5sR%I:L+bW.#?Yba(h*k?.5HHXăU"<LD';+h]6rpN<qv\0\s-<xmvAWvHHElpv>^($TH1\a9RIJiT)K#zNPn&B2[nTSWăU"GxVkh6g5'=h\:R<-1Dv0:iVvd[a#JWgXd?oh>B:]b_g08Y,%-uPz*xuc7u'Vt5răU"#8VVrR#,ZLC3GNLRpm%5)+v*hftUKJKi7M9#.,vpnhpFH3SGDbz>xZ_DE36]+WPăU"6RZhYK6#N+V'#'u[mZw%7p.sf\?9a,>F0'C&SdL.?uPPUehp\?heH_M0a_AgH6wăU"1K%g-:Esh%tO9E?wRw5/+[Ej69bDD)?#ZE^mt7A?_3'$*qD9[Ko==syGh]NiTcKăU"rj#?-kMRUp6&XkL%3BPNN,:pjW.h5KGC)HJ2fFl;K7]X3i9^BYTIR%jfdZrPMmGăU"7]UJO?d9]m/o,YDx*D(PRws-ZYTpK\9khxs[5f.*j%$8:aoLx=Xr&rl?4V0FvKFăU"JTTS:Z]WlT)^9#psx6J[E)>A[+,;kiob.c2[3yI.KxVcr/./lr0H1,ChnQ<ha6yăU"ZSfS)th(,]XZo]lLNAk;FH:CG)FkIL[%j-=HpO9n+Z+(EP5#P3?.q3,*Hw3-F1JăU"U3)T&J&p:q7vg]QE&ke%s>s\PwAVipE,gbbTt0k-nni(SM<*l.I:$G,A08'JAUlăU"T'T*gqS+ixC'xcB]TVc\h/71Z6GgML6t-\+uu*>18U*qZfOy'^9.hp?Xk;YjlguăU"M,IZGm%ZNm$(WHFBzn(8F\#z^J[e32)JYKvCKQ^S24X6';,,&Zut4.$'>cr;.wNăU"/S<:)>SVd3$*xNQPh=J362>SHM1[$li[mM;Yd4d^Vsm_FZrBAjPof<8DJTCDULlăU"i3RRe[Ya.<0JoLHf<6GTBKLr1,cQ:_t/^buyaR>y24LlMng'l9Vq,/V(W)iVJ'$ăU"zf'?VmLfH\a;2MQm9Y#\lT.GJlE_1$,i0^MGc9=OgWzO*?#SGOUEbo.*'hI,:1AăU"Qrf[lFT7Ok8v0Q)TLl8daJWTHCP%u6L0E[G-8vqM(Q%SO.L:$rHCcn43fQa*F5păU"Jeg\df(W2.7j4AISw7oLD[j\2yA5dOb*\v0g5$d[h18O6(Eex='X7)]G+q=hW2QăU"b'ky+TfS%<w=&_^\,AW8lHiU-BhL-WadP(6=?A?:k'b05_?)qkv7gS<v9_y6amxăU"R*ds>YtaZZF+;qsi8CBUz6l>R41nGj*5nFPLcYZVS7:6eimi4Ma$PKL*8KK<gqTăU"swPYv5JsaAxwYZvBQW20m0+OWNoZUuQAPFCa*73l_v1_a?(bEd\e:(?7LqWoa%(ăU"(1TjerY*QA6&lWa:c16=E7U(^_6J[<G0jAGD]M60:VSAzRF[\$;*8AG4c+7Cf2<ăU"^SE'#4nVO9G6BQfeB=Fi2,Q+q?.nztg&kMS(gCT>meu's.w%OptRA'Qo5<Sus-PăU"(xL,uwrsCQoIwC#?GhW6%LqoW=]d8_?-+TD&z?1$'=OkE2mn-Vu5%geOJwdtH:iăU"6GXiZ;3TD;iIcD(qMT.:+./MBp7VeMhP%6:'?#&=1.w>>zf/8o#%)Y1DB2s'^:/ăU"U>fA_O5h'HTow'<p3_3#7k^2L?p=f*jQu:(P7o3<E#UkV-7.LCLk\]G<H+B=jn1ăU",G5?+i00U3#h:bk+h6sQO-R,::N-u3,2;aH3Qm:KNYhG3RV#GhVFF[O/egOU7&^ăU"BR#D;y;*Ew]GX]wpp$klQ^>]icd?fj*H75(WTVeGi#%GYu(J*BV_twI4R&W]5CCăU"oRj$6=1Y]*ZEWc^XDRWI\4n%K'g=Q$=,vMl7.\Epw<V>Olfbo/Fo;x9-.\n4ANbăU"Q7L8aW(b(z,KseEcgb[[Z[-OC9I\-$H1g'o=+?v*ES:FHXhS#j\cOo&W3*tkt0-ăU"EQ^^j<oNl-$F0-(TzJgIj.FpNZJJ5a^JVL?2a'A;R+lkTZ0l])iZ[B)CzxFj?maăU"PQLhx0RZVmDzNbgWEf%*-%peP?NAFgsit>S9,UW^rQ];XS)W=m5J.w(;;39Z-qCăU")=tV/H4F\g+bD+_.,'&b?a#8>rR=0iw$.JUm/Ecp&<LKO6RtGD0^EpRq>l.->%0ăU"DjJ,3+(oB>7BF3'FuU?a-kvE^K5A\H?krre^p>UaZGJ=1+>V+)8/V7f1yWsLj[KăU"J#&6OScSSCv8+9ZjFrnx*Q'e8(.LfwEQa6;3#c)&IZ9$s&L1KX+Z>$6H4-Hge3eăU"/r?'MMkC5K.3\SJM>/=KDhPW11b>mthvn'1RN?(ip)nh?[BZ&O;g%B<3^GM_5,-ăU"d>w/heW/LdrRHfb0[T<mVwz3uqqOe3h\m3c-j_U,7ef(ca)l?EhE6eI.>1*ZWAmăU"$c?lO>/NZ5.eO'.-dX%lC+Nl'H?]rUlkstUWlK)])QDWRM4_rzyA.G:1eR&t]3SăU"'\%7.d..TO^KnO$wHTcip/N(f(nLb+ZvE^e;HC&I=SgV267<\(0$7RmGkQ_7X4SăU"p.7n;883\*F<M*q]]]UFiJlL7ve5Mu:Zo^I4_-qH(0v];&3ME:YdL]-X^VD6/#băU"6[LcfMoNNRr$,h5nbobX;?12/E5WS*'^Wt2Hm:E^;y%(91#WkX(US1c[J8PHmFGăU"DVoG2eu9m3lAR$<4kfnlMd8_M^$j$+%6#K58*zA/=as)/F6J3.VrD]#b+G<KiB#ăU":w;],6o,^QKkfgvpc:Jwfp_zg2EG^/YK9#w8hg7CSx1BoYD,%TacChz<1$fE^dDăU"B$I'r15Pn-7Wi:*UJ(GUlZQyFfCZwd_F)>7l$7^^#Si1ZG9HKhT4S%s_s9vh==:ăU"uk2wUZ<USPuHAd:X>1]2(eW:N<1rgWiD]Z0v>G[X9JRHL^dcRFtL1Z&4D6w5TD9ăU"siR59O/D)x#?2Du<',0(gdsdEXlc_.hG0>zL/saEelZ.H3(']&HlKB_M)<Bm%jJăU"]Emz)b7:GMgHS_5pw2*q_2K:S$G;liB'Hq'ZM='&YQ5.y^yUd3LgW=PP/.GRp<1ăU"<pP9<(plZlHUoh5eBGXXzkTvGBT_d<ULIZA^-Hl(Bp;fq]8a)D:<)o,NYk'10aIăU"XgyYfXeBt9PB*fnW-J<ZUMmJ.:qrk-_6V:W2mgvg_ORkS2ZiYUDWV_tc]rA4d'<ăU"+AMr^$Z^[AuW)SIN^a0S?[Udsjg$6?-IAUd'D3Gy2?kHA$tzVhKfu/Al\t<VRP/ăU"lj.9IH\vDGGMmb./2G.Wk;u=F/EHn:Eav)9C$)TTP:-171JL^U933)%RwfLuj7ZăU"hW>diNqHg5'gY4G%-5gZ4CTkIZY1buf7_(CESd$G-_au_',9?Mq0TZrL.xW,CYcăU"wZPyJru<)%n8&w'2wY.R6d,RU/fPY_0br*fYT&or4e\*-Hb0m2*F9MhAdsW%S,9ăU"Lqi;iqg#$CAPy&GMKaVnwmFF)kuKj.;GAhY(c;DFdE,.Uh^90+D/d=PW$hd6fQLăU"5=S;,*9s0f3h?z-QZZ%e4$$baGloUI<]XDp2&&k>b&g(=y=Lfp;dI=RTlH<AP43ăU"g1E;=V_4nR$b4c/<W(*RF[;Z]5T>qnA1v>*,qweGfuYt3%'u1i;D$af?L#83RW2ăU"&H32JU_jNDj<oP])oOyS3F58Z]Y3g82NQ5H7S,3Lq5TmAU8D'GhYzm85j-8T9bQăU"P,PWr3,fuFV'TT,(BaBfLefE.(Tgue&eXrw&;3:&HA1z(]_d5l%rd8%a=\CH5sCăU"M\VKWbfeqKI4<T8]A+a=EExmG:6Su<nwuCXGi\zEKYlcCvO_E$m#xK#P5]-,k,lăU"5(D_:$QVN>Ip8xLv=<i/MD6*N4JJm/F.x.d[&Db;-gQ_q4pO=(Sub6p.u>T6n4zăU"#F:)VKq\>M)x4HLhInNQO'$B0lp(0'zOyDokPNdRcEaCbw\XORXED3hjIjX7Y3'ăU"ui[fWZF(k<XPWiyg:b4#Lk]NIrp5D[6TcDiZR*RSIEbKll*(*tRMuq:uGB0^WWHăU"\4qY]R>Q$,J1ZC8_%-'8tbbdLCquZwf3sw+3csapj2j'KZ0_cwtOXC\#zt+X#u/ăU"gjndim3<4Jusk&CLBY6KYvj;XLkPeuD#8^ZTiw7ItX^M\#HM/aeTIF]xw[i+vr6ăU">_?>tbhhT&TS;>iOgnIo=EfexT-'io.K$xY4ubDNxUW0X+>*wr/F2IgRRf4m&HkăU"f00_T8w8VeLGS5$$&:nVP5[_bujZE_5<2IgT6,SpDN,7XTx)u;6bZ%d%0Re'kV'ăU"F5<g[j<vScc?5I=c^/kP,ha9.ek$+t7b8odgxnm:7(1vLXW].pOoTA;[cr)Rn)=ăU"KJ1vx#X-8Ib\+uHAM)ors*1=O9(6?#dDSP'sRlX4pZ)p.g]BiaVA94;*v)\7/gbăU";MGp9Ku4F(MXCND0r91%yNDzT1?nZU/h'>n-ZZ#-JIB]to.1C4i6>:$_:OVoWROăU"wg;&4&Z65g1(B2JYDAfjf9GgL7)ohYRdM%l-tT*r)ZfWi\+O]s.%G(W9s2$65eEăU"OW/QhH3uX\t)z7*GH<^fWDTf%kWrA&J5sT4bEn08cd'(Cp(+hiL4OU:YGl$^xVIăU"3>jfhu7Ner405=[l2DZ%+E%V_ublmTT&Mv3R7DR4kQ-/'jDG/B#W3cj'vzgMJpBăU"VU4rmdz*Mm$)7d<*H)*^M;#G\/2&tua$$*)T]DQA=S'-)CL2uRc)*Tg[&EZS9YoăU"=XrS0x4v/jK_t<p:5W4Y/7$0L6Gy*uoE]m1PsY;S+b$(g-Zw0E^nqlY5QVuWs=văU"iae-B>h*JZsgxFu0VTz%KB>xB=X[PPa8f..oP/a)a2hZoR(2jVg_CWb_Ox$-IZ,ăU"ZKi$LYtnp.zoLt%]m,%d&hU[I;TAVkiuc7vjjO*uYO)(l\=V'<8eU6S=8VQ7ozmăU"Aze6l?k8cP:a_\y]H2\#TeW+&G(qpWI&t0H>\WR\tYGgkR1X)?RtDE>>HB%ETI]ăU"4upYF6Ch?c[7OR8K1);yGRVLr=neRPX%]Q>dJh/?tB9+Avq[\H]%>U]]L+yb^e:ăU"KS[sELeG?MGj)a1e:R/(Cce.*u1%nG&p4%?2p[,rJ-lvRh]0PHB:o%L8nP5sOjYăU"(Em,W;?N+*A,jS%&B^?V[siHU#5Tq57sGQ*<R]T&m5&^w;o7iJpRsovwfRrqD(DăU"=7\aGsGrRRUThi<N%Q>vkKP9e$nL2yL./&.GRWNr+gp&ri4&of<VnjVw=pl;V:iăU"Nl**0Aon6n6p8nb_z00wP_N4sD?p38/twR]Ctcs08e\(x^_+5/0O)L#SP?1C,xKăU"P=go#0rlRu]S1W9m+(e)n]aa-xhSQ10QbdDyrsbnB9aR4/*)xED<'C2(VYDEsoLăU"fK:d6DB1k:*L(Cgei6+2y=M5s909FBK*#$2ElafZ-fcn>vIQF1f1t[%xEz=R]/-ăU")mdedJi3A8#0;j_*d?bQ1&(0E>Y(vLt$OJ*LF/e_pH7CQ+7$6u<_[rP..zhokf5ăU"n+2nDZT<OEMBI=-dQ-rZpa>UrN(#?1kp\mLoGAUYa7w^Oez3g1a<cIhEV;Y9Q6iăU"18gP[cnDo$X0l+9EH^BAggg0>t8%lBhkfwGE;MN1PZ'c*-O,sM;Qj=Z.&:f+dpsăU"+*\LOt#c36yDFvOtr.&*]O398&%KXaC?KconfNZCX-C_9HpBBuqdUuET-FRU_0săU"$k,itmv7(Lehb:cjXz?(^Q>ABFDegbf)+J]GxH)$s_NZRplD1$v8ihb]'g$(hHHăU"_gIr-;]9S#o/$8RdT$1Ze;DDiU9eH;8+:oLyRTVGfA7>ZMjUJ?6cXAa(HCwIjbpăU"Uy*rU9c\?9ObwGbZ\PgQJ6sVeG&;*Yr)k&n6G;Ppheg3m/bd6YETj%ZfrhXTWCyăU"7*rs^:->.9MfrfjHLamn:.OM]Pp)oX*)-5CRSx4S4&.>brfPt7r;<#GJ_u$)G_săU"zQUoJBzfv^.7pGbg]0PT<=V#fHx[g[bw4irq-aJ*#1Q=c(wB>bmh&B'B8LHeLNAăU"ID[^1S4t01C(*&+:WoN2%oc6OPn<E$+_rb92N1g66&L,+7,oa7m_HS3lm9f/#ksăU"lKmXap)'grzCkB=xIq\eEjwGgKDq2Lt1kYJuAz*-YVRfZd^gg2TBOVmG<L7YX?-ăU"n$1dPJ6IpewXSLY3P/mt%t(.-6kjd;m;_CEQm/T>[Z_mvC#KT5]==k,e$ft&V^_ăU"2BI3UcCSqDpf?rDY[/)U77Cu2Kl]8+=7P:X#B9HKl_bSvgO7Fm4ZQi4u-<*6\EnăU"\darF_-Wi[_*58<:pe,IC<cf%F5#gQ\:uO+x&.D^5<mfv1]4<[jCQQ&hco?[3<MăU";7+CK]Sh#8R;?/$Z17Mo+J?SQg9$qVr8jVQcN<E(QxxQ7?Ycy7NMvA$1v;Q^4CHăU"0Oy%vrtC^7v(wRA&BHu-fgxT>pFcu>X<D$AR9jbaZm8Er3JuF3mD:gjeKXdx#HnăU"1u]nmpX9-4<N4BmqL5T+<hh/wJ)P%bRw4G%fm-33/e;+5(&rJJJ?&hTC<j';EfGăU"qUa<8JQi4*-IPGm-&l-u)N3OLQauw#D<L(2cFd-wDKAxfO5gkrTDD.<da\4cB+NăU"(W+[3QHs219f&7_y'gjeSq;*0\(Y/LrA%p9bR.>T67Dv$PU;v#R?3Ri[ct^,Tt:ăU"367$Y3I1+ZZCvEqs),RJ9oQ/5&$/W8QXo1PT:6^7s#e3a4/B$#EYFClmbj9>v(>ăU"(HV6AS'33I4WYn1FnY1p_I16y8(r5r7EjN<d+U0irMh7BkF^cbQ.dP\d/,-B/J_ăU"k4,DeLApgJIw2YZT?=6B&6WgvFBdS\o-]lMDd>V#n#nN6;[NLzz<2S7sB=9XG7:ăU">Xi8M;Rw\,rDer-=EOnn8rt9g9_oGAnNYp=nomdh/M-lIO6<gZXg]kU>8eO[5-căU"R1IXLaPOfZQk$:APD3v0Q3Cgt[+Z3RLJ8E:;l4Jdiu/dR.U-9h.4[Wc48IpwAogăU"IXsN>yigi6k6-HT.)ZvIBYe#M/,J+%Upn4B,6m4H?V,Sa&]vS-59cqIHKcsINQ.ăU"4Uc][RHqe.bbm_Q$9Fv2*UFKRj0dy35O25Ki\R1Ss;SZo=:G.;P^erhPT\3x,<uăU".K0d4IOwhGY9/<q/7a_QB'8Vz8a>8-TUJ(lSrHd,v6N'^F.L*ih^#i0y<uVR=r<ăU"NQ?(&G(HNrCac?d3jV8TpJ?ecYA/[W.;o%h5/l6]Y5fsFE5INMs$*ZP,S;O6^KgăU"O/4jqB+t&D_^,CKYOCw>jiE,Ot?D9]Kxq4Fwu32Qm>>T]kf;2hcFo2?ThKgG\[GăU"aAq'b3]V96H]xo32A/?YFF6$2K'1n\<$_nc9l\(ov#W-DNjfzQw\dK'LPH^4W5CăU"wP=r-+HgxzS$(iD/u#LD6JYT2%hBGS=R,udH%.W5G6tIc,h.PaZKd_Q<u7cZoRQăU"e5+(1/g<UZO5G>9.N<J6R:Sc&[$7>uN5c]Vw(wtPb27^w28N99cbM_c1uxcBA\$ăU"G66_*=1=;EAZ>rit&.A0Cuct9R9O%Q68Pu*NWIu>saw]WKor]=E5lLS<idw,j1KăU"fkU?d/4gS3,7hFNLLQ,SP\V^ieKVeP?9;dbda[]?,^Nb0:iZYBv?Jpt(Y%w6C3căU"\mh6hdPSJ<Xk.WPvi]v=g28ud6FSrp0pb2'.,l%;A]M=RGZaVS/Kay+9KBOu7WQăU"^DMT)R/q8-gN[wvm)L#V8:ApEo/<v63UJPlr4bD'u#T:yA#+;N%DSDMq>d)anLjăU"S9#q864;UtDsc2uVxZT..83M*Kx2bTg*H3:Cz#*2.oHSR>4[fu;oU0r8=r+C'0WăU"W0]CB]+8D.H8x#3jZ$B:eKi9NDCWV*nNgc2Dar-R-9\l98P?a/X.M,x_$,43hvRăU"sbH7_EhS:]M:,%_aF,BF&>';8ycOe]B#k;^7'Ds5yx_3z'J,6pNn9_I3OoV\$OBăU"7cae\A>mBW&vHr?0d9X%nuT-UQc(Wu]9LQV4(>4/HB4#LzWCL88W&Y[Ql6?YQ&iăU"$MN:<4Y.=U+C&=E%abvL)eP\3%'npC'>mrO^+.]P<c]7B:EWbWu^XcrdLZ,kC(LăU"\mn*%2fP=aH7dqc#==P1Z_F*)[Z'K+*AN.[Q7gn](EV3K4;=J7ZPHXt,c<D$)04ăU".<LU>I8wY'.o7S=&9JL3.hu1B=,ftpUBYK[nbvGW35w:bS#JZx?<M8Fgn.s/+8KăU"[#_?NLaRY0+THk^rY+u.Gf:>iHgm;.C0o$E0ZNDB8WM3E8sme6W*EUL7k=3+0.1ăU"L':a(RKSulQGVv;O2ps/h1lG(R?NHFwLDRn]ck9\H^l^Qa#eJKi(.0jf3%S2xdeăU"27%\?%KDnxtV9/M2BQrOB9e4k55Cq[)fVlPO<uWXs\lG90.#sSQP)XbeW5fwzR)ăU"qmvICaOgEw;ccL4$&SsaSHuc^gMu?[.BTl--/0A6#thf)3m4pLtd<h8;hd8w.T,ăU"0cJ/*2:/NWBZnHt<ba+a2D(=s;hw8yf9O\mqPToD1,0msEvoH9Ld,O5'a&O/'TDăU"0Ab117i^%M&;_NHLw'73t(VuE4=]C0_3jz/;=\n$PP+3D(;B]aDT0x'GjgJBUq\ăU"L]i6OQd,p,f(5eGl>ER-Ott*//K_?hrsU]C/k7Q.j&urGOgN/,x%\x?W7x:bQ8)ăU":nyF\VcFAAA\\LrH<l#IJ/gT7?MJ1Ppmzaie9/qnW.6TEv?>J_BD=C3PXVb4lVQăU"#NRV.EC&#-hHYRrHt0EJ)js#7;S%#)\*X:-DGc.KI.DR_0-%(7.jy^B5mPqMe=xăU"WRUd7MpmV/VdC<]%%GDEIp3'ql94ha^zxp:3Xxog&nnatttDXogQ0_\q=$YVp+xăU"^;7F0NNs?'r)qggx7H*9r9c;hHS7]+vBYJ04H;g^8;]W5g12GrX.r\zCcniHU5qăU"mI-#M2s6[oF[7#>'qM-:\)FxaUGBYMf'wF4]MbH0pOeTR<h,q0^<WFb]vC.7J(căU"DCeO<EHs=Rq<Hy>>7-ck[T^YVQiZQ\-'%b&Vq)3QO't&K^WK^lv#\yk*usm%)j*ăU"<>poJls_TgpX^AkSM_H'&_16Ec)(Jm[kS2kGH<'LFfTc=WlXZT0.p;%yTPIgB\UăU".ijazIOmKc-dD,3ai/yx<KUO.i-doPU#JTq-SsZC6PHRsCHo83B8_23VSjej&bWăU")Ws#&mf58YQkZiKVDu?J&otHt,ZZTiUr[U/NfFQ&;bU9(J1F;P7BjtPJF<O/7B^ăU"LX-cVb/$<u&G'^36M96PF-yOumud<JUrwIY2(B6b^*H3i-7*TKD3:*k,'C3%.k&ăU"_7DqqF^bQ,<>nX,65Fm\ZiWCyjnB&&_j#4K)kZ%CYQibw&^t&#J8)QHgG=f1x<săU"c+Wqx0Vf0vlqRskNEcsIAMQZ\+bW,JM<ZtRctUnr:2F0Kxrt/.d3=Ps'wz-_e1]ăU"eUh2$e8,y[*c4<3Qgg*nEY(M^07Z%V70&N$;&*m#L.K^3W?&v2lJ.rm%'6GZWwFăU"-s04>tI(rH[ndtbNtrXi$f]EEgL_:Rl(e,?Qc>?SK<WIW_ibTT=pMZ7nxT7YXSVăU"jFOktMk1i6M:,39]:Qc4z>TLi#jY67O419e%]kgJXGw;U4(Sm_w^=fJubAJ5qsFăU"bM1+3h#RiC*Q0(g[Q4MKZ<feiTo,SkuDiNCb#]hlEhlIk0kG<p_NoPfvcO=^5u3ăU"03_?8N.ZhrZQ1lsPNMs95)-3C?NFd7?k6BwhyBMbE6)D<$n6i=k\\aJ?LpNV^MsăU"S5'x$q;b:o>iPE8]$Ds'(_)^ot%ExZ(Cb>W%S/%?2[E*QZ>fQ7S*Bp(NXuegs8/ăU"?5eezE/^$.Xj9pItqUW>W,qN=F3,v0v;'dW8\S62x?:3Jmudstl7[rp\beuCeQqăU"-pT.IpKnFeoy3eQLnZz?+O%8r'\BGHcSD)_jd9lVy#LbjW'4^=N.W[<4Yt?X?Q)ăU"5k,oe>R\2xhj*#)ij3&JfKk;\Hd:9pHpe;Q*<p<O\Hkl(>ovt6VP+/p3V#K<m7<ăU"#+r9X+5X>euQ5*[jB_'6fC]Y*RjENbTO%u]k?%bAP2.Q*s,p.^z4#km<BC:cuV=ăU"q4<5w]_F_p6?Gk\te,4(T_Y5h'G[rn3tJ%N.2=rL<Wt%HM+-*M;wXpGPJVVV.2DăU"BR](?XprEIgF96^VCQvR1kVjFbEjoHNFPyx1NZ;hVNuk#N,p6:7^SE+[R>F7*[oăU"e[xU1qtqT_,$1NQ-mJDnjjwRu0$R^TxKp,qJu3OdG_e?sJ5c5l3*hbctWJHYOq$ăU"tH,H?Un;^ff/Dt&d;y8xTMi=EiZMIl[R'KvC7^Pl:sC47j*OEFX/onc;DFvJt/văU"p.DuT61_PaYO;Or^mfp$U(QS.]N'N1ENktJ9qL;eIsXP+Uc6dwh.wQj9J0+wZV7ăU"u^pFH=3eo[E_nLymLZl$ZH*Lsb8_nK;b4rHU;yam2FgsCV1nS0Xdho>NisZZlveăU"b?0Hh6h=\8<c_L+lT;WbU8eks)x2bJ[cfRZ.B$sCM#ivkTOG\G[G?tlQW%,#$ViăU"SUKPP)b>xA#Y3H9w7Zmm^2*qfuYgk3Pm^GrNb2TlL-UtNUD2MCxf1(Pd7cwBD?:ăU"/r'fC05\lY_bM&&(&.'dIN&]jbsRT<gSl__Et>1/a9/xO*9;'=uTAbmo^*Du5((ăU"$,ZqDXAF?1mpG;\^ZpL[0bQlEHxU[Sa6U.;f=tsdwfrccvwlH,0%u^)CFDOd1^HăU")w9WB</-q,-e>>]W]O/3Qj4MOF'Rlcce#nK6E_k>($-lu&nb+[uWjo;SVpHs%%9ăU"^e3vAw\fufNf5BMs_QAO<t7<5+JoZC])MFu;(**KN\LDw%;*ATR4&P*.:Jpg'77ăU"]QQ,#;YT.#cG(QG)&JbJ3mfdS(;kFPAY..EU2Q=XOnZN&w2H8-+G_uq>l7[&KUZăU"4Ogxe4j<i/k48]Ex6UjWdDipE2p'kcq$F*E8Vc0Q\j3mdA\T6=8p3w8YQ4xWKRJăU">?j5_(g,B(TkPt%>=&F3NK2fd:keHn^Tycw2R3pWn7O3DT?U?$=Kg(/_Ewai'INăU"H-as/*DUE%>MxB6VW['cr2z]wCrATcWUD;9:.%'Xp+>g'C=x'*lV?mqtKjYApNVăU"]Dor$''J_tkp)'Cmr'Rwa0mZ121;N##-U^D<lK/EbejVoV0RtP(_&smJb*kl)$.ăU">govR?\3$<xD-k;P6mj2MbADp;C:b0jDFP'%l'big&Qt$6c1RoBNi[5F)V-)D2hăU"X0Xj6dnP_l:.r$rq/8wr6E,Lv_UtEx7i6Et8S%l7R'Y*4/i4tr6#wx3/rk_teBEăU"Jx^X=<xl&-as&N8m=D.9g&s6AxUCr*n6KTt=1$qNoH<TcT.c%K+tWSbdX,EGUhJăU"<uoDlPoDa4DCnCBF<9m>KmdnaiZ.-(71P5R<3*hKhdkdWhibaR'KZbnu<5DMcD9ăU"l]ehv2ih<Q$LF7w?OhUq/(NAA6X5[R^VVM+bCltIkHcA#*gi[aG]1Hj7'CTZ0k#ăU"EMlPFKxlIN/Pd.t5fPrrQ&PISGOD.^MUe'/&xf<lGFM+[>vV;5ErZF7%-#w8LI-ăU"J/l9:C>wmrI=he,3u'>.a0Kh?yY>j%MKszgyM\&UFO$JU=&?qCQ762Rj\*jD=>LăU"Sb6b).m+70Tt^[FB/&bp1b3(Sh[22L5%MBK-dleOt'>AFKyKDU0qkR7sG,V0k5DăU"S3jJ0QA4Q&1pyw^0Db+M,07>$i5KR0bg1I3T[QudA;B40^m^Ca,gGe60fHF2\ZjăU"h^4k-wHh[WfH5MT>DWPhr]\VU][N8D-k'U<6l+4QYwPCcB*miBF8juX.0Zve,Z+ăU"*(TnPEx%YCZDMA;eQ(HR?A[-hSl1Q3W91<PN'uN;Ue\AkzN+15X&eGmh$+c)P2RăU"2P))dZj,Y3j1aOAA'L1>j<i*Yi).a.QOcMnM<V1TyjBK9TNiChH$ZSYEG)GG]0SăU"C>Mk+=GWPj6V5Qes)?)RaSS7-F>UXj:qO*(iE(NH]:^awO1KLC2,JdLe[d?Q=)năEND SUBăSUB V4ăU"1qGFU]bp?k>pBnc'g2o]L)o0;*lT%1XpLI]rf3EK;A)385aZcG8MaO<IJzgsp.săU":qkd,<P,y02q&.T7:3.SgKWvn<iSyM1=l7v6%oKk.9C=B>g9qAB_K+ULl0+Fv$făU"=YmL.2H?<'-l2a=l_HAOmEE'VZDgg#%280EX0bzqLC<j0XP)55%2stmu(0GqH,)ăU"B]4x#]*LdP[ZD*Wwu<Y4'K(7gCL<VV#,n^4#LL&FVa52cU^WZB<2=85nR'\1#:9ăU"B*Eng5?K3:[20-U'x04Ld_3/6:R:f/2klsM_wuK;/)m)iOUp#o*oX'w&:fd2C2-ăU"=EF_c,GIsLZv<]uU=n4YKjM%F?)jpbsRP&+YKw:227h;NQmYmwlstc3C:-<$Uc8ăU"'_uQkE1UA;is4)_e$BHj$\M7QW:kZx^SOk0S)2<$WWNd&(?YR0(k'P1>?-uY,8JăU"&0C?1o->\?C7B^PL=y/l'YU>Q'rQ?-?w)CGa3Ce.DgYIf42F6MWoGsU;+LQY8G6ăU";rrIwu3HK1]#r\qY*hBP\NlV?V+UEGVa</HIIWsmG(Ib=^rc3mm<lw6)NkH1#QpăU"oPMOpTX<#u(3*[,X8,m,VD_#EUgqJY5),)s\RX7p6WB=KguGdYZKwY+5+k*D9.[ăU"1na?6Q_'CCZi5A?CxG5T>w-iv?7#P./ukIFL-V$bjMG3Eo2q/#$6:A=*n3BOJ)2ăU",/ZdI8L;MA$=Z4M2Pq='A_%J.zE#Fx'1HA#CkfUV?#uxGG#$xYSB5'<CltLr\V(ăU"8S(#)Wl%Lp2&%vH_%+[d?]?o9%3XYU4Fb+&Q#^pR5l;3Q[2wd8bw<gr*KV>27S:ăU"P_/'Qg3)<J<b.S9EP'9fJ;yu*NI0>5&J8-^-l'Z=+)Q8*M3V0nV3jZiHfq70\6:ăU"3#<bfw]ealRJsWPEJ95%LekV)NDB%%<WP[Zm:Dd1*)?q_bN\T6rnNPqh=+ef&#VăU"kIc%SiDJ\dtqO_MN+q5bp1;)u^v2#73Mp%'=\x%Pfhwd(#71?W=Y+$ylTJm/NP(ăU"ehmz]v%4aAz*Ab'.q^Uvv5:n$:(B0Lg?XdU.33Sv'8*=/':A-p7=i+)%HTr:s&DăU"]ym?'1OZD-Xt$1]2\oAmXcBjKj#eqO'-++Gk3<P:W)&.4s#>^p9OA54(QH^t_acăU"1g(pI9P0Fxw?N4gFK_0PWoY-0.Eb#=6/2=b47=9FhG(Z_;lNu1)BFHc+NgdvEEWăU"L-P^rmU5dlhU#^3Y,Q/4jET&\/^u$kHcU8#EELT7(uD2gR'cf<ZyhL-u,VGc2-OăU"9%q0MR(1.bkkb]QG#pCIs$#gqM^E0cLe5;TjMpjkN[gN/S<57rLJnm8b;^_9]MBăU"t?TG<j+#P]UNul]jFnXbgfj3I)m5gNay0d3?r4WMA?/J?bO4yQ(5OuD'C9m/N1uăU"nwDIUPRP+1[FA2.<#0Qn00oqh/zdiXZ5t?<gUrhboB#X?,7l%)p]Zql273xkuW'ăU"b[\GqjO;-ZA#BomhH,T1>K:ASCG+7K7($s2AlnJBc,-#TCt>g1./Ax2$.f*$^BjăU"&QJR7Yd.b)+$n+=j;5,41NWl\63'>ob]2]$?=x;ZzB(I.W'JESc1onRRK*u:-:făU"W\N3>O^v*sA*8uGU%*c+6E><u0<=nL75CC_QEWZUphV.Gq].hI]/q+J&(*M4&tSăU"Xs.DV*'[dK9^Fk**+Q[i&g^R6_B)wL0>6hW7VPuW0(4Qr4jfue/buBlEPWe+<9CăU"FYZx(H^m59Y:95/N=9^rD8jN#m2uV9hw-7'1H,-ZqD0Vin+kPPiLQ&7h575__g5ăU"'h[ol9C<z,2rtR]r$HZt4-._:'g\u+Nuj=CBsFl>jRJh^:,8KOFs^1>6>(O-Yq#ăU"'</7=';RFl$<]'$>://prc+Qx^A=u6wN*Gri4gk>Pot^L#a<W(:#>#)Baimy=#+ăU"59S\BcP;bNR^+1,U8Y9-H]$bNs*RqV<&I=fge9OiGGfEA\K3?vCyQsO+eF$O([dăU"-:EC#SpAA&oJVPVT7ZV]D5?n47xE#61v.vVirk6FvD\L_%U-f'HG3b<6,gt.R+JăU"/*B$r8)<OPpEUt>\dx(j40V:P&+*It5[,VMA*?jIZhGXC/IH*QKSC7kl=uaKf[HăU"N8i>]PB;UE6uhTDI1DZ_WMmIJ>d+/5fHlhXrW>r,JRb3d\GBWj)J^&bR&tmS#Q-ăU"=Yc5+x^+]:8w<t;*UZq166t'^t+X#'=P)0sM*1',j:E?6BhUJhFTiDwkfVoBkU?ăU"/uEi*bp;h*PsGBaGgTy^tx8w_>auHMA=6Y8hVU=S\'4J-7>gxttfhC=s#vrLezvăU"bB_*EotHQu[/Ss3qRi?.Pc]++.Ndg=b>dj,:xrt'>rt/<svBR8P(E8LWclEk$RcăU"[>kN'SoTW>^Q=N]nHXi[$z)l]2=(n<.B6t+#(IHAnm1NR?IEbBBHwuFXhzVEM;căU"h]Me>kstIaCs^>Kt<(tm)b_OI6R*YU(3usL>TtQ^P3N<D=2ESb9gw)&pB;y*'(qăU"#n5F%X;Vfw^=Y([an\;]w4CI:#-y;GM;I:>(;fdzpmOanIOBopbdJ%rp;F+,LKfăU"p0uJr%GYli=_o#g4N$nx\8mK6%JrwO&aEI7T-t5p-/E]fGyxt9a^9Zh/_76Jp2YăU"t$RK)/6(p#YXaHvD?fcyYlIwLHe9vwkABNIAgB.byN3fU-FAtc%79:E,&1E*onHăU"wHg9;9:3h%?nv]SW9lPJ;w;44O_i2]dQ,ieS>W:NU)R:7n6lO..f_xZ3cdbmHR*ăU"Ob4[d7OD[gkhO/i.FKbRgOsG1)>j=\Io=H4>px5f*i0TCE[?z1rql?qXtltkMa5ăU"e9]_V^SBSSll[+VPmN:YxZUi#/'TbJjS9=5kjF%kUBV8B222Y/sA77x%.fV9)5]ăU"omXRQ8Hk=2LFd[g^Z?R8fc=KWWW1VwWk4uV(Zx^:;x2S7Mphh'tfIm;qAat,frEăU"E:Wi7c?F=BmP#82CL,oI3do'^3u?Ql80$OjI0nG*7;)C7bs*P1lgcKkHKR_1PTrăU"01A00IM*qGb=]LKv8VvmTo.aNG#RnlS2?90E83Q7%XF%i>n:q^e:UN=iD<Dm5tYăU"-nF<A9JVAl(pV/bH&v2T'K_O,,r-CvH,3-08$r(ejpt)s&L9th8(UfM>(tYfD#9ăU"jQ_tD;c.]-wN>Nxw4$-GZZ)+\p=6E&To/9#Lc:+7LM\GZBheq=Hd8-h*[bNBX63ăU"TfyXg<Qu3Z-n_ego=SKd.4K'TIkPxM?sRdHEA5-EXI<)xiBgLAgy+9J6B^5#.[qăU"72\Qr7I0bZ:km0gOZSjwx&o&HHaVgmxVt>F8On8<SH$2\.p.'BB%#H&qyk,tEZXăU"kKrvDgb,ZRLIS/9Vyw?Y98GASPp?#L.B)kOkk&yl]01Qt#Sw%dc=kV[Yidu,s>7ăU"jTGe,.8h)/Ce[]/)[]j[9Qbxj$EqFv:TTpH\..wAy\'y;8Ee^DvRQNb(%,lI+)QăU"V)t.SNbptVAS;*fxoNY0eN]uwQf=8RHL'Q<2[K9N0,7AxjY7mhC-Mh%)Z1KEkbaăU"SXNXr>O>5sRyT&BZGGqGDBV+Ml=i7CGgOmomXz7^RWh&N('uMNA0WBz&aE*Ae'găU"7Q==^KC5RU?m$Gi6[HBnt:I]KJ6IVAj,=2^TsMS'oD)#3S6Z+Cq6EmeDW:fWM-EăU"kkDLns4wSn:XV6>#6B*5XxJ-'W']I6MJM'neBUGm[%vas)[Cd\*dBpSjc?+<3*tăU"r2Q6ALO)3U2BUjKSn1b^qLQ.6a%ER.,E/vVw\9P#:e[MbRg0'uA-[tT6HiwT8\LăU"_p6EGaY7Hb(H'T5XaOAopI?84[Qdj8S_vA'D,<nJe1pWe::;Bd.n*3\\c&Gk:A3ăU"$j)1>*0AXs;YnN#_(c3D_a\bXC=x$eQ$WZt&1VO-5TPQ>9O?Eg;-7<q.Fad;Le2ăU"W*Cc#SS#ly^m';9s97qp3rg&2Ng2%QpZMV6RNA#[UL%yEZ6nAr<jCBbwI:]^RE%ăU"JtAU25r\Eglb(2KdC9R'?];n+%28U/N%'hIe_9_Jy]PnK$Ax$%E$iuR;)ExtHI%ăU"q?e/1cMYhfVC$[Q9e,B_NoOJ:;2+#l^:+I&6[>=970Xqa7ma\8[7^87G\WIS:.>ăU"C>&a5Bw5pKIPfCn;LV%yTFJ(sF<Dl?\D\)$+/>;s\aM/<%(j4H\C+rZr_0KB?nDăU"-hm'02VRZZ2<5<_oD5RxnmmF$;2&g&9Ag4p+EHKzq5pM&arIbi7kT8=b*J:t8A?ăU"KeVbi0\)'bfKX0-EcC76Ua%[3o1Mh>JCu>Ij2q8,Dr=HgVR%TsA:WP:J_l'ntpJăU">r9\WQj45]D_dgGj^[WOxD\RtDd8Z\W;ehm$=eG$7s6AZ3YLuqd,g=0P+.^>S>RăU"V/au92MrCd#f$3BB;G,F4i#^^k\8T)L#1P'sEUF4/<Op,3X,fQR-OlwppR/WBRZăU"TR1onx#E=A-f)&%;%KbmK\#;1xL7o^A=abzO->3>rCKZ]1pj1+h2_gxNOkO(+c$ăU"EtcJPJVpob^.=*<<FtPD5(_dok]/gQk_K*SR+JTWn?b#redFoHgZN6to:ytkIICăU"E_GG\<Fn=+A>MbCF?1e78^T/x[Hd_4\hOalWRaTCG^$a7UI9+8ACY3M:Ds*ToX?ăU"Cxnz8,l?a26?q[eGLf%<IhdDrRGkwX,$J?OE<Nh2RQ6ZN^W5[(7rdS'[X0qDfV5ăU"QB2P8Dq53Wv),orXEPCQ[>wO\_1]7X;dC3Prmme$3;xCQHcswpUlQKJVRt[FMRdăU"OBNV)\>t>&I2d'rDP',g(dr7[]wj4Cq'I\IXZk_#cB60>jI,fY7?9S$vfVgx)*\ăU"lu-Mfkhfn:Dd+/=l)$SQ%qQJpW15cJg=Ng:%%iWutI];$q3k7)VM.9lP8L1l5(.ăU"c_+Q.:40Sp3Vm,f$RCffA_p[r,MNcw3CVnJNGL]FX$M#zt%:xmE.dSjjG[g%lsFăU"IaJn.rMPJW9uU2f(W[7d.8di<_P7C$03_?mdH/euw9E&fb0Z^\Lt#FPYnN-#%QKăU"Cbelwl1Np4T$PK=)aMO:xbL#YX>18Yx]N$3p?aDNBu^NdgEZ5JG43BSTPt[4e'năU"_o.N\;Tcm],:rIH1i=WUGp#b>Uhw[qUcx(YuBrY8\'Iu>.b^**hhCi;o4[-:&Y>ăU"G\=\&'dMrei:#OS\xXDZ5)F;x[2%9wO2L?obD1:LmQf^xrVE^<2fUmuqpt>(k.7ăU"8a?S1\P*GGN,mJNo1N1P\11c?ELQ04^:tX\REQ?4)R([mEXYP#E;a;0S^aC2IH\ăU"9gZ5_Kxg^t6Q3$FFTa)?V4/RLiNZ8'+Ez(Wm(9aQ?xB$77qB)MWb_ieEtv.E=>DăU"B+qwajXy8ktW=';GL[1mr)%5h'EfZee2'El+pSLu&nNo&miUy594Isrnd(etjoFăU";'n1)S1I\lmaCYvcDd.0*&61R$<bmv3?cK4N4jJ^TEHe0#_.6h-GtJx6zckW30KăU"e;qNF]V84SU/3oBRHQNo.h(74ED3W4teFU)^9,n<^8lXUTq&\[LncKT>^[0unrJăU"-++GC)J2rVVv#R5SAtOE[[Pfo_2WP-.Kjp/IEm<PbXA%x_DCXkfe)g6Z.NMX^(AăU".^;Ch<+V$q]Ib%#0%vH5xFL3HO$by^-q0J(SebnngOuF5F<<^)<N9rUuYD7K^rjăU"khSG-Qs[qMHTM&PRdT\<[.wKt14tI%.j_dHD//h;WHMVG7QRAoR;_6<'0bdzMu>ăU"3oBCoq%>Co$ctZ/l\-Pp85I]6u=irVgp#&x0_P4Wx\uM9N'[J6.F<$T4UOPB_ECăU"Z;Rrc=8(xxfvEKf.muBRTqq_&mS\MbE&^yf<i#Qzlqi$=\_1-<_DaF5oZib/WV_ăU"OVXsV8>%GI>-3W=KYZuP\MqaI[AYZ?^%T^dmUZipb=Ts6(L;t+l&jB<b#*E$^S]ăU"iaW^*DdhcTNfDrW^=,R\]7C<2f6pw\jkTce[<yHcwDV+s%iw<_8hRgVjv8&S;k0ăU"8(##T\b\MS^RPR_LPSIM)C0FThh:sn%M(d1M>F'sy+s>xRSnySI3u2vnC/\)MOAăU"202HDVCkMa:lO*,wWQSm<Nc8=<)V3N)36O,:nSS4K_hNML4^aq%18\JKfrliR&0ăU"O;Mc*iXh#%';=d;AI762&a%)a+n.J20SM4S&sFtnD_nK7ST+c&=A].)InpG>9K+ăU"F,qs3H#8rc3#RN.?GjeKEfB9%IGV(zBEV%.C6Y)[<8$?Qn(BG?W;]6WtX+nbfi;ăU"jJ=[BF9<3AS?yG]$qY^:e$.;YMT$6#dR+pNc;%lQEr$]bw.3E;9B_;4O;fOT^XtăU"TURR:7[Gbu%>VQ->uJ14_Yc3m:i\U5Gp.9S-(9I/pn)OhP.gE6xUS=7lVvVA/7păU"zvpEiDu]XWnE.,yHDg9[>Zr:cDbF1z5;+?*Yuufrc)ME*SL/q7C,x4F_moMGDaFăU"lZtvV=>^\l[aXSkjjbha>g<D7a$r$H#Pu)i/N(s*O-3-4o[=PE6_CUvO)xo9/c9ăU"Sz5g+fQ1yI0jc6\3i?h4I#7+l5\LtCYohtdUtWuZ$5gLV=eB,3/qOkU21Uq+O\năU"FA3x<OOM9J-^zi23cq.+&7^Bg7xKJg]L13'Uwa0qcj&\MW/NGJ:^Ak&,8,i^vTAăU"bt8FtCPp'zgV\l$x<>aZc-HrxuerecM0nWnTDTjRkVorecgQ-T&e).%*W#L]UIPăU"BD<??*Rd$Sj[mux),QVAp9]AkK=<gHS(a\)2a(Ed4=%UH*O0W&)Id5$LBiJtKHfăU"G&:-k[*Z9Ha.80>6lQC]G4<I&0BuAeY[L0(UMM^6U2CXYKHcmU'Ds/tVohNy8-JăU",fU]'bGl+b4^KIrX\b$x0n%pJrj*4XUpc_a9D)&]Qb>XJ-y)LidTsR,Ah8oHE7KăU"RGg$]p-)sLPziEa;d;&_.c=%aMr;M4b[-:lU$gl<$(85NOCfXJ/'JPN3H%C\^[CăU"8Vt9RDsD2:kt>[/3UU&s:/bYh(2Qa#GQ8-0dLz=5lBpIi-W^I+2=UC'7l;462Y=ăU"p-lkX9T4KU\/e8Er]Vfb8BbNd0,h;tS6?3F;iB4Y]q-#qg5U(U29oMYgxDhNS>>ăU"W3\I-(zJs[oB2vWCM*VESY*3aP%5396-k(pDmwtbS)ki%B/EQIhJ)qBTlsK.R2băU"t8;XgSzM\]?1m]i3ZTrH#vcqTa%j1F%#bFZ*E=;Q_ZL^CSHlJ%=C8-W8:-fQVNlăU"t=miC.y2UW%Rf.NF#'+mwx<JlfnVEM169eKpgo']OnV(OGifHJI*L&JN0Qitn%lăU"'tK'1xbzauZeJ5FW#i,H&$U9N02a_.O8hr[JhzCeVn%<BKX2Ph+(nNr1_Qo:.cGăU"BP:;n[[6Bg9Zj6(t\=8fX&U*jCAlJi<9*L5*mL[\=<2[rCBEXYh$>jo5GlBR0i2ăU"30yL.K/em6A>(1I;<,bQC%b-P9;dQGKUzOp:g4Lig;p2QDeu?<2x*V3&&%vUAw_ăU"y7Thibv<m0d<9l[gJV+;5a(ly;P-aNm$N8tq6T$3#vrZBWwELa9>XVI,Y%+7z5eăU"Gl]MHY:N&'tjV<*0hXU&>VC<#F&nv4zip7#NSH+CsLe2OD(:(L7'ng277?L[[<băU"[1VWffG/SNi.roX90<Yd>0$e1W9Gm[$0AFh&n9Ehx+*f+7frx*,(1_:'IgP)%%>ăU"p':#=&/7C%2Do=0Xs[nQ.+Y7*W)-U3=YR8ABG-(o?g9)u_*SG?ZU6\7(A][e,$MăU"Lf7pB9<?C%m+XKj1vaY.(4[e)+BIe+B6go<aoIK6&(QjA%M;:J&OQ-m#*'67&/+ăU"[%/Q6g%#*R=]=1=>60j14-#\W'I)yOUM.afSs)7Q7o-?#E9D7M\OA5rGUd'7'lnăU"1#I9rwik=8=k9&m<owTjz'1B(p-9iEL)E)u?B=0JWwLHCv60+$iQ>A'Y+e%/n5IăU"E_S'[Zd.v_;X9))TCSGF,s[d;3&=-+UDKp/hGA;7WVYS9g]C-_A/o*$GT*8a3m)ăU"E1Q47TA&./BZiq8Xax&wz\0&/%eA*qONrYOG5cI9+5Y%K2%>$4Y-m&s/g/niuiMăU"ZUI^EFDieN+G=90M'o$^D[7ixK+[zKN^qXTe*kxK+z.uEg(okD(-?x')Cq%*dNeăU"t&,7i'?%1F.l#%'mIG7+M_&u/y-Sy;3/JTSO0C0YH01:k_)-TwU-'Yp'5/55$GhăU"y8174.:j_K9&14SO'Z[+ewy?<)O-v->21M[0(k-<9(vLE+?v$5+S3rZ5Cbi^DO8ăU"?;ewI-[j-(=*k:x;TBm,8CZq1_)=U1p=n>W<U%/J3&Wk9s8yfA(U<ZD3EdQ<D/qăU"WRXG7^5c_/S'r&o-mmeQcliU)KgwR.sQc=c#A)RI5Z7&.)xvJ;%Rac/YKrB*BtuăU"Syu]EYb2kDc'S1D#[#LOOOFd>['<M>7.z9'_3Rzhe/:3+1^4$22t1a&%pj/n[v'ăU"uul_xs[F%b;en<:>h>elTQ6*YGiNAY1c7PeG2[9\s66ZO,u9iR-k%iHdM0;CPu]ăU"$nN,+-YX'M]g?S4^Xw-4fiP5-w9<)OAQ/W(Wg&1dyUjSdByy]bDj*3?b8r+oiOFăU"K)C'Y2Ae(A_dQGqkG(MW5^MZ8NRwinyNbee9Ifw(8br*z)FwBoA>HDsbMoCF;]VăU".u9;F6'8/GrH'(/unT2YU51Koi7MnQiI?hZvot9-?i%%f.tmf;4AI%YGOm[zWo:ăU"cLg_UYm11'#8ep[;t:Qq9X?*Al+.v<Wk4+Sb)7$wiXwtk9cOh$QXklDJuN(:n+DăU"5DR'1JCF8Av/384XAewx>qVEQ4o'k*[FAqOJA\oC1:.t]9'18e?)/(Op-.h5Q4_ăU"IoPl?nC=,#C\*nkE4Z.^=%uJpO&*wl%^ZSoSPm''0KX)b,$gp]CWcs*SgSe\)#AăU"Z+v$oJ'6QRv>faP3eKpYkT?GDu2O_0LmN+F=S;?eYU+)\iUiA9RC#w7iU6(mPJ6ăU"XBl_Wofq'TP8V#e&ybFMO>q0.jt3%\(aBgi(ua$I8R9srPsOMTfKM'bR;v>&0#;ăU"gEvE>mP<C[2U>h*640'u&I;5VR+>p<G)r'$Vauw*SA*4Ykp3jGWd<(2-l4]R=b\ăU".v5aib<6wiVdch)qdpgke*fVGj&^:DBhG:?Q5.x%E9C\DT\XkCb0E)LZPfvKD6găU"rR;'8q31*.Sqx5rY4Ugf:,nqijfNZ:4NweVUz^pFxM_Y.gN-$k\+>CXO,cY<s+9ăU"*b[&[Ke8z+]kx1t'HCfru9CLs(4(Q:gS_JOKXTL_^[($5Z;w=8iGsC;w]#Med%EăU"3jaUt>3z'QQP%Z#&%1Y?osukcSS+TER9Y0dRC,u)O(Nf%Q<QF+qa_^-Zu*HmDOuăU"G4#9w,b=n'9wH6a&Ys'q4jw^jPE<cyX.hSs[SMK5[_tSoA9'D3hNmqKLm3zG^SOăU"EH=-TI2SpjLsPtawZ?3%D.Gx_'iWhPCZol'%lr_Q>]5Q4EH%,Vk,MB>2/1j%G4<ăU"7wdgD;;&SX5wW_s7V)kAgs.rV:r%ZuEkI>GiwTF-S;Ly(i'uUOS=Zy&gMgK0fN)ăU"24R[:&p%W7)c[VOJ(;>6)?ffW=?'3;n32q['aO98V*[Piv4,*t=*Zqd[Au'<8RgăU"yf$oQrOUj2c=Jg?<$cAU38Zt=3s&]No)CSmUBInvNwC:AR%'/pmkoMS=yT,z'Q-ăU"aB(?(\$CPJ-O-Vh*1$<lT=#P\Np5tNL]YPq7QROrbPo2YW';YOn>7dJmFRJq*o:ăU"#h_\z]bFg/oP;gzC+V:P%[\)7WY&Kt-F](FDK%INV#g:=<kIvDb=a.\PY#A6;^săU"sOk*?bW&I[twLffjCzG3bg=G_8aJllja7%ubUFj4d_<LAfwLJl+YKksLbDb>M+7ăU"_Q&Lca+N,wP-V?%/RE#8q8a/9PSx3wO8=PH7%R$)P*$\RHRTRXa'D''%%%$up%(ăU")9%%%%-%*9Y,J?xZ>&%_0%%&FN%%%.%%%%qjsx%kSgfaxf?vb>Smo9$GjdFaJKPăU":S3:+sw+Pc'qU&ZePA_DQgbCaf*L/>6Q%<gia.Nh8\d#=qW)V&EoCrjtIWpPu5jăU"E1hvC>T.8*u41Bg93q2e4-RbMWzg0E%CK$S=dTJ9skVuvU\XlLRs.b#]lmUA:XpăU"CUV(EI8tV_,s)ZEHK,<dlX\>0Khkw'2x28K'P/wX2r(]93[mp?F7UasHkjj\$]5ăU"2*V=T\:SBUp5n;1C,auqa[dHFwLZm/6e>%X9&*?S=:;wO3aD&*%CruGKG05U'gVăU"?<u8TSb+\(U)VB/SaGH/eR;/f[;B'THF13g;lznM*#WqGU>U+WE\Cb$)<_h?<y<ăU":uQ0y*&6?cBR3][Mc$%cB)g;u;x3M5:YdMQ/g,zB*Q*P5&^'g*iYpETJH+CUHm(ăU"BJ*ZwPeeFYJ.d[qu$5Br+WdZtyGA9rMeV1?x06M^XeUz:\dDh6uK7bP<3<xTRp;ăU"YGNq4\G:7nR>X'^6M%Dga(y7=onc/%B6qEWmI\:2^d:#<L3G&+PA6SgHnRWBi3_ăU"UqFv3HG6>PS(fNaFKA>KUXOE??&DB85*5S-.lw>8';0su_*\Pg^fL&9a*:sMZ.?ăU"J7t/0]iN4\Cs14\tosR?IA?&s-bBM]==d7WQofBlYmcq0'S7ScQYKpDgkbBByB%ăU"LP%iD%/nxS=hmaX9FKA+pDp/HCKLDjTu[/J_KkfZ/\Rq5.VA99CVTw(+Ba<V?FTăU"SkmmD*JG[L[]n:$iEnES%eF<82giEALpUfDe\\th2u*K%buf:X%%7Em*[+P_=?2ăU"X(z_F<]Caaynj2>(+O3hB,/'bu'>n,UX\k%G9Ap_\u('Av_CYUeP'66(pcba^o/ăU"_AwuHI2.DUE<[i'zP\:+DXe0J9(:Q^3,=5-=7;qMRNm<6tMIfJP$5nMLaN-l8<:ăU"&^\Vy_gG.Y#]CU9se\ul2Tj'qCC,E<**U7HIr%Dnpuo$[]P#q%D+aVeKaBCDUPDăU"AP+:MuB$?p]C-/]\.284XRqf0C]9tMJroK.cD$-+,ZSjrZ3C$UVLQU\,Ja7G9]?ăU"E+mMLIq\$)8PYzAn\>UqdLGyd#4++.W3?DZ]h]c/Yd?MYqhgNnrgJRwQVEV(ErPăU"iHD>K#xTj^<JEv'*Cmd<gPuD6pYS4Zkps_?HrDLLbXz(fS1xJCefD53I9MOYB*wăU"o7j(qLHMX'W1qqn<9<Z_K(0;wZ<HGZ(FYdzvd,NnT8T4rAPn5koeQ9bo8w\7#fwăU"hPR3i]%NHm=v&9Eb$+5.m8%j?kGEsfX5pO-$s?E:J*>OYw;[+><LC*]F<PinhPZăU"qP:LhN&0iMp00uVm/ANKTf:aUl<IGTU'Z6U5AX,u:PpG#0/Kc5'oDi4Nt_CWd<&ăU"QXErm<V;r(*]=>nYH#mJq7o&y;#7+vesLwo;.=qN(RJN5qE+nMSgdNM9Q+L<(<jăU"X4DS6kQ?wk)Lg^:^Wq'5A6dyq-8eJBu*OA*/P.V4w,dYH-+tb[58$l:S%l^bpkLăU"K3=2ge9h7aBglVpA'$aqM<n58nulBtI/<td4Lj]pFf'gvY/:tsXtGmDu9;ZfRJ.ăU"&&w-#^ggu2V:]4h*)g<FT4eTEFD:8V=8CG4%A5dA)[RT:];GMNc$j0CBNwk,hO\ăU"GTsNzezGLl^yGwmAns^f_qfsrgytx:FbK2DM0*yhDC\<4%IqSi6L[/J2APVPBJlăU"lb.w5.$=N7kH6[(MykK^wq*O^+LXRWxXV%zalSkLqdcHsi0p-I>FU=8U652v3]QăU"'pIlaju*]G)d5Hl--ZsPE5\kuK04GFGw'ahkx^APrFs7A3^Jsj1f804=6i6'3yOăU"hZ)3_BtQEa>Feiq'2s.t]4*>qua'FO&:]dD+[Z*A^JB$P'*AgI54pNbNeb3VIh4ăU"i<bOgGs2U^Zb^4KfskCF:.\it(ZbFZTIL'Zfiv4Y0k7.;Jy9Y#kxM,Y,OjY(^??ăU"0m<I$]lr-1QqT)y&33PJeuy\=%C-j7&VWvJ?(kB?,8>ZG:56OmLPy$r[:GDG,f0ăU"YAT*e]2.*7$D$&^xsbSkmaKTT^Waa4_]pyq]0q&VuVNN#'8(kDi3F->6T^V(#naăU"x.v4>c\[55w,YH)sMh,exD8;H/\RTEswD<osFrJ0s]tthw^S7D[uDa,6PlbVdysăU"NDrJA%AivD$+([/8JUv'0Zk2b29tc]Tah1REo$CT<^>k4]G-41n.uiG;[#xIXIPăU"EGRRpCNVGcuudGnkk5^/VU7k_8Kj*XAJ_;?4BBXH,m/S.lT4--1$v#uz:<4Ao5(ăU"TqyvbYmqF;ItZP>;e,a^lcOQ;+TZ[]bqk\Lt]c*Adu_vi0*4CWp0TphsTX#%'iXăU"9NeQ:?6opasZ#.\d8HiaEZ4O&(,61i>P;+'Kcjn.EYH\r3cCDYT;pcAeFq1hH6KăU"\+_kBa]G'OOqE.Oa*GFBZUzv6vs)Z_hVC5kw_U2ZrU][Y>egZN&5zCm2\[)AbAGăU"#*Jfr$-7B>w+L?\]TgI?lW,KG$.w1ZI8O]_ng%6pL]gI8?%U-yc005$\('ASGd$ăU"'aH#ZD>E#qVq0OWqU^6IW9R0?5lF4=B]C+Pw^c1DoHVK>Gu'7IM_VK>aug#LMKJăU"Xok2jXb*r+\6tuY.IbZzk#F^]tuCe7MLjD_TNO<s^=oV$+6iK0NQXOP37/G2JxcăU"dYC]<xu:4l]AX-GTq\(EpX%^0stm'wnxF^ihBnOgq8RZ*Ar^d5+5*^5;%a*XOVFăU">Ivja4_uuo<FaMfX2LC:;Cqg^sl4SEN9zoqx4IMKtG\c+fLwiO?^EyD+RWh&/9#ăU"Au<6Zo'jFj,FbhO4Dw.lrRcdl=UHxExAIoDh&=ulgFH#)&W;W2&tc(>[]g1c;ULăU"MI%<m^FpSMq[WeL3hu$IUV^j<#>58F3(Y/rP33rD[sBh_n[p3B/6k2)WB=3PIh)ăEND SUBăSUB V5ăU")Trk^&EE1\^^AMS?p\(/83j1A[l9wv=_dD4Zx_#Nj.5k-dDt.vCmAPL8pGP53m\ăU"=B'7*<3V9CGibGZtGd2yLxZYXukSffv_5D#bU+d\#*p)-ERQ;)/:SGpcJbe'_3kăU"N>(>)N\K)GC:$=8\/qgL\+D=.WM7pZN)cTJ_M$fflfqw.#Y=7aL,]\]OVax9l3NăU"Y?ZBW]B)[zZ#;FvW>gWlf2nS7K.xBGVVC5<YN&;6VZIgfct?gGKhe]<R##<AUQgăU";E8&ok<b?Mq#Thi8:HRNjNc\i?<>1quHEjZY=r(2Cq^t6^0C]FOEE9NyDGGhmWkăU"/_M$1DTV/<QihfeS7(tLK<Q\=_o]N$AK=?V>TX45)BFgrHMkAjso,eD<_&kaPgmăU"<[Xl_kz2<1?UZ*'#k)SzbC*L)RwfQhT->sl#7SnW$RMzMir.NUk4GI5HqP\-,GMăU"0]67uqYXT;vH(wZ5+;HrJ?$Bl-08kV%Y5-0lz<A40evL4q<U/?Ax(gj.QB(ei7păU"-.ng3K1zWN0\FGU$MREFnhb(IR[t24p]ZMpbGon*0$:&33HZ'rD#lDWtHqd'N#:ăU"E:WZ&fax/X<?[9K&17aYHrNAIc5PMCuj_Z:C%LP:L8%6]Q)0K_$^TZ/g.s36^ysăU"dQbQ[B'=J0#._gGUcwpTHNaM<7p^)U<>*n09<YR'shm-*Qud.[hfh-1QK7ZnGivăU"neZUe'KM7dt4jsNDsesKM\k;N)&):N&3G#54]iqV9B+Uv#u%p&'9%%9%%[%-%&AăU"Z,J%M7XqL%)%%O%.%%/%%%%%%%%%&%%E%%%%%%%%%wjf%irjS(y'yu%p&'9%%9%ăU"%#%-%u'6+J6mYu'C%;%%%%e%%.%%%%%%%%%%%%E%%(%t)%%%qjs%xXSw(f&up%&ăU"'9%%9%%%d-%p6d+J1s-X#z5%%%%e%%%.%%%%%%%%%%%%E%%%&e#%%%qjsx%WSwfăU"&&up&%'9%9%%%%-.%uQ,+Jcgw)zC#%%%%e%%%.%%%%%%%%%%%E%%%%7%Q%%q%jsăU"xV#Swf&%up&'%9%9%%%%-%(;Z,JeZ8X]&hq%%%4s%%%/%%%%%%%%%%%E%7%%&l%ăU"%%xf%ruqj%Slnk%up&'%9%9%%%%-%*9Y,J?xZ>&%_0%%&FN%%%.%%%%%%%%%&%EăU"%I%%=c%%%qj%sxkS%gfxu%p*+%%%%%+%%+%q[&%%H&n%%%%%ăEND SUBăV2ăV3ăV4ăV5ăCLOSE:IF S=20AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  NEW PLASMA EFFECT              ia53@rapid.co.uk               08-09-98 (03:32)       QB, QBasic, PDS        22   544      NEWPLASM.BAS'New Plasma Effectă'Daniel Daviesă'E-Mail :- ia53@rapid.co.ukă'web :- www.users.rapid.net.uk/ia53/ăă'Different method of generating a plasma, by usingă'the distance to a point as the offset for the sineă'lookup, as opposed to using the X,Y co-ordinatesăăSCREEN 13ăăFOR y% = 0 TO 181ăy2& = y% * y%ăy3& = ABS(INT((y% - 50) * (y% - 50) * SIN(y% / 15)) + 1)ăFOR x% = 0 TO 181ăx2% = x% * x%ăx3% = ABS(INT((x% - 80) * (x% - 80) * SIN((x% + y%) / 10)) + 1)ăăz% = SQR(x3% + y3&) + SQR(x2% + y2&)ăPSET (x%, y%), z%ăNEXT x%ăNEXT y%ăDaniel Davies                  NEW PLASMA EFFECT 2            ia53@rapid.co.uk               08-09-98 (03:32)       QB, QBasic, PDS        27   723      NEWPLAS2.BAS'New Plasma Effect 2ă'Daniel Daviesă'E-Mail :- ia53@rapid.co.ukă'web :- www.users.rapid.net.uk/ia53/ăă'Different method of generating a plasma, by usingă'the distance between points as the offset for the sineă'lookup, as opposed to using the X,Y co-ordinatesăăSCREEN 13ăăOUT 968, pal%ăFOR pal% = 0 TO 127ăOUT 968, pal%: OUT 969, pal%: OUT 969, pal%: OUT 969, pal%ăOUT 968, 255 - pal%: OUT 969, pal%: OUT 969, pal%: OUT 969, pal%ăNEXT pal%ăăFOR y% = 0 TO 181ăy2& = ABS((y%) * (y%))ăy3& = ABS(INT((y% - 50) * (y% - 50)))ăFOR x% = 0 TO 181ăx2& = ABS(((x%) * (x%)))ăx3& = ABS(((x% - 80) * (x% - 80)))ăz% = (SIN(SQR(x3& + y3&) / 10) + SIN(SQR(x2& + y2&) / 10)) * 128ăPSET (x%, y%), z%ăNEXT x%ăNEXT y%ăDaniel Davies                  NEW ANIMATED PLASMA EFFECT     ia53@rapid.co.uk               08-09-98 (03:32)       QB, QBasic, PDS        97   3479     ANIPLASM.BAS'New Plasma Effectă'Daniel Daviesă'E-Mail :- ia53@rapid.co.ukă'web :- www.users.rapid.net.uk/ia53/ăăDIM dist%(8900)ăDIM sintab1%(360)ăDIM sintab2%(360)ăăq% = INT(RND * 25) + 1ăs1a% = (RND * 20) + 55ăs1b% = (RND * 10) + 20ăs2a% = (RND * 20) + 55ăs2b% = (RND * 8) + 11ăăFOR z% = 0 TO 360ăx% = z% + q%ăsintab1%(z%) = 5 * (((35 * SIN(x% / s1a%)) + (15 * SIN(x% / s1b%))))ăsintab2%(z%) = 10 * (((27 * SIN(x% / s2a%)) + (6 * SIN(x% / s2b%))))ăNEXT z%ăăăFOR x% = 0 TO 8900ădist%(x%) = SQR(x%) * 2.5ăNEXT x%ăSCREEN 13ăFOR x% = 0 TO 255ăREAD r%, g%, b%ăOUT &H3C8, x%ăOUT &H3C9, g%ăOUT &H3C9, b%ăOUT &H3C9, r%ăNEXT x%ăăăDEF SEG = &HA000ăDOăymod& = 0ăWAIT &H3DA, 8ăFOR y% = -50 TO 50ăăym& = y% * y%ăFOR x% = -80 TO 79ăxm& = x% * x%ăyd% = dist%(xm& + ym&)ăx2% = x% + m%ăx2% = x2% MOD 360ăc% = ((sintab2%(yd%) + (((sintab1%(ABS(x2%)) + yd%) MOD 254) + 1)) MOD 254) + 1ăadd% = ((x% + 80) * 2)ăăa& = ymod& + add%ăPOKE a&, c%ăPOKE a& + 1, c%ăPOKE a& + 320, c%ăPOKE a& + 321, c%ăăNEXT x%ăymod& = ymod& + 640ăNEXT y%ăăm% = m% + 1ăLOOP WHILE INKEY$ = ""ăPALETTEăSCREEN 0ăWIDTH 80ăPRINT "Plasma"ăPRINT "by Daniel Davies"ăPRINT "E-Mail :- ia53@rapid.co.uk"ăPRINT "web :- www.users.rapid.net.uk/ia53/"ăăăDATA 15,15,15,16,15,15,18,15,15,19,14,14,21,14,14,22,13,13,24,13,13,25,12,12,27,12,12ăDATA 28,11,11,30,11,11,32,10,10,33,10,10,35,9,9,36,9,9,38,8,8,39,8,8,41,7,7,42,7,7ăDATA 44,6,6,45,6,6,47,5,5,49,5,5,50,4,4,52,4,4,53,3,3,55,3,3,56,2,2,58,2,2,59,1,1,61,1,1ăDATA 63,0,0,63,1,0,63,3,0,63,5,0,63,7,0,63,9,0,63,11,0,63,13,0,63,15,0,63,17,0,63,19,0ăDATA 63,21,0,63,23,0,63,25,0,63,27,0,63,29,0,63,31,0,63,33,0,63,35,0,63,37,0,63,39,0ăDATA 63,41,0,63,43,0,63,45,0,63,47,0,63,49,0,63,51,0,63,53,0,63,55,0,63,57,0,63,59,0ăDATA 63,61,0,63,63,0,63,63,1,63,63,3,63,63,5,63,63,7,63,63,9,63,63,11,63,63,13,63,63,15ăDATA 63,63,17,63,63,19,63,63,21,63,63,23,63,63,25,63,63,27,63,63,29,63,63,31,63,63,33ăDATA 63,63,35,63,63,37,63,63,39,63,63,41,63,63,43,63,63,45,63,63,47,63,63,49,63,63,51ăDATA 63,63,53,63,63,55,63,63,57,63,63,59,63,63,61,63,63,63,63,63,63,63,62,62,63,62,61ăDATA 63,61,60,63,61,59,63,60,58,63,60,57,63,59,56,63,59,55,63,58,54,63,58,53,63,57,52ăDATA 63,57,51,63,56,50,63,56,49,63,55,48,63,55,47,63,54,46,63,54,45,63,53,44,63,53,43ăDATA 63,52,42,63,52,41,63,51,40,63,51,39,63,50,38,63,50,37,63,49,36,63,49,35,63,48,34ăDATA 63,48,33,63,47,32,63,46,31,63,46,30,63,45,29,63,45,28,63,44,27,63,44,26,63,43,25ăDATA 63,43,24,63,42,23,63,42,22,63,41,21,63,41,20,63,40,19,63,40,18,63,39,17,63,39,16ăDATA 63,38,15,63,38,14,63,37,13,63,37,12,63,36,11,63,36,10,63,35,9,63,35,8,63,34,7ăDATA 63,34,6,63,33,5,63,33,4,63,32,3,63,32,2,63,31,1,63,30,0,63,30,0,63,29,0,63,28,0ăDATA 63,27,0,63,26,0,63,25,0,63,24,0,63,23,0,63,22,0,63,21,0,63,20,0,63,19,0,63,18,0ăDATA 63,17,0,63,16,0,63,15,0,63,15,0,63,14,0,63,13,0,63,12,0,63,11,0,63,10,0,63,9,0ăDATA 63,8,0,63,7,0,63,6,0,63,5,0,63,4,0,63,3,0,63,2,0,63,1,0,63,0,0,63,0,0,62,0,0ăDATA 61,0,0,61,0,0,60,0,0,59,0,0,58,0,0,58,0,0,57,0,0,56,0,0,56,0,0,55,0,0,54,0,0ăDATA 53,0,0,53,0,0,52,0,0,51,0,0,51,0,0,50,0,0,49,0,0,48,0,0,48,0,0,47,0,0,46,0,0ăDATA 46,0,0,45,0,0,44,0,0,43,0,0,43,0,0,42,0,0,41,0,0,40,0,0,40,0,0,39,1,1,38,1,1ăDATA 37,2,2,36,2,2,35,3,3,35,3,3,34,4,4,33,4,4,32,5,5,31,5,5,30,6,6,30,6,6,29,7,7ăDATA 28,7,7,27,8,8,26,8,8,25,9,9,25,9,9,24,10,10,23,10,10,22,11,11,21,11,11,20,12,12ăDATA 20,12,12,19,13,13,18,13,13,17,14,14,16,14,14,15,15,15,15,15,15,15,15,15ăDaniel Davies                  SMOOTH FADER                   ia53@rapid.co.uk               08-09-98 (03:32)       QB, QBasic, PDS        75   2095     FADE.BAS    'Smooth Faderă'Daniel Daviesă'E-Mail :- ia53@rapid.co.ukă'web :- www.users.rapid.net.uk/ia53/ăă'better than any other faders I've come across in QBă'makes it so that all colours hit black at the same time,ă'the sample image isn't really a good example,ă'but on more complex images the effect is very noticableă'if you use any of this in your programs please give me credităăDECLARE SUB fade ()ăSCREEN 13ăăDIM SHARED r(255) AS INTEGER, g(255) AS INTEGER, b(255) AS INTEGERăDIM SHARED r2(255) AS SINGLE, g2(255) AS SINGLE, b2(255) AS SINGLEăDIM SHARED rinc(255) AS SINGLE, ginc(255) AS SINGLE, binc(255) AS SINGLEăăFOR x% = 0 TO 319: LINE (x%, 0)-(x%, 199), x%: NEXT x%ăLOCATE 1, 1: PRINT "normal fade"ăFOR tmp% = 0 TO 63: FOR tmp1% = 0 TO 255ăOUT &H3C7, tmp1%: r% = INP(&H3C9): g% = INP(&H3C9): b% = INP(&H3C9)ăIF r% > 0 THEN r% = r% - 1ăIF g% > 0 THEN g% = g% - 1ăIF b% > 0 THEN b% = b% - 1ăOUT 968, tmp1%: OUT 969, r%: OUT 969, g%: OUT 969, b%ăNEXT tmp1%: WAIT &H3DA, 8: NEXT tmp%ăBEEPăăFOR x% = 0 TO 319: LINE (x%, 0)-(x%, 199), x%: NEXT x%ăLOCATE 1, 1: PRINT "Smooth fade"ăăPALETTEăăfadeăBEEPăSLEEPăPALETTEăă'Smooth Faderă'Daniel Daviesă'E-Mail :- ia53@rapid.co.ukă'web :- www.users.rapid.net.uk/ia53/ă'if you use any of this in your programs please give me credităSUB fadeăăstages% = 48  'this is how many stages the fade goes throughă              ăăOUT 968, 0ăFOR count% = 0 TO 255ă        'read in palette valuesăr% = INP(969): g% = INP(969): b% = INP(969)ăr(count%) = r%: g(count%) = g%: b(count%) = b%ăr2(count%) = r%: g2(count%) = g%: b2(count%) = b%ărinc(count%) = r% / stages%ăginc(count%) = g% / stages%ăbinc(count%) = b% / stages%ăNEXT count%ăăFOR count% = 0 TO stages% - 1ăFOR tmp% = 0 TO 255ăr2(tmp%) = r2(tmp%) - rinc(tmp%)ăg2(tmp%) = g2(tmp%) - ginc(tmp%)ăb2(tmp%) = b2(tmp%) - binc(tmp%)ăr(tmp%) = r2(tmp%)ăg(tmp%) = g2(tmp%)ăb(tmp%) = b2(tmp%)ăNEXT tmp%ăăOUT 968, 0: FOR setpal% = 0 TO 255ăOUT 969, r(setpal%): OUT 969, g(setpal%): OUT 969, b(setpal%)ăNEXT setpal%: WAIT &H3DA, 8ăNEXT count%ăEND SUBăDaniel Davies                  DOT MORPHED FRACTAL FERN       ia53@rapid.co.uk               08-09-98 (03:32)       QB, QBasic, PDS        391  9887     IFSDOT.BAS  'IFS dotmorphă'By Daniel Daviesă'E-Mail Me at ia53@rapid.co.ukă'or visit my web site at www.users.rapid.net.uk/ia53/ă'if you use any of this please give me some credit.ăăDECLARE FUNCTION GetPixel% (x%, y%, Page%)ăDECLARE SUB xcls (Page%)ăDECLARE SUB showpage (Page%)ăDECLARE SUB Set320x240mode ()ăDECLARE SUB putpixel (x%, y%, Culler%, Page%)ăDECLARE SUB fade ()ăăTYPE vertex             '3d point co-ordinateă	x AS SINGLEă	y AS SINGLEă	z AS SINGLEăEND TYPEăăTYPE pixel              '2d point co-ordinateă	x AS SINGLEă	y AS SINGLEăEND TYPEăăăCOMMON SHARED sine()ăCOMMON SHARED cosine()ăăCONST pi = 3.141593ăăDIM SHARED sine(0 TO 360)ăDIM SHARED cosine(0 TO 360)ăăFOR t% = 0 TO 360ă	sine(t%) = SIN(t% * (pi / 180))ă	cosine(t%) = COS(t% * (pi / 180))ăNEXT t%ăă DIM BitMask%(7)ă FOR Bit% = 0 TO 7: BitMask%(Bit%) = 2 ^ Bit%: NEXTăăătext$ = LTRIM$(RTRIM$(COMMAND$))ăIF LEN(text$) = 0 THEN points% = 4000 ELSE points% = VAL(text$)ăframes% = 50ăăăDIM SHARED R(255) AS INTEGER, G(255) AS INTEGER, B(255) AS INTEGERăDIM SHARED r2(255) AS SINGLE, g2(255) AS SINGLE, b2(255) AS SINGLEăDIM SHARED rinc(255) AS SINGLE, ginc(255) AS SINGLE, binc(255) AS SINGLEăăăDIM SHARED start(points%) AS pixel        'start of animationăDIM SHARED dots(points%) AS pixelăăDIM SHARED objectv(points%)  AS pixel   'VISIBLE FRAMEăDIM SHARED increment(points%) AS pixel  'AMOUNT TO ALTER VISIBLE FRAMEă					  'BY EACH FRAMEăăRANDOMIZE TIMERă       ă	FOR z& = 1 TO points%ă		R = RNDăă		IF (R <= .18) THENă			a = .352: B = .355: C = -.355: D = .352: E = .354: F = .5ă		ELSEIF R > .18 AND R <= .46 THENă			a = .353: B = -.354: C = .354: D = .353: E = .288: F = .153ă		ELSEIF R > .46 AND R <= .74 THENă			a = .5: B = 0: C = 0: D = .5: E = .25: F = .462ă		ELSEIF R > .74 AND R <= .95 THENă			a = .502: B = -.002: C = .002: D = .588: E = .25: F = .105ă		ELSEă			a = .004: B = 0: C = 0: D = .578: E = .501: F = .06ă		END IFă		NEWX = (a * x) + (B * y) + Eă		NEWY = (C * x) + (D * y) + Fă		x = NEWXă		y = NEWYă		dots(z&).x = (x * 300) MOD 320ă		dots(z&).y = (200 - (y * 200)) * 1.2ă	       ă	NEXT z&ăăă'GENERATE THE INITAL RANDOM DOTS, AND THE FERN IT MORPHS TOă	FOR z& = 1 TO points%ă		R = RNDăă		IF (R <= .01) THENă			a = 0: B = 0: C = 0: D = .16: E = 0: F = 0ă		ELSEIF R > .01 AND R <= .86 THENă			a = .85: B = .04: C = -.04: D = .85: E = 0: F = 1.6ă		ELSEIF R > .86 AND R <= .93 THENă			a = .2: B = -.26: C = .23: D = .22: E = 0: F = 1.6ă		ELSEă			a = -.15: B = .28: C = .26: D = .24: E = 0: F = .44ă		END IFă		NEWX = (a * x) + (B * y) + Eă		NEWY = (C * x) + (D * y) + Fă		x = NEWXă		y = NEWYă		start(z&).x = (x + 4) * 32ă		start(z&).y = (200 - (y * 20)) * 1.2ă		ă		objectv(z&).x = dots(z&).xă		objectv(z&).y = dots(z&).yă		increment(z&).x = (dots(z&).x - start(z&).x) / frames%ă		increment(z&).y = (dots(z&).y - start(z&).y) / frames%ă	NEXT z&ăăvp% = 0ăap% = 1ăSCREEN 13ăSet320x240modeăăăFOR SETPAL% = 1 TO 32ăOUT 968, SETPAL%ăOUT 969, (32 + SETPAL%) / 3ăOUT 969, (32 + SETPAL%) / 2ăOUT 969, 31 + SETPAL%ăOUT 968, SETPAL% + 32ăOUT 969, (64 - SETPAL%) / 3ăOUT 969, (64 - SETPAL%) / 2ăOUT 969, 64 - SETPAL%ăăăăNEXT SETPAL%ăăăWAIT &H3DA, 8ăshowpage vp%ăă'do the dotmorphăFOR a% = 1 TO frames%ăFOR B% = 1 TO points%ăputpixel INT(objectv(B%).x), INT(objectv(B%).y), (B% MOD 63) + 1, ap%ăobjectv(B%).x = objectv(B%).x - increment(B%).xăobjectv(B%).y = objectv(B%).y - increment(B%).yăNEXT B%ăăSWAP ap%, vp%ăWAIT &H3DA, 8ăshowpage vp%ăxcls ap%ăIF INKEY$ <> "" THEN GOTO ENDing:ăNEXT a%ăăDOăRANDOMIZE TIMERăst# = TIMERă'calculate the dragonă		x = 0ă		y = 0ă		FOR z& = 1 TO points%ă		R = RNDă		IF (R <= .212527) THENă			a = .088272: B = .520988: C = -.463889#: D = -.377778ă			E = .78536: F = 8.095795ă		ELSEă			a = .824074: B = .281482: C = -.212346: D = .864198ă			E = -1.88229#: F = -.110607ă		END IFă		NEWX = (a * x) + (B * y) + Eă		NEWY = (C * x) + (D * y) + Fă		x = NEWXă		y = NEWYă		vx = ((x + 4) * 23) + 75ă		vy = (180 - (y * 18)) * 1.2ăă		objectv(z&).x = start(z&).xă		objectv(z&).y = start(z&).yă		increment(z&).x = (vx - start(z&).x) / frames%ă		increment(z&).y = (vy - start(z&).y) / frames%ă		start(z&).x = vxă		start(z&).y = vyăNEXT z&ăDO: LOOP UNTIL TIMER - st# >= .5ăăFOR a% = 1 TO frames%ăFOR B% = 1 TO points%ăputpixel INT(objectv(B%).x), INT(objectv(B%).y), (B% MOD 63) + 1, ap%ăobjectv(B%).x = objectv(B%).x + increment(B%).xăobjectv(B%).y = objectv(B%).y + increment(B%).yăăNEXT B%ăăSWAP ap%, vp%ăWAIT &H3DA, 8ăshowpage vp%ăxcls ap%ăăIF INKEY$ <> "" THEN GOTO ENDing:ăIF INKEY$ <> "" THEN GOTO ENDing:ăNEXT a%ăăăst# = TIMERăFOR z& = 1 TO points%ă		increment(z&).x = (dots(z&).x - start(z&).x) / frames%ă		increment(z&).y = (dots(z&).y - start(z&).y) / frames%ă		objectv(z&).x = start(z&).xă		objectv(z&).y = start(z&).yăNEXT z&ăDO: LOOP UNTIL TIMER - st# >= .5ăăăFOR a% = 1 TO frames%ăFOR B% = 1 TO points%ăputpixel INT(objectv(B%).x), INT(objectv(B%).y), (B% MOD 63) + 1, ap%ăobjectv(B%).x = objectv(B%).x + increment(B%).xăobjectv(B%).y = objectv(B%).y + increment(B%).yăNEXT B%ăSWAP ap%, vp%ăWAIT &H3DA, 8ăshowpage vp%ăxcls ap%ăIF INKEY$ <> "" THEN GOTO ENDing:ăIF INKEY$ <> "" THEN GOTO ENDing:ăNEXT a%ăăst# = TIMERăăă	FOR z& = 1 TO points%ă		R = RNDăă		IF (R <= .01) THENă			a = 0: B = 0: C = 0: D = .16: E = 0: F = 0ă		ELSEIF R > .01 AND R <= .86 THENă			a = .85: B = .04: C = -.04: D = .85: E = 0: F = 1.6ă		ELSEIF R > .86 AND R <= .93 THENă			a = .2: B = -.26: C = .23: D = .22: E = 0: F = 1.6ă		ELSEă			a = -.15: B = .28: C = .26: D = .24: E = 0: F = .44ă		END IFă		NEWX = (a * x) + (B * y) + Eă		NEWY = (C * x) + (D * y) + Fă		x = NEWXă		y = NEWYă		vx = (x + 4) * 32ă		vy = (200 - (y * 20)) * 1.2ă	       ă		objectv(z&).x = dots(z&).xă		objectv(z&).y = dots(z&).yă		increment(z&).x = (vx - dots(z&).x) / frames%ă		increment(z&).y = (vy - dots(z&).y) / frames%ă		start(z&).x = vxă		start(z&).y = vyă	NEXT z&ăDO: LOOP UNTIL TIMER - st# >= .5ăăFOR a% = 1 TO frames%ăFOR B% = 1 TO points%ăputpixel INT(objectv(B%).x), INT(objectv(B%).y), (B% MOD 32) + 1, ap%ăobjectv(B%).x = objectv(B%).x + increment(B%).xăobjectv(B%).y = objectv(B%).y + increment(B%).yăNEXT B%ăSWAP ap%, vp%ăWAIT &H3DA, 8ăshowpage vp%ăxcls ap%ăIF INKEY$ <> "" THEN GOTO ENDing:ăNEXT a%ăăLOOPăENDing:ăfadeăSCREEN 13ăSCREEN 0ăWIDTH 80ăăPRINT "                         ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż"ăPRINT "                         łARCLIGHTS FRACTAL DOTMORPHł"ăPRINT "                         ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ"ăPRINT ""ăPRINT "E-MAIL :- ia53@rapid.co.uk"ăPRINT "WWW    :- www.users.rapid.net.uk/ia53"ăPRINTăăSUB fadeăăstages% = 48  'this is how many stages the fade goes throughă	     ăăOUT 968, 0ăFOR count% = 0 TO 255ă	'read in palette valuesăR% = INP(969): G% = INP(969): B% = INP(969)ăR(count%) = R%: G(count%) = G%: B(count%) = B%ăr2(count%) = R%: g2(count%) = G%: b2(count%) = B%ărinc(count%) = R% / stages%ăginc(count%) = G% / stages%ăbinc(count%) = B% / stages%ăNEXT count%ăăFOR count% = 0 TO stages% - 1ăFOR tmp% = 0 TO 255ăr2(tmp%) = r2(tmp%) - rinc(tmp%)ăg2(tmp%) = g2(tmp%) - ginc(tmp%)ăb2(tmp%) = b2(tmp%) - binc(tmp%)ăR(tmp%) = r2(tmp%)ăG(tmp%) = g2(tmp%)ăB(tmp%) = b2(tmp%)ăNEXT tmp%ăăOUT 968, 0: FOR SETPAL% = 0 TO 255ăOUT 969, R(SETPAL%): OUT 969, G(SETPAL%): OUT 969, B(SETPAL%)ăNEXT SETPAL%: WAIT &H3DA, 8ăNEXT count%ăăEND SUBăă FUNCTION GetPixel% (x%, y%, Page%)ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3CE, 4: OUT &H3CF, x% AND 3ă DEF SEG = VidSegment%ă GetPixel% = PEEK((y% * 80) + (x% \ 4))ă END FUNCTIONăă SUB putpixel (x%, y%, Culler%, Page%)ă SHARED BitMask%()ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3C4, 2: OUT &H3C5, BitMask%(x% AND 3)ă DEF SEG = VidSegment%ă POKE (y% * 80) + (x% \ 4), Culler%ă END SUBăă SUB Set320x240modeă 'begin with standard 320x200x256 modeă SCREEN 13ă 'disable "chain4" modeă OUT &H3C4, &H4: OUT &H3C5, &H6ă 'enable writes to all four planesă OUT &H3C4, &H2: OUT &H3C5, &HFă 'clear video memoryă CLSă 'synchronous reset while switching clocksă OUT &H3C4, 0: OUT &H3C5, &H1ă 'select 25 Mhz dot clock and 60 hz scanning rateă OUT &H3C2, &HE3ă 'restart the sequenceră OUT &H3C4, 0: OUT &H3C5, &H3ă 'to reprogram the CRT controller,ă 'remove write protect from the registersă OUT &H3D4, &H11: OUT &H3D5, INP(&H3D5) AND &H7Fă OUT &H3D4, &H6: OUT &H3D5, &HD     'total vertical pixelsă OUT &H3D4, &H7: OUT &H3D5, &H3E    'overflowă OUT &H3D4, &H9: OUT &H3D5, &H41    'turn off double double-scană OUT &H3D4, &H10: OUT &H3D5, &HEA   'vertical sync startă OUT &H3D4, &H11: OUT &H3D5, &HAC   'vertical sync end, reprotect registersă OUT &H3D4, &H12: OUT &H3D5, &HDF   'vertical pixels displayedă OUT &H3D4, &H14: OUT &H3D5, 0      'turn off dword modeă OUT &H3D4, &H15: OUT &H3D5, &HE7   'vertical blank startă OUT &H3D4, &H16: OUT &H3D5, &H6    'vertical blank endă OUT &H3D4, &H17: OUT &H3D5, &HE3   'turn on byte modeă END SUBăă SUB showpage (Page%)ă SELECT CASE Page%ă   CASE 0: OUT &H3D4, &HC: OUT &H3D5, 0ă   CASE 1: OUT &H3D4, &HC: OUT &H3D5, &H4Fă   CASE 2: OUT &H3D4, &HC: OUT &H3D5, &H9Eă   CASE ELSE: ERROR 5          'illegal function callă END SELECTă END SUBăă SUB xcls (Page%)ă SELECT CASE Page%ă   CASE 0: VidSegment% = &HA000ă   CASE 1: VidSegment% = &HA4F0ă   CASE 2: VidSegment% = &HA9E0ă   CASE ELSE: ERROR 5ă END SELECTă OUT &H3C4, &H2: OUT &H3C5, &HFă DEF SEG = VidSegment%ă FOR Address% = 0 TO 19199: POKE Address%, 0: NEXTă END SUBăăAndrew S. Gibson               IMPROVED REALTIME PLASMA       zapf_dingbat@juno.com          08-04-98 (08:37)       QB, PDS                313  12705    QBFPLAS.BAS '--------------------------------ă' QBFPLAS.BAS for QuickBASIC 4.5ă'--------------------------------ă' Realtime plasma by T.C.P. of DiABOLiC FORCE This source is PD. If youă' use it, credit me. Turbo Pascal -> Power Basic: Dieter Folgeră' Power Basic -> QuickBASIC 4.5: Zapf DingBată' Requires the Bit Manipulators Library by:ă' Written By: Luis Espinoza (in quicklib form) it's included.ă' Keys:ă' F1 - change direction of flowă' F2 - change the Plasma table sub type generationă' F3 - Increase the Plasma shift speed.ă' F4 - Decrease the Plasma shift speed.ă' F5 - Increase the Plasma shift Influence.ă' F6 - Decrease the Plasma shift Influence.ă' F7 - Change the Main Plasma type.ă' N - Change the palette.  I - Invert the palette.ă' P - Start the palette slider.  B - make the palette flow backwards.ă' T - Make a new Plasma table. Alt+D - Debug info.ă'-----------------------------------------------ăDEFINT A-ZăDECLARE FUNCTION LSHIFT% (BYVAL Byte%, BYVAL Bit%)      'Shift LeftăDECLARE FUNCTION RSHIFT% (BYVAL Byte%, BYVAL Bit%)      'Shift RightăDECLARE FUNCTION READBIT% (BYVAL Byte%, BYVAL Bit%)     'Read Bit in ByteăDECLARE FUNCTION RESETBIT% (BYVAL Byte%, BYVAL Bit%)    'Reset Bit in Byte (0)ăDECLARE FUNCTION SETBIT% (BYVAL Byte%, BYVAL Bit%)      'Set Bit in Byte (1)ăDECLARE FUNCTION TOGGLEBIT% (BYVAL Byte%, BYVAL Bit%)   'Toggle BităDECLARE FUNCTION BAND% (BYVAL Byte1%, BYVAL Byte2%)     'Binary AndăDECLARE FUNCTION BOR% (BYVAL Byte1%, BYVAL Byte2%)      'Binary OrăDECLARE FUNCTION BXOR% (BYVAL Byte1%, BYVAL Byte2%)     'Binary XorăDECLARE FUNCTION BOC% (BYVAL Byte1%)                    'Ones ComplimentăDECLARE SUB DBG ()ăDECLARE SUB InitSetMode ()ăDECLARE SUB InitPalset ()ăDECLARE SUB MakePal ()ăDECLARE SUB MakeTable ()ăDECLARE SUB PalGet (c%, r%, g%, b%)ăDECLARE SUB PalSet (c%, r%, g%, b%)ăDECLARE SUB PokeInteger (Addr%, Word%)ăDECLARE SUB PokeWord (BYVAL Segment, BYVAL Address, BYVAL Value) 'external libraryăăCONST TRUE = -1, FALSE = 0, Original = TRUE, NEW = FALSEăCONST PI# = 3.14159265358979# 'higher resolution than Dieter Folger's defă'function keys constants, yes F11Key$ & F12Key$ are trapped by INKEY$ăCONST F1Key$ = ";", F2Key$ = "<", F3Key$ = "=", F4Key$ = ">", F5Key$ = "?"ăCONST F6Key$ = "@", F7Key$ = "A", F8Key$ = "B", F9Key$ = "C", F10Key$ = "D"ăCONST F11Key$ = "…", F12Key$ = "†", AltD$ = " "ăăDIM SHARED Stab1(-511 TO 511), Stab2(-511 TO 511), AsynchronousăDIM SHARED direction, Influence, Speed, Backwards, PalSlide, I1, j1ăDIM SHARED PlasmaTypeăă'Seed the psuedo-random number generator with the current time.ăDEF SEG = &H40ăNewSeed& = PEEK(&H6C) + PEEK(&H6D) * 256& + PEEK(&H6E) * 65536ăDEF SEGăNewSeed# = NewSeed& * 64& ^ 4& ' convert to huge integerăRANDOMIZE NewSeed#ă ăSCREEN 13                               ' VGA Mode 320x200ăOUT &H3D4, 9: OUT &H3D5, 3              'change to 320x100 modeăăI1 = CINT(RND * 511) 'starting influenceăj1 = CINT(RND * 511) 'starting speedădirection = Original: Influence = CINT(RND * 15): Speed = CINT(RND * 15)ăAsynchronous = FALSE: Backwards = FALSE: PalSlide = FALSE: PlasmaType = 0ăăMakePalăMakeTableăSLEEP 1: CLSăDOăă    K$ = UCASE$(INKEY$)ăă    IF direction = Original THENă       I1 = I1 + Influence    ' i1 and j1 influence, originală       j1 = j1 - Speed        ' speed of plasmaă       IF I1 >= 511 THEN I1 = -511ă       IF j1 <= -511 THEN j1 = 511ă    ELSEă       I1 = I1 - Influence    ' i1 and j1 influence, otheră       j1 = j1 + Speed        ' speed of plasmaă       IF I1 <= -511 THEN I1 = 511ă       IF j1 >= 511 THEN j1 = -511ă    END IFă   ă    IF Debug = TRUE THEN 'show stats, slows down plasma ? >:}ă       DBGă    END IFă  ă    FOR y = 9 TO 89                   ' 9 -> 89 pixels verticală        i2 = Stab1((y + I1) MOD 255)ă        j2 = Stab1(ABS(j1))ă        FOR x = 10 TO 149             ' 10 -> 149 pixels horizontală            c1 = x - i2: c2 = y - j2' get coloră            IF c1 < -511 THEN c1 = -511 'prevent underflowă            IF c1 > 511 THEN c1 = 511   'prevent overflowă            IF c2 < -511 THEN c2 = -511 'prevent underflowă            IF c2 > 511 THEN c2 = 511   'prevent overflowă            c = Stab1(c1) + Stab2(c2)ă            y8 = y: y6 = y: x1 = xă            y9 = LSHIFT%(y8, 8): y10 = LSHIFT%(y6, 6): x7 = LSHIFT%(x1, 1)ă            Address = y9 + y10 + x7    ' get pixel offsetă            PokeWord &HA000, Address, c      ' This is fast !ă            PokeWord &HA000, Address + 1, c  ' write 2nd pixel >8)ă        NEXT xă    NEXT yăă    SELECT CASE RIGHT$(K$, 1)ă    CASE AltD$: Debug = NOT Debugă         IF Debug = FALSE THEN CLSă    CASE F1Key$: direction = NOT direction 'alter directionă    CASE F2Key$: Asynchronous = NOT Asynchronous 'change table generator sub typeă    CASE F3Key$: Speed = Speed + 1         'more speedă         IF Speed >= 15 THEN Speed = 15ă    CASE F4Key$: Speed = Speed - 1         'less speedă         IF Speed <= 0 THEN Speed = 0ă    CASE F5Key$: Influence = Influence + 1 'more influenceă         IF Influence >= 15 THEN Influence = 15ă    CASE F6Key$: Influence = Influence - 1 'less influenceă         IF Influence <= 0 THEN Influence = 0ă    CASE F7Key$: PlasmaType = PlasmaType + 1 'change table generator main typeă         IF PlasmaType > 2 THEN PlasmaType = 0ă         LOCATE 1, 1: PRINT STRING$(40, 32);ă         LOCATE 1, 1: PRINT "Plasma type:"; STR$(PlasmaType) + AltD$ + "Sub type:";ă         IF Asynchronous = FALSE THENă            PRINT AltD$ + "0";ă         ELSEă            PRINT AltD$ + "1";ă         END IFă         SLEEP 1: LOCATE 1, 1: PRINT STRING$(40, 32);ă    CASE CHR$(66)  'set direction of palette sliding,ă         'Backwards = FALSE - forward rotationă         'Backwards = TRUE - backward rotationă       Backwards = NOT Backwardsă       'write colors again to prevent replicative fadingă       FOR ColorWrite = 0 TO 255ă         PalGet ColorWrite, rd%, gn%, be%ă         PalSet ColorWrite, rd%, gn%, be%ă       NEXT ColorWriteă    CASE CHR$(73) 'Invert Paletteă         FOR IPal = 0 TO 255ă         PalGet IPal, rd%, gn%, be%ă         PalSet IPal, NOT rd%, NOT gn%, NOT be%ă         NEXT IPală    CASE CHR$(78) 'new Paletteă         MakePală    CASE CHR$(80): PalSlide = NOT PalSlide 'Palette sliding onă    CASE CHR$(84) 'new SIN/COS tableă         MakeTableă         SLEEP 1: CLSă    END SELECTă   ă    'do palette sliding if enabledă    IF PalSlide = TRUE THEN GOSUB MovePaletteăăLOOP UNTIL K$ = CHR$(27)ăSCREEN 0, 1                             ' back to text modeăENDăăMovePalette:ăIF Backwards = FALSE THENă   PalGet 0, ored1%, ogrn1%, oblu1%ă   FOR T% = 0 TO 254  'This loop rotates the palette outward (forward).ă     PalGet T% + 1, red%, grn%, blu%ă     PalSet T%, red%, grn%, blu%ă   NEXT T%ă   PalSet 255, ored1%, ogrn1%, oblu1%ăELSEă   PalGet 255, ored%, ogrn%, oblu%ă   FOR T% = 254 TO 0 STEP -1 'This loop rotates the palette inward (Backward).ă       PalGet T%, red%, grn%, blu%ă       PalSet T% + 1, red%, grn%, blu%ă   NEXTă   PalSet 0, ored%, ogrn%, oblu%ăEND IFăRETURNăăSUB DBGăLOCATE 1, 1: PRINT STRING$(40, 32); : LOCATE 1, 1: PRINT "D: ";ăIF direction = Original THEN PRINT "Fwd";  ELSE PRINT "Bwd";ăPRINT AltD$ + "Spd:" + STR$(Speed) + AltD$; "Inf:" + STR$(Influence) + AltD$;ăPRINT "i1:" + STR$(I1) + AltD$ + "j1:" + STR$(j1);ăLOCATE 2, 1: PRINT "A"; : LOCATE 3, 1: PRINT "s"; : LOCATE 4, 1: PRINT "y"; : LOCATE 5, 1: PRINT "n";ăLOCATE 6, 1: PRINT "c"; : LOCATE 7, 1: PRINT "-"; : LOCATE 2, 2: PRINT "P"; : LOCATE 3, 2: PRINT "S";ăLOCATE 4, 2: PRINT "l"; : LOCATE 5, 2: PRINT "i"; : LOCATE 6, 2: PRINT "d"; : LOCATE 7, 2: PRINT "-";ăIF Asynchronous = FALSE THENă   LOCATE 8, 1: PRINT "N"; : LOCATE 9, 1: PRINT "o"; : LOCATE 10, 1: PRINT AltD$;ăELSEă   LOCATE 8, 1: PRINT "Y"; : LOCATE 9, 1: PRINT "e"; : LOCATE 10, 1: PRINT "s";ăEND IFăIF PalSlide = FALSE THENă   LOCATE 8, 2: PRINT "N"; : LOCATE 9, 2: PRINT "o"; : LOCATE 10, 2: PRINT AltD$;ăELSEă   LOCATE 8, 2: PRINT "Y"; : LOCATE 9, 2: PRINT "e"; : LOCATE 10, 2: PRINT "s";ăEND IFăLOCATE 2, 39: PRINT "P"; : LOCATE 3, 39: PRINT "S"; : LOCATE 4, 39: PRINT "L";ăLOCATE 5, 39: PRINT "D"; : LOCATE 6, 39: PRINT "i"; : LOCATE 7, 39: PRINT "r";ăLOCATE 8, 39: PRINT "-"; : LOCATE 10, 39: : PRINT "w"; : LOCATE 11, 39: PRINT "d";ăIF Backwards = FALSE THENă   LOCATE 9, 39: PRINT "F";ăELSEă   LOCATE 9, 39: PRINT "B";ăEND IFăEND SUBăăSUB MakePalăHalf = CINT(RND * 127) * 2: Full = CINT(RND * 254) * 2ăFOR x = 0 TO 255                       ' set paletteă    x3 = x: x2 = x: x1 = xă    x4 = RSHIFT%(x3, 3): x5 = RSHIFT%(x2, 2): x6 = RSHIFT%(x1, 1)ă    PalSet x, x4, x, x * 2ă    PalSet Half - x, x4, x, xă    PalSet Half + x, x, x5, x6 \ 3ă    PalSet Full - x, x, x5, x6 \ 3ăNEXTăEND SUBăăSUB MakeTableăCLS : LOCATE 1, 1: PRINT "Making new Table..."ăSELECT CASE PlasmaTypeă  CASE 0 'normal varies from lake to twisty taffy, originală    PRINT "Normal varies from lake to twisty taffy,"ă    IF Asynchronous = FALSE THENă       PRINT "original standard symmetry. "; : PRINT "(SIN/COS)"ă       Half = CINT(RND * 255) 'standard symmetryă       FOR x = -511 TO 511 ' make tableă       Stab1(x) = SIN(2 * PI# * x / 255) * Half '128, used to be thată       Stab2(x) = COS(2 * PI# * x / 255) * Halfă       NEXT xă    ELSEă       PRINT "original standard asymmetry. "; : PRINT "(SIN/COS)"ă       Half1 = CINT(RND * 255): Half2 = CINT(RND * 255) 'standard asymmetryă       FOR x = -511 TO 511 ' make tableă       Stab1(x) = SIN(2 * PI# * x / 255) * Half1 '128, used to be thată       Stab2(x) = COS(2 * PI# * x / 255) * Half2ă       NEXT xă    END IFă  CASE 1 'striated using ATN/COSă    PRINT "Multi-striated, ";ă    IF Asynchronous = FALSE THENă       PRINT "symmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/COS)";ă       PRINT "Scenery changes."ă       Half = CINT(RND * 255) 'striated symmetryă       FOR x = -511 TO 511 'make tableă       Stab1(x) = ATN(2 * PI# * x / 255) * Half '128, used to be thată       Stab2(x) = COS(2 * PI# * x / 255) * Halfă       NEXT xă    ELSEă       PRINT "asymmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/COS)";ă       PRINT "Scenery changes."ă       Half1 = CINT(RND * 255): Half2 = CINT(RND * 255) 'striated asymmetryă       FOR x = -511 TO 511 ' make tableă       Stab1(x) = ATN(2 * PI# * x / 255) * Half1 '128, used to be thată       Stab2(x) = COS(2 * PI# * x / 255) * Half2ă       NEXT xă    END IFă  CASE 2 'striated using ATN/SINă    PRINT "Land & Horizon ";ă    IF Asynchronous = FALSE THENă       PRINT "symmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/SIN)";ă       PRINT "Scenery changes."ă       Half = CINT(RND * 255) 'striated symmetryă       FOR x = -511 TO 511 'make tableă       Stab1(x) = ATN(2 * PI# * x / 255) * Half '128, used to be thată       Stab2(x) = SIN(2 * PI# * x / 255) * Halfă       NEXT xă    ELSEă       PRINT "asymmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/SIN)";ă       PRINT "Scenery changes."ă       Half1 = CINT(RND * 255): Half2 = CINT(RND * 255) 'striated asymmetryă       FOR x = -511 TO 511 ' make tableă       Stab1(x) = ATN(2 * PI# * x / 255) * Half1 '128, used to be thată       Stab2(x) = SIN(2 * PI# * x / 255) * Half2ă       NEXT xă    END IFă'  CASE 3ă'    PRINT "Land & Horizon ";ă'    IF Asynchronous = FALSE THENă'       PRINT "symmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/TAN)";ă'       PRINT "Scenery changes.";ă'       Half = CINT(RND * 255) 'striated symmetryă'       FOR x = -511 TO 511 'make tableă'       Stab1(x) = ATN(2 * PI# * x / Half) * Half '128, used to be thată'       Stab2(x) = TAN(2 / PI# * x / Half) * Halfă'       NEXT xă'    ELSEă'       PRINT "asymmetry. "; : PRINT "(Curvy)"; : PRINT "(ATN/TAN)";ă'       PRINT "Scenery changes.";ă'       Half1 = CINT(RND * 255): Half2 = CINT(RND * 255)                          'striated asymmetryă'       FOR x = -511 TO 511 ' make tableă'       Stab1(x) = ATN(2 * PI# * x / Half1) * Half1 '128, used to be thată'       Stab2(x) = TAN(16384 / PI# * x / Half2) * Half2ă'       NEXT xă'    END IFăEND SELECTăEND SUBăăSUB PalGet (c%, r%, g%, b%)ăOUT &H3C7, c%: r% = INP(&H3C9): g% = INP(&H3C9): b% = INP(&H3C9)ăEND SUBăăSUB PalSet (c%, r%, g%, b%)ăOUT &H3C8, c%: OUT &H3C9, r%: OUT &H3C9, g%: OUT &H3C9, b%ăEND SUBăăSUB PokeInteger (Addr, Word)ă'Bytes$ = MKI$(Word)ă'First$ = LEFT$(Bytes$, 2): Second$ = RIGHT$(Bytes$, 2)ă'IF First$ = "" THEN B1 = ASC(CHR$(0)) ELSE B1 = ASC(First$)ă'IF Second$ = "" THEN B2 = ASC(CHR$(0)) ELSE B2 = ASC(Second$)ă'POKE Addr, B1: POKE Addr + 1, B2ăEND SUBăAndrew S. Gibson               VESA TEXT PLASMA VIEWER        zapf_dingbat@juno.com          07-28-98 (06:43)       QB, PDS                2162 142959   VTP.BAS     DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VTP.ZIP",4^6:Z&=107096:?STRING$(50,177);ăU"%up()%9%'%%-%qN'uIH):\*('7%%q)%%%/%%%%ht%rufy.Sy'yDdbf>BT]5T9h'ăU"mD/-T<1:I)R35QWY)fVRKaBgGs,(QYCM/#Q#R&a+nj?NHFd0b1lE)7Jn2[&;IF<ăU"EJX#$w4+;0W,zwnS/]W.I=fM6-6AB2x5o/Hxr6]dmh0pc$o?DM9TgcoLOa+,76băU"34k2Sd+EpO>u';6J?]JkL'i&2JM=)0RBB1(kFtIKu)/iVvP(U<>8#170lC?y;BuăU"YUHMCc_IE+qw-8Sm<C,5H4r,So9jZl]<pCOZt$<i#tCG6p9qfj3=-.2*'ZSZ/rbăU"oJ2*K(5wr0g>pX.b(\mSrCW+Q>4nT^UKmEB*+>ZV+FbhsH9a/NSBX>MW=5_fR.1ăU"U>tg2BHu)iEcn[bFqVN[%UidUh>LB'OgOzeVdq-/4?2:;=c)eT[_T8]#Vb*rRGsăU"twr+pOC?*2Yht)uLnU5'p8V'5;W'C9wm5QA[b+Y,$:sKEnQ:RS94iJnk1#jGGmFăU"PSZBMmr*?_Feo=R?6F_nRK?HVss.(C[PQL;d6IHntB:I_PDIY7ruLU[,,#St6$dăU"9.s-OKV.,7J[k9\_Jv=;lQCA5A,4^AED'2pR0,7zz^eDriH^HdNb4iR^7dp:[i/ăU"*]aoA]q^a8a3*Q13[H*THi2\<S^r=XJ_QbAQq+,N54dHzNW-,mQ)%;R;FZ%T7xxăU"jEUOt=]KUIVei5;$%PPU]$<)+(]<X0-3_f:1+:sX7J5'(xOPZ+_2RYno+p5X,/năU"yHeF.e6<E1J[j>8FwmTFX0/zicy-'gC'y=3H_6dr+o/^r-+[=IxUv22A>7_VlbeăU"0mlvvIh8bVf]qP3]JqQE^L,syfZn<lpA3t9c&;mcS$'bZxs2j8EN&z4,jT,R+5GăU"+O<g]G$q?n3?>gPLM)&yD;T-)lBu%p()9%%'%-a%FNu:Iyku*;S#%4%e6%%%/%%ăU"(%%yu%qfxS[gfx%k'dA\s[+w(aO6h#Db'wq;$D*b=X'CKu3I/+$O4jRi\s9p1AWăU";n/WnO0GOOM>/j\(Ygm,<Hl_#A?s[RawHIVe./O7K4W8]g0b?htZt=Mg:%dwCakăU"DSM8=0$.llqUnWZ;RV(0t;uHH1pbg6WoL=#tk\b9o%7T.;-qaD,A2P716mw&uv-ăU"XeS13%o]A._Fw)-I3q[$q\19+u].[=<_V)(G<YpL#0r^%E*\S>c5Z)%&6aH0RIxăU"-gO#yH=i#mF0P:j$vgC$:qGBSs^f./ftgY?*Qw3oh*cCpRyS;w/>j:M&3/b+9a.ăU"#h_uWg'sWO=ZDek1F5:5TK%?83=[l:*8g1S#K#(x#9+K)_Res4/gTe+teeR+.o0ăU"<V\hx;ZU&dZP3.LQkK*%pV:6*PW(Y6-<I+:H6\Xv'O7+pJk;tPZw9a?*7ipJI3IăU"WsGcN4P'2WoT#8%1_f1]Z#M,92j,/Y:<>qUgQ0s(;REg8uE['+fGf$Y\&+tnxzkăU"?pO1YlMa**v#pJ*a8g-PZ?qTNd8B*U??H2K+2'a'UOIVl$[cK+\qhl1VTbg;Q[LăU"Yu'nN_tm*:xUwtK:B=Gxp]T<j,TD?-&cFE;;2&K=F2+r)9o$J6SsiA#x03pq2,măU"e^docHwuAU\Iz8J97twL$HNViefY)86)f2*EG/ETD(albSC;jOrJqN/ICh\/t#aăU"FS-t4y5LQh'/E/G4wR>qjZVP#=CNEo-:?MdndN(AHhqxsiXLN&%Ur:R$0epv:wFăU"eTcX%]8+s(FZ=[JZ5mHeW7'Ag7Ry/*>8,KS4v]ENnaq2<BC'o/'*=o^?MtBM=WgăU")YoC<1j(Y2/Sh4/9i&%j&FFN)&4_tx)J[Ys?83GE[G);9Z8$[]\#^wL,TaPqNBkăU"lL1T:8qHQuFpV'EQp5Cpz,pIm&0yp-,YC.gj7177koQguoAgbU+mVW_bHw3_$+zăU"k9I]-VC05sbtUlSFF]s^)sKo8QAu6<ZX9OoG>rVs#Mv=u1&QeVdg[h'<fO+A7zwăU"]Era\uE2f5lEJc+rms,VJ#8IN<V8x7mKhsY(-[4G[B9BfaJgk$R.tN+u+#vKvwRăU"ZU*ULL+>eA7M2-c:(WVP3Y/X':8&Md-:N/KCLcMBkQn(8:j4L)/Xz.1.=vpZ/s3ăU"9B2(k81<dao*L%;JD:hGv,U)kxDRmIa\uIX$+6cB/+<9enS8E]cgTt)<6t6Knh(ăU"(u?JtHvjT.rK1$JI$%4bp3:DU(m)fRqz(_;r(BP<?EwborDaW[^6[<9ME;ehF/$ăU"5:.yD.c[Eu?,.*o:f*%XA_>kA/dJ2S1gYM<)thX=e^wT.S<'h#%BiQkJD*L'7GxăU",ZVS]?25&F%q[NK10R=k3GDjBH76&&(Y]Bs6p%IoS9tZZ6>L0goQ%Zh/rSYc0j-ăU"BAyI4/&=+Oh96yAclU5QBEMw3%e3bIRxy8*<(b9LcBINdkjdUicBS*B$g/j0%7qăU"[1sm*(I)Y,i7o2KcI7F?BkS*ac1n&Pjn5NL>ZK;%wMEb(4a7Aq%f9G4]aK=HreHăU"O+B\36\du5U4f$8h<-&:^o?.uaBJa*n2.\2pmVsrvXng2H6)>,F0wL\c67q'TcSăU"e>Qhx2.^ZjMVhnNK2D]9cVJ%CnLo/jO?5g#)y2Q1^NmPYa+]8&Kvo#bNfk1pW$,ăU"pVpx78xY\W4F$fX,Pup<g-[d?wnfZkyhtouYt01EROm$[x7((,>n$^2i4E8KYE>ăU"R[GJ98Nf;Wv1ueg?a2[8ObZ2IxXYb0\VnbZ\<1N.r#waS;45>e^>u6cJv9Cs(HpăU"T7\C.(0#Q2;0VuT253m,:kcv(Q5nRFTcRu\QqYTK=<4hw_io9l/FtZFQmM2l)quăU"ga/6hgodhkIbBEvG/vUlS#1MPs0QbZb_:e1&ovUmj<q46L\\:F)$:G)p:)ohZRjăU"UpiXNajo:SCa10LuE$8]rl-I5804AWokvpGJ:to9oxZd$%DN/gtfB,'UE>&Tg[[ăU"IdS>Qx7fat0U/VDpz):k\S%cZTT&)<DdtLqm'#/cJ?-v&Bad&]x;qCAhR5^p\OYăU"+0hK5I(>UXC?v*\3FO#$w9Iv=.h:<jQjfK09Zdo:hl-pjc.I\It]jy^9VQ?_zb2ăU"%6p>oEd3,*,*,'bCu?2QTDB(]ZcJd49$8<t5[CR$PmSt.v9FC);;A$c$CCBxDp5ăU"Si9j9./NXQC1'F1IQ4;GOOBurvZ6Qx'+vs8M>>/VoDhHt+tjr-V6v*h:NqMVXv>ăU"F4JwtCugVZRK>l4tZi/MMj&xlaRn%e;#QZC6x\\73tnlMQVtsO2ZGWzZa)Y8K>yăU"w^?5_G\WgG\1Y_k8ZC[9;Z>Tw.ZSJU)%r3tqb.)kb(*ChJr5>6ppm$#r%en2';VăU"5kkIQ*YJF_-F/Vl/h<LM.ha.YTo5JHUQJciuVjo8emHZ(rhOWSTOM^)_j,JG&+xăU"\VysV8RT$a<Ajs]G9k9.hty;\=mL,K(q]NE8E87$pVYlXYn,B%WZJiF&o)_#E[lăU"84b6%.2^==Dc<aJI&R)(>S4,U06ue:d)]uLTldGIl2]Xs?JwaD3_D2wC-uq81C=ăU"auVnf$6%3=-sPTLh>k.4V\#]YN5ek+IXC4\?*/oYb)FT$1R7+gmeVbO**E'djepăU"Ekb<2v(M;.*ddHe>Q^$ou/Ee.D_t7;LT>%h5/Yn'/..<z7',cEwF&QtrOqlMmPkăU",SwPM*%U]m(XDw+i#8^enxyvVind.Zjk\.5A,Z3?hGp3S_[WKrfSr)hNwSV&XY$ăU"?,t[j#$vfAg]UrcG=GS^14Dl]XfJNUkE61Gcq#M]SFArI,N\g4%5q+?%r<2%2t5ăU"B;VV3J/-.Q1#j2_veUZo58f^t>T4YsI_rV&PhphH#H3OllWEqH#J3QU[<P3W(oRăU",u^_dhTNPvgzq)rP[C,xFQLjE1y-oOR;M(^s+vX5G\Y$6+NEGKPmkb%K*ehxT\MăU"Ts\c^Ph5BU':QcRNz>^paaeEyX%)CN]RCtUbz=Br7)s_dvoVz-G+#QAZOQ>;MB2ăU"&q*Q;R_(fQ;8/3\(3pV*ZSR$oZ:5Yk7-o]'G7y23kzxA+MhqpE2eS5mZ>o2uvYrăU"vtmP)kF^s:42VLIb8z<tIBDyocs$$QZe'cr45;]Q#%s<E$cY_;1SD%UKX.UEP6ZăU"]3L?XSC\44]*Tr^*tk)blj<Us?+6uC](RaURNXoAfoM8mAa$oRNSCGHpyksAaoCăU"Mi-%od9QtMi'B],K4h$9.-GmIn=F,,$p6_,imso+<c)7PJFA?6MPk160b0lO:KQăU"%4&FN+2D==FYSTl:1Vs?&.hPJF&Xfv=Y5-4j^?P<Led:G9?]%Fk;,vuN;:[<CsqăU"Z<4+LxrVBAek+S,sq'7*)eyf:nbVM/#f,L4n^F<_e'Qe90]][FMVnhB91<+D7/+ăU"M7hJbsa]46ID/%7QGDYgzJ'MDW&#d74U8%$2E6=NrjQi8lrI=Awuw)T^rR?7\=?ăU"i0DWp)Lrs_2:Q[P?,fsxW&g\d8pfEtV7_ZfCkSE-7yoabeflc[[z*Q?T1r$BjwFăU"$0tC8OGOI*]%d=8pNEw/Pgp^Va\>SWd;#[WuoA^T_1t>L9udfAqN>SAckxovO3TăU"-BoYI])mrEZ.DdOuYdS*3A34sI_^.QFO=6A,rPJfvNqmhVn*'N)LY8hss_Z)JWMăU"lhl(QH'66k5$)be&dU*SxK/QWf;,,BH>]XK7m&vd'm*B):%^c8=M4nRZ*keTb5JăU"bg'r<5e?K8.9#6D+3xGzkL6O)+%jRjj[Rrj&JlO9LR(:.?_5P0dIFOyp(:%v2PzăU"1Y9,7>zyRhP'q1?)#:XzJ7xV=)3=S)>38k838^icutbMudvjF[Pr*fJr*LLrJv=ăU"-SXe\_<kwtPp3xp+:Or2Pz1=957>DxRhP'jg?)#VXyJ7xY=S3=TS>38k:38$rcuăU"&bMultjY/epT>p(treWwnGGd&hEX7vD;?^eZFZ8xu(q8N$HER?uiu)GtO5oP4TbăU"-e<t2p0Aq^aMiR.)C)r^wPf9IPFo8CNi+]sebv3?[dKyJ-Ko-7oyTq9sd'\:Pd=ăU"JUL0:x]'0lF23^<I,*(7,uxJiP9'9[5mkmm#-kBd40MzVT0ZwHF;&H,+,=JgTEdăU"#d/A4GlffJ4'GO<)a-PdtR.<4&(1+Cc%4O*_9OAldOnDQXdTYGZm]?2LY09tavgăU"u:CdFeA2#'C%K?Oa7)/T-'ZQL'0vV9bmjRD\o*w;RXK=o?_TT$o97$892$TS2fGăU"?5]lLtRg4Be%^z.nS7F:pb'?p'lKKu3V8O8bC*gytAROjIMsG:QH*bO8zrjBsJ4ăU"X=N0o2_2hLFuCglZCSoAS0_v5r&EIS%tUr2K:TppowKRcooS#W,s-um.-#D##ecăU"na]v4(-C\n)[R_19.<F[(9oWZzanZJs>ba*fk$;[4L12f^+q)TR]k9ZR,b]e?FoăU"2M%LCYlZe1<6RXnlcsqgCKUR^N/kdYd]vZ)2Dmc0E^Dtm(E23Cmv,3)EhG_?hA$ăU"IO*Ad4)bue63>(5,n,92EJ$A\+qW9]dZLPJi:fQ66W%YX,w47x?-mg,KArjlt?uăU")g4?of^Pz5[0lth'K2fc]g1-Q;UCin\fk-*FkZueey+$GfnSSBkgIc8]xOIT8VnăU"&cXh5UG>Rr$;0<Lc._E5zl:fI?^axgK?I.pPl4XW)[ZwV2t%cbU)w3;NIZdG5#dăU"5MV9EC+Tt8KZ5)pxFvF;9=)es5aPRQmaaXhok0aCjceOD=U+=;$'%bCMJ-%[UgOăU"L>XE))zG$gD?.b9.%#'#*]c<h]#46[1A4?#(\m/Rsp%u0n3Yj;OSm<<2+R]X0(găU"02tm7d8dtmhe'P<R-_qT-LxFYjU6t;,55Nr%h*C1UL9GSDoVn-Xa[>urDx0_rBlăU"a.-iV$oaL?y;i2I-;J4+7G'+q+1BN:IP73NPH8=5bCJI03K.MRaEo&:R*-tNZqcăU"jc+gG6?HYDak74;c<becAGV]ckdxa;DcQpuIFKB\hDmY3aF/D\jDgwH44c3P$q=ăU"9[7&-W7E';DRA=XySUuk,\$rPmm835)3lxa;R#BX&W82Y1Sj\b<9JX;\Eb<vZAUăU"oSp(sP.aCv.wAaL7dGg#z#:G7(od>Q74>(ax/+OlsI6BCox[^YGJ[T*%nGWtU]năU":V^=0KTI],5aL5LE2i_jCGoS5bXXw:Ak*q\PvM0>:f(Qx+[p;0%<x>M<5Y:r>XxăU"-UIdLaYcoh7B\[2JqmisviUDnFF(XmMDQ,BkZkPw59Y:PSU&j-0wC%'jM.Ho.FWăU"WK4P.TtX*o)-U>+'MEHUonClJOeSmrmo/QM)Z]p=h#R)iAF5[;Uo:#%YeR6:h_$ăU"2L?oe#7Fk_2C-gP1kM+Wa^Zb)%U1X,aIgi>Y)OlXncB%5J&:wW9>N\lrlK?P63;ăU"tBOf7q4XCh:)8NpUgqu6r]C/^F3z*JY%tgQq5tqt$P=T/<8%4Z.j7aX)^l*,,]FăU"g)p4C=,x\EnmpWkP%_F_2c#am%q%[R3FfQU^5L6,AIcA]Dc[S#ZqE1aWO3<k<d7ăU"e<lOWMv_y.kD4bpYF?W4Lt8zT)HeH0>giG#WE]d&j5qjQcwu7\WK9&$UAge/MZkăU"P%_2_AjJ9AWtSvhG;Mw.qvkKb9Cb':)=>y+4RK?QCUZMaTvZwtm&/_.C'P.+[RxăU"sqQ?XIs0YGNRB>F?-R^K[8g[T5a2cW0$G\H7=hkZG81,Ei*<84Q,vnC?^sJVM1=ăU"pAEfI[ie[.&%/,=$pEJlCKC+&Df^n3gM3j*+%RbGKB*GY2p1A>r'Z)xe7PXW$CzăU"pmKH54u+/15+F$g0%9v$E2?+o(5X#I5IoDW'bbB%0pV-pqH3/Jt3D=l:qJG-J]oăU"r,4=\Vvq.TrmS:n85&IMYB(uNW#dW1x+f*t;eR8#t8^[1G/\dHqR:aUtN#+6xm>ăU"eSLb:7)Xri;Anv$;K=WT-?u#nxdGac*w=BDtGUW-w5qaiH[KrcfhR8qc+Cu;38^ăU"Ae9W6.fk.=]<D.t&WWN\Vqi$\h-0n1K)4nBUT#Wa0m>bm=K<QI7cD59CbrkNL\>ăU"dGt[$$WF\5)3fsp&V+\i6K-lH-ETrGf+w]<o.Ke3n8TKRwi537c\D/%o_KdpoG#ăU"J(w)%*7cLdD_cI5'mDdaJ$]U_/b)TC'a]cZ#1FNXgOI3CLxewvQ%MB)P&pKg;LaăU"MT4KY4l6ux-wgisT4?>;BxmLRL__wA>&$8)ko=$,wg#^rSv?v\5p2iP>Qtv>^%9ăU"vDaQjq92^WuEh$ivV(u;F\xc6rT4r\+Z8'\IM[:8RUW_NU/mwNxT=3fZ.v<d&zPăU">.2utD%gQ5y&PUo)O6#*GUd,p;^O0<.GrPyqCT9lj3gI8h_#(SSi[Wek$eeiJj(ăU"%=;LiHbO*'fM.*HyH>ZUf%SJT4=vkN1;_(Rp9q/GX,lALuKU0F\=%Pf=p%g(GA:ăU",v;S+Ybw2i=jvo23,z?DPaXQXhr)'UE^b<;JvPwLL6=KYPiZ3Zg>eH.FJo#+g2)ăU",l.Oq'sf$8H.2RWfRCITjsc(6e?HWM(9W;:GD#JHp*ZWJ?7aomyg\OxVs#d'X&aăU"nS'\K,3I'\6JvNmMjPESu#v,kW'?kSjN;%4[ZAf'C,*jpX/V?)K'Nc<evjvAHADăU"EqY^SL6qQNA+D.9DW#^\rs;.eYVo5Y<S<ck#k9]IorAbO6^(*/FhIY5\YMnFo_6ăU"*.NM<sWm1aU7j1HIaG;IIx'XS;b85In%Ddhz6Nsy[Pc*FS7+k3QvbA9pzMoYG,0ăU"P5\j\:D1A-2E+no)SdROC]3-+c3i-XDwW%t$=Y0,LaKvAEuiz;&zvdF,n2Sp=jWăU"0mOE64OZLA;$dMJE0/T)T%]'uwO='8fq&fQ-o,uUHWDK49AkUqy:d<QJl'#$97,ăU"f7uZ)Rq('F\j>s9;6;dpcCs6iwoD'C:lPn?2g&$bf>iEhrywNc<1XWZQbHvMjwNăU"JW)OedMrrrV7i29>NV3OpAck^WC?-aSBC-p_9nU=4%+yIV\*wk#'Js..H2Hp?;PăU"4YhK3%FWF<>D?&KQ;;Z.U)n*R&\-f8acI#-pl/7Mr&M$9xA++^8Q1,4%;0\%3\DăU"[Jy6t<eTP\akJvS3RrW1&qe#lAsKbA'%V8[IP;6sQaXZlTA9]jWlGJ6B%+YBcjCăU"9](OTS9]</b%+o#UBeOtN+KuhP$C'y.IZ=?T(6YwF0YB:#T2q.'e5;3uw_i_]:HăU"R;=&;h.rcpatxcl5arunE8jEaplR59.<Ue?N31kbm()FL'claa,CfZ<2mAZLU4FăU"cMFPuEOvuRqd:h(rC[a%9ML%\QB-PeJfg;qFWdWOy2TxFKEGH*qP%+Gn%tnG>o4ăU"pJR*a]$e?AvL040f9VcwrnaT,d5Hh?^q#R:l[>2UeZK\:SfJVPfm4^?V5\t9F$[ăU"40Nw\8mdt-.ED..<klq#\4BDDWHj=ToS&BmO=,)4GtaFCA&PM<$1)vZ.l<yKRf+ăU"Y5L#I:&4j^8W;%SBoD<P/'Q)2/UP<nSY-H)$<VZ\s'\;4.G,o5mzPtP$hU__AdGăU"o#0PC&.e6&I2MOoo>VL5rEjXX:tl\DFLhr1H2o9g0ny2E;A>lS\*rN90AAD>W9?ăU"=Ve^BFf:=rgQk#&_T\9.wP21KR:0wiBolYgS#HUT*266W1S%pMabTG0i+Fs(WPFăU"9eRu2jIU<<(?xRXTiyXPL#&Frov7.z_6g44>'2T4fJ2b#kOZ7:jhU9c8W;b7aD+ăU"kS[#60dPH3>Y7hQR#Mqy4Wfvi^j#(P\TI9%R;p>dZ)7KI6luhILHTY$nvf)6E^eăU"O?+&2Pyh9v%0d2gwj05'_SCfzO8.&J>ng*H0Q]d#DcZ*kP^X:m;8o12q6r?nXTNăU"fePWmp\M7'3yzQ:e798Afsrk*xy=WCS0[4Wh,xIa0XLc_UIh*cR&1p?s&Yg*6CFăU"Lfu2k6(]#m'j%,.('<ph.#iqkf$h\t<n9*.s.wN]GHE(15My>$bE8*fy/#aPUrdăU"_a9*+M-.cdW+9$d5Fdb9ZEm9CM>FlsP*2BdZ#VuTT4>\qiJ:;x[Z,N%,K(o?N'PăU"U1w&F^cs1lBj,P-]cA1uGM<V>dDrk1.B,SquKn;lD>xIAZ)6<x&Sz-TNt=RtMY0ăU"*(nH&^<m6-QwSO&bPL&u)3d:$zcaB1:Z.w#NE<0q+0TojX?(qL4qixZfV]q(ShnăU"Xq9=eD'3^SFq-//;NzZg#eJ8qdsF'I(,-kpyGe8qr0*wBPpjF1:4yLUz8FoT;C4ăU"mHsu_?bU/KmdZs#DKC=<XnT<1PkjnkBcn#0rgb?5t3h'(#R)WUMYMxglW:VDeTlăU"].3S3B:v(/7.&BPu\'amPJkR>Znm(QC$JJCZ*7e*6I:ZS$)iJR5;#c=Z8JmFs\DăU"J//T)^q08W61w6T)?hu91SqgB<j*toDXH:uKRbd/>H^6ss((dhdZ>A9?0ZGN/SRăU"a2FX6F4+-Wxu2%[EG#k82v(%wbSZn#R-;9kE?62Hn^Xs(P=)zULt0=pTDo9AiVeăU"T#-XGooQu[&;\?biDCeu$CeaUiiE#s7LKdmJ?SfT=a>ktX8qwK[]AzZbn]n?f/)ăU"gcm*VaVQt+OIzm7TX(Vl6f<vF9J?CoQ:h+<:2u/GV^>,qYOxjbX$lv]p-H4(ctLăU"%]wAH,$Nra>VqYga&pHCoA9oiNG6LK]4Pj]\XLODm-d1#/&&BxmsTf/Wod62IE+ăU"Em#SCRR(3e10Lk&b<$gPUXo&+]ak+-VhOOR&6H,o4wx3C5y.K47):fZtA&)cQ?8ăU"'X%SQ6')Kjn(h19+:pIs1o/P,M-l5>oKW3e9<#T9\\#-&49q824=:-mX5+9w6]:ăU"OJ:Dl-ooKZ91\C94(NOE(bzMGqk6N/8:k(J%Z[N9*KT./6k?*$A(*BuR>AN(/a$ăU"SOk'-_n+(BZ9W50PpDPGrP?U4Yj[7KRY3s?goUq,d>XLV_GMH9-'eK%Pp[k'$WYăU"%T;Q<4<g8#K(zkzN[l*/h_X6<_bAu,qBo7q^RK\wIsPDGMrObsf&DHE.,c-rsDuăU"%p()9%%'%-^%(Fu:IVh?'[l:%%%^j%%%0%%(%%unA%nj&%SgfxKNa:FlSAaX;L]ăU"xh&\L.Mi:SV\L,6a,7)W_3d+;0#uBR64C29e:LF#t%XAg8lkN+,v15a_B7LX,$$ăU"Dh=3Z433yu3333$3IoiI?c\=ZYs?mr;/Mgu;8>gluW;T0v3kyQhY2N/I*>,5>T&ăU"UOB:\<Q:my>$<GWcsrSPi-si%v)cvP\;QHYu_W%fe.^UrEV$[</:frA2GK[ffhMăU"p-)J(xnPE6\=,<<(.3t>ZOeM];T:FC%\SK2X^%:2Ow'B/f1B'[hAv&/]umnX(=lăU";GXkv$PWT[IhSQ_mg=t7BdTZ8^D,3#9dEoBj?;Rd+$:hy4&PVjNEjqHCmx4P3h<ăU"zAY'-;i,;:4=<IDe6K?lt.8hi0k+C$f=oK^l/d5*Q36.4+V)'$TA4YYw^IsGWt\ăU"?ph_9G^h8BCgWv$ItCR\%J[:,WdX?hqC%MTT%$PBPiQ[c$E2u2wYo-2L[nsZ)W1ăU"k+IWGElP]z4G]P5<4M^gG#-[qWT3',g,#uw_13DMgpA4+Y22#EG-_sp('Y/nK+UăU"pM.3:BL/]:'G:126sY9^1m]\$1c'\+k6>&C:+cjRjm7Z,&;V$ONMs\S/QU(U1e[ăU"(#]4.$kT1wL;J*7SjBQ_0rb4ur',567]\YRA+,c*NZgjGl_2B:Vg5qedk)um:PRăU"*leqZPw\iQNUl3mPl2?[aji.Q9&b-t2C81C[mjr<-$P).-z$NNh=/kXkE#kD#1EăU"ZIYQV.=#LQrlRpsm3]6*[_kRdQ)O[Xvs<H>n2DJ#2PeKLl?\,;PO$W3?NGIl]&1ăU"W+&a<?)=08+WD_%0+F*G3iP63GA/6+:ePHsDkgpSTt-t&Nb:<<B0,;$r2ta4yqwăU")&G?/9/#\+*JGr=<Xsq'Q+4u9.+Z[y^+uesUgjUW9:N.FLulQ_p/z6n)OSCL:zQăU"\D5V*BA'Dk.]isc_LO2j(MbOFmdpcLgu95R,^PX?Xg9B,5G:Rv8Tchi.B9Lm)lGăU"sF+/O9IS+yV0svDVnnp$+Z*8#c^[L9oPGr'*l<JH&Ib$)]mEjfDS5:[tV3qI$0OăU"9JYIaC[Qj+T2sZ1Jj_k.65N0ipCj;Go$B%/c]ka/W[7iS_#eUF'pv6N=IH'%vDAăU"\3SG3p[BbV<GOJ;'n0=igLIsMXol6[3D?/ph&%7\oDcOHFI<S\GgR0XwWeW[ohSăU"rWbn]a=Zu=;]=g6v\[,?;wOTnKYr8XhY95J^p55h0dh#JE]S%hH;+EAW&nj7<U_ăU"(XW>)JZBe75R?[41B;wT#YgQd^O+7PK<ZqdK>0WR$XQS;X.VZGOgfy1&#NhPWBZăU"UNpw0m]kaVpR>*4An*,(^$l(<;Dq_w/8kdv6Md0Cs]G,XfZ(hrBK#'6?^MT3p)uăU"&c.%;6X=Qe'80Io6RU4Am<JBtt$7dgkB^%58QQc\yu]T;qQi_eFRE&d,7U=;61+ăU"(WNlrw2ZkLIe<l_q6a:^^T7^j#M2ipA/I3GS)hHwO-*8.N*$Wv,rfZHkk7=;\-GăU"/gbQmZ0T>q;N;alMv_i_ZZ8;dhBq*1+?^DRX0*D=JY1^yxYh0Q5uK551Iu8USDFăU"nI-;tSw'=2ezE-'C]i,+52A*>%$mc2G'?)4pj8'xXGo$AVvBR%Qffkd%U><G3Z.ăU"cG,ow<\11KC7Ay^Q1lHKjvBGnu=Xe.sR5*J[WP19;Ze,dbFo[d4']8Y.t?P8V1săU"lNGaj?CL?gN*>:8)8P(K[]7Zm15N:=bc>h'aWOmR]aa)>fvZ9lS#njVF6Im2'?HăU"XTeqtr4FgpS40;ful7.<3.ic\'*)*YUlTT#x(o'ZMs4TPO&Z/qQu%,SVg<x-oe\ăU".l9I0gjIo1%D2=[Z=e5HE#+oGt2?jPm2k#b+&#Kqefw;BAaASObf]_=uu7r/;4VăU"r,uOV%Y4WKS-4VVtHY6]5SlNblwHK2(45d'DEGuiY'6bv]*zZTF['MN6g>]W4#1ăU"[_cf:%sE<xZhiU[viLO&#FVGO60pgfLf&UCC%H-hud[][)c8(8%X+0c_*kDVq7căU"\v_4Y.I0oP=Z$4qcV,p?Z%6_b:Q*]FqA-kp%F%rGYqpyE5;d1X)Ven#34_repbTăU"bl]?Qpq?+(9h4J/\$h)*e?o&NDYE'#R%N[[Y2CqGTGGnvp,Jo#APRfb\B6/=+o[ăU"K>KFPd\G.$22_:I:S_rK7&(,[s-F<I%rM%l:uc5^c*aBYxPgt2ho(6:79t]%Ss.ăU"[#.pOW/FlmX'a=0(mL[KiWs+<k2K8LMws9J5T.5w/jfE\\ps/wo'<sbYqb>xpG9ăU"3$+_-'KGhXd_rIX=u:jc:<s7CF:Ap07JK1B7?eGT6%Q.duzkoMdY0Y,WC<)RdT%ăU"P5+qVIF'^qbR69h##J__dV,c\GH2<DJwh8#5)#g<JtdlIe=Ku;0O$Jc2pk9IC'găU">0$CdI'\+G;XE3)Va,vpat['(Tl<'g7%H=rWX:x+&3le&r6(%pU7d?Z<BGRDUt;ăU"AE>tl[i9K/+%6^/l[$:z*GW]Sr(PkTqW/NLsWn%pAQ3pvO1T'6,Z,%u73(33.tmăU"7A8^.4Vj]FBlv+;DVx'F.8#6>3xgECjc&(4#s+Dn2F:4yXQPUJ1'fh,]G2a-*guăU"N?<,A*+N/dP%tEtaOc+Tu(4[WWRiQBXHNY%Wn1]3R$o+]2xCHEhDU5WvLbN[-WjăU"e$9k;q+(>QBHu$F>J?EPt6aBPXcrW9ATugq+xS<j(U^IAqqv*cW$\B<+%)/sCX\ăU"ISv3gcKO)Fuf-KtJL-)4<%$JQj;1q+t3kxT_UjnfPgi7\B)2=-3owR:nakL6hj?ăU"'FMtpvOFBvp='3<S,(Oc5Vb40*mw,qxS;gw+W,-DhEcMvB^_iJ;/XoXdQ)s0vDuăEND SUBăSUB V2ăU"IimL7U&EGxZ;Laspf;g=GmSEnqaMvu;^aw/MR4GW-QIuA(CT4K1>a0Ght/7CRA*ăU"a<cxInrE,7MkgPPj\1(VI9.tJhxM*dNmW8'+5XKf=9as*C0eV$B%rpT_ZI&7A#VăU"%Pw?,+7]XP?,ID$N;&OtnkssAHh'lqm%Y5nu?qhnFR*RtKwurJv),\K00r[?.t1ăU"^R:Ar4-$ieO5*.-dRa5iksK*2S7yBi[dvqlY7]I789%zqjCl='[P]+dC6p]5&rEăU",\2N/:,Q,<n]fH('s9.A^Lekc(G>6Q+MRc83_fJoEDpP:9:7K5$Ldty,)gumV4_ăU")8QTfBmXlc-Y]uLu(Yh9rxcIh'ugh6;\+>pj>b)Klii/;f2C,ppd*3\<H9o]No$ăU"C1PbI:wFg(3YOlG%.m0\f0\?1DT9vNGyN0,PB6wXMz=rB/T^+#'6'PhIb(J?<e>ăU"Lm5AQZ?sk+SZV0^Dt\;kRCDiVT].vsEB8\LDC6=<I%5MWpV8)_n-M>l]AC,ZIQ?ăU"hjF*d%o(ST&4jd]88[gATJ$aQbeukO$&t5hkB:G#wZ'9n7\1.>mPV63[5k0fN37ăU"PI'o#lE-HZ/wz0BfB],GvXMGMp1YL,e<N=<>#tjuuZIJb'InXffbx\u;Bk$=(;jăU"?g%KylkW)gjxSFM5^J*;t-1oE08,VuN>2gxDyLA8QYZ7iLc/7K#Gg&B%18ie>e=ăU"nz.y:rtO5K\[3aZO?:Whm9fWYEt[MUIWEm]&D,SX&zQ]:7&bpHkR#?aCte97SK\ăU"tr?7gbD6B-Kap(jYGHm3;WCCepBlu/M,lk)vQ<M-M(%LG\gVW.eM,&\Wd9)2_GuăU"hgNsB+F6p))>Fi-9'*EIp3slr0G(o$U&'-sp.owe*&Kpow<O33oQLPHU=%H.%>VăU"bT'VLc9x>?v^Zq4z9ZYLs<8tH;J6,U-8x3SRz\SpI;duA53#3C1d6Dz>8GG-L)]ăU"\B+a.7/w?#\vi<,'Q44+,rJ]^)Gz#Fma,[*A'*4yTf$*L#[443Ri.(;r;G<guC(ăU"'cc.CSE5_s89UEwP9drMXdq^h$s3pa11-DeerO*sl2dBCoLELa$s[a%s]]2M^g\ăU"U9ZgSx8(-93npo]:V;d/BValO?ECR3SIFZ];fh;1x*8p>;4t+gX#vNC7xzOYB[MăU".lkh4a5Zhh<*P./EX9:m4;YD528DHiU8yF%JhdpN61?Rg.Lp)%5*RwOROw<#3D>ăU"oS%%JkIhNxt'd^TFu/)OI)gIUcLxm>eQL'_8AIHg2?-#(\9?#h&\AEem[_9X?QxăU"n:1#nq>#fs_a8RgbSd9Xk^kk[9s.REW$8/:J^Xq&l]=iW(qUGUJ_236jtf(dUG1ăU"-'lV0bf5L;NN<4CSYY)IDdfFq(+Dd#Tb\\f#uC/>$UtXucBRTx;7'0WrkEv^Fr\ăU"(TE\o.I\.=I\nc[>$IFT?HEcHdhUYJ=m3x#wTxIYQ<?n<?024h>0Q<KP#6y-QD;ăU"r8(av6TG8o?V_;2fpPj?\Tu\x;9w8G8_mN\0&X1Xa+<NO&nnbGxiB./w-Hww7YHăU"p$h=Cm+UGQNU3,p#0be,UH:V;7h:BK5(oe0kYt*iF1QA?_iLRTxX7_?Ii62hx>[ăU"sD$kmFTDJAjx=4,k(E46Kw]f6DN(S$AjGS#V]Z1;mYC$kTuT=t;3bx8d#46#*IKăU"ok]**#We,=U_Oy+y*bi?8_]s'o6=ntL8F#liAC_HCRnFBvhQH[QrTO,%UL5-)7&ăU"TclrujQqX9_6w3,\xjcrdYH_D.6St4)w/cU#YHbBx,_Z+'qvcQx1HShNVUsmcvXăU"$Zx$55'hGo_UAS2FmO-$s7Q%ESI0zg*)k?_/sUF)7SXs.2JW2R97=k\5N4Gj9tfăU"PG&ayQRVNI:tq,>b+x+DSx2)Yf#xsDJok8XqE#K9#_89x?Lx93H1>+st(M&Z/aYăU"CnW4o+$ZBpc7n<9Cp->m]B2NLs)7$[L]PMyEf7AV/jEqRD$*7PJZ<^gG3_uH66+ăU"FZ>xKtCW8cKgJ>G]y)t8:Ndpc(LjO#DmM[z=\>5]HV%ZYnH4:#JsSmxB4TSxw&căU"$RjN0h>1Q1W:VOA*xIV$ki:5VQNKWq<DmY'TQpi)2[PldG3f7/kw'Oa_<j]'8T;ăU"uP5:AX(.r4Skj([$D]1;^8qh]vA5ABJux:*W4apl%>cP'Tjwu:?(X#DH)=Vc0E0ăU"Ic?^wJ'tjSV10nG/,rmog.J2U-2i6)O':&STtS2:\qu54&l4A%cBza9pYrZIaBtăU"GYkJ&o:)LVl>=A+ucF?P8bKMtGt69PuDc0rE?W71T<$9bp/+ADS)Q6zde(o=J%FăU"t/Z\C:k?ia2v6T>qUq;*tg$)<n_n(J2O1WDKY*/UEKOleG5PNQmKT;I/n]d=,,,ăU"M^dOh?E]P+xmC[#)DtW:PH=^*bh=PZ0#f]<nqUYqoSQ>nT(WIEd?T1:k<Ifomy%ăU"14576r6>)k*sc9Z:iV3Q<>+p4T$C'x:R]Egu5F6KhdhZgr&UK[-SduQ].yOgOSYăU"^&#O3wP^PjYP;IvHecI&.R')sG8+p3(tIB/$UZ/f7(TtZ%p4M_h(3]_4H\jqjm5ăU"S'kos)sCjtD%gnTINwdc2:biLZUe>=V^NEX*Srx%Fg&+x^>c>smb7G=VLbs#=>qăU"EI*wLozTGsH\9ma$F_Z%l6)%R7T^UY>n)gvFD8>uE.?=D=E,5't0d;pRphSax4eăU"1T+fN[aqEFSPH/6OBKj1g$ZS+5G]Js=\VZ'dI0:ihlAq[yKQK;TGAAN4sJFrhS_ăU"Dh*z=3Zp<ClZ(]aQmU7CpOb19#JNAF<>\w/b':Q03V5ZeW^BI0vk*R+G6DLO76_ăU"lul_spYu&$q,,.\hzmsy*TV&=&Os%bKE<[Fxncj'RFQ7Lq[eQ22k]nIrE9biUx>ăU"/BywnRllKy8tRAsBg',0gQC6*tG7Jvg]iCFkG*_R]>o4HV\;[Y)H]>+t7(eG1i7ăU"E7s_511\_<C$G8>rr&dBd3s,3LR'Z&TJAUM2*L6?>sIF8Z.sfc>(nYd+q]Ftx.făU"-6XJYQja&:P0a2,q'%,.w0i<BNT*a?C6b1jk/t,Yf?RzHeK8FcFi/O$=F\*\vX+ăU"MM01+K'$Q37l\U4lYGh+H5k3;;(9^$>l0\jhaBmqP_A84k(r1iNt5_1qo9ggwT;ăU"&iR*<R)rnqK4GpIY[.(oAeO(UplK1Ylk[=2RZiI^BG)6DZyJf15b4GchF#cQrO=ăU"L<?9T/YANkJ'AX2WYg\>Di<hC(iTm$/sWv^=7IQtLInXcD:hPu5UU4yj81qZFa?ăU"\\o+>,35q]%a+ZUTDmY:bUo<iYhcJTvA'j3U-Bn#&v#GJPV=oKlU.6Nh\mJ+H<0ăU"P*JN4=seT(Z'bbnZ/v?K<YblR%vcGiN(kjIG_Xf8U6K?7Q7#t.1GvqrW?kxSICnăU"Lr)(5W[Q;Jr_m(c-T1+E='7P06_nm=a%i2kWZ4A7=<e;,'o<XxAt%n\b)3&T+B=ăU"q*NNZU:P1;qGH1iX52CLJ8W3pk71#a\73mP5cA=Ca1kr[u.A68'4#u=WJ:]Q'LNăU"lA/DtN3\b:WA?CF_Gm%4P4#$2T>Y*;_1lES?=&OZ4G'+y/*1zG;.XZ'])K=mR6găU">1'xw3P5AI^wE3jwucL5Ort/XoSIULprMC#.*>Bs3pBqM5KH6&<-Fi$&)t>6wq#ăU"UdE('Gy^XnWol5jYM?>YK7T*pW9qX*H/hX-a\8o$FlJJU<kaM=\L_CQL.1u/jNuăU"<//3?Z%l1D9&Yco57BnbSe#^TZD3VF/[P?c176*&M&YjRB*vlMIq%72cF8k8>uNăU"Mb*DB%fB-m+JGGeC/F7Sy=W\,[X^?6<q8?hVmuE$IM,S#v:gq7yMD>cE6f1CHmLăU"&b%zGF5?BQ%-rSHW7RZ$LE5jgC:T&9i.)#?awGH#Z=quglHpj4FN8^V=J$40\N]ăU",+l(5\skrC*]nyadFW^b#CBuDc/s7tgf;+ACgdjnKN(A+pIKQ4w^jNSRJ&4>BvlăU"^iXP:+fL<N^+nYZQRWvG.cJZ4RHWq1E<t=gfzn>mL_g5k_29F+a*;UhkoSS\.ceăU",SX40TPru:NLU_q8L:__Hpn$%cnL]nO#RhPm(UAhL>X74v_F:b8-=x,u%p()9%%ăU"'%-a%<#upIkXo/';L%4%nR%%%1%%%%yxy%uxyw/(S%uRna4D;C)T8rpLTW<c<S)ăU"mL5UV%B3l]%]f'IC)a5zQ06DFhFFFpZ/00IudggglgwJH0lc:bt0&u#Kp1B5cHeăU"btgXXiG)(%vrS^S%?WT;$ED(eopk%V2Bt(*oR5]*eB?3)I3klS44B)7Zls_0cIDăU"mtux6h*cjYl3OS6+f9QZ%xtvmwI;WoudwqqrMvsA\?Z9$KsnL/urjZM:effYV#\ăU"X.iGhqZGHHv-Lb1+kRF5lAGacn.T;ZJ17X+S)&xy?n\k(PC#\kZr>10TI&%w&?(ăU"Wxzutd(8MAAAA2BB#]CAXiq%uMY?P\B3A%]Aqi#M9otCwTgP,Xud*ledDcuMrlHăU"#d#[;WqN8]h(Qhjux7D^&A*'&Y59xL03svX5jFD?=5t'PXA))w84vGg<[h;4kNNăU"%0QXQ01ae==XP4]ufl:o>Pk,UKOQu+.^rGntMTk<.Nr0sw<Kp#.GlpE>HOSRK3<ăU"er,ZMc;$LfF)J>jH<SlJ2kLnVdM3RuMaA/PXv-M>o-6JXDj$[.BTM3uRUiSik1(ăU"t6unX*rxEaKDe,u.>A*dhWum89?dUKQ$g5PAH4<fa-mZrOpqv$%ld4XwnEr(Xe&ăU"kCSCQk[JS78oQ]vP+]pUMEWX>245D+r[?ZNp72&,JXSrV8pGP>eLs3w[fDlZ,zpăU"hNhB_V^pR-^jV0c/kTi8pa,pF]9\Ple>3d]TUPQ?;8*Mes]wA0hM6-gZZgM$0H;ăU"Am[H2C\Vi]H6:cIg0C485zn7W_XE:FKJg*mtVK0q5'AxxS#fsKMHCT87-T57'9ZăU"X(/Cfbdt#GfYk-:EdPBT,DxLuRksv*;Pszo>v-Hs9xmUC&v$\p7n1WWR*IKZW_+ăU"u>ZWvT^[%c\N^d/n%ZxPLD=M(fejTE&aBrW-^ZG_nItsf.-JpToV46<,O(N.uscăU"6wc=jXB0SJ9i>]D?Qs-bhvumqaU3QgKDQaRrt7XYvq\im=N%snct-T&O*#icSODăU",4a$1^Wk$o6jNoCRTrWEA<DY>cA(^I[,^[/Z\30Q^HrdprxvW4ndaPvOtub^ConăU"b+XrVP%X_4ddUNZ'Fj#3/r'0&zh$.BcM:UIhK=Xt5JP^KW%9/IqIXb3&nWT4t_lăU"*LFvmrmHdS0A*OiVtDnMTHd4*<mR=%VBw;Qx1zMUbRVE6kT#2cCd]#;')/U]PdFăU"cXof2K*GjerP,Ghb?3BD?^4GFBQX_]XHMC#3EU$*xhb-NLgljcoHh4_^r%nL^3FăU"\DZ?p7gVZHaXArxy71uuTf(.ee,xo\3e_pOVe9ujW<o+dtPKWh8cN5y?.TTml39ăU"lF+%6enS+SMv]noM0EY^<Az,L?qf?_48ScJnHed654VN#?(Bw#XseV+LXFSe<pCăU"Y$YM#*ahtjEwYYm*7FD/aAZF21\Y9ptiQxoLx]2]F6l*u6oWHyS9'1[wP]&bul3ăU"2i'^Msq05b/bd>*2#EWUaCD6agfuOV$2V1PI&67V&wPw/mO^O0ROu?oOaL.[W1UăU"&i+UONKIWCr<08I?SHyMyqG>b*Nkm(<pzMnnq)Mf2'S^ZbhzxdtOP_6sqtc[,HjăU"b6%<aihcd_8)hM'6tguknn.pZ9+cMjaw;hr)oW8v^(X1>)iiWOt92hWV-pK_,H$ăU"KtjLZpTdsCL<3.%)lycz(pxbwottF^Nc:dY&Yh>jWbk[20jv$q<aq(N85XWV6UsăU"^nnwd%FMwfxYMcBdn=ztM81Y2D(U20LGWdN97nwTSO'd17XiqYG^6*cvZ_R9,0_ăU"w&P(e$yDEAmT\t:Td17(r2p/bVsL2bRiWY/>P;9Nc6:KkyLYwok,kv]k2/&?k63ăU"u=pLPVXS*CPk6i1mhk>0aIw9WBLoU5mY&u(ah*,v?t%t,>6ES8ZVfy+(h1H4skLăU"Bx=u*Qu;t]w(gNR?*/hoDe*YVw%5i*9s[l2uVuW5k&GetazwhtLyxMn#pDa$I.găU"M])Ky-IYMJfGSxCMCxG'Lnzm'qBtOIW[,fzPikyu?R'^X-LXo;sKo>Gd:'MQ06,ăU"=&N])z[-(mBY9VzH9hdAzu5quSG#l^w<?LWK$8[d%y9Y*U'Fb_HT:?31:\jPBNuăU"mcg.Z_SCio\z>R>5^4WS,pS2*/--topxU0$YHeK63:?o0twlv6]C5oEwca_K=JLăU"sjH]HCltc:SDHUfe%:eLM/UoLpdh\q?8GK._,r%-zMYyzyQdMY9aDMq%Dii2d=\ăU"GEOnXIg?rU0QX-WV<cs4e-7I\y8N)x>OCHA'mAaIdIT.IlsS<2+Ru96sdWI)Q2OăU"aBI1M6elViuJJjtexKhH=:/CBKN2zFiNMwVt)l%cggE*rZ%E$a[B.o%M&GSN\j$ăU"/ps'w.gRVqN-ax0uE5aFdMgVZ0BaMb,rb)^]nI0R7')6839pe&J>:c2ag_uD*7VăU"A>NvHc5?2P\(9,N/oK27+rfp#5VjK>Ogw&[<%R%9d2$ZP+^*HddnTabcIKu#Iy-ăU"j\WTpt'ATO<87[b(5eW]ZKI.Co)>EM;V<iagMyn(*<JuKw1Jw=wPb'('%ZO#R?(ăU"BIxBl8L2C^0f/bvttqU$?ViRZYIcmO4Cp4nGY+a0X0t[/#.(>WvKr<k6C<U?]W7ăU"4>eG+.Zf(cA-m8Lem=mC?D1*=UC,Nz$s(2*n5kNSY;xkU2h6xv&XBVn[]5U3=$<ăU"X%hPd71kxruU^KNL2#G?TkFLeT+dMIY$mp#A0jO^i>Zs1^tJr-yZ-wkb0ZfAuyTăU"qT4t[OwZ7<S&.YoDP(F#uwharH1+ilg9:H,DqTEk7v=qFtLf$LL4W2qQ5uW05%>ăU"T+t9T<2%WVn[#MOMl4n2F86ADFsHs0(+takqMeot'kh;YH-RBzB5y3%42zq5,YcăU"HGGgxla$V1f;TkPwmJK)>'\lRS'\&&9m#\ZL0wZZ8_\r[DY2<rCZ;,#7Yli*,lNăU"Sn\X#h[U/-$=f8s%BxJcDtQ>Ju>'e'Dy^zb)zjzZcH/PH-H5mzRJD?ubUB&01,UăU"6(60%Z1W^i(Yn&w41T,EC>9:#=$r>:=PI0,Z^FmD:BWNOwj6r'R1u*I.7gDpC_săU"mr]eZtC6dp^dT+ZhDp4u9Ms]rYqTZKf&yVGR%(UD',+h(kq=Qdv-NjX(URkcne9ăU"ts_#>v-9H63;eG]/in8lM,K=V/_9\3oTnP%]7V70wQWE]Ak&O(rGwkkts[46uClăU"uzyOGrywFYU\?-Ml#>U/W%b[2HZf79YB$80bw%KgW]ft,A7#kHEl=8nIuKZ*CdwăU"p6lCu-Nj%?;[Mkzg9mY&FnMtlECKMfM6n%9.OT&s-FgRdP_Zu-aJfjh*<&'&0H,ăU"3Cu)U3=A?sX+IVtA.WqkXONTg23ip/N$k[$=Y*,T2Isp]FMrVDXEk;#(a7E_GLLăU"Pka=1ymwMfDSw)az5T$h6Et'^JV;NUk_9+ItPsTi,fD%MPrHxJ/p[Q4.UTAX\DEăU";QBqV(WB9AMHA6Eg^LMOxY&>PD.Xh]%\CCBaAv9W1707\xk6L2Ce^zKC/)PEz7MăU"U^XtxlBF^jRG?=e.$6QKBh2Rz=g8'/MCn#?/_#pd??,P?E-[4^E8Q^8JWpAdElKăU",(wn:EO\W>5#EUCqrlu?r;T*SsipM^6m4AvRjjoK4*,qTVe#1xI.nw7gz3<Y*76ăU"0w6cU4Be0=u2_y'TR4OI?,q#-,sFU#Ue(XHQb8J3pt*:AVlE7%Z+86V#A_Zo7mlăU",x?ZKAw)5k'RT+NGh]h-BbHJSR7416v<6'*)*+L^%y:IVN%Pdcd>LrZpR4hoxV=ăU"m4K-bYj<vG:#Rk#Ekip%MOksvakwf63_8.1Gme#r96I37s_+-a73m+5lVhoe8N?ăU"k8l;m*;miMZ$;d,'lUchZb9Fad'La0nqr.gVjdk]VPRPn*kM8h+Le3szQJ.1bJOăU">>,APM,y;t$&>wTW$Oxo1$Lhu6Daa]))[TB\m^y/bqeg_t?_8mMpa#X[zVkqn)%ăU"hG_TZ%8Hn1c&OR9cf0i*;Z'laHo&nq$mR$mX)UuVjPEV[\,IyPLyNutl0PaRJRbăU"FI[7V#p3xCc8M\hu*dW.RB%wAb=?z(-n11KkQT>X%n&3%h#ZM]xM;kQ(*r[ClCCăU"<CbD*D[SZTxjHf::b'O(WF*Zyxq.xI'7Y>e5om0Fq37Uel9d;6SV-eS_MMl]u3FăU"tDp92Jv7$,2R;RH(xHX[9#OQVOs0]3_Rx;*;^P'QIkS9Vs4eE&uSoO;^FqdV0-*ăU"kC5,;,,K,ohmEZbkoV]^<B]7F8pqmm:6r1fVy&sGNSdEeKwvIv(Ic=:3LUL&iAbăU"OBj%GIBIex^$]H8T_Ut1h5:1rxp0\xFv[<xxr(p7R/t)*7kl%;#Kk=C$Sg*us6FăU"Zm8lca4#sb%K]N%TJq^RpI>R18q'a]uMU<'\g]euUSMiOqL(MXl%[FD3V=-))g/ăU"vL+$nb^Db&CMoKg]e6z?4+-Ppv<^;fU(xF,%=Z=cj_b_N[1Q)_A_(ar^/s;tkDdăU"[PE.K='Q9A(0bb3](ITD_9?J%HeNp7N\X52h45V85c7TCF+$9u\RpMh$NdWWR.kăU"S*NE$$/&K.\Frg#_K75ScK0H-COaSajIpfUFtvm<(p#pca;0oenXj<#((.a1dI/ăU";9r5_(2aTXO7rDN=wW=WLEFwTuyEA#WVrepUGnNjh>)q?jgi2C\kN6E_8euhZ^BăU"o;cAJwpAGt#([8AYh.1MKF;>iqLo9dxD8[Wu3V3)'t6PheWFl=,,XW55I//A]IGăU"\[GcKw:EyAR>xda$;h^1PDSNnvLN^8>Pij]B[u^_U8f#]i4S?c.jl+uqt0j_[^XăU"X.jFD*$0PLYh6j3[?G$-E\u\pvNOtZ0jxc#/VOcJ?v-Ms4s(<=0=9#6FDqF?adhăU"H\1xTiXtTCstSZ__&]IM=Bf[H.*H$3RVg[5pW)5*qG.j7/SQM^9OLe44qm+geCsăU"f.60ZQ+mz->#$rE[A'1exvL-sfsB:iDu:biudV9Bs0)5Up5i/fa)d:,i.73[M06ăU"Veb+4L=*J[_Lk=5>?5j2>VV*3+m2miK(7T217wV%N/IkQEO5[YH-$cYM=sSL^SpăU"G^RMFZF;b%D^8<bLc<&HUjPfrmKb?i^.$5w,6Cp=0K7/FZ73Q3B*xcELa[=x*bdăU"JhZMpPMm8h-HNB-RVG+Yh9Zd7>.=fOUQ-hLcR=V$ShS_jGLwC.0B8aan\&p2b<făU"(H+QBtwEPj'E;l-W+r.gSAUE\r3Z_>LRXDXHPjd2uCa5i5V9Etm3wZ550T0M'I-ăU":\RJDq.9Q3?HVig+gU]ViOsE;x?9hEQnjM.Q/k_2_TayQlct%OLBBFHACoaCs(VăU"F=iEre3JEJ'jC*e'uw<*k<di3Y;>$n3QP)%:\I07)pQr7>OSw3C#q2'x:\-8FJ(ăU"H/=IM-'b:*lRXWd#b(;BKgHy>3-:_43=Fm:Z]K0,KtTCiaJ7r;6WJ^QalaN?3f)ăU"_?Q[X4^Z-=R?>.&r,j^$XrI/cbTvhnE[+SYM>zP?T#vZkm1^'qkI<]^?rE)CBrgăU"Ydm+yso0O5cJj-SN^YI.[,c;o<#KUT+[+m:gPX)</</V+;eIOGCf6Tj$FGm,Fk*ăU"mqL<k5Nk2es*1NZWdQi<?bk?rgF>fi0mRlMh8_^gQg[8Fls%kZe\cBud#2F7Zp$ăU"hlCq#5b7TXGp<NGSk(K3hB&Cu1UWLPsO<&;]do6j+15_aVscc+*Kh'tS\^niD*aăU"P1=&^UMQC]IPj7idH]rjnW^HcA9vVD4J/dSo?f6j%[H)9Gk\%Wg5Zg^Y+4H0^j(ăU"^-'KdV'/VN3cy<dzuMmbJUAndV8IITv&aqqSR1r$HDkaC]r9%*-dng#wnbW('pGăU"fHjv^crc&s3teDe4+kq)Qh8PT/pvTzn$XJb7v]+I&+\y7:UI,S74=+(SuP3=WCoăU"mPX5_/2WOvDwb8K];=AU_aq%-P5P81.SqBstM-(mA;HEtF)1L&yH*s\;N8_4&j(ăU",I0(ZOiv?hu?;AWhneL\Y+F'Yr7rxtM5s%<eua#ThAtH/PIN%n(l][tf_VF$6mlăU"H=XZX7pK$t]fhS'<6WGVJ%r9wrK;u9dU%6Z#87,hp3xpob7yL5Mf5YK.h?JWdQhăU"bl\MMU?]u#_tsarcORa7J:W7u[&e_j.mwRjqY^u_6C.<_\H#_VneqSfqH>k)iQVăU"GexjAb&JnLrM?A3a2a+(ph#W'Tw.:(qpzZf/0=ZVhNw^xMufWmhTg]2V5QWvICFăU"rZk%j5*\f9aEN0_:XhGK<W$q+O_/XAKL;QcuN&NzfDfoGM'PS'_7T'?W)*>O7CVăU"Oa5:-vFg4UgqY6'x8tl9-#U6Vg7b1Y'%bz\GK;i3$AeX-TICx:sb76cw9BG;le4ăU"Oq^SlZ087Nw=cKSVLKByTY0%/,cM7UKK%pl<<YZaAWH9X^sexY:-I#5^mY[1H>NăU"KL/4jZbe/pj:UG95/$fq$nB58Gkl.#i8oAyl]^<tk4TEpHCS):\TJC3sqq:25a]ăU"LlS2sh,c\-E,\Z%AhX&^7kFHNq.b9l-Ypu[7yA[*O>wrm*$7-[C'nQOGp'KsmM:ăU"trB&]#hU08NcDhstSZ21++Fs'N>a%g(w(c#*Jpi:>YY?5;XWK]Cj?Sp?gPzHhQMăU"6q5^E;&d?mSEi66kmEr,Sp]T,*h#r?SWCPKKcQboUx%#L*LwriABXl?jM5^N2nAăU"d-14]c0Z<xH[ZiDEGci7qPH+Zyjr3$?+$/Bsp=]2u9gwhlrx=x>E9ieno9LXxLaăU">+ZfY4'vWb<uw7rP(oJF/E#5f,1*E6wOALd1&Kt(W,UO;2J#:##L-JZnLwXRbhhăU"(n-iyOKtoI\uH?hrS+G.Kib&J<p6hcnN#x74e$OcsUJPA?,RN&TO]4*#\>t:(f4ăU"bN/*U]pG6N;snxTAr?=Oq^2HrAPhBz#fS#i;nYsXM9^_^.j^QqK+^Odw0o>m065ăU"BoPj9'tgkNW#MlZHh2Pq-OD9GKtfBpw.%7CJnTmT=DEx6HujckS3X5nS=;PW#8kăU")<ZI[8hSUs,;cb-DP[gk(8QwBnB>nr>VL$R>CtQ)'9[w4\YGR7F$7ODnZ8p^GN?ăU"oGgR.[-fYiPbJtwpC^6[ZKPT$M,gEWm_a\kp9[d8]IWD-k).4gI_O^N6U^nbA(9ăU"XMR%/e79IA65U=,cBipPgd=u0P^hu>V^N8N?&HcFqqzZoiYMJ*VHaw$/iG>PXslăU"0#OwELCaT.Bra$jG71(uK?Tp:XQ0YG4Nmn?Cq]?>PI%nsPEq\.XR?uQ7<Ia+v+aăU"Cp]h,=hqtaT-(km2AZq&<:=fTf+^8^N*y;s##'#FmJPxGbB<Xov..qa3qHq%-vrăU"?stZ^t:/yQ4AHpjR&3,yt3-,[<^QfBPK:);B2<?Vbjah/hb.7\W&-CK_F2b/=e#ăU"9(#j#88B?CrKN&qSad=$:Qk7DeFH/^EmJGc\ZG(Nmq)amTMVckX:eJ3LHrUjNBeăU">ymS7B\WpL0#.?Di%#tU+AH<To<Pk295WHP8C8k&G;f=:M<3kr3VrKMi.ZUl?_+ăU"PUu7J<M,P]fi^80;wjaW[pO7d$i=v3]x101;;N(Z7bNeZYo#z=#)K/^-Pj0Z6'YăU"(gDmD)F>y(kIgH7B)T<Tl?vCB.ws_R9.8A0vQWVkWWn3_jkl3(lC70I-F1k*5_wăU"\8NTvK&:0\l:eceudAyZnU*ul%&tH4YK9.&6j9$=ab(e>f?:2xkq:$WIb(#&ThnăU"5X7*6)S\%p_/:uUg%XV[]mm9M4]2%I6ve9Ueam4iB.Nchk4JjB%%UM*Q$ahhY4căU"PmsI'uhe3\Ca'-.bD&ltf4#GobHiC0;jUokmq5<jqv<4rJecpu-B4pSO/j+gW>3ăU"eq'xfbjmcsC>D;mlG+m%ITqv[GxUiN;aGAd0ELo[Yxuchs7/ug:D3#F?[>K>N*kăU"lb=fD)\1U:mO<[W>AJ7'JCvKS4#=RC)Z]>&(P>(BaGOb7gJpH8^Gjm-#BZyb5w6ăU"sa<_RG+twAvj<R%^FFfuRTQaEI-IJ(a[-tfEZ':aI9pLm2Gi\'$%t5*M$,xRx:=ăU"rSo24p[He=Q'Bub?s98wpXqBVjVac.][Qb]h;rjOn<7PX7cH/_XVTp9P+HUovoqăU"Y0,2l2D\r9Tu.T$ug'Jaa\pbm:LIPZ+12%R=&/RCe)o\N?SfCo9R7jUK:Y]PUj3ăU"%uWxu'uTUG$$Ct$+biGa#Mlwrbb;lg(]5^q*i+vRVJ:pJ<UZDu>IBMVAK+%pe_6ăU"1K7-TR(4lp^],ONf5upl8_c+N*;Y'UOGCl9?CCa.uer*rk^]$axdvBUy)7RcW0eăU"H^oBCl<4XOpANN-iM.Im8Z,^6<^c?1cF%Pj-l2Op\ZJG'Ap<[=Z4pG[HoX_<u]GăU"Uplb)2hoaf5iiM_J\L5k2r%Xll_nHD8jDmuFcs8K.vn3:4%DIsRNc7mI^P$':=săU"IPKkt$KE<Qj0NVxUha'V\w0Z26?4eHOdYsBkT<56G4?#un7WC8A39V,g%?\em/KăU"8YaE&vwknr9cO,c-9CY.i.e%e2*m^Ju:qq-K%t1$xBU_uHe5m/,ebNaU5:38f_YăU"T[YENYGoVl6't7rb[w7k5)A)2;a'EP[lI?6/)MU0D0M9WmrXotrmpm7p*NqeOb]ăU"4kXx*=ne7^$NNJCJn[4FdW&re,Mk*oDq?N]0kZgi^(?^qibYZMQ=&YTb5eVu2<săU"+Fs/4hhqSKzqiWP_,g3^2U0AM<QrLDp^o14v>Nu1<U:jc:,E;6ZcpjdC0.&)<[căEND SUBăSUB V3ăU"=WT&Y+$c9hFEu=h9h74OP+f_T0AgG#KQ?G1M^*Qua0soFExc3(j#j+ZD'-c6='DăU">AS(U5oPcwcMtd'95Wtb2QVLXt]BH<R$(CdTw>>I.[oo\()G%R&6(T7Y;:4N1_9ăU"1%aV\'/Q0,N+aYm^2D-aKNor_388*k-Id#W\=^co)T+g*+cQ[tZ<k+gvmkhU<A>ăU"n,4L:<0NBD8;[RFq*dK$>Bq/cVKdE^,r(,r'jc'hA(/3$Y(=c%SQ4JQi[o18.]xăU"x.].vN*QX9-Z\u[G\mh2j(H;'(ONKOceas2k+ucF;.[F:+(Ybncj3tf?\_kDO-oăU"b*9*Ia+$F,;,0Px9P0PO83%K4Ks&IPpcEA+uXmTI\*Puv+HhK2MXlQf05V+^8v4ăU"tZ/:*:#8:Ad:uDHOkhsKUi$*gSd/xmzd*a=?4hgX%98M:a)G%:h$SDS,z\f0'xhăU"D]F99/(_$Auo(yFB%?q&7G$J9RG5N?a<#_bTU[Ul6U6QcVXFgF7wAp\'Yx+%nkuăU"9kwX7,U+jB6_(6#Z013C*],U*b&W-5PKK)xOD0w=kfcQAUW0p_t2u*U/9f&%P/.ăU"O*L.^OKFkol.iD^?#?V^?F+m2<Hv]:dO-bXcpmUWb[PW3zo\DP0w'6gQi$fg(j:ăU"8+QGS7G>]/mgf3<q<psYmfLV*oT[:u?9-N5BIwy>I9t3nIJ8S8Cfedcu($g$c/\ăU"c_aCY'UkRu,;JvGa3i2[uqMumrd4>?iC2(Y;<.BNo*8''PGp2_wA+t]Pm_BABdeăU"<cZAK%[ACUJi?y::YNWMdsdgCGMFy%HAOq+/P.$L0Dq=;1QMF'\PcM_.:cbS)=MăU"u.[;mr-ZY(D5l,p0[m)N;,K9ec7F*In\7D]M\X_?TNqeshY9u%:;xh(/RM+AejoăU"_WTGXx7D.<7Sh2SbS$,S8iD0>ds8D4L:ZGcDY:\DihC^)*sQ_w]39M26NwL/(OcăU"UF9=RQ9AMw[+_&GA#+BOaRHWGlU?Wc>WQv)afJ7duF#>>81eMs.M<)VN^NT:7j,ăU"=qfbb('gGqk'+NJf+u2b2^Z*F^w[+3$l(UjTHMtg^,rA7);s^L*RD])xeS)x?_-ăU"JJZ62d&HiIco=dUN3Vt;ZtxodLonCQoAaAPTkjYPwwulkxx8eh>)3Z*Ti]+m'JGăU"s0YqG)TK7RWVS$8$6<i7MODkP&&k,AbNf8:$htVx9'Io\i0<w<vk9]*^M1(LhG,ăU"siIM&9e-/cBar,epuksyPNh?.4mX,\nq$ORp<^IBq/i0l<GA]Gf%]FBK.Z>Vt)BăU"[7gwiqSb[A90\.'/ebu/<<0V7Ur]Cuj9CnCuv+2+m<w/MVVxpc0vR*Tcx%a&VazăU"#86,s<kkVB9rD0RBV2P[BcKQ2=SCEW'PD_Pm.6i%B0Ouc';L#1<RZ^CgUSZ_eU(ăU"orxdOvn&\k%Jd4hdrdXRznNEfNhD.Eof[pqn/qLZm0R4-ZS_$BW&Xk]HfaM[;sEăU"&;_DA9B=%\Q[pFB-U9;e+j-eFYY;4&FdQK;NtLJ6I]+Y,N9tzXyK(z:ctTC6CNBăU"yKd^kD*41:r:tEb:1V:rbFr4RX;n/V*W^E0RPpF,i;3[PWArL8xTfl9(oGduL?,ăU"f,/7hWQ/T/UB82<VI6q*0pfJx<L.Vn24%Dz6f#CvB^O:qUGy7yVF9(9a6v0<Rw8ăU"BKo>WOocEJ)q-[e3sYO]i'8;j-jmKHDZc3Y')bT,%AW,&RvQQ3'%,ic=4a>c>'TăU"c]3X*3gSlM*wLr^$x8bs[cWc9#>G#d0q:FABR):?IOH&.&A6l9)B-;'c3dg/mFFăU"5U6[9JoZHIX<IKI2*'Es&j?S>Q2^2dcJ1?6CI?=UKG,7sqNtq:scFP[JkL#mJ4xăU"P%d9>U=M[VBX0u+m._HTO]m+(x_P#fGIPCS2Zb,U5eG9)D7-Bx&rOjo:-Y(>v%]ăU"/<d;\fQGeG8u*?.eUHUVeg?(0b(0xtjrT%p=h$LJVD,mVd1H\njr.5,M4kd7'\]ăU"k%c>GpY[fm3vI.$$-q'k:iCIG73MSiQ%9$:YZsUOjRu?-7)l--'E,CL28rVCGMoăU"T]Jm>nb)nh59;se9?9rh<(=^S)B/]Qo6]B99M$&9)9c(^joGQDSClm*<1]4H_9hăU"pA25#y/O3Rv<$L94_;EA+cJ&'D,(D7X9FYBYuK-P]#Y[UlaVrrx2iIi?MiCe8PeăU"%d4WV1t368$w03ilBf1,sS-3I5GW0+=h+^DP4<>N90FFA-8Ij/^PXellONje=##ăU"uOKC.])Q],X;,rxMX495We=337OVFX&TrtqJ2RN)lC%=ER,,etb]D%W'R%9eSNfăU"Xo^_?2kR0.<jZYoi-/38A.S=.8S\wuS1]O^)AF%&AlUBnf.ZenezZfvfN?RdTJTăU"orotW/zoUD]s(#(qBEeat$9$^c?(m#Ta%%T:rZ6.mp&-kZ*zADI3=Ag<=Xm+i7GăU"j3i2G89M.S'WGA?O7^eUVrP#PWoRcJwWU=)Nr.>)xJ2D;f<QiT#)0y?l&>lTQlTăU"UCW1+zp^e?-5;L'gOKl9o3TpV.e9rMV9P2_M'IipUF;%,F8y5XN]Z?98QO\$]]oăU"=Jox8WP#tEs$WwQlWSMJQoI=?6uf/]EM]';[*<$0/Q+7Cda*];>:ZJm_B&*[+h_ăU"F.l=^)\j?Z)dCg$0'aCS)HGPhf*.F,CAr]O$:^V_7m>Ql:^t'Gtb?Uf53js#MxbăU"%$4)g)3OH7EV5*A-/DVKDVN=%k'-.#6Fi3+_;k+r1=4wM?,A,)B<eq1mJ3W;;SpăU"hud)Nv(>+*C%&dfM9Q*e(Oc9AN9E^ANj'xAG,ECU4IY+JQ^C7RUj:7V&W*1eFsDăU">+G+i]:W#:Nfi7F>P^kf>DD,DKJiVu0djR/4#qSS4VT$OO[ijVaQwT<97ROT:A6ăU"5PlqXO-gC-5#o?/pVZRY&GM1t>Tbi38G$u9WRVi$aJA^%NO&oON4TJkB4Z?#V.DăU"pD#\lh7L;,TEJ#rADalxeXW3m4+NQj51Ht<w'1,zpa&7V)hr<p<IF11'ZR+>_ZGăU"%i)G+P_(_*ou;EDv,_&4;NozrgZg>e==L$be1D3hNo2Ia%s'60f'+ZJw<<W3ba+ăU"/S3(o=cBieq.$iS/<)di'fD%DY<vgcxhgPHHkONZhA'bcO#qeIg.z7CFcS:bR?văU"Kfe$r=Ao8[JaRK-?,PU[#r+&ruX_iGdAfSBR=E7XpYG9qIU4e9'<:,1$1Y#2_.NăU"i<c&;u\Z3iI0]]kjl_24_aUmOVRITHh*HRWb#72wt07:7O&7AnuC0QToELpFolZăU"pWWn=ms:a_4=gRFd3hy_bAGE1Bkh^LE:QPYTghF%/47KKu>32\kk+YAZ<I#B]mtăU"?PlM?lOn'b-M$Xt6pHkNrLrK^LKkX_4>Hefx]nXcT#$HO8iCAbBI*'>d'gmFBEHăU"ne/buUg*ZUF9iH1<0UCI(uxhxX-dUe=.S<yhPf2,mGmWP-j$oh\s#^HnK:c^>qaăU"^ctuf6Ytrerr/kIpG6gCp6(C$[C?uN1%Qgoi]^0&_?XcEX,YFPitGFcu6I./</:ăU"8BTK>bxd?etJaX$&6+o('qunmCCIByC2D0l+1.1N[h$gf1grRD+(me,Z8#p^alaăU"CZUCRo#BNGR_aYK%,nF_E<)q&.R8R'iw+QslEa^'Ca=l0:bWQJBFTXdD.#TUK_aăU"1&4&F0v:i(BI=g#h\gBFhth/2wL?ffYqo94tjxbtjUhVRNYfiJP)$)JS*.QG<iBăU"gL*nPeXgpZ(TQ#4TsE'2aDDF\Fu704(tV8=Xa\ISI#Ni-\H<MlUW31O]a3jhB/_ăU"VCT9qF)Pk?RN>GFWhFixAn;bqsLkLA*,9]qE19cPZXi_#7\mO1o/zf25h]rcYwiăU"ot(N:WHplTsD;eA*^WY'[j_jS(kjlC+j'j+.i1THg/nSOX,(qZB5#aHYm6a%M&.ăU"SYpQQ,IdcQB(2VuPf9iGQ'q)[^ljHAIPXo-Q,?\Zr;Etf+A,RdgpO/dS(,$[mj3ăU"]=3m8sas_7Wc+KdWGA+;_*1Qo-bAll(p]ilejSIqN,F*AFX:Md02Tc/2^Y/#c&LăU"O\VF\eDP.H<S,vm><p(H#oXmxjselYErIq;720*stW]L]9;s.]l<m0]hM3=3;S3ăU"nZc0;y7tb_gTmlOnCp5?IFSg-ZwP7U0+h^EC3+8Q\9X%ED?3HP9gs*8:Q?C3=RcăU",Vpi86Juq#rjaqj'1QcH7V34NtA=8>(D1\510rBG&&0t)t*tHrh]G63N4pb,EF_ăU"wG=2_J33ID?5Y%F00cnq%up0hdsMT]FFZj7khg'ZR?o;LZvHJdvsNaMK8<u2urNăU"U_Gd8gC8A1T]rj2b2SM[?^wQs_1FHupZ62lgGwQ.Z<H(jt#%,=DDIE&G%)e(RC?ăU"CkU5B.:ev30i6RK_r9tYS<;/1KfsGI&S7t5**u7a7D>$=h8'AXD=4#\jpT1+aoqăU"mD;.&fvduX0RDPD$o&),-i'3XOMf'Nu4UF.G%&MQ:oFQQr1\\:K_QQv%?JE]Bq*ăU"0-\MI/hQmzRQP7)AaN6c8KR'O.;LFJ4,?HjPsaq?]\5$)9U\P#\Edfp7E.1*di+ăU"B:,IG(s13ebF'$iU1%DeaSsDSI\uiRu<YQ7;2D$*V1svxq7>3T[eP#01.lBZa24ăU"JDZl^;nr/4sgY8AYMvI.]A);uq#P:-tBrfTtF2?_>71a(,*^$C_.]F^]F_hVRb)ăU"b2;J&$lMdpr,er$*'4;/HZ]QKqk#juBuu[\><$ZDoTwMR&&1PCw95Q2L'2csTKkăU"j>U2JSu*r_/ra2R*[w;$5i='aF]*$TPb<\;K^((_:fcTu)BFTfl8H8-kwNGq=<0ăU"?fR[yh-8fKjXbhbh3IFs=sbvyjE.y]b,+'4)l;:>G&a3S;Lr5^9g/Pu8GZ-?GzTăU"\PaGY;i^-g');OVY>hgS4+u>g.WO3w=P<.T\HrnY;jc>B[>9vxhohFf5LlFLqmKăU"+Y+I+SnIZ*/sM^gO=WnD[S067)uXrrh)0Q&D<$rl+:dGE?O7w#++'F/O0O6'u2DăU"gl5'tgujWxu%H(H0eD6=JE/G]xaR'r.FQ&xiSbS>=3eJu\Ac3slFtvMH,lUBD(>ăU"J;v(9A(WKXn>tG*ZOPJ6h5_'^Q(Q09y/V%5'e%=%P;j9ATPZ9p/($'/PsqSmNb^ăU"etNM_jkRb+h44lDEgc:tPDbXtelws]WBG$'6LAXuH2x+%p^I4O9;Ii'B/p12p$dăU"'ol?ono-6oV3Gy,F3;O&4_-1*#sZxVYVh?f'Puq.]+Pa6x4KbeuFuRh+0S4xD)năU"eVK%WmQK,Ax_n)K5n;Bi]/W]XD]nGZU'??X\I$KR3yQ.Y/t/xro^o.VEl\vTL/&ăU"SI.S]JqvF3X1?sT4<?==l[JnJ^qxDboMhh4RNCIe<1N:-[%QbUb*8CEkK+AZjA2ăU"0G.UhIx2M>]6UBd^1/]$MciNT-/f?TTRh9o4o>8]^GzmuJU9lN?<k.[Oyr#sNFfăU".stFM%#z&zRMP_%Z-%Q-Www%*Ukg7eq)k=>#.Vg'=D5g#;O4B*0i)?,nO_/Rr?*ăU"FOa6OLOi1d0d&6t&3Ti_E?lRVb59+exu1nCNvk0K-kc-mr3S2>,1j2ox&0qw0S&ăU">u[\&BabN0.T(9QP=MUBh,#2T0A27_&'2kJPK]$U[hnkW.d.vZ.4ne0fDJlSO,/ăU"Sk&3sgHZWbP,iIDv8<v8IhzS(CFtxMJIxfx?syU(1n,V0u&B>H(eslu;QB(#J/[ăU"8=AsAeTZDh\70#H=,=7^'/#rObOZ9O/dofdujGS](OQH&YD'qsDi7+pQpKt2]CYăU"u+RRwtdOCXtd'C/rR^RBZ^6C30b0xP3B/k;&t;w'ap5^a+y]*]dA=1Ho,[0EmU0ăU"F(uEfF0RQB%\G<vBVZ9>Q<0D*F#V.rY^*ij=V#6R>%V)arr:Qb.z$7yQ(f]y]A-ăU"oGSQ8NuoO7b_nc92O7Q?S0)f6Y6F9SIB:Pmp%&vN*d5#YhDF,rFlFfXQL%D\;(AăU"6W:5i&WP-p?3XX/O'U][HWj&B_1w1UwnE\d'.)OVymWPfRlZRe^abDWbqjxJBjLăU"jbJWRT.PGopX)GSU%b<9<tnsPH+E?5Be[.\VzQbZ&2*aXfhi:(kd?9dC$0[<Po(ăU"P57f&,3FzuMDuI=*n[OfZNTCy8YdDC2v>va$B#jpXGRI99x(p'.i-\,HGQHeHh_ăU"zuu3?'?4*?Nr-FE\RbD%9#OdYHGW1:5vhRNAZ9jmt]H.1f8u4EFk>5R^zq?DTcFăU";N,zT/z6zoevj+3%DIo29EAn.vfS<awrXgbBA?asC)Q'?)qFw$LCH#TaY_jN_j^ăU"*5+OgH72s>Gl&QBLu8%ih^mr]'K1\5BsrrYefBOLnN%9wIJ*:)4$(3y]Gfnqn.răU"vbepvlAqs5V8#IRk9pk69Kt:xZLAFXfZ=[X3X'^YDXHo0a*oD?C,vD0F2l:a.urăU":pqb:t41eWcCO=r?S3_o;Dlc,Fz1oD/HU2Q;,(kF]7Y_/Ni'od'$LW#n+1]R2%hăU".?dD?-dcTaSdG=c*UXz?.ug$erofx^\Ia0PPHf$eHZ6aan._+Xav-6%j;P&rxILăU"q\uuOxnh9ANzvtl7Ub2t(s1]AMa>,G*1P?]KX.jeP;/3V<$2XW*dZzWwrgRZG(XăU"4WQ35XkD5AeNhl6p-f'\ChH/BZhs7-[)LXMRjMTn6sv2*sdp2'lS.Z.I:td.wb-ăU"WaL2tCKn],]c3bu)M)':X:68Q*9pt*S5QHQTU&4T9c4$cZ1\_[#8:O7-:k$xRK1ăU"L;GWPLDxFhJ,:/tf7/y:<N=%^D.B<2.7$34_elqtOxXaBP1E?rTYXhKTPziqQ\+ăU"\]]n?LcN38N7+Enqr,LfQqNP9K5373j&i-Qu25y6<'Y*;d2*&b0x'VXBOVKdpyeăU"1ZmSBVZ<:D=%DzE[3J45bKVw?=]&=+c5N-qHF1?hPT]WhgA><gM,2fbFFMn('\xăU"P<I,N47XKFL5;&O6[u\<aB65uTVB28b0?yzqDvY<d$VyCOWEx6-Q,)565D1yME4ăU"pQmM=lim'e6#>og55\66[9%$/Ca+b8)sF,*VWR)*BsbJ%xr<hx*p0.>dgJ'/OE1ăU"t0.=TjZIvmt7rXRIbzY9h.<<f3?)5rt#nnCJ<:q[_pCoj)xGWWU_siDdjFw?lJEăU"IK:Y*Xt7$rvj7zDdx*F&ByI0YDCbK<]L^T[z/1fd7\RT^a^Sc<RY:4foMl(Cm'KăU"cv,(WtooAk<<i_'NYq>knZf/4Q'Yt_WshhYKVIpS_;4lL#79uZ8(6vkm()%DkoaăU"umOyHN4AOLXd1WL/$kPlI8JY[RO/W];aP+9T4ote8l+dy3Oz49vlOWy&n.X13]5ăU"wzZcEmQVA&aa],^e/ZBmBi*[e\AL$&2q0cnQHMFfNF4jk2.Nh*\7wPvT<//hS*#ăU"V/;u3<-]P98SW<PYOC8zQdOG:T&Rww)<)(z#f=,<[qDMrnQVTRQ;3Mn0t3+4+M0ăU"SVb=L\O95yNMZsAh/%hP89h,c6MGCfFLhm#[.aHI&G,/UEPd)i6>1ld?WJ&PsdVăU"N%pwm^v4/W>QSEdZlySk3$eL]LroWdKo2SXg3xf8JHu>=H%$#PVbV8Mwy(Yj*k9ăU"2jpW'*2,x%dZJ3nvY[T&9RE<W^pOKqI\RMT7E63r5&D*wN3(=+X38E+0Lk<biR;ăU"zr(jgrQmU%[Drf=ATp<u^VbZY*9<8:p\vDLdKs_iw5D;.2vpLi#'8:uNIC]MT[găU"f0WP_KiQCUM><wL_5-jT?CDNcb;gE(B/r2'.ZEzRWX$b(T+^ZXo&4dvG^U,01='ăU"92O#?7#*cI/K*OJlJ.\I,IkTK,kszCncGVS;UiNe&9awa2s$CF[]k[GZ(=onDAPăU"za*Hl*s4nQpSN:QXO3yh55R^2q[oiGn16j=BWeLZ2(<.>OLOsJUT)n2itGM'TOFăU"oKWo7aMSC$+tVrq0qEUZ)B^#eQ(s0aR(7IBRh\Rx6Ah::n.PPyTe%l9tfO3xbS*ăU":BmjS8jRA)wd#aLOO%li(Cx(*.(e8:D<o<fF.9Q,rPSFHbO#[m3n8-C0M$2zv9,ăU"I>_*)%%z=l6SW626VFgPBcy/yo3yh(r2Rjt,r+bV55Tmw4Kk1D*<B'\0Ut0GaUQăU"_G8?nLlV(.GaT)jPTjZ;B;s0;N[K7w$+i&+zB6c82Y]q1-9==wuu?\aAi[IZV,JăU"vG(hN'Y0kPH<i*.z>[+(<3AN+Yj[[a^u[I]#b<7YV*T6[2pZ8VcB]IEB-6-0QvGăU"u8w9'7p#tn^*hdIrl'7d>QgAT=,orcfM7=CI0[p9&t5lLCI#z:yI:Z.9egzv,H'ăU"k&hlkMm=)QgUa1E_Dd_Uj%hE%.1ZpYB)wTqYB2TJ+Z30Z:ps&Gv1m?HA$Nih9IaăU"^fZ1\_YHMG0P\CKXX+[6VE2NcqyGniYyZRFDg.2xa(Bz*P<Z.PWlm:?j)q0Vh7găU"zZLO9tNGXd/=?kpl;Zksjm<jb;\B[2wj*[m_l;.8o$%kg<u,a(YiM[PXJhx.hKhăU"YQ;XbydzXhz>0*0);zeIlxlb$\1X;LJPdmc'iUYePZ7ql&2saIRZY*R0/rGWWKWăU"2'WtckUjZls]L9^cjhsNEa3#%ak>mP(D<wEe^n_x+X1.[JWo+NW8yjNLnyo+GNkăU"RhlqxlBxY1\<*F'Fa#918I3cl;1FGB>58t6e//MaNaF5e0i<]^d:wd9dc'myuNnăU"?n)286?T.iFlr[Uhu6+^=l,\O'tzKO)V2x1Q1E]cs$r4a2=G1e-_jHVY[su/;'văU"*Oe]ps;Zlu.+CW6FJd[$fl8dp$\g7Ee]WBLccV]>o1ie(F-Z8(%?);;'k>RHBQOăU"T(j,>*r%wG)R0ZJT+hiIyK(%&c#C6,7Z6EIfE<lt7q%ZaPM7,9i18(PuUf,WGMFăU"X;?niNOg3spaa%C%p8/UYA>QC[i7nT2f*pX(Gxt>I3rm;n-^_owu^*ea)A;SJ'.ăU"a>O=g;\(*>msmRTQCk5Ubi2hYna77gH8.W?'p/1d5v]t*1xk0(.vnZcBdyGfbkiăU"'DAxEmD;<*T;0b]c^HP3G6j:>=VG5vJ5^%F;AYGk<YO9X[5.^t,)$?CG7k9*aIxăU"-?)?z^9-O8q\sh>u>G9<3Ad0)L=^>HLNqFlJUcR*%CYqVuZ:0V?KgLIv7evle(făU"%E3hOzMzG,,WSX+d.K^B5m90C*Ya#Y36lrinQP'1^ugR\P*41J<^D';<hl>E$h-ăU":I%$VJak)pU)'MxzPx,hh%3GY/>l_8zK1^%idMp$L+xCH:k>,7>$-Y,^\*W,*isăU"-)-+U[-Y9>-o_NG):LB<8r60>xXogU$z$CQ/*gJ*>Zh^r'?oazg4:j\jErImz\=ăU"l%rQ\^BsgD$vN;'ONF3Mbf6O4kaB5_2v$a[(.0QTfua?ELBV.2h>;ywsQ?UqT=lăU"rR9QzEF+=0uod#t2I.0/uWbI,tip?YeKjNC#SpXuPocBYI-aS?O0n[K[cq1=bXJăU"hA[/W$4W5V_C%s7Lk)D^16(P0UkGL=U?Ss]XDx?SZbuv8;BlX.hr.jBTkPqmTT1ăU"CWqVv]#L9rc^/c9fAAxTJ(0?&k?x/>Wn?]w5r1Db#FqDW6WRtEUpq^mI,at=49VăU"J5Sp5Cp;Auj+*Obsc)^LNOWY]jI\hhd[rWmn-zu-Dmda*4>VKRxGHUGkmyVAYopăU"5xUM#iu\#_%#hBxt>LpL+pKLp*teSMg>Q#IKhU5JB,L1vC&fZ/*Yyh=j2W_X2^LăU"VfW9KIOEsmoo4cDNhWT(IiXjZZT<vt$V\EBYFf*DTs2r&Kldh#rT_Zu9HRpJKBZăU"LDLXiK8tp(oiKST=o<c=%>l%gcT#uav<&nb0rwj:5[\DT?-K#]-L=:LcPY$FP-iăU"PPZN^v+9wHZjP#:48h[RNTIV-vNhC71TMumuN1J9:MI<iX-*j0o).cQouM=KZQ#ăU"Q]&X1P>yVJ,<K[Z<H%cBu]4JUvV=PsBxNOxDx&Tl8-5I*H(BkH6S<Mszcf$-5x=ăU"]W.gJQD7Fp'S7voMlqvI_fCSwqco?g,VD')(t*i%-)%B1n*VGubzq?xs7TEa.o(ăU"wj;cF]\S3;rN%9Edsgl'f1^;pq3=wBP[gW,?uX,6>5)*Ag\dHxYq$BNogkuOsOPăU"vgfO$>iiTKQD0(HY*lQbC>]wL4U-i)ckEcrD>EgHDajzGtCNz?A&BBHB4Na6ubCăU"F+p9BJ/KO4MVF9$i03])hOfmo>^zwf][lv$%+pIR:^q,t&gP(,UO$:Z\#30(G1tăU"Ns=3A)F?io93kF[[Mnn]vZ$CUjZcaYr52[C^eZl]pq$Q+g#*#/tp>XOD.L.qWV*ăU"C7p,KTdhpa*PZd9b^?]lbZjf*O:ZBPLtmA3PqlmDQ2Z]5i%1Z1GOx22MZB7&+NTăU"n-VxWQ$*q_mHE8osss\>qc\Lgi3b'2zD1YFC1YU=a#WXQYk%-\;m%YqcS)=+a/kăU"r:6#U,1tT-K974X02_k)5\=E;\(JwjA]jQ\&=-f^Q4*bC78[$FqM5*\_<vlNa0uăU"_/j9eoR,MP9<pgT$\eezQ]=8^1#WWR%Ak5J*79D<-NoEXr<j?%W\KdEp0]H4skmăU".hZMc5wQXT7<v])<U17YP>j8it3k0-6j6=^](y^6L(LB:bT[A0X'Lo..,L16PSMăU"E]:7kOAXjg)cw<<H=GkP?i%9V]H0iaUA3dP9FA1:f27_XY\&;g9fM^Q8#$Z9CFPăU"dP/NhGgeyptKa7EkUl$;rK,O+i\<Dk\]X/2JJ&-E=/WHXw,:I[L8]H7p\TVU?)CăU"9-9g$g#Glel0<D(2;rHW>7BMWw?o:9?6Se2Y$gGnS.tij7uI;_.sJMsf-lEj)peăU"iqOC5kJPs[(M:U]qcrW0:=.Z,vt9J2q]\)N*+7dV1VZm<E%G[t5urTR>JE1r^JmăU"PGajzuEeCU2_<.VkTT%FqLaW<f\.j6g$':v*IkJ2CM]H><v4:wFPaHF*6j9Hg5băU"tR5Q?Yq5QhJwIKo/?Be<SUFPlLa*t#:QeBl[mC-Ece'=,WvYKZJGB.SDz^$hj<<ăU",<#dKZvM_7Iu\W$nqLp)zqHcw[^MDCV-Q2Q-D)/,FXEe\C].ZM9;T45FS'h9c4[ăU"EC#krJH:_[V/Y\L:o3q9Y+tP82cfcB^&vVl0Z)Yak]b#+zZbI^34JfF-,TF,iILăU":nwCcQ-_n3&mY6\E'0*+:$OS8J,%*[jEp1br?V;[gjlYx$m3wP2uN/Dqpfb?5SoăU"<m440)h(DW1JEo?t?rV?bk)<[iY*5swc7Vi^R]JJswcf'uLMsr<WVO.e;G$Wz2MăU"2ZyrbpGkiF?I49I8>BP,iikL8+.IZv8epX-_J#8EE6CXDCcXjGn^x]>Tkk$d3YkăU"Sn>sFMSZm'%865(q\fk/[<;j8207iUX3'n+'l^h60T(lmiz.vsS>1;S],i_Ij4$ăU"SRted0qIVh94x-r'_:vMZxoNGsSnN:5uYy;HRlk6^*?fVQY-RMyrF/=b^.8ifaZăU"N4rm(0gBg\FsB-mO1+=V'_TnG$hqZqSQA6?Zm5^IL?TCn0q;;xH<M,Pw:>aG6YAăU"1(hcNmjMWgshSsIg85h-Hs5Q41ZS\eIan7G[Z'KikYE$D8=:=cE+D#me_CG_pyoăU"Ct'CmayqWMTRdGJa#v'f_F[Z#<nlNT\3bil>HTQdm0c$#0Af1JJMg-jiU(H89k_ăU"[da7wHpiE>(ia<t5xPU=ow3(H2m;060<S?lm>?(B(.K3hi?hDG01Q3i%7$/NGOcăU"BS-62Dcj,6cdxr<+KJ20W=Es1fN[+e>ms[pjHEU^DH8k6w9b-tfB8lT8<E/-TqSăU"n1bT)XWH?Typ,=<F[Vd)v:$QJuGH1aKCJ;Qc;T]s$/Hj7>ayfeEH8nkDM,h%c<HăU":FK::7k\>a2=Z:=6WW<PRF->[9,.c8B*r\r0-eM]Kxs<8Q&^e0]4VR/y<2gv]fhăU"'xPyLeCbg\?(oMj2./68)ztF[6d_&y8YPqc<GH_i'SSQdg'S]1Q02^At6_6#85IăU"36)RclYF:\=6(YeBcIO$9.L?>(R3GV?VuSXl>'PHE18=2&2&\.20s[m(k$uX;9LăU"8O%eWHUPiCG;36^ZNE$+Gl)[bP[EVmJ9YOu]_$'QB4S:&TN0N<87&>g-6SiG.b*ăU"4X#&=GuSsER:;r:PdblLgl9D/6.uv7kdM>KgQh]8O)MR,%9VR01]XZA>q,;GbU_ăU"VFC$Jmuc)bA-H;?mUj?2S5M0'#MP<*i+46\E:]_.TJKO#C8)o56*'PAgSTEaEtNăU"rXj98tPF7.=CAN?GMfq*.HkT;DvKQtg/=Br*%P*^0Mt3\q$X(B2jU8sZ;f9lFKEăU"HL2ompxAh.CYFv3gd_&fYO60V#kTYL'8WgtWz9wA8c8?ZY2b+oBoCQ?BQkdGxOfăU"#kY/Z7k2CH*Y^F4:d%fa>NogLr;ZNGjP]Fb>g.UM7+[?kPmRsDl]UVQi_Xsl+^yăU"Vo3K?$9/jGoVG]d\qJp00-8It4%q-q2t[nvo^),Z)TD^HisV'PShd,s0X).Ud$%ăU"<*4Jwi;mBZK;6qLBd]D5?M=g%PZ&m\FV:?E\f;;Lenz=2LNXPE,Tkazid'lNg&WăU"bIwj7hzm6a[v]0'B+4XNEPNy>he&WHfj,?k8h6s^D9WaPd]*n=QZkU1(YGlg+LKăU"AojDS*?&0sk%.p3/Yo1y8M+a9c5]e/T9lsNL6aOX?Xawx2x+5XAt+F3.cR)C+J9ăU"F0mpoNzQeV.k8a_257bO6cDA_Fq=xa/0$hF3g0M(&0Mn^k8pdT<=?(^J'Gr2qGTăU"Nl4E>fBdf_kr$I$WrdL$T?ZT]Do[dgtQ[2R]8QHYz=$VUh2N.,Qal>5xm2l<uCsăU"nt,+iwmQ?>h?B69+(C;-^FvM,s[t/(=B^'&)xI[ijTFjcvFljJt;)=45W*K2dI^ăEND SUBăSUB V4ăU"5H8I-*a5i4EO#y)S>=p8'#PXwtdA9DN#5k1rm,Mh-]7i^80J73+C:tE'GEnN*UKăU"_ktR($N:<dD_Mz/<d+6-9]quQTZfrST4<9rl?H*t\Q;FZ$%9s3R4r7B-+ik[D-_ăU".dVbjWJ6W+roQ+#e<u&__*6tU7%\v22D<W/#d8=Ljn.*UUa6a90emm9OuNtcTL]ăU"D?KGjdS_+pF<FELbg^-Qpl*(tpE'6RE(hT,p=B2OBM'k,%O'K#qcf5,e)X[Wq/(ăU"t=qBuf=QWXP8Z.Dm;ke9gxBE8%Ud0vLE3#=Qxx</9P>CL)9]$7/1woe/2TqJ]1dăU";o)]HtC>:,uZE4mtbNX^J:JvTHH2H']<=db_Lw,Aa&K%[C/160a;jCrgJ4Iwe,_ăU"hNbmtq)Ouk)#t(FNXXV&0eR$O:Z0iTf'k<[MYurf2hG8[c\9ggSgV(V=Eu;EOXdăU"z\fDOIFS)USPN$CVisr9oG,mbG[t[/Agi=IJTo+-GXtDQ9KAj#.Kp-ON?1bRh]LăU"<'d3,6Gc:X+bjITg5[$.ta#H_pF^m1QSV%##+#Xar]Xv2D0(m)-rtBH,CY[cCa'ăU"n'R>OfD_#845I.6Tad:xm^#<a0Os*',Up9[zEwX4KPgbY&N#_%?X_m,C3S(r#^UăU"bAvHiZUo?AHTQuJ,.2x[\.axikg,b.J\6qBr)hFx9AxA.oK*Kglx(R4p%>cs'x,ăU"cAL=[IjL[<aut8Uf?H'X#<Ds<Ox.P1FMHgg1F%DU=3+#g31#>39Fr00Xxl$xJsKăU"ia,ndbLv$sC4$5]WraBWb$UZ>z\&s0xzcNY(&1p?/cxUrN)W;-bs1GGfchBthW%ăU"<P(;m5JJXEI#V^'Zu+p)CTEXm#Tc+YzKLX.tkzqlLMm#dkf#nQ=W/XoS8-.L7;2ăU"p]Wh=J-D9mAJKoBj>8<c%sS#K.-E./jWHb?<><<q'S^nV2+T;hbmb#W3$0EX2b1ăU"$gxd')-o]T2leHdY,?8gVEdTmnBabpN=$Xe1)4Qd<*QLLY(#>GF<LlZ&im?MWq9ăU",Mu%b,^P]FSM^LUuPQ:&+6c&m<cFQw2,25j=^V09%J;uM%=jGvkR5'q-U_f6mv/ăU"kwbaC\H%6+M$&LaK2#pG1cgMk+3'-b*krwU)kr:N\%sxmz&G51>8vab?Lp)aOoDăU")7$Ha;rM>q8Ka.*6<DJQn4pNj:M=895-/IL=N?*m)\aWG2arkGGdVs&Gk^]&Uh,ăU"xhuYim/qfb7h5PPcU=K/vYsV)VQNN:m_*/w3C4J5MJdHfHY4=3Lry#Nc/<M9j0HăU";0AacDxFPEInBh>MS8Qff5Lx>1Nvb('B$]ZkkbkrBI8csO[_6u9tipI=t^,yWtCăU"f\gT_'dlxef)6G]?OATC+h%+J:jXY>%]^V%Tk2V#WSkogsAG_g8.lEitPuj^5RGăU"x/yGEA+3F1Afn_,Xpi517eWOsJF^fVdn.8SU3_,;eb/6>]dqc'+Fzf^\2u_41L$ăU"c(,DRF<32HAal&R9Yh(KD1ynT;J=J=coJ]V;X<jmxhC9_4hOJY4DUJED#/TM/bTăU"TFF0)nMw)(uj1>4_*;tPFba:4%pbrn[g=RyW&hFjm')+lvr1p*.f*.sim#O4d)yăU"]pM'KZ?[k[/buAS2>G9j3c5=lWgLg/<gTM#95O:z9ZIJ1KBCHNo^>fhj+8H6$^_ăU"RarqOlBgFc]G8P_hFBh7-EuXJQ3#+NX(BntYrVdTkNSt$9hdD6YLprQ$ujxu'wbăU"-w?wX&:F[ERqR1&TYpVdiZ*t?UICau?kW/NF$TXCeRDu#\WHg9fE1_&QScn_9W:ăU"QJGlN:LtS:ihv&8W:Pr]p)tjWT_6c/\*LV-UG?Y^KhaN_hR6AGg4K[PXJfNiw5săU"S#+Q22ltShRN06;9xvu0b*EJ.qO8]>q)62KZkl*M1bAPj&:$V2ulI[kHw//a#t<ăU".W<31+<on4=0cqRZr$rjZq2u*bQ+16P72Gbom7Qf>HSx>3_g4;hn<m\OX/P7#hrăU"'65mBW>a&j,g7j<T6.p71Vs2KXJNuuiz_WfN=.,Xbjejjw)&tUn]+o1i]b,1i-(ăU"hKpWG*/u#t*^PW-MtqXg5tD)Kv*)T06G-u?4btEot1Y>'=En,>RCEj,Bf\R6rACăU"x<+mNM#yWj'8EzuE?l7at[v$Mlq>07IL1ULlUM&ubW]Se\VQr+9F4chuUg3'DboăU"vQC->'6JjEu1b?8:ia)ot9p]7EC[m6YHW$CA(SJpmnz80y&9d*W%u=Wl1m%J_TQăU"C6];uU/^xN%HT?H\mKVB<mYHO5mOsDD1ykGWODo^3an'tMQp%P$9Hi8bvp5X0j9ăU"'PY1ZWEo(^SiazPkL4gN,v+HdIRAb;nSu[_YEdPfjh,aMp#3AdY&MyR9jsSFIUoăU"=G<%HjotwO+4Qv8a2:enje>p%*ZMH)\3QF((.b3r_.K+iJ+91W%j((<&)']FI4RăU"<4KFeQC;.6>kV(o1ArIQ<:HN&];vi'3BdO1.4rP$'/:(J.k9?qjZ8A\C1L7,,ZqăU"BGC^8AW2MXG\Fp'hS=;)3BWo0[eI3N:1y:Tp]\ZK*KBqap[,o[4[69[wj%Xn2-răU"Wua[UUotgt)*7mWJL'<nS0LIh9Q4Um.?f_Fe/n^IDM1==s),6U,EO_#0BWh1;fCăU",YFJcY4]-WpZ4wma\Mb>dF_$6MGIOwcwWsr_qWok7\<jlrWVa=nOe%[/\*jN-D%ăU"-#Nbtn?:LMDue_?hAn)O,xW94Bv<Z/%PqXAT2hCk)F%nJ(Ju+c(Az5Pf0$>)RN8ăU"9P9>,tdqb.<9N[N$/[/B;C74B2BHg*g%3Dhi$9fum)#IEMT#oITc6Al=jrUTGkAăU"u0Dc/Wh[Cqr2#63ti_VDpkkFW%=o8gLhK.DNNTTHwYYR:o2)Jr.9vBbhkRqhR5-ăU"a+f+aW8Lirf=Bwlpy_jX/7ZlnOY>^0#1I47NT-gF;uiO#akc$aNO:JRL%f8[TcPăU"c+Tn'F.eilijZS_s#Ts.?hIK0Q*^s)dS<8oLV^\mr%^JJw&0a1)&^WDM.G$sqm%ăU"I47M%c#PeFxeh<DWD=AN9c6gVufc-e9\:[LYXi.TM\NgZs+?vW2xj8jtcZnM92QăU"xj3b4rWDy06>ql)kSGZ*a9]xDFPBIl=148sx'I3Dn:cPZM'/%oc27j2rCiAqlm2ăU"\m4MD=<[k5253;5s3g)L.bw$l^K%O^%LrD.pd23U/yjEg(+)Y&TPqkV*UYIz#b#ăU"%y-wRX#a2CGSs,[9Pzu.a[QvhEq=d0]NERFIvKlxoMU<IKBu3w<J2sc-iVZhVQ0ăU"5#32X6c,UaR#f%k*3JLc)O>l<H7aC1/Uae.,d<2ROu##M.WBXIWmf1ps[X$)w]măU"Yl.V/;j$'+Xe-q7b101Jz1tUigI+xDvpF7Bo++fHj'n>hmUC0c-/[-42..ei$2LăU"jAfiVH)m+3?/+/h+^^d%w1Xlk%aXHt=^oKZO?B*SVoBcUS[;N\hjY*u:s+Ei;+UăU"KUg+TOtZ7AVmZ7y='>..82C5X=(Ct'PS_Lf.g^42=V7PjBB3_:9'%7cOsc<Nl3tăU"9'K08cfiTQ(&;;_uS7QO1AkHt<DNAZ']\)l3ghJFg2_XA\7i+xlnOy+c7-Z,=R*ăU"$^a]aBEj*BZ/83+E+[J9*vS0<N\h1wdMdrWnuaqGGL/XfGb'o($/)Xnb[n\ZF3HăU"#K/p#5Rw^&kYDg&Ml3HDr_d_:<WV_9J_N[?B/OciK$[W'#EBhS;JXa[8n(MAE/băU"X]3(3oj]NiM5a8bhrBEY6^c1jQaNm<4r>EN3oPO,1ko-^Ap^3&r+AK>cRF4bVJ;ăU"lI)hv)D/rboqFY]Va-'%+<5]Pf*(+Fhuwsu3F9)hby#<ALvnWBw(sMUsX6/GD;<ăU"AE<BQ<'?u3ZKu&r-(\ZaKH(]pS]2o8/]V789mFs=i6Y4\GDq4q^Xh(_#zh2rtyaăU"NEG#3d,1+rGd;Lisfh.r&IM+yeI1.-#VTj.$1F4*X74,m6l>l<a5eOw9gt'ZQ[[ăU"eB_taQ#*MhX5q#]JQmYF9\wq%H>p2,vWxHUe$g3HqmnIjBVSw1mFo;<Jnak?m8MăU"x/90xH%HitM;(V6lAruA9ZSWZCS?A>]oXAriU^Vf.%A(u7V<U'Ob;HJU)Tz.J/HăU"?+abfsq6Jo00TA.s<OF,f/:/A(5T;Bb7p,&Ioo(e<):2HXKp/s7v-^cxIS2P0;jăU"ZU9&G^JmiEW?fYB>0U?7&Hi;>4t6oMIOeLs6G;+[Pn'P$[F*8T1>[9HK_Ur4>)9ăU"Glgf^t$6<xdkT7IXbptW^=(aq\>.lyP*e^HE\$*GP5aBj/Pr\vi?<=0[P2#X;i*ăU"fOyiaHcC>qrVJFZ:'8V\kp&%fD\gPX1DeUA,zhgdXKO9[\vs)WL,BX\SA1tS3UqăU"HRil)fa0i75^/NfArjNip3q51RTusH0c$MC%JL1DaJikV0$&'%WTw:&3Wv/.loGăU"UqH&EsHIXuP*(e;0%Do=V8)+/oK(3tIuVk'ujM[LO.m<V4+d'R8w5CVs6M-0Ny9ăU"/3Smwh:wbi<-EJlk0o<Bqk5W*SBER*ZZedkNF=#-qAaYEkV;*#+5o<k0=q5$K,tăU"gI&5Ra4L,<v=8Q,ph%#>E<;0R(C(yg?.$H3$nRA1)^e]eUc4CvasX'nw$QvEED$ăU"gAO:(]6^<4_Dl#rRVi,syODUA4CeQZO<e6o7Un)PMppy9:6pHCH_Whmto9a([o]ăU"yU.KWAG7Zy97EM_Dim*?ZhsZCP<42Uh'Vpb0T6h9Nk>jKnFajYBtFo%kcEpi2cNăU"g)Pk7PB$VF?8Z/hX_R[=%boR^-l)aMj71-f>y0o+N5(pQQ6<a33^qoMUtNQrI4FăU"Ud#0?FTvd6SM&MIVl6)v<WB;b[*oSmVkBpAF<2o,h:l,Q+[EaKF(Kl,(F#v4c+3ăU"6N/PwR*&>nBLnNudaGdmB''T?U9g$Y<^hs,)p(JG(D<fme>lcvn#Z]b]8W$8a#3ăU"2Dm3LC^6VcT_Ca=_d+_=4*xVD(_t7gj*wj?I</e64Uu+4eW3Yon3K*C,/4DGk7făU"Fh/5I7\RXDZM2K-N[Pd2Osa]hZ'(,,cu<xW8cNXQdl1h6XgA>U#lhC?GVOvtXj.ăU"<B06KJ_8./v(u3T$_;#-xt0)-7pp#>PaNthL^7ZbrZLu[fcdogPjhj'*-ZF<9>oăU"u?x4xr/njlov\,SutSs/5G4Q?9u'vjQ#g2m0JVCAS,2cH+$E_/9cR2-_5D3m,T#ăU"Y4QK#>k*6k8FR.Ekab-,tYeJ4Du$]n.KhKZ.[bN\tjbrw?xQL%1nTB\V*fdnCvfăU"fqF'&/TX3SIW6j0W%2r%j^NF_[sq+/OG8H*uCX8WHU6fDK]QjKxw/JS?ha1&whMăU"_3m*7v3ob_ZKM6;G2;/6efbDh.TG#dMr$9Z33E=1c3:7,e62B,U)nnENA1AVRBqăU"fsRQ-=;GY5dRT9G0'aWHDhH^Dj:d/.#g;0UCI>7_9cD/iDi4j?u0A+CC4..(NP=ăU"lIYL5utVVZ*51E$GVb12T.\NXfu/x50BuA5eAO<B1p_e=Lqn/'qEdLgs_ar>G*$ăU"#j5DW>3M'RfpNMbpsQIhpnf+LSqhpvpGhpVP+f9-7$s1(L&PA6Vb&zUX76_RlE?ăU"QDA'7WqGEMYXIqL4xrE4h7=7VBeff'.Qu;*ehbNVJ#gV.U#m>g3S>_66Dj#:SRhăU"hQ2kkF3RCW1l%H)ft,g2_ZwaufM4gRC[W:*\*2mAm95Gs7\Ig,4SaFmNoE-/6$lăU"y$N>BG0[<dMYi;?5/]3Td*67c<W<K7<mc7\aH?8=CW;;mm4VW$-o[-Ine,cIYGHăU"Fep^6G6a6LFEVV_7AloJBh6#Wke=:[1Yxu7W:&(O?*o>R9oqpnH+w.kR4wR;K/SăU"F&/GvgDe].Bk>=^v3\nUP5g\&nLFIT7Yj/M6^\JPbV-U^s*qz0Ca]lyRRbYee/CăU"K=7R&X8ihJgR+CdaXWVE$+8/r:;(B9v^UG$8qE0M/6Pxu)+i83;gQ^.*qM$G_CDăU"APB+bR;TM0T?F,=rs_,Rx0JC9*^>Q>rg03xSKYp0-0wosvM,8k(W>e4a7a[(I3dăU"CO.XrDRbKTb+h/.wO9A;P]+Nqw?Nh0LP1:Ekxb<x%1EJFqE-P_i:LN-6yJ,Sl]$ăU"_d-fF(In6:0=NKKSM1hX>.<(8(tw_]sP*)8N3IJ%/H,6z^)M2Nu^I2Dr;iu6a*păU"/OF;%QKq*G1iJKfjQl[u*rPV<*BXJRvRb5xjXfXCjtFD$;eJPb2F?QTFJb[q1u:ăU"Q][dH\85N4xto,Qx#mCT2hfomD1Fh%zejK%;2&2?W1qxY#x[u%jXH2OHrTVikfSăU"V%^8hyhot>&u$%408B,l8WnYuX_'W\:l7<=\[([,TkOFQ5nx'_AsJG8UOb6).OrăU"YBwgGFD1Y&w%Q6UAYGnFvL[Hj>#ZQV>fZ0gi5lgITVli0SV$0m1L-53s9aFBU(lăU"22ghy#YNI1ZjVQ/0%RE:_J^2;.37.FUH$D7ql8gVWW*7fI&swNZgfio*uf*POG,ăU"Z-[:ZS'LRm,+Rza'wt*]XA]jglwZ\ipkq6pe9gE.BHj_p9$+z_</9=,5&_f1H*CăU"['*E.+$ZRsIO9G]38XP6RXLY&6i]JNx=0A0=u+)g?KCbPSK\t[xoR>*0Y4;h\[săU"_Pj;nBi3V-t1j-t$0?Zn^ae&K'W\V*FD];l6<#1#8oQ8bIaKqxk1'463p^BUnfWăU"C(olYFkFuZPrK^gMI3qG<Bg<K?bZuqp/-l%qBjJ_GMsYDwm?ELk8pj^w$Wazgb'ăU"\-q#cdbvQ4K)8]]a3,hhl1fGY$1U;Y3v03a&6;],l2XHtb5&(:&MLaO%DTaAq8(ăU"u+M3MxuhC+8$ZK[K-f>BYxtR/AGmd7GGex2<msP5PUM^+KU_u%gCnIM/>J#.E=\ăU"\A1M[^&2Z^9sG8.WRkgK0b&aWXt),d6vK2W-yu7Zr/knNCvc^%P$0W<]0*S(7jdăU"X-eDN,9j^9XlBnP^PO/.O*Np,EtttBoAfR)9u4S7>&#(#sWUT4OcjGVgtJ7\w$CăU";zg3oKyUgwc.EPcgTASNNx-n=Rx&3e'8q=nH[(q$vrp0;XBSd+L3fTmI2IK+(xlăU"7ibo>uooj/e\[zfPl&n<;fL2HDS,G5Ox\g=^sZ$[?TfX/j\6.k7p/#<S<Pwx<m4ăU"26M[HsKtLrB+qZt\:N?^W[$D>>w%Nl#q*EI1J6xE%x_*XpQI_y9.Y/tT%S<p+,9ăU"/FozA]'1VkbHI?rYsU?f5cTj(j.pA>tF9W-F(Q'X6W4qsr>f+EOtj/W/XubTZRRăU"(>PF77;F.oAivl/*in]T/FvO9ZoAWP+TWWO)e2#/((k684mMZlGbxl1G]cB9]-UăU"C89Ww*MrW]KbpeY2d$1PtdpjPP&]D%CP*M%)(kL#8fn1Ae5Dm1Yp&>F$+,WbL=+ăU"h;kr4$&XZR?KGK)gYGy.((stt\o]IwmBq9rrF2B3mDy$i-kG<;g94fmORV%$t)răU".kHXCxd0<PizO=DIf73Og7av$P;>j,\'^$Kzg+Xes_PYQ[tj_k<(B%;pmk4-t2răU">9vTM%=.RB/IOwG]EvviKByYS<603Y6R7Yi3ydN1RyBfBF:z\i%Cd(aT^;PUl5$ăU"ncA6Dc0^4HlU]lm<eA^e[am+c0_'_Oll(_,_Z<YEFn'*/T2w[7p$2gMPgx>v9$UăU"_Y5Q/9&CH8]ohi3QySJ%bw)UvL)yq4d6+542syD+k:Hbg8Iph/7exke0j,.0bQAăU"&VjA?0dTeHpmm26Vh2WPb[/Y+X[.vQ&EH3vpHhJ'H/WkPCZpR033/?6G,kx(Xv>ăU"qyHoNTz?x%gwqd&.-r+,rHPt6Zfmj+^hcGVD3?fXgBrbCJ(NAz'*:l:d'.0,XVLăU"LhfjTxfo'q]'0RC+o6qSU_A+SFbmMaT%PgjxCza>-R5_hzuw_b'.=cZ42k?n(vBăU"VPq/TJr;L+pm*+sO8Q3*6_N/(eu*YEdIq#[^j1>U>B?1xao2P+N^O#19$^3P_r+ăU":/hl09te?Xl';B7TC.1o%?P>hcBZ:8:3ygdy]'89xBR2j(qNTc.GKLsE4oE,>IWăU"/O)1Da[Oc=aWLaL&3\k#$mUI\\*xDlnK).w3_gYt[KDU>=SU0J2_$LZ?(%imEjdăU"w*u>PCp3Nr:sAOXD,n,z.6nA0q:1dYa/X*Zq;nJeb43Yyqp8WlQ]<t0Dr0lDuZBăU"?Wh\4FHwZD\SqD+ddX,CD^L..Wt+^Icp31tX35-fked*q5,fw(?Jrq5D0y:[:qNăU"(#]^wf7dT$n8?oO:AFBXbhGZ=/e6E1La^<DstL3x-qBDtm08?u#X0Z]B$)LC/&OăU"A3?>+_TCay_QEILGaau0^'C02zTZh^:*ME%w>.(bvOwD#qYuf1GqD;Nn,LVgc>DăU"qVg2=1PCQbO<29)G;a&Qi6\E8LS)n>;g6%Xix;#R^$1*]gS5[thP>?iY+GlK1ssăU"Hn5CrroYJN[i-3SEa?63cN[zZ:WrKY[Hn$[r0,A]fKVzl4SKBH)plveI]kTB=ioăU"aDcOn8\a[Nn(U)828l:9D\tWEeFW$k8]ma.X;,S<4+jp?NPc<f.x9.6.p9+^yVPăU"xjNh(+JrMpoDJ'BIZ^hd8TH/Ab27Q\jo/>xJsdM/Le+uzNnnZh.5KV5hF$L03&hăU"R2#OlG6vQ4$4D4-bA$^9[Pct&/';RvZ5Ib'ft.?gSRZEPz$&8mN8/lvE+9L4vT%ăU"isJJ7o)2AtPw#eW^m\K6FftrBdkb)6gtbs&NLlOaTTE&<ZH)&3s[TAV^Q:za5<găU"N*q&YkDi/&C'fcvL&r/BfJ\)xrt6c:dXlD8ceIP_)_C?m/(kv^mOV;6k&NM6jUCăU"QS_&q:NLu4uxtc0&foR811tr^P$H/Jv=n;W<aghA(ro-Oeco46n5inZ.VT]&QWtăU"zel)*5So]&?XmW;kMdPZ-bT,HNg9*7Da[(XOKc'ienysC8hcFchmy.cL9SBsST?ăU"P_C\jAY1tnv]:Wv(R4fZZTTOpsd&Rz7NmVi^.rZTK.U)idzbdOsf61O-%M6D4jhăU"d*Y-&',VZ%MJ4J:V=/uqHDNyz0SM.N:0dpzHBc?<LtL*2r*H)f1-EPw',2aXru:ăU"+rZZa;>RJt9h>2NnZGiSX<F4Mo98Szn:srD=>pvTDl)yB/(3xG6]].yCocG?\xDăU"6;)Qi6Zy.i+xA7YA1Cu#C%J^^U-\8K-:0H[yA$E5rjFQL.fFxJkx,.URyV+?t5_ăU"uMdoqH5()3p(Fh<,rRZnWYAIobpVpf6P85MiEOvo&cY+T+lv+^+F?rBtG*vwjMoăU"Fhmt*x;GY$XRoj,lFH%c=KHfnJd^0dPvzL\y=,DJy[ro_mNMMYe4CpnAZg35?]ZăU"QqW:#Ww^[0oPfsNia.9PDya:6k303Le4(3,Q](c49cafi9vfL\8:4iUg#'Z$DrNăU"jEk;q3=t.+2uk0^>NZ.NR_R$5NsA%F:<NCUeKFME)<en6;\)\Dc%1#n>#h4IyH$ăU"LMzJ;Yf+0(WpqSDzc$clPNtS-PswxE'DNegtm2,saFv6Io3cn]%az.Yqs8i)gifăU"zi7YS+px//xTEpEhs9u>P6UBr+>0N/P/u_,;b7if+M:a]?cSWgu[maeCMbJdnfNăU"rD\q[91jbUEFdWlcsHQRnHNjjQaQ,A+W(U1CPiVsi-ymv:\CN/P)m4/f*5=1t3$ăU"\vu,)Y</.uhnDhcFG^1(XX1q7CJ-&tM.c=cK8uE&apZ3gbP.7v1*+#loH%x43e2ăU"Hd4l/e)lCh%oVT#ZwPx(xSnki4+%0JBG?#lM^V*QVL).l2M:9Z,r=X.IZgwF&w^ăU"R:HRX&?5tVGPqQQm-KV]+wBJmZY//S-iXa4P9SLQt*adH^lOsgzlyu*NHzo;G1tăU"pmoH+u_SkX:PIX,&^.DD\uS79Fh6d91maG&E%q5v>0$X1e&Rd8\Ya+kOqy%TXV'ăU"9RZjOBCoaTH4x3XootgkUfYc^R:Veyk&F>xG&?))$(KKwl3H6wgk+W:P7E6'Pc7ăU"nJ';3:8w^sTk2K/o_8Jh(>nWS\3q:^;WLKIp^yCI'G\/RXBIP3SF[Lb9YtC^GePăU"%k#^4)JJZOq9Y%nJy[;:HC8kJ\HtrkX_e[3EiC^,LwOLQ-*jaUxkUz2]J2tD?H0ăU"NErWi\^[G>qW[loKd]Xmz*SLK?NeZTay)]AzaFNt1BL+.2:rPJFz%%TsPgQ_X>9ăU"RbeXKpb));OfCi?_Lx<NgY]d;yC_(l#)dW9C#nDK7gLgdwH()wCb-UtO[y^fTTNăU"UVqIi#$r]QYt4geRk8fkA$MYa#)Fhg%8&UA'ruVqDRm/au3kqMrUw?::79'P5_>ăU"2*/ZXQVKdxPmD)W;6XO03Hvv-d/)6KB#0DO*^NFp=v'NcRUa)[4kPRm6U\p(p\BăU"o$<n[5OoRwo7B[pJ-n('R;W:4Oancm0uY&2DRe^fThMuF1tV_51r_bySA;IZ2GkăU"li'sF?:UPLOLS?bdAO/-B7O<_7V=mMe^wjtKGWi&C3APKwy%%M=x'&W7zu:iR2wăU"duPu(2o(gfx6h(]\W<>T1dqDC$jyP425h#T$oL*uF-5KYV/>6.PB)0t3u+K,C*$ăU"iAh\aJ,VO)cDgfP:wDG#_bRY+eH4-3kn:ObDVf'0Q#z$[\YG*X$P2<FRE&=gH=TăU"lQoP/)nq?I(X33;RsqxhZh_^tl.]lZ#t5-TNbh-?0_ViW9<kDCK-DHe,,Z2+)ERăU"XLsHX9?,VDpOKGhlRb4&pK7Grk2H2fhhW72'xguAYfl1BotqqAB3h3MUOkl;>DWăU"4lo[5f=nGSw9w$[nm^CgKi+<4:D,yIj32vAI:&B3Jfarrie+(D34n:jUT-AiC7RăU"JZ7?G*$M<Q>>EL1o8JerjJItC.XuEdjDEipud]wCUhBx^9A;$WEIoMHm*3\Cln)ăU"]5=VKE+vh^.e6[\QR1[zY(k6:i-zW+r]/ujQ;0SHmGd9YJX_862N2tz0J?cfSFCăU"PvKbqr7Qg5_<8,294xkxl=U?c'uYw5)d#jWjlw%f-MHjO1AjXT9erHsNx_;6qg.ăU"),_wLnlKKjtem7lBlZ[M;pGH^^vVQF9hqNveQGFTP2Pt/+H_(If-OoIOF.\Rb$jăU"R^ECj_ghM3f8=&gd2t]kmuh3RF]ll>]#=CNoi6X/.;xRi7,K2rqLJ$Jq.T^uko$ăU"UO.CLsoDrf>F_SIucTS3C+Gb6vD2P^<L7F4Yk$Lb,&[hL\#tfwnli84m:6fCpKNăU"OLN?]-\Om^,sQtFxQe;nBV*#$G0ZZf>DYWLYQqg4TZk5m$+4cOrK1'7xj=?HOF9ăU"=(SWS.R7l6J;mB#^dsYZB9jEvOURcAsNNFH0E-ZX9]XN<rm69T[tINo5w$Rd^XJăU"sgWCQp$lb>(>(<Yt<)XY+<ZgDTj'L^]&LkSS)5UVU>3$bevTwQ^X\y*2K+71HwDăU"=#S?I7^p3LKtJ9UHMh[:g_T,?NFmbh_p]jqs\fgPH]>&WqF]BD3KIxUUxYA&mXLăU"2B+ml,.)B^^A<6x[;]%?mK.GXoUl)hc1SkEnKX7DX&l8^nE[3<FOHxj?,RQJtsvăU"hL(+kwfpWBhe7LtmN::m_TLVn&q>83o]re3op)<Yf5N^^N)r*7WpelX93/UruxCăU"^TcZKD^q.Q-;-4NRR^os;rXV8.,IEno3-G5=Rx7Uh-;dH,Qw5k_UqTAXk%Ib+2GăU"adJFoMz];i5e9?mHgJ=f5-#tm-7VLD'nEa>=5Nt=)s<4o5S&<Ow01_vDoQb=HcKăU"-J#1;1^=$.nTb\;#^jTd-,WTKADO\1dY;fbf:?PuTlFX^QNi:/R'8f%vC;c,n\/ăU"36ln#:9Jjq)_g8i3q<y*KN$qjQ<N8lw7Ynp8dO7Qjsl[Rq^;XOGP2gBm%v].YhGăU"kI)JMbs5u7<%WcAlcdY0apkpxH,lJ<*iQf$*p5hu0LG\NfJE$4fe)YvT'i:OCHzăU"QRKlqCJQB88bw3K%rm5IXI#h[3HW&LuwBrC>,9D:dC6fAL4w(LekJWG:E*+F8^ZăU"D9cCGfl5MF>/PQv0PFT(z'j3tT4W7h'znC2WLpKQ]I_nyFK$ZqQ:?V-pN/uIJ',ăU"e)Gca^wh5a]jH#?F.kWSS\=w<uF.w9X9canh9*22mV(29<PkKu$R<Kqk>R>Z:>7ăU"*N'-CJda#kr+:VXzPBR,$afYrta\^rKN.G=+tEUtQtD*:1%4.8^nBxOiR30pYsPăU"^6Np_RD+a-&(v_zD\FoC-WC;-itIoU_hpT5TZUR^0,&7+*730'MIQMm/N<Pi':yăU"%_J#P._PwpE,v-bPu=nX9T90MVEFeaB13.8_k#NDVHd;M3[&AwA,0X?dF_[e6CWăU"?T'Cw+2NRRA$9)chhZW0iiUA>oq)/&D00&5T\6*#g7DC*zcN%hwRJoY<)iCOs-qăU"G>UpZ14*i0Qv#mo;KGAYcW5j0;:1ko7fvN+E-1hkrBNQNh==%qZkD2e4^F,H&:DăU"Puxr79tW)[l?e<F<8C3NWt(XEOeQ68s,cDnrr[6>KLV\2e.lt[nh^<f)OHb;YDOăU"&G3T>arGP\X_5<2QWIgxg\gf7c2YNh/5EdvsrU_[kZR<#RF'D,KR+F+3d]lQthxăU"^+6sB<o576UIuNs8Cs3DIdIE8lE1g;]a;VL82&KLe8w)jR_-hYhNdNJ#Y\i*j7JăU"8]rh[N6H>0O?%Z]c$($v]\gP6./+PqR%HQXJqaXjzo-__L_ktcye_)5T:,m-8N\ăU"$IQwP/exg\Y=tmqggO*&IM^ZSt((h:U&ujgc%B9-9.af6LB5qnt$V0aE4xol<IUăU"Y_,N#X^XF/LGXi]mRFS<19n&r]0ja0N8>Jp=8vQZwJkNuNYC4aHlJ<17$?Lqqj+ăU"GkHE8hV,=7&uztJHA*GM:+acfR_0<FFRD#-Mh]oebRJ_pRf'r8vH]ZWHiXg2]vAăEND SUBăSUB V5ăU"LDU$oN:nWz2TRGY/FV6x=g81P1VbrjKJPrrY2W?#je)FYgSUsHFzB>th-*:]G)păU"h1rs.o-Zt3hS*x-EA*cnbF*tJm:uuD8R>fgOVElX&]8D-#UanvrW^h;</o_ZZwiăU"E(g)aYGBLCV):lF96d5^tkXZRcL=<ZH(DGpK('eJxB>;S:R>)Pat'mO#g'Qt$YFăU"9j^xnW(7FKp>bdI>L;p#m9oL>ZQB&[5p'-cmK]RXVu[T?Odj\^sF;VNIaf%Fgt#ăU"[m]2DxV)F;Jz(a4NHVa[LlTdgQ\C;3&24PJF(,uv'YciYo/<o97xX;-l4XWT_5XăU"\iQj?G8SsY2eaHELcVsMLsmlGaW7he-ma4v;,r#iYf=oW2*a7s(ci?H]aM7CKCzăU"LDKHrV<IQ[byt5NgTfWV(\Nu\Q6PQ4RhYPvwC;>pt?KdJ^pSfR-#PxOvG^PpWW1ăU"-EtCLrm$Gj_w8%^FIrMu'aDJr<20=T6pec9epvFJw6Dc]Fw2JnL[&+,$Q+OYhfcăU"-rcldhKb44Dfk?+XWR>M4WexN/U?xtu.?O,FC_jcW9#rR/DheS#:X2_l:B^c;8lăU"7,c'ora\rb<CfZ-gbZZ=l^rsFb-OcE.zZ$Vw.ej1PDHk+Xk%G3x]Nl5x;OkMh&PăU"b(oTcgd;rn+QE1aIz,8J6JsCTJ>*ckbgIZ'gWUWcF6.a)F?LU%a>8XB\nW^fdg_ăU"&U\,cz6plNSeu0n;Xsu$Q.]'?4\fT)Q6k^xO8:Gz4\+(MW/cb^TO^nuC3FgNq8săU"hJamY'WbcICniSfS]HE3mwEv5UaTVcn*,[8vLnm:^loH%bfayoGxXIX,ED;*L?ZăU"ZGdf)F:hIX<_.aLT*>2[wr4#EoHFUnN[wbhwh&u(1\XDmfQDbiGaL7t%[G_FcXzăU"Mqg&i=WSdRFbLkmtPpOb\U3f%G-LKJu:-5:XSD)pMU/N$3FpTp<h2fXr.+N(X6]ăU"fD(vjG2iojuF%Ix)r-S4b6o8_0k^xI>7i>E0Q\Q+.D:d#',UK=.\Ep?RW74H\C+ăU"t+:v0PA^XkVD0e(?\hDc8\t+YWZQ>6bLqZLN74/HF<Pfrf)kOx:LYhxLb#UK33măU"37srjqc<GcY=6jkeQpJ7zEQ8>2s>Ye[#l9?Z%^[H$Nh15s(1FrMH,2uGg=P.u8găU"CoG;gr<W+HM3P8EOinS'^V70:\uX-RC-rK]6aL6Thadg6Gtl=6j;21.V\BET\PXăU"&[JAkUX8k6Cz-j#baE5>+#O?.'*vY6rP#,[qsn8h_$mtF5#ZcbZj5h4mM'-neP/ăU"%L?_Sk(c[0$.NOT%pXF#BiDT]2Ji2nQ]?j13\1ei)F^^A9tQgi(g5wI1Ja5m)>dăU"^o[[u:(p$=%.;kAE%PbQf(9eiV.MmDmFWWDWbYm6'E0eI9bX-ojeG2?'<g84pmlăU"6AlW5aPW#HHr,krrzQZXV3as2gn1J\#d7odJJu5Im$im_bHzO+lnn\?H1R7-^qkăU"y:wxEB$$9\_ps#N)G&bdX:;73R6HU%d[xbzw,n]nk)[oQRVUj#H__GJ7t4UiQukăU"Q>*cGq%%.9Pa()xIfU7HIJOeaZW7i*(/fbP7Fo:xdEmh6Nf=rvz4*k6%J2U02hOăU"L+NOY8<Z_[<sxcFikpa:R>K:ZW-AgI?Gi=Rrj'Uo9QB*ZW*R[,a.>n4eadu'C5wăU"W]#oKN-88onc8BpdOKmPkup/hGGa2'sgHdg[m<.=7PbeVhXOG7r00TwB,9vPnL'ăU"rYnI.hNwsap^sYJcJ=[Id*:Ku<Q7*5:\jI3uaC\i289&*Y1kx:n&>08\oX2IocXăU"m(Liw2nhKG_?'_Gg&%m4I_JqteeAp>\a1fO^C^hyKUfgBNPcOeJeYxaA[r=A8^WăU"MrUuVqk=f^nXBs#1Xr:DTPXF$AcOaXHUkV_m/BS7AjUI/Xd;L06p:6%d_p.%c0LăU"WVau]LGErttlj)/tvk4etQ1,i(Hns$BHj]2#7#K[b^hD8jZg95gE#8KN*3YZ-jtăU"/de4c$6RxRN-L\U_L0/s7+i*ZIF;k/#^I(SX:hezh,:PZJ'eagJQg(eV?to/0+MăU"d;$G)e?Qd(\<5\ee8jQga0BuZ'q'#4Njuij[bEkP2gMMsPZuEn2W'C_xD#h4Hl<ăU"HNI8SjkI:SRM7v\X;u(+0kgftOb'lNv:?D*G[6s>)umTu_88ZUt\k2nnYXC=*+.ăU"<7)AXX^lea\Bn95zbpFjB7t_qV_%V>/S4pf<#J\]i>1WP0EA<oq,8Yj#75cGJ.]ăU"gv;XvPlN2mPqH%NIz-sR.W$vH0uT8hE2>^G7wZ]O8JJUpo)Jo^KMI&Ar\G_mWbqăU"da_zYVcF\s;upBeh/DH?H/;riJ.O1?=?Eg6TO-*7el>$x<cQSP)nVjJdf&y\M?FăU"m\WVqu:qV*KCUSt-<w82211ge1'l1bYLVR(.QbLUb&M)SAxj+qL.XHlMLAE0/B\ăU"FNwqMpidhVeF=3Fd_XNl(fSk*SZ:'xi3sPqk0sNb9\m9QZ8<t&t;he5Y0r#vd/6ăU"dv]?REv\Tn7x(DIhM%XgC#y&S_P]il<%S;mSFLeFxES0#a5Hi%_(=Q=Ijx+0q19ăU"cKe;(GXK:y\^PgKHkEdTY.ZFDA0O\4OmkU3C#6$6a&$ikhH=,ca\wtb/Lj.JbtkăU"oAAK2Z]jhg(P0T6;QhcKRW#*oFi'.U\>LdLU9\UThxW-,+;7ZrO69cG>;SxM,\2ăU"?a/9V>4cdYcwBkE]Cs:M]ibj<5mtK:ZdxW-v&mQ'RPD2>z5H]g)H26P<xP,+JHwăU"lZ9he3^Pxz=Rzq^'k3f]a;\5Vm0n\Tu9sh5Si<h=Yq:H;M$?x41cD1b2>HU[yF0ăU"(*g'favx<B5rb6IY*1,rERRpSj=jC1Ne-nsobPRq7,dSh0;GjA.lQA^.AnN&EsXăU"UvyTw;MsQLJLLml0*ELNSN9(B<ciM[<U2UARS+GK1O>keX)G5Xh3OK&?K&^>nMWăU"X,HE+r#5+>rm1*DQCc;]X0/gg))aOhHJp(J^A]/shGR?La%hz,Y88t4>8gW)v06ăU"^dGT(wBxl/BZ+&N0]jk<3]$;#y-lWMKa7HY$k'Eqc07RM2(;J6^QR\1J89<ZUmwăU"^&hm3,p:nZQJ>J$9#xHbt;(q5Q0PozX1,3k87cphTbgHDAcx:lqGVr>Q[,>kJ1,ăU"#PyK(]rIkuf0I5gnel4[U#=KTn;qFcJ0gs&i53GO3mq6v]3GsC4cq)3</_B.&-EăU"B4Wk-.IBf^4_\]UCV,M'9C<kTTi<iZ$rN07&4q5r17Fc;.O_x'k)M?Ll%)C)J4]ăU"]/h^X7ca?v%=BLnKmi*Q/R+qwpAi=MDUQ0k$hOK2-r^^pyB.TprX*04Y78-o8HlăU"AYfijxr(uYAw(Q74>FiHD=8t%2:$zYWo,0q_h*UK-2Ua.*i6U&yAk--ceHV1D>ZăU"C9+T*QOf?jM0av\yMdyW$mb8(EC1Y[X.;0j.'X/4-0p..-MfXEZ&.nM>PuARbr<ăU"&srSuG]V?.WW4*6X:8PHMEI7+=l'UUX<w+C]-G.<dZCK.l(Y5_huBEs%?bR/xeeăU".b7ZXBrGq3%7[&,9ww1v8w:siH>[faFx+rYChyr)5Xwbne]I'tKT4p:IUV#\uKuăU"x8/$3updgttwFKp8#R]<f4Ud3RUnC[>aVJ9;y;rY>W\l]Jl[T6&$J?$TW*imuJRăU"Q57Qc,GGB4wRDjYFIoc4cOC=rr/&,'X(4r(8\N6'QN*r-K#-+p4p,f+#%RRZ#FjăU"UXh3Wi10y;*(NjTb(E,E./ZtWvV#mqXR]okVPC/K^W[zcXm_z0L6)KSFjjO$obFăU"aye%BCG8u:mr9<ETb0;CNKnBw1ossR3Aw??3NG+Xh[QrJlKunt_(Ak$js#)s&JtăU"T>X=^9>7*vUA$5d+wkS/jk.)v=nPUUBDY4(M4,4NtU3*48G<+b[b?Yq.u?RVBZFăU"4a,-[1S=khQ^Y%&^anH/ac(W\?sTvdBI(o.n8pJr=vuYU4(Q18GkMSdm_%Dy=zMăU"?VrJ\5m\r8_0Opk/\LQ)3K(^:5+TI8)qxi]hG)qP4mRrPxf6:YB]/Xn:=&tarLxăU"v&%^fN_&KveVaV]N9DdD#(M)PIrC%cPqin--sc:qRT52r9M,7n]t]#GY(bXOmNEăU"[oNZt88nJio4$\<m,J11.YKR_'/8?OPA9TL,<9WVHF=9.z2x.nOEN>uwxwZ^>kAăU"B>f*qUyxp7ky.4sb*?&_e>mxnb_6/e3d*K$E*jOp5BaC_.6A)A[zmW]44;RPjf3ăU"]/?6/gk&M\RYb[LrJ:q%0v9/uOPnIMK]jT^%ra=rS>J5*r+My=s8kz6txa10r,2ăU"$]%NJ33I2lVjP=^Tc6E87lSn)>q\56NqBQ;Q9el5<.%<4WT3Uu-L(Lc.L[LWuybăU"tGH';yllN1FaGFpFa]fTslFsT?V^_4GP8R;,=&f3B:$[P7$B3\IUvJ9;L\vnR*(ăU"-jC:(XS4:dSnkXxfD<P2&B$C*uJUUgL+=kyoFFeDr:FaMnwnjW16,,8cZvNSOMdăU"scCQNomL[)$M'$QYrIG'OO7_'^oE*v1$Y=qGr--S9[Nk[7^Csha2o1F<-N,JG*,ăU"ER?J=Ijjtb?fj^FEFk)F7nb-nbn^u\z\?OEOS<N6bD.=liSFHXQA$dJM2:>5;<7ăU"6TAih_hVaZZi.nd?%AEDQBUfY2(\R<6rn^Sq\x4D92?5.e2L1\,2lm?VnJ+uK)<ăU")T?UUGKFy8mhYc)'S)dQ9WeLJ%7=<xg$MbxA'*yH_7*YZj;?Y<M.8^aa+s=5TKiăU"S'qc<fuSd.PQue9C=Ca\N#g(>m#SR>+arHnd1ng11RIsU=1EQmN+[c5/5O$X;(făU"lFIbQD8K=$=.olIUZ$OR-&=Mc0nDdnBWLLP3mlO,Z)FY#-/RDffoe<Wk<KjKm2*ăU"YZnB2Ln-#m(1Kx=CUp$UR?r2u<_C*_4?2(r;rZe6J4,o;47C)(pm>o[b+RYp0u[ăU"Cw29)<.G5iUZl#TOe/2?(&M_uOs9KI;>^+%j[HrfF\_>7ml]:%GgcFFnOyzu#/LăU"Oo:cQZ.fl0T6iXW&T]r+_[ie^'Mt8?Gh.wfMg4_zDWB\]=^gZ4<M;o+;Wo=/$fOăU"=zLIW1H\7Euo<CXQqO]+<GDk_ZWPby/3/b\0R-e:AvIa\QFI9oK+6*rWae$*__qăU"=DA#PfI3^AMh/W8AA#vPl09M?T+u7L2a<ozP0^))dH4_*KAm3[eH1cRF(jHv__+ăU"ILaO,S+ab)r-D.DIpG1%2MbOAHp<;b3p;<S*[)Y9ojFx<ec$Sx^M^oA]mQ0*/W=ăU"QYEPZJrYbR'3(2L+'t=G]F3t8rLM5Of$rl?J.av^qQ<ZiVXu]^,9Cn1&MBCb3,uăU"ietr0-M,rNu8meVxS8P.\gWbr:Vxt\(0Qu;('s3:^W+oMds3*<g75_M3NE$=&5PăU"*n2F?uNIg2*TlKiMqYKemLrcEM#c4bVW>:3B35]C#2[SE(6mr'qZeSn_rNcHi/7ăU"g/*Wf4fpo&9#2#Ojl22/)2Vh0$XTBF]fTBd0Ixw#$f\39a_[Hie<)VU+fNv8YwvăU"M7'sHX:ccR*ui0h(#C15/h>')ko:_ZctB&LL$l6B+[P&aL:'Bqmv8+G36ZVi/GFăU"[GH7/K6M*?xxka)ewEr3Yznx*X0k]7'srUGg\3CIX_iEWLv9g:d4WV7ZEQ4ZIj-ăU"ZA)kzPb#WgwCk3762Xv_xJx&6]R7r9fZ#YfXHp1,^<Y1;o^%qE82RX>([Gag6YrăU"$J5K3C%pap-*SP(;+4K3Wfh]jq:v4&k?(T9-XS*W&jSdJOXD3=(AOJc_T7%-PecăU"?';xIj3\ZjClGh1XWu5k$%v/:kRpRE[*2C/:0w[OP'\G;q]B4,*0B^#D?e^.(_dăU"Q<_cH(/d^XbrJRr1N&1qqB3leMg34p-r*9;4Fh._++Dg+ly(Mk?'b=6P1-f&9&făU"&Eqt9:_xLN,PX5PDe%6l&lq,s\TX2rAHCrk_&/#nOXXFVGg\;=PA2+qpd3L6xK*ăU"FM*0oc&3?IPHKBPoG8Phh[dxCIH$&FR(X_Ctt:9lhJoB[PcJ*]tuQ2;23Px4La]ăU"$_tbPHc?c+eaop;R<T<QGo7Rhg/>aJv4v.$:S_0/JNGHf](A+Er9WSu49(%D%6BăU"^r(ebpSrp;1_Flst?>2pu201LgE$lbuVe2YtheReq$RR7o[npI(C]$DMkHPZtAOăU",l&g*1'a_vQ-nVCewC2y7agFK?It6AvM7FUjC7_8WUa/R:eb+$GPbCpGpm0Mr2jăU"LYLbUvGGIL3GUH,m4pb.4a>bMMFtJMT:kZM#]5B&hWK'][$%8/NRsfS=w(x32_6ăU"N5qg$,;xEmqQiNv8hcxRpc0Js(Qd*JkVJttzNth6_K0ZkECiH;QUTN_=Zb2[x0kăU"qCTP?8D,>?ZGbJ;_BeJH2X\uDYoH;O*8&l&tRsL<%mL0]y95f]qN9MyHc$sY\xXăU"-Px(u%p()9%%'%-^%FLudIhz]3/bF%4%nR%%%/%%%%wzk%kqjS&%unI2jDK8uDpăU")P)adI:Jwvo7_#ouUuVVVV&Y9S3L<FFFu814404xo*4oS3\uBcEeu5lv6lu#V<iăU"%3FoGk$avQL9#L*lF=]IVZNjU6L#\Eejdxjq2shTrp$>pdyha'ohww'l\o>O$+>ăU"9]ws(#/]#iWLONhsYAXlfffUEu39%Llj3%exHxxN&Juxju]j.wRkK'su*gA*a0^ăU"0UJ7</(uL]q11)3tG^RO<F(_t'yN?[JNo'=yT>D*ry+ZFK29VdX(,I[\dcJVSffăU":Nn9Kc$\O]\FyQYf%y_(/+mww5'%iMRzP[yP-M,rhgv5j$))J;M:f[oRojKtJBUăU"4Ai+4r1_s7l2U=6r'#c^sw8_p%=mTzCfVyk#,OJ(v9Ug'.K?ZNllBMM5(N,/]);ăU"TAOS%AjJkKLj1gkq*;*4]'GSLlXG6QBUKxmagb5h1heJ-8tcW_IuNh];04A/hv:ăU"akfn2\'?cJ7HcjP2W<=N*.DV7rsVZwd>#.\?0P^hWq3&cZ4.\)rFs/4k$BOluE4ăU"=B7uvi;bpr>;Pi'8LqH#;'Rm+;Fj6Hf4pbasCSWvJs\8]zo[/#4:1VUeR,u3ZkEăU"+CwG$'=pp#HW27*Y#rDzh^JNhor9mFXT]E,PteQs;f$ZbYixNvh<\:UXK:dhjWmăU"zkeKpE]rl*.=Pc.;j?1WTDNs:U>Qb.KENnVV*?WXtAog]M\bMR&.oC$]xBKp_AJăU"Nb&MN9z<RP)5G?33'P6J,c\)er^YT/TKcojOs6D+2C<2d3;6o>=6QYipI_->LdQăU"Nr:ioTb1JB?5lQ?QnCN[_T[#Xc=cVV\eb$*D6d2uqX#r##n1htsQPTmGX[]]\A)ăU"X;erf(uU_oZRX9gBMYA.lXLQJ?FB[P<$.lTVtVQ-fb&f1_^UY.ZRwM2DvcQb09(ăU"WJQDB=LNuco2zCH-e#,_$E-CRQ3_mu7xl$.'GD;dfZjf[5/i_<Dfbo[8kc%kKNCăU"lZHe8x0a[5d%b.U/:Z45]gXkEkEK$4KL%<v[Xk.Vj:]%[HGn>D6^ca96[f[h\GaăU"0h73uv%OZ,BB_oi.Bhnt&dLgiHev/rs>od?Gd,$ZX5-5i=P^-k2Gi[BH\yadtSMăU"^jDLHV>S\v$7bNYBAMr$?l6TUxOoC*%F=v'^pC>fTQhYOs7$RTK6cP2tWBt>cu3ăU"k0TqiAwpcnkb<s$e7vXJ%Of/QD)TH1JF6eUw5G&ZhTxuxdUm5L86bPUe);[1ABrăU"Qgu^2'6?;>qDL;&7kH\0FSX\ul>rcrPpcV>_-Gct?U7hg\Lu$gP<2kB/By]r\,hăU"$2=AnTK3flcxg#)yjJT+rzGu,LyK6]KKph5QvaLgRxb7Bx\U<CqsENm$655$PL<ăU"Wol*Jf-<VNxf-#F:lALk'S;cQt'FFUbn)>Ul\SRS*Cqa?d:VA4^s+prsMuWS_*ZăU"pk58Z/S(Uw6q8c5ul5xJnp<z?ouBvqCklODwQRl5=pT8fRf,x,^$E>#P4dU'UhFăU"x/A\K22%Xu02UT'+MGf6>JLcCiTJ*3'dfd?_^HOUvt^V7JYunh)X\[PyTg_Yz>NăU"n(<QfS%8x#<&PN*T]kL#M<5cSanU>l._QUjdOLfTf>wcw8P:%PQw>)L'd<5vLV+ăU"[xIPJo:2PQ5\XmZPcVnB37tYJ\QjPOKx5-fh:7%6aR1s/En52Jee+R,]A,[tu2uăU"2']1$4C,tuAC\p89nOioi5*q.?X&_bXs,OJib/NnkrnZb7PCchbMlVV4lpz0S6:ăU"Y*q])A-BuL:Cgz(f[qC[<E0wn+h0&(+fWYE3=zB8]3Ag2u(CkkJU^%2LUQ\c:$năU"LbNFylTg=(CTh3*^DpSHvx/G[2&lB=ny29#Ap>m[Cr-O27D9).B\Mp1yQ8XVH/eăU"#YyKgA<CfNTiqcuXHEV^LBXY9h*L&N+N_lus'm)\J??J,3sT-*$8gxJkJug=V<BăU"P4_VqHSa\XR.'2N%LWq=xZ4Ro[Y^>(fCh+S%Yc3Mp#L%F:E1%)yV3759J.X,G&,ăU"GtQc?9kKzomYq#3mq-INgr2q9t*t:cnI/r]wzRl#;Ue=R$&X0*,sz-4+PhN&7-căU"mW.BM#L<6l7T,[P&CjlCi1rqmu1?BSTI>v*1>cx5m2l0E%E$03cSPLLb<2$'I'uăU"EyD>c,hvq:h:u_gWkKS=JV*)nkr?/7-2vk=UP7K<ZAl$;<h$5PHmk'BqvCdjqc'ăU"7O<6p?N+_n0i.]ka/gt#8BSPE9utaFU=;Pp&IXOd1\qty7tnj+0MX5J0I%=fZx[ăU",CO<gvz:,((:X-RdwcfE&7/LiYY7nN$bGz'YV,QnUCkL>LaMm+S:F)WDa:f6tNhăU"dZX\S^j%beeNz5h(9k27.%QAG\?88Mh2,F,?VuOEA2dvfsWzqBR6#tI;oL>Otn.ăU"BGs37;u*$K6A(Ib^W2Ps39]xc?%:Q;Q=fNIrgO$UUGMp1+#ub'M9QJaK#QPb[ZJăU"J[[oJo%**Si'[SpqMnCotT$I]\]%L#a.xd/B/hdnh1O_pt>JKC5r_7Z#egPvIMYăU"Vrb1+6gRGSP(hvLtg79/CL#cCdJH-rS3q0%2Pe7UR_g6opL?LVFf5nl7.kRzKbLăU";-)x1q#IYb2OZ+G14ff'&J4-m[/nv^'/ot]W&SM,JE,MsK$Ch)9ba0j>6Yd;?FJăU"z'g^i7puM+UsL<fbS\0Jx>/wh,j=Gq]e3=1m7/kkW%&GM)uLSSOWQt>K:A2#7D%ăU"(9FzS?O+cq#ToTuXQ7C+B_5J?I%RZ)TRvXQ.<uQA[swX9g9%6c_mp,8IFH4O]&săU"dUXGl$bOG]L=G;h)>C']<jC&cK+O&5ryx3&</1j/Qv*>VwEaSB'H&3sSE?g3qe+ăU"uJu-At#Ka9YY%(9\cZ0U4iF<?(4s$XZJG/m$vC*f(2;fZM3RK'K]983M/,%g$C'ăU"097dMSs=G8k1u_5,67LD6f/*%nxlrRP5[dWzsm8mCc&p_R>m9kTBd$vZ7QE%B%NăU"ncsv877muahQTu5zA+wu69+%X+c8%jGqwVXi2a-fGfm,TUZ4WY$YXvZr%H?OISUăU"&9[zmn*o\XK]eVBIheqjm4A$2t>D'2boO]ex>rf*;9;_aBk];FaaWe5$Gq)ii3PăU"9q/YC9r^n68PCh==+lQ$Iy'aDZeMm,d;8<aaeO/vT;*A,x#TO+Ilkdlb0U=Dt,văU"H=xijV9HZ:mY=Tqg7LWfNgS0r9a,S?rmOwel%g8C=b0P>P8wQ)%.P6CUfjj?qAMăU"Zesv$n)awmNf^-yjHVD]k[Z]?T&8[9x&$+R$Y+j-,PT1$vh)\Cs/oTi8L$CpisbăU"k,422]-EhhrhnKV=)N05,vxbY$LVfVwD?D&=[MJO\PmOS']B->SX\T3E#EK[dO1ăU"K8ySQ7QpULlrC8u_UKQ?A[0R3%MUd;Wtn\_E,-/9TPS&qjNda,f=$eovWD[6+a;ăU"ALpKM_Q*=UJGKEPvXduR8uJl)kC/uw:w>),A#9.U9=&fAN^P%wfOQS>D>\Ni2U0ăU"tDwX)1mItc<OMH>'g;yN/r9F;Mc_f7HV:9'NM%?&_+R.+TdnU(R_p87kf_]28jxăU"/V)Vj.[ZBZS9fiA]+Z$[fGO<L]drqZ]uj=vy6tedgw^eLYO;A*:w2H\%AVKPj5găU"(ujdmN*NT>G0i99fyk?#Aarm,tWy$fs&*93j+G6+CF;Z\jW3POLCvM6:0Tfhw[AăU">J'&HJ+3gg:nu$,#LAFTefZ\'TFAE%&[howh9Z2;)T-h22M;OF;1+z3bVe<^wgTăU"ST$h6:hhYhW'y7y3.S7cN5e(4dLksVQTW)Szu$q8XVYSgT=VUD2Hh^:gO'3KcpSăU"W;X;JKmr8:q;QfeLiKcyInt4^#]?.4l;ha1k,E6Pq#y4s#3L-ZIu^4_mV(G)t*ZăU"7M,Js*$-Wjqm71D=S+WTVPM,Bw51O^..[DuZ^Dw#*-H.8EfJg8.%sp;>eL+x\,:ăU"P'Kq?*61Jr.]RBNMAKDmS:&ACx]O7JX=^:;z#iUVJ.c;9h.WYj<SDi+Cc^Xqe([ăU"ij$0XN+G8$73JE#ZFkc;gbj6Ib<oeY73,dL41driW96=B6bCo:hOiS]f3aPG6$8ăU"%xZ:jE0y$E-BeD3eI#_<wjEY9_+rl),YQ1WAPH^<)HWW>VNy'iN$l(?8\/s+E*oăU"1$KS/\2KW%N\[BdfQOA&[(GE'<=ZMiMGY\dHCR4Ra:F>o1)KP?EBSVRIBbkRf=XăU"$+&2GOOOs9h9k=qUFnc_QHeQ.55'v2l$lXZDS/#$[nl$hGspVb.'S7/VkQr>LD:ăU"a?Kg4f*ZLD&CCf6[5RL/:Z<LpXS([k8FcMqYq\-YV2BdkBmBW47?Wddbrq4l3[lăU"RtG)/Eqeg\uG=HQ5c%_jh*aXqal0W$a0uEC5IHaZr>v3C_6#\B?2H*g[DK-tB-_ăU"5[>CZq8g_d+z#P?$L0;pG=xRT_ayfYAY\K-JE&e5%nXVB^j81^$ZCT9Y]mF^W$băU"8S>[Y:tEmx/&X6/gCql,fhXBrh2mhECx<(9Orp/)_B#3G3r,W8hRmkJcZ'PG+0qăU"P^i8f[FG.ky5)I:Yg3m*5^M-3E3cCk,=2+mmvE.S_wdK$U8aJwLNkDX?T_0&G;GăU"qoIkPZV^*8gnEQr7mqI9<lN:i?rQes]w(atbO3Hf1<T>jjMWSbk)M/jVg6/>4ClăU":0>wmn4v<T8A7W$lSNE'bbA38V?p<%-#5ZUpGBef+rEkA%N_.YlOb^r-#0=z0Y&ăU"jR1YBb2JkltGQ<,Wuv[B7s=uo=%RVg8B^I6$IM(j4/(1u&EO7dhuN$n?L4W4SfWăU"&'DZ[1F6;8cUWACZqqL1.#t5y(Hpd?9=s_$PZ>s$Zgvgub0rH3(l<r=+>t0D7VhăU"ERTWRkmRLvPT.#MPriY*Zh,M6.YUZ19.$1n3i+;uE\3OAO1o+tG;Frib5%V\g?aăU"Bt6v$vDNi&^v7m^UTCBhFQ*^jxS6)=7'0jN+.HhG]U3x4pe*9'xp1YLYMQZ]IjdăU"\kn;\k^p<cr9T$42:c[(U>F1HwHFQB7Hd('PHG?\_:'bb#f53JBD[E#KDV=$S5zăU"Z^qj$gXmCPEUycqdz9,<%*VK)A,den(ZBO#-Mo+-RLp<ZY1&<LgTOUB]6X5Ux)8ăU"Eq1IQ+2)BB6H0R,6^N)Jck0+o1*kW:H?<:d?g>Gj32M4+kk?7)g,=rl3jFoEOTPăU"9Q&fUHRhN5ZekLwLCFuN2.9AjL08J,ql+M#'4MR5wZ&-==AS4dEg_$eP,S<[hn5ăU"uM%To<6ksum/Wf$wbo>r9WYr*I7bDbg>z.*86ym2:ah$Zt08f*K)b*lTCFK^lJ<ăU"r94Nn(;rQ<gk2n+YpBFS'bbjR&_3uj[e=MDNMV?pkqhmZ63hfcO,P4fO19r&*uDăU"2BoW9[G8mBX<+5:s*Nc^Mn)byuR6k[pS8)hAdU#U]F3BbfUW(P0#>*R8DXqN38măU"D>%+zJ&EcZYv8o]up$w8K\KVu?cl9fP=8lmRvZFlKRZJT<8YKmo&+#DZ^LpG>6qăU"hP$Jh,^k2:jS%Bb%rb5(;^^BoaOjQV6E.F^*'EnUTOBk?u(_i(jgj=Ez^6K\//oăU"ljDiTWw?9u/WIQ)7D'(MwKKH6MDWzDM5S_I4)f9Q0m-_+J4mfih6TK[i7\>A9&yăU"yUR((UJ#nh_'2ic9$Ur2JMR_19k9Z-(T+oduBHU;'B^e\y()N,f?\)KF*,wa^o1ăU"w4(V>P8gjifPpbokuTbo0Ug>'H92A9Etpk&?*>cGuRPR1sIm9clYWr_^/II$pxqăU"-fP$?5\&bE.DZlD\WC##Md0he\+\--h6I415gbt:'o_:pi4oFE'o*jbHN5-9QYXăU"]jJ%X.Fi.v(Muk92oj03Yq^1<2fqrFc2c,4,hobHF:fYEm\_g4RjT.y0gu<&BilăU"76hg(SeeX:gRavrszeqh/c-WKe0Y00e=7:?k2NaUK<VQs^frm)G#Oo44nrPubl,ăU"l=*Lm.*_*u0D>DI*IswZdRXx&4q?]FJHH=?7DA7%,5%x$bONq)Nb</)<WjM#5q:ăU"Qh1QsMk8pfGLoWJL>fIMKCekEad+]d*ldXbEh/:%M\5?&27#\9vX(ed/^QbbaG[ăU"_%C]MJUCq.$BMh[qUh(9O1eFku/Wq[9M:_$q:v(&-S;]/4O<hy%^cBIrC\-JfO^ăU"'H1s0]0^%<0][+,Bv9E07a>yH)eg-=rU95skM>^oU_Ojkm3#Kp-q^u/L10c=0WbăU"36F?(a?'SSs/lLge4hN^c(vi5dV[.F/Nvb$9/UEk#C+g*4q;U_EQL).aZhdg*5băU"p=YJS4CBE.uDa_(d+3U%x:A,F[N7R9g$:QV).)zStU+6]Q2)H:Y>[,vqb#Z%c^>ăU"'(km]wF_f7Ay#]QkW9p]Y\L%eC^rrd4rZ40kt>(GklUIU0c#h3iX7L=Dx#I?YUrăEND SUBăSUB V6ăU"Sw:uBTieWtPhODG6S(w./5<_%+,I?dp:5A#1m-&7<fq4-svY+kQ>A<nAA3VvitfăU"w4Rr.EP5W?Kfk7CJ-%?EDO(gz'(mcP%J?B'cAS0Owo4_A['glo^'6;(Vx6]D)TAăU"?;BsID0*OAuyXU9S.GbW_*xF<N<?'O6wuJ9j:ZvN2auO8yIgDBZ8]x]5V+SuIrEăU"%f^Tz7RJZtAege>$a^qiw^l*(sV_>e=&0^Mtl+-to,6$uxHm0uj&aOY:+WmycFAăU"kWv[R'c-bc'SU++Xmrlq9Mf$5/CmiDy3oj'B3Xcnl?57NDP/AR>mfl8bR&kHiQVăU"ql$>+hwga<a5Iys,T)Dc\fD?>/0QH,N0R3HqZ-MS:(6TT2g]q4R2z[[(T7;b^mwăU"/#<B#?4dw2tjg.oouP-X50Vg9P/hEYJJg6tdjX4Bu.=0nZ?32U$DgctMjI$eMHqăU"XMUsU,%,FFUdm+1L4b6XgXb^T;[+JHJ?lG,b%\6pQaHb=:&5U/3D01K*1adF9\VăU")ah06W<9Uk58r$en6bu(UUr]M.5(,/rKtUB)GcIMTI[Oq50mF0895RXW+EUff8MăU"KqQR(bB9X,tRf5hs1tACo^>n+h(bP:CGAALGO2U\4$Ws$Is9,D,6zeW4QS;A:f7ăU"27^Mx^rS?YhXA((G;nlf2<m<T9oe>(\U>pF6$$O:3k)<O<QO'w^CpJ1tqUP(n'SăU"M?iG5P1+=n.Y(Z6xhTrh9_D,)P?jDFokd-N/(CW'T;\Dg:e5ae,VF(n0C%ULu#răU"quY4h+.b9(ccr*MTZ/xT+yh7pjog/-:77\kr%OPe;q<^0<fB^(gJ%O%H\ZeA73wăU"d6/s>pRg$f&9eY*]Ks?'/ios-j,DBB?\qzF#SDu$T2f/d7T&t*K&wZ^ddkAYMI%ăU"Urx6,uh%mW;:[/E>9Ud<HtYf-5Vs9jb9trkkm.$wo4o=%_4][2:-UsYs;Z/EP9RăU"S&m3[NXU=q,NrI5sFhK$&'Xu<04DBo.ql:'a,BXm-RwgrH^wot*iSuD(Y$T%k7răU"Y76<CR98JV,n;;Xc,nY>fY(:JMZh^rsN/Gf7>l+rdY_VKhx_3LfdZe5E07vel(iăU".\,)PX6XIN;LfGA+]9Zb%i$:IS^wfi*Uq<)EONqYmH;P6L?E]]Fcj&c[/p8WB#$ăU"r4;]&/ZBFmToOiM:-7Aa;UPp#Pd>k8+QtnsK3U4x?B77OZYAj*/M</b(#0CL+n>ăU"50FfnTd'$H0x&$<S8W00_Q?e7b=:bWKVmIO5==;O6jlpO\Th\ygRIG6*s:5l8PKăU"P)xQ3RY>H5%MN>Z(4K[D3:(G[N>#4+N2wVSYFO+uQrl:=]D)0IP;5a(#L2lP%eJăU"XLa1[2MeLSvDshNNDi,-:'1dQ?v.0ipy2+^xS/<e,'cLE=1g<>q'hAb,.;wzs(săU"[BseOtP%)Oh:H3<YlEK/xVHc1TiZEG\0u&<1R'f:y.vV64#ytOM;N%#Ju3dK=NSăU"ZToK8NA:XT+AT#xn92IPUWcxW\r69vk'$.3Y.^yYy)\>BXZV,Q3im&*^oTsoG)lăU"oNMXs+*P0e)8'8)CEW,H-;XRyD#AWp9o._C(PgTLySkg)5O^BoFa[IRGtol$:C,ăU"LYySZ(uTAFC7&+4F7WNyCFB-'^rWB=lvR2K[*YN1lUufIEV:y<7l6pn:;o3Ii'qăU")Ib3:;+e-v;+Cdsn7sq)7r:)<#pkw>]Z0gb;c^y)$$R#qG>[X=*_SaoH5g8sKa4ăU"y)o^:8L?6fM7VYCs5<qjQfQhnV_E5L)9PjKoZkf0&Q,hh<RQrmA:;hPwv]\WgkeăU"?(i:Pn]'ubm=+E*l+vxW4'q26,SsXC<8>f+h$L/H5nQq%KF>]^8MQvUy2PQEOa:ăU"Gq\%4kIn$>cJW<vyXY#fGY_ODpu(5=5:G0G69/Y=T6xC)uUnF?ji)8vAj[dz#hlăU"DPjUehC+awK:Z#t6\Wpq-)9CmqD5Wk/BGUpgPdhW*49.g>8d<K&7;cm-h^;7,maăU"/z=,Xe#7y\_S.DC0nh:c,W$U9:LL%L0FIy4.uUtAH+GN)B)R%sT\aN=q[#$kY$[ăU";N(5kTB,1%%_h.lV9nbW\k^yJRtU55P#EWinXx?L\\W_n%M,5c,Mv_^/DEZVtlaăU"-3e88r0EjCU$\oWC;w>2.#8tf<pMlG:h,D&#$R9X9NS.7hB6QrYNbWy6N1dUUBLăU"O0I7FLsoCRrTBjlU.*Ft61eZRhapS;tbK9E]-OLH(h4_s)l:FR;B:XxrbA2+cJXăU"IsyBPkzo(s^_Jv3%5X1>g>,d?0?ZzCRmlxp[8yZsXR0Ml5[Pxb1eYlo;F6HoU$2ăU"so8E>X-IdB5l:&rJ+*-_OpcX]33D61s<L4+ENAIV$+4/?Ckm>>/+Ye]3No9#+W^ăU"2y<vYVd[=/Yly60]N>oDF1daidgRsD5+z;E\O:vV\PTxGfeNMPL]Kxb<YzOM%DaăU"D1)sq194dGEhd?q,hqVu4F6'<sc',HrNu$aC%Gu$pjz8(<B:;YdL5s7Ip,B;20CăU"xcCJxrP8IyOjn/N#Hfd??/+rCb1^\OfVokLUhg$HWs>m8pq]I.]m9i<)KFcA(wrăU"Ce\Q)<&0n(3jw^b:3*mpl?$KhJHfv9'hEjF'/*dJ?k2-cf)Hz4?s:3/MEoysk&iăU"dWB=qG#cBmMf%NaqR>3djvJ$DsUeP.(xVwN%RTYHs1uP;fbHuEQ6)H^eT?JKYu'ăU"c=#EtK+0-+HiH0nw2%uREfdZsI3),DTvLF6Bg4MNwB)s.Z&=hCC+<>So,+x?GQ)ăU"IJI^X:RgPGdDmVA:f$V9qg<$lMPUBsbpWRi=n,Qh546OkS3&87WkLL(MCxi$0]8ăU"[AwHnSc:a(b&e0>.G.^bOBac-;cKD0)[Y\od]PnJq'5rv]iG-0SOP.+kq>o1^2(ăU"h.'V,^o')v1pzO)NsPBYn6A0?;-7-HCBk9zjD5P+KjZKmFS#SBo/-<maX;VXNJFăU"lBsad1x$e_vENX*j1$.V&-m/49F9b/e?,6TUDTVuTVF;KZln&bf1kNfl?OD8wT6ăU"%D?'$ZXz1s&gJMb+\C$L*r4)Ip)J0Vs<ZnSG4,jYL?T0tFb;s/6$TxQU<xnX+]/ăU"Pcvk.&(('0juT?V*i?+5Poi\<wYtlcvlfH+1f4]D?<q^d*cCDc&jcBEX3S>#xmQăU"V^Rb0u,;s8TdH0ez+3\F[zN?qDF,V<30EF<MED\KB70AmNiGE[nUih=qn0ih#NUăU":2xHk+BG*KTDl.:geP>ec<qR7K=Q46ulD;kfKvI+q<#tU2\x$kas'VqFJPF#(^0ăU"0wf#LbsK50*XAn7[R^cst)g$B,VFVMwr^Nf0-1JH#;T1+vS5iEFZ2q%zQ'wF9j:ăU"bdfk2&g/Du9<B4;&]NBqtS;ZNR;8B=VLM:2oOI*B$9spffoN\1Mk7dl;#w.]mC[ăU"V;#.a8D-ZB4e]Fki^EDpFi9LT,EAt][4ciZbL=np9uIpRJb]RgpKiA;ii2_hc89ăU"n&u?P[_gFx-p(n/I<N([TFZ>]'B_dAJSM9iTeImxGum:b(h7JMTspA=o6r4>5;tăU"*<.Ni03NTB[R-d6*E%W*2UDdHDkDF=FEmj>F:?-RlxRtB+<5Wb8WbY=FQU2>cAgăU"[v41hys_L%p[5^;7Y_)X\S2_ialG$[IkJo[VLiQNs&6o//*9lBb131xBqXf?\g*ăU"gkFCe\)]kSw-ZXQ*c/'5$e;trem:?DunA4IOZkxl:mD5&Ac5PdksAURf0=XPG1YăU"p-EOJAZl8Y2*,YBsikbkEX7_&2u'l'Qg]AW\a*CP7-#Nz#_M0zB\0t43ZF6oCqKăU"Y3H\;IaJ'$q:TIlcA;IhVqZ;CL'h6=gd=hJ:?85(==gQgcFuRAx>p4^DXR[GHABăU"b7-M\b3n^53=Mfo'T\.<f6qgoI^O$HfC1A%)Ce6pdl;A=Dr<G\$#z/u0C;c3NR^ăU"Qt9Fdog6u:(#cPO/QqBh[5ub2>mNL5qp/C$uTbFVvS/Hv7GSIbFr?(3s]axj1F'ăU")lVblqPmU:qU/6)\tLXQV1z]5BGvgOzjR6_0C*PF>$+k;x\0B\StcoLQ1m_WnYJăU"Lhg^ke57_KTK]9FGRkj$?RBF#,qxHf&IqzMeT$[Lmc5Xza62E-Sq^2)lJVEX&gaăU"lq8K1)6H3u&*otyDH5fYn/g&8F9t]#V01U1A(MU-Z=_<$-mG/&26FSKy4=r$1SlăU"_avEl/%$Uk,bgr?QPM#h_knEStm7JHV,xGlg=9ve]hql7)k6=H>9NIV9sEL87\\ăU"PUb(5FGBl=vf/T\wZ)JjTHrO$;Vc0Vl;#;6sW47m'+26jD>Hk.Ek2_])E^UwRTnăU"^uF5<K*pO>FG)w.6MylXgNQ$/St)q,DWh]P5Bwr]]n;RkHu%*8by9BE_M7E4M[7ăU"9PnIW?$#(KHaiid>;tmOvCzTRWq5JirgivCK>L:f2:pY1:JdPp6Ee'aRO5rJKVFăU"#'6\#ytZRTO?5EkVj%VYEXD743D:%v^OZ207;7DM6;/)C-5*iHpw?B;oy^=bFP6ăU"]pnRVDuJkg+CJLO^R0LZbgxHpHPr41X$Hvw]Cg6-\XbeO>Jwdf<YTJA_KSJa$jSăU"$_2af8j3:&gf*3D:n.dJi(:wdQisykP/09D2VeG)6KC:HC]bdxJn](83)Zl\nGXăU",ZT8<K\Q'-aaT^?):1f-3)C??i$YKPH4Ee7umLSSP$Y'9_Opl8y=T,42uDO6iFgăU"*k-<QmCkMK+pRV-CTYM%9Gn9nG:1bARtbMQ?XM^Py09aR,$rosP<[V;R9kPF,ugăU"<:/Xso8q>[A>nbCe]Mrm&b9\Ch%4\0AB<2^Vya).JiM':y$T;MQ#X49ZlRe1<r_ăU"-8_,;7#49\7=p'(0:dAX%R-UAblOS,_EE*x:p41_g;Ea#;s.lKBsLMVO'lR64hnăU"CCqsA>fd^>vLh)5eHoo7'p^f,3<r]mbQ64RNy%>BM:IQ5yp#D,F=Gc6NR.ohh,răU",Zq8=Njc5C=a\tbnksj9pu',Rk+VpjXs*Yo]WfWR>RL5b5_L5ElSW*eL1ZC5TLpăU"\HBxm$+''E#-S%$eRCs+2IW/tDQAujl-#XnNkrOP#?]=mf6W8Mx0R:W.mC1&KN0ăU"OK3Cbg6b'oUXR2J[.xh]x>ZC<hnN?d6^ThrWP5Q:upVSITiP?Le7>YZK'6t%Hw^ăU"W(vi9P>qm?<OJW'uw4CAuE6kwn/3&%AM7c0agSZhF/^OphZv[0BOrUU63?nj),[ăU"3oFo_<H5E)c;2z>UhehciTfTeXP+;d^nBU6uTGY$dpJdkua,g2oSa=ehwetNk;$ăU"=9(550C1Rk+(5E:H(Pp=oYlE$8#wbGjRpmp?;(r-m6U<mXqD$m2Np-iTI=KC#^&ăU"ZUMR(X53\ewOc,WKgFg*d,wx0\aXXZatL']Os_dQq,1rfv9c4X2Rj>^cp(h0]HqăU"Y7<bP7)We3C9vE6b-6;lp$UDi)SO;wqu_tCJa(kKBs^Yk:0)_:LFENDS8Nf5ZcTăU"2)cm\%$lUn2>9E'jV1\\S_zWF_f'-fsn#n+<6^'LW?q^pCVCTLCzEM7Zd$EB\o)ăU"cetW)Ws$OwBFarOt1]Xcf,T[-=VjWa2sZLe%/j,6$2RDa;vpBr%^i73D)6r:1.măU"n6aR'[sYdWMO'w,>Gc9<uz0Wp,P_14VZqLtLtN<25N:$Ua40pTt5[AONMbEib9EăU"LS/hvzd>,iYCs]#%hy>w3$MklA<E,t=JLkCpp$pnm\AbG4jsipW'K1(d8?$#fq:ăU"_h.>IXUscAZKtjIZq$(vdu)b<c#+m\)Db,aR-IKZl]=;%DX\i[m[*OkrAx]<1:uăU"+0dxYA.'yd$t7.O(>gi_grlT69an9*/I6m]QWp(L+pWP%BD7cDO8meJ/:S:1EbSăU"s3Rs-bwD>/0?s7w0MN0&l6o5Ih6>Vs=t[EYlK_U)8Z#]#WX*;2yQ9Y&tANxg.KQăU"ZcC2(BG-4%u4.tVWdH9qQt9_SE;Z][X6D1C/M$3OXaju/EZm&kbixT&Ka]nHaD>ăU"ZtQreL7qpZ\fS5_:4L#8xEkDz^%#re4^]lODm\+^]DV)FAo0m7>SC7cq$*P5alfăU"13G-oFyT.?>/VBEj=J+/YndW=2fRa$vRN$6u/o9:Bmz0wdGvR[nxRmf4b(9;aIvăU"qx>m)R\^Hju,utNb>_vkTxBm%]7'ikk>Kn*7.LeOK%%ka6LQ9XfG?uDIDjMVa(YăU"WeRnljzTZ#riSe4=pGDmHpd>m&_=>.f9J6RBO$8w_Oe;-I<E?CSMOGb/+^G#xI#ăU"G_rgO2[cdgkY,=j^T+Z<xr'ZhNQR)L7,g?<#nk/T;jPq5Qm%fs*-KBWq;xE]oU(ăU"w(+9RXU%E91<-Vh//bnnb#BAjn4nU-uOuR4c$.&$HSgCxD3nW(419O:mG.aW+XJăU"xMEMRBwqLa,./hdO6e8bq1][3RENT_i-h#SIAO>iuB=I/FDbb?$FkhILWNm'[/TăU"#X(jS8u5TIqS%KN)SbUvLc3cVD\xIMj9BJ6<3/6I+Yx>x5-ETW8cd?$<-mgRhKUăU"#k(J2_QXmf[*8Qnk%GL/:S5Ne1qarJgL)c2kAS9ttT^)GnwJ;yPn:Mjxs^]%ZVrăU"+M9'8S$p<m\5WRbS=JL^f0IM3^Cr)dQk8u8=eBL?nJ]_Y-QFh$D1Bm2-(2].urIăU"L*ZvB.G66/.%v&c8V+a<CAnz>E9)*?9glqC>1Uuow&CfJs3x5hmo)T*^E>HM63YăU"UhjOz]^Ri+AgoC;7MU.?N+Et+h+W6Ks]=KTG#:R68q8dOy-7%>]eq2RV/7%_tZ5ăU"1OReojN6fnecyfvWQe[AmYQiDJkgT$gLIbUah4%shr?y*%U%1zKC6m65rhStTg:ăU"po,W9gXO\n$f$:5wZ(iR0MI\z,g^/5OZWs<D^kyQM/bPQ9vs-1Eh0M4m*H>]S),ăU"&I;22t)_L*kSWfWx1b7k_vei'BUYP?)L=y:GH\_*CY[-f5HK+Ac50MXP$nRA%A_ăU"2sl)d=GbA3c#U4v:lq?P4B?>=:mlvt2aNKrU[Ry0V3]BQoTkQv_dZ*L.p0aXd^5ăU"IDq/9YUCeJ]dEp2$O[C3po7CUN6+;_>c4l%dw8<vURR&%hj(^z[Hil*6fqPTdsYăU"01w7^-S?TF[cmH6c8n%2-e0qu;+OG*%_5sM<RMcIJ&tiULTUYpaRuYiLwMvv\*DăU".h=a:m7W0oTPaZ?IKAtQil*ZEpB..49mEq89'XR0KF;)ZJp9t0Li;KT_)R+#Zs^ăU"c8eq<[9b[Ic8y^=3k$f&yav4P)VX<\sWLBG=2d?HTqiK)VeyKI\w9W2jSeGDU>&ăU"Yj)3j4EZ+aOjO:t2\AwjmCt;&:5d8c[$Py13;_5>XMua3pijP<__Kg80Vq3'yAzăU"3z,F<R2%1/x)DS*YaU6[j?K+I.g^s'nFZ0)AMncJUUP=Rc)Su*h%;l=sX0heQDAăU"0?JhH<K+-WH)WqUQ0j)9=;pU:st.M#i+iTuh8),KlPTYSWZYE(.N6l/e[Y:<)iGăU"BZhRZ#6tqga6]R9P0E8Q[jt?EPa>N.]*9b.sj*qC)a/OR9#9j[8w5zmpQ<jQuX6ăU".d%9b#HS[g=uxMF+2(lqW^b;%SO,<'dOoZaJP$95icNor5Y:=,25l:/CaBH\E7oăU"PYyswy,bFL%2PmE&M+cG$n:u.Y_JB[c:sy:Jq]2gsD;,9p4rmdz',q%72XxE1E(ăU"02X%jou[W(pW'bq3$ou2#*#q$x.oSduHiQxv.+(5&LCT\.m><iO2:t4Z[MP.#'FăU"C+j#,WJ9sQn9?b1XFiP-YZD,vMs\w,Hi&^eHI[q9kz\[4+3t;2WMW9tA]XlP58YăU"YbhkGj\Mtf7C;?_R5>L=^-b6Fp10\acpPJcJv]sq,q7++RZWi7oz2c]e+$TjF;^ăU"guv>:B&U,KRr7RZORP./\4D)Q$f:s<Cz#\,WaTZjyWJ08z:E69YV5k-uK=_Vj:eăU"A80OM7=iQNN>$R:0O6$tlKCD><*.O^Br-V.Jj&5Qgi:<#n]:z-#MK1nv[sX8qTcăU"6ntc(C<ha_n'b2+<QN/wcmsG>Z]&[541N:+lez_cRN?<HYQSS\Kw3LpD\H4D)_kăU"c<jV3m>\JN)f?l6aq)RcdGXV(F6Ju9ho3G4:7Jn>Kq&>pf3]]W0E:BB:Km^24U<ăU"mt$n35x1Hqby_.(f'SR[8_b]^wmj?8oTPalJOD>U?Ol\/Z3H#]Fm]^nN(=WWtf;ăU"L<_wp\R'o+Z34POp215_q=>Ded4SPfv)4JP;Mi9XeG$QT4Pgv#s,L;>l'=Kjpn1ăU"?_o8>LGdSk0Kd]7Sg]CfMWqJ1e/=*Nyq&OOoC\IGx9G>;Laf?^^SaVR)#q]KZ/aăU"MeC6FfE$9is+C</FIYRPmt1(/r;>iXdq?LnajM#gjmk>RWBBRJajz]s2a)lHIJRăU"SRwdg%pM_H00'[EKBJ:qD*wRtZI>20ZgWQx;u_\cRIc_H&8fq&H]H]sRyUW*D>PăU",H*I9O<h,azZEWX$xax:=tICVu5dn:1c)o0>&V4Q:',^.=]qQy#w]_xG0%mz($6ăU",/xz?&[Y&_i2D:kjbeEF&$]^&fcgalD+c94C^2H\DNZI=Sd)?*)%'&/<J[bLd,OăU"8We+[06bR)hg]_yH6g]&i(cb_*g34HN-FO3e/r>E\V+RG5S=]HIgyId/7*/M+9/ăU"%xI*+wYOKIa:p=_F[%IE$M.2+U=e-1\3tFX[j-:Gl4,8;2wi&3CNP;/3.u2B(^eăU"Is95Nr>*bbfEM6-8v'Vk&j3\vtFQ*uZ<APa47QaZ1l<3V8/Ksk'O#n\\3S]0VGEăU"Kd<.xiCjj*fqOk]IZ.,;5Z+vP8xC$%#PFis>#L[z#RZfn?AOdIMb+QqcO;O*ZZOăU"Y#MD_A0da[-R4ZI7#lxYm^U?NtU#_hG[,&^+?&jI=:KWQ/RxS.t;t*T&=s^tMduăU"Yb8=b/d##LuH<-n%+:aj&K54>vs8R+G_#0/VP'4R;kI4B*AvH\l$qbdv,,.JIQ(ăU"tZ)?\dQf3$4B^E$URt:#74n4T2SX3RB^PXo1a(SN/bnTPF$62aIBJjR)8GNP0MIăU"4UjpkQKrlT7a<1KkE-ptrt9r%Cv?2I=jcP_JCpEO2BD'Y=B'&lb^a/Gp2mrUj;4ăU"_jfDdf]QH<pq$,E]06R6]_V=[YePRPAUA%4)/F2;.>q/UR>OS\&VW&u\Cenbad-ăU"eGhz1YMAbImd>X0oTG0*6EDAGVlV40RNK,r[(_OslRd2,Qg'y6+:?+]B?G.)6/$ăU"aq>.>8J?7BT,L=D4\:m4Pt:S>1tZgDM.iHX$jr7fv9-7YLfj-=\X$QBcIG+<+NQăU"0IzYMUo#qDWhQcCap1B\t^veE-s<=Y[1z6:TglA;sCV9nLdB3*BAtcUxw#Y[jU=ăU"rIW]N&tn:C;4&:#0j1udGjG$W<$ydT6fB+(nF<c+rjXiGQR+pdR*:Y&dg^y20cwăU"2zF20;kewHpr.hnDdg5^qw>pt,Z(A^*bo5RT#>K>UHGL)09+a'OQ[er:>[=)pTWăU"*sLCYj7#]b?m<%Qik;LB[j++[XMxF,\D6TqqtKU7=%T8,jl0zGleg(q]I;]?i&eăU"aol[LKrNTiGF8q8xF8WNf_\KUR,%j3OLm^2z1^G0yeGZE3_H_>f%_rbx-H\NgG8ăU"mvh59UUT<f,1_r.g7=8u_30ct<p)kHEVE^e&]NOjVU&:0^I7o>YW:,)o^WjFIW/ăU"lQvS,ee4NH#3XHgYI=,CVwHiL0;VVMKH.n[N,Fo]<[Guin<2\BnFTKg4;57k9RaăU"wsp:0UEJ#lyb.7B$H(ABuh7V\7ouuB+etN=,54Ce5g94WjGd8>\rr###R5lq]4.ăU"AScxVKS0yjdY:[aLoE5U8hT;=db02G/?XBgADl.0=D$P#A(v<0jR]yo<F<';cqfăU"BT:h_HSJ+_x4,EMkkCe#GX7>AH;]tAP-g>hz1:m0LppZfEG/1>=s<#.A5]h/o+$ăU"g_t5XR$l#B4v:T*D7oqmPtB5F7lBg;k7'-qXy'r.Y2:WuC]D9G9TjnEHw],?jHSăU"3%eVZCmNVvBVLmjkvf51)sB:C2z0J+,bC4J3WpoF)COsJQUjQ2N,BO_CGIaXNJbăU",l>l2*t2*/fIVmtf8?:MPsnrJ-;+AYS_^GX<rb'MbT8r\4KX^4\Xe)xa6GfYdIaăU"gEPkYM#L2\gQSV/p]J/p6qaBsBVDncO2?$WN]QtJhmM_o$^\I4q-$co;Y$W%^o]ăU"Ts02><hm136bAGJ1tzo9WZB%]f\G3XpIZ>dsn.V,2^F]-$gQ0jqH>,VIqS:2,XcăU"/.Z9oe_WZxLLX'*Y,Ojfp2?_?030#x7cZJNaRq5v19_$L#<&2QLkV5H06OBlp#[ăU"t-JBEO#5XGS[tr2;1*[8&=:G6o>S[TeYxs*TgSgZn0g=B_w1.(82$Zwo_(?B]XHăU"Ca3>wlgX;KRiW]NNejC1^13v0$6).qG8uk=W='v.>D*>&6NlHYwwK;gC]5l=.8&ăU"P9faK?<04aH?jV.mU1\-[PKI],A:=2DmUvgjS#aj5tYhIGseC=\$7>'/Q'l0nr'ăU"70t5.X)(ucDsR7n=al^<S>o8eh;MXqot9['_0w>e$W[0MnSSn*&W)<O0=ckT-]#ăU"A6NqhgH$XnhfYh'-)^+CgC7</_=ZLJ#z?_<B?LDnnH=6m]Z_FGmi49Q_5gHuBgPăU"AxkN1O?7s.Qk^XF2gyl+CXW6pGbwq4/uc&s'c>$%-nuzZ-i(V<3%Q$I9'NeTFTIăU"'SRgC-J9Z8q:*lc$MVL\fX59wi93a4C(,#iAbAhdpK9#3SYmU9_+W0b7f.j]uOUăU"r\&^>%xS61]/[(_Honl&sscIo8E/?,&[tk=5HxZ:XOTQV\\nr,Q8K,&-?^eg>'\ăU"q8]4Zu(wF\%ir06+>^4i71KUzJ3f\<mHOD6gD>+,_liLXu1d?aa+yt(WOn^cTQ$ăU"Yn[_RJNjK*[1M7:4-\\U6D,gQLlH8SX^V'SNgdu^-]ErM;J(dP^X<Tuu7kkmbl$ăU"0xt$(tPY>IC5l(4u2ho/2[\8g?_le(/St%uZ#9.AcvmtWHgw9t\3%*p>T'dd[f]ăU",fn]>dK[WWhRQnu:d?P=*SFO(n^<lEkD_&1'\kQbpweIGW\?gQdWp?tVFi5dLNMăU"N'xqiWPMraus:(lP8bi?G;:4>p\3DbK]_Q]tX7Kp_63+>:ttMt6M,)GoUUL2fF_ăU"d+m[K*ergzn-pY-\MTk.TN-Pht0+PaH8\y8gA)st>oZ:u\.9F?G8GMMkfh011?JăU"oA1bk/JL9Ec$dGsME=KpdAK8I&hMNx:4?V5:rFM?rE\?i3<qXz&0FG[krZBMT>YăU"0n636+kn6z#VCP&mWDD>>R8.T\IL=?HAS,>gTt$/dvT4U0-?QsVcb(RnM8wP,OiăU"nljuMEa).0hKq^%=T^oxie$#.+)N/Otc]ElG:_'wqD%QJD.PyS?,MOrgo6_nEzqăU"y:lnEbUsu)%Mu.536d+_xaXHNBzQN9-D3'sR_1oiAJai<GJsM>r6N)=M=V#A[;?ăU"UKkcBz0UOGij0cNYgPug/->tz>VsDKF=?6&.TYYZvd8ueJ4zbc^al7?%\oj8GMIăU"R(rP8W1S<#5d:*+.,DTaDF4oYduM6JDihG54kijNOL1>gi=X81-.09>8w\FNt.XăU"<d;7HlUji\T0:^*Dt%[J)'R.LS;t#Zs:IKI[>_g(Gh&)*9bZF=IU4^E,[.c5lH+ăU"sRuFCl8I3LL-LQO]Su5-%0cAo,\WnV_J<[<'J/#tLT9N8_R8zQM-GF5H]afdghTăU"ay6KSE>[<KWYZQ?XQ^mT,_rGXZT57oFJ616^mDv#fEyh^q.YAo7>EMb8l+a)Qz$ăU"GE&jcVX_I%6m2IgJ=+s2][0Z2&So$b86R4QHNn5Sg5<>&Blp%GXX8;R%k'LLt.-ăU"t;0tI:(='KO+'\ASwrioVneBTq(0^VY.Ma(DB4<E17k893\5]QkaDj<u/;1Bu_^ăU"MjP?o)LV^K9Me<(0feYHYVrTfh*,2mR(-3w\#a%p6^U)>/zJ+hEus^s,zLWU+3qăU"Aj?EC7l9cD+deKJ,q_tK8K;>l%2l/W$43XmhP9Uk^(,l:8lp.BGx-&p:QPRpx$?ăU"=TUS6XI96oT9Sl8g2;r9mKiCLY#/BJqTn)$Ug.g1e$ynQq=FHB%+.n#qGc%,ei*ăU"r#0y+2.BFB/0juN#Oj97gsorrg:EXIFHWs(josj[HLkR8?O[vbN:pk6iS<DqQOsăU"JvSPmYtAiXG1P_AM\hft<xJT_);8tJKdqYUi&+5lebp?A0B;^3QR=?slQ$tkdEoăU"fwo3_n#AIYIL_[>Xq5n]KS)?f?mQO/,-9Ps+h)P_^<gLu5&M37#\,csZHlrXuhaăU"N/8O4aL%bw-(F>C4rW2,MHr<[l(1x>j,%f\=tk]TV)<1)S]Ru?fv.p.MuOm25cNăU"0bkJ9F(wF2y<eEbm^?[bhPGWJIX\'bqaTj1enRZnS[o.\z^J,PYxm9>gN:Siqc=ăU"DC<P23$%,IO9V5r6WZDZSiI[0c,X,v$)tov&*vpT/Ev/bHGh*+mUEJ=1kAXUdOHăU"&Z?sFZBL%j;rK/+4pt/C>p,&+Ll=HhZ8y^1N:e;dBb8Z%6I>:t2'8s4j-K-WAnWăU"0xkQ'FLDL\j+=nUcBPHHNB>Lf9.*wE_m,CjLY9s[F[_G\''PqI,=$ghDP2Mdlq'ăU"6^c^s_;U8NST5g41NVC$]lQXI?IbR)?/)$6=H8/6c%Id4[a=0c+zSP5,H(q<V\măU"OsgqJKykmaJu,H3A2\VGs3WXcXpk/#.<8/G*t;B_++kG<H>mlP=sQA_'^JWDn1TăU"4,r=D-%*]XDMDkvPsO(Lo2O]7DDDT=xELctI_J:Pjs=d)<Q=$7F7eU#xXtq^sOWăU"QxL=HoFP)9wU9o5zCdF(%9coDc?oF84ElV?qlcH;(,*l^ps<2fO-uAXgP_8.^&$ăEND SUBăSUB V7ăU"K%3wz<Vf&qPKGlS.L3uOEjHf&0k0\)AvufyISVI>7M:nzBO29=pT1\>g4SZO[Z<ăU"wZAK3uV^a$j:^YceFI9UwtoMF7bqB1BMb4P8gqG]i'/=y>c.\FBFT&O*kTww.T\ăU"4EjbYoP*AqrM/;KO:noDPP<5OGn[.d>u\x+^TP.(LKHZ3?0ps0a2N0p1b<n,H=#ăU"b7fW<V81T[BT7[u?*+<u68+2b*Jhh<Otmi(:jaRtxN-%p4SEOL&[qKcotM[;W6,ăU"\xlMk.9Sn^5gq_mN+_oA0n3e%*C>(s6_6Csg5wA49EHmbp5:aMbCWL=9TM?iLBcăU"Kjg.<bTI/+<WJjToShq]4;[<'8y_pnD9V\SiGpB5g,+d$ubp&f*A6tEcw%<^%/măU"+26DR0ydcW8j('&1b:jNqSV/U5e,kXjg%,sWh0=t7q*YhVDSEI_((+hQ>_^bhVIăU"v[Hm#K)khL(0JKVhIF,kEvu?raJQt3OINv;<[nCoMlHAbKpWb%bo/q4U,/a\-f:ăU"[=s3/xl$m:e8>P8dP]E<n1*(w6H'BqbCSrHPND5MG41HqkeB$,D#Mp42gzz\x3+ăU"u'^f941b#-qhx[=?5AmWD;SSGUNUEqG39PT7\,q=Lm0lO7(dT9f[2DM5+bYHerPăU"$R5HQ1A29.MffGj^nI4o8p:fTno:0'8O6aFZgFUaWoo2PPI=ZKGO(x>91\'J_cyăU"(/tl.QxFjtq7KC0cUm<8G3#8b03Mg-gQoX5Hke^PXi9Loe8<ddX8:A</i(6GMZoăU"AVTVPVvQ1T.*]*:\Omsm?'(Vg=&4$sntI#;/YR;KNFe[o[=hG$:]jT<-P7r29ghăU"'p?RCoP#U\<^Odfj0:.5*#I80tW0r7JC,j<LTOOsmYz$F://L'gaKJaeCG88i4#ăU"e<KIH/^u[;]O3-h+=r#Ia6aYX^7/#OFzJ8?AtumWu\Y^:B=S=t1h[N#+F>9oZcoăU"hG6*.Dt(<K#*CW&HA*ZsFkao?hpH$i-0Kyc'#'\ru5FPSY;+W#0,U7*ssSDi^PEăU"4j[LL*l;i(aOUsuU],?p(;;q1SaS.R.,Aw8]6V.tW_Z3\XWGxK't'0\kbG<O&,_ăU"pWKZ^sCV[rHm?TRg$91SJ=.dPhH^[/wN8o2<>DW3X,SqBq1LM9[=3/l0U4[N5p8ăU"ohS,csZ;e_>FiEFM21N>J6.*(/qcSfIILAqv5_$3Yn%gD:+QtQjn5'rb#6>wu1wăU"_?g*S;p_)GRv43+-B79P(hJ6lVUb)l?vL.dQ1XrZq#6?fMZIb^b0$to?=#QuD<CăU"+J\GFPYqgH>w^Ek&MgitrbV+JKtq,/aG[7%4hv#'CbXX,i^X^b4HW/*S9>Zg%hHăU"kpqtc*W.&IB.=x\:RKt>,jRROZg]kMc\h\a9%.Eiz:^_V5NVmM=d8?<>#mzmqd+ăU"#;84>b2a0WAl*TQmaU(\Zmtea9RphfKhX#qgU*S5gU&mE$1haCHu8)P$JWC97=dăU"YNQRMr[sy9j7cL2418RvAd]eK#ER;&8&5qV7&&qnEbm^9ka24f[s3J<1+ip]w0băU"LPUK4^LVRbG^^E2Qs3]muy\&XJ&(J\fJxk>m%'H&t85oMw=hj1Ix%,&3=xX-^DgăU"GoUUI>)09p(9P;v-Bm<S]($/XOuv3=Tw%&$,xCjVZNIu[,NAieUx:'%7(WM%0oZăU"NQTk&ZNY.,7bYH$5/mFo.T9ZKmEqUAGpEmrpatHe&MFr/d.1\Aby%YUEP>wg)1[ăU"U0:-t>[$m=Q_7XKOxl=Mv\R=fc'zjf6G$]s3UFsew/S_'7jf$F<WpnG4S_j>H?LăU"bB.CUTs?#o_/Fl5neD(R+_5w4&H.Y#X/B6]>G1W^zVHILf9-o)6i^/^iu:A^KotăU"eP%EL9bz41bg=oo4;TK_VZkf>afb(F)C=OkF54N733q&C]UQkz1)O93,whFDfdGăU"jM6e*bl>bb9mn&a.QsDKMm433OFb&o=LZ*.D%BU)NtTGInhXDlMlG$$7kBxK5\,ăU"mgR3R#j8?_v4Ph,EVE.tp8Szmg1F_*LZWd;t\Y%wv);yt;fSw-wY,:KZ-*#;6[PăU"]gt\#Hx9O)k*'lfTX[c6w/)d/atciG*jEkqf?ePlx(r,U3^[IX#aQ]*f=)G#eFeăU"#BpwI'e#2%UN&7?YK4;FFJF,Y*:N=>(#)m'0uBgGgY]W2B?8ppbZuN$h'GoKX<păU"mpAHYpjL,p('<]v4aDlCW1UmJL(J:]_&B8O3u5#kIe-TJXRelu&wsNIFfQ5x$/căU"\n\d$G#g>:j'*)+?NUw.Sn*GFY$7=ec]hkf5v#74<iD32GnD$T?tVB[fw1KJ_e)ăU"z9#NShG[w'mQO07McsiPJ7<[Im&0wD>Pr'llNKq6gsMdRIxZ%WSx?<6jqDo9#DZăU"18Jg3Y0\lrV/V+bdeGv>gwe/'Zmy_oVrX^H5];JKCuu#2d:R3j*t7JBA*b15DYXăU"X>gTeA<Z0M8$slcUtH?Vm<Mrg#+B1(u>6]JQ8'2w,*6GNWn$^:GC7-ih9ml6)G?ăU"EtmHp9B8f':?#NF)HC=;o$&N+T[0d)U<d>QhQgc(]a[2uG%u+>9L2JC2IpI_M/^ăU")EA6dY(Be2T4.dqkiKNdp4krY5F'qQQ<D\QO^['<IV?=2/64Ho:wgBQa7oeXeLrăU">g5;\9e7,cMm?_/:Y3.s%>Fr)PioV>Sfeusx8;bJ[B.aoh3da6Pb&fqB&Gznt&_ăU"q'UspFjHElDeC85vSy8oB&))JYOb\XdZTy(e%v\r:9waB3Ls\PmC5hov=8tLIdtăU"-1Fq';9G\>-KTzly^IR/Ibhe-POa*JC5OV:KXV2U:nwRcX%i:2a.pN3eKf.+Cj-ăU"NPGu#_1;r[qaX9Q[_)>u.4J%ZfBlNCZ,/XCxSgX/v=1sU_pKt:Qw'kK[DiCQ8].ăU"hNF#cPTse+/SC:VsqsXR&4B(/9f3m[N/T:dTAlP2U<i$h,9g=O&(rJD*>;a)uO>ăU"&eb:GR5+isooMxT<jS<R$DUoVPOc#aL8IxrgYNE8&-BWJ:YZVZc[dlmVA86]g-oăU"TtW]0%4>X<(Rtz;\y?U0EF?1Blmz1u(2C\bdKw+7wr*4$<SK0oLI5S=Q[E(OoTOăU"$Sg+'<o9VX>qmC6;K8p\0_iB6u?BGk>dL(m0FP:r2Gw7q,;uodFVN*[1X#2c1%văU"_lYkd+v)Y2Z1n-<nqdaUaMYelABE2DT>Ri&]<f1OVJmVzX%I3fV;TTieHTEXiRlăU"+L)cN6>E4QTP&7nec=JT1:\Zm\\mJa39BRd?rGR#;=:o'8>XALnac9nBGW#T6.WăU"GUMsyQ>),fN*D-3ZMDrGryHhF8>93Dj4iBK<8T<VtTGN6lgbFSFU)b=2aFMTzWAăU"NS3ah%Hf=gT#vk/HnNRG^\(mGgcr2rC8VjF[s2B5^\,b9rb[o;8S0uTuvp<K7IxăU"t<VE_UX*:TKZHELu0ZDC1GC0t,l,9ZEXHvZLp8NHvYi0BNYiXrRS(($zi9+OP(răU"p,Us42>'-&5tQ1S0>g8KTpyT7=burfQH*:l'[R6B=8CAki44C3?h,Pnqz1gSxp0ăU"MNK:FFDw%hDpD(j_1VuWJJ<[z^lGXvAX^j)/hXpZoh-5lgm+yQdA\181%T+M%,aăU"dapTqC#<5XDm/AL]I+lF\q=GmQ:<6z\+VX*j:Wo[Yb>eDPb]5LNc4vE\]L^xM1,ăU"0k;-Nx&pv6mMj9nF;u=1IERU^qII,hm(m;Iv$1k]1.np.8#b&'_Gk5\umr6,z[7ăU"igTG[p,S[72c6q?H3,w+V>,\/K9vmerM-jtg-B;eN-YVBlj(2NB]G5AbYyu0vbmăU"$gMW#gv#;^bcKQc]WhbVRR-2b9JDH#&%13ig,(K#ZenhI9JcRjJ>+/Y#cyaTjbqăU"Dgl=([-nj5aqU7*mUc;oa</p\f,?Tk:>\I9JJb,%1M2n/gsPHCnGExHNA3Alan\ăU"sA4FYbd_4,0f4W;/S,5I6fL'mg.BLvhJ:IgQ_k(GK^=kBf7HpZv(PJ9FK8\sS$iăU"bt?U<[/5[O'bE:nw=5]I[xa:OOxeGp+NG31Ay1y:g^egWm*::aHa\8/p=ws_&bLăU"]L=G$q8kd*%5]Dy9h1\hai6,m'ORER-DA\;VZk:5v+P2qkRU82_TuBq3HZ%0pb\ăU"?uMES-n&p;5<t)JobiYQVF8Lj-$T#q:S*2Ml'<4<HY07RX'EcS7eP:8G4Xb?E[YăU")h.rdtnfF2L6wr3;OjuSmmWGt&))COmRg#<ij$Dsk8MZtHDJW&qtJ,LbAC)GsM4ăU"M7K/8;f6j9&F09NDh=B<XGs*mwaa*p/3Wf$bz09tk9W1veUm>kNY*v[3cs0w(+SăU"p$Z1q$>sXpMl4hQmG;jTW\tCQG?Owou37\Z%Yw[6<70eOdtTY_Tjk[0m#7IX\QBăU"QC3KJ?6JRP<iC1D2%bR]cSr+qlUzdSp_#0F[iO6qRoUy#COyK^65nD8:Gw(yRa>ăU"DsY5]VKt3YK,g5n;vGGRnn7=LPQ>2jhac#K$F6Fk9w)>w&e4l:1[6392fN>t,D)ăU"?L<5[s?5<oRq*f>KX6tmSEqX56AI24/vMpbI+;wkHEgA;UA=&\uLDR#5gF)niX+ăU"46rO'xN<a6>G+DNxuTis\i9+Mt],khdRYnwE=<9;Iw&K>oj;<VG?H#&C7#4=]LnăU"#L\7%wY$$0QH+otBbTfP$E+<Q1(QAP'dt^I[3(>IuJyY-9Z_kgi8f6^bG+1Taf6ăU"pNf1e9DDLzd_pi/#G<-KpH3M)pIAS=C4x=;^'qx]\j9[hip^)9dm3y+9tum<S',ăU"=_kf^7Oj[=VoHre>:1Kis<quWTW9+QPK%adf/$;*bLW<5)H%Pa,^[nDB/W.g<l.ăU"aaJ0_fQcI3T-2P[ieszaV>AgTOLc,oD-2n.&&VP,$o1zF^Y:Oi?8dm$'bCA\(-%ăU"4Z5BWVd<d2EZn7Pbhis/,kVf&8i(3cM*;ljms/xB=6\h'bornkJZcps_,#9OkifăU"4-CYP.ME58>0'2J63k>CIM?hUhFKn]]q.pNMviBr9FE$u[&)X1vfhZK%YjF,uKlăU"Jj/0[5Gs4eNfw(]4U*m^n23[:XY?O.9>HY%29fA$E&L?-xl<A=SkrtB7hQ^H#1QăU"U)(0#a72ioj9-a>)[rE0yL\2t7obGncG+U)n%iH/A_=1tBiVX8=<GDI7\)3ey<CăU"p'mRIi1O5T2zxIe%fC*z2<rDD)G1b]''VSB#?4C27(8rzfn_CTt.fGMXUi$Id+\ăU"73)d3T,QH+ygGWLhT9JNP-ABRYKDT\-IR3C\B80A34G%SSg2Z&?/RVm5VE8Ucp\ăU"YS?5lA:9%dv0MLJ^x&S[Qy)a3D4z.EE&QudJqN3\VkH>c.<aZRt)HA14y4H5y0?ăU"?g_crS:u:1b'Q&XiWEV#Vh9rT'CO5zN=>Y*j5$X-*^C/#]=2'M1;zrVUTIjV<o'ăU"e+v\cs9+re%:23S<C6C4oTXk.J>ID]4_D>H?-'jZM9_L7c1>>Qtb/Qa%>7[VM6tăU"Kar1HT=P,\_;vNx*Fk2bBo\xPPXm2)s:cSbT:VS+TMBpu^4ZF]A%s>>JkoK,MB-ăU"oTTS0Um_'JT64>gvphRN8r_PF)aH*[Ic:4u(DJk9M\/HU?yZ^F_wkTv_wRO9.67ăU",8.nG/V:sr#WJYk2w3uZ_%$FGh2(]9s\Q^)elDa6DSEq6)+%-Xb=JCCt#5Il'eUăU"HUvbh:R;0usIC*&7X+iQum'27uB(u*vS0PqfuW;sRJ]'NEbXM0OY0*?1hoy2=<_ăU"EtEY4-0::w#Y$c+:H9=BDQPbOdfr;Pv:S9fZ71E-C7GMe6[49oN1l<uTC+5>cfQăU"Vf,XxN>[c-$ZIo5f*.G[^Q#Bi'B4krJJ7G[N&o:9s.5,.u6MBFn3oPi1\tYva<xăU"p8^7&'T\\XcS[KZua&V_e,h;)\Z$v<(WRz7pRF^t>g-%wSGi41?&WZPV.FBZFiFăU"6ujN/8:SgTa;\e5Y\Bo+p\(y?l\=N;EvYeE<:TR]dS?s9WvI:H():v^MBlSbQxwăU"s1?t?Dua4$a44&D]6[e3L4oP#J3al6uXL:m*gDKz.:jh1ARZnUWS-%xJh64QhE1ăU"SrbGU[m768rg7hO_49C8y+ykU#Q#eg/tw.8b3RQ9,k=3e08*)5P8FeG,Mq?]DY/ăU"))UBOJ^MpYfYVE/U?Qp&DWlQHMojm4:CqG0kJIYYFl&G'(d=o:q^o4C(?l+ce(7ăU"Iea1imt('nQiIr8Yru0:hS[3YCQ'9qV4rSp=bG&&GG9-H+^9KNi(DR5?_-\VM-5ăU"&??Y1=Fv=Rv)W(R%_u6K9,N6e^pJ:hV=1G.,xIph7c#E6wNhsk(U<raL+\K%&T7ăU"[.FPg4H3o4G&rx8a0T1k=]c'dD+M$HZDUJGvI6)LF^ZgtY0YLL\5?W9s\4K+uNMăU"qpx.k.wCeyu>1$,A&+a$k)xm'C\89:PsK\z+C\:q1?m6pj$ug2??8I],xr9UdkqăU"\1lKY-J;nIR+td>u%'q%J2U,tCoGi7aEin0gxfY\>UAVmGnANKmrUJtrY7617z1ăU"x*ipb3b%[s3RX\OR0AvKzn04T.Ip^$3qc'iXs1=;w4u,s[xujgOIexTVl,tTfL7ăU"gz$S.%<lD)hQP-9HvHuk2,gv+PRf2<\Y3p=xnmV*e0p,G^j)'XmF9ga$B)]jbqJăU"aVl8:#iVw%U+?i=<<a-oDqz9Y'ZO#3TQ_\a3mOHD^M?Kwv>HI7-3#8++rm>fmW8ăU"'VIjDq,d,9v/c0_i?xkID<:Q#E:e.+sgflf$aUcRMNvXG4H9F6q49EA0u^S%HVhăU"$pA_G^.\Z6SE^Yvkt2zgG&M>LUZJL9a7qjt,5F+,RQTB3k-DNY$kpy,\WBr71wbăU"OthdpMPap*D&hlP]SFTOPw1q,3ZqGenif=uJY<*&Bnfc;v4n&hXvkPV1B;P8ZtfăU"_C[Bh(yudgRG[tBjCRf(df?W0PHQOkRhaw-8v<Sg#m:sTjZkkGY1sGGe+H?m4R0ăU"xtt3Qe/Q_pBTGckS\LJD>u2;rEHFqa?Z;w'ALClLVtNPoqW,PYT;_SS$+XAz]8=ăU";g>gS8M?dTnLY/XbpPgTYH&33NX_i>KSo8p'GUTK,o8a6i[d;g(1;q#w7'gSm8eăU"^3k/v*2p/u^eng25kR37BtjS]M&TFic4i'kqWA43YHg)HiZD:qpPyrEC4w;)72$ăU"#Rf9j*[tQZ__<xG\8icez5/6^*0knK1Z,(LXW7AOi(7y5o3pD2cBI#:^>q_ICeVăU"^5RF&phDfa4^?1q>_mAR+Y9(Iq:4Y(05q\i2laTT$vXh7cy:s9?_2llP[I1/2mfăU"mR0yDhFlJqyJ?V5Ufuj(^LPt5RYd3DM:-%dE[_1dPsdBJAClSBjHSFARf\KR0PHăU">6x,fFpusmn9#YP=]?cNVjAcrA,m-F2lbA1s'n8+I49*V&g2AiZu.[$/?Sg%L]DăU",CPGrAo<tFSmw^glRIdP&cDPr/K(07oS6>RjJi?kkOoAv$VBm82WU-^^4w\E_60ăU"eE,'r<JcCPt&D>-u,<a&$^qljnC\t7o\V6hPdCy2UcK7[-Qe.(R))OeyGQXNZ7&ăU"a8,a3bO+_TZRwgI^nH6u%/_9$.-'0Vs-ID02Gmj<]]3,prEkLu,QWk$FS)UjRleăU"[%Z7R;sjZ,q.6*aMO\HBh8Cyx&*wiqT>2DATp8=YpTYt3\Xc9e:0Z8G^$nT;1pvăU"m+]DaI7H2k:CA-Q.z8&+]*]i_E20h4RXWF,xk,Mv>Bxqm:)Lf81kogA,Q6FTPq7ăU"eX4R0n(,uG*8$,0Bq9Z^\m%[U,4K*a'DBsCT3Ctb8KNZM'_WlOVH[t%)F<(9gM:ăU"o60T7j1Zu(Z^cScXDVT9\K#snW$c7G9]D&H>ie7*/;o02S4jx*v]QrIF^/%r:]<ăU"STd_A.-p&8/1w0Y?;U)a\tJn&YRR9DX,R>7-zqV+k62P<^AqtdUp=I$Nh;5HXt'ăU"I<jG4[dzC9Zt#**+I-bE#*.RZ0GK#YwUSF;]\HIdWW4X'yOJT>wb%eBZjSq]gcIăU">Dt<NGiVkbj%)r1%LF^=]D$[bi<MPUT6p*T]-0S1DCxbpeDFcM)J;60sjX5PmrTăU":U,q$\-gtKQOQ^xjE5=$<Q(YtRs%WHH?Ku=IR&&r#DeP-2aZ#?(#N*yc1,1+p4QăU"#Qeg9r8?*<rB7vJbY9f27jad[Rh4ggTXHO167Str*Q6o(GUqX_7m^OE;XC\yA,FăU"h41:r)I5H;*Ql$:#\]eGYO3%QbF#<$Y<29VZlEfO+8?tK/;^qbFk85Fl1g]/0QPăU"C_JgzWqMV,B^&aD3fkzKWVwJmEf&>5at.qKWc29tTF>$(2*.LUdat:UXUL#mH0/ăU"Qn;edmfPH_Z<CX/XNJX(33h*?[e4a]X:TQ;ToN#S0I;+O8Votsl<td#pN$WtH4#ăU"i,keY;<eN_Z;s]R5MV8'G&EK9Sx6>hV7F)tf/'uX_dlr=4G\h1'OLilp2tHcq*lăU"82q-mCMXE<HDYO23yIBh-'H^8IR.mC5634%gC3^p:%tF%A>&GOeTW7eT[Ye;3iYăU"VNq78v<Rf[OXJQSUgbwjOmIv8x8#jdaCGVG^UH'uXw%fjfnpod_pQireHDgI;CRăU"fTS'q8XNa*N)pi=N3UFwb1S7>u'I3^G7^i_U,,Q8g;vwTueArCoD#Tal;wj?IL]ăU".P/F(f6'O/,kv/sEXU6XQ<g#UO<,^u.+#Z&n5odc=*2.ku6-^U^<ecZ_<_Gw4WDăU"[qrE\%i\sxKo=f0ky6Tq/w:C4Ki8^X$trP+CFBNGhe4w+rcEa4gTPFQuRA-P=$răU"BffcX\Rsa'*9U8:+[YhAU?h^q'.#dNF=6=P/W?8<74^a#?qYb$QF'9.PlD^2RB=ăU"MLKbVjAYDDVWC;4Nt[c//x[,YQ#L82;MfpJ+5LURb*$2KVHwES9.K%'u2dy^MrMăU"11G2Xii.tn)N/:ggj?vT6I'ABV&J:zm*v\A<F$[94bdJ(o>YNZnp8p0+hV,<>b1ăU"JTQ,;,'8H\7(KoKGT=DHgMiP$P]E?gZ<w\Wau8TSpQ>AADlOi7od,O0_-fDh<qUăU"ZD>XctI>wb*CR,na*BMnYaF,89k6#D0/r'8&b*y9hRhK'[XaT6;Y,]_&O\hd[b4ăU"?H^R?,5*$+4\O+W(h$Mt9_Ut5+zI#D$]#(taP*x$1W7.?C&KeuHu#X_AUf\_$&0ăU"McuUcmQzqjTKdQO<'eGkv-b16N_E']TmCZ'E-TZ\>$H:=3VEqn6C1GEkNon,16SăU"3D>fK$i/9:tO_T-=p.n\&4^D(+bls[?>5U'I4c8CM3oX:20WM,HpdxffbNQ;k\AăU"l4#MgaBbYCYT$_xi(NKFnpP]0S8KBg'tkTG1[+6'gKrt#0M;3t.K>4\FNG=R.G3ăU"B<Q;5)J*X0dZ:i+dHqB'c&dJx(rk&A2BDK80p,-LiB)H$_.58qPgTh*9S4)NC)uăU"Q&T?:Ff^<ZnNo5NjDZUxjMC7tbFdCV(;4vh)+n;^%Ii<gbU46YbjE=Dw8]h(]XFăU"E7NXQO+l8RqbZSSF\,*bbj#Ytln1TN'iK<uj'MNJ*SMTSJ?XRH)S^v[8xzQQYF3ăU"928b?^B3OXUcT\o^VJY6sl(WFjl0ZKfmn8f%1x\xTGkp+gGn.Um4)vH3Mh7]3IOăU"-vOOLg^B?=u1b&*j=J^bTS3AYL$yJIqE+W.s.Xelm6l^_Byqj.W.>U],5UjRoYiăU"Gf-e=ThnpsIjBZH+ApOnFpUfuGil=f[U)a?hh#X[7-AF3g9Me3-C6bHdbrr3B?YăU"&^W*:[1eA3Iear;>bn[<>Vp6z[*;;YIfeyO.n=aoavr>1O#BFq?iC][9S*X[6gXăU"<b-F_AkleVYJ<;2z_cOt^kUnIIkLW%>5\96slai([:e#pw*se7b8PCbWu(/\VUwăU"S:ENk)LaBqaY2/=H_a5JGL+Na5]S/NKh7>IU)K#-Sc#79?Un2,-2UoB*aHjMvInăU"M/>R43N9/qHEtevECTjh:Rf[H\r%5Qd3B+1:W3FJS9?u#*on'YXR8OZ*8v.MfsMăU"&+<c>XJo=dc+w3v/5AQS/?#L;_G6o)O>M3JD0N\c#If#CGWdT*eX(o,IS=y:dqeăU"6eL?C#0_w,=_CgVuajb##:\Bj&(o/1mV^4?oOn5M(sRhnWcK'SkVi6<uO(?L'S*ăU"seQF_-57POhgbGU2J,-(f&c5s_M^m7=f-#5PXXub6t^uD]>E0]_0LDnn78[)^(4ăU"hZ#:D)s4tqj0If%4?7JwhtVfjbGXRhA\a(VC>-n4b#c]S2hu>CY$2AX-^\kLk;-ăU"&Ii9gD$eV5jmMKRrBEF)CM&rM,oucYl1NJFE?%92:s?B7<^s]$jp1tAGfEjkb8RăU"1IvHe(uAy4)'x#Wc3t;<_Nd2rE<DH0\L*?HM,Cu3]Om\,ErkfPn-o%SHT75ktb*ăU"MP[\UjBFDc<=R*c_KqC\T])s6[m;niv3j_i-C+^1\NZ:CY(Bw&:FTdu2?fgm2v=ăU"=cCbSBwZKXooBk;qP7otiCQn)R4W+*rQ&n9b5S>BgC^xpdU'uAjxQBqKI0e[[^3ăU"icBPE9]52;A>'[445n0?[%3[1\rMub*Wo<_hQoO&)_xsBOkz<)j+QCj2p7YYh:kăU"kktSECYNkj-a9%.dUl<.7Xm^jP_tt6</c,rwuAHW:2[txCmeYcYu?s$&6w5b6aNăU"2zHLB::nOiV./u<A\gTxFp;^k\2YzuWY2_Srh9>mb9o8?tz6pVdz/7FtC#qR3CZăU"5vgVQRPd#WCTGh98jP7>D/QSE(<hv>aK1ozw<8PZhE:Y[CR^)?c\f/7Ownk3PJ/ăU"M(NWkU2x6Bi.oySE7W._M:FS:-SY*Wg2uu>+FwT8'ae,nNW?_>hpSx0X=t.OydNăU"Q+<2oD_/%fRh3d:4c^nHnqi(:ck2PB?QLptd3qLs*Ub&0BP1;*D$0(+5?AJ'7S%ăU"pY9FxF*%-3V0]<Z<bAUs\Uv]0fT7C\+jn,6/f#X-\c<XzktO=$F.?99/[H[BJb;ăU"\:GBb4[soAIH1ug021DL_R+(&llw:YIV[TAE]pXQ]7Sb<nrGfbkC6HG$V?xiIBLăU"oUaIOZVZs<HzjBE-):W*]A)qNm^DG#iv?T;d;.4#IvBl4yRo],8lB2d/9](<eiVăU"al<C&iY<dhYCr,]mC^T?9Te.DKaLYrD>nlJnz.jjp%VwFQ.3?Z#*)9BwQUwa[%xăU"7V*Fe4msQi=PU1,w4XCAb=Ulsp/xR\3P7&La'sGygVlR4/;6-=cQZ-3-?<5L-1^ăU"7wPTJyuNJzX[3Q-AexHr;gCLL')Jh2lVt0Au5ZLqXiViWoL9p$zql5Rhg<f_Aj:ăU",2%/A<ljO(=QKpUD8iG-->ThFoM?3ktVw8MAmk:'0Rzo[L/\p-$6p2)HORbk4Q_ăU"j]p6K);NaozcZbjxy9oVS&p<Lx8enbCcjP.Y9Ct*%nBS-cu^Cy*vAH$X^ux-SQrăU"1^cSF49<<g3Cw)t%RKfD0Px9,a25KjRDPPsno^Yb#f*M<(taI'jA/P^T\SGqCM5ăU"Bm+1a*hJpIoj?sR)]?C;E3I]qw(]RSOpKr0Yh5kFwKYdizX(j9v^dr[oa,sbqQaăU",Q<9-Haa8M)=Ra+6xgC=aXO<h2_)^szrFkUY$/&t,-NZoVY%S<NsQ+pI0j.4w/ZăU"bf[yZA*g,mGxOYZ>owo_r3hi(n,LaP;mp,]4\v)Q:+M$ZJR(MytgV:h3u1=guheăU"$ms41x^:3mPc;rHqX8lFWlqfc<?CqvFNH=m)1ZM#_5SC8_%/xg&$p73:#35\&,tăU">bD%h4EM$pW?#sqGuKTiATvLa(=)T^B+'U(V\O2_KIh)gOGMr>p#'*_+6%w\sI?ăU"t<9/a/OC\T/C8r2'd=XS^ia4?2hm<,/;NFcWWTOxT8PLw1*$:J;H*l+bPpn$x);ăU"07/m)*ijXoQdkcsEgYklhd>W?;eq_<#^-l$p[u)/:y;4GaIuTK$;CY/2,jd^HX1ăU">QKC=n[0Llu=FoRNY<ra.Bld7qYPXBWcn&LTY&h6Sym^#>a+B=U'ls6;#Wvb?1CăU"10FCiq0#[O)+1yT-aZSRCs1p6#S2tr#*)Ft4PcNnkO+YU:]\0io>o0h6E+%.fmIăU"kbQ=f&^_Z]byvjdaOu-QOH)\k#9H:^Ca]Y8XRFV$M'EvMp/J<j:c\ddv3?;Ino<ăU"L;WtZ0Us8YgttiFIG/,.DdqMPwfp\iuMV%1h03KmgM\OF]>O'uD$#5t<>>rDuC#ăU"BGD1)Gq65k&,iEn?C9465=$OjI&OP^b#uQ,\sGTUH=iKxu^SLdowN)t\jz<:nEJăU"K'kJcc.s7i[(4_60QtaD/.-\YS:wLTAXMNGUurI48kqV7_fp0Cg'L_NL(^CMD2.ăU"&6%BCoWABvPS^xpC)Z'8f70MT+^8HHji+KZ]fLe*pZ$'<2:gjkQEG&b&]F3nZiXăU"g0NSso$OAs(AdAaRUxiqp;atp0'8<QpLgXqa=:p4XFw4\Em>c+bphcChYjUS0faăU"On=,4ab#YjwN$;59mndi#NI*2z5LIxisR[7DXO:Y<8e8?(Ot5tNT,KYH%s'X%QuăU"BRp]Zk0tPWLWyi?\c6SSi'/H8)%-$0ScJDITxl%>q%aKT*pYo9$H:Nr%#dE^$I>ăU"0]#=R?=;0dmyt,st/N2;4-Y<C[4R&pWpiLZX?F&fLLat$=iu4U.(>p20_rJ^+fiăU"_rlUFw_nI7TCny9q%+B+cF+BPJ<)h8W&uh)6ri,lne5r_?$QVdx#B9.#(eb'6Z-ăU"go<yDktmO\8RT;T,hLOOL/T-\KG\TJ<uZCMdl=LR4YKM30Qw=S'_>gEsAWC9O2EăU"TBoSwaGy#zS$GI$iTGyd1qo[oMDyQK2kh]270Dc+LFyFa8]HE_nePpDptpYB9-_ăU",k)M98N'?V:G_L,:x=N+YjTqmjHfbP]%nX63kB9MJv*2j;D3fU%:wF/s<RJ(/m4ăEND SUBăSUB V8ăU"&&aPyi>K4x1'lCPKg^Gocpnje^N:WqVbZFlBYt3qFk3_Hga;.%R'tu&2l0Mg6&wăU"&MJbB;Q053f-\&Y0ZD\S+]F^GXjMLW67Zbi%J+/,83-v_aEaRRb97BX;\<E5Y6_ăU"Msc3_+mZeA)aq*lgXpgXZLI5Z-TrR^q/,Cq6?JiC^BVM(e5wFS&FH+T/C'tthw;ăU"IaMEgf9IHi[^>E.qVu<<8_56qAID9#T4bV'6l0MmqRThloerC/UE*s7jFIp+MECăU"h3%Im&9i3dz6QS*=$Q3P,ycgX:q.SwKIPjce2ra3w,3<-F1M2Gja0u:rc9o$MZhăU"N'y$$ew#'4c49L%:)-]Xr^Th-ls=3J^hJQmrhla40UpF5r'npaewXYs\T^F=u=]ăU"ArtdK9nnWN9S0sQ=/^K+X'c,t]2%Bne$qPYxD8K9keFTWspPL#p-_>[oR2r#(7\ăU"sT&h.Ai5lK?(fJO3N,*BZgqioevotV5x8jPLJ5jo:ajIk62Rg$7sw]dV7kF3YFeăU"<Y)#5fXj>hz=&h(,p_3$;l6B%3FH$*M8IJK4<6DGuOV)&iRAHB6tcF7o89t,##9ăU"'X?AHEod<1pgMSa6B\B/]:x[:qSZN8gAAmiNYd8sW_Cfn_i$MCQ=J*&KKfB=lW.ăU"jO.[pc9Qxik<5TCRtt^Q;mU=4EW0C67^R)FSHm;D&+^Xzqx>e-9o&x$_U>wB0mkăU"oJ1WHvC.h0lFJCjEt[aRf:'4X$P/QF(pIvPkQ^Z9D6bU,at39Z[hMr0TBR9MkcMăU"S(G8(Kzi#GH%77[)C-70\FIVHPWxT]ewba5TlTS<FU^DO.<#f9E+CvS2%qlHHjOăU"+bQSfH]^7ar0BWDb>i_uopt34B+k;BAbjBNXu:h]I#,a,5U]4aR3UI^jM+9LC$AăU"hrxNh>(<_h_Dxb$r#ETu7&R8)642:Ze6E)+YBOoh4VtS#xFPaWa5icBS)J.KxZ\ăU"?5taz*S:$d3._<R3U[<Mf(-LxBZzxO8e[?h39aIsUd5KGZQbJD9.:/0lq];:C:*ăU"y=4C+N14zHQBZc<fl<[SIJ/g^KvBh/_f>%?'pAD%,ubIe>2;&7P42%,3r:%>x<făU"$:Pb4JldDEYLm>*O+U.PkGyQ.;#U3K58Gekz%nJURgE;pGJbfmq/8B_*OsKQ?<săU"I(Az08;2r]nDpMd3E.S:RX?Y#]2^+o\RWCw_T0LV'ej/bCR;eR50?SeLI(dly-GăU"+7u_#<+_<a.rMS>6'\m8+XjGc/Au9mBjODAaytu(*hq\#vBbEg)HK8\s]x?6F2?ăU"Us&\2h/PeTq9>h?eRm#KqSm?SSKhanr87^jmb_9P0oKA8;kWJ[M?'j3]6,q6ARaăU"GNE:D\nK8<Dn9G(5FXg8^6PI#AX:s8\irYP/?$c4\=J&.UMK64*cpt^[baOSBiUăU"Vvk*$5l](,BUM:_gp2/F_R2?j,i5G?K4Q%Bhi2Ucw5#G;uJl2T6L9Z1Q4c3uEMOăU"<B5$*^XJHB4JIb*$0x^9>J,njQk:LBqHTWb+5:$V6R.9KGt:*FaLHl;=bj$&NZ;ăU"AZMCg_s8A\vZg<8)]t:wQb/4)q;yOj3yMTD>CtDH3O3<=Blu^\'L/dh*;8'lDnKăU"1jg*u).)v;fVo>\XQ$sH8-v41MlzV)0;cMYoS%d-^Bs5B81K)ahGeZb,zs2LYYTăU"gxCht=Z02-Y,EX6$9h:^BSE9#1bO0ezXmvPa$nI4#ZHwlau]3=X1N+7+?_^%55OăU"r0Bj+%j)c/Hug;9n86ltNZiUb-H<c:??#i#y'_vT[uVCDB%5UhK2y,$NSX9:jVbăU"#hkbkZ.Ng<VLkAJ0_,Lu44)vHtol(L:pbb;c(5Aga>S*kP'id#o'XLyVfs(COsxăU"=%aj^e<lRExJl:oTMz23_'B:T&k>2MJPx;Q7MNeIM*Wm:T+Jfxe^vFP,*mVRQshăU"i=WfjMD4Q$+1mZ0c3f_mk7/fD.T3^sh2vgP;gZg43M&D5e8FM#*hc*kj2QZ&4EPăU"x0]m&;2MeXRrkf)6E[yKB59A?9B$$XGm4g3#%Vka$34EnOc0AS?rL5NZ-'A3\<dăU"X[CYF*N'3g$'6DYc&IP_CAUigxlm#^;R3u_GC2Ynl_LI[b<ch^xA<s/B*uZg\0>ăU"P1/NbYi+%\+b&)8^b&Yt7m[bGH]ia#>CA1w+62q2wcxQMP(5+z?4eOP#<nOfGrXăU"?UZDD5))3KC95$l_N]>9;xFg2^,^_yY*aT*Z.cif0ZCjvGo)J3[Bek_Wc?py2W4ăU"GUk*tG1**,g<#DB2P=JJiq]t^ZGGB?H/20yqSGCHr-1W2ZWlPt,TYtSB>:IP\+xăU"LTO0QFA]3XR5$EK3&0d49REqgt+cxk>KlbQu'uc14MS_E.ioV*slQ0G+G?W+Yj9ăU"_uRqa8_Mm6[^t>0*J,SAkJjb6&c+#=h(Y]c7i]aKRZATa<B)fN5Rg7Y01P1_3<LăU"7de\/uaAf_G0p;>oaz5R\b:4,k1dO2ceDwhL9;zhI>u8O=PG[?uOGpZ:I%d&KXOăU"6k%V\>a=$#FLHE:nYgG3:,-*]DR214sFXq==ixhiC#2$=IT?gd?>]L0$WE]K>(HăU"r2.5RRqfYX4,bzqP2'l:+W8eARP2m=S^Thm$<^J3uoFbCI98%Jnj&#%8[$Lx/h-ăU"F4uSs#[OMb&>h;Ky4^*N239kV9$oh0(5Erp(>SSLI,g=\:Y=O:(5IT&n+s78>vOăU"88O+6O[kYIKo?JohX*Sb5iQ0UUfB79,Vl,qG$*Wtg1GI1$>28&TdIQaTn9i:9^SăU"=7XV'p?KR=3Ps.hjKBLkf^sIx\q]X.i13g<FrbrUJ>BJ,TVy%E_E1%nF[7\&xmPăU".vmM;8jfD]zEE5R\E-_jt&k+(HqtAKyM5kIUIYSSTBA\B9a<tpumG)WzS+8?foQăU"YCO)UZm-psUit?+\XhnNI7,$a;ufbQ1yfi((<,KO:]h&E$-aCAsL9TujHc8EYZ1ăU"]sr;X(B^)BQLR8]d?>>61?0[&+*Kg-&s-[k0t[htUcAGqq+rLsa=UIASKBDI-k-ăU"MC$'cq]MEQ)dTpUw)Ot0IV2Z<c0xjf(6Y:bm)VeT4$Sc[X?agOy_>=&OAmq9;D+ăU"3AT?>.*:r_e[d6Y4qF??x-wV,$ELxke&a'q#mSo?YX$gDyj#[[bt?7TmX>Z&,+$ăU"1opmf2eF6imYLDFg\+,[U6a7kcdL^Mt?;Fy09,Lxg=VqQfZw>&K'*DUD[GVeJ1DăU"tAV=SR]Nd2V7T:R*ZgqPT;:48<i.&=?C+h_*dWncXX41CTrRqbZ#+sUnE=&JM4jăU"p^R-LeIK94ypD\Ex6^2HpuKEV=_7aLj*2-nd4bG$)au4(Ivm*;sl-VS_9W*BK>VăU"5fH([<mu3Sx8eNDR:X-ctc))K+H3Um$k_bITu4=K%8fHOW6DEE<k.PL9tZIB?c9ăU";qj#B0gF_w=JT3UVIjaI(nC6sb$NhVbQ(+hk^6P]i7GpSB,RdW+EqU)5FOLgV*<ăU"nHH6nHwa9035mgcL3/\_xJ)C=GG:en3MF==e4?9Q1$##<SBX*aBv-H3fthZ6KhQăU"EX(a_Jpq%V?RR:OX>5hG3Y>tgRm-D$,vsJyt[Te%QD%kMg]J8GEYOlhtwo-P.,dăU"5I'sK)s(NzgJ$;KiO%DG<L%^hX4tthHWAnxF?k)2vW%*xN_>r2hh$YY7CeM=3<jăU"X.mst0a*tt7+H&aYM_c)j\k;4gNwg<;Au6c1\nYVNt9nqkyLoP?_[eZfD&[#&s=ăU":i=*\JL-7F.'Y*kL3>fl=bc;R.XT3H-74boR]X%J(B/td=;[OgR^.]0\1'U*^GbăU"V1G\q/c_D,J_Bms$f4SqaK5af0bDNkrn0b6v*H(Y5N$c,h,XJVl8-Z6)VZ$RzrjăU"DL&=\HNX?vE&YMPg7T9q2d$xQ]ASD5F;w3-9]?4%oLx4\d0PL-axsS<D:D%MS)năU"1Y#,?f4_5E^Yu*>-d2IMJd],v$giTq[Pkudl9=$]n22/8;E^<,0%b9wqn?6RK_DăU"9v_JJ7viRe2Gz:/FAi(:0*VU2no5Ii0:pNHBXgl/2k(0h;g^KYz:EHRC.Jt]m>^ăU"L?<Tm3B_fyZX='H%kyxl3?KE//3TvlNG?7vg8\IKcIbH6Mi1sm#VkZ?bc+'1di.ăU"NhslV52>1%F;hgdb5[^0$.m4Y6BsqE'Mp;hZIGtALnStav*IsDX.cUgr)WdSFl:ăU"^tO$'rKB$]X/XPN>g&IHu+SnM6sB..MG&.:H8F_j9bKKW]uEGI50Vdx4$5'Th2uăU"o4Z]2dUdZ()4Qb_-zVVN0I'BM)8-JUyCSp8If-hSOPuJwPj:XUq)u3AdIn<hPe;ăU">x/WokE#g(jd6kYpO:\;),Yn3Tltq%Kqrk/S/p>N'054JN*Du7v)gA<\xTg%09BăU"a8x:.oETfAXn8G'<[zh$JO*P4Bi7NRSK9MO=&Od^w2GUM3Y-J?*MH<o6%qrV;NuăU"q-7l8dYRH>xz<:2+-^N%UZOadnOqFsT0BBjzs>;uq1ACazj7Vez0($=NkV&01ezăU"BeVyU7U%>gGVK7ISk49vl[=>qCr7d)0Y?4clj0&ls>FZ7)Ci_&gAr()-%O=_0i\ăU"P,9cf,XgO>Bm4fZ_b=:sns0a)-eLLZ*phML1]SF/k>IrV_qBO[\qh*E>YYIJo33ăU"1nMglDj0sDp'((do\r'DBaD;A-2Iz_roN%t:$Ij0;MJ(YC]DOe21ol8XzJcN^>răU"[48Df[#P)/ycLE+)CWk3mA4,UqtV;v(C)=%UEZ>M*$r5UI)Z^Z\.*OxXKZOK1_*ăU"C>:r)Z9p__[cZ]_Y2#/,ui#p,kruG?L<G:/Jo6M7WlZdCPk+:xP$37k1'pTp:0oăU"J0o4r5UL[t#Y,+92z*okLa2&q=$<v^dH=v&eTb/:oY*v4tDDWb2k5]mHti*4c5*ăU";hks8Z$Tfj:6BIj<oss<po(Hg#aK/;E6W#3+s]u]>O>Np*rd<8VRLpQv[MEE49*ăU"&?DBm03MTbOnP;AYIMHWjG>>H%<TPiseQ4nf#1\.sO-m.i<Q49mlOA+U_OWgZtjăU"xcxhM7VS97uKq+'#Rr(T0)9qu)Jd39Ih-:pVrH8=E8e;[Qq4[Z:(_LhaA7\3Mm\ăU"?T&VwK;3JC_guLL'F03S_f65P,%xR+#p?GM)wvNQLQt/[GEJny&58Gl:xIU=7wDăU"9$#ls0s:&'_*v(g+lPu[6c/D7c1WU/\bY.'9#G_w6)D:&)#.,t??TqI%Zjqh'8eăU",C9*;\'ms/mQu\i+Ie(Xe[2o;=D<%yruaDu8n%qA&j0x\LM?i+:sG0iB*0Yxpz9ăU"_#c_O5u,/1Qvo_AGDjX#,u84nTc:C8OSr6YCYL#OpaYF=w4Y\\=suwHXX5T[DxHăU">h^wR+pn6&2YG'lhovE^<nZh$F.4yiu(D4+t&7pu5'xlz99#'#aX16w=tKB2=i_ăU"a5YDDp'55.YbVM74?jn%3>;H$AP]nPP52XcBCR[,%<Ftc_ZsMpA52<cxIH.y5KgăU"EF8pDZZCCL*Bom#Ha%tps[:3YtHW9j3)aBp2n?jupv2+V-PRm:rYa^G2s83,8=FăU"e%HXN0-85v5;]uilc7)C\VUHnfA[Kwh2i$A:k_6sUwm%;bcq/[7A<3Xh^$Dg4K^ăU"Gk?Kk\(E/px_3;*.dt6FZk.&7:+:c2>m-6Zq&_K&/SoT-9#qVQw/NEoowH2C[AhăU"a4;RSh(eB0)O2vuDO/h#uLWTsAoqdY%krf\G[KODP77aI/>$WqQcq1y)kQw^>TZăU"A$&laML9J><Q^=v:2es2$_DC'H7(DYz-H*Jeu4Q,(<aLUDY*'$3'tc5930Jke'BăU"D(4uM$YIa,Of7Xjge^nDdcf]9upiOftr_d.GPd^PbBSfdF5s0WTQK_&,h>Hhu#FăU"roavi=l>B*g5nDv$Q=6O,e;y%??,PG%fGI=1cO,\bpGV_BJC5(iHX]FVTViu$41ăU"$*>'lF.7dLUiQ>S$0E%7^?$'N8FR,5W]rkV?8g:7yr6*6t=)5\w.[uF+m;[97;9ăU"Va,\>Y8(;-6fQKj2,H)DAMxf3<BD1I:tv%di?3^BN>5'UB0h/DZA>%dD7v<2[$găU"^9KlD,d%rTPm);9m?F^WmO]os#5Acxi6&kR8e3N#[o4n7H%?hM2fD$*g2X+W8ezăU"q]wv';'^<3??L-vWw#cK7X(NhV\lns1T_y1ou_5C<5^464UM+,RbTR.S?dYNF(MăU"#5C$c+uSomORC<H2&:'mQ3RtLVxtT'hYXj/?4<.fw.9c%,U]s019+l9BT<Cr)CiăU"g8u[CtsND?Pn4lh0rpT-g_d166q+Ya:^%#XQD7dbN?s1&p>2sn&Da9^TH_+FbjjăU"<VWN%INDkS%Vq7QF(k'zc>UFiC6aH*es:q9.=&3k/.]sz.XX1U$1VwPXne_<-4<ăU"_Pd\Ht.q/IfPVj#Cll09Ui(n>#a'[hsiS,qlsv9cU,r&788Lh24$(bas-E3shECăU"<eV\;8?Vgw/3o3ZGyhau'kXZ)gN5r5Ukh^::*c/%ng%*IhfNth.%<NlI[j-qa1$ăU"P>+W8-Z52w$*n43iB,D_$YKScVNmJ89Taa];Z$p>acKY)x11qF0uNE=H]6[ndy(ăU"pg^U2(jP<Pb\C&XS>F$$$$:AH^=x<DOF3^%NNtv=cqwz1#jFv,<4-Ss'#.]#cfTăU"m(Bx3dq,js9K=-t2X?D6d'Lc+1QunyYf'^t9.LY3FS0DGlBrd7_R++X50i8jwutăU"bcU,MH-W(h\grnkfmhUe$^SNFGA5C9gj^i%33[4YU\o.)3)&lu=qcpFcTbFe8&NăU"<k;;%FABAw8KVsgcRU*x2VVPH:jBFa=.)\S_^-_<eOE3CdX8y[5iY<Sj[?'d<I9ăU"5AM&pMt<T?pbbBA9.aU3-w83_tnooJ=\EjhLcRMHR)+.&e0<5c3(W$JbxLnAx29ăU"IB$.<VPvM/fq/VDn(v889A/o;q21XBGjrqOx29m[dmev:+Lv_^?ub+&hu,trB+&ăU"1F1V7Ssgxx$'x%up%()9%%'%-%7,MuI)SLfk*VF%%*nR%%%-%%%%qfhj(S%unLIăU"j4GuMCt)261jrA&/p*&)AM3p9Y44-44$u[]]AUuVVvY]g9]1B4hN<=^fg[?4RFiăU"jKlnp6pkpD31m:W]BsKlZUHvCR>a*NK:sRv.I:;\tyx=JBv0Kcqz_i,5/RQBc#măU"DPY#QQs8Qr?sF=Vdx;/f:8%K3D$Vu/2S#/d0efhY0K9Y[vla4'vi-xxpQiPt,lcăU"1uwr%'6.*%B:/^.P;EJ1;#&O(?(^c1ld1^8z;pyLP$zIEBw?tMq:e]AxzKFZf+*ăU"D?C>NR\n,I]8T:kVX:l,X+*1o*QrCTS1OT<zVZWNY<Sz#p^ZYjM4QgwzW;(4sAzăU"sNFQVK$o.q3'[mLxG<>eH>JFij:q_TYV/Q=U1t;'J^]JxomW_yHBNfk^z$bFNMYăU"$'(U+_%pA.=0$%xT=x07%S5D*\ZjX>b2Q72W2a*KJx]pCgC*h5k1RKokA&rK]tdăU"k6tNAhVIj,HMWPh=4qt;RK9(yw+]/ZV'%$2[j13(.gPKi51cVUrdAl>$;t>K*B+ăU"8Tqpf-3nxn<Cphr6B1ftrD$/N7D>'lXo'C&agh+s<HrP<VdD8TsDVfjcdE$/9,iăU"^#kYZUkfT&/$jyd6lu>ETQ('7K$hIq^4z(=aubt,p1XrNfNJbv)cr>.(kA1J.fuăU"tl2UHFLEfrXlLMVNb.Y;p_GM#v]LTe+/,?g74Crr:40$p(Z(i_r2&IDAG0ogcSdăU"FfrfDsOkRxqse_lPK4'#6IdlhP)6KG0'ipvKVc^(FD_p).jKfnpMm*v+[ij>%loăU"W,ME+8mh6b$)k:#Sbu:SO4.7vlK5mWKwf2?h5leoF2A.tlA21&Lz;RWbXUl6ivLăU"\F;Gtzvb$u<GU'^XJnr'WJT3u2KsV8PFF0GCOwfV=H8oq9X,taAV_EKUZ<DXiPJăU"V#ObDBZ+wmA=(O'QD-GzmGSSdvo.>tDQt]?vhHzA-u&68rM[#HR8Zk=rYMR&spVăU"CQD/:.tkBH?vztI('>43VzYEHKU1XegN1r_yK\/jUz_n+_uf;L3rd+*cL,l,S\3ăU"r-:Uo^8RlRJfB<AgnKn8H#(?l<7c'LZP1qvfZ_D_;RHRXcSuXharPrWl'B&P8^_ăU"u.ZklPf>K*2oioh4(Zv\4=MkK9/2fvTW+lW1Dl7N2lpdt,0'(k('q^neaXdYAoqăU"SJ&TW#z01iG5f.k^&nviv='7McMz1M>FvLtF83cnKRu*Zf[TlXa8^AEl.CLbdmtăU"P'_D+afhZ;hIWYG+5]pfwOso8+t;E&BMFi[]sP5cYiq%f?.Sw9CXp7u16W>Rd$>ăU"UkVHUhOG=;]%?,b-C/k+GUf[83qnMSVf8tI2J1rcxebI?T^luSu#niYx2t>.Z=>ăU"D#Z$L43P,UnNsP:>vX[phTfZfOlwb)8HRl'VN+J1r?Vgx$gLVrQYg)DbV/cusZoăU"Z8p^Bo4thilMiv0ZVpoZm[]f;ts[z;L'Z3]x(?l^S.cvka2kM(<6Z8o8,TIlS?QăU"Z;[W=/SpR/jC<N)kv1vKA#O'Y(1d;.1#TL&P;wW*u<Q4YDDstBuuT8l$nP_=L5DăU"o7K.Y(qJ,a\K53*S]4'vSC*j>vpg\+3UNHM(M),L[Un7UHJA0c/WfQ#h4,+0%[căU"oG5&=Q0Z]EoxeS9.&SY-XE^2>)Tn74%Q\,QXNeC=5e=Kb_+3[A-bHd/M$cm$R87ăU"iPkO0)*Dmn:UcfLLYEEvHPV0GTbVE:_3U7+/uM^y5%4xTXUHYP9O+K0:136gddLăU"St<<n:RS8T53nSg#,'?NdzjvDpxn2;:d<%z=+P))FSkxGq)IaB>u.Y0%VJe6U[;ăU"VHRD1gQ:Rl\LoI[5\1n8Unad3hKtG=?'r1)Vh444IJ3X+a<K-Ur,lhil)kY*<jhăU"#q0N-HJ*yxUfKZjJTO1\Af=p]<L1E]_*eAV(H-Jg#05HC(dsln52tc-Mu0o<1q4ăU"uZP0]Ph&Fd)t7fUsu7C[+]]r8Vg98emm/oCtm0nu#$FD8'LOgQTzRcs;PP:Eu&[ăU"Lm'Ph.u0'*?^m7yP;aQE6Q)h\0iXaf(W0D?HpBZT2HxL8GIZGpi8p]g2G$a,?^PăU"g>P(_);2a\3Q+A?C6=_1cV[JZfQJU<Sy3:(3CfA(n+P0T#FG87S0N-N3;HE__8,ăU"f5^hH8JYL8iVSqK)CaUno'5HG=)2DP^$j_hL)yUrIw;vKI?J2(gHuLrvmJ=:a:.ăU"L_fO4Gk3,<>3Vgngh=7&]d:kHg>[oR$ISIrPDIk60=3*wGG^9u'5^f:0o2<i&dnăU"(<%RAUGBaz-kWrfp8Jj*6jjcDej#\:(915$V4$ZegA^7Jx./0k*22p\+T]/\0LhăU"?vmWk8s^C_Fi+f&iq[\.i^En]g\adSn)^DA<F<N1>>DI]7YjH[5'lmzenIP5oi*ăU"TXH/Ob^KXg)8s2^W?lXU711+=6;riLfQ6l;#$6QH&%0NLd)q%.g(m6sO\F2La3făU"FKTZV#g;cW[jR(0HHV?G+_#VG1A_0u37Nx%Laut=W'K]L,XQ\hp\x?=,epbB<A#ăU"RCPKv7[=NGEuLpsHSU4bkV$/?)-lA'_9WT_=YNRW$l?rQP;L#aXnhJ%NP*tVUG^ăU"dT\-B_QP=m/;^A?1xlqN9H$5xe7<Gk^#S^[a$;P-vUNsyq2gm[],'VDYeR(d09xăU"n_t/HfoQD=p+<778wMrNayK<ri8VjdaHaxF)0dJ$EZ>]ktxD0-P^lCB=m::c2T]ăU"&f&'.df8Rj;/slZQF3=e=M%R2-kO-n\XowYn,YM<1X$6%HIL?1Gd/lRs^=;#/H?ăU"vLpN2r[\ej:K[#6wc93*vrV,G.+1_7#Wi?$4%][J'?JSmqn(%dqVa9:s056EinxăU"l9s<\^j[%>Y#Ya,V0)PSMZ#EQXV3+s93^j$0KE:a\2eMw3-O4?v616D-LyQ>0=PăU"/*5PC11v>bJb#U:f:O6>;.kAcdfl,qH[S3Z]%&B)>SuE8Af0H)<Dj7iWK82c-U%ăU"i+Tq?gSNM.q]MFQMWz*t*:CMf[L$qq*cGB#dp?s(#y?>N;RGZ8tbE?kDLsFm40GăU"joLV.MC=5tY<>#-2x;-RO?56i*P.?aP&e5*jENHfmG/9_*O:8K#uF+W4ftWnEpeăU"ASCHLMVV(#pfa,=0.RonKesD?,NRkY8b4XkA[9inb]Qe#Ldk8pk85OrkPN).[XUăU"B3=F$s;G+G1<^Z(=hIY694qj\^=y/IzT\Mg8Dh/1K6A%6DNk.si>m_G<9CkX4IyăU"=fQQj[#BejaaGEH\t'B0e>Gne^GOBZ<m2Larlbtcd7*0aU=)kHjY2).evtT\0G0ăU"dr**Z)Ju'#iH.csZJtar=Yo.eR%L<i;1Lo>%\jyH](/#ZLRLm+Lk:Xn7WV[yT5yăU"wOi7ivi#AW+gOU=YkjI7W5gJG/3Icj=yZ.;2hDD1:;'CTup'l%Shai);/n3J'78ăU"GQKl,&S&bdpSon3?lh$n1aoKTtxFy0qdA'gyS-oCHfK-/\iQ&q4L*e9JKZIRKn%ăU"WatArI:8b:OTr#]Ob:Q.U[,6j/=7C9WTs*2cT/Ap3quZ>*^QFl.9EEWi9\S9QKoăU"/&%7a>RwQ)YKLG]5zB<\DE0/#1-EfhgJFC3'G&cau=oa+0fea>rvq7)\a$T]:SIăU";+arON?#\;Ub+H'jx8:T_Vn*oG7rQ]U^6H^ctCB-_V5FdC*H.qPg[+Bs#hsEusmăU"(/E4GmoVkEV)uFQelS#\2wHONa8Kvp)R<T[>2o.>'?r%sX05<?b(l4.JOP5_ml'ăU":F_C>:/*?[7<MAcMZcQls3y,s^ns/jXq4Y>$oMOZ:m.>?>N]bhi3=/C;$]?>a2AăU"zK+zBdq4$7M(;^d)r7:f&B&q,JgaL-.T.>_#&z.N,Nwt#JM<.+vWQmsJ;*M5Y#uăU"f#1iF55TuTYwk4,ft^$BIs[0:55NuP:/?LZn<prT;(j]#e2fhSDl2,0xOk91aEZăU"#y?SZ9QqS*fd=tBA'Sx9_<<1glJd'X0A/oXk629[)A&Axj<^U#dGC_'-:vkWY(;ăU"NbEo*TQX8m^e,ne)Zhgn+5Z1D.]$:7$EL8#dwZ:f?A<KU4T4b0i,cta7VQrsRJ<ăU"m867=D3'U\>u75O7*^ca-'X3b_KY'bl.Y14s85:FJNe:&5V<Pr'FvDmAhNZW,WrăU"35C)X6mE81p<K#D:qkq,mc-+;-J0[?u>71OU%pvaa%#6hO#)D>diB;=+,CR?BbCăU"bh&)-3-]rH3L.G.UZhrrRk9006Nm5vYBHpdX\7mpvgp9Ekn9k#jxGDJ/e7,iRBsăU"E$*ks;P>ChU8a;om#8D^::4pbM5i)jF-uU6+ZI[y'SQ3tQjGW3#uf>/oWF\:^TuăU">PM,[BJ;hpcoOGjvkut9UI[)X87$$vi=\Pro53r$C'G$EW=;U'WbkX2w?m8TXG8ăU"h4-1e,Wv:UKKwW:Zo3WEKKee,O\q(ISM%AL46AzKDnFMb_,E14DkhCF=:4Y/71măU"P+DE)Wj#E35TUX*T&JQXq]6mCi^0kL:GkIXBpX;DpDY70AUPkrb]]+f?u<2>d?găU"DE\j_8&5H^5/y5Usi5k1w,=gOMxO:>c$4ET2HJ)BDub(uj#TrW#x<TOl0XW>+$+ăU"W;Mb1/]hKPmR&E^+#QDjZS1s777MErj9xBt9Q2aat(C]_S9.Tset^ikX(-ooUG.ăU"R-(KAO\^7l+L<1([hTpkORH[B(UeM]T:+wPAl9q7S9N)]N4Kh?($DJR-wc?&:6<ăU"gee0]sB$>+a$//;lsL^tIl%Os9-_#BT$lu;#NIE$Ilc>QRg.;^Tcm3=V42rT;)BăU"b8r>Xvd#3Kup^J4A(d+8YR51Zu;X,VJ?QJa5b8G9]AI/$soJ^Kq$\i'g9i34R0kăU"NF0oV+r2iu1*pPJke>h=^Eu'$c98;_CkvS7O^C3x]iOlF.ij?pfDG=k2#j;NawHăU"t&r8eJtBaJP;E7xF0RFktd71Pgi<ae_%FcLfW^10<4*m$pN]QrQ?o.]OPgWgc$KăU"X+(jGJRMA.XI:t&uVZw3v-f=<Ff?aVK3UwWh9cxg=d:s[2Rhxs^9:mFVdJrAa1căU"NYdR#$iaDAvj4dUObPC]G#AJ]g/VNPtrsS$)(?Y#S;z+^O2z_4#RjkEe?DZCsekăU"aQnu&Jr52,4dhqkM\PA6ORnzUj8r?J\gHmffrGW[gHtJ0s5'kV<ce\At0V$2/4măU"pWMi%a948.jvkg*\%q7E^A3nfAODUe#&wCZW>4^dXDB,iO2<\Tm)_CHH[Y4ZS2#ăU"YhBOd3'(r'kjaM.eZ^2(S[lBf<-#1%/kP%\5NCdu%XH4spLLQ/.7b,+rg8\%AtqăU"4J%hakCnpr9*li6GG0%LNlet2l?<V5dpG^%JPjdS>dR&HRzNZN4oXj\c?8d]FACăU"QFjl72<'rHS):shx%D3:te,s7XRe4ii/H+,u\EACGeW$Kejn[O9uY;_2VoP%RXuăU"wDJ2r1ukuh3bXS15%5C64MhxADo]U3\$Ns?T1iy0rm/yMoZLvmP4bCNIitsk%'UăU"x(i[0AmDB^#9G>qcQLoHtTd?D(5ZX/rlt_ihPucN+$D3rc'Z[\>#qYioTF[LUf.ăU"2?2Hp8)<XE_tOvJ'XLZKNlfN#No0HT8AlfhoQeb--;7T&koS8Ulm-%7P_Km]S&PăU"n9r_3xkWerkM)4g?I[Eu$FcfD1%pzJYR?k[-/'7CoN<\mXqpbeRBJ.aJiK5kHoJăU"=L8Plq-V7^HPlcb5Uo7YfoUF/*>;%ZxdMF)hedbH4/a()HuCL#P(>81pKB(cNMhăU"1c,UYf5[(OWTD=eNDaIOBqS.H'RT#CB0.O(;iab%MdL)CnaWgAo,TfMnr81N[oLăU"v+0PTKbM<jZ,s?-9twK&kFrCBN35ThvkSVJUhr<JC$bH;HlBl6DdOESEaaDlUCGăEND SUBăSUB V9ăU"*0xbfUN4onOFR2cZPZ1?[Syvh;>dY.F?eRq=]-5=i+F_#04ml)J5MxN1+3&vC;TăU"0SqNoBs^$z38m(JKU3cU%&aL*PJ/KTvcO,.c8JN+4f8&w;x<<>I#H6.ZaUdS/HdăU"LPv-D6G3:uK2sM6wYd7-v$g['(y.\^-^h6<mnOETwR+Jm<M0.B[]DjMS]Jv>y>9ăU"3Q^QnElR<cdHZ0Y=YSwSi?FtJ^$h*J0T/?86rp7fnG%?.zCOkH%mUx,\.v8BAN1ăU"7://]2m'LkG65km9$ig%C(Dbzt1VawYsJ;0yRr5$LK&HGSOi,X:Q5I1PhJR'\;răU"75h##85Q-s6L,5v3,.Ez3=infjST:,#jU-92Uj43C2[-npjz-dJIF2^Kn9%sldxăU";oXa-C[g,V;5/(O'*f]1fF05BgCWg]S8glCf:5)\0NN*ghg&LC:[gPQ#/EUud'[ăU"7A3p$G+DA%#sgRr.k3LrQ8>9fUG6wQAGZMhgLOX?oKeC#A+STZFE2P,AZdMV-ZOăU"&X=$%uq?[1SVK$v_Gm*Y?WDEG_>\u1#HBH1a$;GkYN0EamodoTp2Q=ISr^)_P[eăU"C_dG0SQ2Q2*^mcB_Xm[4SAI?-v1;4x9-1_SCkrbaB+32SzrvDi;)\%F]<^QGqs9ăU"eGx/3SE2p0OSQ^O4LsEJ)k(HU^akDf-PW>d.2,]FeEK,c&RP,sn7z)ELyv#N3bnăU"dXDh>(Rf<KI'9NVC#chiL+bYBTfW;+Yxfo<-H-m,\&-tmzoQ>EJPF:ZTcO3Q\%CăU"kBak.IV[Y+(4([,\<p>DnL*wbxXz7,6?)CNKDD(1$13#+7gh7/h/aDnV(BSLN+căU"mo0y\4%^9TI5fRmw'/zcuOgD8X9e1#p<Z_pjT?H23#MkB[kEbX?bE,]W=t_*T5tăU"GeTUU+D<;L4$_nU-N6d8XADgNp%c14c.TD;KUFe1gaQb)KCdseY1Ol?sZ&*\GHYăU"Zm'Hw%J<1bXxLI=W6o*k>mRxGsZQVK7k?Pj$T9NeFt#L0)vFw+JcdTa$bGxmbt?ăU"j,+WGl9lo1S%MAP;<Q%nS,$h7L59n[G=aKp1nJ%zitKHYAg6(j+wAjbKl<,s9=găU"2)dRg;]r;Y%hV[a$+>S3&i73-Fl1X(&FE(*Q:whqzFY%tEB3Br7#U=hb?#Dj3D#ăU"FsBlBg9YK\;_71P[4.cDxZSs(UU_ybwVh-DGYY(ZyKOeG\B,^_a5-:a+7'V/jtmăU"rsc8c2w>>pFc26]M*#HPj(KiVYOf=](<EWDQv[N_/m<Q1$w]RwGu<mg4MRaM(cOăU"g]OV[Dq%<'nXPfq,fu33dU_PBl/Fm_QsHcU/MNCuNnqoMN>'P&6YG%IceBF#G:+ăU"RgM43Qu]/BC0]WWJK'xUyzDDofI[pH.06#be)<p?(BmXnBY^\2VaV<Jfx-(Hq>căU"_(k($DrpsCP2R]-;LRDn;p$#Y_Z:__0OMTO*HH['jww75e\V_kqB'^>VB*(Pk6SăU".c7h>vR(>Z^TcEfvFcLQS2b#NW=7/Z\L]Y_:BC$Xh6vThEXiso59E4E3AFx,7G6ăU"nyB.bcQp8aTiP=d<jD(Nrq[Ht*xknT)a4km*j7?B+3q<Ty0[a#[7mG&23VBl0BOăU"B%x;jpP(D2mkmjVcGqAqj?Ww_WL]bqo2-P>\JnX1qdNcq(n;ovgXU,foUHenm*XăU"CJ5Feg?<IYccB,McVhF$hisQ8O*qZsLd1S1*^f$0Y(jj?a9_c?LnbYoi(n1c:,;ăU"#(K%Qo_L]M:sUAoVQH?1_2S2*O%w,Mkq+>_WBLu^$k/_7pni=$^S4+m_P.M^r)PăU"Vq=m=(7R\R1OS)nSaDGh)D)GVgIP.?rfJM3H*s*nyVv8lCS/K[e9O<k=<E4$.GkăU",A[d2dq5K,3k8[91^+:Y4*_Lt*r>RYl[O1zTGe,_VQa2?IoXA+Dyc+WZ'HDaAv,ăU"EBtK8j2mi_Y5UFi:nq:&hEz?<7^2O.BX%4t=)q>m=2&B?E'+w$T/lX9a[>J&CP3ăU"NOreEZ3'l-A70g4mm$t0h\k/an%[Oo*.K-[eAHJ7]3o.Jr9k)/xi*>h%l2SnPCKăU"K2g50]JR.s,D)V;SF'^*E+Rv9q4(2rfQrJLC>Bt4IV(+%xWY>f(G(=R+\)[ZIH.ăU"Y;(vvR,+<Jh80-Jy3h;4:1_y\UhYh2j^0aoC0;O;VDpWpp5#^SdVcFSphQUHPINăU"c39g(\b_e4ad%UGN<(ferp'/z=Bk:XSsYB'WQ[5'hE_)-#rXOwExGCa8mmW;,eAăU"20h:I*,.PE,c><hshbu/,H#M07ubFW$kj*ie(wgE;P.QmG02p3+7.Jg+;7Ao8PHăU"Iz&>BJ>?VMk>jzFj17b6B02'SLTLAA<0+aSm&K[Zpm0)KH0c_<VelX/VgQFu0A,ăU"-4P<4[W#u?T[6C]KumxG<eYj&(Xm2[u=K*b=TqpI6cPcWIeDVI1dv8$j-9kGr7_ăU":IqWv'I^nB?j<o4lWTY3bNqv3rME+==FYZ;843hjuROO&v==FEy8zTr(X;<:;b&ăU"T$pDKMI(krF$xIZo#q?OITQ[Y<BJ%4=pM(t[EZN:FGjrf0tPlf_D+b-TP$1Vy#măU"?dhf>q9O'bV6[$5hU4$>fYA;CG1TyFG67>(Jy2aZm?H1D;)&(9r3\7anv1V%D6lăU"FB#Nzo3jdT91Pjl$3K.[&mV:[Z%6<:?MWLTh2jd$(h]17a[U$Q?_DUQhNB]D#=)ăU"vzksElUzb_G00AUW.r;9tZHy4l$/r&n(ZKeQu-ho\<;X<md?Z9C'76FD5+&sWhrăU"Z6oWmpq]X:.B7iYf[I.Lm^$c$O5tXX//5S:#qXV*ig+BP8t48[2'e=6i67gwN]2ăU"NYIXxvxSFtdZ[,F_/Ph$;S6EY'KXrh88Y?R\a<?eYtscrb-Zo5cG8+^5iT/>IjlăU"0%^Cr_FS6ELeMhLnsLaas?uf,fI+iVk3a>b>G0ncpkURF\9sk<Lm'a8WGF*N,qpăU"Vd6QXF(Y(])_L#]vzigd?O0*NE6V8nw)*R0q*$#TI\i0Nosk*H>=-\C;)7bMP0lăU"+0SJ;]Q*7L^l-&m.>X::m04VE<Ng\EKF#v(N#P3sk<bi(,jI9kC5Z61qUvX[oj?ăU"0Lo/[7Tx(.zXcI)2NRYpKfkYk=0/8ClQfQ>s)1IR*=?.9%sFGa$VnwcC>6pZ40OăU"p_)TXh91Mpd2I9e0+NtL0KL0q-=-r4\cwkCnj7$Ngo\R7N:J:+^*pJS+]+]*Dn\ăU"ZmBC.%k+]GnKW7s$dwBb3lnZP/)G'3tN9Ze[nFer;3.+$#bjV[Lkoo_>nbHoJKvăU"xdYv0lyHK#LrAZ],kFQgYlqAL-Rg=[ba9%8YOO?P[f/tZmlps%BdhzTe[+,I78UăU"re_/q&\6Q,5V+R_0(KEOs\btr[m+G-LC#DS^[ZRk?,gL7aE$lED\fG3)tRtlI>GăU"Rjmwr-*Br^PaOhNhqKVP;/7VV^M*=Xqk[(g0DyPmg0?y1j$wpYVXXJ2-Y([dO4WăU"j']Oe5<IW^jaamv&(-A)&'nUx]rmix&ih?Raul(vKJuA.aBER9(_)JH598sy;d&ăU"lo-qI8g^AS*Z:p\IaBkN1PJK>EA]:GCrkqH/1Z#u0]]0&l5(6Cf\YW\/h(13u%DăU"8IDMBDM7sQiTjQCMZi?YA]+mZ<Y<nlkFofYg=n;5fQhaJq)8H2(LQBY>gS^b#L4ăU"6V$J>TliD36^+vQlZUctF7<h-]_mWaP[6]4H^XB6R$c\<][m/lNZNsjG2l_c9xWăU".9=r1C,\TiP7t7B%.5[2TY#p>[?A?;<J't^__v8Li[rk;X<[2k$PCN+P3$$dE=DăU"E>K5A3GU*+xU?PImuAhi%^?PH=%'&$8vH9,#'gquRRidM$hdLOE^[p;%9_YI%UmăU"VmZ,gMjqn:V>*]9Z;'L(&*/SCua&f+o3XrfbVjm2<5%:y0&WsMfiW42t4/_'p%:ăU"aP/<CK[B)p#7hl/uQjD\bk^+<dVKrC_MAo3XU[#t^Zj6o]wHTOD.d-i75WN^r9păU"DYHDc.-,_p])4a(.AWd91J/>Z'Oe9;LR&JS=CQzFR/7h_DEe2ohi&/NB*t7->^PăU"X)dbMdove#4P9tONg)I7>9%;EZ9tqur$?)X,kwNYk*L:q:ss-*':/c,So*Z;va(ăU"hY?nAVxQQD[HALz<WH]Q?owL*\hLPkX5BrN38aht<ni-19]R<G9#Q?)T=AE'xqMăU"TM7oZ<qZe-BgYO$Ep+'4I6<RTDDvZZGa(8[B:z9ZCvm=R>U;C6Y&AL/_>rNj2B4ăU"t>6OA/R;i,7K.4f4_WdJ[1D)&#XO-E]w7t^_dB?8w\eBp-D^8+s,0D*C[grh0UdăU"pVnd#(x8(Ei:iWQi:(USRAY5:v5jEi1T5.acs9'UV^2lG1-PQ2(O=f1A#OU9:B?ăU"F1w[:K5l0M+sPaN%CUx%)LV$+qj]GdF^Iq<i,9=tw^[gq2BaZsepS)j:G6s5:U2ăU"t24JhG+kH1L*hdnmUXIG/brH:#k(Ga:R$=c3dWGDNg3U&.Kx/P$p&f_AI?9d5JDăU"TUwCiA&mX_ZB-]=>WvUnEE;:$^VKT$^#_Lm-TU'LHiLGI8O#Cj0l>x3[cWp1jo[ăU"Hp55_^_5Xict%c&ph4tbGJEqM6nse/K;9ueHsl4biBdNCvPM,r5agBKD$_+?\MEăU"J+4z'j0G3>O5Cu^XTmYj_LTtUOYgY<ENc/?[$8]Cj_dC0Xy/A/n$1VZq&q70UwoăU"UQp2t1^RF6_hSIZ=0kBl7IMAI6qmS\q&:6deGB^?lAn-Qu+dpgq5Ah0qonQrB2FăU"E%%dHgE,7+aBDtXaF06MORQ+CR<kFGg?IO0SAFW>AgIT%#Vtb(\wCj.*s_V/G(%ăU":D[_0[ws-2$>W&fT2&[08FcoB&)paq[>306,sc^kIxcxRPi5bA?EKU.om(Q2GT[ăU"3FF</5A;$vEvNgS/b8iug]5&,Pm3wfLj;3*'_]S3EP7pQY;9QXaW$B371m$g%MFăU"$#)Mc//<U>vXF*t$D1WBaduQBtHCB$,;9s/f1t132y_Ij2H$9-8P/&Sd<f19]v'ăU"NA)(??l$=IgMR;:sk$R[C0n8MmSJM#+_yD%0<q^o3S$41ynw=QCpBu\6RE4rf3oăU"e]tBgwVb1MF[:n%o>V3XqMpTNNxJ21^YUlUNq\5tK3Lhn0._5Gem8Ux(+$s.;XKăU",I05ZImO7<r[FTLUGM1>.l<ash_;M,Qv/2b0T>2mO<B%0;fC:b.[obo;(lq=3t\ăU"W1YF^aMNK/Aeix=nd,G\SA0,jih1PtYyENLGy<3CSo&oy[c)1t$9'Vy?pcOk0f[ăU"[l&0%?xl?as/0(:Jntf]Mun.X7r[E/Ji=\)[mMZUL4r(tEJ*HAl$K)\iig;XGb*ăU"J,MM1NPnncnJ3,cF3/Y-Kf.IZaj>\p\f4$UW%,K>g70NaK+v\u,8rS'iG-*Htg.ăU"%f95Gfu:9Hq/D<>Z]0J)(;RCn1nB$7K3.7[O[q-Cnco\zQ<VUtX.\C^0DVlDAT-ăU",)q9yT=V_%.>E;AZ:>AF#[s?5pNP&S_(:_LEDM0^SeBSH]u3/[sD,(U+?FV/OwWăU"Hi\lLb*JY,Y9;ud9a'/p]gP5.<g_VHjBM[eZo4s?N]XTb;e5bc(L=(j-cflDrRlăU"p[7rGW/;>SV*aG/uA\C7>daNOaEmc3W(.(t[oG3r<c,TS#c2oTo-pPsD>)RM.-YăU"=.>Z#?Y89Ssc7O,CP(h*TVgNfr9v,+4fB^dk9c>kYqosVm9&3UuuhY,kl4-3XPGăU"^u#c:XR.jx_'xiP;)nUx1M<M3Go.>i<PM^5vS<dC?FU/&rXXXctPslwB[p-(FSQăU"Kpxex?FBmeFqSEnFP)qDo\?k;W-$7&qY7]nTtxH3uoppB/mFFy,Kc&7I#=$%$9văU")g2zF#Cf2m)-M>xQ[uSweM^$h:vc>+TDqHcGciX3*YV6ibJO6ArET>iwiH_p:&^ăU"W[Cw)+x:WX4th3Z#BD84K0kI.,Ct2Kmrtk8D[GNd\tZiq0t1*EJNJD5/_&dNEuBăU"%*Sypm*7OPRE<&P?k&FTl2TBU8UuB6Z=:F0hFl6:dtNb(Ob$FiP95,N+dEk(n26ăU"KED24<'.P*aqM9JO>DUh$WF<CI&X?WCwg5V5vzC;[w;MNM6ngymT,*;lu8Wv_ngăU"UdV?Ge&NXSOuu$4b$[:NhH/^+fatreuCC/iQJiNwX2VB*BkrN:^arAKk]ZPepSCăU"OTasf,CpN&xm*G]uguZ_Z?NajmjS%63oHTWI4-1/'TP3lpNo6LNlmEg2p86xoO.ăU"JW+Tou-.O_,%/X7&Bj34vW749iSoQ-ScbhH2aJtWSnA;arRAW4A'OIf6.Lt^CrCăU"WPiCF)TJBH]3J1x#X5+wUI2j7elC']sYhr:H;*Qb2\E*,;%tXH'JLMhjqsLJX%>ăU"4R(qev.dZ]e7w](>&?6TGhxDQvf9r1N_onOerXj/fO7iIG46nPsj,7^^4S%b$2,ăU"(x;8r#X=4m/Sp3_R(,<NPp(i*hn4;-sC:<[CHBtEO13/Y=e/.YK,MFkj8/4Wg-săU"V,IvujxJF\m*[?q;hVi#R61usHC^%*&l,+)Zmp4>GEC3K3nUhaOln5wF%M-?e'NăU"W;i,#&bWZqOK/06_*/<%udaF7x.m2n.jl-p^cguW/e:'**O^[ETU[jps?I/$#7răU"RCuWA3\Ep\iCdPPiDUzU[Tv6qu#Ty_67[1m/e>jf-c2?F\#$cfe=V5-(/&//R.BăU"T1QoC.4d\z:SLF8Q65[uRR;$A4a9GVBZu$0c0(X05N=B['q=Ttki'M>ps57S1M2ăU"e^jD-Ifk#2^'=qsIWrt'7aJ)iT4o\u3TfQDBsaJFr_i9Q\?V_dfNkU*+&xGl&gOăU"wv0CBNvi3+ZRA/T1EBaF*5/E.K.Mvr-)i973MT:&+j#NF^#BpeGtigxCx9sg\3^ăU"MTXpj+CVPkpliL$14A##2mF5B6yB.X0%NM<ZLEjMJ42e02=fGH$RXaETi='W%\*ăU"u-)TAjYS<W?N?6HGKAybxnLXEQn33<&Rmx/rXYQ;c08;taM#\rUG??#n8#y'=D9ăU"yKoaVMGC.Yj)tGH9cfUO)*cit5'hfRr]7f;<>gq[zk%1u0DTG,8x\+f_aA.I>;.ăU"5x/t,_59L&EU;lVt.Ah6bijj'X;s%)Eav3\1?u]xpmF/4=YISq)H6X?,fa-/5r6ăU"9k)y+OyIg2rLR_UGgl\aL5;3*K_=x69,t<6>,0.BJM+dfq^Wd\I:pZOwae&2fb'ăU"<znLD%cY:&CEzhWOC/[SrUG\-8LzL)A&B:lB;o#T12+;edbvm]kNSxK4u'\euzZăU"Dkcd,<Q&&n_$ZC?0aFA=8oaOG$)8pDsG#tDT2uyfujH6yJU?f:LE%6Ui4#Y7r&%ăU"*l=q8/3Fr^XL0Yumk.[32yV_wxcA^=]PYEre*NIwcHO'e4k?[peCTmLt/7RR*srăU":gfNaDwucRJ)[=KZPk<9YkXJW.Y4u=46YvR?><cJsw3r4kVSz<.vPLZ$FEL\E(eăU"/VG?hMn8C*$?nJ%*>YJoalUx3x_<IJCL-DaVkO_7S^Y'2ZHXSK*$/k.)kpN?M/căU"WL9x5ZHb=_gZd]Jgsad(C5B[HRb6y6q_5AJt:S>q90&/YMMuOl8Zu=R.lkXM]03ăU"RuKB%;13D-64StaXIC+=Tg,y>._LI2Cr-zZ\]].a9WppPxB%yV&f*$lD8T'7K%>ăU"(N$D^ok/Lu.;-*=lML2condE\7e5:O&E7<eE$qWZdhL:k9Y8i^lv.jcsEl^S-tRăU"IzH'S=dhQl[_PXEi?cn_s7OrS,3e.Qa08w8t9FmPW_KCLEV3B;f=4#%gHFdlS5hăU"oWila_])ja619m10yahS>v_aH-X<>nB2rQix\%=r?P-FE:Q*\;J9N,IaL&/&$m=ăU"M^u&jbZ1Y],y-'4ZCS;\3zz3/xuJs3bu]L8($BG<Y0T-uRGc)b-1K)UpjZ'K<CIăU"aC*dC9Ak[w&'E[]LBnakQ1/c7e0$-GL\K1mKVJ'MGU?YD))p;yRl&-MUV+OP'\jăU"mG1$D=5_p_.91)?:Ufd/h;uX-NHy,oeu$;7dn0A5ac:/\KDf2<ErUBT>2.kVhP7ăU"iK'g#/w9il+^_#ZLv:s.:[n[Y/:VX)hV(,QXn6F>lZ./1Fi6E2Osa%%CStZtQ-JăU"IBK,BE'2,w^>':k-^SlV)Go1^6Xgf?Uj8[)Au9cVW<4/4mXD'jOsl[cpxoYYmMVăU"ZdWwM_%kI5$d#2WkPERgb(bk*8bqhH&75XqvSC<gQ3G\/dMCwD*>Eb9>WBKI\NfăU"bVSm'RTEifcYoZ/pawi's3$N#f9&Kn=st\8Bk0+RSdaJTxe+8gX8)CZ_]'B/;aDăU"aZ6NgN7RG%J]:_=pqt(Bh%\3*NSB-'lqb*flU=AVh_k=m8BX5dd7IBn[Lh-(i]WăU"JSYUnfQ/c,W_rU#Jp5Zn,TWhDZ[6Xd(FC,D)6KXxTj/K$+Mi%$mxMb3oGAJ/g/jăU"#P'Ie=l^_RpisKt9O69VWD.m?:D*],kJq=co=/JXc<Ojd-r/x>0&b9vi;ti%V/TăU"TRkf'ACRh$':9[_58B6eDhVJb96<&Zmm,y:v]r9q-1HRjK4:ka2B\ftz5J1QE>7ăU"**62h20JQL$jZvQOG/sPFhP:(WG%;bf9Xj?vtN+.*hmJo*A-=?XFscR[gN5NC4BăU"f/WcMRP/Qrg)Kb2Kmt^RF\s>BH.9EhluLVc*X5/cU^vHHk[tp0ZQWa[esZi4_USăU"D9ID_$tyzn9'-6fXTnoC/M4x:KU-kQO6eL*P-c(m=Fr-n9kl\2m<00:cgEr78nbăU"T8$dg8e3Z*Tc:w-pp4Thn<)=z\Wh)gf&Eg3%k%*tXOk.>ma,8Y=DPkbjTicaq;OăU"N6XnF0xpFQAv5:dpKnYk9QerfGtpUh$pKKEi,i&0BY0>3^g;]YPKU#0_cZLPJaGăU"ScRFh49a^aMp?;^t2XYbXr;#v,f8=\\8\b_.oC88:6hMh$9HD)DQj-D+m2krk(EăU"R)*W8-TNOLU-f;\a_-(oL*];e-p6BnVTH%;$/*Qv7rwa7rE5NLlM6DGlC:Jc[:(ăU"&Jm<]g(]6giLk9'Mvar-D?STO#K8kG:'rZMi/P_gR=#4lRytXrKeYyRGa;h2u7xăU"132\%w33\X%K[]sbDHk%MkY?==yRIN6RGAE-OgZQ7e0i<&03Ki<xl5U1:4ac$3AăU"5#/JLAz2n8bSbl/dq2#BQRe2Q/8V)tZ''TEqQ:q6_SEM-KcjFu#LQ[/3qIp)4XVăU"82?Q01ljp&D-J$d:6h/)uaTkOeBFc99m^s#_:J(bmV84=QW#Q#?6r8x$3a(;1G]ăU"+OPYEm2=,4h.8gA^1Xd5^L44WX7'g=0]jDl]\)M>;+u-'oCuedcVt7Q5'_>iItRăU"Gh7i8)5;'x/S=595:$npBfbZkChdrC%Z=]Bc+[(,b_U+&m\]uFB[e/[t3k+<BrRăU"waM6dBs_AjwfH;1$;.ISuC2r[]?^;mfr)3#MWjJQNq,FKltF8$8t,x(D?VPv;9DăU"1u>_L4q,c<se0K#'>[4cg*;8pp)_b$ekjv3B.w$A-34Yixh<^_*W\k3Z':&&'&#ăU"VQtQ1KRNNJBNX(kA0J07Qow1dJir8c0]&Viu$<I(uPc2>5IN:_YAGS$j%Nvc:inăU"v=Cp=#6r\)senQapK_'.3ifO\,XL3E&a[\J;^0IPjK887&G4^lYWDLwJ9*9]kZ9ăU"UAt(aWX78#[(KEO;qki[Y1E6G^J(,OZ:U%^I#RE\BEPyUQ8m-AaIn=xP5WXh31năU"k#m:UD\-bM&X/0CE1'0nQAA(mmSh[]w#Ag(d6hEXfi%2^2JYgPj2AA/YUXHRS+aăU".jo](Z0/quIHB(9-&19WlZsb5F^Jm=UDIX2%=?1Eg/t#ac*CnsBT9wnc$wKFaqMăU"bsOw9XN^97v0r=J-R&(bGf#^^qjYk>ZgIksh;bjIA9,Q,t]Ejb=:R7/^C5v7mbIăU"'OtDYIx\aG4.P<Y6C$E$8-fe6OXXhwF'<LznlohV<<*X5a%(NO?5wSLUn8cwK+KăU",Fc.v1fJuDlpSEXpZQ6%l#Ry\W>P_ie;20CWS2iAQr'EnGiW(X%3OW2Ax<>?*F5ăU"Zb,^&'31+):Rqx6MJK7%Ndq:9vECQz&h(+EU0u24/ON'=cFkm/L?rbPpSCZz%bnăU"74ZVJAuj7lO);Mt.&:Er[]Q?u2G*Honp/bW1;Ybs[<3DN5qHFLrHhEfNqqX0vhoăU"9MbfJ3j#eA,lVml/PDq#/i2u(hSh_oZ(]Pc8Yl3X4RmjiPa>:jSR?uHa?PlSC(uăU"]^qSJfr3k=t=*$,:7lO9.T#:6W]-ToU'__+krs&8:0_0mx%71&O6kt#l>?9'aE2ăU"Kcte^NqVIe$0[C=*]ywT[Wc=O?x+gvQsSiH0AjWC3P25,LoP>wknQZkIsqEA8MNăU"K?g9ksH5v7JBt_;%_L+ZD,$hgAA12hWZmIO1T#]oS#f,Jjn^UGm0k*t8VfBsnORăU"/VLD/O>]g<iK=YS)dx231XjPsNN*g:,H6Q<.&HwMYKQJ4I/D2e/SrlBiui*9KFaăU"Wqu_NUs*b).g[G*xG4^HB.e,u,]nLl3%cVjv^j'P[XIjIImaI$1d;w8p2)5Qo$AăU";cBL^kIVVqXZ0gcXA#HDC[B#5>0k=qux105a[t&,qoxcHK'&Rg2FB&?^TlIA+&căU"OAMZK.'y5<f0rkcHgBqp9ef]p%^d&J?mSUlYH[qWgQ_yAh5>IOf*XH1ac[$p#_KăU"DD>hCk^Skh9ZL5>9?C0NaqUJG(c4W($aBY=xQq]&:6>kb'c:IJqZZG^Y'3aPh2=ăU"pl(H3_P0oes^fS2z.hRKUM#dK4F2xk&A/wbil<a+7KrC,e[,i\[,S>80o]0NA/UăU"?uL>SgLyuj);Xk[Z8v(E-_thhZ\:cV[OR8dIY[Hqb?ooML3UPA%Lex6J3pCE'9căU"k'U(GFkMsF6BJ/TTrb%)'Z.RHH(?&Ju;u?2S[n;F,oF7_suqO3gz_4hCjHehDwrăU"T:=7i[Bi3^^+qJY[G\z59b[QmTcV73ECB8ToT7C*MTNrhe/M.B97V+V&&1r)Xl2ăU"P1F\pY%#jAn5_%AiamTRHjkW8x*AoFD4\N<>#m:if9YNm0.<gMF[7hZAT'sqD.=ăU">KMAEPHpz7,cj$aN#A>\Djh9OJ3n,hF&3P2q$3=P4A^S0_Y=R2.&j.s+klfA*G0ăU"?0#v>u)]zlR6Rps-Od<-UVIV(1A-n:xDFgIl5BH]O4nr.tW7y60di*FhBafw>pwăU"lxTu79*O;lR?ZdL(T>=w96NrcWM#s_F8/^dZ][Tw;V*eyruK))84lY=p>gb8K*căU"L$Ea5$3Vl>Oo4wh/tx]>PAHW=aM&H4bx4_Jt$P&>rQsg]GwiwyOk2wRf7f:q+\oăU"f6HTU8q0vw0W5\3u^=B^UZYwhqW.1<%pG\U*r'3wo<9:T0l4lM#D_W=q#cDBT+NăU"XAgcens$wdGxTZ:wUttLy[c4EFvYgq^G^/(j*7haokBfLHw^(jc_embVE6?:p6VăU"*,q+vG8Dneie4bcEdc/+LEw'08'vH#,9]PSUoEvgkGboE;UfqjQMAT9;pJ85.aFăU"Iutk;n3?0Sp2QjDM=ZG.IRi256HH*s<MYu8X97b$/xg<1msh_,gxo&7avsTN+[GăU"<c#VXd\wvwb.\37pf]*N2sJedh?cIdbhECC:$ZCDYx,]vf6/lEah-;QWNW9DmndăU"o5,C:OAY7%ftitB_?LrdB8Hdi,G_+ks$&&.2[uCYC]d9$)s/5fitH0+i5Vq,=v3ăU"^r)$<UnO1N#hr4,Q/#?07m]wn>NBs.P5v:H+?U>Tehv<?,L^RoCrCdJ]*yv6nn\ăU"4hK&BYkz+koEBfjzr(nuNLwn3-9pdBSCNvP.9NS=:oAstaKd87q2=pc[s^&*(\ZăU"G=nlubcxLZqKaWczC=0n#8AiAj%E'PKujVLOL3UH<4>hTa<]3iZxppW6sD/3DfhăU"'CmzIn2':-:q.peCrD6m1Jz8$ALNoMj_WiMcmEpwkZR:^#1JjdAXC]dQoQFUukGăU"tmb:OV&/ht%AT?uxapycr:T8H4\DK+.yO>]Dos)6O0995.09WHpr,je$lQrb3NqăU"%9pEsSwrR+\]oos9^%0s(dL;f77c#hI#tibjihmgn.8vB<dhLq7>SXES7ae2LOeăU"v)mGCMCoVd#,cxr2Ldt#,6npc$oWibWk+C)&=Og>3Vtk)r%?,ONjPwkHJ]y9V*^ăU"?#y;*^/;?k\I)Thlc(be?bQl5alp)lI.9pw]xBQEG%)>TvZ]9mmxe-6F2YWghkYăU"n%qh)K^vgAi#J/5u+jHtKeIt191An[Ybn[%I_DPM,G4M[rFZ()p0wX2Fo6*3->qăU"xZ.$p89(suy5Zc0&=eKrc<tj%iS5/UOB5['J\SzT9+ktrnN3R,cDuZ6ZJAWw8:^ăU",N(V-p?Nt6.hGZ%$p$mMH1JzF4uK=.[p3,4u%(D41-L[Bh+#Pt4ZaE^+PzZi6wSăU"O4iH8A$.EwH*kt^YKtWi=J%(R<kRFJ:Mbo%G)35,orKAK7T6asIM2OT08S]JY0+ăU"Doan5^IS?/W57Jk4MS)*6s1KqM#z8ybOX;[XO\L]++0O[D=^_uhh:bJTW,_2?&1ăU"j#'gRFZiY+s/FxXYGX%d9i&f6Ow,Fp$T5B)3K5i0DRjfAWq<_V+e,UfFx-'ILn2ăU"]D\^KQ.<F+RdTJ)LsSKW:+skvG(3Zhhz7(8;/ki'lKiL\1Og])^i8jb,87uTL+:ăU"W;F2-4J#l;$hEa0b<M<qgs>\GR-SJU;kNJ+P(WD?IRMfad.,?+wSVZ/h=c$P==\ăU"8+B.K3XUDft)OtDv3/6=2s]<4J4k&rv,Tg\8:ngrQr2?L97lo.L?Ls9]9)fHy);ăU"hgeC1&kZZ.L?DpH$?FA6Cnf8?fc$t5[fE+ltTU_)FN8%Xx'RZ<>J<sR0*JN1Z^_ăEND SUBăSUB VAăU"[CqA6P=8OycN:8b-rf5M5rtdG&h\(:(N>def4<VJ$,LNck('f[)?leDf&*M:=a-ăU"xlabI<CHsEVPHwZ?c$_%Xg7#-PI2Jh6w_J+QI7mHq/axNcEJGqHlkjU/#Rp2%HJăU"P3)0ez7jZ]1G1i4[A'NK(4l%1F)uLm=HFJfq/(;85n,QI[U\AObEMEJc8IH^\5iăU"C[DgtNbAa+.2H1xrqDOqRGhKR:kFYkOZJk)r[Br)RR$R\[WUWsb\Ju(v_P$sH-eăU"Tn/R$eC:Al0Yp+cs'[*ewTq0jK6QY$^IGgZS-a^<[z_FkC8NK*jsN0&WcHt.,7,ăU"IHBjT5DWE>H,^vpk1c0-.uD294[,8bHCBScNc)HwJ6S'ZiQa]2o;dWlm>8]jPptăU"yUX7m0U=jHQGY8HW$^s(Pb?uuOeZOZ1[G^Z=::[c2:)]+IJ&W239<)lkepbc+JTăU"8dM(pbW'dhF\hqjXfZTRfb?I8]6]jD?nFQOn/vmOzszcXbwhp60c:Y\+DsVEPYYăU"rd>022Db]&s/*utCf\Jje<Rshm?rY85?C(7iEjI#)'D_lr8^s)$HPXvdTm3gpgaăU"#w&eYLnW:bTqlPVGyT(vLb<'FsPxHH_[CABpB#T]H^qHn:7j$Tbx(SfwL.[aYxFăU"+tfug_(Dbclf5ON62s]rJc$-sD(34*&.tCbRNjj&[4bwxghDx6pYek9)I%C]_ObăU"Bnk8VM)oj7=TqmJOY45f#r)U:ML/KpiOaS,0t*OHl=3ZB6Q#111nnuB:\9ncM$VăU"KRv3I?iKsJr;HxEu4[18n_X-(0L6>f8':<pPxbP/.tsS0fF9&iXv6AB#3d8eqAvăU"UrjRl2=UX0I2rMowQq3iy2DpkU4d'R0k$U_^XDI$Nk.R1/e0xk,YSo7f+>d'o\GăU"ZBhkRwn2tnkBfcMTYqVi]HstR+R53A-C_ST#7T[>4'4f;cD+8EsHY52*SFJx%,KăU".&l#_?8C_X=[<Rr>gfTe$$FJ5.hbr2fLdj\WjB5WqCU0rEX]v3haa7oY36GT3;3ăU":1[>1_+$PS\G&:Uba4CefC]9rkj?Iq%47ohn^6fh-n1N<QZ2h3P]bE.u=8H+g/AăU".)\tqC'IA=rt/T1M(981oB6wXP_1D&\9)L?R2;]9$C1W0%(f9PQf[:%F^PLuvs&ăU"NXi6*(5Q'hQQSJ*fRBO-rBWKD-C2EozKYLr<<aJOk9^-nVH8ahxO:,WI%HrepSeăU"-DlWrw0hC%In^)/cvMmyWd3IWoLsunNhIkv.O_>>r9hV9?6Dr7TD<(F/mBTYW\:ăU"0ap%n<^tsh\*k^dsCuUsRrW:'9oRnQ^X/'^Jvzsv?i.ZI0\m:=BB3<Uc1_Vv--(ăU"g1/-A92g,p.WB?oK9&yz\;Si,b>Uae-v,LAH*5h_4^9..;s7a]-:Q3I'>(xtO_GăU"tnUi5j^?A\hqO:k;c$oJDZ3E5:rST<1Aa*N5S=IopMDJDL)n(;9=>01m.amj2)#ăU";h1&4_).\-x[MtYZ=?MX$7hFMi*H<aWp64]PKB-GWkAXl'd*q.fk\Ilk?Go)ZYyăU"hvu:]8X[G6MWj6Yd3.o2'X)_4T''f>1sWB_#a^)]F/:cn/vGVodS:4oE=wNol^3ăU"K:#;qWY?2hDViNcB90hD8/,K*q+sxxrOu2xi_6_>_).^Ss]#NLW3JfpMxwZ-K;]ăU"3m5r-I\\'+l)g$;ZU>rrSIQ%Nd:ZKwg1<SMhmfcL]P,zJBr;rHVq#u/;6u8So2YăU">llx\n]u'n1Y^C;7t6BLgn$qUtv=<IAJGzN9+GPiV2z\>m>xKYN-;cm8g'6MuHVăU"UYIJj)lK1-OX&SX\hw>90a.g6u+[CjtKBB[$<UJctBG4Ztjc_N?7;XJOskl[>N-ăU".Nd2<ZJWNXjs7t*]$?/13:L'5#h(\x&dNlIEYMQ#mPaT)74atAEZu#]wkj%E4WsăU"&BS=,ohUHr?3o[CE[w=[-l6jnt3.9ab<u<<b'hm8pLt%[\30YZax_R^PX#7.lm^ăU"o<B0BRsaC\wv=GfTc5wx:18vC\4Cg/xGS$Vr'?4[ZBM,QzL1r7nZpHkLpZtL<,lăU"aGF?Dk9Br):p'aUqL#H0ogm^\]7Y'+)Ctb6DbIzEx<?FfM=0?J*88tUFP3DjRrJăU"oN\mQ]ud:L7A-Mimg/a]uc\<,mch?3,66nhU9)1n$1(Kab<LB>v:I'9\thoRns;ăU"ga(Wu$ZtW-.Yz>hHCj&=hdykg<KQVMdoP]P-SkWvTS_Q_Maz1jJ+,(.>AL\2DwwăU"9prrn<tll.Cp[IN4,.hc9=%mB[B%oLGMeB;9+UIv(dEPN&mcm.+?4&7f_?TvHBcăU"0LjS&9?&'Zf,[]6_QoDgQJ%L;8l?s8CL*s4^Jf5XQwb'n%v=3/#Rf%nopcxlhReăU"Xg.#-7QQw1dLWW*TG)[O-X8+O)^gYojCP)isQz)p/;;k*;#lUSE:r_EW,^6RY%^ăU"SRC+kv>wna>A?NS0S,(</P-aq>P2/rCA;a^e#cgN8Sc,pTMN7-_8p3P\-ILjnIPăU":kP^:0n/FPnQBB=;F8Hb6N^0F4)/$\gYOl?(c+.adx<5h<&4q<t2NsXSL+4oWYwăU"P\87nT.(-Vq4g.eLF-bW=LDRzZjtSo#h].U0=F5VKr#y<$MqA,^:g-tRU8Rn65jăU"NB2lDC9lPTO$t]fe%#JQFSYq>V*$UY:P$[-mJ0Y9FRuggggp3c[g':g-.QDg55qăU"6FmGZvWXFTstxg2B64WPJ$Hnf$EeiH$pE4h9wuOa;pj4>SKOKh8OeHBu#dVbIv0ăU"3:'+m^hGedu#jb<djI19+ficG/1_/hw2'J4sT#RejgyL/NpJhoU.eV^du(#&Us2ăU"&K[;#<Mq-qB_2PkhQH.6cT$EM-YYl7H+\_)Z^u/baNMq(p8.CTGVy#1Sn8PXPYjăU"$6px(%t^vBBs#x^oTLwdP>b8vnK0vIsKY+)o0Q<-G1d->u[?j.7uB\a(]J,V^tFăU"87?YFK3<&nnL&-k3vhn/Q,)RLNQn[PFdWaYJ)p_op:Cci8-3Z.PLjs,=Zb(]&nOăU"=62U1gzJH0'CN48DUonspnUQbo4/HAp<Tx_\V.GR1U3D*m$N3jAlBUkJY]AS7.UăU"##HSlnL;a?'iSs\+4AQO.o#ya>.Pgt_CN=>nC3Kwb''gTy&V30HH:i-8$D0sPP\ăU"%piYqlELSESqlCPG(HS[6Idb^?0bnp'?4/sL)#\:G[BUSo]&;h5e;ep_CYJRv<2ăU",Z-fTnPPJ\JS/;FX,k3gF8?D]H4q[G.fxPL\isD'mRBKX/R^mm[/u4aLa;a2c4păU"bLoO=hQhVfP#XXJwjHw[Q^\&m\mkN%^o,,1hsSuXQM;]_p]Mb0+Ea-11%j\B]ICăU"zkz?o39O8>)<e^As$:u>F,rBO^5zg4r?Hl:9:k1W6ov_J-,+Cb_MfHJ2*pO8-evăU"k<05#^2)H*UE\[V]SAUHn>v8/L0L2k0fjPGWV.4v8$$P.GSJ?:I2NIZVUT[0]a0ăU"qQi?Bfo$$3[x<:R06R2%BJ*iZxI9G2G_ykI\gS:kY\H$Ga,:H71JLENHx'H]vkfăU"]M/FD*NYIjgohz9J21XN]QrG9G$fIoT5*b<M;60g0p%l+f#BAneRS5&N2T+2^pXăU"zf8y6S]_/f*3q+h7CJe8eJs<LD.4[aops%wP=\+n/,YB=pEVRWL7D/>&]$r]cGoăU"77wiU[u08j<9ne[qsjK6F*3^h*,sf<7$3ka&t&24j*CHH/'EGHHIV\Lgb+rlZ1năU"FSII=%=869$P(\WLC>Mt%lK&on6hZ,n)Zi,b,?n'4Wm[reE-/DZrBEBAt;<)p)$ăU"MyGSL0QK_0>H3UGCYM9iLXj2Ej<naTi[,2LXCDiYIv2<nmNyRgy*ygE$zdIO.-3ăU"^z:b2OoNV5\(<CsjCIBNr6S^o5Iwr34jX(,Rut'dIP<dtO9-m$_39*6L-w9Y:TXăU"w8a?H%i'=9OZY)Oc]N/?>+eFN-b58fQO\L=Y?hVT*7^7Crn:;h>:U%>lL)C]Z*ZăU"vY[+4CcXWs(5AU<M.m#UE?(L4;v+2>$81zr)-ra.^]>#?'8d&T.uR;%*mV/ZL2QăU"-3;3.v<3j3(cW#SH(GyiYbv^krZ2:'LrM/^,VDT]oj?KN+$&Sc7bLmY.s#m[T4aăU"^w$?JHOhr-$tes_:.Mevx<1Y]Gp#bVQ9&j>NWvsGUoF>6;S4$kQS#?7ZLjk&u?găU"6)wUo.)k%Fe=Jj%h<u-,MvSO>^NBr\kpoJAb-$j*_MKFgl&w[s:+;gn;+MoYrqXăU"rRbD;5XIhUs5VOT+\l.r#[Z6q?+_NL&^7%KQY/=*jpWlO#G8&M_h<IZ(GFtbA;qăU"&M,qaH7\p&)Tnr]]+]<J#$(shdt-+TL)TFnT^(NXH$a^We-w$e'\-^X3b2xDl+$ăU"6c&1leaWfDcF64/]b:EaJM9$ICGMoGnOQOZN.4c5LOo]36KZ]i,/s:q3E*N/*)LăU"2nHUS^,$MJa><81>)Ijtib==w7*.kD=vo4igiX<NDELU(nuX5+^E]XHgxKibXYaăU"L)mg&(yL28AU(>&W2tG>T'67E62oWH9ASiBk.4^tB/LSU9\;k.K[Uni0I/;;+4eăU"'oW1isM*DDoqpHf1CWGYgVN7QX>#j4Vpu,Gm>#JA9&3S^P?1$,QTP>'K1Isw$2tăU"kLVhGL^7:hXBWGf(7Bs'kIy7l4Sf1>0GjScRpBqJ3FA]b*hAeP=^*m/'nk.u(h7ăU"qc9$maXK/-.P#lldq,(7Pl2cY>Ims=Xcl+#r9GJO8,HK>]V5:XdtSx2tgCKlMt0ăU"K>#Ko$WjuHSFbs,G_qhwco(':LvT'ZDPKH&Ia5[OS2woI3*(t<<lrbL4aF+_dg^ăU"qkx$<_Nq<;XPa/V8:P9t8kegWa$>Y4_YKth8/#mNJ6>K*gOy6[Qlab?cHcR.6NsăU"iL*jIGU;NOh]4hWzDr-VINAkeUtDuIsK%B2<+S)>IP%T,S_5b5/;8YpfN<k'6_EăU"qlzkc.i=BYp4iCIYxg;.>U*a;9m:RLnLuy>gTW3lU*jvX=OdQ[dpLm_PG'S7SY/ăU"k:p<-vA5Sa\a=Y4.9-dA^ZnV92Af]pTLp6NaDG4IGtVf^kF>$hV<]Ic6B5j7p0#ăU"Cyut5ti)lmoP\ZZGR\;t%C='.Q^G,>EM68iR(zs#<M%/.kKMPomSnZvfb&7(0;lăU">06$oFCnN8XE(D7.8ofP,wTUH=BFa6ESt%z^/Fo8[<M7GHCgFd.y]DPm>SHG%=?ăU"OTdDyJZG$K&/en:dCRK#'bT')ST305n'OS3.<Im]H#+kVu:GH)?T6\O6qj-NTSVăU"s;1'5I0O5O;,NaNu/sK>TpJA]G$eGFu$fvKwEr7iaWa<SK8wa7C<a>?GEGNV<&?ăU"zH6B_Hb8?]Yhv,06az*;*;d)3vuCW<v3(TM0k,m&Y8XCfyD?^_drSqMANSm,(8HăU"84#4#(DVc/R1P&&P?1U'F%QpxhB9lx'xhPw4?+GAo$t4keLQdr#4%K+\BN/9DQ<ăU"hdA/OlRE)&jeiU32l9vY*Hi)buo.QANQJ<\avKSCFZL-CWY.mEo1\QSUXQ,/Z6ZăU"CbW%(Rl>c#*nW*mS3_gSzY3k7KU>qQs7D+lnT<xn%C/uMtj?ODeSWInxON\=Q6'ăU"r\\oKT-kD*.-3]&:hR=QU(ms\5O2,VE54daue#qPg0\qSEPYg*tR(:>,pZU9,fXăU"1PtP1JC%iPCK*S3.3Iy)02wr]NQOh$#uM:QMK9sH03%eEenN%,qbBoq-gww6^3AăU"Mwj?&nMbrYXnY?1?*w>P*YV+[IqbM9+R=9t#cQO1*U4ZpMO(pOdX*79aDO:y1exăU"2o_KG#[1-m^8+&>\M+C\^X:qojbF:f_oy^C&**HK8D\oR<i('57heK+4?j5r3TPăU"]/kf&[e$;)rd:7c%J[RH'trP'p9Lm(Y<WL]bXrY(g+\:Gxaq<lEGKI3*RMxp]PDăU"%^-u?k=?+Y9Bl2bd.OYFJFVZ=eB3gr1=.G6o9-q&r__?Vi,El$)69b^L1GGYO2eăU";qKZ7Y0et,Y97N8*PiA.22Dp-\6Ec5zr)9SIa#=W)M^Io.N##Cq.Xe<UKCNK/DuăU"k::;y4cX>p#G)I$MlMIIk#,*rbc/oH+83U\DI_U:&YSfu+KOc3sA,-2R04XHjm=ăU"e#HECPZnN?G-s\6/g?<q+uk)CKDD1<T93S>dC[HU,[9bpiuUZA+Xnia>Pg$QCe\ăU"WK<Y2wIKx;*zZfIvu;<m#x8Wf$*6H+eA;v&;*TZc$rnI?BCaXq[8U'nez.<ZNW1ăU"42]q7(CT9LHHs-42XpxVlUr^9NAxqB5qu+P3pQLY'56_a>gC>m\0/HqssoJ^?9săU"i7B>l5Y?#K3U>?6Y/E0H/YCT(hapgWu+)iQtInpOsKn)](-?5&Y;URtzpr#1v4oăU"'vL0Q#OL?GYP%bnuENAWs%^r*t*#n;&5,^:(1l>r(ozR^x(;WP4wB68[f,WX3_căU"IckDDtOOHaV/-+CfU=-XO;*^,Fgg,B9oxEg9pD5>W%_2)AAl\xbD-,?aYl<d[JSăU"ew25=YS34gK+B_]DgbLgVuhs/vE^&aL34)Ap4GmXk'P*ZJfSgG[<VJbu^cWPSBWăU"mP7Jg;M/(mf/4VLbm+ZUySWHYi\1Nbp*[fk<1<mMz)%j7%zU0rYNhe-(Y$ShAvaăU":=6>Up^bA]u[CHbfXci8y<c7i=sxE\qsV-3lTI1/j0tE(;t0YbIGSG_30en*7M]ăU"R&2>RL]YpPO#QNR=WmT+*:&ACl/hCXw(]l,w,?l+-^ZX/JSy=0SJh9_B5/4HYbJăU",o#sL_:p((.t:Cq]j<XWDuL4>_Z]z*X[VA<b=<^j+:4U?9B/gER^6R2J5xx]5AwăU"lk_E)JYnl(Ng^?<-9s$lZFKoxCXQv<Lc<e]mV/juBBlvvji1-KSyIhUJC'XGdNcăU"4&3Ea'H+Ws-^Bus:'FnA92UpcL&iU(*k^TQsA\AIdKxY1.LFzU4++pEHh$pQh'yăU"%QK\[p$I(t?->BIy;hJ\c+rkN$?&#ET9YVw<<3k2f''C#*N=<c#KH_Sz9\o]0HSăU"HBUWGL31P(\g$>m\55:_hrk'g?$2N>A&r&qZ147%cbgkD2k9GV4NL9%8Ez>^G84ăU",\EQKU<\vr#;)GGNDy\fB[ZIQq9?nV-pA*Jb7:)S9lXxVKMUBW9U\oj=R%0'bA1ăU"9OTti+$?;vccg,+C'^ZXNhtH?p-1#bqy(Z5#dB=x)d5YNrk/X,$/=C\*DrpcXNNăU"5/.U<&,q$B)3(]ud?0mK%'^#aC^6x7jzE$BJcd=:OBN7NYRZ%M(?dI>avM*7]S_ăU"ngl\2f)wNi:T6\xW,Evv2tKEjspyr0N:;KEI#w/]0X_8Pb:D4>s7u<=b>w2rAc3ăU"kFCk7.yWNVG>L';fUUday(YDvta&<IzQN29tG(IZVNXP5wgxbGMIvGzj?[3$AE/ăU"RNqrgb>u)H[_y_o[,zwu5W/jBYr8uG)t;y^JLJGelniG4=biQPWE#wu#ljPpHhwăU"E=Cgq^T8KK4585slZW9^qylh^FZ+AJAmHOO+X[wnpMUdh&O^+fF,tpN6Caa\:h:ăU"VI*ck[hPvNJf7p9OJQnrRufJpDj(%]<],B.h[Q\q'exLh*e%nGFuDG\&Y0vGqBfăU"vNK-juV.P\53Yms)#nhThHs98JLg&-Su$j(Jgj7aoaU1lBnv2JthgQt9LZ'V3kOăU"(7lkL6,a+Ns[c4*sB2#^YFG+gB&KTs)lZ7z1(E-TB3Yq^HA4u5VaTeI7k0bI-'CăU"=(8VZ2dd)mfX)+-F*Ufi[6L?HOa_>IcDJpn,iu.A%Drib9Buc_6S#3$^7LD2qI3ăU"6g;eaF8Wens[<Yla9FU#,j=2%decUOvvKJguW_rgt$i3$E3h.Ajh3QO-ce'$y;kăU"s+uR$<Y(<')^z83F0_HN>FPj=k7aP2sa5;9teX6\K5b([J#6l7/aFD#KDN[gQ5văU"\%-A\6Z5FDa20-1T3c>RbSql.&Y/Ov9X:/Ha[4yK30DaCAR,c2O,?3O:s\,Rc5IăU"Xo\iC70\Y[rNyJ8\P-fu8I;VcDESH'5+H/s\$+Sgf/r/mX'aR_y4>PG9;nF*ow[ăU";ITgXe>A87lwU7kkZgdsYhnRBnWhNaq6kXbNjfCfAYa2,9Lw9WgM7'ZXj*P?nvWăU"%H8EjkBHu6.CasiGporp2X.kcUK>7hAo;MeJ^8+aO'f_iDZdzTOBB>SY$ZGDF?ZăU"ooX?3$YC0-VMaID$61>WqCepV0hQi22.Q.H;8mrk:<-8l-xttbI]bqSbSKV;.<MăU"1(DZRZE7g3:%)]r<WJ#]uE(A^ljL9F]LG<O2A=J$H]D]<ga8t2o=O0%9KtO(]gSăU"pHmm>M/gWr:1*di3Q0n(,uG$lU$e2WlOb0<]:(Gk00GteTaU8+b$trwZg<#6[Y+ăU"oDrgjcVJ_mU#'GLNVja9O(x:w0MWnwpA.DEI8Sp]bVl99^P;?C<ZKa=i,Tn\Lc$ăU"CQWET7J)sxxhfrB5VKi<dPWW+<.8O8svX\1S.WjtUTMb%aDHXCPr<E*M#Z7%rFSăU"'z(RG>SAVTe<IZ1Lo)qO^w$J%qwa6Go#S5MEo5OEhg?e6Mf?:j3#2f%2y:yO#60ăU")Zk0VFN9FCL<4oeZs89#%)<=3$rMd?he/[]*[4u*I:uoXl,G>bT]b&nrVetu=dkăU"MP(,8w;CPvoR1So07<C89')\TCVR>?WGn4X9nA=,5l9X:\vC7S+3aZj.8S.Ls8AăU"fslZ[n.u+)mDa??8)vQ8m2*t+d)otXRU\2VkqZnh2Hp[3k,P)[InM*w/52c9MG5ăU")P86%FRVZyLf5gw+baVYTg7.Ndhc..[1aB-^Fr%)9T7?elWBJS*M3ZAIZ:XQTSbăU"]lDkm9y-IXGa*VqoAIin3nt-l5Id(i)bw487Pv$UhB8WYtu,PGn/0l9Nk\bqwtIăU"?ocQNMMAi6#.>$do=i^a^TE0'\lQNNV.xwhCViunOBnS0Uo.*s$4W_&a*R-t.mMăU"T57lJUF*Pn8j6bUK'59FW1HJ9QK/c'*r9>nU9TCk-hfbEcRiCWIWG&[#IhI#05EăU"kOqw:Ni(>5oH06[=OjBM23C_cKdvKSBo-aCQTB)=/:&-2-^(#z4,g'f)WZP4pIKăU".*pv)%(+(W^8DG1T8_j%.3;SUi$Rv>&4,m)^*aJG2$Ev7acXasHGg<,.Q\RtpR<ăU"S3dRBWnCPbfSAqn8na*PNZjoO[?F8$(M38,p,*>F0K&<,eN*DLHlw*J/q^6]p-*ăU"\a_j\I()'TD$-U4bcF;1u.iOoN8%KWgE+xAwF%,)]S*BpQ*xO[#h\s]3=(_j3n0ăU"Mt>P#Q*XU^1]A,[:S^OzX4.,q$$\<ZO-qfh&M[O6+fyXeDe1'iQpXq4[&I_F.)hăU"Z),vdY-dEZ0pp8_r/A<h9T'iBS8[J#KV$Q0\[dB><jIrOVC_ToCl+-uRprv[Bn3ăU"]0CJ91<*)RBR'5X>#]G$-4S4hX2<ppt$JpK$G=bNC0a3oac^9L'OY25<g/Ek#lbăU"*u#e9$N4-gBBQDU)\s2QD+VOlLpT7I1ABj\F*xI6qF#9qFcTaaPeCiH5xPCrqY7ăU"R#_-KIFvc*li>eF=DH>(ndYA*i+AY1V:$Xo^]h/,6gWL.t8U;2WgnnW<eKr)+s$ăU"=Co,tA;H:B-F28y<v\_j*moC;ol77<6ho(JVGFKLGZ(o8]Hojk)$#[c*9ms:M8tăU";S\ItQHJeosr'K]k=]iR1=G6JGg>p$N8\X/8LOMvWYX#S,N6?bjfdTsf4+bb2$$ăU"5)G]dI=-/pi/Of>&h_KpSLaTQ;;kEhES\tZh2q+\A)0AYBV-2>3<+PQ#Hpx\tobăU"8k\ntho)%H)N$P;=z.g<P+fnC0GD>0B1E.5Cc*GteZ+l5b5/G[c+k.iWJdwgn:^ăU"w&DZLp&0CDlbke2*,R(Bbt(.BH*U#t(_y=y/Bg%tk0cou]Gt4zRiesiL?HRK'NkăU"Lu*_wl.FXRmEsS)j$*4v-O$$]9k.Lz-)hV/8Ovk&;.Q^,noPk%D$xT12Y2q=\W-ăU"_MoqGBZOhd2%K%^fqsyKb<QJ;hB.Wo>yHAhOS<BgJ)BL1%zh7\3=Dk_:)K+Uc)qăU"wm_L'TRWPcoxD(3/&iHB[SO>V8Xoa2iGGIMRt\Uz0cQs'C(_EhU>iPR5MCXs8&lăU">,]s4?&8r:e42O9'vMS=J>cnnIvXa8FuZL?tSLr6MLsOP&XBed/lN/^G7'mf$f=ăU"5^ckOHel%m1tf..5gyJ7$4lqmeL<,h3ZJ8+(JKz#DnKL',_M\_E-v]Q:_&Pz._zăU"c&nTtd7H:qJf8gnt^)P^q&1(QM#\D(nh#9UEi=kv,XS=UC#3U5MoDh4I:<#nxU)ăU"qjO#QCZMFF:+Ie2TUN$xp]b6&^zpk,_<S37aOE:fR6v:,n,0^mHYqF+#&b6KTESăU"Gbe#8(0rOdcF[C9/s^wg6SCBamNY/tlR\pdT:MXID9UP&DhL;FY<$(4vpTRC;?oăU"X__,R;+duO[4XFSZX[6JQdXw$/+#$cA1te)+<5zF;_W2;KrBpZg5,nW4oh?*[6VăU"DfR/zO]iBoaIN;O=YJ)lVVz^(86'C1B*+n0^,rgiD4*U#Y-2?d:68siIOE*W<eAăU"jkFJ+&nhMzv'$Pk$MB^C?<k&<na2c5,25odS7V^.a]QZGH^ApC?vbUXAnVcG3%EăU"=y#2t*ryL;.8,bg_/\Ci0^tgJ2A/?nuG_'K<IFX<NT_\+-+lt\ih:iqhzGe=6q(ăU"1PWX6Yq,>fjufLt?nZinBD7:-$PcaC,15vteK\]7*Ka-usLTP^Zhl1<-#Ljk.+kăU"qhB'b>[lk\O$/WW_)XRQ=*q^?uC86,nt3Kb[N7FFf1[Xh2EZX?f*Ylar0lK$Hk\ăU"in=N0wdCp75?i(.t>9&nXPj[<sCYB>%\mPdLbrocsc-lKw4KVT7%\.R7WC)0s1kăU")yn\O<]Yj^W<htbPbV<fT-(Eq3my8zliWUY%1/Lray:._asJ_b-q5-QTcLcHK<TăU"GLbn?cXfL..)DBSf3O;)[cn2-cB_$aE9JV6eolc]joY(wX*pB%u1%]PF#\Hw>ziăU"MoGPnIG]ORgs(WxU(exTfOkbf;SlbeO0spVn\fq6C^Dh%v8Z%OF;V\<YbT(jFM=ăU"P$L<uRpYvm;/\eAUwh4AY?t=TBt:h.QJ&yX4;-=>4?bu73JRQOAwmm4Xi>]=\i8ăU"2Ro.YS=D]<>Q7I?(Rwhq66BCwDfs8u2c0<2KIL,uUWT3HdoSNfNknAA2^qULM.văU"3wrTiabK<?WIp3^qHK.Aq>?1-P^>,cgMjrNy]*6eBGD93H$xqNV4tBH>npI>ok8ăU"PVPuZ3I<N*,mQiNSu'Le1t6;4Lr_*yL:?08J/kA7bW[\<oZab0p'0aH\$y,E&dqăU"7L6XAG6bAANcM#GLHjX_VO7P3ljT1ts>nPPZ$6R>s5Nqb#S5fX6aL.\ajVwXq>KăU"iG&7Wv\CEa;0gT+?mMKSK#^hpc)6Yb'nC.h+HnNUaJ/1Q>[1j(Zfv?Q5A$)$j/0ăU">nxt?l/gt)TWYS0w[XooO-6eRoQ7Q=oh.B[OS?ZK)*h/jJtop;,8h+YmnMy6MChăU"4z%?#eOo/AqR3tF4*=HgGJ:L(Q6d,zYV[)4UfD7\q6k#bzk3Z.Hws:YZV&HGN1[ăU"iwU+5R[ZqfH;dB?4TYv08Q,MDIyu(gVt50TKl;Z88)6\T04_f<QuG6YM&.X.mUrăU"-S3:R9OLZ*Hg'NR$h9b6T'$W5tYAbaL8_p/d^--w?T81Ca>RkBY],rJVFWFq,:tăU"8$%h<M<#7IPCG1<<'4eA6^HE8.pKp7?RE3No9C+$q1zEug%f)/]vTBH#%;$ZPM+ăU"gs;)^:]*irKBH(#yA<TeqOUPinDL*P4'6&x1)(RHPVx5*58P\kCiYldn-5Y$K?RăU"#Jk0i=z%Z#E-Iau^Bh0&S$nrMdQOSOQ0Qc'u&qmabFCWo3ijiP*\,pp7P&-wM?lăU"#4PHaLn\^l=&W2de%wBdEN[c5j$Yqh:*Vn'X_n^%j*YvF0:(,4Ccu?w4.vH$7R\ăU"QyP\FJED,CDKWJ5RJ0-g%J(oD1Vptgrj,K1hTU*-$cpTPTu;QM^Qan^\G:M$9pKăU"2p;y1[%6qU2Ie-.U>)JkM9z](FI_cLqfCudxj[S-CTey7c#tpTt-n1R'Y,88sZvăU"fMK^NVNr<:KSWcdKam6W[hcFPTT+XO.$dr,FVb?8Po8V3&TQD0$lhajj)1g#<GvăU"_#=Rj/ealT9DNm'_i(J52+g9un(6tN#xBGDm5M+/pJd-nSM/GM$zh^*MObuV:huăU"JQ\_F9mXj,kCYMvdQsr$O]LwC3\mAV/?umC_:wBKiV5kr=-AG2PI&gQl4CYGhO^ăU"HDZ2K58+R:pmG-_7?Z#skCQ60lRthcgH9$/3W.<&Fq.zp8^2[D5:PZ<Hpc#'N/ZăU"+tDn0niJ4?lUV:Oa?Bh:rsOv](_2c<>f_wIP0;tUdg3/3Q>aHK98NUWn)kTeRnhăU".\p<<NIQEL02Gmk(*]92x_.k45ul67IPmB?=DZ.?+d3bEW87n.78'iPq,vN6t.KăU"p0SbCC;]EkIpJ7ExAb,VX=aDlHpyO=FxeR)8*QNB'8Gp4H#e/Tb/^s^87:IC)lIăU"[?dMqLbBTC#L_rl-'FY/d'<\;6p]2[qZneLSA36rqLhbcAU$G=A3tf,&P8OIpJAăU"De^jTBd6u.\C58'?Xla*v;k.V(aED)f6fP=TRF<g(S^*m-MTUVSNr:_LSDV&iJ,ăU"znY#F]Z)+R04+20aA*/p]5BA(2BEuooHw[Z??-6uZ$J^2yw,ZLsg\OeF3R'Wu.OăU"AnnI:A+p,ZZEW#-G)qe[X/KF)tHF&RO?l/<3D7Nx_;jlcC+(Vs4VbpwDXamx4.qăU"mJ:7CB&'*w33Uq^FZN2G$LCif6J2^dbu]Jk^ky<ZgcDb>]tTLDuqfcMSUVn''NWăEND SUBăSUB VBăU"gak;pse<RXlU(O,%3*#KhV2hxj)gPt__*M?-v[Sp9Oh4WYPBb#NijpZB'J4Y^:%ăU"0aWX[te=4p>rkpu<;;LA(GrvdPO1ruvL396T'>hr]d)10U,H6?rzg5mQdqb&IE<ăU"5FxEhvcqOs5?ZbH9X/DHBE.-N]BDrY-Lq0kL=>j,5+Dzo];18hbwQ:9TQd>R0ajăU"5)5uaSR[lFtKp,NAIdCYj/bhw6G&NbkJG91,J5gmHY?W[hl\^&*19DiCj[C'lS?ăU"*Yl;6/6:HIZ4&Ga%quedLmXI=?kh./s#yc6%$90TaY<?ZP]OQc>\CT(J\d$>%GlăU"_V6?(?RdY.e1N2k[zbrI6h*5yGM*Jy)7uj4Zuq%wV9,vQaV>GY+B/Ld1xHhbTuQăU"HE'-[[+(]0HY]:aBf-j\DjRup;zA8*tlaXfN9O8TQ#+ZWX8,8**ygykY7Mj\qNQăU"uAU.6BKIv&rcuzO\q].&wBq.37mv'PCO*P2Fuo0Y5babLDddXVyw$PdtFOdTQzBăU"#e9?rk#DaNwFt%RdOtERUJhZrNuva'E=uHaCer#+bu8THA^X9%,G^x-,<rhQj3căU"T'#8D[(hgTM(r^tL'60q2zPrIPC]F:n0C]KRbH99(6l#R5to,XYtSXIT:nOq_VJăU"j$J=6#TD*mKqDiu8L3/ygC76nD<5S:F2uJ&.E*p9aj9V#9IXn,9uYuN\I:bJeu)ăU"(^s\f7Wc;U*U1Vl+Li8r:EOlwrfVr&bzKrFG8nC#S&&t+\Os$.8mb#_%dj9eGGqăU"_T9#tul+0dEb*(Z#P=I'-5O2kB6ECFhi[8SB6qu\<nOb8[-l<at5638jSiR?i\aăU"J3mzu+/JMJZjk(7_*0I(d24X\I%KDd*W5eJI#Fc,kJFVIyTN-'%D97TPSFc+=*\ăU"N.G]hu6i1[l-8$Oz(h;rG-$;YaZy(\3W$99L%-b-]xvVTCKKTEWsRZYaa:RMSggăU"OT&;J(VHtBIkHg.OA#K#q+_]N7p&PH0%h>7IaB<y]f'WM]R_/V/-S9$^wo<xcaDăU"26&G$BnFlFt;P263?P3-[e_<+)Weh1eeG'iGnpf6VO)F]pJ;=L(Yl<uRf_z>1KLăU"v-BRt(0Xc70ii6]^e#:ThQ$:H>6LQgCay<6ddpDj-_Wo'O[#Bmr4iLuDY451jvgăU"]:lHXi]GnsbU#to5Ot/j=^+vjD<:l-G5gk-$5lqxrnw',EY$<pk%Pp9bYnMBs<RăU",a?JihFQq=J.x2c*WAX/6M95apKZSrrq%h;b$P/k1ngUh/N0hcj-CU^k+NP_t)săU"#wMjzXt/lJGOxBXKVU9jcd&S/:-nn6^YnC=^z?SpCt#p$VlpGinR]r>OkD?jS'1ăU"_'nzQ<W1(-3s^YacA^BESiUtAHW#Q3ViY^]_Z=#<;(E9Fa/sS-S<aZ5(29J0s0băU"&C>jEx?4\\C.ZIp3bwY\Fc0(\W:\/Yh,&+;E-+)]&jxaP9UG6s\8_7^BX4*<SFiăU"$G(\hG>%%4vm?cN.'/f]yIDBo6\Ae_u4RUHHhNTML\E'dVe^/rOWE7wkWt1K/Z+ăU"pT,E^U>sF[l,O+tOwr.h,jf4(L>*nI2/ckK7dt[kwh+leTF>52/pQ-7*^MJ+oL5ăU"%a'$G]FcjN+jD5,MKAuj#pOgikL,c:3_89GID%Noego[[f_Q+=J-+3wUYyDCZYhăU"3N#r_jI5LTpU0_'9A?x;uJBuoR/2[Q,mbNt&.76]k)A5ODD$#aGI_PF'H8A*nX>ăU"NLu7<Wog[i/i<i#+$DdgD\TSnN1(3f#LHB;S>v9]JQs>9j2El3ZOI3LKA=K-9gnăU"Z(kbv2Au^D?.tt)m#K'dlU1b-+/KVI?W<AY,Kr0J)7P6iBOtYt7Z&IJ)RFBPyMgăU"&0iU\UcWQ3L\gMz+qgW[>_xE'C2L6M_0dn9Te-Mat1)^8B//WeUi8;LpDVYF2)'ăU"<Dna>evMp/0Sf?UoW0ASmKbMw(VN&P0nSD4Q'&9[H;6:v0tlJ7Jdwp2<SL5/hkbăU"UOI:.:jTEci82LqGy,h72cN_3#bW8b#rdA2dMPuZPwtbI9c7EbOsej$?Qi/xPIhăU"nF2+61W1h9xViGCpUo86Lj)YR9]_7ibhEBe+0uu-HM7yq$m=Mi[5X0cu4a&&cDFăU"jgPWH-guohZ;;e)J9gcXA1*\nI;sz1VJ,z'[j2b>&4]U0:2Aiy%FkkrE*)_?L'kăU"WoUT_mV/knQ]GULSiBkx/%Qi3Xn:-5DeR>hOew;p.UPAM,w\AIw0L[UCn(+8kgVăU"n%uD)*?0Ca<DTa/;Bln/t*\ci,<Igh4&p5:9Wo0:Z?YO?pA<^9PvAG9F>UfI?)/ăU"ia9g6X*7rXCmk2m,11%GjSSKpct\<(c2JnqpM4g4g<RQTe]6t;.**ggM:TPLY13ăU"mEp#n-KJ)G6x:)97x9jnVUdQE\Q;&PgXSU4#4tb3sMK6lslme[,l,hAC+#R=A#iăU"&X>dNOEx(swtI9\r:%lnI8afF'W\=8rJQ\T$J\:]3<uz5yiH2Va>HG[]X+WF/2zăU"kle)/V(b8EZ#KV>#?0ns^[i4JriccG'rh_#5e0A,lD8-n+hU.^otL**&B<K5Dg>ăU"4k+r^owS8Lu$RNbk$G4q_iCsX;6ho71W_)i)n1xAkn9Z%43U#3+;9lwWZH8O'l>ăU"CEZVPp*lle#](\9cbqc,a)Ao(T/i]B;>gCHX7ERMpFVA1YvAyc,+rf=IPS&,WxIăU"_?I6l<tL[o1(v2;svQ\0947Nh3I2mP9FZeQ2?b&9Yt7KP=o6#B3bGAi972$.ElwăU"d&8T$m>w[ftZ(Jsqct'S]kI=4'.F/*4WouB$#,kfg+Lvj2;t&)zm),mQFV&IA<4ăU"Y9t>,+bIQ8,ZO+V=GzY\po/f)wZKa*Q0;$(-#3?f^Y$heQ=$E1hjE?)0>)I$988ăU"Z5,XR[B_DuHB>gHW(R7yRril+lhAvAC9B.HH??flf3?KE6#oNI&l_n\_4N:3SJ#ăU"KuJ%:DPQwu<3*/ho=KiGREM%sX#U=IjABMYMt#^F(IYRFS;VS,.WIB.g2Mo6^X)ăU"fL'b%sbpq-G$>om>vJS5]G#2&+F/Nsl&W)$#yq0)/:.(JKdO2[cFNUFnH:9FgmtăU"zXVi=p9'/MT1oN:[eH'c/F/Tu7-$dsd^(Nw\_9J'Y:j-,wKJ%=v'Dj2yHw.s_AtăU"9h.b/h0d/L*8j#bsk#9^b8ub(J'9O8pB&;+\:A;i7FH_rx&mG%)w69rkLOUUT'+ăU"avHocPFYgdgu6=+[p&8bPenW[)oyfx\lGYpV,T'KX9iGJDm&y-Ha9#pD#+<&2[9ăU"o9N0e$Z]9L<*MjSnKHlap9UsaCHRbSc-=YWS-bm^KPgJ=sWbgs05?Aq1]o/XmGbăU"*QiZ.TD5;,:rmVAIb$mKhGm]uh9.K]vyCgQ%lG+C/Jizgn<2$:-uhH9Lv4ecoIZăU"R^fKpjbEu+YeNJwxfn)*[g5*-d4+#<8=[ssX?p.bI=&qxyeMR?;GfUwLC)d(kf>ăU"O#L<Q..U(zOb25lnFKbo.,dpKT6Eqj1Nqk3'SgAp_h0oV11aI7rq9Q,^Te?7tEVăU"Ti[xqbn)TqiS1pqHPU]L+YN8]ZdI1I2;D<D:zh&OP+oP8]%ZIRBmv[]n>Os[$lBăU"LnB0yS]5D/[#1+KA)Oj,:TH:7yAU6;>dTgC7N17&XjRn7X'YKZdg^eXHf:5f[a?ăU"hch0H$CTM7E,1k<G>g&N7LX^o>=bF.t8:fa<v:E6[>+ch6:fPkV:FU=hc;^ku;IăU"0I7tX>InRMT?Q?PE_0r=)L8oaNW\YlD1)^$LLd#^kO2V>LIJ8:WUxXE.770qoaIăU"M9tm(63^lU^)\MzjzehgnK]ee^Hp::.fiFn5qi6kxXjAL>.Fo=Z/Get^F1XcrWQăU"gdHSmH^/^*o2Tra9=h[V(w^dO>%n&tn7O'+0X'(bo[ooFHCng+apk%hdA,Lp-^=ăU"djX+sllK[?naO5M=gl^9oA$>C8#ZRxBz?:\'hb2$[%6<%63)MPO.kr&kiX#SC;5ăU"W#$[dq<GwRbE0T_M?Bq7v^ZcdYiF\aWa'm0LPt]e7+7i2mAQ<>(;gMu(JtTtRabăU"GaNqEE;JU\Y>gV&&UTaPUJj3+hdQ)mA=e0qrLD7.pO\;I2Ssw3Q\6H>3ZfHijn?ăU",uGJ1IlhmM3*,?]CIHUCtHR6Xg_iTv.7W\Y/#&[ZwJf,o2=41I=5akcp:^b^9*?ăU"0JLkP2?#g0bXq&[()vZ=h5/JF-61a^cBU:hKQ83n?WEweq.ECZ4,R[Y5,bxC8SCăU"4teU=ABO2N]GbrMM<%1zz/8ip<D&P$C,$w&7u-BBOG+h^x>8(F8ad/]05;c_J]dăU"Y1u2sT;lK[$*'Zi=;vM4grq+rA)a*q>UsDancC)gwV45j3^V\jGZKbl'9xiHh98ăU"r<Y2WF+x^X>dLhf^bVc1aN/63S%gdP4)0nYbJLk/JWq-oJ&8)=DATmTHkF?sI2FăU"h%>Eu%_h.vFcpj6EyZ5&b.(ul;^+o(oX:_Z+jkBBbX=/VGAD9n)WF&HW_%Od&7-ăU"[.4mH#3q4f.*C*y<2u_J>J^n>dlhj]c*cyUF.5h-q*6A9d8T7leQzd(1ex*U_VpăU"dT8t/MQ.JS:JNq]R27qqMYo1hxGur.rYSMYP6&0TXtK4;;qi'SxC],Q^4&sWR[aăU"Z/jdY/e0:2Aie;mqvWb*D#;x#m$>k4)d\utg%=eDOaCj##P&u3M;JQ&&kp4i7%eăU"a6Xj<KO312:BnNZ,(^fZS;JYK^\e:8-Fb?'JC&FhJIB9dGo6,7<?MNO*U<w>xjxăU"C2YA]P9NRQlemQo<78Od]%9(tQdNj:nu1XT,pNix=OShS)qU3HA3l.9S%Pf/5y'ăU"a[oBg)hEb]:r((t6>4hCfssGkmN-V/P.A<DQCgpLE0%uX>]x%u^irC#Sa'PouTwăU"%vGv0U)5i2<#ioKt&s6R&-Nn%,yi12z.j]kdC&Y209Vcv>Uq7dmkr?C,)n,%qugăU"RzH/.t$=:&po^S,)Gm889r%o5/4KSJEnjzB(X?guredYRt30mY5x%,-/?wnk]b%ăU"<%m2Oc8e5aJih\,OT3%v7:*+->\yF9/q]68KWW(4xDA]:%Bhm*9G8eu/\PaHOA*ăU"P1Lo^[,8/,>\7uK&wRQjS7zm*zRjc:S#Bpn4?Ws)oCln1H-#DIJH^QREMZms/#%ăU"YHR8:t4%?IbP8VhPjt#6gw]5>Qv)^iT%t=lWa2GHgy<2,Aa'C2$W'&fK&Sg</obăU")tY=K6PZdr]X7U$qqCTDCs7C=N:aHIr'7#$'2j)dv/%^'mq&,_MKTY6xjb.YJ-.ăU"/c5C;rY+L)?-SBbZPobc^F')(<>e]JIOGesB]f)'hQo<JF[o5F=8N(JPqhUq-K-ăU"7H:%-\WK2kgs[=KInz9OXZZSm6\6X/:b#$'Fr]L*2BSub/[cVp<DL85l.hA\tTAăU"NYFL3s86q,y(*#n>7wp)]Sh&/^2UM:hj?gbAY':ME?xi^C?2G&LRlm*qYLoqKRGăU"\k94RkJ]Bs_'JZ,6Vvldg#+_rX93aKKcn<mZj<m*D>O1D_5CV<TGPPUcvXb?SA<ăU"^VI)<4m,_SjPVxz.J0?6o0$&#OqN\ug<,J904NR:gflguKB-YSq<Y?#f9DQe--<ăU"?LdFK-q.g^/12t??xx$/YThwTg?uj<YtE?^7]kMNj)0r&c>($n:cb#dY76SHl^1ăU"L5cf5yNpDMNW)#_FVx#-tJilj7\kYx&G+q3x0#IX'P?Oy?uX6D]DD^+N0+t5nVxăU"?-qfS%-X5ElS:8POm?nbN7,GzB:Dk^VPbl$']PT<8K#$YIhU5lASmMQ(g)<eouZăU"P\T8:l;.q0?M\SIIH:m^U3/>-YWk*<,o#C8A('t$oj3OxNU7n%dJAWoUvNKmpg<ăU"g9qhG)v./230>PhQa/A'm3oX]'r]$#$K;yUTi3dwJY6CQ6[?:Di]d$BTQ5VIPtGăU"\-UV+vTB$KuH[(M81GNLY,Ls^2VO*4(WO>eJ[iFGu2d_ga$T_5(cRHrN.Xq_iEQăU"5:Mi&c2VILYk?ERY-Rei<<RZgAM3)3\;h^c0SKWG'Gm/J+[[?4hIH.m1(x?Xal:ăU"G\s7(<voT_icjV4x?]aLwC14%qSVrMed[7ShsOiB%:ao%ti&(hDX$6DP2.V9&V4ăU"qKUh1^-mms5qn+cVF<K(M89<2qiJ/jdBgmEiFA$QG9i8<\r850XHImA\7a\Q<v[ăU"-w-w//V#DaFMA4MSBDPKHEM&,qN.U;'N>'>XmR;O9,,E0JLVcwnhbx[n_:6CT:&ăU"3b;x#d%6K.&c5#VKmu[qEBHU'&nhJuNS9AhmlK72_eH(jqf,c536ovEOI3kJDI(ăU"^g[?HU+R9(R5>n5s>JsjyqwK_8Q9oR9=ZaM('O^aDVub^09HaMbef]c#iO1u+ULăU"XX30pELN;lXiL(a:u[li=B[Lu3j$jMpr-8a<1CY>%,=9YKo[27J]VPVqKmB0M5jăU"apN''M6j6q*tNAuBwvJLSRvF1<i?tM&hpB+8^V(L=CB*0%9P3hOtFc7TbD<cgx9ăU">v8pV9?DW^hPDDjo54;i=t11DXrqpa=G<a\RQ6ct#uqhsWMKH>jP=3$)r+Un/WPăU"Hq0mCyCZ%)R9Sc=klE?]J*dO:N>NNVIBYga(jYi%u/uKpXTXaDhRw1E<x7qVTC,ăU"EQm=^:k?WAsp.2/NsBh)4>ad9tO^wQv+Zs=X2xA1j>CDuiGq]Ia5h*Kf<hHiGPnăU"lV?_V7r-.pxQpPcn/IBx+8XPGE_j>/8W*>m4P#=tTse&M/C6pBR_;D>-btl*/%hăU"5:C/6]6KPA(bwAtriB5t<bfsTSKdYNlvJD&\,Uz:;io(*aTkO'7-a*BkiCC$W$JăU"8R4<RYT_R.k#Ppw)p9YdCLffF?#R0u$z&sLnfhnhuuaBhD-kstoT'g;b-u6qeY&ăU"3J-Ar,[rO]s>K0C2X4WmwDa9aTKBn,mu*a[M_?VBMK)f[Pc2dSY>.]V/leQ-w5^ăU"XYW8h,L,,HH7cL'6Ub^u3F9N%\\5s^S6t_Od)H&4pu6E(e[qB*HRkl<3n#bUr?căU"Q#mb*cQi3FR]R67O+s,Qn*w+jlFPlbLR2ArF]=Jm>6dVSvmdCunc1fk_ytkkUI+ăU"^onF.pYF,romg:qWa4fj5#T;'bEI+k\aolXX=?jZ9(+pTY#a,Ojt'0XKbHR6YqNăU"-#b/EB)F)4N?oE3IFg<DCp^JB$BFQVHd:UZ,ff6C?#GTSvrYzR?1DP%Trp]c9-FăU"+W^c[PfKbpDsxEc?eB6k%)?-mUAP;Tu16GO;rd)=4W_,:lk(9rPgmORto-HMg,ZăU"q0aO,7nKgFhk?hXqXhh-HLIdn0\;)d*Gx*<;?G6oU.W2Hvd8_ht?<2AT'3\kKPUăU"5)[4a]:#\I]ZO'FmYP>)^:t(QQ3EOdVPJX(w]85FxW71?oLF5LrrktfilQF5)r$ăU"Qn4lZm1i^I^pI-0?XrNd*V,JwX(5FTn398?/'>-?Sz1NK5:dmb70qfgTa'qbhnkăU"nvC&Fg3(Q_PT,xFT\Xw<F2,ZZxj9Op4+]B&bnb<sVPZ:rJ.f;2N_/p/)xDA_T0IăU"A.F]B^UKg^N%zt#T7khS7+6Uod*db0g_$n)pd?l=yWZMuqxxv%Dup&%'9%9%%'%ăU"-[%qNu%IH)\,*('%+%q)%%%/%%%%%%%%%&%E%%%%%%%%%h%truf#ySy'%yup&%'ăU"9%9%%'%-a%FNu:Iyku*;S#%4%e6%%%/%%%%%%%%%&%E[%%%P#'%%%%yuqf%xSgfăU"%xup&%'9%9%%'%-^%(Fu:IVh?'[l:%%%^j%%%0%%%%%%%%%&%E#%%%R#C%%%.unăU"%n(j&Sg%fxup%&'9%%9%'%7-%<#fuIkXEo';LR%%nR%%%1%%%%%%%%%%%%E%%%'ăU"lX%%%yxyu#xyw((S%un%up&'%9%9%%'%-%8FLuIphz]/)bF%%*nR%%%/%%%%%%%ăU"%%%%E%[%%X*%%%wz%kkqj(S%un%up&'%9%9%%'%-%7,MuI)SLfk*VF%%*nR%%%-ăU"%%%%%%%%%%%E%7%%gM%&%qf#hjS%%unup%*+%%%%%+%%+%v&R%%jo%&%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăVBăCLOSE:IF S=161AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               TEXT PLASMA IMAGE VIEWER V.330 zapf_dingbat@juno.com          07-28-98 (06:43)       QB, PDS                476  16999    TPIVIEW.BAS ' * YOU MUST LOAD QuickBASIC 4.X WITH /L/AH TO USE THIS PROGRAM *ă' * (This code should be BASIC Professional Development System 7.1 / VBDOSă' * (compatible.)  If you can use this read all the comments before running *ă' * Will run under windows, in full screen only. Windows may not emulate textă' * mode correctly so you might have to increase the Vertical Retrace Delay.ă' * read internal help for instructions..ă'ă' -----Compilation for maximum speed is optional, but recommended!ă' (after testing)  Have a clear line of sight to 'The Great Whiteă' Throne' Handy. >:]ă'ă' This first appeared in the July ABC packet (07/98) / Month of publication.ă'ă' Text Plasma Image Viewer - Version .330 (you must have Text Plasma 2.6010áă' to create Text Plasma Image files <TPI files>)ă'ă' Features:ă' o All 64 palette colors are used (text mode has 64 usable colors).ă' o WOW ! The Palette can slide, to you or way from you !ă' o You can adjust the Vertical Retrace Delay. !ă' o New palette creation for, using the same palette routines ină'   Text Plasma 2.6010á. (can't be saved back to disk.)ă'ă' See the internal help...by typing 'TPIVIEW' (if compiled) !ă'ă' Bugs: `The Black Screen of Death' most common during new paletteă'       generation (number overflow). I need to reduce some numbers.ă'       If you in DOS just type 'MODE CO80' to return to normal.ă'       In windows DOS shell you'll might need to press any key.ă'ă' Note: Errors aren't trapped yet, and this program verifies that the fileă'       is a true TPI file and due to user error can create a null file.ă'       (Normally that null file is destroyed.) You might run out ofă'       space to open new files. Failures during loading can causeă'       `The Black Screen of Death'. The correct file size for a Textă'       Plasma Image file is 32,776 bytes. Any size below this indicatesă'       a save failure...and the program automatically kills the file.ă'ă' Disclamer: I hearby disclaim all warranties to the fitness of thisă'            program - I cannot be held liable for unpredicted eventsă'            that may happen while you used the revised version ofă'            Text Plasma. I have tested this on 2 computers and ită'            works, although I will not (cannot) guaranteeă'            functionality under your computer system's environment.ă'ă' Text Plasma Image Viewer - Version .330 (beta) byă' Zapf_DingBat@JUNO.COM (It's my Email address) It's ok to write...ăăDEFINT A-ZăDECLARE FUNCTION Monitor% (VSSegment)ăDECLARE FUNCTION VerifyTPIHeader (NAME$, RETPIHEAD$)ăDECLARE SUB ColorSelect ()ăDECLARE SUB Delay (Period!)ăDECLARE SUB Help ()ăDECLARE SUB LoadTPIFile (NAME$)ăDECLARE SUB STDOUT (MESSAGETEXT$)ăDECLARE SUB PalGet (col%, R%, G%, B%)ăDECLARE SUB PalSet (col%, R%, G%, B%)ăă'REGTYPE.BAS - Include file for CALL INTERRUPT & CALL INTERRUPTXăTYPE RegTypeă  AX    AS INTEGERă  BX    AS INTEGERă  CX    AS INTEGERă  DX    AS INTEGERă  BP    AS INTEGERă  SI    AS INTEGERă  DI    AS INTEGERă  flags AS INTEGERă  DS    AS INTEGERă  ES    AS INTEGERăEND TYPEăă' don't change the constants !ăCONST TRUE = -1, FALSE = 0, SAVEINCMPLT = -2ăCONST TPIHeader$ = "Text Plasma 2.40á - SnapShot Format Version .01á /TrueName:"ăCONST Extension$ = ".TPI", TPIVIEWVersion$ = "Text Plasma Image Viewer - Version .330"ăDIM SHARED Registers AS RegTypeăDIM SHARED CurrentPalR(0 TO 63), CurrentPalG(0 TO 63), CurrentPalB(0 TO 63)ăDIM SHARED XRed(0 TO 63), XGrn(0 TO 63), XBlu(0 TO 63), PalSlide, Backwardsăă'set variable defaultsăPalSlide = FALSE: Backwards = FALSE 'Default no Pal Sliding, rotation in Forward directionăRetraceDelay = 1 'Loop begins at Zero so this is two cyclesăă'test for helpăIF COMMAND$ = "" OR COMMAND$ = "?" OR COMMAND$ = "/?" THEN Helpă'test video capabilityăSELECT CASE Monitor%(SSeg)ă       CASE 4, 5ă           FOR CurPalSave = 0 TO 63 'save user's text mode paletteă              PalGet CurPalSave, XRS, XGS, XBSă              CurrentPalR(CurPalSave) = XRS: CurrentPalG(CurPalSave) = XGSă              CurrentPalB(CurPalSave) = XBSă           NEXT CurPalSaveă       CASE ELSEă           STDOUT "VGA or EGA Graphics adapter is required to view Text Plasma Images." + CHR$(10) + CHR$(13)ă           ENDăEND SELECTăăSTDOUT TPIVIEWVersion$ + CHR$(10) + CHR$(13) + CHR$(10)ăFileNameTest = VerifyTPIHeader(COMMAND$, ReturnedHEADER$)ăSELECT CASE FileNameTestă   CASE FALSEă      STDOUT COMMAND$ + CHR$(10) + CHR$(13)ă      STDOUT "That wasn't a Text Plasma Image File." + CHR$(10) + CHR$(13)ă      GOTO Termă   CASE TRUEă      IF LEN(COMMAND$) >= 49 THENă         STDOUT COMMAND$ + CHR$(10) + CHR$(13)ă         STDOUT "is a Text Plasma Image File." + CHR$(10) + CHR$(13)ă      ELSEă         STDOUT COMMAND$ + CHR$(32) + "is a Text Plasma Image File." + CHR$(10) + CHR$(13)ă      END IFă      STDOUT "Header: " + ReturnedHEADER$ + CHR$(10) + CHR$(13)ă      Delay 3ă   CASE SAVEINCMPLTă      IF LEN(COMMAND$) >= 18 THENă         STDOUT COMMAND$ + CHR$(10) + CHR$(13)ă         STDOUT "had a proper TPI File Header, but wasn't saved properly." + CHR$(10) + CHR$(13)ă      ELSEă         STDOUT COMMAND$ + CHR$(32) + "had a proper TPI File Header, but wasn't saved properly." + CHR$(10) + CHR$(13)ă      END IFă      STDOUT "File was deleted automatically...." + CHR$(10) + CHR$(13)ă      GOTO TermăEND SELECTăăLoadTPIFile COMMAND$ăăFOR XBP = 0 TO 3ăOUT 97, INP(97) OR &H3: OUT 67, 182ăOUT 66, 80: OUT 66, 5: FOR ZZZ! = 0 TO 300: NEXT ZZZ!ăOUT 97, INP(97) AND &HFCăDelay .11ăNEXT XBPăă'Seed the psuedo-random number generator with the current time.ăDEF SEG = &H40ăNewSeed& = PEEK(&H6C) + PEEK(&H6D) * 256& + PEEK(&H6E) * 65536ăDEF SEGăNewSeed# = NewSeed& * 64& ^ 4& ' convert to huge integerăRANDOMIZE NewSeed#ă     ăDOăă' Vertical retrace delayăFOR I = 0 TO RetraceDelayă WAIT &H3DA, 8, 8ă WAIT &H3DA, 8, 0ăNEXT Iăă'do palette sliding if enabledăIF PalSlide = TRUE THEN GOSUB MovePaletteăă    XXXX$ = UCASE$(INKEY$)ă    IF XXXX$ = CHR$(27) THEN 'Exită        EXIT DOă    END IFă    IF XXXX$ = CHR$(43) THEN 'Set rate of Retrace Delay, MORE WAITINGă       RetraceDelay = RetraceDelay + 1ă       IF RetraceDelay >= 400 THEN RetraceDelay = 400ă    END IFă    IF XXXX$ = CHR$(45) THEN 'Set rate of Retrace Delay, LESS WAITINGă       RetraceDelay = RetraceDelay - 1ă       IF RetraceDelay <= 0 THEN RetraceDelay = 0ă    END IFă    IF XXXX$ = CHR$(66) THEN 'set direction of palette sliding,ă                             'Backwards = FALSE - forward rotationă                             'Backwards = TRUE - backward rotationă       Backwards = NOT Backwardsă       'write colors again to prevent replicative fadingă       FOR ColorWrite = 0 TO 63ă        PalSet ColorWrite, XRed(ColorWrite), XGrn(ColorWrite), XBlu(ColorWrite)ă       NEXT ColorWriteă    END IFă    IF XXXX$ = CHR$(73) THEN 'Invert Paletteă       FOR IC = 0 TO 63ă        PalGet IC, Red, Green, Blueă        PalSet IC, NOT Red, NOT Green, NOT Blueă        'recapture palette for storageă        PalGet IC, Red, Green, Blueă        XRed(IC) = Red: XGrn(IC) = Green: XBlu(IC) = Blueă       NEXT ICă    END IFă    IF XXXX$ = CHR$(78) THEN 'New paletteă       ColoringMethod = INT(RND * 13)ă       'ColoringMethod = 13 'used for testingă       ColorSelectă    END IFă    IF XXXX$ = CHR$(80) THEN 'Palette sliding onă       PalSlide = NOT PalSlideă    END IFăăLOOPăă'set screen modeăRegisters.AX = &H3ăCALL InterruptX(&H10, Registers, Registers)ăRegisters.AX = &H1003 'turn blinking on !ăRegisters.BX = &H1ăCALL InterruptX(&H10, Registers, Registers)ăăTerm:ăFOR CurPalRest = 0 TO 63 'restore user's text mode paletteăPalSet CurPalRest, CurrentPalR(CurPalRest), CurrentPalG(CurPalRest), CurrentPalB(CurPalRest)ăNEXT CurPalRestăENDăăMovePalette:ăIF Backwards = FALSE THENă   PalGet 0, ored1%, ogrn1%, oblu1%ă   FOR t% = 0 TO 63  'This loop rotates the palette outward (forward).ă     PalGet t% + 1, Red%, Grn%, Blu%ă     PalSet t%, Red%, Grn%, Blu%ă   NEXT t%ă   PalSet 63, ored1%, ogrn1%, oblu1%ă ELSEă   PalGet 63, ored2%, ogrn2%, oblu2%ă   FOR t% = 62 TO 0 STEP -1 'This loop rotates the palette inward (Backward).ă       PalGet t%, Red%, Grn%, Blu%ă       PalSet t% + 1, Red%, Grn%, Blu%ă   NEXTă   PalSet 0, ored2%, ogrn2%, oblu2%ăEND IFăRETURNăăSUB ColorSelectăSELECT CASE ColoringMethodă  CASE IS = 0ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 63ă     PalSet I, I - R, I - G, I - Bă    NEXT Iă  CASE IS = 1ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 31ă     PalSet I, I * R, I * G, I * Bă    NEXT Iă    FOR I = 32 TO 63ă     PalSet I, (15 - I) * R, (15 - I) * G, (15 - I) * Bă    NEXT Iă  CASE IS = 2ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 31ă     PalSet I, (I / R) * 127, (I / G) * 127, (I / B) * 126ă    NEXT Iă    FOR I = 32 TO 63ă     PalSet I, ((15 - I) / R), ((15 - I) / G), ((15 - I) / B)ă    NEXT Iă  CASE IS = 3ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 31ă     PalSet I, (I / R), (I / G), (I / B)ă    NEXT Iă    FOR I = 32 TO 63ă     PalSet I, ((15 - I) / R) * 127, ((15 - I) / G) * 127, ((15 - I) / B) * 127ă    NEXT Iă  CASE IS = 4ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 31ă     PalSet I, (I / R) * 127, (I / G) * 127, (I / B) * 127ă    NEXT Iă    FOR I = 32 TO 63ă     PalSet I, ((15 - I) / R) * 127, ((15 - I) / G) * 127, ((15 - I) / B) * 127ă    NEXT Iă  CASE IS = 5ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 63ă     PalSet I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .11: G2 = (G + 1) * I ^ .22: B2 = (B + 1) * I ^ .33ă    NEXT Iă  CASE IS = 6ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 63ă     PalSet I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .22: G2 = (G + 1) * I ^ .33: B2 = (B + 1) * I ^ .11ă    NEXT Iă  CASE IS = 7ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 63ă     PalSet I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = (R + 1) * I ^ .33: G2 = (G + 1) * I ^ .11: B2 = (B + 1) * I ^ .22ă    NEXT Iă  CASE IS = 8ă   R = (RND * 63): G = (RND * 63): B = (RND * 63)ă    FOR I = 0 TO 63ă     PalSet I, INT(R + R2), INT(G + G2), INT(B + B2)ă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă    NEXT Iă  CASE IS = 9 'GRAY 1ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 63ă     PalSet I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 10 'GRAY 2ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 63ă     PalSet I, XC, XC, XCă     R2 = ((R + 1 + I) * .11) ^ 2: G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 11 'GRAY 3ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 63ă     PalSet I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)) ^ 2: B2 = ((B + 1 + I * .3))ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 12 'GRAY 4ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 63ă     PalSet I, XC, XC, XCă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3)) ^ 2ă     XC = INT(R2 + G2 + B2)ă    NEXT Iă  CASE IS = 13ă   R = (RND * 63): G = R: B = Ră    FOR I = 0 TO 63ă     PalSet I, XC \ 2, XC \ 4, XC \ 8ă     R2 = ((R + 1 + I) * .11): G2 = ((G + 1 + I * .59)): B2 = ((B + 1 + I * .3)) ^ 2ă     XC = INT(R2 + G2 + B2)ă    NEXT IăEND SELECTăă'capture new colors into arraryăFOR ColorCapture = 0 TO 63ă PalGet ColorCapture, XR, XG, XBă XRed(ColorCapture) = XR: XGrn(ColorCapture) = XG: XBlu(ColorCapture) = XBăNEXT ColorCaptureăEND SUBăăSUB Delay (Period!)ăBegin! = TIMERăDO UNTIL (TIMER - Begin! > Period!) OR (TIMER - Begin! < 0)ăLOOPăEND SUBăăSUB HelpăSTDOUT TPIVIEWVersion$ + CHR$(10) + CHR$(13)ăSTDOUT CHR$(10) + CHR$(13)ăSTDOUT "Purpose: Views images made with Text Plasma program." + CHR$(10) + CHR$(13)ăSTDOUT "Usage: TPIVIEW filename.ext" + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "Once a TPI file is loaded, you can use these functions." + CHR$(10) + CHR$(13) + CHR$(10)ăSTDOUT "Press N for a new fresh & zesty palette." + CHR$(10) + CHR$(13)ăSTDOUT "Press P to slide the current palette, default is off (toggle switch)." + CHR$(10) + CHR$(13)ăSTDOUT "Press B to slide the current backwards, default is forward (toggle switch)." + CHR$(10) + CHR$(13)ăSTDOUT "Press + to increase the Vertical Retrace Delay. (minimum 0)" + CHR$(10) + CHR$(13)ăSTDOUT "Press - to decrease the Vertical Retrace Delay. (maximum 400)" + CHR$(10) + CHR$(13)ăENDăEND SUBăăSUB LoadTPIFile (NAME$)ă'set screen modeăRegisters.AX = &H3ăCALL InterruptX(&H10, Registers, Registers)ăOUT &H3D4, 9: OUT &H3D5, 1  'Two Scan linesăRegisters.AX = &H1003 'turn blinking off !ăRegisters.BX = &H0ăCALL InterruptX(&H10, Registers, Registers)ăă' begin loading fileăOPEN NAME$ FOR BINARY AS #1ăSEEK #1, 73 'seek past headerăăRGB$ = SPACE$(3) 'load stored paletteăFOR LoadPalette = 0 TO 63 'load stored paletteăGET #1, , RGB$ăXRR$ = MID$(RGB$, 1, 1): XGR$ = MID$(RGB$, 2, 1): XBR$ = MID$(RGB$, 3, 1)ăIF XRR$ = "" THEN XRR$ = CHR$(0) 'quick way to get around that damn ASC bugăIF XGR$ = "" THEN XGR$ = CHR$(0) 'quick way to get around that damn ASC bugăIF XBR$ = "" THEN XBR$ = CHR$(0) 'quick way to get around that damn ASC bugăXRR = ASC(XRR$): XGR = ASC(XGR$): XBR = ASC(XBR$)ăPalSet LoadPalette, XRR, XGR, XBRăNEXT LoadPaletteăă'Load stored ScreenGarbageăGarbageFontBank$ = SPACE$(512)ăGET #1, , GarbageFontBank$ăRegisters.AX = &H1100 'AX tells call DOS set font routineăRegisters.BX = &H200  'BX tells DOS to store 08 lines per char and font bank 0ăRegisters.CX = &H100  'CX tells DOS to change all charactersăRegisters.DX = 0      'DX tells DOS which char to start fromă' for PDS change VARSEG to SSEGăRegisters.ES = VARSEG(GarbageFontBank$) ' ES tells DOS where the segment isăRegisters.BP = SADD(GarbageFontBank$)   ' BP tells DOS where the address isăCALL InterruptX(&H10, Registers, Registers) ' call int 10 and make changesăGarbageFontBank$ = ""ăă' load stored characters and attributesăDWORDBuffer$ = SPACE$(8)ăDEF SEG = &HB800ăFOR SCRLoad = 0 TO 31999 STEP 8ăGET #1, , DWORDBuffer$ăFOR WNL = 0 TO 7ăWNL$ = MID$(DWORDBuffer$, WNL + 1, 1)ăIF WNL$ = "" THEN WNL$ = CHR$(0) 'quick way to get around that damn ASC bugăBYT = ASC(WNL$): POKE SCRLoad + WNL, BYTăNEXT WNLăNEXT SCRLoadăDEF SEGăCLOSEăăFOR PC = 0 TO 63ă 'capture palette for storage & manipulationă PalGet PC, Red, Green, Blueă XRed(PC) = Red: XGrn(PC) = Green: XBlu(PC) = BlueăNEXT PCăEND SUBăăFUNCTION Monitor% (VSSegment)ăDEF SEG = 0              'first see if it's color or monoăVSSegment = &HB800         'assume colorăIF PEEK(&H463) = &HB4 THENă  VSSegment = &HB000       'assign the monochrome segmentă  Status = INP(&H3BA)    'get the current video statusă  FOR X = 1 TO 30000     'test for a Hercules 30000 timesă    IF INP(&H3BA) <> Status THENă      Monitor% = 2       'the port changed, it's a Hercă      EXIT FUNCTION      'all doneă    END IFă  NEXTă  Monitor% = 1           'it's a plain monochromeăELSE                     'it's some sort of color monitoră  Registers.AX = &H1A00     'first test for VGAă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.AX AND &HFF) = &H1A THENă    Monitor% = 5         'it's a VGAă    EXIT FUNCTION        'all doneă  END IFă  Registers.AX = &H1200     'now test for EGAă  Registers.BX = &H10ă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.BX AND &HFF) = &H10 THENă    Monitor% = 3         'if BL is still &H10 it's a CGAă  ELSEă    Monitor% = 4         'otherwise it's an EGAă  END IFăEND IFăDEF SEGăEND FUNCTIONăăSUB PalGet (col%, R%, G%, B%)ăOUT &H3C7, col%: R = INP(&H3C9): G = INP(&H3C9): B = INP(&H3C9)ăEND SUBăăSUB PalSet (col%, R%, G%, B%)ăOUT &H3C8, col%: OUT &H3C9, R: OUT &H3C9, G: OUT &H3C9, BăEND SUBăăSUB STDOUT (MESSAGETEXT$)ă'writes text to dos's standard outputăRegisters.AX = &H4000ăRegisters.BX = &H1ăRegisters.CX = LEN(MESSAGETEXT$)ă' for PDS change VARSEG to SSEGăRegisters.DS = VARSEG(MESSAGETEXT$)ăRegisters.DX = SADD(MESSAGETEXT$)ăCALL InterruptX(&H21, Registers, Registers)ăEND SUBăăFUNCTION VerifyTPIHeader (NAME$, RETPIHEAD$)ăOPEN NAME$ FOR BINARY AS #1ăCompleteHeader$ = SPACE$(71): GET #1, , CompleteHeader$: FileLen& = LOF(1)ăCLOSEăIF LEFT$(CompleteHeader$, 59) = TPIHeader$ THENă   VerifyTPIHeader = TRUE: RETPIHEAD$ = CompleteHeader$ă   'test for complete save failureă   IF FileLen& <> 32776 THEN KILL NAME$: VerifyTPIHeader = SAVEINCMPLTăELSEă   VerifyTPIHeader = FALSE: RETPIHEAD$ = ""ă   IF FileLen& = 0 THEN KILL NAME$ăEND IFăEND FUNCTIONăăAndre Victor                   FULL SCREEN FLAMES             anvictor@ruralsp.com.br        08-08-98 (05:29)       QB, QBasic, PDS        206  8319     FLAMES.BAS  ' FLAMES by M.D.Mackey (C) 1993 E-mail:mackey@aqueous.ml.csiro.auă' QBasic version 1998 by Andre V1ctor / BRAZILăă' Load QB.QLB... qb /lăăDEFINT A-Ză'$DYNAMICăăDECLARE SUB Flames ()ăDECLARE SUB Pal (c AS INTEGER, r AS INTEGER, g AS INTEGER, b AS INTEGER)ăDECLARE SUB SetupPal ()ăă     DIM SHARED flm(0 TO 159, 0 TO 101) AS INTEGERăă     DIM FlamesCd(0 TO 48) AS STRING * 1ă     DIM CopyCd(0 TO 77) AS STRING * 1ăă     RESTORE Copy                              ' Read machine-language procsă    FOR i = 0 TO 77ă     READ cdă     CopyCd(i) = CHR$(cd)ă    NEXT iă   ă     RESTORE Flamesă    FOR i = 0 TO 48ă     READ cdă     FlamesCd(i) = CHR$(cd)ă    NEXT iă    ă     SCREEN 13ăă     SetupPalăă   FOR y = 0 TO 101ă    FOR x = 0 TO 159ă     flm(x, y) = 0                 ' initialise arrayă    NEXT xă   NEXT yăă     Flames                        ' do ităă         ăFlamesPalette:ăDATA 00,00,00,00,00,06,00,00,06,00,00,07,00,00,08,00ăDATA 00,08,00,00,09,00,00,0A,02,00,0A,04,00,09,06,00ăDATA 09,08,00,08,0A,00,07,0C,00,07,0E,00,06,10,00,05ăDATA 12,00,05,14,00,04,16,00,04,18,00,03,1A,00,02,1CăDATA 00,02,1E,00,01,20,00,00,20,00,00,21,00,00,22,00ăDATA 00,23,00,00,24,00,00,24,00,00,25,00,00,26,00,00ăDATA 27,00,00,28,00,00,28,00,00,29,00,00,2A,00,00,2BăDATA 00,00,2C,00,00,2D,00,00,2E,01,00,2F,01,00,30,02ăDATA 00,31,02,00,32,03,00,33,03,00,34,04,00,35,04,00ăDATA 36,05,00,37,05,00,38,06,00,39,06,00,3A,07,00,3BăDATA 07,00,3C,08,00,3D,08,00,3F,09,00,3F,09,00,3F,0AăDATA 00,3F,0A,00,3F,0B,00,3F,0B,00,3F,0C,00,3F,0C,00ăDATA 3F,0D,00,3F,0D,00,3F,0E,00,3F,0E,00,3F,0F,00,3FăDATA 0F,00,3F,10,00,3F,10,00,3F,11,00,3F,11,00,3F,12ăDATA 00,3F,12,00,3F,13,00,3F,13,00,3F,14,00,3F,14,00ăDATA 3F,15,00,3F,15,00,3F,16,00,3F,16,00,3F,17,00,3FăDATA 18,00,3F,18,00,3F,19,00,3F,19,00,3F,1A,00,3F,1AăDATA 00,3F,1B,00,3F,1B,00,3F,1C,00,3F,1C,00,3F,1D,00ăDATA 3F,1D,00,3F,1E,00,3F,1E,00,3F,1F,00,3F,1F,00,3FăDATA 20,00,3F,20,00,3F,21,00,3F,21,00,3F,22,00,3F,22ăDATA 00,3F,23,00,3F,23,00,3F,24,00,3F,24,00,3F,25,00ăDATA 3F,26,00,3F,26,00,3F,27,00,3F,27,00,3F,28,00,3FăDATA 28,00,3F,29,00,3F,29,00,3F,2A,00,3F,2A,00,3F,2BăDATA 00,3F,2B,00,3F,2C,00,3F,2C,00,3F,2D,00,3F,2D,00ăDATA 3F,2E,00,3F,2E,00,3F,2F,00,3F,2F,00,3F,30,00,3FăDATA 30,00,3F,31,00,3F,31,00,3F,32,00,3F,32,00,3F,33ăDATA 00,3F,34,00,3F,34,00,3F,34,00,3F,34,00,3F,34,00ăDATA 3F,35,00,3F,35,00,3F,35,00,3F,35,00,3F,36,00,3FăDATA 36,00,3F,36,00,3F,36,00,3F,36,00,3F,37,00,3F,37ăDATA 00,3F,37,00,3F,37,00,3F,38,00,3F,38,00,3F,38,00ăDATA 3F,38,00,3F,39,00,3F,39,00,3F,39,00,3F,39,00,3FăDATA 39,00,3F,3A,00,3F,3A,00,3F,3A,00,3F,3A,00,3F,3BăDATA 00,3F,3B,00,3F,3B,00,3F,3B,00,3F,3C,00,3F,3C,00ăDATA 3F,3C,00,3F,3C,00,3F,3C,00,3F,3D,00,3F,3D,00,3FăDATA 3D,00,3F,3D,00,3F,3E,00,3F,3E,00,3F,3E,00,3F,3EăDATA 00,3F,3F,00,3F,3F,01,3F,3F,02,3F,3F,03,3F,3F,04ăDATA 3F,3F,05,3F,3F,06,3F,3F,07,3F,3F,08,3F,3F,09,3FăDATA 3F,0A,3F,3F,0A,3F,3F,0B,3F,3F,0C,3F,3F,0D,3F,3FăDATA 0E,3F,3F,0F,3F,3F,10,3F,3F,11,3F,3F,12,3F,3F,13ăDATA 3F,3F,14,3F,3F,15,3F,3F,15,3F,3F,16,3F,3F,17,3FăDATA 3F,18,3F,3F,19,3F,3F,1A,3F,3F,1B,3F,3F,1C,3F,3FăDATA 1D,3F,3F,1E,3F,3F,1F,3F,3F,1F,3F,3F,20,3F,3F,21ăDATA 3F,3F,22,3F,3F,23,3F,3F,24,3F,3F,25,3F,3F,26,3FăDATA 3F,27,3F,3F,28,3F,3F,29,3F,3F,2A,3F,3F,2A,3F,3FăDATA 2B,3F,3F,2C,3F,3F,2D,3F,3F,2E,3F,3F,2F,3F,3F,30ăDATA 3F,3F,31,3F,3F,32,3F,3F,33,3F,3F,34,3F,3F,34,3FăDATA 3F,35,3F,3F,36,3F,3F,37,3F,3F,38,3F,3F,39,3F,3FăDATA 3A,3F,3F,3B,3F,3F,3C,3F,3F,3D,3F,3F,3E,3F,3F,3Făă':::::::::::::::::::::::::::::::::::::::::::::::::ăCopy:ăDATA &H55:                     ' push           bpăDATA &H89, &He5:               ' mov            bp, spăDATA &H57:                     ' push           diăDATA &H56:                     ' push           siăDATA &H06:                     ' push           esăDATA &H1e:                     ' push           dsăDATA &H8b, &H46, &H06:         ' mov            ax, ss;[bp + 06]ăDATA &H8e, &Hd8:               ' mov            ds, axăDATA &H33, &Hf6:               ' xor            si, siăDATA &Hb8, &H00, &Ha0:         ' mov            ax, 0A000hăDATA &H8e, &Hc0:               ' mov            es, axăDATA &H33, &Hff:               ' xor            di, diăDATA &Hbd, &H04, &H00:         ' mov            bp, 4ăDATA &Hba, &H32, &H00:         ' mov            dx, 50ăDATA &Hbb, &H04, &H00:         ' L0:  mov       bx, 4ăDATA &Hb9, &H50, &H00:         ' L1:  mov       cx, 320 / 4ăDATA &H8a, &H04:               ' L2:  mov       al, ds;[si]ăDATA &H88, &Hc4:               ' mov            ah, alăDATA &H26, &H89, &H05:         ' mov            es;[di], axăDATA &H8a, &H44, &H02:         ' mov            al, ds;[si + 2]ăDATA &H88, &Hc4:               ' mov            ah, alăDATA &H26, &H89, &H45, &H02:   ' mov            es;[di + 2], axăDATA &H01, &Hef:               ' add            di, bpăDATA &H01, &Hee:               ' add            si, bpăDATA &H49:                     ' dec            cxăDATA &H75, &He9:               ' jnz            L2ăDATA &H81, &Hee, &H40, &H01:   ' sub            si, 320ăDATA &H4b:                     ' dec            bxăDATA &H75, &Hdf:               ' jnz            L1ăDATA &H81, &Hc6, &H40, &H01:   ' add            si, 320ăDATA &H4a:                     ' dec            dxăDATA &H75, &Hd5:               ' jnz            L0ăDATA &H1f:                     ' pop            dsăDATA &H07:                     ' pop            esăDATA &H5e:                     ' pop            siăDATA &H5f:                     ' pop            diăDATA &H5d:                     ' pop            bpăDATA &Hca, &H02, &H00:         ' retf           (2)ăă':::::::::::::::::::::::::::::::::::::::::::::::::ăFlames:ăDATA &H8b, &Hdc:               ' mov            bx, spăDATA &H56:                     ' push           siăDATA &H1e:                     ' push           dsăDATA &H36, &H8b, &H47, &H04:   ' mov            ax, ss;[bx + 4]ăDATA &H8e, &Hd8:               ' mov            ds, axăDATA &Hbe, &H40, &H01:         ' mov            si, 320  ; si ptr to 1st element of flm in upper rowăDATA &Hb9, &H7f, &H3e:         ' mov            cx, (102 * 160) - 321  ; elements to changeăDATA &H8b, &H04:               ' L0:  mov       ax, ds;[si]ăDATA &H03, &H44, &Hfe:         ' add            ax, ds;[si - 2]ăDATA &H03, &H44, &H02:         ' add            ax, ds;[si + 2]ăDATA &H03, &H84, &H40, &H01:   ' add            ax, ds;[si + 320]ăDATA &Hc1, &He8, &H02:         ' shr            ax, 2  ; divide by 4; average 4 elements of flmăDATA &H74, &H01:               ' jz             >L1ăDATA &H48:                     ' dec            axăDATA &H89, &H84, &Hc0, &Hfe:   ' L1:  mov       ds;[si - 320], axăDATA &H83, &Hc6, &H02:         ' add            si, 2ăDATA &H49:                     ' dec            cxăDATA &H75, &He4:               ' jnz            L0ăDATA &H1f:                     ' pop            dsăDATA &H5e:                     ' pop            siăDATA &Hca, &H02, &H00:         ' retf           (2)ăăREM $STATICă':::::::::::::::::::::::::::::::::::::::::::::::::ăSUB Flamesăă     SHARED FlamesCd() AS STRING * 1ă     SHARED CopyCd() AS STRING * 1ă     DIM x AS INTEGERă     DIM delta AS INTEGERăă   DOăă     DEF SEG = VARSEG(FlamesCd(0)) ' move lines up, averagingă     CALL absolute(BYVAL VARSEG(flm(0, 0)), VARPTR(FlamesCd(0)))ăă    FOR x = 0 TO 159               ' set new bottom lineă     delta = CINT(RND * 1) * 255ă     flm(x, 100) = deltaă     flm(x, 101) = deltaă    NEXT xăă     DEF SEG = VARSEG(CopyCd(0))   ' output to screenă     CALL absolute(BYVAL VARSEG(flm(0, 0)), VARPTR(CopyCd(0)))ă      ă   LOOP UNTIL INKEY$ > ""ăăEND SUBăă':::::::::::::::::::::::::::::::::::::::::::::::::ăSUB Pal (c AS INTEGER, r AS INTEGER, g AS INTEGER, b AS INTEGER)ă' This sets the Red, Green and Blue values of a certain coloră    ă     OUT &H3C8, că     OUT &H3C9, ră     OUT &H3C9, gă     OUT &H3C9, băEND SUBăă':::::::::::::::::::::::::::::::::::::::::::::::::ăSUB SetupPală     DIM i AS INTEGERă     DIM r AS STRING * 2, g AS STRING * 2, b AS STRING * 2ă      ă     RESTORE FlamesPaletteă    FOR i = 0 TO 255ă     READ r, g, bă     Pal i, VAL("&H" + r), VAL("&H" + g), VAL("&H" + b)ă    NEXT iă   ăEND SUBăErika Schulze & Gunther Ilzig  TRUE COLOR TGA VIEWER FOR PB   100775.2275@compuserve.com     08-09-98 (18:32)       PB                     362  23932    TRUE.BAS    ' Load/Run under PowerBASIC to extract TRUE.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TRUE.ZIP",4^6:Z&=17667:?STRING$(50,177);ăU"%up()%9%%%%-%B(I/Jh-);]z(7%%5+%%%/%%%%wj%firj%SVxyB&yr>'Tk5bnj%ăU"x<#AJe5J<*],Anon;6;;c)pvYLWZO]A)GgUzFtfsA(QHEaATNYox.')?dY5_FJ;ăU">E2fp5uQAjB;A*poq8K.^9)^:Fd64JRU'M_Yr]H%SSSSbP7F/j;dvc%-4gbF\[>ăU"0M:CP4t2I/0uLbqn]/yjNJc-:()0J_#]v&dw+S:63OcZJoHPIzt#5+ZY3lnVQ^răU"RUOnd[7S+s[Crp=KFk:Qm/eLSP%_%.ju2NI%Vt]4hjrrG^n4(xQ%b&z#xERmpVSăU"s&5r\sA$./9[*V%qE7%Mp/UJ)3x)EcY)v%n0r-%o]3X)UQsxZ/5$=bQYX'l4KT]ăU"4<7>F+NjC%-496Umj7LQgs_e''e>tT-J09_poV07,ci/wS%,x;bM#B+98)SA7N\ăU"ey&++m0C%#w+gT)V<J0lgKO%9b#D-*1CRA.?NyU\/q+Bg[Ct*=-6X<+nk=T;aM=ăU"]Udrj;I-uaG3:RoY:]Ovk[;#3)gRjzJdh_UBpQZLbd^V09kX$iEjguu\SNvM1ShăU"#v;+iV3jfkZ8DHv\\>6_G?CE_fI^aFLJSm-w#=/;P#Ii>9yA*;l*4NYx#0dEOzZăU"XmS;)6e-$3V0Gl$u?h]$CSETz^/m5e+kh:P'+jxB&*Km*aTO'x;=s:?&dHJSmfMăU"14<s?p6c?l:mgMnGKs$e8b1CY?uGp)3Uh_\)scjYu*oqZOSFAX0=]tTYdCnI($BăU"0JZW0-w;BuNpo2>uMh=)g#wFj)/kgtyo2Hru3Cx$mHgv4^FaQ?CxEnN<zF_MIkrăU"Cneh;VYHN(raFm;,Q%V6#rXSa<Rphht$bJ>ZTDMZa/;5RiaefNl-cE>?ck1=$OBăU"b\sbW&.NA(\IzgRW7SIvJ\^?\<gB[mL.^iA7Q:cKToTtqF*fbkBF5BoK&vCte(uăU",xF8+,%Mm,C)[Y/9DQHWle.H*N(MQU&?#k[5O#C_nhbKD'lF_1cYP#sfX2/3Te4ăU";/GexWK+RwEz>BiVI\Dx.#b;oKS$KyBN=UqMMjdo8nmrct9-=A<&PH*8yM>S#kQăU"_p?LMDDJJ#X=3>,>;EzBm5MCkvfW0hN2BJ);jBk]m>+X%&up(%)9%%[%-%oa8dIăU"<-c;55#3%%O%^%%,%%%%y%lfSfRxrf*;<>T]=7w%'Tr4uAWQf3,-TF*^+#R_nNLăU"=?<rKZLV:'Z[eUpC%\(Q8jNt#oPX3E_cMeiwa7$ev0I3?$5mWG?_ha<KfiZu>w-ăU"#5)xmaIRRT4D;nQ1s4(yJ0>6xWUH;ktn0$#VV>$;#[(S$BkjG'DaTa0rk=6AX7YăU"QH1WLUd-e]dD[3Tt_cq]KG,s1/'*j6:1Er?]+#&$a(5Z-3\\#IW/)wepvU58/+&ăU"9wr.14s?.%dS0>]xJY^bA2IK*-)TiH:+J*$Udg+OAwWG'B>4h7FJ*Ns;FxLJ7TgăU"U&(v-7YhVis17;h:JIGe6V#)[S)\/DT7tSGe+2q1+*Tcj?qK+DjC*.t-UD-YG]răU"B$R/cG\i'=333qM5(G'$2V5;]P:GkUPYGq?(l6rx?moEmGsZVInVYQ[a?M_I[)găU"?g]NGYX<Y\(MNb_L&<+P-OY8$grPFFan9HQc(dcODFvliEn,;XFliCR.ElsY&4văU"FTd*.5/<%Rhgc9g??\4FC=fmOeP&f*tJ/#:Ql5[,410o=vQQZ>d/$Zyo(.b[[;9ăU"8Q+Z1P&Qj7Us$I/BvmzRng?)CW_n*m:q:&blkriss%,[A]Ru2*eO2$r$G#lEph)ăU"]gmOh&o\yI3Cw#0upL2M4/N+?yA?-G-'la,h>ZPuoom.ld-Bu5\OzBRkN9'3Hj6ăU"\%Zt*SlGRFS:K-TuJaG0dcmo\ii[GW<sOkx\6KN\)zVqJFA%VGdVm&qqUDMK3f>ăU"13\[$Ct-B-.C+P+,$Y[P(G%nVuSLEe7$Iq3RN<uUl#)XJ\<U1-]8JG6UO&a$Kq9ăU"7O(\yn?s9:#Fqur=?(S:sCmjjFb2QUpW0d*ZFA[acNtDkXr*Bjc&,__$AeQp(&RăU"j5CXA0#iA&Q(7oQ5w?EMKHIMr?cXxI(C,AAHb.Q0PVw?(<\E5;*]5u&]abrilykăU"MPIxL$sdVt=$9-Z]Dq;%jtluG7aFxcjU#?8>kOly=.:)f<.Ds?)';eTVg_FQW9_ăU"ss?t_q=)H7'wTT\pQAGqwETI)z_#0Hj#8)V/c+sF:q<P/B0r&5X/$:,PKf18D?VăU"GI.e.oBz)AK0RElZV9lP<EL?1magOeFv5rb7-.H,A96x'S?9,6gdF8F7\^X1)EfăU"=SSvp&QF.454:zsgMQTu/zW:W;6Jx6ddMhQRw2W>KMXA'lO#LUJAeh>h%'kaPosăU"66U_]qH::\;[KpTCKe^>9fJz/%)KZ6YGo=$3fz[sBm(t=,Nc>F&JBwteZ'OMrRDăU"%snBIw]I-k<PX>h6^^<<e(AK7c;sQ$c&JMi>Be+=gA70elA_IJQ(1<a)PJUownjăU"&XaHY[SWf%?6w[(Y2aD&c1&9$#J=^X/p7[*-5FI#aGravTDQ&nd'5K3wRV4H;2kăU"[=2d:#-\gA\YZqZeB<KqClM=MBU0#c%Bb%[l3=jF7u'<&&Q&pBqG::7:585T9;răU"#0#DEZ_%W'mVI+Z0ga;K;mI'/AVMjPeDp?=54N$ADO9Yh,updYJ-9xl*+l>55ihăU"GCrXDJ./6n\pNYjZx?=eioq:<'Fu?]KzkRYjG+=21]tg_R*fI:%e:>SZ&aQ,o:8ăU"h&plXN\02OoCycg1-2Te(?Eue9l,5qC[p[CvF'(3bkz%WDrN)bxd7w+)E::FAhlăU"v>[tD.?=mwL904eEG/\8RIt(W%8]iSuamO^4+X^gO<aikwWLpPX%)#%M18sECa&ăU"\d_(Ni.diuI^$Rsu3'MeL:dz'EcHF&,<c_#BqeXomf#s5:OnFe0*2pgT53N*')<ăU");WIhExa0S)hZ;/>uR,2&SgqNcmCVXIK+?MGsOFTeS:jI6_8e6&&IRR4RV**+$^ăU"ej&o.O%?%,tgV3f<('+i4^/+J<Q9^S_5J>:aAJtAFB-^s&$)s[nU;($[4.T(yhGăU"jbRD'V/fH)xm*RD3aslh'dOh(G^0MziAKjn=;GZj2X9*BHF?JOMO$8GTc(]O:K6ăU"?S'.w0i-Hwx69em(l]&2p+P]&HM2HE;GyY\k+/YoTXrlqLOoj$9nb4R1jOSQ:K;ăU"sN&/hg9[lm9%i;3_O.GmP_SlY*q9z?aZ,,w[q<#/6C9[yLN.&bn<jV4Y4.U/GN8ăU"p_f46*kR#J.j;%4Dl#Q8,7(^z/6]+3;7EMoTWOQ3QZ&)^2NoFL^_ngNh0(eu:/6ăU"%__z0PG_^GZpiP<fs,BC1Ke.VW6?1qq-%0*4%[QqiQW;Fj,/&rN-%T1w.>wkvmyăU"V30h+^>##5mgRsYN^g1EU<Q-lTg$>hQU/#IoNPQL%T9\Vx_V:7\3/U*[t0pw5H*ăU"XN%eKNO8+Mbs;_),Hl85<XES+u\#C*?l0N04&Yi#C^S#8aab-19+LO3Y:#l+3j2ăU"$[O=QKK)>7&DmDu$*;lfqEdKKN9;usRZ94n:Y?/Y]j]#xT5EgL+6N;R'ATu=gB?ăU"koS.$9wD%pB.3Mb<cbYt#4k'R/I6p1iZU]'Roq()t>cLjer^foxa&EP6BUpe5wnăU"<:p9ZW[JsP]mjPd^APa(AfVtgUymw5CG9\nTaKE-^]CZ[.3ejIAWEtp*'[I2ADbăU"?FLdq1N?n/<#(>cdsmoK?2E,24#]-\7,&da62t)oCQLEPHK%?c>J^n4_[>y0'GJăU"6Y.(FqO98E-?8=9qLmqm1l3W%P=hS/wT>]1V6P1b-Qr>8q&QazT:'p,EDGl)M%PăU".9?UHe2d<LM(oP8jl<k[*9DTboc00lFl$F'dCZs6BRk8g1VV<1=8TX_cdYva05eăU"BUYy%kW5A%)dq5a;mTHNxzU;Pd:q9C2QbI\>W>sXSWr.]:QW0&',XOSqV9)?mK/ăU"nvU>9cG/^ce*IjGjp02h==2'jCJA#jM?b?W]=;+^d9AA2l/sK9aZP<)bID\J.b6ăU":f;Wee?&9K/uEs5%snM_GN*(L1AD8<4K>8Lubzl/7?A9#kHeV6mtg*Ht6rJj6+QăU"\'U[o:0_k'Fi(u(fQQVC$VafDhOFp8MP:%YkKB*nPNp_Tew,'*Isj%,TJ9%_CH>ăU"9\jJ^RvP<<avd)=%u\$e^,$OfS7+Lv]J$tcB\s$*L-zqdXRma?[[h2.r,U/oQU=ăU"1[1I)&o[no^&%IjJ<aC&u78*x.w;<jep2ix.VRL6ag<Mj,Xm8y(BRqO9gHM.wRkăU"./qVQjd'PfsuP;Av-D*b'$UMktn7R6^;%DKAWON&'ei#?xj/+26bJ6JhLK1l;]8ăU"EPQBi*s7evZuuqifd%)S>5qOS4K['bq3WvwRf6hp7htBfj'h5?(Sg;(=G^YZOQtăU"OUbJaewks_IV##:.Pm4PH4xDG'-41\(e\IBGf(+*:6B/vLhy)g]QBkp]z?[ITh#ăU"O>U7;?:So&kh3Kj?k^DKt36c5GU:_=J+MZrny5&GWX]O]Pt[_1J*u^z+$iY\,gAăU"Br(*xvgRls3IKJBV/b*0sDR1ztYPX2V1n2d&OJ&P=ZUVjJAZTYXe.e,W[6q<RTLăU"h7nx5_0A'PZSbU(B3%PPQsm1ZJ\MS4>1Gb7?RTl7mU%yJplCd$YAfZPt3qI:>5uăU"DtDSeK^#gUT*\AazGJM&Mb$J/N4XsC+XqDdqDAtu>$-VZC)5qKw)H=lpkc5CjRmăU"TV>6E(dtbitk?m$#'2YJxABMGLednz]6SC[KA%M.CABqprLl1^:IV,rZT$FtEO9ăU"an9hi.\^X[A,DSPc7b\eEN?]KijZH';iB6lnp=E7'XD'%FLN_d7([wLB^tdGBELăU"z6V#rZycn5z__p'4h0B:7bQ'M=q5>ga^fBcb24-\41EY'D:Ep-Q7=38H_Y?C3fkăU"5X0,,PCcx?Xtcl*c^o'Vjbl#ezIv4aiV\e,9eul3_ZJr]]XSfomjO#O+O#JsXS#ăU"0rnd8?U]]6&-xMro5)m4v1.EkJt(J^H5\F'N1:\QNp:]8L5Bxsc&A)3KG>\W+J$ăU"LZwCOIhwYj8:a)ji3llT/'.(O)7[F2%P_u/J;9LRjDskqsUOVxXo*1LvMVBUUaEăU"O+'2$t)q01,6k>Zkba<]rs.=wp<m\(LUXwOby9q[TMI1,N0-qG5o(wtGrQOsZS0ăU"HLAkg3qiQkxq2U>vJ+FR_[4_7.Isa5w:TH%ZfBc&zAZ)h&]Z'C;?1LNwP+p,*KfăU";xg/ISDE3dp0Lq,:\zG#gZ_i3u>#?dfSHQCvzj%pNp%KaDMQ,ttIeKew+%t]R91ăU"7*=J4kd;DbaPW97*%rkkZ2=N8hR^4i[R(rWG%4.N$B/N[jW(^xjcFJ>+0DzWa4%ăU"23y.\z/_dZjLPVgkM4[)#3A^IwFa2v#y$2Si>y'UR$[sVgSUY]vt9ktY2(>8g0%ăU"W3l_g40a%A\r;h4<wr\\DzH.pj^L,GR+Xu4)p*mb9)Lr^W:;pb(LA_j\4t^2]P8ăU"0&,_7B1Md?hi(mQ./Jw[jzZvvn5i(Mkq$a+Rc:1_i'6v:=S\IgTGV5$fLo4es&EăU"\tTY9qg#H'\eBv:qwjH*J&24Xrx',Qt[#&;NR%.1(STGJKy:]kSI.jaWvmnkt/PăU"s<;icpls/tgspgf+/NDHH^fVyQbf5l+8u<Im,%p2DAo:b22z#G4Jj'#2ConDpNiăU"7[)bt?DN/$#pwU)oKHWrEMN=toh.pWlv?8,#TqpUx8f>r7wh2,]lL'x(up%()9%ăU"%%%-%7Q9dIogD.Q&S&%%'\(%%%,%%%%ylfS#nshTPaX=QmU9?(+ZZBsBE;V#\J*ăU"(;U1j;qQa+ztDbR[c;ec3dk>8eYO9:\zWKKvl<llh1chE,jcE24;txN0sF\lEKgăU"?gZASLAmI06Fra+(v(ND47Im(dl$pmDCOZ.Y3q5_5w['qN:4((#63THJK#ne]HzăU"X(XgBOBIO-G(O3s9.:A+KE/(\?F61l/s5?wEq.]x>ITiQN3j&:<VuqqEg48YK9oăU"OM^%IL>'tP&O9/JJQ4Oo9Z%+rA7pdyZtV%oO6flfjkL>KhJWnZJZ^a.IYb>,1eUăU"(Q$Iz%:80uU3[Alc'2diN%;e*Ap/4[PD$BM/S\z4^B.pfWNl-aV*_[(VcbBsiL%ăU"VB)rl):3CkA)D]nuW)a%.wG-K):M\#jbGq9)7UsEQC4>\fWg#/^-+y$x2albpAUăU"jQ&X5;udx9B#&BTTVh\PqSxZC21msjpmcfqE'$$s0]O5a(;=]/g0x\kR-bSYZH9ăU"'u,([?V&YwEf'6dn&Iidu%p()9%%%%-[%29d#I0dl-.Y'%(%p(%%%,%%%%ylf%SăU"tgo.zu,mCx0=Mu8,\R4aGHo0kw(fBIr<mGz)wvtjg;vU\v+\sf$LkO<0rD^H$5SăU"+L+GiW;/OTC<-i0aUdgFG\==d8,9ek<;jKe2WSo]366*jg,m^l=cXlb?hl7\lC:ăU"gah\l\>4,,BA4eXc&ni;hFmz%XS(A7SAkv_\I8=+GeD[Bz/q9#0S2rMJ#?(x]0/ăU"FA.k'AqZ=UhRjID.;5[5GM2&>\B\%2+T.ns)fw_>]ZDoYk9(3L:auO/ARpXBv)[ăU"YCWn7&.7[dwD4C'/LQ(Xs]I6#j=1#f)]+n.dqANXi$1BUO)z;6U%JRm>6JWt3[1ăU"5'B*[j[JZJZ-lU)7w*1,<E%eWIz*O[0-XBp,k2Uh#eCj<Y:kj=+1D\O7#.r>Us\ăU"B0-Adl1Z$dB>isO%8xaY.bIFwm75qh)BvI33PFXB1-lh.RF2gkYCW&%MYJ9H8ieăU"M=HW_f-9XdK:HWGY#gXfW;5QCQOLv&DpjqI4X(v%pb2M>6U.$K3Kf=<i/<Km,cHăU"ZRKlkvhFbHbbWlbg_HJB'C?y10>j/9VbEF?E'(]GBO5ie#_vtKqMBW'm6eKRMqPăU"gA/k50fnuj5_WpzjLA=#kM6GI:F>WSY4Ut$jgQ87Ek(dW93<3\%A?+V(JZTm:CzăU"skS$'UR.Y;k#0W[(0maF5RwS8lnM^'ZmE;4pk3g0i$lOuXLLG&sz$MsUfC0SF7SăU"(vLhpOC_QV>nCdyKGXVhdji)n_Gb?i(6Jp\97m-l4DOb[[es/6Xk.#nH_UQQHDeăU".d&5;U*-ns_<GM'f9oo:3BX$M\brl)=Mdrhc2<EC\XpL:Xa0+rB.$cv,J)=yLU/ăU"e[(Yq_F]5Ft<-Ik5_asCED:?=7h8n%13nD>qTO5W-whY4KZ<0IQR+O%qOeWgpW4ăU"=Fx=O1C2$j;[FcEk;W,=CB[EeAfOEfTg4aj0k#LXX%up()%9%%%[-%t37.JT4,ZăU"I_DI%%:=%%%-%%%%yw%zjSg7fx-$$vB?B&]d$zTrDs#]B'.ZU&E5;E+(</Jku:;ăU"j/)bU?fNN%I2qHg)hj4$Ne.Nais2I7<)bFv*h<UHPxN9Li.sxGSv\<5f8\JwB%_ăU"41fG+m\p*;w*i#=<wT9(qLuYrt9EW;H%k*O(tZ0X3;4=QF;njR0*Kl\6eE41D2XăU"\SkOq\k8f.2E,)/kd'&bNw1w)GRDE66l<,,0UU/N[43JV=WH.[1K\%TT_gm%CBBăU"zef'[&SP4s$E:f*^+G9)ej%8mEXl\JNa3R1xM2K]ya$d3qY0ZGAXA/m%LAx.^:LăU"rDF(#Mn&4H1)P*k/8-s%Y$<-wFl[ogrQn'>j?aJY(fH4ST(cS*HWUT4a)?dH?#KăU"a<x?AjlNd$e%H54IpL-#K_T%K16>'=-t7<i_OI^c:X/Led_wz&lP)^V:SEfJ[R9ăU"W#e-)%)&>Oa]Dz1aKB+.QNJ:TB'o<w%Z=&%T9n%/foj%SvZ8Cu+?HaEWEMG'YJLăU"^hfoWsPfq#wmV5d6lbbEay1f4UvOlSKJaguQ<bmtICsP:\&$X#8df.>G*4/WRADăU"ftF/4J^]&\\*ZCYM:kA\B44e4C6dsE]u615wq+[_VWl/fGp4H5Ro5\q,M3R03+RăU"hq9ay(;D\M%J]:v%<;EjI2Qg*z?6S7Pi68B5$l-OFvEC']:;nG=:+REqI;+#Vg)ăU"<INo.m<>f-Os3(+SVlN_B>F?<^,O*XVWQK69fa<zN+<+:(<VErWBzhTkp6?IHWHăU"l2EOjsJt.l1Y:xe)y:5't5H00%2O1qjd66\=-J*,<'&?%GWP.(I2+]D';-I2mG.ăU"4[K,UWz6:3f_lb>*j.:1$$CyNP&;?=Z8ettV6]%&cl%g5?)RM>?Wm(,=VFt*ujBăU"&\&C==lGim<J>6F&l9Yghr5/HG#(#9R=*U*uMX&%3dFY=w'TSa$p$z.dTas,GT7ăU"L%UrqNweU-09B'\.)A'Gec,c#ECrayfZT/JVB^mu,S5N:KV*pe82.0U26[]A%ZZăU"Ne[L/CR+mx0B?qh\=l0#E<rL]);fYL9kGDnHIbt5WV*/2E:(X:C,E=P3768>bA4ăU".Bf=nkefW/;=m1#kuR?95=HG$9W*_.LhGETD]?U.Pl;=/F:&._M>A_6c1TqQQ$tăU"p)7Y>g*T*bnR#P='l\g+]6>8s;lc]hwYGs<2S8*#>H2u0Zd.tTH*%KVU_PKI\HjăU"i1iPUa#lu_Q\XarIYjdZg7.u=#t'7.)mB$+:?0_jwe^fMSrtApW[3a<e[FGkf=:ăU"p?5IlD,mdE>Q+[p$I].^CfacUES(c[V'i>/^L8OYtlp^'C9aMiS5QMMLZOaTQ?iăU"eYl0&*isVdLe0Di#RJM>:B0GVH^p^$9S$Ir*Ud]^R*/oBn>#+7R*RkQ(P:L[5+3ăU"('e2-6AFAiLP<0QEkR6M<fG/^)/%0,>uL)uaLGRA9;+^1,&KbtqZAlslZ,%<Nf\ăU"ujIrm^,8;7/n6bENs-wI,3[7(JY-L#^)T]&5Ja8#S(IAsK//VOwdQnnjNtsT9OiăU"*Jv'p/cd>33b;+sbYFR<e?4m<_2Ef1P$;ve9??I*g=&Sg/'<BtyO-7SKshG_/(\ăU"l2dcO+PPI.-qzU'iEvmje-S_#VR9;$R'+Ia1TOG\Fn62F^%(rCnq1?=4JX84>Y5ăU"W#LbpZIAC+I9>/pS^_uP6ERT=^Geo)]jaVS=FtCy7MYY_B6-sHI6lUVk$3)VIF#ăU"eMJ]=n<i0&OJox_#--5s%LX'*)fH#cd]QNH2L%1Q\+?*QJcr#l=S#IE78hUHZr0ăU"BH0ejxThj=2SD&'aCKY2_jU'Xwfa#$=MF[p*7-o]=7vsMVynG[,nHJYN?sJ45FSăU",W,t^-Pq.t&k,Y2_&2[2%n_14Uli;t39j)6g*F8\$:96&*jI,Wlg*k^$*=$6%p8ăU"F6nj't>H'>uDI_//%7*v\$F\-,F:m5>CP8Ag1]A3m6gBr8-Ls>90EKj#IUb?O7>ăU"64]/3a4oOSLKcWbohG)^)CpsvR5VjI^b#Q04eN,B^Wtpi^.]3P5]i;LLmy/<TihăU"[;J8RBxZ7^WT-e9w0I)EJvsZJcnI/KU3S8lHrK6tv[HM,;4f+*^>Irf5JL..rlcăU".Z8qVN';f8\%Elm-X_._Z&/ECuVmU\8IfE%3]iydv%(TEUP0-=RYx#6<hzLaOtoăU"IUe,xIGBDqxqSD:aM9;T8Jx=[a:Ye=&+S3(u#93Coc=7e?1K-7PSd\)l\?fV#)&ăU"^fuJY1qNtS%TFpQ.5qd+FBDL8MUP(let-&$g]VWH=8g\P*e_oOlmeKwD(.TLFjTăU"3pzvRB(:KF7'e[$8(mJg7?gJm'HyI\&8mB7t[][aXtlB_ilsLkb344t_?JX\eZ>ăU"-YFV2wd$JoR&HZk.fj^E1>pbk+?<nI/Iaz\$qP]^Pa%]JgA*AWO;^ppPkL'furtăU"]EifHB^TVS\LOUS*je9f<66ILVs/sH+&IdX2qGQ9aN5qsOJC_-+\vD28sbV5dD1ăU"O#KxaOlD]di.pXldBN.Qb/(;Qvd'=<%jR0OBSrqoV;D*j)L\SY$V%B5Q_BF(*XpăU"tIQ_sc.^d(\mKfgiNG&J(;v\]/_IKx]4Q4)&XioDV*YbYS(_U%wYSYb8*Q^fV*ZăU"VN24Yq<DtJ4IOE5GYtElgX=*lLHHf#Aq5bXsF-B)A_+vv<)(10H*1/,j^e>pj;3ăU"l+12KJHbm#c?q3V(JKQ(&kcRwUgBw5S57J7)-D&k\t%S-Rx>_<I'F-:jm1g5'IdăU"7H4A&4#P3rO8tY]%/v>.o._Y[YoGI*ISgHVyppu/pN\<3x5[r-uQiZK(P_[_ptfăU"]Hffrn?u1ozq9$$HSyHiH:C%ggoe?=Y;)gYk[MV8VA\=01g4*J2JTHQ;$OEh5M1ăU"R,(ZY/9B,=;+5jXgqhBQP+f(yyY2J6b#fHLpfOFZ>K/Z2d>j5<'c+e:jCN7Ri;*ăU"tSIP)Ll//4DV_q9kBKZdbiQ%dTA<AA?O\Ic*i_NwCN<?,EFVDVOx\_b%2F+F-a;ăU"uF(gEp/IrU-YIKCbm:O[]k2,W$a.;-8Tmt:mS/#B#2RNMnRHl8^n)z1O[BJuKsCăU"A',v<Xb\lqPPvSpP5mSW-3;uOOYYy=%wm7/e+X#0cE%W1F)Du$^.c.*Tl9I-u6răU"(o/:YTi;RPX#X-BT]IRfa/55]:E;q)0N*LicTa%lDD,4uoK===yM'=]g*Df5g1QăU"K;M6,OAR,%wR'\t8GFO<?t3[:5n.<V<.%u-Ve+)#nWCFh-/au=Sb/:t'sxffYNDăU"bo6ZIFm1LvE&;lt>IKuZbROZIXm=8mhE*(-M.B7LLF;(ZerL8X_qKS=TwipG576ăU"_G:OSMOCmOIuL/zlm%%h0UT$8Y[pSqiYE<Vd'7jf/J(IWye,m/oEm$7+V*ck5IbăU";0=kJ'fE/CzOI[[1ImYVi)Lpec(56f36OHB&<mt1g].[f)u%]WQ<P^sfL)TgPo'ăU"Z2vYh<3V)h0'RU*?ox<%b&hul?HU0U8H?Ig8K-:/KljZYYrSMeA%'QSO-K.XzgDăU"sDirp9A=>r$HEWlU(6CkfjvMGci+uH9/uu6GIZ\.:H,IoIgb%ZLjEMT[:>CfQ3NăU"Gh;t#/UpMGto$HIFX5Q*g/&*?1fOz>Fv#cSeO]]$Qr9&[f:>e)Z7R4GSVmfe91#ăU":4&?zvrpfboG8E8YGBS)uQ[q<;AX#DqrqMT1NR%y5BQ.JX1-g-\+1pE&,dmuI2kăU"aaA>i9JG;eY&euC/f$O[TN]a#l&13J^o[8WE(*U)ghC:I28fZ>)hq,[4#&-$jPOăU"s*>A]W1/a1PnqG2icfV&BDhDq$[--YoiAv)T]>=l5+mn7gc5K_oXBU[Oo>_'e-XăU"8y+,e%g^Q'CjsaKD9K[u#e/[Dhkl^Fm&UPAh+p;qTtY&]e-l>%biD;qm103cnt4ăU"oe.[)b#CJL8Oe[kD*D1pF?4uyOpv1C=Z15^UD%7[>6\Wz=8w%u7D\[%d7.x;,^]ăU"Gg7(Cor69Hn2^S6I1dJiDIY1esX,*6^h/SNg-ofO>>T_S?NpT7+Hh+Cr&;WXM%0ăU"kXiFbqi[3Y/w[MlY#6eqFEE_hnU&):Am3'.Xk\Y^za<F8aIXOb;_*:$w.:lbvr;ăU"Lj7XF]7A**7+;JCq)=iNy[Nmm$=&:nC']xmjmnG7r%=g><t(ca;G_E-%47'ydO'ăU"pZL4#jvAj9I8gSh9>7YEJ4k+2RlC6VoVTq:yxN7ub'_Inm8B1vB]Q6?1oa%vu<\ăU"A&(A[PG#ukg+%_q=%K8%.wgi4.X/)ePk(Me9-wf[,9V>b3c&vLHn8URM_*-)fG7ăU"2*A#,ph-=L1.W4Es_9Gbo%TpzdmILOikg>4sM*F<\$Ncg3N^v\0uP]bDz:H^_D2ăU"9u5fEm7Cf8AsdcHlcb\NHP2XLyE=+5=a-HGiooU_3Y<PdxKruEuiBvGbFpWHgcoăU"XaU_2<2M(VIHF$pJ'6\HXF(7udr#rwD%?F[y6Z&poG:ni9Uq-eOh+b='S_2A(5wăU"eL5R90Es11zdAj[va,R-J+zEZf^;s^$D9A.O8dsSFKrN10t.MEpOIONu%DLJ?%_ăU"%iS2p+NO.]gp/6p:TCB79J3>m&qS9I$Ink\cZ1^t+_D'Z]Ri1q$A.7A>c_UpG,>ăU"7Bc[mUf=3q;(=&f6=6KjL=QjVF(%[KkW+NN(w^^da#N-IVf-l;NH,rWnW'O(oE/ăU"0A)bU$zBx8r_/GFDQS-d;9';J[hdZ-pYsp\2*J<Rr5^IqffeST$S%&:8Z\2KXwWăU"9Iiovnd?X#mJ^zLC%?-[DJGc3*V$$?U&6*;M[Rmo\n^4s+O13-1([1vY)k9Vh6^ăU"/ru,dnu5dcesM>UGf:b<m+hS9#tm>jC:gcinYTPW3Vx=ELpSmF)3rX2'#_<*k8EăU"Ant[8r&%M73:*OkLEBc&(ja-rFtKJ#M:$l/iXBd;FM+jAT?oJ4]_AKbID:s\8iuăU"Cc#k68f9(5p-U^s,6&%-V*t;Ji3Aa5ahJ'3).MYWGy&kZ2UVYP6dL=ZT</rSpxHăU"#5yb%r66kPc_=[6<P0q/dfWRkx%eEVnUF##1#(Q*AJx)aMd;vIT]Hb,GCn-UDSKăU"u=Zi;R#+zy#FrWi(lf:]/S-AJ.;xd13f.rO'\fRZu,5Zuyrq]foR^?B6Qun1Cd^ăU"QJ1f8m2Ku0JN]C+d&'->#Y.*o]z?0O0I192U1[J4$sDuLZqsPEqq5E67yilJ?yMăU"(pm&r2Ku[k/dS=+f6>PM4nH8g_bsik,RL5b8TJA[=q)Gljx=0(AhK15D/ch3#;RăU"MHe'>^VeaMC^hPEOC6&>Gdo9bBt,b#A]Y-A:4B[w*=h,TX;U9T_Z=FOqC:sGLamăU"x7]*8%Fv6rb_Dq)I\F:N4qaS6.=z%nb;*.\Q:?g+B>4z$ah2$I50:>Us*qx^LtCăU"kjo1u7dmR8GR<;G0:8AVu2my(1$>wnhFMA&.5y6Pq7KCwn_THBs8wno5?QYqzgXăU")^O_U_tJ^sAg52mO*8VVZjp=d3crr81btXd9BRT8n'y:-c(uh,-.I?Q*:.Iz<[QăEND SUBăSUB V2ăU"79]8)C\xIps&n_lt8&Va?M,qk_(8PD%ogNakNXv;[yr<:U?y5t\)^_+S)G/uEd(ăU"wh8brus(6$wQ3Ig7To2Ro]/XQw>,Ridr2tb=Q2GR:ma&Z1aPEeTX4ykItVsvU)RăU"vZ+eES+H$SaFvk9='9[ejiP0RpPwbS=cK)l1Sd3.Y:>KKJN<DlQ-^k7:m6j_GiAăU"7HQ96\Bs9E4-fei=YxAqDZrNS/#z(=.W#/(16KH/lIoJX8f+Xxp_IBcPZu::EYuăU"O'5%YJ#kQp*p<u1Jg_p)nmjPB=BTF5^BaF(<u:Q(juXr,K32(<x$jCrDax&01/4ăU"*[wXm2PgIEtJ<iaes0^w#lC]PUIFa&Ly=V+Kj\_t/$JYi0(z>/>E=NO3>Yka+U4ăU"N_ZQ^)*)u-&>HA-wSa7VTSb*0z3?0LO8HoOc8PDlj:p#jD)t&3D0Wr,/NfOS$TWăU"+<wINSLKj>l\On2MjlD$Q5\8cFGtTM5v*IAig)^Zfl1Jgwoz#Xd)HM;Mn#df+t<ăU"K^X]Ja4,V%<*rWoy9wB4n<Kqh,Fj>9HqdzNk[J3N4/qp+G^_e*KMqxf+7*8?%YwăU"mO64g.mw#?ffcDF23;$6SXF05=oh8heMsBWAHMb\w5+ai8285[_g5pbhbKfwxibăU"q233>Y5lZS<68x1$_bsQAFWdpnfEb;Nu$-9,DEWQ='Cml#K[/7%kzA8*o,j(8LMăU"xy'+)TDJLZ[Lbw5<n5Xpdd<tdp:Zu:I)$j[O1ThP\Ml;?+5p[%o++=['JG(nNu%ăU"RD;5'hJkN$WOWX&F7DE2dGqY$/7>LJ:e4na4Ar^:b4^>Fa3^->Y]3-pTdu6-(I$ăU"%cR.dLpMJrSJU,M.PpOIeN;v3_]e5*Z\xXYmXda)C']t9D[QjlC_Q.$_u(k-mW<ăU"2\0(b4gnC+.YU<<9fx+[/B,0D(1mB)SP9n%I5pf4oYESjDvg>3=P'2VUnL9q*rvăU"0.=C5okR4C9tt<T1T9hWSIBM9C0inRa9i\uir.dpZoDpdHx'MIWC.YF9fXi4Y*măU"Hx_pXN-k9b1k[1V8$WUsdreHjPmfr8+k[ES&kuhSHOZj9ivXd-pyZPNsUV/3BS-ăU"bs4<2bH4z=sRoYe9OYf3W;OzS_\8Ka_?;b<KBjZ76VbFWK<ru#[]2b;J#FwJ$RxăU"8I9N$E$Etj%;N-d](o=uk&>LnQaoSLMk7FIXkXaE[EaZU9qIt(R+i/yxZx*gY65ăU"=;e[Bm)r)EpQpXdZswU*xCcGGGy:>L9bnnkB$UE5l2CN,]1'&A67B*4sMP>Yw?AăU"4,F(#7TI6Vpa-v(Fs'>'XY[jSCBd3P]MYX(*FdVDUM'2;g[SEjaZ80Z8D4hhp3]ăU"uIXKMkiYfPbT+p/v_q>aGdD.h7H_D+mcKIaYkRTfR3V.ODaj6AT<#K+8Y[Fb2vnăU"&\#M-xt1/k<#G^ld(=jEkA%*Y%v+r*69MJW8r#xbxwwjKI/Gc9%_7OL_QNnN7LJăU"KM)Nl&G$U07GhJ;s:K.P9=\4<_3jsIz6RAZQlM-4*6nK*GI4]rc79Nb:tDkNR5aăU"dr0-Lt\5E?#sOB_Tv,$G9jk5IL%c)eqCrrF=&ml9%V3.kUuOX8JE/E5+-=]<lznăU"%st3LdXNnYbs'3U>&\YwkABuAZ$(5gC_hy[nR=LMmzW1l5->]x.p=;IKd[YSTIUăU"+AQjBw)IhDga:;DnBslc+K'VB)r_;H.n3v]B7QPPq$dIWFcOpN[sj%wV(eVu+&IăU"xqQtaZ3v/KLP_Kt5<DZY/G):_r;y6Versc0bj#8[)R,FB+2fh92vp4-6.UJh,VKăU"VTgOX\(bA&R?eKTfM9sqT)K,(aK/%pB(A*cSMfSPU&[22BoV?a>j?;x_[46d>1oăU"_1]4^U17]]G#]HSc*^88[M\)4]_DIiVsI59O[bfkn(%ee]d,,40zAr.o-+Ge[+5ăU"W1)vU_aYKs/DH[K5QHc$bcv8MsG#lge1dHPqW%qG'\qwJ#_uIj1A6%dX1k(bBFAăU"Ef]N4e;5%Zf.<$F,<1ZR-H)p&\-KcOGE$8q8jc]ZP<e1Nz00])GGF[b56hBAWA)ăU"7,dyAm4CqN$rVuiDfR[3KBur=&mYDq(Q[&5pq79Ajk6=Ph2_4uM.?[.b+TBr40eăU"\dpn+oQFnjKkxT&:M;(9m.FfdX1hi9Xg2,AhsN7q]hqXON9vSZGN,FhBVWPF+8LăU"nW?Eb<h?i;JE#FpW<$oPC[af,*#U3VosC*YzAX7%y3jK*hnRbB%XRnsO53GiJ6NăU"u=X=&:pD%WDx+7Zb7By,bhKLNXT>#L3ux5K.y2hsY,=gA#7*2d$Chfw*U_wcf)MăU"M03WR7$GuAPIWRDkPnIPDX;a;J6i]EZiAowc+[8hhIsd1ZxQdW9JfSkQiG6x0&RăU"G,mK-6QF2.IlDeq$YC:,x9z:$[R84sJP5Bod9lhV>5o<*OEggIOc+s8%.4X%$$XăU"$?teeQh$,RF+u,Cx4\R#qlcwKolwsR80X1q[QoQ>yL8hK)X7.j/:HeOX2n.mAV,ăU"ns0#5+KT1Wg6yt<e3fR:CqU52iaD7NbC5rl>17s&aAZfKQrKaAND)%=Q$a(*DPpăU"ZY]eyCPLX;I[$lE.5jl[cD_vj1tiFzfl#;wJb[NImb2tO>G:+/iUDTD4/^%C,=CăU"s<XT%Nyc8*cH?PprndZT1%+S<-*g.1Y;8cPO:QH\rz0,8Na19RCYnYF+G>T%vs3ăU"_hKCN-LDBu%^>0t:*qW-.DA#eSdn]*<$rwmEOPh_idsW-Y<vqUV(SZD8MTHk-GBăU"WBkE,rS7h*50tk/6p7rm(6_v;/2OFQg7_7ciuTrb>uGR>#fLT*4us?^,^2l\#M5ăU"=u)seHGl<E40OI&=]'.B%e%$qd0w]kxxvl;,5[0,u1021znVMdx6$Ze]75;A=nPăU"aI&+u,NA/j(YhRTtwIeZt8gIP;^mmvKABw3:E(jV/xT?M[#0g$HpdQm^-/:q5n[ăU"#iQ7b7M\Vy7I/k(gkVO1J=h\7W:T*KN)_0#4::IMIi,XFhU9[iQBDupyG5w_2y?ăU"gteqUR\[KQ/flXuB&I)&]PED(RV:7NdizVP0bh53MFVqG9..g^'Hz'P2C+/94dvăU"-LVb:SnP,'_dByp^FqS1i47UxHC2yje=(VHLrEl.BKB\k(cj<da]?gfvtQ&_egtăU"RdjPZ%.$,M)Hj+0Quq?i+=It4>ZA'Bstc+>6W3^I9+:q;_3D72#GSMOWzb46KmYăU"dnDs:2xR\EeCF0%0q,Fbqy[VOonnSnnU)oi_im^]%/=CF4k7\tG*==0_\D+PHV.ăU"Q91PDkcap#5s1Nme:Fu$w5&;O2gbYCoTl=^/^Lo^Rx=z_-qa:.C39Aj62iUB<xeăU"+SFFl5\6Eu5?dn.jlHdaxB-4Yjv^m3rHmj/<rm\X0^W0Xx[5uMy=Jafv6)%uI4>ăU"22zZRLFmoIX-F9w*64SDyVqai7YT+6[?KgaZqc>VF,_$(P8L$+T7Ajb+V?(PL<băU"mGg_1X'$)S&FcG_==ZR7i7bnGRk)3R?dvNp5bn_uyA;&)3ZnBiWs_CWyqr(H4.HăU"LuE3z/S3Cw?fqDd+l$Ek7HuXGll&47ifh>f\9wf.MODDvk]vY?cJXvPDZwf$K3#ăU"7Ske7gGf,fyiH<73mK.-tcg<1e-MgPjF:[t#-Bcg;;2>Ag9$-G=<T9+Z,YX*PO*ăU"_ipF:/NQbNPHnub.lV2D?*U=oLk2G[/ZJYSq,agfR(txsSv=$ARplP6:N:wbs;#ăU"w1lqP-MALXE[z:eq\a+hBjm6NlrvQs.C?Ck3nph/_4a(5q^6OQ4l7EqZVdU6S>aăU"3]n6)5c'lDb#9KkI&-<C[^_e8k7;L6R8Dmcp]^dQ[:\t1=?O&&cAVch6i1:dVGtăU"M0M]v4dY&EPTpI1fAG%7*>JJGm5hHd7J'4yj=AhA=4mb'>vXWVC;ryO%9&S;&/'ăU"0[np3K4QJ*kwV6HpZeo%jnKs*536N^wW9VSh=%<&SP]a?<Ng-2IGFl9wFXOuPZ1ăU"_QluuW1YKoc-$+,S:,jnobQd(2_Z_Pmo94_;WdqEP=n9=uO&=$WHb5ZfHacYjqXăU";L',EK)g55%HkE,0;=bZBLmui#+2picuFK>M]jm2l_:s+cDj11te6YP^O4vQGIyăU"BPbqpY9mN1%p,2HtAlFvKHi+kxNnC,oUChtC_B#qqz*6(uNL2xvD+moZ^f/EnR\ăU":hbnjrud18DS-<dUEX24tIe*l\WliqDF/vga0TUOLxcFh.)['77>zna^[9fM<XwăU"EW5UKFAgt2x.Q:Mi7Kc^?97(a.&)o)0v0&3xAZ?NDpm_E>R'(e6[I\&=0f1CAtcăU"RY.(80[?s#tfLUJk;_ad7RA[(dq?=pJDg8pa[+1ew/DCO5dtP4qA01V4nCvoOOsăU"9lT&IMLf2%pS^VUB46Ii]4k<Z(^<-mv$%OQmcGGzB8?jMUe^5:ZMTY.iP=jvv+,ăU"[fwF2_gbBPd*g]9IZ/;rHCDS5LgJ<8KQtnP8ovgOQMZCYtR7isYOHU[7'3:];f'ăU"&25&hDo-F4%z(aGCL))\_5G6:\_vVFsuh*J:kb0I)Oh-c.]Rri.5?$%oLEIs_ZMăU"Z8i0J9c2O^/Gu0v[G7zr%*b?OckK%W:EsA1%=L<gNtWK&m$$=wvUM^?Yp%CEkQ^ăU"?#H#q9i/2.zg-Y)OhNzl-u.)E^?W_GZZN'#>b,%UONl-:)%K[CzZP#WDrF=;,+răU"D%up()%9%%%I-%sD9cI%8&JXA'%%%C,%%%/%.%%'r%xrfs%SnshNFd,>BSU9U9(ăU"f[d(Aps&bxTjh[>omC0+fon6a#tnCs(i1jxTcjEhF7/IJN8s<f52e=,e$ao(2Q?ăU"K\Ygi9W<P#bDS+6SPN\;&T77CbtT=Zm^n*L?g-(KQ'prJ8kc0;&,MdkbiiZELR'ăU"G=_GsoEZEsW<T.3LwuwLQq/kd/ObTRWVr<SjN8eG9knY-\&^idt,tlJ=mOB1,GPăU"rIlHEigN*+K(Md-nsRH[Soo&#Ypxua8:FsYXJs\#1;;[4vXryXYS,mXg$3G>#6IăU">p$M8Lk=J2=/wv5.#l][L.b5fXoUo=Zc)pUlcfw>sdqDRl.pH^V/UN5gHgDv5=#ăU"]=x2]JB'#*4+47<6L-M[&8'0Ku4^\ryMEGjmNFqp;_G'<tiYYsi-Nj7n%K2e<tiăU"*'0L8+/*6OiJtd$aw['=TnV1L,'2g2CAFDRYB*?Bu%QwL3/>757=Qp?Vz'>%<?7ăU")+)rU4J6GmmOi/l_jC**bEW),;wPpV/ZM:CERFSwtKSF27fO?X,R<ht?<O[qC\păU"T;ib^?.u[kQIF6e#jx-sqqcK'8N<,V&dX8M-&]fM2U9rpaSH+Pjk$?Zv'-z3nx>ăU"IL[JWh55Yjx#=1+..dcNmSCh;NAdztj[gq.WQDW%5ixtq-tw,4<.W(FyVB.]E[lăU"oF8mVCL^B,_d?(t.nsdO*gH_R[o3VNwD>%up()%9%%%I-%sD0cIjN7Bog).%%N.ăU"%%%/%.%%'r%xrfs%Stgo2\dNq\*z9#uHtJP+w3,HETkpkd>Oq=k8O3?(]fFBeoHăU"r-At*?YP3o=3:u+TQ%SK]h21GJ=pF(/b%U(VSni=$+CdiR9A$w12F7j4\+?RIp)ăU"ya=7hr5jY6p6&o^FzgkONpkJog^XWVB-X#g#(.gVWC-U-/0k_U3m[Xa3n--Y6a]ăU"x\K7B^qmAv\JPX5ydSK-Y0_ZNjr&2(wT*rl>\$i8p_J>N&BT#3F2Uz*hXT/0T.3ăU"w-zOUc]U&:_4uH7*Q>_>VvWn&m=$(ZCiAlZ/r:dU6LK'0CSPYq5:?,s&Xy7qyOLăU"E<6kg%$=aaUnCF?E1)$E$9(TKQJ7D?#mUu25SA0)-M791B:<II7YBYi4'pceq\(ăU"/hLH]]4<RmF'U:3RDr$GcF'+BJaC:4I8%/gKyQ-:09)?EC3KG5l-;YVb$6=JtQ-ăU"Tl2tQt+;FS\eL()E,8tr\(/\m+ltt1//*O'S$Hf[9ahMc8%%pci,m8e3AdZD/?DăU"$&6n7YqfA]dp68H4P+xodm]oxNF4wIo*Ja$ka:PCX\DaOSc\8:?C/0M*4JcdQX9ăU"\A>r7)(Gmns0D_6^T;5naapAICoC/(pIq/XSxiuRQK]&>U\tBQm0C3r13V$[[beăU",WS3W]=MtnOoS5MUai(;'+7s[Otis;u.bDgtS-1Lgk>:k+5(GG=kOm&d66&L,$VăU".V=8a7g)sizD6hPcW%LxPJ7[q=?$KdJ_>Ct'9X6,#daOj'HI9X*cVWU%sCy(6=/ăU"4od2YIfjaL8u0$#c<nHjzc<*;su=;XdL7ktTmUD5H%IC1bTgsXFb$;f6RAc3-WCăU"hjGZ]-X)D$('VOFO4?#ST8hG(;DsN43[rbT+]?:nwRphscaR.fEM('+2QZ(TkYTăU">UT'H/^0k*O'11FF0pug;>2U0*P'VGUH(rQi4i4,uYXSDS_2;-<wz&bxDv\3v/?ăU"Yzi-Dsd59Melmyg-O=QU4*x$pNj(CtLPDt9creY%HYk2Y[9/HNi?#nDpNvgt/V*ăU"'ppxeegU^-P_1\?b7Jja+1a0Q35.E'-&3(RM4p\HKDsJW:sCb?&+bUhxq=k*w;tăU"s9XYE/V#*.4[OL*9=u(HuY-G.2Mo<J+'.O,.:R45f]P..a+m+.,%CI8pHR*BW,]ăU"bTu6EP4d9.CP=uMO#XxTGcrjEOCv?1olOqji_nVd_'Z;,Bsax69Q5aV#+vH5jm(ăU"o^;_,=D0kyq36Mth=)HmWtBccK.\kqh4oOdNHu;E(-krN9P'?XqeBC)uT,-6RaFăU"L>L6ga]E/,3xo%;Jy&h\/+<hU3CU4r&P[Q44S%gfU1cWBP;BiQOz6NeD29eQMc(ăU"Y;A2hW8uBIrhBQmo3-V,*kK+_v*pshh)CkutOdRp[d>N^%Ck8v-K2I;x]dRPG]TăU"g/5G+/opq;g/H>Uoa0(]LOR3Mck&/(-'SPJ4Sok6mUIT<C[lW.8koek^K]T8vT[ăU"Lu)O?C?Lbgn*^bKEt,XboMM%SF=mwK$4IY>=HNWFA3c\*&Tfb;6oWH;9C6iYJPTăU"B\-M-N3EfYvw;9sR%,<9HiVE97L5j%?C%19cPL%fP],%c)<&CkB1#G2l=6(3;+=ăU"TbI[bptH1(qEH2ddLUdJ&N&up%()9%%%%-%;sDcI/E?FJ'o*%%'33%%%/%%%&'răU"xr%fsSuRgz&e)L;xz^=Vt4(W/e+M*hor+CQ1H394$Fs)rce;?R&qF[A7?-g'bPVăU"&=h<G=h[941Rs=3Acp([8>-E+4UiH/g=3+%n1+r5W?_%[fI=x;_/A7B9Q6wr$k0ăU"V7b,iTpb:tdut5Hvj_pCf$_g0Z%QqD-r261U>m$O)CO_XQKaJ3H15A\5[DOi%F+ăU"Kfn&T^-RTGfKWiJ62Opu-_(FN8N.p[EijmyF')OQLi]U#9c?^pz6+=ZL9RhyubiăU"5CQU_PBxL;j*$#5XW,*0iS'Z?AC7JUXr;CMLUKGLh'Z>?P0KuTI-3*)O#*748b5ăU",seOzOvF+od,&Y.$R_;Ug&O;f-Sog9e#(615p]NX$Y/mWc^3LDUjIgK<wKF_$ldăU"ATFC2?4\D&Vr7\P5Sg;HJ[[u4lKG>%z2Zgc;1^:ILI5hM<)g'do.;tO=X%ZS2z0ăU"Wd?s/FQ9&#q.YgJ;m3Y)'Os[#;\>w2sagia3%rrz5aT>VNUwrmQURtVju7SmwiQăU"kx3)=Uy[p<LWElNKXIpZRY1-&b_Kj+4y)8A7sXW)n;Y[R[V;3mk:mHM-7?DEhblăU"=,,aFMZm+gnmK6wLr9:k5x<osB=zkjqy:Z-JqqjkQ7:D5/zj>A)/E=2:i4W(>URăU"K7jL/7%++\nA+Emo1Pd(bVJF9HcZoiWEMOe^z8X6*\PX&M7Fr<ZCa2IHI'2UWriăU"EeT'E?cxbNLb.zM)ilGM/x,Pf'<fLOnUk-a<eRfWVPWs2$-uVK'EL+P7if_rR9QăU"unoR3R%sJDmC8?Z:E<6q(C/?_-b2a.%i[GcWjb35PWNcl*BRkZEWPdcQEmq-if%ăU"^bomQGmFtQm]*aR\I;UcLQ7&\[8pMkplol^Z)D>[I^md<zg&N8E4OMFY_6#M4nRăU"GqTADMW7grms6V^'aZ6F?w:UJ[G4lVmG?<Je=6\$'aR6r6]a<68H^c6fJ9]oMWwăU"_r7hG;A%B;vV(lLGO6ZaL6?FZa(g6dAm;pWC]BsmiZ#]_Gq.JALQ\q:AnnZM9J)ăU"OWO^]siiN%AB:vIRlnYhwmrHsjM9JdV6<]Haq-ie^_kJrLbegps]hQtb4fx2KCFăU"I*4bBnHmaV:sg>S.k:O%sVRPcycYlSMD(h?8N3_*'5Vx<1=.h#G<[02E_VM<M$qăU"Ro2f83djchWzmPjRTmUf7c755Eu0CBHF5dhQUQ#eH#p1;wq5Sl%XO8y,[-H9\uLăU"^*#3Y:jw'g0U'GD&yvSC(x,A;#hZ#1+^9zu'6%f%N?o9V9a'q3#y,E]F&u?y&>FăU"S%fu2ydF5p%],#lO<YqAFpF'N'W:OOnu)<OU&'7'zLN=-OV&o_'VF-i$w0Gf+(]ăU"qLy0IEk6#_gf*L[(V<Y1GwehKM&;S&YeI%UKpcQ.]-?%Dy256a%w)N(*W#%<xQcăU"CB=I4V/TCgC_WT%DhpyQQKanp1hso6JIWi_\RchXoNT7nzZP.XD69nmP5d3=w$făU"5OOqKewmVjN3eG]<hH$hE*,)F4ThpN.BQ3U3tL6^TaZiQcnkZN,0r,G2zOQR,:4ăU",EC<#NTJHhj,n-FW7lPJV(phMu6m#b=ygoajY1.S6]stQ\92$Oac)sAoO<E3Ed'ăU"[':<4dr;5pu6RP-O_e;jg^b#%7)kA5a^b6O=#)ARzGA*tU:W52vAhn*\+bD#r&;ăU"X]nJt'f+nXH,5]9.#%clRc6O49#I>r%b+.M\(T]m:%d5>;6AQ$e'c)2U4:FE,YBăU":TqC0u:re%nfEO#%5n:iLe*\+M5i\'lE:)R*_6gzc5'(R:k$&RE:OB%KW)EA%2QăU"(ZAe:V'vo+z#%:J]^*idc;Fb4O/#N3Hf*2&3:YK,']Da;%$+2D\L_.OBz4E%#*aăU"XZA%9*#I:QVn;f4k%&2&L,:x;PhEyFT%w)yM4zY(12]d(/eN*jZESa'l8xl4[b<ăU"2g8cQwDG1Y&C=YdtDrUWxw:#Hu(%up&'%9%9%%%%-%%B(/JMh-;]%z(%%'5+%%%ăU"/%%%%%%%%%&%E%%%%%%%%%wj%firj%SVxy%up&'%9%9%%%%-%9o8dI?<c;5%53%ăU"%&O^%%%,%%%%%%%%%&%E%.%%L(%%%yl%fSfx%rup&%'9%9%%%%-[%Q9daIgD.*QăU"S&%+%\(%%%,%%%%%%%%%&%E[%%%+%6%%y%lfSn%shup%&'9%%9%%%%-%29'dI0dăU">l.Y'.%%p(%%%,%%%%%%%%%%%%E%%%&*8%%%ylfS%tgou%p&'9%%9%%%%-%t]3.ăU"JT:4ZI_#D%%:&=%%-%%%%%%%%%&%%E%%(%/;%%%ywz%jSgf%xup&%'9%9%%%%-găU"%sDcFI%8J%XA'%%%C,%%%/%%%%%%%%%&%E[%%%9#Z%%'%rxrf%sSns%hup&%'9%ăU"9%%%%-g%sDc(IjNB+og)%(%N.%%%/%%%%%%%%%%%E%%%%)#]%%'%rxrf%sStg%oăU"up&%'9%9%%%%-g%sDcCIE?F+Jo*%+%33%%%/%%%%%%%%%%%E%%%%?#b%%'%rxrfăU"%sSug%zup*%+%%%%%-%-+%.&%%%]h%%%%%ăEND SUBăV2ăCLOSE:IF S=71AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăLeandro Pardini                MULTISPACED FONTS V2.0         lpardini@cefex.com             08-10-98 (23:33)       QB, QBasic, PDS        187  12426    MSFONT20.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MSFONT20.ZIP",4^6:Z&=9060:?STRING$(50,177);ăU"%up()#9%'O%-%n6./JVi.vn,17%%gR%%%1%%%%rx%ktsy%WUSgRfxf)q<B[A=6wăU"gO$xVc[2\p%Ksm5Q)*$z=Qq=x)Y^=k$$%(z(1Lk4ppak;[xFcVXa\_)[QHj_x+qăU"FZImFavqFgtzv>QbB/GXZe-]Y^'fEJv\Sz*,NDDlJ0%plcOU:/,8M1HS;0)ABKFăU"NaHud8^=ODpoqfpa3<tN,u:S^q=n;PQV/.kT0;So#*bGf;P8A.QtbP_/WhI&0,văU"X0&4_WA:,KBGYG&,>fdL6j_E]#TvL1=fJ,WsCK5,:u]ttf15K#;K:m?seuU-4(săU"Z<U54Ad2U:,T]mpr%s<^uG*:Sj4q1$QII(?IdVAKEM8LGE^Bo2S#K5k,$[uMK9JăU"c/uqVg:'FR^bWP1W8%%Ss(%J(]P+M_?U]1D1f:D*IFf^9G->[0Zh_xL/mT3xqpjăU"NWUPXgtIdobwYS2g>2PX>aj6]1:0_&<N^cO?-=<hk9)#alVsHVUKBOFwZQ.=PPJăU"nTN'w24e,l=jjHT<_d)>#THX\d&)J;]E(>%]h^ajB,yY]o]$kR,<s2^+<G/BKqKăU"y;JJVLz'0SW2+\pyvCCg[S6]Wy/1V0AcG^3[_8f3pLvfp.nj,f[iQPMTR8UGr+TăU"PWXl.\o(X#>2'4+fgr$R)=eM\PR.'l:c#i^rp/*W_aSL,S'*#RY/G:4eM%&F.;WăU"la-k9\u$Jkbj$%2XES_z^QlOS3a*T/Y+.V(^d-tayng)YW<FJlvv#T;Ase'*]#CăU"6nrX97e^7o8r_E2JWSK,1C&2F<CQgN0UT_95-Fz5/9g,:&f?CV9DmPokh$MPD:năU"Zb6[(HAB;eV'eW:CU\?v7\A[JW1c*R8=9X?J4lM:-ETEIiOql=OCLm2T^d0C%bKăU"'nH&chg8ft1f/bc[f+p*h>j+Kg/<%_8P>[oc$:(A4Bd/aXc>L_vZ;0cnb_i#Di]ăU"\[AsoRCBhP5cKa(R&8B(,Ooy_/OtleFmMDk6sa0^^jLmR%.Ms;&M6+&JiF'HP7qăU"_GIGQMHSjl&YdaO3mC&n-31c99(,\?2=,DImHglj8M=O.ByGr4u/)TFOM[h/lFGăU"O8)r=VW3%d;m65:g^tMRAW;Pg_hB]t[A['Y*UGm2h?wv;]o&bekX)3/Y(Sx2jorăU"eb?>^qs/&h0OLrAtqOf2dc.#;Gg)KIwtTGGCd9FNHK\2RE5M[A2V2Uo*T),#2SPăU"H51f*-\;:cec>)C-xQon[i\Vo)'Q0AF3BD/a\c.>lr;GiOh*]-oJ^A?jx,^.&mIăU"hr_6g:X*tO1_R6&YBw+fh^XKc19&WNoRIYK^TK0..[HLc^4oNUaN3ottYd)NP1\ăU"ge*Dh)LkW_FM]9kul>v5J.bgdqu+miSH^mpwSUllow:zqUiVWFWcspPjqF\;VqLăU"A9SWKq<aC(anpY(S[k5f(^8pN6$5d1u#TG[R1-6cxI_at]>K^U&FPcgHr+qXrh>ăU"31r%SFpJPRC8jui%+sk:(EmlIiKUH);QX<wY(yy9sRc_?J3I=X'/9O_7i^ZVaEOăU"854IE3MO*+cC_W6j40(Hmj#mj.=],7CCGY4+BHg_]O2V7gbi/[$%Z4L')wC+U^făU"c5*(kiqWl9(J<3Y,]S)sL/U7Tju>1g<q7u*htbEFe*<%A)SluJep/TK;%4-v:j(ăU"bCGf'1]IsAD7Zt\Q&1ABcb_#/f4dAl2dkpkPVE.*h7/,2;=&N^cw+<n+MA+2U3EăU"\+]/&exH[qxZ?%6lmgdT:64F(2)jm7z4;H,.#pTA*J]R$uuOH*LyXJueX9CqG:uăU">^e^z-S\WRMg$.dDOZn_LQ[JRm[15b$rNP]O_Hg,CY%m&t&;nte&CA:W,2g_AtvăU"\5nYx]YXR%aGv8KotE:68jgKoaq$bI2oJm[:UXgaJD%<L&Zs02y35R1mCOTjOI^ăU"'Wlta?t9?glVYxU]h<\.1h'f]hm_Jqjuv%4-IJtEAID7S2g$Y*1JBI3qr$;VjZ1ăU":s%oO_NKry1wMSq&sa:9wk5hl1u(s'Uy>Ux8rK?g>d.TOyyOe>PG0YyQjTTlbD#ăU"BdE9$x;WXnh9ZCinTpm=lmE?^Ql<g]sI[$ZS81U)jPbYJc(TV8mZ&GjYrS&fubTăU"]5HNOohxs'*-9Iy+No<v,5;pJU>BUIcG#RY\=DWH3_aI;kFvtuL1BBa8FwknO:aăU"gdaVGK3vE-rOy8q/fd-1d?o'ZNJ=E0gMvcBbx*#?HpNWnOWs'IYem#?vF5u9K^EăU"?$9JJRSQmBTSAV<>fw2Bj#e^hGl'2lTWdeJ2dQA2Zq<g,i#vqK0jvz$#u>eltdwăU"TGH;jv&4:McV/c]kffRw66t7YPa4U0$QlJ=Exd;+Bj%q\q=To8ApUIlT]8^%x(XăU"e95uU%&6:.U\Vi[ZAoe&OuO/E=q5m7N,oUe+NKN6<ZY05I&V&mO;.k(j4TQ8MZXăU"2qL0O&Uh_&F^H&onoSFA^JFH*tcC>FAbdp#3e3B3$Qc4$zf_f5'c6X=NkR%Kw2MăU"*',s>r[V69.RqD+N\=BrE0jet4;8_ROd)or3;v-9O$-]p(#hFEU4;34R?x>jGg3ăU"oetAA2cNMw\%sex5SEkkZxeek=kxe1LrSN-JesrNDAusR;NA/shRNA?Su=u(e($ăU"\vE2h$\?vBR$=(wx1uw8EYX]&LuND,TFIiY#9nWuFVg,VCR\m_eeIw5('*8LnCmăU"mYL,\G:$H:0hA.S&k$\>mv$u](aYX$j$k3kS6Wc=e,D1/()bYYxoC,&bStTadl4ăU"j__rq.Dt[intPGuM*/,n_,)ds#OBmDzJX?+;ckqE>2Y-^m^s?X$_T)Jp\#8Tg=%ăU"HrG&;Jk2C>_a'.n4>UBIrfLr'%66i*Q*KD0gt0l^L7k,4l\%%lZQe7\G<S+I]k^ăU"mhxNaBmCl0C8k_^&zkMZAlvYM:Fq4WT)97rb)]%PYLanVm5&4M7GnEE?1qnY3S?ăU"rvq:p7<#=r]ho%I6k'Al[pBmOv;^Ghd#\d5A.UZx,];z^N&&Z?dqMq4C^.Kw+e\ăU"ih&weatkR.?[mXg-]Id<3VV85A:+($E3lTd%pLNrfA^K./euf_\WCmA>.s*5X4KăU"g^3PL_9']33n,F-_LUkngtCQQ^ZR7j9L^4P=L=t;vuW&27)WrfNYI]ZIW-Fb.dyăU"oyq)Zrr7)Dr?)_6eF(C?d+hSkTJ%h$$wBqYRw=]IrfQ.1&H3$c_D+'*&0f\PF-GăU"DrUSIk-'0_2?F)MtMwWt$e.e96OXuNIgU#2qs:pkn$*M-k;k\.e.2)rUDldb&KqăU"H++X9Q9<W7_il2q\bhyvlLAXTnAGB&7/;k7Nbfn([7dgtsmCiis3YCl.6CwBB?iăU"c6xpd.LH,]iVakhUiheK(P;DV&LN>o$M8pcn.z&l?GILfi/7(SX\J[rdX'71K'7ăU"\.iP]2*7:7325W.9ea=pY-(8fS5fcdJpqITrcvtUZA#X>hmRV^]uZFk;Ew-QPb9ăU"-uUW_Z_ckaC1kk,4lMJe1<SdsNNT+/h%o:dsH7dSv+N4hw[Gg\xIxBLcb4hz\)QăU"7>A(K/S-9xSMJUypoF3I_tt/DBlqyUorMb%s=lHGF5;rgtKpLfNp>qQOJC=yUZJăU"i>l+m=Kte3MN44WoQ8EH>Itd:Mu5gKu>=A$%uhPiw+mzOOoqEc0=LSp54Jrc1t4ăU"d8ua&gq/,2aYkyf,?wO8J-_)(C,J0$Ci:OPaS'(VOANONSH2ZNXeuAtt**p1[^)ăU"H3^\GY?bniseqvruTj;tC1^k-g^G/z_t&M\\IhGQ1Bahg=rh^ss^\E4[e#:AFssăU"hco4C')RJJUO*ctc?vC-NVrpl*0X$Gj*qXRl[O8u7sRpLlc.#gDQztk)Gh0o5#1ăU"OmKWvGS(Nqo8-'dqGK#4k\Puf0P7RKevNb#FHJeK\&rr$:.<Sp7]X0?2E8Pwoc]ăU"Qc9o,/W?_/lc-k4w-O(]bAZ>Gv.r(KwwWH=2IPtjI(ae8HTS*3=j]pALMBLFfbtăU"$g8'Z3rU.?8LH,</'b_Q#C%c&JXnO_&S<anZR2sl>/kc$#4*H]D$&FN%k(yTgk%ăU"4.JTy$I6P*Wl_r==$kJwYhz-[,iX-&7&a0xR,Px%u%p()9.%'O-%%?=(FJBsZ+jăU"n)%(%C/%%%.%%%%fwn%fqSkIts\%<6]U[75CwmUGtnYB0^=P&#*2QEYD?>[>=+%ăU"IE+KxW+^)4KCP,=&hwjC1e^_lauZG^(cQ/dC%Z9&2;$>m(nz$Egf=?U&>m3^Mk.ăU"8iKw)l:Fj-++G6mEJ?n)gzO(eB61D:6,h<XA+TGClbX]_&83bWXHZ.QJ1EoOx7BăU"&MMrK.vs\oJfZM41$5>eleR[+vIBNA9G.A<9Jc:'&W?/26gU'MAaCwLXAI>^3uZăU"'AO[?z<I0AX*cxv2nEY19aPpGGMjGU\_'6i_$:kQgQ$rKkGV%ToCd7M?E8ScaEnăU":)b.,sW.)J4gLfUhiEiR_t5esE[uVu>f<o2Rx/c0Nsx/t/M.IZj2i8q,GNlMb%7ăU"a\#P\d0e-#9.6pOP*e3[($gqVlD-uL*63N=.Rww*%]2D]oIulSF.GaxRHI[XMcwăU"/x95<Is7uC[so5jn]DPYLICJ,sUhXY8fs%ks%Tkv0b1b)V<$r7z/T^VSja1OV_WăU"I63Lo92-[HTQ_?$py'XbzA:Q:B<>6)_bXA/.A03P>#)]hFAO_2KurbcehO0SAkKăU"t'_]pL:F'E*iJaE+Cy],-jnk(IfiM)R]Cs+:?(m;n7L,YFRGLv[?6Ya#*[Mm-,]ăU"AuuGhJ\#UP>^%[akpZ(kX:&S.yIQ[CPBvA?9A(P;VoGdt58EmkcZbY-OZqtmd\>ăU"1jx#dRGVcAW9;Mt)Eg#9J*=-S^S&0T#.hSI%BaW.Yai1/d^w.b3#HMT-HKNL=:+ăU"YpMp\O<:^R89FAnVuU)^Pg\DKjJi8#k\=>%jfco)>:(tFMSVF?0Z(:6?XNGBHx)ăU"H3rA^U^__X?t%YPD$Pz3Gi:3k#FX.X,*pZtJTgSWtr_I$K$8^n+h57t5MxPHtrPăU"7Mly)yY\PXb81O?O=[Jc>;NtjbHq0AX/kHSV5^j)lrX=SkFus#Th&C_)PZQg16iăU"8CBc,^Z+o^Z$96+3.]4w=l1cC&^;M*'x2[^yFGBqk[aKlar=ENxel3c%Qcse(X,ăU"st^OwM0MRTtrG?=>YIS(E-<pe]?o*;>=o:f0)D1K=kc>yrdb]2e9FF)^Qh82RPjăU"deNUPk?W[+iWU^Z,.H=X<SC12#Af'Ip9P69QW=E<x'0JO#mCs#Ly#Hl4&oeQSnLăU"5<ZVh7&J=98l&16?#hb,IB.>cLcdFd>GK\u7;U5UPrh8^p.J4YA%nnhj,yn>BfXăU"ZSn<ujT_C5NZ;8bjU*>9.ipNSusl_D=Vz5NgJ4IvI?uC5Y9eT%EU,u'P?X0Y8;5ăU"S.63lYTr,iisw&Gl2Q?\<(UMU&[9RYj[ma7hVBp$gVKuH6pFoUJgVXS&G,>2$g<ăU"ma]iTXLuGN5)i_m),U$P)F,T0C_22,KW_]wG9eC\<lx(j3GRn]i?',%g6BB#cimăU"xcF=qc_/Xskb]a[C0l-r$?>-)boH'<6f<V5=Jo_\:G'11\Htelwpof4Vt=EeQxKăU"Sjmucsvo7aAt.$ooYHpQY=SPPOfW(%(&D^fgIp;8v4W8K7hgB8nXa('uBhS-<PsăU"b-QQnQJ<M9VR#\'+VC^K<#k1);)6+3\aH?SWN<.4lK]66Y'M2+:i4ZR0M2FXlE?ăU"G\1<\/mu;\g5ndB-,><m]4o,y\nD0E#C#+hcDu%p()9.%'O-4%ig(FJ;b+,ZX)%ăU"(%30%%%0%%%%htz%wnjw%SktsEF%bBB\[5,V_O)o\CGT26EiiX^XF*(JXZx+n4yăU"+mdtuxK/tpeQaz3ybgD#bJSswbn09GTpAdQam'5*eo<osGim$7i)(D'%0(a8?dVăU"Ymlcq7XgK%wj\nbnWQtE-)w1ewoFsY0*LjK=wpz5;&*O^yl9SfKBD,WG<2oSi?=ăU"p\4oL./gJkw<;ZRnM(98^SG,Nv*tsJp&:Th?$SSYjdY_YkJ2*A(B<D55eUsev$$ăU"32*85b]1d$ht'62Z]>i\T5mF_7hN^hJzHkU5UF=Sh;]RHsS8-X#]RjoW?dq78aGăU"_EbTrNw]JZ;+cHwq83,#oS>4+D%reb(994Bo5%/UCGHpLP)arzl,$H>L,/uJqICăU"NksvVtN%V4VLShVQBZuAWYJMiLI]/d__;A#?,hV?Z,nN(2Lkr7tGl#:]j(=#kPlăU"1qlEhXR4<g,kC2h/^v2Mx[hAAIEs4GC=R<<IYx^ll0h/R<$*/bS_tsThnXABH4-ăU"V>B/\cJCcB)auEE%h[_v]jW_ZJQ5$aIT-&pH9BbZ#]PxS/rle/l9)CQT($FtBXsăU"Rd#N_*xfH2mwI]F8s=:srGy;Zb%u8Jw:.?8_Zy4V9s>a+hj?:RE-vmfsLb0+/A'ăU"E?w?42FXlyu*YJ8mvt7S4+D]B2E^MwCf-9x<1J18?)iNT#v+L*kTmdA/Z0%:b=9ăU"s_15z_vBAr2W7Y5r-^&nH70FzAtrMzCw\4R>?F8BmTj-%3pXQf[)G9As=YT;FT[ăU"r&Bsao+MY]:CDMF/6:)J(Bx-)d9hJk)8)nYo/9*Z-enN>xXNGQSHwRVD\2ssZwfăU"q>0^U9E6->NSQd%[9;X>+fr8UE:wI*G$xf[jdz;Mx&z^T>)/g#y;)pCy'WWhr+_ăU"ak\hXk$5D.:RAo):gBuS%fJ$UzHST.vm6Ccr7>V9bN=N#jT$[$6c)gcsdW?2Te[ăU"bzmFN1yxL+c*;Y0kS3Z&KMn_%66$R5r^87D)=lifZq[&si+BhUf=ujHljotM?cOăU".],>5k>>h)<Xkc:Z(7hKZMr+<W^WkiBzArUH=$8SHh>f0azkEHJ'M_FVKFP]B)oăU"M$hlL(yMtD=bf^H1>RGFm/&6S:Xc\o)KZfFF24mO:7&.(K%-Quj^jPs0u2slfj2ăU"=$>L*t(dO0IaHsO+RoZRN=aTXus4&50mlL%JJzG0lobJq,4m[:wGF^$%:N^XTt?ăU"RN#TH87].Qyf0THOn?LJ>N3SgP'2o8A'2cmv_k(n<b#>Xx=:Y1n.,Y<CZYccAJ.ăU"fq*L];ead0_+Yj=Rd<XO_=OdnY.6w*3]q>ctM]_9iTemZjDWMqoHH0Mq+k2>nBrăU":nm*S2[YA;P$tZ'bE7RjpbSA0O&LLdfR$5.YYi#Bj6brA8'%VHtifWU\4'9kQGuăU"Oa4_+();SGRWjmn0c#t<^\8/b;kY63Nh)s95XGd?c#rT').;6c#r?p=9Q?28Ul_ăU"VhPHu7EoLLK]9cdMnI+JqU_(8'\DqDIusnqugAjFUS1I?SXr)i'[0PWuiRkQ8:#ăU"hmYNv^;a-jV=m<q0d>l;XCZ7Dkft?u\rm+<g'Hc,;qQ4j7A&>JwJPa<qow1F+AHăU"TmSkb+Hn4u%p()9.%'O-4%ug(^Jr6['\7+%(%_0%%%/%%.%x(x%yjrS[kts6e%VăU">UB?7CAjT]mgtK]b]A7ta7d.MON2h$Y5E/$A_[GSx7:SVPi2t-FJJP950C)A8+căU"$u)vj(Jd(Q,Uxa.=ETOMREQ/nR)3p*Faapch.4hs;YgEuGGEG6EGFBD9NS,9a0făU"6<f1i43,sgql#a'P5.cG9rsZY2tI'EY6Qd$ACMl16f3=3Gf*U-Wa\c]m<bgEEZPăU"DZ+_vRHaM5<Q=2QdEgmfs1K.\&;n3c(Ju0]vUvrrdH,&o3rm$ZjZ<=*>mSKV]tuăU"h,^y9n7>CIoaOa)pS8-:X2KwKT+1lpEMA%N/twAM)V_'ZtrKrRn^,.]hX-74=\%ăU";k7Dx\/KWugUh5';<Yo;WolR,);;/plUW0eZf8vadTb57jZTEi[xN7Sex3t#GIbăU"tcLW%q9skl)IvB(jGVICrRcdf;)bBH(ZDVnj4wrERVTMC?<rM#4oF#/:htDZh?4ăU"tA>en1lhRjO7HDtz)OJG?7oJvk=G%bOpMLxG7>>OY^2j6CT.+7&JtqrRqkIiS/tăU"_9./tA;u5d'tWUvG,M8q9mY)ewB#3.S.__BiHsVh.h*9f(_Dd\L=XMPL=C>VFI9ăU";KcR4Lx4Q:E8Jlu6KlOb[m+NgJi4$p0BV=gdF4:J$'o,7OPdnqUof)]eTSLdMr^ăU"[wC&p%D#F1]T7%,d^UW0Pb.SNds)5-FW&v5XTnlM.:[_Km%1U]#u0;CfU%IvnlYăU"p&A$Buysss7-Kum7u.4Pt7#E)xM8PKv.p_ZsILvh];R8gC_^d]iH0Gn+QVUsZ)_ăU"NC6CJw7/y^=$:c7Z:RyGC7x^GRE=X(Lo'fNLAulDko8iPf03P#HM9LGA8%$kC\hăU"-CKjO3Xc*6asB4*&DrXE#;Wjk7lRnz$MS=4d\oQ%=NJHEUsL73Ljgnl0jM>LcGjăU">16>#72Iq:^I;2S&hiFoJSJta0lH_.tPp=-[x_N8CD?F^)Wk_Ju.WlBb&[\sDamăU"u4gtIsU0MbA6n(FZB79bd1hhA<?=_AK>4_PcciZ+Vo7VO=%k-vN7DQ:^pr1lx03ăU"S>r&r$klk<0G[S5L^BJaRI*(&V^deO90LbP,c5GhNau\Vxms+BrxDzf*p6sF1n;ăU"Es<ssL)r<XcJ$[9YNeFrHuDDJwuOwOL?FsF0WggpvVP^ABke7Dq?D/Tl1u/KiqTăU"%DntE7.UTSD.l=(#h1o:--BMw$2+;Z::X6gTt6cWlb%F[ac%%#;nw,]&tP>N^TOăU"Kl25GsDY'3NgThbB:4,+FDJ7K[/b'wQdb?y\L/B'W->fF'C%lo#K?mX_bX]o1SOăU"c9-W^d:X0Hm^G)wkAjDu\T'kCHPi^$[QB>+#m<>fjr<ro?+$DH5Xr=f^,[ZLS8kăU"VE4r*6X#sJ0t,eiXg1F_H<V_$nih^uPj4qt,r.*:2x:FpBzx=X7G:'KV0R?=,aLăU"ET90r%i7fn0V'RNJ_?-YmP&k.oQW[j'fs/:O3o%mH;eh2W]X.WXShPC_M$xH8t-ăU"K-<j$Uh+4SNgy)J?0Tu'a#eYDrcG#/2RusQ]2%Uy)D'#sOPHf';:GdhZVE32i&4ăU"F#G#JWc+vrYI,_+V';3/t]P]0]'snPT7._9F^El9p<G+V%EqK0;(y1kO=DX4.N0ăU"dZJk%e68_NM1Ae(PB/t/Zp^jDzcUZuehb.EPs5p?c_2q#Vlob<U(i2ZVffx8/<HăU"WkENV3IUFOfne^Tk(,6bxga;TW&WF4<MGc>)g]$/_A*OE+g7(?C:WHA7>>6o\[WăU"%rjRt<5n[m#]1$RKue^)4QaNJuYf<g10Hw,850h/65l9=ZO+>)qJbVri.^Y^nHkăU"TX^TFF>',TYB7V2s+Gu9x;/EEL^eYPR'U1CFw69fu\$*Te,7VF=is[LDnUN29;2ăU"U4F'99TH2Hb#'?PDm'AYSyVpdsxhM\VN6a3%G*/%VnS>j:bhA93/9yLCxhEq4qnăU"oF.&:hCaMmrTjXe;j1jMhcpny1?4<?$;lpeMmYj+qrqYW=8%&up(%)9%'&O-%Z%ăU"=(Js6wT;M[*%%G%/%%.%%%%y%nrjx%SktsD\%b^BU[5lI6nXcQ-0S#'>:+G3=6/ăU"(4,)OY[SwM)8ZZGe+yq,-gnYC2BKj/d7Nz],Ket?h&A0<N90q2-_+syb<[Y5F>xăU"669Ck]]#kU<^ZuiF5N--uVB<OYa'][js0<5&VO\M2Z2VFn7g*eoB6T]Kh7G3C+\ăU"aV+YIai7]1YuedXU#5epM7%%:Jzm*z264W154\iW^WUk-2ra>kDfCjY63IgaW]eăU"oYn9h#;;*8#gt$0lSS20(*uTTB/>TA)_Wh]2pgbDyL6l3b^N]B.1EU14m2A>qqhăU"i;:p&]S12NrSdb=#)O<YbVRrdB0kH<iW(mPKe'))bhIn7hY+Mk\Q]mi:arUcJE[ăU"t8wD2lZ^X^f?N.wxX:i\e13yz40c;AClhYq#s^gQa5G8uSJqR9I<(e2x3^<*T$SăU"'FQYg4%k-e*CNr&D=WBBCN%\%pAe8#rOSZd,7=<^[><RmCJE=v4QX=GHwgUQ8P;ăU"]]3bRZ[UXb_VbBJYw10-<R:vfIRc\=)?G0iJy*=O(;GtZiRGI5s2:#YFnizCH3QăU"$GDQFG*lVdeOkJ4[DU.<VfOHp4*ut1'oTNq7ag8AQNE[\p^R$P3*J:P7s5I()71ăU"y9ZVhQ'rZXcs%4W+j?*FxHb2atYFqiBm^).Dns.e7-a=pb[CeeRE_$.'T1*W>NIăU"*tMD8,'^9XIQTEQBrEAK\=iw]q<)EmCI$TGFUWV\Y24,M[CKMj.K=TRLcgqWBCWăU"M.,?g,%u6AMm,]mIC;FH[HENj861o:%)F6=osjn+5D6<WBm5cj[4u_QUUPcI=RgăU"gS.TEhH&7DtW2=re,V1$4S]K<$sk;%BDRdvH>cuSO\2QvL-e$F&$vo[sDcPkK>$ăU"4c0Vnlf?WsEhbe(/Rdt?GC>*P^HJr'oI1vw-hXiad8OX5$)c-<rVX.L$h$qNbxfăU"hb?b+7Xw5dFWT([.H97I/VeeDv)=*Tne4>a_]63+?DJ0uPA<QW\=qVt]P/6C>kEăU"<\VZj;rCQLHqHkkb=>)xqIs_6YM.Px^$mQ4Ud9?+*j(O*E$QhSdi+l$.WVy(53găU"z=jse;0AZ-XEzZkSvto<pYXbUqs'(Ttnr.v7Vw>y,5eHHk/QiBt\5fii+T2eV9OăU"SJ<d$Pc4tT[XofC\S[PrLO0oYb%aB&*;:%6bUg)x19BX/=E#Cd:,=KwU?3V);A6ăU"RxPqRVWNS/:H^t\?c+>ngk0u_3*5yfJ_WAWlzApAtBVO43ut&A)=m6T4(.Hlk]uăU"\d<DaXvnp?_i]qoxVa<Ph6M/Tx+ojZTO<JbxhbQ/IQv_K+4_+m\9r$]Kc3utbqYăU"nQmek>_o<tSk&L\XMk8d7OeOEMnm]$2rXqXEcXtraEPM(Nt+[59C?X<M==8d[BlăU"TL%ZRsF1mt^0j0TXLH7Xsst>0wH49e[SH.$0B\)(P][3Y6kR$ay7Lh;LBH1YPH?ăU"98bL\67lj,X_VdP/0?NHR>6dD;.EYm-rFV<ZY.i*X)%ZI(8(HUMWh<a4rh5BT]_ăU"Exjt\k?l(svvcLroWK+2HIr]g&;:Tfu=%Z[U2b%#VR9lqKn'[(W2KJ\X8(qGJ(QăU"?Jp6]((l%6idw_hA/dNY3BEzB=O3eg8bSX#uv[1ankOA8D?$]LSdMfq\pKxCh$<ăU"]?A\=[([ksnlLi#J'E(#a>.-9ZMI?$:bS2HD(*Z&0=>*u0%up&'%9%9%%'%-%%năU"6/J&Vivn&,1%%'gR%%%1%%%%%%%%%&%E%%%%%%%%%rx%ktsy%WUSg%fxup%&'9%ăU"%9%'%%-%?=7(JBs8Zjn).%%C/%%%.%%%%%%%%%%%%E%%%&V1%%%fwnf%qSkt%suăU"p&%'9%9%%'%-4%ig(FJ;b+,ZX)%(%30%%%0%%%%%%%%%%%E#%%%r%6%%h%tzwn%ăU"jwSk%tsup%&'9%%9%'%R-%ug.(Jr6-[\7+.%%_0%%%/%%%%%%%%%%%%E%%%&z;%ăU"%(x(xy%jrSk%tsup%&'9%%9%'%%-%Z=[(Jsw*T;M*7%%G/%%%.%%%%%%%%%%%%EăU"%%%'^A%%%ynrj%xSkt%sup*%+%%%%%*%*%%>&%%%YG%%%%%%ăEND SUBăCLOSE:IF S=64AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăThomas Ludwig                  PB FIRE VERSION 6              lycium@hotmail.com             08-13-98 (00:55)       PB                     185  4383     PBFIRE.BAS  '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'PBFiRE ver 6ă'------------ăă'This prog is Public Domain, but if u use it,ă'credit me.ăă'Thomas Ludwigă'lycium@hotmail.comăă'I'm looking for people to join my one-mană'demogroup BlackBox, so if you're interestedă'please mail me, and I'll get back to youă'within 4 daysă'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăăcls:randomize timerăădim dynamic img(32320) as byteăădim dynamic div5(255*5) as integerăăfor x% = 0 to 255*5ă	div5(x%) = cint((x%/5)-2)ănext x%ăăprint "PBFiRE 6"ăprint "--------"ăprintăprint "Here's the latest (as of 8/7/98) version of"ăprint "PBFiRE. This version has LOADZA assembler,"ăprint "and in case you haven't noticed, is *FAST*"ăprintăprint "Punch the beige plastic"ădo:loop until inkey$ <> ""ăă! mov   ax, 19 ;Set screen 13 in ASMă! int   16ăăFOR p% = 1 TO 127ă        OUT &H3C8, p%ă        OUT &H3C9, 0ă        OUT &H3C9, 0ă        OUT &H3C9, p% / 2ăNEXT p%ăăFOR p% = 127 TO 255ă        OUT &H3C8, p%ă        OUT &H3C9, p% / 2ă        OUT &H3C9, p% / 2ă        OUT &H3C9, 63ăNEXT p%ăă'OUT &H3D4, 9 'This tweaks the screenă'OUT &H3D5, 3 'to 320x100 resolution.ăădef seg = &Ha7d0ăscreenseg% = &Ha7d0ăimgseg% = varseg(img(0))ădiv5seg = varseg(div5(0))ăă'Bottom line for 320x200 = 31680, def seg &ha7d0ă'Bottom line for 320x100 = 31680, def seg &ha000ăăStart! = timerăăDOăă! mov cx,31680 ;Preclacăfor px% = 0 to 319ă   place% = px%ă   ! mov ax,place%ă   ! add ax,cxă   ! mov place%,axă   if int(rnd*2) = 1 then img(place%) = 255 else img(place%) = 0ănext px%ăă! mov pm%,8000 ;Start at 0,0 (25*320 = 8000)ăă'wait &h3da, 8 'Wait for vertical retrace, kills flicker and locks FPSă              'at monitor refresh rate.ăăBegin:ăă   ! mov ax,pm%    ;Move pixel mem location to AXă   ! mov dx,320    ;Speedup for 320!ă   ! inc ax        ;Increment it per pixelă   ! sub ax,dx     ;Subtract 320 from AXă   ! mov above%,ax ;Move result to above%ăă	! add ax,dx  ;Not done yet - add 320 to AXă   ! mov pm%,ax ;Move result to above%ăă   'p% = img(pm%) 'Grab first value from virtual screenă   ! mov es,imgseg%ă   ! mov di,axă   ! mov al,es:[di]ă   ! mov pixel%,ală   p% = pixel%ăă 	! mov dx,above% ;Move above% to DX - fasterăă   ! cmp p%,1 ;Compare p% to 1ă   ! jl Skip ;If it's less, Skip the pixelăă   'The next line is the "core" of the routine. It blurs the pixelă   'by averaging the colours of the surrounding pixels.ă	p% = div5(p%+img(pm%+1)+img(pm%-1)+img(pm%+320)+img(above%))ăă   ! cmp p%,1 ;Compare p% to 1ă   ! jl Skip ;If it's less, Skip the pixelăă   ! mov es,imgseg% ;Set mem segmet to img(0) locationă   ! mov di,dx      ;Set mem offset to above% (stored in DX)ă   ! mov cl,p%      ;Set colour to CLă   ! mov es:[di],cl ;Write to memăă   'The following lines of code are basicly an assembler replacement ofă   ' poke (above%),p%. MUCH more complex!!!ăă	! mov es,screenseg% ;Move screen segment to ESăă'	! stosb ;Write AL do DI at seg ES, and inc DI reg.ă	! mov es:[di],cl ;Write CL to DI @ ESăăSkip:ăă   ! cmp dx,31680  ;Are we at the bottom?ă   ! je DoneFrame  ;If so, the frame's done!ă   ! jmp Begin     ;Otherwise, carry on!ăăDoneFrame:ăă! mov ax,f& ;Move frame counter var to AXă! inc ax    ;Incr AXă! mov f&,ax ;Move back to f&ăă!  in      al,96 ;Get input from port 96ă!  cmp     al,1  ;Is it 1?ă!  je      Done  ;If so, exit the loop!ăăloopăăDone:ăFinish! = timerăă!  mov     ax,3 ;Return to text modeă!  int     &h10ăăscreen 0ăwidth 80ăcolor 4ăprint "PBFiRE v6"ăcolor 8ăprint "---------"ăprintăcolor 7ăprint f&;"frames for";Finish!-Start!;"seconds."ăprint "Did";f&/(Finish!-Start!);"frames per second."ăprintăcolor 8ăprint "Lycium '98"ăcolor 9ăprint "lycium@hotmail.com"ăcolor 7ăăsystemăă'=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'Credits!!!ă'-----------ăăMatt Gulden (Folter) - For getting me started with PB!! Thankx man, u rule!ă  mattg@thrillhaus.com, page www.THRILLHAUS.com (rocks!)ăăDanny Beardsley - For helpin me out with all kindza stuffă  dsb@cyberdude.com, page www.dnai.com/~beardsăăABC archives - For being the best QBasic source ever! (And publishing thisă  code)ăăAll the other people who made fire routines (Matt esp.), I learned from eachă  one!ăăYou, for downloading this file, thus keeping basic alive!ăSten Daniel Soersdal           MODE 13H LIBRARY FOR PB        prinz@mailexcite.com           08-14-98 (18:00)       PB                     435  28636    PB13H.BAS   ' Load/Run under PowerBASIC to extract PB13h.ZIPă' To install: PKUNZIP -d PB13H.ZIPăDEFINT A-Z:SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"PB13H.ZIP",4^6:Z&=21161:?STRING$(50,177);ăU"%up()%9%%%#%%L?'tI%%%%%%%%%%%%%%%)%%%%fx%rTup%()9%%%%%%:L?tI%%%ăU"%%%%%%%%%%%%%+%%%%ijrt%xTup%()9%%%%%%:L?tI%%%%%%%%%%%%%%%%*%%%%ăU"ithx%Tup(%)9%%%%%%L,?tI%%%%%%%%%%%%%%%*%%%%q%ngxT%up()%9%'%7-%0ăU"#KlICQ*OgO&%%%j'%%%0%%%%fi%iYit%xSgy:rTJv+p<U5j,iF:*h?3DL[S[=W<ăU"6Tur<10CXGq+fYs2J1*LcKh6vo-$e$Wu7pI<qx?1]gFeXDBA?PddPMmWGf[k.m&ăU"G&S_uE5P^nB=Bo^(3%a<'lRRuq'2)jA=WgpHQe0rh(zIl1A48)OV^3rTZuNG8mZăU"k2MhaMw&/rp6.\4lhGra0mMr/(m;j%JFqb=1OUpX)p4x16fa%GC44'b5?o:Cw[4ăU"o3mll-6&7U)m=(o1pUVM<e=n3?UmE97vN9IbojqdcwTw.fULJ)=^C+a]tj/AycZăU"30B;_zqybV$X]Cl'rex<S+ElDh:$Em,c7%AUD[bBi$j']Oia#gCW>Pi3hbZL8[+ăU"Q/>8X=T]fXn.R*_vr%NL/E(OSwdZ)-M&u%p()9%%'%-[%ZClpIwIK%9:'%+%G)%ăU"%%1%%%%uwn%syVX%mSgfLx\b0)^ie5eUd:[hNg+EAXbpYS-bgR.FM:JdjFq24[2ăU"SE0gBju=EDWNi8tN/1$WfY*&U4UueD5HfG1;(cLgfY02t3b1ZLJ;#eUwVR&e)CdăU"RG&SOM?d2stP_sn6ELJ6j=h51YT,.%ckPqm>r9xNFZLgb/?QDOpG-2X&S\rAM^6ăU"B#\VPOM6>Qt.930&dQRA?KbC<5?3$m%/]/5n;HPr[S?OC+3761%#j+GuPk73k('ăU"RM.9RTAh1S'ge\CSh&uocGU)t6$)0/PJHkfo9_&;R'\kysk)k,jkh,3<Op_rjs4ăU"?Lo0xBi]pT[9f^_)(0=(aMdMaCvC,AbZ=UsMlEzV+<alBSq]]0:I32zAH,/#KqsăU"Pu6RT:1%jCkyT&2#r,09)sG;q1iuMC+KsstA.kjeLsJ9=bK<p=J<Nr+jLJx^3t,ăU";)7Qf:GBifB\87t,E$_J'oBF=RdZ:1vR\0tM>uQa=<BaXM^[c,u<LUrvh+-l&'AăU"g[76(INsLhLK4Eg^NasAKFfi(9B&N8-UM3h8cn?H]$4A'XIfbw%)z_Bs\y[P*cKăU"e^u0^Z&;+;5EP2gh](8-fj$:M'*AV:Xp^?RxXc<5/#^R\iU.%k1#G6mDWv^hS[7ăU"lE1>Ag=,h?iPU[jMd#[j9oW5W2_VNF4Pk2H82Bcd)KAc8/l[$qnN$>l's,up%()ăU"9%%'%-%89&mIVi+n1%b%%%&k%%%%0%%%%wjrY%itxS#gyrBq?DoiP&iFBQ\^A#BăU"n..ASDzI^Uy?jFL3]##^2E3km1-JlHmph$nD1o>sRb\bJSlzZGz(d-)83.%%up(ăU")%/%%%#%%7ZKlI=Y&(#H%%%%H%%%%/%%%%fx%rThr%iSug%tugV%Xm2/%iugV%XăU"mSt%go2/%fugV%XmSt%go2/%v2/u%p()9%%'%-4%f%*aJkS+*B;%%(%[%%%%1%%ăU"%%fxr%Trfp%jSgfLyB?Dloi&iqFB\^;ADj1.v-?WXYoIBs1o^^:/Anz(-?12tE^ăU"^k#*/esGG2'k/Kal9hkL,m^'k9eKugLGN2++Ls9-mubl5uq:s]WuQ7(Ng#Pu%w%ăU"xftT(+wb=%O&Y&)39+u&<UT<%%up(%)9%'[%-%B%z1Jf6bX?n#6%%B%p%%2%%%%ăU"f%xrTu%gVXm%SfxrNf+JBd#\ax8.zs3Zfu,c+qjio9JJKKR#cmo#p;>\7A4hSE^ăU"Qm_kkn?9TEh++otrgD[C?=EfYjhCOJ0Jxew7Xe.&?\+?3JvhP^HEFBG%c[XlhH>ăU"kJV/Q?x98Bo._q$if7?wR&c-^teupnr)FT6_lK5f$ZL?^m^rYw[.3E9.t(aipYUăU"Y8$L;k[C;>K*9wiLQJ1.>EoM_]8.xo5tCU6N[_JKAREa=>4c9xHit2h1ndZq(kXăU"EtN[)='stlZuvlj#Af%8'QrDQW^$369K76IJI]n-Y*91R,553G6rXSLJHo_;b^5ăU"*DX(3;F3mxm47Ar:kN9O&<rvaXSTM(TG;bqQ(Mhw=0,li/GT:GIno>igD\Kn0,lăU"+joe%Pigmzh%*Qj5WDI[^2#SUH'2l;>]k&48GN;.$J>enA,Zt2]B49?YD2%Vk.jăU"*Oq>n+Ni+>i%Z;rq>:/G3Yd7PYcP;Dr5U0$tRZ40#r5gB-cJ\L3uFndcTVf&HggăU"1q:Q2j(A<DR0nK$c<<q,h?*TY:5;:c+G>^qAvke]d'\5gxR5iK(8lgbcia.9HxGăU"^ikK./XYx;[A]g^W':LktwFFT+Q3^jNh*]t_)5c\Oo7F']SuxjDl(;)/78'\Z51ăU":fw^RlA3+>Hto&3jb*o%6]).f9_YCoFU,,w/*YJU-5i5fnX$$-=NaA=FD]]r9&năU"x4TuqHK[HCblRpSvGC9>]&#lm\8vLJ'uaJFrIbOqZVZWsJA3tb<Wj*Zp[ubN.;măU"[8scM'3Te2u34l<14veGB'v6vHxR0NB/LRWYK_PqhjI%0m?K+02uh=Wd8Y,scHiăU"h(rwIFQM)bv)8(snQ:Qk:R3FAewambGC2Ai5rWAgQUOQB0-[qdg*2=ik+DP^x<făU"TRz2Q/$=8+37D97ITK)X\w\a-&a(rS0o[gWGoA)hudlX=1?4$uCw?\IGly=AK5)ăU"C0*_Ld'3BYFX=F$(0r^+X3n#qcCGzTj*9J/.[:CKCPS^-^7+fHV3(<I+SFH06oiăU"P?%:dl:UkXkW=rJ63JpkDGD:LgZ/=lipG<DP/;jRqZ+pup68Q9X+r%;t1>qJt$[ăU"1Rq3&Wlc&/Cj&QLZ;.EG;Bi]N;,''HC=e02+U<XKSR4XM>ObLYDu(8%,afhieOyăU"jMonD6IEO,ALVs+]a>4tn68K,#JG*PLD5lwFpAiwa+uIhFY-d+PC:6DprCd6Uk-ăU"l'x7gtZg]g9C5N^&60,nh#3q&Dqnk6JLBs92_sX_gbQ$kN00<(J1jalL]ieCDD3ăU".JVeavjlkc.'U:lX4V2ChQqdFQk=b#alL\/a;>\tW;CGp]>>qG]1GQ4QX)r?h.3ăU"D;DL_.ng/<v[8<iW*4jLSHK,lF[m]U2#tbkdC5]_2?tOL#J+jGuCM4^UB>EmKxMăU"OR_58a80$F7$rFr\kfEU\>>\Z_is=Bc-ukw:ci^puVTH+Flho.]KACFW?GmpgC^ăU"+VRi4J[S1ys\Y#)u'4i2><?F21>DKuN:';T*kaMsY#OgA]pKRX_ve[JaSF,g?7KăU"FFvz%Zpno]\Lxt]wRiqebtUkZv35qNJ1h>kzEtNJIId8jpG*p;fCsv,&K[_::3JăU",c&36>,#-EVUa_1oWOmT/PcuXo$_[X*3eGKZZbQ+9#$To/oUMk6hzUg]<Ws:>NfăU"DK97xfIvZtT$u_\P^$PIHY3FkKmFDA>-+*)C7X'/cW^B5N]BpSMRdC.eIhu>avPăU"+j']LCqnAYPRs7NM:ZB?3i^NA^A;X%KV7HqgKj?q:Jmjp;GU8V6HVl0>a^fxGOFăU"3NMNN.5OE\FF[z;W>tdCiR^[6++TY7:c->u\pW[vsxG/*2b94JFMmAhE#THUiojăU"We/B-MGNisQX*NSStWamt,;0je\qkMdGc8[+79pSQhbSlmV-Uf$Nh_#GZ9]W>bEăU"oGp1(&[t?G##I>Cr7.DV?u1$.E;9/^gP3Qy%32B9Oau^^sX1GYY4b;YI7t5;_0săU"i2Y0*]U-HO*UWqY6a\tX'fW2(c:kFi;Qf3/4EfixE\RnX8N]a>u,3bM,b_7F<G5ăU"_kJG\BEwsJ)ug+2/Ud&(=N(-n%QRx'oP$B-k8cSZn6JNOC/*htE+)PkDY6VPAScăU"o<2jj+BruRIR.O9VSNZVSMQC>U>&<:TK8(sB1l<;c[Suk8&gk6Ix(&l_6nV]<bRăU"Y:j0f2ZPxq]1duW:3pB$^._g0;G[E-Hn*(B+Ev1j-x5.PUY9CDJ6A2lkm9Np>(^ăU"9LsN\.sgV894\nyXR+2l$c?*YI3Q5r'P)(BpK)Gnk;Wx1<1bm#KZewhCYit[iGPăU"P>W&p)^obA?#.j[>Wn58f\6[z-T:E7<a?;cXVMbo8:<;k5?Cd8e.%]IL[XSUzpAăU"^-(s[S'Q2)QeoxZlN1Y<#uON%EpK+;''^X/gPC]/5jQkMdEHs/YCT=2,EY2,<s;ăU".k*5>5gGRxD4RURKc4K2+1l^HjTWE.o^:>hJ>:ua?6KGk.Us\B;n5U/lRdwO%+*ăU"m$e]Y#B8*OS<>BQCcika:_0iC:9S^ka>&^CFJt2Zo1FCiI&4LJcwkP?H8saZ&KmăU"p9<sLYpkP[%BIZ8&=S06ndX'cFnfIZeU#CJQ&SSmCjba$iH,*kQa#CwbiD[Sx/4ăU"j-gi>tIYT9rw+J67K[9Oe%F'*^GCT'f5*]HU4#dvo.+856gj]h;e_Ii-wTcElG>ăU"Y(O#Nctp_wez=nLkrE)S#W/]6Zl)f(&$O/UGJq7Y8I8Z8W*Zq28:I[#)8G&,2n/ăU"C0knYJ*g[F&$^\?^3p#XjVfZ\G1gZ]m]Ejb));Sf;>$dHroC#SX11/v=%E\1/kjăU"OHFw8w6cc>:Dilio5XSHE^[J.KI9$[Fv:O/cv$dL+z_d9kQLxUyHPRU&]9n\5sIăU"w4*\[IWWtUu:1d=^SgQ/DeEGySU4zq5DFvWz<L6YaKFizBH-m6b/Al;N)P?t07KăU"e:;%Y'GE%s8:YAezQ9]a0?D,4N4Vi6rALD5-HusH3unGJr-T]S9K/Fb7z+Q1&?6ăU"'HmsU6[>WgBa7tt<L<g0QMFR#7(J'0Dm<bKcB&kiN;zVJ&ajx:o?gf'*ji%I1C-ăU"xw\rz$6)qxp.rly[[3HzYd9(Owne&:N[Hr88mfXYKKoxt-W+yTD*3&><(]P4ZvDăU";rt#,Mxw=O=t5'q-YvSpZfjN9=6$1d'a&n=a8^h]_r]C+4Bd(EA6kenz&\#)e-UăU"<j8L,)jr)KDbe=j\k,]Il)o=pd=?h^>i8S6q5jic=PK$&2oiT=3J=kF&*<jp]MOăU"Z=??pcNPJG+Z&UEc-?5^,8nFo\BQ'Sv']KDbjR)Zgn3L:+5;gKTgRNI7Tf?2Z7+ăU"0)$RYsYlR,r##JoXX,<PM8D5aNK^6-4Zp2o(wgjN8lG/+*lgQObKVMhDx0SJH/\ăU"GfN7.QK8L(9ji#]lSHo9FK>V8w0U_Il*l3?#+op3E+DMQleAinlFm[:Et/pTLnSăU"xet14_HLhEmKh/KO82T-:vxsnp6F*Uy/Hj3g(2;47R?WHGO[?&ET9vm(Aa.[sWTăU"r&p,cL'W0:I2pKeiljvwS85QtarGwkhj_7HueN050ou+6BsAX3aN.\.>h\-*JXrăU".'j/9:KsB#[qcXvJV:C'nv\6XtswIfilrPH).Bf#Q[c:cJZB5r'_rAbp2*aCr[xăU"=v$IKP2S/iT7,#z+f4HD,706PbB9UHl^TZ:-)&5QT$cGVG-rUxM6_ur(RpIBVx#ăU"j$j29V2Y]-7-3x2q:C['&M*%qKz2oSXz6UKDq)uEzXP[[(nB>JS#7hDN<LV),08ăU"+LZza6)We)yM;0G<>b9<Nr')Y%v^?MYQj.M]XcMda81[e%7:A.dLnF/g78]2>unăU"cjHfU6n4N&#f92MIcw2.6t:J%+NCaf/[O$./8D2dR&=frVCo2o68P]ak^\5B1>%ăU"PId;-%,x5D5rgu3?g.:wYEyri*6*EF%g_e9YBZsok>>J%wS-ONc#\XO]k%SoHDqăU"p\Z=#1[4ItkquvW0nkXi<fEbp\[6z>K,mDzD)6VeW[8FmE_P)ApWJdcjeTos5;găU"%s]N*#a_SATd2*Com1w)x([x'x51pi^n=qlUV*%*_$7BmZS:vXcpdTSwsf%#*6kăU"ix=%_58A_l[M\8P,sEhPuj:im.$\kBaKH:'N\\<4W8s(EG:hJ&pkxxk%BFj/k;DăU"J/9_KsYTX5+MTy#xOL0#&rPYx*WKP#afENiLkND5g]TKZP9<hwufcbV/9-z:x<năU"B2BXc#f?FX0hV%#K2CNRMf&Fu=&/<#\f8c\n1dFEK=-79nk)OY:fqniUg:/[vKdăU":Lt89Ivo0Ce#6kX7*SwZ2?'XYM^sx((f\kK?)\Z[%ES<ErCOG$oJY;3%)N=CulVăU"dZE^\e#9=5TE'Cv')u?VTgN^<FKU*\oX?AX+b^]OI[c+8W>tc#)F/tF.C,Jt)diăU"ooK,U1TuY-=JG69.+[w#q)9I/QS-\ZlX%1atEEa.(roF^%LSeqc3s^-7Cm,jsxrăU"Gabha>rEcF^'^xh]RlfTRbL5BUk>v$WAKv;4WR(ekk>3:TM/>.KM8zCL?ow+?J-ăU"N&4]hE82md<J>fB;rQ%A\=XEgZE6_mLFcqy5%1)^xijbo:lX>b(Q:_:iCYB?]5>ăU"9Tb4kDd5rDJ.lXBiO+VfTku2m:yn;s=jdMlsscUWVxdY,_\i1o1ve4Zlop+6oj6ăU"VS/6csvgc;54rZC29FK_PEJaJ66hb4B%s;h2F1L<bQm'[0cuF42;gEv:\KFZs-FăU")_0=UmjAe1GrE0lH2;S8;N7M_j^7v?':(<C/&Q\e3p&*965ezXEp1tM[4w=K'qaăU"GsNI6dKI:z7e1&Ld3S#z3P\>Mbt3O;WEITyy=reSP83Q<EPiHt;c'.>3[jVIjDZăU"1qK51mn8n2G>a,Vo70oh5ct5h;OrZ)RROCf7^lHIVcLjpnr-Iii\&m[VHL.Mo/făU"acn_%uMW2S<tjGZDfx5PS1EqTi,E:aLgb;h6)[8NS(:3*&l2r0P[>ix;?#4$#([ăU"^Lh-fjnX[jd<uk8PTu=(0IZ(0B%SI0vIhj;r0_Xr\^n=sxBac=KSP%Y&MlX$:sMăU"Yv2t?W.+&^cpQv+:]wx6CVIZQn(s^/\s>$)Lw62=)Q(9d>oWV5+<>8rlzQ'TSxlăU"z%/hAu*:xO?Na/V-CzsGd1O3xGeeW/r%Hy=j+n]PH%D]JfLG5p(ICJqcA-:&XgOăU"UeE<dIZ[cR]EC;BH\y[cO^2.JZ1ZT/n[3*'W7DnKTg;c7$20#nJJ'UzEeYM]I]<ăU"r6eO*QogjS;'65-#A_rr_d0A[ka7R99Y<r]'FafI,9Q<6NbU]=-AwlH1Sz);QP8ăU"7&(1gfaHsMvdUmH?mmaX/>#5Dt[o0LjCp&,;^GxpczZf4^jO]M/74ldjoSx)5p*ăU"C3n'hv)a>7D.mtq%FxFM5VRkuq'+En$:NEU7KpGkfWJ5#f^hD1(39ku^xp4m$\EăU"lHU0utZWT7QecnJLOJIt>aDupVa'Zdx&Ql):D>za_RYGpqsS)mvQNV=D:m+CGC-ăU"RiL8&a\ekanB<q&DSmIe0*utLVcGQPoFRiI&(_=#Yr5b04E:=x6$la$-8W/)+tRăU"gpV'ME)\7neD]=ff^KTSj8mxlKpylH;B/wh=\$Od)C2PutxC3*RN4E90,3;'t>8ăU"4l%dup(%)9%'%%-%o\>*Jtck(:+[%%%f%%%%2%%%%f%xrTu%gVXm%Sgfx=x$^w_ăU"&W4iC4F2ASA1oC2]&W\KOXY&puWpn_F#*k(1\Xe#aDtvjE#oAMGoA_k]iqE;aaMăU"aDTsoTS/5faMgfhi\r5a4&w]JV:,s;^<8o+M.Xbriu:IKKF'0g-%S:td)6nu<&&ăU"*Jb06=ob':V&sGU?CICe0JoN%^vnF\3yO_b^7M#J&^x5X>x/1jxXNR/f']XS7'IăU"%F6F/,8rj/)hHeW+\*IX[dt4%%?%up%()9%%'%-%(P%1JmWGAc%.(%%&H,%%%4%ăU"%%%ijrt%xTij%rtVS#gfptgy0>SRa5wkFmr4&1y%G$q'k-mJ4Oo_&g7ZI1vaer;ăU"iSKZ;:hKugf_eXo+d4,eX(tdEO<eQbLHbH6rG6DaNk6EDK>oRnp6S_L15I*8j&EăU"K/mj#kEmJ[B3e0/):D6EBkO6vD)HmL>]U95+nNPG_mn/Zp-^c[sVhV2GpQel4]tăU"Am0ZtxD]hYK742uB4vYw.TnmUyqBdD7LU(kB2v$#ETp:FNaE?=R_G&,3+bE.kCPăU"8nKjO_P47X#ge2:XgTJVF-7QesUHiv=5$ljZO_WeRb&h*]6fy.Tr;5q4?^19M%7ăU"'qXJd_:0k^.Z#Y:r/8SUn'e:((<-ilWnW+U'lAD_$/Pg]0Aip_3r[/00PRk5KZ=ăU"k^'[jVCj*2PYYab(UKakSrtUG(L_Y;K$]$ai*)G(hjD*^t<OxEbSbd5_sa1D0haăU"&47_\='ZtJk1Y,$lt^d8Im8ox)^=$>tb]5%keItTAUh(MduQ7_nP5HErjkY)xBZăU"sZ^%t^waajA;Bop]1T>a^Zp=/p]-,8/s^FuuA?4aHVP+\+BM<2?W,R:1PQGa<2YăU"-eK46gSmtZf'D=[UY,NpR,)WR6.Aa_Y:gao+<R8?jM+fWd3UgX3aE'Tl+>XVTY^ăU"e%81PP'0;;*;s*N>ak'%]<%j*<:8+y)bhy7L%/K<qVnD*8PU787Vn<=mS)2mhpjăU"L(//JCGgT8Wn3G/5FgjZ>%O]q-JEVkg81k_gOD?$FTz^BE2E\-unDBf;Wp0FGCkăU"U%_FR*HvP0Y$oNfLW.?VgbHNtKpYm$PphV.Au[*YpU.]O(bm)$,7?B,od#$,>_9ăU"61Gut%PC']JNcr=)QgjJvGA$tm_M,[9Yg7/V0mhK+:NTqi+wC>;$?S2hV<^tmh2ăU"RLt3M=lb1y?+VXMHnZiLLSDq=Q.E#?ZQIGiu^KQ*j7:'V=[BiH39]fVi9pw$9GfăU"_apj]-cLY==9>dXMsYwA?/E9>'C&8j,=0G4?/UzxXp8RGx%%up()%9%'%#-%x,RăU"1JS8)I0.(.%%A,%%%4%%%%ij%rtxT%ijrt%VSgfCxty:)>jo5]v17xS07>\8Lx4ăU"aX7$3YS\U%2[91-AArwJZ.YY#j4E;'Oi8tN/*,:;$ds8tpTS+,Bi_kHeLQVaGp-ăU"BX4=K:Q-D<B3B<&vG&9_XHG91w-,W3Ae#e/)._fMBOWE(Zj(RK>U%45KNP'G;n/ăU"QZ(1Hp<vM<NEny1G#xuQmW=ut*3rICZQ'b+S))oJ-6(=O6uc^:b<Shlgcq]fb-eăU"gwfQfW*BFaRCnLMPD=hiLI&-KuI]jB)=3)5s<9ViibgT/$Z'vVS<kHO2W\eb(hqăU"6z&AGA$HGazlykbv)f<j?&(0gda>^Z+&C7I'HS:XT)O_7Z38::na.Zun-XX4'<săU"1>bt#IUPfQ'K1WQ_Gk0#F*2Rvc#q2ycN=(MfSo8Of^W6zf4p[Hw/=6H/)[V[dU/ăU"mT3HoL9IRZgk:mW/&]\t7\(0>9EZ21Yynl[]8nsDm1KKxmU&+k88TGO+Zc+Fku;ăU"nD*3(_4zX-$VwB19Od1xDlr8UFyH64)Rc$ArU<:k0iKS$qAYKbemUosOXYGmL4făU"=3d$uBZ&;)W=B'*ZV7>IJJ%\6KtND?&^30#iS&*U)*LcRd6CnZ3Ff-\[e[>.IJ4ăU"phC1H_0,L(_ZY^T7#%Uffs;]W3oI33duo_nN_[RjV19Y2yPz+B/L2<)SlDe[YJSăU"$s445EHH).R8-$EX<a9C$_g,rZ<EY#yd+a5>Shz<;8Al(Br_EE0\gQKYDVAp=/dăU">B2d-8Nn;&V)SfaH^+&eFsmn9fxvVQKu.$JCREd#P>_4n1]<Z^NQp(Hadz$eLGQăU"K'>Oh-(+WN\CB2?TO]JuX>sRWg3(,.aE=,Q=)T6En.3Q918Vg6&gkmE/5;PbrhFăU"pR+g)-kJ7k><=hVFU8mf6>6H?LpNbw%1627tYVQ2rtuM*5J:Wv:fn*bfMtxJl=kăU"RJU&;Z0,t*Hdf#T;#2D&Q>t7FH.^Urd&-E,-JsMqXU',S&%3C\rb1$=,1UYEsbfăU"j'v#up%()9%%'%-%(x/1JsV=AH'TH%%)BA%%%4%%%%ithx%Twjf%irjS^y'yM5(ăU"v=#o26xxhOJVb2px<e>%]1n/b9VeE+diwQf1ab#YM/Rf4$z^/hp=nZ']6&6bDehăU"DA&P(,#Lh4o1/O#<galbi8hp8ox3Yous<$beKW-ErG=Zo>Cqe;u[doku<rMV[$^ăU"RU6$>;WsDH8UbMxBfus%2.dMF8YmZQaP(^bA*4QwtrW?STM0A)6+ny^8sWrWokVăU"xyJKD(']HHncJ<lV,$A8J;#dlw(-#e$GkH^;6<\lR^CwC?=/=Z9v6lgtvn#-lb%ăU"Q0VN$ng(\ybC?p[w(,_Wn?Tt(we4a>;LCv3(ev*L4k\)5Kp30kjGU'Y+,L1&KhSăU")2/ap=OA61*iLo.jHHkb^g:=/.Zo<;iTg9N;C+uO:]47iOMJ4\-G-4XI7>hfm%SăU";h*BED7tz%;vE1p3[Zb_Ux-KQW&_]yn'(2K_0nv2J,X\RNV\Gn_14BdXd<gr%y>ăU"#Na].U\_;j;RhMrK__3KEOsQpo%4=HoySiQ=)KNA#df0SB==,9](Ht[/t*&h%xWăU"iy[A1nZm_/hAlq-1dfE3bW7Y+o+iaZMJjbCURJ.NZ=+;[qtK,=qUJ\2HLfmhvDpăU"U_%/.rVcsXvNm]l3OOc[SKHy)f%sHk;JF_x)A3s:,lgK/+5#+xoh/z?BpQ9G=+%ăU"1ZEm:*Mg1S\uw6KiS0h=jPL02e\ni,&DpudjvWKpIWbDn6s9X8msiM4m=:\&uw*ăU"%1,uVA<j(]_)-0J.aYg\tT/(Zerf)?.7Lqx:YF-p8Cq^7\e/2%0.Gfls0eKbH^/ăU"8mrNQk]-P:GLTmU)IrHC_6ja#NO\+H>9fq*#>Fq_ofB:KF9?-tY7W\y);Z;K4t\ăU"JEXYej2M>Sve$Uk&_xN=a6l#W\,q:2\Ue?7/9p[5:M0fT]d'<;pC18t=6$?XOVuăU")d=B<lFZ<AN;bH#7q5bD\dXz%EBkiE+O$6c3O'a-<sv<Zn,h(oTClvT.FuUI7ubăU"wRndl]Kd#cMpCWYmrdUxxc4L&xaSOPUbjA^T,_V0TKv)7,N>Y/8K9Mx(H7ZuO*FăU"QVlb6JF)*3je/[)TaD<vhF2aZlkEL(hGUYQ5'&SEOvVbblJaX4fPOCMK>KS/AHYăU"u]]8^UXVA<%V2,Xg6_kltH=S?lNBNUUD<K$n6lltZRWN.YI2AA)1'(L<c+^(*WMăU"R_o*0'b?im1HUO%?x0stX;(6(F?Jy?JaQk(mB$BPT?v?[8o8r0[syZa9grp%wL3ăU"6M/Lh)T%[nAAXv2\#Q0ZW[nO*2_q)q7h9#icUIH^I/A_K[BUZh(5jAif*;LRJ+>ăU"C+)7tYL23%hP1U2.C/CU,p.:iQm);QOp:D9]WD#P-dXBViU2&Nls\l5]Qbgm_VMăU"TgNWIr;z[dJ3Lq75QQ=N(?8$h+8iKZU<eD\Q<S9;Cw\Mx-Pi=sKCn9-dssZQ4*năU"%uBlhC(8px.w5:MHRV7hHTXtL>gJ7Q9vsE>)TAk$zKZ2g(u+_VwP%uyfde>Z'+=ăU"7FL1Fp^Zv/e,K-gvShCe8dS*C1-Q)G+Ib+a%3FMrSVMQ=gg6\nZgK(].4QcSoANăU"\0$/m;5]vYwd6;6l-bm/s^sLu)bYrg?BJ1EXTN_I$Se1;[m8k]m]6yOds_.'a15ăU"ha?5d-TA#l3ZB=G=[A?;C9fDu9'xksGBMk=dPPi]Bs1ut-h=PcBv:RS)]QhvF]#ăU"-3FMzR6T;ELD[AtB=/X/3SXnX.L;I]O#;JYWD_<*7VBtrXTCf'CMJp0:##&iS<găU",gMx_G/h'XRQs7;DJ5bIoNW\R%Z\<5Q6MJoa>lXYdTsi'-C#WF?w)tyQTQrHgH.ăU"NSjrIU<9\pPv(*r-bE]KRFs)'&X?SMkCp:<S5^v^h5fqq*\=BG8OWQmyvPJAIXhăU"2$.9a/Xx[_cN?h7k:-5QG$iJ1ve;iW5M.SLoh.M+U()>lml\Kqm7nrfE,X6VwV7ăU"#??fW<kACxNs'2O(WmlhptLhO/ODOytsx:uJ_W8<$-]d4=cMsE^)[o13:VC10QKăU")[aR#<k3:Q#JH\QrX0P'?.J^X%w]b['JZI5,V-uaKnkwzBQ)lkm_>;rueKjo;d8ăU"TBUVYTmq=IHCXoYdG-b/jHXqucTM.KGIZkcNz#H=T/DEDXLp\l#^Wj:5fgj?^>]ăU"+wc90T7;Oke[O%N[Z5sQj[^?*#To?hZ,V7*)0)F#hS.Ef3&s^:ElW1/%qB?jI7qăU"Ma'fGg0xYmTbuh3p&w]__a?9DW/^lrv>*\Zo]&F:Ao[q/&,s#qTM*T8g%ExJyc&ăU"8G>ehUcgsLH0A18P;\*caUho'0;G3<sP1hLFKMbaoZU$P34+Tr5hpF7Cw<-_=9OăU"3>4kghh\spiDD<IGI:kR*iMEDhxtPRhGpC?mJfcBZaiwW%[B[lD-;v>8Z#bqocuăU"PP3CX3UAGYRgn+GMK5AZnC3]Q&,HYdb\>EV-hbG*8.hp&wc#E7JfE(Ca=Bmzs2=ăU";cXF&ferf:oxcYObS>V=p0Ob2LoL1LZi]QEE(#EtX#Nq'5jTK8jUxM3bC8lS*wIăU"r0XtDtBiwn=\xhuMJV*EvoHkpHskgvu2Tn_j[rNde=.N.m*J1#FK8;HyP9siL(wăU"+U?ZCSg^7uW:=S>c'x)/*pf7ncF90.^=hiD/eL$gQvx3\Z$v]vV\EqAp9EMw-)9ăU"9#)lYUGXG-F9/OV,3haZ3eS=4>^5/FE?(z8c>K'5p\)5EXZgS2+qfE0eH69brd]ăU"gX18+ANQ6#A.>XwJbt:ti>-#BKa.Ca88ra?k^cLq'Gp.:W5m>e156Xu;[[d(w5VăU"HB-VV-CP&oaR;^BJkmQ]en0MuHwm[djDwvAa(]reajLQ5Yd?a$,4E0oXxv*?>#BăU"+O:\SMX%hI=t0j_%M9Z%g:tMa+&cDCsBt,UZprB8ub=cn-7Zak_>OdSg\<gSo>băU"_IL=b^r3'N;$ciEpHk0\-=cYOT,nBq^jc2*HKZ-vT2-;tyFFR-61^m)A\x)EJ<TăEND SUBăSUB V2ăU"H&J,]6S9XiNhwiVbAdPDr)V1<R=\itbr_>U:dHEuS6g>UkV?nvb1r#Fbb#R7mFIăU"jW<gv/24^*o3p_,0aT6:5I&'%\im;<Lb=Z9\gDL5aS'[B[ucb/leW[7mni[7]?0ăU"0>,9c09eV][(mi.U90X[2njLd,m9>_QF1-R,7TX:6VmAIv)_qUX.:i7rL:7o.gHăU")s,-frtE(W0IZYem5s&c^7<',2N6%m2Dwte21[4WfZa;<']Krp#/$5E*K]\Ta]xăU"t-l6_F25]l2-L+7Q,VEXWU<<oHd[6j\fFrE%cwMASHS-E0Gq?XK8VSS-p2,mLfnăU";hogJM,;Dcgx_]OS4?GP9t]Iv+dWbO9mQXrA>ssZGvPD>o3QT4*iue_-EJ=,k3CăU"?:Ux5vcCw%qV-l&[wn'adj\q*7f'QDrcA:4+tMT)5wK<NO>.%AVf>F[LdI.YWFcăU"Zen>)Nq68>i=.iod4[3ox<IiNdvd0-mg)xgkrIRj%CtYtuil5i9;XZ]xlC:R)T2ăU"t6rUZ7t^GaE%OWybn#$dg>k2+U,cKns%acJ_&u#dzKk8lpWKRYPM0:5yC+MP\<ZăU"uo7W*N0F6fH<H4ls.>C$d/hDt7n-p^:$o'oMdzJ$JlsS,p2zJA2Pp%Y6CYm+5FuăU"un#(4%,=5EaJhJR>.[ChJq+RH?m44d+[W\jnN/f><H4GFR.7o8D-Xy^8<OG_7L\ăU"j)OpjiEt/[G$MX3_9I\4UAPdaI.2>;YZ<v-v-^(?U1$S&$ch9>w7gxR:utK6sr>ăU"hS#,ctwFh1y_>7?'>-;R4hlcU31Y.BL3.SY6KK_,o:#.PMjcD<'WVCHdus?_]cYăU"[$B_l,-GF2NN/Eg(04$i'Zw#[ejtOXW)rg\toZL_]bgs&eLEYBmQaE;qSXW#,GVăU"Pt$C=q.*eY4g.UswfFt,fvmiL^J4rcd3_tn]\voNTtmsVxM7o2D^W5Ms8,7818#ăU"G/Q3up=yx&V>=TTAK_bNf<HiASV0nPL4BS0tXv$u*tJ;-o[-AmI9A(LhCEHW's-ăU"PAcJok-T(6fX:L9L;F09q]hAsC[]kK1gB_-8V%qJlSBeaTABuo^:>#j^/UZHUyTăU"-NKs/_H6zTRUao4;?)7iSkwZLfzxb8KVursSh05L?h'-]ls3\>#lgBD[Q=eCtXnăU"YE.b5B?Nmj^N*l5u^8l?(MO.T%'^#8JUu:uV+CLx2facL9>^#vt_e6uJ^olz>#AăU"[+N;Mh<EhgbmEM14ogM)hgi=g6BlkBa1.o57Zq>/gFprXLEK,Fx6pWH?uXCO0atăU"I9y>>uYTPHV#OLFZh/hoXCo&J(MzGxtG'ZbR6ihcSyC=fb$Rt3on(P.Jyk/-6[iăU"c\o6Nmu'OkS-PjtsaHbGhX7+/gHYQ^vz-;1ON/,5siU3CDAI+LH8tsIblZ#Bn62ăU"i=$<bF.tah2Mzx;_,KxX8*)(nkTUDtRZoTS1>TJe.L^3N'b.F/*LjSFpHeSURabăU".db0]7un8*G:F:oE]4,(88<<1#g.=iRd1o5n3:l4xmcX3%tbYi3K4:3y:.]3Y(<ăU"*CyW0IUV7boG-.G(ZmDMF/nS^BlI2qK]a6VUMZeXxTGK[aTBk-]xcacuD+uL6x=ăU"uZtXoBxxq/VZw%%ElyUzp^G+gdIcN(gBVAhC245oA22Lm9*=/.olK*N[Gx=guc>ăU"::fl(AG$U'BJ\8_O6.xVXCSG,VVk,WgR3;<K#Z\gQ_Dx%4K+k3D84ueQ8^0kGGuăU"kKo&O9,fT$GkJNH-st.Tm(D6fx+vJ/l*Rrl:^:beAZ0^rCtswnV<jPI<TKI()U-ăU",N7<FU3Q1d99E&PU0fE+s%>sL_iLecXk*;LdTGv#9k;[BTi\<1;i,)jFTY8xAkGăU"5l>>3I0/SX*u<L;h0aI(.ch?F%4jaj?aOPtF=Ie=#>uOvv1Y'Kk_ffFkEP7BjMeăU"p'JZV,JF*8^yhKpQI%QtOzHd?m6,&#7u/<#beR7o5qict]r;K'FG';(7H3Gc$)YăU"F\7;qYaR4mSpt64(lFYFX3'WFf^'j\ZXhgyDWB_#zE6D+Ke=6-&uj.GHr(73Bi]ăU"?mQgP#-O)n*X,]qmpc<#L3'\2PJzZADt^x'S[.zj6ZA2?q=x*)m(4p[)wxvp-:SăU"8b%%+CBdngRCl]\Z?Wvnn:mQ#QQ*vZKUcAd[QdxMeLEQ_p6XMOBbRZ[V)HEf3H;ăU"o#fjfwy(Si$7=MMK\[5>h,\tvQDtkaN<+Z?AkZLO$?rUtdt_Yrd2zFPR8]'qOq^ăU":4EN3:Gq<CdxUG_u3lEwb=XX-UtH_[O;Bze/63-1rrglN4Wd2K?J\NLB],>HlJ&ăU"Xg2Wmvmq1AZFbbgPH$ZXC;WhKk3*,KchWsMd,u7tr]un^Jbmnb-xCk*&Pt>3C;_ăU"czbUN(,5BhRCxxuK4t$Y,<s.p\#QjEc,4Aeg1yhdH5rPZ:H]c)>a,WbKxD92a#păU"<P3+55axFoJhBZJFb\5PkcmlzHl&&^2rg]2Sk>?+_?6,-l;+>$wcx,Ua6:8gU6wăU"QmB%[rkZ\#xo=Iz\95'8G=2705_n9X*$XHmYm;H-Cux+o*RaUx4eDYGX,&q2o$]ăU"#k<7LR4Qrx%f)qQPN'OtQswsFei\+dlC^?:Rif+?F+8mz;T-or=u_QSs6M5A_vXăU"nV5'v#8Wl?M8F$hm3Y9ixs\HIg<pMpM-]%vbXnaN-d?*,B.eyPHOq9;S5Kk%L=păU"a^?5$TAE7:=3dF^)EnpUa-,B^>[K453f$RhMIFbKhD07<5>R>IAgc&:gynpr7?iăU"b,;_q>4-EDfN3<YzgeC-h\NX2&X;hA?:V$jz6'.2E8(%CZYsCoGC:c9_l)b_poSăU"cYOS#-b+.YZ]A'vCqU:r^316H#ZsZrfZVi63&c9j77X2EZs4i#=fqn:H(xTN_7^ăU"[NJ=7kl-L=eK(<xj/K=TG;Xkzbz>5&s;_W_edpeAb*v&2O7GpoH+'L>KK8bHVsDăU"w*=7(cL(Wt+$jytuM/]w+*Z0RE++L5rt.de_7*.r/KD,9M/./M#mORK(^'ObgY(ăU"R(W2*4DGk/orqlH,wU%e?XW-W&%[;5;;AH*5j'H_NzwM>Tp>T.N,YEJ,v>UQ6d/ăU"(9dYI8MNpi7o/au?D^siXe[Gjc>jNUH?GEn5PkM#52ajrOF*lzdsK3FeqfypF_văU"z<sA9sThq**:3lwUBk*Kzu:m*-.^_5'L.h&0/4($TR^gCYb&[h$U%)Jen&dvS9YăU"]%1\MHQnzoAK'G9h:cY[lBw-8Ly%9:',AC;=n<sO?a\g117)UaBlrKjms)o$597ăU"\&NXO-*Qd[T?Qiq:?]3b)1e)IQF'E$ABAoK?yEal<%hfuf_/setK))?ekPu'XwkăU"t2=>:.w0tIb#dg1#lwf86t<r]=s\x=V8$jgxnQCoh6k\o5XwmPX/Un%3\rHD)[tăU"Z*sr6TUqSd,+BPkBAKzo;_y>4U1iQK9tnBRHAfZ,??TiEQ1U\S]5jRI.5j'_3qBăU"Y?66[?5ASVGW9_YmCMho6^Jqo6xOYoxOoG1K6_PRh5R13PHj;#CgV4u^ql5oF[SăU"mP=Z%611AP9/SKjNEp+iW?qm.qqa,5KaxUx]w#/JlIm'0qC<[WY)n,m-mKaulC.ăU";bC<JGx_'W)[cGHa_]W/L;Bo6kOWasoYD'uwo'6l<mVm>.nn,Zqd?TlLFDDRuNFăU"3.6Xl/YrfmrhvV+92ITpxL#dFEBt\GhM?O8S#c8cImhnUbLSKN[ZNkeSjK./*/DăU"1TrO[<b9DyH<V5Rz)gJY/M$?=I^no5AX;J-3<W(HI3)HyQ=CpS2l7,Thns9V*nEăU"0vJsCJG,^EYor;-=CC3IiA9_=3$q5HQ:VuKw18pP*OsL7F2H80YFe8Z:LX(.hCRăU"jb6)K8DdZwcw4<&qptgVqllt1(GiyfsyAaZ69qOUfu&,<q:$u9h9\09bG5N:QnWăU"c6d_&C9_2Q5Fju(<GOrU7Z9p5_4Vwk<sgW^X=/=oSvLYP)xUPqlOg=9\*Z>?'k#ăU"&3,*$^W?s)%I*0tCGtdKJWzL9/)nLjAtc2:o[9KgG[QY-NkCs%u:+z7EcPzAZR/ăU"G<6GWhVJC;^,,?2\-Tvx;hQ:KmnHu\T(d6Bc1kw)V#hg#o^'jseY?F9ymCrw&bpăU"8>r4\2ILLR3h(mUTMqs-fAeqG*;XSu[/ck\P+8B,S9>Q.db,CIFVHrTH&ZR2;OhăU"9S1hN)g8okZ?960mR\L**YA-D&yGT#:1O'&WYyaEo%skIaHLvB1n.8UaB*oh0&yăU"rR&_YfZa'S>sHlC4Z\RHY=a$Y+^1X1ND*/M9<$0mK'Tv;O:7bb^d3wIUvNVOJf>ăU"<GFa?JJ<aiL[z6AbI;qKpa?1+;8S\CFb$#\b,ZV%4jDm\u'1+&d8wNX9jCPd0t]ăU"QeK7Z#%x:(=X)f4*uB=h/O[h:BWk-\qrcM-K5vtJO6/]KCLdVaie\C6:^>,i0\3ăU"W<M[f5+4pwb_>/a]ZL<czF>5j(2^-j6(c6[vRkR1%]PLz/cvtxB[7Pq8T-51..OăU"X#VNklc2#ZZtjvuj-o3LOo_XE2xE2='8fPaR*X1.&.[,8]b&t=2#&$i$9w[ff%OăU"n6=\^5;'ubxAdwF;^]Sm_UsG:ookkbEUR'bstu?.3m$1%$TDo\-YMQY)[qIFolDăU"4:J04lp6OW'B^6PNGB9btp3q[?G%vSbs_6abi%CGf.PA(tY$bO:B,n6Jc^H<h2/ăU"8+0ZA92m<k.j;R3ZV9y8:]4&97'j1BsT\rWxcmx,Z,dwjn%BL<YGUA;lOCMc0'răU"-<W)wx/;,,S)kb6JkBkx<c7Ed9I0-d7Qp0$)7+rsnv*+TJ9dCc&_]O.?=s4w6k?ăU")^TgBVLQ*'2VbM^e9Fmf_;sHArk&vY5dm6#lV61UOpw/Ab2MP.NpRc.mzeHjn,_ăU"hIeJ+uDOq[-xNXLh986Hn$-mj:s6vg%LQ*p+SBiz'FaYFX,,SNEUsQ\*s]lUApgăU"&#+?F6Lvx0K?QfGLM[HZN_<\tjjxwhavxGM1WcJh2&Rpb-/,e?vb>pin0Au6_f)ăU"RusBbrJvnlrMJjE.dcT;o?px;DcEP-6%\vxI)K87Xc8FX,loEFc0tdx<aTNCv?hăU":DK4KquGMnlQ]]Q].*PrSfF5u1vc:c9L6JImPU&r0gbXiN&nAzUy3mt::K?o0A0ăU"LK:*AAlRf*+n*DrI_KXErMyU&A.1P^(AwJhK25<aelLMvH%C-Jd6a+cleG\MFrNăU"=?g=I>l^)or\'SWAAtxHYc*Hwti:L73y$07*#*ihsR.1yv;dKnwx;1XEmS%;D#>ăU"<Z5f99J.S$aviN+OB-NmjKw].%XeY7+ELqhbS-aq/TIo39[+=%2imMGu=it(TA]ăU"w[_ji?://SRdswd3o1Vn:>bt;JoA,44%oQ'%8U'QmR2c*8R'EHj%O#[L2Pr.UC1ăU"kit_>OB#cFaxm[h;[CMr*R,^FJf4R7y&u=KoIE)dT97P<SHO%dt\vIC0mw/i<I>ăU"n%4LoeOOiBRVi0TVDtNh30ZuKM(L]*7K>BJDw)blcTE&,pYJc$W;Gm7Es6e1ibaăU"+f_T-+(jIc-QF71ywWW$g-O7*](^%pVYekRAU:UpQV13hnJ)1s_eeraZk32x0v-ăU"W$rikOJ%AhuZ/K1/vL67En5YpV[5n4cp)A0AwDxk=<*,0C>Ad4etnX^E[62n8Z&ăU"+WaeSh%0bDZCEMx/CDIOyI.S4s0:KuidK1Rh_dtRJ8IdI-qd8PYC;xx;5QY)M3ZăU"&4;%?fL)L^YfRuwLCRkwRL3U?L'#MHfTuF)bIln)U8h3SG.Rplm[r#9Y>B4jUSAăU"(T>*Va1orVk>e8C:^b;k>'US)8g&'YU)E)UmR$LpPzXOa1h:K+0&]N[O*[:ph2jăU"J&%7u.H#-KVgY,\xyfastsjkxl%60:$,P3qK*rVgHn4[k;=iCno6ho8K7ol-?pFăU"m?rY4yXg]lG,$31]jK_%.I:z>sDMO.TQhDgovu)$MQVPkZ%(N8G]kB0ZZpKBSfnăU"mdy1Wnt8nX:5a1dfHOq[O72>V^WHDUe;TTOgs>vX*uJn_'G$&G0rESaT9_rU=:QăU"rND,hTIo&rFp^s&e$2W0T.9H9't0bwfxcciqXjE%159D$&3GoDn'\\0eGA4(\sMăU"14fi*6jiAZ/a5Vl8-Yrrmufe3Izj[.U=80fR9U\<(MaLYY)+:xHH77kV+b%ng9tăU"lR6A'mf'0aqr&Q1Aq2]UkTo(]C9j$544Fh9;RCHx]$du4vJ18/f/;ao2\.ncv;AăU"G^wY,pqNOdl.iYA0g$h%AV8lSuEe:-l.i9a'[kiCCnsph;9pC8P>i'H)4xQUqobăU"m=[3hNoPxZqCpxGoL\j_V6NMGAQcN'a#ba-S7<>$-]*=Wt_J^u1cpUdh%\G9l)&ăU"6xx6#\&4fgbJ*odH-=2;[G9E^3nv*F)cv^Q+^6:1m/)&5c/u(2W?q8E0:jP%1C_ăU">S5NE1fW8iF<#EN0GiTN[>o4q.:vms)<uhqaUa,A)K.9fIg#v.tF=dK7xd:aGy%ăU"G/2YKu3VE:.V^LEu,*Y4_63A/m$V6vBA+M$A\?TnrDZY0t8=Qnu_S7%qu+OF1?8ăU"OG8%ukx6n%J2aggWh(MDIyzceQAorkybSvU;7f9%EE/'f;Fw9K'kj/>H\Pe5$mGăU"aqsRnEDPetaI4(AOSw#FeGM02-C>p&^%E2as4a4AY.1$DNQEOH-CU*o)[w/vdKnăU"%7&8Y:?h'1riJ^%Ylxj5BHg9Q0iK%jf]8c-Zf$'$\[?W*Kj6iB*0IPH\2mS#%]RăU"][)Z2U?x6LHxBz-KILbzt?EZcYb<sbfI]1(:Sk4bG5l#i0rc%nHiTv%L+>>XS2tăU"M[jR[:&TTv(UD^#$ss,Y>snH1:)PAJ:kc\1#o*mx:S3PUoY[_0RD&^p-$813J2^ăU"uN'W%R6LG%WUL6(\L^fQ9Vw[a;atUa?XcWTfr6w3I]xekaH\J+Ga*V.a>A3LM,<ăU"bf3jdJ'cpx%rEhLW,/seB(*o,IKCOYwb[N*]g]sfnEmdFp5]-lss)W&O#klRlgXăU"%R00py6hKZ]jy=I(Uwk$:*WJyDV9'Q++EaMl5Af5L;-BL):i5N42y5ogwt%jsWgăU"=O?GSp-T>DbXGhtZmI2(EI2Mfn1<c[i<#6eJB>ZS=XMYyo#M]hk[tm?XrW<g3[?ăU"hRiRKRkU&I'JFWeaD$I).Ouveem?a]+X'i*tDmHwTr3\nQdT7c7745/iF#d)hILăU"uQQ$UT8]xalXBr7b6-J'g^[x?9%%,sfp?4cm]$Xr=xrd:&w8B,vd*H5cJNHRsoXăU"?,q7DDVC5S:9(fe&Q#S,9O-#lvZoP'y.['dnAv?aO/4qz#u$d\YZ?RK<am[.uRaăU"*XKm<kp&ZHvByi\rb09V8V83K7EHr>[*bh[;b<udL,dt)P*VXh-^9B3_XhOsCtYăU"eev1UT)XXZ0.\RIfn2CxPbg/u_qF9AdHX]8TZH($Pg4J6hyI2iAL7'WZGc3=Q1&ăU">kOeJ8QH,<2c<L)$99rP1S+5<>^BJv)k6Y,nT%ca$$jbtRT%e[Z&QY%'?/ATwdZăU"C:RpXdAS'5HKBE2<IauFONv$'>4\c,gc._sjNR]8KWUeOH$UUZkZO86wQwH4G>*ăU"B%\.4DG?SeiGbplNTa;.J.w$64p5?e=VH_g1\w>tx#I.cknmDvnQm]AAH5Zb/VbăU".WmS.C6m(ABn+9E\3usutA\ft\/V<bA<yl-Li'K?#7nLJc3tb0GG=4Nui,9mVWeăU"cdua7^K8<QurF(I:,M3r5SU7)Y^ZD0C-6/^sW'UK8dKfq99wlT=AMKo8Qb7bcPLăU"07MgQHTicxQImplmmQ53SDjvO.rOGBS4>W33nqc#^1Zn6$B6c*>-<IJ,Ho^QuATăU">K32AW'4OVT<N>S-dMLQZcBE3/:0U<q8QB92<C6E=+neiIRl:eJFp%7<$-k$gVoăU"H8;#raL=(rnPO_)7aJ&lOet_f%A]iub02B*l*AL2mBQK[BYO0)$_4&DXoJJeSjbăU"NR.<pA[W-?0qJ-VJT'_p]EW9Fm2TAdK*<$D])Rm<RY<UsTwaZ^lTK,9.?A8%\HSăU"0_;poNw7W9rGbcGn;G\kI;euoQ]GJg0\S<omWh251Oqo(6n(UH6p>Us4UnXg5#kăU"\'NtPb[k*Tvh[E.B$=2,E^Q>#Pwhca<q;5r3;uS=cihGA#r4i&vL\88T4Ns^X,WăU"4iWn)^FlQ7_<6*;>D1]&%\mj[uvH:Jk0-5sP')'L,W1j)iSv0<qU%ZnZT(RACfwăU"6=rKG<P,\xFpRg-GZ8H$>sL##P*ZfYu99JD<(u+XK.\;Q#;u'aJ(f*w12++^K\8ăU"r3BuWg:hRJ(38:FQ;3RD+XqJPwn+]+Da6S.E&>T<I,yrY6=\4okkQ#jtdiPl,\săU"TqY&a-Kgmo<u8vj(3v-$:yT\9p8V%uAI[W[Rnn4A31OT+(*U7I,2u,fX?10ignCăU"WBH]4eAXn*[JP/m&jJ%Bw$T$G&.%8uc\Ee[?pLY1DSVDopF>)Ve%qrGL.OE^RA:ăU"xSw^b:c%c?q-mv;ElI*20#32b[#tP2uy0<4PM#8g;rz\U9f.t*Be&6Iv2)KYEQwăU"5#5I/xC1d(MH.j%j,l/z<nZ4=B1rK8a%$X5u+<qSB#f0CxB0DTmt,&wtu_e\JE,ăU".c-lY4[m+23bc?KPBBfleP\WE1sa:P/DgXGq(Cm>AxnELFDMtMpg\u]]4BZrJ^VăU"V^bDruPX6r3q)-t(f/fOXKK9Xc[t/+=?^72\/aF7GB2i0O)0u3.uP($Q^e#P9oPăU">7'w4up%()9%%'%-%8qAlIjYvdU&n&%%%L)%%%3%%%%qngx%Tijr%tWSgIfp\b3ăU"V9ru:9T(#'A$Qo,MEY8G9Kn<80Su^.Kw:I:[C_o#qkKQ7=V$g_ntTTE6<g*PWYTăU"=rH1&h[A<_e_EU-v3Nz'#5IYgF6;R3?s'ZlCF7-w6VJ-2]Z*OPNjh+B[K.ms[(XăU";P)+a&MpT[9:*G#u<tBeU4HmzIxpX7c<RWO;eEhI]637#pY_QXK=bOIT,boc_WLăU">(C0NanVs)+VY<n.KnSwN_V2Nk[c2A<1c6V;EV-dWcE'UkK:+a+Upv63f3+E&WJăU"92XJ-,rXQtq\1?SnuCnxO%Y9_B2u(OQf^0ez5-%Y/tex\2A8hep#n7Q]+</9q&IăU"bUd6c#cN$0,641\DYGhn/NQFricv0k[76b'C7['f*E#)i-<LwI-H$M(iT<>D*LFăU"m2cIj#EC]C#j/M0#?w_Ob8Zt69RCqVD0ZD2S(tp(xbBN,[l,.Zr-b^a<iOi#PWAăU"g/5M7\[(D:U_>YSU.U$Ei#rBN?W>r'3Ww2Du.pb$XVpd<Vmq9lglYoq(xuDK7JWăU"^?;1wcT7a7%(up(%)9%'%%-%kA&*J3b&dx#%&%%v%*%%3%%%%q%ngxT%ugVX%mSăU"nsjh.cX)>jU5c#XPnGN1zzAao8)?;Ds9%fE>#d&0vrijS71(YeAxPP,xNuDwRR#ăU"I>Ic7YT\&rX(XtWUlHA6$ou(RV.$=;3*M#0?5jk.d+WLbp\O(q6=-$2JE3j<D'DăU"&)5g<Q+8I\qT6VHhncMYrL2w-l7iU]eHx]jiG?&=5E(>^J9Rmab1cM:<cWW]g-IăU"0G<Eab2b.QjdDWc.ppYxrsPUk6xWCh&^q(-RPYbrJ*FLa0A50t<B^]%MWw<ds0kăU"-F5]TX>3oA55ryBdc=kB(l3L#XRg^prvR[D8EUq'ox[;n*3w[;Kpl:HbN?Jx\X$ăU"kRcOW:UD-4T:ioq.TTh\GWUu;d4mv0%ETp3S6F'TE&)eD.DBZPt%ev>]$c;LW[măU"=CYhTp-c3an;vCC?s#0ny(#s$we)7sh./PYp?Wsce^,ONWxWtPJY-7+uFetp<T%ăU"g'p&qtu#geV>)uaN7=s6U(%aVF1#Tl3'j&Q/e-UD#8=y7Q7Bzr;Q0HgR3EOX:EXăU"t-A9</q)u^4oRNpQn?jlemrTVE/N)FWHA\b'F#pITA.2kX:qI<x'6l2;wx([$Q8ăU":kxw0%up()%9%'%7-%CzR1J)%(5<T*%%%u-%%%3%%%%qn%gxTu%gVXm%SugqJdyăU">;FxN#MstHVfQ^'CZ%5Yk,LD?/9*'12vp<#VOk*o2-4\-;oBKS=R,nm0#g-hR3păU"J;4*0b,21B:]:M,XReH7?lve'D__[/\&\N1Xit)#i$#/NCe]sl7$<D+[m0rkIGBăU"GtHGt$kHXBpUB+#FRX+9,juu\YKxr:8I&P[UXrG&il(ZN+'#BeMX\/q#<+=pZ$2ăU"nOFq1<qbuQSKehtDrHeG>6>fiZJ>T:o5=W1)UP8O]/HZTho;_FJ(;fSo2$Ya<CuăU"t58XPKKoECmaGt>>(VZ[h)+\[amj\g>?46c$hY7IMD:jzs^ISIp'?1+sAsg6N(năU"L>^bOoDWoOttIejJbOPYaj.a$K$I2n/xF6L=NKX/*vUIZEm#;-Zx,/NlJJ_/e/'ăU"mO%PFn)kQSa/X)noQ=x.p5F,U6e]Wdmu%]4;geiX>/9,P,7_/92Y4Q)?^_r^;'SăU"IKT;'y16exQdx2R+jwH1C;Z1^>QUN:l#*;JJF'<OxHo5*+nL79#?e[YBS]bJ%3LăU"yhZ+%Sl%_$nHjA>Sn6:/TQ9kn8gVhzU6ZcDi']a4VA)QOo(6QO,]TuENISloBl_ăU"1q:*2J,ZDjK2t\[4kKuS5jl5m#nqPX$X3cH=<-wR[%L8PSHzh#BIcfAMiVcbkdjăU"yWqFPd+]Q/T5cAodp7g/od-LLRhtfOL&XeP?'FbLA:mUWZ<^6aZL#35B%o\B5/lăU"(;brYj$0DWw$n]L-m[eb*B?J1UU?cj*VeeJbbHG/zWkgF7X1_ALu='IfSTh#ktKăU"v;#[*fJzh.lYX.fp$YS'Ju[L1xUQ^Wb?^9+Q(\ZQ\^ve3C9kVFii0gQ\8+^H$pvăU"B[[Hh,L%_,gbGl$0DW<EICNkab%rAm9\Y.9:$G38h,ZT5Y0*^pB#xM&=<q$c6EhăU"RQi[ur'gauEOxPAV<.)_H6VCk&_E?plkH(G:>>Ar7/a;EKPU2*CL%xKt56K*%U>ăU"jp$[EnxbMmJ'$[=Q>jv%+eU'F?6qapcS\MPs/<[sY9Gk)8>H5EhdqBu'[b.Bv%păU"HzY4-cB6S=keN$/63>6gfb'GNT$C3iM(gVSBg-3\cWOO1o][3#q$0Js7LN1U=g?ăU":3,JUUUJZi6MU;u=?(LNSfT6,f-Pflg:oNAk-.IwMCYRmU.ebz07Nz6DL'azIM2ăU"/]Y2y.$^O;Q]P:_Ct&/z[Vc-$KyBu([iSiC*f.GM%y,hqJblJa^-HiZ_4gUWUl9ăU"nnz\[<F#Zt*MupRh=WMH0u7kur:Hb7uaD[[^xqj6ky<:#i4\huJNUU]_</nR&/dăU"nn3N/8NTbGuYf:C0B7\1o5^pU2o%Up377cfqI$Z#?8OL_^STx9\gUQE?;8Q^/fSăU"'#T9*)H[;OUQ.;feZRVD52bS'XFaiTqX[K[r]hq'3]b46;;HD\\&6Zcr(-#F-xEăU"?qyY?N(+Jeopb9)NFwChG?4:ewn9<feU['.cR_mtVX-pKx^nvv;&n7cjKqY#1]=ăU"dPilb::9'_^nOMYZaUOld(5gsw)w#:d95Dw)Yv$R<<X;X?0wHHozsqCk;VBk]-[ăU"=8o/hQ0NZE7nqlFsYeIN*sp'_L5Lxid\it'HBu+nRRcn%bDo]KO/3Y<iQHhWZ*&ăU"ef03;<krGhb>p7zA#1TE?gVuU#>X5JK$_BZA>a>(B)]KX</7c]/;)a^x#'q2[ERăU"J4IG_[Ek>6qdO*,o\Du%p()9%%'%-[%$CljINe;&t<(%%%\,%%%6%%%%qng%xTuăU"w%nsyV%XmSuRgz&c.rm*ps9#HUP+lpaesn_OBCZ5:&<R[FoSr:s#vTtG0]*Dz#oăU";R,&d;0R3fu_u(0-k)[j0n-[YS//9DScgD7m)-Dmz7Q8'#%mt_=3)dESY^eEcAFăU"fNr<abhEbllxVB_EEl>AeF=PT'YKd%eghQQ?tHncCMj1-2G/oHGxM&;\sH5QI]qăU"ISN5N>OXHO>mT43&Hql-$J/Wv5C^5FB9=KME(K?bU-,zUM7[4=Wd/qi/X,)nma)ăU"%SEX#hKby84mIH.$hqC]2=WaiJ8UeYIM9_;*^U1Fzbvb-,5NJ6M;_v\^S^.XR^_ăU"VKin<]'m]C2Ot7ghjo?2LW'gd\?7FHPUH0q<*4//3oo2ruVN$>F;zVQe0OBXi0YăU"t'B1_yzn*hw23fm,7V</mgfHa))Jca1dIOP-bj&Qmu25H/bX$%P+KTa=:H_wVk[ăU"K(%k0+,Wot?M<VBfgUFLuUv#V^/Fjg'78lO'Uiqbmgq>1>I#NOY&X1y:8g3QmUZăU"=Nab'K2>IDNlN'Y+(%2OYf:#C9zraSTi(5mg1)5/;cB9Cyra?]lP7u<ck,^J89CăU"h#YRG5Jpsty>t]G-3EzF3XobF2lLRo#R*dDWug])5;#\JEg:)Un^vJME((%E];OăU"3G<?K.1k$&7pbWsN:yw3>p\yKXJqO\h;qY5;uxK/$MWNea%5tI&0PRPOmr>)5skăU"\P\An/i)g9HROOv]+#%vmA]Jq]_tB^5NEqYfK_W>AGf-:b*iN_H4%DtQVYK&,]XăU"tPaqK\\.zkG)):kUJx^>+KEsWltO02.ggsE_.;7)&kL8+=[DnyD8$SL64m5j*8aăU"BQG>tWe,^/64&_Zat9Skc&3D(.KbW^BkLqT[;CxQVIe#3rvo)E)anZe8-rmL^fWăU"u4/w,4P_PfA[:Ro'o+fY)/6ak;0ef9'I4p3D=xIO$%4jLtm,o;VmPD5I7C8B/MyăU"tU;Zf(0s,e\=MDb(5BuE+QODP-s71cDoIpxx9+BGF/wGNX?kwPZFQh<N%'up&%'ăU"9%9%%%%%d%L?t%I%%%%%%%%%%%%%%%)%%%%%%%%%&%U%%%%%%%%%f%xrTu%p&'9ăEND SUBăSUB V3ăU"%%9%%%%%%L,?tI%%%%%%%%%%%%%%%+%%%%%%%%%&%%U%%%%G%%%%ijr%txTu%p&ăU"'9%%9%%%%%%L,?tI%%%%%%%%%%%%%%%*%%%%%%%%%&%%U%%%%k%%%%ith%xTup%ăU"&'9%%9%%%#%%L?'tI%%%%%%%%%%%%%%%*%%%%%%%%%&%%U%%%&8%%%%qngx%TupăU"&%'9%9%%'%-a%0#lgICQO&gO&%%%j'%%%0%%%%%%%%%&%E#%%%[%%%%f%iiYi%tăU"xSg%yrup%&'9%%9%'%%-%ZCflIwI'K9:'7%%G)%%%1%%%%%%%%%&%%E%%%'X&%%ăU"%uwns%yVXm%Sgfx%up&'%9%9%%'%-%89&mIVi+n1%b%%%&k%%%%0%%%%%%%%%&%ăU"E%%%%C)%%%wj%rYit%xSgy%rup&%'9%/%%%%%d%7ZlLI=Y(%#H%%%%H%%%%/%%%ăU"%%%%%%&%E#%%%S%)%%f%xrTh%riSu%gup&%'9%9%%'%-4%f%*aJkS+*B;%%(%[%ăU"%%%1%%%%%%%%%&%E[%%%H%)%%f%xrTr%fpjS%gfyu%p&'9%%9%'[%-%B%z1Jf6băU"X?n#6%%B%p%%2%%%%%%%%%&%%E%%(%4*%%%fxr%TugV%XmSf%xrup%&'9%%9%'%ăU"#-%o>m*Jtk9(:+%7%%f%%%%2%%%%%%%%%&%%E%%%'R;%%%fxrT%ugVX%mSgf%xuăU"p&%'9%9%%'%-.%P%1[JWGA'c.(%(%H,%%%4%%%%%%%%%&%E[%%%/%<%%i%jrtx%ăU"Tijr%tVSg%fpup%&'9%%9%'%#-%x,R1JS8)I0.(.%%A,%%%4%%%%%%%%%&%%E%%ăU"%'e?%%%ijrt%xTij%rtVS%gfxu%p&'9%%9%'%%-%x&/1JVu=AHT#H%%B&A%%4%%ăU"%%%%%%%&%%E%%%%GC%%%ith%xTwj%firj.Sy'y%up&'%9%9%%'%-%8qAlIjYvdUăU"&n&%%%L)%%%3%%%%%%%%%&%E%%%%Og%%%qn%gxTi%jrtW%Sgfp%up&'%9%9%%'%ăU"-%(k&*J;3&dx'#&%%%v*%%%3%%%%%%%%%&%E%7%%nh%%%qn%gxTu%gVXm%Snsh%ăU"up&'%9%9%%'%-%'Cz1JE)%5<%T*%%%u-%%%3%%%%%%%%%%%E%7%%aj%%%qn%gxTăU"u%gVXm%Sugq%up&'%9%9%%'%-%7$ClIWNe;t%<(%%%\,%%%6%%%%%%%%%%%E%%%ăU"%hp%%%qn%gxTu%wnsy%VXmS%ugzu%p*+%%%%%7%%7%/#)%%X%s%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=113AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJoe Huber, Jr.                 WATER SIMULATION               huberjjr@nicom.com             08-19-98 (13:57)       QB, QBasic, PDS        136  4221     WATER.BAS   ' WATER.BAS, a particle sim byă' Hit 'A' to pull the plug, ESC to exităă' If anybody has any ideas about how to implement pressure, please email meăă' please send any comments, questions, ect. to huberjjr@nicom.comăăDEFINT A-Z   ' Increases speed considerablelyăăTYPE Dropă X AS INTEGERă Y AS INTEGERă FreeTime AS INTEGER       ' Number of cycles of free fallă LastDir AS INTEGERăEND TYPEăăCONST MaxDrops = 6000    ' less=faster.  On my P133, I can getăCONST MaxX = 320         ' about 33 fps compiled with 6000 dropsăCONST MaxY = 200         ' and 20 fps in QBasic w/1000 dropsăăCONST SpreadChance = .1       ' try 1 or 0 for interesting effectsăCONST SpreadTime = 3         ' how many cycles of free-fall it takesă                             ' the water to spreadăăRANDOMIZE TIMERăăDIM Water(MaxDrops) AS Drop        ' the bucket :)ăăFOR I = 1 TO MaxDropsă Water(I).X = MaxX \ 2ă Water(I).Y = 1ă Water(I).FreeTime = 0ăNEXT IăăSCREEN 13ăă' Draws box at topăLINE ((MaxX \ 2 - 20), 1)-((MaxX \ 2 - 20), 20), 15ăLINE ((MaxX \ 2 + 20), 1)-((MaxX \ 2 + 20), 20), 15ăLINE ((MaxX \ 2 - 20), 20)-((MaxX \ 2 + 20), 20), 15ăă' Draws PipeăLINE ((MaxX \ 2 - 4), 20)-((MaxX \ 2 - 4), 44), 15ăLINE ((MaxX \ 2 + 4), 20)-((MaxX \ 2 + 4), 50), 15ăLINE ((MaxX \ 2 - 4), 44)-((MaxX \ 2 - 40), 44), 15ăLINE ((MaxX \ 2 + 4), 50)-((MaxX \ 2 - 40), 50), 15ăă'Draws slanted lineăLINE (50, 40)-(200, 100), 15ăLINE (50, 41)-(200, 101), 15ăLINE (50, 42)-(200, 102), 15ăLINE (50, 43)-(200, 103), 15ăăst! = TIMERăăDOă FOR I = 1 TO MaxDropsă ă  OldX = Water(I).X    ' For eraseă  OldY = Water(I).Yă  WLeft = Water(I).X - 1     ' Precalcs posision to the left,ă  WRight = Water(I).X + 1    ' "                      " right,ă  WDown = Water(I).Y + 1     ' And belowă ă  PntDown = POINT(Water(I).X, WDown)   ' Check below dropletă  IF PntDown = 0 THENă   IF Water(I).FreeTime = SpreadTime THEN                ' spread effectă    IF RND < SpreadChance THENă     IF RND < .5 THEN                                   ' 50-50 chanceă      PntRight = POINT(WRight, WDown)   ' confirm that the spaceă      IF PntRight = 0 THEN              ' to right is free...ă       Water(I).X = WRightă      END IFă     ELSEă      PntLeft = POINT(WLeft, WDown)    ' ...or to the leftă      IF PntLeft = 0 THENă       Water(I).X = WLeftă      END IFă     END IFă    END IFă    Water(I).FreeTime = 0ă   END IFă   Water(I).Y = WDownă   Water(I).FreeTime = Water(I).FreeTime + 1ă   Water(I).LastDir = 0ă  ELSEă   PntLeft = POINT(WLeft, Water(I).Y)                   ' can't fall down, soă   PntRight = POINT(WRight, Water(I).Y)                 ' check to right &ă   IF PntLeft = 0 AND PntRight = 0 THEN                 ' leftă    IF Water(I).LastDir <> 0 THENă     Water(I).X = Water(I).X + Water(I).LastDir         ' if both directionsă    ELSE                                                ' are free, travelă     IF RND < .5 THEN                                   ' in last known dir,ă      Water(I).X = WLeft                                ' else pick a new oneă      Water(I).LastDir = -1ă     ELSE                                               ' (50-50 chance)ă      Water(I).X = WRightă      Water(I).LastDir = 1ă     END IFă    END IFă   ELSEIF PntLeft = 0 THEN                              ' if the left is open,ă    Water(I).X = WLeft                                  ' go there...ă    Water(I).LastDir = -1ă   ELSEIF PntRight = 0 THEN                             ' ...or else go rightă    Water(I).X = WRightă    Water(I).LastDir = 1ă   END IFă  END IFă  IF OldX <> Water(I).X OR OldY <> Water(I).Y THEN  ' did it move?ă   PSET (OldX, OldY), 0                             ' yes, eraseă   PSET (Water(I).X, Water(I).Y), 1                 ' and drawă  END IFă NEXT Iăă I$ = INKEY$ă SELECT CASE UCASE$(I$)ă  CASE "A"ă   FOR I = 0 TO 3                ' Removes the corkă    PSET (MaxX \ 2 + I, 20), 0ă    PSET (MaxX \ 2 - I, 20), 0ă   NEXT Iă  CASE CHR$(27)   ' Escapeă   EXIT DOă END SELECTăă f% = f% + 1ă IF f% = 24 THENă  LOCATE 1, 1ă  PRINT ABS(INT(f% / ((st! - TIMER) + .0001))); "fps"ă  f% = 0ă  st! = TIMERă END IFăăLOOPăăENDăAnders Olofsson                TORCH WHOLE SCREEN             anders.olofsson@mail.bip.net   08-21-98 (17:07)       QB, QBasic, PDS        80   1963     FIRE.BAS    ' Slightly modified "flames.bas" renamed to "fire.bas", by Anders Olofsson.ă'ă'       E-mail: anders.olofsson@mail.bip.netă'               anders.olofsson@zonline.ostersund.seă'ă'    Compile for best performance.ă'ăăDEFINT A-ZăDECLARE SUB Palet (Attr%, Red%, Green%, Blue%)ăDECLARE SUB fPRINT (sx%, Y%, Text$, C%)ăăCONST StartX = 0, StartY = 0ăCONST EndX = 319, EndY = 199ăăSCREEN 13: RANDOMIZE TIMERăă' Set paletteăFOR A = 1 TO 63ă Palet A, A, 0, 0: Palet A + 63, 63, A, 0: Palet A + 126, 63, 63, AăNEXT Aăă' Change "LONG" at the DIM YBase line to "INTEGER"ă' when you're going to compile this thing...ăăDIM YBase(0 TO 200) AS LONG  'For high speed...ăFOR Y = 0 TO 200: YBase(Y) = 320& * Y: NEXTăăDEF SEG = &HA000ăLINE (55, 100)-(275, 100), 145ăFOR Y = 99 TO 50 STEP -1ă LINE (55, Y)-(275, Y), PEEK(320& * (Y + 1) + 175) - 1ăNEXTăăfPRINT 114, 60, "Fire effect", 0: fPRINT 115, 60, "Fire effect", 70ăfPRINT 69, 80, "By Anders Olofsson, 1998", 0: fPRINT 70, 80, "By Anders Olofsson, 1998", 70ăfPRINT 50, 120, "Press any key to burn this!", 140ăăWHILE LEN(INKEY$): WENDăDO: LOOP UNTIL LEN(INKEY$)ăăDEF SEG = &HA000ăăDOă FOR Y = EndY TO StartY + 1 STEP -1ă  FOR X = StartX TO EndXă   C = (PEEK(YBase(Y + 1) + X) + PEEK(YBase(Y - 1) + X) + PEEK(YBase(Y) + X + 1) + PEEK(YBase(Y) + X - 1)) \ 4 - 1ă   POKE YBase(Y) + X, Că  NEXTă NEXTăLOOP UNTIL LEN(INKEY$)ăăDEF SEGăăWIDTH 80, 25: COLOR 14, 4: LOCATE 1, 2: PRINT " Fire plasma effect "ăCOLOR 7, 0: PRINT "By Anders Olofsson, 1998."ăENDăăDEFSNG A-ZăSUB fPRINT (sx%, Y%, Text$, C%)ăX% = sx%ăDEF SEG = &HF000ăFOR T% = 1 TO LEN(Text$)ăFOR ty% = Y% TO Y% + 7ă mask% = PEEK(&HFA63 + (ASC(MID$(Text$, T%, 1)) * 8) + 11 + ty% - Y%) * 128ă LINE (X%, ty%)-STEP(7, 0), C%, , mask%ăNEXTă X% = X% + 8ăNEXTăDEF SEGăăEND SUBăăDEFINT A-ZăSUB Palet (Attr%, Red%, Green%, Blue%)ăOUT &H3C8, Attr%ăOUT &H3C9, Red%ăOUT &H3C9, Green%ăOUT &H3C9, Blue%ăEND SUBăVictor Woeltjen                ANY PALETTE TRANSLUCENCY EFFECTskywise@fix.net                08-19-98 (03:45)       QB, QBasic, PDS        224  7789     VGATRANS.BASDECLARE SUB TranslucentBox (x1%, y1%, x2%, y2%, TableSeg%, TableOff%)ăDECLARE SUB InitTrans ()ăDEFINT A-ZăDECLARE SUB MakeIndex (segm%, offs%, BaseColor%, Spread%)ăă'Before doing anything, initialise TSRout% and run InitTrans (seen below)ă'ă'Then you're set up... Before you can use the transparency effects you needă'to make an index. The MakeIndex routine works under any palette, though youă'must be in screen 13. Look below to see the syntax for MakeIndex.ă'ă'Once you have an index (or indices, if you want multiple translucent colors)ă'set up, you can use the TranslucentBox routine to create a translucentă'square over a chosen portion of the screen. Again, look below for syntax.ă'ă'Enjoy...ă'ă'Copyright 1998 Rev. Victor Woeltjenă'Use freely, but give me credit if you use any of these routines.ă'ă'Note: In VBDOS and possibly in QB 4.5 you cannot run this from theă'evironment. It should compile just fine, though.ă'ă'Second note: You need 2K free to run the MakeIndex sub. It may be best toă'create a few indexes outside of your main program and then save them toă'disk.ăăDIM SHARED TSRout%(40)     'These two lines are required!ăInitTrans                  '!!!ăăDIM Blah(127)              'This is the array in which the color switchingă                           'table will be stored. You can have as manyă                           'different tables for as many different colorsă                           'as you like... Each needs to be 256 bytes ină                           'size.ăăColour = 32                'The colour you want to use as a base for theă                           'transparency.ă                                                    ăSCREEN 13ăăMakeIndex VARSEG(Blah(0)), VARPTR(Blah(0)), Colour, 15  'Make the table.ăă'VARSEG(Blah(0)), and VARPTR(Blah(0)) - The place in memory where you wantă'   the table to be stored...ă'Colour - You can replace this with any number or integer variable. Thisă'   indicates the color you want the table to me mapped for. To make aă'   blue translucency table, select a blue color (use brighter colors foră'   clearer translucency)ă'15 - This is the number of levels of brightness you want to have. Higheră'   values give better effect, but if you're making your indices on the flyă'   you should use a lower value.ăăăRANDOMIZE 44                        'Fill the screen with lines.ăFOR n = 1 TO 1000ă  x1 = RND * 319ă  x2 = RND * 319ă  y1 = RND * 199ă  y2 = RND * 199ă  LINE (x1, y1)-(x2, y2), RND * 255ăNEXT năăDO: LOOP UNTIL INKEY$ <> ""ăăTranslucentBox 20, 20, 299, 179, VARSEG(Blah(0)), VARPTR(Blah(0))ăă'20, 20 - Upper left hand corner of the box.ă'299, 179 - Lower right hand corner.ă'VARSEG(Blah(0)), VARPTR(Blah(0)) - Location of the color switching table toă'   be used.ăăDO: LOOP UNTIL INKEY$ <> ""ăăDEFLNG A-ZăSUB InitTransăăASM$ = "1E5589E58B76088B4E128B5610B800A08ED889D389D0C1E008C1E30601C"ăASM$ = ASM$ + "301CBB800008A0701C68B460A8ED88A048B760850B800A08ED8588807418"ăASM$ = ASM$ + "B460E39C17ECB8B4E12428B460C39C27EC05D1FCA0600"ăăDEF SEG = VARSEG(TSRout%(0))ă FOR PokeAsm% = 0 TO 81ă  POKE VARPTR(TSRout%(0)) + PokeAsm%, VAL("&H" + MID$(ASM$, PokeAsm% * 2 + 1, 2))ă NEXT PokeAsm%ăDEF SEGăăăEND SUBăăDEFINT A-ZăSUB MakeIndex (segm, offs, BaseColor, Spread)ăăBCol = BaseColor MOD 256        'Make sure BaseColor andăSprd = Spread MOD 256           'Spread fit the correct bounds by assigningă                                'new variables to them.ăăDIM Bright(0 TO 255)            'Index of brightnessăDIM RGBVal(0 TO 255, 1 TO 3)    'Index of RGB valuesăDIM RplVal(0 TO (Sprd - 1))     'Index of replacement values for specifică                                'brightnesses.ăăăFOR attr = 0 TO 255             'Get all the colors...ă  OUT &H3C7, attr               'Get ready to read palette info...ă  red = INP(&H3C9)              'And read that info.ă  gre = INP(&H3C9)ă  blu = INP(&H3C9)ă  Bright(attr) = (Sprd - 1) * ((red + gre + blu) / 189!) 'Get average brightness.ă  RGBVal(attr, 1) = red         'Store the RGB Valuesă  RGBVal(attr, 2) = greă  RGBVal(attr, 3) = bluăNEXT attră                          ădelta! = 1 / Sprd               'Change in percentage per step.ăcp! = 0                         'Reset the percentage counter.ăăFOR CS = 0 TO Sprd - 1          'Step through the spread...ă  cp! = cp! + delta!            'Increment the percentage counter.ă  red = RGBVal(BCol, 1) * cp!   'Define the target RGB value.ă  gre = RGBVal(BCol, 2) * cp!ă  blu = RGBVal(BCol, 3) * cp!ă  closest = 0                   'Reset closest and maximum difference.ă  maxdiff = 255ă  FOR check = 0 TO 255          'Check the colors for a match.ă    rd = ABS(RGBVal(check, 1) - red)   'Get the difference from theă    gd = ABS(RGBVal(check, 2) - gre)   'target RGB value.ă    bd = ABS(RGBVal(check, 3) - blu)ă    diff = rd + gd + bd                'Compute the total differenceă    IF diff < maxdiff THEN      'If this is the least different so fară      closest = check           'set closest to the current attributeă      maxdiff = diff            'and set the maximum difference.ă    END IFă  NEXT checkă  RplVal(CS) = closest          'Set the replacement value.ăNEXT CSăăFOR pokeidx = 0 TO 255          'Now save the index into the specifiedă  DEF SEG = segm                'segment and offset.ă    POKE offs + pokeidx, RplVal(Bright(pokeidx))ă  DEF SEGăNEXT pokeidxăăEND SUBăăSUB SourceCodeăă'Not really a routine, just assembly source for the translucent boxă'routine :)ăă';Overview of the stack:ă';bp              0ă';ds              2ă';BAS off         4ă';BAS seg *       6ă';VARPTR(Blah)    8ă';VARSEG(Blah)    Aă';y2              Că';x2              Eă';y1             10ă';x1             12ăă';cx = curxă';dx = curyăă'push dsă'push bpăă'mov bp, spăă'mov si, [bp+0x8]      ;Set si to the offset of the color table.ă'mov cx, [bp+0x12]     ;Set cx to the starting x posă'mov dx, [bp+0x10]     ;Set dx to the starting y posă'ă'ChangeColoră'mov ax, 0xA000        ;Set ds to the screen segmentă'mov ds, axă'mov bx, dx            ;And put the ypos in bx,ă'mov ax, dx            ;then multiply it by 320 using SHLs for speed.ă'shl ax, 8        ă'shl bx, 6ă'add bx, axă'add bx, cx            ;Finally, add the xpos to bx to get the screen offset.ă'mov ax, 0             ;Clear out ax,ă'mov al, [bx]          ;Now get the pixel color,ă'add si, ax            ;and add it to si...ă'mov ax, [bp+0xA]      ;Put the color table's segment in dsă'mov ds, axă'mov al, [si]          ;And get the replacement color.ă'mov si, [bp+0x8]      ;Replace si with the beginning table offset for later.ă'push ax               ;Save the color momentarily...ă'mov ax, 0xA000        ;Set ds to the screen seg,ă'mov ds, axă'pop ax                ;Get back the color,ă'mov [bx], al          ;and put it on screen!ăă'inc cx                ;Increment the xposă'mov ax, [bp+0xE]      ;and compare it with x2ă'cmp cx, ax            ;to see if the right boundary has been passed.ă'jle ChangeColor       ;if not, go ahead and draw.ă'mov cx, [bp+0x12]     ;Otherwise, restore x1,ă'inc dx                ;and increment the ypos.ă'mov ax, [bp+0xC]      ;Now compare it with y2...ă'cmp dx, axă'jle ChangeColoră'ă'pop bpă'pop dsăă'retf 0x6ăăEND SUBăăSUB TranslucentBox (x1, y1, x2, y2, TableSeg, TableOff)ăă'x1,y1,x2,y2: Endpoints for square.ă'TableSeg,TableOff: VARSEG and VARPTR of the variable or array ină'                   which the color table is stored.ăăDEF SEG = VARSEG(TSRout%(0))ă  CALL Absolute(BYVAL x1, BYVAL y1, BYVAL x2, BYVAL y2, BYVAL TableSeg, BYVAL TableOff, VARPTR(TSRout%(0)))ăDEF SEGăăEND SUBăThomas Ludwig                  PB FIRE VERSION 7              lycium@hotmail.com             08-27-98 (21:44)       PB                     226  5702     PBFIRE7.BAS '  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă' | PBFiRE ver 7 |                              |ă' | -------------                               |ă' |                                             |ă' | This prog is Public Domain, but if u use it,|ă' | credit me.                                  |ă' |                                             |ă' | Thomas Ludwig                               |ă' | lycium@hotmail.com                          |ă' |                                             |ă' | I'm looking for people to join my one-man   |ă' | demogroup BlackBox, so if you're interested |ă' | please mail me, and I'll get back to you    |ă' | within 4 days                               |ă'  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăcls:randomize timerăădim dynamic img(32320) as byteăădim dynamic div5(255*5) as integerăăfor x% = 0 to 255*5ă	div5(x%) = cint((x%/5)-1)ănext x%ăăprint "PBFiRE 7"ăprint "--------"ăprintăprint "This is probably the last version of my"ăprint "PBFiRE routine, at least until I see sumthin"ăprint "kewl I missed ;) If you modify it, please send"ăprint "me a copy of the finished source, and if"ăprint "possible, credit me."ăprintăprint "Punch the beige plastic"ădo:loop until inkey$ <> ""ăă! mov   ax, &h13 ;Set screen 13 in ASMă! int   16ăăphongpal 63,0,20,128,2,0ăă'OUT &H3D4, 9 'This tweaks the screenă'OUT &H3D5, 3 'to 320x100 resolution.ăăscreenseg% = &ha7d0ădef seg = screenseg%ăimgseg% = varseg(img(0))ăă'Bottom line for 320x200 = 31680, def seg &ha7d0ă'Bottom line for 320x100 = 31680, def seg &ha000ăăStart! = timerăăBeginLoop:ăă! xor dl,dlă! mov es,imgseg%ă! mov bl,200ăfor px% = 0 to 319ăă   ! mov ax,px%ă   ! add ax,31680ă   ! mov di,axăă	if int(rnd*2) = 1 thenă      ! mov es:[di],blăă   elseă      ! mov es:[di],dlăă   end ifăănext px%ăă! mov pm%,3200 ;Start at 10,0 (10*320 = 3200)ăăwait &h3da, 8 'Wait for vertical retrace, kills flicker and locks FPSă              'at monitor refresh rate.ăăBegin:ăă	! mov ax,pm%    ;Move pixel mem location to AXă	! inc ax        ;Increment it per pixelă	! sub ax,320    ;Subtract 320 from AXă	! mov above%,ax ;Move result to above%ăă	! add ax,320 ;Not done yet - add 320 to AXă	! mov pm%,ax ;Move result to pm%ăă	'Grab first value from virtual screenă   ! mov es,imgseg% ;Point to img(0) segmentă	! mov di,ax      ;Move pm% (in AX) to offset reg.ă	! mov al,es:[di] ;Get pixel val in ALă   ! mov pixel%,al  ;Move AL to pixel%ăă 	! mov dx,above% ;Move above% to DX - fasterăă   ! cmp pixel%,1 ;Compare pixel% to 1ă   ! jl Skip      ;If it's less, Skip the pixelăă   '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă   'The next line is the "core" of the routine. It blurs the pixelă   'by averaging the colours of the surrounding pixels.ă	p% = div5(pixel%+img(pm%+1)+img(pm%-1)+img(pm%+320)+img(above%))ăă   '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ăă   ! mov al,p% ;Move p% to AX (speed)ă   ! cmp al,1  ;Compare p% to 1ă   ! jl Skip   ;If it's less, Skip the pixelăă   ! mov es,imgseg% ;Set mem segmet to img(0)ă   ! mov di,dx      ;Set mem offset to above% (stored in DX)ă   ! mov es:[di],al ;Write to memăăSkip:ăă   ! cmp dx,31680  ;Are we at the bottom?ă   ! je DoneFrame  ;If so, the frame's done!ă   ! jmp Begin     ;Otherwise, carry on!ăăDoneFrame:ăămemcopy imgseg%,&ha7d0 'Copy frame 4 bytes per clock!ăă! mov ax,f& ;Move frame counter var to AXă! inc ax    ;Incr AXă! mov f&,ax ;Move back to f&ăă!  in      al,96 ;Get input from port 96ă!  cmp     al,1  ;Is it 1?ă!  je      Done  ;If so, exit the loop!ăă! jmp BeginLoopăăDone:ăFinish! = timerăă!  mov     ax,3 ;Return to text modeă!  int     &h10ăăclsăscreen 0ăwidth 80ăcolor 4ăprint "PBFiRE v7"ăcolor 8ăprint "---------"ăprintăcolor 7ăprint f&;"frames for";Finish!-Start!;"seconds."ăprint "Did";f&/(Finish!-Start!);"frames per second."ăprintăcolor 8ăprint "Lycium 23 August '98"ăcolor 9ăprint "lycium@hotmail.com"ăcolor 7ăăsystemăăsub PhongPal(Red%,Green%,Blue%,Light%,Reflect%,Ambient%)ăăout &h3C8,0ăăfor d%=0 TO 255ăăi! = COS((255 - d%) / 512 * 3.141592)ăref! = (i! ^ Reflect%) * Light%ăAmb! = Ambient% / 63ăătmp% = Red% * Amb! + Red% * i! + ref!ăIF tmp% > 63 THEN tmp% = 63ă	out &h03C9,tmp%ăătmp% = Green% * Amb! + Green% * i! + ref!ăIF tmp% > 63 THEN tmp% = 63ă	out &h03C9,tmp%ăătmp% = Blue% * Amb! + Blue% * i! + ref!ăIF tmp% > 63 THEN tmp% = 63ă	out &h03C9,tmp%ăănext d%ăăend subăăSUB memcopy (BYVAL inputseg as integer, BYVAL destseg as integer)ă	! push    ds            ;Save PBă	! push    si            ;mem segments!!!ă	! mov     ds, inputsegă	! xor     si, siă	! xor     di, diă	! mov     es, destsegă	! mov     cx, &h1E50 ;Number of times &h(32000-(320*3))/4ăă	' \/\/\/\/\/\/ rep movsd - No 386+ instructions in PB!!!ă	! db      &hF3ă	! db      &h66ă	! db      &hA5ă	' /\/\/\/\/\/\ rep movsd - No 386+ instructions in PB!!!ăă	! pop     si ;Restore PBă	! pop     ds ;mem segmentsăEND SUBăă'=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=ă'Credits!!!ă'-----------ăă'Matt Gulden (Folter) - For getting me started with PB!! Thankx man, u rule!ă'  mattg@thrillhaus.com, page www.THRILLHAUS.com (rocks!)ăă'Danny Beardsley - For helpin me out with all kindza stuffă'  dsb@cyberdude.com, page www.dnai.com/~beardsăă'ABC archives - For being the best QBasic source ever! (And publishing thisă'  code)ăă'All the other people who made fire routines (Matt esp.), I learned from eachă'  one!ăă'You, for downloading this file, thus keeping basic alive!ăDave Navarro, Jr.              PB CROSS-FADE ROUTINE          dave@powerbasic.com            09-01-98 (15:11)       PB                     127  2703     CROSFADE.BAS'Converted to PowerBASIC by Dave Navarro, Jr. (dave@powerbasic.com)ă'Original Pascal code by Bas van Gallen and David Proper.ă'ă'If you make any changes, I would appreciate it if you would emailă'them to me.ăă$OPTIMIZE SPEEDă$ERROR BOUNDS OFF       'this is a MUST! for version 3.00c or laterăăDEFINT A-ZăDIM creds$(0:12)ăăcreds$( 0)="This cross-fade routine"ăcreds$( 1)="was converted to PowerBASIC by"ăcreds$( 2)="Dave Navarro, Jr."ăcreds$( 3)="Original Pascal code written by"ăcreds$( 4)="David Proper and..."ăcreds$( 5)="Bas van Gaalen."ăcreds$( 6)="This routine was"ăcreds$( 7)="enhanced a bit"ăcreds$( 8)="in comparison with"ăcreds$( 9)="the Pascal version by"ăcreds$(10)="using more assembler code..."ăcreds$(11)="May the Force Be With You..."ăă'set 320x200x256 modeă! push DSă! mov  AX, &H13ă! int  &H10ă! pop  DSăăSetPal 1,0,0,0ăSetPal 2,0,0,0ăSetPal 3, 31, 63, 31ăcurcol = 1ătxtidx = 0ăDOă  ClearTxt curcol, 3-curcolă  WriteTxt curcol, 3-curcol, creds$(txtidx)ă  FOR i = 0 TO 63ă    SetPal curcol, i \ 2, i, i \ 2ă    SetPal 3-curcol, (63-i) \ 2, 63-i, (63-i) \ 2ă  NEXT iă  curcol = 1+(curcol MOD 2)ă  txtidx = (1+txtidx) MOD 13ă  SLEEP 1ăLOOP UNTIL LEN(INKEY$)ăă'set text modeă! push DSă! mov  AX, &H3ă! int  &H10ă! pop  DSăăENDăăăSUB SetPal(BYVAL c AS BYTE,BYVAL r AS BYTE,BYVAL g AS BYTE,BYVAL b AS BYTE)ăă  ! push DSăă  ! mov  DX, &H3DAăVert1:ă  ! in   AL,DXă  ! test AL,8ă  ! jz   Vert1ăVert2:ă  ! in   AL,DXă  ! test AL,8ă  ! jnz  Vert2ă  ! mov  DX,&H3C8ă  ! mov  AX, că  ! out  DX, ALă  ! inc  DXă  ! mov  AL, ră  ! out  DX, ALă  ! mov  AL, gă  ! out  DX, ALă  ! mov  AL, bă  ! out  DX, ALăă  ! push DSăăEND SUBăăSUB ClearTxt(BYVAL col AS BYTE, BYVAL newc AS BYTE)ă  DEF SEG=&HA000ă    FOR x=0 TO 319ă      FOR y=100 TO 107ă        vofs??=y * 320 + xă        IF PEEK(vofs??)=col THENă          POKE vofs??,0ă        ELSEIF PEEK(vofs??)<>0 THENă          POKE vofs??,newcă        END IFă      NEXT yă    NEXT xă  DEF SEGăEND SUBăăSUB WriteTxt(BYVAL col AS BYTE, BYVAL cur AS BYTE, txt$)ă  fseg??=&HF000ă  fofs??=&HFA6Eă  x = (300 - 8 * LEN(txt$)) \ 2ă  y = 100ă  FOR i = 1 TO LEN(txt$)ă    ch = ASCII(MID$(Txt$, I, 1))ă    IF ch = -1 THEN ch = 0ă    FOR j = 0 TO 7ă      FOR k = 0 TO 7ă        DEF SEG=fseg??ă        z = PEEK(fofs??+ch*8+j)ă        SHIFT LEFT z, kă        IF (z AND 128) <> 0 THENă          DEF SEG=&HA000ă          vofs?? = (y+j)*320+(i*8)+x+kă          IF PEEK(vofs??) = cur THENă            POKE vofs??, col+cură          ELSEă            POKE vofs??, colă          END IFă        END IFă      NEXT kă    NEXT jă  NEXT iă  DEF SEGăEND SUBăAndrew S. Gibson               WEIRD COLOR MIXING             zapf_dingbat@juno.com          09-15-98 (00:10)       QB, PDS                479  20658    PSYCHO.BAS  ' This is what happens when I get weird... Experiments in mixing... !?ă' Press escape to stop, You'll need QuickBASIC. It's funny too !ă' Most are mine...You can use them in messages..ă'Email / Zapf_DingBat@JUNO.COMăDEFINT A-ZăTYPE Regtypeă  AX    AS INTEGERă  BX    AS INTEGERă  CX    AS INTEGERă  DX    AS INTEGERă  BP    AS INTEGERă  SI    AS INTEGERă  DI    AS INTEGERă  Flags AS INTEGERă  DS    AS INTEGERă  ES    AS INTEGERăEND TYPEăăDECLARE FUNCTION Monitor% (VSSegment)ăDECLARE SUB ModeSet (ModeNum)ăDECLARE SUB STDOUT (MESSAGETEXT$)ăDECLARE SUB VgaPsycho (PlaneLen&)ăDIM SHARED Registers AS RegtypeăăRANDOMIZE -TIMERăVideo = Monitor%(SSeg)ăSELECT CASE Videoă        CASE IS < 4: STDOUT "Enhanced Graphics Adapter (EGA) is the least required adapter for Psycho." + CHR$(10) + CHR$(13): Ingraphics = 0: GOTO TerminateăEND SELECTăăSELECT CASE COMMAND$ă        CASE IS = "0X0D", "7", "320X200": ModeSet &HD: PlaneLength = 7959: Ingraphics = -1ă        CASE IS = "0X0E", "8", "640X200": ModeSet &HE: PlaneLength = 15919: Ingraphics = -1ă        CASE IS = "0X10", "9", "640X350": ModeSet &H10: PlaneLength = 28000: Ingraphics = -1ă        CASE IS = "0X12", "12", "640X480"ă        IF Video = 4 THEN STDOUT "Video Gate Array adapter (VGA) ABSOLUTELY required for this mode." + CHR$(10) + CHR$(13): Ingraphics = 0: GOTO Terminateă        ModeSet &H12: VgaPsycho 38400: Ingraphics = -1: GOTO TerminateăCASE ELSEă        STDOUT "Psycho Version 1.0 for EGA and VGA systems." + CHR$(10) + CHR$(10) + CHR$(13)ă        STDOUT "Command line options are:" + CHR$(10) + CHR$(13)ă        STDOUT " 7 or 320X200 (0x0D) - 320x200 Ega 16 color screen mode (Low    Resolution)" + CHR$(10) + CHR$(13)ă        STDOUT " 8 or 640X200 (0x0E) - 640x200 Ega 16 color screen mode (Medium Resolution)" + CHR$(10) + CHR$(13)ă        STDOUT " 9 or 640X350 (0x10) - 640x350 Ega 16 color screen mode (High   Resolution)" + CHR$(10) + CHR$(13)ă        STDOUT "12 or 640X480 (0x12) - 640x480 Vga 16 color screen mode (Higher Resolution)" + CHR$(10) + CHR$(10) + CHR$(13)ă        STDOUT "Press ESCape to exit Psycho." + CHR$(10) + CHR$(13): Ingraphics = 0: GOTO TerminateăEND SELECTăă'main loopăDOăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăOUT &H3C4, 2: OUT &H3C5, 15ăOUT &H3C4, 2: OUT &H3C5, 1 'Plane 1: BlueăPOKE ScrnSize, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 2 'Plane 2: GreenăPOKE ScrnSize, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 4 'Plane 3: RedăPOKE ScrnSize, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 8 'Plane 4: Color IntensityăPOKE ScrnSize, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăăDOăTimes = INT(RND(1) * 31)ăLOOP UNTIL Times <> 0ăFOR Z = 0 TO TimesăDOăXC = INT(RND(1) * 8)ăLOOP UNTIL XC <> 0ăăSELECT CASE XCă        CASE 1: GOSUB BluePlaneă        CASE 2: GOSUB GreenPlaneă        CASE 3: GOSUB RedPlaneă        CASE 4: GOSUB IntensityMapă        CASE 5: DO: InvertRand = INT(RND(1) * 4): LOOP UNTIL InvertRand <> 0: GOSUB InvertPlaneă        CASE 6: DO: NullRand = INT(RND(1) * 4): LOOP UNTIL NullRand <> 0: GOSUB NullPlaneă        CASE 7: DO: PlaneOn = INT(RND(1) * 4): LOOP UNTIL PlaneOn <> 0: GOSUB FillPlaneă        CASE 8: DO: XorRand = INT(RND(1) * 4): LOOP UNTIL XorRand <> 0: GOSUB XorPlaneăEND SELECTăNEXT ZăLOOPăTerminate:ăIF Ingraphics = -1 THENă   ModeSet &H3: DO: Ecomment = INT(RND(1) * 66): LOOP UNTIL Ecomment <> 0ă   SELECT CASE Ecommentă     CASE 1: STDOUT "Hmmm ... Where did all those colors come from..." + CHR$(10) + CHR$(13)ă     CASE 2: STDOUT "Got a headache now ?" + CHR$(10) + CHR$(13)ă     CASE 3: STDOUT "Concept for a new Internet Conference: alt.EMM386.DIE.DIE.DIE" + CHR$(10) + CHR$(13)ă     CASE 4: STDOUT "Altoids are *the* best mints to use for bad breath !" + CHR$(10) + CHR$(13)ă     CASE 5: STDOUT "C is not a language but an encryption scheme..." + CHR$(10) + CHR$(13)ă     CASE 6: STDOUT "Wow, you have a great case of eye strain !" + CHR$(10) + CHR$(13)ă     CASE 7: STDOUT "One day Pyscho will be faster, I promise !" + CHR$(10) + CHR$(13)ă     CASE 8: STDOUT "Right now, Buddhists are pondering the reason for Psycho's existance ! " + CHR$(10) + CHR$(13)ă     CASE 9: STDOUT "Right now People are doing what you desire to do." + CHR$(10) + CHR$(13)ă     CASE 10: STDOUT "...And You ask yourself, WHY did I download this thing !?..." + CHR$(10) + CHR$(13)ă     CASE 11: STDOUT CHR$(34) + "Go away kid, Ya bother me." + CHR$(34) + " - W.C Fields" + CHR$(10) + CHR$(13)ă     CASE 12: STDOUT CHR$(34) + "... And now for something completely different ..." + CHR$(34) + CHR$(10) + CHR$(13)ă     CASE 13: STDOUT "Oh blast, another comment!" + CHR$(10) + CHR$(13)ă     CASE 14: STDOUT "Right now, Lita Ford is awaiting the resurrection of '80s style Hard Rock." + CHR$(10) + CHR$(13)ă     CASE 15: STDOUT "Right now, America Online is sending free diskettes to computerless people." + CHR$(10) + CHR$(13)ă     CASE 16: STDOUT "Right now a guy named Seth is drinking his own urine, the sicko !" + CHR$(10) + CHR$(13)ă     CASE 17: STDOUT "Hey, I got your DMA controller right here!" + CHR$(10) + CHR$(13)ă     CASE 18: STDOUT CHR$(34) + "Hey!, It's a touchy situation !" + CHR$(34) + " - A. D. Clay" + CHR$(10) + CHR$(13)ă     CASE 19: STDOUT "Bye!" + CHR$(10) + CHR$(13)ă     CASE 20: STDOUT "I hope I don't crash something..." + CHR$(10) + CHR$(13)ă     CASE 21: STDOUT "Are you doored to death ?" + CHR$(10) + CHR$(13)ă     CASE 22: STDOUT "BARNEY: What happened when a person fed a smurf after midnight." + CHR$(10) + CHR$(13)ă     CASE 23: STDOUT "Abort, Retry, Ignore, Plead for mercy?" + CHR$(10) + CHR$(13)ă     CASE 24: STDOUT "Windows a virus with mouse support." + CHR$(10) + CHR$(13)ă     CASE 25: STDOUT "DEJA VU ALert! : You may have read this before in a past life." + CHR$(10) + CHR$(13)ă     CASE 26: STDOUT "Crass isn't it?" + CHR$(10) + CHR$(13)ă     CASE 27: STDOUT CHR$(34) + "Drole!, Very Drole Willma." + CHR$(34) + " - F. Flintstone" + CHR$(10) + CHR$(13)ă     CASE 28: STDOUT CHR$(34) + "Drole!, Very Drole Fred." + CHR$(34) + " - W. Flintstone" + CHR$(10) + CHR$(13)ă     CASE 29: STDOUT "Today is international Spastic day !" + CHR$(10) + CHR$(13)ă     CASE 30: STDOUT "Remember what old Jack Burton says..." + CHR$(10) + CHR$(13) + "No, what does he say ?" + CHR$(10) + CHR$(13)ă     CASE 31ă         STDOUT "Oh where, oh where could Tao Ge be" + CHR$(10) + CHR$(13)ă         STDOUT "we need a version of Exitilus bug free" + CHR$(10) + CHR$(13)ă         STDOUT "Is Tao a citizen or immigrant nine hundred thousand and three ?" + CHR$(10) + CHR$(13)ă         STDOUT "Oh where, oh where could Tao Ge be" + CHR$(10) + CHR$(13)ă     CASE 32: STDOUT "... That dumb herky wouldn't let me in ..." + CHR$(10) + CHR$(13)ă     CASE 33: STDOUT CHR$(34) + "One step closer and you'll be kissin my shalaly !" + CHR$(34) + " - some Scottish guy" + CHR$(10) + CHR$(13)ă     CASE 34: STDOUT "Star Trek:TNG shows should be retrofitted with subtitles that define ambiguous  terms." + CHR$(10) + CHR$(13)ă     CASE 35: STDOUT "New!  Vericose Veins from AgeTron, look like the man you always wanted to be,   buy some today!" + CHR$(10) + CHR$(13)ă     CASE 36: STDOUT "If anybody steps on my bunyon, I kill 'em !!!!!" + CHR$(10) + CHR$(13)ă     CASE 37: STDOUT "OH NO, its its its.............King Boobus Tuber!" + CHR$(10) + CHR$(13)ă     CASE 38: STDOUT "Have you been gnawing at my Chia Head again ?!?" + CHR$(10) + CHR$(13)ă     CASE 39: STDOUT "Where do weirdos come from ?" + CHR$(10) + CHR$(13)ă     CASE 40: STDOUT "Are you from Earth, too ???" + CHR$(10) + CHR$(13)ă     CASE 41: STDOUT "Virus is outdated. Contact hacker for update (Y/N)?" + CHR$(10) + CHR$(13)ă     CASE 42: STDOUT "Worm holes don't have anything to do with time travel." + CHR$(10) + CHR$(13)ă     CASE 43: STDOUT CHR$(34) + "Daddy, what's " + CHR$(34) + "Real Mode" + CHR$(34) + " mean ?" + CHR$(34) + CHR$(10) + CHR$(13)ă     CASE 44: STDOUT "Elvis Is a Jew, He was a member of the tribe LEVIS.." + CHR$(10) + CHR$(13)ă     CASE 45: STDOUT "I crashed the last of the XT harddrives..." + CHR$(10) + CHR$(13)ă     CASE 46: STDOUT "Seize Harddrive and use as an anchor !" + CHR$(10) + CHR$(13)ă     CASE 47: STDOUT "NORTON: Patron saint of strangely named utilities." + CHR$(10) + CHR$(13)ă     CASE 48: STDOUT "Care for some Crispy UART chips ?" + CHR$(10) + CHR$(13)ă     CASE 49: STDOUT "Dead ants are the only ants I like :)" + CHR$(10) + CHR$(13)ă     CASE 50: STDOUT "UNIX: Programmers without testes." + CHR$(10) + CHR$(13)ă     CASE 51: STDOUT "They have made an HD that can hold my data |8*;" + CHR$(10) + CHR$(13)ă     CASE 52: STDOUT CHR$(34) + "Like WOW ! Man !" + CHR$(34) + " - Shaggy (Scooby Doo)" + CHR$(10) + CHR$(13)ă     CASE 53: STDOUT "ANSI Still LIVES !" + CHR$(10) + CHR$(13)ă     CASE 54: STDOUT "WOW..." + CHR$(10) + CHR$(13)ă     CASE 55: STDOUT "Can Monitors make Sparks ? ... Let's Find out !" + CHR$(10) + CHR$(13)ă     CASE 56: STDOUT "Gorrest Fump, The antithesis of Forrest Gump !" + CHR$(10) + CHR$(13)ă     CASE 57: STDOUT "Stupid comment count: number fifty-seven." + CHR$(10) + CHR$(13)ă     CASE 58: STDOUT "Love may be blind, but LUST has 20/20 vision..." + CHR$(10) + CHR$(13)ă     CASE 59: STDOUT "The IBM AT ate Apple computes for breakfast." + CHR$(10) + CHR$(13)ă     CASE 60: STDOUT "Different names for Microsoft: Microslop, Macroslop, Macrosoft, Vaporsoft..." + CHR$(10) + CHR$(13)ă     CASE 61: STDOUT "I have a huge mouth." + CHR$(10) + CHR$(13)ă     CASE 62: STDOUT "Kilroy was here." + CHR$(10) + CHR$(13)ă     CASE 63: STDOUT "Max Korn" + CHR$(10) + CHR$(13)ă     CASE 64: STDOUT "Null was never here." + CHR$(10) + CHR$(13)ă     CASE 65: STDOUT "Political Correctness, A STUPID self contradicting concept !" + CHR$(10) + CHR$(13)ă     CASE 66: STDOUT "Some space for your thoughts:" + CHR$(10) + CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10) + CHR$(13) + CHR$(10) + CHR$(13)ă     CASE 67: STDOUT "This Sucks Ass! Man !!" + CHR$(10) + CHR$(13)ă     CASE 68: STDOUT "AWW !! Sons-of-Bitches !!!" + CHR$(10) + CHR$(13)ă     CASE 69: STDOUT "What's so civil about War anyway ?" + CHR$(10) + CHR$(13)ă     CASE 70: STDOUT "OH MY GOD ! THEY KILLED KENNY !" + CHR$(10) + CHR$(13)ăă   END SELECTăEND IFăENDăăBluePlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăOUT &H3C4, 2: OUT &H3C5, 1 'Plane 1: BlueăPOKE ScrnSize, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăGreenPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăOUT &H3C4, 2: OUT &H3C5, 2 'Plane 2: GreenăPOKE ScrnSize, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăRedPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăOUT &H3C4, 2: OUT &H3C5, 4 'Plane 3: RedăPOKE ScrnSize, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăIntensityMap:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăOUT &H3C4, 2: OUT &H3C5, 8 'Plane 4: Color IntensityăPOKE ScrnSize, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăInvertPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăSELECT CASE InvertRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăGetByte = PEEK(ScrnSize)ăPOKE ScrnSize, NOT GetByte AND 255ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăNullPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăSELECT CASE NullRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăPOKE ScrnSize, 0ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăFillPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăSELECT CASE PlaneOnă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăPOKE ScrnSize, 255ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăXorPlane:ăDEF SEG = &HA000ăFOR ScrnSize = 0 TO PlaneLengthăSELECT CASE XorRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăGetByte = PEEK(ScrnSize) XOR 255ăPOKE ScrnSize, GetByteăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : GOTO TerminateăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSizeăDEF SEGăRETURNăăSUB ModeSet (ModeNum) STATICăRegisters.AX = ModeNumăCALL InterruptX(&H10, Registers, Registers)ăEND SUBăăFUNCTION Monitor% (VSSegment) STATICăDEF SEG = 0              'first see if it's color or monoăVSSegment = &HB800         'assume colorăăIF PEEK(&H463) = &HB4 THENăă  VSSegment = &HB000       'assign the monochrome segmentă  Status = INP(&H3BA)    'get the current video statusă  FOR X = 1 TO 30000     'test for a Hercules 30000 timesă    IF INP(&H3BA) <> Status THENă      Monitor% = 2       'the port changed, it's a Hercă      EXIT FUNCTION      'all doneă    END IFă  NEXTă  Monitor% = 1           'it's a plain monochromeăăELSE                     'it's some sort of color monitorăă  Registers.AX = &H1A00     'first test for VGAă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.AX AND &HFF) = &H1A THENă    Monitor% = 5         'it's a VGAă    EXIT FUNCTION        'all doneă  END IFăă  Registers.AX = &H1200     'now test for EGAă  Registers.BX = &H10ă  CALL InterruptX(&H10, Registers, Registers)ă  IF (Registers.BX AND &HFF) = &H10 THENă    Monitor% = 3         'if BL is still &H10 it's a CGAă  ELSEă    Monitor% = 4         'otherwise it's an EGAă  END IFăEND IFăDEF SEGăEND FUNCTIONăăSUB STDOUT (MESSAGETEXT$) STATICăRegisters.AX = &H4000ăRegisters.BX = &H1ăRegisters.CX = LEN(MESSAGETEXT$)ăRegisters.DS = VARSEG(MESSAGETEXT$)ăRegisters.DX = SADD(MESSAGETEXT$)ăCALL InterruptX(&H21, Registers, Registers)ăEND SUBăăSUB VgaPsycho (PlaneLen&) STATICăDOăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăOUT &H3C4, 2: OUT &H3C5, 15ăOUT &H3C4, 2: OUT &H3C5, 1 'Plane 1: BlueăPOKE ScrnSize&, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 2 'Plane 2: GreenăPOKE ScrnSize&, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 4 'Plane 3: RedăPOKE ScrnSize&, INT(RND(1) * 255)ăOUT &H3C4, 2: OUT &H3C5, 8 'Plane 4: Color IntensityăPOKE ScrnSize&, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăăDOăTimes = INT(RND(1) * 31)ăLOOP UNTIL Times <> 0ăFOR Z = 0 TO TimesăDOăXC = INT(RND(1) * 8)ăLOOP UNTIL XC <> 0ăăSELECT CASE XCă        CASE 1: GOSUB VGABluePlaneă        CASE 2: GOSUB VGAGreenPlaneă        CASE 3: GOSUB VGARedPlaneă        CASE 4: GOSUB VGAIntensityMapă        CASE 5: DO: InvertRand = INT(RND(1) * 4): LOOP UNTIL InvertRand <> 0: GOSUB VGAInvertPlaneă        CASE 6: DO: NullRand = INT(RND(1) * 4): LOOP UNTIL NullRand <> 0: GOSUB VGANullPlaneă        CASE 7: DO: PlaneOn = INT(RND(1) * 4): LOOP UNTIL PlaneOn <> 0: GOSUB VGAFillPlaneă        CASE 8: DO: XorRand = INT(RND(1) * 4): LOOP UNTIL XorRand <> 0: GOSUB VGAXorPlaneăEND SELECTăNEXT ZăLOOPăăVGABluePlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăOUT &H3C4, 2: OUT &H3C5, 1 'Plane 1: BlueăPOKE ScrnSize&, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGAGreenPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăOUT &H3C4, 2: OUT &H3C5, 2 'Plane 2: GreenăPOKE ScrnSize&, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGARedPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăOUT &H3C4, 2: OUT &H3C5, 4 'Plane 3: RedăPOKE ScrnSize&, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGAIntensityMap:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăOUT &H3C4, 2: OUT &H3C5, 8 'Plane 4: Color IntensityăPOKE ScrnSize&, INT(RND(1) * 255)ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGAInvertPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăSELECT CASE InvertRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăGetByte = PEEK(ScrnSize&)ăPOKE ScrnSize&, NOT GetByte AND 255ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGANullPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăSELECT CASE NullRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăPOKE ScrnSize&, 0ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGAFillPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăSELECT CASE PlaneOnă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăPOKE ScrnSize&, 255ăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăăVGAXorPlane:ăDEF SEG = &HA000ăFOR ScrnSize& = 0 TO PlaneLen&ăSELECT CASE XorRandă        CASE IS = 1: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 1: 'Plane 1: Blueă        CASE IS = 2: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 2: 'Plane 2: Greenă        CASE IS = 3: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 4: 'Plane 3: Redă        CASE IS = 4: OUT &H3C4, 2: OUT &H3C5, 15: OUT &H3C4, 2: OUT &H3C5, 8: 'Plane 4: Color IntensityăEND SELECTăGetByte = PEEK(ScrnSize&) XOR 255ăPOKE ScrnSize&, GetByteăX$ = INKEY$: IF X$ = CHR$(27) THEN DEF SEG : EXIT SUBăIF X$ = "A" OR X$ = "a" THEN EXIT FORăNEXT ScrnSize&ăDEF SEGăRETURNăEND SUBăăDieter Folger                  SIZEABLE ICON VIEWER           folger@bamberg.baynet.de       09-24-98 (09:31)       QB, QBasic, PDS        71   2083     QICON.BAS   '-------------------------------------ă' QICON.BAS for QBASIC (Public Domain)ă' Shows an *.ICO fileă' VGA card and color monitor requiredă' Icon can be enlarged with <+>ă' or made smaller again with <->ă' Written by Dieter Folgeră'-------------------------------------ăDECLARE FUNCTION Bin$ (B%)ăDEFINT A-ZăDIM Pixel(1024), Byte AS STRING * 1ăINPUT "Icon to show: ", File$ăFile$ = UCASE$(File$)ăIF INSTR(File$, ".") = 0 THEN File$ = File$ + ".ICO"ăIF File$ = ".ICO" THEN ENDăOPEN File$ FOR BINARY AS #1ăIF LOF(1) = 0 THEN CLOSE : KILL File$: PRINT File$; " not found": ENDă' Get AND mask and analyzeăFOR i = 1 TO 1024 STEP 8ă    GET #1, 639 + Help, Byteă    FOR j = 1 TO 8ă        IF MID$(Bin$(ASC(Byte)), j, 1) = "1" THEN Pixel(i + j - 1) = 7ă        '(color for background is gray = 7)ă    NEXTă    Help = Help + 1ăNEXTăHelp = 0ă' Get XOR mask and analyzeăFOR i = 1 TO 1024 STEP 2ă    GET #1, 127 + Help, Byteă    IF Pixel(i) = 0 THEN Pixel(i) = (ASC(Byte) AND 240) / 16ă    IF Pixel(i + 1) = 0 THEN Pixel(i + 1) = ASC(Byte) AND 15ă    Help = Help + 1ăNEXTăCLOSEăSCREEN 12ă' set icon paletteăFOR i = 1 TO 14ă    READ r, g, Bă    PALETTE i, r * 65536 + 256 * g + BăNEXTăSize = 1ăDOă    CLSă    LOCATE 30, 1ă    PRINT File$, "Change size=+/- End=Esc"ă    Help = 1ă    ' show icon nowă    FOR y = 32 TO 1 STEP -1ă        FOR x = 1 TO 32ă            LINE (x * Size - Size + 1, y * Size - Size + 1)-(x * Size, y * Size), Pixel(Help), BFă            Help = Help + 1ă        NEXTă    NEXTă    DO: K$ = INKEY$: LOOP WHILE K$ = ""ă    ' make larger or smaller:ă    IF K$ = "+" AND Size < 14 THEN Size = Size + 1ă    IF K$ = "-" AND Size > 1 THEN Size = Size - 1ăLOOP UNTIL K$ = CHR$(27)ă' Palette data as stored in every *.ICO fileăDATA 0,0,32,0,32,0,0,32,32,32,0,0,32,0,32,32,32,0,48,48,48ăDATA 32,32,32,0,0,63,0,63,0,0,63,63,63,0,0,63,0,63,63,63,0ă ăFUNCTION Bin$ (Byte)ă'Bin$ for QBASICăDOă    B$ = LTRIM$(STR$(Byte MOD 2)) + B$ă    Byte = Byte \ 2ăLOOP UNTIL Byte = 0ăBin$ = RIGHT$("00000000" + B$, 8)ăEND FUNCTIONăShawn                          VOXEL LANDSCAPE                TopFiero@aol.com               09-23-98 (22:33)       QB, QBasic, PDS        80   3576     VOXEL.BAS   '  Voxel terrain generator for QuickBasic/Qbasic.ă'  This program features more detailed terrain than 3dland.bas.ă'  This sample was also taken from a graphics engine I use in one of myă'  games.  The terrain color can be changed further by changing the T variableă'  to the value 1 or 2.  When the program displays the word DONE, pressă'  a key to return to the menu.  Use this program freely, but please sendă'  me any revisions or variations.  I like to see how others can use thisă'  idea.  I apologize for the routine containing line numbers, but this isă'  the easiest way I can convert it to run well in Qbasic.  I recommendă'  you have a Pentium 133 or faster to run the routine up to speed.  Or tryă'  compiling it.  Send questions or comments to     TopFiero@aol.comăă1 SCREEN 13: CLS : CLEARă5 GOTO 1000ă10 SCREEN 13: CLSă11 PL = 0ă12 FOR I = 100 TO 160: PLL = CINT(PL * .67): IF PLL > 60 THEN PLL = 60ă13 IF T = 1 THEN PALETTE I, 65536 * PLă14 IF T = 2 THEN PALETTE I, 65536 + 256 * PLă15 IF T = 3 THEN PALETTE I, 65536 + 256 * PLL + PLă17 IF T = 4 THEN PALETTE I, 65536 * PL + 256 * PL + PLă20 PL = PL + 1: NEXT Iă21 PL = 0ă22 FOR I = 170 TO 230: PLL = PL * 2: IF PLL > 60 THEN PLL = 60ă23 PALETTE I, 65536 * PLL + 256 * PL + PL: PL = PL + 1: NEXT Iă30 Z = 10 + 300 * RND: ZZ = 100 - 95 * RND: MV = 20 * RNDă35 EEE = 100 * RND: IF EEE < 30 THEN GOTO 40 ELSE GOTO 50ă40 FOR I = 0 TO 60: LINE (0, 99 - I)-(319, 99 - I), 230 - I: NEXT Iă42 LINE (0, 100)-(319, 199), 230, BFă45 GOTO 80ă50 FOR I = 0 TO 60: CIRCLE (Z, ZZ), 80 - I, 170 + Iă52 PAINT (Z, ZZ), 170 + I, 170 + Iă55 NEXT Iă80 FOR I = 0 TO 500ă81 X = 319 * RND: XX = 190 * RND: XCLR = POINT(X, XX)ă82 IF XCLR > 220 THEN GOTO 81ă83 IF XCLR > 180 THEN VCLR = (31 - ((220 - XCLR) / 4) * RND) ELSE VCLR = 17 + 13 * RNDă85 PSET (X, XX), VCLR: NEXT Iăă100 DIM Z(320), X(320), CLR(320)ă110 Z(0) = 0: X(0) = 100: SZ = 1: CLR(0) = 130ă120 FOR I = 1 TO 320: Z(I) = Z(I - 1) + SZă125 X(I) = X(I - 1) - SZ + (SZ * 2) * RNDă127 CLR(I) = CLR(I - 1) - 5 + (10 * RND): IF CLR(I) < 100 THEN CLR(I) = 100ă128 IF CLR(I) > 160 THEN CLR(I) = 160ă130 LINE (Z(I), X(I))-(Z(I) + SZ, X(I) + SZ), CLR(I), BF: NEXT Iă180 CHK = 0ă190 SZ = SZ * 1.012ă195 Z(0) = 0 - (SZ - 1) * 160: X(0) = X(0) + SZ * RNDă200 FOR I = 1 TO 320: Z(I) = Z(I - 1) + SZă205 X(I) = X(I) - SZ / 4 + SZ * RND: IF X(I) < X(I - 1) - SZ THEN X(I) = X(I - 1) - SZă207 IF X(I) > X(I - 1) + SZ THEN X(I) = X(I - 1) + SZă209 IF Z(I) < -1 OR Z(I) > 320 THEN GOTO 220ă210 CLR(I) = CLR(I) - 4 + (8 * RND)ă211 IF CLR(I) < CLR(I - 1) - 3 THEN CLR(I) = CLR(I - 1) - 3ă212 IF CLR(I) > CLR(I - 1) + 3 THEN CLR(I) = CLR(I - 1) + 3ă217 IF CLR(I) < 100 THEN CLR(I) = 100ă218 IF CLR(I) > 160 THEN CLR(I) = 160ă219 LINE (Z(I), X(I))-(Z(I) + SZ + 1, X(I) + SZ + 1), CLR(I), BFă220 IF X(I) > 199 THEN CHK = CHK + 1: IF CHK > 319 THEN GOTO 300ă225 NEXT Iă230 KY$ = INKEY$: IF KY$ = "" THEN GOTO 240 ELSE GOTO 300ă240 CHK = 0: GOTO 190ă300 LOCATE 1, 1: PRINT "Done...."ă310 KY$ = INKEY$: IF KY$ = "" THEN GOTO 310ă350 GOTO 1000ă1000 PL = 0ă1001 FOR I = 100 TO 160: PALETTE I, 65536 * PL: PL = PL + 1: NEXT Iă1020 LOCATE 1, 1ă1030 PRINT "Example of Voxel type terrain generation"ă1035 PRINT "written in QuickBasic version 4.5."ă1040 PRINT "": PRINT "    Select color choice:"ă1050 PRINT "1 - DESERT"ă1055 PRINT "2 - ICE"ă1070 PRINT "3 - EXIT"ă1080 R = 100 * RND: KY$ = INKEY$: IF KY$ = "1" THEN T = 3: GOTO 1100ă1081 IF KY$ = "2" THEN T = 4: GOTO 1100ă1084 IF KY$ = "3" THEN ENDă1085 GOTO 1080ă1100 GOTO 10ăAlexander Meyer                SOME LINE EFFECTS              Meyer.Karl@t-online.de         09-26-98 (17:29)       QB, QBasic, PDS        76   1611     LINE.BAS    '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' LINE.BAS -- Written in QuickBasic 4.5ă'ă' Name: Some line effectsă' Author: Alexander Meyeră' Date: 09-26-1998ă' Description: Some line effects in SCREEN 13ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ă'ă' * This routine maybe runs too fast on Pentium. *ă' * You can put a delay (FOR i = .... : NEXT i) into the FOR/NEXT loops.) *ăăSCREEN 13ăCLSăăFOR i% = 0 TO 300ă  IF INKEY$ <> "" THEN ENDă  LINE (i%, i%)-(i% / 25, i% * 2), i%ăNEXT i%ăDO: LOOP WHILE INKEY$ = ""ăăCLSăDOăFOR z = 200 TO 210ă  FOR x = 1 TO 200ă    FOR y = 1 TO 10ă      IF INKEY$ <> "" THEN GOTO TheNextă      LINE (x, z)-(y, x), x, , ză    NEXT yă  NEXT xăNEXT zăLOOPăăTheNext:ăLOCATE 5, 5: PRINT "Some line effects"ăDOă'FOR i = 1 TO 2ă  FOR x = 1 TO 200ă    FOR y = 1 TO 50ă      IF INKEY$ <> "" THEN GOTO TheNext2ă      LINE (x, 10)-(y, x), yă    NEXT yă  NEXT xă'NEXT iăLOOPăăTheNext2:ăDOă'FOR i = 1 TO 2ă  FOR x = 1 TO 550 ' STEP 5ă    FOR y = 1 TO 50 STEP 2ă      LINE (x, 0)-(y, x), y, , xă      IF INKEY$ <> "" THEN GOTO TheNext3ă    '  LINE (x + 5, 0)-(y - 1, x - 1), 0ă    NEXT yă  NEXT xă'NEXT iăLOOPăăTheNext3:ăDOă'FOR i = 1 TO 2ă  FOR x = 1 TO 350 'STEP 5ă    FOR y = 1 TO 50 STEP 2ă      LINE (x + y, y + x)-(y, y), y, B, x / yă      IF INKEY$ <> "" THEN ENDă    '  LINE (x + 5, 0)-(y - 1, x - 1), 0, B, x / yă    NEXT yă  NEXT xă'NEXT iăLOOPăENDăAlexander Meyer                LINE CHAOS                     Meyer.Karl@t-online.de         09-26-98 (17:29)       QB, QBasic, PDS        55   1226     LCHAOS.BAS  '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' LINE.BAS -- Written in QuickBasic 4.5ă'ă' Name: Line chaosă' Author: Alexander Meyeră' Date: 09-26-1998ă' Description: Many little lines....ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăDEFINT A-ZăSCREEN 12ăFOR z = 5 TO 25 STEP 5ă  LOCATE z, 35: PRINT "Line chaos"ăNEXT zăRANDOMIZE TIMERăa = 10ăx = 200ăy = 320ăDO WHILE INKEY$ = ""ăIF y < 1 THEN y = 1ăIF y > 640 THEN y = 640ă'IF X > 10 THEN X = aăIF x < 1 THEN x = 1ăDir = INT(RND * 4)ăCol = INT(RND * 14 + 1)ă'FOR I = 1 TO 500: NEXT I     '** IF THIS ROUTINE RUNS TOO FAST, **ă                              '** PUT A DELAY HERE **ăSELECT CASE Diră  CASE 0ă    FOR Set = x TO x + aă      PSET (Set, y), Colă    NEXT Setă    x = x + aă  CASE 1ă    FOR Set = x - a TO xă      PSET (Set, y), Colă    NEXT Setă    x = x - aă  CASE 2ă    FOR Set = y TO y + aă      PSET (x, Set), Colă    NEXT Setă    y = y + aă  CASE 3ă    FOR Set = y - a TO yă      PSET (x, Set), Colă    NEXT Setă    y = y - aăEND SELECTăLOOPăENDăAlexander Meyer                PALETTE COLOURS WITHOUT PALETTEMeyer.Karl@t-online.de         09-26-98 (17:29)       QB, QBasic, PDS        53   1343     PALETTE.BAS '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' PALETTE.BAS -- Written in QuickBasic 4.5ă'ă' Name: Palette colours without "PALETTE"ă' Author: Alexander Meyeră' Date: 09-26-1998ă' Description: Choose background colours using OUT &H3C8ă'              and OUT &H3C9ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăSCREEN 0ăCLSăOUT &H3C8, AttributeăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, 0ăDOăAttribute = 0ăOUT &H3C8, AttributeăCOLOR 15ăLOCATE 1ăPRINT "Up arrow: More red"ăPRINT "Down arrow: Less red"ăPRINT "8: More green"ăPRINT "2: Less green"ăPRINT "Q: More blue"ăPRINT "A: Less blue"ăLOCATE 15: PRINT "Red:"; răPRINT "Green:"; găPRINT "Blue:"; băDOă  K$ = INKEY$ăLOOP WHILE K$ = ""ăSELECT CASE K$ă  CASE CHR$(0) + "H": r = r + 1: IF r > 63 THEN r = 63ă  CASE CHR$(0) + "P": r = r - 1: IF r < 0 THEN r = 0ă  CASE "8", "(": g = g + 1: IF g > 63 THEN g = 63ă  CASE "2", CHR$(34): g = g - 1: IF g < 0 THEN g = 0ă  CASE "Q", "q": b = b + 1: IF b > 63 THEN b = 63ă  CASE "A", "a": b = b - 1: IF b < 0 THEN b = 0ă  CASE CHR$(27)ă    OUT &H3C9, 0: OUT &H3C9, 0: OUT &H3C9, 0ă    ENDăEND SELECTăOUT &H3C9, răOUT &H3C9, găOUT &H3C9, băLOOPăENDăAlexander Meyer                NICE EFFECTS WITH PSET         Meyer.Karl@t-online.de         09-26-98 (17:29)       QB, QBasic, PDS        49   1175     PSET.BAS    '                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' PSET.BAS -- Written in QuickBasic 4.5ă'ă' Name: Nice effects with PSETă' Author: Alexander Meyeră' Date: 09-26-1998ă' Description: What you can do with PSET....ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăSCREEN 13: CLSăStart = 1ăEnde = 200ăDOăFOR x = Start TO Endeă  FOR y = 1 TO 10ă    PSET (x, x), xă  '  FOR z = 1 TO 300: NEXT z   ă    PSET (x + a, x + y + 10), x + y' + aă    PSET (x + y + 10 + a, x), x + y' + aă   ' PSET (x + y + a, x + y), x' + aă    PSET (x + a, x + y), x + aă    PSET (x + y + a, x), x + aă    IF INKEY$ <> "" THEN GOTO TheNextă  NEXT yăNEXT xăa = a + 41ăLOOPăăTheNext:ăDEFINT A-ZăSCREEN 12: CLSăRANDOMIZE TIMERăFOR a = 1 TO 640 STEP 10ă  FOR z = 1 TO 480 STEP 10ă    Col = INT(RND * 14 + 1)ă    FOR b = 1 TO 10ă      PSET (a + b, z), Colă      PSET (a, z + b), Colă      PSET (a + b, z - b), Colă      PSET (a + b, z + b), Colă      IF INKEY$ <> "" THEN ENDă    NEXT bă  NEXT zăNEXT aăENDăLeandro Pardini                INCOMING STARFIELD             lpardini@cefex.com             10-01-98 (21:46)       QB, QBasic, PDS        70   2516     FASTSTAR.BAS'===================================================================ă'    I'm working in my third game, a (some kind of) 3D shooter, andă' the first thing I completed is  this starfield. It's REALLY fast,ă' because I used NO FLOATING  POINT  OPERATIONS, just integers. Theă' secret: instead of using a 320x200 field, I use a 3200x2000 fieldă' and then I integer-divide the number by 10 when  I'm going to pută' it on screen. This  will  work  in  any  screen  mode, but I usedă' SCREEN 7 so I can use PCOPY. For  faster results, run it directlyă' at DOS (Safe mode command prompt only, under Windows 95), becauseă' Windows  slows  it 10% on ALL the computers where I tested it. Ifă' you can improve this, or you have doubts  or  suggestions, pleaseă' email me: lpardini@cefex.com.ă'===================================================================ăă'$STATICăDEFINT A-ZăăDECLARE SUB StarsUpdate ()ăă'==================== STARFIELD INITIALIZATION =====================ăCONST StarsN = 99ăDIM SHARED StarsI, StarsX(StarsN), StarsY(StarsN), StarsZ(StarsN)ăFOR StarsI = 0 TO StarsNă   StarsX(StarsI) = RND * 3200ă   StarsY(StarsI) = RND * 2000ăNEXT StarsIă'===================================================================ăăSCREEN 7, , 1, 0ăST# = TIMERăWHILE INKEY$ = ""ă   LINE (0, 0)-(319, 199), 0, BFă   CALL StarsUpdateă   PCOPY 1, 0ă   FR = FR + 1ăWENDăFI# = TIMER - ST#ăSCREEN 0ăWIDTH 80ăCLSăPRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"ăPRINT "ş B  E  N  C  H  M  A  R  K ş"ăPRINT "ĚÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍą"ăPRINT USING "ş  Seconds elapsed: ####.#  ş"; FI#ăPRINT USING "ş     Frames shown: #####,  ş"; FRăPRINT USING "ş      Average FPS: ###.##  ş"; FR / FI#ăPRINT "ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ"ăENDăăSUB StarsUpdateăFOR StarsI = 0 TO StarsNă   DiffsX = (StarsX(StarsI) - 1600)ă   DiffsY = (StarsY(StarsI) - 1000)ă   IF ABS(DiffsX) < 20 THEN DiffsX = 20ă   IF ABS(DiffsY) < 20 THEN DiffsY = 20ă   StarsX(StarsI) = StarsX(StarsI) + (DiffsX \ 20)ă   StarsY(StarsI) = StarsY(StarsI) + (DiffsY \ 20)ă   SELECT CASE ABS(DiffsX) + ABS(DiffsY)ă      CASE IS < 600: StarsC = 8ă      CASE IS < 1200: StarsC = 7ă      CASE ELSE: StarsC = 15ă   END SELECTă   IF StarsX(StarsI) < 0 OR StarsX(StarsI) > 3200 OR StarsY(StarsI) < 0 OR StarsY(StarsI) > 2000 THENă      StarsX(StarsI) = 1600 + (RND * 800) - 400ă      StarsY(StarsI) = 1000 + (RND * 800) - 400ă   ELSEă      PSET (StarsX(StarsI) \ 10, StarsY(StarsI) \ 10), StarsCă   END IFăNEXT StarsIăEND SUBăLeandro Pardini                MULTISPACED FONTS V2.1         lpardini@cefex.com             10-01-98 (21:46)       QB, QBasic, PDS        477  31491    MSFONT21.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MSFONT21.ZIP",4^6:Z&=23368:?STRING$(50,177);ăU"%up()%9%'%I-%%LIIJx>-VK>).%%Q-%%%1%%%%fw%nfqs(w&Sk.ts<z(R^I\s5&ăU"+DrfmL&,1Vsc;Cw,$OwaOdm75IYkM9Ou2OUP0[('1g#,Y-]7+i:0%4[1A4=QY3#ăU")[-'mUE(C?g2RM5:RMxCS&z&bdX/&eNqva/XG/1cmAxMiRBoGt^kuRUMR<p?H+păU"8(2_2927oRGPN9LYV]m6WgH$6hdN$YRa*C=,]P:LmF:OCR%N&bw;]QLI:n5h5W?ăU"QXJDF_va=<cUM89dIiObp=XLb;Ckn1/,a+ra>GDHcAw^6Zrhg-\-foEC7Q,K,E/ăU"ZQZGXTf_MZ'g>?)<H(Al5)1DD84#w.b*p\+r)vBpaWrb-2eGX/8eYo3ZX2=Q(K-ăU"Zk^vcj#2yZGqL\*-e3Agm_M32]u9F(-9jJKp3+8<$W&r=:eBO:<JPz8;#u(K6t/ăU"bhds2wg':E.U&h^GPB%I&cZfO>owhL>WxX(KnbFbF^QZG:Z<D6+tMfpLoE-Sf8kăU"nR?l$wVdv17Pd^[>ZCIAWbw61mEA:f>[BU;DK\6dhV09?MqSseSd(XxO:.6S8^9ăU"ScKheNr$Hk.OTK6J7,QH::eP7H;h/(=v[bpDj0iQ%>Il$[FnhF5.n:a\i$P?ji?ăU"q.BKZ9MxBs,w4sVpP9DL5JwXW0obqC?*pm&)>PnXXFk::EXy,ln];8qVfz7[POnăU"JmB5'VXrGWsaHX3+Li%K]3O+tuBQMN:4h)a&x_Ht(7S8EdOcV1BgMkLD+]tlo(EăU"w.q4oNodDlM0t1gy-Nd2CGh8G1cTr66;4m;\[S;IMlj)N<g$lK*bS0f\Qfj^wtwăU"vodm%lk=JH0Z_x;*sd,o?;FKklTAlaQp8kPp9cKU_TC6vIo=NL(ca%dU+SuGdF_ăU"D<5D2h]TXhI0S9722Vk%+W-m,YL=R8<_)0ntuDGWK_/BJF:G222X(OPeX)u-6BaăU"k&FRoh/6LNG7.Gy%N_>b<[0]:T5eL8kM-i]/tkr^aw2W;ZIY&+0vCjLX_Z0InI/ăU"d2loI]We#pd>:Cc>O9Wsp:uXo4b9o*gOqeZu79xfnHqGJ[7D((s(Z$G6ddTiHNeăU"s4TttO/\GrI%4(7Gmjwf8j,8Ci*GRfD\e62Sfm?Z\>*AVx#W<9g+ayDEJMAu<TgăU"'f[\8Pi6HP8*''y3,]^.X'I.1$4o$vu3r>.]EG?o,B>eN,dU:;Ukfamefd_&REPăU"FWUpl&2f(kB39C3jPS:#^Q4M08z[Or?_LQ7-$mc%$djWW.meVNvCSL\vQ/'Z/njăU"8Kg$Qa\ALak%tIRY_QG3X_YawPK.S[a[I-e,lVy3L18BT3mUs2?w(/zc?,9OrbRăU"')dh(^?kO?^(MfQs:0(uw-)-\DJ>>Ip<$GND95gZ.u%p()9%%'%-%%?=(FJBsZ+ăU"jo)%(%C/%%%.%%%%fwn%fqSkIts\%<6]U[75CwmUGtnYB0^=P&#*2QEYD?>[>=+ăU"%IE+KxW+^)4KCP,=&hwjC1e^_lauZG^(cQ/dC%Z9&2;$>m(nz$Egf=?U&>m3^MkăU".8iKw)l:Fj-++G6mEJ?n)gzO(eB61D:6,h<XA+TGClbX]_&83bWXHZ.QJ1EoOx7ăU"B&MMrK.vs\oJfZM41$5>eleR[+vIBNA9G.A<9Jc:'&W?/26gU'MAaCwLXAI>^3uăU"Z'AO[?z<I0AX*cxv2nEY19aPpGGMjGU\_'6i_$:kQgQ$rKkGV%ToCd7M?E8ScaEăU"n:)b.,sW.)J4gLfUhiEiR_t5esE[uVu>f<o2Rx/c0Nsx/t/M.IZj2i8q,GNlMb%ăU"7a\#P\d0e-#9.6pOP*e3[($gqVlD-uL*63N=.Rww*%]2D]oIulSF.GaxRHI[XMcăU"w/x95<Is7uC[so5jn]DPYLICJ,sUhXY8fs%ks%Tkv0b1b)V<$r7z/T^VSja1OV_ăU"WI63Lo92-[HTQ_?$py'XbzA:Q:B<>6)_bXA/.A03P>#)]hFAO_2KurbcehO0SAkăU"Kt'_]pL:F'E*iJaE+Cy],-jnk(IfiM)R]Cs+:?(m;n7L,YFRGLv[?6Ya#*[Mm-,ăU"]AuuGhJ\#UP>^%[akpZ(kX:&S.yIQ[CPBvA?9A(P;VoGdt58EmkcZbY-OZqtmd\ăU">1jx#dRGVcAW9;Mt)Eg#9J*=-S^S&0T#.hSI%BaW.Yai1/d^w.b3#HMT-HKNL=:ăU"+YpMp\O<:^R89FAnVuU)^Pg\DKjJi8#k\=>%jfco)>:(tFMSVF?0Z(:6?XNGBHxăU")H3rA^U^__X?t%YPD$Pz3Gi:3k#FX.X,*pZtJTgSWtr_I$K$8^n+h57t5MxPHtrăU"P7Mly)yY\PXb81O?O=[Jc>;NtjbHq0AX/kHSV5^j)lrX=SkFus#Th&C_)PZQg16ăU"i8CBc,^Z+T^Z$O8-yp0UlY1b+f2ZlAG0PD^QVO==>XAkhAm6MB&_:waxVoIX,anăU"JroxUSjdE>)Y?MRgJ'6)JkO/<B3K'xe-QFc]a-ohET=m6g29Laa8&R]3/eJBGhFăU"t7V/a$_8(sk0CgV6#oYZqtQ2_0;h*GdI90q1'5U63q.(E)J39BNgitD]aZ_Ylj4ăU"gCq<jO5f9^Qqpwdc:q],%lT^FV2)vvI^hS>NU&gj;F4mbP<bz3q&].wbB,p.tM'ăU"v4Q_lQNlLURpFtq\Lc,Y2qQdw^_QxAKh>GN%?<,[]yM^.hf5UvT:?]9MZHit;K<ăU";[)[q1-*)7n8WnO/hwP;4Kq:6?iYv_\umU+x[bKSH,,*us2p7th4=6rTtN2t:eUăU"vAQ,,MrtSXr%t0C7PxD?6Z^'d4Uf6%p<D*#6Uz\Vrn#cn.<AHi8K#=zZgZ1=g1=ăU"mMo7B(X,jWJX,s,V?\\e[dKBQ0[,$BD][l+T[1c=uKQU>fZ5r=AWxQ7vpJCDSBJăU"so4ALjy8.B_f2dZrUm_r1CkgU+5)BV8:EYH*#lIyZqm:JE;F-BEgB+LkO82AY4qăU"Sx#,#$X\t2jfY?\?dbZgv3NFWPOrf[DZt5=Q>kJqz%8ba[qY$3:oh1F#ibEeS*9ăU"L=hk/;A[C/y6b\Jx(pzPgW#&^nDabMRHR=82mv(%up()%9%'%I-%>L%IJJ;<loaăU")7%%U/%%%1%%%%gt%tptq%ixSkIts\%=V'U[.5BahkAp28Z<Qs?a/T5[-v*pF.VăU"5fO:x=Z(,wA&c-Y?j/%Bfj3N)TZc1S,sue$(wA%&)H,HQk<*c]FuS-Nw%kne5BZăU"b_<lGb?WWF#dhhCmi6Va&x[,x+lraZZ'\t>:_=;:q$:2\ZKNMi<?EUvARJ2D=[răU":[&uXJQjv-Ch\gRVXd$t3B_0iHdAxj>lZMIKF==%.=FoadrFvpD,J1NrB,ceFKiăU"kc+>j$e-:h18pn<B^:xa4-Z_WMg,^<9SKUA;=fT.^=vu,#hN5?$laA<Q8V3=[pUăU"$Ee>9$20/RjUx)(<CS[bte<VV;K9Rb*(&<WD?ehu4=<w.Baq=Ng)wFZQ*WpDMrjăU"0?]F'nk$PB+4W>yD$Qq<>_2JR<HeqOiB??LCGC.gpznXPpQx.:\(0fika;e2I]lăU"CaB<3qDgp=V[aO(\YHz)2nQ7K7y&wj#P;sgRTu/I=(,o>O<5,7kJU8;JHP&IOb6ăU"<?h-#HWLdnXOFv*q'[V?lApH)[nIQhzrNinoz$1]Rf#q:w-(8aduOwh1Nb*jE*măU"6o=XRVW<.r*v0+XJ[jWCM>B#=0h(s$>YBUKrCEt4AMF)3%JG]8h6cvSJBGgDJJ^ăU"X5]DY&*6333I]52NDgFMN-LCqCB9(p9-NBQTrfUQU3tK2$3U2T>8b<>XhGPlM5căU"dSP<B2,JFdZ5CF]3^iA^Yp(Nl$]UdXS,#0)J'p]eh+td%BhJJ7Y/]Bef+m+l(fpăU"85ZblPxj$G,'GS-TI+SgZ8ET8</Vv/To$Vp>uHA&YU]?hddH6AiDQL]8]e1NYjDăU":L4rC('T$hr/9Y^UTidgKkcW]\P>A'tmHQ6iz]$9(oF6v\>G$]RaYm?b<M&C*X1ăU"xZ[wbiFjU]$\a8lExZv'Zn%4(VXy<t'tk*cCk^e+M>t>XvCNqeNS',FfIW<E'w2ăU"<Q=#w,8:u#;s[4NG-hOJWM)8I)[RGJ#6cP?s,>c+Ci7$Z$R*luU1=aJ^f=w.D9YăU"kUpf+2eeb<\?0W#GfFBje$.]\:#s[XW2o=<xSD9%8TY;6d:(Vtf%Q.f46+5XJ-VăU"JfKBT5c<XJ;3,\+%TP#PhFDM=*c:TAmxGw?_'99[_5K#-=2&0?74ChGFF$n3X,ZăU"-GO)Krq2<TuuUC$'XLG2*of\.fU)v7c.be),3R78_$1SKq&Th\h&aR_m55=b&i-ăU"O=7TodG,=eXZYw0^gMw,>tL0KrLdz_TmTmlhdFv;J$(n7sL*SY$Jj4Zmo_J3tg.ăU"MU,8oHBN:<k7x10L<b80BA=;76XnlMz:y7tYG<J;b8+E(95$_,X_:7;uX^vIMlTăU"5()]C[:,2MI<j9SS]g85Q]\sOx1IkBO6X_WF5D>u+;%Y4a\Xb2CyERA(2O9E4]păU"gbl4^2fc=LhM$;fKldPop>n1lO$q#1Y^nG6]ou.(9iIr0HV.ojGbGQC$HF\49$GăU"&sM[C5hsTmQ5^e]z_DP\FBF5%TIsanE9oC]d=X8lYlfYa(o-Ar_XK2S[M_1g2&/ăU"bGj=;5lxhk8XvnlMpZjP:f>uq#b#^u^g&MOCjnH\0aXGbymX\YwE^I+Fl(b9qdDăU"8W\?,=hd\SJHH5,ld,#HJ'v0up%()9%%'%-%*ig(JK;b+Z'Y)%%&30%%%0%%%%hăU"tzw%njwS[ktsFe%bB\I[5,_PO)oCmGT2E*iiXXN$Q=1.tO&>8dQv8gyyCbAaJpdăU"7SzslEU3YxaysL)+mZwJC0^L>1&_abSxXJ]7)ae,+;9'tPi?^qAfaJ)>q4-yWJ<ăU"Kvc0Dc&Dec=yQK&M+b;n_*FyaO**be/zULT/CXtV%BI#SwuL+#7hBKvR5g.vciDăU"1Eyeb)SFW>-nbSt8BKC3D_U[#Fra\V]qu'hP+%iL,Shp;r4x^S)h%(m4^<GLux:ăU"=W12?GSp>6]lhJ.L=sN,Fr(0,FT4UGWqbESpIVsZaHPU_)s?30Vo]p78-^WG<-^ăU",y?ZRe)Eu?'%MFMIIT'Sf,T8O20m0Wwn;usYce;4-jCPgbPm5+.Kwg4MDEFhEn5ăU"+1oAd6+0qDgvnmeU4]2+>kiWFuU[]XXegnwV>xl#*)2akGkJ2+ous_=?:+Zbjs3ăU"+)?#LUy]?q^V(8vW_W[eO7l>xcrotqT,)l'Ugol<vpqs>2$:lS<^*T#D_&n^RM/ăU"55%k0AxA>ll>7W\BnbStOt5]kmi\dIN<jHLpjH'O4eflDJo3vcen]lY\MD+nIN6ăU"^I.L1vgv6y>1n%wbkxYSX3k?y=G/K1R8^G\;4$SwEQ#bC(#*^'2:y\+bK#sy'ZiăU"aXwM6.<Rb4#34.ldxE$(YyUFbU.'6qcfM;Rb&goso]N(*z/\J/PBWazAM]&u+i?ăU"MWKSOmt6X$aO2Lcpr4x+Se1\X)3sg)P%+Je*/#RZ83P0gZZ_;u/O3LJS(9i/>^păU"c+o6#-+7_w6O$Nio->M.cvD<O\7?Rdxw$8zj-\nv,dC?Bn:uuTj<HC2NI94Uw)DăU"N'>T_6Y2kIL1ht$m9jwUT<[zXQuw&,BcX+F=_+dD%wWdH0Eub=33Jr^G6IhfPoZăU"eh<TJ+.WPJUO4cOES49vhWHw=jrS3.TikI0]^sS4%ip8t0ogS4D+O6tZ1z9ff9%ăU"UFB5pg1P/D7sz+DrEihHm>,%$Lv5E7GTx*e+K\=VM_p$5LN.$3DRG+#(vk=Kei1ăU"t4icdA_n]Yh;jF2r55kcjMEWTsTZAtK^RId6Vj]Pc]VFX1/HV;ZnG4K;^y8v5FBăU"ol-U[;agKjO,8d>nkq'biob_U,Hp/&N0&X:'pqKJsnU1N&MGJsA#oju:wa4Y'BkăU"W7Y%Rwronsto0MmhPhff:.:mJym'68I.wQkaqiM5,rPz?C<N>sS4siYD;P$kTcAăU"Z)(tCS6]f^1kB:DeGf<Zf*7.lc5x&6H<jn1g?%70\WdA1o(_AnR\MfD2>t]s1_făU"16jcH>JIjRifw64P.ksS3mj[H\,Wc/m'xZio<NjC2t_H[=Rmn:/'HG?B:fO87]+ăU"ACrL=jN3zALR'.lpy-ok5MJODWH<ommGt1?A[a6H9<Yg1O#*W'5rhit<9)11JI<ăU"HUTr9hfbFwO)ZBlm%_69^jTG]xwaD$d<(K'iAW$:UB&/#\=:Ch#)r_hsS<pli&căU"tuudm>i\dk3v1N^VLgdZP\lBJ;c?Z&$=8[6:;2RZ%Ai6SB1w=t3K\mad+n?_F2EăU"Z2V\6-PNLTNa=.djG^$H,f1X[E./X0<crC*eorlX1<9&k4EZk#p2F$nA)xN%u%păU"()9%%'%-.%TLIUJfqH'r'*%+%9.%%%0%%%%hxf%sxrx%SktsVL%4=]\k960<>ahăU"_Xe+/m<m*odW-_A.e%zY')2&HPO0)L^'ZR/(mpWJ(pfQw/syhG:jYv%;%xn.N=1ăU"Zc(Q,=kcG2hB):/62jY5B$N:B.6?a]iXN+.)$O*=Tfa_RK6o&<*(\bygWHr#\l2ăU">KU:rd(8Q3_jAP8h1K>QEGjAJ^x30>4-W^P>>Hn&\K:nsJ#B2f1y)-c:+t=[p5PăU".m[(RBM)IPynCW]:R,d]%JQ#fkZT3GF4c]xy(3BjMnUQ<GM-9*2^r\ZNXWE;;FMăU")DgT)'qS3$Ghp7NCsQ$gCG)P7i<=esWY>n'b&;K,W;GOK.8#4SH70uB5m/qA,JFăU"?;5l$[L[xEr&<DWr'0a17Ioq.C]PFr.:zhfF4B*&=J6ZO2q/rQ/T[G;C$a3ErgKăU"h1;vdQkK=KGm&$nHaX845GEg=rlKIH]vC/j,u6:Aq\>rA+\b:1CdPP/TT+:]AVaăU"-mGJorc$WlO0-k87Fn#c8o\gGZ^$9>.<S%/:PPrS8M31Hi25RLq'W5&g51pCiL&ăU":+9#qic6LH+&GTW+bO)#hhEDA9]Hmno60bD;eM*Q'ReaDO2+I+_S^K[)lTAF;EeăU"AC)IfGd7#n+(nY*;L_8>([?L1$wNdMhYSBVv?fJc[5rd_V2G8G]rQ>v_Maa?n4năU"cALV.,Iwxo,<&L=Qnb7CuFM4<cqq;7urB5=*iSQ#_\g;dm$j95[x)k,X=W](A[GăU"a7,ANZ_)=sjSNJ])EtG;$_4D202A0lU:B,\Vz+DYb(4DK:4<9kc?e5hz/W>[segăU"9zc706VR:0npy_'JczN9wx?G;H'+tqtE.<H4IX9JiF=E]Y3pg=5RCk0AFizi8SzăU"g-VY4zL]N$roH:lxDGnJAjv]rA,9Hty1PibhPDrrCG7));kP8bKfLu5qp12D8UkăU"yQs.zfu%*x/7vf*FxEb74IQ4o7TmaXulFNing,cHU$G=Bd'A9Xy%0IidkwQ.7qFăU"CA']xC8%K_>lMr-$Gb8e_*O2lG=O:jn1mNHHu2Avu&V7Q?Eo,+K.,DU]AR)NNE+ăU"8_%X:GDc20^+^UH&t6_V;X?()HomQLnVXqi/JE-NRJZaG]db+Yno^guUCm>A-^;ăU"\O7Zg>K,4?Xu)iA%GG33vBDH&FUp:C<g:EhgWZRWrVuHNsGHnRU7&Ks_vdk5bCyăU"d-68IL145li]xq1uqBN/w2ICJAql0m<O_aw85>T.V)9C9Ko_3LCW0'rEk\D1FESăU"O*<HK3(vDF3]Bhmlf(H:b8ZK80&$K>F.0C94og_h3kk./1M\q-bD;_9Kt7ee/ipăU"M0ti4t'^Cm5GHCtLM:N_QT/xzkyrY.lh;Y%nLA(;NV&2[^U-r\d4=L=$s^TObJGăU"$RIF<JG?VDWy<RUpPm=<r/7yS(hO:2+Ho6/.CQPI25rK&CpKP8JNfXXXmq-1^p=ăU">de&qFH$062+#6dwWgC]1lKRQb&kyA+gcPM+ym;8hsdT<;zZG#UpH:\RR$<b)tGăU"8GjP8n',WLN'V9O^3aYlxSXAhG($[NX&EQG$D\TimIG#B4&Q$cDLw'AQPJj3C]săU"z7jFloKIpb,*4=Hk1WLGF$4AE.XE(yMDGQ(\:/A[7GqCwyQ$8yiOtYdHV\;^KwYăU"WV-umLweF1'w(up%()9%%'%-%(8LIJ+kqdr&b*%%'O0%%%1%%%%lfwf%rtsi%SkăU"tsVd%*]BU[5le$MXU-^gW,EtA].G;:.[4b4Wo%<S9)+-Gm6&dN:<,UDh5'11)<)ăU"xTPw9t8g(&[em:As-ytF;k*Z.yN[hWW_S,*V,%Hap%m7m>w<Z]EaNS<wgsz^qCDăU"<itUiasWc+_GGXLcYvG5NlIc)F&WwWSNFxbTM8<*yHBIe=K^q:y\4r:0Weg**RqăU"#/8hs2Y-.r\k5%J9\PSYNB3=bS)/eLiFa:-QK\%K,zjLtx2)eap7ADke[3RV^.(ăU"#^=wwpo&3n0oIgf1cFZ&Sa7od8#.67X7$&BP59G/F<2)2el7(KbTg1W&oFnj&vZăU"h/j$,%04_P,++p=[cXG*1X_iwyK)Alv>^r*k273WJGV]xP\b=+^5eoxtx'O<DBLăU"AKN?b#hXt>*_YZXl$MB\bgPf<rk]qps>5&ofwGJc>2/$AEo,(Pgb+Dl*W:H,PRAăU"[(+SqX7LrOqkE9XeRkZ-,1J-FkVE[#lF85Vq=yx,GS<k&UWDw)M5V&D=j^C8M#măU"$S?Cp=Nak#hc1\R\[QmltHYo&34-][#rRcO;H-j$spsCZ]Kv0aq$oXI]Z=)C<ZFăU"1Q]QBFIf)W.Ckz5ODwl-0+?O20an*fne2P)hpeM_S;ri$C:Z0*TF?LBs&MZ]kM.ăU"DlO22'1;S?PsR:FOojxaW'S%6uTA&S$M^/bG=-qN/m\S:*weW,D&=j+(w_CX1RiăU")Gb=^4WT#4(]RD66^CAZr4jG9>:p7u#5B=pPSQvSbCl2Nwl6;4^qzjSK_8BIqR<ăU"[o<#XInJ8uV[ut*]W\,L+2CG+h?t.R9Y6jv7[2pa7SpP7o'fQm3Bq/>qW?DkUj;ăU"om,9;C)<^?a^A^$X?e>hDB>/F%skq>E,0'w^ESJ0X.AKBJ,1\Lg6x0>L-GJ-M1xăU"[V^p.DGfjiA##w2$W4JeD>Kb8TA\5JenXAk+4FhB'Kc8ubN1h&)a7maFswNh:#MăU"tcujneCA&XQ/G\*a2qX&Ut<;&GG^R0:>hDY'?N3isMlsqMgssT,SjkWzl=nOeWuăU"U$pxs$FfLE:Y>mIX^$[BBd8^q_N?Mu=K+*p;>Tkl?uI<8<D:22i]?w5ZU-FN4L^ăU"L>2UBwO5=UxDaB8$%iu[kNIOW8-rf,t?0DEL-AEthD5y.^cvA7&0HI=X-BR(_npăU"Da$O]+$%j;jiN58'AzAvhKJ2du+ylAkYDYH29toJTAYbn+<DO0lVM7+tY2aI.50ăU"k0TJNUB8gMb=4=+^J)9kk%wh]6w'Xk'i1]Zi'<<tt^VVw%Ul28NX-FnQkJPeCGfăU"H8rvRI\mb+B36ivQu.BJmwi]0w;S2JBi^:1tD/n606[SWJ8I+6xSNb57w=c:O&=ăU"'iqO(llKib)&\QRpt)%,,cCp)?Z0<tJ7Xb?>idh,I:8+($:C*g+j/d$_z#QYrxIăU"JZb*h=Qab*IN(j>j9P&,wEbPGbb%7ogWk2Dgl#s?HGg?b>en)MUpFvfPWP_L*U_ăU"vQBpiKFul?&Lx]2$h8OC$:7l'*1-Z;dhhfrJLJQ^rz:paG_OG*oC$sZ)TAqIQ5kăU"qz-VIBJfLt_+dv<?;M27nH&'c4Z%(otsgq*5CrmD^ba(45\%>E(9_.TZ_gD_MLPăU"*y;hKxY+w..:mD]7(OwHC5Jb-V0Ac-H0Js'UY\2TZIW>WkwnHwVVAKGVLD]yU?JăU"w1a4E#K-E3mKW?0K,5q#OX>x>#=6?R^UmXYK\-9SkP][ck5[#kfYKYG$lQqHXTXăU"AUC5<EMk[.^^IrB7$i2$[LA?0O%W.aU;OB:z-Y2B,'ca63HUFz=1KBDhW'_\M1căU"Ao?P[)rKh:;HQ7p7)H-WrTu%p()9%%'%-4%nKIIJD*r+8:*%%%51%%%0%%%%qzhăU"%nifh%SktsV\%6=##l5m-tVpg#npF?D7R;fC92.U_2k2:#u6u:)jPx)U&<1?]$PăU"1Q&to<+eC4_[jC:^9+W^G-:wtIHfUH+bnQUkF-ejm?^._#ic1,X4d$$NX6>-M';ăU")-=iNhTHnmvnDQsJ^wkY[X^(ggIwhtK3K\ES3=jqXjIfj_MJ3]HXZ^nPcK#QPL1ăU"?#nz5/hfSkC:,hb:]*rM/]6GXr39xcM/r(ImCVLhhE;(q\HkxFlKJ^t;[wlF^\oăU"90GfB*si/6xA,Lk:r\HJge$qev2IE=cu=^;uWse'404fJ8us/Eo4uVU4(S&5.RbăU"=8B1CWDMv%=T9rK(\=q803lHo]n5$*6etI%*R$CX/hhF%HTKaTQNbHiKC2;/7g8ăU"c].J#=MmJBl5C2',Ji]3e5*xc+>#az1C_-lQgmRtVA';f?cr.$fR\PzZ1hci$g.ăU"XzVjgt0TBGCpMer/^BQN#:<_;5]sR?bFS/iMG8dNb5cW4Lv=.KtwmIu].CIl?5%ăU"onvZjb%YQHpn4i<?HdoMAn3US/MD<*xVh/FM]/JbF$w%V&W&Dv1tnh&pWnpU*?PăU")VD7.2rl\3_$cXv?KLX<]]W1G'oVABy,f^yyW3;s)J5)mT:[7SHQP)F$zbC/j%:ăU"V1E6q8+TY#hkIw8NNRg%5&*4g9UQ+tH2YAyLEh,,=FOAQ]S<>/Eqag-&69:y3>măU"imV1I>h];ylAW9/F#6oM$Dth):weDuTfq)7kJTF*FhG'lU5_iSPo0g:]8*\iM;păU"rIL5[rU>?eo\z0Q%<H9Ih8:We0#w2[gA:(Y,8Le3pJxR9tqaupHnN/0n#Jd;z3,ăU"W%j;j_P0DZ'eXbWR<_eCl14hq54.=t%)&ok](?gnBo#TYqGpox.mlSi/h3KvaXTăU"16\R^sI#ICT?i:sCCLM?-Ni]rm*=?*k\t1Xe3Aj\1U#MtkiCu.=NiWh2Xt\cQ1\ăU"_d^)3+AHwPcLKqP0hi=3Fr581^(%<ukUp\qYntcoDge\ZB-?9u\Q4Ipb.a,sOf.ăU"wD#)p^1thmN/pot7xt^>4OQ<9&G<8rDi9?Ihi85mWVLsB$Z<C/0<&6$Ax$[>ui5ăU"*jGK08&7KQ*xxi5%L1CM$X<'/1,nN_\9XsRdbW%f_8xEg^&55hT'n20XOj><mA9ăU"%i5_VP4Hm7UAY=:;H?=]Pql[fTT6K+X<vYLR&o4D7rs<m$qCM$F?]p*y%&d[8&3ăU"fTcP4[L?0<$C<CYrU<YrYX99##g0\.VwIDgM%\fbM:d\;h6XWhct\U3g'd*xVR8ăU"O^jp[Hq]lphG(9'/z<kcJsD8UK%W3%L<jgT9mZ+l]OE+I\i-2L7[+dm87xEo1OqăU"^bWL>?U0u1&wW7fX+n[PO2>:g3l+jiVYSJrXg[9F^=_5N%n]K2wv,1HbwnDXpeMăU"zlh2?a5+Lt.E5#P[f5ma/[blR_^3m$6^Zp2lCT2FO'XNnRR0m=2V[7Lpmr9a[U(ăU"i>m\Jkuo5NNsRc6OAH\C0N5_#]WrTG4W5_e+S?:%<$Qo?7p:m3;Pg_D6X<O*Cd0ăU"(BlbB#XE=QEb3SN.w(KDT3FuJ$'#fX3%s2mq:z/3CpqrHLPZkoNU*l3^[/URVJeăU"WEIVIi-TL#?7;qC]O\mm81E;*;6yw:[b-JW+GQA:7R-OFQS-iFsa?%**<r(YIt$ăU"-%P;&n%.Tbnv.F=&l=#%\snNP7*9?0?f1^n4RFOk.m>jq,$nhdd1Q>:HBc[tUi<ăU"eStZ7kxEc4HL]>ctIbUG2lgnNbxM8*o,I]L]PNu;S*-]C]Vy_A70<v9_n#tSpV#ăU"F'k[d*?x1\>mPjg8;KfbW<^N=[KAh^/LKDX/UI1$:B7hq2G;Dn;M$D:]34R0Y?făU")J]lDQWgu*n6JNC\/vNZ>nN%%up(%)9%'#%-%/&TBJs<PU/:[*%%'%0%%/%%%%xăU"&(rgt%qSkt4sf%P&^Hl5Z'c'M?%HB31A?a,IA=77RjL>?%9*A1#-Ua701E/9dY/ăU")1QII?N*9P&&'l83j7(2&h#(QP.tDT4WBt.v+j?pzW_,^;3*wg3F.5n:\P+kU*jăU"p[8>^H&Fxa$cI<d9G$f238J5(SLhpbYq?c]ef/0#\(baOu]UNK\H(i)'[6pak=qăU"eG7FR\H/>=7Vl/+H.YYr^6rD=+L+FpaF[MWH%ll#j*Z7RjGrS][,tMWmB-_tIZ3ăU"&no9Rv>:T)O>qV7rd3FPY'<:$b$5RPPbl;A.SfL??)Q^x6#r:)[Wg1,U=aAVK#'ăU"<pW.,Eh&uJDDN(J0BASE\LtZPK5t2Oom,SR:oEo&tB%ZB8zt0;T3nb:]Pxt.CPLăU"9tt'J9J445Ih=V1a0W%JQ%o4NM'6[wAC8TWqPnMpbG6YxKCqwq$Ic9CH5h-x&)7ăU"dm>OI:e(&WnEDy3d,u1:H=ZmdVMfD\mFm'kw9k9tH];]oTNEAKjkrzG;>=k*So=ăU"c80Y++N-%&4]QhXnX*g>.?a6?KTr3SC*IYiyp4m*9r(.2?*fbE'3E&?Q66k&.,tăU"8pV*6uKpnpAPi)z>5FuJ(=Im^=JQ:E9jjL)R$B#uDM7eKNGVSN&a%A,FI,7Gdj;ăU"*Sd]$9T'k#'4*zpdCLNIJnQcqEGv-SX^HA^=+R_7]v^i]nYx(lRdNODCcxsK(+EăU"plHq,IdKo)863Icou..8>wmikOa?X;[,D/I_BT+%xT)9[aS0*d-IgO3IibPMNbaăU"WkH+c[JMO_hY<%=qJj;/gS8*r7+9X-=#Il]jGs/r9Y9DNQy>)tb'N;7J2Z<ipfhăU"<JeqzIdC8.%ZuEE3h]7,LL<:S#^d)^7]Y;Bul+?&ZElIXan0/x(KwpzcrfQSG/wăU"TgV;84g51l\8qnlW1ATv%$$jk=8:#HWO^7c:9:Bp;FRHS**;Ee3\%&6?jlG3>6răEND SUBăSUB V2ăU"&rC6]4FgIi0c7vH.sk[p_IV]ThqENY,kaDuHB0=66Xf6-DxZukL;x,hO>Vm-Y8.ăU"Xp>)K-MaU'x(AO7K+Qkj?naleH*lMc)Mo_32\,/^3Yp$[Z>*_,?BlcnO5-v]lPBăU"a0HAK6,2do6txS?&om1W3lV0inX.:$:BzcP-HKf.OFto/GBhssdxi?Ym0Y0fJ/năU";9J+sA>mIZzKLOc'52Xf3_F:+4bC1$t0N:Q<2O84g<H]mHhLrnqG&li)Ox-B7VnăU"wVO1s+vs2#Fxq*Vt,c5uwAu4QmZs8qPeMVx>bB[KfpS?69bw0DZ9w5&[*]i[%5uăU"O/XOfkzVJwEElr'7T:l/7&?Xw/8r<]^(yMvBG4a?)rLBZZ0OP$8AUS(.6D0iB8?ăU"Vu9qr/CQUWLEUpB.-jR(,g2sx^&60NNp]/2Ra%isfwbFFX&N>3)CU(C\^tk[fo;ăU"m%1NZMx]nLVDW%KdW/ZHR4p;Gd/mHqsr?T?e4v1+?hxm(S\=6Qh0v&V)\p#:v3HăU"TW-QpGY0>mE<MfM8oHv\,o6,P2Q:Nff*<z,?GFd&CBbe&F:A)M.Y$pwR<t*m\jlăU"/kiFWNQSLWC)o#tR[yD/y,v%j3vbG$mN's_Vd')P5D<MGzuLN>H*bOI6-n)Gb)MăU"4Tu*a8%0-t<]VIa'6wlm<6W-LrC)A.h-PFO?Z-Y<12cjr3tvJ(+BsIf5oB*2'w*ăU"up%()9%%'%-%*ug(Jnr6[\%5+%%&_0%%%/%%%(x(xy%jrSkRts6%**=#lU5l4t$ăU"heGFg$Ya.79.f&g//D7[mj3+0Z5?6SfSLh1m2dq*#ae/D.0)A48)BcLfNoB24EeăU"$+zK*mbpC]T+f)f'UW>o]<-c-fu19fGueeEecEeaOk7rBbM+n:^J7,RNAgJj3\9ăU"kl3TuwFr*In+TKM04)aH(f+;tCUCHc%Z#Ok;G8$Lwva*LWqPZN,o'aL&Hah5<Q_ăU"B:g$pdEL+aJH%*a+?OC98HY:MZu;$(Uu\ss$ily<=*>m3iFl+LA]lj/K-147SC6ăU"M'nfYSYd+nBUMnT8*k9RQ8RwNRe/<mP?swgueal&wkn't.VJ:<0t2^x=&&>MqgZăU"LG//:u0(zEf(R0OUN8gt)DiD:xmn<FXXGB8UGoymxgD9BvaaaIwZ2>.MW6gl)IsăU"w;HGWKar&K^o;)vw?(Zh,rdF8t6[\&dnD[s8j*2_1W.pU^hEqlU^\oI*upeFK7HăU"Dtj)OJG?=o>Fo7GQbGrALx?.>>eY$.z6CSd+7&JpqtRqkAiS/tW9V.JA;u/TStKăU"jGlUFS'NaxjQJA%ed7Mgh[8[ajtuAXD9>VNUyl1Ms,o2K(B%hx3i(5T^qc.'HusăU"2h^g^(o^E=J1G:SkUTsHUSRgCOqA,f4K,&Odj5TG0Bp0ltO%lD>v[Rg&c.q=?WRăU"&3O2t3;'t\DwOb+46qq\kq16>s(M?cdaH*9;]?fg.J+;&_iJB,T/G$<k]epgJ7păU"rLJo9FJAbFE)wK80)LZum4ra8wdrSR8g?_^C]iH0Gt'EUMXZ)_dC6CJw7'yZ=$:ăU"c7Z:ZyEC7xNGrH>*(Lo'fNLB3lDlmdjV&'40V<&tca^ezBHhAhCas:j>WPEpA_#ăU"49-eZ&PA0HsOr^EP-Vo%)M'D<n1FwfgVB:^:^k=0YDG>2-p*$;H*n;>:Y_Y<G_)ăU"Z7e67hAL6eSA*G^eKa)W8LasgIu5M9TapGA[]6-mmtf7;nadFbo;bmmm2;XJ]GTăU"+g;b:&IONXW^S[3N_txbC'&Vi[+Vo7VO=%G-vd.-:.AxW-kx*Qf.:7o9^$5]uJCăU"1UX.r+dnxC:;zEC4j5><X;3lc8B5dnRBge4KQ'uP^4zPtx2LYI0KdxLDW$7DCM^ăU"t\iOGt,zuWk%,u0*0jkG6KlnQ$__FEi6HHGK8Vi8;Jrd-W[HYw)MAi.d=Ea[o_DăU"<GP\\DU/)),6MmVl'=dY=>p&x=,hr[V%:-XENijaqS2dLr;.q/3CKR>TW,1zpSJăU"Z=,h94,8+DJ7&K/b'HwdfJ)oL/Bc'-Lo1$/OHCJ22sQ=B'[*5BEJST\r^c>MXF/ăU"rJNRfW)Nfu35#A^o8to-Q>/#\ml<JOa8*1YR^U\c_JjwkK>Xkq6_2Ahnhw[>3oMăU"jWw\B%Ak\;2HW%]c:dYWlchll?C[s/VVCswXgJkR']3B+Z4[IvgVOfklTuE8+/1ăU"2%Di9H(J>.Dhfc6<\/omJO%*flahmQL_KIa:3m/ipiEmH(lCE5qf\,F1Xr0cy1wăU"cb:Z5*1sDLY>kPr%&YQVS4OH3_paw?eA7(AIXZ,#EgxV3uGM11q&#WSpx6cTQ[făU"YBY=*bkg^-dXB+_J,BrK=zS($fwXBYB%ATU8h*B+jJ*;'sI2BhxnK>./H(-hq28ăU"0^)WnfO,1ec:f2q-0C'Zr>5u%DoqNRH?NGr]M?vki4G1EuN';WQlfvVVu:LI<y2ăU"EPggj,=pN#bZef\LfPfD#klRE3X2B'tAI;xIVeA)F[-RB\W%,#jL:M?NTqhUEL(ăU"FJXaY4NeRs#^m;8s)$cV.yV?m)0dTfB<=TJ*>)5I#,kgZB/gYb]06Egj(Y9)/:$ăU"FE?m4WjOxT_<grR;dPROKSCFw^3<x^j$Tetp7F'i&sF4J$g+y/**V$<ktf]UJe]ăU"&C%ptQ3$nYSpnd8h=i\N6a&3G&/g%nS>_j,>DF)/oy%F8>HAqqZo7F+NXR2uajrăU"/6QRN[ZKgLaWZwT=<?$sJgRvfWL4j(l4b7&N(up%()9%%'%-%*OKIJSB1lv&M*%ăU"%'90%%%/%%%%yfmt%rfSkItst%=R%Uk:5mv^YJe4mhl:Pt1yx=z[J,O^D'QO&\\ăU"9<nB:,DKPoY/o,pZxvA/ff0//fOzO9q/p#z*)mey%RaiM>5f#$LOW0M#lb9,X4$ăU"B,$Xn%brdh\>Wl-O+4]xnqPT4VzDhyaZR*^?'n#T>:80pYq1ZUF^Wv64MSBpFRfăU"Nu,LMKRcPBSS9JP%l\:l,,\YQ$+E5Y35af-ET2338F&J-2S95Ra0PA\wp\QajmAăU"[?lz\W3VdW('n==feR4R>8<qWi*WABFRaYaMp1'?^$BchYwrCOy/Q<a*Da\jIIPăU"*>q\>MIfl'J9#BLwtET#&?'KcOpr+,IaJpVuPAcxZZY^(oQU]U<.I$lM+G/WSBsăU"/Fb*80^X8YxcrO66(KSe/6,K_c^IR8HSm?C1]W-g:lYk3:R$]5ly6>b1;TVU=[BăU"uX4,&]I'w<>P[LaKJ1-5R[YJOiT5e.aaGv%13(s;ndN&EYb.][[(2>&^?FrP&IHăU"h;9d-2+gHT)GE6kaz#]u8nBnPsHl\x%66qRBCoDr_*<]^ICi7U<*,V76phe^m]3ăU"YpV\eJmJnp,(2c3U2kG.w-+nq^xLEgN%tfLq6E$Mklu[R>IV#FnIGF8-V+EN^drăU"2>5R[a*;)6n$W)cC/=+fSs,^j?,LR4-XsZ5Egy*p:gm;[5;/*QCDHNu-^-hleYSăU"DF_nXKE2=XQP3gVtc;N?s%7>2Xb^lbwo:.=?es5't=N4\M83Q+>GehoiQ^5?+^săU"A2f_JMAOCCY;GK(MFC=k*$xz4;F%u$D321=$3Z&n=m'P1pKfEqib\I.%TqjTu)3ăU"QwJR_f#ptT6*=RS<'(zArTt2RSYd;;IgOT\:[N#a#o&YouloBQx<Xt\ww=V2;':ăU"PIID*M8DhXXJJok0fTLO8W)Xq(miJt%Y^bRnh#l'(n_F;A?O.X.x98XsxQ==fnWăU"$2G.iA1BC-N?$cvdk$vF-/wt:JMUd&-Wwm;*K?_Cr$WCYn3[XeD'A8Rg*UTa8BZăU"XbyUq*.vj12A(jsdC0;#cT7UPvAxXg,6?Uxux4[c['&lPt)(n.n6s^>)2D7uz#VăU"sH(aFEQv>D;lrcoUu^ledzO.2JPO&pJU2LVa1tXsa_RI8?iHet7<C3XQtPXC$$>ăU"7oX*3,v:KxKOlf[75l:iKxiMml)q:)^f9knsIBvRNCDdgY21sS,H(IBgvFq0oV=ăU"]5*D.\nb[>-2-n0b8zLc(n_(Z41Bi*egnqgB8&9e;l\#L]=zXGvg#\9pVV/r:QJăU"(AsOTrn*C)[GH-hDr/z$m4$Na0e+JDkgGy_^Q4aa>sn%.T4FDH.n'0qnc-U+us_ăU"ZR//K_bDScZ]AncpQXSc4s98u<uPatkHQUdarx?orGz2z9%T[&<x-ug.W2V99MiăU"'ck$yBWM.vBSv/)2Kj?b1a3%Y,KAZ7n3$u=:ZdCFdL6W[btE-A>uQpRQvI+.\fjăU"Z<K7??q[;XY=Q#B;3nzN3v,/]+H(t5H_pt;i^;4MNTO2mGI6f]:LoY:-DI8O%+[ăU"+yA^Mazh+mo7]^(qe1wYH=<a074G]_3t2M1.AoFTC<K<\CrH35<cCUUHnOj&$,,ăU"c=&HYS2/B>A#<Yqcr8whPrpVHL[8oCEb4a-_\];H[6&&/)a_>k_*Wh6Du*wAdpsăU"FBAC0=Ke&Ut&V9a-qq[jiGbBTniYf/pKd%R4&0=8SI*o:h>4X2K$Lum<#B^MP8văU"Oq3OCq>cMoD/uS?pZM#?$mi/,qT6&Fb,hl%$E$<QNvSkk*$r);^'nI2.#3w/,s]ăU"cL;7]R>Svz<Y5pDN&%up()%9%'%%-%Z=[(Jsw*T;M*7%%G/%%%.%%%%yn%rjxS#ăU"kts\e%b^UI[5l$gmXc-i0S#>[:+G=)6/(#*)OYSRwM)Z(Z;EO0u(SIjj3+bUGTCăU"caOk(oaL1q2JT0f*&u9'<mNz31CG>m9ptf;AR6LG?]qVA7Ph0Ye:duL[OJ3OG,$ăU"J2D$LE87ticERNH.\uD&e-A,l.YU=J6;=4>c8IMfn;,>CNAZFXom8(s\wKLJ4[iăU".xrsNO>/c_0OYor_xK83AsPox<n\Bf5=agwVt8Cl8$[^N.^X>B3/?yVAl>rbJZ1ăU"zD,ECYB/xr*Z2>*hh^SB*?=2oYVSB_AsTAY_7Bbgxn_\'^S1C:,chiRhEP_\KU^ăU"lKj[t2DKc%iln?Dq$)839EssJUQ4e85[BL-n9cM9wS7S?(N#YAVD\CXoTccoWeGăU";:B;i]0<B::Ng&&H')*rBWL4g'F_LyZ([c-['_SPl[Xz(>W.eQ(oRH?CLMXRhr/ăU"3E+4cbykNG'KP0]5<#*-ZHHckeS=(7Fr+k=JbB6Pwmb4AFOkrrlnC_+z4bQ[L/JăU"GZ0esF?Y+7GPpy$g.vVTU5KmmDG.jv2ZrTL\GLW^Ml=7JXYD1k0Iy,VD?&YdF0dăU"O&-G]o^.FH'2lW1?1SBo0*/4)\y4BLU)PdC/[gE%71;^).iJExG:lc12e..aGdcăU"Rj)t.iG\e_RfIgJMy5n^)Pa$&G6HMrwbWk5*wR2$#gFRJ5;k2)edCLik6z6r.tpăU"QYH:4d.^A%QZd+Ng0q:K6o8Yo2c^DMDfqJC2-H+GjVuEUr+Lj5Cm6tQ>3>lX*+(ăU"9[8Gj,;?RfQpIcH:h=SZdiB6cv+rmH\14eKx3G*4+>koEJGh]k&$0jc$*XP6-/,ăU",=rJRpyVU8'B:ajZ)-5Z8[w-^5.8eTfWNp]b%c1k]OJ3+eKxnvhsOv%**<[U.O%ăU"y<?rcN,GS7?F0v#xjX,UMmsV6G=ZxdrN*hPp<0q;Q-k$BN.7DFxrL628(N%TpdZăU"p-4uJKCpzW)++?&Za1bigUNaqG<Lb9W/K3_'bl%RQ]vaK#Vnma%tt]OI.1Y3XOxăU"tEmkt+K$/+#a%O#EF]a[8hbRe.EfuP66gCEhje;FAu-XnDZ[SwtoupYXlqq]/(PăU"snr#nJ3TLy6HP,]^:)Abp#GrZX)/RNs^'8C[MH^NFplJ69Qc^6<s^Aj/(dK-f>8ăU"E\.(W$ICPqDv_pc[(^kwNRBbaoKEd/Sa$Dm=7FGliMG*<plyL7AivT3N=<L%YoSăU"7vhb['0<bZZaL,'u:DIX1ZOAjqLm?][E%>ttTk%sro?FbJouxBdvrC-V,nN0tdYăU"j?:JbxhBQ8IM?OK)4_+oN9q$oKamus8rYN<q3F\lIo6ftjj.T-&-wY(E:ddqZklăU"EufJh_sDUGp5*0RdL[Am6,\A0ds3X04HrPXzleV=*r#kT2ovoXBt[,w,>nxDbo4ăU".o9ZG;UD/aH]Z0q>60?3CAY;J&XVh\6mSrf&sG3.=Ft8v$VX4qf-pgkSIV%:R]wăU";MBE^>GFx;:&:Qs=,Oi1Dq684QVR(HQ2kByol]#jkzg#pkG7a02;KmsaA+zqE^aăU"Dqi?Iu:BcUKJ''I:J7cFL5/LBhkWt&K/OA^JE<CB=+W8]CX1bz;k:hIWiY%*)kYăU"h=xU+/+;pec\-'K[]V#PxmV3<idwD+/5UF8^HT=&N_jrc:#jLWp;iKTJaPw9W+'ăU"6]_3Q$#R?Qs->kTu%p()9%%'%-4%.KICJ,KJ*]3*%%%C1%%%0%%(%%jw%ifsf%SăU"ktsqt%6(BMk5ncv)b$YBi7J^i#5K;h_[/.ISpnd:^Q;Igmps\KJ*>[Pxu1K57tqăU"eKjYuC>vyc9ht)50>P,uf1evuh5FLH\^uE>+HT$XQ4dhl)^nRrhfqzKs7VnEM,uăU"iMjv6x8%.twNu*RR<u3.&V]SJvOP##kl(xvMbo$BfaqkgG,mB0.RPeWP&ZQFI/&ăU"Yg$hTS:>/17qkQ<&#$>(Zmk80W?C<JYKaq\Y7Td0jrywd?W]PS_J=e$f'W7ncg2ăU"ZO;-R,7N^DA8;^HW0Sxr?rV/'eU/<BZ.e(2tT<n]osHe6^ObLaYlma$eebwf.owăU"#H2iH/jjoo?j[4']cxi%(6k0.>4IswJC%7+C:j-7;.wSex(ykcfV>lfuEw>#b%păU"tJ>i4>vSM*?AmYw4?D7.dsbrWVWVZAU[Roi6dF;[Im]XfX5jn)KJ2M<Il8\tT:&ăU"A=:U$u^DfMbK>y.%8IssKq3*sqXD6Ckl)p1QX7TFLf=wr2\8<2OZpAwD_isQ&olăU"6Bq6PJ7/fUn;VDg9/>qsU7[XiivCJ(;VVx*)v'*Vj_(45N]Q3Tr)8ykqOJ._V6zăU"ZBprn\#w3mGq7H<hL=H$Bt0a)Oms$=',q%lkh9a[OQg)5(,pBD=)mi5dKvDQ#$QăU"Bp&I3YqyT?Zt[J0bwSeU]EIOA#I+m0\&3(ywx2<X&-7PH'T%isbkc-ST&?qdqjMăU"0AuN_Lro8KPM+UK96e6r3luFOB+>\L\.QpbY/'fk$TEUoK1Sp,3-AZV$bp1,qKLăU">a8[wvcVn#w5[V#thd)zDZWdxkB<XVS<l2W/h2l5[JLx.fA0s/#neKA-t1Q5XW=ăU"mc5+Ef8Vzh\?\^HPCIw/d4yj\V#uxVpU%frD\SogrBIsQS/RCC\ju2U#[^8BBD%ăU"AKY;Lx/F7=>Nr+>FI#uJ=X2e(d-LD#ZqC,Txc#0TtgP=8jGp+9,j9Tr4X;omyq&ăU"JQRoEM8:Crc)n9^%VgE?tdud7$t1CpnVzp[>lf<C_LZro,WAu5d%x/)41:]Xh:XăU"8bO/X/[#fxTgCC_8hTaOVECb:4spy+fn]#RJvs:CR(m)^Dq.vV*xsdQ_%odrC:jăU"5C73BuO5$wL$rx#:/#g,l]\yK<S%(\g9T<X4#pkNEIP=;Q^TDLrbcu(j^VF1kH^ăU"XrI[-(YlkA>a2(qG*B'gjfFOG^kSvait]q1OmI[93*oMQ4kOg%Ao*0Rhp)G&F;?ăU"i6(DuCYl?aSh6]KQhd*'UVx<skcXI-,B_woFWuewum;w*[M<MeCT-ZHZmU\jRBGăU"pn^FHObzRD)%jkpXRs0jqADqBmNpUdb5Q)shn)gX^BGla[$%E3GI,SN.Re$oyn>ăU"H(d_iIUVf%g4[Yq^ND=j-LHhr#ksk-L#Dj?m($TjsF,#I,VU'7s[\hUB;>>dd%9ăU"^*Q+TSU[CTDIu\ge%E'i>-W/gf6]E578[]Xnq6ZRKKSH.BbYh=(b7^.BD[mi's\ăU"/O$ZnjPsL_Wr2Pd&l^1_)BX\A:n.&<HGUfXDj,uKX'M]b4&(fmv4iK0j.n1'0G/ăU"oW^J%XVgg0z^HVV1PT$3KYvF#bSr3p#u_HfLuobqL<[W%xZP1mW4Oa'iUil7HMxăU"]WYo6H$8cQ_lGe:TdYuo1MajB]s[T#xkd44Mbdjl[>rVJkYF7heI*G?r3HM*Lv(ăU"UFp_gGhlOAg=XE?0V&F7.^dFu4x(G6$x^xsnwOvK5rY_i;3DA7G.J66ZR2A0L-UăU"^k'-&CL>+^W6^YV#x+EIU5>fBu0%up()%9%'%I-%]k#aJt&/.hm47%%;Q%%%1%%ăU"%%rx%ktsy%WVSyS'y.)_<>##j6w=9*x0oY')yuQjJPX[[GDI>goX)+5:BD(I9'eăU"FgpAz\gBJJ-?Ewsc?l+pG$B8dAg)qg5QVRHnV65hvqnm[lKu>,;JZK+<5+_B_c(ăU"CKKr$rBZ*l6db'J&]'8nt7M^Kb.Fj;-z/XTa,v$aLnd-V\1qpNcM%%a:S[2CAI+ăU"OWh,EEdj]ua>^zr2qpd(Gh.PFS'>C4hsuqaSE83-nTm=xp^qS4bqQ6&:h(NEsxtăU";4ua#]C)k5TeSqOjK$fAtFA,jj7bi;x/>A^K0Fr_Hz\AdnKDkV?+[z0'^pVlITtăU"FPu&i:e*Rcj,T:QNX#Qf(tL65kI.aCv+zF5$OmA?AU2B-(UkaSG$4Kp(MDQDGf8ăU"bPqp&>l'#/S]VgWZe/x&D?S&bt6Lh7&6&qI17WQ=GIQ?%5%6oUAuPYCPs]+3l5năU"*Ygp(TrAjO4zcM*%<7&+6WUj(*gENU6](QrTxZRFHC:(,%<GDvksT&.Y9(JcIaIăU"I^rdGZ0;ZF1C3G#?.=j#2S=+2_ji^dE)+Nh:.Li6quN&=/K(PGW2iBOKdK31'/jăU"6[U#n0yPVfLU]f^P(T%?S;L#p_&rREfD0?ZpOiL#u,7<veLWUQE[U[T1jAr*A]IăU"W,UzS4W9Smsf,%?g)iS79*t9\JR6epl5-#7GL29T/YiF'V(4Y\^G\(LegL-M],SăU"QKBQyIff?S?PZ.gVTf2o\L\nVunQ2$Q[>?-;UW6NIg(\P]rG2$>p33'dZ&8W<]QăU"xpOkn((sf2O9gV8*?<,er=<oTg-rRy&GMSearPCom_^_++.Rtr<BUK*v0>n'2/'ăU"N6vz^Avvq/HXHd-qm,HW8,kG-G-6>3>yK<X'Romf8kJK_Yrw/1aD)IK(cr'ddpkăU"046)V/cGeT1dr<XY76.T\^m6Y-WgGEoq'UT5N-23Im4Gi.LM#Mm,oI.h2ACm0J[ăU"llT#>Cqvcql+Je?ksFTS>c-M>>4^)S\QoKPY%;#4o;=Gk'0OP6_FYX,'fW3=PG4ăU"E<<h0kZ[V[^-)AFGEEzU8VPWC=*Qu2rH.IRJ\)p<$fY=6#gR$7rOlGQCma;hHfiăU"tdx#\jcMFq[[LgfVe<(Xs,->w$+_Rwf*QK9?xz,9FVJ4n/v2\ex(-WZC>q<<2dSăU"0HL,Io4Gn+&i]ixfcRycO;e?ys7rco5X]X5o\;B6tsJ4&Ae,Ve)g7)Wl7'zs;82ăU"h6ZPvgxP2g,h&XGqAU]p2Ch62Xv8e(OCo45$7b-)qsdpi0.5>/DN;xZo3+3pNQ/ăU"CHQ),pOJQdygxV?$'9nJJx(Xi+U4)3tSMZ:c3lgCeSzO\-.=F_zK\[D9&)gAeviăU")BNT(ik:43D.wQz/pqpe1/#OdEF8%5YIas&F%apYf6AK:38]r.v&vnaF-BEeKh=ăU"f?9(kcNsB#.oD<FMEfu)4h7AuKiTVY:J\N(;YK;*BqKK$147R'okN&s[G>H/_vyăU"Hx[qTlKb(>IG\jzH]q9GdVq>=j4S?7UwH8rbnsS1O\3m,Q52ikH84A\r4?XToXtăU"t'h(Y;^l,T]=26&;J'mITTO_>MzNCTQ0D+nFv:bDU1VxBUo6kPO%j1L-IBC(=8hăU"41?;WH04kC_rX'lN^i'+\)Oal4j.EX:Y6Q9O*c?(Ks)h&*A/WnLIC*jGJ&k4F&JăU"W0U7s=_9nZ>KGEVu'P$LvfUy)Tq-73e,&+FI'_b#<[*0,&FXxE0ir&Q-Uz\kQG1ăU":5#f^v#)&-EVA%2$is46LoaTPbSS+T7]51Dh?^U9ywZA2MYe,YAwnu/_fIoP;A*ăU"4[]izDDXT/:U59+r^G9?8CqL.,,[icLpbM*o_EfB6NR;kbEoL:^3E/q__2W-C9CăU"Wu&'VLOr4_rw=zS#SFdgd4[z9U/gy>PGUwy?1&&s9n._n(1DkfAN,J30&tZ5i<hăU"M^?+M4JOS2=;EjcP4Eq>f7bbCv:.)PHpPF7f5Z]l/?lK(&,Wq=RmtFc7H)]HdpHăU"KOd&Y+u86=0k^e>U=FmipA.G(/eyiWD64B7?E<CzDESI^0_W*fa65#>Pbv]Od4păU"gtPr/fs4[A+WTDg)O(J9JoftsK?]VJYthAL.7B[X+((bV1y[2kL81W,^bVFV6A3ăU"i8>c53Wz/tkj6aiuK.n,OuftJYYURdi2z00fpDOVOY,w0&'twp+m*?Y*F/.&-.oăU"1mA.HB7+[ajFhQv$3\dwec0PC'9Vo^<L&_SkL2v6rSEcJfnrAwVt>EOk,=wEhb_ăU"*YwFSggtP.JRi9UeyLY.u7mBI[gNQJE1HDK*ey2Sk&cDmzmO$E;<3w';pYl%R.VăU"Z<HU,>Tw[-F],T?IloKcIJtb,41fQ;FQvj,t[d0Qc5loik&N.\\*l9\?S5twhqNăU"<L?NF(Xl,6Vui&bu.]/#wo5OmjaRb%wp8Zn)fvcuprb9_*/p<-v-I>^$K?tSq.$ăU"Z,woh'F<+PW;O;rRpcoXf->91\5$ElM?$dE;suiZ=LMCNR^jM<XnwideGlhkJwJăU".-YFCdCfR4)QRZ6;l\0Ku,OfD(^lW*HnVkDN*FLWQWcu0AsN_;IM\QddU0Es>'iăU"w#KlmZ<8%1?ZKThybiP=CQd6,BN?WUJ3[ufLuHd4y;9?43FF;h_rjLYjR>]0'vLăU"lo3n424yF[ST\4'h6fJYC#o0)PEPI5w*wHMZha%3hZP-MrFUpe*Jm8dP=P-1WXqăU"u/<niT8t=Kr3b:LPBkYz6,G(,c6=N>ow+I[PTn<s[FIcHq6)1k9[J6rmj5gek/băU"jl5.Y&Z1H=K+V74W%A9,^j')XXTQEZt]tqmjfp4f/ZFQk25a1#o*S4-=b<<.hDYăU"3T$wJ0Im?Jtm):['U7POO_%bQK+2WI;Vba)m_U^Z3?pdoieo&Qf.mbUbWo<_j&jăU"owh.Y:X9V?%QT9\:krfT[o$&pWg$]8E6YB_?dtUO<,5NG#l_GO3'nzLm&?ZLOYFăU"/l\U403\pduKw,T.hvEUt<>9eo2cXcqf;\FWSu[QnR5e$N-3KeeCouE2.n\d(/BăU"]T-Wd_$T*h)'_jas\mAx?<7?pk#S>XWEC9>+XO,BEo)<Sb$3_3.BnnBl:>b;DN<ăU"8OCxUr4Kxj-3>34+,Xa2HhqhiS\1N$deWj%*.'vNsFrl=kn\a<2*/]+363j3^cOăU"yfG,7pe)j>>jgrUuJ[h$4L1$p-O,gi*y(?1o6anVMp)HLl9KG$K3W$\4h1FvsJ7ăU"gIZa-S\aPZ6*/?qA(Mk?8X_B2]QV#qHj(25F=iZ6D(FNeW*^WnU\Bq5?x-$^lJvăU"?.Xvu*Y,p*>hw/gb(wyhAn_2VMsQSPCZq:3vG*8pdJRLe.[u><TsWL:JW%$YgDJăU"oMhOZ5XhWT?pL?f_=E&V:D\Rc0'/.wu7YG=9gDd,22NKrFZL_MGYbCrRMx,+r(,ăU"2Ec3*/KrR.MD$-D60bE$EJde\.B7e37K6.h'-HqC6J;2f$\E.=+e]4<sD('x(ERăU"b2DN6Cp<B$0Xq3OTiZEGGb?=Lpq0dcz^,/ESrVXJL/Eb^,7_a>/*jIAEe2+>sttăU"LISmK_><R-l9hRa,oAihJTb-Xri/T84q?w$YoLskzXD.UsbImagBxJ?#h#]k5ESăU"r_N^2uOc*2Bf)4KC?i(Kmr?0i+GP\WChWAH>A&;?2-KkL]1hn,BU1b_1LJ6=ai3ăU"xvF]>Au$/Kb?SqFEXcta5*O*T=b5o8ViMpI,LaP\Z'JG:2w+r:2ZlG;6=eiA4*GăU"DRK.1>?O'1K8qgDphBe+O;nAFrM4&*)]bZa\G>lYgWHLhHOF4un3[6+d#]gtaw[ăU"n/+k<8;NMa1_Z6]_JUCi.Zf0vRZh\]WMWnu(7:_tlXd_dv\sHwpjGpub9PN#yNcăU"[]dK(dtvpr=7irh2f8qG9G$0oXZ6D1Qhp+#-QMG4EFqOnYog<4dtmmWb5N3#>AdăU"8Y>eg\H51mCsxLll',:B34cLx2<Vu#lsPuNHPpv<n4BWN[sbuXtN7E-vR##f]IsăU"kl9]3Iz'ALC5g'ucjw%/YI2pD$V-[vwu;hDI2*0'IU$p*8Oh<4CPq\UWP/N2fIqăU"6GVFD5T\%a8$jnG:&=W3*&4aRTUIPT[J/T\^g_5P]$Yb1<-[ZpLHr0j/#$a]GhlăU"rZeSzpkPwt7\9N$uE4qTD<ER<<l%%qe,]UQ*4Lh\s+Om*3\la1m\q>?,Cq4JUs)ăU"xmH\V>=feS_ATpCGJ2oQ.HJH3,TqTPBJ+9'%M8V<^%Lde#s3?WWUqsTBuD[,,kDăU"AVWr%$kAK\Oc1p7ElhQ<r97hg_tMPTUqoR)FDRfhoJO8c\n1'n)QO)UFo5KrNUCăU"-OFWkKq_7S*?a2NE)zl0hYuP91UN+*oIaJpPU83Hnlz\*Yk.bmNS-Y.bKRTO>StăU"VG#n/fB_3U[njyVQ$HM0gU*drui9mdil6>0t(AVR7bGsPV7d*1k='EdDHd)>t&băU"(u.9/,d>KC8cVNEf%ZNSVNYy8[8>'tqe,rkPp7nD)/Y<mXLtl4KVP2LMLcS0wYSăU"b:XpLb0\eQ4/R0.h=qZZ1VT.h.<^2F^OmdgFqEBa1Y6[hpuTpj^LiIpjdDa#iT\ăU"3k1Q]/o-&aA*Qz\wFnLP3=Mds'Gh6dU-mLj1<f,0\eSBhtu(%fxeNT_BL#3b]KEăU"JOzgJ>=n5Lj(#X6Gp.0vqNa[]_cqBj]Nh$hjs<B+Bf(Wlvh?\#Gevd&UkRe+m/%ăEND SUBăSUB V3ăU"hCgK<joN,RojH6FBd(mBPal*2*k,K+O_/&<B/lm&uN7RO)$$Cr6F:Bo6,6\osESăU"tS#T%#Ai2$fp2_I,odlkjDmB\5U87T69ds$*/U:?TX>7JW\_)viWWlkMWOP4,%<ăU"-IT>#e&r:%%vflkuXr-YqE]4$C*R0:H8n4GI6c,.Euf_aS-t3TKCB,*6rtL7LL8ăU"g:_MD%?70#a<>54.lrw'F>%DD*i2\Ie]LoF(sHY]ZV[0mw.(r^4p3v&$dAs-:,BăU"mO_Q6$hBL6^xLe<Zbu2fhB.V8rKFHuQ0i0_L8'ZN.Y^tImmtRFdLeUD&%z]QAaCăU"edGR+G94U25:7,3b[G[$gS.VSBi<[&BmWU4e-dpJ^1=r8\=:-Fb/xWi-m'HHsocăU"?W.Ae_c/*V/5&'ISN>o=AfQGbzR8rIOx?^Lx'%up()%9%'%R-%0jRaJte=GMY,7ăU"%%MO%%%1%%%%rx%ktsy%WVSgRfxf);<>[kj5w]=eN=#2C;InS^2EE3#$:ABH*c=ăU"SYlo'yXG2Y+T%XWbq#iD8?h7r:p(:$S74zr5o9$lEoeX,,.$#MaN*lX2Y7fOd%căU"XQ,pK680P*]j5^se_Qo0x1*e6M[.d,\Qg^'<d7mc*uoO.8$6B]RENcfq^i]i$67ăU"VA2pD60Pz'/)iM=_f$AhM*KA+t&l;Q*\=mqEtrQW=W4.Y3#g*A9C-8cZ?(DMmqDăU"hhH6aIhrLCn^caEo1eu<1Mg_mgAM,2dhgDGe4rjEMS9&DXZbMv(C5?^<5Z%ISR\ăU"J9)aS80xah404Er.#<bn4FfC-kY9IPdk8::p,0ebaTRLr)Cao:tpX$3dyRVeevIăU"q:4]vQ^\Y:r]iuBYrjZKq.uBu'F<\1oKVW5/NFl+w$4ln]?4:rb./$vjCDJb?6'ăU"*2Dc_GA_p-LV/q*T=#_ew2uuW2Lsu,4bFn25toq&F^&k8S;Z4Tr+'C26tOach=QăU";RVVt76rH2KP6QTs#&vISV$\<iidLwYH^VJQXG&7*lMTW5*WrxF=A=ajsnW%SsKăU"KF]LN/OFl=,ACO==GYewcWi;?cZ9X>='aAJP,mH874B?bar1lGAVSuDWr>7\?c=ăU"/:v8=b?)8/WxWabFFRA<KHuRfgz'UenF%m%yTnw*c8YN1+'=9/pL$-B)95]7%8(ăU"61&]NQ1'dKq+6sW4*OEhc'?O[r.U[=-C=VzCI6wwu[]Nq5[+NA8#6N?ID[KT9$AăU"XiumrU9k2SASNtXl:^J:5a'k7?WfPUTjuJ(GxLZCA?.7&&;%^gku.^?kUr1_k?0ăU"n\]rYFkg+TNdus[+nZqebSq=PjP^+7d3D22m^D_\WC.4)Ih_3h.yVU&7?/0m*%]ăU"UbS#w1K%2w70S\m*nL\Nqo%NL/NA11gW10t-vl^kD1OuMf?<*\6rIxSWHm3F=>_ăU"w-f^<kD1=36oo_og(S1a22=I/28R5R$'o:nm&t.(4PTMqs]8j0/rxu4m>q-23zTăU"J\uI9[1ixHSD%9D[\d<9Lk.67fDU\83[io;#1512yi(YAr1_;[ikza>PMUxR03văU"qN_qPFIbk+;>3DDd[f*vEpXY<unb-fa\ihRa?2OH)'aMJf]]-Hb6a4bqP,Y#meVăU"&nFk5q/i:>eL[EiIC4lRuoY&7seuY?BY+&L]1*\kA?p'zo#M;&s0%vAG*>MI4chăU"33pQDtopkvfh,Zgx%5wQ:aD8u+>PoT4ik??nnKY4_J$q:\4::x39Dp19B:[.;G.ăU"gPQP+&G>x*0g+#T#TLZH*0i/;1:V#H\cIPVsYq/KIp4#r+5[\XFF>3P[EO*51h>ăU"erC\R3Dx:37(8*<UDS.yAsa5EXSc:(dc?<(0_34InI'P[B+tBeesLkd=ieEM1NgăU"/^Fo5G,9Z^7Y(9>q^BbBcJp7/pj4#];$Au\J'UH=3'tCQGVwU)cCA1w.xk4yDaHăU"et7#1/RM,yIH3Aa;G$k5dL4DLEOB'J,rA8oUEc=U:VrXQrvr<Ak>0wb3T882O[4ăU"'<Z0+uu<[G*2M3)tbYP0I6dZ]bem8j+MTe,mc+S.1^hl1nE&Ts%()EByo#b'x'FăU"te;[(:T\1PhHsFP%rgsOO242ol$&+Ft>>nHri560oob.Nl,609dsBJ]ucmU;1u>ăU"e$bsz5#V-fb5xNUD*Z]k95,'\c*e^zvKmf<C'2dAB^ifXmq0L[tBku9,;x\'mT+ăU"M1)&n=j:j*8wHMZKgC[N(DNL+&VquQ\SQC((9*Kc\'u-;Y2;<bMeA;=R^NPST/0ăU"F/Z['Sag1TN>g<V[z$o[q7HXF=j%-Hj;prV4B13E80]0t7:aF[kxC\)nc^REoSRăU"32iLxBwEi#cF%[c-n-0cOC]C-7*Ac$_KihN3;'GP$GU5g;Xbk\W.f6LtmWQk3$tăU"QJ<lB*H95E_O_8H0g_[l%5bR/6o)?jAs[w^x?sJGZ$:8cp%GfXp]bBie$=Ho);0ăU"G:n&cZT<HJoPir%Rk1Lvm;zE6a6bK9^26n4jLnRD_8G/M8L]tAE3jKath>A-)%UăU"IXsa.(w;8RJ#l'rkQ6bKtC0-B^sQ+V)YcS+$2W:pT7-l&6shY2L\vBVy'jS0gbpăU"s\Jb$V\tGj0sQ>RbnS=3,/uU01ZOY0'tQ<7'cPR1)6Tcn&wg9zMEiY-;4AeR%-:ăU"R1:2:w9fgaG8YGH>O6][l2]lu9^&bm8Z8)2YLL]bYxrFZS4miZncGrZ%.c?rkG,ăU"kH<nShqc2aj&ai9\1/CbbWv[s47L&IiF*^)E7:\p=yuv8>UCpbWV+AkfQ;q^^MEăU"Y<Bvu[5uCK,223d&F+CNwB12dI]hU=_tIn<0d7wlouv)p>Fr1]T(b,$d-.]WM\TăU";n2Yr8ghCT?'sT\Y^uJUZ(MhQXubB/2pL;AT\-N(s3BaY$X5?r9tw%Hsy.-sKH[ăU"QbkjR4Q$>dacYhTUPxQCnvO5f0Hznb.g]#JQY?yUQX\rG(^0X/=6p']1mfEk83FăU"YaOO>(iGMaz+k0ejFQjBvo/HZi.BbmW_gcty>WSdE^QP-KIe%6_E7tX$]*h.nzsăU"^N]PtB9lorxZNxpT%xdg<zTw*a>up%&'9%%9%'%I-%%LIIJx>-VK>).%%Q-%%%1ăU"%%%%%%%%%%%RE%/P%%%%%%fwnf#qsw&%Skts%up&'%9%9%%'%-%%?=(J0BsZj'oăU")%%&C/%%%.%%%%%%%%%%%E%*/Ph)%%%fw%nfqS%ktsu%p&'9%%9%'#%-%>&LIJJăU"j;loa[)%%U%/%%1%%%%%%%%%%[%E%/)P/.%%%gtt%ptqi%xSkt%sup&%'9%9%%'ăU"%-4%ig(FJ;b+,ZY)%(%30%%%0%%%%%%%%%%%EO%/PA%3%%h%tzwn%jwSk%tsup%ăU"&'9%%9%'%#-%TLdIJfq,Hr'*7%%9.%%%0%%%%%%%%%%%RE%/P&J8%%%hxfs%xrxăU"S%ktsu%p&'9%%9%'%%-%8&LIJkBqdrb[*%%O%0%%1%%%%%%%%%%[%E%/)Pu=%%%ăU"lfw%frts%iSkt%sup&%'9%9%%'%-4%nKIIJD*r+8:*%%%51%%%0%%%%%%%%%%%EăU"O%/P2%C%%q%zhni%fhSk%tsup%&'9%%9%'%I-%/T[BJsP,U/:*7%%'0%%%/%%%%ăU"%%%%%%%RE%/P%rI%%(x(rg%tqSk%tsup%&'9%%9%'%R-%ug.(Jr6-[\5+.%%_0%ăU"%%/%%%%%%%%%%%RE%/P&YN%%(x(xy%jrSk%tsup%&'9%%9%'%R-%OK.IJB13lvMăU"*7%%90%%%/%%%%%%%%%%%RE%/P';T%%%yfmt%rfSk%tsup%&'9%%9%'%%-%Z=[(ăU"Jsw*T;M*7%%G/%%%.%%%%%%%%%%%RE%/P&7Z%%%ynrj%xSkt%sup&%'9%9%%'%-ăU"4%.KICJ,KJ*]3*%%%C1%%%0%%%%%%%%%%%Ej%/P0#_%%%%jwif%sfSk%tsup%&'ăU"9%%9%'%I-%]k#aJt&/.hm47%%;Q%%%1%%%%%%%%%&%RE%/P%ie%%%rxkt%syWV.ăU"Sy'y%up&'%9%9%%'%-%*0jaJ$teGM'Y,%%'MO%%%1%%%%%%%%%&%E%*/P1u%%%răU"x%ktsy%WVSg%fxup%*+%%%%%3%%3%A(#%%;'%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=112AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  TRUE RAYTRACER                 ia53@rapid.co.uk               09-30-98 (22:23)       QB, QBasic, PDS        342  22615    RAYTRACE.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"RAYTRACE.ZIP",4^6:Z&=16708:?STRING$(50,177);ăU"%up()%/%%%R%%(dmGJOj+5*?\%%%?\%%%/%%%%xf%ruqj%Slnk%lnk](^0e&9A%ăU"p%%%%%%%&&&'%''((%()))%***+%++,,%,---%.../%//00%0111%2223%3344%ăU"4555%6667%7788%8999%:::;%;;<<%<===%>>>?%??##%#AAA%BBBC%CCDD%DEEăU"E%FFFG%GGHH%HIII%JJJK%KKLL%LMMM%NNNO%OOPP%PQQQ%RRRS%SSTT%TUUU%VăU"VVW%WWXX%XYYY%ZZZ[%[[\\%\]]]%^^^_%__$$%$aaa%bbbc%ccdd%deee%fffgăU"%gghh%hiii%jjjk%kkll%lmmm%nnno%oopp%pqqq%rrrs%sstt%tuuu%vvvw%wwăU"xx%xyyy#zzz%M%%&&M&'''M((()M))**M*+++M,,,-M--..M.///M0001M1122MăU"2333M4445M5566M6777M8889M99::M:;;;M<<<=M==>>M>???M###AMAABBMBCCăU"CMDDDEMEEFFMFGGGMHHHIMIIJJMJKKKMLLLMMMMNNMNOOOMPPPQMQQRRMRSSSMTăU"TTUMUUVVMVWWWMXXXYMYYZZMZ[[[M\\\]M]]^^M^___M$$$aMaabbMbcccMdddeăU"MeeffMfgggMhhhiMiijjMjkkkMlllmMmmnnMnoooMpppqMqqrrMrsssMtttuMuuăU"vvMvwwwMxxxyMyyzztz%%%u&&&'u''((u()))u***+u++,,u,---u.../u//00uăU"0111u2223u3344u4555u6667u7788u8999u:::;u;;<<u<===u>>>?u??##u#AAăU"AuBBBCuCCDDuDEEEuFFFGuGGHHuHIIIuJJJKuKKLLuLMMMuNNNOuOOPPuPQQQuRăU"RRSuSSTTuTUUUuVVVWuWWXXuXYYYuZZZ[u[[\\u\]]]u^^^_u__$$u$aaaubbbcăU"uccddudeeeufffgugghhuhiiiujjjkukkllulmmmunnnouooppupqqqurrrsussăU"ttutuuuuvvvwuwwxx'xQ%%%%%e&'A%e-'w%&-RAm)o*:R-8pO+A)5p<V5.HokmWăU"*q>Zd=X9UlA*r#A^EhYRAn+s*BbMxqy+B+5tDfU52CknW,uFjp]BcUlB,vH/neRăU"/RBo-wEJrmbpO,CM)uV6L5%1_v.(,^DCgYE(B[I/dUP)3O#6x+\ei[>[NEx2v>xăU"T0P4#Alp.<'T0.?_O=A0G*Zd<y#efa6SA#6JqmOm*Q4DZfU33EkLH&v3Cb,Lw)GăU",3a5GCi?hZnMm0-,8L4I=y9)fUT.8O>:UIf2gW$I[r9X_B[j1hpX:Q9)h2L4.DdăU"O)I:_c7#6HkY2WqOv&2,6Igtq+b%g;2Ap$Dmwo]>foZ-rltIBig/.F(V4.Goku'ăU"JG+2.#^G%3Bi3nKoN&;BJj=2+mO+Ak#I$#aCA2+/+GYQ'+mF]2p60(0cz?&X,'BăU"V';.qF4E[WIVe7[XgMuw[eYO-aN[Hx8&g<-I?m>;y=zbYh#5jAPBT8%5IF;(8')ăU"f>BkF]$RM5TC5(-Zuk4>^ZySmL^d2'5XGg++EbN^f/U.NKf>Vc8_hh7ux_\i>ybăU"_585),f:+CK=\.LOXQoRSMgUe&g9yYNoT>6PwZU)kD]PR(DO)70AC;kOObsaH7băU"Kt\gs__MukUXN;voU4OcwMVs/cxhwuycty%/cVytw>%c5&*l%25\R0XM_An4g+'ăU"#z9z&/6;=L*y0sUACQPdlCHYtp;,ImkPf-iM%:f?.L;_VfzUE?df0NS_Ogwg]c:ăU"gZ2a[_u<3e/udg4i??D'3lmO:hZ6qSz$&Z3=_X&,iHn.'/mY-/\\DoYZC:'heG4ăU"%#>?9J?3g9&;jf>=6%cj??$?dj#EnVQk6ike;+Q5bu+[S7Q0?e+Dno=QlEOYP;BăU"m7o]%clGap?elHomQF-IO9e:)5kf#uA6.MwiYQL,9n%=5AMO;w4;5P6#k=9CZfnăU"P/nVRoQh3f<o*R74RjYI;0ZflF?o#BlDbC,Q/p%G$&ZpwWKupfpXAO,SG$Y=Gf(ăU"CKqpO*nm'*RE)7\7lSrN]c&=Qr^g6Z'r_ktFgr$_oVSsNas6mCNj?su'sc%u0gsăU"d^?;EtZe-P=bJfA]u'tg5upW:hB9,TK#,C9>Zuj?NtoukEnN%;l]IhD;-mMtTZ;ăU"nQZsU;oUtbY6pLJS.QO.]bNQ;rpmcse/e-,9g0sR1Y;70T9%[h1VA+U<1Y3M/R2ăU".\uf35E9RC'q%-fKaz^?'?)Le.&u[6'I<-y/UXsfp2:AY4?M_+1Ygp1/2-R<*1oăU"*Q(y0/vAGg8e&o)I=&p-h5d'5MYSRCi/7,_A&L3=/R4?IO+KwX_P111/dHsB4M$ăU"g2&thodQcj^JXR_Zq9(H#6O)r*JXDnq;>#djSehDZ.an+=#MSJ%vZL)7+f78b-8ăU"[f?tMknrDvemlluZptWsTODxM'8Rcw4AO\-/-2OzTPYjoO=+m:4&M%))%/f-h#=ăU"'6Y%u)Ha#3.]*d'8iY/SL3l./xogO:%?T(Q7fe>-IS=$C/+,H):2?ewqaq&o>gAăU"Ig6\O#)JSpI.tSqg9w/>(P3v05+eq<'8%kUYS:E/a%<<5HI>R7I60&w0[9s%#jLăU"W0#.naQ^6XU=RE%ZV=bY:3;CW<#6S)UYGk:13[5h=7FU;R3d&0&wB)':u(ETMeBăU"Z.s7m'8O?gR;tjkof*\=?VAuI]_CM)AcHBUL9#YK[6^I-UX4\cS8cs3j^P1Zb2SăU"4$(YBkA_bmx:4%3m%k[W-1UL3I%J^noO?:afV[(GSB/nsE#7/uW%g9end*vak^/ăU"'U^X;19T:SGZ08)8<O*F?+YAsF]7FfIAa_dsbmd&^QY[1G9:AWli1p7e9=#Ka&YăU"(vgG:0;IuVJNF[1^E2>H\_kZ'Mp\=K7HA\MSV^GPb];;oFA_EV=]9Z2;=3<?*LOăU"kXDc#11^)r<KDsuP%DPYwWf[8lI'=JOF%.m]'_kVM=7E'j,+dif4>G1wh+BaE,PăU"D3PldAiRvXOCTZ/-Yr>-^akb+oUd?(\sGjYf4gD3*bqYMtX+xpG*SAYf?m$)_[IăU"6</*LocWm-YD<hsF6CLm_6Z5m)/yut%KCuYADc&e9pwd3M#S]:y7vB<=ZA9CyJ)ăU":R;87(=5pIV&SoZ3DSm(D7SJwf?UL^3DSA(LvX(p/g8;k/dM^o#/1]3';,CMuS_ăU"2(&3Mnr>IImP[/JL2?Wr+A$u,+$U&45HErC-o1,cEk$4Lrqg#q$1VbagV^G58rBăU"dmpl1<jg2=7\j?MW?1Xg$1D2';i32guQb-J/GDiQ9q(%TL]Ap.q'JQ7tL+iwH;AăU"p-is/e5Q=Zb4kT+V$c<Q3J48Lp,),bgs>4CWlNFu4dVh5QpaQqbhGM*?Sk\uZJ$ăU"f0]8O?uMn/PB6z=tL:]YTWr9Zc1p<yx\n/+&eTfytH^(>wVYUx54U9==\?A/5FzăU"/E'7v/wOnr'ZY7KfQ^17]SI:MkOqD;q8;4:>U$K%/%Kn';-)d*SC:DZ.)2F=>]UăU":WgZ1e7q2(6SYU\R%0\CuE1?mGw#bIiE^MqT\Di]u05$f:4Meh=Dq)lgbYK]dILăU"E*ZVQ?2\xF2BpSrC=F5?XHk$^)EIG;+5\TOujf^vS[:82OisKA<jq]Ju\mE42A]ăU"wlskqaju]mMt2CY&Gke?4u^UY^2E6jsliTHu_]f$A+C9Sm>jT7cUAxPM)qd8.v:ăU"/>0r;O$FAE[QY:z[C7SEA4snay<B?h.7&.g95Cu+J7PlY/+97GIVtf^d4.3RC57ăU"B:h\[zgJYx3UD\=Y1F3c.JnZULgbU(xjVCPO7%4O#/f.H^lf;O?IRJl(lm-9aS#ăU"%%f.wiIQoP2oOLOT;s$=6n3nkpbFJ9tJ[L-66dx,(do?7.?=GRWmUi6d>s#o99MăU">LH[o9qbX$T-m9-qwcp947$iVtuf[#nqm6m7kqfnuV8r,mn#hA/%^uH?U5ohx\^ăU"'1Cw+mCR1;yQ*tVe#s_%A,8'a5Et8usPHwrozXria#Nkn^txsrTnwJuD8wpc(xLăU"s-xx%=GOx,NHaZTV%H'IUJLx0L&R6)h9YH2VX*4jLG7)+<no;C+;ELI,&JUjC$qăU"PEa&P'mb%)M<H)GQM]YQu0Q%Q]vSiqQD=A*W]R1Y'R[SGl7d/RJ7?_oV<ho:<LpăU"4'oP(%_')-'L:7]7Qi++E)SQDIu,A_ARw]TLy'T%MGT'gMT&GRP+QT+L-R/7FdNăU"ZUP3Q6MMEU7gMU9wUPOOU=3qU?-J7$7FDp6Pc#,=[/F:5wC,,j:oI=>%d#+XZWMăU"S'WUVGWwWhgWY1DWR=VP]qW_1-7:]MXcgU24GXe.U]Hx(_k-[OkLRH)pDLeDH,\ăU"CD/fU%eByl1YY%QYl'qY):=Z+]PZ-'Z[9u&1qgZ31YZ5QZl7qZ9U=[67O&='[i?ăU"G[Aqg[C1Y[EQ[$DG&I:=\K]P\M'\HLQN/RWN(2+$58a$BraK%8'yY4'Y2c]aXO$ăU"mhcZ\4bTBbcLlaDn2a:<=$/l_\aWaqra\A,5^uGa6Fl^%BbaQgANM=QESBj'nsjăU"XL+j[(kB_mkqSqOJA7u0Nk&?9vVeWvJM+vx8m)Rc(([ieO.(m]InGdm]h0-nb+(ăU"orIQG(\#5b?wz)miA?j1,Q/-JXu%aCu0=UV;nibGmI.j09rc5:.])-AVe-P.usGăU"%5Tds+\7%glTM*oc7tyIt%u5uqAo)nO7)lig%i5hg[5)X-.w[Ch6m;_1Nb_;8U'ăU"2meA1YSnT[OOQ.u.tuHh<u>']u6ZRlSQ*f8:+<o^v#^,$_WTEm1wF2u65=57T4xăU"C]Tnh/sn_[&8fjyDiUyu0Mysk+Euzz^=czAVaP#$FADf%\^E.4/s.l%1/s?/byYăU"/*7uq4e;&E.1]G52XS52Q_427h2$Q?2O1e?ajM(eT(]0U0)K9/x/:/n>.BUY.uTăU".-ZsVcN9PJHE*BBw5,?fY+;I%sCy+Bj9+/fi*,91**o*M(_fI[.d4>)fLNv//]RăU"w(-+?J>+=nvMTh+V#nwJtDgF;,hJ5UP)d,YjCnT;-)XUXf1x-_KV8d?-#x5oh3?ăU"8(e;.kr*guD9t<N.'+D:8v/2+T:17K-/<M0_oiMe/;lfi.qi;i?n/]*e00:U19uăU",11>2QM9&MRJ3]?=3b)3ffe2j%E4[[+4lE4]j%4hTY3eoX3a)3P\n'$1Z(d:=17ăU")0$2/0CE2(96J#>65Ab5.9I+BW/U-S))H&>,J9IQ+Z>grbdl?N$Aq4gC.Y+EN+NăU"GT6H:[,MjJo.S,eR]7w1-io/$3o1S;oiMxIc*pd7[yfzLyhehDi8ooK?yrU).vKăU"zM3o96%uz<)&/';VK,Kq;K*QI_,:A6-4Kc:5f;-\Y#-No;+<?.RR?/De:/zI/dWăU"?<L8Uq:e41?_1l1b<NeO2Ln.2c93afS3h#54\u>2r)4cf_4hp;>OS44ou4ir_>măU"mE4iY/su93'\53xp/4Ki11bT1B>U1'rC?0YG?NI#I9,5oC%)hHC.6[uG^Y-E*?văU"OJV,IovM2WU<1mWRkJ7\47eVOh\pj-^>;w$_nNbt-__I8jnV-j?8MlEpnK/*p5;ăU".-iyki3xs<Nx%i1zoIf?(Ow+&r/,)R[,.EP/DQ:a0_,4h5qSYD:>,zK+O;cmu.>ăU"O)bn%/QC?0w<I;5?X0,Yz-M_0\aO%K?S<N/&QR91NRZ3_O#3Wks$JY4s=u&l[i/ăU"3Z&?oO&hE?>me+3$u3l^S'SSO2<(P?F??u#I':Ti06o5t0/0]-E0)KY/,e+/n_/ăU"VkF1Wkj1Y4r1[T1Y]t1_4#2a$i2c*2VeJ2gkj2i4r2kT2Ymt2o4#3q$i3s*3VuJăU"3wkj3y4u3%T3#+V(%.VZM'%*x5Q&]fQ:8S+'$'23U&+<)&D0i?dLVC.#V%0XQp;ăU"6P<v:,9$z>L)4ynF?w[&B['(>Pw*((,B=rLUE%_+*W<+KY\beo*M5O^IU%6FT$GăU"'LLLY2bL-F4HvZ)O%7E(w.Eja;jm+E..y-W%gF#V7#J<PyB:?CokD0A6%du=5iAăU"L(9(*Rg+%q,,mgwb<#1A[F-#p6,Hd%-Ui08%+5Ckb?Do1<0+O]spInXv4m+07+găU":>eZzr^::H'*-eV.<6/&%#5'JpeL)T1(La)#q5o4dL+/YZ3GPR1,wFfI\#&P*;,ăU"v*Bm0+$A$+rv1EWvAF;eAX\o8z;/Bn2Lih2Hc,q3J-DYIfIXw*=[dX)):;I&l=lăU">KC,]P,Ve38*;8+)1C;A?&>o7&<)9]w)5ASQaASP+AUKiAWkAVYkABBQ%G[&FeMăU":1W/L^&?edAnPzI9K6&MAi5EM9LIm#uSZaCsOqC\+g?tkCYy5CVoE%'ucC)ADo+ăU"aD-Y+D/KlD.KCAA6Lz.fLqmOD1aVG&:H0_VSvu=#*0;effM^/:-T%a-3AFqeQDMăU"Y+FOKQF);Zu;1F1FMFVQ8FZ[<^]A(QoTPS$%elLI)v%;qIMpm+;MQY,oUaHmWUZăU"K+QH:'Zu6,HuZUH2b\^%BI['baW_KF?Y%&I1#gW_VQFpEpo%Ul<;A_vM7uZG#jaăU",&ZI=?6JAfV&\UoJE&JowaKwE%_KLfK0xwneO6K=QVK1+NF2%m&(eD/*,CX)?L$ăU"e5Cv$Bu:[9VdV>*N:zJ),5FIekGLMmlWM<bK=SVMsZvM[R0Kwlj;G(NzNVm'lrNăU")6Nb'fuK(1YAe9;Mi<%Vu:a'9Pl=%*nM;C*Q+7B0;,EU,#imVC,PEPLPGl-PkhJăU"GIf'+6vPO2$Q%bQKgH+UP<Q#irQY6QJ[rgB6sQ_BHFL$IIK5SbCqS,BrG9V6+cVăU"o;1=qA%^,D_SSsrS_PLSwlrSy6SZ%VS\ZvS)l$QVbTgY/6/E6v%juT36TnKO)7?ăU"vT9BiU\;?%EE',n+U^eXPTdVCc,f&K>+;o:+Jw[lVM,VrOLVQ>lVOBuUUVVZWvVăU"5?BT[bfWNDTr0l)aiF,T3uWeVW3g,70=#XkblXm,X10*QV=g98aN5-fI,<%=u)kăU"C9)gtV%Y:+MY-bmY/7oY1WY:3=X5aCZ6wfW9-Zpj_Waq<Z'a)H5AU[NUUP5j6wMăU"m*ue6:qtZMPm[mrnXQW[=Sw['8/[S7IH,gO$fzL>&J=2)myOW\=cw\eJM\MBIC+ăU"<V8Y8]mbm]o7o]qW]=sw]u+C^wcN^b2\q%M^OhW\)73^1A_Av($/9'_0Xc_+hK4ăU"&V^%<RNM8Rj.R_0_]fNf)c9]5mnBl'uH#'.ye[)FnwLX:nY3[),H)<(ceeu.h]căU"(+a]hf[iikM='g,'EH1OnmGkc1>]eAbBRhb3c7bIVcb48KQsQ^71C_8cS_'qP.-ăU"n]Ki6e/m5ebrcEIak;3]m#y4d4ddbH=lw3\$SI8a+=mX.=?e\S)f<%n4Io_/$ZBăU"+P#0'/%4E-ZIgER7E-P.\*s>V\65t_D(dLc%gsUu;PMZVCieY3.h9bh-^;hb']hăU"e9[iWec0x]_PVgQ[7k_\gc9TXNI-)Kk2Gf$=$%7NR9D($;Hk$kHd*1ml#?bQBj.ăU"mFXw&[>x,a_e1s'IdZy(kdypndo7Z:U>&QF1+>V0)-]5Kw.dOU.kYq69-zW%O0SăU"Ta0*51C7Vrp0Y.qJ)l\5sH\M,IgE*pFFsgIdB_ng(q/du]9f'>g_PMx[RChq-jjăU"smKpRlMwg3$4-OON1f_9suforujrVfE]*VQxdALovQsRS3(g6I>g-:9wSZOnXd7ăU"L$4-b%[y9o.onDoNpD9nKbo7P1M9FA,<PAJdt.9^+p9Iq*,/0[7_1?U?.FY1oHUăU"rGXu0B??0;i0$5O0.RurPc1rp4.O]X5TIE-OODlFe*b?)sY..t2eK=hnm*p3*z9ăU")tvy*n%dSI*zf)jdQ,vkmj8d.9*g?Sxlq(S+E>n>7hiFdneZws^)O^Eo>4hU/)jăU"coBnb.h-gUpgodpr.:>o>#A5X:3Ba/p0[E2z;%$)pVh_kq?)k<y+qNK1H<C1Hp*ăU"=[o+2Y53][E3Zm%5Z9>Ld/RejZ9J&kRhkCQgT,W07>9Gtc9xCum[0B+Y.a/rjX3ăU"[:7)AC4nbH6gMhH4,Gj[5;MsfD2u1hpV19%uYRL$#/;fT^3<vM'av<nedOLJ*M8ăU"x=Uvt;W4vN91p>(.C>gJNPO2)0:e[J:<H%R#8QL[/ZsH#T0s_]cQ(vF,4o5bmouăU"iJp#'XDe)[,FQ=*i_Fi#9<N16=j$HCm_IpT%iBa.JqgYt#[]B78Mwu/qm$W/4/dăU"Ojz%+:JQJZeUR+1C-jk*qd=V2A/cVB+#r?Z:6S1H(+lGA_tEg]JZ<#Hn(eR/>LgăU"sW$/rmbOt,K=b#xMwu4w*IJSz;',*7Q6$bu%>-Y8O+#Kl;=kr2BbOr*:$Gl84ESăU"J(llC'GNlAS?/;uL?8m0IK>2UL&uf+);hJ;D&%ft\cveJ%M8pM,$]Hk79f=5RgoăU"srn^bm9\2J_],W\J<Ym+jTqxA5cty&/kZc#)QpIz%,fIw:&6/UQPZ'2eys0(5o*ăU"[zTDd%8;)';18'H*=;2'EVHEqZ;+CaS<q,7K]l1+YJkPofYM%;'\.Q>-wTGj[S9ăU"4Ur[UEudf0YoQ='11]]zhm^amQ9<^a)1Fs_h=7*G6ImIp3-4ga&(jcwsO>Hd'G5ăU"*Jf-mO$KL>5m$eu?;-Bb+A#'C^lB5EUHLVmHaxf#C-hHZ.CIE_$,m\F)q#pAA;răU"hUj;'Cn7F3(Gku<2+9$*)e%YY(*rt_0RIbpCOhIadl?(=%ih/>ai>cq-IclEeR9ăU":A$*YadOm.a3A:nKj8C7CM<pqKT+P(IQ?D<1yn[-?7\K1WB9Aq;W7XXTQ-FGc09ăU"&rKq\r'ZN<_;fZlQisfs0T;9S<1VGa$<\Y0O5Cu%]/j3sv_oa'\^e)(>S5howG.ăU"'\$lG**MapWiRsbhFkbYd1z+Pjg;)=BST<nUIV+h4iWjUN2<-\ZW8)Z$h6mIgB:ăU"LDLuoZ$fYMW_6pDLk:i#mI_VXvQDKIf%(k=-#/1f5c^/u=0K'U*<022HtGay/:>ăU"[hsY:+IUnk5C=+8,Z=<ntLrfP$XN&_FfCNx=)e(PB*i]0f=;5QEZVFe5[+XRZ<eăU"EZiN+bF:MQh=ps_^58QZPm97x/Sjs/<H=cvuX2\g6KZ'_\_+$m3a>AWr4Ie'#CCăU"_p<8>SKeM.f_bqRf.>8gt&8^edu:*I_b/SFN_y52kP^z;<?\#'oV,_D7DPHcI<CăU"w2:B*d-uj4-dkuQx]ilda2e^J%V:'g/:lPCVg3?G<1ERJk.X=115Vuq<,Z,*RH'ăU"^/%JwGAs[5jM3T..D0J=SA#EKbqFa_M2%(oz0qod3o31R#xpM-q,gB=9VX6^'1;ăU"Nd,6Mu0*Y20BY?oOrA]VK5_8p>3ED8QC9?jGdbkIB7&yo%)jAg_4^3Tidmqqui6ăU"irBevfb'MG=f.Yms4q8gI=9Kc*N*qpg:i%_)vQgPZ.d)h:AmukxwMF\;;9<#)GnăU"V^mLV]*^9kPr?Td(LGC1x%_D,DDEbF[A3D$q<AC#w5gs%&28KW\?<GI-Tw4hZ)+ăU"a;#zwmB>1l0#ht-#MWz:lid_w=RJW*Xt1+Vf8?l*Nh9uF7ft1jS*]u\6<(Z?$?WăU"A;]IkWIp+[Hx>Dn'kU+Z;1]n=AGn$[/Xf1NVJ^E4rDGOK7n$0(_Ma'XHOZ/Xp,'ăU"R8o\S%L3N/Dvhg$rkJ>M)70dwdfWN=$Q)JvIL29'.(#0#fY]3n3BFgr,PpEJ4dsăU"PoYg?-Q,C<l+&T*430?7(-okkY),0D7S(hfMqJkTKX)Z*)X4;)OF%Vt&%Awkzy1ăU"xt9z$&Iz%J5zz*i^9&6Tsz)U4z%2JV:(FI5%-uzN&:4:Y*Vs%c1?z'MBt:,ifI&ăU"5T_z(JQ^w:.lvs&9U+%)R1J;02;J'=KP%*Z4_;2BtG'Ak%N+bt;J4RJ(iE5%,PjăU"^;6jbt(IVU%-r1J<8rVJ)MuP%.z4h<:,tY)Q?%Q/,t<M<<J*lU_%0Q4^<>kLt*YăU"p+&1<LJ=#\;J+]KY&2D4h=BltG+ak&Q3Lt=PD&J,ie5&4QT^=Fl6t,i8U<1kCuQăU"8qUUTNW,&6zrJP03/8RAi%%-hUg:7gi)%Ny&0,*i'=*?/+YC-v]>2'>ETB)&5[BăU"Y)O?If17?8RBqE#-i]Q(7i%*3m5P0&--(>*G_+[]5F3BMx2Pp*TO+a\/',o#e-oăU"OAQ:Ygd+]Wi$wSPU4)u)F:0*qgPVHoU45DP3cDJ>qg%01];q'B3&We*UE)P4WHYăU">VEfi2CItRrOpZ7r>Q+;sp+:XOq2Lg-]B,IoXg:E(1o25BYJHY]2GFeCU=Ufd(kăU"]^IQ:T5z1Q+;3%+1VSH2;=W<A3e_Vb3qp6ea$=FM-UT[lKs&>M_AZn)TY;9/d+[ăU"o*(4Su)mIQZ;+yIV<07EUWAof2SAmHCC:;lbEIG6XGCY=HL'd9\>7(?aeI-k/Q=ăU"9)Y*CWwfv2<kS0<$F#bOS<^X227&PS)5*%6=29bM*+6j9B91%B(fU6mOdqG=gI+ăU"83kJTR\CF1xj*kgw9d5fj_f^6-l7/:,PLh<.#E(AWNkc4;n4CuY*LH[\>x.9*meăU"0SVc'ghH&uHNk=i5+iD7Q9G$u0\ET:^Kxp\%hvBj+e/m';QpI,g?8p:3s6Zjv:SăU"jhVSlZoRM2IM(W(;LV_eU,7NX[]HEtJO0C/d)M7:;RL9U.Ja0/a#wgFO,V#x8QAăU"]G1LHkti7/0(H5?jw0)8oE/TwJFfI&E<8#3V,9a1;5:5^1F.=#8-%ue(v#c&01.ăU"u(e,80W_j'(:_SDDxhO*K#sUi)(ob51ho,I8[QwMd-T4SVFNQhQRpl]YAl&Q6S[ăU"'hS1tW9]1m?0^U_fS)9wN*))(CiibU,bt*ced?e';shasPE&O*S&r?]\H85DKLkăU"l9*QT)y>fl(k%m&31QI)O/PL0qq5l[(Mi8e[u0ogs\>:8P5q-9i:YsQoW%kI=4OăU"U^DsW,W;kd0T6_%iB$>kg5g'viK>LZ7x3tA%i=-9bEu95*XTx8aYWh4*EbZj%m)ăU"fE-%r(^7,55.;gOE7.%.ke+/%e0]5e1E7e2Uep2+99a#2o4*3/ha+AY&.Z\3kQmăU"'Oq8.%qR[kw5FLqRUD5%mn)h]YeAE9:Ame-[LfD]ufEE%e(=g%GQgH%agIq.gJ+ăU"g(K+gCAk_5SmWN<-=<Q-AQawPe#X'I/;QQdW,DtTVhbRFLAhj0i(88gYFq<YK+găU"Nxh(\Kh]#qg*g7h_%h+$5ha]EhbU7hcMhX[u1<.H^M(j\$J)#P)'AcT;SU])3H4ăU"[6$Y$&OZhm7<eah+p5ipfuhx<7isei+tEh,%-jvA%jwQj%xajy%qjzimjr50Fn\ăU"[>R8&<:?)QL&=DQ8Hs5.l3$6h()mf8<^WQhaG#9g%S#,]k3Iqk4+1k5;kV63?%FăU")=zk:k9%k&:9j.fAk<U:k=ekG>uk?+)#,A(lAQlMBkO7KE[$:r6z487rP:DR=''ăU"*/QLW'Xcl+DF0,5RB/G(wOfqRBBw1mP.AmQar#C=.SQAA?J+mU;:m>-%DW[mXekăU"mY%gmZsAF0Am\fUm]epm^]AYR5.KOP2.R**N$bosg/#9LUxG/R%:(7F$-i_:ceaăU";R^5nGkEnlQMA_;<,lunG^5mpjACpM(%raoAsqotk+CtU1%vKoDw[oxJkoySiCmăU"c-9:868dm&d<'4B5]FR]gJ%i\3pFZZU]%VYXeEqRaw4o0KpW1SDzq;O1%4p43oZăU"5EDtom%7e=p8up]91q79u%;Q+q<aq]=qq>G+E4g0DJZ%O/)O'tK*_47$P4j9fp:ăU":A3nU3g(%bB5ljRc8/qKQjrL3E\marwrN+F;R9qPK+r79&$RkrSo%rT%9F6ArcVăU"UrWoerXu=rY]rB#yWyHT0;JN*cZParL&r7oigxm[km)7zhDi\(9cI7(7AscfUsgăU"oeshuasi1Hoeq#Y7Qtla?HX5rEn+t(RY&pK4tq[t0rYP8nwtt5=tuEtcvUtw?UHăU"Zi=VOTZZc\C06\-O#I]bbQ+:]TDR(W-+73jJ((9gu/]&u067u1Fu+2Vu0uv<wu[ăU"u52J(5lt7&lt:]%v9rvU:,JnA7v<L.v=\v+>vt,e_%'e,O;0[WQr*eSjl(*7u3lăU"U%VPYi':($=%/Irw(J,wK&<wL:,Yrxw:>lww+O&w<\,vQ><KtQw1S,Y#'rwU2[xăU"V:LgAhYZ=1=B1j[pY6<Lj#v'dX3(B<fPc6])R_[MxaF7xbVx=cfLW]6\d>'LVByăU"7gRMSdbyta.6j,y)G8ylALym\1yHhy)H#qKj#2Lt4[Csj^-*aS[8Z:ef,dr2\f9ăU"V]&g(or.zz,zD%<z&JLz't0Mmlz;)tNju6N%)p<,NNHHbz.fvz/N^<0BOaI*yAaăU"9=)T=yD%Vcw4Ux'lXepIZEBR_iP(Ji2%;F2%<T0P1f%>3v%?2EP0*%SARP-fVzCăU".JPB)&2EtZCMI&G\V&H6ZLDy&J3vpzA#n3m%a9w5/ZdT3+cm31D'6yp(*Z?(\IeăU"BT,M'U<'MVL'TN6&XlV'Y&'LCg&[EF'L8)&]zK&^J=G1/($B2($<KJbb(cjZRmEăU":\>tZmBJ/u'dvIMf(M':&R$ZF%23Z]UGmf(Pnv(o12)pBG);m(Jrb)sLZ(a,D)uăU"Jq&^zKRhX)xNL77y)Yz6SyndB&Vt)'fST&2B<bz-)<d_rR(+(Ngbhz(h<HRW]R^ăU"W7=1V\*2lY*3&*l46*5qt*(VY*7f*jG9)9U2+=g,);J\dU^+=JDG9)P+?<+$?TGăU"AV\+BlP+Ct[AC1uzc4-:A#Y?u&9roBRB4l%+:\e:BHwLb,fMr,NV,,O<P,PL,iLăU"t+RVl,CDY+T6,dVn+Vnt%WfY,Xv,fY2-Z:B-[Rb-\BW8%QGflm04>#W/xQWId2DăEND SUBăSUB V2ăU"p_-c&Y-d6-leF-frV-gfY-hv-Ee4hef>vfFs_(m-9$r/:'eWR%P.pL.iq\.ra2WăU"E%/.1s%g&g.[T^fEDE6cP*Yet-hZ>*lqSQNI..)s/*t-YX.J.,M/p-u9r4xWMXmăU"n$<;.t$Qa]L1+gS/4w/:5mX-;U/N8$2=HXt(%+q-3>R.J0<M01=]0>_m0?'S0#7ăU"04AG0B$W0CgS0Dw0.E31F(C1GSA1Hc1dIs1gB&%K=e1LMwJ1M]1LNM1qa9CN7n1ăU"Q7[6Z&1S3g1X)[oU3\,l=%W(S2Xc\2Ys\+YG%[D=2\M82]G%o6iC0]]%$79\$g%ăU"=bW\3?qD<)#&e+Pm5=]R?MFeQeP7?H0siP9%m&:%I/;7P^?p/'_oP?)AP#ua^BIăU"0/B1&#w.&?g&(>W&=AG&<7I&;'P.8rP.'&t8eo]7AG<UkFf+C]e++&<)q+cg%ZiăU"g4.?AO]35J0C50Mm22u524[oLa-55Q/\,M/5bUrZ>5^*l'^)/?FV]s_'UttGkIkăU"Ef]lU]&qm/A,p]>%SZpG3f3]l9d-'HMsgan3cl[XPnO2RYnQRwI8QQ9'7PUYMDGăU"QK'&QI]'%HE'F^-QDi8PCQ&+BA&A*i3u;B^vS4Rxc^oBY.9<n3/.HTpi]2k=C3/ăU"ED5C8Ga_%7Cc8cU%rdSrM9=8:qM8nmlFgS^Y<__=5uI>+i$?U]Lme3AjS$yAVYBăU"/3u-I]43YZE;p'UJ;ja\[(aH.BtmXyt*75P-_]QLbA]caUK(_?.\)'RYU#(W-R+ăU"TY'RHY$NW.'M?'IKuQP([QG=DQR+QPSgPZP<aVUiaWeaMyWYu(mY;MEb$k8N;M5ăU"dSErO;b8>+];f=e5&/t6%lGhsbqi]Hul-IkOWbl_8YsqbAnu/%Y>Yw'eo$p?]GLăU"B&F(blF'SQEQattOYD3Y[Iab\T$13wi9Z27RTpB-eESLhgcRAq)ogVS#rW/_USfăU"^%ScIJR$oR(]?([(-:W5SRTaQ4RAQPAw'O_#'M%7.K57IaEaGqZT2':W45aU>EaăU"-U>Z<gpoOYE>D]>fEP;#U;oRYHi2s;iKsvv=IuEOeFl_boa5;Hm/MzGfpu/]K?oăU"]qO]eD+qNV=<P=P[AggrE_fJng'Na<+CdVbitUHsIKDt)R8p)1kGSn$)SqiF3iUăU"T.xeTy)W#y]R*3j_2\wSm(%XhESSeiRjb9R'DUR['MRig=FUi'K6?gMsZwdgEhQăU"OEdriUdj5edqre7D_h29u>R<0>Si+tjI&<vue7c^H1vA>%4?.&D?'3($vU$iokiăU"%)L7+\>0Kj+F6E=rOei=$qa/0?iFi19JuI2qN\Ra%VV%X+zlq=1qcUx#$8l#4pIăU"SsC%^xW7?lC*P,QT,0I*9n1O(G*&%m*x^=TtY.)qw)%n%.i^EXdY1(dW6dF,:0$ăU"FXH0Zg,7Q^Jf'.\M'Lx/=MV1jHYAm-EFTd]]U<l(7ttW^TBXH[w<rK/r=6TD<B\ăU"N;Bpw/-K'<H)8?,tofM:ldad[>;G[TVAbd,\(1^8_o:8TAD\5pCD9\nU\B]iwS'ăU")eo8SpQ)jtYcj\O*v2)i.5+A]_+3.m+RlMU,IW6>*e1]2-uaR)5jW.kuSBL4S%6ăU"2=eW(8g%dGCDRUwtD,W$Ke[/,_>ALq$k24l;3&]4BVuX>B]QjBSmuK7Pfo8F8YWăU"V6LDXf;G.iHpWlM*ZSO&p?:tqRF8FW211Y(beRd2No^8J+9abR2Xm%WV/&9GHe3ăU"XMCp*BFt%I4y'TBk=:-7%+&nVU4inD7g+9M7J9gL+8WU#7w+3IeA.'MkXwWUvNqăU"W+\g8>8SC8s1HTD\g=Ai)DXkE:4TaQIf#'+(hQd&oVeFrfMVH6NTJJ&HPj8Hk9PăU"6wC0b6G6I7^6?]Iv7M[KBM2;B_>7Gyf7V_PgW*#=Z&mBKMCwW#bS'd>Uzs5R&h^ăU"r19_Y5R-R9BdM?K)fCu=4*j7*GN8*,Ba*x#Y^x:UOq[U=fi+>aDU=-k_5p+;hP_ăU"0q:*-A*):H*2%N*vM-n7,.##q6bC5K$WL6\V=k]0XbHwqT'nK3&u;>]r8(*W:'IăU",730?iY:;#/<OCQZipZ[<7L7;O0jG&[=?\ZCaa#.+m_YUk]%0NKs\cpN>)5GP\JăU"]dAWBatw2\_#3C_JuimZl%,uEgAR)61,CA5G(iYUZ>1]A6.ImaI4v+3.#8Kri:]ăU"Hk)4owcMCwuup=w>C:UQ'+7QR;tZefT/;\W>h?BE>Y8lO)8l1+]k^tDgYJ-<#4EăU"(fS1F=w=av.IoeWG#k9Y]MNz&Y/J3tDz&U1E#cZZj[F)/Y<W9T7#l'AreA]?nX0ăU"p&ej[;NJsb2eZEQ).W5ANa*nYzOCxreDiSSxK.Im]=#J_y7CuodLZo]:25VGk]YăU"?U-0&rK2?UX4Awt7hw6:/Qk*XG%HQ1FMW5RNw=G/#HOC/L9am1IdCwm2O&M\apUăU"F%ixr_3YcbsXaiMR[tc%n&Rue5+zMvm4NNcx#unjdL7%0t1:&,fC&e92DdD;)>:ăU"*^;V+AJ4Ew&>GEbtk.G=56VCAC1%fQCLuL6W1[7^+RI2d/qn1LnWwd/Oi:^WZR2ăU"9m'EUo?I<EFXLyRV\9YW^h]^a;srG_5#?xs4_$ghS]]08\B2ZJ+],1Wo>-lDFS1ăU"9FJ+Ov_C7YLk)3AnJSam#W(GV=geWEOqf:,FW0NVVA>?5Z+U#:Q&pDMrbfp5NvEăU"rf6O7A.Q6AP*?W%Eo/W3QoR4%kMFsL:)G0/U#A]%9vk.&PywH=;ZMxLvl'dhY(<ăU"^gi&.:.];(zDkDj)Y;.ne:<#Fz[<>b_DdU?KBr*,$dk7e#(CV&70AETABK=H]%eăU"GnJVf3+XgLo[wGQ^Oj)#h0T'8-x1+WD]8R2ZP7H<F\:*/x3$?f1l3daFVun]$f%ăU"\b3_^/[8]\iT/2FFYIYr9EV=%KLppVN+qYq;qKKA(KeuG3bCYE_AxER6n:VCkHUăU"0#qvA-)<cM&olmcN*\9YP&6.G/EFn1Kwno24;6mKR5dk]p)u<omLJUBIg;;WFS:ăU"j1-wdrj<.pQ1dN;Z0>]Fj0Yu$.e;\VE$\+:$udH-4g/.]hAkSAPlCU(Nh=FTsK[ăU"g*8am[IJLnSCWYNw.I1ZQu.Y+Dhf0]rS[YN'iU\i^;kbG_Hf58^=alIhmtb>L^XăU"^aj99xk_6aU8#s\Rw9KeLoQ:/vDR6-=AA3HtW'/YLjaC/,I^jY+WJDU+<WGuTZLăU"XZO)9WFDP-_RLE'h3f<oNR8z<F8TOC.F14m(h#h;<Ve>QYtUf(mJWJWEqE::J,PăU"*PR8005S3*-S1p+=F0P<CI1+Cx0d2daU/_'2^-EbFn_W0w$X3j2M.fN/(5zK4whăU"vh&ASqX37&gUihO?Sl8F#18V9g]_3GG=hG?o1#b'iFjNcW<CnnolkW50+Caoh#JăU"\2bnK(Vk/q1s<2)>UQ1ZY2llq9)r/9LRY6-pkdhKbf4suwo)ZsBr9:/3YdQ?uVzăU",jy8&Xr:^%RJ%R&;IOsfwbI&Vey\#+[5)1u$%)1xCd:frR*S^7++F,113K3gR?VăU"uP2?9XH5%z8,fs0/$O&,I$5uTbKQA7[;Hh##Y'Wq9,)b/[K/waT):(Wd*R;jH3QăU"f;O>FOU5hICi3VtRB.p1-bNeP^K]ahDtcq_\n/$4KyrjGjIu[B3AA\bvR4\Eo>7ăU"V+N0/,=9;N)'2qKU=Yn&X4wh)b]B6h0l_U^4N-KEXQ=C%[hC7J$8q_.%>(eP2B<ăU"=I.yoW;kT0p*c\O7\kE**,4:03e]QqUXE1Mad*4AZRR^K$K\CFUG%'&T9iwZQ*$ăU"t^d#Qn5RHI^1J]rToQ.u8d&Hw>UDfA/&=n1;.i+q<gH^KXfl=qSaku?A*40WV#CăU"3nW1cHo:4M$mrDwg]:(rf*4#[o<C_Meq_k0gW>K*PlHg(DoU&[FW_GJ?+1$OZkrăU"?nf>V7]+(aGstQIvj;>pwhaI)'1CmX;ZMq_[sf+U90#+_U)45EsK4fCq;PH^bo1ăU"I+(sfCfd+WMt^auD2In+]AjSLmbZt3^C)T>+s-5>UQ^G=?Z(m1q1C\Bu)wXhhttăU"+USh2OIBUQG)[3uZ;i&vkO]QS]ZWvGzBS1P(lvj^jVaF57$^V]DpN^^*FH'O2M(ăU",HR0PV-4U<7U-mP'T?C\QT]i\rrw#g<?bT#_mp_<B#*pK9RDnMM,E]SQxiE_(qIăU"imrkU(oZk/PeLq%c.Y_UmopRKH>6;uXH-D;TPzT&l;Zu+AsJ0F6DLJN??09:K'TăU"XI=.KZUGxDZ5:xdrh2.Ox=3L4UXDy9V[$.uAa[uGa]Cf^LAsX5^6qAHvJk^.a,aăU"Cl]$+;Hv3M#Or4QRYbKPfjjGKw'6LB&j?.V$.:MoH8FB4iIK*rRVW]K9(K*e4<[ăU"9\Zc=;U6UOSon+SIP-1Qm5KJUVIm]bIq:c%n&oNp1>U?N*o>bkJV^+RUa[U;0F^ăU">h[,>BxKZvM?n\*)2x(z+p-3EwmU;l^wx5$)2_on;Hf0>TQV(1WN(9BoG+g\%R=ăU"Z&s'X5.>V\WFY^8Gf0D9gBv*P<d]o_m4t0R>UmSN7XZPq:=J^*Cb<fZc8'v8,=uăU"Cd=2U/dI(?=Q3/7RB'5eokl1,Xg\wlx=6a%[[N<tTCS'IV0?N'Ok2X:ZN7t>;rWăU"LtL3am*.Ro^oT;QKMEOk#_3um,?0sQ0(5S[uHF3MO01/8dVVMDWH/,c0;:F#:WTăU"W.Ai2E,rQn[BLZwBFifg(9CyO,V(x&Cik9hDHpiWgRtK_dlbb4[S=+2ZgV[/-WRăU"[0OnBQg2i,Ka[MJN=so64AYeKPzIHug\qsTwrRL-)gbnr:b:CTWf=Jhycr=)*1EăU"gc1X<#[1:&-^>dbax6iG2,sM(jQ^OLgxV+]XIhU>.#(:A;zKO$-O=K_sv)LBY+PăU"E<0cxBVH]a7RK$cVU#YOKCNe]Ri<UD/[c6B4jsS6pxi)EI,uFW1WkXECFS\ZeY*ăU"n3Ah<d+p*Z3f4=-ug1:8<YOHT^;BZV9E,k?n0UVLnFPzjm-F#=$YmCjH7v/fK#;ăU"1]<p>jkA>tikV$$[fl797>?5>iSiaAThky\U-^R=G=I;_^';He'&#6:UD4QvXICăU"M_m4NEkOaQNVnS_Wv)])2hdrnk*>emZ/<]>M#JCX(xc&Hz9jX#hr-uhr<.Q.N*<ăU"av0>X7<z<Y4i<,RARWERsV=L2_H,R%TTb^f%O))%%%$up%()9%%%%-%(P&pJo%QăU"1G&).%%%FB%%%,%%%.wf(S[gfxf5(d>#R\7x=u9x<9Cs:Nehc,xkCZL=D[AJ6GfăU".A(2;-O<&NMYa']hPIPukc(8C>AD+3B=Lj%dKZOlgE?_#\twzqbZb^ZNqvVKRR[ăU"6Yrb>;-u(6qITcF6rLZDJs9?Piu*t_[MEKHG>?;4678Fu%\Q2,81meYjdTmIRFBăU"k[KV][F5HLD9f;y62V6PAMjHk(u7GKr6TtKh%hDll2_qON,.LuONIEF0NsiKo4?ăU"+f+A<aQY7?<)5pATqb'R=I[9'8hMU9.8[uiUey&_0[aU)ADn*j9.-O59)U]0%wDăU"NCWWB^wJ%Bg6DiG^;Z1]iJ&uYOx#GohRAp#UtV\oNU#e>Qh%)PG$H9[*SaAZE-FăU"YLqZ.Ikb^c>dF^B*7-Z)Tzi/*6]_mcO]VcB/=_O7&h&Vd-YSTlh&0[VYG^;dj&ZăU"T.+0T9q92C[Lthqd=q+N?1yY1;t*)_:2lQ4G:V/]/#4-G)fMKs1%Xf+W<B#Sl\EăU"m#(3np$I#r8jP:q[n]&$60F3[IlQ1E(%vXjE]sF2PK$M7JmrdJ;5a.A^Snea'dLăU"dKC3Kaiap?4;]L%Kup5Q_wIK&;F#+f%iL/y2Wz%;^xo*_49vjLSgcXR4m=hKedVăU"y#2o:$jb_C)s,mP[nC[#lfaHEUE.^u='G\wQ4O7Zu^'V^z7)<)n;F:b[xRv>'g<ăU"B>ADpu$]jC',e.mY4O*iqa#Q)/Y-qMu[^#&]&2j;[x#eFklUv/o-<Zdw%>Od./]ăU"<mUhi?20Wa*74N9&C0RQ3AihM%):<7<CPpV9oaYrK<Ak'XVz;K<(n$X&).378ktăU"rRG.I\De6_N,(;$),*gkf9CL%oqpbT[A=/ay(xYud%?g,)q#)Jo7Oj'miMt0+2WăU"Iu8q5mgg/%R8OB3?9T?M25bTOX&\>iInx%a0,*=4d=Gq[Go&#eQT]>s]I=)Lg):ăU"*lay(&#15bQ%520o]HQk9#0EJSnMaeikJUH+YSqA#X[N+Y1&o'F1)c)$f397&z)ăU"9&-uB<gQfO',rB?TD5O(>cnXP<,:PRVo;o9hbmb^4u<8VPWQYYjoY0.-Q4wI<*WăU"^0-T_QtTjB6dBjtP_cQaB(-vNRN\ao$E,oM/Lo_Zw(\#.kIf?AUf[P9'DWjQpbEăU"753_FGexTFcX[_;),amaa9>OR5lK_IBZ;tv5j-_DnkP;>PoCaC5BxkYZ_=-%m5RăU"9AI?v6hJ<B0ewZn'+pSOTk.Vy<:WQ(kup*qPhslKQ46k]=kPY4.34ccjks;u*d7ăU"o*0<Z3N8sQ]=lQ<RB8v>5cct7(16fV3/j4Xo)a,,.mkV<avo3hmx<9FHF;+^wbBăU"<,g#%7Vqr(vGY;B_g$5l3wh*K]4.b[Y5H0F1HU-mHBiHbo?eTEB,1*esHxpkOkwăU"f+:m0g;]SUJ\;NQ]:1kQunZRXLY%m+xU;y<iMN^nX,sV1gXC(miQ/q<sBQl/>KDăU"gH8sF.ZMOwkQa2&c<foR[pXVMk/YYv/\g*vKz/m_CSHt,G/Y/;#k8._fC'0DIs8ăU"As=+_N>)S5nk-&U%Nk)x4+1+WU6edq3mY_$I)#AV0)RE9mjnD0\bB2nusMs2Pr)ăU"-*kM7r8q-*w/*/6cs9:LXZq&IhiR\HF]/5K&AXy3_adDC[X=fD>ZZmSi.Taxk9păU"],ipEB*InO:]nwI0bgLL=,fpBed(Y)Y7-c^3t0xnGACi.vIR/*BF$ea+H%+[18xăU"iC-p[DP]:77TkrHmEEbQ-Lu>z_ZFf28eZ-F$fXEQgVo>pd)t3\G<TsbA?CZ.P83ăU"3\GqlyE$3N3A(kn'6\:PZ\A(agq#QTi^57LTD;LRd_\G\+HE3HGBb[WLw+bS[GaăU"jApTSM32yfmKy0'EZint[$A_5c5_vRfsS>4I\))dO2Enh:?dWBc;O5Spr'NKEfNăU",(i.KS8u&rFr[vC^FE/D>\DMD>\IkZHFB$ehr.WB&_NiSE4o?fb>L8echC.tPNJăU"8Qc,#-s#yILkQI/1KwLAVgzm<HQK=d0So8S4S1'g?<(Oi^-*SQ9C>z2A$^YV6poăU"$rosdL*qlBC;:pFBFsJ(YTwqPA6,o#RN[tWT6_)aYA3E2(9E20teaNvh+-+/rGrăU"NbvfNFhx^s.2eh&+[&H2-WJJ_<v08VS=0oB[9E,T\Sl)z;FM/Ay5n2g3a9W0)&măU"m4TdlH6X[,0RLipaikp35F-ZnV)7qxkO_wmni7$-V:&?-q/kQf.sZ[otH)LP1(YăU";Z9D$]7->Rq$fCq2GMj:x8f>k4rtmP'1-2DZ*O[%h*efnD_=4p(\-&Kq^o#o>F<ăU"$I%ZE<-o&_Rx-h3,q*d_dzxa7ddeMFz0n(G't_.agHRiSIv$yV.d^2]Boh3+Th:ăU"[_kSn9ca4_L0IBIB6Xdk6hIJlV'4r2B,-lKjjn&HFJ*9\y*vszKBCQzIeF-DWmAăU"yNK#bsA3cNk6wH/_\]nrk:gjD<D2:[z.v3%NE-Qx8t)d(O&'dhZs61G=oOM&\*LăU"597-yMPK()/7KrIQ$Fcc?]&vwN*+5Y^<4r\8ylxlj0=4JhkUlD?nCRjOEGl$2)%ăU"wH*e*r=J$fJv9mP4zAB_mYXK%%&.W3mg5u/).K2eiL_-h]&pZlOkbN\q']wCBGeăU"Rd;qWk;xrJUDGlV0vx3c4L2YDxEdT?ZLVcZqSf.l4v:0ixt=(=A72B<FonecOuXăU"(4hXGt6F>xxogQ$:QqsnrTHTYv\B]_+GyXt548qa.Bv(og<05m3htIL?QVpE>gkăU"rj<bRTPlFveftM%u?vN*0ARScHBAo8\6qZfA5*nJX772gMu<YV#7LL2f&>itKIPăU"*OK&]Wi$-tt:w/1cY,<qk?r0s)qDX>Y.HI>ikgI[c_L1uI3/EON6?kwZU35iiU]ăU"[V-c^I+uv0jT9R,qC&&\xym-lHwjZgwSQk]^Al.Anx:[&D[_NqPbL:*ZW2R5FasăU"+$XJ_^V,=&p)u?W3om#u2$Lf-qsbA[BDDpM]^^M.)H'P%qY0F;ZT/dXcIh<tsI7ăU"nkw=Y00:$AMD%M*zFIRbf5;>\>Fm2YVS]fQSVR/a.I.--(8ZdOKe^M(x%(up&%'ăU"9%/%%%%%4%(dG=JOj5'*?\%%%?\%%%/%%%%%%%%%%%E%%%%%%%%%x%fruq%jSlnăU"%kup&%'9%9%%%%-.%P&paJ%Q1*G).%%%FB%%%,%%%%%%%%%&%E%%%%g%\%%w(f(ăU"Sg%fxup%*+%%%%%'%.'%<%7%%:e%%%%%ăEND SUBăV2ăCLOSE:IF S=0AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  ROTATING & ZOOMING PICTURE     ia53@rapid.co.uk               09-30-98 (22:23)       QB, QBasic, PDS        199  13192    ROTOZOOM.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ROTOZOOM.ZIP",4^6:Z&=9634:?STRING$(50,177);ăU"%up()%9%%%#-%BsmcJec69(u&%%%%2%%%*%%%%VS[rfuFoMf+%[U-*I<rzcb/3.ăU"$ku=n(eB$G>Wja[jvCfy]%e)8a7u&n_\ZllXPhj^FI.9_p<C[I,#Y;])q+)n.nIăU"F3-Q%k4mH<%Wqw./SPz,r1h(-1Pu,+$7yg7HuUFm&$N9Qu*v,/-fI/PEYxPcPI-ăU"%.?x9A2c0v.GDA?2-^SHU9^.GECbT]CY\*kb:o/7fsK-9OBt(A?7u)PeDn4e.T:ăU"GYUrjuJFa-rH1A<;&VaQ:NMkpVp(k/xIY/s.-gIKIT-')-MV139Op>k]I./M2Z%ăU"GKi3\S_/oDd%6/Q%M*lm%)(?enL.5O/o8kgCow(>%'5MtMK8Qfe_.hIa/UBq(VOăU"5o998+)63<E$9w-45j6sOV/PJE$co/FK%Om)lpmSQ*$(0LV4-B6]1MTe5]#f3G/ăU"obTi*iOkE?ngI.E7OALE[s.,%'2f)Gkk+20D8A&b#t$%la5UfMAO:7B9k6rL$%;ăU"a#gSEq*(vb(0n-]5SOpaSU+K#aO5dFoB1hwWJRX?FG'j%IZ9U'$7hLm'?K89suFăU"#$$%Dup(%)9%%#%-%]\scJ1X59Oy%0%%%%5%%*%%%%V#Swf&2d&Hu3T6I;.gW'măU"NaeSS$=p0I;LqtgEp\sC%EII&F[_;/&;1+1N?/;;0\#nIaKQs[n_]*6lB?Ewt70ăU"4jtI/j-JlrFu6,L;$KTs^hP5k6TB*.ciV=m8Ml8hv$uvm6#-l7D&/VfrV+-9K/EăU"=blAdf*^#C<Yu7mQ+iL'QfNL,e^R9,>&ulDuBnvtWDZKBYmYE6$?)v6:x<&%&M)ăU"'c06lhYMwZd0R34RI(/Tr4Ui\Z7oFYTgip6fEW&4>+BT8vO9fOcRGV1\=zIo2eMăU"7e:slXuf9,llr'*qeNpQN:x&Zfnt6uwVdkLp;gN;TTR_-bvisXrcQWYbhnuvoZ<ăU";.M/WnbWans'MH[n*bJbo4\G66p^bdSM_Oqgy9Cq>n>P>lmChjroFgu6kdZBM\qăU"Ids3t,qBn7cbTN>4E?vc;Ct^2WaIuyRO'(,D-&UeF$uWC(ZTMy[Gi:Zv$2VaPk>ăU":A&5/1V?-5G4XB-i+O+MdQK*(q#'C/ZsptpR[pp5D#2sSbr#3Uyb*t'TQ96cc][ăU"42eXKH#N0et(OlkFo[_Lfbh/[40JB[=At7cjFs?e-)=&%Set\E^QK3Yq-PaE=q]ăU"+$oI]RUUCq:I7n#*\bJe+R-7R8OzEZpTB-1)=LIB]hBIUo-t(<pNqA]e;7Y=k4KăU"Ib6VvsN64<*dA^QL+dS,Rr;P$XeHHWCPzwF/D$96Q(IZ#<N;*gB&.s^RkR?)b\(ăU"^L/e/U[NYBhc2ubbvAH2)OtY>fS3s9]f[Jt$r'=R_=Xp\BCgKj<_7w[&:4z*t_,ăU"zTDnPsTFD\37FPlk\^\[7?>U_##m>H^,v45Qr4\)lkt4(&^sQL9^S<8Y+4L-U*]ăU"^da;0I:*9,$:58fC%A>>CWQbf*6vagr7yp_JS^*B4SdZIl-+Z>?C9T,q)a%f2;DăU"sN5JA]i]WVIhRtNqoJbwXIJiRL$OcWvxLIXx2JSJk'n?eIBICQhn]s*;CenCUL?ăU"d&&0Q,i'8kU+TSt0MYHXBd4c,lxvnxQj:Kq=NIY/U[Ffne(]MuZKst&[;SDR=8+ăU"cIR/z.QV^&$y*JG3&dw)2$4ShvFOvNP_m\?5lZq08IcsHduutNW';7ZL>,7FrSpăU"QlrirTvpPQ'6JCZ16Bt^FhAh++=w6YkHMX/X-sJ)HQ+'7gO^kr&Ho,XLxj>tNqtăU"8u4TLQ'UB._='R6X,Z$SduvHhgD+.cNDK1EjmVUr*^-&u>KDJ,9i,X)E0,?$eA/ăU"6juZ%0X'$xzdxNb&.MsY_IqK4WMJqo<hmZ[RN.jd2Fj?ERL,0S8vS8\je'^(r'VăU"R\bed0MuzE&C&(*INOxcUn4JdqjnU8?n:SwNKu#5E+=p2q5?caNBz.KukG[[qxtăU"JM?mv#HA\[0xa)YCr3iuTf*[B^:#Z9QY#k:mgZKI>:aPP;$aTe0T5D/3wqpF/mYăU"]GEnk)8Dvu;KKBZZOL:H$u2u^u4.=?P/ItN0CD6'\KhJCdfpVdRwppNQxtTbRvXăU"f>M4J95<YzqYpoUPVxhDzKPSl,PiTdik.Q4K*R219$U3ZIi5bb<NboYri8?EM9FăU"xQzisXh<bbt,+V-^F=&>5/ZIKts2h/3Cec=^p$Y53+Xe$((8fR:4Z46?sXXb03MăU"(M5<v=I$hB/38:ynEvTwiJ$p7PS)%sQKDg1G\RBY</Co4m32opPC/tqZZWogUX1ăU"[cQj'n7r4E\g)&VHs[Ccb7\&'R?DACgDLtNN>Pf.-:<nUMYtpS]inTHZMugGGV3ăU"fh3Qla*J&1OrUr3gKGSqB5r:V6f$usgSvvA))%'dwN5O&i___9;;4T_i9WkQQr9ăU"A+[s#bEJ3Od&Wj'C_z-FYO$M;EFY[X[YLser\dL04%#<l9#UU=Q855B17jIc1.kăU"w<vc0#HYHD.kjE<0ZJ5Q:OTmTPs5^WhRk1?yi3\2Tdvu\XU4-[p+k-4FM=0-9T&ăU"i^D$B'K$?(M-.wx=N%_oK]?l-hvej&5%,#hAU)3vJ-yTyLJdq=PMjV>3'FjQ2]'ăU"+tB?Evw#g%5Q(G_)OArP5X7L7FV(<nP5%nIG3jt'_Do=g/MT^WC92#Ttiu-u]tMăU"F%)LD%bieS7zZ#?)$c+[OK.-lO?u_my_VS774d^.Y_bnsJLccb9d1ZM5JRk+hGtăU")d$otb&Lh6jp:h:jLr(8_&fO)IG?N[Nf-JlF_5)8JbODI'T&O#/?a%sh[PLl,\AăU";*/*R7zoE((m2')2pK/5>;p':VZ/ap\+8LRj=Xa*V;&MS**Tq4AL0.dD83:>XIrăU"oNT\,Awy[ZcD+1*2z/*oC1cD'a]5TV,agaY+$ND42H<I>\fsf<oDx,tjznYsDfiăU"4yA2yxhFA*ac^6&E:jTr[^_jZ,?gL)BpZgX7InIGKa(UxiZf^-?*TON9$OOB*IUăU"psK':G\VDibvcu6QBK<o7AAooe#r]3T6:p_BV+k5K.Sz&X'&m%1gN9o*rkD/7AtăU"b6WRl'2;RzRh0CvtptKu4$8-a)hNC.IY0KOBY8quG5U#2u6AfB9P]&Cu3o]I[QXăU"CzXcr,nn^?TJ/?tq4PplF0p%22lAM5l+'Rx3DJ#2'RH$.2;J5s/ozcuu^QY4\IoăU"2OAmy3$]FA1aH3M>jWVXg5Egn7o.47-nO&3k['5N^cFnf'ZZ^6V.%1RmK[rtNHmăU"(luddUNZRVdD)'\?^hnPN6cP7-PssQG$#bv7=POhOphpO13r34vG3Kt:8gb,,V^ăU".vXXmbZK3lkPIf<dol.'9'-/(+UHn*4=cAicg,cQfg=EY=9KoT]z:NV1QFR1u\PăU"9(h#m)&$osscnrh&f6cnD<Z?2b5-0,LGu6^;35YAA^/]K;gnC]IhnYS[Zj%B1K.ăU"^+-SNMM7n$VJx%4D%P&TgF)g_&yoN?K$3/zt6UP)e=.c12J[dyW$T0Vs174pX1'ăU"5['3p'.KlG[6q)nt9&7:$[710G3\3H4c-*Jq%B_GENh=60$#K-A$Nwjkl7/Q?E(ăU"P?dY?lJB_3irsf,q#\(.-8QlvbFr_ASchf&U;'&T:AJHh-B5rjGm7JwczUo\:;băU"FRRk+Dxc5Z]wnNlvD\jl%6k)T2wja+4;uz07KNMJemuaC.vmqXuMDcUOD6W>PVSăU"(s1fx>$hMXT6WMOLV;yG%h5O#f=<GEBiSb7Fk3Kx_;WU#:6kRDZtd=K&.'*d5o?ăU"DU8bml$dTJ]azB#,$>bN*Y/YKxG\odltLXRJu>%=:9Gu+a#UgTO_1PR0>.7A1TMăU"O-eZlUZ%.WGcp4wZdc#LsPXud3Pz&SkmF<iO#]hkO36<ZVQa+iZQ:LZ'<vC/GPRăU"Ap%P7C238]P)p9ut+qB^w$Z887LbMbiwp'c$DSu(%YA&/+)l?Bs;(;0^'VTGgK,ăU":#imIvlzy8S9],hu*^8lxZz^=H,,X9\F(z1P8aW>-12-9/>iG4IDq:V%0Ij(J<AăU"c3w$nj#K7n4L%e</?fWLLNDJV^%TCd=J#=dK5p)9X'k:r;P-nBh.QMS6WBGeu/eăU"E*KgchaMCv_=KD(#vLuh.NN^8<,PZh'X)lF^d(9''.Nu&iol]_/GZpzV$:42pk8ăU":rSry(Ie%(meA\LsHRrHl85Ft8lP\N(Nv?,HR%#yU\]XXQ96#4ZYTUEgskS&;TrăU"ju(%_6ssYpXvNFF^%^SlDUD4o7o%T=IFI>)S1?WYPO,s%oV+CHQjP<UCZR1SHprăU"T^xbZ:SCTl*6Jq5*+&oB<hFtA>;VTM&&P0*)g))=?4j6GzMt-k)tG^uQU9gf/InăU"3&Dpg8])mYqY\l<:<bH^e]96MED5G5QWGhp&P]f\T'lxd*t^XC6q17BTCYgw,-wăU"8up%()9%%%%-%,%*cJ%Ejtl'N%%%%%2%%%*%%%%WSrf=ufNf,]>E-=+YvpJI,^OăU"maobr7t[ukP.W'h3)j\0I8d2)#ioppUwYrof\zYu>TCXunVaYt2hA_5$OP<wi;jăU"BI7>+qi#M,.04PY/LE$o6cD_1e5Rm3/S#tS3p+NQ-,;H=I&cB:GU(aoXYSRo-Q*ăU"X6Jf0FR0NK-';_#>?&&,h:LA*d_&pj&2J[)3Vke)$6EpMGItLJmPkk)REMr4e>6ăU"E[Fk]7ZSi_];ZBI&0HMYa>O%Yt2yF:\3a17KsY3^?u???????8(H8bc]'P4up%(ăU")9%%%%-%-l)cJlA[ok&P1%%%%5%%%*%%%%WSwfJ&B&6GJ\mA</Lo+6ff[k[7NvEăU"+I>Af%%IgHSDgG/e_Yi6t,XR8TxD13<jRiuh9CFNSjo,wn<OE)[Uj4nq5NZufjdăU"NvC]vF&QP\-Ntd=D>&5PjVY0Enes4nSFcP#kP.pD9T[$G?/?dT3K8z;n;XtVWatăU"+xn8]hj;^Fj_C&flni]f_sCK\gVdUaaWb.-8V\$^bp=OTt0dw'RCZqSYAci+tf*ăU"tW(NwdU?St-)cvjsASEoAaz=na<KWMDWgj\)/zdlqGbnx650SpB)Ien5qu;M.E\ăU"y_.ABIPUFh6U[6;M^g7dro]co6USuPhdfDHrc*sRO3MHh&QE%V>jiXj=0[luvA'ăU"ZWG*D'QDVJl=^m$/I.Z0_shfekXHDQkJLMa.C4Jv,+7Q3ZrB9U<_)>duxsw\<vIăU"Gs2f&qA3o*Rv*D0CH2gH-?'HydLs\.$$$wCd8-hEBzVeFDt2g&yQicebqmM-VmqăU"++GhA'z4JK>K]2ETnToFQE<QkjhM2/83-[ZSgwH4G3iQZhPtsb_p$\n/6>OIz7lăU"Z;q1_vmzrD-2$R<M&\0\niJctVV.>c2jfOs?N\3Ns$#rMceHE>_VyS1t\8QTlT5ăU"M=RS?em+W1ub/I8Fb#Df&01tN422SL^S[i-URN-w9zjVq(7n^TF$VLV_nuIv?c6ăU",48;R7\-v%M2QC,Lly9fu$Lsdh>NN5-Tk5bN.vZRDAomtn(KGObBJWY=dK9peaxăU"t(0$#d+GMY7QRrzP_qXkqHY^nffZT$brqi)8W9UcHJ-r9u1NQg;eL,s6Hc_,MC%ăU"OWD1n%_o5_WBq*f\V*P_#%y2r69p/]6_.8WvITi[P,npo[U[LhfTs>&#7v;dIjPăU"3ufJG]J0=5#(5H9N&yk'LL^NSk(5qd?tHx04$?CR%1*itnH/gr3IdsROLl0+,>EăU"fGiRGv]J\Pp>>I+Wg>cjLZ08p:EdW7s;L]6X:/3D4k)1vI;SD7hJkIlAoiU4jVxăU"Rq%3pTdV?<53kO;FDxmW2u*SvRs(&%'hQ:r-#2<,5pWnJ(>B-3/'=uku4l+OTUIăU"k,/^_cfp&y[kK#d+3M9Y0'hcGpNS<30qb7]F^t-]m&%I1QL>?vIpq5NxK))*v7găU"'.g$ZLcf^i0^^,;rx+G2ii4$RY/ORr^5,Pj71^d<,$$W=kYJ0mncxTZFV\/OWPHăU"+676-t_>>DX0X>a%<&V6IIQrjGRfGG3*a87%3A#/XmqA_3Y[$2FutTVLVZo=fulăU"nvnU:%xG]&AvS4/k=TsmC_25EP-./YEhs.CXq$m3,^+7R<4YtWDBP2Vpiz5vdtaăU"eltvp60dFKi&FjnjkUYk&-[,EY..oGCSiQQ[0_3*a&___iEBbMb:-vj/#blTLz-ăU"k-r(fPpKaUn>=KDNuJ_z(BuO.(pl&ZK6G*Eg_CYRVsB:RG7Uz_?jgh'kGM4-kZrăU"uI&GUDt*Glbpf,$NyJAqYE)eN?f)Nsq_&o=?I^fphD<-%g5?d2Y,m:)4m&2m8]:ăU"bckvlQohY4V*rKLa'DKW3YuTxIoX#22?QT#c]etAL^U7'&AQ'_(Mi6#cPs^:(;eăU"fPDqf,,Jcc7QPH+O5h&xO+DTUd6;$qtaC&MCg*)W5^FsuF#'L;v8)mJnm6ZC,uKăU"PLDe.rh)6:ACH>sNNteU413wdTG4gx<E3g(B).(O9_c\c)eQYpnqa2_iRxSLq.dăU"Wfe>tlZUi'dSacUnESEQ7=db3]:(^^aAfq.1Q7YgPJ*/p]fUw4Bt=%:(s?^nnaZăU"u^8=R_Tltc5NNw6vTOUjun,80N<Rxnmex;eSX14g>V6LY^\aCO^$#aM54#Mp$DxăU"ouhxjl,7/7y<NA>T:4<R4=]V0$B<RTyHEp]Z.NL-6PaHzS2#EIPDasat;HD&motăU"dZ$W0T)&^qb)\NTINx;U$(aDFv$E=RkM(_YG*l8b%%KV[aL*)d3n/17),tckHdxăU"-mDt\MFaqgl3fVFV)2-eUnchmS)xBPKv07IUA5%YZ;=lRclp05IMsZyr%Y%vZLFăU"FflTX>TTAV)8Xlo<2e:OwAtW&$g&+WGuf7E];sWA\HqbvP0FGHan9=FmuYHs0n-ăU"8UddKVZI%eS.pW1&30Few;YL1kFZB(wSv;i:5-ei;uf0/B=tV)7]j(t9MdnevkNăU"7/k2%fCiH5Q)y[[_CKm:dH\_An1gEQHAsCum,UN:?&niuAnQYD+S?=##-9=B3/yăU"Q1Yt1n4ob?$)>ir)l/3&pdeA\05*pu803(;('JV?hd'C=7qO4/IUQ;ZbDlPd1M[ăU"U??t\I>l8m>%gkjHl[WLFRLp'*j:;foRgPp_R_$QLJcQHnGfe_:%rD$H5TBEp+răU">W7q71oE;tRQ;uluWqHzk,C0)0[%.bd)cvlbe,?_l&h^hj;s.DlN\nadp,-///găU"o3??Rzvk'pyOQw$n#RGl^2OMRvz^x*3kOMA0A)p<#Lgg(nR]Rpx.fpM5*/HQGoWăU"IDeCUKhmcMs3vn>:Q?U2PfHEo=A89I0[A+*9#E(Wc(jhfBKKaXhb22aB/%7SJghăU"T%qPthJNk-5k[#t>3Lcc?>A^-OEiKKQ\r7]r[Q+t,'5urs\#ot,AbVMxQue]A?+ăU"sY[#h'$O+Gf1uf9)ZQt=l<o#k#NGn'1:?OWWJ.OYu[]r#sDxv('%TE,.Q>[HFqBăU"VJF0[Ux7g3RUq3cs*JnIXnV6/#88Db$-gNrVTh>^lJA9L&$9k2O1Lr&$q,O8ikqăU"(S*hW#$t8HO=.Lc)iYH%tz>%qSC2PRDZwNEv?[.$&f'4ZI&'8i3P_DCr&rY1AAbăU"pk2XP-E:,jcC1;B^*GMYBoo?FOPCSHyrN*vJJ1RWQD36L=KQcFC&buZUgF,AP=,ăU"ErcZ<Qpx*O8a[bV\n(WT8.*klZ5u]K,&W4oK=ZWXyG68xHX[dyoOPi/lQj$tg8PăU"0Z&SSu#PsV*WG_#\\lTi5:8.Tp;bbg/w/QETcE9up*#Cn8QgPz6DQO.7i[#QM3SăU"GOnN;l&pE;9)Y%,>9RLo[5-6SAr1x&D3>)&c9QRI?'LJyWxJu0o4&KtG4;[_TIhăU"WX?M)^aGDR4OK0AlMD;KPVlOLEdOQ=HL+^'$F<zhb=5Erpr-8N,Ln2TevTZQ]R9ăU"z/g=aLe_7j3jQRSR+FNZ(4HTEqq=Pf3n$Ja/TK#h7dg<lr<:YY:[)cFeQ7V=TOHăU"tC40_A3%,<Cqx*<Yfq#l*H#EYu.UAc$BE0TIaCt)L^W,Q%1V-;nzjR$/lMZ$rj(ăU"/?%>+nXA<IA^yZ<JZeqkS=YiQBQb_EqJEX:fwhF2qmC$/BDf,QEYoCS<r3Q#PwUăU"VdOQ*<;%e3YrSU1Y^lku'(H.TExf%d=vuS9Tjb%Ss$,rBu,.]k'wDDHWc\G95T;ăU"up\=?MO*&Ah=gcVq'\vk)&(ddT:zP2,Kx25dj%^uC4o\Q0S3]GqMX+J9EmK[;Z-ăU")q2(MIVx]-\U3kIkgB/BI'eriIL\&F,<-.9Dkw.KcjS?Rg,m$J)'1Una.sh]B:qăU"/Aw)X0>$X*ba72a5vd<d]$$,b/kZJVH#p#]61'_^BB&SUb2GV\Y%WCcBU5P/lexăU"A8)K\^^q+]O-w8RHLf3)s$a(v5gDVHG]\vzdLHD8egr%e'fZ*pS\baC#mQ#a#M[ăU"U.YZQKCCim#bAdQOW2Hrm&'Zh\Z]0qUa1335z7^-T(dquH]E#o-KJ?Iu58y[pKCăU"hg/oV[rs7c'AOE=LL2<nJYqjujv\.COa-y)>PkMFOqKGV2%?7(UCAp]#l#4/\LPăU"u*DELt36TuE5SRM44^NM$bd^>(1VT#4KKTKTMp#oxZ2uKK$cN;I%_?1d#[,+VkxăU"etODmyOQ\J6,1;^K;NG:Xd]dJAN]Zj2E12/Dc)?T?lxJLigXXQ]1Vr#v:W\\'O<ăU"/IIylp#0P<'/0XPjxh/-4B&?OG$l*1D+3Csi_2zriUmAP0+Rj+H\4kNq2OMgY9FăU"*A1aKY-9?=2KZpqopuWc6AX^S]6.m]h^og1cf4K-IBpugHfeO\M8Y8Eo/jJtV_)ăU"GZQxC\pRcfc33ilOvB$6iv^dUTfPB2T<8Vn;-o)U(A/Z1E:*sY3NgNlv^:&m^0băU"VEL7.K'udup%()9%%%%-%-K*cJe$<$o%O.%%&i#%%%1%%%%wtyt&)ttr%SgfxNNăU"'J>][m7x:DXhu-C_&$)Sglm(Wi#RO(GQed%03$E_C_xf*#7>?Q%V)8kt8z9V[?3ăU",H%S_obWB1OD8IF;&Fn>-5wX?mq+$xm?1gE7vcp;\G?gLB0AV.iA6/l*u].,achăU"58l%Qk2sfRl$cYrEQG4f<ni&S,/u5ksZH2-2n%gEIl#C0N&&nTS[/jrHBA?dM:CăU"gfps05E%<V>8T<3v][O1kr9Y[?Zi\n>8t?j.uMwS\*;Qqt6lljRqmmema>BKv71ăU"w1:O?pi9+j_bg]&/RfQRkC8qP00Bg?b#.x3^fU40?g'(QbM)Q+?eSo')'9bH%5EăU"6d9Xpj=<<FB<'-Qqgo]gG\Zu;S.2[tG;WBST6D:ET\5U4/YGKE+>U6U$s<Cs:n,ăU"qkN]Y]2s-KF<Uk5EKR^&4o9cqC1/K+d6Q1JlV,tKGJg.FL3WmI5WnXmEKWTcjM_ăU"UA[1#]2Ui8U1I=+cw;S<INbk-q?iBsx$VbgFQanQ-2N981X;U_Lm#_nkl\89JAgăU"jsRfnd6)Z57*gfQa&$lLP8Ug$h_XX)*qgG0Ic-^YkZ-T.gvdJ(Tp#B7C)A/G(qmăU"zEQrLq.U,AbGjf#2(0jgiGpY-3swtAot7m:np[sN;.HA)5ix:j&h-B3;Hqw#;dRăU"LO;>_FrnRVb,)WDdQAR,/TbU7Sq6f&BVt'Q])4O;W5T3\Vh*k+Oy?$/)\AI9M3uăU"_8PQR[//XZHi\(bFcTib1J'o+P^qv%4XlL;/m9YjaWeq17g/_-&A_r)fSDe$#+7ăU"(QVm\p%,:IDt4ek<Ebmq.um(?neT]ouSQ\.AtY-25xsJ,fgmB6C.'Ht/+#q+VjXăU"7epY/8/[JlPa)<.MgB1uf:v0Dmhk(uWT1TT:-]Amjo#183Wwv&;-ziZQ1T&G<q>ăU"\JQ0w+p#JS>Ud$eg\wZ=8agM\xI^v)scnxK]%B0CsL/&J'#w=LEC/.bf*6rHAXnăU"(;NI9r)1sc#U25r[4uo9>&1bwp=0CP9Nw5<<S0jPXjtq;hH.PI\K==]coL8?)hdăU":x]Wr<-F/Idin:a0lEO/_4Tl:g\92TYK?O]EM:^PT'9-iAQWlA*X4wafkQkOT1KăU"r1M]*.X?eH.]?%=AAq^pRx4&8hd7M=&ftNKfX\j->pgqBgHbtpOor\l&6jrW\pKăU"dvt[&nHbe\J9,inBySfB%qp>O?.(FP$%+2cm%*oazpA\rps4-cxCkn[7,yl1On:ăU"4-k2,CpC20Tdl8]l-2gRi.HldH;gCEciu<Do8Gy,a,yh[n=JLQppo4uh=8=OIn:ăU">>Z3E&[U;XI7BcoedPL3GUoE29W=?oTAZFPZ0caTX;jqYSkW#iQgH:PYW<o1V-4ăU"ea%%oL&.pADDbjk&&w0E29KY6rCd;.E/sfc/dYu-Ldr-I:[sR(hB0U+N)2N2j9ZăU"=I*OXZ&LL[-TeqyxqF?M/rX;^/?,fROzA2,xnptoNR2$w^CC2#YP_1J,IG;0.*HăU"Ci?yDh=Hunii,UmkQJp+)s'vn/G3q&s$,J8[uZcOOEqW2fDq,on?ho7L*[kh]X$ăU">:7wZUpX+E$/E<WRYHmSo%p)[?-Q)so34Lqs;a<U-szm#X,j<-ukQ#,S?rWesHYăU"-x:d\p?6hfg1=C0hEdqx-Qb./x\U3r+>U==;psi069mtf(Ic_[]0N;zq7h)\*H8ăU"[nVSX-4fn,l'NHmddd,w94'_jWZN(]_Hv2btA_IZNm5#bOeXw#F7Y,eR_.L^DzGăU"7m:D&qImad'wCn.[-^SR7U%lzh.E#^OYNoC[9sH.$HSi5%vnY'2q5+b2(;jBm1BăU",CoIuC$E??QqEg]0pMX^ZVUl0uJr,/T:BU.AAwyU.cQO$DOaFg'LZ,]M*S;E^B,ăU"zaDsw_f6Bh_q<fgwVRpR&Uq^N<c3TDW(tw[urAKGk,ka;qipr-0J>k_nIOJ?SVJăU"kHp8*.kl<,&arskV4\f;mNg?3f\'e0oOYe)6NYs'crUZU$ULhbu]8X.FM(]l\n'ăU"IxIRJ5dL*](o5I(#\JEtIx()v$M_72VBPsK/q$Wo?ZpvnB0,*BM?zkzNGt%>dU[ăU"2HEJt+2Go[t#,oFpP?EZc[T[wvZsg<9;/W:pa;9MPN7+UqCEfNz71KPKtPts5KrăU"8DtF<J^6%^dlA38=aKf>,BW;O;JwqqHY5jnz^J5%o]i,n?c0(SdSjx-i+3CoBTrăU"e\l4*\gsB3/JbO^Y?<*RX/*87ZG$jun0XyIxHPq1Np-JE$jpgy+?j-LY%1H&ym3ăU"%c0;JOc&<9\2,gUJ2l1Xgr6r3]g10CKt6>E[NzdT6r1)F(o1Ce>\$eqkU-$F*IvăU"2d%LGO7#VRBXqMS.ye.#%j1(vov#c>hlRm2LW*Iljrr+17_<L05UFK#s9;980D+ăU"7=4i0$/f6wkRCG/xVW<$./c;&D>/obzsO$nc,)vl+vDA&6y]E>u7)5](XHC3PV9ăU"2aAWmn$$-Xhn#hr^?_<>r)2,sp7mu[5lzf^26faS)0XB*6D%cgl:0,%5MVe.0RDăU"M2']6b&3)>>RV:>Y4$Uaur6S4>j8QmM8sO$[s19*951'zsmkKpf'(74xK2/D_QEăU"PV=Q9x+BuP[wd];:B3u?$J<JQG=\=KmCIDL^'*lK5fWG2]qIMS_s=5C_#IDnZeAăU"tNHM/ik8t+X8Q7sZDn)onij.Yds$&0D(YkYZY-L%90RMv(WVSa:w'Quk*mh-ez1ăU"<Fjy-w1pdBarmU28B-9d:Rt9f4YEF5=U[ZREv(^v%asXHA)UUj=08vK&5dufH<LăU"Vvl5Bd^JFEfa3\YApD-N'5lEhj1u6F*/-%R30b0._h.t'J#%>^l;aXWG;5WTkWdăU"OVzc]x6<UV<La_\CI(3_qC0m65<<;O7M<,gUSal35?lJ,lTV\KE^o;PfSrysMU*ăU"GSx$XuWrbzQ#l2Tsm9UC6;#'qABY5*4e9e7VIDTBIv[l^bFjrxj\ce?sMb2SqJ(ăU"3,<I^FqW?=#O\\ncnZ:HSxQQ&-h(Nl'v*up%&'9%%9%%%#-%BsmcJec69(u&%%%ăU"%2%%%*%%%%%%%%%&%%E%%%%%%%%%VSrf%uup&%'9%9%%%%-1%]scaJ159*Oy0%%ăU"%%5%%%*%%%%%%%%%%%E[%%%B%&%%V#Swf&%up&'%9%9%%%%-%,%*cJ%Ejtl'N%%ăU"%%%2%%%*%%%%%%%%%&%E%.%%e2%%%WS%rfuu%p&'9%%9%%[%-%l])cJAW[okP%1ăU"%%%%5%%*%%%%%%%%%%%%E%%(%]3%%%WSw(f&up%&'9%%9%%%m-%K*.cJ$<,$oO.ăU".%%i#%%%1%%%%%%%%%&%%E%%%%W#%%%wtyt&)ttr%Sgfx%up*+%%%%%%*%*%%+&ăU"%%&UI%%%%%ăEND SUBăCLOSE:IF S=20AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDaniel Davies                  SHAPE SHIFTING PLASMA          ia53@rapid.co.uk               10-20-98 (19:08)       QB, QBasic, PDS        107  2638     MOVPLAS.BAS 'SHAPESHIFTING PLASMA BY Daniel Daviesă'this is a sinusoidal plasma which I wrote ages ago, and have optimised ită'so it can run at 320*200 in 256 colours, at 80fps when compiled and run onă'a p200.ă'it actually plots every single pixel, as opposed to plotting groups ofă'pixels in the same colour, which is what all my previous plasmas have doneă'to keep the frame rate up. this plasma just uses a very highly optimisedă'inner loop.ă'my web page is at www.users.rapid.net.uk/ia53/ă'and I can be e-mailed at eitheră' ia53@rapid.co.ukă'        oră'arclight@pagans.orgăDIM PLASMA%(80, 50)ăDIM sine1%(0 TO 360)ăDIM sine2%(0 TO 360)ăDIM sine3%(0 TO 360)ăDIM sine4%(0 TO 360)ăDIM red%(0 TO 255)ăDIM green%(0 TO 255)ăDIM blue%(0 TO 255)ăăSCREEN 13ăDEF SEG = &HA000ăăDIM rsin1%(360)ăDIM rsin2%(360)ăDIM rsin3%(360)ăDIM gsin1%(360)ăDIM gsin2%(360)ăDIM gsin3%(360)ăDIM bsin1%(360)ăDIM bsin2%(360)ăDIM bsin3%(360)ăăFOR x% = 0 TO 360ărsin1%(x%) = (SIN(x% * 2 * (3.141592653# / 180)) * 17)ărsin2%(x%) = (SIN(x% * 4 * (3.141592653# / 180)) * 13)ărsin3%(x%) = (SIN(x% * 6 * (3.141592653# / 180)) * 7)ăăgsin1%(x%) = (SIN((x% + 120) * 2 * (3.141592653# / 180)) * 17)ăgsin2%(x%) = (SIN((x% + 120) * 4 * (3.141592653# / 180)) * 13)ăgsin3%(x%) = (SIN((x% + 120) * 6 * (3.141592653# / 180)) * 7)ăăbsin1%(x%) = (SIN((x% + 240) * 2 * (3.141592653# / 180)) * 17)ăbsin2%(x%) = (SIN((x% + 240) * 4 * (3.141592653# / 180)) * 13)ăbsin3%(x%) = (SIN((x% + 240) * 6 * (3.141592653# / 180)) * 7)ăNEXT x%ăăFOR x% = 0 TO 255ăOUT &H3C8, x%ăOUT &H3C9, rsin1%(x%) + rsin2%(x%) + rsin3%(x%) + 30ăOUT &H3C9, gsin1%(x%) + gsin2%(x%) + gsin3%(x%) + 30ăOUT &H3C9, bsin1%(x%) + bsin2%(x%) + bsin3%(x%) + 30ăNEXT x%ăăăărtd = 3.141592654# / 180ăFOR y% = 0 TO 360ăsine1%(y%) = -(31 * SIN((y% * 7) * rtd))ăsine2%(y%) = -(6 * SIN((y% * 3) * rtd))ăsine3%(y%) = (19 * SIN((y% * 10) * rtd))ăsine4%(y%) = (44 * SIN((y% * 5) * rtd))ăNEXT y%ăăst# = TIMERăDOăs1tmp% = sine1%(0)ăs2tmp% = sine2%(360)ăs3tmp% = sine3%(0)ăs4tmp% = sine4%(360)ăFOR x% = 0 TO 359ăsine1%(x%) = sine1%(x% + 1)ăsine3%(x%) = sine3%(x% + 1)ăsine2%(x%) = sine2%(359 - x%)ăsine4%(x%) = sine4%(359 - x%)ăNEXT x%ăsine1%(360) = s1tmp%ăsine2%(0) = s2tmp%ăsine3%(360) = s3tmp%ăsine4%(0) = s4tmp%ăăăăFOR y% = 0 TO 199ă  st2% = sine3%(y%) + sine4%(y%) + 127ă   FOR x% = 0 TO 319ă     POKE xmod&, st2% - (sine1%(x%) + sine2%(x%))ă     xmod& = xmod& + 1ă   NEXT x%ă   ăNEXT y%ăxmod& = 0ăăframe& = frame& + 1ăLOOP WHILE INKEY$ = ""ăăet# = TIMERăPALETTEătime# = et# - st#ăPRINT time#ăPRINT frame&ăPRINT frame& \ time#ăăSLEEPăăDaniel Davies                  REAL-TIME ITERATIVE RAYTRACER  ia53@rapid.co.uk               10-20-98 (19:08)       QB, QBasic, PDS        200  4927     REALRAY.BAS 'REAL TIME ITERATIVE RAYTRACER WITH PROCEDURAL TEXTUREă'by Daniel Daviesă'ă'e-mail   :- ia53@rapid.co.ulă'web site :- www.users.rapid.net.uk/ia53/ă'ICQ #    :- 10620663ă'ă'This raytracer renders a single small sphere, with a procedural texture,ă'and rotates the light source around the object,ă'all of the functions are for generating procedural texturesă'although two textures are defined only one is used, the other was just as aă'test.ă'This program benefits greatly from being compiled,ă'compiled it runs at 2.5fps on a p200ă'uncompiled in q-basic it runs at .2fps on the same system.ăăDECLARE FUNCTION stripe# (a#)        'procedural stripe textureăDECLARE FUNCTION marble# (x#, y#, z#) 'procedural marbleăDECLARE FUNCTION noise# (x#, y#, z#) '3d Perlin noise functionă                                     'x#,y#,z# are a point in space to returnă                                     'noise value for.ăDECLARE FUNCTION turbulance# (x#, y#, z#, at#)ă                                     '3d perlin noise function withă                                     'turbulanceă                                     'x#,y#,z# are the point in spaceă                                     'at# is the amount of turbulanceă                                     'and should be less than 1ă                                     'lower values give more turbulanceăăTYPE point3dă x AS DOUBLEă y AS DOUBLEă z AS DOUBLEăEND TYPEăDIM dir AS point3dăDIM cur AS point3dăDIM light AS point3dăDIM normal AS point3dăDIM buffer(-20 TO 20, -20 TO 20) AS INTEGERăăSCREEN 13ăăradian = (3.141592653# / 180) * 5ă'set up paletteăOUT 968, 0ăFOR x% = 0 TO 255ăOUT 969, x% \ 4ăOUT 969, x% \ 4ăOUT 969, x% \ 4ăNEXT x%ăăangle% = 90ăst# = TIMERăDOăf% = f% + 1ăangle% = angle% + 5ă light.x = SIN(angle% * (3.141593 / 180))ă light.y = -.75ă light.z = COS(angle% * (3.141593 / 180))ă length# = SQR((light.x ^ 2) + (light.y ^ 2) + (light.z ^ 2))ă light.x = light.x / length#ă light.y = light.y / length#ă light.z = light.z / length#ăă'main raytracing bităFOR x% = -20 TO 20ăă FOR y% = -20 TO 20ă IF (x% * x%) + (y% * y%) <= 385 THENă 'set direction of rayă dir.x = x% / 4ă dir.y = y% / 4ă dir.z = 255ă 'normalize direction of ray (i.e. give the direction vectoră 'a length of 1)ă length# = (dir.x * dir.x) + (dir.y * dir.y) + (dir.z * dir.z)ă length# = SQR(length#)ă dir.x = dir.x / length#ă dir.y = dir.y / length#ă dir.z = dir.z / length#ă 'now to follow the ray until it hits somethingă hit% = 0ă fail% = 0ă cur.x = x%ă cur.y = y%ă cur.z = 0ă ray& = 0ă DOă cur.x = cur.x + dir.xă cur.y = cur.y + dir.yă cur.z = cur.z + dir.zăă'test for an intersectionăcz# = cur.z - 21ăIF (cur.x * cur.x) + (cur.y * cur.y) + (cz# * cz#) <= 400 THEN hit% = 1ăăLOOP UNTIL hit% = 1ăă normal.x = cur.xă normal.y = cur.yă normal.z = cur.z - 21ă length# = SQR((normal.x ^ 2) + (normal.y ^ 2) + (normal.z ^ 2))ă normal.x = normal.x / length#ă normal.y = normal.y / length#ă normal.z = normal.z / length#ăă dp# = (normal.x * light.x) + (normal.y * light.y) + (normal.z * light.z)ă diffuse# = (.7 * dp#)ă ă specular# = .5 * (dp#) ^ 50ă IF diffuse# < 0 THEN diffuse# = 0ă shade# = diffuse# + .075ă ă IF shade# > 1 THEN colour# = 1ăăătex# = marble#(cur.x, cur.y, cur.z)ăIF tex% > 255 THEN tex# = 255ăăc% = shade# * tex#ă                  ăăăă IF c% > 255 THEN c% = 255ă buffer(x%, y%) = c%ăă ă END IFăă NEXT y%ăNEXT x%ăăIF scale% = 0 THENă FOR y% = -20 TO 20ă FOR x% = -20 TO 20ă PSET (x% + 160, y% + 100), buffer(x%, y%)ă NEXT x%ă NEXT y%ăEND IFăăLOOP WHILE INKEY$ = ""ăet# = TIMERăquit:ăIF et# = 0 THEN et# = TIMERăăSCREEN 0ăWIDTH 80ăPRINT "ARCLIGHTS REAL TIME ITERATIVE RAY-TRACER"ăPRINT "INCLUDING PROCEDURAL TEXTURING"ăPRINT "IN Q-BASIC"ăPRINT "e-mail : ia53@rapid.co.uk"ăPRINT "web : www.users.rapid.net.uk/ia53/"ăPRINT "ICQ : 10620663"ăPRINTăPRINT "time taken            ";ătime# = et# - st#ăPRINT USING "##.####"; time#ăPRINT "frames drawn          "; f%ăPRINT "frame rate            ";ăPRINT USING "##.####"; (f% / time#);ăPRINT " FPS"ăăFUNCTION marble# (x#, y#, z#)ăg# = 175 + (80 * COS(y# + (5 * turbulance#(x#, y#, z#, 1))))ăămarble# = g#ăEND FUNCTIONăăFUNCTION noise# (x#, y#, z#)ă'generates noise using mathematical functionsăăsine1# = -(4.3 * SIN(x# * 16))ăsine2# = -(9.9 * SIN(x# * 6))ăsine3# = -(10.1 * SIN(y# * 13))ăsine4# = (6.25 * SIN(y# * 5))ăsine5# = (8.3 * SIN(z# * 23))ăsine6# = -(3.74 * SIN(z# * 27))ăănoise# = (sine1# + sine2# + sine3# + sine4# + sine5# + sine6#) / 41ăăEND FUNCTIONăăFUNCTION stripe# (a#)ăstripe# = 175 + (80 * COS(a#))ăEND FUNCTIONăăFUNCTION turbulance# (x#, y#, z#, at#)ăăt# = 0 'starting value for turbulanceăs# = 1 'scaleăăDOăt# = t# + (ABS(noise(x# / s#, y# / s#, z# / s#) * s#))ăs# = s# / 2ăLOOP UNTIL (s# <= at#)ăăturbulance# = t#ăăEND FUNCTIONăAnders Olofsson                SCALABLE FONT                  anders.olofsson@mail.bip.net   10-24-98 (14:11)       QB, QBasic, PDS        103  2842     SCALFONT.BAS'ă' Scalable font, by Anders Olofsson 1998.ă'----------------------------------------------------------------------------ă'    ă'                  e-mail: anders.olofsson@mail.bip.netă'ă'  This program uses single-precision math to scale the font,ă'  which is made at runtime in the "sub makefont".ă'ă'   The font contains all characters 0 to 255 and it requires 4096ă'   bytes of stringspace.ă'ăăDEFINT A-ZăDECLARE SUB fCenter (Text$, Y%, XSize%, YSize%, Colour%)ăDECLARE SUB makefont ()ăDECLARE SUB fPRINT (Text$, X%, Y%, C%, XSize%, YSize%)ăăDIM SHARED Font(255) AS STRING 'The font, takes 4096 bytes.ăăSCREEN 12ăăDIM SHARED Bit(0 TO 7) AS INTEGER, ScreenWid AS INTEGERăă ScreenWid = 640  'Used by centering routineăă' Make this program faster:ăFOR T = 0 TO 7: Bit(T) = 2 ^ T: NEXTăămakefontăăPAINT (0, 0), 1ăăLINE (50, 10)-(600, 80), 4, BF: LINE (50, 10)-(600, 80), 0, Băă fPRINT "Scalable font by:", 60, 20, 15, 30, 50ă fPRINT "Anders Olofsson 1998.", 100, 100, 0, 20, 15ă fPRINT "Anders Olofsson 1998.", 102, 102, 12, 20, 15ăă fCenter "This font is fully resizeable and uses bit patterns to store the font.", 130, 8, 20, 10ăă fCenter "This program is freeware!!", 170, 22, 28, 14ăă fCenter "But if you use it, please write my name somewhere", 200, 8, 24, 11ă fCenter "in your program.", 225, 8, 24, 11ăă fCenter "Scalable font, by Anders Olofsson 1998", 280, 12, 24, 13ă fCenter "E-mail: anders.olofsson@mail.bip.net", 310, 8, 40, 12ăăENDăăSUB fCenter (Text$, Y, XSize, YSize, Colour)ă fPRINT Text$, ScreenWid \ 2 - (XSize \ 2) * LEN(Text$), Y, Colour, XSize, YSizeăEND SUBăăSUB fPRINT (Text$, X, Y, Colour, XSize, YSize)ăX1 = X: T$ = RTRIM$(Text$)ăăYP! = 15 / YSize: FP! = 7 / XSizeăă FOR z = 1 TO LEN(T$)ă   S = ASC(MID$(T$, z, 1)): YF! = 0ă   FOR pY = 0 TO YSize - 1ă    FB! = 0: FB% = 0: FontBits% = ASC(MID$(Font(S), YF% + 1, 1))ă    FOR pX = 0 TO XSize - 1ă     Clr = -((FontBits% AND Bit(7 - FB%)) <> 0)ă     IF Clr THEN PSET (X1 + pX, Y + pY), Coloură     FB! = FB! + FP!: FB% = FB!ă    NEXTă    YF! = YF! + YP!: YF% = YF!ă   NEXT pYă   X1 = X1 + XSizeă NEXT zăă' Original unscalable font-print:ă' FOR z = 1 TO LEN(T$)ă'   S = ASC(MID$(T$, z, 1))ă'   FOR pY = 0 TO 15ă'     LINE (X1, Y + pY)-STEP(7, 0), C, , ASC(MID$(Font(S), pY + 1, 1)) * 128ă'   NEXT pYă'   X1 = X1 + 8ă' NEXT zăăEND SUBăăSUB makefontăCOLOR 7ă LOCATE 12, 10: PRINT "Creating internal font...": PALETTE 15, 0: COLOR 15ă  FOR A = 0 TO 255ă    IF A <> 7 AND A <> 12 THEN LOCATE 1, 1: PRINT CHR$(A)ă     B$ = SPACE$(16)ă      FOR Y = 0 TO 15ă        L = 0ă        FOR X = 0 TO 7ă         IF POINT(X, Y) THEN L = L XOR Bit(X XOR 7)ă        NEXTă       MID$(B$, Y + 1, 1) = CHR$(L)ă      NEXTă     Font(Num) = B$ă     Num = Num + 1ă  NEXTă PALETTE: CLSăEND SUBăLeandro Pardini                BMP LOAD/SAVE ROUTINES         lpardini@cefex.com             10-25-98 (19:15)       QB, QBasic, PDS        168  6576     BMP.BAS     '============================================================================ă' BMP Load/Save routines                                  lpardini@cefex.comă'============================================================================ă' These  routines  can load and write standard Windows uncompressed bitmaps.ă' RLE compressed and TrueColor bitmaps are not supported,  yet. In  the nextă' version, I plan to add support to  read  RLE-4  and RLE-8  bitmaps, and toă' load TrueColor bitmaps in grayscale mode. Suggestions welcome...ă'============================================================================ă' Speed on QBasic 1.1 - Cyrix 6x86 PR233 32MB RAM      Windows 95  Plain DOSă' Load a 640x480x16 color bitmap:                       2.35 secs  2.14 secsă' Save a 640x480x16 color bitmap:                       7.72 secs  6.59 secsă'============================================================================ă' FUNCTION BMPLoad% (File$, PosX%, PosY%)ă' Displays a bitmap in screen coordinates PosX% and PosY%. Returns:ă'    0 - All OK.ă'    1 - Can't find BM signature (File isn't a BMP).ă'    2 - File is a RLE compressed bitmap.ă'    3 - Unsupported color depth (24-bit).ă'============================================================================ă' SUB BMPSave (File$, PosX1%, PosY1%, PosX2%, PosY2%, biBitCount%)ă' Saves a screen area to a file. biBitCount% can be:ă'    1 - Monochrome bitmap.ă'    4 - 16 color bitmap.ă'    8 - 256 color bitmap.ă'============================================================================ăă'$STATICăDEFINT A-ZăăDECLARE FUNCTION BMPLoad% (File$, PosX%, PosY%)ăDECLARE SUB BMPSave (File$, PosX1%, PosY1%, PosX2%, PosY2%, biBitCount%)ăăSCREEN 12ăăa% = BMPLoad%("C:\Windows\Instal~1.bmp", 0, 0)ăBMPSave "Install2.bmp", 0, 0, 639, 479, 4ăăFUNCTION BMPLoad% (File$, PosX%, PosY%)ăOPEN File$ FOR BINARY ACCESS READ AS #1ă   GET #1, 1, bfType%ă   IF bfType% <> 19778 THEN BMPLoad% = 1: EXIT FUNCTIONă   GET #1, 31, biCompression%ă   IF biCompression% <> 0 THEN BMPLoad% = 2: EXIT FUNCTIONă   GET #1, 29, biBitCount%ă   SELECT CASE biBitCount%ă      CASE 1: bmColors% = 2: bmStep% = 8ă      CASE 4: bmColors% = 16: bmStep% = 2ă      CASE 8: bmColors% = 256: bmStep% = 1ă      CASE ELSE: BMPLoad% = 3: EXIT FUNCTIONă   END SELECTă   GET #1, 11, bfOffBits%ă   GET #1, 19, biWidth%ă   GET #1, 23, biHeight%ă   SEEK #1, 55ă   FOR bmPalette% = 0 TO bmColors% - 1ă      bmBlue% = ASC(INPUT$(1, 1)) \ 4ă      bmGreen% = ASC(INPUT$(1, 1)) \ 4ă      bmRed% = ASC(INPUT$(2, 1)) \ 4ă      OUT &H3C8, bmPalette%ă      OUT &H3C9, bmRed%ă      OUT &H3C9, bmGreen%ă      OUT &H3C9, bmBlue%ă   NEXT bmPalette%ă   LINE (PosX%, PosY%)-(PosX% + biWidth& - 1, PosY% + biHeight& - 1), 0, BFă   SEEK #1, bfOffBits% + 1ă   FOR bmPosY% = PosY% + biHeight% - 1 TO PosY% STEP -1ă   bmBytes% = 0ă   FOR bmPosX% = PosX% TO PosX% + biWidth% - 1 STEP bmStep%ă      bmBytes% = bmBytes% + 1ă      bmPixel% = ASC(INPUT$(1, 1))ă      SELECT CASE bmColors%ă      CASE 2ă         IF (bmPixel% AND 128) THEN PSET (bmPosX%, bmPosY%), 1ă         IF (bmPixel% AND 64) THEN PSET (bmPosX% + 1, bmPosY%), 1ă         IF (bmPixel% AND 32) THEN PSET (bmPosX% + 2, bmPosY%), 1ă         IF (bmPixel% AND 16) THEN PSET (bmPosX% + 3, bmPosY%), 1ă         IF (bmPixel% AND 8) THEN PSET (bmPosX% + 4, bmPosY%), 1ă         IF (bmPixel% AND 4) THEN PSET (bmPosX% + 5, bmPosY%), 1ă         IF (bmPixel% AND 2) THEN PSET (bmPosX% + 6, bmPosY%), 1ă         IF (bmPixel% AND 1) THEN PSET (bmPosX% + 7, bmPosY%), 1ă      CASE 16ă         IF bmPixel% > 0 THENă            PSET (bmPosX%, bmPosY%), bmPixel% \ 16ă            PSET (bmPosX% + 1, bmPosY%), bmPixel% AND 15ă         END IFă      CASE 256ă         IF bmPixel% > 0 THEN PSET (bmPosX%, bmPosY%), bmPixel%ă      END SELECTă   NEXT bmPosX%ă   SELECT CASE bmBytes% MOD 4ă      CASE 1: bmPixel% = ASC(INPUT$(3, 1))ă      CASE 2: bmPixel% = ASC(INPUT$(2, 1))ă      CASE 3: bmPixel% = ASC(INPUT$(1, 1))ă   END SELECTă   NEXT bmPosY%ăCLOSE #1ăEND FUNCTIONăăSUB BMPSave (File$, PosX1%, PosY1%, PosX2%, PosY2%, biBitCount%)ăbiWidth& = PosX2% - PosX1% + 1ăbiHeight& = PosY2% - PosY1% + 1ăOPEN File$ FOR BINARY ACCESS WRITE AS #1ăbfType% = 19778: PUT #1, , bfType%ăbfSize& = 0: PUT #1, , bfSize&ăbfReserved& = 0: PUT #1, , bfReserved&ăSELECT CASE biBitCount%ă   CASE 1: bfOffBits& = 62ă   CASE 4: bfOffBits& = 118ă   CASE 8: bfOffBits& = 1078ăEND SELECTăPUT #1, , bfOffBits&ăbiSize& = 40: PUT #1, , biSize&ăPUT #1, , biWidth&ăPUT #1, , biHeight&ăbiPlanes% = 1: PUT #1, , biPlanes%ăPUT #1, , biBitCount%ăbiCompression& = 0: PUT #1, , biCompression&ăbiSizeImage& = 0: PUT #1, , biSizeImage&ăbiXPelsPerMeter& = 72: PUT #1, , biXPelsPerMeter&ăbiYPelsPerMeter& = 72: PUT #1, , biYPelsPerMeter&ăbiClrUsed& = 0: PUT #1, , biClrUsed&ăbiClrImportant& = 0: PUT #1, , biClrImportant&ăSELECT CASE biBitCount%ă   CASE 1: bmColors% = 2: bmStep% = 8ă   CASE 4: bmColors% = 16: bmStep% = 2ă   CASE 8: bmColors% = 256: bmStep% = 1ăEND SELECTăFOR bmPalette% = 0 TO bmColors% - 1ă   OUT &H3C7, bmPalette%ă   bmRed% = INP(&H3C9) * 4ă   bmGreen% = INP(&H3C9) * 4ă   bmBlue% = INP(&H3C9) * 4ă   bmRGB$ = CHR$(bmBlue%) + CHR$(bmGreen%) + CHR$(bmRed%) + CHR$(0)ă   PUT #1, , bmRGB$ăNEXT bmPalette%ăFOR bmPosY% = PosY2% TO PosY1% STEP -1ăbmBytes% = 0ăFOR bmPosX% = PosX1% TO PosX2% STEP bmStep%ă   bmBytes% = bmBytes% + 1ă   SELECT CASE bmColors%ă   CASE 2ă      bmPixel% = 0ă      IF POINT(bmPosX%, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 128ă      IF POINT(bmPosX% + 1, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 64ă      IF POINT(bmPosX% + 2, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 32ă      IF POINT(bmPosX% + 3, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 16ă      IF POINT(bmPosX% + 4, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 8ă      IF POINT(bmPosX% + 5, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 4ă      IF POINT(bmPosX% + 6, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 2ă      IF POINT(bmPosX% + 7, bmPosY%) > 0 THEN bmPixel% = bmPixel% + 1ă      bmPixel$ = CHR$(bmPixel%)ă   CASE 16ă      bmPixel$ = CHR$((POINT(bmPosX%, bmPosY%) * 16) + POINT(bmPosX% + 1, bmPosY%))ă   CASE 256ă      bmPixel$ = CHR$(POINT(bmPosX%, bmPosY%))ă   END SELECTă   PUT #1, , bmPixel$ăNEXT bmPosX%ăSELECT CASE bmBytes% MOD 4ă   CASE 0: bmAlign$ = ""ă   CASE 1: bmAlign$ = CHR$(0) + CHR$(0) + CHR$(0)ă   CASE 2: bmAlign$ = CHR$(0) + CHR$(0)ă   CASE 3: bmAlign$ = CHR$(0)ăEND SELECTăPUT #1, , bmAlign$ăNEXT bmPosY%ăCLOSE #1ăEND SUBăLeandro Pardini                WEB LIKE SPHERE                lpardini@cefex.com             10-25-98 (19:15)       QB, QBasic, PDS        33   988      MANDALA.BAS '=======================================================<lpardini@cefex.com>=ă' This is a program I created four years ago and  I  don't  know why, but ită' looks  good,  like  a web. Playing with the numbers you'll get some prettyă' patterns.ă'============================================================================ăă'$STATICăDEFINT A-ZăăDECLARE SUB Mandala (PosX%, PosY%, Diametro%, Vertices%, ColorNum%)ăăSCREEN 12ăMandala 319, 239, 240, 29, 15ăWHILE INKEY$ = "": WENDăSCREEN 0ăENDăăSUB Mandala (PosX, PosY, Diametro, Vertices, ColorNum)ăăDIM VertX(Vertices), VertY(Vertices)ăăFOR Iniciar = 0 TO VerticesăVertX(Iniciar) = PosX + (SIN(6.283185 * (Iniciar / Vertices)) * Diametro)ăVertY(Iniciar) = PosY + (COS(6.283185 * (Iniciar / Vertices)) * Diametro)ăNEXT IniciarăăFOR Dibujar1 = 0 TO VerticesăFOR Dibujar2 = 0 TO VerticesăLINE (VertX(Dibujar1), VertY(Dibujar1))-(VertX(Dibujar2), VertY(Dibujar2)), ColorNumăNEXT Dibujar2ăNEXT Dibujar1ăăEND SUBăAnders Olofsson                OPTIMIZED RAYCASTER            anders.olofsson@mail.bip.net   10-30-98 (13:57)       QB, QBasic, PDS        283  8290     RAYCAST.BAS ' Raycaster, by Anders Olofsson 1998ă'            e-mail: anders.olofsson@mail.bip.netă'ă'     This raycaster is basically a heavily modified versionă'     of Peter Cooper's raycaster, but it's optimized...ă'ă'     To test the fps-rate, press "f" and to change resolution,ă'     use the "+"/"-" keys.ă'ă'     On a very, very slow math weak SX machine, I get about 25-30 fps whenă'     compiled.ă'ă'     Compile for best performance!ă'ăăDEFINT A-ZăDECLARE FUNCTION KeyStat% ()ăDECLARE SUB InitPalette ()ăDECLARE SUB pal (C%, r%, g%, B%)ăDECLARE SUB WalkAround ()ăDECLARE SUB InitTables ()ăDECLARE FUNCTION Keyboard% ()ăDECLARE SUB Readlevel ()ăăDIM SHARED Walls(1 TO 30, 1 TO 30) AS INTEGERăDIM SHARED Sine(0 TO 360) AS INTEGER, Cosine(0 TO 360) AS INTEGERăăDIM SHARED PlayerX AS SINGLE, PlayerY AS SINGLE, MaxX, MaxY, ScreenStepăăCONST RotateStep = 3ăCONST Compass = 0ăăCONST WallColor = 1, FloorColor = 65, SkyColor = 64ăCONST CompassColor = 66, CompassBorderColor = 67ăă' Recommended: 4 to 10ăă ScreenStep = 5ăăSCREEN 13ăăRESTORE Level1ăăInitTablesăReadlevelăăWalkAroundăăENDăăăăăăăăLevel1:ăDATA 30,30 : 'Max X&YăDATA 10,10 : 'Start of playerăDATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ăDATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,1,0,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ăDATA 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,1ăDATA 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1ăDATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ăDATA 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1ăDATA 1,0,0,0,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1ăDATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,1ăDATA 1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1ăDATA 1,0,0,0,1,0,0,1,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,1,1,1,1,0,1ăDATA 1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1ăDATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1ăăSUB InitPaletteăFOR I = 1 TO 63ă pal 64 - I, I \ 4, I \ 4, IăNEXTăpal 64, 45, 45, 63ăpal 65, 10, 15, 10ăEND SUBăăSUB InitTablesăRad! = (4 * ATN(1)) / 180ăFOR T% = 0 TO 360ă Sine(T%) = SIN(T% * Rad!) * 100ă Cosine(T%) = COS(T% * Rad!) * 100ăNEXTăEND SUBăăFUNCTION Keyboardă DOă  S$ = INKEY$ă LOOP UNTIL LEN(S$)ă IF LEN(S$) = 1 THENă  Keyboard = ASC(S$)ă ELSEIF LEN(S$) = 2 THENă  Keyboard = -ASC(RIGHT$(S$, 1))ă END IFăEND FUNCTIONăăFUNCTION KeyStatăDEF SEG = &H40: KeyStat = PEEK(&H17)ăEND FUNCTIONăăSUB pal (C, r, g, B)ăOUT &H3C8, C: OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, BăEND SUBăăSUB ReadlevelăREAD MaxX, MaxYăREAD PlayerX, PlayerYăFOR X = 1 TO MaxXăFOR Y = 1 TO MaxYăREAD Wall: Walls(X, Y) = WallăNEXTăNEXTăEND SUBăăSUB Scroll (Dir, X1, Y1, X2, Y2)ă REDIM Buffer(((X2 - X1) * 10))  AS INTEGERăă  IF Dir = 1 THENă   FOR Y = Y1 TO Y2 STEP 10ă    IF Y > Y2 THEN EXIT FORă    IF Buffer(0) THEN PUT (X1, Y - 13), Buffer, PSETă    GET (X1, Y)-(X2, Y + 10), Bufferă   NEXTăă  ELSEIF Dir = 2 THENă   FOR Y = Y2 TO Y1 STEP -10ă    IF Y < Y1 THEN EXIT FORă    IF Buffer(0) THEN PUT (X1, Y + 13), Buffer, PSETă    GET (X1, Y)-(X2, Y + 10), Bufferă   NEXTăă  ELSEIF Dir = 3 THENă   FOR X = X2 TO X1 STEP -10ă    IF X < X1 THEN EXIT FORă    IF Buffer(0) THEN PUT (X + 15, Y1), Buffer, PSETă    GET (X, Y1)-(X + 10, Y2), Bufferă   NEXTăă  ELSEIF Dir = 4 THENă   FOR X = X1 TO X2 STEP 10ă    IF X > X2 THEN EXIT FORă    IF Buffer(0) THEN PUT (X - 15, Y1), Buffer, PSETă    GET (X, Y1)-(X + 10, Y2), Bufferă   NEXTăă  END IFăăEND SUBăăSUB WalkAroundăăInitPaletteăăDrawStep = 320 \ ScreenStepăăpal 255, 60, 60, 60: COLOR 255ăăGOSUB DrawScreenăăDOă ă  Keys = Keyboardă  KeyBits = KeyStată   Shift = ((KeyBits AND 2) OR (KeyBits AND 1)) <> 0ă   Alt = (KeyBits AND 8) <> 0ăă  SELECT CASE Keysă   CASE 102, 70  'FPS testă    LOCATE 1, 1: PRINT "This will take five seconds."ă    PRINT " Press a key... ": SLEEP: X$ = INKEY$ă    T! = TIMER: FPS = 0ă    DOă     GOSUB DrawScreen: FPS = FPS + 1ă    LOOP UNTIL TIMER - T! > 5ă    FPS = FPS \ 5ă    LOCATE 1, 1: PRINT "FPS rate is"; FPSăă   CASE 43 ' Decrease screen-stepă    IF ScreenStep > 3 THEN ScreenStep = ScreenStep - 1: DrawStep = 320 \ ScreenStep: GOSUB DrawScreenă    LOCATE 1, 1: PRINT "Resolution ="; ScreenStepăă   CASE 45 ' Increase screen-stepă    IF ScreenStep < 10 THEN ScreenStep = ScreenStep + 1: DrawStep = 320 \ ScreenStep: GOSUB DrawScreenă    LOCATE 1, 1: PRINT "Resolution ="; ScreenStepăă   CASE 8 ' Rotate 180 degreesă    FOR I = 1 TO 15ă     Current = (Current + 12) MOD 360: GOSUB DrawScreen: WAIT &H3DA, 8ă    NEXTă   CASE -77 'Rightă    IF Shift THEN Current = Current + RotateStepă    Current = Current + RotateStep: GOSUB DrawScreenă   CASE -75ă    IF Shift THEN Current = Current - RotateStepă    Current = Current - RotateStep: IF Current < 0 THEN Current = Current + 360ă    GOSUB DrawScreenă   CASE -72ă    opx = PlayerX: opy = PlayerYă    IF Shift = 0 THENă     PlayerX = PlayerX + (Sine((Count - 30) MOD 360) / 50)ă     PlayerY = PlayerY + (Cosine((Count - 30) MOD 360) / 50)ă    ELSEă     PlayerX = PlayerX + (Sine((Count - 30) MOD 360) / 50) * 2ă     PlayerY = PlayerY + (Cosine((Count - 30) MOD 360) / 50) * 2ă    END IFă    IF Walls(((PlayerX + 1) * 99) \ 1000 + 1, ((PlayerY + 1) * 99) \ 1000 + 1) THENă     LOCATE 1, 1: PRINT "Did'nt you see that wall??": PlayerX = opx: PlayerY = opyă    ELSEă     GOSUB DrawScreenă    END IFă   ă   CASE -80ă    opx = PlayerX: opy = PlayerYă    IF Shift = 0 THENă     PlayerX = PlayerX - (Sine((Count - 30) MOD 360) / 50)ă     PlayerY = PlayerY - (Cosine((Count - 30) MOD 360) / 50)ă    ELSEă     PlayerX = PlayerX - (Sine((Count - 30) MOD 360) / 50) * 2ă     PlayerY = PlayerY - (Cosine((Count - 30) MOD 360) / 50) * 2ă    END IFă    IF Walls(((PlayerX + 1) * 99) \ 1000 + 1, ((PlayerY + 1) * 99) \ 1000 + 1) THENă     LOCATE 1, 1: PRINT "You don't have eyes in your neck...": PlayerX = opx: PlayerY = opyă    ELSEă     GOSUB DrawScreenă    END IFă ă  END SELECTăăLOOP UNTIL Keys = 27ăăEXIT SUBăăăăăDrawScreen:ăpx = (PlayerX + 1) * 99: py = (PlayerY + 1) * 99ăFOR Count = Current TO Current + DrawStepă C = Count MOD 360: Sin1 = Sine(C): Cos1 = Cosine(C)ă DrawX = px: DrawY = py: Distance = 0ă DOă  DrawX = DrawX + Sin1: DrawY = DrawY + Cos1ă  Distance = Distance + 1ă  Wall = Walls(DrawX \ 1000 + 1, DrawY \ 1000 + 1)ă LOOP UNTIL Wallă 'LOCATE 1, 1: PRINT Distance: SLEEPă X = (Count - Current): X = X * ScreenStepă Avg = (1000 \ Distance): ColorAdd = Distance \ 5:  IF ColorAdd > 60 THEN ColorAdd = 60ă  LINE (X, 0)-STEP(ScreenStep, 99 - Avg), SkyColor, BFă  LINE (X, 101 + Avg)-(X + ScreenStep, 200), FloorColor, BFă  LINE (X, 100 - Avg)-(X + ScreenStep, 100 + Avg), ColorAdd + WallColor, BFăNEXTăăIF Compass THENă CIRCLE (25, 180), 15, CompassBorderColoră PAINT (27, 182), CompassColor, CompassBorderColoră PSET (25, 180), 100: DRAW "C12TA" + STR$(Current MOD 360) + "D10"ăEND IFăăRETURNăăEND SUBăYousuf Philips                 OPENBMP VERSION 0.3            philipz@emirates.net.ae        11-01-98 (05:17)       QB, QBasic, PDS        473  17508    .OPENBMP.BAS''''''''''''''''''''''''''''''''''''''''ă' Program    : Loads BMP Files         'ă' Name       : OPENBMP Version 0.3     'ă' Programmer : Yousuf Philips          'ă' Company    : Y P I                   'ă' Updated On : 12th of Sept. 1998      'ă' Email - [philipz85@hotmail.com]      'ă' [http://members.xoom.com/Philipz/]   'ă''''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to load BMP files. Aaron Zabudsky is the first programmer */'ă'/* to load BMP files in BASIC and his loader is known as SHOWBMP.BAS. I   */'ă'/* have been in contact with him and have to say that his commenting in   */'ă'/* SHOWBMP.BAS of the BMP file format was excellent and simple. I would   */'ă'/* like to give credit and special thanks to him. This loader was created */'ă'/* to load all Windows BMPs and is fast in loading compressed BMPs.       */'ă'/* This BMP loader is part of a series of BMP loaders which have been     */'ă'/* created by YPI. The source code for version 0.1 and 0.2 haven't been   */'ă'/* distributed and won't because this version (0.3) is many times faster  */'ă'/* and is able to load all Windows BMPs but if you really want, just ask. */'ăă'/* If you use any of this code in your program then you must credit YPI   */'ă'/* and also Aaron Zabudsky. This program has been placed in Public Domain */'ă'/* and All Rights Are Reserved.                                           */'ăă'/* YPI has also created a PCX loader and an FLI player. The source can be */'ă'/* gotten from our website <http://members.xoom.com/Philipz/>             */'ă'/* The YPI Website has programs for beginners, tutorials and utilities.   */'ă'/* Aaron Zabudsky's email is <zabudsk@ecf.utoronto.ca>                    */'ăăDECLARE SUB BMPInfo (FileName$)ăDECLARE SUB SHOWBMP (FileName$)ăăDIM SHARED X, Y AS INTEGERăăCLSăPRINTăPRINT " Fast BMP Loader for QBASIC - By YPI (BASIC Programming Incorporation)"ă'FILES "*.bmp"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă   ENDăELSEIF INSTR(FileName$, ".") = 0 THENă   FileName$ = FileName$ + ".bmp"ăEND IFăăCALL BMPInfo(FileName$)ăWait$ = INPUT$(1)ăCALL SHOWBMP(FileName$)ăWait$ = INPUT$(1)ăăSUB BMPInfo (FileName$)ăă'/* Opens the specified File Name */'ăOPEN FileName$ FOR BINARY AS #1ă'/* If the file name specified is empty then a line of text is printed, */'ă'/* the file is then deleted and the program ends */'ăIF LOF(1) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #1ă   KILL FileName$ă   EXIT SUBăEND IFăăCLSă'/* Extracts the first 2 bytes of the file */'ăValidBMP$ = SPACE$(2)ăGET #1, 1, ValidBMP$: PRINTăIF ValidBMP$ = "BM" THENă   PRINT " Valid BMP FILE"ăELSEă   PRINT " InValid BMP FILE"ăEND IFăă'/* Extracts the Size of the file without the header */'ăSizeOfFile$ = SPACE$(4)ăGET #1, 3, SizeOfFile$ăPRINT " Size of the file -"; CVL(SizeOfFile$); " or "; LOF(1)ăă'/* Extracts the offset of the picture data in the file */'ăLocationOfPictureData$ = SPACE$(4)ăGET #1, 11, LocationOfPictureData$ăPRINT " Location in file of Picture Data    -"; CVL(LocationOfPictureData$)ăă'/* Extracts the BMP type (Win or OS/2) */'ăBMPType$ = SPACE$(4)ăGET #1, 15, BMPType$ăPRINT : PRINT " BMP Type       - ";ăIF CVL(BMPType$) = 12 THENă   PRINT "OS/2"ă   PRINT " Size Of Header - 12"ăELSEIF CVL(BMPType$) = 40 THENă   PRINT "Windows"ă   PRINT " Size Of Header - 40"ăELSEă   PRINT "Unknown Type"ăEND IFăă'/* Extracts the Width and Height in Pixels of the Image */'ă'/* and also the number of bits per pixel (bpp) */'ăPixelWidth$ = SPACE$(4): PixelHeight$ = SPACE$(4)ăBitsPerPixel$ = SPACE$(2): NoPlanes$ = SPACE$(2): Compress$ = SPACE$(4)ăGET #1, 19, PixelWidth$ăGET #1, 23, PixelHeight$ăGET #1, 27, NoPlanes$ăGET #1, 29, BitsPerPixel$ăGET #1, 31, Compress$ăPRINTăPRINT " Width of Image in Pixels           -"; CVL(PixelWidth$)ăPRINT " Height of Image in Pixels          -"; CVL(PixelHeight$)ăPRINT " Number of Planes                   -"; CVI(NoPlanes$)ăPRINT " Number of Bits Per Pixel (bpp)     -"; CVI(BitsPerPixel$)ăPRINT " Number of Colors Used in the Image -"; 2 ^ CVI(BitsPerPixel$)ăIF CVL(Compress$) = 0 THENă   PRINT " No Compression"ăELSEIF CVL(Compress$) = 1 THENă   PRINT " RLE - 8-Bit Compression"ăELSEIF CVL(Compress$) = 2 THENă   PRINT " RLE - 4-Bit Compression"ăEND IFăCLOSEăăEND SUBăăSUB SHOWBMP (FileName$)ăăOPEN FileName$ FOR BINARY AS #1ăIF LOF(1) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   EXIT SUBăEND IFăă'/* Extracts the first 2 bytes of the file */'ăValidBMP$ = SPACE$(2)ăGET #1, 1, ValidBMP$ă'/* If the first 2 bytes of the file are not BM then a line of text is printed, */'ă'/* and the program ends */'ăIF ValidBMP$ <> "BM" THENă   PRINT " THE FILE SPECIFIED IS NOT A VALID BMP"ă   EXIT SUBăEND IFăă'/* Extracts the offset of the picture data in the file */'ăLocationOfPictureData$ = SPACE$(4)ăGET #1, 11, LocationOfPictureData$ăLocationOfPictureData = CVL(LocationOfPictureData$)ăă'/* Extracts the BMP type (Win or OS/2) */'ăBMPType$ = SPACE$(4)ăGET #1, 15, BMPType$ă'/* If the BMPType is for OS/2 then the a line of text is printed, then */'ă'/* program ends */'ăIF CVL(BMPType$) = 12 OR CVL(BMPType$) = 64 THENă   PRINT " THIS BMP IS FOR THE OS/2 AND CAN'T BE OPENED IN THIS VERSION OF OPENBMP"ă   PRINT " PLEASE SEND ANY OS/2 BMP TO phililpz85@hotmail.com"ă   PRINT " BY SENDING OS/2 BMP's TO US, WE WILL HOPEFULLY BE ABLE TO OPEN THEM IN THE"ă   PRINT " NEXT VERSION OF OPENBMP"ă   EXIT SUBăEND IFăă'/* Extracts the Width and Height in Pixels of the Image */'ă'/* and also the number of bits per pixel (bpp) */'ăPixelWidth$ = SPACE$(4)ăPixelHeight$ = SPACE$(4)ăBitsPerPixel$ = SPACE$(2)ăCompression$ = SPACE$(4)ăGET #1, 19, PixelWidth$ăGET #1, 23, PixelHeight$ăGET #1, 29, BitsPerPixel$ăGET #1, 31, Compression$ăPixelWidth = CVL(PixelWidth$)ăPixelHeight = CVL(PixelHeight$)ăBitsPerPixel = CVI(BitsPerPixel$)ăNumberOfColors = 2 ^ BitsPerPixelăă'/* Changing to suitable screen modes to display the Image */'ăIF BitsPerPixel = 1 THENă   IF PixelWidth > 640 OR PixelHeight > 480 THENă      PRINT " 1-BIT IMAGE IS TO LARGE"ă      EXIT SUBă   END IFă   SCREEN 11ăELSEIF BitsPerPixel = 4 THENă   SCREEN 12ăELSEIF BitsPerPixel = 8 THENă   SCREEN 13ăEND IFăă'/* If image is not 24-bit then load palette information from file */'ăIF BitsPerPixel <> 24 THENă   '/* Extracts Palette information for the colors used in the image */'ă   PaletteColors$ = SPACE$(NumberOfColors * 4)ă   GET #1, 55, PaletteColors$ăă   FOR Loops = 0 TO NumberOfColors - 1ă   '/* Changes the Palette of each color to the one specified in the file */'ă      IF BitsPerPixel = 1 AND Loops = 1 THEN Loops = 15ă      OUT &H3C8, Loopsă      IF BitsPerPixel = 1 AND Loops = 15 THEN Loops = 1ă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 3, 1)) \ 4 'Redă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 2, 1)) \ 4 'Greenă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 1, 1)) \ 4 'Blueă   NEXT Loopsăă   '/* Finds correct location of Picture data */'ă   IF LocationOfPictureData = 0 THENă      LocationOfPictureData = LOC(255) + 1ă   ELSEă      LocationOfPictureData = LocationOfPictureData + 1ă   END IFăEND IFăăIF BitsPerPixel = 24 THENă   SCREEN 13ă   PaletteBlue$ = SPACE$(1): PaletteGreen$ = SPACE$(1): PaletteRed$ = SPACE$(1)ă   SEEK #1, LocationOfPictureDataă   FOR Loops = 0 TO 255ă      OUT &H3C8, Loopsă      OUT &H3C9, Loops \ 4ă      OUT &H3C9, Loops \ 4ă      OUT &H3C9, Loops \ 4ă   NEXT Loopsă   ActualWidth = PixelWidth / 320: ActualHeight = PixelHeight / 200ă   IF ActualWidth < 1 THEN ActualWidth = 1ă   IF ActualHeight < 1 THEN ActualHeight = 1ă   IF (4 - ((PixelWidth * 3) MOD 4)) = 4 THENă      LineExtract$ = SPACE$(PixelWidth * 3)ă   ELSEă      LineExtract$ = SPACE$((PixelWidth * 3) + (4 - ((PixelWidth * 3) MOD 4)))ă   END IFă   IF ActualWidth = 1 AND ActualHeight = 1 THENă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #1, , LineExtract$ă         FOR X = 0 TO PixelWidth - 1ă            PaletteBlue$ = MID$(LineExtract$, X * 3 + 1, 1)ă            PSET (X, Y), ASC(PaletteBlue$)ă         NEXT Xă      NEXT Yă   ELSEă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #1, , LineExtract$ă         FOR X = 0 TO PixelWidth - 1ă            PaletteBlue$ = MID$(LineExtract$, X * 3 + 1, 1)ă            PSET (X / ActualWidth, Y / ActualHeight), ASC(PaletteBlue$)ă         NEXT Xă      NEXT Yă   END IFă   EXIT SUBăELSEIF CVL(Compression$) = 1 THENă   PixelColors$ = SPACE$(1): NoOfSameColors$ = SPACE$(1)ă   RightMovement$ = SPACE$(1):  UpMovement$ = SPACE$(1)ă   ActualWidth = PixelWidth / 320: ActualHeight = PixelHeight / 200ă   IF ActualWidth < 1 THEN ActualWidth = 1ă   IF ActualHeight < 1 THEN ActualHeight = 1ă   X = 0: Y = PixelHeight - 1ă   DOă      GET #1, , NoOfSameColors$ă      IF ASC(NoOfSameColors$) <> 0 THENă         GET #1, , PixelColors$ă         IF X + ASC(NoOfSameColors$) = PixelWidth THEN NoOfSameColors$ = CHR$(ASC(NoOfSameColors$) - 1)ă         LINE (X / ActualWidth, Y / ActualHeight)-STEP(ASC(NoOfSameColors$) / ActualWidth, 0), ASC(PixelColors$)ă         X = X + ASC(NoOfSameColors$)ă      ELSEă         GET #1, , PixelColors$ă         IF ASC(PixelColors$) = 0 THENă            X = 0: Y = Y - 1ă            IF Y < 0 THEN EXIT SUBă            '/* Used to skip the unnecessary lines in large picturesă            WHILE Y MOD ActualHeight <> 0ă               DOă                  GET #1, , NoOfSameColors$ă                  IF ASC(NoOfSameColors$) <> 0 THENă                     GET #1, , PixelColors$ă                  ELSEă                     GET #1, , PixelColors$ă                     IF ASC(PixelColors$) = 0 THENă                        EXIT DOă                     ELSEIF ASC(PixelColors$) = 1 THENă                        EXIT SUBă                     ELSEIF ASC(PixelColors$) = 2 THENă                        Bytez$ = SPACE$(2)ă                        GET #1, , Bytez$ă                        EXIT DOă                     ELSEă                        Bytez$ = SPACE$(ASC(PixelColors$))ă                        IF ASC(PixelColors$) MOD 2 = 1 THEN Bytez$ = Bytez$ + " "ă                        GET #1, , Bytez$ă                     END IFă                  END IFă               LOOPă               Y = Y - 1ă            WENDă         ELSEIF ASC(PixelColors$) = 1 THENă            EXIT DOă         ELSEIF ASC(PixelColors$) = 2 THENă            GET #1, , RightMovement$ă            GET #1, , UpMovement$ă            X = X + ASC(RightMovement$): Y = Y + ASC(UpMovement$)ă         ELSEă            PixelColor$ = SPACE$(1)ă            FOR Loops = 1 TO ASC(PixelColors$)ă               GET #1, , PixelColor$ă               PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$)ă               X = X + 1ă            NEXT Loopsă            IF ASC(PixelColors$) MOD 2 = 1 THEN GET #1, , PixelColor$ă         END IFă      END IFă   LOOPă   EXIT SUBăELSEIF CVL(Compression$) = 2 THENă   PixelColors$ = SPACE$(1): NoOfSameColors$ = SPACE$(1)ă   RightMovement$ = SPACE$(1):  UpMovement$ = SPACE$(1)ă   ActualWidth = PixelWidth / 640: ActualHeight = PixelHeight / 480ă   IF ActualWidth < 1 THEN ActualWidth = 1ă   IF ActualHeight < 1 THEN ActualHeight = 1ă   X = 0: Y = PixelHeight - 1ă   DOă      GET #1, , NoOfSameColors$ă      IF ASC(NoOfSameColors$) <> 0 THENă         GET #1, , PixelColors$ă          FOR Loops = 0 TO ASC(NoOfSameColors$) - 1 STEP 2ă             PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColors$) \ 16ă             X = X + 1ă             IF Loops + 1 <> ASC(NoOfSameColors$) THENă                PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColors$) AND 15ă                X = X + 1ă             END IFă          NEXT Loopsă      ELSEă         GET #1, , PixelColors$ă         IF ASC(PixelColors$) = 0 THENă            X = 0: Y = Y - 1ă            IF Y < 0 THEN EXIT SUBă            '/* Used to skip the unnecessary lines in large picturesă            WHILE Y MOD ActualHeight <> 0ă               DOă                  GET #1, , NoOfSameColors$ă                  IF ASC(NoOfSameColors$) <> 0 THENă                     GET #1, , PixelColors$ă                  ELSEă                     GET #1, , PixelColors$ă                     IF ASC(PixelColors$) = 0 THENă                        EXIT DOă                     ELSEIF ASC(PixelColors$) = 1 THENă                        EXIT SUBă                     ELSEIF ASC(PixelColors$) = 2 THENă                        Bytez$ = SPACE$(2)ă                        GET #1, , Bytez$ă                        EXIT DOă                     ELSEă                        PixelColors = ASC(PixelColors$)ă                        IF PixelColors MOD 2 = 1 THENă                           PixelColors = PixelColors + 1ă                        END IFă                        PixelColors = PixelColors / 2ă                        IF PixelColors MOD 2 = 1 THENă                           PixelColors = PixelColors + 1ă                        END IFă                        Bytez$ = SPACE$(PixelColors)ă                        GET #1, , Bytez$ă                     END IFă                 END IFă               LOOPă               Y = Y - 1ă            WENDă         ELSEIF ASC(PixelColors$) = 1 THENă            EXIT DOă         ELSEIF ASC(PixelColors$) = 2 THENă            GET #1, , RightMovement$ă            GET #1, , UpMovement$ă            X = X + ASC(RightMovement$): Y = Y + ASC(UpMovement$)ă         ELSEă            PixelColor$ = SPACE$(1): PixelColors = ASC(PixelColors$)ă            FOR Loops = 0 TO PixelColors - 1ă               IF Loops MOD 2 = 0 THENă                  GET #1, , PixelColor$ă                  PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$) \ 16ă                  X = X + 1ă               END IFă               IF Loops MOD 2 = 1 THENă                  PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$) AND 15ă                  X = X + 1ă               END IFă            NEXT Loopsă            IF PixelColors MOD 2 = 1 THENă               PixelColors = PixelColors + 1ă            END IFă            NoOfBytes = PixelColors / 2ă            IF (NoOfBytes MOD 2) = 1 THENă               GET #1, , PixelColor$ă            END IFă         END IFă      END IFă   LOOPă   EXIT SUBăEND IFăăIF BitsPerPixel = 8 THENă   LineExtract = (INT((PixelWidth - 1) / 4) + 1) * 4ă   LineExtract$ = SPACE$(LineExtract)ă   ActualWidth = PixelWidth / 320ă   ActualHeight = PixelHeight / 200ă   IF ActualHeight <= 1 AND ActualWidth <= 1 THENă      FOR Y = 0 TO PixelHeight - 1ă         GET #1, 1079 + ((PixelHeight - 1) * LineExtract) - (Y * LineExtract), LineExtract$ă         FOR X = 0 TO PixelWidth - 1ă            PSET (X, Y), ASC(MID$(LineExtract$, X + 1, 1))ă         NEXT Xă      NEXT Yă   ELSEă      FOR Y = 0 TO PixelHeight - 1 STEP ActualHeightă         GET #1, LocationOfPictureData + ((LineExtract * (PixelHeight - 1)) - (LineExtract * Y)), LineExtract$ă         FOR X = 0 TO PixelWidth - 1 STEP ActualWidthă            PSET (X / ActualWidth, Y / ActualHeight), ASC(MID$(LineExtract$, X + 1, 1))ă         NEXT Xă      NEXT Yă   END IFăELSEIF BitsPerPixel = 4 THENă   LineExtract = (INT((PixelWidth - 1) / 8) + 1) * 4ă   LineExtract$ = SPACE$(LineExtract)ă   ActualWidth = PixelWidth / 640ă   ActualHeight = PixelHeight / 480ă   IF ActualWidth <= 1 AND ActualHeight <= 1 THENă      FOR Y = 0 TO PixelHeight - 1ă         GET #1, LocationOfPictureData + ((LineExtract * (PixelHeight - 1)) - (LineExtract * Y)), LineExtract$ă         FOR X = 0 TO (PixelWidth / 2) - 1ă            PixelColor = ASC(MID$(LineExtract$, X + 1, 1))ă            PSET (X * 2, Y), PixelColor \ 16ă            IF (X * 2) + 1 < PixelWidth THENă               PSET ((X * 2) + 1, Y), PixelColor AND 15ă            END IFă         NEXT Xă      NEXT Yă   ELSEă      FOR Y = 0 TO PixelHeight - 1 STEP ActualHeightă         GET #1, LocationOfPictureData + ((LineExtract * (PixelHeight - 1)) - (LineExtract * Y)), LineExtract$ă         FOR X = 0 TO (PixelWidth / 2) - 1ă            PixelColor = ASC(MID$(LineExtract$, X + 1, 1))ă            PSET (X / ActualWidth, Y / ActualHeight), PixelColor \ 16ă            IF (X * 2) + 1 < PixelWidth THENă               PSET ((X + 1) / ActualWidth, Y / ActualHeight), PixelColor AND 15ă            END IFă         NEXT Xă      NEXT Yă   END IFăELSEIF BitsPerPixel = 1 THENă   LineExtract = (INT((PixelWidth - 1) / 32) + 1) * 4ă   LineExtract$ = SPACE$(LineExtract)ă   FOR Y = 0 TO PixelHeight - 1ă      DEF SEG = &HA000ă      GET #1, LocationOfPictureData + ((PixelHeight - 1) * LineExtract) - (Y * LineExtract), LineExtract$ă      FOR X = 0 TO CINT(PixelWidth / 8) - 1ă         IF Y < 409 THENă            POKE (Y * 80 + X), ASC(MID$(LineExtract$, X + 1, 1))ă         ELSEă            DEF SEG = &HA7D0ă            POKE ((Y - 400) * 80 + X), ASC(MID$(LineExtract$, X + 1, 1))ă         END IFă      NEXT Xă   NEXT Yă   DEF SEGăEND IFăăEND SUBăăYousuf Philips                 OPENPCX VERSION 0.3            philipz@emirates.net.ae        11-01-98 (05:17)       QB, QBasic, PDS        250  8614     OPENPCX.BAS ''''''''''''''''''''''''''''''''''''''ă' Program    : Loads PCX Files       'ă' Name       : OPENPCX Version 0.3   'ă' Programmer : Yousuf Philips        'ă' Company    : Y P I                 'ă' Updated On : 15th of August 1998   'ă' Email - [philipz85@hotmail.com]    'ă' [http://members.xoom.com/Philipz/] 'ă''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to load PCX files. Steven Sensarns created a PCX loader   */'ă'/* but didn't have any comments about how it worked and has no proper     */'ă'/* programming structure. But the worst thing about it is that it only    */'ă'/* loads 8-bit PCXs which are 320 X 200. This PCX loader is part of a     */'ă'/* series of PCX loaders which have been created by YPI. The source code  */'ă'/* for version 0.1 and 0.2 haven't been distributed and won't because this*/'ă'/* version (0.3) is many times faster. But if you want it then, just ask. */'ă'/* This PCX loader will load any 8-bit PCX.                               */'ăă'/* If you use any of this code in your program then you must credit YPI.  */'ă'/* This program has been placed in Public Domain and All Rights Are       */'ă'/* Reserved.                                                              */'ăă'/* YPI has also created a BMP loader and an FLI player. The source can be */'ă'/* gotten from our website <http://members.xoom.com/Philipz/>             */'ă'/* The YPI Website has programs for beginners, tutorials and utilities.   */'ăăDECLARE SUB PCXInfo (FileName$)ăDECLARE SUB ShowPCX (FileName$)ăăDIM SHARED X, Y, BegX, BegY, EndX AS INTEGERăăCLSăPRINTăPRINT " PCX Loader for QBASIC - By YPI BASIC Programming Incorporation"ăFILES "*.pcx"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă   ENDăELSEIF INSTR(FileName$, ".") = 0 THENă   FileName$ = FileName$ + ".pcx"ăEND IFăăCALL PCXInfo(FileName$)ăWait$ = INPUT$(1)ăCALL ShowPCX(FileName$)ăWait$ = INPUT$(1)ăăSUB PCXInfo (FileName$)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   EXIT SUBăEND IFă  ăCLSăPRINTăă'/* Extract PCX Validation information */'ăValidPCX1$ = SPACE$(1): ValidPCX2$ = SPACE$(1): Version$ = SPACE$(1)ăGET #255, 1, ValidPCX1$ăGET #255, 2, Version$ăGET #255, 3, ValidPCX2$ăă'/* Checks if the file is a valid PCX */'ăIF ASC(ValidPCX1$) <> 10 THENă   PRINT " InValid PCX FILE"ăELSEIF ASC(ValidPCX2$) <> 1 THENă   PRINT " PCX FILE Maybe Corrupted"ăELSEă   PRINT " VALID PCX FILE"ăEND IFăăIF ASC(Version$) = 0 THENă   PRINT " Version - 2.5 of PC PaintBrush"ăELSEIF ASC(Version$) = 2 THENă   PRINT " Version - 2.8 with palette"ăELSEIF ASC(Version$) = 3 THENă   PRINT " Version - 2.8 without palette"ăELSEIF ASC(Version$) = 4 THENă   PRINT " PC PaintBrush for Windows"ăELSEIF ASC(Version$) = 5 THENă   PRINT " Version - 3 or greater"ăEND IFăă'/* Extract number of bits per pixel (bpp), Image Width and Height and */'ă'/* Number of Planes */'ăBitsPerPixel$ = SPACE$(1): WidthInPixels$ = SPACE$(2): HeightInPixels$ = SPACE$(2)ăNoOfPlanes$ = SPACE$(1): ScreenSize$ = SPACE$(8): PaletteInfo$ = SPACE$(2)ăGET #255, 4, BitsPerPixel$ăGET #255, 5, ScreenSize$ăGET #255, 13, WidthInPixels$ăGET #255, 15, HeightInPixels$ăGET #255, 66, NoOfPlanes$ăGET #255, 69, PaletteInfo$ăăPRINTăPRINT " Number of Bits -"; ASC(BitsPerPixel$)ăPRINT " Screen Size - ["; CVI(LEFT$(ScreenSize$, 2)); ","; CVI(MID$(ScreenSize$, 3, 2)); "]";ăPRINT " - ["; CVI(MID$(ScreenSize$, 5, 2)); ","; CVI(RIGHT$(ScreenSize$, 2)); "]"ăPRINT " Width -"; CVI(WidthInPixels$)ăPRINT " Height -"; CVI(HeightInPixels$)ăăPRINTăPRINT " Number Of Planes -"; ASC(NoOfPlanes$)ăPRINT " Palette Information - ";ăIF CVI(PaletteInfo$) = 0 OR CVI(PaletteInfo$) = 1 THENă   PRINT "Color or B&W Image"ăELSEă   PRINT "Gray Scale Image"ăEND IFăCLOSEăăEND SUBăăSUB ShowPCX (FileName$)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   EXIT SUBăEND IFă   ă'/* Extract PCX Validation information */'ăValidPCX1$ = SPACE$(1): ValidPCX2$ = SPACE$(1): Version$ = SPACE$(1)ăGET #255, 1, ValidPCX1$ăGET #255, 2, Version$ăGET #255, 3, ValidPCX2$ăă'/* Checks if the file is a valid PCX */'ăIF ASC(ValidPCX1$) <> 10 THENă   PRINT " InValid PCX File"ă   EXIT SUBăELSEIF ASC(ValidPCX2$) <> 1 THENă   PRINT " PCX File Maybe Corrupted"ă   EXIT SUBăEND IFăăIF ASC(Version$) <> 5 THENă   PRINT " OPENPCX only supports Version 5 of PCX Files "ă   PRINT " PLEASE SEND A COPY OF THIS IMAGE TO philipz85@hotmail.com"ă   PRINT " HOPEFULLY WE WILL OPEN IT IN THE NEXT VERSION"ă   EXIT SUBăEND IFăă'/* Extract number of bits per pixel (bpp), Image Width and Height and */'ă'/* Number of Planes */'ăBitsPerPixel$ = SPACE$(1): WidthInPixels$ = SPACE$(2): HeightInPixels$ = SPACE$(2)ăScreenSize$ = SPACE$(8): BytesPerLine$ = SPACE$(2)ăGET #255, 4, BitsPerPixel$ăGET #255, 5, ScreenSize$ăGET #255, 13, WidthInPixels$ăGET #255, 15, HeightInPixels$ăGET #255, 67, BytesPerLine$ăă'/* Only 8-bit PCX's can be opened in this version of OpenPCX */'ăIF ASC(BitsPerPixel$) <> 8 THENă   Wordz$ = "THIS VERSION OF OPENPCX ONLY SUPPORTS 8-BIT PCX's"ă   LOCATE , (80 - LEN(Wordz$)) / 2: PRINT Wordz$ă   EXIT SUBăEND IFăă'/* If the Encoded program didn't specify the Width and Height in Pixels */'ăIF BytesPerLine$ = MKI$(0) THENă   BytesPerLine$ = MKI$(CVI(MID$(ScreenSize$, 5, 2)) - CVI(LEFT$(ScreenSize$, 2)) + 1)ăEND IFăHeightInPixels$ = MKI$(CVI(RIGHT$(ScreenSize$, 2)) - CVI(MID$(ScreenSize$, 3, 2)) + 1)ăWidthInPixels$ = BytesPerLine$ăăSCREEN 13ăăSEEK #255, LOF(255) - 767ăPaletteRed$ = SPACE$(1): PaletteGreen$ = SPACE$(1): PaletteBlue$ = SPACE$(1)ăFOR Loops = 0 TO 255ă   GET #255, , PaletteRed$ă   GET #255, , PaletteGreen$ă   GET #255, , PaletteBlue$ă   OUT &H3C8, Loopsă   OUT &H3C9, ASC(PaletteRed$) \ 4ă   OUT &H3C9, ASC(PaletteGreen$) \ 4ă   OUT &H3C9, ASC(PaletteBlue$) \ 4ăNEXT LoopsăăActualWidth = CVI(WidthInPixels$) / 320ăActualHeight = CVI(HeightInPixels$) / 200ăIF ActualWidth < 1 THEN ActualWidth = 1ăIF ActualHeight < 1 THEN ActualHeight = 1ăăSEEK #255, 129ăNumberOfLoops$ = SPACE$(1): PixelColor$ = SPACE$(1): X = 0: Y = 0ă'/* If the image will fit properly on screen 13 */'ăIF ActualWidth = 1 AND ActualHeight = 1 THENă   DOă      GET #255, , NumberOfLoops$ă      IF ASC(NumberOfLoops$) > 191 THENă        '/* If the ascii of the byte extracted from the file has a value   */'ă        '/* greater than 191 then the ascii of the byte - 192 gives the    */'ă        '/* number of following pixels which have the color of the ascii of*/'ă        '/* of the next byte extracted from the file                       */'ă         GET #255, , PixelColor$ă         LINE (X, Y)-STEP(ASC(NumberOfLoops$) - 192, 0), ASC(PixelColor$)ă         X = X + ASC(NumberOfLoops$) - 192ă      ELSEă        '/* If the ascii of the byte extracted from the file has a value   */'ă        '/* less then 192 then the ascii is the color of the following pixel*/'ă         PixelColor$ = NumberOfLoops$ă         PSET (X, Y), ASC(NumberOfLoops$)ă         X = X + 1ă      END IFă      '/* When the variable X has the value which is equal to the Width of */'ă      '/* image then it jumps to the beginning of the next line            */'ă      IF X >= CVI(WidthInPixels$) THENă         X = 0: Y = Y + 1ă      END IFă   LOOP UNTIL Y >= CVI(HeightInPixels$) - 1ăELSEă   '/* The below is the same code as the above exept it resizes the image   */'ă   '/* so that it fits the screen                                           */'ă   DOă      GET #255, , NumberOfLoops$ă      IF ASC(NumberOfLoops$) > 191 THENă         GET #255, , PixelColor$ă         BegX = X / ActualWidth: BegY = Y / ActualHeightă         EndX = (ASC(NumberOfLoops$) - 192) / ActualWidthă         LINE (BegX, BegY)-STEP(EndX, 0), ASC(PixelColor$)ă         X = X + (ASC(NumberOfLoops$) - 192)ă      ELSEă         PixelColor$ = NumberOfLoops$ă         BegX = X / ActualWidth: BegY = Y / ActualHeightă         PSET (BegX, BegY), ASC(PixelColor$)ă         X = X + 1ă      END IFă      IF X >= CVI(WidthInPixels$) THENă         X = 0: Y = Y + 1ă      END IFă   LOOP UNTIL Y >= CVI(HeightInPixels$) - 1ăEND IFăCLOSEăăEND SUBăYousuf Philips                 OPENAVI VERSION 0.3            philipz@emirates.net.ae        11-01-98 (05:17)       QB, QBasic, PDS        478  18566    OPENAVI3.BAS''''''''''''''''''''''''''''''''''''''ă' Program    : Plays AVI Files       'ă' Name       : OPENAVI Version 0.3   'ă' Programmer : Yousuf Philips        'ă' Company    : Y P I                 'ă' Updated On : 25th of Oct. 1998     'ă' Email - [philipz85@hotmail.com]    'ă' [http://members.xoom.com/Philipz/] 'ă''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to play AVI files in QBASIC.                              */'ă'/*                                                                        */'ă'/* What's New -                                                           */'ă'/*            * 24-BIT uncompressed AVIs won't play                       */'ă'/*            * Only plays 8-BIT AVIs which are smaller than (321 X 201)  */'ă'/*            * AVI image is not converted to BSAVE file                  */'ă'/*            * Smartdrv is no longer needed                              */'ă'/*            * Interrupts have been added to blast the display of AVI    */'ă'/*                                                                        */'ă'/* What's Great -                                                         */'ă'/*            * Delay Function will work perfectly on any PC              */'ă'/*            * AVI displays very fast (even on a 486)                    */'ă'/*                                                                        */'ă'/* Some Notes -                                                           */'ă'/*            In the file format of the AVI there is a value which tells  */'ă'/*            how many miliseconds should be delayed after each frame, so */'ă'/*            the FUNCTION Delay was created to delay the required time   */'ă'/*            after each frame (It will work the same on any computer).   */'ă'/*            If you don't want to run the delay after each frame, then   */'ă'/*            you should comment (') out line 165.                        */'ăă'/* An original program created by the professional programmers at YPI.    */'ă'/* If you use any of this code in your program then you must credit YPI,  */'ă'/* it would be appreciated if you sent us a copy of your program also.    */'ă'/* Please send your comments and suggestions to <philipz85@hotmail.com>   */'ăă'/* YPI has also created a BMP loader, PCX loader and an FLI player. The   */'ă'/* source can be gotten from our website <http://members.xoom.com/Philipz/>*/'ă'/* The YPI Website has programs for beginners, tutorials and utilities.   */'ăăDECLARE SUB GetSpeed ()ăDECLARE SUB ShowAVI (FileName$)ăDECLARE SUB Delay (MiliSeconds%)ă'/* 4 Added functions to use interrupt &H21 */'ăDECLARE SUB Close21 (Handle%)ăDECLARE SUB Seek21 (Handle%, Offset!)ăDECLARE SUB Open21 (FileName$, Handle%)ăDECLARE SUB Get21 (Handle%, NoOfBytesToRead%, VariableSegment%, VariableOffset%)ă'/* 2 Added functions to call interrupts in QBASIC 1.0 */'ăDECLARE SUB NewInterrupt (intnum AS INTEGER, Regs AS ANY)ăDECLARE SUB InitInterrupt ()ăăTYPE RIFFHeaderTypeă   ValidID AS STRING * 4          '/* Must be  = 'RIFF'ă   SizeOfFile AS LONG             '/* Size of AVI file in bytesă   RIFFFileType AS STRING * 4     '/* RIFF file type - Must be = 'AVI 'ăEND TYPEăăTYPE AVIHeaderă   ValidID AS STRING * 4          '/* Must be = 'avih'ă   BytesInHeader AS LONG          '/* Bytes in AVI Headeră   MicrosecPerFrame AS LONG       '/* Number of Milliseconds between each Frameă   MaximumBytesPerSec AS LONG     '/* Number of bytes the system must handleă				  '/* per second for the avi to run smoothlyă   Reserved1 AS LONG              '/* Reserved must be 0ă   BitFlags AS LONG               '/* Bit Flagsă   TotalFrames AS LONG            '/* Total Number of Framesă   InitialFrame AS LONG           '/* Not Understoodă   NoOfStreams AS LONG            '/* Number of Streamsă   BufferSize AS LONG             '/* Buffer size to read a frameă   Widthz AS LONG                 '/* Width of AVIă   Heightz AS LONG                '/* Height of AVIă   Scale AS LONG                  '/* Not Understood (Not Important)ă   Rate AS LONG                   '/* Not Understood (Not Important)ă   Start AS LONG                  '/* Not Understood (Not Important)ă   Length AS LONG                 '/* Not Understood (Not Important)ăEND TYPEăăTYPE StreamHeaderă    HeaderID AS STRING * 4        '/* Must be  = 'strh'ă    BytesInHeader AS LONG         '/* Bytes in Stream Headeră    Typez AS STRING * 4           '/* Type of Stream Headeră				  '/* vids - For Video Streamă				  '/* auds - For Audio Streamă    Handle AS STRING * 4          '/* Name of Compressoră    BitFlags AS LONG              '/* Not Understood (Not Important)ă    Reserved1 AS LONG             '/* Not Understood (Not Important)ă    InitialFrames AS LONG         '/* Not Understood (Not Important)ă    Scale AS LONG                 '/* Not Understood (Not Important)ă    Rate AS LONG                  '/* Not Understood (Not Important)ă    Start AS LONG                 '/* Not Understood (Not Important)ă    Length AS LONG                '/* Not Understood (Not Important)ă    BufferSize AS LONG            '/* Not Understood (Not Important)ă    Quality AS LONG               '/* Not Understood (Not Important)ă    SampleSize AS LONG            '/* Not Understood (Not Important)ăEND TYPEăăTYPE StreamFormată    StreamFormatID AS STRING * 4  '/* Must be = 'strf'ă    BytesInFormat AS LONG         '/* Number of Bytes in Stream FormatăEND TYPEăăTYPE BMPInfoHeader                '/* Windows 3.x BMP Information Headeră    SizeOfHeader AS LONG          '/* Number of Bytes of Header = 40ă    ImageWidth AS LONG            '/* Width of AVIă    ImageHeight AS LONG           '/* Height of AVIă    Planes AS INTEGER             '/* Planes - Must be 1ă    BitsPerPixel AS INTEGER       '/* Bits Per Pixel - 8 or 24ă    CompressMethod AS LONG        '/* Compression Methodă				  '/* 0 - Uncompressedă				  '/* 1 - 8-BIT RLEă				  '/* 2 - 4-BIT RLE (Impossible)ă    ImageSizeInBytes AS LONG      '/* Number of bytes in every imageă    HorizontalRatio AS LONG       '/* Not Importantă    VerticalRatio AS LONG         '/* Not Importantă    ColorsUsed AS LONG            '/* Number of used colorsă    ImportantColors AS LONG       '/* Number of Important colorsăEND TYPEăăTYPE JunkChunk                    '/* Junk Chunk - Used for paddingă   ChunkID AS STRING * 4          '/* Must be = 'JUNK'ă   EmptyCharacters AS LONG        '/* Number of empty bytesăEND TYPEăăTYPE ImageData                   '/* Image Data - Specifies type of Image Dataă   ChunkID AS STRING * 4          '/* Type of image dataă				  '/* db - Bitmap Uncompressed dataă				  '/* dc - Bitmap Compressed dataă				  '/* wb - Sound dataă				  '/* pc - Palette Changeă   NumberOfBytes AS LONG          '/* Number of Bytes of dataăEND TYPEăăTYPE ChangingPalette              '/* Changing Palette for different colorsă   FirstColor AS STRING * 1ă   NumberOfColorsToChange AS STRING * 1ă   BitFlags AS INTEGERăEND TYPEăăTYPE RegType                       '/* Registers for Interruptsă     ax    AS INTEGERă     bx    AS INTEGERă     cx    AS INTEGERă     dx    AS INTEGERă     bp    AS INTEGERă     si    AS INTEGERă     di    AS INTEGERă     flags AS INTEGERă     ds    AS INTEGERă     es    AS INTEGERăEND TYPEăăCOMMON SHARED Regs AS RegType, Speed&ăDIM SHARED Intrpt(1 TO 50) AS INTEGERăă'/* Initializes Interrupt Functions (Very Important, don't touch)          */'ăInitInterruptăăCLSă'/* Comment out GetSpeed if you don't want to have a delay between frames  */'ăGetSpeedăăPRINTăPRINT " 1st QBASIC AVI Player (ver 0.3) - By YPI (BASIC Programming Incorporation)"ăPRINT " Press Any Key When You Want The AVI To Stop Playing (Don't press Ctrl-Break)"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă   ENDăELSEIF INSTR(FileName$, ".") = 0 THENă   FileName$ = FileName$ + ".avi"ăEND IFăăCALL ShowAVI(FileName$)ăWait$ = INPUT$(1)ăWHILE INKEY$ <> "": WENDăă'/* Some ending statements for those how didn't read the comments at the   */'ă'/* beginning of the program.                                              */'ăSCREEN 2: SCREEN 0ăPRINT " 1st QBASIC AVI Player (ver 0.3) - By YPI (BASIC Programming Incorporation)"ăPRINT " Program is Public Domain, (c) Copyrighted by YPI, All Rights Reserved"ăPRINT " Programmed By Yousuf Philips in 1998"ăPRINT " Send suggestions and comments to philipz85@hotmail.com"ăPRINT " If you have any information of AVI compression algorithms, please contact me"ăPRINT " Visit the YPI Website at http://members.xoom.com/Philipz/"ăWait$ = INPUT$(1)ăăDEFINT A-ZăSUB Close21 (Handle)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H3E00ăRegs.bx = HandleăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăDEFSNG A-ZăSUB Delay (MiliSeconds%)ă'/* This function slows down the program for the given amount of Miliseconds */'ăăDelayTime = (Speed& * 5) * (MiliSeconds% / 1000)ăFOR Speed = 1 TO DelayTimeăNEXT SpeedăăEND SUBăăDEFINT A-ZăSUB Get21 (Handle, NoOfBytesToRead, VariableSegment, VariableOffset)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H3F00ăRegs.bx = HandleăRegs.cx = NoOfBytesToReadăRegs.ds = VariableSegmentăRegs.dx = VariableOffsetăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăDEFSNG A-ZăSUB GetSpeedă'/* This function finds out the proper delay period needed for the current PC*/'ăăPRINT " Calculating delay for Delay Function according to your PC"ăTime& = TIMER: Time& = Time& + 1: Speed& = 0ăDOăLOOP UNTIL TIMER >= Time&ăDOă   Speed& = Speed& + 1ăLOOP UNTIL TIMER >= Time& + 1ăă'/* Testing the calculated delay period with the Delay FUNCTION            */'ăTime! = TIMERăDelay 1000ăTime! = TIMER - Time!ăă'/* If the Delay FUNCTION was not accurate then it is adjusted             */'ăIF Time! < 1 THENă   Speed& = INT(Speed& * (1 / Time!))ăEND IFăăEND SUBăăDEFINT A-ZăSUB InitInterruptă'/* Don't edit this SUB period.                                            */'ăăInterruptData$ = CHR$(85) + CHR$(139) + CHR$(236) + CHR$(86) + CHR$(87) + CHR$(30) + CHR$(139) + CHR$(118) + CHR$(6) + CHR$(139) + CHR$(4) + CHR$(139) + CHR$(92) + CHR$(2)ăInterruptData$ = InterruptData$ + CHR$(139) + CHR$(76) + CHR$(4) + CHR$(139) + CHR$(84) + CHR$(6) + CHR$(139) + CHR$(108) + CHR$(8) + CHR$(139) + CHR$(124) + CHR$(12) + CHR$(142) + CHR$(68) + CHR$(18)ăInterruptData$ = InterruptData$ + CHR$(255) + CHR$(116) + CHR$(10) + CHR$(131) + CHR$(124) + CHR$(18) + CHR$(255) + CHR$(117) + CHR$(2) + CHR$(30) + CHR$(7) + CHR$(131) + CHR$(124) + CHR$(16) + CHR$(255)ăInterruptData$ = InterruptData$ + CHR$(116) + CHR$(3) + CHR$(142) + CHR$(92) + CHR$(16) + CHR$(94) + CHR$(205) + CHR$(33) + CHR$(85) + CHR$(139) + CHR$(236) + CHR$(30) + CHR$(86) + CHR$(142) + CHR$(94) + CHR$(2) + CHR$(139) + CHR$(118) + CHR$(14)ăInterruptData$ = InterruptData$ + CHR$(137) + CHR$(4) + CHR$(137) + CHR$(92) + CHR$(2) + CHR$(137) + CHR$(76) + CHR$(4) + CHR$(137) + CHR$(84) + CHR$(6) + CHR$(143) + CHR$(68) + CHR$(10) + CHR$(143) + CHR$(68) + CHR$(16)ăInterruptData$ = InterruptData$ + CHR$(143) + CHR$(68) + CHR$(8) + CHR$(137) + CHR$(124) + CHR$(12) + CHR$(140) + CHR$(68) + CHR$(18) + CHR$(156) + CHR$(143) + CHR$(68) + CHR$(14)ăInterruptData$ = InterruptData$ + CHR$(95) + CHR$(95) + CHR$(94) + CHR$(93) + CHR$(202) + CHR$(2) + CHR$(0)ăăDEF SEG = VARSEG(Intrpt(1))ăaddress = VARPTR(Intrpt(1))ăăFOR I = 0 TO 99ă    POKE address + I, ASC(MID$(InterruptData$, I + 1, 1))ăNEXTăăEND SUBăăSUB NewInterrupt (intnum AS INTEGER, Regs AS RegType)ă'/* Don't edit this SUB period.                                            */'ăă  DEF SEG = VARSEG(Intrpt(1))ă  address = VARPTR(Intrpt(1))ă  POKE address + 51, intnumă			    ă  CALL ABSOLUTE(Regs, address)ăăEND SUBăăSUB Open21 (FileName$, Handle)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăFileName$ = FileName$ + CHR$(0)ăRegs.ax = &H3D00ăRegs.ds = VARSEG(FileName$)ăRegs.dx = SADD(FileName$)ăCALL NewInterrupt(&H21, Regs)ăFileName$ = LEFT$(FileName$, LEN(FileName$) - 1)ăHandle = Regs.axăăEND SUBăăSUB Seek21 (Handle, Offset!)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H4200ăRegs.bx = HandleăRegs.cx = Offset! \ 65536ăRegs.dx = (Offset! AND 32767) - (Offset! AND 32768)ăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăSUB ShowAVI (FileName$)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   EXIT SUBăEND IFăă'/* Creates the necessary structure types for easy extraction of data      */'ăDIM RIFFHeaderType AS RIFFHeaderTypeăDIM AVIHead AS AVIHeaderăDIM StreamHead AS StreamHeaderăDIM StreamForm AS StreamFormatăDIM BMPInfoHead AS BMPInfoHeaderăDIM ImageDataz AS ImageDataăăGET #255, , RIFFHeaderTypeă'/* Checks if the opened file is an AVI file                               */'ăIF RIFFHeaderType.RIFFFileType <> "AVI " THENă   PRINT " INVALID AVI FILE"ă   ENDăEND IFăăGET #255, 25, AVIHeadăIF AVIHead.ValidID <> "avih" THENă   PRINT " Invalid AVI File Header"ă   EXIT SUBăELSEIF AVIHead.Widthz > 320 OR AVIHead.Heightz > 200 THENă   PRINT " AVI Image Is To Large"ă   EXIT SUBăEND IFăă'/* Adjusting the delay extracted from the file so that it will work well  */'ă'/* with the FUNCTION Delay                                                */'ăAVIHead.MicrosecPerFrame = AVIHead.MicrosecPerFrame / 1000ăă'/* Search through file to find 'LIST', which indicates the starting of a  */'ă'/* stream data area */'ăSearch1:ăPosition& = LOC(255) + 1: DWord$ = SPACE$(4)ăDOă   GET #255, Position&, DWord$ă   Position& = Position& + 4ăLOOP UNTIL DWord$ = "LIST"ăGET #255, , DWord$ăGET #255, , DWord$ăă'/* If the characters 'strl' are encounted then it indicates the beginning of*/'ă'/* a stream data area                                                     */'ăIF DWord$ = "strl" THENă   Position& = LOC(255) + 1ă   GET #255, , StreamHeadă   '/* Checks if the stream is a video stream indicated by the characters  */'ă   '/* 'vids', audio stream is indicated by the characters 'auds'          */'ă   IF StreamHead.Typez <> "vids" THENă      Searchz = Searchz + 1ă      IF Searchz > 2 THENă	 PRINT " Not Possible For AVI To Have More Than 2 Streams"ă	 PRINT " Please Send This AVI To <philipz85@hotmail.com>"ă	 EXIT SUBă      END IFă      GOTO Search1ă   END IFă   SEEK #255, Position& + StreamHead.BytesInHeader + 8ă   GET #255, , StreamFormă   GET #255, , BMPInfoHeadă   IF BMPInfoHead.BitsPerPixel <> 8 THENă      PRINT " Only 8-BIT AVIs Can Be Played"ă      EXIT SUBă   ELSEIF BMPInfoHead.CompressMethod <> 0 THENă      PRINT " Only Uncompressed AVIs Can Be Played"ă      EXIT SUBă   END IFă   '/* Changes graphix screen to SCREEN 13 and changes the color palettes */'ă   SCREEN 13ă   Palette$ = SPACE$(1024)ă   GET #255, , Palette$ă   FOR Loops = 0 TO 255ă      OUT &H3C8, Loopsă      OUT &H3C9, INT(ASC(MID$(Palette$, (Loops * 4) + 3, 1)) / 4)ă      OUT &H3C9, INT(ASC(MID$(Palette$, (Loops * 4) + 2, 1)) / 4)ă      OUT &H3C9, INT(ASC(MID$(Palette$, (Loops * 4) + 1, 1)) / 4)ă   NEXT LoopsăELSEă   PRINT " UNABLE TO USE AVI FILE"ă   EXIT SUBăEND IFăă'/* Calculate the number of bytes to extract for each image line */'ăIF 4 - (BMPInfoHead.ImageWidth MOD 4) = 4 THENă   BytesToExtract = BMPInfoHead.ImageWidthăELSEă   BytesToExtract = BMPInfoHead.ImageWidth + (4 - (BMPInfoHead.ImageWidth MOD 4))ăEND IFăă'/* Search through file to find 'MOVI', which indicates the beginning of AVI */'ă'/* image area */'ăSearch:ăPosition& = LOC(255) + 1ăDOă   GET #255, Position&, DWord$ă   Position& = Position& + 4ă   IF Position& >= LOF(255) THENă      PRINT " Movie Chunk Not Found"ă      EXIT SUBă   END IFăLOOP UNTIL DWord$ = "LIST"ăGET #255, , DWord$ăGET #255, , DWord$ăIF DWord$ <> "movi" THEN GOTO SearchăăRealCurrentLocation! = LOC(255)ăHeightAdjust = (200 - BMPInfoHead.ImageHeight) \ 2ăWidthAdjust = (320 - BMPInfoHead.ImageWidth) \ 2ăIF HeightAdjust < 0 THEN HeightAdjust = 0ăIF WidthAdjust < 0 THEN WidthAdjust = 0ăCLOSEăă'/* Reopen the AVI file */'ăCALL Open21(FileName$, AVIHandle)ăăRepeat:ăCurrentLocation! = RealCurrentLocation!ăăCALL Seek21(AVIHandle, CurrentLocation!)ăăIF DWord$ = "movi" THENă   FOR FrameNumber = 1 TO AVIHead.TotalFramesă      CALL Get21(AVIHandle, LEN(ImageDataz), VARSEG(ImageDataz), VARPTR(ImageDataz))ă      IF RIGHT$(ImageDataz.ChunkID, 2) = "db" THENă	 FOR YHeight = BMPInfoHead.ImageHeight - 1 TO 0 STEP -1ă	    IF YHeight + HeightAdjust < 100 THENă	       CALL Get21(AVIHandle, BytesToExtract, &HA000, (YHeight + HeightAdjust) * 320 + WidthAdjust)ă	    ELSEă	       CALL Get21(AVIHandle, BytesToExtract, &HA7D0, (YHeight + HeightAdjust - 100) * 320 + WidthAdjust)ă	    END IFă	 NEXT YHeightă      ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "pc" THENă	 '/* Skipping the color changing                                   */'ă      ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "wb" THENă	 '/* Skipping the sound part of the avi if there is.               */'ă	 FrameNumber = FrameNumber - 1ă      ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "dc" THENă	 '/* Ending program because compressed data was encountered        */'ă	 CALL Close21(AVIHandle)ă	 SCREEN 2: SCREEN 0ă	 PRINT " Only Uncompressed AVIs Can Be Played"ă	 EXIT SUBă      ELSEă	 CALL Close21(AVIHandle)ă	 SCREEN 2: SCREEN 0ă	 PRINT " Something Went Wrong"ă	 PRINT " Please Send This AVI To <philipz85@hotmail.com>"ă	 EXIT SUBă      END IFă      '/* Delay FUNCTION - slows down display according to speed given from*/'ă      '/* AVI file                                                         */'ă      Delay (AVIHead.MicrosecPerFrame)ă      '/* Checks if the user presses a key                                 */'ă      IF INKEY$ <> "" THENă	 CALL Close21(AVIHandle)ă	 EXIT SUBă      END IFă      CurrentLocation! = CurrentLocation! + ImageDataz.NumberOfBytes + 8ă      CALL Seek21(Handle, CurrentLocation!)ă   NEXT FrameNumberăEND IFăăGOTO RepeatăăEND SUBăYousuf Philips                 SAVE SCREEN 13 AS .BMP         philipz@emirates.net.ae        11-01-98 (05:17)       QB, QBasic, PDS        70   4567     SAVEBMP.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SAVEBMP.ZIP",4^6:Z&=3147:?STRING$(50,177);ăU"%up()[9%%9m-%B/&,Jxs+D^E-7%%9;%%%0%%%%xf&%jgr%uSgfOx6'<&BG\7cwgăU"Ow:hf,<f<+29?t[nJPx\4''H*(*?%,'y#c-kOD=6I9UI;,dpDNVKBEUXEYE62z+ăU"q21Hf.CDpQLV9#Qk%vAJC'b'*&2;&CcfU2eFA5D_gB.&_B/?3oP8AD[jak2t*.LăU"4%:q[G^9*2B52^IOTSW2F,G0U&ODC^dHt)2g0Z&[J3C,g2Sw:uJj<gpn-gVjs3GăU"Zg-fZ9MTHSFc.?5wPk.>?;Q4zmJKZpT?gZf^R(E=r*^GD\fxSWIGkVanHMr0AHnăU"ZDRDa*KL*w4>YPU\/[g<^oSA=4/o9,,PIK;;Zl:6BLMSK;He[zefZCHeEDZneUqăU".eWZE[R>_G_d/o8UU&tn2xN'HKVUgN9390->7I:er4bQ$5$L#3zBB\6nzDl+?pLăU"Io9;)Py>*,iaIWT/O/BNa2l6Sf68\aq<^RB.r'1'BIQ]B%uA(^^'=I9;uBZ\Lo*ăU"DL2b:]J'VVW.*a6V)y/ujW&Eja]<w*5s&7lQ^sB$p_'Lnlk#3wY.fgozU71gG8uăU"RO''&Il7(C)l1<Z.Ya/wpC9==rxa4^x#=nK=n_NwGc(2E^=Wq+b\I[a+b]fx&)FăU"Z_nN6#ILE,%nKJRohd=4'XMATC5VS94[S>eilta:R8+w,foK+W2Bs-iNTg:\b%WăU"0,sn&(<a[]12E_v[4[Rt#+j[MYAeq?_Z3R?Suf*%h&8]LW-3X:DA,nmc;Z?jV]^ăU"4Ucg?9ob]c7P3sh$F8,Zxe-PDd_g>Rud4zkoqdIo2N'#rp)<k8g0S1h>t1Y2;8:ăU":2AR5JNBq#j%$30G_7zw'nXc+p8mT-UZ5jANe.P(XT;l^wQhnUl8x,,4q,*AB5făU"NP-$rWjuRjB'Tru7xXr[NoiuJw8&%^zW^=]._xVDbqmPgcyl9RU\W/iv8o.Gw7/ăU"BT*_2S6WL7',)o#1;*Ndh_>SF*k>3Zjw4[0rx.iI#&.Cfr:.M'hWF*=Tt0S44yGăU"Ix]H#fd*5AY=^tpL[b4AZuI)Rg^DxEy]=u1$tAJh4yBLvD-W;H4(s,p.Vt;OKh^ăU"Mk28&Mx^?8HD$N5/^7W0nlB];UmDicaSHb_gCU1uVU8oMudr-&6]qh2yI['8\j-ăU"bo'hLwtl0WN0b)zBcY_G[gU6n1GS2OCp:v#x;CwaQn2rvOq7Dwg<*?20O>2F<4hăU"k&6qg\FqgFf:u[OIq=R(4.BVylp4+Wm8yJb-oLb9i(-1SbTJDh*LBtjA)hSX*KQăU"BCjS<;Wv'dKcq>p:XRhuT=D9?Uaw/9ui\HI5Srd\6+-tL_T:E-RaV9rQ&RR%k?HăU"bhk(G(^YXeZGN_(+K-r>lgu+6fI>&NjkGLi,xlxWBB/2;QTJ&/='=Qaqn;+D<g%ăU"6EDTuIM\gHnjJGSs86-0xWKvb<OSJT.p,Z)Hn>[,-&Y\iR;zr?o;KYTrU#\0duVăU"()/p2i+Ze1zNvbsS;mC(tkw*?ol#SO2B0bkKSqtkgJXotVXU,O8CL\-l=<.qq37ăU"U47.[aGK]Q,_JM[QWLSA2D1,>ItgRC=+SO:Ym?Rs'$-iLqiA.&.5roV:0#M+Xb.ăU"nTA#\e($Bl1P1p5HMRy0^9xM?/DK%A4k-$?B(KFbUa$j$^q+s<D,03R1<%e?SL_ăU"jTqaTAaDS0tT=OO2v-+FDe0n:kg7vb1CcpZz&>U+(3[NWh3B?Pd1>:gDS&Ha(PgăU"RN(CoS?g^U26W&&0o]dnKn2S6LT3.;D/wecL\uc_B9f]\iS2o.+fl_o&-M6R+:<ăU"GtEO/2%uiQuJ+ek6&DT.Mk:cpk::OCv[u+oCf_X_kA#w[A6-,<^/q]X+0E[9<^wăU">)&[lMS%XC4cO%g7.k%e=<JA[g9eh<Y<GS^9]s4/dn/__CbF>tWQK\X?U<9AN/-ăU"LarQs7ZiQh:/D2p$+ioC=LG03Cb3pC=5sd8\PxvrlT)BRBs*;keWRUHG,elC<b3ăU"KI_Z<gKW\yUSbTU=gfGD*Z0+X5[Hbma&qIao#-fw8Bhq278DMlBriWRXR?K1\GJăU"TiLB.r_Db*)C-g_q:==paw<S9/HMT&sLQ&FS;Bv8J:n:6SG),]S2G04C8X=j6\găU"dr&A6Wq,%%,LK]]3YCMp&H$6\D'u=1/V2>dH08qHeYep'uUTyw7IwJXFgyD-NFSăU"Zb8Zs$L,XyrH5FX4Khj:9lHfaGcl=/FIjS);4]O(PEjrKgL%RYm/cSUA.8Nhhg,ăU"iaA<;c*4i>i]1$w_90:eNK\a=&/6Xsl67NfHCMdyB/Rc><8Ll;prMhF2pI7DV:văU"N+Ex'tepy]e$L2Z6Kt\W4bpq6Wt_9Yln[b:mGA;PXh#t0WL8>%13LLB?dpHve*ZăU"ZJ/PBwasEJDmti6wa;F0P1Ti?beAogwqG)5.;S*(9M^.U_98AZIwqBbAKc*0up6ăU"E,xnMldNn<$tH).UbI/B48TyVnNBf+:j;hZ=,Y%A5tZX.llJ\Y:^uxRNSQw,M-căU"'kr>gF6.5k/mSO6'H*o>O+(cBO9iK2yvnk^Kc)7dr^8dGzzN;ueZ6h$s+&:3HsoăU"Q2i79<a^5Y>-VsYn/x-_LF\F7eWr/Qj_ka]meZ>C-wMLY+mG(C:a$<N<ZEQKPrVăU"qA_c+SSPfg5#.EX<obBnh$KGjFTLnlD?ec$&b:[Aa[0#bfWnx_$bWj:>;qC\smfăU"\*Lv%Tup(%)9%%[%-%FAT*J*TCr5.#&%%T%'%%/%%%%w%jfir#jSy'1yL$t,:UUăU"5l>hPvF3h;'-is9-;pc_Tij<p6omMT,BO5prk'k=6Gn7H:1hI7PIUkrH$8h\,c2ăU";dHqf<.>:bMg#jaUN#(0^)25Lvn+5wwA[q&(l<BK/_3%uLc>6oMRb5a^WXX,a(jăU"]AI20ND)(.azLagM%He56MBKK1KPtVhotP6&6d9&T;I<3_krNgXojE:AKLx_BBIăU";^H;kN-NMijH.(J7*p\F/)'n7IkA=lO\0u&VnmP^,%p)QSJXuK%1C:Xq6=H)A1LăU"i#sMu.FnStBh(.iSw=sU*GlANS4cM*HdXa?;mvi^Vqg)^aA]XWWK,a?kT'8qvX(ăU"C#iU(,/%%jw31z:lZ'FoNPX1k)Kh0o%^rTLB2dx6RrhfKLf#WA\L6K'jKe^uXoTăU"^J$MuCv7-C,ZloC)5HO9l'D/'HhmMo1/-_6c,k;04YHMHg%]2s5N(%up()%9%%%ăU"#-%pR#HJU\0Oqe&7%%L'%%%.%%%%kn%qjxSCy'y<jw:]LRU56&9cd5#:<a+Q_ocăU"8VI[PY'(9<G)3Uk3wS*oe/U$,+.KH]8&L9Dc'6CEj\ZHl++^%TIUDzeAcPU$^.'ăU"t167CT0?K+>S6\EdD7o$Jd-roi'r_VJIp_sF7T]AB+$ASdz6&mkX^OJ7TcEC57+ăU",arRo-aRNTF-(jIz(Jp=y0/)>spqfZ=S$EmW6WQXKXmF0^,8s2\0050)Q,>68]xăU"jfGg$?*&DiUQ8%4\_telh2eE-SL8GGu*:VCdd,rkP(opK-X;gv4Cf-';WCMqU=QăU"B7rSpQlrg=&E4N5#<d/U3^u2:u?O%B\i3d,uv8atcvPY#j03_5i*U,].Od*pl;lăU")D6jMfk&luRiM,*A]L#Ix)]NdLh7dn\haR'q#Q9H0;[T3YDn]E6h4d'%B/DJ(<0ăU"xVu0'Iz[8c%1L;6Ga&C#yPD+ojwb<0u\lyC^w+rp>GZGA*z3mu_[,ctv6g$o+atăU"shJ/ZQ;'V7JBZ-Y.h//6v>3IrO(,DI2^viH>lD>Aj%<up&%'9%9%%%e-X%B/,%JăU"xsD'^E-%+%9;%%%0%%%%%%%%%&%E%%%%%%%%%x(f%jg%ruSg%fxup%&'9%%9%%%ăU"R-%FTd*J*C4r5.&.%%T'%%%/%%%%%%%%%&%%E%%%%n-%%%wjfi%rjSy&'yup%&'ăU"9%%9%%%#-%pR#HJU\0Oqe&7%%L'%%%.%%%%%%%%%&%%E%%%'I.%%%knqj#xSy'%ăU"yup*%+%%%%%(%((%w%%(%\0%%%%%ăEND SUBăCLOSE:IF S=205AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăATyler85@aol.com               SVGA 16 BIT MODE               ATyler85@aol.com               11-08-98 (18:49)       QB, PDS                178  5326     SVGA16.BAS  ' This program is a SVGA 16 bit mode. It requires a VESA SVGA card. If youă' make any improvements on this program or have any questions send them toă' ATyler85@aol.comăDECLARE SUB InitBank ()ăDECLARE SUB DEMO (num%)ăDECLARE SUB DrawTextV (Text$, Row!, Column!, clr&, bclr&)ăDECLARE SUB LoadText ()ăDECLARE FUNCTION DetectVESA% ()ăDECLARE FUNCTION SetMode% (mode%)ăDECLARE SUB SetText ()ăDECLARE SUB Pixel (X%, Y%, r%, g%, b%)ăDEFINT A-Ză'$INCLUDE: 'qb.bi'ăDIM SHARED RegsX AS RegTypeX, Regs AS RegType, BANK.asm$, pal(256, 3)ăCOMMON SHARED xRes, yRes, yOffset, curBank, winGranul, Segment, bppăCLSăTYPE VGAInfoBlockă		    VESASignature AS STRING * 4ă		    VESAVersion AS INTEGERă		    OEMStringPointer AS LONGă		    Capabilities AS LONGă		    VideoModePtr AS INTEGERă		    TotalMemory AS INTEGERă		    Reserved AS STRING * 236ăEND TYPEăăTYPE ModeInfoBlockă		    ModeAttributes AS INTEGERă		    WinAAttributes AS STRING * 1ă		    WinBAttributes AS STRING * 1ă		    WinGranularity AS INTEGERă		    WinSize AS INTEGERă		    WinASegment AS INTEGERă		    WinBSegment AS INTEGERă		    WinFuncPointer AS LONGă		    BytesPerScanLine AS INTEGERă		    XResolution AS INTEGERă		    YResolution AS INTEGERă		    XCharSize AS STRING * 1ă		    YCharSize AS STRING * 1ă		    NumberOfPlanes AS STRING * 1ă		    BitsPerPixel AS STRING * 1ă		    NumberOfBanks AS STRING * 1ă		    MemoryModel AS STRING * 1ă		    BankSize AS STRING * 1ă		    NumberOfImagePages AS STRING * 1ă		    SizeOfBank AS STRING * 1ă		    RedMaskSize AS STRING * 1ă		    RedFieldPosition AS STRING * 1ă		    GreenMaskSize AS STRING * 1ă		    GreenFieldPosition AS STRING * 1ă		    BlueMaskSize AS STRING * 1ă		    BlueFieldPosition AS STRING * 1ă		    RsvdMaskSize AS STRING * 1ă		    RsvdFieldPosition AS STRING * 1ă		    DirectColorModeInfo AS STRING * 1ă		    Reserved AS STRING * 216ăEND TYPEăInitBankăIF DetectVESA = 0 THEN PRINT "No VESA driver is installed.": ENDăpages = SetMode(&H111)ăDEMOăpleasetypeakey$ = INPUT$(1)ăSetTextăăSUB DEMOăFOR Y = 0 TO yRes - 1                           'Fill the screen with pixelsă   FOR X = 0 TO xRes - 1ă	   Pixel X, Y, X \ 40 + Y \ 30, ABS(X - (xRes \ 2)) \ 10 + ABS(Y - (yRes - 1)) \ 15, ABS(X - (xRes - 1)) \ 40 + Y \ 30ă	 NEXT XăNEXT YăEND IFăăEND SUBăăFUNCTION DetectVESAăDIM VGAInfo AS VGAInfoBlockăRegsX.ax = &H4F00ăRegsX.es = VARSEG(VGAInfo)ăRegsX.di = VARPTR(VGAInfo)ăCALL INTERRUPTX(&H10, RegsX, RegsX)ăIF RegsX.ax = &H4F THENăDetectVESA = 1ăIF VGAInfo.VESASignature <> "VESA" THEN DetectVESA = 0ăPRINT "VESA Version:"; RTRIM$(STR$(VGAInfo.VESAVersion \ 255)); ".";ăPRINT LTRIM$(STR$(VGAInfo.VESAVersion AND 255))ăăEND IFăăEND FUNCTIONăăSUB InitBankăBANK.asm$ = ""ăBANK.asm$ = BANK.asm$ + CHR$(&H55)                                    'PUSH     BPăBANK.asm$ = BANK.asm$ + CHR$(&H89) + CHR$(&HE5)                       'MOV      BP,SPăBANK.asm$ = BANK.asm$ + CHR$(&HB8) + CHR$(&H5) + CHR$(&H4F)           'MOV      AX,4F05ăBANK.asm$ = BANK.asm$ + CHR$(&HBB) + CHR$(&H0) + CHR$(&H0)            'MOV      BX,0000ăBANK.asm$ = BANK.asm$ + CHR$(&H8B) + CHR$(&H56) + CHR$(&H6)           'MOV      DX,[BP+06]ăBANK.asm$ = BANK.asm$ + CHR$(&HCD) + CHR$(&H10)                       'INT      10ăBANK.asm$ = BANK.asm$ + CHR$(&H5D)                                    'POP      BPăBANK.asm$ = BANK.asm$ + CHR$(&HCB)                                    'RETFăăEND SUBăăSUB Pixel (X, Y, r, g, b)ăr = r AND 31: g = g AND 63: b = b AND 31ăăyA& = (Y + yOffset) * 2ăoffset& = yA& * xRes + (X * 2)ăBANK = offset& \ &H10000ăoffset& = offset& - &H10000 * BANKăIF BANK <> curBank THENă  curBank = BANKă  BANK% = curBankăă'  Regs.ax = &H4F05ă'  Regs.bx = 0ă'  Regs.dx = curBankă'  CALL INTERRUPT(&H10, Regs, Regs)ă DEF SEG = VARSEG(BANK.asm$)ă  CALL ABSOLUTE(BYVAL BANK%, SADD(BANK.asm$))ă DEF SEGăDEF SEG = SegmentăăEND IFăhiClr = r * 8 + g \ 8: loClr = (g AND 7) * 32 + băPOKE offset&, loClr: POKE offset& + 1, hiClrăăEND SUBăăăFUNCTION SetMode (mode)ăăDIM ModeInfo AS ModeInfoBlockăRegsX.ax = &H4F01ăRegsX.cx = modeăRegsX.es = VARSEG(ModeInfo)ăRegsX.di = VARPTR(ModeInfo)ăCALL INTERRUPTX(&H10, RegsX, RegsX)ăIF ModeInfo.ModeAttributes AND 1 = 0 THEN PRINT "Cannot access mode"ăwinGranul = 64 \ ModeInfo.WinGranularityăxRes = ModeInfo.XResolutionăyRes = ModeInfo.YResolutionăIF ModeInfo.WinSize < 64 THENă  PRINT "This program only works with those modes with more than 64k of window"ă  SetMode = 0ă  EXIT FUNCTION                                 'these routines.ăEND IFăIF ASC(ModeInfo.MemoryModel) <> 6 THENă    PRINT "This Screen Mode is not available"ă    SetMode = 0ă    EXIT FUNCTIONăEND IFăSegment = ModeInfo.WinASegmentăDEF SEG = SegmentăăRegs.ax = &H4F02                                'Set the mode.ăRegs.bx = modeăCALL INTERRUPT(&H10, Regs, Regs)ăăIF Regs.ax <> &H4F THEN                         'Make sure it worked.ă  PRINT "Screen mode could not be initialized"ă  SetMode = 0ă  EXIT FUNCTIONăEND IFăăcurBank = 0                                     'Initialize bank and page.ăyOffset = 0ăbpp = ASC(ModeInfo.BitsPerPixel)ăSetMode = ASC(ModeInfo.NumberOfImagePages) + 1ăăăEND FUNCTIONăăSUB SetTextăRegs.ax = &H3ăCALL INTERRUPT(&H10, Regs, Regs)ăEND SUBăDieter Folger                  PB SCALABLE 7-SEGMENT DISPLAY  folger@bamberg.baynet.de       11-10-98 (12:32)       PB                     75   3196     7SEGMENT.BAS'---------------------------------'ă' 7SEGMENT.BAS for Power Basic    'ă' Scalable 7-segment display      'ă' VGA card required               'ă' Freeware (c) Dieter Folger 1998 'ă'---------------------------------'ăSCREEN 12  'VGA 640x480x16ăDEFINT A-Ză'========================================================ă'Demo program:ăx = 20: y = 100         'coordinates of upper left cornerăfg = 11: bg = 0         'colors fore- and backgroundăNumber$ = "12.34567890" 'example to showăFOR s = 1 TO 50         'size 1 to 50ă    CLS : LOCATE 5, 5ă    PRINT "Display size"; s ;"(Press a key)"ă    Display Number$, x, y, fg, bg, s 'call routine to showă    DO : K$ = INKEY$ : LOOP UNTIL LEN(K$)  'wait for a keyă    IF K$ = CHR$(27) THEN EXIT FORăNEXTăENDă'========================================================ăSUB Display (Number$, x, y, fg, bg, s)ă' Number$ = Number to display;ă' x,y = coordinates of upper left display position;ă' fg, bg = foreground & background colors;ă' s = size of displayă'--------------------------------------------------------ă SHARED ză RESTORE ' bitmap dataă    FOR i = 0 TO 9: READ value(i): NEXTă FOR j = 1 TO LEN(Number$)ă    IF MID$(Number$, j, 1) = "." THEN         ' if decimal pointă       CIRCLE (x + dist - s / 2, y + 3 + 2 * s), s / 8, fgă       PAINT (x + dist - s / 2, y + 3 + 2 * s), fg, fgă       INCR jă    END IFă    z = Value(VAL(MID$(Number$, j, 1)))ă    Segment 0, x + dist, y + 2 + s, 0         ' 1 = middleă    Segment 1, x + dist, y, 1                 ' 2 = upper left      Äđ7ÄÄă    Segment 1, x + dist, y + 2 + s, 2         ' 3 = down left    2 ł     ł 6ă    Segment 0, x + dist, y + 4 + 2 * s, 3     ' 4 = bottom          ÄÄ1ÄÄă    Segment 1, x + dist + 2 + s, y + 2 + s, 4 ' 5 = down right   3 ł     ł 5ă    Segment 1, x + dist + 2 + s, y, 5         ' 6 = upper right     ÄÄ4ÄÄă    Segment 0, x + dist, y, 6                 ' 7 = topă    INCR dist, s * 2 + 3                      ' increase distance between digitsă NEXTă DATA 126,48,109,121,51,91,95,112,127,123     ' bitmaps for digits 0 - 9ă '--------------------------------------------ă 'construction of bitmaps:ă '--------------------------------------------ă 'digit 0 is bitmap 126   (=binary 01111110)ă 'all segments are shown            łłłłłłłă '(=1) except middle (=0)   segment 7654321ă '                                  łłłłłłłă 'digit 3 is bitmap 212   (=binary 01111001)ă 'shown are segments 1, 4, 5, 6 and 7ă '--------------------------------------------ăEND SUBă'-------------------------------------------ăSUB Segment (p, x, y, b)ă'routine paints one segment (across or down)ă'-------------------------------------------ă SHARED s, fg, bg, ză cl = bg: IF BIT(z, b) THEN cl = fgă FOR i = 0 TO s \ 8ă     IF p THEN                               ' Segment down (p=1)ă        LINE (x + i, y + i) - (x + i, y + s - i), clă        LINE (x - i, y + i) - (x - i, y + s - i), clă     ELSE                                    ' Segment across (p=0)ă        LINE (x + 1 + i, y - 1 - i) - (x + 1 + s - i, y - 1 - i), clă        LINE (x + 1 + i, y - 1 + i) - (x + 1 + s - i, y - 1 + i), clă     END IFă NEXTăEND SUBăDominik Kaspar                 ROSETTE EDITOR                 pedok@pop.agri.ch              11-18-98 (18:10)       QB, QBasic, PDS        74   4830     ROSEEDIT.BASDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ROSEEDIT.ZIP",4^6:Z&=3344:?STRING$(50,177);ăU"%up()%/%%%R%%9\mQGI,,$X]%%%%]%%%%,%#%%x#MD0A4)B?VY%QVYE)1AV].UEăU"2W(EAWUADWU;.WU3WIUE14.ZEAV(UDVUA;VU3#VUE1A7XE?%WQW2%/up(%)9%%%ăU"%-%LA=QG#:9&JS%%%%W%%%%+%%%%j%zwtu[jPUM%VymO%WWUu%m[Yv%m\Ym#ZW%ăU"aC>U+8mkE+M9IE>-%i;>?]]=>i&A&%u%p()9%%%%-4%Ym9=J$Gm(8.%%(%f%%%%ăU",%%.%j'f%ruqj=BG42'=e-%QJUaJ+>otb[57FJExHTm2/m8[7o-:*4#Rxk4Y50WăU"eAula5G#5s&95(DY.e2wInqK1RR\.WGT(TatVS=?g\uxMdF3Mg1iocuG+x<$P:1ăU"Wz3YLMu%p()9%%%%-1%)Fv1GHRj*mf%%+%u%%%%*%%%%wtx%jVRt7n/=Ua144EhăU".ys*blp]T[FLhx%do>UDS7fai\-w5(,fH^).Lu+2C:R1ns&dA+0Sv_^O$R6U+SCăU"OG$YjD'T5dgJjMmf#6h3#L+st*XaFSwdO83'C%e)tQCUX:/k'G3s<A</#ZK0LomăU"[kO5']>ChG06JB3/hs9,P(wSAkAUU*B:up_$TRUI>>jV.]sM&Mup(%)9%%#%-%:ăU"\FvGXUGTKg[%%%v%%%%*%%%%w%txjW(J]V7%)F-)rlz38iewO5%l9(HtzuxZ)-săU"s\7]r%sNiU=chURKa&o1uiF8RTWo1)RKT:(e_)zWF>oh5lD2z,i$Myr=s^*SVipăU"]7A3e_3JUV?l48,ybg38?DA0)I1O?<ipGCG#W__*S.PV87V^6I(8Dx.f#mjs8>[ăU"][C_Z9nPJlwdtC,=>7KONaR6B.?Dpl(%up()%9%%%R-%HP%QG6C/;9U%%%%_&%%ăU"%,%%%%it%rnsn1pd^p%/hV-jj$Tg^j>jW>IKu+j>r?x.Z:)MY>K:d2?cr^.v1oLăU"DrQqj0sVDnIe>)^i'U3>;'2=fM,yC8$[$I>_]nlGWe+-hj?L/c+q^rD2CX(l[M+ăU"W*733\M[8SXv3ASHD^d4j<uJ=m,uN-dIPt*/NXPUx70pN.t$>W?q)MJ&u%p()9%ăU"%%%-4%4<QFG1,]%$R%%%%e%%%%-%%.%x&y&)qfs[iPUJ%VvmO%WWUu%m[Yz[MZYăU"A#VY%a%jUW*=k_9m)Tsyx&T'hx#Bhx-%S%up%()9%%%%-%*9_7Jgw;m'&R,%%'6ăU"8%%%0%%%%wtxj%inyS[gfx6k'TASIm5LFPdxprdu:'T;gZBjDXbzSdAx$:pf1,BăU"BT=+rV\_Q$R-n7MH4$GX_Zbaf%y>utGFHqF,nLHd%.<v+:P$W09/)wZ>\8k>di.ăU"3u#P<QU4Q$z1]k9=u34]A3mnY^9/6vm/am$EKb[$^H,i#lt[+^QRMF/#e';Bl<IăU"a&epYt-Bu&Q)>h6#F58HcGY.9,]w3ErQ<M,/<*l/.nih</-&upar^lo.mAcD=lhăU"cXdBm=WQavWGatl\]\HY3Oz$'q6BVF#DonSraIs'h5(/1'1:/6]&ZyI#nM4fWtPăU"RWLnE4'QLg;'A*Hb(?T:KCNS?6,3n%/duk;BqQJU:ntP.w+t8zK4<UvB3_l4eJ'ăU"*h[b-:K>Z_bY$Ac;\<b=QV&fFhJAnFpUO4Kp#m%p)Smoub,'=1,2H#gB4h42b6QăU"DV.1cJ5:3=5VkXARMIP1^^&+d%#*U$d?ZDYU]+,<5Q'(d-v17]odSEc;Gg9G0a(ăU"*ev-OguI&VzF3v<I8n?1k=+bIPaTgPCb2i(Sf9dQ%<DuYYh<*&ejxo9tq)20M*văU"_5HL7'>(FL]ds\gnA1zPuKS6'9AQPL3cC$v;;4#FGN:vHc.K['[Umj;Ch;RWga<ăU"2qV9.2d:3I=1coHpx7[R*O8)-py?1;2]vbn(*'aOiIqr-3-ijN%1GUW-3kdmTI5ăU"N,0e=;a1^RDfGEHI/Bd:4C(/C6>5(_3d:J^o'OG]L3\-hN>>;Xlt:s-k0K=.V/KăU"JQ=cw2<?YL,993Bi$sM#X>(oVoGu:I<p/CR_QC)u*RuukqA%D1b=(1>LFYK'BI8ăU"q7t=1J.G1YfI;I^Bp4%1DwF$IRQfZ#;:Vd7)>AD,%GQ]hpyyNhd8r[ChZuprP99ăU"FSw4VvHaPD\)=0W1m,cqW])c=79pcNI45m],,BSSE)yBO9)1sO,,lKh'_+m0B&ZăU"Rv9LNj(isaBNu=dd%wmFP:,j150a\\NTcHYO:ukXep7k3Xii+AU*8n;o.S09UlgăU"Gn^ayHJW+&IUAT);OV,Qs-(6ZKj6[=O65)M,T*Dr:gAg)li1\Le9(^TevW;Y*sWăU"n^9\2tUo1GXm40:<U:S($f/W8u6r^?frN0ow2=4Wf<<8QpZ6K1[=AE&11^A4^.=ăU"0=*13nKlmCe5)F=*JrA%rUHpq3rEw>(>rHJv4/*7T4%07&GY7nQj3BDs2zbB-[băU"t=PEU3SG1GK>8R$m.KaJm64U]KI71g3:yys(utJT:%7xS*eqW,;=O;_LX3f;$++ăU"G_teX^uMMjvKU$3_K$ibKM9*=dKSC7[U,TofVbTlXK,7ulL&2YM?81C\O(YE(H.ăU"?fQ^6cOnBH4\-mY?_=O=n;oc7#,Zm$th<Zvn1JMb73QrfaCd(okH.o7ntAIm('FăU"pxS4i#QNmX;;DGW=EoYFT%P5%zPfh*/6HJ<O'X)&is<e]TmI]9h/;[[0,9u7]hDăU"Kyng_f^JE;#>'85IYng3TUFHt;)SxKjvXNA4iAo,eJ9u)p)h(mJ0u(?MDam4O'JăU"a'E9,,>mh2FT13g>(gnZZJrI%/BRK;GX9[0AGw%pe=P#H7VzLs%JPzX='[(ng/găU"Ioh3cLcVV=oIID3<RsFXd=-G*dDy/\Q'3ont$<o?#C12b;>7u,'P9eh+tvtbGttăU"5Ph>:&WQk>nr(E&q=9m2f;$v6HHZ_C=mHVsI&8F$4G'$8O]JyXD=Jpv]VYhVI%PăU"YlaR>s,UAMC5X:>ge,10u#4pGzMD-;N-myaK^quqQT+wez9a.e:>S6o*Iib/Z1NăU"/*?N1^M,sO9>P71X&-J6aQU%<MBP[$p#H2')r,zHHQ.QmtfaV:=P$,&Gl1kd8q-ăU"0kTq9o^Yur_>EL5XW2fp1a,#lMd>9WVA')xP]86JG=BoPp'95)i<$f+=j9Gxq#oăU"zzD&a75n(yXxghO^\vMu%f7r#'P#H1wDg[M'g4jfJa'IemKjKr<Ai-]NE0b(sK3ăU"[gSG%awQV;91Ge?cZ3G54U;(joQX;t5Yix6WkYiha6GP;T$k1w^-.=ZA>+(y'b(ăU":m'u]fT*m[6<cic7hnJWS^Wm0HcXWkVbr7FAeXXk>:<E;(jC.TOZ#(xBSRKcl70ăU"3mw#?Jc3m5C/xWDYfbl9Abo,jMq.x+aQ&%GMN(/\>(WGLMcJo6<]7HgP%=HKt#>ăU"jq9&_C=/)NnME2q*X.rM^NCbQ+\*gs/pcG)TZaOY/P:QZfDPg)A1VF+J/C*6BQmăU"KlzuUf:F1a:fz$]9xpU?rUHDU>*Y$\\le>V>;zcH&W+hI7a%8^7vT+:#2LV]>gCăU"r)Xigjrxe:?4a%vco/W_;9$k'4Xul\2fA>4c579\+<hV$I,N-7SYvW8r-oU2GYNăU",zl;=)o1?4iAl^PX%71Xtohvn5)CSjB,.%:RXdYu(LJSs_8)-ccs\7zj3Qkdsa+ăU"zdqRIEL?P$,mSM,Yw>a<YN4j.5)E_*<Nup%&'9%%/%%%R%%9\mQGI,,$X]%%%%]ăU"%%%%,%%%%%%%%%&%RE%/P%%%%%Lx#D02A4Bu%p&'9%%9%%%%-%LA=QG#:9&JS%%ăU"%%W%%%%+%%%%%%%%%&[%E%/)P,%%%%jzw%tuju%p&'9%%9%%[%-%Y\m9J$BGm8.ăU"#%%%f%%%%,%%%%%%%%%&[%E%/,P(%%.%j'f%ruqj%up&'%9%9%%%%-%))FvG_HRăU"jm&f%%%'u%%%%*%%%%%%%%%&%E%*/PX&%%%wt%xjVu%p&'9%%9%%#%-%:\FvGXUăU"GTKg[%%%v%%%%*%%%%%%%%%&[%E%/,Pf&%%%wtx%jWup%&'9%%9%%%R-%HP%QG6ăU"C/;9U%%%%_&%%%,%%%%%%%%%&%RE%/P&w'%%%itrn%snpu%p&'9%%9%%[%-%4\<ăU"QG1(,]$R%%%%e%%%%-%%%%%%%%%&[%E%/&Px(%.%x&y&)qfs%iup&%'9%9%%%%-ăU"4%9_7IJw;m*'R,%+%68%%%0%%%%%%%%%&%EO%/Pu%(%%w%txji%nySg%fxup%*+ăU"%%%%%-%.-%w&%%%w0%%%%%ăEND SUBăCLOSE:IF S=199AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăFrank Rompella                 CUSTOM PALETTE MAKER           frankrm@jps.net                11-15-98 (22:32)       QB, QBasic, PDS        157  10400    MAKEPAL.BAS DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MAKEPAL.ZIP",4^6:Z&=7536:?STRING$(50,177);ăU"%up()%9%%%#-%Vr8#J4';Yfc77%%dh%%%1%%%%rf%pjRu%fqSg7fxfaq<BS3lKXăU"hZjde?H(1pF.ITF87bi$w[+YErFU4_Lm1tF[vT9\?1D;beM3vr,nE/;hakmokW4ăU"4HHNZ/-SF$&%P2n4=HVj5wF^._4n_Dr-<]:4*)19qQ)<6i]ICWEh0S12.P8IU$1ăU"/,R,/H$7Okdm)Agj_o'M<6Ko'IPIhHOW9P?#:-NYuWTVIMS35F(I1?#PZdWn'L:ăU";NYJ,c1)AT71Js5?\omYZGn0L9?u0H4(5rB#UlrqbdH:)BLAi-s4/.mN$/%Gg1xăU"F;3X.9A_NYV$Uq>V?:np7Y2UlfOc)SHJu-h-mf*$^9OJ1d?1pP-86#hS6)xw/fvăU"c7':Fq.6q6qQK*/[r-gI7]cdF[U:3JvV2cm;\#GR?9+g_o'a?jTZ4HM/aJOkzTdăU"1PQxMw&0,DTOrz[U0=lSzUj%/[E=$O\OG;W:as08.'9$c+Yc:MXfb%_zHGY?tO0ăU"VaQ>hp85U+)A1N$C)sILa+g\0vaGmA&jij7<3.DB0CFBGfWtqT],/_cW6J\HoW*ăU"$fI(F1h./&Fzg0AFC'8]5UI&O%0Cno&h20-V84+;o((lTXO4+5=D<EE^gPGUrx'ăU"q_Fk^R+)bOpTeElWeNw67>CsQ#GV+Lr)U<:[5c4?^(/f9:(P=NI;SJ.au\3pQo-ăU"Ez6I%oFtJv*nTR?/0KG*P^[uP;3.\H70:Ar4tn3AmfY1Zpmfnzh*]JII#E>QEJ4ăU"^eK*_88b-sHi5(E.0GMud[PndBf)5u-SY%)Q_,[-oa<)&:90\MR=6;4.WyuG>>CăU"BIzL4pTkp>Q*6Y]WfR+Kk/&0sy7QQqHkjiD4P'a,P;UPjZ9+)];sD.u[ANVq_PwăU"-dvH]3?qbZUKP-L%Ec+9+6X+MsoDIegKOt#$LWG(^(c7)vJQiwc<nC8;IQMqhM4ăU"1lrTBmms-\2^;=[?*RnBTJON&(Q'\H7Pt8Ho=BFfRN(TX0Ul%:1HcA)/U5Jg&;PăU"Vd81&Q8.Ci0n5/d.g3hy'EL-8Gk8P#+>6S0MwtRJQ3F:(mdI_\IMMm0b;q+b.B1ăU"Hix6+V9_X=/x2BV(2Q*u<7a':/yt'_Ht/=h\UqBW3-d&rFxuVYV3e_4uqk+#]57ăU"/4Pn>[VXsjGBJR$ZhTj-XtQ6L,(Okz3oo?#.FOMt:DQpOKGQUd407g,s01EZcsQăU"6T\gt3vW=zWR)i2kf^*Ti:]>V62$,j,U7d'-[[\p'lILE>USI='89N?ka/Cwi3yăU"\o/8u.6gDuo]?7\'(5rF7h.D7DTcMTN*01+0Tz't=)'.R;_kZ0KwO+:,P%Bhe9%ăU"QWg'X9u*/d=?+R(z%[)Jj:STV4x(btlNqE-$+jb(FR3w6C4Do66#'JvXF3_;j9=ăU"K8.YGj.YF0.D6os?\R'];X?[;((^>G\Jo+AoB(u9s4MmE<Amz)K$i41FZ)]bcd2ăU"&?jV)tUPRnJ-$_3h?s8%dsk\ZYP.Ow'Yg*aPt<S>;*^o24i8XP6?7axr])U=Uu;ăU"PdW8\JTpIJgN2HnpCMMz_FCX)NGwT4\eL97CxKeivNQ;DyMF56$9.SE5ivN-(??ăU"?G(NO6$s[G%-SjYh.9<f\:DFjJa8T#+'$9Ig6R-]?+Yt/fu>xZIya:rIO*M;/t:ăU")R,*[Bh3t*4z7C+^N5NkNq-Iv<^#LfT7%BmIb&HfXd>,MLxpJ9YGQ_Jnd0.h+n,ăU"(0.#525o:/[ugN>[ML[/\Ec=6KWq?:o/x/5d-coUaExRs?Rb_sV;lQfRwaC4>+4ăU"S8388=tFf(JDTY^4.1fWphVqKoa?p.'W/3+<CqyM/]7F.vLFm*6kY$z3i=SK[mSăU"9Xw4OG_8-BRnBm+h\v*18)s[:cdg=PL_WKbIb&%4_.8<9y^GDEU=%W3YG-5\E,kăU"V\3.IY\r\%Yir,%PmrRNW8hrRXAl$Id:pGXu:sth6\5-dlG*iFgNR3(7G\+_]hLăU"3*Bb'sc92IQnm8$l27KF9ST6\OLI7T=[rXxFHH7U>ZkF2pO%C>W$b?_'nM*sJ>HăU"'7$s1#ut$fApF'M;to9oxB+NG:r>aMd<UW$m5wL+sBL#j8t8Y0&;;y:Yi8v#sBpăU".PalB-EG[B4)2;n2l4Fe8siC,pB(pnztaSxLjt?eM)egwfk=.3,Vq?u\gGmk5jSăU"[v%&W>Xw)*;j*l1FW8=i9eO2?i.*EersIL>wjHC5eq3d6%$#aEf\FbbLYn,IfQpăU"c75]s5qpzk#GkNPP$86AB+B#00&G3.VZN+<Qm.BzW:z3[$oLpKdnk_,AkAuEG]3ăU"d,d59QtHWH8sNw9OUsWN7/&IiwvcEInDRv\]'mxCT?Ga?lgr-F].g'=6Zb#vg^băU"#vwbmvEF]cd2G=)F'OS3>3yQVN4n9hlz%e;CPP1cXAs>mkRViHw6;*OE3FL^\khăU"RU?D84NI4aCh,,a\G3:GxAGma<,99W,Y8,6:jRj;xsfgKYP8GK?[HaqYJzMCv#QăU"^OHB&sxJ2*Tu+Cykn9gU#/VN;/(E8u30Kc-JkloZfKMR3Cih-G:gF%O>9Z?vw%2ăU"QSIg2p0;cEa(euR.UCed]Q&:jI8\.uiV;hor)toxEWdCH+6LLxsJEAw-/oUIe$CăU"H'#Ax3[t4K\]pq_<m/8vqu:BU^v9<_'l&y,BIeawtWkP9BU:u>DRkTJcE_4,vP5ăU"w#R=8[od,>yc&Y$,%n*tMN.Ho/&IA%(Yw%0FaO3(\Ir<IuNYI&,tvnDeF8FM+R.ăU"vrCU*coOTa'iJ94.$P7Bxs^v6%u0vPml/xiWcox+6Zb>,,:Q;T?rZYLW;i7D:+LăU"Pl7E%4WeXrXO5?w/GK)?9uS/Npuoqk4.F5B4X$&bK$RX;OT&Z#FoTWjHtq,WL5SăU"^cYv1ZSJ\B#7890qHy*:TGZ:<6/<<-Kg^PJVew,?ZH+kl4YMAEEn1F[0eEq/*p'ăU"DZ+Ab?g=*Wbl#>FLga^A6\VPIQ^RP3+%a6)Nc$%Z-pEOgkbg[#XNkcJ<AS%.Y57ăU"LESU;PJW.GvMchUI*iD*T;r[YBboG_NOP'8EUeEInwjRMD5FO1H16va4tEYq^/HăU"I[ojjbHB]j6WMd9E3*o>JgYcPeYhfs<_LERdt9B(7%(FtIKSUDR6].'u84]3#,OăU"0)C><P,L:CRB+&e&0hN5y#Maz8%t(C^1x&&bgOOu+8QCL3CBaGYp5A3uw+Q=6DHăU"e,I-)a(75u8S4k[3Bm9<A+)1%uZCo5C2,qh$;b#Fo:+5A(&;BV7d9qPj.VU=Ua(ăU"2-YCYsi7i'Iy:%cHI?62\D(*MQT0=]zEV/MmU.&RHU4R(,E&xHi5NL>zZ^EtL5>ăU"FZ(;78;u4_cyI29M;Zs2-b)CM4#XtdrC3.0U=C&$F&,NilR)4.,>?DCx?I>pCScăU",hxe26CW9z+<n=%vfe#_#S/OOh2B](>._SBG:C;iOQCFoBGxgL$p#d/YC^M(m4văU"$Fp3\XGN/5w,[.]gg>]#d(GUH2%o)ol(bm]\kidu2lQNGRO5cBQA%k\0Li<7dkEăU":+KB')juu'C$FH_3igxKf=(aV6i'g5g^gmhmwf_eVN&S0bD1A9q,NU4EBQ4UcRiăU"&VldD-K6SwN#$x1#\=F-qNf(x#X+<E.9Xv)JZF*e/3/iMx016/gT_LO)Z[,M&YIăU"c^QB,1o'*'L<(hLAQ?daQHV?F]i>]Vh1p,AXgyimdXa].kM&[?TO(u?QZt$RUPfăU"o)cXBpkyaqney2hSpL;ltN]C^e]rQycrIBCg<fd0J'K[rM>)QkU]#K1'mmK6Pi.ăU"0;=l^QE*FePQb<Zgs2ug?j.?CVQZ3+c:?sks'Tqe*o]q.V6*Cj&RfuNM/UhK:sWăU"M7b1+39K8XK(T3iMrbZhMIvl+TDq$=g$D6UOmvDyapVwvWnyThm,(VDrrCP4m>DăU"msViK*o3_W$AB8n8iEv):]):#[tJ^_b>E-w15R$4,Ol(u85k>&x&W=#&lQ7wc<AăU"qRirYda6]eId8g4So53m-v2?cJ>wh6uT8JHLgYtn0_kI?SNMtP]b=3W\C$0,/omăU"0iJb1o_e?E?>&KE5P8V4A(uNXtQn?J1uc%7,C1hcpX61-PGW+e_EZy>B_TLT,uNăU"Q>OA(hr$^B;bFlVa47]G?nBE=;v^HTEOJYAu>rJB/\Jd7.-QamKgjR(8^s#>0i^ăU"))-adKEq\bM5=9sDji:D3igi?RWI6=i)<mn8BHK0q9snxutMQW1?INOf<.Njr^HăU"]JZ3*32*aEk;uW(#%.BD*2#_Uy;<DZp,-YlIvRP>vhEEV/lS>ogEE_-h:YCp>qdăU"7FQBrPg2_+[_I:k]s,rZL0*vHkb]lhtyR$tUJ>HZZm]Gp#v'xq7JgmK8gfv$&<AăU"?k.AOf%]Q1r4[izEHsike'jM#a;S*%,oZs?oVeBT.:R'Y_ci9[Ar_iqD(UfS\]6ăU"PJ5D8%JRaL4=uq-285:^It3m]0r+SiVTf/b1vCD-UpfcbKz)ifZX9X4V:\5_uE]ăU"ia)rJM/'I4p-KS9^zO*&5psiK=>*fneMru8=.30B*PBH#U0=1#Sr4A?uP9h0AKjăU";Nh:4o,[g,iH4\u22,;fk7Vbq)dqTM$puW$G1F\aL\;F9dM\^>DQmKiT[:ndUvFăU"Si0tp..<WlLUD_G?h+G690+W7$-j8LWS)X9PE:n'0pBCKqQw_,vq#-nfaKYn)AaăU"liADgu[C/$CagUWeLnp4pEGwXA=^sW3SOMIV/%1LL2)TCUs2GUo)6[i-0QbdhE^ăU"Vx:>'kIjR:D;Gb=MK*2:=Vu>M[:9W.VL$L,4PE0\VG/$etrB)6K)#4UThP64ZvzăU"J3Ws=Dg6a6'cEXy%aNp/??iLQja8D1.D*E=F><1*bD($vZH6w6ibfr56:GR0?-văU"rqBwqS1u\nsV)pTx#-:iAk-mD8=:as>0p'^/q%XYYPCZ(3nQeAhfZ:nbSF^^%VnăU"?c3g_,\TYAKMnM/ednS6YKa9d2[#%%Ih/,5J:&cTRqbR5yCwoFFBqAUTZW'Wl?văU"xQdI6UAbr?66RnlW*eXd(8UD1z#I:UkshWpGnJlu:q4QjJB?Wz[_eGG^igNc;cvăU"tecon5'fUlUnGuegSDp5=1l1e+B(G09C(m5Oh1P.r]m6NK3oKIU<B%:dXjaBm4PăU"e.V[hoTa]D3YFZosZV:fdDnJXhMC6qLZyEKDDoCADC-i9?47]t7C=I<AXAK[J5băU"HZE<fSjd?qqLs>%J#_1i+>./^7Ht<6p&U7*Ise3C%I/C]S9B0W+tlq>gB8,y=1KăU"emMqWcUsR%m1(^gT-I/<<?/+[QHJ&Sy8u=.7dX:=';.Ps(=r[caD*C5Pos_,t;NăU"fSXQC82wsZD#xs['PJL=#0gADTT)>*W8$6,N7a5oh\o6xG1g)'(huR;oI),(t.iăU".2_j4Uhd$T-A8es3e/<d2hH#0qoak,:^:G7hc,TkysjjU2Q\k6*u$fJOk\AmK(YăU"K0b)Dlg?RJ>D$Ko'SkQ3T8Wm0V)=d2/,y(a<Ts>4;prVOI+HgCR%]0^I_YXsr(hăU"JXi$$JhE+_cUFzWE&L6Kb.XX?'7&iwkI4(uteQI^Zt'#qSv[=Xs>D6FNMSDKPXPăU"zIXgMX#[rf8)p/[2RfB#MaXsBH[4\_*Xg?4MYj5Us$hI#pPg-YwB&uSs]&b_k\3ăU"ZqZiV]651_p:aAFkmbdR7%V,HSa4hKeFC8uEkc'7sY95K?T.Hu&4lhJ-)]5l8rQăU"*'=3)X6$=4?CD^ti)#It-oG3?#S,d9l.%WZ6<D5$6BQ8OP4N30cp1E0bI][dJvjăU"+^YPfIn%_PN/u0=s-:Cp1nvLC.>n^B:/UjEQoulsCl0om=zY.M&NOXM7_h^kJijăU"Y%?N_NwZ#=A,gU<B:ZrCoaaHJhq'=Ei2^xQIi3Rmf/SEv)q.%9aP-IkQNLmrD8=ăU"KXcQ&X95gqKEesV/s:]4e<k::_w0v^XZrj<K+(lJj:Pb$<Q*,#]J1za5Zle:c&aăU"w'ZVpBmre0?:El5vI+p7$CoG-f'UTl-^9;u*4P<0DU=*cx^O(1:\/AgPhF';qJ3ăU"nF6dc4CoFSZ4[)8OhJ(_x]8/tKRL*fGD,8#)k/Jl%JC[>w9+8r-buY=_kR3*h=FăU"D\suy7GS?,ZhBWS;/5Mu3LNx)2a39iL1j(qGpW_Sg6fN0DOCBCh+XrW%GFg;6brăU"U.7RSV#Nn&*oqbt\0_h_>kCm1D.Z6pvU,H(4*<NSIxh$qO%1OxbQ>,*rd%up()%ăU"9%%%#-%ErS#Jh?(.=X*7%%P1%%%/%%%%uf%xyjq%SufqLb%(a[BF1t2nyF8Oc5/ăU"eElnQagqvUC1Yb=QX.T+\WFnXnp4Ndpj<<6(*X.3dN6MNBsimsvrNWNdNpVN>?(ăU"XXCPh6MNt6]gnQt42I=T=+Ve6T;iH0L0j+=n;[p^9n;q5]36r)x*+%<[01#55tjăU"(1?QCm4.%:mTTj\j,=[ich96Z+ix630;l?l9Q5wl%dK.E&m<[j(+['gBq?1mXW*ăU"BOB##[V.1=OlS.W9hL&O83DO2'vVtb:b#U(I?LAmaw$i&ac(;]CpDpkYB2$TZWEăU"9$k$nBC*QGI7GP-Y1[HU,K;6/,''F'_1W-&XYx)#3x&Ng)M/^nd<Z\#McTq7,7AăU"\X\:\'4c\z6+_^/G\.SHo>c5^)3XQeWJwI0X3wa7ZC.Mpu.OjcU_[]MC?&SKD2CăU"gOlEs2()09Z*C_S-kuo1r_SJA7O'HE.:3^%+8JC$RE,OFuiW/<y7:]HV/*+;X*6ăU"u7)B:ScFd_\RNLO%J,x;/;HVsYQf]/6[,RAXq07bsAiEpdz)/9*pZ1q,D,<.XY,ăU"6X0Xi;Dc;0Vr0wJIa-,G1G[K6DB7xwvM(leydZB5a+gbbXc\uWc>h3?fOp,&*rFăU"6>cJ&sxCz]k>q?&twc<M7CrWJArFA>thnVVZhH)37pco?Nk>Tf^B:r<[fs,>:r[ăU"'qcH%^LpyjxACN=?9j2bcsJv6Kt)K4RIufbd/jy,Om_\C#P]=%/UN,:\R#.7t$2ăU"*2:[Lj\?E?LIJ\UVaY4L4\6g%=3+[N>6Y%oK6]m6Mr1CFQjqiUSgiP/Huq145BFăU"s9(_;+57C:PL4jY?ddLy>+6k[m:L?)nuGsZprT2$9CsO[%&l[:V5q#;#Oqj^&9OăU"7kM(+,74C4xI-Z=6:N6CjYV/u6JXF+mFdV)bJn;98DkoTk$8K<<Mb(Fkk$$I<<dăU"]OfHaRk1tKh;Hje\9nO,;];O5zx=60Fk=V?,RAROMD'1pX:]1(r5S[Dw7WBi,UyăU"B+EQGXM$hfLtxD>DNQg5bgNd-eb5<+]3epqxEBrXj[trZhiNSyM(M.3zF\llx([ăU":sbkg4r__Mm*C6OCn,W/$lrrn(2w*wH^hZ&HEHQrdBBA<c$6>knr^tp(HIMX=L]ăU"ms%d,bC/lX_nvpFEvh_:uOp$csoavRW3sWni(zqpb6eoi(r6T&?U+osf;R>8OT'ăU"3GQOfvZP7o8vsb7vSptjuf[7^G>kjMF+hH-t7>bH#Pe[Hr#)v9>l(\_S4fkHzH;ăU"x%flM-^Z46,oz)iErEf_&=t:,w:2V*L2[XgC?JeYarq<KDtXLuTl4,Wt<PN<k-răU"c\J_*65Aw7.Z<St&mtNOg)NIqV<rN7^B>Y&OF/ti'BH%pQGSn9?dJmg_7%C=^]CăU"Y.ajEg]kRuDVfqV[eoiFc[eKwrd[i^>we=>DXqNMWLMB,Jtf[#Zbg-ODk;k2qMbăU"IMyM-d_/dXVf]B$:S-HuVv^if;];n6ljK$6Fc[2hPyMWxR>rxp%Ff<=&pNfx2&SăU"u)Cr,6vF#suc0T2l\a#R26/sq9uG?Ny3JCh>hfMUC*UI$,*'s#wZXTI4X%FZViKăU"Pys5MU7f[QMMOgpoWMUJO]i0^LV*2RyEKH#S:XU&N[:X5X4LODuu%QOE9(ykvN_ăU"_7wbV\L]zmmn&**co'_%'CyB(ve93C[pki^\J#Hya=E]?XU0Q-26jEQEONDq]hTăU"^e1+&Rdu%p()9%%%%-X%Z5I[Jjrj'UD)%%%?0%%%,%%%%wlg%SufqCZepE%HV1(ăU"0p_Z<jrcNw)bTMMqZH:-0TyXGpEN8hN0N.Z9s#,iPeA-q6wvIbS=h[e2w^Nh+T(ăU"7xOTPNM%pTD:5x8fG,y$OwIf>xsJ]yv_iMoaM;scM'1O);xTn;#'br>ZPb9r>efăU"-1bVVe8-W-?kzV-+^u^M<=y+7oRCnh<d2djl^eM4z2rSmus4PAizrOmb&e&nF('ăU"O/V&rcelK[s\K>VcqT<?1B&Dh5E6?2h/z2d90S-d90Smdy0#l&j)0[ffC35w_7\ăU"<4;AJb7vQY#PBW-#FHHTuC6\>XC$S8XF(4i,jXHdbU6-H?>zZR7T+ZS3?0i,Dx\ăU"K&p->n,xk/mS>W3V3Ida3V*fAY_G/uand%PqIw4&Y<M[*r$pW/T'vt9otXcAl/<ăU"w\r-lS6Q_-zuP)+VF%T^fz>JpszBPZa<D>ETwYLQ6)o6T4PJcA*5-.la8Vrl$iMăU"[Em>;yN$^PvHEm;FYhacpEOn0uXF$*$pCQess,h2-:-a&c]18.Jt#vB$N[Qlh[răU":dx#80$t[9,h,ks:A9<PXQ/>Vhq3OKQ;x)+p&2MzTM\r3RuK+M=ZaL$T\-cUmNoăU"Xp^e^1\0$]f;Z^hBqYZ(*I)/D:G)#3#G^*92qfI5XH0RLTsQ,lA=B/Eg2+?e=?aăU"9)L$l^E0Z&8%?,V;r$QRfv3UdSM,#Dr8R^EhjG=sYllHmu1'<'dxw#*U8VnD]*8ăU"J6K<si[U4EksBO7$PRW$eLuv,pf'ZhDtjDsIuF-P\NHai%qfL8Wg#CfY]X<t9VXăU"&4ow[h:$*CrJon8F+>s-;m.$m>XUpirq(eLxE3lKRb\7aAb^*iV?+ER*$6mqgAqăU"4r1As4*Qa#ML;zYLb0E4ohdmK*kB6s$kl9x\d9$hLEVFgvFtQnlZj:7]iGcD'f$ăU"vI8eHiV$16lmlGCpaq,V$6bpb^anuH7._g&Lz6/Px2X%oC>'FmTMC[WM,a^3p(3ăU"%xMfd9\DvU'dkdpqFSJHJu:onK<6OMS9dx<'8*]CTs2F]'JT(QBmpaO5MN,4EtlăU"[PlABr)%vBn<Qkt=F\$8o2(imDrWJLuT.49lcUuCpP)qV49gbLoaB^(j>.DMiz\ăU"Zad;4f]xpWev7c_K2y]%nE*[[rl7j\giwI*lCI6D^xri7aYk+?(p[r#p+x3iisSăU":qb:AYLosN?b(]ci/3vPLJb0GAK&%m+(P?8kDsI_\5gkC?HZII\VQCBmq9WOaHvăU"p1iYLuWob3nVw6TVf#5QW=-cs1Fa*dUmPE^DBdc[$EMnYHG7RIdwo^KU=i(IV1răU"^1LUto#HA\fuH^t5JP4s]0'>8ivW6wq-o]ee=*IA.:+mI4O9Nu%p&'9%%9%%%%-ăU"%V_r#J4g'Yfc[7%%d%h%%1%%%%%%%%%&%%E%%%%%%%%%rfp%jRuf%qSgf%xup&%ăU"'9%9%%%%-I%Er#4Jh?.&=X*%+%P1%%%/%%%%%%%%%&%E%%%%9%8%%u%fxyj%qSuăU"f%qup&%'9%9%%%%-X%Z5I[Jjrj'UD)%%%?0%%%,%%%%%%%%%&%E#%%%>%=%%w%lăU"gSu%fqup%*+%%%%%(%.(%v%7%%,A%%%%%ăEND SUBăCLOSE:IF S=49AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăViktor Rootselainen            BMP LOADER/MAKER               viktor.rootselainen@pp.inet.fi 11-18-98 (18:28)       QB, PDS                222  5837     BMP.BAS     '-----------------------Bmp loader/maker by Thomas Nyberg---------------------ă'modified by Viktor Rootselainenă'this program can open files of any sizeă'you can now load/save bmp to/from memory  :)ă'this program is for BASIC PDS 7.1ă'to work with QB 4.5 you must modify change sseg to varsegăăDEFINT A-ZăDECLARE SUB Byte2Int (word%, low%, high%)ăDECLARE SUB Int2Byte (word%, low, high)ăDECLARE SUB BmpLoad (Filename$, Segment%, offset%)ăDECLARE SUB BmpSave (Filename$, Segment%, offset%)ăă'$INCLUDE: 'qbx.bi'  'change to qbx.bi  in qb 4.5ă'$DYNAMICăă'The header:ăăTYPE bmpinfo              'what it should say for a 320*200*256 bmpă	bm AS STRING * 2      'bmă	size AS LONG          'wid*hei+1078= 65078ă	r1 AS INTEGER         '0ă	r2 AS INTEGER         '0ă	offsdata AS LONG      '1078ă	hsize AS LONG         '40ă	wid AS LONG           '320ă	hei AS LONG           '200ă	planes AS INTEGER     '1ă	bpp AS INTEGER        '8ă	comp AS LONG          '0ă	isize AS LONG         '64000ă	xpm AS LONG           '3790ă	ypm AS LONG           '3780ă	colus AS LONG         '0ă	impcol AS LONG        '0ă	pal AS STRING * 1024  'blue, green, red, 0ăEND TYPEăăDIM SHARED BmpHeader AS bmpinfo, regs  AS RegTypeXăDIM Buffer(32000)ăăăWinDir$ = ENVIRON$("winbootdir")ăIF RIGHT$(WinDir$, 1) <> "\" THEN WinDir$ = WinDir$ + "\"ăăSCREEN 13ăăt! = TIMER   'Time how long it takesăăBmpLoad WinDir$ + "logow.sys", VARSEG(Buffer(0)), VARPTR(Buffer(0))ă'BmpLoad "c:\windows\logow.sys", &HA000, 0ăăPUT (0, 0), Buffer(0), PSETăăDIM tmpbuf(1000)ăGET (142, 91)-(149, 139), tmpbuf: PUT (125, 91), tmpbuf, PSET   ':=)ăă'BmpSave "test.bmp", VARSEG(Buffer(0)), VARPTR(Buffer(0))ăBmpSave "test.bmp", &HA000, 0ăăPRINT TIMER - t!  'If you can't figure this one out...ăSLEEPăăSCREEN 0: WIDTH 80ăăREM $STATICăSUB BmpLoad (Filename$, Segment, offset)ăă'Loads the headerăOPEN Filename$ FOR BINARY AS #1ăGET #1, , BmpHeader  'read ităCLOSE #1ăă'Loads the paletteăOUT &H3C8, 0ăFOR i = 1 TO 1024 STEP 4ă	b = ASC(MID$(BmpHeader.pal, i, 1)) \ 4      'blueă	g = ASC(MID$(BmpHeader.pal, i + 1, 1)) \ 4  'greenă	r = ASC(MID$(BmpHeader.pal, i + 2, 1)) \ 4  'redă	OUT &H3C9, r: OUT &H3C9, g: OUT &H3C9, băNEXTăăFilename$ = Filename$ + CHR$(0) 'filename must be ASCIIZ (zero terminated)ăă'opens the fileăregs.ax = &H3D00ăregs.ds = SSEG(Filename$)  'segment of nameăregs.dx = SADD(Filename$)  'offset of nameăINTERRUPTX &H21, regs, regsăregs.bx = regs.ax 'filehandleăă'move filepointer to &h436 in the fileăregs.ax = &H4200ăregs.cx = 0ăregs.dx = &H436ăINTERRUPTX &H21, regs, regsăă'Read the fileăăIF BmpHeader.wid > 320 THEN BmpHeader.wid = 320ăIF BmpHeader.hei > 200 THEN BmpHeader.hei = 200ăăIF Segment <> &HA000 THENă   DEF SEG = Segmentă	   Int2Byte ((BmpHeader.wid - 1) * 8 + 8), low, highă	   POKE offset, low: POKE offset + 1, highă	   POKE offset + 2, BmpHeader.heiă   DEF SEGă   offset = offset + 4ăEND IFăăFOR y = BmpHeader.hei - 1 TO 0 STEP -1ă	regs.ax = &H3F00ă	regs.cx = BmpHeader.widă	regs.ds = Segment                                         'segment of arrayă	IF Segment <> &HA000 THENă	   regs.dx = VAL("&H" + HEX$(y * BmpHeader.wid + offset)) 'offset of arrayă	ELSEă	   regs.dx = VAL("&H" + HEX$(y * 320& + offset))          'offset of arrayă	END IFă	INTERRUPTX &H21, regs, regsăNEXTăă'close ităregs.ax = &H3E00ăINTERRUPTX &H21, regs, regsăăFilename$ = LEFT$(Filename$, LEN(Filename$) - 1)  'restore the filenameăăEND SUBăăSUB BmpSave (Filename$, Segment, offset)ăă'reads the paletteăOUT &H3C7, 0ăFOR i = 0 TO 255ă	r = INP(&H3C9) * 4: g = INP(&H3C9) * 4: b = INP(&H3C9) * 4ă	a$ = a$ + CHR$(b) + CHR$(g) + CHR$(r) + CHR$(0)ăNEXTăăIF Segment <> &HA000 THENă   DEF SEG = Segmentă	   low = PEEK(offset): high = PEEK(offset + 1)ă	   Byte2Int Maxx, low, high: Maxx = Maxx / 8ă	   low = PEEK(offset + 2): high = PEEK(offset + 3)ă	   Byte2Int Maxy, low, highă   DEF SEGă   offset = offset + 4ăELSEă   Maxx = 320: Maxy = 200ăEND IFăă'creates the headerăBmpHeader.bm = "BM"ăBmpHeader.size = (CLNG(Maxx) * CLNG(Maxy)) + 1078&ăBmpHeader.r1 = 0ăBmpHeader.r2 = 0ăBmpHeader.offsdata = 1078ăBmpHeader.hsize = 40ăBmpHeader.wid = MaxxăBmpHeader.hei = MaxyăBmpHeader.planes = 1ăBmpHeader.bpp = 8ăBmpHeader.comp = 0ăBmpHeader.isize = 64000ăBmpHeader.xpm = 3790ăBmpHeader.ypm = 3780ăBmpHeader.colus = 0ăBmpHeader.impcol = 0ăBmpHeader.pal = a$ăă'saves the headerăOPEN Filename$ FOR OUTPUT AS #1: CLOSE #1ăOPEN Filename$ FOR BINARY AS #1ăPUT #1, , BmpHeader 'write the headerăCLOSE #1ăăFilename$ = Filename$ + CHR$(0) 'filename must be ASCIIZ (zero terminated)ăă'opens the fileăregs.ax = &H3D01ăregs.ds = SSEG(Filename$)  'segment of filenameăregs.dx = SADD(Filename$)  'offset of filenameăINTERRUPTX &H21, regs, regsăregs.bx = regs.ax  'filehandleăă'moves the filepointerăregs.ax = &H4200ăregs.cx = 0ăregs.dx = &H436ăINTERRUPTX &H21, regs, regsăă'saves the screen into the fileăFOR y = Maxy - 1 TO 0 STEP -1ă	regs.ax = &H4000ă	regs.cx = Maxx    'number of bytes to writeă	regs.ds = Segment  'screen 13's segmentă	regs.dx = VAL("&H" + HEX$(y * CLNG(Maxx) + offset))  'Has to do with QB integersă	INTERRUPTX &H21, regs, regsăNEXTăă'close the fileăregs.ax = &H3E00ăINTERRUPTX &H21, regs, regsăăFilename$ = LEFT$(Filename$, LEN(Filename$) - 1)  'restore the filenameăEND SUBăăSUB Byte2Int (word, low, high)ăăword = (word AND &HFF) OR ((high AND &HFF) * &H100) 'Insert high byte into integerăword = (word AND &HFF00) OR (low AND &HFF)          'Insert low byte into integerăăEND SUBăăSUB Int2Byte (word, low, high)ă'extract integer to 2 bytesăăhigh = (word \ &H100) AND &HFF    'Extract high byte from integerălow = word AND &HFF               'Extract low byte from integerăăEND SUBăSam Thursfield                 8X8 VGA FONT ROUTINE           sam.thursfield@btinternet.com  11-21-98 (20:42)       QB, QBasic, PDS        101  3373     VFONT.BAS   DECLARE SUB VPrint (X%, Y%, Text$, FCol%, SCol%, XSize%, YSize%, Style%)ăDEFINT A-ZăăDECLARE SUB PalSet (I%, R%, G%, B%)ăDECLARE SUB PalCycle ()ă    ăSCREEN 12ăCLSăPAINT (1, 1), 1ăLOCATE 3ăăVPrint 1, 1, "This is an example of normal 8*8 text", 14, 0, 8, 8, 0ăVPrint 1, 10, "This is an example of normal 16*8 text", 14, 0, 16, 8, 0ăVPrint 1, 19, "This is the 8*16 text that doesn't quite work yet, see what I mean?!", 14, 0, 8, 16, 0ăVPrint 1, 36, "The above 8*16 text doesn't quite work yet, HELP!!!", 14, 0, 8, 8, 0ăVPrint 1, 45, "This is underlined text, notice the underlining in a different colour to the text", 14, 6, 8, 8, 1ăVPrint 1, 54, "This is 8*8 shadowed text", 14, 6, 8, 8, 2ăVPrint 1, 63, "This is 16*8 shadowed text", 14, 6, 16, 8, 2ăVPrint 1, 72, "This is HEADLINE text", 14, 6, 16, 8, 3ăVPrint 1, 81, "You may modify and use this code but please give me credit. Go on, this is my", 12, 4, 8, 8, 3ăVPrint 1, 90, "first WORKING program!", 12, 4, 8, 8, 3ăVPrint 1, 99, " ElvisII AKA Sam Thursfield, 19 Nov 1998", 15, 8, 16, 8, 2ăPalCycleăENDăăSUB PalCycleăBWay = 1ăGWay = 1ăRWay = 1ăB = 63ăR = 0ăG = 0ăDOă    IF B + BWay < 0 OR B + BWay > 63 THEN BWay = -BWayă    B = B + BWayă'    IF G + GWay < 0 OR G + GWay > 63 THEN GWay = -GWayă'    G = G + GWayă'    IF R + RWay < 0 OR R + RWay > 63 THEN RWay = -RWayă'    R = R + RWayă    PalSet 1, R, G, Bă    FOR I = 1 TO 5000ă    NEXT Iă    WAIT &H3DA, 8ăLOOP UNTIL INKEY$ <> ""ăPalSet 1, 0, 0, 42ăăEND SUBăăSUB PalGet (I, R, G, B)ăOUT &H3C7, IăR = INP(&H3C9)ăG = INP(&H3C9)ăB = INP(&H3C9)ăEND SUBăăSUB PalSet (I, R, G, B)ăOUT &H3C8, IăOUT &H3C9, RăOUT &H3C9, GăOUT &H3C9, BăEND SUBăăSUB VPrint (X, Y, Text$, FCol, SCol, XSize, YSize, Style)ăDEF SEG = &HFFA6ăXPos = XăYPos = YăFOR Letter = 1 TO LEN(Text$)ă    FOR I = YPos TO YPos + YSize - 1 STEP YSize \ 8ă        Char$ = MID$(Text$, Letter, 1)ă        Char = ASC(Char$)ă        Mask = PEEK(&HE + (Char * 8) + (I \ (YSize \ 8) - Y))ă        FOR J = 0 TO 7ă            IF Mask AND (2 ^ (7 - J)) THENă                IF Style AND 2 THENă                    PSET (XPos + (XSize \ 8), I), SColă                    IF XSize AND 16 THEN PSET (XPos + (XSize \ 8) + 1, I), SColă                    IF YSize AND 16 THEN PSET (XPos + (XSize \ 8), I + 1), SColă                    IF XSize AND 32 THEN PSET (XPos + (XSize \ 8) + 2, I), SColă                    IF YSize AND 32 THEN PSET (XPos + (XSize \ 8), I + 2), SColă                END IFă                PSET (XPos, I), FColă                IF XSize AND 16 THEN PSET (XPos + 1, I), FColă                IF YSize AND 16 THEN PSET (XPos, I + 1), FColă                IF XSize AND 32 THEN PSET (XPos + 2, I), FColă                IF YSize AND 32 THEN PSET (XPos, I + 2), FColă            END IFă            IF Style AND 1 THENă                PSET (XPos, YPos + YSize), SColă                IF XSize AND 16 THEN PSET (XPos + 1, YPos + YSize), SColă                IF YSize AND 16 THEN PSET (XPos, I + 1 + YSize), SColă                IF XSize AND 32 THEN PSET (XPos + 2, I + YSize), SColă                IF YSize AND 32 THEN PSET (XPos, I + 2 + YSize), SColă            END IFă            XPos = XPos + (XSize \ 8)ă        NEXT Jă        XPos = XPos - XSizeă    NEXT Iă    XPos = XPos + XSizeăNEXT LetterăDEF SEGăEND SUBăBill McDonald                  BILL'S FIRST 3D ENGINE V1.0    alterac@id-base.com            12-04-98 (21:22)       QB, QBasic, PDS        262  7965     B3D.BAS     DECLARE SUB Pal (Col%, R%, G%, B%)ăDECLARE SUB SetPalette ()ă'B3d V1.0 Bill's 3d engineă'===========================ă'I think this is pretty good for my first success in 3dă'any help would be apreciatedă'alterac@id-base.comăDEFINT A-ZăDECLARE SUB MoveAround ()ăDECLARE FUNCTION rad& (theta%)ăDECLARE SUB SetUpPoints ()ăDECLARE SUB MoveAcint ()ăDECLARE SUB RotatePoints (x%, y%, z%)ăDECLARE SUB DrawPoints ()ăDECLARE SUB ClearPoints ()ăăCONST MaxLines = 12, Pi = 3.141592ăăDIM SHARED Obj(MaxLines, 2, 3)ă FOR I = 1 TO MaxLinesă  FOR J = 1 TO 2ă   FOR K = 1 TO 3ă    READ Obj(I, J, K)ă   NEXT Kă  NEXT Jă NEXT Iăă 'Squareă DATA -10,-10,-10, 10,-10,-10ă DATA -10,-10,-10,-10, 10,-10ă DATA -10, 10,-10, 10, 10,-10ă DATA  10,-10,-10, 10, 10,-10ă DATA -10,-10, 10, 10,-10, 10ă DATA -10,-10, 10,-10, 10, 10ă DATA -10, 10, 10, 10, 10, 10ă DATA  10,-10, 10, 10, 10, 10ă DATA -10,-10, 10,-10,-10,-10ă DATA -10, 10, 10,-10, 10,-10ă DATA  10, 10, 10, 10, 10,-10ă DATA  10,-10, 10, 10,-10,-10ă  ă 'The 3-D coordinates of our object ... stored as (X1,Y1,Z1),ă '(X2,Y2,Z2) ... for the two ends of a lineăăTYPE Pointsă      x AS DOUBLEă      y AS DOUBLEă      z AS DOUBLE                         ' The data on every point we rotateăEND TYPEăăDIM SHARED Lines(MaxLines, 2) AS Points            ' The base object rotatedăDIM SHARED translated(MaxLines, 2) AS Points       ' The rotated objectăDIM SHARED xoff, yoff, Zoff                        ' Used for movement of the objectăDIM SHARED lookup(360, 2) AS DOUBLE                ' Our sin and cos lookup tableDIM SHARED temp AS PointsăăRANDOMIZE TIMERăSCREEN 13ăSetUpPointsăMoveAroundăSCREEN 0: WIDTH 80ăăSUB ClearPointsă  'This clears the translated object from the virtual screen ... believe ită  '  or not, this is faster then a straight "cls"ăăă  FOR Loop1 = 1 TO MaxLinesă    IF (translated(Loop1, 1).z + Zoff < 0) AND (translated(Loop1, 2).z + Zoff < 0) THENă      temp.z = CINT(translated(Loop1, 1).z + Zoff)ă      nx = CINT(256 * translated(Loop1, 1).x) \ temp.z + xoffă      ny = CINT(256 * translated(Loop1, 1).y) \ temp.z + yoffă      temp.z = CINT(translated(Loop1, 2).z + Zoff)ă      nx2 = CINT(256 * translated(Loop1, 2).x) \ temp.z + xoffă      ny2 = CINT(256 * translated(Loop1, 2).y) \ temp.z + yoffă      LINE (nx, ny)-(nx2, ny2), 0ă    END IFă  NEXTăEND SUBăăSUB DrawPointsă' This draws the translated object to the screenă  FOR Loop1 = 1 TO MaxLinesă    IF (translated(Loop1, 1).z + Zoff < 0) AND (translated(Loop1, 2).z + Zoff < 0) THENă      temp.z = CINT(translated(Loop1, 1).z + Zoff)ă      nx = CINT(256 * translated(Loop1, 1).x) \ temp.z + xoffă      ny = CINT(256 * translated(Loop1, 1).y) \ temp.z + yoffă      temp.z = CINT(translated(Loop1, 2).z + Zoff)ă      nx2 = CINT(256 * translated(Loop1, 2).x) \ temp.z + xoffă      ny2 = CINT(256 * translated(Loop1, 2).y) \ temp.z + yoffă      '*IF (nx > 0) AND (nx < 320) AND (ny > 25) AND (ny < 200) AND (nx2 > 0) AND (nx2 < 320) AND (ny2 > 25) AND (ny2 < 200) THENă      LINE (nx, ny)-(nx2, ny2), 14ă    END IFă  NEXTă'* Checks If line draws out of x > 320, y > 200, Y < 0, X < 0ăEND SUBăăSUB MoveAroundă  'This is the main display procedure. Firstly it brings the object towardsă  '  the viewer by increasing the Zoff, then passes control to the useră  deg = 0ă  CLSăă  'Smaller the Zoff the Bigger the Objectă  'Zooms in Rotatingă  FOR Loop1 = -256 TO -40ă    Zoff = Loop1 * 2ă    RotatePoints Yaw, Pitch, Rollă    DrawPointsăă    WAIT &H3DA, 8ă   ă    ClearPointsă    ă    'yaw = (yaw + 5) MOD 360ă    'pitch = (pitch + 5) MOD 360ă    Roll = (Roll + 5) MOD 360ă  NEXT Loop1ă ă  P = 3ă  ST! = TIMERă  DOă    A$ = INKEY$ă    IF A$ <> "" THENă      SELECT CASE A$ă        CASE "A", "a"ă         Zoff = Zoff + 5    'Zoff + 5 = Zoom Ină         IF Zoff = 0 THEN Zoff = Zoff + 5ă        CASE "Z", "z"ă         Zoff = Zoff - 5    'Zoom  Oută         IF Zoff = 0 THEN Zoff = Zoff - 5ă        CASE ","ă         xoff = xoff - 5    'Move Left (Transilate)ă        CASE "."ă         xoff = xoff + 5    'Move Rightă        CASE "S", "s"ă         yoff = yoff - 5    'Move Upă        CASE "X", "x"ă         yoff = yoff + 5    'Move Downă        CASE CHR$(27)ă         EXIT DOă      END SELECTă    END IFăă    DrawPointsă    WAIT &H3DA, 8ă    WAIT &H3DA, 8, 8ăă    ClearPointsă    RotatePoints Yaw, Pitch, Rollă   ă    'Pitch = (Pitch + 5) MOD 360ă    Roll = (Roll + 5) MOD 360ă    'Yaw = (Yaw + 5) MOD 360ă     ă    IF TIMER - ST! >= 1 THENă     ST! = TIMERă     FramesPer = Framesă     Frames = 0ă    END IFă    Frames = Frames + 1ă    COLOR 15: LOCATE 1, 1: PRINT "FPS:"; FramesPeră  LOOPăEND SUBăăSUB Pal (Col, R, G, B)ă  ' This sets the Red, Green and Blue values of a certain coloră      OUT &H3C8, Colă      OUT &H3C9, Ră      OUT &H3C9, Gă      OUT &H3C9, BăEND SUBăăFUNCTION rad& (theta)ă  'This calculates the degrees of an angleă  rad& = theta * Pi / 180ăEND FUNCTIONăăSUB RotatePoints (x, y, z)ă  ' This rotates object lines by X,Y and Z; then places the result ină  '  TRANSLATEDăă  FOR Loop1 = 1 TO MaxLinesă    temp.x = Lines(Loop1, 1).xă    temp.y = lookup(x, 2) * Lines(Loop1, 1).y - lookup(x, 1) * Lines(Loop1, 1).ză    temp.z = lookup(x, 1) * Lines(Loop1, 1).y + lookup(x, 2) * Lines(Loop1, 1).zăă    translated(Loop1, 1).x = temp.xă    translated(Loop1, 1).y = temp.yă    translated(Loop1, 1).z = temp.zăă    IF y > 0 THENă      temp.x = lookup(y, 2) * translated(Loop1, 1).x - lookup(y, 1) * translated(Loop1, 1).yă      temp.y = lookup(y, 1) * translated(Loop1, 1).x + lookup(y, 2) * translated(Loop1, 1).yă      temp.z = translated(Loop1, 1).zăă      translated(Loop1, 1).x = temp.xă      translated(Loop1, 1).y = temp.yă      translated(Loop1, 1).z = temp.ză    END IFăă    IF z > 0 THENă      temp.x = lookup(z, 2) * translated(Loop1, 1).x + lookup(z, 1) * translated(Loop1, 1).ză      temp.y = translated(Loop1, 1).yă      temp.z = -lookup(z, 1) * translated(Loop1, 1).x + lookup(z, 2) * translated(Loop1, 1).zăă      translated(Loop1, 1).x = temp.xă      translated(Loop1, 1).y = temp.yă      translated(Loop1, 1).z = temp.ză    END IFăă    temp.x = Lines(Loop1, 2).xă    temp.y = COS(rad(x)) * Lines(Loop1, 2).y - SIN(rad(x)) * Lines(Loop1, 2).ză    temp.z = SIN(rad(x)) * Lines(Loop1, 2).y + COS(rad(x)) * Lines(Loop1, 2).zăă    translated(Loop1, 2).x = temp.xă    translated(Loop1, 2).y = temp.yă    translated(Loop1, 2).z = temp.ză    ă    IF y > 0 THENă      temp.x = COS(rad(y)) * translated(Loop1, 2).x - SIN(rad(y)) * translated(Loop1, 2).yă      temp.y = SIN(rad(y)) * translated(Loop1, 2).x + COS(rad(y)) * translated(Loop1, 2).yă      temp.z = translated(Loop1, 2).zăă      translated(Loop1, 2).x = temp.xă      translated(Loop1, 2).y = temp.yă      translated(Loop1, 2).z = temp.ză    END IFăă    IF z > 0 THENă      temp.x = COS(rad(z)) * translated(Loop1, 2).x + SIN(rad(z)) * translated(Loop1, 2).ză      temp.y = translated(Loop1, 2).yă      temp.z = -SIN(rad(z)) * translated(Loop1, 2).x + COS(rad(z)) * translated(Loop1, 2).zăă      translated(Loop1, 2).x = temp.xă      translated(Loop1, 2).y = temp.yă      translated(Loop1, 2).z = temp.ză    END IFă  NEXT Loop1ăEND SUBăăSUB SetUpPointsă  ' This sets the basic offsets of the object, creates the lookup table andă  '  moves the object from a constant to a variableăă  xoff = 160ă  yoff = 100ă  Zoff = -256ă  FOR Loop1 = 0 TO 360ă    lookup(Loop1, 1) = SIN(rad&(Loop1))ă    lookup(Loop1, 2) = COS(rad&(Loop1))ă  NEXTă ă  FOR Loop1 = 1 TO MaxLinesă    Lines(Loop1, 1).x = Obj(Loop1, 1, 1)ă    Lines(Loop1, 1).y = Obj(Loop1, 1, 2)ă    Lines(Loop1, 1).z = Obj(Loop1, 1, 3)ă   ă    Lines(Loop1, 2).x = Obj(Loop1, 2, 1)ă    Lines(Loop1, 2).y = Obj(Loop1, 2, 2)ă    Lines(Loop1, 2).z = Obj(Loop1, 2, 3)ă  NEXTăEND SUBăDieter Folger                  RUNNING TEXT                   folger@bamberg.baynet.de       12-02-98 (15:11)       QB, QBasic, PDS        24   755      RUNTEXT.BAS 'Running text for QBASICă'Written by Dieter Folger 1997ă'Public DomainăText$ = " ABC - Your source for BASIC sources "ăSCREEN 13ăDIM Textfield(800)ăC = 31: Y = 10ăDOă    P = P + 1: IF P > LEN(Text$) THEN P = 1 'increase chară    C = C + 1: IF C = 104 THEN C = 32 'color to useă    COLOR C: LOCATE 2, 40ă    PRINT MID$(Text$, P, 1);ă    FOR i = 1 TO 15ă        GET (1, 7)-(319, 16), Textfieldă        PUT (0, 7), Textfield, PSETă        PUT (0, Y), Textfield, PSETă        PUT (0, 180), Textfield, PSETă        d = 0: DO: d = d + 1: LOOP UNTIL d = 200ă        IF Y = 170 THEN R = 1 'change direction (upward)ă        IF Y = 16 THEN R = 0  'downwardă        IF R = 1 THEN Y = Y - 1 ELSE Y = Y + 1ă    NEXTăLOOP WHILE INKEY$ = ""ăENDăDave Navarro, Jr.              3D SURFACE PLOT                dave@powerbasic.com            12-14-98 (14:35)       PB                     44   725      3DPLOT.BAS  '3D Surface plotă'From "Microcomputer Graphics Techniques and Applications" by Donald Hearnă'Ported to PB by Dave Navarro (dave@powerbasic.com)ăă$LIB GRAPH ONăăSCREEN 12ăăWINDOW (-4, -3) - (4, 3)ăăRHO = 50 '30ăD = 10ăăTHETA = 1ăS1 = SIN(THETA)ăC1 = COS(THETA)ăăPHI = 1ăS2 = SIN(PHI)ăC2 = COS(PHI)ăăFOR x = 15 TO -15 STEP -.5ă FL = 0ă FOR Y = -10 TO 10ă   Z = F(x,y)ă   XE = -X*S1 + Y*C1ă   YE = -X*C1*C2 - Y*S1*C2 + Z*S2ă   ZE = -X*S2*C1 - Y*S1*S2 - Z*C2 + RHOă   SX = D*XE/ZEă   SY = D*YE/ZEă   IF FL = 0 THENă     FL = 1ă     PSET (SX, SY), 2ă   END IFă   LINE - (SX, SY), 2ă NEXT YăNEXT xăăSLEEPăSCREEN 0, 0, 0ăăFUNCTION F(x, y)ă  FUNCTION = 3*COS(.05*(X*X + Y*Y))ăEND FUNCTIONăDave Navarro, Jr.              EYE PLOT                       dave@powerbasic.com            12-14-98 (14:35)       QB, QBasic, PDS        51   951      EYEPLOT.BAS 'Eye Plotă'From "Microcomputer Graphics Techniques and Applications" by Donald Heardă'ported to PB by Dave Navarro (dave@powerbasic.com)ăăSCREEN 7ăăFOR I = -3.2 TO 3.05 STEP .05ă  GOSUB DOPLOTăNEXTă  I = -3.2ă  GOSUB DOPLOTăăC = 10ăDOă  SLEEP .05ă  FOR I = -3.2 TO 3.05 STEP .05ă    J = SIN(I) * 25ă    K = COS(I) * 23ă    L = SIN(I+.8) * 25ă    M = COS(I+.8) * 23ă    LINE (159-J, 99-K) - (159+L, 99+M), Că    IF LEN(INKEY$) THENă      EXIT DOă    END IFă  NEXTă  C = C + 1ă  IF C = 15 THEN C = 1ăLOOPăăENDăăDOPLOT:ă  X = SIN(I) * 105ă  Y = COS(I) * 90ă  A = SIN(I+.6) * 105ă  B = COS(I+.6) * 90ă  J = SIN(I) * 25ă  K = COS(I) * 23ă  L = SIN(I+.8) * 25ă  M = COS(I+.8) * 23ă  LINE (159-X, 99-Y) - (159+A, 99+B)ă  LINE (159-J, 99-K) - (159+L, 99+M), 9ă  IF D THENă    LINE (159-X, 99-Y) - (159 - D, 99 - E)ă    LINE (159+A, 99+B) - (159 + F, 99 + G)ă  END IFă  D = Xă  E = Yă  F = Aă  G = Bă  RETURNăDave Navarro, Jr.              DRAW A CARTIOID                dave@powerbasic.com            12-14-98 (14:35)       QB, QBasic, PDS        18   427      CARTIOID.BAS' Draw a Cartioidă' From "Microcomputer Graphics Techniques and Applications" by Donald Hearnă' ported to PB by Dave Navarro (dave@powerbasic.com)ăăSCREEN 12ăăWINDOW (-160, -120) - (160, 120)ăXN = 40 : YN = 0ăC1 = COS(.314) : S1 = SIN(.314)ăFOR I = 1 TO 10ă  T = XN*C1 - YN*S1ă  YN = XN*S1 + YNC1 : XN = Tă  RAD = SQR((XN - 40)^2 + YN ^ 2)ă  CIRCLE (XN, YN), RADă  YL = - YNă  CIRCLE (XN, YL), RADăNEXTăSLEEPăDave Navarro, Jr.              DRAW AN ELLIPSE                dave@powerbasic.com            12-14-98 (14:35)       QB, QBasic, PDS        17   335      ELIP.BAS    'Draw an ellipseă'From "Microcomputer Graphics Techniques and Applications" by Donald Hearnă'ported to PB by Dave Navarro (dave@powerbasic.com)ăăSCREEN 2ăăWINDOW (-6, -5) - (6, 5)ăăA = 4 : B = 2ăFOR T = 0 TO 6.4 STEP .2ă  X = A * COS(T): Y = B * SIN(T)ă  IF T = 0 THEN PSET (X, Y)ă  LINE - (X, Y)ăNEXTăăSLEEPăSCREEN 0ăJoshua Penman                  SVGA LIBRARY V2.00             jpenman@hotmail.com            12-16-98 (13:23)       QB, PDS                421  26654    SVGALIB2.BAS' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł             SVGA Library for QuickBasic 4.5 version 2.00                łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł ţ WHAT THIS IS:                                                         łă' ł   This is a the second version of a library that I wrote for QuickBasic łă' ł   to draw graphics on the VESA card. It's been enhanced from version    łă' ł   1.00 in that it now supports 5 VESA modes. I have also removed page   łă' ł   features at this stage, but will add them again when I learn how to   łă' ł   switch video pages.                                                   łă' ł ţ DISCLAIMER:                                                           łă' ł   Okay, here's the legal side of it. I, Joshua Penman, take 100% full   łă' ł   credit for this code, and I retain all rights to it. I will however,  łă' ł   allow any programmers to use this in their on code without any thanks łă' ł   to me. Sure, a little bit of thanks in the credits would be nice, but łă' ł   all I really would want is a couple of the program that uses this     łă' ł   library. You are *NOT* however, allowed to distribute modified copies łă' ł   of the library, as that wouldn't be kind to me, and you may also not  łă' ł   use this code as a "copy/paste" thing for you're own SVGA libraries,  łă' ł   in other words, don't copy and of this and claim it's you're own. And łă' ł   finally, if you're moniter blows up, you're computer starts smoking,  łă' ł   or 14 SB channels stuff up, it's you're problem, not mine. I, and     łă' ł   Cybersoft Software will not be held responsible for anything like     łă' ł   that, or for that matter anything else happening to you're computer,  łă' ł   even if it can be proven that SVGALIB caused the trouble. Okay, so I  łă' ł   don't take 100% credit, but I don't really know who wrote the screen  łă' ł   switching routines, so I can't give them credit...                    łă' ł ţ ABOUT ME:                                                             łă' ł   Before we actually get into explaining the code, here's a bit about   łă' ł   me. I live in New Zealand, which, unlike many of you will no-doubt    łă' ł   think - it's not in Sydney harbour. This is my second SVGA library &  łă' ł   it's a lot better than my first, but I've done no speed enhancing. I  łă' ł   will do that in the next version 2.10, which will make it heaps       łă' ł   faster.                                                               łă' ł ţ THANKS TO:                                                            łă' ł   I have to thank a few people for the help in this program, mainly the łă' ł   following people: Jim Emptage for his Beizer curve routine, although  łă' ł   I didn't actually use his code in the end, and while I said last time łă' ł   that I'd put it sometime, I still haven't, but he still gets credit   łă' ł   and Rich Geldreich for his Eclipse routine, because there's no easy   łă' ł   way to do circles, but his way did it great. I'd also like to thank   łă' ł   Andrew L Agers for his Blast! library, and really the sub on Line     łă' ł   drawing. I didn't copy any of his code, but it made me get a move on  łă' ł   with my own programming code.                                         łă' ł ţ HOW TO USE:                                                           łă' ł   SVGALib requires QB.QLB and QB.BI, so load QB with QB /l, and the     łă' ł   first line of you're program needs to be '$include: 'qb.bi', and then łă' ł   it's really up to you. You need to call SVGASetMode, to start it up.  łă' ł   You give different parameters to the sub to specify different modes:  łă' ł                       &H3 - DOS text (call this before you end          łă' ł                     &H100 - 640x400x256                                 łă' ł                     &H101 - 640x480x256                                 łă' ł                     &H103 - 800x600x256                                 łă' ł                     &H105 - 1024x768x256                                łă' ł                     &H107 - 1280x1024x256                               łă' ł ţ VERSION INFO:                                                         łă' ł   Version 1.00      * origional version                                 łă' ł   Version 2.00      * Added switch-banks                                łă' ł                     * Slightly optimised line drawing                   łă' ł ţ WHERE'S SVGALIB GOING FROM HERE:                                      łă' ł   In future, I hope to expand to 100s more VESA modes, and add more     łă' ł   rotines to duplicate the QB routines better. I'll try to add a 16.8   łă' ł   million colour mode too. I also hope to add heaps more SUBs like      łă' ł   POINT and GET.                                                        łă' ł ţ CONTACTING ME:                                                        łă' ł   While I've got heaps of E-mails addresses, use jpenman@hotmail.com,   łă' ł   that way I know exactly what you're talking about.                    łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Declare SUBsă' ÄÄÄÄÄÄÄÄÄÄă	DECLARE SUB SVGABox (x1%, y1%, x2%, y2%, C%)ă	DECLARE SUB SVGAFilledBox (x1%, y1%, x2%, y2%, C%)ă	DECLARE SUB SVGACircle (ox!, oy!, prx!, pry!, co%)ă	DECLARE SUB SVGALine (x1%, y1%, x2%, y2%, C%)ă	DECLARE SUB SVGASwitchBank (NewBank%)ă	DECLARE SUB SVGAPset (x%, y%, C%)ă	DECLARE SUB SVGASetMode (ModeNumber%)ă   ă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Other stuff neededă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă	'$DYNAMICă	'$INCLUDE: 'qb.bi'ă	DEFINT A-Ză	DIM SHARED InRegs AS RegTypeă	DIM SHARED OutRegs AS RegTypeă	DIM SHARED Bank%ă	DIM SHARED Table&(0 TO 1)ă	DIM SHARED Xres AS LONGă	DIM SHARED YRes AS LONGăă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' My Demo - deleteă' ÄÄÄÄÄÄÄÄÄÄÄÄÄÄă   ă	SVGASetMode &H101ă	FOR x = 0 TO Xres - 1ă		FOR y = 0 TO YRes - 1ă			SVGAPset x, y, 10ă			NEXT yă		NEXT xă	SVGALine 0, 0, Xres - 1, YRes - 1, 2ă	SVGACircle Xres / 2 - 1, YRes / 2 - 1, Xres / 2 - 1, YRes / 2 - 1, 1ă	SVGABox Xres / 2 - (Xres / 6), YRes / 2 - (YRes / 6), Xres / 2 + (Xres / 6), YRes / 2 + (YRes / 6), 4ă	SVGAFilledBox Xres / 2 - (Xres / 6) + (Xres / 12), YRes / 2 - (YRes / 6) + (YRes / 12), Xres / 2 + (Xres / 6) - (Xres / 12), YRes / 2 + (YRes / 6) - (YRes / 12), 5ă	a$ = INPUT$(1)ă	SVGASetMode &H3ăăREM $STATICăDEFSNG A-Ză' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                                SVGABox                                  łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   This draws a box using the routine SVGALine from x1%, y1% to łă' ł            x2%, y2% in colour c%                                        łă' ł                                                                         łă' ł Alogrithm: A simple alogrithm. Draw's four lines, the first one being   łă' ł            The top, the second the bottom, the third the left and the   łă' ł            fourth is the right.                                         łă' ł                                                                         łă' ł Input:     x1%          - Left edge                                     łă' ł            x2%          - Right edge                                    łă' ł            y1%          - Top edge                                      łă' ł            y2%          - Bottom edge                                   łă' ł            c%           - Colour of circle                              łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: None                                             łă' ł                                                                         łă' ł Modification History:  version 1.00 - * initial release                 łă' ł                                       * Removed assumptions             łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGABox (x1%, y1%, x2%, y2%, C%)ă	IF x1% < 0 THEN EXIT SUB                         'off the left, then exită	IF x2% > Xres - 1 THEN EXIT SUB                 'off the right, then exită	IF y1% < 0 THEN EXIT SUB                          'off the top, then exită	IF y2% > YRes - 1 THEN EXIT SUB                'off the bottom, then exită	SVGALine x1%, y1%, x2%, y1%, C%                                 'top lineă	SVGALine x1%, y2%, x2%, y2%, C%                              'bottom lineă	SVGALine x1%, y1%, x1%, y2%, C%                                'left lineă	SVGALine x2%, y1%, x2%, y2%, C%                               'right lineăEND SUBăă' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                              SVGACircle                                 łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   This draws a circle with it's centre at ox, oy, color co%    łă' ł            with the X width of PRX and the Y width of PYR               łă' ł                                                                         łă' ł Alogrithm: A comlex alogrithm - no-one understands it... (copied from   łă' ł            an ABC packet and modified for SVGA)                         łă' ł                                                                         łă' ł Input:     ox           - X center of circle                            łă' ł            oy           - Y center of circle                            łă' ł            prx          - X width of circle                             łă' ł            pry          - Y width of circle                             łă' ł            co%          - Colour of circle                              łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: None                                             łă' ł                                                                         łă' ł Modification History:  version 1.00 - * initial release                 ł       ă' ł                        version 2.00 - * removed assumptions             łă' ł                                       * fixed problem with lines        łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGACircle (ox, oy, prx, pry, co%)ă	DIM xe AS LONG, ye AS LONG, e AS LONGă	IF pry = 0 THENă		SVGALine (ox - prx), (oy), (ox + prx), (oy), co%ă		EXIT SUBă		END IFă	IF prx = 0 THENă		SVGALine (ox), (oy - pry), (ox), (oy + pry), co%ă		EXIT SUBă		END IFă	IF pry <= prx THENă		x = 0: y = pryă		xe = 0: ye = CLNG(prx) * prxă		e = -ye \ 2: C = ye \ pryă		DOă			IF e <= 0 THENă			DOă				SVGAPset (ox + x), (oy + y), co%: SVGAPset (ox - x), (oy + y), co%ă				SVGAPset (ox + x), (oy - y), co%: SVGAPset (ox - x), (oy - y), co%ă				x = x + 1ă				xe = xe + pryă				e = e + xeă				LOOP WHILE e <= 0ă			ELSEă				SVGAPset (ox + x), (oy + y), co%: SVGAPset (ox - x), (oy + y), co%ă				SVGAPset (ox + x), (oy - y), co%: SVGAPset (ox - x), (oy - y), co%ă				END IFă			y = y - 1ă			ye = ye - Că			e = e - yeă			LOOP UNTIL y = 0ă		SVGAPset (ox + x), (oy), co%: SVGAPset (ox - x), (oy), co%ă		SVGAPset (ox + x), (oy), co%: SVGAPset (ox - x), (oy), co%ă	ELSEă		x = 0: y = prxă		xe = 0: ye = CLNG(pry) * pryă		e = -ye \ 2: C = ye \ prxă		DOă			IF e <= 0 THENă			DOă				SVGAPset (ox + y), (oy + x), co%: SVGAPset (ox - y), (oy + x), co%ă				SVGAPset (ox + y), (oy - x), co%: SVGAPset (ox - y), (oy - x), co%ă				x = x + 1ă				xe = xe + prxă				e = e + xeă				LOOP WHILE e <= 0ă			ELSEă				SVGAPset (ox + y), (oy + x), co%: SVGAPset (ox - y), (oy + x), co%ă				SVGAPset (ox + y), (oy - x), co%: SVGAPset (ox - y), (oy - x), co%ă				END IFă			y = y - 1ă			ye = ye - Că			e = e - yeă			LOOP UNTIL y = 0ă		SVGAPset (ox), (oy + x), co%: SVGAPset (ox), (oy + x), co%ă		SVGAPset (ox), (oy - x), co%: SVGAPset (ox), (oy - x), co%ă		END IFăEND SUBăăDEFINT A-Ză' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                             SVGAFilledBox                               łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   This draws a box using the routine SVGALine from x1%, y1% to łă' ł            x2%, y2% in colour c%                                        łă' ł                                                                         łă' ł Alogrithm: A simple alogrithm.                                          łă' ł                                                                         łă' ł Input:     x1%          - Left edge                                     łă' ł            x2%          - Right edge                                    łă' ł            y1%          - Top edge                                      łă' ł            y2%          - Bottom edge                                   łă' ł            c%           - Colour of circle                              łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: None                                             łă' ł                                                                         łă' ł Modification History:  version 1.00 - * initial release                 ł      ă' ł                        version 2.00 - * removed assumptions             łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGAFilledBox (x1%, y1%, x2%, y2%, C%)ă	IF x1% < 0 THEN EXIT SUB                         'off the left, then exită	IF x2% > Xres - 1 THEN EXIT SUB                 'off the right, then exită	IF y1% < 0 THEN EXIT SUB                          'off the top, then exită	IF y2% > YRes - 1 THEN EXIT SUB                'off the bottom, then exită	FOR y% = y1% TO y2%                                           'start loopă		SVGALine x1%, y%, x2%, y%, C%                          'draw the lineă		NEXT y%                                                      'loop...ăEND SUBăăDEFSNG A-Ză' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                                SVGALine                                 łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   Draws a line in SVGA from x1%, y1% to x2%, y2% in colour c%  łă' ł                                                                         łă' ł Alogrithm: This alogrithm has changed quite a lot since version 1.00,   łă' ł            in that it can now be up to 500% faster (only on lines that  łă' ł            were 2 pixels big). I'm using Pythagora's Therom to calcula- łă' ł            te the number of pixels to be drawn, and I'm only drawing    łă' ł            that many, unlike version 1.00 which drew 1000 no matter how łă' ł            long it was.                                                 łă' ł                                                                         łă' ł Input:     x1%          - Left edge                                     łă' ł            x2%          - Right edge                                    łă' ł            y1%          - Top edge                                      łă' ł            y2%          - Bottom edge                                   łă' ł            c%           - Colour of line                                łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: None                                             łă' ł                                                                         łă' ł Modification History:  version 1.00 - * initial release                 łă' ł                        version 2.00 - * Put in an alogrythim            łă' ł                                       * removed assumptions             łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGALine (x1%, y1%, x2%, y2%, C%)ă	IF x2% < x1% THEN SWAP x1%, x2%             'switch if varibles are wrongă	IF y2% < y1% THEN SWAP y1%, y2%             'switch if varibles are wrongă	IF x1% < 0 THEN x1% = 0                                  'if off the leftă	IF x2% > Xres - 1 THEN x2% = Xres - 1                   'if off the rightă	IF y1% < 0 THEN y1% = 0                                   'if off the topă	IF y2% > YRes - 1 THEN y2% = YRes - 1                  'if off the bottomă	IF C% < 0 THEN EXIT SUB                        'invalid colour, then exită	WHILE C% > 255                                    'loop until c% is validă		C% = C% - 255                                           'subtract 255ă		WEND                                                            'loopă	TotalMoveSqrd = ((x2% - x1%) ^ 2) + ((y2% - y1%) ^ 2)'calculate the totală	TotalMove = SQR(TotalMoveSqrd) 'number of pixels in the line (Pythagoras)ă	XStep = (x2% - x1%) / TotalMove                'calculate x move per stepă	YStep = (y2% - y1%) / TotalMove                'calculate y move per stepă	StartX = x1%                                  'set for later calculationsă	StartY = y1%                                  'set for later calculationsă	FOR i = 1 TO TotalMove                                    'start the loopă		SVGAPset StartX + (XStep * (i - 1)), StartY + (YStep * (i - 1)), C%ă		NEXT i                   ' <<< loop           ^^^ Pset at right placeăEND SUBăă' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                                SVGAPset                                 łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   Draws a dot at location x%, y%, in colour c%                 łă' ł                                                                         łă' ł Alogrithm: None.                                                        łă' ł                                                                         łă' ł Input:     x%           - Pixel X co-ord                                łă' ł            x%           - Pixel Y co-ord                                łă' ł            c%           - Colour of pixel                               łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: None                                             łă' ł                                                                         łă' ł Modification History:  version 1.00 - * initial release                 łă' ł                        version 2.00 - * Added "lookup" table            łă' ł                                       * Added Switch banks              łă' ł                                       * Removed all assumptions         łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGAPset (x%, y%, C%)ă	IF x% < 0 THEN EXIT SUB                          'off the left, then exită	IF y% < 0 THEN EXIT SUB                           'off the top, then exită	IF x% > Xres - 1 THEN EXIT SUB                  'off the right, then exită	IF y% > YRes - 1 THEN EXIT SUB                 'off the bottom, then exită	IF C% < 0 THEN EXIT SUB                        'invalid colour, then exită	WHILE C% > 255                                    'loop until c% is validă		C% = C% - 255                                           'subtract 255ă		WEND                                                            'loopă	DEF SEG = &HA000                                       'set video segmentă	NewBank% = (Table&(y%) + x%) \ 65536                      'calculate bankă	IF NewBank% <> Bank% THEN SVGASwitchBank NewBank%             'Switchbankă	POKE (Table&(y%) + x% + 1) MOD 65536, C%                     'Actual PSETăEND SUBăă' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                              SVGASetMode                                łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   Sets screen to and compatible mode                           łă' ł                                                                         łă' ł Alogrithm: None                                                         łă' ł                                                                         łă' ł Input:     ModeNumber% - &H100 (640x400x256)                            łă' ł                          &H101 (640x480x256)                            łă' ł                          &H103 (800x600x256)                            łă' ł                          &H105 (1024x768x256)                           łă' ł                          &H107 (1280x1024x256)                          łă' ł                          &H3 (Standard DOS text)                        łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: Mode number one of the above                     łă' ł                                                                         łă' ł Modification History:  version 1.00 - * Initial release                 łă' ł                        version 2.00 - * Added different mode numbers    łă' ł                                       * Added a "look-up" table         łă' ł                                       * Added "switch-bank" support     łă' ł                                       * Added XRes and YRes for errors  łă' ł                                       * Added a standard mode return    łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGASetMode (ModeNumber%)ă	InRegs.ax = &H4F02                                   'Set function numberă	InRegs.bx = ModeNumber%                                      'Set varibleă	INTERRUPT &H10, InRegs, OutRegs                           'Call Interruptă	IF ModeNumber% = &H3 THEN EXIT SUB                'If Text, then quit nowă	IF ModeNumber% = &H100 THEN Xres = 640: YRes = 400             'case modeă	IF ModeNumber% = &H101 THEN Xres = 640: YRes = 480             'case modeă	IF ModeNumber% = &H103 THEN Xres = 800: YRes = 600             'case modeă	IF ModeNumber% = &H105 THEN Xres = 1024: YRes = 768            'case modeă	IF ModeNumber% = &H107 THEN Xres = 1280: YRes = 1024           'case modeă	IF Xres = 0 THEN Xres = 1: YRes = 1     'stops error if non-standard modeă	REDIM Table&(0 TO YRes - 1)                      're-setup's Lookup tableă	FOR x% = 0 TO YRes - 1                                   'Start make loopă		Table&(x%) = x% * Xres - 1                             'Stick in infoă	NEXT x%                                                          'Loop...ăEND SUBăă' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżă' ł                              SVGASwitchBank                             łă' ĂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ă' ł                                                                         łă' ł Purpose:   Switches the bank                                            łă' ł                                                                         łă' ł Alogrithm: None                                                         łă' ł                                                                         łă' ł Input:     NewBank%                                                     łă' ł                                                                         łă' ł Output:    None                                                         łă' ł                                                                         łă' ł Interface Assumptions: Valid NewBank%                                   łă' ł                                                                         łă' ł Modification History:  version 2.00 - * Initial release                 łă' ł                                                                         łă' ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăSUB SVGASwitchBank (NewBank%)ă	InRegs.ax = &H4F05                                   'set function numberă	InRegs.bx = 0                                                   'set to 0ă	InRegs.dx = NewBank%                                     'set to new bankă	INTERRUPT &H10, InRegs, OutRegs                           'call interruptă	Bank% = NewBank%                                     'update bank varibleăEND SUBăSam Thursfield                 VIPER SVGA ROUTINES            sam.thursfield@btinternet.com  12-17-98 (17:19)       QB, PDS                71   4665     VSVGA.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VSVGA.ZIP",4^6:Z&=3224:?STRING$(50,177);ăU"%up()%9%%%R-%6TA$JnI=#*S*.%%h9%%%.%.%%%x&%lfS^y'y>h'>>T.[8Nba(wăU"3PR\P)tLgkt81_/GCER%7pQ*^)AQ37st',RiGgXaY\V^dHb9h7em<vX^Z0R+CVtăU"ZAMjlwjF#W\xhMrtmx3Dl=,7XaI1VVAclVYVfX9Nr0:;^TdoY[nlX(On.KZq'#OăU"-XoDOA_*Il7GIWdro^T;Hurk).QroME_H*_/E=Ea8D:O7yftB/S+EeEwUo;b7X*ăU"ahCXa25r,sfk$rG*=OWKL.lVemOwkgh:L,d7B9VE3/+l&xiP#<rz5k9=:L#TnZ_ăU"mYwIeEgH4nqqJ8,WFfZO/zhv,G^I$UjF?gHmvgh\-#L<I3;zB<bu:Qk*#--0jFZăU"BXX2v:Z;57m\F5+Aq7zFNGT>QbEi7FHaPrK?j'[?8md^1Ri?tTq2\-A(:pZA&YgăU"D\FXlX8=$U6K'tLmY'v;QjppG++1c[S;0l)IUq<+7N&q_soLrjqHM*4y9G'i,j'ăU"]CN.[K7kKUM\\^qjJ^Gdg\jR?kk'aAvZ%YOk(Ge*o]]V?kLe1ae6%g+9a?m/:+RăU"mom6\cz+e6#d6+*#_'8:n161;xQ#gNea^4U#g:L/8#P,h>nGW%h+W>#==CFZ?&hăU"cSQhQ'fmgYc^aeMk?,;FX[C'N?g<UG0GY_F$.17P-m$eM7?Dk2s-KIffqU6C&k#ăU"r)M?hs6bW0Mr'TwBycOM&%;&85'1w4l8[aHJ?QZ/*Yh[+B*C+%jmBuUW+;7_AW_ăU"aYJ4D#9ua4YZ>Z*fQ8D*%YJgGeGJbJj(jfE7,O,EMQ%R4g*Hk%dafx_Tgo\Rk#DăU"cJw*WJW>=f5j^D\#?Oj1q%s50u%Gl/,k.7HnH-%s6S7s$M-L+q8Mecp)a#q.-\căU"xYO^g5.>*Vs>j0'q,87bH;V(ktMs+)7p1.#vOo'.[ZI+;rgmpr#Su44GTm+A1UoăU"ne'N(u.^a;(4051pboXB<%Nb4J/=[+SN1gG7-HpPKmbgTTW5GuqmFrN>P(:1Fk,ăU"UQYBxCRJ$,RxO\mr=T#d,:0=q9b/I[&:28rdN:).?U8h+$x\F9_Yjh]MkJ/AKPAăU"x<sQt#apv7pds/Ww(02iMcyAjX\ZN#U-kbb(]r:VBrI_.3Egg9xWq7N;;1.h[*0ăU"BsbjA&e7?[s-:Q_*80i,FY+rL(\GeC1+H+DfC9_3FB]^5KOG)Q/]aY-&a=8KIJaăU"/L5HKo;tllXvdH86R-1H,</ht4<E:wtF6S-yoj3%ISFM9[D('6+qKQYlTw+<HvhăU"dS7bYFt=nWN3m.uOAdH.uUNL,nQG)nIcm4k8pVc7IA\S$K\Y#JH%bVp0/rVUO8dăU"IM4f74#qQBLe)q-?0IeNTS;GTjZEZ+TKsSKqSJea*OJ:$BYXpDGduR6RO0(U_q]ăU"&Me/*Qt^O_veOcsEO_0O9uKeNKU,X$%p=a_MSnJ7eZ>iSggZUDriY1$P7OnY)AdăU"%;TM^'<t\?*6oKcb)4p^[;&-ag'H^'/9fA.k8('p8=)lTym9OT5IVw*0pcEWP4aăU"w*/anwA;S_VK6>>+*UDFtE-T7&2\jfR/qqualdObUIEcQo6o,EdjPE-0V4E:c8XăU"r3_5uVGwB1L&IBRQ_6nX6q3c?8X)8J6NI:Vphw]'uE5['ZS3;MJ?6>i9,J;2jbCăU"y3C[6sp]f(:S[_z;/Xlqjq)FG-Li#VF#2VVFlKht91K(Im)XGMM.<YcQss3TMp'ăU"I$a_Q7t?A?3&Z(im]WJ:S(kCVaqs1$Q.wQVB9H$DQT9HSz<gEk+L&SW\sFlf%qBăU"R2nIp89vCR3W:ke?TK$+Skc<3irgK[69;jV?N4.*JF'L,e+hh-[EAs'$UJuVx6TăU"C?JN>\)tm749\WD[jsZemFFmudk2+K=v$aUS%_=QF3BWTo_]b=w8ZixBlO\KV*DăU"GW$#'SXAF8l+fxIK)mHy2%g_Hnigj<&nup(%)9%%#%-%<_^cJNo&5+e[*%%^%7%ăU"%.#%%%%(x%lf%SgfxMd'<^\jk5wY=Bx0[cY.7<Q$ZS*PyoG&01cw.#5?Ssir;R&ăU"JSO,j6?8'c87$4sQh*(V$1\HMmhlhMlh,=hx::NZN:4.-9O]JnX;$42SOs*N(uoăU"TTmH#V(QHZ>;^)ecWL\oLN'#>8i78*)h,aQe:/>4w_.PYA3Q3JgXVoN,-Gjm&47ăU"'TpS8nW2l%\c3a8Am:8^e:LT^Lgr.DBjdJBAxf8ll%8B9#TJ(GO%a^aR?^\(/CrăU"Oskc1Lka4J[Hs7=%Aw9IGV4QH8IEr&ff#u^8R_tWCC\lMZaaYaYRxu\F)\6O:?OăU"c&b4aPV4j:qPQI3Q4=t>b-ja,zK#:=nCC]En-:lo0*c3.)mN8YRu]<qD,pjafwRăU"kc9%'pyTcesv#Cd.OJ7_:)P1hQji)FJrVu(.;T+b/d#(uA\mYI9^Q:3T)#i,Z7jăU"4&#7<VI^3)\opI<6Wc8s([6J#ktc^H63n+AIWrF+>S(y'>[,GjTAluvsX;MXVRxăU"f3x+)qXs0N[+RgF&[>Fj?O^]Kx7^Y#Jpn<;-uT:>+SH/VLa;=hQ[1V5kK,LTVZ6ăU"EcnhAe><t%4Z4Y&NF3ek)Ypr2iH/Po2&cZ5l3:V$jedSV&4d_nSc3$=m6<a,a8xăU"EB.^0ZM<vJI%mT?U^pfLM4<]lr9^BWhx74SYC-80pt6ABM8LBN9kB;kqaE6bB2GăU"$NS6Jd8am+X;-<0FQa8^^6*j\ZkUEJBke#LsETe^J(S3S;]ep_5d$FkyRe$&R6JăU"l.'D0c[*ddZ2b4fw7IRF2MGFyz^T#7,E6xLA4(=(JiU8^3U+xbBA6oY'HxismQ;ăU"gc2o^qZRDMKaaH[n9MH]]]4qLQG2>y.-\B_<BKqBr4iX;/c)q)y7wfD)#Lb/:YGăU"Y/ihC(07;=iA]-bEnlaf1LgQ+Zs?),(Uxu+WXUTj7^:*[Dcxq,)GapX_HT%ELemăU"c7KQk>M2:pPgCv]m+(VwZ#(=&0>55bP4pKLQ[;px_IC'HslujO3goITFNYxDkDKăU"n]6j>[J,(qN$v90T&-3Ni=O&:(E_x?Tucuh0AT.LEtt%#fo(a*t_UMaE%$cOt^%ăU"D/\G8frkO+Q=hA'xHjbMKZUL%+*L3m/Ir1Vw=Y9F?&^gq>bb*o.lDl\Vn>o<ip;ăU"9\mUl'sB&P]$hYk6M1;ZGGG.\w(1J-kklOFG-9K*j;*mY2Q<bV+N1X-xZ]$exrbăU",UgmU8pt0AlMPmWAvFp1BdEzm9P1UbP+,k(/'Fuv_mD9;n7N-/8<,gR$X+xBULyăU"Jy2tp:[R#1]?MKvqh*PF\+fo0ba1Cd;zQPL&a1='b7D*iABPK0X8<cIF3Y1P6FEăU"uO2ZdN#TujxEho2YK_Y-$Glc&,VnB/H^9V[O6sNOKq=AVuR>[4/Q_/C9mbctM?]ăU"/YsnWjsxqUQ_6kU\s6xe/;xG2=))Kn7&n*AM);aVn46*<zQQu1,RNH>*S(7$r8qăU"AOGDyOGt]HwgWc^\v)CK8^&dP];B91:/6k[uPskOXDbok:_[FlH(%AE([(8t3%TăU"*CdK/gxO[(>oiJ9uA8lcA5>5j:Y64f,XFc1Yu&2Of/a;l\YkHkQ)gREd]ZHO?)RăU"eBkiq=(ApUA9'Ool>TKv;EDVYH89)4jiQ^(Q1phg]<XL9GhDR9R*a72L2ognWp4ăU"I8eLqD/s&tubm6A+oYc>ow9AO5p_pX^I9-RY,CjI0Z?J1(.zPuG4o43BOroUN(MăU"]uwX:<#Wxsml+;'?;yqhISzSYt8=%F)fljl\B)QT-h+&+7TqT5Ondc+Ia?(X\X6ăU"WDiP/\L5Ra7gw_m%Jo>,xodNZBN?gAeN2fYbb]dY*(^;jS.O;Kl9:o4O[R[\CbiăU"8')pP[Tj1-&%<tX#&w0w<#AE1fI)Z5SWAPH9[yaAX(lpd/;v\D;-4qx5cDdUQ=wăU"Q#tHX>Oa^oD3D?kJs<Nbx&%up&'%9%9%%%%-%36T$J^nI#*'S*%%&h9%%%.%%%%ăU"%%%%%&%E%%%%%%.%%%x&%lfS(y'yu%p&'9%%9%%#%-%<_^cJNo&5+e[*%%^%7%%ăU".%%%%%%%%%&%%E%%%%&+%C%%x%%lfSg%fxup%*+%%%%%'%.'%=%%%%91%%%%%ăEND SUBăCLOSE:IF S=230AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăM/K Productions                FLOAD (AN ALTERNATIVE TO BLOAD)The QBasic Source              12-20-98 (21:00)       QB, QBasic, PDS        51   3301     FLOAD.BAS   DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FLOAD.ZIP",4^6:Z&=2197:?STRING$(50,177);ăU"%up()%9%'%7-%QNm7F0O48Np+7%%23%%%.%%%%kq%tfiS[gfx&2%<>GR^7w]$=NăU"MF7K0UZ[>mgoQ^g%Q*IhfheOnbV2ZC.qG29o2bB/$96wszOF\In57s_bu:i78aPăU"McxvrC,&M?Ym28ZG<IW?2-)UX;7oSsxb#(K2onJ3V3?04TfZ;fM<%C?&)+vH&5+ăU"OXd%k-q9gfZNW3)'fq<KBLx$Xh_OXZlXanC7R<ftf_.=3T8vP^%Kx)'b_JtJE&tăU"xpR-$Y2Q$NZ)82a/4KIac3JF5l<p(xk49g.52F<KYn?62L1VUxhkJa'q\j'#r>kăU":+h)pMk,j+/J,5&,BZ*Mk\dS.b1hG_l]M)Z=wSW#Y]4vZ2Q4#oF)T:U;hink\4măU"haO^Q+RoJ==n]H\UXYL53ImJ3&F=b+,w9I+]E0wyI.Cd,jl[s,JlO7j#PqbxJl)ăU"Zb_9i3?WfY&;\&^u:K6E$/6Za^KEkEW37M4*^:3<OH3/Hjit'I#P0$NBli4m7h3ăU"<OIDlo[R6]*YV6B0jP-v1qlvNdaal/$\RO#E+T+y9n5Tbw:C2e03>'^_bbGV;mkăU"Mf5>G?au-oUn?<.T7)^Yb0;/5)a%g8Ua[Jq?]ifUx-+^aLkQ#SOP.+I>SZE(Py_ăU"QIRm_MkGp+3Lmjs?M23NbCU?de&)RRcS%yc:M)+[uKVZ5J.>sT]RiFONgQrJsO)ăU".jq[^ZCRyRogM:cL2hc51]CSY^7OI%62#v=0:9OQp1Bb5x$g^RXP<WiE*[=;&,%ăU"(phYuEXi1)_f(/3Z>&K:0v5N-)0D[c'JWYN+6yd_MK$e4c=_aioYod&F-Z7):H;ăU"&'vAT;+ssDHBa0TURwTvYUCsl,E;x\o5j9/Y8\d>4(2qUYT_>QK2a0xbeoyA0*BăU"S;y0L,8[H;[^-V)&)x5lnnk?Vt:RFbU3bS9J2LbW\6-r(geY[C7TOtjlsHDl%(oăU"m+(f^.w;UFPh2A^_T)9?qp:%EGe>KnuVjC3QK)c)_)$ZY8&mW?AjbxgAhxth*XiăU"aHVF'$0P=>eA]=JL:)t%o2-G%JCU;03?1rumJ34jAK?YLY3n[J)W*vS.p'Dr(\lăU"KZn[gN2x.k'CqXKaG:0n(Up]e#/D/nfW%5F9b/3XKPk3-8;i1;Aw86WCoA3=MUwăU"=(4Zg;^Ma6e*i0f).TuP4+6-HeHZZT?%>B7vaYow$DpK<z3acq6g6b4GrE?)pCYăU"\8=ATyfTJJ7y0^SIGn'%nd1\+:N?M<fp3aHM</W#U,vj$=>F[jEg&q&'(Kkk3AJăU"r,?0'hHqgJAl%p2$_+1=NO<skgl+YCcP+1_r_o:qp&E$iL47F/:_UDs1,a8akPdăU"%.R'e,Jki6;J>;t3zMmT_ofV^5dE5#5[85kjdbvNoqW'%s2]s+5[C1p+r=TjL>năU"\1#\X.ujHLU[Zx#4D'xPoq68t4F*+VxhDoYB)+v<T_EmdLg,g+w2.^[]=sb[J^+ăU"xWA;n%a)&k,qM\x(e*Jy.BjICdaR9Fpp+rg<:8dv42<1A9nXz9MbBFvi+d-H]g_ăU"4FGdK20P;=V\Ih5O9^jF7V,53Slw?Zxx_16B2IS7[Z:3b9FjgRoMMnAJVhJ+Gp\ăU"FPMtdF#DjPEO;s]URzR3]u(j9NqvVEr(#]I/[3z/co>W<Xtxn]2o\tmVZ\ZDgIqăU"J.VwT<ZCn#C&Lf(c1*Xz+N*+[4cm[oot-Yg2xXqa$GEm5UsOq'JC.a2cmS%P6K*ăU"*_[veNoA=-N^t\I\e\i4]EG3#As7b'UvX?XQ1Ufnsk1Gbl0Aw?0(*?.Kns7Ys.?ăU"1<qhRw,Bi-zZ0K^h=d5K]Dm9Uv)ScJkZ<Wq#-M(D*S9%V'D*KaEUsl(6(-Xq'$ZăU"?tW.f7Ng>OX44-q\)u(dq\?(jksS9DRQ>'6agrH5vVo^qu4X+fZML]m7Fr-.kBmăU"0.Wc08Nq9N=>p\c&cXuPVHUXc/?#g<VS4lSe-'+^mLL8(,#Cj7W#.1o(p=-XOU1ăU"RI>XIXtJS?;ogGdSD[zmZB:rdsj?6ejK_k??io*ADB140__n1WbWr?6nK5y?8>YăU"D/IO/Y24lAl?$#cq_Vuqh[8=.e^ZutZTsv_oN]gdQ'9fofk\fhe_0wNp&yeTLyaăU"LBic59WfVJA28lM\98fk-U<^sgqS>^[p\76C9:$fo\I<p7kzT:F%s#p6Nv^AL1lăU"yaq]hJ_?Co^j(VUvkdggza#=Cvu4%up()%9%'%7-%AN#7F2g+BWG&7%%S.%%%.%ăU"%%%kq%tfiS[xuwfVd,+R[U-k8HGm&erKlUn*hw+gsExcqlM2[?&WL9-;pN(4CyGăU"N?)0)m2#C(Fx_prsJkO%.k:RfH(?BRI1Oyk?ebw*MD#(mNq%Al2+0LJq-;YhY(RăU"eB1b:P/oa[LsHj^\JIi-v/TWLp2Hd(V8:ydWtII.R?o_jH^88K$EUoKU3iy1,\BăU"uuE2,_SB.Mqb%N%-oE>a<E?q;[\xbV&b^I/ho:[c1mX:Q]f**l*QfSR#3(zAfS&ăU"kr+A\f?P<H&qz+UMboIt>QM\]J5++(7':^&\?9J45gQNSs9ZrMO2f9k3%#J3,ewăU"_je$FQ\65Nuoh\/YkDf/9FWBZVNG3*\P_?OUJZ-R04:[z?w:\:,B:x^Nwfn$%TuăU"p&%'9%9%%'%-+%QN7=F0O8*Np+%+%23%%%.%%%%%%%%%&%E%%%%%%%%%k%qtfi%ăU"Sgfx%up&'%9%9%%'%-%'AN7F^2gBW%G&%%'S.%%%.%%%%%%%%%%%E%7%%A+%%%kăU"q%tfiS%xuwu%p*+%%%%%'#%'%=%%%%6%-%%%%%ăEND SUBăCLOSE:IF S=50AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăYousuf Philips                 OPENFLI VERSION 0.1            philipz@emirates.net.ae        12-22-98 (21:56)       QB, QBasic, PDS        442  18483    OPENFLI.BAS ''''''''''''''''''''''''''''''''''''''''ă' Program    : Plays FLI Files         'ă' Name       : OPENFLI Version 0.1     'ă' Programmer : Yousuf Philips          'ă' Company    : Y P I                   'ă' Updated On : 10th of Dec. 1998       'ă' Email - [philipz85@hotmail.com]      'ă' [http://members.xoom.com/Philipz/]   'ă''''''''''''''''''''''''''''''''''''''''ă     ă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to play FLI animation files. In 1996 Carl Gorringe        */'ă'/* created a similar type of program which played FLI and FLC but it was  */'ă'/* called slooooow. I have been in contact with Carl and he told me that  */'ă'/* in 1997 Denis Boyles created VIEWFLI2.BAS which is a replica of his    */'ă'/* FLI player but used assembly to speed up the display of the frames.    */'ă'/* Without any assembly just good old BASIC, YPI has created an FLI player*/'ă'/* which is as fast as VIEWFLI2.BAS but also works in QBASIC 1.0. I would */'ă'/* like to give credit and special thanks to Carl Gorringe.               */'ă'/* Minor editing was done because of a bug found by Carl Gorringe. Thanks */'ăă'/* If you use any of this code in your program then you must credit YPI   */'ă'/* and also Carl Gorringe. This program has been placed in  Public Domain */'ă'/* and All Rights Are Reserved.                                           */'ăă'/* YPI has also created a BMP loader and an PCX loader. The source can be */'ă'/* gotten from our website <http://members.xoom.com/Philipz/>             */'ă'/* The YPI Website has programs for beginners, tutorials and utilities.   */'ă'/* Carl Gorringe's Email is <carl.gorringe@rhosoft.com>                   */'ăăDECLARE SUB ShowFLI (FileName$)ăăCLSăPRINTăPRINT " FLI Player for QBASIC - By YPI BASIC Programming Incorporation"ăPRINT " Press Any Key When You Want The Program To End"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă   ENDăELSEIF INSTR(FileName$, ".") = 0 THENă   FileName$ = FileName$ + ".fli"ăEND IFăăCALL ShowFLI(FileName$)ăăSUB FileFormatăă'Flic Files (.FLI) Format description:ă'ă'     The details of a FLI file are moderately complex, but theă'idea behind it is simple: don't bother storing the parts of aă'frame that are the same as the last frame.  Not only does thisă'save space, but it's very quick.  It's faster to leave a pixelă'alone than to set it.ă'ă'     A FLI file has a 128-byte header followed by a sequence ofă'frames. The first frame is compressed using a bytewise run-lengthă'compression scheme.  Subsequent frames are stored as theă'difference from the previous frame.  (Occasionally the firstă'frame and/or subsequent frames are uncompressed.)  There is oneă'extra frame at the end of a FLI which contains the differenceă'between the last frame and the first frame.ă'ă'     The FLI header:ă'ă'     byte size name      meaningă'     offsetă'ă'     0    4    size      Length of file, for programs that wantă'                         to read the FLI all at once if possible.ă'     4    2    magic     Set to hex AF11.  Please use anotheră'                         value here if you change format (even toă'                         a different resolution) so Autodeskă'                         Animator won't crash trying to read it.ă'     6    2    frames    Number of frames in FLI.  FLI files haveă'                         a maxium length of 4000 frames.ă'     8    2    width     Screen width (320).ă'     10   2    height    Screen height (200).ă'     12   2    depth     Depth of a pixel (8).ă'     14   2    flags     Must be 0.ă'     16   2    speed     Number of video ticks between frames.ă'     18   4    next      Set to 0.ă'     22   4    frit      Set to 0.ă'     26   102  expand    All zeroes -- for future enhancement.ă'ă'     Next are the frames, each of which has a header:ă'ă'     byte size name      meaningă'     offsetă'     0    4    size      Bytes in this frame.  Autodesk Animatoră'                         demands that this be less than 64K.ă'     4    2    magic     Always hexadecimal F1FAă'     6    2    chunks    Number of 'chunks' in frame.ă'     8    8    expand    Space for future enhancements.  Allă'                         zeros.ă'ă'     After the frame header come the chunks that make up theă'frame.  First comes a color chunk if the color map has changedă'>from the last frame.  Then comes a pixel chunk if the pixels haveă'changed.  If the frame is absolutely identical to the last frameă'there will be no chunks at all.ă'ă'     A chunk itself has a header, followed by the data.  Theă'chunk header is:ă'ă'     byte size name meaningă'     offsetă'     0    4    size Bytes in this chunk.ă'     4    2    type Type of chunk (see below).ă'ă'     There are currently five types of chunks you'll see in a FLIă'file.ă'ă'     11        FLI_COLOR Compressed color mapă'     12        FLI_LC    Line compressed -- the most common typeă'                         of compression for any but the firstă'                         frame.  Describes the pixel differenceă'                         from the previous frame.ă'     13        FLI_BLACK Set whole screen to color 0 (only occursă'                         on the first frame).ă'     15        FLI_BRUN  Bytewise run-length compression -- firstă'                         frame onlyă'     16        FLI_COPY  Indicates uncompressed 64000 bytes soonă'                         to follow.  For those times whenă'                         compression just doesn't work!ă'ă'     The compression schemes are all byte-oriented.  If theă'compressed data ends up being an odd length a single pad byte isă'inserted so that the FLI_COPY's always start at an even addressă'for faster DMA.ă'ă'FLI_COLOR Chunksă'     The first word is the number of packets in this chunk. Thisă'is followed directly by the packets.  The first byte of a packetă'says how many colors to skip.  The next byte says how many colorsă'to change.  If this byte is zero it is interpreted to mean 256.ă'Next follows 3 bytes for each color to change (one each for red,ă'green and blue).ă'ă'FLI_LC Chunksă'     This is the most common, and alas, most complex chunk.   Theă'first word (16 bits) is the number of lines starting from the topă'of the screen that are the same as the previous frame. (Foră'example, if there is motion only on the bottom line of screenă'you'd have a 199 here.)  The next word is the number of linesă'that do change.  Next there is the data for the changing linesă'themselves.  Each line is compressed individually; among otheră'things this makes it much easier to play back the FLI at aă'reduced size.ă'ă'     The first byte of a compressed line is the number of packetsă'in this line.  If the line is unchanged from the last frame thisă'is zero.  The format of an individual packet is:ă'ă'skip_countă'size_countă'dataă'ă'     The skip count is a single byte.  If more than 255 pixelsă'are to be skipped it must be broken into 2 packets. The sizeă'count is also a byte.  If it is positive, that many bytes of dataă'follow and are to be copied to the screen.  If it's negative aă'single byte follows, and is repeated -skip_count times.ă'ă'     In the worst case a FLI_LC frame can be about 70K.  If ită'comes out to be 60000 bytes or more Autodesk Animator decidesă'compression isn't worthwhile and saves the frame as FLI_COPY.ă'ă'FLI_BLACK Chunksă'     These are very simple.  There is no data associated withă'them at all. In fact they are only generated for the first frameă'in Autodesk Animator after the user selects NEW under the FLICă'menu.ă'ă'FLI_BRUN Chunksă'     These are much like FLI_LC chunks without the skips.  Theyă'start immediately with the data for the first line, and go line-ă'by-line from there.  The first byte contains the number ofă'packets in that line.  The format for a packet is:ă'ă'size_countă'dataă'ă'     If size_count is positive the data consists of a single byteă'which is repeated size_count times. If size_count is negativeă'there are -size_count bytes of data which are copied to theă'screen. In Autodesk Animator if the "compressed" data shows signsă'of exceeding 60000 bytes the frame is stored as FLI_COPY instead.ă'ă'FLI_COPY Chunksă'     These are 64000 bytes of data for direct reading onto theă'screen.ă'ă'-----------------------------------------------------------------------ă'And here's the PRO extensions:ă'-----------------------------------------------------------------------ă'ă'This is supplemental info on the AutoDesk Animator FLI and FLC formats.ă'ă'The following is an attempt at describing the newer chunks and framesă'that are not described in the Turbo C FLI library documentation.ă'ă'  Chunk type       Chunk IDă'  ----------       -----------ă'  FLI_DELTA        7 (decimal)ă'ă'  First WORD (16 bits) is the number of compressed lines to follow.  Nextă'  is the data for the changing lines themselves, always starting with theă'  first line.   Each line is compressed individually.ă'ă'  The first WORD (16 bits) of a compressed line is the number of packets ină'  the line.  If the number of packets is a negative skip -packets lines.ă'  If the number of packets is positive, decode the packets.  The format ofă'  an individual packet is:ă'ă'  skip_countă'  size_countă'  dataă'ă'  The skip count is a single byte.  If more than 255 pixels are to beă'  skipped, it must be broken into 2 packets.  The size_count is also a byte.ă'  If it is positive, that many WORDS of data follow and are to be copied toă'  the screen.  If it is negative, a single WORDS value follows, and is to beă'  repeated -size_count times.ă'ă'  Chunk type       Chunk IDă'  ----------       -----------ă'  FLI_256_COLOR    4 (decimal)ă'ă'  The first WORD is the number of packets in this chunk.  This is followedă'  directly by the packets.  The first byte of a packet is how many colorsă'  to skip.  The next byte is how many colors to change.  If this number isă'  0, (zero), it means 256.  Next follow 3 bytes for each color to change.ă'  (One each for red, green and blue).ă'ă'  The only difference between a FLI_256_COLOR chunk (type 4 decimal) and aă'  FLI_COLOR chunk (type 11 decimal) is that the values in the type 4 chunkă'  range from 0 to 255, and the values in a type 11 chunk range from 0 to 63.ă'ă'  NOTE:  WORD  refer to a 16 bit int in INTEL (Little Endian) format.ă'         WORDS refer to two-bytes (16 bits) of consecutive data. (Big Endian)ă'ă'  .FLC special frames and chunksă'ă'  FLC's may contain all the above chunks plus one other:ă'ă'  Chunk type       Chunk IDă'  ----------       -----------ă'  FLI_MINI         18 (decimal) 12 (Hex)ă'ă'  From what I understand,  this is a miniture 64 x 32 version of the firstă'  frame in FLI_BRUN format, used as an button for selecting flc's fromă'  within Animator Pro.  Simply do nothing with this chunk.ă'ă'  FLC New Frameă'ă'  FLC's also contains a frame with the magic bytes set to hex 00A1.  Thisă'  is the first frame in the .flc file.  Actually it isn't a frame at allă'  but to have several chunks within it that specify file location infoă'  specific to Animator Pro.  IE:  filepath, font to use, and .COL file info.ă'  This FRAME may be skipped while loading.  That's right!  Ignore it!  Theă'  frame header is the same length as all other frames.  So you may read theă'  frame header, then skip past the rest of the frame.ă'ă'ă'  NOTE:  When reading the FLI header on the newer FLI and FLC files, theă'  FLI signature bytes are AF12 instead of AF11 used in the older FLI files.ă'  Also, you cannot ignore the screen width and height they may not beă'320 x 200!ă'ă'  Allowable screen sizes include:ă'ă'  320 x 200, 640 x 480, 800 x 600, 1280 x 1024ă'ă'ă'  NOTE:  the delay value between frames appears to be in 1000th's of aă'  second instead of 70th's.ăăEND SUBăăDEFINT A-ZăSUB ShowFLI (FileName$)ăăRep:ăOPEN FileName$ FOR BINARY AS #1ăIF LOF(1) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   ENDăEND IFăă'/* Animation File Header */'ăLengthOfFile$ = SPACE$(4): Valid1$ = SPACE$(2): NoOfFrames$ = SPACE$(2)ăScreenWidth$ = SPACE$(2): ScreenHeight$ = SPACE$(2): BitsPerPixel$ = SPACE$(2)ăNoOfTicksPerFrame$ = SPACE$(2): Valid2$ = SPACE$(2): EmptySpace$ = SPACE$(110)ăGET #1, , LengthOfFile$ăGET #1, , Valid1$ăGET #1, , NoOfFrames$ăGET #1, , ScreenWidth$ăGET #1, , ScreenHeight$ăGET #1, , BitsPerPixel$ăGET #1, , Valid2$ăGET #1, , NoOfTicksPerFrame$ăGET #1, , EmptySpace$ăăIF HEX$(CVI(Valid1$)) <> "AF11" THENă   PRINT " INVALID FLI "ă   SYSTEMăELSEIF CVI(ScreenWidth$) <> 320 OR CVI(ScreenHeight$) <> 200 THENă   PRINT " FLI IS OF WRONG DIMENSION. WILL NOT PROCEED"ă   SYSTEMăEND IFăăSCREEN 13ăFOR NumberOfFrames = 1 TO CVI(NoOfFrames$) + 1ă   '/* Frame Header */'ă   Bi& = LOC(1) + 1ă   BytesInFrame$ = SPACE$(4): Valid3$ = SPACE$(2): NoOfChunks$ = SPACE$(2)ă   EmptySpace$ = SPACE$(8)ă   GET #1, , BytesInFrame$ă   GET #1, , Valid3$ă   GET #1, , NoOfChunks$ă   GET #1, , EmptySpace$ă   Bi& = Bi& + CVL(BytesInFrame$)ăă   BytesInChunk$ = SPACE$(4): ChunkType$ = SPACE$(2)ă   FOR NumberOfChunks = 1 TO CVI(NoOfChunks$)ă      Di& = LOC(1) + 1ă      GET #1, , BytesInChunk$ă      GET #1, , ChunkType$ă      Di& = Di& + CVL(BytesInChunk$)ă      ChunkType = CVI(ChunkType$)ă    ă      IF INKEY$ <> "" THEN ENDă      '/* According to the Chunk Type a different process will be performed */'ă      IF ChunkType = 11 THEN     '/* 11 - FLI_COLOR(64) PALETTE */'ă         NoOfColorPackets$ = SPACE$(2): NumberOfColorsTOSkip$ = SPACE$(1)ă         NumberOfColorsToChange$ = SPACE$(1): PaletteRed$ = SPACE$(1)ă         PaletteGreen$ = SPACE$(1): PaletteBlue$ = SPACE$(1): NoOfColor = 0ă         IF Repeat = 0 THENă         GET #1, , NoOfColorPackets$ă         FOR NoOfPacket = 1 TO ASC(NoOfColorPackets$)ă            GET #1, , NumberOfColorsTOSkip$ă            GET #1, , NumberOfColorsToChange$ă            NumberOfColorsToChange = ASC(NumberOfColorsToChange$)ă            IF NumberOfColorsToChange = 0 THEN NumberOfColorsToChange = 256ă            NoOfColor = NoOfColor + ASC(NumberOfColorsTOSkip$)ă            FOR SetPalette = 0 TO NumberOfColorsToChange - 1ă               GET #1, , PaletteRed$ă               GET #1, , PaletteGreen$ă               GET #1, , PaletteBlue$ă               OUT &H3C8, NoOfColoră               OUT &H3C9, ASC(PaletteRed$)ă               OUT &H3C9, ASC(PaletteGreen$)ă               OUT &H3C9, ASC(PaletteBlue$)ă               NoOfColor = NoOfColor + 1ă            NEXT SetPaletteă         NEXT NoOfPacketă         END IFă      ELSEIF ChunkType = 12 THEN     '/* 12 - FLI_LC - Line Compressed */'ă         NoOfLinesNotToChange$ = SPACE$(2): NoOfLinesThatChange$ = SPACE$(2)ă         NoOfPixelPackets$ = SPACE$(1): NoOfPixelsToSkip$ = SPACE$(1)ă         NoOfPixels$ = SPACE$(1)ă         GET #1, , NoOfLinesNotToChange$ă         GET #1, , NoOfLinesThatChange$ă         FOR DecodeLine = CVI(NoOfLinesNotToChange$) TO CVI(NoOfLinesThatChange$) + CVI(NoOfLinesNotToChange$) - 1ă             GET #1, , NoOfPixelPackets$: XPixel = 0ă             FOR DecodePacket = 1 TO ASC(NoOfPixelPackets$)ă                 GET #1, , NoOfPixelsToSkip$ă                 GET #1, , NoOfPixels$ă                 XPixel = XPixel + ASC(NoOfPixelsToSkip$)ă                 NoOfPixels = ASC(NoOfPixels$)ă                 IF NoOfPixels > 127 THENă                    SimilarPixelsColor$ = SPACE$(1)ă                    GET #1, , SimilarPixelsColor$ă                    NoOfPixels = (256 - NoOfPixels)ă                    LINE (XPixel, DecodeLine)-STEP(NoOfPixels - 1, 0), ASC(SimilarPixelsColor$)ă                    XPixel = XPixel + NoOfPixelsă                 ELSEă                    AllPixels$ = SPACE$(NoOfPixels)ă                    GET #1, , AllPixels$ă                    FOR SetPixel = 0 TO NoOfPixels - 1ă                         PSET (XPixel + SetPixel, DecodeLine), ASC(MID$(AllPixels$, SetPixel + 1, 1))ă                    NEXT SetPixelă                    XPixel = XPixel + NoOfPixelsă                 END IFă             NEXT DecodePacketă         NEXT DecodeLineă      ELSEIF ChunkType = 13 THEN     '/* 13 - FLI_BLACK - Black screen */'ă         LINE (0, 0)-(319, 199), 0, BFă      ELSEIF ChunkType = 15 THEN     '/* 15 - FLI_BRUN - Byte Run-Length Compression */'ă         NoOfPixelPackets$ = SPACE$(1): NoOfPixels$ = SPACE$(1): XPixel% = 0ă         IF Repeat = 0 THENă         FOR Linez = 0 TO 199ă             GET #1, , NoOfPixelPackets$ă             FOR DecodePacket = 1 TO ASC(NoOfPixelPackets$)ă                GET #1, , NoOfPixels$ă                NoOfPixels = ASC(NoOfPixels$)ă                IF NoOfPixels < 128 THENă                   SimilarPixelsColor$ = SPACE$(1)ă                   GET #1, , SimilarPixelsColor$ă                   LINE (XPixel, Linez)-STEP(NoOfPixels - 1, 0), ASC(SimilarPixelsColor$)ă                   XPixel = XPixel + NoOfPixelsă                ELSEă                   NoOfPixels = (256 - NoOfPixels)ă                   AllPixels$ = SPACE$(NoOfPixels)ă                   GET #1, , AllPixels$ă                   FOR SetPixel = 0 TO NoOfPixels - 1ă                       PSET (XPixel + SetPixel, Linez), ASC(MID$(AllPixels$, SetPixel + 1, 1))ă                   NEXT SetPixelă                   XPixel = XPixel + NoOfPixelsă                END IFă             NEXT DecodePacketă             XPixel = 0ă         NEXT Lineză         END IFă      ELSEIF ChunkType = 16 THEN     '/* 16 - FLI_COPY - Uncompressed 64000 Bytes */'ă         PixelColor$ = SPACE$(320)ă         FOR YPixel = 0 TO 199ă            GET #1, , PixelColor$ă            FOR XPixel = 0 TO 319ă               PSET (XPixel, YPixel), ASC(MID$(PixelColor$, XPixel + 1, 1))ă            NEXT XPixelă         NEXT YPixelă      ELSEă         PRINT "Invalid FLI Chunk Type.": ENDă      END IFă      SEEK #1, Di&ă   NEXT NumberOfChunksă   SEEK #1, Bi&ăNEXT NumberOfFramesăCLOSEăăRepeat = 1ăGOTO Rep:ăăEND SUBăYousuf Philips                 LOADS 24-BIT BMP FILES         philipz@emirates.net.ae        12-22-98 (21:56)       QB, QBasic, PDS        254  11862    24BITBMP.BAS''''''''''''''''''''''''''''''''''''''''ă' Program    : Loads 24-BIT BMP Files  'ă' Name       : 24BITBMP Version 0.1    'ă' Programmer : Yousuf Philips          'ă' Company    : Y P I                   'ă' Updated On : 24th of Nov. 1998       'ă' Email - [philipz85@hotmail.com]      'ă' [http://members.xoom.com/Philipz/]   'ă''''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to load 24-BIT BMPs in SCREEN 13.                         */'ăă'/* We all know it isn't possible to actually load a 24-BIT image into a   */'ă'/* 8-BIT graphics mode. What has been done is to extract the RGB of each  */'ă'/* pixel color and then search through a given 256 color palette for the  */'ă'/* closest color. The default 256 color palette in SCREEN 13 isn't good   */'ă'/* enough for the algorithm so a color palette created by Steve Demo was  */'ă'/* used and is located in the SUB ChangePalette. If you have a palette    */'ă'/* and would like to  try it out on  the algorithm then  place it in the  */'ă'/* ChangePalette SUB.  If it is  better then Steve  Demo's palette then   */'ă'/* please send it to us and we will use it in the next released version.  */'ăă'/* If you use any of this code in your program then you must credit YPI.  */'ă'/* I would like to give special thanks to Steve Demo for is color palette.*/'ă'/* YPI has created an assortment of graphics loaders and players and they */'ă'/* can all be found at <http://members.xoom.com/Philipz/>                 */'ăăDECLARE SUB ChangePalette (Alg%)ăDECLARE SUB Open24 (FileName$)ăăTYPE BMPHeaderă   ValidID AS STRING * 2          '/* Must be 'BM'ă   SizeOfFile AS LONG             '/* Size of entire file in bytesă   Reserved AS LONG               '/* Four empty bytesă   OffsetOfBitMap AS LONG         '/* The location in the file where theă                                  '   bitmap is locatedăEND TYPEăăTYPE WindowsBMPInfoHeaderă    SizeOfHeader AS LONG        '/* Size of Information Headeră                                ' 40 - Windows | 12 - OS/2 1.x | 64 OS/2 2.xă    Widthz AS LONG              '/* Width of image in pixelsă    Heightz AS LONG             '/* Height of image in pixelsă    Planes AS INTEGER           '/* Number of Planes. Must be '1'ă    BitsPerPixel AS INTEGER     '/* Number of bits per pixelă                                ' Possible values are 1,4,8,16,24,32ă    CompressMethod AS LONG      '/* Compression Methodă                                ' 0 - Uncompressedă                                ' 1 - 8 Bit RLE Compressionă                                ' 2 - 4 Bit RLE Compressionă    ImageSizeInBytes AS LONG    '/* Size of image in bytesă    HorizontalResol AS LONG     '/* Horizontal Resolutionă    VerticalResol AS LONG       '/* Vertical Resolutionă    ColorsUsed AS LONG          '/* Number of Colors used | 0 - All Usedă    ImportantColors AS LONG     '/* Number of Important ColorsăEND TYPEăăCLSăFILES "*.bmp"ăPRINT " 1st 24-BIT BMP Loader for Qbasic (ver 0.1) - A YPI Product"ăINPUT " Enter File Name - ", FileName$ăIF INSTR(FileName$, ".bmp") = 0 THEN FileName$ = FileName$ + ".bmp"ăCALL Open24(FileName$)ăăWHILE INKEY$ <> "": WENDăin$ = INPUT$(1)ăSCREEN 2: SCREEN 0ăPRINT " 1st 24-BIT BMP Loader for Qbasic (ver 0.1) - By YPI (BASIC Programming Inc.)"ăPRINT " Program is Public Domain, (c) Copyrighted by YPI, All Rights Reserved"ăPRINT " Programmed By Yousuf Philips in 1998"ăPRINT " Send suggestions and comments to philipz85@hotmail.com"ăPRINT " If you have a better color palette, please send it to us"ăPRINT " Visit the YPI Website at http://members.xoom.com/Philipz/"ăWait$ = INPUT$(1)ăăDEFINT A-Ză'/* Sub to change the color palette                                        */'ăSUB ChangePalette (Alg)ăăIF Alg = 1 THENă   '/* An excellent color palette from PALSTUFF.BAS [Graphics.abc|09/1995] */'ă   '/* Created by Steve Demo                                               */'ă   Change$ = "#####M#M##MMM##M#MM8#MMM88888b8b88bbb88b8bbb8bbb+++"ă   Change$ = Change$ + "...222555999===@@@DDDHHHKKKOOOSSSVVVZZZ^^^bbb3##8##"ă   Change$ = Change$ + "=##?&&B**E--H11K55N88Q<<T@@XDDZII]NN_SSbYY3+#8-#=/#"ă   Change$ = Change$ + "B2#G4#L6#Q9#V;#\>#\B*]F2^K:_OA`TIaXQb]Y33#66#99#<<#"ă   Change$ = Change$ + "??#BB#EE#HH#LL#OO#RR#UU#XX#[[#^^#bb##8%#:(#<,#?/#A3"ă   Change$ = Change$ + "#C7#F:#H>#KB#ME#OI#RM#TP#WT#YX#\\YbYRbQJbJG^GDZDAWA"ă   Change$ = Change$ + ">S>;O;8L85H52E2/A/,=,):)&6&$3#YbbQbbJbbE__A\\=ZZ:VV"ă   Change$ = Change$ + "7RR5NN2JJ0FF-BB*>>(::%66#33Y^bQ[bJXbBUb:Rb3Ob+Mb#Jb"ă   Change$ = Change$ + "#F\#BV#>P#:J#6D#3?#/9#,3YYbQRbJJbEE_@@\<<Y88V55R33N"ă   Change$ = Change$ + "11J..F,,B**>'':%%6##3/@$2B#5D#8F#;H#>J#AL#DN#GP#JR#"ă   Change$ = Change$ + "MT#PV#SX#VZ#Y\#]_#bYb`S`^N^\H\ZCZX=XV8VT3UP0QL.MH+I"ă   Change$ = Change$ + "D(EA&A<%<7$73#3-+&1-'5/):2+;3+=4,?5-@6-B7.D8/E9/G:0"ă   Change$ = Change$ + "I;1J<1L=2N>3O?3Q@4SA5UB6VD8WF;XH>YJAZMD[OG\QJ]SM^VP"ă   Change$ = Change$ + "_XS`ZVb]ZZ##X)#W0#U6#T;#S@#RF#PJ#ON#CN#6M#*M##L(#K3"ă   Change$ = Change$ + "#K?#KH#FL#>M#5M#-N6#Q>#QD#QL#QQ#NQ#FQ#@Q#9Q#1R#+R##"ă   Change$ = Change$ + "bbb"ă   FOR Loops = 0 TO 255ă      OUT &H3C8, Loopsă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 1, 1)) - 35ă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 2, 1)) - 35ă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 3, 1)) - 35ă   NEXT Loopsă   Change$ = ""ăELSEă   '/* Randomized color palette */'ă   FOR Loops = 1 TO 255ă      Blue = INT(RND * 256) \ 4ă      Green = INT(RND * 256) \ 4ă      Red = INT(RND * 256) \ 4ă      OUT &H3C8, Loopsă      OUT &H3C9, Redă      OUT &H3C9, Greenă      OUT &H3C9, Blueă   NEXT LoopsăEND IFăăEND SUBăăSUB Open24 (FileName$)ăăDIM BMPHeader AS BMPHeaderăDIM BMPInfoHeader AS WindowsBMPInfoHeaderăă'/* Open file and check if it is empty                                     */'ăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă   PRINT " File Is Empty"ă   CLOSEă   KILL FileName$ă   EXIT SUBăEND IFăă'/* Extract BMP information from the file                                  */'ăGET #255, , BMPHeaderăGET #255, , BMPInfoHeaderăăIF BMPHeader.ValidID <> "BM" THENă   PRINT " Invalid BMP File"ă   EXIT SUBăELSEIF BMPInfoHeader.BitsPerPixel <> 24 THENă   PRINT " Not 24-bit Image "ă   EXIT SUBăEND IFăăDIM ColorPalette(255, 3)ăDIM PixelArray(2000, 3)ăColorDif = 3ăăSCREEN 13ă'/* Sub which changes the palette */'ă'/* Valid values - 1 - Color Palette created by Steve Demo                 */'ă'/*                0 - Random Color Palette                                */'ă'/* If you want to use your own color palette edit the function, and if you*/'ă'/* think you palette works well with the program send it to us.           */'ăCALL ChangePalette(1)ăă'/* Capture the current color palette into an array                        */'ăFOR Loops = 0 TO 255ă   OUT &H3C7, Loopsă   ColorPalette(Loops, 1) = INP(&H3C9)ă   ColorPalette(Loops, 2) = INP(&H3C9)ă   ColorPalette(Loops, 3) = INP(&H3C9)ăNEXT Loopsăă'/* Calculate the number of bytes per line for the current image           */'ăLineExtract$ = SPACE$(BMPInfoHeader.Widthz * 3)ăIF (4 - ((BMPInfoHeader.Widthz * 3) MOD 4)) <> 4 THENă   LineExtract$ = LineExtract$ + SPACE$(4 - ((BMPInfoHeader.Widthz * 3) MOD 4))ăEND IFăLineExtract& = LEN(LineExtract$)ăăIF BMPHeader.OffsetOfBitMap = 0 THEN BMPHeader.OffsetOfBitMap = 55ăă'/* Resize image to fit the Screen                                         */'ăActualHeight! = 199 / (BMPInfoHeader.Heightz - 1)ăActualWidth! = 319 / (BMPInfoHeader.Widthz - 1)ăIF ActualHeight! > 1 THEN ActualHeight! = 1ăIF ActualWidth! > 1 THEN ActualWidth! = 1ăActualHeight1! = (BMPInfoHeader.Heightz - 1) / 199ăActualWidth1! = (BMPInfoHeader.Widthz - 1) / 319ăIF ActualHeight1! < 1 THEN ActualHeight1! = 1ăIF ActualWidth1! < 1 THEN ActualWidth1! = 1ăWHILE INKEY$ <> "": WENDăăFOR YHeight = BMPInfoHeader.Heightz - 1 TO 0 STEP -ActualHeight1!ă   '/* Extract only the image lines which will be shown                    */'ă   GET #255, BMPHeader.OffsetOfBitMap + ((BMPInfoHeader.Heightz - YHeight - 1) * LineExtract&) + 1, LineExtract$ă   FOR XWidth = 0 TO BMPInfoHeader.Widthz - 1 STEP ActualWidth1!ă       XWidthPosition = XWidth * 3ă       '/* Extract the RGB of each pixel                                   */'ă       PixelBlue = ASC(MID$(LineExtract$, XWidthPosition + 1, 1)) \ 4ă       PixelGreen = ASC(MID$(LineExtract$, XWidthPosition + 2, 1)) \ 4ă       PixelRed = ASC(MID$(LineExtract$, XWidthPosition + 3, 1)) \ 4ă       PixelPut = 0: Movement = 0ă       '/* Check if the RGB or an RGB close to it are in the color array   */'ă       FOR PixelArraySearch = 1 TO ArrayNoă          IF PixelBlue >= PixelArray(PixelArraySearch, 1) - ColorDif AND PixelBlue <= PixelArray(PixelArraySearch, 1) + ColorDif THENă             IF PixelGreen >= PixelArray(PixelArraySearch, 2) - ColorDif AND PixelGreen <= PixelArray(PixelArraySearch, 2) + ColorDif THENă                IF PixelRed >= PixelArray(PixelArraySearch, 3) - ColorDif AND PixelRed <= PixelArray(PixelArraySearch, 3) + ColorDif THENă                   PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), PixelArray(PixelArraySearch, 0)ă                   PixelPut = 1ă                   EXIT FORă                END IFă             END IFă          END IFă       NEXT PixelArraySearchă       IF PixelPut = 0 THENă          '/* Algorithm to find the closest color in the color palette */'ă          DOă             FOR Loops = 0 TO 255ă                IF PixelBlue >= (ColorPalette(Loops, 3) - Movement) AND PixelBlue <= (ColorPalette(Loops, 3) + Movement) THENă                   IF PixelGreen >= (ColorPalette(Loops, 2) - Movement) AND PixelGreen <= (ColorPalette(Loops, 2) + Movement) THENă                      IF PixelRed >= (ColorPalette(Loops, 1) - Movement) AND PixelRed <= (ColorPalette(Loops, 1) + Movement) THENă                         IF ColorPalette(Loops, 1) = ColorPalette(Loops, 2) AND ColorPalette(Loops, 2) = ColorPalette(Loops, 3) AND Movement > 3 THENă                            IF PixelBlue = PixelGreen AND PixelBlue = PixelRed THENă                               PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă                               IF ArrayNo < 2000 THENă                                  ArrayNo = ArrayNo + 1ă                                  PixelArray(ArrayNo, 1) = PixelBlueă                                  PixelArray(ArrayNo, 2) = PixelGreenă                                  PixelArray(ArrayNo, 3) = PixelRedă                                  PixelArray(ArrayNo, 0) = Loopsă                               END IFă                               EXIT DOă                            END IFă                         ELSEă                            PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă                            IF ArrayNo < 2000 THENă                            ArrayNo = ArrayNo + 1ă                               PixelArray(ArrayNo, 1) = PixelBlueă                               PixelArray(ArrayNo, 2) = PixelGreenă                               PixelArray(ArrayNo, 3) = PixelRedă                               PixelArray(ArrayNo, 0) = Loopsă                            END IFă                            EXIT DOă                         END IFă                      END IFă                   END IFă                END IFă             NEXT Loopsă             Movement = Movement + 1ă          LOOPă       END IFă   NEXT XWidthăNEXT YHeightăCLOSEăăEND SUBăAndrew S. Gibson               GRAVITY INFLUXOR ARCHIVE [1/3] zapf_dingbat@juno.com          11-04-98 (06:12)       QB, PDS                2727 180199   GF_1.BAS    ' Gravity Influxor Archive [1 of 3]ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"GF_1.ZIP",4^6:Z&=135032:?STRING$(50,177);ăU"%up()%9%%%.-%1AIxJL;LPY*W[%%Ev%%%1%%%%ln%hwix%UVSwLf&ClJ>qb8?WhăU"tgeS&$*(H[3wc4IOc:WR;1>r,)>.(tBG-/o5P4X5'm0se5i=a1:N;r5X&t5;IqeăU"52a*$R#7]%)Dm+D.g+fEGhLd&b5ra?*?;QsYZ=M7m]4.YG+,muhpp4ug;elbkdSăU"6gpx<huHvvvW2MPDrVIwDu8ugAuhwd#q6MPMPEj.NKpTnDNwzBBl,R;4hkJBWoEăU"S(%QU6rsru&te$/Q\WE%wcKNQ(-mbjfMWu.X7d6YW.z#yBbI0YetR?#o_SNt]kFăU"PMv0<KRSvLpl8^:1hV]yl^]5fnACR7PrYrr^DcAq,?p#jH4X^Cbo[mgW/L8MuxvăU"68kyuo3qIVvYn]\ogoQz2#DDGtp>BTGac$(dUD=JPJb*O&Pjftm0bZoyOWNM1LuăU"$44oU_AkNP<X(-XzpT<tHTX&YwU4NZxJp^Herz4<W]f*VT>7J$Y_bd6&+.DQERmăU"DlaiV4opyQ+);J0pn+J'CTpd->iTBos2WLFvr*z-eUeDJ]n.z1plTlN.cvF(^X:ăU"h$>QXx50MpBFxkzkr;/,:JB2V9]yc_7vscZJ4pr3^e.U<660.PbGUOPT%**tjH:ăU"lh7lvq%Mw/05B>9h=F5$9$9_9ufGX6uDnZt?hPeOd^w%+cX^Q0R<zeFu80x9M$^ăU"]Mo-HdfN+LVZ/l,+:sD1UhZgSjzW0lh>rX%/4TIz]wdSSLx-vpO3PegJ2Tt#'RQăU"NR>33$36<m^A2T90<5zh'(*$RQNXmi.:*:$:q\pm9:hFhNzA#H';bJfC0<TWp;XăU"dZx?W<%$0O3b%7xsmPLGRZJS;a*[rZDF_WSJWdlVT(jVO4\&<;gN(xzzmaw,XgvăU"%g8tvui*Fbg4A&EASPOST-C]=zv*Z#fW.qEwcA3tJY4uwsvXpyMiJ?WVt3$8&z-ăU"r$/J'YRT,Z,Be^,n]A/8tBq97mh^TXrV5Xw55J]Bn><g)f6zD%kE#]vO^2>;cHRăU"zjq=dLvq=pV6Y244uty3_QY>ogze#BwEcCGSEQV6JJpn(b(HDWb)EwMR32%;F]#ăU"4CMMtvu9:oCBhQ_FdCrBFlZ]SRDgNZ(+_R<pF]_]p9^,E06Bz_xIPt$&FAh:^ZoăU"CkGhRp;:]3Au^^tXWT$6zZ1EnEn8rjTcgV3pf'w6'Q6;e:Z,$g#u6\UwiOjJDj3ăU"hGdY_lVrQT,YYpAd8v?fJfj?h3Wb>7D/zoed)VVMwilqFNtT$X=PQ3/J>zirpyXăU"YKmJ=bJbgD#ul.)1#MU_MUU))>)cd<kEgKjE[5h%G%>y<q<<J.?OOO$MFA):\9lăU"<t+C_R43p]oz?HEi,LR)''0arS7h0<xBuBwBNuwgggl3NJVhzzzvivz;VlvVV]OăU"f8;b3QA&LpLB2^i_UBj^tj#l#;P/e:O5l<]#DSpN7=;KrF%WtZmbn*I2\>5V4,2ăU"Auk]B.VqqDfCTn^BE2w[:<*x5H$7Yt;s#X\fSmaefYjgm#38K;SIc8n5\LKd/k(ăU"/+r6gOM7bj-u1F^MAQqrwk2iGlMhQDV.+6sLXdek]#[*;XDtYKs\^R$<c*GU%kGăU"J/,G7=2u/:e:x:.Q.P99A9S(0BFyt6V/Ki0t-W=kuiki=WkS9k\h.[?O/6p?I]6ăU"mEBTLxbJxyF9r.J.tEW9+'*0Dmo<-naKB^uKHs9F2FuF2ZIgq-/-M/9CEE*>Q>ZăU"rndz;\&(+N(-<kqjJs-'bQ%/*7bjjs'ik^.l:l2jt$Qju3N33;=;CU/RqM1Z<wNăU"+8MM2rQ__)v<%(YNpfR(RoAEe?AUh/Tmgs8L$b*dvQW$.+ZSx\^Cdm]D0i4N]APăU",d-r3Cl>)Zl00.RRq$mzC.peq&./:Fzlomjj>MEM)f<mR5//]OaG:Q7*VR_2R4#ăU"H)<B^2C3uV6any'RL&)NB+d*KrV3QV6V8#Q^kO>v4.6+#2*=BM%y]W;:=,c?9F4ăU"mbkssQ:So\AErnDrnVu*]F5T(,HgfKl.:Pl\t7Tc)t9ptppNd%d(JQx?3\FM<86ăU"^o>7YnJ5Pe65)iPu<b=GJQsQ\pU.3D%UdnZ8mbvCd-]#?[Mxa$nVDx$P^dwQbK^ăU"f<'3VIN;lO7FNhK*4;/j\s$,++.klXuO12uuMwo1E4[8BuP)YG/*)>U5EaB5/oEăU"PqUb=c4O\j'^SR75ozp*F('X?d;pEYw%^\VgEq-k/uMcSd-EioCDF<C*[BBJ7.>ăU"%?1T'5oFEXXpiR;$.:jmqX_XnWW/=mtQ#a#&voX%6B&.c]#arv+>^._VPvc:KwLăU"K_]WI[4/l?S'lv7$LtnH8u4Xbl],Dc91tg[tL&tpLt\5-/6kj=V,nK*]+(;>[QkăU"EW+ESiJ9x,QS'=bA:wPlee19u-uRRZRG9'>-hEq1QPe&KQ2SC/P'?Z$>2'1-33_ăU"*&Gm*nhOcmIc,F5Xt;PMeD;/U>:=-:05V9*_Kez;Z;lUX?L?E6>P\p-\YsfvG4HăU"1,_rWMWA>y8X7knwy[Gj-5U5#c[&?<:jcRh4;j&C8D[TYp=1Q*c9Vtr-mLul9plăU"UD/7s>V/t0E3bP&Jw]dm8w4mQAM22L12Z6$jF;x'Px.xxk:P/;trrrrMP2PKWKjăU"fai<l8m+gc-GWbSTlSiI7c;$/pFcq7_YqrN3#t5a^o,6q.9gloCou;KKKM;Mn2)ăU"qFKkJ^?%Vbmo[7=K8%snHJGhTB/ej6'p-1kuVboR9sR33psUSrwwim6'XY#3[>PăU"r0=\x?]-9Mmhco,J0RLX6Es^j6_yVBl$qA<GoxqjJeCT,s$[ZT73uq72'ueUpl%ăU"oucRtr1P$i=ZUrc:adueeDh=A&aO%5:;5n(c0RuRJJ'ttR>*3^h'-.g<JpGvfNJăU"d\A/xn9BvXN6=$+T0)BJhz*&h6NVzxK#3M1K5FpaRd$SBHwuw&5M9$\:'KZ5DqYăU".X-ChQa^/L/SSdQuM&L>cWt0#TYB#bNp#pyMYG*fdcaPGt0Cn\#0=kV)]B:nPI3ăU"Ye:*g6FghX9/\]Bsp)2\\XXNk]\PuhfsFc*MX8Ta26T89q7miAJ;cR+50+%05ZMăU"Pi(xxbuOqq[dGq:-&1.%0P94I5=F9X,[o.5gD9EU>8s6ZH:6Y?/?ZmLyIE#wPV-ăU",0ua:IDAWN<&bq+RmsUjMZ_AN+$dVe<B5<dB]zuH=]0*)bCA14QKnV.nfn8*5oRăU":477q^$W7h4q>x./z3B.1zbtnKNC-jBTa27-Q$sX;57c'\9mEYFxfuo(b$-+&rXăU"H8;2t,pr$Nwr?MrlTpp^vvcNbT8uXpvph.MH^g*Ln?D]j>W=T-V'-4d0t](dAhCăU"0Cg9%bbpp[*xp=lPrJ\fwkJ3&5$,DZKU5?j9*/\$>zf1.I$[\>tqgf/Hy.BN-&FăU"w6gW%aT1l<Unx.7QuE=<u,f,b*.OhjR_>3)1[g),X*W[LzMpLZ6EHA4v3KOliraăU"S+<ftq9W.kJyLdYNZAgv1d=dPZ,:.m05QPhG<m_cNRu[e2o/B,r8oR\=flR=0mkăU"tNmlrBlbbtWlnhJuh6h7XltkZ[<$rwrPQe(hMvduJ8e-'/G/Itr(.hdS*I9m1/GăU"vlR*piNSP%[>mEexP.H63KgoIT:??P9<YX#\xScMim_sPUVJMK8zG*0gM6p/YRkăU"F(Yr2UP>QY_X,Cu79Y,m^A61M^TS+9,Uo[YYw?xN9#gSHZ$:KTZn6v&*(&FjJbtăU"A)>dfjckF1:n+%,kP62jmFyuupe,.u].k8ELB5XHPaePw:oKwHePK9#=uqUC7ZhăU"ofRa&h)68a[mc6SSs0ZKK+B;vS\*a%%,:QdPjirk=nn5DGERRrR:I1>OPTA?A%NăU"[TC5bi?o2rKnq0rd\=Rn%kG6tf=3OI;.Fxbq$nY4Xlt6&'0:%fq$Gt>7Wlk+]l6ăU"^'_$.cFEqp(FOX*gbBWvbsg\YLWGGW]Eatl;kV=0XZ]mUF/:$lbUbgwh'%&M&>LăU"_ncCJlOkc9IPYKUn#3H;A)Ml7(;s1FAcp8Z<Y$]:*f#'f,1<,,t#ddZ6++ArqzhăU"7ZTpvfoXP7/pIM7?0OkSIT1xY$n.xWq*qGDh+UbbO:MgcF-8:V,kB8(?uY>9QQ<ăU"5$-_)b\a2Xs$]ktS88jUX[wKq(;*007pY'ipvjlD\2r-,i2*)?L[^O\l2GmYa\+ăU"P(uijQ6mVHqHHD];&]g-9xJ%\A;^g#)6uPKY[e?Y(JQ5E]h=jq[gvFa,pPXrBJ[ăU"t*Wk2_qT'tguI89/2?hQ[Qa8L%]=\5[?lqczhu7swt,LX2vtHibBE(#e.*PLr>FăU"3NHUBey8U8tYV_s0rnm#q:aItCfJ.;mtRs=C\Y=fsCL-M;3RLr\HPJV.tbu<L92ăU"m>.ccwTIB<UiYz2U]Vo&OD<,:MaNkPHEdRDO):,Gdf5Z+d95W*o:yW=F3kjg=IFăU"dCXkn_XwL7WeEL0osAL1uUo%n-Lr(%my6,yvs[dt[Zdgx.w;PrlC:aU0P>e8k/SăU"+Tn\p;KR#LDU,c.I[%qLF0nJbqD<B3Z3/(b;<D+vJQg_,r2*0Gnmb4QfR^YA8J2ăU"rplH%sEGP:e./nFG[MOf[^(\,TTH81J1,VkwNn_pO&8uM,9Efe5$I(wOcAnMUDIăU"t%]^OhT,,Op/t(Uu_-K<wNL.>]%qhas\(J(,oIlqIV>hQ6gLY0vWQ,gBM'ut.'_ăU";fEj7>(7/L\c0Nnf$xU\3aFu\e0ks=OsA1^?RI508kFS\]W,Fr0je=Fuu1\m)fdăU"PnIZtgT>npc+<2%VLW&x79#Aey+('EG/.Vr&QX_z'?fWbk^XuaEhEk.eReOCo\\ăU"1hR6<:<>V?W8M6KBgf)]+4KG\8k>3b:aeQvFLKxO-C/$j'jQGTu;4T3s18:\ulMăU"Xb,$a%PmD%Qe2;=5)0'Ch>-:'6vJY&5K1K0BpK]-zb6UMlZ.>o'h2UU^n+H8nj&ăU"7mo7Dl::,,_s.fL[3PoB$.+.4T$\,us_#?mA3#=aUVD5ODaLJ^<i(40(jNU'YI3ăU">%_Y7Y.RPz8Z61,6tx.:7K*e/$Os(1E?-leG0^,G\kH4D/Mx8pKRpl5,$apr\>săU"Y&x>zciwL)VnsF=,a>)NOHDi&O&._\E+iDG;5munZj\qGGG^_FaBRSW>T%2y6y>ăU"_#_JnNK_J<?o)>Tt;s*q_#Y9B4j\z%p9GKv*AWT\?PYG:iJa/ClmVst:+QgYlanăU"]]f*qa$mEcahqk:^i?Z(7'i8>p7+[c)lfB,DM.EDe1,$Y0R+JUiKlqm8rt+hdWfăU"^6Gtu7uR'kY'YJ?JGGsIoTzB\cBc_A\r$*9__Sx#g3-vbb+po)voi=UUHWb1,U7ăU"Wmwc'gq:Ej%FcYnEg]]>k8OsTd1\>r'8;q1L+R$<w'v.gx46A<[062<>J;kGKafăU"gkharCSEY-Qx?kZ^uLj6YRsl?k'l_k/$vuC*hUYIo0FihMJp-To[(W'\ZR/UQ=5ăU"PFE4s(?W]w+c0*nmnU[6>)QQ-MQZlr,,.MNeC6po/wOcD*dXB67wpoL_d_ojI<2ăU"N)Z>LQa]jRttc+3k,m_<t?K#6-JXLkEXjC'Eriu5g<Zhmt2sX<NN[v<8FPw0#u/ăU"F>8f)-2Gxc$EykZ%?Yy,Fc4XnD<aGJcAjN-Jv2p]r76=3&8ZbMluv'G-GhE_PcCăU"6h/k'#i$nnwiCF&S90-8aFESTTj,xfUey]8=LJa)FGC=$_I6HmvEL=TIVqH\?b(ăU"a.(B&rz+0*_su'csNJp3D-#GbLg<%?'yFa/&I6%F\a5=.[By5?'86mO+6j?jWPHăU"W6_q?uWi==<i?M\cY(g^D&=(M;f:>:Q&'m(D$q\^k9%>u2D[yX;p&Z^tjx2^d?băU"U.2A_0L8;X.doBE.P+0tj,U]liG7v]<,unooG_oW%vMlEKMtKwq7Yde4FH,hgRbăU"avna45j<rOK>Mb#GfISgnuUfQBoEcL]'ag^k$/g.9%t[\,v&^J3R58L&66L2LZ[ăU",GWNszlM1&xjE9Gd;f/;BRUl/+dd$]iZ65UZGabj[L/?G/VGG1Ic>^DAfY#W3PqăU"Jhd2$B[Ff9lMPZ#IhXepcv>)v_E10v,I7^C[S<doR;=W00c)9p8#L0^<'Ufq&.hăU"XWb>qsVPEi9i)iBRd[x9c^g%MhflL02rsl%jZu)GG^8gY/UPXK.xnCL/stW\D^+ăU"Q>)9/2)pkjNBaw<0>?P;7ECIlYs6sNWxk1+1(YO?UUjGefXceo,^6P(^T2fffH'ăU"&0[[bqSF<jP)-XbOiH:ey&nH9^_0'''uK-]<6TLB)E1>\WrX8WxW((%x9Pu^msuăU"<:36iZ269NwB>v*uU88O<^T-i0mE;lst2N<<q]&##?_$$dYVxDuF%,^EUiQBs8XăU"D[.drW2*GcqgKLNE</Q?jzBiaPq+Oo4<7n_3,:jLrGKLMip2,)%9L(Ft%vSc^M,ăU",VkE&gKv09l($IDnJ&h[9>E7O.%'0Ys?nLrON6Py_PP&XNsY:GG4qYln2CQn:sOăU"ZU-UKqYi]6dvPfmyilxLe4]Z?\q8UYqmEn&ONS=$C?&8y3S]C='D/A.e&dLARltăU"PKKH:tnl2;36\KDr>9pfIpyYr%7u.ROvwQ+(h\)7x%QV?0)9VRKROo$0+T/+$MkăU"Z3djW*8vi7?pO[u)_bqqx=brNC<8GnG9Y&Xjp3D=)sjJpnATgKE_O0zNt,Xln3năU"dBG[&lCCctDH-Mz$97%V?RIQ9__xdIH6%:wQxDqWh_=GuEh%$Vm'JWKBSbR3ki\ăU"D''l4d];jb<FBEH\Xk*_Zm2nDtnH$h(eC='W9a/sh0tFk1]8MnP)'z.Sz_1^VF;ăU":OPbmcF:gGnA8M'87ZB#>\SaGf&#2>=v72lM&ldQz<;.%b%*f$,=_4J5Md;0qYJăU"j-8B1_T0z\B:.'#(E-mDm/\=%)h+Xnw[;(?HE1/VrM5k,Ua1$JTpd;njIPu;ni/ăU"aP>uug3(*+yAIxpG+ab)$&#f1U,o(>-f5aEufqPsJfiU5U.79p#ZF&%GB5FjLd;ăU"b)m=?3b,%x-MJIBRK-oQnnDhAM<BQ(nnx=lNAPcJ=EM>^bO-nQ\l=.b6TLDEQ3JăU"Om#,p#2%Y8Y/NVP);n%A_uRI7aE5_/S71B\M.Koe^.lzF:#*l+pb_v>,n1^2q':ăU"]AaRcplJe;[#SFA8se(lLV\j\[?i+6Mwma7%LN$y&C9]7Tu[.d>3NZL,l_DrOnDăU"GbA1Qf$E^([hQN?J$^1Mcc'2$A<kA1yoDc#I<qi8[+HWX)\rcc]N%ah]o9\ZjIHăU"Gd]+t'DWQ/h?K7&/Uk[VB[IVH<RX=0^X[G=/-^*uQ0]4(RhbAZbY=Q(CbqrLTOKăU"7Kl+=)1CbXu7L*E*)EsO9o1i6,EEkr\$YVRZ6H0PvY/UQe_rCH[9:ts3>-Sp3>&ăU".LllYDP3hMjGD=3\N_Wf/v=Mw:$;,-\9blWgMx6<ta*Wq1iFl^gFDq8[yOB0)vxăU"d=d/HoTjB/iM]g*oNg%EW;FvP/;\eCW_j2vq:Ozs\%F\B1SH;F#T1UmT2D8%.+5ăU"v*-XlwCyD+Y-<L$9G$g3)ZfaK1]&Mbl.aOn\(liB;4BH/aCFU5WYL6YTTm_7XlEăU",p+.8B%^qqU'3I$o.s%););_NSeRs$[p.)&7;2a3Y=C:G3[3kseIYFu0m;e>$NPăU"-+duX$p:G3vQE7LWYqSs.b:FYZVSD'H-*2D'_8\Yz7P&zW;A%W.1_V<beHLUX5FăU"^&P7ir[#:pP/'kh-Oq]/R&w8BRaAdrZ$<=f)]EviR#JL5r-$Ea_U492EV*Z,;&băU"SI)t?RnG]at,/oabyH'c8sgFi>V898dZ8>Gp;LdM,kJEN,97Ty]</qFb1\:.[8=ăU"[<F#&%l>[X9N?d726Km%FSLZIQs]0Ij-:SH'+'?p]cbx.o%EpVWCLQf\y/5IBvEăU"7WD+vD,c\n/dZtegF;tIC#U,yK;QQSUj[Dr0_heyVq'3d%6$.K2'v3nMWJNQ5iSăU"UgJFVu_8T;8[AV,N8H+,=8Kjkk';o436SsL</x9%N3iXmi3tSEe7pLqt0OE7a)PăU"1/Gk_:%TQQC4zyNu[s]vqij&s_zM(0*O2NeeLc=,K:gDAF5#XC7IpCsnr:KZ#GfăU"V.aVY[.J30oI:i*VOCKh=_j[<WpJ%=$'D+.tNEQeyybkOJ(CX#M(4lr<ZfV_$-1ăU"*?a1/t?\v=,l6f*I5>UlMN;*DBi]0DBV*m53GGCdZ+vq?AFn?Vgvnzro[>x+zR[ăU">2B'r0(/&[sel5WL4oKl&4Mq)]2w#LLUP^0'YE;Ee<sIbXecUK-qZ_STUW#QunIăU"8N9HtVX=*DuffCCO7tP6d70O[,Bvp5<DiYbLkD7wXC[ppNO:QN&)vXhAR4(9\%LăU"SDeP<n2n9M8nhC4'mgV.1-g(6,5v^F-oTQ&9=NO^Xu^M_*<Je/WbmmkquiaMRv:ăU"&K6BT0Q&_HKNLbBEM5n1knMq0EZKRzk0.j.1y>wbeGtzCSZk&vdA#qe0tIew&WTăU"tzSkOr5fuX]?I8c2C4KE,pL1RhK=N%PX/p>7FEQ#Z<t)6o(]%3l0g,Bk#tvAWtMăU"u,utV6.m4WXj);5uAR5i6d1#0J[D)=+*53m9ImQCRRz#ug[uPQnPEsf5VRes2jzăU"?[93pbgB0v)M:K^<No8ez8xg=9:3YMvO(WE53q<o*KS[1=e0)W__yjhKr,Ma_cyăU"dl8/b0N>j<S+hu6mQGQ-$Z3E-,bXulVjxg'iBtHD4_J.o\jZ/MVni?KW&8^6:BiăU"=-EZguKCW9>EDrKDEap8<L_[wr8C:NZ^4vbU:ebxJ>(kZ[p\N7^=pX0KVGskx&eăU"1ttBQ(=i%]CC;SG+DA)-vn<22Z(&q':nil0x4\oMvqt2sx]]:YqlJ</][8W[jfqăU"Li]-s/%E+aY;3tN74rcVo)a%nf$Vp6[,yqd8kK>ONoxr\u/Z%<W.hoC</%BUJAvăU"s=OS=oI<FrK0j6GCOx2d6;Zn;I%s6D]N#Bo$>m*GlYC%HZR;/p(RmrtGXW,0;,văU"%F/4bK941#]Ls-)hM77<D9*U^c\>0*E<T;\[G;dOq.G-fWEm^FdrssI_yMuGMOaăU"bJ'ri^>Lhi')Dvqs,eo6lYbbLbbZGidf-\J.wVy$_Su15)F.2*UJDCODagj'?A<ăU"EA=i+v_]sS\Ew.$c^'UU5mjKW;^FuC%vxe:j;i8Rp?+aTT7f8Q--c28OMd/<NV7ăU"QR7ACV+xQ]b.1jd*cDBJ&RIs<2aopWaGxsx],9>'vUc0'T2,2Y>O:vaEEuJy0R*ăU"bW1lSij/gwe8B==U?8uopdE\gnNND(r#9f8[X/<ZS^&?<gikAm=w=g?VlwP__LeăU"%02p,k'[VgB]4+nl1U86#tNk[N=y4(EmUi7qa?9XXT51HK^IL.%$4raXE#U;([hăU"xNP$MwU*5unuj)Q=,CqJx^EHsbiHKi:*E_;1%oCTKW:3EfkD7q$5,wkZV3=Y#g\ăU"tFO-5#WSqs-K2V)is5Bd:<QwZae=QN>G4]&t:gyDFyhp?b]lK%r60[<ui&S1.rUăU"2ilNH;$)bTAqJJ4cu(FcSnf1.B^qfF^T#&Cb9.QvJ;dnw&lc\cC>jsQi4,F'w#KăU"Nq<7I]k7]TkXH3?HVns;_R2^,#qae/twVM3t5I>]B\UW?n/4(w'sBX(9)\uLl%]ăU"c/RMI[R6i+)6jRFum-,eAu(qgG&t\LUJ6AIf='N_9fyP#pTjgPYLx-5'kNsf#VBăU")(Ph9]dfG7aX\)Un\$C)RN-#j2U5;h_6C\gU5qF-2rJqCPb>NQUwSe6/vo]DbX-ăU"Tmlt.i7oUfe<HVY*7UZnhO^^\B<^#F[F3)J'_dkp<PZ:\SM,4&C=(Z+w5/LCUjYăU"TR6U4[Z_]Cs3I_c\pJ#Z&^^05S(]0=#t0[#FW)qb\WLCjgCQyWj,DDyrkDARLHSăU"sLvBt\?L(TJhwca=f/K,].qT2Qtyc3IhiQ61AAu&/6V<[O&iR5SIYN:>Ph8kIM#ăU"G0=+;t19;*eL(.K$);t*D90tr=?>*1>c^$SC[-j0d%*p-ZM=LQCTksb\,]R_5f9ăU"O](OIf;9'uxhF2Bq50Mf\uc,>uLX<f:8.ys''i=.p:Xi;[UD/k-jKP[VsRaR]k1ăU"s:OS*Ex-Wgh5iLf&Uc9BE8\J*8lZ<JJ?L.#%QvSqhuLM?avOs</zjOr8E*[I;obăU"rJ$5/JT4*?'^KDltC8K>Q(+.OcM\Q(+EC]C^p<BR'+[cG)F4:n<79dCV(F4c6RuăU"GOWpFMERAT+RF(KR^_E-R1g.v949T[hB^Bm7u.5W_jeF)Ok_AGjG$QAM4gcLikjăU"Jps4dk3FOJc]mYIBbARh8GSdEXwob8Q&,b0sn5=ICP8P80,oDR#7aUXk,:([A8păU"?Q,[=$>%\FepYNfi=%N2G[C.u;E(H.c(*ntNc%t?E7-u:=ON:80(Z-?$[N^Tdo#ăU"\[WaT$=Dj3Y')Gb3wEL=.;KT70\d=\tzI^Y,A5])Uz=.Y]wJ:2Xci0GVFrJAGFnăU"1e['4nS]O).7Q>S(awAucReu;C]U8l$c;;Li_C]Dr8lYuwOaks$&)#53QBERTp;ăU"\F5Yt1,K^RdLZlB'=)2,-_o<.vT^K?3PXky9ULuP^1aeg)mu->eyc6YPW.i?H]ZăU"L6[sxV<yjYgosM$/;[MQj6KHJmYy22C8YR;\8tdDLa4kOc'<wtG<WU.fGS1FA9wăU"L9KRL4M0^Ynp]bUw3:b\KD)l/nkhOCOn2CA+AhrE7=#Hn+-)[c6)CjN?lDT/wK/ăU".w(pX]NK;*CgWC>vYTU/;J#vU#+3G3tS9u]&PfH>fY=_$..T?/OU1c^w\fDh\9KăU"?9P^>+elF2;DpgPu&$fP,&q^SXsm=mVJ4WVxraxq]ip_i'uLM-EW9H'hHnEr7]căU"]A<))',eWK#>5AHd%cjmTSB;$L?31x%;:>2]Y5IhqLX+.GN2W7y;s^==$V):i>năU"*4ot..v>BnYsb?GaYWUMK$2#bqLQ84(jj>J-kYV+N]ih(bX3]ZuH8Zm&41n/$DkăU"-a[y#qqQvJwHb$Pu?hcgwEK9;vW_KWdOGg'z3LZrHe4)&4lEF5wV-j1#RE&m?B9ăU"2\#5+VYma*k/0k-ODrAI5W9Z'Cm>4A(+QWE)n[cLjN#%-/LE-L>a6JZUAH2myKYăU"if9D1*FB#N:B]%V;7AG+[603JU0jlLu;n._/L&^.znqQdB.rMUyP#J9faP_?90IăU"6_2$)eD^JW7U]DHI7a49KOjkiEG;9S$/%eY%DW>Z.wW],'8vCaxuS$=Eab:]q)săU"%4\nq1.rAAB\n6[-R-p'1hO3\qlX<MQYIe])as:GJ3'V_U9ILaI3hNODW^mvWimăU"IrC)%Z%/Kcb8W(#$1T3FnOF.wnc6b/[Z4IEkw8lDI.&&FB6pwMEa_kMZTe_dYRCăU"Vg3RSjYE%3Y/?qLccMPKL-G55i&SKE-xill*W\bm##dYACUeMf=c[w3SDTT9]):ăU"i5?=kHjDmG6R/0]7,sc/x;ia-8K4fhkWO&j4dnpKY+:$EzK_KXZDVH/V.Ka_Aq5ăU"\i4Z#]#z2$SZ'-BMP(r6e<pk:O:MJ6b?)<8&r,7g(G&;ZnLZWZAr1ZN7a[Cp%E&ăU"<LG67F]mbHueuEIXTbBK61IuNS)sl2GtPWR+F%jCBB9aO]>AkZ..\;6^4\#u19ZăU"Av$D<\gn\RL40:0O5)(.W3)G#vDKf[]F9p)(kFGO0065W_,P?5p??Z-SUi-tR-<ăU"*_3g4R9Vq33pKhDjc++[;$sXEAK0Hp&4apr47hJIM%%r*bnJU[VO>*_zOhUN]\căU"mLk_5b9#]F->aILYdvHb5>2SmP'\W)leEC5+*mZ]kgQmW.J*R43Vwh*Od)[0P1CăU"f],)kk3k/P?<[BGB)V]RP[TLzMiC/Jb-5cu9#;%L9/cr'Sjr:0#9=Ke;Ii2Q/LqăU"c;1d8*X>&7Y&$8:sYapXsB)BA$(.+YM')#=0A775&GUJ_9_tYr?6CF)CJm8I-HIăU"emV..^F8=37>*f(b$^(^O/rGVe*mAM;JoN]QZr_d?:<wgX:D>>\(jpC'+^:VJ&LăU"8KQa9$%lQ])cf[DT,+fcZjG:qZBDP_4(+sm>W0O)'wL9%KFc,JIch3r:PT;2'UnăU"iO:eSdm6=Qr0]C*[snWnj.tgc%LR49kZoD3_,gXM_hs(p^7wVdwa9DU]NH7?r=<ăU"E#s1:m3\^#h88%Z2NFru7,)EQo*]q\$DhY:XMuH\IDP'?Xtn6+%Jaa#beZBs&sVăU"&3j?$=G9PYsSDK1DkYDZ%iQK0&n0>kDGKc.RF9aZ%7G=;>yQ97#m.u[V&mk6dP$ăU"Q<*:641iYh;v4xNOM75xR+FIC1W7%h%y5<_fnFAj+K2$S?j&fRxVh4MV,doR&k;ăU"q[V_2jdn\+Qs(f*gth*PIU3$Dn.\n)>ls6ogVW'96-f0<0>_L*8Z3HY*I(:,IJyăU"dH0^Of61:UHSg8kC6ue;*>&\oRNpA$)oEp8ffn<U>'T6;csNcl>:]F9<;d.)VPMăU"CfP%B=0;tjE/gm6YuRCc;_yfZDwk(nHC#'$('3*w(MX8yCLH#l[NiY]>uhFK$,năU"VMflPMlA65CQSW0q2BSgR:4f46%\mK,ZUmjd<#O$o>V)&qNT2F*jamlQ#N]]7-^ăU"?ZYF7Ci^dmvtRJdUpZ_S=z%oQ[Y9BEu;Lq8GIYL$q(UqU_9usJ9<d6V%.gsNp#NăU"kCc/nuW$lb(HF\?LRmEt=qVN)$(_eOA%>O<TOwN6tgO10hwa(I9;4wey2X0D[(DăU"fRun?[Fx.?3\[\60,y<pF4Reg^C[)D2De^,-9jTCTaM>ZBaWjS72wsyc4<jL\8VăU"&0^s9ldd6Dd4O.?D1=_3P8b0d^K&'%W/%u%nsnoOs+CqiT^:sr0s)nG&DtZ(NYxăEND SUBăSUB V2ăU"bQJc%&y'b+Ikv,pD./wKav</p+cP_D(fNa3,36gU2uV9(AfOr('uU\-P?9F&e53ăU"0gm5DU6(psyJ-qV:75jn6&A[.c7k]h9TO-ZG2bvrb-E*bup/phR\02J1k/NY'U1ăU"#WX>62O,GZ7e<'gf'.G)i88TYKi;)Wo:&jE2h>[Z]Q_ksyuj)qww//rOUBp\:LPăU"'M+xgyWYqm:-q<ZSi9ig9qr<<$%)5#D0q]&xrq$UsO/h&+XSw&f>a.j?aWQ:sk;ăU"d95FiaX%/aR50'FnEFav8=jeOd2nGhBB-,RH;pf=Y?Rm1jTl&P&P,$Swpdfu+\1ăU"j1X-FNv4(v8S.JDMtVX.4v:V85h6]*t+t7tEwZd#G\Y0:elqe.(Y-TE(&OAc)*_ăU"FrDj-yVM^)ZYA;emQg:::.b:5S;&c^%Qqnk0F)2Yd^4&TIy=D)jmVGFg+Z.%>)0ăU"Zd?ar=YW:bVDH]==&/FRL[_UTakxVjTtkxF7k#/FE2pImz'i'uZ#eKf(.$adk3-ăU"k;uwZL=6Aq&(8:qJ1q-;0G8Qs'eD3\8:q2rSjf:VH/v3GUNHnNDWq>XN,HbtL.[ăU"S'ge7L4e^(F:U\09n?sWJahV'cOz6(9On_'-+r806<M'\,<,^<kd8tC:)Uuo0<dăU"gct5j_*.d0Zfmb9>yl-MMD;?#$*B;DYgs13+z1kZ'l(KMk^,m,$,TDEbe#40e'*ăU"HsbkwqO>2r3u#klaC7FPCyQftLjWq(/mLuMq)']1C;nAusn[IYDl++NbHUzok7uăU"1HZop3Np0ML.M#Qb=xn)-?5XHd]:Ti0UYYOnR7lLLT.RBE5<MQO^:=?S]kip\D^ăU"EdrQ^d3]y6SRtdx7'hNaaojNgWs$v0<eV4bSSB7mX$bm$v-cN)<%vs]AN++?E'-ăU"008W43jo4rO'/gfnnLhD#q8SISs2T1E8;/rsv'rmZMQ%P9V.gZ2Q?*ZX0=<Ag2dăU"h3sy%CjE>O4%$04jOf4WtQb\b>Wi<i'ZMwUSn-Zzf(3ntHgN<fSM)7^A(*a85)JăU")v:RKT?_<b<qM(b:+ZAuslG19T3JG8^;eW[1p#222ZQKA>EWo4HTWl^i7Nhxn#răU"8NwxgeQ98p[287F:%&?u5;<\t]\+U35zZPt2(B[-b:fS)aEqqpyZ<moJs)Muj)iăU"4lD\fe#uPWueRG-HtzYMWRY(JGAsCyd+<Ly$YuslY)TVaqXy6;aK6WuIsCoZBg4ăU"(na,^dd5:e+dYL,MrLb.g+7qnNsqB8xx:c.&jxTUS0-#+e+)6'^v(n;>KR.X_8RăU"3W#dxL=3HD48PvXox0EoP+qFa?tq?tZ1xrSY<p8<U8znPaArj*4)dkh;%&G,S]văU",'WNMfi-&.k<9h09eQY12gs),ZsBO4D%ok>l,\<onM;XXP7f<r7WLK,i[-qa_X2ăU"lc_kNsS$;'S8wtGv5e[MDdoC?a2[T:Mfq%4cB(jtKXfTZppVfioNI[Mvn=KrL_>ăU"Dt#B>1FS0;,i?%3'*GD+44tCkY7>*$G^]hm<0B*aNhEC;:Y[OkvB6t^x5d#\z]]ăU"</oF7i\nt$[#/s0#w7ptqgs8IyuDce9ZjP_]MnMn.Y,>&:MZET\$F'gX(/Bm2+3ăU"s2sY8a2(UuZ9T9K6PN=.D#RDL+wAioljpCufs#m#]X,ih+1Wc8G55Kw1KSr]dcyăU"'qGs#pK=.m%G$5KhS-D3f,Ht5kN9wgJDuG_Xo06,KT\Nafl0v+rEi.oD_QaJr6iăU"Gk86hk86i>2,S;PsK7o(+Ywv;WrP7ibW+Vc;.TD3+im;l5m7huvTkijT5Jtnvd5ăU"U]vo:1K'T(^o3kE4/1>Oc$1BL$</HGQQU00Hd%9gfH,kCDV4aL3*]VjX*a7NX(NăU"*)XIstq^ErV(W6a/\KS-sLE528)]Oo,[xGT6muqm3f65'wUXg4FAgs:ifx-jL8LăU"lGxCx-w#=hOT3kB-_aXYIG9=uLfN&GIJ.7]'Yu3i'n*BcWba)kmEx7(c7?wUbujăU"c%?jhcOVGCxj?Hwkn,4^dO6xj^t?wkR\sdvZLYf4XJc.&?w_^8$V\?Z<*d^A2lhăU"tNm6t?wuvI$\=NY%oFllt$6lF,#'LGPue/U1:-wCenfWM+^-[BqIRcg7R.DMW-#ăU")28^3CRW?Y6Q.;vlbfn&B;VwN)Vt6UlOQBaIs#P#AK8tJG#mI=cAApIALz'9vT0ăU"5:FtLvibuhxwpq2foh<$4QsuVxq\LQ-Z_'qCdSdKeyI<+5i$JhjM*g)kCgRuj)dăU"1mLpi0C_&VCoM:ZFF:4:_yvCVr8#tB=L8tPb*^dw'#8%abD['OQd5Qi,O(U/L0]ăU"AHuYA)\VGMwn)JeC&S.>S\it^e)o%'l+W*yKPqT<NNc[3+gi+/oAqm6iBZhEp//ăU"96>A9nqowW<-(ntuDqf0lPAd04f)^u\XNNiR'yOH7&lyaw;3n+JWlmF3eCW^;(ZăU"I0u4:tZG6sJ3btfTD.MOfl;3N\3\b:;FcZlKS61;%(+_P%\'d,$U,Is2)Z::u0năU",O=CHNrO)l,p*OZp>Nlo#Nu-N-omQio\nssvuh&nC$ctP>Hqa7%C%_/BzleiwWPăU"?phXStJk]ok6p:GsT^xwaFOy]Wn]iq2['uEa7;rKm>d-a8VhEY%yC-5%SdSH9GqăU"Y%_XT68(-cJXIDw7EA,6\'d4mGN9=8?z^gN6&24IsS5nO)DHN$6G&a)G4r#F#[GăU"vHdnRdKq-+'YN=Tin:&UqK>99:UZXV6AMMth;U]%e_kg][w(-1>Kj&L[Q/>NWG/ăU"CTbvd\1X4^PNxi8^=drD\uXU8xHlH<-fGt?ra]7-Sg_9(JWcX:fab$DNZU1jsZeăU",T_\.f4mnV:a61X\+jB1vd01t\DQPtp+[#?\)SU5Za#%?Uw[9(1nn)d$jW+9EuZăU"\Z.bMDS?XdL$SZSk)(\/(0M]*I66my(Tw-bD+#D[gXJ0*O-D60+X#opT$pJIdSQăU"l8Z/pw)[Pg,N56q('792/;?N'J*$7'eB\yh0r.A;$:#6A:_+4<12^'+Ce5+3EHHăU"$,LjKifQC8Q\oc1_NpL>NI::=tNKPTo:35jAl_XsZch,]+#\'pRD^$^,GRD2h/uăU"k(Nu]ELnngr,c,1f.aFRN:Y,sT*b=.QUN+qs3a,'=dXRRH6\FS7jKD1w=14Cs=păU"Fi,H%3IGdfEkCs>bw'+18_csdqtrge/M7]mJ&wWuBdh4X=&nKl:Mj15-e9EiYm_ăU"E^gR&I$I[G=]XKH0s8O4'a(##\f(bPEgcbHluP.-oX6Yv*tJ.UXdxpR]#B8iGM+ăU"=MpQnj_$GlDG>cV7vNl78eiPlSq2?[yKQO*29YY=a2t>q2.BJ6Gt?\DK]BIiUleăU"x02%nouQJKl&/p30_N5nGUA-s\[J_bdA&0K$vC97vW/;,cetSdD?:](>Fz4mt%XăU"u(E%u,/]hRUBZ0<o?7[[ouYDIT=ii+]:ex=Y?AcuRH)\3$FCl<[pkdIDdWw#'gzăU"-6:?vTH[\jT*qQqB6n*VO'0Pe3IIeG.n:Q::VRiiBAB<)it\\A=bG$UxNaSiRfJăU"R]G[2F4MHDTDu?]+v*w*UcNwK(b*(//,E-9m<=%&odzYuEmHA/PYJU2#Vku#\3yăU"PK4ab4I1q6R^-,]Q6^pMCNA/U=^iAY)'rjC21_AJ5mi1MJe]qEqq3^n.;[<<d'căU"%%YJ8287AcSh?3f9T-A8Db2m?x>;gfrAud[l-sem\C*G1=%9dBf#R7_La&q;ND#ăU"=ok25TJrJCAqfI]sjj,ARW%(meb:gEqmcN<BWtpn)Uf6X'CTUFR^Au.;B.VGw()ăU"L?wGhFEdR)g?5=wn?IS>+i/[g.VV?nKZjAhUvPRvj4p+aS$Qb%,;I:p*qqHeikQăU"J-J7%qCB:[li=g\F]Z2^D;R7^3<W^BSRe)X<n)+8AQ1EW^Cg*Ac+cxbce+g1c)iăU"9:)sR&^4GZ's&hlWfO%%GCPreb.%O5F)fsh?foc'4Jk(2%LX9g3eO=(BAECm9NtăU"QLq#o+$P3:'2(#\PFrfUVrl7LV-9QEC:e+*YBD;rHZwuB[(Vc.r#e_94V\E9f=*ăU"IeyC_HCjwc7a:YG=OL+\Wm1HKh?AAIQ-_/%k>0:NH,AnAQKWCm/-sce\PC[dgG'ăU"^KMIm&^m\HGF1'aILvq=PY/11drS<&&$jCg'3SOQqF?&,G]wn\1=(_nE;M<]c:FăU"Qu;MnhcLRY8I&6$k-'A-hv1yYHJ.'-n];:p&VWKt9k:CSp8/hdGoMf?0-_Z&g^YăU"g(Br&l_QD/Mf#NAIg=5vB=t^'>?b#L(;fqm_SOi5oyM$yoz,PR<ggSg5'3[$of5ăU"i3]$Dg8uA+H\TK(]lcltE5/Cu=bZLhvVVHGl\&9reL/B]jBZg+Tdj^%U6tlh3W4ăU"wDlAZq_l_F[0BATm%xS6lp-Q)Y'S$dE_U;%u+ljLqIs/eI6k>7vV<h3%kJf)JOZăU"-i%GghXIp5m>[86^&*gxZ26a<:3,s+6%?,TEA'pPfjr%\?X?*8[:NIe1uIDCcQ7ăU"c+W=l:='*vbo97r>HQ#jkcKNYJ$^m-GtG80h,Fi4T?=(5F6&cVEu:=zHXj(C]q^ăU"\5$[yy$b&5>XmvzZJ^XftWV+/_voW3VVJaRkFsNPCJdp2<2LoF'1^&k#hVky2$$ăU"l;(Yc\[twq'EtwpHX7rf,b,MsC1NM<M_XBl<H7.fq>[1q1C%5)$BpyVMXE_BQ+iăU"N&7(Kg%-_BG]5Ez]W*S\tAC=eqI7h199^Y[-I^7c&Cbu6ka>VZH5i0gvAIS)_GdăU"c:8Ygi9VCS[eOZX\C1lktToX)XJ6)6)t[NMF?C>=ac;:;/[BKnrk-q=dpZsBD$aăU"[4Ff5XS+^I.hj<P+aSDDmd[OtuB,+T?Y0=p?GGoQ[:a'2V%?<,cd.?9tUtDIS%PăU"'h?c5w?Xl$j/#1c2KeT=X$\cCTd'EF>M6CI327KKVWqGL\81uNaV4XJ/q4$VT'LăU"um4fgqqDIUoG]ijD5b5M,N^#*Q2k8b6)hZ,\\D')a&gwAKSznnIdoR;G(wXcq^>ăU"stC>HG]9*S-Dc2oHO8M%^9Q$#f&sQqa26P)wS:c(r>oIX':*G$kHR,d9(9PvGUUăU"cVpTvWkEIRfBwV%,?E]$3]/HWBNJ?oqjKtFreRX4&.rb6D#LIYY[/;J1Zgd1HJQăU"cTnoV4xbT9pJVc6$mef34TLDuEHn>FDc]mpG&&aw8EO]m<D*Apduu3)Tpgw6C-KăU"5r<k1;PMywSkuHe.&T1%H3rG6-#Y%MC1L;m05LxKuDCRzfZ*nArt,[OF9ZX]xO2ăU"/IFGOg%1Qp6Zw+quYA]6BJ1(d5)nUQG2N\TPrf0+<2K,9f+/$m^\iK%D5d[Qi:UăU"Zk^w?r\)jhh#;8ls4Ce0s(mtna'Z(+38Nm^LBR00n'E^G#8Pyf=RNY5og3PzJ4KăU"-*FABn/2e5;kgBvovIP;?=LSAh^28lUP:i[Yy)kg[2Rjja8V9wWtIAa=cMkE_A&ăU".1J(+?TM=*CG(+/$f);jB7Ml1\\-am33x>9ls4Lt$o6tw?qXMQMp?g?I3G?&^<AăU"<M?c:fsps:d^_k%EEXNt]fdBcukM6AYu:?i/i%qdFb.RZa)&JJ-OM->5-J)MsL;ăU"W/]<g>kd#BBW/uDM)hoahM=f.:0<)7b(Hjr\CB-g-nH?WA\)K[Oe1vr'2mP->V/ăU"BZYCC5Wbp,JVaBCT9YXop5gPkfL\'Vb(saF52AHW',+\uLF<DRcq>8R+kt5x()BăU"y;q&=dN$3sXUzsFqeBe6^F'%:qRR;#w1+??Dxwo]WiVfw&6c6(87y.EI'$-SIYLăU"=wCm;77DIJmOb<JNddsRrrV#cH8;:j(GO\7[1?40&Pta#Bj:?IKI9aAfk6K93]făU"JaPp1%G0H,54[N?L1f':fDb/0KP5#8QFQB.)xI.o(u5ac3BJPT'bud5lxu/A[[UăU",($DRj%7O_N+%7o>v?X+LawaRfsuG:8a+D+U?VzQDxZt::p<Y9AtKdi>+x9IPJkăU",l75E^W>kox/3bXlpPDaPj:KkZX>J(468F7TuLt0sUi-b13YdTYG0b)j+5Jmd^,ăU"A1GZ%dB;X1R,0,SUZeW*PHYt[5315Xs+#\up*''<yNcR?N47/l=b)o;Z&bmdPOIăU"WE]ii5[D#qil5RneNY7X5'wz002/*;ITX*ZU79R6stCw14^'%cISciBiR?Rf3O?ăU"[4^Q>mb&jsi0+=[/PO>JY#WS9,-*EDM1ts4K\RoP?_3NDdy=Skx-ltW_/rkDV9JăU"\5WmGKR_Wjj2)%%A-v5)QQDKG[L4u.XbWNlfr?u1ugxK4_a%vG*sR+_vS&Rduv8ăU"4)ZTMi4(PK_VQ55eB&<i8BpNG8F#:AURXM-QZ.=fLtmpv&_49$$Nw1%%2a4CbrdăU"HxwHWp<bXbrT617;%Z9+Oo)%c56C0.vFpUOqX:JT)EefmNr=fD;EUWrmQ8r_Ab+ăU"ij6?,oLQa1luLnShNnP&%-<>%^r)Dl1G4k7J=veA3?&::B9cGWplW*pe-ODE\)3ăU"=Q7lmAh7(;=Fi93Fn*'Z\<^Gj;Gi3b\iq.E^(=yeK.=5CLL^%k%i?qjdrR00BBdăU"/6\GDJqgz,[4o-<x5bbmVEx>Cj\Ym8o+ust7pd(f?B%a4m3.dF=w.a4Dq/uLx,văU"^hYkYt9Z,GH\Yn;j3f;pPZKwsjoP$(T)65C</HVv.LhK&Q+^EO./My\GH,PiE7năU"dw9abON]J2wc.lI),^rx9cJJl$FE=Pcd03iz_pcZ3&u2))?:W[wt7ujHXQ%Zhy.ăU"qa8ncZL8U<_Ad69KnLuOOvA&gOZrjdFX:pNE4yj]mtQlt\lnGd0(g[p3bx7QbzrăU"uG)7+krZ?(xZ?u4uf'CqCA=cqi%oqb9FL7&16C+vDw0p3\,VB&LslPgTZYVeMLXăU"(xgDSJPN*kZqQk[SLggD8X'TT.m7S4m81j8m;Vh#6qpy9>x_NQltzeh$cisYEnGăU"z;jyI9;^IDp,FZ8xQp]z<Fw1olGzI4lqF4cHk4+$k##]?IXHUG10<L&2,O%$[HmăU"tT*HNvra='YTz0T1.Z5DWeAF,80YZ>)Ud$h\^vNwRx8c:=]_\EDYuDUa./qWj90ăU"V3^Kt;/xQ#35#w/d5#l$)7PFRD9l66?1'gZtzu'J>W1MSf0AJ>>N:&:%C1B=ok3ăU"4f3u%vGTC$Y:]:q]IW<KScI07Kv/ug?UbK+U2BJn[r&Y5j0op9:Gas\_:qx8S.LăU"79qG?vP+81s#W6&BbV^lHh[SKtTjNgtcL0A\y<u7w-X=6Rp:N6NXaK%hzUji8P8ăU"]jA)Ji^1TR1A2<5LFTs3P$(O,qOEttK7KfU,b\^_DR)cN:]&XXf>+\]tZf&IP[iăU"ut&g1aH&mmQ#hl(d'4;PKc1SB-9IRK#oIA83w?dt=l2h56,,g\5.6J19+>I^VC\ăU"DXn=BIT/U)e#0V^2jPo0>0-5YRu)itIsLW6>I0E#9&0K4tH;An2yS-tsQoR37v7ăU"qtSgBq]Ct(fokmmgY*p,NzgD=t/&>ld=Gwj,Sctf>cR/%W>+lQ^YX+o+tRM#>)_ăU"*I8h*Z&?3.DaZaYGI;aj<sFPsYNUS-C/SS[$S[ZY'XJ/_\dUfpm-vd<8=OVGV.3ăU"fe>83FJq-_zC>JvZQ:bo(Oi5>.u6V6r^4uzWYnTYfH4[1pre\ed0?->9Z>\Y1&FăU"\<()p&N1F944Z?KM]?*p5L+-#?Y#pL8&T1*Q8l35kQXq(2_W1JM2kfC)A-K0ftmăU"b7*hC<_R<+=/d,,-H9_B2/.S>,Q<k7cf+R3O*\_Z\6D[A'_hh0LPUSO,SA0-h6)ăU"6qBFb'0DgM.l+8rcI'ASPxF6=F6$9s&Kt&G3PUXWRSRhbj\hPc6RmdjR6r,J,[RăU"gGNWOINn&2eJ]k$44*gHgaqq^B/;JJH<ztBo)S^[dz9V7>C=9GdQvYla$p?ENB=ăU"D[JkV3)2E+4'$Da,Fe+&V,AwQsNs3_K\V*oHPWh4ZW/WZOUb0$>7d]u%-QC9hjfăU"I*=E++v;m1YSnd$y-,senpX'r_[Y0M)_(E_5K*6]nAF82nCXc<+anifl&4#4dnrăU"&y,h(Y[)&Bc5>#HWCIippQPUB9fq-x+8)?lTDlMx0p;DL=KcG+nl+7TMt%OZijRăU"tWr%7PG'1<1N5M-rY+8s#-tmboR-,X-B9QLaBYu27/j&Ye8Q#9R:&Wg$wh,Y>F9ăU"1g++nl?9VD2,Xdqo703]3r>AXcP*1I2]Qk5qsG-2-hH1*Z4&On9M\u29PP&2swuăU"5Q:f-o5.6uN\ga%&T?xW\&?[#'VW+rH*i[0Jdqi*\WW2B0JWr:<QV:zD56dEW$văU"yuDGUh,b6%KS0)cl-RB)3/A8/CfjTs8e7(^/T?%Cie[GWdXZ\R6rg/pJ;NA,?I4ăU":p\9W(Uea1*JbDOa%W4.TUo;Q'4Y;-IVuAO:CT3_?^Qs4sd%x9r#.9/bNV6^L-YăU"QZU]Y7BFoc*p*xI+e$:\&(%,N;O%fkT*R5W9_Iy*A2RZ\q<kiqdq7k=qf.cvUY=ăU"[12(9PnE-bDjqtQ=_oBuvoYs9fLdit6eoNcKTq.qKuuMKcWRDJ*Jf8G2G$uA<'ZăU")d>$kt/4v.2/q)8l#di?m>hMawo\FB#r-p9P.m8Kmq\8LH8GS[xRTn^nHA)3g5)ăU"=7jlE,K<bk9TdNdIpNtG+w<?s3L.^-N<F(mFkq(phDsbn8*'TlC8.s/r^f6^G4<ăU"f$JFfNMml5NU41QT*kFyA:Cx=2xm?Y/F[WWY_TdR2RjD$6&&+xVIu6=TL.#TKQ.ăU"I/)dc(EP]1)IFS<[OUW4tlB9P^FrJIcddBS8kQ]+_U8EhU$VTP2384C.GW_trrmăU")Y/_a(e)DQhY,N2^^O34QiufK3;DT$<39%gSq._TnE?_6\PoF#Nm)PK]=hW%)EWăU"-\)%r==nU+sK3Txeh<scv_MGVmMpfv=(Yx7YM()h53Rd96Q&0(D;PV\bLjBDR)găU"TD#\B3_Hj[d?fVE_I(*8\0ks)PrP\\_P6*v,uwNA&\>%w%FM2)Ij\PWf<GXQc&,ăU"37ku\Hk6JJhArZ;Dwq6DUqkEg(IUeW/<1U:%B(Z*:s+>hR0$BAgZM.S*1Sq#Y+4ăU"i2ca-r*+,As:/xTU=EFzkftq57wU(hYCbMl2VDjJj-42R)M*qsT1^mKH^>Px5aWăU"8+.\1&.I/3RH#k+1tIvLu>t*lE-nDaDhC7%2%&F>DRsK__Ccr;PPTT/2tM%;OOCăU".hUe-v^SWaCufKKT-:KL*)Q;1.B]#smB?.7;)OKDS-DRDW<%4vH'mcXPBkj)\[WăU"6>9f%S9+gHV_jakLtE]#hO3MUUW%l8Lrwcw+yimUjFkhUt.xbTZyDaZ\^P8pMP.ăU"#JYxC/\_+ON)g(G%q-fhf$4g>;;nZ\.(X7PX7x)TG)l?kl1g%pA%-:c$wxl%:\wăU"Sc$VMXn^RT=k&y8y?S*9QcYIFEs9;^1Mdf?Pn<*Djaciqig'dwm[[K+&I1UVQ/SăU"^wJB,&#/mDW9Nk)'8uYMfS88,eUw%Z*vw_FkLowU%nDo4#cPWF,NM6'B)s_XMBIăU"Nq\8&INJI,%14N7u_R#>a\0C*i'vo)*#kRyRBX<KSVg$=TEWS;>J03dB[nwi],4ăU")+1Wdou),tL&67(fmC%pG:1V=<fmthYPUY;m:PXf::jYydPz&_meW5inLr#Zr4hăU"eyOSH4'*xX#:B3Y3[FA(7z-a+50-ODsP]??%]F9i.+T'?:1e[*(CTD(EXg9AFgdăU"*\'S<%vK4+Pb(-Fn*m53(AsS6\<7YoR(MhaRRhPRa_4q#s-Q.E=s'2c%91K\[UTăU"hh\V$?t+Acgp7=75c?W'qp1dWb8:\/P;s5sdr>B)>&]k=EImo7A[Fr6L*pxP\ePăU"S4JW:'DoCb+82;8bKJcKEL[lBfXaX'iWsI2yBc9*A#xx571uAeXFC'#a>os%i_uăU"5aW9fk^5?#YffX'?NQG#>+liM[kj$:N12AdnWw:ePm[=$0#Mc_=xW4TmK4_h77NăU"l(sZaPXJTua84VR/P_o7Fy*A303G$mHf,-lm=fst.4'-(SDK9:P7uo#+Uqr2##YăU"%e+WkThP)L.5(:D^ZIMh09evs73es9dv=kp5)_^hebFc;S(ca6K2X)auXuZ,mi.ăU"Y0z+Pmp=.6hn;hGY^h0aue']L/l*H$h?=u6m^G[uCS8ZZ,:Yo>LeGUmF**=4AuiăU"Sb4*Fg%gvCUd+FvX&V8#PkgF_/.Vx>r(]M8-/NHl3+&J7y4B$?L%Ltsu16(md;xăU"\I(Fi_%\7j6Ykj,$wZ\W$D1fMgruYWc4,[oXJaCRdWApLSaC0;D:NYa^K_O:q,aăU"FOm/4Y-bqinG\%#(lA5dEEfWBLDe]_aUvBqNR226V66:C%_>0u[S++oT]A]$HnnăU"3&mx8/Ea]D#$Qqf1UB'L#BE$A^C0,0O->$*>0%Q.qX7&g\?[9X1j2-&KEob5]hVăU"QCpG9I7F'+_<3*:$z^3>rZ04L?DK7gu.TFIs6c/VCCr9(HI1F1aQT^C'C-T\^?#ăU"eG/16n6VAz)(*a3wDQ49T)#rCHSS3]T&td+VV<'KKPOO.u#;?l,b2p66tkXJmKjăU"?[:;6[#CjJI^_3TXBf(F*?*6GL=yVJp4wqV4rZ2G^fBr'a%#RH2+\_nR%gZG3umăU"E6\u;#353vlRRdV,W,PLrDi0]gY1yKn.n7*?YYRE+a5Vb'^VNd-=M5)rd.=vho8ăU"O<RGzxQ7B5\8gaoj]8P'AF$&G5TOm]hOAV$?u_O/iJX(OMJ'%\UK5TKjS1RtlofăU"Da#bE\%>k2$36E_3c5FgI5),5^RnJMl+x:Km,$hLK%DDOK%B9_7&l9k05pfNZAoăU"[/\Gfsj8=kT-Fge,Y9''HMGL9g/-KMU3<]I&Wir[&<\i#9%$/%.cYmUT5_I]8teăU"'3\W6\e+DAI.f+Biv$p_RGTXO]uRK=4NATB3pf.?zO&'<6D?O-\>a:?dF,&u.?GăU"7g]-vcOO73>):);[N=r?#Yi?g'^$,tdc?]nN(2Y-bi/1BMehhh#iP7M,cX;F;/:ăU"ts]t3HV)%9\Iolx#A+th%RMEd_5ld-\dkw;A'7$j[&K$4G8F1(eUqRAT],li;:_ăU"to/)aHl#=?(W?4cu\PD1zJL#9NM'18pcNbjNvhJs7[$:YK$1v%L9rK2v#8+*rVfăU"_>ic:V3=L+Kt^Z?f?-Ch7#hU)7/38o5(=N89-&jfwO,HGSf:o_%_dnHw#Af0aeuăU"p\?:DSkm#XK&?Fp1yt3E6N,R%pT0#Z^5$U.M#S3*L6x=SgEq2z(V7r;&McB)+#6ăU"[e[_1]$R[d&QI=&1)R6A:fS-fu7qQTZ[8dqScWmO^*x5wfN0M)(LG,*UWpc'(EUăU"7$e'EEQhsvBJ+]Y$CpDfHV#%^P0e,y=#,kODC#AyKuCv#F]/>?0'?M8+p/Sw(-&ăU"lK,O,Wods]Imdi[5,/YjG#Vs)ErYLUTXUqUfHb&/8-u::F]:BRU2pEIU5>Ge^x_ăU"XWXFMYD/bu+ZJ,C]MBE0=P9[9l^Q/i5A=ExL$wSz_KdyR2;2RGECU4((cd6;QbAăU"[LeGrr%Gn1]i18*hu+eyv(EZkG]3R_rNm\=q/t6?RnYjdH%(t\IO)J-OkR\-SLwăU"70[*,P>,b,[7+5W$<W%=)Cw2A;.pqw9dZikiIm(mJbL?.%)vC3=+d+W%u)f#t;eăU"+H#$rPQpviOuI96s=kR;R;h=<fnD.lEp;Hlin?T(<VEjI'e[;'Q'aR5,^dHg2gZăU"9Z^x0JD*LmH:XPt^h.U<60x4m7'80<jJr8-^p9*kQNpwm%UeasmS#cfC%lK.B,YăU"k)TIs&TGNO&lw9<:uk/*8M7B8W%A.5l.gg8'^Zyu/Cu<'dEY&Py$(%WH=GB.IsFăU"DMq,pK;DGc&EVXp>DdK_RLeAU6=rE#&LEDOrzgRm0:&;C*]:Hu1:8D6=iCJouPSăU"0qfH-sen%ACqpMnCHof)R9$E-^NQTdsBc25PFMbbCxMygQpn<c,o6GI6VdPu5[văU"T3p5?U,ZFgE\(qCp^,VTT+Fjn'R\G]pX25YmN8w+.3R3p<(//CxM((-1&<&%MCiăU"X]'K>]<r'(yneL-AJFmlD7TX%>qICD_nazR$HRwoke0PBC]I->3rUrfr\*<0pI-ăU"8Sl-4Q'e-s&RVc=c9xc\QuZZ3:ZL3:uWiHVnQ;P7N+Z.qD-S?44Zn[8oCo?CL.GăU"=LPretgfARbCo'Q3=MXW2C06#2fTknuZ+HIbASJ,sfY.')^14a.1tS:*-6';k>6ăU"h#*[r9&zlp&zF,u.4k3n4+:^S.puw<+1c[RjpVsHMUR6R86m-f=(ONNYMGF0L-BăU"lGjN3G,%x9Zw=/-?Y.KvhA2H<xf*$gOaS$KsN];dmh\g7uYk.xuvl*p'i220u=căU"Yp3\a_d;2DgV4.<FqK<WLnD>esNBRQ(-22jZT)$KYmn(]3mdRM8<pPMl6Ckh_%PăU"]FFA5b=FaM/]:9K:O:ByWu1EHGF:Y6_Rcwj<*IR?.myu[.NhQQ+9:;O66pmh<)HăU"RMaM0d.U+5ii)dninkCm+\hq+NVG:K8]scbXe]F\rt^#>RIl2maPwac'p_0==4LăU"?LCP1bM[e8i8Wn?0::wa?;MLB>E,G7rE<LF9csKH%qG3>N]3W\jA]'*IAA+F6[MăU"/d432q=MCoOD6mehRto.oK(:b1$#1fjUVdm3B.9ftX'jp8d-qbY:PqsSHjf2QijăU"RGUb8mn_JX0H1l]K_kq=9*FX:(r::'\#/[';:,x%Ve?L9+Sk0%=Bs2^klo8LVPeăU"8=%kj#\%YUwjeFnIFt<3J-d)G^k5,=Ob/s8(iUHS7dT+N+BA.*FGGQF67E3DTaOăU"8;xAOEah;C_j,jMQwJ-RZv)E5)9Q7R78hk(31+d65yt-5aEj:j;BeKww2S0g82kăEND SUBăSUB V3ăU"I&rVA,]A24odc?_/'5d*rZq#JXitG:(#vV&t__P+.P$/MJEL5w[0BXE7+WwehA3ăU",u:Vv<52$?1<SIv+F_29Pd\'YRk]d7\_ovDZ#M(u&Fq568;LP>y31JYP(_Vk2HjăU"Jfg/#=U]5^Hv<I=.qauiaQE32u,S)+Iv;RotpaiD8b1KkXSq<C;>m>N]+?vlLLQăU"XV(i/%IQ,E<9r:h;5l\6RfAVV,?80h=Ql4Xw8PIMLseh.7?WSW33HtLkaQi)9I8ăU"%xD3M1o4rV8u$-Y3U4\+C#,lVUB$_J&Wst%s9/T;+:noIWuAIc;htqR9*;_QkhHăU"+.a*,IRbW(+L\lXDWRtP*uPn3Jw)RNa3T:/E/StrX[)L0&j:E]ex,t&+d^5t3>#ăU"#1Ymbif/tuR#Ml8nh&o7a81*'F[o/ntD+^R>+/#mf;Cn0gJa970;V.Yrh_bE#g^ăU"d3,C^#B<d#fu3kGCCqUjIZhIpk0cGR1/l$$Ke1Yn6>M;GEF$FDgJb<m$]A$<lh'ăU"q#<bgC&-msGn<2j7//(P=:q0iq53e[T6;r=Y7B+)7aG8G:N.1Cv7&5*Pr'\I+sQăU"C_RH[JGs_fX)7JJ]HWjSJ8aadubwQN,8IbI1F6g^gUNs=]wirR?VR&?L&i]wSA_ăU"qA%iekOYh]R*e/%CywU&edgI_Wq-0q92H;0Hma[]+&;rE,G_9MePE>MYZ5LTs>]ăU":(iTr^\F1[_tcRqA(S^<YzbNn/BtN]'T+3kLB(LZBL'.LLLpB$Bb%-QPsMYvt2căU"BU0#0mwrZYo?Ew[b7T(3/%ARd'AVS9_j6B+RO?%Ypv1ark3\rUDRNn#s(SG,KQ'ăU"^J]XL37JMCCH6pUP_PiCE?2g9B8St1h<qOWZU;%*q?0>DISL9/fcm<2sdtDl[IcăU"3a7,RmI%CAW=SM9CaMnD88\;RY5M3EFpQ'85cj*ir2Hti6WOpais3icCtR<Pp$năU"SyeT2VY;+$^=Q7kC%[%&D)7g1R[O9KV2aaP#l6U_#9aG)Ol.n[>WnSX$7JItIiTăU"qL4kL\*^\KSkT;ii;&I=$*a-s^F,US:3r]e\ZK#vs2f9YM8j>Ybcm)R4nCDv%0'ăU"1M$Xdf.u9J=3=1N;$A;qA(-D)o>B8mWMGsh56Q^sV%?=t6Ir4,OWL]SqgdvV&7OăU"+T'_f:HGqsSjO>/>[I*4$,taM2V4&G;&iGPp1O_F],_K$R^yaF:Ck#I1$:5&#J&ăU"-kpCGntYSCDC\a][.)ekqYgO5]uV_vB'Y)C==$%^yM7X_BCrO3\g+W]3i2c]xY*ăU"3c8$^I7y,7ShEX<'X^X>#e#bvkWun92.gh)Fz:q:6p\;\g1>Z8+xS_>ioMyugc)ăU"4\Sk8Z;Z_F0>Pv7IB$6>*qq(vDLO,ruP5p:wv87mjGft?v^&V5tt.7cwd^^Nf)jăU"fjre9Owh:[lQ1^N\^;5#kK2K>b>e9Sk)[;+6eMs1kY$_L(?UJ8b%G2fq-4+4.LfăU"NJcSrMDCkZ_.MK/7,_kAk0nzgjP;%UeXi7x)t'O532flP5ChE&l8'7CVE5jQs1yăU"yJ^^$a_O2.A8\X.jrqWZ_+];Yj44P.6LGO,S>HZ20hoZ2d=6HGKw2,WCyN2$#\oăU"<58<cI%k/vLLdv9%IKHBHO(OS-.kA=lOC,IOxi]YonTaJ%B]s2F1MGE2YPwE\g(ăU"2B6>B8nK)Lvb4n&7A%T(lu:iO/cP;#*';p&m]#p3wBbp5tD(i^^r7n-<X$Ib8kKăU"^M1^;#>hS$;S.I:ga2n\MqV1nxev+0Qo6(Q__56=^Jr:1?TzsZT97bn]3a8%j^păU"/GnQjt2-)S\l&_$m#8/sA%z>mTBTH2r)][rEWdYn2nWx*7Ss%b0.l2\mfU(I<+zăU"w+eS-Y3A'+=1IY)YV3n=_b?gSj'jYab//.v\=Q6>9KU(5SAX.UF%_ZZ_$S8I0_UăU"erX^,4ii#\mag=GuQ5G:rS3h.kc2')k0cf8kORv(8LyoZN2uez'uM_lr^Q8CkNvăU"C4*h%+[U<u0R^L-#b.U-Yx4fD7E9,+eJ[pUE<+9[nZ-+H)=*<v8B4e*r;%gNUkkăU";m?Q,$Fc'FL1Rm9T?uw8#lK1eJlEfK1.Sx>$bC?e7_8I1m,rrTjw-x-whw*LCVTăU"a%Q]JjN,c6$b85u_uK[rpSNU%q<UQ+QuM-&Wpe:U9]9//XZssoIrtIts&%3WnVkăU"<+r5r1':#viBZDWWOP^G+OE]LnG#VM+_-9j$YRkhD#[3D6yVN:J??>:^Oo)Du0UăU"bCMsOAEY;z^f(YKkJ=o0.]w:>.8V+;;QZUTZ?(;_F9\4o_Bi4ul%[]pj*&r%44.ăU"*V4NGq1bxBMVpy3aAHi;Kv]Q/G>/=Rq?l>77^KuDP&V>D1Z/+X\t#S'cfjd.VCfăU"Duw=s?NFNO>MrCUIt<*_=cd.LF\bV6bApU2\kjQJUWQLLi*G4-x:+WhVdOWZ$l6ăU"J1\a>CpBG7FGKGQ=axDUc#HL%q/%OUG1B9aNu6YpJ^v#h*I__Q/N*\l=[<j9q:HăU";]C0IP-QR]hK_C2vQ[2y0r+nJZa0;cxoH2OwKIbq98Kr'ze1h=wTQo.P>X[$/'SăU"Hlcn-X;'iUU',LBtS8Lb$pG)71e;:SVeXv6++ZkEJ_)OcL4x\q$wuXJLmr9e3/săU"&HO$-e+&_E>=uaTgfFPBE5q8=7k*mOPysRH73>Hl^taE?h'$>D_sog)]c'YT:\2ăU"Y\/kT.=T1b=*^+(qZ2FY\A[1pRKr>U8GlZCLZ_YP4thi5y0eh%UBRu>[Kflln$aăU"'0wsyg2:pX?G=NwkbN?ju2sCkB,<eHf*:[Iw>tV1xBduhp<a%^LIh%kc'^+Gi$IăU"O-qqop)>BR>IZGZ^VBNIVA$OOQ=Yt:TbkrPw;7HrkD%d0Hf*Zqswd46X1,I:?;BăU"kVA?j]2xmEhY:\fu)r0A4$nP*LAEY#\z:)ht9#C$Pyc4TWOZCaq1F.hTckLzAu#ăU"Z;;2j80fOnf319&,-7Oc<4Ydm%sJ01r6#Rb8w8h3<nJ6>CCmS[0^B'YEm(-Q_i4ăU"ob$e)4D5T]B[VdhsnS#d3G'7WKE3LQStkZZS-.lN7hi44,0DvNx\Z#6vtr\\:hHăU"=2pe1Q7g-KNh/TRa#90aQt+f[BYqkGv%=7r^,9*]A376e5gPSo7EWc$YF_%&7(\ăU"-nxZ.-<$1\?C-ia\,bkAvc;P];Scoac,/=g$jZd]ekIA2ZwF<tnU$V=F;luA20_ăU"c__/R<#$dmRs<dA=Fi8_&7_*cEZ*VnTAHoKh+#D&l&&<^uO:S&i.*<6>OhfdjQ.ăU"3(piB$(A<tl[WmlT&)IGAgXXZTqOaPR;'9ss;;Le];*Py%<OT3FEKU.SvW=?0qFăU"uY1IGQYP<[mLNRZU%fboecv%tqH?(%5e[(%oNAAnByEYEFJmJ'hE1AQGje2MpQJăU":JzuUb<g3Ze7Wfal0VRal*fL':g+1k]X*87RWJAQ[tR.7/$d>CVl2r^pX<w*Nu5ăU"vdvBv6(WAy[:&3qF/\OciKW/LJW/*]qFE#FQ;SG\w$Rm0a5,[82H6H]+^'P.Y:7ăU"3R<TN8Qyd1(#aOxMj*#PqKiL4#ee;,l*lR,S_G;0\b4iOmv%MnXP$Udcs+$b/EIăU"Bn2MxRhlI\\dJ';nC3I-CI7L$%q.Aal6$:^o)62r/rq-LmfMlNI*(ur)3HOxDV6ăU"\stD,Volk%ky%2Evo2v#J_isak()j[,r1v7i(^nQ*]P;=-H#>ZwvZl2+Je3ekSUăU"nq-ivEN)ZeD\4L<6^ecq,=>1LJ&\S:<W.6:[3?JVbB1;%B$H)Lp2GuJgMEA)0X*ăU"AU=J=OX3?KFr32OgCy'w1xw32_+%;OK$iHuPnif_8RW)q>ic2YX9f?hsn\c+qO?ăU"Q0xsBQEoGB*vnTb'VD?va1>?9>p<F=)z8P'ee:-MUVVPfRYS14%iQ;T0_%-B33&ăU"q1K7=L$+t-BKQm+i-B%ZN$&RfW:\X=[wnX*R6oILlWEjX*#tkH)f9C1KaRLgEK+ăU"0ZH&[B'B/&*_vyDx/KPFIJ8J+QDjLk4J<<g$;K7;$$'6UfAf8k-X74-X?R\upxsăU"a_N1K^rf*;qQLFj+]M;-'G,SDQ#F>FfO5aWd0KuUfa?VnsZ$5jV3G$$%JyejMT+ăU"huAKAYr#D4+?%Vj[A%egjd-eL?DI&Wg5=&JDlvOV<]rZM*x=V\Ce-0AnL_GtZ]năU")02&#nKk:Hab*H>hLQn9+lAAuVQd+I9%h0e$f+NCmpYHCg$)\kRa,r&SMuW4M_,ăU":*5*t#9X$tt<ExKD^tNvXXb1ttxY=i4MuxKSS8Z6?L9>L-u+nB/qRp3Esp-un.-ăU"[bkggo.mbk+:;=csZ=G_pFO$BgkH3[>?[=Fse?nLi4fL]mNT4<vY[-ua;It4.-lăU"G(Gu<mtX0rpuJ9pJ>Qf\jNui7Jp]Z%u>R[D>]Y)o9u1.>brWgY$_wsrRm7-VCsdăU"'Y>8l8X$=SNTa9SaMa8)sBj6?D#c;UU)>[>>?ZE\t[qX]na*Z>hH<5:0i(7cK/jăU"%<E2ji5_oC+rTY9UO1p6(cR1X.CLOH-/m/*oV^k(C$mo\MFi4G>\'LjN)3#SDeqăU"Q5.m7X>,Etj8j$f0ho*]J4?SfujTjbPOYTqZ1O58;11G6Yp6VgkC)mjuhaa#LvgăU"95V9OlH5Z+d;thLiS7H?<8kaP$EFD=6856k1#WYX,j_ZdtT0t<HNwXu0pTSWOgYăU"0tS&M\3_6To$AVLBN?nTN3_ms/a)\*22$$B%I<vM_ejmC,QdENFoNz)kRIbUJFqăU"'CrcP(Z*i<$WwFc<^s*o7vpX0EhzDZzJmU$NQM'u)dNABftMXLDJ1Y*;3k[%Mm3ăU"7L9EiRQON9jFJU[HO=7*?*2C^)45M5_ok+3^'S0q.%HLfQ]3:w=A^EI,oY\Wqq^ăU"tQM]]An5z$%H1ksRN2m$*&Ra<[saJ9d$^1wO;K>uNZL[EUV/Xi1'WORd5f)85W&ăU"g.dhDT;;Dew.5k$T#5Eg1]C\7[V*(.%xg3,a^/S?Yp*uWhh#InV9v*&?-6YJ0uHăU"TDZap)<kjDrf18;BDc1d=)rX^cD^U]1IV7BO'b>',]rx?s8KL=4%f0v9j/_<w4.ăU"v[9<db'S1e.X%NTL]-0+=]_gDNm/,7pX24.J2b?51jBcC8t]PF*:z[b&mSPrJ;kăU"Eo0Ax%yd[RLNS%OfO2p;#2w3iRwx[#%,c\22EY8=HAip:BB1.t.B<1]h0-TYA&FăU")cX_/Ieni(0q]B'Ew425m2AT\[W;n;,#V0(&A3^osIZMUHh6Yfyx0G06'pc1^dcăU"krU<qxe>QB]S7C8sP(/L5%37sm.Z[eq?mCR3MJk3k^wV/RX8iSh_I<TJ5UBulJ&ăU"iEJ)PQZUq=t1KlO4\uQ7A*dT^<MaaHqJ=Wb?;XPRvFbB2Gh'fBhE-6V.4<8f7ddăU"kTWq49uW/n$M*[3E&%C]N;DV'm+*mr(v$^Mf=drb#m=:,IoAn7KgTZdjm=rpI1uăU"p=y*s&IB'FgKg%E]$%et[XtOF#L*WHb.7pV6;u_7]Hcm-_mJwA&6+.[-&(#-6n^ăU"s&C42vKef6nF+bI6dQ)6S>c;6(50Q5mj\A^P_A1GL?b#e9e#vtfQtBVeQ_a9QGpăU"WHR:&TYO/.rzsdg?B+I_v4AkS,Ive'#,[omuPGNB+FodrICgU3U+G(*vjCt&>D<ăU"??TTTCbf%YDstv\\2m#ELHGHHji$)MLiTFz2[^D%t8K5B8NA3fdeH-?q8?,/HjcăU"2nY$5LcDS5-lA2aPf9VT'Ss+J/;8ZfQ*A;P]l'Fc=lb($qDI_NywACl+MxDXX./ăU"3QlWw>uj,H_OhDld%sQ*:551a.ENkfew%g_()ELU<j(]R?4t^7VRI6XLxXAJD<&ăU"E?omra##Ig(JuTTDTc6H,ss+so1aTRt/kN25$E2);F;&&R7_%TyD0&qMFrYz%msăU"6+;e=<Ilz_El%:+o;Po[w[]dp8,=ML+9isa(^M0]/f[3J$,%m%QI*Tbn=DuFIeQăU"W(p^pTLSgovmiq-L%e5K&h<'_<[&IOoBq36k\g%x4>tl7S(\+\aGk<B^2DGrMDDăU"&?&3xj3Y:EK1o71\IeG\Ez1A:S#])B#e[2Klmc5NWUgOoH->ohNPPr7xM.(9<j8ăU"JYRfJ2&ijZiT)89p(^H6,<i(-Zs9<Fb,7Sm%>>-=(&%/_BMB%<2'oB#GHwY<Z*9ăU"A$4h0P*69#^kT'rgQ(.<O5%G:FjA1R-u\w_B<(kWna.-T^tG3,u_^8yE>g_z#:UăU"fXgq.;KhPQGl>.sg)[Z'cO$82o:#RkY5+GI81jLgYDL2ZcsbBG?)4eg(84Ioga4ăU"Fu%x<RON86oE3HsO/ZziU0>b&nL[>hg0^)$D&W-t#jk_S5A(5IgSi:mugnm00N3ăU"lG0YP93b9Q:[J[<O>.$Z?iXeG4n#SZwBz]][s6c*)^0[/W5]OS>&,RXV8eco,Y[ăU"kSq[VR8I(4h%E;nL-Kr+6>lU)(K.ku3t%6$b8bxpn3N%r##5q&cF%pc>.W5^eT;ăU";g:43spsooS/_zeDN^ack[\f:Z,>M97F$XAV#WT+^%Y[wZkBT1^JOfiS9(Ur'1<ăU"xR+m%.+Ea5J*-ahKZ':Sz&Vc8RdDlCIb?HoDTB$rjQFZOtZ><1J?Fp1%tGr\WItăU"A\U4GPI/HP$_FAGVAKd6TX$1,2L(vEiFE\bu-<g[zqgt97\OC8-p\=qbpXXT]u8ăU"dK:7nqqM8vY+(\OT8A^)i(FfNPL6Cz.bIQma]Z-MT-F_2,>\YhAR;(v^KmLco$zăU"&C0hIA#8%:f3;WXSqmhQ\>&?f#I%2e&[JPrS9gIrRt.90.T1?ID8t$H$'%jF?30ăU"m4Wc-4jEr.f_S/Jqc6tk_x]wN#V\q&.k_StMVik[wN#2#v&;;pE5sthC+'i:<;uăU"[)kT$+c8PaveAh5;JSQBEQbdjcG3sAft,iRX>u/*mf\\Ld<:JBlDMy'=Ivn/NYOăU"k1Tj>^?2$E8Bw8aB[m=twdi)^oa81RqA[V&)MH+kTbT9$Xc;;.^;+VS=].3nJ:,ăU"1YE'1&fu7MtZ*Kt(d34E?]E&w)yY\F1RNL9ZZb&_HY)50SLgsIW;FS'>kef'uFOăU"lD>S1aI&p+&S<Uy8&kP_m<Vo?axW9P=e:a4bd9%p[2A56q5[kEk7l.Sjs(n'fV_ăU"7gT#Q^%r^kwD+8[[u4FDxUTd/.U;cOAK1)b6.=iMv](6F+C^-u\X,d8PT%D?OD=ăU"?B\[_qpEvOBI?PnehB2ttiJ?#T%c<?k*+?;PE0UOuwfStjmLx1j8stOKEzK<6,UăU"iR_^i'd7i&If]LWal_MWlN9;FeHLcCwT/NP\biHXNJeXr:g7HZ[Na'\5%h.-K\*ăU"\Vj&,wr.m;-(%q,NlnPjtL&(-8Qe5^JgW$.6kjNBds,VgE$a<<O)wHe9'xhFA1UăU"s=XA4)Kmv.4'4Fh6EKgfL<(]pbStMCCk?jCdt'_l.*ahH;[B1*U'*59g.4j97lIăU"mf0Yn;6/u./-Kmey?U]]exX95>4.2K1q0#$YHH>UM.9^\i0Nu)s\<im#dpZ*Lm$ăU"bQU/1Q&??H6%J-E=:Xfk/OOxA?QxQ8%?U'dFGGItEs5pcrC:[#.3uG.:b-T#H,năU"-W90D0YoCr(?M8Q*H*7'.(<oODa>SDSkfQ==nUtgc>>l/eo9OrH[Q)'/J&S)_S5ăU"NId'pJ)Qnubq(E\.'or=ZA2MT.BsV*c>OXeG<holzG%ZHDU<e$Q2NpB]#<4ubkoăU"/rnm54_Ln;Gd):ZYemA9]\\cHV%jc$?Nr+yCvF'eJZ;P&;gf17)j[UUd4%zrTN^ăU"Fh;KUPBm)Ix]4WR)i:Lr1>Z_G-*kLYOs^QS6_a)Z/a:\qm#F6s.U&Z+gj0IldmTăU"C*%PI]$rJ)hKE46(klTdd7Z?8WzEB5rnv38X6.=iR37Q)l\HbuQ;>c/0I&Jb2HIăU"Z7OoXa'W]<tp0>=rof/RaMky#dbM6L_?_QC$u)P\nQq$6>>7pY*G63.u1=SUsu9ăU"^TS^GI5K0QAaS&h=7,+Y<YK3FHwg+7)w-Aw/KvD$aGwqT\MZRnvvaNxVHT(_*5XăU"m%rON(Jg2>'mcDoOx;fs8BC)IG'9(E-;6%Tg'a:qLDr**#8';11VW+[O6FQ##vcăU"w-1x+vyaWFK(;.>_I_&>m&_%yL^1frs,15PWv76g*U?qEaAddQS=%oM#t_<FsbVăU"+BvHS]fs&.VTFTaCHkT_rg.G%mffk$(E-1QBlg'n1ZAxjN2V2gRrgf?iUfCEGx:ăU"huWsR14C-sW/TGG'GV_qH(K.cgHOf<Y>>Za'.p(,L(/msrk>>1u9_CuDa&r\kZ^ăU"FhU2g1jpFI/Er6QT1C:0y&)/93['tCa7nkfr,'hiuYl&TIR4n'zPcOaPAmGF2=păU"?3_#xnWM+VUy\f*eS7n2#63V$R<CYaQ*lkD_N8J2Z1Ig\sK#5#4#_A,Q=RKVY-.ăU"bIWDg$hoc180^5-lr($L*g^QX,<BrIHYaRe1xFq<v8^lB&g_AYc/g:T4X)o,TD=ăU"BSx6*\+(?sSkR4)FHMdRM$njZVmH2H5)Q>T;-n&ghh/[noA1:2^uU0MP?o*V^v>ăU"R<]n%iJ[GRHi20quTZ<EvAXHupE9in:1>'Dl9[jVv%Vdu%KV-ArGBJuE&2Es:FOăU"Lysto)(br':W*\lon0JM\kf_5R<;;*5kX(FLCx+I>BYh<,e$Iq<\m9?;%SD2(3lăU"L^XXBJ+>gZG#&aw&h9WaLMbJMudO&.f/pN8%)%R6OCK\>XIX^bRIP[,a.(PjBT%ăU"deF&qALs-Htwl+/E^0>0k=Df_0Tl;q7(7,L#jQ650_aJg>$\FIuh$:5Yf,%uf:)ăU"x(B;+4xK..;sHg-)#x5$#wI>8_8\eJ=9nz\5m;cE%_>$HrGW^;2>(LTGk:7IQyqăU"K2:Unl/kgBV\TT)BCFM&ZS$Voz5>F8Eo(Gol,e^j('9i'',V3]S]jWU)E$p;)9>ăU"2RU#d'i[c$p&YhtL0W'7FE7VVa7p'ru27er%>ZTH\plVm-#>P-8MIlxw.OIkl.[ăU";U$h2A6\[wN]ss4ioU:7)4^jb)(+S>6sGy]h?N+ZVFpO^OpM\v=EBRQ(B21MOlkăU"_TcvVv'qK)OBlrm#iJlpk;I1mr4DNw>xi_aMquIN;5]2^Kh/r>;(jFB\S%hYGtjăU"W/oiP0'3ZJM<K)uM)<ifZwH/r2wfM]eOaI5,vqEIy(AKZv_mM'TJq+-hh#.dC?HăU"#-=/THf+0F>.,xz=-[(ZDXa8w5?rd^\t>wWotCfbaWIZJpBek4WGV8(m#&Gs-LcăU"C\v9;E^A:B4KC8qaW^RPod^ABw<9l;.EDN>uV2GMP1u2^0-g(yRUS0mOp::x;I,ăU"udj1*/1LWh6OG+y3jB+Ap>J#QI;,1RCq/pE[Z>nG+p#.0K+D9d_]uDdHxfJiDkgăU"gkqIB6&ufYC&qv&o>F:UDIGVra-%8U4%qAA9pg3#m2t3rc/itv/fuxvlSA^hhrWăU"IjrKO-at7p$pP$kp^GS5zlmy.4y/mEPV)2T[N8ziYJ17KUaCp0wrZ=2_:Qr\hDDăU"hlbR_I[Q82>%gUOVb7k2:.4.6,$cF4qk4%k$'aT6)5ruqX0[6B0^UBF*KDF33(WăU"q=BW^[e[tPBmlDf1ikfSG-=rkNlF_YnjX.:\>o^b4zXHS:MrFhqjhrkAuYXV(W,ăU"dKUQFj$qG7$'FU>YHSTp*vvtTD,Ioz?,(WH8DOM6SQQHGd>5CFK;=?0N<cV=IntăU"9rR-\(v_;mO)8/V[T609KQKEZj>LZy81Dm>T-B;WxWY0.EuOfJTW-Qq[OjuJ;77ăU"wGnP9vJFJ*NSg48qj:*Iy]rqEwiV$4iQoEejl.At2?)/_SbsI[-QM/jYof>T\F3ăU"k=uI4'1H9A9cFc=^]rHIEl$X4k<h?<sFCZoMnWVXwt^)S?_3B(P>;<4,735(925ăU":/e8WGFSf66wS)#Mx6kZN%&QRC^NSg<vRD+Bx\M:J2o$3sDil9mfm.\(u:t(VB8ăU"TeDhDM;r8PrqdYnWw9[)gG.E?&xqM=)(KHA\ql(Vqgxg$+6N-nd10H5f'[#p2UxăU"m]sT%&PHMnpjGXn:FAuCz,A>P&GYS&SSj]rAWT:fA#)HHCC+s2I=cClh^3c?^MiăU"bU[+W=OZ49i%n\O30tSNLVwSFN\<Bgeg.f/q^2:$u#ft$gMNoBsW2d,O/ZfcCLZăU"77,eYcRF)<EMt3oFqJkV^uD\TTi6]yfcf7&:2^2TqZUT<Kt$mjHGBb=38y,AVDgăU"duD%d2Xa7VcY(.B;M3h,jvi6kO:RZ+wt1U&.7LltaNu'rcW^?N=GCQ9gl/$>k1YăU"W4A^T2g3_3U#UCA#DWCr'3bF'7-/KR=#Xd.hfWjM&Re&5n9bEgCh,V\>&*75>hxăU"O'S*Zo5etscR)vI)eLu;t3bTDQ3quWXnljL##9o[ScPW;PTgDuau7'AwaidM5$*ăU"#J[i''p-FZps^Pb<;PYQkWmr_o;i5VJ,j+Se)YFsiO5[UeNjjOdX>J7_/p<(G*răU"'K_XS;4-Q0(O/_jpNe/0.feh-Fa=SdXR#WBjepFhUbVHDWpm\Hl%#sELWN05cuVăU"io-XebV8&IMpm[OG<u8fd)E$_z'eAqp)I\[pw[-79fSO^Qz)qml6LLyRymNrxHVăU"mDx56Z6;8_Wr)hPVm#>^)s$*s6o[#f[R)1tEn'6CP7GR*eLm'<Fn2H:mPe$ON19ăU"%0d1P-NQEW(Ltza*.oq2)4Nxfvw#&i^VEJEQqFvjQfD$P:$b/4Aqa69DH=v-*yXăU")pb0f[3<7PPaMMeY5uM;%5<#Xbu+q?RNN?e:f?rtu^x8I8x>Na>,0.uKm:#2(7năU"2<Bq\FXSD?+$;l$+Xq=%2tHT,peKts,]X67u[[]>#1zViC$Cqjwf6c(FDS%,E%măU"(8Vj?u)-lL$v]ik&3m#t:ZFku7)we);>]hg,T8UG,RvM<NHIZ^ba7B2]DrkoR__ăU"+&fvcdYO%q,o2?/n?yZs4v%UiqJQ_7+J>hH2pMREAs;o_.w$ZnAWWt^RMhQ5T*LăU"'(nEJF4ee$,$l^sNe?8au+hvHPVrjmP446psI(M5AL[I18:=N-ctuF[=J%X]UE8ăU";G:)Cd+$(/C6]T:<Gk%(c,3+o>B[rL%6#)7%DmITjhhf_cxr:H#>)-P*TNK,\OUăU"fR6Bf:00k.YG^KCo;1Z:FDSD9?&8Ok%av1kp_0hk()[15\Vd0g,[W-?qsQrF=(oăU"sg,CF+tZ1DB/4qj-&;k6lsoW[JAd*gtm*+?]siFe,rn&3fd;U'H*louJt,-_Bb=ăU"5FQv2LkCW;$a(Ga>pLg5p#[r-(74zMM3ci2ZH\q3Mcc/%SS0dkh)>SeVRf(ZEsCăU"]s%.)V;$E:#C<AfX5uBtHT<wAd/0=6sHHZClTDDr;1Xhto]s7fbLl..v0nMAV0năU"XL\Kq^Y$78<nChlJw_Gg]?c=opal'>V[p[uFKfVeUtbSiTr^FVdlv3.MAhTLy\NăU"$2\kti8M+?(px;wj8eCM($>J5IQfjeq9RlS0OCm-^,GP*(RXE6g=iXWkj:#EhH9ăU"9&1BpcMQodYQ6*Yz=H+A/\cNG]:yQ:cRRsc5.$ibTwo<oqo(X8Bi[GybG^[3Z0JăU":QXVD+W[NuUM=qPnN1q'e+>Ls,cu$LVo$YLqZNQ5#=R.TCh3Dq:YGfmmUfZNfIrăU"$;)6S^QI7%#?9SeJ8EhP$erkCG(rgM:*'x1j7D_n%_X]:d)iof0#'(NB<=.6U.(ăU"m]bbBWCe:J,kg'NjC%%4=q2_^3F+ApmK-n-nn'P35rpo[nntht8hv/e*,rEmMB%ăU"mj2IUl9Pu3u9nAfm7e3K_ZsGA7^&Q[ttWGL8k.3CbQhQOL:t.eH1\/xd8r)H&cuăU"j*WdDB<7$k19YaFUNRt/:LW'1lo%G%bKj1/K5'6_vJ#=YBA/VUs9;W9Z<%Uj[x'ăU"F,Kt<2AP.N=q&:,8=f^4=e4DequubN.h9?YB6gZZJZbDeEJ1Lf+gQ41P$(v^cTPăU"[iaAiV=.#%w,f0+%Y#&Bm1u^O9lk-1A09O3'5<h*9?6R2'n#Z7Sw)_(N>4Jj-5oăU"%</\UFE;ob6]7A.6dq\?C5C0p?hJvX<O(WSSxr\e]c4AqFT*\$:Z<mA+MwJmY9,ăU"9F3.7zdZ:e$tuGT5IdJvu))ay):(6HpG+7113v=\dgJW6:3k\mW:s^H[E&AR7'qăU"i)8s6Fg<^K0M+6QjGmN\<P_Spm,ocK/rrRRv$#/T\a4t/'m._p&0BO]YF4]f;$0ăU"?ssApi1Uwt+]Q]=p]O2vhNDl8n:HR/MTd+gsifiK;'/?3g)QPG'E=KuK[iXQ*?oăU"oaV0ZT'2q)1':,dnD&/)/).'$HR$3#[Jd)J?DbPsK;7;/EEY(5Z4;1o,&YXp&DpăU"oEXt0g$aoJtwx+<.9fDP6hL]PZq#FnNad&HYCfpe/;_QL\TO-LEgWVt>qDJ(pb5ăU"A]h)IK9sljSS)j3z6t3He8gDh#dd%kQ22Ezbpa\M6YF9$i89Wqf+^\,zoa.fhRAăU"vqN_g6\4tEllGkV0gjK5g0'FKg1ls?3P-U0T-E;;g':P0-eGZu#Br#w,>Qple\oăU"WG3++9/hPiZ9&khY'#MGB=)g&[6=.b9u/LA[Y%<?2vgsBs*HLbHNND>5Mr&,BqnăU"QTY.9G.Jm0yfPqUlW109FlJ_<gv[nwn[WZMJ6ooS88%__&9:_%f4'\XASAF^a(RăU"]QZ1d4=/rGrO+YAySd[ET/LJRgUKY0kdtHktm5om<FO>K>46sp'MIw93$V?]qnDăU"wGy[w7\X:.R782=1;8ap3bB6drUD8_FaLM)33hF1+QKN'\:hT;Wb5-E6^UK2c3iăU"^-Wh?gZK)^QdV=+r<9R(qBL8z9[KY*I'_dx>WlO\$&>NGR\G^wY[HA5N$Il:g&LăEND SUBăSUB V4ăU"6cuAs$9?zUR\&2frgZgt05izBjyM\U6^>P)I>.rB1e%25dG.?ip,O\cp.Hw3l59ăU"WA$KKP6](EP'[4/r*\NVp:+,$u3k0e\g(rf7F0o]J1\LD]&sA*A&[R'Tau9pWZ/ăU"$$KK2%x&)]&%4cNB,c(P09/#$..a3mhFfddF(3m<aU/LW:Rgf?t^kJ7-'<Dk>GtăU":eYjTXMHZ333H\l%Z444r_.F3vS-G<E3pO)eV-d_4?kpuqC(36+'g#?ur0Z#4*0ăU"72M^MP'0[&EoSF+C.,G*WIAOdrJN%[MOP?ts&<,wSMgh.YZ_a]QtW7p]cLf+^QHăU"urHRYn)6t0Ph6GnK6diO>Qg&onnd-x.[cB*l-uSYIN)V>9%FxCE.D9iB;U)5colăU"&7'5BEAF=Uf-IgUh]Zg=1qemv[F$7)j;lxC_CkocPfs]s^u^ssa0LpBtg_.piYEăU"-ieF)MoaY4pg(V:1jX3em\Q1KvEwoWf=0zQG0g7LZDw])gJM(3:#l6ii*N^V0?&ăU"G5m$<KbMkPGuV(+bs_9H=a;4C?;xikSB;r.9H_o6x1b#mx?[twVf(W7>5DJ$$86ăU"UgRi0&-p/*2<]nH1v1)_uPCk4raX4>qnd0+xb48XWen5VJg1m,SH$::8BHXA4[$ăU"j_Ec(5y1?a:i#+BcM1,8N<3[UsJOWYPdM2p[YrSj6<\Y*2E4&x=KquaZxOYlKq^ăU"%.UwLWmHidGZNKLS.mC+G3)syes1jummkDv,h5oo>F.RWi]-E3Cj%544:&'y3y]ăU"V<33Gl1bF9xEuSp'QthRX1l^OLZ#qBuNFNOjw#;W%5-R,UW)/dcV$a?XJD5=s^kăU"BS-I;i.dwmvFe&O\ADZRfPzqWKFS+^.Zmekzo*AEYOH&]Sky;x>c[NMlP3U?;#oăU"WAdV'uPv51DJILdvW&\d^+T55&JrT(#K7S-;E;<fM0[%#=f:S?09c(W=:Is(A_XăU"2;WuIbE8z:%-W&>;bQq_iwowCk^ZGQ^7[hioYt/:_o/f0&0nGgJPw'V)vwpSeJ8ăU";h^'MSM.g,5rCC)9Ddky<n3sicQ>l=\5sDDD,O)0L.T(;x<,t/gE5ZJw(h1tx3OăU"Fk<'W(cMHO34[TT1j0GK#h-Le*N4b)g#+Ef'YLXm.<&SkFJuoWC3-93=Hjf1p3GăU"5YK9xbk.i[[m^:$[rnkB^a>T%d-#,,tbLHB:%RGWW01KE5r31Tol1xg#k($kim.ăU"5X*jz-=4*<t/#;kwhfb(#;%UR_8>K*P1aD&&B\9]tt(i^ZIPPxeGEjLk*ln8tGdăU"C%bTaCsyyW,?:dw;;C]EE\79,kpp%$)%KKVAN&ZO:O'gqZAiZ0#rKC2'*JHZ2YOăU"Y[pqJQ]bi_?RiV;-Vp\j4R/+z,Q41*$SgC,<pomza*dYDi=NuWH5m6tEsiq#.spăU"oyn$*:\Lu)C_Sm_.&693BV_W\IG:*,d#A;*]R0$Z=Yo('ThcucTo&l4FckJJY(MăU")Rm)<7//q:[;cI)u%%z%7/%A^2UyMX_6&/SA*ct2h?Kc)rVUT$7_T$NCJZ4<G:IăU"<2OO3RYoV.,fsMR/>H-4Oq[&2A)Da3BC0.#9mnd<_NY\cg=(W(xKET4d;oA:j:_ăU"e2WzVH:g2aOdATWC8RaeD>Bt\s5O._1Z<5fi[&pwJ4f7m5QU+-PjcA[<\*WC6jfăU"B$7<dB*dG0BQu)2^e,ZoE1S'S(d64UE%*n$ek#v.e<[xiP$$TeZ3Z#\ZM:eR8[8ăU"K+)b.y,?J]eGh$K8y[Y45HNW>a2op]DPbGoLyiM;9jtrp8Psg5?+bj%[e5M1>TPăU"4>WQfcE^/%?^8uqTPD8SU;>KLz8y)ES1SA'+)*/_2q^Q\ERx]L4n#]R<l:85nRhăU"3FJqE#-Aio.T]t3A)%luqRuD=HxwYZ6$;kVZA;QbA1gltoz)][*b3PU;ZJ\YI[EăU">/lGb<d>B\.A4dhFz$Q);TfT8Ql+<E)G3mEPo=*KOF;jd1)$)c:=+eYP+^P#UwnăU"6LI;HIV)R(x6jv%Al37x7ckzVP;;E2Pk_Wv(VF%+gb)C8QcrapaU-nHQ4i3(E$făU"dXMp_Z+[M(Chw)V>^[#3vC7E6?2GLkdp2b^mlEJIzp_R+)$hoiC:zu48+z17h[/ăU"2Pr2j^$uVA5WRqk]HHcw^lN&=(-mfU?ac0:wmrYm_P/&&a9eGu#mn$;8;IL/#8uăU"oJQFNpr8>Y<<.6^#Ut(3Nq[5V1/8feg)uqp:J><t_ZvD^'5qI3:\f&BM'_J;T90ăU"YN=5&rX[BusP5FcR9vU9_CBaMGT_UbJQN]QXesO3'xySzAW^?=\pf>^o;e<x,A;ăU"nYoCb0)Pb''g2H^pb3gpQ\mhTn','G/Lsivdi7vU'9fX6q?;;7RZZ%stQISwWDsăU"y1cJ$<0eRDo]5>jrbL,^KFJ.Cf#xC):1n,^gG,=WOdfpGY:ugc+[)]tdE1B6jL?ăU"2$nRjv]?X4AJ3]\plwj.Z_Lrbw&-JYAsg#2n#C.1H4?s?PH)),7,s/(PK0p09]^ăU"Y1I+)Ono.'_M$uSCpAoOKC9a[O&DI:_-9j4)sn)%YQ3#(wF1jKl1eW-\V%\Yv5XăU"Gp#,;>$EjMN1WTQ[+gF))bcs,l+2#K(t<(mmNkR&Z*MxQ(GbU]M?>sV0P;z0j*hăU"&\39NtF4y%b01nZ5+eeer8;zt%lef3k:*U'2CTLL;,$iK41R?1iwTpbtGk='\kpăU"#C$TI;).M869eOHTT&\n6g'7kdVqjXhM5&%es):3PO\5cdQJwGoRC53osg.3/(văU"d3A)j8IMkA1:kQ&8t?4Cibz<I;f\$JaPh:/%5:W>9l+;iG7-Gm37*E+.;KxxLl\ăU".U0ZYc=E=A#*'E<k4veRI:PFJR1T1F5m]+I)1l+u<sJ]Diq4VQeTCjOuI'dH8-qăU"Y8vs1M%*Gi2[I.oUv=8)1q;>=4%dC_:H\?T(kUX=sjd.i*R.:X<uq)x'-WZ^k2făU"p2EkU1^rYioA9S0:e.X9*vTe[pCFve?8:_rJYXhF1<hpB:Oc3kRLAm,_y#QnT3kăU"w$tj+8vK<kxSTE<,rb/kQQ:M33=uoEeeWn?g\nqMqVuBcXP[)R$kjo<w_rT)e.tăU"$ob>,:J\Rv?foTgRA+Qm=CCfhr0h>/9.=HevLlA;S^Y0x9OoTZ*fukz91w<Si$/ăU"6Skr+8]]<ps13.#/;peUv<Ke?g+XGV-&yCJYldYsm(sot;8tQ_vQKaNQUOSEtRiăU"Nc3<39Mm?e_A\K&J7=Bkrj=AOSt(Og2iXB89ZtS+rYx1kagfEpHUMJKHwM2>hg#ăU"KTtIqic6mdE35YFLR*P,Q;f8R'O(*1Z>B>fz%;Uh+x'4?jt-#Ee:_]zMCr7W[fhăU"HTuLb\\.3jm=8-E0vd]e<bU<)?\+U(CDMw]&]_v+DIP9b?a[4mZxIm,9alA;1wpăU"ec,)[mb)5Y%A:+[v<PE3V+IDX4F3P9a8I7QI'[.XT-iFV[lFF=l;p*h+PsA2fsxăU">^IX;p.,mqz,R0>\9wN6IYF5H3lVY<,ZVZUVF5px*5q-Mh8&eWH*%N*S=t%Q7=jăU"bTeVc^9qPl2a\7Qb#-HAEn3-JPr*;6Sxcq_B[QmHFr9TYr1-6mr%GxI\qol5-X_ăU"kg/o_:xB0rRwl5H+?>qTP)>If/3^*U_URU37ou^.*0NPzF:tGSqTQMIDL1'c-QSăU"Rq-ne*q$j;S$4r.#HEyFEee,4AonyR^u8-6t%RAQE3kQ\J\%FTS+p+2V>AoXZ.>ăU"#mdzm&X6rA$n,OVH.[NAe%O5I=;0&)[;rqU/-e]MgIt/X]kPI7)LXngs&Xj(:*LăU"F.O89F_LJlgto#(jVg0>HMLHRN\d=v>irqlmL,0Y\2moH?kNG6n>0,Ps&Q$U*P6ăU"MIJzJ461vIceWCkV\ZUD?->(2/wU+7X2RAc3[GZEBh2^=1NM$(a*M/JT'Va\*TDăU"ga&Xw:+pjnWh=[Z]rVF5hKEPbj=Ki'i)u2XM1^xZtvfkJd/KQ7l^-g]>%oif\Z9ăU"OIBZE)Z5L4W&CU2brwu.)-omK5x/a8pxS]p;p17$6yWdY:bN$A<9%Q.x*0*Q()dăU"L,$Xv+,-/MqZ8^Ykr;v6B-S\jJ-:o,LMg3<*u(B&'$j*e1dPn;3]t5/MM/0fQ(AăU";(/LxYAx*,ZX-H#D=.M5AgU)V]B94O3dgPnsqHGNcOxCr<5[g;LK1N1O\9k5WZ>ăU"nZ<##hm#x[FPC)Z/JeX&SI%&GJ(c-7h&YRCKlwxR8x)53YA#(/H:S=a_t2vNmKoăU"9PNZ7#tFE^[ib)>zm+[noW^ZQG.L*GipGeJS**nVZqD:_'3WB$PJP9b3]dNn$)<ăU"s[D/PmnB)J<$\Pr3J4VkI6*8uJ%PdiBi3F2p;]YjJSu*35\>#-3dy'BmY4S2YHWăU"KUR9TgjFVl'(kkHn]69$U0hD2XR;T;qGMUTv%zxtRLvzYC<lH2dG/H<Gg$j?%sxăU"-]jdJ-AfFB'c8u.uDE^(yYi[TN<$+EswqFPq.3PX[L)F&vIKBGEQCG?uezfl1lWăU"\m)=1J>*m;OQ0RCuOfk/aF[r+/8,WPD;sDnMqKv.7tvmMewx>J*ITxe&w4uMo=NăU"(>UX]*rSVI4#VZj.&cgpj+I_baVsKcfd6L%sZcv4CvSz>A0k.)+woWcDpK^C]ZEăU"d'O5$:iBQZw*(>e^<n9ug0S$uH.F$IxzT>Oc8'KOQ8=L)8d)-=>0K<kms39/GJQăU"+B3nqR(%E1ENiTe;3XuXGAw*kW&[_?LKK.oLETQOSsEAr&H+IkaMd'[;hWZ8hf1ăU"crKS)2Z<R?obIrW9Knej2v'*5$598Z5LhGW1Hd;8Vju(x71ms-m^b-:6S_QYdxgăU"aQQ<aX\m'M(N4yzgh+*lsTlO5_t#;[;[T/wOrbmWtgn\\^tZjf>Bf0t9#D8T]HTăU"6[-wjV;Q3U9LgviVD:tQVYR]R>b#(Ytu8C0?MFEq1p/M0R6TV/_&%G14PD;g+jZăU"4.5p+J0nh]9J;Y(oRJ0avk;vr5mEv<8sL^s/eB8quf)I/NLQxrK&4+GgFj,>,:BăU"?'lHZ\58aNK$\Q,W6VM603XV)XQMP12<j,QsG(\f_9Yy3II6rasUz<&*\P]m=TKăU"%'$TRj0(18SZtb9vp+8a7Qwod01j5;:.W^b/4kAae=6Ka7#::_Loi:uHAT:k)M;ăU"mVr7=(%1nUiAr$F=,4B.pYYi)V2t2<1JCQEM*ZA\C+>.^3);'JCss6H'l(px9.RăU"9q2./$jWJC)'pEUg/TeZ+U0KpJsg$wNJt,A)CtpTUDI^f=jcp4#j'H(V)'*g7[;ăU"(:vvG;EF9#C*Kj.IbY,T$$aEX1TCfCY07CeLepsXbN2'u\DrdDy+8<LX=qm2tBYăU"yPVd6Dd?YR^)*yW69En+ZgEPI:0Q93o=/+KfltrgLJxsf.<W)LKE:]%v'Pqini+ăU"mX]:?M%8*jcS/I#vd+sQO-7*9]%eJDw#XO9_2a=+cZ9:ZnD9,-B^fE\>s$Wvuu8ăU"\^*G-Jr%Jy&]D4>SjyVo6C3Q&Cw6,j*T?G<)rz&yZNPl%g.UqO\aqdCN]1N3nCUăU">S<D9(YMTkNMur,m$_n(\%9iQFt?QD7y-//KVSmxZ;fZS;pK+U&aJ]:s>Cra5M)ăU"RSguuY%.:1UxAiR%[qI_aW<Q28>_FW,$ZinoR').r(3hupjn+.G#c/=e*hei_%RăU"\Y?pIDKV_]^=b_t>agF3cb_m+'?*FqJjMPGSYeUT4RjG5[#rrva&ZrOJQL]xD\wăU";q_qg>]3q=fjn)K\x-np)Xd6ejTtetLTph3lD2Sd+P=1P.<zF8gsO0Q7<EW6vVjăU"mwLBgl9309kQQOYZ&H*1.Q8xHQ&tZ*Oh&lF8y8DUYAfVz>+wXr)ryP#X(CkU1KeăU"?jL-31lai-rbYh+F\7_<ajI^SoEjHjkNgh6A+7kDCB>OD[Yhs^D.6k\Cf)Xh<WBăU",nl&NF9:-6w-wZl*=nC,f(TTq.fYVcdP%pNH^LzsqAr3CJl=];0x&mjvi9%36)dăU"49i6n%YV8-QG%m4[G,i3v_%dEu'8up(%)9%%#%-%<#AxJl\9e$5&W%%E'v%%1%%ăU"%%l%nhwi%xUWSIwf&C_lNqLupwht/V-rGE,rqV&/49j(b;M]/u$?W=HX_kG7fJ%ăU"F[x]_9m0Riu51YCrMkxqq$TJq0H-aniG+QU$YfK<IdqR.c3dr#^r[K4?*?C3%YFăU"VZ+7g^.[Q^$WZ$lnIeN/M8Hp70<sN.mlualnlivMNmiufNrcLZdvrP^Gutx2fKZăU"8wb.Xcfu&lP_0,rRE3oQ]5h,Rvz.:pl#>hfo_;rP>5((PBa_z\qG\4;s7$cH#G(ăU"JMM&(Lumawvaz/AT&j$B$tAWrv1,D4$D,]Bt%z,3CLa+lbYj.LDkGt]uU4^7.Q5ăU"xR,S>9gIu$YwCu<2ToZwwA$Ob8zIN8u5V6\9]\ZoeQ(Q.TL7u0L.&u9gsvO,T<>ăU"q4>DSohcYQrvEZg>ys34o/<54&Btns-WhB*X:NnNrU5XwV=4Nm5Lt]CX^5tFazoăU"BTill>764xoHud&+XXDARm>DiI,i4E&SN+;JkQ>g1F*N$4ArTEh(=^eQz,']SR$ăU"T.x1i\Fd^ftAH8uTw_wGYCHHuTp6bPC3EdE3zcC?g%UxYA)o?Fzg#tRDAv/=trZăU"b;]q%\);t,3q34Tclcw?1ukV0,uXCDTY5XjU,B4P$4T#hxf1P>P+sp,l>]MgQgcăU"+%5QHfy?:9%gPqN>Xw]<DCvn?lOT)4J4:?2o4PiXFf8r4B#h$WEBRQ7&;f3L,'wăU"dxyI]3AJd,sop7*Tv2pPbie\+>B+,0dpoA0k>HNDe(z&hXO'Qmi.B*wGP;\Fm<;ăU"fBhJz9#ss$gVm:sTolVTF_Q6*6*UfM^PDyFoNQ$;6EQ-G(+YC-oRta0DWhI6f,WăU"i/NpL?vB.h<LLN6ZSLJt4G5Vg:V]fCSNd6W#p+qQ+fTViVdd4ZDDpdFB%cKV3FJăU"P9XDrhcNtDguR.pIkJNT4749ga9)b4Mr#$,x9iF#$>Vohbtg,vVV<]f>s;gQji/ăU"BVfQ&c2Dp$EeDNBL2JZGGCFqz,^h7_B^$W/fP%cPMCtr<m6.Hgvz(uRRGU>,4/<ăU"qfdw76eVr:alcE,dGlXdQ9wqFFOoDwQSj]2>6bZdMK'*AiYRLhXzN7NS3l':DFpăU"PJtJO*Suc0+X;Iv]bk&ZmvQh6NsWow4sVq1XJ4$+F;>d2XSf&RI4_K&nrfGw&'PăU"rKe:YB]gEu8\SwiOjJCj3fGdYodVr-T,/0ppywq<#rT0WXD8JN9e<zlU0N4W\olăU"ltFxq#pd=DXE/:tD?>:cd>KqZSslb;RNZ]1[C[K4F.14nbYJo=X2TQQ<CT=Y3n4ăU"zGMHNN:-h:<<6eL$v.i/=1*NhpLHE-F1rh5=]Xd=vvL0brS7/0Bxmnsd+SZXVV,ăU"W8I0JqDD.8hNdr4l8toU*bfp)>fUNmgIffU$U?SwJ8prLK*WNxJAc>#lcZAhYz?ăU"?&7A:6tVm[U;*1#HPZdcNuquu.;f;P&'Jk^Btf)S:*$2qH75Y8S<u7D(4kA0.7oăU"mkhprDnF>lX=.,TwKx;hZ+A^<6*06h+3S;1Rpe5mAj.HYLwmJt.gs[$k.swZr]BăU"b7<tWdurBvt[*0LGg3*Ri993iU4?q=PrP5Ocuc'NO$O-&;iShmG?9MIhN4LIHMCăU"HCIhH)/GBF*#2(s>MAgsS6D(B$yIbdcs&kE(EXb,F%dB/3nX0o8,iR3J;rP7B<8ăU"fB2V_iePXuqhXr>o7ntkMz&R\qRR::-:?,4/ma8cg,OQ(,x)u%Y-2kwu+,ZBVR/ăU"5M?.77#1<4gfOKXU0$x9SxFM2jAkB&^%+jYNftR(>A1E+]0%3N9/H2uSfY>vmJMăU"nL#HuXvtp^tm_if$dn=5ltfTWXGjqq/0Ze5(JlOk^SJJSO\T_rNH.+N+A55=R8'ăU"3L-**:gD$/Xl]<pBhpVb1K::^Cb;'Va*ny'Ha%QDb.t&.\g>EFp/>AZ6//kNg74ăU"(hdB0J9A&]r+Kbe3KkC'L4x$7/Ua^2A17ey=87gnMq8mZ7=T>(4S^?n]Ktt]RwRăU"SM>Vy.Wp?/b]e3_r[vUwFr[Xi+\i1g40W;]+wg-$%mU9KsfpCaG6HSNZkBvZdLtăU"msV.vwKrxNX8rxfDppT.F3CfS*O87Nh+%l;S\M=C54&4rq5Jp=A<h<0M^iuK-$qăU"_[9j99uXu4EI&gnOV(YdPTvwG/6N_ArR&0i8)?p<cy*S.A/]/li=IF^fSgJWWa9ăU"Kpt&P505I-6UH$iu-:i7&bm4FoZ4//%30%W\RY(r\9m+#BLNG[M'uz>+sE2nD'XăU"V4xJNkHQjsYxs,)w(cImTQZ'<f2gqPMXQlbHm6<uFK$>HcMNm=U>pPfDfjAiW)TăU"oW2[<_vK:]0+;>YUQEW'$EiL9Yhu3K:=AwwZPuu1r9[5rurrG9Ps6F=pSe9A+%eăU"+g]3e&1,i[V&h+LL6I'awQ^yOR2%gT[l5Kl,X6llPFTtM5QI<3P.-b)\]TQ$K[qăU"FB.Kj5=wEL_FBy_F?afca#0:ufKjorlZ%sotRjbS^O7W8TUE4%s2=3G]P>IL5-săU"k$q?&7#iQ;z&xNNN=Rv]'Zivo6SgTb0lesQg-]czO^stLcI(bZ.dhh.<H[2sWM?ăU"u:5q<5_S:Zgiih---Ye'E^mZ_4]?T$?6_(_Qm_Lv-mY:5.CmH)tEKn.biJ=dV^UăU"imAHQ?mP2g,>2IuL_N#8_88c(W(33F.Sk^?h%Vmo4[7)Crb*EcQE3yra.S$P4aKăU"JN/gS^]=wqAGBV62,ru%Zb+z8:\c=Xwh(9.iZ\7NuaINfVq/BiW6$s^j$A9kpmlăU"ZF,59i#>llL6KrnZT7q<kZ;Z9i(:QH*S#y7dZZ+Z;4R?l,(p(c,,T(;Bq+P/.ygăU"tq3H5EBHtqC+RFTs=SH>gX53Q*+_fm^c3Z%tt&dbxigEZ]]3JmWY,V3Il0w=64_ăU"oW%PSq1\B6JJH'l8b<dSQD^R*oe2]9<3.3])pvKqrlR^lpt:i1iD,2H93>mcWZ9ăU">zY4a(GppygMY*f^dgPG#tT6\^#0kVT)]:Wm:b=v&iEwC0_PTB<1qw7r:'\Un+răU"BjaeWpKp$Dc]iBfUW2f.K.)Iqb0enfW(7+%5^tDLWUNUKB9D9#6u7Zv2)POrD,aăU"bl5Y*$Pw'5S4iD*+^ZG\KIgJ&g8sdIr*AOX?aNF_:)&vqP+vO,IBZm<(.]<X3r$ăU"u&^,_F'70X<,ekEd&J2c56AHT0^aG]]a2GRTY>onlY*5*WLT'A6ElAj>3\t/gB,ăU"2g[]isig+n%z88%B_7&yKp6KNCmjBTW07Q1Fl4?EIM*$M_e9/v_oe%lG61Xk$?uăU"RLp$fsSuoTAx0<-neCt#r(v8u,0h4dtKr^N4<mL?1$=3E67I#8Bek;me[akc-<JăU"rq-mmQR-^HQ6t.$$?TvrmC*FF3bks2HZpM1:?^pRf1.I,[\>tqgg/Hy.bi-&N)lăU"wg%UT2p<]7ER/&gs;=st0WDrGmul^k76tq(]_96)/Z1OuMTQ4XaN0G*g+DcJ%]dăU"U*>jtI.gLw<'<smk<]6D2p72=1U/D0933Q$;EE'WjKT7$N+Rue2goE?E(7o\=3făU"lm1im+Gm*TT0b:btHcZTtWJlXxOj'^<T/4qwF;6RXX'XPrLO?5)i)Nmm[[-mnR7ăU"\/tJ5<LruJ-q8e%Bj\5o6xd$-%W<Jb>6)j:ri\#\'jyo9;G&KeDg=dbZ-N&*XF8ăU"4*W>e4&-B(a1hKbP5_mt0r6r=f<g]]Vr_Ip;jcf1K8u2^B7r7x7_)xjxUMXUBL'ăU"]Lfd=7/BL7fC=E8sI69Hr&Ww6]'=KDW[N16^HAZG:ihTI3JgaLTi?H';$\;^-CRăU"Z?fnEd10ckDsb8+pQt6J0K9*o&WUUcrB&ro_*,60/%IAT%'Y.5AL>8=uWZCGFaRăU"FQ:JI>OP(T?A%#d<4WMC2w3lrNk,fJ#[:tI###+b\3%tSw3t<hYu)rX,Sh?Vs&%ăU"g-YoD\rs)$H?ehHjUW:iK%bHl)HPFa'5a_<,Z2gR4SYBvYNJ*-E4L/fb5t8ttQvăU"_2>BF6mm48[(J5Hq34PUS2afc3e#5wGal'pz<XJ<)7I596*4G,qcX?)I60Yu.omăU"#+8k2'?HW=UHI[q.Iu,'LPPPtV7swHt6dKWrR[:Xp[t:P+SW_%)0)CTrZTv;uusăU"=8Qnhv,Mwq4Br2reOUpj6(1-1qjc-^n<Ki5fEHG?Xgxylos0lFat^X9/\DP6CHaăU"/6/uiNkMG3WaKqRK5kZRYZacbJ^0][8XoZ?_?erfEtk6kkbL#:Ml=2mjI:+YW41ăU"9BTPOi>S$<,'*i5F']:rO-vmwa5mun9Ew-RW,eugW2wdb,zR)*cQQ$2=]H=Yj%răU"\'o1,7sZct(Mrq0hpB<yCK5Ik:AZIPn.:xU<L[5h/MDS0NG2v_.toH1ULT.lPIGăU"e_$HJ[hbwjbs7RTA+tuKeHw&t83b-S)SKfHss9Cc#)Fqfc>F0UwOn*M&T.Ys'%)ăU"po:49.ck\J7iHT.BBQoy):y17ROFkjmpC*gf]fjnuf=cD'](\mnp^?U,$-/n^%=ăU"q2f&b5kq1%]w-*NMHRJ$;#LBc0zG0kv7USFM>(:k/STBn\tK4h#vl0Vc.[1%1K,ăU"fnJbnt<BssQ/(b<3nAp)\TEp2JjUcBDWE8Wl5P_8cmEpC[A=/mfn>Q$p'GCM+ylăU"mj$>tR\#3MTdj'23v)9YWp*J=.6%^E*m*rX'xE/='kqiQ/>5PR?HH[LVu.\%7hPăU"<$fVnIl^*G&6tuQm00I4unOE7L4.m)Cd%#0Ra%H5)xU\9C5atXoWAuT?f2KmV.=ăU"P;;H3a?FQnUFE[$MZ5]mwftPnIutw4hnoc+<ntC0BAsou;A'w>31VZ7I1q+46b&ăU"2YJ9L^H4Jq8=9T*4+J'Q\^*L2m*+N5HB9q3s[:Ot\?KZna6O[#c>3jbUfQ7vTKxăU"MO3:z:<M$;\$<zG<App6sEVXIlj\v#eq(QHBNg[p;g<%kb_GZ[byPcNFLx)eFp$ăU"jc,p)Rx*Gi1J]%Fh<=l=AT&q-2ngnqB&8u0^q8QAA'FfH8S,Z*t**smrsqec9(uăU"Iv:tPPWFFno^)t,)m,(Os[_p%hHfX-++_vf>FB94=cj1m);bm+O$L_BHRwM'$;ZăU"Nr4H'22Hp1pjl5,a>0E[hK:pv%6NZt-+3XnV*_I#CRL&iR>&^6n8a#[Zsc$Jl2=ăU"9]SI59,M?TCUoI2C7[p*2Y0daZ4mYfZP1WL)OdETq-*+Y7/e8PL^lpkK22=+0mTăU"qS/CMS=w7P_/H?mYI#e;GbQpWa4s$he-^Catz(9hU$w(\a_:vk[sbZA?4><I0qgăU"*.^\_.;S8daL-N4a+5>Xf\9XzRzm^VJRTRnb4nDs)YY2WQ+,?ofl8JoA&EZ;w=,ăU"avNM#6+qmbF^3rhP7aurI6%%bssC[0Cc(g0p,MP1vnZ'$]d2old'h<2l7CS+;-.ăU"e4khA8.]iN['L6Un^HZ/&g[C3)=>Zj.T2#Nji-,g6-)wM<fDrv#SP4cj?-,$^rFăU"#sPta6$PZ,84Bc$4$XH.0>?&<1DYh3#R1\1SHVOe=$YL,*_cX)#6R-G?k5k+ekaăU"AyhppSZ-.qeyyMeLLE[b,)+dN/ipy98.#q:2sV.-u87%'GX%sIpgSPWk84,;Q#măU"7\uT$HiQlT1B&rZKV;[5qZPi'<W%o:2?\K=1';ItwUWLFB4fDgMN<k)r#,eoJG4ăU"m2uR_]C?rb;hW[fw=I?$%Qpir:MoRQb(KFh3KVifD(qvUwGiNQB&YbCk+Qx\DllăU"5[(>V[eH_,gIjJ9n5QBp7M-*jxE59:sgu9P-^7V$SQ\B(p#[0&y+5B/WE%fWS>FăU"ctNCd\&ZduVlRjyhz*A-mAF)vvllGr7&NB.i5Ks4QUgm:\r&>o^F)M#hk.W>'WTăU"Or]onqcc$n;$:m=HOGfUtl)FmrwsuISy<oZd']libGJ]<RDgEn[h8&sp$,kRrj6ăU"#pr'3X2)bL,?,cetgMVW>:RWNoj%9.GF#qWZ;Xt/0rl>:e=^QiyEBQ;Ls1\,(.EăU"^3R5e8(vY<=X,W.DE%$nzw\&fs,pAQ(wI$ID3F%15mj_+LG1R0Lpg:ua>VJTJvTăU"Y]TdESkz_DMX2D><uFQUQ[+d$s/5F3\']<76,Uw8b#.4kf)0t;[H[TUDlftX\,băU"o0Qj=uO(Sf>L+dQ?BH)\]s(lXj2H;M,2XO%n46HXbM=[Le28Yel\^;_qZo,qBy7ăU"W^SMS>Gjjpa:F2ekP97,O_R9GtpqG+L;Ssb8Uy8?&#oq[mJ?e$FZ,f*u8u]91V^ăU"[q(R&uqN(Q\\q\q'*ei?jHR\Euy3>QLcc0taB:gh=\H/5qM(5U<2B[uKN>8rHHEăU"Lw4Z0U)wY)+)[Q1];D4^IBFAnCGF7*ftpM^01V((d%X_t)kdjWB6HmSL+xfIr&5ăU"BEgW)b[n8d=g8i3?S1NjTBqwQ<t/?j:^,weJ;(tV[RYm:;BincmgYY5a/oJvw'qăU"5w/I5rhRuVnvV^[qqGSY.p%um7;F8tEWO#%WdX6SuMsKT%lz/I%5aNY*.#2^Y:QăU">psYNLnblUG7ADacs&J-s&)3^0x^A\b+\+XV_+-LUSl8AO,S?8\C3SBRA'TAF./ăU"&v1pUm*%opd$GLW\_Dl\ThDLr-TA-w*6=j\(z,Xk#AGG8Fg4'9],I00k2EK52yfăU"^814$<<y,N7W'?ao]P]eakM1QJGP\md?8nUo>i5)$l)>LDKp_WG_tzt,NN/s$7$ăU"d9dP$lCZNkJkNRsPY?eJwhHd_FOo2zdHYx,185U21lB6_N$0ve-Wnkos5R\Gl5;ăU"%rXdAhRU,-k1n#Y_UvuH((t/KcN,,q<U%+;0J2jP6atanlhKqA,vSlN:D5A20KkăEND SUBăSUB V5ăU"AswSOfis?s4.uYJ%D<\o5Y-.Z23/kZaAJ,%e6zVXf%'#CFVw85$RM/cnW*JiE^săU"<VBDJ1z_*yVg'%(E-2mm5>C\UNR^^C#ZuP$_U*GwdI0fSE1STp.+m[n'^^dJkd0ăU"j5vc%g7gEFd[p>.?.^L)l/6<B=)(9oFeY^Z*\#N.j?\_QGE*QjG6/K)3Q?r#WwyăU"2IijZy2pjMU_TOwU#FRT0aLVTDcr.J8uGu,sMITecD715EpLtsN[Y5T_;XJ?:,măU"Q./ro_G4%g#'57/)=$+(Rc&.]_Vyk[qQiHc1i2hMN[usg_r'3ce\pBD+b_kLf&5ăU"K11':i_w+MPf_&)sU?D\9qFFcicz-tT]ITmVHHH_D/lc.E,qXfH1)5=Pba:TV22ăU"D<)i/0f.AU6WD7bnle?\b#?>>OA_Aj6+8M9?2(W[Ir%kHaJAbsn-p2O^\6aSGa]ăU"mXCGCfxPq,oQ^5FENY1Gnh^a>g*J^-ETl#W$1a?T>g*_md9CaLZr'4;&<*0C>B:ăU"7./vI8Z5A]$]ATVDB5j%q4(eW$QS^UH_CKaqiLt-tC-)vP9>wmM8^H>?/z^:+&aăU"[Pu8gU%E#RZW2a(898:6[^^dKhcW)0jju't^/TA8fq=0sm%z)I%oH8As#BG8c4UăU"K;-'-jC/U-)-+7nF+)+/l9$Z3;&/,vQ+lU-I#5ynU6VXjF*_/znr8&6OSF9PTdWăU"O:W_.RDqhTo[d)=>#p:=[>1d,Iu4V;-CQt?P69#pe44peaCeFUW-pLx8/Iq'wVYăU"j*ZIS8*m:;-1B9?QA'r?g*]#fW9On^Jak4R>bOj1o]8FDD8aQAR*35%sAYF)u0#ăU"%b#eo)rS.fpErLU(UdjVX.1]\Y3_ui-\zRgK]wGf27pn3i5P53Q(]37=C9<6%ICăU"qq(%SEu'\-aSq)MIuvIVgO7m)mx'6]Z3DmbDe)tr66VVq6B=9<%RkY$(4zDuCZxăU"[rw?P51[qd;DPkm4w2)W'=eYlitY0<nI62/uqjf[V2fOtD%po^AUqWM?kjdUQU5ăU"0DDc0h$%u+1#N*HO9'Z99xW5_*..agX?-dO%AU34c.=.9^7jGD8:\#OUW\]M$56ăU"^:X6--\n5mbt/gF;tIC#m3mAZ?T.4PA:s4rKg'^rZuMo2[_sqY=LoD%V<DnC-e1ăU"urF[ssb[&K0qMlEMi8?rv.gUt%#BK$F)7YS-ADj/l#<q1-[3%XaR7F:*<G(LU]răU"?.3d+e_Km'I31:;fDWjv6:vN;tDmk+BnZB=licmL)Dn&l%E+%Qy<,<BK?9;\'SsăU"C8dw?)$/$(AvmuC)taVs=pCvz.QW0$^^tU7WO[*'^;>nPq)%IA&KewLO)E>[XD^ăU"n%$2w2ph*U[2AEsZWI-^NZiB2l#^zQFZL8a';GC?&6K(0Kw#c.[M1mCO/5sm[>WăU"<%.RuV+ZxjW?,&h^S\n%/csD:hK,N?&-a'j\il^,s?m&IKJv=Q+fSd:RI=qhpZ0ăU":+weof;;+8k8aIP4eo,^m\TGqO/6w;w89Hu3-L%^Fp^oc(A',yyp>4TPnePV3IOăU"SpM^:nq0\c[N7,:%_wVO73BNoq+fC)SiQ3Mkp<F00uNF-N.(dF:eM=j;()=5S)EăU"NUcn75&:IuMo5Y.kMF9X+c;\GZc#tX?Lx>$bMsnlB-80+A0j.1q%wrUXG4C)EiFăU"5oKU54V^f8jIGIbDZ9FVZu$-<K*V8:,(%hKc<EMQ*z7SNe5GJGIS4#0+4p(V9>GăU"=,9n3EFtw6,v'-'=:f6dsxS.K)%mSfsg1-8<??p/UiPYWY_KzX[[LS;IrUUZ+%/ăU";]0jLfo-$VhV_xlM0nK7^N:GP^+pLs9[-hBF#HH\4:ZbST.)i?1)o*I#KgM=:DfăU"Rs9IvLH?swsA%Q=%9hDu=pajEEF:b5L+Y*)M1-mMBSxS9XVl\s[HMYPodvSaW<0ăU"OcoMR^ju?R>&O'WI6JCT\\Y0;3ejeL#e<S_B8smgrj>=XlEs7:HHCizE[9pJ%SNăU"rYHiGoJW3.%oNX0KX((H:kZ*.%cR:;?R',4UsP[57'6E39?.s9.,]vdYCt1oeRXăU"3s<\m&THMgtZ^]A5.g+qGVK)-/R//\[h=G4qCn*.tPuLUXTFyk'huY.#ndh)PcEăU"$./N(#)2b:wK/q#_(u>=sHQ;IVhXrA2.Ws_fH=H-1CJPSX'&WX<QWA/-dPpsf>6ăU"aZHSRFmB9V8Wx]4hSjcoo3\*xW/vGGqLK%H;\<CeOLU;V\N3+4<dScA[nA(-5M>ăU",\>ONJDd-d6R,eNdnpQM5n_N[)juUGl5EqEQ,<%9c-Z4cfNk-PY-2?^e(s8Yh/AăU"<20Ct+y_Q]S:)_j-NR^#k;lA(+en)1Q^)F89FdanGYX=&'CEQ4*_^rmT+RVlP^:ăU"*+,%,76N7']5p?3/a*KbJ<MwNH%/QaMdON_VvE:GPs;3^.*;PK,&/VqS1.Y5smnăU"w05ou[1&c/r<v87lFhguI(4sQ9;NJ[QbblI3-)Sji9PosUh?DxRM(,6aDay.HI(ăU"*OfX6rR;Y;NbkAi?Ul)/WkRKshy<eb=;^)Xqdh(5FMm2<8TZHC3WTkWO<Zoi+6wăU"LmHYz2'h55)1J/X0*qZ\Ka2z.haSh-M=+<aG/:h2U-,YkF#PL1:^*:.P_FwU2tNăU"ar.yU7tGuS\*6/ibkFZh9:da>S9F*W'6Lis(TSNO81OL4,i+]E7GU3H%kTR-uh8ăU"C=raBCt3+s4W179k5n<)exoqaCB?^DSU6b(j:9F(fhU+Cg8o*gBM9H\5rA0(=KgăU"R>qi=SusbvS588<;Fd9#=.P[DO+1sQL:Mjc_CIB;M3+AR%)j3v#%*MyWekwY)^băU"t[UPmM.Zfeyrkl?ih>G#l%ZOQml1awQKOGOX^OspQb(gA9U^2XCgUb3NBWc4En_ăU"3cKUk14<AKE=I*sf>TpdD-WO;V1ZFiYCKK]mt9USEYFzjYwK;N#N09ohH_BmjpaăU"nN&3e9mfrVbIUe'Uu;zSM$q0$?NK._y^9l#9f#8;#uX)(WG7&&/Jd\P\qf=-x9băU"cuHvObW[uBW+oJ))e-yaQp/:C,f+<9e+jh1<?+<#VP8^;oe/&ICK9sAH:s/CZ8oăU"ML:$x,P_*%/S$38)L7Q_'Bq4I]\SJ?,g=pF=8;Bd9;juS'H'>q\fa1bJqn\DS:yăU"GOEsojDmdO+oC[s0*VTaFq-M+<)z;:>0]'YwQ-<NYb&<.cQ-[HN&A(=aYAR*DnfăU"PcPoh*Sg[n.P>B>3Ke>A9-*J&0;bEH<B>O6Men<'0SqW.%Q#il=TA?:3sN0fQ&uăU";a(e*1Z&L.>Q^7b8=ILttD.LqE-Q^R+XB)ZX19FQ2iAiRO;?iDN:4W,C?Z,-TMJăU"MFT$iYj5mq<&N.J<1,uskh0OZM'?zZuSNY7NrGkpgOffdnp3[ut=vZ:fVW\g)dnăU"Y\:t#DW-H5'9D[QM(I<C*Vf_b=GjERW*T1AE]7kqj,2FSYSwp?<33m^k(;5,EIIăU".oZZqIk2j7FNG7?I%T/8XXq1gN2Xfk0zxX8r*Wl_&i-n3S,,gev:-t3Z2e8Ren[ăU",z.]>4;#Z2u6[/[C[zzF_%Q,O])P]<%-oX)(>X0=%\Fep,Nf#/(9?N0?4i\,bPTăU"]j/HaQK.&=AYU.*;zAVJ[f^mGQDkR7?#[###,SfqSvU^f?\%q.86m1.o$.muy]dăU"(Usmr<aAAId-#eYQwJz[xFFb7B?PM's0.^\(4G,4q+JlF:QTe#qd]ZWdcmPS/m,ăU"#1t+)(S<#iC8\DrZU>Mm5Mxs$)%#53pOV4?%82X8wK[F#>N/,<&<<b3fNk2'0JKăU"5Hx<O'[P$/SN3C)*]0)=cDYPS.t2lLoaJOVEs8nFje*[jx\oNh_U7n$+vrh2=G0ăU"YS7%wF4Q)1?AEm=SMKd%[TOs)A4Xd,P,=mdIn'(Et2Ek*AcsHt0TvQ98:9*)Im,ăU"GQLs]j2:Qj]:O)>X\9o[]WmEMsL]aQ)NfpJd.5u$#jbwR.JkXnI]0if],Mb$UD'ăU"9aei+2+Z;5ki13_7;9VKiMuPfuk,[0dyMSR8)MS.hVFq'Fw_,Zkk5]KBDsKT>(/ăU"gNoz((RIZ-#/NSrdu,QKSBi;6i%_4<s9lrcaUw+*(lW(\>1+k+X7;lo>d$q(*jzăU"EgBREhEX/18kx]?&/a/s==$$V:?fIj-$MXtN$_2w_u*pJ1)Si)f9i5UI8tTifv(ăU"#_L.D&B7pVO,]mjV*X3hfk?OKWob^:XS\*+$S4nq-v]Qi06k;V/(=2h1tixrbH2ăU".#/pq9HV]^I,B3CsaVA:pjER\i[D%xMj^s/m=YVobu%=G+aRCDx8:05OP%qA5W#ăU"NZr02s[VRd(;D[,EOu;-v*Z+PLT;%TS7#;MZIB2B.),<fqh;/ILq9eF-LTILzapăU"A[o+n(jdc^seocx9V_MQs>I)*Ju9#]aJ,WtSO6&#j^dY[7-UC1UDu]hC^>a9+i0ăU"Y>li5_YKCKlPbaed7&>?Dd$mUv$juHiv[V<IK#1i0,C8=Z]=5d\gt4?#kr'4IUNăU"YX'=2N>09?&G0O5jP9s-AM(^p7\pt*#TQPY0\tsx8GravC'z1Q82w%-Zb1Mi:jIăU"u:sCoKB&*z(x=[fH47m&Z4ib[_k'<zm/LWH=CU9Z,qA+6H2FSCn/AKk7LMsc0,SăU"km-7:g2_mT%;nN_'/9W'-1p8+rv;tt<mP'($KFL(-5Al9EZkfk^Pz)=e'vdq%6făU"=A=uG9uA,q-\sJci2YBaOfl:v49iem..srGEF^%?$nWNXU2oh_b=o;MpWX>u0LmăU"[%0Ah^3ff>rM'fo4SIth0q2lUL=0UT%\Z6G24,eA2&.&04W(1/.bv=b:8>MIlmCăU"I-hjet72E0rm7F&YeLczRbC91U3riS7#S\C7?\qNO;^qeWT=Uj.3K_Nt+H[K,]%ăU"T>s,5q%g[F79-b1L]5WPr;4fHR<^2H%###/$6QrbJxLRls\PT=qx.kvYr9K2^#$ăU"SsYYl+Q#k6Uhy;bQs)ClIhFL*Wrv%-%:%f&Wt'82fJVYAfv&V>G*s/s_$d+7?-OăU"BOhH9C<L);7'^7]G^Crq:M$lVhFQvG]C6jL1%>uNHjhF[&*%IXiX,hiD$QcrDbZăU"?N10:p'4pdW2TMCknWp,fItTW5wQaxiFZ>Wrus[AUK4JTC,e0XP#xfVD\O)n$D3ăU"Wn]JoEXN,:[%,[sawK=A0A775YG?_%,1w)d:A\jKFMjXpBp12SZmrNMefZpmtioăU"%bAD(Tpb.k?i\Ny#J8\,\]LiKH4b?+d_PF#T,fK%;PJ;uz[^2Onnqg#%,c9w)c+ăU"s-l0??sOp^4ele3U;^7-O\Z(KUap?b[RQO2%Omtg;(?[3O8+c'P3mfF&;kJdo1BăU"5H5?JjXIhqW1xW1b/*kh?>vvQB]B*A_01Z%I:Qfc?3iZ1>-Nv>2S=YlH<Xt;0k4ăU"_v=t&LPID_oZ^'SQQ[;7P\eo]?itKS\\(qi8UaIRXaes+\f\gB7+x_S^h+^G\B\ăU"H9PaTZ>^Q>b^fyk3C'yIL#nlKR4UVw6H$S'&Lvg):hvXT]XVmLUtO?G4^+dBu:ZăU"Y,7,+im6/Kr3*rTFvA5e)gQ2aPV=QfZj+,]n70;:,[&jT(_UR&&erda+GN+*&ZKăU"715e$b0mI[HkQmDG$rMYM6qKNdCY?q^#Zm?3N/pgO<M_cNq;MGDFTi7taQWfAR=ăU")<Z#%.JHWD=+C4#OO$teJ<*6U>QlK>JZvG)Gg$6[cI($.[/:,Kv]r&<?^tHX)DRăU"_F9g6c:3*5;DSCI)2?5'8PF4x53]tol:kk^r8a/$Hj9jr#1w<E_H,kNv]%Oik&*ăU",PQJ8JF#u:/L+-N,C5FHCZiQAIH:,;^%m<#?9*w:TO[#Z'#$_+m$_?BsV'2lUEJăU"wG;sG,7iJB<_&(J;#o1tZ:eRR'KNi3s/'cA;hWP,4e.d6G]$_[^v$qE_j]j]b):ăU"qvDNi1S/M>>w)1[m692n]*=n[E&OTOdYz%5Z^I<A++98]oBe4=H]+n0Jdo6W>:wăU"x2Z:X7E?#v_8j%cl\QtGt,]s.h[t?$O$u6gr/JJN-KjrxvI0oB\?aiwF#&nzLt=ăU"[twm&KUIG9(]#JqgfqfjSj?n;#\#sR<\>V#<ECPocJ$W>y2xna#M*>^-rKN0S2JăU"ux.SOn%%e,/^jlsDu3cQ'mfws$ZUT)<[n]DGE(l&]qI)JTaA0BZAWP_Bqb?,E.uăU"QMAg#3IN9FV:4b2E-g[,L$13$a*?qVjpkWQs8)Suk.GIN=&lDqKs59R'3OQHz%PăU":/e<kT&;R9=2FyKN24+SlDaq%(V^76p3*ccwehQLfGqQjbL5Gs?6)/Wv)t5&3<FăU"5'C/*qY7)\nfNy&ARx\M0Bjb^-5TZAxZs.;:lP'0lBbhSkFDV[Io7K3'lB&naWOăU"\WDl%%n#]K^\KNXii-N%2-eYBAqkOv9-&B\Jgnp6:/hT2DD47,+ied[r)uMi://ăU"E,Pw>l-1Sa(,=<lC4fevHYL<I9'gO%44c5>RhM%,2&U>jAn52I(8%Q1pwJuqr>]ăU"UqsE,P*qP:hp:dKj<Kg6K0rfbB+?/?d.7I%)&&,Qq%CfY:I1wlzr;TT&#.)PHOCăU"1m<01KNuS9x?otB_V'1YXx80nTP)&d(H%3I/[nK_l.&5Elvl:9)dI^</+;BA/h4ăU"f-26'aArZYA#Rh%\PyB-N[sT-r:27Z*PINA&eq/S=*ea3bZ?\p9TjhPZ-Qe9\<HăU"fZ0u7/sAQCk356WC&)2nK6S)CLVf[\eBi^=mdxZcIXNZqkk.gs=k)PSIi3Kg(&dăU"H5:QadvIq?C08o.2<y*P>Sim9:3KS1op3jm+73^]]x'4eH^8DJZoeP<&NdI-oPRăU"Vj7;patEPkdNfwYeZA]sdkgA)+eGk#[uc7B74365[r7=2?5g>w#NnB[j:25L'iUăU"3b>Q,KV;'\a_n=+'TD8L2$P7R55152mmYh*=:gxqU-A-9KqIk?GYZd0pETr7)8+ăU"C:[gIi%4NQB^4410tFat8ZhvkZ]DLtvNkQbgP(;rXWv7)$=0&,nfqZgfTu\EX=răU"EB_d5m=a$Gh#Q=CPR^?(TLTXa[jk=arBLWt]6F6shVU=%f2tZarmwtN>;FZbLL'ăU"dlT*Q=L3)V=voO3kdQvfqUoHHZ^3qo$8Isvp&kEvm-TuSuilTuuSA;*8JXkxX8MăU"\%RDUY&Z$cPO1Bbal2CyM4R\Cu*)Ob/OU2OE+0)<+wA)Q9U[l\3aGz(3l?xwPTaăU"SX,7G^Q*;gWr?&f)3e2=kT].tMO]M[U\WTErDdkaQJe-O64>7h7'cJR>E;f.b<<ăU")Z1$M>?xl]L<tmvDIm5V>C._Dn8;eq:Op9^fLANUdN=l,,0U>JR,n/dYFyk5\?MăU"bb?;Dg-8D;Dacar8l<^z?S<iHC9IjElIN3d:,MJ09S1;h?(&pketsR:CD#HcFh&ăU":Ld2y84qna?%Z^;s)\EseQ7JV]dY,7kr6.gX'7XM?ra8xgx:D&PTx#+G86'OarQăU"#<u6u+kh2'&HKaK^GL,6Gj24JDX3pv2DFZ/fR$X>a+ud8Ut<^fXstM+dXr/lx4tăU"9H#NclJ:Rg#GKa+>ovA9<_eC$e9l],8&*eWeY^8&\c4)3)H_)u,ZsOLN/nQR\zAăU"uRf3Os+%ftN&9n8#jU[rd-mL6oXh:D-Gi==Y[ZR)b0^aU='tOfN=^1\4rp0C9ILăU"ngWZht6Jux*dk]7tswZkDn>4#+G_[S^>P>dO;Pf19i,VBl:,t')RMhEejYA3F21ăU"_#+W>D]]R'WJ)js]p.<.D1&KFq$.-f$2](sloL>8Qvor^^s,aob^6[T_BYT3t]#ăU"PRMvjMw$OVuL6LLddJBrMyZFhJV?*7V[3m>rIV<R0p5M,4H*ZU2?rldG%TG:AdVăU"&I-wp1$6dmx=5,gzMGQ^oW8;.vMASf?8qZ(g#.yG%\aLjhSZdJ/,:-uh1aHoh9văU"ZuLutWrpOh^$vbYX&>>6eZdEJr4lHk^*LIJXZGY4_ZL9E00/UdS#KZucJ9S]yP4ăU"52K8?04,oDteFsyYuuqa<H6V*GXN6vd.d6w?e>Sc5jx7(A<KT?19tYKY4lVRNm7ăU",xd>Dl=_1RDNX2+9R#B[HrrIvTREa6Jnq:-?o66f\0<88sMi1h?I0j[(yr'0KN^ăU"zCq#J[dQQw_4roek?:zN\%eW5Qf/>vn#ug]u(u90hw#LLt-uq^W6J^UV-nGJ$E*ăU"Jv=i=MUEM=Yu1=+PG_*VhCUyFmQs_jJXR(Z)46Hey4JuZ43k<Zp7vc5>nnzuxu$ăU"#5N>ldbNk7PNT9W^0n+F%,]cSGQK3GPX&tOv>417E0Bt.EgToj-b%OJr-LinC=#ăU"3l0^t<HCD3xL<$,I,O<((3eojM0-/(FMWP0Ul;$Bq(-/+B,DC4X)R3C=Kuq'9JdăU"Oii,.UdCsVtNu\QW^LtGa?/xpFcsMZ]$GI7)nNSGpeyI+k5i:C+G8R'CsY$C(6YăU"rf1G<lf$Ea4oiCx<)VvI_$ufs&#jD\lwNf>Nzus$x9Dl.slS3gqzN[Ba.j9T.=4ăU"2Swd'[PPH'8lpIt6d\whB;;,<NWd?G/R[ofg4H-/.eyCg>?4'dJc=jQ,*kZrbbEăU",I)Ky(DhM6QXC(Pc7N-.C'bo.$3mfGbgsA/phb7$jahldemb^xd[doT8>Krk8m^ăU":O6]dDZ&5(qSD*jlV-\*>e'4'YX,Z[k[hG>b'yfw%?)M$J[vTs_4eOE8*nbMlt^ăU"L,Q3BKv<+NqA[3\&jEd2.HavyoHjC(6ej2CisTt5lH2tK[SL^)h0jQM-8qw+rIqăU"Xp\+1xAGoleO6]$$NZ$PN8I]GT%qf7m$Ijkv(<+&+9SGab4DIsTn$O-DNK$6Ga[ăU")G4#nJlutle,6#+)Xp%#a*(=^7Kj=)&s;1.8cBK4lf&wI=ss2.KiRk?4:0>\/H-ăU"o*Sv'8Up_Xh%Wb+&mmtqfu01wf%GJzxRH$vq$JDLrmr46eNJK$gohbCh]Jx4RE1ăU"PZ79TMx,^Y>&>'$c(wEnVS<YQYK9K8KK?Z,3FUZSF$ct6*Va*N:2D2-^7t;1V#(ăU"qMW3\#GaznD#MCIi8/kRL0ZD;&nBR^tM%-m\(NkH$>t0PQoU*:jjaos#1dpOtq:ăU"O;o3Z39I<07(B*dHU*D=<F8aLxq\2HJQo4aM2q32e&^7=;8G^xoN*qWW#<;muV]ăU"ZL=$ComfMO174nVe,8M)<xPTUT/P,Pg_'hWx9VD*#>jxiUQ1/oAq[bm+d_I];nEăU",Nblhp>Z>5;7d[AZ9YW]'Jl<->Ua<Q8Sz>wOn0\:W=0C0^1NN&kSNbw;Qal6PQ9ăU",6tmT.i0WX)HkFF7OiZ(iTSNiYsO+w?:mR9Ce_XU[ZI:p^at+%wiD?QQ1A?a*VSăU"tJulX>-\pLnXGpoh+/3F<tk$Kd>hT:^Y5W(=PxJbBU$xEWdIfrMtHmFCw^w0mUgăU"?%W%T9'oH.8$g?^$KXnu9Prk.A8;\<at]i^R^-B.,+Pho]j/3tac9A4L\&QsRo6ăU"_OQ7YL^mp0*k8;*N[s(cX,FeAo3AV:+0;<.TgLjRjz9fkp0XY1:#Owo(ZAgouR)ăU"\^3$Cl+<Ek:-LDWwk#&d6s8ghbEHydj<Z&nX>LTnbQ-LmmMHjkp]]FVCjN<9hOvăU"+44V6=T;P,ltLX4#]')0cwk16/;HT$88f-vu^WCg\5CtPcxqiHWZP%V6C_gsoW+ăU"OpffS-ZD5OF7\w4mIq*:Mk(Ae/#pMCbb4)\Q\+renJaVg-JLM]1f^6V&hac)p8MăU"rhLTZYYPM'yy4WJ28o7AShVic9Ae-t=KkN*O/gNi(\U)vw?uUs=)gx*+HA2%Y-WăU"a>/\Y#hJrht\n_Tn+NAlff*?50wW+V16X3(TS<q2J;wb)0/7MSt1l:+1*n(jIT5ăU"Ni8h[?'_v6W.2iz],u'56oXDTmU[[k7lh)'FA)eT<TZX*Ran,7MFRBV=J'Alm#QăU"^sGVr2Toc=\U[,2#5In#6d.&3L)>[e5b)U/_FzmLwe+sh1)iF):i9__#.#$k$n?ăU"g>;KKY&raIcR#yY-?q>CuisnS^076m>oB9X_%ERFNYy:8XN8o-mssR\;q^jVeMxăU"Eth)&/kRzH[2GiSpZhRf55hE^tx[YEBvf$MW,gjNMjVPgC5JlJLElLlSPG6F;\:ăU"_(pogPCkcDR%&=bkq=/0j(4](SDlk_U5X0%*U/0f'>b,T$q,<=YC_,ZCIb.jJFwăU"S]=4NY0JX^J#)<[#+6^;-5=D?*QsKIE/-IS:OeAUNF,pJQ=HNAeHucn6)M<s>+AăU";+cuQh\+/>6+Ttq3\bOOJuh3BNCRMnvrLpyJv#[WKtk=;C'5P/hzofmf?-*3Y&^ăU"YYX(-$IvA,*RXWdGVu/VrqQKeCYvau(1tN#U8QKZK;C2wF_GN,]aTM];Q8_O#C.ăU"?sYxt1R&h&R\OWw1PZLbl3I\oQv.ltnCIBbNmp,w*pTbK#FuM18%7<:9iRaB\+(ăU"v.vEA6HOG:FzcD^uWY^21#SENqs>qQgo^W[F#%xY(mjvRmsI-iBbBVGpTWBa2,JăU"e;&rd4*lLo4o;t*ae8s:wlE[3hXJ)luM$5SCaO;q(ftR[wD\hKn^Yr19OYDL>o_ăU"7\_2CEoV3hv_*teAH<.?<<Ofv,S_inGd3b8v*&(tpV[H#qvB=CrPM>E8\#QaiLMăU"PC>,t6G(7Xi7ry;;r6'YiV'/_bvW3^b=j;'i4cB^iaxU/713DYSb&q/hyBuo>IGăU"L2AOd<LourR&_J^SosEs_FEpCvJNY%**:pM02UdrNqnvU[C5XBYkB'Rng)=cZJTăU"/&JiGAlna?enszeGfyA82.#p6b=weT?5krkdLW#NB$o'qiXQ58iMdtK_o.1=sb2ăU"6Le%9%;3/:(-h3V(C&Md&U:$X:0S8KlMnm8<n9]J:uR2Z:pR;9=[$sY8KISym<'ăU"8Zi9>(sh7m5H#9XWKuG(P/^?oFHds#dvqb8RRi_2F4qGekDPn+P1Z5yn)RY/<v4ăU"_7z:PiGC]5l;JHIJ*/tPNHXhGjslGRS63r25pIUI0RoXnRw1(>9u<st(W6K?,cKăU"09^*oaC5aEr8D:5G+?Gr:PT?/lBG[LCBei]RV;Y*_dR)IHSYsqUyjcnM%iRG)w=ăU"XqZNP93qv,6Y'<3G%/nJHXjOGW64CC78run^I._'\_0/BvRuO60(fb0vkr-J[7PăU"pTe[ffS63e)tQ_'XE7L*fuT0:*$nEsR.x(*.UcLs2t:V=2,Y?Y2R2XQmP'QX8J3ăU"4z,H(mbd\-mv?*-t'MMC.uCOuHnhYF]mL-EbzP14yl/X^K;[)Dc>/$(1sw86-58ăU"krk1;LPywStkHUcD'#(mWBkH7r>%QCA5;C0J5xCu/DRzftjnKB*;;Bg9j2w4(-hăU"+Z(iW>_==*aT2:u_q%CDRWm%fiji&kJP>GWMCtcA..R^=P#32lBBatv6jA2(D;ZăU"1aa^,&'z[Em=V#=is:w.Wu87LtGVP.h$qVIcTg/'\x_s^#Pyf[]Kxq7_*'k>jI+ăU"gEOa]2e5:kW3sdqyP;?=L6k>XUN;+&W:Py;G2Y^<<hpvLt+P%nIsVurb/hPDr(răU"j1;+X$TiSO')=LRZG.7yE*kd)CMN]U\&vlV3DduL#Xu%\ZpMIAKkRX-UNTTU*6IăU"k?4lLESIJvd:-BC^cMRV8$ywq+sZqh3le#xLLs6t(lampf^JlpfEAiOs5:jP#W]ăU"P^ChK:xCVb6z-MmKMIQv&OVmP$E6DuCyN_xreo#XaU#c:EubMPVt?d_F/sBYCCkăU"5bpQsZx2:a:SUKF5_Z6Ru+dC#w8>ALS]JcEO[%Dc,Ug>ke,*/RyYpDlGMPB6&#4ăU"l=dO)O^)ncwsY$o.3uhtJms:P;PGr.YS+&7*jd[bs3T:R/8S)dKC?iDW8cWNg<[ăU"L3i)t6]o*X,7475YnP5+*8',7hxqJG(nG4[[B?GII9aGAk6KQ9]f:Uao1%bGF$_ăU"%;wYs)?,$S5&9=r6G\M:Lxa:DfK8c/mq:NBdc'n)jK$H$ix<$>oF4+HRpK]GBWiăU"U;Ng*k/NuL+Ue]9A[&n\FN0t6BAt'_JC4vT9+T]Lbnb1'wYmz7G'q+(4s<[POy&ăU"+KLgAs/b-FLF>mlJbD+nWZSD4yx%r*]d7(WHCKSNj30v3;Rn(d^+6oEn3ZUNUA/ăU"U]Ube*5PHYsbKjGc2B>gS+:13xYtqc3WD*<\+sEn'rZiomJn;8785F5KilAkL3=ăU"caZhdhdr9(S]Q_;(aFt;V6dH0CcLt+oF_W1)nB6JJkPeU#;0MeBK/hH,)Xrxf*păU"(0XXrH0>0]RgfbGdX_W:')Z=>#MYEWU*--[fV<igaA=/B62Q--3b78+4Bnw.02PăU"]B&sf?GJ)Ih/4e^c6;]Dn0b7.d<'O(fn/5,$oMqoj5C?TI/tyJo%<.mpPpPhmerăU"v%rNq&4vtlO0mxHHt;dAWJUsg/z8Jpo?ScMBNMElF9O4qzWdhs+\xmUg&2Ap4+oăU"]HXwfQEVyk-<#mY(+6Zv$>Dp=i9m#PFR&/S,:kX$a6eGx'jkDPEetQYrjX13KgQăU"g#rutX0u.a**6$BD%39-ccG[jQ.Pd#p(j$.-*)8^-[;S1A5dRmA+f7(+oCX7kIOăU")(#-UrR)7bl$>^ADumzFo+6wDJect3/ZsOMCtn%?s'9<tN(mH'+MHNG^G[ZYH7CăU")+:mpub/bb8\4(kFS;93j)XZYPq*V^d_5FQoHrbMuY]qLIRYo\MkNLDE:<Ah1DqăU"oN#%Ki8X>J*b,$Me&NIQ.ry4P9cM=%5Zr=$[j/_#uz7Mgy\aRhZa,Kt^PUtn%gOăU"(,ii,?s[GOwt0kWn?dP0oqyz,ijPJxie.+Mn]n]0Llatw(tl45^AUy.at8N_Ll8ăU"Qylm<69Nj,'PjgP06^^34rwlFDh)HDoP:VAKYh6X(,7*R-/VLSsv1?*%^hG(J]VăEND SUBăSUB V6ăU"_m[Dxj<rFG9sHgA6Ur?,uqV:>F8P(:5F[/xX4nWPNl/=)tim[&j-u_FoCd:8>JNăU"KmEn%T.4ux4FB=_[=Uv'RRo>,%rbOv00BI)x^L+gqQtqSS,&ZmorkM2KvB^:x7năU"Ul.$Yttj]VX*s88j)Gw9TWmhfTrdwBuS#xt&YRI(#$;[m#cqC[&-H[li,Ox3X[LăU"qL/O>.Y4Ei&Z'HTbZ\_(jA4VaF0^#6sZ8rYI&)u=lY<pGT,nIV&C1#6KdtWriXnăU",.eBZD,u=%**_#lb18P=\ckZZCC&Qek2nC:srE-2wUM0x*fkJGUC/oA$e/Ni&lAăU"jNhO(LCd?o'0]\^EbV).%TT63&]tCKYfTA5JC6q8$ZeFQ6O_+LI]ZD*A-grYu0oăU"[oDG]A1*=+kIQ<hPf7W6xCX=tSl1y6vwa-X-R$p2FNBX8pU_i/o8;P8]A?)4l-năU"\Rq<7SEsk*s]br7)4if0o0HtFfU,Z?^SMrhD7I&M#9yTq:ku7At6__4-Sp:[fWTăU"_rCAuu;ya6#*AvsVSV%%v9/H:EBF&_WeE=lr;65uXhf6-7e39+fI^VC\MXn[H#5ăU"2h\]s64v.W5CF2[%_+%/%ogn4g=9t/-K$(HO-VAc':M(CEs\^Wp,$lrhKOm(W*VăU"bHKH;HhdgyOcoD5nK$s:1e\&5$gvla.P%GdZ6#GP=X)$aCj(H:cfbruR4T2?b?$ăU"vPSl$n;MHpNFTJwF\q\kO>54#48+3fd;-%*8+h\v+;_ra^%jz1KH4eO<Y^&AZ\CăU"EIV_V$QrlqhHlkQFOd.Mh%HFM9R.;9B>[TL<PLlp=$.Uib8?*N,bZPrIzmr57oPăU"6'IP^r&KO#lT]qxlag$GWX,xodefZ5g,,j#XIwS_r$6<[c(nZBua[hA)Z6bGr:$ăU"^9_1#/.<%X),ZXIS2[3a5\(LSmL?(fj4<-cRVI['7GmPdWn9bk[Tpa-;-v[7_LsăU"mbIA'/eXwiE#93bd+m.^4y7igBEK3D=t(nJ./;:LsN4P0N'cKa(mDGn]n<i<ei;ăU"$Kj/UlJ_xG09&SC])j_))QmWF]8<BIiK+<]BvCvXGYAj,D^f(s0-Jd=4C%lW>a:ăU"ANlN+%C+AZaqRkcmJErO3+cm48XBCY<REGriP)l*NF3ca%/G<#u-+B$ReP>f?erăU">8Mh^:d#yNw2h^2h%hr%^h/=u/)BRfSt35?u#CXQZMb.-NW2Dpr1YyHUaY9-TZSăU"?cR6LT)4+c5rEa\p[#D*w.o(ZKYI'9msb\&JD(Oaj9AG..<Y8T+TZjt6HJS=K\măU"XZMugkXK+aKhEG3KTl^MLGC/nBI$mAbL:Q9LbN^PO,46p^BxS^8*X'u<OoF'W1*ăU"e:Ju7cEPz%Ku5PeBJ4$OOHoANN#PvY$x0t5-[MoqVA\idRI$PV9NmIG1&Ota&<&ăU"8/K4Bu\6Ya)PGT3T0O=cXT#epdxU%0%A^[#s,4l6=;uZU[AvS*Cbz4<8E_$=bu'ăU">VQucC+BJR7WZ+#&$7AFfajkHe/7^/T=SUb'TRE'^Ia3E(\A4x;AmI0j+nRgLK)ăU"1[dnVvh*_?R'YWXP.*7NQ1n)2P5(IR,gr1u(8AP*6E<fn?>8s,Tw#)ucHMj_>eMăU"=;sG.]n0gxPDpPQ;:L:'2s'w)4>63fBA%hxs/]?C=TlPYrjab.a-i#e\>k#K=mxăU",rK1sS]K8<INVy4u(UdEs&U*l-.t04ehtvCH%dSX'f+K2q#l,ggEp5w?DuQZQHLăU"nL,_^7sBvWIDZ$Cp\cxR^Erg.[9KZaY:,M8g>s^]Hjcn:8DwnqU<9MRGkD4bm^tăU"Ep.K83n9LsSPRN:zAz^^O3i68k'3XWRjj.?s>9dZ_ZhiptV_.W'D;*iMqy+*f)8ăU"5yC'm;88S[ZCf$vBM2FJ3V>E]sD<jEfzvQvH/:YL)m)BnI,]10E%D)_N4ku1r36ăU"Xuq.Ntqx7+\aRXEV.(G,k)HK6/RLeam^LKI>=A6X(=gp[B_vP17_B(k1e6:c^A+ăU"utdB#$j#;tc3GJLE,?62;6.W/%<TJTlIp52Aj4PI_9CIQeA&Sqi'#5>):8OK[I\ăU"=v#V8fiv+swC..<i1ahdTs-'mXJa+T-O,;qx*=sq<evYiZ'FgD;4dy'iHH^'v^eăU",T$3Tk%zDs=th0s9#1U\TWk.Sh8S\XI#0gm=&0$T53TEGQ6_&l$_fs\ke\LJ30IăU"j0yLvR]:#;XKW(F_q_bRZj#XefB8O,pPV5l++Z9X9Oa^fu2'G,]cC9SXR(h3vAFăU".<h[;(YrpvD-,*QhgCllnvdJ6$2d#-P_&mQXts;O+q(J/]YdTGpRmV9AOTbX6e5ăU"a5)]Lo9:yJb;t&olP^sF3/[(eeqRe0?WG:PMu?Q2OSZw^AOGK&OBM00JB<ZR(c/ăU"5F:D=eh#gAZ89;_OKDG-ba4=?O+x62Inh:+qSam$Ow5RlI9][bX'(A2G\jt-ET(ăU"O]30<3*5(<1;b:]po\(QW2OHF1,vcT_-H27r'2^ugOx2kte/B'EFQULS;o0GZIyăU"V*u?qD91<SA^DKOx:-nS8PR^='4(i:Tm5L\XMR9,###T(L8sd5h-&:e4*jeerx/ăU"]EqG+HPX1\X*v89'gC\4e%lKRjCY^fGvp/tc$7?BRGF3th?/TF$K+/LVa;2tp%1ăU"tFL&\uf[u&c$7e\m(ttoDI3Ga9mK0wap3x9aZmkbndYyvvQ1>[Be^4D990#.%tCăU")rZy6:hZ5(gE.b*AH+R,-HAO/:n9G./W'(DUduMV\ibO)WPE+(4dm*&R##$>v?răU"XC\:b?,/grSf7cJb*K(I7M_[5Nh.,HVh,uy+cZle%&:pi,VjtqBE1PO+UB(fVoJăU"'\R[F\W;&QuXWkGFTFrFTfu1z/<AeKH9]PSO:ED9.%qA6>'v4-pX.dEA-BjS62wăU"8i2S-ukpptHolhx]O...Jy#g^LRTH/K,,O,3FViLm<E4XCMWFK;[4inR1db83:\ăU"P;\s5dqpcV8'D?Wmy*gtA[oDrL*epx\ekP;aYIj&w(d4<h>;>X01qmk=o+'rt\făU"GsM*>GoeV+?]KLjFIo][1PCwBDouLueQ9/Dc^rFd++bFsAvfv1)[z*r\[n$muX+ăU"[VR>U-_'wGRHPF+8L$6=^%Udhalnx;H3pOXKVxML.%itk<JisE2/q:Lelra1R1tăU"D/o4o>rSI_V=y>Y94e8l.iS<MK)]O=uuU)<E%;+WkTgk),%W).=H7Kj;cp=V.F/ăU"ViM.qtA7J&4E:2Kju,^)%p;+T(Of%d;JKiII^=Zpr*yhb)\\p\[/[E>Y21IocENăU"W*fH9nN,%+6QOfRFId#x/rW\3vOu)668IWC>X&>37wm5p_YE#3Fj=2j$MRo+'aSăU"Se'?gIziZ=[A,01f3&Y2<WC_Ha[YOp?Yh:B=i_\Y]A[r&Cj<b(e33U$*w01QJ:HăU"N0ZbFc_?x*Fn\WNP&-mXJ*mm9WJALSC^&$9Ghl9P>Uj%Y67Jza:Py'CG=vWFj^'ăU"uPl>tEUl(YDNgeN,MoKA-uqd\LblJr2cZ%ciH*[*$$3ajF<NL[z[=AL'E*m4;#3ăU"B0l(g#1L%j=t[T/Xri9-&[pAEm&g\S[Q44Q?:Qi/R=FA.s\LV\;bmIQ392PS4HtăU"[rRd64npc'Mj<ZQrON%UFpU*r.rSy'Uz%UL?f$Al4h[&BgZ'pZ<W$:?2W34U6..ăU"/)BCX0VA\BYgbuma7k;<ph>g#q#vi=4IO;qhT?,J_J;c,flXKbL5'\n)=\:Mfu$ăU"uurG:*Do$RX4+$'eWLZO'2C*ZqJF,$;nmx+WW%#/:WFyh['8;XeW;r,O15aKW=]ăU"46[4B:k7kCnV<9lV=yJTdaK=HFvLCEw]gmh/+v(5tF-iONftFfLe&lr<xG)B%%5ăU"%GZJ%2<C#y2CPJi*(Q6A%'75ufa&:c+bo#]8bgbr7;;Ks%JzLSQ5XwpAa]5s;iRăU"\dg:n9UZ7Hr(kiBd1pmN)>G;-+R]3A0f_ou5P06g>Eaafz-T*v]a:nQ1<+-%l^găU"V8IsIGWz<O\Dd-5ul&RjJqZ'nWr/CNvBkP#y;JOl*:bQ8/%ln(UtN\pv?1,'/b$ăU"Df\y&9jlfgLbkLs6I-F=vHZ_ZHF?gdp-=:u%C+OEx*vX)Iut1r94Y:T1&9:GDuJăU"d;oT6p?+?a39QKXNGI8:]Od/]=InBSWI*huuu[n\qqN$D\(NC?*[*7[>b[Fw4FhăU"An]iMMIbg\CMg#(2t<+jU<%G9[3($GPu7UVFki-3N1(f6EuzA^>F__KKaK-E5lOăU"-sK._b'/wP.aZ4L,%eUN?ZcKr=_B92K:P1JKcArUdsp;tHg2?CMcnUxLHR4+b7,ăU"ytl53p#ha8U#fn,bXL1':QeHj9hx?_MITelUqoM*:r(-J:K#4<mzI(8G6-Ek8ssăU"?*rRuC+n?I%'g.szXFlR.=(9;;&'r3z_\7:Y.Vl*[^fzrqePxGq/eo>Yc8-Ra/*ăU"#0Ug,zV9q'PVc[(eli\A5T9fZ%QF7LAF-M8j0[kqpRn*.w#^fq=YIkVoy<8WhMEăU"#8S#<d=jZV(EtDO+T/<j=g*Y5Z,4_9aV0=]gQTD:LNrrls(qs:Z<_wMJRUX]70^ăU"7neS.O(iDoH(Cf0I])]S=5BS0:miQaRqK\X\P,Gsf<%:DnLBqm^)71[lG&nmr1găU"AjPKjKw)9%ee:aRqu>PV8gV%(.Z?<tOnG6MpeJ5_Xzz+\O6V<77g?,b%(.MUzy:ăU"$%6ABUJ<,O\u0cTMYg2^q9Y7$+>%4g)XYXpdkp,gf,ll8nB=*8g#3a4>u593-u_ăU"_MxC6-,ONu?g]*NkziTF^Q<3gf\+C0dUOKiCC$P0hd[#<&*o4L7_qA,C^jujA<*ăU"Cp[IKZh49/3Y&7o7tSl84W)(3M7a%S9tnDtm6f]X^?8o1-5:KuqQMDJi\\sYnp/ăU"aA:M\8?C,W5/H2/471-d0%[TflkC4VkN2;d[Inw%iw<&IPzf\ku-oG%]H7T&YVmăU"?)D;T629_pxRR_U>W_F[L5u<S?TO92U5gSWGWb]sz:AL%-<Vlq=],8bg_'oM,G3ăU"'Bik5Y)VUHy]TH5)Gq;h^L<5m8GN:h74g/xNMD.WFC*7ZYJ</b?1w23$OTBb3L3ăU"xer)XOQAW:;Ik:q<KgOy_gPAOXM^BrUPi$kh3E1AXg-k&[PfcS?3Ihm.CL/:P3AăU"N0d4LS0tge4tOmjVZ9H)qMh_(1\sI#i;r4rG7k*?&2*#*_s.O3*G+Fd)_)<h8>2ăU"7\.hDmINThq6m/o[T#JK>O(w:+G<;+9pH4d&6'PS>2(xO:<1).p1dSJ&ojg'B,IăU"2efS#[sG:/HwHgN+PAdGoTPx.h):u;Od]E#*>9s>velZ=sZt[=[7ku;skC0h2=0ăU"]':Zf[8q(M*>9J$h4elJ'?a_O6<<^Ud1[,<F3C*k$DzHGku97O#db[;f3)<)H$.ăU"&/H_uNI#\x5hh&J6b,D)?I([M*-gcQ4y1>jphBqOO)D##:s9dPA]h2lysCf=$CZăU"]&)#B[L=J3YQG'R9FLvLn\x-.AdkZ/IZ-05pO'b_+rAVX4/H3o.?#LE>vit>QuDăU"#vS-Y=EASt*iqs+4VO=rAAFi:h5mI)WOhvx8Du>U6thA55K(3hnAas4Na:(IrYWăU"DrZU8(]KL'-<^+n(sGpDIJ^mr1kiYD_%^w$Z*5<0p:SuQq5fP(E?U1fqXf2LG2JăU"PkjqY#1S?D0$'yJa=m3(*q.59<VVD=.fkIW5df9m)-$Mb#16[1B:M717ZLCj&dRăU"cC1F-8;Krd6?8+AK2laH6L<7moC5o<U(S6jjx<Kdz$&M6+%(cg\/BppjE9Pk<[5ăU"dbEEBO4HA-)N8EU\^])GhB]2Y3pI26OBm*t:3Sveoqv\YHl:+2:PGAYi;&RDj)<ăU"]'&Y*NePQ1/=^0FFp)KQ;JIpKNSPng[UC9m^5'kRs+$bmNlo+2H1h4BK,;ASib_ăU"JEgG>l]AlHGMemjbtb(gvh0]:zL1PBw&PgEQ$6r\OqTb#\g=#.:d_y+iOffB[rdăU"46pV>2Y5,'ckruXr<Pko*2HU(>.RB[2fk_gMFVmhSFl7L9ZPmwum/6nnCLj>Na-ăU"7?=$2,,h?4)8ECN,EK<IL*?&5pLq&QDRy(mOjd[Wu-#0iC[>Ab)RZ;EWgFr/RBwăU"V5BIme\Yr,1EaJdU?>RKXz2b_R?&vi[rH77ij#Wq4P3ScM'7Kn(N5(2E8M.7;N]ăU"IWA43mB#C%jiS58(6Md;i528frS7XZBrckC1X]$kDkhB+(O%+D&(0slk;TM,1^aăU"l&)o<jXJtaRW%\FbrluR&#6.iFSJ\:S<j4tFdwh6<xp)J1nIoRY8=_07CAHlq]3ăU",l<gSS6h]sCs^_AofHuPH%5T%_]TcXw9BK<M:\ABKSGSQ4hML+I%cX$Qh*kr(ddăU"gd7-S5O>L+fXwM(F'oJZj<M*6qiXebA/8q3?\Gi4FNOgq%s7:]0lORWpt4e4[(VăU"jLma*I8W_fMMckGC/nZn/q2IKtlj)YQOq6O7._Itoc6el^vI*W4'.3j,&Pl%IW+ăU"thbtY74IITWxrsxpsj2=bSAq)g]RMgW#+O:8N69Cb6m*E%B.sVWhK3Y&\#.Rv%/ăU"EOTUYz+Ho)GG1ulW]-,(3Wg1gw/2[0dB+vO#0*=t5P4L;8UhWKqz.p9QS7ct=[%ăU"nAryly/RCp3ekfXH6jIcv&aDosQi/(*8AyuX:&euw]86VZaH^Luuq1eD;rTp%d5ăU"+tDK:,_:P1INs+E?nQjNeoj4ssbeW(ntR1LRdL)R<)5C^RmSrD(.-a5:82YL\[,ăU"5S2yiJ_&+vKI97u=HB'8i:bB;.$Y[g_$86wEj-dn1qN6?RfA>&uq6lqSFO3QE()ăU"XxG$4;MWbTOCIj_l=$NPF*lgL0R3YavtI1V2uT/1pTD.&rU,NhrmM\.OxUgwrs'ăU"q)D%Z-xaT;]sqMrp0)s^VWTQ4mIOA<#XVWrbV/#'YR9UQILRi9dKUfNqSjSO4a,ăU"3A2:$IMh(7;j9xmJiGW,5RZi.dApzmTaP;PWW<hqh\w,8[tnPNdC]8NgS.au-i5ăU"KRV+TGCTGTU6%?]Z1K:qBN5K<I&IB[*l70qf&^hGXnL)NgAYgf.Tqm^\?TtIq6#ăU"$>kAbo7/j(cD_>>b9+SA&4ETq.)tkFfDE'DIW#I&L]_*m5]U^GdB(ujHpFG[g$_ăU"J/u/TS<miuwD]M]JQFMpqQ'dNhDRR5a*EBS1ic,i-TD2=VAJ0'U\4zRS$].E7c5ăU"FNN;PMIMpPcbwY:aWNiDfbQpGbMf8I\K\g^9AVV2zXD.E8g1x:8(4^o>49r-ef2ăU"\c<0puW<VBA%0l^WbgiKV1V7-e\;t%?oo+*,&V3jgbv%as7U3Bj:;RhHix6XN;QăU"INm3IDpGX-dT$GeF8BJ/%e7\w$5r<XR8UFXjNTWLlmE2_MwJcja\Tlem[]V9:fPăU"ZO,/Do^2j4cM,IufA-yn''S6UT_XYSS,w[4Q1>W'J&qaVd(c_n\wV),lj\e$VRuăU"<fq$';#9T.JA0cV^Xm*Lk1mk<okZ_4k_I_(?]&J8%Sa%q-^SKBCfF.-Sr2NC[bDăU"_7K/:7_kAFfpzSLr;e)FjiuJ#VgiA)><PeF;jkG/2w[sUG7DZ;y^iq0YjGy1btiăU"mW&X:(EmBI3[\g.PieGBp6sDJ1:eIohLB82UE(qPrN#KucNa)_S1s=bnbvjAhn9ăU")/Epiz#8C05V)H.F()&H:3^52]JhQr9=)cj3ab-Bp0y(DHeyO-gPU6][SWq;PrQăU"6u5DY/]:PHn7G9-pc;#cNRpfJ)NjA)X.Rb<2<qV6&9Wa92hQmY^x+Nw+zk+*+81ăU"MmsWPbC2;nO(q=e(sZ=YknXJ7k46M_59,Cu&8bTjEQqf=^:(S_Y]SOS,hjk63E[ăU"*,V,p=O*?D%d6=X8;HX&xM,1-kkmbYniBzC5WsAmRcorSg6%#Y3^8P_?m^P#::8ăU"H8/EJ'ThKo1ilPgkphKAF*//x\:S;>e%b=-g/]>guYU&Y%ZDi.mH[dxZOo=E)0UăU"(7c0,B:U&wcrUt6rB7V^%_?s8MduMbZ6:s\GsIf2uJOK6B;=Jz=gV-lXO)#.DIeăU"eev_>\;:>HH^ik&i_]v_rmEb-L,oJ)b&_ngH7R?paOUaiCU)P)KlQvUY$RJ=CK=ăU"'09Cz'Q)VuxR1S#$[RJmJ5,XlKzEY0ic,3<NN?3FrG^6P1Jrp*lu-4X=TA+4q%KăU"f-Hf6^Dg?ZPP0SQ?0mm&l#b\hIIeoaxl]YurOO5%axiA(Z_rRne2bZ%/kV8'_=KăU"Y^hqK1#_&KVW01YG[P;]K.zlxWp9GppK(S,,.OpD%PUOYX5YOia\m6adi6Gip&măU"fTYr\J*/jg+j$sF19vFa59U#I4DOthL5ZtJ^.7$Di_C?wIEyUqY,c#FZ>tYjFjgăU"/$6SrCs?OWYiVctg?4.%tBw09kzo51=p'&/o;>LD-wS)wolm*])JrQy&egdoQd5ăU"5GBd'?E+ftre'4rAIK43O,I<VjgEARWQtL=-iuKWv.2?yp9*I&zzE6L$CR9?gJlăU"3:EoL>+_pBf.2t.&iT_PU3)T%En/N1,QH<ukaaQ5d[JoCg;<w((C:#o2,mkX;+,ăU"?fhycY\KqwJc(2?m_*Yqt.6eCc77vY.G80zE3uf4Fjo/-us[n%C*:Hq\Q2-*lhjăU"BSH)8zRMC5K2rQd,rx-JxmFNU77gKP7PO.u=#b:zI=,b,_;02Eh&(4;jN8h+_/7ăU"kp(6\.ktM/#VpMCHwZc&Mw)kHYH^CZCdR=FrX+8pWsGq<j?]9^PZk93pHgjDK<[ăU"^*G;W#A_,v5K&WQQy39f.m3<j.msTQALC[z3eKNK>B;x;/+4e[;dSyd85-n0v:AăU"I0rcnJ.6X2um:B$$[[GUH0<[-09#Yc&su<lZaIb%lh%7+<r9uJ+'#QWN)3SMECHăU"1[*)0sXb.XR;E$,\bIoN'Or#Z.no0tC;Z.6Nq[+?[YZT$VJy;)xEI?3)4J<H3jRăU"*]-bA/H<98*wvUDG90I,D[VGWYrjQ*k^yfcjXn_Z9n*nj[hctAVD3lD^k?^[F8%ăU"mx[WS+VwnsPYXMz2s]lYq[0I&$(eHSYG1d?-KR+BJlBl,(4c_5oLgI?8SxhuVRHăU"M;qHuIftwl-P;ifgM1S-9_oW]7j;cZSYRZB8mGkZ1=<hswPnfXtx6g6->%=G3:(ăU"92.FLm6O414qbLhGS+>UgI:G)&4=7.rb:FmT72^Se5DUto3S.#$oBe=(-DT66k^ăU"N%l]_)Qmke5c2wXBPtgB:FP-B-\[UM=^lqASuRkt9&5E54c=p'du,,,RZe\Q:qlăU"^^RnAFi809<QJ)9O^wshMc5\*zz5uX-KMQM-CDtN^cCENu#OZhF(mb)+?vW4F8-ăU"rx:L<IFLLv*odCC_V7K7=Ra7b.N('_96u^n2=-T.G?Wg/\BX5#mF6<&Ma;PBTa.ăU":fE'6*sQ]]5jXcBRvuxIJp:#e0in:0/:+VP9t#IBvr[g=]1-#DC#m:'dd'RWaDbăU"gHCb3OC-P66R%_CY_a9'hYy=DW$cIsc5K-HK,d+p1j*8lKLCbZn6d&qMLpBs<tnăU"F;.>h3[^eq.bh1gwexo*l:sVeP%fYE<#A&.0em5EsBh)nzZ:FF77I-xH?<:cQY.ăU"<S=Cp+8sV(6Q_pi$RUPaxSKAh'vlLYvTV]EiU\+]a&=3IgD7J[qL/J>Cfgi5%o#ăU"I0k--W3doqADC[cd)IIbcmIuat9LCC.e-eh^0:'8sT(xgEFdPvPBTNHt&vx8ErfăU"p697BQB%??W&5CmR[b[>5wf>5xJ7Pfufa8L_Jf^fhG%xCM(cZb]:oPDUU5:Ru(hăU"6Z06*L3d\RWrD%>GmL0(ij1Ls(0rdT%DanHc71QsT/QdL/2]UY_AvxuGjC:doU^ăU"e?TTl5^idhaL*O-O79Qv3qusmj$u2%QrC\uP1.i5g2yry?#?OCMH1+D)TRLr]s&ăU"XdPh.?Kr6^h-y$xzKZr6wwnl>VJpq-.s\;hV4(ghUp%mfPH>&S>P](h,;&2:Tf.ăU"m^nisEi8?mj6j'59),iOCVJJi*D=ZMjYkX/o<rqlOK6G:#wG,BSZd/_iDXN+gE*ăU"nE5br<RN1t4pK_%/S'n;Sb+pqa's'3KnZ9u3zR:*qV40Ibb*o%tWK8kCS8n,e_,ăU"UKzh4($&C(Ct+gD&0a=X\V7LW4xbVVduTNH6pT.uW4w_QFhMFl^Cn(q+Hl8*hL&ăU")>&Ge3E9_1$^p8zdILQs\5$gCLrbnl;(PlHt4'iQ1cv-huio_8?*=dVr5'&BG,*ăU"[;zu+bLaARk9Q09]Gd_Y]>G[]oAOiWSjaa$FnvD6RxqSPEW3\JOU7+Ns>(R(k8DăU",+PpX>5Q?Ln]2F,qwf'c%]o:D&#12B7:<h<DFCyD+uxf<*'K$1MWEFjrwGtot.wăU"kP?xl^bGhj\>kWXtTM6%%m[4VcBapLgF7PP9vC8BNQ/gbe<ezFsmQ^jxUiR_F^săU"=U<U,x6eL#Kg;0r;Ue=,elnq/E^^cj6];8EU8)C=6av])ulGG/u<G?$KMwEt_FtăU"^J2%h\GPf&M4vi>To)N]i=MYle/S:(D4B.F&Pa9B,I5+ClTP*QtPzWuU*Hn42&VăU"+gYX#ttp5caGYja5N_6ZiOiMC7/7q/GqZm>S:cYj5ptWh.e\5&'U?VygQe#Se?YăU"\GFf.=<DIuXy=gFB5,>=&4OA%L34s&R91e$VNlLXN='j*>UPb_A*)pZXHM$=ArgăU"7^Ut#/.=Y7R7R.CCX<Wyt-r8FR>,[H1SSd-VhYgWW]8^x$nujZJ1?o?F5NH]UJWăU"DI2aZe3Yr56,=a)S$;&8XyN6S[*r&qKSwroM6Q#L,^YVMFVVV)V;y6$<rH'=(u0ăU"dlswAB5Ft^cPfY0St<M\_^$Ro]W<lrich=dp#\t:WT,K]UAUs&+=et:CO_mQ?28ăU":>SQt,%mMsVJZcBNhENn:[>5A=rd1hBPaZJUsIPgXf*l7e[CjLqLEUct*_8<fAVăU"%b_/vsZqoo'Ad%\)=%Ica?^gUt:;HUtiJqsra;b%9U#-F1YCsC/&ZCY.yzD-2nyăU"p3ACV\C_cu$)I$u[E]_&WHhUWWpR?CO&T.#=W/CUtqs(lGC\JgahO.iFJ[3y8ZUăU"aw8TL1E]V3jGKAWORd5l)>#GMhX)Us/TTaCh\Xb$XQL:6EYh&>+?#\(&/'b;L)'ăU"E]4)iMFc<djkM=3YR;GaQEbw?lr^qeF\BNt<\Aa5$YcEaiB<T?ncNvU#mMUeF3hăU"2IK&cozfWwyK^4j=Cl/ig,/%)#__8w5X384+-EfZ(m;i(yRTRw)QPsxm_lrYwloăU"$4gl4Eh7mWsCtZ^c?0?xUcaXT5]ne]1E8Xk30v8D$?_o&'>+W;9b)-&#-:S_kAIăU"CL_SDX)rbr:ohL=3$Ok,RhZ%2IBJ2.*N_aE[l\7EU'WT?=DO0*L7>JFgRZf$$VjăU"h64rpp+Dpfbx31:?y%Qe+z4(FT>:Yu*Z*g/D1DAp>K44o4(=HJ'-jp7tSNnFHbQăU"P#M##B'p'kh30^V(m+D&.FFArd;+9K.3qo36^l-T;A)mgDAqsWbZ)B9;himc%azăU"gFPZ5R+lldTm75dYVuE]8#=J-S66#uK\igZ#i<:Kd8Q\&>bSt/5\PDs,%a\/#vdăU"r?ggd?O[Sb+$V*\L[=oJUr>SrNfU4(#xBiPG)H(_8#X/2cYQvN^vV6icAY#YUfbăU"%89<j$4#Ds7AGnux$kTTg7oOap6^]7f7BDuzUeJY1b^O'f;7\CQ)_-k57q\yT/-ăU"E>]&u,*bfS#_,=F[p_LGg*:<#ybIw5XGWP_Q7YV,Ao\p2[<m;#bBR2;Ql*caSOcăU"4mS+;G(+G$#(FM**p\II0pko?G&9b/1ootki59ReZl\$y6S&h%#%g4oI^#CCKR7ăU"sg&Gpg3;JV1-GSW0=]([RAU'IK1^>zGHPSlBLNb1o40^RLq#'rV9kR:rg_36$aAăU"&tGD6qqs?#N#P06daoh?nDxI2M:UOj=7-FsA.5I4TwCU\',TUcP];6=c)AzRdczăU"RNPIU9<>70(JaC)H;3(cMqsa%NU^\=afcdbHNd[;dvc]mTxWEkX%>I0oQV;no+^ăU"J=z]tk(:i'Lk\z/tB8EV'9i%jzB5l,wL+o]EmLY/WMK<fp4p?Rh1A.#Trde9,s3ăU"&Fk78EOCDtV?QAh7SIk=G[02)gF?$+T:Am)NF:8N2]B\Dp_<>h?Tn%;'#SvUWD*ăU"C#D:wqdI0'D*6NXxtUM.MFhM+bm*X4=P6$0,j>&VqVyUA,/QAl#\]d<<6C0(MeIăU"-wNa0pJD=h;U9e2\t3_rYW/#F&071-n%zbX--I3'4vM#P+5ioMM_'2j$4D4td=^ăU"AQ'/&+PuFuS3J1JmEJqhzY4RirD(p:fU'jT<F;'_Cj7/aee+[X[9)s;/rSZY\uRăU"yJx*SNxd_YKU_f_Tn1+J;.(W4wvESCZO]Et>kK[9Rp#y8Fb)AImPRPiE=6ElLO,ăU"[*P&;WQ1a<j/^b:,3f1eYmGdQbpOhV-KeZ$?%U6YBdsejnErO&::?HWhJ?C[46măU"vg;'wVt/P_lQspex,)\J&8]P#34opG>^YlCuISb>U-aL89llT\&lMo>yl[DKK_jăU"mZyBmP4(.a=Ns7X[CnD;uKlR:qS^d1=THijqbk4rbi8_I+<cjH;CMwsuL?R>kJ^ăU"%VtruOkcRZUZ1OT6mRjex?P%COP?lu5G\5A$NjE^fi.zROt_a.%;uP3$dP$KHr>ăU"jjh$N6T_3WYl/k)=)0elH[rit(djR>OUQeH9i?fgI^:<s#B.:p-SmI_u(5>R1v1ăU"R8jKIsQ)j.Q]E7VK/03u<>huEl]q.c]^6X)UdKDfU.eke4MqcHK?%nC&_.yFNC5ăU"9-d4Rbf?$m2).U*)#KFy=hG<+='[XW*;2tM(M;/7J=?B9?xO=0-6U^(SN&FDM=DăEND SUBăSUB V7ăU"(%8P0=i9>tI^^13A/c8Ga\)<%myF_3&s<\RO&_NTjE:YljSpD,,6uX[G)9%E$J+ăU"(8s;B6Z*/&n*316P)Zo/Z_6DUMYP&Ii+Ak'Q0sU#:W^=*W;X\#cHM.n^dFqjTd%ăU"/V]p0n;Vgs4jA8rLDbB6Hh\_dDiCLt\>Hg8CorhW;Gi5(W7d*Mnh2HA^N[XcqWoăU"94#Eb)6GKlC')q0NRX):<^5QI5JS<04#hN>WB*N)\VOU_uMrth102]#b*<v5)1FăU":+U;9G723q8-U*Mr2SXndHC_[N9\6r-m=:'<3Xmmva*Y8rIYJM^W-(-r]ZXAs:JăU"]%<zC'nw4e<XmtisBC5VJXNLW?4dlaaoZfpX^f5<bF\PO'om4VO9M,SU[^fL;70ăU"P2f7O/p==iRIdDTzJ'I75(eT:qqH1:=vd;1[#ZfG1Jqc^0A1rsbX/TBqPG7r3JlăU"+Z5=ur=fG;<eN0?c#_KrvfDxRVxfdEs;rqG/gY6i%=V\[5qsVaiZ$8&[7Q-QH(+ăU"1:;o$aIFB<o9#mBu[]^SbY$[Lh_S,-=,_:C)8SqQa>U[$JQfUgy,p0ll%(Ah(P>ăU",14R+:Kc]-Ye*9:8V+;X=3&a+bVgTE7?(\+??OtHO[?+[:lIoeki=9P.L]IU)I#ăU"ayDGLiAmyZ2<):U^62_W[vax_Q?qy&TY*u(>s.As=ff]qbHVL,n%bX3VS4mqQsbăU"+mbjR],X+u;rGxuyg)fUU6$UvllbCbajd),_ei0BvlRJ#AOU_/GQ$D9,oW7bsnhăU"v,_n1:K[q8Y6SF018W>Hqmlnt*O3c[V&P^8fFl]byURjXiC[wROS)gloY&#e&'oăU"=bZA*=<((KR*C5eEt&9CrRWPdBYyV_9p>zGA3mC3R(A4N2M.IB+MC=XZT9M'\e1ăU"Ge_W*,w;</iVHEDBjX-UG]QBP_8%i,acRCw;w1CEbzkq&RU::vY$BR)IxC/iAISăU"8dRm+]28xwp?tn#t8N\$&4s__7?e8FkrX_a%L1<A_SUEYL()82Am+_X4x/f_J9]ăU"9GuTj/c)77Y_+o%k(OMxbCEdPvq%[o[^1?E=tdHb'Hc>cvuV'%?mjn;4-B7:)vEăU"2G?5?qkP:W/r,uo?rsf[Tc$D5x5L$9VfEf5n2K_,JiY\m(6'&1,pp8t?sOPJXCSăU"CAC;nf'MM7,sY<mo#gluT1I/x-e7/5H[GJhIR?#pcBvT2gj6?Tw3T2h&57+]3n0ăU"[YI6t#0Y:JKl2C9-tQ7*C)80p?G7V_+<FY['(^I0Qs2pEATj'a[=<9^R^ZE:Do(ăU"t*kkscN'K2VK(6),XgifR&LqDR,f=wDS?a/[LE_Dd\0VJG2)bliQ7j-V)Bn8RwDăU"2hQ3kjw&zqtH%TBjJ=]NIP<4zh#*_-T[Pr+g5b_x(U:)Qds^V6'n^e/uIpFr5w)ăU"lBb=26xSG(aPhM(zk_O2%9?\;*K,lp,'SIn$[i%:Y\-],N2LZ1OXOA:9VW3+U>[ăU"#,^(hk?*0Ga.;y*c'MA=*oaUt/r/wOh+T(P^S,mKjMA4y:2H]:^ZHrvB;M=?7lVăU"asgMs9;(gLcGH7Zq=lRGTKfoIQwD)(TwS<-J236,HR6hg^<[Ak/0tf+y>Cg2M0HăU"REHT+HuomM1)SGbWYtw$fCf2W0W_E+<8rZu>kYMd%0&]VDrg3n?X0O,%Ruaac)tăU"R?Jx+C+Z]60>V^ouo6eE>kf)&Z?=8DoKm1IAD+gtMA[9(\qQJM?0d53Cd(SwTe'ăU"ktP65rB/sm<9Ch5M?K?)Y;(OE04Fc?up0N;NgT>5drP'Ea+hb0?QfW3aju/(zhoăU"9=ylZr<x+Tk(GPc=qs9<Z;-'TyO]=1=by1\>3X:Q.LfR$otcqoKg)RQ_WA)VbbmăU"?_%^SIA&%=JD(48+8(g?5hOiWUi:hSESNRbt(-Z63KC3_>6%8oL;(B/f2t>RrfwăU">Wh\+K&sS&=(uJ9?9$aftGWl<uCCr$NH#/+#gSA]6Y&R*[]]Sc1:[OQfL*2u8\)ăU"cbrQ[3&Jat*\T+Lx8Xow8%bzI0fF-:ki%CLin=V]=]c/<65N(hpIi&CyO?F2/G=ăU"SKJbF2v>\;]UlxEIFi^BQ&bK2#KD-(t9Yhjk[V#LV.LL0O'H8?*hO(A-J>Y.Y3PăU"hJ.AfG]Z7EM=gD1E1#%Z%X6\b<L%G5&6ETD)ai[5Eqz1]e-e>M*&GBDD]c^c7hSăU"&-3qCKtom4P<<$HVHAopk/PrOw]MfKWBRpd&8<Mum<kmS2tHT+A1N<O5nvK(DfwăU"7#p]wCMv8)T^9C$La32ND6cPn0+'D8n+*X4BtEz:Y$ua7/>]SyDBMTK'aWWTma$ăU"D]kLM'aDc^#rd+L]iQ*:V)9B_vSZq-a0YVZ<xXOQYq$/bXDoie0e;VQI2uAj>dHăU"\Tr6mu1WV4Bi9Jq>hQ'donEZo'y:Mp?Uq-?IwLpT(<8'YKvs>.r4&u*\Jca?)6OăU"2l[ZB9mXe=[W^,x'[G'wG]KvKfOFC2<dXw)xYH(?xXvYC/kkm?A$Xifr+=_Jq7ZăU"-\g0(7)6<$;%%'%tMjT8+FS+NaFE5fX*+T)Ejcm#MaRpME;,D0au).V)ZG.6\0+ăU"_S^xmS8?aVcJ.L$qHUQ\pyMP3ACIB_ea<&'b.$)HQBPfiYioH.MLGM&u'Yg9Y*MăU"lG+s9a%t'>UoTTOQ*C$,l4jr0^:ZSxtf)d>,+#uGj47T1m7r-lId5BIAaZe^2Q#ăU"i\y/6QOV)_2u8.Zw%XXlB-cu;b%V<6O=OapD;CU3Q'F\NP#P#.%M0=edv7k9.BIăU"Hf:JEIl84n8*Mv_l4T'GG\m\/M]YDULmVpumr\DAAFm3v6D23<A,+e*\*ruu8kCăU"kBRuwh&pTj46kP&'wnrk;HCfwUr<du-tqM1+#JP3W,ye0-j06ijy_-W;9DcJW3eăU"gcKG_KEh)lG,lCx1xp]5/3:[:3F#TJ#=(S;JgMo*iKl'D0>J'u#Yl:gT.=j6K?TăU"v_o3x&a,q53K2I;6_2n<u5]<WzLPoao\-2QG8Jt\Ie]13zX2M>M-FAE4*'BrLT5ăU"9<3=3Qp_I]\7ww%CK>57Os:.gFtZ?TQue8leHZ#QVkJ;3a,Q6\D^/\FW&$_[G.văU">mpB6>%*$l-)&]+=6lfM0,zfq[p\?FOAQk(wIMy:/^eWGFFS66w9SVwwU6jNe<6ăU"9^T>n#h\_cp1-qN2&(aQ8<iu9m$p8U%LwuXGG?%kRp>7###r_k:>CZ#\6Ik-7MeăU")[NuUcLL$VWiPCIOxM\xE+-aX?87/TDni(sE^^P\uV5e3#Ls#:fNq5V4uWYNTPLăU"hll6Mc8(Da/M8BFGv=Vx9f3A##Va/j(1X>9_7boQAg7FHVe,u)a9cOkeqh/9qb;ăU"KgAZbC;9j\V^EE+T0U^n2>ujjht=vI<$TMfj-g*[KToC*v2$%+)g8u$;EN89h+PăU":L(K2yhw<;mumf$pA),^ouEXXR+>T=xWfW$#:7hcc0k75*m]gtJ+8d2NYuTX.X'ăU"WV?Q1uet9qM5vNxgLLb(9<aPQr>NQ26ADW8[Q44+)JP9%%R%fY$Nw'2qWPBA(/dăU"9n\YagkBJ;#)59sn*[/L%20m\/x#P'OE-MgZ&4/1O?H1Dm[WxM^'Jbo_=ts-9RLăU"3*REM/c68=4;ivb+U<gav_BZV%SF3U<MlrtWpp[9$1\[TcwRo._s3H\DhGP+vnLăU"5u7psFa=hccK72E5R3cb4h1Dc40:HuDD(\l;ja\p_iQwtA4bZOUU.HBb%6l2*O;ăU"%*Q0(/gCToeh/0nh:g-V=9QbV#P?BjPm&:pZ9llO7V2BuTF8An(d)4<(X*4dpumăU"'PVKN7aUoALwD_>'5pIx&huIp)I[Ip7A.meF0?u:n3k(>n\/;=/_,o)((eYPg*)ăU"pD7(rTMJgX?rq3crhv8rb+7:I0OhCwQ',fjX_0U.K712'lk+K_-sk#hZhsnJkb(ăU"PVBfDCqL,?GG*98$[3JgG;2:s/j\w:h>E9^%M2JY1+Iph?fRCKwouFP1;'UIFqYăU"g&U]r%Dl#MY5efh\V=^bexo<Y8_#gQvadu74c?kctfU,jZ%+%'*acHg\Q8$N>\QăU"lev5?2qLUYSs3il:GkNVZZ&[ri[51#7(e]SF:D)dh=t;jVLODNguuksVLdfc.tnăU"u<[U<)5$)25>DB=:V^M^jMGtGwZiP?*k^k0I;93kOhv%aUQPB5DOR['A[1<7dNuăU"B-LYF%bNC=+/p_)aF..'OY^nhHjt<Z4/3t120j4tKuXkdOY$.;rln/d?x/xwS<2ăU"a*l^ip#g3FQ:Q.bQSVQ11NS;cIPcPGrWclXx>\A6Jl4c*^?ssqZU]*E\\\*S<tkăU"IO'nZadd-,Bu(&Ddv+K\2**9uhqKj^+&1v\A7cg5t\vr=rxw*)uU.jiE7.2+_uaăU"YUqJ9].R+V%10?(OCkO=+?<4)qu<$J>7ZqUqkU2F?sFaYlB]\Z9]w'g1?gsS>tNăU"rV3PfD+#aO*X6;R+bs[gpu:+E0F';ixtM+0sp[)_nEoI?S.mjHp/UD0n=p;POA7ăU",?/At&'RPC[UG*VlrG8J%5&rMhLbMo[Aa*5E%x<72XllCN\qm'$YR;V6abP:*2yăU"nEPW*/-bjIk7$qimWtMSm<-Nl5l2_]SPRC;dUFb=+E[X$k-JV4&%(C-j425UG?,ăU"67ZaJFXesm]AfNj</<wTms:kux'uWo3>364#i87m$$m*62+BR[>/l_UX,\nS4HPăU"uLhMueJ=>-+NX\Moib=vkJE=N[Dx2hZMRL[.JMDnBs(7FQY(&<PNQldaCpK*c24ăU"n[6QX?5+Rh2gfufhpY&.$*\CEy\=Gop(TD3Gk42C$V,.gGiL-*4(sda*TZSUPu2ăU"r9Fwuli<V]BXN&lj)hIuZ<_r?AM]G>Md]J3%?.KM*5A?V%Zchd-*JGF%l1M;:qFăU"<Bmp9-FgR>L?c*xqHb.B;XF&G6yUEfvZB.j*yt'G.*lc?T:i1B'IaBe+-$W8Y4NăU"Yr('3k#-FfjhOU_vi_rB0i<V)pY$:Ur&pVShvS.6cbr24l7o4K&06nA1_7_bR-3ăU"8JDWiT2/ULiu$ZXG8k^l\Y;97V3HF$#6iMnxDQv%MHtu^JRYh$n#4(aSj$r:LM+ăU"89[S::;-0IrEBcqE)EuNg%J%IHPme*B(dj0[8Ds7\XObPmxd0uE'G(6S,1&2clJăU"VIb;'n-l,3t+p+5hK(4Y(Vn>R?G]k-QaDfFm</n)ZkJ0UU5^pf():chf6W(WX#0ăU"R$E4NC-ZYKNmemc3$XklD_P?:3s5tu07Th^:IDm#a3.LAIs^SPAjpHI<EJzav$jăU">WLg'6i7sN^VE/qUK$bH-hdNpC%8V,Cp329>1)hQ(=AHYX$2hKl[&jNIphemI::ăU"9,h3qCHwlE%;>dPKGSq['l7O,]/vByHt/^x(K'XE<sAVSq[[Dq\+n2Q[DgD/R]ZăU"g_,SPRUs+v\G1.mruA&BhIY1[*su(\NeUAwU=a'_#XhW3x/_CF2<mrTgQ1^-ZB,ăU"uDfE;d;D+)WrMHHW^3_MEpbB*AeJjINmkBmYBWpd0Lh:SlxG\b;VpXvr>MxwYdDăU"0,&GF:VnDam%aR6U*8gV-c2OOVbd42(P)&u_/V[v*GeXYsX*#5ggXm1&qZ\gxG$ăU"o*sC%fF<;-)Q\JDVmHg_WV[u-^q,H7F]W0Xm%n^<cL).bsgP3JGe'g%y1d%hki1ăU"/3BNG?Sx$,QHH&/CW%G'kZc;IMe0:TxP>1V3r/NpsHYv^0*5ow=)$XPh^w22^G1ăU"ZLIk<M<grnF(Fmpawv3Nri3oWn_6%W%0oDav;<Tnn9XhNy1?<j%/A&?o'58srF]ăU"O49Xp';>2WS5M<KqMBl#;j.7:09t5NfuAEoi^tos:fc4<n#ffwa=k'l)k06nFa%ăU"ydP4kw;Y]NNgE=yhiYXY+cE<=;]57Y34U>/rbK_+yyQ'Xb1_-'aJ8LF^MKxxBstăU"kW;msG'hcic>3(mYB*79'scdN1*SL0C$j7'V:fqUDm45DaFOBVp#wX,_:HsuO3,ăU"%V<sU3'aaCbj9O#gTvSlF?ev&n7E<CL:E.H-l9D54M,BDb^b7\Qnx'=^5jDj\&făU"Ska[^j0Hf?w%-U<%8h:\fPpL/Uj9o>-A.<-+-w[uI8&C3?vF5aDzhs>k9k(s)Z+ăU"*'a%,rxuT2q-x]r)8Lj5INCL:06l_:*bRhxifnhP.Oc'#moB?WQbSsRm<bO1;GCăU"24_k%#*-A&J'ZHr9FH/;H&Eq1'z&c:fP.W$wLi2WzdpU/)3exy^h&#m:b(9O1buăU"KIGMONaMrNX7+RmEUuj]_wC%S)zrl]0efoHK)8/uppp];DfItcVqrgj&.O5JxVsăU"8OnNHs8K#<JHQ\&DE2c,lK\Zoo7'-127%vO[Luj_mU[,v;6XT6(sjVCw*s)*wRMăU"=5%#'h]4S6dT)0;vjMB_-c:Ex+1=az*dHu\>4u6VS^Cs*V23sc8huZP];I%epL]ăU"/tERN(EuzWBU9yO9+n>eI/XdQ\RtIe]=-=](ENgUqh^g>31ymfqkG:F7K5w\C+xăU"'yjC=]\8.Shj0CpbYU\yrdA99sjUn[lzX7_fdh:%D<l_pR$O2:zI^+QOSa;LyBNăU"0g7Lb7do=%Qh>-P]TkO-XW,#;mq_SP7KsMQkb/LBinV,C$Gr<aVV4WDntTC+tQnăU"SrtwM7E+EshHh4l]u=o9.d]]o1oX^$k)ym0l4R.C(0wPy;)%B)N.jzMPsu7WXC,ăU"owX58_0Y4K<P#EDt<OoTV;'-Cr,VrV&N2S?W=#o+AM1X+8:3hQU(%bx:#2K#w<măU"V+r<2KH1E2[wxFqQk+?=?Y6+L2E[V$^uN:iap*jr+cCT4g(:DBLesmXXq6P%b&căU"BsWx%KqRf2:;K2/^Iq,T>xW**a)jf$0X;T2oEHu'AQDdF^UkT#&gTjofvbcuzrOăU"lQgjLVEm&XiIXAdRelir&$hf%CfPT(w0RA)zlvek<5?T0E?\K:?$HzI;<yE>FrFăU"):>8.WIz7TyrQ+&WD[AJ2O8;uu?9Z>/*6EM;MH^tBhywy;Ysin3k-pe%s#Km=H.ăU"<,N,%m<(dhuF<p:ORftO5c>d%eExI;hC*qWqxL9Ys>-/)'AKO^lL?(\he?Z3v6wăU"8zUa93uzLVTAjILM(aY_&ryjF3H,:>kw161r6dj7TFpKd[b#jD^E/5Zu/RdpdzNăU"j?C8&DrASKLunl:UREx=s<JRf%RRv<=9_BtFK4[EJZOJH=d\X5\LZ&Wl_5yhwnJăU"(c5a1(WcKiplAK2y.Y[iw$$JS+H[<m&R*ZkPLOxqvL:B9g$RLMe;43X09SG$ZivăU"1+GAGOLHR*9O,o^nta0#Cn2&*G(Vp.UWXX27>z63dNN7-(X2sqjM8^pl#BH.>T3ăU"?Bnun&ILc4F9#]lPvQAVtxA#[4UT+OFn1oYq3i&^K[7+^A]?m*\q6*Ft^c7HVx&ăU"C\OP'udO9L=(vU3kJhCo)3[zeh&j8OmHKt3fPm#0($ijv%vje5(oXUY(/uM_i8GăU"E]:WeaFi+y.3\?:t;Zs]*QqOmA.W75vn7;4HdPX]v9jq5l7d<gd6RH[$>%6)zj[ăU"<#V1PBJXDWZ#Tu7&RRbfWy]pX)u:#%tK--TN#.zM\a<HHRd4%COo?O)3P8(\yuVăU"A([Jg3k,RjhM7%V<%/Qal(#QqzN2\jUQ#kejic_tuMbjjR>;Y[RY>03bKF)P/?4ăU"<+LMl_]6WkTOMA/r/=K5c^w8gwxI/+mh16M+i3hYF'74)Ipzu:'O$<+^lo7f%7dăU"Ie&uM)cZk2:o^u,As76V-qYK$^BKW+l4kW/Sv6x6InE)0Wc0%w(LCqfC]*R7?_wăU"QF)V2')^.90%m1+Wcr#?ee]1qFfVKs#bk0>p:&N#c(smdXI_=o5QHOC-z$[2:[ZăU"R8M=P<hiV\aaS,sqiqwk=/ZYr;ZsmOE(;?i_yq(_v7eE?'qM+((O$\Ps47HSXO$ăU"?%Yzx.;g0mS+WY'_['3X5G_gK4[^Q;8:WGo6'r0qPezDwu)6LH_G5k3E^[MTVdRăU"ZT4pM>fI8TF$J_*qFb-QEuVf9FalLI?>#EeTx3//^rp\D=4pfdA>k?Fo]#CsUKWăU"L'J=QObZmgefTBPAT,)c)HZTd\t^HM$-K]17_-fim-sCRm$<*G5L)Wy%6JOlT,măU"NKk5LPC8E8d#CFm3Cp&WJL.1lBf^wr,jmaHqCuMLaTT[Zx>*N95#H,_;jSY$\8&ăU"(daZ=2r$hG,8nKS_nvgDD3QMU'zsKrwkOTT6htL?lF=g-+]ZjF#V<up5'9.Q[FMăU"\30K%w#bvnqb2X3N5o+n[oa#TE\LUAZaIu#BX$;8%e:vC04oJ,w)5$ajf6c,#>%ăU"kamui#-_du<[90GZZdVs53wa44^qATG3Ifss)j>%[I?abng9e%)NqqiG2Y5U#Z;ăU"nlM?BL]0'4%Lc-XE;3[tDi6nI$W<JxOv2;Zj'**C-_5=3oVm<x1KxBY(?=1AQ$)ăU"Q\kP>J#*70RZ=ubC=d=*J$jo*[7O4SPL^9[#N5F-d(WU;P/HNx<CSPo%r0Kr^1GăU"695x7;k5dFf%oAOJ,O12by*x*,CEqlFbj(*=lq)K)]W?3%z&)-7_*h2U)z9kv69ăU"Va2Kf]H$.-:Rudsf8ZD4BWiLXs.YArX;G;DYV/gK7eeNy)7=H>7mzNi[Tj_iy'GăU"^^lpTEBk+I\AG3<9P;Y#li[T[L*wHgfvwQ*W57(Qjm&B,nl-q>rC['IFzUf4C=UăU"l.)4%?/Zq'9wZ4)T/eZGK]I1xGSl&XM?i$CD/j$:?mL-((Ii:4n;/Ps.RM)7L+VăU"e\Kmu<esg:tFH=jD.MH4lD_oC[1DZ5l6-gP:QQXF3SAFcOWDm?jGB5x%=_l_8b\ăU"=4negn9KX<P\,,LY/_9;I,L2-3kBXa)GLaYEfaXQ(Y)?a[pav67p&)$#ysSZU8EăU">G2;rz;Z:9kMXDQ02FS5LmLZk>=>/*s<x_23%,u2Ie1kQ&rd?4BWj::s[W(iDWqăU"h:/3ZB1O/(fg*5$*&<bOQKiP4oj[<0(6QJx8j?8kUGt2].&74pOyY*T5OhXQkweăU"049Z+\'XhS8BN:iY$.Fm:jzOn6Hs$vgF(qLus&N;NP,*%0ms8Q_j.ItsZ>MoFi=ăU"EW04E'/pokKI^m7fJ#^Q<HPBESsjvN%9&C(BV7tFA&E#qih^k6Fa,7?['KV]y?]ăU"%z(V$G7YHmvXUocIR9rGx-JM[l(BNDmwd;Vw6(UGnal&.%r&/QHkV%R)VNw_H,qăU"r>y.wQu#dR('_bijYn7nO\=-o9FA/CK3PDA<o&-7sSLbKR(f:J6V/kvf/'0SD&*ăU"L2\)$J_=DVEgPQeVuy^c]'#L[LKIA[IiUd+F*2phm]h\QTQDG#Nh*o3v--jZ.\7ăU"60s1lB'JCHjnf*K;L\XQ5i&7Tm*#?S=g&bzGB3Z3CYxvjua>Nk^Y[^GDHVSO/cOăU"'8)9C2L?r8M0t3&D^tZI)fHIk;1MYtSVGI-;VSZY^XJ?G[r_<*PPuh[erA5pXDVăU"a)&M>,jS7kWF3=ERW9m2rjgz%Jr-EhsB[:C8yU_54<oH7)]'uG2)^K0GgV#K#xKăU"$eW8Eo/VdXReI1VgRA29GNMtbyt6NbxMO-xSFxX:L;roJPTMke1)wFlXm\\-2VGăU"<)=j>QkV1_(YoM%P31W0_Mb';K:t2gHT[L,r7&S[CK%3c_qB34$xSkV0grCM7dYăU"+w-viuhN,Roe.:,$V]22E3S>Nlnk28%t*E31Q1h:2=1ThS?P^^av09U#=TlQK)IăU"]Ej*2m9d<GnP*'x4c$Yq4^W5uYVn*=?suLL,nKV9G,<jMX[o[/NrjY08$U$fphNăU"L'tLoVe(L?J'9u94#?sU0i6UW^A(dfsM<X<a$S&tSQ0,>XGl96LBGo:=]E.E+q/ăU"0JVo#'5NS3lWvex(1$PYA)Q4\%HFU3H-'VlAPa(8D?KH]I?<9oA)gsWxDsXA_%oăU"9.k0=:q2/P*(f\kANK:-X'&U&/jT5b$1*sa=>mB&0O=LF5b=0BP8l0]Q,TOC*lgăU"Vz>5$t6iF&SHsHaK6>U3rO_(.39ss\M/0HZrNU\*W'T\-/W^fvWiaAxgz*kxC'dăU"<wjZ';g.9LJ)\H4JU1WC$:=/%(50:,^UTWKMbD?G1Y(cj:H1]HfS^ql<f)5$$ygăU"eshRcG$obnmpPmf-Jea)GCJT(%O4y;%7_zrep3Pe;LB((pgA*\tOeaTgr/a)2afăU"<0CBXuVk.2xten&u6cA19L%QbVN*Qf*uC3Qh#M,TNsNF8_3Ya]t9^Nt6Fg+P(iOăU"c_%)4saaC-wEkBC7R?T_BM//0oVA&1(3xV]A&r)ZB-L3d'LHNdhJ7lXGp[t*baLăU"8)j,XlDYEwB9*RAYK11QM\i[HCT&T.;mkQBAfa$r?U)1+SCVAc92Y'#:LYQTq*YăU"Q.))fu.VG,e]r&/:OFUmaI6E,Sjuc_Zo(;JJ^Z0JU+qkv020FIBh(us[(km$w^lăU"-D6fK<;uT*WgNyU<k+uG;3IcM_FbhD?)s(dd\z^/lp6oNpY8zYd/g?k9RE3=jsNăU":bB]Nj4[ZIAJ^h,DSI'mCdD-D_obPMg):UK43jX'w[TH3pTtL=[oNppKa_bP.(păU"A>H)lgYju3^+J=D)_puMGGfBd1THJA2Qk;Jf,t<S<TWJ&e-W<7s4]O$Jf15)BmeăU"VewWva>ItU9$A;wF<Z,)rV6amro399Ib;GYN*+]#G[CDVaGWY8Kf%DT>lu\xrgDăU"oP(>]C,)D5pY,CZ15&)(A/kDC*j_[LAaaFD3#QA%ArTX<B)&3I46QgfxOlYtVcXăU"ANhd;jET^<VGgl'LQd[;sq&D_Z6QIkLb'wMp>Fu_*L)4Y.vHnlvV6Vkpg;p?r^căU"hZ\-vt\,8E-u1N7i'ML(q*048YfIr5c41):%L'nja-vTav=*.=-e$v&\ai33-9(ăU"L$/IF-E][D+jt%(iVW[9<X3SRRa8T&.\\R1orIrWKrsEV]h&$4$5eq*FA%%364găU"VzIabD=pVoCfoTt4,pwFOAvDE53>RMt,ZXic4SwGDwx.B8<T8QuTD/?D(WX5*--ăU"XH#b6V*#LLD&sPx,x6d#b4dd[ePp=#x]SS-V7Q08whGVLt+fUY?SAyL$78mgbC_ăU"[$hi.>g<0JRV,^BiP8U\VC0_=S_gH$(jmVIh&fg^&JF(N5Wa2lulE3l-XaG8e])ăU"L/LreePMIV<O(rzqRGK2SXw:be'iH\\j2njBpm?#4Q4O14lP:F2a,gxNpdeL&QjăU"I(?gK.a1Z4p.j<f<T61,Z'#MO*;E8dk7Eq+LMM*8uzwL+*:NI&\m<'qpp4<QR5QăU"F5?>CGX1Zn#dP6+FCop_+;.jq1H.1%[7n-A2r$T4)%b-Yj9Z0PPk_My]Z8)R)%căU"0h]W7Cg.ZYf]ndl]FICiiuo>';m.:6(90F+z:2578pF^ELkY-O,5a,^<bCoPzQ\ăU"]1hk+)0\P-g=d#/WFWzPa)_tW'_=Ju;KO<\PNKBq^qYe4/SC'9T?PqZ;=rI8VglăU"lGI$7\3(fvr%n8RX]Uib,fG^%frGnR2fl15XMAdX/1saL%k#MB:)usuwgwcEWHHăU"o^nWd?RAD;m[#A#)]<*GWMpKOX$,3<^<Ghmaq)p5&BB[7rN/E-s*j+xr'0;$%p:ăU"sS&<aW2j;$B=.CN;FUfl-KL[;5WcQ/*eh7d:C%>w4?]<b1'_aB21=7202),22o9ăU"mSBTZ=Ye*pAx_w_pu+vIF9J:RBJo.^]ullDn.sdxEL?)K,Zpd0(q6[f2rV1GGTKăU",>F8$8e>,;fCFf*Stn73C>_ud-/k&[;=qc%^G%h$7mK[:*#S;LM_(_3ZkoR+wQgăU"(t3<pj-nSx1fC)oQMFw?z<:#Ab;K,SgNqg1mIRU9%7ugK#S'DTkM.QAZ9K[DBf(ăU"bhiI_[9Yhak;[*N[Ktdx\5ZPai\,B0qWm4S0Wg7-Jqs-l#<c$NmAWpxCObSIF$=ăU"Xv7R=(K+B,<*(-&h8:i5hxDbu(/;h(*Eh2-,]f=b0<W$$6K5LVp[w.k1fB9[q[,ăU"TcRrsxJ\rvxK($EMpm2rF;#zFuWl.Km>)cmv[NS(x4PtqZ%Aqy-K)ZepKVv*upiăU"]O9#n??K#:_*b]elu1E8BR,nV&6F;tJRq1]kHGju#?nb6nn823Wlm']Udcm$F4găU"GQL/KqiTV(&RLl:.Z1.RuaY9,Um(AwK;E-J[4Uek_2kjz)-Zx*u%p()9%%%%-#%ăU"*/*IJ9IL01.^%7%Ev%%%1%%%%lnh%wixU%XSwfM&;k>gqb8s-h(<G13W[BcDaE.ăU"4(&qS7XMEU._0jJ$q:s='OCGWN<Zds#,WH1)?QxkQF7r_U.2<jRZm?5'#n=sliIăU"3ihT8?bPmrtAU7rBkS'X>(P7;Xx2$?58jYR(HrpJVHsxVF2KTcL)uSK$lbK(dpPăU"DXFLcx^dwb?i4xcnpLxlIODw?8vZdXcbv>Ng&jWq;FhSNmI0Dk<f]&j:N>hSEmbăU":?(PMDs]Y''ISOCdt>X\Qr7>PT1ZDV36fV*Ptj]nfk]&jWHsF,\XzTV]r&d.tHoăU"hd'N0xw/Z4tYe*&tDCkI81h.,$-PuTjOwB6Z,Zs[hwFYJhfIu4ovsQs&]Lq*.T.ăU";DJfs3HPlslp_<>lgXK)ajWMUt+)P,uH*lF<+l.re\D;RZoGo,]'rJ8h#;z't:săU"V_o[RhMuMgS,6$IJ,PF7,*E5DpxllnFo$gF95OvnjLbj/9eXdi:]&lZwEE4k:mRăU"/tfJ[D][hiU*NIr*r%Upx(.0r7;dTFZWb]ta005u703_E6aRJ_-F_V[$Ob.mD_0ăU"PWeAf>g]'*mG)^,V=cQ^bH1Dv-$iiyg*T&uM;\\8bY'lGjMT>ccn;SWshiBZ4N)ăU"3bBOxR]a+BTbDl5p-<3oYRz^:Jage9l(FXCh4JooCui3IV*0ZW%SLtoU6Psxl7#ăEND SUBăSUB V8ăU"utGo&Y>8bMY>D_y#Bsthtz75ku6pW&rR&2tT.R(HcoN<7k%1x)?)E^OlS+tmL26ăU"<2Pb4qIsp:oFYttC-iX(%7kz]\S6&Tl$DF%$4cDGRTpp-T.hH*8F?7S0OWXE\kLăU"B9C%ecD9ql9n5NU#>f?>ef(bjuhCgM879ysbQ)#az^QRq(LYiXshtj0/CwOH(SwăU"E]Ixx,?LdVxu.8gYnJ$Dpuv_6XuO7xZ9'B44i5*&/qB.Ro_L*/D[\^[fpbG9jrOăU"P64rp>SkWG5#eZPD/=>LL2z$Ww$UW1DdmRrj(<uR-6_nl_0ppBv<4VDZ0pu'7ZiăU"V>Ff=?ie&R.MQC;ZfQ*t;qyk\FzhAy,M(6WpPF1Ultoe8Oz6F.?fO0A]TP4wco<ăU"+Po74o5t*TiwhJ*ZUX$DUT&*/3\cM6vqW?*'FrV44oZ7twJ^2Va'cccbhS=RU-kăU"-^H,<+purKh3fFqJt4A[vHj[XMSbHZD6^\*PFzBZQs?Mfp$V/g9cd2q9Np4ph*CăU"W?j5,tg/t5HfWR]vuG0WrlVhM0W2Cl]q,DNtrdMtZAV$Ad\^_TpgyoDZtE2$ku^ăU"GGG_eelTK/bHA'fmffNF;22Y2RQxgxv=UNQCyph#A8at-jCqfY))vKua>7p.vLbăU":tVLvZL+jGaI7;bQhh>)u4N8/f/;X%c*nls-pdsiLT#+Y?O[jGM-YYq1jG:l,:jăU"wr<bAFguBKm6bd:<&T&TQy[,Dc5tAvA.A:**f#SB$Et;6%e6[>ZLCt-Q:LQ'9zoăU"gn&ZOdZR>EjIpFCHIZFe5dqx9/-x8ZxFwnHu0BIXNKh=lX##JL;]ES4$;?9SD&HăU"hj8hM*H\l0NXcs#r1l^m$Zs<J^kNq0TqreGD\EHa)7(a-Hcu/ZdQ,d\\&2222U<ăU"P)0VEo0LPIm-#ujECquCqECP[;knF4.KlEw?Yi5]GHBEj;ajufH'nZ(nX)oD(d0ăU"F4B5\15,+4jJGra=McaMVYU$ZBTLp6IL<eUMuY&-05=8BI>.\[u-W6tWi0T8d%yăU"K#cCC9YW>Zp:_I^a5[#oZ&mZZn\S1=_$6bF1=8(P[d4J0Gv;$LC_C9mF7ZZd)3XăU"5n[Qdh/V<<goTBqGE[Vmtd8)E$VDMg]IKX4DxG9d$d+1Y?fBbD<^CDVEyg[<kw6ăU"LOli4^O9m-yMxxhlJ,T<;F);xvj?gbYuIM6J5xJJx61<Ul7_VX?6kt\'B\%=XslăU"+9PptUvvV$f#17.U(dhtVUh,.M63d$LuS:LftKjpSVg1vLpu0AD1#JHvLtTf_rxăU"-wOn5;.6vwuhm<lJFAB$W2W/MJrW*?m+ARfOT;rqoAP[,pY>:,s5Si_;q#(HTcEăU":?Ac)bzE\nS-?qq\DBGBbI$uNBxo\4xtSVDwKEZV0fa/'6ZR[e-d;F\&%Vf:PI%ăU"0//K(LXu2i2pp%N-50pDsFy*qJBtaiI7JtD_Z%btM>$npwN)WXQAJe/OU1Qi1N<ăU"F'+SA/n]/iM5I&R-eV8R'ioTP797*vm/KG)_lfHPZAH'aLOrfFLkL6#611.7;-kăU"4W=nY^+iR=6u&A<;eAtZax*;muwQB^N_Tt6MPjb>qE6%]S3,%Z-*+%(8Lc;,Ks<ăU"fK$Iu*q#=U?>p$0^<]BDd8yIPeW46r+7A:Qn,$+MMJ<x//P%6pd#p0A5tDL0R0păU"f%LP(''3a<nO1Cknt>uJk%3tP_SRu&'4\Hq%P6MM3%0g\QYI%$Ych-Amq4;s5<FăU";SlZc#Z:un?-5_tqwIAEYd[K&jpZ;Of-iQ6LPv,(l1^l[)D)0ap##Z,d%G6V*K_ăU"p:6.Uk4=^XX[+1,#D<mCS+<p7D4S9fspKbnngS&4^i#6PhTPd;Kdn4<#E$CLf.SăU"v#k_IycI-,rB^gWC3b&CTi]9T\4c%$$[+(8mQN^N8dU/-gI0qLI1l*&MmBdfIfoăU"kI,#[$D)7eoX4XP:)KmtH0QQIdja;sfdGt0W[9(+s]055]5uW]/i>ktEKrk\XhHăU"r*5.%+>8)OaR<13SVk7hCTYd:lpnk\gAr[c>tf\KCj25S6[I6$=w<8tWNZ71JoKăU"&et6%-_1_Clk=pix317YMU.WpTFge'(9Drlp;THXdxuZuHDO:[4)0Mb9(>v%>8căU"gPGP^+[D_WM]T$yKU$(L&&yOQJ0+7-;[;KLtJe<euP%_b0:-,fR2fB3BNv?O$o.ăU"Ks8b*vO2eM2a0oO['VY93N31AJ+&pgKBOLffz3q0AYeZR^7a;E&j)9ij<B1jE7yăU"kMLvZavaxIIS:+>>j7+'gDhEYpx?l?1ZCx/Lz#:$ovjcufEJ=[(kcv\AysU=dl4ăU"D88%5jk'rnv,4[M._Mc;ln$(FZ0\faJ66\#^CqL9Jt-[lTejt.6\T,5[I7)%(tJăU".T=:,:4cbc6-)L5i%(+u9K?7\P*-i-,oo'5S4)=1Rm7j0qmV8InLkM/]/3(jZI:ăU"c^\8*m(,Ar#8jYPE<6WCTm?3GH=Y0pghK66HCSfeM->n]F)_n#<kGi7Q1Di.NB7ăU"cYC>IbS7u')]Wr/dc:lOlp-'B[-VrGl1g,8%ZK2;C'iJwK(Ys#fZ.IjBBO5Utq^ăU"f?1b3&O?7-'qy,90amvhtp=u=oEy^;QkR.NpbMoeuLC<xVGM[ZihFNxKv<.+SIgăU"X6>1#.aK=Lu,F,4P^:C-2\LbSrjAkA='J-Sl,sK7WH+Qp\^?I0I$qI^__DVrmUPăU")H^S*YaAUZW%:Fj0CrsVio6u9vr0[,1$;2%$s&'gsAM_Y-BLTtPKtp586d].BmYăU"-')h#:Ec>B+/hC)_DLI-vm:s^A6KnV?YpLMZ]>sn??n*f+eXV=2O/\=\BbOk)UUăU"2B+dvl+X-&ue2poE)FC6odcL=kh9dD]Jx6P,6,%+O<duVvg4iXM^oc>$t/5(r.LăU"Q+8e<5Ek6'*krl4XfhZd%Phhp%)]u(WhC8Cs>w(6sBj065lw>eOHAKQimkpO+<9ăU"<pntwR%OOieu8PUV-Yb-.\R#F8*j#Net(:n\/8KxfJ4(D6pUpX(s?6R^?6]$T$6ăU"M02p,MlPx7hhLhY<LPv&07ls14$n+]v]4SD:G5R>aKmwZ^0?o=w-oOCf3q#p$NOăU"F)kTDOJC=Q(l6KS6>8xui;JJXWu7W9;t14dErqhNV?XgW2F(W+IU:,aL2CD8<ksăU",BTR[2#^+%)*)N(+8:>rZmS9mRHSE<I>O>P(6>%%dx4hWC2Ml.k1W-Rc4JY06*'ăU"0E<B%=EmPD<2tkxkK078*0i['#EM7>B=6rV0_LYlUp/52-i%(JT6Jfr$p+mIE$băU"nFH1<2K,=cTV1V'+ae\p*jc<[l>KPtn=I#iIgD%NZffhU'vAVG0oU+3c+QLnW#*ăU"13=zU2Q[+^lKsNdl(%sR1A?frKU:H8j1&q].TU-#Ry[NMI1DDln9fXtM4ttaT7\ăU"qT3W1L&Tp<6GaY[TglM<>?LLLh41:sLJE#la/pv$*l?Yto;xJ>8kR)uutn,V-M.ăU"g>-bN5&TE?\iw=2ui*IhT%u\vo;Ys#mmcN2(kAr25?$0rfyct;uBrqXd[[N[dddăU"&V4jC*/,dbKvG3H+d(6t,$V:xLkOo.#J76Wgt?d17k67udz-IacnEv-pBB/ubg2ăU"=P;vj2Y+*Q_]u.-9=9-Bk#G.n1NZr^0.tMxvgA>TxHlibh(/?e.ZALj>-\=f1RAăU"5q=e_Q>/rm21E;Ub\Vf,P^*m+iSl*JL4p4#H#AijS7QwBcmm1B2AQ&m-TTM;cTgăU"=.[9.8-\gk/W)8\i*kRih(w,a)md%PCKLpK?3&ZrS6P=9g%)btZ$X]UrcFEq%[1ăU"337AGF4Z&vt42)Uwc,h]J]#E'xAR\xj550a+4r>/AYltU/v?a$[Bc*s[TY0;X]eăU">R2<uDk2)u0vwN09=\Sa+Xg.)[/&5fC#wTb>8cCYLZDLd<b9K0^Jw)R,d43h1^\ăU"7\GXA$U'uj;Yq4eJoDppN745fC$\-WbVqEt3s-5=Au)-%eSQL-etZE+-*%gi3mIăU"&wMyZ9e&MNkjmUZ/tsWY>+=sW^Zxv<2HCZ%FfV;U1KZ/M1MKKS15v<lme3iuZmIăU"n/dui[f$Zm8uA];E:j7>j,q*ICh&]9Ft1s8JbfV57\V.yuPd;P&B(q'#tll_5X^ăU"?'JofO7_P5PX#EHf&tcpf\XLeL3V7p8gX[>Hf.J0r4_K>Qp_LUHXlr1i^BU&(YXăU"NaTj)C?9Da\JhxLZIYbtYtdPvN(+xe%$V]cUmZU?t5ao)6(*rn)t6%?l/v(#RB^ăU"6S05-n3-83YYg)IrFnZ]FF.LK3]%1&7E%>Kb89n8l8X8&a;rDZ:[rbpbrkCMzspăU"XlxiXPVRq/wM%_sgiLipFeu[(+pjwbbaG46a;^HIf[3Pbo$0:]>9t0[4Rs:u&9(ăU"IZv:tPBW\\p=^)to]n,(G3Y_ph1pQ%P+MajT(3h(?Z%/6LAXst3c+pYnDFisUsnăU"RnL_<<w6npLN&-mqYs7/[ozh=#RL1)2%LXN[YJpL:)fg8w)g1r\]sc2gZ\1a^ZLăU"iae0+8RB\:kzlznQlnK2(w),jJujk][MDl2ffu>#<&j+78AVj:0IyRM?pj>jhKWăU"LCatX'&?ct9Tt:nV-ft+QW+Aa2s+9,qw]eGcaih[6n$9PT8O)8>o97Sc)=%2LipăU"2A0[%W.cVhtS:A[)Dc%T7$q1S?j830Bg.r\nqsoXohK84f(9wlIZ2WqwNgGa[FZăU":2SjiI\2%k+i]U,uaLgi16:<;K+KLp*CW*(SDvViY9h:lIW4+]fC-oe>kdb08('ăU"I.n4I_bG9&)QSi&8pq>S1YJ4ZUWn4?>CO1q>rm\8.\U[Hhw#;ZYm2dvcYCtkS&oăU"jd592$2+1qPo7x1fOa6QdsaFfscl%i_jj\8H2rrFSf*'ZiZRU%\=5#_(W)2ipAxăU"74%&nnM0_D#oud=CmOwh3.YrEGQ50(gC;d'uuOteX$8)K;8I&gq-:u-V%TX?i56ăU"jPcadAO_B,QWJ]pgSP:;h1diLhNPo-FHB1pK457&-aq1+8K_d,WP4:;ZxSo,g1EăU"G2'=mDqRzRI&iFiVfrCsP2pFY_Jy%T,=\JkJUGWPs1R]+3?reY/H[w)9c?e*lr=ăU"Msb&XT(\i.LRiiD2qvUwGiN)h\+L,\1gx3dmmyd4W1=<l+GP*aX;tQ<]5tM#L,9ăU"+SR>0nc/KKMXQEFdOXvM5o;[6_q=X=/Umw?_[gL,PA0<X0SheYObq11M??4135GăU"K+fqqBPbpqPgEZol%=bMYO+oWW4(pOvr-TxB)^n]IUI[dB66%S_Z8d(5=QeIYc=ăU"V2ltX-QJwZbn;MTJ&Gt_LM9GAO4VN[Cj)arhSdLu_>_VDzT\>4;WS+sZtLIYp[TăU"gWBwv5(yQm-[Xq24=XVVM,#)IV+La5Gh2*i5(Iwrp<Fsm;.Q:g'6G/e;cJj%c+4ăU"imMOg6(%KTiwWiFG]rs0g_ik?<dLlLmpAUq--mE#w%Vs,?##\PP]%(++,\:]kimăU"_1MzGpUUED4Er,fU'O3(a]E9j::Sx'd5wrUH=aQ9nwj^X^q,y>l?j8r#*;1MT9\ăU"A[/8chmSI5x6tO(riZ[lNjK<u.0QZFmY\='YZNPEMKI-N)+dnYbFLE&2nsuiZ*6ăU"lN<l5/*fU*c%EQ=Z9h6M.6v+/5khv+PF[jRWTnf(vJJY#IS91()^HrF32xL?^CmăU"oPD./sXHMSY_9V3('MpEU-%uEe&x#3)3=B5zn?1\\8RW*WIFmtZs*;i<<hT<ggTăU"wUuY>u)&X9.m6]];z<Vewnah7mnb6v?\'bBbAdZ/$Hr_blqstRBsjt#Pl_tx>>>ăU"=tZx/FN9g]1B$/Kb2>4nDS%W2?,MqgDK(,AL%g#9W]=TDLf4d-gt]o<aQT9XP4JăU"KkB(,^9%rR^0CTW8oOMt4<2NNbEE4]Ek$E4Jm-['yXILcN-dI)Ql(egmm4UA0#<ăU"S=VUBm\AOjE#&^L)K__>lE%q*%[0OL2G<g<]_wnMm),VH.xw90Uvvl9lRC02_pVăU"\6kLgpnQM<^[u^](\2-QDDt(+k_#\S/M&%MIf[q/10)5&BDLr-db-?-G5]?.>OJăU"c.?]Y65=Sf&>+by$SoqmwTL8g0Lz/KG,O/-r+idq?2/&hQ$x?U<Qm;bd8YcjB6năU"av$28#IS?1CJ;2_5:kAXo91_EZ13>1n$.U:B'KYn[n].)DRUqW9A>dQ>Q?p>MW%ăU"Y2I$jqBE8KgBsEs81&%25e5A7+M^+KQ%/rWkitP5Q.&WI?:Jg86m%b0)'B:CiVfăU"D%'JPd*'hk\g6%R,>L\,7Ckq7z,Ty'H+1]/8tH#tSP;ZjLizI;K+VMdNk?BnyF\ăU"MEE4=AlRdodHd$N(;RbE__1FUCJEL3)1WSQTs,6QUh=4'PgvVElQR,6zLEG1U-VăU"1.1j>ErS+-8cdEh#KQe0RF*D1w:V+_6=,\7NWUljx>9=CN'DfF<mHu:9t+VtL7+ăU";il15I+=Yh]YdbUHUuA8jYs#O]1JMK:05%qfIib5.9rGf8^;6+No(0]-VV:bG)kăU"wEY)vc3#Fq&M)dN#\VSeJ7n1FeH57h&H4-VQTE^Z>Gn9La)YVF1z[#wG9\/BFW%ăU"AS1M*9#_mT[0:z*\amGo2F8)NnIF,c#Dp#ppIeAH5sL-KU;'Jl]Azc6Djix/[N>ăU"/U4A%r,qLXZ6>+6n]BG7%U86c&-FAJSKe-F8um.<*54D,K3:%Q]2/]3UVs3EOK4ăU"ZG+1v0^F)F(g[>v;5T$D+UL\3W?^#nf7:bS7Vd2\TKVhn^M?'#VMB?pY)F,B[3*ăU"#w,l'[<-ao_G%L?K$V=nD7ltq*;d1L6<:?]Z(P51F24_j5lJmJdp($(ZdIW0%yPăU"9Aiel2W&q%v&_EsAV,I#a_7:0V^1d'K*VtwotFoMMj_$1rM)F)2n\jBM%^U;eS,ăU"9Eiy:W(W5G[nZ%qUw.<LSjox0$=G>U#1_dOx+5sM6LCbKC^fA*]wd=_Yeg6jv48ăU"bQ>&$3(=B%5/T8mziQ;QeQuZN8159_6:lrGP('Bl$j_e-mr87Hia2l*Zef'[,]căU"W,f\t-UN8\2gwp:FGXZ&7;)sCd?ftZF'[5J'1r)^J=iT3XM.&&c&YqVj0Z%KR*iăU"]M2[R[W*[+HdKbE3r;OT_p4Qf6_n7WK$-dgApSR^*Y/,,#HL3iX5L)fU%#eU;/,ăU")S#=-+/]+f;4NLH?0mX>DUWN8?<=8Kk<+.cSJ$b%*kta0Y)FZx%l0/]JCUqqR,^ăU"eo)5myojV<2*Fq/:?TXN&Aoj[cZiHm,$ebugg/bQR+J8eOQra6nOi^\IPe<*[d;ăU"T8yd\'inh[Z,9D529JA^P8U2thqC:l\lP>8PWKtbTC?IY3/a.atKIYZjCd9A4*MăU"qmM]<;#.qHOcYm59L_W)48GnU7.%,j3)b1pMBKBx(bU%mTR]dj*u3C64T>61TA*ăU"*^G7i0F8R.%hph?%_Y,IX^DTDW^B:[b<K='Q^Z5\$f(gK2=AfNh.&?kh$U/_K\răU",%q:9CTV95\&=kAqYDK%IqF),+o]<EYFJ:5iq8c;x_6UiA%/glf3(P-TlUrr]:+ăU"nIb1)Qc;ElJ>D1QV/XiG,t49QI?sD'[f,,4c[yaaJaZXR)%J/Mp5A_V]6)vGX+8ăU"9)EbZR[/5)4#>]zQ&yPH>rD8:C<I>>Ig8eb,4+?&Kt2%IBq*).O%>Y_C&_V('*OăU".QdcCfk6d=#]QVU[*E.3Zw-g^MZ:J2X]:1-UdtV'2*t#X[]JjX:VcEL/8S1iVxeăU"FoHW2NQyx/YF5mN>H\'X]HiRd(zKActUq_+eI?XH0j7.LR,Z';r<o]mbDIP9fE;ăU"B=CqpP/u:SRN=3*NR^\$I<fr(w:1HLp-7Xrr9;jc3-c8#OOE-7373m&0?^y9WCQăU"'(;&93vMJsY&ZE<m:PKND>\(ml/Is<$9:]H+)o_>i,aF:luw5GyLmIWL98K5TTIăU"H_<'6SBrnc^E/nywHr:v-9$qVcfGTqcc#pn*r4_c:Xkl-e1lk0jC.1ywHfm7z$CăU"ydK-dJ0#0M-cgS:+?[F^[Z2&Bq]q=yf+7%#0x4(c-,c#D>0%E%5opoom3k1.pe8ăU"r-i9rCU?-k]e[lj3bG&[L$V10JSXQSK<99*CiWod*J(_Q_0)Su/K9*V8-W%/4i*ăU"0]A+Lw6LaoQYHSv]eS5Qhf1<n$C=,L.j.A_CC+VW)JdLntg'U6sr5:Ru1Ur:4AZăU"^3G5+Wo0&\$&(aO+FUJ1Os*4iSao_W:hei9oh+>640;q_l%4l,L=f843U,[#i6uăU"I,gJmt8fzVFSFR=?:L1Go$O93dT-l+Bfv6h\8wHdncoukoOuL5U(2\\B:zI1h38ăU"fl,Iah<Y*N4KeD<_SJ8C)^KUlbpDuQ'(A4/5B_'W>vPAW]Q.0[e-*AM:bAWRiWvăU"txWVGE47R&/mA(OXUum7b8\%u\w*h8:QsID;qX^.N,kn7j3NI?pC=KKSp;%8$:eăU"h1/kDclUnu;]cbSROP]Fi)9hP:\GmngP8cE=M$RW>(aUq_%T[mSG(hU1*U-QY6OăU"tKrjAcEHW;x)P>hKKrGd2Wt:kNdea*)Vj48v1x$$;HtqasVqtto8ggRCVw^/w5TăU"TcX:2**1<#)rQAr+54.fT]<dcKiBb_J=H2%>J\&wlDLE:'#+5cUBouOobP,7I3>ăU"&7'B</'9b'i>Ur\(\\+Sl6>]6/0p0epjtB.+fw.ba[#;MkG<jTKi*I;lHTPrLJ=ăU"[f3t9kE6-ZAm=(52l)r-:&9;8ku**L;S76uk57Q92Ye?M^I=2L>XEZP=]-+&inPăU".0E)rOe[=Yw)V/OGNn6ZE&TY7NVSfE:pDKC/*=&$,b,$GC2E>)f%8]aM1.4\zuUăU"&_O:DpS?T0'uGGZqxaBU$Tw%\)_P3ijU=[c<tFY:^0jTIpwg0:'GQfQ1<]f^'WmăU"U0AtZq#v;sqN]_%_[QzjLGQq&QSyp>v<7$sxJQ9/_h(\%_e\0\S[hvM4IMpy)$%ăU"#^u^t>;q^GBW#\Jq%9mmQq:Q+=qF-RqJrngndS)t2?Q4WVuC.e4ux/[Vlre)ee'ăU"mr*#'(dFu]jE==Bej[VQei=;9%4E6\'3fP[:GFZTkS,):UTULw)>Tx6t%+>:aP,ăU"))+8G;8C?2_i8t3&%i%tENL3LksCZAE?\s6oaj2LSandYp&%5G?jeOsUVAiUgaIăU"vxn]nUr:C8S70>ihWyo.Uj0sE[k'[_14)$RZgvDtzvSuO%hA&,TNtj=gLB&3C2\ăU"b&i^PdGl2fO/kwHrICfO[:212eX9X*RsEK&Nau5nEGnjO)tAWIRgO1A0F?lQc>.ăU"nV$PqOO>,rUA)gneB]*?:_L\[*_d(3e($;]:i:m8G.q[3e%?#-gpuj\]*Kg_AU'ăU"V&'x=d7A:QFnLBLA.]OEU3r^;GJMIy8m'IGC7#EC^jwd*nq,]P:rrc7[8-P3BEQăU"FL*MXn?GfO#x1c]>%I,r'<8g75ImtE9'L1d5TF5ND-_itJ[f,RWeT0-l==v*[*VăU"w)]1X=Z'-;$VN4tz^gr^60ZA_$bMrW^[cAOQ.s#jL2wHUT)5Y/uVjY0d::u35W;ăU"=.g>N>bH:LV[&oiAN2pGRUuTA6:5\rG5\H=.o7q.N^\9.?f']R'/hQ()2z\/qdLăU"gMSqWakPrG_*X4S\hqal:Qm(uKtSgB*>e,%dz*25/GiP7%'me7KVQ-Iv/d4'=H&ăU"^d)HXt3IbX<4HDGn0<Br'-7TMQDXd%(qZf*]Afw5E:?JiYrN^qKMBUs&aFfj=T=ăU";:$cN=AB*KXYL+.[8L=U0T:mYQVW(OnIB>OYGJ$I9aCRyhF:_9qVH2O9a^s^vR4ăU"Se29q'6AE9>B;A7yXH-\cmpb>E]3x/?a,:,1PnqsXLMaQvO^Da#\Zu*3\:xtiP]ăU"Sf/;UJ)f]Sp**P?cgW2E+VUnvQ%q[*z(V:,RHjr&4+)\fEHbpf5[eLM\1/EA9gDăU"lisdVn2s3'/[zN=>u[DZx%yI&l(3Q$:r[jgRp]1ldP9Rr<h5a3fZR&[_nc8>=3răU"oPtX'Sl5mRB>):y[4S4:bQo0ZW>8BB:_*DV$#?kv4^3tG7*6Rb8QS4y<Px:(,BQăU"2]I:E=,SeDeK&3^-a/R3lnac3Rx.+*5X,5m'i<r'%bRMX>&EqKcuU#8Vgk,877IăU"FvLa4\Vr#E\K1]/5q0yg(28m)>1No[X1Bx[E*B7f9qB*HqihqN_2H5-;s4ZAhn#ăU"MNMkM[<jLYsEHvB02LQb5%i8<K8N_Pr&Oyq_Z^)s>d:_wlg7mh\:lM#QPMmc(3^ăU"bp\He'Ux*irs8VjHFyYV=Wk4'H5q)Gq#yiv9'bNGDB[mB'La]AScA;TDmJCqRxVăU"R:rTFq-=*:QUKXht1Pq=kK;y'twu%7jNdFgd3x[?0$IRn+45#d;b&(3rgGNkH<OăU"m^cwN#/1OWib-,E:[o^O4$_:5<*&5:\8K.Ac1_kBV$7Y4Y](mF3B(5%+O0k's(hăU";pb\'[=2,7/l<2R,[3$\PU#U??5FiJ6J7K>.?)[<bHCEQEcv/Rd0XUJ0P\Z\uFxăU"\=&b7dV<E)PK$pB1nl+J-(D2e=1VnwtA/=M./\\,Z1XYs:dO7C\E2sL81GRxAASăU"ZKB0MN8c:b9+:Pzuyr.&Bu-QZO);Ol7G/LK*yzcYeFIE-Q^%Fqipih#sc:;5J8SăU"nE[Y]BSU^A1mHOpUK2*p(+h1WH=-y'l:RCR0+kT>o7&(Z0BfH67gyvO.vBBnZ$aăU"?GaYwMMT$4lq$p8co8y[lo6]:21]AXd8biiU^K.&E7ZM]J9)H^ZeQ&+sRT:i;IPăU"$Xq[#NV.lSPrZ84Gb4]F3TJ;4R+)*29*Qv,:Rvl6MEY6RX6b4&rF6DECvKBHbC#ăU"?mQ:4,m&HdN:kN?c&\R?kkUj4T\O:6gT$QCyUde?o*h=38h_6FC;anHw;hQ<s4UăU"E1$n]xPA^&1y>p-SivJ82h/#7q)oacoC-';AYzpvenm29I2kM#XI^aLb>?0I6_2ăU"i,enYJW7U]DHIq1Im(%8OW\Xi(Gz2uC*7wBkJvtjc-cYmuXit[5:sAN(i0XbTUSăU"Ap1G\aYeux0E)u*8=m'I42/KAu+(T>e4'=3U_&PhnO06^y295U&MhTN$D0[Xpl1ăU"3fik8?^+whS02<b0\&L$ubOLJ:#:';hhsa%0%e;#[HgUdD[0f5_b:8?\\nC/7[0ăU"?/5P?UU]xxc;MP>*_mh3nGSo=XV,qGf$w;H/H/38]&)Ln8hC*NV_5TT]X):=?*=ăU"kHD?krv+=;AJm&\Py#gKxc7G-xc6P->f4P;jP&_YRyrq:Yg;F,Jx8#vDIVn(HugăU"=n6rr4IZqe=WndeZ(fidP%I%n?6\/DfP*V<twETuEUm>^:L_%4aI_b3j'2m?ZdPăU"90pcb#GTx>w&SIffebC5Ia$/=K:s[p?[t\(orC%Z^[VPvU?kXr7U<Y6)=jS?A44ăU"Rp5?6I\X9/-%S3Bu^*G\x^xU8p&$w-7I-c)^))ba=(de.(AN]*ckX[11<hfrS3QăU"1LgDU878IL;-XiPo.(SjBj,HRgI_J7-#e>+R4CSJGU&On7RE-j8_/1y+*==)Al_ăU"><Nm:Ql.Z\)62cJ,0V#KWVO)s#ia.kBQHF$EjOacqa_sHqLB:aw%JUhVboV((nzăU"m5BUZ*$?mJJvDiqTYkG2c[M-?D=BNm[6DSZlpv0u:,v[h*;$1)/l]/1SEP63aWaăU"4[[4A*K:(tJ+Zlk<p-W-Y=+1WA3G1]\7WPt1H.NpofNYhg.7r+La1^Uj:_cGsaXăU"b<<0Zls3oZtNYj$Pmb5G=:pVK&1WnH]Dv<#i<0tq?W1s<.#)dO>mscG,?'wuJ;EăU"eeH:/?bGE9_5(=1^&\<3BV+U#ZYTGX,o2wE>*op5_(B%(\&.]og,gq:)o6%/A>^ăU":KnbN((1_0\O1Q,.6WM0[f*\+/nkD5O]dsM_,^Vd8[C(5zHJbp,\KaK^Vw]9M?,ăU"gSRE&%eQ2o97<E]/QSl6&-]dcAtDh.<\6[4Jt>jTN>U;?h;[+:FepP<q]5Cgn(oăU"0/Hh,ZgWc]noD?L,v+h,G8p$19Pp[Ls-P/6Lz8gt?ypJ,qee3=Pb%K'&L%9=m-%ăU"nJeX/w\11g7o452;TUB?:ZY0;VVjq)pplBeQ'u+12:cF#Aoq[D\URM-r=6Df9<XăU"CItpzT_)KVQ'cq2urlq5Vo3$E#_/3>,d/NQ-gt\'bHj[\6e.TP9[X_j1o#y0bLjăU"C:4qo*d'EVio*O%2X<se0(fpn*DVd2H+[I+#]0ssA<bfL0gwb,L$-^WWZ\NGsnMăU"0TDCkHNT^b(y.%1Sb&:,mgDY;3qx.+SE5/W0S)Dp_f&=98Tid%+3l\UI6uVGiB?ăU"gnAIZw<pnB]AmKzLB5snH7EM&-54Si2uqjx,_gy:TDR3#(urfMfa4mQa?Rr;2$1ăU"6,A=nm<#9coepE\<sz=DIIkIVI1]WeQ(B$m6sc9mX:(c78ZP[rwy=K,$/[q=N84ăU"&#x?C-0R[L?Dbp#4r%C+v$WSXbX1[_CH[m]Lf)qvT5x1cEm3Ji+gfYoAAHQE=.3ăU"7o/5R<P_k2*kh>QD)f_)G8IFiB:a(GSm^i;di0<3bcv5\\qEhbHMO5X:hM<5xhVăU"lu;93XBoq66Si6\MXFMZGnw+RUff9vI)7iym+a=p$f,11]VjV8;ttSqmj8&2bBrăU"EoKq5'0oF_%JkQ$C7AG2<w>B$s53_M2NoA=o#LoD1r.]VF93TsbTGoN?C&7C.agăU"XJXN,S7OF-l&MDOIZ9OR5T$*5U201+S]pfLuSJg1$Cb8^N>3dFlYNLD0'9_KO2'ăU"I<i:6Gjr(i]M;hOg^)w5L,Pn#.;L/IR&uM6[dHO)VHOC*zF#i$MqM]XUc:fIre,ăU"j^=QlErvH8i%%a5/y,>5S?vnrLO+/.XfC%r]=N&l#]MWMBr=2vo7HiK'%OLM\\\ăEND SUBăSUB V9ăU"l+7M%.kS0C$7/OwMg[\\7RpBbu:m]jrFg_F/d?/)SxHFG4Ku^Geg'XTTcXuL%zaăU"i]+]*GP;kQd1a]jUjJ[,&w/q.g\$:Qn*75%j9pr)aP>OHK;12c]U%Nu23^?D=10ăU"VYat1LlQ+p4KI\q0M)+GBLLY.;,r/RuPPMX9>q5Rv2[$<[2=5pShYb,&V2,1/n0ăU"&lPg>8ZxuH+XHq=-.Lx/Tb\#d5<=hZtA]a6wI65*y^v_6iL$%%EGy%qW8_dZE$dăU"',+LcZD#N,\t2aW)Ef_ZnRCY1lx_4XHo[KYo/u=P:j&i'6%H)kxdHW\QnPfG.#VăU"p#abJeJPg#X1]nXWsOF34=Iw?5Hog1Wr_a=0;,AWj#g=kh4?Q%4-KpLt#u=#s'.ăU"o3VbgQj.)$Mq<W_>?[L6Rd*<'^W^Du%>DCli:CBUK=hCL'C?<beYmDA?,<#^8auăU"iph8Z1i$rUTN)S4dE?qo#c):D9opfDsO01gya<sdWf(3b#61;nR>dDV]0^_HMMqăU"1%*;<,Up8b(8(cp<?rDZj($<-M*16/5tF+r=GXsX6i]S/wKZ1e:7RRBg:T%HqN2ăU"YZ4%'j=CUKku?+clMQ[9ZcsFgi0YNG2BZH^T-^m;;_id74mCDp_]6(cgUOZ?mloăU"R=dsapDVjK28J3/-eLcrV*_;uFhb5VI9ibe%I)Mu7C2pVQUWP>Zx7tZ'HTAb-wlăU"83\1;A4>3Y&D/*<=u%=9ewAMl]gJ8Mbx-r*3qLBV-J,DR6;CEp.ftvDkRrtAu1măU"Absjr#AqVC8NdO1+?^jK^,Mg=dxu^1K=QD?_Jd7KonkR9^c%pr=aQ[Ph[#WCurJăU"OfjiNrkgs2%OeIwb[gplgYOQ*d*M_TFU-XX7%mMdr;?b?0H9M(eow=,:VRY<zpyăU"EE1C&\\3XOq)k\nj5BVTA[6.o#QThQRPquI7ukN9h>n;NMZ,HYtbzYO#%%W/-O'ăU"aK)mw;%]9mErzAA^r&LaZhdIMBF92x=;.tHDA3.:g,fe)F7'<:7/,G&WY<RDZuPăU"xcb^pQw-XFG]PKDMn*:P))e:%+HD63k+3FZgn?UTPL&'>$K/'$,Gkr'Jq-<E1<YăU"NY987LGXCGOv3z1nBBx(qqRO0LETiAz2#=MeggFmW%d#WIGjA$JcB1eD)OZO:>#ăU"n9s^NR.k:KqNnSLG?6p^I->%Ti]v*b)-W#5D-[?<$YOhPn>NxX^ZW4WGSyQX/gTăU"IFcA1>IWtG:.u/knOM0;6,S-I;O49Eo[9X+:k9Y8\sCD(9D9s,8xujz7eXt.vroăU"uHkdJq^FA_gXN&Dl^22UHnA>&GB,Q]XSCZaR7Q[+8mja^IJwYD6R;nZYaoo5,fMăU"Xw:<Q6ei9YOkT2Nr[si<'^KnRn4&k>zj/CWk1ei%SApBC;=DTXNqbx7O%mkS7)qăU"^MGH%f,J;-<qhm04AQ7C:[=ug1Ki4tyq7V-6tD$sSerqHaHd.-vsm&DN]pNY[d[ăU"x3+Z4<mj6C>AZLTA%,%FbQb]Bk;R8oqMuW%\A4hGk0MO+3UNA'CoPzr]bb(drusăU"d(rtQ<xQZ6t92)U,Y'Uq7kPOZ_ndh?6o(qCeBH[2%AY9H'ihOo1(t9T9NT0,35UăU"0-fRrHP)W=D'RN5YK>(F?B-7-oqYD)E6w)b9_j_RY08n-Y]HqLL_9b]Tj*Yell$ăU"1Ugln&XR8ok.:gNH3sAqtgqFPhbd4l87D.29s+6qsCp_Ca]3BbvSc_TnU0CU]sGăU":f9uKK:sUWb?Sj:ppP7NdX\;k/n/^q0#TINbptTtT^t4q=NpB^lNhtfatNtl]FnăU"xrqC#lC863wQp\YbQ=,S6C'Z=j%FeQ(R]\)+p_Et?S\rX<i3LN2m4tc(L?dKUB^ăU"&u/QZD3jb,/%(%&$Bk,=;_>-=<s;BD;FE0/rN?,eG\Fb8:+rmSQP#]AqdB<iOW^ăU"5Jb8cpp.#3doovR:(k'Z$Na&P5k?gb52r*G*YP$^olAqouuijJhr6N7>Ltp=mhTăU"41Qb]pn$IWu2t(&E[6#B'NooxIFa84l;_AQsrgCHPN<f<Lht'\XPq&IxorPnufYăU"rSSNZOwlnXDvfbr(Nw\f#tF53tKBb=IA-b_PmUOD$0Fmq:9*kmT0$Gkm6L\3cFnăU"yqLL\oiRTaJ(NG&QE[ng?:>.^/^DR5Zjh6'9J+QYuP[a&vkdl8Oc:7,V.Cr&$4TăU"HU8lS2RbIWN5+IK\,aIj,7+4BX^V8:n>eIugU,V[D2'NECIlX-7HmmB]jvjdw#qăU"$;mbus>/\0>Nxt']w;Fj6vq2^d&wT/pZRX*X'kTOM(+sVS-WoW5$65RNd[/cDK3ăU"uNKS+:yt6hX7QsVR^Hwi0*ofdx$#(%aMomAOdLaViO9H.vJ(7+C]4Vg9SsNrD9WăU"kLYz+g4/&_1(*_&4tr:i4%_ANMzQU*R<#[oAC$j3b2sQ2MiidDTIKJSxv8nfV^EăU"UGc/+]5/98z6GqF73m#z:_+nd$NLyc^_AOp;,ek#F94$c*.>d_cl\E2frBh$xtwăU"5imlbL^nPv)=.Zvv*D:#nkH*7b;g:%+#q+G%09;]Q[DB)LL)Rpyr8Cz;IS+Vk<)ăU"ZQT0+oS%dvfLdN*\)RIq6VNn6\[dcUdax.HsT:c:IOSmI$wu9[unfTXdzbGi9VLăU"0#KGSfK/E4:O\Y,LqMr['uSo7;d*;R'0?jg#T.r?d,:'SDt7veM<YJ'S<LxPA,(ăU"wONYa((dB;kU(.QrF7oP.,c+HEMWLl%Dzx?,M$xeGY-%qBA[4Y2jLvAnSC%\Kt&ăU"iR]1qg][PL7;A2:U*ZbL\F>tR*Rl/<T&d=.nt8Ia/ci6/)#:),ZGvTLfWhn3Iu+ăU"c#St.kf#t^wonlP0>xZsd2v/ZX'c,m9<fMJU-#hqM5mub9Rt:2&(c>ws]$6A(C%ăU"BshJ#P?7dz1-bHl3#Id;U6cW2:Z9oM^eSjm%92=N)j.$BEEhr$QEByh/xYqK)SzăU"zskP>zoZKcpK*YVx%/2o(#uTrra]vgN'q-4*AB\^(jg^+(2D'X[?t=reQZ'Tdv.ăU"5_wc)ZnRelNYx+r?D39^L^u+)1Lk2,fNSgRItwjEO%o?V?4-FYHecuRtC5Q.47săU"8u53dw*RB(JSrS'GGyPFnbOLXhq)Su?Gw8tyE'-B*BgPN8i$>(G,VkZoXZ>Zo1NăU"ny\c]>5=^8iILYCb87)h)Jn<K1Z'P(mE9c.O5-1cc$kn2-b*T91lVI-REufM1N9ăU"o-TFS70s^a?fP,_fwA0hu,>ooZ>>Cvs)qd(/vsmIi7)i(*kJ*Fs:1'8,<#A5mGAăU"bJXU[\K:pnct4&Wp4M;<,87D=4vZnY#.WwtvPp%>XW(jOJJ_n\[4Y5YvC+Vuy.6ăU"\F\#eNb(nlVNUtoD0uV(nWtPe=cDp5MFPR^:9\o3*LpH4iZ_T'DVl0Q^kD0A[:]ăU"d%BbD%a_vsw=fZ:EkBwgH+Y8k35cNL+,l*MBe*08m*Nn4rQ/k[JQc#6g1Z[1*)DăU"JXY#-8cF+3cPT9(*7aE6&--Iy,w:rl^acou2)\^CdCl(<[kz-IDWwQ.KSJgp>NpăU"<Lz_ps&wqY8bt'gVPtDL7((u.pDsApskZ$mFL<?=t.V=a,#kkhb8Xg^-I6.:bnCăU"hd>eZ5B2rI69uqqj\D6TKo9I*[j:NT:obXr:1(ELC,qga-Z)3a6yRB>NYCY^&*SăU"bCLA:?6.Ngend4ASwV,FvDZmFCH]%2=^QCPNU1y\H9Ku]mTtDlDDN%Z&&.q0#pKăU"GZ-Xn2g*587]wCEe(=4xqN7[#Q5sjVVNt[0tlo<pBBKx4;qOC>89AT8U_UK2hhEăU"NH23(>h-6RmvP3J*=52xyIuqTbpPgx2t6.hxR=JU1#gLKS[%9LZL2dXFdRM[d&jăU"Sc5>:%2*%3X.s.3nVhoL0ZJgUCvP.R<otkYmsmE#L3j7^aHooL5kH>-8iJBnCS'ăU"An)hAZ8ZWq=5+M*>k,KqU)hQZ)([R$J1(.,5i_^:tQMF:Hw2l,%-IDbIW_/Q>b2ăU"w):moOx_L#q5%:rg.&snW%:g=<,vv9w+vFZ1onPlV]Qw,%LQ[kLD[P;jscfBrl]ăU"\;Ny3VcOPcnAq:=ANM-]b]0qVWgy^dP-)3e954)r6D%LEUW+8<w\fIRX9B%=GI]ăU"Ge#DN7VyXT>B0Zq;9e3Kh1qlum#ent1&>9U[9)4Q1MgJNb6Ue4Hu(9e)EaJ&8zLăU"\TDw9%hLDuPOaMOS&Lt<I#S&rLi<Ml.<.0Z[_IQq3p?,G+]?OqXOq[0V>8<uIO]ăU"S.r='(9bM^fNoP-'$m;;A(g44iRQKt2t0u^))HX8/b+Lv/zd<.?igjW9kNr215%ăU"VEl.kiGVW(/(o2PYv'vD?_E,VonL'E&nauF1b&0\KImdaj5-^n'XY9\:q:G\6gVăU"UY:I9l?H%\3f^#cU6CqZ.RsLG_LBN*4Z_=qXX8\\6HGIfh?QtLPS]4pA#7%0m.yăU"p^57tteWuDuTm<PW/bOfntt[8V><OL=v]d5)0:S\\wY[=wP/lxt62#U^N,#CMvrăU"Tfh&Di%#;%s1nc*\Ux\7;bnafSG;DNNSCyChE89ipac[HN*>>UsG%Zn2o\$*.)VăU"2qngW<*[G(U#Hg7dN1nA#_OPIXOeteT>.O&S+MP2a66A#f/YhruUd_tSvZ4L5:FăU"rGXM$MnfwpZ]NhB1&B=56?&bZ.?rd<8Yh5*(A-C?iQ.lBYl_)CRWz;;Gs8;k0C'ăU"Ua#ZANU/E3HtdbWRMUzjMPIir'^%NQ#u,XV7eNsNo5X8AJQp*FyMpp0[\D(VuP[ăU",cA%RIqs1zj]c#PNAlcY;4x%P5j,sR.;(RHKaCK)kvL9x5%Xl=XpI6#Bs3<+'n+ăU"p9zYPSSG\AJ<B$sK#1Xx:QgJ3r&jc4=h5LtB9uFIjDnzSjUZP4JmzsS2o&*sPM(ăU"9^.k1Md/laDqY)1s5H]+e:7QC--qvfT^qLG#cQ4-?0$PsL/:f]MYbmSyn]Ytdw[ăU"mG5pRldBFoYLuB;($^w$I:]N7E\1>;:71O<koulrT(;QAto?5-^C09)\od.u$9GăU"BdJXk&'?VZ=9%>2-&jO;p.wqY*e-du6C,RedpmOen\?a0<.H_aKrearE09?XJ(.ăU"hf;:#0&CHHY(aGKpaV[baCj%%<=+d1momC=KCrsc\vQt6\HkPn=Rn$Ye%)Uqo99ăU"4q$<h4'QA<Po1;soY=Cq/1w:f+VnSlsfrFhJy%>+?&sbtA[Ge'2*-]%8J(NbUk-ăU"b*CCb#&5>U_#^<#$N>?\M2GxsnME-kJ=:mswOM\bvzD*B1_==:onNMX03UDJ4MeăU"l(6lpxcBxXlQpTr-h(dB7</Pu=^FaXEG*;(R]Q-'*EL=QA>S#VI0ShmjUKgkZ^TăU"IRzrST>,cotWb,Qh.G03f<>USz%9ysY>?ENSE#ube&r#IW-'L:IA<HYj\0+(&n/ăU"XQjsaHtti776OlW$ZrTkJ?guhBtp>HXp<rOGI8d4DAjSqK(oVl/K[WkX:vF3ezlăU"#=R<r\v?OoF8N_/cuM94Rua%z78gr9gfBU-#X6HUo$:2(W&*,d'G(aP,AgZ>_*LăU"DB1QOV8WX<ed_r9FF*%54u:/55UU\1*S'U%FkoW5Lup\d8c;CLX/sI),JZ1ZoE;ăU"8K*I6dL+\X:qNYlPZ?APL#L(>#U#xorfRG*_,$&WhcB8PFP'd3KAUw'xfx+SSWEăU"?pPKWLKX>uhpta8,&pq^tV1GJM_JO0AXfVbiDn-[4Y\8p.*/e?*AMtDj%wF#fiiăU"y+KArsY2^HGgE+ut]4H_\b4ci6&*V3s)$9;lSjKJ(>.%tc+^X.iTdb,Qe8>+K+,ăU"$P&hRFH=&$\9^G:t^m'37?J3DfT5'\>,xrih1Z_8DttJH5#h^/mEERVS:6IJ<./ăU"c<2>O<+t=[ad?<N*'XM(-n-[ps=TCp(r+cV:7To$J9Zvi8c=Hrt4ViHvZ&gKSHPăU"T=fS9*ntRTrX4M-?B5f_74B1Y6>hxHjJ1>;_&Y<JYB?qhAY93&He:zg1C+2-e5/ăU"DS959^[\J?9swb%asFR.7'U%-o%L*u?ipIt(WwW>-jy_S;(=1J3/TKt<//.POH[ăU"cOx)y90n+If,K[pTi')w*:gcK7LPmBPL.M80\=-S4WN5L9>7BiRbr;on:4FWQMlăU"blHKvnZ7SOSgqe;uZhxvsGaoDBcpE#fewaD;UE8-)465JE5-HM[I&SL^,'Ou7yQăU"qM\O/Dn]OMMd3sSX+g3_lxnl;Ti$9JzV^7=:06l_eIo)68p2U#h)SEl3]*t<\5\ăU"S9s[+Ao%EnQ/bfP2>+z>e0.MTU*M'exHqqd8_aI=Lk+R^9bjs'X<RR]q=F9J6E8ăU"H1+VP_eJDplGA#HWnnEu,0u,1&sCZRq7uLjtbM-ib:,\M11xVAtFBN>5U5H&7;oăU"wHwWc'er,VmLdZiP9^#OQqQI&#MSkA#96E)54o0YI'Mg^>&e9x:)f'QuhM,8^pMăU"eEOL$.tzf70qCyo?Zld_3g,B6]MI&ZF68UVi5%r?IDqS8OQuG)3.X.9O\Lxoot-ăU"pu,,S4/u.^3-lULg=UIAfCi%W)mg,Iz(?^Pq*8P_w2t^)T,hkErnMj9b6INS[G#ăU"DOn[ijkNJP*&,wJxHJqItZ0c:v4JU\Uciv,;8*DN5UX7myr.&Xi7/I49m#R<l96ăU"k0D[_fHe7KEPU2KKNWY6?bxIQNhBnKksna#r.D&1Z^j?wFFEn#DM$IeSBvkoziRăU"wo6X/0$cG,9RYuhgTbEm$$lW'TxLm%gwshZJ\fh67S?366b3A-A3K>-g-#RrlLLăU"n/4om98YgV#-E8xI6NqQZGW7rW2fTE)%yaLftZx;[<Zz18'n1eGpuu0+tsrK'o(ăU"<Z+Wr)99/3Y*jn?'ZFUv(P[gH_t5(-tjIRA>[Ph,;lo2ZAb\nbS6DN+W-Qq*y>2ăU"nnpm6a^fT\BThlWlBN=TMYZW.LZhhRznjr\8yPAF(/No2XWLihBuS%<X9;Tb7Q^ăU"$ZvmwRudP(hXZ/0n-:(vd[/lTi?ltjNpQqh<rh,bV',[ZJ=ELSrsq84PEbwLO8jăU"4&+ak^pGo+Kx#T_qQ4,JJY^hiV'/f)m3l8vuq_QoOh+lOip%)7kltQ?LN4jTNHOăU"01uoQ3VLN<uqV>>k%Pa/s$b?kj(f-B)Y/K2UrIbEj):?'lfD<-W4S3yg^)w*PowăU"eT45lt#[e0<v77Gl:pPI0sB/Duop&u7/cWdb0m3wcwt&H'8IeBx,rl:[J8=lb3răU"51s/,M.r?8nwXX?q(7n+Rv^Q7[wx'WHUVWkSQ;q*iq*E$t]Rj<tp;\0vDa'5c0ZăU":j'YqN<$<L&c:Dfna=qVuc&^sBK_MtRf;]94JFTK^J]./WtZ;p1-+Nb3KONH]2.ăU"c[&?=GM^ZuYbz?4_ZluJ#OoMa,Mf]aiA?jTt^Us?8YKin2WFD);WQE=1#37lEI+ăU",KwYWWSBdw5vVFe>R(0Y.O3earRgmo:viJjhWuTT=+:7cpPCcdtjeU,#.ZcF3KJăU"xU#xj%g8Bb-]-HD<2[wdy]ihp$7eMpzH.wNSTOsbJ)sllpQ)_pkVB.N'aCkh(EnăU"F<IQ&QP3&lJP9hG_qOGSO43.i#Ji=T6\2+Y.6;6re)PuMKW:kSK7cQd2IQ_QMcpăU"hSf=xPUjLRUjs:fYsx$JJtP'%ISKF[EH,^Hl?WXXfP-d')8AQnS*6G&?rZ,t'u&ăU"<fh[9d_l#H\?U-3mpaNmjP/s0Z-UA;AFON4ukok$b36F$O;3a2oFbMvZiIjb-t(ăU"e1#d9eNmEY4WhQ:ZIS&epEPX^^_icohD)eHH=:e\md51h4<I&%ci7d=jfBA)$$<ăU"hRafqCTnE88<_n+MVq,WW6C0neKV]7X7?C33]lO>4#BNLAhoXM7s0.E7aB^7C<răU"1xSuN$yy<(-:&rMOMqOJ-1eRMe)eek-8G6kF^6K#O:0wCIFLLiJ$jK^\WR+=z61ăU"-\(AA]81E)?fnOPmote(*c,LVfjSE[=3\U\xV)zx[P1S1EA$J]ZmZKp''EB>NahăU"Zfs1CRT4P%%'Xr3H0=<ou40AF<ED;5Rmj0B5c_:M7$P2yJ5Pt#jeKs*V68X%.jzăU"e.zWI\&_\XjZH>g[v-6Gk_6^I9?VL-'*X:RGfTe]fuDg:r/flAKRyU=CQ=2vt:PăU"6ptx4Pp0'YMq-^TOn6l$]9513W9F_0%-&;c>'bgN1WEN:>NlKbgmhuz22K*6cw*ăU"M^wjiHqF?3Q(-k0jwv#0(UG]-xYN%.9S;aGN-'L95vqoM6[mtl7$<*e4X2bUb0$ăU".9XR6,,;n+hFjI2ce/,8Qhg7SEVFw535Rc^drk#ea&w.E\<1jrgQ.TLS[CeJ^3JăU"^P?Ws&P.6eV:a487'671BiIjw088kJ*od*:V0)pW&EF_S7.Q;\2Slmquh'mCqG-ăU"Dl[y(uinPnG*Nj;WP;l5PpP.0QUH;s#-O'3,vw;)p058)KibpRKmNIt+1P<aa(1ăU"Bh=VjY?5q)]Ynf%kv_J'[d-Daq'>FTmZ>Nr^pBLCI+_:6#e-,)6:[]g]NZm6]AdăU"uT.GfHfHR_OYCCpjM.9Ei?RCm=>UWsT=(VBI93=tbWb-&JPwMPS25JB*][ANKe:ăU":2jXDRi3^c<punONPd<r<1L5<y%wO<zT-Oi,fLwh;r?n1W8Q-h4:OA]&7&i_H'eăU"52(bQp<gFkR#V/%c*+qrUU<=mQ\qD,_G*&6NQGIjZhCR]JvpX&Y.3>iOa'%6g%iăU"Ss=0h-\;20\4q[(Y,T5UnRr]06TxkxB\-6TOQ[([>lLSTO-tF27=G1Zue'&n&y6ăU")***J+gKO-cyZaUd;Zb^08][t;0#GV&Kaf-F>4l/BF)x%\gA*aDifRCxS9eDRyoăU"aC?:t\On,aumP\,65S>i%Mr2Ms\(FDcY%DEQ[BB./Z.<so]oa+lXlTpQ'MaE\]7ăU"T>^6o/J.,,?8X;,GVM%]qjVn2f'uxB[:#+fJ(Ymgx^f%zv5BNn\F\F,LI2m==\%ăU"z&;+DNWW8kvPwohjI$fnHCWH$pppu/*,WZ0g1^'C5p#6/o)Y(HM?ZiP7H_8'fBRăU"eLh1>Sb6-PNm>][S;p'zU0m7:XcM/,bT9*Q)<1LQ*(7$%NkWZD/v_+&Rup/fp:-ăU"^U-NcNf?9=:U&FOY97e2he10O&FDf;I^J%6D8]w=&->KFt7D*7D:0x=-'+[iqYUăU"2plj#u]gXbQPjoZD?L9r-e;u-.ZYEeQ4XX-_<]JI6)/&)fMlF[gAdl49A<DW<f-ăU"Np,c+P/ZMUVu-UhfRYkI1t8.E+GvVGu6X_h(AAM\y,fTkuVT^#zjk]3412n,35SăU"G5d[cUG1\8MvV-csT,%&5g>%P[^(mFi-'An<iINvW'Q.osld_n0YkQ.&J7Bw,VoăU"3ids(ALqQ5'E7hEGh*AUfZxXI'P+]2#:p[Eqs8Ib>-Pj=[q#g4fAA;S6/sR5TRbăU"?1<YfRk(svpxK1.%7:xBkT=>WieIx[Nn]+&g?/06bEl+7]VO^R0hk2vMD#0Vy[0ăU"k(qq_PX-T.RwpxaAWjv#36ewgbZjTdo*+TIYb[GAk\zGagVjLKG-]'L]-AYSnztăU"w^x)y<[abe<;zuxUeHq:RrxGp6q_^#I)u3i0P$uLh<X&Ifb$]a*%;r5L_:p^sEWăU";JuZBS:R'jE[]>o-p$8uxwpY%]UE#R3-B)pHsN)W5KeC6c:qdcEG&7ou>1WBk'LăU"S.2gY3jp.mk>*^5$Dh2DWw]UNqOy?GT2BRH,DxPO/#H?(Q.;yO]Fv>;&^^.CMFsăU"tW75jQSB4>,YF5-rPcWczq?2Jx'R\qQ$&Ng_fA=JS#%p-jF051+FYFC;*p]Kvw+ăU"V*h,_?XsLhC0RaTd%,+$c/4o[&KSkSHNpC0Y&]u/3_c;#yW:G(h+T=_V#Ca_L\măU"+7s,%C1P[uvL2#.Sa5+pab0N[%m]?A.J]IbLB;U'<=-9)29?4Y6%^\Pm.%uXyA/ăU"1w?_MuMBEieEOnHEd(cGB\$(cd,EMrf)sI**xJ>3.TPH.Zo\c16xKK*V]>-?t2OăU"3vjOvDy7WO%B9#wKBO(lj)dQ:+_li)*NA/DKxSw3Oa$nO.HG5U$CS4brf2L:_]OăU"<oP.GFoc#8iu+'r?^d=cw:61>;n_(5wJc;n&A:bjb&$IOBhI$C.O<gM&n41Z2StăU"Rx=m_b$;;(='fOHj<d&N.p[Ps+kGG#<Et((,5YFW)WOU8x>]5JfMT=E1:5x5W&NăU"iOHrgkD/kmmrhk4xc>s^rri9Vw&b,p'k^[/*g74Pot^jT.&n:1o;?skJt7q5YDOăU"8>(eo**UA.l3m%JY:b%'3PmUZvtPrNz,u<&w\*2<QHKHtN1I:<wH%(3Mh_h5P.,ăU";oZ^E.dEgn)(WSiO&OJt6tYpPPNS#pZ\6BRldcQ-])f09p_5wnNu53\Wwy4/30hăU"cn#<OALEeRFMm?#+]o_+n[i_?WX<(KmJIoFU7dujQF_fhVB&[J7NNUNMBK$#xTCăU"6S\m*Wph6CTZBsKqij==sj<4&I\;0sVmwBQQBW[^e(lSiIbmE)\pVNKQDs)2q)$ăU"67[#[S]ix6>Qat5k&$2sQ:3UYQJM-)/ucEaGcpc'7/v]d%C6OJYCJhRf4Jh:]sSăU"0C;\QE;5[P<3J*'\Xe,v1AgeNFK$WNxQuQ(8]=OoJJ+6#El5mW)ms6vNW#WS_VqăU"#uiwTdj/E]C()3;XfIU[<(zBcT4nU:SMlX\c3K[EeMAra':qKZ%JZ,,RWa5^VXsăU"vLsYOPOKC/ZdG[wu#mx%HYPVORD-IJxsF)LLc6:YXm1f_i9f*J/cuB0pLf5Nr5XăU".usP).K8U+g6T,4>g4-)*ui(Lk*U'.hoYD/uESxL%i>wWpthT.Kl6VR.ZY8b\/oăU"dJQUWeghGg<ghOV*&b3KIE;xW+?96ix8Q&B)>x:3z1l?xKtUC.qiVB3**Y#HoolăU"fK5och9Hc\7iYD]Tx#\?\FBqTg\BdaDotU+MjGFu?WX/SIkr.=kOZ<5P5)8D\0qăU"?p&m7I_9t'+Z.&yW?-oepA-RXs/D+,b'=u_*Bg9U5h=h7.sK0_X3WY8(5a;4hyOăU"yCs'81/FDCxI,cX6eKn&?s-$.t02g0O)_yw,XsHf9*5q;_4Ro0.\%k<9$S+4Z=QăU"*4?G'1%E&WYJ7)tVNmrPgSjxOhRt]X\i8DqB,3FLN4^']im(xTrI_YpE+E^5/c7ăU"(A?-,2WFK-8)S0w$-f.e:8lNCZ\30f6en&W1D#1__GPFGD'54JFEJ-2<U=90J?UăU"]VS.0Dke>9_X9Wrf[[5T0'zP$SrLf?jKiJ8u\2f5OwZa3<OuUhE9i_IU:/Fag]>ăU"I33xU-XTxISsk:^0[C8'D3=])K9=t'f0a7>iZpm:bTa*CpCs(\g1bO9Ws8Uo)fpăU"T('RWddbneGZml?:h7kUQ:iCTAEkC47VOe_v^T9t$OJ%z+b'2]76\7s:[5lFydNăU"</AiX?ZF5CA^eVqRIR_*.<K^M',lU4NII/226jx,<(50nlRd$WoV/i*J+>k2NyBăU"[^VU+N/'r3V,\r5T^on\;'*yO&S:];Ng1pZpk&n^=t$pnLXgK&3eQ>b*%G*X.9SăU"FqMb7[*IbIXxe?%f6w[,0J1eZ/#.no%/cF(qH[>&KPaX[QjDM0d_bs%1#IoX_kRăU"Jf&/,^McIR47Ky6B6'-g\'M,*BCF3kZ#<0(NPo+yS>fX)Bu?,6b_OV9-6?U<WI,ăU"<8Ffu=?=%:Y.]0EwSCEkv;ZGfpqq=3:#UyS%yJTDGTmsYAeL4Vjvd'x7*SR,;e0ăU"BIYV:5Y.lkgg)jpsr40s>V6Aim_g9]oz&72$y/z;?3=e8gf#j/UgafSi%qq^+ihăU"Vp%V[qu6klUGo-<)p.g:&0.:&c=8#94[tTjB7'wa9(cYAbg+jH:4L;R5]#EuC0ZăU"?Q)7'Op6I/8,c0-]3/&(yw&rm*ZFD^C7U61Ss97UHWiS)gA?/S-*fQV%YB-<RfiăU"ft&/P2<Nn[P5g((D?rz(dwsI(tTFp<HFaQ52J69[5b:S2$?PxZ#RmD9m'PQ-0xHăU"k*>Ou$-0+\z[e$Z&Z.U]qcI?ww+:0c09)tSBOF>('w7%?nJkE_qI+>BX]%kzG.*ăU"X097X1uc[lJL_r#VJUwL&7U-bS#>.,0Ti5Eu*<,^.f\AL&t<+HmjSY^ET5eq%&PăU"E0D>O-g*57D<a0LUC1#SBrw_k#8S:?BHHQygX&YU<l8by*?0?V/sPV7t]#<%i#(ăU"?)jc<0'9$)vL>G<O>z*2$kgX2#6]8=\-EnT>[=>\fQy+=rVG=i%KU+ln\(7G%YAăU"D-'U''ikFy[^Y];'-Re%h**<m8GFl1d%FPq:Pu<BsoVPZ#z&?L+T6lK[=quSPHBăU"k3/yM9Yb/UuEdezQmjy'\',pC]-lM\cAdl:x3jp.lUtWS9C)hwIG2cG736FGkE8ăU"-bM*>)-LY<0AT$ET43=WZ-DLRT_EV5U/9US-6G24ag%EOaN+R(K.%\,,4xpujD#ăU"+9]/r428D<bGO5,0[4tWv,sanf,xskzJa1O90O1Wv]iR<ahF*<YKEtc'\-U+)WnăU"Q;&Jv3fi,zwgh<$oR%8,+O]U(Mks<fS;+FmSE=%T:EIK5UO<&cfOW=iI&A^2l2uăU"#/RF?)xImbA4Ek0.iEJr:FZd.Hc^?N5_IK74F(;K<<WZlEU9$<sE+5nO:EX/U#IăU"+DK)ZKB4-wG=arK\%Yel&K,$L2H'jO0_'7*S,Rsf(Qg:[6cBM%gEJq+o%W.5-:%ăU"+ee=6.0%p):*RA%4Rxnj$A&9.pN;9(cTvz)&pXdP2:b$d85<)_O<kMGON=c/hy?ăU"#DY;TB*I2W/HTco/.FFkVpR]5-EFoJU?Q#ryeon$d#\\OKPKOfp%^\phX+56.jwăU"Ly>u4pg6D'QGrlu2]:jMET%/JVa)Wm9aePv;P4a)KLm[<z++(O*->j6YA;>bdAuăEND SUBăSUB VAăU"ACoio)S(x#GlOhD#5)3]g&&SE,eVX_F1Uy-]j=Ug2/b8kVprI,b%qOT'B-AI&=săU"WL)=Wy1E2f+DHU[/r[oBiI]YoqT25-U+o$=U)CkfHykKL_.o1O*S1bD[9UnD=?făU"E;O-U%fu)t$PcSth+U#.:7CCPpmCL*B;ANaA?uPnA8_sdV<fC&3WHQnU=Ewh+tIăU"%\A]W+[n#-xOv[Y1Gu6Lypc'.l__akq^_?f$.W*?r#2Ef+(X004PppKQdSoeBRaăU"j77#^2ZGmKULQi[3[Z&hWT*ji?pU+q'Rs?q/0tGWG.pXx<1<)<.'+[E-#ArNB/ZăU"J/F5#l3QGUVWO3-MY.+p.zIdy.ilRK2XWo$C#NVpk3;7VS'F7Q6W&t,p_PF2W(LăU"GL20o_dA2>bVs6f4OUd/Gr\JE-BoEE1Y5hLDg*wqJ=(fqhRe,HK)_LX3+Gt,kR4ăU"<O)z7izuMDPYUUBE_7S2^ol60483*(LG<HIf8o<<#Ri.Y$c2'7W)?\A6F:V0q*\ăU"j(IKXX4ujf1U.6Ypsf&H8Y;LXa#Af1P2Ldq*/#E/]2S,sbfUy+jmGF'NjrvD)u(ăU"iP+AF[8M)#Lncb,x9u6P2>]:[FIAZ_C+5'\RIeQ[-Q1o=uih;TRUHR1MEQ;Eu>$ăU"Io&sW'&RM[;;o$J0:CIZ_^:0/NjR$+Xuf?b\/)7u8&.3.P1A'><eSx^=8-)$,pnăU"$^3jr3>+Nu-831\K&rIhv/n$dnBP?C,+0+.$0I3Fxwid;zwA=8YW;j)76YDBj$6ăU"FYuoCC3^=[uZCamwb3vZ9_eLGSXtI^:Beu7UWue<GltUBMbaC=:EKf2BBoNhpvrăU"isJYqA&Av/tKqt3jY#sBW*_#5t'i,Q)(j\4^ndda^e;GYRd$gwij>F-,Z'&&WV7ăU"q9G.[Xz%-;:WgfJmTQ)4Gfs7Zg4\\1eajNOv$Ar=_kGKI-mwC&;$XS:';i0eab]ăU"rItNS/g5YF_EPk#U:/s<,ilOmK<.s?7Xm$$7gJ?bs/X<1s?L/U7a?lFbOC%w,vkăU"lG9Z_?Zl^NVgqRR\\H\ueMAO6F4B;IJ518mb)eTCR#RLk8w9V-7$'%.(e5ws:5%ăU"yY8vpZM&'/%HMkF+P30+%jmy2N*iR(fP8BZ_\;EGaAME*)GLH^>o\;l\*b*</b*ăU"c7'-GEa7bwJ(GQL?loFwUXjIDE4$f5'p\7IM/wk<I)oXxoAPER5I:B2_=<S>O3&ăU"h;'1l)wuV;=J<&iG>$5*&dG1dL[D$2T,pJPD=^oDb^.FC&rWSo]:q#igtZ:%A>LăU"6-#jhTuo(ireBL-jDEYi,vN]+TC<6=l-N;?j\(hD4F%r&45O^P+NH7frdn:dULoăU"7_^kQ+]N1lg*MaM7J,CXk<1/IIu,BFFA.iqgH8K63rUY%*rbfE'<^<y_v71W56;ăU"Bz2/A[F)\+o%N:?AmF6[WJzKs[<wvG90ePmvr+3JIz(\6Ww3AMWI/HuV;cB\VLcăU"b-:rnP7i*i6L0kbwJ8g9vRz/IKRQ'J%n04I9a^i<q12&WOKFOO[VrXO0fdl*MhMăU";P8ObM2q.<ZBk)X]X<K5SG01GG1^K+/Q-L[\rFnT#1^6>A+1AC1I\EX>;0oW&gRăU"kznDh%v?5k8y0lX$M/OeloAENWBENXF:^=.a2j*8(*F2?#[\H7&^f+Rh7H5i<#-ăU"jXlf[vsrtb?JAN91:6'DVFm9IC&Fv;,x#%h,/,q,+B\k25c1%)+X1pw4]aG^mBmăU"pirD#79:NPpumUlE'7MGUF+]&^5]pL9HN%$.*b03[wP1X+WME)[hME%vy%8'>VAăU"9$Jpma)cdlDK?64$bX?Aqmdh%OHs.kQ9'0LKQAXUAPy\[A5;myyf^dPuc;FI$MTăU"=6?''UM%ZHT##1_\j:(d:Xsgh:?ac'MF?sPkswPv(3W$d6vuMqI-o&X.q'J_I[QăU"6+owU;5wL]%m5Q9tB*d)h..xJF0J0dhSREH+:.Vy#Y4Pap>l.Y2jD#wJ?;WBXi)ăU"#dGY3el[&]po/5&k89i6CyOLCf8K-SrNDCib_&7KE.LmL]o9tO;K7[h&GPHi-1&ăU"N^uRD7QAv)^%tg.bkCxMOe9F:T&0pFDbDX3ocA9f;YBA1lQv8PA%W+uR4p[?n6dăU"T7).ArF^i2c%:dzO%:HfkmVpEMI<xH#d(wdK4,Aq)%XVp53rCRi;^'I>L-*JCihăU"9<Nhzq69($Cjr25q*4)m6A1BEG3+%ey6Q#g1NZ?,C)^^xXyC\CYsP7hkIibO*ceăU"tvveISzk/%pEQNeKm[<qOl)OR&SUW47$^<i;>*vVV(U:9I9qO%#0oAlb1KY)EFUăU"Rd[XhWkuG_fB9wZ/aLh<=8^.Tsrlm7GHGLa;.c7Uht1LIe/j-cZ-&Nq0y#tX[M0ăU")rcdKu7##.'$7bRf&t[E8vtoTMve+5y?Sk1f[)w[-&a5]Ifk)$<ezwd*e-,>;^%ăU"077m-E>F,>iEChuM8W4b>Voz#pl&j;>%eb=-Lg^hg75P0/qcfZ(jDV<*-r2'6&kăU"#iibWU>4JfjGji;<N6AR2#u^z&0^D1j^B-ijhdpNBXQlb1^SpAiGH]Z+Z\p4gNEăU"hfP.2-.#JS\kRYJ.::iG6S8(r(3S;Tafu7mMfO<e3o^yCFzQ;W;q'ky[[#ue)8TăU"wOG[J/I%-24P9KlY9H0.x./RdA>ds2*^me4XRN6p_hU;l8;VPtL)G+s7LhYjyF+ăU"7$Ir'Yvij/a2v9TJ'n(\D?4Mm$qlul4LseMrR,:0Ahj^-%q*hs26dLkdu<xpKfIăU";1ZTgj2II+S<.2s(m:ZjB1Q2/j2ZAfmI6c\?JsNtN$NyvHcSS?o?r__?sSQk]rcăU"b_uU%/a8ql<fbe?>V+;58hFhb-&-*NEKv^z#0:mZC4i_v?I'#y4LvYH<PABny7HăU";:[3WJYnD%/2mng3f5BamKWUiNB8]QP7,j.:rrs<oL^xgsdRSfU.FN:mx*Z=0mXăU"V\(29C9:p\6Z<tilr;4K1_cZ&<c%DX(]-PRwKQCqe0C?&/TgVQN=q'GL&ARRUVgăU"rxARZ\j5LU$Mej:=M7h(c6.<aU-h7KjWO7NN]p7q^#BMq-woZkpdQDI)_YohzQlăU"Rc(J+aA^oH^hOm:f7Q0pseZ7k#AsM_C2%R#p66*M)15l^i^9GgTBFO$]b-\FopOăU"l[xI5dl,Gg]/>,7Iz1e8\)s?5../_./O4gadnsL4?v+&'%%wFd-\Y<oj:i7lnR8ăU".MI4JdoZCjPF,+_%E:=COg3+bslG[lYLwaO7Py&TQ61A4Ep^5[hJ+Zd?<=TWMSzăU"VN-]cuDXf?HTi6ZJe:3<PwDP_s3b<&:*Wu)2[kjkiR,+3dx7,$LKQ8T'hM7P0kMăU"+08'i,Nl/8pN-<;i7*.l6x+m6%O#qK-rA]Q]K$(RTt#\BtqD97]AD[GL-NO?,3UăU"e/c-)En9+Z+6HGtwO&>QLBHD1pt,]UFJp(y:<pVnTNITL4lp$EtLB+HLEvZ$nV^ăU"JOI>7Ii>$mw34^sRg7qqzNkRB:r*9\:t/8?]9dB?hi?oKq%u<[S.mG5sjD+n*nXăU"tFNTr>q,0*=%o&qOgcc\c$Y:t=VWv<\*$_b?RsEA=+Vsin_Rda)h]EmJ6#C;_H9ăU"^d,;+eQ1PQ5xIR*=W3#oIb6_=IQ:>#bv_^zaIlIistQ<GVj6H2wrPFpV&$pf]:hăU"<Nw8i$1+xuoYN?Ka]#7/t?z7Fga1/e6\q\^wG92ZO.kie$$^:q_7c,iO+$A_<:.ăU"*K,5_V#x*xBTQ'II>.Q^D\2A6aO5I-e<KExprFtf,<O%a$0390w2WNXo<C/a8>6ăU"GbqC_bj6hEHHr6%m#P*os7S$,+-[o(C3GA%H?_[AZh-uc5djIYAC>2CFFdW2I)#ăU"kD\9psr9psb6TQ6Z,+enu(x.tQJ1tL5vwd6%C\:Xbd0Z6)>my&i%+-lWQid9RZ/ăU"e)kB_AG.IsX=0gZmz%]0bjTi**r<N>=-GVoSBBM*-)oLghwWd\<Oel_6$5EdWLRăU"mlMw/_+]:AHN;lHG%Xj:bz<N>6ce+sW:N<J7;WxQ_JIf,0;E=?^\hKF[3\U[3K?ăU"Y#X3[Ul38HnQYsdnZXv[\uvus(PFW[*SO=L59M:st=xS\_?VM87Ri(]igJOSIetăU"-*o]h)FiA'S<Z2O-Ay>3)VC.%WRQ_\5aK?-XK2i9Vsdk\H<uKx-.tOeMxeNLsV3ăU"FGA]]BR%_D,*/Y=Xq6,g0;Jpv=PI\j4(1A4'vjt/(cc'mumC^jt#XNg)\\vD^aVăU"S%s.u73WwjP&3'+8dmJ?TxlpdNsH_,d['7>DDI\/7XOD%0QER0'h^?r7]CDCV[[ăU"8RMDgSG]kgNSvTX.Ww'''=OUJOXZ066L0d):zYRPj;rRRvES3Wu;UD$aop\?(%$ăU"dLk?F^l6'?_e7-XEoF4G-b\.fkUML>q/\EyA_Ym8a.^NQr6X;dY3&u%&//4F??8ăU"GKZ%8wbPlHqG<3=r\(HX?&TTh(YJHnc0=V.LnjuVoXdj5W=t?H4pCpaGnFe>dJmăU"V5CU/PwWoVtn>%^0%7E+o%P5EM9_SwgT4TYT/8*tbG&-i9SU67t2kN$KIGS?bMRăU"?qi,V-1R.Lr$IQHnB;&BitObAm8F60<KnxiH8MQ?f8(3k^%>[)W'hU%4H[;eePhăU"cDu+t%&AB7PSetSud/&=tK1+hs/(\pa^A9,GRXcZsr?rl\uwhUOk#lfg$FgVCFxăU"4YrtG.XDuL&s4'8/c;lP(6x#RTYOY?68>kZmB?Np4Z&OHiAc[f#&6]^prag$G[WăU"edN:%S]:cjL([S&)L[f::[O;r*+xCXSklTVUDY)#K?Ha3AgQ'B$<hB#1L]oKlWBăU"YeWWYH$r*/68;^q4&\pnf5m0W^^bxj7X7aY<[f>tW/x[U$FU$kD#;(*Jg'MmPP\ăU"KR)OtcCIDd=7(]7==oi1Iwf:;=u\0'56tHLvTp$Fwm>v8wtYHiN>5Ml>G<(XX\năU"FcTQTq3adFb'W37pwC/1IC(vAZGmg3#+X3OgC'm&CSU80;c=p6YS'6],xj$[E+FăU"dOV)pM#'9Vf-X)+3FUj,UkULMN)QSS'r4n=QdNW1f;wQ?#Cg-OMQG'4k(c?/ESLăU"4iZjfwYGDk\AE9oF5mME999&d='n$YhzukksbKa0)8HuTu=$>nt=\<crT]=]i^NăU">]\#8.8,nb&i=z:%BDBDhlgGmG(0ep9hdqocwb0YWpvg\5z7O,N[3;P79x=0%)zăU"Vv%6h:jUAMDJ$I0%QIo%tqf6OQGOG^>?LVlmU-oSF/Kr8,W:m&_e)*9&:X7mLAfăU"STeE8TGgHp2qpE--ld7E1NENU13i0QqLZT1gAU[TH=71(VxlX'?6Tt_T>ZX%/trăU"6so905%Q9g'7/L&'X-.nG,]ZQMnN2#a,nHDhus)ZgN=jXXVX#,HtWZjjXHrTl?8ăU"vothNaN8il*7oa+ajcJNo(dX)^h*((d/D$gs_7szr,'CNieK\9e3k^\M/YF?S4YăU"uaI\MhhFas,:&aNB3c3fVW?,L0+PXS*&kIr.R(4I=CaS>HfOWNZh]VhR*H=qf$RăU"i9NmgY(^i1_61-;k].Q/08^ba>V(pA/$gY:ohLYz<c75lBs4Rdck7x8S5PGY$P,ăU"O#XUP]<#^&%m'(is[PJC+cs?:Uy8(eIOWk(-gs-VS#[OFtL<$a9r+7(6/MNVtC=ăU"CM9irqm5ylE2mcA>f\WMc(f?rK8bXiCL693n:[Wce;R&uMTp9IV/i)bT#Fa.=R+ăU"Lbk>#CEq1s1?Ef3iV-Y*G;y>65tnXOw<Qavd?-hxo*oXA[&,2[8rX/-TTBgBTg4ăU"BGIcg_?;p1hcvov&H^KVpATJ:#$j1:;UV].#y:-G<CmkOc^I(m5o[4>A7O,3oY=ăU"a6(*1)tPWXj#9>wZ)'_e_eGf]9Y(D4tw3'SZ%Gu7:Y=Bju;f8*tl_<1qi)WZ%/]ăU"^tcKQX.P;%M.mgi*'0Jd4+I3_m3wvE-.;4a5I'%B[1uR\ZN'.1A>#HtCQb-e?oSăU"\-[3e.-pfDzF\=?a\0QScPba]3(_\kcA_rNv&on?f5Y,W#9$1Y0[<I'Zer%=ZbwăU"):ZIVEbiQ)h%BX2A&B^Dmd#*vOLe/\*M(C&(Rf0Nme&)//e+d+Eh#/YDK-OABwwăU"j5k[Z2GiIwjr)Hq7n.<p(FLHN^ja[ICN3;x?Ma[K39GZ'Zqa&<TxV'F*C:5MaE]ăU"iB.G.-T*;)m?L_Z=6RoKYaPq;uEFw1P1dQhk2[u&b^bZ0j\hg-,joLVRTP1&tE#ăU";dBkn=yuaM_-/-,zok2&S2-;\l9dqX*WAAe[p[VBY_t7'5718X4fX_nj$eW-0/BăU"^l07Rk639S2dY*o#%C*Vute+_FgOWPuB*A4wEu\D^d?E84iq+2njU2Txkh+4IS4ăU"Hbs92xQQu?Rw#4%GRmOxvVXR#Fx4a45EZVj#_O_f/E51%A(/[V.fkC15/*%sR:DăU"*:_vvPoGRkEQY.jesv4;#5mZZbcwcR-,dAd1zw6RC6p+qj&2OmD*nC5OtqAe'klăU"d0<uY+A?R[9h]fr>_:g2t$NL/t4/L*r4';[esaLC/Qsa#3UsA3cl.B,7,2pa4-*ăU"ZOW4[5hfBXb9VO$YSb5i[/\Q,0Uhxh:/Udi%Tn[[i\fn.Z4WnJK-=yh8dP,$9/EăU"]5RuHa.?p:QGt;,7^E/X-/>=yDPSJr'+-\0m,n]9mD+H)h2SxVW+H]6c#Z)8_FqăU";wU&GLyRinbJOg'mA?^6BF*VE4#ON]-Z2i>*Z/]sN'#T9iYHdJa[bQ2nljNH47GăU"A7DHW_;28MLj))3>8>*',VNGRNHm#LN+Bo)9'gE'+CCA&jX:pa8,4g3oI?[IVwHăU"R2<Z&OUNUWjw\B:L-)%'y8]TFP)1sL1x2Hd;]lj,0=i:yUmcqaZgOwmkC8NXB5:ăU"BSCAb<s=is(11aEhBYVUm&ic0:'DA9Cr8W:[%=:9Lha[>acmI?-2JC#9aROfQl[ăU"DT^C_Nj*Ux=Peb[f706Rl5z,_Nte$H4sf^PgQX5XHoGJ2;/pT_<&)yF#T:VHj1tăU"K?ID3*J/)_rA\G(Z[?29Q/g0,(>,bWUeR#eENi1d0=(m#'I?FOIvnt8d=AIB3%&ăU"pxibIc;[E):OKVW^'xK6m_zma4z*vP3M_PgW#G;G[j$nF;(^FecTn%JBEqSv44^ăU"YK#-6*fM-kRx4Gf60^Ev6Gp$:]f#>L8GFuYul[-JqQ_NOWKYBZpPk/3^n__eb4)ăU"5qbCK+)?V;jLD?HLaSzi0c5eH,s=:[MCEq+[HK5NA\5Lez?^Y8hN?%NavE)^f[XăU".tiKPA3+aa7gRwc.I7(r8fvsbBUoa];;ip]fDPlk$)6g0e19Hz&dSJ#?A'd2?EnăU"7k2-?:>/T(O0t-Z?a'fX=&jueN=].1^BKYsO.C(_fu^Z>Un<J,/:tU<Yb7)(Ae%ăU"h.lJnfc(cQeF0\ImZZtV=$$ODH-UXB(p\RpY-97trXA*EEDAxEDy8^j,,/m-1w.ăU"iV<<tI1)95g%NPwZG_cC)Gn-YD_6L,xz'uf%ME&yAu67NfmStq_l+W7.$aosWw4ăU":w&[62E[xT,K>:.kZHkbF5v6^;bL]19-9V9YF7X]B='#G+''k*;w+7'8HB[6RR7ăU"R4*ozSpPT(*Z0PDgan<KGtVa/7S]skBRDce/_KB=iT^(rOOTY:MpWClU&v4Cau1ăU"g1hB&BkG91aNYo>XJ,cB[i93=aG%kDL3K/7J='W^uNPXz[0uq5NN,1/Z%3W9QBcăU"T>oYH7i4+o-9ZTQWYc7?/uOX\Bvwxbhug(NP-USk*]N:fMY+aF,H%\j(+N5M$vdăU"xl(RQq*hupsWLx+P),jFh>\;0-Ao:Lc+3i\\DrHzSuT/S^Sh<t>3EH>-(QEB?pmăU"yuits\69HYfHtg5k^>ZiqK^3W4.v..Yzqm(yBP;Mg)E%Q]&w&8Z(L\K:XVU-j]NăU"$\z)3P1W$sQkIa1i?Z%'+NWI%&lDMB,6J,eRTh%mksr?::&i+9f(:HOT8sdIi4.ăU"=ex()\%?(YBkQ58Uk+CU6wno:BhYW'95\5j^4Mu0i#B<:QNVU3iNCG[DlkJeNfiăU"H.Gz\NVZ8FMi:o/T4:'p'j#cE/Ic;2Tr.X.l9eLQr1IY4eTO4/Y8R54;7R76<5păU"%/1D'&qJ;OLWc4R9HU7W%9TqvO?[+6-C,jq,212rr2tr\#1V7ye0AUgVSjC();SăU"hZiHbOVOY#Xhc(66YthCsdeLXTA[bj+?sL;W$2Xn2bC#C>zI2U1A_#\O,1-\K*zăU"V/qkbnFc*U';/(6;Yuf7r?0^Pq<.,cXS:72z#fP91DT?7YAXa\[*;FrX^Z'FuPKăU"\j&>.53XBm^FlC'Osv)i)G]PrSre%qdn%4-#)q&\&goTJO]^,f+oCLFKJKOaC<KăU"HmfM(L?:2WQ%HpUVJwCeW[yce=(IlzEU(K[-D1)'2(M9n(H</D&$U\/#tWpg_5OăU"FI&RujG_Z/t.$Z<vPS/G?+JXNU6JyTAyl5c.Y=4q.mV*$v)6hvt;uLTjg(<*$#găU"mmp2P:*in3FAaQ=EXiy07+rY91);iriot<WljHn&KsaFI(y-R%CdTp74wu%K#s(ăU"<56j*Z-xc<-DoP4h*BG(wo4vFf+OaFPW\d[(-ODO&P:[jpW]#l'60=BE:U?enLOăU"'O:DY>B>(.O7TaG$yrq)u1>]Q1-]D9(^NZ?CsYNO=zDp>z:A*[1)K_ltY3]]>:$ăU"%uw*=->.N1G1bA*l(F%xo+a5pD;tc,gbgS$8qlYL<E^1.-45oENBy5MDD]TN>k$ăU"$3p&sub9#y*GJu=ts%[47s#8(,%3D)^t&x$>=m-eu?P\q\zKqNU:(;S+f%4rGjgăU"S/>aOIGjr<u#Y=jv^*HHjqy;)Y'r^Yvav8ghuWS:9tB7?<:;G'afd<MzVbK)u[băU"nN;67LDzDTAuj-AOOG8,pC5*[5rU7821Kff^TC$5NW<,d,G(cblICa,(m,Oen1hăU"o08lij4,%i4o_9.1KJRd*[Oq=gG=&F1xm(&;w&%Y++Wkn,\)6NQ'yZo8B88kUVPăU"lERy3^&'WIC0r[MPvCJ5^X1oq[w&O(-&:/C9)xR09ihAsFJjC2QRe[Q)T+1O8&măU"?/G_1=>kx(8'CxyqBPrN-4fNInn3oX?B2uC<Rj,u=1CFWEmVoSc0Wii*4E7'][UăU"CR;1qIvh7SxZ0nPAK+vE'47Dbd>jiBKVyQ3lP*i.pY$2uLYV;\=ob*>#Ax&KR)QăU"(9DUT&CO/#2%Gmk^Ht&:IWIb'91jcG':,.7FkNUoMrYj,c2:>3BFeZ%tT+&HceuăU"fZl;jJicF's[]1#K>l+n*RL;b(aMt]+]*P/S9/B_EvOfgmu6Nn-VrYt,jC%Fn$'ăU"5%LTIp'P#]>Y<:1-N*WR+\InbamL=C9KMYZ90GZ=>'5AUMf[,0WNLpC&(y[:g^%ăU"9V461^'5#GV:tt_5]i&\>1[><DXnEcXi<o'\-UM#O8+xxj720X1;sFdQ0/CAiLPăU"'_nT(%KUx]R=atj;vI<6=ajdS/$.OeeQae>Ito=o?4?Gc=Fs?T$xu/6RWS2.)^[ăU".[/,29(2#YR&+=',b#4vdB(rTQJw,rY7K('wc8;gr<6NYc=2*;[aEoqSQD9YUUHăU"ZNR(VDdUL%R*7NK'e?M0:G$1KcD8UHQSKj]b'bfTnvJL,Ru:m)Ti/9rU'coB\UCăU"lltiYOgI/spuysW/q0U-*S$Xh#Yk?(5GVSwh1)XClk5x8:rP^N*'d,XMRPEsoNhăU"H(t-63J?vRXc:(O//D^iB9#M(Ca9%uXzBcR)?^/9V>[TlA_U[SmK'aT##;nNpB^ăU"s;57dXA]Y>tV.]m^Sc^>]=ieBfY_,)SE4cqrB(jGf&kvSZ-*/;[jXP0:ge>/Y2iăU"C.D-rB.=)KC.6NSHVG,\UHuO_bE)KPLin+s\T?Ge6[Q[:'-BXwn-lV7jC4>A>OBăU"C28c)s8YbV#V(Dm,[XT5v*>CFM;M(UsnM=As[5[-b>_7<j;/Ob<44H>djQ>WfrBăU"=%qR#Gd5\e1%I],_gXYJ/L=NVmj*G[6XtUcGKq+N-rF\DugUrDZ?==F^8$U;>Z;ăU"O;q\k/-[QVpW:,F'nNvqg:qnut4JU6wCIdOrAnU:)T^J(Y_YRLb98L:ZO,v3c;(ăU"<S=9_7F)em<$kjFIA$2S4>WYia&Ys7eZdfpXHtiTkWAJ#Yg/tsumAsS$NgG&axoăU"/#uAr0#J#wE2r/5sAufGa&#5SG:J\pU3hMnAo><A*%ju1[8T2d,&t6tCK=Q.iE^ăU"4w2XgZ$yj[k9vkZn&(ZwOv7m(Z7h#Kk0*.\EG5C.S<]q6)550$%V45p]*e.Z,aMăU"A?Ep5bA<KaIdO>K&+Q<_+*Oe$hTzzB<JC6q_rKQtO\;/76j3(kkd*QY(Xj;m4bbăU"I9M\_B/a)VLAgcs(:./x>uL((]p/y9-km6IEl_OH)Ek0g?p:;f(/c%_fre4([<^ăU")=AxU*>4-;C3eC=sDcLu?gp48&]ZNWu5==X^quy)K]]5R:Lg]6j[alS=,\v'>:AăU"AXXL<r-#F=qtPMwt8n[wU(_Y7NLOJ0oVfuhSM,.PderZJ/%wP\;OH)&Tiiomjb1ăU"S0_na^QR$sUrh6v3AnE/]2?pIlh:)vOb+ONHD+H;r=E\?Ox1?V[P.r9DDwEibRxăU")HQ_lRrrqeeSNG**ic%cT=,9jLEUfT_.-<9qhOplFZq?S_xl^09uRa<Am48Pd7oăU"3*,)Pt7Q,WVkcrIn]U[-2AHh.aG)D=m31KKKN3X#-?:u\#Rn]'#k%[D=4W5d0>căU"^QXi%;j:9I)?KrZkaJ6enbqP2H2ql0SygHpI(.LBneuefY1G;aa,#1amn;c?_.qăU"IGT>[:WJjo.loJ*NEknsJu>N0I4?/Ccqbdbv%j-=jaOUq&+iU>k4Z&ElGE5M=,/ăU"_Akao%rjP2F\l_PRV6p&k%<+F).0La[P=][$GBqAkR/o/EKnN;U1pl>/eC0t*MuăU"M^JkA9sUm)\b7cJk_Av+Fqh3spMT##oY2Xk6Gj*f93'Ri?Gp_4liSeDf_3pR/e#ăU"1uPj'T\+g.+3bSdy:J6-r$F:jsJMv4)/O#:WigjRMs4-8Ny#^dHsg1^t>c*,JF=ăU"Z0mpVb#dzojfUorpF9PMJv>AT&eE)Z;mZ#beRes^2jWU-[O2St0mxc(_N5jNKD\ăU"NY?2IXM2Eep+*R[5#?;_bP=Qob#sq1U<77K8<'k:7;vtZ?Mg<Ea(kwe5l?]E*ChăU"6Bl8o)P3hkjWfifo(St$LU%,'G+,nezghYH8+6h5h*waP.Q&qvmpx<tL'?KqeWyăU"Hb?bEJR$Bs\r\IV-JT1SYI\_aPiwRbk0kB\tt2S--o[3wZwNtR5K>47h6%MH^qaăU"OjH36aAa<xI,ReFwQU,F:ySJN'xVyK*\5%KJ1*(Q,90JJ=p+k^h_20/*Y:k<Ud^ăU"uG=<LDjZbl_rR(6Bhn%jYuKdtv,RNHA4<E1Sxvr_#n-:\+KXC0-&<[qjdU^n;;EăU"k+%Rs),jwJ.h)3aNGYL;:fc7cQ)DnqZKcvxhabih?E*zG1?[-#6;GbASif'q$u0ăU"H--s?Pf8_W;?;X$^xfZD:8l&FLZ1m9c^OoDYu90cg_^]YP;$ty;<.LLF0pQkLbcăU"G3cVI-0$y%Rgf24)fz+;Cu=7D7ga8m/=B.A?k>cLnA[jU(fI;d6<hZgrJB6uq=*ăU"'YTeDK5]h?UC.%?4khz(xh0E1%SQPM[57o\l[#/5jg+vf7we9?.tkIvpAq42cmuăU"XCApsC+xo]Me)8rS7]S,zN/>j>huIJ8mgKONNy+k,xv:6[g(Apr;$Vok5>pHKBRăU"VMOC=$?E3qhI.RSfnM?pkJ7WCBg5rOeQeg8Jo$65)#55Z<l*NjbuF^ndcK^r<.PăU"EB$?78W>Tlu)xACJ8Fqn5&+tVXfwi202df8My)T:C+J$GK>>IJWX)TWg'KIAjD.ăU"lAa.TSzfI9khTaj(ISr9mm/p4:cDao2zzzq-s\srL07&)GRLZ6E,TkDBv>0./+uăU"#JOqx'3H5MxjXn-($Z*VW_aC93[(N<lA,esT<ne6M,Ud3YHmW\iUR4'IMi]b.KBăU"=2srIaq=7olNJv_D.5WRY?snNH^>uk\etwh16+Qds-=x--uZT'spFcbGwX_LBItăU".K\#,yZJw\xRr_G&3+6A.$TXG'N\(ED*49tj#Od73#_zV]%Tda1$B1<'UpzOc%2ăU"YuiUIKDeN8g$0QTo9Lr4-(\<qjwn:b;g;lcv>[c\#]gfT7\rAq&zd?n3U#L;8THăU"b8Gl$)^rdSSKCiH)HHfuAU:s]0ouOBF4P45mZQStjfHm/UwKjn)v>x)b$S#F+Y>ăU"mYeY5NBd[uU=dE\(,.L$$kpJ,h=$(Fc.6dxx$Tftl$aM1MeYOV8%$XL\66CW'udăU"qA6?6mm\50e4E+/LB)AQ-S</LX7C6c$'9dE$[0T.MS4*Y.4J=2B=v>&Oa'^se-MăU"GA4[0Mhsv6r_>7xdc\\w9pPfx$4]Gf17jk-tM9g:O2R1NMbdl0;BS&Sn&YVea_+ăU"lLMM9vw]OHZ5W:>Q29o:97&uuwk0)[lng?1?pJq9/ZZ*v'XsZV%'%0]o&\%[*:3ăU"E[:Go6aiZQ6ahn('rLijQ<jN+DZJ=F*ebGY<>BkQp.I]-$,O8n<-[x6BTJX,D4<ăU"u+ZUX2]gpz*Y\tOWDiGQD/0.g(KTw(L80o_]P*,%P>)49[-AS=P.npB8k[=d/BWăU"g<2&RPC6k[h_6gk4#'PfRGEjZm5[X%[AsKB<?bg?H=,JrpR#LcD(coukm#0Yv7[ăU"/Ods9dH6W.F%RJ<&HZ^1nW_5.aV^,+2_TS)<b.b?x#O#zt#Idxak*?V8G>IBCrNăU"oK*TKjjVNK-(jtlbmDMT%zomA)QaHDuQ7f081p1;YoGVR\+cpUZ))ohWG(B^eKJăEND SUBăSUB VBăU"snK[&%z[eynR%il2dDHi]_:<22B#3ioToeL.jOm+5T#\P9wVi:;ZlZucuti9gyQăU"n/lu\=WWBk7$W1kC#DNBjQL.T&_X6,?6*mb?R.E3V25YRz+cjWroQnn'<V&.JR)ăU".qM'J94OsF'hs+'s0PJ>nKR6>p\Pelk(;\T4+I=jt\8_E&H_re$'NC>#USmLTX^ăU"A/z:O:ih'w;25\/BYCD.s)r[wWk9.4<6n*/BE$>>]C)Am:N$nx[;MUYXWtSG?>$ăU"D^;uU:7ZruXU95%vto0i8OduE$cJ7aOG$/OlAI7Xz<8h9S2<)-w(M-f9,jib=kPăU"3L^3*;4zXquTX*RuQ=qx*PPossBg9(.#o:)QRX..1pXaM[AXG$^cK-#kVpT;eGlăU"2c'/kpHK2aS>N:_KLPU<>d?T09\Ug1TO>iMSH:ao=7XP.o<JOP&jRIjZ,U(:+BYăU"NDe$D?ph5PcbWGDBPZN8EaEsPsatA:.A;tNaDc&YhDACYm_T^_gSpr9J3Uv7^pjăU"t(Wnpx1ps%W796Qjgv0+)5+bE)Z<<ZDcb?3F&:nv6d+kVHYHq(R,GiuM9V=[DFXăU"+,N(vHa_'=AA;Ug;;]m9&gV/pVcQuoNNbib.L%25EdE]>uNHFI8>bD&Kh01,GO^ăU"h9d80#L>,M'>nrH60IQwqs>pa0tmun=$:U;j$lvroLL6n,3AfFe>;_Q(DACb[tUăU"6(jh)JmBKm-]eB&X-mc:$.qsu,3Dvb,SkhbmZC,OXwb&ipn/0$Ik(z)7coPoI*XăU"FJBCoSU-B^nNV_0dtxz^=+B8rG-6:)[6c7242h]LXVpI](YD[*F\NzT&P<7Y)[\ăU".ItdyCJ_GG3/Aq_aY*&SM2?zOpgWx'06Oq[I(gb?=F.bqQ58WIZjAYcJ+E0YamTăU";<Z'L4<tuHgT,iiYN;NH26>8E)Np^v=S[>QSu-Tk'lQn06VOk7(783e<5Tj^;KZăU"C<_<m:[?1)FEr(=3)SRR=U9kuV:$+yAzPAWbUR8F[0NjrN.AscZW6rZ$J]4d](MăU"B*H6Gs'm*db<.#Zfg?DhAZ,)ni(pV#TZ+PY>.6xPJX9m)[?)aKU+S]kf3g/E8?SăU"oz<7_CYlA'Mp+3eBuv_1Gi4+0rw[&Yu^wK6X2p,'Ae#G&vW5B?6Uj[sgZ&ZY9_RăU"'?C4/ZAj4<di#F^V\ASNg#>&^f/a(W]pZV.JiAqq?2Aff*L.A3#dLz\A[W.Yen0ăU"X,keTnHW'%SVG0+Ynpfh&3>0nfpNcpH/bL,AK][?o.?2]D=gV)SQq<ZKeHHMWmXăU"b7^l6WorPPK1^%F#wC&%Hf6V)m&CM<Ku_hdV$B>3*(GYl=FfbG:(3a6kU/6W&RCăU"A4V]^Xl[$1P[*S$+Pg;dM$\p[I5*a':i6J>Kc]hAF(mTTM?I4HloX;[<LAUYbaMăU"Dm7OUQQDHdh(5EYlH5LPROOQd7M?<\8BpSjGNS'FrWIAuXTto)+],'6rihPQv4[ăU"ECFIR*JO^46fX(lKEx3%Su^.iLsQqc[G\'nzKAQ8UM6^iq:kzL.s_K[a>do8tI#ăU"[Fq9u)hN(m/W]KL3Ja_3ch.3^tyK5J]=aJK>BO2?/?,]2.f0tgE>1>q'.;1[JgEăU"ltGIl)V1GQ0gA0$A]S_B2$az8ol5VU:cXLoO<3raUzV_mqB%m<l_0R$R2fU(#5QăU"MIm1hF#ILKii[ON5,%-J7A]PN&8^=r::=x52+RJrs<G>UOJdhxsfoYZ2>e?$Gx1ăU"SCi8)E9nzOw.vN7bJ_csZjvjsH8=oZ92A5R._S>s]6k3L>:<p(Jxi8jB+(>VrCrăU"T5PxSJ>>0l%6ef0tVI[?3s]ij\2rbeaH;*PAuu.O&euL:0,u'm3O?YkAX+893_[ăU"Un%_HRscsV08aH7<4>/dr/8JBZ4Q:$lE#s(hM'jx>a=Rr;PV*Z=M2+hTBtW#w+aăU")5IMNL<oWncCUs86iRg4YnpQd<<;*/4<Sdn^Qy+CqB<sY(L^EP2wsQ^3HWvT\C-ăU"lqK$)uu3U=wQ>Abwj7kHj>2T^]Ksz/vq;Z<&M&gyG)f-1OkYOG[Mb)nX/^GoYWPăU"r[]^%Psn+PcPm4[CACr.y3up\ckqQC2^ovE+gLr_dp#[WQ7&+>=Bms48,1_P,kBăU"YJGzx2N),_[1>[PWJ$H)rlrqpc;Ezp6k,UtQu\_'b1pE9mg+_\t95bP?J)CEzkVăU"J'Bm-xk?7ILjz#Wk^'jllsfC4*g1uIknGD21I3[RhPw12nvxCwHfvqKnLfBMGb-ăU":]q6mJo>S>nLGNfJ<xyq;tznK)=,Fp[kxK?;5ij.LYHekScbxS6PwpY+GYC:V,<ăU"K*?1vv*GxsFXkfU1X>dpD89PV6,VOr=Z;=#Gj2-L*J'^YO<JO3&)?VhihTrpkO3ăU"'Y0E2^ty0tafgJ)\O=^]l&4U&f.edk9,o_9U:<6Su9iuHX2pb;KF(IsKuT&^_E\ăU"'qbKZ1DC'NM;_?hH3#s$Dfq)UXJxd=4\-JfC]JM(1k66<g.MzPC-AmJq8AWe^=kăU"7>(^W4vMSFV6Tfoj*Y<E\M^E:c?M_hqPOX=9RD=^%F)j)V?[:KbS5%?LBxbK3(6ăU"FHM%yM/txPj.C(MN27-y:w?mM%wvi#N?LS&kXI,0ER_<<#OBLS[gQqc1i7%<+D*ăU"YD8i[M_jI+W'7T>_VVlMURXxLfu,VcQ\8e/<u]>i\4&A+mk?UCqI(Nys*'H+R[săU"Ii2/S*_jw,<l&^k=e.[uR/VpSm<:1AQspfH5d4q24,)A/pFTbnlKTp1)Ul8XJ=năU"/qh;Ccl)&u;J+w34?qr_H;E]bM_]Un*S')X;LAHJ:e8]A]ei_'s#FXB$.)37aj8ăU"xEv.EHD#iU((aW0R_=kGA862%%0LAa_0r'VV^N[^e*DqQ,'WW)nEj%b..NmQa9)ăU"?SUnOtb,)T9%cYOLVqz<^wcnlEH5B/SpeH-JMt].bE59-t3nqnFj*%yF.61^P='ăU"/Y[0t%2>%\i^DG[ih]U[%c'a]r&BuHaEbr6IjoYNNfM4gYQ.H%C.':E$mSkG;qoăU"qM[Rk&O3'WfutpCSl]e5x&%\DFjK+oQNF+jc,0$GRM?11qQgY$ilT:7M*f[nMmpăU"'1x+Q()[>a3%zO&X_SMlg#2JNQ4+i:t#jD1#h8vo*0>,86Rt(4i.zrFo;E^s^KrăU":cI]TiC1APBXK;tL4V::ga_68/nS[1^YjCfTId>P=#HJ6G7ZmOMoAbG(e<Omk37ăU"=y]L+W[hmn/YQhR6rUC)^\<,sX7p5v0fclpk#LHZI'&dvp6.Ai:CG>tG825,(_qăU"r3MTbpg0VZ)2&fRj[Z%s:TZ4F4u0,)L=Fk'FLKBV.e's$GOZwkeA%;8UYU-9S&9ăU"=Ca%WCHQp4U]R,tnCh8rjLDsk#e]\iCir:LL57efCo[vmEj9rGj/=Mr-rb>\_cQăU"9-Ai'Qf<t9DCyq:m2SVfWGfWq.B36h#o9sc&O+'5A$.x,ajR(wksaNp.;H^UsprăU"F3Z&mLHqU/ESmNCEO,N*%SN>w#B5uwNdp34My9iFaAPNm)<ug9tX6okk_(%]8bOăU"LF%2?lkm%7*c9j8&&gvo,q^AO4o:*q+z#hZ.RjGt/Vl.^ZRUP^pz$1f$/)Htm;wăU"J*\n(PBoqN*E\lgla.nrT3X$e[B$>F_v1T].?Il]gARPOf/$8,le?XL<mR,YKh<ăU"Jr/<Cgk5k.5x))nVH(cou,-4AC4[T+;Iod)O*rNfOn=Q4L;0eA(ylW>FLwEJs/FăU"4IL[R15Z+*XYbm_=IXYt>-3+bw%X=/xh%kS5SY>ai\l]OMAfFoJA(Dl0lM%u2^-ăU"jHc3YF>dm[#YtJug9gdAe^D#_t&2DOv6&fkoy-BA>Lrt)K/=QCfy%gSiA+)8H8păU"9;u0A*B\87.QjU::KuZ>E>.qUd7Zb#Oi]hQ_ua\a$q$yXGw&_9PqEqwl>N6E4k/ăU"2fNH:;eRMl:&K,p/zBBA(l).qM+)X/;8GCYV>O3%>OA4(mc=:,/)&z%8r#JFO'XăU"YK#:gHS9l+RQ#$Jbx.UD/WDch]r#lugYExr4Q>4eOtA%(oGqLBUS_/er)(v_SgmăU",:bCBh[6JU9/rcwl%9U-Z9Dbl#H19/tJq]m)r(687jmad-ofMTBbv^D'Ea&U]7jăU"B-iFrnr-ka\uF0>Z/H'>_z>:e7/l&xbN/H7=L=Kf0(:fl(Y.(Awr)>*H\[jqjz<ăU"sIK\R\K[KiQ6(A/Co(fgeJQ287I%j+nPT/xt35OiL;+leU^]Le=7<uC/M3EgSjwăU"Q\;dU1t'tR\F772)[2IaISgNg5Lk9,6FP4vs>2L33m=CjL+6n^LzH,/QfnDrmiOăU"fL77;8$T8U6:.%d4)B.(AVYW^7iv%a>ty?Oq/gX\RkzTe/YiO<mZ2/1fM?pYcAHăU")VI0c8$?6)3M#CsRP1Liu(XiQw9M10RGC/Yz_0,8FTpZF*MsIq=oAuXgR2dJ>eEăU">:2VcH/;$3aE_1Z9,L.xREP]Viff+1'cYqFzmO+(3FMC,uuNtwsOBgrBXj?Nxd2ăU"XM;NfeA'[,<8Z.eQq7MA0e<1t=4\A3ewKH0Mtwvb2i6*rp&)&a%T8^G1HR_t*rnăU"arID*._,f[O*]oOW%4b,tckrpLR1eytZpNFp8sIV$qTVZheTMp:Uh1&-NPiC;<*ăU"A7vvYJNK7*KA%p8*NhkZ53+SLZhwhTNKu&Tc3+eIYw&SRSML;dWt<26(-SSZnt;ăU"LU=A>#AI-hKuTsKxYtHRvrBegMjI.+wPLBL,:E%38/]ksMPJ3X(4j;S?kSmY**oăU"[O1c].v&RR)q,gfO?i'l(r.Y^U-5'aG6Lh7>Nw.985$6o#7%B/KbiOyDelfw/I2ăU"dAoL,&*Z/?K6'LWq,[ma>8_Pk6/O)>*%:+[?#PWRK>p%Q83O*UC6(*/<DEqR#6_ăU"Z;2=Ej480bmmFveb]Ddfh*TUzjoPzF5GM^(qJuneggs>:,FJU4AEmVXN^kZpR:AăU"#*'i'>WNq#yj7=c2mWb$^9h\]^i5_6=JmE9P:q'uU$-M[,DuJ7*N(>*qp;k4RVCăU"RQToMxqdJ[v9/[[8uNb+)84xnOEh632#>3YPY-4&,2PpE\IW1\,my+lrnMb%[28ăU"&\C5pvO%croWJZw--7LWm0U_ju)RUuX)QRgA/nXzQJo5-v($;PYu)Hdc,7BO[,+ăU";GvBtMy9(m^11NBho5J'uB[Tr&;xG,2s+>whm/&)[[=;U=/e]i\ekmm#1-%:4ZeăU"Vn,i10uLVgI)%uv0RXcKDd,BS6VXp(UiBi^V&EhcL4hR>0^g^,Bon/=KRs%rcp;ăU"Wcu2M'g.zN5IJzYBZ2v(G;C4%C<^/\<gg(f8eTZ;a7AE:zYLR&Qa+]/=%'TO5]1ăU"WDEc-uptR:^Zdg3q&%:+j>nVf[cZ]]5)VPQ[,(]+Thoxd4CrdXt:^fWbB'ZJbVMăU"^G3I(%Gqrj?d+n;4R63CHFv*g0KL*.+6ELYJb<i]h3I)x;Qh:t8q[J.v4L+R6_VăU"d#*OYdyk':uD8C/-AhI*=T6DRsc$Y\h[mVRb)\jl;a/l,h6g36E/-x*),2ufC]căU"IiHZm.J9Mdu#0AErUetM&sbD&9;3byTTmXP>wMqLJTqY=F#Zvs+HDF5H^=[NA#găU"R1K1N1S\)D[HTeLT-kkEQ[p4^$qy)7],-=So,IYEh]t3W*.M4Z*ppJngo9d1FFKăU"/+;%2h;yCUz<maSaluW)^VkcT3n0O'%VVT&C1<Uom8<'5mIvp8f6'SbZ%q0M&GAăU"(;ki5eGo\WNFgmKWZ)W56vxH%_T9E1Vc0o6CO#ic/(H6O1MJ0RA8oo-r)3,<V+_ăU"$dC'mEn^a9o_>AMkuL9w,5gF_m6nc#uQZ:YU)j*K?ZhcLg(TEVNM\$nQQ&WCV^^ăU"#ReWR.Yrf;u76GIaLKhe_2rh#mVWlBt30c&d(QuDD&O$Jj1>)G'e$O,Qocp.'sGăU",xaTsUP<j=(&WL?amiQ699LP3i32^aB0R5cuTe=4H_]/Im=HTt\m\lrIT,X9GumăU"M/wXJj7h<G%/pCpursR:.bG?c+T3m+Rt*U%uEj/Ea*NXmCqiw0X_m6J&QchI?G/ăU"k:j\Es8H_L:cDZ0#kqN&^t;XQI5Cu5wL9h5u*7X,48&tNw23Hrrq2[L[d8k'wCuăU"ucu<rf7%p[Q/xPzJm>/i8erIe1\Xx<*9m&-VKMb=mD;%*%.HiK^b\8bGHIc.05OăU"SEZAr&y*IUIP%RVW5p<2S:Qg<4,=0;TYUMtdHSwoP>j[uCNM\So'2SgeEn1[)%2ăU"Vm8/_\W&%L(HI?[Ti,u&EKK09oJs2*6zto7>z-E6'$^DaCHDHFZGgkCVpR&,1;8ăU"6i,MAktM2%wt+vtt;bn7b2MKV5[4ss)uI#$$RDy_(KQY&4n>Gpp6H2t=:bjKRd=ăU"8^YRL-n(U=[aeFV870VG'_TYT02*lDdfgA<\5?S,8YAK9bFqT]RsHCbJi[Ff^vLăU"Uu*xiLM0xN^LQxKY&4+g'=7/*V6:E^-MUQM;$F<*cp5#P3hfEC8ycoenLOt#3dTăU"J:ew1Jbka'n6lh5A7=cp=f^G%+YL?h,UEFyE+H7PWG?pgU)>Exu(E1#bVf8yI9FăU"C]JPJi\;0Gcc?G*Hm-O=4r>mGZSGu5$(:%\1nUA2bXh4C[b87XM;<msNFf+A^s5ăU"3&:vS-kGaAjipPx=&hYG4>E:KyKE;/uXT*AqA7ARf2WpTR0rE,utI*=RWiZ;t(1ăU"zA_7G12Ltw64VP\qfEsu[XY:/hBw7PIoCH,-SrN93bssljYe41SA'rT]X*m-8(dăU"Ib/d>?bG>?38JKzh$:qP[1\vH2sBPyQt\6DfZZRBK0y4&UUF4*j([x$A\rsu[ILăU"PfW.nfBu*IH^Pb0u864W]%,v&>6XJB3EXJPi2'V:t.(vG6z6B:1rsn/M^L0%54VăU":$;K*E1tbVkq_v([T(^pL7uFX>+Xc=d&*eGL+0DU&w9^_Z[r%:Uw5S_2O9e)/B(ăU"P3]1CZqOykcEjKDUYqO3xqMcB>ZwAa/PY.dxc6v*]uun<(Zt8wi;U02tlKu[6KeăU"pH:k:3U$Ig]j?Q$/*h:Uf4bLx_E9*3,?i(Ep59U]:6/1UxBi7%+5b$dY<QD8JfUăU"$E[1#L)<#T'FYe[eCD>(cC+f*7%9t/+W0?AkV4V'+0d]co_VXVOHM;oDOsD(;^<ăU"CTsf2?LX[B6,SdJ;zAevxcr]/4^qLrBliKr*)<tWrk?'d_Wi7I+\[9gM:TpO6KuăU"YRw,r;J/Gj_UA9i*jd(Vk&3k7B4*nK-&8*qiJ,XNdu6/IB=/-n;eiOqM2R)BeoBăU"8?VW1Zkw.#/%WX>k<'<l/kVx\JMw1l\1C4HhLXb?41-31RE.6[tM>c<=XQN+c6văU">&Gdz-Kp\DDqGcOah2L(?(k,UmRB-&u]BjuPg0*(eC-hpr5nuujqv?+S=7f8dMpăU"ZcV4&utigNpPOth/n+uWOF$zB9bi84>bS+9O*0/<8z:r%^dpCYiiVB(F:f(U,lpăU"3<\uOfq'x%up%()9%%%%-%)B)2J6U->q*/<%%+Ev%%%/%%%%lnkq(z'SwUf&%L$ăU"xFAP)DnO78Om[i(cJy;VuoN?J/9V3Af%/RfiSWVh4Ai924]34']&JlVu8B83K'6ăU"e3J1*5,S_R%0'mQ'INpACW-Md,RTO9ZB3X;8d+G8S.w8Z(;R(?ENQ.inZSLf8TlăU"dmM2H>5ETBLF8kO>1*Y._Dl6t^Bd6pWVd?qkhDrxf#&sH\##pskwoujXxLWhKTWăU"nNboQiA2^^\Ed[+tJpig]VHB4AV$_UipCspQ9vmC3$mpsc1hAc'eqL$1+aJ+MbJăU"UatJKBGVp3$?CWh[E0p#lh:k6Sm73?BF(Hh[$Ow_m-nBt8R1^/E38in12Ph?o8răU"9L340\eFl_yJ4UtI4pmVFF;<ko4B)R$^IlPStp=Y2)TO<tC0^EI<3DGjbCBn/DUăU"3utpnm=DabblILnS6PT:ClaVfc&T,,wK6,IJ7xhvnQ,XO*PF8HobNXexSPyxPHWăU"w(R*vxyd*5io4%I$,1>29eC-ag>m#B=mt7+wv(hxPPWR((6x2P-GU+YIdYcQRVQăU"=.$RV;W6T^)gS8Xd+2BIVS*p/4\UI+YJY/>8?DUwnR,YO:$gcD[q21o7C=er=2oăU"o4uo;\:l:Wp:cw:fQM5NI?2/7?E:bcUb,3e>W($VqaiNpmg5pWLh*v?$U'MdUY%ăU"U]Y]AcsceFsg+#nv21fgnj?dUqjBC;F63#3g\C4]UeSVNbL5IXDUpsO49<.C_DEăU"lgotJZrOjgf=tphp]pDm<YhppuZtZHPum97m<9Pm%*AqdbC%N3uU,UKRqR8Qb&/ăU"_bY&cCo4+4m14*o[Id:\19R(V1a[k1;<pbWRVKi66s4hBs6H7m4ULOloD]NeRJBăU"E]OVAB9AnDY^mo[cmg#bPVTP$>PMAeKh-;9t?XAYDP$fG'UdW]7UWMXOW->3?a9ăU"AucxA5uI^]aUuTIAiXuGq+oGm]ElV2=1ufBneuBfdE9fp_3Gg2yFi'N.'0xe=EnăU"d#aFX2o_U_IAhtnAhv22pP+?V=R20B12B]qL\=7Z+*(+rezF/(c>$.&*o>mTs/măU"&:X7uH,LdT>QtsJFUFT-Eu^+f<Z&T/>q>8F-_<>bMl+v$ZVeV0>t:RwiroeZOqeăU"<T0t<T/6h4wDt?<&ic:]h/lP;d$e95\3Puh^Tii$Wd)Qk4AE?;/qkQ$t^A3,E<lăU"6::$o/h7PY4*W3r5IiS<%)Vv+gIUNap4N:O_7Rwf=ef?.tFjBF<L6YyWZCl%:cjăU"rwUK2$Am>PLs7J0g3>4lrq/:+-?WG3+r/hBHPWLeB5PV,%0UY>2hK/HmlZ)uJ,aăU"l5Th6CS]Zke),#TC$OS82nZoNr^Abl;C)K6pjGj)wNEnN1Xc_-c-hf+[wDJ,xX#ăU"Y;'A1R/b[y[uB4*jm.J=&qjuHQ7E'T?LX,0[a>',[Nml,(9PDX^[aKu5he?,<sOăU"1K.kSf]0t*/Z15%tg=EXd:]$^G^I1dKjF/s21X#Q(4Q3nTN.6jxBT)SDIFjuLsWăU"dM?hi.m,dE-j-v1M-w$\aR8cnrTRp+oUabkUK9q'Z)Fcz(F:3.*J?)c<N7[;,imăU"3<LJ:*enC1#/[AuADfjlF_p(0f+;,0fI8Fh(_]Gf#/m1#*Ip.P7_gc>(r\SP7/WăU")F^T,2\;aBRLA6Act7^HB^0YLL69DWbrtN99X'qf-^;2Y$GZ\-GJl.8bAbJ1<=măU"l\Ai&RIIEKQMMPwsg7ks0Hk&kn3#\H&h,AG,<YZ^,kopq_#-L*YLi&]S+4kVRiTăU"P2,&,U5ha-<*J1)o\E2C:vR%0E7h%)cMT1Mc?17UJ$E(cAB#s2N)YaBoSDW+F4wăU"2N?BQKDZ+P;)b0BLF3sTtnrnb7<cl>jPhrg;pwiq2:K#)9T=77<Y8[l3Nz)Y%nLăU"KJc3RBu1#S-xM>fm^FDpv3LC=i=CS,Q*u+3<w2T2)B/e2ah-RRN,oE;WaPC98RhăU"Q(]-#8sE<a,WSfWVe9:u_Y*Z4T:F'Jm%t?_tRD+L72o^ISm?Ko$6Ds'50T^_]RoăU"Pq6p5ZGKVuQISOY_:I-uKrPUHv66H'^%]M;R\m/lA1?n9R8/DAw+1IrO*2os^OMăU"]iaqbw:b1o^.k8<HV7cCXNfW?Vu#.5U7B%/v]MRh.gx[(J,XN;Q^tme-'^qQ<;2ăU"F?K,X'sc_efmS//tG>Zl>miZ5Lf[uOQV:T#1faG6[2#j_b'\.DB+7S-R5,Uo=08ăU"ib^w.i:'/7_O^>JcoYUXo[)_XB.(6mC>hfAPq?Q#lJttjic/Q+$[q80su3>A&g<ăU"<>+u7y.SH/mEjQc5]*uDEa(;0HJX.9s8G<St.'-&quj,8'>g;#YU%6#K(L$YFbYăU"sVbqpOAgv24/CL;(fge2&#.Uw?,UY-B&J1I4al[]/cDJh9:[<KfeY)?nTBA<JafăU"$T-rBM[rBQX5Nt(xI]DcbxvLPK?(67Hu1BOnTH[WiGcAWVQGJ3a$*=e2R=mZew)ăU"b8HLZ;=X6w02dc>7M#aATf3/3uJ'iI+_9iQ9MLZpbv<j2kDY(LcwIr9T$w'^n%găU"S$&Rs_I'Pcw7&WS.1%c.$4&9-&='uMmzJ,zJ:(A]nq;SFs:T/IvKTe>iN05.Y;1ăU"wxly'+g^+u]:Y;ZC1x2Ul5\p2wrXPFZ760&XlD2UTjscHIg4C,l[U-c<ge</Q4păU"UP<TU6_+WE)k,).m/J7-,Un(a2<Zr7'c%.jQ.<NmhPf)UE(rmn_fOM(&[fU-\PYăU"^o*7j6K,A1lQqSJ\o'mb8,gIt>AqS\CM'0s&Tj3Mc)r't-BVoB[.#;2K\MKhly'ăU"Tl]AGn[LbFep[9xCeai,#L*'(lZgK-'13]v&_;=X[i%-AmImDG:_]hah9RcZNu(ăU"09(3p)-uV.2^NclY(P.l4.?vwE<(*</SMk^I1_1k%b)\(Mj_?R5AM0V=Y3[UZW+ăU"zc9XJ'6xsEM^j7-+ZX_&Kp$P>Co:U;uUK'D:1m'3lqWnT?<);='f>YHg<EZ%36RăU"C60YT/al[L0AYKq6asg4^.37b[A,?a>%wFu\diD/:/%/P.]Y917C5FDTYF4'Am)ăU"Nuq6vpaxj\G-'e=[9ndDrNt[=iSI[./l1BXv$^Yh#G#01Qeb(/-6'#U?7m%xDjTăU"c^#iaKXgZdR?M#>pW5km+1qd+C6Qv.4r+X/)^t-SGT<QWbOf;%^qHeqf&)W)&\:ăU":\Eeazrf]-E,6=NZoC6,f$8WqPVb<-e+&D5Xa+&QRjJW)LU_R5.7BClBFaq+zBKăU"sZJ66snTpEl&c)CNf\=emt%ONIe:?7W97fQV%ROXG:rPKaUTPO%eq>(*x_Sbj)[ăU"?cqvLe$Md(;<V9bFroUqdI3-QIZ;\Ay_cVceI6k1,B<Pwr&spFccf<mKS%9S<%iăU"LZ*GWY'Gao8*$:F/$nI$*nCpuWa1.M-2e3='Q+_[u0T6$D[6%g'7IAsMBD[*iu(ăU"FSETcig%[Ki?k(4hB2Aw%b)7c9a%3**KKiX\E;X0.VPjl.,]98#+YRA'wEm6FXZăU"RyQ0Ne2_7*dh,#uJhJz*kkAq]'d:2b-)342^uO2ThwS89$7j4dtQSHx=d4?EwiLăU"HCrkJV)[LIj/d[iWZPMJMY0v4Eh_1)O,gLYs=/\fJ(p-F9cOqgx8;UQuRH2I36xăU".Yb^ct6[cIe<Ybu5kvNG-p;WDs:WSYA1OotVJ//DY21$[>h>+K*Vj[e(Ktkfn6)ăU"+C'ZKp-]&O)u,an$-jJIO9ab1sfEcpBUH,/jO]CmK0-\YU?dCYU788IHsMVCN;%ăU".^-Uj%9??z(e]Cxj4T0VJr=lAX9i:ZT-w3G2<0HvD$1fDQx]9tnOuU,%*G-fF,AăU"DA=F6BJNk]bDfk9R:?B;?v1%g74$=;[wNQ[;%Dwf=;c=%c*Fh4Sn[5RnJ%4:+(;ăU"Qv'%kNK2RVJa<TakFi.01w.r(J#>ne]iiSiC*$tK<ASSQ[4wF_ca]KUGYDTf5g/ăU"?&Z+fkBF&.EE5aaNHvGK8CA5DdPx[9tM^?oo8:hSl*b\4fCWnBT=AT)2CgT;8dDăU"J_YJ;F>[eT0&?V[&?rVUze'Jp%Tn'l&08fMq_jK[Bmz\x=Q33[Kd643<H>\cy6năU"*=.S^((\,:cEOOE33wQtZ&75+7\.uW7]Iuq/0=K_%JHIhC)N)Z#QmikDSTsg]q1ăU"j(Ln(Nv1].$ft\=^&l&(-6#vOpC0XC(Un,A:Y(M4>=6Cf;;AGA%T#KwWW06ndQ.ăU"Bu4QiH/XbBiQGrfW?]:cxr1$J7xac4v>,>(wPCW2)QqfMLx)xYm%9&5DbZ?pY:6ăU")7.BO9].GZu[8/w<rR<Wv3irnQ,qUrgUPWGd71DfE=(oa:gx,>JMN;Htgqw))<TăU"c=s&s/#\H(F#4roG)(uCutlU:PqPji_$f77T#/\]g'$h6h?^Kle[PSv*N2DV0i0ăU"_&KO<U:*:BTetKdj3-.:88'1_1sT,tnb+eTf-HbnZ^K&*pDMmZGV0d'Z6vv(2VGăU"9feAhRJ/uQ#(;I&]E[zCw(QW7LFR8qN.o%DTta/RWb>x=]yl^/a.e^c,(W77EqLăU"e;DljIdc%YP:G&,9c_*?[YMzm7L7Eo:sYLIEA*#FK/ZiHH$kP%oAZuo,V:,rI/:ăU"B0Svw:WC5<6c[Z\oc5s8[+,Lz9%i'w$8[=]MObH^#OWK+ydItk61wy%pVf.8H0dăU"\j&CLFF_,%bRl.[[15g:7N9uw,Wn,dDzuRLU\\R$0XJX>NI5pOOu%7pSGlo)j*=ăU";mg2b5H[sG%Y%In9?uabpV/%(XF2\0UC&2G+:F>z2OSWWAS/oYe74/O+eZqyad5ăU"l7TN*86n$5tI+:36ckXB[\i&_0/-4^lU5NN/*?<<YtFwqI[g'$_R%(wQ%&+<SahăU"L?E/JzU:mo%QPDPc0Hw2N[VQT>eQC[6-t+449\hu3.koUDFFp[,Zt6GIw?k^cy#ăU"tRdqh$H7+]$sz'P%3'-lW%Mu_ig$p5:#SeYdAH)QG?Y].dG-6/N&9Qt&hgt]:]]ăU"v'[0q2&-[-*0<DbJ5+pEh)[BKimouuo]P)\(\VfQ5NRatr_=,q+-kTEZHvR27,&ăU"l84IfNS9D=r*UB*A<9=V][KBFpL_&+.d-K*9l)Otng:T5f8y6kui^vX2g+w91=3ăU"O1o&3AGlIx0m4Efrx8$L:ojp\;4L[#aY$cxf95g(cZTS1O>8O^Xh1x=wgenlAm#ăU"V>fvCM+#y[ImOSC,<8B+^k.+]+9W?,4B]id3hUMJ>-D^ixC<+<XOLxcs%<a)sdUăU"%3?+[4l_KdB0lxd:FjnNbA5/fPau>VY/E-j8eV*_J(0c&o/Htxm>4cdb-L,K&4<ăU"[46J]&=ARV'LDaiqLvTC8Xg_ye:86;#mg&eEJu_MUubB0LOzH>vz492CLE4cR^GăEND SUBăSUB VCăU"&76N&,=9eqS+cua7q[+OGx&04&y_<f%4iu^8SVZ0Nuvd<KYZcsUKWgLGyx-\;8KăU">_lPctl.bxdTKM5VTEN*_H]^(^*opILa^u6&2WOs?^NmS(OTK*fEVLDkK_x-K$5ăU"vU.&5DHC;NDsL;dIfDw'dtah7I2>('F$]=jdG0u'9wBAnFDAh=7]8ZZ[EBIgF\RăU"8G/0fR.mj8<YkjJK1;9g5'XL/=JEZ2Z,geEA5n=j[H]&[ZA?YCZhdhRvp+y]?HtăU">QR3IZ/+]Dxmg?wFB0&d_k6tdc+OH6+y,J)^\oT_=5W5IsY.EQuwlbx(ZOd[\ecăU"$cg%qaQP<dq,v3Y%mKOxuh('xR_M<hSO1FXrsxRL.KKCP.##BM,Ikqsbp+_r?sBăU"'.uqiebu'2^pGyd#jS:iRB0ue>lk-3Qwrh-)26*7+,5xN9#+p?1)l1s;^bMVkSiăU"NnJoWR6p1Wu?o]L<mjH?r6cqlP,,]OQcv]uvZUC,;./LpxW#X4R%Z<E?eM+GRw*ăU"m6/cOxk-w*>pxd6OLp6YCc5E_P=ynOaVek3;Lab+glSx1Pbk%ROhf.)1NuZ^MP#ăU"l%8frLBNfbPJd35z\4h>MCxqM8ZTUpA*MUOH7Go_$NcusV^s2S?%s4brdLUtdZwăU"OCUlM3ncyU\1^DufX,dk2BJvTNfNx)YIdBNpXL^go_GaNq)4wUWn^dO'wEU*o:băU"=HNd:jFtN7sZp+8=?Pjl>=FQGz>uWq^kM22?9eBTNg/nb&eAT#dL?cQPcZpcT>;ăU"^Kn42eM+[lewhbCLupt=<HGtjrxw7XJG?AV.SL*d]*yx9_NWx*Qoqy;yr#I*Q4=ăU"2(_8SrTpqG&]?zS;T2<5DibT1*X]x;d[p<L8ur_C6s,phUk)v/3pyLpe<rZBDuxăU"$]>-[;7ke(^&3b?*Yl06XbDl%xIl-(8\dYHgjvqmGZe_d^CUTlDU,p]NuC$eiD%ăU"%RrDtS%0][LMCmK;1A7yq'H\uZ]]R.tKq6clPon2Z272%N(&NDQvv:zkt6dnN4jăU"j\t/l\d5oIZp40PY0;dJa8rP&(Vk'x0PhjN#n%ToPWV'zhLZjT#%]InqEdBpM^<ăU"J$(BGRdcDu2m4HMLH5p5G'G[Wrdv6<GF7ZoPJ\2UUU*Gsw5>-<:MTEe#:Y.=lx^ăU"8*Ea1&LaAgwYCNPZQ>D,'S=J$ypmS??3&:??tFg'Xo2*9qqVBxoTNPLtM2,ZBT?ăU"yjK,8o,<;MI6y]#BRhOd,/%4<3ndS*N%KNxfNHr6'u_?;LBPsXnjkhB>k2GI6YZăU"hy#;x+\_P**7g=)Yyl>HM2KtCP5k^uM-i(IT)ws5ujC?Xr%KZt-81vQq-I\&rhNăU"mJJ.cwdDf=;Zp0FC?6uNBt.y6C*YdP:-X;dNn\.]d8iw/#gu]^bnd,*ok'4s#LlăU"Guz(3v=fZEwVTnsbLrN9'DGshN2AkT=XxIJuYL4A8JoM\,Bh/4k$'UU+E%PQ3=0ăU"R/?EYv6=&fU+FQ,m&Q?+edA3e%a%N<_G-3uk0(c&MBHSBjUPZ'f,\Kw<35z+Tb,ăU"8[6UaJ2G/M?qkY<*3?l*mb^pPbHhDn(Y^NFe%NtIv(gOyX*)mVBl-h#MAc2hM7iăU"L%Jlkeyqoc+VAOfe)vhaGyGdMZuBL58pu'sNnk,.QtBAD-v89$rX(xFrs>gwSnrăU"9XRD94vBO<FZ#H=(vRvFxG>>lw$kl$&PP&3u>EUhP/?LHCpNl6ummnEj0upRKjlăU"B\t2/dL^dYM/S4#<E$n78G[2RyI_-+<2ZS],nhwfJiCdI6rYw>,J=w5bH+wK(a,ăU"kM).*2fYG-rh1t1583Q&1jcLH_BVSm&):,8KeeK9^3>)HRc1p%u?^5*w<bk5-RvăU"W1NY6nO.9x?%10=xe8uvNrBa8N'eg6q3RkxGnT]pW7qc^Kyj3=bQup,$f?YXB,FăU":/_V;#tyN:1SlT4dS+\.q\j>rHpgf;_dZf&D+(b&)+',;lZvnW#%?5+<[Jl5\nfăU"2Oic&Y>ib2tP%TTrEM-)jlGMc'W8^EJi9P0Y=k5x,bex0tR1W'&>psqh,48WG:LăU"]yRDre/kVFj]iD\G4>UGiMIYr#?gB18^nNHFO-)Wt\2F?7xo#sTE8.H5u'w).HgăU"zk_IwPKO[6zQhFcmg+N(v#Fm+'VuAZd$bTw6N)'hqmQfCC-M\L1p:tu.L$zbfb6ăU"P5*h&nMuA*zIBJ,DiM_K(^jp]o];UBW'Fa55]HTE(ebdi=?;a&JBZulctP>M7j\ăU"fd\Ms$,*#pl)t\iA0>stkMpRlgbNM\q%tD?lVFLfhFmI[OyR#<p)Q,HnCsGhHvgăU"Y7'fif8mVVe5d:^Z&8Uquzjs\DgR[E*#jC%Z:qwX+kXR19K\4ewnt\4d8i3MDnlăU"gv*PIecM'L,(+Hj*;sjZoTB>j:HL)u7/jliPYfh,f4sc>#/KJr=bl>#pL0?F.OTăU"P%g6.(l#j+bWu:hkUg)>H6k=:x*d4fy7c+s$]l543[AE0G&mQ%#m.a:tO-tQiXVăU"xw\]nW:xbon-]s,#*/ZwX'-<tzxrsNAx1o:.*2H12cDW7Gvlmx8Qh[Fsbsg9';:ăU"'sa[Ll2^b8Np\vNACO^Hl_B6F7?HHM<]YI:Rk*1_dA9+>FHtjan$(&Y&Czoz47;ăU";)g265ZR?AHq)s]Nxm9/\NSvLH%>6#9]AeKI6_$qclo]0Bbo0Oh6;&L$_r7N/m6ăU"M\6c?wBCpg0&eZ,3:3$hnPz)1m?<27)kBUpAMk2VMGm+?b.BpI5d+n;'+<kkT&căU"f\NVzega51'g8y,^Z;NdF3cwK2XsXG&a[xH?HXDpg<]Owfge=/ae.(yilc.Z?cUăU"6+m]JaXnluR2Q8^)3(p31pLM^ngH]o$tvZJmD4APZ*F1pJU33.nd6f4FM_F1XzoăU"C4JL_?Y=ih$?\eh5Zhm^VFu+Xs3)?mpB'mu0E<-%WvV5Wm=e48W3?wjU0ttjNwiăU".TCm_Qco4%YUr5NxOCO7NiF>aD+j)lhrUnsdKc3/L$HZ]tR1OdNYsbrnv(dO'_6ăU"nPO+,Q;sz36A4C_/C>ruInr[ldd_I+*d%-e=Sd2[HsgurfhWqq0NbsH2v9N+vI\ăU"50([Q,uN]MnY:>rF+\g<718dTdisl6s<#o\&Go-]AHkpKn]W$Xv-qlxL40Q/>kiăU"$%+gY3/[7+sq^ZXIs&OxUPI.:QhGK*oZ6tvxr]ZdNLYV^VLzSkM7-F*x,=&iq2GăU"7&MbZL1B?MW^hvb,gXhAW7IZlDFuSnOO9bd=z^xs3gN</W4Oi1UFF5II,sD<s3-ăU"nr5xpo?7SUhlKx\.K7'10_ajNFA,WP<C#,(\4b2vwpN]<?Dn7OK%_NK&[o#Ge&EăU"A4]8LEp)UtmEF4,&'ypZl$',Q8urNV.-5B$oncn0;1_,$?wZScnVLHpqMd4jd7+ăU"u6sw6]8J8o;BX<?BcMmG;7w7Z<M5KSy3<7yy;w>':5Qc;y(SmPc$jA<.gBoV5?lăU":N4uOhxc(?m$<=g9tt8-MFrgeZ0PuU4$H-&WN<F/D0b$>mXlQ?,/xP,h-gJK?RqăU"/.F-*sW+w3C5dpbpt&D^^^o<8)(SW+H^ACt_u_LH,neP%V\?/QJ\ST\QD>ZFicwăU"Nl$>ZDx4B+(ZXai4Gq4M6rppSJpmEKPXtLfvPa3G'LtGp$0TPDM\2x:&Llpx/,4ăU"UtdncQ>]/V)i\B:LvGtifL=o$Hm,vgPBlN0Rg'j[[#XZTQ2iBl,:gHflzY$IV3căU"abhL9NIW<6=n-(EtZgk%8G2]a,O'IE;Wg^HOYiRUT_6jTo1%ihMO%uzMJ?2[AGtăU"([:ekdF'.]bZVhI8pqrqX6aLLy6ZKPd--sS6jvtd>wcZM\#bYBn6>Z7j?na(9^2ăU"C<DCLJo^V(\2*uXZul8BO1Q46>Kr(K#&ehp/kb7hk$F\ns#hxf?s6F$jd4IvK\răU"OL4EHn;O<cZ,BNp0t:,:^:4e[.Tbm&cpk'nRBsXXrU3,4/8eMaBo6qRbPg8,NUZăU"ln,gZo1AW2Y'W-*82[#d&edx^wwuIq(/FF'PQ;W_Hy6<eSHg5VI<n5B^lLzZNCWăU"fDmg)Dlu;nnUq-giCUW*Ah%--1I]zi(en&Qs?u2BL*wK3Yq0HZSZ2rc8?Min4tYăU"(614)QwudtCn5imz.U?wi(\pj0_C/:t,OuvYCm_lh7Q9dp3BEF$pfbJ7V6?udF$ăU"0PL.mV/#&NubO>G90[gFt1wR;7w^I2pI_'VrW'4p1d>+*s4+77?wlddu4s,Ts#xăU"b6WrZB(KiL:joYu'VYGt*X5InTlMnmM86_QbTqf-Ux>d6XRk[HM$irva,TUX?pOăU"u?N1<ozQRt\'*xYYS/X]xwZYu9\1:J,K''_r%T26+p*xKlxf.ov-7WPMtz&R;S6ăU"D,I^tTq.xO2fp.?G$_J0Lq>KxfIdV-LdZZL2u35bDc;e15Jt0DEt#rF,lLdjaG9ăU"ZIa2&u.RORHP*M+hhmqnM\FM&zB4((z?mW)_x*u4xOm5&omOlu]rT30zvLu)3.uăU"<ZdKWJeRfM;HzSz]\&-qq)IlC6V8*Q(TN]dYNr<^=csi<Zxv$N,Jd\4cwdl0%ThăU"k[R%LmbWcdDt>2n+dHtQX&tu8s2:dHtttmucBV&e#\>XR0<_-K>K(LVnpKpxDqkăU"GSZfsA*wBp[9R?B_;Q]\2Dq9i>AnS>L;g&q_#v^/Rdw=qoLNcaVYsOHPhdGr)#păU"w,u''pj^*ACMw%\2;_gFQh<;eZc;pRONFtIhh1ELO7]Z0m)dx,em;zs_7/%3qOvăU"hRCB_,p.\S%(iX=CY)^(6\OGfc8,6HF%\R[0Q2m/)N?KCGQeDd(Eyqs9OpqQIxeăU"T_?e0_r9yO,0L##(#F\[cxP(5S>5R*lWUgb8))EY1FPMm2kkxC=$oConp%^Yc'RăU">l1^XP(ft:3A).LkX,QUov<4cx[1(qZz'.hzBIND5]Ae1=A*]QET2V;rN3C1qUDăU"-OD($?oj-4N)Hms;Pu+A'Q((G9K6c*DM]$-\mv.]6KVf:SBl#&da<j^fYZiO6lUăU"Z#Be-=X+?DT7ZmjKs7\au\o25W'3KqOa2n:1<NnZ</c9iy]6i[1S5;CZ84]&Z\GăU"HxWFeb+:1uIo,k41kIWr/Q2p.3if$J#,aOy%<u8wD?64VD\E',SL.cV5fvP&%NQăU"e:Es1pc=:L_p'm^m(BcT3lxt-Kn(w?)_ff5R=oMgH2Q1>91#7tkx&3'#zuA&JweăU"TGs6Ngi(./B_%LTRtD?J]Ehhi+4?9gLeO2qwaaTW\a\>:g;\%_'FbgOnNYBL]P#ăU"7c?9k0dOYR))7\LM))'g<Ep%ON2JS0d3*^5zHwG;hyxO%u&]utybNA;i(KZtpS-ăU"Z3=#zK&y5ZFL,yqtUq\vv/u*x'B#J*aVdxTuc17l4k11TJ_m*2j%WQr<2^f5v7MăU")xa9g5=;L)*y1GiUWs2r6J?1Qt55%rTvv+gI*uLNyyk0q7vl6)Yq/8%-MrAz4#QăU"b,a=]+(P_;G0bta>y*q#keuWB-;Wdj%+wFpXux1=V#Um\%h9[0_HPDOMNhoteZlăU"l%F]0fXg1-2VhZX9EK\E9:1gB5-hlycmRxl'v.?np'6'3)'qmwiQJ9#k3c+i?JoăU"98C)9BG'v)xSs)D.qd<EGz(9NKVe9Qarqea6I%-,-%L/P93e*H,VRa]MJK_qnjsăU"sO-FpySA>Lg^cXG>U2HM;Z_kaP0Kc97K:P8VujX$_%8c)aD>Z_$W1eesDcF.CnnăU"dNgkp9WZ0\?P7Lf,soW>wJs,JQ(2Oa)9<bp[SO6F<$LfMhgVU.Vbi4fAbp^S]vjăU"5X'dp;%Qu=he(+d1E%R*'3iSLl*.K3Hfr8C>eDllBCd5KZ_=F4GFa5\bXn$:c&.ăU"wn%*U^qG4h9t$7'x;9kR2dt<:]1G'Dr*ibfYi33(gST,TMc7moE?Y6'X(IfR2JKăU".u[)5gE9m<>;9FMBz1Rdil<4*YE?Q4n&W2mwiNp7SJN[[*VrA/^fnA/CC/l2$sPăU"&gMzrcOv4z[[l2>VQDIYT$GNh$\obyFe&2ueR(nR+3eMV%hQ#Qb/8Fc(JpsA3nMăU"ag1Gt;ww;S+DjIgV9r/shp%+j6<i>Z:2RjS8?u9C+[98nZ%+dZ]ErTQQ'IR3*.VăU">JCd),PDRTfQ^UHUWAi1X+&SZ*6cuMQ9#5MTMde>B<M-g2T[gGDqsFk,g486?V0ăU".zt)aqT#I/fxE3^*2uN8:MW.v&$STkCTf3SKNCWS:/'UP9E4Vk_GHkI-D?TL4]#ăU"AN$o((oMGTc#DDi/0(x-qe8X;j4Ob+/57/e^a,=ZhpA92Ly(+#2g^G']VfZ^a%TăU":;9WGu]rLZb+nV'y>y>?/=<tP6^h/=*lbATugYS]nV;K[Hi]nj5JHJ6=.d5ih-^ăU"#gb,sQpBtDMRbciI5rje//kkF'i&o)RVd^o&7G>X5(<#GHusrsVLNT2ZeoWt1nRăU";Tfwh)h2jhkoaSndMaUGeZeDaD/Fd,9??.BRiHC\dE[xF/2xpN.xe8u45kx&JhLăU"lwd855=Hi;pya04])Eaq_9B/O)QJ)(T[m*;b22YN=5Bx<s)jNWh4AoyE?,qYo%=ăU"6NFs0SneJ_xl-mfTIFuMwZ4Vp<\oh_zX7UeX^Jd<[Ma%rhyH7:$L\<[dkz\%^f0ăU"Vtn\)hp(ri1F\4fu)yQT*uxA$*%KMeF]vm20e/e=)I*,71S.c3=Sfk7/$Mb?kVxăU"hFXWE%c7=P<qPZ0[$u+/1Z2;1+ks''3=WVKw%f?MI\L+udRf*6EwnGg_^d0rouYăU"W[bRyArzwr?dCVPef;=8cmkp0SOM2.gLzTgh?;X*,t;R/rqHMAmFNe[%0=BmPCMăU"$tAS=hV+CRG/mcA-imM$)Rt?9Z:J[VF:D1bJDu\d:?iH/m<WtGvF/V'lip?Gc3găU".<AMT;F16&TB<F4WNtQ)wpnMHX:5VC?]*<R#l7tJ9#tzRkI&9ipf)EejuD6rvyjăU"Oif8/Q4>\p'dOq^G-)?ohIdrd<P7%QYNMo2f7QiC\3Iad?^wfSElV)xLhc7o-j4ăU"ZfZjM>Qu]fE[H?RMsD$*'OYf?Ka/LycWN<:'H3ahsg,EHcv8+(_CK^AGip)os*3ăU"%45LKY]MUsdiLHsg,tz'Aa:sj3Iu#<T7-$l-u>TSOf?.,e._<<B$,gK4,LaAbWRăU"K5^eDR*mrw&.NBPf\:=^JJlNNBeXqFNw8V<Tfd>ZQefY^;0g+4_o[fu&c,k$siYăU"V&?X_p4kCIwp#Z78yr,82O-(*ft=p5vM+WM2-iu-YbX\7iTmr,lDaq?bKm4rB)făU"U+3(F0TF(^uQR,)oG5gUM]%Z52+E-uC4uR=R'IXNIE=UW/C;AH[1By$2Tntbu*?ăU"N9AG#M,<]R<v,=*nvp8i8<a<GER:1^IKYpc6mTlC:38^ru%*Mjn9?KU5ws3ERq1ăU"R(RoDPa#jT:p2rc&hb_:SWI=.KQ9O8iW^&pY?2bRg[yI%[*HVn:H?m%[y'3<>/qăU"P%<vR*f$+,UH(?9<h#]j<7ZFt]Qm1EYv1G+]gU,5/,3'$x11)y^+E/)H71F2q%iăU"%q>Qd6B>b/\*4FQ<rTO6pY8pK:k(tDUM=P:NxY(F5=J_3J1b%-Hvv9\%?.>hG9HăU"#_Z3>*Er=K0C'M5w3=fNHLkeLa^H=($&5'A,DW]/K.KP1HOS3u]p#KXMmK#wFT:ăU"vrGWgtidAbsfZAkjHn9=FY\I]H3][IZ0D=UY?K4X>%PakwefGQZ>:.l-1IS64COăU"\LGy.$Zq8-U7^Sk?#je&aJ:]VF(&<7np[GtGS7)t3a8lhQx_ro:m'3&*%PL=PW)ăU"\-M?(U.#H(3CU-%i^$TpJ_)=\m0Y4KNY,vGtR0fF'$tGQG[^KAAe'-Ut%Ct7XW9ăU")dR-RB\Z?cQIzv5bSOzOm]]-;;o^dXiQK\SX30HH\w)]:_*aWLMd$;HQC01]mzhăU"C]1_'wM0VI&NLIvM\B.:\.(nbhR,\\?*CtuDfta4:RQknY+u5q-ILatt*FgC['qăU"xYx-\Kbs+=[&#rGO>&E)Q6hm9v9V1?E4asH?qJ#1g3.;F]b>tCngI+,K'ZF=^2)ăU"5Q9D-gd0:/WN0dq34o'q.Xw%QS=m^L4ATr).'8<y:M+Xe]Ps:)XHx$x1k+a?=b&ăU"ntov3F1:62q?9SLsg/Bn$0A[Yuw[*BmnUUN+_&^KWIVTvA07tMYQu/9_AUHAxs'ăU"3i[w&V/fpE&LNd(xo]*(ykF%b2P;'e5&_>]-7.E.CFSJgQk_=bk<jY[lS5_qf8#ăU"/.B*refPktO#]7;91*9lwgbImE,%j'/94UlgNr>2z-ei&P\p<vGgaTq^5UDr5)tăU"X5J2/YW])=G)>^Ak8d(D21B,Q\e_[[vM<$w6B$4n*tybiYwK2=xTg#-tG_ARi,9ăU"+g1lA*R?B?IIhTS\P%<K%^3GKqP6P)Jc<#(<XHStRkbWs/-ij%I4lcBV;QA2TGpăU"0uOxao&8jMOk#9maM1rLX]FRAIUCp3WI+ZLK4<^sMmOLsCf8ODOG,s^7FjrL-;]ăU"JfH7&Es9teW$F*3xox',hkr)(D<lpKGxm.k[SrA>b*5%jZ<'00-mW;:qsQ-GrfQăU"W#2e1o:'Z2yD-3E;&7KA/(($s2J'&VM;''qOI&;XCAYuyJg]_oB]K-SdACQ)SXCăU":\UCgN2]T>]K]8zxQqtpT-kSXy^)CF8w$a56Hb%ZGW69=E[-DVa91#.2^%S%LwoăU"g>r/9;6j1OD\zA5JY2nf9;%.g61ba8PScZ0\Nc&\:M7=E[f5HN-_MW?Z=?I;(*HăU"()r?0O:Yc5(%dC60+gp%VkJd2qzV/YB^RYwngjY):KGZbD0tdIrr7FVLEgJdY+săU"4mA%e/#52Shaf84Vw6Ek2S#t0vI$:a\cMx&<W'i*q;^wcLpAG^v#kf[Q,'TFK'lăU"_98ev8Q53^\BL#7f]sgp0_<[CAcscKe4cC5BM)[SGPH-4CD#];,L)3'1jg&H=S;ăU"X#%qdDI(45(Ox):wwwRHgIp4j#B9:;v#[/[2rS6:7c/)VQw^YpSjqnO#L7p=_OnăU":Hl^5*sBz#&Vyq'1RgQe[=(&>e/Pn0(R[?[K[L?J+M7)3$X*SGWaplR?P&uM(2WăU"Gq8DY,=I7Om/-9$8bZhj=xaG(a[\gxWe^h3xndH(u$;i*r;%dyjgKI1*G,L?5.jăU"W7uDFOQ\1*HZp>-6:>b2t%gX=^*mhKAt_&M)_yN\RQ=k%wDs[R5w$&#%Reon=/[ăU"=[M$VEkF)-c,okJ7p9NZgk7;QYJ[?7^8Qi&i>m-M:L,8[KGOBwCtyE*,Eba;PC4ăU";uY%;Msd$Y8^)XL6+_&7i+Q'-%v&2j7wrCz^xCR1akRXE-ZuqU6F)7uk^j4EvG]ăU"<Q3UeT6'=\#uO<rc)[iO)eq7clLJu0]X-G'eRw;w2OoT'.)8syHR.AgB[+T6[&aăU"fV/a](08P(Z8T1eQD^Gjt1uKB\Kt8/\=A$0sWPp>I7f.)'-OXM'(%*0753Rs3_găU"eaw1%m)280tn3I&/m[M#O\ZgY=iRS^=v>Rl(#Z'1-+S,f<_a$\g4%u;A8>Wk5\CăU"ued_8TG9;v+Q/1NRCouYHH#U)QJN1lcFL[OKc1e'wH/,.+Fg9g#9:c#eh/(:U['ăU"RA0=k,1%XI19;)QWf(1<\BrQ_:w148jGSJ)R24KUP7uW(%Wq+e?v(CLG?sb\FUpăU"mu5S\f?'du#/TO'H+XH5;Zg'K>Z'B-P_Q5].OS^;UW<]C'QybGlHG<Ih%S&/JWqăU"U\;c78lN;)8RmFROhS+C$FNBU<jnC:#V[&;KkL3PdKg[6PR=Ke=Si)1:Er?$?oLăU"Q[A*HfYDt=mY[dm]Lck8Q_Uu89xbD]0O#C*P$4)D0x]Q%JEfrTxo4c9Yy2WUupPăU"&-7E4g0go&ho;,Y.CHa+9I:yq#57'.RWG04+X^=j%#nqU%&b1pvV'1DqXAj[$rgăU"$_w+P7c_5GY>w$7i?f0;*J5EC'[&1.o(Is,7HCJ6WH:.1<Gb)1p*A6BhE*%?TS\ăU"eTp7o027uAX.5MCVkt[zLW)FZia+47dGY._KtG^vl58=3I/gJ</S%u>9a=Vu?&TăU"i;P)Ma8[nzzn?1D#VSDFEq1qcw2/Z>Bl8S^(#V4<jo?%d8rH>uEkttNoAuZr--AăU"PrNW0:H$=S2F'QtKkR%q<[.0PP[4^n]JS&),hHELZ0^Pcj3l%XAGP)si7YY)6n/ăU"=$C[.Y[vGQ02W]fTB\:<t[S7V]CxxlRO=NUeV%cjU:yC=nplp;g691)0Qm;z+u[ăU"k2$T=Fo^[fQRXYwI,r0tYssVE2md>[c8v,OKVv4wadGA+.+2(-+Y(*P-E2ARUVeăU"UbaB4?S&olg7oW<VVFeSe&B++C5CZ$BH_5Ks6nJCCIeIx9Y;:F-+svdO4/bT2q:ăU"w/)oaFBRtx$;Mg&_ic>bx3G>?PdE3nhAR<1Luam/n&&w2K6GGV*^_)#Ui%_[6UpăU"mr+n_M%:qUxr:[Pn<)PjoddY^eU]$(3>pWTA#>t6J+%Cs_$kRsBfOGiZ+5Q^acdăU"3B,BB1JV2A:CDRUkH>U)Ro(jd>2#C4%IhvSf60jg\D4*JQ?Ml-oBb/Bf\N#V]eQăU"g<?6+155E?)BOPd$;?d+GTIW+:cd4WNYk\'clm#gNNERPHfqAI%Blom/Vq]0*^lăU"Y;3+.G4:9LX6j3PcYu<m%(&U-0;e-/O<7D[1V?Nl_FsX2T<$S^Ng;<JdI$kBmC*ăU".En482*+15/ce#QZB1AT#sfVUQIC4zugfoO6a*jw8LI?12g>=O+EEKt>AD'\=F6ăU"(U/h+n+6\NZ_q0e[pZMAIO60[>?-qu9re/1y5Ygi,wgw,x%H1H7m<GBNAp]T(24ăU"EA&VVgmu.=[B-;KQF^D_7Y*254jL+hZ</rf>Bq_Y/^C9$3JzZb:T0_k2<rlrBWRăU";;P[e2CR=F]AjD#=:C8k?L(I/NRB5VwleedEDlZ.Mh7.MR;)%v>NQVh:<<4ik[)ăU"H#YjxDyu]Tkd-#[5,i9ZAy6edc:e3'.I'I+01&$j9?<;7G*$,r$w\=4Ir&Se'mEăU"[pKb0q3gmB8.F/T_aTA?Rr5hO%u63O,lnFcKKWKiG3BSC^;U2R_4K,$AX=HOa]^ăU"g7-7_[o(g1m1a1]I;oF4vr(m1G?J99tacl*Lms)OF]:;t0fn(-&qjnXw8M[mntjăU"\6AGJ%Q%9ATb)o6]F.2'ciY;5(_Wg6*,*5DUYI%k.t48MmAxW5+8N%e=D/np71,ăU"&s+2F538Zr*U]_C*KV*Si>c,CAYfHxS36s3$T,j$kVTJ]%R_lf)[%qT:fJ)I(S[ăU")_1C2o^2')NqMsR5mkR2ioR;2C-kza%pIzxLl+,Sh25(+Ja*i)D77.:^8=kgLNoăU"Y9[hrp[Z;$A&Ik*'uRi]iyt]Sq1;eWrb$v'MtBNN3w))oo9Fc(\P3sVk.)g='<?ăU"v/#ks&SfA]-Bs0<-3KRi&<<TD))3toT3hAN_)V*1VBB7fRH/\c1OC')%Rk1O2E[ăU"nA$YGJ)DGr#<.W%/TAW?P\UqMTt<aq==;ue,*3XHWM,tHMl%8w:iRV[u_uvoP2SăU",ayoLnR4.8i2WhJ4hjl-PdJ<[D*e6Ej&NQ1GMXdn,1M'>ZFfd4414VR2fUdeUe)ăU"re]UG_0:=-sTV+FdU2BT$/Cp34JLA](0ABk<n:0UrsqwZ:o<Yxh#-hsBK9gq(UqăU"yub9;iYn1qUv#?<m[Q3PswhIj];bgx[M$\5MajK2Bgc'YJn;LEmCm2VlF\fg6;&ăU"yH0qWSuqzgpg0kf4Z[A-QuvX7uk%Bb_Kd^E.shjf?]iA4gaO-)j<l(uW/FUZoi/ăU"<=kX/h:RV/2N.4]5cS,B2pi5e),D]E[s=TEqh0IzRjNsPbL[^:9PG+sR.CTQjn,ăU"QejLafz<**M(Rm^Equ.ki&VGP(HA4mp0LaHJ*aEr;SlRMTaA-P4P98E&c%L/Xg.ăU"D#zRa=-*^4b3qU%INVup-w$UeD0yCe84Rqr9_,ClFx*E]JSb54eEC=HYtTK.j'făU"JqGpf4<7,6/A_98$MqE7$is=A'v.US6Tu)<LNVXqc/)]Qw5)pg-s?,*+s>qsI>.ăU"0T;[h<S36\wN*L.wx6fsQ7O>JO?C,V=giQLEcmy3hQ\72Ep=%&s4ENQ^e&/=nEuăU"QH;c8+OYNNjls[Hc?U-wnG+(v/A2*VtREaD=jDW$B?eAeAP=V5;PNapV]k4dmHIăU"Jl)m3BG-_MxZLDEsb::BUhv1fG$XO]V<Ops^i,S-KF&k\n9VK?+6;?3C?NeUPq5ăU"Ogdn5(4suh70_wW>(QM.kX#,f]-k16tZtxN03x00P^kT?,EAe82?EG>;awhEH?=ăU"ip4iNN#XOETy1BOMAoKhqk\l30BGy==[_<^&'Xp]SV/^C9V<0PqCtU4f&1;7._3ăU"TeTUa'w6-W(2UoeuUfUDOcFJho+;97XB=Al)rA'WD(&a81iN\[=<[0j-*pJ-,_xăU"i5W2,w*EU?xfjY7]N?$U-\FtR7>vOk<iM[^wq^9c'4WkGH%lm#mk4O#t8<iVK0]ăU"(xdklm^x\<5-HKsa17\:1AVKGh<ohMoJxU)SQ1ohW0.#3Dr*a>iFYpDVf<9YoUvăU"FG)a]Uz7;':V6uA6AQl19/9AZ[\5_0jkQ;YB2fy##HV8?SXvtYiczx7BVM*p:5qăU"^Djsv?t4V^?Bk^SL1oA=$82Ur<[9Galg]+G:d*8YFqpoM:,6,wpCq1,P$Kx&2$CăU">R;]<.rmqlI8Vl)wQ4b$M9bkZ)rApqlhoZ)E:G&sv]l1/G_E4(FGLMF.-sn_yk$ăU"MMmuB/9_/1o$Bt3D[KNO;*C^J;m?(?x8Wm$E7;g-Yhj0*-qEQ1AL(bJ[S+QkQQYăU"h_tJByVh7uI-kWG0q_dV_)KNuH'U)8y.Dbi>-QU4av#Hi9J27r\8PDn>X*$F%(]ăEND SUBăSUB VDăU"o0rdXeG0UY>%qRZ)=P5Xe%+]?=cE.H*O9BfFy'FrF_2oN].7OSay:;Pd0$-[dipăU"oThmr/J'YieLIMG;I1F7pM+=[)bL9]vL7DTpFYW\YMVA48$)hUW9gGeSIlsRyxhăU"cEtHD]W=w.T7#eTg5P1u?#Yx]963.)h<Eb]\F;X7[0[ls0=XOrE]eJ$%d>DB-DvăU"zdz(G-(VSPo%v&=r)+T[qq(T$Qa?pNQJqPdm]/adW>=Yt_Vn:='PCwo9Jq1zg'UăU"yrnkWkVCC&13[%2a7(mIWq-39+n:o.exOTY#ON(ZMvbR&cH2auf(G*LrU1WYTxlăU"UpEe7o/2=NuKK#OQ4F9H'q5=YfY<_UOs=O_CI*uXK</acD+[LvLEhJUGb=AgU5oăU"(5).CNxQ$40p7Rq?ak^Oz]*mQ0f8\UTE(VA\^Nd7gMOYbb+)Tq6v9f5mGRD]oU(ăU"8sB.CZbK30-Wo5,*%]CXl;u&gj^u(g0Z997IEqf$sV3)b2EguDKsb>OBW$8pbcWăU"OtA-&.ktN9R?76np^5PV%+104LRU,:A:-YVF#+pl-=1iU8YSj=r%_,#Pdj1^?/QăU"VkMjIL_JM;9oIogjaua9TQ<e_gT1ReT$RM#TrTktN&Nid?wWiKzQkmmFv0g1i'=ăU"Jh?;hf:j4\3fa09*'TW933N+>8O#<TXm],a0+#C.I('FnGTq%a89p0B-SW_+OV^ăU"$VK/#V)rK<2<_<O2&luJK4VZ+n0CW%o04mpC#%bvzw)T0TqnDh9[nHvkD5EF?JGăU"eG[cY-?2.pT[Ns1<D+vEF\(VjlV'am&V9k:d#+VM]0j[f>23QL/gC1jX0naJHCWăU")[]iY8+DrddL??qC=D4SetN)H9O)HfRg-[)Op[K1f:p/<$7C&w/[(,OXk]E]<%%ăU"%fpYP8Ca9w..o%Z\4v9Iz^FAigxC1%ww<Rg9Y-LUW7QptU3?r=K%>LTWh7*uZoqăU":r+EuIN=X.o2,sh=;m(3GGJ&f0tKl3E'Nu^m\[g1[s9c5jUwYi>uPH.>tPY;#QnăU"^kQFfOcE/17U+5Sg);7)\$p4*r/QOE0_lSIp7,<T3BBswp*Es?#_1,oe>(In2IQăU"jloMR9j)M*e?dH5WI#Yka'$GErPg?*KZ18_G1dc$CoARU01*(_8ql&*[\5tO\-:ăU":[MJzx*YZAKRr*jIVsPhz%j;UtdHFR#'JY;ZGDIMu3GF,NP25PWrNN*xO^[.wW,ăU"UjZ/9eT)7&.I).[;OmpeWf<$4AlLO$+<h>e/<$e*4Pg$.tXRFBRBVl,f(Y:sBf^ăU"/KHoO2;-oz&y6*&U^uUoIDzMd'-gA8h5<$VkUVs*Mk]2U^Cu.j'-<i-1LutOp:EăU"v)'T+s6ix,)Q3F<$Q\GC-BnK?mW2QnNp:F'F4COevf,52%l8lhq1*=-0X[^<<h7ăU"C(k*c7,ep[B_)u;L:TFjIiF]5U#OfEF4Rw/qxb'bi)px2'$i%a(f+\A,S1dA(/wăU"leiDEaOW+0Z'N(l6C:w%1u\xon.R^AAiReT#ba+nc)P\A-N%X_W&H5))4y85:(găU"p>#G>_)+QDi)QS(T=I[70UX2U^A>n+kTr/+XZqN6v1$ir\^rivmJgojc*%0AChNăU"?=iw60DYdzof&U$VE'MiVs=G[cM.62&.sO/bZAw,-B>E]up-;utzo0\&vU2TrX0ăU">Q9axr1^d;(1_><)0;+M8aHw$tf\Nca5P:xKHqGGq&s&qD#7p#t[bC)fuZ)LX?TăU"TP&r2kq:a0#K*Bi-5^M+9ji[7U<+/G[Bx#p</:V3eF9^Dmd$AWhN8^4y5j$T%bqăU"1OD_,P0=q/fGlBj_TmmUKG0geKSaC>8lxK&CMCR,3lI&GugHyIDB7tqzfPLkMgdăU"NJ4t+w\hS.S8LZrtX*pWHq$QnSuec1Nkl6nXi&1c-Dd[yvuHdkRE(nU*&2#+ZhRăU"pHpDbdauwJ_l8n83tCKHPQXKeS]*[+,psH.Sp5w5=;ZqR:>Io[SBnk/_k6OlXRRăU"wKefDvn>G$8]_DfTqLK_2BnHX+hu?wp+o/6##J>4.Mt*W6v,FETD?xlVd<7+TM;ăU"lBn[1D(N':pu*9#;3VLFVH;e#U^mzIYBIXg75^ueo(l+n;3GJQU?D5fYEkso)$eăU"^Qm&7OqLHMei2Cj\T[,P<'2>.k*wl/q&HVXOC(enlYN^ZBZFJs5INQ7\uoUehWdăU"69Y1E/t[lY1+TuuupxoN'Ybmd5lSuqpk#?kmT/k=E42Q-NwD-vf6x5FV\O&FOPAăU";w]N)2fI9hCKnIZ-&_.ZYwr2rGKsVK7kE;d4^iiA__8R_%0^?I^;J;Rg,JkuQjOăU"MKk-k)s#3z6[t_#chBvM]Vuw'Fh]Ra_'V8$$'_lL):+(B*%<l8<1Tb6u\W?GrxQăU">:VNA.?#P((rkg,o\[lA=fU#F+u.hu&IW,IJNCU[^I0=9k8_LdB2Qgq$73?NS-.ăU"chLixd+H[*zQ->]k%gH]WN5EOPRAUdE#N6zW2w?&5Ct#X5ptOxMhHN<^lU%.pl/ăU"$^hD9LJQo9^&/%e=&V.#Mgm+F<\Pe;QfnYvx2OHxU+AA^dZ'ep2LZi5o7.?8xq%ăU":Ni^XXsxeTc5,=f%Zm[GjA-Q2dH)JeP-Rk9kVVvIKpa/SEo/&lsl;gi['^S9b)căU"B1#/zmW1CcJ4=k<2bbxjEnS^jmcgYu9)t[-evKN=_9Q\&,k/df^%nys*&$FOcMFăU"SH.5NQiZ>n&A[kcfKc1g%oM3;M:tZdtE#/Ipmu4-D8.h\F):L7upo[h>s.YGsCFăU"lNU+VVR/vfW?d,C>Q8Q2GljEMbnPT#Q:HYFI,MAsB8$O7?8eS:jY-NF0C:X=o18ăU"-meUd<ger:Sbn*Dp&b91TR$_m-9+.7TW)C=]'%tPmhhZfE9K:KN+zAT<vGb*:([ăU"1D'bMb1i*]5mdI^7lFY;q'*rnoNAB>b/2#_lOGVB-$t]<K7$4.o0OX$7Tm6leyCăU"K$<S7Y3R-U$dS4#.kq3f$4:zT4OZs>w>LUzn:I?();,7(sDs^DSTUFQ9UWctR(săU"$35wlJqNF=-l0l-ih\QhO_psf]Bj&U>0Jm\K(D-f2L5Ua63hS#xuGxMD9E,lBFxăU"O.oStkM6vDhnhjb[E(ZkC3M4o:;IU6ptD.9-URK:67vtl;Qt8,clqW$DlvwQL3(ăU"fL7r^>>74_,oNoRP9UD]8iJiISjdj[sBlQFM)aeed%A^V;<I>SIt[(H;2J5\ic7ăU"JUF6-%5cMnAiwIhR+D&[Ou6&g1e;8%CnrMH/ELeZ0IMbb%7UZNMD,:k-_p=?AhMăU"1^jSKkKd58-*bA^2v9_GW+<+Ab=ol9tgm.VO8YYK,?f6bfQ1Sow,#B>M/B_;qzpăU"ko5)_A.+W,zvH/\xQI0i.B*A2M=.hafi.1:SUiPNF-KKdcam&ogK5mt-1p3:fNZăU"37m$J?Aa]bxb?OCb[GaLeiFI;e:nvw_fA\).?>KEW_i^)kp&BAktvNkdLtpN4edăU"CpoZU0[o\eZ,pVO&&a$('6=.>[j(/3pIS0KWJ:kKZ.UfRd<<5H2>-#5:U[B/6fIăU"foktoUUBhLTdaDkR(C7n\Nn6N,/&Bad]+cY*AVGJBC:91JLsOqj.Xbf]-k2,BlnăU"msh<c=S-2VGlW]8Y*ogF%YId,P\JgUi.aBU^^$IqQ]XW4d5&L)k6Y&0)N+)a6RqăU"GJw;b?k.5mZ]h8SO&;YDHq-I=gNI&WQ-=C8uaGVWU#qumcG4kF;?;e+?fk2Xu7(ăU"nIxjrq\%h%i5S(ggK#Q;dW,\K>[)3eR(;L7Bn?C#^^eWbiRN%kZrKnMw^^NNha[ăU":z+IR3K<*ogmJ^jwM=sPwIcg6eOxHo(L[8lv0Q4]S[eMh3S*O$NSwE5_)baI=mRăU"+s_482/yXi'A3g2\gW4GT1BxIKho&MOCV>XG)?+7]_b1'*c?X#c<C=gi5Pf[cnNăU"8(;MB(qIE+*u&FEzOF8kaJ;#mq#9>&6utdM_:1Sv64deNjE+.dX#Ft-^J2ZG+bnăU"8(l(FeenN)7x=$KuRhKnL)jpQ=3dPRl+GZW1&\\,LJ^Ef3hMWA0O_5,JH%Q*^uZăU"tPTjC_:A4PgPx/wY6SOw0oB7VTby'A;JDI+8CGA7L<k]i\535-;lKM>htd:'(B[ăU"NJT=Um(MLnQTU(*s1QPx;D$\P8zlj7&>>>UnC(8>al2S4qdWgC&+Jcol]Rp:58_ăU"3If#TawNxMTU*Nyhhet0T:_UI?EFkMqhJjqLa0v1ro&h&o+'&e*WE,d'gyF5E*ZăU"8>=r^Z]i0WRoZ[R(Zfo<o:>Pc(;?lEIJpO/q#E*^TPoXLqn;UD*t[P=pd_XJt1năU"M#L#[>j%Chde/7IcK85s'Yv59s&^_mw&U4\ufRJr4e9vVGUSJ\w&'E/'olg>mt-ăU"wAJf#?'8=m9$]biKVeJi2rkGS-;W3Ut*MSd,c%g7ju(iXhELCu4[pz4EQ*T\#$lăU"kpAJESc>6;MO7t;Q(Z479X9o)G*96]PgEq?ZIpAgM&3:5U;PZM=J4i^x3rmUqFYăU"ivg+cRoOCc=$'bVYgHtgG^mB_hy5<D/l+wIB.W^))>ttbCuLnNaRA#pUC[8>RV*ăU"?.qxSwNl,lN*I]zeSqSLRK;9GxMGP2IZnBkcNBg[yF01$UN%gf&jn6M3D-?#;LRăU"d'ROR4V4;<'dGN*s/-D+C[jt4qt]2Ozlw[-ofVYeXbj7?INC8n/+%r6>&1W8$G1ăU")>v&Po,.Z,pFKhTC14e-$8V0dU*<NLJuCY8='eM$A8du&$&U)6rBx.m-c_o=/n6ăU"DxOQegbYgt==,ABQy?Y1+^uY:lx^+M5vU%G+SvdrfcpD%^ub1R,7h[VSt<YoV;DăU"K_6cxaFd]8<c7X'sj$DC.+4Ds-]fC7EaP,H0*t3P:xGbDq9Ml]SyXfH)eUsDKWkăU"p-?5t:P3-vBC8epmXQ-x_3gu0rX:NpXII/L]\-)Hn_#c1W;-^I4JmQHv3m9PjI$ăU"Gw>F'tyF9%3mje^C&Cc^1p)=.zJx]O$k'B'1vsR_Icz7n*gF=]^0JpEQJEZ)ywEăU"F=ZnBvcgAN4A/Ajt*^tvm<(fYs'[L;Nhvm,aX'__ju^JRr3O1dk&Odzi4i(pE5năU"^s:l#=6;#N[aP32^/qE[2uk5\Tlzf(pxQFSA>J516k#Y0Il>YlIpO\1AAZ,nH'lăU"Sd_5LLSX8C2W*o.B3H'FkBZYf/qRvurI=6L:Ls[qBB&t]0CiDS.8>uq>(1fT5KpăU"RlI$5<B19O:I=56jj4&/suB(x8h)YD<cE\v?dO)8Zq+#v/h%rh)dAqWa:Md,qA9ăU"SX_?:hpGpf^)zon4nM5<M>Wz64URz;i9?94TfB4173f;ukR0*(;3>8PAEoZB0G:ăU"canf&\Cm$H.0U'8Gag$<'FBqz*_W&-H'0zj1N$tA)O0R6:'3U379r+PpHm<riVvăU"-(d>JIYnNXvo2oGd(app)Jv=V.]#^,(i53(eIo,B[ziB\V,[Xd9K)^(8MQ1uV.zăU"OzUd+9&cruEmy;GpIk-u^'TSGY%0kDB2u7aqno?F'pUp>MH33dY;wXBfe?&V)RQăU"bH>9bVV1H:pSkf4x:SxlU;1#s&L;u2PUAww0%&_?\[RN/)Xb:TE4s_M,Np;SBi3ăU"Bym=d;^o8'Y>9.Q?Po?F^u^0X0^myPq9esf3JFflc;+I]_4#<RYoRcFsUDSeZw[ăU"KS4z$,OvMzND09qioj_xk0NOxz1FU#08iZg)MV75L<ed^0.%$S4cogi7?1HfqlfăU"SjFVJ0o<%T(/uK%7C\Ibta%6F&w2fjzBw7sbq:nv2Pq7F*ZV'Ks?17D'GTO.D5AăU"AK\1V+ilrngn-];qz$'U-PnP#4)FMLQ$6zkZLD(otM_]p\+gH6^zTFduXVpOtjgăU"eYktQVnQpHp%ZEJvE1xe596_No1)'^]0SB.FBC.Sla7[,\D/nuC0s)',P\UYwHTăU".)CJO).wGp>zTcGMU2L%JBQ9Z.vLUn;Y9(0PrD394H3YtX\B+X#jp,R6]VQ?)dPăU"r<kvE[q=Mv\;,FUObcwVbCry(YDUVjc/W**<pa=8?aj\7:ug-qwC;pm#C]B5zOxăU"'?lEkK-2N0wx^D;w6&:t$>yNDmAEmO_'BrGU:o]E$&+gZ>Ep;ST_zNTH_upOc9kăU"K&Gue7Ho^<p_17gQ5x[h7,VMSD[S1GD(j?#j8'l</vM.]Bp(9ai]Y1;A5[UIW;.ăU",0&jqe;-_/iz(H+lgAA\n03K$\IlEx#_&<UK,-tO_P0eYyg&+%2jI:p+J+7sfS[ăU"RIs'c=M0/+hR4b9.Z8[&D5*0_4QjcTKP:kq$Ehl9(5B9ol[7n-9'1hkB&yQrK7>ăU".oXf9,-sSLWPjM1D3g=KFZ=,SU0RCrw2sc5;,k>KZlQ3?s(mme;)%2xH*idS;K,ăU",g)Ohjs9V;(\dX0'$tD)D>x:mdkljm%+2M3zego([U,hSbeRJr,Df<x;?t\zPi#ăU"ZlUX&PJgjgV-A4_e>DF)L5&]/cS'U&;z5br3P_;,LFYAeecEK0G&SP.42=K4n#CăU"BED:tqeLbE;yL)=t<shXF;Z)xgroT,lRiv75A&,8tr(+WN)&/2I7lSE&%g=KLf;ăU"yHsYopwSGYl%XxUGoqd0r\c8^nT$$QGw0Tq2.doW0yrwt%>E3e:2qb6'4>]a;c-ăU",Hi&WyC=,z/m)a1N1G7;j9phQg<(1[D07it1?aK;Qcp:7[IQqtApKM2%:/L&:3#ăU"m*KW6=\e.R0ct'B\Tp:TiX<q4Bp^4ao^5/cn;u'ax&r1esgSi;wwkb,6#hqUAe*ăU"Fd_?=XvgN,OXd(>Lhh'#V^+YS7zg]iA0j_(ac+eceg08Hc>E=D7*kdk'(1k#t_=ăU"[f,V&pN'-0Oj4ExPKpKGA&a=>G?ml-uiRKh&?FkNFGq<AQ4O4svB8HMwSUlP7ROăU"g)sy]g:vE_)e>,QD1PI]A,ywbd&U=6Dpg1q0I=T%=(z-%N;cSOipd;,bJgrC2uWăU"3Y5ggQY&CY-r.kEV9Wb)yJ&fmM_qq;b<tEqRq2CL/V9jH1Zo37rRE0_1%#.wpr(ăU"eDue6_ztD490?G'8XFn9*=jA=&tzuMSV3B*XK\&bgX-DJ+DrlV(QNFuWm);^MF'ăU"h(F1b%U=.uP:(1%^7[QKT+D:a-[_&CCoSv3G(9><s]7J_iGPGfe,fZC\h?fj.roăU"YeE/R;wq#CO/B[)?AD8ze'sm<fY9KQjbl4f8kuL1lYjBryh#DzLxd#T)F?jl?ZSăU"Yb1CX\^)otHS&RCDE&I:6g=Q?Rfbom0c;E<:kFR=:(bF.7_<V^s0i=L=GYwuD'ZăU"i8pJjLbPBaTEoEsH.X\h=2PKR;E(0Ek8<D)c#/)203(/$%B=/;,mWeK6Xr28raoăU"+O1L8/jl-Sp4JUjfhcM[fq:M=F^+jo=eh$cu5^CJ)Px<M#tHqB*sV>*\/vnOs,LăU"9B^4(;$?2$.B79>[(*5X;ygW)Y%*,p]R-n[tVL,#c\uuF.$L,:]sFuqq=f3f(I6ăU"idoi^Xv9JgiH6RVwQDbeHD'UJuO=4U;trtx_Z<M4qT&\3y/N2?p_=vj.xj[A5mKăU"LlFb>X#'=D;]L(Ckf&=r4])+rIr4WZeAJPLQa(\p1l0WPYNP.#J-bkflF>i4'%văU">ampg0eQLhFKio),n8tN5VfV0=<he?q)+bzp:;q8P/4/YhixlJWcp5TUHUvT&FcăU",8%S];7wa>Goxi.F>4Qc[1X_)>o)%.t?+tTC&qa7AG?#7x1bSBA4hkofPSLnmbJăU"NMWPi9seWpfGe/5tI>[4rpH^TI$\q^D/NiflUACYMfK7?<q2<k9X\Wn-T(*#a1AăU"XoGx*C-JmI$3th#kSA*LC/m>]caMND?d)V4P9Uyc\an/o:[<1yrd#he%4t.*vNGăU"KocY#h\sQSW^D6EkS+e?Vsmz]7#uhcRb*8SPlDZa[(]hRu&6jCc<s4r,u6hB5OnăU"V0_Q-w';4cvjR[:,N3F&wK+[FM=I<]iBE^xlbPkGSV^ak52F&&BcZ(v7d1K[toXăU"A*HSsWn\p3.A?PsS9AAZ?+.QS4EOU'/j($3&OCFGZ64(aP$#%v/0E%R\$v/LbXfăU"PPDq%N4%r4]eGPXY2-21.P9iGuCB786$.Z[m[mXWux7ujBw45Z3:cGOai'u+);^ăU";P7]vQgm*#d]NLkT.+_(kXFbx7K5xI)hYSG;8YZL$=SqjmwA(RaXW%4Q.0*KRRYăU"c8E5V-'aZV:q;(731['9ZQsuZR^QK_e;M/\A;h\,w:#9WPO[2Vy-oOZUY0+-49qăU"5P:#HL$pn5AsqPDtBxPS1rO]S\&)g9ID#.W*Zxd>m=g-4ZLc]y?f4aFc=A*#HeFăU"Pc;D+\Xvs&h%LOb%iCO)Gsh:G24QtBN#IH*P-wIqNiv/W5QBDQsaQ:=mnaFFhEYăU"Y<O];&RBWmog5QT3Do7f0>hN<2Zc$cNO%qp?+5-zHHpPxW,o0n,wHnMt0RA6UfqăU"mI\F3+XbSnBZoGsBZ36koTZgW%K]Z.iNRalNZ,A&rNjs&58$#yRg;a2ZBCIpB]ZăU"&;&va6:H%V<DwQ3xYyg_fU#a8ygSt7pTCv:<mmq'N#'+N$xonK4LBnn]hw/u:QeăU"glK/8X;L82<HmopRs,7ZmRu\0H37OWuX9iKd6->A?V8fXiHtZaN9svjpLpiVYn7ăU"V_+Xaq?er<rE%E50^HYIegNJ)VE:]XxCj5$h)[ZL*f]SV&&ym0^eGRUmOmRMOQrăU"?Y+1M?H];CqLw:DOnZ<Mg.A,He,(hO.)&p[U?.X,uwqo7qt[/1,VRdPG7MOg]$<ăU"0dTf7N*-jd%7ooU0aV2IdJ8fa5e9Qz(oiE\EHoEnSZ:Y6l>oU1If;YO>ZqZa7K$ăU"A=5IC5%z9C6aDkVR+C,*Zkbu<X>gu:q<L0?poU>aEe2.^GX7NI/9lW'>6BsYa;NăU"<),yR'XQ^TJ#R+Qc7GQQJeR;+tdcz#pqEg0Q_&2)AqUoa8Flb9l[cZ_E0\uIs6^ăU"aB4Oiw'-auOZd&.RjzB'Z_cf>8-tqulUR&UNYen?(p\;\12%fZu%nq-V/=9Dt_-ăU"K_E=yXCHg4i5rQ$_5pG3=,W8aNRy^GNevSiRJThNA)np;[MNNf*&P0ZMx5M<gT+ăU"trEF[5zb+=)AW2%rpqN<YK[DTwFCfV*/o())4&:dm:ZE_k2cNn]4_[xW66ofj.hăU"nz5Z:;Wdrq?Dcnfsc\NE.\/6tq$32nR6d%5(6mQ&zWFOsMM)v[B6zE+t;Yq%/mkăU"uV:+l>h>NVg6f8?tARB6/<r*D8.R5C:rJ2v)8)h2=q>_C>Qc6,9E/wn(e'Ky&DcăU"RYjY'Wj5%?jpz9=cdC%H43yo,]-56wT3<c0+lae2:W<Rv(E;:u1gYh%5/INt-,măU"Pz/8>d#A%9/M0Z\//nyITCg^SN+[uITh\N?.FitgCP'3H6gk#*HIP/5ueKw8Q/kăU"RS?KY7l%n5w#Lr%:Bb:(*+iC;0Qu0_GG#C[<n$n9?hhILE>:mN9j#JbkH^i6ufgăU"aY;0f[>pK>1O9XaPw&Ur3dW7CNC50Jy3w21S.rHk1G'u'3W6RO^ti,]_,)TuN/păU"<:jHjK^$Luk-UFn%EE.CMt>lc^2>NG6$0lB-b'%TKLC1H+S^U0RSAz*e,vFF:5răU"u^^4dX]A<9K(PrCA1.\O'>&r)P/&5,4H+#l/+Mqr5dnF5Kv_NCprf-;]/D&WIq:ăU",O$#Ta'i>YSY_;mjZGLId'PsVbPe+FNS\\1b%(=R3G4uTH8UmlR-*/7/)eGUptJăU"x/k(YI2Q%W8-I3%M0>rf=c''ltBrHh?5ffVt;)X32&p'3M>2s?ka/g'mS5.+1BaăU"(6\I>Y9;QCWQTTqE6bB.\^;#OTZ31M2;du<b-VR04Km$d]?roqb>4?JiHR3Q?=TăU"Ih<?5Y9wte.W,lOljkFuqW;Xp-'7fO)e\?ITpL;e.F<jn,oS?o#PQ(L._LB]kdcăU"9M?UGj+T8^Zn<_nZOJ<5M#5(Fn(T]V:nhL064;S6Eo?LB7^sUq[mUK<y[[18ZerăU"iDzOm>0];xeJrDGDL[.97TqGxIWK33Xro;xBAL[%G+FmtoBBo;$#;noq2zt'oXEăU"1kcnT:+sI5PA1[xDp+:FfUNCnMUZ5E1g4PNb;EV,/fX8Dd4b9c#w3;\o?U;hU7SăU"l8NdQYMIN;1%Wo(Nr')p)&sITo5q=MypmPRz]d5GdnAek6>Yq^>dz?$#_f9,xGaăU"C0e\4/*ZeiVP_et)nrn-2gIj0;J8y0skY/hp^x*r:PC+t+a,3Ib7>>ZKOH]jvjZăU"SUpT'7#SB[#w3Jdj(XBfMo;3idFdLAaq?HCn5](YwG=hixS<s]#8e7+zlj;eM[AăU"s.(.J3*OC>4RIPq%=B#O=4ZDJV1o/3snhu=;l2qUX*Y(C9d+DQh:v.YLrPv;;[-ăU"YV:Uj^hTSF<Nfr,=8X)M70qNETw'<l3pQ=J^g?PhigUq0J,:9K8-9B>m9iHf'K]ăU"n&YqZck^%]s)XT-dir./C\28-:bA:UEfB'$s8Y3bEP:5Q.L3rR.3s<VkhIl3V]6ăU")RdVu<O97c;:CuFG:g;K5$Ee7%G6\E$=X*RitM?OcJelyTP7x=B<>[Fq7',#r7SăU"RPDgF$V,*+$Xeqr,CVcx/OTL'<5W*.VdgQ-]%IpP;YwM5=rA_n\rIX2SY*Ef*OqăU"W.rW?iO,84jaq9#ULo^]#Ul&&1p^PEXC0l1rIriT&q.j(_$nw),9afJ8Q9HBMioăU"GF8ziLVrSTWH='DRU;/biJD;Z3hbJ.bB+'T[(ImEyO11PNr+8Qg:%L196P8rEWGăU"39V%jBYB7(*+\'lN?y]j]_?PpN2jBrGo$?%hw#a1kqOoq/(1[/mpV83M>/rjlpzăU"[%il'EF5gf<PRTR\rbm1mE<c\uh;kG<a1OjYPa-Rzuh5-_jWgo*_<u)9ky/<U3EăU"Y6+-w5kR?ZfBub$)sbX?-P#JLeO&/07T[&X*le2Nu#]P<I^&&^Hw;$RAzrD2D%EăU"pHhB4Twg#]k+E^cXCQ=gletV/>\\Ei4<?Rc^>=8l?e,\t0Od+q9;Z^q)fdFs$5PăU"ShQZ5TAjv.#)TV;$<:]qO=$iy5W$oMT=oNv+$,4[8\;)p9j631U5?)4^&qJ^k_'ăU"c;u\$I0/=-45:Dt*)r2=^Z3^YZbL0o*.4;SkVXU?rcJ.mn=MC-8_HA#dwAY#d%răU"3?]*,po?_-YN#d=<^/k(eEELYd\O3Yh0vd_#P,jX+:w<,od7kn1Z:GJps)=>vE'ăU"u6V+Z%5s6++Ed%+BERQx1ps7NW_bX$&kAsy07R'ZTzLF'rc07=_88RNs>+1Z)V8ăU"$Bp_(DE_$ri5E7a1RtIK9OnIocqCAKk_b<RecLMZ[+oc&XgL)]KPl]]*aODeLX'ăU"GqKf/_8K<6.=YGXZA&3\:S3b;\#lgaih5c_VSDI]XsZ^3r1+>,cyZO#l_XhMt13ăU"_3DC-'%go<'5SotMX<?-V.r9*KDqw_zh0R3t0yJe(H#p+E$.zgRkEdNOhqteoB=ăU"E>xoRj=Bqo0U$9K5\1ekiS6H.y\lP/81G\TzMdFJJ40i569VpMI02D_W]i,:N0IăU"Ep$ax[#r>gPbkc?a6O_F25ufk+?_Zr_w-%=8Fyqmd+m2\JL$)FTil0j;hcT'VttăU"Ckk68:?u_CdN;NA&QQQL=zx#ykfHJD%v9YD07OVaFf0LnOFCrXo4B7I^xMZ8_RTăU"DphmfFFJLT.XR#'$:LkGGsiH#AMOF,sAtWJ)+.CJ/tZEd#D$(p;%FS<Z:YJI0N6ăU"b^;:X$A,tb-C^uNfk0:/X_;Pcc79nOEv%cK,bw<+]&%tQb4)tjL1gtq2dQfS&BFăU"Oj+X,PLt_<K0C/)GSI.q&J&xHS10=q/-ds(W.]tKyHJ][q(q)$oGq6PV6[PF2HVăU"CM+HgD=I>#\GYo5I*5_%]RWhM;ofqfND*FI(f(FDr9&OCt-l.(x]b)R*VJfx;,hăU"ECNOHre0B/j9oIs<2;AJ^O;?2(Os#O.)O46dkMs_6ZJ_hNAi=R_t+mKk+=mR_aOăU"BZ:\gWaFg?*I;pg&h/F&4F:N;T^?oP?bfS38Dn4$j7%+EMT0?e3(<5yLq6S<XXXăU"i$I-cN^r*Z\^A6;CyVu^zDqPU7RrH=6cS4CzTc&s[[8a[y,m_Rxa;x0R^?B[wUXăU"23Z(z$h;0aks.2jFJ\bfVtWCRch.;_&Jru?rgLU_MgExUNF\XTCb-VPti%v0vo9ăU";j)>SWg\d+H*hiYT-??%919[8ZLR'6e7\YP2w_M,H3Zqn1,6JgD3.36Tce]9+cPăU"K&#(-BVQ#+'Q4zcNk+dFENkR#Q*;tzJVTK^T3r'nJf&P7=pl6[_K+)f]:pZ+lTUăU"1Ca>T%2CuQizLV?-;iL5VF\24)q9i0WasKaf(=u&)dT^9WIKFV#FXvLVzqh1,8MăU"jof1]W5P<fS067BdE2xTqu*fic'A(ZLC%0n4Z9Ea\0?6.Y<#Zu%Tf>CAX)(IgE&ăU"Un1O?0lCD8v=1n:L&kIrY8H&.-+A[OJdt/>*,_JLa#qL=&ne3h=_$[]a,t3aKeyăU"*^fG/<V17GtL,V(AUSpcLrd0gS<eAKm>=*cE&XgZfXFT>X1866UvtTO)<1Rd-36ăU"pJXfaK&ln;a>DJ[]1$13R_<vSr-G'9&n?A*/#hUe9F+iPPer'Pqf<OY-M&)XuZ^ăU"ulc;S8]6OvW6hxgX3_ZGEjQ6=*fT-TF2$p#$jRC8ng27u,T&BFGd3u4Z?R;vbeLăU"$ifJa/)8PUA4kMq[gPt<WIm50$'?A5djEKa1/IEMi68?sqE=ET0keCPB?Q7LHF1ăU"PK8edyjQgPThRke,.NkGi.uG&S_0xS?$G1T/tQ[^sgH4,nZ.HW[Dw1aFM>NJ>0aăU"?;MmRMFN6S<vT\>CJ]duaHL[=]M5uJv[EkyD32hH(lHhyza3d/QwkZTV;4W.*'XăEND SUBăSUB VEăU"<)y0bknoOm.a]Y3)L(:UI$3BuRJ)9)$hX*H+StXn&IROr+].X(?%1IVn7I\&*CTăU"VvUpIh<s2lY5Q\]x53QnYEDMXha88uIcl45(R7*MxViRUb3[nx&+=$sRG^,gZWKăU"s?L*G]OrxT=T6ERshoF:nZR$Q4B/QNUgvggRji1Iul4+f%$kP?GAGk/#Uc6MSdsăU"]X'Gcp#E:8HENP_=-F,iJ'EvNYp$Qv.'JAkp$&2.]npBbW/vr:1Qcq;.cw+kv<^ăU"B1^YurQAZq9224)e<v)uW<t5^M3$N[3k;BbbU*%7du1upfTL*/1LOeU<6h:#U?2ăU"G+?Y.9fbnr\OQCU]QsVI%Y;DNdcwk0=aKDvMU*)(2Hes]HeU'?D<TN?_%Kn>gZUăU"pUUN<x*sCwsJ_vu[8Tg6gb,)'EUF)2(_o:C2NKmnfR6v9H.RO#%wU&zK[I[y>%^ăU"jB=EW6&7.KOpCz%0,F>f47A9_EWq;;)[KK+%ossIIB/x9<g#PfV[jMKK=&haE$_ăU"ill1Q7A?YRB(5iFOh$GC;q/7MS.Yjo=lxjUt<Ouc/j/%b.6j,*q^Z+^,fVBPR8%ăU"=dT3sh'H[Tx2AQ[5W['<pUW_>eYF6Y8f=GB&?SB]P[FpfyS12IBA:3*3>pJ'WTSăU"ZJWdx&PL3%AJOSKLY^FWl54?%VOJsw/Z%iQZ?s9xf6;cLKn2hoi2IG]h+[9=m91ăU"o):J^</0jWJN24[KZrP.eg8Q:oVGb\AsGw%Y6G<W-gTx)n'0NpZV(1D.'X>$dI%ăU"rG*;_]i^B&=AnmU:Bu5h'Rp)royn%%:k[4=\fMe%vjOAeQSKZusU0Gc9wiLRq?OăU"<E4C^f_VnHjJXOtZ:T:LsoXyM>SD/=^*\p6G3D%uE=N2;M<2d8:s(1aKh^N3WKPăU"'#XFL57KO+1DLCGoOajvWMJ9qtU,(Pv:;2h(Q;:ab6tsqOF?8iaeOaofhI5V/f*ăU"Aa8lGm3wAZZ:##C5GYV\l)w2fGPmuiNFGR)2E^+uSDcg';>L_fqdd\a=ikv-dAvăU"C1q$q,4O$LW]iBB.wZZxtFhX]mn%ROAgC&Opj5j>IEK)g$z;saYU)PI#-_sUs>dăU")67HB-,zW>%$M6Km=/Cj_K$#0a2shl[)zZ.hI_JU'7]ZgMZ7dU?LerBr2Dz0_0EăU"U$)E<HR&N1a026p^7tY3orC$#nZ,T7)s;Ak>r%7FmtJS-*Fr*CCe8IG[J6;5<P1ăU">zU9J^5L.0s7eHM#zIX&4Pu[GyOeQgsH\nZ]7;#KyW-1*];S899>NZ45r*ipfS>ăU"gRUxiq1Ft.di4h>tNG<%-;\K<6Xs(;&::-BOHe#z((,a0PoftI?3lU%m+NO,tiNăU"FL\:HG'U\ckH:^DcZ6T,b;HX+re$8\X^L<jhQWOu^PcF+Q'9$hQnobHTu<o7hoFăU"[P='1P6i/h^wn4aD>3qDmVB_\H[DGWF4.Re.eOw6<&i6l>K\kZE<A[p+eA)9rzbăU"\;-[Bl_wntKC;S.u,3)E:eZSSAeY=/\T.tt&jW=%*f0AM)h.MYV[Ns2srs2gG_VăU"Cf)cXZ5^.Z,^UbH,Z0cMGTbSlI6XfS#[UpVbWv1U2hTo2#wdt$(xZsFU-h/&Y?CăU"eUZE[p,B)hO0EFX=-h?6kQtHW4aFSgG=,ex8+Ku5KD=xy1UIjfCb,#<0,MoB,%8ăU"5,m*(<LhyloF9+\cvW]/9^JE6bbJ&C^]se$u^T(ddl&\gM,2=n6,$U^Cptqmdx-ăU"]SL>[v.C6I0SE,np4nGZLlVbo393HfA3LA-07608tnTFIW;#\/xu>b17:aoaigLăU"#iVU<j<]+sZUlnLci78A]ONci.,&oVKZ6n/#(0^s4;N(\7Cnl\jb[9(d:j5fk;hăU"vCTn^eQ82WdH1qE9()e<tIBOb*],Qh4[$oufgY+t0n-)JlA*A0fLPqwp/N%w-9>ăU"hCEp251e%VQX,\^-bIqNRm>4-BQ[WE)G-V#SVtW&O;QOzLQ+MLu,U6YBuO<^3m?ăU"B[Qnx>=sSgwMEe.[Q]Uxg#>akaUZe-<D;vLrSg=&AE]AXNYhk=1jd,P&10(+M/-ăU"[DtGPw]g&Bl$/SPCEjI[X9E2h:V?Wl8)ZOL3L'KsVB:n4m/)<'9QrV)XtcZHucSăU"\ooyA3lBN>*Cp%jN[4dasrfww*1tL?AcFF=P6&_&>Toj/\XH8l:g,,.upug9[eAăU"($Z9HLH6'G9O/2vjRRjVMd]&h%3[ldx'=\bWyS]Gz7/:J<ZKuE221&WZ^(pj67uăU"K1kclQ<&*Uc<DYsggcIN39n*0GLC4yh<vEHP[.99DC]eG$p+H?Zp^5+u3f]g-YSăU"y74>nXw2o+qqU5\]OrA:Q$]E-=i\AS6*#yW.HOGYzPr/5c:Dc,l2aY8iG,++--NăU"wSjGn.kOH_bJj0iJ&Xg9fKX>HID45^XA=%&A/;H'(ZSKXz14_q'Q_Bf,%9]uf\?ăU"L,o4JW-('=$:6nGGmoPWhgQO=nC)\xp*g(*-C2\Jo)THz[_'0X'fbMPOeGF,u(8ăU"T[guckiq,y^1=6<m#zPG:fi<nrhr5Ee80(q#iAFXo$>\l:BluA5lX[K#3r*&12IăU"+u<tBRk&Na$+$w_M5r5t/O7bC3:M-]b0#7ZJ^eggY83\cl0?KAeI$j*iE'nH\K%ăU"u8l''nD\,8_K5X_eV'e=6du7XVgps-:D&?l5fEg,W^$\nO7sy_dITx:FtLxTKo^ăU"LoL*F&Df#mdqO/hu2XApN;PVhSWNv&]:oI]>]G\_.;RcVt#O1]_Kp;Gd?MOnvYwăU"DiS<5ggeJaEtFXq,qj0U48B//vob1%UH<VMlsLH6L-_CVs?fc&'i+(K)H2.*/tNăU"1>uO*DOOM3adGl5iI/LwO?g1hoot)GF/ZMF%ev2syRQebGuNLi]*_NWay4[zDRxăU"Twa>yDf]qiB9At>MUsqA8XkP3>-^df^dgG<ubn\8?iO40:W&kPGXp2B)*bWY*WSăU"wMpj#[&P1=8H.sG-gn'nVQiD_m:6R%hl#lqulAPdd*r;_xjK6matj1YcH/#(\68ăU"53tP]VUKhtk^l4[fA(1[d)WHmxqKR-uZyFjtBGKqnh5-rU(\iZaB[ZT?X001&+AăU"]'bye8H966H2GwozritiWE]l[-5%&*wRak+#tuTcmH?6Cmt^qh_(NK-IrqdZi6TăU"uABNgj6nLOryh(JHoetPv8sEkr_]lU>w(7pC7aBX:VfQb-.K9)UUAcvpawp,zf,ăU"Hob\94i$SBDt'70mKRZ6eJLbgEmaz9gY6xW/)jbs>Kl:b$pjfc7ALAOcH.Nq/:dăU"v<t-lS,TwQS\A]Zr.5NfpTl+fNlF9(J*\BYS4,1YB&,^P0Vh>vYf#O(aH5bBs<CăU"<M-THb%KOr9A0.%ANiZY0UC\5aG#(pwmYSU>f0=a=94WZ%po%aKe\8X[>R-:K<IăU"NCfcaNQpgULnBe141T6Nj/B[hEKaHe^i5(%mXvN)A0Nk9Uu]Vi.N.3<9J>g3=jjăU"jC\q>;v-nq<'/l61l^3pMW]o<H]ftJ9:LiPIH,mr3ncO-?HDLIBk[mcTl0?$\5<ăU"MimZd<w/L*Bcla-1mNp1&M/bqI4\sTn;',GD?bAgbE$0Uu[YbWn]sBnbYVm83H0ăU"/CRka#(h\BbjKZpyJi?)$qrt\8oQq;.-j$MnAsExRHuUVZskd\vJD(nKv4c6]7oăU"bCX_05ISAt'<i,-on;?&by6#0H\epgMXA=L)bjxr:iKV>>/Kt7T1e^6g-vT<QN8ăU"t4dmL743i4z:G*wlW(nD3ILw\jt[^>&cpgc5u00ZkSbzX(3pN#lBG$$l4a9b+2<ăU"j>+HMB%f1lv.Nd648$N&S+5K&tkiG;RPA[3*96niBnt3lCWHQuJhn8J1-m'5$^*ăU"X7/Rf;N;'xVJtU.YLH6HU/KLcdQs8oT><2IYc;j:erai<A;4-tQtuCtuAh_Ue.LăU"u>?.]')=)D/TE,RQ]urQ;?;c/c&f1OjXu#PDr#nd8JHc,3>Zwxp=>^j>H6W/sI'ăU"B&Mt\fDLxuvhx5;92xP#ttx]hMlKD=P]c*)CEDk4sm.&1-JcWOMrAfRoG3SHL=MăU"1=6j-9rle20EIP2MtrXSj?tp)$t*[lp;xOrC*#6LK<4OLt3F?HrHQ8resUtG9#.ăU"KTjHEj3UoC(3CuZYrGScK#N8PeE&50whAHjs5a8A=MIAt*x9a):21bw0ITH'rr6ăU"]$R>gI[WJfqGwiBu$g-<$iI3b+N]=vkadP$%e#)eNh.N'4L0QC-Emfsow]p(Z]găU"9xWq^7a3m^M;mJd8D0ln#uR^cONuwnbd9lxqPO^.x=UJ^0,)jEe5OWi7V&(:iZ,ăU"qc2.*=MjJau9JMqE;av&b[<ugc24m2Hs\Ul,guX,6Hkws>#uUAMBx56up#F($pVăU"CNPVV4<rO&LQuv0(0t,<<ZY<c^Yv8rbJzc,vjT[RwRPDtFZPo>DbMu4wtovRq=,ăU"8n=%t6d[H7;lOo:f1hrd4BPSFp3+,&%;z0CA+Fh%A88)A8p?2^f%kY.'f&[T9PGăU"Z^k'0>Tf#d'%BX=a>0DKolV4f)CmWv1BG8TY8rk?r2+7-m*DBrY-XuMqHJv&tLjăU"fnlkwIZs,P0foh0x7uWvvwVALqvscoHdkRo*qlqKMYu0rJW<\#u(lL(+$cXN860ăU"tBNd$Y2aDeG/KINGxML)F(CCZO^ZVZdko0r&\a6hNLF&P*,OK$rpb:e^4:39ilWăU"aq+Mxjt<tkTq4Hq*uvs35-tv'wgNa9]GUBlrNiZKArUD9'Mv^KLut^ZFp4NxjrZăU"N8t6k1+D?i;wd%up&'%9%9%%%%-%&1AxJDL;PY)*W%%+Ev%%%1%%%%%%%%%%%E%ăU"%%%%%%%%ln%hwix%UVSw(f&up%&'9%%9%%%.-%<AIxJl9Re$5W[%%Ev%%%1%%%%ăU"%%%%%%%%E%%%)TW%%%lnhw%ixUW#Swf&%up&'%9%9%%%%-%.*/*Jg9IL1(.^%%+ăU"Ev%%%1%%%%%%%%%%%E%.%%:6%&%ln%hwix%UXSw(f&up%&'9%%9%%%I-%B)m2JUăU"-S>q/<[%%Ev%%%/%%%%%%%%%%%%E%%%)mo&%%lnkq(z'Sw(f&up%*+%%%%%)%7)ăU"%_%.%%K3%'%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăVBăVCăVDăVEăCLOSE:IF S=76AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               GRAVITY INFLUXOR ARCHIVE [2/3] zapf_dingbat@juno.com          11-04-98 (06:12)       QB, PDS                2626 173647   GF_2.BAS    ' Gravity Influxor Archive [2 of 3]ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"GF_2.ZIP",4^6:Z&=130120:?STRING$(50,177);ăU"%up()%9%%%%-%o<A%GRT&oV_;7%%7c%%%1%%%%gz%yhmj%jpSlRnxF*h,[3#jz'ăU"y&$*:K/8xCf7$DOw09bm\I%m0iMI4ix=<S05MfkI0\^LcV*9J?u8#>L)S6]c%HEăU"nUa[S&k[\DXNI2L6hVO>Sqje%5tai#Fg'S&Q5gidgg'+p7rQZbK$yVY*046>EFgăU"(q<HUg?70g^9X^$$ddzLXC8&CI0[X^aUAMoxeVcJ^ZJHu96qQb4dd7McnR<8i#8ăU"<TUXD<$nYNmb.a4pdjgp^Lg%0tc:Xcrmr&^b;cHsMh^:dAH7$(8u0<o4uGcWkJLăU"Hx#:JlqR?lR0;u3;xT3zaTfGwa8KR?0hKD+MKZQnHj0m6uV<HXEuQRMqMMD%>15ăU"%=\>kg?8>7c:HnFpw5,?^RI'8VjA*5p]lr82DO7cj,M^-=qpWOgx$eVbuPcQg3PăU"jUkS3S4f[aSER=hr'p8O\,s<<C*(G*bzy_QfSP.T?#:>,+W>*a0Tx'b:G-lFZugăU"k_bG(?UT=54D7U(f]EN4DKqrKMSb2[/W]\p7C8U2LdD[MRi6,3ujg-(^Q1JzLegăU"7QCt-Xw'(6AnC4ws3\p.wFMRsL:xBY\Qpk&i:+g2aW3jn9pV/.7I0u,Bw36<(K#ăU"IGn4v=2\0SWYEQnSH#BvHuR39[j[,Z=wo;2p'-,HGIf1VMG)N)uX*%qYk\8[iXyăU"OoZawZ?Ba<h+Q,_oiNv>ilOjK*WE,KPZ4<sF)WlXbC8yno9U]]'V_nOWM4(ohZ4ăU"&fZTtMj^^3=*>\X==P&/Uj]YJRUpTj*88hurpWt/^4NYdQh9aP::teQ'hc0p&L$ăU"r]x=dT>^3fpR4cibBwcd#IIp'^<APY\Kac#yL)itz1HX6xkl--thnf.iJ2pH_CGăU"3JYnLjF7Rof^BFP[zMYEbk*=dx>b#kKIGM/wntYC&(.PGw[=&^2vA/ZlzJGDM'CăU"Zbp7AEbGcF#IFdugL/'D9,0+WUMzY6PpeEVK+X>\tmXRTp00Z#./s,.p-.Yq/l3ăU"zo3KZqReM33+q*=r]r8N\WNJk-k:7Q(N(H%m6>MlcfYx;h(4jD4N:SLsDlU;J$UăU"A1BxGiLQ3b,:T:7hgJ'K[JWvtQFwn*SZhd=C#\eM]tp?gL/S;1PsW7+Ujj($0[5ăU"HWJQ<_sJ/hxjr.k1/$Z83Vv^%nF-19(X\Z$cchi#IJJ#vad,CGvQKQTC3YEc0<>ăU"rFube,^5lqWXdLmpQS8eV<m_>gHG>N]THI/pr2bo^;C6+;S-[CoOQpcJEBRKkecăU">Y:1)MmyL^gPnL_Aio0NBYy_%PBNc+\,'P'[::y4,OA._F4ui,J7XRsV*>#:mHdăU"PZ7a%>'L&/wkmG-h[PN6I^QY$6z4mW;k-L^wRpbL)pWY*py:Y#GKA61a_m2O/pSăU"'V/:LYS.+Zn$;UNc(<;aY,,7plYLlW5X]Pdiie(#LkXRKO.:>,h1_C:n0fXX37RăU"HQr;J-ANs#y=oK73*[PV%c*bUi$,l?P*d4#i6f5.1.A$[>*f.B1kEn_UtKsbxjuăU"##e(Q7VJ>y>YE'7uD#S>B8TrfeGcgwT0?*Tf,DQr&7lC0c]])\PKmGh3Rp&KzY%ăU"98n?T_Wze5[HsK:b[;cBupE:GGggm#Ss3a0ggR9I<r;cPXpqjie]v0uOM=x%th?ăU"boWOT:Fau6Yi;1roE94U-Hb&B*fB?7tBQ^:Cx*ECnC9_;L=Z[if&e-Ye.FaKOScăU"2D1f-15i%0G/Mf2DH]I.pGm8ZmAXeP&0EM$tnnWdi^ZmAt5n,rfhR78.&Kd<%tBăU".fB/,b\/HbmocMuw\FTl$1:kgc'='mn^^5R$NQdGjH1*8&+lfk'+7Ol/KDRn<QWăU"prNqyE.jJBwA.eH(YZ\3=o)Dn%7uA_hHx-J7G<^FD,hTNdp,FkMhT&+Iw%[LQmRăU"2ZDA*<8u8GSqX\6mgqD8?r.8#rfLc8&.nck89s5?&x=#p4&Ec[#5.hdmT>8*8?YăU"QH2s[nLZr7mpi8N<mZK4x%k\%r^aY^aL$?:wrNfU9e]U)NFa:S=I\lvR8r/Db:qăU"NJb:MNpdW$1kX=3m)*/0P9A5V#unj761+?+N%k6mV>wI>.tWp=4wNDU&E;^*m[yăU"15H>wRAZNq]WXUizqZ&F7$BKoBVa7k=o4=6sT?XHxI(<U9L1N$9+E)dThg/+8V/ăU"2uk_K=vlC?Mpk]-dV#lFoLH05?cVm7vtu$E#T5XmZNKUN<USaj$waGWgIg6[/Z$ăU"?(7vXAnGSo$#QJpR^eAA$[M5&P%*>d(-=i;TPH34F?W#jlVXHx>nv'_tO8:dVU;ăU"H_fSS9Aa'c38ac.+3'Bmn7[1q?N0^dp;0Jw#D9ZTAWSGK&Q'u$zo-&]pg&>q22DăU"'\0&gH%mTcjOc^M^&-GhJKw.R9NYI:)W],p9Fv[02tR0JscRV[T.LC%9K7Ll8tvăU"8$-bMMX?MFEt.^KQ/Db=_<&xlweg5Re4GiRGqJ+7k9_jk4C'd=.;VahH94Dl0VwăU"v;^<2tFBF.2?FrFcTR_&9pVuw3]i&k:kk)*^wiR'S*O(PA&d<[rA[cLeX=V(ovpăU"ZXrsVc0w%wW079IBTj8YiHT95E[9P=Cyf1YVET7vFiDnd>7Yq,QW5jkhj1\j1p;ăU"^1rQsi:&81MoD80xDbX9La,NriB$I6MgeW5OAB1ofXY<L#^9nrkZP(-rVjH^Mi;ăU"*>I_iOrQ>GF+3X7$Rnp9I#l#JdBQnVUvg)7sP<5rn>Ur[zn<IA9\=\I/fB7je\\ăU"26+MAC*Ao%rgfKjw35MoH2dLb+frJXxSART?DL$]'QG9^'$NOmKZv<1+Y+qO.BLăU"?adl*E3B,PgxV#&z#SfqOMMPwE(.1iS?Fqfuqt(K%/V9laOA90:WK<hznj^ln7^ăU"a>#y\nUIA8QwA&P*qAoFMwU$Z_MALVXsKExmVAl+L(A[T+Cf#ZuRsw.2o2bne4EăU"McLFd*?JROHCBlAz2JK&\WH0-1[?omLL0)uq?UX#[Bnt*acn]ZuQ?xc#=LCPUz:ăU"Olt[f#.s,=WCio#pszH%e:tvj<q$x.lF\6dc=ihn.Hu-=XKPrJ$D2a.CtXtZnTZăU"D]uM9'SQ2(]t7Fl_ejfBIL,?E]\,Qe,4mM6#_Sj08#q=d:Nq9%6r'eZoMLY.A\$ăU"N5Y1WerT>15G_c*jPu*3]pOC)=i;43a_cWu4?^Rp1C<c4R7/mRg<cUap(>J1g\7ăU"SNz,:ZWn.>H5d/VBeGteJw]ix69ZZONMyDloBz+8O)k7\3W$SAUBHc_QerZ*CGKăU"Y?.J;[9(k$-B*Ki\x_TrR^sy\Ckq+AD&XLh2ACgC_0,5#WvYB?mHn?BQ9LBMbIBăU"HQ_':)]dQ6r&E9L#>+4jD/k&gaxXp]fmmkKA?6tK/GQ[UyV\Rk:il49eLGB3K1#ăU"e1%A6/VObH)nurn'&^+1X4v[LAm,m+A)YVdY6v9];%?FpWRriOW;k>[XP*oV6%zăU"&(.CRRgNeQb9M*$.av(L0'drL?4A8L/0%dsnGq#?daH2=zs&C,;Uh#pS=JltkMZăU".%(5iOSnUW+Z2C*-PLnTVn/Ot1^k''pGplOZEMWT&^h(DN2l?a=/)CYh>k;AmkVăU"h9^&k9%&07t9c/:4[NtUFM4xjr9Nh$O9MGMcJQjQ#NYeMd+MME2n(*DiMHbfin[ăU"QS?o#romPKEDD=Yqc:5rPN=O>T>k5jqUmxQ#VDP]qE)'mja#/u$cP-6jdJX>=D>ăU"P3ZQ[)DL$W<W\/DU>k_ih4D$;702mqYFJG645CZ1j-N2E4rk_%(9B3]v((wUqYbăU"$np#f6Wl85,oY7jUK/0Z(,6itY:dn+p9x87O$lZTgUB-o'$VaL+uO85cfwA)uZMăU"LA-mXeRO-J*P/Yf#8(0ud.D7oR4mRXFPi+QeqPx%&9xn:32xWKZs[Xw5PNC;%TBăU"-H/p/u.:m-#pic<smL-y6^O_TR3[%2*h5kC]BbLm'Q5isOJ*PJ3)l=D9'&;rnr/ăU"4tW[IZUsXc5TmDpES2IO-Jj0i1<9m3PD=9hx<ds+e0kr=buSv#0=:CFps+y><vUăU"oCj$cJ_DC4N?pS^[C1iE^dm626icTV%M>ZjR)e/7JW\bZ;$pkCgUDa&Xh;+)YD-ăU"5X+A^We)qoMwIJuS,A/PC5;V#ko[I$'*r'$jP0H(:Io/Y\&J8_k)9/*FVeG.GHkăU"*<kpDmApUj2TivAtPF(S5a5^D'jzIZmW^+7=iG=h6OU>LP*j77*wb5H1]8%+Ae%ăU"dbdzERnaWHs.Q7.q7a#R**8NkAue^_kw6)?K3]'4ZSB_o$?/k9,bTg0k.owc)D/ăU"/LPKL88w]cHhTBri712WhtItCFtVH%t;.b]A'WXA4<+qf5V>Tdufo?$lcB8aaiLăU"MUJ1T9M_bi&aw,N7hc$<$TH3bo(#?xM-LLQr'vFQF)EvBZ5y6F&$PZY/XIE*:B#ăU"Jjngzq7epW&9jV6+L9ClXAS7abp^6+9QR=6iaMrbtU8)eM>uGySBD5]U;(#aQCfăU"#KBSf2Fw27DWf6.Q^q?TKPPFEsMr=\bBj7,&Ky73R'Zr*bIY4ZWHSF/;Ow)KIl7ăU"xZIn,R)]Z,DcmVOD#pY<p<2mlqw?KRDGRgxezg_MyD68Ao1S'gE0^Qyw10nI7Y7ăU"H,DV%HGPuj-CO=/6JDz-v-DicQ<lr=/F09QCMhq;AhddUkQl$I()^6otWQ1_x)2ăU".W'$IkAC8$+h_7EZt8s5\U+Few#8LNY[AKyi,^>NgW?^TjJw_Ig[E1'sODYC3eXăU"S]<3M.sG=D4onKOqW.R7tYBShOOzH82<N4=lb#D98+E/V+D6[S[+kPi'Wx.]\CBăU"0(33:fP?5a2Zh07d,aF:UX0#wq(aa?\A0Csk3t97pLDs$*vLUQWD7u';XH$y%cjăU"O7oMVo;*xXQ5)sC2^,J0bvXufuOI<#F33^b3]P'FRzt5]4#4x0t3Q1BX4o44u%hăU"A'%i_6VQLK\jF)<;'fBOK<JEspr4N2<'5sa),u>hbR1SS78g)0H5gi;baaj1_._ăU"-d,iL#IIzW1R\Y;w8.'<G$st?8(^AfcG6+M4%=?Y]p?YN<D(Eb>jJ7KoR.POR>NăU"P$\A+N<3kQhwMK#XxobkQUK;i+aCN-B+#XQ1UZ%iUM,T#g?zrg6T\%HFLsJVGngăU"gPt$.6$F.CNcAMv<BhNykd9uFJHs>+8]M)5_d%YO[fBtqiVpEMX=pBrM/'bj+c9ăU"<X:'QX'gD:mjC\/o$R[6[B)cOKCJvht]+F36D[mAji\6CqqHnlT;Y*FMp(ADHS[ăU"]nw-;48qa1)E9BXkQmf2&:Z'u0W6:S^Jx#8t=2-mHWIi216>(Fo5f2,Z\VRh^tRăU"hi4nelj,u4T6(K?iiF[vc_#j'Gub#(I(hw?6bL_Ol(NGM4?)OG\B^yl#BcULU9<ăU"7g=LCV?jAq+Iq;PolL-IHFb<bAG+XOpibCXEk_=UEf;#7($>+w5m7Ox/kZ>zA-băU"jk7pcUiy*GbF7s,:l_3;9vYEpR>Sjw<Lz+PibK_%*dry8Ov&l.AjM6\)VX)-I^săU"YXY9rYs1gfw#X[']pq[EaU5>^KBWEkQvInW>k4jmqd:u^81R5Ap+A/v)kP0a;EJăU"fCMA0w45HDb1AQ.p'922r]wgU]vG#B>P#%OJE;pW9m74dZ>N^fV>i-+8V>1nZUZăU"2/*c<%TNei0omokjrN9^uJ3',8PdTG^)Ic]PAHrPl$IeaK_[d>%0>aVzDg$,U'/ăU"wuPK$$Rs.L4ga-hv5B*exbN_PGD&Jt72*txEb$1tR$tL7i+\)%lAL-VF40=%O\aăU"thA$k9r66wS>y$22l[uR.tU8uPx*,h%0:,pswtZT\I$ENT;8T?S*^8zOjs_GnbpăU"Dm?:=&gPa)S:WN<&9uV_l>_]VS;5xUux1q<2,(Y.a8PV0\s:ZnN9hLf:$tn2G[,ăU"B+ymT:CJoC6%_Z[6V[,tt%$:/XF1e?=Ns;$u3,GcMwn$j2arley2)A*=.F4MT1TăU"MCbitJ7\7;F14;8W5QfA=:KxCTYQF$\EidSTV>:XA-76IH1FnUx^cKHft%*GN%răU">p_QB9W3_eHB8K*aV2O\*LX&rwLC*4j9hS;4*m6]hd(PJfkWU*T4?=4E#r,ITqqăU"C8=SZ(Ie7o]P.]\Yfd-_MnZun^pyyPmrMfrP5Mu$dN&MT<JZB,+y.m,gz(*H9G8ăU"OKV6mx0Jn.yv\>4do)xXu4?->)+62JDLf=]yl$5BGi4I'2FY98Y/Bue.eRzZUj]ăU"*PL07GBHro&e<s]_85duq>O3+fl.e70.d0bdMxBMt+st=a]\w#JT[_oiN]e7I^lăU"6==6/rVqde/G:GU_5^U>Kfs/M*_qgjgoVqZGEn,Axl$:$Eujf\st9)51:wi0MfgăU"LA%Hfx,=h6R7[k%n<6)(tga#s)).co&vF%,8#rrmlPo.ZrVDbQGp+&6&\1+faWCăU"cCAZAZ9&7[2n_PI(q,-+<,H1jt'j^S+Q[Y^YAts5;>emF'J65D>:YBf\),7\nucăU"iG=p*h/AMf_rWu7F0[:\o$]-94'un8S7S\pf$6)QIpsM^=S$R0T$q,,ti,-uSKeăU"y2$u9d*2;WBK,G3E^)CV9Y7LfDVMq<\4,oGk[9:II:T5SkUhiId0M\+Oq*>DXlGăU"-M_k6cZE.rcXwFH\P>jrF[SP8P;*OsY%QC;p2UlxS0xSu^)LsGBU,u&u*v:L%IaăU"tskD[$yx0A\EDAPt/5m_]n^/4%jATd#?uPN&lC#,.IdVJD?9AcDbm^AIx.=yW]8ăU"ers+S'#g,v,lwos5IkoOXg&jb.D_C+$o9(,Xy,Y7L)aWtt10nM%Bx65A2l,6MW6ăU"<55AX,;QNC^,Y[cJP+_t,k:-1V31(:QNfqj%SAvq,6$57;:9k,WJmK(HSEsh7WMăU"y]XcV3x;(udBbBQ9Rhb$^)'Z^H,rBqfvusVrJFSugRlFeU'?K(++p,*PJJ5B11WăU"0WYI*P#PFW8?bYe<Th-1Mnn:OjVB4hiYe7WYpk]32k;Yy9M>Zz[k.3m(1m6RsalăU"'J?tmn8_n]F\$i(6[O$9475'k(&HH$ne'tZnGliMKxIXN[k([>cQds)5AO,\PZkăU"e-5L4,gGm,HKx604po6ko?+0jS9jXQV.uL?jhd/[U3Ra+:s%#0;8.4GK%XGC%HvăU"hNUP;)]b.36P7PC\qmSa^N2R,M$>'3c#Kwvne$RKwVLT*3vLPECIkr8h\CfV5j6ăU"b*PBTsOY=Hq>+xtwAoiS:(gl06ecaP/\E=OB8F3/*>4juWARiftzpvbFoPDcCxrăU"OnF^v>:DFLKTx%lll5_JH<8Ar<tM^B#68kldZx(8G6l]N&%up()%9%%%#-%h\&5ăU"Gpc0aWmoI%%m<%%%0%%%%kfCy&f%%jSlnUxs5NS?#$h%K--[e*$qQCo<KqIH-<&ăU"cw1y^2VwA7IfFW]uP.\3c33r/l_gaBmI;.SAXaXX(n\78%/fY5=I;gjg6==p<gaăU".rp]b3CHWFIe0OX$a4GROVs;oC/7_x4nT]:>=m=<.oFQ*#85*V?\l7pm0+fRoAPăU"Jx'yb1#9qu)48pH$lc>-x\lDX^ua$sds$pOcm6Vo$Dr\sH#hvuh$wrXDVtX\^r:ăU"guxqM6=DZhd6o#.bk#hNtraf7uZ.;UnZVtt.Hv\TNurWXtl,<.rbrpLWWotKNuFăU"PTYeaiuw_-T?f/eE2m]3<nMsHCY<D=-HYgW)C;Z(ps$1OH,FHZ(janio=x+=52TăU"jjmZf-hP3r.mc$K3qFyr8q;be?;.PJAhKZfGIVmbSx'5aom;Wi_<G7Vgad%>,VpăU"MYF1F&xL[$taj0UkUUErK#S7gdV_l=%5Dy_MWljMF;Wl.Q]C$iyDN$v^]%Z(J:)ăU"_z)/ii9Dk*TdC^2A8NeE6o987zFx<QiwPLdWbLdhI)ro3e3ya\nnZr_S3G(n9xXăU"ckVMb>O1\8PA%BkAjE#G:5>#JtQ$'[E9\Xrz-6KQO.RAWzJ_*myjxi7YfG;8I_DăU"S?%BY<'^JQ6-RXD-t*uigt?K=Y,m?s[PX=NDPCU83sP%in7LC[fMg*H89A2uZy#ăU"_dc?ik;?Zi0dQh7a?6Bh1&81Sm_xqj>:kG0p9UHc=OZ\;UZ?#qO]'9q)?__<nu=ăU"HN1oAo%,^CHa_&I#W3Zi1+K,p.GLi8_G*mi:MUBp:/&iUDofD/XBJhfVc,Ojm%*ăU"HdnIpkG:T<jIn(fst6PWG6.jG--L(nmD#FScZ#T^NjZRAsp89'I6ofnwZ(>hGm_ăU"Wm>TrDd+j%x5Zltz*LALwEVoIdWFucyp]44SjFxq%4,wf9.^w:yH>bO;jUh[0meăU"GqMF#$RiYbDl9$VFm<9<vR%4\VmtG=4sbNMJ)(mxZ?l9j%X*[4\<2VVVlVf>ky+ăU"LsuxbuW=&;>=f\xVL'E0tV?ZI(o\':qG;eh&QL.OiEINT12Rk)=tl(2VS5j^ZQ<ăU"wx4<R1sA_bV;8Vo&0ja;#Y>OX=p9vKW)<&LgULB:bjAU(xr)9,S^-'EfIW4o:19ăU"KpMxtq/&M82ap[b-uJWPU0jAjx#TNi2/xtDkoYek;Gyi(&E5>7LGK>5<Q<i,.dvăU"BC3&Z+sZ?L%uQX]0c>845mY^^6NWE5jqB&SOqs+f3B4#6J5K657IZITql<_YO.HăU">GjL>GyV7PP8(NWRvF3fv-rOYHbml)kYZt.GkVp[xR#D^DwD\)^mX3NI-BTg#>GăU"C9skGZOTjyJFrmo6/ud/)XXIUBvhho#v*3QdxCCTL3lip9Lv4tXb8DG73#E$u[.ăU"#+)?RkZ=j(BZRaT$VN3_Ic#E8fdhq(^uYicNr2TM/wYZjAIO<53J0[0Cs^KxX1HăU"'Uiw4dr+MmKw9,+5e<CTF7n:,I8CRfn(p-UHtdyNhY664Y3u-V(B,9%]5$x9BSrăU"nQ6%(Y9bawq;iU'rHlG8)_>S,PSH\5c>R9Qv&&yaSW=O%c8yE/I%655jWsf'in)ăU"YhL(9lOCW2\#uaG*Rxe%aqIW(dK)8vg<odXTneUZr)[n?35YP7BpdUnAgpAIv0SăU"]S3(nIrakM'i[aAFJKhcVv<8AU;bliPILnlRje96etMg?f8ttBKW#m]dY<G]E?GăU"SM418^pYPX9b/xYGsG0<?='AwiKtX,'?)6ZE,74I$#1/DdfIbOx$kyD[PJSf^;hăU"(LjxXGMoz&H\/yJ>jIPa;H>G/pXy8KX7tO-P([iW0#WG3*S?JA1a(EfmsGxZIAnăU"t#7an:F++D<BAL$In_v0iOAU%^r=L_$AksndOR?Rhk*C<5jMrjg_:34D0Jh,]V3ăU"=h5?i**y9C3_4K1/AaI'Lpx6\-#5(,;-z]g'4H^gJ<5%,tscZQ1uC_*w.3iiRvKăU"=w.k2_V2AieyRqZ^N\SGREePr[Ra=Oc4YB75:Pf?J6r3TOCrnAXzr[B=RfkCefxăU"E2=em^pk)Q%v96LcTpWm[Ya]W2(qJAKOW4][94hCfHq<2q3Qnh=fp9i/mK8CtoWăU"&JCH)rrXCQ7r=G=nhm,;lwV></w0G6jv,-r&eQBg&]z%FLw$nKGDp2G\DsV-]gUăU"eRN<\t9W.H]'aiZ(IKumfpgq#$Qu,,$A$]c*1/,Q<bKp]fj\$x\$M*U$#6C'/QuăU"njGsNXM-<9wP'S$5+WQM*]\An:An8$Ou[#a%LA44fv?>9OS-i(x??tVxS8'bD72ăU"5Lcj/$eyl_DT/G(5<(m>HZ.'4TIZBzk8w-3J6uR$%oVC>6JfGEB624.K#pH'ib_ăU"771E&iR=$ac77,e>-/56q6fw9Nh/4,GU&fKCQl2hSp.4m_]77:.IVHzD%S=ttg0ăU"N[6N:3wAi8bi$$<['<xE[I7GP4MV)fisGhKjN+N7M-qaU<aOpbB[gI>l,E=^tumăU"Jua47Q,>o#Sq&b9L9\lps>GpRK<im=f.vXb1IS]zBUdAHl0JO#eR:JMOgT9jp0IăU"VBOBa*I*U?=p,riuSDGZXjWDe,^ol/xgwetPVGsdaG>2Gag%WWf-:VJ#5b^&I+RăU"K*kGxkF9j(Smcw,HC$::u?JvFnj8&,5I*&u0F]ow'+kp,r-m[XChJ0t[%Zwl1[-ăU"H0Q(u:Gr$*\9]D:zk%6p\cMX9r?<,N\%5MGP4RIbs*b,m?W)-..CZ<r9+QqKrF'ăU";#AcGHXbqP'Mw#PHS-$YbOuc_H5=)bbCbGEc&q#-QePCuP4NY=s5JRfu?-kt\WbăU"v*pWgU)o3Ib75mfg)cl3ijU#Ge?<<$nreVxo:#b[rIa:G\u&ujd5G]._AEFOSU:ăU"$IbZFuG*u_&(g>^Sq^D\BshK=Z1>1X^h8H[9;-WUIU]j,8U0<fDS]Z'(px4o-/<ăU"lM#V$Y-VuohBsw?j^%]QSMdRK+Atnk.bCwRV3qq'SNPW,mm5#bHXp.t*b5M;,LtăU"PdcxR<-VMs=Ghdu5Wphm[f/t4_7gV-TYb#g$[sR;Ub/tCtJH*p<pH(.SNf^h:L=ăU"S\:Knij&laBc\Yu8ptCt8?<$j8h[0'v=\R2U\;KtshXS2;fvcZ2TX.6QYq;;GyWăU"$Y\iL><u9s>-M\-Tr1,YZ_GNPW<qM?h&y.yoV'.W*$/A8k-7H*J#^sm7aY&3vCbăU"lZN>toF?k6HF#>Jh6[4aZCv##iNz(Uho;l$o[f),XYR0[9P-T\SINeudv\M9n9,ăU"gaUF#?taMPI2/f0BGvoopcL>59k\.BH(Zd4+S+QJ8C<b+VL^g.QdWXfn3a^fqGNăU"q2g,el:)A#VQkta+\:#CgLc(wnfsv&8;.JYFS]:1G]bbm4>QZw*G9:$ZR[93tqnăU"Rqj1;\B4^Ca9cITlL(.5kwOPCkGW7.%9C2qN^QhX_0jSrK45Q_yNBhslJRL+0HSăU"<cTf&Jfm#s(jthKnHNVM<FJ'4O:\PM8.Ea>sH4Z;m(9vHWZV0>RW]mPNunF\H&=ăU"Qzv2cy2T.^fEqrcktoL%hV,8-&P'i$Y[7eArDb'i-tP$#GY;Y:Wb=%>/TCVN^ImăU"WT%O9,dcd2IKwd9cb[_i=)\Rg)AU9^]#?bN+2Y[rCg'&m[w;?iY/QOlKRr-CaCvăU"%iC_F\xEN;bduVv&$>)8uw.SwzV;4R=na#-stg\I:t(vCO9HPO/tMi=[fTsZ5lpăU"8w:pKX88lW#L++lDCKaZNPV&<ar>6(C[Kjk]oFm^C#ie(j\=El*iD\P[D*GKJBGăU"JQ7r0n0odHhAJf1R/k-Y,lA8A28JjBPB&=twXNk-:VC^qOdu]l8=BH4(1TB#WhsăU"6nmRv[UY[yOb5?]LLtb.wVG>oD_Q[0NNslsJ?hu&th=ET9M1-5wB,$u$p4V]jHiăU"ICOb-a.HkL>VohD4_x^2#AUL/1Ise]amoer-NmZJ&J#4Z#\\a*_GFAiAv<L^VpVăU"oI=s4.+05zydQiM9xip&[P,[j+M(rN-aH.Pm:d$lG]E[0I=l\2>ZqL:n(fo$&B9ăU"dx2nkDlkLSwY&QGN/y[-M&Oj3I,idJ7A&J)u[Qbu;,1:$4\<V]J0SwKn9m,l8XxăU"EE$wx>XyDA>kBPxAVX$jOU_uJ4fl(:aDv2a$uc\;0.&4,Z>[wE#e>:Nxla$qin_ăU"h#UJEJgvlWBI+l4+mF9&#r7aQ0:=P^7uicPb([a-BBm&=:6D4yN0'gFP6m981WaăU"q_XhPf(9^aJC[wWpM'+SPxMX\gDNDk5b/-wCuFP<hkq(N9b_VTZgp]%'A6E[As3ăU"-Xa+iik.yYN#Hh9VHaNk?m]V&/$pg#7Tic<__Ss4quhy?f::bI4rVWOLjiLLr>TăU"bW>G34<$%lZ<Gn_wG#hCDHZLHfeWlC;LFq<u38<Wsz<zANPd23aws]npH&\qF<săU"csZ.h5nT\v3gmd>\k80>1Uplp,YHrm1JL=Y+CVnCGp9<ub=Lvjd3Ow]k12,Jx3.ăU"]pL-mMC'iwjGO$P7h6\\Lo,Y*#TFOCUpmg]Lqo:AdKJ^JRm5Zw*pLtKlKx0)nl=ăU"UTP=mRH_S.Hd&BJ40HKH_[r1\oN[l2s6WQRt\WQEJ^S5:V,Y?6C-^PI[RbShXb-ăU"hNLTOzY)Z3BN5awjcZ[:woj$;R:=1jVROatiy>]ig.YMr<>55-&K2J=ck_z*Ll^ăU"duL?l?WNZSL+3#,TFth0#Vs(>6>vAY./i)oYc]T/GcgWXP?dN-g:h<kN$_p.T;RăU"lsKkk9d6v%WulfcVYnvG+B'I\1TK&uf-IMd<BLA4YCV-KxiPj>[S$lCFM2:ErYmăU"wc,ZLWbtgMzwbX%UPSHk]plh>kMj$UiO#*>l_%rWas$kjcu;JC[pAR'k&KpL-6GăU"UV0$4ucwbF&bX<_6ciUo$RO[+Qk+r<E/E/<(hdMSp]Q%[twcp'JxA./(id]gG&ZăU">*_GqDO42o0\M'?n.8JFFr%8rx9/OMdBc3i\(4yX'WB:2<2:a(/zOBbr6^s9HxqăU"tc??J&CD?k1xoW*b'.O:iZ:\sqS'ruYw('dk6'%s_6mDri>SxWT[Lw1k/leQsDUăU"f7DSp]4C5XljN-mksM7IW;O;qup5W<xNrPvl=xtY*-m-7:tfSni554<TDMNlR$căU"<saA7qJA;fr?68],-:atj,J>k/iWX6R6-1d'(]l4JLa6OHN<Ud%Sl.N;Z4O?MJoăU"ok<wj6$(gk>:M*W\m>RxseUhD$_<auNN*G?=]92vIv2U=WnT>#s?qJ=1ix'aT[uăU"081b?\C<uqI=3(Yyr[?+s-h#3BSbb4[\CJ2ac#UHan;hh7#Ri4H+P-u8z%XaZ8tăU"7PlT#p9RauPeGHT/[x1ZLJ3k-IN_/D^Q;XBt^CCq8S#2$7H#(\.,XL?#LDtTV]wăU"NVD:wteCvMfZJ%OX.Y_22JQXVNPEeLM)Mm8>)'qyYj.58M+,MBW3HgsarLf0j2+ăU"vrOivo'S7<ipBs_Lwm;zvKwIM/)6J,#'TuZF9v;Z6d0(2TNJ%Z9NVR&a.v9H8cFăEND SUBăSUB V2ăU"Pb&^sGiwK-lY0D^(YmC?;wHv4-%Sw2)\_CQeES8:f%K=Vr5K1mi;qxY(w/SodomăU"y1PTgL9j=P&Um;n/xd;Cwg(+Q;+pIZ:P1TkHS,Sn1MEaD_)G_LgIP;^xp<69M$&ăU"+WkNXKxb&TrH)Z)2[<dUeIdMR(U8\gsV?DTcH#e1sCnlSSmKoQVbWHXa(n?58W*ăU"E;v=2VCCfip8fl85>x0jw5FY,SPD6IvX2ttntAdp'MT6y.:iqc8f\rp_*qAv)U4ăU"-11bF%7>Ra0'5iJ*R23UPV&(na^[PsEZt]<S137DirN*jhdM(*,lH0-v[,=+o6DăU"iD,X738wiB8&#ZZFw1cpNo\DD#^3-[.L\bg2Xb,ltV<n3')dZ]Em>dGn=]xp4g<ăU">*<WU[QD^^tMQ]nHB-NeVCL4Y9xCuNKQ6r6wy/80^4nHP7io]k\D.PNNZNvT,NrăU")HwWda'_J5pGZoMGI;1savx2&3_l'T.#,1hd-ox8z#rNJ9\y*g+,4oRYV;:#x(3ăU"Q>8N7grmX8FG5(ceJj%&^6]hC9Cvd#h6BH-d0wt/foaVdE*+T&bP=(tx1r<S&LYăU"gITC$.ujt[PldBdJJ/s_m,\10.mO.]Jx0^GB*6b.<mN?F?qlHw\66,p:IEc#[W1ăU")^URWXh?<PVo_\ebiCH5d53v[VRy4qXrGvKbAc4v(<G?(^svhfKSK,(qmK3hSVkăU"-T*Psm(8m7n+o&=(rV:G3:WpCmYL9c5qh[bjuNq&k\23cX''&k4E2%NTKCd^>rTăU"l)_176MHKH^-k6#x6,R%8g>jSKSN>o\*)X\I,^kQIgnsbf-48GN39t&qg51^_M*ăU"fr_irVS^,saBV[kB]9K-/E^]R>eo.45mWls0ciYEApmK9tIK3<nX3n*XFD'p?nfăU"E)t:RIVUG>'A+qn*iT=9\br)y8#lbJ?ji]HGK)9Cy,knGOiG,:vf,eG4zJr7N&EăU"=2dNtLFTC,8SUPH9(xx\b1Po$MQVqPrFtSMk93'aXw(*qEO2a?d_ml0*jmMBT<JăU"[OYFx]F7\LMd]vtR1MPQW\f*TTvbEfnfbRSvVoekjMI,bN\mo?iE%<v5Wb0#9cGăU"W[uH4m%uHJ<%ANr[0rc>,hxdHw?hJ&]t3(#1f(zLzl',lx3FNoaXdBnsQE06-M\ăU"u8\Zi17yk<UO^g)hcmgEk*]dmh$5_dm<flkDBkA<RjU>\_lbs;0cn&tw?n#6p\]ăU"PIts[W&[(qC5+12Rp$HjI&S^B5wQMfrhb34Ne?kzrB;BKiCG\9Yd^rnmT4YHi=uăU"2N-b]^=rg&cs8O[FU;CP*IuR'9s[8;$-x3c*5R(vfEBNKUs%&z2+xdyJ4j\ET^SăU"U9]h]YndWR+Oawe0q>0Hp=[T_a)5g9^.)-##T=_gN1nt3tLu])o,kr&unIni[o2ăU"g&-xPr-5aUbUQ\Kt%m+'_DK4,^q.JR_=^1maCb6\T\8Q'ER)ujL%muGnnH%(EvAăU"9A*4PP5iD7sjmXk2E'hhj:h6iKn-rRA%EAmA[Ke)5>X0'+qZW?vYo-tquK7tl?măU"esC\JhgqCd_^cN?[2Gud[tPCd:QH/#M5afm/fMViXirR%4M$jDB>k\bTGu92hUSăU"+O5BlQ8jrjGB$;7FjgGlBAcKea(HYKi0u<kKu;B8hwrT[_DwkV/Uu)cK;)=flW=ăU":\K*,$UuT&L0Oidpn/j\lC4#$YOc\miZ:>V/d>IQ7U7-kUK%&4kv.j0Jn-/YYSdăU",/+p+-(lT_y()88a7fhNu=LNo^/EBr3tYIXTB-ervv8MLt86^HLDf$\(61J_?jBăU"(U?'MDRk(rG?s9*Ql?dwneawvYTZqttu,,FdVn_C)=808NB0tx5cP6d1Hn(zG]kăU"K]&5gun(t-Tn9)<B&(SZ#Z#]4((v=c.F_sN%gQ<JzvL2FM9ADv'&m^.vXhhikIiăU"UO9^frB]/i(Y,6bPf2<fBg5m'sHwcRS04H%f_(xb1u2+s'DELx_/*6H'B=p<X38ăU"iH+9$]i&tB4t.%&AiB<zsdC/9$aid#oQ3;*Z35R1Ub_2ImVb6EDha(DgKX>)&GEăU"_<N.NanKLkA^w7kWY(5%(THH6)CI0BngI\]Q%5,KBkC?'I35dap+F4-&8a).kCNăU"d[DNL6Qo&9,h.AnxBD4<nMNA?\-Rn=4Kbaz0Z)UJ0FZ98FEYhg\#3+Y/ZttO/NoăU"6zQ8M6AC<6uMQE8*ZWV-=8>/,$13*tDpXhHM&feB%xs,L/g0H>,i*AGq7=REuZ8ăU"C.4r8DV6C(h+qvU4b'uFMWR\C]I9CRcrP064p<MaQ%=$%Ets(^5Q\gVK]v<oW[9ăU"7XSF6JgdT3eMYDO,n9QxxyEwOzaXB1.4eR3A5^B^sxg$60)aZu):hO(N(+gJYW[ăU"K=y:Ob_jGl&sUk\S/V:TUsph&w]c&5%Q8/T2jVj;,nE>uxUBH?XP0<#(?26,jIMăU"^-+N<^FZSD#YlBnZU>;ZD1V]=\Re[++T]L0EPvCP>sGi/;G=IJ6j^pfm9F(#+.0ăU"<qwj;7^idN9DYK1jacIMTc-aP_M\WUP(0U<=LR6:<-YldCzt?7NNBrUZK7059k=ăU"rSvL#cb[lsVf8nU[K\=(+JqlvA=zrp9=8#/'\FiXnr7F[:/$&Ut;bS:kf(=563aăU"juBpMz&p0e;olBB2G\tb&Q[0DBJCBGObik#^=Tn+PU1Vmgi,)e,OQ;,,\Pu-h*1ăU"#j9/X&&ci,PadU:[MXT57pDW%oCOx(c$;sX?P(1=GgB[C]APo8AAk>/>(=HZ_2xăU"qK)z)Nixmz$(Gx;N13'xQNF&98muk\d=0?[VDy#mOE6F>^]9q)7R#DK%U/05ZU/ăU"t.[mu_'QP8b1+-s:Hv&9=MRi+qC]r/\^HRaix1;t2a(o(;YPKYK<TB^UMwI0?bcăU"8g&4aW&YjIJDKq?^=P[_SMVUl5IYv>+.EePfAHTFrok.l+lEL;2;JD58G&LicqmăU"'Sf7&mY489Jg:Chr;P-P?1FiQpDNY-TWq:-7])99Z]^9xPtOFpXI?DJU6_JGR9tăU",+2=AP3x:(:pXwLvFx#R/>ZL6Xp9yH,dE:.vbKy?5['ME7t1zcP.g7q?QaclKRlăU"(=Rou2Pnh\^(<aSWaE/xIWr+;R'RoFHr56B.Ib-xoPEaI$ZkjP&r$C#CMjp*iLMăU"4f?XJw*>Y>Wh$]iHR<\G9QaS+sA5LDE5CI>4NUKubX%BA2(cTQQ_:bXjbZMr&keăU"N4'pn$;'L.3Zz:t>J.K,lssqp[Gm.'+l6L;-Zf^UmC,ZC[Snk%^6Z.^83h)qb]2ăU"4=IpO\,c4s86,+Kwh/PU$;H8+XZqC#sQG(li7udjq.Ikvjj4eajW'=FDs\##4j(ăU"41ham=:0EZLFcR-$8GJTAlW.qVJK*Oss:C'jedy&e+b[K9KFN2[Vw/dHQo,Z&[WăU"R.\ZYYSp;N4)kv[;T]4.iTgL0D;VOP/KtKv>tKx2j_RCnvqJ9E9BDVERE;;KE/KăU"-G50kt^gT766XZ$MacbQO%[qvq4HtPQhg80-HOHBL8.uudRcqGeWQuteN?tYVpSăU"[aE0okjUz:Kbw7qb?tRS#oFV-[4OY,6FFEp4,#Gc1w-oZuB*=gk\VtH]Fcd7?DoăU"h.PksiN2elzj\Rp>?(h&x.7vM-^u]LO=g>G_TdU?]<880R=9sXwr796rmW2t%LNăU"i?6HiKu,<L_sbWg4$)*FnE0TgRu\)KOh\9;\'\6BW5jFPZ(]'[8_[_tN^C_P4.0ăU"8QdCx[uQNXuY#o:z,(#Ua*HW>UGmLiwILu9PLWjXoFK9jv61j6a2Sww#UFi?;)OăU"-^61C7nvBaNOy#ZZ\HUjv[$o#(L1^Ai3igQae2b<?.TMeuhYLmB7W7hO#/^Uj?CăU"mq*?;VpEQ;8eEL$_/MoA$s]0bV^7_ptwP1g\.1g<#V=TFWIUgO%HO''Rl8Qn.Z/ăU"xQG9rL;lA9R/7w/+D-fGhHq)I-Vk^o;C=Y'?>V01v7.L/\(+Q*%xUF^iQb[;48măU"3PC#N+Pg\9sbQ5u''#SrH0)tY+iJc^j&P1rVauQLimkvkxplaFF4]?EM].X[*^^ăU"&*_Y(a/b#/AiPp$CI.8,ud(CO23M<3&epG5eQ53HtF[i<bUuIMdDNrQUX=Gtv4DăU",>%jthCRZTQ<+3*f;]h-%\SkRT,<F-HlvV6HUlQkr-rI*uaA&9bdL%ZsNhH(lc\ăU"T7^PZ;Y3(R2owbq'YF<M-Ex0>J<Pau49]Hg?Ev[V#[<\eCSy5h2%rz<PUda.1uVăU"GqucCRGrq6vL2VItG_x:?iqYh\)1SCy=&cunWMW\*YhD1#xJhJ3<%3-RsX)<_4BăU"n7y0<;l::leIrR)>;d-?k4p8cFA.&\^4C(:V>);^,8.\#N>iD7Z[X=#TTUH*C92ăU"*mtFAhl,_dcOxcS6888Cp[W:cNsCXhUGiwzmHjkOvE/)(GpzR&&$Kt5>0amU?%tăU"#eQl_9Lc+M>.yPp[lfg7eENFO'nImr6R<<HvhXX[h8de.UA0*k_16(bpWCTnY+jăU"4vU.*+pahk4WWsg6\1NA+*,$u/T.t7Er0xJdqC1SH)d>JhHyRjOnww$%h>N$.ZBăU"/Q?=eO,DLG-c$DZmD(5]kw;[6M9GVDqGLlddRH7&^5t(UYXlk=s$u%FPm0\u8([ăU"48T[1s_rN=iDJaP=FWHOVO8^li]-N3jy$jDAOyr>oi3e_5y0&rS8a=m6_>Rp3UTăU"9,Zsbg6bRvcJVGWeo>)q=2-lZGM:Oqa>HH]32zV[9o^Zge1A9=Q8+0km1xYiwZ=ăU"1?4oAj.Xbg/2474nt1P#PzC]n%o>\]&4*P#;+3tt[++l+VT_MdZNkW2*K?*7dX8ăU"F]Q113mA5&I'$WvutCvoi9=odW9HA+#A7/,E;Xk(NFzH+uQ-\+$+A<[#zfhTB9JăU".snsuYG:O\Iz/NG:]>xPjxMlhPA5kjWjCw7'PIL/9;#CgkN:?Se0k#x(24P&X.-ăU"NYW3Xk=:uc++E%DQEopqXLAPOO]W&4?W\8AEh&^GS:2Y3_egyI*d[Ub3[a1b?QGăU"iThwmUk;/KGL1a_<EK;?-M<e7V0+Q:dg$A8?>vpa2[T?UWni?=5.F1'JJ%PEyOAăU"g11\v>4J+J-JA+5r\y:V^NECuu9SXIk2#Rj)f>S5V;tXL0i?*7wq5Ozj?[$6wj%ăU"4crDx_Pw/=+.\fHlQ+Xt7s<og<^w]ia'o7fDMDg,eBP24\;O]X$l%+ekpU]3n+măU"9]U_2Y7]U7*/gR*rK(0NU&u/;A^7c6+kP93Jy7f?rY'64,w2k>lkJI0[6,>^+v0ăU"84$9BSAc]<m-4R)xj^uf%PidN4#$4E>G&R)z+gEXOs:'0;w39_cVsfku;LfQ^eRăU"\&oc5^uCnt7fJv'?3I)b#r6%fC*)%\u4b=Z'XkUf7Fn=<M.?Ru;\+J)>.<QhC1oăU"hX4PXe#JQ2IUiJBEY[B#yrl'j]G\.f0GE?m3U'$[I'7%gZN/>Y/ENt^.ckWl]O-ăU"m4pO5S.w7%*UDA4EhdqGt8)*MFMonx(ly[_Y-+_03GWxm<YjC+7I7Uh2'9QUM9zăU"C_>q)CF_G7gwJrteVPj2L>k3,kW9eY6],'O?j&QK,,9En,M_Jg:=d+l(&>>m9I-ăU"=>AJ^?_a-Uuh;dU%e=i(hCJzZJPLn_\EB=qGdwHXnsp0(k*S5S5+]#CFZo<GM/YăU"Qhrb9Y>r%MwRAytX>i]qr.cC\b,uKau[4cK.YfG$nCSMuRbZc3i:M2Y/CVFF=<]ăU"#42g\z\Y$ey.38T8I-9h&=<nZkCMUKm:GWcx-KWDD.Vf,^whiZubGe4w\^a^Yf]ăU"rFG%3mlzGD[U(9J,ji]n$#XkkFEjeW5':J<]*&FO%IQZXu-_>CRIGst.A)gkNYwăU"U=1YuJa9]kjw*]S02R>a'']Afv-kp?l31%-PG*=Y/8CbWS?TG?MN(d;3*.c=EsqăU"40Gni9g55h-^V's=kZb$Y&#.T69O4,TV+:GsDfIJ_M#%G]l,>.[E=2D#=RCd:xyăU"\H.0tDL[/M\R4=/p$p?Gaj(3:atbiqS'N.2*X[Y.MY+jZ];V/W#kaZ(U&LG(mYLăU"Vp8+_N#+BRhTF'8Vczh<Sl),#Me]0.jMKdMFmCV?%F72dzgpu;(*v)QYfC*RZoZăU"/X<dOC-&7x&4r>)P2q]*ZMH/9*b;$ho8,;waJ?((oDOh[#Cac9X\&WF&114LCAzăU"T?SP.N=TnM_usu.cMekD:GYqu-5on8,NY)g=Bb8s$YCb2\;b?sVhAR[8eEI;+LIăU"$[iR3M2ANC3p.t6T;G1StA;0/r.iOmzc8Hrmjv(64&Eb1D-k9jTKb/26GE9qDgCăU"4d=A7G/bvmTb1rLgt?iu/nu2N=F30%QPvgyrg%R?T7;5'zfW=)&_]XHWVDBVHFaăU"?Pa6J_a7>u3_yeo;]0N*WxGdK2/<Q9T]_s-X<5=BJ?z:1q#m>J5S>No*<R)x$NHăU"pWm2Z?6eV-_wMn>q#3-kk_CrR9T5dQn,Y;gGWF,-M)tI93MCyf&=1$g$JiQ6:/,ăU"*BHXF,:jvV*p1+ESS4)52$s]9;#JA5.+31/uV)R%0JW'hN%G14':KoimH[kJ9B>ăU"7'\;XJrn-2z\zX2TMq[*%JhD_GsY9BDh);n%Ew_T8j+(9hzdaaY$,:ioQq:2=ANăU"(Q$<N2/*P4rCN\d8Cz<my$<j5ek99Z;%#(w3a+U^G%zaoJ#ZW$UpnM/hqrYeI)wăU"rqE$:DR?GZPz7HNCJj<dHjRK%+Th'UVh47t'hiJS16y>_S)mJ>#<u,)8-$ofCURăU"Z=lhoNs<BVAoKIV0&>T$)^Tv3>HY>)fbNc+s#beZnioXMi7BZju;5SdPA\W.dSwăU"RZX?1m-bR1I*9bi-=1<A_MX,E:^iCTA-)^/xFV4?RCV9AcP]*>AWlp=XNA*LM>3ăU"li_$<0Ep_mwEBF?_eZs>;J#^?,=t6$QO%,<9U#R)]8NQa<1F?i*Y&Xmc^X7odE&ăU"E7bP=.BuvVRL)mXEM&5HNAH[$D;KdjsH\rfD<O45Mp,5:Ns_jj4nAzER&=FXrQ_ăU"=JBX(tMMXLsmOojgMIfn7z][J_TT.gpe0Nr+0bD\uH?*;,3/_X3C0,UfQs)me_5ăU"ZBl4#Q9cQn=>xiwKaa#n7VY;:h#1\k^0DUb7WL0EkR=i)DY9cNCA]z+bs6(TB^OăU"d$5k9XEWm#+2IGc4t=x^DilxpG_I0cXd<<D39B_[;B(G6Y+oEH<mE$p*eL7PuihăU"IC8J:^\3\e5r*<RiWNuPwA)0J-q9b8]s8bQUUK>OK(jWGdv.ImvQ&IiKU5gcf,xăU")[?:8Hd9A'#*ZItAA>#]0a3.;\+fOH#YrYE1ej5Mb=l>Bai*gJqsD?bxF6S/8bHăU"&&l4X3141x0=;C_ivY',XLm*YSrKmn7Q0#6JN]cmEH<&/g=q:FjLola^Cku/LD9ăU"QTIABU2^0qP1Wl51XFBc)^j=3F#DF18(,RQ&X-Fp5#%VfL\oLYXY<+u_Y1=S8wsăU"vnd,P5s1?x\0JE,sAto/DM$*c?'KGCSr3/7/ij=Do&7qIIHq09(?9Nc(NY%$$s_ăU"ABe<4f8L?:zFO=nW^7Zf?v6-)S'^&;Pjcu27CR8AR=T)(E[vy]W4emtz)$;)Z/YăU"fISzMnYcc>h03_]K\uuD%XZ-N4)\J5U$N+Ps6^lyU-N/zm[<tUWPuCB8GtO,mS(ăU">IWDo/*SRN\,YmqsQhl//<H9o-bwP<Ex:MU9k6?t\52L7*r*5ADiAUtvr]*t5%_ăU"h.828Y%<\oMI:Zto>h/)u1\tvVv).X6m'EHi%V9<*ICxZ3s7'V3:T?cJH8<aCymăU"Bf+K?vgD;3VB$Yd]YtL3bk#y\Ce;GKXcY]DaDJ*zr$bj(OmLB.<;*Ex#+TTp#tEăU"K]mM^*:+r&3^Pp^z8adW.4FUY1Eg1OdmP54nd?J()F#kan7'Kccfo.>2c>c<O\wăU"J#RY[?;P#:vZ0QV//+Z:aY8^^)*(\I2Gq84y1/D%GS#TSre5Vm2eQ)dCVyPZT\căU"oF2cJI$6Dfm:Bby2&56\ou_aO'9enWZ^]m_mdI*dDKu>LYrF&'UCO^JSPoG-iV)ăU"IXH(=nIq[fscUtk[bY5?gv+oSf)$g=*/rb;$1Qw;X*Z3/csQ_oieUUNR:)#I:T$ăU"YS>m0ekKu)(PGc-Kd)l\]>QKSMBno#/WLUlU<d)JW?C4'4:A=_>0rF9aLcf(CguăU"Qam[VL=o>Wo.:jG.A]%8#6XRX:2OP)E.ZA/*\0T6X\C)k#x_%.B:1V3sj.#H#aYăU"%mMa?dTloZW:tWP+&gP9yoC:s%fGyKN)Ck(2]\M]e+EWF.SDpr6=mnwJjTSQ.IXăU")T_(,Jvbn&fX*UjP[$._mQhW94$*Al+f;O4lB]fc2vZ;HKsKat^F,2r/'bg(V8aăU"K3cC\;p\*7?i[a=-A5y(loLd3UJd'W&w]ZZ2*x4-BD%0^.#%;=f#b=XdYB]GENJăU"BA&MPLpJ'Ty6Iu)xM;r-<o_hj>>*7'3?J37P9RA3UxQRR=4%Qr580HbB*,F%?b9ăU"4(ZHJYBwkA/Dn&MURsaVdE4B^7tO3DXIL$oQz9[IsvY:(J%0K_jYy*ki,%8lP2:ăU"KnV[MiRbM=]3[KT;8vH/(S&rEvC7(N(W/iF%%*ygBfCZkh.SCUoYlqk'd8O*RhXăU"3tT=ddTkX?Vc#ZViv6sq<2ImVGgGnF+R4+n,K7nT9Q#te^GH<Hr_-SK1VPhf$2[ăU"FbOA*fU4OgAa_lLq.FEU_KVaNW)Lx#S+E[Z:uh0u3c16xXsIVPG%hgyPeDfG>>CăU"Lz]=P>5CDqNybB=(7^80w_%O$V7Dp*x.+v(_1qWY5HIxxm?b:%\.nK)s2^Uq7hLăU"gV<l7#kYvsY35J^g&%n4+KQ8]PJhh5s/xblw+2T0$?W,>L/8(-iGM^T(3_WLdS1ăU"V4R)Wm^nU6\\4]g[<k+o5drc]82=g5hUlqtu4K-6+%T^UeA_i=R>$DDT%&Yw%:GăU"#Td[AMqdj6ZK^MWtVA>B-,n(:cA6K]6YaQB<5ne'5BWQY^j?O^=RE^aG(h#%/.PăU"BY-N6b2S)%\&rjNbpRuBu\k[TOj.PNt<9N&UEjGs6L2Pt.PlrtWt0qQbP&5TtWfăU"(:NsmIw>rE8JJ(Jt0<t-80F[.(U#5pNKhHorFP$qgTpDX_euM]]MmyDn:Ihhg.*ăU"a,V5j4cQLpld>]OaK_j6rM;shyD,PtlfJ?_Cf9YZj^Z2+rWonU-kVmP9p[jBFgoăU"7la<]ooKZHlhm8g/rJWI%IGBdON0h?bH^jiBCAY4F\9O#lb+M%Wcakkmc/Sa9m#ăU"OP5TDfYE2z/PSn9TX1l^tM<7Y?#50(O1qRevN,/V^*oi;dbFH_MIcF9<CAFAG<RăU"I#;I/TD7?6U[(dSc(>Ueops[Irw]wNjUk<TfO2TXIfv\E$+HZ,=.mHOg[m*g&KSăU"(C:+RqL+G[<acYkGW2-[f=g(8OElH.Xhnk+24FsH1V?/f9%+z/dNZQ<bwK5$Xp+ăU">cj9>tI/Y;C-Lkg)[Fu2?HrR<aS\)Sx;Cdb.=<2Jeb[<(/>UAfWY[284#+O=Fj)ăU"R.w8_MN;b/RG&We=F[B]t^30Uj&Ub91;**S?R,Q0s*A](4^6T,E-Amt1C+&1]WpăU"Uf]*k9U6oh4#f/od9/#$ZJ)E5uWmM+X.X%6lF9R-w2_>edn_V+8I=1)\:FOC_dUăU"YxOdl0&>zP1F0r,'%f)/Fd$oz#z(8WXji=,^J+Ci%g?*Qgl:)l[888+1wQbPt0\ăU"x6l.aH$#?Eqca+0eF(-#-7Upse3)oCGxl#iUb/v<0U<9bZ#6&qEVd'O\ZHKtfE)ăU"AAG2Xka[-kIuUiRai(4%hv'6.pAH7)W*NtLIuEed(z=p]tqd.QnvW&hFp?N.Vs^ăU"lt-Q;\&eO-/,TBNyq1foLfvh#dtehEb%kCzX[;*uP#Zzf%%OFLcS[562P*Lil4RăU"Y5MDRKIPqXw?0iDy--:&#6^R-/,VXVD3^A]1H#TLkw'akt;><,v]/)ipK;MJiZxăU"l_]'+.a$dR]>wN?6l)qxt1$I[AIR&Lq.[Avp^CBo2/d/Tbf-ZFl?9qC*DvF3K(QăU"rs01zBd(/F,xr'X;[FE?hPhY17mTq9w^:GFb9-oSwh3mCJUT,_51\==^&_RluE3ăU"c(5<#I0uup4>S)iie*E8RM9Ebc\De%TFYd:;XQ6/&i%kN_#S<Y[^:+M+J2#RN1FăU"Ukx:-UDGaEpcRVkj#1d9iWJ^=QakD80-jQb])c][9sv4HD_Al(w\G3f\3hSuRlsăU"$CQ#pBwNZOpeshSJFU4U\NtNHT1wGT_n(]DWCeUTQC7'dJN7T8d>lhk_0GGcTtfăU"a3%0frdZ7(W'$;2Uf=Fc8\)fe39cphK^;3G<d\qrs0+a*Wv#)Yr>QFbgfkfU#'%ăU"VrLQ1W?JCMSOQ6ej8\wOxx6alc:BwyzsF'R_s*suDgS/3_(>5x6P::?Xp\*#uECăU"uIf0^WlNjMj(qV^+$5(g$jU/&k,$SsX&;S+aK7vh1-9_'^H\u-)POZ0cex\9+d1ăU"l:9vD.5P,UO#QMq4eZ9Ed:h2)GMqp2iG)7=>g_QDm>pf0[18bX'LgCyHiwrA&XwăU"*.ee#n\fgTE^MD7V;:9_]1f6YGm-2xbpp?wEC5Ho+1ltwV^>Pk+8P1c;u8ErSm(ăU"38b;;LW'J>itReLWO2tz;)>[6rPE);<)>:bS[Y6S&7](?gz.53t8-:BV1fk]XWqăU"-)T)\RkT[GDrL%y3YWf^VRLdqAnes\,OPTt,uu(oL81iQl3/Ll.hm^;8ZO+8G]căU"n=5gQ:Xv*_wnwNUC7L2EME=>oDb1ao^=Q*#W1-Qn-6#ImR]SPaZXvlqoVIYaW&wăU"W:%#<:^O&^(a)agSV7qVttoVX+LdJsp*;xEu_)wUZH;nVc-O_EWRDR:-9-GTD2uăU"C#Bb:B-Id3,6k2ZVEdfm(+WKMGsSk*j^N>;9T#S6s#lZH9sC?-aV+-o5DSQ6g;WăU"sJ:o0djH(Yr_SBl^0,-$*jvrQP3)_0OPw00bT(Q71oS?4\OAU+q'un-o?WTDVAgăU"HzljaB9Tt%qLe$_^LS%gFCAU'Q#q]xpTQo#IX$QLz/Q87ZMe.)VvOrniu%dV1rFăU"Ya^Mtv>avL$M((;o/%NPfl2LJ63F,C1Er>Useo^T[DT.>aXB&qJXfHQ._V?#4hqăU">Y9cc9HadPquAh-YU<oe\-iJr*BnkO$=sGK&9<#%9(Upwo29;NNm\S&C'jd#rhcăU"j-0WR6pWA]-_o7c05JdvAC30j=5_(m0Ng9+w,wlr6X_h2J9VQDPF4CYmqp0w8K+ăU"DK49>Vk0_R5e#=g(AEvS/Qjkxu87YEaR_+a2f2Nx8,I&EfJA*XsXtB]%x^>:Lv0ăU"An$/k>ZZ>NDeB6E]CaQE^:MM2cbjF4WO-0]$#+?3^>iw0<2Cv_13lv94&okxeZjăU"[$F^C4/wJ:6GT*ck(:VB/d3-9a4B%e\.#Oo>jm_FJezZ+87/:&c?P(P'#dCloYMăU"m?$'$wYXk6(11=sk=,w4bqb[X6%UoDQ>d,&AGI[.(;\uajBK\[YL(BHre^GgB5aăU"qBGM0\#CW7AafY.FX,q8M_*&h\1.K%BeaavFZUi&GTY74,bgoRmr-j?nllAs\[/ăU"CTzPmiY&G=BC<;z_#uVd,:s#<NEXeDel*R95RxA0j(Om\>ZCjOB:<-:kP+2Q.j4ăU"DeH83?m3LB-yhY4QU8BhhADMj_MOOK-N<Q8uX9pZ;oOvVzDiJ.Qch79*j1o]:f>ăU"?v5Y8E1gVjU$CvS(1&0FT>73Y<e7_8UIv*\y9v8?5km'2l*Qgqx%Ve*?Gh&+D<UăU"#kGEfi9M,S;,^U[Kk0v4\hwM0:(Nl5Q<D4.I2b?=o1]c'l39>LCUyu'ZLLzFj8,ăU"Dr-JIlMH8TQ/[TsfCqMlxCw<PE=1'3\lT3rjtU:/GCFfj=.(-)+qI&u7dr;d&oCăU"kAEzYEQ:?cVSX==gSP[T#T:h#D-R1OIKIAymoYFF<w+B[Mf>0mZPbk[^]a5uO5iăU"BXRTLx<YyuASKjD-J7:1Dhs()Ba)&ZwQ;D^j]&Eu>ze7C22.xoC)N-i0c(ABj12ăU"gA4^UVjwk)ufX.qy=UV*UT+IUM4/0j+LY1cx>&<PVQD\>$<NO7hCWx7Vde.$f#XăU"/8f-sP(CDHC^qorj0v))65jW>bpGt%dhng_?Y=3#hWxj;h^or<?i)R/>DfD9_\qăU"5YjIBVFcQjmhdC5ChjAjz\e:3Y=cs4.:ciu:2BW_6KF2\0u8e-+mCRZ?6(b.j*CăU".NTQEd%?RGs7SW?,y(TS<:mr2p/rP#*a%_&5tw9Mk%X_Zb=TL]Q2XNYVvFY.CGtăU"A&M%*G-l%MA&+Ue_Tq9ufdU<KQZn.Qj%4G'iwGZFB4pBsII%aYyOYnsEJtFgMthăU"%[vr?Ja^NZ*<BKf<'vd;Fp]VG&)_2TdFe49jkeDual_e5'4I1fJ?1>eBgNgkxdnăU"EUYStOVgQx9p=nIa.BS?5LKyJq>SN5[,ZDHg5n(eAFFi)o:0W<p(8D;'sY=:^N5ăU"ClStLe.(mrDk&A2v+G)V+AU^GCI>f+tYIUP2<$[5SSZNMnHX$f4bk8Q&u(EZt7făU"%,.2IDeamvrI.xb<Y\(4>l'.?bxEL?kApg\^e+*4,Vx8*kY/Ur?wE9a^/A-bG<NăU"lXWg^oR$C)-v_MsZ#S_c%hc?i2*aOGbN/CGDZG$q9USae+8CY/ugjR$#%VOGbMOăU"t*nXZf^Y\(fnl_l56S#SataP)+e8DmrYX8;j-P39J0FS1xBXi)B]k,%7de0IXL[ăU"2q#%QA&P56h]JP#).<17aeeiB2l:h)b_9=O*l4rZMD;Il6sxx*w<uvwC7G1iJjvăU"BZXT#6\#D.WWu%f;PH0:Uw+ao$0)f8FbfO;D+7pI]0/UZvtjT.XTtuGYZxY#2SQăEND SUBăSUB V3ăU"K9ubh-H_(fU^Q$u'#\A%+8;1<V;iI-bQvRSD^ILIKj#$s%RJG05wHcgti4u*synăU"ECdc^(2j5f,=7a*:Qdc5J=ULE\()W5o3;cU.wW$(T&ZxERWIgq:2[W[K[eo]7CpăU"jISp;>c/J'&lW7+[0Utt051Q^R>b9W1B^8FV[p\)m'WaHQXw[)&3rcXoPq<_:$yăU"GD_EZKcnO?sYrH5F;*ypz%9;oG92:el)GkRV^;:78*e9qRt_Z6e\+?'HS*,2%,\ăU"00k9T9F>+C>bt$S]/uD&a;rEeC,GJa:J+jH/7qpxjn#g5'wSXI_GDRd)Wd'Nzd-ăU"N[$vQBk*br'42OFq<MX/V*C'YBqWv*36mU-pS$]en*gA^9#<XU6'0Q6\B;oP67lăU"sBJi#R.0%C3aIRS.c_/jpgoV#Y68io+UVVQ[IY-w-Od4%>TFBRaY[lE-p4=11/oăU"dSoF9tf_Y\/TL'[2+(OUiyOm#%8Q'&[-I5F_i\vrxi/tUlRYraIn8A6_5f?RDmEăU"^:HNYgj2%r1H/&A.Zp6?qB(R+__f?]^WP^fs)tuqp/6wXq81;>xfq+,qtHiLb#=ăU"TKl)Rg62N\<2ei7u4MHwv?xoW%&wUGd;PE#GQq=]YC#^wH\fPhV%%ebtPFVt*mIăU"I]dtL_J6<^7bM8v8H:P#6E.H'4(-9B9[MNCt+,n#R[pWofPXz0'XL:JHV5=:0WbăU"zz7dX']nCxtsj4&x(hlcJ9<4r5'#H+FQ+G*)(*8&S&rhu62T]QtRaCHS\onYON#ăU"/RoekN$vM[^dNPr;\.Na,%TYFNn7F>>6SO)=JkYjY8RMn1BM1Wa+mU')<UxPmFrăU"8XKqrB*TUM%V6Np(qIDvDZKVvdITSfjhj]Ss&/$W]fTC<bo6]s>8Q.aGi$VlDcWăU"I%WY9]>>am\V%HWU<s6'Y$,mDOJd:\&qJ/dDaVenL8&GlQCF:C*b2d<]3.=UO?aăU"J;3o=g=Gp*IcU&VNxN2&R8##H)m6]JIlU4]#4oR'?[GNeEJ_ji5'+e$NExVq/?3ăU"EQUET1Pa61,Te36*]h5N5aOj3vEB(fPB=zmKkG\.eOao&MG8;;:'2PjD/EM%RHbăU"6Qj6J8R#5.$Z6kZllnH$8p9N$KpH9.cuG]sdhXpu7HlC3xouPE2'F8<YCWkORo<ăU"uWx&u%sf-5;6%qzYhbv2ZjY#j]N$8\V.x_R43]gC-ffMXv%p\ccd06C76Xn7o/FăU"rQeW\-;M*'62n1Mng6LH%gF=mOBz>Z5WUrYHiH73+YBn?;V*HVo8=_N\/a7'2[2ăU"hQdv\cqV5%eH;VSH4a?2NGDAEW?4#dFWjfG+r(j4$[L%O.3LcZL$nxZqMAAf-(săU">)DT*_X:vs9e*(S;WrY#=gif:<dhA#0)^[a$tMuoHgnUGd$R2.KnBIoiK),<lB)ăU"8.#lgn/=+++K#.U/xub?YdSB9j%J&aX'ziYCws*Y\>P(gWn0w>z^dpSx%]:;DWbăU"oDSv2lq7)Yb8tE?Ck+irA*\G/\gzK,-9lIdNlJq2Lrvf8Nm0\gO./1Gp32[C=IcăU"-NI3X0<9M.[WL]\IoV>RmYwL5P[SKmfGC#+E,T[jToOSh\fFn-[(7^8mypB0HofăU"&pKC2M]wko9NG)>q?IdZ]_I^%L%^,ikourmh$zzm$wU1wZ01s1fDN:huXxBSPz7ăU"F)kDuY)by$j'QG#4s2ntG%$7*Pc-#&nJbz3>e?rgML9_I*a8msijOAr-zUPDXHZăU"Bl7ytMjBtY&o4tCJZjQ.*slgp#12pLw:$xIrum;ncT%v^fcz\Lt>oklm#u;KL6măU"D&U>jJX;DknlU0risY_f(qK4NJ3oI\N(oJ,YR\Nh6JbT>B6xNgga_*ISrn2tU$#ăU"6xx+%,fst::l1*;)L83%TNrQRv?(D=Udm^\%#o<oPC#T\N^^QUwwLR&aK^5PltkăU"JM6vy9c)^IM5\c]75sB\k>Yc*hpKm*)CFp;i6f4<KRqjC.yeFK0GCGT;8vi2#$săU")R7^('8SWC)6Gfu(ys$W6;*l3G3uq;g,5Vet]]W**jSHn5d$/si\aD9xkV?dh0FăU"zYkb:K$%#SN_^GF]Gy$nMZ7HY#VZV$r#M'oxsOqMp>Q3A0aHZk.1ov&#a$dR2wYăU"\O6)c+G+]%#2K'1PkP4X\ZEV)UF(6lsTDJYtR;QirS3jSNtb6)6/IkH\g[6Qd[păU"G3LgbMuI*kUGQkQ1J+N6^5G^d:U+E8R6]dl5S_jIGa0XZ<%4r=f&$[I1l8?l,DZăU"#mO33F$MjXOLUKGDxB/VL,Y&%UyVIjO2+i,i2fto.JOFn&NrIxsy>,/pvcL8*emăU"5*q^,6pT&qvVfe#Ac9bXaKa#d9wl1pAn.M*07.l4cfe\:yjjM.Fvi&_G\92+LvIăU",&8a>6D#etQJP+Z8,(%hF^R_T'HSb(Od[T'i6<o_MVI7h+?ww&w+ow.aGJ+Wjh\ăU"<ej+u.IVog0La2lenpuIQQSNZ.qk&_<C:1vYM5mXAnQ=Io=F*jO)w%YALNZ(;>&ăU"b1Z8DNvw/#:*p'_&iVDVqv_$J-xVt:X7ZnV0o?8I8oKEJYf)A,f\gCXXEo\=KP9ăU"8Z$>19o<uH_GHiV/O\qI9##EiC<3%:;8MeQsdV3pebjvtBerl>Y$>bQWfAhd,wPăU"t2>D=W;N=K6vN%ofwIcbj/,gQg-5Sx/%,&>uRAMR6le&$P0dVTLqMX1dNhfdh%HăU"],kj0^pO6745KFkp;Za+lvNPTbjQnt*&r9;2KX0Mn:O6q3pG34g,R^ujkT+Y#7săU",WId:DLEvJGM-7Auhg&ruo:+\%--7W^MOupA_wxI6:Fi1GV3]s)m%0%8j7)7dO^ăU"JI-F7++y+k^=dE8?xp8b\w[UN+:w]VgVPWC_a/rHDYZZ-S[kTI^S?J2RMip?6_QăU"R:$AEn&iqT$/<?eIe^UKp^f^hAgysA\YHbjRbb6wl.,i7^xX3K$Z)*,f=DP$rF8ăU"o'R0(LT>ZljlW<Xt%W\,dHn4AUT73Wn><Nz^_DNA31V_r:&6MBLh2Lp%,7T;oa<ăU"Uxev*HE$tpEKv*aRM<XtETvT+D,dO68%MAhz1%9%=:HMJ=O+v[rwQ[a,BhY[Z[7ăU"6k,Cyi;^ltJH;\A3o5:NI$<>-RXdfcBfTx&xkst2No5M\FdG/OmA[6G^G*iWqoBăU"WK-Tne3mjg-sfpy<LWiBY\,UlG-Kp4vU\('Ris]SS,_U<:(g'p8.d2l9=S5U\vWăU"hl>.G?BX=4<U^S*Y<#0>iQJ(&jfF6YVlqWwD2I012iMGga7%\mrt&'auJVRY*GxăU"N4C%vw-ra)24Gp#ORC,p1)bw]/</,dW(8C$ncfvGI6HCgqC7e;q0K$=IDb*SdPmăU"4rh5t[,Xw<3RR,Jh/n-OwlhvOp(Q?DoohqU2Z:s[?9fqd+Cu$+YwmIs$/MB/jdCăU"sqr&05iq60sc-,aH<':\Z$c.+]u65X])?FH&L+83M_xd-HK&+)XZ\:K.GO3Uk%2ăU"Wp2Eeuz'87_D0bap(R#Oc0Xn1DbU;)F2kbjd>AeRf*=7I6+1\CEKf>dM&*b)*3căU"qBTh0]?=iREL[J[_x\J.<hlxRb$1isGJqnNI:H.9s<$G:Z0nYlYfY7gRr5W]8mCăU"M'06-=+JCGCmBJW41PA\k\s15Rr>-qp0gYt-N;$wUc-Nde1hGzS$SBSwP.Jfw9oăU"c(Ql4/GRhZYJ3E3;*rj2Oa?FUAX^y32f]y]J_V\bh*x0)8h)R(yFYd\^,WXQiWrăU"%C%]T[Yuin.AM/afri_GPZ&s7rNW$k:fV\sgsrmwQOwLH#oodR9-[D]5i9B><[HăU"PAF?L:AjC]7s,-ixN_l4<I47r9[aB::0X2ClHL;tN,x>5d(3Q5FH)^d<'HJs3WhăU"ev[qA';Ee.j=[*[O3NE64W[G=*O-GcXMIiI6-dCImabd34H)-dSFVJ1RVOk5^o]ăU"P_ADIFabHbb''W%z(d89N+MR5,;^(^TQr-;5jSI?C#N_k)/MV7hB(6Zn$>;:pklăU"qO^CK7an:b3IUm*9:9#Gyc4Ff[%Gdj4iG;\3#5Rh).<dbxU0F%<>_UV0X74,3k%ăU"S3_xWM5mM]JL(c#Vbh_,</aD7V3A:ZiNVtSxX#P?wf/<\FW.,i%K50ZbQel0G\+ăU"_u]g-Id2XAJYW5%g=_K$rrM%+jV.TGzfpWsJmX2726%8tJ_T]+v\h'ueWeFncLjăU"drthFr_'ME7W/ZQhN5RUkRM1-GY2Z\LK2wI_ER+Z_PJuYGJ?=Ynp?31Og?M,U9TăU"NbPBTwz2kQJl5XZ&^;Faj-gh7w2=z7C+&F]=1VgJL<4)0V??iq[Wm*TWQiM9a>>ăU"-p9z2Dm$*K(E'i:22L+EIO6R+GD.s)CmwMI'KKP^fJUms^W.Z'2NZDWbqQ*q^>BăU"t,(X$K>Nl<X.XgHs3a9+vjgWy]T7K\p3j.A\Qg7w.6SfW[gg^Q9)M<?^plZ]?\GăU"T2i:W'H^t\hto0%u-58N2.BaNkM[9?lWpA7/<x=Om=m5$f7Wr%?5j:YJ)](t4gUăU"KaO(9ncpC84LpnWW39lr_oK+#$/,y0VsjZW#/d4_CCd9B1EIoC_nCOjfa5G7ILaăU"+RCPubyq$\+/4=5dS>Ml5[u1#P&.'Joh_tFIPB\G=-]'v]I_v$da[u&=U=CtO(#ăU"af8,br%I0/TSw%sfowXQecbgrs%)RIxCtsGVWpQ\IWeI'TEVCmh*4Lje;ku,Ce#ăU"49j;==4lOsIHU[/eq/\b02h9sb5ed_Y47s:CQx<Hc5_dSun.4?w.=YA)_SXdwLqăU"G3B[HXS'/+TWZM5uJEs:,B<Iq7w+6cil&\=C4qMIRrG]hFA-KtcC9krhN3='5i\ăU">G;P5jfE*#f>bjvrp7v6Gg&r:*KcY?VlOjdFZov<\Yvog\=CnAm,8a9Ik&*#<vXăU"l-Sm7IXhH=U&o8Y&69i<8WZ8gUaZ9rE3K-o;V:l8tmJ5R#FIxM/x*&s;(WH+:F7ăU"[C:8dXF5VireM&YDrsq>Kr;x6Ok;e^'i3a;2[\>f2)S$:4aEg1iZAKfm,J:()GDăU"-_^-2*gV?mw,Re$r_:2f+,Y,kn9B/-\tPWQ/;hZn=uX.>V+2g0W7n=;d9o'0CuvăU"?sklF81I.TdJZJ*7&fT$)ds4IaliNw[*nIfp/($7WS\mx5S=ge*::ox*WFtci%xăU"SRL6jj?OBe,N7G=0DmfLhsK3GSfFmG?ONRhkR/Ap?f,jY8QkFqrV9^JgbxC6PENăU"?e$Oa*Jj_(W^kB+Vr(?Ipx?cAl:7DlWp7crgk%&pBqDvck&Fugc1PLu)[YTidM#ăU"WL_>twFg>S%/OV(ol#S4C$4Qpte24&pWHvB_%foj;4Sp>wnj,?O>]gg\kb5<<BvăU"UTvhTU_[6pV'$P+XH?<;FI]W7T9U<nka#nb#^#%AZdp<]M9d5$pY*jCNV3;h_dmăU"1m/k>kN;[mn^(1Jf?v=z:qk#.JPd7Oc#X37[&7f\#zDll&jn(QR)IJ*WWr*5^HeăU"cwSC=[<_7Y&hhIl7bn9.roVnZf)OKrI_StxDD56sZdn3:(saxakVp?K>/rKD\\0ăU"9bVEBpTN^G0\TiO*,AJ1taYQX/M+DmTu8oX6,mBH;.(s)eI2DYO^1?Dw=_NR/XKăU";yZQmvZ/0YS#'%Q%YdtHEvPwut%'U%hJg3,Zt^:aU'E$;Ffd2(68Z>2GwRlpmf^ăU"#Nj-Vo2sy4nQi$fFKJ&cN%?=IxeR]]7kRD]U2f#FHRjSSj(=3;el^']%?#jMqtSăU"%B(NN46ZM'1[>,Y<If$BzUt)wOvBo7t+>R8KdcA9c'yliqT[^8uZ6V-a%4lB1okăU"r>jms]qo83B2KN;*ld8C&m]&b#fzp*'9#b&at3Hhd,\k)#%?cYbl6$YJDo8^Af(ăU"lnDQaTfZ>[P_Rg8nB8py:,EjSL+kF^xvPm,#+JA?Yf[fxX?>vfJB9Z$p]1?NCk?ăU"g?<fg-J=YU(NXG(7-vn>2RSu4VK:lTE3rIfaA^MPM2,:uq8cjp9q05/svyj)blTăU",,fu_r*FC0R5Ms6q\7m6+6x$dbd6tIK5.v.u%p()9%%%%-F%H'1dG&w(-,v4%(%ăU"MD%%%.%%%%mfu(u(SlInx<(D,WI(n%cpGcF^kGaSU-,rp0p^A5?2hmZ/fC6[sEXăU">XOAg=F4eg2gLgBJ5k6/Mke#,QO0j8%Gv0oqC<pLaO][V]I9/7-tY-O4MlwTuD+ăU"e\DQQdW#4$-Ml$UWAY;/+z&zOPHoG^pu,K$$LrgNmwoTD6luW4wPpdMtpZXxYlsăU"di8ruaVpupTN^Wl08Ahbmxjwct0cqo_Drnsl8lZpDMtJu#w076r:VDrs.tqlfXJăU"h=pPmXsTvOXQufNKHo<tzVDHVNMLfyGkA>i8i$s,)TJyD&\=TgxMj88]sDnrE:răU"x%qmb^C9_>ht8FOuyPr-ub$0fOnzC9Zf>D-YAe5*lFlrO.t&kE*hNfgy>DtE&D$ăU"V_+%8OiXFi_/Yv'ES<s^8&2ojYyb?[i5B0hNDlFI3IJdITo,K_F?-XeL945FOG'ăU"[s2bLA]%t#dZOo4L%Me=LA>0?oR6g[IOr(8%mqWC9J+(.$?Qm[_4SN,g=BNh#,YăU"C-kC,pdUm.xXqS&E*D*Ji<=r.2N\hZn'^&LR.1wYXilm](39el]t:CkI6P<koO-ăU"Z+W^LYoJ^fj,v?uYplbA+.9Auq8a4cJ;diY<8ka5uK#0Z3)'6DcB(MA/=\bJ]IgăU"rn&<qJ+4S1Xq(5xK69hlReB=co[o13V)57RaU[>vr=FO<5Q72FV+>h^8oZGt>gMăU",T/tOa]>]542Z;j2R-kRR#iLU=TX[Kab<r]NS-k6H4CSM=ZT$IALb^bS,+L.n7'ăU"EZ?\<nXG,<c<:(HFLnEUBmeIX#mA,A(I+Y6;g(MmL>>P_>vZ(dfjhvr'AoS$1DuăU"JF/HRrm9#5Jt)i'OMDJIFO3QL.Iw.A]&94W1+09Z,j]RbZiz)PrFgUP&]IKK*-;ăU"n.fBhKH,b8F=tJ>5'Wg7FAt&B?7DqZaH=x]m0Ljv<h97agOeK'/4+G8I\$mD/&PăU"+,g%AsZk89O([(TdT3lJT7\$C7\gsS-q$6A)L*08h\#'JO+?[h._7nz]o*eV?s6ăU"7WpoO'W]#[7pt<f3Ccw*_\:-]+oKooq[7d+o:eQ>J8'pwpGLJ_ru(K5KL_]b,-YăU"FIKb<6je3D#r4]u7GWEjtp%eA3#,It5h/spsKh'XIq2]yxlRlr\cAuj0hg5()2NăU"B8vLRun($MqULb/7G;aI4xvw.p64w=-qNu(ehbbghAuKXiUozkC;d4Z(_6-b7kNăU"(sk%G)DLA7KUUD6-7rsrqBey]+-*?bCB$w;&LH4VS^3kA$T)40B>UJCf1&_\FpZăU"ejra%CJ-),mlS>2<O#.XHxHU-;_9uJb.11P(B3U-tO<DVWs,LDJ1W2?kmOC9[T7ăU"jS-q7g,x(5dX9aPOV\92)w6hal^Ov-Ug4Kq]<PA=DXL]Yh/Qlk]fsq&syaU$Xq%ăU">WM\XW**R82n]5/l6\]*G?5]K$&M%JjADv8LR,-]f=[*_-u:gUXJ:M11g$NVCxeăU"_,233l_++V[hF?_frS\A7[2LC4%y6UIlFv^gU>-k3&+#W/o4l_-s6sL&<cWiIw6ăU"a1zK:p>E#'rEGS(\u35=&m<fF5-+Bam[B&S\F]o2s^92:+.I8$ce4qYNNuwf1C0ăU":K)Ugy2>cRg=Ot(Vd&15.r4gO'=&OXh7iWL_<z[fT*1=G7wu^F\0wn7T2,Gc5W=ăU"^sF_6(;\'j//1qV)jH7i<d+1Ygh-dM9SVWBn+RVO3f6HodlTiHFg(<7X7X1s0&YăU"XNUJPbj.0#iaIt]8qYn<H2.$&[(<^rqsOW_p#SrU]Z%Z/3a)Gx5jb5?eF:+mZ2căU"VbT=Sn4Z\F\F3N8<OqJkd,K5)SOsT6YQj.>r[59Ad2VV$a;AKec8)#S<uD4.odfăU"w'2pRp8f(8gsNG8u&uV<M_\U2m8,CY#aAoUb6FJUe3r7Br&kMP.Wg%T3/0arH:uăU"UIC4kSev*^%Ea+1jJZBa*14E_ZdhEt'epDPnaD:R2;&?fmS+E%:>8Nx3\5S^+aaăU"7xaLjL\sdGfOqMZC0=n4#EfN+=KEhc73Xw<Hcl^vo#xv\K8X7WfN9=d<nAK%J1SăU"mFqHT=0ihN=kRQ/-BE$dsw0tCNI>Yf,d6rHdRBJX=%QAtC%GEYr>hoxxIt5lsu+ăU"^Y*yQ<Ctl0b#q$E6-mxXDubN9f[.gBkrJ7(7/M\sl&AFsgV8pcr>-aHeow]2+e-ăU"3MABA0sBdjhQwpbE[(Q%g.>\k;r(j8c0mgCcqlNsNul*'m>c,20#+<=lE5yOiuVăU"pwr9RFnhi>7o4=-1L0]:D;8$kNTHqC\k)o:_b&sU:Ivi,r-Aer<^7;DUO7W4AdAăU"3^o-6^,HtWusbL,dbMU]qvg^n\z<fWpzxWs'bLA=$4A6ZWf)3s*e&,du\nmd2n,ăU"mbkXgWflkL^Gb=[vYszrm&THS$cGB[#F7W7r8r6;FLOlxJren%ppR]mQD*E_GSdăU"B2IFdz^ImKhT>O?Y7<msd1qe9(,.EtMH7p2r6V0lF-h^<)Vo1)nCCtgY.xr>.wcăU"^9K5ohQ$o'XF1Q4JmdhWqQ0x<QRam+ak9+rYQiw.^.'D6d=dx#,fpvFSIXp09NOăU"NEB)a&_aZqsP-L].goUI/*rJEpull6WoUtG[x:;e&9q%ckwP7>+t+[aE9sogT7oăU"Z%j.pehzxCtt6Z/+&Pq(\q^4(3R(tw'Xd?Sp2FKtr2t1t6,xHuW^mnU>sLl4^1LăU"lU_<wQdP>aL=Cu-PoGY0n5H]+#?EUq0<plntjQ-%r/,Pq)RpOoc%F?s'Ou+/gWjăU"<?E$sA]mB&4Ugweg1L?=k&u/Wv7$&&iOCTVS9D6(=*G2p]8#onZd*70+vO2YU>GăU"X<iAX,s:\gZ5bP%z&]?t2-8D'yqPq7(4_?#5gyf:80mmYcZ*KeAa)M>sYQxkjsHăU"fpOjmD_4LPURLFAscGGvRoNS:Akktl+kV8$Vs2fvAsEkfa*O6_I'*W_z[6RY:\^ăU"0u%s'Z/8ju*Wi>hV3_*UE8)KTH/P$r3?5q\gY0THJLt:7AyQBYrWPAY+%[^[O;VăU"W*g(6:kGCi8Dek<shUdsi[hu1)a3)mxPs'Pb&bc,*[*,#eZc'kigtTOb*s?qS9păU"p?tW19d+I5#\;aTkd)1LMMLr=g4fvKPh?',BH^1/KwG8RBk:9)^</)hd,b?X,aLăU"F&]zD4tTi)CV:ZZQ,]E+aA;UT%iBW'4#+8Act1&;FuIj1UWlEZX//0fy=OZPol-ăU"c=KaU*a?F21.M]&5?m,r3$nJe#iJa\I_=IbpBhp\oQ$'5RWB\=MBt:^Tr]8GVC4ăU"&vk'XiIFD0_TX>6XAm[OJ9xO6M>d,D)L&.p5;00g>v569rW]s0FaQ^0i,G6Y_u-ăU"T3/T8MB9-[LiT.fFoi>ON0S(be8m1otGC^/F/g#TPdb_31?Ebd^]2pUhG,uZ(WuăU">KGJ/5ia:_$PMI/HdFPPmEgKh*T)O]$B\n8yM0*7[u#;LJ,c9ufvM+RC48?cuA3ăU"I?Hj.5Qpm+Gq$hSGNrYNxlV\0(s7)dY,Pn.GYUsn#DC0Q&q$8'<Vm]#OezI.ISdăU"B[*(AS2V:s:,OrP]sq_5XBZ3Y)Bd#GsP?'.GU$<PlW+\2^?_X>iFSbo^EMhG-2]ăU"-26O+f6+UZ]V*P,IfFHg)C1iCV4=$V.z<yg'_VCR;dQ1*JV3#xXg6p'18DIBQwNăU"8?(j5PKl4W&K-OF/J7B+pj27L#K5SOGc:-Q?35K+i)AyqD0buNtQUcE]--4l2'BăU"]vNI$2Ca6;f&IqRasDpC[?kZAHA.2g6Cl(0g&m#ELrb6AoAM?cT.f?^b^(^DO1LăU"+^Gp_h+-gSm2_/x1E'1HDWRM[&QCS;%/.H<1eF0OKC^JL'Zh\]OAwV(lR=+)g&qăU"+qKK:S-yA'c-\a]RqvgByH5ZB)b\sWRno?:Jq$S%XW>k#_4F?uFoP$Qeh<3o0YlăU"EH#[2HY,[MSRQ?jEQ_eWmQugC*kcr-[psEEEL#[=(Gr*Z\^0T?pxhe\LH(*qBiMăU"Yg_KP4WDX.UbU&L+M1rlRG$<0#EJneSFD*$,Qt'LHBgqS9lc+A)x?k'Ip.qx<(?ăU"a:'h<)uZ[I/*FL6/Yx;IpT[h\O1)^*ni>'&a'hLB(wE5-J&L^NX2j(L2/Rkg+KiăU"\#m_6o9:cWR[;_UbM<5-GL['P1t99TsNI>''gX16Y/5j./-tUj8%AwESm67#dlLăU">,RX3NM3g]rjRdqG02qz#ZAp'>VRk&jqS;f'D(r4ENK]g(wDSU/)xU(D.F;le,HăU"cSt5.u2#mBNq+G>P=TMl1M:%cOpBw/\6=2n?ElQ$bB_ZRmx8hJl^=U,k1H?)7RaăU"l(I-2wQ,t%J><lG$.iB_GfVuiP;CUyf1s>&%\N_A1.[K6)unq#\Z_UpPASj^S58ăU":_.tbebR0Q8)K/tGYD2K\Y[-j^W46>L5liGFVWlag&HjJ;)EU9M-'h(wz>e9'&lăU"CLO<'QRU[5nQQL]F=0^i]tO0wiMXr#JmD.9Z2>g,=VuFdb#l7evX;*YimU+9vegăU"i-A0LxR1oHn3FLacB.Lw=yOYP1P/\'XpFgobLqCK71Fgv,i=)HX8?Qd^ew5.s6BăU"g?V4QYrjS\Hje*ZmL.kik2aCV9KAr1'6*?kMWC,B,e\vwKFD1hZs]qw6?PKwTG%ăU":C]%(nj4NE/DP#pxdEW^\w/+yKRZ]Af:d_c6CI_$P4-A5PAL:GH-pl*j+,'F'27ăU"(p3(6l(fs=*M$-qr3/P/A/%<T='JZS6^\11n8<q92X+6PtM3Z6wUOyd]2wLD1GxăU"Z)QdW>rf**cc(m,YgWf*^f18cAl:uIf9b]Dol0>',9NH,B\UNabOm8u^q^bh=>SăU"OZ>7n8Q0%e$QZ0]N(L$%6cJ'jg1%c)6)8-A50HgmYRWDDv<ZmEJfBEI(?+psW;BăU"$=\2n+A7u*2]R6pB-XL10Olu<'d:xaVn7'Pf&^.JqNMVdtT4)d2\wn#taA=^r&IăU"&Z'$1*AFgHGWit-tAVg&uQ1bRn_H)1BYEA1d[$#PHJ*^^s;]6>[u8Gs\8%BH\$făU"RPka*np%c./PjUMYiM:TlX(W#,lPu7Bp](t9(u\idbV&Wvf/iM*EW0,h_zkNj*-ăU"G2]2A=>v&blWI*nQ^HQ4fAk,=D=m*6rFTYi23633rtn_hebE62AjS+u$(S5=25-ăU"NZefbA:kN:yAC,zW%CtP+6kUh1UI+3HhwI(g0U,RV;49aZEebVR;1qq=Ld+(SUMăU"13/wHY::VEG,r#nt%huK>nxvdQno\M>?vxu%p()9%%%%-I%=o)XG=v>.;6I%.%căU"e%%%.%%%%xhf(q(Sldnxs5SJyL6o7\3prS:f:&Fagm$#QlB2_SsMkJ1WL2Pu3BDăU"\SeU\k+u%K4W+s2-uD+(voG^'dqOn+jLIuSRj+)If\Y)VDcVq&52kI:y4M';>tAăU"p:?YCeIm9b_$DBcHX4f-6blxsCkA*UjudpsrA-D[;sTT3dlPKY[Ud<T-u3tPx#lăU"jj#QF(Njeiylsi4s.xs,v:W$fdZ8ke6.wo#bN4LOMl&Q2v^N3uD5jNjJ*Nlvd4xăU"Qk,^YuuxvuY[U8\NfKJ75yt;zk)SO)=z:g0fj..ZW_z1aJim#nuGG,c0mA%1aT=ăU"0>)A'Q36jc(Q4gmKHsFRC?tENMH-a>qrlhUKot%p*##(ZGF%rm6NiOZLqqRzK+$ăU"&(S'sm[N4F]o1=U+&e1%6<P1-m177sUA[:q+J/^cxsN6Yybv66W8'^LXh'2_j34ăU"ieKAzRkp^'n0[c<mhq1X&Lw\h4o$Vx>+7CEc1FX%m>;jjWgJh>xjN6NdZSheidDăU"B-VDmEl$^;y6BBew\.26fgB_(SPNc+ew(]G:(_^WGF'\gj>=JVlKKMRYO-Ux1ivăU"3m%C$K(+F%Z6lVf/FO9+MG)VYK$ZW,\+:YA<[H.VNU9\Zf+LU=e1$Z)eg4f(PR5ăU"K?4_0AHkhv$Uf8s^5ZpuKhD>zO6qEjhM2WW'PBCWx0(21Rpec*BmNb'/^D64IMIăU"NT#7YH=?>2^*(9[O=a$ALnTKuPQw(>U3/\UDH\p5J0<w-hI^9n=O%RGy^]wO^+KăU"c^b$i-V])qT$5+VZcC=)mbcffkSsPiQqm68xt;p_Jo,X#gTe[/y1i5ppiaZS)gEăU"yRAGI*zpl^9&%pw:fS%1SZ-g]C#r=W)P+XkVfHVvZ_E#S]FvKC^EHl%gHpV&b4*ăU";)mSK/,GLeHDbXOAw9srHJ<A)/&+&Im2m&d(=H.]3]_OQOw^7:G;eu_maW1DE8PăU"e5'*lz<Em[aGri^(8cuGVR&aPW$CgKBSp27Rq$+9gUe)2P5$O)n&aY)S='^Q=I%ăU"wmGF4Ta4\S$FDb?ZII=FF<zmYh*(kg$FEBD6ysYXA4&=UV[D&92Jib,KbG6.BUVăU"mjo^dM1v^516[_6R&G1.Zf&Gv?4+HTk?WdgGaz4kv6tHkB3&IrJI]N=dO?tw#E.ăU"$wQF-Yo,e$GXh(JJE.,^_U+EZ_cR(G/uOtj[BMO>No9'sbgQM3&,7qI;P^KgbrFăU"LKT8]bvW5eU%.YGL6=I=N.m2d;9.+,(:U=+5x5?u<Rz]CBaNR3%uZzYrv-pl:>văU"L^T\dl?tIqVV/.W?5/(8xW*iXbpXtsYSPI4s)-d_^=Zoi#)JGYZXs\'=e;JTCp&ăU"cB4QjtAU*P/p-6)75KYQ_jC<Hs+*?U5?P?\;US)mEP=HA1Gst0Jj5-i:-D6Vd)qăU"t[f%,;AOF$*KRsKe1x3_1A\57kI.bF]nMZmf't93+bS_&4$;mj%JICX3CUZ*BC%ăU"*i/at\zP0wx-;A&?'/inR-on$^ahq[9]voJv[mo5dL6h>JFp,f7$Zu8,Pi&KEJVăEND SUBăSUB V4ăU"Q<4O([gRP)J/38.'.shEOV],WF\4i^p%uk;&0+z$iAJeICMh3$;yh*XP6x#:pKFăU"p9F%H;_L*3;GMR['xX,?it\)35)q%pjcRYwdI5G-Z:tpJ,=+&6UI5b>6\baY8DbăU"bIui9E-bCPjjGyWoDr.o(oXV&)v8u0jzKjFMD%>t4UHFZ(O3GC37tv*j9ET)\/KăU"gB1g'Hq<oP*b#e.2%9?KHHVVfvV9.pCuiEaal9<v?g&p%%=:t1Y[a=4mOv964WiăU"xoCL?lu%IgHgS_8CI='P7(GMS_]Qr2q:vEi6-Nedy$gpbf4CuX&QV7'UN&A-%i=ăU"E7e8/[%D-<]+0>oPCWR%R:8:0.?RZr3-KdR.SS-ncA2^NcGYSx]tXCDhgvJ-lg:ăU"7p5fp*KJ\(b=aF)>?KYxLZ-&S55GU3X4NHsp_1%HxfM+$Kd.hKm%l6okr\Btg<?ăU"L4A1rj^flPbglJ2659L<(SwQdW+7qBC]i^G?,pC&+F5kFqRX8dCvH0OeW(\(k2KăU"3+>#;l<^lA>Pm0+I)=h>F?Hv=d._bE+JiaA4Ja,?$l9rS=:R0;r7/YN5;grHp2xăU"HD00kkOC11;ZysriTSe&;$Yu?2v4qm^r4^DaVNhC?S5GNds/7WRY;C#X&X%u04iăU"?1j55/hVVgghx85Wn[5[6x*7%JZBofkNsC)Y7=(qQoi_LRXXL6pS%f/es^T?'7uăU";Mlk.;[<[6b(/(-.D%ZlFh:rv2'\H8.^(tZ5\6tq5ulw_Caumu.'jNN-H&M4euuăU".pka3aF^,'KiFzAsGIPrlT+mA?hcbCUx$>iL8+ZO0kY,P[5)e*Q:u].?2\B%OW=ăU"_qF5GkjCjwAiQM6Nd,HJD,z=Z(\bk##m<n^^,5J7&c/^*YNG%9-#;J-HP.?jZpPăU"T5HRetR=I>1yEIbLr2eMLMKM<H>sHtQ%aJ4m0VA8FT&X*l:f]nG.mCLx*JRA;]tăU"O%A#T28wPhna<kWV:n0;4Ak>>CFrC1H2_.]&'%TDKeCg3R(1e(/OdOTdG=8=UFTăU"ws,%CCL#')&Ohw.C=>zJ,&\'3/I81WuIkC&:=S.jAgAT)lvPu4&N=^i)G[R)UYpăU"O7b=[iUj%D9oXq-F#&fI2'S$3PZGHb$;5XRA'6dj*:qL7xfDSRt:A(Nc5Qfkv8jăU"RcvMa9#*=57j5mwL^E6/tPOG?64R]T'1>Hx$]<E-Y\OF,k0'Qg/)yY[tL,0*1E*ăU"'aJOl3_]G)VZ1YjQ#fo:GqP9rq;1;3$A1;8nbE*Q2zT]A#&_;W&DG))0M$%$$DwăU"Mmmjj=DdkdX1ZtBbJ3&%nFaYH2pAo/GrkGQ_D/E=b&a^oHS%lV9QT]Rmgj]N[mIăU"/;+'->fFU8H>u'gU2nB4A'guWw?uA.JgikFF01EHW6G9IEkC4g/NU&fNIrAzI1băU"%)<]N.BP%MoftP.,%onOdalj&j4*zA2s)WcCbfAqDNrVgIaV<[A%N9%DxTkdG2ZăU"tuEA9N#_bJ'T&xPqd'1rkL7\-;7(e#x.i-l#.CAm3,)uCg?u:ZXMf65y]W1an5XăU"VKbD0adcJW7dPad/(gV;52%D?wdZ$#(O(J)G$w%uG'wZ\\,jY%FF*1yDeSddMbrăU">_xr-$55wU)qB=NWeAZPaW9X&:^o8=$wQ$4Ga<Z&rOr[N&7MbyJUWqdP$#oF>=qăU"B8?xl$%m<u-eEpzaO:(V<JaiiWm&/9/WoiV(WCRS$rpE6V&<O(d%_&0q5*n8^%IăU"Q>ROIFp$t2z7;+d.=/vJ_q^MB$A5Z&$%J0%2*J+G_Jkq)%\)_)j[UTkjCj:D1xMăU"J77:&7&4IS3&GZ\DuU8X83hinup<CgcaO(ol%2uUJ=0ujfG^s0VoJDu^j=],'>răU"k+-0=z(JZq2=;]\8ohQUicNW]k,jLuIBm6DXEDf4x&<GObpI+AcTqSP?<vWwaE0ăU"oF'(cr1S3,%zq'?']+:xepwHHJ-0-4f1H3Xj-Y/XHPY4/6skR1f05>IjDnf4:EwăU"joYJ=%&i6_eDef7RImR0-.<.60h*WLf4E)cFGQn6=Z5^k6u:FblN==Iqe$?cVj7ăU"KgsUZ,g3115=O(mi,Ea2_o1WiTSSKtR5<<rh^N:Y0A-4?q2LHGuJk;/$dplf6UUăU"(?I+fmFD)+:rOCI3O*Z#_Wm?21LIRO-]E\UKZ97PQ.f4tlkuuyY<alIx5fQoEOdăU"r7P8&SY:aotgY]D/sQLHSjgd:C_%E^Av=EaTSMN9/oGRz<u/ZC,D1>0w[zQDWFFăU"Vj*F%SgEDOXq29ne[_nIbYct+'F)arTKFUGT\A()Ror9f&o0j%CuIxB?wZ*R,pYăU"'H,2LH-3Xv=zaI9Cb'pJbgpjaqQ;E8XHqbhN$XZ:v1/6Ze%lQ\pw=/A=+&ugB$BăU"$iyoWor]Ek_',=VBt>;IhvVuYQr#P%T%<K08&n:8il$^eZY^Y)MX6_.P:fp&Z#DăU"dn3u_0*$(yjsDqHf^xH-v*Tjl(QA_b=::&?*(3Odb%J.SvsGMKum+E.F4CO868=ăU"S1pU60c61I&VV4ibT'^f^XaEmw=Hnv.+r/j&18^Xpkb6jbf&3r\x4&7%D1*lI4păU"8JWYSdO$fO?HO%53]tOtl_uMk=sNN*-nrb-HXBnpR6%BtN1QMm9KxIGrX]WUkm)ăU"-\5<I8ZlWSD\ekU1^hAhUIk:m#d^u_\&%?=CcWdhj[m^N\:Nv,Ss'r'F>A.*4cbăU"72w_'Xf,gEnvVB.xX4??(b)s,<V7$&zxp=s^eA$LwJ-W'Kh7wX^4#-QQp0725aWăU"64B=UaOs-+w,_JGy?G&FgN2*jzKLaQHJtUV&tq+Lsem8a-XoEp3[1.zV4A)><ulăU"vY'5$gz([Y_MMNL3=L#f4SP\=z4v^zjEg8rP.UnVkN<h4#7#mD%7NJpE&Eo9CGYăU"]izgv#^iQoKt&\-Colgda/R(EWJaU]_S3l0on-[cB%b>;&s]CF6,-MfAv1%simKăU"Mx2'F7F<U/XENIC/AAPd?6m9o:^R'eph<RE29$[IrKbDo:ZGPnF)1erMfq.:/>băU"$wa[*jGQO^9b0c=HA_tnLccB$-GvJZM/itnq.V.Dc*N&^e-lfO;'z)5,#t:j;&.ăU"-(GROS.sA9gg<'V/h25P:m_ggMBNNMN&1/OYTnWmW7z;<zh7rHOWC9L0=j6NS*_ăU"7Qb_+)eLcs>l^/\hQXD^\*$Ra;UHQ\Qv.Ya*(L/+jOno6[YCF'$9/Q1a6/U5z<*ăU"pMfk?DbCu.7)x9E'p^9%?uqeH:9cJ>aVoEameg4VlYHV%EOvl>FsJ%Q3\z)t*TBăU"=irsp3%B+[(o4EB/v9=l:;J_RfXFNY,XQ2NBD-mZ=h;=GeDiGV5M&UWcjF(w'ZDăU"cm6mg8aGFn$J.kFqbr:#tVL+'&?l&DremX,m$(E.)u_<L5dYopx'i$4E7J/W-1+ăU"UsiH)AhoPQo$E$wFtHo$O$C)^=-vE:J*fXj&DR[n26#&?A..uIIQ]*C*#=7M.,yăU"c'&892mVl-BqJ9tGYUpdwF+l>io9goWjA\IypN(l0H03f1zq6UAsU-i04sgh-K?ăU"WE5?jb<-.ELglzN:6B.M&19UmeQu9.Wocuh]lpImS&.Qb47qa6]k??T0lMNMIq<ăU"W\6s8K_f25<MHnIOWo6Ta:Dv$f/J_9$+aO^BPTH+O^3,gA-d*gsI%R*%W'mMs^+ăU"<efyGpS%pY;TZI&7SFK(8?w]_[]*i=X+fJ=:..>^>kjcU_w(moCpl^V0XR_]pwkăU"DkM[3ATF]FeAbePG+X+IBB4Q)+GOBmq3ni2pPH#JIJIoYbMOwX0Q39)iFdsUg.'ăU"EoEJ.*9MYgnkQqL0cB8O>Xv?NJ*542VT1VVAAmkh^YG45iG5H0H0Sa.pWr&a[$-ăU"&_a\h2^Mk0N]OTbaf*#Q=qaE4&0nl6R0>Gm7*(<EaJb>qc9t%qBN7+>^B_h:a\XăU"x5RYOU>#FcaPYoQ:'GfGI83NQOhAJIIZO56;3LHeps;ss1]]By49]Pm(UD'%I<]ăU"/vePNJQKPYo^c^;yk9M)O)<88k5L-cc>y^2)m&;jH-iEV;rJwcPpb3E+TZJa5b<ăU"m015T'l;u^mk-snX[Xn53#FydC0;9/?FzQ)..>7TPYPxaKXqEKtq;E1G59$S*lOăU"kgud&vsuD+hGc_>HN+/YF6.ls=wu(VDfd3'q,Y'n>o4MNxUdXGMQ+?BJJP)ejqwăU"+Skvv,WBD3[nm7AQjB339[*2<]rMi=/^Fm#I8x[XEb_3c_/5CJg=S%9H6[EygZfăU":o2$r%A<ZdS<I+s1zWW9e&NQ3g/Qvu2#^7Vf?$:g=rClZNS)l#e/I/GXh$fwc=răU"Z?Qesj3sd6\(q*oZQm8(=rHDVXLCbOTakEgSg2K8fm**GE9]\]/BAc,O-iUTTJ'ăU"tBucDgD:8^;Ja0'-Lp^g8(-DuEmdIl>gJaocP6eHKMCAh4Bo?(/?G#-jgcUm;&TăU"97RdyA3,i<566)]YYs$1d\GKYX9D5h<784s=6<)WNo32)[6W,tMR)G6-+^f]pxHăU"MoX3*\4SvZSp:DD4_fV5kFOSmooOv8'tUUf)]\8doGSYuP[8ogZ=lJHJ/2oYg98ăU")rD(=cQs3j##nKr:+Y>l25?6WUq$2OB_2w2#=/Of9v/#P3fi7T_iDna0x.CXD:2ăU"uaqQ#\5EO8#=k#.7$.,T1Wk;j,ZIclcSY-?^3sCcmLTso&Q4;pKC-#6$v[C%V8>ăU"K>faW.3H:EM8w(KE&u2(RDG^.A44&WWCFNe+J>RFeX[t-pQ_mh<b17>mlwf6WAQăU"U.kFiV,:+m:GAdutvN<-091,ahoT^an1P[8.*eFjcC#,gGP&i5/Iw[$h2X'J-7dăU"JrlQXN-ivBVJ]NT^2TBI&Zw<C4il$un:T,Ve.yNVISo*M#=N=G+jbn9,g>NAu_?ăU"?o;kNvNm^Lj:RAO3&nW9bed=-(b2?fX]Hb%fcp8H\Yr(e9n9eyUDQjCY0Cozq3:ăU"EopT:dt0u)C/7FQ/:01$)S76#i)CiXY4Ug8HMC)uP\):'^]lRbtnbC+x6m4JOV_ăU"EZ>HaTcS\<q6\O?AgZ;z;BvHGS3O5TGVz*^uk^TIwRU$TAp=+GO=X]1-_BmpA[\ăU"#1=Zxx*Ar,X.QD;X9=(v%P1I']65\A/bTrcyu(pT=%LS:Z,-/?>E*Jz95-'%%c(ăU"#u2rzowjux;qUG8VJr7_c)(:E:v_ZTQ]Y9(gqk%KA6$E'naNNKX%Jn/8SejO%E(ăU"c#9V^QTTu0$6oMK[)$s)S,,zm3y8rwe%%Y0+f04EB.9-\-Dkx\r])q+?E<WD\0IăU"0&m\A<8?AE,$UNRkTM7jfiyQ07=Xp=IN\t#)BR2;OQ\-C\$g_]TEt__&cyL.%v6ăU"QX1eU+%zI%K\6C2FW8SxS%C_7l+#b0N]Q&BH=oQa%IFXrs5^nW5MJ06pjnr:d+_ăU"\2?=Ed#^aTi/q9eUoP0Udv\^,A;iDV(L+<0%d;,0#h2AajpKiY83R>T+xOrrRslăU"&t'&$V+,#I7V4<+EJ9+o7OEhTKwn>[par]%;=7(KF+fDl+58U-Eicd:c-SJOjC\ăU".[VqrLeDjsb3J0cstA:shTiEVU_GvmmwFMIk;=G,NJ=w)&Z%Q,k5#72x3I&tTiqăU"%p7fr<D(%J\sA\0H_98Y8uKA?AFxX?X&)JQoxkm)9YA&ANg\%2>L=6fmT#*I(?iăU"O+vM?i5('Sa)-uEOU\Q;%6vn(2dh3G^muEY=rj10rk6u(U;s$Q'b/<vVHCdhJL/ăU"R7o(eyhXB[^jMag7W[$&s(k1;3_-Z;m$gI4RfXt[7q#WjY2nuI<A'Ka>#zbS'%năU":;J.3(H#\B\]X.B^B(P,/&\vIE8%QbF<GGRPS8[.\c,a0pGm[vstrltLg5F$^RoăU"8;D*+UW[BOh,-EIhhNLr/(S,J*(bNtm2rn/vn6x^,E<#t^&7\<rrHUxXIG3K4QIăU"OQ9:-e._=.I+,gO-^EOu'1IIRy#r)r<*SQT>J6AnH+F8Ca5I_C:aE,%/LU6]t.băU"8?L%144XR:i%/Ul2W[_c(TOQvzRYFBo<GU\WtewX2)uD.Na:>Mi8Hq6f0dnsp'7ăU"JScWhvu,0TDyP*kX^(Q57v/%3+6nHwEg,H=mEymj>ucKOq23=(8&Ittms#M])_2ăU"F;a=]D1M:7g0Q-q=dbraG^vFTi<,2(n=:J][-ZO)paomm.=<2#'Y7ZYdYk(T82dăU"rr&GbOo&5%-*ckVW#&$[y#UdpPt[?8P73oX)F6&wGD;a^OsSB7n&]]r9]gGS0.8ăU"xIbTrJHJBUvAWGd=v6Joor_IQR=\7h_AMC;nvO\M.vgK1/8,J*NV)w]fWC15aIpăU"Q\e_Z%ea)'1K%lehrUA7H(v$6fBT42<9X]SY0wX2%9m]xq)=2tL:,;Y4HKcWsU,ăU"HOiGtaN$)b7ni?d.Hxp/D5dr5^+lFG7kKq[VL_a2F8HC<(HCAg2lWT[LmkN:Pz8ăU"V1pIGfL]xv?WsQsDDWJO;y^KXUwPf4Mu%P/Zjg?].+x<+[Bm)17EnT\MMZpq?*BăU"xHEW^6ApV2KrI]5?ZNUqi4hq59Y%=.Z-nt<[klJF'D;+8Jv06vF/mBb>agUJ7s<ăU"Fqf#ui7aRP^r2p4cnjRq1pj)K)zw'[O)\N_?9.olfm6ssm*3^a8W2fHqeiK3+5:ăU"b<h2EMQZI7^=Uwl.12*cjVBzwhrXu*)N&kgOK4]+]N7v]<H'mq\C#*9?G/Yp3h;ăU"V3/e(E_7H3aeA;EM(agKk]A=hQ_f)PIFd;SM?qP-Irhr5ytDLVZ';7C5biBNljTăU"j_:IF%vCrml-=q24x\Y;tXwt)u51ZVVSc]9:NbXGRVR:KWU05vu1PQjgWn2I[91ăU"rOR^AY>pwJu_dLaxo?1.s8FSg)g/a2OO)apbO<*%h[Lk(&^HTam$q(Fl*g#QDdlăU"+d-Kil^a*to,Cu$M;V0%OiZJndS4n&#.jR97<Z0IilP9QHE(sj\k=oLSn+(3G(QăU"6h*Shbl0+7n7wFdl=ctP<,B3_ogYGvKZZWVFAKEkM(MU?=bw>lB*?tbph%:3&KuăU"EJ8\UMR220DB7s?;jih(5,OS6inaUPz<UQsXWBO7KmR<4+lyo6VOKhi*<(;MIlEăU"BtI1k)y2^u*+#<),5py\B-Y<fG[Xve=LTMb7V6WQ4Z;RP7[-JCWr3lcdCF1kfIDăU"qL6Qh5Onmc.VG;Faib)\STN_)eo624+GJBxI+W3]+%MN#->K]idMQrnaDT*S=V5ăU"Y:R57dE,JbqZ_Bi9dBPeM1G$;kz8A;:<&6=b6jnQ;hfp_e.O=IiH_Tfjal)q0+#ăU"0WoLF-Qw>3>Eb18Ik%(cmgm7F'Oj4oYQpBAQf8-SYCP,5fO9fjhl%Q\F;CzAZHrăU"nwm9mEDv3&rJRWSq#1SmB<ZBL[YKEjDh)VZx%GKOIx4o;(^*BQuHJ4Q-4\+Vi7/ăU"^s0&$YNa8IsL0'?Y#p=p$M<Ui([sJIPsX8(Rqo(eB2W)h/(K*hpj8K]MD2gRSX4ăU"3L?nJmPjkw7[d]L0lSV;3oNj.jK*<>#55lXIU,pi5)Oc?b;a$EjZOgb0m31w'IQăU"HXIoi[IZ&pF22gLTP'#X-V(ZSz%wt9jL[z&SHk%P^eKOX>^?VOx#5AG:KKD=GXpăU"\%4S:O)[+PU,d3Wro8=1dRpwCIc^d)BU,c>NtyW;^S[T1B)%Z[rla)oX7oH:E'RăU":y^d6DmOSyYTOV?HFsq=(c\rt]741=Np^;2uESnID:K)NNbF9^imBYH*wo$.gZtăU"r*mc;<U6M/0rR<IT4e^jXAlHli43pwXwnV3pr\\w6fM<hF.FNxuN$ZJ^Zw_++c[ăU"oY's1Qd'Qp*NktJz<eE#fAbHs<n:55LYIBB#oBtZ4WOz:VBSy\aED5C\u**q0$%ăU"8/Ts*c17W>D%Hx7:Qo'Ue:#HA%xhBbCjL%q*\6D%r:>A0Mh(?L%hmu2rb\R*a^găU"Ot.Al-?a-Xg5k.m$Mb88b<&j7Dp]i3fHgj#i'4J.=)bWNe[p-p9.TXlt9Ol(/CPăU"\tA<u<ut,9Mh?ouq>PfRi<H/]E.c0n$l;rNbLhu<7GJC\)KT)qv(VY_0iKI.H?năU"73;m&SsZsCYmNJ6bZu'e:JLv<ICpr19[(RTOeF0==a[D#d#5b*]G&_JF.GdlYx3ăU"cgY;&7.tGwtWph[9oP9MwCic8da0?XSDe9d9)S8oL;U2*I#-n%zF1cCPQ9Y&kl,ăU"ojI.$NGa.DBB*'A?r2n*nN\NP95nHlZ_pmdb,(#<P:gS_b93S-r)+S:]'>.hhhAăU"LtPuW[mJ:>-T:9p?#J=U/aBHlwdUc:HYHc-'6_'l1jvt-l>nVVW<RAZk5:cceNgăU"Dd'N0l.YRHD*RiKb9mos925;?z5YWF/sj<jfcC$WGQ/Ll750L3r0Z6:UmXBoK.-ăU"(Cgdbp*I4'kLr/1Q^b0$tz,rtuE<#K5Pr;ACF0CaYTn7SssxYHXN6*Z-0k;\E%ZăU"2pY.)Lb#6y,UAYaY?+)glmtBwbvs-3YM?]W83Z0Ou?ceVhD2=7\'=F&+I[ZQ_XTăU"?)N:b3Rp'XLi[dJu*N0GTH';+J1hn7h%Xx4=S&2/+Hp67U,t+el#]Vt>rdLNT:[ăU"xg$fYYIU3z>%>s35Fx(f/tp3:A%W/w[o)?/?.Lro($:,2)j'd+&QIJi,q$,P74OăU"aHm5Q.v/0agHYq'd44?^aG)h&6pdg]DgS.hp#7If=K07,IN2r?tJ>iFzqYRT,I?ăU"O6.50q2y[0a=$:vGH:zbZ&=x=_B18.Ul&JFKV4nM<+8ku3bl2J1\8SAAs<m)3SQăU"7hS$]n8&8s[kEU9tbLZ;Y-8+4px,:a&9RZ,kVTk-2QgF#v^(>HBMq,FbruEgOV^ăU"(x$L90#LP4FiI2BG#j(5)[_7M%sW>VllvIM#V5<We0?.NaAdI7wm?fhF3b2##$aăU"5f$dKp*S&2HfBzHWlr+Np;liGrRL/hmJ_h/:]nFUQJvV/vGWln0Vk%T/-c>?PPYăU"jfDCbKU]^bgT+^g58D^9\B&PmYt:s#BPtXEhl/uc]tRlTPfWFSfb.FOF*sagY=găU"ThYMY+?%h*Mhh(*<NtJ2Wf[83+Un]bW4XEdtt>t+=z]bzcHQ\qK_BiT.tr,BZ2,ăU"b56EGgZMVe(<:,fkEaUTSm+G6n9G7_iAMHM5ElhcwWH^x2N1>6T%:9)Y0uCt=#tăU"XA8&:X3(OsjRMC71$(r-_g#5oVT5XI^*VH,CPsL\u>=)ZY?CZ_LF.ui2<D5]5bcăU"bZ?X?bimS-,K[)T>T-J?vi>VcfgxeVl9vOkP#4[j&hvuiKZgMu?lZGTke5][b#aăU")+R13)T+Wq(,Ip12((pQXI9A.)a%\nS1D_:QH&_OpKwZ*i*[Gk5_uI?M9:R4FxUăU"ru*'6r\[86quDtJLZV%c'mCck#*c+OAU:V7TL%h\MQ32K=f5%&NvHg&^h56Q;'5ăU"4:P^>#8IWJe*-w0BB<jzYTu:$7#gz8.'1oG)]Pc)blK7k:3;L=&cEAQLRdCT_^aăU"*Wl#FSgRXp]ou<6%0-RdzxFJ5JZKme>gj+5x4:?+X8u3+Bi_lq^KP*UP<k7uhrhăU"Z7U.NS%<oQ2a_X%[s/&3SQTIkC?(2ZkaaFl1]R0Ug8v,7UWf$q-oLh[R;)6A0&=ăU"k&bQLn]JCW<WDY7F*Cs]EBEIhP1GAal%7.FXP6i&&&HoS?Cl,-drf:c)PHq)gFaăU"ir7MJsCJud=FGLkbM\6c#T4bm*F&Ljbl$$hF0oA);%E\E%#'<'to2-D-YRXJ+\-ăU",/Z&U]UZK>xlJaf>=$&C<BZPtq7;^7wBRvb<S-GTs0i<z&pNhl+Bc[th^6$8ft[ăU"Rrj=EVt':Nf+9$==%p*>hk&P=0+l?srO[j(=%qIpX*9vaD8*fS$T4OhS]DEfD7>ăU"ErJJ'Vl<pjwq2:dGCZVGJ5jhEG*[aFUe)?YqU_+PX+7]NbKBKDH3M%mVT;:gq\tăU"F\DVW<u$S6km>0<CARiM7_Nt,.Iro:$8roHnJvCrl$fK&^c+aOFa=GP99o#(7:uăU"5_Mnpr\G%e?_+W=<U+IpUDiH#3FDs6irwL^rw:P__['*_Nue[SiuDNfr'9rZ6;făU"F\3:0%Q?,W9Y'5)\Y&IY*eqa(6Wh-;WsK_yAAVLKknbyZR)#7kv=VhwjhNJL31MăU"4PN9]Dn#X]UYqlttlBE\Fhr&d$x>(IcvGn[vE)/po,-cmf%dQXQ\xehs$cm3Db;ăU"?)k3GN]L8ME21nh2&*?Rtm/mibT5w?nnwGLwT$4A&L:f)mpwH0_,m8t:^-Pja]2ăU"etcQF;yJQ*BeNJyvl1m$E^n.mvX%Pmr?5hC>HHZS>Qr41^2'_?<XSpzv$mo=mDLăU",r0p0JVw<V(woeBj)_(,?I'k'qKx3SP3SIodY^y8?mX^G1&&Sx&_jaQD+S9nJdjăU"w.o)d/it\WL#i)*Gqri)PW\vl\eV+E$KZ$/(f_t*v:dIxO?I2GyS;)X.1$^.K0=ăU"b2jo[onY#J]IytlP//(=S#&iTvg_=3R3KjB88$d$YtLL$p^3fRSASMZ%-)2Lm_)ăU"(12P$fV7f:T_KKPC<8]uqY-Mn#'6P>V=m02UgTUXvB2mDH&rjjoJdz.#O.u\GrGăU"lEVt?*8pt1ZvmuW_]\DlAO?^1ISI$<.;jhGQc[#-rlMu4YNi(U*]b.bJ%hJ%0UXăU"=D]1##v%+nP/:7>N2YZx2$z><u5*4nBvZ%S(8J3j)fcovo:I,eFM'U%>3je>5QaăU"'h[l&pLI#B4QcxbV$rOYV9UP(8qT8-l1=Wus)\.P_kD*+](W3Kt6jC]<cjASB%XăU"y7l&%uEO=r5&YK'+QqD'<?tp<G*UPh'(OsT(1wv,BJH*4*>z_'R,ozhJ]4xGueQăU"ReC'G^uj8pGY'sWYcT^<^lpL>;d&*x.AT]t0-Rb5rVrD*(-\/+xB<KnHbafTPWZăU"NNC6/Hd.$V'CRj9p?HX_puX=>d=Y2)AF*CbdBH_FEWkGuW^N3pGvy,y6#sL>s&9ăU"_Ze#RKZv*dNs^i4[,W*5CCpz2Gs4sM,:/gKdkcV5)j&$1Uw&g5P+twEe=Ai7o,8ăU"k'm^yS20vuAn.N:G68-wYMU/t9;ghRx&tV0e&nW(k-<agQ%g;C$M;,[lWb.5R#*ăU"Vm81Wg^$:2)B]fuW$GvWhChJrtErriGx4^ATxPe2tv%;QcisQCJu*yIgx,,\EbSăU".N&s(m:w[4N:q:bz^0%A2:W05]$47G#*LDg&ODx7U/-0[1gcJK$HGG\^\d\4&h$ăU"go9()HKuR)LBC=RZ>KHr3Ey=T,*aGtQ=5jpKVa8=8(n9U=Obt]h#ucYcd7GEDgKăU"\F<Qap.(+T$,:[vV?NFp9N.62juY#bj2F0]7Z__8<jxxj.L\CiM(Z\Z)DicXAZSăU"X+PKC-k[]c(tjzHmS.[(eVP>YOFrhR2=u'-XXD-BCO?I/$HaM))p10)kQKIJtllăU"j8swZ5]od??>Q54'9G=I*90rca\,:sE_f:h>j?ADsWhdX__m.iammwSIz;p&F0dăU"N)d>dm1:WR24T6PEE\$>$c>Jn/qUaeEZ]>x,2%U*tdR:'?j3BSu_b/5lbR'_%XiăU"NsMoMhw35pghHh>sLrZ<GM*QpYO^8[uY_6B/ITU8>%#VeMOEseRM)jbT36bM6,<ăU".\;t</hh^4qQ#7eu?L::._b]HRPsLIh7;5w$4]Xh$w9x$,]lLO<hggg8PbOgi.căU"p#M00\A^e-A&rMz0kI)'m,;yu0Q0/m(Grx3TBu1=w?WL,4if1We6B^GboE5;^LhăU"H16c,F0p\=FY/D#c4*u-\]*]h[zcR)^6#3'Ax1L>GD+X22qr*U]vM1b'%/BK['<ăU"C1_x9a1bIp(WL4J$g\XNltCaB.M2,8lg<EuX+'99c%c)*/'a(-?N8']8Dy:xYm<ăU"pkTJa$ab5+JWh=-%^#;L#;[7qL\vBxbDso'OvNIUBY,F_vIN?3vVtg\lO58#7L9ăU"oSxW$AxMP7U%zZNab>+LINrN8Cin2Ve#=$Z1-c>u+qi(q?sFh=5Hpm1MbPXFsVWăU"V^i2E5hEBFxVC=HxJp#o9H'eJ.7_pd>L>29=XsSWCs1zA2l9v&cSYEsmWh^*H7]ăU"*61G$$F)8ROXY%^d<DGLgQ6m]qlT6NRH#6tIXvA'GbDftP>DiDkVPu3jZA^UH5*ăU"xtF^$5jMEnZ1m5IF.RH=>eel/)%b6LOH0S1(Zs^2G4'+:<ZRNj;YIkVr*XmMd\NăU"9+JUC)*1&8QC#*Jdo4'WV:LLl<\fQUA>:#mnn$Gr99zm25P#Cd1%R<fGYXS,e(>ăU"PS?B/UTG_R>E^BZ8xh8TORI=oR3]>5f,c*?K,X2D_CNDp1^Ib4N7u(v-=Ne/4=-ăU"2Y)7_J_Q)Ty<pIop5sz?#C]GVetW:zX=6UPc%VHfVih-Lq+]P)*3lw5cDJ0-1*răU"=y(#dvyAwDX'b9m*vO%qPp#0F=k1HP\fg.n\a:2JPujU\HsUa\KL]m0V4blo8BCăU"uMC(xKldZUlfBP_YD'cE5kV,V^rxh%WDi,?lT#3$o0il2gQ$YKRM*(v3fm\lS_UăU"BCYMxYkBcg(OCr2Kb(jh8.6-$IuoY>wo^p3TLdb3_BH^]Z8_o&MbHC[xXbO&%./ăU";MV>J9[rZUs9VD2V6k9RbR$#b]w[KhX1&xEX3H6N-%lDyQW(b&*'f<cRc=oFoP/ăU"O;p$c)RYInX[qZ&,+:$A;q\]cAx$Y7,mE)8yq02YgfP>=V;-g[Z3]9Cs$$w\HXrăU"u?kaoxACe_'#Gntu=maTJ<1nK_uQ0d)\q5<>u+xBB62\n*dMQe1G:.I1bky4MsBăU"1e\iHkK4x?fC=)4$<'zt+6p$EZRZ3^-k+LK8u-,+pl)BCqn/)G3,,19wt292U6-ăU"N3R]bMQdfFipGWg0G-ErUaFKo,CI1oQBo3QRFH&<XbW\#;2'uuHh7Z4)v7u$f](ăEND SUBăSUB V5ăU"rWdhJZcafopSQg.'N71],bYTDOZoe,=t9R4:+[m&Ipa#RpbC8H?iYc7+G6lwbb4ăU"0TnwXtot;e'55K:']^yM_3OanuKETrl^2?9^$k6UDLR8lT.Z[,X)HM)s_LwaQLLăU"<UeKa(860ANDE*eif>1Ml>wd=AG2i%Diq2++XD^uobJW(0:qrZ5G+j\TK-%2HsxăU"+IbQZYH<xBuFRri(pC,%0tfIv.P[Krz:f*Gbf3dnhtfjd6K?+)n_mx#D<x9h\.hăU"hJc0faKdo6I8%lp9P<G)5D$C'Q'+?O#WPt8vC?i+'Cb);e&,MZKh_]YJ)CnR?a(ăU"Xb4b[gwhtJrjL^mj.Pb2IRxHf1T-c4Dd>dNJ1Z5VgDMwNFyPh'RQ7iMpsLvt$>tăU"vvD'&Q=UU2XTAFX]%B9*sq7Q6s(B6f%t)mDH+Qr<B5uPiUR4,#]w&H0lpk&Wc$2ăU"&%=h<RR/CeFlk)9<w:PtU?B]a;%PYcH9^5:Rcj#Y#TgZ0xe(Y_$LIM$O5C$-O&_ăU"lWrj8i.d4H\f%VEW'3=.,%)O:o(Jd760G'?pQ[&\]^O\w#Fkm;ekdnl#GEBsr=<ăU"[?Lo?PgZI_LG)CKZ:*s4W;'uormG]24_kUS+uB<$R+Bisr?9/jwxyD1dp7A*dCuăU"FxpuNi:ds3:1t)R_U.8B*IbJct]lBcrkx5RsWgSc]?bjmpMxgUHiN,nOC6,McrnăU"r#g[sfAsP&qIVv.m;X:tf'a#iJ28p\t_dt%N_ZnJlF<Y85]4SJehfn\[[P-&Jt:ăU">F9Fi$b/WQMWppnlyWtnzt%GVc&[ee=Bm[V#85x[X]p]fa*rNPz2w;+9S1e2lm>ăU"U?t[\K*[:u3;4j$#5\aiAt6*(iJ+zlHrK#x[B>ry-=%mC#7w/db$E2uU-?(#t:WăU"tUvO[w_,L7fea[wM##F:H0#u>jQw51?MKDm-kYb&6&w#atQ*E'5D,5_0Hh*CXyPăU"C97r6\-/GWu/)sCOo</_oNrJ>*oaW*Lpwv7je>\lN>rk+\(U=xC?]'3B0lNNN4uăU"AuHWX%HKn.LR;z&;ELu/yO.#8ZXOx.Ck<lZdR=]sASSXs?3iE)\>_*s'PP)jwU+ăU"7\vs-Kti#hf*<QXhn$hpdLoEWA=AJZ%fvZKDssfQC^xq?Xie%T9UUeH>G[3^IdkăU"n#K\JLZ6Q5cP>N#4dA9v]=Vx])2yfqE&mpOV('Tb=cvf-FYF$WRu5pXVBMayIsGăU"vs3?,5\]+a$524.9pPPY,I0J_M*R3_Z5Cp3ei%*?_rtI$Rw-&clg**v<-hc6pQ_ăU"s-qhMc2#$WlW)BF?r8o22usf/$KJof=Jb*1Ns#26p4-PPoL%w[h?02XYH%x\.c;ăU"t<>VLt.8)s'Qra>$PBH?7&Whq\zpBero>$64FohDX8^=LG^'1EBD%fQL'nFgU=9ăU")e?7\HV'Q8ez/:_f6.cJ%YzoN#>B/bG)OM>Sp8FXc+a*tRVY'\Za^^QB6^QQu7/ăU"bN7xC4*B#&cD/^cKj5\-&p]90:TinkPnKn(mEYqyXhZHC[l\0hT$SKPJJ++jAQ5ăU"s'$_pK1^;L?#NqA5#T?)hrp2(rHNFLKp]7Ddw>\mTVnh8SFVr#]W>ttJRkE+b.AăU"g^=[-kGx<A8%)Su12lJgT^bNw?92oP/.^8d#Xjslk3]<wl\&ZBDv/5cU&N?:1M\ăU"IRnf:'G,G.c23_<weDf(vwH<;DrmZ)iB.eHe&m>0mae*cnUI8)NDnvsF^<W&WSmăU"#9eI%DPt,l:mC5lGIHNh:2(NQd#N&rtVB-]eg/pCb4K2b^;fVkhXEk2(rtB]^]CăU"MI^1a9$<>[Kp^^$Bm^Oh<tl861e5xBW89]Y.MP_DFhXumQ78.gd?s'd#8Y#CsAsăU":#HQO+%=72r7uJ.H=j1K7Bcm\M/\95P(.ZloDrGyr*HfHYFWU?S5Q0mwwT8H6Q(ăU"csZCe(<QJ:<?wdEK0yO4F_ijPe2aYqe/UmC]tikX8=\wUeUZf$<BxLTT]RX#jV3ăU"ksjpBnjp]wW3#[[gB4*j$;VDLrS=EOqo-l+)FJ=E#5UPZ\*d?25mrKo0jAX70-lăU"b=j4LMNgQ+hW,$7*yWf9WNqp^_VBZpzze*R6)pz1:Ng5[iAmD)*]bm.o'%pAG*)ăU"I:+19U5Vc>djVIb:$-+0R.lavsSl_r/HhWr:kw5zL-DZTLh(F6jKe&4cJIB\^g(ăU"8gNUZMuTNF%ayKY/xHFf(V3[]WfT5h:>-g[XUUBF#NNrlvGFXNkk3MlR4_'p)1wăU"/Q[A.Dmaf+#nk)\J^d/%j<n./hRZ[o(r$GR-vF'3YR:aUlw+p80:]IIM8kqvM?măU"B36wE],j4Io8cG=,u54>Y:8ZYK5?a&#_ODjp>:ML^0WT02=1NFj6THgJK&Wh+k2ăU"No&YtgFQ\RGCQ-gCLAc7y<]*<wDoVKjvIQ3F5:'[qc/*>yPbB'6pOcbX+BAIOY0ăU"DEVY$CJiT\=bRZ>N<Xy2uf/)RrMXF7KJGU2j5U5j_K8RJnhX^cKW4Fx]Jvu+%;găU"SDv>>Zu'(+]scFEHTJeCcRhH[PuF\=Y92f*pPwdg*vj+7ASpjP#UXmW+wSJnuHPăU"fpqK%[qtsw1BL9nZbFO^LL,PPYbs^dn4\M/M1p%72*ovYkrq2m-pF6R4D(Hshz?ăU"kvfU'HX,uk?8=Ehc8%NL)P)%SXTZt;ObT)P*LZM9+UbKdr:5If6Gi5(sHXIbTBWăU"U5twiwi-<lsW=1BVj,RVv-CJ6-f^yNWdtn3V6:Csnf*Z1u.Gt,11Ekb-uvZ)%0găU"g(K]L9J+>5NKuHGJ,][JV0MIm0?>,j9CH=TEi/pVl+T^BOVN*X+(3R9L3HI*Ij>ăU"*0co.U#%dNRx;?11%\dFJt/<IWiz=]-u[R(bF5lmpsY:Y-alu'hv-\W]V7:/lkUăU"3k-+HY:W9R?852G$_?bWR:%)/A]-l#ZXn^u&j.N=^);$?]<CCr=<mkgcC?ENQX?ăU"J*Nq)JETf>[&;$Vl;DA5f-7KcYT-#RQa-^ZkeR>U#z6n??fEKSatN=G+1\D.I&JăU"(+UmXWHVGkac>xZ6\1yjZaMdE=)oDcgK3AkJhERj5i/Rj.1BjcV8d3H+GCPnd1EăU"ZAdT\t'B3MpsN5%PnupUE](:ev-%=Q1KsHRP</+7I0Iaq/5IARNfK4HXWG0i>AwăU"9.=[jWS4$f1TatTpi;^OaA>GV^JU>tJb.5hmu9?hCYS&551u-v&Q]88jvG5+r-<ăU"d>#x,F9e_rXugVMi_76<&/o/7;k#>7tkr:5TX8h)uJ:d/_I2y>*n.jL:<vA:P$.ăU"CAstV(a/m7Ge$vt(hdyH4gKDm>yj6$k+c\BmWsKAt]H[x3NpNHd7S%xBB)TxXG7ăU"YjxPCE'G.*WEBX,l0cPtxU=/WKFocY-/c-DrTc>\k$J<rxwuHTJGY8HVNGN?if6ăU"4\=0S%V8]ws%A+nsZ'o_A%^?Z\-[Y]pAl;z$JCh_e2KfeT-Tim-WZPbdLW*X1A+ăU"AgL75u[Qc7jIOkRG88Vt/<8lA4BFJv.ViMcz0_(:_<4d4z%gVzPQgln\]do/(b>ăU"cpRPQ:pTO01-/RO;?SYJ+8u^cjL1A\f)f:HikEkTO:=:Rl2YQ5nlhO(llYMbYtpăU"RZ:Y%5P=zZZm*e;B#I.i-9qKt^\,2D7IJF&vGXa:1nZKEa>08H/5r6dQhtphfvWăU":\woSATcpa0^BBe.FKLGbhcI7y<d/5R4Km3;IeHJPymG?>m><E$bxt8)6gG\_U2ăU"R\g:Xs.pA;<Rkof>lfR;:*1g14S=]6(O^-2\W*or'=^>L:]BvRd_+k%aM,2TBY6ăU"V>^G=?lLlJP64e*wz>Ph0epVf,]u9sHl*7c>W3UNjH/t+U^UZ(ChGt=51rT.,0=ăU"Q$j7KWU.*sB7LVQXcDa0^zZ<v'>=Stjs+8.j,*GI0ZO%k7D;ZN+Vu^ca4wWi.6=ăU"kmVKl'N*4V0gOf^Rr2F=,SId2HPtvBp.KO41$&N6Fi,,5I8kJX1TlZ<VJdCnKUaăU"?syTG/?x1gJ8vr,FHbai=c4]mb=lhol]pEU:kSK;H7#36AT+35B%[s6'7a>^#=*ăU"6qqWsHAydmA&+\Sf_f7_8mYsD,Kjz_&&hhu9+7IpAG;[=SDUktEhxWBE#wyYgT1ăU"<k=V)EdE+&]r^ojPA4KG:50EczPXI?)W/r2xFjZaJV41'<Uq8;h/y;56PNib;kEăU"t>mjf;(P?D-3a.vfIXwsQcWRrEp=44nmk1:REkUDBT8Z7u*M*(-oun,\FnpsB(#ăU"D9l.QSDG?OI*Dof(KYuk7B([-I8owomYsA2cp)wQ*$j[xDat7Gc&2IS*_$>flHlăU"/=y%hofWk*HZ%NcG+BA-EFb=2(uW)Xe\?$=cfG0guIz_r7EZf<6>\SH3w=L\7.KăU"guv];Iro4x,9r89XBiY^yO&ky+d6;&Qp;e3qLv^-Jg=,1Z1FE*2]T<nfe$lNpC+ăU"]Rc%r>*DD<$R&<w5tJ%WtQzrwxZ(*g\?T,=sict'+sM+_YNLu5WGJ%m7nt9eTfVăU"lK\ZOi*fgk=PD/Z0#-<VqGd>APz3v;AstFm_;CDxpm7Hd;npwgi',:CZwm(7J_oăU"F+h+Ly%83fWG,%&I;g6QJtt)JZE.:v]WMCX^b(83NW8]2i1fv&.aUY;^M.XSlieăU"<tz?5uv7-Ct^^VOcr57t6C0FPvC.&sSA4OHnDu;0Q_q;tVnu:Ttfk2sZ3)nlS4xăU"+SJW0;_Pmw>$I*ZQYM\N^5s/2HgOsBklNut0rxIekf>rv]5R^z8/=f-?7DAF_&căU"#6Dq]V(Ltz(XxFD-ps;jNQH,arbf1unaqhO-7\>x3P'N+Yb7$0kOxQE2E4Td\#]ăU"fWkH.qI4T4Y'?U./3r^-i%4T&G\1;*]6J+gTPe4'_HR6$c&MCY7tZ():CSkm9o$ăU"gAM+Mj&G,;H/jW\N[Kj4mOQ5(>YOcNehMNL4)$krP;2WRw\KO7:qW?mM_Me3q,_ăU"Et<ba7br>$Aze7D;.:9cHWXO?q$%e't5XClh/SGY<qdtC87-<Xr^^J]]JL[S%iNăU"NugNIfjmQV,p_-X,u[xlJC2x52)LfE0ih;-QmHT=aXtJm\i<[C-$hLWf-2_IjptăU"c&xf1)HXsxkOAJ>O$Nc<NJ(,9OGaH;'jG:*ZcdcLdW^e'$7n]bWhO5^oOdYRWu$ăU"kuXLgYe2HobK:8cabHRt=+TwVncHQ5p_t,09k;\T0[-1,RbzHz0cY+Z<>g]:UNdăU"k+T6bPo>'q6rUmfQdQZn4ErIv1:7VATUO[_#a?J*Sx=hf8b;#0t?ufJGEObkF$DăU"Iq3B$69O(t5&p<6jcY\/bAdb&'$9wDJG2[gbYOpA\BOkK,[lLez+ZmgtFy'MDbyăU"ytpru'LX:[jL_>>OrsIl(bnYQrQIwydb$0M[7?tLxS;xX'hV92TjtepE22MjvVMăU"JV$uto<js>RLmuvOaQfaC6VZmOGrbVCt(n-HhVjHxom3g2z]f[/tp4pILXVKljNăU"*M6/).gnnPf\lJYahSeht3x*?(P':[<vEEXE^xw$tqe:ouPD7b_.rdSHR4zM%XXăU"b^Tc?P*5^ee=Gokk<>(*1fN7A4QCyuTH\84o)>$q+\Zs+$Ki;&)k.L[N54Gh[6căU"xUqLNd6MJr[1;*j2^*lSJP(nt':ADqLd1;bY;3,OCRbrJmzustsO_c:d6ef\NP(ăU"e2PAW)#_9r6N\#vlP#OQMj&pI:iF26/tn:wf^c>rwZ&&kY[wKc'q#x5\_0=sql3ăU"4^N3OaaWV:prT4bIL9I6a<sf8cv[uAbwXr=v^5\-*]fscd-Uu4-vFEflh*rH.a5ăU"1z-GxtmG=#/V)??nW2x8ebqhemJwbj]\LJT9GTQ(%4uETSHkblo4<e(?FdHRJggăU"JHuObxc6j7X\atxlr?>u_BPakQU*Cj'K=cM*MsLN*Nudwgq,/2nS#<-7s_LF<eTăU"*eH/Mu^0L/HrPHV\&kMTQb/H#,QaBVD2P8P(pirhLRQkm'r85le1$?8V:i,IKZ*ăU"-<>Sfv\4j_OCy[bOk&jw([1o(,Vy\XAY3q.X8&#8?VlU4[P%fjiqZf60l6lbU(0ăU"z0Y\F_3]nf9LqF%OxGWrtvF?n54?'53RN;z+)l^I24mA*q_YnFDd)>45_xAcHFIăU"nyk#_-#'sdrqLR6ifnm3;Dv<Y.FtNXSy&j$Om(I1t:Pvv.ok[su3gqjU[:.h0:PăU"t/lF-$Y2Cku4K^iN,n]R0Y*m_*(BWOt1?LGF^D7N0V-CC$q&Fq\*4a]^*PHNXi.ăU"RQ:nnan7YcHMC+Rmgd,7(S6D0#P^a*B:4=I#P[vM=zu0%4qPlu,,XxZoKJ*(<-TăU"UQVb7wl5w(XE,q*H#RSIsQs\NNFyrfI_IQYd8=+-L,3cxOaS=3']%$^ubY<A0SvăU"/,,rx&G*g_ZBPuT8x\0IsEgXD]ffeNukMH)olH-PG[-;'[ww0^/LnmsIv.(JgkYăU"jWgVmn#Tqx?-ogtpr6bs]aTxn;4y4?j',vT'rG1n1ERq-H-/&S0S=\&X1NQOYO9ăU"*$L]Q7D#giSa>y6bK:>8QnC5W+w<f?r/I+k$?qO]M?UAdt=%6]K'##_=P(.PM<căU"2^adeRbJx[&Lyjr\y.Out7Htu50n2pZJ-'=T7Cm[+AD(+rVpUc5A]ruPqTsmP]hăU"6qqb#UVYIw#fW9vptPMvVN6_D%YMp-Bp9BpVtup.MeIF6cG5RvL]rR,B?)l.rQVăU"SEGMC-CiadYJ7kAY-^KtLNta:_g-1i.eB&5cTIop<b>t7I8&4f1dhqux)8d?$((ăU"l4h+<o\M2)OG9wXb:4V.S2rS>EFZZq*XQ6H:B7%AIOK<4M+qI05nhG]eUBtgmTPăU"ID<$Sm&Sz\-fWi,%&=k66VL#mt:XwEMGM^45rc1)bN4ZWgU,u1[M,WpD=M7cNIfăU"(Mafq%YtlboqXeK\LAN$s>(8RaNvhoiFOgivd$lbeNj6)kL^#t+PPRiW<.Que7*ăU"1(RXSX(k6AcPLx3r8Ktx<;u6nYob1/oKJc7IqANU8?Galp]^<GamiCWEk)uwnPAăU"\?NTUcJPQ=>eQu#O.5<gSFno&WW$\uEr.Y6M(s7WPndNXu_zjH$T7SKd,JJNALtăU"H+oYlEAR)?M*Dg\XT<vDThiBSQN*hXTA3f;gt)<^k<.U:ZSW<6\NA2Q0<PX1pasăU"WN^<k<sjw;ogWHVDH>*FueBK,7+RE>MOL\iZGjdPs);xjgEYzV/<5;*FKl7%,N;ăU"5o9dTID)6QmI+$,ftLX0xx.gZAvn_\yZKgCE^?CSbu#dueUk_Y&Udjmv\5uct5JăU">SmGR+H,?c-0NM$D^7sdQRX?Y)q8Ikl6Tx0DKI<AN20?>\b$Ef\VZ\p#*6?',WcăU"e&=M%>)K*432.<CzT#D*D?u*Z6YY^EN:)t6]L+n+dP)qtNQ#<Jq4p91dM-QwurZăU"'bKX'QkYHJeIWxnUgqXF;[Jo/^D&#T$0B$0GF%*^S&a.^IyL*L>Y*URZ87[bj](ăU"JZH#lg.8's1dsQqu<$hhzE;3_BM&9y+9;pJwq?RU&c,p3dEs8v*OWgx'x<Reoq?ăU"(*-dlat)poUoVdh,C+wg[hexfJcW7,/iAH3u+mQO5Jo\j.8Uv_Ha(Eogp'i0V5yăU"#V=\/vb'TUer5g.[>lbV+f7PG)Z$O0MgH./Cr\Z\DtnQ0;<ec79YMdp(%6,Z11căU"uBU6N\X%>]%$rY-TU>Sz/3.6<cJH1UondP8JmfrUq\bpSRh?2w=L#A?4/gYNEj.ăU"MKt0nB9H6LsNsdHBPPn\H^erIK7a'PjofN(d,],9EvX(DJ&nE+M1h+lQD)3G,PhăU"cLVK+)fY&Cvz\R20ffSlYLpt-Ahu]\wW8%VmoC8uq$lG_HlqG'(4Thq<MEUnOY*ăU"XMZN20Jq$G*0Bml9<Hp1jQ^0g'cVWHcHTdhGK1xe7Dndp($7L#hEWa7RFR-a*ZoăU"MA>Sa.H$tF.<VAds+GClRM:jE:PSn95K_DI:gX7''?j53WbZfk%3frLAsRcjt$%ăU"chMe^;G;PU/#5V\\e^FAP$q/;[w^k]n1WQKU<<cReSQ*WktU:=G^dF/[zQ_OL'8ăU"^Xnj+Y7Y20Xsx+zXT>#Nq-y=n?6vJ*GCU<7q9Zw#AI*:DlvvyWE-OHr;blT*WOxăU".QVc7>hTE0vVSNi/x.;'hPic(IeUFh:IIIeAItne[m<o;M.rbVXL.d].l<$d[D<ăU"dT7uR\i6n(<EIJt-:1:uq_/'UdILgn:akYMMNONQfBLQr6.5HFJ$rpreRQTiE-iăU"m<fD7qfo,eE*^H>ocVJ-HE*+>1uOp35,&:ZvI2?[=$><t.b*L\CE.2a\6c]Rd)OăU"nW(Dcn:n0Ub>F8tTdj>0$Vu6;6-G?,rAg:sDDuG+vM]s_=a,QvF#mGY7VrXj5LLăU"*Fm\zQj+%h)H0Q2$Zo]kuR7l6Fj)VAQW;,Ln(dwh1pdsi,IL^p_U?z_p>9t1Q83ăU"?0I*PqNN/>%k)#Tacb30s'/\c-ZU=]-m%Br*d<FICc)3i^yjYf_+b-asm0>ji4[ăU"(KJU.O<L20YyU0$uDbBJZOEcT&hQp>9N/d0O9'[r,Nco'MawC-q<eP-a6]W?.W.ăU"W-R6U*iS6.ws2G4PmfDa[?i/+ySUn%4(_9vD>g8',2Dml8K6CyX[_]V3N2O=/QBăU"=je[[tT<l6k?r3vb8I]w=fAJEb;lZi$XS(o^t$5A7Tg?8&5n]t[oG;ap(=$B#jFăU"K'_n:0iCxu\IOlCm<LBD(az$PsD'/0A8tl.'SHm$9t([4c80bX+^;[m9uVfuNY#ăU"lJAfa+T-\WbPC4en/i6w/S=9=:jZ5PruuEGo6pn*AG<T]fSVgIUMMRfH(5h:WTUăU"dK/Gs;j#W%TUz_^((Ew*q6lmC_nj*Qs84sm2ARj_jIj1;3Z[TP'(o;neRceT16QăU"Da=*,kO#3<:W8T$4tGni#LynPH%1;E\u;vp0/_+XdrwHvtS4lUniLN%\N1g.5)%ăU"B9Zc4u/dQr7ww/j#8^.=#D_b0JWNMSMPzPHbXeB/ld-Tg4Mv2zY6f^4I0Hi4UL'ăU":LKU3rW#-)k6(ZLg7]jH5RrA?_wKGRDlLH)rV?iEq7NL&ukEQoL2JAJ6__3obC[ăU"J(bM(,ntQq[rEC6m]i56NK9\ikTq*'O\1dZ]tA2fA&8n'lb9*jC:]MH/W*Z6qB\ăU"PnD+G;l0)]13$kq0bh'\</t01Fjg?4xUvOhxL%h5%EAM^Ev*]](Hp2ZGp9Q7]S$ăU"$t17i$pvEkKPf0FGPMf+n/Gvd9WY>516M>;HL&LJziUg#rrGn?ubnpbqo-<mYi$ăU"qmn48),,O78Pyao,uXWTZ\mq_Nw5\Qa#tP0P.I^ldZq(k[\B#9IL4Pq/9>6BTHbăU"t-x+u>dPQenz4x:>m782JPCgA=dPx6QQ[PonDPeaCrLEZ&UCwbe.CKcjLWNtflMăU"*Rg[jn-6KX.vZ(f3YV/:+LqD1^*XV,f0K?Dm-pw\s29Wh/eiFDIuOl[Oli;_fq.ăU"tZvL]I*b'a=/eob^#JwUAjlTR]EW+TjP*?K7d0yOb0#6uFkQwVdvOGWbN#f_vlJăU"g]u0ILjcb(xhMXA9]#.%7i^ULdE_A\SOP&5uFuwakRUy[No0?5tIPKbbj'=iEM<ăU"zL+WP<.9iSgYLr^RJXs9<x;o6.H8C:Ms1$&^3=KVFnJ$p*\?3E(h2'w</=.C*94ăU"h8SvMYEqkzU;icb=8?SfZA0&jGH2^&6.?[0^>[xvOY1B-,8]Vq^p>fpSEBA#^MCăU"cdcg0,btN7beXPp.#EC9[GWW36wQp.B;uZe<7rwUt_N=QdgncaBMIyw>uHo$H.'ăU"t4bubLd,pZoe(]TXTVkE?8NVe(%TOR,Xg51Vm&^M.f.&Sk-.T>bnongmPzpUjlgăU"U)?/atS:i;3VA;$l:Mb#y5pUGnI:#?^u10lH3XRvv*dPe8YT_aL^=IDWZk$Hd0HăU":tKlqXLa2RJpMYjn^n/8=Zr17v8[0(oi[ZO/T>e>I)-_rkv:BRVkrMOLU3I4pOJăU"X]&=-'afNY0s^K]&(=Kd-nq9vE9?JdS?wMGN+BbDr_Tk]lG*xfD\l;,QtoGTRUVăU"lpuYZZ['OefeT6D+jG=XtNFW\e;0f\psLIFFltzH[c$\,q5&hxd6TxfKXZAxFIHăU"oo.6%\CSYsBA)-<0_PHf'CJ2WB2WXt#jbx7hbs4ooGtsSBFTPtk0I\eN6Tw?g0KăU"m[S_i_EUgNCTq4h,]x6C0Rz<C^:=81d]Zd]OsKR*#^%-c-kSM*-t26a0mRtVpdYăU"uXe*ipR;'af4.$IXgxrt6KpV$kpWW/gDC+$lT7$CNiPjE9kD<^nd=#St76CI\>&ăU"ie#H?T:AFJq45fboQYN0cwsy(0lHwtcUe&U1(/eBJWgb&?F+IM>z5dp*im5=p*+ăU"_tmW9qt2S(BPu_k]/0r$aNQtosLS0G$oDPFIR_#EQ9<$1m84[qPwnip:v\>a%p5ăU"nES_]&<nJ;aY_A>H7ut=)w3.$WfZECB[=xWile+V7YP'f&*\osZf]o?Y6oqHFP4ăU"Zb*pbv/5e'4;M?w_c[&J+[C:v<q4%CIRW$<IZ'MDX'x-jeQ&9wi\FEd2h9NbHo<ăU"fDQqg=:Wtq,08>*1:ye?yftj9.8>I<H^RaD)dt4=(aA_VctX?di/i-3u.b6xM23ăU"d9Ui=hRWv0-J(G9BG+2]1L,:YN(]rHrAi2V.^>pZ[/ktWot(pe3L>m'igZ'8,t[ăU"z4gO1?Ao;1%<.wN<T/,Tj^?*<tB7:4W/?Vom3\[=vO(RKmPstaHD-56BHZbS59oăU"'mHMk]svBcD,+cVs8I5F8q:(s-d2djbIQYl*uXLg(i\>[&be2=6jYbDeL;[i5^năU"%S7EpF_NtjtaSGc7j].Hqfn9^GN4B%dg?h-2GGo>A6nY&I3wgEII>=c=t(-6-knăU"VllI.boNXra,3[#)?fIOgp)p<C#$WZG;weLw1XNG*l9I.v')^X2,Idq=.%OOBIqăU"SCIuY=IdO0Nx'3FlS[oT<=loRj>=6Bfa$7&l,pa^6e5w6u>tRw5TjsYKFZ2-;62ăU"pyEp9slmFVV9:q>nnXPgxCs3wkfYbxsX[u(=ACDXgbS6L8B02pm33Hf#:-ESBCsăU"4mWGK\.bd[:2v3u-kG*pKzNPl7)5bIo7ND_XxakKnDmm<fJI,;NHe0n0U>(K;urăU"$pgpl<;5+wb2S]p5=<vFRcmcFYWkY;AdvTSN0c3$[tFZ9>'<\UsH+,Rh/N\+$/păU"Z7y<^8>4QosL)Zte(noj>4u-C7j99SvC2PBlg0A0KISg(Ce9&0kpc$iGaT:>TFYăU"d\WM8SDQ(rALrAbrK<Egk+1uE*Mm?rXbT86j)jHOZrWhvWlFrdU(P8D0kSu<4bxăU"Sy^^B'mj%_u-Wp02Qia3t+rZ/K?,?Kjr-kGy/*?b0k6FNv2Xa?^VBw(4=6r:N5AăU"T&doF1GFCT6UMXf5(iDZIlZ]Dqkto?WV)h%G?9=;S9.S=U_hPW^l\heX$WS6lW,ăU":;^+sOWlpjNt2S^EaCq4[[T.dq;mI_*ui$-w?6w1cPg,]-8Z4mw&u1>)%*NTiSvăU"MWjP5pX*B[<3s^dee71Rbj>$\l8.tYD+kGvjo^PAq^,hNHQk&f5V)-emhF9?eAxăU"VYwgb&-NwCtsc$CtYS3wuj:cO-*']2u]42ON7Bdt*55aW$q<?h$d]y[^doUY:,căU"8i'>''+Z5a2g8*edITqIZv+oO37PYr49JD(Zn6-3?QXH9qd3'JKll0VmJn5]&N[ăU"a1]tVrn9NNPNK#;a3w5K9F/DdMex.u+isp.wWu2nKfwHF8nz3Z-Ji2lK*B>Z(T?ăU")JDRb:][#NO_z*$RM.,qnu3,(1SN4<6$PN]wudKpL1IORmOAn[4cSTG99N(YpgZăU"Vc\Pr/#1HBtWDg(BE'*8qJcW\'e7EL3/HcRkodlbSXOrD2s7s,^wHiot%ZU'nTKăU"1vgp'[]-]=R(r5g4eqhf6i>\lu(rYB%y''P%q_;09u%p\km*5F8bYR0hu-<E/,xăU"u#og/gfsnnBK*tv'3I3:r?=)xjTAsOusa,5mBASiUHhB<U]%\abhp&PTEiR2;iMăU"RdT2ib<QJQ>rleYxNfZCzR+u#aEk-cgxYkVq^XWo\npx(*Nn6Iyi,*q7<Qdf-q*ăU"?\gQ2ZF,Zh-<]xi?pte$eb+hm<UPWp'k&o2Yib)FdZCAU&(l-ZoV.tss?viFX>>ăU"80tAurNo1zTNQ#IJN80J1P<,F$5s8]XUvTn.$?..o]R3,m;;q:Nq22]9,ko9PduăU"VeLM]Oye?/OwfoeUXonNMIE%i<nCh<W;2'0Ndw<0dblCND;T&-,7D=2P_2;$ZcwăU"h/V<mW7i9n2,s4i,gdRA8Ng:[E&o'm[%Pa1TUaXPS2L-i+KBKoOVLGxx?Mg*^VhăU"3f/:a&HUgH3Jhg'Ic3n$0VGwrV>pouEjg^r*B8*K/?R1>jOWrtsQ04k-by,[[3IăU"VpCdX?8?ejb9EOm;?v#l'Vanu62QOp)9(gaeoL8]624sFpOr.wmQl5LJqLH66]văU":r3k[/[/DC23IRz3W7O>$&Kkx1?cmzQ/P6x>;6oYE$aeXJcGX.:+rM>TK7c['4$ăU"PsE\X>C[$[;>5>s:]>x,3WVwMUc.Vt)<\:BM:,(kQ0PDXU[R$-IY#^+oOW)64,>ăU"dK/[Fn)%bRI/1(8?-q-#k<N+/?7M21aCFGEHku0<\lMAAATTh<?^G,eW;M-SK&aăU"I2xn[zfa&:K$Zd=yR8\H[,o$lKj.x&:0/-DTPYY'eYlb*rmh9]qf9aCSbqu=M;*ăU"h[F^SqDPHQFgYNC\Q6vjeYx.N:+Hn;qR=c5NkxqPK^4,v$;f;:\&v6FfK9).7BMăU"+&&g[C<*CeF0G&s$QaBcj&n0Hd&:E-HvBW&H&DMA4v8FrP:4lA3r6?ucknZYlryăEND SUBăSUB V6ăU"+h6jFb=>1I%Z.fQm.YSVSx9V;At)43<GSgG'W/zMpGOo;V+0O;]8K<f5Wbj\gw%ăU"E/-&l0f0u<v8?c6YclCJto%\8?UEx2b;5l,j%&CeG&WOZ84YI7Et+<fc-t':Q/XăU"9BC$T7<i>)2h<j:8j\DNeDael5eisc2'0kYO<Q-G96,p5NxfN$$B9kAw)Esjp#[ăU"1o-y_a0EG>';N]DH,[&#B>,N*6,6C_il__:3lT&1DuuSa_QMa'%YdPQzc?xxu3YăU"eNOtjI8YOoYnbVlA97\z^3TOJoZhN69[t<vTR2l?O/;E)sRP5n%m#'R=sDDN<YFăU">D0Q0k%(UkmlCB5U]$vJqqLudcR9d?jSwte:__KB;;_QTNYYKxtTCPr&=XPU%dMăU"9/]X\LvSL:k'uJSet]94Wg9H>'1B/G>J>Z:k^og*wu=D8[DtD]n;'\%)10Q*nO8ăU"Dkp51n>k&U'=Ny,dqz)DY*7UOS/,+4U'CT<%<f9pyL>TencyS=(3tyBq)<g9lPwăU"vHq[y')Ox7\g_RKEmlgrDO/K/VUHzjzES&VGnNRhQN??EYS3lpugbMsOhQ#Z:0kăU"%nQ=yXGP,Fj4&I_9U7<-lQ#0/lm%Md$K]I\V$-n5,Lm9wbauQNc?AMZpD<]>CH*ăU"=CW+)&-xKCW2[Gp;v$XE9Slt;]:d)a(I/jt8f9WWYSBKBZ^G:AZqD8Oe?i;iD'BăU"Q%#jj*Zq.6)EJ^;;YlFlaJI4RQutUL(5^YXSw-s-DsV,G_T9oWo<&0pD(8%NS?9ăU"YRnU5_dAYmH*hkMJ'*]3pV/A\fRY8XC68ItNMUWaR*DDV*hEi=$ua9hYpQ,0,J6ăU"TLaxFZn3^o1d8cXn<eI38o*\'77mkTGknoX++6l-tu:-1B23il#*2&8dYKjjihEăU"Mr*348A]h].DplC^&*(L2oO8JpG/jns/bFVBdvCuSA\_;t]k2xDH--SMsN4du],ăU"Ql9y;&.w:]>G'<wl6+Hqu[;)FUcf4eZjLUWVWvm1Ssn$Ygnb3Y2pDpP#']ol/PTăU"_-55=0EmY/'9d3w?Y%RjyT9U,DXLU:p<OF2t2PDq9q/L$t$-27OUZuh()ZvxXPrăU"CMP82$-f7970M4_Ka5kIR34>3K4i#Yb4E[GqDmNO=3(Pk%e2#oQ6\7i(CU:nsKDăU"=rS7?SNOiGsuZ;f/6mt$r&nc=F;?ouR0qDLb)[I<7h<1p)(ZiH2NTRN*55W+TH<ăU"iv(R2+wIV66$U_aQKTQMOC:ZCq%s5>t\SdOUzuS6_$3++&DRNes&75X[Nu/6Ag3ăU"3b1RY_9J)'[-Bo:)?cnF0]lPChSZVho)<#kj+#:SZ0&VV]XQYi/J$)*h8.&rGdhăU"F?s5+DxE3x0s6\9s<6XR4+s/\Wd*EDK)1&Di?/TUV2\Iu6*CUxp8i6)<)rGtE.VăU"+zGiiLGT8Gy%'j.QL?e]qDv81u'+6:3+-h?#Mr3tHfE=\B&B;SPh6h:Kt+<*8$OăU"vh:-*\W_g*tRv\3l#\c7*6^KIFqA/=(TUd.ML4sJM7n-nHN:eLZ:(NG^]7(0_/1ăU"?l.p%s\9=v6W=t](_<T8JP\WaiQN4D&8.Wn,)nGm5?Ck4]EqM'Ibn=ON#d9.A\4ăU"\;\cMA><4/o;u7)W\IGD'kuC%15?^(uh#i7%r=DTg9ib-B&8h:I0_,F#D%Krb0'ăU"Hg\Qqs<0i'iS1xvpV1YqM)j4acsd:6:\[wtcTa]At[-9+'ChjtW7DC8iH.taMQ'ăU"VG=3KF;.l68+,E?'k%Bg#GTWUsn%6jc:?$4tw:bGciF.mO(aZo7S^c40(Rc(h0]ăU"$(a6A=oLg6:Q19p3tD#12f6P5F3KmaWe4tHun]dki=?(*rf9%,4Ni[T?.u=+opLăU"KA<#&biSq?c'<f]en2#W%E^U_?-Se6w&lr<Th$Jb[2*[2rNB<2aJarjjGrWG[LhăU"gYIOxFeS464Tan5ac]eU;$S3eBt1&SQKnNzFFhEQr($o[a48xo%kVr[bpiq>o:YăU"D>t2NO*<5z2ZjTeVFs?lB0nFy&t>Ej^_VXvx2&x%.Q7,g)eF]AL6;eNdsK2p[ulăU"Qws92PFG^mQ;Y7K%Owp^^>Ak?6KRW?.RKGYmqKsEw(5x#d>x+$R*o;GrnAC:^QWăU"81%spRiLRKp;<hqH7\1gPgsDR+#^(3QuNNNciRp]ZbzPC(#>[[Ea_#\4bUHY#37ăU"OL-WKsvn?wfrA3:RbY3[]eMVD#)r;bKR(iw2Z5)p)hC[;uim,a#fqLKj<TR:c0yăU"H2QK7rgI0N2AzoEJrxKx0<PLY;uAY&iitaY0:8Q,^AF$nQO,cB8K+<Y]iDmxO67ăU"UUKEBmZ_Q'TUU#*M1a=C$/coL$\4=s(x7W#qzGm&AxhCo8(WXWtv.)4M/d&C_qFăU"-cgB[OG;E?=95Bhrf?a[/335tt-^)VLOpfV-C6-V:HNCN=gL2tzTogskOUA-<i\ăU"([(rY^.CdHd*:RG+#-OWO,T1b46kw;UFKFsdVa6pgG?a]?mWx&eHnw7GrXK'8jKăU":A<ny8H''=[?$'X2z*(k+uZa*Iy$/PTSC.MBI3avu%0%l%fO%F+'cGSRkefft?aăU"Ro#Ls9?*OZ9)'>vYeBZCpra26P0#-0E7L.G%_[El],H#qT+,Ra]lp*g.ES0Y+.*ăU"4Y[Spt:ZSeG[mR^bOiTa0Mbc>YZa'6Ye0v:q[Nn9-F)]E6C2G14a.NU:q-OqOkFăU"5Y*KQr6:4Rc#caRt,<vrMTgg<m>=e27_Waegl-C99Me,7;8i<'U[\yUZq,uo-CGăU"-R[ZPLcLf#u*'PT#;sHJ(3o01I0n<tH3io_oBYt8JW<PZ_833DEFAK?bsAv*C_-ăU"5ZY4%i6W[D1,7B->[.8<Q-Yl&f7gXZXGi=#U(g1Tk--bKjdxgAGOu;n3s\49:QdăU".GDtHAvbJj3rbAp$ZXvea>9&Y+4gryRLCPx(l>Y2qVU/%5K1$XuG(S(p5sXP%0%ăU",cjcaLDs47R,%i6QN=^ijB\1E]&KMs-Xmyma5+4m'Cf%<GXlx+r;2KG#ZW<iRu3ăU"T&f^CVGQL^i$=9.^NW,dAaJ_H^w>fWZ_h-\W)J*14w.=1v6[(5fKg7Wsxg-J5W^ăU"p;W125Q5$njbzSALH>^3^hv3F(?n8,YA*_7hq\>K[nZ.V1ri330N)6xW&op\q:]ăU"c5sG^^=Ig3FhE&9iv*Wr/>FP;PAMI9d)KrI;2Q;57.I#<In)I;2%<Vd66e_ryQgăU"pHC\%g5GOV^rr<qU\WI6:aMd%^[CA\BMD%'R/IU4EdYMLY\5pF$0T^2qqY93he;ăU"En_5kIhXkE7cqY9jAZ<%LQ;PP7,8o#9<KY&&M7b>r7#,3>0>oR0s(fl0J4W$/CHăU"rSA[-P?VzK\'rJit.&n/F14q3uLCWqF#GW4BtIIdOURxJ6z2bnnPYYg^#f8mRahăU"qj)<*=1c?/L%N1)1.+X=W9E[s_El+:+AuR/7Q9$6hKr0:iQU#:Fr'Cc/GB0CFfGăU"ZGF/x,8Ynd7eYD>NX$DEd5vSna'V%^v42HJ:utr9J24BbyN#H91gw],G,imL9?NăU")XK2hg><QBNG\TJ$J^<Faz;lc,$vOzWeHNHet$)0(g+p>d=1?Unp6tYVSHQli]]ăU"gWDl0o<T=&,;Xq.ew>a9X>5t32Ib7K/5Q3x=3hMJBg6<t$K$wZ32je9/#?+HDl[ăU"ANai>DQ6eHmiooVM33g\KW*gA\NdyiYi3HWNK9.5h3;c,8Q]+]5/V_IjR[>q6-dăU"EYidqvcqO%xJI+5o*um8ar9g:jIJNlyZjc</aEGC]%&2?b$ChxLMZenl[xKFiY-ăU"vWK7uA*eNiy<<0M?MPr,NIEl(svT5-b\(c#vx6=go9a=g9h64&(Vv.H1?mGg>1lăU"lZ9*+=cI2X^aF>DX>K9P8&Og*;%WWzm4&(=T\VOxKwPfO>v0\'I]AP?H9x.rhkgăU"VU8c1xk+535xpYa&)-)I>K2FlKSP[-JjW];$kWY9YLl23r829CJ&J,^1BdroApDăU"dcI<^z/Ae4(&D<DLSbxT=aI>%f'5]L4wZl=qS;_=U+2*0pK2;tOZ4D6m/GAZQ-9ăU"NYbMWdEUC]*U$H\jo?iZ4*_$+KBehJLPIo83B7dV^5_HP+/aJo&eU)kw42cF/TJăU"cF\7H*84[zUvmFSZ_.*;P#3tWc,#M)>*DJ>;iAX/e;\0T^UQ7R4oVgu&aoj(PV;ăU"YRxSq7H&63<qR35Enbo3(=?L3=8rou7)n/8+S+-;kZFMJOz.ujLA[>>kM%(R*Q;ăU"=dXB=$,P%f:;Wvq0A?/iR8?25),DOT+gQHJ^-eW[2e;_'#1G5Y&'gaf-seFu6PkăU"aL;oMtpBZ901\rBO#0^I\[6r3T&-TlMHq47isTXli0PCon0;l?$($X.A/7%==K<ăU"0)QTB_rBpGI#d%;I9fh^i_l<^6nBRZ[tL_BNu'QmZrYFlf>j,fFpz(*0bNWD(o3ăU":YSrs(BR*A_5lm5=q0#'?>04M=+Biihw,mis#eA/&xu8fd(Km/8^D#;z)or.xNQăU"b4J?t?&\f,0cliTQvEeJ7.wpM?poCoeZ=[$8uAq\71h%(G,Ye5Xaa]d(#Xys)UNăU"&U)klxX.u=MalTt4NQD'TSQf]TcPsez\K03CWj$>hebIQ,4uu5kIiKBb7d,Bl-BăU"d=Zo[x6-ipY[*4IA2R)'d/1P*Ir=WlYvtWVpB_BuOOcjcmZvj9aiayFl_UZkN$eăU"A=P5jN&a,ZEsUPlVXBJ_\:vW)dFoB+t.A.e(UBvf?d%,?:^^[4:=J9tF97UTX[$ăU"e\8)i6nWb^#bOQVanJFYpG0,.d*sAyd>0kCx[H$nG37Bt8+A1E-wpCNH.Uf4SdhăU"k_H;CTAh27Z<+*,Pz<T6GyQz6-O3wie#^:N:n(pG7;X(z=**71%D8i4aAp'9?mCăU"ID;)Y:Wl]#FTk?OXs'ZD[.d]M0C.qWL.1V.juh(E:jQO='z_p:G,ERGHH_JMO*qăU"HswJKI*myJ'EKQ[*4R&a<1$mB1$%/_WGVM]bi2l?Tb=Hh#<'*DS2$)dC&K'V%jpăU"hr>:3cQJq\TQ_2dT/z/*s2v_NNZok9jO=EcI+FQO^mV29+,RW8Y<9Qgu#dL$\3GăU",&UIc]B<NqBHMotYiR$/%<ICV==nt.4JM*Ux#27t[U^WFY1C1su7y+nXi/SnUACăU"X*T67R?%\S/PZVg=.n:zOQ#'VLla$FhPlBUeoUILs$9lDB2Ionc&:#ls:O%oNj[ăU"VuNPYP&c-[&NU4$;mclDpdguf3S%LbY10MvG/cnl%X/T.b)SQ0+'%Xu=S.p&GcNăU"PK#BE5DO>P't=0gO06o]nikeq.-r0l6g:vkCoVAbKoCPiKNlw-e1B1)UQdN#LQ9ăU"OLomPAnvc\4OJTYqK$)fk1%+h4S5,WR#cLY49WUk$YrdS^=Md$+14z+'Quo_;sLăU"Pdp7S3/5/)Fl)Jgi,s+7q]3SeHXS^MlF[_/MlMO^$Qx0:$wOMq2BA-59_CgH-;BăU">*j&XD3P40\Ekzgd\u8KOdr4IVxg*3<h#XJDcEWvoEF(15dSgAFo9[e+a19/9L%ăU"1?Sy#+9<K&L,YPpX;P[0F+6d[R4'J*'=P?9vd<PTwFrgn98N^2'\.w<oz)pSQlZăU"7jb[d+yXl4v28>T_01)I1\ZQN%H#H0O=Bz?ku&(R\35hVJdA;%2---sQXLhn'7băU"<S_T^JB9&$DWh/[c.W5wD2erbtb*A=ahhy5B]nXgh*Weevl#aMV)QpNKA*$F]kgăU"cWaZq+c?B&[72]*txDNveIZPmnkF'\'sxee-eg9_I]3<MAHf4^]*WTPx/rNN+UAăU"pMY6xWn+K?8jKRWNj5p2/4vf^GnRaA6pS8&&V((sr&EvT3sTKmer%7YFpU^UI7băU"kp_M3^k&\)ye#or7f9$[Yz;G]pu;%B/m\6rDG;8>OY4IXZm;X7d5kl7OJR/=)NtăU"yK.]=QU#_p>Sn9eGah*m2HXMMteRO)r5E32h:c0<E&M$(I[0wq\[bk8%W$$s$P7ăU"Rh-[-5;AzJy9wAkJI4Wn&uw/-)2V\iOM5Xl=/a<HET\>cRD9v5P,?7h)U1CB#d*ăU"cfl/PTKz3K)*xfKkB$:g2:g^o=2hgj%H(X4uTjl,HKQi$feOEl(3SS=9Ik:]07iăU"2,g0uFdGN[72p]5F,Ij5lsgwsQ/i[IE/>VJgw6LNZmL4p:;#q\'\TQfiu-\K68*ăU"8t=.BO&+41bpktIghB*^3t7SAa0&V08K#4hH7jj7jrNnBg>*nr+vbvCU'62*wZkăU"-bk.1;cDKQNH8+B[zY)V#>^T^L-S92RKF,.'U09';uD-K]9Q=q_^[1e07hd5qx$ăU"JD^1NyUD],.EpzK&Z4Lh>qZ.G0+L%s[>W+Mo&d<1IZ[II(WZbb8\Cdhv,IYUb;kăU"EN*<c&-s]I%7ZTQ=MvU:y\R6N/$O]W\hOqTc/Fr#r\B?vOa_$fJ(80hz)Pa1=tvăU"/o)Geac+UfjsIo45Vi64]kbUk.fsF8Kn.=WI(hlIoTJL%=7JrjOvPu0H4*rkXI7ăU"KgZ0_R+V$ujK2W(pELzy:>^v$<r#-iW<UBrQOCco0lhK0eoJ*?H/A?>>(X<Ea,?ăU"(_31Z*5MuX+J6fm0RB\>ZT\ntr(4\OYfmUXV^<[RTHtmR/u5+%\6a%_/L3\:%+făU"?=-nYbVer7W6gC(3eLcb\+?G3[OZ).EVk:*3LELik#XC$NoD$,fCPmFRTLQ1_5YăU"_f?>S$9(%,8vd#G6?t]H)ub;']sG*3XpX.jVIrE;-XZTF$0gOBIaf_q,pEK%ninăU"lKn-&W.K>KPB[%;$mL&tOa;BQp,9?-K<tCi)3:<tF>]J(#S:VO>a$1VhBQpG1vmăU"oh'RfzVA<R+,/;fvfOANe$rRJfGq,<5Y62%g#TYjKDB9(%%[MAKZ4?o^VjK^OV/ăU"6eXgHJ>0DX3'w]HVTGyl[XiIA(/kvfK<)K=;d;87X455tl7%3sdm_;f98a'B43aăU"'<Cv4$/kE?*fvHGC7F31+_sfk=^&AEPE8b(.W?=nhl,P)KWPA4i=$T8fVF6[rN'ăU"L>>74Mvy&d'FnZPj2[58PqRD^DIU+AA#2;W^19s'GI2(D75,^h>0'B__(.SI8EqăU"e]O<Tk5EdrZGr>3b:;ysbdklc,npry731>9$tvwuOE=t_a$v^kB4]Ol<5b-sR&OăU"jg'g5lUj1=e\osuMDU<D5+>;aOZCr;YF.ZZX#&r:xa1MCVa*YjKdSx><%TY,r[\ăU"8.+*ap0M/=+pdI[(jEHgN1^%44guAR\Si9)skTwNHl:kn,B.=I%4ij7lhl1O/D&ăU"faYx9(M9txV%OTc*[dMRc7.*9q^H#oMATsQSIEE##+[svGJ]>Q&-cTGj2(BEe6#ăU"Q9pF[iEGhru#%iV_'t;)HTPgK-D?u(]%atXK>:qSx:K-;IJN-U2hFKBD/^]=&(*ăU"F=HF]UwwXF3:uF/f.^wci.D<5IR;Go)ln-TXPd3CKfTUZC&CTPSV?RE+FqfJ<UVăU"<;9VBrs(4qS$9]J%uRe;e2od9=*j1nbd=#McZ$hp\[OE<s=1/G_YNU#DA*+KgX3ăU"qdNDUA+#h+h6di>U12$$;LQV0UguN2;&n^U)m*knkkW2ZU[CXis#RDrOyQZ<n#tăU"L$#%7Sr+b=bd?hjof.Wzbn=8k>s(QYX\56sDkn<L1L$?v8V3QXX1ab3LE(vnWhLăU"?fV5gPzb&PT^<QEc*Zhqoy:>\NoPX8Y4U?FaS_<&Pxg0=>RdL//rEJ=7MJow5?>ăU"/8pTN)ovLcuS##^Lm]KUUJljaABf4K6CEPz;KB/66q0a91<FuVq#DF,fvwfHJjpăU"ygg=nveS.c&[#1+C;LVu#'%m)\mAEMRs*%faGe((#I2^%nzQlR.iuRv0s'hr=2făU"Tr#[$jsaXJ:?\%OVZt\.tC_oqnY5QKhAZ'P[btj[bFY#Fg3TXO=AQttECUa+1MRăU"=]]r4Tnn.7)Q6r50alEy:$1DG'n)aSrc+G$Ls=jimq4(\9D1)Vu*Of5T6)J$-t*ăU",pI)#RD>bQE._:+T/8_#;j2d1(.QKWhq]*PZ<<(W%ZVPb?Z#lbN:3J]He[F00,MăU"a3QxrjkqsU4:jQ<;<lThtV$VR&Td4/1tfX+5eKW]ng^'j99<hF2pI-AZM*2hNKlăU"Lv)(j9VtyBA%l6l7%*P.\V(UsO;&uOBpDZm%l<lXs6/SNs;^i6Z*R4ScS#QW*1$ăU"33'71I[cZc#j<%e&2<*D7i7.>xl_j2+J#j/E%KWl9(gQ6hK*xFcbESBs:w>85u8ăU">_Yog3.$5VX$Q..DN2)g$X1ta:b(AMQMm9+7R[#SDj;DP'18R3;V*tgzK5-M.k(ăU"B493UoM7IE1HSeWgKC7cEVu#b?JeYRx;Er.l:nU2Px<9_J-LeC[F/5l*3I#KcONăU"KL?N&.58b/itLQgFP#g_%($vdAQUina.[8tVosDdl4:,7Edlz%YZMlq8J8<0=0?ăU"/PU0llerUJZJ*Z&1V'(aj&PC3nIf2InQihIP#_acw8.GgW5<8L-4Im\gB$65+g9ăU"+aCp9v3i7?vq[>uDN]fP\_uueJTDOr5z5(dSBMaHLQ??a4w<ou4P.mMJg*8O4VFăU"X95=mPkR/b^(%vw#dh_Bv8EsiQSP<nKPiQi$=cSM^QX%Z,#mM\'&9L9>.l]$(s'ăU"/kI+Q+hS(3*FY+$Q&%nP8oJUcWxOgDm0&C8#UmfxGJ_/t[J4&h(_K]/V<89QYM^ăU"VNrj[gf$Gf/5GBuaEA3iOgl_X#)Y\n6e9MJ[)5U;(tB%H8awDfE3vM#jirc=^,jăU"4)XHg6+QE/+lUD<--bMP9\kjT=5;C/IpPJZdy,GY.$QNjZKC%eYn'QT,7Q:?WH4ăU"eC3^Iwy]qof55srKEBeDHG6R%5fOp3_dXSNFgpH<5B%qO$jwxonY[:/v<Tt?RD<ăU"]6imDS,48mAa5wgW0v'8(caHU/o1DU9h-'A,PAAb\<d*EcNQ3f36%FFLD4<ytNXăU"hKpc5kGvP\eE2-VR&v:by$b0XCBQ]=+Be%9a<w0_f1g/Fw2e78,IEQ1sw)0AC54ăU"dZen&O;D5;NlYG;e0Y9%u&D9dKsW5/Iuz(A.V7KA0bUU(9e<S'd/hBS%Z44gVWoăU"D++NUl96U^nqq6U[63<6V?gi,eE/zxl8B\nhDNl^9:fTXNXZu$OLI((Bd*HQvb>ăU"Vr;a7-fQ*5S;..C6(3,p7pshKYSV(cN;p)t^i2P6<Oz>]*rP9utoacfNzTjiGXBăU"(B]&&.11,G;2Q1w5tO3GV)p$o/GtGAI2wl)3[Zb$Fr=dH]-1>,d5S2x<djB1J?oăU"o_Zq:+Ea/WJ#y/rV-7l52XR3&yP,QYH^$3i3_2qmOv[NgKFB/YA9^lBl,551A5SăU"/hkyj\42f(+<\kR_i[NFgiE+;-6N_tY5v=rcq:$AT$)1QRd()YU-o'BdgF$&k,1ăU"V*d6(eaSrcI5(gt[MnC.Dnk0-IoOEq)ad:(fVQ[Js:r3>STQ.hd&dW(135)Ry6XăU"YxrbX\g671pOQus,Qhm&N$]IX&(DEF=swqTI[/8si6OJ7<XmKMJ*f&)/Xp'T:t/ăU"3&5[#a.8zF*cbn'8KPDYK4gUXioUfibSSAuiLWpebAo,Kgf,1Kr;NcvQT.>PvkYăU"ay+&7;7Ys8[j]mKVSajbT^A'Ki&l(wRy&Gn'H.6pUcD4_f-M<bp:BMTLC?DORgQăU"D&77bC(.s%enc9ojNdK6%MAWh;.[VVT\n[_Gff_luo>YY:hn7KWxI:m-wHuD[ayăU"nEf\_V+*X^\m'u#*UY=Un9XMmnhchsb8+Yh<,Yxth(%J>*;riRJ?&9pkiP5Pn*găU"X]+Y%1A4M+Lfh]%UV4lRoGK^V[&s#O^phKSWHCtJnvLi_<54>[BY040/Rj.SivjăU"Gk+=wpn80,uN.PX0WLZ;P'M?qH%cF&71=*8FeHs?P1B$W+_[akW$&U]7\BbBu7UăU",_Ktyc8pTSoGzmp?(3_#tr0)_wZk;KD]g3(yAElTxKFX<A?aj2KX2sFiV67f7JEăU"diLG>aJ[U^egkW2txF;G9eEQlFg4]HGCMubY$9\8pRY:QLPZZQoA&orKZ7snH*:ăU">FNq./n'\dG?($(Sy2NlW(]grrEo&1g5;9?tkY-:oG\-(^h]Nq0l1sqo<9wrnh1ăU"[Uhm's>#qAu&%0o83=UnwBg;(D5G-'7aa/%a5rGAl8y$><*9F1J,8p?[Pb1T?ifăU"olPa4=oLh,>)qII5Xm5)M&K,%-Vz'S,cHw6wF]PpXa]mHH^#yj^Vq]7sbpROU=DăU"G4VT0WXmmCCGDV;96KX,j-.r^jAMq.ENR)#Z%En9Dgoe^1dYL:)CWg+Q]4Rj*xqăU"31L=fLy#ur;1Pap_+bKgn[J[c9Nq&G_L;5j*-ImzO9E--d'do&[<6%elWs77S/,ăU"4G.j%P0d_cblP['M&DuHbj0.]:IosW*Q_dcu0h7G0EUYMB:A\vzPM^jmH622QDfăU"uo/10oB9bK?S-p?A3ec5B6c&#a]6;V%jR1]oiu#F9*4#l\5G.7b&,gpq<l^/&&QăU"yc8P=?MHQQ2\04_gU&O=,%Wc7ySYF]RRg(gf\RD)x=J#ehimhnft2VEAi15XdP9ăU":Hrlk'pr?r=f[1z&VOQYI?#&ME&=#7TAV$2<6^&BE$a#s&1I/G>*vsYvHs>F<eTăU"Kd3YyCky+Rh[HH*qiXrGhySJlP2aT;#<1_R7d0oq#BW<HSTuHpeOrqjTYKst$AIăU"Dj5Y9LUj,[w_kQvhRhL9BOGjeMr2DMy$ku2#mT6SZ[mVTLrazLB=R0f^Mf(PxqXăU"Ajwa9mLi2sN$=(tG>.xX/p+hld9R(YVR<qY*eP,%zHx>b&?YaND=^,YWCN]j>h+ăU"wA(%*K_iy/q'%Wd5d..7E#_gqFSJF^M9B3*I<Y^_+-;:=K)G_X9Ud8_6.DYZ\.8ăU"8&R8r>Fz=n]5/'W*hl]d6f/WA.)6Z2-AZ9^GvN.97UibkA8?H]RrQ_&'3KO2?$BăU"SO,h3$Z&i3)Mc,LR1k<c:S8*8W$\721Y59TZvwk/I1GioF\'pumLXDP2ZI_eLepăU"ecR+NlDj%>v7tm9ITq85](HEGJqN7B508R5rK5J:'p,Egghoeg[Q+H&VX6bG$09ăU"Y#Rt/RMNsO&YaCm0_[iD$^$_12qV-0qGB$b);Oj2CL&rWY/gDqf9L1>JW/IQFcrăU"AS2KluIe8Z0f8&$P3rF]Ds&IPZpKHgNT7C/jhO#qIa9qwsa0:(/5(Vy+1AC5DB-ăU"?1URV2G:,HX:bC^pZ9^,*^9]87f]Pb#Jf3OT;7:6IQB01i(o>XrgkB9%)70YWT,ăU"0<c4T.5Cx<>zs41Db28,K[)kFXc(f$VQfRiT7/ujRx:^v,q95.5F2M'ou%JT:YpăU"\)B(-FiDpV%.A7IaFtZxK%-'\0PeQ?S<h2jz\uO15_\*nR*h4b_#XP(LOZ8C>DpăU"5g^W,.j*7(F>y<LwCRS%EM7oSmT4$riK_K$,/XTNiIE7cgnm4V0y&8k1%B[Zv?AăU"3hj%#3T&ziF(%o/.%e9AN7%QSJM'CY/Hb*hF]K9gao]1Q:^UrI#QE/53G21V*cuăU"QU/BVJsUmc\_/HNWV-Lu+MD7,.\t$$O,^94%qd7-;:PMUl)]BIn7m/N<;#?kUHCăU"^o)a0S'Z*yD,<hONR+DrOJ/KDd1;A]ukY==c=4T%GW1E,t;is(7)07wdg&9a:SlăU"-*pHNn.8(>GC.aMy-Jy-IbHVOc]8O_'Xu_^?A\S+'JX3WR^cvfBw];a5;skvuB]ăU"+Hj)AOTYi)SS0e*8,_nEYh*ImO?CbOls>E_wzol8Gw,^(_#N$T/Np$kEKGRdM=căU"h:vpYb:uHjn.b7m*:-_m9075It(7we(#gLpf[.aD.6vB+Rd?7iR8q3Jfi,5DE,aăU"WCXL$#rHZ%SKu#ZC><\Yl+sSKz96G6lxf,f/sqfTBEj:j1xm.%NI*78Fia]eWAUăU"e)SQ;_k*qcZh)/8Q4(;6N#X.=pI]OO.#X>l2y]K#lIN$3^<G5[*dMxt#a-n?V?EăU"\BF7h8I;4vf5kGG#FZJ81LcGEC:m*/&T^?lK6Y<[?G>;L.lJzP)2;k/is_&re9-ăU"w>:.6Cb497U.7q9LcxD_K7<'69?P,85>P:QWAI\ia.f>$31V/VR/VGEu1wBk.:răU"8S9Jr\8O\e6d%EJ(T\S7stonY8ir_S;/fuWHc1M,cW$9wYb<e]L2hL/fcPWy)AaăU"r-4V1*vysV,nk5z'O%&n&qh%5%ig/E<.M[knieom6'e=19lTcs^TZ#cSCj#B7S5ăU")P>=ZJiSY/XjX4%<7qJg'9luuVMefbA)hBG#.NV.q3WY=[nah9_/lQ$%s0&adh&ăU"n2YL$V#A$RwF#r)Z3:t8YU34a_U$J\qUE(T&6p?*,,',+5S%MdH%Ha)Sh??UJ3+ăU"*Fy%0$ieH<i+31saAro<d0h3d9hV+PV_u[&&J>.#rme^RRex%L&wF].5'BVoxnAăU"rB^wOo_PSJ95f^,cFi*PF(/md%p4Mbvq:DGi+f1Hvk\a#Sf_2ZjZS[1Gaa[CmNhăU"OQFY3iG$M:QZd3HSWdBO.(cZw-D.8Kd[0SphY:^U/>/[=A:uf'IvhO#ld>M5.>EăU"d=RhBm8IY3Aq$X)PVf8iJ1ZvP&&<+mouv;v_TG5;8.59^$e5\AVA==OCpP,urhmăU"27m#7Nar39Q9t6txH-8x4u%p()9%%%%-R%,,&aGV;Z*v0v%1%m<%%%1%%%%xpn%ăU"xqtu%jSln1x[k.7yxP;')XfS2aaJ(D91xADBB>tni%/Y2r_S0%I6v'+].z'(]oBăU"5($/jn+E;2k%F&9Q\Dee:3S%*$ESae3_?wxn3N):eRA_Roc.??2ox.QprSNvDEpăU"6R0]>*Dp?e,pcAJ_nHV4TgdEut*7Y)*'7:j0w?5Coz*OpJ61&tJVXtsaLWixNriăEND SUBăSUB V7ăU"l..ws_d4T65-k9Vkin)ZIpTpxQ>3ff^spbwmzkvxo8a-xir1MAm0#gkQw)r5T=(ăU"Ymj^M7K<NVYd>9986bLP2?b7K20AQ?RquQGxBn2n)>O06NIj9S_AlN<CC(jrCw.ăU"4C[wbr'7rkC0KB+z>rv-N't:jl=EZ-x_RJsaDxM47TkVODS%BLN9?cZ/lc76K/VăU"4bwpj4lYBmI$(;$u\UoWIkBgz#fxL^LV0yx)PjvEPIYbDH)TZjp$cBKxu)u?am(ăU"o-gglYQu:D529d3&*e1SxK&cPxTWgi(/#GpO3k^y^Y?_dYNC2lccCuxv^'A6c^DăU"TVx9o>[et$elD#D%t\lJd4t$x(tmSI#KLgz_euzcHsm#7>IgAb4<tbToCsvY2H?ăU"8,Ml-%m#i/X'uo1]9b$a%mAN&hbVnmXpt<.C0qc<Zm1zYwvigx*-iXeluceisJEăU",:MfWw0FwZxgZSGyVH#>jvZ40w,^mt(mg*I[Z=W<>YY]K/85I=oPS;D-Me<>GlcăU"Tk.dv4>a(KB[j$'4\Z?PLn[4rxtZPjLlreEdsAs0=+P38JKB9lH&vTSR*_h2yH\ăU"p4m-,:GYHBr^&'ppaLsZRJ6jMYNiUsCE'0R[V?&x5\?1OhI45R+X7V=o0Mu6mo6ăU"8D$gu)r_,sUq22Epqycb$GZtl',b;liHX-MlRRSh+sd;X1oSv]bCS+qas,xmHo,ăU"\-rbLnTm7DCX/R]>,RM+3DO_:3XrjR#lZ_ZtBE+Mw2(i&\L4Y0W2XqEF,s8#7wNăU"DlVn-6lnrO^vFEi8?]Hi'^3uT?R.6ckKDDJ2Q*#\Mvh%#z>sMj*TJ/Yca^q=?v&ăU"#Qmt>FE6LTNH<cW*grHqx-'Tj>LG=\igQK9c6\F\]r1wll5QsA&/;?3I4Un8CPwăU"-sxfRSI\3Ny&CYm%JfHChXVkZ_?>:Kr<vr)/L=Q#l52Dnnd%4=;W;%hp]ts[$4văU"1lhLz/:cw_YHBn?J6qX*9[o,,PBJ0f#$T_Iq5wcG6\FFCcoZPR]#Yc<Xo1UT'_/ăU"F;eBIp]oO+<62^.IWExf#bZVLVt1+V:6[LbVqexnP&0Hdm\qkB7,cwe07&4kVP5ăU"'w<MYzEG4]o.sb:p.7w$^HE6oBbFV-\uaEb[V8a6hhFQsT^*5mElG5fX$)(8BnYăU"oK=+e,tsh+2p7==4Ii$2Y.S*NR81J+oO7LKE42b+3Z#FHm(/JQ4ZhV*y)MNw-]#ăU"'NV_Y1KFMxf>gX8QU*lC7Idtf'Xg8ExEF+[[AO5)=>QCRLFDOxA2H7FP&,F?++WăU"%K)[sZg_)=_o8S*uD._,mx+HvN0zi]Z=LhZI=\TZ+';'w%hhJ7uN2#k=wolS;C;ăU"N7:0H)6ab;Kr;W*];e<.'7jk0=$Vj:wGQ.H%4mD.oXZd,d7<Ho>WW]'nGEWV8fjăU"i/:B8h=Yz/$jp&m5YR6r/vrduDU^8kKvALqv,GKViYZqMpq1lBMZGZk-q'WlWa_ăU"$>vG%L&6KvC$M'9%;W5*ESEzmi\RDW8Q8KD4NRAHa*=Hd]8/v9YQ72#Prrl#C&^ăU"C;88A]di7#y_5Ttx%/Z*WGspk(>0X](5;u4p(dBdSC#?:g=Y?<J6cPJ1dxMp8(^ăU"EV.k'tW_i50m[N,(FU9\g6jBP9p+_uqOo$,ql#;dfdbN]nZm'>)(C-QuQJ,$V9:ăU"x23pR$=pW:W+He(^SJfLS&j0Y+2RfihZq*eXD^;+ns?+r_+M%X?)+k9GsAxq<lXăU"<4x#[aDQt<qTH#)5h.g7&NQsH.h8\S0s<Wo-TwkYL\nN>\73ola\0tb*elpB+hjăU"KnbEk*lo_b,Mo046+lj0iR?]B((.xq+NDl3zX.qmI4q[:tqLNjKK0\UgHV<j#P/ăU":ReeiR*/^cEduJA;+G3b'VZ/e]Q?2b[P:*?\:5_+5#%:9keXi,2awB1<Qq'#0(KăU")4?;n]tzlNke6^^pZ'_6;Jq<?4Y#P?<>tiu3:YCHDSeS'ALFkEn^csnEBSCRW4YăU"2#$9-:?AHR;BFaWc_MuuhnN]3'#'07R<$,:<jM08Aa5*KfFO$rDxsxOnZJx]Fd,ăU"<)]sYITRFgGA5m\Y4DD%8-G4K$9*v>bCB9';Oo2s5k<3cR..o0_=(rPri\facepăU",td7)>hF)U-p]NK=/v75b&]Le_RHT_7E&#kt34KS:hk;y<Br/k$-]LZtPK6K(,/ăU"F<T*4l#I(bUCpat9Y:D^j'R/5d]<V8<P+5;)).#G.wY2'WLjD=F]9QY;>AH'?\-ăU"gclNdKKXX1V6+J6^PA,on??tt9HbOcIG$*6O</**IANR_j72X'0_pDiLE4C#J]0ăU"I.HvP,QeVDnS0f7Ur+p\00)Y]#dtI&\uE\GvliDA%7M&f^6:EO#ld\,SP&e0vtkăU"OxvPZ\8fLkT60o1ff7xrfo&HeNKv.ILbL0lE\Gb#Lw#M?s5gP'%=WOr>+-;:Tc-ăU"<]9:ltq.L+kYhqH;ALVTd\$Jj;o1h<PdLQYW5RZjCN#*#qr)p,,nPL*,^-t=+?LăU"tfcN[A'hX5#h,PL2>H$UVLG9jpR&2P*607*#T*33BJDT4DhaDTb$^\<hgJF?CFUăU"TOW;DK^xc_qQ(^tgTB[m?tWm$=Tn*BlPs&p[UL2do/[B-G^.4/:#*pD,JP74aD;ăU"o>duOZ8CUhJ5\X>*PjOlj88-HdNB29$k:E[\m94,7h<M5kuQw\GlgLiefiPK3JNăU"rF2amFMRA:nX&k<4+^gh0MB7iEKzacO+8:$EmOxsB>*DnSDFC7UbrtagBdU$lcsăU"d6-v$RDu)XU_0Xu2DYf14+GVG(E,1oMfUT&XLFn<a<m[=<[4<CYsEN_PY]Gw6]uăU"g\xW\l.26tE^$NH=QYI61bkgSfYf25CZ's-+q3H)pn0cw+L'SN<H4R(XE61ct%kăU"q1LxUWXOcN*160W4J[rs5zR7l.%u99/q/\y8T?<=m&to%Hgf6+h36U*KnsJTsT8ăU"Ts7vttqG;\dGFwddq/zKsbl[AM&%$*JRhW'7]EBFlSJ6tu+aHEob_Xgt(jdLB]]ăU"[mnlt6>P/d;<uDRWLG+Ks4-5?YXXfmBr&cLhl9V/at'5^I_JOV*s&'/kW/3:bNDăU"?fl#QFOV(U?KR:dj\v9CYopiAGjruv8l0uR#sNUW'jc-.V47;qM.)fUvnJ%%ERyăU"Nv;eRxC_K^tKlR\U^<06P&,WOjHYoWogTfm4N9Oiw$P2#%ES1zNMeuV;(Y/x%_TăU"q>0il29\1MPpBfNkdXB)lb\rPso/5iUg$6a]X<v1t4:F3l8lmsi8GxDqWPG;R5iăU"sa#.Ll/9,GAL+MLtNdWoyahd\v[q-I\^=bH,2=bBb,_f=R7EIgg3,nr$tqVTTwFăU"CvR*q%/sg9nu+Dk%\yFG?.'Q3%hdoTPM5Eh?Dtmlslj07T]eOXO+nGI*=0Kf&bLăU"f?Xn&*LxrNJ$H:J+a,/<-Vy[ZSGdQ)jI1A'6#GIuT7Pr9>fUFwEY.sJy2O[[]&8ăU"c5E#dRW.txwThrt1x]Ib^8hYy\u:)*XC'T07]8E+J'YA=1:a0C%HDpxwdLX.HFiăU"pY70htl/9GqQ\>fuAN8#'4xUQsxs0pmx&(bPKoEX*-k,;Tu&RQ6A$ElT;I_6:$7ăU"dn;_LT8unjB?ta1U:ZOHsS#\GXns7XqT6h$0vt)NXVlv=kmYiR>h;gnG4S>F/_<ăU"T06?+h;xkVoSF#,no)as#66)2LH)MXU0M^uGO0BD](IN$Le;[7rPj\M-i.Ei.8EăU"$eY_.ZF:CogdmH9TXMZp65WUa/QXCa:\*sQV?3)R[_G=#Xe-BpB8Q_W.Gsvl11AăU"[?1kvw\0#AGru_x$Oli?Y0dV9+N.>Xgo.NS6[USzuVoqpa(t&_\$[B8Is)eCfiCăU"Nhd=x-P5rpiu^IYaNc'LEXGR5c+XY.2po3j'*zb,=xfTM'_V]*n]aQa;K$hAOa>ăU"N8lYI#1#TqMc?64SM*_+pT$%pnm5^-4=[t*aT<XGRL0o2SZJ'.gr%3.DG7;=ff[ăU"cuo+%*W+Lu,rFKcW$hNK&LYkf$'puZRD\^D4FLw>85Ul*SQ80gq9mmu8cAL&E[CăU"1ZFZ^XsKYnnO$iCrs3kZ]t2W<L4cQ*61:>;/*N1>.lKL*Y6gf<6Sl75_\UIaKU;ăU"k18aR]*x_f&<V^f)KH7WZf?W*9-hK&?re1(h*gh/YQPU/3sm6Cu4r[t\>o#Yp0jăU"r>dSsb4JRHNJ_#f7eD;x^mz*xY:r9lk=?iE0hq[yZ,]:TIF?D-&YvX&cOO.1CktăU"P\*F#;RG<5];UJ+2:uEu%1)3h>60%.pF05V$*2/GUN/7$P<Qv#liR4gNj,ue2NIăU"T:.w9h-Xs#]Y-i0R%bkt#);WXHEYvVU5Fe#)I-&q<$/($g&//^FJ%(uMtT0LV1PăU"4M1wYg9wDlx(BS+qu0Tpa[Oej%a&XoeRH52[EL'tWuvejjJ&:*4dr.VG=1oMZ^;ăU"a_nB-Z2h)M:%TTF2cK[aEcD^wkI=9Gl5.TbB_L6vO;R]8iCU2%+njdQmTn)1Aj&ăU"SW:[LGLr[li2o)vjY8waa:wPiNJXi()n=3)daAckIqa+<[gcp&dJ:NN;3G*?ar\ăU"cL<5(%YVLgo:6&SpoLf<h5)d2.jAUVPyQ[[c(pp2&e:1p9Qh7e?SZ;B\j[%4Xj=ăU"-9DULr)sU7nJp6.TG)8If[im43f$$^JlB#]Mi_*Y*'F-AyA7fPY4ZDE60V3QV*făU"l9o_GOLs%+4^cnMQ#q(lpqI[09.Yj:?VSdIrp*z>DF)_RuNiIC&5r[KseKiP?o1ăU"#&Gh=fWZ(rRX^:'hfi<cY/4nTJ2#lr#t&q&0\+4<K7Gd)x(6i5jeQX<%j?O^-GkăU")6a:eoN#B_U1SkdrxCovD_'ZxgiK2i%uVqcu$Do^3eYe*V4l1)%>Lb6NWn6<*7măU"hQ5vrl>'$rLRI*,Gx')6sC#xf_#fs'69kGlE=j;3,x;I6T\<hyAa%Cp7?C.G7u3ăU"*qQTdE\dgX6asSXxrL__9<h]BI1?Cq?k09#9-/V]BsH%#Axf.VqNlSGL?JuiYtRăU"jE2ZS5tNM'cHH\qW&mGhM4wU,uOuUZvW7)6oMf.C]SNgIk=?(2SJhsREP]jQ%AgăU"Kj3a5?)9>jgoKdX]H;BK]qwPicRLX*87mN6L^yT8C[4Ir6Z/e^]iH-$AIW&(/CxăU"&hFZtW^7lp8-1aXq39jk-;sRxcMly?G398J$D=WeCM$n5^8SOVb6\3JknX;.HohăU"XB')QiL=(t:.L-/B;5uwe_$G9h\FOwV(&u^D==AY^&AmZf\Ui6O*[Ej.%4iuO)EăU"Na5K0'^lu#kbpyVCPl-$+9z.23_q&$*k&t]:[2mEpo>GhuyY\,+?d6B:Dmd%ZZEăU"YX;RN>jJcUNpmP/VR/>1wR7[37FqKOh5SouNE*7s$my;qUTC_fYM)B_0&BiE'*oăU"RzI/dkNPW\T0y_ISWlsywO)M_Wk([K?pN(w1JkM#D/:\,)+M*>(3#6$ISigB>q-ăU"*&Jma(UPDcuPkwEHc,0i#]7_6S/GYX)VTgF1Lc>/$CakpXiF[nA'R8-5ZuCX<Y(ăU"$u&c:\rc;8y05q^?'3YxwFl;5X,3(-hiLf6?Q=YFthArvZ#dU+H%(.pa/M0/,,\ăU"l%TQ+9wCLK'lI1=O5HM:6_#f+rG73N]Vj55y':..V0e==&H;H.;ya*u_0=)4V0tăU"'XWFRpn(>W9Lp5_58Z-e,'4[\\N0yV&rI/hlgR9kC&>Q=g+E\O?Yj)Y-$WuFN,JăU"O7*.0kN,%a84PXEKl(B9;O9I:Qr9WxFcT:vD59J%b8$Q:]1%h=++UXwM-<dYS=IăU"I1[3-1q,r^UZV??Y[l/1l,K*07M&H1##.8QL6x$1H/q1c=/fgLkW6vMicvHACkwăU"fD#U8KbIB.xxj)8#G<v_CuX&iF$u+iceWWt,8k[K#WqEKluA?p\SNCz9\c1StU%ăU"76FX$g]X?6tis=kmnjsNbxPWp.-/Y/[*kmJ#7Rpd'L31,D.B)c8,)u?OMA['fv?ăU"HDC[<#m#dm5#?c'G]?7H'7W*k)KicV]%p^PL$ivx#3'xvkL)Yp,9D;MFLG^aZd_ăU"lA4hP8xFmDQ^]XpFnHWrQh>+JL=F,25^aN[;6u\gr'W/3,uGJjR?2N:v#sU7%,?ăU"X>7o-#ii)>(\8H/C#_6N(,;<)+-=t?3NGA%N8J=rhu'E?(q/7?m(#jklOkWsO4&ăU"1ws)iY'=FUaW_T6pA#uw.4Fs9+GR>9Y(>FPcB(Pj'6n7(5OtfbDxM-X*#tJ6E5LăU"qUSz(ZHVV7Y_/8*0um+qG8qr[;*YR[K\g?.ia\yL^qt5o*ve\W-WvG(6f_gU_)kăU"9V<lbeJv57ri,a8eJ02XHb97YXmt.CHH<DH1+)t&T5BQyspy2,<&e7o-+SN#F.găU"W+oR5k*yR4MH&b?'B1Y*c#_0;'tsp6x+A)OqJy.=zG4p'j;Ts^.6+cis\)gqM6<ăU"Iw5%wPb%BUZMQ;v%$Ao=7r[)e7aFcKDadWq_D&2NF2TVr=:x+UdI'&c;c$v,WHOăU"k1^WzeC'#nwBY1(YS(e]ai[[eSFX'd^xV)xtgO?x#%1L8SvErLT^[,We*,y5^<KăU"1T=CX5Y6NF6i/cXim06/_IYyO1lTb'9&y[p?&I<tF-Aq9twKJ[VW?vW%yWyl?M0ăU"N5(SMT3(9[LB?guVAlJQVDcK33sYZhVL4X^<+z[V0Kc'V_d7JN+(i[peII,]^hIăU"X/XR\*rpdW)pJU3x%)N9ZyM7bl?g<^I<UHYrF1qM<rg5y9Am4VEZz>yjp4qGH&ZăU"5a;Uns=?f_eq[*pJbZMp<3-GzAmV:Z$Gk=JKMir<OD\8-6,G>5ge--iI=4EhSc;ăU"[CdVI0]L6OFOj'5Lt2sHTr(x?1c4'TYcHQFF[:;P%'X[$b3m6(_/$mbYSKOV-eMăU"r=>6%=I,a+D07[':;Wz$eVp$me.9)mM/XxB)RGyJ#Div'*k8=-;'RWErP_O>aU:ăU"NgU:_?,L<Ni/MIwLt=cpk^;vqSpDX2]kI6P>d*CiU#g5mtLuwokGxB1thIG>bE.ăU"W-P(9<tdCy_[YFe2K.5.A]MC-,j+,mEi95/rp7H:TY)nD.YZ,VMf,XsY:-%C(?'ăU"B57aCqQa^88j*#6V*ccS)<Z4dp2G3IZw,&tgNR?53(^n4=og??\BBmq[Wq0K_.hăU"%AmtbVDL$zM9KW\S'Zh^*e99lKAMg/Qs[/OWsX^\%gU_CTU.(>9)D<XAwI0F\XDăU"?ytNn<J%+-em:miuIP$KR\/=[Gfa(N?>:P1oz6Q\yLupI=4rI%a=GZikWjLo4lZăU"U[aqBKfil*?8;CS?',5tJ3B36j08YFF?-]dGft3M(&gh_-2_-m]?b^faAz+K&H1ăU"kKXS%>aC#+p1fS2=UnI_Fe^SeVu:W4P3nl8PuBSgG<rC0r;O7-d:Mg2._4&#MSOăU"bMI=;r0u/]$^Vk0sTnk-J49=l3NH/*Mxof\BjEJUBq>H[IASy/[-6JYhLGF7%KHăU"o#aC3O/U5PA3^MkUO=S_Zat.7+=Ap8HhJh8$U0rY)Fo'*k,1SmI]p8%Ib+H\a)TăU"jz;85;At%L*;_G<[>x_>NO5M'&9d>JmNqoeA<-:2SCMaK8K%[U6j4l7Ir_K'lN?ăU"RLc7[FsMsHN$)Pf$,]j9-S3;l#k2xC$)&[]Tt>d($c,_jNer**MSea=4.1t5>j\ăU"OaNOcGmS0]eaEmAlL,fFeML2H)\?f(dj,eA\)G[%4]?kRA11)d.Ej5fQh3FTH/GăU"TRE1K,FtVp[P[B;HDtzxl9)Lr>70MqCi1RJ$i',ASNhGI;HJ&TN7C7[f#R6:es'ăU"y+#ho3.,SC2&0%I9%u(tn5Bo#zrWg8dXVEQ9+0BQxY%Cw7Kh2ogMV/owPLqY=.CăU"3i_V[%TI:)iB]wEE/%/s>A.>B%wV:#\T%ETC20LbU)W5Z^ZV>Q/GUDFXcW6%7EoăU"Ofh4&^(?bajn:7q=s-+(S53S[Y83&W3$9Z=/-'5pMS'Q92SGeps8u#W-&nfsLcCăU"4=:>/6t%-(7b,V=Hoh2RSYY^o'w)68BR74#0V:R+&rtDss\=X+n[oc3,?FsAUsLăU"UtxC#XC4OW9W+nc%-bR:Ox/Y0S[u(7qLG17.XlUTTHc]wJpE4N#y*8-\[EDibs^ăU"J?iMe6)m5GTUj,k[cM1\5<?A=vPFxC&^s&o0edMz])3[(Bv7Edv;d;s3?r\OpLqăU"%(qD*&&zHMWz+i$e*.b%5Mhl7S\_bbZq*kCg2B8MO6)Ab;GeAAs44$30p#Cp]RCăU"ZQkUABjAccdA>h)0eL_3vNZ>M;e^3nv&=pB4O8*-yOIN;/^Mcc.1iXKoSMx68+GăU"(b>uiMS++dNFv_fNLFI5%IH#)mhc6.B[Y=9A(AUG[O(+FddcY.Q'drGY#Xo:-%8ăU"('iPZ%Hu<IdtWYv#AiCp0RQ7%lnG/.#k([Gl?50+8YA$fUo':is3>Sn[[Ed9XH&ăU"cPKnD.*3Vi\CQtPZHR]fAKY:JU1?1CgP7zNZDFUE?YAz?\R3sBo?a%Nx((R.0o?ăU"wx^V_,oZZmQ*kl$k)WNoddhAmI?JhS%:/y+mNYMWpC&ludB.t4zCm=Ri58WRnvRăU"5*YnL1;GHLgG-v10>Xw[f1/.'>+IYL(Krv=at;N'u]kw)Y9b;Hxm8Z'SGcSqN%SăU"/s+]BMBs.&KzncD=mEX&mR><&f0M6k0R-s)4x[$BjEjgC..rg7*&rb3C40=SskwăU"M35I<fW#Z%Jy6$buE&_i]>k*a4hbF3ag=0=d/5R/VR3X>O3Y8&:sLx$%V)tK=DjăU"IfU;;T7uId4eaQM)u>hnDpjXl6<pRt$/5=[00'ZXACCC;iF/%gAB5;=UUaG6n/jăU":MVu#G+Yi3%2ipAZU-TI\%\0Cf1m15/qrOLjX-.9G7l5Xldo*mdT3SgE<,X-Ou3ăU"s_sYLi&C3NVWR8([8x*v;g)8XG$gG'eVV.A)2\5RK-vKaTNH>C[T#oIREckYi0făU"bm9ja%s.?NDTOT<Th\IBw$j94^3/N_8t*(Ora5%FSFfeSA*a]V4duHM*^60.TkPăU"+%J5/Kr1HH+c949FhbAI+>YNV]%K)8rn*o.?&JZ<T'j-Q_A>PH*9y)rGDG+'NBYăU"h;7IY]f^QT=\VDcvxZN7w50t=^J/q%>(]ix+XPAx=IAh,K?HUK6IQh^kc=u&m8WăU".i)/m=dX0A#$Y'RFO$W1>4=J0o'p__gn/eV\\0PcvAcx[l#&DXv(>PDAU6eb6APăU"a'..1;'i3i/jt&HiA#h/mdRb?e<%ik5B*kWF2_Zu^9f1wN7HF_2:N&%]m8/eF,văU".RwqrlXiJBPOoliqM)h/H$upJ*'8AR*:$Jy9;t5IVT+?Y?>BhZE;:q6$Bu*2E(DăU"LS$qv(M&^+S>h)%_d4G)O\O?*eSk*SZi)XP?C^\a2_Ep[K29<S0\EG_YwTZ%HL3ăU"0nKFo>cL9MGGC/0Oy<Ut<9*<+Xi*2OVF3Iv3Bi(/O5U/GF-ZWiWVtyO8l';uyJMăU"/rb0FyZGz6jfep%<cdcqjn8aM;*PX[<&N/O/L'#A[I;.:qq]vnVOVMfKkQw^E2#ăU"YWF>VNk-NWc]^UYG,R[uVobp,:js-+]$+yh&MfNjH.S,=$nJrL:0<x$;$7CR,>^ăU"df*O5u\r5o53g$os(xQE)-Z9IY0r'8]5Ui?2\lGkaIe^DL<3Fe:7ZbQMF5-l8R_ăU"]8:Cq6\9#Z5uSW.;tvf&LY&==F2nE879)A*JxK-c;fvvWjgtJTf8S)uZ]x^#V0găU"HOlDrA;K9wYVr&8q6#(^^*P4,-^-%07;'AFz,[Oksj#6Ed=90=+E2%+,<F.[2U5ăU"5r^p6cT]D]+e[67CB$Ni\/'CfAJ's%/+iMl\%iiMJVBeK/l6,5M7HT1ZSS4e;6uăU"JDY'#'3)gt%*j,2T(YD8'DGCr%uKfs/L^NmPuPKw[XJp<M3vCL]GbG=Ub\?^q4KăU"nR0k>%YK?_v*K:cmp'=Kl^p1p=;n('N3S%lnJvS17Yxm;58I_^8$-lnh4u\#+stăU".4Td*4,)gYgNzj>O,RZto.F,dYVHPvO<]Lm%8v=yqlm::XtT[g+[6&](oguo1ASăU"47$7o+iuWkk7hjnR:j/$.5*0'uA2Zr&fI]Y([[eREYqKNj$MTyL]NpE3(pH_S?ZăU"a79gK7)HiYFq']bq9+(]Q7_?/j+G2:PBW)[a&2iu9E;mS=;]/+m^kNUDU4H^--=ăU"WHslP&<G_t[skf8Ity>kj23]_h90nUU'ADb-b;ZnsIrx1^,QCr#BYZB*B+a?%u)ăU"n9YJ'QNfkQ>4JG<B1H^QYC:nGOdUbrd48b?/n3ur>=/3i%qcf2W%3D5VYP+(o3GăU"pEa-i*iC0[T?$TpVL.,s[X7ZIap6/\'\&vICDW46NadAT'8(Xr'BAM$?ut2NQ+0ăU"nNWfB.y%nu^Je4endcPD%o,0=EHUf=?1qjq6v-?/2BZRp.N)MP(C0LP]vF-i/OHăU"qqqiCf.3NU/aUe<cD8[T^l_<QX*?4fOm7aGSuo.G5\M,1)MM=A0NV17RT(UoL$XăU"Ms;l\u,]%Tc+,><_QFtK/%d9qHArmT4(>g_;#WN*jhTLBbrO6r*uBLWtXQtAJ5yăU"mgo,Mu.[Q6?x/.en=5&=pAKmPVY^L2FEHO__L#=[nhaJoRIHgds3j.Eq;G([t9aăU"LQjhfYlke$*,<lh=QOWNd*[853WTq+=;;Wn/Xk#8aTH)k^>)f$6;e]<]gSora$hăU"[DVfe?aB?gAgd5<z%rNT(xg$zF:KJ<B-Th%.<<BS5/9s.TAp=U^^aurEeN+/xu_ăU"e2;9)JpXLr4rYZSF*/A.+u7%,SJY_IheZ2ZArib4errQaFN?c0;aqnZ6f?\kHneăU"ecW9/G8D[F*,H^rO=u)8mo3.bnuGLEpuk'&xUK*wWX,:a)[_hlD54a#9Z.<?($5ăU"cEf,RoHkYZniJa,W3:<MMD]=U8]9.i&BhAx6ytgwhqNs;UDLiwcb6N8<4LPIJNGăU"J1$lxF\MW8<VArF1Vs<ZQf4EFuhFFJGDLt8KSGW^t$caU+#sGSblG'o(PyJ-&QAăU"/Zt<FjkuWCBw>pfO*81[\Th-qQgFpT'#(1Ch*Il.RIso#kP[tjq=h)u-G0sn:G3ăU"kHYC?X^_6>i7D-)qXzhd)v4:XZWqOMu(kbtB4f6Z/C]#%C1Fs%*bC]DrqyU5ansăU"vV[FY6g<,+88A/Wbu$;dR=25f#'lP8E1cj%h0RM^=eI&SQ)thxwp\^j_iX,qV9tăU"vdkB>U(;:UG9imyf0LS;cs?%33noMc9myl^Pn8R$#2crA8h%]xOi[8&.>mE(f=+ăU"Vw+:EL>#Squ3NJ1/)+GXqBeUN<7NZHVV,qWB$i:+R_8nt(nPdE2Q[eMZnWl.G<xăU"K9u91f6&._sCFx?-sKkCuM#V1gO\Av\_s,Ceq=eaeqN9jebhbrLiMIGzQ8,c?8MăU"pw1SEO[/7*vAAJclveR6d[ydI39snOVfnLR^HtrTFNa/[z'lgEmrMf7'O\f.Ki[ăU"(9xWYBmW*5%0(4V\Ec'*-/-='iUWl_S\DqD6mW>'-o[2QfV&NG(,0C9AQ15?JdlăU")1+O,lrZ/uHrQ[mi>>IHQoOa7.QS'Td4^)nbXd5rf,wB?7V70k^=u_SH,a^0q\tăU"0K2o.(zo3rMz.A/^vNxWoM\7tNuiEmjI?&Yl-d,:[1;uw7vIY-,p+)81(gFI>G[ăU"d^7^TG$^aZ8:S1vsldS9eDF,bgHX%&A^EZzOVZ8.[ZopbuqfA>-DS[pt6SC;-usăU"5v[3/O^Mh&C+(gRPkuI8Uy.HnSN3H*DJSL-$n<H6Nw0EelNBCIvym5So$^#qCjMăU"E>f*=XY?FfBU4MqL^\g,ucliaf(e38NHf_mt+&mIU.#2f,g=dXqRA8ONYuFDjqMăU"MwrCJigAs\YJmAA^OFF#QYTo<<.FIjXo=Vty'DN#Z>el-=iXZ70q%&R[pGjb>X*ăU"?pDQ[U(lf%$sDP>)c*Rv>(5FWZZw+V(^ZWWIz_rfMvfr8MIROeEAYh7Joy60,</ăU"qxa4X$UOf%7Wr2JbtiG%z<EG#JVZsQUo<w2]3#g#9oM<smc5abl45jIH]+L$fkMăU"5kCg3>qJD-I&\]0nsuRVO-#Ool)55s\cs8i4D_am5at$u#$,M\0uJ%F[k(gHsbeăU"^JpIr1O\YxidgZ-xf$4Gl4dx5F[9zd?rLvbnaz-OQ\f;<9?Zach<jc08gQF]$DbăU"6GfKwarBhjD$%OI0a.(UaE,Qw-[T5I=4e)nX6aZVTXnZiLZkK>D<<iY/59+(97(ăU"W&X_UE\838l--k(b)qco>r]XdRQX^4sT6,kZo$<<*C6P)TG/3<[_U4>LM+0P;>iăU")UBLIzbtfpOZ5k0Mdb.$T'$iul-4O6PcuAM</pOUF'KY9')>qLcwtMWW#b*/elrăU"#Rl$g<y\B+*[_saJc'Wg435^4j.\K2-QIo:yp08Z,]iqhnU*Hcmh?3?b^22boAFăU"M)B8JqF_6w%DPt1Nuj-bXTHB<IU#z(n6X8LCmmxr6+A1i)MP$K6_HOW16/C<>dwăU"BYnrkK_V=Rd5#AJUa&(PS=EFhi;06?M^x*bzo:=CVKYAc>]N8m:XQk:qDRT4D.0ăU"OHIAMYC'&W;:SYI64XoDR.kiG2yP7Tq^lLnQLwP?.0d=[)Jcf&VkWGu7J(nP5)9ăU"fZNWW[N^[rJeu60<sN0Y6kBsRL6F?j/7(vR>]IW3G6B-1oQV=Q7_OZ>StqHnhuVăU"Pdhn%yZ*q:s5rv9W/#53iuteuvm2auPruQuWK3M4JbV8<M$BPr(K6+UXjUKU:ylăU",j5#Eq(u=ycXQ72s+#igz2VeJ#$,F4%lu+=omiDQ_GO5:S8/;LsT0&n2HOo-i4,ăU"(gSt1Tp7?,'8SpODV3r>F,p=HipWR3dP$K9=4#G,kB?#HV8&D(qy6c5j+\]D(PhăEND SUBăSUB V8ăU"_)6*+ds<Lg4rqhh3%/I%d?qZ\WqB)KlXnqarRaMG#2rRyQclNKDHprRhXvsktCTăU"QVRG5TX8k:'O%G9(,;+Y>$knAGxi9yNPnxR<K28dO,:kKRh2CfG5O1;BspLj\(<ăU"8e6ZkDLaX+4n[Z,;q^CLqGHce1w+G'$U,&%4sO4%[_IhE1IMD$EM>tMNLDM&zNxăU"M79#sF5WfOo1>+)GCBgx#LtCC^Pox<K5B[fT;68cKZwudq9l^qKD2Av>/If#%4BăU"aZ066f6Q[;(,<Z<#e\u28d:*uQXWtEY'N>#)8,<[aE6;ib_/q/%)KVbTL2A1Ts)ăU"?kL#^U2aIVMZxdldOxX*15a%==k1^18e-V'#2jGPGcT?dZg^JNVM#N1QN:v'VvBăU"Lz^KJeKm4JK2UU*8iCH;_7,EVJ;[kkbuWvvvb5eFuSYLUn\(*h1zpo^t+%fR39_ăU"&+:vkZ;Ov8yQJOu(vKP4b89hEZceepY'Kf_U06EPDI,?%nW=2lCd\bpVh%b,vWSăU"a.>8xVl&t3N'K:R=q5H;Gj6iz9nIlZbi^#xQC-?UeT5*WGtW7]r+z0WLFF<&W],ăU"1k>=SMF7?J1s)85j>$]uxv+Eafr>oF]wu6RmBt$W,d4'lE-SWk_I76*L,zcGi&kăU"9\Kh;L&mxtYo<DjuxuDh.ZnE03v9R:%CY6rGQRsL+.VNqI<cb.h)aI[uI,XxH5FăU"X;Y9YV*SHN$H7udrCf\PIaQst[#rrDduZGi9UX5WlaYEw:zWh=>%-,tp586:^qkăU"E;t-^O2Uekc_M4BrhL8]:p47oRZj]Pco_ns3fXW/)XQq.n4x5A=n[[ED^Q]\V3GăU"qM)m2;Ym]udqV.f:tu,[13gs=y&-O<>M8=ubdpd-*OajA,-YnJD?_6slf=e/sWKăU"J$n3RnQqZ<=.xe/eqMIu+]r-b^PY18plmh'N,AuQuSVpT-w+]>FC_2ab,eDp;p+ăU"cYU1oMI6pH']_,\?V:Ll<X,,bpit2429L]+C0#MD4K=/,f.CU8R#B[v(+aKu+)QăU"?_p[n1wqZfh\Pt[/w[9;2+$],s-_[u%_C&5yn?f\l,Xi=>lW8uXWsR%vpr&2h&ZăU"-[=v.kRKb7ZZR3t]XBG?fU]X#JeOo[L][Xcmc<(*U>rxrqGuV#U]u<csbkS)1/CăU"bF:_10t=Z]4OrrFN,7KQ]#L$aI-Z4(fOO+P>*O$JJ8t+?M%)LygHV+%>CgBU9t[ăU"0c:bjp.\sEDX\$60)b$4+Q/bbg/_0qGn$X2NLz]TDCxsGs;:u55GDm,3]YG9I3iăU"gw-3,*RyMDd4QxaRT;qHMH6qBN?G,r900AJmk-QS0Q(qc&=yiDLQY.EPr;fBk6?ăU"d0q2-2SU+yl4h,.KO:>=>gZ3>%mT)UrLs+AFI8p])D\=0TEqS\Fd<v:V#&NSE:8ăU"4CAD_gF^%.4#tr5Fg/?)I9kfj.3<ZpD'?^L9Dm2QYWRD5z-4CjgNiS>S#>&SL&2ăU"rD<Je9sE->;SZW^H]vXRbTF\wwAP9QN^uY'Zm<^#Fk/3gGnSyGS8ZwVt6cJ2L^?ăU"uATqm1KerxDWZ$reUKo;Ll[qAB6s'[kpO*vaR\dr;-%QSc\Vt7H7r?_)B2rsGYrăU"RaEuFDpo)ljE/d%r7p,hE]CBn#VVWE5*euNeD4NQ?8eL;3n9;+eKg+0fD+QjHB/ăU"Y5)NFKDD+h=m[:][eulm6'WdeBccpbE)N>o[d=il0JnQfI1s//#xlW#.8lkF^HsăU":O>ghtM,xKw%0hO+?4t26T0/.$mtom:e*?EpF[>;;MuN-c:ZClae^&Jf0EGW3l_ăU"0#_p8mZ4<R$<40tj$8ugf'C4h0pxMt]QH4oH.:g=yqYTK1p1R0M(u]0Zu\t49O_ăU"?jGE^Z&zm=QPd#qFMXYAJDKCab2RL\i&.c&39kmoYhI/JLf6Dz:cH?dPfR.Ka4ZăU"A3c0nBGRWON\+Mj0Hpl-9V)5:U22p#pK.r[H#5Vm_&2E)n//UvJALY]u%gSej.săU"pjitff_);.n3BNuTn1d[*zAumIbmx=1T7kfi7#(L%x(-S?&Q(88;V-HKd$'n7=6ăU"%Bc#ekC/FK[I)&s^PX/tM)_tlJ:nP->ASAKXDJ-r)6k&LPzeu-YY\f1&?ZU+V&AăU"YR9lQMl43FXT%&sv#_][.I<eDLF,c9=,?V3A>>YKwX\T??Pd+xOJS#vQnn$[A,*ăU"*ZHYq,1F$_f47*ckh2'Z?G$p)a_'h4[4C-v2R_7c^;pCul>j(,mevY66&3[=3)PăU"(LOl(b4QW'sVW6_qc6=ri?lT_U$tFhrb<?nm4dBw-_/_fn4GBM?QEV+[uC%f1#8ăU"+XlQXlM-)SW[HXbtDD<&&mU\DlppMoPs$'A<t4yN&nZ8fY-C^#her3.IKmY:3mcăU"Y>(T5Q%8;1IBU^0>?9=kT^,%(]0/P2A;NZT\(%OfP/)BA2a5>L%lm21pqHk>bgvăU"kTV=2NW)xpl6eabaZ&Y&J-07$5;QjkU1Qd&NM[z1P3;TJW,ee#/,lo;qlc?GepPăU",P6W&8M*>]nO8$v,peM4qJc>vEY;?VcF<jrVf+g:>dVuvZkV/7Z=n4E+\7/]YF$ăU"I5DZZfS2u]BLD%-sn<Q5Q+HdJKPEr7Ne]vfT$(go/#P=u3Mx$2Kw\mL6'kt0Dh>ăU"lxlslNwYDf#oZ2?L_nu.6**$E2&ox+CaIjhy=Kb$W&J.)^G=(W1&J3WP2fn<%)EăU";DIxoeF>N#x4tKsBxos(bp0R(r<4SUa'N9Fz\K34wYSY;ps5iG-gfZ.qa8&o83jăU"c2Z;[lHVt6P[uT4o%cD]xO<,J=da)RBn4.0W<].9D_suASmBbdXM4>+7B<f^;F-ăU"#'\NKSy)R(PI5u']idmLG0*jwNhEH*BsYA)I+iTrDWw?8LVj\XMS0Z[qc>P>=,)ăU"0ssDm>F:/#98cqqtl]B=B+ZNHZ;2/5%u<jppOg712(QWM5VS1>/jAsM^R?Ok>l\ăU"k(.WngSN3AdA02kStt<2sb?kOhGqR5*supW3mYA$%P0)F_qJi[V'Q]<-6P->?gRăU"Uw5jeV6ijfv*Sf:o'grX*6k24UQvMAvliXW1C$\U\nc863QiBK7zG5HO^zfl-F)ăU"NF6+f[LExbaBvex2CR2=.P0$YD_Ofc7i8CYS]OR'$ni\Ppc'Px[F7nuRCS&%JuVăU"$01crD+U[HTj-u5lW8cX(,<1/8Ma54D=HMNEOQqT%*qDK'lE]H)apcqw'WU\,W%ăU"Ku]^q0Q$v$04aXGZSf1b5L*>?F\l+J6B%3vuR(X.^:Qw2FZ=-Y=2K[G09PFtR//ăU"0y'kgVQJTaW[Klk*\gM7ldW$GNTZ:m%EDXwxE4<PvTsVw1rEBhpJX[<fdQL$,I^ăU"^q(-&)0wEf+/nT7x0s]+k'=Hhyt%BCUefm+>L<?iY$/i[%]wh[+XlRn.rx&3DdWăU";[*q>2mJQsvJfT9upmu+_tL*Z[+a&_)/[/)WfNNDb;?f08k0,&)//Xe%jo5eE&#ăU"C:4*Bxl'fm>4&K6_A6_c<pL=<VQw+Y1Lc*ldn.9=a8(k>U,2mM#alM;---)5tU#ăU"Tb+l8Sws%wC9%60ayxK=*kW\,Nku(o#_Y>'1,JVL?*%XrpP0h^<'xs_YLrn>i;&ăU"bh^+5u0TG30Q[^[5:d5_]-FEQ-f&BvP4%xpE,<A_W.L1KCZ0t14,8H6&0I]zWLpăU"Dg'#1#peQG'P:.l]S3Sa\pOulf+l88MVU[5lkgIqyLtKJQW\z_(w6/\B]fZbE+%ăU"i[3sA8o8uoIg/J*LS4[)//Nt?>^<;+LUzp8IN^7^prc(WcuV63SnbnXVNVz-\chăU"^6]%,D1Qi.%(9fbE]pE^P7jAy61tel6[bd0R8mu%QT_^VG<ea6V]^0kIqC\I'\BăU"#8E1gZk<KpLcBTG?d[4d8l)gj+b%_HR;(rhK>CTN60(n]\WdI\O?BlWM;KNbewHăU"1(),[R=D#dcokM,dJYg/4&e;H=H?.iflI\.KJh%LHb<'u'jdxB6:$-)E8P^;oAuăU"1M(O9O7:87e\B6^URUG\J5k*l568h8Q8LM7tG1kOklWQsNJ[)'B&HX=YnJcY*/&ăU"Jcq<lhu/OPHQ_>u6nv*bs;6I(:GQ:]J[OL9WF.'5[ft()KN<%tf<$,i7+L^q_:zăU"5Lx6AY>\C+lJ#PQ5dVW<NjnX]f6JNtB5shSO9mO'+#o5/0n(jYgpUo2;*Jd\>[YăU"LEPPbE#GGY:uIHnihQlM+M)6#)lqJK_]e+,UP;HmW5zBkSj=23-B(L$a+M6ZJJAăU"eXiihy)%%gi2*;Br82G8MoA?((HY=[qMSWk6&Zl6>WgWJhp637BLRjp3#-c0b\FăU"lP#]q8^N0WeIfju(73-2Deu?%1x9sU.\I#(GszHiI1'fQD[w9/\_m=lJ>^hC,fGăU"\S_\ntg1qy*fH/?s1uE?)ecKXCU(]-L[WZjWO6*MLWRJSID:8Kg#=IGbXFRU5I1ăU"+R1nM8qK&+lGKs3U&LY\lwCtP\KXfd/U9JbwoQdU/kGqww#bt1&G52cMMx?>R[dăU"_>DJ59TES$Msma),lW8L5x6x9Q,[L9IR]iX(LRP$u[V4#SH46Vp#')H1M_q8)SQăU"s%qva'(t6TuD*(U[r2LU\D3n+M^Wt?=?]x68788'Rk%1*goEhcg=f'h)FL\IaUpăU"IajZ\#%&#.6U\vVN9MjpH^61.svHaXrA'k%BbTbk/Zut2nN&]#URgl9?p.+%/G[ăU"sJj-dPTSuf+>*2S\EAg[S)TUkaK[2\N0;'GW-x*8Xk8-;$s-V>fAu$(m0);C[OKăU"ehG56V:dV:YNhe9u:9pG47JNjM]38fVP)'u0P5n+><WqYcvn&KS^]EWudIpWjP(ăU"$3K8^7gs)ruA<Bl6KNxxZtw1Jg;[N0.y<'hFwLJkCa,U8\k3k8>HBE.W[MKw]eSăU";L.CBg%LG.AVqqO/1Qv5>8bA'rh.i+8wTuGKhg$3m8?bN;<L?)**3&#D6>d]KE*ăU"^=Nn1O+xAUsQJq;ca?YYqtcNkHxGR:ui:r-$S7>Oq$tE(nEjD<5N?4K#c9>I0F)ăU"69\(wf7BptI2/_&N-UA0g6:]Y-1WeuIY^XPo*x.Y\JnKv^Vq[NCXL$2Yj(b]HoQăU"AB5b(HTghW&z:irP*%g84db;pWArpm'4lB_of\DWqAxYxLxn-5*<2M4fZ7APbt4ăU"=CoH0rYv64un\<c:g\SifevlFd4:B+0X7^q#[OmH[^=e_sP:ILkQmgxWPIVC^blăU"+J<]=O5LRPbNWn'IXX)IQIQsN_2?S3JvR54^PKR\7'g.u6VZC2331DrD74&SM\uăU",lxDaPt0#&3x[+(2uvw1SV<8%yz*j7Y;^LtK5aDq(DO_f3ebcdQv7G>YTQbI88BăU"\ewZd:3]W\o&Sp3L$xtTM-AXDUcBtz(G?:47]D'';fHnl_.,TN]Wxg.0J1-M*OBăU"4qR0LUzwiR\XZ$ZGs5,^h)j8Xwe[><er4d4)rpux[*VRUrGqP\Cb'o-trucEoQ4ăU"$Yr,DF$d4S'u=7Gc-[r+U+PRk(kOFp%c=0'B<1+=JF7+,O^$$N1>Jd^-#8$b\;4ăU"rhIt>ykfuI*'VC>s-'X\T3JnoN6H?--\(_[,+HgS6M\2_vOjR_;]am$;f]c+h)kăU"WIkn1D-.D9)^0<'b6z]K:iqV-:5tPm$j0R(T)W]nvc21&rNc75[W7Ge)Xv=U_1YăU"L$8v^CK3((%Xz'U]AZf#*rSgxA.ddC(_jL]w/G:r#%is;2S4JsAe<gu:)_^B.oeăU"_wZ)bnjCeJrj'oJ5T:H]E18H8j*QdM;b3,\._qg-Ig[6LtIC*jMp?1rqyk9gv'WăU"MFhPAeZkP6inB>LSY7R[QCRBfr7G1plba(SS;5(85&-z?&z<orE?jO2#_[<CaA&ăU"ax5=QgMdCmJ=k*p*F)WJyiunu_nqOEC^*v;6U\,h\1OpRM%r$dJ\i_T:Gs'l&(ZăU"(0Yj=6d:Q5?2PIezA7W%kD3,&[iz2ST*EItCwW3Nhu9IBUnn--OQ<+iFeSk18RJăU"c]Yq3d<bKQ:MN7-Lut76MD?Lx9g(>^1cW5*iKA'8z)yAgET36MB6[r:C0jCCJrNăU"GC1[SuVj;GF#cZ/Hks)>>I]t,j,Rnfl8HgO7LpW,WqW_s_n,OK>EZNr\\3#2i[QăU"4&\T-&9,X]r?=b1-uCkTZU1\HbBIH3%oVfAC3Wb=ZI3aAgs.>(uBFTw'=X4d1$?ăU"rHT7UlgP)VP&Z\R^(Qi7LjRkMAkO/lBFfR3P%f2oH3fcvKnr):<,i0ayUmnS0ALăU"^u]L#9]a80pkbk'm#87XtvjUZo];W3EH)U.a<)<6SQ*L4#aN,%fkKIj0j)2.S%SăU"/Zg]9\_^Gd($2#PB4ZCDrevewdKk?[j^O6xjI\kLha&R00APUk,tGE3VG9.;V4qăU"M'Yd2WN8%6CGen[RBIC,%Df(VXq4bI$6hezD-Ug^At#(HArc=jR?DcI<C^q-HY]ăU"FIk$=Z(3l(].ZPDs/;BssjcO\^x5.+,mi,xU#bYM5,2^D(,i3gYTXrJXDjgLqH6ăU"VGK12;f3AdstMqk-^5B#Rc4\3PpT2(Hm6e3KZra_NSESU(T?J%)k#kH2Q#L%t1:ăU".fpU>KR./[m.w)o7ljgi^J,6ugXe<8+=mEBUeF,cUX%koCN)D3/svd62kuh>G.wăU"%B1h6QE0:z&0LVheRK%0)K*a'VP>mRYH9&,p9jqNHNWd&->GQ0]80,D25JQ;4TLăU"Z/3*tlVlML,*%BoPdq6v9[9].?5dA&TzTf=Eh+4eCRl-l&fPM9:vR6AF(Zb8lHWăU"Mnf>NQa2Ivq6cdj.D*^l[b7GqJ-kh.ku3EU.)HGF.0ZBk=H;8^_g1SEVa(GO(VGăU"lyI-,QBJB:twU,<_NZkaq'tHbvFEr.*c7VbwC+DCj8QR?+yF<e7QL09rz_/z_[uăU"QC%To,kMZ.RpR_1?3P-+=UPmkdqAqe#Tct\Rp_<W22krh.p-vP3ZRvkCP;0TR3/ăU"Rg3[S?E/#Dm9kae&R')/KfBHh-d5):FP%F1DhKC0ImffO=09;?,7T*l(,F8ekVrăU"O;Kco)DjsCwk#8\$F$C79=XB%I_\lfV.09Aj*bi(QR^szc2Ue_Nl#25(P\lAK5?ăU"+[f6H)DQn=Cs;FI*sFPPla<owc.O\]nXl#JKV\]>cxsfH+BtM8N-K;Km?xH_?31ăU"sw$/:W>epa&nU02H4k*dVdWd*%Z?K&V70Ri3K(;=Y>10sA(E6*-fOtg]ZSnaGJlăU"qhfX_J4kXL+=h0a-m;3[aYF&WE4i?_lrqhMxAKZmc40O^\>0:rd*8Rky_D$.i-3ăU"=/%ka\H,r_4%\CmzW1btD9DDjSh.)GxiVhR<3Gal+a50m5NWThW5[eSo_FSvXsLăU"in^7NfF2[F66Z:EQRAB.Vl2cBE0dhFb\bUE-9T_wG(Us1R#mq^#hk\R0DhH5SS;ăU"#33Xccb4emYQKm;9T+/XcBYQ2j\ui-DQ#ay_08a1_3$7PT7Nc7PbR18mNzN9e5:ăU"5_0l(<oR;_en[aKdXhJ&Ms-q$RT3c]&1R]pm=Bv+T>2vV=8PQi^=lQqXJl/R6o;ăU"[W/-eDiSsTb5d;<.TL6&W^yKh&D\QC\/W)[w3J*eST]B/^2G,?_&VTNuC<+q?i&ăU"CSu=luUuOw5GO5]oYAlh85w>&B[v-3D9+6nQ)Do_8&P+Ko:-dbN4dKM9Cf<zrfUăU"f%J-1ue23ed.SW0du+=:?/]+p^#u2?kR-)uw/SnyUCqm2#K:^]tzVL>#;e.RerzăU"HhRQZ5;%=/F*5ew%d4q_2dO*%=/'>U_5>t1cQdcbZ57lTY1$fq^iXpes?\rbm#(ăU"nFscoU/<0q>+caIe]4Qf1?]6_pV9/:d)C'knw<v_LD57r7v%z^)#$UbO?QOtS\uăU"w_s$uXWSl)-?+<J#rFX%mTT=/Cy7st.37paW?x=OB3_$VpDJ7r>%dKsnQ4YBgMkăU"OJcr)j*GXX#%[eM*HjX>*OT1PGt>Vd(<%YP2<QVVGJ'i=o'b>nS.KRfn?\tKP%tăU"k0:2yBZ;URyLRYJ6&6?NnRL\]ZCE[pXv[DvQPHmi*<#el)5a=+#m*h+Fj1>7x;tăU"'h.drcQ:JVh?x^Pc*9tIAFbf*pVPgtiD(x;fM31jW&-f9mbyQ7YoXUG3?)9gI+(ăU"$\.mWL-niaA[8YP?co)/U1tK[;&Bo#0M*'yX]Fo2IJ%-aD2&eVu>Gl]V((dhy/tăU"?^r.r[5(.Q\&ZeRREBLVDo6R0Ei9B\v2h:So7AEarTao)$8UUM$^BeP=h*_G&-_ăU"i]fM*faR9he=AMg0o^b:s_8O1lq^9v_8j45ddc5:N0M[w+m?':.B%uIF%D_M).2ăU".R,he)%I<?.mZ5f8j\Z,p2O8wR%)6I7C(9WI3y3[lmh#],+oJWL1VO#cl2I<briăU"]Nr^R0Nrbe7Fu+#M<[:1AbE8Qj5T/\mHCf0cAp/Tt2GrM1&V/)Ev3<Z.;lfl(VsăU"-hUACYwdvK'S6OWuD0t=a-QZcW4:*5D9l9<CH4*Ydu.6Msgc:B:Kr8GxsQ[iv6<ăU"W$WS=ORBM^+^\#9d5mjF1TIUg'JvF%Mkwg'XBd2,$Rv,(HfR*0fjk?$:5ouXIEwăU"/=9Et_spXBvoHL&.u615aE$O1=j=aAK]R[5g)QH?#0I<U&3tM^wdQpXSupgq><TăU"(Z,*TXyz8V[EIo;g>vfoFxQh8/I=T/fT.95L_<k>xI:RZ$i'7Z+(lO%5hC^^VKnăU"npP8,IOX4Ls6jZ\(<RZtD2o?c1b/\G#Rh7#3q90U]3)q6[JOOmkNjg(FBXar*0(ăU"K9tubV9RH%rX<4L^foYNb^P6H0eH%R6TQ\Kp6NF]EC$/RNM)'dJ6lTF&,C6j'CDăU"Mk>jY8x2Lu&rnFoA>B:1:jOV,Q#(R';u+I*#8s;/rgJsh;xj6+uvm_GD,Gz.$$XăU"r&PhOp)/ZSE/dz*/qG+-ae>Dvi6WWw0,$oD2j*'8kL7_HcTJo9O2qR]/Shqf#4)ăU"Zx0F,wt4n6#L??._jXH\:CQ>2HYIjZAPjdpE0RBO=HhrA<?Y#=$Z<LooQ9K(oW0ăU"bpp0^(k)7jnjV1b1=?1hkR)>g/e)Q'AjmJCPtfMx0Z_JBS?I[;aGf\<\qzc&jAfăU"9>q9r)HT]S:>r-?q?CAMXB>AGxahBmfulxa[?*De<Og_lrY*kt$cuE(p-DR6taUăU"yVxL>VPljPKwTH5qx%N/lM6oPHQd?TOgY[d3<L*gAo04fUS5LLa5,xX[EQ>R;'hăU"sVe+cUCML]tExwct>M#Z<C0\z2cPC,r']NOn),PmG(6&lmg>z'M#[\Y+pVJ_EVEăU"h&6PvH8yqul:;:t.Jl'MTTPENX&?oEL'-Hgi3ma],akQk;9VIpkP/jnOSrW[S14ăU"]H&vTrm_H)u5U5F)*7Uyhz6i$p:jXLF/qga^X.'(7yBgrnx+kLqbiZO=4n8NrBZăU"C:3<.Y=%:_03F)[%->z,rYi<n>X?vIm/_3u:47CD*_Y-J04WnK;AO:%c^_g3on5ăU"W4NvZesLg/+P)\S$#iGFnn_9OL;D3XFi%-HFI<6-0dA>2Vz*c=P/kFklvJsZdu3ăU"=K,j?[XKCTF>GalDQx\sp1\a'P_$_JiAG\cQ^tUa]dIZGfp6zp;+uL3TP-\[^8EăU"i$F?(kN,$]aw4%M)ou_u?/(rs%i>FvbdxuwC6-#&[ga+pY=P:k6B_t#F1'V<558ăU",A4syZ^,_'IQU4NYy,lNMo.-e#Xd4O<LSs\gSTFiZ0/rd^'jgdf'RPqGWdQTqZ0ăU"6.Ab(,]q\&mEeSC=XM,3.?9kH,xg5n1$2VxXWsWjOj5,s-/p3X71udu#AUGnq).ăU"Gam$^f0o_m5/$\q>H3JuqoVj+k&X;AL1&gZ9l'-TPkFQYrn63%nO4bWc'*,O[vfăU"y)a*8C0h9XV/[0#,k?sg(#=sZ=Q7tv:dYk2*-#\_,7IKkd;KBTI;[.:KeHV\PTnăU",\rJhWv1>[4>.,^p+0%X(Gsd/a>j$#d4#:xG7;o$u);u*'d$r(JGDVhzYwFK^88ăU"Oaf'TWZKY^;K>hEdLa-W=;K[)Yz=N)alZ8\ulhWn#AXcx)=]*15nK_l6cnKm:I0ăU"75G38N\t&Uv[UTZ3z&+Wf5X7i*Y01o_=+/0-aZVq6F#blPnY&PQRDi%]'-e$TOJăU"WwG.dg38UY8^;i,6#3r*5NPdL%Q?Y&c1Es8^x%CB0Y^yRFZYV8FbHBMNuxEToY2ăU"O6PY#w%#yRs$]<oSNLZl%</D(YNIRm-#f5[X^pWrYEf;9F+\R<AblXr7udRm9juăU"&<g^.'(Yji2'hKx$y+NiYh(kcOmRLKM+YYMVp6afim18I/$QJs-:Al?T5gHhiY\ăU"-NN+HG3%hY,Zg8roxEe7fYJ)[iKHU4g[6dB&HbD);pnah6(Fc-/8)mV9WXv4:$FăU"PZM9*y\;lPbtUF=5MHv6&H:7G(j4>5RB)^uc5,:V6f%5aWY[-KJKXfAQwG#5lFVăU"Fvpp&BZRR2ih0ri8f-PmAJtA9KjeO7St#F:asb-kK,IWOEjwW7cQ:v?]Pa]XN<?ăU"\mFl^Vhl]Vsb[*LN+_$M=%UJ?*BrNf,tT1+xQG%vFolIVV/p\.L'sipW3%StID=ăU"sL8b;5KmA#rox=GbhEjX+xE%c++'T6k6SS_bi5'vQj>Qf0V^(ONHxM'e3G1ReOJăU"/1k+$Yp??^J\cxh1pxC)>I9(9($VY3\icoW^wZEcle$?sok5W\iRP:S?5Nit*QiăU")C9hy:75AtXjl%1;%3j'4oCJuNJFQ/w;Wm8%KOe:Nj^A_0$l(6(naKhbwV5DV3qăU"9Oi8ns$E56?JDOj4<Y4R;A#]?hm<D<?1*FMWmUrM.mN<RR*dhA0dm3kdh<v'*hDăU"7Gf,n0C*jNWkuet=qgsQn?IjPNsaeZA$lumI'Y/-'Hlf7D1.q3dAG:khY<?rpT-ăU"FHnKq)%?A'#J_%$qn6gDi]0jbIvi(Oe<1h$J#dZi3n9'=xpZ95&nPQE_,g%w9qSăU"qDzMZF+?qh2#C\FF2Ad%ErqLd2VuP\<\Ic?j>.)(P'DH575s43qA(5;clBmtghtăU"1K9EI-vZQ]sh'uJY^S%^WBnQn^FG9M:%3hCNeVrz(r\-x5A>$x8M&zBys)+%[orăU"A-&8ASWfygyga:aSp5_JB?>5l/3y;Bn=1A=]ZQG68V3,8W\[AI:=>+Z,BcX72>NăU"p%lJCFPiUS0S+A_Bp#jKH1;'w/^rlCL+^Y)zB6Nqf#Ral#M*[NsTos'z#)jUP#GăU"%TQYXR$4ertI1XYWU;TYsR*R(pFK;:P(*j14aFmhSFc^kJu].690e#+a^PaKQEEăU"?$MCvra'JU_+?qPSw&Vr]uCFVGZt^:JH-iN%wDwZ*YL7g1j+QE%ym?gm.pI.uYAăU"Y2-GECS&Be--Z8^(2sE<\DLy27vP5N0xN&O(cR66JO-)]M<=S[M&3q3*sWfEqu?ăU"NObP8E+9ZNHF:wtIZi*:b&Bs=j:fmB[7[?a7h5o$mK4'e1ZPtQj/')H^#vjDzBIăU"/1AUr<Wdf(SAKYkjRe^S9H]5v8kBpX*5r;mS4HYt4?F;upK$ZDD_lU2G#.f#%G,ăU"b#WLho.VPBj].M%-fz%^Di=IHpgP7mQ=OM6\pm6MC'MXtTrHgl4^:'g:O#LuR*:ăU"W=j5kUatf_;j.fB%99ku:)+CVNsdi_pHRPKTKvbIq9CA05-J_5J#/+FJ+Sm'gb;ăU"#b]X<9_I+(YO]b^K3mw[sj'RYFWZuDFB2_%v$c7bRvdD'UH)\lg^_:wc.%ha?B1ăU"+T08nc.#;r%Qm:_K=tdq4Wk<bT'm5?U<l\PSZ2>'uVL4EbNY,*D.Z0%/xgn4+]WăU"zJ$cgNn;?(;%CB/rA((OW?n-O0o#PB3),9'$)^'aK0>Is79Lv[wha2IlBZ%[lkVăU"_k*lAewO&0%b%_vr*7:;C49k4&v<g#1yp#-xgin#.[MqKm\weA#fOk:sz2HAV'WăU".4zREH9JXKpS;__k00rs(u-ykQ(KQdHH*Js61&1MIr3/leN:ib^A%-t]^;rN#NRăU"(&UNc4lj\7><Y\r5m7y.$-0%CG+n.+(%dR]Mseit0^N0Scpj\^*g<VGC6Qsoac'ăU"1MLj7pMBWmvgsN1h.iAj%(d8SH&Ko#Z2a>00w/5tTv4ijIn3tItG^c6Q9:60EfaăU"U/MZdSA&E-/2WFc^&L5*'lBp_gjt^-71g*[g0YU'ALOWA6d\FS70G^dSsT)ll?*ăU"#$O/iB/33N87-u4AX6hiMdja-4K<^tY;Z,DXp78q&$X?#vmcNK$';-1A%NP%-UuăU"XaMp>-I'r_nadRcM-c/5_'A5)sH<h>lTgtpgF1BpPVuF[^[>c6unst&X)S6X?crăU"o+&ECf3%(Q^7B(7B^3ps',M>HBBVB$OHb\Lc58Ti8iR8+Itt1;P2+.'DKXD=[ZWăU"9kM6uEs29YXb_m^ORZPCSc^Ony'8B9;Z)2%1Q^V&U#hD56kQYpb=-<Nk/Nl#LBIăU"J3DhM['EIm8Q]:,zd.Z5igU>$X;v#jtY8gPH,q32NAKAX55';a&+ZkC#kL93m6jăU"W;Bhh>Yit_9rdt<*19]('0?Ct>5fO;J64V28OU0Ikm\jl3nWqXsBoJ=rN\*a%uOăU")yfy.p/B7d9ht)>,,GaXiECJNkFmJZ+nV(oNktQI$4S^pVq:2eQDaA1;mmJbX/IăU"E-&GG0=#-eITsJERMHLDZ(f5%LLsU^i+\7TRe.HG1wXn9dAk+8IG2&btgeP.MwPăU"]FiH_n,+).Cdh,[+#QZiP.UNg+.%VP8k.jbr,/VjTPNX=NuCS_Y#HJF,($gV/7<ăU"bT+QWRZ_QbpY#FWGcQ]tQ/a9f.GY>UTpx]'EaC=(<iU8j(s5f&.ZTU.q(J;r5\7ăU"o_^tgBS//MtVS5'f8*2#NpNZNU0'#R=BoM'cCp84_d2T5y)x$%AtLJ(5LuMf*boăEND SUBăSUB V9ăU"(f]rg:GI5Xq:B>5sowRZ][1>Tu6&7H(s?nuf%wmeh]F5xDl>IIB?lxJu^b:Y\/dăU"&>Pq'_mo$2s%g361pb<o.x_-HWC<=S:%.quad76fT4g^Y0HADy[nBVP4Z2eP-.JăU"YjgXP/P3%SV8:/4x*PfDJ<KIazd,>eY7GW>6LRa9^)8w,sW$tOqcx-#uQX]/ZdjăU"3M6,VcWlN_NuA7HgITQr3_sk)$YT1$MC3-Q5VBEhlqV[rJVKmUOKUU8^CFjlC_DăU"DyaZQ6ls;SX1-;YT&BfcV?R)E1pp2D$0D%a6FFAs)Q16Nsh$9RaE>kj^6p]:h#iăU"QJ^PRO8).uhA+]>p_lLR?pR6:9\L:zaH:uViv+4f1H%<jNVMG1:q[BEi(gz4qfzăU"e7i&zyaiuMGQPiiR=k#ndjpAf.NmLK_p'<hO\Wu?n0]&V<(t?g'6)J.a6F\A2UuăU"R8vA/gpU4hC,?3co>hfS+T1MFQd^H*[]0:>ivjy9UL%Jr:w.2Ewj?+ezSySRDt=ăU"yo<11g?.2/.i%9m8'0dC/\R'Ou$cB^0Ml/:Ckn\VEb[OtnnzlH_Q3Q1k?W$qF&$ăU"DYuQ7.,R+^6z#H?p^MU-]x3CIxck_b&jttct^BGw5MxLS1B,hr1mhZoD<q459qSăU"lCr6+Z8rVN3gfVs9v^OX?$6Wkpv3uk'x%up%()9%%%%-%'VZ3JEbI]x,r6%%%p%ăU"&%%0%%%%rsyf%nsxS[lnfU*5LyxG6S\idoYj;gFJb/Q:'c3^LP9SU??eH^(b7kdăU"FFO:2q7VO_WtXOqm%EI%NUmE$Rgr.\K)5?GVszwU:-nh#C$B<7J5L[-QnazY)SnăU"]M>:aUG6u]]s.N3N;_L'$h7z<XtDGXhe-p:^u$7gduw5gdup4ok\&\z86s;ZZg7ăU"rt3,ELpTTuv+1OpFZaTXQFy2.idJ\How+$^DnRMZNcwXI.NNnG6:wKmw,Ru=mchăU"ux(Pc$0'ISM&.It63gtR](c_GEZ?C/NhLKk_.JGiCP^98I(.O7\0<ki;y.>BXA$ăU"=H'A0z0RG='0CLq.[j[k:1C(%[q;b07s^SUpkD,#6pLdP4M%*L\=>sHiJNZTw8HăU"&,.p:Oi]l)NP0m.2+hd=jOS1aTMqi0*y<8JXR6NA]#(+%C6y#\<0G13=9Z5//\1ăU"EqN=tfVO02.c9VuXY9^*p0uM^&04.;=Hh5DG+e<knh$r:5)yD&KHo.+TF8OUumxăU"W-\FcY&xIflSEKkn.Z1PY8Kawj+'Ja2_K<O25<C=_otO'EaaLOxiW>ZYO[]?=J*ăU"gOeu%t$KI6JMmt^M0=HerIfXCG2kHK9xg)p&'b+HQ,PF^[DwWMpnmkOrD'O??pRăU"6?F/e7gCZ1UUIZRF#BtZQZa2A;je7ZmHS1?0i8;K2?\e[=Rpm6]#4VUnq$YCuVYăU"m1IRFn-6X7ZF5UrEd[%]#%m:3pFj=RK-5bTSutL]c'PdW$T-[X7R>8C=Fh0?-muăU"B9Uv9V6s'X;Q8QU8);1dt(7du?SUk(2hJq%)8[('$)[Dw*m.w&=ZPC>p/PywRUiăU"$uWC&mgELWIrThR;Ff&4>hs9[hbg#nN#P7+k=COVmoRe4d4RY(dfzRFC;l>p:;+ăU"&6oo/X6Kko;P]'VTU3V;&_[>/-p+o[nyf6qGFq#Lq&Dshh:a?aR4oex]0X[]K'YăU"5fRbd81I_&fVn\t-SdQ==<hrGbIgRCR4pCx:CO_&F&a;V)LSclSC_N7:,^Qr,XcăU"&1:UtTwpIVJ(OIL,63r?qG]?GHC0MsqDpl-Vn_k(Ls2wZ)DGijWYL\D7,?s()5năU"q1n$ZIqcSOI)\K\dF%f(kE.,A*9J-0H+E>B8mpDr6T'+(1Rb7?WCZ1?kfKi4%B0ăU"XuD%<lz6M'b3Q;;<.JQq*5X#h#V1#Ihn4Ivh0'=;5d,gJ4(0[eWv&+hdqDYqu5XăU"%-QqNH+4\ACuB,&Cl19h1M'iQILNka&Yb?OnV<?mjUH\mt;SfH?hYEI5u<68%88ăU"xw&DQ#+BD6*tVsDima-DkP6V.z4eBnMdZK]]i.QJu8almF#*7w);sw+U1V&)mV/ăU"&%F+n?_M4Br8I8?lOK_'U65xH.o5dO,1IO=AxY+NDqH_(0RjN4I\=bE(ZG#8y78ăU"K*/XbItj%qunTmhNWan$#j/EUdWcT8$<DF[SVepm6^_?0Wjq[;]_F2/oo0T4Q'QăU";gk3-gaoJP&hTlZh[a+youNo'4\fiB*'/'hdc_SN,#RlpSQB3k;jo>VL?%NXls4ăU"VC15,Hifkxln0n6(c^8v#7/T,au&d&#d(]Rg+:]pJr&=^:Gb:KHq&.?.'4=pX-.ăU"/=[tQ5+J7hZ7M0t:/m'/7kjmLmXhDd\wgdOR2qu<;F1*uckQ)dWa..89nqcSr5căU"$HUn3wz005JtN'RSj#6Pxq_9ld\v9CSt424^5_bj)lHd#\CGH0gdo8dt%]hT#I/ăU"5Y;<=3:&->uR_J&o<==*l>yrut\<QPqHFNMZhE:')hGd\P&rtO7(+S6BfRIX[,%ăU"E?sWG0??]<ll'2-6.hm].S_&jiPw=Qlf(Az1>$5YRhRk=UIcFXo+J1:?X7.#K#uăU"$.*\FE0^*zNu_RtrbM??W3fun<e+m['Y7g[U1>YDOteOMGPoFz,+*#;g-JU>kCZăU"zO7^;fjAg7Ai(5t;Ih%wCI#cn#rd*M2I?m<?yXJq&d36Lq*QRNA#/<UzGb:\>M[ăU"c.Jm6#*0c/;R*<aIqD4t16Fwp2?)\b#jOghh\6fo1:.HMR:;gp=_Xe\.5F8kN?DăU"tW?D9#l>wT)7d/epj+>=O;rb1=Ba&+I1dy0VE^2\+$e\RrPO<zqc1/n-[XP=+9ZăU"DbIm9dM3YOH+B-HHRms-XqDZBTe4P'9Z?q3fkPGl[n;*1R2vOVH1^gbqHm?[UfDăU")'GD=T^/vK>A#s9gJOCCRMKB>8,5<jX8ueaZ2TXmbj00&AxZL=K55qc<INo=d)&ăU"rPIHzn'Yqer*tFfS4jQRE7JSGjC[Ua]e$97d,akZdGuaf2*DL/\sB>I6($T&$,7ăU"%,:)a08gCbz$Hx9\Wutu)$TT-X5402lZ)rtx0$5nEk<s:VR=;$:SUo6eNfXjOR(ăU">rUHdBfdP2l=%P?t;wy00$v':;J0.[_s.x,ZOr^<fr_5Srsd4/%jilO;n<nsB2]ăU"cIR_uR2I'?k7=q#m.\Q_FYZRfxS\4dXM^GS_&TKThRxWh,eyPYa/x6,USm3;\z\ăU"E<l>:*wq.Pt-xi<PfZLgBO/,NFUtya^]_59LNX<0%IFwDowan(s>^vkQ60.FW2'ăU"9te7VaTFAxn1G%&3z[/&S3sU;hEi,3lN5+(Z]tZxuZMXNO,fZ)u\B4x#n3w1n3KăU";,?M)0CFxrxlv5ZimsDp,l>$Y=xi^qF0v3QYEoK'gtio[=<7LCSWS[9k$NBA*DRăU")N49W\Ymti>+QYI[q0cYBT[w+9fZtO,YAlYL?7hp,PYCvQWG,$,l(8.HNZw0NUFăU"hnqnfKpR9i[agj#Hb#Bhy3uZDQdesf$'2s40685i<$v:I5>[67Q$IC>RxRfnTWiăU"1c59hi:+DJqIB8,ZxCf&p5]-;RvJ)>,&NPd\5NNQn,5B\9hzis;HYO;fpk+(Yk4ăU";-3\?yVBQRiRUNnhO+x5n/GE>a^Ay[l,&1MOdtL&xkPel*->-#Zye0[Q$(0-r6uăU"Z*b[J^0WGDnFtGod1J7u?:WJt<$/6g1EDiMiW[fdwxR5uNZS_31hWOlNEv%jbPfăU"m$p]gt$/+h$p't:OsLOQTeg['x-1N;rN^HLeqIVPrq%ulSuJ<$'?UshA;]j)+c)ăU"c_#\qy].P'0?Q[D<yl>4o'm>p,x.Z$W2rH$/y[&?]D6UU=&]$=kEYh/?)<[nat&ăU"&Iue<O3n,iBfbaEKw:SB?e#mq:lq^9e&A$[O9gI/t%=dkm*D<%M;.=4ZhZ8lEtBăU":;Dcc::W?6x7(t;0L(i#oaD0\0yN=YTMtM4us8az6lkN1L2epaEw2Ioj8ixL[9QăU"m)Q[H&Fa>\<sOBu-DXCgQj:wuYUlLVO29ghw/#O&S#?o8AJn3;*SXbs6MYfZkw[ăU"xuw(?G_&d('pxY0r%q#snJDVkA0uKNF;b9]+-i6X4tn/m&p^#'[M:Wu8m;D<0ESăU"n9P0JM82Xz.Gu*kL2aMlG%brO'R0uoO^?-2NRAY)#3Xmto++ROn%\/tnnHCS'T:ăU"t4mZ]<-Z_zi<*m8iu^89IV_+fGyCWH[(Mu96kk>KZj3Ml,',Y^pRvABlW'Irlr<ăU"OdL)+7RJ8$.V\?.c)RP7s59rCbhrDd>GZZJn*UO^+/L\O&0HVT<v-aJ[:O6s+/5ăU"&*oCkue3?Wb:<rOLx+#.]8?U_TH4?J&d=UfqnVNKdLiHJ,^#,U3^U96+5d[kI^AăU"\0&67D&XncoWE9n-Ih]M&Yb<GWLLi?WI$rb49vt%b1aI=)&?37x03RIb&ng]k(]ăU"MX:(0(NV^ihKap;EgaHJC67=D>g-3b*x:ONMA7UD%(;42k48.56dWHf_zL1tcnaăU";+#muFc#HXlYcQ;W&^hW^o##8jP])ADw*H?4tbkRLSjHqZusZYC8O#Rli9vC,iiăU"gEbWT=*_;q^:W$QA]>up5VXZu=iibbN3X)1/_q\^t8+U?h)(N38gJ9,teJpm$=[ăU"<]R'dzlv(8Kb[?K$u1eBZdG9(mt2zA[rr[lX]HNAE=JehG7EVNi\*.CD,XIsv;jăU"9kMHOVIQ?QI]4\zXuS=p:,PB7vNr/H)Z^A0V?P5SLTZY\)9dgH<9SXv5DT\JS/iăU"A<1)YqngX5ef.<75]DFLP\c#p]U+'&nav=&:I_i**\s2^OwA&IX^lTQ\2HumOt(ăU"u61O#iJ0aO0)MzvI1\g_iV*.N.?qTMIDK2AMxKu#i]RYd9LXTIhk\g=Tnei[AJPăU"FSl']Ft(_GFP_up2+DW8Krumi/$WX.4E/9DvOeqAFiF)s(1GUKuy6Mu(ZI)7M[RăU"WMSBtADQboC4CDlDo#-95uwr)$7uDf9BMQpUy[5C5gezYx;)8OnhCHu\Bnd(&&2ăU",;5:)[;7e[6$&WtsGjr5A%Y8=p]h[dJh&-Mb<s:(zBr]zcuI$Yn)/D_Vf&2ykk[ăU"o_?E:Im[+3fOSJiNNMPC3KIAEJl:&4I\ja4#xD$<':Q2<O=vOpY+>R<0Wg%_cW[ăU"t)wnS;qdAS:qt>nmyXBpbZqWM(R-ni%L38h^xDlRRplPeQ(H+XEeUA+2N%vliD7ăU"R.k9ae_YG1o_bxBZ#%+lkkW9\Nr;pH4a$Rh&ChYjHV6\,9&1)wGi.O0w+I4;\[eăU"+TN&P=%_r^jEzb0=*V#$0Wwn>E(ACH+,$'$0Ijshpx$<HL(rNPH*_2]^/h&*W+VăU"cpeXf:*SufYD*qI=S7Wo3k3M\1iOM,7'ouFlf#Wa*AGt=-a=c%4N)G0+T-]foKHăU"sm-P.w)4Q^SDV'c^_S*'#L>2t1Ku(WzoZck3?Y&a)#FRbNV;3b6v#=P/&cuc^12ăU"V1n&E%e4TyT=fpx$=EkDKQm#Koow$guZkkFJ\T)]jdG#*gF<+P&TbwVqeR3HO#SăU"R*4.']1_ve1oV]c8BubKEM->#^[bCdzY1f2gd5P3^T:.YV?.[G,GUPG$/Z_AJ$căU"JZz<V^BUg?=CF6V/RKIXHc7)R*\]OT28JJ'SXWs)^k=BO^1u^X&4%j$hM185oh9ăU"5nt?\3)AGIiNhg$yDhkA8#?bbE$]?jx]\A/HT0X?O^=>79*m956Av=PS_n?<x?DăU"KFj$vBj,sLW05#J,AS]&Dn0[/aGaN7X/924Q*7cJ,iC)j^_RQ<^zuOSFc,s#[9_ăU"o<J6s7(GC,rV&9n%*j9qL(x.g+QXb]jw7ENcAi<6%hA?'AyaaqQpl3EEhU/mtQdăU"$:n7=kA000U3S53(.?t=JZf66S\9<BDq=Wcf.ft[y9%2+gjt52TIemcKsqlhk57ăU"h:v,+])y>.h=zPA\Dd$FM,tQ##=qRjs3u_Nep[uYr<dfUCV)RN,Rt?AVyq*YakVăU"?\kG\=;c]=hL(N$iXs(6D?a3^uBRZLVkUqYJeV_<.0?]?<3U?SV_Vj9fqKBR_EFăU"Ljr&Lx<dkBgPlPWH1JCmdBDT,>2pDeYH%K0q_+HKdA(hLsNfM7$Be2R1>a&wbXmăU"c9DQAd2T+WoaKVwf0rq:>$WRbJz4j&I^^,?8j:<R#Z-TRhm#zE\Gyo[d3o6qA^1ăU"j5ZXMgDB##P2[]l]WZ&YO)4yclgQ6PqPGz6D2A9[^&ngGecC8D<Z1Q4kS4,EpIoăU"1#pQ?6\#w.+*cDY^akW<=P'TZCCO52c.ic-mRyJVV\9<4$EjubX/L];J_4_7PrbăU"(_QV<D;JItWWsnaJqqwA;KR4V).X&fe*XXiH;Af*DIEU9lomes+CTRH4?#Fvt;hăU"ZH'+3'K/E%aT#fP[O4#oQ'x1-;VlM>'$uR?N4'Ej%sT?R=R4'b-O\^cow=ln-Q4ăU"#;F*fe=;N0,5t#tIPX&4P'WN8hBrX<Ugg?B=Lb6^OGJEp'wXOLSP[aaZvq93tVBăU"=G>4mE9_nmQ^#A%A+?WFj8':2Lwd+jl)^+7o7UYRAMhwr;n_?#tS*b1x(BYAQ5]ăU"?Rn?tTt9VEcIH'&4/p/OWBFI*CI4zToPF59LI$%8s8*_YP&/02$Qvm5G4:uK'F/ăU"zK,#eil]6VYOmHxwRMjfReheXe6V&yAIzs1X*]Q6Wq31E,r63dI.qk#T?1*2F=(ăU"eK_tuF0l>$OB.?(4/sJRsKl?-tjn'sbxsUkBX[?bmbnjJYE)VGV])%olwftQ74VăU"1Tu8PP4Qgl<vNA\tf+GwQ-HYZmr^*olZP3MYUR%Y-=:l_hC0Qf>1b:Gi+6hLY(_ăU"uZK;1M+D70FId5x9#-T/X#M:RZ:%Bw2fC5*DsDe=YX_Ilh#)ny%d]]R5G=fc<\băU"w/0esbUh3++92Ni2SG)P3rjY;VULS1[c([%\EAd.O>c)MLRqlOtjmc&+=)\kCDtăU"Vimp3LCqiG2KKWDIXwJ[%UWc]QSU,A2*Ry_*AM&WDj9^HZuZe0D5AK=;5j7'z8;ăU"w0eD9Uw12MdQLqP]j_S7-1AZ,Q4U_FsZGEK7v4*jiZj2u/Z#H;7U.-dFnv[I:-[ăU"$VM*1k$U\83d(%=[QPO,Cy%yg/$D_XaGd0[mL[^MJ%ae3-M^g++n3V(rX-kK?+WăU"WCPv>18^iMetM3C2aH/vy&prooh(3^f8aV%PAsUJG;bpWf$9MyE4cAIwHu=4,E#ăU"nJ'VH%T$'Y7ngo$X7PA>MqJwTrui/[tt4kT<h;<dLnN?)aDqYLua].rasboZ&jjăU"cWmO5j$Nsb2Y:P'q_[/cYQ?A_(S/$\xKWyfz1E=QD:pWg,M&N+?f9Yhji-7?0n(ăU"NFp_7/>:(.7<QuUXVg]Bv5Ypki-S[^erCnlKL#WD]6&2$bk40J7dp'Q[1cMe3MsăU"Z<YGdB;dYGrC-96fVCvLA;/+v:S<c>ope3G;l9X<3%%(;/6^[Cqrvih6mXF;FQGăU"SzgDA)E>8<v$>Uo](^Sq0f8cRUd4nr&3%1;[f1+SG=C$cSdPFCJkFj?JRjBk(9căU"*-68coEGldH3AXU*?0j7E'B4M6Hed:8;=^K4gD;l0;hHK;);S0Fl4n%>UP))Sy#ăU"A1vvtpKWM;fkiK3GnUr:8scbEp$aW)0]AfsSj[5:B)H[aPDRsx$r:bveSjnY>nIăU"tt]lIR4YhV]7K9t+KD]-h(V/Pa8CLL]8v0XMzs1;GkKcn'B>b8VfiXhHK5rBTU=ăU"DlYIV7vCIhpsPTvHe,$DY>Ddl/tDz$q%spAe6J?bQ9c3g64o'skECOJMOA.#Gs-ăU"_4>w?T.kHJiV<8JkRXj0=r=HrMXVKLpsQteuFF,Sv=kb\-&%#sNa#ie(ViWJ8RhăU".n[ZSg[8y1i_sL64G+qdgU]5c)_8u3V=xnJ=sjio%^4%oT,f<d$m>V_2(Jb#'&6ăU"Y0ZwI,&w1Gz0WSnRg:iU4_RJvtri:bjdU;D2A^bK[':]0*BqL*h^W^xZ3ulw='uăU"-pMI(NsA&bAIqYe9?cGHU'8)UXW=o%'_9spDO#]u%A\D?62sOdK0cFBQU^2J/HfăU"WoqfTKf6bq$65PqfJSPd.)cwd&BF\L_:oiXpW^\-Lv3JKYJ+u(in]p,rYVB#<;DăU"[';)_NPNX,,A+,?VbP'o;&q'-Qf9bmd&#do^_I,<2\n^Jbp;FlRyeJ<fVN6B2D5ăU"y5?tcZgJ4N9^ISp02gct'(-XOZD$%G26p4:q09Yb*8#uMOJTptYYdpi(+lt;[w\ăU"Sk[l_'#4PVcZ+kG3NhJDN_La($2>OwT_$D*VU#z,M*=0Z#I8BC&?0Z(/<Lc$Q'uăU"%3:1V,fsu-bXWGnxH]C$o</;bSMUWn3*/bH04ZQmZGyOV.rsYSu*HSk]55hNFE+ăU"WUi5;9vH_C)c>\yAan9CumcNb+d;]0.w+C#]>&j4T98GLD=_8:aDiNIfJ<9cGN;ăU"b_GUPQdh9g=nQkg\j9wB64(w9](FBVs\rxS\1[x+oYRkmMgeJ3G#&2]-rY8aa]FăU"sGb^7bRJfQJVQp*$ENq.RV+XSho4zc,,+g9>>U'D[8LqAU0LmgYB1frloofUdJ?ăU"F4Tg#$-RF4lVttfPc3$]*'p>Y];;Kb'cG64g)#>Iw;tUsB1w^>CB0ae+YwDEKfaăU"c+uu\Y(M3)kMp6/54C]PQ:#Lxetyit?Zi'W7EQX/a8up<?g-It;U];E>14*#,1făU"d#U&f;6B$LaJIXbh3%vJEQAD=%f_D7RK16&U5w6Z8:IH1;ccU,0\aoL959VsJSDăU"$]lX:(VbHYmfBv]3D.E$mET=i'Q5B0LUl[j<p5j^?/qDx)jPVB\9rG,4?a(RnTdăU"^dJ+hi3MajeRPj^D#r+E,($N>]</heg:__'VV0]/rLl]tBXY?g_ulKsnZKnjI$=ăU"t:GU?lX-XH#&#](,hJbpo-#pvkYFgvRp#J3rAc&sb3jn?rWsOsfE19Ah>)#r6Q$ăU"igt1#MXpIJUiqhKkJSe&L:rOJgP=#E3$*)MID]Yk#rd/v??dLVqO:4WqM2FLo8;ăU"9Db1sV^$lz5^q-7O=[JylbP#ppbFr)QxVneorC3$b8rzU1]i2&/p$QPQRj%e]#măU"gxLplO)SyW;DM.1l'I5:UMUkgXH1c\OsOe_<'oAEsXK/UsC$lNfOc<\&sU>WNXXăU"yAwRWgODff1ELx0D[I5:4+FLF(igs+$9g[X-1R.[-*5G]1dj/LEY0GH7.RqSCL9ăU"ljjoBT2W&=GDR9,17_gSKncyL:WZHhk>jp<%SfmgU++w'SXKo#H6NA=#>SBpPF/ăU"Ukok3N]g-ji(0Leo/R9]#aBmMwEIMlpJ#eo8_r2EuaR2J0yoq'c.KWk$gOK64WCăU"U'Hq;_%y6q)?Mm#+6t6r&qig&tIhq6R_&Q_ZeWSIan72A1K-&:'&f.+SW_R(BFtăU"_P/wY^mXOYfoePc[[C?yCGG,I$/e?2opp+N]x44A'd)$1oq9]W1[V]PMi.d&C,SăU"1iQ*W<ihLGFTl_R)CEAaKlVA-QjFz&&jPHg_Q^auxGAW36F?L;/&^xg#yz02APMăU")[7tB,C0&zoWx>CquTgqU\NlLIlS+f;[ukR:%4nxBXGeZLEe6\/q+9Jo-?[mL>_ăU"wt<\K[S'&650/mYWI-_O:t/tm8c\ep[E#*#C'N7NG=w6rr_y%hYWU6*lz%\3/VwăU"dD_OKitkA2Sk-bOZ=Mi_0gEutaehX*N'H-IUT;mHGG.sv0D(l%f5PwmCeeXu#teăU"Y'fm3NVn-tbvNQG::Jz#RM</Vom(cQ#+bUEWfX'oolVLVg[+y[3wZptX:c>9AaEăU"=<FJF<a81VAVGwbxm3gF'53>LoevsZAu9[a,i_*l&WU#J36t01>JFDR#%c]/ELuăU"a[wH'?g1W01XxlV_q^Q^9eClIg'[ACB/=If/1n*\%b4qF01wY(>%Y?6_pOnLUBNăU".Yb..6Kg:Wp.F9wdE4(I8H_\Mq;JLN/dFNrIWjaHK)B6=KCbCjAF5<DZpL#)UIZăU"LUUruXdg6RJ:+mQ.y0eK\uanZ22?xFB6?qR%>Y&h$v-2dc5sHxA^xgF;11+aQD?ăU"m1.F>zK7Te?10'v-[<a3x#LUq61oudUXB.p*sH')/37V1n1BHTGHLEZ_fZ79+8TăU"eBwNIHABgO)u7tivgcYVJ3M205U&8b_C#?i]LHX<Wm#z=fl1g$BSyH,b-f7+&m.ăU"'Io1QUDOu8iHoRpikH7-Dg=?*6b?bhcblCMUG\nU;IvAQ)5#iVdsisw]^aN,#[,ăU"J:KU.;1%.pfE]F%<+8&EVfM-wfHHAJs.]KuBlU\gKG*$vfjW-fa'ALzTU\RDE;SăU"$sVtR,*:U=0((k+hiVf?*.mok0s)Wc6J)0?M'>PN_:aOwb<H,l9udEq]I.1cL<XăU"ITnW*P:E)$6abpbCdu#9x8a%3(=0xHm\_Q>uhTG/;CPq&PG_s$.<DK]kiuB]nX7ăU"edXgKs)o.f2.,769,]S/*qnuPTqNgmT$CZqLPJP3Rz2mtnY?ke<rK;cgUn)CU\făU"n9I1udoajExeQQ5xVNRjGCRutW1M(jO5H4w\j:B;A()NAmKAEPHEtJmtgVn(R<lăU"Wxtdf.H4Rl)fzFjf0RqGWh$d*-%q(;&=niL'rJE2gcPPZ$^#/:(6Be,S'.go)Q=ăU"jh)OpTsFNfopW%E>>_n._gA'+;>^e9/Je5(<sSO-uGW]*IdAScQ7X44r$=XJ(LSăU"54)nA1=D47D^>lY*&SMypK(S&=5t>,GFP\.O,JstwqGK#[K[/12-2^Z*Nmq8N,PăU"BgT[pSKquUAZqN2[D2od5bLuDEY'a0P+49*]&Qo/lkDvo5ou<>Ho?[2Sbo1T.o*ăU"7$vTA'X7S0_&T237KW\n6r:=1[HT2#*>)gaGXuS^TBq.S8un9%I'=[&u+d.Vz<[ăU"$aA^$fd()Z_Y8EgZ$b;_O#*Nb%XE[&\F?Tx08jlt%Hgt.$lhTaGUxQsM2(.z$O;ăU"sF&*0rFpX'sXOxUt5.wdjD\Fns=7:%>^HsVL2R5r7IdX:$VE(fq7$htu%TQa<7HăU"4U3\QnS4oN1wS0)ZyM_WYLa8.XKVFDTdcppF4p[g8_PSXt;u);/ebWfLC5zXLCrăU"6Hb8?,J;bD&,Vl%%32'B_FV?Er<\%JXx)_NxPopGXvr66_aVQtJbcB9lQ5TR:1:ăU"INv2+q<SU]o:U8R#sF^$XqNb&2YDNLltHt]f\&%lq1V_k]LsY9L*/HCcnQX;IfpăU"B*HPmWD+mhajZ6U2&[,OVOuMt_y\=To9Ca0BS)#P;W16npJxGZs35$)BD3pc[jxăU"d_FZb+LfBGo.2flNST;wq-G\4Dl*(t/LT-qISdHAsQ?x4&#BCnWVh.0MKmV^,1uăU"B1Yr7j]ZeOUIprArUhVNZjNxWLvr+.t[G/7PS2GG='BLI;m[?)C7bN&a)3ojBd&ăU"K0]'rmawq,XfGz\dl.E'-;y,8CRL9bCP9nRr42=nldp:on09P529eLL:w9z2LWVăU",$o/F<fXpKCfL4ht*cQhHEXkDJ%D[G2t?^oI5XBmb_F3#U05)u[T.fNs?qws_uPăU"IAU?f8642Et_c5^[nK5X+c5P^a?_p8wrvEwXn^uSrOc>pYJP?$w^'-4IRQntmBSăU"<cTF;BZGa>2LLm^lBa#of(?AFe<^Fm+/UyR6)h1^kjGEimnSii/1;xLi3KeSdKhăU">Xpy?ai5z$.b=1u8>$^DLS[xzO96Z'_28xL=W\J4AaN<e^Us3xbU1[S*C5qn[^+ăU"NdxT%wHw7$PQya(<Dii#\aY&fRdCqtVT()O5fO':VYHSBwa6q1#_<MoVe<lEpMoăU"<ia;NaV/#hkNnRB&:kOP4_Q5q)*Y.N;16Xu0'Q*dg425LqTth<v'8a]b/Ecu8R=ăU")U2e#N8&Ff9&vEe)%M&_8G2]VC>WqK;1ul=2<HJ.'lmCD]Y$'u8C-2//)NgLOU(ăU"cFL+vL=zgx[=AS8>Dr^o9QubOA/''vK[z<0]E:+^X<Ii,N75meFtAtiit6yGk,7ăU"KvF5=,/7q;0M8:A_CDt[m+#msEB5z-0gU3M1=YlTkA+^Y+&kvg'%2fH1a$5A'BjăU".ME(\dE/:k^ZYlH(5_L=8S$+fkb+6.x2B4RKgA0s8j4#_rK\B'WqP$L[+#JY*\răU"M&7D)uUiz&ELh*OOIdo=QBVyHSpKHKKs1DYiZsD(;i7-]S/Vxx*pJj3?81a5WLKăU"27WHd+,shujdvVf]7K9^WKVR1''%,d^Ea[VCc],YB=iP_uci[e;&lk4Dzh;*$G6ăU",FI#K%8xNN&CYHh3vfy2g'F3a'GQ#?=^uCP\jd]VF7dd-rHq]%QQGQzT.m?/qTbăU"XC'GcV:IA^KAb*\l9*d.%Ze]M#j*?dD&*r38'Bh0WU(.DqUD&3^(pYI^C<_(92KăU"cU</>8.6#(7Y]M-OuEL+u0g1Ih>IufOBk'paIqk_Wz*S&VzbU&0Pm*[Wp=>$l[[ăU"I^M[fUIk>keZN<O*:l]7_/INutBi^;d(Y5vm8<MmZ\OD?I,O;zrG)Rd+e-VE+-jăU"AmcT$'KC113l_KL.P*L#rkgdrJKosSId.U,&n-:QNwt*h>c&K1fW-*?LT9F5nY)ăU"JoF2+#UZdQU)[V9G6iiH<N&P\/.'k(%s.JVJ'FoPVVv=aJUI-wR/6LGu0[9IV$$ăU"<:-W8a'C6o,^G1.n(L#nPZIn==>j89jt[Heq,p&Hi][8EptZYNJ09IL93je$k.7ăU"z(8s+[\FPQi_to4%L$?THl9f^C=cR^]%3sU)u.XWpnB]rv*JwDU31KJXJPtFFrvăU"NsUfmATZph>%c)]o-ASiNqql+vo)s1.29_2Mq<o2-c3^PKbe(+wZns_hXOM7K_JăU"/xOK.aa7<KQI+0BV'mUBH%ml[^bTHC7?lQ7UF<FD-TN=Q'vQ::_*Y2+qO\0$P;5ăEND SUBăSUB VAăU"j=LUsloBU.$PrlPZ7S8I[D,3]2Xssl^A_K=Vy_VT)pk]+djalGg+BHNVib^j]X'ăU"Ai67S(:_3ufSmB%[p25y?'][d]K3b(Bvq.H>nWn\hRb]:*J=&iJ<KOfM&3#OKG_ăU"'./k_1/g\^j4b<]^Tt8VE838aD#+#J-,.U\,UyZ2t'<x=,(D']k)B]PqKJI1Td>ăU"N]x?MGaS=p$NHymY%,JNi\We]#qW=)dRtrdlBG#^(H7_mNIv<9.>dV4YJd+8O#BăU")c#^Vq#-^pHWH(q)V$Q6/A3_L5<[_tLBjHg&gWk/p/7d+v[a\ee_N6LiCsuRAmsăU"u?\^C?I5VI&L\(6)#_t'%L3\IJg*[pTwrLaukEbP1[.KRqF4Eg,QS7*OiQYTdqCăU"?[a51l-q?(TbjYxu(WuFLfI3r.+tXes\63cAF+GFn*04O_VH9r%f]8CfjichAPuăU"SJJ..>P2ahKboV.(Tk-=G7W<JTj3\^7KGqi?C-rH>CHVNP6S1[aaJcaU90F>+=PăU"PY;n9GEcri/lReZ>WJ$?$i\z^?oesiu\(3i[FE7CwQI'wSMu3PtsKJj+)$$pL+3ăU"NBl=a5=C4FHy2B2'#;27#b8IO*tTVki33bTudD%XllSY,uk1R1<>i=n(<HGQD\?ăU"KG5bP-SNo::=l?zALjD\/QDo8%eOl&&3KHkj=_mObo(>;DJ^92Fqm<uDxh:D?)]ăU"O2XX9(:W2q/O.'hA,koo4gAIbm4#-cBeU$J#yu7uaAcjN,^qWV$rSb12GFqgUzmăU"w$3YF?;kXN&ZfLs^l=n6NP=B3+kcH%CcG0I^aigHU:CBs(]Ys39aCxQSL4Li^.măU"7a1#P[BZVXpO[q2AGV:I?MR^s)596;jXs?c$>ykHk5%nM)[aa<(1(FDVo2h)O9EăU"d>EFGRmHSkPEzRl?Oi8^yo+j&#2b1aCdleA,gE<n?F2m5FS4<bZ+z^Xh<P](#NTăU"GZm.o[K4Ma^7_$qI?w3]o'E3^sN\,3Yfn%Eo*H(&^c0^OQDbQ7m3SkqaZa8KSEfăU"vF+*Kc>YCZ>^ZC8eRX+GM,bis7Zii5/M0=EFm=n0#tl=UO7h.amw<-K?y&-aab3ăU"3yF5M\VV[*a9BWTTKN/Sa^W,<hOdC;rfBrjUhVPUB+43arxZGeMSWfOVtMdTSstăU"Q0.;''/_zPyGU$8gWp4<DXlO$%2O]0dSUS^?;jTZziiIwS/W7Rrs2p7tjwkj>rGăU"r605-T;^M%U?[mfq^j=J,.^UU9vcJTeL_Y\x^<J6>Jz6pmZjIxx4wALmuO)GG5făU"gswAqk7Q[gmJ>BDM4zVZSUtHK6/C(.K5YSb23[Vt7RmIsAQ#U;qCb7YiJfUs)efăU"ARUb'-u86;ZeMOCVV.tYR#\9My:eFuErQg;hqHW\JVKF::Y.%,&Q=Pii*X0p2:4ăU"R.RI3I<_/OOmKi'uwsv?X]3h(:4:j+Vw&)Yo/SYCjo9Ogv:U4B0Sti6vq]lhlt>ăU"eOR3EKc,>w=e#h+#9QioSh_YWM^(Y)0p+=0DUbhqckK0b6k'UFrK,Tuid6sRTDLăU"R'gAqfEX&02e%+eP#WA3*honFMcHOY((D^??5GFfOjShGG<0a#O%UjyilT(0er?ăU"cLKWP(B-wvT*+qN1;l:oo'4jiB_yH_^J_8ij0[x$03LVXVpH24A4:K][#JZ1_0măU"1jEie2N#TJy_PJBbE(<Dr^g#Y%n[C'\/<??FIk^%^jri<t6+;kQm3heJ[/5TetMăU"hZiU%Lttr,l.'31_u-f%(4dMESmSo9keKC>qxWPPL$8Hj4TJ-<1GNOBIVej1F.dăU"(04RWBjy2qo2OMeup'p4Sdx)Kqq.AE_6CC1hG[8323)9He$vIbYG=,yy%0m8,-/ăU"hOAjsDg%Pw)'%iA*1uMD[VN_9$^:.M(F2L+9l-SOtoE25339NF)uu[?53S'#ECcăU"_*4nuK4>CGAlE(p73QGs$hmY^i&AMZJCs9)+utY=-[ZLKV<*6D.ogK8/a6TDAvpăU"Lt$FtxG*w,bbc9xHwm_5\Zm0C*hLG7Z;/em-gS5dg(9VbMXN4I??P?Pm1eHp[8>ăU"]ji:LNRh^0-(\IYdDUh'=#(xuD^GNW:2#E<8Vu%^R_S?Z<PqQ]D;L.9#77ZGUEzăU"S]5FrW[T4+XghMoS)$y=4Wh_>Jg'*b9C2UCGVr3\r]D_W]Q#LUV07eMEKw_OG>GăU"J9xInk(F1[Mb5_UT)&%t\.KK^<dY<-,A44/q:BZ[Zvj8e',o.sfUKhHXCx.hZm\ăU"*^%[Hr$xm:Y,>kK1/e$cRYM\$-fgX<ici4,0YlisR\YiUX8a_[2fAma3/JTaNXTăU"9*-iYXNKbnIT5oV<kA4i+9oa9j%9E$]QMmK8(G?/fmP^q:^YOdXc/jZgHWcoc/:ăU"_VS0O,/6=^AInW_*(ar9[UqV(30I(.>P3ZF-eEnrgsT>ZBRq3>X')$:h=bMUcgWăU"2GyBlCD3jD(m:IapUdzc1GOQ45;53LZ(TXLZH64PnhIAfb+ew3m1Z^$<,A,oCjsăU"UxV_N%1m-8g^h=&rIe?0McB>i.]QNT,ikg4jlIm(auCW3k%23_C(=TUZ%MJROJjăU"%mZ]rPY]xf59W:m*GVq*=8\ZN9x>(J]PQ*B+IVhaQQd-kh5aF$3AkbhOxWm#]AAăU"ft(yosmX<=0Hoc5*81zIoLntRVI4Shmq]hTsd^V[fta'Ic(#Jl*9\$38fGOUhaaăU"s06pDM+=d0hVx,<PvhWmqnY%p5IK\Y<NWi;\*,_;1[K(ZMIk[^Q/zRQ9,m2V*nUăU"<&CgeHh4OV0o88XoYEpR;%f0o[m<35t+.2WE4\BJ/qR6dW&:g]2IAD(R8hnTp-KăU"BNv.QNlr\3vpBJt+v0X4)xmINt^^kE:=(dd8SBB+_X,<_ZZC0EIZoMeegsqTPKmăU"Gm^bUmb7A5+.a'&R<KDu,42p]Nl3n0Qb,CX2r,)O?Xs]S9lS<QRiE36;OV$>>4jăU"fC+tOB;im\acK=\7gldkx3?VHf[nE('CYnY'%edadMe0Y[HK\CWvADbU.[2EaqVăU"GELJ1JOB*gm$M8*0=NUTB3GlJv$#7l\wO5V,)X2aqosNPDtoL*]T75XW1HmGHplăU"%DA2tYsf0MI^Rjy(15gIa)J2a\&%,g+8L_w8o^1\*hxuccM%j9M9p-q6IgaAgY^ăU"qnaaq:t%hs+nKRZe:h0JcCV?p2V/c1peGG(^%M<6=bX/qD#N3<8Z8QT\tT>JKS\ăU"_=I4bL)/1lI>%MlqA>Ui^8Lbi(niE^9ReHSNR#/AmOP?8-_Z<?[D+vB]TRd[6[jăU"EB(>_#_AbzBY_1P4ZSe,=g+#M8$3hpa<LR-8fky^U)>CLgLe&aQkrko#G-_deb;ăU"#;^bpQ<3=%(q:9n\rGO0v3x^MO>_lmrV7VtL?4ZXCsS_*vGb2Io?D#l+$1O[ad1ăU"-[Ywt=H0Uhe7;9Z$Qbg3ho$R:k_gE*a$KO%4YetE2LnkJm;E9*E2m_y0cxsm:F3ăU"Ga>)oJ+_btsCn7)aHSIoLrS]Eh(84C\qv^.jdNYpX8NNu-+EH4WR/LHTlQ=eV9BăU"5M1a1^Fp%$TWl3a6+At+=?qn$7_&S6O%J',u_\pZSaJWl7+(V.HusBl+%-T<4kfăU"6i2K1E[e^Os<T=k.hPB0LP0#CsafpZ^,_o7V?C9E7Qp(m$gukPFKn9v$H-1X,1<ăU"b_s318HY$o]V[(,4th(lHV^\S;,ssAj5)mB5HYo)8o#:*=T2dN<hoC7uo_nrdm4ăU"Dj4<O]fW\7lggZoWU2C6;r7&_rt:V?t%,2bi%/**ifkLf0lu=.dF4Ud7W*hCV:1ăU"QGut6_U>^&NR4OlkAF/u7-Ianiap(HNrx5mm.7]j4m,8_IZlmoBSPV875N5?$XmăU"M#W5NaGe&?X=VpZ:$1Hw%w1/eB_LCmnppm7,.[7f=BTn8Tx4fr;NCcc1FR*oiYpăU"JrKxBm)HG(a9mNF_U_ZZ=?&N2<\XtYuWb2bwGoxdwxq&Xdx4BrNcQDwNcZxH\e-ăU"CUuB?WK3E:/4qRN8Y21.h-XhuAh+/qT[QXruz1H3ZnRUB)((-d_D7vW'y/.iN*GăU"Qa;1X\/0c\PbL&v%^C7HPZ(jxT&?GY7H&n.;Im(d]+gxgmg](Nj1o^p5/=pxk:OăU"Q7$>OCsN^Fsa&r7.\xVt(nlf98Sk5p%NAO:0oI<]nb=GoWCC=1\Z*U6wgSZ+wr1ăU"\hMnU:4S5x/bS^tZ/11+7mn-V4W0_j)DpE9618Le2\%vm'n8u\>^Csh:S+#Gi[kăU"phC*I1A5l%*SOwd(oVPo%.88(43_G,LT&Lttg%A)_&+tO+ZgyFq+GMBQnpjTQ9uăU"q*BOkJugP1.C<uOECrhj<c[b(B?9c$,mDrqNFl5IsEpzY-KCR777*$2uFOpmtLdăU"M?mXflF\a)?%KLVVYP?lP\hp*?pC8<Z_</]A<3MMV[I8).KZbZi&Zm*2lMMG.OMăU"VW'rN=Fe_+7CpE&cEaX19xnC7BvX[hy=I0qFp'PEZL$o6\7^u=qx0'<mL5sTN^tăU"1</3A&rdx*[zd_-jlJC0C1gK.UA9\M24gt/#;bI&am9hA<qx-1&82%8L#J=(G,xăU"x[M?MQ^*>C'N[)yu*J'S_[UIUgyg+Gn-omS(xh&7WW$pma6RK.P18)+K5'UUkGeăU"L'\CushkdSJf^mnVta-.[0u)No_[O#wEgq%4/eGOzS+Kj,PTGB$)nz4rTy.a&xCăU"_-romA>0mv)ZIt*nNVL.&+Lss%_pznHd,+Xh[6xGI.LM$chP=^CN&F#_[PGVD)RăU"o8u4ECv>e^/1sL)S2bOZ6F#A_kKG#8mL_2QG3>/24\F-WC?VQ+V1^LpB&nU%Np$ăU"Q]x%ORs%+tFuO119^5KLm=HmWqODklf4]Wp?Vqq]oa)c.u99J9m^KFdF8aUJiSKăU"FDGPBp8[8m7bR)EQU7VaLAFd(t/RxZe\=dU:^7%LrM.^>C'J_?T3f8stnOgxOhcăU"oha6N#,N5K$5]Q-[G$_(&w/+RgW9n:u:rCYlMIxY0xrnr0,l#O'UJ(skt#X__ITăU"A>6YG*..VmD/:'+]V1I_^BxV\^8:G2IDu7>nHQG,->P9?md+75-[cOZgrrkv$eHăU"2CE^*stahQQ)_U4sMc4'E3=XiiaR:;_g+j3mD_3qn5TN,B7^<M(VugCmau4u/+năU")$K+w.7u-4\hUg*nfV+xo\nPuHr,6A-Ow*fRvo.v1;GhsL4s0<_1^+qlx8L?s_xăU"dtOd,wkF;q^w>zW4EgENj0g4?C,834scs&[xHsZb%6&dS[?MXLnOf]/Kod,cdh2ăU"cpsY'a8ED^4C&V_BA,D?W7tc.Ef<6BB_lq2y&\cB,&jHno9I;>KRlzSSq'I=OCGăU"F#bf[&cE;0d&J\)\+uaX#01:c'aQUr7$x_KRX%in7h8Ao%G)4EQ8^,p$Qo2oU+%ăU"=>uU,W'8'_P.QcOx#99v5LLBY7<fgTBsh^yIel(4sC4LoU[;<kn<69B3_M*ERHmăU"_6X7k70=nsZN*S'-t)+SmQuAb6v$Hqm>ntUZC3wT2s<=1cPkVY9ZdW</:D3Io>QăU"ix-f82eUrGW>P,%:*(qF%__P(ci*iZ9MbEKjkP0tTCpWJ^fqWsf4dPSEgOW;pkfăU"32GqAvy^+<+mKJNq;o=h1rUC#aqWe_v#j$$7<fsm)E/f]WAzo=IiiUL/gUTo'gDăU":ARNtL^\F$C&M2]Ffa8oY><;tnM[Vvy#eR*UM(EEl#FFYegcLj6,\m)ufwT3V7năU"*;klYZ(apdE7uPnfkRsi't0Zx3VK$t>V4.0>Xbpy$kj=>I,ecx>-uSW;&*M)<6făU"c+FVV4fE=9Q(r=$s5jiImcywH7hquzuO$sqp0&l8c']H4U9W:3)]vww[544-=>uăU"msMw?j\XY8^AKv0LFmE*cZNvgIo<eQX2I.=)VoZz\&ZOaU\$\;iBWwB?DZkc&L3ăU"lE0qXT59.4'uI-lZkzQD%zZI+Cfz^\8\sGkL6>WCSk*Q2l((m#;XDisy*'a+D,tăU"Db5Rn>WdBXK9^h\&A0Ycw37E5a[OiZGk?%&rtyGxl6&(YkJN(<K$VDCb.3wCu&VăU"T.s0-.\u&KBk]St435QTp^):T,n_bZ&L8p^YS$/UD87./;tY)O/e.&6E#wtUvxUăU"QlQFvRtA(Fj;Xm4_LG([3ZPT1^ImurFL%uI#3GG+X>CD:tgr(5)qr,pp(t$77^\ăU"07$_8#%pW2Al5(3$g-t528hUS&vVnu_=IQ?hhEM+dN?wuWX9)c9?3w$QL.wZ?fWăU"lQT'jkASk1?Qv3S'T6gsHht_bjT:xa3d7qY2KT_-+ZyPC<L<W0>eDE<mNCP\_^tăU"%t&At'3EL,&[aaNo_2H'TE^Rr?RRjuIC'w=gB5+zruSrGS:YEhP3XKO[UQw<6I(ăU"GJq,95&hHU6RQiNZXh\)dd^/#3N^sH8uc9r4O%ix.X7bb[<NNwbkO'b'$cR+ZBxăU"<c]s7#($xFmwcSuQFQ&/C<s:?YwFmw6k-oK5?*/<Si\wLV&lNHbAVfr0a4BV)LQăU"s.5:IkIQS)p9I,ye$2#$SuVL-No31\ECA+$avHuT\NB43#od#34EnazVL9fl+2făU"+>:[bFrF\37lE3atFM_7c]x&H[ndQh,(/tB[BE)G1+2YOtPZPt5S#Iq$0DBr-v?ăU"71^X?3HYGiEJ$Oz%/ZcnekQSP'(*Ipk3,YZ:j,Lmst0gsJ,:a$]#5835^zNs,EaăU"R'3(Xaj%a$q1i?d#P1oHM83/A=LLSOgXaPgr1&%/DjfQ-?eiN9Soy$OnrAb^'?OăU"Xi8WAa9b)I3ru'I^oxv:.DmzDeLrOirFyB,OiZpxbh-Z$8.^5>h?l_iTGnBi3*JăU"D5381)iDVvgPJ0Cp04X9^Zl00lU77j$T$72gw3Rqs)#;iY'X:IZ,CcDlK%eAUFOăU"dOmJ]^oH5h^=R>rx8[['&GBy;yPI61gAAAm=$YPbBO1Xf-cN^Ni&wL,/%OV-23:ăU"-MH/WP[3t-^F>\g5PxMs+XZ%5+?.^a?69nRGuD$%/9bVI8ic?o<BNesv$[Dw21NăU"29Kl\^<(_k+0f'd?(*kdX%kO1KYk_1P3p2q)FVKA+'br^3?D5&/\[s((XNB?wWJăU";1%.-bGlVUg-AQ'mu,MCVIo7MlV:[Ps4HlxCulkxU2,W=75Y9oPx0R[RfWDbno_ăU"u?uN<0_%3DCjoXVapOmSKy(<G'1WZS\2*IN?#erfDql_w0^6mJrl<D(Mc9B=g#(ăU"qK1h]4>x^RkZ[lEjM193oYJTJ5sNBZk=rq.;37SWVK:rcD/gaeOxS(+8])e)G9FăU"At^7j^ujE('<8Nb_$YO/O<OZAt-4Zm%.jhM]7Z&-'dFRRc*d^BRK4_LLo]X9:*qăU"%v&DLq%](=k2fQ&1iSHYQo/ufBPWuC1WqQntrrBa$+%Jw4N/56h25lH,/PZ>l_păU"V/jYV8b,tXeySLtW:$Jq>KYL=CnLl<3)i^Y;&xs..uO*6%(#;,,FnBOQXu^bjL?ăU"OP1,Y+]n-$ZQ8n2k3:CcZx,9^iip7PssA6CCMtxu^?*dfk%90(grW]xmlQ+,O:VăU"YdxV/+MQKVa\khuU7PxdVbABRZ3sSUMessJy\^W_V:6i'P6cM2i0\kVtuY#u^AUăU"l3Lrr<gfnO]DU(#QqP3YPC8KrlI0h9JFiDkpC3.ZaX.nn.7D^K,0s)XRm7d28drăU",p.U;9k6XxZ?T#&V2DBq>pY^ku#81^#q4Kb8'=IwwIV7CgnO:Qs0,*d\9iAoE(măU"%z;tBYUss$jpvWx0PS/ySy&,c75+q7i=jRO%AzIhZ'om:%tbdW2L833Tb8-%UMzăU"8?Lrv0CmOJ[F.Lu0_ZOBmk-/eRDO#vIC*-FD,N/#gi:/w<43YI>-kdx*2:QY-_8ăU"bf0&6nndl\]%3N&8,z^^uVT>qj2^x[W\ToW*vgOR8]+$&b:Ls\Os%m%.UZL&o3DăU"G_z)Mxb6M[IF^c-#uk+:.bh4l'g\]+%('l%x[ZFoI/q_Kuba;o<DK;ak'xwWuE+ăU"z4C46LfSO2PDP=S;P?[qYhRK5lA&3?_38PRq%<;KGQWJACGBSs8io<iyOG'?>ofăU"u>CxJVFl;g1Vq74k-%Is,I^mqOLY1_^?a/<OaFXd'x886'-6wk*H3ss^^*3c5b0ăU"Yhn/\MS(IAmDGRfmT-CxxpB*AS7eR/:wJ9WffDf._#l[3HWFS^#OV0:KIjf?_YYăU"jP*)*bPbPrCUDPq]+3McP17?[h(&X7*XIbTFm?o\ef99L=s'wpx%/cq1H^ArA7XăU"b\dUC7_%d'(ELV*=l=<JN)J1)Tbck1nimmG$Z=aa$QwEd7:a)6^4'3(/.aaaV#qăU")FIM]'r3Z9i^[6kctH-Y#8F[s)'%kG0wVGrp2qT(LMj0*5k:tcW6-XFfbq78H0săU"_kGd(j5q?xJQI,D77)Qfed_u?+%3=S2Dea\/Bqzl.kt.?Ph7'WrqIaP?0<jCm*4ăU"ji[W$-rBJ<dE#;%D-,-'QcGL2TrL5GG<L)^gbqb7YZ7n$1F:eTgiS7l4oe;z.rZăU"sKK$iw[I)MZ3zDXWmRP]%J$\i#2Tgq?^#HuoomWXQ87q?]AYvb>%3X/nej.Vd#ZăU"h*%2nkIcOC6oVw8-Q_D84r-Kv348#]<dGCmJbXa_kFq<G19UxTu8^/Vfkf6CbZLăU"kZqY$kdD2f_]&#J(AMFcVQ7gj.(a$*FZ\sU.bsSa7=VS^Aej+Cf(BX(iiaMW[8FăU"VZ)J&d;iRY^++Jj2]QQ\&0C9BobTHU+Z%g]F2-SXCgy;ORG\qW1m=>tS-vU&qC1ăU"HS(JR,T5oujD%)*F,KAB_9O(lz4m1*2kZ&H7,n%[,oumgn2o#e#)DnZ-;OPGOUqăU"0K//JPtIj8PDO,CCd?IIe;%CZ[.F.[32F7KW69F:P7IUX=\3<H.F'oI9hc)W7CLăU"fNLhLzdSrng.2Gk+)7BO,=_1/FKj6J^S*)[,(V%uuNKl$%ZO0oXuw[wWX--H^?căU"iVnMo0gweR'Ea(IoqgZffTFQ$_c6W%.kePH)NWr\]NZPznpUCip;c^'MZA[[5>$ăU"&lqTXqf6G]<wt[=]a)%#3p_-X[&TXlF:YkchOJYG)nlbY0QXrA9/AXaJD1?Ku1-ăU"^Z2Dx)/^i_2.A5&JRm97.msvbhX:>AFCki3GSX^^uNrBJt1jK(Ch&fOoM+a]*P\ăU"8t)k.'N7*4BpH'7LJ_j1Eo/vD9:z-so4&v_CY1V%(3J5/Qnc&,aYpb=M79]?;//ăU"b&)ll*q1;:g.bj*$l$LmO5_?x_fL?wSqo$tuK'$o7l4$Hw\Lc4xl.6i.rOL(tu7ăU"P37?8X.MPNGvQF1^ymU%F&1C3v;XazxwRIGb?GOfHYm2+VLaHAZFF,7&uMJ06f1ăU"\n128kGOeEie\VGT$9G.qdk0VMPE$*9[Ze2YAq[rFo,98aF?N^q*jo$;;'Rzr*JăU"wc;,JeF>6B$C:-Aq>AJFP(i#^R>RqXu+Emq2:2%E,ai/x/m)RQ5O<KS>%QDZ65UăU"f%[dG]i^5?Y-vpof$SGU9+Bxo)hhY81^uUcDZ:N)xHV=[+)%wet0./eY_hl\z7căU"r<E0(jUAK]0V9e<N/1Aym/Z(^>?$HS'UdK[pqskVk?5$0$1SSkHBLrz%,_<\mp#ăU"l^A7#Tjm<reP)osI6vs=un4Hoah_ur;o7ti^i>lfC5f7c=trS:Yt5oR3aHO<-,xăU"r'wqYC(L-sW.5a;n(38p1oNH$NekK?PBFPvaEaPa.m?SVovGu-X75qq/QA-Cqt<ăU"n_dn%3qNR4iHTddh?M+hzFWe?QzQ*g3QeA1?qQ-MtAps4O1hC+a3WldeF;3lp7QăU"_$=>6TgOsPO7N_;2O<4^]VOLB[U1,eQP8OHGx9s%JJIzu]..h;)Vw6E$]Ve0$vHăU"'3i5n(>H)edS4or]VvebBSAT'=+dsf&1#&rvh/mc()];<Zq6X$9MU6Z;BEqSd$RăU"B/kI/k^M2M#2c9Tdfu.xYS#h'Cs[;T]64NAcDxX[l97af>/tqt<o:,9mt1+^or6ăU"[GBXo:2,VH$D_mOUm;H(?C%+3l?7L#>Ein&3iD#);u8jv+vLXXUXx)YV&rBA_dYăU"HX_H=uO*RE/g8PbI$aE'+LkC(ZCF8%sZ0_)CK5b^^P=0/j<A=mo_IfL?c/C'oOOăU";f-?&GOtu*_k(B\2p](ZNKmAsWRi^gtJ0)<(ePvMxliG)?GOtT)z$h*<^#B]$LbăU":3Bk&M6CJvJhDDP(FPdQc#8o&V.tp,R&9WpbBkvnQ[LxWd+u/zc/idgT/fLas>OăU"^U#Z:Ztfef2vg&+Lx'Qe(8+ta)Yp-,,$kAB[SJ85CbBOQi8jWpP<zpB5jI1z>e0ăU"Qr:+]9^H*eqyfRf.*TuR_q#ucfn9#qma6ri.^eA1M>Z<Hax:&V\eI=tV.J&[T?făU"^kh+y?$ikYanHiZl*[_k)</Qw#fI#Ew-?OgQ_%]V3Ig(Ur-WIwQO=q$il^)a1RNăU"CQfT\NA9bu^Wo_S+?#1NAtH5UZ)Vks]T%V_.i-%$83E4On<NADpk>JI?GUHETBJăU"ZTbVpzJVOYFAudN;NKEu:kCRep*/#3IU0a,#bp6D5P'2:hP3*TSs6dq?36&lJ$dăU"^SFDA0B2SJwiSEEdQJ:s5Htr1GfUn7Z>ZQd\X<e_hlIm_uR'4XP#beX.X;-F3Q-ăU"RM[CrE05.okF)g#*>+2YC6$r/Muez*'*l9RcJ2;a$0'pnQJo65C\RqJ;wN[Ot?qăU"wM5rbBiC3MIA=\L+R_jB;ifroL9n-RSnl[e+/nNNq1'Fu42B1aJBT=cOy<sk7n6ăU"5HmZ(SB1SZsY.vne.QwnT$$ENE[UWh5N8IC]&O(T9NIc5(eIvNgdZRU0zeZEBvBăU"4RQ6'm[8.Dw&M\#\M:$sxJxq0b]b<ZD,rn<,O_s'nYE<7zqGUY<*PU)r-:RPB;kăU"lr'YhN4:uReUa?eJ>;I7Cka8V\g#1?'.^DPuhj)Eec6t8lA?/nCLV5LR;bom.YPăU"2K&)9SsjZ%+pr)R>DiGo2r0\70]/-PALVb^$[9J*YuwMlNBB1jRL2t^1nmc^^JlăU"_6q;hM3?x.KO($+SS>XH%+nVTV19Yc6aJ_M;_ua+f+2\X*J,Rt,_?U&MdQk2nRnăU"KGn7XRV>B<2ym'T2r2*nmPFobT-781KnJKf]8LpY8b_sYvxQ1Y\oT+QhH*e1-vJăU"P,?bAORMekXt_tux,K_'cpaKsa#J<;0FA%t*s$EN[oFw/a:&d]d56CX:U03/[r%ăU"7h.Rw]m*_X.0:QP<vqc]#<E[YnJ+h;j6RBe)PHr.*:($>&PL'$irjoBX>Oeh_vGăU"B+l[e,m1zoErE-6UxW(vrgk[NU3,qk$N1U.2Ge'p-$fs19krfmgyr5XNkzJvQYdăU"ta]^(KAm[W0gi(Knsk<\'kW=xF(Rw,(>:/t.Qg7v)<O*3y5GXdg#OU'aK*gXtq*ăU"nCd;Gh6U]LT_3(kEBfQccQ]?m*f:F4rbqNS#Fou5t[0m5x&rZb;2(c\n3cpGVM8ăU"3I\8;Ue't4RpO?*^p3wV%]v#Fh2gqmEEtiRkM9i)EiDD&XDjW(eUsLMW[TN&AJOăU"vAC;-%))a,Td50qOfdI9\:0%nIcq(BQjTu-U$P4C3:4JDTSbnb;f,e'ls'Yz:D>ăU"W\(Ei0m^^d,1Q4Z)4QpX)QHpQ?gB1x5)HQNK.LQ?2Gu%GH_lJZ0kKm*X#(>dX,<ăU"wrgkKzBs.#&M9ngl(LDH419m*pHG#D,9:5vMrSCT=UCj\PLloH[q9[y,x;qA^t;ăU"C^['=_$<\A\:u/'r.[yjZrwStoqFKUaKL'95S>;=]4JW+^73Q18:uo&-K,Q4C_'ăU"Q6FpPb^;,R'qi.[xs>)dt90sw%cs$\2qMPxDK-1FS]LC7kMoN5,ZXH\S._V%k$7ăU"_NvQlxa04dEs6mq&t9/HRel\Y$)xJyYa7<XR++P'T)K]89<_/cqxXk/<AmSP/ZpăU"adNyolFu>;<xR(6l_:.X=dZx>J1Tdj&n[H5u\dv(l\;+KoIO1s,gI-DTE>xtUsoăU"Cs^Y*wibR\A]fkGK8=9P[4F.,Q#VnYiP[tq4iDOtxMpnr9CsalqI.L5n.0lxA0jăU">_n#$J.j%]O:,uj4VPTae_;giHMa;'/_xXG6q-[jEPt'J\L=tMIsfST,(KPWcwiăU"/qT4wiO1Y&K.aDy_2P#/B89o]EB(:_x^$WHVO&<N'1M/q1mz?/?qm8)xbz6VvqsăU"F9cL71uxB>1EeFWboS4of2O//E35<L'6(8C,U6*wcps:W(e[_Yd2vb^:/SC%9nIăU"%,RP9b_sDK:$3ir6&>:;VF[</6Hn\x-4AlVj;TG7;JYW&03V<)8C'g+%]w,w(?xăU"AcbRV'<.iXy,nI,e7%wXHHA;=j7=Aen\+nhEFDpO:I>QB*e8KR_4As.Grs]J);9ăU";aK1B6(q-0q%'*;yngrE-K8#q#p>t%OOg(Ki-RQ5aGq<]4E0jpRex#jHg,=RFvOăU".\.D<Cdv(ilgO1/'dw&?[?p]\BeUcexpD/qQEMVp-&TsEYfWI9iT$xvAP%ES[JzăU"(ceu^xtrgu8vFAkJIlO%\[E2AlMZ$/iYUg6P[nunp*n(3_(O8=7CmdLeTFU^j1căU".FEL'U)vE^PbunaF8&:X)i&XmdL5okEssto,HMVS],<r=f:u2ClYmzdrdlZE5G5ăU"H]&qd%9-;CGkU)yt^SyR?1Gol)-eLzl:2:/+Omp?RPD(()G5L#3A%w$s_7t%uDJăU"x+-<[aK'9dXPZa3i3HLQ\o/rae$.EMaP/YPx?+KIECjDB3QHy1Vd0G*GYN>-O8UăU"k\qNH:=-okc$l-MKc*x?\bJldbtg]xaTlNO.ptDgFaCWr]%IE(U&$afZu3_4B#_ăU"+UZEIH'1D\IeRW#[P[7m<BG#QROfu\4BlO)SDO%Go_tXeD:].u1Lg.X7N;hRz4]ăEND SUBăSUB VBăU"J*K?Q6rVSsK98>a+$ba&A4HhJF+a8_=m-a1'wbOkrof(?2R#7.+M3gE/_:nF8H/ăU"b8]1COT5_v2eZHu_\oWEx8CnWt+IT;:<NI(WH+&nuRsl>:opRNo#=qKgTRS,\iEăU":Yg2%<hL5;tX9YFVphn4%$YO4uvNyG(#P-2NU0J%R2y/0ULfhCL_*F($o47GD[UăU"^:iIgDrqxt$m)=\9AL^gpt7\LN'IBUS02jT#t[F-uu8(pTUtKuEOU'Qv$nZh60+ăU"yggbQs)e,=\UE;PabUgXNzg<f4d.H]lYs%8]$Mi^QkkLnnO6[)T<_r4N8SWD[VmăU"ewLooezh2U.2Xr7ASj;a<*sIX5Q6kz<mbCN5(n[FcAxp1Lyu3\:zgoYYkL1.'j&ăU"aH9<a?W)I1m8d<EpC+B/c&s1[Jg/\tf1Jy66x2\>7Z8S'D=c/w5<rqWxXovKAxEăU"Np&M6xYPMJOpm45XH'J\u'/+Z5(u9=3DxtFsML/Ug2,qAmvyb]Ekl^<x8wX)FNeăU"oQXudPK2qIQay]JdP6qyXu<,v<',.r%G;&NZge19WmiAjxm9=>cG:rQVXl_J1[eăU"WChs>Un4^S_=$$Pg,=6x\J(?)n<wMbb9/^^F1Md3IGIWf-[^RdJvDITxJfS<<xIăU"MU>D3B>*Ld#N&ORWvn:jPA5efu[C1FI=1f(8L']qZ.5KAWf;i?3u6CcdeGRJ_f+ăU"V73?>.WX=gWxF0c8YaqJ2/CK00#nG2kIb0mSYZW4$^LD&L>cavBb^)S%ON<pqu0ăU"r\ZlM0+uEm>-GMB1rqzQCu^*\UXfwThf401mu;bqOEZ&LemKAs.iPZs?</Dt6g7ăU"6\g]a[4'jRDUja)\^tiYo)cO#QIZX^=W8KrvcPj%\_t\,=+5.N:gAMkHUVaw>/)ăU"Mz7So<mluDXum5Fu-O_unVSq(Mg(QYiG.a=jZ%j\I:mSEc'\=Frg\0\yF%'phAOăU"%W$K]%aYiNF1B)g1Dny]s+&HUc4\duW.^gV,.E1Pem:eYh&/ne)T)4WqP-<b\>TăU"Crj2<NohFfNq81TV4Rak[PWK:hi-:.-FnaqYel#fND>'Jv<pbBbfD>=ulAO9H[=ăU"x.J2h^v]*.ACMxVF$45ue4mKKS$n[7m/XC<8F%=Qdp)WMhkquZA,n_70:JhS_'RăU"PV(#oOlvVbrliZ.wlsQA=<F/EcWL?^>Ge/)YD?Rr_^.s14K#c,v--pA>gy\.w9_ăU"WN.=M:TqfE:*T0DlpC1h+[t-eDM_Pb_#DDC.pblvZj(<8ul.0i#GNB$jR7:UAMUăU"U5rV[kcZ>HKwjjD-lG$Nf+d[XH4t_MUtRXwN^\uMWM3=CU+3^tF1tW9PiD:yZSWăU"V$o]bq<*p.>5Flp.]QE85R?k:$3,f)Th:1-h]q68dRnEr>5YH\H.boVvA-'iB92ăU"=;?wi[%;i-#1XWf+iqFYeog*J8nBNovbDx;jPhE8u#wpC2u:u8ZN?DsXe'oj;t*ăU"7-47[Jt8g8V<t_[?Wj#m:[dnQh$d4ETguV%jBu>OBTQ&DgQeEyS_:Bdu9w[b8$9ăU"ZFh#5NceR_n/ps3,=jb?riHYA&+mo;)N6$\>C8omg)GtL50q0%gxF[(z6]C)#>?ăU"]N3P%u+gH(mI:o7;#UGLq7p5gq[R+[V1e<J87Nd+[B94.OUBdvnb/h7;L[[Q^mGăU"4HUysR)VZWk8AoaJ=Z'AY\FKU&fp+.8Nm#-sUrNY[KFM%WO[)1u+9sW-2)Rm]fHăU";uz,t2d7sZwQnZ[FFcs\=2_S,Tq/gFi\)Ul$4:S_rwCw_+OMq3i^>eoUC=N^kXwăU"(a1)AWg-t<%Pcuc1nPc2kk'K9_Y\L(^c[44Jebx$s9BqEb:qzWu2/GtFH%.7>N%ăU"kdVhb-Iv<f2.5+o.wVF6PL$%tkEv7$C$IU1N/.1)vpi2^#+PustpXS.,PvI\jB'ăU"f]ge<+\smsiYzxp^g$KJ?$&cwrVJvi46/]&'[kG*HvnQVk^h4^p)69Z6Z<Vds\răU")ZZAZN'TU^i5r%.qkBEQQ#S#hs2F^^>)&vg3&rM7G$k,BVXU_L374#?P\tY3X-KăU",?u&8Kf:Rb*VZIgr#9YH((alZlg&26XLH,6q1?wr;S>v:g3KhaLSB$NoR%_?8w,ăU"z*#=BKkl9==urw]/GX(w+^oNRB[=Eb=kfX-*FO:UM6uq$ga(ntEH^n^qJsAZ]14ăU"-=IX><m%O(H1dl%Te)c[rX#s3(s5P]6M+V8si()IPw>((aV)]a%>?r4qdSPY$>năU"Oc6E4q,WH=.XN5.83J).2Yx[&*'.0ISL1HyE-.n.Q*cZ*kN8T1^b_Z2[9JDh##găU"Ad=ti,Ws+%TrtAt*rfHDHw[wtF-]N[<h3EC&hn3GNM=f4U-+DB=q;WbVapaf24oăU"cwH8TUixI]Zp4tq>ZK*P/oo,_O)%[S05Q#iV=HGolbYd66Bst'YQCvZ5hksh/)păU"VTb(*('?MZR.]+EIV++VB6kdblf4nn9:nxd$m#K>CLzRErpGKNL&LjIHB'+l-rVăU"BvOMDyFOYHhDa[T8K[h*=/T]>sJ?K<f+MW;:dIh%PjL8H,]0&%M[c8lS?$tk\d>ăU"KnP9sE\<=fWw)sY,ngfz(gD''ccI-0W4N9TMU\+88N2Pkf+-))t(L_(1a,G?kK6ăU"ZNIL)1qu,1iZ0l?KoeBH*Vu:>$aJCH;Lrv2Yd)WRcF.yFy;gGzVHp6l?YMUuhYPăU"%a2BGA3/n?8.b_0b=otJOgsNnL$^#EBU4-E(sg/J[ziJt#%iFV2.oC_.X4bSol;ăU"pA=JDMPr(uh&31(IYZY9Nh,#st6G*fU,]q5p%/XrFWCZ_/NVZE(%>(['pUu#CXkăU"T4h-g\=ln0ajZZb'kY4^Z3l2\4412CkOpg/,=tu/]ggELjsm,'^Kc8+#_UGe=GlăU"a-R+Bd=Et_&hYwtXz$:k<gm0[2C.*#:tKQMR7ZeRo4u%]B,W++;eG?NXx_Db+chăU"c'Pl9pjkJRE6*gE^dE?tC/ufx.eo*n6'jqvpgW0&%TLsov/Y>)VGXTri:,(td1uăU"$idlUhzm*Bm^$MUGl90i=<4N,_ZS:dD]neoxo%dS7&S1j>V'JB.;_PebL%1$RE,ăU"K_qCC%WQ(tN.DCq]/)X[aE.:rF9ZPPtME.z<b4T2hmtZd]=a/e%GcsuwE[(CXMdăU"<.d*UL5_kP'ZD3RErm:;$GH0td/RIbigMf*wHms$$4Xuf:fAh(]EdLF1YVdQG]eăU"lx1c]0PLANX#e5-rLL$V_mF4_8cxU]B(g30fk-:x)V)E2CgHp\ZG.Zd]]BqGSxXăU"VvrlVQ3*r#K-4/E16/,cFE?g%XmkTXzeZx+)z=U$_,jL(;Cn5^5HWek<rdx;?r9ăU"]KX_SM=oaiwu,sCZV/&tKw\nK'fY:NiZd(FCABw&+d2(^kFrCd-\)OeKUHTty;HăU"_P=L6V[uvcn+e4QMeF-BM[PyU3SjY*KuT:a'llTE(;)d5HTBDKYQ$&eF#ZPMF:uăU"Wc,tVB((_bIon&,n:bb&O;G3XlaB<Ky:Wg=hJfL)V>]KNg3Z?U<;jX#m$ZZ?4W)ăU"64b'?q*n9Pd]A<Bp0Aqqave;AM\/)iY<X)05*kpP*0ASfsL)P=d8l8_oiO^L+,săU"kxf^=UCkQT%.i28f60YuAtcP/t/OJ)#98Ky[E;FWIsm#o<U*:5FEJX.^e$f9d-lăU"kVRT$kEIqm6<#i9SJ^RZvWA4-L*St,Z;OZmPE/R6wIHUtx)[V:BzT4HCIdnOVwyăU"E\nGP-)KrM[XTg%^jyk(GfKwL[,pJz<*hkSE\l%;xfQ:2PLk6PHWVr7DR=+W,_4ăU":;6JEMx7t;^r'tYH:xft^'wr#h9Z(:Cq%I$17]AG$\6lhKn0jDSEw<C6T_jtJDZăU"/7[AOG1N(C^qO5<,W<43W#Sx-i)pq,nJlw:Q$0FIl:F\5PUv+2J#C*4/0bUV5QTăU"eFf/.m+Z(gCPo8C\a[I34X5w80T%B850U(J2(7GKrnNbPSvnEI%1c/_u:0Jx<QnăU"V\^j3StCqReVgiP\6<uT+j3^M4,2>FLVaPt#-*nd8]djh-4B=3[BJlQj=B?*T1]ăU"$l,P>BUac8<6g/:<W0D/VlISUDtAqA%nhYUma=U[BQA%ul5nbb0n?X_'QQWEbl[ăU"-Ml2?gK?dB8oAg/FtJ:$F7yV/bR?V,%hm<xKT3j$[765uovrnFu^u*cwQLl/gM&ăU"GBXxZ1S%CJk&5b703BI,Wk$#.oF/h#[/7)O)'MO0*4i;xPh3BhH%6Ptofi>a+raăU"Bmsr#sF66gbE9)2/&n3%9FhFeM-r^.]$%kV1l-T>b91,#rX[ZPQwmAQ[fNlH&xPăU"EEQ(P<O5L(w<&222VLYX)M;qM%7Vy5TkhwYB50Q+o]Vm]r0TEY9GB(SH'<7kRWPăU"c2[zVU42OvN8c$,G+q<yHKht\ieS*Cg+ePZ?*?mRFh3z'#B<Y%V3h..RmWh9??$ăU"fYYJ5o-b-RT3K%zy%qT$uUL43(E=JV:5y0PT=BdURI'4XIEGub[>H4d8glMMXOuăU"sOAZl:i5jeO%?>vSuInK0o,I^pXg4;N*2VLF8Td<;:_<(Z;_>'/)+C+RxfKQb<+ăU"2shskDHM>>>R1sO%H[Z8A7Y#hNYIYc4if5rh[NRZO8[0Os.gD<VW>P^UQDV><<&ăU"el\_[V1cx-B#r0O_nqQd'ljp>wpa,:9vk\WsW<J#p9Uu]da7N$13[xNjQ^MsT0TăU"TTT_(C8M36(JHXip:-1D8MOehDG)h7vgy1:+HS,bEQh:SRI.$oFN93r2(6mzunHăU"'f7%0/PwgTvC'DfT<sNHxgS]-9=e&8AKnt[bRI'Z&Ot*ImLC_[q)&r^^'':*loJăU"#.nn8=UQL]5_m<A[3p1hIDYeJ7PWqHgY]\uevdQrJIp]M]iZ=esdI,v9TH'ok^CăU"K5o:6JaIv./%\_ILl.qP.xrSBkmVRR(C\1AILumC&G6MN$rQHI?tH\3GfLqfc2$ăU"*6.es:22s8R.e]LY#p8jvSpKEkr08B1Zmw0wN6pEGYLm]++_eQdkAn^nC1M*:vbăU"7NOniV5luo8CcKP;)je[#E8xY)o/jgVOd3I(hiA^'g3jK7g-K,MO).WI3X/c:i<ăU"WeeE\7J(U'y<.]jG1o0+_y&JBZb>IQcieNSmfW3Z137qfu&lPk7<ZjcJMj?.:G0ăU"KI./lc:R9T<)FI^H]&mf[0WI+FZ3dEo7Q-QuDes9f:Bn]1K'p8bOSN;P(W]%eteăU"ubCw^sfV:8Vx=n6)w4JA*WK(b>(kqNZwH2YH>fngrkgqc($S)/u>cVqI(%p4FULăU"Xy.CkCnZC4;cn3sckaIQw^?kXPERdRmpkb18ba[E(K&+ZXck%W5%o]'%3A>Fck^ăU"0)9w8Sj1e;*MAoO_'bW<iV)ieIt(,7l<[/$Za^[1i_$f-lq5b\uYi;?Ssa_CB^YăU"d_wG*mQj\;Y\:3:]2,$svUh*<S<S:relT#5vw'W&^0dO/=-jtKO+rET8AZ)$5:4ăU"XZB<\+JdP<AtJoYVX.in8B-.wb?lVRYW[]ZElo87sJTOFN-wULU3zDhsC%)8mtwăU"Cd<eCbJkI2<6c$.jDXMGeX1&.>t_SWk$g/eiO-%McNoES,Dn;/#Yfwf>.6-H5-eăU"795n)A>_m*+HnDd#L*StdAt\=s4GVI]$&mRP#E'P[EjE;7vO6]c)nWI^v=+Y7RbăU"IGaH:3lhJv(5l0%3N6R\2Y)#4iKrig%ceYr;]#>ti[[LcBj4]Jm2m\Z[0K];AFXăU"M_jA?zeakHg/U6-=v,_DX7r2Ws(k]#)ehk/<:a0R-7[dO\tHYX7hymsoV%VD4TDăU"Q4agO?+cacpQ$-<FGf&jcB^N6#tT\65YnuOAji\io1bJO[^=pu*.e//'E[d]i?OăU"+N#0x,)+)+Qf6N'HBGA64#)*,ws%JiJxA]V-(ciqwj+'7lc1K0^.WAt5Fse#sU]ăU"Pt^?dEi;,IQqawWu*Q2%';RJ4D24.3dB>B2G?[fDWoIAD8uqvm<M0?+Q*vJkN/NăU"]MBVKq'g&zz]T\\1k_9Ff+;^^_NtQKgYKgb_^tSa9$KtJZepz%7gMJ3JL0JwuT4ăU"RG>(Gn$zNenQtZTM/PR;m,BNr4&x&[f-h8v:F&P.XF0]j9oDdNR,9Y^lAeLjF(xăU"n[&jPFxq/o/Rx]V^-h;R0/MeO;>[Es0Uo41YW83o>Yq\yKn)=+.YL*/7fw7RtLWăU"gRRF8v*bfADiS%c=ClpH9OfZ*+^9iy7T:1haD-rUDVE[:Fg?<3</$tNun+fu?cHăU"pQl[Zq+w%YI:R/?x0nrrk0fw1*x^=3jTtJnx[5ZjalQkO)=P.%pT1bt1=$.sfh9ăU"$l#;VXOc:8#IhWqr.^4DT^Ik(6d(SoU^:cL)YKQ]hHl=HUKv>$jt0bnA,c:O0%9ăU"<(fIfn);6A<D,\?*Y1uG'5&XFptF=o4hvl<w2[&%dz=9Pz.thA3mNf.yIYcZg&(ăU"AfuBMqNr^6?tu3>MQQnPDG(?^IVz(i4L3V]qMdR.Eb6E-\gnlEk(u*hqB=?Kbm^ăU"Qw_(l%fpUnLSq188HQ2rkzpxm-td(VtZU_^iLX8x5^e^#&r70E7QO0PhN5.XO]căU"8Nywa0uDPDHSTIX5#ii;NEC'JDuV4.#$dL?t#ldjGSga#E'DOGL-#68Hy-6'M.uăU"f3nx#HaApT>YTr,u4%ONwR/deftXoxCkNER8r3N;x]<Yo*,jidT>tXit<[y-(X>ăU"AcVXkq\ztvvkNHk*w^8DUBUfn1+gb(?-p4T>D5V2Vj[jt3R)(ek#W<q.sjezTSDăU"pXZ6*+83(=bI=685oYO<2JSBo^?)C<0c31<2nXO>4U_6dY8*kH8%Lm.XzjjZYPnăU"B0dDERvjH6sNtC,*1+NE7hR:)v??Q<f&rXtcZOeiNZ,.T_OtiZ$>I#q+Fn>)kCiăU"i,Y\nK4.dB#KMbk.hx^]9>^GI6>PLE*2yPn&t^x)sFUz1l8v#:f3V2)O=6H&pNQăU"]1DXmWU?ZB1-Cc<O8j?chj^)%q,$%X*JD,#r'k,rh2tt*Ofo;f(exXUk^1u=aLLăU"?t'0Vf+El8hMV%+-/OksL*t?Ur=aW?HN0-%Wf1Pp9WC9e&xd&tX]jnjH]5Qk>3_ăU"?n<wmJI,)]r#\$X,j5XuA8$Jx0sm0iFPb)kNUM%6%&0D'qt[u?N=4S#A*GC'CE_ăU"jAdM:1Y/sf6f($=cr8)<L$Q:x$V&eeLU-%rrA&VwP&(^C;a4X^&F'lW)=jhX2m/ăU"bDJmgL/z(*(RFzKFj=<&koPphx('fjAp_oJt]vYQ=x^:Y-vPGUE<e_/o$7-oc8)ăU"I'OVdrEi:Lha.KGZN(^Ej)_PfW[.SnKLL'x,h5aVXafGfd]/08DFG\ZS:eKraO(ăU"Hw1K\=fLGa<DSJmER&WkyS'':p.mE1mMARq#>?Zx#:B9Gq?FQZ03g9L<%8.%lWOăU"dAkFK+L-eK+En$Kr\U21V95*u#Qv2M[B<5teZ]8%Xc:C^=3]Xx=r=64.t.vk)O#ăU"I72vTzfrff,sI)PN+pcexb_s]&dB_UL*dLEmm(NB]u=F)s)]Ao'OcJXsOFL9hB+ăU"o5Uk\;QHPIMYoyEIoc0G[(Y[YFU(2)/u_&KI.wx/]*wa]NjUJtmTCxP=9Mt5F+]ăU"&nhG2j]v08,d]yxQ;>Ehf0[4EaBA.=53w&WP>u$F.H4(dID0sU<.+K[]K?J9?,băU"H.O_dOZZD&>?QQuXQZ1D2q_%&Jva27KHZ0Js$VC3Ef:ie4U2aaO#]9s;]1rviXuăU"4o%:*s/L=ju-&.JFsKL'i8LbBYxu<vK:]3,NM;lO[+c1,477.xJtCQ\1rx:vrr<ăU"ExDlj6[H<&7V6sN1n/5Q$x8GZ1um/ExDq[LX;k+4LcnATtosW>:'0EnkR]Cn*spăU"8[9mC+t%h=Ekxt)ntHrS=-kNdmJgwau8U.jGTRm):+eBT%tY$RyB:j3b>2==1jxăU"X\?ETgO-n5n*.9GES)V<<+ZG0eu']3^O\b.;og2kxj+9ErP?QC:J5y%o.-ToY99ăU"18>t^(uHZq6hM\Rs8x1\AhkPNuniDrA9j7%+BzVUVQXurKw6fXM(lTbiVPg/7YYăU"[eAzuA55%$/^>)pRO>Ef^DN'-Zn9LLHpxHL='ii14WlK9Mt0'LK;1_GsO05glD1ăU"MW>]xW#l]x9)Mq)]AtBMcM_K]+3Ab98F4]E6VtKt\0ac1Xx<,f2fHu8)unJH#6OăU"P.Cw4'vRcM0krQAwg7jNk=K$(d:\u<o*%ckPCc=MJm:WX[+sXBq+O$qy4%x;&4CăU"UGv_r+]8#8np.[aX'oKv0.9skk9?>_xnVV&E+2,tBujj&D<Eh48Bn.=]i+(G-DGăU"c,8#$u>I51;,/4E>,xTl2LJl_kSgp%n7J<[BteGmjGtmaYMP*\a\R0jj*d?W=mWăU";F(V&9['k>U,5G>to;Y6H7s>3]b<Xp7'N<Z,>p=SWxhqN<5$SrPj2%gW3VcE+u*ăU"(3BvEJA3jJ.#XSxg'A,u<0(1FOoQ(oHX<<jAmOdjF2R]utYSPVU)=aJ8M*f/hqXăU";DZ$)Tm;?9GquCZp#'nsSxm_q1e<#sX7oR4r;9OR13[[N8#C$\S[1lG;?tfGNtkăU".P_<jG'WLPp0c,QAGmm)OZOEDzs5pbrtJX)$U8O<zbp(>W*s=XlLqd2GhZJh#s1ăU"\EVRXZ0ot]A2pu<f(sn'3(Z(3B8H7xlZc?N)(8mM&1C2>-=$3u*nb6xm\Dl7UZrăU"gWRmX]kr0G%s09fTA5C*k+P:'ZxjL>Zx6&6J8,Bz*pV#yCLo?1^U-hdT2TOA^.3ăU"H'tWblpKOWhZPgdn[6A/l+6x#ZHj0[wqMOKuqO)5mBp+sT6u10p\=;>hcJ=$BA:ăU"BKqd8KtuDm_2qoqyTv_Hb1T?,Wl;<blf#tZjLxGtp&$V4:w]\D=KrDp'kY1o<6?ăU"8b678D;2lXaew3YEqqyCn><VPSu_xvPpd+gj-*HT44+o(TL1JHi7=O>4g:RJeL$ăU"VHO32Mqgjd0EuYzPjJG\I<hSVj;f,v<El9,3k)BsbvJu7eEZuu:202N/D';G=[(ăU"k1h?tTg]U*hZUb[trXl3W(%DIF3c2yT\\71AU5LU0*K^$3X\E#_LS5>Kg?<B\g9ăU"A7ltCowQKj..bus)mHw\zs^S7UL&C.%FV5Wt97k:HOu%En'UYLZnP:8sBa1/3l2ăU"[#\<:c9khDjOv?+wU>j.D\KWOaMa_B7$j.ZqN(>J.kk4sBHeT>kq;m[B9rAIzl_ăU"IMqy(hBA#ngf8H8%Eaz#.ZU;wL^%Hx*mgvK%YDJ(8no9FIHOv]_+C#teo'$xo,&ăU"8cs,+xtQ5Vh>S8&w_#]0I3\UUZ16=lqN^u0KmHP.'4D['$q=uZlCt$U\IW_PX>\ăU"(=RRyXApbHumhr4cxoFj-xO%]qKHr#ONu##;dUP5eOQqARqAWrHX-H8l)azTr0NăU"=hC2<*V/>bzmn\*1#5b:xGg:WWcu9cl/mJ>g75CuG4H[Wh2srJ+[:&yo''H$PL)ăU"wVp7dAcFTi.km.gDmp1:HW4NRw];)I#bW:HmL]iH<U&\n9A\ArbHtEo*HaXo7OiăU">*kfHj)KKCrEj_834mZy*hVF<>C]A3NYNtOlh=ELY:X*T;qI1jJdWUS<Pd9*89ZăU"&V;k[\KhZZ\#w>]:tu'eYj.'HsHK]#6($5Ytyj-ZvvK]V;?#'&HDC,v1H;(H>yMăU"R4Z\2SX]Y?d?kcSt6C/$;E,D^GEs1*N#/.dpVuWt-JGRaNod1S<%s?a<<69oVJKăU"Ddi-k2#Rca/x5_fnde:_v1^GUWS29=7z1/o=Y_L7AoA2N^Nr7DtO:PTMdL2vyxYăU"DAb6T\k<)$B2T;nfDwsf<nfOmBdGc:)?vGcsCp1/(aYPni;9n(#V9sk[1EE0t$6ăU"cb3d)ebz:9g]00\*]v#[E.E^P7)[]$SHTJZ'Z1s]ho<jM8%UKYKOVk86gA4[,Y[ăU")x&#tDuTGy)?>l4+xi8tr0t98jv07:tl0.<3QBjF'I37<[u?GK2aK>P5luHW/z.ăU"bMjbn*(Rc=h46r-<twO0tl?YD.Wz$fS+ElmcAfcv3K.(Ba(m.v0L#5/XX>1:S7\ăU"9\f(3:>IwF%eeoaa<iUI8V]Zz<d1gU[UhkZE&KXI0?V6y2pF/-0-5>qe>ecLlhLăU"c5'L/GRC'JNW1>t&u&>\(i?'Twv-:IU8ge$Ay8ms*V#wZ7sHdHYx$kdVc<vS5SuăU"NRAQgvu:wX(t3:-'YHBY*rBNgR6mpZl\otUqYHCE,W;te#O,N+?-ls&7JE+C]/BăU"#Z/lPnKNMbB6#(-e#VM=T6LUJKquN1M?B*ph-'rL58v$.Qg_<G$Nb&B4R388>?+ăU"-cT+P]bo#bC9ROd(XO\=iQ$/nN3<Tz.nLO][p6i^HC_MzFp<#vdx1;g.;-<6>6năU"_^]3/\UrSCk]npc%dSujqY.lxjrRy;3NRy64Ga9X8UNd?tr<f)Z#ZY_PJ(nnUR=ăU"57H]<mmBU17YE,iCZutDxS-NUi=pmoeW%cG5dB;Gts)X^2_82N=07f831Jy'qq5ăU"Pl4QH]6s&DboVyh9+gDA*^]K:O*)_tM^E25ZP2FGs*$3L;<o-S)82_['Qj?#]9TăU"0Y171kk.oA=UQhg8c+P9^$drVfY(Od2r^)<fP2nDcDTuc:&9Bf]#_q*'8wHh^nfăU"-Y(,]T8l3RTs>w6l<AV(UN&/O>Xh:cg%nMi9dIvPtT8g7-GO$-7e2B>D%_4.%0CăU"sZTV&qp?Mk0i:4-%SQ5LR#u-*uX4),AJi&k2.o?%Q-;nCMy_VNh>p6utVjXhE(tăU"C,fs6kAVD9$O(fH4NomSfl?>oHGt'Zgggb(Dkavi-FQ<Sb4X6_uEBn0m5(Yg>QTăU"R$flUxS.D6Mc&+ZArZ\]<1<RVh,AJAc%A[q*$efSvl<:Qg^HBdd:cC*Z;sD*640ăU"PL0W;0'u+LKb?_TVMGK(x5<mro3R?vnUzqB^])q#0jfBc0ve=1'1Cf5c[uKsH+NăU"he4?iZuS;*:NTl4-^sg=p\E6Wb)j-PermSe#ErnM&L.qO#H0\;-Q:9c94[vigCMăU"^]PmZo7O/fOq4>EHeAXJduHD?Ln?+T4/O0XI:$<drD>XP#2dlZI=+hfA\\5fC0măU"dE>p4fi3GqGGpl/zS,_NXDMHAW40-4=CC>^IF%SsD&C$=eo5In_MFepagU6e=z0ăU"gFfaB]:Ukqb0uybLp_GS:cmO/qR1%=t[SPb$XLP&);FG'TS3TON5-jTUHV,IF%MăU"t8nmrcKmM'+4R8V3NAu27sfqQ2l,46#4E7N&sJo2(I2EK[4mU]]lvnF;_]u%3R6ăU"3bdYP$bsti\zFMY$-Zng%50(XJm3gEdlGNxiMUY'Yd$(.XNa3e+BKD/KRsrVJF:ăU"ye>I(4GIOD)+)a<i0D3g,TQrV,n.Bqy'>V#'S^oVpA2mE/Q'#UyI]T5DAq;>dWrăU"/u$A3lVb+/7CgEIM=]q&:Gy[7]q7;h;:9Y-S,KCsaxGF1XV%DOpJPj5zJ_w=xWEăU":X#(oZ.U1Ts=78Ny2%E0Utx_E/AY8:,n8W[n+=WehNdw1M:hSs/([4huQQlzEl7ăU",?)YJNn<j<(,5VA\[_>NBY*&q#+woTHlY?e'>K,tA8X?dpipS>pg)6J,yP[f>g>ăU"b*;aJ%Kv$zL9wO.9Xj>(bd[(JnZc(aY-rgy*]d,8Z5=Pp^7n8c9ok*z%;OiRayaăU"cD,xW4<h>F0s6Sr:s4fhO](:V]a&mEM*>s_ZOey1=b=QNwcprm5cWu*bd,lI$E8ăU"0i#3?qLa.Hc(ymta//1IINK0KTPQ4qI5%YrCUH6'I$Eog<6$,.AcQEoowe28D?HăU"8)kF39c]%a-4/SaSoaB)U-9ur,2V6^.-A]z?QAjoc[aFMtuEWO6r_/goRdeh/DpăU"2,W0<,^.I]>6D/1_BWi.av+[$TJ^nG4$.Sn_1n]W#;*IDAm]L.77D8\i:]6Dp(răU"S68P.mpmCfhy-L-$lcB7.91gl)A[Y6J'MC8+y<T33?HfrVn$-u_:?9\u),uS.hAăU"mRLt_u'>Vu5naLj%'dbz$D?UeK$(U]b9I,:J_6<hTeE:j'.;x.0K2XF-+bpC[qZăU"d0xpn<Y=KuDi-7UEVHY<C[Zy.m>GR$/3crtzEG/i/<jk?STxB&I,Oz8(0F$t#qcăU"k;b8Z=nU%52#Vv[Gh?%&;HrNUuOhhOCCn[p9\1^a/7<ssUoBI*[lexG:DeCJ8kMăU"G7$+:hr[oG4Gf[K3taSFIC1GyKnl+0e$TC1uJtl().bXo)h09t,GB[43ta$0hd;ăU"q2)u3l+Kfrna2rE6rf]S8HGm3O17N6K=z;HtQ:w^#lx)#-&&$Q+$TYt-&-<9UQ<ăU"XM3ihH3j#j:mNHauook)c67(:K6r7'5js.GD+84t.:*-HtBEwfjJf%9Vw+jm4u\ăU"H'=L;x-8iCX.Wzcl5zOcR2h_+boo>Tb)akMY045C]dLw+m<0B?LM-iIP:=lSlJdăU"K:LpdoO<jDUAlU(jHQk)oA4v;5H9[\hAk0/3YIx::UNAuP-(0G,&4n1LF3XSQ^#ăU"DI'3N1\.WH=EH4^DmdqecoE7X=#E-[-YrGX<ho$ImLQ-A$0)?oM:K2lDtrQ(X_eăU",e/-_tPO&\K[-69:CnC8_OQnpe2Aa+es*knp</<H+bx?1$os89=)%J3+z=[b%VXăU"XK('IU-DMDT38eYRInYst31:Rn1KK]W.t*9ZDJ^cx'+r<Z4UemI50+$a<H^DArlăU"f2H2*:#Q>mF3Xc#?CMrcZsR&<O\J6h$tXRP/'<<iFzfFnB1M.N/_6t'5b_QaV3văU"4MN2k\XT_HfWQT$CCrGHC_IFz5E17tE:Bd,e,-R$lr1)-2:n:XM&__Jp+Y(IIq<ăU"#AePI2;cj/j6PcRAx,&c39M#RvA,+OVT2)w+Kx]ol0qq1fv2(YHY:-[HlAP-GdCăEND SUBăSUB VCăU"hoO#X99e^w>y<(/<HMHy3+NNzVv<ihKR3[r>yG?B/VEri&g=j*0tRdynVd=7gekăU"2Pia)3\Ws9JESEAanB=43nGmS3>9.Za$dRp-1=G+e:IcHH=G?JS[7h<eD7]aM.MăU"C9RrFSa>,t)CRrA]iTBcaDc1^kI,[uP=Z.]K-_.4FAbg<0'-tri6DeT3b2,_n(năU"h5/\_LSxDcSRm_.phg\jGGnNJHswc+dUaJ+58>r)N6dAvr=cpC*?iZ$rZODWN(eăU"GSv_&4\A^c'KSql7lOSP4(ZEXh><$cV48M1aR88kaD^ts[&3kZNZWM&EoNV'N>.ăU"]VIW<O7xORKB?be8*+rWqJ%-.oegRt#9lcAt6jGN:xKqFu;:Eq#00IIpfD[O.S,ăU"\HoaHPg$6)[NPVH./J)EXdV(tOHWFXTp8F-RlKu_Dx8kb?EZn7H,<uGGgkKrd/săU"j4_f=o-36;VTbuJ4?J[jfX3U]E*[LOwE;fc<nf^d,o')fp&f;s4Qx)R4d-ou]jFăU"RA%-4e2+C,QuTBs-R#b*\cc^4r$ivZ:^E=:Ar%mua(J]s\\#\s,jI.(d)GWIdA5ăU"NR8gB$/?'IV&.;D;UrubIG5mLCkZRd;RugNXda1k3CqmeGDjs1aXNcJ-*;txMH:ăU"gN*Wh12.=RtlYd]gH^R5Z\2nJkv=dG-S29NV-X;#W9I*kQnr#).Y#r?j3e:fJj7ăU"vd:kiZ#>c%X3H7W<[Wl:pt%[JKc53be^&r^([27xFr<iDq+7Rp>ha\LD/\C0#=.ăU"[:.?iIJQoYN[<eoCi7BfnUy^N2ktK*57_K?exqbR-HK2EF(4rlSivD%;oI_cDt8ăU"o)NY0Qi:&>$3<wEKk^?:*q+k]d$tPplesh&xl1u0XNub$5J'p*u-in635Kgk&-păU"<aAlxCnVmgcup5Q8V:T8NvXnWlqsV2)*\I07#no(H'Cfeqjl(-.4VofTZJJH,bKăU"bL8]GHK'BmgOm/xE+D>1ckPdYKdHkz=Uepb17f)k5Dq,paKr_nd4<IoCH0FkGl3ăU"?8^ef\BoP6$0Q1KT^l?FO&jB;WtnKBv\l.aMG<Pvj+[Q_pwa97c;fldAL0Q02p#ăU"JG-;4^jJ7EU_lYIL)69XA#K19R?kEh=SB,6u$#GpO3USBwES]cHvJ7Cc,gSlDpOăU"uY]ivj&NCkih:9Pvuv)Xk;M$(P46$j?%\WNPVIsZOnC/9U[TvrrEnV(vJAs;W$răU"xFxf\dK7WrLxB\#NFx8BiU<Zk8FntY2xpZH;;kYYqW8kSnZc5vWsl-r8u$,_KdRăU">c<nRpCjjDmz9Q1)zhADJ0,/Lo,N?vb.b)1_k9S(2wM)Moi_ei4jxds<96b<6?1ăU"p$:E*x1W8UrT+cS=DI9h1>Sd=3R&#s+AooC1Z*dM;,7v0#Tj2,3=0P>v,/wk66+ăU">SC:d/e^<3*icrF6g=yj$YR2RjrhsMx)aXI_;e54xjwM0StD,-[s'V09:#&5lm0ăU"jmf,[u/([sQpf<M\FaQNY7'y3:O_TxP)%'nrRp*S8h-O\Z<bMQXHMI$'P_wdwWsăU"uiNO#Y;TLm6m%QDZx[oIBIbG$IBO2/Ju9FX1ov&V]x:1z52MkV#_g,OSZ:tH9d6ăU"ORpN#jL[9=4(>LzfnO;r(nFUAc:cBAkewOxf0eEYqcUR[?tkthk$XSg+%R\S+&tăU"]K&_d[^+P)t-%mirvdV0KAiMoR)T2HHnGTP7.Xeu8=#Gs,61vy,M>[[B&:OO1G4ăU"kAD0M?X;Xkmbl1NWMwQ]=(J(r7):jPRxz$%)(k[Z1a&VcXlW8=0kxt[6<<S2&..ăU"D0#FQ9^[+hwg6RV[aIRB=rx8I'>#5V?o=?F[BZu=:gzu6<5K94=1Snd%4qkN<c4ăU"D:AY3kq]FuN]>n+/V:&ScfE?B8RV^>Vr6&XbtE)IG?4\)'\b:3Qs)PPCNnkVL#1ăU"g2Cm9nzZjn,_a#j=2Y(uiPbM;MjN.y2B/S4<vH8k;,>[xOr;Y7b6%V?H>CGo_fcăU"r?Wf^,g-Rl)YJi1y;kfHRJql&DCXG9dhEuX];7H(jrEuaWh^=e)Q-s)l\?i-%Q1ăU"ghT0,LxA(,s(PCd<-T,]NAWo],LM9SosVzc+PssNs<&0PBd^[_[$.^']xuvA,)SăU"JlG;wcLx5V95axFEn,6xxouOWbOzaweAnd0XR3OT/5ZwGq>E[kiUA:ZYZgddfmsăU"DIjfA9toE#.:BepV[&q1g85nM^AxSj.hW/MJ-MoS1E\AQ]#jE^]67o]_76n;psFăU"H]2(%SWw=4q$QAML<P\I7ba(OF9;7aRfPX3>gV#_sKq8:-PA=P7G*RJYCK,YT0,ăU"oI7<427NTFo$>NtkL:(0+5.I<Om$dNJ/W-I\$cxk\3QR;s'TCbtMUABsWV0Qx:kăU"/=n8[=s$7#NKeV36Xwc\P.8xcNDqk'Xk$19\QxDi_w6q3]1(xM;rn]EpOcPlDO7ăU"MhnMnH'5H'\NxN8-\x'N\OA>;T+bn1Brh0J;VUt;Kte]\p>g8VRtiYxjM5n5UmpăU"vuf7*Lb8)9ot-i9?ss5E%FHl#sOxl<IwGYgg+<&]Z'kBlHaSQPZuZDd&DhQCx0uăU"4tbn>jKQdSa'apsL)dXkjjO6HDcjI:R3tiNIL4(y'>LGj8mFaLQ)1Rx%AWCqlLhăU"-WQTAGog8/Wxup;wHtbpVU.-3^]o7&&[jV?DWNv^c#>ME8UoEb[xmkd)2;.9/\năU"X?a-::9.DgX:+k*TrcH9H4r);BUSj7Od9v1[X];;n0tl03(b/p[_xus=%U5?60păU"L-[x+3/^AW\XxHfBavx'[s>w>\FyQIr=/evyRR]uj\s$-IavcwL86X$\Gac.yXPăU"'4P*uQ\Q7OLP*c0t4X(x+=f:ctr>u[i6Ih+u_v3Xq1+ZG-1\cw%ZEW^>750n.7<ăU"cR0*d-:ZrmI2gCO[4)X'NsVN#XT$fNCUfTNbT1GUe]u3XHs07VSfEAWU;kqCCVPăU"G6T=l#JG>U$Xg,'<inz275GWEm?9q%g#f\1TYL1FzfA##(UN(J>k^c-lfU7V(W+ăU"a2%A%Cg537yapp4%nAlXE1btd_&;4pEW$79Q16r9J-M%MppkgZBI1so4\g7snfOăU"kEMgD]Jhtn[desVWoCXAtPN\j)SU^D[lF8J\$H>u44XAh)r8McRGO3/7X5rw8aXăU"gFmuHTix0Qkh#X+[x7R<+pPNKz6r/'3^]oA)?2QE^NC?U?^NQ1#;q7_&c?p%#qnăU"P2O%Q9<,#UM\hEF$eVj0BOWHag:.RxQ\>p]AO<<MhL0XBB9e\S<XJEUq\0ouQo\ăU"<z$OCUpu77jdC$Jh_AFs>^qV.x^<F0&Q;V^(\BM#1q&\rZ$h%M5PqDLl<k\\Wd:ăU"j:cU6jONd.N'V,fns0c[2R2Xuf2b3PFlR#Y,Pfo:sOMqM9N-3$r(TmjtAIs<cIdăU"l89(8VS6JEJHPZ_G[#_&u)mbSN2>Cr^;9U8<SKBpr9(\%JN%L6Dc;UC4YPrfj2;ăU"LQx&GN#zV0JW(#=pcFuis7WZ7*JOEtizdnKBuXuidhXT90I;N<J2'/g_K;KLo+răU"m&bad:ZB<wqq)'UL^hvnltTN4Qt?AI<(#MvMiz664kF/mjVBZ(=V\p9=H7p86_8ăU"j$X[pq<K/sOT-UR2VHDKk$F\</Q>fK$\2jvNOE$,mgkJaKwu6\8v]cpD6*x?d'ZăU";$GU#fEvSHbbPy*l^jNQ9Zba<(<CNue&651?+N,KWcAb$t.HX%.J3d0Gp#<^f]VăU"aS+5#k1d$fxtGpXg:w+d>CO\GMCLD]]^.ejIH3vRqFMf*^c7omgKrz.p_NGv/:găU"?[QSndU.m4Yd]CfbyrT&#je-PG+\Bh?Y[VNDuzgpNshO,ruM.ZbyMAciY760(u\ăU"XOEZKpoqH2kqH(v<nVXufU6KWuSrxJcwWU[LEaWPLQqn;ApC^biLde,6sWhTIN3ăU"Kli$\,g.c0L),uD1dKB.OhNo/^N$$CoGspXX7Rr'&LeG4T3XpElsg;a<MTkW-LSăU"2vUGD>Uqn8FUbsoh##x$snPBK$3,ll-rTM56R9ES':P7#f,zpRS>?#=Rxt\sdu[ăU"i1oiNKq#d+5VGOgTRjb<^2#gv4U3VbO=D9F4W8L_jo<\jVrprl>SL3'g.M&mwS.ăU"vXg[Mo2PEYGf&YAGZ*=DWcj2q3N1IX79R0JBBOF*f'Vp#O0kR^ZR]-JLN<S^D4LăU"GXc)GUUj;qS5Rm=4)Eqt+8?Vs+z)R;lt3RBZ.iP.=Gwx2fF_pi,;Qc[A=a'fL*-ăU"F2O:[%Cql.j>\VDCXnOZTRdFxY*Ee.hjB)[yBSYgZ,OC\A_bG0UWPQ'kQ4T7Ps9ăU"Y5bU+Vv?[]hAr:)&_>3L#O&JAc#4\g;.88r/xY($0>DTVCWsviZ<mBRNV+K_,,8ăU"ZN<4P>n-jwsC8HP^sax>&98FgWW[y<*ffQ.#%<f>(%^&Fi3O.n0PNv.^:d^Fu$8ăU".8LZpWDqCq#]elFv0)3(b[&gA-qTdb\v)G6V\v)&DF3Ks)#N8*Oq_ne^n)6(4JFăU"q2oplN9]sZeTbj7Oa/=qJ]f;q,?An9bWP0t-3/DW7+7mzUd#&qZ)$sl_2s8ai.WăU"6q+9x?2#u02&)N;)z\25>:?ZZ(tq*Fa(i(NHd7w6b8u=.Z$JiiH'[Tg8_T>]GSWăU"2JjX>_a(Jl(1Bh3Ff]<0Wg+=-uKX*2xd?Z62[JV+3&XE&tW+&?qdflsS6*gimykăU"3D_$u-QvAbt*Hhwaay/f=k<&8Z#Mn5hJ4ph:uh7mo2u2:6PF=SLiQ?RV.yNPePvăU"WzW0d#\E=U&DCdr_N,>vit2c#WgUA-wLjq6Y/3UI'Xpq,.JmAO/4p(SJtsu:gUPăU"U4>1D]Bu<[U+^%xoSzW'^p/Q=u(><.e+O29&'A<P)F+?dZup\zBGT3H<HW^kZX0ăU"/zQAXBcmRXwxckWd%nxPft&toJ1%1nmP]QP'r.&N9*^AIs[(jXI#.h%pj+MNvvlăU"?GroniN_:)v/N6&WIv/jIY^o1uNoyi:&lo<Q8.zpEuL=-7hXgjpt-L*l[ILqmq6ăU"_LV0;\s?,Hp?WYH_eBbN8jTxI4iP)Jhu%6Ov<vKh*7T^)-qyW<?:#%fWp3kuvZRăU"Nle=iI+RG&TkDnQJ9d,/x,;Of?CGCqIO6K8a?E9Ll.(mp]8mkG<x2.V5UgT+;kaăU"(xD,HrdXHR]6P2wHs&DdAlA'n+5B<3d^bB*7Z&O,h[PzgiYcy6UpFn,UJNv^a<9ăU"Ve(&n%2\+7ewnhtoxV#ygO)doYlOT8kBXAws^Q$pp,'i.ZU5p;='R-=oNAD0zFKăU"9L*6E6qO4cZ(d4Y_[k5ri<<HUSe;VRT%Y2O#XVTX=D<QcK&O%qwO8wWMh7p+-OXăU"H[-TWriil3x:t)[Hn));(3bR4x>Dq(471w4Q'(k<h^cK8$S.\K<EJaVLjDNj(saăU"o<P_&L,1JE$06,4M'XG6xD%-;(D+H&WF*rWL.[Zp#_&IC$KOV:&awrR:k;<eXP%ăU"qCVXeH#;\(GGQceU$?d3.k^#'iM=a/SB'?M^p]^C7ZC_pQiN;_go_[h^P1,G?7)ăU"cq9^].#+XWHg<o(>(4D>&Y\23W+h.SsNlnRvDI++MKi7E/NI&a^hpES$;tVhYe]ăU"xO-Vkgp0uWG(/;Y0>52q2*C(SQ8QR^zg_KR$<_9nN3bi;p3Sk'jQ2prDC8Sjzw#ăU">ZQ0#WL87q,ny1?mX7godsksp:'(tuytfwdDC:>z%_enMd,[i\j80Z3k*3(up/văU"B[#1UTzVm#IlUNdFcnJzA*,i*9/2.D_KmXuCl8PJ*E9tO>72T?=ftA2#'ZK+L.lăU"kN,1DZckL:[_^BW+E[Zq'Z3Z5<)V\=O_/0]t'xEb6+w&Tix'J>fiGv<Pj_Yk(JSăU"$e/V<2dd-f%$Imp*el3%KYsmX'*DM?'ghKeg6ayQD1.hQo7cG(T)qKeh/9d/D,măU"sARl?kB;??KZlgdW4n<UB9PeS?kp5npU?+rZz;^PfD=lDG>zN0bjYXckOmdE%S$ăU";nV$VA$#f=Xb:8rW9NbA;KW_,MnIJbxQ90L)8*AZ3E,3R.F3PfW223m^3H3NbDeăU"-vEtp8oCK?'?]+NQ([FmuJSX$]mW8*_pni:/xKZ]D]L<sY^<r'[n4R0m(^NkWktăU"m'(r_;VK\bRNcEt;ut+Yg_Fo8u+mQDjLnD-f(-8=[;(A]OyRnU(&+f56UgCTiLfăU"cn'XNcvEWnfkqORP[<ZjYE>vCwUN)Jal<QEj[,;)TPT+Dd*qD5NbEm6HOoU.;K4ăU"_lG4,FS&1$e)d5u#jwGuG(CCrQ?xnGzPTz#M3cK'&2I=kM>sccspnilQ]B_lE:LăU"b7P$O2rVKcu=)5^7nfGCOo-&gcGL1nGt;:--XY^P2Hs^0F>L2tm&I5A7dB%_D.xăU"N6\0fIFZqUPtKJmT2-[orRUk4Q.KSLa\(-adU2eg%Z4O7T2D%vW?+a>[RG<OFx4ăU"szR'JVF%oK&cSlAddQ[KlMJ<?V?&#8ou;[Yq:]3Lm/pfh)flS$_D(J$QcQaO57YăU"b3<hy'Vq2>?]a$_-,s30RR>*D(=c?sS\nIKkZ1\Wi^mBCg^pE&T)gF<mmu044tlăU"_fhxuN'MMX5>:/GYFQv3<ZJ9-5)yGX9eA66+nxtbvG$4-i^b/=*'0BR+x*8h<JkăU"oBB(s^G>*-*G.IeeuO[Fv8f0DSgT-DoPT$miQk2^jm4qO%hmtO&'T^<8ezY&kYqăU"TK*8wO%qOZM-MFZ4$q)bGrqXfIZd=O^C]hyw0;d]I(8-EWywK1_LCu%(H#l>jp<ăU"*$?,>k/1nJ]*(;DBsj7JE*L^JE27^U.F4$Dd&_FM91tU8T09<DQ&:Vb_TYg$g3CăU"Fp,dIU9QVIV$6uiW:[%\WH)WJ;/\K_=tsb*U2g(LA0tp$6$2-'/L]v?_p\S/_uRăU"j1P_A[48rBB:rlL$_-3sdnJlW(5TvDC=*>VgCqw'-=x%/x-ZN_.MMoelhI0u7=găU"4Nu9n^*[[&]F&kmVPVm:e\=;'Ml*1g'?qnokNv3&9EX$yHU]Qc['#1Pn\VDKbP&ăU"TzUUj+iV,rN0/c7g/T:VY$E3)bMR58AR38.g^.O33I7[=wt3ZYl[\hxAJp6R$mxăU"jRq>o1NlJ2DCG(d[LM6qhI/FMJcRlb5=*zw[xxTP<P>Ec+ZVdTGebEF-Oo=9f5.ăU"ZRS3OWmYenD6=oKL:Wb=0Ju6PGn>^(BQVX>*<Ud?RshQ9#LZATBB=oekS5F3y-săU"+t7Wh?S\Ou4IZ>4b,*:'8U^'%yr]EEe;RJ5Db0H'dSNNmNr,TpN]c2l<tn1>&nDăU"MJly\0pQc'L00V=^nO,<CAdP;C&(6\=MWEW*93G#LLAjdJ_D-^<o]$D+eGl<'c<ăU"oS46:)$]YPva.Y+lSm2vr3VM)j:q>VJ*KuDZ/c2,(4#r^VfoBJv\#m'EaZRL_YjăU"_rKS/%RRfUS0.S[o;^5gNptA*T3a-vAz0;EJ2)vBW<N_#^Ry^.\'J7kk<;GhEevăU"8lTR:B=kT56pY=ad=T=fq?$7O\wqKvTb\gP.=1ptzwMt(_.kt?jH5mcH<os_nH/ăU"qnQ3RdT''g6v25WcGQK:0hH0Wn>H5Sw3xx:4&I]2wkbD._a)zMPX$Ju^Y2&L;:*ăU"%u5%Y)96YN\;IT?&+B2o5CwozvV23<-CBr#YfQQKb:J-nFT?O0>iOtEfDs#ASBGăU"RWxE[Yj?_kFseW.O:]nRWPO$F''kmS#unBfY3K.,ZBHnVXD$dw6E:.:cA%mt]CDăU"f47^3pV.Sd8dbhS<a1/*BAlCd)F#bA0$Uk0u2u)5iYd9:g$Zssgy$D<ex4::C.?ăU"_FoVwJoeR[zL:$&:J8L84$?l$=du<QL\S<SXwKlhYR>^U+z$Um[4S,L&m2aun9jăU"JovFtbd\np^,s77S+5h#TpcAI,B2_N2&JG2WZjF4rHCWp_z5MH0(M<l0G-4L2%căU"KX4bi]&DTCRMmeun$A.OREJ)5ep#mn'P-i=#_fB#mY0qAZ*221SZOWDA8j;69S<ăU"8*E-vZeRg\]-%fL9QS_x21gOzRMxN)'1z&e<AS+r.^V73^s,mD^bi8v;8E<7vgnăU"5-+czmTO)Bg\vD^\2A/cPnR$3Sm_?/]f(cpQ/k1Lu5;'Ub,+$Xnmhsnn6?xW_x2ăU"1/ZVl2:E3G;BRe9->s]lC4:J,\6KMdl/J1PF[af=b.;CLnT82RthqI$D4ZZ<3L0ăU"Q\5)^r*jJF3g=RTtWk-,<5mMPd8crihD^3BwecAs&rU._C[fFDLxt?<q_=PsT)răU"o(PYi*Lhsz1c2+SlR6Dw[C^Xq>>]U+tQw:Q4?,nTM4S:q$YG*u0FDw88hQr[G,8ăU"jWH-.UV&KMdKsO)7VL9q6G^SQ_Y]Kkwpbd$KOs6PZ+QcU'^qV_cUiYeQO8R:WnqăU"5Kgg%<c.IyYlM'JWQy&6#wjyViXi*+gx#&8s[p;(XdhRVP3b%\f=HdPNRy.HA>&ăU"<vmK$c>>Xd.4\ETG>'VGz$^9%vh9=,Udn/[9kEY6cKV0uLx.V+<n+WdYLF%D>KWăU"g#_VYLq8_Ua*#g'mgTUqU<LsZ)9%HBq9(I_?Ze+CGdS<,g;=GqI4I(-jMCa*>OCăU"mfjAPXFOmol#x=(L)vT;af.lKq4t-u.Jb(0xLGNyJAs4L(B'(9W&G]S?1EHayESăU"/;=o4#$h#U^y^=;=hYO6ho?K7b\.?mCiv)uPa7H0Oz[kX)pYH_m*wJN8JD=dlZ0ăU"aXF35RV$&h3pD==r[N_<_^u_uVpQ0rtVgdUYKDnnlri6BeGKK*O(uWJ]v8O&JulăU"j\AGg7W1+AAt$TuAti>EB=<H4qI^M[&J<ILv_J(5K[I5TfHaE7IV6P24&?JV<*=ăU"C'<tZKNSJY#+)3ogHI?oV_ui?ZXt,Bmt7W$tH=$W(N9V5^wxD+TQlb$]Xkxc5xeăU")I\c'R37&iPfv,k9UHI6&c_xT=qpN2xPT)W8PHaNbRdct.HKxH9g8U\Z%=-^\e6ăU"a-OGn'8/YyL:=rGR%XHExL#1fB6BEEIFPtIQAlId[=k;zUKKIA?;UNun1;^34a/ăU"qZsnE]^rKBGU9.OU$OJx3r#6>lYLeefZ\6_]9smU^fZ0RPm:n.KK+M)L-]0<m+SăU"AR0s*RyUDKTrt#jQWdqQTFJ7.[$P_PrQQF-60%D&*]*XJI77Ny#=6/wu5r]Ofq*ăU"1:D+F*o8k82?oO,2uNrIXhq0;s6IS;SBRhZ<*:eTHXD5(_B)eRCE(jocYM'/]ePăU",7'$pHH.LE=,lbY+qpkk2pGliCmVy/D_GNYqHAjQ]TE:,q>i23(7OOs.BgEQdiCăU"'6qDpI,5t8:SL<CuAuJY[s7=sK=u%6Eq5sw\XhF*gf+R(iIp/pwe/;3^,g(T&,#ăU"2f2lBY=xvI1,5?'&KjorfW1PS(I=3w$4CZERI\NNPmgqt,c\)EhjFueJV\OY)[băU"RybZjo^MtFAR\F^&]bmu+2da[in1E4[9M;dTk[-AM9DMN8Fq#Kc5%(rWT^trV]dăU"GH$e[eo\(RF40(VYD/+Z(wwUtnLxFds+m.+(Y)AM3s;[-o=1lbHa[#KLmoy0*kYăU"XCZ7WGq)p_0-8FhheeafSqqqk_iM;gJZDRtkkOXatX0qd4Smmqe5A95tKj.7&,FăU"8)lmm/L?c3Qi2V+kK[(1z^5FZFLoY,anFZ\7ad6iElD_u8Ydj*1#B*G[md.^;bfăU")2S=[[zbB$r9*M98lLIq]rhUd^I.x[kY>%9.+NM_:3Y%HjoK3qD<mFTRW(wLK=LăU"GXnYu4Q^T>q#]V7G(Jn8>WRry9_#ol2Q;4O5D:%4ZYu?pU(e2%L;4fwIJ1mnoj%ăU"RUIY3llC]Lt'64r(xgO#Ve?QCT(Ia_7+>-Ujfq$HsZ6n[5TZ+tx8slBv_+;.uUkăU"W'M7n3'Bk.Q_Tta[[8et)b.ud?*bX#cLePXnIWQ0)1_jX8bWouOA-55YUSF=>K&ăU"aF8:O=8nZ<LMXa;>dTC/vTg)+Z?O+%NV-Yv*efm8\'*BU69lJ0n3U%N[[[T,CkfăU"BG0m4C'y'M:3En,$j\D(r50]'5F*TOmw?[\g0UP*FUcec7lqn.pQe'xSXKRb/GEăU"NeKULsbrbiO&-,CM>[3;*BF+19\YeidPh?p>kd?#uX#m,)\3a/-xTDQrEDAT0K%ăU"U6u_<W7vS>(Ag6.4slL\/vhRB_RQ0<ScfNDuK;K+'QA&t-lKXqH(/w9tOo?fviQăU"9j)ZWCLy-.JGl\8OPd9rvm0pdxky_(pGxigN=rh6)LgOi&l)GKADcPi(AQH>SF6ăU"XP2UdNF2S3TxSu1Ha69p\lo_VnY8rXe,V4dad-A['S>442tvh<1eHGn_)k>GYwJăU"i$1dVP:ptgDy'_D*:v3pP'dl>76Cs'rP:Yc#8EFnpVk6OMF/YnQIiVbn/>+)C.păU"ar=Lr2p3elzxBn.G2WuHGR/5>SpsIk558k;O(Yoc6XUObINm(\t(_+L'H2[_oOXăU"O&fT8s9Y00II43eom)o(kVLW=^s6pDf=uleOnwlJ$g^'MH9l^KslKQIVIOQ-uULăU"5QMTN1+TV]fKH(Q?OIKy:'8a9nBvXsd?xp:b5LJ77ZUUH-k2xbS,4vrk?8gBhN*ăU"zrw\Na-S*c5g%%sK1l=K-X[b-4k$L3OmOC3.d:>D_3A#n1:l8;I0c)-S$fj]n=7ăU"YV1PWMZoEbHZPDP5-HrG5e=LjEKs;9n9qaqj6pTGL.7U#aTC486weEcJu&wM?)xăU"LI%5C1hS</8KZbSR>45$WFmt]rn=Ldk?^mqXW&*'1\FKhaBubSY0lT1EBdN[vo[ăU"\X$ll1wPd)r>=rGLT(pL0F=kRb\N==X$Pd.#0vz+cs+sP_n6+^WUMofHj>Vi1LaăU"[A1e(_2.N,Rnu(+W&qDVQDM5D$Twdrelj?j#>fIlm[^,(GHO%KB_vUs%Ff4tUq1ăU"=,xfvtJ7=fY'kHOASp0$FX)%m'aF.vedkj5#UR:$;ak<<l0+u\^4wZl?8,:Bq$făU"Eie'G';)%B]lYK9c+PctXG.+PYDg8E3\vz,/WxP4pD(QEKlVMG'aFFwn'wGXN8'ăU"$)ojz(jcc.\WdEBmch77aHl48WFUnP;Y+]I)Xl8xBG<W\cD:2-va?OqO\*\k4DqăU">>je::>1U8l?jxb;[dJLM%].ud153k38DWn\\woTF&GVIT-v+V&IS11M2+Jb'K9ăU"YW0Kx6l.kRM9^jokHn#\MFln.Komil%Q$\9B;uCqOEoXerP'^#\Mse,gmQ?tqP\ăU"P^r0VC/rl5?sNT8W\D2xQW.mS7Pt3ptKF1$I5rk0>v?r0]8AcriZBP]jDN\Yja1ăU"[eeL9F8=Z*<,aK#7tQ8uHjV#N&r]p:37t5n'dX+ZGv<0yUeX-K&>$dWYh7u'k(\ăU"ihFcwBPXrw_[o)i2iNE>)+tHu)9SSJY?.E3UegvKIR>dJ^dt,sqnXrIFJ:qaAaYăU"&_r%oYB5f[Y\)F+tuB3H22GElm-peu^T$g(u+<rZk;l#5yBgNh;r9T(r27W$lmIăU"6kp8C-$kVdw2/ko_9kC7HJ8ZdFoIu:wG[jfB_b&NWR,DwiMbTUyrPMsglxtSmb&ăU"1x#EPl<F'iMF#'\L>C(Wg4c?u^v<qy=8wEjFTrcVL).gn)2#c:s&TI-&Z7)iSA:ăU"rbdSD\o\DtuV28K[^+lilH:Th\3ZZ>qSp<lL-ZgH6R(Y'dF]I3YseQl=dW39#IBăU"Cb;Eu$tapl?a'##(QN[5+aJ?]wDTS2#Z[ktCxBbTdeABAmO=\U;x_%#dWh_3K)?ăU"bh7IQai[LcF*g\;lbY=15FZ;VT8>Nj=p_7H'ZfU=,?Y\SO1,2CA4DlQq\.x5]:năU"5R<yOKS$e>AnG?Ai?SZBALvBlxhCaClk^Glt+0NV]44)]\MM-hW1kxKg+'Z)SSwăU"X_juBIFD?wqLtgdlQ'uhA9(G&-E*&m&L=4GBUT3_^V)=fkP<n\zvj2j>X8Yg=tfăU"=MGM]R^B7hoX.01I4pl301NIUD]*DN0t2#'Ex]].)5#p9,v<xZhKy#'AY/-EXmpăU"m^b%%ap-P8CHmsE9DPgb=X2<b?xCy[d2J7wkOJ>QaWZVIF&ZWsD^i$wNBQ%8L%TăU"eD'z.FOtYN$OFO1l+6ffwy#qNmi,zixAZ\:=?x)eP^h<hu9Y<IS%IB(y6bTe&'NăU"vQ9kPbc8w0#^VK&]Y3Tq?ki2f[3G#v.gMbjqP-=l,t'?Wrun(8v-8Idl45Y>p,iăU"+ro2BrR$Xr9^>U/9Mp8QHllg,]&&$r^Z4QarUH^0Z8P)-&)euk-1c^WU#r(NR'HăU">/FM0VUP\nP=v#4a*nt<PzB+>LX<t2X;;1NN?e/U((14x2i.'VHh]4j$?W8qd'_ăU"h>)4]\$UIgN?<x3<no9LuYt4ng&=zH(^hED;E[-c&L\;yy%]1lHFJOfb&tbL]\răU"LY+'Yo)7stQvb]P:X%[>=<hHGt2fk/,XpHh%=aX%n=(;C_;,:mTNSnQuD6NBxDzăU"4HT9Lsd1[J8ua[J0dhbRSm2LI;3B1hQuU:NP$x#0[.3[31;h6?c(B\Zi)[VDh63ăU"rcUn<:hUM#tqAHec=l)F?U/jX9JR)BaeUGVkKBRm\$SJ8[)0mDblcQBC22D2bAnăU"t_*F\3m3)+Q65yh]'_Z?'e%TO+1ALttluZo-D#OP#^c&s.upc1pcKI6Q)Z^F$=?ăU"%&mUnWllW5B#3Ok+rBn33/=ZR)Q.V2(X]%m]t8N37Lc_)u_'cx93OATI;a0N$9IăU"WL07Ql,Zbd*Kr9ZARx,#e3h)CQk9xPritNA)v[W\EBVYge+]F/Q3V-rqSFL-9p5ăU";LFBcuio<hp$juD?Fk(QX%]U=7u]cqIVVRF1ca_n9.=oH7i7X8IYN'(yYGd.b>dăU"Dt6KPAX&jN*',[>]Ub-_9=11a2_2icE;Uk):]v?wqcZbWlxN_su2.3S-Kk3iZcZăEND SUBăSUB VDăU"^*b&5OF>3h;+(+0>k9R/I(]UbM_=BiB3Q2?N#xpjr$Ci)';\n)el&#B6kpPWQY*ăU"lmP=0lKrqPaj5EkWh*auWg<;s-S6tNPH\GA<'Vs?fu^qAcuf1Jb]a6p(TZ>U^$MăU"tFFnd>]#%qqAw'49',ZtKq-++,guxnnImiuZPP]rC,7DO>l>l<%+65;#+4bAa6JăU"E(/S$1<ta9l?Y^N_m\dxuK+$T6_&&QWLX]Ep?<tKI(HKTzAdoOXd'm\PNR;yJXlăU"((wXMx*1*Du$Nek3.;*TiPvG9c-F4U]/3_qaI:-/p^S4'8q&oi.IZ[FZ$Z<<>bIăU"WUp>T7^-Yf(Y.IP,*wsjt4^Q0<lv[%jVbgU2c_?=Q0(VO)D/E&Ppf?&Qp&Pj+U[ăU"TQ=D$uHLRlng06//;%yb&tEPWN3_0KZl$n'+Tr8Dnc'>z,mb.#SI6N<wG_P(E-JăU"B7ML:CrnS;yVg$lI88D8erY=gmVVX,K;aAj*U05h-xWmVF_rLszjTIo<,s(&-C#ăU"=-^cG1ClJ:QGm5E?C,=='ph21&XpfsaYY+xJTYm^KJ?1+(#LkJg(M\CGdBCMvjwăU"[PriJ%(Bik,4Z52h&Q4)#O]bKpBBI'hk=gKCGq'n2NIZM3nVH4CS&_[m$*bIW?3ăU"&m_Q1#V&M>Hn[],b3FIW.T0bPk,-Wr^?ker*]hROJ?1R'qV4iEswai<Z7Esw^b$ăU"UhR0Qr]O*l-dV.mP&gVIDe4oRZ64KEN+h3mp<D:nA8^w1=-nY+/:u5tulh4LdDLăU",Et.,o1;;g2Tp<$(mZ49Bb%Qi^0D$NX8<<$#JU(W7Awm:1yTe-^haGJbGyB8lW*ăU"B)MLh'8aEB'kftx0RpO_,t(6i63maQ-&ZI72-F>/uQM]QC3Wm;w(vX=tt%Oto-'ăU"Dj(J*;NsKSo#''f'M=qEXTrl1as8o<F:C&76]guRZ:IH9^rf-(aN3/;7%i8k3(wăU"FOiYCLUogYc^R#tQK$dNQRp4.Q34]K;O[A)\P8_55<Qtw2e1B3N&pD8Q:4IF*ZYăU"zlLo]3s]4G_*WoiD:%IBc[JXy,R.'D1nOg-D(ruuF^Hv.LY2^v6Uj9#QB#LBcJ<ăU"fh17D7D5WRB7TZt,HQpPdpFn5(n$/EsNL3Le8l8]5RShTl(Gi1n#V(,jS+r$.sQăU"nYh'gBiV&:tL[=cbTHBUsO^^I\X3;mmdmtlGI0pq8]NG>elUe7XbT(Tp6p$?_\KăU"h/9leGIa<i_4$1d2_F_z:RG*WpprdT$(-$d3k3P^['v'S'BC?HE^u.;p+;mHQ>JăU"Q&(Kt'hTQd>,+4d[bhsn&<)KtU1CqEW+W49;BT%X7dI.jZT+fT>44UP7d$&'BheăU"cADB-3CTqn+WPZ%-y:V'AyNTm$^4?C^9Xss';i=G<-t-D<(.g[RQQ[[E_dugPFpăU"w-vwulkvVp\Z3scstT$mE3D-sZJIZ>6;*D*bxVXG)OHx**c$0qnf,bhT,YrKlxLăU"'qF1Kj<[DC'O;j+cBE+sZVxAEXZVT3*f(tn0e94[bR/Ns6(Gl#tZE0'E2$AdG#?ăU"PZug&awtMxEL(?Rn,UAud<N,&$KBrwon56D0'ma>0BrfK^(hGFfM*$WL>?rm;K2ăU"5$^(Hr]Cq1N[S7Ok.qZ/DKmKDTDLD%ufcLdrtLtYnFgk:tj=biq_M\muQ:\PHt[ăU"v6Z/fiM$OFWNlv^KrJ3)dwLv99o'<xZ+[lr$L;w$'fU7y.G:9ElcmzkJ+-$9.AaăU"iUjYFG[[yr?o.rd$U[fTGjbIhzK23pAYv+(:y*9A630OPZM+.eJodQAbFy):Q%WăU"LT>p,5k6<U(qF>%$$?#5_p,yFQQ.vOB;GRHER>6+0'Zx$q<NVnn,Ts7b[]&\?OfăU"Ouoh8<^1.z6d,%8Vy&[M-WZsT3xm*/;wd/(iN=L,v.js4qOg7zJ;ik;n96+wrOrăU"h>&qNcGe4T3PccQP*?\2\v<_uAb,KUd\=mB)Y2?>quoA=#y0k3YI26F6kVdPe%QăU"gcY.+lT2(YgaGjB$auRZ=\]);Avmabdi,]myjEpV+==AM8?',Lv:8*WTQ?<pD/*ăU"TzUpGg7y)^UxtH'b+Le-\9Ww)FolWLVk8gArQS$\[Ev0Iu_>-MexKr91uhaXGS<ăU"\;r&)XJcWP%#lqC&B&Fr)gRdu[J%pM0'*PK#Tlz,JCoeN;QinSgR1CP9PiA9)B%ăU"b1]*ZbB$QC3mM;u/8B^Rn'i_/t_WcE_=-Pi1FtZ1Vc;^M//%s.;a/;9$uJtH0N6ăU"9W,Yfsts)gJo]>stHfJnud+[m[suhjHj6[-07y6tbf0<nIBCDJ%pnD+]GwW4i^oăU"JtW:$EE40+QFRNxVLcml'(J-c(qFmfOaoOH'G,c:XIToM[)&fok'XITF/J]WLhLăU";*]-ZvMC4584fnEVktJjX8H&p4C;CRYj5g2BVFCWvb]tIWBZ&PI>QF>&AId,K[4ăU"O&*3j$RSs%.i5Gy+6l_C&$BQ;4V-0XgZvZ?+aSgXB->/y_Z?9cC&a91:mYR6)7]ăU"$#ktDq&d=lVN=(,uFO9et#=H-d/9Auyu5M-etoUMmbAEfU4.$X*tlQ,Bj/-kIV+ăU"_hJ$/D##XEj9D1TN%-5npc6X;rVtj'b<-1P+MFW_l?Y1xT-aqS9IwWJMYVsok.xăU"pk'E/6hh#?%f1rr21awgnGU,2p%[Da1Ic;S\3H:4VX<['Dw6:=1J;c3>b7zwLJ_ăU"?%XO2G5nSZWVd-,sTkcHk&Gmt2fJS,;Nbz^w-b$;(uG;8.U2Q/pmpDM<Oz&?)LjăU"';.JI2?DrIb.vujKG'XFc&eczT5-/oY;MW[gV)^+'9j0,S4d[mRcv)Xj1B0'BjmăU".5(*A-FG/fU:N5$19znB8pW'06lLW/uGUlvSmOZ^4+MG2KylZjS-7Vb2lU_rJD)ăU",t4ZW1^rfO2Fv)4B4X^NUAK]#t5&&lu[q61uAmEf>[,9+YNv;l+/v5<[,D^NB<<ăU"b/<=n*Y3>4xPH)^9G,dhRMYlC0*HS-<x,/x(wfk8u%.q<etUs:hUO4+.hiKVHPnăU"fw:wcc.4=KFOc3:.;i(aoVHd<PAwbu%J0GNvT(J;7*=(SEqLq7I5Z*C&/1VVVu[ăU"Qb5#_j$WVbVFTFOeAPYO\D>'[jf\)kKd1f^o4EaX<LD[b')*hA^C8__&gQ-?P%lăU"cvQC##b+R5dwtt7[_eFW_oDC2Fb_W03QN__mE9ahK>-:9'e^]L=(>C*qV_+,b.'ăU"Ra;&Zcf-.:5hgcr3P,%09\q9$-wiUL+u5mi\]eKqG-Sbn)E,,ehPpV[25'w3Q8IăU"f>Gh_)wDG^J'<u?n)4Oi/+J.<efCq21W/b*qRN.ZnYnGi8\'Z/wK'QVRrR$Z2apăU"]ZLjSw5xaJz3/)kx^RR6pm0%j*ri.,^=nX%$q1xe6Bh71%[D>bQ6J3q<^=>'H6)ăU">qrt\'5Ag3%m3s5kOX<M;L?e(e9G4gOB$sKfnO'xHfc)7*-c..ltAhdP#%/CMJ7ăU"x>y[/?m+P3f,?GTJMScC#9=P.(BOl-1*9,S[;0.TcU8(m;[gOW4vPC$hO>ck\1tăU"/$K'-9g<Gl3xsjD;H7Ll(z'=rss=vd)83,DJT[ukfU;1BUCWDd0qDzjL,hUWs,[ăU"k65Y#Tf)4Mu5ov'SAiH/[#]uf52gdwN'Hxx(VQtxYNsXh^w?xrR+%2W,z%BC\[UăU"l<t68fX^YAVF8wu#RA3i#V?xXbO-E&_s8mSxgk7TuD#P/\Dm6J]gaGliBoso*RLăU"xIs;Ke$-35sFik]ae*Crx<jk98e-Qj.3<9]$=m[65bhj=M'\u]GLnasDN^7V6:5ăU"FI7)aTn<kI-#igb-0_jwWG<)au>xQU:EyH2nMJ9IP=S9AzHtO=CoqN,CkOj8UP9ăU"'kmj&$knLl/U8d/ExaKe91(aEK]00C%4*37gL/eqL/cQc4JU#'K]k$_WJ'j/)olăU":K40S3XQ041w;3q1..ni9<e.2ng=&e:K0=/#w'U_PW^iD,9(Bs1s'.Pj+Hlwt0UăU"i/\(8jXdz:vG7m%2=F%?KWI1W:-:EZrh?LPOV&Jhm:7aBm1Ic^B#p;1A60VIvSVăU"0$xK\)C(#f(K-I4w#(>=2'm]yi^MrQFfk/EKG'3R1K3sOTLZX*6=LAuEOpkQ9pLăU"KBi\J=nw>6oX1?XNx6,uB)LRE;a_(b^o^CLCE,q50MU3dl##gt?W\O=)eEj>]8dăU"bp'kr#rANoDpc%,F4;Y*d8j#-u6:lI0]ZR8GOR>sMOU_>f[8OIHW:lZB<Rqn28săU"GCOrFH]dma/]:-r6x\K'pDj1>,6tm7O5i/Gy<PnEbSEk/Kx0[nWtDoE6Cn8Og31ăU"+m5h'e9LESXg'[^4n[js.M'f?Wnw$na)_Zuq=-n'=.E8#'23XRPR#<u1oXE)g]$ăU"4b8/F^h/)-l/I6(Z3)G&lc;dl.pKhKBuK8XN6xN'DL/UUjNkip.:#xgH-^v-+5făU"c=Kt.8T'/&gEvPX=_eq6Qg:5FG\?5V)jp_#DB7rvyb1.fF^6&K;DDbj1u<>RUPEăU":WXj(h$pNc#d,9&Ngl2O]vx1#:.3KR)RLbInA/GJ7^07_$o5nN'V]I5m#I8s.:]ăU"PAO8Owi<3eGk.f0M[[wjl5lwhF(al2$'RseDb'\KF%;US__[RY==r^/AthNJ&xYăU"v[G1nXiC-g0Ov9ig3O6%C9ie9v*Oz>fp8cU]txVGs5a.bKuxH]SFi*T=LiAMxC4ăU"VHpFjA>rsFtYv'P8m3aBG$AXrEo%;$j+q=L)=J'5%?HKndXS*X-g^K8C'xDYf2UăU";#='O<1tUE]qSaM9EuVo4Xjc8j[uZ*anxB13,So?zIx1$3_oGl=Lgu1+1eH]x]făU"-Esc#35*n%Z7mjT2itXT#e;YQ%tm.6-Y:Uj[5BxXZuwnx\B'KkdM8%,aexQN=V9ăU"[)<oIUef,x-kr+)9gM%,1>IubPm=a5gVqeiFgJR8Wb':6o\m5g9Fb*W)o?_8\r)ăU"tI'$%F=YZpi(G#RNU:_BB4\_>;qj>Ex):36oun=3hD]t;O3QQE_vKy<=S*-iEltăU"i*e:(g%z-ewP7Ya$6LxRm^S]h1%xb$q3fyRy'm=_j=Wtv<qig)eiT:f;5sxjnAeăU"k3M;l*DHTEK:hCed''tZ^6xA81na9K5p<us6*<5cA]ca90Q?+(E+U=0KoQDK^\-ăU"/Bi5)ky',49v2&X,/rhGs$g2=fF^HM98;mIYc#ss7zbFts+q$QY:0H#,K;7]L5jăU"d(L#U,H6M85cFwJydQ[sGB8'wp2;JRvHH[/,fCY2oE44h(/n6Ms#kaInENW[%vIăU"1k5CoU[WYfGB?k(nVd<90Yjq%B1ewdfX6xX4iRj(>]L(kX#\eCZy$?M]CGhsHlEăU"SEll?ymx&txnGXbxSRF-J5<e\#oezuYE/b3nu,v[$2V1$f4j0ORJ#x.W]6V=>U+ăU"-6#6\(NjJkNUDN)m(Y>(HNK^u\c:)/'el6$InH2c$K3b#XFgU_[agJnyX(>u3_)ăU"'cD;%o\)H*/F+2'd\TSRap=B-hrNglIA8NY^'>hvE\y)+_1\k3H]8<Uk>Uu3X(TăU"R#$I%nSbS&ouI%q+Z]:)q0D;WoU^qe3W6qmrJKmay'<885L6j5:o>V#%DR8q1#aăU"RmjccD%lvN\o#_0c)O<0ZnqIu7X=k:xwWa*[1-8P/8.Pj=.BPfY#n7[[i_5L+.\ăU"a>g,.ZINy>mQgAbF1gDNtiUGHnezF5PA\#\-A*g_Kqg6==Q4G;rJAO[ok8?bZ>+ăU"ww<N'Ds%u'?-t=+mxJNmm=6mBGL8]/KK:Z/E>Tnrc8f3x-HxsVo&HO_X7;Tu;fEăU"(mG'xt]r86*4p+3T(E%L*e[uw=s+cpZdF09tJ%lXtKlX77^eX\g12'2623r8$C>ăU"'aa6;.7X1ubfk#bd>8J'ldQ6vn+;kU-5AFxp1,Q#m:2)i[XQ;[ksi&(bbg:.EhuăU"8lbY'dY6*,x7mtLwzGqUS^PWl1:5gYI$8Yh&&;3b=(=u6mpCc=&ri*9)Sv0<8b<ăU"[EQ0cF<6a2GNp^ZJ9e:0dqLZ[A5V(]CO_Xeg*90#NK985MI4b4,qaMn;u'BCh5=ăU"x\/Mo+SeC4ni;l/(]<#[w+n\gq7lCX)3Irndlfit>LpHbd(M)yB4Zi35Df7<vAyăU"74'^#X[GuN/LoNMM&)%M$N/DqY^:X<-;nsGt.TK2'GAP;.uZq5WiS?s&wdPqNA2ăU"MLh5\LY3Gv>w'Uf1]gI:\ve&T[[P/3yUKrR-#&\Oo#K+\k'n=dr0TTdIQiIRfKVăU"cB_.2*6-I_;RdWg9WjrN6<'(HEQP^P\+F-ZxmPsKdhiaY/1&Bf[)Cm4&)WL+K<oăU"]);:>$unhqh1,zW8LEnJk2Ee9R%zZFAY2QAV=_QA\?b;V(Y4o\\Yn'uE>QLPJiwăU"4yZhe5I&2O2?]gffrGXAe3]n#Axb?oOiP>k7G/L[n^*>t<v3;9R9Gk5scIlZp)eăU"IbLe.u8m#howgs8hR7\li*N'4(:yrg&'e]&HM:5[alob#skpxq<jF8KcvxA[kc>ăU"l<:[yo'URJ5Y]<=qBpaz5thypJe*UtZD>0:1BJ:+&\CL\srbpk.Y:35;zI#:W5^ăU"hV,Cl3#Ms5=d/>]vce(F30K5uc)o;/fI&$0U-ds1Q0T/$XhZViXLBt,j8H3V^-<ăU"fa;%TQ+ocnIjzn>?EfjeiY)wRXB^d[Mrt,^*<+xw**>(R;+,>v>VRj1L\'aFguAăU"u+vn&Tvst4KxJW8yAi2a(K2.1Lak1&?Q5LD-(\UU+I&j]3:L0fO/C,+xav6O0r8ăU"f.&IK99.Y6m<\r.n0>bdi4-Jf*FN$XOevZcH=G7KaU*+ss_%o9+.Y6D=9I:_qx*ăU"PmZ6j<:BX5L?p3GJ];kclaaT>Zk9uz]6\V3twWsa^&?H7ohc^9^c_.3kLQSlxKMăU"\ckp>KBq^kG=*uIKNr&F:S,NYKv.f_^,fxK9L7*C;w78^Bk,t-3O6sj=SVxH<SWăU"Y]e(D6ZnscB7:YxZ10AYX'PrYo\X.(0O&VKX#T*DCHkP4Kcm0\0J+f+'BIAX-]\ăU"cis7_=,Ae[Hy,#O/0<[IJ2h[:C$w3<'.JQW8/Bam-Xg/T]WjI%e,M1RCBt#-p4uăU"h:sKHY'\j2X:4g?$nAG><*Xd7[rkOhZ>#vZB:w,zhUjk8cwcna?d^TGZ555hY-<ăU"?R78BqKI=Hd7m\L>9LRWs:+OtO[VlT7]o1pY1>5/-PYqdiim_]t8LPRS8npU-5TăU"to>:n*cV+:*#Y85U\5Jhy1//pj&BwsD\#Y15f5dqKu[nT*D?w(sOLwT)I)Gl<i+ăU"WOsA7$XZ23eh_i]Ne0bx6[8L+w5rk'*e#1f)EU7_>'F0i\87)1Jc\nyV&PjsHt&ăU"gt]==unL.^s/=NQu=%/ksg1G5/^c4Q\y$iYtcCoU^#$12[<b$D#'<k$5c3/F8&oăU"Tj$jFXirZ0E#U&.WO_5-=V8i'lex*/S3uxO^%H\q3MCS5A01\B_w/8oY*GoCQvPăU"2dC(2:2GZ:t/WR%N1(ZHn+F(?E:1';R^]EwuPYt8i%o>.ad1:&fi:Ak:8Y]0#$FăU"4X)[/pXvb;5kC7i*e]q^0Ub4Moj&%*G*76bg:(3#u(Dr%I/=h%WC,.oV7q-K6+JăU".kGY;>'cz(pqoVLtTP^*Y&P5.g%*M(.QVYOT?Rho1W9.8io\)I'no&gVC./fk*văU".qgR\DS[qvgcFW<.846mOa-0H1?6mcz->[1tWR0x^p$M7aHB/Dy>Cuws*^&LpGSăU"LZR'WeCI()P1P0q._,[FC>G'b=H,o2K5*NLXj^DW&R6eu(Dt2ud&P9Pepyj2_i.ăU"_$>Tu;b$e'j^3cdLhF6<XoB<PpS/(5h-M27#^MNU<Y^E'u8YwWI&sv*s&X/<Ya+ăU"-/*_35z%W,ie98-?I8l\7[HZctX;0Z(c(wZqjkeIWDCGD/fF$/tvUjC,&bpC+w\ăU"#76boYut8Ed?xn'H_2.C_$mIecJ%lXSu=n.iDW2hW,^3lKRo<n.ra>Ul)M4F][&ăU"[WR48bXX0NoQ^c&J,cpVTtpUhRBdusUVvhUPztIsycOA2%Lim<JVEK0MqV?G=ZRăU"BiI.K:UM$$o,\&8Fu>3kp>'6.B$e)%]4rf&:r8R?l0=pEb8$pY15vaSnD*o$X24ăU"C]S,bl2EZDsV,6Z\D0Z$9mW(n=fI-3#8u+8&flV;Ftqf6E4H3dpJ=LbiXMal\3TăU"vK6M+K7iUB3X7#nfmWWrV.j;3u2J/g66q+Cs%,Oa';BcH>q7T2x;Rqq7J8tUmI>ăU"eST(hdAO8e+Im76)Gk[(YZJN]RjJSc#]g1n6$NIjsW]$*kI8D<,-<j.a;<OhyClăU"]#cJ1?UY$H10dq+c6*VNoc%sjf&7(g?';7QL<gjJ\pTX1b5SEhwH;tr'192-'7DăU"<qf(Tk+wAmsjKdj)e.Y8Qg9lEpuv.ZmR:-f)oB,3g4kwqu+())a+t4]7\UUw1sVăU"^:i.CU)ideHYWSbTJ?sCGy&dANN03-nB4tCFMVGs<Fs3P;9k=;k?i%$I3>eoensăU"R8iGcC,P:U./NqJt8Mj5#*SaPZ#vYMP31Ps73WvYMXFyQ;L4LGj/w+pWKqIfZ$VăU",78pq0oZ^?E]Cg.FN/tvfS-S41<1KZ'9Nt9'7F)Uf,c$A\oM=[-OCeCTYPQOQb$ăU"w&i=3l8_dwy'#lbd9W079n=l_xe'3_iL73ektnYqa0tG41Tzj<7K5tsA>rcU6'XăU"'MV&y54:69./q[qe184Pa?s/Zu(h$?APz+b.A^DqMO>l'm6hnsMR[2,Y>:Zm*7qăU"chQfb\*_x]&/_;PMg2gOtV(,LOV?o/i/LC-s,euwKWoI\c4,qPd#;#_<OkBkK\hăU"61&?&ei$U71_nGi*GLPsW6*tZAk7ME0*n#KB;Xz7OO>vpx\Zc/3f?13KsvQPJ6TăU"4bT4;7/KWry^dP]q3ABrb#oOt/4XNKwa'#'kO,+vTi8(=X5d3DzE89jx,KCls._ăU"adLqg</2V94QBGN;]Jqn036)Lx<UV[\nAas83;\>Cr^a._MLiibfKcJ/l.n8#7wăU"3%>0Fm2hH>8x*9VE[Cym69.g/fQpt;<FQnsh*yQ69>2<rtD0*PJ89QI7&;*UlSbăU"X\:O)Gp?U4l>Yd7)?<p$rjbtYBI.drQHa.(&)%-?S>3tZkqkyYz-t4s;+>m\HRqăU"*$:.ez&bX4KCB4W481qnOuIr=ndK^rN[6%WTM2-*.Q]+]=z.S=*P>Jn#p2Z(ScoăU"JMSPs8SfC+FKhnD>?UaWmh#G?P(ju?h$_h^C&TGpRCW03xTfj$IYzUTLmLzhwawăU"Xl$.yu,Ol*2zr1GU:5uh09r-K9ypGEeB#YzRMT%jjJjKYBo.q:QT#'jkvZL+bvuăU"^X3Vf3-cfRR<SScVnm7GiFidDT9$maU3^PC_<^/WYC,e/-+>;BM,28zeMk=06cnăU"j1kU+Ii=36MdgDCGXEiUj(0Cz)W4o>vdQFLudZpQDY1S[]??UIP,-BL7.=BwBaqăU"z2=^.PfIP.QtbcnD=B.qGJ\kOSt&I6ad-FDufM^.wZzI#s,$9o&SE]X,ll4eX$năU"OtJ4e4qFF6Eubd]L7;p90^>wW66AK2O1UD*Q130hyf(3Dp6me-nSk%roRJ82#PHăU"g5yRqTgk]9]i;s<0HtFr7b.kMQFcD[P]P1f;qX,GWqME[Y=l&CB7rNZGx&/qT5QăU"8r$m/-2H$o&k%A-fT(K5D'XbyuQ6SWQF+?9\WNTDB+AB$lSnyMf7hE[=))7d(,9ăU"m)FjUvBW-'Tj2z0YQU*<+vo$mNj2IFUGr&Z?ZFE(1m5&Dp=7R1$2d_L2JZPe[d9ăU"8D8MAn2<yVm*)j^]Ppah.=ClWSm$1KT9ql*Gm'p\vRbwYx6GHo>$]or+\nRQh''ăU"/4hx_P_Z:^YHDCat47p'K2;K^Y[rK8-RW$eIqHfT6lw<\Rj[-ZU2*5jQkAqqD9*ăU"3<r]oL$lR>l3MGVnNz<562C2kO>d][7QSPZP.WPQ\+J;wF,)/JxoETT0,oa/S>XăU"0gG?'oke=$7%MO-mrC^C62*<YG+]aq8S*g[QB:-Do5vwg<cTU]rYORb#rWp+QdPăU"4mdOT5?N2sH%a;(q<$a(P\NT+FU8G,CiV89ou^j>L#5Hfc#NsxHaZg/nD>E26y=ăU"c[k7?hY]oA4sQ]J:RP5_9h7ESGqR>PGV<E;LK6'Zc8T&bYwvbLrmr5N(0=+YJ$qăU"c4k/rr<lC-MS-TTp3U,sMPaPrN;G0_kS:$(g/y\6rg$&6?liss,dJFLGJ]26eLRăU"'u?YBs.8q,+*aa<T4RCk9Gu-,ntL\MShWuTR^k1g..UoNdl:t/rUQcO[YBu/b1XăU"&s.Qs26P,TQOp-(;NT?vR*D2Qi$Rr4,K^bsDO#cJKJw6bV*nSX_4e:U^+3k7nBVăU"gClA=UnTp),6b*nN'd[$2n<6f/XV<v-]lmZoB+6P3nou&p+Q9VidFJkW0VH/:J4ăU"0We2[FS(9^(g2Utdtg^ua%Q;%^7Z#T(8OMb_v3sbRw6i=U*7_mPPj7TwT*j<KsYăU"B2eXkHcd(MBE$]<5J\MIJ?hA-7Ca4p.m\pd-Z?Dd6W$Fn(9#^v_q7PH6pzJx'\_ăU"RbH;9y,n=:O>J64LEs6bPQ3ck2<HtJ9LvVStst/Q3pQlQ^J^EEQ[YcDpsr0U&6băU".MpFp3,S;m^d*cZc&V$^eR;$H:Bo9uW=R+CooAAK$O69OY-$qcJ]afF5LjrkZucăU"QQdY^2*DId$4lrTu[p'KKP'pcIJt:\T.9G'DcrbUpKDeA_7UcK]5Hf:<^l7q_d<ăU"toI)^zIwZis/#jmbDrW;1hFZNw/+1q-vD;a+[<a(lu^&\1DLC1V_<4f?.yPq4$^ăU"'PE87iU8OGlq/(8n_Ts,<UGGVZ2a/'i',x=h\Sx,Aq#vLj8W6xnCCG,xLYv/3L/ăU"2oI1^aZbX_f:pkV[5=MQF_ySlB;x<g#sUDOVl\KqtWWDF?;KaUVb=k86g^e:Dy+ăU"#e_fvHH;9'gkAv>,2mt_s\S]%\HIs,%S6e<_i,U&'tg&/LIhhV$4V#6YWH,C7)iăU"6Z2FD8k=RmhR&LIQG0*=Yj(egP#Q3(.Z7)8(ad?<8?f+H-a_,?t$;=cG:6j?NSKăU"($owdIn:gHbKshN$#UL&&(9Dr(C3R[-e225a%VD'Sy*/f,(esVJa3X3JH4HJhd^ăU"ZUjI#xb81DPPoBLk)0NKW[-4-t'aDCmW=2nNtZb7)=4r&v>il1]-3Hh4l=bkx4eăU")n7=Yg>ZFUx:2OdsvJQu^Mu6xxBNiuN$8'xDup%&'9%%9%%%%-%o<A%GRT&oV_;ăU"7%%7c%%%1%%%%%%%%%%%%E%%%%%%%%%gzyh%mjjp%Slnx%up&'%9%9%%%%-%1h\ăU"5G7pcaW&mo%%)m<%%%0%%%%%%%%%%%E%.%%3;%%%kfCy&f%%jSln%xup&%'9%9%ăU"%%%-F%H'1dG&w(-,v4%(%MD%%%.%%%%%%%%%%%E%%%%P&0%%m#fuu(%Slnx%up&ăU"'%9%9%%%%-%1=o)G6=v>;(6I%%(ce%%%.%%%%%%%%%%%E%#%%t#%%%xh.fq(S%lăU"nxu%p&'9%%9%%%%-%,$,&GVX;Zv0#v%%m&<%%1%%%%%%%%%%%%E%%:%Vd%%%xpnăU"%xqtu%jSln%xup&%'9%9%%%%-+%VZ34JbI];xr6%%%p%&%%0%%%%%%%%%%%E%%%ăU"%7%b&%r%syfn%sxSl%nfup%*+%%%%%+%%+%y&m%%Ws%&%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăVBăVCăVDăCLOSE:IF S=155AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAndrew S. Gibson               GRAVITY INFLUXOR ARCHIVE [3/3] zapf_dingbat@juno.com          11-04-98 (06:12)       QB, PDS                1940 128185   GF_3.BAS    ' Gravity Influxor Archive [3 of 3]ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"GF_3.ZIP",4^6:Z&=95968:?STRING$(50,177);ăU"%up()%9%%%.-%3]m6J'R8(q957%%we%%%1%%%%Xi%lnfu%qwSgRfxf*<fB[]PbxăU"myTu46;2EO6m%+mm-4$4&3bg=\_qtOEE3GVzxK)%&[*fdrWKUDNDD9([MMRghvZăU"grksAE,QD?x3Nw$0*RJXxtS?s+Cr0iLbmS3NdX/Qv#0Fhu\UI[\R_T-3m1Olvw_ăU"%*b(2k_ZTlvic]IseG,FOJUsw#WRRC;9>Mf2Pw8A[:?7/tt<Hm0F([+<aNGC.BAăU";O2oCq#q=JNre#R<OxakVF?36u?C)p)23Jz[%CewMBxP[0nmnCl<b[1cx_2h]L+ăU"eNeXd>KHA0_&$P49)[XBg+Y<'GXHN/6E.r1Kw\3P;Z569Z;aGzf3I&\[,o1Cg)iăU"9(/Wbv+G13PB?g:9V^M+[d<Xjn_&kH4qew,&Y&aJbEd_JtvRhwST/t1wvS?QP&SăU"p9GB$]'CET^o6&Si*>+'/u1W7.^F';AIS%8u4Ci?f:-$XvNZ/KMx:oX1.*Af(s:ăU"9ewv8/,)N?Q8hR8b8(#j22&W'pY+(g7dUuU6c,L8&L402xp)rBgKbda^=DKH4&yăU"cs[7*R,,2DGI'q1L\$Ev7[Qp>4dL:8DQ(N&^Yc_vc?Yo(M1W8U?G^sH/Z%Z:W%năU"^MRJ.%NHcDrwzb(j)VK<j=.Li9FZ6e=Ta<yl6$1Xpb+Nr-AaPgH7\22FzvyHrp?ăU"V&Z;tap2&TNe<,DvSiOu1TMDzDH+BZje38Ao-ebx,6bRx'wRt>_]Bvg>&W=PN5XăU"n:-Lr3semD3q1J;rPor.2>Nb%bf,RUrdH9Zbm]Z*OjbeW4-\IYCY,u;MPj)B\x(ăU"5sHJONPvI$\Jp#nmR)fc^P,9ysUhQOV2_ws2mdP3O7P&Pkswi_3&g;uLPbJSZA9ăU"f>r]EoQM4?Q]2um4brQ=o#EWska*09ZQk.byx(=hnd1*7De\_<+jLGX'2$7&%mvăU"M&hxqr$klMSo6+dPuMqB,+;CQIA+fU3-pW^\:6]6=sbpQ*E<Aj8KZ8x=0Mn8IZ1ăU"9O]/KpL;-Y:hB\G4qMlO7EAoaFUob5'HR0R<SkrU(GAz2x1a#)KW%X'+o<fP5n1ăU"e-E7C%QVfTf_:E_DGUFAZw;p/de7Bg\e+=Sz)[D^l/]/,G^B?iD4Qh&uH=c1EBNăU"8Jjz7+1e4;6ZL'_p[Y8MfB6Mr];qMp>SPSTG]w[<%n$%4V^0EN:iai)T36O#UhCăU"OmrG1[I4&5p?.OOL\Z*(H;eni[n5+5/\7mD%XImhD4CIybz7T<tc.-qW;b8)daQăU"(ZQ%/6,WOd8AJ3HJLYPIX2&uB'G&Bu96^ZtAN%DafszjfCyZ97.K97COuYv,DzgăU"gf(.TS47MyAV8Z.6o+-6_E<m'0SAwePp4edO'%d#:/1OClu6asOg*>QoVAx\.xdăU"\,sw#mmOu.h$ph*tO3dO6IYx_Aju^*oOOdI>3Zx#xt+zfscLwY(J-_k%VVB2(tHăU"x&d>tm,NWmW<arJ]6Mpu+>DJAV&11&g(QNbbHBQ]lmQZxr3Ba4S>&wG_.*xt&n#ăU"jWEYw0*K8?;[N)$J:pAgYf],z\lFUX#26W'pd'O3lY4(oF1r+efhq&hU].nE93-ăU"&-SxKOyZemdRMro\kG2F(<e.[A.Bk\flesr+dM]Q#[8LSM\L]?mAs?BVt>h61oJăU"1E-BSkSVh5v$'Ujd_nDN/+e]p/mPrlf2k&s#rhZMCsha?b\ok;vaT-Jd2]#JOs$ăU"JHoO:f^DiEmr8$,+hcSj6J^Gmh32mJ#.WM,CwvMK'AfI0al6CNRoC+DEpDfA+A/ăU"8Hxc)1J.Qen&gB)2)qk82k:Ew$qP1r$>.*ei$8jc5E'w2*P6</0WSu0qU+=iR5YăU"ltQOandmg_Ikj?o)'Q5zCX'uKbB'9;bd2D9o41ZuS)SJ9Z=jFUt*v]w+D'O%Lm#ăU"5goS:<A]%p4KCbZ==lx_Mop#R&&l,2$>ndw8Xz#ESViiYjWf%-XX%D,NZI=,/&văU")pYaD2xD20tKW49B(;a1dBL-z;lu9gx2P(4r\J^M<p3,UAi$>\pu7,YS<Lrhy8'ăU"8-Z*##DF]M)AFsRbKcC1[i/R:4v,H^/imoUe;<q^O23l2G:&D4rN?Kernk&[MQAăU"DDA-Vf&rm1P*[PX<etrr<h0vy'ME6O>t(%NZnQ6X./85+JMc5(CRnQa>);$Og2făU"'%uQXR$.al]([<(/mg*RQ0tYbV=%Ph,33(21AB?Y\?<<Xi'Bc/6MfYS<?rg+;+YăU"Og<&2EhMWIUAR$aX^&:[D<PQXh8vTV0g8uUak/UVLaHB533+?E/k6JnG2+D,nfWăU")Eo.N32j'Gkq&+#F=Hap^tFkY.#3*\z\7+^n>+sC9v=w5FB*(5TA>U>q<s?kpaGăU"ZB*2gviz5UxC/0O[gHTGR31:'=1A+;1&GZkUxEeYBD-84>O]fBL/\*^VT(_bs9*ăU"R/'V#?iEX,o9:LOXUkW-'oj:wWS3*>v#dFm)B?JS4d$f2W+_?KU)bRp(E0i>b\BăU"bC6DlO$1;Wa/-akQ>MrwF+w\A[AVC.Q]P7Ls8eVI*K:'YX8tI6A+$8kGa27s5u:ăU"Qj:?w_V56.Nf[UfA$Iy2Ue;+s$eRuJ*-,cu_xwuK2EK']+#Tm>P,-jE)?eF9<QAăU".>*vJhbFd47*G&2gtbXOnd.-]+C2#h32^#jaj.Cc=k\X63UD4]ph6.6O&VHuY<%ăU"=:o*A26Iui#XLsS,cwaP%'dvb+;1=gg$*YPqel%:oOpo'5)&ZA9Gk/OLh07N>&găU"*M]f2gKVgk=Ubn'pA^pa)6iSVv[5Xxo[<8x?DD.kR45i+_7\<_AO1:g$oLc]G/XăU"VYzW\tr>F4R-6t\J2<j1)w63m&##+>=LtE=rFTT,%H(axw4l2#9?I;eRh+HTRQ&ăU"Q1=Hz0h]qZ+8W#,<\abbahxvP8F/m>St=.T7q(tj?IEY[%42u8GZBJm-H.9h69BăU"\jt7>pblSnr>Tri0]9m3B5FC]*[jNZftp'DE+Tb]jUA44+PEdlduA2x9:Aa6N+tăU".=+/DKc;e,eLF-((c-eeu,uFOz[I4=jX]?S)Sthl\9iQ,*ban8N0<bZ/;S0Iyw#ăU"h(['K+AmMcFXl<7ESNVv:Vi>jE6ShaTki#pkk(JC^:s&\;rXo*qBxmHQjvY<Z7WăU"Kl^-n5UoPX\*6if=AWd8\\]%)]1w,IYojBE._4TE+/V,v)iQ>4ct=]a7,>I+X.wăU"Vw=Gx4Pc64_SXk(2i%q>aP8VLrRG)#bvG,M%Un_7rF%ZK.8h-0:?><;;gcA1[NwăU"0#2RHnfq.w^1l[V5IajG/2B2a=zaMjV?;>;kg[q0J#G5A+105)&4-_=Jt;uT0/-ăU";b.>u=j3)=#hR$Xj2(TSk<^g*qz4f7-:lT$Fcg4[c'RhW.Z?Ef*tSt6i65$NoHGăU"SPlFuq.6)F:'WhNW*>p0WQb0sy)2-45&yGYj_s\RK7EYb*hoQq#o;>_V5tX0__jăU"kzMWBssJ&?0Gm$mr2=_^+XS$VNucEnIuVlwCwpDThcLs<gEinIhdmb3m]\hSf,.ăU"kU.mi;x.\i_4CQ5^03xU__q?BJ\m+jTL8JS[s$3(P)eS%9ZPg/f#u=5ADANP_i>ăU"%jSNL<-nt6UWn7fra\2kNaBk2fG&*GNNHpuuqG,ffb?F<J1c8e#<2jVSw+od=NBăU"R&ALR9M>-d<7*G4dQb=(\VV'AzEo$eR_XRac?A^7HsXI6wfj_h6<K]<:)ac'n\jăU"2dkbw=V3,:J<Y.Dj5]HaFUKCozg?I*q-M[tug;1th6lGJk2xLIWCCLw2npiM/3oăU"q+JRvS>yS_=jp6Nqw369-bU>'3?_9mSqJ&2w[KB?Gx)lvj'MWpoEXk,-b,fA09FăU"UA%2w8oQH+D/l4PC,PvkEBg4stK>+)&wD0G/8w+yC68ua/^*RY_DARCMIIG+==lăU"_Y_nA\&$A$*PN:y+1^sDa_]E^[vei.;t,:VV<(coq?T*O-IDzSBB]XAR,1cjyl[ăU"lxL5IW,0n+PgRY=<m8k-dmi9UCFk1]p5*=3\,gBbs'7<qCuE-?gbBBD,i[e:Y6SăU"e;l?w6Ia36i73:J%]$ENw2SWFYQBmMS\I:t0jl\S]21ftl-Z>gv(_\<h5HX'BMUăU"fgRlsd?u.](4/B8[_o\:hz/QuSwPK_*&6o4330WhlZd%mvpr3qMioVs34CgTDB2ăU"#8xcvFX3Gxbz<os-K,QXO\(z';A=]/&9D79cdE6M#SMMD&N^NMELh5cQ7sK'FusăU"/B7ww/\dFOBx%^HPoVqb1t6iG91W)mBbVrjtp#p)<[QL044k9WDIFHXff#vvEM3ăU"SQ1#t[7;6-r]^[Fy76FR&bL-TW68Y/*+H)Q,T\YWKq^/tXF+96$SI=-pjAjle0:ăU"4c49P3+k[.ZgcW;A_+bJn#o6?-H^9/PQ1GK8H9KGmJV-gW?2aS'W[XEn1TSOZaJăU"/<g^rE]Rmr/#YSQbDH.*G_5s(_T27M.[SNeh=#kV[jO=3#m*eZ<=HRb<h2>2bKWăU"5nbTaP:sJ2$smasgkt+j_RP0j'<&989<0AA?TS;G(ad5$>.W\+MtkZZ\ws9jIbuăU"(t$=yj1gz-/V&1rq#+m-:83O^5Nuf?B_bE3^^L)0BIN:5Q=hP.2Ue<;ZYl'xC%>ăU"CN,o<4#T9>Ff\F4PYf3e_Ds]+.OrL)EE;ANHSV:)GLE0C6ZUT:E=[5,hQFFfSNWăU"o8MR+fUf1Uu(U=8=h\sN#QhBv]:SBWFGFSuh9u:5i?IIcLHjs-^XXpf]3tu429aăU"_2\,UbqBs(GSbcB6?5DV9EvXZY<V-iIUE?5TsfQeNI6%:n#U*Nov:)vjFnYG7BnăU"DT+1N'k&4$^*(z_iD$QhUfo[8kI.UMEkWW_15aDEUA6mm9UR#w/X\IS+3/dvLPtăU"a')cx*C-xv5%r=f%5?c,dQ+hBHT'-yPRAWfr*kM:2(_)XvH/F=EcV(3w[,\kyb7ăU"e0$;o;d-d6U*k2KtRk])5z:HiYN0'/CxZm,r8WqJxTi()':sW0\t0I/&zk$J^PWăU"DS*:Eqa[FnY2TWIl/k8N_9l+$7d\oH53q2j\qGnivq_5>R%r?Q_MJ^7qnZ/kHV?ăU";s*3iy[\=<*eFl\78RZ918t/VLh4\([UgXfG6eL2[J_=\P+Fi>[I7o%i\A1)h&(ăU"PRG#ZM=ZlOK2%jYTCZT-N]/o04Q##^[\Xjv2cBox+=Y7pU9p*ut7Sq'fH'7vE9?ăU"Db/ZxS,n8vjjpCF*ZTe[k/&S:dKM&yO$B_:D>K<-RM.qS)&%HRRcWWOrq_71FnSăU"c?WwP:h,7]f\;SjPgOo>AXO'6T=5hIUA'9LV%0^j1dp.C;2;%TAUh*D;#ter0SYăU"DhRuzKnUDxUs^eGLVR&V-)&NVbulBs0u0xd6G,Y*VNRm>)\%]Ztu6vHi3#F#<IdăU"lvY6FcMTt^Q\'2,W,=gU1^4umTexQocq-^BhVdZQ4d1Udco3pq*A3snLg[8I&dKăU"prjH3cP3nL'_X<qPLgCt'tN:6Ex.2&&VqUMt916%Rj10fur)ZKeT7hY'xDup%()ăU"9%%%%-%%^Y6J[\X;X',>%%*;2%%%.%%%%Xiln%xSgfaxfbtGB[]b$8vOxIh4jl/ăU"S#a.S_LtwFGYqw^FP'_N.DDD7/;YBY2,+lj1t>V1dG9b2[3jlt57tg$7ypN[3EpăU"VN&%FzuVVK/tlTG<U-i#NZeh.lG%0^?>/qZ+5=uS3hw*><pvNavLr.&/gY2c/*hăU"8a0KV/CQ/g+$<=ThBg3/d<-4RCJU:]1ZXmDp8>[,:3Nj075sE.xteIA04-?a7CaăU")C+T3[^5Z7.pL#P]mPUinuXrf:b,/gqf5?j0Ocrv.)lh,WV_1L\>1l0&mt(WJvAăU"963K6-5cl_q$XcjZw(^]4W]fHTo7N.Us+5>Q>$#-=]UVL7pAC&lF&kws]1WplUhăU"QLH#lv6%he0]QZJgFFzKi#+-M..&C(h\\y6HFe_M>x(LWG-luoszvsJ)hBu\SH?ăU"INa,6GK9Dek//kQV,DZBHDZh\]0YcCNiM:vXM9vv?G[ft-*5SsU3jb>FqR0er+căU"UWW\vJ(eUbD0R06]JNV'3G=>?d$$Q<vgRQtJB8T1'S3\[Q*M3,z<uR&o1)-fGb1ăU"Ehi(vR24m*<U*I%^*w'pa0h#nCP?lX:p(nehNztX?cb0XFpOQop30w+or=+1tQmăU"l#F\D=4f,DH(OP9wJ7y$8M;&/C'?nfJt]=\Ih/?mx0<j[;G(ow#CmX71ZgAQ3w#ăU"m>q8%e>fjYIo[h'a\s=\rf1*(\vLMH10UClW:>iZsgeC5NhPcdHmc)?7\5dhILFăU"JjO<jmal41xR+At:trF:/tZlls%j/T*Bm8,cu;]6G5-<N%cx$5?,0ii>ILIS(:WăU"tY*^Vlw/08\7cW-Jpl[dAbi;vU:KL3^bX(/)?[dd_tvc6GR-YIppK;c'l7P[gkVăU"Bvb%7,Tl^.]Uc0#877=mG;g3ppvwDu-*LB_Dq&lO$L_#I..;<7j84#Q7?]G(8k[ăU"YxSvb3RGzL/koN#i*i\KQw.%R;:mkbW/[BXe03P9]A)w%Punz%xp/q'f2p*VLlIăU"0Dkj<L#.&EhIAVV99F,oX0awYmlIU]GRoB'gy[[taQgfTh:KWq^/\X:FD6=SaEoăU"KD?qVS71AUKl=5d*BPA;_+T(x8J^mJLcqiUcDCD#i9B_m+Z?hSt8_*,fAW']n[$ăU"HeSWrB*wUD)FphB?sjYdpp;BWZ)oIssm[u2Pn+5c7S.EEbMU.*0naq]g9;F##.răU"bOT15sOZ+BQF'm*/525]9[Dh3k]c1cr^.opmwfMVKd:wuV'VMvP9xhSs1c'K_vWăU"\:;+;Dv5rmZ*-YE)E*7q.(G6wm,Yf3Ih)bx<q50-+u2wm3k2n*r^$ZV([8IFZy+ăU"aJh=A?%\MTqA9_7)SEn0m:0n=wkISUQ7nUgZ%[B>]1-khk<u78Ew++h.(RH/.kKăU";cQ.*eJqFUVMP?lYPX(l)#hS#qEh*AF&j=p+]N8]cct=0C%>%z069N)%mZ39r%;ăU"X'R8eijWg0v5:E2-0v?'YI^Nnf://('(b8<eThU*?l:)qg'li<3Pg^Cb56JOk$UăU"&Y/OqK>DuYjc5F72oQYLql*r)(ydo.,rob?SQ+-I-VW%sYT2u=D#V+iaK+eTN:6ăU"bid2#FF$;,P?uv<C+I#RDZ)eIVRU$xS=HqGQKY6>q-_yw$[Oc0?n=<\wvObX$eLăU"0ZeZ21)EXa84F50-5-;+GuSH9,#sP+0vzV'sDUvK4v#<1v#,q]>4?1]VM^.6fH8ăU"VaNxUt]18v&?4::vZf+%KaCVDV^hB%3pwiUD5YkW^^12e?n:')%r74Sk2=W^TEaăU"z^4Ml_i<Y\qPJ'+5TK/[kXD[h]68^QVK4GjS;ubU7^o<=Tu3Y7/FwT\WFpF:sFZăU"N+,<d:c:92Z<bKor1NVO-Al+1Q]d(&mVNTXM%pZU=-/).&4Y=x.cOo^X9/5.j[YăU"BA)wJQ6DHNxF%RWpa(v.*<J2cG6F5o;JcVI_/-'8J$Aw67V]8qz<X?rVMUfF6*căU"i6'qjW$o4TW\q#NbLh><I,h?S;6vfor)VnFS:SIBlWLoc4W,Qjjb-/WDFP>fk$9ăU"eoD[rgTsbw4ucw+FQ64M>fxs*jr+<64qM&X>lI5;$rg=Q1h.5uwUT<G691s+fbTăU"4$fF(VI1t50F/HLtUaOT-z'E8[[]cSp:a?WT6$14tc1%P/LNt$JgS*rH*uND:vaăU"Wa;9]s\bIu=/u9>)]I(l-;xl*;xCQ0W<Qr'h(ULAA?:r+a6<FYuW\UjK*c4\lv6ăU"pL_D)H9f6,k:a%b:XI$h8Ue3U'HYCnaq1Ku5)eEx(1dM\/a=]hZLO$'[<(l58kVăU".ztJ470W.?&\MK*'gfIBBH^vEfBx96IjL_7JcUK)PO.R-[tWUk1E&'9&A:$/[8.ăU"I4c90Q832abmv[j<Z$K3MKH=iMGsDU_jvf3*\o1C<LI?rb#w?k:)O'H8$nt.+-HăU";NH0l9<GHoK^lhV;8Z'ge7v)fr&cs#6X/0X2ID]s5RAhg%/=eeeu=m0[\(>%0EBăU"UrV)(S^pqj'+UhlfEa[],VY/8_rJzYPH_\69YjY*B\U=J$mXas\CXVP+[eV.L32ăU"gG1Vnm%H=Jm5^yO\keu*0*1lKN.eMm+c2yWf6K.Y5Ie5g&5UBAsRIN1$6I#nz(8ăU"r$:IM3BQ>f$Nna/b\uG[d6K*$>tv;L'KR-/U.R*\uxM<jm+G6dLVTx11R219YC;ăU"a5CbunQMG<H5$);7RKIj<#'YP2r[N>.]C7G7W;.B5]M>v..uPES*AQW0_Dnda/2ăU"PG[.([p_0(:8*aLmh-CgHh+%eh(4=='_4t4kA;\-R(?f2zWTI*'^KBM)l0t_t=căU"/+PRF0HnSFG#Rz5Gt[>XK:28Sr%sX5FMW]V'3.#.B6L&h4wo%q';0;nE%vGu(6SăU"VqWI1]fRsakc&<6IRcr%=v^Ppv5>(cHR92ZBu;;lTA+:Iv/.Xy_^.I&9U$kUv[GăU"9_Q'W1oE.,m9rWo^rXI[)QwQd;=sQ)2*-cJ&Nvm9CH]nH0QkKDs5.kbY9gOGcmbăU"bcAchVeYUiqS_d:CFlq12pd[/IV4Xx?4>>C3N0w9xr[DWoeOG8rI:9zzWN^%e^3ăU"+Vm%)+n%gI'Qd)$85k4V_L:+<r50$YGk#A.&(P3A<$i54Zrto$#B8<S18QS5/b]ăU":[P,qYD:So%QV_3&h0c2bujQ,d[SXBgHXwg%9sE/r$cx<DS4lM*r0U*U?SBCYUsăU"F*]\U9&Mj5I0Ef7jerSZ7;NfV=Fg8_)_W0tFhPLSg:8P2SW$Pl2CVTtB(:pgSY[ăU"0\?8n7f#WK=#Z<IW3L[)m62Ae)u0W<MMF]htjX*Q-:+N/t7rU\S^/-QM,kE0cR8ăU"KJkzgVV[y'k/]%Kt;7VWXk)6VTlG4bZ;fpayT]j%pKL7Jtl.oErrZpr*HRb[>f3ăU"s5Va7]Vxa44.LCLdzZIL>rJ3'<qMRw-$ZY3DWE_0833TsnY\&X1kOuC%O\$#3W:ăU">L3A.pB#%0NFPAZgeDtXW?c[MH$>6n7e17\op['$)ttYgu1)'=9_<c21sKO[Mq7ăU"nDgb&C9-&F0G^QbE5aVso\%=PJYGn).+T_bJYg*UN\)'f+ID0fX2B92heQT3JP/ăU"?'sElrZ1*bc6H-Dc>J'R+X;+d*jWsJ92<O7Bn6+\3qfg&F/+?iZTwT7gvxoef/YăU"r$G7UR2A:U=#VtG'h2p]hPxd$QNvs)U/ung;=l-U]S$/)CdTfe^^\cQHo\5/f#NăU"PcNQB)#UTtP1CXg#*'W[h/B*a'l.Mjo:l0:M.3d=2+C1G8H;7F8(B4n)LGM(?z\ăU"GAdiYttX+g(jjHJ&qWG.TA8jK>sG/:8kspniOQ\B/QaIc1;78hPp#WAaK:HwJ3<ăU"2#58RKRmV*Tf+eM+'F>,UY4)8;K>hSJDm_DS62MBC\O9w^vUgN1-k86dQ[<=g^KăU"F;wTd1pk9bfW,1ifKUJUBvnpfp.-BPMrF+idt4,aPULj?e&mj)S9;_CyeXYe*0SăU"?6uMUl2,Wal?P<&Q/3C\O&ePrQ2gIb9Hl'EwQMj5C.Cc8#CIPR<Hx4'Cu79^/-XăU"3KCQT5r.h)#VfVK(lY;OJ9'7D0Pw^Qk55<Y'q9%IME'>[1E/p7IiJJ..X5[M0(făU"'&hP1/1W]F&3xTEu7ZW$)F1Xk1X?UDKgBG?(c^ibrPFPb25RGOXE/8v=.PBw$4oăU"meCj09HlC7vgVj0*TuJYll8Qiq:V5/)y^HRGiH?B\zcLE7=o_No39f2YXPVvXHCăU"VLR2e\b_LZUXdLj=jmn8ex:qPQwD*HZ63#:lT7tC'Y6+_k\BYLW(s1n9=bf<dA#ăU":fOWK_FyiLV3N<dH./u<0sEwhYDpLydU:c$??q[+5;Tw7*Ovlplf:y'mhpol&2PăU"uiDnIHu+e=3*Dd$9el;f/Bt6Y>dA=/f>sJ74ZZdX9[DBFUI&+5CS:m</_NjpQ#qăU")Q)/*$xIPFnHC8)e%gzH$b%yp'6[A>H1GUqV,U<,.oG;$;wdvqRysc.-$u<Aa/-ăU"opQr<F[iK/N(<XJh=9/i]y]Og^,5pMTymM=_M1OK%#W9+R/IULY($Gdj/8<wWu(ăU"#eNpbM84+MmeF-:En;n/$vz:%1zg*8VOX1El1583/p-%]]99wkuh2/]QUGRB'MyăU"8;&hiZn[f/0CRZO4)zZn1P<G]:fW1^M*EI(A,+_=06+)UWX<imB?G)&t]%?O5_PăU"gQ=N+o9*cKMuX7'Ol_JjnRumpL-++%;_zq+jYUjvxy$WtJalj=q[,#%')=QsKD(ăU"ANe-Ukr_wLL7MY7b(^>Fqswj-S9c>;Z5v15jc?yE]L+AWY0e?Z2.t(VXfAJ(g:]ăU"pd+aAXl_4G0.$+OL6=BJs0/mZ(6hah'_#ix_jR#_nQ2&kkvH$W>Wh1H(E&MI?]YăU")N\F4m#AArRv8;28(vQ1XgFd(Sd7*M?G[N_?z([*\SjF^$[Ek?w?,F7%PPq[I[$ăU"0usE#R+j6QA</j,z&HaePI7,c?h,9/x=BG<e-=CGQ<U^?G7[Jm7>%g,.9Z7+56?ăU";Y/[5G?.nAFL2SK/R&-rgjEbuljA:-*;]S+Q>KJ_rgQ4BojRH$YmBO,P,A^qw(oăU"f]9\K3gQz;emFti^arq5m]b[k.%C?e1:cp1'E(Ft(H$<8oAlX[hMW(aMM>GC5)/ăU"$O$oyc8b92s#83_uSR)zI&6Gm+b&_9P>^tT'TJsiZ-<8'l?5Xu/I(mn8c%Pd1<băU"q-t=g<#Ma*cZu2h\s[a))VQG[cRjMCVm8xDyIS2=)9tJNk&%Bqt/K,[C]:W_rkoăU"94Xj1f%2fW;7WW-OT.mtv&Efp3)rgC9Dr/Q]_c7'KTLGF0fDiEA9aYj.5Rj[UdWăU"kR>1,z#MZ))gocD0=<sV'JVLiB[GL+lFFAr(i&MP9(f<*hk1<baUUg7[6q+;(gfăU"XOo0)F,pi\jU6YmBeqoRSUl?.:j94&.SBrt/viD6BCqI$*_/Zs8MmduU6^68AO&ăU"'>\q(z[R:B?pPnERb;CsUL3LnU/T%)<G03jOs5\'uK)ki;MGLU.q80q[I]Cd*1HăU"h-4s&ay9AMchKz9UBXe%.o;)3</<+Jh#we]Q?O.9*%9TOk#[?tsDba?U,%6k9AgăU"Q/rD]jIeX+/pU_qYa*2*>Rq/?.AmnE^-ZB9g:arufIi<S$tgsDEDI1.X^o0PC\3ăU"V2]+::x[CUHyPS]ar,[1,0N8Y]bG08dh=i4$oD.X9%6.T(aC/U#u:+r2/[,2O:măU"g)PWVt6A(P(UeuxlbU[YW^SEe2qC10ntHC55*d(Qp-7aWm9b,?]gK.>l?$_sX6NăU"RQ<M7fk\)&65o.muOGyk#wI/OaT2ZuE6(km-hG^<imulD(uRI+;'*qk\i?oQE/^ăU"CzUag+ba>IJ[I\]E0Y+*&WqV1Tg?CEJ,]vF2qXhOT-h%8eVVi+YGASfL7iTqM-ZăU"Vd+ic)Kjq;T,W=LA%,+OD/L7K:.[_zUGBkztaKFx93S8(p-N.f:,U^CQ#4(zxj/ăU"<$LMV2bMep$u-+bYc,68w]+oJM:\(5\vWi5h6;2RE_/Y[xG=G_Bg4XL7K44([?_ăU"&dkt\=l*i:]kQIgqnGGLIUsxrY;)eyh5aiS74>Mn)N>WX[;H2Tmyn6\bN#8+9clăU"?W&;DQ[WLQ::^[g[n/8Qk*Qu-s6aJN*Ue1yI:KHMB[Aq\>8YF:iY=rGN2MAM;Z;ăU"-2J\iR&JWJOfZ_WLypu?;VEIjd<K4O3QKX=[UfS>IPkuB-Fzg(KXEq'K(%85^sAăU"DgXk2\(zp\M.w-XnZ549>%U=2_Kp,)&lmX0E?5296rlM2P-Cm[2ZvKq(?3dv4DrăU"RHKsvCmX,ABk/]?M1OTpLi.BoR;>J[g(LW.Qe3oUn*c8sFNzFLlKW^awXebd2T;ăU"ASJSQoYIDW9?P\j8\dfbM/t;>sEHVdp_0WWAFCEl63)f\qlV_Yd0YVi%xziK636ăU"*1l7u52*&zGROz=:s3+osNMznpol(Y*F8tYNTnazo*AB*u1YGXbEA&uWFCP7XmXăU"tM5BCkK3wmv>_Q?JEUhJtCIl1JGle7w,^V,&I58Tf_0rDRr1_^/+y.:0SOWDdwzăU"GD7,kYFvZya1.)xLe^cZVUsqNvPb%Km9'h#eSp\gYJaP+M)D.p(SkS#pF.56DLGăU"UK+MlmmeO#)1%+vp+QUk.s]Uarm#FoK7HLvV>/UPm+I<0\?Q3q(&cm#a'vZDiqyăU">_#.+O]pjG>+6AVW2oxY6B.\qu'f=]ez1bd]xWq7CS3W5,hh[Vi2ef],QwPK]P\ăU"W2f78b([Xqct2f0AZ\dVaKY2Hv;Pv2&&)TaPtH;Q<Y_Vv3#$p;=3;y5lbpmid(păU"ozp:iEe$g;&ENe*lu\=O^fc#;eVmtOIQKFc.pZfAaNcZC2)Trn+C*<_r*HHfiE/ăU"e=L>8PoGoi_>w*WNdMS>1iPHa-T3fdw$6l/nIoJr97AZ;]5qm30MEgYPiY\W70CăU"Mrs%3;eNCUp#p0M0p93QW1Mi4tdY7UxEF)a)NanL2P_3E?0s]qJUG%Y1PHBu7-&ăU"1+S+W?q>IU<TUoeYSF,vj0n06=2O;cMffytGeM+gVy<6wS:zKnOG$faV=sus]WQăU"M7s<ghRF/-f(3ER>AZxf9#J=$,vCmZ/kP<j1qhL<H1I3TwyUpdtWUljK9bqmS6TăU"vbtGVmM4xoQLlCitJe1U#R=jKOp4'+wl('K5XO1lbVHq>EJV>lMx_U.?tE88'n)ăU"WQtqes2tENtDW;(>KXOC](ot+9Wtuq3J\lT^KkTct_a/k'X7H17fCaU%AFZI,JsăU">#+,IKk;]TzTiOo*y#71\nz%qc=THe_jfeh)a3q80ni#5o6HDqto8?;$Y*]c0CKăEND SUBăSUB V2ăU"qzcq=r\_Z<gln[8SuLpCeCi.O(,/)8gVpj)bn.oO?GF9SQxLqBn(n4'#G<UsFG\ăU"IBU)'d;44?z8<Nw+yKdHSDe,;R>9BPW*;mWIneBI-.<14]94:*7QY-G14KeHeghăU"4Vi*atBUlfeZ3l>u[H2s(slCE\M.6.\VFPJ6JBN'Gst2lW=(B$U\HPDA%WFc\QgăU"GBcCHyP2015Dq*y(AtCux'5.)y1A3/k-SD;^/$6NGfE8DLAK)OTR00[ZSb2ao/IăU"&%NK]&C=jJ\M.ATx]iqYr[\X2c6-n,$'']9-Sw/9py%,rQPc*/R61HvN;)I&k#)ăU"_K;&lGxR6QiM=%YMy1tJn<f4SpG7HK_T'XsK3GH2$%U=)OfM[pSQD2p;j3F=4Q1ăU"_#95sQW\(16*rvCPbg_YV8cw7wQMduvF.W9z_dCBNmrx.Txlp.,95b$,HQjKxetăU"56/d[/*p>J^vx[pz,(^$b?x.&F?S=&g3\ztItixlPc,.L_42-?*&trt-go]G'48ăU"Ft<O'eos3U.D(*aCgRF<Om;4WJ?n2b[,*hX;rjnC1FxA>RS,>0EKaS[*^$GX\$EăU"'o?9:T72RkzY%dPuy0$Zl<:7l:,$,xPtsb:i;)kGETPKI7tBFSUQp4>1[c6lg^văU"(=cOurLt*sWk15WMuILPN:&LsI/4PwGs(]'d<sY;YFs;3o,?B1:DkLmr=(&mT]AăU"?<Xj^LXR]Tt[PUq$Y/I]k?_-y5b&z.6L)V/)K&4vyy5$nBPB1mJ(cY:y_e02O3KăU"(g&(h[6p181%<'8d:W>pvvS]2B]=*+V62V)YfcDmOHGc%_LcX8$z?%6-1]B^kirăU"AVWG2_sL0Ne/%u#0XhCi35m1SiEU[Um)$/ONJHKGWj3_qeo>4<-pK%UlIW;D\HnăU"o//6gg7v3^vXd/PHkQnexBl+Vq5t)X[=.#G37:=&;#dfb]]]%B0/QF2w1fgWRliăU"4NIX]6Tsy1;_Z5lG#15c2YF*z^,s(hs#]E1ppJn'$u.Gp88a3_UZn^ct3<x*0:MăU"f;MYIL(m6CBnStMJM)L&tDY,Y>MS&O[#A#v&Su0s>ZkY'7ANwGt<8gkM5-SED9tăU"1;;x<PF0R>Zkx+%up()%9%%%%-%gY&MG967<I/*%%%%5%%%*%%%%hS#ksyDe&tZăU"Tdk9&\Jq?yIIr40w$F=Mt.&)PE$AC<oEO*dQVwRoqN/uP\pF1/b,x$gphfmBaDVăU"'5w\WAyh.R=;qXp:7T2tV3Nl:LHhiF[5-Eb>8pX\hFjKpt>m;R*YL?H/HT8mb4]ăU"BZi0Hc*Uo2.:i6w7f-G>^(aVG_T?<M;ZaB=(<P;u>K.>Qeo-6ms/C]/_yyR7%naăU"V$m^^B1E^&<fDff<dl_hLi+6\>eKT,>[7.k#,Wv7i0l8XnV^q$A+cjVtg>Mufd8ăU".3oH^Y6N1i]1x>?Lb%5)qgrx[WMAedD.#-dd-\&.gWS9M/C5oiWON7%)aB&kOW^ăU"\WR97LEu?dYD5<yF#%tDwPb'MUXC-hC(CHI,=vXc?B?x^\\ViYRAvf<VGhE3*'jăU"IN/(_kQN\YI>WZS]]UArN9ou%r:\r$H7D9n(<N>eD>gS[kDteOB6dCG1Q]QL(fBăU"J_tc+5A/)ZgrBUs3\Jmc#9KUu%7)t2->J:I+^HA8rNQB/P:2r(;Eh12Bl#k3M.)ăU"e3V.,H.Z7UMD)moyW%X.5y8-zN0.H;v:=OVN6r\0(Pqzww?t2Gl5_839faH8QDrăU"0jCk_H%(&sem'O[+M=v7>a%a$AmCpXK37\W^]<ipkNB/^Y5vQ,BV\61M$Tgktd^ăU"B3(wyPPwYH(4;sBbayNR9O/-FqaEYVRthvC>cKsX*Oe7ks<br[v_iu8bcLbr4fxăU"/Kua1a?)i<6\u]o(ev\JFf*QJ7<eQ$,($Y6R]>,o(x(#_4?X_AvWolPn5l6snIbăU";n:v=A.LD7]3%*P1SNHJ[]iyl<NHR#=B(+9b_x/dIhSLJ0d;7TLBt)c2=^w#LExăU"NwH3D8T7aLtuMij=Ornud.>uq#;MG-(y-]\l8Y1#[$:*vh^;zQx&d)Q5v,*daa8ăU"Q3p5HWxyPbpmtO;U.Mu=&]Xef^k_8gt*M6UXKNm+z_x#G.9xa(<p7&fv*DM:\u1ăU"8ULmcR]>X%IKkfMa8x7AXWENKxF<9k&hOp&'tM+H_O,)mgsG1ofj0pWxtG[R(3uăU"n]h$6N=#&>VB4N?U.F$[PyW3o+y%D8*?eeOOOGSM6*8_/Is%'ld%t/vxG3JCXC=ăU"&^EE3snZ_,=zI>5eiCxl-7$UQko:JoVzb6KqyIkcF('ffY%V?rB#OQm'5xdvWApăU"xIQsZKft%fD$tzlUs1%J+?T]B3)6sv[BOC[Qt52ToKQoKGDZxwr1c*q+Wk^8QTpăU"sydd&^PB$N8MAn6Oo)?<uB\.bK(ccQSFF,tjV-8r^ilY\1w\gY1*=$FLBDtTM(xăU"l:x#JY^ICfUOMDjjlkp5V+YQE+RHkLai;1YrbDl(-I#tlNnJcI'fvu-G$ptmL2?ăU"xnJ46H^'XXrbHmEMU4Y[:V33s#/S?J9:S+1n];hsNx(h.<gx%?k,R5lFNcmk>M#ăU"V7YJ*mk4k>(GNUWcSYBOZYvtp9x<u9uu_wxWjBx^]6#\0Om6qV3>\l?].hcVPdXăU"SpuVZ<?H<\PHXbXbTAlXP8&J'<B5JRPTZH3lbgXqa5WTAUH?De8JtMY>\?MpcYsăU"rHV\ZGLMb*QEK_g.BO86xM\ts$xQvt)W3$lj,]83KI;;mWD$7'8,s)s&&8?PpGMăU"z?(.#TPo9V\Z0e9)r%#V:S-,VL8WLIHPin2Js^'Yl,-Z\M*bIe))l75vi:S8$b2ăU"m;nXZo$^%;Tw?CfRLz#[]AM#e%):N$.(D*_0Z87BcXG'&sP_]sfhTk0gS>7AKsrăU"gvMvgdD=lM*B9m?W4f8h4\jBW$x;wjev1x=or>uLmYsK).mr;UX?r.=o)uF.Wf#ăU";lfXzb-o0Wn<PFx%#X<EDJo6$ZtpvNj>9mCnW'9PP\GLjpkZ7iCvmE)h=&Nup(%ăU")9%%#%-%UCC5JDgWTr'#7%%]%$%%1%%%%j&%mwj%xlnS[gfxNh*JBSuA+xXFzw3ăU",)k;1V(]I'w(An7mJO7-&#73olB3zA*W*xQ_m(]Re>v8LbgXIOeY3PR*Hp37JOYăU"L^.Zpm5);rb?8%dL%tf/XY\RHk=MisPBb7ls]t6?G_bBrSzn?I8bIJWEiOpd]5ZăU"G:8XQQbIXIVb/=int)u2p1;IHXyAv?X.qLXV<??=iYLO7BX.L2[nf7)GDciP$XLăU"4gR>hY\TtFqM(Op1FO&D2?c6'\c8G&Mf6.S5&PRPF-,.oB=C)--f&-5WnL[OIuRăU"m.:tj2h5<a=-;jR\4%?YlA,p*$D'LSWfJ_*E9nPbmV<#=l'P03#L??LD^^qGGcfăU"_ZUe7N1n]^%Ak^OAjgcV7L</,v5s'*w<$ejsa4dg8kS0s'tF01RQgLTVDC-n,>găU"UULhz,pOj#4OoAq4'>ASB^Cd'4I,8#<4Anunkri<IBv[#y$j/tXcwHc9Dlcddr+ăU"ZVOITkJ%rnP92*>4=$4Mi1A3Z-%<MCW/X4(&Mr[f0+rEu.RHW[AZTulp2Rn0-XcăU"U#5EPF40pP%A4+59=_Wy(gT(np0N,,>o:_nH>n4A#tmif+1NGWWUcvcae>EdN;hăU"X^^3)b#=fF9EaG702.3Cb6=1h(0qu(6S(KQE>_(V=FBU9sl=tDljU4:c1_D:DxIăU"BhU/RXjpVbl.388gjYigT+(Oju\#%lGW[IjT<BT^;E7?f6_6d\#XlS\12[qg:b]ăU";l^<a^B^gdcb#rl<24O*F;MbUnL1q-=8UXR7<5)#^/[EBNCeGj]?Eb:Qa%Po8(KăU"if>eP\6:#5N*JK3>OdnE?msalR#_XF%.PrbrhLn^W9709S8Bv#f?S'F>1V8e3P]ăU"^qh(&t8qvoOY#:Y2*#O]c97o(Y(pg-eYLS(;F&d\5kT:0[zr6PC$GNh>Qq/Xlq)ăU"wTcGj*$7kQX_eb>j^P)aC/qGuf[ds7/c&\Q)TK.N'=_VpZ_un0<3'DOb)]+<XoeăU"\6.\r[,1esk=H_%<BEF:N^aljEg2fMPK,lb(]az-qEj$JU<O<+fiP0;T*Ini8=uăU"T#l8y'WU*m'f:edR%O[5Fx:,Y&LZu6p[Gf=.+'3%wX4(BcSI;:yC)$/H-gXfCjZăU"%6I#mE9-(XG5+Q+1K2w1Sj+l961qiqmc07\LH\hUqW(#tQ\wZ9iDyR'4V$8OpqLăU"OYji\yc\lO;OV8O\J\-z:FGwNFe(*&;S)4pT03lwyN.k#xjGXBVhT*]R'MYAKsUăU"P7eO0u;&Mo+,GQ=Dr'<K+_d9-;AD3_JPXkDwYA0hg[(FPg#kH?qlEY>2]bZfW=wăU"%7a4ZZ_zG*l.6Htn80cC)nSmLI/($rK'xx2?A3aK%P2^'YS\v%Xhs#-%VeYNS2'ăU"\ZZLqgals8,dm0UsTzmZ0'\<*;-EBe+Cb_t9[G6(%yRX'Q)3Vj4$%g8t]xMCRDMăU"oLueugop:%1j<hg2axsv)>yUl1\\k^Ku0gyF=&pnIGVblqO^quEjJTMc:1YwFadăU"_pWpqCz5:%-t^hMT/BBRa-[y2(?OIxac0gEGv1z9?/tdp5pE$?F,4nao&I]Ni4RăU"QHBAZG&A#el7&,q[:92'[q6>mS9.Ch'ua^\k$M#9>:.x9'oxv#$1k7M4SRvTI#-ăU"udWF>ps#RLjmvxB]r=^S<R9[N[6)lc:2+0[/9p?2gG\\^N#0o+U_D5x$)K(hQI?ăU"qgUS-)NH4B[)B4yLe:<1wNnAzO#A1X+Pp)HS.:ieDd'-NAcCB1A0dTRT?3qRRg,ăU")pRkn'*sB_^*?3P-LR,\&LF;9PbnFbus4CV:_z9I.5SEP.^1y='Ir0\r(,=BPPEăU"z,-UM][u=5M*l:^ti$8QO<3IOH2'w#YkY.f)v2gm?H%U?BD].99qfl+Cv8o$mwSăU")y.>=>P'W<RCeo)25K;]6psI^ut<=nkNc,A9KF*h'*IG7tfGt]<Wd.;[.^LXKDuăU"jk+=I89NQ1M=M3a6a4^a#+I-w<-.^mcN8OY_f=Ok)cDUkk/CVRsKJVA&PRl7*kRăU"Zsd#iC?r<SAt[2N*H(Bl\uXT*580_SI;3Y[lYktQ.c:hAq)1bka;/<cKnuRz*i'ăU"lnMI(RBSRYA+(]An+yWF7kxE*[EHB?XvqLJ)P6-[\p\.YOb?\U7v7;P,[3.yb8'ăU"$>hpDYNb0]rR8.#WV*SFG/8$r>ua0r?r*WU.x+OOYx,07Wz)uJCz?XNqAL8Z1;6ăU"<QjlTiCpjL/pgzJ+C9nZ$-HTYEMk$4T6,?^01UYj3.jfUjw%oD'd4h^Ser7CkwAăU"waUov1#7P'4'U_,=;zknN-p]+N51vWj8cuMD2z^wcn'=I14f/O2uv*#Sbrcl7QhăU"u'zFZQHeJ:[><Y?oeX:vXjA<D1*Z4:>O?8Yur;/C/zSP<c?jI8zx+B\mU4=5BVpăU"GZ/w7Dwp&XCi2HjKDjRr+70?K8^&mkAYW2bfmvUC4A^j/WX\+.&v5Uk0SiU]BH*ăU"]W_##R%goeT\r-t9Mf:noCXR?)YBi<:s2&gHkYln&oDW$GuLgmQIbUpsY+j,%,#ăU"wp*fMVuzA^0+r1bO4m,5c-]n+T(KB9>K.iPYsccn+B[K^]HQSB\7e#W2wq#aetwăU"M;vse&+WBvS2bKuML/E8zC*BB^*n(1YW1La=NPUg)N\+:k_:l#=IpaaPDy1GsOOăU"M1P2bB+LPVR$mWd?=Gaq^HW9$xb)kTkp$lYkwO#?zl27*22v;aRZ]<PTU3Xc>3_ăU"ie/?GR2F7RFt*F1ZSH>_kt9Xd8V97YY^\31q8O<>W;B2415wx)W^[vxHLpg*UCLăU"qnuJ=nc^uVNt>6$HMQoZQYl+^Ysm/1Uc&jryzPE%oaP0OAvQnU)hhq/,x3:Fr&făU"-:$dsu&+lO+Xjy,K8x]-6$tk_iqU8p]z^vk10+(AW5Je7BlCJBkq)XEeGCBR.?&ăU"9tgw)Sn8\L3s8ZkPjcL3h8_,rG/9>gx&/uU3ekesDb2EBI>cb;^01z.]6#f0)EKăU"B(+eYf%_U$<U3;,1DPbwG^>7ADUCNXQFAKfV>^AH$xuUP897#KhXm[)HoP7pY&dăU"kP?lL*I$=3cZ2]%6Q(&5us\cM.l9Q#BP5\u&#KVC3;F#1i+.tuC1;$6C2UdNI%_ăU"'8Se.1de#_0NN>,UZqr\R_f:*b;U22fgQd*ix7AbPlBJ,d[gU<#a48%t2E6R#<PăU"6E_t8o4ui7x1FU9mmL09FSe6C*8MW3OFR.Tas;y0LLf=3;AKa5dUaSV:Wl;Mvx'ăU",$eun6^a+?uCYq#Uh7\B&b#So4lu2Xv7H*hhOft?)_YXo/Bf(fyKQe$ASBdHp5$ăU"c)7Iq3Z;2:bjj\3Vm(*^(8HsJ?$QHG6-ig)LNeC1VVkQEFI;bm9Jd-CjI'n>S3LăU"[o4.3ehj_WlC?Ra&HhR>C2Vb]3JT%xSOCmNBf,6/?xk'\--EOx4vAH/9p>tx>g*ăU"sx&jk&B'tIecE.s4v/1RcRfbh\hXgJWCQ+&R]]#*cx)pIZrK6]Ei49bWQ$EHFb6ăU":HDa.b(10SntnW(?$u^+T]jwn-qP=a*WYvOk5x2cMxr#5gag;l_a'XWAtt&I$+tăU"j*H?3Ks#,A*(9TDsFR_NMd)3vV;y5ZPY_?TB327OdKg26Bl_5Z0e\/ad?9Lu:qIăU"ldp.,q5]X>Ga</.ZMbo'zW9bOhLq/xy;L0q(_5:hmO,MC)>*Yg]AmijGejDWsN:ăU"kaTE.MhJH//xKYYeZG*fgb$yk#xGj=&o#+h>NE3aSnIi-95&4m%vtX<TEXbJUGcăU"/nbq_Brg;iIT<_lk;&[;tv>f.bk7#*.3L*XBdIoLF?i/n0rbX8QsW/'f/s&TVkBăU"g3c<a;p.%^\oZ7CQ=7'EA<7Y/<<a+=j*_tJWR$X&*BC>9W]k'MgR'8Qju:2nEJ]ăU"jFD;^wTQ$%CR&rjEHj($-mxW#dSJE[L%5V,6SvE[.R(gHP#Ux5AX9ZTD+#M0&a+ăU"-07#;VeLQ;Lf?fs1\o/+U5CS[N:kAz<Uli))54PE:>#bkd<IpBGVp&-5WU0V&AYăU"0>V.eeqARw/;q53.xPfm-YB$3-*$4>e&D,>P^]i?F><[\9AxLmN[1t.3Zz%3PfnăU"RfqA([E89Nr^_wxUoP5gl-<b:2'd$WwKci:IiRds?$7X)P41aMF'uM?Id.j%)H6ăU"itR-?#IA;?(]]=+?v/L=YNE.pr\8j528-&l_;C%pqraKm0G8De?;PGfacZO\?LDăU"?5O\[(e\xojK(&iZhq5Z8:h[le_*J89lAb^v57_I]]qlAMh7cJjmW?j6,wNs^=lăU"GUD9Fk%(6t,paROE8RpP6T=72Gf72.RtU0Vxnzt*2>NpwZ(xRQptdpl5DKQxk$(ăU"JvHBMXOXKpuR+CWXTwMpC>hRh7uxjWJ&c\['sMXVusRM=s-xT[Y]E4+Cw&F#lcxăU"T-N-q7Ngp-):&f+WVT&M?BOWLY1[c\Z&=MFxL$28jB0(NNFa^&Mf,nHsPtYn$LWăU"LYsRQu-qySkA<.D3e9InNIpaa:n'CZoVmM\VL+xL.9TGZ-[S4$h,-*kB<]/QU=3ăU"3%Nlzni$KuNDJ)P=e8e:Y'1SJrV6SCj&;rIJ?F[.63*)3:$H.Yq;e%%?Wep.N.văU"j-g,HCd;c*/D2f\wK8Q/H9vIxC.9+ywkuBq>8VQ2tVRln_^XNc?h;bEb:=3XW[DăU"*/ziE%7+zGSzv,-R]hg,VL/fU:aK_3SfO.gtTL\WmB+OWtc#GUi*aBkC0#A2u_AăU";f1'q:<6b-L_RzL3Q&*yz+MLIHGVHBD+<.,Xbau3<hQFV;eWP?.'c&O$qnF'Bh?ăU"BN<SW2U>e.sQZ:XPW&&GX5HFS%FRiScrpK=tsq5Iqs?]#1HLWi+zG)Dn-cPcZs#ăU";DokT<lro-(NK1(W:%yC,GPA[Th&j?ralk7HMMuxjd[1a>5D+pRYs03,6%'gRcEăU"GT0EDzR[cOP.W+zsBx;*\MD3EnC?ChNQFQX:.LW3JqLQ6Bo&R5PHFov9)jo[cZpăU"2AK>5J7xvQp<IGsIcPkKG)';FW)410kJ4M194k#XFy&K90J9gqmx61w^q56G[GsăU"-xCu$gfc,RdMqI9(Q;:7F?*W8z1r78q)k([DD>fbOfX_EG,CAL^?p9K,H]1qy?XăU"Om'&c#D^khx&6usLL4>CO0KE'gC7GP>_O_5I3HO5dO9]5xISQMzWzdcc?rCCIs0ăU"TtG#%)4dCavRL5KE8zlTRICiI(N]wV$GrC.UNT\Z*>*0%g_k+S()bD;IrG5,qdsăU"v1-#Vo3q(G^+O+^H8QNn6/(Wtw-eW.VcVcJt9'#(y_T2RRJz7>0CH'tlG7;N_0IăU"Net&B)0M^-p?0h%3hV^jH1W[i%?.ypo?vB)+n^bGCu:P+NY^U[e-_3i?GoW]b$'ăU"6v[w[mm[d\mmdD1a<%VgaJphSN/:^0SXgt[h\/rDMfG_W#Vo;4lnP54R<Va/w9oăU"2$R;lNs=6o:qQv,I.ccOo>_*C_<JbY?+Q=aDg8G\PMUZ1E=r\0n?6U]=pGuDk1tăU"e,aCgn$Dj:eA=8wJkD4(\_0ZxLnf=4>*g0p#fMNb()Fk?V]WI$[W3IQ;4ui&?NWăU"*quo(diQ7FXR]2^?dLN4Sh\+<><U.m[&45FB%Y<hep.Z*kt&>h3l0hXQ*=_pv3#ăU"MT)'R>O7%\X$13,i%=adF_pQ&mJ>62LD4.Mm-\UVQ:nIdS??r9[+M7ie>s(w*LtăU"8FZwDV1-2C^5K6s8fo+DG-[JdHOonLJn$p+.hH+m0\sXC,7LAw]CdF4lMM$fLVOăU"cb#U4hs'KU-5L73GkvO]nqq'e'hA5W4&IP?,$Df$(&8SYAGG(8>CQSWMfsDuH,KăU"(l^o8KZ7Ns*q5l#>,6]Bfo'aTa<GPJol2JIG9atI>-[P6a[\fa;L6,]cY._Wb_/ăU"37Ol4T3l,<2r)0XoiMT6HxuMnS/T]mP_(3mBs5W8Jde,Go6dQbsrM(gLqljfNnqăU"B)N,TTr#XIg;=]L77i*gm_3i/_Sn=rt=,5Sl:fI,ru26SXRgYM0vZ$8=x?Oj]/9ăU"w*G\g,s?Qw-Ps3I.pcJ*3QOR(MS(2Ly/[q[a(8Ro8B)J5d=gJUom[7XuVqB\q:<ăU"0<HY+kx0b^TDXoJR^rTI)15pT&$#)bU4udoG0/w%4up(%)9%%[%-%k#Z6JjCgfEăU"*#0%%o%J%%/%%%%l%nfuq%wSgfOxf(*,BSm;hMFdxT<.\Xh0QX:6??mIA*W-r#/ăU"+/?\5WtT.k2wQM)ie3nVd8.c$-SaL'ghVNVfpkgEDndJFSLphrF\:=9-,dD]^_IăU"Q4(\D]ac3SCx2]Or'4lb-S^LuEgE,;0>tyUbkHbgS&[MbT#$a?5j&pal[KAE>F2ăU"BC$0,M$++t3XBh22H_cQOen&UKsjuO5w(.]DDi.VRBj97#bD(]]PTHu3fue>kP;ăU"/W2BEu?I7*;)VDMv0SuS#.xXWbpO7Dc1>Lf$z.)0Dv^X&bpJo#<pK5fU)cb4S&hăU",p4]BZVq#wrD#M36f=(2gT:J1;r:00cqkeOXHKK_''D(\4?m^cWEOQaNiJfm.Y'ăU"cp)'\eZ<%rwhq7ot\%7bB\&IKb[K[,I\D;\5,w_TT9JELbBw#Lo)dCW7fJ6qio2ăU"7_L#lmk<[:dw.U\uFT8+o(Dlhab6dC^3THL&mc]cp'd?m/Ldk3t0C^cBqmDC69aăU"aF&rVzvVk$0oiW^^;?[r5N_sAcBQJWgwS3178)Lrx'eCJq93ZB4&ca\VS;U]<NHăU"NFwp8.*Z-]YdQHk6;^F%u'H#eoYaUole,vZ,X:FkWQVPRJ<)E.'.BpP'Waj.Z'-ăU"zfj*YJKsui7EXCA[[0ZOLb[v6^D'nqVA2Gk^L6g*TX16ng:U<'p'bm4l?TvZi,^ăU"&q1\kS^EOBTE-+R*%s6=)3C4],(E.J\>voiihdofN-.&Xsmu=AM,VLfSiXsM</răU">QRI2B=q:NbjR[28eK8ofADg8GSZ0f/BymL]4sFaIQI*PHk\;U8P4GAq%K^A>D&ăU"-v:3P#rC-+etOiZr2tltjie#)mD,55/xT2+//beAP4ERtqb(72W.km5h-&+yAOAăU"fqQGjoprdnA./.-+MY?QYEg^9OM>=Tm>$5s=^-S-s^#s(sKnf2h_cAV>2<:GW2HăU"xhM.GE-XZT;=Oo&:Clb\U[s(N9;XaHjTZcS\^&6=(a<-=w$fWXTF7u9%>]Bl+C\ăU"iNRsh_%;R^0ec._(5q>ksYX<th+d$(%b;&nfvv+_u>j%6WSh0=\Yk.]_qFu)+G^ăU"%*\#*6AJ]lV>rY]Mhy0w))rn6r%mK3'7$&oDF-Q[.MUGgTs^JZGWW%[d?sp85P#ăU"$G\kzw9&.WDqDVJ)Z'cA*0#T7r3B?(8;H:^l4JqJ+C%YWy>[NAD_7sEEA<a9U7DăU"uy'4C%q'aOHOm.uE=_^)%t6i&zQ_oCAtl)%L'>-$oSXaZ0]E[.BlwU=So3+O4ehăU"RR<m'[(/LvI;eV=cox667oD#PU)5+++;5bCZnoO**mo0^6[WTh9<Fyc6CYXXaLuăU"KThNfG*OTRI[3Y\A&o.pNmI65j#=coEAwIOUvc*pv)-=(H^Xq:=F9(y[*bW&L^kăU"Kjv4\tf$8R&V6jr*khHrl)2'q'DYkKclR8lnGqZE3:B%=7Nls9X?k=E)7<5sE)'ăU"wY<\wh]t9-IWWdJta]^bhp?*XX=3Idkx*P%_r_i&r,sE0*H#fhJb]DaD&#ySu?dăU"xB)lUVE'nFI$8..$vDi:19.85M=gx5M*zvqv_FpeX\_V9T)'[<nghrXn(BESs]8ăU"g><(Jp$TS:H00E9uey&0uCQPKpn,jNPh*P]KMMY0.OV*]YLL*>#E4vv'(^alyJwăU"xO<av\ns_BJ]as?p.BlpBE=t*r3D.SY^(ifj5mZ.47m[kaE)TiDJwJ59%*5k?;[ăU"E\m<FmN/wEY(2:eYD[3m(2OHF/6,4O'BAxv&uU5m)]iyO5BXvkg<9Yk<DcO0f(făU"(x=V\'t3DJ^naZazkLk;AMpg649ARBZDHo9rZB^$6<?f;MxFS(9\F<A^<(oqBw8ăU"1;rhBtci[BT=f9KYKn>WB_dZ666YX2nIKETQ0,;NKkY_U%57SDvd>BiRb4L%fI3ăU"tTE%(eo8y1ZHEG5<8,;/Q8cH_T(dURy0>dQN=LfcTsmT/ea7QSF_xED(G:;66fjăU"&p1&joa-#4bDonce*$2_%'JoncfdC&1xc&tIN5A9#i_*OO1y%X[j=nvp8;&3_cNăU"ld\#^-Pi]:5=mb(<=eD*53JukZtqa]7TQj3*Vg?4ZsqqwpXS#:HMah(+29>i^9.ăU"EZ^B]0,YnY5A,KMD3Cl$*^qFsr)Lp_0KdUxv;$m#,$aksE7$OOSKp=RJ\a9-.ujăU"y8T7OVIr$,nczUc5iaVVESHT<hlUg)C)oD&L/y/BmreB9P>0N-\0qK=lE7c4M$>ăU"gRce4V2p8+zjOq+X;yw.tLv9AZPqOPYDAf?(UjTB[kquLASMjrJk\%u[\;kzZ1wăU"soPpNb%U6]En7MG-wS']kSS,XiSGbJb58GfS3lF0Wh*DAD)K))RKqrB.ZW,IkA&ăU"0^dg$)V]J;>FE(u:xW'P4[d\_FaQ3<Dq<#KQ-OrM[r<&JeuzgY:w,sp*7QL[kJ'ăU"xR::6;PgJqEp+5(oO4aTH*/uI$1Pg&69]#srkGh(xa4'Z*[k'71jZ[NLB+^SoLjăU"0TI_l.ai\?H9kb[ZtK2oc')/d6ZY./(F$HoeZE\7P(.Q$Z[#gW,9.3^8f-a-ja-ăU"f2*YGBPjLu1f>QPQ*=Lw&Y&YHdV)E1dODGt#^akt2aql_inUzVW5C.]c)KkGa5FăU":KC-Wark))*dN-0c\2kDHeg:fp1MPr0FlpnJ%d+(3f./nCUBab5vJa+?m4WPXdqăU"7MGNWI37#l.;v7+2$W%s:i:0:K>O^3lU]3Uq33M,:*j7bTDF54+v1X+lSqJ1mO5ăU"Isb&.C=1<;C2oWjJp5w$Lt%$dddmcG/'G4T4K9nc5EaA;z,kHJSB%yD&jZfqa-.ăU"4<eO^i02r*aTqKVm_i=rfVFM3akcH3S_x/-nCR=),Wno$Z<M6sP6MHeq<<K%SPWăU"oPzZ&L,2Y,uFwZ1t:zXs;s+shL#mhqEj0*nBc;0n#%w.,bVfkf]NnAxcNG,2oJOăU"j./Oo4Pj;:I2yNY]1G*[7J63VSbEF?ZDIjo3[:Y&vtX8A#XdJLnk%Z;D]vJ#wP.ăU"BY7b9FY(OsK&>$NX3TwH(J-%S2jd_$1wJM0K8>l8U4)qsTo]njG%1^G(<V*:Tv'ăU"n%B&6&4T5xOx#B+_%XMmm>dH%_'oNlsx.IZH/pJ^6iFw.Y6aK0imge&CNka]mhgăU"miK+6Reh+7:x5s]?n2j5Vem^T/8An_2o#F)5Y%dc<#N5rh,-(ez.8k^^T.plN)[ăU"Hi>(53<x^1O.O[rW6B3xM25D]kL7G0El9,kmGJ:#ks0B2Q9?p8U65:ZIc59oJfCăU"'e]86gL>M5Dh]KYdVZ;MIq5k3pPtaK+F1Xd$VZ,gpF#PQ4fBaL+F1;JH0G[#xq2ăU"K$lv5Kkq$H7zUrq]k:<c:U:FfV?DCe-dS;>:)[f](SAppPln_RGY;)f?Rc9q]$DăU"pIb(7M9WaU9L0CKvO]k-vnon&c0pnCdT'=M9dA4XzXGXYz.D>ZvObMCK&[78F&căU"7W5l2j5wiEc7z7?ZXGiP:6$7Z(KkZVPZ2>AyF[x/7MUb2xe1zeG9'pN^)Y(epu/ăU"W;d;bo'?4B3lZ0mJ'PH1dbLR9e>uK<ZhM6x8V'mn3oxxfxix9&ki;ZFH*0;$3lFăU"g9xF7x1j+SjXOAyyyFV&H;mjSfRQC:O.JW3sX53xvy4c&c)?M10>MlUw*T8m'-,ăEND SUBăSUB V3ăU"MpjTE-LP4eR\0fEWOla5YpVGKuYO$'u(.8_=_[x9*1BMYeRhPTEBI-?:$hp(Yf8ăU"kX=[qx*%up()%9%%%.-%jfS9JXp,-poJI%%2N%%%/%%%%ln#skq'.Sy'yNfL(F]ăU"T];_X$HZN4e^pBGFDo1=L.]yh&^1Dq]y5.*^;bb&6/GF1.4Yu^&sBN38lNW-qg*ăU"m3C*eo]paqUAlyQQf9*?PEh-e1<v6PO/(N#Z6P/'?[x]FD;++Bp$^SSv^T8GgrqăU"xD5gS3tDMhg(lcXVUwuUL[hJ:dNyXPu5$VExgvS7ucT=LWUXr:E)&=dtlLh5C/^ăU"5t'WyY(qX=l'mXN+XfD;1P$hWaxsw^E-\p:)5%S;SFR>ZJd]ddlNRTQ?dt'z1^BăU"1Y3s;1HUF1H3fngdNmb0u>]?cZ/:7dj8:;r+wW>rJ30*Z$scrr<+ni?4aHVSP%.ăU"m;TU3N+(FPB23IuV&Fdmo<3KuCna>/xSceQX+AF-LeL^gMBz'i=Pm1Y^\.*mcAPăU"Dhtnt7myGh'Qe&SQL_d:aHDC-z;uTCO=vFnb&S/Nogt4+)dT$rxGYmAj[ob<$\BăU"Jo2[usa1#N\47P<;RdU=dLq;M>e(W%$+'u%C8gQud8qJkx4tEvjfWGI[o&/Bx&GăU"TPxX+hdhY(Cy&k+=Od9as'4\xPpkMi5OiBH/+J<Je9l*[NT.vopLyNK)NK[_[cdăU"$bC.2j=0cnpi&%eeqCNCJCJhK>C_hjPPa<hqf[.O/Z8cLRQJKxZ,56v\f='VUooăU"30*kH(I)fFOLxlJtnohVm+Ba3=wEoV;<r=;X:uals[3BVZ'%SA3k7dooH[.pqe[ăU"p'SxL0P6u[^J4z*9MYv==BcG<B2HxSzna.D.Wn,L)Or.Ddhgwx*V/<%^LQ&MSbAăU"o2(6WF,)tTGL$kXpnq5.eeO^P4FhfKt'rnN$E=Tb*ebF7Kt]Bff[&<RT+8:H<W,ăU"Z,qBEG-Cq(J(xWXGx_iy+zG9Z.+<5?;WFDgu')CalG8jrP&.zC:KA>/2Puupn94ăU"DQ^<R'%1XjJw%;+PQkZ;+rorp$X(sb,XW_W&[bukeq-xQztS/dJ+.$vio\cOxGXăU"n4cZ,f_/P?I<Sk'/gpt&uq8C2SEMFgT7v%$1D5&SkLBQ/,yufC>c#$4:qFy(/tnăU"j:+Eb.3b7FV:kVLek=D<8?PCJoKI_VlF[LYx>7NBuHRK.fq(tCGXop>7*SAIv7CăU"<6WA1'/0u2*Vw^JfK#9[Fba1q9b^2c7)Q+PP84M]UJrS&l[;#]c^K\Dc_j-FXb_ăU"?Wu#(kWRRPR,(jAtCi+l.ar1(cXx7%2IxYzD.[ZXqK&ONPJfyms=j-NeJt4Q,F,ăU"1Ah=;iAia:CPIG/nu:k1a.%F#)ki=KWFfJz0'<3[quOtLSSOpc+ce58J76,v'qqăU"%1tjt2*MhazZLw6fL:DX.Fd9?N+IO[<P:m,W-Ori)g';,kmApI^T1K(Tw)U,1I8ăU"0kddIJ+F'LCFarn[KHlVV58+N[[]?/*ivbG3&D_]=_YbX*WlbqmAN^aHlLVb:QjăU"a7O>Nv\fS.1*dEY9xy*9;[rK)#u[qKl*\gOTzi0dw6ze<z^o_Vn^xt?cXUk)C(]ăU"I?Q/p.T9SIGb/Woi2i*.-WdizJm'$zaocg^sgbR5=7Ps.G+b'6p560E1>nYj<fyăU"QTTA&T#YNEs=,\F?FHkVfAWb\CSL\oEl#Mq^2YJ>V1a++98;0o1CmxM.1^OLVa%ăU"QDy)d[d)(&JIIU;ON.SqyoLYmkiZgue01*TV\4,uT]l2?%9uEGjP3eV&wph;)%6ăU"UrZE.*9q3%o=1aQHgwH.5L3AS\cpV^6rIT-7]#ks:#kbVxCP%P'FC+mscpUw+aFăU"8Wo_QHDK2Fx,RL0wC,897VYJHX&4>2>vul*t%X/O%9tI;5\IEpz=%.-s4+52Wq6ăU"?u#($qip0'j?I3'q6BSV_]t/+c8lQCSMD6;p]9%eFZ4;)sdv7N[9SrA?gU&V'=LăU"O16giDE<qUG=3W+s#YK.FKg:juBGva4#Gnsmbj$mVxrfisapF%G_o-)Oxjz%SlFăU"4Uy5Pd*zJ5d:iS'9ef(b_IhUGlxy6diXS5sH[ai.(WMka8EVhV]Cx-=P4kYmPWZăU"?DM7$Sc4IpP<*0+5J2?=n,Ulb1h)psv3gpnYH2Wv=,cd/P8+$JVYTtw4$ZXwit>ăU"ZE%H=K]vIL*hr%MtvXeKHI[qlaX)Y^(W&HFa4U?#$<XEj%A]2]VRX#VcDm:cVowăU"W/a3CLY,CBktl9W/R?ZkKKqTaQRuiF)vA6aRjwgsIummr>kpKIs1sgsPo2AIS%7ăU"torvkmQ3&2UFZK=v-gpz11])c$qaw%3Q>j]9&QZ;B#AwpJ8Ut^ZF[;uKS$:9N4căU"iHAH33H8C_KrU)RE\1#;,cN9HL]ZX^3+t[+bSPCIOr1.tm15GouAxcc_KSx[OK*ăU"1>u\mg#q/M:muK'8JfKNDL02yH\GXqwE:^tMC7vLru\l*q,#tLipiJ[#qln=g?DăU"ZgTZ<,jRlnno)0BqHeKo3(-8AwPEF%Fs\OSvCg;n*SJi8fh>]K%SimBR2^F:*J-ăU"o6y/KLi?W4gK3bD?5#:m[y:IgS(zL+YDGJqZhSS%=OT7WCxeOR;5g%iJppgO[>'ăU"lPj<4Plg_)WPR8B+ggU10NP[Idx[S/=;KY[6B22Q2C]3/8hH._4-c-4u-b5]\<+ăU"zk4a2dW91/C5%hHc+'NX:-vocFpB<e\xMC5ZS#6d_YuBSsURT&/7$64UOkaGz'2ăU"LIV=^E(\k]Bq[]HJS3FDKGLIYXdqDuM0IR3VgX%&l#jXjY[t1Zi+tvQp.kPXKS]ăU"pKSLG(zMc(.zQkP9*S8D_M-^2,z%'=ha*ojZrb.67gp2j.$#r6_-fCp:5yk0-%tăU"o^-6vSk0xS5,/lBM#s5Ar';n#&5t]8A1OBh%Zrqn9\:cb$*PLtNZ7I2fvDTN^'xăU"ZjPAtiv2G9YA9jTne3O5P=4[DC37Q.G/-hn'_PiPV/JWP2,%-D(86KKuni'+4FFăU"o^bp>y%8>2df0,Jb]<=#?yFi6TkurW]W*?>u^CE*W8W\5%x0e.F$4I:e?DG;SO*ăU";i_aFGJCg=u26n0v$_K[7$&C]v\V74na'4HD(q<kPc93Q[4M2iFpaoInFotSC[yăU"<YU#G1Zg:g[ige(TcN/(<'E2FBQ]%\e:b#[&=8]<.3Aehe-U/x+O)]eM\:G^=Y(ăU";E9dqg(&$?XgMD=Rn<C(1;?<6Wb?xs%Mn4\0C'-qCPd<9dj[p#/pZL[DUNa$,eQăU"ft2H.]q%eJYA,1N0]I:jz9t):P'e/[]FdzpFG/PHH;g5no9D74Z_gUgn7VGGGUGăU"go)$TQ:O\%KCyz<Qg.sLEqacI16743':V>I\bFFH08n=Y;bBrE&pMZinmJGHtRjăU"g/8V-6\*odZ9^:eK's&wkbEAQ(h2c0-V%9]As.>.%KVAy?1N3DTT'.Xd=[0x>ewăU"Vb5f#IZUV+dP8?7wCRkSKA[5,)fLK$(CKaC*qbV(oMAegpA_3bcqWr/c22)]CT1ăU";p-AunX1ccF/QzrC;IFSo7(d_O.'zZ<HpsU[uraX(5Ls1pf3XeAeV^WO)L=9EiCăU"XTs$aaaB4#_]&3VIaa][g4;Ty_K&>aJ<**V%pK>])-:o,An,ps'=(fubNCOU]=LăU"3[a?rIj[M)*2;nZS(J8m9e+vJp=leCP9>ESkTMY.y/835]NGM'[%+Uh(\?$28Q+ăU"rMzm*dO?-4W0d/_hiclP>nwROFG&dJ1s.#9HOp^/e1/2eR=7U5>),06Q+$\.f88ăU"+.kdv00gLF;X-aTJ%o,'lx'FWSY9%cLBF%%Ag+%#?[-V#wMJT^[uWO5a1TLJc&AăU"LJuWuNA2d%&j_?:ZPNs8^W7Zd0-Shz$SGF?OeMObXNLSaK,>L0WnmYXFUQRu5tPăU"<o'd2cHTLS]CLo->.*5PX#k+2RGVZ8K_eTmUQW7o)PC7/9\I+#AzSX-\UjrhaP'ăU"*UY]JVq:RR0jm0\3;Li.C%tJdGwvDfS>ltAf??Li8$[wf.CHgOFO/w0BO(u_uOQăU"u3fxQ[O-5T0&SZ:fF,Fqd'd??/dX('X3JZ8gXsd3u2Pz&O]T<(A-A%u#tpt)ofFăU"/CP]32)HCHDX\pwPS*t>$tri1,2W9$<9rsmYJkdZB.XnT4%wtO6j)U08K;QenMjăU"3i>Lt\1)8L^ga(9XYb1#Q%f6ysIx'j>3*m\<6Udd;*NxvCAk2-Y^GXXuJjwZGz0ăU"L6W[v8>ktB,q2zGfKSn,(Y9fY2:[96t78\t'FO<[XNjLKFwWgCq+aarN-EirCn&ăU"kB23bx\4>-ax5$Y8+h8#CBDom83$/Lh6MoLYHHAs[sPB?jrYuWe\GUT4i7G$+D]ăU"UOdpr<Dl\3-kmL/(VV6$rk,X=6*ZzxQuboOWiBj2JthgJYiYGCwV9>qk]?^?57BăU"B6_U7R\R2&VMG$$>k\YBxaVl#5,<j5taFa/a-T,\?P4G$59T6-,*RV0.5QS[*2ZăU"fcAE0q$/O%^x2X.55:RDH:-l27=aQ#VE_V8=[aVU=0]6c%=a'SbiBJ%E2GO]k-wăU"Z<Rr[=D/ZC.4>)>-U.A=BQR6'Om&g>VxMkQByOeO/-$HoydmJ+HE2CyQE.x9,>hăU"$*H>)BtA<[Us+g%n#wkMri:*H&=gfAmK)rtkGSiJS9DEH*skW+f_D:mfN#'\r$6ăU";i\arK[]\CYFwSziM_DaS\9z-cPR6iw=%;%i;tAQm4?;W,>>EN\Vk^1QJdGtO%IăU",a8QnFRMCdugH?>Bn-4C=)mZD%L:+7\Aj3>IP/K''6u10BdKDio:Us)u8d/48dvăU"MUYkpVOyi%WTo]2fp3Cq%\LPs3X$VZUMy8\Lh)pj#>Hlp(&=Hi&QS-*uC.4aj*4ăU"X9j)vj+D'pv]Xu=)e:R&-Dleh00gVuI(krC%Kf&=t_iBRk0G0rMNX'[J-'A[bXEăU"6tGqeZz(^A6uWpRIAPjkrkVMqICJY,TjGiMf;q5#1*0v>sF_fSh,qn_pCOc_(*LăU"sVSb&fU&2<11uUUeB9=i&8u%].jB+);T[sr,Frg)d7?ZI+6PSoqJtD0R<Nam)>LăU"Qmn_>sn=?gTICu<ik7XHm00dAL&[RBOp7:yzIBk^bnoRazaW0%d)hW14B/J1[6văU"b_BHKlG$yBt<:^^7W;#Z(xwbmYb3%C1fLp+PS0H:2::'7MgI*LMf?9p'0qQ9e*PăU"6c2NIpA(Or/ghNK6(/wi:JOs<e^go&(_GXtonX_vgBf.fcPC_C=G>wBph3&0t_2ăU"H$O<EjRY8mwIGHb,4p&3'1)4Qx?5F&bOfkhRQ=N&V3:5UrMCFU\Q_u0U[Q(\1=3ăU"PtKx8W:5[gMu(vAC2=oZY#fD5I<Zc6)9gf=R8O'sd7E5u0Ev+7A;)W2O&eb?:.6ăU"2NS^N<2u-?xW*TUi_W)L5-#1b')z(.4R+7e&Dq5TQ6Nf&D-aD(8QH_3k/okrtP$ăU"b+['ICnYg&5dh#&5NhQ)J?FB5J2ehw&QGL6Ew3=RCGwj,UyIRM0ait=1T5WwDqmăU"Pv1=45]Nq;F[0mt0IfP.a_2PCbcLCFdzW44XOj2kJ?:5a#Dp\>qO&8wO[(Fr<l)ăU"^Up<1u*(Fa.?T91j6^YDv9'RR)EKL+H/hwYkt*&>1haYar/DhAWbddmHmWtBQ&6ăU"&nQ%\4k,1g[Gp#9IM6(<<IM?<u0Su)=j(NtWUpAdr5DK%q8CNfOB?;pw/Vs8w?%ăU"J[-D4$K&aO;3Aq=70e[0d2;PM<+E_48ojhqm/w^dzoePi;'#m?K+v$e#ta+*o6KăU"st0b$MEIL=_\HV+1nTp<]8NW0&V71<(<U[=761h+k;rSkVfYbrC*0mP#kjKk-LWăU"FTi/6+45[21fna;rS?<LlLsbZxWPu8FIZ[megWJA[c3USiS*/:y:[KWdV^%G)i1ăU">,u.Y:]?OF[OFu-S(M\B>$(pphCA3=$_.#O,Z,i[UwGT'sRd&;GSwzWeDdNjiXpăU"F8Z+hZ/OP*u7b:j/BN2uwI[N3EmFKw(MhT$SlXCr2+#<ry>7Wb%.;tr-tvL<4*/ăU"g5[f'Y#[(ROrObX/^eG=dh?3+*dyGQ$#0M3yZ*KCJ;.q<ju;4o]AfnK^fgiKdElăU"01p:mjt9SN0tod^&EwTyEdpvM3+YtRmFl\[4G?k23+:875YcGL%(I5:\$OT.RZJăU"e+1H.#5)_f#ou'#+XA'FkB^)Du6QJPWL7s2PE2a2x$ku+*[%7mq8dow-BK/cXlaăU"]e62n^KOr=v(mcYaQiLQ=(P*-UUy#I9M>L$ZnZd'w6[u/;Z4hovD/th^nWxSrOrăU"n,odAA])&#+[FCw&*J5(nna&x6MeTmqE3UqHgeBqYbDL^QK.YH'XTjDF#tjxL0căU"[(e8/-:'dA[0rDj7*[;gZdQGULBGl:Q_d<Dr(,DE((<YdD]al:GEpm4k\P5rZjuăU"Ayu%/?]r;z3Q/V'%E0jwT]dmjU/<o1#f3.X2=2apb(aa=&%^n?GS-NpOV29ia[IăU"JKo=+kpMf?qTOWd:doc-[7uuwWhdxC[?3=#m]JaHeCijTNgBcV1YXiR+UNMqE+[ăU"a7hk6=1cagrEnxhj/nv6<0<ltLx$#?6JRtUr6vMiu36h&/Y]baad4X+3r>cg>r\ăU"x#Ir+V?#t#,>2J$4Rfme2lxqkxpZKvk&;]c=W.LerIE9<K<$8;H2?^#NtFHo?q^ăU"nmH:+>OcuR7jB%3cfD4%RKDtl$E(ql-2]u7lBa=IIc#>vBZ65$RHc&M^]Ad+_2(ăU"itV>jrBjL6[Y6t0u8vwtn6t/>\ZzjIARwuH#A%,eGV4?A7)A[\\At*=VJr,Msy6ăU"6Oi4FBM%6q2GIT+(xcY%#^tAAHji:sm*&_R-o#GLTg-FO('ecWl?u[?cs<2PCwMăU"AR,&qAUQY;;D6%*oqyJ,5Ks/*CyA#uk[JvAdjJ*&w6y2,/L<d.(J7Qu]gZ1^VWyăU"-]jc5(1AyRkbK;%D8tOPB+Bws:8zS>(;G:^(3=ydG<0jGB]9_gxD_)qbNXipN&LăU"^aarV7Up\5Or=EZ9tb'^Asq5U%(pp98EFX:a9ZMpwc^k'igI;R+j:Co)c[L:NcEăU"crYV1tluYWIhdl-TGhr5c4nApVczAi;+X5C-w%zEX_OPdDdthE\RHEq8IG?;hbqăU"%:2N6b*RLN3pF6eG%o*vvLIP$J1&%m,4-kZ$O1mti:_]mu381>Q.ST+C4D%Vq6&ăU"5-ci,T%iU68BDR.&(t'(3?np$.+X79Jb8eT&el7-<*pC,^'5W.7r4((dD>A?.G^ăU"_/j*ANXd<=a/>Y]^V+]AF1uo%kJwQsDnLhj]f2]TLLQUZX<C0tk%0^(623RnEYvăU"6v+V;kB+:#]L\i=h>oAqeoN^1);Kjvgd4N^FEm6(.oLuqubvi\<rFB,t#^?Wro^ăU"T.gQV$&=,ufg^Lkm-tpdHGmbl-[ZNYi^u>orvlF/tL,ZtTCo*:q:&&IEsV$*WhSăU"O9qPiW_J\L^nJZbLx+VZ#XO4=YVT\?nbl?kJAAt_OXJI<(W21S4FEDOPU['k,7DăU"j$lS3w7vp(cSMK8Yh-Pb7_6me7jD>%BfB68/28m.lBZ'7Y*eN%hfqk^LCN\,._FăU"X[LU>\D8.=of^WR<0P<28ZH*i#0.KpqWA8Rc/*E,;7sc+G5J+Hd4HoSOgXbVat^ăU"\a.pmbY^^N6ZK/3L>:ao\H+a8DLbL949'KUvty?[)MZFL_Ly]I/Jw>#>;.LO6_GăU"HA0KY.pWHzeuxl:g-Bvf0CX[o+?6SZ8:,aIq26+MYN=sPHfFtbT+C#%R0Sq=BO)ăU"0QFedg$Qo,<^\1^\G?x*.0hDIhZSS(3VE.vgW%.2NX):+aX(8]VqK.OO-e&#KW7ăU"GOIPht<g=cG_r*g4S9#AMnT[Y/<A<[Mo6;b1bNZB_WrA(Ph0nYP42m2%,>I#CphăU"DYaw\^U:Y.lsNrMXHLt^9Kt3]QG>)%?$M4M*hbFo%uCO>cFt,zi%Qg?/io:qO2GăU"yF4%h*xod](dDqfUklm;gCn/I9grB&N#n(Uc:\tDwh3#+i/iB,1*=%Wr/c'49Q8ăU"#1]rOYFrRvl*cED4&Z+2ItN'wsYRg9VLon&-i>+ztp+9Y&GiKPCcn>'2beO>#8?ăU"V_?of_R;Eo#u]koQR;'*>=u5\]M_i.&e$EUokBh[d;p$I[^t1*ap$>#mVYq0K'NăU"g\Vp&<t8AN)4V%I:e1\kAExX9X^G2-\L8L8Bc5e;/_]X3%4wHWKKauF^wfTr0SqăU":ETOKafNd7AaDgAkS%0O2_P6jD-.SYSXX-ob?<_?RkqNJk,GlXrh-/f/(1\375dăU"]qxs/2N%syV:%:*aQ3BK2+ZL.dBPSJAPG_+9<d0P(GnMB9s&,T-(jO[Y4T\boVcăU"U?Sntueon];;(t.b)K=7Av7M&)2j#l.Q9J60u<lZRvvb(A*M#I0sh((_gsTWqx4ăU"(Br($NmDbX*G)'g+z_4hkmAOa\&%MxmfVXC]-t'#&2D]MkT9'_^OkKSRG8]]NBoăU"e30+eOG=0.Y_dlDAHp/63_U+$PAi8b2Lck8lB1wX0?m,0iN.uKGjdl(tnb<t6+EăU"F%gA+7DRn]q#Qx]J&^oI<uu=0?MyKZ.MQ,-JHjte8r^jUT<iV$veo_n;Zx\oM&măU"vO_uHj8:m1vtFOx9ZUHX*AC%YE;TJTWLg2l'Ps*4^]Vu9vJ2rsW>f\D1FjC*eY>ăU"D?K_?'+CgY%651iO*A[^eniV_Yboo]$ZH6SIgu0eap\%fMrKuAd\(j?U:8Rs%<8ăU"wRK8w4/kw4N3MHlR=_NPqgkSlJJg7-2+,-tw<;s8F<4^[:KhVy6)\$bO$Doq1gdăU"/_uT]1H\\.\cg-si:M/^VN\R,JFxQ8wiLqC(XFu=1(-%sp-o$ffNaoUM-$_M:'săU"jZ=*/rUi2Q;EEVKWEP*0JJvUD%7WyUv9ve$iNt[]#0e,0mkb0U,kce#<+Zc_33văU"7:d+Q#D^qCi=*UVZW<_RASW1OaRef;4jP=Z=&3C7HG1YpX#o*B%G(SM&U[(oqQ:ăU"6nYCtri*=+_whRiV_+2/%^9W)OS-qr6cJCXTG<o$0(R#z1bla^0Re#em%T9BnzuăU">NG'q$dA)$JHeppmH,DfvjC,Q)k=>Kr6$+:GLWg8GrN-%hagvl2;:1B?8,L&=G6ăU"vJ*p8YimD:-d[1%&[^16P*yd(\mtHj=fp?V_ydk9Mg^Yj7DaD'H-<gaF1SdAgeJăU"DcBObS*[=7\\uW_MC+omaVXW_O&O^&l[2chiRDIA#)u\sMMRWrCJlp6y7+QcIM7ăU"Ukk\88X%Jp4)s5oXGf3Vj*a*b8gz,3]^f93#W/;$\h=3,oCo31KUOts=WBh'k^HăU"kwmWk_Z]6_^CvC4(-&aG*nn,a44-+;$o26HSj<jCJ][nQhV;R-POP+Z,R/Zg_SWăU"w6<PIN=.HSK*+)4'mYd/7G,b\l9P=TBz\/QS864(IuBUwaGETS_d^m#kUGp4+AQăU"A.;C*%KG6CE]/Fr&CDr?w\T.X3_v[Qt.bN8PRd93jKhR(pbS3HKo^:%W:m,no+7ăU"jr,)&=V1IB83bGb3Rovk/QtFtAfXY/r'$U*5\_4TTFLjji'%VkM6l5p0V=OVZJuăU"y#9'e13.UzjG#A[-E4/29wMDVyix5[+Jdgl:n'GPv93et.xSo_E>xi88\(rBS(BăU"YS(BS$x-WZXcYp:4KZ:K$Z:KZS:KZ:4KZ:K$Z:KZS:KZ:4KZ:K$Z:KZS:KZ:XKZăU"8b4na,pFJ-Elsx8ln=uFVU2k%7W%(DoPLY,<+BHRYh8X[2E>iU;B>G5133#VHlcăU"-7(B:,Wdd=1<K:h9_GnpNd=wZxZiTe*O;wO103V<,rrg(,t(:<Pm'J1Kr^mT2%VăU")Ei\&9uJWs:nFXp>;7r6%mm;3&^V6m\L\?Qr=P4pyGuQ\j5uBbDPMq%;9jUZ+#*ăU"AAc=87)<tV<;>'=x7f[H;Z1aNUgYnvx_ZDg)=t^2-X78?yi.D%i4ZEFRNS&ZUh/ăU"oFCiRSg:=W*0G)50Mt7Sol59kS&4iPprk)k_bs>o3tLmIUy#2P(/HnSbR:T'K;zăU"30[n&(.m,j<Bi?Q^H6rwqwbuTS^l=MKLi9\2TA8W?ptjU=TWK'U'ddwdupi29^7ăU"ai=)UIT\hIFBEadz+Jir]Vh8UlsY95)x.6E?kn,=sENk$8J.<=gG]DNiqBdEd[eăU"Y'CYo/N#OYG0rriuRIO?B_h,a[Ql)K?/C\-4fZ9XXr<GoCGyOM,U>*YEJtsU/>1ăU"bEQg3E>o0)FI^N#(%Vs1V-;].>b7(Q$6T=h6dW1P9yP->V?G*0C\3[&bSiI6Eo>ăU"]=MAMkWXX)EaSXms529Ef2_D=\64l=g>P:<GDRFz3IpoTd+*l0Y,%O&QaSAS7#.ăU"S<,phfuoI^jdC/W?aN*GeF2tsDfB'kG+KDe?IRiou3aqRM$lgHZ9:I3*l)4B(78ăU"qyxOJB+-YsAAeP^H5-pSA\pLW1[(zY,AX/5EBnE>Z0><dyy1$p-4s4bR6l4MRr?ăU"jXp8b*Pd8hdg8Po)OEVZ\\r%fQUF=45rPsB<o_5G.XJVeZ>N?(a(5KnMV6I%i(năU"j\LROHSYi<ICPjH:wF]V;gOBNAS[Yvx46o[2QmGt=l4Ltk87MhL(Oj4X[=i,v^0ăU"60vc/FJb+i[WP5i0Bw[6RG4kk51C#J7<]w\#QTz0SeO3n_KZ$V^$P#7P&:o+oHiăU"Ym&Rwp-OWIxGn^UVwcQRh+Ux'j4dbNCoGWwhF(B)j)R/Acr4MvaSHVBzUjHuuA-ăU"\>H2sg.o&dDm-b$5(]9qDkuJ0/':W4ps=-O8*[%9JJ-1u-90:]n;X7q=E>0^h5YăU":e?7m*j+S(05cu4DIyB_bsw>fA(>Av0M<4%w0oS#c#s*MPKH,&C=?7%%PYrM^>;ăU"YZ391:D(0qAH(7G10;Rw<:9TsNLhH>gv+U>El.nA^vX>Jw\<-+sDd]8_cb$hmAnăU"->7wj0U[k^U0f33sZK/FqfyI^u*jU-70ji1>P_QD[>4a\p?MxJc,hS=uxugR\23ăU">w\&tqum5<]:SbZ4#96g5.0opJJtvFg\$[/uvj<jqOjjG]jqv-mjn8RoPLy6[FdăU"nLTDMamNKYvPlRn6ZGJ=D:J>2&_Rf1&,Y(YVVl1SGBb>pR2;o#FgW+8<[:_A;+7ăU"E28P'KaD7GofrL]XZK^CjlH>ZVT_%$r8bl<lqRfuW\pS.(hL]::qM8Sut<pr8uxăU"r[bN,N^^g+VV<l,oR\PbVbral#L<jltR,glvRV).ED2EXE-DZj)nn(GCqyl76^GăU"Hj$6H>Gk_vo5i&6H.wkq6u,x4\6lbv,FIC?nK9*<kR:ro8ZIw8c]?H2GFL#*SK9ăU":.\QvdE2uNUnK8)VUs8>plV77mhjyWINCz22>VvK%y?YnjZ2u?&k8Jhj<o+5]h#ăU"[&:dj49)u33JAaLcvENj<tR<Ej?H+'4#T?:0%31P)1JDGC0osR<T$WDf<#u/]$:ăU"w6:xKfP2Zn5sgZS;u].hnuPLZiPfLb.5Uvb<gd>Wo*[LBS2Lr,5MVI1t\,*?BMdăU"uvm+3Cy+9ibUDcI*6ZL6,q4pWdPFefTKUkmlhjt^Tlg.yc^&Hg*g:pKWO1?SK^lăU"NRq&?EVy?.7y6hl#L-7&O9_ljXsODN$)?812s]oW]SzgG7d]W2B\Z-PZ5q()l*\ăU"bZBJ<V8;.Sut3+<ntcs#?3ddbvH3)Gl^nL>lpSvLj(GEiHv]jj*Ytb&\$bBI<^ZăU"uH+h;NQo4s=It$llNawl8,sZfP4iL6H^\;?gYCu/L&?YBO'U3K98Vh;\.eili70ăU"I:Y-<j]hQvXI6St,1wL8$NXg+>6)gG$R](HS/FlG0Te%dm4Kmy]oV#L,rP+a;pDăU"1ZpFs?D8PJ8K]g%&K7K;zI6Fm(UKJEg(ua3)<kLXMurR-rYzgfDw>hJ0y2N9IdKăU";P51A(U/Zb^'tu#Uit&%Ap7_^60tePjOdomteF_m>dP11cUcnVoYvF&(]ktGK]MăU"KNS^SI&]Aj^3oQ[Yg=bxUS8\2X*LR5OzcacZ;?eads+=a*c19VSmF6Gg3Fvk-(\ăU"y+*HfEwBGm:ym;5F,G_tFp/Ggs]+17=5A2[6(Y(nQ_:d=1LY;qhA?.OX3;?lan8ăU"L>FA]OsPqwk>OMZ;-leGI'N.BG1g?fNkNX1I#aRKM_sARxZ/PbiZ*^)scm&xAdOăU"85Mj;HV=:).c?-8IKSS&S/?I:E^Wc>>zH7Ju?P'MV8m7mpMmMXnA6R%'Ownq,+PăU"92VEd8?_$Yhpr*FKcJP\gExzm7'>]$jtdG.k04IAemW;R;x5b\k.4[NF$0W&(08ăU"Te*a$kBVih[miCU6s'x<up%()9%%%%-%.aD5J^CFV>'wN%%)cp%%%0%%%#lnx%.ăU"nj&S[gfxfkLfA[sm+axk]aFAq5JSIeR>RVi/jhRI^=3jd$='9QLLJE1H][/5r._ăU"=snQF7iOLqtaK0Wd[hzgQ6146dFs%H5g?sy%u%%E%iuyq\;kFt8t7fxri^Z]L-găU".k3t[(H9HjuYYJpa0ncKPzaW*(S]eQO[uuT2qm:X*0HS^zeMJ<;u[NpZrVXOAG6ăU"nPDW^fTjZjSarvhjd63:X7CuP:#I(\niRP$5M9oaV]%jc\0D3*<<aM46VM^gqIaăU"dNV0P4UWk_>Mu]6C6E5/FZKVe[i>J#$YM[(a;c5aj'4\mvupk3sg_Q#I3W,0eVLăU"NNk:Uam?[ATh\E%<AwWP\<>yckZ,XXp$s*q^T0m6.8)1d(\3B%\^u8.d2g#,IVUăU"n-\N9L<5XUTF<&YA&en9?uq^SuGI?=n3htN$?(kRaUyp,YqXO5Z9D<ff\Naf%Z?ăU"wX(LBMSbZphX&ENR+N1uN6c+^]t?2%jr\uuJZb?Ztp/qiBdk\PkQ2ia].lAfJLkăEND SUBăSUB V4ăU"Q4ZcHn?64D]2drY+Ok=A%[3cZ.33/DtnXtb=?3ZQM'LY11=vM5<9HELRyW9-jVhăU"8)9#lH*>Z=R2ZgZ4l?Zw+&Tp<X27v+-:Q#gio(Clc*L:oSzlNb-:Hq+ZAO_I6nQăU"K:aTc1gz1P)sn'^uTp_nIQ'8_%n?sWLpwC>3*)*sy+%\Z?:3D48>8:Pv:*lo&x]ăU"u(BH>v?vIfqXSZmog/\F)F\ldP\ng7:%((T/fpwg?n=W(NJ9T.C$Hpb1<39n$(iăU"u7qpSlwD.<%wQ[u^1\q7Y;rdHAW#'6VY0UjS8EMI2V)JD.kQEuClOWWoViR]u(BăU")sjUA;pQ]u67$L[=UR(\*Z1U>VOKM-_GPD+JfTkM=,3$TY.e:drdVqsC[E<?U8HăU"dfIT_RfaTev3ZZ+\u3'gHxCG,O0UxGm>2^HM/8zUn()?aNiIV]wQA8KwZOPYKspăU"Ok5P03#$==1Z3d?boMX+9nh=V[[h\^8)Al+&&2]E8ELO>BZh.QZdE:He5SzBjOTăU".3Q38Gjb_=a%*1ade5x]VO?G&p&qcDk=s6VNUfzXPsPw6EWxz;0aJ#;8DCl4ASHăU"]Cb7&YWZV#<bt2G-9>0\Q%n%/\17c*jU(5%sM(__QxE(B9z^Smb$Kq10Og99xA2ăU"6sY[k2R$/>*$aM6m#aR7$eCl?_k^OF-H<sx0jT..5vK.o_.Yo&lo.?Z,_71>O3^ăU"Z#X^hokNj6q0+UHvjjGmhU,b*aFn3UH4LT3mzf(JQB-c_DK)T&o/t0hC6,2Iv(:ăU"d\h[Ws-vks<CH#h&aE-OfSr,mn0F$j7ozJVEcJEo=;Jvq&pgaBcPvF:45aN0=Q?ăU"xH_:y;lNOuKM#I.TogYIh1n>x9_kmK10#'eWO?2k;ha7zio>1OJg/adu6iYUNAsăU"6mGXvAI3S'i*O,l9tJXbJk3r63iJL>2V8r-grjSqw+;bs<O5C$sL.)3wMp/tBT]ăU"#-OTS-uGUzG7Ig:gjgH$-CsuUDWSAHD2<D0r<n46Dmt$Tp&t%A2[qR2\YbUw(V[ăU"wn.x4-ndku:tYhe%T(0GHV5e.p3nUDlU6ugB96m#7*OF\Gv;$3_Z)sB+.H2U5q$ăU"\P=YmXTl53>ZSR$Vg)gGU\nSUoegc1b.z#4),TfIq/vz8t&\'eKYsB?LL=zP^v*ăU"]nEe'*u-*te4Fty?&m4kUss\ou&]dckImbv^&7yy0$::>BajdOM..pB8<PN?mQ6ăU"BwJ-n3a76x]pygOdu)&y^C+C1b2ZgL3Nx3oX#5*TY^HARx6.Q$PX;8xCjN=#,)lăU"erJ$5*M(R(,NcorLJ's(3s-Fk^LYI(SDDr-T6=539Y2wI[jK>M)TSrHIN<1kq&tăU"fII\>/fLF5Mk5s4[e(sy1z\(hzn<5-75h,i.-mlMt:Zb0'kQ5mnKjrb^]:Y;r4făU"RhpU2N<h<7x6LYe[3PDThRpvrx$tXb&g#8kzUjISND2>d=IK=(tcyjX;/j7P\l9ăU"p9jzM'PDD:Tl\$*1#m;W>(ra)g$sq>xl/mvbpO5.K>&jU)hUA;*[ckqTWM>rmPDăU"Zg+4_6p/ojZf9hpd4AseNJF'QIE':O0mptMxBu-kVt7I^HT/GEg2)p#=VGa+Rs=ăU"9xom;RmF3YTUO80\Ar:<r%U2R.XR86fPbq18=8EMohx,uaQ]0[K''#X=AcG7WelăU"2Md%\;c]'7+u]8=CUF)u5=EUC_V[*^7RPcwC\-6+*;=ueIKfsA()Eow/DIg12miăU"SHGrY1emk9o)I&1f<OY>oHVV,VDLMF'lOA,l6_;ki=W'Y2%sA?m3U]f'Y0e7]d<ăU"D'e=dc1Pj^O'iRGJE?u22BUC^Km3,o;19bm[?Dfm<L8J9QT2nf;YJ-V/03/S\6ZăU"=#9g\0?H*[(5bYc/.Jn/F3V0dm)Ikz^a>8?8&g=T:)EgR]XGZBGawFE6g4Vdq/*ăU"])j9(pRK3A&+CD?9UE9[SWm$1+Y1C/(pw/8PCT=,RdQ=x,-x7?5DuJdH:h\:Kq$ăU"ZrgA=8ep0BG\Kfau)jzZ0gXt$YrIiqr?lc,Jp1K/T-]7l:2LX],gW3gEhKrNsB(ăU"?O4TU-&>[U4N-CQ\MFR\/2f]&I=R6n0(CN#C;Vv8\v\><aS,MP-1xNoHYBQK6d4ăU"_]s0;&LwZ/b%zAg9\q.5<47l0QRk4XleA%7J]ut9gP2o1^s9A,j_M+HS]uL+0V#ăU"m2zQ9?'$1$DR$b+$a_Km6M*mbDP$NAYTzhcdt4k3*Tdb_8=[7xy<KtqH>fY,\RAăU"OA>?le3]m2gC_VO#L$KUt?.1B;p*(%?g8D]sgJj9nT#P)gZ:%\#k*18T<b#d#r.ăU"Us&B\*T&1.S;ct]Lbf,LL1Nls#5q&=aWH+q$iB.DS&_xi$F(#2yXgycjUOi(KxCăU"w837s6#e0m:pK$s0d4VYTN=*XSU;-IX6<\^aehT,,9OiU2UM^bhdNkjT\7BN[/,ăU"RH,NR/QKr5\.4J;0R1sJ^1d2Utm?_fWLeI>jjX.e>725rZ)?sh0.\>7kj#?;<95ăU"Of$=GsawHij&ugfcK?gYEfq]j_nR+'GvBt8^Mv\=%1$c+Bw=\=oj2.>TPlD,:U)ăU"PTYU:<iKp[D[a9zaF]OjmS;9bSkrh3a=m8j1M>G8u)>,$bJsJ45W.+IlIBB#GNxăU"^Q\0ohE8uvef+en;^tEjUME6#8u%?jXm7G1OisVf:1[Gf9Wd'0rN0fADE)Nik6(ăU"bLSRD^F\12YE3dr2RldY-h2rU[AXF_&$^tiGo5:+si)Z98m&Dch'ClU#gWY^Q3dăU"c*iTdJ.#P\'[4;Q8=TZ?l*4aY',2EUaX#tVD>UB<w/#qq-7;Mog)L<Mb>4UAWm6ăU"HH;[64FiCnVM2SqbaneFT9\h^29mrexe'p3ss,Y<,dMidf%09P_d^a^_FhkbxVFăU"D7^7).tnp$Ijl%<V-wIurJ12sX14aGMF\Q-9mO=UaBN6C_x'tp;>%,>D)$j=NQSăU"rH]W?n<^C3xob8C=SgoMii^>v5q=0xRq>D+4WpF$9;(]Jju/nE8lMwlZ[X_HpwCăU"&ijMiAPsY<kVBB.pxUA(J&'DnP<tpi%9PZPnqw:m(7f292cYj4v50L;)(<ES)SPăU"qhDQjS/F';18B\oIR97I[Lp;O,GP6'3.qfgcR7+gf1py6jPH42:d.jd2\=.K^g;ăU"5F4_J[*0Sz)/7ctvP_ir=P2au(eD)k[77iU6#kUzW.xqO3W-X<kdS-rcLq2U;<căU"'_mdl&J0a[k2LcQ>1'/%=d5>qlsElS3cfN7<7DEgk^>XI-*DMK*(L:c^b$a1KE3ăU"IAjG4ZQKg$4$6f<+1WrqBL-hs&sN#%HKY1W6w;gl3pcp?4)8[zb$]N,Cu\Csi^eăU">c&$Yle7N^OmQ)Auy_8%?lngCP1TRsN,<*,BV>1;*bDVt(U];oG]eihe5cr[rVgăU"^&^Rups61%:H#:ZkhFNTBCJnmNKi&-d%y;Q\?>V<+2^JMh1\lNL:1&KKtT_3^OoăU"Ze;::Ua/s<,YAn6nNkCA,0u0+kWMdz)tv<E'M34..xodAQF,:/;*i?_*\C2ceH[ăU"H(eC]MKi_*;+7U=5fqia^B1([it?nE7h\U6e:UQ1L>CC1PbX%=.Wl=#CNV:ZJ4wăU"Fi.g9ZiY<_Z1%mt4jW%4?AslGqs3Cp;D5U*n_B/&GbCk.VQmR']fCf>UQqby%>păU"[*MFU;Vnq7K2,nEv,:2NNJf7?,sbPiJ)UU:.rkv+BoNHap1zY($7yYA+fKI7H0)ăU"qr]7_Ph6IuTL4m;6[6nC%JEO<xEHnvLowu]>0Y<nb9i3tO/#&9q'9fpzG7QFDVXăU"S_+1QN%.Mp55PVUxtxbhTOSCB1bcO\NtW+ZjbW&t0no2)ZLG'L%\MuX\llM6:K;ăU":ptk:9K-LO=vGd5#*f9nuEsM9C?aW(kBpm:&[mgk-uj6q<$=es%x;L^fLKtv5fMăU"89a)J(f<2A_*Ql\n7<P=wjM2/Ky1vt?FXvUqEQ.9+Q9as-.UF)[e9f+K9'Ic:c0ăU"&fFk/IO)u2kjXk2T9^_gy##qOi<*e7eF*Uogq?x(O]ZSI[fUu[&L/j-;M4VE1ZnăU"8G4DZdZ9-#rP-0.Tl3[jjkSxBjr3[B3'<k*$2<893$T^wOVst]B#mw\4Xi%#6,BăU",ojWM670FDZ_x'oYn]P^IF?7<pUD*uh2w?R9fO+c0biX&F__*V$Q%g:TA91sduuăU"AWng1ZWW?S/y/w(Yl_]9\'Wi2O\W(ei,ueX%;U\;HLrDtCuqzYeJ8n5R<b9F21băU"Q4rmDH_2o%_ibALrYiO\>UA*>*?/fpQA2T__Xed-2?U4bN;K_tLsK_bl&^o%p-qăU"6:_=f)%#Pqh0nW\N0vtrdNd>fqPHoAwLCHf0rQ,mO2+\eKfpjWYIME&/;l0h8cbăU"E4QP?c^?+.f#Ipm[8=;3Bn6aboV*bgo'($t+dZ]ZI4'Yl75'1:/0%IB1X+v/AC(ăU"0Ep*Wr;zhIlau$Qpq2;O3RH2nQ0voZoUYaMK^mbT;Fv)XDO'&LZjdh6Q2IKnk)oăU"1AfV^a0:tpF7w54GSHhuIOM,8(qagLm)?d4=iIR4['0]Ze_km4]_%bE2ZxiUgqyăU"X:]=-'K?;v]T&%0&r.iP0;'>Yb0<)kF##0Hd81gr)dC_xClLC%^^ms%,\p.cV^^ăU"W]cN\o&<wTfPuzb'uF0;9tSo=D363$-*HwZ8DOwENm]r:VcXw,h?t:l9l$vo:)?ăU"P6<Z/YS#_iydi^M>E]Gw37lC#_Qo+1)I#PZ:OJ#jjl*Q6<t8)kqgIhnGTrAEoFBăU"_HThXX.fT1)'R3.DXmp8V]XnYwV;srIUE[9wz:C?KGYRrVWeFu3fHU]XkXi^u4ZăU")1g&yT#G>Sno3?AazaB?tm*xhWhbN^YUA;\]h7Mx%y&0M7scZrfJhRkBTo2)t/năU"Zx1pvBK?/B=4/>(e2XEJFHd7+0R2vcT.t<ia=*C$YqoL8C)</Fv9>bTZRi1xAv1ăU"8.g1.mp[:,ZA8;Guup;rhAj,9QU*IOOx7d7G\*tY'I$vW=CNvNP*x.E2>;A+AS9ăU"innO=e<O\6%9$SDL(YB8*&+d9v5-Fh#Pe$k]6*CCW_dpG&1vyQ,VFlQEDd5p2ixăU"qI&LB4jYktM%l;g7dr3>TJ\Tibiq^I&a0TZfA9a_bO$8Hz6rBjU+y&41zQ:(FFuăU"F_h=T7w/F7<^\YVe]KKRcjd'i*&(o+abL89*C]iAOX:mB<_qS/8q,W'5TBR#E?eăU"yWbQj-V?H0>.$:oY&&t+6VUq6UEJf9o?BjqWw&%+'ZMgotbe1jVQT_/0-+Q_M1PăU"[wB42a'WOCI[:vp)>ZckMb#sRLFfK)QMLmg$lhH:ELRN-r#Q'),.n;?FjJB%]<RăU"W.rw<yJu4$oSM:c\+x4j_Wp2()QC&0Ms9],?c4\$%53N,(.\n:U9?lqC0x:QGqAăU",1Dh):.,M<$zlZNNN=CfPq&A<+*33nxaUtt7%q5O&bVRk%Lg3ZxOQ[/eBN&(^b5ăU"SViCno;&n?\x:4QkQjdbB\bi77OmvL\[0JW;C-Lyimrlb1[I-Ue4P0+%w$f:SHWăU"E]M\'2N#:/>P/jmG'QamHiKuGyYO.44yAh7NXg(5lDYJ.6YjaD0Qhg1f/fpx;D(ăU"#N46Gi%4M>Q*Wu+5]F7N*5'/[70BkMkmf*\Fz>54Jq%9B8CC0(v:N<t#F6>6;VqăU"Ctj:gSakPv$.V+qH\xK(ZQ2J,l(%v,t=^'QK3\3[RBq0d?P2fi#D+k6]XA>M'DlăU"4R+VG;90[ujO'sNRc-ABiX$J6GKiC_vi.Jz5BW3JQyA'MH\<'PsUEUD1Ru]JqU*ăU"K/>#RJe;j<\c0hWc-VRQH^0:PN,j3=4fkDqotT+e?:)_RrAgXOYUv8Q*:O$>lsuăU"7>%H<iFLzMO#A%]Fb%mcUxm\;wC.j#D9>zNY?/Xr/X,WKHzLv08,+,oce3br4A)ăU"HzNR,j&)i/6qWK=#K4v^26.g>24fc-w:,\d368sP%C=>T*Im[UF*=;$:QZk:Aj&ăU"'466'JLGjvG=v=;_mstq+gm8b+?/Y(gNM4p?K:^3lI9QAHgjg#&d16H-a?A6HLwăU"+Tb--xiKjfhB[XyY'J/l]+<C*m;h\_ba^6\A-t8xTRqqBbsg8UeBdC$(m+%j6$9ăU"Cn:<BOhS(W//WNM^%gcVm8Fw=JiI9Gh2qcG0VUN7P/gC]g?cEk\k#fS7Sv[5T>+ăU"CI#-XGR.$c44r-rdT(F<8DUDBJ';(RMJnq=6E8h-(ao8E23]BQ7'\\Vy1RQ-i.[ăU"6Oq+feZN_eVCl]HlwJCS+Ply(b:>nSAM69RCs..sH0U)+a*V+:H12G;kt%H_hZnăU")-4Ev-%JMnqjG&f?g3RWCSnQ[uhR3gLecAfFXIRM^o/Vq-B'QM-Z)-^ukrg=)IoăU"Z*FOvE9bYO<%ye8IHxA[10H6O^U7R6wXx48;Tw,8JX/)T_U6]^&_/\Tw:(*;L/OăU",>T^q:qEXeuAkLWqnwV+4510X%Y*y*j,q%3mhA'U4v2Y43xWO6n<sOa0]wqPP$UăU"X?$8?k-T'7Z0BlW5#G/=/sAW'l*Rn6$qf3Iz2IX=Z\BJCtu.Q)7Hj[]VpIQsh<hăU"/e2?JnKC,7p5>n^jImx]gFTB^s3t=;Mi+ubk#og/?*w6s;uv<j:eup.:0B<G%D?ăU"K9Q-D.*GG_;K0R5xE4z'wkNcek8GIA22pJEjcpK1#ARc:v32xN8gUD3b7zcaHY=ăU"N=:M9]z?2I?/qQ'rnwNWNqIm$jnec<d$gCT%L(78u=sYJkVmrQ0E%tmA(Ys)w-kăU";vF3yI.Pcy^WMGk#OY=n9etrwGl6)qhjJy(&+p4n,k</bRvF2[Ah/;pRvy<IRAbăU"lKDljg/j:WTJX(2Q5$R)vBBUH,frFa(VdS6UjnsZb/I.dDEX0tZLc1$H#u:tni-ăU"Ro#D.+hv4f?EC&rA(0X:?L=$aDweIf)Fm#UDkL<i6CNA/Pc(t=HdN\D/L4t(Q$MăU"tPlA:z;[%k?U6i6DhNW(;&UOn;4(a+dt;BhtG7BvL5-?*>*-rOSfT7r=uFf&W[zăU"r90[[$kMX+T:kk;'hV=[4F)j.TGW-+^f<o&BrSOH/?LS[XY\c#RO[+P5Ue\%_?&ăU"0w-\(<M>_*UVb2np1,3CVO-C*WI[t-&[;>QuRE1.E^[30cY.&\q0zf5gSzM+YAlăU";h4m7zgaz.;(>UPkz52\dZsl\D7mk0TJ)L;DSB4bLV2q/1^JyI+U:M-;XU=^XW9ăU"nNh\OOqLwE7fodm26GVca&Jnt[VsZjPW#KE6AkC>*'1D''q4]?7+>DFfpB[=[WwăU"%d,:DNph=]$_+S3)[L'v$TcIfC[:Lv5eVFa8T,?*WeB32$^g,*JCbVF-uai_k<aăU"ggWMHBHE)3Ao$tpd.*c%/&o-XWG/NbG&QWnyBc.slTQTBp7U/?'H-)3D05)vu)>ăU"bBr5>YF;4BLF4Z4X94ji29q7cdmDRtU9()+D&_/>SvES?8[K3^G$L?63EwWMJ5GăU"F#3dVO\#+wAe-G*M<Oj=97QiBvC1=pS1=,\kfB>Cya>&/rf8dJdcK2+Nsrs1;(hăU"a:h6%5=p#(xB(cO8si)VL>F:FgpFW750C-7)v-I<TPe(ekD)8V3&,sM5y$\>Pq-ăU"I+wtuL[Hg[MIb%M-pHL4vhnl^(IZ=L>dGsT0Dw73G2?L$/JA6\t[];ItcJ&V+T6ăU"Sd%/khHcfJ0ucAUk5vYZ]N[<&#TAe;T50CP[85WjJW(KohUTA<\l1#=DtgY4FF0ăU"3o#kvlp[Ak1?VrpB'9yR\nfTBk(eUL^^i]kCq^1+t5dYN834,mD*.jxn#uiU0bBăU"TgYiY*8jQ[q]mIk;>ea&y%Gnql7DVyUf/=h[bKqX4c1.bD?C*zj'BLb.$=xvN5DăU"P[V[]0tUIYPJMc:)J(w6(40WOsVCd19+DK\=3Go](o]A(Xjtn#BuIun3fQ5$c;0ăU"A;\]O:,5ktme2&Oh_\U^_ZIDbwJJYk3Ec1=P9GOV)EJcsu<bw'DA=QMm%;[(P]KăU"*m$sQB'Es0O2nCirq-'6FV8T04:usEA;l_3DH,qHjapBiQEXG%;vv0Dr5X\2\G5ăU"eKh/pi+Q9^$(&:_$ksFWr7O*Ze_sI_0Id;-PBuwWfj[gE]_Gb*8t/[/Wn=&6IVHăU"oqZt/al*NF\sCM%cJ.Qmg_gOydO)=w:E$:n;*$X%vwj;cS>n9n_17ob;YM)XZBLăU"\&MenQ##J$<uG+Qt_%?D.m[Jpit]#2q\-2i_V9)[L,WRW5/;j((,k0rOS8&I;ptăU"uVt5MjtWGB_B#WZp62f>/Q5PSSQ2jC=O^nCQfdK?<X$KJHVP(1FIWM<eI?Or4:PăU"%h2u%I#aA*;+Y7wB?886-tKZwRfbYaTsCHn]4N*MFt;\,ENGDG<7p0(1s'?^8,>ăU"_3aucSX$/=mg?VW1/tvCOx?pW>S'p\b[R=C7n#C+'Bs#Khy)NupmdTsit29?LGsăU"pjbyS_wF0w[U?ukQ2MkTl8mXRa5;4Rbuj;2x+TBKp3_+,e&\g.Pq%fIg;)cSy.,ăU"iEO[LNF7oil4*mU;\wg>M.$2FR5P\Pa21>=OUFqrmB=PkFk8[PyI_0t=pI3h-TGăU"Dc1:z['epISAx7_S(*1DX;[2<z1=[Y)^g[i7s0s>[&azNPEc>T\;L$+rGH42NcKăU"3$k0p]#M%,U3?Tce-?gi+YwdNgwKLGGr=ezm[<6S[AVl]*ZgF=*Z1fOO9Pqp8h\ăU"Uz*_x#;am;lMP'#VUDwwVcPb\qB/iIj8e?_:nKVX4eZ(HI0yE*-q\z+2Tg0.e[*ăU"=THNrG7'3qjbsx']<a)QBRL%>(9E%Yc2D0c];YQG98BGPA[AS+,BUc0va/+kr&păU"*F*:&GCb-(xFXC5;-voSG8tJ&nb9JsNFQ6Yd)E/Ev2w-5A)za,r/l3l/=S.tL'VăU"=,_wV_/X,n\P,5>cXUqLyJGR31JKxe[s_L%aQ]&5^f0K[u[Y$sHlZLKd&+2LDNXăU"=j9B?4q3TwyZ\&^FDac;'y>Su/)aj6^0YLsh$:jE=4;u:6:SRBd]./+twECdx>6ăU"Jtq,tC%g./HI*%Lge4]#Q1J;rnYBNB*5sg'k4pgao#$(K\S*X%p.+doDyu2rrdpăU"1q:G\M7I.91e*YXud5;wb]4=ROhe*k0;%[/g[o+LrCj,5$MFtZ:g;4RKXj:#=].ăU"s5TJ8:m,YDe]s_uF_C%,F-/aV$w$<+<CAvqS2Z6.DlpQIqw(N)(PQr]^OW;:Y)>ăU".5zIL=lr%jl8ZXs-l<JofP[#Gzu<qseNx/'5[W%3IU>\'V)C95tkG;DXrrDAX#_ăU"BPjB0&9BL&2g+l/IK2W1k94e:]CqOP3jRD^EV9b,:zdCH+]LD6SpAlNcNUO*ahBăU"%c=^USAKPrPM0NP&WsSB7JH9#j$coZ-lgh[RQ.>*7_=W>=YZPQcqPY\ll8ydEgBăU"em$u0ps]vd6&b%8OAu8R8fQq&#4?*s:fZJAqtQ?%$QACM#h<8^1.fc-*^SMjJSLăU"jIFWK0^/:dH9LU<Y>0JSLM^rr$kHnlM>\R5RlAS1$63+YF2Cj*+]^foE+FB,v3yăU"olM-xX&_6>cuVB1P,2D:G)*gl#uI-qC:Xpe5M4UA3l-(vQAGN2Co>64K?<'Gfi;ăU"W*BPBiz?;+&j>,C^YdP5P^;sx8ki/fpD_27h_PN'=zfCUnIpT5etstX_.q84p]PăU"6rlwrM?IK+,Tmk+ugmYYPoKS[T/jFj3)kKAI_=_7LGJzSQI_[4NUlMcLx,6<su8ăU"j8PdsvT$M>Y:i2I[scn\2ks<-HA$XGCr:tB]dcuXowrpT]#*tSSDLHN2bTt0S60ăU"]dKCurX$AbNmYrEx,<o''^x*1'norQ6*()k2g&>iVDO^txXKrB%rr,uxo18Ds%kăU">kI1(b/.Ded',$YSmCl3CQT;oD%k<\=Z870d$+%ebq.;74rTPr]YP6&zMgg+G*+ăU"39#(.MFx[-2dj0,8W.K/8qXKH>iSpnB4n\c:V5E2;B/'VH?u_w5d=PMCSoR1Wv0ăU"\*8Isnizd?3(2/G)&S705EEyVl90cwL;8-Q0KMSwGoqDTDA'-t(eN:haVBd1km9ăU"jD-<o6BmhwXW<je)l38^\8dd0%er^ZZYJ6LRv>M>t6#52*Q=d79D-Xw1=7l/?FVăU"-SaL(+Sx(:gjcm]3FB04pPn&6&w]]az1Si8rYitLOh]ID+L>MSYNaYLxj/y#7PxăU"qRinvZC^b1DHFeT.4-2(WX1E8K800IHQ;K6n9K&hj,I=Qn3Tcq'r(sT#RWRbcS[ăU"B$60Sz^4YTAvQQ^$>cc5Bbs?aFD<7'X5X.l]SAcAdWhBq,8j-CD<;04#lM6Mv+CăU"4;QK&F(h1ohgJFgowYdgj1cF[Y*\F=#1P5eJ9Dio?2o^0G1RK>Y.e./:^-*jV\>ăU"/'kJq9L-l?%(Mn=UH[[z>M/y#pTM<_xjFaaQPCcFKYudd#57p(4Zq3L6-Dn?caPăU"'>%iMqrOB+I:ACQaedDL2Amwk^9co'Rf8c/C$bp.]bwOg02JYFk:[1aT\N+lwI\ăU"Vdj'4+r[ykZa,Xp$<sjQiZrPw9LfKjK&2;PxDQ?I>4b:C?SD'H.YW<Hc%qEcsMCăU"BL3t=.1:)1f>Q^.?r0>o,Ry]7I3-uW%*+Lb\k48aJ.X,SYl]='v0,S2QuetFaV4ăU"*:YJ9tIN/&Gy(Wu'DfAD7BYfn(H+zC/:z2._z&2PL;PA2RI66eW\0vY&$EK%85JăU";+1GV\'%i?,k3_Br7L0E7>c_w\TsD7D0i(jxOFA2#j[-;%)/:-;%:*hMASZ;lB/ăU"PQzUa[Cgv9vVstmW[SQbm:9?l)G+wW;13H>so7vp$w<x)2xP7qgA5<H##xx[(1jăU"hSpoRR7Wz^zXY0H%tKMe+=clc3Gd+Vz60IRXGqOPy[e^VhjS&3PDk0U*VvL,*]tăU"UWg6R:Aq3fTt1A2Ko[^Vd>>&m_O:]>ZEnMs=/0^y\k'(KtHMtL'[eQ5L1h4+di&ăU"\&u'L(HJI6Vcxu\;AJqu5-qVY,o],GLm#K]8n_KldL7,C3USm&)),XT&bWyC5usăU"GQb4j'hHh;PY7Vzl+6S[%=myG&IGZR(+0q\wlp-.27WhF[v's&WyJFqKrMacgeIăU"Mv0QK[r:r-r8JH<(Q(s44EF>'ekZpesaE<V5xa9'Zqb?*ZCpv;r)=1d0Sv8o9X&ăU"5B&/[A*%yi(_kABR:f9Bb)$p+&D)mjzWB&-LXE>J.(xtGoa\gPYB[3t)2u7u[p-ăU"Li,GK;VYYrNfkp4(B9q/q*xX?:mtYs]G_\A-.<0[zip.?>,(\NNUacK2twl96TkăU"+&u-F'WQDyoBt?h3[/wVBer9JjQwUpP<d9gnc/V^:*aq?l5Qti(/-zi'lnW-QRXăU"Ja6vsP?U_31&Q8\nbsMijc2hC)8D2*&VL(4'30O]i\Ve0jC'AtDo_bfNBT]RBk>ăU"w2O,l<])MRojInJ[,gVVM[+r'fF3zm$U]ip7u^WmqYLbADF(9oR*4A6>80fKmEDăU"cDwhZ9#7i-[AR:<^;UC8*kV9V4W$,*u6GqH/1v#jk,sLMBr%3nVeEVM0=N??P.FăU"_jZ--r/tQMSq+.-0Mhb,XNHAL-6wK[SEAb)Fo9rfys%O;6Mw[=l/Hs+P]<t'Sa>ăU"'2bT-<-4V2>:tQIDnci45DxS%<C1rcI7$M3=.mbx7dwpd3bIzdr\+'J2wG,;'WsăU"J$%KeTpCD4FqU5MC;MgWk3GA:7:%Nt-r-47ph6f$oCV;RS^fY.w1S3r&.hcc*J8ăU"+vlrJiR\e03E)Q)^Eb55eEk?kXLILj-0Au&BFqH0s[1AGIE];BuR6;gtL5,EUhZăU"GceQ?Ahb:aL&A^q3iD3Cm-rlGRAP-TUSFENwP[;39H3,rg-?:qd/xD%yQ],MoBqăU"%\0job1Pq>pMKXfLLY8X/3+6ciH?6:bFLd2-e73KKCQ12$x/,Wc=x%0t_?4SLBbăU"OKl'Z8<]x%icGmoXLGv*Ac6QXeqDz3kpTV^hMfhM9acj\EXW)X+&kRYdUUG%E/>ăU"Z.BkqgrUmCZMh)>EXU<tX(TrLN,RiX1dglv:?E*hgC'WDDYFZiH,)CkPn3FVoESăU"vC#C[\%DPN27LVg,jtb(EM&o#'^HH4?E5.:p#-W:DjHepFR8OUu=9*[]Z9?o/*AăU"_B+,h#K]P)YKR#JN?/$DHG2k^h\oXdFJoMmc'RN0zSZND3=F4qxF??&QjR5'9feăU"b3oqzn4(WDIWjt\>8X59d%ZK&OlSdwjQoRI/rb4r[k>JlRbVcF_ve9xB(Og/WJrăU"4$jz)-+#Y/Y'aJIY(7hF)?)Vsg6p%Z+r8vVskRf^s0DLP/6l'1f;rYR_c06NFnvăU"=FD%3.agFrr:WGC6kGM.8NXa*/5]<a.NJA0q6mr\c.2F'3*9D4vYPR-d>\m$Z^^ăU"+4AkQq=EmESmcj,7k1?F-wy#S[_;o[$FX=BJ(WR.uRb&#A9A%EQrDF%]7VJgRy4ăU"bf[-b5avZHX<[/:?lD&#q(#YJ#A/)%L00u[\Qe\ryTi$A>mjy>([iMU0:Gs5Bk]ăU"(q6Bk*G3F(%>sawlvl/wDW>?M>vnc;07ZLX#h'eEh5)</oA(CQe0fCvee7%fX\%ăU"iJ,S%3D>pv*Z2=o%32&>M$Ey?kc>vHez7wNDEX*iJgYotdQUY^r_V^k+jsc,1jMăU"G0_4twaQu9m%[]gB14Cer4KpM_>,T'VmGUPlZU8igLW]JsV7.r[&N[VSrGrM'c&ăU"Hkj//-S'n-tvC-WvUG\b':Y3\4=_-AIdr05]3Hol>=YwuZ<QQd:A0-LCaOm+,wwăU"m4+Crd/r(G=e3NbPbk)iX&NSbn7#WsFS3[xoC3DOsTI.WvCT%,tkGA;<r0Gf[SUăU"WDl+UCX>mbh_+k#b6.AX]$7TL4TpH/K,>9l99$olMY^7KOwjLdUqM8J7^5YL?usăEND SUBăSUB V5ăU"<DK)on0[?qP:405T[CRS$,dP.lEi9pbkO-G?'HHBcl):aSI0efqNPnpKaIM2C9CăU"=>.rl=P;.wN69/]BlXl?Q$_[0InWw&U=AcfGa:1Ga4ptU_#iBl4UH+v6.VoOh;)ăU"Yb5-+$iKo3L7$\g*n6bQvT)HmES^YSB>?p5XIN:eGr(4a2FSW\x2M$f0.F'7vEjăU"_MCXc.BEu,dSf=k2VN2Lcsy&fJI[NP5XlM=ym;LHMhxvKkQk,ZrXjK([aj<zaWZăU">AD8%Vfk\%e;N6qtbOsKADhOta=_g\fVs0NVU5c]bhs)M+*)n8bYIfb$=ZhNMt/ăU"/>Z+xP?vn.g:]V>$Y>SHoT;wx%Dup(%)9%%#%-%TCE5J%53d/C[E%%Y&T%%0%%%ăU"%l%wnsy%wtSgRfxfLrdA[A5aiNlfqBA5db2k?CCBVECXf2[&TrY[OA9=Ju\tjB&ăU"wU_;#7l7ESJHo0]pj[/CWzIdmSEZgPhQ\'JnpRcu0CCE<CyCOjS--xe5/l<tNTXăU"4lI3RGq'RWf:rFSDrWOoF$mKMXTapopYajwa-rS\[?Kv>,CM6&+=$/b$cgHu7njăU"qQL5aRM;rQW*$N(]:?l1lV4BG%I;X:=P]t01El0+uv0u_+7P<2EOC]t^K>c]oA3ăU"Jk/BpLaE-zpU4Xuj4[n'&2^SLV>hoBp74*/Jn,]=Oe26)e[HC8qiU8Y$x-Vl;8păU"/%KZTgtf8fH=G+LVM+o7Arf-Nchu4<Zq\q/4kuXgY$L)o5oDqoQ4aA)^CD'TVAeăU"st.QG*PV'['4*fX^/X,Ha'cr</m,L?L?hzEI;hK7e5.0p6DUr\yYXj,A]aX<eafăU"bp7K6L0&ZzeSX0H+>*09WUD,VLuTXTXpP\.D-b<m$a_hqYs5soE\)#1_SkNEHkbăU"4l:+%s\x8<a7B=rpp5s;?eBqN**v:bOGbKid]Z:UfS=2nl6a$d5a4HA;Bt8nrs>ăU"T1>HI>ew]J0ZK8]aRnq402%;>h83N(4$5hqWZ]2mcbQDYSF]1CTn<LNbR7b0HOXăU"AfkNi,$hf:5(Y0_Y6p0%'lc]cpqIT]yLUcTx3$7M5I2i]>ZXs$)%2T-6U?:H#zgăU"f33GL)ZM>2?JNYEgKbwr;DHo?B*jr3pwFX72nnT*QZ^8G>s\rKTN+7tFv'Oi_72ăU"#>//H&uafniVEqjvObLM1Y=imZ$o?ceA[TgQ>,V/Bq.?Kfea4BLO[9.g(Chf#p]ăU"X'Ds1Lp1B%ZN;)FKV^<'$1Fep5w'O'N4jbqP2n8DhKMub/2MYLL*TunR5r8-:m^ăU"c3FH\A<%tNe0+g/Wbj34B6B*[aTt($kDU+bOt%2jkaq/U1AD]STtBG)(%kJ&'GIăU"ei*$i>n+_PV_Y&_L1D+^h75&\ImYx]ruY4:Ck3r:&]HKGR0EWsL8RD3?V/bCvbFăU"FoMnHso_KR#v1JHK(yo*4z=.jRj)41w7ckiKWtj,Ji6a/Nbn,']lTht*QWY,I%răU"Srtk_at4scIUX\la(4Jb/)e3z0U[J?%/2e0]Y9bo[JPX>VpwBa0^:BIb+sE7apfăU"\8pCJj.xYGG^3I7GC]>tw=SngLFMVA-:4;m2&*:Z6f'ToB=<KfM\.6H;v&AuE&0ăU"K\p5gHd^$4\77.WS7&(,;E/:Jpux^KO]B9V5fI.+h-:Rq%*ut.Rz*EaSK(k(4/răU"=0DAxP2gT)%x1gR^A4o0-BfPW/7$/6-&;*ux;djt[6^=]VOY.m(0GAN>:[<eNCPăU"Wlo#5CEmq*H6S2ULA1b*\C:id%kR]P.-J<NMh-LAW6#hEXgZ'W(usrK>ce^e0_SăU"S-$H:36g3]$ijDNfEJ/X0.cUK+[Cb)LVUhgpqFW$t&J//<hlU^vsbEx?-\Z=SVVăU"kod&=#;HRes/C$:K[lHZGYgl,8Ff'QATm6oCFvtyPhZ,2q2sh/ItVi97[RK_fVCăU"WwQQ+O;PO&$L.ev5sn[wXRRK#uX9m9P4x+jRSX9FG/FjuIFh]Qdl,<IA=SG02ewăU".Uk+lT2IMxs<Ne^'m.M*Zh0Y%Ygo[%'oC%N<]2Wnc&)?NtHLj<R].+k$'<mJMLGăU"fE<<=Vf2(Z3voy'8BBBK*<5Ra^#Cc;.?Cf3HBioAyr95==jAM#NavRkS^XJCd;-ăU"N1s8K^+IoN?BtPVGTR$:7-&9nr&>E<K7>^]gu1f]MIqEVqL/)c7T6]JIh0q\[[iăU"#&J$IIgKLdq.Mpi6u1OCq#90xs,lf7\0w>I.8lV$eLhe[_,fjh2Huo2zR]aj<6$ăU"ba^dIp#]Z5,NL>dS/=xf\)#S.=Nx0/UWe0p.$=1d-DWKw6h;fR%e1V4Bv>xKs>păU"TBI&fQonu'a8gfrMu]*2\SKvYGWg?hC#d?<yOFe^Qkb&irX21jC6oE?,u1d;4Y8ăU"V3Xz_$J:cQ##9>kWBBvTa)8C7,8JhpMSe=+B=ur[Vh7n0n[0?gggF)N&>6*<xbQăU"[6/,<9e0P<Yf12.t+<LP]4hqb[uUn.(QK897D9D3l_-AEYke-'c=n*ewqzu$.R,ăU"zq+(2A1.5&(1or)3775)YWki2YzT#t1oe8=#WqS.V(CqcTTYc1v^5g^:'aIT16făU"FSL2KZY;.=3(Dzok>6T,T/1)l)&sx$7n7[4#3C58E/?qi.ae9sOCE(?LK+zV79UăU"n#X1#I;r</Qf[qZ]^Zhpp39/xtHRe)#5tgPq3Qt=K5#uxVDN_\SC1O[(R/ul-:oăU"_q#R;mFiPSSqGyfI1haIcIA?gX'8:%kF(VB25^>kgO&LAKzCnRzCGKJ].z2M*>QăU"9tQOJ:W((CwfNy<MpH<Y=LHx\z.iG]_TqmbqWMS8/&P[yff*$1S:m5mmnWXt#QSăU"lX#mo4A<2?gVK;Su=^3bM[jsH?;\uAY%M8Up,ljx3/WHCm>X2:gw]P5H?aZwaqZăU"8?J$J&g),xX.iEtt8b'nLk%Ik?-KSNevb#IdmB^:6d;kRd'O3_Z(3f2H3e$>eczăU"&:\#^$_SHusJX.XuBb<si5nx=i>:5VTTuefC*di7Jl:jJqe;Z2SefdspTMh7?Z6ăU"xxpAf9z7Z^2.AMF3SEvoofpw5]6]0V0PenMTZd-;gcXKWnoVMrU/w+/8I>H\c<MăU"$DuphKrRcvk68Bd[1=w$xISUKQ?gNqho2v(i&^o'T?i;]Q&su1r)U&gP7AxTE,+ăU"_9lot.-2H-vNWmS6S&W8.4(qMOJY?gHKSsRNe'KVG7NVaExMY_O]&D5(zgfdSJ^ăU"PnI>Q+FBUbEX#vfHWJ6yrgC,_J3?ZQm0\SX.#1VHZm1U0l-M\H]jMC:_aQ]>SvlăU"?;6*GF9L#A>kG&iq+g%Jb_]YQ^-:cJ'gc8=#,$Mn>a[=-]vA7KNe11X&Glqmk.năU"<)vX^;:NQ4T1mgBDN,<'arDU[Fz,__/TSOGzJg+\dk+BsGT?+h5,X.EQY_FAVewăU"KeaFw+AI<m[R^\'?D[8:DsPH,hE\(4HWOZj[T&:8^n6H]RaM?X7Huucu3F_8XB:ăU"y_McAsTd?D8%(lx+-t-L4O^+nTN1ASnxr,Y6G'rk3Cxc2uu?P'Vw&&MR=Pn?vw4ăU"81*fj'5tdLDpMsYlteFiV:Tu)H>qjjORh2G%?WaR??ig$1>mT1BH/*Vsd2lwSaCăU"t:c3btfAjU??,E*]5VuRcS^A5]RO30IDJDDX5-pBBq.o]9o.GJfLui\qo#k:eW0ăU"M3Rl&bX97ib?OD=v*_z2pmkh$.yG?KMcn//_.qwSbd(L/=zQ5[y$$'gype=Xc\eăU"U0Hz+m8o.P8a8lRGR5<gDH)RP<%RxsJhu)vCUq:E%sqp2q4b2##Iis$tQ/MxF)răU"TXXlQs&;eTC'T378PkU7A/i(\r)yhedS%D_3:i5\)kiN]r?JFXf4Q/6]_[7il#iăU"j9/C';8rI]o)NcEKp=&AA+K;+QOkRg;a1ko59r&74$/e8aq)^sg.>AHH;NvLC[2ăU"P+#;-,k>mG8WiG78SlJl/k?s95#:LFcOMoqX:MNQ<JR]-?wSR,EMP#Ona(gGto=ăU"-*N<CHF8$*4#[uQTMuO;+AGE*t7(a)E%K,iJ8XgZS/0F18%TA/;=8z6&ou4WtJmăU"x*OU5ZE+jt?^e40u54$)xULYBaGYGiL[PmnK3nF$cmPg3*4XbG&o#;KF&lnLo=dăU"/IcfRgJ+.vHqKn20RONG3rA/$R3tJFKzcM_;pJK/X,teAJj'*cDGDfr3:HsUjVfăU"O_<gFc0Y1,lVV%,L1CFzpqg[g$ofU3BVRR8>-4Ty$K_W&4lFgWIOQq4r-/i=V<_ăU"ZftyQ3A$Af;3OLOK+/a/zGrScjA&prmvMX<=S[0wrsdQwxYY\Cq0j(LhUaZj^d,ăU"_jtlU,pHWhl_/McCY;cdfB6S*By8fde1if+e+_Kebx+iSFQDH'>/TvNCQy?t5,.ăU"dRWHQ[#69yFuN?\q*9K7vZ?%*>b(en0\o<Q7qFDD;kK&xa4T;=jZQ1;N-&t0=K7ăU"UF=JXbt;]%xzNK=[wORH*-0Q1ory/fIl=]#c;:4=)-&Jf8#?YLp[AFa5BPl0K6%ăU"7/xp2omLV-7\0m^gto]dEc>U(^dIXPV+#ZStO-s2sz7TNqYN-EAtn-+gm6Ub\Y5ăU"3Q00>2+IX[Z%,:?$M\*x8X.jpgEiJ\sc]FyXtloU#J37.'e#vQVRA>S>>?^//rfăU"PS=XO.$+#g&3u&]H]bWXmqx]2L7h[=P:KV(wIw)s$BI8#E<<9u'(&&4Gn0kZN-7ăU"=+b\9IIN?LS>N'0.2b4lVV0sG&rsY2TeS>#176'ZI1md3X<lbsksp]KX_I$5$93ăU"f:==U[YpkJ6KUjSHR,$?,[%jV<XZ)r=ij08mp4E7:kd543Kp5C>3JKQ0sITKR&7ăU"Ms)Pqt-d/wQ=U.wU>u6)Ktf2w[F=u$p]8Ff_/Q9n6K+9C0$y'>K#aNj1Xlsb#e:ăU"qy8I>PW[Ve(WUSf7S3.\dKSwdS>ef/+2rGYZg:J+\K+(F&v)?p&'[Vb3er,>kdCăU"tj#_0o9t&:VDc;F/j+kc26rkY]YrY,j0//(Xy9wf>cZgpWiVHXQ#Ty?Y-lq0WanăU"R;pV'#U_AxfSp=/AWtiEq,Swq$0._GPm[X$_[11G.pje,=NIe]D.Vj$vVJjBt^,ăU"X1NYr:1;,U#iQS5drZEfy\Cq.N=CpxX\E6:<lNiH#L-p/;5^0Y=>$Edv*I(N%,]ăU"73bVWFSP/TPILJUlWf/)jrAmD:=](I)fP=YVC<ZlD]0>Yrcbn(YCH$<DrU,:q-jăU"N^rt;2kOhxI3)>]1'/a)4d*/nno#6UBmg7ryK5Zr0Z\v<0?*E%_Y4J<L=Q%lQKfăU"YGGCp&K#;1gi3y*#gtVelo=2WQ+o<E[tB*ofybVOx#PtY=8BwJ$<IQTJ?Z/6bADăU"tuSN.:3;)?HmA_4<qj-xkb7kUB?dV,r.FMmplUWCga_vf$hKo<h0VZE(0xD1v/KăU"<PLJ?t+,ck5EiSrVGkW^96D\gdr4pLD/\dgg%ma\]W?F5.zfR[L9tdF<477tP(IăU"G\m.yd'dQ+fo2&<pU*5K;,Iazd[0iof^.mc;*J)F/mA-XZ<MlRI$s0SW4_cetS^ăU"&V]2S/F21qr;h?M2)(<5^P(o.1[WX9*v88TH?7&iR9a3VT3D8pQ*c&:+V5G:bYXăU"+Emd<w7[^,VI9'.7y5i6s$>//gh17f/b(;kYp.=KAjufMx:TG5:#31]b<p?0)4&ăU"-Ir(B_QBQ]L#M4A4eFtA+#rW6BUi.TcCJr?^3i[Q5lD;m$o(4=g<=V+[^C&yS]căU"_h1[vG<JQdTE+Dr1[cnr-QBuOvT*s[26OhwsgC^mZD2Qfpqv'i#;W+P$hKHdR'CăU"GgJpbdk9RF5#:js;L/v3_6dEkX,M[vLq?C'b12DNo45\X)#$EntQW=o6D=%qaisăU"8Mk)MbBU\pOx6.^52g30oV;W25:Tq*cd1O=U0tXab(l+t_23M'P8<#tFpBou7:=ăU"G,Y5pAi,h]qYESsY\';-\SLPQU1ZS8b/<fdrd2gNtYrt5't(^Dm6cAe)0L.b1o6ăU"x\rb)%/3LHxOze++MgY7/4UC:D;8o9hafE5dR.S1;-bI>jjv6z4sy5t]e/8KE*răU"C(.?b)KRPYj^;*gWRJm<qU]X$;pVad[tcM5q8.tws7J\_tk$0CFPk7jc>+-4eNMăU"Z9(Dh+/vj*fuA&NurQ^iSln0K?V8quK_T8Bi*%x-cZkNn8ys(y?ul#9%uH3Yr5lăU";#nzkp%tYK.<NhnzkYHed4Zufrr\sFA2kCqRwKIsSHn$^ixsSJ,$1_mK8qh^hc\ăU"UN3JW:LnP]3BRYnv%l?Ej(#3tX0)IPo?DX%('BBmXqEaB]=6/[G'?XJ;fDJj]AeăU"aLeMX]';VYl7tIQt/:pF&TX*A73''I3,erQ3Vm$VZkfk+xfvbK;5y6V,Zjhrj]HăU"MQMmgewpuA)wGXx)^t7%VeoIK_<n\a<wJ(ZIX/gQ*SN3]^eXDJe^SE#yUBh%>/săU">/S78kaj8elkIVOM'Y+T)T8vF4FL605?qJ\DqsO6,ptF:ZwUnTB7(b1^FxEef5uăU"^+K^6krlH4;7u/IF*=+J+gpGq+Sb$=5d=-SxFY.XXZR7gZIQ_eks'&NSM1G2tBlăU"6&vX[K.Y/:77_8F]RooSdtYCUPP,\7)UIa.a)#k.3,?-^Zgq.^6kNjCfX$$?[MlăU"iYY?/rXZ+Ji^^7LRb7&A-<L;-Xm:2Ni0NZLKKE<&Y[vD]KUO\&s8d72y(QEk]fNăU"=,k:lYAFG16E17R>(h1/\Q9ocnOF2QWXv1e0Lw\_gXB]3z5jn3HdL/Q9)n*O6*6ăU":tb%0H?])7RR(-m:2)H%2<3R[dWejR,oF1u(Jluf#tWe*<Ro&1lIL;I9L1IBVKwăU"w-[DoHg0ch8/C*LM\E1z4tRN9mp=Y['c_cuuI5VKWjhKw%U8VyIA#DwfB\Km*F'ăU"jF:Y$#VyI%ADwf)BKm*6V:V?6hnpYH['ccSuuIVrKW4s(uigf[DoHg0ch8/C*LMăU"\k'=Vc*>Lm*-FjF:4Y#Vy'IADw1fBKm=*FjFR:Y#VFyIBK5wr-DmoHgc(h8/*eLăU"M\1/z4tN49mpYH['ccSuuIVEKWjKSwvUV+yIADIwfBKmm*Fj[F:Y#8VyIA#DwfBăU"\Km*V$:VsWfdh8=),LMrDpo4tU6Fnp1YTQcnckUN,VK9/]su?*AW4ZZEt_/iB\hăU"O7J]4xoI^csQ6_q_/,i\hOD7]4x8o$quHd6ccXkUNV]K9/sIu?#&%DoxMfah8=)ăU",LMrDpo4tp6ZqI(n#Dw1fBKm=*FjFR:Y#V+yIADIwfBKmm*Fj.F:C,dD_L(C4t6ăU"FEnpYT/QccklUNVK79/su1?#&D[oxMa:h8=GacMOgIhO7]14xo^gcsQ_Eq_/iB\ăU"hO7J]4xoI^csQHgYh66hnpYH['ccSuuIVrKW4s(uigf[DoHg0ch8/C*LM\5'=VsăU"5Zt_/,i\hOD7]4xAo^csYQ_q_:/i\h1O7]42xoy4*JUHf>m.jECZL<*D?q7Sd/jăU"I<$*QhpT$NvdpIF%eVtBgGQ(V?qCv(iqKiHDDpa,Vwg8eqmu(jOi_ZpanD(u,?7ăU"-7[41-_/]=s6v28]P:jdXneTpTsh:si4]uLd-D]uj31J<iZ?*,[XRMk_ik-[ExFăU"uR5b>B>f4f&aij&WDk9)DV#m\eXaiEN56-VCeXnygNp/s8b.CD(Gi&kTJSd>y/făU"9DbPF;##cP)3ju8KK*SxyMR8)(5>Vd1S[.o-cpAYG/v)_sUh\j7IGqQB4[)aquDăU"=o,7_?g,Qgo#?q^lC::kP8Lmi)Uyw[AR(20:z$I?JIZx8GOv=OMb52K%K1T,n2SăU"f.1dq(%nm8#CX/S,vJrFw-8^3L5Hlb\Nl]Y(%*J?wc6'=hodrpgX\?(;v+H=n%făU"ufj,(I.J&+>657fD/yIpU1Hi:dPo47VoBTI-IYytWM(*9?,>KlQ7tG_j=^G;Y]\ăU"TE)=/duiEW=<&7E8I[Zc,hlcU0/,oMmi\/'KC71%K)HZD$RLWZXD<;TV_wS;l)yăU"jcn)rr=Imjm.X5ZYN4JcA'i6Dio6/0v8zIIeG?#Dl<TA(NM<;hT0q2#3Xl1*<jSăU"=:q_X:#^Gi0YOjhT]Xg.&-rdEU$D1Y-Gt.oSqpG,lV?i7m>;:CR/TemJwD[r')-ăU"P_9:<Wwa5C5I<L6HyGiX+REF+O&C64S]O]7sZTi6ZXANiYxrK:lBE?IW#HZ+],iăU"\I'nk5&foCvWN]&TOvc?-]AU,c0^+PC%Oy$gAA4e%RGV00bHgFWn;O]+-Wx2ysRăU"[)bMoVp(^);Lf[QIO0T%a7Ni^CH/itGJ2+P.O:9S#PSVx-V+p('A*98ZSYILb90ăU"Qc;2gEyhKjMQI9jF2]a8^uYr*dgc=c,W7rvXPV6NNsfA-/,8IlU4oS+dC*=#L[4ăU"K)c$+lD\qLXn:r++>6mS1x#'N#a>QUP1LMyp+aD[/EaS*'3LP]a8[\cbqguFN4căU"gh=U+1:/T2*n1D$2e9%d,2R&(Vv$%FVU21e_BnKoEk3)inyR5+&1_q4-:hn5hX:ăU"k&w)gZa16mWUM'1A^989*7OK+^KbdKpfF,B$ZBW6[1XC%aaz8QZE_a9]jRe?9E-ăU"(552[yOXH7?kiJd,q3<q#bI2/;i-[[Z7E7iqBjwHp/i#sBiW7R#8C<Df:B&U(kYăU"$r)towJKif6YJ1nVpoS=_Br(Ch-WDj\wLV%s;)3+j'?LgF7Z-S*hzbMkBNNS=?kăU"tRXw9PO1DIM_tSj:EZC-3wTBJ(zTWs=a,0[ZqGLbU-I:2=O[Ew2p=WP;?rY9jKOăU"YCQGMH1.9dGXtULat'/U8x_35cpox7rU2u0xu^WgX9e+UZrncQY8jVdX%._h*S^ăU"8xWNc<41,%nTm<kcM(Nek_<w07FIhFiX;.6\fU3]W8eNi61;CaAFyjj8C&'UoTqăU"d7io3bQ9e)+1et':j;pJ:BV&GUIUp[2poA%E4Li+jBSF)viYfM?rL#xsahYP:k.ăU"BFFXJj92u>*r$YuX+rTL0RFQiLh_6:)&;H7'I5/Qk?6jyu1xEa<t+KeI.2-SUD1ăU"+e2F)9f8x2;3ZB>itp^i1l1]_TpY*<oJJg[aLLUOQ4ddN5.wGz9(N8MVrK=bIHUăU"o*C=Q$v[pCUt*>CB#pl^v6EJ3IN9(*n#RWa8&BP(Go0vb6c$pgt[QM4G^t<#9T)ăU"u73SWW#'&P5cxkr39oD)S]s-]=tu'Yn-Y>%e=ITjrv4v2LgjiB+-'wl;4>[YyB(ăU"&EvPK'KZhCs<iZiQ9eluN+-;-C8Bij(1WQra/%#x.ptJfhar)u6GV/#pF[T]O#*ăU"4HW'vbz9I.6A^4U;^V^N3dZOj6mtSJ0ILP#[[0G+[]C8'R;stA<P=?e\Nn#<RTUăU"^gnM(j-qDj&w%V51,3lu-Ra7HWt*%<%]ooWc[QAsPrq&-JglA?UY+ksT>Tw(&(:ăU"wQa$9qtf:$ML3)CM4+c,Q4^SU8Jp/kON))1N,Bis/[TjY$jeBIGMNf6[w>tQVsQăU"uFt:U?q?m'81S9gwLQ%fw1L)(Iv6>ohZ^v=n?t?jR&dMq7I^5>-do#a[E8V/TDRăU":4bs+GOH>GY(d^f,5^<$p*U(5CYl;L%&Cg)4:uXJgk4IUB+eLk><Zt?j10R9L[uăU"PC&4KVq8/b',SDU8Xdjg%<JB\Sc]].3oVpiNBL.QZovT<jZRA5NXObW_*K\[9h;ăU"_-wY>u&qM$fZnb2'dQzG[?C<6$d[LS24('75ciF##zOq-t-ZBq;7I*;,^Id_%<<ăU"&cRK2u0R;*Vo-XDI/lba\pCC5k>Ls_c^R>mfgC1gW/ApVTJYsTmr5zZqN-=woGQăU"0pg'F.jpG/;4fYJx\;6&NTIH<O%HGg#Pag,HdJ8X=k'z;\Z*=Sa7-]^h)mB/K7XăU":E+lR+'3zE=8D%;9$-NX[9m#$BBC%oCg&vaH_Xn:lB;):RNRL?3_s#A)=QrE0YeăU"Z'gU$*\0bKj?(O(kqzfhHE8'v&>>q=wiX/pC5I#Y(9BV'C=y6I%/::EYRh*I>w2ăU"heTvUt'k?t2/)pU;zx6MHB(Q+Eh[9Wt)X1GgL_qT+#iw.Qcst/XG,5/X^nK1B/2ăU"8Nr6+F$IJT+Qi=nt4fLKltpWx1N*%/GZ4=W+w<0,PH1tb/][g1LkEr7_]Am8hO<ăU"'2HreFn3:G*(mdt7wQR':7DC47>c0,^%.5A5-1+m$6d3nx5PeRBD#.muIao2>u4ăU"Sn9JwgnqD5\-[CphL0J>KE(Q8v[q;,8b71i+GdQ%Y5I:kJEd8[;Vrq+qMPN[R#4ăU"NZ')ev#bQjBP1$4YV.hau3<=IqN:M8Z8:4rQz_0ro^R>l9ja1[rzqX'x\;iWp(WăU"2wA[nVVBxG-NdzIQ4eEm_s+k+cxw+O8R+[&Qc)Di(EnVwhMFrHLx\%&)$dk\nckăU"HZ;KOWQ-'pHAVxW'_(Yi'O(9i6*Sit7i'1qL2#j[vluTY8*Qv93atfsnbmRLUpBăU"pkSj:XN/ulo?9&W?(,anB3vx(sDlpjwkZKJauxt+Cw#SLt\I2j6,3Mm3&jIpONPăU"2d-WnaV\q<]501P73*fc*5$7Lcc>]dqZ:p+/Rz2AM(G3jfQZh_ZaBbO6B(7BD/jăU"Bn;V80vNmf0B)OJUueu[PuOj[w609oQ(dtZ.+r38odjKsycX$-d+w#3,,<l5gA1ăU"okd[C*K'PDmAyiJ?,ka5UXb%h999$DkL(Bfo%bolWw-bV'wFbm<wDj7+73yfIsMăU"KiO(JlN[p9(p5Ei97e5IAJ3K^fTgN+N%S0dO^KNB$o&7Mcd[Or=fFKKr65m1uosăU"s[K1_s.^(Br=QI\#S:qF#Mt)UDRnw$s#P7.x;04)8Xqf%cnH\LX_#VXG:vg_aQ)ăU"Nt[f^qP.E%QFzEYKi?m#/C;2w<o:E17Zfrg)-U:PZkoCnJ$gc'[LIwvB,)uc*+9ăU"Ni3uni7]X2=,EcQ0aX;g9v\%up()%9%%%7-%?CA5J,9:$cv7.%%xc%%%0%%%%qrăU"%wjxl%nSgfOxN*:bBSm,cwgOxSVSW;[1.]3#'wA&..IR7&=l73Oo6DyV'**xHQYăU"<?u+48wsqpEaa'kJdNexB+JXbihWgMshhJ:CM>G]$-QYJA%6\iOzn1d69+^pHLHăU"k#H6N9mKfr+^aX&3Ai5,\:DjlWYlXj>;3YUi6\/3AYt+Bu^4;$I^zA$v?2qNLX<ăU"?Uk=YL;UmX.K#H(RpY/b=nX'8tO.U2U99#ng-ivyh#>g'eQ#YI,>>Qj'hwR9.]FăU"a+(l$9/uZrVIB+Fig]ipQ_bB+fb%qSUYU;U^Lfg1)Z]hjJ-1=s]*_<G7c)#VM?%ăU"W,)KZs<0>ZPPdlTArC]\(TV,v+ajEml'/NW(JV,%'G12^aF.hH70U(xbaPRB5BDăU"3LNtHp.LG*aFnEX8SceO0pEdHJHM0ADjOQ0T+b>]'s\ZA)Wd5#AY.)CkrLl,;AnăU"gIB0rHzn^n>uf=H$Ge9Jx(NCmSTPB&5xh/JFiVzW^14)=XBluOm^yTKL3z#o8nUăU"n<[J+3Sar+TM9(T7jb8RcSC5%Miu%Vbto432r8,+]OEY(R:e3fnnNt3p6dF92lNăU"R;?k9?#5\*Nm_Df(Jyi<MDgZ0TNA)Rd44-3\v=%f9qb]q%2.:36GE?=-;y]rh-tăU"LqhZ,>5*RK_:9DJYNcUTj.\W22NGog/F5Q2*w(ote]BuK;SwhV9S(Oipu#Y5Z$9ăU"uAtM#m;J1(F+lJj#^lvZPoK)?rwn5n<i7Fbsh\IsCPrl2*6O+F;MkRN&1V+;g=WăU"_N;I_MZ+O<BNg<cd]7/:P'XTPp0mNHh&<f]#:#5M$JG/5Odlf6an_lI#_N=L8eiăU"GrWvcdl7J=NoKas\V[+)iQ>5NRB'BCgFW(oNNXQ)RF\IY;Y8YiodNBOHU-H7TqjăU"37R,%Wh=a*(m']oCOX5MX#)r:a]Z%f0^Gm(LakmdkDJ6N[J'fp#u$PIwLDL&.&:ăU"ZQ'x+FQ(uUp:_wN0v;'#QV,U+q,pgp6.<R[P1e]V7hkOP7km>DCru6rZZUhI*o?ăU"a2'6/&dsa)=I93sOm4Bo<#5I\71>9tieFz9#S.CpwG?,>K?CG3K'Q+nwt:t-U>UăU"$PD\R:RjpPRST5drzh;4[hQ$V_Ak1+)B'wB)xeyAhS0fBB=OR5u:'2l$XbjI\FFăU"G8oVP5LV:GNEMJz<;(DIZgkmu;*=6*sgYyyW>*>;ag2?KH2yyq>9._=WuZC=2OqăU"m31[;zZ>M72<$_1Iq_#Qs[e\qACa7/_TLcW[/nce7XkYV7dTIQttkFUk,RH,9>IăU"&cji=.K8%X'Z6<CLa.g5M[KLl%<+Op0HgG,_<G(,aF$\D.ZMfNMoxQd_v9h%6LIăU"(^Azrwc)R=?44>L'_Pe?18+QFZM&fNUvCfk\uGt?Y0=q\?1m8K=BHQe_6q=v;+JăU"i*iH08\)5eE(^b,9T]:r,k/aEdUJZh)E=Z=vcqt3.wnM)EMvv2j'qMLgbxsF(=yăU"0GUU2l+>u#Y1#1CSVLY=s\F)c;flln5fq:bKuql-d5SWzOZH'*K%bBB$i<O'Zn,ăU"pN))>hi_Y8boR/&zt+V>pkXDFc>k%oK.B7Y%$t0,q3M7js1<:^x0IfNQbc)Bx]XăU"(i]0hK&W$X79^Z)W^s1p\EOzbjbaV:gO)(><w2a2M)Mhaj44TeQbiox;3I[,Ev0ăU"+jq9%*lSg<U//[+F/f2f\\+^r%oC+UZ5Ox$A(%fQ/q2gS-)$N(B[\)ByLne>1w6ăU"NByOL0Ab0.foHe7-2eYtd'NA4dW#^R;o,.+qA+,Qb,pR7sn.s#B_*?s30LR.*\HăU"JfOCb.qFbS4NC8l%A/A-YBVo3RjO?BL3;L=<_#AE,89<pd&]2VtMD;?HXOu(oBCăU"UY/;%Rx+Y\N(E'Qxqt*16=3.44)/:OK7(8,da3H5-SiQSn[*2&h=_MptL5XOO#BăEND SUBăSUB V6ăU"2-ppo+;=iOQk,;uLF*R*2I]vEQ#Lo[VvejzqG13E_NWGOQs&5P_qomJR(1^g/2?ăU")NCj<^a.tspG+Y*1L9eWSmMn'$I#8Ik=DO?C<A:U=FGlAh6py*gm\5DOh,0oCOmăU"VK[pN%qmDS,K2Fks:+.eK^8cU;ecKonuN#o0*SwuC'Ar;nr?*6^\C]*:_&/*KhBăU":jd74IH)d9flb8<BeSXue(8EG2B4q->K)0]pRo8X*1A6>V:$[5.<t:<lk%praJaăU"Mu1T80rQ6rBUV%XO;]Ux0=hFO,bZJyD:K*;XjWr/0]FjGqSt^yTuEay'4&WHAO6ăU"f;_)r?;PZS%21VW;?6TJ5-A6ogPw%^N\vZ8&bT=OI,OkLX5'=Ypeh-G+&?O<hL[ăU"mUSWj%.CUX?Y<o2n&3LJz)X_PH%$,Pdk_'HyvQ;pz.G9.+Jr=CF_At2SmOb*)1GăU"?#W(%QrzV)oUGqWC=NTVFoJm^Lyw3N?$/wLFa*h.;3$;1_97esOJRAr_IJZhwS%ăU"<$]L%RdmvuVLILc,;4UsrkTh&R-(05UFfSuU+]b*]2q#tRIQveTkR/t9H=:>pTCăU"b?=+:ZTo1m%?T2*6<P59='H8ui7+K.1>l39Zu&13se/jShi'0Cb?Z.f&vmE,cY^ăU"88THKa#>G.UiZsg_e+C[WKGn'Gc#JO$[Azji<OE.hw^8R(&37vjSLK%#M/[8&z*ăU"XB0<&(DV7?x_P=PUgOo\+8/kPl>%IpWwPO+1ygm(7>#'Ll+ULVR$EED]1=aWk6QăU"hlxCn[orI;B?&yM:\yri*SUKtwB:gj]LTWm3c>3lIe/$Ak>gL1,n1h$m8dPAVQ*ăU"]e+dsg+pl]S(We+]\+QaHJ*+PimmuGA&n]bTH-^^WKx>],K(3Dgi)NEwr91h(3'ăU"w*Sr(>99>L8Ri1x461.o>5R>FCHR\kN/O3mnL\0ch*67V7NOU$Ki\,yC\deTxNwăU")gsN/6\>(St=$T>&9n:vY2RRsJ+H^/k_C]$RVoI8Xz<)XKNsjhEOl-f?8o*K_*VăU"=]MZw4/^QQf:,MY)GfEC2E)Puq<ss9&s8QAp1&JEb\$9tcAWKKT\4$'BQ8H(N>9ăU"(V<,rp[h#X$2kgYf#5kj>Ld-*<7Kh%X?,h+/lpY$&ne\<G7amX1ti+pA%eP7#-văU"v,D[H/LF\:WF#L]bs=pZ4m]+R(^wH+/bll+4(dN%_248e.31d#_Y0N>,MUZr\?răU"_:NHL;B2]^=H+)ixCbTPkJ6^d[U)c*H._uKgW:G,0X1TAwIJ+aJ9h[X1bK9mg,0ăU"&Jij?:OqnBRhFV#2'DIi\XFa#H#0w)cOD/[?5QTyo&S/O23-mY^2MYJd2hc?-2KăU"]RntRxEQ=o$YMFpoN7]R>y:pef'W:)*PFO^sN\ehHF0.IgA:;(OKSijH1Y_WBR4ăU"Loc=_n2$p^'8Am*u$X=*=?YX6d*H)-$%NlT\-5h&7sPbjVa5O5Rm%[7CiD#k9B7ăU"QV>#e,faZDI?6o(bTJ(e.QWmUe)H4O/h$v?GWQn;[<NjQY+/a1M4&kxJ_LGPO1găU"(ac-MqS9]vrLTO_aG+HYlDiG&L][D2v6aS]-Bk[9GEu5_#2ZsE/ir<1^A63JdbgăU"e_Id>KQr+_1r2#Iej7rw/>72G[VR1Q6*/$p-p(K+*.jTEI,H^(HH*9T\nyR?#9dăU"4V_b=z,ciNn\3<X+Y09Dl2\uXkW*bVk*Yzd9.I4yUmfdtVqC?GagTK$;9Eu=yz$ăU"5VcXFrihy9Qqi,.E:Uau1pbYuW/iInib\Z^Qb6j(x%I\$f9Xp-C:wr(y8;z-/S$ăU"O4z^(O1jgo#d+(N=%?aDT<i-6,N4'rm%+V=TcbTJMo/#%_HFq&i>IT_rKk&.]2BăU"zqqJ&04w>w.(m)kyMwnL)G_m#Q7k\&qd_TDRE0r,,UUu9Pnu:[PN?t[?VupOP2UăU"UIpSE(FUuy\:ch&qPYTtqY#0<C$V\Y05%5E(;*a'0T=<.]r5-Z.)y;GJe_TunGVăU"rplR#'7;3.X&O6hQW(^W]*+6x?5JI3Sh)Q_(.Y.EToAm/UoYlk^WF&c6mVmSL2PăU"7-fQ4Vl/q+._ibkTBg^=WX.x8M&]igdT=XWdMkQq_Pbo(vqNsBs'7TF>m<2LWBgăU")*2''4N_#W6$wOnn/_OMO0P)41BTIGupK$=>Ow8Qze%3fn?=t5QVE5.c9uiMy)găU"GX<KpPLr&&5l&7z_WDj,wfj^MA+YrsP#(;,OS=DG66OTO-u-+d;VY6->J$g^UU8ăU"MQSuit$IMqn:fod(2/]q?#E-<_lJf]8F>GGKIN,ToJ?gqKl-?k2#o#/+YwZekB6ăU"wRc[(9\saIOGI)UCIdHdi37C3wF[,ZA_G-=1VeK$9.4xBpX<lVLFY:9WC%Et0MuăU"hY[R1[#^mO#>F/sNEo=P6R%=tL.M[odeDKkM^xRZ+m8Lt9ObM;knH\qC=/%l+p\ăU"Hd_\r)1J29O9W(Dl,aJC*ULUH\ms1j8XR'PK6E>D:Uwvw.AWqPYNo^Su1:KXEP2ăU"LY1]5I]&FM_prrLYKuJN7m%kcuikX\[LYNKMMOS)v%n\^uPc.8F9jgzHDeTwG1săU"QItsC\9wtr'dAC,*=\)=[2Ar)'8HtlsFgC^m_icqM:sC8I7XCeQjkXi8>v>qTFCăU"-q->eCmNZMZlSj/i;peqs'Dw%GyreYSbCYRBQ.9>(iRzzEvg>4ca>vI_4YRj$V]ăU"1B91n<;hC(-=,^V=.3dZ[tm[uTOgfkk$?TsGJo'WaB1<2d?:b8?haL%96GZ8*jjăU"?Fqws6tN.wd00_kLodRtlp$,du;\yjeCidOWJ/ody3Nw'Tkk(Fg5W)Ah4CEB,_>ăU"doEl;BI$B+,P>fCHHgHAFJxmr)?%7j/PUVw-4'XtT&v9cy(eVZyCfWQRN^YF<]AăU"V#NDWlS%=g.N5]\X6(OZ4p1gT_fzRu8mekl;A#8rUS07plLUKBJa\z4(G>BC8&măU",KsZLFb&rCc)0\H+_H;A.q$eAHeO+W^O&pf=9g2vliiGZ6SRh9Sn6+kLnZ=Z;Z>ăU"D1qPMH\65-LMr#?sBuWt(LGSV*-Hfa<E<_u$Vn[n1(<Nh4Q&3cw9CL8_]9%(_rGăU"BkZfnYsT8WUQx*)6'AP)zEv*u*f899tnHu.$:e<xoM%jUSg_34HM6dV&YnNSrrrăU"<;hkSrR9\g]:5ppEUlFB'mL/)vziCvJt$</vaFMuAYU*tWY*<?b-;t=)?L(-f7LăU"MSNx'^hfv.VNxnck2*hOniZ5hK&=K&ruH69tzA(L66*;Ig$FxsbDXvi.O0bWoJ=ăU"DIE4-B>krBv,C_bdi6UEf.twI221twIXp,SELi&;8-G%<zUAEAWZMs)x<3UT^hNăU"3;Zf#O0,O4QYI)^FlLGTaa:v4(6;3+uD+;n.L1Thg0(OfH2q6*'ghxHBjso0olJăU".,woSMENKKy>;5u9COl_R\RlVRC8c,][lynuXfRK$6/T\#DRo6msBpu).'l.<HDăU"r2;uI,Fn?cw_7q&W/KoMmVwVG:hz.#cts/</LtS\;6C6-Yv1[$hikIG?t;,Kad\ăU"acmL??#wiEqhaJ:YAT510SQ^15f<RL+d%nd;vO;4r\I6R';KnU=e4QCP<Y1D3,)ăU"2iWoE.+IBCs9DWes*]BYAFp\jtT&SpE/L1uX^LYiI\70=[BgMM4-ArpnDqpu>N=ăU"7/P.Yh61-f(U_9,:L,oZTroM:hV(.QL(Fk.?.-Jq*a31b.(vjlp>4+H;v-z[rDjăU"ZV$)7wK:NSjaaSKEP<uM1O3v3LM#Nb;OijE#_j_M82:gh$^^dM1.lAIoX]g.SR\ăU"-a=u.W;>NnKHdb+O^,$Uc9mM5McLd5J71r2PDNjWZD]JjlomhONB?<k.mB4.nF\ăU"-l>Wl+E+sF->+DS0-Fm6Qdcz7Ns*=Sp\(sZ9KV6m5GV&B7nFh_:N$$bPV7CBR+(ăU"ifLq3LN$0lVkLytmxKBJ:'4Bhx;t;YMrN3NE%O8OA3c$5\p8K<_pPHV0%Wk)gnjăU"Kv*'VM3WHh+L%6(HyPTtE3,$o-wg-;mBsPnC+qJU5^4$e[EqD,$k4<AEY=h>UNoăU"_P(x';R7F0cdSoE]-XmpN<E_5GhHt.bGTq^7<0SR,>GKn,eHgJE=k:MtPKhfRZ;ăU"q?f<sT(Ie7*q7mg[oi]/)t%rsE61ZQ;n9l6q:.lUG>YGEnb$[8xKO+j*9wr*['8ăU"PsQMieYbCf;,C%&N/ZZvB)Fltr93:DU?wmbTC</RFv[-9^T#(F66MXL=cru^n6oăU"UJAN?EL7;QeX:*Jlk#0PUw>T+g18B>og]'$Pq'tdup%()9%%%%-%:%o?;/tNe?%ăU"L&%%&6'%%%1%%%%ujjp%utpj%Sfxr'&urp]<e56a,kDW#vF;I_;JoSCAs+RIf2YăU"VIJ$8fsKR+4Y8b8F[[nf6bWYAofic5$K6zmuQTu#jHG[GZJ/zJ;=y&Ag.y:(08văU"vprbR,[K\Uf=%6OsGVk90F1Dx=V.4Q_Gx;DL061L4$#2EH,=BEWRx[fkwnD<Si'ăU"RzV35cML^JrZd0+gj&G/3u6)i(M7<p_8e#H/HBGC&giwka8bF%[?RIUhm/8P+w$ăU"E_X.:m?hPf3sO)=4cX;DpsKu=<U1Kj^)rN#;1aAnt]iiB'h>ILrGYa11.\N$bf$ăU"]#1DSocI>SHG5W;uv^dA5#;-b>nOhlca[LseiRO&8hC[Hm>_DX7>^77b#^+EN3AăU"Yq8xN_lk#A'pb[^i.#+nu%p()9%%%%-:%t2&%JjTg*:g%%(%w%%%%1%%%%ujj%păU"utp%jStgUo:Y2'YNmroFSAH4sNB1No4muuG99_9[C]Da?9#YcccBY-hf?D][?6;ăU"c[[=[uA[eh-[C?4k1'h:lGYpAu9ECqaC='cV10]ju>;9mJnNMQ%Y((Hd,mJ1)N_ăU"0([((,AI=5jnSPF,R2TP06H\>*y(1[11kpV>QY]=*xtD,,#Mm1PAs^3VQ'M_fG\ăU";1X4&g==o%%up(%)9%%%%-%y[Z3J*]+I^a&n%%p%%&%1%%%%x%zhpm%tqjS[lnfăU"e35NKA$#DLq2yu5uoL)Bc$_O?wW)+V;0I(WwmkYfI;]NM1##y(qAl+)9I>jXVO5ăU"^t3*#u9^Pv]Kz5iZOC%EyW=qR)Sj\4#Ua%4-P<]QL^CE>f18%_P^s5]k(^?>B_MăU"<#jLOS#Gh4OB^;ZEty,s.](Lc>JxVd6PsKMa1IxvYycNJuXpWpZnA#]XDvQLKpDăU"bFpaKm=oj,gtP4rP^jD4.7qB.jJl6>q5^zM%x:[#xTrDLk=iJNL862f&CkG]&^căU"a#cu]JtasijV4bn24uK]JlCq?q#/(*IdXhY2I2MlhcN\bIv/mP+bz&?xDhs-?PcăU"clov4l?8r](QN*iv-f9d+3#7XjK:n6aC\n2&9ZbG8;YQT4KdTU.a0r#\T&=rw[[ăU"Di:+_/0QPHBJe$W=4,Q+<OH$hg]u*l<tZi>#G&$-=]WEAyAtlcSGx'ZfAt7R<F,ăU"bZO)Qp<PQ2]wbemg;>EqNW<BRJ8%>Z$^_5%P76OaqR=_',\p,]GmEVeDK9;4JW4ăU"s(M:5b()RE5Z]kfP3$4Lv2,&i+J/Jlrw#xzmbN.^&NGCHo3\doLFhn](bLbvja*ăU"0p&vsupgM62sTo[U_A6Ad;g)GEYrs;r8b5btO)8lsHF(Q)^+-J9XoiuLlbu_Wi(ăU"CrvM8'mwG1,W_nD7Co:Y&8Qu(#T)S+o7jS6[NW.N:h8A#*5e#XuM$&KQdc/&YVYăU"jj;oW1wfuB5Hu2%pgNuQMU;MIV2oFe^=9Uk65n#abc8'j78%;T8c2Sutgmk^7DZăU"n/0'e']l*AL-eR5odxp3\d%'^:<I#P0R5*iXoWR$nz4wG.m9NbnN6#\)9y.SFPJăU"o<W(o%%am*0+r1KPb\%uMs5;x?hFoJ$m%%P26B0wBdl4sNUMNGs.BMuz8.^LEX6ăU"oug_.PWdhMT1H_uImca,;*[CE9/;OU-&&*'8%LkBjIiXuaxq*WhkB\UX&MO$YNsăU".C3\A;Aa&8\&8Kh,Q5aO2'R?\u7'4O2&&(N-f=c6Bt]Uu\\>14*FNJMP1=YmuRwăU"Zco.#I<$n#Sa(o_0T/UsI^I#9yz/rVpOFJ&[yPO3,S%[z*dwr]Tr^,tjQ4\+](%ăU"TC=\sf:t5d)FREQX3C.6akG)Z?;_39nt-c,'iK,]#lfjT$5TDwE_ZhZpX06grZSăU"Hr&c5YqKx[BUfB9xUC'J4_Y\YBKhZ:EsBG_YpPF;SJdMWm0+Y&z:i9*N^Pf?KvuăU"e2[1d+>>t+x1z3l#I]tSBH1H_P;ot6IPk.e89^[>Ndm*iA'AWgy3E]u.8xOQuEwăU"<&Z+q3TIy&,<[f15K,Gy40ffd$XxxnVHUBNEGe>r%Z$-2M\N(mGh*m4Ks?sG%,[ăU"tc?JP_r)X90^yt0S,pMP:T\gk2USnC$EdisGhHpW%i9h,vN?L770te8z.W44(NIăU"]0Yhu._Ak5B:NgP5frK)5?JDy8B^1RmXQnEU%n0..87oo-haZT(qWFYnOkxo&(NăU"jcVKC?>R]fYaOVZcs&TomLIdw44s\$EiJOk*M2yMMz.,uv2WF:dutz.MB2H28wXăU"zt'm$vud\2&4OLkXcCC(:6snr'z5e*SD[:)kFsMBOq2G%U<kGsS$PTaPUH>gRrNăU">2Lx&d$jhv8.:_m-#p6z\EVz7DR%s+p^Q>S1GqEo2&[cJpeo&ubP=NzKA+[+s7hăU"z,uT)WmtQF,J*brwwN$WgSI:P<3l69gc'Q6YecHFfQvG\^prn?d(_IAAA6VoJm^ăU"JAu(WI*ppSn&[6oH9:v.*L?39GZaHJK=.m=fwyJ+b-gDiK$oKCfq;6xuj4dGTTFăU"O1U-E9Ip0\l>H><8-9Qmss1:)rsf=ef?ep%-1e,*Dvlg_80Fv-?6r=C?g2&R_RHăU"Veu(jx3F7Mo9SqX&=:A_%)dx$S$<uVG7A>;cB):td5)pWVx9g0;>vFIBcfh0-C)ăU"3M%=67Ta[l(,ga>58DdYqUlQJin=DRU4\Kg-biI1oN,\4DTdrvh*x,zcCV)PS_TăU"iM15%WnNb<2MSM$Ee#Wb3360vMIkU.a*yRO;0vYy(gN]4dh$/xtW'2aVbJ0BXi0ăU"StZpRmt00k8qBIE)4k,]T5>o[GVcOC\S#wAo*1JhZSm./%Y\_[X3u+s/^E=uOtRăU"Q,ecp0qW)[b,MVwK1MW\NC6+bdIFqnD+GvHJS%&-]Mt9lc7FYe#=nUrY4;3EYpfăU"W7kF>4;k7\Fij#Pch&TXLj5NK.1y.c^1(^*)FhIBpI-2'iv&xR0d2G$Bn0G-B_JăU"YFmkK>MY'Epo=sj3WFEGGt^4Oi/BDUU:cBYGo)/vmtBfgZgiQSI8,;sx3b94$QeăU"RetF;q_t;C]J0lYNHF2-_IGm]u?F?4(Ks8RC4.N0&d97lENHLCrc&3#c39Uzu1dăU"Nuw%:(:i8Z4FuJeLkc)Nk)/t$Z\pi/pCvnwGB:m0(kZ+:d?m7>66TpZKcwewL]6ăU"4yslZA1(dm+67Of]O[<rERPX&mUnHZUkn9$<Tr<tH6FrDf/b4:9D-oE<6)a<Qn\ăU"cpQ;#rdons?n;Z9kBr?$BbYXaS6g&HMhtY1E6z^oT.=bqw$6,BfH93V]2bm?fAZăU"'g3P/a1XZTrgzGu1+=My&b7\JXBQ5D15(QkKBcixvIm=]Lk-+t5=mX>h>^,J2;dăU"mlf7-Pd5Nh^A7ThDqvp92RUC%$oY;(\W**ot,JcBqS^jrJsRZlTkF&aT*Aq-ss+ăU"ZOxpd,ml&o(>/;_876Sl'swLCd-<,if$aC5t?[<[_'BsNq3%;DpZ+d8po#x7kE7ăU"3T(*x^YKvy^K]a_-He8f#7>TfbOk3cBIj=Oj/Hf+ufkUAsLl)=>J7jV:wq*uNbnăU"<PnEVFX3+%(sFhM8^KGJCvbK=y9AgX.hv6FZg*]WG8UF?s.JhAzJbERl*q=j>>EăU"bZHaQ0q#g*S.FOo;I8^mIE.J]4afFj&J$]iY<pvY[<G6Qe1>05ms3fAecD.-i7^ăU"kkCtK..A7HbFlcK8mQ%'Y.J<RCMb&m%RrN9/P]*k*x0UdS>#B#jTxE;,3*$6::?ăU"[G_ah-$^1RR($?U?lZR<G0ev%X*wAg5KgAT_G$u$%':5t:Tx5*rwM9lc<**xBfQăU"P&%vXJ)37vVw_rmz^>deJ2C8.)CWxoD]Z=(x)iHKX[57UgkqJyT#KJGb)45/O:4ăU"2e0zGA]R2^]7pmLro,blp,0)$2+Qu4_eLD4g650cOZ(=(uWM$[/mCscZ^'',%e7ăU"s);+z9OFdMT.QE;4iImod$5bdi:pvhe#P,CP.YrTbWcQOQJ(6IYAK?:C1(;/RrbăU"ud=q>QQ/lvi.HL)^Q9mUT<NLH*SgNdNJdtYArf46-CJkWa9(&Bxgn;BMJ'aCRiwăU"C&]+7RIj6k7R6,1T\w]ic^Ku_GOp3$sR;gY2%m:-nkb=h8cIV8:U?AVZ'ju%Iz&ăU"2_G&Z$k$P*(^I5g)6GQ3q3ndR_<*+CL,=X<XMUQ3pI;mvCOqo/FM9Tb$r6\k$U_ăU"\U&N,H.4m/HSZF<B-4ydQz<BHuqX.Wa.O#SH3FC%MPx]5vh$P-F,w>9\YL#/OioăU"M&rue<t+R8*ZsvN<>mil*a]=G).457OjFXll-L1Uu[^=Q(?Wo^L3A#EL#6Xho3răU"X-eGS/8p7yiJQ<nvMl1Fr(^8wz,-?4/=4M>kDun0P,Mio59-qEX*Z9Xpr-NNgejăU"QFR.q-VljL&zM\#g7BZaWvx8VVXw'4.?m=#4qTD7.[>'M[#gG[Fq$6Ynd4x;Z/%ăU")Cee25O(*?'54KJ8ao8N15%TzJt\tn[4#V7C44AxexgTkaF?6/R_I0lLs8i<l53ăU"%U<*(v-WGu4#DYSR6XT(=2k;b<xGI#jt]Y5Mh;8k5DA)^Sg275lUzz7h^eU&w0eăU"w([m)1Q1R$m3nZpE2[(\/U>qo$ch#Gi,sYN-fU=N8a5,vdQQDlJuDUsHbzi6$2uăU"nr6nbC9UrsW:;1J_b_c;l#h+n>UuM>+1vO;J')V_.kP^Qijb&+8l,OH/1le\z\DăU"ku;o?LnF^USrT\]%EsG/r6>t&=%'Fle#vQ4]Qna9n../jCnt$F?$ktXEbfTG5KdăU"JKE?G5fPo=fI0GT9YA5,uTrjC-pb_hTl;ow&&;#J3'P;dzIt+As.Vj(.niDx,mjăU"S&X7sh<)-AJx-wZW;e#f]5,R\m_&b/ovAoS9nlhb_81nH\=$Gmb$,v6bt^'*m:lăU"RF0AW0kbNlV$\t2]h_yXsq[706HrhVK9&n:3$I'SX-<YW>O;PuZE,p:vT*#oo-păU"=(HJoC-P5md?7I\XWB1NW>KK]H(f:*7*:/y.K'?f>oXK[+CatITTrRbivu8*V_/ăU"j\Y1h2ObO0gisPIcTZZUi=AM?P,=T?eog^AplWkX61r6c]f[X&ad0U&iMCO1E56ăU"Ue)'K=k:\vl#RmJvL=*E^ASW8d5ky)6?=rJD\.Q4R^+FmO?[PSVSOweUV,DGTkSăU"fg\pdPu,RjfYe%:Mbk%NgbIjRmB5f^CS#?tJ]UMc7IJ-.^LQEL3Bk;>*08+ZnYkăU"p,\W/d6=rq.bTo<K&>v>iP-RK&^/r-3sb85V9X1xV2tpw:Z8j(5:b&JckeLYZ<kăU"4Y/Hr4H?)_J6xS\M,b+A9hhk=-g2;<j,0IvYvA[KK%;\I<5Kg8i#:>XJ$PL\pI.ăU"/99RY%<:k(?YUsZUo=5,KX6nFf8kT##*6]u/XKJz(?#8Z=FickBq]SvLu\5TnsIăU"'5RavD=$2#k%^&xg_lD2?MHJ5qATCiN,6gAOZ%/_ly#F(Tb-84,o.L.v*jYMhp6ăU"K(Jc$6#aQl/tN7hWRkL+:Z5k0Q#VV027GS,3GLwPsZAn^+'g0-_*1T=:?d)-S5$ăU"jbdfTi_1<16/1MH(fay^x_Wa=Q(M0?OF#YhN_VGGh9jTB;pqTDTqBab'<tVJ%F8ăU"OelKB)#st,V.3M7n&%81Y5-X3nj\fiGP4/Dv-wb?2w#VTwAFGPPZ.OM#nEayfy1ăU"ie9btpoFx.&27udtxJ$N]7/'i;9d.Mc'FlV]wb2&s#Vsn1^?8:\^m^_b[S7WQ];ăU"d/N3_Q7X(5nd0Dab&2ASb8UZpA=lj^[g1_oV32aLjK_nDq/iG;70$7WsEIOV4v5ăU"#16uWSyY7qCFlBV1%O'7DbVvYSH(\X\e^FK50wZP78kSi3,^dkw0#;5OcAG8B*$ăU"P5Z02C;vdDO]ABbjY;[9woF_2i.1trh_nKcqCWF-n:+A3pRcYo6[KfyJpej^<3răU"MjDsu^;hKAod?9WKtnAafhj1x[aTpq.UN83'fw4ErdmtW'ZIPkW<+:KiLY79XiMăU"0'oX6>k;lebL(c]8b]2RXMj.X\,6L5<vCGnnvS.(htzI'gQQ3E>p[rrr8Y),M_0ăU"'.Om\lRo.^aQbrsv_a?T+=k9fKrB4qSkE9;L4uFn#P'%D>[l<>jmi_&m_9c]PZ.ăU"0\]C=O+%oDu*<Dj$LhIP5?#Cr?1,ooUE[n(ZP_?_)W\;%HKFmkCJhE6NqX'56eGăU"'juqxwQT,lbUofoO1]CM'Z9oLq,p36^[cbbOLYU\olB8ksoBPYm+([8]2PjMd;8ăU"DkFA\0JEjNQcY+.4bk#Sww7d'O73lGn\\B^&(k#Y:=dK_m4r=s:La^o$f-q;.R7ăU"i&%78jb*u5M''oMuJuQHcWKS;:wrUd7jO%\*UvtlL+czy9+m-6^c5iOrhpkWK$UăU"qSiUtls$j3$KS4;N3<kd*ao'?SL#(z)'u3,763dV8m?E3<Oc2soeSsYD1T%'vaAăU"/bk:nRX[U5GGeL2aWow[c>8[(MuEf,56<Z3#S90oS#i4^#HCkOo,(w8K5;c)#t8ăU"Z([:JDIh)BFhHC7DI407akGO3deI*sDd8)A3s%ffiYZ_4W*46bVWZRx/E3,VtgSăU"E:AVivr+,AxTh5.JREgRx#6YqTxE(Q9Q:*SRA^PPl,#HmHypjD]]B)AO.8PBD=oăU"m8^*IV#CfNC*'zj%#<:QISN[R>>5SUe_I0IeE;7U/feccgjlyD4M,G8RJ\8JJ0măU"ez,%iNX/0]EwBwk/rSo_2cBdVT_ldQ&Ud51(0T;D[8:1Y9UObD,d+SFSRPM+b#+ăU"ql.FD[8Jfb/$%ROn=vWH91zDVn.3;79?*]iSRLarG#71]c$l/Ww<.%bz;9ZA5cjăU":>1M.o/BKeI-tS+WWsP[g^ibqn0'D\F,AJCqX76RK97mx6J2&9^5u/6EI[.5a2XăU"*pTL4DY77/wp44-^gwMT_I,L&XFC.MGID.ak-&0/4/k;XVRrY[$+XcnLsOrnvN]ăU"rKr_<GJ'et:^r]m*aRr/fV07%XDc8t<K7kTK<z'8h1iZhFEmFvTKCU>8jZtiP(*ăU"Ibh&ThUUS'[rtEORO^m,MX3U\.uRUL:'%W,vo8<WW9aXu>=()[BJL)BW/se[1X=ăU"7&lQM#le\Ge<:tX1AdP9=#q:,\]%.\TK=+<fP#oT(Q,\fx&Bvnn&jpP.?r1E=r;ăU">Nr4V;R#X\#8Ff:M'^?61C*v$2;K3QQ4U>PRm]gSiDMor+s%(jZ(+9gK6.Z<MC'ăU"x)MQQIVtUMjj%1TQ,:Vp%;&c6$<v;$xk)gQSgc<0gr3AibqzXl,vPC1Az8.'ffZăU"N_AI&$B'h+mbXtq.ClxkbW.$RDb^mc]Ny*IdCAPxX&nHS45La8eL9m:-=4&5j02ăU"??)$^XLs^%47DE:6)-e63+Ql9Jf#5Ja&#eBS_C-r\2;Z^xT.NSCRR+^wEP'fs&0ăU"$i:qlqEgu$MKV4;6=U\^zX569<_nh<U^J.9N>6h;b&mE>_8+4LW%3*k'1';%J7păU"hi'7T\_\V_?-]9M;]=a=:ntVO*D*fr-(%BK;j1\Kx$tzUE%8=W<6EQI'&mlM'C>ăU"J'b<(SC_25CO1TdA-V/;xWf>deJd5y,lhI9f[Dg3c-xJK*:YS*hIfNQf69'C%K-ăU"dOX2t<KsQYlpg'V>J3'dGetRpDuo0n47.['*_[PrYr^s8>khCS'Q)<\UyYcz(#iăU"a\DRF2sHu2ye9;0vnBnIt[BR0vUCYN4ZE35a;/1alKnC.\'=zqqzBU4E^Yp,Oj8ăU"OD9Ati26aZqv5?OmXmkB'62MMrePegk6]DcJdbE^GqN<g28jrK3d>+F(9tb9)D2ăU"5*S/1bOLrhW*AesW_sg4oWV(mS\;R?cfS74C7J]TbGlrGAp(Jijd(>%9bR32xPiăU"LwMMziM%poBum;/YhH7GOX[lY<7(N6a'.K<z=qW:y9Vkaru.^0xq4IWsC/\]8beăU"-HQ5rfCtLi&5(mo5'QNVT=#j(^b?=0SPf=yD'rsrnH&kCl+uBv-jhkL$WBoFs\eăU"^9/3%#8-V;&Q47Du^Wl7+o]?Qq4DIs$m1Noun;ik2VNUj^jt1Y%jeG>[pWHJm'-ăU"$/:q1v=812;9;5Zqbv[Ulj9\L#ImilMP\aF?F:ukt:7fXWGp^<'i*RE9+=sSBIIăU"JIr;\h[Z<>E9MIZ/qhVfk9j+<',STBB(&(V.DA7&h69r=YNl,pN>-N5s0TLiFibăU"VX=HwZd4[mDLXXXk*ko'c<6oD9,jl(&ZIgVz]:8CBLUcTZhIk6orq;mV5dC&ukwăU"+oU,/G]xqB1W9NR6r?z;Q_I/]0])S0u6QME^>&:ViU4GeM.-($^t4wN+'e?gkr,ăU"FO>fPkmbJ?ddDp7]Aqiev12mRvuCPIT19aJ1g(F;u-JVun6%n:pV0tdsFjwL?06ăU"3''Z^Q+JS_%HiU4CGwKgqAaDhE^f%Bn);UMf0zM_nMdc#09P;=9,<1mc0+ir?RvăU">18^mUR+UFE,9[]Fc;8C-/ur17P:?Wmt#9vi]QpMS;b;dsO)4Y6qBVWr&U^dcN<ăU"6RIN$W-$6l3kS9Mt,wPK\Gg,F?,P;bA;q4g#-ZOm2I4dc8Z/[Xuy]$sKN_1z9XfăEND SUBăSUB V7ăU"&d*z5^31(BF]h_>6O0bo#4c6rrOCu7<o21D*DT/y+<IEj;Jxn+g&6s._ZaI8jyiăU"f19TO^Na$rO'D%>bY&r',=O-<%G8N:pH-FsnS?#R/Ggq&lDoPh#R<Y$LnMC,T#WăU"HQi3R9PiJU7;='p)d%K6LAjnhpK?mf]KFtHT];<tx:>ornl<csvd$E:tm#O\9T;ăU"DegG>%T##tZ9a>2Dc1[$wN(noKpP+'sgVx]dtrTls$sG[1TCrK$f0A.O#4\a81păU"S:b($;/l(Wx0aW1kOH1a>aA-A<=NVMooJR2BU/q]=+s0\]py,Wc$gM1*DUf)xC<ăU":F4oH/z1_mV&]<5CHn]OGYNC8(QmEZ?hsvNm:rA%urqdjJX6Nqhp+.QG,r(b9rXăU"$6#DX]XnpgXNUDgnjed<5*$M'v3=1vP*[q<4AlE=Mu-bNG;\k*#YZW_Qk9'\'oFăU"3p<NAT>GA9H<JF>hl/AaZXL%hk:&Rr7Qn?-F2'aU\6=pkfS)M:<o-S,*56fSc[dăU"6T_0p;YQ0'k48-M5MkI\%:I;UeEWGcxTwtuoao93Lhw52;R(cXRAVu[+1d[v4-XăU",qo)&.']H1eF;OOSgz^3pG'](4Nh0\vqChx'62r.w*I_UkBamv=?E'sj]2;sfm>ăU"0rir7ca\,Z?jV]+D>7e1%XV4gnN8)=A6-7tX\GHi%:7k,[$ENl+Nqza_&dJxE&DăU"akH4/h8n/x_sW&f#q4yd_.,(hRd6Sxi#HO]pDW4J+5onqAg\t4d1U7n1)sjr%%?ăU"&,TW(^3-a\K1*2\e=r#\vKl/,F-[#/n1W5L$pMr/Kn4(OVbonYw^O[QJ8$wV-&RăU"$+wOOb]rfMt3P7GI&VY#>bhu*:8'jl+Wcuai4QNaK1o7;;;,P$T9u%^p34--EHWăU"/UTl%;6(ZH^BL*uGc>Z9pboN+<^Ra\WZ[?VSe,)=$p3jT<bvchdXkOZqv-8iA'=ăU"ud8\MXfVBxdA(BoPbqm+\8\s:Lpmjpf3\PC0P5C7gkM-8?DA$*kGCr0Gt51%YxPăU"KbV','+W3XH&'E,\pnTp*)TqtR-#]I*=+,Sl*o<PDr6xg:k<7?'eLLo8a3:9ArbăU".f7I*ZtTNsTj#/9IR_F2ebGqbJah=(M(:C$M__A-Frm$q0l*+j:eyA?B#.qZgD^ăU"[>BEUWG<_F:O$Ccde4#PF5\kxi?nEsng1z&m+ut,kr7o.d6#\f:a9)CH0Ow?JMtăU"0;(JXgv_f-4m\84vE]5,jyUdZJBx4aGF*nUt6x#xkcP,qMRdPzsr(H2.X-BGG#iăU"%KOtcMp$F$tg.b+b9C#?EdV[5WWsm#T7PqH-5vSHG.B4/V=:lFr9i\f.Zk-NQKpăU"1x^JjqhVCLq.'N#M$Bbsta1,#uW#VV(w>NDv43v\$TU\b;+b5o#]BwFG=#rKi^LăU"U'QKB^#v1[[znHIX\R3V(+MmC)eNuFEqfNmsdxhR[KkHuFH,_L70Ex*ZF=bDcmTăU"$*<9h*&z%M:3hvEEQTX^IR&':hhA/W,&frIu*r4HD:xK$eCe6/*h0)0wZVU19q%ăU"jKU?5riq(de+bR)vEiTd?EW]?2nLoV3GCR8LX^iRy$B,peSYeOrKGLK5<JdU^0RăU"/0E6+qYle$NopGSYcslO9OvXU)oxHLT?C$:mAp*vrodl/Ay^F1Zqlw&JZO'OP[JăU"7xAvp<Rl^3dappTMk4;(t3nfiPs)h1\W'J='ytk(NEa9x\%.L^Tpm1l;EOtI+10ăU"&oqEBp0MYRIS::'L,(YL\y\X?A'\PX7pEt%(0;kY,bK>)=(^tRyrE<\m+c^DU[kăU"2'AhehK]4fRuscJoEDl9*72c$GTVhs,.%_B>Z\P=wqA8_4>vkjif7*.,*4;[Ql0ăU"/UpmXq:MfhFD6V21lUiVx36A-Sy*XfR)k,JU,rL=cUD/#>ULuB8t&bdlHZf%zeRăU"eMLU,9saaP;3weu5.Y<_8_.uF4G)oF2Uh-wcV>WGEisV)E'(=?h$wA8mfE+KF]4ăU"r1H3+E0j6KbLEo/:p#oav;0_ShT3gc4w7eQLA?eFwnMxWxgrA37OT47ruYx,dYpăU"]V:\g&9zj#yZ,tBZdvw/tQjtK]#9c(F*=#u^PZs))#kLsX?nLC6[ra+dtiGHX]EăU"aVj/TuSXP2UTmVX*(f9.gl8TePt]<P[VE?>d^uI(Wi%$.iYGY2mVw<=3L%XYN5QăU"k\rL8\dp8Bo0t'Sc?52\XfhN+E?1A]a<i9vE%)lrRISubB/84HggPj,$:aiCLjXăU"2Ze'ZULVCCY'DutOL_lRc28_LLc)>4-%%(sD4fsoD4(i)*-QOK;vIvlrR3s27c3ăU"OIjywA^)K/2ekHubg<O$f^V%Wffp5ONeie4,Jt=)4,]8Z(HITOQE08$bH4q5V&.ăU"mR\EL5%FkFhrgD(0mgP6Pq7>(0w2MVcK7wQ+rYBo3%Bw'KgCPuo%W)E4^laB47JăU"[^^46\mRmx?AVucicL>j=Fg/.=0&%yxKwGnv2R*j^RVua_1?:dR5f+Ks5CJd>S/ăU"G;kI\aggjT?/m\pdgrc?CPN(g*Z<NJ=\XI*bjA*;r1Xt9&(&a>dcqnjnAV)=Ft<ăU"7z*&b*kkft*M_vd3:e>c-5+7E5bTqhIX^-7\lw4ib16E,Zm'e#XQ4g1f/>PsIYsăU"P6?TVNzTk6E3d=DUl&\q>Zb,vhEr/'G2+oqNcXzw+;/+MJ#KcX4do(rN;t%jIU3ăU">:m,FAH;D5#\GK]cs7K,57+Eu98rdMdd#sjUKeC6K,7>0luW>i+mdQ2TG2(4d]FăU"1*jLC1RFl3KN\?lQ(bE7mpb%<f2ggW\gc8aTC86K,t3^9$8t#TzYzX(x^q(QU)năU":EL=GrSN:0(tM5me)d>c<)$;Xhh6Rqm9U$S^v7dVLQ9C7]*7;k+89=*ZODmm]]SăU"d9kjB(\f6=bopQ$W3S<YF7[c00C3(mOqdJNP[kTYJLV*I<BzfcYt0u9_<U)ac'wăU"efcG_gBFoB\jNayAmZP66WDx1Yd5/_znD3A_j2\KC1E2*^a:NS)LB$UVh$>+EM/ăU"wr+RSFLXCPb'VhQgf4x\Jq_8n=9#T_]Je8egc]8:Crc0qZ4]G+ZnFYs:/8]]j&AăU"hi;%Ml7uL5fM6s8RXsmeUFnlmwMq14d#65CJ2<443dg0$DK>'54c-qMksr]U_/EăU"C(xsUa':knC#mqjrV4A0QDQC<5oiA2_&c6IpyN14[\2sinpIk1l^R_6Lc#nR^i7ăU"^%K&fYlZWgJb?pk*Rmw/(VD'i.#mT(_>rv35GlrPjPl2OdMk^Y*#R$/DVsc*N/<ăU"Cw<49gRFPNq6uvalXma&d'j=jEV+Z#3]Ma,i/;,LNaS5Gmm*m2^w/vOld\?f)1QăU"u7GfVZC41G6va>56p+8YDRw<Pa1Mk\>ZnS-:_Pk<7XJFsM^Cnn+ZxRHA?i#Tbp^ăU"?Fs46VK.1]-R^D&6Tc>pUirv37]]]I\)pKsPYg84#X%f=>DrtTw[y.r*uT9uUu[ăU"f4^3.mQ\bx3JJ&e^B]rX^[_<-m1?VrK^%3i88nj_A$qW%n$H7/XnpjJiArZ8)N)ăU"_TkR&7#4VT-km6F9B?G<$PNr7oa0:eEeFhE0ass3%RG88hPnIA%bK<6ppCi9fWyăU"FWOJR-q9&)6-BMdDULZMG:MJ448'94kH6/^__#gUltPgLa\KYwPJrm*Rie;lc_căU"=i_rumVA1LSj1h=C\hUl<ZGqGk94Q<#H6=Dax+%(CmhP6P'O&^('%c$E&A^*6PqăU"w%Mi,vAQK+#4zV(dQ6+A=_*'45BCG[S#uF/ir[M]Z':jFT5VR:+o(NO0/ynSgWMăU"cqaHr;EMhMzHaa/(,l^zu4/3dCF)W\tKm4Q^]A6GA:w?n<POQd/&ob\[Z:6.K22ăU"W31gK=dC0wpxDhiXCrLIY3w=M%YRJoicX6.<ty8TJ0R?hu1K46M',2ub.AUa3UvăU"aRtIEu426]JoCbVjB\-cH[GF3a[gBjX46qR?2^t$apPDHGg0Xlu4/5e#dX_4hKiăU"oLOkV,m\A'qq;>/Azl:)=MGac>7cTTA\_4MH\<ar6APM'skAH(ABU_CF4aeXhq=ăU"N/b-]9ls:Y)Tq9TG_;gE;-QXQN(a;z:67mUY;VI?hQd^/,#lHj_PRtd3fvcXkGLăU"j&;UY3OqkI&NH4W)K$kUpAjX2B\Bk/&4$Wapr5qB,ZP/g<bB=wNZ39'pv]%&$CLăU"6[TC7NI#mRCFSN\LtRy?A;Rv:&.BE<ApLU6,A<IVLAD11D_]>)F[kbXUnGPh(^QăU"BJAT$^QivHfbg_&%VTRdwkUs=]8tNANV4(_[jA?.Y?[d/]XrlMDI9P1:=hcR3X/ăU"ndT-l-S'ML0t,bNJM$=8+/OsaR00]TdbT:'C%-eaU51+,sL5o8-Zk:CVZi]K%]DăU"Ek#j8t'TNC1sFSDqTf?dSHLa8]KFzIwIJSx/B?+RoooqUNjvt&FMR_h+IgSmV%yăU"Iq_Y&D+1\H=mKmhctn6d;s\>54#83f\YFRJ0lg#&>g1CG-0&_[K6A#w[\EV8eT9ăU"5F%EvIQGtOFk^+b?jS[\R#JSd2Xtu5'KQ0I<pH1#S0+P>Dm+Vj<E[h?kZ2J[C3SăU"2HX=EDRXLj-ojTMv(#XmM[]B#,=0whZ=:M]tmO+P?1O#^Jy+'+o/0L6asO++b-,ăU"9+V#t_PR]gxniWB3[i9X(ra>Ve=mf([rtPOSc)P>V>N(s:lD4*S:AZban)*uN,AăU"0)wngrLR1\ZlJutdKqqf8_g:N1qp^B]QE)8^g\\K2A\+cvV[K8VTAilpukVw&BLăU"a=:N3'uf0ajvjStI(^Fe;+m0I\U8iQ[VWA\vj[nK/%ltRKIPb?$V)i0VU)fWnr,ăU"KW]z?GGXd$_<9+;rH+ts]fOTW>\-J\cSuO0ss?aVgE:[bFw_o1lg.$(4&354us<ăU"3In^r7MH.iVx)iY;6jG?:tftfwOmP(c3bb,r;J^zHWE6)CS:i/f-ZAH;ibKaj.TăU"GT7+CM2(Xt[J2MNp0ZU:?(t_/*_74nzP<PH+fik.g?(X=in<MuC$l'$j>*ELKqKăU"7;ggf$#801jP#[I2W?QTChdtF6eIk-0,%8^-KgnLK,ql##>r\<8Vcqs8%a-/s08ăU"-RhD'\t/s2C$sSBafydWz4([5Rh4Q>7FI+2-Lu8yU8hHMswC\%=]\VArbp/w$/$ăU"jm%;Bqc$u0D\Kt0n>LluX>0Y>Q&W<,6Y.CoJdg\5>EPnHoj6'[Z)?lHq#OPD5mVăU"nD3I2gq]NFk9=MX\VWs6dLt55XvuB'p8qH>qN>z(&2tf3sx$cIBwuxdxdb:#b$+ăU"LH2knl4Xxh>=(usKvx(Hx(4-gdG^vAt>tE57hktqa2TIlIHO/lk^iL,.7\$-_H3ăU"h%OP?H<\[Wut-2W(b^MfdqIm\*4DVBCsZ(LG:sfAvL4X^Y3/r5Pco$g'MgFMGToăU"P(>kBjO3=y7B1>jAVwlJnMvQ4\XB/Ts,lPaj+4dN4#Dq3zk)9#PqtG=,'kGs)IzăU"5xSI99bJVpuPSZZ**NcaCW#3JPbFVhCh+S<NB-i25d<<LuGWD)n2ZxnQ><b?f41ăU"h#OdU,M<35%h<L]5[0W4.=,gIvV[oCqg^)P9;eY]A+FOc]VT68,##U_yI-cauB#ăU"xL$JWTpIC.*^sEt2,E.,Mv<3LlR8UR&7)B)TAix]&8)BOf29d)mmfEq?u_H]$wzăU")b.>_*>+H6iF;&9uU>>&.Wxx<C1^iyL&8)+t.y#YTN-p%4B4BK^XXhRM&.TymlGăU"#U&C\hQE%N>u5Gj;6-=DsJ<jL#_Fn([-'Trj%$<J\^]T#ou;/Yin6)s$RCk:F17ăU"A(><kA*D=dW&H]1;Bz,H5Nm^4\[4<[%_W.maifA/CiU:EQhqq][h;phX(._hhI:ăU"AZG^*u-IZxJb3wIs[>iwFoaWXduoGw5Q#M#OcST=m].br$KfAXn*)GSX<tsNSXlăU"+rM3Y);-rB,Sq_^.F+tGps8d64s.KV56rWND,\pV&JH[sK.Trl\Su5C6[iEU2Q>ăU"bOs2[8$?*5cGWn0w\z8kx%MVyHZ1\:B^PTJJ&w0bgo;rwMtl1HLoid;UpUXC5QgăU"XH.ZZeW?gsHD_UQAJ-NX.^SSaQc.[QqSm:4Np8>T>2U%MHgP3)ARL5S>UQs(JUkăU"nZaM&aXnV8]a:Y?nxbNfj)Ortl#lUV\oKJrUTNn\SXkYptVS$KXjU;QSGOmo1]AăU"s4S:%na_.TEG$05[0Q*jbtH]s&h:_^lj<vZ\-XFNhNk5=j<iE*l]>2*]<Hme/G#ăU"<>9r6rY[cr#Fh25GqO8D0m0jWCiXLf+\Y:d1=/t4<c.So0&YnZtoG^7*-ZV4A09ăU"7usH;mp9,wP-3?A#r<yHQerZ>KDraCsMgcIbK0B/];a1n;Kt>:wXWxkd&Bhhm8=ăU"0ChB4ZDUW_(8):gELYpd>T/'x1KSIns.iXaF9,:e]E_L(RgHa%&4cFD/]>>T7HAăU"D)i?D?u9N?%#TT\;MPfO5/j]t9Bv_Zl-NGjPZG=-Nn's?SEIed.twx0_uN=To<xăU"ikJ^d#M4Yd^w1t1b*i_^G%GYAhsrQo$C1kBUr/KbbBq*l08F^;rJoDrdtHd*)yFăU"/Qd[rvj#t=wX10dvAj,->g>o5vX#th\4mYQ8A3rQe^Ln?XdK'&^x(f16JqRW0f7ăU"/-sd#^6FF/vgcfx75Mtxve6yUN#rn.xl;29Nn5U='iDe:2mhrd/6tqhn$MbWoI6ăU"fDl+b>,MadbD/=w-v0c]X<*6x8TFB3akfr+aEh)VUK>#[Zt*;A]0s$#VsM8/ubUăU"U3__-eS\H:C-$^3XV-TdVlxPF?Wh0KFkvkDR$R1JOG]_80=l<aSOj[3hH8NY4gqăU"*&o#d]vHeT$>s6bc(l#\0_:#XUk)APaa?T;oT&8Wcm7JA>/4vaNAu\ab5F_h/##ăU"o3B[8mxR.MXx:q=\VSX.CWO'_=iv)%#>$'ZWk3TZUK-.Nl^&r>MTg,h.,?Zc$U>ăU"HmjSf[mA#R;;ME?O>a0;6jR&mJ:1H>YjV=]bLD]^;jEiRRHJ)ZPt42\OpGPKI>6ăU"L>%_k+FCo_oX+bUp<7?-(B;Lobg1Jd]Vmn=5M8#7KY_\t7lvR#xitgD4YlBA.jzăU"ARJltY489cT:o,xD$wWv$<T(pqPieHpwYv\Aq_S>Bf>4j.VE<6S(msVgt;OxmYWăU"cE(1dAx_$0,lGTXwVYV*F5NCfb4bXSj^tAb>_,&)b$$a2=nunEQ]u_)VKZ;w-w,ăU"_dHd0C9)*PSqBZkA\c;E/cYU^*0HD]lcKpM.#UmZu9BH.^4br]TuT;;pDuRPiYLăU"df5guvX.1uDqN+GP[F$,Gdjq0EjDF5,Hv^(1S8O0so?zZ12dTb=YP2??t6O6I+găU"b+?]9=27V=&os,M1Vd9gFPP4iKy]K[g(b:kK->F[LfB8(y%4nctjR5rFj+3gwwKăU"OT3dED>%w1#;'n:R5j2\Km'(,Js&ijqooWB#xayNP%(=d8KCJ54oMGmt'nl0NxuăU"rTE17VjkSx-o$/VXMb7La#q\S0693F0Y*$nDrFrhJ/f3Ko[_:vv*FNK>nn7+wl,ăU"T,<U0d^WZ5;hY4MhGLNf6aRfqV8lChals(dWZY5%.Q'84GJu4W4tUeGQstqEYaTăU"7?/YN/WjuIh)=jo^iZM>8t$b(#&A'OEb=h+kUa;f>4+\b0>g_1126ufv_c5q)IEăU"f32PkPG?NhvHBlDWWr8C1l%aLLbkGhaqRPHxSHtT#c_nNyHt:XgO6;n*Gcu%aP>ăU"YZQmH<OA1L(t+i<>3R2RMDD$67LUngJ,$JtF<hGVcF:96>HT:cLa>JG$O$PFBXeăU"p:Tlf(wCQs078j=Gisn7malJ>ve5>;SElnIrvEZ.YJDa%991w0,u0DgN/bMxDaEăU">edUgCy[8_QECauEf[Na*E.kjl+)q]4kl*mZI<7-4uMNgbQLIFbk>Mj>o\\2K\SăU"L?Kik%*3XMgf,]:p?hD)wI](190GnXgI>$Vehz1OH8M:>%jxdh8Q*R#\iX7)Y%5ăU"ezz?-(()lbSWiHL-yW$)es*'\x*JFv'$qmcmboYU3f6DQ.R16t327_96MfoV4e(ăU")V0)UXo_)NZqVx?<2WGV4SqO)6[w0I-1rJ]si<:wVQW%42[IfUr>z_8'3%zq:b]ăU"'(KI^Y+U/sDg]ptyoO5eV.Kmo%Dd#p_$e>4LIijBymPH*#1m9+air*M+1jURk<HăU"\QeBN?v&JS:91Om?X*_ov8vmu;pnJLE;ykowYF9$$1yo%^p<Yqea]'Xyi=xQ^NgăU"4$R5+FO7iR%YK]ND*m3vs,29ErWtNtvTZCWgTl+Ie<32kyJI(Y#Hs[JPHu-Q;UbăU"YWN>whb43D'ca?P:7?hEJ^<GsQn7sM9CQHLD$XpGb/#V_rFj-W,u-EMmWKqM;Q_ăU"q$WITEc6L52LMZ=052=[QUTXD$tP8_mm8>w\&y>kZKh%5_$MY5AKtKZZfKFbG=FăU"\+bqsjjRb#:'t]hPO6%mt_b;)Sgrhr6t8P;II-+\Go1=>UqFRMXg2b_0U8;7b[LăU"khJ][[R6S3u>Z:SP)sTui9PF0dNG:YBXVD7/hVgWXR$fN\K&F>_hd-AJ^G=,IW?ăU"5Md90B/eP&<M=&MB3RUbxK<L9h4KTUk7ISDw1TOXq[cA88O-QqKaD5-h(mJ3qCDăU"4[Ap8YJjNThFCp\cgbuPUDE5HT:CluBsGA44;_G:5,52'rJaaIOG[=Z5.'5EQneăU"jcQ1Y$taZsN*hQYZm]JF2XL8J9XGawSTB-M5rxg9SrxA95$CsIY6opkg\<%[d1YăU"B_fv8L]-t#*4ClHYtSuDQ)BV/YV<5>]J^ECysq6HxLpLM8/E>5dWHuuYym/dJgiăU"R^QBs7\r>6wn+k7d(b_4_hA2D:'cT$ZTF6B&74AOT*;f24rEYbZ=q]gtVn;ms=5ăU",\Jdq<#'tMFrCG1\PLXPpQ+dof]pU5<bA41*RNTdEcoG7,9lQSbrTYY)kp6%:<hăU"\qr/r,b80Q3^CKvm.XeK9'Rhn-O56i+ge<\q2aWLG2BJB*<;W5tW1'^?1M*;K0măU"AF.>v5Z:C:8f4Jk;N)8<HA*k,&0tiZd5QBa?=Q$6qX.4rLi2zQ>6&Borwb_NeAvăU"-rYun*vgD-/nj)n(mg8LSue4J:l:>;sYRYplIZ9v96H'*WkZLSwI\tn[YRizLrtăU"us57%b2^,Ha6unFPtX<2s\Jg/cT.fVi-r*J_>P6X\MYI2=oYz$3Ls]>wc%Nak0EăU"fNn[f%)SqS>bL/wse6uW9/tm>Q>/Qm/p>m+%ruf=nAaDw\/V\o4&E05+pX'FZ?3ăU"0?]5Ot7Mop*lw4.kflr+q_NqboQO#rOm8sz6:XbmtGBgyUVMS>XJvD$)zB?3p<AăU"1d4ytdVKDSKtw&O3/,;aVk1.4Df91R6)SN(m*cp0U_yqG>k?xHf3H.RYq#w0*E:ăU"6V>w)8^*Smw\eL,k+99)I;_=NX]m<wpXq(ShV;O]\TrLvML%gNqCc*5h'Hm]][aăU"b=H#(rJ]v9hIiBDE)[Gh)eDx+,qrOjh;1^^+BCK-vb^b4:H*?^2;bc)HN,o7<(_ăU"CYawnG:4HR%V_af,S=<^O_=j/1qz=qCtLG)C.FrAXAeWBI>\*Nb:EE6Uh;5S;t%ăU"SgtasTNNI5J2FAp/t,gkIwC0B\=CO_5?nHCXbs/UOpN:/?O22oHAid?'JeT*f0LăU"U#P&DqUuC)-eou=]3lJhC\I(Ls;Yb$7tGT>'K>Q-8c:bs2gg?.fp=8xL=r&E)a6ăU"5OCY3U&o2^=cN*91YZ3xC\up4TY8(Zjit'_4cr+m\6fhLWEph,<SNKdMQQlvE%_ăU"+7Ec$XJ0eo<dufjN1$M3;vMS[4N,se5q8ZpmV.IJDa%1/+wznn\c#Q9'hcS?.6-ăU"ItTi;<oU/?44:%Ux42b?Q071(+lNIaIo4D1f,utUr,qf)05oQ3Sk/nHe1xpnkl*ăU"l$a[_%XT?x,Lud6CIMj<=liXKvn5=xErJsVrGL<R+W2%2d0hl1*24oQmPFWAXw2ăU"o<hmK)psYuui2nv0i*jG)mb>w32(jcfkohKmrro2:b?-^P*fMppeuxPlm].-E/SăU"rUdJm0w<bHVpHK+jpYXv7*ZZ*h/hOW9x;qwYU[$FxB,F,k=(kIGl:h#eec4:mpoăU"D:O3[\vILf8C>>1+,G_/jnpW)2pZxQP,gi0a[?)2jt27$N_)H0]4oyff>?Y-iZ.ăU"('QU.b(%&qhH+[^[q?++:HmsY4Bdt$Y3#46ghC&;6k'0^kt]2dgYV3?pN?I9Sc^ăU"qriWQn#]l%13]q(-RuY(gShcXb]e2oWXDLX-MA8Z([7$x%XDZb1e<Bqr[gAiCUkăU"jT59sStp3[6re%IHZ$?F83Sds=;6MF*Wv)r,f$bQDMA6j1dCn\hH<jJ/nH*>^0eăU"ucLLD3,EYMUgiC2,4[xt$3NoQQTm-Fl,/Ww$xJQ]OC/ZLaVVt)?chXHJOltxK>dăU"6>U-X+_E2?\XS(sV,]kt1kLA60v6thLh48AcNxa3fLn%c/2rG.[^Q8oD-q+.NiyăU"HG+hH3-\UCOs#Sf)0ptXZ?_xI*lmd\lm'oLoJ9jE\,UP<HiLt5WA?84bl1hY*9băU"m8frxXfqo;_i*Ibna.dy?4r89L9]S9[.kc59.xr+==.m;gL8T7(WYll.o[K;\9găU"P^1o^6d]*YSnP($R*X^[U=%.;C6#PUa?krm=*Ph19;=.BTZI9t8WyRb[,tED**?ăU"=EUFA1xFw'Vb<Uj.,YEPn3D+:_XI^]zJml$(E$txqx;Ith,'CYixhb:w*E#FMECăU"afQ.IJ\-%an4^tuaTa,A.E=ddoqfnN7O%jI;sVgVMLe.?#m]8jP&ccd\Ivo*(.-ăU"\?C/R4k)-C&VgCLi4c*GO$v\vhKMJs=k=e$'#-K*tNFZr[POHgb8_hCCfooV>pxăU"$5e(?6s[Jyf(:VD3*z^Y.9_i6\ETQ5>?lAH[+.Vp6UfgwLNm^g[K[3C;NFH4pFSăU"j&USZR=X]1\nTR6%Lne_1\2GVJ>F6]^J]#WJ[NdU=AJ0>%1_,d_ThNKr[LEv#QrăU"1_MG0q-6#u]qWgM_M&%s6qgUBrf[bI]l2UY0(l\)[.e^aYSNg><2Y:hX%A?:[yYăU"VBw]q&D][L[h[fsCM[ktJu%mpE*P6Zq>5o./z;]ib.>p=bo;/[cYH0O'lN)Zb0$ăU"K50ae(OhwpkpojjA6j#l70;6hTDT:3F\lj:1XeaHdobk>%+A],2:]TP:3XuEKCMăU";y%cn\vnj/wK/Ssp7;jqphgn3R4G7Tr=XoxXvdp*GFE>fun:53Gg'fvQ+U23m.>ăU"dgWeLts/rGMFtVoo%J-\HNPRm]RrIVC)(1(DqC$L*nT,^YmQc]8<XFXP=sX;nQ[ăU"/PCkL^t97bSFiNvCblla2*K#p2-u7TU(&g<eNZlC.GF(5JPYGC5?X[liA<t]JUbăU"81f]Td\$$^jd9rZQ7-GVvRfV'75q>t.*GvYAL];?sPxDEkQvO)[R>>&3a%NS\0LăU"),i>/tY2[Ok2(/*d_YVvM&Y<gN?U'0JS,XJUr50sPjZ2Yjlw&Ni(?)-r]jf*j-BăU"]9*inI25mK2,:;Wj2]0e^j)JuQkDica;1I?eJ_DPF#Ce2aop(]6d07_XJU3L08tăU"q5<36FaTq7nyJh+Nd0PCp<xn<VD]LD7)mHmt]VP<;?hu(qH0Kdj]]?06SNwCD:răU"mxS#6GHF=iK.E^^(n.)4*SOqTv&*4#U(We$Bl3g_<\CMkT<to\NFTbuqfO-UX?căU"C]n*\cW[;Bf-7l9qERMAH:&9](VZ4%e7c6ESR&GGvreqS.nj[jxE/6S=tK.B<L/ăU"mEijaku+T__=re:G#2ckj)R4qk;FnV]FF;o[:VA)oowtk;804AL3,yhwLV;ib]0ăU"=2)Dxx7VHRrjBe'Scp';M?T]2f0LYM5GHOq=W)+Hlg&sms<F^$yO.uH]FOMZs.NăU"QkmL-<D]xPbJhDV<ODX.<WJj%e-ecm]i)OI+4T4t,^cHri4_r1-+dY<<YrkmRPNăU"A_M-(#)Cu$x(1n)4LLrl=6&L&fWHAA.Wpu(#fIqeiA=M?GOu'VjGHBee[?SAWYjăU"P4%?DjC_ArKCUR]gk^TlVnC\87dX,mwG9mrEh8oKe^rbBQG2+kKhLptMhptErMcăU".li)Sq-)5MeV$2M1c..JTn^A]O>i/Z%rt<?(X9eh,>4ovMZ27JkrtOa:/g##&,eăU"&VLJm3z<EH;_KU^nZ?agJvoL0'vGRlkEa_MlhH.B:;HP*/H/Zlw-LaE9l*Cq_pgăU"6ANE*pRA+GrNUEhNLTXy$.=D($:*U(Y9bPxR>&4=?aFtC9*diFV=b4^,udkF=^kăU"]6JdH>gBbCL\pGj3.a;e\+A:,HsR3G8i.fGBTtkh1vCLO+uVXA/labj?>4L+[pDăU"Aa5]ogGWm./'f-T)ocLWrwV5[A27/#7M:weL'Ne1_3d]N#5uO5#G]<oQTZXCGVyăU"ffpTkwin_-TkKD:UbjSZdo+uP4YE7u_C30us$uIH4X(81Q:*\)b*K4&7$ZYfwUoăU"uex:IssnI>_v>0pM%k)3ono4Z5=p/VFc2mh4+8H=sr'jTcN0Qe,>dK-/o&not&EăU"u+]?aOH.o&GTW_-'7/3yQcWmdt[&vrA9vE;f3Fi[3sDIC&(Kkt/Q3+6Qr)rw\$*ăU".A;sm?Whs2FXu..sWBA]3VL4c>,<8']$JyYQZSL,FFTUiI^;6cGCXt=,yB5gZ3\ăU"%Gb7K$rY0<Kt[D/\&%lYlFYx,]r/r%6FoTX2qb>L7MfNW's]fPo-C(tB<l1pn'AăU"&N/z\Y4-^)U::CapV#EKB#_kxS5nK3vE+O)h5.8M*tBHgDTcj?en:hS&iVGCp-=ăU"KH+7bub>Av#6z:63*:UX<sIDjoxj-/),g<QEC;5r_q6Z6Yf<JWmSDOL3>57c,2BăEND SUBăSUB V8ăU">IpAjmQLcbUuy):<+<v[gKOUbf1uM2?9okdbow)thrH?QR)#u?55wKcZeXJyapkăU"k[u,ZXon>*ZWA(9'IVx]twp6Aqb8p(P^uH(x#mP89M\YGcmYVT*;<;7>=:Y.(ADăU"2d,jZmpJ[FO4aBT-)r?($-<KsXZs*?fM7-GNHRDt>Sb,:$6kKdDS,7TjgxTEl2GăU"K]U*oeiM1\n,hd.2Mc5oWqE%:&jaC=4pWm[2HKN>fNF&OOPN\5MMUK'U11B?:>3ăU"Sl2]cgJ;n-2fn[Ci?Ibjp9QRLGPNSYPp7WS5,DVuuXkfUP>CG$Vqylu]Hs9T.>WăU"1_=n=rfbV:cSr/;:2w:UQboqZW95)n%2vsh1MRK36a,#X\+Y7/f2$CI17IUlg?DăU";-U=4.:aLD.5OG0Vr7=NW2K?DA$QJvvIppfQMBbinH3P=Cvgp\kDMSr&=i^VPXCăU"G\TpZ1M/n4xZt.)w(rqr)\usJTPTpk2KMMME[L/5&2fwoFZWKLv*^VZHpIpjw7%ăU"?e-6hU?Sj/\Fmi0%LSlj^\rg;:;M5DN=[EWJ]g:bb9V\LlL^ZI?A$1qnC/+(t3<ăU"M_/%$DU6)j+)y--%,\i,F/X3:3m*hDE#Hu]N+RkJldxpiM$P[Br&-U>z_B_qVncăU"Z9,'-,z<NqdqA\a<dCWiLJBpKF,cl%po4qFAM'Q6K>hBf?f-OZe*LKA%'$+I13băU"E#,0O'bsab<#LBHv(_8O<L9E\P/9$x2g8lcU7?^%fyTt:TFc:ge<#9nI%OyR,,căU"XwNGVjg6Wk?W6_K;sF:$S.xR2<gC^9)&D<mo_3g;FX/To9E*2LgcX\#XVV#Mw#KăU".YSeD'$Shneg9,;$TM?vFMC8bYrFU1/);mMhH3dXHPuv0sZa9R0.xO/dbjQR)k^ăU"D9*6AqX1(Cdr2Lo%-+h3h.ku;rvIcjt0BD+wa80l,nyAk=Px^?-cja%4evU.o(FăU"2=zk$?IU)n[E(SWL=>Kq2/+9uW=Jp8PeTos[$-%I&-$Cbq.ROHoafUnTe%dQGLJăU"qaO>h1-Lug4X5X#>_.p%)R<K&(V&K7A92ueDtWt?Z4jndvAnQ8s,;pMVTQ?N,5năU"$j1h6F'',Z<7l>#g?RZVlu7siTS:Xf0/'%9RUqhKd,o75#X2L9AcDn[LxOjSUmvăU"yW2G\D*55p$=jw?=4Z]Fo[r#v*uROk>m32LSny#1l2pVv1+)ozD38y[7Z\*VhgBăU"v%O9^G'r[bx/DU.=Ib8[.P\h(MKf8LsZ5[B4r<RkLMmO\XSLhUd&;jOgNp16<>wăU"h*Dz->/+[f[tA0F]JE<r;Unh;uN/d<aeOF;]w)nkPvvvMY\G#w(d2/d&)iN<>gLăU"c'1.5d+9#%n8_,[i6HKHl-29^EF15p/-\K0kl;4bsCT+TbEs#2LO'#SE%FS&1fVăU"'3N7Sy7[j\1u?6<(j14ng$'O#3]C]/U(8Mga_RV20NQvRK38<,iIjMNlEJTnt4.ăU"TZw%makfbVR*h?RgunZSREWGIi,9fUuGKdYl44ZR*SF+Z1bD9P+bL&(IId4YMRxăU"J;UI1WA(Ur051i;i<,;^m(KXmI=?e6y)v+9o*XaS.Va*.ENaQekYsR%9&$ORj5găU"*jyd'SzD+uRBjN%-XK9_H:>g)Fov.I=s6h0_3n$eHiRT*5E[RkGz,1l9?vMP=<_ăU"Vp]mh2%DVt?a9037R&Th9CI%Qrm_T;4n:LgiulIx0kkrAL^o.F,YB+:9KjQ:5<jăU"+%+em$(wQ\/)'f>It[ZDs88TF2l:6i#2J7)L4g.6#kF?S]v^NiU^)_2Ab-_$xcKăU"R\5PdNpOUE5kw(cE?]Sj[;U\BF].-UXaj?Lx$$<mRZ6c>HpMI?eP4asv0Vrp'p_ăU"hZ[D'3a-O0ph4W4*$#o9FCOP<v-')7k*=khm5Vro>:7/H,1zI<aQ7R3A=BMHiqTăU"[RATrnO<bv#4o5#)HF4(LlPD9R?2CB/avl]7$622Ej;o%RXsO^n4%6i*3.I4NFtăU"NYYL;lEZvFO?0lI,KV]eQa7mzP17Kgp<2m/r5oOD'wF/R\FhICBBblFrF(JGawAăU"d)o65a5hxEn%$0ph%wa7n&X:-a.*gCCm37aY=-Fa\'GTEwk_&.=>&jF4_M;*W2xăU"XS-[qO10i[9Jp#q/X[G%/U[#G?0T'7'1XxeGe(Wp&pk^sgc4(qqDZr5zUo=mfdDăU"DxGGe%q9oG96LsQLP,EK>hc)SKzG2gh8ld4%)Z>GIs>#K*w**,Ns6A&O:sW/4^8ăU"?HDTJDD6z&'H%cOtZK)0t1GBL.Uiu;bsT[WloDkg0YWSF/9TZ<Nq&MdueD^cULMăU"Cx7(-d4Ao2_8-*^)-jY)<c<\iof.WB(qJO#l*F,h?s<V\,vFyF?q+vuI^Ko9q59ăU"go2Zk.K=.oYVNET$?s9Z5qcntTW:Qc0hO4Ji5P;k:x8'k3LcLrTsHV?3\8HQtMHăU"Nq%;10BOY\?**N5La\d</=?B?KY00CnMrfg#IK=EBth./B[U?L2JM'i<m%3e4r8ăU"RJ$(w$]-GzoSrM']\5ISKJj\E::PH66G4pY*sd1-J%hdB[2d+Z\vV,mi)IQC2WYăU"hI1#Ha:Q<HpTi_HCaM/C?DL+O8YZoRlDB;CU=bN3NqK\M,3,^m\]gsU,iv,0<bzăU"VI6Nvw*lU_^<Q7>Qg*phh%$,H\i6Qax60b3RgZWD+5Dzmutf(Q_wXy4wn66Q7Z%ăU"ah5rKB;2&Qx>dXh#m'e6',/SeR$+^jWU4<XE?W0,icEpT6;s$GIUY+eBO8/djTYăU"MMyH8f8HC53oW\KQ4&t[jK>L\56g0KT$7tGEX0_%*rAGGOTquh&sp&$dS.X2nJPăU"sHhN&2nUF4?A/X0I(>osD:7<H[E/^L,*hT>_B\Hv0GuIpyKl.p>UANj)lop7=U;ăU"AGPjta#g9qa3&DGplgr)CDpc7LqXX#Qax(.;Oqd0#Z23z-kU&XknLPK^RaXWLwEăU"aak's<*A==SeDHNC:IZaq>ov,Q0JW$r;W#B;7UU<GIGAQcjnZ>D^QYV0*1V9''1ăU"K3^jS.WP]8e9a$79M6Y#x]I;Fl]\wB37DJTGY\U?VuTIBCOL]Ete;B;B$>E5O1eăU"1<]u,6W$wSp-x$D4h^Usrd[g1J$hL8otl<h%Xx_G6u[n&4S^D,(?.5\v>eiuf.9ăU",*-\#C*/ZJ9Hs]O3l7='=_au.EE,)?p\ds)t57t$s>Ekj'Ek:6eNh(85r03xX1OăU"MWNM&TDDdP4HA\$lmxcp0Kbg85gh%R#kkCW9vbePi>#FMh_m%VZBBM+=:[&gl5iăU"_iEl90:$&.BxOse$<WFxAlLo8e$m8PcURr\pDI-qrL_EqUR6D:xu0TX.;,A/wtBăU"T(%%e_4I&_F=q+sKlDfV^R;FTuDO#W)?<tcQu[GX,ddZtY;0e%aDR3hjLACQ^*&ăU"qXkE>tkF[z&/7UM18Fy&bm\WLM?hCMY8.02T;=$'\_w(oUm2w?GcVXb;1Wh[6myăU"9U3JY3RnSs<^Y[JEJ%S$0'3/3,xrFYi,dJ_,hTOEil:u)(((<P8Ee=M:^--9\oKăU"qm3'dp9tS<>%OHb>4NQT-I<H;hyW_tGs<iK0lZIq?<g2mdo^S5spom[McjX=MQ:ăU"wKgzqC)'K04ufeTwk^uDjLG&7^K<5tPLrtUVCN:[&kb]pXt&RtLeC0Hrj\\$uNYăU"K-S7K:Q%jN\*t-/T'1x*RytC';G4t9uX+TjceMJloX./Z$e'F:np=A=(ebginjzăU"QH&u_Fsu/Z[LPp3YF)=)Iq_GSKmu0:7:.6MNJKS=YSRhGbI[of8Q:&Imi#r9BI]ăU"z:\30L,DXqctYBeX(>JOzA),\s\\:.<'$#Hm_2(IBWz?LSB<q2;s1JRgZP9aSm,ăU"N\ni.(\mr'51SQY$X\*s]NRrQ)fw$4=4F$ta<=ux7Yp1>C\.C#kMBXlD(2sT5>FăU")hMlXMGM,9\*CgY]j=Q[i2^t+LtH?_BFIn9]zNrY.LUY=_s?\q.b+54mH$6a/TkăU"6PTo1m2SUeAuTK%FfAy_rM')rHFlGH:PP;-al+'Ul%hX>A\O]hq.J+>HjuonN^OăU"_8)gp7\pTb:_b_[ha0QV>>%mxb>MWCfnl#M57t?e0l?ow695Rioh$61wCONfT%BăU"-_gmn5jiVg+SNoBt/M8/1orr+K+t4ucfFRe+)?>9UE;S9qoAmX8m'F]Ir^Q7SMDăU"Z-mikRUXY&Jy\[j8ULwZAh\Bckbvw7Ri8Ja3cJ(9dPw>$DkJE(L<=Cu:xlov*//ăU"mMkuaHY_8t5s984oNg4I3p_Et1xTuk47,w1^0?a.GHT6O3YSe?J]Xka]-4E;P%0ăU"TEWMcrBJsXaKx>06-n]br[Nr\3.m-=^F35XL?kK7-XjzQdr9BPo\P?[>^+p&Q1,ăU"ZQAOKhTq^RfTK:LI?6H2+u(]v.Fc&[mW,z?XE+HiIb\OQr=Let0FBo>p5JJ)ftiăU">;VjN?xSZoZJs;0e\5'%:KH_\#l4*S?Us],Ic\$%sTYFaA35[)$fgajTKbFjGK^ăU"C'a1o-P8WftME%GL#HlNrx;M7mE#L<ue(8#oulL^oqo5+9:s6c?OZvy=6g>E[q+ăU"fJLmCXu9j[R\hVWDcrY1iYTB%Md5,/9'-u;p5PTtf%fWA23iNV<Fc\V]GS\1=WiăU"iu=df8J%ehb5k$bujV58Gn)H;hh+*4[8k,pT?nVh^sw$Wh)t;[Otw#Vai9$t:KsăU"F,+<ddaWhU,:Ym+?f?n1_*njwQ=_V%c4P>9\u?ao[Bwt^<o\z3<87-w7Zo*vF+QăU"FS9>oP8g<50BO]v2$J;L6sq-f=*Pq$XAA<N92K,uEzQ9dhee5J'_<$F#h_i)l0XăU"YhOdqt&jKXmkV>'mYs_NgZt;7WDyS4OexJcDMNXS_V7Krno$PO&s*QA6A/7$=PSăU"HR?YioK94WG-fm[u&Eg#;G$62wDTc6U]ZRel8V6eV_NtNW)>&&^b0:nd=e]?WQ6ăU"?%#0A[<Lib3Xj+lh%9EjEQld:,gxo=)D4ptATFP5%ez1I6Yr>,]$HG%RmxP8fMqăU"e5ps6<h9,zoWRI/^eZBd<#q4(yXr,p-s0=%7VxvVnV6rxpc7?l$UJn9dkYuACMCăU"[I>j]XFZ=(rh55tRgVg3g)]lMM?we#G(Ct7.EUW%-nDHs<M,T2\+.GRao#]cL%tăU"gubwgqo&v++Kt/-L=yx)6f)6II\yUPNJDlVq=<OVo$r(7ZV-D.Bg'01tD?7&mThăU"/Cduzj;<rwT1L<?9BTdd;.lBRIM=M8*0a#Qnm?)QTn;%hrsGMNA#Iy<'F=qHCzQăU"[%([&]#JnA.gi<i?m7)0R*L#?<wtBbnsLEIs2v6Ah#<]UDOD=9QT*xLkAGD058EăU"YIzr>\=_&uA9ko1T=$9o0of#,<GC_\*;]$c(3,y$X1#&z,r]cL<n-WuqX6Ml>%AăU".)\s4tR[5#HsrXx&]2;K85Q-E9-YiRFQ[Yfa&3NX>&s[OL6+>LBSMf5Oc/A\g1TăU"#al>\2d?a?SKz.29_o2Fg^n[D:oU'L'LI78eg%1==$G#<a?8k\ZvL8nHrCdup3.ăU"uHZLxx[$vfdxODxXKu_C=AcQewq,Rqtd6+Dl(b;=TxlH(^(uwqQ8W=G\6,)5qKnăU">l=^S=&'/d:+,l2a&H[GLKbj_GXrZPC[-,><$4K?%+##g.Mr%9o=R,mD5WoGX*kăU"%i#[*t$tAOb%.Uh#oS=l$A:Qw,VQYC(+T$KgXFB(&nPtad%L9$<4:&WKA=bJEm,ăU"NNi&z6KSiQIG9]%,pH3vdS0NBfG;EVG+Pj\ACm>\j?8E\\kr=nU<6Mw=;=Sh9f[ăU"L(FXtrCEs9$e'(N-+k4xik5Dc6_.:Ih9_rQmPlj*qF-En%<7./*-r1qCf&+4$bdăU"4;(\Q(vfox\ur)Z[B#12z1Y:j<dS%J/p.Fc+FnEboG8B8vv&DFkT](yXJ\P4xqVăU"*DUq0CjF\K#lJf4D_T$M^&+picbwv<(Z;ZECPEn;6&sV1Aj,A(thJoFyef#_0yVăU"Q0xv+zDhGJ.9Ce5uifE6HVA,4OE4:l6#^+mRC(+3IE?d+1t^vX#6sDr^8hj7XGmăU")L<K,$8l4/EzDk2>=#n?tnfXNqn9kPN4R0r*^HOQ::_)v&?9ZuGpnP)c^u2nUKBăU"Xk>LV#.tMPfh7ZDgLrx]VO$T,AxLl/fYhWb?&u3&/z?+iJt/-gXp5plBP<<Z&4OăU";=hu&0_MR\a$6J2;+Y8j$S\6kwgQ:3nHR_fruM)fDOXo?t$8<gVwkuxEvM^NFM\ăU"M_Hl,uGq#7O(9$Y6mGI/B>(2YYN^KiZs.+.cIFG4s]bq-geYThfSKL)TGnftS#QăU"xrjb7Zj64%Bpe?%_p\O_FAZlO+\34\%so2=C0h<TJp\gPBkR/<%Sdk%H?;YOgp3ăU">IcY=wEVYIEcMf#aLhDEf^n[N$TTQb]>PjIX\a,H0:=?50xGB=HKzfs-ZfPDsI.ăU"_l4ZATZve8SQXqFc(5c+40A%>->_>32/'nll3bL*HbnEjKjoJATBeO^SGnNtFPMăU"2E\,=skIr7RImCSBxbG^ts6KNy)gjhjj5qt9sq.1DQRq<kyMM_&y?L8Kbpd8?4LăU"KJ;r=t=PrG'\9$&Kx?vnsd%dG:\02E'*&EDCC_?]2C]/u6KQ(:GUb$,=Z']XT?AăU"aLXui3S(W6=7,GFoobeKw^P5,Q9HdL,66-?A9lGfr.<6sN-H#DWK%V/u.6[mdMKăU"yf,1A>?>m=JnLf;_L67hr3*NonfWVPqklr8?cwL1DQWo^1hNQl_kxh-wq3PucMMăU"b^faYEW6TD<d=ZyW;-PI2,Pq)%lwpjsH)ik>lPXX7b7M(RXN&UZP8HG:tq3XI%VăU"9fL^lZjYtajYuR)%D&6e]n6C&QRGEG\^:=WG#F9G*>XH8sr]eQ)o=x_\ObX=zN1ăU"//Uzj=oF>YFuvJYgpuC^w#Xq(X^Blaunj/H7:m/NK7m$PWc&>rdMq'Le*yYH$-%ăU"mh;DzQTFuGjjq],XWC'g,etb>oaBcZgJB;)AK7sLL47UNrZsZ+=lgTGf-rL0Z>&ăU"47?+Vq6L#Bf2qXwdg]L,-nrY5]EvKE/n4qMaO'6_(rXXFbBRC4P_a?k+TH/trNcăU"g?FUtMSj6_8gXR)C?(z,sE-$-c48T6/nbKK;6L&9e7*(0h8n%d-nn73cIow-uxgăU"2/b>bmMMll0J3lGCKTA9DB[,uCD[IkH3qu9D:8P20n=uXNUeO3=GZdGvV.OXXv?ăU";v0\Q+Z*xe9Bh3a(+rpblFxhj/MHo>&(^R(dn<<Y1UQ?]jJ$WK,,d)i.Rt[,lufăU"ED/iAo<OmPB/Zq-#7]acKCkAnWO0$ll5V>#gTtj((H-o=#JBQjX5OawoHJm96,%ăU"\0$4$_:-Bbibkj_HWih+#:P?kbkM69Fh]Y#AHPF*5R50#X5xX\:-BtUkD2glIavăU",qI:OY%e/I<YY7C'.GTo3s0>8683B9cHJZQJ4UW?+MCTUmL_hSg*v?mkCr(Pa5xăU"z=YMLq5Isn^(^v5YPQbd#raL)&6dyGuXBUa\,OD+5:oY&nxT.&nhMImJ5BN$F$LăU"T^#Drg_bf0?bf'q36SKq;r\-6s^:e6x3_7K)5[fWfJU8%<G_E;<5Kc;<yVfe4O0ăU"PZ_LB<H/gdhX_5n9IS*8br-vfJkOqhf*k?H.gb-Y3CB3,q;tn]s:*E'd56emzh+ăU"Y<4plJl_8+%FN^(Ncb7,^8;T6Z22#kK8'XuPcgc(Y)pXn;ooaDO4+r6-V(gXX)măU"kl6AkG=a4V,LtiiQ*Pv<TFxN&&UczvB'riAP*]Pz/Eq'P9<C#(jfEUl6On&LPK8ăU"9n$BoYD^fgS,OnLD3L5*O)90?bT^b0bBC,9s\bLjrM%+wXd*ggT;d5.C<j/tnYcăU"5*tml>&0_9Oks]:F(J(-VBR;;9d=bu1#)\)8FsbUx[wgBjM-&pCtifEk?Fz4iBPăU"amA/Bt'woel)/]zm2PxY'1^FC]r,ZrgLKMG2avR2pK.X-xKUUoB8\mUm63\KuTYăU"=onLe[IMLP6>\Q3NH<;MPDYt'?XgnTsGeSMkfaCnEK8$pmzGAe-Z;3jpU_u7Nc-ăU"14edrdzpSvgt1K+:>lGJS4D1d^0#Ko=V6,9V^>KBjZo)/)gB#Z-d^<wi4[vLJe%ăU"mpSB5\C7-Ib0#'5GgAXii,rV#D^l%^1l-$o/+O^qM:tFI1A*M/u3WQ+N\ZHP*:0ăU"UdwCGUc8i>wcDB0o6D:CN5HTjE3Xl7+bugauhffiIKHYh1h:bPvEGYc$\w<R<<năU";?_9lhCMGQKj,0';Zve^]Kfg;W<7dw8XvvLNAz4,w=gCVLbcH0ofJClB)zUwzpPăU"MY':2/qJ.l?4UG[CE-\g:E1jB\0+[^xxx..e[rMG\J41.;t^'c8'_Mi#9J-S'i(ăU"6^moiqiPWuaraps4Wsp_NDxRELfC+?Mw8h355QNG?6*m+opxi]m+PgH5q+T*TGLăU"8IN[R5l=>T&Wi4E;7sYs539.<##=fAvG?e4Pcn0(c9j9nnQO=JnW>kX_f''h'Y/ăU"ePc#,sXIW:-20w1t^&0aD1xe[sO#PU)\MFikKvw&i8A<3on/2li:1^awU'+a<*zăU"fqjA(eOnb5Iihwj0uC6W?2mI(clXU>o,Q9aZtY1e-66GlGM?s2Q'tH:NKve\i;eăU":DcFX28jQIU^6o\>u&Gc(<SrW=a[(0H>))9zM7ppujR=pf_N[ueWMmepTb726n#ăU"febU\Hk=A:2Q^%V9f4BV/m&1?WFW+Y^cj[Mkq5NrEEcw*-[?hVphGf\5ta-s%5lăU"4h=;pk\qoV##7#+/G0D3fPRt#Rcr#bUXSxOG$l24sqI4*O56o/='n])ttbDp,ZYăU"g/D(-,)ZW.<^9s,hnC5*XL7Johxewq7b2p,CD>Sm.dxTol?><?q)O]Ksfp\O4JqăU"c&7j<-J%Tpj]0f4hQIuu<J*eTg=rU*v-#lN^12fDNc#0AbWD>aM59R[^LyRWY27ăU"J$1TsGUH&QINY9X$r4%yDIPQ/rxh/wiL;N+,E0CQh\JleAQsYZhSy--)AA,]x57ăU"[1mEQ;7v8/nJLAi9u[+#ir#E4+v&1LQ_:L02K*A]'naoaq;_C/)9+9Kcnm,jCxlăU"zBu/XATaaMH.cbZ6c<S[GTui*DYfY:b+ss%ORku2<JsKQ5h9:U2h;Mn;2\x\R_IăU"X'?oR7(jGKt<iS[9lQX=-Va]*<jmD+3fiO7(/rui^x^#&6<lrk&Ezi,tvTQX#F<ăU"J'[4zOQlsXb[-kz6uRbxYT*o-n>DJT%eOba(6_Vao*GZ,PnJ3_D\#4AhG:&<^ZRăU"V#]bxP(_9VLF=3J_xrD-VEc(il95\H-tH+l74yO1sNrJ$OWBg:ECwtXWAD;TdPCăU"u^_f.GuVX]AR6H9mL/D6)<r>yBJQx_XjlF=sQ*h#CXAO#W7XKm;S=snWObTE4(^ăU"j9>(taNElSxYs:ZbCuY08J1^,qMTGNc#Pgg1n+&TzIQ\Q;Yar]]>T#DB;[9\echăU"UbiKA&bT&F%B0]nLB6T>3Mo2IZk4>t\)\u8Jr]feuNrJjQQ-#QRB=uJ>ILQQdw>ăU"KbEmhr?U&Mui0_%d%I].B]w+Yw^):AfQKIV&ALVY8mBi^Ea\fD3=gU-FL_oAt.TăU"JI7KC\zH$cF50#$1)>/zIJ=-f$yqI(VDk^OdP=jX.*pai-ZFl&BjD_2v2*F*b,zăU"Qx1*r13^9_?dq,im5,bPij[^klh6/sDuykZ)iG2a%Bv9]QWEMuDyP7NKpU1f+f\ăU"A0B24B1%aA]m\QyFC?n:'+B\0zJKC^.t2U8[BXM+e;W*<tjh^RvoA0$I5RehL$uăU"Ia)GY\^<Kp,qs/oP>md)wgil;:]E)FLQeD.Rn(2D>5OeF$#Az:667oS5ztGa*SXăU"N('0i.o'D[[1jeX^/H5cBe?TDBV8we),Q^dPLkZhl%Mu\uR7+v9*2rSr0j,%FQMăU"(zLI6q<pLQLM_Xa=5^j$QCPYe?67^_-?INriQMf1e1NDE]*%ii+g-$[r/vp6LTpăU"#u&[D,\TMF^ZF#?BjlG<B(cc/_z$b,Y,,Uo$v1?dR?U+#n0IY0nPOctF]4H6'G>ăU"kYY_ra7<Zb8DS6t/HuYQBblHRoK>#rwK-fU3^GwRO-VokOOrWF(1#k2fT)k*a^OăU"k%/s[sB3gVgL#<lr=MLEvp[ua=cXf9H\S/kHZt\r%XF/lrCqU'XrR*(Xm#rqySpăU"AHvf+k;BGBK.NBOTaUQ_D*sZFVC'aDUWT+VZOtAPa]b-a5.DXDw4=0Fe4[J^9(#ăU"FrdIbR:apB6+l'5jKK79]9.;9$O=\o'HmHdr'_iA$rwcVgS6Zx&oK7J56#Xup\eăU"Oq[uwkEsRIaJ9rM*)QN-b%(QBIamZrI[M,)d\02?ml$msSP[l2&fwjd4Q7ht$cDăU"(SUwVsDHJu:I)/d-3?rD#vj+W8cMq;.piA:fe8KfpY8qkW%sf(6A*Q)#]]uj3+săU"*-'xNH45t04FR^\TJUf>J?/\r&jfdZ<u/+=j7Uq*A,r%mzPnb+ZX%;<k4FuT8c9ăU"j4a3szaF\C>(cG_[:/gQ]EM1ek\=v<3L?t,6SP\)z%u[m6?D^SkR)r&nO97s.ZpăU"1w4/yJd5hooQERwt)ZYvH0kPxAog=DG0#5o:fTEN.,nFOp2etz-T#RU?cQ./>:\ăU"M<fn+Lv%QfXlCEISGLcT;oS0//%^8\n*&CrkuSRY(ki.n*4>BTFG]6A6K(vVP.AăU"qoix6Jt%?ljXmD<Ts):0Z<(oy;yMtFLm\lp=k$.y.Q^hDa'F:EiU<sD1(c5>ztmăU"5h?u:*D-6CB=r&Y%+DhZ'i(JUHt#T\#3cNk-9N]]fAN6$scn8u'p+X<5AMaSpu^ăU"VntNa%>&0D./hV*pndnO%EraUqJR<NPA4=N#eUW/f^/LUKaEI^>[KxH%IO5bRF%ăU"soz>'x-1.O$*_?)]?Q:$G'k#a/mUF_p0mg88%f4u8M#OvW<-akIfX,J=HuH&J9yăU"utE5\>6<0ec.([Z#.VcId:&>tkU_VA.FMQaDp.D/6h4Am-c42)RJZ_9GovOKER8ăU"vx:rPtg-oN0l-mDh+[ztv>A(H-(0Th?IlM(b426t'xVy+X0qIo?R&Jypvo^^G)_ăU"Lh[<ML4O2rW'/_\g+6.*O&yY]/pRMc(X/vtWd*eKme[hoV44G$VIO%Z2m]QRONJăU"XRx)'(T9O^=Z=&K+J*X.hMAp^$Gw%5T?ee/P#4E79Yau58nk=%+Y&pIGnFT=\3BăU"Iz_<t;[pI%E<HDqQ/aBMPPA%(bJC^LO*aFzRv#sZ%2upKzd_*M/^ZAbT#x3I0?\ăU"W$u;ij502D>tMh$6QCUbi0hDg'8i-wTof8-,[cBdW6qU\U_1W<s;[RgG;(B-PV4ăU"]\<FG'oMT)f*_?&XUAQqa\b_+(HIC-8aKIi(s_.N-s\tC>KQWr0/60\u/r8/>?:ăU"pUQn.L-vyZsT$htM>:l9>BF+BS<4Tc5='.3=8ChE)GRSV^(S%*T\bSdOpEOM3s5ăU"?X<];brZ(Z^Txz+N;jRK<eA9KI-s$frVerA_qo.h3^3L]x2&&VuB=U/vB/qjJU(ăU"9h_3dD61uv+V3r:o:F2*ABNr)yScm)MBZ7EIi580XCrPG)li\>YOuBDqBmK4P+4ăU"iHwd,<4SjMj*^'H.V(SUcR:u2fRvY06msfH>>ji<LaPw>IEMKXh<<733=v;vuAPăU"s#U:Ha69pcG;\+Q^APqmTo?fZ6IdzomsOcYP/67IVx\;ADNB?5p6,&Ukb&g[1zPăU"tjIq9_8./KU>]U>vv/(-;b-G2?5xul8w8st,)\pQwKHQR^JL96gP52mccc3r.3iăU"3e9Z.>ka2U+'+z89Lfm=jHf[)r(cx5\b_9ckL+NlhFrSE*:jijR?3^vSmhUfmQ*ăU"Hns]c=DRmxVHt/IXC'Xk$j\VUB_09\n6:$HftIGQq2,jNk)M9d/n3r?;Vj6noi\ăU"m9GcH;=jB(/BYtl[B0yt8WF\X4h&1+fQL7]d%JfCLKbyn.f<D120,2>QZAbEAzBăU"?yPsV$-h;4N)P+2dD*=vyGp=zJ08Be83mb7mA?$xpSE']+#i2nxe9fFtKcZ_z+5ăU"Fm$Uj9EOWjHf),siJW3'i*=H$GfBclPjK<0W1>pCXfzy+=tkpM?wC_gDAsNrC;%ăU"43uY--iWZa'X8oA<#0L0C:LdagPvU]b+H#4h,'Qvc_d7w2MHRC:U:F:BHQ^G(-4ăU"D)lEN6h5qoXCS_5+Y-QQ]pM-6dv3PLIn+)5VjGP1Tw08+1VvchiS<q4tchR(v9MăU"4UYIQPg3x;u*Z/B&Yk&[&]91in6bI(t27QTp#',?+sv4f;i(ve04nNDYGoefVT)ăU"M0Cj18Nc=W*wt_2'6XZc:YLUveM9v2ctSO4wXLF:M[Z6.B2^FM[V>?MZ.s$FkmBăU"oHpW;xVFt9\qO='d)]]*JKznXf8'2mdH6cSB-;nXckKx8trQ1:8G2uP#R*5=v$lăU"zDIBJzSEz*j.QUqp_CM_U)ZuYGMP2FWOjWP-YZf>pbU09Ba+t1b2P3^4WK]0wMyăU"2C-WW1bg[Ru:Ti:9vOBr=R'daekP;/frp[Rbamfx(,ekRh^6oq>,NFkHR(74]u(ăU"nunV0M9\&mg]?<PfJA%bsv4&\.:6&.)V&9jE#C9I5LGnxS^Rly$Cm+xV0iCcf?0ăU"W8(vuV0#v?dB4>_ni$6%tDt]m<=n2uM)X)spMh9FU$oZxH<a'G:$r1[/0K'<sx(ăU"ntG<s0m\#N7my9_.G^MVNR/G%2N;4&BI(H)k^A4lnisxK(AG)ntw#3]<,?/N*G^ăU"d5wPbRLHUV4u%5AoJaK:MWfG1]4%v#t3IF2j9n+ct,_t]WXJduLdtIZ5m52jEk1ăU"QKjH+i83:DAp9d4qy;iq<AD7z%X*<]3,,Wi+bHMs'#>H/3p:3\VmmnQI3+3nTGFăEND SUBăSUB V9ăU"jJ/7S)#U^MTV9;);RF[Ji1hX##Tsgoj;Gf,5rV$0WMViwCNudJ<<N=5giw:Do-[ăU"#Mq*)7%M5]HHu<g1Iajau<Ab7z,3P#.3_p_Sss9tmR1i4CrEqmaIEjTNY(cG1u.ăU"h+aZaECt?^#:+\FQe<Z+.\NrB)$h>F-nJ8WPZIKb3Uz>%/^*Cn.vtpTu(4:.V.JăU"lYO$0le/jG4m[oM'AdB([]O*bpkp=umL='k(Z7EM_Z6sS>K^&PSg\%bRt,U+kB,ăU"iL;&*eyS2*q1&rlG*dTs$-.OSiztj,8O#PvlXj'nZH:1bI.0lM2'GmdxDTI]EKTăU",x3ok#_oFWk5ZKNN?%NQg'SO,N%p4_im]5M9F4(3g^dzqTDx*g/pi/?W<uYlg&tăU"UlLnT.Nr1,8:1[.hm0>stH^MV;Ct#v^SZ132MUnlTu;8ZN7BB9wca+umImVAN4oăU":%G]<sjeulPnnKDi5Gv8[+I]5+EQu_ydq3Od8\Q-Hik1Re<I1E-j?fH.v6s[54<ăU".'$EYb?QHJ,aw>ltGqob-LcZ<Mcn?px^_?yaHwl<YnN#H1TRERD<.qO1C;UTpc9ăU"77cEZFwNeQ'j#^Ky*5:906#$pg\(tM,*r&e:u=%5f^o,KNq,VM4LO1N<^R?6A3GăU"oPT97h#HY6OWi6+2>WsTl(2.^gn-7I'i_Oa0NUP],DmP64-LOMpxv)ilDL^<_dAăU"-r%kLJt<wT6<h3\jt7F7j[Ah^TSuNik1kni#?p0:$DboVhjW<+RdhF>1h#QRf.CăU"T>jeI:)XrPtAi^6p>zOLf>N?f(A[RSe[:Q>X/rdp-gboT#9sf2mjOCdCD+\lY7găU"R;C>5y/&00ar2AK#bhV<+Np\,ft^5[48dOqtT%HUoQq;yT2]A#TuT5--Dz?]r\lăU"w>eD[Ml<N1HmEtfe(OuA7%jOI+.+5[N*PG<v))EnLyK))zCbojRe8A9Y3?>tx1^ăU"=LR&b_\j#oSNnefftz7<X4.W'L=u,#>5frZ#hv%dIiPXt.<LY,oxE+-r]kH$F\dăU"TP:'6wtOq(h_<+v]U9>lj4&;#tU&rC=Rgb3j#6+<0r6snUSQK<&rc=kxsd7^v4YăU"EXqKRSi/0mD-Han0)x9s?De)J)$)QIWAtc#jf;GtN$(84.tohFhqPEKHE0xqebsăU"?&;3OXb1/CFR\yPjdul#OP2/(&_oJ&dJ6IOjP;huM:6Z;o;4b\0mK.#D&z&HT=găU"NPZC]*-V:X2nL8TTNdVCGt^\V#tI6SIJcnyd.-XIGrtc#X9TReL0Gk.w-/NK>a\ăU"C>5bK5,eg04e9wGnLeb1ALixU'v.qB_lg=hkMe#+XTbR;N-yRlqRwleQ8J%E-w'ăU"pk:D\#3\3k:]d=zjr8x3uj*ZNOVUGo#V:C-X''t;FB45?K5?lCVuqpwN1j.gEURăU"/xO=;Myd7UYvb7Z+\s//0$'j*l\s9*KbdG*t+b2u6,&xiuQclen[&dF+?PNXQ4<ăU"WruP,Q:Nb+7;JZ.&8;[2d\IEYXg'Ss0S=KtuuUUTt'><zz8G\i:*4ff)(VFFq5(ăU"Ntk1+;iW?J[T;&^gDQOR-GX$DpCw3,3nX[16h8fm+niZ/GrEHD^z(=S'gD,xK4DăU"/w6RBPc<W7O0PwbL*mUa^a>x<YW=(MMJ88I$*)dFBmXhjG9\c]Y22.h)F$\7MEeăU"MyrRt82U0[7z7mheZ$\XP&Td2H,ebwJ+&A00F&n1t:F#V(Qcnst/C%?]e67a/[făU"N?+86MdAHc4*vfrE6-K\0$KA]8K/V$#N9SWpv_^/aw;T7>.TO.B.VUN?D(vXOj8ăU"otnW;\%uZMWhSg0d]Jd>hIh>FQmj,8k^i7Dm0xSz;C*:_tYI&N65f,/'n93*+FVăU"kvHsG;5.Szl$Q#CSZ*M%02^YCjV3knh)%tF=vLOpcms_&YZ;c\j9dX[M]t5?;.%ăU"8Lb^<Hn*wy8T>&6V+1b7'8i:,aToCaQFfa(B&[.3P2p'5JMhQ]e3a=dt3&7:h=PăU"Mb-x_/#7X09CET],YHVQXwcZmFUo>&2uoVR)Ha#C]WP_0<sFp1Xp[Y;EKo>7HrBăU"H^b-fD8%GC=ti1kxU-v9iuuzm:W+NenE$vF.c0Be5cG5PAAo=jdj[J4o1$]q2>PăU"ENiL5HBJsxJ(1Br$AgU7uqJaOH:ax=ibNbPTheey?(5o,]_qv1gXD&aBl=[KOrVăU"\sweHhSdt4):S,GK#<q9p\s(USf8a[itEqF>j0?A7;M99qnJVB6WwY[^hOa35OeăU"p0Q6?,]?h]6KsKR/ni;*i.=MFk/+D_iCa6Yt2aCW<oV)Td?ZI4>bB;a^SeOAO)jăU"yNIdl'gq/n$(GSH<'/-g\:6GmAuBi_*k2i)gJe$3mbZPXv,cQ0uAky:noR^i6*:ăU"CY4D[OL=GDrm(l&?JBlh/I_q62<<ORZs.84rk:)YnM3:G/H4/[D<L[7[7ie%AdTăU"#ohl?P,;]l+Dqn?zjR4Z&<gE?agPix3Q-TmV%[gH*KhzY]+Nx'/F;v0PYVQV2tDăU"<G8t1R_5tQw8mdRo,U)3wGXu_f?kAha-rZfagpcDAleaWo0FNp;Nr=-tmq1g.S%ăU"KGgILnQ*.1Uo+.zgN9BqqDhSK&y3I0Y)#2lr5Ht.8/gc++gt?goC'oXb]xCoOjfăU"v3un$vplpXQ)H.g#gJKS8vQ^\eHp^Mj?-[l*\>w&W+5:3TfOQ#JhtqlDx-eXRRuăU"FHo,j1a?'4NDwSa][hVq2xuQ%i1gV6'F%ubjJ8tn4U>TbeH1V1z'^Dd*oF/=tfrăU"<6-QKGDn3fB]wuJsW]hqMG*G1pe%%_&Q2td?p%Hp4nFWP%ik3*ojF<;DfO9;mSVăU"6wu2^_LC7pPKfHFBtfXrx77ZO(RZ$[,./9&?oqt4?wvde8pP=\TIK>Q)j&;Ehn?ăU"YYm-KZk$qc_3KgFEWrj/)'T9,I259uRxm/ZNnToNd<bOakz\)5eaniN;1J8(g9păU"#Y+ViMCjl-^vQS8PLed+ZoZ?[<rNsR.2PH($[ej_*nCl:Z3X'ZrWYWUhZ_abYT?ăU"mx5jPf[pW\FHY+ieP\Xesc-6(HZuUg>dgBo^,=?O\&+Nnx47=tYc7Ocrq=.aDAIăU"^J/,g\S3UMlTog(.u<8x_l$)^I]%NTgJDDc2.'SltnP4LfUzaBqu\Q&0K_)J7gkăU"%<N'gsNEqcERInrR6w[RdHtcUwhODx<>m%qyOD2ZuSYh=N22EOgW5=\0uBLW&O*ăU":f4)bJGVx>RE)85Sw=^LkL\,H9;clQ31Lh\HRiMbtj+RE\GWhpY[r+8rN5/->E?ăU"6+rdz],G:6:T#Z/pf;r/;]^tx>x7V%_i+jl.DF,qNuX7tUQQ($R17gRMXG**:)?ăU"dphH_P5n,b,xTr*,WI6:&Vl2m*O0wM;88#o:bD/_Pny6;,+[-]3R<sHxs-_f7X9ăU"OG:6<?,NM.W,lU7&(ow1&F=M*?icq^KsR3)INXWfFKF.4,h3=4QGgb/i5T7hc#AăU"KXKq:i]lfgqJ+1OWL/l1Gorfg*Y>XKwv*M3.tUX48H4c:4w%R1K-f53?,dVKP4RăU"9e4f:4vD07->,sS_R<PcRq&kP[3:g0N6\^#QfRxrT<Erf<>QraiaKoP+;ETj8#wăU"gxo&(o'jipbd/_d*.(Gfmut=j(6;p-x?oeP2nJ(]Y,_*eC?kRv%>GnHJAea>h;9ăU"A6le70$BJ1_;rd&FA*ZSvqdG$ONe,kGhPFW#0X(90csCCPL=/kfZ#WN$Itzg$o2ăU"Bq;5^t]F:jZ+TMzu<M]Lu%KBVhZcA(._TLv0:cqVxuS+Q$L7x=\o-^?fP1J%^a-ăU"4Z#?<JXb*-=anph%aWtvr/m<s&j>PB<%.&N8u/*]eKP]S$*K,6*R*^Cd-lL*)yeăU"_OyRNjW;/URU&7k6n<G<'\RRRBn2LJ\dV#\]N4-Amr;3r_t$,R:&cCxF\Y.m>&dăU"e(0o/9=JqP+BgKUZpoW6cnbz<n$r><Gbf;bP2nBuH]8QxKmkP(E'ky_*^X.(K(păU"-tfkIn9o$s;YIn\/Twc_L*8oEnNV8jf>Gurv/78c$Zp.Ag2YFRMOV/)?Mj%Z/ZdăU"MVJ3.aGLQm0mr(tHR,a-y<Pn0W9Bvang'%,Y5;%(mB>RUG<E-__Ot/u8dKo$GujăU"Ajb[/\5j?TEufOpFsf)empF92]Y24('m(Tx?]d><K(CV?<tB>P2;+g86\H_CiLLăU"HMV0#I.KLUW;1WJ<#&ad^qWq5kN'MT^nz9V)vLpyY[:ja*)V::qG%+(<fPV^&/9ăU"EM\7%;fjd1p*>Omsp[pTs3^>((EJ<)X=Z#Gj;e=_q4I<r2^\<CS'qcp8JV'.q'RăU"g=GrBMR$4Nw/QM-p7UzHl2a(j#,\$J\bTv)v<3q8L1mtK^HJ=7>MUoVC>#G543$ăU"u;ktOv_t%?98NsoR%+^^[mw^VF*uui)g5(qwi*uK?uq$_co*b=S/LD,NEMnePVNăU"Qmx;TIiu*(^4'Lu,bhEDr$H(b8dd0Q5Rko.F&<U>r2)SQS%k8cZgJ.0zme/Q>?kăU"usi*3c#w%o8L4]<U^KqA>drs&QUny1ZNC\Wkwl5G;#*hZkf49tPDT?U1.XMNU9/ăU"\K<]*dl4'QWt46)[]PI1U9P1x$4jLd>Bo[MDKY90aS<+B,B_8eI*R5*5GsC,&L^ăU"BJ#o36]wiQs(]JuhJV6NxDu8-SNwHu<gTkItAm(P#BXNZWv^1<*<51OUZQy(e:EăU"64Ld%JQvfeLEAb,?&4l&KO3p(#f,_%)Uvo(?Z0+k=,bl5?/*#<Y+8]3%lV9.fZwăU":='sbYPQHKP35nag3l#pz*L3OS)3J3ij#dRa2_ROw%dN65c[p(<\RhI:RU:&9mJăU"hPY-a>#'J,OzbmyicGy4=%s%Rs4TlBn,q5XQS863ENu8K:$z'Z.uus/ke.Pks6eăU",<;.=4/0tCA55AR6wu(^(*kVdZiI/<1OnJ2I56%NMyR6\d9>J&P,*vnj21HRwb$ăU"Y1QsQv)>0kB>>D)K^7HgQO9WTa_$3O7uIkk^S5Bq+Ht/VJB8-Dh)X-EKWCzUf/[ăU"qWIVv+Q^-M$sKetA*+2mvKa#fINra#E:4mTg)eG^NG4fzzTv.UQBeD[>2]6mE]căU"'mw?951=h8lmFVIdLefpP;rD&[-?WikWSB[%tpV[k3#*^%<s.ecBX?R$=?]/IwDăU"MeLv.5qXMzZ<7X'3GReV)%JkORvCaDa(]eh9tpIn:;MfKa[%i0ix-D,$TAwS,*HăU"Nz^KPGR;6ZP6r]CV)1t\\M1P4;zan03SLLZcJ>s2ecT8WX7.QX5:ltn9nL7PMinăU"?44%pAn+]g8Y^NuN_I73+auVo?8l2kfemeJcXr]_8%N24L>\T&z6n9sce_=jO5PăU"I[2zWM/cm^ypRXZmTW#g^37YTz$cP2%CD+l4oqbe<-3SU'(F>i>s,F&8m0u[+k6ăU"/%HjQdt,jQUM7LKWWC72+Ub\mTBa=oV&QRs\'MT<CEhM\#eB?%</=P)V#qMQzJuăU"1AZlA2aWPAaSbY4:f]sVE[K1>#M'4ztTXX9ISGWb2D6[0]aNscERp)>W_hblmM<ăU"McDI4Svbq+QLlReKCDFlbU;hO_gOE,CRA9AJrS\qMxsbDKPPMl.MT$Lxgs_uhwtăU"Zwxxq6N3wu($?G2\[lvuZ/sPuxrsxsBq^HuxN17bp(4#2:De%STsDfgq9AX;&eoăU"N&BScEt6%JUuP(sljN.A/]P6[9i5+d<N([&7in(4<6\Hvsl8IGs-m+ML]&ku7r9ăU"[pqZ,\1o)yR:-7]O$$)VrSR(2Bz3oHCtX(U-52Ajfg&(GkiWk6Qh#cfsZ]kFwe]ăU"mf^LP2J[&5r=3$R4TsbuRIl/&6ns.#28WTyJi]%9asnE'[r>+;VezgHAeS>Mg_wăU":wTX7au6RsAY?aU/*O^RyzPGel2Opj$Aj^e3^6BVqy?=v*dKDQvkr*m.E,[SdaDăU"QWM?+I]mLNO\v$FgMmkrO'NdCTmRG'o*g2l>BsXG[)T8itE(jfEQ=hRdBe.loHyăU"DuVr_TMD*DM]X4F)HJ9%6gZd'J0dDid+PCN)jcE:YhnUzHaCV;\>84c<f$zE:ZUăU"]Ova\5)P>0Yst_F]lnd$kI?ke(Lecd(qP1/rH^+.x<tSPlJcUW__t-u:-Ptf\$VăU"o<28g7[zWg1u1U?-soQk1P%W(\wP;al$XJ$*>2hh(+skr=c(m<^<4g_XQ=YI'MoăU";,AbQbJ'8v#ri*owFFc2c#=hU.-1RTS?qcMufsD5QLbbCHXs%mds$bF^LK>N_x(ăU"p4$L6E->>orpIxQ$ncpNCyZDZ[dY6MOi;))_&Z?Dc#aFk/5_l1OhyB:ITFRRc0făU"Pfd>LRSYDpsQlF<#J=:9bEN/,Q<>Dk,+526=Rg1YhmN/sw?bp8[:_c'AR[P0WccăU"ET^d1B3&bLT4q.[DW$DbWw[n^3u8NfL0?k*PdW]6<4Y%(-o<^5we-O[3GIJcD8uăU"SP9Rzg]XLjj)C^-+[l-xY)Oj;7FzdvLA>zGVl,0b/\ToL*^$PLOE<3d]Es0KT-păU"JEiC3<PMb;1_&e8^rS)^*F'kHXPsLGMVrwW+LDhI_8-Uhcu.7&tdNszNy9JI--hăU"+kJXl6$mlblh$)u?peK]Q<CZWJ=t_aGGXb%evep_Y_dv]G#t^<UQwO./>gOQg'\ăU"_Z>$NEL[CT$Jy#=ZULkjZ0Yaj?GSYBGoSk65Q'^j$eM8f]9OdV\aXZY;Jo%pU;3ăU":Rl8\G_*CIs_XMB8kj9q<Rkr70B]4,9g-0\\\,Wvh'r1YkC/naak2PvxGw5+p3^ăU"[X2sAY#vt9_:;Yr+tQY'9%ir%;wEggeEYnPDDk[jf%x.HrmH,\h[e3nmI^o,.DCăU"nR>'/>LiQf<$<M#j:XdAPsn$8lWHmJyLP*CkNcOk4fj:IWTCkFdPqWxTIcsZKHnăU"vFIqri&#D6Z-]94#qdN)[2GtUTauwFRDeli$%&X(BV=Yile(8i[Q&Wgb.&poGKsăU"5:J1-Z-nQTO<lB/vW\Pbd:51#=nn'0q_9PtTD0/DxL0&\]Gv$h9V#ioQ0[ro&f5ăU":wokUWNwje56w*bYbL?5iEWrD(=F26\)C46Kp'*(6WN.flNEJ]4%6Jh;$q:WwMrăU"9vy1(b9&7QhNLCZ$,n]5:Y6Hfn.D#W'tqvFot=9E&R')aYmdCHT\d'JCVr%wVmYăU"CPfg2rdC.O1oUD]LIb:n;oEDpVJ8=1xGUAnj.ucYRO(EFS-]<oFT>Jjh]qBnfpQăU"c-shm/\bZ\:uT:R&WN9a_rCsVAMVmPb?k,*I?Q(rMf%jLh&YM/r_.cJbVfw8#D,ăU"FPeqk<[c]Ah?[8bgIYOd?8Or:x9j=rYTrjxg8l9U?K1bmB39w,$21uHcSDmM(T>ăU"ADJW.L<N4YqPXdJy7qjr[ea;PSS&niN&ascRlkro>Gr*lBJ91oza]lnsV8%Qh:TăU"*4KV2l%'#j<(5'Mg3CeQOJFCjnc\bd+nT&g^dkpM<A*^F0_v>;AmGJjf_hfnj\+ăU"_9:3uL(OpWLX\qVO+ETF%O4(-&5D2,;qDm)UoZmm.Mtg.w]B^RhBeE2ds?YnJo?ăU"W3QWg?Jns]gwnQAEZIPtA%qG;dLw'il<s;c^l8VHlN=r]wGm&XD'g[P$NDJ3U-)ăU"1=t.tq?P%U.[s3^I6x,KO%ATRRlrBn4]%Ao#8PcfPkq4o9dv']=nQcoXWSFtEbGăU"YQimW9Z*%Y^8?plh%Q?;lvtb5FfkUhEGwc)](5dLEvN?m&V4?=M%'7]eB8Y)jtMăU"MI9$dWdd3l7BB170DO+p$,LQEQBL#VNuOKdassh&<3tJ+IyGYs*(D8Da,BGMM=găU">Bh9OM0+\0YXbW;7'0^A]dui>c;rWGW[PD\:=jDx9G(;x,A%ZT1m<x(\Ke+W98năU"9#3x[n_k8+f'C#*DHhKKg4KA(kxjP5TkAUG94^RUBm\tN*.]z':4YgL(k#4WoD&ăU"ng)Iw8];jeJLljzLRTJKBq-L7RXEl0X-WU=/$/-&SKsx3zqB'+=\<lkR:O/T]9)ăU"+PAi*b,leTkTMk+^8.89ZPhN\&-Fe9[K#7Ck0amR.Rw/oZ2L?BwRC.W#jG>Ze5păU"%LlFn>Q9o#T]pR9WpMOo1XsG2i#SMqt.bh03EdU#&pO6M1x=2kB<aCQ4x\G3bH;ăU"aDuol(V]8R]mro;<I-%#TZO$#r)_.^z]#k1;]Z=7L)$EY>;IcSk2r+Y&BrUD[6năU"ixN-\=jcxsKrJLAoi'GH2SECu=t$+EdHe.UtUT9ENxY*mH(vo2gGyg++Eay>4*păU".X$bAnfP/x,gIKc)le&eZ5KU;g7i-CIPuP4nBwgdx9+ypd>0nOBHX'RIn\W9>I?ăU"gj/HrEq<h0;c1_Exj/uBv<XJzd)M<=96#7t+s#4A^+))P;cDSoM+7i7w6s#$N^OăU"KMT((^M_L:JiL;x>8dVIWBau3':0F^9hXWsCv6ZZPsmvh23FN'5bCa^sMmvZQehăU"r>'69P#e4iL2CW8&&oU0WvY0,U*T'S=BTu=H'$&zpj+11^6*7+;t=y4R&_?ZOcpăU"dpHTZOQc_O\FjMG']nfiSfE?O,alR0*bKWq-fpf6_4n]5J7MAF&LwlPr[1Cop8IăU"kS5R0Co-'T8&Tg4d&jBrV=?lCi9OzfROW2..8)Ms/:9RpEUK((N&,aqsV7q>a6NăU".MU[2tnb]w8s3tf5wfEcS*.I)l=WSeElQW(?_j*tVQCFQgU[=.kj\GFc[e?XETnăU"p?6%,;UQ=C[]6,_OLKw=kmSYvq;S%XCRV;Fk[-M6s_eSsBdl1afE>EcW.ciiDqUăU":9[S/dOmZCP,S_vxXVa.epUTa>X41gV(%L;MnMqk,(Y$.5Bcs=Q8]lPNdrivPH+ăU"$DcD00%x>AHUa&T4.uuPhJ^([Ln.n^7L]0?AeZ*(%nWnF(k3o;$<QrFzPcjuV[oăU"9q\dQ$e>2Fs0Qhwc:gSVbA0kw?)wMO&DeL4par<CL\ly#_?M6A)Kh#j3pXyRQ?HăU"pA8pQ*WwWc^?oA=w5Kf<32sswPjF-\U%9bVwz&P]mc-r5kk5Z3HH_3]]PXni71tăU"*DC.4.Rnp[Vl^l<2LT;sbi;89Tt?cclLnKjOaiNE>kq>)g)psPdu2M?4zxxaRQhăU"pS''xp^hLwc)K^3uE5]w(R+9,lva>UjAOg;5,.UQohYRPuw0x)8b^enL#IW**gDăU"vCde<W)iM;]^-r%[3:JC,?CnO]9%]qbnpa_Ef$>=KwfZEC)A$>fOtwKNA/:ievuăU"f/ewZku:GM*c]RHM'Cd^9p3G*B[BWcb[0WEMC#s.lJlD8,;>a0m2Z:VOnlcSu5LăU"&V4aqFHH]Y-;RqAyPSqqq+LMql3npy6?WC=D6dFnvE6M(+C]\V'XPO<0AA=VKUnăU"M.;4oux$vB$(Pt)m[$.T::nbx4<FW6e/)wxTOL_F,U:w2AMx>(mu84^cxEA>lr>ăU"MlH0LP3hJ74=2w[CcGmxbBfpA&FK/-\alfn0,WWWDL5^>Ai:QRiq%$8Sqp\vdHqăU"+Fhantzil1O4Z.3\y*_bNCAM*uPywh&vqUo4Y>kO^LRmVQbl4_A+I4L#_#lavlmăU"8P]t2O?7q56Gef5F+992X'TqH5H1GwGuqW?>iK(hv8FH.WBhvQf^IBf$SG.6G]kăU"NG[c3x)v7N/.EhI(Ze:*fe=/Aa&b;8)k_7-QC(r(N[+$g%$%PHs4Htt4g*A[5?zăU"G[v1+9moH0XIdk8)Lur%PR,*_l.'$dO[]23)J4wQAfc_PPI#g]#k$8C.h<]pei=ăU"p^ZZN&c35/s0D(scU-i8*A>Jxkat_Xd6s?lG)jf7Gif)/I.]e=:#k%#G3_=VZE7ăU"NdcdFf9\74[O$W+.R5NQ:+Cleh^Hvonx,hjA4l]I5^BmjVcw18EJMO%7JoQ>nMvăU"L\1TYZcLC2\K.(o.^sM..Ha.rkh#Ek5qHQ1m5^>8Ucbu8bYjkNqI3^CZmm&MB<#ăU"EbPM*5g?47%h;_J4fV_6e[([4ywKTu,k>SlXA_]29n4JBac4sN:/p\?D^6[?V:ZăU".):Wf?Kt:NE?)=jG*o9*i(fv8as-<6dljF_:yFx.RDS;8:EV<X)-tTQ=L2gD(fQăU"YX_PzB$/t8&[JDHXLPnMki4H?$Z(PYofILDj:F0*^[8wjDOYqP1*4U%R$1i5E>-ăU"wpD,#$#/pa1ntH:*NF?Dtn-?^/DZ*_jB%Xkq(0EhFyVUT6/fm/8Z378;d+]ui9eăU"bj8f1Ks+UAP(f1QsQoGbWEs'<lV[uA).z+6.1^:[a4k\nohuZ4<Nq-++^OtqAm6ăU"Y6n1kGA7CV9/Y)Ga-XJuLF*S,.dAfTl6.2M,li#&*&kRy03GL;bJ(KU9^;\M(:$ăU"S-d.kHSGR=d/z3-BNz\6q>9?,tYmd>YSsABFWdgmlU]pe9*,i)*B:BIScyD1_V^ăU"0HW4q,NplDiR]T4=q.4Y'5SkLMr0IpVf+G\Uw$JL\>lWv.XKRVpL$DMU_nHtO\dăU"V*A,VW>Wl<P'kSmC$mdd5I.JsB)1>AQFVV9tf5[#l_bkSHdbv.1)DxWU[67t.N_ăU"J.Ubk8k&hJ'bi^zbdrI[HQ=pPcHB3)FTmRq=_jJ*imaP%Wrai'Ji?/s?nGVU<AiăU"cxyd*+8*=IrIxftAD2bB<?BB0?$8-^EjQu4o,->:8qvQGHeq]fW:t2xu.VbBOe.ăU"8^,4(nWF4clGUz.AK()5:d:'_VkFbj%xPP</Cn),B7LF'kLgMarxbIk9qOluh[[ăU"zkB22A=-\5DAq=yLwAtIO'g/klFVjL,q*J2ODe&47r7>Y-[4)<u>]$$k],IT&,)ăU"<Hbn2Ke<ZheQ;,,IHj6Px6MVQ7W_Mb*8CtJ]S1y)2c^YQ:ARDrf.S^iA2<=)kUdăU"]VN=?:MeD'PYcIc;>7Jw4ZATn?#xV:J*g7Kf?cGl.kGl5?317=xQfs+xKf$hgINăU"1G(1H4YIsH>Y?V4?6N5Q(^[kUl2].SrLR'o?S:)B/h1utelfR.fw>$/N?#4?O[0ăU"$#y2[AjQ6CkIa-;>%[3a1pXbujLBJH]:b9juODw*<i<+W%G7GGsYOlPfAz1wDO-ăU"G5AAi8vH4g\A/3^9LX:bPZ1baaH-L%zyQdMMa?]c9>er:0>Cw?m+nXO,<,TOq+]ăU"u&4%'p#R)U_2W)Ds.tw>^bIW7ro2ac/cOB$evXtAqkc8Jvu7BCRHU*uXr0UAipyăU"*eO-bkc_ZY%X?PsD-Ep>A<S'6eK/LV$2ObH>ur0V%[C[[9,t9UX:*9Awn/?OhX?ăU"&K3Uaarlsq-)Q/mA0k=.#oz_8vS.uR[[+Y2RW(u.J)Oronn\b<cOhr1Nn_lbPqXăU"l3E9vKsl?'p0/\CJ$K6e[;^Wf^T(cgVI6%w/e5.1FvWIDb3Lps(,p[4%MGC8NKeăU"kedpt07hbo]$l#At\N/#w?pY('aTj7F;2UJ<w4,DfqJb_rkN#]6T6Nbnxb>s#=KăU"[KCLWjeOVdpw<YM7ah,I.wLel-4;rBgEZEIkg\M9tEv2CHHmVt)8lj^k+Ea?PtAăU",D:)CKV&\V$U'=Mwnf?xwi\I$wKZ'zGMdYW-ekrxHj5h\Hf(n/F9+$9,BN9NSEkăU"C(htfA\HUA06YM#dj=qObb=qb\/vdh%>S?Yx>BGuK_)9V?<)?$[_+UzsbaW/M6tăU"Lb\^iF1'9.KC;q<f6;L<+:8uo[jZPsnfI4>qZ4,ISp&9&sB_*/Rpe'w=AKcJ64OăU"%%+c[1n3jWFs+Kd4iBGqOJB'ay[Y6m$d\uK+UF%3_:l*Y=fh[V74B<2ZLqSKTBRăU"NyE^XUs$&%k,S-iM7Q6f=xI5sAQ*.*=A)C&Ut'A-keyv1w,3U-N_&FNrSm*YVg1ăU"i\ibr&%4,xS4iRlA4-phJfv;A4_knp_ieEXbLh-96BDAR;12G&U>spD#3s]:9lSăU"sD+cdPPH527_*[h6M+/zY)c<M6_u))>c9Gx.WfBgE.,X2KXPaf+B_6.(.]]SyhdăU"6PXPc#mLM[Wp5<KbZ]DUs7aPx[EU?$dRhdKs6[.e;eiL3tM*&4r3?fo1ugmtejbăU"iHY.WwzHH[x#)L$wH^=WsJ2+X\?;b.AZUG-S?#O2SXl+#*q5dT4En<pUTlsn,hTăU"&aDjH3#m2uh[;f7^?:0a+\2T&+w257LuD,84XHh$t'.'^fhBw=Ycx7(DVO/NSSEăU">B+MFbOXB'/NwKKsm;bw^'+zS>dXGpfOHLU=qB48XF9E&y7L$<(3Fu2+Qmsf2gWăU"#T'h_AkIK9]5kqD0OjeWefSJ*SVkkn'9tKQH\Fdu>U%#<O^xR_C*=_ioP8lArjsăU"PPeI^Oa<&N/emYiS_qM)4Z'B4puJ;kZ-N-aaeRYdc8X=mCUeNlj7h+6<T3-H?1găU"\VmjTdN7Q6sSrHg_J4RI_k'sZ;S+J<V$O[Bq7'rGor_f\kF.a#aba\t<=9NC5W;ăU"PM64<l,J<,/Z5^dJWXwWwPKUH-MABVe[#q6Y#+#mr#Fi/.h^Ai]>9Y+;PR%s=PwăU"YeMb.K,G'nQ/]9FtUvy6i3oc9yfeaG6>znj25vW*UfC_z;arT2Y/BBQm\LoSL7zăU"bXv0kcAV+1A9ALwn#^5MF[Bd[T-Q):wM;6%^#-Q,12TNP<kWI%VLwCf&rw/-b.1ăU"fxWXv0rfAZ*B)J6Qbn:%sq,u0fedo$i4z>[+h;_HM=0Z,'n>R0I\._H/2K9Mko$ăU"*t.9/7rD1StgdfFw.RUeOnDD[T^.2Y_Laep';,Dv'd8x#$&eauj?dXGK&^.w+w&ăU"o>(2q94RO84/Lar5OIJaMEkg<EmGC<O&R-U;Uu<F4BH6iMLb$o3OuI0_lDYtxTmăU"nVb*'o65KOoK-]w-;ym1m*6sSePRdUK,FuLwk3mGKd<1Di8GsGeeQT3$77?SF2găU"/ntsG9IlgRKQu3>in+$?H,T4\m_ca6tjMN^r>FoM\*AF<#&aV-e0bZERgKX_3YfăEND SUBăSUB VAăU"f90b-Gh1gq*vF7,BiEc2_j0sc9vgnH.X+&Td*^,'g)ZWpQVRo(OQ92q8:]6zPASăU"<9sbYt't;NUa[]VOXA_]oM4i'=L_4JTcBG2H$$#_2]j_A5_g]%IlM/)0/?[L*-eăU"C7E:ad(1W3()8e6n]X8/NXp[V,,bLE&G=<SY99ptihNjNRAp*&0%Y,mCsDF#63văU"<tn8,ae_d;sOI-DaVE\p?ZRFv2PcxsmD+/tiNMjy_''0)xTK'[HkG?#=nyDuhEsăU"Hqu)1:V.Uf)aOTwE(\H$?[Obq=Pmdpd3RA4q]3*2]6x63TsKup\$$FVX=mU,RwnăU"._N4>ie7)U<A5WDhsn1h0aB#c;<uc[haL?jZ3kDejS70OV1aIxQq?KZ*>S$ICoyăU"*)VlJ\;j3rWJ5)q8EpNb<k='8eLiKtuc5k+[?KUv_Pq(:P($WRCr(mqTd\E/Vl6ăU"7wLOaP((lRWCx'2CpLU%+Wr>#^NP,=Z4jnT&5H9bSc>VS:G+>;P+FVLc3j=fUmZăU"d&F2'h1\YuT4b59qdIj/sKkKFY#PCCuVpRPr*i&bPaP[W(9K?j+e_vzZu*do*PrăU"kbt<jw:21S7*?ntKKp_]M'%GlIEvnqSm7tf0wvWxQ,Z^LAYpTMbck]U$q=^2/ywăU"b42b1s2uE)%<*(VGa3BbIJ_8fP$7Mt[*1=ws*w_m&(f?d9?bDDoJFa?^q-8m$UZăU"6,U^LTs7>YKC0Ug6^2oiY/b?fjh_&^FWA/XTg?k*:AVmH(yX*p/=ge^r$_>#tbDăU",E'40F+tQ40J>,koLVf%QqK^^D-v]M]mfNc&f#>+S7%i;LjbK2LM2W$U=iZ_r7BăU"mOvA7AedSC\R6qhgqwv9i,j34<P0n6li,3UQ5[gPCdih(PSg>ISeu:MslWh4R3GăU"ul/$_1RJq\fIAf>ix9ikl3PjoLP1GEFyDtVnlX4pVgSNnQuwZaj?g]Ux>EIMf>uăU"N$g)/p4->iBCoX-GJhRaJyT6AqF4pfrOMW5Wu9\U07&cvI6BP$^Oh2C'vu\#b\FăU"4=HMtjNCjhkW1mND/WUD9Eme/,ZTBX>xE.iF>u5s97,3X<g'+vIT]ak33lEJX?măU"OCbMOG4pVKx0<nJ*uo._n3zSbqsP0]'pWuM4.V6urRmB'lKDpEk%f;,]#>S/5J?ăU">Cfx)pg'(L(4+t'HgQe&HG$=\=K*?j(fP(?54r6.E[O,25=c?h3X_l:rFrvBRe_ăU"+#64Up:bFaePf'0+m)thEeT3U,;rQVCrA\Q&6DGM]WI?63dlIqXus<GFQWXb1o:ăU"D<.[zYak.mXlpS8qU3kStnefWNdH<.<hI\n>DP*m>;4be/=a.x00NBxsPD*BU(FăU"n7Eteg86_pVzZUvwuKw-Y;boPu6K%b'/#CuIzd$%c[X+I:-mFDOo\4QL\Yyca<AăU"cAdGHT?0j;3j4_YHhL<-IX6?^xyxNk$'9%1=Fj)Th0$2Yt^u^J&m9us>Eo5JTGaăU"N$Ib5^hx:GL6<$2kft]wLCxDE]Z5o,3Xl5:r/=^cgqli;rKfd:=D,8'5Z0:KUa1ăU"L-Bur;jo7pZl=gIZkWi7Xq4944kc_;)vWYKWmI?KdLCnUCwLQS78%h3M=sBRnJ:ăU"h;2NJ1O+jxVt\aWJmX*KOR<zs(xU8$=Mn\U&pV%8J*bnM?ulSc0Dh'WaGn;BUs;ăU"9bno#K6+Wr(dX?uX+#fB.Wd6s+#%DL/s-n0fU<q6sI7%=Q<3GdMXdn,TU5jN,$QăU"(pTMc.#7fYDC?P8*;Kb&z%y_[l)_%SFYqvl?CAgoQTYxr[)x(ki5K$Se_x3\pbCăU"AhF=]HZ$mphcIu.CIt))xWb<WN+Ys#BR=x>KE&V,\;I5Wh'oddVCk)fLt*H?v^uăU"nK$9>WBi*T#\nFK5hoNe2-j-?<3Z//AOhejiLdjBr8Qsl,RV3q62gJex3j-Rg<0ăU"30<tuO3M^VqMu-sjFcA2ic:MqN_?k:$>t9MnAmxquCR48H(fhLNdd+n%M>0acNUăU"EG:?DNLrxU-TG2c]NZ?[>c%/$;tK\$u=WiTr9h+6q.FhT,yBSl0vFPAKxt8-80găU"X-h=^27qxrksw(YJDon=^.-nswge_Tj7v)K5sDbs5i\#Vjx[NMPLbr>/ZTK1).*ăU";_vL7n/K')gdS8H5n\3t$Cs8vKAK&<h0Sa/p't:ykfGEeagLxT8_VL][IS%\L+jăU"&bZ(>^g1a?HMoq_bD.HZHdOB>pJdds?9LhGUutQ)a?Wb77^a-Z::OShpwi>3waBăU"+Nh'xNsUlcFH9S++nPH]8?S?:#P;HA]\r?857vwtRPP**2mOL8Tb/TI8U3oT5$lăU"P/E8x\cT+:FSBv^X)preFnQgAnXOtOBjCDW3.bCXmM6>d8'rM8rf3XVL%e-A4+FăU"pL2RBS:U'%&(b0GCKMG\9K/HhaY*v7;==2FzWYmL3.SCmfl;>_lWA#5^-LN+c$LăU"f3O:d>4pSyII2#mYrY95I29$w(GPSTRk++1QjBPV'=6*ac[\vg(n+ExrXHQQU/'ăU"50c/tiryRcEWne>q*<H.ZDa9u5XcZa-n8\A>t/mn0/e1-.e&M:Af107?]ERLtv9ăU"n4^bHqs[J0WosG;hrk)CsB%TI'xx[oBhFaa9nV*2a^CaUt?#n:0T.pKdI.$;U02ăU"0/Wvi?1BlZMt_lr51l2,Q%kb.ydUf50;_eBdOq>[nehkDK70=o%,8+7nLMwr9WHăU"lJIdYv]TNF'tKlO)pwgOw6.hNDI\MXhdx2R'7H2Fst0/fF;g'gXP9E))j,X-.hxăU"6q2mnd8U6rBhNt*o3NK:\:#p2O*V#a%ZVs7y7-#(>EWak5Kn#hN3CkR<$-HloG0ăU"aL[bJ;)TRQoL25.ufPRPn<XO,Z>xEm'Bo3Z7A=<J?:fn;wQrnbpfnJVq(wjjTzbăU"h5aj;;\+4aCTq+B0lt$tB8.7TYN?X0j6$D2Icy&RE[v/='MZQWt11?*#F:^:mCAăU"3#8_Y<$,%h8w,fV^I<V;4KmXtWkDxd:b[ZNC2a#H[A*w+PQPu8$TqO_mP^kTXEaăU"[s%^Cn_46sXbF<iZrGt7(?Fmc(HS7M[q4tYNUisEPZG$hqRRQ>mLoie;ZD*lE;EăU"1t;]^UDO\0b6P3ZNe/[2v#%t'T\,GD:<sh7G_zBD7YS+>#n=*7+u8=\%SgK-CcWăU"0T/.<CI.)5PnF^\^L'PpJ?NFN>?CYADxS5L%N='*$ZNAaR-)^B&;)2Ho&Q8JITcăU"1Df<7pdxnxuG_jYh.h5?kfAKL$PdXsQC$/.jJ1?8gRbFS<>ZnWUuv3,XD(tpdbaăU"mqJM$*2P>,<sI)wGvZU9I3bM&iM$l\AJQV8T&TPFBw>2C^,HPp[=-&qQ09wtooJăU"RndnftnJ8(Q(YVfD(NlSK2oF+-J2EIegr]t3bDGlOt$xD%At\tyJ6mC=HmZY=HUăU">m^Dq(GHG#m;7wAe1_Iw/T*iaEeGxEf:>27pLLPf_6qpo]k)_P[4$q*a_]Ygq\xăU"csUesi+gZQgL3l+6/us7Il>uJ;_]#RgHgDP*cin>iM5p#Iv3cTa<dCCTUrM5iD=ăU".zgO-Mx&IRc*EZmPdnM-O?LKU&FfJk)*nO17Bd:hHpu1fAIJ$n.WQIPPjQLW3l4ăU"&SP'rL0QK-#YhAM*K]._QEX^4lAZ<+r)<iZr[Aek-QVS6G90tm,Rm$ZPAP9C/_KăU"*1JEn:2+c8/W0xFKS>:(((Xt>E__a=<PF3X1VKm?0nsDW4yf:_3:Z$Dr14Fa9RnăU",A%WhEkkBj^MR:F;KeduxEC=nC$W<q\<bi*(o'jMX2U;L<Wo4,_'mVWm.OzG;aJăU"_&#5z2RkrY6VJ$oY2vIf&h956gz<$H[%\[7vpvVW\_f'tSHq2dBB8H7P7b[Qm:FăU"SgPGe2'BA_D4gE]OZT>4r(bXJf1-=WdZrp$?TMvVM1^.,J(vbBuL\.jHujG]-GcăU"#$qAB5o#s^S3s%?L?P*8%=U\=c3qq2#an[xH0mkG[$<Oz)T00Y,=W_vP:#PZwNaăU"B(fJPqsT'K8V+t$pe\-6Ekuq.:/R93iF('7&tRvTulsoiP>m*/v,LpqN6YGC&BMăU"p=nO^akL*5Ek4nf%Ol5n)?k=F8$g>kFaGmF_$H2v_;nHu/Vk4?mBG2+o7r#.dpOăU"4L^FarV7QB+acQ_(r,U%[DY2zjU8TQW;T1\o37tBP&>r--82N]TBp*2?Sz9[ng)ăU"-nsYDtYSw)>)_Z#?cfg&GDT3;(ot&Bq;vvslp4))G>S0vUPz_cNE5QQhjv-BS]ZăU"Kocfq:7+6&Gel5\u#>jOM_T=G/m<hZJ0ihU-8.^a:sh^O&YWfhQ&aO,V^Anyw]1ăU"A[hk:ovX_TW5pEhFnOP=v7woSyIo.ajX(MkM_#VC2FV2MUv^I$I'WiETtU*T]'dăU"2XZWdjRD;J*60BcNE3UP_9TZG.h>/5n'jfzE*+>J,Qj#aAJ>.eUf,Zb#'1x3WRVăU"otd7m*+bZ0I(FMjv,n&Un#][H:cir_D:c*d(CAc2Fi5l#faqOORR:1geUMYja2-ăU"sE<Uv;=o1o9+EK&UiPi1hpD,(lxEw>?:aA/krwWMl^GF+ZkFf38$;6LTQk/hu7(ăU"JSmAn/V(0gyuOlb]]O#5_d34qs3H08$NSKKFpkfX-&iw+$0[/nrKOOG=GLaey=:ăU"vl<vAbbt37-iBMsjsij7V&s:)/]jh3MV]>Gh#kpOu2k*B#rZ31Qn5DV>yY)B:R#ăU"n?g22bX+N7mb8t/XbYOTcIL%\+0Vsh&^^7S\G9,/2,(3LnBOjdh;,>8^J6BEe64ăU"_ZRE[W'\s59j/;v\xklT0]Qk8I>GnapTA#nPp-dZpD9<mri%ZPS6gAV0gWQG^bfăU"2hyP'8eJq#YTvMH=\si5PGJB#$\h?R9??W3pc*kCC<XAl98V2?sVK&'eE;x^\EdăU"&9tfWY0]WAD,bXgLijGky3\w$*<VwgjkhHkS^S*%L^X.wgb&KHvP(E.4_Z?L&VkăU"?.9:VHX*E>);'kn^>=U3%reIh1$4q6gVsOAQY'h$L5],ljgh]BkcxDD[fg,uA^CăU"LHaSkg$WN:oBv,y8G'omN:W6Okns6lO[;6j#TW7/rL.A<.KK4322Q>mSkrN4fR3ăU"e6aunjqlAIzo&WSYEir:s00-)c\wKD,VwT*(#Wq>^j]9o#Vtt2gm_-jY)w(5W,qăU"4koTqr(nOd3(K*tnRD*c%K>2Q:Wz%'&>ea49646k<?XNyOzQjB0XW_\%5.jX.n1ăU"(#iX7:KAYA*_)k;JUjQI;(jqGZQ$u(I/4[Dx#3Z2$K-9>5\B?Xi]%Q&c'qstf4răU"pcw#pd[e<T,V%cQ8eL_R)YPgm\uh8<tyn9o4$.Z9'-6(aAV<?-%d(?e=CWDLQ/VăU"(,<X5tr%1ZS,Iv'ws<_*K/gq[Mc>9L;%J)+e_2\,Pd1yNVfQpU$B',A4.ylO%nRăU"OV/i(Syk5g9GP7P?K\Z%j*+1WfelZ;r+NPHD4_GvF>AJl10[D4BYuRK<'\J>9_+ăU"1[sjgmn3oRex-6qPown>mT/<-<?;TT8kg]*g:,Ym-7=P[LiH^-PJ4i_#pfDDF[YăU"_rLQ)x4JczPFD*4%'kM5XfTuj+0UD##;fVPEiU)3BqT2gK(qEULd0J\Zf2N?]4băU"sS2UG[+0L,qWSa>hNmF4$JQuc#T:R+,BKLG25W4lrd;97Qh(dn4yO>9:;6+5N*xăU"pGbCS%0vn66&jR1o=keA5[g.+k,,R1NIDFx#ckHGt:Quf(V,/%fheS(Y/A^P'9eăU"u3U=>U1PZe(NHDx%djO$1fVgm1cg%LEi7lH5k-1p)oeW7z#JHr8BI6uxs3upxhmăU"cx8JxuxHx\+dx#u%p&'9%%9%%#%-%3[]6J'$R(q9[5%%w%e%%1%%%%%%%%%&%%EăU"%%%%%%%%%Xil%nfuq%wSgf%xup&%'9%9%%%%-%%^Y6%J\X;-X,>%4%;2%%%.%%%ăU"%%%%%%&%E[%%%c%5%%X%ilnx%Sgfx%up&'%9%9%%%%-%.gYMG%96<I'/*%%%%5%ăU"%%*%%%%%%%%%%%E%7%%=O%%%hS%ksyu%p&'9%%9%%#%-%UCC5JDgWTr'#7%%]%$ăU"%%1%%%%%%%%%&%%E%%(%lU%.%j%m%wjxl%nSgf%xup&%'9%9%%%%-+%kZ6CJjgfăU"(E*0%(%oJ%%%/%%%%%%%%%&%E#%%%D%h%%l%nfuq%wSgf%xup&%'9%9%%%%-C%jăU"f9OJXp-'poJ%1%2N%%%/%%%%%%%%%&%E[%%%q%s%%l%nskqA'Sy'%yup&%'9%9%ăU"%%%-#%aD5.JCFV->wN%1%cp%%%0%%%%%%%%%&%E#%%%9&C%%l.nx%n(j&Sg%fxuăU"p%&'9%%9%%%.-%TEJ5J%3*d/CER%%YT%%%0%%%%%%%%%&%%E%%%)$m%%%lwns%yăU"wtS%gfxu%p&'9%%9%%[%-%?(C5J,e9$cv#7%%x%c%%0%%%%%%%%%&%%E%%=%Q7%ăU"%%qrw%jxln%Sgfx%up&'%9%9%%%%-%:%o?;/tNe?%L&%%&6'%%%1%%%%%%%%%&%ăU"E%m%%wJ%%%uj%jput%pjSf%xrup%&'9%%9%%%d-%t2%&JjT4g:g%.%%w%%%%1%%ăU"%%%%%%%&%%E%%%+tL%%%ujjp%utpj%Stgo%up&'%9%9%%%%-%%yZ3J-*+I^*an%ăU"%%p%&%%1%%%%%%%%%%%E%[%%6M%%%xz%hpmt%qjSl%nfup%*+%%%%%1%.1%v'#%ăU"%HC%&%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăCLOSE:IF S=183AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăAntoni Gual                    3D MAZE PROGRAM                agual@eic.ictnet.es            02-28-99 (23:01)       QB, QBasic, PDS        556  17176    MAZE3D.BAS  'program 3dmazeă'1994 AGVăăDECLARE SUB infoscreen ()ăDECLARE SUB Display2D (ori%, posx%, posy%)ăDECLARE SUB Draw2DWall (ix%, iy%)ăDECLARE SUB Crash (posx AS INTEGER, posy AS INTEGER)ăDECLARE SUB MakePath (x1%, y1%)ăDECLARE SUB RandomPath (x%, y%)ăDECLARE SUB PutWall (ix%, iy%, clr%)ăDECLARE SUB MazeClean ()ăDECLARE SUB Target (posx%, posy%)ăDECLARE SUB Display3d (posx%, posy%)ăDECLARE SUB Turn (posx%, posy%, giro$, ori%)ăDECLARE SUB DoMove (posx%, posy%, vx%, vy%)ăDECLARE SUB Question (in%, min%, max%, lloc%, txT$)ăDECLARE SUB InitMaze ()ăăăăăăăăCONST planos = 10        'nr of visible levelsăă'perspective constants screen width -320 a +320, hi -175 a +175)ăCONST kancho = 350        'width pixels  1rst plane wallăCONST horiz = 120         'horizon vertical positionăCONST rectang = 2         'wall heigth/widthă  ăăăDEFINT A-ZăOPTION BASE 0ăDIM SHARED lmax AS INTEGER, dime AS INTEGER, DisplayTime AS SINGLEăDIM SHARED fugalto AS INTEGER, fugabajo AS INTEGER, FillWalls AS INTEGERăDIM SHARED markpath AS INTEGERăSCREEN 9     '640x350,(2 p ginas)ă'paletaăDIM SHARED pal(64)ăFOR i = 0 TO 3: FOR j = 0 TO 15: pal(16 * i + j) = j + 16 * i: NEXT: NEXTă'PALETTE USING pal(0)ăinfoscreenă'tama¤o laberintoălmax = 8                         'tama¤o por defectoămaxsiz = (SQR(((FRE(-1) - 4000) / 2)) - 3) / 2'lab mas grande que cabe en memăCALL Question(lmax, 3, maxsiz, 0, "Maze size")'dimensiones ,max  admisible Qbasic 101*78ădime = lmax * 2 + 2ăDIM SHARED Maze(0 TO dime, 0 TO dime)   'Maze(0,x),Maze(x,0),Maze(dime,x) y Maze(x,dime)ă                                        'initialised to -2 (out of maze)ă                                        '(odd,even) or(even,odd)=wallsă                                        '(even,even)= pathsă                                        'path values : explored -1, unexplored 0ă                                        '-2 targetă                                        'wall values: 1 to 15 wall,0 no wallăă                                        '(odd,odd)= not usedă ăCLSă'Creates maze, displaying processăăRANDOMIZE TIMERăInitMazeăx1 = INT(RND * (lmax - 1)) * 2 + 2ăy1 = INT(RND * (lmax - 1)) * 2 + 2ăMakePath x1, y1ă'PutWall lmax * 2, lmax * 2 + 1, 0ăa$ = INPUT$(1)ăMazeCleanăă'Player positionăori = 1ăx1 = INT(RND * (lmax - 1)) * 2 + 2ăy1 = INT(RND * (lmax - 1)) * 2 + 2ăMaze(x1, y1) = -2ăposx = 2: posy = 2ăfugalto = 120ăfugabajo = -340ăFillWalls = -1ămarkpath = 0ă'inicializa  juegoăDisplayTime = TIMERăON TIMER(1) GOSUB DisplayTimeăTIMER ONăDisplay3d posx, posyă'bucle juegoăDOă        DOă                k1$ = UCASE$(INKEY$)ă        LOOP UNTIL LEN(k1$)ă        K$ = RIGHT$(k1$, 1)ă        SELECT CASE K$ă                CASE "H"       'forwardă                        DoMove posx, posy, 1, 0ă                        ă                CASE "G"        'forward leftă                        DoMove posx, posy, 1, -1ă                        ă                CASE "I"        'forward rightă                        DoMove posx, posy, 1, 1ă                        ă                CASE "P"        'backwardsă                        DoMove posx, posy, -1, 0ă                        ă                CASE "O"        'backwards leftă                        DoMove posx, posy, -1, -1ă                       ă                CASE "Q"        'backwards rightă                        DoMove posx, posy, -1, 1ă                        ă                CASE "K"        'rightă                        DoMove posx, posy, 0, -1ă                       ă                CASE "M"        'leftă                        DoMove posx, posy, 0, 1ă                       ă                CASE "R"        'left turnă                        Turn posx, posy, "I", oriă                       ă                CASE "S"        'right turnă                        Turn posx, posy, "D", oriă                       ă                CASE "Z"        'downă                   IF fugalto < 120 THEN fugalto = fugalto + 30: fugabajo = fugabajo + 15ăă                CASE "A"        'upă                   IF fugalto > -240 THEN fugalto = fugalto - 30: fugabajo = fugabajo - 15ă                CASE "T"ă                   FillWalls = NOT FillWallsă                CASE "X"ă                    markpath = NOT markpathă                CASE ";"ă                    TIMER STOP: infoscreen: TIMER ONă                CASE CHR$(27)ă                        Display2D ori, posx, posyă                        Display3d posx, posyă        END SELECTă        Display3d posx, posyăLOOPăăENDăDisplayTime:ăLOCATE 25, 38: COLOR 15: PRINT "Time: "; INT(TIMER - DisplayTime);ăRETURNăăSUB Crash (posx AS INTEGER, posy AS INTEGER)ă   'place here any fancy collision display routineă   a$ = INKEY$ăEND SUBăăSUB Display2D (ori, posx, posy) 'displays 2d maze each time you press ESCă   ă   a$ = INKEY$ă   TIMER STOPă   SCREEN 12ă   ă   WINDOW (2 * lmax + 1, .99)-(.99, 2 * lmax + 1)ă   CLSă   ori1 = oriă   DO WHILE ori > 1ă       Turn posx, posy, "I", oriă   LOOPă   ă   FOR i = 1 TO dime - 1 'STEP 2ă      FOR j = 1 TO dime - 1 'STEP 2ă         Draw2DWall i, jă      NEXTă   NEXTă   ă   DOă   LOOP UNTIL INKEY$ <> ""ă   DO WHILE ori < ori1ă      Turn posx, posy, "D", oriă   LOOPă   TIMER ONăEND SUBăăSUB Display3d (posx, posy)ă   ă   STATIC pantvis AS SINGLEă   CONST medio = .5ă   IF pantvis = 0 THEN pantvis = medioă   'encontrar Targetă   fondo = ABS(planos) * 2 + 1ă   IF (2 * lmax + 3) - posx > fondo THEN ultfila = fondo ELSE ultfila = (2 * lmax + 3) - posxă   pantvis = -pantvisă   SCREEN 9, 0, medio + pantvis, medio - pantvisă   WINDOW (-320, -175)-(320, 175)ă   COLOR 0ă   CLSă   TIMER STOPă  ă   'for each row of walls, from farthest to nearestă   FOR fila = ultfila TO 3 STEP -2ă      ăă   ' temporal variables for this rowă   ă      i1 = kancho / (fila)                   'i1 coord x parte lejana cuadroă      i2 = kancho / (fila - 2)               'i2 coord x patre cercana cuadroă      h1 = horiz + fugalto / fila            'h1 coord y alta  lejanaă      h2 = horiz + fugalto / (fila - 2)      'h2 coord y alta lejanaă      l1 = horiz + fugabajo / fila           'l1 coord y baja cercanaă      l2 = horiz + fugabajo / (fila - 2)     'l2 coord y baja lejanaă      fx = filaă      'calcula n§ caras visibles lateralmente, izq y deră     ă      IF (posy - fx) < 1 THENă         izq = 1 - posyă      ELSEă         izq = -fxă      END IFă     ă      IF (posy + fx) > (lmax * 2 + 1) THENă         der = (lmax) * 2 - posy + 1ă         der1 = der - 1ă      ELSEă         der = fxă         der1 = deră      END IFă     ă      'drawing..ă      'perpendicular wallsă      FOR j = izq TO der1 STEP 2ă         clr = Maze(posx + fila - 2, posy + j + 1)ă         IF clr <> 0 THENă            IF FillWalls THENă               LINE (j * i1, h1)-((j + 2) * i1, l1), clr, BFă            ELSEă               LINE (j * i1, h1)-((j + 2) * i1, l1), clr, Bă            END IFă         END IFă         IF Maze(posx + fila - 3, posy + j + 1) = -2 THENă            COLOR 15ă            LINE (j * i1, l1)-(j * i2, l2)ă            LINE -((j + 2) * i2, l2)ă            LINE -((j + 2) * i1, l1)ă            LINE -(j * i1, l1)ă            PAINT ((j + 1) * i1, (l1 + l2) / 2), 15ă         END IFă         'draw path explored marksă         IF markpath THENă            pisado = Maze(posx + fila - 3, posy + j + 1)ă            IF pisado = -1 THENă               CIRCLE (i1 * (j + 1), (2 * l1 + l2) / 3), .05 * i1, 7, , , .2ă            END IFă         END IFă      NEXTă      'parallel walls left of viewpointă      FOR j = izq TO -1 STEP 2ă         clr = Maze(posx + fila - 3, posy + j)ă         IF clr <> 0 THENă            COLOR clră            LINE (j * i2, h2)-(j * i2, l2)'vertical lejana ,abajoă            LINE -(j * i1, l1)            'fuga abajo, hacia atr să            LINE -(j * i1, h1)            'vertical cercana, arribaă            LINE -(j * i2, h2)            'fuga arriba,hacia DoMoveă            IF FillWalls THEN PAINT (j * (i1 + 2 * i2) / 3, (2 * l1 + l2) / 3), clr, clră            ă         END IFă      NEXTă      'parallel walls, right of viewpointă      FOR j = der TO 1 STEP -2ă         clr = Maze(posx + fila - 3, posy + j)ă         IF clr <> 0 THENă            COLOR clră            LINE (j * i2, h2)-(j * i2, l2)'vertical lejana ,abajoă            LINE -(j * i1, l1)            'fuga abajo, hacia atr să            LINE -(j * i1, h1)            'vertical cercana, arribaă            LINE -(j * i2, h2)            'fuga arriba,hacia DoMoveă            IF FillWalls THEN PAINT (j * (i1 + 2 * i2) / 3, (2 * l1 + l2) / 3), clr, clră           ă         END IFă      NEXTăă   'a$ = INPUT$(1)ă   NEXTă   TIMER ONăăSCREEN 9, 0, medio + pantvis, medio + pantvisăăEND SUBăăSUB DoMove (posx, posy, vx, vy)ă         ă     IF vy = 0 AND Maze(posx + vx, posy) = 0 THENă         posx = posx + 2 * vxă     ELSEIF vx = 0 AND Maze(posx, posy + vy) = 0 THENă         posy = posy + 2 * vyă     ELSEIF Maze(posx, posy + vy) = 0 AND Maze(posx + vx, posy + 2 * vy) = 0 THENă         posx = posx + 2 * vxă         posy = posy + 2 * vyă     ELSEIF Maze(posx + vx, posy) = 0 AND Maze(posx + 2 * vx, posy + vy) = 0 THENă         posx = posx + 2 * vxă         posy = posy + 2 * vyă     ELSEă         Crash posx, posyă     END IFă     ă     IF Maze(posx, posy) = -2 THENă        CALL Target(posx, posy): ENDă     END IFă     Maze(posx, posy) = -1ăEND SUBăăSUB Draw2DWall (ix, iy)ă   SELECT CASE iy MOD 2ă      CASE 0ă         IF (ix MOD 2) = 1 THENă            LINE (ix, (iy - 1))-(ix, (iy + 1)), Maze(iy, ix)ă         ELSEăă            SELECT CASE Maze(iy, ix)ă            CASE -1ă               IF markpath THEN CIRCLE (ix, iy), .1ă            CASE -2ă               LINE (ix - 1, iy - 1)-(ix + 1, iy + 1), 15, BFă            END SELECTă         END IFă      CASE 1ă         IF (ix MOD 2) = 0 THEN LINE ((ix - 1), iy)-((ix + 1), iy), Maze(iy, ix)ă   END SELECTăăEND SUBăăSUB infoscreenăCOLOR 14ăPRINT "--------------------------- maze3d.bas--------------------------------"ăCOLOR 15ăPRINT "- It's a 3d maze viewer. I programmed this several years before knowing about"ăPRINT "  Raytracers, so it uses the old trick  of drawing all walls in the vision range"ăPRINT "  from farthest to nearest, so the nearest walls will overwrite the farthest"ăPRINT "  This approach has one advantage, you can look over the top of the walls."ăPRINT "  .....It's impossible with a Wolfenstein Ray Tracer type maze"ăPRINT "- It has a fast random maze generator and an overwiew feature"ăPRINT "- The program will calculate the biggest maze that fits in your memory"ăPRINT "- To save routines, pointers,.. i had the big idea of turning the whole"ăPRINT "maze array each time there is a direction change. A bit slow for big mazes.."ăCOLOR 12ăPRINTăPRINT "Move with the number pad.Change direction with the 0 and  the. of the pad"ăPRINT "A Z rises/lowers  point of view "ăPRINT "T   toggles transparent / filled walls"ăPRINT "X   toggles display/not display explored path"ăPRINT "ESC displays the maze overview"ăPRINT "F1  displays this screen"ăPRINTăCOLOR 13ăPRINT "agual@eic.ictnet.es"ăCOLOR 15ăPRINT "Press any key to continue.."ăa$ = INPUT$(1)ăEND SUBăăSUB InitMaze             'Fills maze array with walls before calling make pathă   'WINDOW (.99, .99)-(2 * lmax + 1, 2 * lmax + 1)ă   FOR i = 0 TO dimeă     Maze(i, 0) = -2: Maze(i, dime) = -2ă   NEXTă   FOR j = 0 TO dimeă      Maze(0, j) = -2: Maze(dime, j) = -2ă   NEXTă   SCREEN 12ă   WINDOW (2 * lmax + 1, .99)-(.99, 2 * lmax + 1)ă   CLSă  ă   FOR i = 1 TO dime - 1 STEP 2ă            FOR j = 1 TO dime - 1 STEP 2ă               CALL PutWall(i, j + 1, RND * 6 + 1)ă               CALL PutWall(i + 1, j, RND * 6 + 9)ă            NEXTă      ă   NEXTăEND SUBăăSUB MakePath (x1, y1) ' makes a random and connected path thru' mazeă                        ' Calls Putwall with color 0 to delete walls andă                        ' display processsă                        ă   Maze(x1, y1) = 1ă   CALL RandomPath(x1, y1)ă   DOă   a = 0ă   FOR i = 2 TO lmax * 2 STEP 2ă      FOR j = 2 TO lmax * 2 STEP 2ă         IF Maze(i, j) = 0 THENă            a = 1ă            IF Maze(i - 2, j) = 1 THENă                Maze(i, j) = 1: CALL PutWall(i - 1, j, 0)ă                CALL RandomPath(i, j)ă            ELSEIF Maze(i + 2, j) = 1 THENă                Maze(i, j) = 1: CALL PutWall(i + 1, j, 0):ă                CALL RandomPath(i, j)ă            ELSEIF Maze(i, j - 2) = 1 THENă                Maze(i, j) = 1: CALL PutWall(i, j - 1, 0):ă                CALL RandomPath(i, j)ă            ELSEIF Maze(i, j + 2) = 1 THENă                Maze(i, j) = 1: CALL PutWall(i, j + 1, 0)ă                CALL RandomPath(i, j)ă            END IFă         END IFă       NEXTă   NEXTă   LOOP UNTIL a = 0ăăEND SUBăăSUB MazeClean  'Clean marks used by MakePath before going into 3d partă   FOR i = 2 TO 2 * lmax STEP 2ă      FOR j = 2 TO 2 * lmax STEP 2ă         Maze(i, j) = 0ă      NEXTă   NEXTăăEND SUBăăSUB PutWall (ix, iy, clr) 'put a wall in the maze array and draws it to screenă   Maze(iy, ix) = clră   Draw2DWall ix, iyăEND SUBăăSUB Question (in, min, max, lloc, txT$)ă   IF lloc < 0 THEN CLSă   lloc = ABS(lloc)ă   DOă      IF lloc > 0 THEN LOCATE lloc, 1ă      txt1$ = txT$ + ":" + STR$(min) + "<" + STR$(max) + " (" + STR$(in) + ") "ă      PRINT txt1$; SPACE$(60 - LEN(txt1$)); ":"; : INPUT UsrInput$ă      IF UsrInput$ = "" THEN EXIT DOă      IF VAL(UsrInput$) <> 0 OR UsrInput$ = "0" THENă         in = VAL(UsrInput$)ă      END IFă   LOOP UNTIL in >= min AND in <= maxăăEND SUBăăSUB RandomPath (x, y)     'generates random turns in the path being openedă   x1 = x: y1 = yă   largo = INT(RND * lmax)ă   i = 1ă   D0 = 0: D2 = 0: D3 = 0: D1 = 0ă   DO WHILE D1 + D2 + D3 + D0 < 4 AND i < largoă      Recta = INT(RND * lmax)ă      j = 0ă      DOă        dir = INT(RND * 4)ă        OK = 0ă        SELECT CASE diră         CASE 0ă            IF Maze(x1 - 2, y1) = 0 THENă               Maze(x1 - 2, y1) = 1ă               CALL PutWall(x1 - 1, y1, 0)ă               x1 = x1 - 2: j = j + 1: OK = 1ă            ELSEă               D0 = 1ă            END IFă         CASE 1ă            IF Maze(x1, y1 - 2) = 0 THENă               Maze(x1, y1 - 2) = 1ă               CALL PutWall(x1, y1 - 1, 0)ă               y1 = y1 - 2: j = j + 1:  OK = 1ă            ELSEă               D1 = 1ă            END IFă         CASE 2ă            IF Maze(x1 + 2, y1) = 0 THENă               Maze(x1 + 2, y1) = 1ă               CALL PutWall(x1 + 1, y1, 0)ă               x1 = x1 + 2: j = j + 1:  OK = 1ă            ELSEă               D2 = 1ă            END IFă         CASE 3ă            IF Maze(x1, y1 + 2) = 0 THENă               Maze(x1, y1 + 2) = 1ă               CALL PutWall(x1, y1 + 1, 0)ă               y1 = y1 + 2: j = j + 1:  OK = 1ă            ELSEă               D3 = 1ă            END IFă         END SELECTă         'FOR K = 1 TO 10: LOCATE 1, 1: COLOR 7: PRINT x; y, x1; y1, dir; : NEXTă      'a$ = INPUT$(1)ă      LOOP UNTIL j = Recta OR OK = 0ă      i = i + jă   LOOPăEND SUBăăSUB swapscreenă   STATIC pagă   IF pag = 0 THEN pag = 1ă   a = 7 * INT(RND * 8)ă   SELECT CASE pagă      CASE -1ă         SCREEN 9, 0, 0, 1ă      CASE 1ă         SCREEN 9, 0, 1, 0ă   END SELECTă   pag = -pagăăEND SUBăăSUB Target (posx, posy)ă'palette USING pal(0)ăăSCREEN 9, 0, 0ăCLSă ăLOCATE 12, 30:  PRINT "You did it!"ăLOCATE 13, 30: PRINT "In "; TIMER - DisplayTime; " Seconds"ăSLEEPăEND SUBăăSUB Turn (posx, posy, giro$, ori) ' use aux array to turn all maze 90ă                                  ' it allows to use always the same drawingă                                  ' and collision detection routine..ă                                  ' it changes posx, posy and orientationă   ă   a = dimeă   a1 = dimeă   B = lmax + 1ă   'monitoră   SELECT CASE giro$ă      CASE "I"ă         FOR i = 1 TO B - 1ă            FOR j = 1 TO Bă               t = Maze(i, j)ă               Maze(i, j) = Maze(j, a1 - i)ă               Maze(j, a1 - i) = Maze(a1 - i, a1 - j)ă               Maze(a1 - i, a1 - j) = Maze(a1 - j, i)ă               Maze(a1 - j, i) = tă            NEXTă         NEXTă         ori = ori - 1ă         nposx = a - posy: nposy = posxă      CASE "D"ă         FOR i = 1 TO B - 1ă            FOR j = 1 TO Bă               t = Maze(i, j)ă               Maze(i, j) = Maze(a1 - j, i)ă               Maze(a1 - j, i) = Maze(a1 - i, a1 - j)ă               Maze(a1 - i, a1 - j) = Maze(j, a1 - i)ă               Maze(j, a1 - i) = tă               ă            NEXTă         NEXTă         'monitoră         nposx = posy: nposy = a - posxă         ori = ori + 1ă   END SELECTă   ăposx = nposx: posy = nposyăIF ori > 4 THEN ori = 1ăIF ori < 1 THEN ori = 4ăEND SUBăThe ABC Programmer             ROTATING 3D PLANE              voxel@edmc.net                 03-04-99 (00:00)       QB, QBasic, PDS        382  10646    3DPLANE.BAS ' Rotating 3D Plane (supposed to be a cube though) by William Yuă' Tried converting from Pascal, but messed up somewhere...ăăDECLARE SUB setpal (c%, R%, G%, B%)ăDECLARE FUNCTION LShift% (byte%, Bits%)ăDECLARE SUB Calcsinus (SinTab%())ăDECLARE SUB quicksort (lo%, hi%)ăDECLARE SUB polygon (x1%, Y1%, x2%, Y2%, x3%, Y3%, x4%, Y4%, c%)ăDECLARE FUNCTION sinus% (i%)ăDECLARE FUNCTION cosinus% (i%)ăDECLARE SUB Rotate ()ăDEFINT A-Ză''''''''''''''''''''''''''''''''''''ă''program polygoned_cube;ă''{ THE very first polygoned cube }ă''uses crt;ă''constă''  vidseg:word=$a000;ă''  dist=150;ă'''''''''''''''''''''''''''''''''''''ăCONST dist = 150ăCONST Pi = 3.141ăCONST False = 0ăCONST True = NOT Falseăă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''  point:array[0..7,0..2] of integer=(ă''    (-35,-35,-35),(-35,-35,35),(35,-35,35),(35,-35,-35),ă''    (-35, 35,-35),(-35, 35,35),(35, 35,35),(35, 35,-35));ă''  planes:array[0..5,0..3] of byte=(ă''    (0,4,5,1),(0,3,7,4),(0,1,2,3),(4,5,6,7),(7,6,2,3),(1,2,6,5));ă''typeă''  tabtype=array[0..255] of integer;ă''  planearray=array[0..5] of integer;ă''vară''  sintab:tabtype;ă''  planez:planearray;ă''  virscr:pointer;ă''  virseg:word;ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăDIM SHARED points(0 TO 7, 0 TO 2) AS INTEGERăDIM SHARED planes(0 TO 5, 0 TO 3) AS INTEGERăDIM SHARED SinTab(0 TO 255) AS INTEGERăDIM SHARED planez(0 TO 5) AS INTEGERă' virscr and virseg are not convertable, they are used to do page flippingă' in mode 13h, and would require too much memory in BASICă' Check Andrew L. Ayers Blastlib! to work around this, or Jonathan Leger'să' EMS routines.ăăFOR A = 0 TO 7ă  FOR B = 0 TO 2ă    READ points(A, B)ă  NEXT BăNEXT AăăDATA -35,-35,-35,-35,-35,35,35,-35,35,35,-35,-35ăDATA -35, 35,-35,-35, 35,35,35, 35,35,35, 35,-35ăăFOR A = 0 TO 5ă  FOR B = 0 TO 3ă    READ planes(A, B)ă  NEXT BăNEXT AăăDATA 0,4,5,1,0,3,7,4,0,1,2,3,4,5,6,7,7,6,2,3,1,2,6,5ăă'{----------------------------------------------------------------------------}ăă'** Forget converting this (most graphic routines just forget about converting)ă''''''''''''''''''''''''''''''''''''''''''ă''procedure cls(lvseg:word); assembler;ă''asmă''  mov es,[lvseg]ă''  xor di,diă''  xor ax,axă''  mov cx,320*200/2ă''  rep stoswă''end;ă''''''''''''''''''''''''''''''''''''''''''ăă'** Simple page copy, use SCREEN 7 if you know the graphics aren't intensive.ă'** Again, just forget about converting these graphic routines.ă''''''''''''''''''''''''''''''''''''''''''''ă''procedure flip(src,dst:word); assembler;ă''asmă''  push dsă''  mov es,[dst]ă''  mov ds,[src]ă''  xor si,siă''  xor di,diă''  mov cx,320*200/2ă''  rep movswă''  pop dsă''end;ă''''''''''''''''''''''''''''''''''''''''''''ăă'{----------------------------------------------------------------------------}ăă'{----------------------------------------------------------------------------}ăă'{----------------------------------------------------------------------------}ăă'** Never mind this, just use BASIC's LINEă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''procedure horline(xb,xe,y:integer; c:byte); assembler;ă''asmă''  mov bx,[xb]ă''  cmp bx,0ă''  jz @oută''  mov cx,[xe]ă''  jcxz @oută''  cmp bx,cxă''  jb @skipă''  xchg bx,cxă'' @skip:ă''  dec bxă''  inc cxă''  sub cx,bxă''  mov es,virsegă''  mov ax,[y]ă''  shl ax,6ă''  mov di,axă''  shl ax,2ă''  add di,axă''  add di,bxă''  mov al,[c]ă''  shr cx,1ă''  jnc @skip2ă''  stosbă'' @skip2:ă''  mov ah,ală''  rep stoswă'' @out:ă''end;ă'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ăă'{----------------------------------------------------------------------------}ăă'{----------------------------------------------------------------------------}ăă'{----------------------------------------------------------------------------}ăă'var i:byte;ă'begină  CALL Calcsinus(SinTab())ă  'asm mov ax,13h; int 10h; end;ă  SCREEN 7ă'  getmem(virscr,64000);ă'  virseg:=seg(virscr^);ă'  cls(virseg);ă  FOR i = 0 TO 5ă    CALL setpal(i + 1, 10 + i * 2, 30 + i * 2, 10 + i * 2)ă  NEXT iă  CALL Rotateă'  freemem(virscr,64000);ă'  textmode(lastmode);ăăENDăăSUB Calcsinus (SinTab())ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă''procedure Calcsinus(var SinTab : TabType); var I : byte; begină''  for I := 0 to 255 do SinTab[I] := round(sin(2*I*pi/255)*128); end;ă''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''ă'DIM I AS INTEGER  ' don't needă  FOR i = 0 TO 255ă    SinTab(i) = INT(SIN(2 * i * Pi / 255) * 128)ă  NEXT iăEND SUBăăFUNCTION cosinus% (i)ă  cosinus% = SinTab((ABS(i) + 192) MOD 255)ăEND FUNCTIONăăFUNCTION LShift% (byte%, Bits%) STATICă   LShift% = (byte% * (2 ^ Bits%)) MOD 256ăEND FUNCTIONăăSUB polygon (x1, Y1, x2, Y2, x3, Y3, x4, Y4, c)ă' You don't need to put in AS INTEGER because we used DEFINT A-Ză' However, becareful if you do need to define them.ă' DO NOT use X1,Y1,X2,etc. AS INTEGER, you must define them separately.ă'  ie. X1 AS INTEGER, X2 AS INTEGER, etc.ă''procedure polygon(x1,y1,x2,y2,x3,y3,x4,y4:integer; c:byte);ă''vară''  xpos:array[0..199,0..1] of integer;ăDIM XPos(0 TO 199, 0 TO 1) AS INTEGERă''  mny,mxy,y:integer;ă''  i:word;ă''  s1,s2,s3,s4:shortint;ăă''begină''  mny:=y1;ă  mny = Y1ă''  if y2<mny then mny:=y2;ă  IF Y2 < mny THEN mny = Y2ă''  if y3<mny then mny:=y3;ă  IF Y3 < mny THEN mny = Y3ă''  if y4<mny then mny:=y4;ă  IF Y4 < mny THEN mny = Y4ă''  mxy:=y1;ă  mxy = Y1ă''  if y2>mxy then mxy:=y2;ă  IF Y2 > mxy THEN mxy = Y2ă''  if y3>mxy then mxy:=y3;ă  IF Y3 > mxy THEN mxy = Y3ă''  if y4>mxy then mxy:=y4;ă  IF Y4 > mxy THEN mxy = Y4ă''  s1:=byte(y1<y2)*2-1;ă' for this, y1<y2 returns either 1 for true, or 0 for falseă  IF Y1 < Y2 THEN byte = 1 ELSE byte = 0ă  s1 = byte * 2 - 1ă''  s2:=byte(y2<y3)*2-1;ă  IF Y2 < Y3 THEN byte = 1 ELSE byte = 0ă  s2 = byte * 2 - 1ă''  s3:=byte(y3<y4)*2-1;ă  IF Y3 < Y4 THEN byte = 1 ELSE byte = 0ă  s3 = byte * 2 - 1ă''  s4:=byte(y4<y1)*2-1;ă  IF Y4 < Y1 THEN byte = 1 ELSE byte = 0ă  s4 = byte * 2 - 1ă''  y:=y1;ă  Y = Y1ă  IF Y1 <> Y2 THENă    DOă      IF Y1 < Y2 THEN byte = 1 ELSE byte = 0ă      XPos(Y, byte) = INT(x2 - x1) * (Y - Y1) / (Y2 - Y1) + x1ă      Y = Y + s1ă    LOOP UNTIL Y = Y2 + s1ă  ELSEă    IF Y1 > Y2 THEN byte = 1 ELSE byte = 0ă    XPos(Y, byte) = x1ă  END IFă  Y = Y2ă  IF Y2 <> Y3 THENă    DOă      IF Y2 < Y3 THEN byte = 1 ELSE byte = 0ă      XPos(Y, byte) = INT(x3 - x2) * (Y - Y2) / (Y3 - Y2) + x2ă      Y = Y + s2ă    LOOP UNTIL Y = Y3 + s2ă  ELSEă    IF Y2 > Y3 THEN byte = 1 ELSE byte = 0ă    XPos(Y, byte) = x2ă  END IFă  Y = Y3ă  IF Y3 <> Y4 THENă    IF Y3 < Y4 THEN byte = 1 ELSE byte = 0ă    DOă      XPos(Y, byte) = INT(x4 - x3) * (Y - Y3) / (Y4 - Y3) + x3ă      Y = Y + s3ă    LOOP UNTIL Y = Y4 + s3ă  ELSEă    IF Y3 > Y4 THEN byte = 1 ELSE byte = 0ă    XPos(Y, byte) = x3ă  END IFă  Y = Y4ă  IF Y4 <> Y1 THENă    DOă      IF Y4 < Y1 THEN byte = 1 ELSE byte = 0ă      XPos(Y, byte) = INT(x1 - x4) * (Y - Y4) / (Y1 - Y4) + x4ă      Y = Y + s4ă    LOOP UNTIL Y = Y1 + s4ă  ELSEă    IF Y1 < Y4 THEN byte = 1 ELSE byte = 0ă    XPos(Y, byte) = x4ă  END IFă  FOR Y = mny TO mxyă    LINE (XPos(Y, 0), Y)-(XPos(Y, 1), Y), că    'horline(xpos[y,0],xpos[y,1],y,c);ă  NEXT YăEND SUBăăSUB quicksort (lo, hi)ăă'procedure sort(l,r:integer);ă'var i,j,x,y: integer;ă'begină  i = lo: j = hi: x = planez((lo + hi) / 2)ă  DOă    WHILE planez(i) < xă      i = i + 1ă    WENDă    WHILE x < planez(j)ă      j = j - 1ă    WENDă    IF i <= j THENă      Y = planez(i): planez(i) = planez(j): planez(j) = Yă      i = i + 1: j = j - 1ă    END IFă  LOOP UNTIL i > jă  IF lo < j THEN CALL quicksort(lo, j)ă  IF i < hi THEN CALL quicksort(i, hi)ăEND SUBăăSUB Rotateă'procedure Rotate;ăxst = 2ăyst = 0ăzst = -2ăă'varăDIM xp(0 TO 7) AS INTEGERăDIM yp(0 TO 7) AS INTEGERăDIM z(0 TO 7) AS INTEGERă'  x,y,i,j,k:integer;ă'  n,Key,phix,phiy,phiz:byte;ăă  phix = 0: phiy = 0: phiz = 0ă'  fillchar(xp,sizeof(xp),0);ă'  fillchar(yp,sizeof(yp),0);ăSCREEN 7, 0, 0, 1ă  DOă    'while (port[$3da] and 8) <> 8 do;ă    'while (port($3da) and 8) = 8 do;ă    'WAIT &H3DA, 8ă    WAIT &H3DA, 8ă    'CALL setpal(0, 0, 0, 50)ăă    FOR n = 3 TO 5ă      CALL polygon(xp(planes(planez(n) AND 7, 0)), yp(planes(planez(n) AND 7, 0)), xp(planes(planez(n) AND 7, 1)), yp(planes(planez(n) AND 7, 1)), xp(planes(planez(n) AND 7, 2)), yp(planes(planez(n) AND 7, 2)), xp(planes(planez(n) AND 7, 3)), yp( _ăplanes(planez(n) AND 7, 3)), 0)ă    NEXT nă    FOR n = 0 TO 7ă      i = (cosinus(phiy) * points(n, 0) - sinus(phiy) * points(n, 2)) / 128ă      j = (cosinus(phiz) * points(n, 1) - sinus(phiz) * i) / 128ă      k = (cosinus(phiy) * points(n, 2) + sinus(phiy) * points(n, 0)) / 128ă      x = (cosinus(phiz) * i + sinus(phiz) * points(n, 1)) / 128ă      Y = (cosinus(phix) * j + sinus(phix) * k) / 128ă      z(n) = (cosinus(phix) * k - sinus(phix) * j) / 128ă      xp(n) = 160 + (-x * dist) / (z(n) - dist)ă      yp(n) = 100 + (-Y * dist) / (z(n) - dist)ă    NEXT năă    FOR n = 0 TO 5ă      planez(n) = LShift%(INT(z(planes(n, 0)) + z(planes(n, 1)) + z(planes(n, 2)) + z(planes(n, 3))) / 4, 3 + n)ă    NEXT nă    CALL quicksort(0, 5)ăă    FOR n = 3 TO 5ă      CALL polygon(xp(planes(planez(n) AND 7, 0)), yp(planes(planez(n) AND 7, 0)), xp(planes(planez(n) AND 7, 1)), yp(planes(planez(n) AND 7, 1)), xp(planes(planez(n) AND 7, 2)), yp(planes(planez(n) AND 7, 2)), xp(planes(planez(n) AND 7, 3)), yp( _ăplanes(planez(n) AND 7, 3)), (planez(n) AND 7) + 1)ă    NEXT nă    phix = phix + xst: phiy = phiy + yst: phiz = phiz + zstă    'CALL setpal(0, 0, 0, 0)ă    PCOPY 0, 1ă    'flip(virseg,vidseg);ă  LOOP UNTIL INKEY$ <> ""ăEND SUBăăSUB setpal (c, R, G, B) ' Remember this?ă''''''''''''''''''''''''''''''''''''''''''''ă''procedure setpal(c,r,g,b:byte); assembler;ă''asmă''  mov dx,3c8hă''  mov al,[c]ă''  out dx,ală''''''''''''''''''''''''''''''''''''''''''''ă  OUT &H3C8, că''''''''''''''''''''''''''ă''  inc dxă'   &H3C8 + 1 = &H3C9ă''  mov al,[r]ă''  out dx,ală''''''''''''''''''''''''''ă  OUT &H3C9, Ră''''''''''''''''''ă''  mov al,[g]ă''  out dx,ală''''''''''''''''''ă  OUT &H3C9, Gă'''''''''''''''''''ă''  mov al,[b]ă''  out dx,ală'''''''''''''''''''ă  OUT &H3C9, Bă''end;ăEND SUBăăFUNCTION sinus% (i)ă  IF ABS(i) > 255 THEN i = 0ă  sinus% = SinTab(ABS(i))ăEND FUNCTIONăJacob Wieles                   MOVING LIGHTS IN A TUBE        jacwls@worldonline.nl          03-17-99 (13:15)       QB, QBasic, PDS, PB    133  3212     MOTION-0.BAS'program      : MOTION-0.BAS  (17-03-99)ă'               Simple simulation of moving lights in an impossible tubeă'               with data change in the DAC (Digital Analog Converter)ă'auteur       : Jacob Wielesă'which basic  : PowerBASIC and Q(uick)BASICăădefint a-zădefsng wărad1=160ărad2=20 '==============>> Try rad2=2ăsize=2+int((2*rad2+1+7)/8)*2*(2*rad2+1)ădim fig(size-1)ăon error goto NoVGAăscreen 12ăw=timerăwhile timer<w+1:wend   'prevent screen flickerăgosub initialcolorăgosub Pictureăcolor 7ălocate 1,1:print" Hit a Key for start simulation."ăkeyhit$=input$(1)ăgosub simulationăclsăscreen 0ăw=timerăwhile timer<w+1:wend   'prevent screen flickerăEndProg:ăprint" Thanks for running this program. Hit a key for the source."ăendă'==================================================ăăPicture:ă'borderăline(20,20)-(639-20,479-20),12,băline(40,40)-(639-40,479-40),12,băpaint(22,240),7,12ăpaint(320,240),5,12ăline(20,20)-(40,40),12ăline(20,479-20)-(40,479-40),12ăline(639-20,20)-(639-40,40),12ăline(639-20,479-20)-(639-40,479-40),12ă'Pictureăfor count=0 to 369ă  col=count mod 4 +1ă  angle1!=count*8*atn(1)/180ă  angle2!=angle1!/2ă  x=320+1.5*rad1*cos(angle2!)ă  y=240-rad1*sin(angle1!)ă  circle(x,y),rad2,colă  paint(x,y),col,colă  if count=10 thenă    xb=xă    yb=yă  end ifă  if count=20 thenă    get(xb-rad2+1,yb-rad2+1)-(xb+rad2+1,yb+rad2+1),figă  end ifănext countăput(xb-rad2+1,yb-rad2+1),fig,psetăreturnăăăăsub ChangeColor(col1,col2)    'R, G and B value from DAC (col1)ă  out &H3C7,col1              'to DAC (col2)ă  R=inp(&H3C9)ă  G=inp(&H3C9)ă  B=inp(&H3C9)ă  out &H3C8,col2ă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetColor(R,G,B,Dac)       'New R, G and B value to DAC (Dac)ă  out &H3C8,Dacă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetPaletteă  dummy=inp(&H3DA)ă  for attr=0 to 15ă    out &H3C0,attră    out &H3C0,attră  next attră  out &H3C0,32ăend subăăăinitialcolor:ă  call SetPalette             '===>>>  PB  set AC (0-15) to (0-15)ă  call SetColor(0,0,42,0)     'DAC (0) (Background color) blueă  call SetColor(63,0,0,12)    'DAC (12) color Light redă  call SetColor(0,0,63,5)     'DAC (5) color Light blueă  call SetColor(0,63,0,10)    'DAC (10) color Light greenă  call SetColor(0,40,0,11)    'DAC (11) color dark Greenă  call SetColor(50,50,0,7)    'DAC (7) yellowă  call ChangeColor(10,1)      'circle 1 light greenă  for i=2 to 4                'circles 2, 3 and 4 dark greenă    call ChangeColor(11,i)    'color 1-4ă  next iăreturnăăsimulation:ăwt=.05   ' try an other valueădoă  locate 1,1ă  print" Hit spacebar for stop.";ă  print"            "ă  doă    for i=0 to 3ă      call ChangeColor(11,1+i)              ' Make the color dark greenă      call ChangeColor(10,4-((6-i) mod 4))  ' Make the color light greenă      w=timeră      while timer<w+wt:wendă    next iă  loop until inkey$=chr$(32)ă  locate 1,1ă  print" Go on with Enter.";ă  print"  Stop with Esc."ă  doă    hitakey=asc(input$(1))ă  loop until hitakey=27 or hitakey=13ăloop while hitakey=13ăreturnăăNoVGA:ăclsăprint"No VGA Hardware."ăprintăresume EndProgăJacob Wieles                   SIMULATION OF MOVING LIGHTS    jacwls@worldonline.nl          03-17-99 (13:15)       QB, QBasic, PDS, PB    377  12821    MOTION-1.BAS'program        : MOTION-1.BAS  (16-03-99)ă'                 Playing with a look-a-like REUTERSVŽRD picture andă'                 simulation of moving lights with data change in DACă'which basic    : PowerBASIC and Q(uick)BASICă'auteur         : Jacob Wielesăădefint a-zăix=12ăiy=6ăx1=ix:x2=2*ixăy1=iy:y2=2*iy:y3=4*iyăgosub initdrawstringsăscreen 12ăgosub initialcolorăgosub drawboxesăcolor 1ălocate 1,1ăprint" Hit a key for start."ăkeyhit$=input$(1)ăgosub simulationăgosub MakeColorsLightăgosub LookShapesăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for line-picture.            "ăhitakey$=input$(1)ăclsăgosub LinePictăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for end.                      "ăhitakey$=input$(1)ăclsăscreen 0ăprint" Thank you for running this program. Hit a key for the source."ăendăădrawboxes:ăpy=240-15*y2ăpx=320-12*x2ăfor i= 0 to 47ă  select case iă  case <=7ă    PY=PY+6*y1ă    pset(px,py),1ă    if i=0 thenă       draw s5$ă    elseă      draw s2$ă    end ifă  case 8 to 23ă    PX=PX+3*x1:PY=PY-3*y1ă    PSET(PX,PY),1ă    if i=8 or i=15 or i=16 thenă      if i=8 then draw s6$ă      if i=15 then draw s7$ă      if i=16 then draw s8$ă    elseă      draw s3$ă    end ifă  case 24 to 31ă    PY=PY+6*y1ă    pset(px,py),1ă    if i=24 thenă      draw s10$ă    elseă      draw s2$ă    end ifă  case >31ă    PX=PX-3*x1:PY=PY-3*y1ă    pset(PX,PY),1ă      if I=32 or i= 39 or i= 40 thenă        if i=32 then draw s9$ă        if i=39 then draw s7$ă        if i=40 then draw s4$ă      elseă       draw s1$ă    end ifă  end selectăcall PaintBoxănext iăreturnăăLinePict:ăpy=240-15*y2ăpx=320-12*x2ăpset(px,py-2*y2),1ăline-step(-2*x1,y2),1ăxstore1=point(0)ăystore1=point(1)ăline-step(0,13*y3),1ăline-step(x2,y2),1ăxstore2=point(0)ăystore2=point(1)ăline-step(24*x1,-24*y1),1ăline-step(24*x1,24*y1),1ăxstore3=point(0)ăystore3=point(1)ăline-step(x2,-y2),1ăline-step(0,-13*y3),1ăxstore4=point(0)ăystore4=point(1)ăline-step(-x2,-y2),1ăline-step(-24*x1,24*y1),1ăline-step(-24*x1,-24*y1),1ăpset(xstore1,ystore1),1ăline-step(24*x1,24*y1),1ăline-step(-20*x1,20*y1),1ăpset(xstore2,ystore2),1ăline-step(0,-24*y2),1ăline-step(20*x1,20*y1),1ăpset(px+12*x2,py+12*y2),1ăline-step(-22*x1,22*y1),1ăline-step(0,-20*y2),1ăpset(xstore4,ystore4),1ăline-step(-24*x1,24*y1),1ăline-step(20*x1,20*y1),1ăpset(xstore3,ystore3),1ăline-step(0,-24*y2),1ăline-step(-20*x1,20*y1),1ăpset(px+12*x2,py+12*y2),1ăline-step(22*x1,22*y1),1ăline-step(0,-20*y2),1ăline(px+12*x2,py+12*y2)-(px+12*x2,py+12*y2+y3),1ăăpaint(px+12*x2-x1,py+13*y2),10,1ăpaint(px+12*x2+x1,py+13*y2),6,1ăpaint(px+12*x2,py+12*y2-y1),2,1ăpaint(xstore1+x1,ystore1+y2),6,1ăpaint(xstore4-x1,ystore4+y2),10,1ăreturnăăLookShapes:ăi=0:PY=300ăPX=260:pset(PX,PY):draw s1$:call PaintBoxăPX=320:pset(PX,PY):draw s2$:call PaintBoxăPX=380:pset(PX,PY):draw s3$:call PaintBoxăPY=360ăPX=32*4:pset(PX,PY):draw s4$:call PaintBoxăPX=32*6:pset(PX,PY):draw s5$:call PaintBoxăPX=32*8:pset(PX,PY):draw s6$:call PaintBoxăPX=32*10:pset(PX,PY):draw s7$:call PaintBoxăPX=32*12:pset(PX,PY):draw s8$:call PaintBoxăPX=32*14:pset(PX,PY):draw s9$:call PaintBoxăPX=32*16:pset(PX,PY):draw s10$:call PaintBoxăcolor 6ălocate 26,1ăprint"                 Those shapes are used for the look-a-like"ăprint"                 OSCAR REUTERSVŽRD picture."ăprint"                 Can You find them all ?"ăreturnăăinitialcolor:ă  call NewPaletteUsing        '===>>>  PB  set AC (0-15) to (0-15)ă  call SetColor(0,0,0,1)      'Draw color Blackă  call SetColor(63,63,63,0)   'Background color Whiteăă  call SetColor(0,50,0,16)    'DAC (16) color Greenă  for i=2 to 5                '4 x paint-color for top >> Greenă    call ChangeColor(16,i)    'color 2-5ă  next iă  call SetColor(0,63,0,19)    'DAC (19) color Light greenăă  call SetColor(50,0,0,17)    'DAC (17) color Redă  for i=6 to 9                '4 x paint-color for left >> Redă    call ChangeColor(17,i)    'color 6-9ă  next iă  call SetColor(63,0,0,20)    'DAC (20) color Light redăă  call SetColor(0,0,50,18)    'DAC (18) color Blueă  for i=10 to 13              '4 x paint-color for right >> Blueă    call ChangeColor(18,i)    'color 10-13ă  next iă  call SetColor(0,0,63,21)    'DAC (21) color Light blueăreturnăăMakeColorslight:ă  for i=2 to 5ă    call ChangeColor(19,i)ă  next iă  for i=6 to 9ă    call ChangeColor(20,i)ă  next iă  for i=10 to 13ă    call ChangeColor(21,i)ă  next iăreturnăăsimulation:ădt!=.2   ' try an other valueădoă  locate 1,1ă  print" Hit spacebar for stop.";ă  print"            "ă  doă    call ChangeColor(19,2)    '\ă    call ChangeColor(20,6)    '|  Make the colors of the boxes 1 lightă    call ChangeColor(21,10)   '/ă    call ChangeColor(16,5)    '\ă    call ChangeColor(17,9)    '|  Make the colors of the boxes 4 darkă    call ChangeColor(18,13)   '/ă    t!=timeră    while timer<t!+dt!:wendă    call ChangeColor(19,3)    '\ă    call ChangeColor(20,7)    '|  Make the colors of the boxes 2 lightă    call ChangeColor(21,11)   '/ă    call ChangeColor(16,2)    '\ă    call ChangeColor(17,6)    '|  Make the colors of the boxes 1 darkă    call ChangeColor(18,10)   '/ă    t!=timeră    while timer<t!+dt!:wendă    call ChangeColor(19,4)    '\ă    call ChangeColor(20,8)    '|  Make the colors of the boxes 3 lightă    call ChangeColor(21,12)   '/ă    call ChangeColor(16,3)    '\ă    call ChangeColor(17,7)    '|  Make the colors of the boxes 2 darkă    call ChangeColor(18,11)   '/ă    t!=timeră    while timer<t!+dt!:wendă    call ChangeColor(19,5)    '\ă    call ChangeColor(20,9)    '|  Make the colors of the boxes 4 lightă    call ChangeColor(21,13)   '/ă    call ChangeColor(16,4)    '\ă    call ChangeColor(17,8)    '|  Make the colors of the boxes 3 darkă    call ChangeColor(18,12)   '/ă    t!=timeră    while timer<t!+dt!:wendă  loop until inkey$=chr$(32)ă  locate 1,1ă  print" Go on with Enter.";ă  print"  Stop with Esc."ă  doă    hitakey=asc(input$(1))ă  loop until hitakey=27 or hitakey=13ăloop while hitakey=13ăreturnăăsub ChangeColor(col1,col2)    'R, G and B value from Dac (col1)ă  out &H3C7,col1              'to DAC (col2)ă  R=inp(&H3C9)ă  G=inp(&H3C9)ă  B=inp(&H3C9)ă  out &H3C8,col2ă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetColor(R,G,B,Dac)       'New R, G and B value to DAC (Dac)ă  out &H3C8,Dacă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub PaintBoxă  shared PX,PY,iă  paint(PX,PY-3),2+i mod 4,1ă  paint(PX-3,PY),6+i mod 4,1ă  paint(PX+3,PY),10+i mod 4,1ăend subăăsub NewPaletteUsingă  restore acdataă  dummy=inp(&H3DA)ă  for attr=0 to 15ă    out &H3C0,attră    read colă    out &H3C0,colă  next attră  out &H3C0,32ăend subăăinitdrawstrings:ă'========================================================================ă  s1$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s1$=s1$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s1$=s1$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s1$=s1$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y3)+"ă  s1$=s1$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s1$=s1$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s1$=s1$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ă  s2$="C1BU="+VARPTR$(y2)+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s2$=s2$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s2$=s2$+"D="+VARPTR$(y3)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s2$=s2$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y3)+"ă  s2$=s2$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s2$=s2$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"BD="+VARPTR$(y2)ă'===================ă  s2$=s2$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s2$=s2$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ă  s3$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s3$=s3$+"D="+VARPTR$(y3)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s3$=s3$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s3$=s3$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s3$=s3$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s3$=s3$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s3$=s3$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ă  s4$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s4$=s4$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s4$=s4$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s4$=s4$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s4$=s4$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y3)+"ă  s4$=s4$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s4$=s4$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s4$=s4$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y2)ă'========================================================================ă  s5$="C1BU="+VARPTR$(y2)+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s5$=s5$+"D="+VARPTR$(y2)+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s5$=s5$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s5$=s5$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y3)+"ă  s5$=s5$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s5$=s5$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"BD="+VARPTR$(y2)ă'===================ă  s5$=s5$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s5$=s5$+"NM+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ND="+VARPTR$(y3)ă'========================================================================ă  s6$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s6$=s6$+"D="+VARPTR$(y3)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s6$=s6$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s6$=s6$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s6$=s6$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s6$=s6$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"BD="+VARPTR$(y3)ă'===================ă  s6$=s6$+"NM-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s6$=s6$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ă  s7$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s7$=s7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s7$=s7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s7$=s7$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s7$=s7$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s7$=s7$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s7$=s7$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s7$=s7$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ă  s8$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s8$=s8$+"D="+VARPTR$(y3)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s8$=s8$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s8$=s8$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s8$=s8$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s8$=s8$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s8$=s8$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s8$=s8$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y2)ă'========================================================================ă  s9$="C1BU="+VARPTR$(y3)+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s9$=s9$+"D="+VARPTR$(y2)+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s9$=s9$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s9$=s9$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s9$=s9$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y3)+"ă  s9$=s9$+"M+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"BD="+VARPTR$(y3)ă'===================ă  s9$=s9$+"NM-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ă  s9$=s9$+"NM+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ND="+VARPTR$(y3)ă'========================================================================ă  s10$="C1BU="+VARPTR$(y2)+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s10$=s10$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"ă  s10$=s10$+"D="+VARPTR$(y3)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)+"ă  s10$=s10$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y2)+"ă  s10$=s10$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y2)+"ă  s10$=s10$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)+"BD="+VARPTR$(y2)ă'===================ă  s10$=s10$+"NM-="+VARPTR$(x1)+",-="+VARPTR$(y1)+"ă  s10$=s10$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)+"ND="+VARPTR$(y3)ă'========================================================================ăreturnăăacdata:ădata 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15ăJacob Wieles                   ANOTHER MOVING LIGHT SIMULATIONjacwls@worldonline.nl          03-17-99 (13:15)       QB, QBasic, PDS, PB    270  9189     MOTION-2.BAS'program        : MOTION-2.BAS  (16-03-99)ă'                 Playing with a look-a-like Penrose & Penrose stairsă'                 and simulation of moving lights stairs down with dataă'                 change in the DAC (Digital Analog Converter)ă'which basic    : PowerBASIC and Q(uick)BASICă'auteur         : Jacob Wielesăădefint a-zăix=8ăiy=4ăx1=ix:x2=2*ix:x3=3*ix:x4=4*ix:x5=5*ixăy1=iy:y2=2*iy:y3=3*iy:y4=4*iy:y5=5*iy:y6=6*iy:y8=8*iyăgosub initdrawstringsăscreen 12ăgosub initialcolorăgosub stairsăcolor 1ălocate 1,1ăprint" Hit a key for go down."ăkeyhit$=input$(1)ăgosub simulationăgosub MakeColorsLightăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for end.                      "ăhitakey$=input$(1)ăclsăscreen 0ăw!=timerăwhile timer<w!+1:wendăprint" Thank you for running this program. Hit a key for the source."ăendă'=======================================================================ăăstairs:ă  px=320+4*x4ă  py=240+13*y2ă  for i=0 to 31ă    select case iă    case 0ă      pset(px,py),1ă      draw f1$ă      paint(px,py-2),2+i mod 4,1      'topă      paint(px-1,py+1),6+i mod 4,1    'leftă      paint(px+1,py+1),10+i mod 4,1   'rightă    case 1 to 12ă      px=px-x4ă      py=py-y2ă      pset(px,py),1ă      draw f2$ă      paint(px-1,py-2),2+i mod 4,1      'topă      paint(px-1,py+1),6+i mod 4,1      'leftă      paint(px+1,py+y3),10+i mod 4,1    'rightă    case 13 to 23ă      px=px+x4ă      py=py-y2ă      if i=13 thenă        pset(px,py),2+(i-2) mod 4ă        draw f3$ă        paint(px,py-y6),2+i mod 4,1        'topă        paint(px+x3,py-y2),10+i mod 4,1    'rightă      end ifă      if i=14 thenă        pset(px,py),1ă        draw f4$ă        paint(px,py-y6),2+i mod 4,1      'topă        paint(px+2,py),10+i mod 4,1      'rightă      end ifă      if i>14 thenă        pset(px,py),1ă        draw f5$ă        paint(px,py-y6),2+i mod 4,1      'topă        paint(px-1,py+y3),6+i mod 4,1    'leftă        paint(px+2,py),10+i mod 4,1      'rightă      end ifă    case 24ă      px=px+x4ă      py=py-y2ă      pset(px,py),1ă      draw f6$ă      paint(px,py-y6),2+i mod 4,1      'topă      paint(px-1,py+y3),6+i mod 4,1    'leftă      paint(px+2,py),10+i mod 4,1      'rightă    case 25 to 27ă      px=px+x4ă      py=py+y6ă      pset(px,py),1ă      draw f7$ă      paint(px,py-2),2+i mod 4,1      'topă      paint(px-2,py),6+i mod 4,1      'leftă      paint(px+2,py),10+i mod 4,1     'rightă    case 28ă      px=px+x4ă      py=py+y6ă      pset(px,py),1ă      draw f8$ă      paint(px,py-2),2+i mod 4,1      'topă      paint(px-2,py),6+i mod 4,1      'leftă      paint(px+2,py),10+i mod 4,1     'rightă    case 29 to 31ă      px=px-x4ă      py=py+y6ă      pset(px,py),1ă      draw f8$ă      paint(px,py-2),2+i mod 4,1      'topă      paint(px-2,py),6+i mod 4,1      'leftă      paint(px+2,py),10+i mod 4,1     'rightă    end selectă  next iăreturnăăinitialcolor:ă  call NewPaletteUsing        '===>>>  PB  set AC (0-15) to (0-15)ă  call SetColor(0,0,0,1)      'Color 1 : Blackă  call SetColor(63,63,63,0)   'Background color Whiteăă  call SetColor(0,50,0,16)    'DAC (16) color Greenă  call SetColor(50,0,0,17)    'DAC (17) color Redă  call SetColor(0,0,50,18)    'DAC (18) color Blueă  call SetColor(0,63,0,19)    'DAC (19) color Light greenă  call SetColor(63,0,0,20)    'DAC (20) color Light redă  call SetColor(0,0,63,21)    'DAC (21) color Light blueă  for i=2 to 5                '4 x paint-color for top >> Greenă    call ChangeColor(16,i)    'color 2-5ă  next iă  for i=6 to 9                '4 x paint-color for left >> Redă    call ChangeColor(17,i)    'color 6-9ă  next iă  for i=10 to 13              '4 x paint-color for right >> Blueă    call ChangeColor(18,i)    'color 10-13ă  next iăreturnăăMakeColorslight:ă  for i=2 to 5ă    call ChangeColor(19,i)ă  next iă  for i=6 to 9ă    call ChangeColor(20,i)ă  next iă  for i=10 to 13ă    call ChangeColor(21,i)ă  next iăreturnăăsimulation:ădt!=.2   ' try an other valueădoă  locate 1,1ă  print" Hit spacebar for stop.";ă  print"            "ă  doă    for i=0 to 3ă    call ChangeColor(19,2+i)    '\ă    call ChangeColor(20,6+i)    '|  Make the colors of the boxes lightă    call ChangeColor(21,10+i)   '/ă    call ChangeColor(16,5-(4-i) mod 4)    '\ă    call ChangeColor(17,9-(4-i) mod 4)    '|  Make the colors darkă    call ChangeColor(18,13-(4-i) mod 4)   '/ă    t!=timeră    while timer<t!+dt!:wendă  next iă  loop until inkey$=chr$(32)ă  locate 1,1ă  print" Go on with Enter.";ă  print"  Stop with Esc."ă  doă    hitakey=asc(input$(1))ă  loop until hitakey=27 or hitakey=13ăloop while hitakey=13ăreturnăăsub ChangeColor(col1,col2)    'R, G and B value from Dac (col1)ă  out &H3C7,col1              'to DAC (col2)ă  R=inp(&H3C9)ă  G=inp(&H3C9)ă  B=inp(&H3C9)ă  out &H3C8,col2ă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetColor(R,G,B,Dac)       'New R, G and B value to DAC (Dac)ă  out &H3C8,Dacă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub NewPaletteUsingă  restore acdataă  dummy=inp(&H3DA)ă  for attr=0 to 15ă    out &H3C0,attră    read colă    out &H3C0,colă  next attră  out &H3C0,32ăend subăăinitdrawstrings:ă'=======================================================================ă  f1$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f1$=f1$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f1$=f1$+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)+"U="+VARPTR$(y4)ă  f1$=f1$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f1$=f1$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f1$=f1$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y4)ă'=======================================================================ă  f2$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x3)+",+="+VARPTR$(y3)ă  f2$=f2$+"M-="+VARPTR$(x3)+",+="+VARPTR$(y3)ă  f2$=f2$+"D="+VARPTR$(y4)+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f2$=f2$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f2$=f2$+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)+"U="+VARPTR$(y4)ă  f2$=f2$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f2$=f2$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f2$=f2$+"ND="+VARPTR$(y4)ă'=======================================================================ă  f3$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f3$=f3$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f3$=f3$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)ă  f3$=f3$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f3$=f3$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă'========================================================================ă  f4$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f4$=f4$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)ă  f4$=f4$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y2)ă  f4$=f4$+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f4$=f4$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f4$=f4$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)ă'========================================================================ă  f5$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f5$=f5$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f5$=f5$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)ă  f5$=f5$+"M+="+VARPTR$(x1)+",-="+VARPTR$(y1)+"U="+VARPTR$(y4)ă  f5$=f5$+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f5$=f5$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f5$=f5$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y4)ă'========================================================================ă  f6$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f6$=f6$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x5)+",+="+VARPTR$(y5)ă  f6$=f6$+"M+="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f6$=f6$+"U="+VARPTR$(y6)+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f6$=f6$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f6$=f6$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)ă'========================================================================ă  f7$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f7$=f7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f7$=f7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f7$=f7$+"U="+VARPTR$(y4)ă  f7$=f7$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f7$=f7$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f7$=f7$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y2)ă'========================================================================ă  f8$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f8$=f8$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f8$=f8$+"U="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f8$=f8$+"U="+VARPTR$(y2)ă  f8$=f8$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f8$=f8$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f8$=f8$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y2)ă'========================================================================ăreturnăăacdata:ădata 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15ăJacob Wieles                   MOVING LIGHTS STAIRS DOWN      jacwls@worldonline.nl          03-17-99 (13:15)       QB, QBasic, PDS, PB    326  11749    MOTION-3.BAS'program        : MOTION-3.BAS  (16-03-99)ă'                 Playing with a mix of Penrose & Penrose andă'                 Oscar Reutersv„rd stairs and simulation ofă'                 moving lights stairs down with data changeă'                 in the DAC (Digital Analog Converter)ă'which basic    : PowerBASIC and Q(uick)BASICă'auteur         : Jacob Wielesăădefint a-zăix=2ăiy=2ăx1=ix:x2=2*ix:x3=3*ix:x4=4*ix:x6=6*ix:x7=7*ix:x8=8*ix:x9=9*ixăx10=10*ix:x11=11*ix:x12=12*ix:x13=13*ix:x16=16*ixăy1=iy:y2=2*iy:y3=3*iy:y4=4*iy:y6=6*iy:y8=8*iyăy12=12*iy:y13=13*iy:y16=16*iyăgosub InitShapesăscreen 12ăgosub initialcolorăgosub stairsăcolor 1ălocate 1,1ăprint" Hit a key for go down."ăkeyhit$=input$(1)ăgosub simulationăgosub MakeColorsLightăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for end.                      "ăhitakey$=input$(1)ăclsăscreen 0ăprint" Thank you for running this program. Hit a key for the source."ăendă'=======================================================================ăăStairs:ăpx=520ăpy=140ăfor i=0 to 34ă  select case iă  case 0ă    pxp=pxă    pyp=pyă    pset(pxp,pyp)ă    draw s01$ă    paint(pxp,pyp-2),2+i mod 5,1      'topă    paint(pxp-2,pyp),7,1              'leftă    paint(pxp+2,pyp),8,1              'rightă  case 1 to 10ă    pxp=pxp-x6ă    pyp=pyp+y12ă    pset(pxp,pyp),1ă    if i<10 thenă      draw s08$ă      paint(pxp,pyp-2),2+i mod 5,1ă      paint(pxp-2,pyp),7,1ă      paint(pxp+2,pyp),8,1ă    elseă      draw s08b$ă      paint(pxp,pyp-y1),2+i mod 5,1ă      paint(pxp+x1,pyp),8,1ă    end ifă  case 11ă    pxp=pxp-x12:pyp=pyp+y8ă    pset(pxp,pyp),1ă    draw s01$ă    paint(pxp,pyp-2),2+i mod 5,1ă    paint(pxp-2,pyp),7,1ă    paint(pxp+2,pyp),8,1ă  case 12 to 19ă    pxp=pxp-x16:pyp=pyp-y8ă    pset(pxp,pyp),1ă    draw s06$ă    paint(pxp,pyp-2),2+i mod 5,1ă    paint(pxp-2,pyp),7,1ă  case 20ă    pxp=pxp+x12:pyp=pyp-y8ă    pset(pxp,pyp),1ă    draw s07v$ă    paint(pxp,pyp-2),2+i mod 5,1ă    paint(pxp+2,pyp),8,1ă  case 21 to 24ă    pxp=pxp+x12:pyp=pyp-y8ă    pset(pxp,pyp),1ă    draw s07$ă    paint(pxp,pyp-2),2+i mod 5,1ă    paint(pxp+2,pyp),8,1ă  case 25 to 32ă    pxp=pxp+x12:pyp=pyp-y4ă    pset(pxp,pyp),1ă    draw s03$ă    paint(pxp+2,pyp-y4),2+i mod 5,1ă    paint(pxp-2,pyp+y6),7,1ă    paint(pxp+2,pyp),8,1ă  case 33ă    pxp=pxp+x12:pyp=pyp-y8ă    pset(pxp,pyp),1ă    draw s03e$ă    paint(pxp,pyp-y1),2+i mod 5,1ă  case 34ă    pxp=pxp+x16:pyp=pyp+y8ă    pset(pxp,pyp),1ă    draw s06$ă    paint(pxp,pyp-2),2+i mod 5,1ă    paint(pxp-2,pyp),7,1ă  end selectănext iăreturnăăinitialcolor:ă  call NewPaletteUsing        '===>>>  PB  set AC (0-15) to (0-15)ă  call SetColor(0,0,0,1)      'Color 1: Blackă  call SetColor(63,63,63,0)   'Background color Whiteă  call SetColor(50,0,0,7)     'DAC (7) color Redă  call SetColor(0,0,50,8)     'DAC (8) color Blueă  call SetColor(0,50,0,9)     'DAC (9) color Greenă  call SetColor(63,0,0,10)    'DAC (10) color Light redă  call SetColor(0,0,63,11)    'DAC (11) color Light blueă  call SetColor(0,63,0,12)    'DAC (12) color Light greenă  for i=2 to 6                '5 x paint-color for top >> greenă    call ChangeColor(9,i)     'DAC data 2-6ă  next iăreturnăăMakeColorslight:ă  for i=2 to 6ă    call ChangeColor(12,i)ă  next iă  call ChangeColor(10,7)ă  call ChangeColor(11,8)ăreturnăăsimulation:ădt!=.2   ' try an other valueădoă  locate 1,1ă  print" Hit spacebar for stop.";ă  print"            "ă  doă    for i=0 to 4ă      call ChangeColor(12,2+i)           '  Make the colors lightă      call ChangeColor(9,6-(5-i) mod 5)  '  Make the colors darkă      t!=timeră      while timer<t!+dt!:wendă    next iă  loop until inkey$=chr$(32)ă  locate 1,1ă  print" Go on with Enter.";ă  print"  Stop with Esc."ă  doă    hitakey=asc(input$(1))ă  loop until hitakey=27 or hitakey=13ăloop while hitakey=13ăreturnăăsub ChangeColor(col1,col2)    'R, G and B value from Dac (col1)ă  out &H3C7,col1              'to DAC (col2)ă  R=inp(&H3C9)ă  G=inp(&H3C9)ă  B=inp(&H3C9)ă  out &H3C8,col2ă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetColor(R,G,B,Dac)       'New R, G and B value to DAC (Dac)ă  out &H3C8,Dacă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub NewPaletteUsingă  restore acdataă  dummy=inp(&H3DA)ă  for attr=0 to 15ă    out &H3C0,attră    read colă    out &H3C0,colă  next attră  out &H3C0,32ăend subăăInitShapes:ă'==============================================================ăs01$="c1m+="+varptr$(x12)+",-="+varptr$(y8)ăs01$=s01$+"nm-="+varptr$(x16)+",-="+varptr$(y8)+"d="+varptr$(y8)ăs01$=s01$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs01$=s01$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs01$=s01$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ăs01$=s01$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"nd="+varptr$(y8)ă'================================================================ăs02$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs02$=s02$+"m+="+varptr$(x13)+",+="+varptr$(y6)ăs02$=s02$+"m-="+varptr$(x9)+",+="+varptr$(y6)+"d="+varptr$(y8)ăs02$=s02$+"nd="+varptr$(y4)ăs02$=s02$+"m+="+varptr$(x3)+",+="+varptr$(y2)ăs02$=s02$+"m-="+varptr$(x3)+",+="+varptr$(y2)ăs02$=s02$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs02$=s02$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs02$=s02$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs02$=s02$+"nm-="+varptr$(x16)+",-="+varptr$(y8)ă'==============================================================ăs03$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs03$=s03$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs03$=s03$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"nu="+varptr$(y4)ăs03$=s03$+"m-="+varptr$(x3)+",-="+varptr$(y2)ăs03$=s03$+"m+="+varptr$(x3)+",-="+varptr$(y2)+"u="+varptr$(y8)ăs03$=s03$+"bm-="+varptr$(x13)+",-="+varptr$(y6)ăs03$=s03$+"m+="+varptr$(x9)+",-="+varptr$(y6)ăs03$=s03$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs03$=s03$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ă'==============================================================ăs03b$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs03b$=s03b$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y4)ăs03b$=s03b$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs03b$=s03b$+"m-="+varptr$(x3)+",+="+varptr$(y2)ăs03b$=s03b$+"m+="+varptr$(x3)+",+="+varptr$(y2)+"u="+varptr$(y12)ăs03b$=s03b$+"bm-="+varptr$(x13)+",-="+varptr$(y6)ăs03b$=s03b$+"m+="+varptr$(x9)+",-="+varptr$(y6)ăs03b$=s03b$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs03b$=s03b$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ă'==============================================================ăs03e$="c1m+="+varptr$(x12)+",-="+varptr$(y8)ăs03e$=s03e$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs03e$=s03e$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs03e$=s03e$+"m+="+varptr$(x16)+",+="+varptr$(y8)ă'==============================================================ăăs04$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs04$=s04$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y4)ăs04$=s04$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"d="+varptr$(y4)ăs04$=s04$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs04$=s04$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs04$=s04$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs04$=s04$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ăs04$=s04$+"nm-="+varptr$(x16)+",-="+varptr$(y8)+"nd="+varptr$(y4)ă'==============================================================ăăs05$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs05$=s05$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs05$=s05$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"u="+varptr$(y4)ăs05$=s05$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y4)ăs05$=s05$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs05$=s05$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs05$=s05$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ăs05$=s05$+"nm-="+varptr$(x16)+",-="+varptr$(y8)+"nd="+varptr$(y4)ă'==============================================================ăs06$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs06$=s06$+"m+="+varptr$(x16)+",+="+varptr$(y8)ăs06$=s06$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs06$=s06$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs06$=s06$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs06$=s06$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs06$=s06$+"m-="+varptr$(x16)+",-="+varptr$(y8)ă'==============================================================ăs06h$="c1bm+="+varptr$(x4)+",-="+varptr$(y12)ăs06h$=s06h$+"m+="+varptr$(x8)+",+="+varptr$(y4)ăs06h$=s06h$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs06h$=s06h$+"m-="+varptr$(x8)+",-="+varptr$(y4)+"u="+varptr$(y8)ăs06h$=s06h$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs06h$=s06h$+"bm-="+varptr$(x4)+",+="+varptr$(y12)ăs06h$=s06h$+"nm-="+varptr$(x8)+",-="+varptr$(y4)ă'==============================================================ăs07$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs07$=s07$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs07$=s07$+"m-="+varptr$(x12)+",+="+varptr$(y8)+"u="+varptr$(y8)ăs07$=s07$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs07$=s07$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs07$=s07$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs07$=s07$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ă'================================================ăs07v$="c1bm-="+varptr$(x4)+",-="+varptr$(y16)ăs07v$=s07v$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"d="+varptr$(y8)ăs07v$=s07v$+"m-="+varptr$(x6)+",+="+varptr$(y4)ăs07v$=s07v$+"bm-="+varptr$(x6)+",-="+varptr$(y4)ăs07v$=s07v$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs07v$=s07v$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs07v$=s07v$+"bm+="+varptr$(x4)+",+="+varptr$(y16)ăs07v$=s07v$+"nm+="+varptr$(x12)+",-="+varptr$(y8)ă'==============================================================ăs08$="c1bm+="+varptr$(x12)+",-="+varptr$(y8)ăs08$=s08$+"d="+varptr$(y8)ăs08$=s08$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs08$=s08$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs08$=s08$+"m+="+varptr$(x6)+",-="+varptr$(y4)ăs08$=s08$+"bm+="+varptr$(x10)+",+="+varptr$(y12)ăs08$=s08$+"nm+="+varptr$(x6)+",-="+varptr$(y4)ăs08$=s08$+"nm-="+varptr$(x16)+",-="+varptr$(y8)+"nd="+varptr$(y8)ă'==============================================================ăs08b$="c1m+="+varptr$(x12)+",-="+varptr$(y8)ăs08b$=s08b$+"d="+varptr$(y8)ăs08b$=s08b$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs08b$=s08b$+"u="+varptr$(y8)ăs08b$=s08b$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs08b$=s08b$+"nm+="+varptr$(x6)+",-="+varptr$(y4)ăs08b$=s08b$+"bm+="+varptr$(x16)+",+="+varptr$(y8)ă'=================================================================ăs09$="c1m+="+varptr$(x12)+",-="+varptr$(y8)ăs09$=s09$+"nm-="+varptr$(x6)+",-="+varptr$(y3)+"d="+varptr$(y8)ăs09$=s09$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs09$=s09$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs09$=s09$+"nu="+varptr$(y1)+"br="+varptr$(x16)ăs09$=s09$+"nd="+varptr$(y8)ă'==============================================================ăs10$="c1d="+varptr$(y8)ăs10$=s10$+"nm+="+varptr$(x7)+",-="+varptr$(y4)ăs10$=s10$+"m-="+varptr$(x16)+",-="+varptr$(y8)+"u="+varptr$(y8)ăs10$=s10$+"m+="+varptr$(x12)+",-="+varptr$(y8)ăs10$=s10$+"nm+="+varptr$(x1)+",+="+varptr$(y1)ăs10$=s10$+"bm-="+varptr$(x12)+",+="+varptr$(y8)ăs10$=s10$+"m+="+varptr$(x16)+",+="+varptr$(y8)+"nd="+varptr$(y8)ă'================================================================ăs11$="c1m+="+varptr$(x12)+",-="+varptr$(y8)ăs11$=s11$+"nm-="+varptr$(x8)+",-="+varptr$(y4)+"d="+varptr$(y8)ăs11$=s11$+"m-="+varptr$(x12)+",+="+varptr$(y8)ăs11$=s11$+"m-="+varptr$(x16)+",-="+varptr$(y8)ăs11$=s11$+"u="+varptr$(y8)ăs11$=s11$+"m+="+varptr$(x16)+",+="+varptr$(y8)ăs11$=s11$+"nd="+varptr$(y8)ă'==============================================================ăreturnăăacdata:ădata 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15ăJacob Wieles                   MOVING LIGHTS STAIRS UP        jacwls@worldonline.nl          03-17-99 (13:15)       QB, QBasic, PDS, PB    363  10212    MOTION-4.BAS'program        : MOTION-4.BAS  (16-03-99)ă'                 Playing with a look-a-like Penrose & Penrose stairsă'                 and simulation of moving lights stairs up with dataă'                 change in the DAC (Digital Analog Converter)ă'which basic    : PowerBASIC and Q(uick)BASICă'auteur         : Jacob Wielesăădefint a-zăix=8ăiy=4ăx1=ix:x2=2*ix:x3=3*ix:x4=4*ix:x5=5*ixăy1=iy:y2=2*iy:y3=3*iy:y4=4*iy:y5=5*iy:y6=6*iy:y8=8*iyăpxst=320+5*x2ăpyst=240-2*y4ăgosub initdrawstringsăscreen 12ăgosub initialcolorăcolor 1ăgosub Stairsăcall HitKey("Walls")ăgosub Wallsăcall HitKey("Briks")ăgosub Briksăcall HitKey("Go up")ăgosub simulationăgosub MakeColorsLightăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for end.                      "ăhitakey$=input$(1)ăeinde:ăclsăscreen 0ăw!=timerăwhile timer<w!+1:wendăprint" Thank you for running this program. Hit a key for the source."ăendă'=======================================================================ăStairs:ă  px=pxstă  py=pystă  for i=0 to 23ă    select case iă    case 0ă    pset(px,py),1ă    draw f1$ă    paint(px,py-2),7-i mod 6,1      'topă    paint(px-1,py+1),9,1            'leftă    paint(px+1,py+1),8,1            'rightă    case 1 to 9ă      px=px-x4ă      py=py-y2ă      pset(px,py),1ă      draw f2$ă      paint(px-1,py-2),7-i mod 6,1  'topă      paint(px-1,py+1),9,1          'leftă    case 10 to 17ă      px=px+x4ă      py=py-y2ă      if i=10 thenă        pset(px,py),10ă        draw f3$ă        paint(px,py-y6),7-i mod 6,1 'topă        paint(px+x3,py-y2),8,1      'rightă      end ifă      if i=11 thenă        pset(px,py),1ă        draw f4$ă        paint(px,py-y6),7-i mod 6,1 'topă        paint(px+2,py),8,1          'rightă      end ifă      if i>11 thenă        pset(px,py),1ă        draw f5$ă        paint(px,py-y6),7-i mod 6,1 'topă        paint(px+2,py),8,1          'rightă      end ifă    case 18ă      px=px+x4ă      py=py-y2ă      pset(px,py),1ă      draw f6$ă      paint(px,py-y6),7-i mod 6,1   'topă      paint(px+2,py),8,1            'rightă    case 19,20ă      px=px+x4ă      py=py+y6ă      pset(px,py),1ă      draw f7$ă      paint(px,py-2),7-i mod 6,1    'topă      paint(px-2,py),9,1            'leftă      paint(px+2,py),8,1            'rightă    case 21ă      px=px+x4ă      py=py+y6ă      pset(px,py),1ă      draw f8$ă      paint(px,py-2),7-i mod 6,1    'topă      paint(px-1,py+1),9,1          'leftă      paint(px+1,py+1),8,1          'rightă    case 22,23ă      px=px-x4ă      py=py+y6ă      pset(px,py),1ă      draw f8$ă      paint(px,py-2),7-i mod 6,1    'topă      paint(px-1,py+1),9,1          'leftă      paint(px+1,py+1),8,1          'rightă    end selectă  next iăreturnăăWalls:ăpx=pxst+4*x4ăpy=pyst-9*y2ăpset(px,py)ăline-step(0,27*y2),1ăline-step(-4*x4,4*y4),1ădu=12*y4ădraw"c1nu="+varptr$(du)ăline-step(-10*x4,-10*y4),1ăline-step(0,-15*y2),1ăpaint(point(0)+x1,point(1)+y2),9,1ăpaint(px-x4,py+2*y4),8,1ăpx=pxstăpy=pystăline(px,py-5*y2)-(px,py-15*y2),1ăpaint(px-x2,py-7*y2),8,1ăpaint(px+x2,py-7*y2),9,1ăpaint(px-5*x5,py-10*y2),8,1ă'==================================ăpx=pxst+4*x4ăpy=pyst+7*y4ăpset(px,py)ăline-step(2*x4,2*y4),1ăline-step(-6*x4,6*y4),1ăline-step(-12*x4,-12*y4),1ăline-step(2*x4,-2*y4),1ăpaint(px+x2,py+y4),10,1ăreturnăăBriks:ăpx=pxst+4*x4ăpy=pyst-9*y2ăfor i=1 to 3ă  pset(px-i*x4,py+i*y6)ă  line-step(0,27*y2-i*y2),1ănext iăfor i=0 to 3ă  pyw=py+i*y6ă  for j=1 to 13-i/2ă    pset(px-i*x4,pyw+j*y4)ă    line-step(-x4,y4),1ă  next jănext iă'=================================ăpx=pxstăpy=pyst+y4ăfor i=1 to 9ă  pset(px-i*x4,py-i*y2)ă  line-step(0,24*y2-i*y2),1ănext iăfor i=0 to 9ă  if i=0 or i=1 then k=0ă  if i=2 or i=3 then k=1ă  if i=4 or i=5 then k=2ă  if i=6 or i=7 then k=3ă  if i=8 or i=9 then k=4ă  pyw=py-i*y2ă  for j=1 to 11-kă    pset(px-i*x4,pyw+j*y4)ă    line-step(-x4,-y4),1ă  next jănext iă'=====================================ăpx=pxst-6*x4ăpy=pyst-5*y4ăfor i=1 to 5ă  pset(px+i*x4,py-i*y2)ă  line-step(0,i*y4),1ănext iăfor i=0 to 5ă  k=0ă  for j=1+i to 6ă    pset(px+j*x4,py+i*y4-(j-1)*y2)ă    if k=0 thenă      line-step(-x2,y2),1ă    elseă      line-step(-x4,y4),1ă    end ifă    k=1ă  next jănext iăăpx=pxstăpy=pyst-13*y2ăpset(px+x4,py+y2)ăline-step(0,2*y4),1ăpset(px+x4,py+y6)ăline-step(x2,y2),1ăfor i=0 to 3ă  pset(px,py+i*y4)ă  if i<3 thenă    line-step(x4,y4),1ă  elseă    line-step(x2,y2),1ă  end ifănext iăreturnăăăinitialcolor:ă  call NewPaletteUsing        '===>>>  PB  set AC (0-15) to (0-15)ă  call SetColor(0,0,0,1)      'Color 1: Blackă  call SetColor(63,63,63,0)   'Background color Whiteă  call SetColor(63,0,0,8)     'DAC (8) color Light redă  call SetColor(0,0,63,9)     'DAC (9) color Light blueă  call SetColor(0,63,0,10)    'DAC (10) color Light greenă  call SetColor(0,50,0,11)    'DAC (16) color Greenăă  for i=2 to 7                '6 x paint-color for top >> Greenă    call ChangeColor(11,i)    'color 2-7ă  next iăreturnăăMakeColorslight:ă  for i=2 to 7ă    call ChangeColor(10,i)ă  next iăreturnăăsimulation:ădt!=.2   ' try an other valueădoă  locate 1,1ă  print" Hit spacebar for stop.";ă  print"            "ă  doă    for i=0 to 5ă      call ChangeColor(10,2+i)            ' Make the color lightă      call ChangeColor(11,7-(6-i) mod 6)  ' Make the color darkă      t!=timeră      while timer<t!+dt!:wendă    next iă  loop until inkey$=chr$(32)ă  locate 1,1ă  print" Go on with Enter.";ă  print"  Stop with Esc."ă  doă    hitakey=asc(input$(1))ă  loop until hitakey=27 or hitakey=13ăloop while hitakey=13ăreturnăă'============================================================ăsub HitKey(HK$)ă  while inkey$<>"":wendă  locate 1,1ă  print" Hit Key for ";ă  print HK$;ă  hit$=input$(1)ă  locate 1,1ă  print"             ";ă  print space$(len(hk$))ăend subăăăsub ChangeColor(col1,col2)    'R, G and B value from Dac (col1)ă  out &H3C7,col1              'to DAC (col2)ă  R=inp(&H3C9)ă  G=inp(&H3C9)ă  B=inp(&H3C9)ă  out &H3C8,col2ă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub SetColor(R,G,B,Dac)       'New R, G and B value to DAC (Dac)ă  out &H3C8,Dacă  out &H3C9,Ră  out &H3C9,Gă  out &H3C9,Băend subăăsub NewPaletteUsingă  restore acdataă  dummy=inp(&H3DA)ă  for attr=0 to 15ă    out &H3C0,attră    read colă    out &H3C0,colă  next attră  out &H3C0,32ăend subăăăinitdrawstrings:ă'=======================================================================ă  f1$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f1$=f1$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f1$=f1$+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)+"U="+VARPTR$(y4)ă  f1$=f1$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f1$=f1$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f1$=f1$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y4)ă'=======================================================================ă  f2$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x3)+",+="+VARPTR$(y3)ă  f2$=f2$+"M-="+VARPTR$(x3)+",+="+VARPTR$(y3)ă  f2$=f2$+"D="+VARPTR$(y6)ă  f2$=f2$+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)+"U="+VARPTR$(y4)ă  f2$=f2$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f2$=f2$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f2$=f2$+"ND="+VARPTR$(y4)ă'=======================================================================ă  f3$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f3$=f3$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f3$=f3$+"M-="+VARPTR$(x1)+",-="+VARPTR$(y1)ă  f3$=f3$+"NM+="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M-="+VARPTR$(x1)+",+="+VARPTR$(y1)ă  f3$=f3$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)ă  f3$=f3$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă'========================================================================ă  f4$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f4$=f4$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x2)+",+="+VARPTR$(y2)ă  f4$=f4$+"M-="+VARPTR$(x2)+",-="+VARPTR$(y2)+"U="+VARPTR$(y2)ă  f4$=f4$+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f4$=f4$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f4$=f4$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)ă'========================================================================ă  f5$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f5$=f5$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f5$=f5$+"U="+VARPTR$(y6)ă  f5$=f5$+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f5$=f5$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f5$=f5$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y4)ă'========================================================================ă  f6$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f6$=f6$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f6$=f6$+"U="+VARPTR$(y4)+"M-="+VARPTR$(x3)+",-="+VARPTR$(y3)ă  f6$=f6$+"M+="+VARPTR$(x3)+",-="+VARPTR$(y3)+"BD="+VARPTR$(y8)ă  f6$=f6$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)ă'========================================================================ă  f7$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f7$=f7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f7$=f7$+"D="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f7$=f7$+"U="+VARPTR$(y4)ă  f7$=f7$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f7$=f7$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f7$=f7$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y2)ă'========================================================================ă  f8$="C1BU="+VARPTR$(y8)+"M+="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f8$=f8$+"D="+VARPTR$(y4)+"M-="+VARPTR$(x4)+",+="+VARPTR$(y4)ă  f8$=f8$+"U="+VARPTR$(y2)+"M-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f8$=f8$+"U="+VARPTR$(y2)ă  f8$=f8$+"M+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"BD="+VARPTR$(y8)ă  f8$=f8$+"NM-="+VARPTR$(x4)+",-="+VARPTR$(y4)ă  f8$=f8$+"NM+="+VARPTR$(x4)+",-="+VARPTR$(y4)+"ND="+VARPTR$(y2)ă'========================================================================ăreturnăăacdata:ădata 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15ăJernej Simoncic                MAKE ANY SIZE .BMP FILE        jernej.simoncic@guest.arnes.si 03-23-99 (08:41)       QB, QBasic, PDS        173  5904     MAKEBMP.BAS DEFINT A-ZăDECLARE SUB MakeBMP (file$, xStart%, yStart%, xEnd%, yEnd%, BPP%)ăăTYPE BMPheaderă     Ident AS STRING * 2     ' "BM"ă     Size AS LONG            ' file size (x*y+header+pal)ă     Reserved AS LONG        ' junkă     Offset AS LONG          ' header+paletteă     HeaderSize AS LONG      ' 40ă     xRes AS LONG            ' x resolutionă     yRes AS LONG            ' y resolutionă     Planes AS INTEGER       ' 1ă     BPP AS INTEGER          ' bits per pixelă     Compression AS LONG     ' 0-none/1,2-rleă     ImageSize AS LONG       ' x*yă     PixPerMetreX AS LONG    ' 3790ă     PixPerMetreY AS LONG    ' 3780ă     UsedColors AS LONGă     ImportantColors AS LONGăEND TYPEăDIM SHARED BMPheader AS BMPheaderăă'----------------------------------------------------------------------------ă'Demo: (you can safetly delete this)ăăSCREEN 12ăăFOR i% = 0 TO 300ă     IF RND AND 1 THENă          x = INT(RND * 640)ă          y = INT(RND * 480)ă          c = INT(RND * 16)ă          CIRCLE (x, y), INT(RND * 30), că          IF RND AND 1 THENă               PAINT (x, y), INT(RND * 16), că          END IFă     ELSEă          LINE (INT(RND * 640), INT(RND * 480))-(INT(RND * 640), INT(RND * 480)), INT(RND * 16)ă     END IFăNEXTăăMakeBMP "test.bmp", 20, 20, 619, 459, 4ăă'ă' MakeBMP - make any size Windows 3.0 BMP fileă'ă' Usage:ă'    MakeBMP file$, xStart, yStart, xEnd, yEnd, BPPă'ă'    file$     name of file to makeă'    xStart    starting x coordinateă'    yStart    starting y coordinateă'    xEnd      ending x coordinateă'    yEnd      ending y coordinateă'    BPP       bits per pixel (8 - 256 colors, 4 - 16 colors, 1 - 2 colors)ă'ă' Freeware by Jernej Simoncică'ă' Send comments, quetions, etc. to jernej.simoncic@guest.arnes.si oră' ICQ#: 26266467ă' You can visit my homepage at: http://www2.arnes.si/~sopjsimo/ă'ăSUB MakeBMP (file$, xStart, yStart, xEnd, yEnd, BPP)ăă     IF BPP <> 8 AND BPP <> 4 AND BPP <> 1 THEN EXIT SUBă     IF BPP = 8 THENă          div = 1ă     ELSEIF BPP = 4 THENă          div = 2ă     ELSEă          div = 8ă     END IFă    ă     BMPheader.xRes = xEnd - xStart + 1ă     BMPheader.yRes = yEnd - yStart + 1ă     ă     BMPheader.Ident = "BM"ă     BMPheader.Size = (BMPheader.xRes * BMPheader.yRes) \ div + 54 + 4 * 2 ^ BPPă     BMPheader.Reserved = 0ă     BMPheader.Offset = 54 + 4 * 2 ^ BPPă     BMPheader.HeaderSize = 40ă     BMPheader.Planes = 1ă     BMPheader.BPP = BPPă     BMPheader.Compression = 0ă     BMPheader.ImageSize = (BMPheader.xRes * BMPheader.yRes) \ divă     BMPheader.PixPerMetreX = 3790ă     BMPheader.PixPerMetreY = 3780ă     BMPheader.UsedColors = 0ă     BMPheader.ImportantColors = 0ăă     BMPfile = FREEFILEă     OPEN file$ FOR BINARY AS BMPfileăă     PUT BMPfile, , BMPheaderăă     SELECT CASE BPPă          CASE 8ă               pal$ = SPACE$(1024)ă               FOR c% = 0 TO 255ă                    OUT &H3C7, c%ă                    r% = (INP(&H3C9) * 65280) \ 16128ă                    g% = (INP(&H3C9) * 65280) \ 16128ă                    b% = (INP(&H3C9) * 65280) \ 16128ă                    MID$(pal$, c% * 4 + 1, 3) = CHR$(b%) + CHR$(g%) + CHR$(r%)ă               NEXTă          CASE 4ă               pal$ = SPACE$(64)ă               FOR c% = 0 TO 15ă                    OUT &H3C7, c%ă                    r% = (INP(&H3C9) * 65280) \ 16128ă                    g% = (INP(&H3C9) * 65280) \ 16128ă                    b% = (INP(&H3C9) * 65280) \ 16128ă                    MID$(pal$, c% * 4 + 1, 3) = CHR$(b%) + CHR$(g%) + CHR$(r%)ă               NEXTă          CASE 1ă               pal$ = SPACE$(8)ă               FOR c% = 0 TO 1ă                    OUT &H3C7, c%ă                    r% = (INP(&H3C9) * 65280) \ 16128ă                    g% = (INP(&H3C9) * 65280) \ 16128ă                    b% = (INP(&H3C9) * 65280) \ 16128ă                    MID$(pal$, c% * 4 + 1, 3) = CHR$(b%) + CHR$(g%) + CHR$(r%)ă               NEXTă     END SELECTăă     PUT BMPfile, , pal$ăă     SELECT CASE BPPă          CASE 8ă               line$ = SPACE$((INT((BMPheader.xRes - 1) / 4) + 1) * 4)ă               FOR y% = yEnd TO yStart STEP -1ă                    FOR x% = xStart TO xEndă                         MID$(line$, x% - xStart + 1, 1) = CHR$(POINT(x%, y%))ă                    NEXTă                    LINE (xStart, y%)-(xEnd, y%), 0ă                    PUT BMPfile, , line$ă               NEXTă          CASE 4ă               line$ = SPACE$((INT((BMPheader.xRes - 1) / 8) + 1) * 4)ă               FOR y% = yEnd TO yStart STEP -1ă                    FOR x% = xStart TO xEnd STEP 2ă                         a = POINT(x%, y%) MOD 16ă                         b = POINT(x% + 1, y%) MOD 16ă                         p% = a * 16 + bă                         MID$(line$, (x% - xStart) / 2 + 1, 1) = CHR$(p%)ă                    NEXTă                    LINE (xStart, y%)-(xEnd, y%), 0ă                    PUT BMPfile, , line$ă               NEXTă          CASE 1ă               line$ = SPACE$((INT((BMPheader.xRes - 1) / 32) + 1) * 4)ă               DIM Look(7) AS INTEGERă               FOR b% = 0 TO 7ă                    Look(7 - b%) = 2 ^ bă               NEXTă               FOR y% = yEnd TO yStart STEP -1ă                    FOR x% = xStart TO xEnd STEP 8ă                         p% = 0ă                         FOR b% = 0 TO 7ă                              IF POINT(x% + b%, y%) <> 0 THENă                                   p% = p% + Look(b%)ă                              END IFă                         NEXTă                         MID$(line$, (x% - xStart) / 8 + 1, 1) = CHR$(p%)ă                    NEXTă                    LINE (xStart, y%)-(xEnd, y%), 0ă                    PUT BMPfile, , line$ă               NEXTă     END SELECTăă     CLOSE BMPfileă     ăEND SUBăJernej Simoncic                MARTIN FRACTALS                jernej.simoncic@guest.arnes.si 03-23-99 (08:41)       QB, QBasic, PDS        83   2198     MARTIN.BAS  ' Martin fractal program, by Alan Meissă' Converted to basic by Jernej Simoncică'ă'  Formula from "Dynamical Systems and Fractals",ă'   by Karl-Heinz Becker and Michael D”rfler,ă'   Cambridge University Press, 1990ă'ăDECLARE FUNCTION sign% (x AS DOUBLE)ăDECLARE SUB plot (x AS DOUBLE, y AS DOUBLE, clr%)ăDECLARE SUB martin1 (a AS DOUBLE, b AS DOUBLE, c AS DOUBLE, s AS DOUBLE)ăDECLARE SUB getparam ()ăDEFINT A-ZăDIM SHARED xmax, ymax, t, tcmax, tc, clr, cx, cy, codeăDIM SHARED sa AS DOUBLE, sav AS DOUBLE, sb AS DOUBLE, sc AS DOUBLEăDIM SHARED ch AS STRING * 1ăă   RANDOMIZE TIMERăă   xmax = 639ă   ymax = 479ă   cx = INT(.5 + xmax / 2!)ă   cy = INT(.5 + ymax / 2!)ă   SCREEN 12ă   getparamă   DOă      sa = RND * 100! - 50!ă      sb = RND * 100! - 50!ă      sc = RND * 100! - 50!ă      sav = (ABS(sa) + ABS(sb) + ABS(sc)) / 3!ă      martin1 sa, sb, sc, 6! - ABS(sav / 10!)ă   LOOP UNTIL ch = CHR$(27) OR ch = "q" OR ch = "Q"ă   SCREEN 0ăăSUB getparamătcmax = VAL(COMMAND$)ăIF tcmax <= 0 THEN tcmax = 10ăEND SUBăăSUB martin1 (a AS DOUBLE, b AS DOUBLE, c AS DOUBLE, s AS DOUBLE)ăăDIM xold AS DOUBLE, yold AS DOUBLE, xnew AS DOUBLE, ynew AS DOUBLEăăbegin:ă   xold = 0ă   yold = 0ă   clr = 9 + INT(.5 + INT(RND * 7))ă   t = 0ă   tc = 0ă   ch = "a"ă   DOă      plot xold * s, yold * s, clră      xnew = yold - sign(xold) * SQR(ABS(b * xold - c))' { <- This is it! These two }ă      ynew = a - xold                        '  { <- lines generate the }ă      xold = xnew                             ' {     entire fractal! }ă      yold = ynewă      t = t + 1ă      IF t > 1000 THENă         tc = tc + 1ă         clr = clr + 1ă         IF clr > 15 THEN clr = 9ă         t = 0ă      END IFă      k$ = INKEY$ă      IF k$ <> "" THEN keypressed = -1ă   LOOP UNTIL keypressed OR ((tc > (tcmax - 1)) AND (tcmax > 0))ă   CLSă   IF keypressed THEN ch = k$ăEND SUBăăSUB plot (x AS DOUBLE, y AS DOUBLE, clr)ăPSET (INT(.5 + x) + cx, INT(.5 + y) + cy), clrăEND SUBăăFUNCTION sign (x AS DOUBLE)ăSELECT CASE xă     CASE 0ă          sign = 0ă     CASE IS < 0ă          sign = -1ă     CASE ELSEă          sign = 1ăEND SELECTăEND FUNCTIONăNigel Traves                   VARIOUS FRACTAL IMAGES         tarot@ihalliwell.freeserve.co.u03-31-99 (00:40)       QB, QBasic, PDS        61   3915     VFRACTAL.BAS' Various Fractal ImagesăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VFRACTAL.ZIP",4^6:Z&=2636:?STRING$(50,177);ăU"%up()%9%'%I-%>JSIIi#,Vqm&.%%T'%%%.%%%%np%jifS%gfxzLw<:R7U5wS'qDăU"305jSfZMlLr;UU+USdSoD)'(j/P>C.-3;aN8$,b-SG?pUla'$J^JXa:QD&c3L1ZăU"lJUDbysux/mV2XEP$:Q3a#Y[(gb^_Z^HhP8?i>?T,*[^r&[4.Tm9jU/B&;gFn5SăU"+FLB[?B5H0c+>)VRfP&+FZp'Rq1UY/-]w.C9G6I,.#g-7P3;wQEuIgCSZ\%i*2;ăU"SZ:8Yyu8NkIN;qeCcJSacR4Md4d5.JH1V?>//Qf-RVPbiIYLLZY9=P=,^Mi#,DUăU",H:paP*Nm_J=VSp,3:%y%pNrN.;Etl21EUr%IXB6pPRh(/BXo4\%n8D4b<<m]^$ăU"<?OePHlYkZ1GnTYJB1_Z.o43,Pz'lrOoQiK5FoW[tsGG:g>cNNcjuoX9dEnI(K9ăU"6:GA>D:8oFimXo,b;Du%p()9%%'%-L%IKI[I?'G%CD&%(%['%%%.%%%%mjs%tsSăU"g.fxLw0hpSea5vSq#d1,PS-Nc,X6m\Zif$?%GA4f.[<V/5kQd[Vlx7hVj3&d_o<ăU"_lWTT\\wG=Z3%#j;+UN+1\h]W4b_Ed[uf-('UT'0G1OBWan'Q)p2F5O\:,).yD_ăU"GGr]O5)UO/7(vg=*\_<d7\[n3CYII8j3+Um1?S325sR4=m%+j_^Dmg$OMI2</w[ăU"2rLC>6WD(Zar$J07N8UQgRO(M>)^EB0B\S_zk>$jXcj9'^P_Q<*lH>&g#_(Zm>FăU"crnsGwqQ8&7L]qaglRjfiJiOM9(;bEI\JI<G'^LCBEaF$3Ek$Q/%Lq#6qgsb*5AăU"2,8ohDV.O*WLFSMc6qH:U3wOjD4VGmJc'H&/K9t7n]QX17%&up(%)9%'[%-%m_DăU"FKK\EVo+%&%%f%*%%/%%%%y%tumf%rSgf1x\bf)>ye5H#hIKVPm_wFz%G7DJwnrăU"2:mX*7HA5ObaMu*oCpWg$0NX4Cp_gptJshw'_dXQj$:KD\g,HTsY_d9=YqPJ_R&ăU"=T+hL5oTT3cLkC43-YjIgGNrfqEhmXo)7k(PY(3smi']?]=%LtAa\Yv6[]$8^&?ăU"*Se^&tFRYT)nC2#yMsNK\#=un'N3>KR,9F%mRumUl5)O<+EZ.(yf-*gfpoID_i[ăU"\Gt8*$Cwx6SB7c)+^)G&kLyo&Q2/';^j*C^b=&/kmEOQ/q.gxPyQULT.KaaDQ;$ăU"rkVFt,PLg_eqm&4MY9PxE-USzJW[j1ax9aSEeVP-qVH3^/)&5*,H-6l0OfLLPFNăU"j&L=.qrKB1mD=&aTknP7X\1f%?p):b)=D$2q=vFvNK/E*ap42gpnz4brCv&ghiZăU"0W=gxXOBT)QS2]kH0[+SacV6^8m_v8D=(B$XtohNfoDx+rt9VO%aS=O8)5%W6'jăU"XAv49wrw_R#d\fZh*.RAk89$VkXeI'tcX=\GiCP^1cCar[?fts#.lQ7SylRMdk4ăU";]=Yq\-ZZdu%p()9%%'%-L%UMIIInp3'%a&%+%_'%%%/%%%%rfs%iqjS#gfx4jwăU"X:;.U5MT<mN1bd1[zG:;d6q,w*(FO[KE_Nq%+#JTw0EK)dNFfJ[XDUhitMP+7U2ăU"aGF0Qtd8eUFa;#S+pX#U4nAAc],EjIiuDOOP4VWn,]9,pl/fyhr+zHfYTmJ1<ZJăU"7<i0vuC$)mi0&Qx6spHsls9,Gb9rHjsKYdf*ap-7u^bi?UC&09W^EDaITC5*XmuăU"tW4A&OyF9,qP%Si;tTD.#sZv%].HUR&'1uB/i9)S(GNZB16Bw48,+,&AVpV]55băU"IHEY#0QG-1s-*T-\_f'8:bXYS:YzoMLdF#2)?.Db=P$gulMw/FE.BbU.\-5]89iăU"T.z%)5?F(<14DY8*^L,eNULQqse<AD\Puu#jU1X\e=udDxrS'$n&tSA1cHCqePbăU"aK+%bPJsz7-kw%u%p()9%%'%-L%zLImIs<E%/a&%+%R'%%%.%%%%ozq%nfSgIfxăU",a3X:RU=5#X*rxVT<>/d(ZQKC-%Oudo_Diq3aB6nLl.E;%,QtlFf)%bY4kitM75ăU"f4Spgi%c)Q(waBft->9+gX#ZRno1)D)aG8Bn_o#uN-[0sLj:+ZfssvNcjBFUFN)ăU"-<tmhjWVx&B>[$:R9Y9)jSO]JOKZkZZk_=qrJyNNPit<Bb5zg'pX9-wAb<J5^15ăU"TsmTkYFOg*C;Z,JhG,\AVM>KY&+s.ppf\,lOLZCK0'uePN+(M1hw8V4hM/-[?YcăU"s/6BKia*0oT-G=')DQD<'=)]&Kg'-FGvw#8MS42fHbO'L,iGilqAf'(+=:A0aE5ăU"Pc)C<*xY/?ATF]9l%ugqIDA5A2KJ*P<BR\C_[6\2DPQe>Eg+q\_9A8.tA4+cHkLăU"N&atT+)bJls(7Q'w&up%()9%%'%-%3&GFKFA#BS&:&%%&?'%%%/%%%%wjfi%rjSăU"V%xyzw<F=TUa17#i=0mmbgefoVON#170J;'4h*-O*0boWq^?aAHA>do#4[m56TXăU"Tbrn21w;ImHTOONc6s^VpxBN]TJGCfEcPG1$/_LG2mIiCk?ZGg5o9I#Bo1bbeM\ăU"(2]1^Oj7Gl(x'6^RUJgF(e#Ar+?6D+\]QB<M.X<bOB(&ALnB1eka=;+4JBYjl\RăU"[iut#($'$4aa5iYbFQFWw2NT'PM+[>FwSfN9^lmBxSak_#'he'KHa;fQ3fA2niNăU"&<Ma*mPtvolbW$]Y.[9UPZCe&.rIG1T)TidXMLN:Xh0XEp3zv#o\+]#_^?>q-jOăU"POF_3*#IIBH\xP66\?%rOe[_&.V;,>B;qg0kNqnHNn\aIaCR\3<Ql(*iJZeyp1,ăU"l4$USRxC[A'p?jp:ItQQwS,ZT-Fbo%0&p8g'&kZ'E>6P&1X:RI_bEW-I60teCuQăU"pBFq7&N]A3i^HFp%<up&%'9%9%%'%-L%>JIOIi#V'qm&%(%T'%%%.%%%%%%%%%&ăU"%E%%%%%%%%%n%pjif%Sgfx%up&'%9%9%%'%-%2IKII7?'GC%D&%%&['%%%.%%%%ăU"%%%%%&%E%.%%>&%%%mj%stsS%gfxu%p&'9%%9%'[%-%m_DFKK\EVo+%&%%f%*%%ăU"/%%%%%%%%%&%%E%%+%.'%%%ytu%mfrS%gfxu%p&'9%%9%'#%-%U)MIIn;p3%a[&ăU"%%_%'%%/%%%%%%%%%&%%E%%(%^)%%%rfs%iqjS%gfxu%p&'9%%9%'#%-%z)LIIsăU"-<E/a[&%%R%'%%.%%%%%%%%%&%%E%%+%l*%%%ozq%nfSg%fxup%&'9%%9%'%R-%ăU"&G\FKA#1BS:&.%%?'%%%/%%%%%%%%%&%%E%%%&%,%%%wjfi%rjSV%xyup%*+%%%ăU"%%+%%+%r&7%%b-%%%%%ăEND SUBăCLOSE:IF S=113AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăNick Kochakian                 MAKES STIPPLED BOXES           nickk@worldnet.att.net         03-29-99 (23:21)       QB, QBasic, PDS        53   868      NKSBOX.BAS  DECLARE SUB nk.stippled.box (x!, y!, size!, col!)ăDECLARE SUB generate.tables ()ăă'NKSBOX.BASă'ă'Makes stippled boxesă'ă'3/29/99 By: - Nick Kochakian -ă'ă'web:    http://come.to/dn3ă'e-mail: nickk@worldnet.att.netăăDIM SHARED SinTable(255) AS INTEGERăDIM SHARED CosTable(255) AS INTEGERăăPRINT "Generating Sine / CoSine tables..."ăgenerate.tablesăăRANDOMIZE TIMERăSCREEN 7ăăx = 0ăy = 0ăsize = 1ăcol = 15ăăFOR i = 1 TO 15ă    nk.stippled.box x, y, size, colăă    size = size + 5ă    col = col - 1ă    x = x + sizeă    y = y + sizeăNEXT iăăSUB generate.tablesăăPI = 3.14ăăFOR i = 1 TO 255ă    SinTable(i) = SIN(i * PI / 128)ă    CosTable(i) = COS(i * PI / 128)ăNEXT iăăEND SUBăăSUB nk.stippled.box (x, y, size, col)ăăFOR i = 1 TO 255ă    PSET (x + (SinTable(i) * size), y + (CosTable(i) * size)), colăNEXT iăăEND SUBăDieter Folger                  FLAMING/EXPLODING FIREWORKS    folger@bamberg.baynet.de       03-29-99 (19:59)       PB                     247  5543     EXPLODE.BAS '---------------------------------------------------------------------ă' EXPLODE.BAS for PowerBasică' A very impressive explosion demoă' Changes made to original code:ă' When the user presses a key thenă' text mode is restored and program ends.ă'---------------------------------------------------------------------ă' ***********************************ă' ANGELO KEN PESCE 1997             *ă' Email me:Ken@uniserv.uniplan.it   *ă' ***********************************ăă' (Smooth routine made by X-Bios)ăă' Some "standards" pb initsă$OPTIMIZE SPEEDă' 386 is REQUIRED...ă$CPU 80386ă$LIB ALL OFFă$ERROR ALL OFFă$FLOAT NPXă randomize timerăă' Init mode 13h + SQUARE PIXELSă !Mov ax, &h13ă !Int &h10ă !mov dx,&h3c2ă !mov al,&h0e3ă !out dx,alăă' Init Screen bufferă DIM screenbuffer(32000) as WORDă DIM scrseg as WORDă scrseg = varseg(screenbuffer(0))ăă' Generate Paletteă maxcol% = 255ă CALL setpalăă' Init particle arrayă TYPE particleă    x as SINGLEă    y as SINGLEă    xm as SINGLEă    ym as SINGLEă END TYPEă num% = 4000ă DIM objs(num%) as particleăă GRAV# = 0.01:  'TRY OTHER GRAV# VALUES LIKE 0;0.01 etc...ăă' ********************************************>>>>>ă' MAIN ********************************************>>>>>ă' ********************************************>>>>>ăă DOăă' FLASH EFFECT ********************************************>>>>>ăă' Clear screenă    !Xor     di, diă    !Mov     es, scrsegă    !Mov     cx, 16000ă    !Xor     ax, axă    !Push    axă    !Db      &h66ă    !Db      &hC1ă    !Db      &hE0ă    !Db      16ă    !Pop     axă    !Db      &hF3ă    !Db      &h66ă    !Db      &hABă    FOR i = 0 to 4ă       out &h3C8, 0ă       out &h3C9, 53 '0ă       out &h3C9, 63ă       out &h3C9, 63ă       !Mov     dx, &h3DAă       'waitkeyăasmjmp12:ă       !In      al, dxă       !Test    al, 8ă       !Jnz     asmjmp12ăasmjmp13:ă       !In      al, dxă       !Test    al, 8ă       !Jz      asmjmp13ă       out &h3C8, 0ă       out &h3C9, 0ă       out &h3C9, 0ă       out &h3C9, 0ă       'waitkeyă       !Mov     dx, &h3DAăasmjmp12b:ă       !In      al, dxă       !Test    al, 8ă       !Jnz     asmjmp12băasmjmp13b:ă       !In      al, dxă       !Test    al, 8ă       !Jz      asmjmp13bă    NEXTăă' GENERATE PARTICLES ********************************>>>>>ă    xsrc% = rnd * 320ă    ysrc% = rnd * 200ă    FOR x% = 1 to num%ă       objs(x%).x = xsrc%ă       objs(x%).y = ysrc%ă       lx! = (rnd * 2) -1ă       ly! = (rnd * 2) -1ă       dist! = rnd * 5ă       ln! = sqr(lx!^2 + ly!^2)ă       IF ln! = 0 THENă          objs(x%).xm = lx!ă          objs(x%).ym = ly!ă       ELSEă          objs(x%).xm = lx! * (ln! * dist!)ă          objs(x%).ym = ly! * (ln! * dist!)ă       END IFă    NEXT x%ăă    FOR sloop% = 1 to 600:  ' Main smoothing & grav loop *****************>>>>>ăă       FOR x% = 1 to num%ă          incr objs(x%).x, objs(x%).xmă          incr objs(x%).y, objs(x%).ymăă          IF objs(x%).y > 199 THENă             objs(x%).y = 199ă             objs(x%).xm = objs(x%).xm / 4ă             objs(x%).ym = - objs(x%).ym / 2ă          ELSEIF objs(x%).y < 0 THENă             objs(x%).y = 0ă             objs(x%).xm = objs(x%).xm / 4ă             objs(x%).ym = - objs(x%).ym / 2ă          ELSEă             incr objs(x%).ym, GRAV#ă          END IFăă          IF objs(x%).x < 3 THENă             objs(x%).x = 3ă             objs(x%).xm = - objs(x%).xm / 2ă             objs(x%).ym = objs(x%).ym / 4ă          ELSEIF objs(x%).x > 316 THENă             objs(x%).x = 316ă             objs(x%).xm = - objs(x%).xm / 2ă             objs(x%).ym = objs(x%).ym / 4ă          END IFăă' Put pixel into bufferă          x1% = int(objs(x%).x)ă          y1% = int(objs(x%).y)ăă          !Mov     es, scrsegă          !Mov     di, x1%ă          !Mov     ax, y1%ă          !Dw      &hE0C1ă          !Db      6ă          !Add     di, axă          !Dw      &hE0C1ă          !Db      2ă          !Add     di, axă          !Mov     al, maxcol%ă          !Mov     es:[di], ală       NEXT x%ăă' SMOOTH BUFFERăă      '!mov     es,scrsegă       !Mov     di, &hF8c0 ; 64000-320:Don't smooth last lineă       !Xor     bx, bxă'      !Mov     bl, es:[di]ăjmp1:ă       !Mov     bl, es:[di]ă       !Add     ax, bxă       !Mov     bl, es:[di + 320]ă       !Add     ax, bxă       !Mov     bl, es:[di - 1]ă       !Add     ax, bxă       !Dw      &hE8C1ă       !Db      2ă       !Jz      jmp2ă       !Dec     alăjmp2:ă       !Mov     es:[di], ală       !Dec     diă       !Jnz     jmp1ăă' COPY BUFFER TO SCREENă       !Push    dsă' !Push    siă       !Mov     ds, scrsegă       !Xor     si, siă       !Xor     di, diă       !Mov     ax, &hA000ă       !Mov     es, axă       !Mov     cx, &h3e30ă       !Db      &hF3ă       !Db      &h66ă       !Db      &hA5ă' !Pop     siă       !Pop     dsă    IF LEN(INKEY$) THEN EXIT LOOPă    NEXT sloop%ă LOOP UNTIL INSTATă ! mov ax,&h0003ă ! int &h10ă ENDăăăăăăăăăăSUB setpal ()ă out &h3C8, 0ă FOR i = 0 to 63ă    out &h3C9, 0ă    out &h3C9, i / 6ă    out &h3C9, i / 8ă NEXTă FOR i = 0 to 63ă    out &h3C9, iă    out &h3C9, 0ă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, iă    out &h3C9, 0ă NEXTă FOR i = 0 to 63ă    out &h3C9, 63ă    out &h3C9, 63ă    out &h3C9, iă NEXTăEND SUBăăsub waitkeyădo:K$=INKEY$:LOOP UNTIL LEN(K$)ăif k$ = CHR$(27) THEN ENDăend subăJames Salim                    QB SCREEN SAVER VIEWER V1.00   j_sal@one.net.au               04-09-99 (17:30)       QB, QBasic, PDS        209  6079     SCRSAVER.BAS'***************************************************************************ă'*                      QB Screen Saver Viewer Ver 1.00                    *ă'*                              SCRSAVER.BAS                               *ă'***************************************************************************ă'*        Use: List and View all screen saver files found on the c: drive  *ă'* Programmer: James Salim (e-mail : j_sal@one.net.au)                     *ă'***************************************************************************ăăDECLARE SUB KillTmp ()ăDECLARE SUB DrwBox (x1!, y1!, x2!, y2!, Style!, colour!, BgrColour!)ăDECLARE SUB PrintCentre (Text$, y!, colour!, BgrColour!)ăDECLARE SUB PrintLst (Method!)ăCOMMON SHARED ScrSaverMax, yIndex, CurIndex, ShowLst, MaxLineăMaxLine = 45 - 2ăyIndex = 0ăCurIndex = 1ăDIM SHARED ScrSaverLst$(300)ăăSCREEN 0, 0, 0ăCLSăăCOLOR 15, 0: PRINT "Creating Screen saver list."ăPRINT "Please Wait";ăCOLOR 31, 0: PRINT " ...";ăCOLOR 15, 0, 0ăăSHELL "dir c:\*.SCR /s/b/l > temp.lst"ăăi = 0ăOPEN "temp.lst" FOR INPUT AS #1ăDO WHILE NOT EOF(1)ă  i = i + 1ă  INPUT #1, Lst$ă  ScrSaverLst$(i) = Lst$ + STRING$(78 - LEN(Lst$), " ")ăLOOPăScrSaverMax = iăCLOSE #1ăăWIDTH 80, 50ăăStart:ăCLSăLOCATE 50, 1: PRINT "QB Screen Saver Viewer Ver 1.00            James Salim (E-mail:j_sal@one.net.au)"ăăDrwBox 1, 1, 80, 45, 2, 15, 1ăPrintCentre " QB Screen Saver Viewer ", 1, 15, 1ăPrintLst 0ă                       ăDrwBox 1, 46, 80, 48, 2, 15, 0ăCOLOR 15, 0, 0ăCOLOR 14, 0ăLOCATE 47, 2: PRINT "ENTER - Preview       P - Properties        ESC - Quit            "; CHR$(24); CHR$(25); " - Move"ăăDOăk$ = INKEY$ăIF k$ = CHR$(27) THEN GOTO EndProgăIF k$ = "P" OR k$ = "p" THEN GOTO PropertiesăIF k$ = CHR$(13) THEN GOTO PreviewăIF k$ = CHR$(0) + "H" THEN PrintLst -1ăIF k$ = CHR$(0) + "P" THEN PrintLst 1ăLOOPăăEndProg: SCREEN 0, 0, 0: WIDTH 80, 25: COLOR 7, 0, 0: CLSă         KILL "temp.lst"ă         KillTmpă         DrwBox 14, 5, 66, 12, 2, 12, 1ă         PrintCentre "QB Screen Saver Viewer 1.00", 6, 14, 1ă         PrintCentre "FREEWARE", 7, 15, 1ă         PrintCentre "Programmed by:", 9, 15, 1ă         PrintCentre "James Salim", 10, 15, 1ă         PrintCentre "E-mail: j_sal@one.net.au", 11, 15, 1ă         a$ = INPUT$(1)ă         SCREEN 0, 0, 0ă         CLSă         ENDăăProperties: COLOR 7, 0ă            CLSă            KillTmpă            SHELL "COPY " + CHR$(34) + RTRIM$(ScrSaverLst$(yIndex + CurIndex)) + CHR$(34) + "  temp.exe > tmp.tmp"ă            SHELL "temp"ă            COLOR 15, 0ă            PRINT "Press any key to continue ..."ă            a$ = INPUT$(1)ă            GOTO StartăăPreview: COLOR 7, 0: CLSă         KillTmpă         SHELL "COPY " + CHR$(34) + RTRIM$(ScrSaverLst$(yIndex + CurIndex)) + CHR$(34) + "  temp.exe > tmp.tmp"ă         SHELL "temp/s"ă         COLOR 15, 0, 0ă         PRINT "Press any key to continue ..."ă         a$ = INPUT$(1)ă         GOTO StartăăSUB DrwBox (x1, y1, x2, y2, Style, colour, BgrColour)ăSELECT CASE Styleă  CASE 1ă    TopLeft = 201ă    TopRight = 187ă    BottomLeft = 200ă    BottomRight = 188ă    Vertical = 186ă    Horizontal = 205ă    InnerBox = 0ă  CASE 2ă    TopLeft = 218ă    TopRight = 191ă    BottomLeft = 192ă    BottomRight = 217ă    Vertical = 179ă    Horizontal = 196ă    InnerBox = 0ăEND SELECTăăCOLOR colour, BgrColourăăLOCATE y1, x1: PRINT CHR$(TopLeft)ăFOR y = y1 + 1 TO y2 - 1ă  LOCATE y, x1: PRINT CHR$(Vertical)ăNEXT yăLOCATE y2, x1: PRINT CHR$(BottomLeft)ăăFOR x = x1 + 1 TO x2 - 1ă  LOCATE y1, x: PRINT CHR$(Horizontal)ă  FOR y = y1 + 1 TO y2 - 1ă    LOCATE y, x: PRINT CHR$(InnerBox)ă  NEXT yă  LOCATE y2, x: PRINT CHR$(Horizontal)ăNEXT xăăLOCATE y1, x2: PRINT CHR$(TopRight)ăFOR y = y1 + 1 TO y2 - 1ă  LOCATE y, x2: PRINT CHR$(Vertical)ăNEXT yăLOCATE y2, x2: PRINT CHR$(BottomRight)ăăCOLOR 7, 0, 0ăEND SUBăăSUB KillTmpăSHELL "Dir temp.exe/b/l > tmp.tmp"ăOPEN "tmp.tmp" FOR INPUT AS #1ăDO WHILE NOT EOF(1)ă  INPUT #1, a$ă  IF a$ = "temp.exe" THEN GOTO KillFileăLOOPăCLOSE #1ăEXIT SUBăKillFile: KILL "Temp.exe"ăCLOSE #1ăEND SUBăăSUB PrintCentre (Text$, y, colour, BgrColour)ăCOLOR colour, BgrColourăLOCATE y, 40 - (LEN(Text$) / 2): PRINT Text$ăCOLOR 7, 0ăEND SUBăăSUB PrintLst (Method)ăSELECT CASE Methodă  CASE 0        'Initializeă    COLOR 14, 1ă    FOR y = 1 TO MaxLineă      LOCATE y + 1, 2: PRINT ScrSaverLst$(yIndex + y)ă    NEXT yă    COLOR 14, 4ă    LOCATE CurIndex + 1, 2: PRINT ScrSaverLst$(CurIndex + yIndex)ă  CASE 1        'Downă    OldIndex = CurIndexă    OldyIndex = yIndexă    CurIndex = CurIndex + 1ă    IF CurIndex = MaxLine + 1 THEN CurIndex = CurIndex - 1: yIndex = yIndex + 1ă    IF yIndex = ScrSaverMax - CurIndex THEN yIndex = yIndex - 1ă    IF OldIndex = CurIndex AND OldyIndex = yIndex THEN SOUND 2000, .2: EXIT SUBă    IF yIndex <> OldyIndex THENă      COLOR 14, 1ă      FOR i = 1 TO MaxLineă        IF i = CurIndex THEN COLOR 14, 4 ELSE COLOR 14, 1ă        LOCATE i + 1, 2: PRINT ScrSaverLst$(yIndex + i)ă      NEXT iă    ELSEă      COLOR 14, 1ă      LOCATE OldIndex + 1, 2: PRINT ScrSaverLst$(yIndex + OldIndex)ă      COLOR 14, 4ă      LOCATE CurIndex + 1, 2: PRINT ScrSaverLst$(yIndex + CurIndex)ă    END IFă  CASE -1       'Downă    OldIndex = CurIndexă    OldyIndex = yIndexă    CurIndex = CurIndex - 1ă    IF CurIndex = 0 THEN CurIndex = CurIndex + 1: yIndex = yIndex - 1ă    IF yIndex = -1 THEN yIndex = yIndex + 1ă    IF OldIndex = CurIndex AND OldyIndex = yIndex THEN SOUND 2000, .2: EXIT SUBă    IF yIndex <> OldyIndex THENă      COLOR 14, 1ă      FOR i = 1 TO MaxLineă        IF i = CurIndex THEN COLOR 14, 4 ELSE COLOR 14, 1ă        LOCATE i + 1, 2: PRINT ScrSaverLst$(yIndex + i)ă      NEXT iă    ELSEă      COLOR 14, 1ă      LOCATE OldIndex + 1, 2: PRINT ScrSaverLst$(yIndex + OldIndex)ă      COLOR 14, 4ă      LOCATE CurIndex + 1, 2: PRINT ScrSaverLst$(yIndex + CurIndex)ă    END IFăEND SELECTăCOLOR 7, 0, 0ăEND SUBăNigel Traves                   SCREEN SCROLLER                ian@ihalliwell.freeserve.co.uk 04-13-99 (18:56)       QB, PDS                253  16625    SCROLLER.BAS' Screen scrollerăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"SCROLLER.ZIP",4^6:Z&=12188:?STRING$(50,177);ăU"%up()%9%'%d-%i3J\HV;*J1^&.%%h'%%%1%%%%uj%jput%pjSfIxrt_<J9;U:=TăU"h0nL&(G%(9DeZ(K'Rq04>[LQ[,Sc_0+Lgiawe<ffM_6?Q\Q:<pu^;.ihQld++NiăU"(zAG)iD+LMVbaJmn35dKA^GREv(N+&\:Sr)eTJFeLAfw09ZEwYb>W'Tq(:'9RpFăU":I_H7mCK8W.JVTTY$TmW]-UBS1JZU[v4ZJ#</=k<r)ViZ*>ziE[ZQ3iS?+BIuWHăU"S)Z\v=09O[(-YPJk]v%.u*%)Hjr%$[)O<->qUlTveSRA:&C]hR)SO9_')[UPj>JăU"<WMUE#p89lLFD?4e<q>AH\p/8,N/_;Ya,_tHqZy9\#?JFe$C_EZi?Nh(;N/tP&văU"*G6u>,Fe5Grb5YDG5D;k\e?[QK\j]Nc*fo+-&im25;-?'+?P[vKo$(Jb067;mK-ăU",R<u%p()9%%'%-X%I+\^H$(K(g66%%%RM%%%1%%%%xhw%tqqj%wSqnOg^)LSGxPăU"HMN^sJ*n0n[*QK]ub_:eP%Ke1nS7c*4h,;;D[<n;X[sEV=kX*G9(]([9Mw8ZA,<ăU"[SR_*X.ciK=Ho9-rsYWd2Ss.p;<K6:ReQqtc)=9jaP]-'$]Cd5gq6ohb3K_d;LgăU":WmvVNloJCTgbhH?XXhb*8JcY'[%M)mUe[hT91AD-X3JupJ>j4PLNddXCXKak1xăU"x<2EOvRt)N_<fQ+ycchV8Ss#SJ]t)0(woW,j*>A0DBuS.47Mp=^:6^KjA,V&%,^ăU"pKZW/d\H4nZ%X8'JBYDfv&O2r=L04H3MHc.y;JPra*)Qi$vzXH,?Te&Io'#>43qăU"\D%hpK)Ff;,tYbc(cQa<V]NzzNh-I'&Eo%:&;%%4R\mif9.#wOc<V-sQinZ30'1ăU"iuTc_;g-6fj*040JGneDJE03?&,H=$-ayuH+x;j1pN[hk8/8eu7O><AMHp\%H#;ăU"-K<%[(HJ#pJ4G3h&g6p#F%eKE)hfAK;EXg'%]*KuHT^Q*J/dra^6A)O-<hs8)gPăU"oK8gS)tc)]'AaX,j58cP+JW#5<[K1F=[Gj[g+V[j\eK1Z=ZY6>ffO_+ocL&2%RfăU"BMKUni0?;/1\g/apjxQY-10=LL+\)u9Gb&0e5p#:q[.k\&'(Q'7p0?XcxH?C%i_ăU"5:f;oF4xEHmbW^A+i=+V%FVt&j=&/.;_O'waljsYb*cF<,EaYefuKNfjDeQbIXdăU")^?a&YI9.VWxYM*)=6Sl%t(>(DfWM%V(HKONt(gq%66iUAJ7VE2Zz<t[QAZhAm.ăU"E.pPx>nc#RUBTI<g3i1g.-e;r+)8z)tTQ3A6FI,8+93\,Q>gJQK_tq-B9Ajg]:BăU"/fZ2(7#S*xV-M&7.bsP-<.q6*\GL_&Lr$D.x[AAw,DnD4shfVx&PTa3V&_fRZ'păU"#+>TghJicp#F35_pV/7*M$(Vah=)**>$ThS;z]%6qdw-A;\QOc'OQ)]ACt>3s9.ăU"N^eCN)Eh/MlLWUzgjsC?b4'[0Yc6JHM*?HQ6e8q$?4GKwG)\I_)Ha7S7Shho%AQăU"./)9&O]#?u>itRv$).6jQ.X9:2mQg0)&I9,\;8?iVo>a%En6FH\C^2fAK*[ecvkăU"k^bcQpKu=k#*N^mXfBSXFNrrCUK'PQp/Fa:T39U^b1gG-M-GhQF7R''K''),]ZvăU"&6^=,'eCP[(9dn'9Ld%jc\#Pzt):-lrfA*C>I%2PCL*my=l^tSLn*aDfPnW.m)eăU"z9I(j'u#mFE)?eDUmb=t&;G1:(L9wf,R=hPashw,A5M3k>msxAZm(Y%Ufb?awe,ăU"XqZRj^JWYWELK;\l3u]kjh'Z)f8/Rp+Iac.\CAOdZ7S%oKapR=cPasAojrcbThsăU"Mhl2AhvyEO;/C^Hj38%LEk74eQ/q.4i_j20JJ[1'$G4-MA#=mM):^exe/78551ZăU"R-M_L5UH]^;o^rOQ?5e1kM;o>jQd2wp-2w4$o8=,P\#+)?6WtVMRDwE(>R.WKK(ăU"=WS=%os1FL7N%KJQO)6\g>p390k8Y_9l9j>ucfKK\AEj5p1]]4PK:UUIKI2w4jXăU"Y=v&ts:+6[B3ZYBg:fJqF4IZ1J..W'U%4iWDOvv=&Z3r4?TN_b]QLfC2k)umm(XăU"4BmvKS/Q0>4ijVbv>;c)gSF[S.(BCapBot=kfi\SN(/r[uVMu#y$<?A_c.Hg%JAăU"]%4Pd^-^E(Kr(]YN(5[D2'4HFq>7\c6;(TY(fzBx%Q%stP)116L,#YCqAfQ&?t?ăU"F_3;'2j$26FcVK\'Cx,HWjC+v&%gH,&JM._\MibUM4CQd?IqPI4?2IYA=\CV-vfăU"X6)\;B?AdCN?&v6siK0'JJ%GUyMQ?g_PiDzy3*rlykrN,qKU9toW4K.zmM9>^;CăU"&3vWRnI.:Lv94cNSioH^_]<d=;A#;OM,pUYU+ImBslg\+rT?OTd#dKTn$h>kQhBăU"R96,MIBAVRO8T]D=.lVKL._B.p^Kmjje5vD=Ui_QQoGjMo_,r&o(63JKj2+vn)_ăU"l\[bO,BXB>Qd0l6S&7bxS#9q8lOF%$k]hHY&Z,XXi_4tOpA=EY\j,D/L)5It'-4ăU"NV]u^g]C0q:[TpMjgpKd>CAE,91eAbVlPUFU^ART6MM:WnOeAv:YXUoCbA:uL+GăU"yL#cG\JOG]wfRO8ua/O$h3Akj4+AM7]k4'ANU5?H5%hFC1YTGk$P9nMEqm'<%<?ăU"rL6A?/KIh\\V3T#Vq;[e<=0l1iZPrI<yF&5z,pV9K.Kq1i\sGn,LMC%f^rXG^I-ăU"mSZHquYo\#3>G7)9iEsfNDQy6r&.qTd?CMD<.rsGq,L0-?Y8dms?v;mS?5IwJ(IăU"<KL=Raj*6CVkWYIH5/eQ4X+1LT:kD(F+4]HrqRi(qB:9sA]rpm(FgqRk)$n0X>năU"aT;'Q1sS\.]A8N4cc,KedxJ;n3lhSVA#N9aGwXMAl;;vNqE2kML>rvb665jN'cLăU")LjsP$+eVi\+PU-&kTiCuuAL3we:\m+?BrN&*MrN^YX_;3s.V+l+am=dCRb=NK.ăU"Cvs6SSflz7r?O5L=),tc6S/JK#$R]4,BVL?=^IC;dOv(eqUC#n;-8S7J2_h^LrSăU")DVP[8%eKY8+bmPwZ8S<_oEVOn]iQFY=gd0+[BdEdk6=4Y4Jd5Xk((%&Y^BIhg4ăU"KaKo#bfL-%pOwThIwf>lC-ccT51+WAI29oV%tB)FSlsP'h8btIm788rmhqW[JRDăU"GhO\pin&rpn/3a%qn6A9+^s]p(D6=sO,HqpCX)<>nxnlOS3nl5)jCCDpdVxX']răU"sur8Z)X72f#f-c0jQ\SDvOuuGE,%+Mxw_(BeU?>cS<P1f+mLZKa'DQZ;^*H\$;săU":dDv8m#8S0;\r4ZYmFkSeb<[/vufYD9O.bJ6Md,2RS_3'8&A3Sg&5e$HQ8qZn&/ăU"Dsq\R.^52N>cx.f#O>kFp/4^KoOQN'_fhiUn]cWQ:(w>_plv5VWWm-o6u+-<+^1ăU"-EdkN')$m>[%Du)lUTWlinBMYC=aX=C7lb8v>-fw-(xi&9l$ae(S<WGAsbE7nvsăU"UXbq-nEFLs1E).jcDE^OYcn0W\j\N(0WwbImNTXY9Dq#Yk9sp215=rI62LyJ9BXăU"sI#>V,gN\BbsG7M1HNJA/ahD1XZ[/XOd.yVxU%hWtDuVqHLg9UAYM]o2fp_]%D)ăU"oZUy'%N2=GcL9U??[9]\T>A(J0461rQPO8jfO.05um:Q+d>uDN$1;kr;[p8$eeqăU"d3hoD\Y(H/t.PqMoY0ADm\#/XWZp+<hWO,/431>R/6,GERF:_qu?;%.;[gTJHh^ăU"<)kc%KLH^?:(dh7.QB0\?na3>-KjdJzuUC/Vn4HwO[PBC=m4'QyykGv>_d<bbrMăU"rN\x[TBy_Q8<^Uq=qFBoTbe(knuW6\thc$.C>)K4gWDLOCWkap6n&(NR2#O4iRHăU"]s0i]d>.Dh(aELIH)0xN(d;$d'W0rNdF4TH]xYhj7fu&H-wCA)4$6C5fZ1*dHvBăU"(WL<5T)V7<>3P7N^,LqHuU;/Atxoc\qs#EGYg'5<0vFcGlBJd=_^EtTf4SDd8uDăU"b7Jt)j/wR>K2k\I$Z_lR7F^Gk#TgN=QRY6VSO8JJ?(G)<Y[dnfq0e*?ST3B0IEeăU"ydXS,n7#VHaCi=dBvoi7JxVDjydnkEEPQ5l]Z,DLxE.5yJf?$m4xI9ey2gG.wYiăU"b^T%]X0FE<K0.^aSDjqeING;v;VIeG3esV+Qe-vT:4(KC\)l4vd<csgY,]Y-ovBăU"=Z1LE<t6c5mhbVvG%]^$0gn9I'Un*Ai1TDagYJ;$+7W6-VM=TotF6l/IH^u).B0ăU"v$'?BV4q?'a=KADa2d]V*HSy1Y(hQekYO3)tVV#m*y0jf4[yiU2z0UEK<Ja9pm#ăU"aHG1bAX/3lQ4^VN95kO,9>kW63X,=7/8=<&a4sb%CSKdQ&c0,cM5',JLM.HCrB_ăU"HW%8V27k*ATBAd^0;J[HL_;A?odLu$Rhlo%N(o-OA;,N%7DOD=v4QbSH\x?0j*tăU".>D:/hnmXi-Bt.RMuJCZ\8bc-2gMgH0M,.J#)ChSI_.pGp7p0n(-L06M)r.b'c6ăU"Gi.G3ghhy/Ew9HUJ%Wry)i:;N-UAs<1\U/I2w4P-[>l=U]dRY1'sG2)Rgr6k[8măU"Wnu-F,lE^]xxun2#rB+ou#>8iTX_XgK\StKOuLe*LUTHW%NQxHZ+r^>Z>R10(tUăU"0Y<(Qk<i&J+5kd.8J+KQ4/4/ea8e+Dbaf$QSkkC2,^KSjVoP#d$69E5<FN9\l&HăU"ul%d1IPrD6ydS695wCd/IP2So,_onBDM-KHh/5\\,kVi*:#;ERw>;d=jkB-uA/tăU"U(4q<*MYL,uUeH2'F>pCRX%Tz($BaUL05;(kHLeticET/>;T7\ZM)(xt=b/6?4găU"\LrK)No]<k]ilMsrDs&-\UK[7NDS4r9B>F9,Fn/QjtLrC+;kq6HL-Vqzuq^^0LEăU"BzB[MqIMZGv*;Pk4jaR9=A#isUIBd*_%0-1MnmZN)OnPk7_8dc$).YaTR#J[A_xăU"V<)8,tk]X[j<WAs&F'Rabo*d:9hoXn(OL\x>t;S,4MXq(KO=jH)K]:TXA';J2UnăU"HGl6G;BC&nAuHS*mGi2h71G_F*U+Dk2KA3t=d=EVp5mS'L8;r9bx4=Y#,=1_-r1ăU"l.=I4AsP;GmdPr>p+$_7sm10.ro9#\NKvgik<ZM>>J^cq$lVd%tp&P2$/G86fE3ăU"K5\wn]ilj[LG7s07uX2(BlRRVrLilYf]cGPiri*NNgGDRn2)1u78Li_#Ft7J(,uăU"jK(M73MWf.J]sYn^MZJ,ei:psxW:i'>]?cUwJj/Qq+)adSP\<K#tr:Cor&lC>Z\ăU"N/IAvzP$SPWeFUQFQN2Ks&HI7Ct<&6Q(O,cwtJ.&2hNmhG=>I$4_NwYpjNZ-^sdăU"/[WR3_X45Y#H:jcB:X6hAUhkF[ELR,5TP2f6o$1f-5cLG,z=73ZUlp1m_rSwz6iăU"*Y?nO7D6rzL\&&e5y%4WVIY1j$#['tPO,WK[_Z;$jw78FQb&oea\Y<]q?f?Z/QIăU"Vb>,K^I5VmT]Ne\SJ:]P[%N7KQ&+HK:IX8Dl]\kxkSi;LYpo+ocu=TAcMG6.tx'ăU">a>u2QGC\E%Sl)E;fz%K#]z2=?8Kj_t#m#fcM6.7TwTD]j3i)*2CCZ+NKaAp.^-ăU"O,].o<P6G>:Bg$G,jz;&AV81.&j.p?wb5Gtk)iyy'=+>moH5\p?/7VA_\jBO[%<ăU">Tk(;J=T38OFxpi:s\4)t=a6nX\lfJpZv[zks,>%.dMX[1x77C]aU&_3%^04i;6ăU"(6(%+#H#b97,s,oQtXBU7r'Dc>9JKhsf+>1&0X<<]fu#835bwn*w=%S#j<&vV)[ăU"NYSZ:,HmPCrl'(;j7.<lwkPSh\Z++Y(l-_(_[N9]RF[&9J7q-n4A^$n/M45><:TăU"wkYWRzpdQ\+hOrhGhzBCJuxe7pQn$\VGhcnWCD3KB:U/3NMLwH9?BZ6)j6qrQ1KăU"la25\r/x6RnSuXQ9H+p;R0x<NpKZL*#%P/O_ZYDlBT*Gxf-S&:J&^(a?5Q(DJV.ăU"E1bk1N-2:*R\;=EA4K+x2+UllP(:pJ5N?.pf$FH\QA0]G]]#tiHV>,g;XjlqE6găU"W0MGLS9dB3a4hq1tO9s]9KON_$l'LNs_vmY9xIZkB8''YEB;=3jS1S8,xBZ9gg$ăU"0*,ILmd-s;D?;8Nx2%up()%9%'%R-%^1/\HwT+4])1.%%v4%%%-%%%%yj%xySgCăU"x%2fjrdQeO7?nTrfc,J)l<o09e2%9'K/q07W0C7]-7OtGRr'8p.dX^or=$DRB]PăU")W56ghi2MBVuxt$8uxulhMN9R6f^vY<htL6x01;rus0NL4B]^[^0pE:TF,voZo1ăU"3xeOlYma]afbN=q87[r-EeVtSo#ciwu41'C_/P&BKHx,>nbsn-3v_f8f>xS6n8<ăU"n(1$/HHOt6_5m\M5\WL^ljZG&OsT>:]wpp#TC_X/,CSWFoNYOsqe+Lnhr*,er.PăU"xdO66p3YV%HtA$gnU&stndp3^CfN)N)Me4k7<$Em)ZLn3aKJ3M2X+a=?TRzLfCZăU"YuOt8::o$2w#DKQF$yZfl4Cfl1'utY3)q4o=,r4<eSdVcHUZ'Z\pD^kl\uSq7^%ăU"]9PT$P]BS'hd9k)7=u8sAorn#p-&J3,Q6CQ'jEwQVJ?#5$EH[iF]B^Bk7gZU<>%ăU",+IT=zJHW)\LdS$MR?Z?FPkS-C.ycT74+J.f;&]&sPqJmw5eYNMrGso'\WiJz=TăU"f[ezAE^;JDlGekDJqQ>yiV#WuuG#io_7.QfV6eVpM/ZPHock$5u'GmhfdTeqptDăU"M't*DC5Q[%il:U_2\CxvW2s$ojvhHcy;Ww;2dS>N(SNGi<AV0CBL#zY9ALg.^VDăU"9<T'\5jFs-A(>Q+tpmiPLW2$Uq8ZGo7rpgZirTchfd/h0Q(6k^sM[g82,pdZl6căU"L%T2c:?&u%?)lQ2t/NqR/gz.&iVLAEykVo0Iu&MDBXuaAP5?CqBRZZcIfoo2^u1ăU"%'T;.zqrtXt)NcR+NPq/ir#aum(kTTCF*HSW3Y3X]7G8M(lNIl#y5,g\cNKJR-xăU"Xof'dTwK=2QQakR_SJkV$5:Qnf^pYhu#s&*q.*w(^nghRHOQcF5^/c[a;m2G\.DăU"LN-R7^]3u54BZjt%G$kg?^MzX-NtD\HJW:FL)Xy_=IgJFKE'$a_u;mIODo(GWjWăU"hyP=Y'LXWD_Vov*BiLVb9^#\F4sM7s6sRgUBzpJS%W=n-*6xH]3w<.tTrf?PZ\răU"ii.Jeiq*cTZ&Bd4I0'+Lr?NRQHcdmAs=5SWeLeLdp$UH,SLnXKy>pgm\rg.$<V9ăU">xPSMJM&W*F:PfTin5_v9]8sj4#?><So,h)hc$_d;p:bblUX\Tv#4<(I%Ba0at/ăU"0':b5e%tJC#[tcb7u?sPaH8)s=^e((]p\N(YWx9KG9Jan$\M8+O&vkzPMt8,XO6ăU"K+LNEfD^Vno7u>u3(OkUOMXwiZ(p.XOcq=>Q>Ax;RB?#adZT+0v[Py>MY-uP:DBăU"jlflnjVhuhqiIscsIHaPv*N',LM\>9WVX><qa_WigFH.uaWJ%6oppJszsAxA1T'ăU"n]XjFn:YiIls0vfX>5fMOLOF1V]qgU\5L_$0oc#swded,aD>0rM?Dk2WV<b&l+kăU"EYTcIXLR8vT#dGKH+MdjGYNOBllQITwmx*b'E:la#Pw4SY^qnk68?DIk5jrMnJIăU"dBwXXc#bRTX<YHtK%FN^Ob\Mr_KxO\$wz4vrMo8FXUrFXq;7SVaeZ;JXBnR\=lAăU"(0ovqpX%fw6ptF^QLmea2I2F7[Uo8ta#GTwazorxCONi1.Rrr8G1$YJ4$jd:>l>ăU"EaMVY.$k>$aCc:=*ptw&LH>d$A(Qi=RahcEq%Y14_UEA\%cnI_f/A?*$&mDBqnZăU"<m\R&KF*XAJ?=/1KIxu,rEI*TT[sVDK'WAQP$LA^ma_HE\+9_'cGN?4Ka4r$q9RăU"?3:\f-6x;^D1*[HuNqT5E<G?DDN43q3%KqtSq.sE]/ITP7v<+E8?TpgN[YBr8-6ăU"*aodrEitp<1y#KJFralzb-S$i86kM5Ud4Lbl?eAH)_p48ivDp8=S_deJ7Pvb_O>ăU"7LSr7NP<76m,3u+Qtk\CwU6&/lPhjkIIb&Xmn7B>Kp07&L/fYxruP/8DRO4p3)RăU"yt&^k:]TwJ1cIw5Ns*5SNP(Bd4i=CY;:$vgcH,I?XF&+Ocqd<<2'F$s>4?wkK$qăU"*9NT]SGmlnD3J-Rd.7v*bIudb*(lBOjDNJTfYMkFy6L'(,lMpPq=3_l&)L>2fGnăU"8qItVriTcP:9tLF+8ldTPlcTE:ui[gDKsKdfNnpfQvT>,FfpZi9v9W28qg_.fsqăU"a0m\0*]nmA.5d44qvM-Ga8.=xaF8.XtVwWYNH[_$SN2lhaeXt.2tVs<u09HwBwVăU"5Nj#[Zqt=I]U.m(nhYkhJ*Tw4sJR3Ye.V>'QD3q^DI0$RD^k-8Ej_W.yFio3?&tăU"CDwiG0X(fe*WN2PWwM_oXBsQ9/8DjnLLQ(b&o37bSrDggLa*SUdYN:I$(NelQH.ăU"4$>MsF.M(n4Q\F:ZKwS>(4$=K:848j49iDvMTB4cnqm$PqQ;hy.ce(5te&#YoGfăU"ntFq5QsMYDf.[Fjw.L-W:D8SKPIn,_TjK?.9v;ITTe^P\c.*F#-OBue$(6,Ux]iăU"UGt9.$.-XmhFA*e^TR't;F\qb*i<>Rkw0pbD&AnF8HDspK:DTGjH7*NT1's9kp8ăU"Fk=o4uB?XHil&jW#;?aH_IIiX93aQm_r8oD#KBm\'NH-KhK\hzsH\7)c(b#w(v(ăU":pd<BlzLcjz<-+>.epXSD*8ui(:KY60I.VQQuudnCJS&P/G,o9((ox;f)Kr8M+văU"B<%s+HuGQ(pb/D$JVTANZ*g$?b4$opdiJI2xE7&Z*5RxGiHXu3NgZL8aS>&vh0YăU"tb=':DMfJRP1VMixr#gf5CfaY8RpkDdZvqJ(negZjl7cIP#tiBK\[OZ8x5ot2q\ăU"45&0(9v^9DWeo(\XS8s#f:t>[/-%NkcQHZe9P5wzp%n$\frps(nK8sTX2'8%ShEăU"wS#:s<5nlt9$\_AVDZ\no=c0%RuV,BNR#dn^n6r]&HpYiA(oYbaL^>gd(M+qM=eăU"?*./r2>1\4Zrt\QulEUpc6Q8WCyO$JQ2fQRT$nPQl8C^uhWOYmhDt*/Od')>LgDăU"A*iNt<S.'u(SIPoL-i#I[l<-r:2NKqk[cx<37t[\>DNOcL-i#,D=9E04W7+liNcăU"[nsm=\:POcuDY'vU?sR$#q^FBl+nIL].[p<Kfo<R.&.iorZq=Gq_X,MwzdT\(RSăU"sdtWE*/1BUh.\0K\h*Rg=?nl.<sz5)f34N/P<x0Ma9ir:2K:v.kr^i39Nl(?ufjăU",Ts:wsuTdGx8:lOx5SgN.%4Xar+dccp84,qBLsi=X:2NKg^Eu^1Lj0i6KQf4nPRăU"d$qZesHPhHha.NB2>T$ZXXJV9wwila'XS/RA9Qn(>t=clcLrtrYzU7G*[twU9WhăU"pId3BVWx$?DT+<h]OWmf0K7StR9x#iD/&Kt?r?Be6lWi6;A<(c,JN3$'GjG+K;făU"o(TEsjuACaTd*8F/qH-*u3TKatE9.W4yU4WE>Rfw(.xToxDzjY)nHot4sLZ9t]0ăU"$MC4pe>B60='wOQ?Hi#<oT,XW\$i^c(yfn>lw%Mt\QtForhK.*X*iVS97aeLj.răU"4#l[o8PU,LMFYPq,oO07[wX$g0J4Jmcd9USf*BqXJIYz,vVNwGGnXaZ(3#W&Db&ăU"y.cYE)NDWrx5HiEHDo%[hbJX$i6baWhQrguYv**Obi,[;FwH;]h#>hT<6uZgYg/ăU"x\ER4v[6tRaY*9tw7ls\1eK:pH*r>kQ.5dPd5k[LGr:.&jJ,c-y=ZiZup^ckIu<ăU"tK<3tp$TS\*mLAVdxo7d<u>Pd[9<>N9p2TmZ#M]sw05=440*iuLQs>IQ(#cE$;săU"fW>,5m47S]lvTHhs1WiHMnp>6iiVbAbPxv?XtM$PcpF?tY*?tCbQqFdi9nFlZI1ăU"9.sRYHWQ0rMZ<r_YTiOw.A]n><wJA^E_/n(L99t+uv<&K(acm$27umk7SLAN-6uăU"qh#&L0Nl0[da5xW;Er(?-?t[Z:r$GkEUP(=ZEP?9h4&xI)pMRBpf/MblB$uh(GJăU"/'x4up%()9%%'%-%/Tx]Ho)$N#'<*%%%V:%%%0%%%%xhwt%qqjw[Sgn>k'X>T.[ăU"5MD3)NotAV'&k]::7(=jJ7^l*T5BOA<Eiin$aGg;0YMsmC'p$P^lJ,ae_p0SIlCăU"R/xZLo5DXV^lDWuU8Mtpl$P.5:RKY'^rP.9JJ%b77J)cMq5u.Yk/J'xqamS/YHSăU"/N5Z1(-RChtxS<,E18<$9)Bl=ZkW7PLFuhW;:kv/ljc5*bfZ6h6PWtmSEeQP=1MăU"ad<CVAAONkwfrkOaO9pM(mrE<$]q'F*EY*hpHOHTvYN77q:h#=]LAA%3q9p<4?găU"7HF^G2\H<k1q5IR6B,kH4?&b;r&C>bIh&24%o<tJT>Mev3P>#rn)_z./\3+x)1/ăU";UU:S2:8L=wk#9rQ$c-?su)&LFESl&pMGT.p\+8d?-OpRf'_IS1j#U(Q#iBb2U\ăU"J_MhoSeSeu1':=X8'VFze8ASGg2wHa1S&Cu$+Di:d;mN/?qNgz*K(EoKAV&CJiqăU"0?:2rd>*U-tS&zxc2FL$\&T<N)cR:;.X#%SE2UP;trH2.3WeL8.hZGY3VqgT15[ăU"z_bk<7[N7/zz[9I:XHRJuY.?ob3UM\v\]jC+U[2U7=V-Hf:MdneRV/E2%^_+H*wăU"p]a=ih9(y(7W[CTns^tt1tX0mUBDU,f:Ss5xq#%AJRz-uHHmG9WG8-$hmWYQGL*ăU"H2GTG*L*+[#J<$odpKnG]5%?[87Alg_Vo-ZP)0NDLXh+tn+w_3qOP#_x'0?f+_3ăU"9*eUFT%SI_E'#[y#)x;T%pCf?b+]M&:dcOQp1eYRcOdS&>C4gSeXwP=JyL,M8/UăU"u%-LZl_YjAYL)qcjtWWltlI_=m.]nLhqA?X_n2,+^?pWDG7kKg.:W-YkwF0N_[răU"Hr\?MEIB%H,gCz-fsX87J7?x$HY>n\_7g&bXtRgC=m<QrH,N2??=^^pn)>S,ErBăU"b^C>e4n.P;mT%4.*jo.=PK7;ouiOAt=9CXtg^?ZQn#Yww;5yo?M%RsJoYc2mcoKăU"33:\$Jn3:D'-t2wSH[qVh^vI4cJQKLF:=jW;>t^xTB:m4cHHE6x4Q,Ck-_6I0NBăU"YDV8.b]Y%ZGi6$*04uhd4$6-\QmCdzbtY^08g'DzONf%,e)a9CKY1,\R$a;w1voăU"2G)ia-n'?YpQ&9t#dg8-VKg#;f,acXjh&R,Sx5mID5O^FlY7R]0^&,d_Ye8Xtr.ăU"do)KYEag+4U#oOg0zY?;/TS_XqJeyfvHI>?QYImN.MM$u$l9baa_WI*.Iz]'lAnăU"<'Vt8SsLeT1G/&o$.gF'w9Br^&H18?m'[;SIhh83-,e&ap4e&,1#^?hYc7_I/%-ăU"N\3SDh>AMDgMhQGUM=E9TNQ[3b<V,X6xD<#v378&SQ.M.3E^ZAmweAv[0;o74\CăU"=zs4FpcVsKiGP)DI(%n__kJ5;gr#nvQL0ssujPc?Re8[UVJTSBj^)sZlggsWe]yăU"N^=/F<EP#(f:D=__RrJ3/uszlk9><%K<d,9PpN&E9lCN6F(3gMrq_:d4,IBsF#oăU"5_=]2#YUT]aO#gms3'%r4$_Ij_\QstRivm>>\Ml=Var#fM3+aC(NvSMo?p&<AN.ăU"dLG7&78tU<gDaLd163Q>oL7q,4EFKtvbdi[<gy2PE\1O[ImNr^IuDWD\3pFKtObăU"k8?#sH]6nmRUMGR$,?PmCn-^)2dih'Zz'SwLVbua$tlUqr(a0gXtxZM$TEF_fANăU"?#gWhkEpt^WXV82j6GGSGXnl8IQ.-qKkgo<LPj>SEoVhzafulhXfj(*9,u3R$,păU"*p[T:YY$S1px>2>$AWLlRD%V,K\_*wi23]_YHMLY1*qPF7,)1i.qYB%(yi&z804ăU"w$>i;hj6.fs5<w_Nh$:eTpbP*3hOm<^?gd;Fc.O\FdKxLNg<_OE2^TX.Kx'bgfRăU"])Mk<T'w*up%()9%%'%-%3,J\HQ'W%?'1)%%'kG%%%1%%%%xhwt%qqjw%SgfxNfăU"(<>][]5wM-xN/Fdru8EZoPaZ4ggl*'dg-('X'll;.$g.00-?].#HPrVEhP)n.8LăU"U2_)T;AvKoOn?mh*#^bXhXLAMZfT6#HDrBkl1o7Ifd^rpuFgBZYPWk6+xA34q)]ăU"V,dk3?#+rYsV-34#TIe*G74v'RCTugatAX-f.HbFMg0XUPj%-3cd^5'+N[Q8RmXăU"=w)$%sT-FBhqr(i]izqKEEd.d*XA,go$HFE&6HS&6f]FlI7PLuT.I(/=EUlZECZăU"P=ba4CS7sgp^0v)Z[W],#5l_vk4h.,s8maqi5PIetV8xHs3_ha_%=#ly^wYFV+(ăU"me%9s'iIAkh5S^AAnLNqT:O1x/Lk8g)ZA?mJ\t:JU'bQgT-F'I,h-&>Nb5/U[ivăU"iCD9QRe%vD$T+-w#%+=[H=v*TdQCK&$:62_+>i_st.a+XY?Mfz+FMeN-b+ijpA:ăU"UXrn,H2a9Hs8jjvZt4YOBSN2qScRP?JD(upd3'_9=zKiXT)Dt-]=INVzC>;E/GqăU"Q$;q1#q*=9tm&9$ZEp%#IA<0&TOW3^e0/]AO)6C3iYR2N\lP8&DT&+Ae0k?3gL.ăU"eXF^sCl3=dsL<15k+orJ7+/TyQ_>q+bkl/w4nw.803'HGZ%cYGv)bXO?giZ]kl1ăU"L=l3:nLurv;W(f;vs3+UCO'kCMqMA)gr06BKcH1mxEhI'VM'%5OY?qDObx8aNQEăEND SUBăSUB V2ăU">.g<I5Ku.rjgGI<UNmUb(Cism8Og?6j40iW1V1zb%=v5X6q=vI,p$2=V2+LwO'PăU"BUlYMWlqOmt-h;'$O\w,&)Myti3%w8b8mnrmfO$Pm;R:'^zIwnJZhXwQ8a*R6$9ăU"#B,6o$KFjW,+3Ylk.dsml=$v+=Jn(RQZ_5H3/#u%8-0xVmp6UMJSRN#umKFq*(păU"VVEypTBoC9&HDqR754J+/T2evKX;^R29FjPpu(Rf,0>5>k.;D:FQ'wQgR)xZ&YeăU"/-Mg,YC6/cO.vqtI_Y0CT:T/7VN^'1oHS?9MS)]h<ri_Qz]F#Tt$IcH6qi=_(ubăU"9ld-3E?Zr&R&l68TJnEMS<\,n39(G>SsoHyKnECja-HE/uhImoOV1VARcRjT8kzăU">rr?urdNd_6XP>m7<,4YX=r7^86fG#T]:R)$>?q-3f;HKVqFIbYe-<5S/eB#>=dăU"Nj9R;w6=4AbT0gKu6/5^jO$rg+f\QqwjN0L]HZbLb\b7-b_-'mPI:l=wY(QU*J5ăU"S\[b4:)L)$P+Owcj'[SofmG/E%(M'z3$EIYK30/H0Ge60el^n/l8b\r.3AFaxM.ăU"M9j#]J;J3Dxl:i2<kpm$vsH3v,w5BCXGT%qc/iBkfG0FtTe?#6^t)YF(%pgI,EAăU"W-pAbdMX;A#N8Bag[%s8(6k,MD+J+tS5a6-5%(ewMevaYtva%[[Aap_0c]pK>;lăU"5CI^u(-0XOrHNAJKb)R^A,7gT?-ZXhSkF8_TZ.5cS<esi=2$gS77J(OFsl[V)f&ăU"cqihXrH?M>C3_2ha$c.SnO:sK0xrc6c$piY<ShSs8*V77Rw=us/+;w?W6t<%up(ăU")%9%'%d-%Z18\HV0-:eF).%%d7%%%-%%%%yj%xySgRfx^&<h>Smj5v]=BxU<$a)ăU"'Yk=_uAz;F$9]m/_P_6)btD(BJ(;9?#Rpt8g(85lni%1&kzy,x6i-Y2hEjO\lmlăU"NnH<7O#O3/hMOBPI=$e4n]Ts<Nl9t)g>gUN:#jYsKsU1BJ9So=3)_m[?/PUEM4#ăU"[z%2qXA6TnoDl*EtL7*rqNou&S_\DT/_jY.'Y$lWJ1qKETc:=gUHgZ#I[$Fq1=*ăU"#VTY2LQgJ4xAG?,X<(pGPHM?Di#a6F4kYbaIigCMe1P5%<L's)f?%h%3Xd)6GYmăU"oHE_+A&c%ph8i;QNCzP0UUd67'[tMEW5t=Z6^D%Q^LX(nM*^g6k<R2ed2,WA.FaăU"q&V\WhovL]MQS*K_;)E)yMV&OR.MD:/#z:>ZbkCtcK?;nbD=awZEYWYMB4Oie6+ăU"W)-_'_<Xzmd4&*?:Fe<v>XSptLW6hxp'17rjq^sgmU>#xg3?9[ftwM0W]F4%6&UăU"(Ybhk>cM4hE,83-626D&%kr\pf:+,Q_;Jft=qjy)+JJBfkZAhdpt7?qbY\1n+D4ăU"lib5Fg/o_AaoD\OrPTm9v>wYUdR$OuZQWI_mgG][TIb-Rl8(%^LQrX)AI(]ojqPăU"46a4ni*=\X;;9SmPfKKg'*0z:5PN2<,(n0Q>.qCPYWjr0jHIK3T#2)d[;9xAPX:ăU"b=p%<RM;[?v_xP*AE)HX54iutUXAAb,sM0-A6)j8Jont[ptnnN)-Fd$tDv1OT;YăU"BiP)Y0b(f7ktJC?E8rk&1,V>FDT+JqC\^)]e$G_OY)IxPUq;.&;tfH/sdZJtUE5ăU":K^:49cg0i4wtc?[Irq]+.f.bAmLJtm/e39Sm<0r=44J;*9P/$%'(jK+o_X>9:JăU"/V*uthSO5:9oqd2h^6H>IvlBM_K#G<lKj?bWW*huO-l.Ml3d0b)'N+Qcdd^]G%măU"0)P33Ll8%;SR(v6o[=o4MJnvJ1Zre/J3LO.f_>F?1g,?\sQ#ZoUQxqjyK^K_U9+ăU"(g5GB(Fk\Iip]\&b7AHHgm^$:[+lNU/AB6n7?MQFk,jlSOtk&k(p'ZsD0(duV)tăU"OsTD4LVYDS?s*baPDbI<TQBxg/Fh>brL<85IBpjZ&fK[<1di(6.)R_\sR3MpLchăU"CqNv;l<WVUNY]I=4te-n.lj5S(hFY>m][*56Jm_?IG3ppVHbC6)[Qk+[T\MJG-\ăU"26R&MsWK&[^c0&K%mVcO9b94jj31.9639#/%M(-<3<:H94<+>3jXuaX/uQYI7_HăU"Se+UA.p>ADKfaDei7am7fVCBRMg$Sc8i\dR^A>>o2_qfy>:]le+NgCO9)rz_lo2ăU"N>D92:C8?fQM9,)01rMHO_a7s$C/8SAfgTr&d=5gZ.u%p&'9%%9%'#%-%iE3\HVăU"5;J1^#&%%h%'%%1%%%%%%%%%&%%E%%%%%%%%%ujj%putp%jSfx%rup&%'9%9%%'ăU"%-X%I+\^H$(K(g66%%%RM%%%1%%%%%%%%%%%E#%%%2%&%%x%hwtq%qjwS%qngu%ăU"p&'9%%9%'[%-%^D1\Hw7T4])#1%%v%4%%-%%%%%%%%%%%%E%%+%m7%%%yjx%ySgăU"x&%up&%'9%9%%'%-C%Tx]aH)$N-#<*%%%V:%%%0%%%%%%%%%&%E%%%%C%D%%x%hăU"wtq%qjwS%gnup%&'9%%9%'%R-%,Jn\H'W;%?1)7%%kG%%%1%%%%%%%%%&%%E%%%ăU"%/J%%%xhwt%qqjw%Sgfx%up&'%9%9%%'%-%5Z1\HoV0:e%F)%%&d7%%%-%%%%%%ăU"%%%&%E%7%%eN%%%yj%xySg%fxup%*+%%%%%+%%+%x&%%%XS%%%%%ăEND SUBăV2ăCLOSE:IF S=60AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăNigel Traves                   2D GRAPHICS LIBRARY            ian@ihalliwell.freeserve.co.uk 04-13-99 (18:56)       QB, PDS                382  25233    G2.BAS      ' 2D Graphics LibraryăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"G2.ZIP",4^6:Z&=18663:?STRING$(50,177);ăU"%up()%9%'%R-%G5#SJ/t8]+G#R%%&[%%%*%%%%lW[SgnV1b,&#X^+hJQGwPLEK(ăU"S6Y/(jQ[ngW$Ke(P3_UB8;#+W(^tA0).S8p6aj?\L168vEzgn9DTm+L=9iUkh=/ăU"=ptw\xyONh&NMpt$vf4?wurtWQf6fkT)tAj=th*$Jod]j;x$iGFGBj9x8t[5N)>ăU"SsKSp#h^ZI#Z7#UXQQp+cdsqU;Q)6f;lhFjPb[VZgDTkYL'p+d4t-+twl=7n>,\ăU"-wPucTXVkL4IXpT4g*rwh&qjLmLI(?l>b(WKW68uCpy8]i:SF186E^*k4l0U-:.ăU"r$fe&j65U<gc:mp*Q$S//xk2c-b*xVQ^_:>Qbsm9N$;^LHbxtNL:)l8rd9q2?97ăU"81uoR:RobHIc],M)0(G6sXm\;e%#?;W2W#I;tY)D1NcwLtxMDKDI?qj]-E7Kdw=ăU"jL2=spDcx[]#A,Y$Z^'D5e:Ak71hn>(v4UtQjsxX&Dm3eq:B,gw'u(b*D64J%ejăU"xMC27-\%s=DMEgbTP7S?dQP89bXp^rL%333R%HKQ<-5)qMCL\M5dY%_8HY'Cqq=ăU"LK?D6uPeV:u-2h.dm+Wbg4C'E+<HDIWO/R-5T;F;?,c*d.:X5d;5E)PO,k0;VzLăU"bQB?>fw/qeu4w-P#PEz(J06h:/,9IONNwmXB3&O8#jI9<%gl]J\f+LHc%Lk]7qOăU"Y&5eDXu4E8Gv<x9q11;iUU8b*qAjjaVIMI2:fM,K1vsboHDsrqmH>zFf?k$r566ăU"3:E(X,a4o+6olYsP8$?639dmE_48K4a/hu:sgiRaS/CwUp3'^hC87_o?k-Oiv>măU"#u\1[OI&z=OuncO3g?\D^rc^+,5&)2oYn0sE&?1#19Z1.#d(J$a1YCJG4Z;+Vj^ăU"ZrsDPhZ?kUseRHCMhz#A_/m>\4lgXGk;9[A'e<(UKI;'IL>8%?lmx)xAb*9W^urăU"hY8Q4ZLb5_b:uk1b$Ra=Pj3Fx&\h[)Yqu_^T>[x3JIWcyigRsZ/,i7om6=\n^4qăU"MYBX[Amc$K6Tmo*5C'Z#xgT]ZgPIC8-e#ebtT\x[jWi>vh?G%,Zo^Z=,412S'UBăU"$3c*_%r1Cr112-P4:PBr=348Ww26JMK++l]6Hku$ln%qC,#2Y-LZ^$uwm^fqVFmăU"mf,A\VHUL0,Z+r/>N.BIaLcLFI3E/k]hm6ng/WLv<ihMHpf2$3de#X5dJ#X7K%aăU"\OV=>.x]NtlGwrg$Ew'\1UH'qRITadc#*5/+&pVm.7TlF1ovka$fhYH_-hY>8YHăU"4_*rtbv$<elvZVl;FjeD\;\a2-qu*D_kM/8_U.eoWwRfp-m%d1Z;l,bY\sdMtNhăU">WKD\R&jTp.7VMBi5qNrrvY'WA+3]>6(Y72PNkH)Jiu_NwY6N:j<Z(X5Il.p5)năU"^1sLTR.tJI/>C5kZ6-ns,(ppt-8UXFbQ$GHlkrVr.p$X<_Igh9H\v<&R<,,<nW4ăU",u(We8P-QBN#BouI.A=,^[9nEw,R]=.[J1TQ&SPc718p+5(Gx5g:.#pvB^e6h\aăU"oZN0_P[-]SqdN2xZq^>E$IW];zkrW^fQ;>UY_3M6*4h?)o3O1u]I;;aG?-P2cx4ăU"V)$U31x=(SkkAkA<v(OA(?dPP(<u,h6jC85B*>TYM(\$dExp^Z)*m^aIJ*RV1RKăU"c%5CY+pkx\p$uUjw\X.>\F%lD3dr82h8JkC,k/K_4lN3kl^\HN+#Mj;ZlsMu+*QăU".V2nmO<7)TfDFKcn1wQ&3aEs1W1nb[Fv3D(wwaF40anis8^-x6k\8gW<)8HSc8CăU"p\=9+%XDJfz8=*H8P3s:v9Blwz5kb1[?KcjMMAaR%bnjGU%$pHWJ$LQP0giXCo=ăU"XUQ\Gvpm)jA;9NH:8;Bdw)fAQ3^0+]bQ7o3Jc'sf8_1#s%Tp<wrd\JBPCq0%U=6ăU"*PmYXHd*hg^(K$L=w2FZmQ?[*_k\J)M#Qav591TSIuo8X$9mK(CJ+M5]FQ[tRtgăU"e2#v-L_eSB1\c,L/e)=:ES)\:$,Be''tY7mQJ/rLB\rc>YU9#JgLLUoK_O8b;VKăU"1D6wk5SwVEwG/r'&Fm<9I2E)d:5oq#2TONNL:,'$Zm_(nUYpO4*P#[d;*-+;id1ăU"=70##moMP:C2Q6CJm0)iC#/OCl5J8VT><$'-,&]]D0]6fs6NTI;+n?;AHe]l;]\ăU"kXR7jPA[N;:m_Ff]lB$GrM=O8'3(.:e_*6m*#FI8/T:bB1iP(Ecm\)wNSzL3&^YăU"U<Z%-Q2)h$J4U:L^w(20UM'?Zj1iP$f1)/A4(*OU::-lw#]RKP&4>'0O&XI-d(=ăU"<G*Y9&c+vv*1=/()J7#:EL;ZCqS,k>_bFA2Of%>5[vuZvUi.q\<]<XqRd9314UMăU"+(/iKtI'^N6l,=69X&#Ld-iL+;9M\8Qrm2Y-Ys[l:Fm]WRC%ZIMUUC5NZb?=dP.ăU"Y*.'<5#kk'kKttN-$9SSmrvS7Iaea06%3gD3]&SO0U/p&uit?1+&lXz[=g5M;p^ăU")]%HgLqp]xIO_sZ)m^7Oa6++?<BIbtGy_u;-r/*Dw#bf5FOVm_6%Kc3C1<'BAM1ăU"W-fgvY?3nn(o\l?&.b8?^$-9X+e]d9D\n.X^0=k;7%NJB^5lv/ghDE0dqs%Z4c[ăU"FS_)FT>uLCol/[<NM5PLNy-C%KKhmVcaRdOD+sb&[./Sg*UL?,]WGhc,fcx4b0HăU"L$\Hlx2=GB$Jjn..0]*[\tJ.h??_v3weH.DFCU5Um?fI?DU.A%zku%PS8mqpwiWăU"L?YgY:9QJmiak7oh*=/#fC\L7Dg&uwhCc-C2kt'mBUo,&HntSxi=Pn-g1B<R85PăU":'VGU<KZ\W/A'&pJ$\Y6/wx<ag/pJrX$&#kalp$w($-aRVtc:hgR_J[;OP)7#dDăU"Owa$/6SA$yS;0pOW--:dZC:nGQ00jS2&Pn%svmOK\+?6VshIHqAx'A?.z=,9K:YăU"iGGQ&A0nf-eI,zM\G$I/IZ>yX9x&X.R.3pAALUPCoD1O<Y3->tMVLG*\%o;(]%_ăU"8m?Iq7gw,NUutKOgO8H#1#s5B[[8tb:eSboC\5NB68j*7KVZu__0=1Nl=L;-Fw6ăU"X5cgM?A2X5UlqZ9\m^w66af3=pVn_*NE5>fX>*#o<=lSElKQe3W,^AqMg9q;5r-ăU"1L*uE?%]r?<Rf+s]LT35=;hTarc*]Yj-;E:nEM2N'_#q7YZHC=0Xd4j:UGail*/ăU"2^?MD7h)*I(n;Oft:vH0\[<kitK??UeQ^NE#KG#BsJf=+\0J007Hz(BB21vR8):ăU"ILF-:]$#IU7M>OIABqY\%xFp6x_T=5[sl&iQ8hP26O8X.=6>'QZ^Jrm>?=z-a10ăU"dWx/+LDg5'wck9LvW0mjU5%RTU^75R6PUxJgwk.#H+_#/Nb[dcUav5.F?\pCu[UăU"m8?B3QqS\/Ubs:V/7%4kCAGyURhot2JsysHi8?hCh6u]h[%3MDc1LPdi]rrd\UrăU"kj5You_24x7Rl=grF3H^<ymhb)#w*^<I_dkw>*'X)W^GLhR5fv*z+9/=/j8#S8\ăU"f[Oq[CYqCB.OGk.9xO9E\=AILYsWV-:P3W-A*:3lKCZo_XPK9hTk>sVTvNI]#-4ăU"VW4MQKeoqOJYT+TsDUh<Lk)X]Da/X6>lI/Q[b.tfIyRL5S5YM+E5#k-jp#'daZuăU"]mL>a$/(wB[It5iCdRh#n[%S,8;.ybx]sI/#D8hAI1CK6;;0GFfv.ip3Vt0n2+AăU"8[1DG=j;>RhWY5V52N6*5s.7\p?aoo'Yec9XmA+$1g1y'x?Bpfv+FD4wbX:VTM1ăU"fJnhYKr#Z'u8fs(xVx5J2FObuq$vnJ^iXQv8l,0x#xPfd-.4)5k:5#6HR9:7mXNăU"]UMmO^?lC%PMI^k_$b.)Xn<viJ,(J+p\j(H=?5(0Xc+WMJHHD4Nt^H]c:KAdU5-ăU"^2:+fVHL_sVMq:Xo5Le$_:(7#&N'Sx=]kM#1-4(KT4.RF8*=5txTA=6Lyg^<=VXăU"BJkk/d9z0Uq;^spQ5n,XI8H1chr5v,og#c1z_>)##F)jIrVjVi4eS0,QSu5g6ERăU"DPln'TK79DZ6TC8=SpBbS<vi=ce;AqHe)m9),l^zkhuNOPk>b]w\e*wK\%hPwP,ăU":dYsU%Zt6eB%%2?\9\4_KV?H\7Is1^1%H%Y<cAQ[_?+0/YSZj'a[W1LPb:g?=E:ăU"<O:$GE:s6H$Hn\fBLas8+.:7]6<]K-aFN2*KtPns+dcicJ3;EHM^81;k,x4Q#=măU"/Ue%B2TJ=(h\Q1Ocnh7*U.n_B^L.\hu*5^%]K4gdhTKLo03&'l(K$t1sGkG3)#^ăU"absHQ9Pw1kDlQ\'vbmM^1iIMt)4\$JllpB],(,lNjZsUgA=;fOv]5^#cx3y_98căU"nL4R-;aX9[Tuei<hqV&$:Z\Y,/7A\-2:FUW8T8#]cL-Tep72Q%cUKk4-l;Y7_JlăU"4e99+';;fi(Il[UFh6W<]bs6aUIaP)4(Q&xE]w8;q6E[e][NS1m]yX'.*O]K%6CăU"ZZ?Oxq^X&jlRRr-><SB$5Ji0GQ1+<HPwDUX\QN*w7K)dtf'>/IdnPnDYF/Df'=xăU"U7I%m>R0f_\E_T,m&_ttJ*goeti]$m3O'Jgt(WBH_i,wOiCc[g&FO>p4'b[l?.săU"tP#ujk_MTpnWW5E??y?q<hnUO-unrqWeVU6SVUAr9V<R7(]t4&VX%]#TD36+DYAăU"aFAG0OZ,,p/[]T&GuYZq5%']TCa3$%YE5I]kcPXd(6$bFbFKLTwuv#a*eQPR87)ăU"Q5Tbk\Jw>rG>Km;hJN._W0S8[IvK%nY4wRRA4Ob4IR+9C=*EeYS-tHBo52la1i*ăU"E%_cD[c?rsItfJnkGP_X1dGUPCey[t[S1n:6kAE<9[4.'eG#<akNH\2#6-DsqDjăU"IceHRX#+D.&eR6Zi]m'#Obp$e$JO)KLqTA832i<'fbV1$m(,=6-&g1<TF\og*abăU"U4]K.=SNeA/f?/>C#>Y*'TN[9HO64gqQMb09OW[RfYqpB.4rLU#^01;V9?o>>>năU"oA?f>ND0j16t-LX3lUd,f_pH$U[e7Hg3^oFZuQg>^t+3GbTS+D0rd97SdgT-Sf#ăU"aU3X,I\=B+$3gW^J&BL$n._/d\*\X8ktFQS\l*rl%W1A30syqv)>g5h-?^f4Zu7ăU"ADR<3t('1<*wgVL*lpE5-rZMi.G=u''jm-w5d.]bl6wD9f7odTLCg*E_Qfw]oE_ăU"<J/TjUA=dEOie*MXKSYS><Y9B%cjz_ug=BS\gTscaLZlo/5nk-$(;-$5S25NT]XăU"eZ\[)O,Ni(PbKPYSn/S'-oq$./Xl,[]B<RNPj16=bC7JB5xPcSn'Od/b8^SG3JWăU"TF.q%7d01hU5/I/V3T5E14C4EcRtoA'%05QF>iE_grjp(P8&ZGx4Yhv$T<fc8Q\ăU"t<k4'W]9VF,x#u%5hJTC(4MF_OUh2nKHg9-aj.CzOX17y:UigSXu1B?o<X)84b,ăU"^/-S.u.;oQ#.8/\0aBf-rQhsdGhP^1avx^^F8:C;bTs&O#QY\,j=B2A?jp:ftBCăU"r8tzGGre5]7/m_8CjD$%4OMR5h.Z>fpO+nZA5kkkpq;/\'tbhL4=L,zSlY9n9HuăU"ff;p)2$b9p3)n7>wu4EpJ?Iu,D%D/f$>(>UCvm)Ovqy1aMu/F3lugiOxvD#Sss)ăU"tcl+Y37Y7dMnOo^D+WYv&uXf5XeQ3+kVs+D*'ojnlg4b3M2w]Hz$E?ZcTq#I$H3ăU",,6<NNhv+y4.^rgc87cTT2:uqYSi+mT3AV^v-X.(2khqT/$8:Cm6$RDAp^R4Ts^ăU"_LL*3sij3>43<6Dj3J<cUJ7V_.cR8;:*3VU;K-KYZA93tZx1-0ibie^/,URA_z*ăU"Ox8HnDEkxcew3\aUfa9N2v'#J2#e((r#t>D9cqsDu+bsj6cAOc[eK7Q8H27[mGjăU"'q8R+O:SQdiv/Nh?+zO)b4]p+cJOlP[br>H1/-B7pc2iqy'VAg7.FieU#XC[Io:ăU"OXZv.Z$l1q2'56O/&cKA)t1=.rVYM8%B%&^F\puY#*s:&u^OnuGBq5%#M*I\>NKăU"yuRQ:PkQ(#*&E[aipY#9mJ[dW/C,JB5s\2>%zvg8K(<&PgBn&#34Qa9$Exe;9,BăU"><A*HqKIRlsD'se:>gO7]29K8R6U5[&nU0I(6*poY9.;>8R944/;9APd%r3WDL/ăU"8$91'YkagW,0C6oPPXRVC?rD>90t$7p::rSl/J?#(LFDUkcT(%/$QepP<F)x//WăU"LBY-p_s#=mOMdNh0vVCp/o<BfjfzJi67V<e4:c\kpjzie(8ZJ8\LC7Do:$3%+flăU"h&rl&mF;,I1O0dGPu%^CX6vRk.#;:q[lV:A^XErb72pOzFN7?Q2a66=70NnKk=5ăU":'VF)hy2?Ib*FGtnZm.>Oe;,187]hg+lD3d:PS^TY&lp&AW7F7f7W:(5iGZSV<BăU"dWDy/goK)#FY.Y)cfw5.#*&\7'c^vci7=)p$0mU1)KMJxVJ;0SdA\TuBw?V:X$măU"a;pELe5<]9BkN:AvpHbvs*o4^(D\tFopJ]*\&CD5R(HcP7y3ZEDf<CBG)8Uk#0:ăU"Jdr3Q')UHcAKnetP^E%/:Wv(^i>h/(Fd>(Z89ijG;'#,$UWY,^*hrSm?i_auO1)ăU"3,>T^o<UmDAI7\9K\Kc,Ueivlj=ZA$U7WBZ(OFZ13>S)HU3<[=OmLrgG]_7lbf^ăU"cKSP.;Tn\HSP4SUY8.BiC%z[jT5j;ay^[_,'K,,jugsNN-?otqMU3lUh,fG>00băU"LkX=j=\NEJD9>*liUbOYm6:ivaGWLY0hSuOa_E:ELLdT&SV)DN1Q]9iYbTLi&GFăU"FzN.BLyDVyKG;e3JqFt\lramv8M]b59Of&mup,).0A$5\/,JC^--X56+SC-8V$uăU"/=MN^[Ca#6SmhTj\I6e;L4iM)o*sQ/n.tYTJyMH.ZqBG3:Cz7nEz#hB,*;LQUPhăU"UX,YcgJ<ln*N476C0JZ8?bmY_DpOB#7Y+Xn8mO:f6O0):PfTd;%i656f?>&NaT=ăU"RbNsD=XZj8O/Wi4[n'E;vfKL['*h>a93c'KA;11GhHF7fm;P>1Ipw*EK_^[Ao90ăU"8g]wW9dX=$hz\JZX?ZSXNO=+R)$pabkCdF<QHB)_Zq,A/'Yg:LuS#]n.Vaf7:^JăU"SW7N)0C(O'?)dhxePflLt',BNWX=ECbf_qzG#K%R)9goUOSLRB>^FgZfzg\>oGTăU"-V;eJ)J68.SAf*PElJap1p-SfwB0mChSXo)w:OPOblue>gFZLcf[$B;-oL0c,n$ăU"S%Lr,7d60.,=?Xx*',2PqL?9b\FtrIwNBux:cWN=Gb7(?Ip.[]-9\e=k?\g7f/răU">S3>5TAE&-m\H?N=jY[-Lq0^BM3r$sG#i>pe7EgpvU+W:lpbZf,0mKRs)?XEGW*ăU"GFYioB_i%._HTs'3)y\PGh.7<Z2.NSTcU=+pNc5DY:4=I+V&MRUioPx.0(i2F)KăU"xih9ud>(g#VgV8-D^ER)A,'PwzR&a3GvVtz45DIQ>13:>kK[G$lp)m'2_&a$?')ăU"8B77=J0jJ,(HaUs+(dJXKeNr0^?KY[=doFfr4iPliTUcRMv3>(o2,(W-E?;6*'UăU"Ae15;MhIonPGTgW.r'\ih/Yge;ahwG^Q(g+R=h^taBg7YRnM0vRJ,pog?i,($utăU"b#Ri0erv>Y:1[H&L8;9fc(.CPnIm%3milU#ID+gbkH47+-,pt.(HPcqgdZA-a/văU"E?p\)+T['apYr'-'G/klBfp+(0Kb\n08Zdwmeh5&l/O;:*+PmIi]JSs?/(kE7::ăU"d(ZjeNt9*[kdj?._]kW2d)pa6ZQTi<U'.Fd-k(gu_D^+FkT-,T%,t_1wjl-<[&jăU"L%2n2Z?Mbu0I7[?8nQ$Pd(Fp'<_<gt\UQ8hOaj%Af=,I*F2;;*8<Vy9DP3FJfYBăU"Qf.3bcW(n)V+Ktv;MS-J4D]X[:mXQe#o=i.qROBOx/Db>Nc^Fs_jce0:o4VZsg%ăU"(c;=(=6K6L%c5Wnl__21Y8P/\9#.k0[3AHa5C>FGlB.SnU_]g[E]2n[wZ*Z2ag3ăU"UW(%1Muw$T\OYs&]$IyP69MNC-CR6SW#pBeek*Fle24Gw)#D*?5?2me;a2GUQO3ăU".^/y.e2q)D;&X=_]t[ui)HI[&;Gk]'U'l5lkObA.d=jO3MO4]\Ut&SXW$VyUif9ăU"26poc/D<i4.w9_.b;jAG)%Uc%)2LcOXk=8#*\[hp*2.6LHhvlGj'fv82(I1G$VaăU"n(v(LQ$&S+7Nrwy-):7QG(=<LF,)3CeX=NMWM''\q(Zx5aJl-rEik[[O9TIW^,uăU"^\WomjhcCj;B4825H[joR%n5V?AQV#%xyH5FG=cGY%m9'gQC0msdshkJw(HQ7%JăU"&6/qYfSN/ko*+P;NnyNWYs?f%5[-x6)i/zQRpGZ&P=E[,aenEL_H:FmX^ONw*YeăU"Boeb>MfKQ6S$)z(=^5[.T8Snq;k6TPIZpHE)T7y^\?*c,20Tx;<:%tRoAlmk9:6ăU"3\cF5(9>hG?l)RQR1MiU^09-Mc$E98TpR^JL8(oX(#ER-axFAQ\fU-ZeM54<&:?ăU"(/J7)cm5%ewbz:+Es&/xN9wkloIXikG[oRU\#Z^+gTghokeu=]K<WdfpqJd[/8HăU"2gAVLS=\N$Cd\'ZIUQ.X=rC/A./LU$K63Ht>#:0oPp11bq9O%M+fR%aG.eDJZWRăU"#CxgU7),1I'X_/Yk,syH5G3P(W6rLCMuPa\1pT5SSP^*'AtG:F]6*AW/3=_Q8kyăU"Ov-nLuC/D]2($]a6K0LuShlpF3[]X:.H(<;pgB;rV:;FG:i,NM,c%M)y[5HNI8NăU"\B^+(k8msDq%V*#O##\r#t:9Rm#eR8<D%8%EV?.RBF.:l,on]$^mu-9igx30.6^ăU"?f.3EEYX3USL\y-<]G:ktmyvf[ZC&<xhR4qu:jPG8Vn^6T[M&kT>luLuku/t]O&ăU"K,DUZ5E8JDH[r:H?W;ach5=7E9%EVhQ<&ad[pvDQN4-J.-1$C/hTK)Znr#dd<>uăU"MXIz>c*9S7,Ef/06a'(M)m+LZWf0UIiQ30vTqiXS>96g;<L$Yi?[w,/)BOyRHduăU"$W4xs1?<a)c0\Mkor]CqvKUTI$xWm$GGT80nW^wf_YC3JIo$v369tNrDx%&up(%ăU")9%'%%-%S#xTJ?Xn&^R%,%%]%I%%/%%%%l%Wijr%tSgfOxF)<+x[m5]wszwi9MiăU"KT.;cqf>qQC-Nf,m1Gq_i7--tRC,(TD_g?F'Qsh>-/aUHJZdcN()43_tsdVLL[XăU"bXkH^lu&[kXztCBK>oZ,wiZBI5?y2u[I8I2q6LlIpn5c.dbmTv<I;ktX,TGjhx6ăU"i^J:sCo7MU=c.9Yr-RIm8F0i:?-,;JgT+[fF<Ucfl3*3BFIkjf#_WAR<W#,2.Q(ăU"Ci,?0]F5ngeL7R6mHX^EAd7g^\w:pC-7]rz*Pnoi$3mic%Yo3NJ21R$^O-1?J_VăU"IXUwBYWpCTgo]bO/'8XA]zGn:z?FpbCgp]SZ/'4YXG0yW7[U,%-tG%%+x&od)1DăU"hSI5mu>oh8E#zIrcS=obu/kYhc;lI4CL,1aMCsq99Jy^keDb+:9p3A1dMk3'wqHăU"b<V0_IrgEF#3vB$Ikpquh<V0^IbgEF8369^I,gEFH3F)nbQ/^Zf^U001=sE,u\FăU"Dl6'i)rCxo:\4'>;4v\uYU24BALtI<Dc8phQ/5>b2dG3q(e&)<^GO-0.lxpVLWcăU"mtd&M0R-2IUL+hV'lZ_?*Fp3G/VL5kQ<rY;f9BnCUSmYsPGkFPBOk/pf62DE6lFăU"g</+<TJQ],oT;f=,xC-pdI#FJ%A\mrIgwl\3,31N=>/Q3bBgc>E9jg?t:peAvH'ăU"cAo93tg-\:$2TQ31ea7_C\Py'S.WOh%U7c?pgYp0%1gnOI+qNne8&Aao>7a7lMhăU"swF&Wu3]BE%4$',oUUL&,Bo_:pVl]O61><vr)F.,#1S)nVn.ieURV1-\-5cqHY]ăU"nA'2^jE0gB'.DnFPv\aO.kA797,b)DG8M.Y5[Jg(P\>3#5;ZP1uf9q'9SdUZ%B'ăU")$7qj$yZmvkX1zIY#B%[3_1T?NSsH1::L2pp<j[gE#%UMC3AQX^k^>F#/]j#.>>ăU",3$Ufpg2vZmqqIa'7'>-X7snSmGns]Be0u_;#5\LNCQ$6taU$1')?q=03xn\_xLăU"Mkl$JPY*tHclHno1KX=XC-$,<QXj3j8o^=A-+[vEat8Gdb3#93KNLTO%j;uk<G9ăU"puY7Co1r.89DPf6ozJ^MBsZSO<qS&'RIP,*.t7D5Wkee[USfgo.sA%&;#_BQJv$ăU"G'rJZb8.,+R-mWkapmT565%CeCK:Hh/3<,7L^aElM=PHhVdJ+G<\fCirLC3IhAJăU"<Gt[cg/s#tNma\(47PFK3ZgJSCZGU&/3B8[wx/\y:HZ.SAzHSAf<i]D<]T)[ku=ăU"[k/[DAC-h9%n\b1W-044Pb8Jgytcqt3MoWTEG8LN?wp=?G%Hr$K%'#g3l-)N[%/ăU"Sb7^H^8orH7KBOI&8F3UBi+jq*Mm,^d=:DoCdAT3L_c%z/H:1mi2s'g02G[np$săU"+Esd>B&l2k5WsIHKX9HL$guVn4EsrQjNLJUiU=bUoY5H;-,z_pJT.XGaWh&LL-PăU"VyU?-C7%'tg-G[\^$?gS^]=7P5gN%)Ce(%Y#-wn_JX$rXX1I\2Aa/8-#RXc[#aWăU"Pa2b4q[N^a5;-xfI>f<ebcMYmAO<#\vD>]^$E$tLjN(I0OI-PdIP6d.8,*or8+făU"goHs/baQDL3tO#d55HA?B\5BIznZB9IGt_ucEAnGYmF1Ls4#HNw13P]vbUT-FK%ăU"V2fp+?_owk/_:kr31J6b]uZBb=R+Px#i4#-9PY=dk%pK?^4^>F3$+k^m##K[N.YăU"ey[X[GMmnD)')F#MhAPA;ltq<>f5&_3gk[GY%w20w2mB(Y=SQ+0y-pxz3/])GwKăU"Lx2yP\CEXbO$\UM6?\'s=N%LYVf1ikpxh0W0)#hB))XpZ-$RvD6R4_%M6L2u5zqăU"LPMl;'Pb,?U8np=VMHYHydnJ<0bZtQ=PqX&XJ$xRxp,V_qcLF0c_^.v:QEW]9P*ăU"v$L_4<*\\,90W?a,6Ea6v.?KPTti5ZOfhMH>F]%t6>F2l>4CQf=^*MscQ;rRl?aăU"+BwL;M7[o>>li'RWu'gHIBtsWM:vckZ$Q0Roo^#RJ>V+<4\\qbX=0AHuf$BAagLăU"&$Sd8uygNOC4>TWA+E+2g4?5;_FF-r41\u^x):jSCyMS<AdR/itR15YgCFt,=+năU"QK#A%0Hwxz\(3<RrQsILB8A$'19G#+kzd;EZT'Y,'w'TQ=TXGpZq7^jrWi86RS:ăU"e9ISXLk$qpB3$7&y,_MLdlNOO?h5i3t;/Py+&*,w?:lI%isQrAl6Wl7dIk(DsoFăU"CU*is,La&Z49QtKE]mEuT&SBfoPJ>MQCRhS/=:nV='*4nx89pTQk,b9iuPe5b4$ăU"tOS\*v0FITiTQ6tVn>?^edrH9N1Um'^P<+ZGSI,x%AbwBb*m%.Gh1a-6qb*p0g?ăU"c:Utu/,0VxA.fki'ax73r-Vcq%Sn3WGw-P\Ef:*Qgx]Bru^_;K+bj;9nSEHXBFEăU"WK.F0eKbAU:#]..Kq2kD\gqZQq.)\[ip$H<aU:q0nUH%rQ#P[P:tnw*%up()%9%ăU"'%#-%0?7SJlI9k;jB[%%r8%%%+%%%%lW%SgfxKfb<Bd?lbX^xddibKS/ZK+m/:UăU"<3R&Day5WAgi+(<YSvm,s.rba7D&/trtn0clWXLK,$Z?<ez4yi>)EsP<3JIVI-păU"fhnVrWuN4w^nN+8u7?d4=?wk\4sdwI8Ne,D>pSR:4(v>_Aq^QPbu[<#fqnZ4fW#ăU"jrE5$NQUtgU'LbCrK4spdFYZFuhs[CY5MF\V>PlgOi:.j2V=A]oEUZDppSofWgPăU"tBAb#*>u;[5A'^<rRv^VFKasQtZeh1enxGEoBmqbo\O>>U?4dVQrv1bHoL4H%b[ăU"i''r-5KKhSQ8Q3REf_FbTlDdcX6l+b4pDZ4_.K4];V]Dd<DH4ephNINs.-A(d;MăU"j+5bkJhM*ic4FbXKg$3h5.AO+.rlh&9+X'XhCa.>+Jlz3U^XU;b^lz4?pxag+l-ăU"/;+u0ihH&ZF]/sEsYZFcMfwm$kU<=S<MbE(,YBSREE\q^(iUtRr0f[*xu3r(B-[ăU"8nBlB\uWC1'F-2(4kU&gjiV3]n(qbmAd,g[H9\rA&RuG]Ph%/8YNmqN=+$EgIbNăU"T%^=uPUx2$tM2GO6T3;Ni,+/oGcM6bHxqh>CaiqRQR]EMknOR,XEC^bgd1QEGnTăU"'E]5qLbr$C2F_X=dO3kq6lf#T.??f\qzCLYs-/Csq?+F6hh=3kxKhf&f6>8Ids%ăU"SF9PXIxJajHnju,6,]X[f=8fCZt9dgxYm>s]&aNLPR)+dsRMOrjtOo>$fq](_X$ăU"v-t]z$C_9$7'0$L+cfG8c-V/Ibco)lF]HETojlc3(W/L2&ZT7k$E&L7Dr[f#[2.ăU"f<ruSJJPXIgL1RA+ckt'M[6pw:h<3[frc[4hdw(emjI3Lq)TJ*bQ?:b+KDB-,?NăU"*SYDGky6H5Vi>/SlD4Zj'4vd96i5K]/_EvfI9q..8]eNEkz,/IN6i+Q)OG^#LsPăU"[qF+<&J?72e4KX%h]5Qb'UJ:+>6YDkt<4w$a1K?\H4ZgK88SR')Y;pq>%(Ndk3^ăU"Sd%X+<[J3maNGanA[^k0)<UWSu\hWgSk5c<'%b7*ozWL7?T0>oxF%=%yZrD)%+răU"6;qoZEL=\vidAFoNQ]q\UA0jha*CEIk)WO,n&m2zCMRA'eQDEZ<NhIy+krmZi8<ăU"S[FV6urn]M5z%4ekAeRk;q$;s4qDuL5<r);s)h2AJmKA'I)ZqP/(L;Dyb&,qdguăEND SUBăSUB V2ăU"7uJ1z/jGk)W<#D<s>1%F<5hx$?6GgDUd3D>*S1Y^r7jokpYxU&gJNWw68>K<[RkăU"6IK-s7w8q-+j%V7)hRWZUwB%r3fqjC6>Hs*F;snVpTJCrM,q6Z^/6w]5_Nm7uUJăU"7t=w$<l#c'qk5$+2[bp?bPF25nI72TTfJFY76<NQ)ni-n6\\Zj3FGqEM5a+ZW'LăU"V/Cn\;CFd/<*:r+;FdV:dE**VR#Z%'OgDV?O*:x?Tf\?yj?.&N?-C[td96t0NH&ăU"/6NZa4JvtV8K.S[\?/U,8*s5X/\KY9iQ#Gs,hcLPZ?J77q>*)uP;O&oB=Yj20ohăU"Cy]/J/[-iy\VOeMq#=+/7zi]ms:>-EUziii9d*UvokD$r&*X&I3I6HFs\mN]oKOăU"eOeCT?,%[<G]KdS0Lb0*KIssO%ItjnqL1[,.R7C;Tr]R?l.hE<5Ep+rCFplWleUăU"OL8dLBOeN(n_#W'Zx'X*F%?iJ1f+3WT<oO1(8\Ec?5cV);x89)D=)MSx:m5P'>XăU"TOhf4bPB<_SCOWpU-sTGY/uBlz?w'Bjf?us3qC%e.VP7.%IC;4;'IP=A.?:9)WHăU"R15&qK+O5x=pNREi.K'+QkquPl^_GM7rLKO(6s[^dK.Gv.#\P4^%RS^/d4qlVvkăU"h_%w%44*.C[w:]%tMpbZEZ$mum#G-mlCN3aJqYq6PnL8%2=y8k7qZF7(=JZPA0XăU"%a0qSr-d;?A7RfppL=.:['h$xt4C]^wOdbyZ&o4K\PA3i#Tl<Dv'hE&#l0j2pg:ăU"<A%vg?_r+YEZSp:Sp*s]9<an2DO(t->\HX,-4,id+:6DR/h]D2Z?<)#,iDsZ>]8ăU"CVA%<$8Dm)_#IkBabLNF:<d_I_(I)B7Tx_e3kU(%#YvQb:8z1'nBf7d\\UzcVXiăU"9Lh&&]-Y7C1bq3\WTK.?lGh#Q4r8*+ZMn#*v7>LvE$sSQE^AguW9/MHI7%LqneYăU"%itmj;7RRx7k&dx]OAM%Sn,g&HXBdq_>6/0)FLL:]mbp7)5yr:Od\iv^da'0st7ăU"6X3haQD]eX*PjYZ4:e>6p78j%nrNThv$pculncPal[#GPnuHXGqV=fa+g22.5%?ăU"Nm+hokReib\t<TX3,(12VsQB37-v8*tF_gP_vj52KN&_U^h<c0Grqr&\6d1IgkPăU"D;*4D4^1eFFt95HStzrv%G./bndRRKQj5FWpcuf]qulnic/a<n,cJDH1/II#[e3ăU"ovvJQ<-\H#PMP*LozeKZ5r/=0H:0LOKb<jb$K3oD4pb(86XF60C=rtVu6j=I-c>ăU"aWRmMj-(V.BY^vM9&FEt9iK<vXz5hpI>B_)T0'JcXK.kEgY2O:tp=cfsP&IFA&?ăU"n&kZC=^aVlOAb%oDVY+S-a/=J<g,X,$0??d8;P*#gl)a=WWAqojR/Ffzi.\9[7IăU"K4YC(*<ns5dNd8LTj(=In&*+gg:.I%%_2k%hYfB'Hx%xIf=h,7ABw,+YAbCtecDăU"(^C)\N&[8NW7#eO67Bm'jG/hH5n9^sEh-]U)MeUwZE^KU8m>G#<0]z;t5</bdQ4ăU"P+-34ecHS[ibEMcM06K[yz208fBH):\^jH3=m&2S%Sc/,[cr%3Oq%tA5Zk,9*9XăU"uR2Yu90N1F4p^E.aJIiuf$I_C:8ZKyL(%p'hK5I+GYr7K/-*zmRSKly0ju;.,-SăU"*v(1GKsRa8,FfB40qI_\Kla?7S-%/#e=#wevrhIRshLFPea6O&Lhnu-4=,0?S]2ăU"4Q1R(fz&oRhy$cJ%4rp4zTuFJy%<-C\YYZqjTKWh5P0f+_-[y>k<SIJ]./I&yVYăU"4;Jq&Bfj)0dXAvRj=lV>2\vl%Z9/8q/7&z4t'M0)qiTQq6GR9iE1Ft5I#0mmwHTăU"D'2TKf4([EwW</W/?kqewBS&f:53gr,auutaR*B;r5+</j<wDST$rIB^1U;ot]'ăU"f%5?;)yt)&Z-R:.RW1b.h+TUTW0Cfb&lKFG2S(HEDZRa&AEpXXCnm.<9d,h6DnAăU"m+JmzR*tCG*/Ao,>\(LmO9.kf2x9LNKqB87h=;OB46JNJUS'mN?0?oAIe+;V7;;ăU"-F70SOS_^BKTID?EJe[>gi;i(;Q[l6+8Zn[m.Y1rsHtOHn9=ZSUXrDE=#?'K[NPăU"^V9G;h],qEDL)2h'[Q8\Dc=>7-Lrp6a'+VZlH\t$I8P%t$kZr>wAF;6UVskvlc>ăU"u\xe:=VuQvd-<*MP[ZP(^wSB7ULJFeI1X^=)QI_1OkK%LsU]#5U2I3)f5v\XQp-ăU"pW,b+^3E;>T-fU[TO&a-%9Ik&TL<:W#21v_R=*??j+1\:OBjB,=/TP2\85/31y7ăU":6[?cb0r$bbOP8K2z(kCE5091l][GBWqa;(?fk=1[kgBy3sJ?=SX#%s]P[(sA*aăU">^*op*8'B..oDYI:8xP^gfZSPF[xs%iMNNJ&wqcG3O#D(vpIx2rWa7#ink\MGByăU"/uo1UeW*^RdCt%VJ<e0o=:VJeW.$?Aqc,#zF5-'sIToV499RzECC<jBSsgIfT4SăU"_]h8uW&]i]o/RRAu9ALr1%AoV31L,uKZb*YwV^T1(+e#5Hk82gr?M0<sV8N:)V/ăU"fc_&bs_fPD*>BCh,rd0]F(faPW%#B$#'#s*8AEVVMvHM5OLK\o5jP.e_kmFB<62ăU"?[0]7gy$>7rKUr;3C^yRtY+WnW2&Q8ii95wYi['L-)0-/N]^Y>(+1K:0/2<lx#dăU"%XJt)omQW2V1mt^BYx=V^YZmnsumC(Uy:3\ZFm>XL*UjYL.cR/gzMcV9NpVJd\6ăU"QA<e=s3ZS/MS&_R38oN>6D(b^9B)gji-9T\B3))%3Ot[/y$F*/CjeGHNZp=P[\6ăU"O5OjhcSJcJJ6[<*3*Q*K19]rmyO\8?5u-1;*l:uc.HeMiy0WeIa3)Pv]g[L:Q'tăU"Y[iLY(/P79nwYUA+_j,#//EYsYP,[0ZL4wwFC?\TV]rXn*]AGR,cS3z:98Z_;JXăU"<=rY4G\f85&KYGud.puF%WYsG*.JlnL2l8sQr:*uMK3P%bXh;A9eTMu=^=2j8XiăU"wmeL<=J16V8wfr6+ApWi?O3LiuxT^dF,?[.:Jam(GXri.r7R.q%jE(=XS[k#xSpăU"RP6./A.Bfq\kURb[#RfMf2vP6L8%QB*1MT3&=J$3h%7H9CppT#4(P+7n-[vMarWăU"f;\ohkZqT7%(Mc=4TR:NLN'UO:mE.]6T.#QQqKIr^)IM%ov1[EjR4Ku%OQ*6??ZăU":Ij&$E+(,1nQF3hm;u:79u;&L0XsZ1=V,;pdRyif#CC<+H0>)MKc=ha3Ps6z_YYăU"+A8t#g+W,)B?;4_Mo0?K[kC]gzZ2N[?](mykaV%>la6=Jcm7u=n1ji_r'fY\?h&ăU"ezKRl6XT.s3;18V'v0CK<)nPjf6%4l:0fVq6nOAnDxiGXnXT'^I&e9W7a>eJFDMăU"z>,CB[NG*FW;U)N.^6(B2BP1ATC10Z[r<M7GCdZif^.Wf8rKu\>#BznlJJ-UcS7ăU"mPbND8gBsF,$neUYwd\Q:qrnmC?h[axs?Y.ulMd+>J1niFqxD->hlXNKuw$QVGFăU"8LohhGh>:kX\W:H3(Urp?^5&U/6me(IQd%dkn:*Eh'4b1c=TRtAJ_ad5,2JnCWOăU"q4O:.Ovfqdc=Z<x.I=ypw/Ux:S+$R&6_qw7GeTT[=+B//r$#f$?r2:5[s1yrbgAăU"]NUH(at%2AhtOjlFK6-HGHovc-uBY\XXtc/+r040euV:uNCfa2usV_2J7XkfPoQăU">Tt5%9UAE=1.ICf3Ld#^wP_ieti3+G#AE]7QBXU_tI(Ym^&V;\cIW8CYQKVvvLCăU"kZ>0knBhmF>e0kd5)#/+FJQ?RRDFlB%t\SZO>u.&xm=H+PYv+cB^Ag)]xF.Lr8căU"8#OlnE,JtkENzYLq)#SmhDdh;6PN5-Y8)sd&KEL<GyJ/.Pb#kUHb7j6spmEIaAEăU"9t,uJK*gGE91S7]+Vo.$_/pwAfGc==Slf8-$rSsi?6A<7,_p[#,xVU+Ugcp+k*5ăU"VnXLXtTh0uC7ks0A3:H*(zS.?5'7AuYTY6Y5PFs2$HY[5nG;TG6JpUGdm_9HGbaăU"W:?m\oMJ.d[a_Am+gENp0H^+15q+i:=6sY$[LTSlqe)]uUc#7QBfC$MgiGit&_yăU"Ak90-0zi7qBT:[WBu_[[Tk'p:0T.Hu0?kAn:SNLX<\>3Cfmq6>2FB(J$t2),RFTăU"^3-_u#skZMI,CzK8Lug>2v0zrZpZlOQN'(n\nOc\M*?'cZ&0)]DZEB3gl#*uK[eăU";D)TDs.m,oS[4<Q?j3Alm8O)/vYf6-]q=tkdaTAv%7p(:YWPJ$w69b;.OVn[]D8ăU"0JA:iq_%^-9=T-C]r\(s)Hrb+9Co)[ES.2\ew/CasJ6.,&3Mh3U$on5+_rz(cAnăU"<,s(Tlf:tbP?VdDnrUNOh1sN1vVCCv=sos+Al6(^JX76U'Ftv^Tb)M13^d:f,?tăU",Qs#h*hq%CZ(I_wDq\WjDi=.YB-*,f\f=UNr,nMu:-\:Lf2=Ie_wq?vXs1rc,<WăU">-MYZaiCI?:O501P[&(-c1+D60Wkl08u)WRX<TbI%VLcn\=R5H0O\xe%.zh,rB8ăU"]5aR]DwIIUN9b9m#O\$RGEc]8cF]Py9o\30GWdxV]v3>/Gi%-n><KZ_,=o$DaZlăU"$'G/B>uJCkecT8IE'bWs'a\;95sx;H+il*(9(ez,A[T..lIQMB[S^%S*JA9ida3ăU".p*q5%OGC9z)3(:Pq4K4F]1Qpw5;DqonwQ(u54ZWi%9eC<D4cRT5)qrRJXQ/r/PăU"HNn.]K$iav#*b,v0g5*w70GC0gE$B8EAbg-qw\kQ5*WdNvek(<1Euf?)Yvp*a1MăU"1o_Zh.b>_oBweyc7>W.P%MN(W7fC1mZ6>seLk,A3>kv)dI*-Y'-d'E4OhuxxjX9ăU"Tb?'PR<S9VsSq'Z8((?EN?^ZaEetW3lnhIMnW$X6DOBl,?J'.\m)4[CzoYu\L7hăU";ACqWK1w_4RhwLT*l=^#ifzx.]GDF4nUe(,CSEjWgtD<<3mBLbIH:a8B07j)r4'ăU"5*#_;InwFYUVeH2T'9Tu2J#fkG-k41sXi4/\Z[DQ?Og/A4I7wu)/hncM\e8yiSMăU"ofG[M:6:CltM)DDTG3M;DQS/yqpE#DOvxdI/#uWMIep&%y5DB>_5zAz;J3CP&JWăU",43zN2-X9*UnOZvBQ<CYr>siJLP]&,'&=Bqqzz&0M)&*.36Aq59#t,LM-i,<SFyăU"f9o4LV'MK+%t<h43*NbFX=d*rW[5vSfCnyj^iav&(**39vgW/9N?Ssq.9Iavq(dăU"f7/qONodVA1VNK<mY\z\&Pk#EOy?*)d8z28]o-O%m'1dW&aZ2)x)VVkKMY\(z&PăU"kj,Dth05:z2KjoCzQac7m1/]K'I'S]&gm?pg.59?weW(6w_iU(PIWLe3%ZQtbK#ăU"c]k3fy5<T_3Gk0rN(1tp(+^/VwF;,RZ72^Xi/5Fe.+*&n&>GDTf,2e7$G(Rr+j+ăU"4^O5$2Wl-P6#C4c'D.'1-0pFi8jfAJVpn8;F92EY*7R(G2C+rQC[FW(*Ff3r,$2ăU"E.k)7<WIc$vdZJ2h2h;'5k%N//qM)^0h_*G48RRg';#9\VH%j2yxahf4L[/GwI.ăU"k/1w_?[9-.nf[9&Cmf,%N]K*FTen]EfKbMNXnN-3UdJ1j&W^,B5i+iMORpD6l?BăU"pq]5icYw_Z+4Tuk0Yph^&+-WsS>4JrLu5b=^sr&A^^sg(78?^Y.eFezYIJLT-SDăU"j$zYVDp3U&l9fZf<9lip5M0Qq-PjX*]7Si)Wi.3);Zx8HV2T>E.*2j#u4E?p.*2ăU"O?u4*J;IP_4B*p)=eGQ1TUB4w)[--NAY7uc0IGXZ&/#N:MAZYD+exb)&gRO>u29ăU"&?'(,;9D1jgj1w7*93aJyxRmfQWb_bxj#+y.L7/cY$>&Q(c^Ppuv_]7m;HWmY#XăU"iQoxu)+6^O)sgq=g/xy?YL6=K?P*T&0'E7qU35[q$^4UJ(UHJ[(Y)-.GOO^jz:9ăU"vlmD1Bq?ul^2Vk:5^/XH^Nn$CJ*na_]1T^4^_Hq$/2qhKo]=xQX?>cDqT,c6v+zăU"Iy?&bs,%#7%E,fh\9(S%3#NIx4gXPnvzC<r0tvG9(tL8yt.len8H63MO)j9MY$IăU"mOjfGEb?u/0#&DT(v?I][v/(<4e%lmR;;R'4:#EV,:h(vSR;^E#eY%j<wOPoqdZăU"4NhS8c?Dxb4'CXWYw()wBgB>5OmHbO$sdZU8>)X=g.=:PeVq^+=],-hsF0]'3nGăU"QGN9.Mj,[gg&Uv][s#><UxTkaMR.sZ^vv1E.pl>5s+ag3.DfA3#*:5[(x?viW3WăU"LJ<GAhsi-(A?1AeUa9=-Rs?eFh\>d6gY,7mXpN\s)V[,afnMe#:kpf>f?Agbym5ăU"g/'fBRQPu<w[lo[S64YGMgH?*/M'>[b[F?V-RU6K$jYb)eJZGQD3E=W<YPFFYz\ăU"2aLF_R/.qBjg/PWKk?UarPxY>2>lcQBG*0:qbw[=#C3j\1j4\tKQ%zk=$%[GcdKăU"C/)fbdA/Wrl9F#DdN+r0A[\shJw/z>+S0hQV'%%^4*>pD(mhm$>G%&b=IHG6mS[ăU"FF7-[EO^bpF#JtBLZ/YS\s>BMz=FLc4()6nxPRuCuo]?\>JqZBGARVRZOl,YspvăU"2Fe,R-]7%Y>?DXas<^rud*wqPWR#g\OIw_swO,].#C].'Xesg5JVLH]v1LP'W.săU"XKGmSq?X+r=5iY4JuIE^X=Pewyh\&+Ob=(]fo>F+G#tR6($\1wZ]X7J*-w.G\ftăU"jES,IMzEJKitJ&ujWv3I55p%xO[ejOjIZkO<m<H<qb?I?6(Wv_:bQXU-9t/+j87ăU"mX]8L$>:4R)jl;oOoa>=C&%&#PvkRIlsO2phyQ0->oj&<W=GcPiK47+F)D^IrUiăU"[b^s<t(xdTq6,_5'wO7/7v*D%5IWaosr4XfUigIFOvF_IR)Am+g[5ttp^-xXv-wăU"_3h$:;$Mv$X+;c>%Q/WID<>KuqPLYQM>2Nb(,$T,SpaKY;fZ($kMPW^fLbKO^WSăU"xU,kQODCsB4^gYIAVD]ABP2n2V_p$m,gk\_M)luS01Lc7vdfl,ic+em_2vK[qEqăU"eoPeXfb*.:24^I/5Tpo*SB>6Dgos(Xs_Kq[E5ongL:^YUR(JdH)?;_W1$x%8iodăU"oH/Buajmb$?l(LT<Fnn7Y4gdX;eE7#gk/rY_rYov'u6L$QanvQL,%XRda.Ycga4ăU"7#LnEDT+IkE=uJeA[\KFTx7oWCnvDXHFsZ?ph.6TDFaM8#6-qg;tia.y8lO(S2^ăU"zG9)mm3?0q#+je)s1'Y32NrRh_^m(86_+sJo6rN?il(t;a&Fv=ou]Uqp8[8j0PMăU"Igk0Q[cY1x?CS=rKIW5/d/7-^h'n#)-A1ao&UJLrt7YM0AiI'*s\F7oMlI7Z-;RăU"h]7wE,\Cmw$V[uNAxGp4'G^6H97F,FgYQ-HQPlVCr4-Uoacvjw)(Nsp:,1,38HGăU"xM5s[7o6;SokRSBFQds3GVm:di<-f[wW+j7f3\jkTFWHg,4%gE*$)EPBBhQPek/ăU"&2%sq/E.?:/.#/I_[-Bt7q3&YoT?:I32.FU9C#GEFp$oZF<H)D_yO<WIPCGnhsKăU"Ho=Tlx.d7N1HbJxU'OE&gEtm.gETm77,gFrHfOx$h=>;PYp4kKE/#?P')11GT/jăU"3^>s^[hL2'VqPJYB%]a90z*49H5j[<>hGGTN01GO)8hg>6fO)oz6A9X)8pN.E[KăU"XY[i3a_4;wJ-LkW_\MlH<,BkVL3=NpW\FqDs3YE?lvMi5IMABf<'EF*?5,R:mSAăU"fQ-jFo;p_IR<TccvjV1$Bjt-/U'N,JmQcITTC[((dj-(Vh-bw9($a'mYaoi8$[.ăU"2n_Hd?E]elL_W%5d$5i&g&6+m.Ueu$7p+]%'D)gEJW6WV'rZQ7uYS-gi*rZ&QuYăU"_#-ilrNZQO#V+h0RTS*fM]u$DLZ6CE-cf;)e:g*ug<2(4HDuq3RRUICr^8=2/BBăU"pM,FsJ6obs<LYpYoVNNKuI8[<NkD(=^n:_SLKL<D:*Pj(UoLlgQ&ak7hg4'GYU[ăU"D4xf0?g_1r8t5m6DQqSy7Su*MqfQdMSLqc<6O6h;-8#yVn$&74D)tpD7Uu#8X3[ăU"3x-UVrEIbi8B\BS%I4TA$0>r',ZN4]f-Tco'Qe1tXdo7[+[<:0>,AA)+AV:y:6,ăU"Vh&(G5?r'>Yn%S'8pqplR#$8/]IXF+.rqVHM:^A4#P-J6*I,DCR%<4_tn<09bYtăU"Xt*XXni+;L0>'G0N66hBmn<c-f'VICm;5EkdsnFuq,o]D?a)%0'Pk5zvX'b$C06ăU"n6agVM=X-o?F7m2g4EG\OnK3)gWSLTQb=%jdiN8(BS<BFnoXhsS-9T/qcOV%1J1ăU"h_1mGr&u+/La+-3/N8*sPX2u3a3Gb,H?'/1c^+:*:#R-TnZ#DcJ[j4bC6U./EAdăU"h'gKOtv4:jl>=/5Kp>qg,ru3RKWOmPlWfNjnCp8lD]t2/W_;3w<bg$HDkB[z$9VăU"F-7WlTJ#8tLmKlRW?r8KDNlG4fgUl(c>^rLU'<WtrhB[\+3)4RhfdOada8[+'r9ăU"yWLmqU+OI[vCnHduk+D6O0p5Zdhvrhamq6+Fls(Nv%4up(%)9%'%%-%\AkPJ+erăU"c-&%)%%C%;%%1%%%%x%mfuj%xWiS#ifyl5'F=H7\17#oi0eB.TUUmIo9H+\C4b.ăU"40-L%%H#Q't3fOQqqLuc*#Xhv'L1[e<YGknZutm$>iX(ttvlP$?#vg5^3Vh18LgăU"ra:/B991(4XV7C3DVNfFZLgqAJwr+;8t?f(8t-P0#C,BA5]L0O?Y24TJycpvfM0ăU"[vVD[jrQg_FnDH0Xt.T3$(YYIfmkOQ*ud13VPQ+,/Nm^G9E:dCI6ngI5:2=Jh9RăU"9_$(9'Go%jiq*K&><H^x3-'<pvLw,9:kxF\rulT3o$x$(rr/n\?iV-D^HHNYe&KăU"0f9e[Qp>'=mvy%'mn0OvDDX+3,'g:f2DG/1n&u%Grqu2(G[i(Gcn&/Ao)v:?Q+-ăU"\62=**?/fW1,(JYQ.0;Acv.A8pcK8Q%9A:n9+K;)2Oa*b(*(M717vo:_3nyEQ)%ăU"I1je+U+M^G5>:'A4t423TX3XvoRR+\^9Z8t^A)-r>l<Ea2;kit0F0EFeD7'5FrIăU"9yqS&k8*e%1r9EI8lP+ZI%]s,$mj(A^9V/nOm>#VQ<Jaf+G2Aka-vP)q3*ZQPR4ăU"?FUHA+2;wscA%H8nRCDO3h1_o30JE6RD=^?s?*>6.Z.>[,J]AIhto6^>/*c;iP<ăU"*GfT6dG.2+A..;(yDVYc;>c,a/uJ#'KoSXwdMjCqxGP)9HA8r-)?[(0s%9='Af-ăU"AX/g[E^Jzw]c;i%KKiQhA=,Rvay5S8n4TekG'tAV^qsVV1u'+G1qXZ\)$ICY(O9ăU"KS4K-DG.(g,f)(RWZo11G\6Mr4m\Sq8*71nFc;xUr<M.mrA-K[PW/Y+=.(T.*YOăU"9,pc+>/s4q=0\5uV7^k^R92-n<eS[]u)ZsW)DO)MKSZFcw)6.h<=JH3r-nRYXQhăU"MGI3c[u\hKOa,BuBeZ^57R2.CoJ$zQ%JIzcd0WCf:oarJD>ugJug6$p%[PCynQ(ăU"#QxEQbAW=^cx152#cN;4]=ypaX&HF;8E0&W6jyMvLAh<m]pp?Nn?[<QEurM:9=(ăU"sDSj0SmKXC&.TC[ow;rTj9*EG9Qi/.l</0Hs>jEk#8gPPS0&o0N>?t4]JWO8b<,ăU"3foq\.elq$RA4Pk48$KVNDpdfT'm^[2c=PLoou7'f*1Tztm&jmL9s>1^>/^BBnuăU"uQ<wF9m0^WjC^Mtc#\#*664nTkl2rsq;RDhQfLoF/LeUC+8O%pHtWU%hA6b33,OăU"+#wtR^/<hL5rB^5RN$rp;Y=,H<DUdP9lhuu's)')v$W1n;8mIB\c8a.Pgv50m3]ăU"<fSWdSqR=5v9Dh>v7M'pcC]/T#**Kr(lL'\LT3iwYPlgPU4EXy*g293&p0Sbx<XăU"WVX+]LFon,$Mv(6ZY,H<a)Xb+mT2VXqTh;+h>+LS]+QfX.*L[hoXvJ,kFKlBCDTăU"c#s1G'50EfN5'Rt>)9wy,DG'9PScqZ,5ESW#s<5=*#9Bmg(rUMpjtI6u,?r>_0HăU"ev<knntPdubrjrZrknIKs[+ie68A6%D&JkfC9c$CM'>E-V[>/P%W,MeI_L4tk8qăU"ji/Zw6V[)=MZpZ<N%up()%9%'%I-%h0mPJ=G-K(5&.%%q*%%%/%%%%lW%ijrt%SăU"ifyDlcv=#SF-T3XjC4*,Q8)p)+xC0'gjdgVb7h<isX>d)fmGWi7DclOPm$oZ+[aăU"lW=MoH78CR$Ig;.+lvTg>2IKNTDlqE?m.).Jpt(CMZt8\s5GDmp'^9IR/b*2XI-ăU"qk_?p6bew:d?]_dKD<m[N>keB]=oE3c3oe'hjAX/]L9T*Wh=xnXZGnjCiJI(dBsăU"$\V2kX9%Dh[u6Eo_5HS<?Zl(lW(tlseD+sEx/8[8;r_0HU$J%;F*[N\^/RGhGudăU"'lBd=[AtS\i.bmt+8x9n'_bo:GQ'cYwbm-XVj7]x'\FBlc^B-z^Hme&y&m]fv=9ăU",w>aNth6NI;V[s&'Mqp).#]?fYv,%up&'%9%9%%'%-%*G5SJ1/t]+'G#%%*&[%%ăU"%*%%%%%%%%%&%E%%%%%%%%%lW%Sgnu%p&'9%%9%'%%-%S#xTJ?Xn&^R%,%%]%I%ăU"%/%%%%%%%%%&%%E%%+%j#%%%lWi%jrtS%gfxu%p&'9%%9%'%%-%0\?SJlaIk;j%ăU"B%%r'8%%+%%%%%%%%%&%%E%%(%kH%%%lWS%gfxu%p&'9%%9%'%%-%\AkPJ+erc-ăU"&%)%%C%;%%1%%%%%%%%%&%%E%%+%*f%%%xmf%ujxW%iSif%yup&%'9%9%%'%-1%ăU"h0PsJ=GK'(5&%(%q*%%%/%%%%%%%%%&%E#%%%W%k%%l%Wijr%tSif%yup*%+%%%ăU"%%*%*%%6&%+%9l%%%%%ăEND SUBăV2ăCLOSE:IF S=38AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRoss Harper                    GRAVITY SIMULATION             t.r.harper@btinternet.com      04-18-99 (21:56)       QB, QBasic, PDS        72   1827     GRAV.BAS    '' Hullo!ă'' Something I wrote in days of old when knights were bold and I was bored.ă'' It's a thingy where you have to land the ship (you know the type). ă'' The space bar fires thrusters and Z/X moves the ship left/right.ă''ă'' Rossă'' Peachy512@yahoo.comă'' ICQ: 15844814ă'' The Zax Bypass: http://members.xoom.com/Peachy512/Asylum/home.htmăăDECLARE SUB pause ()ăDECLARE SUB explode ()ăDECLARE SUB ship (q!, a!, col!)ăCOMMON SHARED x, yăSCREEN 9ăCLS : PRINT "Press key"ăSLEEPăCLSă'' Gravity=9.8 m/s^2ă'' Ship travelling at 1 m/săg = 10: s = 1: x = 320: y = 20ăCOLOR 2: LINE (0, 300)-(640, 300)ăDOăCOLOR 7, 0: LOCATE 1, 1: PRINT "Speed "; săs = s + .1ăy = y + s * găCALL ship(x, y, 5): pause: CALL ship(x, y, 0)ăa$ = LCASE$(INKEY$)ăIF a$ = "z" THEN x = x - 5ăIF a$ = "x" THEN x = x + 5ăIF a$ = " " THEN s = s - 1ăIF y > 270 AND s <= 1 THEN BEEP: CLS : COLOR 1, 0: PRINT "You did it": ENDăIF y > 270 AND s > 1 THEN explode: ENDăIF y < 20 THEN y = 20ăLOOPăăSUB explodeăCALL ship(x, y, 0)ăCOLOR 5ăFOR n = 1 TO 3ă        FOR z = 1 TO 100ă                PSET (INT(RND * 50) + x - 25, INT(RND * 50) + x - 25)ă        NEXT zăNEXT năBEEPăEND SUBăăSUB pauseăstarttime = TIMERăDOăLOOP UNTIL TIMER <> starttimeăEND SUBăăSUB ship (q, a, col)ăCOLOR colăLINE (q, a)-(q - 10, a)ăLINE (q - 10, a)-(q - 15, a + 5)ăLINE (q - 15, a + 5)-(q - 15, a + 25)ăLINE (q - 15, a + 25)-(q - 20, a + 25)ăLINE (q - 20, a + 25)-(q - 25, a + 20)ăLINE (q - 25, a + 20)-(q - 25, a - 20)ăLINE (q - 25, a - 20)-(q, a - 25)ă'ăLINE (q, a - 25)-(q + 25, a - 20)ăLINE (q + 25, a - 20)-(q + 25, a + 20)ăLINE (q + 20, a + 25)-(q + 25, a + 20)ă'line (qăLINE (q + 15, a + 5)-(q + 15, a + 25)ăLINE (q + 15, a + 25)-(q + 20, a + 25)ăLINE (q + 10, a)-(q + 15, a + 5)ăLINE (q, a)-(q + 10, a)ăEND SUBăRoss Harper                    SIMPLE HARMONIC MOTION         t.r.harper@btinternet.com      04-18-99 (21:56)       QB, QBasic, PDS        54   1322     SHM.BAS     '' Howdy!ă'' Just a little program that I threw together one Sunday, in the hope ofă'' illustrating Simple Harmonic Motion for my A-Level Physics.ă''ă'' As you can probably guess, I need more revision...ă''ă'' Not much of a program mind you, but let me know what you think.ă''ă'' Rossă'' Peachy512@yahoo.comă'' ICQ: 15844814ă'' The Zax Bypass: http://members.xoom.com/Peachy512/Asylum/home.htmăăDECLARE SUB pause (s!)ăSCREEN 9ă''INPUT "Amplitude.."; Aă''INPUT "Pulsitance.."; wăpi = 3.141592654#ăa = 50ăf = 10ăw = 2 * pi * făă''draw grid!ăLINE (0, 200 - a)-(0, 200 + a), 14ăLINE (0, 200)-(640, 200), 14ăăx1 = 0: y1 = 200ăFOR t = 5 TO 640 STEP 1ă        w = INT(2 * pi * f)ă        y = 200 + (a * SIN(w * t))ă        LINE (x1, y1)-(t, y)ă        y1 = y: x1 = tă        pause (1)ă        a$ = LCASE$(INKEY$)ă        IF a$ = "q" THEN w = w + 5ă        IF a$ = "a" THEN w = w - 5ă       ă        IF a$ = "e" THEN f = f + 5ă        IF a$ = "d" THEN f = f - 5ă       ă        IF a$ = "w" THEN a = a + 5ă        IF a$ = "s" THEN a = a - 5ă        LOCATE 1, 1: PRINT "A="; aă        LOCATE 2, 1: PRINT "w="; wă        LOCATE 3, 1: PRINT "f="; făNEXT tăăSUB pause (s)ăFOR zog = 1 TO să        starttime = TIMERă        DOă        LOOP UNTIL TIMER <> starttimeăNEXT zogăEND SUBăDieter Folger                  WRITE/SCROLL TEXT AS DOT MATRIXfolger@bamberg.baynet.de       04-22-99 (07:57)       QB, QBasic, PDS        71   2133     DOTTEXT.BAS '-------------------------------------------------------------------------ă' DOTTEXT.BAS for QBASICă' Writes text in mode 13 as dot matrixă' One line can be vertically scrolled (SUB MoveText)ă' See demo program for usageă' Note that chars > Ascii 127 do not workă' Freware (c) 1998 by D. Folgeră'-------------------------------------------------------------------------ăDECLARE SUB MoveText (y%)ăDECLARE FUNCTION Bin$ (b%)ăDECLARE SUB WriteText (txt$, y%, Col%)ăDEFINT A-ZăSCREEN 13ăLINE (0, 0)-(360, 190), 8, BFăăWriteText "The", 5, 14  'line 5, color 14ăWriteText "All Basic Code", 40, 47ăWriteText "Archives", 80, 60ăWriteText "Created by W. Yu", 110, 11ăLOCATE 25, 10: PRINT "Press any key to quit";ăMoveText 40 'text on line 40 is vertically scrolledăăENDăă'---------------------------------------------ăFUNCTION Bin$ (b) 'QBASIC has no BIN$ functionă'---------------------------------------------ăDOă    b$ = LTRIM$(STR$(b MOD 2)) + b$ă    b = b \ 2ăLOOP UNTIL b = 0ăBin$ = RIGHT$("00000000" + b$, 8)ăEND FUNCTIONăă'---------------ăSUB MoveText (y)ă'---------------ăDIM TextField1(1 TO 26)ăDIM TextField2(1 TO 2740)ăDOă   GET (0, y)-(1, y + 16), TextField1ă   GET (1, y)-(318, y + 16), TextField2ă   PUT (0, y), TextField2, PSETă   PUT (318, y), TextField1, PSETă   k$ = INKEY$ăLOOP UNTIL LEN(k$)ăEND SUBăă'-------------------------ăSUB WriteText (txt$, y, Col)ă'-------------------------ăIF LEN(txt$) > 20 THEN txt$ = LEFT$(txt$, 20) '20 chars maximumăx = (320 - LEN(txt$) * 16) \ 2 - 2 'calculate x posăFOR i = 1 TO LEN(txt$)ă    Char = ASC(MID$(txt$, i, 1))ă    FOR j = 1 TO 8ă        DEF SEG = &HFFA6 'seg of fontă        By = PEEK(&HE + Char * 8 + j - 1)'offset of char line byteă        By$ = Bin$(By)ă        FOR k = 1 TO 8ă            IF MID$(By$, k, 1) = "1" THEN 'then set pixelă               DEF SEG = &HA000 'color video segă               yy& = y + j * 2: xx = (i - 1) * 16 + x + k * 2ă               POKE yy& * 320 + xx, Col 'write pixel into video bufferă               DEF SEGă            END IFă        NEXTă    NEXTăNEXTăDEF SEGăEND SUBăYousuf Philips                 OPEN BMP VERSION 0.4           philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        612  23985    OPENBMP4.BAS''''''''''''''''''''''''''''''''''''''''ă' Program    : Loads BMP Files         'ă' Name       : OPENBMP Version 0.4     'ă' Programmer : Yousuf Philips          'ă' Company    : Y P I                   'ă' Updated On : 29th of Dec. 1998       'ă' Email - [philipz85@hotmail.com]      'ă' [http://members.xoom.com/Philipz/]   'ă''''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to load BMP files.                                        */'ă'/*                                                                        */'ă'/* What's New -                                                           */'ă'/*            * 24-BIT loading is in color                                */'ă'/*            * 8-BIT loading was increased                               */'ă'/*            * 4-BIT loading was increased                               */'ăă'/* If you use any of this code in your program then you must credit YPI.  */'ăăDECLARE SUB BMPInfo (FileName$)ăDECLARE SUB SHOWBMP (FileName$)ăDECLARE SUB ChangePalette (Alg%)ăDECLARE SUB Open24 (ImageWidth%, ImageHeight%, OffsetOfBitMap%)ăăCOMMON SHARED X AS INTEGER, Y AS INTEGERăăCLSăPRINTăPRINT " Fast BMP Loader for QBASIC - OPENBMP ver 0.4"ăPRINT " (c) YPI (BASIC Programming Incorporation) 1998"ă'FILES "*.bmp"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă   ENDăELSEIF LCASE$(RIGHT$(FileName$, 4)) <> ".bmp" THENă   FileName$ = FileName$ + ".bmp"ăEND IFăăCALL BMPInfo(FileName$)ăWait$ = INPUT$(1)ăCALL SHOWBMP(FileName$)ăCLOSEăWait$ = INPUT$(1)ăăDEFINT A-ZăSUB BMPInfo (FileName$)ăă'/* Opens the specified File Name */'ăOPEN FileName$ FOR BINARY AS #1ă'/* If the file name specified is empty then a line of text is printed, */'ă'/* the file is then deleted and the program ends */'ăIF LOF(1) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #1ă   KILL FileName$ă   ENDăEND IFăăCLSă'/* Extracts the first 2 bytes of the file */'ăValidBMP$ = SPACE$(2)ăGET #1, 1, ValidBMP$: PRINTăIF ValidBMP$ = "BM" THENă   PRINT " Valid BMP FILE"ăELSEă   PRINT " InValid BMP FILE"ăEND IFăă'/* Extracts the Size of the file without the header */'ăSizeOfFile$ = SPACE$(4)ăGET #1, 3, SizeOfFile$ăPRINT " Size of the file -"; CVL(SizeOfFile$); " or "; LOF(1)ăă'/* Extracts the offset of the picture data in the file */'ăLocationOfPictureData$ = SPACE$(4)ăGET #1, 11, LocationOfPictureData$ăPRINT " Location in file of Picture Data    -"; CVL(LocationOfPictureData$)ăă'/* Extracts the BMP type (Win or OS/2) */'ăBMPType$ = SPACE$(4)ăGET #1, 15, BMPType$ăPRINT : PRINT " BMP Type       - ";ăIF CVL(BMPType$) = 12 THENă   PRINT "OS/2"ă   PRINT " Size Of Header - 12"ăELSEIF CVL(BMPType$) = 40 THENă   PRINT "Windows"ă   PRINT " Size Of Header - 40"ăELSEă   PRINT "Unknown Type"ăEND IFăă'/* Extracts the Width and Height in Pixels of the Image */'ă'/* and also the number of bits per pixel (bpp) */'ăPixelWidth$ = SPACE$(4): PixelHeight$ = SPACE$(4)ăBitsPerPixel$ = SPACE$(2): NoPlanes$ = SPACE$(2): Compress$ = SPACE$(4)ăGET #1, 19, PixelWidth$ăGET #1, 23, PixelHeight$ăGET #1, 27, NoPlanes$ăGET #1, 29, BitsPerPixel$ăGET #1, 31, Compress$ăPRINTăPRINT " Width of Image in Pixels           -"; CVL(PixelWidth$)ăPRINT " Height of Image in Pixels          -"; CVL(PixelHeight$)ăPRINT " Number of Planes                   -"; CVI(NoPlanes$)ăPRINT " Number of Bits Per Pixel (bpp)     -"; CVI(BitsPerPixel$)ăPRINT " Number of Colors Used in the Image -"; 2# ^ CVI(BitsPerPixel$)ăIF CVL(Compress$) = 0 THENă   PRINT " No Compression"ăELSEIF CVL(Compress$) = 1 THENă   PRINT " RLE - 8-Bit Compression"ăELSEIF CVL(Compress$) = 2 THENă   PRINT " RLE - 4-Bit Compression"ăEND IFăCLOSEăăEND SUBăăSUB ChangePalette (Alg)ăăIF Alg = 1 THENă   '/* An excellent color palette from PALSTUFF.BAS [Graphics.abc|09/1995] */'ă   '/* Created by Steve Demo                                               */'ă   Change$ = "#####M#M##MMM##M#MM8#MMM88888b8b88bbb88b8bbb8bbb+++"ă   Change$ = Change$ + "...222555999===@@@DDDHHHKKKOOOSSSVVVZZZ^^^bbb3##8##"ă   Change$ = Change$ + "=##?&&B**E--H11K55N88Q<<T@@XDDZII]NN_SSbYY3+#8-#=/#"ă   Change$ = Change$ + "B2#G4#L6#Q9#V;#\>#\B*]F2^K:_OA`TIaXQb]Y33#66#99#<<#"ă   Change$ = Change$ + "??#BB#EE#HH#LL#OO#RR#UU#XX#[[#^^#bb##8%#:(#<,#?/#A3"ă   Change$ = Change$ + "#C7#F:#H>#KB#ME#OI#RM#TP#WT#YX#\\YbYRbQJbJG^GDZDAWA"ă   Change$ = Change$ + ">S>;O;8L85H52E2/A/,=,):)&6&$3#YbbQbbJbbE__A\\=ZZ:VV"ă   Change$ = Change$ + "7RR5NN2JJ0FF-BB*>>(::%66#33Y^bQ[bJXbBUb:Rb3Ob+Mb#Jb"ă   Change$ = Change$ + "#F\#BV#>P#:J#6D#3?#/9#,3YYbQRbJJbEE_@@\<<Y88V55R33N"ă   Change$ = Change$ + "11J..F,,B**>'':%%6##3/@$2B#5D#8F#;H#>J#AL#DN#GP#JR#"ă   Change$ = Change$ + "MT#PV#SX#VZ#Y\#]_#bYb`S`^N^\H\ZCZX=XV8VT3UP0QL.MH+I"ă   Change$ = Change$ + "D(EA&A<%<7$73#3-+&1-'5/):2+;3+=4,?5-@6-B7.D8/E9/G:0"ă   Change$ = Change$ + "I;1J<1L=2N>3O?3Q@4SA5UB6VD8WF;XH>YJAZMD[OG\QJ]SM^VP"ă   Change$ = Change$ + "_XS`ZVb]ZZ##X)#W0#U6#T;#S@#RF#PJ#ON#CN#6M#*M##L(#K3"ă   Change$ = Change$ + "#K?#KH#FL#>M#5M#-N6#Q>#QD#QL#QQ#NQ#FQ#@Q#9Q#1R#+R##"ă   Change$ = Change$ + "bbb"ă   FOR Loops = 0 TO 255ă      OUT &H3C8, Loopsă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 1, 1)) - 35ă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 2, 1)) - 35ă      OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 3, 1)) - 35ă   NEXT Loopsă   Change$ = ""ăELSEă   '/* Randomized color palette */'ă   FOR Loops = 1 TO 255ă      Blue = INT(RND * 256) \ 4ă      Green = INT(RND * 256) \ 4ă      Red = INT(RND * 256) \ 4ă      OUT &H3C8, Loopsă      OUT &H3C9, Redă      OUT &H3C9, Greenă      OUT &H3C9, Blueă   NEXT LoopsăEND IFăăEND SUBăăSUB Open24 (ImageWidth, ImageHeight, OffsetOfBitMap)ăăDIM ColorPalette(255, 3)ăDIM PixelArray(2000, 3)ăColorDif = 3ăăSCREEN 13ă'/* Sub which changes the palette */'ă'/* Valid values - 1 - Color Palette created by Steve Demo                 */'ă'/*                0 - Random Color Palette                                */'ă'/* If you want to use your own color palette edit the function, and if you*/'ă'/* think you palette works well with the program send it to us.           */'ăCALL ChangePalette(1)ăă'/* Capture the current color palette into an array                        */'ăFOR Loops = 0 TO 255ă   OUT &H3C7, Loopsă   ColorPalette(Loops, 1) = INP(&H3C9)ă   ColorPalette(Loops, 2) = INP(&H3C9)ă   ColorPalette(Loops, 3) = INP(&H3C9)ăNEXT Loopsăă'/* Calculate the number of bytes per line for the current image           */'ăLineExtract$ = SPACE$(ImageWidth * 3)ăIF (4 - ((ImageWidth * 3) MOD 4)) <> 4 THENă   LineExtract$ = LineExtract$ + SPACE$(4 - ((ImageWidth * 3) MOD 4))ăEND IFăLineExtract& = LEN(LineExtract$)ăăIF OffsetOfBitMap = 0 THEN OffsetOfBitMap = 55ăă'/* Resize image to fit the Screen                                         */'ăActualHeight! = 199 / (ImageHeight - 1)ăActualWidth! = 319 / (ImageWidth - 1)ăIF ActualHeight! > 1 THEN ActualHeight! = 1ăIF ActualWidth! > 1 THEN ActualWidth! = 1ăActualHeight1! = (ImageHeight - 1) / 199ăActualWidth1! = (ImageWidth - 1) / 319ăIF ActualHeight1! < 1 THEN ActualHeight1! = 1ăIF ActualWidth1! < 1 THEN ActualWidth1! = 1ă'WHILE INKEY$ <> "": WENDăăFOR YHeight = ImageHeight - 1 TO 0 STEP -ActualHeight1!ă   '/* Extract only the image lines which will be shown                    */'ă   GET #1, OffsetOfBitMap + ((ImageHeight - YHeight - 1) * LineExtract&) + 1, LineExtract$ă   FOR XWidth = 0 TO ImageWidth - 1 STEP ActualWidth1!ă       XWidthPosition = XWidth * 3ă       '/* Extract the RGB of each pixel                                   */'ă       PixelBlue = ASC(MID$(LineExtract$, XWidthPosition + 1, 1)) \ 4ă       PixelGreen = ASC(MID$(LineExtract$, XWidthPosition + 2, 1)) \ 4ă       PixelRed = ASC(MID$(LineExtract$, XWidthPosition + 3, 1)) \ 4ă       PixelPut = 0: Movement = ColorDif + 1ă       '/* Check if the RGB or an RGB close to it are in the color array   */'ă       FOR PixelArraySearch = 1 TO ArrayNoă          IF PixelBlue >= PixelArray(PixelArraySearch, 1) - ColorDif AND PixelBlue <= PixelArray(PixelArraySearch, 1) + ColorDif THENă             IF PixelGreen >= PixelArray(PixelArraySearch, 2) - ColorDif AND PixelGreen <= PixelArray(PixelArraySearch, 2) + ColorDif THENă                IF PixelRed >= PixelArray(PixelArraySearch, 3) - ColorDif AND PixelRed <= PixelArray(PixelArraySearch, 3) + ColorDif THENă                   PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), PixelArray(PixelArraySearch, 0)ă                   PixelPut = 1ă                   EXIT FORă                END IFă             END IFă          END IFă       NEXT PixelArraySearchă       IF PixelPut = 0 THENă          '/* Algorithm to find the closest color in the color palette */'ă          DOă             FOR Loops = 0 TO 255ă                IF PixelBlue >= (ColorPalette(Loops, 3) - Movement) AND PixelBlue <= (ColorPalette(Loops, 3) + Movement) THENă                   IF PixelGreen >= (ColorPalette(Loops, 2) - Movement) AND PixelGreen <= (ColorPalette(Loops, 2) + Movement) THENă                      IF PixelRed >= (ColorPalette(Loops, 1) - Movement) AND PixelRed <= (ColorPalette(Loops, 1) + Movement) THENă                         IF ColorPalette(Loops, 1) = ColorPalette(Loops, 2) AND ColorPalette(Loops, 2) = ColorPalette(Loops, 3) AND Movement > 3 THENă                            IF PixelBlue = PixelGreen AND PixelBlue = PixelRed THENă                               PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă                               IF ArrayNo < 2000 THENă                                  ArrayNo = ArrayNo + 1ă                                  PixelArray(ArrayNo, 1) = PixelBlueă                                  PixelArray(ArrayNo, 2) = PixelGreenă                                  PixelArray(ArrayNo, 3) = PixelRedă                                  PixelArray(ArrayNo, 0) = Loopsă                               END IFă                               EXIT DOă                            END IFă                         ELSEă                            PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă                            IF ArrayNo < 2000 THENă                            ArrayNo = ArrayNo + 1ă                               PixelArray(ArrayNo, 1) = PixelBlueă                               PixelArray(ArrayNo, 2) = PixelGreenă                               PixelArray(ArrayNo, 3) = PixelRedă                               PixelArray(ArrayNo, 0) = Loopsă                            END IFă                            EXIT DOă                         END IFă                      END IFă                   END IFă                END IFă             NEXT Loopsă             Movement = Movement + 1ă          LOOPă       END IFă   NEXT XWidthăNEXT YHeightăCLOSEăăEND SUBăăDEFSNG A-ZăSUB SHOWBMP (FileName$)ăăOPEN FileName$ FOR BINARY AS #1ăIF LOF(1) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   EXIT SUBăEND IFăă'/* Extracts the first 2 bytes of the file */'ăValidBMP$ = SPACE$(2)ăGET #1, 1, ValidBMP$ă'/* If the first 2 bytes of the file are not BM then a line of text is printed, */'ă'/* and the program ends */'ăIF ValidBMP$ <> "BM" THENă   PRINT " THE FILE SPECIFIED IS NOT A VALID BMP"ă   EXIT SUBăEND IFăă'/* Extracts the offset of the picture data in the file */'ăLocationOfPictureData$ = SPACE$(4)ăGET #1, 11, LocationOfPictureData$ăLocationOfPictureData = CVL(LocationOfPictureData$)ăă'/* Extracts the BMP type (Win or OS/2) */'ăBMPType$ = SPACE$(4)ăGET #1, 15, BMPType$ă'/* If the BMPType is for OS/2 then the a line of text is printed, then */'ă'/* program ends */'ăIF CVL(BMPType$) = 12 OR CVL(BMPType$) = 64 THENă   PRINT " THIS BMP IS FOR THE OS/2 AND CAN'T BE OPENED IN THIS VERSION OF OPENBMP"ă   PRINT " PLEASE SEND ANY OS/2 BMP TO phililpz85@hotmail.com"ă   PRINT " BY SENDING OS/2 BMP's TO US, WE WILL HOPEFULLY BE ABLE TO OPEN THEM IN THE"ă   PRINT " NEXT VERSION OF OPENBMP"ă   EXIT SUBăEND IFăă'/* Extracts the Width and Height in Pixels of the Image */'ă'/* and also the number of bits per pixel (bpp) */'ăPixelWidth$ = SPACE$(4)ăPixelHeight$ = SPACE$(4)ăBitsPerPixel$ = SPACE$(2)ăCompression$ = SPACE$(4)ăGET #1, 19, PixelWidth$ăGET #1, 23, PixelHeight$ăGET #1, 29, BitsPerPixel$ăGET #1, 31, Compression$ăPixelWidth = CVL(PixelWidth$)ăPixelHeight = CVL(PixelHeight$)ăBitsPerPixel = CVI(BitsPerPixel$)ăNumberOfColors = 2 ^ BitsPerPixelăă'/* Changing to suitable screen modes to display the Image */'ăIF BitsPerPixel = 1 THENă   IF PixelWidth > 640 OR PixelHeight > 480 THENă      PRINT " 1-BIT IMAGE IS TO LARGE"ă      EXIT SUBă   END IFă   SCREEN 11ăELSEIF BitsPerPixel = 4 THENă   SCREEN 12ăELSEIF BitsPerPixel = 8 THENă   SCREEN 13ăELSEIF BitsPerPixel = 16 OR BitsPerPixel = 32 THENă   PRINT " Error 16-BIT and 32-BIT BMPs cannot be loaded"ă   CLOSE #1ă   EXIT SUBăEND IFăă'/* If image is not 24-bit then load palette information from file */'ăIF BitsPerPixel <> 24 THENă   '/* Extracts Palette information for the colors used in the image */'ă   PaletteColors$ = SPACE$(NumberOfColors * 4)ă   GET #1, 55, PaletteColors$ăă   FOR Loops = 0 TO NumberOfColors - 1ă   '/* Changes the Palette of each color to the one specified in the file */'ă      IF BitsPerPixel = 1 AND Loops = 1 THEN Loops = 15ă      OUT &H3C8, Loopsă      IF BitsPerPixel = 1 AND Loops = 15 THEN Loops = 1ă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 3, 1)) \ 4 'Redă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 2, 1)) \ 4 'Greenă      OUT &H3C9, ASC(MID$(PaletteColors$, Loops * 4 + 1, 1)) \ 4 'Blueă   NEXT Loopsăă   '/* Finds correct location of Picture data */'ă   IF LocationOfPictureData = 0 THENă      LocationOfPictureData = LOC(255) + 1ă   ELSEă      LocationOfPictureData = LocationOfPictureData + 1ă   END IFăEND IFăăIF CVL(Compression$) = 1 THENă   PixelColors$ = SPACE$(1): NoOfSameColors$ = SPACE$(1)ă   RightMovement$ = SPACE$(1):  UpMovement$ = SPACE$(1)ă   ActualWidth = PixelWidth / 320: ActualHeight = PixelHeight / 200ă   IF ActualWidth < 1 THEN ActualWidth = 1ă   IF ActualHeight < 1 THEN ActualHeight = 1ă   X = 0: Y = PixelHeight - 1ă   DOă      GET #1, , NoOfSameColors$ă      IF ASC(NoOfSameColors$) <> 0 THENă         GET #1, , PixelColors$ă         IF X + ASC(NoOfSameColors$) = PixelWidth THEN NoOfSameColors$ = CHR$(ASC(NoOfSameColors$) - 1)ă         LINE (X / ActualWidth, Y / ActualHeight)-STEP(ASC(NoOfSameColors$) / ActualWidth, 0), ASC(PixelColors$)ă         X = X + ASC(NoOfSameColors$)ă      ELSEă         GET #1, , PixelColors$ă         IF ASC(PixelColors$) = 0 THENă            X = 0: Y = Y - 1ă            IF Y < 0 THEN EXIT SUBă            '/* Used to skip the unnecessary lines in large picturesă            WHILE Y MOD ActualHeight <> 0ă               DOă                  GET #1, , NoOfSameColors$ă                  IF ASC(NoOfSameColors$) <> 0 THENă                     GET #1, , PixelColors$ă                  ELSEă                     GET #1, , PixelColors$ă                     IF ASC(PixelColors$) = 0 THENă                        EXIT DOă                     ELSEIF ASC(PixelColors$) = 1 THENă                        EXIT SUBă                     ELSEIF ASC(PixelColors$) = 2 THENă                        Bytez$ = SPACE$(2)ă                        GET #1, , Bytez$ă                        EXIT DOă                     ELSEă                        Bytez$ = SPACE$(ASC(PixelColors$))ă                        IF ASC(PixelColors$) MOD 2 = 1 THEN Bytez$ = Bytez$ + " "ă                        GET #1, , Bytez$ă                     END IFă                  END IFă               LOOPă               Y = Y - 1ă            WENDă         ELSEIF ASC(PixelColors$) = 1 THENă            EXIT DOă         ELSEIF ASC(PixelColors$) = 2 THENă            GET #1, , RightMovement$ă            GET #1, , UpMovement$ă            X = X + ASC(RightMovement$): Y = Y + ASC(UpMovement$)ă         ELSEă            PixelColor$ = SPACE$(1)ă            FOR Loops = 1 TO ASC(PixelColors$)ă               GET #1, , PixelColor$ă               PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$)ă               X = X + 1ă            NEXT Loopsă            IF ASC(PixelColors$) MOD 2 = 1 THEN GET #1, , PixelColor$ă         END IFă      END IFă   LOOPă   EXIT SUBăELSEIF CVL(Compression$) = 2 THENă   PixelColors$ = SPACE$(1): NoOfSameColors$ = SPACE$(1)ă   RightMovement$ = SPACE$(1):  UpMovement$ = SPACE$(1)ă   ActualWidth = PixelWidth / 640: ActualHeight = PixelHeight / 480ă   IF ActualWidth < 1 THEN ActualWidth = 1ă   IF ActualHeight < 1 THEN ActualHeight = 1ă   X = 0: Y = PixelHeight - 1ă   DOă      GET #1, , NoOfSameColors$ă      IF ASC(NoOfSameColors$) <> 0 THENă         GET #1, , PixelColors$ă          FOR Loops = 0 TO ASC(NoOfSameColors$) - 1 STEP 2ă             PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColors$) \ 16ă             X = X + 1ă             IF Loops + 1 <> ASC(NoOfSameColors$) THENă                PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColors$) AND 15ă                X = X + 1ă             END IFă          NEXT Loopsă      ELSEă         GET #1, , PixelColors$ă         IF ASC(PixelColors$) = 0 THENă            X = 0: Y = Y - 1ă            IF Y < 0 THEN EXIT SUBă            '/* Used to skip the unnecessary lines in large picturesă            WHILE Y MOD ActualHeight <> 0ă               DOă                  GET #1, , NoOfSameColors$ă                  IF ASC(NoOfSameColors$) <> 0 THENă                     GET #1, , PixelColors$ă                  ELSEă                     GET #1, , PixelColors$ă                     IF ASC(PixelColors$) = 0 THENă                        EXIT DOă                     ELSEIF ASC(PixelColors$) = 1 THENă                        EXIT SUBă                     ELSEIF ASC(PixelColors$) = 2 THENă                        Bytez$ = SPACE$(2)ă                        GET #1, , Bytez$ă                        EXIT DOă                     ELSEă                        PixelColors = ASC(PixelColors$)ă                        IF PixelColors MOD 2 = 1 THENă                           PixelColors = PixelColors + 1ă                        END IFă                        PixelColors = PixelColors / 2ă                        IF PixelColors MOD 2 = 1 THENă                           PixelColors = PixelColors + 1ă                        END IFă                        Bytez$ = SPACE$(PixelColors)ă                        GET #1, , Bytez$ă                     END IFă                 END IFă               LOOPă               Y = Y - 1ă            WENDă         ELSEIF ASC(PixelColors$) = 1 THENă            EXIT DOă         ELSEIF ASC(PixelColors$) = 2 THENă            GET #1, , RightMovement$ă            GET #1, , UpMovement$ă            X = X + ASC(RightMovement$): Y = Y + ASC(UpMovement$)ă         ELSEă            PixelColor$ = SPACE$(1): PixelColors = ASC(PixelColors$)ă            FOR Loops = 0 TO PixelColors - 1ă               IF Loops MOD 2 = 0 THENă                  GET #1, , PixelColor$ă                  PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$) \ 16ă                  X = X + 1ă               END IFă               IF Loops MOD 2 = 1 THENă                  PSET (X / ActualWidth, Y / ActualHeight), ASC(PixelColor$) AND 15ă                  X = X + 1ă               END IFă            NEXT Loopsă            IF PixelColors MOD 2 = 1 THENă               PixelColors = PixelColors + 1ă            END IFă            NoOfBytes = PixelColors / 2ă            IF (NoOfBytes MOD 2) = 1 THENă               GET #1, , PixelColor$ă            END IFă         END IFă      END IFă   LOOPă   EXIT SUBăEND IFăăIF BitsPerPixel = 24 THENă   '/* 24-bit BMP loading algorithm taken from 24BITBMP.BAS (YPI) */'ă   CALL Open24(INT(PixelWidth), INT(PixelHeight), INT(LocationOfPictureData))ă   EXIT SUBăELSEIF BitsPerPixel = 8 THENă   LineExtract$ = SPACE$(PixelWidth)ă   IF (4 - (PixelWidth MOD 4)) <> 4 THENă      LineExtract$ = LineExtract$ + SPACE$(4 - (PixelWidth MOD 4))ă   END IFă   LineExtract& = LEN(LineExtract$)ă   ActualHeight! = 199 / (PixelHeight - 1)ă   ActualWidth! = 319 / (PixelWidth - 1)ă   IF ActualHeight! > 1 THEN ActualHeight! = 1ă   IF ActualWidth! > 1 THEN ActualWidth! = 1ă   ActualHeight1! = (PixelHeight - 1) / 199ă   ActualWidth1! = (PixelWidth - 1) / 319ă   IF ActualHeight1! < 1 THEN ActualHeight1! = 1ă   IF ActualWidth1! < 1 THEN ActualWidth1! = 1ă   IF ActualHeight! = 1 AND ActualWidth! = 1 THENă      SEEK #1, LocationOfPictureDataă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #1, , LineExtract$ă         FOR X = 0 TO PixelWidth - 1ă            PSET (X, Y), ASC(MID$(LineExtract$, X + 1, 1))ă         NEXT Xă      NEXT Yă   ELSEă      FOR Y = 0 TO PixelHeight - 1 STEP ActualHeight1!ă         GET #1, LocationOfPictureData + ((PixelHeight - Y - 1) * LineExtract&), LineExtract$ă         FOR X = 0 TO PixelWidth - 1 STEP ActualWidth1!ă            PSET (X * ActualWidth!, Y * ActualHeight!), ASC(MID$(LineExtract$, X + 1, 1))ă         NEXT Xă      NEXT Yă   END IFăELSEIF BitsPerPixel = 4 THENă   LineExtract$ = SPACE$(PixelWidth \ 2)ă   IF (4 - ((PixelWidth MOD 8) / 2)) <> 4 THENă      LineExtract$ = LineExtract$ + SPACE$((4 - ((PixelWidth MOD 8) / 2)))ă   END IFă   LineExtract& = LEN(LineExtract$)ă   ActualHeight! = 479 / (PixelHeight - 1)ă   ActualWidth! = 639 / (PixelWidth - 1)ă   IF ActualHeight! > 1 THEN ActualHeight! = 1ă   IF ActualWidth! > 1 THEN ActualWidth! = 1ă   ActualHeight1! = (PixelHeight - 1) / 479ă   ActualWidth1! = (PixelWidth - 1) / 639ă   IF ActualHeight1! < 1 THEN ActualHeight1! = 1ă   IF ActualWidth1! < 1 THEN ActualWidth1! = 1ă   IF ActualWidth! = 1 AND ActualHeight! = 1 THENă      SEEK #1, LocationOfPictureDataă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #1, , LineExtract$ă         FOR X = 0 TO (PixelWidth / 2) - 1ă            PixelColor = ASC(MID$(LineExtract$, X + 1, 1))ă            PSET (X * 2, Y), PixelColor \ 16ă            IF (X * 2) + 1 < PixelWidth THENă               PSET ((X * 2) + 1, Y), PixelColor AND 15ă            END IFă         NEXT Xă      NEXT Yă   ELSEă      FOR Y = 0 TO PixelHeight - 1 STEP ActualHeight1!ă         GET #1, LocationOfPictureData + ((PixelHeight - 1 - Y) * LineExtract&), LineExtract$ă         FOR X = 0 TO (PixelWidth / 2) - 1 STEP ActualWidth1!ă            PixelColor = ASC(MID$(LineExtract$, X + 1, 1))ă            PSET (X * ActualWidth! * 2, Y * ActualHeight!), PixelColor \ 16ă            IF (X * 2) + 1 < PixelWidth THENă               PSET ((X * ActualWidth! * 2) + 1, Y * ActualHeight!), PixelColor AND 15ă            END IFă         NEXT Xă      NEXT Yă   END IFăELSEIF BitsPerPixel = 1 THENă   LineExtract$ = SPACE$(PixelWidth \ 8)ă   IF (4 - ((PixelWidth MOD 32) / 8)) <> 4 THENă      LineExtract$ = LineExtract$ + SPACE$((4 - ((PixelWidth MOD 32) / 8)))ă   END IFă   LineExtract& = LEN(LineExtract$)ă   FOR Y = 0 TO PixelHeight - 1ă      DEF SEG = &HA000ă      GET #1, LocationOfPictureData + ((PixelHeight - Y - 1) * LineExtract&), LineExtract$ă      FOR X = 0 TO CINT(PixelWidth / 8) - 1ă         IF Y < 409 THENă            POKE (Y * 80 + X), ASC(MID$(LineExtract$, X + 1, 1))ă         ELSEă            DEF SEG = &HA7D0ă            POKE ((Y - 400) * 80 + X), ASC(MID$(LineExtract$, X + 1, 1))ă         END IFă      NEXT Xă   NEXT Yă   DEF SEGăEND IFăăEND SUBăYousuf Philips                 OPEN AVI VERSION 0.6           philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        880  30951    OPENAVI6.BAS''''''''''''''''''''''''''''''''''''''ă' Program    : Plays AVI Files       'ă' Name       : OPENAVI Version 0.6   'ă' Programmer : Yousuf Philips        'ă' Company    : Y P I                 'ă' Updated On : 1st of March 1999     'ă' Email - [philipz85@hotmail.com]    'ă' [http://members.xoom.com/Philipz/] 'ă''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to play AVI files in QBASIC.                              */'ă'/*                                                                        */'ă'/* What's New -                                                           */'ă'/*            * Will play 8-bit uncompressed AVIs with sound              */'ă'/*            * 24-BIT uncompressed AVIs are played in color              */'ă'/*                                                                        */'ă'/* What's Great -                                                         */'ă'/*            * Delay Function will work perfectly on any PC              */'ă'/*            * AVI displays very fast (even on a 486)                    */'ăă'/*             Special Thanks to Alexander Verhaeghe                     */'ă'/* An original program created by the professional programmers at YPI.    */'ă'/* If you use any of this code in your program then you must credit YPI,  */'ă'/* it would be appreciated if you sent us a copy of your program also.    */'ă'/* Please send your comments and suggestions to <philipz85@hotmail.com>   */'ăăDECLARE SUB GetSpeed ()ăDECLARE SUB ShowAVI (FileName$)ăDECLARE SUB delay (MiliSeconds%)ă'/* 2 Added subs for the display of 24-bit AVIs taken from 24BITBMP.BAS    */'ăDECLARE SUB ChangePalette (Alg%)ăDECLARE SUB BIT24AVI (ImageWidth%, ImageHeight%, Frames%)ă'/* 4 Added functions to use interrupt &H21                                */'ăDECLARE SUB Close21 (Handle%)ăDECLARE SUB Seek21 (Handle%, offset!)ăDECLARE SUB Open21 (FileName$, Handle%)ăDECLARE SUB Get21 (Handle%, NoOfBytesToRead%, VariableSegment%, VariableOffset%)ă'/* 2 Added functions to call interrupts in QBASIC 1.0                     */'ăDECLARE SUB NewInterrupt (intnum AS INTEGER, Regs AS ANY)ăDECLARE SUB InitInterrupt ()ă'/* Functions to play sound AVIs taken from WAVEPLAY.BAS                   */'ăDECLARE FUNCTION GetBlasterAddr% ()ăDECLARE FUNCTION SBreset% ()ăDECLARE SUB WriteToDSP (v%)ăDECLARE SUB WavPlay (Bytes$, WavLen&, Sampling&, Bytes&, Channels%)ăDECLARE SUB PlayBack (Buffer$, size%, freq&, BytesPerSec&, chans%)ăăTYPE RIFFHeaderTypeă	ValidID AS STRING * 4          '/* Must be  - 'RIFF'ă	SizeOfFile AS LONG             '/* Size of AVI file in bytesă	RIFFFileType AS STRING * 4     '/* RIFF file type - Must be - 'AVI 'ăEND TYPEăăTYPE AVIHeaderă	ValidID AS STRING * 4          '/* Must be - 'avih'ă	Reserved AS LONG               '/* Not Importantă	MicrosecPerFrame AS LONG       '/* Number of Milliseconds between each Frameă	MaximumBytesPerSec AS LONG     '/* Number of bytes the system must handleă											 '   per second for the avi to run smoothlyă	Reserved1 AS LONG              '/* Reserved must be 0ă	BitFlags AS LONG               '/* Bit Flagsă	TotalFrames AS LONG            '/* Total Number of Framesă	InitialFrame AS LONG           '/* Not Understoodă	NoOfStreams AS LONG            '/* Number of Streamsă	BufferSize AS LONG             '/* Buffer size to read a frameă	Widthz AS LONG                 '/* Width of AVIă	Heightz AS LONG                '/* Height of AVIă	Scale AS LONG                  '/* Not Understoodă	Rate AS LONG                   '/* Not Understoodă	Start AS LONG                  '/* Not Understoodă	Length AS LONG                 '/* Not UnderstoodăEND TYPEăăTYPE Listză	ListID AS STRING * 4ă	BytesInList AS LONGă	ListType AS STRING * 4ăEND TYPEăăTYPE StreamHeaderă	HeaderID AS STRING * 4        '/* Must be - 'strh'ă	BytesIn AS LONG               '/* Number of bytes in headeră	Typez AS STRING * 4           '/* Type of stream -ă												 'vids' for video streamă												 'auds' for audio streamă	Handle AS STRING * 4          '/* Compression Technology Usedă	BitFlags AS LONG              '/* Not Importantă	Reserved1 AS LONG             '/* Not Importantă	InitialFrames AS LONG         '/* Not Importantă	Scale AS LONG                 '/* Not Importantă	Rate AS LONG                  '/* Not Importantă	Start AS LONG                 '/* Not Importantă	Length AS LONG                '/* Not Importantă	BufferSize AS LONG            '/* Not Importantă	Quality AS LONG               '/* Not Importantă	SampleSize AS LONG            '/* Not ImportantăEND TYPEăăTYPE StreamFormată	StreamFormatID AS STRING * 4  '/* Must be - 'strf'ă	BytesInFormat AS LONG                 '/* Not ImportantăEND TYPEăăTYPE BMPInfoHeaderă	LengthOfHeader AS LONG         '/* Must be - 40ă	ImageWidth AS LONG             '/* AVI image widthă	ImageHeight AS LONG            '/* AVI image heightă	Planes AS INTEGER              '/* AVI image planes - Must be 1ă	BitsPerPixel AS INTEGER        '/* AVI image bits per pixel - Must be 8ă	CompressMethod AS LONG         '/* AVI image compression - Must be 0ă	ImageSizeInBytes AS LONG       '/* Size of AVI image in bytesă	HorizontalRatio AS LONG        '/* Not Importantă	VerticalRatio AS LONG          '/* Not Importantă	ColorsUsed AS LONG             '/* Number of colors usedă	ImportantColors AS LONG        '/* Number of important colorsăEND TYPEăăTYPE WavHeaderă	FormatTag AS INTEGERă	Channels AS INTEGERă	SampleRate AS LONGă	BytesPerSecond AS LONGă	BlockAlignment AS INTEGERă	BitsPerSample AS INTEGERăEND TYPEăăTYPE ImageDataă	ChunkID AS STRING * 4           '/* Chunk type ID - 'db','dc','pc' or 'wb'ă	NumberOfBytes AS LONG           '/* Number of bytes in image data chunkăEND TYPEăăTYPE RegType                       '/* Registers for Interruptsă	  ax    AS INTEGERă	  bx    AS INTEGERă	  cx    AS INTEGERă	  dx    AS INTEGERă	  bp    AS INTEGERă	  si    AS INTEGERă	  di    AS INTEGERă	  flags AS INTEGERă	  ds    AS INTEGERă	  es    AS INTEGERăEND TYPEăăCOMMON SHARED Regs AS RegType, Speed&ăCOMMON SHARED BlasterAddr%, dma%, num%ăDIM SHARED Intrpt(1 TO 50) AS INTEGERăă'/* Initializes Interrupt Functions (Very Important, don't touch)          */'ăInitInterruptăăCLSă'/* Comment out GetSpeed if you don't want to have a delay between frames  */'ăGetSpeedăăPRINTăPRINT " 1st QBASIC AVI Player - OPENAVI ver 0.6"ăPRINT " (c) YPI (BASIC Programming Incorporation) 1999"ăPRINT " Press Any Key When You Want The AVI To Stop Playing (Don't press Ctrl-Break)"ăFILES "*.avi"ăINPUT " Enter File Name - ", FileName$ăăIF LEN(LTRIM$(FileName$)) = 0 THENă	ENDăELSEIF INSTR(FileName$, ".") = 0 THENă	FileName$ = FileName$ + ".avi"ăEND IFăăCALL ShowAVI(FileName$)ăWait$ = INPUT$(1)ăWHILE INKEY$ <> "": WENDăă'/* Some ending statements for those how didn't read the comments at the   */'ă'/* beginning of the program.                                              */'ăSCREEN 2: SCREEN 0ăPRINT " 1st QBASIC AVI Player (ver 0.6) - By YPI (BASIC Programming Incorporation)"ăPRINT " Program is Public Domain, (c) Copyrighted by YPI, All Rights Reserved"ăPRINT " Programmed By Yousuf Philips in 1999"ăPRINT " Send suggestions and comments to philipz85@hotmail.com"ăPRINT " Visit the YPI Website at http://members.xoom.com/Philipz/"ăWait$ = INPUT$(1)ăăDEFINT A-ZăSUB BIT24AVI (ImageWidth, ImageHeight, Frames)ăăCALL ChangePalette(1)ăDIM ColorPalette(255, 3)ăDIM PixelArray(2000, 3)ăDIM ImageDataz AS ImageDataăColorDif = 3ăă'/* Capture the current color palette into an array                        */'ăFOR Loops = 0 TO 255ă	OUT &H3C7, Loopsă	ColorPalette(Loops, 1) = INP(&H3C9)ă	ColorPalette(Loops, 2) = INP(&H3C9)ă	ColorPalette(Loops, 3) = INP(&H3C9)ăNEXT Loopsăă'/* Calculate the number of bytes per line for the current image           */'ăLineExtract$ = SPACE$(ImageWidth * 3)ăIF (4 - ((ImageWidth * 3) MOD 4)) <> 4 THENă	LineExtract$ = LineExtract$ + SPACE$(4 - ((ImageWidth * 3) MOD 4))ăEND IFăLineExtract& = LEN(LineExtract$)ăă'/* Resize image to fit the Screen                                         */'ăActualHeight! = 199 / (ImageHeight - 1)ăActualWidth! = 319 / (ImageWidth - 1)ăIF ActualHeight! > 1 THEN ActualHeight! = 1ăIF ActualWidth! > 1 THEN ActualWidth! = 1ăActualWidth1! = (ImageWidth - 1) / 319ăActualHeight1! = (ImageHeight - 1) / 199ăIF ActualHeight1! < 1 THEN ActualHeight1! = 1ăIF ActualWidth1! < 1 THEN ActualWidth1! = 1ăWHILE INKEY$ <> "": WENDăăPlayStart& = LOC(255) + 1ăăLooping:ăFOR FrameNumber = 1 TO Framesă	GET #255, , ImageDatază	IF RIGHT$(ImageDataz.ChunkID, 2) = "db" THENă		StartingPos& = LOC(255) + 1ă		FOR YHeight = ImageHeight - 1 TO 0 STEP -ActualHeight1!ă			GET #255, StartingPos& + (ImageHeight - 1 - YHeight) * LineExtract&, LineExtract$ă			FOR XWidth = 0 TO ImageWidth - 1 STEP ActualWidth1!ă				 XWidthPosition = XWidth * 3ă				 '/* Extract the RGB of each pixel                                   */'ă				 PixelBlue = ASC(MID$(LineExtract$, XWidthPosition + 1, 1)) \ 4ă				 PixelGreen = ASC(MID$(LineExtract$, XWidthPosition + 2, 1)) \ 4ă				 PixelRed = ASC(MID$(LineExtract$, XWidthPosition + 3, 1)) \ 4ă				 PixelPut = 0: Movement = ColorDif + 1ă				 '/* Check if the RGB or an RGB close to it are in the color array   */'ă				 FOR PixelArraySearch = 1 TO ArrayNoă					 IF PixelBlue >= PixelArray(PixelArraySearch, 1) - ColorDif AND PixelBlue <= PixelArray(PixelArraySearch, 1) + ColorDif THENă						 IF PixelGreen >= PixelArray(PixelArraySearch, 2) - ColorDif AND PixelGreen <= PixelArray(PixelArraySearch, 2) + ColorDif THENă							 IF PixelRed >= PixelArray(PixelArraySearch, 3) - ColorDif AND PixelRed <= PixelArray(PixelArraySearch, 3) + ColorDif THENă								 PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), PixelArray(PixelArraySearch, 0)ă								 PixelPut = 1ă								 EXIT FORă							 END IFă						 END IFă					 END IFă				 NEXT PixelArraySearchă				 IF PixelPut = 0 THENă				 '/* Algorithm to find the closest color in the color palette */'ă				 DOă					 FOR Loops = 0 TO 255ă						 IF PixelBlue >= (ColorPalette(Loops, 3) - Movement) AND PixelBlue <= (ColorPalette(Loops, 3) + Movement) THENă							 IF PixelGreen >= (ColorPalette(Loops, 2) - Movement) AND PixelGreen <= (ColorPalette(Loops, 2) + Movement) THENă								 IF PixelRed >= (ColorPalette(Loops, 1) - Movement) AND PixelRed <= (ColorPalette(Loops, 1) + Movement) THENă									 IF ColorPalette(Loops, 1) = ColorPalette(Loops, 2) AND ColorPalette(Loops, 2) = ColorPalette(Loops, 3) AND Movement > 3 THENă										 IF PixelBlue = PixelGreen AND PixelBlue = PixelRed THENă											 PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă											 IF ArrayNo < 2000 THENă												 ArrayNo = ArrayNo + 1ă												 PixelArray(ArrayNo, 1) = PixelBlueă												 PixelArray(ArrayNo, 2) = PixelGreenă												 PixelArray(ArrayNo, 3) = PixelRedă												 PixelArray(ArrayNo, 0) = Loopsă											 END IFă											 EXIT DOă										 END IFă									 ELSEă										 PSET (XWidth * ActualWidth!, YHeight * ActualHeight!), Loopsă										 IF ArrayNo < 2000 THENă											 ArrayNo = ArrayNo + 1ă											 PixelArray(ArrayNo, 1) = PixelBlueă											 PixelArray(ArrayNo, 2) = PixelGreenă											 PixelArray(ArrayNo, 3) = PixelRedă											 PixelArray(ArrayNo, 0) = Loopsă										 END IFă										 EXIT DOă									 END IFă								 END IFă							 END IFă						 END IFă					 NEXT Loopsă					 Movement = Movement + 1ă				 LOOPă			END IFă		NEXT XWidthă	NEXT YHeightă		SEEK #255, StartingPos& + ImageDataz.NumberOfBytesă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "pc" THENă		'/* Skipping the color changing                                   */'ă		'GET #255, , ChangePaletteă		SEEK #255, LOC(255) + 1 + ImageDataz.NumberOfBytesă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "wb" THENă		'/* Skipping the sound part of the AVI if there is.               */'ă		SEEK #255, LOC(255) + 1 + ImageDataz.NumberOfBytesă		FrameNumber = FrameNumber - 1ă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "dc" THENă		SCREEN 2: SCREEN 0ă		PRINT " ONLY UNCOMPRESSED AVI SEQUENCIES CAN BE SHOWN"ă		ENDă	ELSEă		PRINT " An Error Occured"ă		ENDă	END IFă	IF INKEY$ <> "" THENă		EXIT SUBă	END IFăNEXT FrameNumberăSEEK #255, PlayStart&ăGOTO LoopingăăEND SUBăă'/* Sub to change the color palette                                        */'ăSUB ChangePalette (Alg)ăăIF Alg = 1 THENă	'/* An excellent color palette from PALSTUFF.BAS [Graphics.abc|09/1995] */'ă	'/* Created by Steve Demo                                               */'ă	Change$ = "#####M#M##MMM##M#MM8#MMM88888b8b88bbb88b8bbb8bbb+++"ă	Change$ = Change$ + "...222555999===@@@DDDHHHKKKOOOSSSVVVZZZ^^^bbb3##8##"ă	Change$ = Change$ + "=##?&&B**E--H11K55N88Q<<T@@XDDZII]NN_SSbYY3+#8-#=/#"ă	Change$ = Change$ + "B2#G4#L6#Q9#V;#\>#\B*]F2^K:_OA`TIaXQb]Y33#66#99#<<#"ă	Change$ = Change$ + "??#BB#EE#HH#LL#OO#RR#UU#XX#[[#^^#bb##8%#:(#<,#?/#A3"ă	Change$ = Change$ + "#C7#F:#H>#KB#ME#OI#RM#TP#WT#YX#\\YbYRbQJbJG^GDZDAWA"ă	Change$ = Change$ + ">S>;O;8L85H52E2/A/,=,):)&6&$3#YbbQbbJbbE__A\\=ZZ:VV"ă	Change$ = Change$ + "7RR5NN2JJ0FF-BB*>>(::%66#33Y^bQ[bJXbBUb:Rb3Ob+Mb#Jb"ă	Change$ = Change$ + "#F\#BV#>P#:J#6D#3?#/9#,3YYbQRbJJbEE_@@\<<Y88V55R33N"ă	Change$ = Change$ + "11J..F,,B**>'':%%6##3/@$2B#5D#8F#;H#>J#AL#DN#GP#JR#"ă	Change$ = Change$ + "MT#PV#SX#VZ#Y\#]_#bYb`S`^N^\H\ZCZX=XV8VT3UP0QL.MH+I"ă	Change$ = Change$ + "D(EA&A<%<7$73#3-+&1-'5/):2+;3+=4,?5-@6-B7.D8/E9/G:0"ă	Change$ = Change$ + "I;1J<1L=2N>3O?3Q@4SA5UB6VD8WF;XH>YJAZMD[OG\QJ]SM^VP"ă	Change$ = Change$ + "_XS`ZVb]ZZ##X)#W0#U6#T;#S@#RF#PJ#ON#CN#6M#*M##L(#K3"ă	Change$ = Change$ + "#K?#KH#FL#>M#5M#-N6#Q>#QD#QL#QQ#NQ#FQ#@Q#9Q#1R#+R##"ă	Change$ = Change$ + "bbb"ă	FOR Loops = 0 TO 255ă		OUT &H3C8, Loopsă		OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 1, 1)) - 35ă		OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 2, 1)) - 35ă		OUT &H3C9, ASC(MID$(Change$, Loops * 3 + 3, 1)) - 35ă	NEXT Loopsă	Change$ = ""ăELSEă	'/* Randomized color palette */'ă	FOR Loops = 1 TO 255ă		Blue = INT(RND * 256) \ 4ă		Green = INT(RND * 256) \ 4ă		Red = INT(RND * 256) \ 4ă		OUT &H3C8, Loopsă		OUT &H3C9, Redă		OUT &H3C9, Greenă		OUT &H3C9, Blueă	NEXT LoopsăEND IFăăEND SUBăăSUB Close21 (Handle)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H3E00ăRegs.bx = HandleăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăDEFSNG A-ZăSUB delay (MiliSeconds%)ă'/* This function slows down the program for the given amount of Miliseconds */'ăăDelayTime = (Speed& * 5) * (MiliSeconds% / 1000)ăFOR Speed = 1 TO DelayTimeăNEXT SpeedăăEND SUBăăDEFINT A-ZăSUB Get21 (Handle, NoOfBytesToRead, VariableSegment, VariableOffset)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H3F00ăRegs.bx = HandleăRegs.cx = NoOfBytesToReadăRegs.ds = VariableSegmentăRegs.dx = VariableOffsetăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăFUNCTION GetBlasterAddr%ătmp% = 0ăBlast$ = UCASE$(ENVIRON$("BLASTER"))ăIF LEN(Blast$) THENă	tmp% = INSTR(Blast$, "A")ă	tmp1$ = MID$(Blast$, tmp% + 1, 3)ă	tmp% = VAL("&H" + tmp1$)ă	IF tmp% = 203 THEN tmp% = -1ă	IF tmp% > 0 THENă		tmp2% = INSTR(Blast$, "D")ă		dma% = VAL(MID$(Blast$, tmp2% + 1))ă		IF dma% < 0 OR dma% > 7 THEN tmp% = -2ă	END IFăEND IFăGetBlasterAddr% = tmp%ăăEND FUNCTIONăăDEFSNG A-ZăSUB GetSpeedă'/* This function finds out the proper delay period needed for the current PC*/'ăăPRINT " Calculating delay for Delay Function according to your PC"ăTime& = TIMER: Time& = Time& + 1: Speed& = 0ăDOăLOOP UNTIL TIMER >= Time&ăDOă	Speed& = Speed& + 1ăLOOP UNTIL TIMER >= Time& + 1ăă'/* Testing the calculated delay period with the Delay FUNCTION            */'ăTime! = TIMERădelay 1000ăTime! = TIMER - Time!ăă'/* If the Delay FUNCTION was not accurate then it is adjusted             */'ăIF Time! < 1 THENă	Speed& = INT(Speed& * (1 / Time!))ăEND IFăăEND SUBăăDEFINT A-ZăSUB InitInterruptă'/* Don't edit this SUB period.                                            */'ăăInterruptData$ = CHR$(85) + CHR$(139) + CHR$(236) + CHR$(86) + CHR$(87) + CHR$(30) + CHR$(139) + CHR$(118) + CHR$(6) + CHR$(139) + CHR$(4) + CHR$(139) + CHR$(92) + CHR$(2)ăInterruptData$ = InterruptData$ + CHR$(139) + CHR$(76) + CHR$(4) + CHR$(139) + CHR$(84) + CHR$(6) + CHR$(139) + CHR$(108) + CHR$(8) + CHR$(139) + CHR$(124) + CHR$(12) + CHR$(142) + CHR$(68) + CHR$(18)ăInterruptData$ = InterruptData$ + CHR$(255) + CHR$(116) + CHR$(10) + CHR$(131) + CHR$(124) + CHR$(18) + CHR$(255) + CHR$(117) + CHR$(2) + CHR$(30) + CHR$(7) + CHR$(131) + CHR$(124) + CHR$(16) + CHR$(255)ăInterruptData$ = InterruptData$ + CHR$(116) + CHR$(3) + CHR$(142) + CHR$(92) + CHR$(16) + CHR$(94) + CHR$(205) + CHR$(33) + CHR$(85) + CHR$(139) + CHR$(236) + CHR$(30) + CHR$(86) + CHR$(142) + CHR$(94) + CHR$(2) + CHR$(139) + CHR$(118) + CHR$(14)ăInterruptData$ = InterruptData$ + CHR$(137) + CHR$(4) + CHR$(137) + CHR$(92) + CHR$(2) + CHR$(137) + CHR$(76) + CHR$(4) + CHR$(137) + CHR$(84) + CHR$(6) + CHR$(143) + CHR$(68) + CHR$(10) + CHR$(143) + CHR$(68) + CHR$(16)ăInterruptData$ = InterruptData$ + CHR$(143) + CHR$(68) + CHR$(8) + CHR$(137) + CHR$(124) + CHR$(12) + CHR$(140) + CHR$(68) + CHR$(18) + CHR$(156) + CHR$(143) + CHR$(68) + CHR$(14)ăInterruptData$ = InterruptData$ + CHR$(95) + CHR$(95) + CHR$(94) + CHR$(93) + CHR$(202) + CHR$(2) + CHR$(0)ăăDEF SEG = VARSEG(Intrpt(1))ăaddress = VARPTR(Intrpt(1))ăăFOR I = 0 TO 99ă	 POKE address + I, ASC(MID$(InterruptData$, I + 1, 1))ăNEXTăDEF SEGăăEND SUBăăSUB NewInterrupt (intnum AS INTEGER, Regs AS RegType)ă'/* Don't edit this SUB period.                                            */'ăă  DEF SEG = VARSEG(Intrpt(1))ă  address = VARPTR(Intrpt(1))ă  POKE address + 51, intnumă				ă  CALL ABSOLUTE(Regs, address)ă  DEF SEGăăEND SUBăăSUB Open21 (FileName$, Handle)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăFileName$ = FileName$ + CHR$(0)ăRegs.ax = &H3D00ăRegs.ds = VARSEG(FileName$)ăRegs.dx = SADD(FileName$)ăCALL NewInterrupt(&H21, Regs)ăFileName$ = LEFT$(FileName$, LEN(FileName$) - 1)ăHandle = Regs.axăăEND SUBăăSUB PlayBack (Buffer$, size%, freq&, BytesPerSec&, chans%)ăăsize% = size% - 1ăsegment& = VARSEG(Buffer$)ăoffset& = SADD(Buffer$)ăIF segment& < 0 THEN segment& = segment& + 65536ăIF offset& < 0 THEN offset& = offset& + 65536ăbaseaddr& = segment& * 16 + offset&ălook1% = VARPTR(baseaddr&)ălook2% = VARPTR(size%)ăSELECT CASE dma%ă	CASE 0ă		dmapage% = &H87   '135 decimală		dmaaddr% = 0ă		dmalen% = 1ă	CASE 1ă		dmapage% = &H83   '131 decimală		dmaaddr% = 2ă		dmalen% = 3ă	CASE 2ă		dmapage% = &H81ă		dmaaddr% = 4ă		dmalen% = 5ă	CASE 3ă		dmapage% = &H82ă		dmaaddr% = 6ă		dmalen% = 7ă	CASE 4ă		dmapage% = &H8Fă		dmaaddr% = &HC0ă		dmalen% = &HC2ă	CASE 5ă		dmapage% = &H8Bă		dmaaddr% = &HC4ă		dmalen% = &HC6ă	CASE 6ă		dmapage% = &H89ă		dmaaddr% = &HC8ă		dmalen% = &HCAă	CASE 7ă		dmapage% = &H8Aă		dmaaddr% = &HCCă		dmalen% = &HCEăEND SELECTăSELECT CASE dma%ă	CASE 0 TO 3ă		dmamask% = &HAă		dmamode% = &HBă		dmaclear% = &HCă		dmastatus% = &H8ă	CASE 4 TO 7ă		dmamask% = &HD4ă		dmamode% = &HD6ă		dmaclear% = &HD8ă		dmastatus% = &HD0ăEND SELECTăSELECT CASE dma%ă	CASE 0, 4ă		dmaterminal% = 1   'bit 0 of status register (&H08 or &HD0)ă	CASE 1, 5ă		dmaterminal% = 2   'bit 1ă	CASE 2, 6ă		dmaterminal% = 4   'bit 2ă	CASE 3, 7ă		dmaterminal% = 8   'bit 3ăEND SELECTăăOUT dmamask%, dma% + 4   'mask the dma channelăOUT dmaclear%, &H0       '(clear the internal DMA flip/flop)ăOUT dmamode%, 72 + dma%  '  72=010010XX where XX=dmachannel%ăOUT dmaaddr%, PEEK(look1%)      'bits 0-7 of  the 20bit addressăOUT dmaaddr%, PEEK(look1% + 1)  'bits 8-15 of the 20bit addressăOUT dmapage%, PEEK(look1% + 2)  'bits 16-19 of the 20 bit addressăOUT dmalen%, PEEK(look2%)       'bits 0-7 of size%ăOUT dmalen%, PEEK(look2% + 1)   'bits 8-15  of size%ăOUT dmamask%, dma%              'enable channelăăIF num% = 1 THEN  'only need to Write out time constant onceă	timeconst% = 256 - 1000000 / (freq& * chans%)ă	CALL WriteToDSP(&H40)ă	CALL WriteToDSP(timeconst%)ă	'Reset Mixer    DSPmixeraddress = Blasteraddr% + &H4ă	OUT BlasterAddr% + &H4, &H0ă	OUT BlasterAddr% + &H4 + 1, 0ă	'Set Volume to Maximum...255ă	OUT BlasterAddr% + &H4, &H22ă	OUT BlasterAddr% + &H4 + 1, 50'255ă	IF chans% = 2 THENă		'Set mixer to Stereo Outpută		OUT BlasterAddr% + &H4, &HEă		OUT BlasterAddr% + &H4 + 1, 34      '34=2^5+2^1ă	END IFăEND IFăIF BytesPerSec& > 22000 THENă	CALL WriteToDSP(&H48)   'Set Block SizeăELSEă	CALL WriteToDSP(&H14)   'DMA Mode 8-bit DACăEND IFăCALL WriteToDSP(PEEK(look2%))      'Lo byte of addressăCALL WriteToDSP(PEEK(look2% + 1))  'High byte of addressăIF BytesPerSec& > 22000 THEN CALL WriteToDSP(&H91)  'High Speed DMA mode 8-bitădummy% = INP(dmastatus%)    'Read status byte once to make sure DMA is going.ăWAIT dmastatus%, dmaterminal%   'Loop until terminal count bit set in DMA status registeră'DMA Transfer is Now Completeă'Acknowledge the DSP interrupt by reading the DATA AVAILABLE port onceădummy% = INP(BlasterAddr% + &HE)    'DSP Available addressăăEND SUBăăFUNCTION SBreset%ăăOUT BlasterAddr% + &H6, 1   'Reset addressădelay .1ăOUT BlasterAddr% + &H6, 0ătime1! = TIMER: noreset% = 0ăDOă	IF TIMER - time1! > 1! THEN noreset% = -1ăLOOP UNTIL ((INP(BlasterAddr% + &HE) AND 128) = 128) OR noreset%ăIF NOT noreset% THENă	IF INP(BlasterAddr% + &HA) = &HAA THENă		SBreset% = -1ă	ELSEă		SBreset% = 0ă	END IFăELSEă	SBreset% = 0ăEND IFăăEND FUNCTIONăăSUB Seek21 (Handle, offset!)ă'/* Don't edit this SUB if you don't have any knowledge of Interrupts      */'ăăRegs.ax = &H4200ăRegs.bx = HandleăRegs.cx = offset! \ 65536ăRegs.dx = (offset! AND 32767) - (offset! AND 32768)ăCALL NewInterrupt(&H21, Regs)ăăEND SUBăăSUB ShowAVI (FileName$)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă	PRINT " FILE IS EMPTY"ă	CLOSE #255ă	KILL FileName$ă	EXIT SUBăEND IFăăDIM RIFFHeaderType AS RIFFHeaderTypeăDIM AVIHead AS AVIHeaderăDIM Listz AS ListzăDIM StreamHead AS StreamHeaderăDIM StreamForm AS StreamFormatăDIM BMPInfoHead AS BMPInfoHeaderăDIM ImageDataz AS ImageDataăDIM WavHeader AS WavHeaderăSpeedo& = Speed&ăăGET #255, , RIFFHeaderTypeăIF RIFFHeaderType.RIFFFileType <> "AVI " THENă	PRINT " INVALID AVI FILE"ă	EXIT SUBăEND IFăăGET #255, 25, AVIHeadăAVIHead.MicrosecPerFrame = (AVIHead.MicrosecPerFrame / 1000) '* (1 / 2)ăFramesPerSecond = CINT(1000 / AVIHead.MicrosecPerFrame)ăIF AVIHead.ValidID <> "avih" THENă	PRINT " Invalid AVI File Header"ă	EXIT SUBăEND IFăăSEEK #255, 25 + AVIHead.Reserved + 8ăFOR NumberOfStreams = 1 TO AVIHead.NoOfStreamsă	GET #255, , Listză	IF Listz.ListType = "strl" THENă		Position& = LOC(255) + 1ă		GET #255, , StreamHeadă		'/* Checks if the stream is a video stream indicated by the characters*/'ă		'/* 'vids', audio stream is indicated by the characters 'auds'        */'ă		IF LCASE$(StreamHead.Typez) = "vids" THENă			SEEK #255, Position& + StreamHead.BytesIn + 8ă			GET #255, , StreamFormă			Position& = LOC(255) + 1ă			GET #255, , BMPInfoHeadă			IF BMPInfoHead.BitsPerPixel <> 8 AND BMPInfoHead.BitsPerPixel <> 24 THENă				PRINT " Can't Play AVI File"ă				EXIT SUBă			ELSEIF BMPInfoHead.CompressMethod <> 0 THENă				PRINT " Only Uncompressed AVIs Can Be Played"ă				EXIT SUBă			END IFă			'/* Changes graphix screen to SCREEN 13 and changes the color palettes */'ă			SCREEN 13ă			IF BMPInfoHead.BitsPerPixel = 8 THENă				Palette$ = SPACE$(1024)ă				GET #255, , Palette$ă				FOR Loops = 0 TO 255ă					OUT &H3C8, Loopsă					OUT &H3C9, ASC(MID$(Palette$, (Loops * 4) + 3, 1)) \ 4ă					OUT &H3C9, ASC(MID$(Palette$, (Loops * 4) + 2, 1)) \ 4ă					OUT &H3C9, ASC(MID$(Palette$, (Loops * 4) + 1, 1)) \ 4ă				NEXT Loopsă			END IFă			Palette$ = ""ă			SEEK #255, Position& + StreamForm.BytesInFormat'Listz.BytesInList - 4ă		ELSEIF LCASE$(StreamHead.Typez) = "auds" THENă			BlasterAddr% = GetBlasterAddr%ă			IF BlasterAddr% <> -2 AND BlasterAddr% <> -1 AND BlasterAddr% <> 0 THENă				Blasting = 1ă			END IFă			IF NOT SBreset% THENă				SoundBlast = -1ă			END IFă			SEEK #255, Position& + StreamHead.BytesIn + 8ă			GET #255, , StreamFormă			GET #255, , WavHeaderă			IF WavHeader.BitsPerSample <> 8 OR WavHeader.BytesPerSecond > 22050 THENă				PRINT " Sound Can't Be Played"ă				SoundBlast = -1: SLEEP 1ă			END IFă			IF Blasting = 1 AND SoundBlast = 0 THENă				CALL WriteToDSP(&HD1)  'Speaker ONă			END IFă			WaveBytesPerFrame = INT(WavHeader.BytesPerSecond / FramesPerSecond)ă			SEEK #255, Position& + Listz.BytesInList - 4ă		END IFă	ELSEă		PRINT " UNABLE TO USE AVI FILE"ă		EXIT SUBă	END IFăNEXT NumberOfStreamsăăDOă	GET #255, , Listză	IF LCASE$(Listz.ListID) = "junk" OR LCASE$(Listz.ListID) = "vedt" THENă		SEEK #255, LOC(255) + 1 + Listz.BytesInList - 4ă	ELSEă		'/* List [4] Movi is extractedă		'SEEK #255, LOC(255) + 1 - 12ă		EXIT DOă	END IFăLOOPăăIF BMPInfoHead.BitsPerPixel = 24 THENă	CALL BIT24AVI(INT(BMPInfoHead.ImageWidth), INT(BMPInfoHead.ImageHeight), INT(AVIHead.TotalFrames))ă	CLOSEă	EXIT SUBăELSEIF AVIHead.Widthz > 320 OR AVIHead.Heightz > 200 THENă	PRINT " AVI Image Is To Large"ă	EXIT SUBăEND IFăă'/* Calculate the number of bytes to extract for each image line */'ăIF 4 - (BMPInfoHead.ImageWidth MOD 4) = 4 THENă	BytesToExtract = BMPInfoHead.ImageWidthăELSEă	BytesToExtract = BMPInfoHead.ImageWidth + (4 - (BMPInfoHead.ImageWidth MOD 4))ăEND IFăăRealCurrentLocation! = LOC(255)ăăHeightAdjust = (200 - BMPInfoHead.ImageHeight) \ 2ăWidthAdjust = (320 - BMPInfoHead.ImageWidth) \ 2ăIF HeightAdjust < 0 THEN HeightAdjust = 0ăIF WidthAdjust < 0 THEN WidthAdjust = 0ăCLOSEăă'/* Reopen the AVI file */'ăCALL Open21(FileName$, AVIHandle)ăărepeat:ăCurrentLocation! = RealCurrentLocation!ăăCALL Seek21(AVIHandle, CurrentLocation!)ăăFOR FrameNumber = 1 TO AVIHead.TotalFramesă	CALL Get21(AVIHandle, LEN(ImageDataz), VARSEG(ImageDataz), VARPTR(ImageDataz))ă	IF ImageDataz.ChunkID = "LIST" THENă		CurrentLocation! = CurrentLocation! + 12ă		CALL Seek21(AVIHandle, CurrentLocation!)ă		CALL Get21(AVIHandle, LEN(ImageDataz), VARSEG(ImageDataz), VARPTR(ImageDataz))ă	'/* Just incase something does go wrong */'ă	ELSEIF RIGHT$(ImageDataz.ChunkID, 3) = "00d" THENă		CALL Seek21(AVIHandle, CurrentLocation! + 1)ă		CALL Get21(AVIHandle, LEN(ImageDataz), VARSEG(ImageDataz), VARPTR(ImageDataz))ă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "00" THENă		CALL Seek21(AVIHandle, CurrentLocation! + 2)ă		CALL Get21(AVIHandle, LEN(ImageDataz), VARSEG(ImageDataz), VARPTR(ImageDataz))ă	END IFă	IF RIGHT$(ImageDataz.ChunkID, 2) = "db" THENă		FOR YHeight = BMPInfoHead.ImageHeight - 1 TO 0 STEP -1ă			IF YHeight + HeightAdjust < 100 THENă				CALL Get21(AVIHandle, BytesToExtract, &HA000, (YHeight + HeightAdjust) * 320 + WidthAdjust)ă			ELSEă				CALL Get21(AVIHandle, BytesToExtract, &HA7D0, (YHeight + HeightAdjust - 100) * 320 + WidthAdjust)ă			END IFă		NEXT YHeightă		IF PlayWave = 1 AND WaveBuffer$ <> "" THENă			Speed& = INT(Speedo& * (1 / 128))ă			ExtractBytes$ = LEFT$(WaveBuffer$, WaveBytesPerFrame)ă			IF (LEN(WaveBuffer$) - LEN(ExtractBytes$)) < 100 THENă				ExtractBytes$ = WaveBuffer$ă				WaveBuffer$ = ""ă			END IFă			ExtractBytes = LEN(ExtractBytes$)ă			CALL WavPlay(ExtractBytes$, LEN(ExtractBytes$), WavHeader.SampleRate, WavHeader.BytesPerSecond, WavHeader.Channels)ă			IF WaveBuffer$ <> "" THENă				WaveBuffer$ = RIGHT$(WaveBuffer$, LEN(WaveBuffer$) - ExtractBytes)ă			END IFă		ELSEă			Speed& = Speedo&ă		END IFă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "pc" THENă		'/* Skipping the color changing                                   */'ă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "wb" THENă		IF Blasting = 1 AND SoundBlast = 0 THENă			WaveBuffer$ = SPACE$(ImageDataz.NumberOfBytes)ă			CALL Get21(AVIHandle, LEN(WaveBuffer$), VARSEG(WaveBuffer$), SADD(WaveBuffer$))ă			PlayWave = 1ă			Speed& = 0ă		END IFă		FrameNumber = FrameNumber - 1ă	ELSEIF RIGHT$(ImageDataz.ChunkID, 2) = "dc" THENă		'/* Ending program because compressed data was encountered        */'ă		CALL Close21(AVIHandle)ă		IF Blasting = 1 AND SoundBlast = 0 THENă			OUT &H20, &H20   'Reset Normal Interrupt Serviceă			CALL WriteToDSP(&HD3)  'Speaker OFFă		END IFă		SCREEN 2: SCREEN 0ă		PRINT " Only Uncompressed AVIs Can Be Played"ă		EXIT SUBă	ELSEă		CALL Close21(AVIHandle)ă		IF Blasting = 1 AND SoundBlast = 0 THENă			OUT &H20, &H20   'Reset Normal Interrupt Serviceă			CALL WriteToDSP(&HD3)  'Speaker OFFă		END IFă		SCREEN 2: SCREEN 0ă		PRINT " Something Went Wrong"; ImageDataz.ChunkID, ImageDataz.NumberOfBytesă		PRINT " Please Send This AVI To <philipz85@hotmail.com>"ă		EXIT SUBă	END IFă	'/* Delay FUNCTION - slows down display according to speed given from*/'ă	'/* AVI file                                                         */'ă	delay (AVIHead.MicrosecPerFrame)ă	'/* Checks if the user presses a key                                 */'ă	IF INKEY$ <> "" THENă		CALL Close21(AVIHandle)ă		IF Blasting = 1 AND SoundBlast = 0 THENă			OUT &H20, &H20   'Reset Normal Interrupt Serviceă			CALL WriteToDSP(&HD3)  'Speaker OFFă		END IFă		EXIT SUBă	END IFă	CurrentLocation! = CurrentLocation! + ImageDataz.NumberOfBytes + 8ă	CALL Seek21(AVIHandle, CurrentLocation!)ă  ă	CALL Get21(AVIHandle, LEN(Listz), VARSEG(Listz), VARPTR(Listz))ă	IF LCASE$(Listz.ListID) = "junk" OR LCASE$(Listz.ListID) = "vedt" THENă		CurrentLocation! = CurrentLocation! + 8 + Listz.BytesInListă		CALL Seek21(AVIHandle, CurrentLocation!)ă	ELSEă		CALL Seek21(AVIHandle, CurrentLocation!)ă	END IFăNEXT FrameNumberăGOTO repeatăăEND SUBăăSUB WavPlay (Bytes$, WavLen&, Sampling&, Bytes&, Channels)ăăMaxBuffer% = 7053ăRemaining& = WavLen&ăDOă	num% = num% + 1ă	IF Remaining& >= MaxBuffer% THENă		BufferLen% = MaxBuffer%ă		Buffer$ = LEFT$(Bytes$, BufferLen%)ă		Bytes$ = RIGHT$(Bytes$, LEN(Bytes$) - BufferLen%)ă	ELSEă		BufferLen% = Remaining&ă		Buffer$ = LEFT$(Bytes$, BufferLen%)ă		Bytes$ = RIGHT$(Bytes$, LEN(Bytes$) - BufferLen%)ă	END IFă	Remaining& = Remaining& - BufferLen%ă	CALL PlayBack(Buffer$, BufferLen%, Sampling&, Bytes&, Channels)ăLOOP WHILE Remaining& > 0ăăEND SUBăăSUB WriteToDSP (v%)ăDOăLOOP UNTIL (INP(BlasterAddr% + &HC) AND 128) = 0ăOUT BlasterAddr% + &HC, v%ăăEND SUBăYousuf Philips                 OPEN ICO VERSION 0.1           philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        195  6427     OPENICO.BAS ''''''''''''''''''''''''''''''''''''''ă' Program    : Views ICO Files       'ă' Name       : OPENICO Version 0.1   'ă' Programmer : Yousuf Philips        'ă' Company    : Y P I                 'ă' Updated On : 17th of April 1999    'ă' Email - [philipz85@hotmail.com]    'ă' [http://members.xoom.com/Philipz/] 'ă''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* This program has been created by YPI (Basic Programming Incorporation) */'ă'/* as a utility to view Windows (ICO) icon & (CUR) cursor files in QBASIC.*/'ăă'/* It currently can view 4 and 8-bit images in color and 24-bit icons in  */'ă'/* grayscale.                                                             */'ăă'/* An original program created by the professional programmers at YPI.    */'ă'/* If you use any of this code in your program then you must credit YPI,  */'ă'/* it would be appreciated if you sent us a copy of your program also.    */'ă'/* Please send your comments and suggestions to <philipz85@hotmail.com>   */'ăăDECLARE SUB OpenICON (FileName$)ăDEFINT A-ZăăCLSăFILES "*.*"ăINPUT " Enter File Name - ", FileName$ăăIF INSTR(FileName$, ".") = 0 THENă   FileName$ = FileName$ + ".ico"ăEND IFăăCALL OpenICON(FileName$)ăăSUB OpenICON (FileName$)ăă'/* Icon File Main Header */'ăReserv1$ = SPACE$(2): Valid$ = SPACE$(2): NoOfIcons$ = SPACE$(2)ăă'/* Icon Main Header */'ăPixelWidth$ = SPACE$(1): PixelHeight$ = SPACE$(1): NoOfColors$ = SPACE$(1)ăReserv2$ = SPACE$(1): Planes$ = SPACE$(2): BitCount$ = SPACE$(2)ăTotalBytesOfImage$ = SPACE$(4): LocationOfImage$ = SPACE$(4)ăă'/* Icon Minor Header (BMP Info Header) */'ăSizeOfHeader$ = SPACE$(4): Width$ = SPACE$(4): Height$ = SPACE$(4)ăPlane$ = SPACE$(2): BitsPerPixel$ = SPACE$(2): Compressed$ = SPACE$(4)ăSizeOfImage$ = SPACE$(4): XMeter$ = SPACE$(4): YMeter$ = SPACE$(4)ăClrUsed$ = SPACE$(4): ClrImportant$ = SPACE$(4)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) = 0 THENă   PRINT " FILE IS EMPTY"ă   CLOSE #255ă   KILL FileName$ă   ENDăEND IFăăGET #255, , Reserv1$ăGET #255, , Valid$ăGET #255, , NoOfIcons$ăăCLSăPRINTăPRINT " - Icon File Main Header Information - "ăPRINT " Reserve (0) -"; CVI(Reserv1$)ăPRINT " Valid if (1) -"; CVI(Valid$)ăPRINT " Number of Icons in File -"; CVI(NoOfIcons$)ăăIF CVI(Reserv1$) = 19778 THENă   Location$ = SPACE$(4)ă   GET #255, 11, Location$ă   PRINTă   PRINT " This Icon File is a BMP File"ă   PRINT " Will attempt to display the BMP Image"ă   PRINT " Press Any Key To Continue"ă   Waiting$ = INPUT$(1)ă   SEEK #255, 15ă   GOSUB ReadIconăELSEă   Waiting$ = INPUT$(1)ă   FOR IconNumber = 1 TO CVI(NoOfIcons$)ă      '/* Extract Icon File Minor Header */'ă      GET #255, , PixelWidth$ă      GET #255, , PixelHeight$ă      GET #255, , NoOfColors$ă      GET #255, , Reserv2$ă      GET #255, , Planes$ă      GET #255, , BitCount$ă      GET #255, , TotalBytesOfImage$ă      GET #255, , LocationOfImage$ă      Location& = LOC(255) + 1ă      SEEK #255, CVL(LocationOfImage$) + 1ă      GOSUB ReadIconă      SEEK #255, Location&ă   NEXT IconNumberăEND IFăSYSTEMăăReadIcon:ă'/* Extract Icon Minor Header */'ă   GET #255, , SizeOfHeader$ă   GET #255, , Width$ă   GET #255, , Height$ă   GET #255, , Plane$ă   GET #255, , BitsPerPixel$ă   GET #255, , Compressed$ă   GET #255, , SizeOfImage$ă   GET #255, , XMeter$ă   GET #255, , YMeter$ă   GET #255, , ClrUsed$ă   GET #255, , ClrImportant$ă ă   IF CVI(BitsPerPixel$) = 1 THENă      SCREEN 2: SCREEN 0: PRINTă      PRINT " Can not Load 1-bit Images "ă      RETURNă   ELSEIF CVI(Compressed$) <> 0 THENă      SCREEN 2: SCREEN 0: PRINTă      PRINT " Can not Load Compressed Images"ă      RETURNă   END IFăă   PixelWidth = CVL(Width$): PixelHeight = CVL(Height$)ă   NumberOfColors& = 2 ^ CVI(BitsPerPixel$): PaletteBlue$ = SPACE$(1)ă   PaletteGreen$ = SPACE$(1): PaletteRed$ = SPACE$(1): Empty$ = SPACE$(1)ăă   SCREEN 13: CLSă ă   IF CVI(BitsPerPixel$) < 9 THENă      FOR Loops = 0 TO NumberOfColors& - 1ă         '/* Extract the palette of each of the colors and change the palette */'ă         GET #255, , PaletteBlue$ă         GET #255, , PaletteGreen$ă         GET #255, , PaletteRed$ă         GET #255, , Empty$ă         OUT &H3C8, Loopsă         OUT &H3C9, ASC(PaletteRed$) \ 4ă         OUT &H3C9, ASC(PaletteGreen$) \ 4ă         OUT &H3C9, ASC(PaletteBlue$) \ 4ă      NEXT Loopsă   END IFăă   IF CVI(Reserv1$) = 0 THEN PixelHeight = PixelHeight \ 2ăă   IF CVI(BitsPerPixel$) = 4 THENă      LineExtract$ = SPACE$(PixelWidth \ 2)ă      IF (4 - CINT((PixelWidth MOD 8) / 2)) <> 4 THENă         LineExtract$ = LineExtract$ + SPACE$(4 - CINT((PixelWidth MOD 8) / 2))ă      END IFă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #255, , LineExtract$ă         FOR X = 0 TO PixelWidth - 1 STEP 2ă            PSET (X, Y), ASC(MID$(LineExtract$, INT(X / 2) + 1, 1)) \ 16ă            PSET (X + 1, Y), ASC(MID$(LineExtract$, INT(X / 2) + 1, 1)) AND 15ă         NEXT Xă      NEXT Yă   ELSEIF CVI(BitsPerPixel$) = 8 THENă      LineExtract$ = SPACE$(PixelWidth)ă      IF CVI(Reserv1$) <> 0 THEN SEEK #255, CVL(Location$) + 1ă      IF (4 - (PixelWidth MOD 4)) <> 4 THEN Extra$ = SPACE$(4 - (PixelWidth MOD 4))ă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #255, , LineExtract$ă         GET #255, , Extra$ă         FOR X = 0 TO PixelWidth - 1ă            PSET (X, Y), ASC(MID$(LineExtract$, X + 1, 1))ă         NEXT Xă      NEXT Yă   ELSEIF CVI(BitsPerPixel$) = 24 THENă      IF CVI(Reserv1$) <> 0 THEN SEEK #255, CVL(Location$) + 1ă      FOR Loops = 0 TO 255ă         OUT &H3C8, Loopsă         OUT &H3C9, Loops \ 4ă         OUT &H3C9, Loops \ 4ă         OUT &H3C9, Loops \ 4ă      NEXT Loopsă      LineExtract$ = SPACE$(PixelWidth * 3)ă      IF (4 - ((PixelWidth * 3) MOD 4)) <> 4 THENă         LineExtract$ = SPACE$((PixelWidth * 3) + (4 - ((PixelWidth * 3) MOD 4)))ă      END IFă      FOR Y = PixelHeight - 1 TO 0 STEP -1ă         GET #255, , LineExtract$ă         FOR X = 0 TO PixelWidth - 1ă            PaletteBlue$ = MID$(LineExtract$, X * 3 + 1, 1)ă            PSET (X, Y), ASC(PaletteBlue$)ă         NEXT Xă      NEXT Yă   END IFă   Waiting$ = INPUT$(1)ăRETURNăăEND SUBăYousuf Philips                 SAVE SCREEN 12 AS 4BIT BMP V0.2philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        129  4996     SAVE4BIT.BAS''''''''''''''''''''''''''''''''''''''''''''ă' Program    : Save Screen 12 as 4-BIT BMP 'ă' Name       : SAVE4BIT Version 0.2        'ă' Programmer : Yousuf Philips              'ă' Company    : Y P I                       'ă' Updated On : 17th of Jan. 1998           'ă' Email - [philipz85@hotmail.com]          'ă' [http://members.xoom.com/Philipz/]       'ă''''''''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* The SAVE4BIT SUB is able to save any portion of screen 12 as a 4-BIT   */'ă'/* Windows BMP file.                                                      */'ă'/*                                                                        */'ă'/* What's New -                                                           */'ă'/*            * 4-BIT saving was corrected.                               */'ă'/*             [Thanks for the notification of the error, Joran.]         */'ăă'/* If you use any of this code in your program then you must credit YPI,  */'ă'/* it would be appreciated if you sent us a copy of your program also.    */'ăăTYPE BMPHeaderă   ValidID AS STRING * 2          '/* Must be 'BM'ă   SizeOfFile AS LONG             '/* Size of entire file in bytesă   Reserved AS LONG               '/* Four empty bytesă   OffsetOfBitMap AS LONG         '/* The location in the file where theă                                  '   bitmap is locatedăEND TYPEăăTYPE WindowsBMPInfoHeaderă    SizeOfHeader AS LONG        '/* Size of Information Headeră                                ' 40 - Windows | 12 - OS/2 1.x | 64 OS/2 2.xă    Widthz AS LONG              '/* Width of image in pixelsă    Heightz AS LONG             '/* Height of image in pixelsă    Planes AS INTEGER           '/* Number of Planes. Must be '1'ă    BitsPerPixel AS INTEGER     '/* Number of bits per pixelă                                ' Possible values are 1,4,8,16,24,32ă    CompressMethod AS LONG      '/* Compression Methodă                                ' 0 - Uncompressedă                                ' 1 - 8 Bit RLE Compressionă                                ' 2 - 4 Bit RLE Compressionă    ImageSizeInBytes AS LONG    '/* Size of image in bytesă    HorizontalResol AS LONG     '/* Horizontal Resolutionă    VerticalResol AS LONG       '/* Vertical Resolutionă    ColorsUsed AS LONG          '/* Number of Colors used | 0 - All Usedă    ImportantColors AS LONG     '/* Number of Important ColorsăEND TYPEăăDECLARE SUB SAVE4BIT (FileName$, MinX%, MinY%, MaxX%, MaxY%)ă'/* FileName$ - The filename of the file that the saved screen is to be put*/'ă'/* MinX - The starting x position                                         */'ă'/* MinY - The starting y position                                         */'ă'/* MaxX - The ending x position                                           */'ă'/* MaxY - The ending y position                                           */'ăăSCREEN 0: SCREEN 12ăFOR Circles = 1 TO 100ă   CIRCLE (RND * 640, RND * 480), RND * 200, RND * 16ăNEXT CirclesăPRINT "Created By YPI (c) 1998"ăăt = TIMERăCALL SAVE4BIT("4bit.bmp", 0, 0, 639, 479)ăPRINT " Time Taken To Save Screen -"; TIMER - tăăDEFINT A-ZăSUB SAVE4BIT (FileName$, MinX, MinY, MaxX, MaxY)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) <> 0 THENă   CLOSEă   KILL FileName$ă   OPEN FileName$ FOR BINARY AS #255ăEND IFăăImageWidth = (MaxX - MinX) + 1: ImageHeight = (MaxY - MinY) + 1ăăDIM BMPHeader AS BMPHeaderăDIM WindowsBMPInfoHeader AS WindowsBMPInfoHeaderăăPUT #255, , BMPHeaderăWindowsBMPInfoHeader.SizeOfHeader = 40ăWindowsBMPInfoHeader.Widthz = ImageWidthăWindowsBMPInfoHeader.Heightz = ImageHeightăWindowsBMPInfoHeader.Planes = 1ăWindowsBMPInfoHeader.BitsPerPixel = 4ăWindowsBMPInfoHeader.CompressMethod = 0ăWindowsBMPInfoHeader.ColorsUsed = 16ăWindowsBMPInfoHeader.ImportantColors = 16ăăPUT #255, , WindowsBMPInfoHeaderăăSCREEN 12ăFOR Colors = 0 TO 15ă   OUT &H3C7, Colorsă   AllColorz$ = AllColorz$ + CHR$(INP(&H3C9) * 4) + CHR$(INP(&H3C9) * 4) + CHR$(INP(&H3C9) * 4) + CHR$(0)ăNEXT ColorsăPUT #255, , AllColorz$: AllColorz$ = ""ăăIF (WindowsBMPInfoHeader.Widthz MOD 2) = 1 THENă   WindowsBMPInfoHeader.Widthz = WindowsBMPInfoHeader.Widthz + 1ăEND IFăăIF (4 - ((WindowsBMPInfoHeader.Widthz MOD 8) \ 2)) <> 4 THENă   Padding$ = SPACE$((4 - ((WindowsBMPInfoHeader.Widthz MOD 8) \ 2)))ăEND IFăăFOR Loops = MaxY TO MinY STEP -1ă   Bytez$ = ""ă   FOR Lips = MinX TO MaxX STEP 2ă      Byte = POINT(Lips, Loops) * 16ă      Byte = Byte + POINT(Lips + 1, Loops)ă      Bytez$ = Bytez$ + CHR$(Byte)ă   NEXT Lipsă   LINE (MinX, Loops)-(MaxX, Loops), 0ă   PUT #255, , Bytez$ă   PUT #255, , Padding$ăNEXT LoopsăăBMPHeader.ValidID = "BM"ăBMPHeader.SizeOfFile = LOF(255)ăBMPHeader.OffsetOfBitMap = 118ăăPUT #255, 1, BMPHeaderăCLOSE #255ăăEND SUBăYousuf Philips                 SAVE SCREEN 13 AS PCX V0.2     philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        148  5115     SAVEPCX.BAS ''''''''''''''''''''''''''''''''''''''ă' Program    : Save Screen 13 as PCX 'ă' Name       : SAVERLE Version 0.2   'ă' Programmer : Yousuf Philips        'ă' Company    : Y P I                 'ă' Updated On : 8th of July 1998      'ă' Email - [philipz85@hotmail.com]    'ă' [http://members.xoom.com/Philipz/] 'ă''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* The SAVEPCX SUB is able to save any portion of screen 13 as a PCX.     */'ă'/* The SAVEPCX SUB was tested on a Pentium 100MHz and it was able save the*/'ă'/* whole of screen 13 in 1.49 seconds.                                    */'ăă'/* If you use any of this code in your program then you must credit YPI.  */'ăăDECLARE SUB SavePCX (FileName$, MinX!, MinY!, MaxX!, MaxY!)ă'/* FileName$ - The filename of the file that the saved screen is to be put*/'ă'/* MinX - The starting x position                                         */'ă'/* MinY - The starting y position                                         */'ă'/* MaxX - The ending x position                                           */'ă'/* MaxY - The ending y position                                           */'ăăSCREEN 13ăFOR Circles = 1 TO 100ă   CIRCLE (RND * 320, RND * 200), RND * 100, RND * 256ăNEXT CirclesăPRINT " Created By YPI (c) 1998"ăăt = TIMERăCALL SavePCX("YPI.pcx", 0, 0, 319, 199)ăPRINT " Time Taken To Save Screen -"; TIMER - tăăSUB SavePCX (FileName$, MinX, MinY, MaxX, MaxY)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) <> 0 THENă   '/* If the file is not empty then it is deleted */'ă   CLOSE #255ă   KILL FileName$ă   OPEN FileName$ FOR BINARY AS #255ăEND IFăăValidPCX1$ = CHR$(10): PCXVersion$ = CHR$(5): ValidPCX2$ = CHR$(1)ăBitsPerPixel$ = CHR$(8)ăScreenMinX$ = MKI$(MinX): ScreenMinY$ = MKI$(MinY)ăScreenMaxX$ = MKI$(MaxX): ScreenMaxY$ = MKI$(MaxY)ăPixelWidth$ = MKI$((MaxX - MinX) + 1): PixelHeight$ = MKI$((MaxY - MinY) + 1)ăPalette4Bit$ = SPACE$(48): Reserved$ = CHR$(0): NoOfPlanes$ = CHR$(1)ăBytesPerLine$ = PixelWidth$: PaletteInfo$ = CHR$(1): FillHeader$ = STRING$(59, 0)ăValidPCX3$ = CHR$(12)ăă'/*  ------ Header Info -------- */'ă'/* The first Byte of a PCX is chr$(10) */'ăPUT #255, , ValidPCX1$ă'/* The PCX Version is from 2.5 - 3 | We are using Version 3 */'ăPUT #255, , PCXVersion$ă'/* The PCX has a reserved byte of chr$(1) */'ăPUT #255, , ValidPCX2$ă'/* No of Bits per Pixel */'ăPUT #255, , BitsPerPixel$ă'/* The Screen Ranges */'ăPUT #255, , ScreenMinX$ăPUT #255, , ScreenMinY$ăPUT #255, , ScreenMaxX$ăPUT #255, , ScreenMaxY$ă'/* The Image Width and Height */'ăPUT #255, , PixelWidth$ăPUT #255, , PixelHeight$ă'/* The Palette for 4-Bit images */'ăPUT #255, , Palette4Bit$ă'/* Reserved byte of chr$(0)ăPUT #255, , Reserved$ă'/* Number of Planes, always 1 */'ăPUT #255, , NoOfPlanes$ă'/* Bytes per line */'ăPUT #255, , BytesPerLine$ă'/* Palette type 0-2 */'ăPUT #255, , PaletteInfo$ă'/* Header fill to fill the first 128 bytes of the file */'ăPUT #255, , FillHeader$ăă'/*  ------ Picture Data -------- */'ăă'SCREEN 13ă'/* Saves the screen into BSAVE format */'ăDIM Image%(1 TO 32767)ăGET (MinX, MinY)-(MaxX, MaxY), Image%ăImageVarSeg = VARSEG(Image%(1))ăImageVarOffset = VARPTR(Image%(1))ăDEF SEG = ImageVarSegăBSAVE "temp.fil", ImageOffset, 65535ăăBytes11$ = SPACE$(11)ăOPEN "temp.fil" FOR BINARY AS #254ă'/* Extract the unnecessary bytes from the Bsave file */'ăGET #254, , Bytes11$ăăLineExtract$ = SPACE$(CVI(PixelWidth$))ăFOR Yaxis% = MinY TO MaxYă   GET #254, , LineExtract$ă   LINE (MinX, Yaxis%)-(MaxX, Yaxis%), 0ă  ă   XPixel% = 1: NewLine$ = ""ă   DOă      PixelColor$ = MID$(LineExtract$, XPixel%, 1)ă      IF MID$(LineExtract$, XPixel% + 1, 1) = PixelColor$ THENă         XPixel% = XPixel% + 2ă         SamePixels = 2ă         DOă         IF MID$(LineExtract$, XPixel%, 1) = PixelColor$ THENă            SamePixels = SamePixels + 1ă            XPixel% = XPixel% + 1ă         ELSEă            EXIT DOă         END IFă         LOOP UNTIL SamePixels = 63ă         NewLine$ = NewLine$ + CHR$(SamePixels + 192) + PixelColor$ă      ELSEă         IF ASC(PixelColor$) > 191 THENă            NewLine$ = NewLine$ + CHR$(193)ă         END IFă         NewLine$ = NewLine$ + PixelColor$ă         XPixel% = XPixel% + 1ă      END IFă   LOOP UNTIL XPixel% > LEN(LineExtract$)ă   PUT #255, , NewLine$ăNEXT Yaxis%ăCLOSE #254: KILL "temp.fil"ăă'/*  ------ Palette Data -------- */'ăPUT #255, , ValidPCX3$ăFOR Colors% = 0 TO 255ă   '/* Extracts the Palette of each of the 256 colors into a red, green and blue */'ă   '/* sections and places them into their corresponding variables */'ă   OUT &H3C6, &HFFă   OUT &H3C7, Colors%ă   Red$ = CHR$(INP(&H3C9) * 4): Green$ = CHR$(INP(&H3C9) * 4): Blue$ = CHR$(INP(&H3C9) * 4)ă   '/* Places the extracted colors into the given file */'ă   PUT #255, , Red$ă   PUT #255, , Green$ă   PUT #255, , Blue$ăNEXT Colors%ăăEND SUBăYousuf Philips                 WINDOWS ANIMATED CURSOR VIEWER philipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        74   4837     OPENANI.BAS ' Windows animated cursor viewerăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"OPANI01S.ZIP",4^6:Z&=3325:?STRING$(50,177);ăU"%up()%9%%%R-%VwA$KzB&\UU,7%%f9%%%0%%%%tu%jsfs%nSgfOx.&<,BSk5cwGăU"1xM0V59#mU[]QVS8jexQS&[+Iz;M#7vl,$Z%r2T]$ipA6s\N4Jvf\b1Yfl-s1tuăU"-te,uHgfCdll.k[Y#lY$=K>t>:9$2U]pxc2O5hUI1geOhKSl^r((opa#)B<:GzpăU"Q[s'C:k8(nT24G:;PrVc>Gbf'k#z5+jmAsSbYK6jr(LX\*.,qwd6;g=X'px[,m$ăU"g4wc0b/q+'-rAtSI83T3Oe[$.^l#-idk)itKHjN\YvCrQjjnq>TV(nzYV5d^^(,ăU"on(+h5L[Krd;La]W$bXS]V<bFg+)m5H%JC?DWG/;gCs_'AQ);w#J)0G3[*g,%n?ăU",4]T9tKt-Nj^fBvUPDmDuo'FxAQq&cu<%8qB8hQWA7&Sdf0Uh?b4#'Sp'fu6\w:ăU")6t5#+XIOA8l>mCik5^Ur%cdGn9(2j6E1_XPif:mdfp58Qf-)UXijG$<2d>CWFoăU"U>WY<[=j>KLdm^;)G#YcWH_uVP+[/k,0uM'0-mR[s&GQymgMTn(XZHMJWN[xj,văU"9XxJGi]B8e)D-a^]9H,$OAS8^D)[k*E<6MX(aoU&D,/9QHXEPxZ<GAa)4'[k)/IăU"hXNsss:)MAD8O<SAIXhyX:0=b)W))ABD#iMA'9kxOl31CK5eEwhK8RpC/ttx&-zăU"*rWR.TS%.[milmW[Hg>X]hB[G3QJZ8'>2bcqwJzG1&6:<bl072$1C'=uuS(E14;ăU"Lk)-C:sSg_0nw1%o)dq2Gdn8RWD2pNX+iq*q:)ndijafGAB79$+SivGM$JM&*O]ăU"U<m$_?QYV,R60[^I2Ij5;)\x<B(WhqB_RYV?r4?Du1^Zj2U)GhVH:UAOE_P\#FrăU"d+-21&c4/#BbQPgp$:^3Vl;'F0cX\Jf6AMB3r.]^F\+Y$;,1bU[i3%9%)ZYHS)LăU"/PP#ZcV/U'e02OKFMKV6jaK&T]a4&r$HA.I5&_aJLHOE5IxtU+RXt751d4=jrAMăU"8cSX[QJ]J7p2E;%Z0q]$b7/02a9cD6H,6d*2kF0'99i=q43o+<ka[>tZ0TlxZ0căU"'vJ4=4_1H*o4j''[*k$nGI<K<heJ]lV^'lS*n<fJ?Kk#\4k]P?IH-KW?\Z%51OlăU"\ZKs1o]W<EP(fi]Q)EQtQ'U&z(l:ZT<7AZR-9t1eAT$nO:nI[P?\',cXCNl'fdtăU"f)]%JVjw\9*X3JMo4m:/eSMR/GGj+,+;590]_c9lMnhGf/mld2f'1aSFZ'1>;]yăU"BWw;vi:;^DIcLlVmasg=F]XxNJ:p*n6aGSVQFDHe&8+JvGEKQkGRU]R/x[CVGVYăU",7<&?ORmhdbZ(c;Z#]3[?^^8z[)a+?5d=3SjTlF?P2_u^a-sZ#NRgkK:<M];YPOăU"F3ykaCms2YAm/EU(xUckO$73<jqV<Z*6M^9L\F+GLxfhl_IEZHS-YFIoe.l),+YăU"#9_5n#?/jp3qqk;]ZO)]T8#ND;+1F63dY4[*UXh/3R&l/6YWXWh%Mx6e[A>DEO.ăU"FJxo.^=<Y5\?ghWG,a-OLl'2db-V5P8N0pRi)&$$sqdT6[;X2I>)(QtWRz.0&qrăU"S[&aFr'64&RWcCGZH\2qfK^y]0iIojBoZC^_;,OinYSs9Ge*9Rlkp&R%MMXO$WDăU"f?\8[k/6f9lZ#VluSe=R?ZB/)#P<(>\=-pcC?M&3qyD%(Nw5(jFT'XSI<&<%jSBăU".y-6^t;5&#f,jDJEVHEBmo.wf%JAXITIM2rT(e<51g$x'm[>MtI_v'lX3'#oL36ăU"oj1\,VQ4'nAA<W*d;b-/BXu;7yP-W=]t:X1S:=CF_ViWxy-9+R(M\l$UXd*l=s1ăU"(nVF3E1xf5:ykdZ;dnBk;SFsv*&JaYxa?TDaB178Z1[IuN</(19qyWUN;vE/nulăU"lL6cg+QVC$Q'ZHGg*:F*-GgE,K#4();h8fX3qL>cjBsecNMzlRYWgI,R(0ON:rNăU"I-C9jH*p71]R&?M'ScT5pfK4.KLrt)8eSyE.f;&,sSh7:mW1CjR<*fkp<NS93qSăU"\<YD4<sl3_k3nuq:k,xg-v.>E*[4bGI'YLr%F?mAT=^AHUAfR6xszj=bMWdOyT*ăU"KB.MZ&uvCh>43[No_2.B^_'mbOFU/,gFk',d2MiLc-[uErkmr4(atYqM;U)\9(dăU"o2,G]lCO$S+6=$DF9^eR1nnKOCA4t&B#jF5.R,94^J3Z'D5=%Ww\lBHpzQqW)B0ăU"T^FfF$<9pRR_y*BUzFrwm.nDk_DHXl#5>\#S<l>Ehx&?0$9a$b9T^Sx6E8Ba>'OăU"<Jpbujw*8eyGDnLv4HTHojX>^vf'Vj2P2?Uz3t^tXe:jeo,Es5dG-x[u8rN:''QăU"TsFQO_C88*D^UVg3i\8%%up(%)9%%%%-%eb%dC'cP%D=#(%%?%T%%1%%%%m%tzwăU"l%qfxS[fsnf5iH>77f9#Dguf\?-;BPAk[j/ut#iI=)7jKMhX<bS\Rlm\C/X'pLZăU"Zv]tf30w:,Intoim[:Grx'XX.jM_-m+Kr?#po,]E1prBR/_.eGQ>_HfeUHen\*aăU"/EcfPKV('*QXSKm5N*b(POu5=sP82/8#2XdPz7z6bn7Ngrf0tSHoGR;oTMhODzJăU"z:jd4-&rPyn[kM2)2SRsfLu6u3-qnL)+Kk5Yd,AbKk)bt'x*.[;h0<F-ba/uvfaăU"[S::k7ongp''n[lTk=.ikGX'+5#l[p0_?d$xY(I*uLd2upjKDC.NI;/Qz>[spwMăU"[RUeEJU'2wP4CMSTEF58*c1p)GBv(bw)X-ShZOj*48(bXeoHOmu<]$d]);AD?*UăU"#)<1(s=1,_3Ve6goft__8OV%q/Ur7NEB_sw9Ir1$]rqUua3-qev:jCxWlxX>l&dăU"Ha0sanB\>rq8Ul,XL7JJV9r7w>B;jGjI$HE&j8#aQPa]cTdD(M=&1w7O&sY<:2+ăU"$31eqO(%\F%)QX(1*O0t9MsA>LrTZ=Z#,OsceHqRk(T(vP8N9)$wMYkHD1E]zJ)ăU"%$#5/,ZgujZKPr5139Maz<941Tp9]*39qy#ZY*,.reP^S.91i7'r:5dreP2/79[ăU"j$*uEMSC9A1AZsf6B*N=FFTL9SEKJf&.m&*U#/ArP)u/a2)tORCO*[OiR'r:?J\ăU"gPgG5ltPSrNA7s/?Lq:9glkVPk-im'r:Q)iS'V,\xc*4oK9/IY*2:nI/Gx+3b'MăU"+u[Z*2iQ8Zm(/Gvcdr'wB\ixoUNg*[5QeZ)au0JX)N'*6m.USkQ0ldQ;S[Js;h1ăU"K?O*O$hia6S4pq;)f#(l.$ZLOlt95lxuHADI-agrBi7uoT+9(-V=,?Q+nAA\SQ<ăU"eQKbdPju_a.St-)>7DMmpURZhOnq2)P#W;53qh<S_.eX#<qLHaLLEXEJMi-KcdqăU"/GucF4=)7H-Vu0YJ__gbXkRA$s8hNqs5o9>B)#V6^_dmt]<imHMu&47#Fl+#.$)ăU"<_S&E]c):W/w9_hi6s6Fr6\uNB1B,%?rYLX=[4M+Om$XtfM^A#9dC%uCrf6sXpeăU"i&49&OX])gD3AeRF#[-'D*hy:7Vn>%$(EP7k)4hYkv==5jFdK-V:,8$a7pC<c;tăU"VjTUoB$\MXXS'Ckg&hq>'CEf^zauU76kJq/NShqBbcO[N>4XXidKY'lvLGOo(0năU"^]n;X3]&Oiodba+Pv&u%p()9%%%%-I%Nx$LKRuW-TD%%+%u%%%%0%%%%knq(j.năU"i#Sin)(J]fpB=U5TWhPuVAF7b;Vyo)W\Wz;E/4R'9k^RE3.2YhWpn,nPkjcDW-păU"6\TiF=.hFRWm?>8')&NS$_GM$]O]YJ;9qSd(WLlercY&q4Sx,.[j7#0cbldm1/,ăU"t%l]7O8'#U?f_YXPeQ#g\TwO?R_ZqX5aJyksL]+$O-iO^H?[A^3nzL'j?Zr1C5KăU"a9e4pRE:QNejsV.3Tj*$vkofasBTHdTjVV$lIpX4f7j%H<TEU%zo\?En_8Z^%v-ăU"Nu0z)0M&u%p&'9%%9%%[%-%V)w$Kz)B\UU[,%%f%9%%0%%%%%%%%%&[%E%/&P%%ăU"%%%tuj%sfsn%Sgfx%up&'%9%9%%%%-%:e%dC?'P%D'=(%%&?T%%%1%%%%%%%%%%ăU"%E%3/P(,%%%mt%zwlq%fxSf%snup%&'9%%9%%%#-%NxJ$KRu>WTD%7%%u%%%%0%ăU"%%%%%%%%&%RE%/P%l0%%%knqj&.niS.in)u%p*+%%%%%([%(%%%%%%$%1%%%%%ăEND SUBăCLOSE:IF S=198AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăYousuf Philips                 SAVE SCREEN 13 AS 8-BIT RLE BMPphilipz@emirates.net.ae        04-23-99 (18:32)       QB, QBasic, PDS        130  5138     SAVERLE1.BAS''''''''''''''''''''''''''''''''''''''''''''''''ă' Program    : Save Screen 13 as 8-BIT RLE BMP 'ă' Name       : SAVERLE Version 0.1             'ă' Programmer : Yousuf Philips                  'ă' Company    : Y P I                           'ă' Updated On : 12th of Sept. 1998              'ă' Email - [philipz85@hotmail.com]              'ă' [http://members.xoom.com/Philipz/]           'ă''''''''''''''''''''''''''''''''''''''''''''''''ăă'/*               Do not edit this file if you distribute it.              */'ă'/*  (c) Copyrighted by YPI in 1998 | All Rights Reserved | Public Domain  */'ăă'/* The Save8BitRleBMP SUB is able to save any portion of screen 13 as a   */'ă'/* 8-BIT Windows RLE compressed BMP file.                                 */'ă'/* The Save8BitRleBMP SUB was tested on a Pentium 100MHz and it was able  */'ă'/* save the whole of screen 13 in 1.97 seconds.                           */'ăă'/* If you use any of this code in your program then you must credit YPI.  */'ăăTYPE BMPHeaderă   ValidID AS STRING * 2          '/* Must be 'BM'ă   SizeOfFile AS LONG             '/* Size of entire file in bytesă   Reserved AS LONG               '/* Four empty bytesă   OffsetOfBitMap AS LONG         '/* The location in the file where theă                                  '   bitmap is locatedăEND TYPEăăTYPE WindowsBMPInfoHeaderă    SizeOfHeader AS LONG        '/* Size of Information Headeră                                ' 40 - Windows | 12 - OS/2 1.x | 64 OS/2 2.xă    Widthz AS LONG              '/* Width of image in pixelsă    Heightz AS LONG             '/* Height of image in pixelsă    Planes AS INTEGER           '/* Number of Planes. Must be '1'ă    BitsPerPixel AS INTEGER     '/* Number of bits per pixelă                                ' Possible values are 1,4,8,16,24,32ă    CompressMethod AS LONG      '/* Compression Methodă                                ' 0 - Uncompressedă                                ' 1 - 8 Bit RLE Compressionă                                ' 2 - 4 Bit RLE Compressionă    ImageSizeInBytes AS LONG    '/* Size of image in bytesă    HorizontalResol AS LONG     '/* Horizontal Resolutionă    VerticalResol AS LONG       '/* Vertical Resolutionă    ColorsUsed AS LONG          '/* Number of Colors used | 0 - All Usedă    ImportantColors AS LONG     '/* Number of Important ColorsăEND TYPEăăDECLARE SUB Save8BitRleBMP (FileName$, MinX%, MinY%, MaxX%, MaxY%)ă'/* FileName$ - The filename of the file that the saved screen is to be put*/'ă'/* MinX - The starting x position                                         */'ă'/* MinY - The starting y position                                         */'ă'/* MaxX - The ending x position                                           */'ă'/* MaxY - The ending y position                                           */'ăăSCREEN 13ăFOR Circles = 1 TO 100ă   CIRCLE (RND * 320, RND * 200), RND * 100, RND * 256ăNEXT CirclesăPRINT " Created By YPI (c) 1998"ăăt = TIMERăCALL Save8BitRleBMP("bmprle.bmp", 0, 0, 319, 199)ăPRINT " Time Taken To Save Screen -"; TIMER - tăăDEFINT A-ZăSUB Save8BitRleBMP (FileName$, MinX, MinY, MaxX, MaxY)ăăOPEN FileName$ FOR BINARY AS #255ăIF LOF(255) <> 0 THENă   CLOSE #255ă   KILL FileName$ă   OPEN FileName$ FOR BINARY AS #255ăEND IFăăDIM BMPHeader AS BMPHeaderăDIM BMPInfoHeader AS WindowsBMPInfoHeaderăăPUT #255, , BMPHeaderăăBMPInfoHeader.SizeOfHeader = 40ăBMPInfoHeader.Widthz = (MaxX - MinX) + 1ăBMPInfoHeader.Heightz = (MaxY - MinY) + 1ăBMPInfoHeader.Planes = 1ăBMPInfoHeader.BitsPerPixel = 8ăBMPInfoHeader.CompressMethod = 1ăăPUT #255, , BMPInfoHeaderăăFOR Colors = 0 TO 255ă   OUT &H3C7, Colorsă   Red$ = CHR$(INP(&H3C9) * 4): Green$ = CHR$(INP(&H3C9) * 4): Blue$ = CHR$(INP(&H3C9) * 4)ă   ColorPalette$ = ColorPalette$ + Blue$ + Green$ + Red$ + SPACE$(1)ăNEXT ColorsăPUT #255, , ColorPalette$ăăFOR YHeight = MaxY TO MinY STEP -1ă   '/* Getting line of bytes */'ă   FOR XWidth = MinX TO MaxXă      PixelBytes$ = PixelBytes$ + CHR$(POINT(XWidth, YHeight))ă   NEXTă   LINE (MinX, YHeight)-(MaxX, YHeight), 0ăă   '/* Looping through line of bytes in string to compress */'ă   FOR XWidth = 1 TO LEN(PixelBytes$)ă      PixelColor$ = MID$(PixelBytes$, XWidth, 1)ă      IF PixelColor$ = MID$(PixelBytes$, XWidth + 1, 1) THENă         SimilarPixels = 2: XWidth = XWidth + 2ă         WHILE MID$(PixelBytes$, XWidth, 1) = PixelColor$ AND XWidth < LEN(PixelBytes$) AND SimilarPixels <> 255ă            SimilarPixels = SimilarPixels + 1: XWidth = XWidth + 1ă         WENDă         PixelBytes2$ = PixelBytes2$ + CHR$(SimilarPixels) + PixelColor$ă         XWidth = XWidth - 1ă      ELSEă         PixelBytes2$ = PixelBytes2$ + CHR$(1) + PixelColor$ă      END IFă   NEXT XWidthă   PixelBytes2$ = PixelBytes2$ + STRING$(2, 0)ă   PUT #255, , PixelBytes2$ă   PixelBytes$ = "": PixelBytes2$ = ""ăNEXT YHeightăEndOfImage$ = CHR$(0) + CHR$(1)ăPUT #255, , EndOfImage$ăăBMPHeader.ValidID = "BM"ăBMPHeader.SizeOfFile = LOC(255)ăBMPHeader.OffsetOfBitMap = 1078ăPUT #255, 1, BMPHeaderăCLOSEăăEND SUBăAlexander Meyer                COLOURED TEXT WITH SHADOW      Meyer.Karl@t-online.de         04-28-99 (07:08)       QB, QBasic, PDS        50   1400     COLORTXT.BAS'                             ////ă'                           0(o o)0ă'-------------------------ooO (_) Ooo---------------------ă' COLORTXT.BAS -- Written in QuickBasic 4.5ă'ă' Name: Colored text & shadowă' Author: Alexander Meyeră' Date: 04-24-1999ă' Description: This program draws every pixel on the screenă'              ina new colour and with a shadow.ă'ă'For questions or comments mail to: Meyer.Karl@t-online.deă'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăDECLARE SUB ColoredText (C1%, C2%, C3%, C4%, SC%, Sx%, Sy%)ăă'C1%, C2%, C3%, C4% = Colours to drawă'SC% = Colour of shadowă'Sx% = x-length of shadowă'Sy% = y-length of shadowăăSCREEN 13ăLOCATE 2, 2ăPRINT "° Hello World ±"ăLOCATE 5, 5: PRINT "This is a little demonstration...."ăCIRCLE (150, 100), 40, 15ăLINE (200, 150)-(250, 160), 15, BFăCALL ColoredText(44, 46, 48, 50, 24, 2, 2)ăENDăăSUB ColoredText (C1%, C2%, C3%, C4%, SC%, Sx%, Sy%)ăăRANDOMIZE TIMERăFOR x% = 1 TO 320ă  FOR y% = 1 TO 200ă    z% = POINT(x%, y%)ă    IF z% <> 0 AND z% <> SC% THENă      I% = INT(RND * 4)ă      IF I% = 0 THEN PSET (x%, y%), C1%ă      IF I% = 1 THEN PSET (x%, y%), C2%ă      IF I% = 2 THEN PSET (x%, y%), C3%ă      IF I% = 3 THEN PSET (x%, y%), C4%ă      IF POINT(x% + Sx%, y% + Sy%) = 0 THENă        PSET (x% + Sx%, y% + Sy%), SC%ă      END IFă    END IFă  NEXT y%ăNEXT x%ăăEND SUBăPaul Crosland                  QB IMAGE DRAW                  xflare@hotmail.com             05-26-99 (11:31)       QB, QBasic, PDS        615  21810    QBIDRAW.BAS 'QB IMAGE DRAW Copyright (c) 1998-1999 XFlareSoft.ă'ă'This program was designed by Paul Crosland and is intended to offeră'a pleasant alternative to designing QBasic graphics with featuresă'such as color converting and rotating images. 20 animation framesă'allows you to test your graphics while simultaneously designing them.ă'There are two save modes, one for up to 100 pixels, and another for upă'to 400 pixels. Use the DIM command to define the image area. Toă'use this program's palette in your own programs, copy the CHGCOLORS sub.ă'If you use a screen other than 9, you will have to redefine the attributeă'numbers, probably by simple experimentation. For screen 13 however, justă'change the AT row to "00010203040506070809101112131415".ă'ă'You may distribute this program only if everything remains intact.ă'Please send any comments and/or suggestions to xflare@hotmail.com.ăăDECLARE SUB CHGCOLORS ()ăDECLARE SUB SCROLL ()ăDECLARE SUB SPRAY ()ăDECLARE SUB TEXTURE ()ăDECLARE SUB DIMENSIONS ()ăDECLARE SUB CONVERT ()ăDECLARE SUB ROTATE ()ăDECLARE SUB FINDFILE ()ăDECLARE SUB SAVEFILE ()ăDECLARE SUB SAFEMODE ()ăDECLARE SUB SCREENSET ()ăDECLARE SUB ANIMATION ()ăDECLARE SUB CURCHANGE ()ăăDIM SHARED image(100), pcol(400), afile$(20), fafile$(20), prafile$(20)ăDIM SHARED image1(100), image2(100), image3(100), image4(100), image5(100)ăDIM SHARED image6(100), image7(100), image8(100), image9(100), image10(100)ăDIM SHARED image11(100), image12(100), image13(100), image14(100)ăDIM SHARED image15(100), image16(100), image17(100), image18(100)ăDIM SHARED image19(100), image20(100)ăăCOMMON SHARED sel$, xcursor1, xcursor2, ycursor, box, col, file$, statăCOMMON SHARED prfile$, adelay, xdim1, ydim1, xdim2, ydim2, curdelay, cursor$ăCOMMON SHARED erry, errx, cutshort$, intenseăăxdim1 = 0: ydim1 = 0: xdim2 = 19: ydim2 = 19ăerry = 23: errx = 31ăcutshort$ = "no"ăintense = 11ăFOR num = 1 TO 20ă   afile$(num) = "c:\"ăNEXTăSCREEN 9, 0, 0, 0: CLSăON ERROR GOTO errortrapăRANDOMIZE TIMERăCALL CHGCOLORSăCALL SCREENSETăăDOă   sel$ = INKEY$ă   SELECT CASE UCASE$(sel$)ă      CASE "C"ă         IF box = 1 THENă            box = 2ă         ELSEă            box = 1ă         END IFă      CASE CHR$(0) + CHR$(72)ă         IF box = 2 THENă            LINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 4, Bă            ycursor = ycursor - 10ă            IF ycursor < 100 + ydim1 * 10 THEN ycursor = 100 + ydim2 * 10ă         END IFă      CASE CHR$(0) + CHR$(80)ă         IF box = 2 THENă            LINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 4, Bă            ycursor = ycursor + 10ă            IF ycursor > 100 + ydim2 * 10 THEN ycursor = 100 + ydim1 * 10ă         END IFă      CASE CHR$(0) + CHR$(75)ă         IF box = 1 THENă            LINE (xcursor1, 34)-(xcursor1 + 30, 64), 4, Bă            xcursor1 = xcursor1 - 30: IF xcursor1 < 70 THEN xcursor1 = 520ă         ELSEIF box = 2 THENă            LINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 4, Bă            xcursor2 = xcursor2 - 10ă            IF xcursor2 < 210 + xdim1 * 10 THEN xcursor2 = 210 + xdim2 * 10ă         END IFă      CASE CHR$(0) + CHR$(77)ă         IF box = 1 THENă            LINE (xcursor1, 34)-(xcursor1 + 30, 64), 4, Bă            xcursor1 = xcursor1 + 30: IF xcursor1 > 520 THEN xcursor1 = 70ă         ELSEIF box = 2 THENă            LINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 4, Bă            xcursor2 = xcursor2 + 10ă            IF xcursor2 > 210 + xdim2 * 10 THEN xcursor2 = 210 + xdim1 * 10ă         END IFă      CASE CHR$(13)ă         IF box = 1 THENă            col = POINT(xcursor1 + 2, 36): box = 2ă         ELSEIF box = 2 THENă            LINE (xcursor2 + 2, ycursor + 2)-(xcursor2 + 8, ycursor + 8), col, BFă            PSET (xcursor2 / 10 + 469, ycursor / 10 + 230), colă         END IFă      CASE "Q", CHR$(27)ă         CALL SAFEMODE: IF sel$ = "Y" THEN SCREEN 9, 0, 0, 0: CLS : CLEAR : ENDă      CASE "N"ă         CALL SAFEMODE: IF sel$ = "Y" THEN CALL SCREENSETă      CASE "O"ă         CALL FINDFILEă      CASE "S"ă         CALL SAVEFILEă      CASE "R"ă         IF xdim1 = ydim1 AND xdim2 = ydim2 THEN CALL ROTATEă      CASE "V"ă         CALL SAFEMODE: IF sel$ = "Y" THEN CALL CONVERTă      CASE "L"ă         CALL SCROLLă      CASE "D"ă         CALL DIMENSIONSă      CASE "A"ă         CALL ANIMATIONă      CASE "P"ă         CALL SPRAYă   END SELECTă   LINE (210 + xdim1 * 10, 100 + ydim1 * 10)-(220 + xdim2 * 10, 110 + ydim2 * 10), 12, Bă   LINE (xcursor1, 34)-(xcursor1 + 30, 64), 8, Bă   LINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 8, Bă   LINE (490, 140)-(509, 159), col, BFă   xcoor = xcursor2 / 10 - 21 - xdim1ă   ycoor = ycursor / 10 - 10 - ydim1ă   IF xcoor < 10 AND ycoor < 10 THEN text$ = "0# - 0#"ă   IF xcoor > 9 AND ycoor > 9 THEN text$ = "## - ##"ă   IF xcoor > 9 AND ycoor < 10 THEN text$ = "## - 0#"ă   IF xcoor < 10 AND ycoor > 9 THEN text$ = "0# - ##"ă   IF LEN(file$) < 4 THENă      name$ = "UNTITLED"ă   ELSEă      name$ = UCASE$(file$) + ".GPH"ă   END IFă   LOCATE 7, 30: PRINT STRING$(20, " ")ă   LOCATE 7, 40 - (LEN(name$)) / 2: COLOR 12: PRINT name$ă   LOCATE 15, 60: COLOR 4: PRINT USING text$; xcoor; ycooră   PCOPY 1, 0ăLOOPăăerrortrap:ăLOCATE erry, errx - 1: PRINT STRING$(22, " ")ăLOCATE erry, errx: COLOR 8: PRINT "INVALID FILE NAME"ăcutshort$ = "yes"ăPCOPY 1, 0ătime1# = TIMER: DO: time2# = TIMER: LOOP UNTIL time2# - time1# > 1ăLOCATE erry, errx: PRINT STRING$(20, " ")ăRESUME NEXTăăSUB ANIMATIONăăframe = 1ăIF adelay = 0 THEN adelay = 10ăcursor$ = "_": curdelay = 10ăanimate$ = "no"ăerry = 11: errx = 5ăFOR num = 1 TO 10ă   prafile$(num) = afile$(num)ăNEXTăDOă   LOCATE 10, 3: PRINT STRING$(22, " ")ă   LOCATE 11, 3: PRINT STRING$(22, " ")ă   COLOR 12: LOCATE 10, 3: PRINT "FRAME"; frameă   COLOR 4: LOCATE 11, 3: PRINT ">>> "; afile$(frame) + cursor$ă   sel$ = INKEY$ă   SELECT CASE UCASE$(sel$)ă      CASE "A" TO "Z", "\", "/", ":", "0" TO "9"ă         IF LEN(afile$(frame)) < 18 THEN afile$(frame) = afile$(frame) + sel$ă      CASE CHR$(8)ă         IF LEN(afile$(frame)) > 0 THEN afile$(frame) = LEFT$(afile$(frame), LEN(afile$(frame)) - 1)ă      CASE CHR$(13)ă         animate$ = "yes": EXIT DOă      CASE CHR$(27)ă         cutshort$ = "yes": EXIT DOă         animate$ = "no"ă      CASE CHR$(0) + CHR$(72)ă         frame = frame + 1: IF frame = 21 THEN frame = 1ă      CASE CHR$(0) + CHR$(80)ă         frame = frame - 1: IF frame = 0 THEN frame = 20ă   END SELECTă   CALL CURCHANGEă   IF LEN(afile$(frame)) = 18 THEN cursor$ = " "ă   PCOPY 1, 0ăLOOPăIF animate$ = "yes" THENă   FOR num = 1 TO 20ă      IF LEN(afile$(num)) > 3 THENă         maxframe = numă         fafile$(num) = afile$(num) + ".gph"ă      ELSEă         EXIT FORă      END IFă   NEXTă   FOR num = 1 TO 20ă      IF maxframe < num THEN afile$(num) = "c:\"ă   NEXTă   LOCATE 10, 3: PRINT STRING$(22, " "): LOCATE 11, 3: PRINT STRING$(22, " ")ă  ă   IF maxframe > 19 THEN DEF SEG = VARSEG(image20(0)): BLOAD fafile$(20), VARPTR(image20(0))ă   IF maxframe > 18 THEN DEF SEG = VARSEG(image19(0)): BLOAD fafile$(19), VARPTR(image19(0))ă   IF maxframe > 17 THEN DEF SEG = VARSEG(image18(0)): BLOAD fafile$(18), VARPTR(image18(0))ă   IF maxframe > 16 THEN DEF SEG = VARSEG(image17(0)): BLOAD fafile$(17), VARPTR(image17(0))ă   IF maxframe > 15 THEN DEF SEG = VARSEG(image16(0)): BLOAD fafile$(16), VARPTR(image16(0))ă   IF maxframe > 14 THEN DEF SEG = VARSEG(image15(0)): BLOAD fafile$(15), VARPTR(image15(0))ă   IF maxframe > 13 THEN DEF SEG = VARSEG(image14(0)): BLOAD fafile$(14), VARPTR(image14(0))ă   IF maxframe > 12 THEN DEF SEG = VARSEG(image13(0)): BLOAD fafile$(13), VARPTR(image13(0))ă   IF maxframe > 11 THEN DEF SEG = VARSEG(image12(0)): BLOAD fafile$(12), VARPTR(image12(0))ă   IF maxframe > 10 THEN DEF SEG = VARSEG(image11(0)): BLOAD fafile$(11), VARPTR(image11(0))ă   IF maxframe > 9 THEN DEF SEG = VARSEG(image10(0)): BLOAD fafile$(10), VARPTR(image10(0))ă   IF maxframe > 8 THEN DEF SEG = VARSEG(image9(0)): BLOAD fafile$(9), VARPTR(image9(0))ă   IF maxframe > 7 THEN DEF SEG = VARSEG(image8(0)): BLOAD fafile$(8), VARPTR(image8(0))ă   IF maxframe > 6 THEN DEF SEG = VARSEG(image7(0)): BLOAD fafile$(7), VARPTR(image7(0))ă   IF maxframe > 5 THEN DEF SEG = VARSEG(image6(0)): BLOAD fafile$(6), VARPTR(image6(0))ă   IF maxframe > 4 THEN DEF SEG = VARSEG(image5(0)): BLOAD fafile$(5), VARPTR(image5(0))ă   IF maxframe > 3 THEN DEF SEG = VARSEG(image4(0)): BLOAD fafile$(4), VARPTR(image4(0))ă   IF maxframe > 2 THEN DEF SEG = VARSEG(image3(0)): BLOAD fafile$(3), VARPTR(image3(0))ă   IF maxframe > 1 THEN DEF SEG = VARSEG(image2(0)): BLOAD fafile$(2), VARPTR(image2(0))ă   IF maxframe > 0 THEN DEF SEG = VARSEG(image1(0)): BLOAD fafile$(1), VARPTR(image1(0))ă  ă   frame = 1ă   IF maxframe = 0 THEN cutshort$ = "yes"ă   IF cutshort$ = "no" THENă      DOă         time1# = TIMERă         LOCATE 10, 5: COLOR 4: PRINT "USE THE ARROW KEYS"ă         LOCATE 11, 5: PRINT "TO CHANGE THE SPEED"ă         LOCATE 18, 10: COLOR 12: PRINT "DEL:"; adelayă         LOCATE 20, 5: COLOR 4: PRINT "PRESS ESC WHEN DONE"ă         sel$ = INKEY$ă         SELECT CASE sel$ă            CASE CHR$(0) + CHR$(72)ă               IF adelay < 20 THEN adelay = adelay + 1ă            CASE CHR$(0) + CHR$(80)ă               IF adelay > 1 THEN adelay = adelay - 1ă         END SELECTă         IF frame = 1 THEN PUT (90, 190), image1, PSETă         IF frame = 2 THEN PUT (90, 190), image2, PSETă         IF frame = 3 THEN PUT (90, 190), image3, PSETă         IF frame = 4 THEN PUT (90, 190), image4, PSETă         IF frame = 5 THEN PUT (90, 190), image5, PSETă         IF frame = 6 THEN PUT (90, 190), image6, PSETă         IF frame = 7 THEN PUT (90, 190), image7, PSETă         IF frame = 8 THEN PUT (90, 190), image8, PSETă         IF frame = 9 THEN PUT (90, 190), image9, PSETă         IF frame = 10 THEN PUT (90, 190), image10, PSETă         IF frame = 11 THEN PUT (90, 190), image11, PSETă         IF frame = 12 THEN PUT (90, 190), image12, PSETă         IF frame = 13 THEN PUT (90, 190), image13, PSETă         IF frame = 14 THEN PUT (90, 190), image14, PSETă         IF frame = 15 THEN PUT (90, 190), image15, PSETă         IF frame = 16 THEN PUT (90, 190), image16, PSETă         IF frame = 17 THEN PUT (90, 190), image17, PSETă         IF frame = 18 THEN PUT (90, 190), image18, PSETă         IF frame = 19 THEN PUT (90, 190), image19, PSETă         IF frame = 20 THEN PUT (90, 190), image20, PSETă         frame = frame + 1: IF frame > maxframe THEN frame = 1ă         PCOPY 1, 0ă         DO: time2# = TIMER: LOOP UNTIL time2# - time1# > adelay / 100ă      LOOP UNTIL sel$ = CHR$(27)ă   END IFăEND IFăIF cutshort$ = "yes" THENă   FOR num = 1 TO 10ă      afile$(num) = prafile$(num)ă   NEXTă   cutshort$ = "no"ăEND IFăăLOCATE 10, 5: PRINT STRING$(15, " ")ăLOCATE 11, 5: PRINT STRING$(15, " ")ăLOCATE 18, 10: PRINT STRING$(15, " ")ăLOCATE 20, 5: PRINT STRING$(20, " ")ăLOCATE 10, 3: PRINT STRING$(24, " ")ăLOCATE 11, 3: PRINT STRING$(24, " ")ăLOCATE 18, 10: PRINT STRING$(10, " ")ăLINE (90, 190)-(109, 209), 0, BFăăEND SUBăăSUB CHGCOLORSăăFOR CL = 0 TO 15ă   AT = VAL(MID$("00010203040520075657585960616263", CL * 2 + 1, 2))ă   RD = VAL(MID$("05152540605055456002100402020202", CL * 2 + 1, 2))ă   GR = VAL(MID$("05152540604050020225354555101530", CL * 2 + 1, 2))ă   BL = VAL(MID$("05152540600202040210051002406060", CL * 2 + 1, 2))ă   OUT &H3C8, AT: OUT &H3C9, RD: OUT &H3C9, GR: OUT &H3C9, BLăNEXTăăEND SUBăăSUB CONVERTăăchgcol = POINT(xcursor2 + 2, ycursor + 2)ăx = 210 + xdim1 * 10: y = 100 + ydim1 * 10ăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   pcol(num) = POINT(x + 2, y + 2)ă   IF pcol(num) = chgcol THENă      LINE (x + 2, y + 2)-(x + 8, y + 8), col, BFă      PSET (x / 10 + 469, y / 10 + 230), colă   END IFă   x = x + 10: IF x = 220 + xdim2 * 10 THEN y = y + 10: x = 210 + xdim1 * 10ăNEXTăăEND SUBăăSUB CURCHANGEăăcurdelay = curdelay - 1ăIF curdelay = 0 THENă   curdelay = 10ă   IF cursor$ = "_" THENă      cursor$ = " "ă   ELSEIF cursor$ = " " THENă      cursor$ = "_"ă   END IFăEND IFăăEND SUBăăSUB DIMENSIONSăălxdim1 = xdim1: lxdim2 = xdim2: lydim1 = ydim1: lydim2 = ydim2ăLINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 3, BăLINE (210 + xdim1 * 10, 100 + ydim1 * 10)-(220 + xdim2 * 10, 110 + ydim2 * 10), 3, Băstat = xdim1: text$ = "X1:"ăFOR num = 1 TO 4ă   DOă      LOCATE 23, 30: PRINT STRING$(20, " "): COLOR 4ă      IF stat < 10 THEN text2$ = " 0#"ă      IF stat > 9 THEN text2$ = " ##"ă      LOCATE 23, 37: PRINT text$; : PRINT USING text2$; stată      sel$ = INKEY$ă      SELECT CASE sel$ă         CASE CHR$(0) + CHR$(72)ă            IF stat < 19 THEN stat = stat + 1ă         CASE CHR$(0) + CHR$(80)ă            IF stat > 0 THEN stat = stat - 1ă         CASE CHR$(27)ă            EXIT DOă         CASE CHR$(13)ă            IF num = 1 THEN xdim1 = stată            IF num = 2 THEN ydim1 = stată            IF num = 3 THEN xdim2 = stată            IF num = 4 THEN ydim2 = stată            EXIT DOă      END SELECTă      PCOPY 1, 0ă   LOOPă   IF num = 1 THENă      stat = ydim1: text$ = "Y1:"ă   ELSEIF num = 2 THENă      stat = xdim2: text$ = "X2:"ă   ELSEIF num = 3 THENă      stat = ydim2: text$ = "Y2:"ă   END IFă   IF sel$ = CHR$(27) THEN EXIT FORăNEXTăLOCATE 23, 30: PRINT STRING$(20, " ")ăLINE (xcursor2, ycursor)-(xcursor2 + 10, ycursor + 10), 3, BăIF xdim1 > xdim2 OR ydim1 > ydim2 THENă   LOCATE 23, 31: COLOR 8: PRINT "INVALID DIMENSIONS"ă   PCOPY 1, 0ă   time1# = TIMER: DO: time2# = TIMER: LOOP UNTIL time2# - time1# > 1ă   xdim1 = lxdim1: xdim2 = lxdim2: ydim1 = lydim1: ydim2 = lydim2ăELSEă   xcursor2 = 210 + xdim1 * 10: ycursor = 100 + ydim1 * 10ăEND IFăIF xdim1 <> ydim1 OR xdim2 <> ydim2 THENă   COLOR 1: LOCATE 25, 20: PRINT "R"; : COLOR 2: PRINT "OTATE";ăELSEă   COLOR 10: LOCATE 25, 20: PRINT "R"; : COLOR 12: PRINT "OTATE";ăEND IFăLOCATE 23, 30: PRINT STRING$(20, " ")ăăEND SUBăăSUB FINDFILEăăerry = 23: errx = 31ăcursor$ = "_": curdelay = 10ăprfile$ = file$ăDOă   LOCATE 23, 28: PRINT STRING$(24, " ")ă   sel$ = INKEY$ă   SELECT CASE UCASE$(sel$)ă      CASE "A" TO "Z", "\", "/", ":", "0" TO "9"ă         IF LEN(file$) < 18 THEN file$ = file$ + sel$ă      CASE CHR$(8)ă         IF LEN(file$) > 0 THEN file$ = LEFT$(file$, LEN(file$) - 1)ă      CASE CHR$(13)ă         open$ = "yes": EXIT DOă      CASE CHR$(27)ă         open$ = "no": file$ = prfile$: EXIT DOă   END SELECTă   IF LEN(file$) = 18 THEN cursor$ = " "ă   LOCATE 23, 28: COLOR 4: PRINT "OPEN: "; file$ + cursor$ă   CALL CURCHANGEă   PCOPY 1, 0ăLOOPăffile$ = file$ + ".gph"ăIF open$ = "yes" THENă   DEF SEG = VARSEG(image(0)): BLOAD ffile$, VARPTR(image(0))ă   IF cutshort$ = "yes" THEN open$ = "no"ăEND IFăIF open$ = "yes" THENă   LINE (490, 240)-(509, 259), 0, BFă   PUT (490, 240), image, PSETă   x1 = 490: y1 = 240ă   x2 = 210: y2 = 100ă   FOR num = 1 TO 400ă      pcol(num) = POINT(x1, y1)ă      LINE (x2 + 2, y2 + 2)-(x2 + 8, y2 + 8), pcol(num), BFă      x1 = x1 + 1: IF x1 = 510 THEN x1 = 490: y1 = y1 + 1ă      x2 = x2 + 10: IF x2 = 410 THEN y2 = y2 + 10: x2 = 210ă   NEXTăEND IFăLOCATE 23, 28: PRINT STRING$(24, " ")ăIF cutshort$ = "yes" THEN file$ = prfile$: cutshort$ = "no"ăăEND SUBăăSUB ROTATEăăx = 210 + xdim1 * 10: y = 100 + ydim1 * 10ăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   pcol(num) = POINT(x + 2, y + 2)ă   x = x + 10: IF x = 220 + xdim2 * 10 THEN y = y + 10: x = 210 + xdim1 * 10ăNEXTăx = 210 + xdim2 * 10: y = 100 + ydim1 * 10ăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   LINE (x + 2, y + 2)-(x + 8, y + 8), pcol(num), BFă   PSET (x / 10 + 469, y / 10 + 230), pcol(num)ă   y = y + 10: IF y = 110 + ydim2 * 10 THEN y = 100 + ydim1 * 10: x = x - 10ăNEXTăăEND SUBăăSUB SAFEMODEăăSCREEN 9, 0, 0, 0ăDOă   LOCATE 23, 30: COLOR 4: PRINT "ARE YOU SURE? (Y,N)"ă   sel$ = INKEY$: sel$ = UCASE$(sel$)ăLOOP UNTIL sel$ = "Y" OR sel$ = "N" OR sel$ = CHR$(27)ăIF sel$ = CHR$(27) THEN sel$ = "N"ăSCREEN 9, 0, 1, 0ăăEND SUBăăSUB SAVEFILEăăerry = 23: errx = 31ăcursor$ = "_": curdelay = 10ăprfile$ = file$ăDOă   LOCATE 23, 28: PRINT STRING$(24, " ")ă   sel$ = INKEY$ă   SELECT CASE UCASE$(sel$)ă      CASE "A" TO "Z", "\", "/", ":", "0" TO "9"ă         IF LEN(file$) < 18 THEN file$ = file$ + sel$ă      CASE CHR$(8)ă         IF LEN(file$) > 0 THEN file$ = LEFT$(file$, LEN(file$) - 1)ă      CASE CHR$(13)ă         save$ = "yes": EXIT DOă      CASE CHR$(27)ă         save$ = "no": file$ = prfile$: EXIT DOă   END SELECTă   IF LEN(file$) = 18 THEN cursor$ = " "ă   LOCATE 23, 28: COLOR 4: PRINT "SAVE: "; file$ + cursor$ă   CALL CURCHANGEă   PCOPY 1, 0ăLOOPăffile$ = file$ + ".gph"ăIF save$ = "yes" THENă   GET (490 + xdim1, 240 + ydim1)-(490 + xdim2, 240 + ydim2), imageă   DEF SEG = VARSEG(image(0))ă   IF (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1) <= 100 THENă      BSAVE ffile$, VARPTR(image(0)), 84ă   ELSEă      BSAVE ffile$, VARPTR(image(0)), 244ă   END IFăEND IFăLOCATE 23, 28: PRINT STRING$(24, " ")ăIF cutshort$ = "yes" THEN file$ = prfile$: cutshort$ = "no"ăăEND SUBăăSUB SCREENSETăăfile$ = "c:\"ăbox = 2: col = 0ăycursor = 100 + ydim1 * 10: xcursor1 = 70: xcursor2 = 210 + xdim1 * 10ăSCREEN 9, 0, 1, 0: CLSăx = 70: y = 34ăFOR num = 0 TO 15ă   LINE (x, y)-(x + 30, y + 30), 4, Bă   LINE (x + 2, y + 2)-(x + 28, y + 28), num, BFă   x = x + 30: IF x = 550 THEN x = 70: y = y + 15ăNEXTăx = 210: y = 100ăFOR num = 1 TO 400ă   pcol(num) = 0ă   LINE (x, y)-(x + 10, y + 10), 4, Bă   x = x + 10: IF x = 410 THEN y = y + 10: x = 210ăNEXTăCOLOR 12ăLOCATE 1, 30: PRINT "*** QB IMAGE DRAW ***"ăLOCATE 25, 3: PRINT "NEW  OPEN  SAVE  ROTATE  COLOR  CONVERT  SPRAY  SCROLL  DIM  ANIMATE  QUIT";ăCOLOR 10ăLOCATE 25, 3: PRINT "N"; : LOCATE 25, 8: PRINT "O";ăLOCATE 25, 14: PRINT "S"; : LOCATE 25, 20: PRINT "R";ăLOCATE 25, 28: PRINT "C"; : LOCATE 25, 38: PRINT "V";ăLOCATE 25, 45: PRINT "P"; : LOCATE 25, 55: PRINT "L";ăLOCATE 25, 59: PRINT "D"; : LOCATE 25, 64: PRINT "A";ăLOCATE 25, 73: PRINT "Q";ăCOLOR 4ăIF xdim1 <> ydim1 OR xdim2 <> ydim2 THEN COLOR 1: LOCATE 25, 20: PRINT "R"; : COLOR 2: PRINT "OTATE";ăLINE (475, 125)-(524, 174), 10, BăLINE (480, 130)-(519, 169), 10, B: PAINT (476, 126), 10, 10ăLINE (480, 130)-(519, 169), 4, BăLINE (485, 135)-(514, 164), 4, B: PAINT (481, 131), 4, 4ăLINE (475, 225)-(524, 274), 10, BăLINE (480, 230)-(519, 269), 10, B: PAINT (476, 226), 10, 10ăLINE (480, 230)-(519, 269), 4, BăLINE (485, 235)-(514, 264), 4, B: PAINT (481, 231), 4, 4ăLINE (75, 175)-(124, 224), 10, BăLINE (80, 180)-(119, 219), 10, B: PAINT (76, 176), 10, 10ăLINE (80, 180)-(119, 219), 4, BăLINE (85, 185)-(114, 214), 4, B: PAINT (81, 186), 4, 4ăăEND SUBăăSUB SCROLLăăLOCATE 23, 30: PRINT "PRESS ESC WHEN DONE"ăDOă   xmove = 0: ymove = 0ă   DOă      sel$ = INKEY$ă      SELECT CASE sel$ă         CASE CHR$(0) + CHR$(72)ă            ymove = -10ă         CASE CHR$(0) + CHR$(80)ă            ymove = 10ă         CASE CHR$(0) + CHR$(75)ă            xmove = -10ă         CASE CHR$(0) + CHR$(77)ă            xmove = 10ă         CASE CHR$(27)ă         CASE ELSEă            sel$ = ""ă      END SELECTă      PCOPY 1, 0ă   LOOP UNTIL sel$ <> ""ă   IF sel$ = CHR$(27) THEN EXIT DOă   x = 210 + xdim1 * 10: y = 100 + ydim1 * 10ă   FOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă      pcol(num) = POINT(x + 2, y + 2)ă      LINE (x + 2, y + 2)-(x + 8, y + 8), 0, BFă      PSET (x / 10 + 469, y / 10 + 230), 0ă      x = x + 10: IF x = 220 + xdim2 * 10 THEN y = y + 10: x = 210 + xdim1 * 10ă   NEXTă   x = 210 + xdim1 * 10: y = 100 + ydim1 * 10ă   FOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă      IF x + xmove >= 210 + xdim1 * 10 AND x + xmove <= 210 + xdim2 * 10 AND y + ymove >= 100 + ydim1 * 10 AND y + ymove <= 100 + ydim2 * 10 THENă         LINE (x + 2 + xmove, y + 2 + ymove)-(x + 8 + xmove, y + 8 + ymove), pcol(num), BFă         PSET (x / 10 + 469 + xmove / 10, y / 10 + 230 + ymove / 10), pcol(num)ă      END IFă      x = x + 10: IF x = 220 + xdim2 * 10 THEN x = 210 + xdim1 * 10: y = y + 10ă   NEXTăLOOPăLOCATE 23, 30: PRINT STRING$(24, " ")ăăEND SUBăăSUB SPRAYăăDOă   LOCATE 23, 37: PRINT STRING$(20, " ")ă   IF intense < 11 THEN text$ = "0#"ă   IF intense > 10 THEN text$ = "##"ă   LOCATE 23, 37: PRINT "SOFT: "; : PRINT USING text$; intense - 1ă   sel$ = INKEY$ă   SELECT CASE sel$ă      CASE CHR$(0) + CHR$(72)ă         intense = intense + 1: IF intense > 21 THEN intense = 21ă      CASE CHR$(0) + CHR$(80)ă         intense = intense - 1: IF intense < 2 THEN intense = 2ă      CASE CHR$(27)ă         LOCATE 23, 37: PRINT STRING$(20, " ")ă         EXIT SUBă   END SELECTă   PCOPY 1, 0ăLOOP UNTIL sel$ = CHR$(13)ăLOCATE 23, 37: PRINT STRING$(20, " ")ăx = 210 + xdim1 * 10: y = 100 + ydim1 * 10ăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   pcol(num) = POINT(x + 2, y + 2)ă   x = x + 10: IF x = 220 + xdim2 * 10 THEN x = 210 + xdim1 * 10: y = y + 10ăNEXTăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   rnum = INT(RND * intense)ă   IF rnum = 0 THEN pcol(num) = colăNEXTăx = 210 + xdim1 * 10: y = 100 + ydim1 * 10ăFOR num = 1 TO (xdim2 - xdim1 + 1) * (ydim2 - ydim1 + 1)ă   LINE (x + 2, y + 2)-(x + 8, y + 8), pcol(num), BFă   PSET (x / 10 + 469, y / 10 + 230), pcol(num)ă   x = x + 10: IF x = 220 + xdim2 * 10 THEN x = 210 + xdim1 * 10: y = y + 10ăNEXTăăEND SUBăDmitry Brant                   GRAYSCALE JPEG VIEWER          dmitrybrant24@hotmail.com      06-07-99 (09:16)       QB, QBasic, PDS        256  16841    JPEG13.BAS  ' The QBasic JPEG Viewer, views JPEG in greyscaleăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JPEG13.ZIP",4^6:Z&=12327:?STRING$(50,177);ăU"%up()%9%%%R-%T_]1K#&/^,b(%%%U,%%%/%I%%A4M03<4LSCGCATzr>]Uk16O0IăU"N/bL*2%nd]GBSv_'jA=%L=Wesa#mIvK='lF1lMzdNLiB$E64nUE2D2pBA?qW\HcăU"nIFuZrgcM\L2DgY=W<&/\HU:e;U_oj3GZPqHEoxnnaD,qAQX%M]0QF+f2MdSDVoăU"fr(-Nb0$wMRW3x#/1zWThA]^]IuloPG:lz-NCO>J,Kw)$E4R<J4&\[mTWY$1VdsăU"8/&>r9o2(i5K^,j=-k1jo,iD&22\[4U5;_w2,pNPn>==c;rjC&Alm%v:5B_'.HiăU",lGlu<Izc6Qd,->-JElL[kdGutp(6j*ZCJ*X(kFk^9^.5dXxmn/mmf+4FsSi#E.ăU"572RiwwVKA;/B?sj3lF2[:%=6KdCev[Gn)-0.#(Ig&A0O(L3ik>>08Vx5ji>']0ăU"A1%$i>$?k]pNY:HT67qTWOHcez8HFK--c2.YZ=*4x3I+juEa[AK$24oihMgC>g5ăU"1*q5tqNf:W7^lFh]Q$lZr['c1=V\=n59'^#]M4h[//0)*]hRXjOR5kbQd7&DuO*ăU"'sOJo5#p(zpyR1gm#*.Zi>zfM'1_Bh=5zEhj'MJ6r#z;;>iwtgeI9jviS>H07b)ăU"l:>:rEXJLXV(:c\SiwJS'l^&y>SCtuH,768InT5fl'R)UAaMsdlU>DeI]TaTP,DăU"-Alh8L]BWPoY\&Q7ZuKv^g\l.Oh%mxIVB6#QAPvao2Jciu]Vtxl;hrQ%e^lQ8o>ăU"j-U4e<\:5&C_:q/1If5-e=$R5'rDX>nl5o?dn;#VN1fll-[JkpPHE,9TTp4IAyhăU"P]#ma-Y[dDoh0^HJBsfbY<Ey$Jo+\p5c1wxVJ3)RY&(*yk.d.7J&&UnbItQKLD-ăU"K$'ulN[D3VOvvd,V*b=,#+WoX7>Sma-^IuK[emK%RJe;EtoGb\WB#Yc.%Vi>I;WăU"[Fm&D2dG+42D,e6CfrML0laXZLoh&huOW,o1AfScM5KEU'DVH?NWyxaqd4Zt5w&ăU"Mw'+T^Ce,L*<DqZ0I3_$62]h$OY+x<[#a'*(P0,\cFXTO\=42HfCJOR4\%)&^G$ăU"-m85/:0'\AHK+yAf1JcG?mqHR_)*Q)M=zi*'5jK'/+8SeETU8Nq/d3*^4FSta&găU"u]A&\gqjnK+#6<jhH$:RJfXJCDrt</MrR^(&H4t'=7L3Vk$)iIkp7=rv,'u(u%păU"()9%%%%-d%\>vXCss.&O(;%(%Y;%%%-%%L%A>BJ4S9?V6lO4e'8-U4\i\?#N7h1ăU"CmFMtLYY]gd1A[J.mm\5LkRqw)SC/q&I1[?]B6/;Im*PPf-mVi[lgojNoN.F35HăU"-acHlbhQGhFlWdKGHP#GnxgdZOD%Ubhb%%5-%a%x39;n(9B%%bBB2W]eC%)'VUBăU"IXWB'+UXVXVl)Br)Aklp/+^$&Te)jB^J)T&4jE5$Bjw+KP:cd\d*IM'-y:Z3^dcăU":$x,)Au999Eu=EF;-;&M)R6wuN*Gns%%#bE8')q297+u*&PxRONAI%'N]pn0u9HăU"%wP.eO9?&)_5bm(HLX>U?D%%OEZZ%:2ZRmR2FXWcb8D%%2#RW4_;<._3SH4mQ^xăU"RVW.Wn-i0'^0;_3ULy]StHG9AMDTjV/&q+gIwo)(-^?rzFZn$F;pIs+AUUXss^CăU";KZCSrphZzj4+,SdE%UM]IsYe>DkwagQh&#8bp>h(,r+B)>K17K8g>P'wl/7p*kăU"x2TMWsp4V?UTPd%U][s;hguWRZbl<M8H4DM<L2Bud#w:uZJH\YbL,N&,e%ZZi8lăU"NYC*vD=vJIuWLOwDg&xQxM</rpI:wo2*8\%^*s#-PjkKBcSu;NDCVWMh3gPlUMrăU"[+qZCX=M9upttcRxBelrxfeqN/xd&i&Ux4(x-C%Z#e,6)8Y3L_Bdq>&?k_mDDavăU"Ree[c/oVMP\2d54S3zAwFhDCOTAnZz\d?Yo3)3IJdt0JD/]S+Y-DUhhlgbd)encăU"0j<)m$wPD&MKV^;Pg5Ln7)^z/[W02)HWhjv:QR7kj>0*AwaNjP,<Il[.pjWadB4ăU"IHlfp8\Lfj1[$?5c*.97T/>i%buco-uRA*2)=hvt&>b\^tiGr,C9v8$DMcPG2a?ăU"d1tgF^RTNR'Xl$j(Qfmx%Pc*UL0h;Wt8_Qp1C/L6X'9swO-&>ZHIy7IqN4yJEXhăU"+WLb'CYg22eIhI1[v9XzH4A]XZl=3W?xN__kbvmq4)kc^_\LUWsVK/z*-S4Fe4aăU"ks=juCMy'eYtq_yh?L5F*$R/^0QbumZR#DShryJ8),]yXu&>('M'g,JMHG=TK3zăU"=wJtc0VN_Bfl&D'kRiN%g+2V#VHU<1=9.6-u+D9i(wHDGoOo4(v_d*/y?rfUF4&ăU"tJb%Q6jAkJfH=;j?dx8OF2%VXG^%1VL0&5?uI4hfsO,>h;;)K?AaU<*Q)Az&xN)ăU"ff&DXq$'%Fhrj[CVWa$']J;O(,,?-.?Q9NSIKvX-;IUY,D_]/-1+i2zPCIMT/W,ăU":OA'1&:xQ:U)TI8DJN.iYt03^WAcLfasRS9*HG'XkcyIB'wdKBD2cmWF8_RGRNyăU"ft'Kp*X)mNtc+<Jjqg_#u8tE2tD7:\O+22R7DNxYq<pWWr7fHx<bLv48eO^L0)=ăU"b;=#DcA4*_aMf(X3&35>#(ZT;0^'EFN.d4<xM\nk>3PHZ.tc;C*+-HH=.Snyub]ăU":Vi\okW1vZcuF2Dp/,%RX#L.;JVN=+P$uOI7HW8eS/>.3oyxt:K9=>M=MrOttpfăU"tu?\,F-;lO:m\yx/$&L2'GrfZQFAE5G?<p:&e6?<On>Tp^3HSyGtXHd/Xoo%U^:ăU"^l]=:W_h<r;?_?=6RdpA/[FfnAKFhm:$v=R)-8#.L/vPxdzxtI0HGXu^=PZq:&>ăU"b\(Psbb4LLK4hihD*;(y\NSA.VWwJdJ>i+<g0No+7QGLnEohb#p_lO&U+=h'T:]ăU"kjsY<c5>v:QBW57Vun4P^FlGeuVCqWf>uG\m1;t.ss)b>#ASKbCLYsPeV768rfkăU":il'q<wph\3RX%.YNDaXIpl+g1,4HV$;L$iVLkri;A,Zd06d*^2:?dCia#^[]N[ăU"tnhqLW]\:_=>6W(E6g:y7t8%W?dUjb#,^#>Ms??4osm2&Fh_#O&U+2>etd;[->TăU"..M9uk$^Lo[K#17o3Sb/Olns[p3Y(^t#DPWFYE=xTx1m.uBl7Mc>ue2_r7V:KBXăU"E>LT77dy(bXQ0Aad80AuSlDE2%UDh%[$2t=W$WbQq(DN*QTqe7AhLNlK1)N3l.LăU"KPF*TUW&v?[fi=rLOD:q,4YsuFj$k=o7H&(0A-+ErhL#K%KI+zB1a_wo6eP[f=TăU"JPfI_]GB4>^/..6g#t\K\2:r/ue<'Mj5CaAf;pMMzjYLFImysB_<+7fp)f%fq5CăU"N)2#yVMqfs<Cj#&^$(=b>lXV'&gj%:M2ap>Yi)#44+l5JcUYJ0VVpE:8<Uoe$NPăU"_]nULCD#/8K2zr-5W5M+A_pqcv&L\,:VG_87iihCUg8awKiQPCKd^U$,S\,UD/IăU"o,Si.%>B1fV.?>+_1=BwE:EC=]I:U[nZ3B1J0HoA^dIjrjVT3\N#_&EVM87mK>>ăU"dPZ6&(.fqZ?j<tDvxhO]*3#AUU4R9VT0$]f7-YGRQsH<OE-N=Plo9alra&h[)nlăU"]n#hCZ_m0[2#BqGI$2'HS-qad7;'0l*9EVfWbd6)ql>7Qo^=YFcp^=o8k_=$41măU"%<$6^Y-\C*t/\:ska$l0uDl\%zkH.60fdB48fEF/U*C$.PW-Kg&XAvNXXTf3FRDăU"oMORvDamlnllH#F,vIY0C7gI8=65pk08+VTnCjI&J<D6%MHN6Cfr6D_/IWfFw5eăU"),Vl0^$'e8,<pY^J#Tu*6c_f5Etf?#a;LHRO^3*LaJVi[93?:Lb_uW(0)%^^.XDăU"NRQ1+W)rfpp_c6HETApJXd<(wiajHT#HH8?Q\:T4GxZJgO/1[.ZM*C6IQ?Jj+(.ăU"s&cDY=/[*Pf?yAb/7bUV?)s3VaRBScZWYW-.remDc0>cTSK*pe%y1>WIL1<*GebăU"lktaZW2QA%$BB'Hw%(%dPZrqN/RU]Q)DF?unn5JU%3Qk*'RP?.g;(kc$ia6aY,<ăU"4QDp;]k'hV,=(,eh:qHxsJP,qDZGg/k*jXXFebS,cvkO?SA:eHrz52W=pTH5t(9ăU"'&zIjb-(Pk^-^1[.>+Hr?7Qu&ajT$V?f1>DZl7<<mmB#R:TzNw0Mz4Asa9.srbpăU"A'ZWEPZG%%?d5w,^jdfkMt>I+BjDrCQ>Vn1:Q-K\\K&Q&_*)VSwV%&\e>(z5:V4ăU"SF6dM'kS,BiHFe[D6Cf_d2OgE')gMap*2n).xuEHT-uHu_ipR^_gB1ZWqRI8zY2ăU"FZZ)3DPI:l\?k5$jHw5qeo4mXY2\Qy%,<W9hs3V)c__Y<iUyD,adB6,NJ;=B[kwăU"50(fK.a:dtYL7(\5RI<'5l'sAm&bH'ZGE,,w?pBnNJ#Q3lf6UE]=lLrCc=owz2năU"k]X)XYhqj'Q/)(3]TcX)iCAUq>#<_X'h4>ZnnzqYlBukr>UpmJYfEb]=t/a;EUqăU"0QRu7_DXzeNYb9h=ss5tE>eYRIZ_7<9Wp%/jQKm\$8W0F^'8Wj'*s^?]0b&g=8răU"p9$addS=XP)l/.SRC=OQ?[EMQsX+Z;+L\sM5:#_2EGh0pAw/ZB,riud&Eb2fOkXăU"U$:yHa9uf+8Jdz,*3.e[SLu;tZjH/>Tgcn^o_2\7<Xiv$o6E+'cRzve;YW5b\LyăU">JR3Gd:4[_v0(0UaKG<j,Sl&G'_ME>u^zn(5bu,_kIofNS'2]Taxflug$_i)d/oăU"Tt97/$LS;ZkI5(<>)\g6s\7vh2.(KDs%BHQ/;]xCgRzFag4ll,nW\F>M$M)9Uc%ăU"i,72x3Y(kLX$^Sw*i%aq%r;F*3XR?i<ZIZ5ZIDDvSR$VNaB8rCOQ?t/u$<_I0KrăU"#]^Y(LMs/n#Il4h9PqQtk*RtG55[,:Gmcf1KLfmUXFb/\,MGMgLGHVI[eT0Z'e=ăU"suBH%UKFp[JO&syAEZu55pH1RrVnO^r3KAdoe&PVm7Y)k^WbJa>OBf[<>j\_iaKăU";gRYya\pp0?NHB[nxtBsPGQJD(C\L.w\gWQ[P:FS].AZ82tTfd*gxZ0ML)Z_JaeăU"jyU2XUPS,#n0+R1-vZ#TcKLUaAhR1.2_8Ztnk$U$L(mMG1%<58XG#'oayxVhXWiăU">W:d1aOS2h/zpmp+ocqIhKu3+<gr9)JYOo25bJ=\BSZ(<,/*2KoL'2i[1Nd._A/ăU"/)0X%845(JZ2%y[s;iFW*'4^()WcRla&VT8\'ZU,jA4J/F^Ehfw%GDbn+JVTIA)ăU"k/qy:$bP-OKmLobUc^c8k?wr&x'^b\QYYbruCT)%*i'HG^./aw?/2G/apVf3[5uăU"K$)akQ1fh:GAFmwRgJY)+h9nHw<WpBGd'Dv)HU-w*B#Jl_$a^vQdeIzHYb:ge]]ăU"HXR]&VJYTsH.Db+EYZTltHai'=\\SLmdMs/ZXHne]MI'?U];mMGq/KuPs9)uMMjăU"HAY\/jZ16EMA&>osk'(rsu/%uH^+FTFRsijZqa[D2iq)*:I9vE?2uRjhvO?5Lr[ăU"cG;Vk$Qx/neiX'2eiWM):n'jt&1?d.tPHes:MHFefQsks[m^Cmu?P35N'(Te5c7ăU",><B6P9=Lpn_W:UbKh>9Hp;\ZbB:>$qDfqnz;u?TKQKrDhQ\ezOp2hnfJJ:)BeGăU"ZB8>u]6#gljAQ(t$eDm#%f'TKD93Q.#<_M?(i-fc58a\9N3ULR4&/ai=qXF5kv3ăU"NvK5eq6R'TDgvLgZ8.Ka.K45T'>holMn:l,UY'_Vqfm*2-&Gi]M=onyimW#_W.;ăU"_rL&dLKf?6hc:g5(Z;bmj+c4aWcF/ldz<fjEmfq(/t^j:'*'pt#8;e+F>X+YL;%ăU"AX?v\M0;x:AQhfbZ_OCbR[)HG#rK7%5qrG$Xr$k+C?jgEF.F\n(s8.4I\&1Q/=TăU"KCT#=LecF9FSi_R'OMY)ZrqTBT=^u'X+w^YJZMsGo;>Md4e/\x*oCtW>Xz,R#BLăU"+6dU\L2v($bg]cM4>tmM&nWjZZ1Xuw:mL3,rgw8z^m:)Th41T'_HW1k&GX9x%+=ăU"uTdNO#8S'6dtGIr,P%XkFsDa=,VY.Zjgh_xSad=n&[/9=p-4ktU[DaLdh=quo.<ăU"FFOFNuq,>vhYXQjIFG%Z_#+Zr,TeXrgF)EQ(j\)>c(<,tcfJ9M0BO]SQXS2y/M;ăU"W?ZlCs1rE'1]>HG8BS$>R[K:VNWwC3O'=RNI;;xgh3k03)w.zurq.7LBM'a$E,;ăU"Mt/=AJ5_SSVFMOE.mm\DWTwAPfXT;#:W,J(Dq9pZ.myUYTdhzuuN<3m&d(_X',jăU"gDAALVMtp9lor_wOD>6oLvn3v>:SLNlL$&B.S_Yk7\bEU-Zl5bL.g>3_,qh+u=ZăU"Bufz?HcwyIYDN&Hi=.4O&txP>ce<h(6ZD2x]#(;RuUd8&Aw2OsIOX'MKr]MSo1WăU"JYj-Dt]ov9JA>aVb_7wJ],sG$a.8n<.b4C=/eP/a&X01kuyp#Ph,d.s%kZ]\mCCăU"0pq*MOyE5;Yw\gn=X&jHLEp>9M-Dm0*E>L;;^YoUIadFJ,gA>QZdocBNIYa]xmhăU"S3rj6t_r.5v+qE;_7F2bR5p;r64pVPS.1zxxkKLuK4e+fQ\#vz]aLfgf3g;nsUmăU")q+.NK_R,dm>hcLK#QJA(zkba%X.Q_f2n6m>IZ>Sd>=dY0GqSl45xSzk(l-fwUoăU"ODu71PeX'pHNJV<7jHY;X>3+iHxoDH&ExxV1K-.eMH8#b2DPE:>UHn409EHp<_,ăU"lRchjrtJvcMYFALv0[Q]u,N'e[uPX'C)EeML2ni,-U02Wu5T(MDeW<&\7f._r$XăU"&rNFV'\%x.u$e?AaRjX-XBBj-9w%_.CzPl1Bv-G]gf((1KMGBn8q&EY+$[win:XăU"tqAlo5R1vYaA^iBz%UztEuqvW'11Q-mcjp%xHoaP/DW<W;Jqp['/oZLe%lQhl+-ăU"]Q_s0X.J.1uP+0?8aZQ1<zD:Wn)Sgb1lRGI&=i4oVV4]2yvU#vr9z\Sb%&Y%+<văU"\#FsKK\Lq2nAxoNMT3sF^_^y:,y>p<>LZ/l9MF5?ZI1vVdQw_mqh%qL.sy:?4t<ăU"Mxu,^rtuGn(\SJ)[l[o8tI7#VpTo$H[<#wJ,w=k1sdMU<mmax5wsiGnbhtV#Zk$ăU"NyvB#fO]dP_0HV\^Df;mKh0&N,-UUP7:,iu&#'MT&S,j0Dlv#4?1ZW_]YIO1V_TăU"Aq\+>Xe/PGM][c>km^FH[Wa4(RW?16&IgH6QYW-BTS4s/X)zlaOPuDW7ZAlkbp2ăU"%FB<9TKV=<Z:Whr2duU,)??rpq2>UCZn2-$3Ll&I^H^l25dT-F+BQU;q58&9%c#ăU"<5T-2jIUZ7b*LG-27/<kjo[hEK,%TuZNl?8D^j1mIjEXDZ#GCYf7AF16BD]eNxDăU"r*4_KJw7v</MrXQU,,XaQT6a9Uq#fkThPp-63IIquoDTab6Do>Y91,ZfnNFRB-BăU"keLDqQX>0Dh6Wsk=G^91cQX]2N1vg&=HWgEM7cDI<0^96EDWU;A6)r&rZ.ynZ,căU":-njw[<m,Upm*F36F[7:SHh)NKE1U;]i)g9dawoA4S]1xQm.;qI592zb6Z0y9P+ăU"vkmSZ8ax2yF#E.d]b_dbH&NTS03\/AT=99>z1t,yH<ZN6^K7KkrZV_dozJ9x07=ăU"]8h$\;MBWW.d2GE>#Wry^$B,BiOA(X,I)oq6#%QJqmGt5Z?1h2De/+W;.LKdWBBăU"Z7+I??j2K62$^ZFxfqEU=uiL=?$\e3h\GUf#Zpkav%tO#(]SbTc45agr#YcWjY?ăU"kJu51b^SW35vv_=<'I]t4d?>E6e^+V'bwq\v7X37fFI'T<SBCm?s:t29gdb3$GgăU"YO;*&Fa/;Pj[Q.\J37[1n_1Tv%Xq#ha#wGn.MkMjO=x6oPI$<:L+=HK_gC+Rq\aăU"dGohnK1kSNBaq?e8'a)]11\]n'ZsC]ocXEhq,1>$W9B[IER.k:>kUGeK#vZ6m,AăU"Gx+Qfea/BoisH'+*e6^<-0bg2qqzUk=d.o5*UV_(01>Sz+z]M$[O)98&[==HDjoăU"i(LfgPH^[p&we+frEr\RHUeZnrp/lr;v\LV['GG7jEe%sSnVltT5uG,XPmjqms7ăU"yPfq:5>O5-HM6u6n:^&^l&1?T#1h]MW?8MCVt(?XGErT,<BJ76MCW$&1%Zvf]:\ăU"\Z7?:S/LugIA-SS8gZXaY.pO]XbZQ;l7.Na*Zp>CmpSNxtkY0NXTt$8eV%N&?umăU"9H-ZDdfo)1'S'QCcKb(Y=D7i:3vmIN.Don_[.6k2Tar)y:*&,TX1I15j]*K*O*CăU"]KZUBZcQh9BjnCRk9>#><-P/=/)h6s0h%9fG$*]8c06_&bGd_D:#vg:O*)*+G?FăU"Ykq9#U)13ra2N]+d(jt#)+$1(j$6HmN%%up()%9%%%%-%/)02K(&0>q.:#%%s-%ăU"%%/%#%%o?)46VXLS10BTfatBoSmK8u4Cx<%9n1I0Q+[DV0bUVsf/R.K:&a*M><,ăU"d,O*v1C7nI;W,NvDBpaYItOfVU6gWdjMQthM%rtttfHqZu;^fONZtciJZg,Za$.ăU"5saXTR*>?4Z_kaCwr;q?-XV7Bx>5$DFKDj^p6/=Dg1AVp[39HfxK-j],lb6GAj.ăU"1/RX8u)2hVlqo[:uf.Hr?6flBooJYmgY,eQ8?6+#<$],>J6Hn^;l_VtH1(CO13oăU"]<nOjmYA.]&;B#4g5r42_2oLJtjWkcVX3?+Jc3tK;,]G-%ft_.R=a+c&$'g35$XăU"&'=jeTCjR*0k^Xk_j]H'1#+JM5^Pxl\2?dfFh6_3u5zl7D),h5M#LI6M75pY>:?ăU"-kXFvUJU;TK4_>%%n/Ujg'j;6-D[3=J=SXBu&[b2akK7B?[A#)f\1^$Q)EQA#[găU"p'[T#k/jj4R_,L.n]h$HR^AK^1vkNS[)hj^:7;0hA>&4O\KAj5hh653I#%eSBBhăU"\S8'/4BYD2*0$U$bq\_V\Pz<cj3_K]_+RS2puZ9Y=oRQZLa?=+S_#mHZhr0[4=măU"jbuDc)C^Caa_(HJ&/3KTo.7CUP0k()gHIbd3BqJCD#WTB$PRtBpUO:GkuX\nu1kăU"XQ0x&-$xC#%ZuRraCI=9Q._x8J.UBAff0e6:AmopBB&[&J,_+BE._^'R6=Ublk5ăU"C^/497c384U*IsIz9:*Q(u2l>E2#<F)E9&j5VVphO3ZAt3.JD?+oYC0#=yU,?K&ăU"0:6QilO92xn5CZQ/\12>_46AYW/8uV=1xi^''i'=3uc&7Smb1:i%GaG-X,h>_BDăU"D9m\I.;F-S(g_.Yn,e?(jpepuku=e^=\>F2L+&mYfRlaDW.6*e[5f.p%ukY%1AHăU"mdd+BSIMB1OQ[=f-WhO\Lt%C$r0Vrj=pBPbMU502?lgY_gfidU+t<W[e*JI4$T*ăU"M/9hERTpQj+TP'+4It&fM1mghG_7iK$*Gp#C,>P5(:##67xu%HvbS5EQ5*I<ktLăU"Ac-4BOf[H>EBXmuJ8(M+kAnZ_&IJ[(T-L\H3>mcQ.[(eARA0KyV(dS%'X5>1WO(ăU"(FI]E/pekXJ_7kLuu(F#u?e0XI?s_HGanXk0%?0#lpLrSC/1*7=Z2&Xjf,T=;p\ăU"D34h%2aeW+rVX;jtwbjdHE/%JmiDQYM4QGZ#q=GuDP1?<SF+OxiN*PQc15Q(sKTăU"ho;&&w8N3I:4cfjW]fd-n%3';r*g\/S(d%^EUuP%I[P*I.7C.XC:E0i(%6)P8%6ăU":g<L95*t;#Qs%WjZ/N:n0X13Q-Q^BeMXObYe>(K-Y:u2r*1E((B&qzsUA:*j1JfăU"rIUs#?2QvaH?6$V,JU=#A1Y)0cD#=Kpm%,(t==q6X[3L'3k>H/k=0'+UKk&%qt.ăU"iJJd*V[_-)b#mAqSWrsY:uxM2tk\)(We]</VU4kaAh-9>5BK_mne^HEGI:lY&sTăU"+mLrz;u_&shZ0&d%Sd8gA'S+1KBP>ZP-#]]RnP>;W42wOZmH4lOxNb2Vmaak'4\ăU"Ube60a[Gi3e[V:MH=YuWImT+$TFns1FgK>*[\Tw>QF)Z\;ca397VI]=%Li<Hu=răU"%=4=es_p-,phc4mW.R(;0C-T<Mr)d%5cca*kvgCav&L$^EUPNp0M,E1+,%NjVsZăU",Icw[8^d.zHXE%OBVi'\h]=?6*>50LD-)2(XHdWstP%RN.sbQXTqN4aS&T-3LRnăU">Up_2$8d6/3'(Hu91+OeaZP;p:/6r)HWX3U7FS081'3SS&h/(hvrFuiTJl*5WqUăU"X)q=A:JEv?L6Ds%Y6FgH$0VRTHUa'lu&,6_m6[P-I/>*pVcxa9bB\)i**loj_DuăU"-6mTf>(Z%o-aJ]*#ctR[baB_?Gj&AIrC(H$M1d&xO)9__YF^%d6jHQ+SpVD&vPVăU"D$Is]^w]U^'DK-MWn.khj9,0g<mM,h>oTaY#:x1a<rGoLeNfERz&>d&1/lp&91?ăU"M_asl]5PYt<g-V-PRE:qc9^x.IAnpz,98,Hz9qyYsH:NoX]kwr<'hhn2?CpYxGTăU"4/cjM5RKYYsKPK?dSaU(wRVfs?Ko-Y'/JC:wvCZO9ae7Agb&ZMf<v1+FJuXwNqxăU"=_V+hdM$OH=cUNY95SLRU^SHP9'd=SLqSMXa]>A+%G)QG/a0EP'<.=ndL1n:tSRăU"YEfc-Vb&%q5Qaf)/tom6E0^zU=%_T^Da-jIeIT]OK2Kxw]a,<,oyZT0%n9QPb_$ăU"jpep1jOykau9ss,*:0n';<WGD2Di/NhB'l347m=K.u+,PX4K?3GOiMkcCQJnj%wăU"2+bIVv1yTbnBtia*<$Ld^8\v16KW?kYGg15MnB(Sx3Nm=.RNTe?7Y^j;aUYc+<făU"Yid^x;>2Bc(Ik%DRlxqC'70i1h/ZTU0=)>)rcNNFcAIe\=w4l0I<hsy%(t#BzmYăU"(twl%#IBFZk,rx$$VaP*G0B3<D/Azs%IGt7idF4:>7'YKJZ$AI9x)fZZ=aomGSnăU"v1'>$_0#fi#$1WW&qBhsbR$08AC&hp;+okLa-,sm)bRjb?0gd9'mZenA)T0PnCXăU"DaSGeRGI>IB/i'uW$Z;s<S0$5BXjh8o(\0WJTVh)3b0?qg%3<I5+j'6ExG'^W2^ăU"mVyNDL5w/+/pY8BT&Re1;$w1\b#CK3))&BS,P<)gU%&rz)$BA62d0GfTTU-r;G-ăU"R7=(-fj6o)/qc]2D-AB%Fg6EUUnzEGAd;>=Q1D2_rm'VqvOOW6Q9u.if'CA/jbqăU"Z^9mjY66PTJAv7.^7<sq*aELlLH.dlfQU1##$^r.^/+[VS5INT'v2ke,^X^&WGmăU"(S?Y^n]V]j90qz_sOo2*d,A5()cOUQ-I.[a+i3t0F.(Fe08Klw=U1Rh\\qp'O]dăU"1'd#:-oLBqJ0)dN1rXX_(LW_)7e8;UM)+%dTd>0L)IL\RkGiz*$P4KK)sApGFRdăU"#Cfgey1aUCk/ZsT:',qi7(fd+lf1b?3:gm0/(l]]VS<J#4HOwnA]tIcfidLcq#[ăU"o?wgFO7FP8guw0F9WB*=;ovevwqimd*>XWY&=]g,(8I3<a2)OY'l$$<#\WVk&?QăU"u_Q27/U$2hAyeqO'(5%OH^F$U$9j#+'v=R<\DRop%%xDwl&,t5ZTUa(Tvf06f*iăU"+3Q2J7]09vUg?Z&'UWT#5<+2V[w%xVb$2]d5i<N>ULi?2WlIP,q[\Q9Q;qgu+(:ăU"007n#YAFZ/Y9?v9MiaJ*bczatc03#+5dxPu1H#Ju9<Rr1#OyKf;AL)C<n0#gdfpăU"7LoszG/ty?yV,3*wYX_)>i?;WLAbwFImqhoCqMeirV.I$[IdvED0ts:t>,X.:&$ăU"f=1C4qktD4sU[a?sB>B;PxcdyUrc#Ecdwg>#UcO.5a\J+N)u,';oDUv$M_%66bGăU"WTH0J4nJU>%iC/yqt),Ea5HN*e>M'eZj&m-P$dqA,P%95OR28*sxrIhRN,aqVIcăU"Fdbu2T#]B=pEdN9nA2tPWvn3:c2oXQQ(bZdh.M72*;Wf_<iGpw0AAt%)uGAk80aăU":%YiK2O+.;1=%X_ySTcBW5DS\&;ceSoMVjo;Xco(8$nQdQv)EH<=UW'(&gTLIN7ăU"[a)NT+:2#ttHEE.$h2_a+-qtsrK1KWp^UvMT22Og6Cc-VRU630b)+rr_%w3R[JiăU"G5.LTAQ(%y&p9sUg&1)]ouRG0/P8%.Xz<VB.*uc#Z7m$n<o<VGtSz392:QY;9,?ăU"rnQGB&crOi*VtIpl38;-<05M?#^/zq0;^2HMd[&TSXd)+q^V7<?h=ceWZxV0iYsăU">.bSBUt>NMw#u8TwxoD18j%,1d0lph7qA\L?M7HWukuEiFN[Ck&e:p6Ic.l8O]JăU"0o#CJ;_2h;zpEHrG7NNhvbKhVilqgm2u'D;4IfNot/.&_[dG=pXqe<CLEIQC>bZăU"rIJl;^L+dF^QdU'91mtY>LZdR<2Wz'E&]4rnh)E7,dpDe_Q-sF+1/jF*,s*O:/8ăU"7CAGiRGa3E'ekfi/fGskPYc_D?)wfERWECBSxLSsGaiI#,J((-c^HA^e/&5Gk'YăU"k#[0rE\L's=<'e2h+Cgo+=lAkq:k*RA3QVjBf=pf>34\ru:?E_Am000nEzH>9:wăU"t1V5tIdgcoe*S'j?*X=xCQe.js02YNVs2R#3mETZ_'O6H1;Vm4(_?I]k^GL3BIGăU"gq7#[XMK-J&RhE&_IBNT)^U<Qs8.X;CSvDTMHK.](oN:lpN5=fOY;^-PlWv;RK%ăU"^duC#*mkoECq[gX8T1%X9mQR/GFsCjCi,42x[cFhO9A;G;nb/.(1:-%BUwz^8$oăU"YJKnGqX=puE0Z)M\be#)eX+<.S5rtcZn-'ArWFKYDq1)tN:y5dQ<Gq/rg74:pQmăEND SUBăSUB V2ăU"ee.KOfCyF=LbeJuQt3s)W7IG]nFusAh1lPnT4LJe/L3v:Z\%%aK.c%*6q-Bt/x/ăU"A<YNd%Dgy[E_UO1x-b=Kj4*oQNae\Db%_n[P3cP%d+<Vv?9BenfTTifs#+t#=EUăU"eU6jJkG6sN62O$d(/8QreyRFMk9dB><0=NUoU*umLe<k*i)\,q-4qd-c\su^jn(ăU"^-v7)a6bsTLR9#.ISy7mtV*(f1#zypvCR8gzO=.a[8Mr&\RqS&;FS&9f0]NYn8wăU"^u8IzMvw<hq>zL8qpQF=4dqTD](3V;8K9usxlcXQ=qdkZX*,]j-A(CZ-0zB,G8LăU"_+j_%2\+EQ&I61C_X*M&U[:og5eJ:\0H$v*l26Y*V.Dx/dZUM8/Z[2:JDvbLG-0ăU"WJ_eCs^b;/-aLZWrV4H*BpK>z$Y\FMxj+3nKZ'gJIH&[Jplj=:1o5Y>Ep'I/7j>ăU"W5Ae2%DFPKcqAq_DZ74[h2[40vgp/F\-xQ7J0qd5FQ=_Jm[xW98+wwuZX&>&V>yăU"-GXORjPQl5kWg=Kh'[JZikN=]QAz]5h*_,ykNHZcYHbHSz7j:+,IDo;(Jc%qadMăU"QtJ(dwSrco9OFVjiww5gIrfBvsw.\3D]aR9D2tM>3:<5=U0nf\=I9Fq:/4#YsKwăU"aW4c?kB53OI;cNWc>f6uD0,LELJkz$*kdqli<:gb/\&XO4ESJT$Hei;0Po^hEB'ăU"Bd&3J:&p=F^er:jjK+.7awp9rmc7PBtyka\c>E'Krt[nw'9:zcG#_raVSt\S6.uăU"..eS6_izaCG.P.ajCl[^ZVnrYiwho0[LxiL0RGQh#k-7Mih9)]1OVS6m:MFK01LăU"EZK,%bco2:F[3m%XqaA?Ubm+FRaop7EFg5?St2c1Vb8mM&5,1FWZTlgXso<LGVrăU"HWT\8r%NoRtfl/Bft3gZL%PB2eMZ5MpZdR]f1bbb_l\=3Adz/UK<50a%io,0?\=ăU"JFNXXuW5CN%8wiyNFTjhi1k>\[09ees\Ga>8Y6_T]Fb,;nHH0V$Qg*<P>>mIMk-ăU"PaZTe1Cq6:'uSt4ZP$83HHg2L>C)um\<)>TvS2&/sV>kcLq+Z9*.>$n>M\.R?UbăU"xf[59E:#]j7[M[A[K1%XRq3ha8wHgf<.Id'%>NO44v$]b9#pAF=T$[gJR(7m424ăU"ZD0Wnv\IBMpqf4oSW3=DaYyk0cEcLqy3p8xIWlUhSAb>4lO67lP^'ofpZNOcBcRăU"OG/H&,fuXS-fM)OX0k5CDKsCLJ?gDvXHTDD9yp*6?etJ<+-5:'S3y<li3I$X9YxăU"UIt/]XG'v=a$FZ.T*f/e0DK5=5U.]=<7Ki-/xkSi%#Qnw<CDoDLXHOg=bDCJYD<ăU"jXAtvH(QiRG-)<*_VFS,wsr4sCl8vC7=prx*Y+a#nLMi0(xUZe3sG)7i6s?sfU/ăU"hBML$d<BdVaKdBuoYuuP[*7;d:;[aMo'KsB4X'SZhN;eXSB0IV:[4T/>OAKnvoOăU"?f]Zg;DB812X[NTR;zw+9OfU66F<FT;/W>nf76\k9H>E;''?AL7W0bESig4Yb[_ăU"Z#r6VHC](L%Iir,J*3K:r>UK8v_pp[Yashf\unT3EnU/>z3Q?w[t)cBSm.5gYl*ăU"F6fQw17B6g5uVg[]\Hg43lbDJ_xPkvn78s)&g:dkosW/G%R-$P49K5JE%]l&Kc+ăU"1AkD$Z4.,lu9pEY7X3Ug\;CO=X%b,[F*?cSUeS)\i.1w>(LHIgxU$dxk2.qi1l)ăU"kX8g4O%X5:v7[yStKdT5$Ei:Rnbi_-WiQ>BB4VOAU+UlDRQU][3VhrgO*Ocn.R9ăU"W\.Ref%T8eT%cD:%h&E^BUE/OZgF/?1mIjjxdWvKf4h+]+LzH%UUN-1xPv#a$EEăU"yS?mbp6R+G/%X[%cjd.R)p</.ro,\3TbC($em;;)qEp(zhmg-km+OYO6<\j6oefăU"+zj-8PW;&)7AMxEfNJ-Ea,P/Anyq5T4TC_Edk74*',LNg(.A58,&pL0SSMZMPi[ăU"05Fa>xh4CdPH*SfmM6#aQO8D&EhmlTViFB3FtKgL]SN6QRL]iW?wu<ViQV?wbMAăU"G>7N0)TC]5vTy3'$uSv6obrNRAVB[C'f6XR_8j/4jL)Ke7vr=6G2IPFh<o+h9p-ăU"?EacAef$4K-O-n*li-?#]f;J9-\]mz:/Y(OdD%t(,gzwr$\wejJCkXDd^iv'q-măU"=Ed0nOZ_N-NXXn.G;N:60U&08)STs&ZDelp668qrfBH=QqLKZ8CXBNkJhJ_-EHwăU"^S-t6WEhoJdlT=hZ8Hfh9$*q(YDJ7NjQv9>Xt3[G7:dFJclwWkqO[X'Pw[0PZeuăU"273ByF3W+U*KofDXeJ^/Xx=M=,\pFetAutlHZ;isAcg/m:A>6^&>^d$f8gz*cR3ăU"m*#b(u9$y+0;?gfWIM^^OYiSRL/]b(mXh;bgRKsS,ud#YJsNmFS1K7Qw1f(i4,oăU"-R_j[,j)'\G>;H#-%^$8rcxMSvoKSvI=SwGScwESwoCSa;9#86J96c+xUP2w3L&ăU"O_L=:\L#Y(6FE<o9.oP\cVy(CZ4P,yQe#%?y44Dz#Qx[\%\5F_Bf=8,yb>8POCyăU"nK8<1.VV=1D[j-2F=<=i#=h(2%MV7([tL2033D5AW:XZ]ICSfZ+Fv#u%p&'9%%9ăU"%%[%-%T,_1K#E&^,b%(%%U%,%%/%%%%%%%%%&[%E%/&P%%%L%A4023<4S2CGCu%ăU"p&'9%%9%%%%-%\b>vCs3s.O(#;%%Y%;%%-%%%%%%%%%%[%E%/,P4(%L%A>BJ4S9ăU"?&6up&%'9%9%%%%-[%/)2^K(&>(q.:%.%s-%%%/%%%%%%%%%&%Ej%/P]%>%%o2?ăU"46VIXS10&Bup*%+%%%%%(%((%u%%(%:T%%%%%ăEND SUBăV2ăCLOSE:IF S=47AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDmitry Brant                   DISPLAY JPEGS IN TRUECOLOR     dmitrybrant24@hotmail.com      06-07-99 (09:16)       QB, QBasic, PDS        1618 107030   JPEGVIEW.BAS' JPEG Viewer for QB, displays Hicolor and Truecolor JPEG imagesăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JPEGVIEW.ZIP",4^6:Z&=80062:?STRING$(50,177);ăU"%up()%/%%%R%%%[8_A'Sb>(G$[%%G$%%%1%I%%D=M8E14#YXSI)8?up%()9%%%%ăU"-%5O/CABD]45(j>%%,3a%%%/%%%#zsn%%gjSjn'je5(2Gxj]SdaB7ntKIGsb,t[ăU"e.*SC)wy;\tGRQIj2Y)+gJe0Ly4(,WVdNaC9FR<.US_Abwd<+%acSDtzg+aP%&:ăU"wK4u)7&$Sof**Qg*McSRTL*;Pekkx>_gI8)3uten5rhJ6Pux3/q=$$UXWpKVBlHăU"ELHXq5(3CV#7z*+m95#n/3AI6gcshUjU0;QCTCmTHx[0h3/K'iYu.Ia,GPG9Yj/ăU"FB)&GaBQ15C.;*K7ebI/*u#'F3tOr\Pq=XS8?MvFfY2//_qUXV#qma?1RV_<%%<ăU"U(9A(?'$<OPR9A0q09iOi8&/7U'KI'6>FG]p/a<)&qF:))g(4[,q.eao'03uVXuăU"9P9#39.PdL(jP&>ON9X<929'&/;U&[uqK]$T*-RC&;)m+(_(\R(N9T8+gW%&M0QăU",8m'_($,Oa9[)I%V&b-^,0-(n&0h'>%_zP/YjL9l9ai9)aSOE]Ba+qAQ^(K-uCCăU"G.'F.u/ga,U3U1)+ig<A#YU9i.I%9u*Q/9535%.Q,m'%;(\'ZB9.*+.b%sg%VO0ăU";P\90<9AY.8o9100A,=).k(R&(2?.W0k(n&VJP0OVfPTP[?Wh0s2q.+Cgl%KE(wăU"uN+-51a+&U350Y%xu]8()MF:cBKGTsX,qTI7/Cgl2Ci=%wX('%(38o=18K16G./ăU"R\o,1cZzu9h)w195'u/8G51,/g-s'OoYwpFgV1;+(O(zJO6G7:uTs3&/MUX+6^KăU"yAwd&K99+9&#q%c^'(ud0.a3c%[8&(IG1%u>I?wpm#&1(iSaPMzJOLP1n/aiB0YăU"/D>9)5A&$3bOMaZ9'Y<M?A&9q%Q)F-9bO[C]c%agvJI()3(__o:MS#'Y(>F(8*%ăU"(%TYa8tgV%K5(7P$g$:c]8(:9%(e;U(1_q:896qA/G<G-oA+M9]R6:cj[Y>9CDPăU"<PPA9f),p/(_-Y\V:Wc49^DP&l&;w,9)SO,G[&yuD&8E%h%Bd&b?7E2r&7T'H%JăU"F'2O=]Y+*0n)m)_AP]YH+2gL^-G=A7+cBej^9b9G+91K8n3R%9h&('b=Y.Ysl9CăU"Ea/.81aW7gV.^3D&&-+k&2<2p,Z9D9C7E>qi7dh04Jg.'PHb9Y/C/_03U((9GLEăU"7kp04/C'C<OW/a.i]i+-)-M%*o%$%u)9'%X&PULB7WjbpT&M^&N&Wa(W&/C'>'jăU"5PPP2'9_E>#m%1OO;YPd++5&J.5AS_:&l9*/o1''%a3a'#Q'oP+7939(&Texa7căU"'eU%uJF+Gc)qL&AP;cY6)Ma2Q/5g.gPJ&O.=+mI(d[56a-)\y&T)C7G;w+)Wpf_ăU"I/PiFK)>GaBQ%%C(-)y7&T)7/G;w)/M*c(b497YG#Y6/#6u/c1%Eo-.M)5')%/_ăU"U^2g']+'Re;%UCU(&r&8U%1m+7.%(o*&Ge.)/Veme^L?&aa%G%XI&LO2996YU8?ăU"5q)'Q,Y&F293oa3q0iaCi3)^:G8QF153;+%O&T('-ep6XB_&'iQu..),rC.eL?&ăU".M(e%/^(^%DZOwo+))(j%eFU8])'oNaPSD1k&-MYF-)<w[*[(N7e*i=/?T?P#U&ăU"mtluC&-^,O+YF(YR/F();?.&pPl;O1Yc9Y;Yk&/YU=TI%VYb&-B9j\969_-/:YFăU"%g*u%%;E6G_AP)a6q#)L.wYH(jJ<U%.U'<NJ]>PjkY^9AN&pOaGY+94%-BBNSJOăU"#AO?]t?eIg'/-,m&K_&bOO)YkqLhJgC27n]fF])ELDU=C?OdI0hbp4['VUz3tnUăU"HxrutHXx(:N4Q>H%uL\4pDwqHivG[^do,at8Xfl_%k-.jd#a4AZ$IaW9\X^LScxăU"Y,AHViAn2b3LVvi9[y)q;P<9l$Aix</Z%E%n=2%VG'2Y)CptG+8V]sZ;kw2'01TăU"3HcR1sVi8PYdKTAr\DXXFYL]4[]9#,wYCk\+T?u$hdtNx0uVD62v8t6[Al\ch^^ăU"=rb^pAeNEst=AC]$OZrkRCCr>XDMgYj:8fDKiJ4htaKF?+'ex?nfC^gg*e)n9ZBăU"Sr+\Y<hZ^FAouQB-_\K_TscP=(rR*V/2rU;t#Ib<Nnnx8vMJA#zA>;v^tK)-1D4ăU"E64QjHY#7,J#A>M'4n88uha+i/#Nlpo'+9l)RFeaQ>k5&=DZf'G##4J5\:o3BPiăU"UsxYEiiYZ8SNu6r)$;Dpk'w<A2n5-w/[w)gM.Y((C7nk-+h6wn)e3mHpRB]+8T;ăU"P\FzgPX2#z%54-Zvi5A=3nBBdJDYJ2,DjrU(u54PFu,9oA-7J0K'[$a>s0&E(CfăU"<iQh\;W;ZeRAXeoT;ZBIK*YH'v0Tk%n8.<M&,o/A.Mb&a6Qm_So[X%'r0y5OlUBăU"HU/e2?JVv'_XEUH62Ha>Kc;vo5W,XpMY,*d*AfHnFKM6zd=A*'th,q)hI7^&ZMzăU"wNP+J7'w2,>Erf4#t'3uiS?Q[3yA_3U?[N3y#[,3XoO59O_Q$eneU=32*O:Oo>FăU"[&Rk?qu6J^hu;avZ*'WpiF:+Gp,F./MZl(z[2xnOAug?J.TCUGLaa<GT]S928)NăU"F-]^$W+a[RNLNvcxSaWFH+.eA)U.dih<(fr/E55LCO\:PCBPFZ$*,]#Y,8<./^$ăU"a:WV^/ij=4.7(/h#;n7Gkhx-&v%F*Jf:3Ma0N*MJ3G#FXpA>h8,#PdYT0FDZ+CNăU"l>WakiLDF,]CYz;u0lMKY\i\<hhCq?Eq1>[A3]pCD7nwoftnc3MN3rwUcsbyMpPăU"l/]AI3YYB?Nm<ty0:nP\3NKeMO)gf]GRDEY&vPE-7Jvpn7AS8al-lSlaqv8b;M-ăU")jAya,u4e.*BHi;;P:SyeSde.1NZAd(qX6xF:=V5_ya]E7x^[=Q^WtEhNB(QcNsăU"20n&AgWs:$w_-u'%L+?^-vjH8*8F679)Z,5IT4h[pXJVso^q&a'O%VRsRLx0c,%ăU"&Z>tnS(4Su.4GiLqhSe<'Z;&\)cRT#9N$d/ebsMW$o):m$l3w+FeR6u.47ZDElvăU"YHCOewfNRBe&BF*Y3(k/-]&gH[kM6aEpSQg]OwVh[+7,n<:O2Cg\.h,VTV/#GYFăU"0K#Q,4jBZUAfA.DI7?MJl8<Sr5#q&LQiYin\Wdu#r'WkJOJr9vf;*Q-'kY(d*ONăU".;8wsC3Q%ADxatufZ4eGYv6iB#G^l3<&O7M%::nc-Fn8z+6sFhN_C[?4n525>CsăU"$I2zXng^Yq3=8bW:HoPQh-gNss>85=2H=sjoy^nA1GuT^eUV#n;lS^n[%T6h\=[ăU"o7TeM_sH\hDn#WebZX$G)ivboQVvecE%VuaoKgwllpn8uxuv$6hxvdJ*vIkZ06wăU"cOoTM/GFVLYYipGd<E:*:HR'0mnfc*W3(qPo;<JF$tg;KH2:FFUugm1s0s=>$,2ăU"e-[Akr\T)2;(k9F0gpPn1zl>f,2M1X259a?H.49G.#MeF2\3NFDaz4dB:#g$qr$ăU"ji[F3msO]qkhl:/iI_B'YbCsbmArJS>#Yd(o#,C/L\(n;6x6K6fk[z/idsM9k1wăU"frKIiNpR&f6q,r*4jeXBca<K:sib$aMKKJ-z4hi;qV^p5=iROIBci3.ue4W.OA&ăU"syN>LnxV3)9$qRmK,\i)IS=M9nxKrYx#Zz*<+>0Z#v2I]rpzr1X%ggLS;p+h'e+ăU"Q+g2UkHRA#c%OG8M.Ztuo_39&2CP]z3E3+6>UAzA,nAjS^\Y1L[bL6jR/WE6\FqăU"Gs_B,#K6Tp42,NRAE2c]eWs54P7PtifnP$vl$tn-hsj+(XTz-cLEli'5_p<TB>qăU"S<h3.mX-:$IgF[/1OKM%5T^9wn8Tm1rwxgnE\o&#+YY]op4([-/S?L]0)VYGmBvăU"uv#__dmBBcre:breWW.geY)6\CHkF_xqq?63JnT/$u0aS+ED6bE69,eGKUferanăU"GKl:-+E>z#Gx0W:$mBapzerh<[hEl#xNh5?33<6.&gsZo?c-+XDFpr5JrrJ\H=wăU"jJma&r8QYmOjmK>&UVDM#/Y?&,0v[Cud;?jW_\GoaGg]VaY9m.SY5RQj_WS7n>$ăU"b_)^K[f+IU=4fGx>if*A3_n)e8fG2b8qQ1xt2=MJB]J$Rj]gq/>nkkK*[^Eu6^6ăU";rkls1^6rQ$CB.J;q3MGOu[3e-kLcN,^x$Nqhyh&ZTFN7bw_+p(B7d5O]IU]iJkăU"Jh?h+w,<Cwwx?6HSYAeuL/(/D'KK:.WJJ=Phy1G]#x)2WHb/)ceID%f.A/,=4,făU"NlU0(34a>7WtbuB?8?wpPU+sq]adDJwjo9kCamV?U23buURm12Kt2aH\WQB=<AUăU"Lh3=zU##T42H6juwEe_W>mB6&E_[YMlA.lU4%COPXJro394&rKi'-A>:naHm*tlăU"L/4$w-u<9LOC0&n?p#YsD,H-Z+aT=iP\<)R(b+QDn/ch,u;]?2:%C4h]IUAy)y2ăU"J7r=vd8uKV**?v-;23m9%9/Ch<2Qnv_[2gb>q#FVf'KX&U9BQyQ=OoiA3;WnT&oăU"CP56'NT,,89hk7u4PanndFB,4l37'i=Eo/OcnXBkOTT,\ikcWQ6b,5//^tME3F\ăU"aAbhR<L,=\jQPA,vBqf+W^3^COFma]UFl^.3na$3]+n37^<b5b%=0BWJijE2A7iăU"#&o-c^,)p=:QJ6c3J%ik+()roebpHV8YrDJD**A\koJZSdPQ'.M)gOsX;JX&T:ZăU"#.V5Cny>k&t:)2m:[)6i.Fv%*3luG^mkiHq8hzJ[S;8OuF]v:idWJo(k3);tPE-ăU"ZF%HO$xCmmj)>wAC)tqX'/]=:B*]ktsUj>D189(//jubh^89jM*[NT^.S<$=8i(ăU"^GU74R-O=;3:Vc4Dw17h)q-+^G/i]$k')?lwCU]tVL],wC8#_1O;gb1Q%sVA+wKăU"$VD<>+xNDR7Y*t/h2_=n<H]NEP/2B7a=>6SdbFlt\dYu.(G'+9/Px\021gcE3mXăU":LQ;#3Rn+/,6wVSyshqA+##shdalgo$QMI5smkCgGU.A^v;FW]QfvYOX8%H0NS1ăU"+FRf;#w;Kwd,+]]*^gK2:3Opj4,Ep*9>-Hj1o&P8q&:a2DO/Lw-fn)ez7Pk&^82ăU"4O*AF;2V*gbA]g_p422VI/Rk,>cGB?fO>mIMx6T('6=o[YjG[MW=I8DSlwM+X^$ăU"VbQ'#i?Pes-$#)BY%d.XXSu+b#dO?1?IWc$JhYQ_hvb9D)(P??pD1\bEjU*NvcEăU"Ey'h>NC_5a:du/?-J$:D[NkSk.JL*AB]8Omn;9P*<h%/S3&Ug0C)_PC0OvZ_39VăU"r[nO8$pEHUxLWd\JVDGU^7DEh6kx6bbA1wKv,&,Jx%r2k-^e.u0;nbPk6hBCZ1;ăU"<>#4gGu\nrjW(-aAj0<M7bDd/AXPnXfMnO#Q2waq'fhC4kAGON4mVs;9EH2:I4lăU"k2(Z6j$35%kR]i>:j9O\$TkcwT;s'U?d9]xc,*H5bja_&nwd&'<2\gLPIT,vPy-ăU"v:A=$lHE?DuMr>DB]06l>#RpxhV6I5\>Jag7Z%sIYkTh%))c<t,^evyZUnU^E0căU"hL+CiMUGag5warm(\a5Nd3+7QB#pVXxf4/qK.2XNQF,^b*tnAW\Cwg3bP0i6m3<ăU"=O66=^Wg2I\rg2I^9B+VyP(xmeO23C()N-#6$kC#xH8)>(#62K%\SVy=eRK%=+MăU"2-k<R4CkJ+K%S/(SQvRJW.O358YS8QvP<_P&*rR,Rw&'];ob=p?K]8fq&I8a'CMăU"\*5NEI'md&CYkR-7Di2wpHU'EU7utDodrJV'Sl\zpQ]b_=^a_rsvtXI3:jg3\ygăU"_AAUrqG*DrKjKo)9U,UWHgQhM_Vo)$-5camnk\s98W=7b\-EUa;<FUEqZ#[=;u%ăU"j#1t,sn?1s0Ak-)7XXOFGjh8jq[Hk$54=>B_Rh7$WyA<ZsZ08]%DkCHvYp2ovU5ăU"0(D5<fI7yyMt[,67NBFlRm]U(d,2bWcmNY>hSq)B&ne2pVl3j+Fe;;KJunf=s<hăU"dSb>WmVoHGrKbDBpzRs/xx6p1r3R0T2q\ELwj1kOuIcKHN,v1^<By\MYXC*KzCAăU"Uz^R0cnq9cFVtA2-c<AvteRJCW;0;ae(V&n_(Yk*lg7.gug=J%W46D,$3GYd?KtăU"]SG4MGhSyEh],5VZfQg'2r)(Fr-eD<f.n#QBSAkd_:B,]O:rliJMn+dE:)=$2gbăU"KGPbmdMKwT.(Mn&R+100t]c=(?-eGI#d0z%osl:%bOvdN.6)':mC+A1=4fNO#j[ăU"0A9DPz^bro;QoCZ2YqNwljVJ-GnPVJt7CVbFu.h\(QgbD\J40STTIO?,388Uf*tăU"^cpdA'M;9/rn*dBZ>N]'/4m9?mlfMk^;S;QTm?2Upe0-bJ0*\rG0>QhKr6A#kj5ăU"M#.IC'D>:>iint,Jetc*6'C/Rn^JvMrYZduX'mUwDM-S,'k1v<pC9ct>EU(X/q$ăU"]v;$]tr:kC#VjOK#8<FW'cnrGNxCERzNFmx/Vom[5DD7C1/^:UZjlHW=Pk8^PL-ăU"M&]CR[4<$j0njt2y829BNtXBHFJ231ysPd#Wl\_^v$+G+Y,+sS$#AwRjW.gCa63ăU"<uf+wr5l2&XO,mydX(2I7iD?)ZO0-pK)wp(Q57<r<6-ZL<6-ZL<:YGS.UqT<HgXăU"J?9UuyQ#_0>N[J8lEPeD(=uh5'qv\<kju'f$Rqn+>+17=:R.Qx6TX^P(;Pd>pGvăU"nq8Z\keaDDY2b4=QBG$y=w/FL0nNNw4yrZnAlJY3o]sQN?'(2XT-jN>&Sq4B;Q?ăU"6#gn0HDt#:)'NB1=f[h:PTGhJ5%?-ls=IK]23'p'ifEQk-\Oa7=>>1F]MTnaX.qăU"u*#+O[>V[?9*%r-j+qdR?#6V<:wACDU5A:b>'QLP8\q4DI3Qbb8+QL3l2hqgxq;ăU"+3xdRUr9mHNWi]FE[<^6e2WImrExlqD0p>[RE\qr-[kjqW-(#jt2e[YqVel\qOJăU":wWII+^65aA/b38jZAXIOipdFMVB%$*(AVtSvS9YdT,N2]RIaRT_]>,gi5L/>9,ăU"oddxuqMKmsr9wAsTY#HiAkQ\h7vJZH9,t?ljt)6?jl([s=qO]vS$KDBFs#d.?p7ăU"hx]xm%V)PrS$dJ_02TnvF&UX(FVKCZ6c+bUFZYhJ.2py3sxqJ5qYUP9V0*L]ROSăU"/C4Ga<F73AZ<BSKJzrhKWvrg3W$,df6(px)[TklaVY%:LnL$n\bn\YB.ic$VIaEăU"r#y>1Aij]x*Tx8DwJxa#ugWennM0xe(OEx3r[9dLj<wsx?JKZHDiCt0'iMRuMFvăU"3VX$bRWwtmj/rZ+^W#ax?tAUal22<AS%rt5KSGPlHaaR?r.b;9[tla.VPGP<$?tăU"VV_fx5s#vEF<Xax$ExDRXG#l5FFRiy5^YdokK?[vkrM:cdL=#\u(ogvqrK]W*vrăU"C5WGieBg*zu3mrM$jtZBcsGlpNSRgR'(Cc'_A,0De1b#v>USd.=p$#4H._Q-^KLăU"N[Qd6HS1KUmf.4pQ-S%XR1H4iN6<2d&T2OGeJY?qfnHS9UeuHRJir&%*2H2Y9UhăU"RG4UAZdpvT1aRruUolz1C\Xu#R>8J+p8RQmV.^9vwMz7w,C3lHV'GH$t>:RVf%;ăU"_z3e,eE[KP[Qpmy3.AJp4$l>>JIj;A75A<3geyTd6sWFASr'oatBGpl8a\YAa0AăU"HaHv.+?3i3Bvy3LO7nt&u4C]I3fA7*BcphNLJV=$ChnjL)8wp3\,phb^MQ=amulăU"4bLM)t4Xhv-eXrMAUcGIm$Gm/%FK91;;2pPCuSpjkl%qZ#zh7YKhjvF5uOlnpJJăU"2+un&wazqfDEEtstZYJ8Vrq2/4SPoqpZJd2G5<7V:zdBlcFzq[#gO-JpFn_<Sj+ăU"[8inV13<YU]H>'Xyivr3fH<Nq[TbZ5X5gco[Xlc/BB.>Y1)3rNpG%EQy_g$eX>VăU"=/fqn,<2_Fzq7^ITrC]&FwgF$9[/mPVr3#GAkb[Tr6>Kwh>)2+?KtFWror)rNCrăU"B5:rkJXKadav=BJ^iHTZGmo,;#04gL&r>3jm8BJ=J?SYGgEi'XmpeK/a2>Avb%KăU"V.r[;3KgcF\vQkSd.m*bOhPi&.$k(B:&Mf<GKn4p/r/[moC[n8=UVd.FA71Zr3găU"1kn)Ek;u'SF+R+uiQHt.;5jyr'$CrF2HqpijKP#ZWb*-a7CT^iM6el+Hi(-AhF>ăU"Tk.,<Yp>j/bZR('pj4GA/juq$BLY+R=SX)Vk$BQaop3^n%?':B*[KNq7;zk&mmOăU"d4ZH*EuQMGC=H#ly5iQ#FY=*R08P#xMdeFH2P^\#3SimG&P=<q5dVbQ(8qu*inuăU"-'C8\U^2IGO6lo?)(K5nPc,EfAm\09>^nQ%:N3RvF3b;bn^xn&hgetpec4gK_I-ăU"nLN2>bkHdx*n+3pX6SlEPKC%UuXt&F%$[CQ:7k,Q1kA8y(E&uA22q#nNQc$gSN)ăU"gT>oT,U=2Z6c*.+kgb[/bTR[mh#c^4=ue1IoG+-=F2AwVl<<EGR%;ftT\ggT#ApăU"%1rEFTCk&r%Iy2FFP.<fs_CFT;Ttx5N,[p?7:]^Hllj2&ZcgwNWA.N(.=PV[8*găU"=r^I<]w;^bhJ6T.$0h9X-\JiIocCeRwHH\U2>%1**-KW3I$<jKXl6?&Cb9alQ\1ăU"Y==(2JFPZ;#gx&9Ew3I-D:D,b^O^j08,W5qp'^oHnIBF3TUbf43uC,r/.nd=F08ăU"?'SK=.L89UCS-^7q[<ulNg[ZuRs.UetdNb*rDXIi2qD.\[Ss?dhX9Q\xz;22t\\ăU"E(.uqyNOd+nY6j*hS=D)R;_Ro/2(YqVYgV?s9V/2HIQ)Cw1+cReX8hoouSxHAq#ăU"R$xdSUBYDPd;.dCTO#u^E<,(D_4U4W>>#j9vtPpB8OvQ')rQ?p-cFm=Vu]TKDbWăU"A#3t7wtxsnJpx<H\wbRQxjU<xhhr%-ly>uuT(1/#pi05;d$lk+ws86]KNtaq+r3ăU"Gc,Mf<D4,Yc()\lgd[d)'Y5caf(k5:(C[o[^0=G[h?nUQiQ+W2rk9I/KZ;H)^jrăU"xJ9<5+tXGZ1yN*A+Ril27GOiP]z6:r]$jV3RAYQ\<;FT*>')^JUsr6?%nDs/2IbăU"%vUOTsTkzVtKFzh7d4'?i5L$<(we(0'6'dVISkm2M:Sy-'#y8J-HEfk922_=K.5ăU"sbS[gd4i1O:26XQNURl5s\4oq5=+x(J;?o+if+2oV[hyy4h\,<<od0/u8Pi_[PRăU"xVz/wA2W$qn-+$NHHmr#;k6:stv?ML;o^Znm*]Cc-kF*8_n,21YJ?QM;x6.Has&ăU"-+wf&_eCffk-7SgYP3iKH(3maW&fr4cULlumBvj:uaqnAfecb(hY^)o'pj8n0cMăU"qYMiGrfii,ZGI8:S1eMr'.jHlvB$$ZII=m2dm<XHDV*+N=rlKKj=*]:zlTR](rJăU"_vj-%L>uGosGK4/ihMIO^RjSj3B:6;XsU22sFYX*r1Z6'G:y55y^XwrgImd&Wm)ăU"TX3R-m\Kiy8HfckYDjJHs]U\vT<PPP-3Fgu1]0%B,0cGeYuE+aa&JYvgb*Tpq2IăU"qTkH#vgblhL7_t0*6EWM3D2tb%K0I<?A4tWuf$bI<<p2U>G9&0QW9mEKCS>:kV=ăU"KBzRYL[.q9n.,4Ukbua+nEGU/%QJ6qN)p^;n(sOiKH5^8j>j36+eu4M[[RHMT?;ăU"SSQDTtySm0hkl5vElK]=6vk:8zd:p^:nT/PBpGbgkrQt]H^ibf3Fc:EXih9yjFKăU";Yt4/TicpdZ$XKoe&n'?cI2>PH$eA\PP/ZU]F=2rko%.,3LXI],2;u?E2tlpbGaăU"mlNcR;*b=DWVx6BAlc,yr)fc$$+RT$RVhno+lUcmO)$$yc0<Z<^HZC/e;x,LO;XăU"xe;;n1Wl4o+Ny?RqSl[*x,uuD+-S]4cwIAoF**e-EFBJ=gheAA7)r[Op9.,3xUtăU"9k/[Vr1X/W;p68fHtanQe8h$ldbPJ#dV0YpVNOW-[/a*u^'G'qj>Ro<4t3;5#RvăU"W5HtUBlD[LDM=aLKGtk&6P_:T#+TVec=#I&3bU2h-N,c#YDNK-W.7uV[f#548..ăU"1HM1o[L=#+X[v5\^6DBG',4-Fp2gERsm?ml]r7;CmbtToH,^HU=Kw'uw]jrjMvSăU"88s575G]^BFR1Z4=hRf4oKGw3NPn0Fx+oQJAnA\k[-B5TAE<THWYuF?^kFM5bgfăU"t)Uq<e_[Zn0?)47C1-KDg>mNuwq[(\JDzfA>KtItW7egXw>%gR/LLc1VicM?o+<ăU"8Inbd+Hr]K?2H*=Yycb34d&?qDi;Uv:/u;VBhO40F6J-EQW,yLZ5$N2T\J7?mqsăU"6eZ$PWmt,8#GMr\4Ceu\J[GAcjd3FNbW1A.re(aE,M/Zo]qdgI\.F0^?,VvB-7JăU"c1T2$;Tn8I$[m%AQ](w)&%uWU:t\r(_Wls3I,XrGc:mtS$qoC0ByaSJdx:/Y')1ăU"CA0(t_8<s62Td1hNLr1DoJZ^Q7\W<FqU1Tqn;$)aLltwTMq1.p[c(dBCE'bL2Y-ăU"as]uT.'dpIF1-,tQU$*$2V>Q(f_X5P7di6]bjH^4/L]*%?*$1<Q,T/c?SgPrg2văU"pkFIjg=M=rkb'5%W<x3R68MEB3b9BDaFgtnE3^fLrRDMvLJ#Fx>S9oY[W\lCNb;ăU"<>jbQI1WnZ5:P434y35Z4VJh<V.IP]#I)M&HSH-kgbfijzQ$NW0&0cu=4SeSUv^ăU"F,<4Pi:oGjV$oq<vK<A9P:\wPrIEwlvIXGUT,4[SViVpp;&9qS1svp.8R9(l(tGăU"2H7du&bz4vZS=J[\b+\wNeY+1m++WzBWu%rRrPNAHsBigB\WH()$05wo:X/8'?oăU"LRl%X4jLG_tztcd%=ej3Gz]GEEJmoUy,pg^bH6_?-AMGDEBke':7_jxFa]HB&G'ăU"4bJBod7o7pBxz7iB;FcA\Vu/n8IV<jXg/A7Nt+MF_t%MNZ14Lf1R?DP-D)#JLpMăU"HQj0sP*BJ9X0:+SU++F(Rd>EKqgZ_:'ZgTC,E2,l3b8x:HxhaM26u1-/ik'PfUdăU"LbT2b-N2S8tON9/$x)ze*tCMk_&9S$(%R,'q?1F9n/T^gOneQt9iX<+[xGNMsMwăU">HdB:>klH_'TNsp)\p:yva*4+Lemw[*cr8/w\eZ*RQc%Ive5rx7$RyRF:iMQI*LăU"(Zs$niH7GvFG^%i-N/n(rIk&8+QF7j[xW^=f:_*W?t[6;^iS,;I7K1Lt;8?^M$AăU"9-:fS7zV(Yo?,V^,onYeDpU4;0lTdaYE&#yP0/skg-(un.Epg_TT*4eD]NY.%h+ăU"CG,\qb'/%;u'iWbV=t1'>tU:C:LmWS(NPxE:;L1Zt:HNr1yHD7=1^8bq.o0VZaTăU"puZ[)SCU^ce1;cu$jo2cFOCcNQ.TlLcKFtH*LOtm^Y_VOxV%r,yJQqUZxjtP;]0ăU"S<cz&+'l[QC+pkXA4t%Nz$+-2RDSEz#Z*'71iuIlmom9PXAmZPkI^T8^pclcSanăU"8,p-$%_62GXbhK_mEmI?CT&i>\HF>]P]u\*IYidQ<w[Pi&la5S[jusbl/nVmAvzăU"L_x1w6p8nZn6pggN:?UvbBE>wjsp9YT#wY-'GzMNT=hgBC8&zEkQp2aOvP8TT.xăU"UX:=\1B:tdqcSmoj<TPHK#KjRKv_Xj)d6NER5YR;jO-qk32a6n$-7iyhUlKV\GcăU"'_Y[_[Dpl.AOifVG>ayOr)E5#mz[JK=oUy*rLUlPaUdf^n4/FBJ>L(YJudRJN'păU"A:M.ux<Y^:/+S)v>?q.KtOmYD4ZxO(GJsxyqCv>PZEkv]UHccP\$vHoO%A:lw1CăU"^Aci[bY_Qm$g.];o\s#l)vP=<x=_Y(rKn4'\R&>l+02Lcx9[Z.LOvF.p1#0hs/răU"Q1N:dHOx6brfGx$EP_4:(i[tjo=fqM9Yx<[VO;u+fxus[m(RPu#nh'J-'r2haOOăU"*/^P7Jda9%S50x*i,2:n2'I0w;TGiivI/qk:7c-nt#u7=MaGtC=x?),c5NXvH9$ăU"-^J$CUb)Yu(BXwDk:gH5v'B^T0(8%LU,n#gjAwEE;y8A+7MKUNe)oj<ihnbZBc.ăU"dbV0#Bf>dxF$ToB$0kplaj_U7W8%p5,YSDhAPVG<&7Pkh$Zq&_6tVFTkfj8WuqTăU"]*rp8kf_RNnD])i,Ed^\>#XHYqkHcY9Cpd<)[:H6Gp1,:YB'125<l#RhZ-0Jx'VăU"2>OY;K(8]pK-3))QD:>ntJui3&fA?I#W_Y1pAJ#+XQc0Y5N4-[uO5kGK^WR-Qg-ăU"_wN+I'cG-g3S(E%sr&LR^(hF4^;b,ShM('Sxros4\CW=wW#nKxeW9>nX].S<ZDnăU"5CU'XGa&Yi4Z5pIrz+Q2CbQDt&U]nQ47n'4[WDrn*[=nMLK(iKd?.uMDLn%Ve[(ăU"tcj'bS9O8kdZ^$[J>hn'P%O,T<.wAgHl*nqjRCBvFJ(Rx2UYl*Ft:gOE3J[\BYyăU"BI[QMUpHpVE+od;rp_dBru_FKFAfj]*;-8z$/aH:NbM)([py_Zkp-TI5VcgTfyhăU"Z1\kVZIZr&s?RmAlT$1;+FZNw%fGG/$HGt&qNx,JZ^MekCbuxp/?CNn[OYyuR]dăU"Lp&UG10\)JoHT2SRcBEsFWjnrsVJLJL(k]dY+IQPNq3l8g:NGv7ac57nkhnEc]<ăU"HBQ(Fz-Ca=I?)>c4X]hZB%x<]Yh7qjbBnQP;N:X9Lgl_]P\T=&7-Wyl^HBWm)'lăU"S75y^JVNJit9+d%8?.d3C<JB$8](_LKZMlsu25kN.?7-mpgV:,Ps\('SiPDQdXoăU"Un9W;0$;0CdE%<wdYduQ8+;O<d+dOw(pT]>lMf[VPke''q7o*(ibHN=371elyt-ăEND SUBăSUB V2ăU"=o'H-5MP^k)28bQSFa.49OYgS6$FmyE:yWJfguiPcU(W(5(9&\eeS;R7Chk1%B>ăU"pLp0.K&Gfl>SX-4caFmP>pW&8Nq\CNi>;cuTGF6laz8mqx6Ur&/Fr\qmn$M;dSeăU"XSBkFPE4t4pPKi>8d[Dso#H19;#W[>Hr#cIg_4n.V;Jhs#D^-K80vDaiK_]Z-C7ăU"83D')BOrD%A+mbOZsJIP<952ipfS_&FgCrA=%wGK2;j4mH9]%uMK]CS;-x\dQb;ăU"j[rtd=Ti2h#4$Uc%/z)M2nON);<37$fd-G,p$wpwn.Ze#+Zx?E2TJsN4w;U$,&FăU"jdQg4^_5k)Hi%X6HGeGMZfC#tgq;A\_4jPTLhal=[(e0H+M]q9JdB:F.aSxpYY$ăU"<%honmCUCp+V'o4Z>^7/W=qVA&s6WxeITs(XAYmklg[_XAXSP^$2OtZT5e:U\%jăU"SupRhI(aQ\qTOF-T+t.C,S[fYg_cMh78qpeF_Z4eJ-eucXApw%D7(Pa^PZ+?e+4ăU"UAw5dt>nX\xONgun1L+ddn3_1NToD=)opH:\Jq/#8OD=W>uKQt3B%fJ#e]hg_U(ăU"Tq1(E^8OFz2g[$Tyw30'NfKlacNBIhh$n<#Ir(lqKadYiCrTc#S>U18Gg7OppLoăU"Pa%lPEtt<>Gg1CX8e2ve62CI>sH6..\,]%02rl:u\'T,+Y(Sx)k4fSRKpfC+/6EăU"(g=>?9t/s:Tf\qerH1*Yt4:Zqoh1R/KdSoaK3rvP%/GF$A+b<8OPIwYMwY<;MSmăU"u^Y0gX5GC8HYCmmAV2;M/_dyE.dDp047C,nl].cQ=W*=#x16iK>IcWpBx]2?W_năU"[.TQO^ZwY>3lQ\l3tRD29IJ7_7PHA?<D4luyiCd=2EvEtxMyZEb*<gP1q03+SV.ăU"L&5QCO3DtXxPP57Ww7mf03PO;O4-,(nNW<E:&wX/&Qagj5$CRw>Lt<orex$2m=qăU"qMPV6cj%5$2o+0OJ4XxDVawDt_Uxo.qu-PeJ[VxFeyQMdu.5;G\AsMe=1%cr717ăU"'/$0lLB_B6L(4Rv7s:6Ud=t'XQ&KvH]*;20&EaP&-tq%tjjQ=_./_/Df2+?[m63ăU"efD,sP\vX3ng,x#L]:FP6/%A+Ct*og^C-dX4Ics>(_NV-gC0)N7a+oUyG:.0THCăU"frnTKD-):vIl6R_aqLsTN9l0$ENC,TPeB&b#q?&HLe]=&H(a6a_PqYmJ'UpSM,făU"Lmgc1;0+b5cj7=KFxiKHbH.D%DGw/O]CZF8v0Il5O=8T6l).#eZRhKtW^g<6yu.ăU".3rM?-_oqL71<xRpbFX,,9XnZ<q>a^/#*n.hh.i0bT#F$jDRB[Q5g746%IQWb1:ăU"71B(,W[Cm.<$$7w3B$W6H\E&6^:,VR8HhzhI?11BB1A;$(kYSlN?J3OJ9jWuDVbăU"C]$4M+d6<KD^N<Q0S,H[+on$RYs)EQAwmmDw[B#o0?(=1b9C=0XX=\0gU][8m[găU"VVM;U>/k6NN?wNq4'\LL_cQ8I\dUHu),\^;qqXENE9'X/rQ8-c?C2gU6&A2=u6BăU"H';^[wggqhLg?tv:b*#+rgpEc3.KTSb^K:t-Pw?&)dSkI*R45KF,>u=Ol>s\=53ăU"jHUis7Zll?jBj&HjCQ*Ot\#Kga\3tu%hA>:riE0IBOp.\bNccjarHm2a^EV-UlkăU"?#^>''H:<S5m$Ryki=h<bN+Pla^ZqZZR=jeNYk(4XxdbHz,hNz$gZwKhm39&?LEăU".az:Noy&*<4:B)FZO)FF\8QZ3FPn3T'ZMwHvL91Hr?J7_AmZ1Hu$w0LuKc$KAr+ăU"Whd(k0&#>mqj+1D)'UgA;?(2E'Xr;MUePvOJfJx/lrx&)Ac?U'35F\NTpMi5oYoăU"05vb%rFj.DF-8[px#tjF:gn8N14M?1jBuMxU?P2jM=v)'J[cQ>;Je>vOi[aiR[wăU"C'G7G3C1zv>/.Kx22ox5%8G<=[Kj:mL9pT_;_+HJ&,soC%Ad]>lxMRbQ7>na4gDăU"vQlP.%&rF>3;esNu93re/:bGN]hb_%?l49.RSV^IccY2tGHdArrgqE<;tOk8iGRăU"#z$:Fn\(u?RT*VWs4*zJV]1,gb#][9vkjNQuE'dfH^VSVK3QM,2wU1,)lO7K%z;ăU"&llt\l<=rr*9GTW\9OKe\Q33\]aDr7[<,^g\osm;t,8mJLa?hW%%G/IG.mIuGaqăU"G[:i_N)KHOHhP*LmHN^34r:iAT\.,#wLJk;]$[e)2S*P';^FM%jf)q%r<apW]VOăU"]F301e5ozF$^eN5c<[mSSW5[n%QF]lIgY\#grB'19kisO2'yvTkD=ER*5[j<%]yăU"Zhpjlux=JTqAO.O>E;)3GYID^.F(kq[otd>_XpASga<vJbP>aBLW%T'm2JEcW>KăU"DXe5$wf;stNwWu=0D_JI;1'dc-rnD.kLLdV4(Q'H0KGADDQ*5V)7LCr4TMvf?w*ăU")eNy/$th?P'WO_h=EpFovj/5<wkBmD26dIN0V\\ok:sN4i%BvhXD.VgiVHn^^UOăU"$#86g[Yx>tZ\YKxla?ac$E/^dAc/R:.BDAercZ$xFBlYZ26X.latfLt0^gMiF;8ăU"^W5%>7WrR=K1$s;)SJn4)#f+:9;jxT^JpR$D/mb'QO_[Pp7f.+u\-axIbo%-eAnăU"Y\becHNRKJG*8d]iu,6&VR[m6L(t8DC\I6^GbMU3<(M_1qjqojb']ihN[:=+<N&ăU"pd^Rgn0fp=;A(w*sq1j2cHy/eVI\NmlqN5a7Fi_TQJPScCEW,<[k_rtSE$Fd/C$ăU"491(N2qp?.RD2Ol]^22(V>_kHKi1W5_<9%VKS&yJW)sAgq)Jk.V,\_RoSQNISjRăU"7pN.atyr:OcB8Kl?Ko_0tNN%l#h:><ESy2iQ#$k9FpP$'%DAYtu2:__Cr+\YyDsăU"2>eUK)=3.>hT'539HjIh;'3bc\=A?-aE>>\JN\WI'?nq%iQG<*o*T3RNeNYmp<0ăU"<D/$y6ISh,a#1.q;jEwHY1SmR$wKpP;_VXVS(f=Ajx#[?Vn<w.0w&?/yg#D0wyAăU"#ChW1L(X84.Kgx?xT?&+w?iwdskXGF9U6*9IL2fIscvw8zR?m)A]Gr/z78oe'G=ăU"3<1n_Q[A>lxqFvBmFCO;s)QQ-lMgc^U7Pep_(41:5;2hJtd<)0()=.m_5]KgilcăU"pcvqwzZ56]Er#DOVs7RtUNP?UKiv#od7SFHNl=(j0pxhT3m]gBAmp8jJe/'vRM3ăU"$lfp[,/MlY=S4]D%89q?&%:9Db$lAUMU*c18v\iwKe+Nh%i4T4:_dl#^l%\i\u^ăU"'SKIXBveY-,)SwS7P1G>(xe.u,8ku&o3dRlQ6<,>>:n1Q$/:82d\?mX>\lawD2/ăU"#rL1[Vwks\984*mW2wg/:y+y1)(H=CQ]$TP=gADl,i^E*l5tSN-a%$K0vLSNXEWăU":C2zZ]2+?+k9==5Yji17iZPI%SH<%h35M'<3%Bb7.>f:=QTkq?C[(<#TIF6r&L<ăU"t3<M(kQr\SNym,]TgWCT/WnC7e^Ad;1S]'fRXQdx0Vac/PMx\Cnqn0h/YhDY?5măU"7t4;jKvAK]eozQA.H'e\NWH:5ogX=VtCT4uqp]5U38)k.Z-<fyLR:pa='6qLS)6ăU"pl,_u'6/i]kw9_Z9?f4ebZakEXmO1OyPLn#OI/V_p.HEwRNE.Wck(SA2]Wu:_n0ăU"#I$xA.?WQ^)R,#2mz/Qij?avK7e(iS/e_uH$<f>()e2/ZfnFbHQ%sl[SAcB/JEiăU"rn:nG:eFzMFD8]<w/3]zOP$3v#(:#zV6IpAr8lIJi\EF>#&k'6/bHq/wQDXT=gTăU"SyYKH0cL3W*G5MuUN;)/((/j5IGrgOdKjc?x.O+<#D)8G^)pZYe4uWfO*qt<[jSăU"H1LG1ntv\CLH8h6?)R^m>\:XKHJL4Rox%WMDlEMZG#EfHKI9hZ$.=5FslZ.kMjFăU")9*<6CU(;ToCOKQ+Hp4&hxDSR]w*J?HyXK,2O7?v1YeQ2'<k+4NR=4mIEHax^;iăU"R/:4W;99Mki7aSm:v0>u'HnbDPAjM^;eDFkk_iu:TBNU]\1R5fKv+EE7(WL'M:2ăU"Ztp0H;m.1o25u.T<u)[&*:,j%<UC7+-TU4V*Y<6M;E>EfMXkRYK6l+G]kg2?4GnăU"$bTtf*T+E)449tC,]Y3pc:),d)eN$Uz7g$$T/&6YI[y^ptb(*65\FuOq5cor$iOăU"gdNV_]r$1H3XpFT'OPa:t)Hv5N$-d65PKr?HbYV$ZxaTHh$egoZQ..FbGZVI[X/ăU"(V?<I4PRZU#TL+$vJ1>X/1'pAkljq&=x>wnZ:8MS]O:yqNaj:g+xR-J-5I18T$1ăU"/f]R1(Fom57G;7fekKr](OgK\nHAomy+*.evEH^l?^)Z%0t^J7Jn1O&]hCvPXO+ăU"sM,R<<R\c][&0ITzq??k%XfGSb?PeUD9Vha7(cC)oofx8bcK;;BGKQGh$TOH9/&ăU";(bdU'*vr;-_I\/#O$ZYu'Z9W[eVgLf*wAQRN>Hdq(z<fapI4[XxB]E+Z4JN]S)ăU"*+HhA\RcI.4oxld+uKXI'QU*NTDy:ufp-4l(1pkS%Pptz4v^NeC**DRp2f8l*q6ăU"Q6sPG<o=Im+;KrDaoef]bc]#gT_3u'%Voxy)m8W41POT:*58&ERFMQNpSp?8uhkăU".;/=nPZg<uX[/kso3jYa=:39,37n]5RmM*m,'e*Hw$SXHkb[gK.opHs;sbpli:(ăU"daC69^;,071#$Vh4#LKF)rnZuCm0]fg#871U=b,2g2xe82OTt_JV0$[DXEhD4=8ăU"k'Qg#fF5mOHh;o+v0SazDwl'Czzh]YCLcGsC],V6tG,JxGd0M8/-fgjZXMJjz5HăU"7\rMVt$#2&=?^maW4ykKqW2>RA\Iy6%]^x9Z%S1oR[vZy#yN53mv)&s\oz#-h9QăU"%W:z8Y69q'uD+RM',tkeB,)vUb6e-5Y9OYIPR[ib[aCCaG;BJng+jh3r1rm$EuSăU"HwXsPidb53LsP2Sst:[?$'aO0nK'5;,rakumZsniNP:mW#/Xs&p''dtb5LYJIc1ăU"OQl\,qon;c6u^5P'$j*TA/J.SaKH\(mc$p't:Q'ZTt\j]wlV[ho2Xtv?-Db3<fBăU"c4Wk%)5H,y<T.f2s1.7g&^Ps[jNu[WG)XW&q4ojLD+xkw;O]#?0WQPaIbHc2eFZăU"#YdW(XbtgZu8H'XY)vny:0z79^?T(0Ktl_4f3W:w7El5d8PQt&%#U?5kyu'$kxeăU"I*UBl'm07:*FkYT&/56P.^p^GTVg\[E=8xk$Th?y,rVrlC<,Fd_#5NljeuLP>UCăU"c'2wW/xWA1$Fc$^O+7G25Y4LDS>b(^2eZB]4RL\Ob^3\Y,bWr-C>3potz#p2C;1ăU"*4z+s'e)Qo>Fwgc/$(4x6t4DHA5uVeR08Ej?LQ*?pc#Ui$5nShUqSy&Qd$S2d#GăU"4$ElljHk$BHNhuts_3.)=bp2VD,9]Ssbuj,GxJGBXb+Wlfh=0p[M\uVTuVEmTRvăU"mCshrQgZe)m3scGBlghr$xqi$f(Jg8#W#/)EuvIHj<<ju&Zu5#bWu(Q(#ul;6T.ăU"g&h?O1o;u)bF=oPX-2#D6_;G&p)56ElYlQNLdo+#bZZFq'>l1?S<J]X1Q\?:.bdăU".i:PeX<.^d?8*<Sk]Phu1-v7tYiB;:gDA)O0(\dpw#*5QwYGqNoE7%J7(lJbP'^ăU"8[$Kp9cG$J\IEEe<L3I^Xlj;$i#ng6c/fHAKu.LQn/XWL]4wWTTmc;7QDXD[^[lăU"kaF(mkD^/t4nFTU#7Pmv[&,l:^k]mxqHrD'7*l:z3lN#h)K*]QxJ>J4hL3F_[7wăU"S*?4[$2toj=h2Ix2.V%EBt3Q3Bkr,I^4er<mX7k%=a4KtCnF:+K5##2JPQ^r6$iăU"7v1Jpvx$GtY3_:U705/[?zmy0IT1/F,M^SuV'dO:x9*fy>OYE=j(.5$+Y$5H+EeăU"BaHs=y\JY.hJp=Ke5]a0Pf*69+WsD(^%i8iWM)G3(HU6^KMxQ(oePr10kv-TMkPăU"kVV][?8Zzw[dwVjO+6/g/o[2m9ns&+I_oLz=kKd+6ElfQBV)$aG]$G;2g%P),mUăU"<Ln:1RRX8&TG9rhaD[<Fk3eC]>CF,Z&d8d?5=oo[)UV3A:AIDUSjc:s\Rb^p81EăU"qbwrVD:ry9rJPkf^S+9/rpW*4Y#G.iKW*?.KJ_=mpzHLgOw6(YAz=q:J9;eP;gpăU"#sD[&zZr<DR-PrP12Y/rhTu>fUZB7G^b_0J-oFCSK,hmlFk.^,p)^Ki^'+'LQv.ăU"R-.3L4,CX%WGv\;G=2BC>:oxKZxi]#0EmZIiApEge_y=rHQ>>XXUOmaI/h$%aKYăU"l;AoBvVY3NjW6#W,*r4srqlQY5n,Y2'pQB?M[N^v\?3k)xh&v[V]bG$Yo.vDdP&ăU"-9-pY.h3San^vN#U+uVBcdYO(t9&.;^VEZUBD+]g8bg2LylSK>3]Od&l8tCmP]QăU"H+Jtfa=0N>SkfcD1,SUdL7fRBJNwOnV:tP?lqb2s<eKR+Y1/J<dg8,+Hn+Zs=/xăU"QkK/lI;9wq-+06aR?P$\heaT8*7p-s%,;yIh&Kv5R]Mvkz6tw-nDbbaLL;CuxqrăU"O^J)W)q5E:)2C6gpR%E;QiIx#eoUl3bNWM#$%mt3I24ic31mAW1m[1&#HrNR4=4ăU"$cWA/XeggR;BVm$$G\J9GY'-d;\j_W;CllJH4,C]j.]GyfYl*IppOAk8=RB'#>=ăU"'DQ4N+.;PLrkIZQ.:_sSqG_$QqHPS)2xvE6>4^tyAo&Bgs_l-g5.)I&hV_dm1^5ăU"m-FI5I77?G&SI)52\Us(ZJ5eC^Lom;'=&nHHca>dYHZa[)r6C_0#>J=A^EGo0EMăU"qlF6$ErWEgQgYXkK_YCXXyrSJpgdsLAGuv_4xiUl>nlW.9fAyzzz5%&)zo.xKvoăU"vtv3=Y.vQ'>*CBLjm#c0)loI2nHF32<WYikv;]o3'1[In?MKggZ(5>ISPE>1iyBăU"J;I9mgW$fg7Rg_<mKAccMiAH[-[v-zha'_MYjVMxOpiWW#\.sf(S)V9zY07JppNăU"A73j9;LW,\?Ae?0m#g.ZNe\+Kjvo16%-JJDNuc30FIY&])nZe<Hi+<g4WLiKY[PăU"#zi5ITtkf<^C(BrdN:x]GY9IMd-&rrr6$33IaB&%:.KL/Lo%Mx]$9ds^e\k(F?aăU"z,HHH94txdR:.]Vemssj:#>/(?G3-ccx,dMti4wvgKKiZ7AY8VGFE]$-wOX.nagăU"]\se&3\e3SEu:?a<NRFI:;ImE9)e;DTVQB;]hZf0^1+,3BbTtk=Z&[hhq$1F[<văU"zp9u,Yb?7nKsoxnFE3Dct<m$5DLe9FC:P,p0e-/HTomHai<\05PRh\I%triMG5\ăU"S^FMs8a[g^1GO*fmmXXH6Y]Ss-WSGsav%/4cutEnUvjQL5j;O0ZA_CJn4+jDC<*ăU"J<Av^UCqetNJ]izPXd=\n2HV*,Rb[S7gP.BUq[TKc=g[:V.2xlTtnp>&cf-J,NBăU"hGkQLfb=Jc?_5r$j2jBR9]r&&OJ*$+ran.?5C*615yO:46PN02-L;Is<I$^Q:AFăU",r0wr'LnbM'ppb>BQv5]NB3DOo*IU^1H.-I\IyAukOa<_XFqoQchg[on>mip-HhăU"=oha]T^GP0f]e\_W+IR/cNE\fU4^SZ6a]?N\ZLgLVH0:LPQ.RwF\I+Suo5jlm>măU"Lk].M#OFjTGd%ad7\kG6hNJmqhKX[mdndF6Kk(QB^/S?DZC6PEI0_DUmc4f4OYiăU"oDpQW/QwR'4#&I_Y'k5#kxGrHDE7A0eKZ<ZhJ'=i^_a$$mrmNSh\-;UWfmo-ptgăU"_CoJ3?P;w7hMDHTMf45tKQr1e1x,I^mDq<3\Rk_c,a2D1N&s;bxEoOETOXpdUrnăU"42ebms;*T?)L%gb0f^1kSmSX_)Z9a<&JYc5Q?G;I>L>NMZh$0AVb>VstImR7Lp2ăU"0YRaCI6bUX6WJ'*)DRlg'<qTQqnsgS(l\%\[lT5d5bm5mK-_V_(.I_wmX;<HU?7ăU"8v86hPu85t[Lv;'u2>trp#htK3d*K79dLs&hAltC_vC)z'*\sc(6kJ9-B72n6??ăU"Wb.ajQ-;7K]nj0.TT]gyLUuG,Y$%<('bfouA?5#9*HbLzRh9X6_r)ReftP^[UlqăU"Ith[4gK*kM6oIzJsWiUS\bpiQF6Nperr\z$S_s^ba5up#h:?K%)lSDb^ih]H\bOăU"k4$=,$)m0jYCmXV#f1\Q&dhpFF&U,NLbyp?=jgh?E:hy)+mD_,stYb5$Zo6jb8XăU"mDRlXZQMwK$PvoJ#7G:TyYoC7d?6X,%3om5/PJp+ciQJWngyIJ3B18N/9U=(C.\ăU"1YS/xbXKB$N$=/_oS6)GQuk(L=MvF-h[O8_sHrg9#\b^JVzbi%fqf%vwOUE&Db.ăU",GoZ/RzhV%K-HuAW0G]U;aK&+PGns#F%4]u]4L.Xl/+Gw=]-M2Bm7D+o,4o5Sq6ăU"Gug4I-IBq1,,]H9vZeG_]rXi47t4s'Hb<NKb*n-v(I7PHNtSWw'qAFuS86xM0:BăU"ws?TBYfIFdutR00$k\U_6Cl05uk0ML'Qaiq]HB':UF5Mg3-J$gP=L9,l]zJ3c<ZăU"'NI;0o)nn19LN$'7fSHIWt1PGh[4s)$KptIhTX3ORg*uJqS?n+(9cS_aPSV:%g0ăU"p+pC.+78*Xi$F8ozIMB&(wrEaI[HpibuG[bVmwqnViuavk*aKoCd6IuM78r/<]LăU"roFXcDHmcPQ*9q4T/m8xs\SwXY'9?[Idwhp7s'B<#]gnnKM_&Gj3<Ja_#m>9l?.ăU"#o41qHgYnt]QbJ[Lx3Mf$]%duY]AuiI%:tX&4f<kl:Q$_+DY7VXFFt[Y&dcAN)_ăU"3dEC2Gj]:-il14p7.dLK(cui81^0jL^*2KMb/VxiLz<Pk>pGTk*2(jdJ;lXARXVăU"ITt[6<6+<?yHxW2gjw=FG.$.;I3)dbBWsrsbg\73dT;c?6[hoXxK]p+'SQrt&eLăU"GubF=fTWcR6=RLVlUDp%V&Hf-':oKTrf*/>^yTo$X)K<BJ_o.lUaOZAaxC-V'/=ăU"0[kMa5F7&W7$gU_*e[h%12Tr5qAA7]lTmlQ\sAo-O+gGdA^[zwpJnG-Va._:aniăU"Z,QCmxJ>Y.44GU&tDpsSm:Y/Y$->[+N+YSd86hd?N6k9_Ac2L8+-UkPb'KppQo[ăU"gqT-_?#hcNBWRG(#tZY97h,wmWqBY3\^2ML($_'aJ1d(N=DJ-UnF<*^]:P2hx1căU"^LANitR/r>i&Pi=\9G4+3Y1X_&c8JdY3i1F8>N7ksTs\sXS0$(+#^'Ry;LIb$sbăU"Uor-wgh8-^3#mf=kw'%oHL.Txzw:0o.b3NS2N\)VGa=Tkd.jgKlBu\BG\%*;YCMăU"-mecb]*wV%=+a1I7B63G:V?^BAv,n-Kqj&pX\.d%8>_/R<Ah&>$ivqUDL?4-NO.ăU"GI_qnZ/X+1eRP3bTo&N#,]6r<&sXQ2FfITtX5-7#crDCmG&k<sVGQ\wH6,ld?-/ăU"idlC.$s>Iogc3$t2]/lNqTvl]#Ta$]H,;D^+_C60-GY/Z3xgy7tLxOl.dIeWrjiăU"j<8,Ad>1L$D,9LsZW$n*Ti^n=<CSAXyWgCs:&A2PCj+c,)JY</1lCt\g+BBKsM_ăU"uo,,0rjkSVfERHUZp#?1fhyudC:f(b[TGNGhv7H.:\/dcm)&JT9(a&U1Mnqn^kbăU"nBWWW_IbYE*#YK#H&aaYKv'e]Pp$>[4-=XO,MI3oZik'Y,ZA(p(j=,3m7A'5oaRăU"3A30nLX'Pm;/4>Y$U?bjMzomrcvM0GM/GVF0:jbtrm(8lDV0Ll*0rZvbh>//2a7ăU"+,Rt>up:L/*VU#/erc$h%.]Qr\cvG2z_8_CW,q>]e;xSk<vCq>I,Pda6$6L?:OBăU":S2-Db7XPBj7F^t0.mnFM0v-<\J[ucybqNZkgNxs=R<<ql_aYSjh83;h8Q>babuăU"Et,sTDLLg^?m.OIrk5lkmCTN$1I)Ri)/^TNS0&Cg'UF>ju_%$W+f(u[m^X$Mr%oăU"XU2L6$8+=gngqtR-Xr9+bl'7Ch_57G5Fa_)S;VV8F1mIOa0^BfGLQIGnoUUdJGrăU"$<]$/h/rPl]50(Uk+qcSR4YZ;0TZh#_ct&j;*A,-7<6*l7e(7Nvia$_mJ,fJur8ăU"L&Xy9bO;Ki3cEo(yM?M&CfNSl8AmCardO3_QJsS<Jq71f%_.9>]ZDQp-L#/cD7tăU"DLadfu:y4uvKS/ZYh+Y&8t/tkL7G_gT4GnIcmE.g_W2p6B_--?,jt9=np]3QD&QăU"uGFuf7U-rtZ7S;fRX0:lYw>S[qZPXc1.z\wT-TOoXlo5xYn8u3aR.PrPBCf#^^kăU"%fFa,SMvadhBmdodU]JaDL;VPY#u['=G6aNZRtO;-rD:W=*uC$=g5GDk76q0K3LăU"obI/PdS6=RIVTN>+:Z$U-T\lj<.sGGdqImAWgDjU:QLB.JKfK>R?5/\Q[+gX]qcăU"*2kc6Qod&7pXTS>UjrQ_6RlI4lU]pq.G<?(17;TR;K6cJCyFn.<VgnfnkDx8lCHăU"p9TS)zqS[ut>rtpDrND6Sc4x2V/H]%Zlm<n-/&^,d2F)SFV^-QPU?_Jlix7J(FoăU"u#X=*7n9541+gjD[WcJM'JhWm+SoCl]9,Zjk1wNg68^;bYgSL:,N&?J9vjS&ICEăU"SqiK,pjmWfuTs6E*pxHvSBvV)4TCehNddUj.LBqt0SjD4hI_[Jh'svY8H_:FHJ5ăU"K$P/$?Ae$aFJY2TN#)^w>UX5Nv*jJYX;o'pqM25Ix-B5C,_*w^J'-$*^P(+/rJMăU"8+6x^EJU2NJuk4te,E7L]yJrUqECHh+MilGp\Pi:_(oUAVC?xo$/o)=v]Ub+Gu>ăU"Pla59QnICGuhm^gdAEo\f<KLoQT66CI;-V^1(Sb-NGa>_cM2X:_dmrS.m1g67X7ăU"?)9OAN,X^gkD=^.R-fM3^wnHhI;n[]Q(Jdb9832<oE\u9JhWs9Nv[%EJ=o;wjZsăU"a==pHYJjS^I+RT'5m)K<s$:98ObE<sUhi2/rTlB8bh\FJt\c/K^I^L&N#KRepJ_ăU"R3Lf-Nm)-x,j)D&-q1damPdl/^('UU]Or\0tqOF)w=J>dnE,I*Cs)-JTsRmDOAOăU"L^KGC+&dV:sZ_xlZB,amlmV,.1Q-(fRyfr>)AaUfQ'NmZ'rRfu$-oXZ4);^+h$?ăU"R<$aOODm*2jtGtNNHHRHkfu2gSV)FE0B^>#^Hs0CWWcM)nBhX$zC1oSEp5ugo,HăU"AX8brkW&^PkYNcn-bsHYwq%:wyKzN3mx)SHFg?9^=UZmqI)(eOb=Bb0oZf)#eq]ăU"ebQ(EjcLaF*eBUTc,]Wt[7p:,L<'yh)L-tLV<N$X4I3m\,d1gYb7[t7Juxu^dnvăU"_NQVKre3n;fCdFr<t>Jt8m-jcQ.rE=/-Y8e*eUP)4e,kDi&EjgEmgE:#[..745(ăU"tpmLV]6em%FUF7WxfnT*ie>i^Y]fbiHi;qgb69:-hQ-,E\:Z07qh(^1LE-2M8t>ăU"IujfsjcZ'd*O7P*iPa6)E](6/_8(X2?HGDT8V0a2m.4EXF/a\KI'(1Fn.>p*qK;ăU"Q?Xsk3#AC1ocdtF3]#j5%bgchFjH:rXYlR.GSu>#Ws2RWVNZhotIZ7t+0Aj#,nwăU".fk[b&N)CG-UjW4.o/)J&T5<XYc1[wjJ&&=1Lp7Uu2nqVqULuh=cb7l03d=](8EăU"Kq22g[d6Zj#j+xW_J_>7ps3qS[rr]'6d+O;6WqtU\1e7C/ab0PmGDL1gaaF:&rgăU"cZ<;2bSGX2dseiGc1gxhKHfbAz$VA^,_*OFZJdh19lw_QF0&l^=InT:*?(1ppl$ăU"\Wa_X<1Yyb>0L$3y?h6FsAn/9TTKOVbq*#Qp%op]p#mW1<5j13aV<a4&,qdb9[răU"lj49n7x;3MJAv&fx=ss<2tn3u+x5.1*AlidH_B=b&$cfbVk23hUf*nB?ap1uU=/ăU"bnK=2_jUMVRYybuMItj9UIe1-kGlq;qaU;tqL0GkSB<v(TWpZ]h<.A8Szy$2a6OăU"MZApZTy9rv\JT\&\j6q63ahZ2Ix54m(wHFuA&M?Byh*7#KnJbsxGk6J4S_=;nL<ăU"Tv0jq'A.omv;,WacObHWKq0vn'[dfs\3,]s'4l]EO?t&PCV3tH+?Ndm:HP8^QoTăU"adt[-;kxAOkt-sokBK)g7:d6gQdn4EEh<BcKbO)ztOi&2X%My-0fe2Q18zul]OiăU"U7XMT$9h,SV#/:,YSfM]dcpsaTI3TkE[$&OX&BbA+I4Pp7pT/IyAE5xv5j;D:^]ăU"tx#b*6rHH?L,xokoX7CrB/Mj#H7exkaTq9$+T]lhoH4Rw%X]stF+W0p65#/&PqlăU"9g/sp&kQB>fT_&z-(RsJ5Crhk(,T#I3E%lnw>Tk:bq1mNMV:5Nfai:dSoM)dS7făU"3H$$[Ht%GClm+kGZ5LAavM39*<ODj7o3mel6_s.1R&Qo:l5k-_RzBZ]iEOnALBrăU"xVVwMoW]7:6_Cq*n'7;q(3RJ9;b+X(_(fOAHol%<VAdSxz^7Led&)'Ya=J'<O+CăU"s53hb?9k%i2tN7KmM;#2TnK)_wv?)yiANJJ^^+tN_*lNf;X:\ed7Dt,4ARQ\*33ăU"9TXTHdR^(oJGp=eqL+HvNEah<qn1BGu/010jOCA-/%vekH&%QJT5?j7PS6#.W-\ăU"rUfLVLuCp:8qjpaJ6V?:xb[Pa/#Owq(.:]m;tsu1$0^wIKOcl-kB0^.\tH<K0I2ăU"I0bTI&Sz:/H'\?k(?8ga_-gf:+(kzCn,D_%yItOY(\SSBPX(**P=yYWx\'V(kq-ăU"zf3<IvXTQIu6Ck>::=/ov^fiy)H?#:*o(7_%k>iTro1wSd).cj95E(zu^)&oK&6ăU"EMn%L)IBU;_mdjTubwG[;SbqN>^C)p^9hegjvO(3)j$8SMSfLHC]8Zdn'Hd&ZP^ăEND SUBăSUB V3ăU"h/hY/qj?48h1wlZHpfobQUQMU>gB803gNlt+et_b5)%+#c.'MxQ0Y8LP,KugrcEăU"6O(0^MsJ/vXCdbD83Y-DJQMo&w[.Uj4EI^lX>n_8>\:HP3yh).x-PX'2A?FwqaQăU"(R2A]FceZhm)\lhWt[RQ0.v)2ahLBf_MwJDHe5i2$[q>]Bt>F:z=+9FUto;Gx-aăU"QZ.Ro'Pi&c*q)g6F$KXLpNVevgQ6CAPWR:V\lCA,(A[*#cWjI&1+)&u)T1ug_$găU"Kje(Xc>o/yW]1,h8iMl;(d?tei&^/PZa73?eWXW=*q/.:[)>#q[NQ[xNbb6U^Y-ăU"*Vsq+%;1nx?#1no%r;pz.[khi$qSu$[\izChU;O)Im'E>ZuGqVr\*[bQw<GnGHNăU"YkkH.LT,&,OE^TVJtHCY#)+Cm<\qplpq^H8X;mF0d)1>dp$Q<;i<iJea4*S[o8săU"s)%3+01w*Jvzy+O,03.\'xUDu(oDogEEuoG)eSgTl:cN6N$i4c7x'7Jn<K2UuavăU"QtqUZ7nAxPF[3Wuon:]s18.O3C,kYb4cmVn7Pi;;OWDY'<gafdcrdU0>)p>(ki5ăU"c??n\;,>Fe3NknCx[.fFWTm>UQh=Pq(ptD%R/]J:Q#.irk%##<P8z#e+q/i91sEăU"4rPo=H\A=RDUIpR$jw,,>w$'l)bmD1pWZS7?&hfXk]>X'G_Q7&I7N_43V+pueG7ăU"T$jwqw7jco;EgvL2ebCN]V)Ww5j2K9$v=DBoPN:u:l3TI2Ag*yKGkL_nH_JnnrlăU"mjK_txkJtZkJ:X<nnVbL<hGbI4[JL#NV/F6r;+JQWvh9uI;RFZH9aw8/agd9&$HăU"r2oRMHmfiEwPR3-=)^xlP6f4.hJ,-xYo$w.w<3&Qc-0Z:_mk3$?/mHxlon?/2['ăU"\BD;XRHnKDOAQ]m;2^e[qmH'fJ,CcqL*\FtO[f$?-?TadO$o2v2mB=h989&w,huăU"p,2v.&_W,.7BW96h9w,1PgTTp4&/6u%(8oO=f<prjNm9L^[gfsVhsM[67G<-%=hăU"tuM6DmQO+7FX0bHVtJ4>KEW#^]uZxbXHFxxm=fc,LZ7U/0xWQlWHFzdmCpCq*QHăU"9/?d&PLSu<pph8NTXPyQ5=D,1e\;2:P#V.GfZ>A9Ock^\fUQt)Vxa#L&dw)I7BzăU"pQ\-K4r^:%%MKTddh=^5^f'dkp$AzPVgh&&3H*37fEai?&p'>tH'HFnVuou:Yj*ăU"[>$uu8#F)6lOBCGhYH^&5IbEOhh[4uE;Y/K7Arr]7QFoKyO]P:Q[ObXI.2ovwsAăU"+a+ai56uHXXqU7<e/DBqgkqwfZvX>=%WjB+7qp)a^ex.>,F^5QTXuWnYS+N=blgăU"a=-.n'w/gBsU&4BB6#ql,z#;R\W&8Fe=Z1>u$lDU+wBAbXhWu$T05xu$0rZGwA\ăU"6OVu&$twg*r2'boo4K\:]IuLkN])gTUEpC9lGU#6D..1fZ2nK6:e'6%]eil3nd#ăU"V1?ds*G?(?C,$F5VBYGSrAFo*M&j.>4qcRLE;^K<mN]_RN26K/D#<IoERdkqZcAăU"Iq\PK/?kt.h==gQ#W6mK9)iP&5kw[=KhFF[X58muzV1S/zPiWQ$Qdiq7qM)bm._ăU"C^GKWD]KbWb]u4_ZSB'$OANCndyr$7n9onHNx('wscdGP#p3*gMV1Oq&B5]=1p5ăU"<QGh.cZcoTa,%&APwbTF*tQXP0I+hx5wCQxuj;*U1xjO2Hvc7Sa,6X=#D6qZAjhăU"Xrg8&v4jGsRt:==7P(moDst4G)D/.94I]_As^VWEELJ[#ld;Ofwmov<1?qq*g7DăU"(O&6Vu/wybc*pdY][2>nQLu(\5$+NrPt%?^.Ibn8Y[jox]m.B9T8'7U9LJAK/DsăU"0=b%$ZNH.Nd8rnaI;s\oGAae1/o+XiL=D+8mx5AFyE<sAJGN&Avm1aGPnKg_)[(ăU")A\&')zb*;:PI7s8,cr?4$.F=aLVV_03F?QHceD:q^DVHQ3WKfX31?=uhX>SOrkăU"soM6m5J8N<T/]-xfdF>G^>uhXFJd4O7qN01OM)crDxQIiDL?</pd6=J^M27GscOăU"&s#]3wpQ[pW;LV-WxYlgdroZrCIJ0c_iQ\Oj5=Wb]2N)kKUb;$n1P(3;4b:DD0zăU"[knnYif'wS0k''P9'/6p$HP%jSMcU<dSe<<S%VDrHuQe8Kh)h1TlXq&*ACKPl[%ăU"V8;o5Lrj$]nJxFOr$bS%t3<+wVIVtn5?NpXy,>pf+6TdZf,6+fBFj2taT8WdbXWăU"\O>&]/f;MGb7ZLOR7j.3IvOH]jwBh'qYO^0.5jp,RXoR_ekw+Eba:ADhXHNg]D(ăU"AY5Kr:Z#<'pyEK6/dj;D&M7m+F_=3iN['RZ6]Qx1+CYp?$SGA*58K;zJig\8W-,ăU"-.k.kAD7Bt82:2mnct-DNR,,$xJI^&>Nd+WIlwmdn6Y7]X:#abADc1m%X\&Zvi%ăU"0%m?[I<oqA-cE+Kxnc[05TG\+wTEJ7(W]0eh3JatiB;5<3jqxgodPiDP16,?GjmăU"EMJ5.vlAN3mvs7vKGLCm0&Y[UyZC6=4>^9%Q,mW&E,1a4>*5_X]DI^tvPvtC+kwăU"%]j7yhZ:aXcJPW*W<[xw1KGAikT;n<(0xDwJM$HJ\MZq%o6gM:DwphM)/,mH-'HăU"J<UVQRQ=a>o=bH(,^lwR_Uuh]qWaFqW:azuu'[c0U:_1KH)S9?h)hobS7Te(n]măU"%cbDWIW\&CjUL-=Ug6J<]HsAsLoXfZ'uu7=vp7Y\gzURpcDguqMQl*/V7E:6ngyăU"]M^\cp+,YQrJo(ipL,q#oYiU>pg,1?+lm9'eZ?u]7uJR;imCBML,(eLXmbc$aa[ăU"*8\XQffMeQsPdgpn'05Mhr_uCkk'_qZ9PKJCxBr=38jJv5uYo:?',<[1$Frh7ELăU"c5-Vh,7Jj_d<ava5z&$mBq6[vJq4Z\=sO2RYQR#HJ*TJ*gTI*8uk/ofov2KjpArăU"Mh:T]Gc[Nc^Y3UH8/kp_SR#H;6q6l9tNY-#2Os]a#,us<&$-*$T1B4gFgN$XNY]ăU"VzA#j4[27-QR3$1HUfR3e?4\Xq:Gqh=<6JZRqGqflFS#dCfCI#Tb9JsYEdf]U;jăU"tIsspyrw#-aZUU-m\&vA$GjgVQ)PL]T&H31]Ta('=Ph<L8Y-##uU\_KRt[HLH21ăU"mM?Hlm8gbvL0G$),$W:x5dLp'6dw&Td\gNZH+I'$PLadPBb([ED-thS]&'hIg2-ăU"/.Fd'p:lLKh:qoR;-&6;$Tf/<Xpogl??aY<^RWI3iotdeEvbewiGs0loP$hLI\5ăU"Ts5J61#Y(etV+P#FDoZ$=R/,q7t1v/&=_Ly#$N8?SIb[0:$tF[q$b>]4_nGEdT+ăU"dbaAQHN1]\=igO.H8ikXKUjdOqqXEXi;_z+WZDl%K1^P%8cYWHZY>hY?\AS,VxSăU"8fG#hI*rpq]qI3;H^da.Hq^+Zbr$4;PmkK5qSTq1Fk3;bx8c.h?>hi0<b3;JX=găU"q.qg]#3;.tcb.+T,6.[lNgj)f$.#E7c.n:Chi[QJO]<#HwbK7nu&B,hc#f&dZGzăU"hy71x9gLGZ&HB]dl]ZLI#M,,G[Uo3oHlY]kL8q#XYM\q>=9x>>2l(?jtM\T8=r$ăU"04J=B<Xb6fVGLxK?H]eD.GGl$7=sb7t-udLdv,w;zyGJ?_FTgCDxT'KCnebVlU=ăU"_,,dT7b<HA)1yH\2r$l$#YHF]0C<Q9<dF#nZFgVH,3xK$8uXEaT(ovEoz,DJ]5AăU"GX$X>UY2e;b7\x\-kR9/\t#(5TYn7_;n'(x_XfS#[0\z&sIKDA%diI&Y(9%.j?5ăU"_^O,=A04ckHe[AkQ*M7W1JBAyy^p#hj-D-BHz=Gkh/:tvdNDaL)pSnRRIG2F8h\ăU"frz)aFRk=.Jdh3)QoKf'=B?RPTs(p)ol227lUHJ=K-*6%<'k9.Gi]8tkSwaoZwKăU"<nmNc2Admx1s_]VMDmn^sP7oYf#+KEpCEj>T?8C3[WI,,BK,ntwRqFZfaE-c2(păU"1v_\3*,^?:KEV<=cjwG5>PLkfUa,pDh?#CFT<#,nVw,aJlx(^I>Kq-<3Y57Mq:văU"0J1k$f0\aM]a4#2s9Z+6j,IwFC8k2vJ7BWDcQr;'=C4DzIM.1$[YhWfyQm5S\*1ăU"WV]k.\#GBL\$^o&Z6Sr.1iplEmybTVo>j1Cq$d5U+2%d,2EicF4+rR%?#lNGb?CăU"%YR5LGIcu+Gqdqiha+qD&/S6=SXm5Q<fG560rfnw7u=FJUw1PB]3-6k\J:B[LqiăU"^N&lEvDAkx3.Lz9#5s3Ce3gi&[2)3>i;IJee46BWD_PI?5OC1.iqAzkBg9'3uq%ăU"B]dQ-RUIJu)pHP>r_ZQ$R1te*e.lqSwmvh3Qaso_2z_iC<DEMrK?r'-k>m:314UăU"9H.Bd9LuXqhtT9IhOeB-L]7]/,7h$A);97Vk/DDT<CbuyIMB>T780vB$[L2x7'$ăU"KnlZhp_s;BI^#^X3H[aIc%raqo;iYFn[:UHX'.XH2ht7pg^.[oI:o^?w+8Md9>NăU"k9)yV+D5ucm.ir7gCpK*j?pGkXfikWQG*F%H75lMbQ=2_dyw+td96FA3jUCm?EEăU"]8+]<6ptpXk?a-:cE^][Em:Jj*fq2?)NDfayT%wowm;uNY,7(CVF3$x+oP;u?$/ăU"Cu%T\vIz/^tgaE<8MVwJ0)p/WI.=9]'OG_gvZgmJqY.d/U)[-)BA,Kl.dIgTMabăU"hY3K,3'#bt3CqqJ,IAUqp8csbKOa>aFG\jqamnG5sSPnmH(F=jIeIKp7tuR#Z_FăU"UbwmMMa\$[mniCDH)\I<FT]FYi1V4dVoTpRq^#+J6]6LAcy2Sj\XMgbUP#tth0găU"*6]<x5^\p=>aIs+PhM*SmHuvAXUX*]Mgeg/q]x5UX/Vi4$_>z?OaBals-J*:EM,ăU".9H'UxcLi2W'^BV<^6h40wmtAlUTMIcy_c]a\ksOZE=w<e\-/#tP]]0r*>grwslăU"<V8t5CL9^RS?1n^-+,Xj3c<\H#28,WS3bwcmWl=FuYaU1RhMI&pfmO'un1f=m+văU"n#qfm1KunqQq_K:uOm[Q_-5btW7K-BXTwI\Q>_U$tJa]cS2EaxM)aQuQ*irm.:găU"$qlij$O<N08dr]qIKgsuAP&E##W(OaIv^5]p9#5CX7?>C78.))#T,6EP=e[M+tXăU"kb)(u3pf)DEv#R&YmHjN+lMt#OqLax3<&G:8zFt2ek,j,=G[WY_k7Z[I]O[D9VNăU"$zrc'X&iiuEUnzn+d;Z]Y^)N06-$0MeH(qiXu1wy^G,n1oDXjg,/lr$IeTN#m1YăU"z&#:/no.As?f7<]+)0ZSerE#$4:euAJVOx'mUMb:]Z[qOjj]?C*Ph6GM6sK5W9*ăU">2V][Q<McaG-aAbzHWe\wXq\N4-[oIs+Sd<w+NwCu3U]Er\aHGnQi&)#9KNJPDNăU"$R5=2Gu2'ILx+$Bl6cjz+b7KJ\6j-wW/AT_:BPFh$*$QUnx-f4&o$mD?=Q.YR(CăU"<^[gi*s1qeH5><.8[y0c(l5cxM.Zi;0nz\ZW_QmC0lYBfFxl;*HV?rEtB_eRDh5ăU"^AV8r6MR_P%:W&z*iK&[*bXRK1?gh2b&qpyWUV;:S7_z9UTl&/U3K?OJ,Lx2s$kăU",lDrO+8o&Z3])U6xw]:_j-)]Z)bR;3nYt:eZ;RTiN\D&D%*0Ghw'+/$I+&gPiEZăU"e''QXT<W;0[$/O8lL9_uh#Pekp6Eb(k;5e(wY:6.yE>9s8(n8Vt(n8nX=?RkOAjăU"^PRVYn<K0.VtEn\uRLk5$gDtydC&WNjE4sr.o/LOjDyr2y7WlEb)Eg[:ZNWO9&hăU"D=3PjexO)EFEB<hgs:h4/HCNUR<ZRyH&_?z*V)ryN_u)BVhrR9JzM-78mW&JW<+ăU"T3sXPP.QQLs&tz(bNfcrDF:R%i$3&I77g2B*c?g/Gx;a7)[XYR/g:.8/\Mh>oVRăU"#ISi,Oe/<U;gf*bi&m2V57CD(wTsX.<[h#kje5)((i+Dn2/4KR#[^\Fwdksk3.hăU"f5j%YQ,$Iz\gZqDf<=)&(aZUOSlIA[k+PO?>NR1=9H%XG&$l,o[JzADw2\Uu?8zăU"9.vtl(.J;9z+x5,O%^ucf_bhD\D_QS3Ih$Qp5(P=%>y,yZQ+[/BI*?OOMEWNumuăU"A,zF\=\QF#YjE^4StxFFU])e_s64<O]A88N)QAM:(z&HJB*fnql%&yRY+31_QPCăU"q4/z<j\P;***iED\_T%AlU7_v9;FH\1#Hr(K$ZEAQ3H'&g#h9a[EF&/\'qxS%FuăU"GOT9V<zn%hea$6U;AgwZ(Zf%G<,wT.M:P<lDk*kj0kzlbf$\]s<_P]$(EQ&uT-căU"'r[\^o#j#o<V;D\lJ\r<\]wW]VA+vz.PV_xy2F'tSMOAt3lN]r0*:U<BW(tR)V,ăU"&4T;&Tkc+<,Kv+dNr2m2ycs'3kP=u+.QJ<*Q_m=w8-U>G7k0et0fD&Aa1F]PQwHăU"UZ&.q$ky[M5*2?v5DTU-+CQN18cC,Qe'ZkRaF[wP6;diI%/.rhA2Zw'%6lJF$5-ăU"ofsyP1jY*=gNMc$7Jr51,,tcF<5&'z4vYwR[Ju2'*>13xy7jz,pB4KCVkt7_H_PăU"%'MzDz;gca9JColNN\5>AJ8*3&cQo(R0kLR)*3o5TcGpkb<uGX-;ZwAy\Wa76,aăU"m_5uZqAZrp*8lBc?rRw>&qypBJS7L^xTG:t\[\z2F&5x:N4=lUKL)ujf'O/'JUOăU"BrU39Su?U>7E<W56BkoN[NPF\.v:'C17xBoOwA[fZ0haY1i$+jBWXN+A[;)xwtoăU"L-)eI=9\<<FX'i=8s%kJ6^:cKLrxhmRg_.pZ27'y3J=3Pl=a\wd(N*1nkY5uj;hăU"qD&H^99I7UN6RhumAJo<fe9'QF\ftYXMZ_AJ5jhTqxe_Aoh7YGL2P]S)ca9>lrKăU":jLa%WOp25=,ayDp)EY%=9ELI2y(jqy)&_._701OK.D_%Si[YUHHAbM#DryMR)xăU":g0$z?m]cV5=3fJu0.j92A$SD;/7YBYOxk(h3_iyR+Mu+Ph_%t8hruvtS^$ouAKăU"vr)[r2XdEO92U/_5\sBQQFiF3uUlp?vPeJ2QcT)w#8YFBS3<kt?/I[=YF+T:h1VăU"Eu??]j$dVLG8E_$B(4<yFf'a.ID3u6YwAPV/ZiI0FY#=?ZJm8sHa3CC%7T/Sb$\ăU"Ckl<>?U8(dUMoF'6=DZQ#r/0+X<L*FlU.>J-9M+c^f[=>\J3#ZQXEtGv?0*c-95ăU"+5^<p*fY\jj:\lWjqYq.Z,D7LT24+)auHq9[j:rl[1VuD?#AFBO4\)qBJ1=DZQ#ăU"z&067TU/=5U7jp5M^]n*eH4C&zazZO9#+eZotUvd'(d]R[%B%A*952q%0iVo<dUăU"-W5H'QiCSF&ey$p=4Yij.D6I)C=__G7+Q1y#j&8*%p%l/*NV;dUuXa%,%l^%Z&DăU"L%4OjF&0(97:C.%%XE.U[/54A^%3'+VgoRoYsVE:3oNMZT,[8?=bk809)BiUS/DăU"YHJXLyroTI3n:w,V'qw3xSNdocN^No')S%JT4>aE(0rY26=ZT&<sGH,IJ?:'T'căU";(Hx90%h(9G%wF6j,%oP.g&dZK40wHKW9sID+-F=nkQW.1d\&WZ-]N[.5W'BQ9&ăU"W#,q%sC%u&5F'_&Y7%P?.G-P,c4p'jo5X(i%$RvcSaOn230Sz#3(ejI4PCVxe.DăU"eROV+Pu>[*y(cC%F&)^&*&X#(a%Ga9ih92bO6J/Mhj[O%%O5XK;.O_\O_9OBe.DăU"r6OuxC%G>?+m[J2.U0/&G/d-j^&g3Aa%]&_4(s1kC&u&5(%u(W^%HaFb$[i5/F?ăU"/+P/3ifY2Ax<l9tOHd&(O)6j>uvu\v^(/m2ddY9L9)V9%B)oYJd9W4R=dg%%x;1ăU"8$N/.EB_*rAfqJl'M9-#Ph%IJ\qz,/xf',I-*S8-MbGs%<I$NmS;mjnO)91tOp[ăU"uo;*AxaK9O9[R7Tbswt]C03<?H&/OExk9H$'X*+hZ]K,9+P:4y$3xlO;VX^NaNGăU"q:\<M5dI?v,w?ZLuX+opExf%74\+-M>ynb]L(cpg,O>4&b\9(L.\*_SFor%tI#năU"<[R'9deOO5SIx'pOR]maC4g(gZD'fI=%rx#uY#<md<;o(iNIZ',)9kz91nnqlsKăU"y+_4i(m?2ss^ckxRY;^OP%/N&K10q7?:d5_pQ79213S_a:vkBM&/MsBAsHsA4WPăU"n#Q.l<ZV48uFxQ]9QeZ4)xI0.AHV#Tt(#OH9*q,J^H,z__NJY=s9_.fw[W%GvM[ăU"W)I[?skFv>(8<wwxa'SkggpMYt2.?Lt6CxHxE*xIqHQmC/nBI?xVw1L=W9Sa1oLăU"V9_a=Q***>uD&Gu?:jD+O*r/YrV&YTj>u#d([^O+Fg1KLhOg:)[:mSJTY(o9&9TăU"&OX%\A/55D,L*N6/_*g40q3o/0I)7,7a)q*0Y4OH)OF&xc9XV9=WiQ,B14aU,O8ăU"l&4092DJ/PG[(,Nt(4W9n0mU<u6#1M)^qLO&Y]J%ChL,KRC.h7Zr(.O#&9l&d&3ăU"fOn%8-+u:#e32eMhff$LFMv4f+QMHbag^KeLK+rrNj+,HE2agofDEnd4S*dUD-1ăU"euFCFEJibB5S%+M2h-%DGfE1#DF90Q#TD;0hE[eP=r,'gE_hh>mkj>N,sXQ[Op:ăU"tqB-CGZt=N0:x*M7th.]<:2uwZR_UNZDB#WWWGV?%/N-m%az91=G#l/+KbW-[e(ăU"F*[&HWlJ'CnnJVlb?5CMSh0Ri-;R>*#>>XGD?$-Q;&#H9cp%1rOSJ64anpAbAmPăU"j3ppcRK5jRw5(y/f>NDjl$<*Wx;l)R(q;,*#5HAYdD_;(fZKeqqohV;31D;<CwoăU"=0Dq]&u)OrS'jc5t,Be+x*=*J-wmdP$#N63L>5S2*+mrL.Z9bY=_+5Pz.Ukh:?aăU"DN11:2gxdHOh;T9?bieQNq2lc25hFizV_dBNZ,=h1$bespce%jDNC(-=<n;M?EVăU"_2=/H>hX0kW5/dqC*1'%]PXpHbX,T]$iHH2=OMFvnJ(Nm+)-Mklh$4RV6oip+%)ăU"2;)#Fi=3uuDcxa4mNtRKQLEk[OqlcT6M-8/dKp/+.919wGMCwmMAcv+B^NtMZCWăU"Ee/%9fVUoV&yJw8Z88?ks')(HM.c.&^V%aXHT9P<Ay4,+GE\b/d,C_V?AMH-=EIăU"k3*'o7yja*,Tp;7TQm*X0A:>IsZZD7\>4=TWwd5q.'-'p7+2i+$7enPd&yuu'>0ăU"Ei9s-]shi^</(OQ;mPA%Dny[-q&?P/oVLP+;=:<&zD\'K*uO-*'iSV,7ME8PYL,ăU"*,RLhd'xr.y7UMIvyg&D[#-#'7NO>R,cSh.G\.QG'M:*nAzCFpY3>fkR\9szUCPăU"7^ydpmnn+hd<S./Ps'oxmC3IE_hKJBL4dzoEC<3z%eoPs9<FFxZCC+ANKUX*h'-ăU"]>lNckR#>XWV\rNPA2kh$Z5B17v=l<>S8.b4__B%s?k?jZCPBkA51E#HntWC:+PăU"Fp[>u6p2'6/tMx2D,rK>9Z]NRTTvDh'10Wr,nXr6;d:KPkU.oq\=BqQqJF6u8+băU"8mWDsNgH*NU-tEpPE7bdu>7\hHCa8lMU^L^fRdOd'XY0[PpLnxh$UR(oHTWo-utăU"66vn.1'wcV&dvrZ\ZdDCe\MJAl8nWpCfN(?agCt]r:1WciPMd$Nz]L<V-JHssBDăU"o,C5t*4fsQP(7/Zc,tevN2,B=pW<tpuI(%xtK.r'p2rXwNT2&>8(DTC<89%clviăU"n(r5Fo(>d_Ad^BLdgtbk[HnMccFU4>WMKx8N7o3]fu#\2X-cuD,tY5wEETrd_LPăU"ItmNu17h1_0#o;Eukx;-$8rqtlsG_Y4#xMst$\?e^SKfUcBex_8'+E,zX1&d:3#ăU"NWk^HpKG<rs5tSpp3h'05T*[ZA_faWwP.'pf>zvmz<-IKgS:T]zAf^8:IVRj_U/ăU"t=lcv-?\i0q1m(RSYv^dtYq8)gL+AJ:;XG9Ez5fJv;c%wQR9hZ;Pe3Ky.8pts&'ăU"ATTR0kPC-PHa)'0uX=lo#p-jwQ///bE:e>\G8l>eYDOjf+va2i2Ifrsf%Og&e\oăU"hq2yF2z_RdTu73n,?PZ75HK2/ZHY'T+qQOE<j3%\k\$N1miK^J4H(r3/GLHz:sMăU"TJ$RDDB:.W2x[<OeD*kdjoJ<he/d+m]-lr/5ZIm[.5Rd+M8]:CD'AyT[pOA2#=TăU"y%ZgIAS1n*4nym4RsL7aT'_;lZ'N^V7jE#'pPcodsHMI/7#o8p#3)cI)]I0wca6ăU"%l1m;\9+k)/8B,K%trgpx%&t^jiUXOT?HdGqf+COeifPHAt(NYN8dmpg=l7PIAJăU"u[#kDO5]q'OXtNLY8)D%s+?;.Qw*dbd>X9v9U$E+XAChVKT&+PlOXL-a<1jSR5dăU"U>tOtxP<.-jqGB4;NsFt-tc7Ff?D&nk8K.FpIrA%uaBIvv2Ug2.Xe8xvIN>>pp&ăU"8..vKcPI9i+E9m)\W#Z2MQ%#F?&rg5A\w#YtQ]w#.x7a#xkr0c^DpQQmBbxrn3răU"PEItBAM#c]M(gG]yE2KY0Z?J?WY?&Os;\^[-DR%#vZN?Y^gSLgJcA\H.'*vMw9-ăU"9HT.;Xt6fs&bw$qGruP7cK)F;(0XC4&WY<p,J.oJ+U;H[#MwLm.;[[V__Sh/[^PăU"Q##hql[\2\pHKjEt.cr?i/QdDRp;'1iF'-/;j*)^PrOk>6'>U0=$&e\.\6)M(f8ăU"Dlk,\lO=?e&PR24W;>$upL7.tjd,un7GH_9=3(;BO&RbW_A-kx&u%p()9%%%%-UăU"%Q/C+A):L*5sM%+%'j%%%0%%%%yjx(y%gj.Sj'jNfKNKdxzip?B6Br8A#K-Vtw<ăU"SB)o9z,d*szMQ'Mt'wQ6I/t'Tgm0y*>9mKA1(24X(aI09ncVn:OSH<=#M5kH,EUăU"x??.lpZRBS4Ht'4H;l1>/k#qQ'SKne[]7NXB>a\u1_lcgX#_9bbp^iHHm$aa$^HăU"bHG^P>HeB\IZ\$v%n&>pP3r5<.BvNX[&?WebICh7E\v&ca'o&_3\4W:/g0O15\9ăU"kLF'lAoa=il6H95''^.G1ITB.E:nO/9\2O+O>&?nLU/n()%8J%T%7d'%%79%+&RăU"?e0%b/7)uaCi$9TH%.O*^OD']3X)_a-Y5Y3POv&3$HP^a0q%i1tOt%a<Yc9^YO6ăU"iplr9uF<Y<O8n&w>')>u&8g&188_2aX7ecY5WY<9:;O)9gI%,W6a/EN9MjO\Oi>ăU"OK9kG9(,c9u))a9Y%U%-==(32O.(/M)'']aZ.E98&/(9/%C&8B%\&oxs5e)jO\%ăU"0((-*TuD9=f9pO./IT*3e'&'CGJR,>sKxltGnXZMO,6;=FUt*ut#SJB&1ShiQdfăU"spD:.RxE$MqQBO2Ig0t'$;58o=E.2rHrf[.#ibO5^O6l_h^tBepc65vDl'd+c0>ăU"i6]%7h_H)/)QPX9Vfdk^wNa$fU,-/bpFSGK%X=$d.x2q8OUoEZWWKEnMxaqMuU\ăU"+iOW.+/,f:5i+E_6%dK^L(?i?D#Sc_HPH$.UL?]ZN.>3RnbbKQ(ON0PJPProcgdăU"?]HorIOtUk/__OFD&'j\,e)_mQ2sN3hM1cnU8O1QM^FIlLJ=D:+H)\V1MR.?DKtăU"%hv8/-o6eChS_Vi';xo'dYyxK1Yar\X+,0_\o^eq+K:9SUenX*Xte&IXrWPYcepăU"D^LF-IjHArZOS6&NOA6%tb'Vk0gQCl5x^jr54,ZXTz]AdKDspTT>Nl\^UPkSrbpăU"4gB:d$nSNY'<]V[lL,&Up/f4FI%z-Pe\t[qSDCDFO5y_pUv5%':pJ.8bNnD(\CBăU"9%YlLt/9&ZN(D5Tfd<K(<J)9fzIjBYzfMGV[1?);4U8\qx<qT\pfZ+JVj(+//kVăU"_:gQsS#s%kPC7#$(R+<m[\x3ZJ1<Vy804ssIT^E^[cI]QS<\6j4ek)a/Vfq00+XăU"o4k\Z*epZ?kd:n8eTfjChoxt*Ie>jeg(%AiVMaT/hLP$G3B0euHD61f'M[R70H,ăU"5SuNT53*)UiLkYOts<0gGXbqLE3Z2Y/vZqYx-?DDUwqL-L+$oEu4CjnFr-Xt4vMăU"Z;-ystKDxN3evK\W\'OOt#4:exCToX]w%^a,uAjA]lPRM;,xfr&zn+gtZi[nGnbăU"+M5]O<;-bDJ9t]b:/H>d')4+ev%q-=9m8=b#&A$ROr^92V6vKZd&<gydnBkp;W9ăU"&epnf+G)/NM<TdVdmp#vY#^O(aeh[c>7^EabJZZU>[Huj+a]+j0nQCZZjeV[^5UăU"G[\g4K?np1\orh5I8X]>9],3+7s)3m]Y8x?UlGt;<Y3YXR7=IY&$([wnkL$n;FkăU"c]QWjV].tB&aR>#-]D-^Sv3pJ&/jsx4B%e0h)(s;:d$fW3-27Xoth?*-3*e2(>0ăU"aB7(tP_>5Z\J(fSg<O,l/M'=18lv_OtpN%>FAK>lFa;(hZ'-Eb:caV0'\B>4DNiăU"+%_,_'(Rie,tXWB/<M70Y[8pMkYeoqnAhpFxLx1^T1ckanT'fW$XhBHPouWAxYAăU"PBkcGm+c$19Xs^\\4=s<tRp\ZnUx;52aLYE\D1qFCE9p<Pq-$F$[g)5rQ,fl\b)ăU":Q2]=Va7aeBwh;*DbgUh1PeAlFL8]t/]Mr>a]x4gY1g)n#<p2P*Zj\Q0&#5a$>qăU"x.>KfQ_oq,U4(zFlF)[K'kuWZt[P[^Tk9\(6TX1m_>iHAmZYrVmdeeXi5eL$Y7jăU"=q[v,L%Mdks6l(3J9vlP(?xLl\mTv']2bBn&L85syul+q5B;6_3n&ga)#0lc=.DăU"x(PBnP<^StfEX]X*\M6XAJ&?6V,ki/sgQQJIGG?iDsSblqr'4X[J;R^VgIS(>DgăU"pXl9J7/b9m^%?p]bbaKiW]eg;9tsbe<cG(CkM_Z.oY+W?-xSWO-8cD:7N,*OMelăEND SUBăSUB V4ăU"+A_FhZF6[6pB6S/K>1SWJV35$VPB[XEO<zIO^juJ+ohozdQ3=T_snjTVH]excK8ăU"q$3meG.k[<<*Z(LD&3;S#2Y?dmSp6cBF09-Hr5H#,0*%0U'NrtXP$<ubxPw/lfMăU";*f9V*v/4=k0nPn<4I/LRp%XpFp_xE-;bTc;OxS<$>BOc1^2ST\R$.=Gg[[]$*găU"Skk$,qhB]_aH<>,3Qr'um%\,_Ck)Wa8),&=TX_hF*Hqq'=l#Ov]kk:;s8?:DcYbăU"e\4]0>_b0IyrWcJqTeGGxN(Wx3Ba#;SkZ^fNqmN#w<NhRT3eS[N;Dj.'j8)eMFlăU"ktAnRto(Tw4#MK*Q[5^Qdjb<G31\;T?3M_AGc^[6'8Ql><t>g_%PC8tKMj<Df<PăU"9?GTwZ7[11tir*$$Rn]X2k.T[6iQ/+D&<AU:e^v+8v8S;8kD$XCul>LDw[p^'4$ăU"VLNS^='BxCWyjlif<,mqD)tQ8OXG59hyY12>:qTmkA%alP_Z3nOxDMh,09?e5Y<ăU"]?YtY<SC37\mjw'45qnM?>Co#dV[cJfqi^XOuCGwAj8kZ0CtJ>\=[Ui[H,F^gQJăU"-xr3\cG1c:a9T*%#3kogwSwKD[6NUkbiE2I,NI)*U1p8sgWw#9L?70srsibMP5^ăU"HX^&efXkg'b%$J+KVbkF5K4JmKNW9H2f>D3)8Oz6B4/0Rdc3l+.5ffTP]#z.?4<ăU"xChU:;?b#(^Y0hL-xMMz]W,<JQmKMS?4U<VS-2ETkh3'TaYhk\(SVn#5eP\m$WjăU"q^PZa3xf*^yjTX^X6s)#y$eVXn)]ZU8cP;Q6M?4cxm\+'ntod06gHh(JQC1BhM_ăU"g;BHTLt/aaQEEWB$96)EwBCw#6WdpV,56lR_f%-$<4HnY5ihgKjeMo5NY6AJ[?uăU"<mjk*XcJl_N(n4Durv2A-#9lnt'*Swd+</sV-6-9Q(A0BSMaSJlbJI0</ylV][4ăU"Ui6u&[iH=<I+'%KUy^8UdUl+K4c,q0K]?W?c6aCE=]g8sfsO5(c4x3(3_pk3dd#ăU"Cp'I\FHc]5)(iGi>XT'0qJ.-GwORuSc$:?2[%)+.QBj1dwA<tD=$jS-I1:S%fBCăU"hx\2l[m/[bN(SoMkozZORo-VePMG]&$ez4%xpP.20ZIy]HYj2Tv[bhfQH]H+[p(ăU"zgeS[viLst*M_B'A0#iF4cM5J$E\kSJ7m$\39:U<KV76]G?noXmHp=CIY3T#6<măU"o8bGEsWY_2Bc,'xK^4_(8we;CF?nK8v;V%1HmGk^>/<,cnXw<O^c8o/44At<Gl%ăU"ElQbwFxVq.h'7>L[67V#1i.F(IW9N;ox9bYpUlrWSP_xH&&RPZa3d(w)B?oQIvvăU"%C/-u&&d8^xx(u>VA-LHYaA1-?ms\u,Zl+wL<CPUbUKP1%2u4*CQY/EEGair<NGăU".MHS-fbXG1,B:DmC]$SL$/Ka\<kwm4UT[.qdLR1E%(pco>2R$)mMu+Ml#z'8sblăU"IG%34L,+EVu3<ZVCZ==d5a,()ut#[No9wac]?Q>O\iNnC-F-P2l:dE=X\[dZ<#dăU"DcL%V_N2ijNV>I8H>16D(Vt'xN[n9f3(oj[I;%BN^qs\eqj7Wm-_*JUsXeq2$HBăU"KZw-EQko_MW4B1$$UpL[bX9U0LF&X6emV\_NvI8uXKcTBFCc$kQjSDA7va3knH*ăU"0aFWR>Z4SWB.r(gQ2;Ph<kaGU7+8F#Z:d-x?kg'GI%09JL7o#)XZ%Ay7ZibzGM:ăU"?A#h$7'Hl:S$3mWAy-8+Y7pUNxs^Wre[h22__9sj/UJGqw#?oVKrY2T.8pBmSy2ăU"o8K21%uq?aS*(#njP2]qgiQ)SYK?k=c'L)bpew5a)NJZuN%VBUZd'3gWXUJEsiAăU"c'?NM;/V)bFn0%SPnoZms<tO-()'3d?xfnE?eL$nQ[(CN9'm?_QWTlJ.4Fa+K]oăU"'0;ntmgRSgskK+Acsq&eA-cPxSZ6:'+<D9oh])qH*G/Ubb'h2'XU2jwP4?\g5OoăU"<IEWw^o3$]);7ltGMWiMs*Xp\QrPe30Z[UPao-34sCr.SBQ?XSahM<C*lSH#JodăU"6fraaiYy/V2,KB=WX-=U'6wS\+TUt#0KR:k8EcOBDSNZAcY?/q[A2gue_fo>Z?făU"=FU3I2Opm9^[6y4DlTfL?3b+^v-AS(1P$gdP*Gbvrk:c5o:=(X]0sMwVEJVcd4hăU"5In\xS5-Nt>W5[M#\tMmn_G<Lz6k,dK;KoV,HBUY&11nCn(?]Z$KbL-Lsg<mz-eăU",_vv[=q;tS=#T1&mHFtBDz.#.pb>=]ZLC(-XUgbtiH>[DA)3G[0+,\arKt=Gc_9ăU"R]2oh>Q#]_^A;2>DPXhtB&hBsMrS;faS0m2L1:3Cwqh;8#$fnpv]8.F(\r0#pkTăU"Am1K<w&SMo$1=D(\lRzebys*QhB1FNW#3N8HD2;tWRpk5JlHnQX8sS7bW'P&'?4ăU";*>q8BP.M32([:[=[a\*uXV[rM&oOk'ht#\QgP<c>:8H#BZg1$S\&,LoJCu6;[tăU"d-AhD3.Bj9g8a,9)WICUbFWY<2n%I^XI>3vX+,YVCjJI2IFnhk8tTqk&bOG\.i>ăU"9C:JUB02)/uK?Bc(h2FOB:'oKK8[?'ZTKI4G<Y=CX8E*ddZI3_KS:#-Et-geD?EăU"2VoChe*GU_)-/>4i2XIC\P2s^dC=LssKR$0+UL8yqi%;Yz#UGS*%uM-QpmV)ZESăU"YIwU(+]H2J%R3A3=-^':_u*Y)k;nMWSa4&Y2:5lt+XrCXu<*KLon.^YunR)?KIrăU"Xet2<U\qYyWguzsI9>e*;XI^QxD4qhA_u&L6L:VmhE+1%;6&S,oDX=Lt26(g'PXăU"1_DKIgA]'JX2yB2;mZP8>1&uWBI$OmUrlMvcYTFSb&)Q*]M(=;'#vC2;BSA_+AiăU"R57E5D?;e)ikiE.2+rtS6Nk-m3m-nPbi^vFWF9lT[0+sa7QIhIESCU7WlsKW&lBăU"bo1^Z,xD0)[j$IbF-MQRW,)YdtKU:o4hN\qbZs?b7>&<evakaj#;I_gx=%A.AL_ăU"m((F?V+PfI\KlvlrLYd*9=[9RU%#T3*1&hEPL5%mXvE_qWrLTsRR^ajIbFj3a\aăU"t2]]Vc4vDUcWbu17.ZMye>KCG0PB>KlW>\8IGZTQHG3m*XOD,s4#whX6/,Mq4$*ăU"VdI^7#%R=vhHFWkmsuhQUus%8*2L<k3]S:D>2q7Qco%W*CuX?wdv^<VpsQBnr_1ăU"VpSm#jGSxARYp<&5w2w./ABgQK;a#g1B;78jT_CT>RrioSyG$q<wWvxOLT$C2:kăU"Z)rj[cimU5*PjQfv%'=dM(>qK,L=;KRH_bs1>]Evs*FVVq1*diUVdkz6BrVv0Y*ăU")/_Zc6ie;f_*YF/vL<33Gqh5K#6^H;R-e)QPa380/AlM(BYlLLQ?htL>#WZei;qăU"q)Ly7qnmW)36._k^BrdKPoO,W[[_T]ktvlW*tC9VSSL$YapGpjMtX3(=fe<WQcCăU"[MJWJ[EyeV[BDWqR6)(m.wG[C01B9W1*:u=K7b/KY[H+e/>L;C<UsU)X5u'KigHăU"DiR]jWUU=V$<5z+>,mQiLXg*F.Kv2Se==rgqtt>+=7Nb+%/LiRV9%+Fa,B$wVe%ăU"+N$<AG.X1dM]MBBPpKErhjPDiFn$ZoQL(k=V#)6$G6nZ]]v+wo\f/FAxpIw*8.?ăU"0$8kPS#$9OmHF>)7U%6Al4_VbQgfR1<fLVQbp'.hS.YQ]*ETrll+e3/hXGG-i&AăU"CYJg$r;'8mldL\aoN>5f*K&Ygt[8WbXmUp#iYsTS>Ag7A3.u?Cj/twI\YUkJSkkăU"Uzp<l\BxI2IMqAnh/%3eujz8n.J<$_on<Ml?hk0/'ii1rcL;ER6SEsp87-F%#5#ăU"obIkKGG#N\lLeCqLqMi&pM8V0G#v0Js2'Y0FiZlhax'dv+s'+J#^h4n3vusiRNPăU"Fc5,/a0;h$K)(3jx2lEg1d_]qC%YGngG5z,6v>z,pMqK>4,Q(FH85(t[NbmjXeXăU"#'<5dVD*aVl+)7c)F^-H%vh7GC0Q?FDs1qV%+CW;^9>L(]#8TC/UnIo2YoCCP=PăU"97R$.$l$[8SX^P)BW'H$+UxoUsU.=[R:t?:l6.:tq[u$nYO5AfN96]&LY2V>Z?%ăU"(eMN3oyUR8+*y?NRvjPzlqyA.4yjX-N'VT?u&^tyOXcsAu1FJH>0OKx)GcTt=kpăU"*X/R;,D[Wk&KqPS<[3(fcmk2lRQDOiVow.GTJP[Hd5*D:84qiV)<?6<umknlRQ$ăU"$\oV^H)hBm8$maX_&D(Ihm9-qNVKbYggQ3?[r)b.sK+<>=wKJ4RBMC+Zt]d=]eFăU"rCM'Za1K82<5^RO5TA)+j0*J*bQKV9i0>dX)va9%qhAc#pRTMX?mJ&J(;Vqax:HăU"&lJ5-c::+*Y.(*dV-klZ?C;Jj6;kD?Ak<WrbfG&>Y47$zYpZeongS:ff;BHN#+VăU"Z$I<jW+<c;bxW]jJ(6/p8\IPcV6K#,LvpP]T]<5FDpX^FvqL/=JUE5R/Z8Y7[egăU"LE[Hf7YWKDQsa:?4g5H_q)I-jEONLcdQ]P_*MYQ8<nK&Y%eteUf0jvBE:,[uPa?ăU"oADk0wlD%)F2j?YksCOac_B%wb)]3DI*iaqO8d4#<m.WkFMIhS8h^1\1KTUcELEăU"w?N6+<h.]L^Um(+-X,n7afph1A9Uc$#M*]1k8KD.Jk=)_1m6TN_2;-l<o,biV/>ăU"S9?1Z^<263f0VX\rDn80s*/Z]cgDTX#L8<0Q:w-j94sVMCdf'[#4V#6#ig?+WsUăU"Nj^K_N]mU2bhBA:\qC6q-jL)/6bSOho65-mtX'8MRjL3&P4iRZR[EsM0TqJeRipăU"\gaXY7YU,B>=&8$sf*^u:CaI>;Jyb?(j<T#hhuxl\:ZeV)qX$rA#LDFa?[s'EG^ăU"$3a[k'//*-V]BLVNN=^^(f0r0KfAq'v6:MU\gYkf&_:x3br77y8ACorWtAgn3HSăU"Cx<.1\<pr=H4BMT:/FR0bO\Y;'j'v&ILkv24NZkN8Y^=Ai55Hn)3F=:sF.>,J&uăU":#DOWTVK+A<S_c6wmCh9OA\4HhV7?[S<Ur%R:AA:rlK[4fJ\QE<D>-9jM*s-hZGăU")lg80^F*QfK((lVOV+K8socZm9B4.]2-(-mu47/8IYP1<]D]^^P(\*A:/Koi%RmăU"N1Lo_%VETj96>W5t7?W=8O6UqHep:jB5#N0&jCnyPI6Ft+w29m]WS;<n#/Fob/*ăU"Ns,?mfzg;66nU*10LTcb'z_X+0eSpg&A--u8huY):JLO[r\eo-051+J/cD2XQePăU"8W$Y\_m0lSV1ntFY-btV^Mh?q8[K,tSGsqsg)KD.JJT&\6QpR<wJ856TK%+3&jUăU"=Zm0O3a<$h0rE([>A7KjYis,HF=^F[6W*j7Qn8&jGgv9o')';gU4.32oB\NvIf7ăU"e4P4b9JZ=sjIhC5Dci%*93i1k2$R_sqCkFZ,_pYpb+Gm.3MN*e0jE-'jsmg1UnKăU"CQcCdeFrDk+\1r9$642,CamAOLv5Cze#G4DH#x'*0Ky]lpCdC5Aa[Y[;S#C[ER7ăU"G<hsu%-DxP[4jH(uU2R\;J[/Vs/7s1I0:-R)/H$w.%J1?z]0(9%h4-Jc:6F_S:căU"Cn/Fl;KTwN[zSuV2w13W?F0W-9gCyiFlWLZ,[4?3eBl$LsrqQ]2X3\$==e?JvILăU"X^6E<P8FBoHG49Vw]2H7divH\_E.USDU8cAhJZfOzm#qOInx=6CO8-6[8>aM6QbăU"vD\<_\^/.2KypgVzipsA:W>&oWvTFD0sEFNPA8eViFugjxqJXxG=G.Qi7v_IxhKăU"es[BL9eu[NanY&2oo.4%M&l:RBBS<iFgR7^Vraf(.2]$xA6H#H%gx\xN[HPvJ^VăU"g^SBYcq%e,Rk#B-iFk9a3G9Nie?KCA<nUL-^X)B*zCT_w-ZYe/E6bW?CQ5[6GZ(ăU"B)fv4;UMdN%?J*D(h0#$L/4w><nWK;&xp?1nx&$SkuhH.7NdH^F4V8WCV7fKghUăU"c,6e]0eRPk6K0IISfR]$sB'ZabDFt-.WJPiM+ATqwTdIWDC]\t<)q)ULo1E))Y$ăU"(\JdI)4NRB7\W(v-?t[3yG>.[Ero]='A=9$kxflVKsGpq.?'9e;Sm2h7Hrb$pZcăU"kqx8]+RFm5S0H0y.+lxBEJCX&:xh-amlRx=h_1wpq8bh+n^[N(P6Go.nXP)<G8qăU"B)R?lTcS4^k[FA2rrSU[/<hblYmbiYMoRAi^oLcitE+,F_T^P$-D<3k?yEW/+gFăU"ux?%RgcBXi3T5,jNkJkupdt4uLPOp_^;wXm_7:2i;^di1qLBf9-uJfD.:pF<;sfăU"LCMm=98=IJ.)&\/+'><p1./#(#q&V]X;rb'FcX=Mk-Jl'iM$G)U=k#XQ'sQHP&uăU"\HE:Xj2R;#H,t\(aT[)7=[ti5h*u;k.hZW-#,HJsz(PSh*9]a&oN6;f:\/8Or=văU"^FJIu'K=4:PsDY<)d44Dp&3;]CaOso,k(poMcU:g2-J*Fq]1M(=S)oG9qHHAJ()ăU"oif)GrXQ0-\*MpvvfbtsV0XE.H?ki5bVoY:r3=Ia??$?6Y<7O4A/6Xr[[-C[S5.ăU"Tmtj1\n3\*;M(</_Z-B\tZMr,1k845F3rU,ErC-fRYci+8Fb0(^JhFOxXs.A1<LăU"0i))#.XehxH=Zr$MsGusFLS4:p?+SZY<\-Yt/XUIRL/;2sO4xcY*[HrYj*J1uBqăU"=S\PJWK0lYQRD#x0f[&MtUe#dG]AK?OmoGFC^n5Xf1An&T6(tV_CooIWr'3,p'3ăU"%sh8bWTA7P4M4:,<75;LFnm_]'r7&;ToN1nIFZCi4t?Vw(B67Cpd==\bZbys\aSăU":Boc'hq#y;t:Q8?)/5WuXu4'n2''^#8(#[SfF1D3/x=8nCj^hVptM36nA1TBH+1ăU"t2G1fo=R]g't_l<+L4C0^B*bl+a]^,lE^;%]nWsh=iZd$rp_[qhpMqV1H#BH3jjăU"XF$Tjtn&xbQFL-/2hddh'E/^h7U3SGr=RcN)'9diU1Hmbl.X6*X_iK\4K,N%086ăU"p*X;Rli;=]*F^c&msFYcC2c0hKwRC5S^+Oh3qb$&\*C0P8u4HbP8b^ahSn3\YlUăU"a=gb-=Sbrdtuk.pP#5J\A;TH$QfV?xMssW5kJqEaItnh=[A;B%:HHvd0v=F5^dWăU"Wtqv<xB:$s\AF3l2jQGNFTTXFBKuAK_eQOF&==_*34Q]K*ukM1+0aPT:/X5Pg\LăU"]uS&J^Ab/43gqlrxzr6W^KBaNVZ'QP<(b*9)Pv7[%^nWG#Uj=R^sow?BIWhn3<6ăU"mg*lrd=n1fVmF8(4'oBG-b(HG>//3f3sGl9QqusRaI,7vu>,P_aIr]wDdoz9G()ăU"y9KFRgG'00Ym5ENRy60TbD/Z&O;hn/]S*,g<^y_*U5B*;QFb-f]Ew,8$EsmGt:PăU"TQ8efYY,ZZMtMv+#Lq-6]Ks>Qa[SZ/#:?770AB*R7PkeO41AerEh2x[5Z)gOY/LăU"8unnKJL=1UX?Hargz)G;88<NYF(=LiJG+A'R2t#=J7-2ocDM.ZRJpcWE&4,$xf]ăU"8nA3rH>kd'j*+b[Mvc=I54DkiC8p48I9aN3Ypk;&)=ws*H7k2U:lJj0br9R+I#YăU"]#,XGn<=bn4:Kwgv\wAcW3xxyU*]+h]Bcl0V)wkhy_GZO5aJ$u3Bix]n9^/8j]1ăU"TNu8og^eTH7;#Zl]A.HBP;ZZ&hB3cP9U6Vs#h,Z:hC8fg=CfD,hMgttP\M(4*07ăU";3Aw/NwiCMdo<7NOw/jMsjR(Yh:fY&C_UIiT3F[)4R$y72C;Yu1+^:viWga*>QXăU"m?eD;iZkRQTC+PaHtA#yjI0J'+I%Bl.8Wm5bb_z:7&uEKT-/uYhz.,CgTiYsc,MăU"U68+N4.nsTE%3kQg7$t\4K690&?IOb-hCU-*.LC$UIcWQ/nC+mXdqG;&#^yR8&eăU"Cma^4XUu50(K>v55n8Lnls&-NIJSRZ#,*<JHO'^FIo[9EK[d4h_O']km[yRDS0SăU"<N>px$oQYj%Xhh-NXO?pJsjZBsX[uMDhmZ#&Z^-K>2'Bjj_1U-WWC.i1W1#K26VăU"SUi/U&>oF2]-d;Senq\ud3HV/b5AT4E]F](\Ml0CI,wcucIOVk6Dq18p^lugdpiăU"Mp_nWZue^Hkc]WDH,3q[3Pm43OidpHQ&QZ[c)6SI%H0ch*2s/N7Jff^KL]l07S^ăU"_%F2msFrVI-n7:&ewVsJx]j-G$&y[\&OWQW-Ydd\Y.o>,,b:\0AUG4sZqRDL.RfăU"sucra]&Cjl14w<u>dIxM2=%FWmQZ13kWTAWudv'l[k=V?0;B?0x5Y4lrQ2Tx:Q1ăU"Txs64R7e_o<=-%^BDj2m'J7]]1J8Imx*#1P$F*9*'fPZ$>&[ZuY7dVG9j+Z:\7LăU"ZP9tLNjL\38>NxCAL#;#cgWtoKYijMG9PhM&Xj4<O_v]PESJ5b7S2;UJ0wvMauTăU"Tt3sE>x$Ffgo?A7gIcKb=QKmv)w/vpwcr.S;4N*=+J#6zu0=bf#yStDP/S$u+n)ăU"_:U-?q4$0lAt7<n38FXsG%lp2a3(^fbrdt1x4[j/9mL=Uw:qRNM7:df:bV:pbZ:ăU"fqYbrBtPf3?09'v)K(,V8>GKKr0b*e7VnZ4E^dwQE4ao)\//7^mdm42[9O0jN>CăU"n>8M6IR/5/IuA_)\dV>gkXtalo(RMvO(YonLuu0G9TnfU?Z\t-hM7%wC:4G8LK<ăU",8cjPJ=BYZ%T2G.oe.346lsrd:]+SBq?ELmLC#=s/d8Z:%tb0<$32kFJJYoVO#WăU"%:bG\-\-VNmvr%0jT.ij>?(6S*?9T-??cwJzfYb%xb13QEcSlXic<&.=X<Bw*=năU"hZ9J[6Uphq,uWo?G$M+e.Fo8adK:pZg;*YrVRglFf$^;A^UYL$S:3F)W/rg-)aaăU"<cUs^o_]7$q+\UgzP4S44r7F>R6rXpZIpnDYEO/DCP-)U(NV7BSRZ?I;MszW(d/ăU"4'<lpb+Z#QgH,BDJ]T^Z++=B&ifihtNr1#RXpHr;;3Fd?3oGYd%t.FOvTP7Pt[[ăU"^x+YDa?w1Q.>n;J9>O[z8%-]QXS0gZ_0ZbFX?OYiAwcnJl8Cd/<Xb=rjr.^-W,AăU"w9=Qo^au[M'0uqVXPs7+9.o4?/OuR[[Yj;rc?3HM?oJr)yXh=4)Nm4L#]/dq4q&ăU"7Y_p3fX/%px87Dp<cAl/>(YT_kYl(V&(WFOZDq[ZwS,gXcaEBsn>PpdJ:&fE'pcăU"YiEw/Pj'P.d.T3Y(0J'y:hv7Tu$ulT[*Xp>lM4[viFFBO?c90a?pGtQ3mNa;$g$ăU"Jvicaatq7q#0?&nVN0K=<#DAP]:v10S(7:T(<pr2s,5$Mz]?^oMX\/liJiola3WăU"WNBMhIh-*.HV%)$ZapLzZT''%]Xkagiw-4uc42Yx5hSjYsH1a/,+:_&Ym3B?Zj7ăU"5MRVCFEj<\/qBkzHQtS2XxY6JX^_gsuu$m9/]ElL/T-adxn)%-rWmdh'v4/4mI6ăU":%z.Qa1NT0-nn[:2md>sbg?:RiAqJp,sYKKXC_pcWm&JUv$x.Yeg5g,i8NpDN?VăU"4'b6(L\,Cll9PUX>_9i)>*F&xIaK>M\7QnB=VX[ENd$W5p%JGHXpD.^KQ?X0*[JăU">_T5z%/40cx$vmrpEK%4,8DuMF'o0%PzOu0FBBQ*V0jOx6MrVvAF)l:oRt6gtPRăU"G(rudf)SfEH&mze,&QOa;m9H=YMOCyG9HX4<d;dbEN:a46HQS/0HXdzJ4g4DoN=ăU"whrx^sG2\u<f^7M9I%*]4=#+=Y-/E7/?09guJAMP.$]B8:HX./#yTDPAk<;(/gsăU"tRs.hdz9A/R:mz*WD:ZpHg4h;'^'y?QaXWg4#d&kI3qUi_yK'A1BNyl'32N?S+CăU"OuTV0Tlgs07n<zn3n94sd_x'J9:KG*R(Mkb?=v+Ar5kWyz?-8/NJFR-:h*,%2i'ăU"qKk;3miygH*dpDhd:mTb[sjsWfg>_:Hgj9,):x-2KPy3Mo9oP\f%tA=OtYLPz5LăU"t&^ehAyilzQ5d/LKHk)(B'E<%Ewwgd6(aoGS6R%'Blqjd[UoVCrw*i-\bSFJ#4*ăU"dlZwZBQVYicDY-Sx3t,2f2NMnddLg\<LYT#/m<Sgco/<YJHE-FzGXC&%y5O[^zmăU"axfR=m&+SOF/UOE-+>uMYix3cGSWH_w-IQjxb?SWc6O&/&JCsuA5V/673uw.B:_ăU":AIOOy9K.(rg[Jl0S194:ebRwjM\eI<+WNv9LdHw9PDnCDQ)CvMGVFw]3%C.f':ăU"JbZ0a$i:FN'YNN.z;\OWqYcGcprjK/;BFpfTYnFyR;IYxJVgC2d5\^>y-\kH[m0ăU"J?;HwrC&/'6+U%x]2+xNidxog$cmbH6_'OQ^jzN^r2ctuDH^RST4z&h*']0t<_căU"&T;*(23EVs_sctX8N.''P_2gYTD)(XnU*DV.vN/A,THK(?y>RK9kYGW^xVwx*d:ăU"z<-b,,*V<f=HlrQ:NlpMLHU)aK&hY?.)E,if;z5mC4?;^k2x.'&kM8[y8wDNR%IăU"&*(UZa4:HIV^IC%_eJ**nG9TXYu'qhQ.ybw;([p?7BI$=wPu;eNup-$g<7FSm=aăU")&ni=aCDKXjd,J'Fsh/,zSO+q9(h)H<SOK>-vJ:7kgQX)02d(Zg&#/<0TW&^ek>ăU")Zy.vBM7[.JTlw+s*LP%Tky(*/V5+Hu]__wJD(^9^sc)cA6yYtJr(.-/\U(zjRQăU"95QdP&J%)#-OtyCbek)iS&l%5kk_QpLx^Z&OG</P'.f7o^YXzn9C,r%l_qenW*:ăU"lzPM./T+z2%4rf69o7j0N?0R&#L]I^k;z.VF,2qHOC/7mt,,U2E:\u_X-K$/V7'ăU"5OH'9)Xz6:%#(vu?sY^0TV#<.v9klNzW;NHa&3[;8-1G-kY(Kin2AuO5dHXIR8JăU"/0uCar>T9l(#U/r..)\=3sm<LN((I\#f0YrwTGuYw$pZpw+WJ5*RNTSbEmB8na]ăU"b0-_GJ/U3\EP\X6ld'2%Ux>8d3wcVs:\D;)bBsTliojgT^X>hVH1hr3(=,KXuZOăU"T?iVew6oBajO%.\r>AFPFek**5(ej/L+pY(\,*i2m;bzFWcYa8%$5._Sqm(Cs%făU"e99Ejm&THcEEYih((+OKQ1B%NOD(u_$IWS<HcxX8c^lDPBFIkf%lW#QU#C+M<j=ăU"*c6'?ZI:vDLdZjzZ\%24d1Oz_VOF,*/1y([vZwGCCFOx-BOHg.Xn4J7PNO'M[>kăU"qx&%up()%9%%%[%%g/&DA%%%%%%%%%%%%%%%)%%%%it%hTup%()9%%%%-%1x_CAăU",Zm;]'E*%%%D2%%%-%%%%ithT%gzlxVl&T=BTk5Ln]%x<#a:3o4M+1NjoX;N7r2ăU"=r[8Nst]1Il[ag]S4u4M^hR$XDj%#b9:G1Q9FEHk^BcFN-s9HL4(W4Tt>4DPoq:ăU"+d,nMPtVr.3^SA<ZjJ,_C-:iZu)7R6$tV<p%>w#3$9CZuS]S<A%<-h+rd7rci)\ăU"oG7w8Ta.%x69:Y8?-&f[AndhANbP:1k+BfEf.DE'-ugE8/0s)yMK=m62[1nB99TăU"7(kLc7I,&$Fr<D([wlWZWm48Quaw7,:-ZFC-6)DdAfv)DpAA)CU;w;:Q,jPPg9căU"^Pf.&s;AQ9#]ih$ibX7Y$ai.)0uUlgYidC29idl##v;[3c]K>kF76%I3=alH8/kăU"^d+P.HP>T'SUjVNjbZeomM3*Sj*f*Q;DH1->]7&4ACNRIfRU3?-=4t*phtsPNaCăU":OJ[BZ:dP%dmfW&H+j7*g)n?qQ2iS5sA/qIzU)y&[3[CC\GI+;E<No=m+rMS]l,ăU"RmtOjiE)H\lXshwK5xJzM*IA_bjRavl/[.YZOT_kyl=O;7KQh1:/bNFC(p'y5_5ăU"PxJj,O\vaISQgB*nl>;Zi<S5s7r3r1VrF5AjEcJ*SM/BmP6/V:t^cJedL,4zOT&ăU".Jw/1f2bagf'\x9>f&YQ,8AzE^b9t*(;<n?37m(G$dc63uSea_I[5_Y>m$Ch_Q7ăU"?Jg(L>cCWp(E.0ff=E^,V#Tq.1Ws1b/L)35^p5>$vpaWtS/N7Z3bcJe3JdEZt7%ăU"y=-5MDu60'LyB$/jE.N6%V2+'S)#nHR+wNi<f6fjnjZZcwp6Ga<Y_D(U/?-J<E;ăU"vE6]^gHOG6z1G%2hSK'KZra.xssW6n4qZcadT^Gv?SBHSB.XFX3#Az/29PRi9$IăU"3)0Hs3&d8436L(H$<,Y]Gv'qu<..^j,V(q'oU22g0CRiLM&t?9((8^#QRZc_fW]ăU"17D%GhDWU671srAl,P\XFw662nzt['b+qU4GdY:YVbznJZKq6=nb^:aujINt.\căU"/*BDNVguGt=bFX3pX\>kdX^d+qd(.K<dONCk&(1;2[pM^KgG2rG(<DSQXWp_pfYăU")b<40nTEw+YKpxKdAukX2J&'.uf#(uBYr\.BlX:5iF.kYZ&W<FCZntQr4(j.N4RăU"K?D7mL63/mOL8vgQ2\z#Jtg8U&V'Q=aQN*?/;jK-r6gXCauBXpp5SDgr)H[4waKăU"O9$_WAu3)7V+81w8Y*R_:%j99HP1Cyey9M]7rRjS-Y:Klv]W$DrGLIQ;;ldOVx0ăU")*=m)6avZsbF_U#B76B\;X6%PPH3bu46ji.lN7=7r]on<DdR59I43FiFghGUB<wăU"voDC%Eh%iCdw)%aSl\thXKDOw)ls7+<Y[9B$cPudI,S%9g+.>>7If*[*o=#2IOnăU"x=+Tlc7\637d&EkCEuC2(m6>J+46:O#o6-e2KzH1tK=l)YP/&'DOi1a74ZJH<<#ăU"mquyi//l.tW'$;eoCvG8xD5wFGJY*Hx95Z(JXPXFuPvRcMN_Zfh]E;+Nuk=Id93ăU"g#Te.YM*)c8DX_V[ICHe:DDOm29V:fXdlBL8=w7X^]VA+i]RY2a3=-Bdq0oNZ99ăEND SUBăSUB V5ăU"Rhpx,&b/rc/#p;?d?T*K)dY(/Cp]x+]jGqd9H=a*eX_+lL9CZjgh=LVRo1PXFopăU"lm[\B5HDqo7,ra?gPWNp+a:XRRNZRAa#o2-/<Nc5^^lN,D/)[z.BWh1<nqdE'o?ăU"53d96_0vxlxc=lTQd==oQdx7HsSdKq%J?u?kim)UJeOlC^pm;F\A(H#PRwI]uvHăU"(pE#ba$U\&5>Nu5C]LV]T/)9tUcSS)WVTr>M*(v5hsRfpknED*>K1[s5IvmN^(UăU"N6c&&Q=iNRVi#C'GoZ7_h):W(:u5qVP\T1Sl#f;8#'b*?J3zV%qu.;Sz]D%up()ăU"%9%%%d-%U6nl#v07C19%%%%Y&%%%1%%%%it%hTht(u(wnIlm\]<6=;U19TFpDMVăU"XQEM)gC;0s:h.I)WuSE\2]LRh+3d$yHtm_wDKktD(GcXpVq4,>3'u'3R[6s'.uiăU"jLY7JF>Z9kXN5,SMRkUGun<9mB?/rKDia1R#'GBFWZqX*[R_J&T9<lHq41nLU?UăU"\%imdH1/Dm2C$UUp6v6us5Y]Ydq6mZx0,Nk'JhiW3L_3&/K&4SLG,bhrlNg':DAăU"SDY9WqoaW9Kkg+Vj=6SwTY2cb,RfZ;p]d'[#up%()9%%%%-%5_6l#(?G+8'\&%%ăU"%2)%%%1%%%%ithT%qnhj%sxnsE&bf>BTU1T9h+uD2G+OY693,_;/VG.9/%Vw1Q8ăU"PCU:h+W$BqFB=2uhlRNpS4+$O,HVot#^fhVnX3oxz,FtH=qtAi1SZW;\fU:+:a8ăU"1/-D48*V$cKaHrX3OW?Kazxmkmd:Q6a=J1uiw__:h,6^;0,&2.qaQ/F-BGw^V(3ăU"9%+9iP9NhwGO:FL^Cfb1r5U:$cnqOX;VPq&z6=ImkR8B1*^\zDT0Nw=3mx;Ek<xăU"#]e3B5S%>RK8ytVl3C+iv=8U12I%Z>%04nb/EJ:XSTS=Eoa8Gg9b;aZfuTcl2*eăU"OQOd06$q_BlOe*ClIjw&;+3QHEmgc4aLM1=+1^L-e7UoP\1.<e(F?<y.4I&z8ZeăU"wmIakXuJ4b5[;1W9p,?x-=;tbuuobw'Z.FqP_5jY,XdPV.BQd\8k^GFCvQt<E&JăU"_*1$>hp,a.J=A=Ct]Te_j53Fu_wb$Zsd0,eXM(b/dtlJk-+9>j.o,b=y;q0]J(_ăU"M+N)L2AHjp.LbRvkV$i9BeIBKH[R>7J_kBVt4tmN9T$E#O*6joh:[UCwi22y(QgăU"BT6V9t+n?GZ?xo1>[W_0-2B1Z4JTI<ewQG_4N2G.'t-p-IrDsns[KU5S>F+ju\uăU"%p()9%%%%-I%06=aAU%-&za(%%%-.%%%/%%%%ith%Tyjx#yjidgz,>[d_5L(-MxăU"UtUPy4za_GLp#R)i$A/<6fHoNIUh'Sgds=Qwt'.hFus-DF\YG_Eh&^XF>YR2AB?ăU"*\>'AG.9AA-O5B6Qkc.(mwqp#u>z_0JRR>82*E\GHw&Y2dYteYZmjP7o+Dg]ee.ăU"Q4.2SiFmB7tNVE+4U?O::H:0qe1YV8Tp30SbpfZHZ1h;/l(0thZCsi?R-%k?UC8ăU"7=LVVDG7Y8QCl;H**?g^4YkB5YyO5z#VB<HBF9#Y?pnNwLKGnK=dE_qoL5&6D5LăU"Gk)IR5'Ed+_4dLa[Tq9xO2vm\ixPP_h9\5I_Y<-5%Ie;5i20$A2TS==1b,Uq;VlăU"l5Ep9mfWLdIck2>7'^phs;QJPC<KeYG2-$WaVub9TY>6pv'HU+c,\Mk8iZvA?lgăU"Fx/*-j3+;&#N\J41>QL]Y_=PhoNF#$QznX8RCUK^X10S?TK$877b[E5SYT\6rSgăU"d^tVZgjc9g(g[>)Bc9xAG8osmgCU9DURt+IfVCljs5SP+n^/2NcIAHi3%[+T-X5ăU"sZ,0Fhss[yM-S%-jz;ZP;D6ql9xw8ZSZ<a>ue/#Dzt.NEmN1/lUi8E/S.h9oh)RăU"f]BGh6XX[)e3&,7rYY_9d0EqEEq['#%Al8=cK.7dI/7)>KV[Y;Zmmp/uHL68k[>ăU"-qG3-Z0e:F\q1361S->CA+&B1[JGb^vQ*(r-'^\#u)U,y=MsWN6PYZjk;f]%E66ăU"^pb;jAsxTGXqRWHl?D*qC9gMu_Jt9A3YP%o$/0-smQ$ObU<c/\_zRBWn[#hfrc+ăU"G=\ih.-N\[:h.nWb2H1nuC]*]7,T]#&J[7v\:#53lB)#613Gss5gleZ))JMiUNgăU"PB;52BY*X1b%Su6I;pY5IqGTeS;m3X;Kl4ba%aQ(=GF[^2=x/zJ6=Zo7uIk>?a(ăU"d[J[*D(vK=Gf</b0Foc5astFw[y>rMtus2J0<.DBS;&t>-<0Y\MJk3KS,WN?G6JăU"RT:Y+0K3;3/$NAF^jK>:*96q9z[g;)qIFQ#kf#U8yu*0%5$F\=u.627<FT0fulsăU"8tP+dbxS2(]N%u%p()9%%%%-O%JjDdA=8w(0m:%%%wl%%%5%%%%ith%Tuwt%izhăU"y%xSitFhfa:Y>T1efXTEw((#Ves8Mn]-JbacP<csl0Y[<unvBUtM\e]<%sIwh^wăU"E1e2^.mh%wGJJWf/4Z1*E,EqX<jili5.eqFNtgt>ebP0+5Fub;Rw&Nfm:gS)582ăU"N0)d<n02\+/3DC.b)A24Me:t:M=Ta.o*F4ZQSfFIgW2v8uukkJ7:0NA6-Q;R^$)ăU"A\Gr$H+r$.Qe;qyQl:)0Ql1UoFuuG4vgu/;).)wO:oJ)Ss0hq=c/_+)KsOH*R9*ăU"R-]uL7o3%i*Jxoa&A/U,B9yI^*f,OmiG&.\yl]H_WE.u:%X(yq:hV;X).feBT6EăU"uWO:I5lG'tX.d%A-F?7(5Rj2-fL+r),DOh6GP-Qe&R6p8c#F[qgR%gAqJ9pF'm(ăU"2PULgD?n$J9GQMV^f&4D$fD:;Bot9NW,zA<z_W+gK.'Ac)Wq'*k7+RM?w;2TU[3ăU"ue[FVfNlqoHOZDOZ%TC<i'Pf-^ULc);\o1T2T0tOfS?sf2hK*&F\9ei2%RvH8=eăU"i5)x%_A,\>d6\KJ/pmMU7J#%-NOERwB7SX1?vq)R=pV*iA\ncch'U<&hfA&mFugăU"G.=Wi7JFnHo[BLZsP^5:o?j\k$<I:f]ztoSCepu2r(s/+x+7Wa7/Z-XT,i/:>c;ăU"O9Fqd[i]U%V%QTdQuRN^nmBG/JE5m^C5(:thFc9E]Z4&6a6ai-,BQi3T=MZ4gfNăU"Zf^?(27<,yb4c;Fg3\f66#t'&3.Yh^bf,:%>GSMdK5hKN,17CLSip<:(po0\8y%ăU"q2a\wS]D8#FDuS3GxoKasEIO&Qfmqf+c+-PD/dWXi5\c-S2O([;AW-A-^RF4g3QăU"DTcD9;/L(<IBsekNl6GhXWYUek'HE6IS6^rb*che/gE4QlHX:]O?SVvFtnCD2\%ăU"HI,,cCW_fo5-wn5NLS.0?RDC<e$PRuX9(elm4Nd8or4Cusc>=Vz*pjNSr9GKD9(ăU"b%pI?Yp9AxE6\u+Bh'r[^U:z2w;5;FD2I,v<dyu'&SsMa$:^J\C#f>BKcZ0W%)=ăU"\JsJ#vu?*O-2/V\)c?'LJ$W=%gJorf^$eJ9?+uGx6fUfK0-'AlePH)(9U+]EepbăU";D\[Gu:wcwWOT2.$vJR]pfhr<r<+P;iGp;$T5B&*Pw38fNaKN4AvLL6o$dFGoGsăU"HlaBW5nO75$mWWw^WQC/-Ptm;hrezxEGk-vA;jAmn?jqF+1n_+-0j858->9-Y;JăU"\]m$i=X&%X95cdCd'a'JZ,SO_.Ip&)):in4SZqZG%4jkdB.FUYbLLw2.ne<#NA9ăU"Rp*f5]r#XjQ;Yu:hOS/+>J/EgFk*I3kAtgkX_O3fH2a__D+hjU69Isi9K=zps8yăU"4eg,7[\/tQ<(#p?pMCG'/vy:YBM<EQHLmc;R'X+.-B;k9\T*-T+uJd=aDH4XD&:ăU"pA6#hcjh<sghFUNmb(^5gdE6JT7%:b:GM_vie(c;HaGb^J#gpsA8P$_F^;DH'7;ăU"csfAbgO=uQj^.52S8d(RCD=ajrN&_HFH)ko*iST;&jh<t^9T/9N$OVP/*CRpampăU"wSun>J]*dZcqr-]cy.8+WoDiX?ujiKM<N+Gam1&s3FelR<t5U/Z8(iYZ[0Lcx<jăU"qZjv2Jctvtql\m31oobSuDy*_)'tXS$+$:Dd8M.bLh..sgPvrAMjfSKNt9N9xP=ăU"kMNeUdMm1iLkibb]rPJmFN?HfD6:k-udPZA9^5ASy-G6*fCmC=%.252A^fAm[[&ăU"<#y&J&b=K*]$FV-+.jy)9=2\1Gr;/'0TYo0n=W.'W9)Ixt0)5abb)Se#l9p0s/NăU"CW(+3-*)BoI$h63-JDkpzig4+ot%w^A89\:P['LmQ8(IALJ1/+M9=(UMDB)\uQTăU"_:4I>7IRHLsn=fnX#3^[,o<g+eP(D/S.D?MV[;E,:0o0VRUtn:=4Kx-qf\14)HaăU"e3I66E9jiN&FviMT$EVDa<0^^i[E)+:(?R\H,%NF*s9Pqe5;G=fPjY3pT1\%uNhăU"g8&hNox?q[Z&1Z5Hq,4&P+;%37yB=QSRLD0:DNMJk]i')jSW*i609%.njF#FT/7ăU"aueNYNArcqpZ%Na%XWH5/3+LXFCd_*-l:$>f\sP];]$]jYdZJGafaHLDif=mFCAăU"DuMPR3t8yOgeLC,KNoEoFpPh0EJQie#s*SkR7Rvov-f;k$:dnE+sC2L^Tgw#)cTăU"GoZ2bp]3-9fgAQ\EmG7GqN?3G#9-jfqgg^BkZ7(%1vbp4GS7+P-4dGnc>4Z$?qnăU"JJ(A^WPM7---ERj2J)E_wnR9NRtmFUsCH02vLl5YVt.9M:?Q3\CLm%B[gvaIRP#ăU"TvO1A%q)LOSt0fKM]'lr6f([EP(jeh5cDRyu10XEA_#2hZD/)w%73:f0))LVci+ăU"pvBNBF=iZ)B]*OYS01-US%G1e-1CX1qS5iI//*8E7f^$wUv^bHS1x/12bIPQ#:)ăU"Ul1tYyBN.gACmor9f_%2v9.KSD-SvT;pHio[xalvx,rJwj08y7>FXdJhw86=K[TăU"&S/WFs$tx;urOy?LCVSPeDya0&Wr$CS_C1s/7;smCK.KJQIjy5PG='ZYUdTDQuiăU"VDK^Q$Jy;8]LY(&2j\u^UtN/wUA5=Y3+1\$S:Oah9J;/uZ%6Gkm26]D^,cN:v+OăU"&Bb+oP.'^5L$=C5RNa.3VgVb0V&o3u/w)D4KNo'(l1o2BqvfWF4d]mCFFR5JQFZăU"Ytq^o2L__-F(2,zMH3T',F[\.[O*8ALs'bu#YrJQuQOA4M]0NxOen\q,$lI?Vh'ăU"uGLzy*DI(#Mv+y.w4uea_g-Vj]Q%sD69'3'j7Y:MS'Vs6d%AIpuX5d_)e[kkIPBăU";<Cm^d^ZVDiYdAjL-aW'PxjaLy*.+MM'5=95&06#SV,2VpmtgXbgX<od0f]O#S5ăU"wkvb(1_U#+44uKwO/Q$SW/vhGLIuNHws&Zr.&9B_c'RCeF?l7_9I-,:\Qd*?2R?ăU"1ES'e0Ky+z&z.hBElrgU>&u3?c>)a7loQQG3D/L;'77KSFSWW^[&)O#d*TVa:*8ăU"6.pr+7g,;(eg-)UaP:a*6&6e:/ywLicM:OkfC.D&,'FN5f?lZC+,>=G=me.9fgaăU"j/W[ifx(E]od-??9?^eI6aEqOO3diR?*%hX-1W'&:&BRf6ULQ\6G-90(;(Mn9Q/ăU".P,j:.E8,k?g)6OwmlE#,E#(,w36:Q2nd>](B-#IZj7CnKqA?I-6>_Sy(t[,xn3ăU"(Pr&*ZQN:PghUFx1p+,&3Mu0n2Wgoc^OpZcohme*n&60RB'ZC3PYTK^$,<la:QdăU"EW^th,pU'/c2gawrtbB)=.81U%ZGj)=N-YHOe-E\<'W(q9ve$epF=BUHht(P0r2ăU"(^)>M%grN8%BN?B9=%16o76+cJJw8SLZP^_2c#TU*<jEWq:sd5[m_Z6Kh-aRNA]ăU"(Hph?8A:f[A''0Oy207>1A'&r<>)I[pRMEo6m7+ntu(Ls=e'k2tq6n.y7:usMycăU"1/Av)0WbxA%2E$hS1Cu>u>-b:e[wa:uc&9mw-fXD'pAUEF%9U.qH4NRvJ#s\+C1ăU"/6#7)B+o:\w(>j,B>X.msCI)pFe5M(T\Gxg22X'Jna4k]K6Z38v3#Rk5sYWJV3ZăU"u*n^R,JJ0ctgnNW)T-05Etoqr90Et3VK7;xWQ1TYAvKcklPokQvKklk$&#sXossăU"*<a::1\5UvR6m-#Pl52K5r-l2tO]GD3-zGS#ab/VLvGav_2V%TU1\b[*VWgPJ[<ăU"L[J_jbV\ip0>CHe:THam:*[.YWQs3<CVHJr>M:WWHBp5Yji_XO/bG>/(q9m$03UăU"c*uO=DqkvQ_6Inh6caWN\0#5^4p3N,L8/W,Q<5,2dDvgMR+gsWoT=InZwHW4kRNăU"<siqa_if2pRdxPK5qU)FO&O;_t#K$:ZAi7/Y*A49s#Wb27%/MV&0a;wq)+jS(13ăU"A>m8w$6h&V\hDs9eQR.Jz8k'fRv0^PE(fS:raiBNrj2%6f?\Q5?w5Ka-I2]QJEMăU"6oUPI^6HfUO]8Cn%/DJ8]'hchkd7^*5]X^)SV5TA\Rg<dnxVkj/RPRh[v2=ooe\ăU"*90#-f$iVQN$(r*TUso+T>N,0#eX]vo,Ja')[q=H2\6Kko6koBFX4SQYHc>;]:#ăU"\q[-.3pn<[j&:?A'O9pn%y0G4I?p9Ov\gKU3]/oC/g20%(Cwn0p+xdH&Tc6,s+răU"/K$NBaG:q[Cd:bR,:ITEX==\fWb0]RBNIKS8)Xxge9me6wK4Xl,]+PY.eM69_6RăU"^c[KtlpNPC;RpOS*DtTqUY7Vc_oV?.9GZ?vFeCV<EfPKj/^+,d%uoSf'TIoJ$^CăU"\;z8vK-h7o*A7nw?\Bnon'gjedW(q21Yl+J]g/d(lUW5??-+w4axi/E6IkjR*ipăU"F^64e8D%*KV#20f[O][&O04l^BE8wOJ=$uzvN20R?_6d)R'<$_O/#n,4hox-R:eăU"$4_i(9G]MX8df:/<Mz:D5pc)e?]qOdnfT:s*3VG(g*:4I[9qk_ILuKO:F?[GS+#ăU"W=RYc5t5tkc8T;O'HFgQm^dNgp_KC:TM+sRpQB>z5hZR)?PvW7>+k%/:0]wGq2qăU"SSkCq)s:4Y5WzpI.\B\wAwS_7qmRC.A_.QM$gs7mHLrEZ7#)mWYe=ph/TZI:4jzăU"-brmr]HDxLNl>xu8*2i2m9ZY_:uZq-*hI>mrN=/W*4z&c&ht1ooZua5S2tf0eiVăU"0o,wF:Wh?IWT^c$3JBIwyqOu+Z'=WnJ3Q9TFL^AnOxc-V^x,n)$m2i$h>iQeKs?ăU"cdFq)=*K4+X/XH-8bUQC:Gb[Y%>d2=k0&MjpAsA3-mv?>9.\:Z^TbYms>xnt1N[ăU"IRT2//(VCEm%YW8XoIcO4cbRn./u%iqJ]=dEBOR+xhBEz:lql#klS(f03EqiuE_ăU"aKR9MrHsCiAO9=Qp09QXvFhQa89pcxXexR<1mrma_34G)u[0JuD,OP<B01ARWkqăU":Z4Mu.2I?Ih+fSI7e(Pgi.UdUVA5%Elq/i_'HWScSNs?sLZp[ZMJ(?O;w;G0=f^ăU"Uy]M325^UK2XUUGx#)A=f9Fh],ta8pL^D.z(e)$u?r16t6K>eov]NnbqkT30dVZăU"F)i.Gq>uM:y0%Pbt9O[ky.-bDZGjR_Iy%6FesMd9'Bqv)mP[mRZJ(^]c-Cw;XRLăU"Bg-.m0>MGXf*k5OCdXYC6>w$?\ugjQ%_>-BqIQ1,%]9KyZc2wklU?K7CYClrIfrăU"mdY*bdyKseorUljfvdaaIuN?6igE#3;c-eHE0h<\OUW/2J_+4&%Y^BTX89]$&jUăU"uZk<KM&MrOc]lANJPZ+*.6o2I1YM+X,$&b\k,f/N)Y9YaMXmxSt)>+UfxNhn>b&ăU"7eNHiY28S75Wi2_37^'THplJ2xwQ+aMa_'X[5V1n(es<eldPz*_]nn.F?7?2HBRăU"zdJ/dwg>r%&TzvgJEc:$liBV#RdCb4Ir*#S8Ec\6)XS/^$'6F1+dbAi9p#U[4KTăU"Ts+m$0R<Yw0h1\o_osCe);Hffk;$vftBO4pzk=YO3EDi/TthK%rgs804d+kgV,oăU"sj<;)/=9?7&=bKmJ_;6A(q#\<pv0d:;<Qe^V-j.)Wy+.OTJ=Q=rKW%JY%g,K\H+ăU"#aDr\01(uSXZE1\8uv%T&0JH%)kh+/LA8NU3F+xiEr['iZwkHo]>?iI-Kuw1ALuăU"sIQRbadNG4VcLE>Is5f,wfcP.eaEg'16abxGTRCRI$UV,ZrY,h$b.9Cnmg^=gioăU">r%[I2td&unA&qK;RX*:ST7S,(]-rZaJKj(:k&CCqL3\Xs-gM\iLu8-8]<+H9<iăU"I+c(f*AHTXrL$ZMG,KIgb)nnse<IXOCVt^8k,nm>3:.NR3i*wS5HpfRVh0<]$]văU"ip9ddh^]#uhF/>f#o9'[7zGIf_ib(AoXA4<sSN;oAq'r?SJ3J^*tmbKG4b_CffLăU".^(KIRt1tQjV35LQ49g2^\o?puf=>FrE$g;Z)>:6<5F*fTVr2o*%i>.^X-5>G11ăU"(q-2-^cl+eI6_l.-&2*[H_JGh&fm0ebv#w]yFI4Yg(Cd&:5X[[8>79B8?ak#B8WăU"x$p$[CDE8C-mOCm=xl^5bxMe(*TO>qPhUPJJ=yOQHGMK[Z$d4Pn6IHCt_s.E*)yăU"dr8US.a6+F+QgO16O)KhjoG]GjJQy1UEB%stUe5d*NA*NVZ&0'lGld[q,X-vDmTăU">tj].:w7c9\]W1W<\w1UXRm;k8$+C_bZW9]=oE[X/b?H<9ba+eUDRd2CkGR^qm_ăU"U>9QY.-2)ApaL85h5ZX)UY5vk7z/riDft\97mXeXU>P7CI*Ebxk1jCR[G0e::9)ăU"%u,fb;Jit3/VA%](VbEIl+DJYTW9_bS(WDT.wd6&V]hr9r87JoWE+yVuw227Ui%ăU"2LF>e\469V&/pG,3m'm']twaMSZvptaoI15.ZM9Or(gUI<YSfk,wZ+_\pQfdg\xăU")1zTb,4>qC5V<?qji)iL+Gg%4YUG.3)VA$QAr(0%.=cbh1m)zSi+$*cioNjJDOPăU".L<F.$LK3eHnr]/9?k5010F:m)QupzYAkk#*k\=2]te>uMZG$aX]$S.ERl?9*\.ăU"P8tyZR[G]jTH;H7E-QA(V):*qWg>Z7Z7j,PVW/gCq?u3Ni5o8-WIJ-*?prb.AzNăU"%U+gBWDOPuyx+gS?Zpz8*::N-en1+t,BXU3WA<AaK0YV7RU1?z0PttgRX2$%GVKăU"L=w&d3ikXS0TQ6]5O)e[_P#x1hyL*o^+wg?$9jSmYT4R/rnQjfL2H8\9raUq:k-ăU"L'7A&xt0dfFkVDz(,1^)#ev+;AL.q1TBZ7A_LOp#NN[N<#_#Jb7UUcn%%xdj(eQăU"=tICE&1WJTV<gO6AL-mMN/3L)h]K5p)uKVV5^Xi>%\-,[a>P,Jb^q)Nt.VIem,*ăU"eIyMOV<R<:C]IzGljc*QFZMo2-4'Mgf,^%E1t>%(dK3&nYx7x^.aMxe%5^:LEjXăU"X(W?./Hi[IH)%SN9TLLxeI;ub_INfQ[1o7m:lKk2t).GTdl1-k5JGAbFb?FD5l,ăU"bemV,L/II2<h7xoEVc)&CHnBhl6#]J/EeG,_ZUeAMrIfHVr\]:uN;-'nd&u%p()ăU"9%%%%-R%y/C7AhYM'kV+%%%r2%%%0%%%%ith%Twjf%iSrjMT&*BBT[8LrP[w<+căU"SX[J2$hEW[fMAlUM.cfDmYL:cQ9w]=-)q[&E:oEPF<o+S'8lsX/?]k1*JG3RZv8ăU"QqJ6(pHK*3IlDSP;vj>:OaF=-p^?sVrHCkCP$uHqsP-,iW'GtB$dZX1U8-O??wwăU"v$^[ns77DNa%#'gH[8PJskA*66SOz)W1\O^+&BIk])sS_#IYI0kq/hs1RXGY0WeăU"%*W]'2LX,6,TV*B1/;,tZwbL6Nq'/*H53?B*k[>4e3u:Cvf+vMb\]DkAkc%n>1CăU"aN%eP2])OB7+/:nr.L-PH+3w=a2abUG.eZlaufh8Z0)=yeke,j\5Q,n2guZ-T::ăU"444[/wC.J/1EW]ehpw4s9HMbVbiT[5.KoL6:Q<()<VdcR[7+u8I.&flVv-0n_i5ăU"09PE:*J&gGn;YrQO]8u:^b49F.%:,]Z1Gh/:Q/B<<O7S)22?uL_au8\aG<r7:N)ăU"3c:Fh\<&t[_3:u1UES)u3y0IXd$&AWR)#M*_l=Y;(V:;?hGB_awe,2U^uappj_găU"uw-QpM%APR0$i&0kGsi&Rc8zhpWl#g6ecK4&o\='Q$dn+9VdQS>SZ:4r:aNbCoDăU"Vf_='Bl3#b%\neS,Ijm1Q7x*'r7<k0Ra1bv=EuI)ea5YT$R,-JF\aHppWK\]_h/ăU",0_?EIB5,pH*\qlk7w/0DNxm]wQ=/SMXh9^[O]Ap3BUq)GUIZHOnWa?-g's>DC4ăU"&5_n]I>LTPTRQD^?,f.mB?n$e+gf'p3*Y<_7,0ViIY<6;T877Cn?I%[Rwjfp-JWăU"$Dn]T063<XDf1dU;/+yVJd>:4krC8c0>tWk/OsW5b%ogpui\pEWku:]4aI[GWqcăU"KbA-BklLuGbTOTe.0e%Jc=aSW(,LEs0mEc:UQp10,oj1smONfleg#wb_DN6XW3măU"Q]1a_8[]+6ot63VfY?-8T_ZK_j:iRPW$cMY/AQ07sK,b)esuAf[1_:UD8kePOdKăU"UD><xFaZhUnY[TmjcE]QOV.gK18d>fYA_XzEg'_E(7EnMw=W[.j5+U0M5#&lv)+ăU"NP3'r^_P/J15?gI(rXjF7HYAgli'*NKYQ=Te&^2U/U67UKOsTclufw)ND#gGX>OăU"^>=)MYgljf*Z.#B(X,Ta=N\Q]U=uRuueue[f([L<<$\8qR%oI+ga;&Mv>?&[/^[ăU"hp\=2fB;F0n742^0&j'Ddf;ndCD/ooi<54s]x^w?w^t$:YtdML&GJEtEwkvWNf>ăU"AtMn$fRzGSrrK#H$f:X73C5pi'BbCR;gwj_\j$'1NS0&8:2:0($D+p47Rt7'qdHăU"YX146_vt\&DD'qF4GlM5;KYkOH,Tb2aqE7G$Mni>MEk%5:v(0UrgY4B2J\;]1RZăU")DpipU[x$)31t2QP_OTo%pXqLN.:hF,.9D_Bu\W0aA2rj?uHN;25-z:sK,H0WDLăU"Ix+I.J\XrgmK3=D$eQK+Mu0Yvp;AJ/aX5G^1I%ah9cSqOk53+xlfPG5U<aDZVO)ăU"Cel=d^xW&a>1_c$m&>l(yFJa&qz+Hm(Vk>,h(NoqmrGdtd/;IZZI&%1H?8C9VgmăU"hd?>xu<#PfN^2<N$:yXUKEuM;St<ZeY\-8,SB+8gJ]U5)(^3xxjdM[)Q*A:g&/.ăU"lc]j,+<n#]L8-NmZ&RO1P=]*5U#F0$?g4JCXz5fg9K=d2?bt_5YE0%28A&MR;FGăU"0j.s.KjgZk,p\:K*\NU?c8,ek*kaG<6K4_#Y#bkAJd#]Ctv'Vg+)4031[PmMACcăU"Il#\&r^f26L?Vm'qs=2jtQ2v?g7<%GOdKHPvcB;_qY^\wRr.;N2KL>LbG/tAb]KăU"ohY^,'UqL2k67vu_k]8TkW:a1m$M9\CBpJ$Y_H6W8m<ldKm_PV(np(k]u(IXAI,ăU"7Ql_$o7nE_#jjR(>dW7\d,;EWiD(bxq7g^RZ)72+][vOy(h4->'[=N&/S:om88*ăU"iP?aApcYIrGX3MvQYOLNT+>OR/rWXJ'19?15k;fH:ep;ZSev#qbwsVDY0L5j=2YăU"N^CHIbkx4r%<up(%)9%%%%-%xE/CA-hFKV7%3%%/%L%%3%%%%i%thTz.sn%g%jSăU"itChd_:AB?$e<Xx[dt77%fLO[jVOVRile*[_=H.B]2qk3//$/ui0SoZg=pVaS9căU"wsb$amc,YlU4xQV=)KHo8j0<ZWtpaX/o6_A>g#mf*DZ^sbtj)lq>PdZ,x3lJBl5ăU"9PJIAb_)E^4)1R4DXkPi:WEe*KU6#CeM9<F+MZ.o29ecD=%&Vq04HmjmWsWg6KCăU"RbUjnt*0SBiCHE'?\6aK$%j4ja+;TU/?Z&SRRdN)603[G/Eok4rK>3/)<YHH4BZăU"YW=WY7GVE'T]\QuuQ<\LDaxZ*Me*pNtK3p(P2'#j/1^N:f1b6*uC0UCdz+[g\srăU".As4S6A(i;zF)2RY97.B7\+k>7s2wQ,G<j&9^4%BP')$C$d,9u0I-D9k(#$D;&1ăU"IhV(4prjQ4[9<r%9Hcw/]WwI^wbkieIq8/^_C$+RU;=SCU;/10lg*cNpQ+[qR6CăU"fV%8d'7/uv;+5i+f;(pPa(;;L&T?sb&1ezPH8jBQ?#5CyxmPVoR%0Gqj'/JV?PdăU"6PaE3lq(79\9+&9&bnZKJH&pWbo9Y%;gS^M'GPD:pvdMdAk)Ceoe7i0bBvgO;nvăU"pz(Zq[ESbVb]I'i,(MFtiWG0rIkEI-+Ai4f*Z#QWhplqO,QTw0IT;1x4FtkDm5_ăU"7jN?J/tg66\p]8ynt)Hu*tLmfqx+XIg5A*(*xc'v/rIabMs3kOu,)a5$E;:vCQ#ăU"Fm$/##z%S8q<M'TsRqg,$r[h#<W$plJ6WrS+>dTkS=-q*P1T2';p]E=h(\1tCSfăU"qSlEh:br'0*F$O?lT_?i7+z;^gMirIH0:ye%k9mCIRg*ek=N+S7:TtLIZ;F+zacăU"t-;%H3f;#k:M[gAg=T#_O1P8bf=GDxDC'a%SPEH?tX(jx0R_4i/.jF%MHo#JJ)răU"h0#xJ/?Xv\$+dJc%*Nbf8jM+\IE#0H<tA)9b/I<1tt1)8V0ghE9Gj=EaoL;T&odăU"aTr3-0,1p4k+r#F$O=ODM3m\+SwLb3SMc&FRsfI_bTsRee,3HAbWD')Pl1H2o6JăU"h$6y9]ClG.I,ccE2d05>Y&DQM2*4PAI.ad]?jPHJT8zyI^1?+[I,V/NA0fO\JH0ăU"J22R7]HWXruct:)=h&qr%%o/Mn&Ovvo8-LWi$:uv-tn9Hi8Eg?b7>ltVAKC2.S>ăU"K\&.1bk2Q7'kNm+eADtnw];ro$-Wbs/Ji)41RiY0se*d5/I.L6ed*O/i=*aGF[\ăEND SUBăSUB V6ăU"&V%=yPo+aStxOE9C.10NZ*&UZ'E]DY]2w[FC3W+c#-%f\,XS*]53&hUVU<LRJ$VăU"/9GOo3X;j3ZQiJXyF154WZ32g/EA_ChXCEI5#FS,10'>OxF,5_O6Z9j60p$PG\hăU"t=QN#*r(x>t*su=$T9n=D.I%[=E]1=2S/gCILOQP%5G4.+]Xx8SC<sp;GSkfq:\ăU">ef%YbN+/:=c%I&+7r^^;[+7&kDS0G.8X)fqE3TD^-l>xzLZ/K8A%12q1;Jzj#SăU"uLcVD\u.*J6dxIvy0RU'd(%4%5B0Dd>pZG01WD%z%5RBwzo[C;K*sH*JPq9Hj'eăU"5;GdhSM<31[HeeU'-Dh_JdEi;2oh[Sdex^OevQrQFo)q#K]adjK-7_1%+X6^#0EăU"<m:+1uX&W%0fQoeWtGWMo[VNw7r<5\3fBLQ3;4?fv8HI%&)mCD7+5>,%R[+$0MuăU"nP^uk8R6,sOmSllYHV5G=$M,&,;zz&PfDz6akR6mS>()=k:a*;gS*Gi2yq^OZ4NăU"H)3'A<%Ox#.A9#qv4vM2h0ux<o7*tQb9t\o5b-Fw2OZiqDeE_[#i0Rjj0f5Mk,0ăU"d'=s8tibAbM96BD(5aa#o.q[-PtpcxR+p6mkGB5\g5bopY2lU4FZ0SI<GM*\iL7ăU"+]w+%a,pboGBwFi=jJF%Kw4=UQJF??1XY=k3iJCX\kymxL_J5FSFX00U]+U[JU4ăU".-Q;cZEdkdlW%qd%Y3qxSgG4jBwfd8otKuW[uGO_(OJhyv\g%DNZ+P<;Tnr->3\ăU"G>\w-WuA2GjHWkV+]QC^7N%C7d1#\*L7%dc0ia&4Y[aXKt'aYlRvfZ[E?y*pa;săU"scp#>9nX+JB]K\Rl-K)FE1c(J;^aJ6(/;YWKCLZXxIZACG;6.'d?FRf]d'S=#i<ăU"WM4T$VvmlIhYcNh.Pm*TGAz/>cfamx*tuJD[l[hq#Gv%xm09KU3ubYjTZCf;S0LăU"U\c7F$(dgTK8G6%^$eMoEAK8#4w]myB4VTyoFF=&?.Cb([kB1bI>J6t0V/Ta_-)ăU"JosGg(1<fEOW^8L[#&Q,PRbLi6(cJDmD9es?%C,mM)[E-q^.VlFqAS:VO_a:O?tăU"+beD&?4+(i3ton\q?A3swq9eA0PO>mS0r/=7qbQ#\9[Xj/=Zv2w?dCU'8.e+yk%ăU"j0V3$yMbQo9pG[AOt[#*K1.?jBL%P23#LroH=p]cr01%..cR$'7PEBR)%i/v:biăU"WT1P2PtZuAKqqk*ZwsJx+im#p%E/KM%/qR[0o5EU'lc&t9wFZh,H9^,VYl2)8AtăU"S4SRZRHDLD*0r/v5F4xw3(cT&.SGIQ#Q#i8nr#90%Op-1'*50sRR4Og1j[ds68VăU"g>h9Y)CM39:xa40y7-A.pHB'oFQMx/smOG?Iy+I0^YF*^O$33gEBS&w?M$$0pr'ăU"_GmcW6/Um\g:Na9Bx<Z&MKL[tNWx>GHllthP<6e97g%q?fkSigyz4K0QPNYBwhlăU"27qf;',Wq9i<w6%JfwwPi&%l*+,We'DsSuW]X-VuMr_K[k._^TQ_hnq*f2GBk#băU"jr'Fj'dpSz8H1CH\XkES+v_T*OWS0/znvgZgCge.:O8Jdw'yXPvKu(.*9]dCeH&ăU"hHh(O2fT3=tvu_+uSu69tib6CbrZewDs<U\g&>rUPC_ntB*q0*)9&R_'Ojw0ahsăU"S_JIzP'6gqebsT_=r<<fh0K/_'0H)-A]'Ro_+=2SNHuFU/C(=iEE\YxV43ch+NcăU"^7yH7^;O'dpXdZs5dLvHF+Oi9sQ]&B$k9\WPsuuA5e#D+4F05=k%k:?Gj5R03nWăU"\r=-DAt_0rvQ%#%t)44fb^2U8,4:*+Db?;FI&gA&b6Q[%IO-h\6Ytij<IJuRhsPăU"eTbK<t4+&Emp,G.'#YhwSbAVS;.mJSv0RP0\GW18z1R:\to2H$:0yDe]4i6fbQ,ăU"BenLaG?AfLjl4/ff*lfb\_C/u8kydF81/^]JU(YBe0xdItc>l\6.DBzm;Ymj(2kăU"8a/?pT&IJG9tMszm2h=?ci>]2ta3+uPp=XD3)_VrHlb)Fq3sB(;X)psCCtkH?8eăU"7Q7Ipgp>HJ'qrxf&lQNA;&]Ral$Z8.$5C;#naDP$hE'uV97JOod\2Uf90%;(+lBăU"uOJ&0.%K^sd?)l=)1xi_ms#]M,[k?4<jnPwcY5?fEDWZZNpx)S?E-wV$S;Vr^qdăU"OP[aDF7E_mnin0W0LI[<Y)GQ/Ug:Dj9z12*hZ]*^TY9.:i0oCR)_7PXCm]DmzpSăU"106aze;k%WLN'zyL:,XI3[5=\385q:jP3l3<_zh9TS+\Ss=3G3I3wTBJ2?LEO$FăU"JV3?'p&KdBy?,7loJsg0<Xu1EAh'ZHK9[?3N-CPpZ?.pQw]^Sx3\nDmOQ1>1FT<ăU"%Ba?N6z69f:o.niMd7LM^;y[+-l?d.&/(fFIKC8g.\\[\P\wU'/6[imiOXScZ2oăU"##SCDtW]%mM%Q%Q38e&ADF$_'BugKh4(zE4%>3;OZ/6*v,Q#'^jCE(y(ODnPr_\ăU"5_%tQvn?\vRLj#xGJU<(,08JGnk7Rro<M5Z,tkoVsnm2U2Mhf%Z,KK3Vz&Q-DYMăU"r7T<h(/0:qk81*VF+--Aef,L30Y$E&#lqgF=v&KqU0yv/,X;BBRYc*-cu0$oId<ăU"Pu[KbeF2pHm$T0t>m.LGe^*H+pu]9(7:/YW..TVOMl.cT\5tm^6&0)xwK<YPT8UăU"M&9;-Jf%kK3[xtb$LJbWCdgP(0KCiYBulrgFi%QX4<x.)SzdU^\:2/0wDF%VX'LăU"wDbJS8])>K*1rDIF+]dih>Hp7+ax2T-a]/fG.Wi$M]kj<U=#_[F\F$F)&/(rv3KăU"*vj<.2xpp<+7KE:Jb6gFhS\.;)xumT:ip41Y;=]>/JG(o;&aE4Gzx9^k3_c/'H<ăU"FMQpfqgDb8PxN=vsNI&See>>_iN?^BT;Z_+h;P?M.6QsE#Y\ZF:Xaf[>b*Dt>\jăU"\smp0Uo;kK)?E:[+N&+6=oLeaz^uEniuesp<T?vh3vOR>=v:7r46R)9*e9TuH0(ăU"Cv2pDy54RJ7mlZr8D:*pd\t<icg%<srGBkB=R4v,$46^S)DE74B(?kK0vLh^5]lăU"N]k]_,Lawfv)6elRKCte>iTsn%TXBJM*+0s#4k<7dj)qrZV:j0HkZ0b^UjZ0bo^ăU"+dLjXD<WCseL<9WsOdjAjE5UF)-Gi<*sO$r^RWM]fV<N6lk=Qdf3HZU[f3ur'FTăU"?Bsv6G>##q8^RW+bb5ruto>TBuk)>Tljko*Rab,K,J]rlQDL2F1_)N]3jv9hH0lăU"RK\2(buT.u4QZ&CFJ9P$hK=OE5kIEAz+1E:N:i]>Z(D.#uXLxGKutu&T:YYQKdBăU"Wsml$)rTYQ1'w(Zg&^m&TT$E]qC*KduOTh.%5U0W*v1NoJAwr\Fl]3aB'*#?j-8ăU"K4bqs6+_aka(R91Cn=:piuX[h,XTX$Z*xgjvACb#KiuWZHt1fA#8r4XdsRd[-a3ăU"Gsq><*68n]NGHGG:Cz5qSw7[L3]7fqzJ]tus;MAb/T)A37l8R2]NtK)#B)n&Ot(ăU",VZ\DuUp<sH%>CAt5Q0$tvrpRHD+dN2i$8babH<H$m8rVa>/Z+/?*7=-ZwDu%p(ăU")9%%%%-L%%kC7AGV3))0-%%%J9%%%0%%%%ith%Thmf%sljx2\'<x]\]7w[axZx>ăU"ppDRmyVY5Fs14*%*1$hIRQB_G0gc<^NELO/0p-nssAvsldOZ\4)/9xd*=(cVfv4ăU"nY=^<Js]qUca:aJ]\tuP-H)M++kXi,B%Z?POkG3M5qOvDds4hXJu$\XvqKGxZBvăU"8n_Y):qC7)l<1<gSBpL=kn^G^rZz'x-<jnP*Q/P8-#-]x1;K':k;-SnT'M-/)NvăU":f]?.txYZ[FS%/RfBBx%d8zT>1NK>/fZm/Q[+*_EdB#$dd't(fl40C[SZh>Ze&4ăU"B;V28JP<:d-3[2Yk(M[w:x5%5hi%e_qLaCT+F$Lf0A8TNeN]Epn?UzdW'5'BduXăU"s_)eQ?.S5CF<xXf&*v6Ag*'z/9#/8\(%^gpow-,CAf?:,</LE[yfW&gsQr5//o=ăU"5L:Z3#Pw=Q_9aGrzP-bYmt(;U-4=wz.d2+%_VtfJ)2a%<fOxMfs':DJu%zf[&,JăU"p+UYve4VJ?H;Y>TiQKofpFopW?:2Vr%f_4pw%:hc1\eReJP,[yb5(]e]1G/)y<TăU"V#l%$e/E\#ZxmJMAFbD6b(?t8S.bin?#J'1$'sV&K^O_HS>zP\oq8wndI^NpSakăU"ZU#gznTBJ)HK\IZk$A7RuWqa8-4$.7Qr6Bbv-A)<'%^/R#s2PDw5sD4W*2=(zA6ăU"R&<)nWAE.(Vg,fc+Qpd,.^pi/q,JN=#;DkgU7&9Z\e#7+M\oDL)g[V?L,ZQo7GAăU"YiLvzZlisSxh]Uf0Zlqc#O),;?F[DK6Z$Vw>E;Wg)k[x-%1*J?%S>MuJoj1plqjăU"^RmfLnGqJcC5n?Krr2:16,Q]t]n/9+di4hg2-;5GkA'?LB]JqZ>hw_LB*,,8ORaăU"qow_q714lT8rfo7,&$k;nwAEGL.WBnLBX]MGvqK1cqDyg>23h9I#a4RcZas]N^7ăU"Gk-eWpNp=3<*XTB:?Ve;vPNK$xbA;[bjX1qP?L[Tr3t\Pc&cr?K<:gBrIurXhA]ăU"jncGmwI7/AqGj.<h5Lvp[M<j>zT,TrX>G#W<mpfla1us0EmEWUBJ;/tAl6Zcbk_ăU"M-&K#U'qVWIE\c5HeZmlo5;#7S'/3RYl-a:BG&jPLgn%3/1Zy90MT+B:n/FLj%XăU"QnT2X:fp_aDYEH?,M*gOIn68[>XE)U4Cl)Q->9M]s((1\d+oa_97tpy>iHD%A^aăU"?s1W>Uyq>/P2Y5a*Q<t.YBp^eh^9AKi0s'2/syyIn74VvAm^I>2U?n$Nggr--#uăU"z?EdII10)g0((0sBTJstO9Kd*pqVfSHYOR%S23HI;h16CPTbFoJ\I?h-i#Z;LpjăU"xI]/XO9c9P\mj/aLB6.gjTDeb,*xhVsGa;M1xji\%mMMoaofJjJ=AU%Zwn=^?,lăU"3Dz:+gW,38L-d?8T-$MkYtMl<ne6D\DuThP4jQa2UlnhkdiJXT%bsT+4K6lk*=_ăU"/khPR6YZC$Gb'nkUhlrIqF,Bf*_8bz.n<BEvJnjho-Eo$UEk-jr05TE7f#GnA0]ăU"L>jn9hE.rpABN:FNfnMqMvf7/UH%aD7SPRYV#3bS)Sepw_H:,qA?WJp[a<)p>2jăU"*55)d\J6893UtK_)#D\MaHDdH#XXKQ8fbA&wuKqhyQq6gJbC%K%jegl-\?dBl9;ăU"=oM2ARKR&L?b]F3qo1+S?i*M3=5&Ve>3J8l9Y=:d_^g5I5#/;SLB8nf;j4<Sk;iăU"4q;F1?c%h6FTDEZ'Yv/UVLJacd6xdd1$dNAv2;FjD%-ys\R/R]daa,ss=.P-c0uăU"cK0;pm:wOqA%uaOV7Ch$o<#9:;Ba+gW44#0i*QPqR).i1LIaQ%jBu^f5*h/Fl9găU"e<\14Vnot4*8.:q%PqDSsi8mbNXvggM+ntwIZNLK>sIr/p.w#_odxVL(z9AQ%kSăU"$(X0&)&q?Z&XhCHBx31>:duwXo;jm?-Um3,R9($>u9&6#HBqI[t,iwzGgnv(BjRăU"17Cttzkdr5W4DQu2'Ks=bB;vZAi\RYSGY7aUTta-83Y*pz8+ll'U.uke?x'<MN/ăU",b-Q\_\jC,7=V[eku5vn0Xlbi]alg(TO#EtwC]V]4K1B?w&bpw^dYp$\aNul0VMăU"Q_yWHDLDgLRdGkh;zW[AB#K(fHU?ut:[5HSVCl5U&=2ra\cS(z3Q573o2OWR/7.ăU"ZsZ:^scEn6ss7I'tS:Mdeq%?#=^ifmQJ83mp-XU2F-+#CEwoRN&S$4taZ;Ce1IjăU"Gfc]wWBgx'yup8'-'(py[Ti<3RZf[lP^Rn0P'NrGVxsL$O#l(6>#?6E18Wx4[^eăU"./S37-)M?tndDQAk0qhu6HTB77tXCE,)aBm$KXb8Pq*[hE^?6?h'iLXEqojQEh\ăU"O1)q++SRj*n$vKPdGFgYv$7<vc%Fa(yHa)Gpc&LoPu3.4J>R$0kl]H1NYvkPaK6ăU"mevJHa\[q80m5-49,Dk8NFZ,bV=n3Z*da1fr)va=JI/KmV&q1G.=A+p0C]]Tp3+ăU"_%DFXqx1_&;Tn\pCWy;9uT#?LDJF,6Z+&sxrLTnNF]Tjw:\wjqC>i:riOt.HA6căU"^N2KOdkTT&iFEYSoz+:tE]F&0Ui:rp9+IzFG]DXhLFV/)Vz+p7PUOHdyOA(kl:KăU":yOL]s0i=hFW,HkM>xjX'R\4(C+kcd0<'bb\hWX+1'JL'Hc6nfwc/b<uc7f_=z9ăU"1c[&TQd-GA]mB*;8W^Lut7oQ:'1G6?ufI_eg&^jc]6EmF);0iR06-2$0FgX4pjGăU"H*7A]yAnmMZVWs/fjr%dup(%)9%%#%-%d)kCAbW.,r*%(%%H%0%%2%%%%i%thTtăU"%wijw%SithNF%,BB[[9LoHYxZAEL45WLU(_1RMB1]BW89eZ.LanCW;7<:i.J](IăU"LIq..R+((s]JQ,ThYN*4XzMrzBDM^CIAAI',Y9HDNXd6-mY&0;M.Ix6q7EG?jt[ăU"7ivGNYUZs+'i(_9#ES3DKr1W7g#%UA;KnBr,89<T<h,K=1S&\VT:7UTDst9IWVLăU"2)[fa8(10f(]>*JIY<.SV>vqq605=Xi[5mgit5L:6+$pT+4xPo^lpwK_*U\A]0'ăU"aA&gavO+I:uuj.nfQf04F:#uG(SI2TzM0X_fgv)Yg.n$m1D7B4=YfILN0j'h+QnăU".-hPwTwE-f]kdil4GG]07h>E\EJU.pBj4-9B.lq%VpOM3AjJ#of12N98nz=0XOkăU"oWPTmXUg>XzJ02julX#tg>t&Y2>u$^oLLhu7e+yFV..Mx+kc(,dx_ByGfhYdiu\ăU"$N+moJIb*rdhso=3WQDaqv7Sq>ECW]XN0rr,SB5b7WX3iw>kj9A+'\;EX$k]qRhăU")/kqy0Pg+'R[>T^<n\v2K(w/m:01iSTUq>4[Gt-ZdkH]Y'.KQwIc33KeV:_p'#&ăU":f[bo*#oc'O;oebQ(cWR]Rc*<Do*aoQxB81P'n2oO$ISn)Es>xI:b)YrBE,n'=văU"thIUE;U.gl?,ZY]VWL/L]0_W9haWJCM*W7W5YI'[7oC1yl3sqE++p)2Qi>v.J^OăU"**+xf1Rmz3kV3nsrjD1'1L7,;PhSwRG(2v43L$xUb6paW]lIq)wfa77_nbk,t6%ăU"?I\diH%3GYH5]:u)?l4Fk6pI<m4xb+mHrNtQ3Nn$t>GV(/aku$58EZ&]S*6d#2KăU"4ihqBOfx<nWjiS#Js^dNr8s>86kW>\;#bd,:^cCdxs'\>AuPhT4iGow3eRkXMY<ăU"N#=Lq4O#7q=kqi;2Tt_m,ufKF&d.sfK8)<KdgjBh(yquN4amgc;\v;;x1GN*LGyăU"rSghrE(0Giturn<M\W'pB%nUaNi[xn^#E2ECaF*UpQW2=ii'nw-::-Gfky-(=-LăU"Ho0l.Y(G(K50'2&:F\/^2=[YeKJngJAM/]A)TcSlC>\HJctH86$;nm#+gg'JG2păU"C(bI0/tN_+br#u%p()9%%%%-I%2s7mAe]3'(R-%%%$:%%%4%%%%ith%Tqnh%jsxăU"j%SithE&'rB]\[76tv[xIK^p5y19&H[<4j]k4piW:\YymC',cgI23pUI01%7jrxăU"M4:\>nX26%C4nsIisnBd4YDHp<4?KjoeM3Ce:mYq$mZ4<,n1LI:Kv9H5qp[;K15ăU"0HV2#(;u\%$'-#'o,Hu3YO#XMrttXirqOxu3C9d\hhdy;-hbv?NY>)W[wy;=V.DăU":454YC9F:iOVSr_:(mZuklQV==2:)7jKe\:)]2_x)/+(c%kOBeX:g&D:?09fz7/ăU"aquG#$sFaG=^($['$Hk3ttb45?8<&*hp9Aj>Sra.v,wPodDE#8xnpG;>]uB'PYMăU"7I\m.8LuJZ]H\$(MX6h577]n-%D(4jb?Dcf/t7(eJTJ=%a2/CP#8rWBRH;^O:0AăU"HVk40'/5:j7M<;dc5UeLu)4E;C;_2zORQHi;R_aggZPTKR$e\qjsJh*t;d)=uo&ăU"jLR#g:)I1FDCAi.&kdpz;nJ6^+*rqF5uf,U=+R'-=.bU7YTA%%5dEGvkkT+Q[\jăU"F%]%ue'PB,?OVMTw&W;-DriJJ3WcCM/*/?6zEkf_z)Y%-1uN$LTp/T67xqj*g?năU"2?x6T8hG+iRgur_g_ho>/MGM-3%MN(o-Z=?c>Fu5m1#fd#WA''ZR<s$[m92n>qHăU"wYaA&,G6NqZ#ny^dl.g,7lSsXsRlEWGL&-.wOh/a/GT4\E,bLvG7*I&s5UC=VNnăU"D9AU&%2eUWd3x/AIb.%rW%+bw5ovRqz2s];W4YLD+4695GjAR.g^JSh0Qnn$10'ăU"'Dq&k3'UnB[lUlN492Z%mV?4:b[VEC%dm9[9m0Q/.Rz]<k.TubRe]E:hybGCkspăU"iS+4(KB1-9Vm2*iia-sm-^VatGSBemHz8um2EE&3JwPX4qhDy)/0)lr?OCFA(J/ăU"PK6yK3AvsSd9YwrC)X(Cn0%$=-BO0Rc*cI(e.XMT<j&,CyfP:6mI'zKH4jPdp<4ăU"PWIklWTmRQj0kwd[(B6/tAuOPzakm>aDchl:.k*&<Efqpr;+:rS9?;l054?]wG7ăU"_I-NvAcTS7zLr>ya[qa05d.lU$a-ZMr1pmKgmDB3f7U0'5i;Ex<I#(gNUmO=TAYăU"N[g^#_KoYNuibj$sAZ(\]4lDtk8YQH1f92&3h)-9flXp;Cd&^t*K1g6ZBEK2t1'ăU"J.mWMWp&ar?u0hg.[4&K#m]*p*Tbb)OGLhJx6XQ$Vs7J/U'[,PpjmUyjM]H.gRpăU"9%O>#r=<aRgvdF(2es(QceOmO?2fTB-h&Ce_xg6Mo[771a#\pPOZt?l-Srhn?eAăU"Cb]oCYeHS?HX3ER'%vgFXUvpCO]PmQChL]]mbV>U#n+)CMUGb5oK\PBde'v).j.ăU"M6t7dNThF**_BK-opsq1lc^^Kb#L\f$$EHual,k?Tj_\4n;#uj?n#f3k&SuUA>4ăU"%MyrbVk]L(9*3w1AeXRwG$02TW1\9cA,L_=lp$z,>Y_3cMh7a?22c9QZMuUnQf3ăU"FksOh4\D=nxCZ=]K'aRp=8nEeYSD-]A33dyS,QP=.hDw<TZ\%=Hk])ua$\J1bcJăU"RvVkDIb[ZLc+&RZCQkQ7[p?X:C5(RnN88<l\V^,)X1:)=d2\>2A=H\Sw_R61rX7ăU"s2Ljn<ey;iAJ6o:$uRB%l=TC'z'(:nct:JV,u#5DopWfudpjLod>>mspKjVe>,wăU"UJv^O6?Xf?'vmKakEiMGIkX75<vx,8rKPd\:r,p'\]fhCMRN$=joFlc=4\<X7JKăU"=,NLfP)q?BRqCk_)9Y_/T(-Alt_1wFfnsxJ05SH&o_Md36Fu(TXc[pQ0'DSUpDVăU"ivGj;l]uI&r2JHXC.Q3lu&s+qMANpVWpRuNgb2/N2E$a5yMf'g*?M?LEIVD]gHQăU"o.xV-lBBJd4xkPP0opA*/yZpc.Uc)BE-14l41sL.c6KU+DV1Yn<*-+hC&,%HjVJăU"3YJqP<u82GFK*h8XJ*s))FPUn)^o2MAL\n&UbWv_GHs2Y(E:4nw7hFD/g]I+vLQăU"BP:[so<rliIm'<v3qV=(il[;]-u:Y*:6flYpJqW[vd7Af'SWK6ULToa>5is:wi<ăU"4zXH>$'0V)Nx;2eFI1^Y6:X;(bn&;YkVD/0?k<H0/GgkU7oFi\qMYDKD7P1'tVKăU"fa+RrQF&*#;TZPqNJ]k(DFGJZ/m'vYih3i[EaiQI#c1TFP<SFeT,*5\7k.4a:+păU"1pI09Qtw%fmN\UfNdFW4%04VUG<5?uBA[Aj->'f8eNbgjW9:-ahI)nC-%3t/.eyăU"Vk'*6/aqv</DodBU8fI422BzfvSa_rQ7%g/i=45q:m7;8q^pvtEE/mDbGIDM]#.ăU"P/VF]tF9a,e*v#f[-#Wr*MQ.[w7Gd<2a^=:7%HrQG()io-I(Y1/kb+YoV?b;g+CăU"MR)/;<aUp9\$Ltm<4ep9[Uw3VFGJ$o>d0jcE,371,6wX0,(e*0jm/;boL,5h<(_ăU"0<69)H>ST.tBslJ:D.B9G=OK;p[\:h&45S2K/'t1eC>Gf'tWY$wVP$#Du%f5JShăU"p%-cR6E6FdEt[o0=Q+V(9VqR>f4QpVl0SVNEa,ahIMW02n-l3eGP,t<jyH:BCgoăU"(joB6HL4E#n#r(f3:6p9)6ek8-NOg>nM2>bKG+1]R3x[5V-;dMe&5)b2of?<ni=ăU"?h0kIj,N%btjfNSMv'6MZCOdxoL\3nNh]scVvq%dup&%'9%9%%%%-U%O/C+AD]4ăU"/5j>%:%3a%%%/%%%%%%%%%%%E%%%%%%%%%z.sn%g#jSj'%jup&%'9%9%%%%-U%QăU"/C+A):L*5sM%+%'j%%%0%%%%%%%%%%%E#%%%<&>%%y#jxy%%gjSj&'jup%&'9%%ăU"9%%%[%%g/&DA%%%%%%%%%%%%%%%)%%%%%%%%%&%%U%%%(_g%%%ithT%up&'%9%9ăU"%%%%-%1x_CA,Zm;]'E*%%%D2%%%-%%%%%%%%%&%E%I%%+g%%%it%hTgz%lxup%&ăU"'9%%9%%%d-%U6nl#v07C19%%%%Y&%%%1%%%%%%%%%&%%E%%%(sm%%%ithT#htu(ăU"%wnlm%up&'%9%9%%%%-%5_6l#(?G+8'\&%%%2)%%%1%%%%%%%%%&%E%#%%]n%%%ăU"it%hTqn%hjsx%nsup%&'9%%9%%%#-%068=AU%*-za(%%%-.%%%/%%%%%%%%%&%%ăU"E%%%(jp%%%ithT%yjxy%jiup%&'9%%9%%%R-%JjADA=80w0m:%%%wl%%%5%%%%%ăU"%%%%&%%E%%%)xs%%%ithT%uwti%zhyx%Sith%up&'%9%9%%%%-%4y/CAahYMk%VăU"+%%%r2%%%0%%%%%%%%%&%E%d%%D3%%%it%hTwj%fiSr%jup&%'9%9%%%%-R%x/CăU"LA-FK,V73%%%/L%%%3%%%%%%%%%&%E[%%%H'9%%i%thTz.sn%g%jSit%hup&%'9ăU"%9%%%%-L%%kC7AGV3))0-%%%J9%%%0%%%%%%%%%&%E[%%%2'H%%i%thTh%mfsl%ăU"jxup%&'9%%9%%%I-%dk\CAb.5,r*(%%%H0%%%2%%%%%%%%%&%%E%%%+hQ%%%ithăU"T%twij%wSit%hup&%'9%9%%%%-I%2s7mAe]3'(R-%%%$:%%%4%%%%%%%%%&%E[%ăU"%%B'T%%i%thTq%nhjs%xjSi%thup%*+%%%%%2%72%b'[%%H]%%%%%%up()%9%%%ăU"#-%\>ovCss).O(;.%%Y;%%%-%I%%A>DB4S9h?6lOD4'8-TU\i\%?N7h/1mFMJtYăU"Y]Ag1A[BJmm\I5kRq2wSC/(qI1[+?B6/B;m*PGP-mV'ilgoQjoN.PF5H-=aHlbZăU"hGhFkldKGVH#GnJxdZO'DUbh%b%5-7%%x3i9n(9%B%bBLBW]e%C)'V+UIXW,B+UăU"XmVVl)kB)Akfl/+^*$Te)+j^J))T4jE45BjwH+P:c)dd*I-M-y:OZ^dc4:x,)uAăU"999uE=EF?;;&M[)6wu5NGns%%#bE+8)q2[9+u*U&xRO)NI%',Npn0cuH%w#PeO9ăU"(?)_5[b(HLrXU?D%%OEZ%Z:2Z[RR2FlXcb8&D%2#jR4_;A<_3SRHmQ^[xVW._W-ăU"i00'0;_f3Ly]qSHG9NADTjDV&q+#gwo)>(^?r7zZn$hFpIs(+UUXns^C;uKCSrMăU"pZzj94,Sd%EUM]mIYe>WDwagNQ&#8fb>h(l,+B)H>17KJ8>P'Zw/7pW*x2TlMspăU"4tVUTP%dU][gshgu[WZblM<8H4MD<L2tBd#wu:ZJHr\bL,)N,e%sZi8lqNC*vnDăU"vJIjuLOwJD&xQNx</rAp:wo528\%4^s#-RPkKB$cu;N/DVWMPhgPlLUr[+tqCX=ăU"bMupt=tRxBZerxfieN/x*di&URx(x-%CZ#eX,)8YI3_Bdqq&?k[_DDa]vee[DcoăU"VM(P2d5$43zA8whDCbOAnZ)zd?YQo)3I#Jt0JED]S+=YDUhXhgbdE)nc0lj)m$UăU"wD&MhK^;PVgLn7.)z/[HW2)HLWjv:]Q7kjG>*AwOajP,A<l[.SpWadTBIHldf8\ăU"LTf1[$W?c*.[9T/>%ibuc=ouRAL*)=hpv&>b0\tiG<rC9v48DMc<P2a?JdtgF[^ăU"TNRn'l$jY(fmxV%c*UGLh;W^t_Qp.1/L6,X9sw=O&>Z#Hy7IPq4yJnEh+W;L'CYăU"Ng2eI#h1[vn9zH4,AXZlQ=W?x1N_kb]vq4)?k^_\fLWsVDKz*-RSFe4Uas=j0uMăU"y'qetq_My?L56F$R/F^QbusmR#DMSryJ38,]ysX&>(N''g,MJHG=GT3z=Dwtc0PăU"V_Bf)lD'kORN%gN+V#VdH<1=A96-u1+9i(>wDGobO4(vB_*/yl?fUF*4tJbX%6jăU"ADkfH=S;?dxT8F2%nVG^%h1L0&t5uI4FhsO,N>;;)uKAaU4<Q)A(zxN)Ff&DX6qăU"'%Flhj[ClVa$'D];O(;,?-.X?9NSGIvX-A;UY,2D]/-91i2z.PIMTk/,:O,A1&:ăU"Xx:U)AT8DJANiYtO0^WAIcfas_R9*H,GXkc#yB'wGdBD2\cWF8]_GRNGyt'K6pXăU")mpNc+<TJqg_u#8tEr2D7:T\+22\RDNxgY<pWlW7fHlxbLv^4eO^FL)=bm;#DcRăU"A*_aFM(X3Q&5>#s(T;0,^EFN#.4<x*Mnk>W3HZ.>t;C*?+HH=^.nyu,b:Vic\kWăU"1uvcuF22p/,\%X#Lh.JVN7=P$u#O7HWD8S/>Q.oyxdtK9=L>=MrqOtpfut?\,?FăU";lO[:\yx6/&L2<'rfZ8QAE5tG<p:C&6?<$O>TpQ^HSypGXHdo/oo%/U:^lo]:W_ăEND SUBăSUB V7ăU"jhr;?s_=6RddA/[HFnAKNFm:$ovR)-%8.L/VvxdzqxI0HoGu^=tPq:&;>\(P<sbăU"4LHL4hi2h*;()yNSAi.WwJDd>i+J<0No]+QGL4nohbe#_lOf&+=hb':]knjY<crăU"5v:QjB57V_u4P^ZFGeu0VqWft>G\mi1t.s1sb>#^AKbCqLsPe\V68rUf:ili'<wăU"p*h3RXB%YNDmaIplJ+1,4iH$;LP$VLkQr;A,BZ06d0*2:?0dia#&^]N[$thqL-WăU"\:_r=6W(XEg:yp78%WB?Ujb<#^#>mM??4oom2&NF_#Of&+2>qed;[r-T..aMuk$ăU"I^o[KJ#7o3:S/Olon[p30Y^t#UDWFYnExTx[1.uB]lMc>Cu2_ri7:KB5X>LT\7dăU"y(mbQ0AAa80A$ulDE&2UDh%%$2tl=$WbhQ(DNZ*Tqe)7hLNGl1)NY3.LK9P*TU)ăU"Wv?[Of=rL3O:q,q4suF5jk=o?7&(0>A+ErIh#K%AK+zB81_woE6P[fc=JPf2I]GăU"Br4^/.X.g#tF\\2:Drue<L'j5C)af;pMMzjY8LImy,s_<+G7p)fH%q5C3N2#yLVăU"qfs/<j#&5^(=bZ>XV'K&j%:NMap>OY)#494l5JdcYJ0hVpE:k8UoeO$P_]enLCDăU"D#8K2jz-5WN5+A_hpcv&*L,:V3G87iNiCUg98wKiWQCKde^$,S;\UD/aI,Si'.>ăU"B1gf.?>2+1=B6w:EC,=I:U$[Z3BE10Ho/AdIjTrVT3Q\#_&hEM87Gm>>dtP6&(GăU".qZ?ljtDvLxO]*'3AUU\49VT50]f7r-GRQ>s<OEP-=Plboalr(ah[)Xn]n#0hZ_ăU"m&02#B<qI$2>'S-qAa7;'Z0*9EHVWbd36ql>X7o^=8Ycp^b=8k_6=41ml%$6^=YăU"\C*Ct\:s7k$l03ul\%VzH.6H0dB4H8EF/6UC$.jP-Kgn&AvNnXTf3\FDoM\OvDaăU"Ymnll'HF,vqI0C7Ag8=6e5k08i+TnCAj&J<YD%MHXNCfr16_/IGWFw53e,Vl.0$ăU"'e<8<pYC^#TuY*c_f45tf?8#;LHTR^3*8LJVic[3?::L_uWH()%^#^XDNXR1+WkăU")fpp?_6HE*TpJXkd(wiRaHT#?H8?Qe\T4GsxJgOJ/[.Z4MC6IsQJj+#(s&cpD=/ăU"[V*f?y;A/7biU?)sh3aRB>SZWY?W.re1mc0>bcSK*Dp%y1l>IL15<GebUltaZNWăU"QA%+$B'H&w(%dsPrqN\/U]Q2)F?u_n5JUQ%Qk*['P?.hg(kcO$a6a<Y<4QdD;]kăU"N'V,=<(eh:=qxsJ;PqDZIG/k*ojXFe_b,cvSk?SAD:HrzN5W=p=T5t(,9&zI:j-ăU"(P0k-^1B[>+Hsr7Qu7&jT$uVf1>sDl7<\<mB#fRTzNFwMz4mAa9.lsbpAu'WEP;ăU"Z%%?Vdw,^#jfkMrtI+B1jrCQh>n1:>QK\\(KQ&_1*VSw%V&\e.>z5:RVSF6Ld'kăU"S,,iHF&eD6C3fd2O6g')g8Mp*23n.xu=ET-utH_ip0R_gBu1WqR_IzY2sFZ)3VDăU"I:lt\k5$=jw5qbe4mXNY\Qy:%<W9mh3V)3c_Y<fiyD,AaB6,EN;=BV[w50H(K.aăU"B:tYL07\5RjI'5lm'Am&?b'ZG;E,w?+pnNJY#3lfe6E]=JlrCcb=wz2Wn]X)rXhăU"qjY'/)(,3TcXQ)CAUrq#<_+Xh4>^ZnzqZYBukrrUpmpJfEbn]t/a4;Uq0\Qu7_năU"DzeN;Y9h=os5tEE>YRI3Z7<9fW%/jHQm\$k80F^_'Wj'm*^?]<0&g=l8p9$BadSăU"=WX)l/_.RC=YO?[EYMsX+hZ+L\Ls5:#M_EGhd0Aw/-Z,riAu&EbH2OkX6U:yHcaăU"uf+C8dz,P*.e[ISu;tSZH/>KTcn^3o2\7o<iv$YoE+'[czveq;W5bJ\y>JPRGd:ăU"%4_v0H(UaKjGj,S(lG'_4M>u^_z(5b<u_kIFoNS'-2TaxZfug$Q_)d/cot975/LăU"S;WZI5(r<)\gm6\7vNh.(KmD%BHEQ;]xICRzFKa4ll$,W\FN>$M)e9c%i\,2x3.ăU"YkLX.$Sw*'iaq%grF*3[X?i<AZZ5Z2IDvS5RVNa$BrCOsQt/uj$_I0jK#]^0YLMăU"s^/#IlN49PqrQk*R<t55[e,GmcIfKLfdmXFb)/,MGKMLGHBV[eTt0'e=tsBH%HUăU"Fp[SJ&sy5AZu5e5H1RirnO^PrKAdCo&PV]mY)kj^bJaS>Bf[q<j\_7iK;grRya\ăU"ep0?N-H[nx,tsPGDQD(CJ\.w\kgQ[P8:S].tA82tGTd*gux0MLt)_JaSeyU2fXPăU"S,_#0+R?1vZ#=TKLU*ahR1M._8Z^tk$UK$(mMJG%<5m8G#'8oyxVohWi>eWd1a^ăU"O2h/ezmp+?oqIhuK3+<lg9)JTYo25Db=\BtS(<,5/2Ko+L2i[O1d._DA/)0%X84ăU"5C(Z2%&ys;ilF*'4/^)WcXRa&V$T\'Z:UjA4CJF^EFhw%G<Dn+JcVIA)Dkqy::$ăU"P-O]KLob?U^c8ukwr&+x^b\pQYbr/uT)%P*'HGB^/awC?2G/daVf3W[uK$7)kQ1ăU"Nf:GA]FwRgrJ)+h_9Hw<fWBGd3'v)H>Uw*BC#l_$/avQdBezHYebge]=]XR]h&JăU"YT>s.Db5+YZTqlHaio'\\S[LdMsu/XHn,eMI'f?];m;Mq/KVus9)MuMjHqA\/jJăU"Z6EM(A>os+k(rsCu%uH7^FTFmRijZ9q[D2ii)*:cIvE?s2RjhTv?5L&rcG;WV$QăU"x$/eiXN'eiW1M:n'pj&1?BdtPHme:MHEFfQsok[m^]Cu?PW3N'(CT5c7r,<B6aPăU"=Lp1nW:UHbh>9eH;\Z-b:>$2qfqnhzu?TXKKrDYh\ezeO2hnEfJ:)DBGZBr8u]6ăU"I#ljA0Qt$e[D#%fc'KD9Y3.#<M_?(iG-c58*a9N3KUR4&8/i=q9X5kvP3vK5he6ăU"R'3TgvLtg8.KAaK45+T>hoLln:le,Y'_hVfm*?2&GiL]=onPymW#l_.;_Jr&dLGăU"K?6hfcg5(gZbmj=+4aW9c/ldkzfjEFmq(/0tj:'-*pt#g8e+Fm>+YL&;AX?(vM0ăU";fxAQh:fZ_O<CR[)<H#rK&75qr4GXr$9kC?j4gF.F_\(s8T.I\&X1/=T/KT#=DLăU"cF9$Fi_RS'MY)kZqTBoT^u'7Xw^YsJMsGho>MdC4/\xc*CtWo>z,R,#L+6ed\L2ăU"/v$bg=]M4>]tM&nTWZZ1uXw:mQL,rg^wz^m1:Th4a1'_HJWk&GaXx%+s=TdN'O8ăU"S'A6tGI<rP%X7ksDa;=VY.RZgh_$xad=)n[/9d=-4kft[DaALh=qcu.<FTFFNu;ăU"q>vhmYQjI;F%Z_8#Zr,CTXrg3FEQ((j)>cl(,tcCf9M0SB]SQ_X2y/hMW?Z.ls1ăU"r,E1]>:H8BSq$R[Kg:NWwPCO'=ORI;;Jxh3kQ0)w.szrq.K7BM'5aE,;rM/=AWJăU"_SS7VMOE\.m\DcWwAPnfT;#k:,J(hD9pZ].yUYBThzuQu<3mA&(_X<'jgD(ALVMăU"et9lo3rwODZ>oLvOnv>:ISNlL)$B.Sp_k7\5bU-ZVlbL.pg3_,Lq+u=-Zufz>?căU"wyqIDN&PH=.4*OtxP=>e<hZ(ZD2+x#(;uRUd8*&w2OAsOX'GMr]MbS1WJTY-DtcăU"]v9JrAaVb[_wJ]m,G$a$.n<.RbC=/Ue/a&GX1kudy#PhB,.s%uk]\m/C0pqM*OyăU"Eh5Yw\^g=X&?jLEpb>M-DFm*E>gL;^YdoIadDF,gAY>Zdo,cNIY,axmhQSrj61tăU"r.59vqE;[_F2bURp;rR6pVP#S1zxUxKLuTKe+f(Q#vz9]LfgQfg;ndsm)qA+NK_ăU":Rdm>=hLK#EQA(z;ka%XZ._f2Ynm>IpZSd>#=Y0G$ql45_xzk(>lfwURoDu7V1eăU"X'>pNJV\<jHYm;>3+>ixoD)HExxIVK-.LeH8#MbDPEp:UHnF49EHjp_,l=RhjrEăU"tvcM8YALv&0Q]uQ,'e[VuX'C5)eML_2i,-HU2Wua5(MDke<&\G7._ro$&rNhF'\ăU"%Axu$e(?aRj>XXBB=j9w%#_CzPIlBv-+Ggf(K(KMG^B8q&rE+$[Pwn:XitAlo]5ăU"1vY)a^iB&zUztsEqvWK'1Q-=mjp%?xoaP2/W<WD;qp[D'oZL%elQh7l-]Qm_0X.ăU"BJ1uPF+?8aXZ1<zeDWn)ISb1l<RI&=SioVV+42yv'Uvr9)zSb%r&%+<)v#FsHK\ăU"Lq_2AxoNNT3s/F_^y<:y>pp<LZ/alMF5s?I1vAVQw_imh%qBLsy:R?t<Msx,^ruăU"tGn($\J)[&lo8t]I#VpaT$H['<wJ,nwk1sLdU<m8mx5wQsGnbrhV#Z6kNyv'BfOăU"]Vd_0H)V^Df];Kh0Q&,-UVU7:,ti&#'cM&S,GjDlvR#?1Z1W]YIKOV_TgA\+>EXăU"/PG-M[c>]k^FHl[a4(kR?16A&gH6qQW-B_T4s/2XzlaUOuDWt7Alkeb2%FlB9TKăU"mV<Z:LWr2dfu,)?k?pq2f>CZn>2$3L(lI^HX^25d?TF+BdQ;q5)89%cj#5T-R2IăU"UZ<7*LGN-7/<Rko[hHE,%TtuNl?28^j1AmjEXtD#GCGY7AFZ1BD]OexDrS*_KJ[ăU"wv</jMXQU<,XaQXTa9U%qfkTVhp-6A3Iqu2oTab26o>YJ9,ZfOnFRB,-keLhDQXăU">30h6WVs=G^K9cQXL]N1v(g=HW4gM7cAD<0^Y9EDWgUA6)(rrZ.^yZ,c?:njwj[ăU"m,U[p*F396[7:>Sh)N5K1U;P])g99dwoA$4]1x\Q.;qWI92zXbZ0yU9+vk_mZ8aăU"MxyF##Ed]b#_bH&cNS03D\AT=a9>z1:tyH<OZ6^KG7krZ2VdozcJx07+=8h$i\MăU"BW#Wd2GpE#Wr.y$B,QBOA(<XI)oXq#%QgJmGtu5?1h22e/+hW.LKjdBBZ87I??LăU"jK62.$ZFxifEU=QuL=?*$e3h<\Uf#eZkavr%O#($]bTcV4agrp#cWjtYkJuI5b^ăU"SOW5vvm_<'Ip]4d?6>6e^h+'bw)qv7X]3fFIa'<SB\C?s:Nt9gdOb$GgRY;*&8FăU"/;P'jQ.\QJ7[11n1Tvo%q#h&awGnM.kMjnOx6o#P$<:8L=HKI_C+R*qadGNonK1ăU"$kNBatqe8'1a]11+\n'Z0s]oc5Xhq,q1$W9%BIERW.:>k<UeK#tv6m,;Ax+QDfaăU"/BQosH'6+e6^=<0bgg2qzUokd.o45UV_F(1>S7zz]M%$O)9*8[==1HjoiJ(fgP/ăU"H[p&Ew+frlE\RHEUZnrEplr;(vLV[<'G7jDE%sSinltTt5G,X]Pjqm]syPfdq5>ăU"O=5HM6Xun:^.&l&1c?#1hM]W?8/MVt(n?GEr;T<BJX7MCW($1%ZFv]:\u\7?:DSăU"Lug(I-SSJ8ZXaBYpO]:XZQ;]l.Nas*p>CemSNxWtY0NcXt$8he%N&t?m9Hu-DdfăU"2o1'SX'CcK/bY=DO7:3vBmN.D_o_[.W62Ta3ry:*:&TX1II5j]F**O*,CKZUuBcăU"Qh,9jnCVR9>#l>-P/C=)h6Fsh%9:f$*]>806_<&Gd_fD#vgR:*)*;+?FYhk9#UKăU")3raO2]+dS(t#)6+1(jZ$HmN%%up(%)9%%[%-%uAwqKFq3jDn#9%%w%O%%0#%%%ăU";M81E4DB0S#V;1Vi^0Ky>Q6#6.J6\j4eXm2]D9q;x1Ze9;(w0(h(7AE-S0n;=)GăU"gZe#;'FsTR,7'c:mODGPajY)gyz65:&)UKMkpUO5]d]Nk7d&.R'A\8;oL=ef5A,ăU"Tp\,Vsl.WTatf$eqFNlqrHN_xen^6HdKqi7Ojl<A)_[FV<u+I8ZkU]MD3^Kd^5qăU"F0n_0sT3:l/1#=4Aoa)U(_2P9?TJ'/eRc#:_iCAG>;1)\/#TQ2oP+hY]-8R3I2kăU"W_QW()ae/91&U'J=,FQCV/a?/O7?4eg,y:lvY0)4?MR<99PY29i[Q3$oQ(Y[-]&ăU"G&OCUe&Jfd-0U)=*^>/IA%&8eFSg3_RC??dG+=%+T;O&9#<Y<)<[A%l9^.?+ma%ăU",3l)O*f+#=.KO[gUBEs'l:v<Y0)'o%+nYF*i/Ga(52/>R6Y%#]'sOGEI*I2P-NfăU"\>&(:_D/U1#21((//Qg-,Y:qU%,y'D/G5K4f%):9cLYjiaOQ1/SQBYf<Y&Y=R]*ăU"SP13J7*(n/%ms+Pj6KP6Ab2e_32LF5kyi0\SE+%67F3HOf2qS;=2\ZK7++;%%fTăU")#?*':kUd)P_hKsgk:b*wSA&ihPV&Ki2aP7>9pH83aA'(z&6WF=m,jAbU4GU_X(ăU"ps0de;s?4ml1ne5])(r>2$?RNY_JiQF+o)+a^2-)(tQba4jC&hSOQF2o^&;&4[făU"4MLV48/QgC_oHHKE&jr9jY4\UQix-HrXz58(<t,A3w#JjZDV&c'n.8g7pQZJ..băU"9=M]8,103GX4cS]16J5/%TAIPt3lY-Q^+HTP;Z9(UF*2))dl_NbhedgubX-FL8aăU"Jp9KE[vSkMvCtnK%o6aoHg3G=^GqFJ/i<T[$N-H20oO\sEH_i^L:67TbS5;er,=ăU"7X.FB5ddOAk#__PS]7r&0WkN]GMp;+_OZDTP_)]SDF22DZXaDlg;CV<7_,p/$$=ăU"[>a_\+VC)PX-/G_NeXMtV=P]GFiD\1sIVPk,XC^I_l^Ps2Xpp-MrN+I8&BS_TW_ăU"ql11SCNGF<Jd$bZ'p2-a3G<uJH$;&KN<&.n.iid7'i=g=3$?emNAZHJQlZ>+U&văU"kEjgN,W4Tj-UFHkJ<L^EB:&Bqlb>c68&k5#lvF9=Q6jWJ$f%6*fnpEX9,QQ#SZ6ăU"[F<?Rbj(/GUVZrHpMNTfI^b+nj(q.kIkU\hiqBPp2%:Y+W:NDt,#Ioox8YSL5sHăU"8+b,U[V]m2,A.Qj;bvAu_mfj2yU[M6.9oJP,//&YEB6#.(pIp*5yFoDvAf$kJeAăU"0eF9];$w?mg>YU/gCCO(bf=4\<l^-UTNxvEV^>5?2Rp<eTql,gk+oXiREI64)cuăU"hleQa^Rrn.AuLQqY=\UAT2g+QC,l-ZCCUZtX8AIeQ/Xs*EOi<vKId4ag2b8.FgDăU"Hou*#ZHhr6YW4\zZ=Vif9=B5W0gPR32i:RK<k/'G,jew/n(WKW],iwG7NbC,JX,ăU"e7S<,erL,$o-?:4K>=n2a<J&7Kj<)kTT69,;d[<a*ptFxNV?8Nv\bDh^xc^grQ,ăU"I4QR**/?j&eg]:gf8SL6+=s).RFvj-r)[MJ$JU,mWC/1=RgB4(?nDi-?<YcFbG+ăU".C<)xGSzjbXEUW#MXIrljSIK7]nO^qBg]kOYV$NeA>AHvxUR6TfpRv/v&UPdlO0ăU"%pQLSUZX.2T\W_+On16uMI,T(41+2>6rkrY9J.Y\OkDBAK9<8)Yj%3EpO>o#m-lăU"#-R]/D'/mKgu:<J?H#<tmF4N=4hv+uiF*1uSPfRz0A(pF9$e%p(9a9^e(9a*#WvăU"=oKANq_%w#AiYK3/L]i\U6_(,[8HNAK4-X>MkAmlE0gC'As;t'j->A2l9]hqn8FăU"9qDDdCl6IU9hFU?DJsD5:P7g8ADCBb92<^tE.U,Xgg:EEmQc+:_57PVj#^*e/85ăU"<r]wAqb?r9CmBGT<c^\M0B#XREq<l1x$u#a_imlN6)?cc[sO+YHAX+tn3uc,3uBăU"b;6#E?d4GeYLNnEy_Y*\fdrTw:G1ZS8$(tKmu8rP(UwVVNq(:AJrQY]q4lK>RcKăU"9j]?2Hx>s3lj2N(p8hNjeds3upU1hHRzndbXnSVf.#:v:745d,\/XrdO,j6TonNăU"u16%0_ujW7uBXndF3/fY_595L\b)c;g.J^:yjrSE&c:neG2sr:08]7kHxcop;xXăU"'Q#aZKo-a,abX/=B*Eb+IoBVP5#X,2A^Xi[7TzE%I9]:L/m'(ZStm2nAD+)1OG)ăU"N-abr[PM30yMQbNl^^Ux0SXQ6?u,H)mo;58.BJiA\lS6]?KSB]WuJ/FJi1&A%4]ăU"2$^3%\>5sl++<.E6VGtFVud<w_Lo)8'N]Sr]Td^eV7eT%2og/K(f*\rV]'(P\S0ăU"hEZaUK&ylLGU(xxEK1V,9*eXXOFrCw%YAO]j8;?r2r_K[+9a-*1$&ekY&CVD5t6ăU"z'/vx\oju[:w)CR7]&t)tMYnU6&:G'uSALQ;>;Q45ziuU9#ij,Ap8tai/6H<Xu*ăU"iGa.jw1RYUPEu'eSt$M]3Ho#GyYNt)o*IKofTAE]OPWL=>HEN8t923+PGXocY%7ăU"eJw2EZ<EC>X*LDVlJAyx9B8GXl6jEk/)dm3:&Sh=SmD0Bf>p9RuN)248BPo^iGkăU"/O?8ysgzeQbKJ#aXLc6YjG3baLS^3_Arw9%zmR+s^\o2za5t7bpuvQ^)<^Z[O(*ăU"hj)Fm?.-K;;x=t5*>I8VRO$KjS:W74mKZX+Lp>aiA>aKH_;^nlP;/<'83QlQ5#3ăU"u]'Kd32.bp1w4,1)8X#c*p$,<KXJPX^79+YGyK#kBGt4%gab)Tv^?Y-P7l0rafuăU"FWwo;ei=Lt-ldffT($NP$i:$FtK7^0'S<Fk*Ai/hnbUE7v2<kIZI]9gU[9ID\9UăU"]b9ADNpE4=S8Me/=1D^CT3TDk1V\L&DG(l.q[AC?t.kQD$Y#0=U67<NhYxDPtL#ăU"MpNk,l,f28<j[4jd9GpIAEN/sJ$4/+rI7QR$9aUm3(zI.l3V,zBqG6h1iQXIKa9ăU"<+aA#*'uI7>HNNYJOi-A#Z2I$$$+rBRIwh9.oF$Z*'ufIjw$93e]ie4\iwn];0&ăU"L2PsfPgbzbKK*_R1K&<0FhCmj,A108Bh/=J<JUV+76_]$QF4;6yK.zRyK\x_U'NăU"As<*AGgD=%1?R._tiYH&jZpl8*Z=d<:KCTWhc%i&gwON6\-Yp38-z.FJdZTZZxeăU"*b>Jq$8V_NoZK)<^$/mA=uF7&5JjSFvoDv5)u4Cj;CN<.LtFhNkLbb/$bGMLNCcăU"sJM]w:l/jZYZ/RyDJ5n870rEnX,K$Xk7g#FXAD]KfwTS1?+2qkM^o;?g%S+nX<UăU"q^y+rar.bKh1l<TmxtQ/m>z#.rfIU=4UserogNC*00Ys-jw]w8s.0_S1BaAmub(ăU"1.apbu8V=vJl>J[,ztt64?/8.#9WNv:u6:]WTW[Ox)SC:NnRkj[ZB)BB1MF(\-BăU"f8tpRHa,^DnDR8gU^9)2W>E]#ZjaUjW1hZh'ZTj_0YjjD8VM8'.684_re7XK.hcăU"VK-xkn]7y_FID>Av*:N_C,lK_HkkQ6=SFXq,eH]Lx=Kv:8H3fRjqC\0Qf;tai;VăU"sNJCjt[qrnhclMD(i?[#nZ7u.MO]W,t8>uT/8f3LnGZQ(i8VaMB\Y.RZd1;xb'HăU"f/=AKoxR+mWLn%;5-s=wb,l)xLDc%Dge2df_<nrRtj74oc5-]2kM&UhYQHqS3+,ăU"FUsG>4P98r=LiC%a6*MYJYP]-TDQ=a=Df3WM0B/vlu#]BmD(vL#WL[rEk&%<C>SăU"*#(UD>^b8sd$,O<w-(=s7l-7ZGQn$f,Jt3D]8LE$4#\9k8-vGCIZRDl\-jl<R\.ăU"RZsAR,fKq1:+LNZ?(g[Rm_?yWs[hw$s%MFc,<gWnNP?&'N.r7^clfLvxuoJ<H[DăU"jcc43Rq-h;R&l][Xc,T'xPrr-u8pEbZwi)igfa%VNaV$BsSnRI.PbGW2cWPodNpăU"QHKs0(,)AjRx/r[?H<t[iX'40lf9e<-)ejRB,s_Y/[OhD_a;cJY40qKr/>#bcV_ăU"#%?eWkVj.HV6cX=lG*f\IN8V:dnNEjYH5j<R.qn8s-m>J&j/gI=lDJ:ln[9:1H<ăU"a<.jc>WJll6TogZVC<+R3tin:6*AH2<xN.rd>v8WwmKwkhA=5W;QJEUkN#7ZeTYăU"ES?lvF'A?2/=>nRMN-q3z/n5>?)%.9Tm1dl%egMM]h:R5['88\YBj028H5X=mMUăU"JGs4eBknu?t';bupx?n9h+N%>Cho<6h.$ZnDs5R7T'?H8M=Zmb:r3VAs/tQxwrjăU"G?M[^n6\O-ZR*\PH'NFLDw'#QpD+Wggw+<&eG5&Gh\gwn\(y\wlGl$TncH3d)9UăU"M,rdif$Euu6xq*Xpcsm+i2Xd;x<Sm%(UWN^cdKvR'E5ASh\b#<hu/Gn[?d>r/-1ăU"dr&X:__J11k<[3D2C]rMh[MV'J$>B-:a=kT,>F0CY^vhNJ#[]e6YnJp.[W>/7&răU"3CkvU)EA76rIsk,[AeU_\lJb[GD/C;rf,>l</7^rCFk$V)6:aKkd<U)Be7:rNh[ăU"MfJR?k6[9s=nX1?/CVbrpVs1-r^W<3aJzn[c?a<\[w<\rtU3>UJhX<3eJLp>,#aăU"JIk.3/C(rT+VsHkV.2mD[k\VsC+r2[V=5m6t[7Ba7;k0WZSEaE^k*=VZ:a4[$g3ăU"9t'vpk>brhV3GnJ([:C3m(dkd3m15rV>=b;av^k^Vs##kd16m0[C56m2kItUIilăU"Jx5m(1r6koHWSBNa6[m,6-,L%k41%2H]h%AaBXRbM9/w+Hw,B.[aWLKe:A;&8f1ăU"4fwzLECC[Sfk25wYu*>RF5^9fDM>A\\sUed4rYI78*]9wWL^v3AD-XHvN=$&aJjăU"xaj2&anx2anf$kHKsB#*7>2lt5b(qXNxXEHhI+g1)N^4r=v^0&HsjJBfn7>=OUeăU"MGh*7LmVmNOBI_w;yLswB;zWKXr<N9;?Xse:haIf#+PnPqM,f83F_E:ipb8AF8văU"^y9VI<q\px20%/RZ9g-lvs;*3)05L9?2T2;sW20WwdG=AV#\Nt?op0LOIt/]3:răU"ImAnXZ<6%]'dXU>b9n<bUHI'm$2>;NgLR(0q$;M'?2ehRs?OY<wE<pPI',UJ62+ăU"Js2(d1*ct1VJ>d8wNI:tG2-=eQ4?'Fm_)APS#loN)_-fJ,bW0uk^-lNnF<vCxOoăU"u$)CpyJm/,R(QXR..7F1]f8oM056P%+_5K-Tf)+jxOnYzZ3%jo*#v[Fcl1TwmkXăU"Qsda(QQ8RdcisSB=Ochn85vxu8)QedAao.ndLQ4m3jHMT=J:GeAqw+%S1ExRs(=ăU"TnN?fTL+d\PgK(ViT>MV1ela0[P4-8hk_bwx\R%VXG22rw<(>n8_Z<q)grH2E)GăU"A80\7pjt(B?jgf[>JVgXv\pS$V2k+>\T&zf#b:E>gBd#_[^-tZPNj\i?VSgaUWHăU"kQ/Xg$-Ef3>U\Yo^&\T-b\2AIuAF=xS(k\t0$8Lk+,cT#qN&qm/s/%\n\PKn=YDăU"6bot78>=bFQegC5yJrarH/8B\q(T(dVnPHeg[LTi&hn_6iNo3<6iS;ChBGie&g[ăU"ut.?m\9aSN$X^rj6vxhn47s]N+CPTr7d:sPQ.w$x4yq:X7R8nsHLdgJIrpS9#8CăU"5ihg?nIi]S3*67-S7XVg/SYI;(1dB>e956O$Vs.uSMD$Q)Ms2aAmL)MEDn3Cs,JăU"o0p:boW)77h_kuL'.x]UQ&n#Oz8n/1G,IBTr&ukJRc^IL\CRyUTzsyAy#z<Xun$ăU"y8=vnBjz0z3[LftGOhXRNH'8;yRLl*Mo'LJX5RoEzWxoc6hyEzStZnkxC]rZB#JăU"iSmCa#1$iV#DH_y(UTn&nU^<peH3qcB&is6p;+JYOaldxYH[cM[a[3o%fR?'[6jăU"rG#RrXzU;,H/I$&i.EfrsP67+g?-k&j[Fm0l9d*9[0:z7H*rsc0MCHwKJ]F#\-năU"VB7TMGP:QkcMRSf,vW3uU*L3R(ZQg62GJ+WT3m1Hg2LZ4BGtzIE1QkoHdm:z^5păU"H-A5Be8SBC/v;ohqEAlkZOy*Et1$56pNcznru^($%kb(eK[eg-itA:ipe&kU&fCăU"1&U$XLdtAJ2)$JMOrp4Ho=^C_GjpGYk*>qIqap1R3bv_*CMzKsw?q'jx8uEJzhBăU"WkhXO]^(lNN3i6Qe+WND,-REA9ugO_J(%u\^B>g;04^PBCK4$=,28HWee(pj4R%ăU"?Ckq%giP]cfBC>55-^.mnSS[<D6JOyCaZU&i/gz333wKS89j5K^tW\;k9ZkCXO.ăU"YTd&oK8]UZcJ/YrkxF6YJCn%/87jjN-%_:#jNE1iW=(Yz_LNP,clUHE8qeA3CG1ăU"G>KBMAM=KaG-)C/:;%yURyZ8gTj\Lg:g*?4Xhxeaek)Npu[=1K*<zq&j<S3:;m5ăU":tZqUgc+*^,BDOP64R9_a/DmoWmu3xgcc20*Q6=L>A0^7IVnG#W,i2&q+LkU=u2ăU"$*PuquWk+^jQSA+Yl;4hJL0&ZigaTN0DKQl[VtcE4E7FD^zPSY?7SQRwikf+OM[ăU"HDCOL4]tZ'2K$'<gg-+&u'*?#hrYfJ_YziV>0X%phTA$uMyO&l$N*V05y%a\uk<ăU"b&*1.=e*$GTLr-;7Aa.onej_+s/<ihMPg4\Z_bc#X\nxQ\WT>;kFYMaU='xg);<ăU"YbV\HR\6fQ\>tIOO$y(\jrK_l$]3X4:8WTBWJS,iKT][Lp4#pW=:2b-#[sGtYciăU"*?R>RiTGS5+'ANOG%*xLsOIju+<j]#a_O&C:9LD90E>+9BHjCH22BSl=*&meF_săU"/woN=XbBXnW>Q4U:RI]9P4PV1Eg,Vs7SsbkB8j>+q8u%p()9%%%%-g%)h1+K)6lăU"(Y[)%(%v.%%%/%%L%A4023<4SMCGCTk%DATmk55,bYxU^,ZeO50+A*,AlG_[<EcăU"]mCJYn]^0/e%o.4Mgmg5un,hR*M$C076gM?.VsbV,UdY-FDZDtn6QqfED1**XbfăU"31mIDH82ku^h$,l>xNF56l(V09T)+=\9K.s8q&4M\<tO0>'i5rSZLL#OsMG1a>UăU";\l;S]p+8o:3IV^d.\[7Fgz-)FF#j\2)b5le3(oe/0v63a,>Lm4>'B9)/;2P]ikăU"ivA:2IZfhiOu;U/9do9l-61L2K$nE&q\S;x/\_S[tlh.TBq&8<Pm^2;;+etjKX<ăEND SUBăSUB V8ăU"\p1+TO^Q-,.gN+*-3l&?WjS),QVLJ%90GAgIO>Uk^u)e\:$V(lCW/&,A61xL?q3ăU"WSt&rcH4:m\Qg#'RIGS7y,->\6[:fhH7p^Q#]0blOkY<V)?3a4TKsedeGZJcIW(ăU"%w$Ja'sHQJqK)g\PoGd#?BTm,'raNOqhQ?%Q(.%=TlgD/eclu+nXOVR55O->9*<ăU"0-1f'bVlLCuZxG,wqEIsiq$ExD8En3/[p'ck*o,&F1N.0p<.2oy>-'ff+61)L:)ăU"zlYtm<(=L)nT=U:5lh$%H];b]\)fQeLq_HZN3>Rl<5Zon)XQmszjY^.K3d&I_m?ăU"s5lRRkHUUP\vz,L:lUW7TUMWtehU,i]\Y2Wa]dVxZOgW3liLJwZ^Z.0bg$d;LIjăU"?pVJxM-P8OQB,#)8u.Fo:BKB:zl6oFvin<]vPZD1cDhgGcNo\b#U5_u3pT/6>%găU"2X7%Ac491l1d3rK19-es,/%&Iw[ue1au(-#JrGMW0SL:$1-TRSQ^:W>CRXiIM](ăU"CGPPjms8AvG1HwKqrtM5-.K-8aj#?(WVP',pd#_*j\Mlh7I4\vIscT(e,rH::7tăU"0k+/D]\^,K*bcM#f[78\2Yu,pi.S:>ase$B'OEJv?%x(D4Tz_igTPan>G3FN'<iăU"=X^)1_c/5wB)1WGXyn7S5:c390dUlb]FWy'rQ^?QgD:exfo:,cD2Lp0K9H5VJJtăU"\S--oyNTHbOCm?n.P93lX\kc0Ys)b?w9?M-ZRG8#a<f0pt-[k2VY2K/CYN#Vyi,ăU"qjS,qqh+T?L^9kecH:uL,6:_6j5qCf&_nVjaU>?-WBjz6LV?AFWe6^V)>=2A;?RăU"jbL3xKkLrnS<?_,bD_;Gc3u]xf,U*xllsTftqEQ.V)FCWF/(]AB3T=0$Chq7.2AăU"\O?SJM3l+t&KbW#]dvbroGn$Oki(IVZeA9eCMQa$#,Itt:Fk(u&DbRs[%TY^(MZăU"]Q=*_VxV-ei-vHRKM;DQ1pBIyPcuGaC;^yj[[mR8[03(F.lhboNMCF[$aX,.X2răU"E#Hu6Kb,DGHl#R_H5&$hSr?p+b&BQ'hoX<:RTDlt*e2>QDbPn*Py2#T/o3Q*qaUăU"AQAo(rt/mMv8eXf%fSp5PtR+T+MdXn^S[g)1;t85%_jBV'kaq99R2X*\V18EJ\DăU"z)at;dqM)36QHZ5oPxHCf+mHXTEYUce*^N(u%p()9%%%%-j%;P)#K,^4)HC(%%%ăU"-4%%%/%%L%;81ME4B0gS18FM&,>jdU9L(6Mx/zcSSsLd)YpR#HIIZ5c(TY):mK-ăU"*0xz'\$VRR-(XZIFeqmsM=$Yyr_Agja^oZ?<_I?gt7t'H?AFUUE.*WoX[,Qe6m6ăU"t#m_e3Mj*kSrMnIrHMH#\NiseCOAcHn6be#8)9D%WQa+XUg*J&Epm+3^]'f>=5CăU"L[8f.<Brb*Iu+V1DC1'9PKO/1m*oiF#mZbb+v;i;aZ=:H2J<BA<e[Gulb/MJIsRăU"YEoB/>Vv*HJX?n)Ng*>StL-v<&F];t.:nAlk/lYM+Yi?o56,B$aCPOzIOTURqTvăU"K]A-,Yb.$rSkY?CFMbRoz/8c=KMlr)zmNp_Ln80aP\?qLtjhTsSno^yo)E-=^qbăU"%0HJh2dFg;hzeO$.ZRdWO&H69ftvx3gVE-Dh1<2ei%etC??QrQWjDZcRa8iLJu>ăU"0d_TE;+>[4CgR$0rEsxNBK9mLY,Wd3jPjn9^JZBg<w4bd^lAs(Aek+em]8uOX8^ăU"#d(wuI#f-MaP*h$QG7;a?xHbYi=0r)?<(H\SqFi$V_xXFHj:>rSPYZ6nrVQ[n.săU"M\U9ZKO$5cu.om]M<$X&hh1]E01h*a9\xwR&02h4nS8ip9hzUE8&vNRNO7U9);6ăU"VWN:ws]r$hc<jDbr?DXy.jaW$DdG?+3G0BC,*;OBle::pWW^&iwlhodA&/NKX#]ăU"Q2()XjN?K9gyFXK6-=i^&1_Vjn1nkthm(k;2qs%lD[zX*%q17Di,mKVEnf-X)k'ăU"dK),H;4Qj5Wz$Vkrt8rCrg.?>03%Q5P%uLvJE9a>LI.\[UK56M*rm]8B:,GMpWhăU"<:2R3MtkgUux3.2hteX;n*g5KOcmB;ZM1=PP6QBqowUZ2b;[_pi[ikA1\wpJ,=yăU"OpY]v.phmmcaeu<nQ-<C9^Fv1v1IrVL?PI.=Z^^w2NSsNolKSSNI?a-drL^]3bpăU"0QNjuX1xXK9Et9^2iqUx9qgGJ&:BnZH2#uo,>o#hM3Me#Qh5+u#t8QPky:\vxSsăU"LAn4^jNaep.wN_a1Y1ePNTZEvkIP.\V&RqW/xYg+'(sJ3HGI/9T>VVt'Y_8d5otăU"y;R^bu[il]X=_SbW3+#;V:&$dNGDUHqsdh>=5Tjk1.t4N<'t)%k:,1v0u%p()9%ăU"%%%-[%9)2^Ko=g%+mA%:%m1%%%1%%%%ouj(l%nj&&SgfFxea<tFS?KiXL]x'<CLăU"Z*I/1=Q8M8A7D1+r):R2]h\JIg#^';r7=I'Ik;L.xZEE77fn'ES?-b6LIG&8FMEăU"EE5MEE5FH]Ut&oO>tYoilg,E:aZ6asaTRqX>4Z]_k3wt,p6252,lBm[.<rZjggWăU"%e+-vniQ$UPnRM'8A^;#tDNSxOr5?5s$LKIej.+vnX8)2uhVrot[:fQu$uJo;HXăU"V)hkmuD%G#QgGE$a?j[\;a$l$8+o#.pNO(YPu8r*-GGKiTk:e:#4:g54H?_2LJZăU"tbc[LbW0\Lbn,n*QPX).e$3RF[*&J692*';3vIPHnFg^lFeJGnk>Iq<96U28RG,ăU"lrIx\2>?dFhY6_u=&zlD-o,hw98LiM?W,t0/sH(A_Ux=<Wdgcl[#M%UgMG^GZI2ăU"-[7(=HSTS4U?m%+Ccd.]H](;Q#*RO$Q#QIR[O$+)MD#ES=S3F(GKK(_1c40_efXăU")gA?X;A4_)K<.N?T5*)[BlveL-HeJ(':&5/-_J.L^);$I0P==H_1oDelbkyLufPăU"TvD2EoWL29P8?w;>lr9W[<I3S>IJL;Soj=eIZj1hXtM5&2>+_nCBNp]PA0Eu9xuăU"#^#McTn.T$6/<&eb4%(>-37]/pw16LaOo0>K9G*.1>UcVAQIF1e6OvHoM([<+bQăU"EJo^^)fTxnTnrJmf>U/\/d*'AV5$f^e\&o/+'Ae3EXIYkrc$tp=7y,R9;xT\3)văU"Z6<7]:6L.R[*)7I:#:GWf>albl0a?:U+(Uea_#Z4L0]ATk,BUcC?oN'+7md5/&LăU"49.n,*Gl0HF+g(0HpI:o^]F?Wa9](xQswQZ/V%52YFRER.[U2aT/e>kG?q[z(m=ăU"cE3r?%,]6'[I#Mmp#/+Mv^XMw9hs_Z+=5s+^B75BFO/Bi7.[aCUP.0*HI47eONcăU"m9fYa*ic-8vxM(h*CBKHcm=N[/^M+2VRi_dUH>SB&4L%6Bs7.D5DfK<=a'zM>-)ăU"tZw#7_s'cvEWl$pwBVYxx&Xu&=CYg#9Ln%qF\B7-k;8o9r+5T5Ma7%*Veit0'k_ăU")6oMlkz7\Z)?-.?H6aAU7\3$:15AJh<zO4kA2;GQ.1'?7+8XG?;GzgAW.M$w92hăU"103^%U&N+6ABydR%-U&i1(ydRp#be=JcH#p,;(;FX=8CP0Y918sB+5M2^Q_]jq/ăU"uN31wFRh3R9/uHkAA9PjoyBw3UfK8P;=4U1AyHEW6nJ,y8xMd78X7U.py*?5%]făU"maN]*1/E(5890YK;M[KSjK85n;id:$D8bqHC-/pQ*5m;rdw&OT7C.)BrbMU:*#ZăU"3&8.HRbecco96>Fxb8.)NbwLwb&f)2?F[^fO]7'eFlYbP\_933qSI&dNef(\Ik(ăU"W#dl7x,7Uu3g1MU2%o8v\fkl8N8,[KD'Ti7boogW./nUCz0>VZ;+y(rf4^'q-LsăU"R=e<p^B5g.*:a%-7e9[Iuo6gR+.DTvF7<&LHtqr.,FqZMMNf7BQ?<bxj\56r7,WăU"^YYul>G*U;=9DZQ[_sRgdB?C3%I[S633L8Tr0u<\\Eo*epQr5><sFC=l3';5W2OăU"9\7zuV0G%igYUnVzzk9H-6s>,D^TElcfd.jLD_(phK33E+T?+.4hN*rAX\7b5rKăU"X1+HpKRIIO9F[sQ>H(\%QFbSsGa4sR3#]*E%cXr:-iwDzVl118;r3ktHJoY?A6jăU"+xX=%^0jc>_kx6oC1d6Fr,DKeaZ.Q29jXR*%O=/'YTl[.;&E3AOVFLqcpVFXRBAăU"n8;3W;2/IAIlL%Q:.FgK&p%,(TmAqr%X/L'93ldp;?jNG(</J?m6DPH4EOqV,7qăU"kHRv<b+:?0gdJ'Nl5%;G5?SQ&pRb3\qU/1c4H0Hro7c5#Q-Ok4dGWd85xKCy2zEăU"V3M94RkBf5S^qlkb5A/&__/_ak&I,<^]q8u[8a-$HcI:A&mwCc:V$i,p+.nWni3ăU"OJ[VN3JFx>/jtRRf1$aUk-$k7K+whAKphbR(SbJ<T>^l0m7\3?hMnS2;)D)jKI>ăU"1tDqLFVH=ivJLILxKFQ?\OVp'xfW[<fZV(XW?F2ui]SiBvhHGJu3N1_27VPgH0=ăU"]/S:/FS8H<rhYRo^V%N-UB9\b(VFKk:Tyfu\U2f%B&9KgTmWdFq'tAa?038t[+IăU"Kd&+zb(aH-yLQAcnXB%CF:,CS5nfFB'mKpod)k4xVcu:wWw7Ph+SVSD1MEDW4<VăU"m+lFZM>c/MD5/?(g.qh>,,,N:(B'(B3l,QG%Y3n9FhmP9gai][VYk.gawdR^8zBăU"Z9pffcHkL%X(rp%)O9S24\3nGXj>?BJlTU7.W(=s;F0?25KH+<kjgY(KrW]i]fJăU"6IHi/Y;u7?#o?k,D9,'CCYdC*^FSCJg'Uuw2N?I>UVeXfv:E_u30W9*C%R15<o[ăU"?^0HPAdo&g(jRMd]:8e92/m/M[tU5=(%GxmBC?d22&,+>B/?9H)17(OTEyET/WpăU"*-YWL+DX/LlqIlxbU$%*8F.2XeG%yH?5%D.97(;KA-n]^)N2Wb[uhW/J0667DN0ăU"%&E0PQqTzRETkcGdH,zuFI?S7l6<I/R.awoM/5NTvWw&WSUw4N]+QmPO,YBV(PJăU"Y4K<f'o[_*%bzF22E=9^eb^RT&55xkB=f,cc(n'3I5u1ep\*7rIWWgKYZH(G,*năU"'t)tGsV7R(>[A$cYmE(<-MW+S63*C9I.6d3L=6V.6^q%=OF,2C&-E6Oc22CuPt(ăU"dczZkr2'NnPJi+T7t*g95+&gMaTOYuUccMo&K4czE1zeXD9Fu+^v.aIff4p]U%9ăU"op07+nb*1zgnC*99m.ZUII/VuI%YDtixH:VCc:yDty8lCRFScB964Dg9?V-fb$=ăU"A;$e0PDq%[8Fe;S.Zfr#-*mrh+gfKK&I2OEH/w\5hc%q[5Qf)U/Jx]_<n\D$YZ\ăU"j0jlIa[Y?w\jO[2x\%PCTh0dw/_6(d,_&A2=8VaV<(%y?fgfFAZ(9LFo6q;]m[zăU"B6YNrK5RRT-CX9WPFlSrP5/MdTuXagBQ)Rs.Y^Z&7o\/rO4>*a-?JA#bdgesV*TăU"2u1)FF=x,Jf3Rw5u-<Z]WM*9C5J#E%Zg-L4[xA>&/Z,W]C\+3v<-x[R0gK']Tp'ăU"*j8x;?NR^fKBAY_uFrXRQW_wgtDCB(m[+t)l%.EF]Ucm-U,NQdjI'Wb>75jF?1&ăU"9ttv(iEIKVFt:w9'j_9OoKBJa4\ZAiaC.M3cl;:1<C%(]ZmkEPo71K_F]XsL[drăU"<,LeXljXG7uLCSeshmovA9#]e$g2ZuxX]KOl3C#)+B3[co1-.piowUDrUa+qQctăU"oA0Pj:VTWrTFTNWh7BKKjo\d63zND'<Uy&LquP;?F_8e6=WvssS7]:&F<w'EUNtăU"_Rw*XL3KYe=$oIe<B*S:<99mo#p[o0Qt5E)FSD7'>7W*4<n=H_-DDK*/(ZAiTNzăU"8:7yZc<X<]$Ff4\&vt^a79^WX2=/FfAb3Wn%9f<$a/[h]9+nR7Om8k$P+tUk0%?ăU"Th/Sk.$Jv?gd5.0k&1NJ+PNR)H#uMN54*tu&0e[U>7-F-aY;GJr6rvA;]]euh<MăU"Si:B[A#.GVpS>8RahsCbTm;EhGsESBxKb9GRf^U6vqJ]4S&ep3BT2iQFeO?PT;uăU"^Y9%MJ6K^^'q<)OCmw:>p4I&Ce?_i#d<*?AY_la)%G.?\&0)G3O5q2B=RhtAE/WăU"q==Q1cd0jlL5_m(GLo/1JSGT0^^O:n*Q;01G*\A'e-SW2;tkJ.jDWf/lA'z+Lx?ăU".T7LNjpYQD_qI=vD8AN'FC$rRhk&JJ-Tr(>\1/X[;zMrmD0=Zs%v%,'J1M]fm\oăU"nP;v--4)rJ?(C\B>n-m,hEvX:MIRW.5ymhnOpcAg0R,#RBsEe9N<0AEGsSYt$%^ăU"DN#lu75M5UHs6qf$GPpLZcR9*b3+.?LjLJwkh+rBSRRw&1MiX\S?<%:6/=4eyXfăU"Hpyh\k#;T)I$4KOS8AnbYgMubVKqD58?wgSO7,-AUXzM*u7=*A&OHLFYX1kDBzwăU",\w/M2GodK7bihhK9VEUR3BPgb-<mYc=<A1jX/ll9M.mPC-OoHElUsMm[\]qW:AăU"<saz.mV#8][W$ngR^FB%+%Z(Xb)IQ6D;,=M#h\'+h:Ei5lw]fMc/]3C#*Vx_oLCăU"kYXq<cFgx]#HUg&d(vk#SM;ps*(ed+giK7R(lAQ7g*6MY;;*etGCCT3F(l85W\7ăU"9QU$r7r[phn7.eN5]:($QDZJ_GQ7#_.aj[z5#wW]y:SwnjP+]pKCWKBC[c90JS1ăU"?-&lo,WHZvS6/WuT-zKT\iJQcsqrnW9;a'iE?yeikA+M8o._+Q5WnqXRYKsNdW\ăU";]ZZjROnYdaA]oKFWB7)0s1ZIeV1Np+>SS_8lPk[9E5Zu7Yz%ZTD1kkOGtSST>CăU"8fBOPW,%yS?P%+MDAA[5C-7M#sJ0b%-yP^+Jt>4g_I3b2XZ,Tu8>'q.DjJ%FnJtăU"\5v3H)WzZ5](SLIr+:U?uHD][55q^9[LUOnWHj2IOq.1/<a5y^..IW.5DSzR;[eăU"oOEFj9>6MfLLabg*Pq1gRDTpD^'igTI;J7E)#J<^UH1wL%9_)BVgmX(u]7v0'^.ăU"1UE=NAj=UE5uU/&q0)iSl3(*JM\VSVgBUYWAObGkaQyAO%9c8J$GH[My&c#sJr0ăU"jKd1_7P[m]n+'87^r#=(EMG:G:QQ?&2K%*Bf'$h-gnUw4^94nlYfVeJ3L:\1\TOăU"vg)k#KfrCzU=601rA0s3Nu?tE[wSV]Ib-7N9K?VexvZv(x0-vxTx6usnuuu%/xsăU"i>(8Xujd$Q[P2Ye>kJaO*)jE38DPOU%M;cZuaQAK?Wrp0EiUMcccv7J]\5vXc_uăU"cM^4g->JB7g&<$HwC)Nkc6vqmBp.6?e8ivA6$TPh_1b1kPcG,;l'2,YznyQC=I7ăU"lGP7nnL3;<E^hn7sJ8r\aT5IPE\w7yAtvRCh_W&WWHQG\Yz*go9'L>%#:63q6=făU"G3gEk-roW=uSs]KoU]QD89EG%i>$'w%;x+/V5j1*-w5q%ln;dKr9o<M<#g^Ujk\ăU"[E1F2X^G;#-,5a\]4YTJbs$$1g\6fj%AXQ.H/e%/-bTE7bZUzs8Tcw(QqLrGIz*ăU"s>x?F,G1x2J$O:lk%]F(Ic:9Pi6+v'Lwgo2]\IXRUK1&LRiI_[iBV)jVQ<qMNkXăU"cbJk<kX6j(6qtsYDnAXcOgy;4P>Bs%].VvmVo*k[T?C50dLC+O<dZgZf6lLA&6FăU"%hDD_oF:J502Zub]SOd/PzkIbyGi+B*iA5^jj_bc[[EH(*,WL%wUz=gAti^>-TlăU"*U3L)Bu[O%*u&sz,$VLAm[7p6]1<m+4yY)XaxVvh'*1xR$dq?r'cZ$SkomPMR_*ăU"dD^srRtLR+%[GbIo%tK%/ik8$m+bM]SwWoHlw=5fEzu=w6UhsZEf:jviYVI]+-ZăU"K(a[h(>74aTnNQDZk/0YRm\mKoVOOC1L\JhY[$//]&I3gmsp,Dz%\Bnxz?.0N9văU"MO>Ci-m%2F<G:V?GVj0(z]H#f^kLodnf4.GK'm0pM:[9nwaJip,?+S=OE(es*NKăU"W%DfMqEm8*OWUhJ85pTKqna%ajV6.Z+NHa0^7nXj119.fY'5udgHijWW&K00Y#ZăU"QuxHEW_2vdg0.i,\#4A(CZ%0zB,a8L_+j_%e\qEEAJ6B3]qR^ODt;+#/-20SK6dăU"S>*tHO0?H-hD6)[a7%Bwn+&JTo<UU$)FgG#/i?mUR_6^n6R,;LWSgM\Zoq(-guhăU"q*)VCd'2[NX>qLh1T,M\3DJ'FqXLDqoAv'ZVJL$fQyu[8ym1bSc.0VbIxARMeCMăU"e=Qfu),ZRP;-TAf*dr90\.jk2zlp)qG[iLk0aM+,]q/rLD3$z?hej]'+POxBVNfăU"u,L:8ZqZ]STztYV.f0\#<i[$=bh:IJb]Fp\8$j/aAqD<*(pOm3i,_dFOr$pjY>măU"6,D9v;TcYx&$R07#ey7U2tk^t(osn.u%[5B3bFy88IY)djmeZeK,5l*#Kt#[XY:ăU"F\I,QxnnO)EU'8u+/DsQOt$i,a2^uu0[Wl^*_(GQda0O>T.<4>]?aKlEj(?3S9$ăU"IWO9+6vfC_JXq<kd?_++%TOH#lW'):ac,LY>?tS6qo)f?EKT4&CGzn]Gx;4JAZdăU"lap2.04vKM14p?;\t9pOO6O+:#nR4km/MRL:dnD$PR=Ib:EqN%Zbn=7>=QjP-l[ăU"qANoE1$uV<$JMj9CTEsWAe-h:(v&d0P)175&7)1%:SbS4(KdKG:wT\G\6$KMnz,ăU"6hKzWl;5bS)-Csz*wv[C_\Z3%T1'aglvUQ>,X)Ah^r^Bd.YJsjT8KEnAkEQ<OnnăU"rH4,aD%&sv#-cSIq6gbON?V/fkz9)P=8SvG;9W?csop4VX;bf+%RrhkJD\)hq&)ăU"iJ3S?EJtW*?mVMnMXoMH^m3uRa&9,s*/_Ct,rY2Hq[RCWXj+x?$F>03Ec5;#=>;ăU"6*sozr)?PgIAsVocJ[KF9%L5TX%=?jidaskZASfeT$r^sq-(12L?aflk$=wAACHăU"$*O_foV/9&>DxL8hMF[a1VTM(VwA$d*KO0&8*;1zdNIRzd=wBsFrd?e5g$<Z3?hăU"M6W>KdF&wIsb.dtZ2VOqq=j$vgq-7V'v6;SbgJrlL^l4;B-apkPE%2r/Y_S&bIbăU"Ui^WBXMqtUPIjJ256]j\V.nH9nSud-K65uo+mZP/+$g>Y0&phUh51aRyCUZq6n.ăU"IO4_5JHxa+eEcpfDJE<iiXw&8mQ1[Vm&deuGRD%C9h]xQkUhVeN8T+PE:G]&akYăU"hT,wZnK3I*=bq\;vJVI5ErqT-0DHqpAuFdeBGHv>BuJQ>EF#Wfp<i[1X(ASTZ$;ăU"uSBOZ4:c34X>d/BKfo?O;5_t';0K:R[Nyrh+';]Cw-j1-O,[G=Q%b^vR'gIVO[hăU"4H)[Z4s]cLR$85fuR(dQM;smNbu:^.#GG?lHDN(=NIZP0X+TAr<d,N#uOd5]X#7ăU"Gbs6u>0:Ua.68:Vpam0GSmRuJ_u&XMZzT?lq%Wt6d%dG(UsZJoq0OFDL[iQ4;cPăU"*YD%<ArFoAtB2>oN21]HcG<FCt]qET9KsMDB2[+=M0F--3=hG?aSUeV+Fi.M1>)ăU"vFUeXUTZy6+mKI*<?P=RJO:OSVIM]#uMauD+4IlHjB36as301ZkA)k1o]'&qT/oăU"E[hjrEl7fFKoso..QtoS)M7[?&_o)Ke%13emrf-9%Lh69YCn5a[NZ1wK4g-+GQzăU";H%cPP-1tvMva$4\zS,pdcAK,:N-w.fDdtDnV]L.D+kO/:q)MFm?*F(7q5jl;6eăU"q<t6ihFm9>u4+P+fA'c.,JHFM#e3A\)G1LeyW_$B*o79?xM8HOwEO-Q.7,rCM<IăU"lQ+Zl)+^YY>=?[[(\p1<j0il:eeq>TYtMX,h&:t*<IsmOl-#$CmZ\s[yJN::gDmăU"rLwN^sdw7HZ>KSD$LMu>Bccdpc]2nzLbqs[*NwI#8]Hw8'.sU$MXvowl#n>v$*băU"_SHa9#q1Ju:\:Gh9:\Xm83qM04*1JQ3wCoW7DjILc+S6sN&/&pA>gpjROGK*O'#ăU"X9j$y?-H&/'.HD::MVWMijraaJK'n-g=>sW0pvh2ZXUl>ZGbP?Ls.7Pnn\9X\+uăU"zwVv+I>ukq$%SVlXeXh,Y>\*3PxuE^iTk9mf(^k8Pplxf,d,>Se1fxc8xE<xD%EăU"Q)y'giv8&,S/3zHSO/yHgjRPXHDC:p.ckX?HoVJIs.L:O(_bw:mKobZel6Mc>0_ăU"2Zx:#xS4sg\uq1nl5#rZ0/M($wg2E3B$(^0+'bSw)9RIAK[f[.+Cn_rg+)RyICoăU"_rQ8;Wr*TRIAuD+):3>bVs.0-nor14yOetj]5G9s5:[Q*msV5Knj49ra:[5<)u)ăU"uT]KS89o)r_zsS:.[baIEQuZ'>nDcy0)rzb8,cr7=ym*_rlpUtF0/n5Pr8I%W+HăU"Yu1L#AofIrj]*^=g\L:1j92m/j)TTIQu8QIQK]:[./8XL:[+./Nl(9;xfN?u/j^ăU";s//RNrkzIr'<I3=($enj)S=nyG8S^i8H(in:-:(..ezSYX:Qh5)>fU-QBtQ.K]ăU"oYew.Y:)xmmeaEdOG/2RZ[rfO&uW-q]mpoJ:r8lp]*'-5nsWduF;(6\%Rn4p:8QăU"fSIW8E(._'qv$K;$j'BW]IVoLfr240k'%^D9B.0Hs)l]cl9OWia:y;N;Sw1Y+f2ăU"cNOv\GR3?R6B+:nsOM5=%P$xRPwL]1l<I(+Z,[tc2I,q_:U4WE2mD+?5s)t$X_3ăU"MsTsw#n_c<y$O<rMo+5De[bQLAoBDpzR;Pa?$]E;##1D,ehF8x5ZK9UU4nE&SKtăU"MxUh(tDO5qyiW_PAc=X&1M_6Z(+ex?RjoA,3EjvazT?k9qhNc&>[;'\x'6X7x-MăU"7=7DAY3cF<uKMK^$03Y<hW/+M%)*[Vq]]bCoRk-1AlXF[.IiwSh*j-<I_ED7>c3ăU"45[7ZhEQsnT56c=Uf_I&j[t>63Kd>>-SlNFaz&ZRK3$hplm.+]f3v,4B?wJm/M8ăU"I]9khU;yeA2j9Yf:Hzm3/)asO(Ga12c\vL;Fi]S6SFzKXjZDwumpdc\2S+pm?9TăU"RXCWBB*U45]t&diX_QNj8CGtB>bGvC,O4l,jjE<51e;CocC\;ewou(_v-Zh#J3BăU"Gy%S3g7ugskm48Su.[&8mdt;&b+wV<X/W=NnvCt_.wv-=2Tm]fF/Q_fP)LHC)$[ăU"GOjTWYDJV2?XH,1Z.Ldrib\\6MeL%tv/mk'-s1B7om8idN]60ZIARva&LX954;zăU"o,0O#;i3bJAjembI*6Ov5oT/*)PM$)l)_TO6-JDwboui//[W(Cr1<sOUR%WB%F1ăU"StGGYgXLuOi[2n;Q0OhB3,lGD7pZr0q[B:wZklfGHUOF&4\m0(/-FY%-bRB['^YăU"s[h:.L,<T&D10tfQCE]C/+=/dEJLc7Xbt(im.Uj*HvQf/lL-1,4WM6N&vcfC*N>ăU"2:0]_W]d=_-W=O4[dogM.?2r;#,c4mTq7rjn(fahXHO^RD-:A;cD9$^/,L%62a>ăU"53<=UYr1b0$FTLfo<\bWVaSWtZPbY)QZoJriYdg;%qE:Kdpf\F_MySJgLsON1cuăU"p/q5S1zf2gK[U,rrCo2xGJ=GY4)h_?#x<ZL&IanFz^.B$zbqg,]](<pzgZe20gMăU"Qvv)m$Dy9+CD5e2&y,a^DaZP<:-Jm_NE#SkCH3A09?6]]+'G6UP]9A+t*OHuh7AăU"p$YG-j%gV/_RCsoR=k<^gw%%up&%'9%/%%%%%O%%[_FA'S>9(G$%7%G$%%%1%%%ăU"%%%%%%%%E4%/P%#%%%DM=8E1&4YXS2I8?u%p&'9%%9%%%%-%\b>vCs3s.O(#;%%ăU"Y%;%%-%%%%%%%%%%[%E%/8Pq$%L%A>BJ4S9?&6up&%'9%9%%%%-4%uwqLKF3j-DăU"n9%(%wO%%%0%%%%%%%%%%%EO%/PDBv%%;M81E4DB0S#);1up%&'9%%9%%%I-%)hăU"91K)6.lY[).%%v.%%%/%%%%%%%%%&%RE%/P&b7&%MA403D<4SC)GCup%&'9%%9%ăU"%%R-%;P')K,^24HC(%%%-4%%%/%%%%%%%%%&%RE%/P%l<&%M;81E24B0S)18up%ăU"&'9%%9%%%%-%9)02Ko='g+mAd%%m1%%%1%%%%%%%%%&%RE%/P'\?&%%oujlA%njăU"&%Sgfx%up*+%%%%%%+%+%%x&%%%z\&%%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăCLOSE:IF S=213AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDmitry Brant                   JPEG FILE DATA DUMPER          dmitrybrant24@hotmail.com      06-07-99 (09:16)       QB, QBasic, PDS        251  6837     JPEGINFO.BAS'JPEG File Data Dumperă'ă'by Dmitry Brantă'ă'QTopia -- http://dmitrybrant.hypermart.netă'dmitrybrant24@hotmail.comă'ă'This program extracts basic information from JPG files, likeă'image width, height, and lots more. Perfect for debugging aă'JPG viewer.ă'ă'This program is freeware. Use freely. This program is also provided "as-is".ă'I can't be held responsible for the mischevious deeds you may performă'with the aid of this program.ăăDECLARE FUNCTION GetAPP0% ()ăDECLARE FUNCTION GetSOS% ()ăDECLARE FUNCTION GetWord& ()ăDECLARE FUNCTION GetByte% ()ăDECLARE FUNCTION GetSOF% ()ăDECLARE FUNCTION GetImageAttr% ()ăDECLARE FUNCTION GetHuffTables% ()ăDECLARE FUNCTION GetQuantTables% ()ăDEFINT A-ZăăTYPE JpegTypeă    Rows AS INTEGERă    Cols AS INTEGERă    SamplesY AS INTEGERă    SamplesCbCr AS INTEGERă    QuantTableY AS INTEGERă    QuantTableCbCr AS INTEGERă    HuffDCTableY AS INTEGERă    HuffDCTableCbCr AS INTEGERă    HuffACTableY AS INTEGERă    HuffACTableCbCr AS INTEGERăEND TYPEăăCOMMON SHARED jfile, a$ăDIM SHARED image AS JpegType              'Global image attributesăăCLSăINPUT "Enter a valid .JPG image file name> ", file$ăăCLSăjfile = FREEFILE: a$ = " "   'The ideal byteăOPEN file$ FOR BINARY AS #jfileăIF LOF(jfile) = 0 THEN CLOSE #jfile: KILL file$: PRINT "File does not exist.": SYSTEMăIF GetSOF = 0 THEN PRINT "Not a valid JPEG/JFIF file.": CLOSE #jfile: SYSTEMăăDO                            'Primary control loopăă    IF GetByte = 255 THEN     'Marker Foundă        d = GetByteă        SELECT CASE d         'which one is it?ă            CASE &HC0         'SOF0ă                IF GetImageAttr = 0 THEN PRINT "Error getting Start Of Frame 0 Marker."ă            CASE &HC1         'SOF0ă                IF GetImageAttr = 0 THEN PRINT "Error getting Start Of Frame 0 Marker."ă            CASE &HC9         'SOF9ă                PRINT "Arithmetic Tables Present."ă            CASE &HC4         'DHTă                IF GetHuffTables = 0 THEN PRINT "Error getting Huffman tables."ă            CASE &HCC         'DACă                PRINT "Arithmetic Tables Present."ă            CASE &HD8         'SOIă                PRINT "Start Of Image"ă            CASE &HD9         'EOIă                PRINT "End Of Image"ă            CASE &HDA         'SOSă                IF GetSOS = 0 THEN PRINT "Error getting SOS marker."ă            CASE &HDB         'DQTă                IF GetQuantTables = 0 THEN PRINT "Error getting quantization tables."ă            CASE &HDD         'DRIă                PRINT "Restart Interval (in MCU blocks):"; GetWordă            CASE &HE0         'APP0ă                IF GetAPP0 = 0 THEN PRINT "Error getting APP0 marker."ă            CASE &HFE         'COMă                PRINT "Comment: ";ă                a$ = SPACE$(GetWord - 2)ă                GET #1, , a$ă                PRINT a$ă                a$ = " "ă        END SELECTă  ă    END IFă    r$ = INKEY$ă    IF r$ = CHR$(27) THEN EXIT DOăăLOOP UNTIL EOF(1)ăăCLOSE #jfileăSYSTEMăăFUNCTION GetAPP0ăl& = GetWordăPRINT "JFIF Header: ";ăa$ = "     "ăGET #1, , a$ăIF a$ = "JFIF" + CHR$(0) THEN PRINT "Present." ELSE PRINT "Failed."ăa$ = " "ăPRINT "JFIF Major Revision #"; GetByteăPRINT "JFIF Minor Revision #"; GetByteătemp0 = GetByteătemp0 = GetByteătemp0 = GetByteătemp0 = GetByteătemp1 = GetByteăGetAPP0 = 1ăEND FUNCTIONăăFUNCTION GetByteăGET #jfile, , a$ăGetByte = ASC(a$)ăEND FUNCTIONăăFUNCTION GetHuffTablesăl0& = GetWordăăc0 = 2ăDOăătemp0 = GetByte: c0 = c0 + 1ăt0 = (temp0 AND 16) \ 16ătemp0 = temp0 AND 15ăSELECT CASE t0ă    CASE 0        'DC Tableă        total = 0ă        FOR i = 1 TO 16ă            temp1 = GetByte: c0 = c0 + 1ă            total = total + temp1ă        NEXT iă        FOR i = 0 TO total - 1ă            temp1 = GetByte: c0 = c0 + 1ă        NEXT iă        PRINT "Huffman DC Table"; temp0; "Present."ă    CASE 1ă        total = 0ă        FOR i = 1 TO 16ă            temp1 = GetByte: c0 = c0 + 1ă            total = total + temp1ă        NEXT iă        FOR i = 0 TO total - 1ă            temp1 = GetByte: c0 = c0 + 1ă        NEXT iă        PRINT "Huffman AC Table"; temp0; "Present."ăEND SELECTăăLOOP UNTIL c0 >= l0&ăGetHuffTables = 1ăEND FUNCTIONăăFUNCTION GetImageAttrăl& = GetWordătemp0 = GetByteăPRINT "Data Precision in bits/sample:"; temp0ăimage.Rows = GetWordăPRINT "Image Height:"; image.Rowsăimage.Cols = GetWordăPRINT "Image Width:"; image.Colsătemp0 = GetByteăPRINT "Image Type: ";ăSELECT CASE temp0ă    CASE 1ă        PRINT "Grayscale image."ă    CASE 3ă        PRINT "Color image (YCbCr)"ăEND SELECTăFOR i = 1 TO temp0ă    id = GetByteă    SELECT CASE idă        CASE 1ă            temp1 = GetByteă            image.SamplesY = (temp1 AND 15) * ((temp1 AND &HF0) \ 16)ă            PRINT "Number of samples for Y:"; image.SamplesYă            image.QuantTableY = GetByteă            PRINT "Quantization table for Y:"; image.QuantTableYă        CASE 2ă            temp1 = GetByteă            image.SamplesCbCr = (temp1 AND 15) * ((temp1 AND &HF0) \ 16)ă            PRINT "Number of samples for CbCr:"; image.SamplesCbCră            image.QuantTableCbCr = GetByteă            PRINT "Quantization table for CbCr:"; image.QuantTableCbCră    END SELECTăNEXT iăGetImageAttr = 1ăEND FUNCTIONăăFUNCTION GetQuantTablesăl0& = GetWordăc0 = 2ăăDOătemp0 = GetByte: c0 = c0 + 1ătemp0 = temp0 AND 15ăPRINT "Quantization Table"; temp0; "Present."ăFOR i = 0 TO 7ă    FOR k = 0 TO 7ă        temp1 = GetByte: c0 = c0 + 1ă    NEXT kăNEXT iăăLOOP UNTIL c0 >= l0&ăGetQuantTables = 1: EXIT FUNCTIONăEND FUNCTIONăăFUNCTION GetSOFăa$ = "  "ăSEEK #jfile, 1ăGET #jfile, , a$ăIF a$ = CHR$(255) + CHR$(&HD8) THEN d = 1 ELSE d = 0ăa$ = " "ăGetSOF = dăEND FUNCTIONăăFUNCTION GetSOSăl& = GetWordătemp0 = GetByteăPRINT "Number of Components in Image:"; temp0ăFOR i = 1 TO temp0ă    temp1 = GetByteă    SELECT CASE temp1ă        CASE 1ă            temp2 = GetByteă            PRINT "Huffman Table for Y (AC/DC):";ă            image.HuffACTableY = temp2 AND &HFă            PRINT image.HuffACTableY; "/";ă            image.HuffDCTableY = (temp2 AND &HF0) \ 16ă            PRINT image.HuffDCTableYă        CASE 2ă            temp2 = GetByteă            PRINT "Huffman Table for CbCr (AC/DC):";ă            image.HuffACTableCbCr = temp2 AND &HFă            PRINT image.HuffACTableCbCr; "/";ă            image.HuffDCTableCbCr = (temp2 AND &HF0) \ 16ă            PRINT image.HuffDCTableCbCră    END SELECTăNEXT iăa$ = "   "ăGET #1, , a$ăa$ = " "ăGetSOS = 1ăEND FUNCTIONăăFUNCTION GetWord&ăGET #jfile, , a$ăl0& = CLNG(ASC(a$)) * 256ăGET #jfile, , a$ăl0& = l0& + ASC(a$)ăGetWord& = l0&ăEND FUNCTIONăPetter Holmberg                8-BIT GRAYSCALE JPEG LOADER 1.0petter.holmberg@usa.net        06-07-99 (14:20)       QB, QBasic, PDS        352  23278    JPEG.BAS    ' Displays 8-bit Greyscale JPEG imagesăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JPEG.ZIP",4^6:Z&=17179:?STRING$(50,177);ăU"%up()%9%%%d-%f7o1K)v>F'\6.%%5h%%%-%#%%o?D46S1;0BF$n:xTOl/XhZXd%ăU"I_6Q=#Rj#l9LE2/q?gpP1$7[bL^dXga*AYQ^es118wZ'.XJIp[8ad$xuLUmJ6nTăU"tJ8Utn(th=FBuU>i<f7i'rq9GvlQh9Wkl$?A?It(LM?iXFm_$P.=(iV>=5U<x\_ăU"^UcRP;pZo6tnL<5<Z<<F\WF\LMZh[qu+4<4LM?P[h,SS]s5qMnkmT#iPjQ3Z_WlăU";7,60*>G.dA-2hoe6jpoS\dod;Mu-R%zQ56JE($a#JoEb>Hw2TnYZ6kG)Ik?5U#ăU"j^jg%N_#IR:_&kCX7d5a]iY/+[U_n+oYC2,nf7WRYVDW7D?D.f0Jx#7O<Td1us]ăU"+At?R_?<a^dcF0f-L--2&E9V4#h1=]=+5fh0,05[PC%iI6Wo1AnXNp>7Cb$?jgJăU"[bT$,Z/Q4db:b>ZmO>z%?q<xC1\P4Q_kB(r2+?GK9auPqZzDpnj#vD.xE6Mtvm+ăU"bdQpr-D_m.1qVK[5md]h>1LjqIS1=qxQ[g)&kSgO8taTbYM&-nWDoRnrkP-q_-:ăU"a/_/Dg#qIHaC>cZXKJYE&LOK6sl^ms;\jhRn;PT5+IN_Vm&AQ\8r9U-tazL7Sv=ăU")k]Xxa<f(;E2tQNjzT>9[cptVa&YB-d[\YOX0jYXkVF\WN>?B2uQ4bppT8Yp?:băU"aAU3wRC1.K\^:aQ&TM8.*Y633Xn01grS1;vFas;jM82ZAWx*q<6,opL#<7f4[A;ăU"KgFXGCn9YqX.9=r#p]J5._?#;0\==/ja^6;pp^tBv]reSW5qZRag;WTD]<9JTfYăU"uU)wu,U)6RK/Yq:dnn2GcmIRH9R4D10nM?[4o__D+^^A2,S/V>;1e[;vE]#=$%$ăU"mk[aC#fe(L_<mHdHhTSj\Y#[7,8iB$6ZU,t__Fo5G<?PO75S#r=;#JaYS.PA?JiăU"0^*oVCFF9:daU5cZ$m(5O=?F#KZLg=FFEK(t$VFv%>/<CS=U4uPM3S(kcF_Di=NăU"W9-Hh6D:>p<DZ,r6[bZ_P+':/u8=S,#+.NmMn/.<k>;iRuuiIAiF/rKklM7E+o[ăU"RTY8]J)r<3QqIx(;%;t:DYrGC'[ta])5F(AOWQI%&H>l-^X]2\aj=^;uea4M[V]ăU"1qAfF\81WFFD\qU1EGu_nClHSk=>sQRUuRbQLgS)Xhc997SR9&[RNd\Q7gQ4$_YăU"iSF-R7&>BDbd^ea]\YHYfR)\]kSl]9tG#8xGdNXRk>;beFV&:??4MJ/%b;??E#^ăU"4O;_FL<uHQ1Va3^%akngFV:57r'8]H,05M;W]Kki.QFeqYgia+8j8$%#y,GzjMRăU"Ai<oitkM,0)a*J[9X1.z4CBVR7ccoT.]d=L[Ya9T;,,WKFoZ,>Vs0bi,_LTn3ZXăU"I=9R;NZ.)5VV<;F?eLwdSa1Q;g)aqNE.u+1cZQ=<D[.AGr]vd+&_*OAwxUs?s>2ăU"^sT)DKZAM86DHWNU%FGnn1yoZ+\q+7,0Uh[D7[$Eac=nD+(]3b&,n*<sh6g5A^VăU"j:jI9p\xINOSY4-NseEkqD72u^sEtuh59)Ip?8\]tVA'KR9W'<n9XY;ca$aJ]noăU"<QSw(N3hkrcrsUoB*fu>4pYIUs%MZqTPxq4Dn1D/8yx%0G/k0A;R^oTGwuNR*\CăU"vi<EojG:n[giIKF9vlVS80/)UZ(Smy<[$%'g*RmjTgOQ)_SO$qKoS<xR7_cNdvLăU"P*yF=ZeEYL2GJG+-.nvrE]7xIc/inYwp)K;71u?cQ<-8m^6qxZ,Av5d?:DQ$sPrăU"nS&l11l23UXBH,<Ln+3uK-x\JsMT**9dSyq*Sd&&LZ2K-werc1EXs5bq,bAPrWqăU"dUgLT':Jdr8d%MH<s*Eu[rRMQbp_Nr2k*YhlA)%MP,SUM[l(2Q=]0f<xRDod4AtăU"#qQb^h/zpOApT6KVU5[)HMU?;sZ0c-:%OJ^Fst/O=hsr2k1vKvt-DRUjuT[CJ,+ăU"0W<EpnkA\;>>F&PADTq8o?;<$\7IK2</XBx(W&E=?x<R'3UCBJ<&f<cK$NZ)tNQăU"Jh\oVF[hue?[O]J/S(',SkjeF>Hwh$4et_*;jvmNGc3r#1LpUjj^Wbd#B<vSoyuăU"P&iCT3E]O%878'=HIZ\uZMvh-5Re#'x4d86280f,_2*LS>T+o,Q*/&y<1=3Y\-YăU"3V3qHZL2;u'0Z9dfCv3RM\0TqOOlpW:SUnL(G4P4G;&Kq2'F^Pccx7Koh^dfAM4ăU"jEg:OE<;c.<kH7U/Jb*_)WT%sW7>NMH=fF[9,s6(4pdMN3n]>xGiM8iInUn(qNuăU"g?;HX]Lb=-r[d*lDr*UM?VWG##K5)*j7O%6py'So.I3.>y\P[&aGlZ4r3.g;JC,ăU"Scr=2&4CaB;Rhe;S0)RE0H1jVeF(9D9j;V:fP[;Fvwg=Dl7]\LC>fT*,bLc6(ZLăU"yE984\,XQ/DBndGOob276kY+*jf=)6\t+7['UdX?T\G2(UPrLgGu0XajAdiY-e7ăU"_r&aRAVwoh3-*5HDr1;U/ix;^>1Zm-b43hPGjHU,&YH8;5xUY<.t#r$Ux>iTDb#ăU"6j^x6I98TzOg&*A+(Dm:e2jsi8W>Dx9;xCe6x\/i,yC&oHF:>J64eNAIF0koV79ăU"x?I^?+cN1;=_)hFvFUZ/47K&82sKVPn+A6Wva2ZgzSB(k/njaKUxM187:NXQ&fcăU"'I7W9OA5_ClKH#PGn$XgGLGW6/c)bj$([e=a/+XddWa>BGRHJ$qjDQEheD*(G2)ăU"PWq[MR-$+4oL.GwRfgIppeK7Id2b_(]M.s[n2hV-N1404O[g^#:#omUAU7nPuXJăU"LA?D$pC(lock,'u#lB$in-m83mItL;je0+\;I^B+XB1hu^M?QYe#S?w>)T:uh>WăU"<iU&?&4:XKS*k4y:/L4/a&EYmJ&yqAi+(\;_)ymXo&m83LG<8q4OvAz?s+]qTt2ăU"<HnDO4dt)nnW*Z8J>L?xq$;MQ63u(fLa-L;t0E*t_aS<Ruc,3Rqz150B\C?i.kTăU"39h[Tg=l6\zF^Oaj#8(q+Xx=qF>xoih?Rh8B:=AXq&U0EXyPwM&UIDPbOBoS<0SăU"EeoBZ,Op4zpuf+U'qUECIpbZO^W5>BDT._)C9g]IhX03dI3<EepNeHe-W'3(<j>ăU"^yfs>wS&qWSZ)S=*1:gvfghG(+pyNf*ifm1$)esS2>oY)PFaSe*WBr:m>5=iV/yăU";B40$qe0'_k<<:4Y44TUcP3:rh<G<(uel/Zc.v/iJPj,1;M7BSmztDKoUZ%\V(EăU"4=QbQ-BYlS*:]L2n#ii)ZOTT31:Uvf9EhHegh2*ify=$)eSg>5JFtDD'Z?.6+xnăU"F2(fk&ms/#*SvFaQ_JRVET3ichS:cQS6:&Ywd.,K4g,nfhC'M4JipJWT4W<V(i4ăU"ySDbD=uP)'faZPRV&]*Sv<h)Ep-+f/R5876>u_SVVE0wp/]4gpER4RF,6No);rQăU"tW,u6_CW6,6%'5bP7O:Dkok[zx]XsZ\c==AXU5Q<hk0K7-(yHn#c*YMIQbgXUN_ăU"kEt84_P3I),4g*C]Cy'+DwS%*'mn=B[<+03ZYmYJO=wER7P./o_drJCU,bkpPakăU"pQQ+Say]J\qm:32,Hbl0eYg(*HnE'UZ+kFg_4oWuXQLF2EolLmE6ig0J(-TbCAKăU"gDMVP)Z+:[wQ:>'<?/hP>/k*DwT[J5LQ-Dqk)Ni73YR)^LhaBlVjAtgD5Si$#BSăU"mBS,Pt3*By4dLaxR/D.lzg*()EK,I&63cCsP:S6nVeM88qZROlnfJaF7RJqJg+jăU"dj(F/h*82ED<B*/b\s:+f#\kNYE6]PD3Z2uNKo5;82#:h1WyUDc5Rp4C-p:wz?/ăU"UtMD2qmST#3$;^jGhF[?9;nc0XD(*e*-,K:S*e>p)4BU[%U[LNeesbP>Xe%:9bwăU"(7?PJG^k:&d0,*fB_^d-lOt,(_r<$xRzE[=+)l\Z)BVJ4BW-;+JBE<^dX)GrS;LăU">djuKJ#'#Xs%(^?E8&D]9ohpAb3#j?IHtDG.O=\=]='P)i^5k&8C<pAbooo_^m9ăU"_FDdUfFK_l/J.atM/kAdU'rLw+9PZ1p4#pAf<pVMQ=U\kH1#&Ku2t_VcTVA<;mCăU"**k/YimzTi1+3#Vr>*_t:*S1aJCjRTP2X=xmumJ8]%GR\68.,]b$<NeyeAll1CZăU"QC7RoYJft7%n\>4,#mM?t4,2><lKVJTcn8NOrxY>JYa%X\&Dki?c5L$G7Iq>knpăU"XLg/XAQk_#5H)]wX[Wr8L7fiPLUo>JEm6m<,l%L^UA?n(Ze7rl,L=#bBjo;dlC'ăU"<Qq3<&iaYqs13\>N,qNLo[tcYk$w3<p3?DuO/9v+v'v9)<::O\l=^1fsuWx8,4tăU"HYwFQaqRSHQ#w'z7d-?FJ*i3T?5eTI[VmxbGl?$2wDPh/VruKK7jQOF3p_:O$uOăU"chM\[*eb/:sD<giv#e$Ot&^\zBcOXSXpoJ&:p)pLqfh<JNXF7>L=&L8ZaV7-nE$ăU"ralX5-%6_dO$Lv]7[ZtgXyY0x/VXY;#lTpaNV*F#\sbCon9)(,IHtM]/xzqx=q:ăU"g[J5Oq#,u?;O]*yD<LWg)5Xnp+GtKO#;#P<rj%#?tS=6acrM+%i$_7B-G:gF>)*ăU"4':ueLp:?_^N$BCKbOi:^9H_MNX?B4h4lPH=5QC8bF[feLH.sRR:Z0-8x0H2vViăU"l?$Af:Fx);sueTUY,^]</Tejx;lm+u972;FB8E&Ig3jSAXhGN-;e$S\<r5gLkZPăU"-+:_Ye=ELoT]dXlpP*0Ki<DS,]AOKdzV8+D8=M-rZ2mZLW+Z-tnCVAf7[SDT*QbăU"YHa2zrQBV?[:>E)TR,OuJ.*G\e&r[Nh[f.D<Q3&x:xyFd?g_uZQ-7e732aWcetNăU"T?j9-2(M[k9<g^<F^t6uHfnhch3_NBhjtcd_(&7:ju(qy_j=?)(:%PEV(_LbKJ6ăU"Tvf[p.EZ>IdT6V^+uukX=GdC#f9IM/mphYM-&&$.1CV[Lu,2y1$G+edXlZVWbd5ăU">6M[GEoQEPC_sy0oUAx'>]^:+B=gdm,d<Igg8zO>/*&;=<;z8MF,YJW>1m]zaL[ăU"kSMI8C8O]IlOHeX:&&N&Ka&GRK]8U>JPIq$xp;uC8=5T';QuDdKjT7Md78o?>0VăU"Q3i%7GNHt5KM?_Xl5P)[UDbwfFCsBb\fbm.<MIvXbt.qTS'LY^X^,f((KCYNZo]ăU"sRa*VyODY5MapkY_x7?;4sUU%'nq81G0jTYKac)WR?.qpU^s;SS+be#&U5<mNp_ăU".MQjXtmv1aXF;7PAw?NsooUuWZKpt.mfk',L>YVIPOfbtnqb](\h1sOtw4bR&o^ăU"=i4A)k$%/(cAch/i=:3x(,wI#u\2'%WG<RgS[*2oX.Q=ZP$Z7.JY$Ort=^B?OVxăU"[,8e\ICIl'K:J=b7j[CtG5=?6+3VSYk,8<2x0WQ6bo>NF]7Lu/kXUMhr.e;CvXGăU"?b/ff#_p7V^o%/G9\Z2L/OPkz$jbpng+;b6iG0._ki<IrbKN93aO):8t?v3(20#ăU"mxoEuggZPo+yb%oy2aN_dnhC#JXY5jt>'UF#r=s]iq]/T,wPs/IeNQvD*r5vk/jăU"v*Hs%'[KH+_a:L*7Qx_S5MM4HbCPoMn[yt\o_A/is;^6Wd;MCEn5EZ<2&x,#y8jăU"3ms2N1m4?Pu?Yjl)lJ(S.YM%R:M?xU%ZP'l:;GqLJlhvNm2hRYcMbN%n;#MfS8făU"fs,H;GtRqX>'(Y^7+^qsH^[\Vef^cG2-rt>(Vj1$NMp%d\UfnlTn_Zj83zL-n<=ăU";s9XQ_UGvj_AtzCg]]aIOxniYCt1ZzMO>Y\J7#3'-'k9QQAVIt4]%tR#gfpgY%ZăU"'s'iR/z<79JJ(U4hw+hfZ;kY5?2?-0VqnEP]x%%up(%)/%%#%%%?c81KS#q6/3#ăU"U%%3%U%%0#%%%<M8=0<A8WS9q?6xQ-xY%5%oknk%%&&&%%m%mm%%xT%%h%+%)*+ăU"*%)++*%+,,+%-/5/%/../%9341%5<9=%=<9;%;?BJ%D?#H%A;;E%QEHK%LNON%>ăU"DRU%RMUJ[MNMx'9%0-+%A&e%&&6%-x=%A%%%&)%(&%%%%%%%%%%%%%%*()%+,%'ăU"m-&x=%%k5%%'&('%)(**%*,')%,&%&%'(%)%6*F+%7Vf8(v0,G1W#P9Igw$pd:HăU"1*B:-XAtQJZiCI2ha,qj;<%KYixu+;xS%%-&&%%%d%<ciC<f=?OKrm:4K%&VkokăU"RV]CgcsY$RsEMu_flH23_XERtkl2V,^HZ>8ew%ASk6)u+q>[I(A=rXb:/77UATkăU"uOXBVA%=;H(HD$gTQLQu2[InLWku&EPsnZA<s]dIfCg=I7K]Hvt8H:LNHCet)pNăU"vc^1mY+WFVUCV<$-W5K,VWna./&0K>Xa'E<1qzowFIPc)E:)8*Ep9Ts.O.GDi4<ăU"?sO(GJX^rF9_x*9^rDy5V\%ZYsrq99:YA#pP:Adq8dh'WY'[%LO[_'<swN]$h-hăU"2*=Yt<C#X]($=kQaM<oa=h#8+)bPl5y#6<e,W#m$yUgE&#.R]lH,e\M8-heOaIoăU"4grB4NInvHK-TB75AjQl<2[YTwlv8XL6+FC.C);eJsk8mes#bJ*Sl1tLq&Z7wl#ăU"=C/NV)N.co1^PeNq#KvGnZdsLMM:Z=1logXqNf*kKTCDbiM#8wVOe>eC0G1$2cPăU"upMPNFwc7WIAC^[%hIGxAYtM4444h44%W$SDk-?JffGJ;Ytu&/d/2-8nUdpor&'ăU"b_bMG7(mT/L:BEy*f_[#,bI'_i_rFpuKVHD[>GFIYHsKF]0J+=:1<6FsZCTR.,$ăU"f%8O3m?Z_i-TMcJV;[w4P#79s1*dscCGf[k$EGhBbL7N'##M<'[H'+r^<ta*VHVăU"-U0eLjdALBOBllaHEz+r6xV5lAj__qe&#4PiG;\6*mx<X/cX6W5''nXV/:^S>o,ăU";Tg(YQ]1b4nYqoPku&C$VU$6K^0QpQ,7]0peEkz0T95Z/I%d^bl/dn2>I#wP84iăU"F=N(L;A/Cr]yRK1c1i<.T4VA3h0b>aI*gat'_vk:#YkXbY3&gDU3HTcVu\4[vzbăU"$5tTe7Jmtta.j8d<pVMw&u$rjsj>%9^n[QI-05b4>nAKPJBRcP[S^H_2>E4=/]găU"JUWtvwIgv:*.&jMlI-DjFbdblgnMvDddhdddGscN.q(Z\xx):8?mVrD+['(e8J6ăU"HNXDr^ycO.xGAmab=Cg%ML6t*Z1*=h;4OwFy;+';bl+.^Dd-2B2Wm'p7&)l>u,8ăU"YS9^+#Rmor=FzU/)reNI<_]vII9ahl6Y[_-_t06SjP:IFte&*#W$*],nT&fpxImăU"L/H^p;NIMM;/>)*r5k.s3Ec:z2a_NJ71]/19d%=Ub^w1FC*K[^.kQB'+.qnIZeoăU"N+2k$2\dUfm:UZggE2E%l(oMUhv?9IZ.22i.&I4/k$/NSVfYoDFD5z>:bW>_J^văU"Rro0Fnb6rLP_hmO$_dN;_le=U:?Jhy4]R*IPxZS.t/HG<d)6lfY\n/lAIcdFcKWăU"c>-*fDJd$D8pasKx%WC,0ajLXJuO$U=DQrteNvXu-?7ZX,j(>]MwQk&*t10D?KNăU"Fu)5q2R#>ikQvYJH5\3OnBv,x,t%#?^iiv\S+>[Lc:AZ,4Mf?JQ#2::d_dd9obbăU"=2<0UR#bK*D>nfp;zxL%#V.YoBs&p^,#on<R&\/ELb*_jxbB3riZ.8SMl:TAf0eăU"eJ/[UcGlmK[onIpodrh]0]y\nFaVttaV1%u(,0rS=I^QDSJ=&2aCa)JGJ4+^UmUăU"jR()HaJ9Hh*K65ZlZon$b&/r]>1T1LLIp8Dvt11/Rr.eFz\W&$):)KU=bfdsOlMăU"%r2$*Oneh7%k\#hY+_]X&0GYP80x=.;[$sOac&uV9xES08WIAN[tI,NIHfKqx+JăU"qoS5:DT\=V9Y<:St];kr-KdGB/Av[fx2j9XZ&zH(1Qqq*;Z\AppGAHIZ?2T&]l)ăU"8aNZ6U-3<gvsxDZ]IP(SKd2VhJ/8t.To%Jhj_m*9[wlP+-BXW[4#MH-%X)dqfUdăU"Afb:\/8EiL=ajlTq-4W.#X'WvG9W$]1z447FiT90D$Y<wM(ZJ*MP=-,LO;h0ucOăU"fPSla)F,s1Dz52=<AS[.7T)e;14?-:C0j&u#3Gnkz^uS++5SyPSUf.Cv?5bSX(:ăU"ft9H=zGWP6]4MfP&lyVP,NhnueO&F[PA8Q7?2(]6//U:$HAng5N_9P4Q>P*B8OgăU"8t(i#(7M(^r^;/=*EW$>a4q0IHYuRBD[an?^)u#74?==Yz5tf6he,,V-&<c:IjkăU">l8+6]>d\hYHQPD3+#/jPwd$2;(^/Rv-aHKx%4M#5p<'C:ag0C<o,8#vB++?-E7ăU"p,)Q?mu(Qg+PI+Xf7l9RN*nC;,Frw]N<1eZmHa-g+.)#HGwdnX.%#2Z95X3UaV*ăU"x_#3OtrHdP[a%kn8Tmk)Y\9$xVT8XQ(d>CEIodk^3TokY0SP6+nc?CAr)(Wk+D%ăU"_TD;b.:?q6,vq5_?%rH6InxBen=Z4&.3L6sm4Z00_C(blaWb(_h+Jm84&bEg#L7ăU"E9Ok[<PiUU3up/t;,V>Nai9bkL2V4?sf#B#S&$D+e1AruMhedw6evMAhX6c6#HkăU"F5Jfd$lTAi[dGF/ksG#y;Fbhw?E(t22^<K?f=gKel$wQVu:oNjmRxFhDCb;HDBVăU"HGjo28DvkFG^]aTq*16%2s=55G*DPKgVpBma>'nOD>iXyfWmNcP=g,jLB]HN8gLăU"dv%2?d;*nig.dut,a865WJQFEkSW+x].St&1W[j&L[Fc6MBIVOAMCzxC,+abmeXăU"2L&(-WHYk:A:<URqbIqrbf)GImDt'bNSCIkM>U$JfaTFcrfz0o*0A%WvpSXb#D_ăU"-:HM]A_MovXb<UdH'=Xn'8^9T.X%l^2YnIwdFrH6,Dj5xQ^axE4'J2]0VW6/<KGăU"^cI'LCg.4,&3e&B:L%WwU5<JX)>-;v16j+N1^%<uzOfjE_-6N:sYdgbFtY2lq4LăU"H*hl;Zg\3?nV>f7rm=S_oo)iN8imtPog,DC>XwIAE1h/bNUCtqMh(E#AnVwl^,XăU"r8SV2mhRq%%rWr].5b?$5%g/Y?o6HqFHNMHY.;W;]uQ0S((RE$52YvHKrNhyAdRăU"7D,aSIVQn1EIL_lKdI^MF;kDKx%9)uSalnF>e%v,#U\V[ENDC5n:HQD9u\1Grg8ăU"$A^QxzMM*Ta/'9vF$pcDOZ58L1lP-Z&=W^2^E#X#^Q3\px.\&9wD9KN0OZDB,r?ăU"uWYTx%V[;cNNnlsM]+Phc$GW3<U.e]<.E4?\MNO^.?'JB0h#cdhDnYwCWLAiN>LăU"<P4^D*OU\I;e$A#1LkU,bwhhhaJj<WE#uMHX%9XZOG-+P(s;lbW;xh,O4:%rfx%ăU"hiDU_UQ*BHUd>Sfx%kwNVf[Te_h#1t)7#CeWoup?nC/iffnE[7DG3]U-vD$Q3EaăU"ZICIH%x%;6a3.6,'(^uL1X[mRwU;wo7^ZoN+l>or_aKdEW%dC0rDm4*]9EyPxr&ăU"_6CI+Q2wH(r=#OetJRCr=5oT+3Y<7\L-ZmY6nfE+PhPRq$f\#Kd+%^b[2tHUPR?ăU"r#lAGtcADB*iY1yB6YMo\cUh[k][YYbss2oSn,T)Ig70u<mOkA$2Q9hs%'(PAX:ăU"[w[]QODmvu1\\'a&4n>#6nrIv8MBPrG[DAt9u(pnEqLezS&kMm1:(oc%Is\ghAsăU"N&X73K<MD:Eei>d,7(]lf,NIYO.OJ_bMq04iV%s1QnIkC9J[v0$?DbEk\rs0odNăU"]7Xi%m.7NN#gtqc6^ElYJ6k7&[<]FB\I\1YvrMUKKzH0AaU%;O;Xv;Xw7Ht8'ZgăU"MNLcOxGE0MmJ-I9'$wD$%f(2#Hi.:%+][Rs9K?9*,'2u$PWZfmy'px2B33Bx%EmăU"u;ri=Y4B11rk1J6cNu?m;\aSr94*Mh<S$=Np/E;I/x%P.Kh/uh/m_HIkn_RWe'SăU"iJ6'n8=A[]U>MHB+/:V2r+$ghrrY5fNV3[HF6.w-NRLhXhvb+Jf#Hl_n\kRls9\ăU"QGo5S&gg]N%^0j\4k0Tc2,Zlub==YZd2F7OvwLYA7bRcoAL<a'p,=$u6PhnGYCBăU";Bg3fKS\]ja#_?hvveqcua8:.\N>&Z;mBq9SC(Z8kWRpm9xSE%\lL/\N:_N^]*uăU"/;[+:A=wTC^tc;u<0ryEm$]Uw+IHH]p8UN=v>G)^n'_BhwCsuTW/2Zwv_$k?;/RăU"b#pK?gP$S_$Ky(sA3lVtIcH5H3^VjpR,5_=qqYDFxJ\*?'PDqZ/=nJxBcQTb;K5ăU"6vg#0qIm=r(wF5=*^a^<(1v,HnIR<S6f_lWT;D>P90/$]LcVwx<Gf=6-5bGoP<$ăU"-ocfx%6sD72,KORQ.qysQSMC-4>qgwv^5ss:3Ohoj><4REeolxX]P8glC\=F'RrăU"\C?jFn)cmPVKh9[EfV]e&hl\q#Q2wb2Mx6FKaYU^VQ-aJJ?b7eA)j<e1f2.F$YwăU"5rof>g,rpul\<.d=IuAM'uucD%0(Pjd3-m\RT85>xW%<o:]A:>M,<[Fb^tm4]UOăU"\Mj3>RfOLm,UKnwr%Fg#BwqME>fN?K+k5)SdH12EqkPq9>O_B=U8AHq*'I>$TkKăU",Td5lL)s6at4RIf*8tUp&Sl)?l2v_cWSE*vrU?>]f[;gq6/>]UlvMKoLdl.+7VbăU"EUi&es5K0UOt$l$Ee-9x%_Ja:(2XOc%sS=-QYtRcWH=Yp7?VecX2r8\2JW*dF8CăU"c$SrM?RWC6a'(9tqC&EegbLL-XP9D>XfmCj0L6N^jsu'#^aI[Y0BfY;xCvX5X6uăU"p(H7?BQ.7k[5&?D/bzXA#bBk9\svwHuJ0'h/:_LG+JKZffQb1u)s2ZZTPdJGmHOăU"\pk^V.:Pnl4HLfM?n0N,j<1$Q+U/2D_BQbe$O<6*:p\l7=_[LpJh2LdVwp>)#*băU"+peCb_kAmAJv]>W9s3nsZVQD:&#QW+M(r=%%w_?hs1&hmFY^RsL0_L#;)A+cFs=ăU"CcBk>f;4(PwYbb*2h+3qdO(Fumy_gZBsRDHQY_$8\WOR#SN05#6bcaQWBN[ze6CăU"w+[MUEKv8&bshT/5,1Opt5;_+]]H^k-WLahlka=g.\W#D/EY-THyqesxZ*e8M;măU"G$0m)ji5J1J0U&eeU[0v7;d\m\?o[Dx8SW\OXl=7y_Nt-M?mTf;okLHS1QsD6lUăU"($uA-zLRXw0)G6ggs011<na8nF_tdeOLe0tkjqBKSS>>2inBXsZ(=b&3;9+yx%OăU"#*DU92(((vog^ZTnMMZ49&WY%83AJ^ID(]V?^Qs88+d>?OJgXz1t6N8'>Yqy/UCăU"*yANc9vRb$sYS?zUy=E_Q&Ym\.3OVH<#MdFY3%]Fs=s/,mVgTUDGa;tr:>U?c)căU"=+87ZVw8lh&IT&_omi,p8-94?q*=f2)hJ]7?)khs9kTS*c_\Y+7Co<j^q*/2L:wăU"Yr0a[OOd-yGeYXdU,6E?Qksk[P,vW,$'LnHC7zkx%\7$$Dc4V;KXG_W6RO%uDHIăU"5TpWS?wR24u'i:GQWUeo3sp4LMiA4AdKtML3+\[dr-+T=[jtYD_p^\D/kVlBWr7ăU"iJLdb.alsqaYQG+'M:pk-A1lcms$usVYx6R2:)S?c>P3WAz=H6py+];raL^rOzvăU"243ohHt'9\ZE+;aH-L9APPY+#vv&GGP0$TMHLnq6&:-igzkc>4\OQ2vP?eECc'VăU"hA*,%kJvQOIYzE^CdIP%Yt/]]$qZ%GzF9ybBEa8ESr,hU06[-tm-+EFJ]H;L1DtăU"*6U^DuXX0Cd6.2a^p)R[#D.dsCV,>#78)TV^:a^vjhHJ>YBUWP4O45t]+3mhsH7ăU"iv2>h)Wl<v7]<P$$hF4,Clj+_41\1t)H))y3.LW9MoFFxbk1i,6SC8VQ1WqA\PBăU"6#nq;H0&SnUJdM0W:?'gfG4gmpGmiGeR;h=u/PSYM8;R1EB3='&3$,H?H/vXJ__ăU"$AO(.J(_((z(N.N6ehk&9P>#<x%M-X^F=%1l,Tj4M<i^+p=JkTFrA,Y\?^^%ce_ăU"O/\s#DVes<-mFhr]df0Lo_(81w9QKVD1fO)][.(ZO/PGt1s?p=oLgS5+:JMX0g\ăU"fmQ9$Oc3lnJ$-]8Znn+KOR]Q&pFQq%el9UbUMiW#v^%mUIZF#e\RO#O-)7VPIfAăU"$Mj5EHpwCdlgLb\jrobd=7it]8[qAWoe3lq\02Fh_ayTprP<*>;<,>Ii=-WWhW7ăU"L?MzB59Sc0^UQejQ$*x=g[y1#;Z<1pET>68X_Ud<M8zW=jR$cZ(hS()9m%gXo_OăU"#[mcQJmd2[*6=gwVz#<P=_:<_o/]6nZGu7>^NXR6+:45ceWfSpw#=RL<G3gP^_tăU"nA\de,dvTRQV]=c#6a>Xgv'8:Pzi3K(&-5dmqZ/8F#P/Ir6U%Ff19]_l8JeAaQEăU"fmeos\PI-;65]tPQf-#G5V<=_2[9vBu4Yc3cP'WqkY2<P)F*x%R%cA*ASaM9;>DăU"H&ktqvNDj6il#<OX<GUTX[2Mb_RbHb.[j#Vmu2pGd03)75nulZMRL^dlq%;DsMaăU"1=54n#%]Lo0x%9O6=kGw2_(?gGb*D))/ZIW-lR^)9gyJ0RriA?[nn&pkfG[R6WqăU"YWO\kxNO4c+XHt/G7NszC4rkqK%sjKgWjl]':saQwhd]H>9eNoe-jn(?ME/MGhrăU"2L?uaTptAKmc/ijd9)<&:Ab1ef)ZA:.QZtsud/wMs/n+rMi++-+5HZ=>[w3fL]qăU"FPp6^a+hKy(^d._^fx%9w-Hn33_gBdSPCRF]8?VwwI$?O8U_dG$Pw<J/fcLW$71ăU"W%a;WzTsSZlot>rQUifx%3NLQ4&ajQgV8'Fs[Z>;j57Xn93iRgpAec>?cpmS#n>ăEND SUBăSUB V2ăU"==I.0_L&k+Q8.DG.SG(9GR_Pi?6.cvn7cSeDD,aB]-00Vd%Wp+nEc51W'^-4/i9ăU"eXKgmpcTsBbE4v/:<OH.>lDV9J>1U$?t95_NrZftRr2#lS_heeocN/9&bj]j2dVăU"^gUY0$mG04z-lS=TZ4(Yckkx*_&B\Xc.ImQA16)P*RGn2ZtHZbZ1wW^JD/BF5l(ăU";;ly_viCo&-(8\I6;?m,F9?;KxH8q2?G%66]Umn5y,*anHZrJh6oSRMJfUn<Y&BăU"Y7dBhf]-FlXCH(0^wOcwoZecwXhI-Ox%vYO/(C1^sarWR&+^^RwD0]fDr-WZf3măU"4e0^O)ZCD8hms^kT$ZFbO%,JV.H#>o(ssgc*j4,Yr%Zt.55XA*#E4T,Nb3$Oe%xăU"\oT>nmL/G]]0';>k'?*w.K62)dQjjVwj%uA'4/.t)BgPG\Ep,Ur:<eBcNJ:Pq+aăU"P]]k0hw<HOui=/Mf>DOb2_$NMTv+L5\^(xSi&h[O43E>3LNtD?Yb5Plb%c^t&ZXăU"g<n.cceclRlbvtk[.Bds\/?jL?$r=z8fn79<u%%%%r%w#-A,[2*>PnDp)gej[5aăU"3Q_(WxOl/wE&,RogBc6GWMyV.U1QTteO<'nROg\f66EPhp4-laWU4LHQGaWDY1IăU"uWoI_+>L4#n=v7k%DvylR?j?-fGZ:DJLH'iWXVg3UT>gVIy1I/DQ&Cmed-U$nWLăU"Jh3-ea#-/OTHn6S5lT42rR=BjLZcP3j,P(bee?'UF1.N>>a7M9r<Aij+mNF;pAMăU"j2wsf5aYi\pw-A1c1cn'](1(.xnpnIK7g0g7]^AmWc.5D;%j5KX+ZR;$-M8uSm+ăU"8I.nv*T8IScVZ:F[rkpVT]]9V'=iMfd_=#DRdQ<eQ+m9mkTB=gMmezTe1\Ur.>xăU"c,jrF5$e$O:Gugms4j0cyMzjZoP#DI.*8V5*2%b*OD1o-kp]OdIIi]^cU\d2xZ.ăU"SHT.HGRAf'3\,a9]uOd(&I,)o821QRbP.KK[DB&DUGk[lpY+U+Fjh13P]-_VpFUăU"cvRksQu9Y:cWa&X9k%cj>v__9h<ZSnVZ#I'l:kET$0IDob9:[#c5,L,sdfn%4[+ăU"vj4cK.D&3;fklPbx:)\p+\RG4fp^oN,G92JD:iGtVpDYC8nU%q\?N<K(58[-XWrăU"6Y\8=s8NgnSeTqMNpQ5a(ksC[#_=aNwr-JouNPA$s/(0g<Z&EKg;r2u=n%Rl9RCăU"iK&E5&CcYpnd(sQftVmkqI(EqW&fB_y4)Mc%%%:yBS3)uid*9d\+%0:Rlz4tW5AăU"MoM3&+,WkFScN??%\DOgU8Ud%-#)COJ<0Z&4r2AQmZdVti#3jgtn'\kr'kMfH%năU"P>u,XS>SB6XeXjGwCRLrZ,X?;e+cSRi,Z(;=6tf^^lPr\2aLP7u.18;3vCj$I.;ăU"DPF[j)$9SN,c6u%N>lM$TBrT^I[BliK[v;Rcz.&QwO<=3gCPCSh0Fw4q&<<=O$;ăU"3sUFl?BXxz<Z0+&F5VZTQq;rMO0_U=u9A6ZE*m%$A5]W2YWP^6qD:KPvN'^v7<)ăU"7(?)W_n_0HG[3qPEhX7Zhc<d<_jU).9<7e+rkBUQS*2rlporb7DC&96]_.m==sOăU"V[ma/FfXKmG80D4Dk_^_e[Uv38SV,k^y0IUO6UFu/&[\02avhX/Ol9KW31W(FQjăU"%]X+$/LM7:Bp%VUOu0uLwZ=KZfvPr;p3E#+CcN$WH3H2jzA-K([ku:*W,1s$QSaăU"nD2:JzPO6W$aB?:^a^es,/YMT4m0bQoOf?a9qd-huX*j[3nsXndog&5-tXJJe#JăU"J2R6=Gm0d<E6fEJBo9zuaMi9z9&pZ=2hn/BE\ngNc9D*U)nrII1'?f12(m:PP:2ăU"Bx%ro_[Qf_U?6MbU_$aR<(+;k;8empDkP:[9'J,lR[%]YxZEIw:>Z//fvU]FIq+ăU"Fi^I\)RpBhg(_:-/G4+AOn;i5\wc^ZsA\B?6FsRwb'9C.$en3TJbuN7L_-rzP7kăU"*8VIcSL<OA+k4olN.CH?4tgjLXadavucfLtzXJ,l6UCh8aTW=\qfpLolhD&I8PYăU"iU0#uW6Bc[N[,[6?m]Wf\(KJmycar5%Nx%;ki?#S&1t-W4JX8j?m]^?;U34[e3%ăU"v[OL?5;iLSM[J5P*ckX(rKL$;c+%o)4NG]8Eq#+b,MA]:TO^?J1/SmUL)3/eB7căU"zhN7%WgN<Vs+=dmLGvo^>u>481WYn#oDtB2,K#]Ld.wPctR=SK#B<>6_^bc/cPGăU"=W)tb'uxhC(GC)591LE?7(1&)8XMRnHXMvZETmySOD>^t=$L^A<5\h%iT>%#c+DăU"y2/iKE)u%R^Ht_H^.ItYUa-^-F'8V(f<'qL%'Oo'MaODCtEs5&.2pj1ge_3ah*8ăU"Ebx%Gom'dJ$(p&4uCEE)[ReTJC<U%Z2I')?C\x%NPa1Ndg$NFty?%%Gwp>##)a$ăU"spnAwu-hgfD3\KNFcMPHjHN\lNSJRLXeD>'%9+[]Vp^0re\Mz2Lrf)YH>?RiRo#ăU"$*bYm<_7CxBWXPJ4a:DG*BEQkFC6<o3OqKssrrLs?/f$#SCccQ_(]V?NF&hoWR*ăU"$(,-XT&lqj^xbntOP<s,J9KHSUj<rA>ha#IJ<r<sPC28;i-8012LhQktvc:3axJăU"C*t?U+WqLc$YePh$l\5)DA%v24lZ2L'=_3fz536]MwW*+kn4-hmws%Qf08t=HRnăU"/InhV'Olw^BBts;%kc.WpUT2IbP?Bt'N<WiOCx&hLq:AJymJfJ?c3$Ksy6V9\WWăU"rb;<'_mX3\2*aNauoX*&$%NGWmbVW,D*wNOV8too\ai]=V2??AbC.x1)RI_6d3uăU"7YS&aXar?q*j4$DtgVpi8A<#13V*\'oG1aw<Hi*rY\ZkzDp79\5*Pbb1>bWu^KlăU"P7^]xA0[:KjmA=R3Sv+x;rjw9,(r5p(7z1(i/I6$J_OtLqp<6O9bsglCbsT[TY2ăU"v#1jCe+sKl_bid%F,'jI?rc^=2x.%v?jGl/_Vqb1X^V-2mzVJQ[]Xy25\MH14*;ăU":0x%&5UeH]_pDC5]>OVdoCcW\%/b\pwyCi$oy$Sl')4[>jP_2;:pSYEZJ>?m-,uăU"EVn$':fPKa[fnH$DNC?,^4weAtN_90:StPi<Blh>'A1fIs>L_qy8NXnZ(*a:;d3ăU"uJAW]DArma&;0;K2=5$bE.C[-4a]A3hDBHle*DFGi3nH;3Bs\kR'#YxQ8Yu'#W3ăU"fT3]WdqcOYNox=T2y*:?MKFESTk[E\T,k<yc)efQAYI3EOZYW67],$e6nf:kQI$ăU"W9N0X55g)p_Ym[_Ym_uk\?S)K4z1p2rn4RM$T(Yb)abZ7VE>JM6s1k:&u.kr9sWăU"wC&y?^24yptXq<-<N,4likZ6JArs=l*Rxt'kDdJWc7/V8/YT=6f=ap=EDBQAVRHăU"lBDDw70+m&)_Cv^A;yVTDi,hDO;f(K:,)jH&BY#>?MI^+NaO$T*u.%'^:qA>KXoăU"kYx(,#xDD7+C==Qm7Kf*%*X0?C=z'qIHL9n,dzl^>r9eU^2Gm$:#uTry<OmTQ_4ăU"a5c1iIs+0_RANdd1^w&5HT%8BnQt7DZLA[RblQy;aIx%b2zvE>e1g]rZ9HktHmVăU"_?<3C\FaWY8X+)ebV5Y2G\^t^v)BMRSE\a0[E:sL[t+hk)za6=;D;>xXj4-E:^#ăU"ObX_%dHs2D_]#GgokbL7^DlYAACDaiS/P8GBj>'S/TsiE1GTSW'q,TdS(*,#N%BăU"[s60=#6w\O+4cazK7=;OI,]U)m]9z0QP%Jkl6sKh=esKZ>7)T=+Oelx,M4GI&a$ăU"jj3Fn;a#>w06aEPm6>aZj9xp%)$b?kS<7+_2HC2LzpFcZX(R<eE:')Zgp8t^6LlăU"]QzMIsR&nu\BTGt]G,T_7daPg2N5MC.r$Qde:mRf2Is\N);=HxhT.e=rv9F7\_(ăU"H0FjQ/Vrc%P)P-/voRa[pv6takDa/a3G.$\b23w29TK<A,4Z%U.\o=WbST31.llăU"?>V[skadcCcoyn^b\+[o'AL1PaB<DV*41X_*g(QErYxU$qJsIUQT7fS:B-('BzBăU"t_hr^SVb5di2<FD2Yl4U-[tA;aaWkm:Iy4hwH.X79O?kjMLB(;;X43skiBV0x^%ăU"5Xx=%o<C=eL78TIQ-T)04>0bahH*V6$H%J5$a9Rq,d*:3ckBo[>&A<TI$4)>+\*ăU"nV8SV0Q'VvkXW'wEbCE3)H3ZoaYm5tj&j=LQt4MDax_IA(Y%c(ZJq0S=YrgGTtbăU"m_+Ntqh;BP/lXh0OxSm\oJPD;8BXRB_P.+w3CZd$bkWnyPXL;:JL=cK_<)]=h$#ăU"<,LnkNmoB?h+&sjw:4.c.074H-E>_s2uHk+(_jmE1qPSQ7LC\mEk[CNN2i?.[3AăU"tuEhsL$4*pFaGBJ+36hD=7hm01E>XIJ0ClDb4Vv90SHAsT6M^P8%rFu,M-A#[QuăU"cB>r:I2[%67fYZ/iYeRH>sb>^ofxKv4T]Dd#+p]&p:=5Y\ebBu]t1XXMsn1ROz?ăU"a^^4EUn0]8-EGAPl#I\dCiNbxV-;Py:o_Wz=L%&rXxS/_2=.\YpK^X1gD9VqS^văU"sPk+XvbA-d5*-=exW,Lhes7doe=K-JbVQY*dVpa8,(elu-Qm]^mFXcor1cpi9'KăU"x%HOZAudr#]hp,p<T-6[_U%.9/mGar;[w.;b0\FZ0_koWp9ix#]FtIZ'nbu'MSqăU"xeb>[l=kB,k8JW0ub7H1tChbtm##CMMJG=S^Fv?UJd.l>js25jOK&yCa+Uaf)/3ăU"5A2JGr9*a,&jqh^Z0L*$<dphW9)OjXo7X705uwF\VDx]eMJ/MbBNAGfuvEc0PNhăU"gj=ZD8<&w:Zt#qj)NdmkU/wQKkw/a5l/EKT_9M;6aYg(tQ.>=9YPo:w>MU\]sQ-ăU":\ej-\0c28Ykd5oK9szHq6pO2=u1bEGPOjZJ%s0E*<sX$[96:#m\52kz7-OWP$1ăU"]oP''>7)zCBO=yGrS^,JJL'gG8u^7HYDIRhH'L9g$b\u5V&B\K-BDGqRW_7eX1%ăU"ueqM2kjjQN&4VZ\XNoUo\4F^QTYHHmzRTs*e4n5'HQiXo$5Vp9_q/Hpu*5yjA.'ăU"=QMoQBR7IKc5hHU>ctJF;h2[#nYYefN^V%icKIZmTnwHF-pvM#1LaHTfv8#w.BHăU"c,G+ul2a*8oE/a&mHv-OgYjJt7,7:WDU%Dw1cruP8<sJTTeJ02h]#OXGSoZvX4UăU"B#tu#\$0f5b1krqc\Ud--1R7&^>>SnmZ)apkFl*b)?0^tt]R)W_s<nd^hHq8nlJăU"D0LBUq[BFA=^KWtN[#aaa?t$<b+x%ff0V>DuvSt/u3:$YVjNfBx%2XKBx]VC$&eăU"?++045li.TeG=&TUC7D,C&_1Udcl6Zo]4<\,DlAeP\i-cIa&x%/c:x%x[%ZQ*AdăU"SQ0&iG/pC=Dc/P[I8W%5m=Bl,KRc[XiRjN/*1V06hD#Lji;TTrC[RQUbT$E[dzdăU"KkUNdF>ZB>5%ZJZH-tH91_3JIRnEj1dCo'ZPfI$^sc9FhB.$m1AFr(-VAol5%*zăU"D[c_>l$$[-L[\MueI--R+gu9ulAPv*MXZmXOomav<o]sl#b=WS#Z$%FUAa1jqu9ăU"hUXJ3,m1auGtMxp%T1'dmS2Kcn204qm''QV2go&9e4(hsx;q9?BAhw[#9VT=k&MăU"2ubCp(d.Ge/Mc2_lTtuV:4rMD],)RZH;2=t$KTlXY'r+L0?l:swAIT07Bs9vZ%0ăU"ih5sa'WlG3nImGspb80lY:$IpAH_q[B/]74F]Na0&j&*Jml/5r'IzXZfHW+QnSAăU"s;KX:g?sPO=-)hPL1[;EX#p'LSVf4n%<<VYXU09sY/BarB6t]B&U)0AW08DO(-TăU"3zUtxg9P5%yk*5peB7VqnP6=.SOLN8.4svUI49&g$l$K=Gjkr/J(HhgAOsme2cFăU"ek:kUDrd&6JqK$2o,+il$pfPP29\^Yg_VT+sqLpBN]PX:+V%nO(T9w3pEq'JHGhăU"Ni5[6EO5Xl','<:He9(w2QJ.PwIX62A()FCm3<rNo1^:D*BM'p(_reX0(Y;=xShăU"I$\m0A)Q3PZ*H8A8^wucCC<mhKJ-?bKc^k;ZG'H87k+)znW_>6P&g$&GKtkTnv7ăU"KZpdJ+>iSY*deEDT[ku.4VnxSkwOIO2^Lun1Or,fsJ4?$DdVWdm$BtIV.3srcVtăU"dJ_K;>Y>VeL(KMa3pTx%rqippMJ^M+W/fq+OW(K2,#74cMKeG^Pe+_$9_ooWU19ăU"doa*4qP#^i_D/<LdS[NOUMmx;AaWr>vRSZr<S=e(#dH1R[)r$<SUa7.nRqlt#.>ăU",^=s,EqNw:(GG$ob>&Z$p81cV&+8TcWS%jUMnLc-lbOTt[IC7Fi3V,=njnJUcFkăU">tem2>Zt/xY\wdBH(jk6.E^H*7$Ro^A8=m_+aXO_)ee:(0.K3\Lzg%Vph^m=21lăU"W%lElloku&2_NlJRYojde_+%Q8x>FeUboV8.AXvlII_,kW3\<SE/Wgsr,HmaXacăU",]WW(gjjvN4t^stE:bEUEu%O$/TD>mrfg#=:WJGFVmAE-#00_t_BBFm]JDPDR:$ăU"wumG;$;vJ8h^'AJN/nS;NZx%.RtC4G65brcE0VRp0z^xs%k'H8ZLL$FTI/e/S%;ăU"Oj8f);ghq*dU[XFFbqURkeO\7?9KTN08MyjI>]_S#JW-7tsua<1dHGa3</]_,;UăU"4_ld=GpBks3,DS:9f6tx>hTV+wS39uS6#jC4]VgM]V(RnR<',9J0rdoXQ29pJnhăU"ud^wq;a\#W9mZbc'fqPPmPPCoPiD4>aY7I)Gr7VeP+NI$n]3[dDZ(e^=gO_XS*năU"J/T3HXW9r+#U6nAxA_RahFo.05_>?e1%2HFu1o2fFP3KT,leeT\3e=[ohb?o_>2ăU"s\P1>o==3eVE^r9ds-NjyV9RrRma*-l?%DDou_gU?M1fpe^,VS1N8THwdDgQTkrăU"?^quFVc5F%YQ5bK0c=Swx(%DEr[kID>5_YLeuuc?Ltt07+[n9I)#mW^UXlwmE3FăU"Qoe.n(usA#i6U.\ZV,Dt7kIM%ks%VrB69<9kIRq*+.+G*RJg^-;Hjn=mU'TRzrnăU"Qmly5Z_s\-rNuNnj)^l#.IVD5OlRML6Blv;$OukDjC-r-M^w*8D)3D7rM6wg^SOăU"3gl$+Y0f1pQf.Yuf\&0TZqtJL+e_mWca3v9-%3>45XanF7F1#sY>I=:/I76zP12ăU"z8&?8^2GsGCo7)YbNfk;anrmG4s/_2/29.6=oAr)/=R+RTR8Hm6Bj2G.&[:\:CIăU"K;oi[56:PgUp]7T7(==UlTboS)-c/MwcKjS\RB7e0l8l^c#2RSp8H3p_azG$.K4ăU"QoMPowd1M%%%%_%%u7sEJen9vG$rEMr7*4s1/3L/mpP9ef:,<KzfOTdvK=M*VGUăU"8.?gF3F8Ika*e%n<mDQUlspvp,F;;ymuB,hG[m:yf-xQJ>lt&[em[C^09OJ?G[jăU"cmNk8Ag5jXZ4r0,8ShR?TFQM0)[Te<W4=2c<^?#$.Dr5Vfo+w:c1AA'4nrKii=băU"bHPQWU/U*e/Xn5r6jdu9loUejQ6za:Xo^<_%F;fudDC<usMMQEB8X+QbddBhh<]ăU":E8XajrLprJ8,W_$&TK\)bx:B:BkckY%jS3VVY#FnHo(cDJxG_in3h2sRyWpZ,măU"x%ySflZW>egwXoDYrvlF(z0\Ad-U$wD;o0(1)44,Q85F$F[rVIu[8(3-wb3o1LoăU";^uN<W)/ujuubo*\xBOFJ)MKH3^DU-4<[ek#]%z\lepSxj%qI:*'D+8idfMvQUvăU"?Jak7o64,$%:<%ka&fcNIk-6%Z/E\Jf:_x8_m7h+Sh;:BuumoeXuRS5wC6aY3waăU"wu$MglRX.Z8OmrMm*JnR7V]a^3/,C/tP_fI#xT/<<26p&zPPP%PPPMRD8a?P:S8ăU"Q1w1l#?=01v_eQfJbVnB?UfyHmio:xeCTa$=FI*u-IUtTBX6acNO.eIxHQOfDKEăU"q$f_Y3a(p8;AW:iNHoSL)gMgQBluqz8)Y[[+kxI%_V'S2sPvi,4'ZhgOvl-]v&tăU"6k(lCD+z6Tc9eaah5o3L<(<np20eRcXO(XW9uh___^d7PNEB:+(JH0+4KmyUcg(ăU"8xj%.'[+HCbMk5,r.BJ<;&LT2Mr)8r>2ZadJV-uFV_i'vt>ql5MAeW+=%6M3nwSăU"n5v7r_T&Rt9Oeom\VFB*jTd3kKuw*U^uLeIL0kFB>jZlm\wPg53)(JlLmtSq8_kăU"Da^uN]W76krKs[^2Mq(tu_j:B5FPpu=(thbnKnZ&J&KSZ3d;EMeIpcMKSRDOposăU"QE0Dp?m/eN_ftaZLs8i?&).NCR4rZ_SNJaYEbp]s1&lMzO^JK$s01As6t$B<%j<ăU"G-OCdO;ojPHex%WSX]>[&vciNpGTa0M\Jp8f0s?l\*lFrnd,sLnX=+_DqI8UN\\ăU"N__;X'/#twexAEeZYG?X_iM%%%%M%%%&nd'o&Arr[fO;6tp4_']q0c9>Y=dq*DgăU"U&#chqQ+R<T:/[33unUD](H&5UY=>=su%$P^MEorbEoP=GSsdX'dg[Qt+Ip0gd)ăU"Ls15QGN?O#etmlS&9E/?m(fKTwa[AC4.'dW/tD<P*3d)1m<%uZ+aA(h/%h4gU5NăU"oq62'd;_<tR*9='cbY,j&+0qlo+O[GzL-eAPTuSXHb&1y$cck2.:Bk$6>A140'6ăU")Kxe%^x)\CW*UnpU:&tJr,6ZfaWnlxL%:MTu8;Y(flGy,tAOBoJS]7Ph#&v*KVaăU"(?p3eg1bibrU374saQXAYik$h%xm%c.3E^*^v[0Kknraa,=4)nw\l/tn,nJSPA3ăU"qtSg<7tQTrnsmAjcBuRP)\7/=m9rMF9q4FgL9XinEL5N$(OD8B2E[Eh4+dx=%KDăU"wZM?TDN&'Kz-xRup%&'9%%9%%%d-%f7o1K)v>F'\6.%%5h%%%-%%%%%%%%%&%REăU"%/P%%%%%Lo?46LS10B%up&'%9%/%%%%%%>?81K'Sq6/&3U%%&3U%%%0%%%%%%%%ăU"%%%E%*/P.7I%%<8M=0<8IWS9?&6up*%+%%%%%'%'(%>%%(%eg%%%%%ăEND SUBăV2ăCLOSE:IF S=230AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMatt Gulden                    CREATE, EDIT & ANIMATE POLYGONSwww.karland.com/code/basic/    06-23-99 (09:41)       QB, QBasic, PDS        113  2640     POLYGON.BAS ' POLYGON.BAS by Matt Gulden (aka Folter) -- webmaster@thrillhaus.comă' This file originated at www.thrillhaus.comă' A demonstration of how to create and edit, and animate polygons...ă' Works in any screen mode, just modify MaxX, and MaxY.ăăTYPE PolyTypeă  X AS INTEGERă  Y AS INTEGERă  XINC AS INTEGERă  YINC AS INTEGERăEND TYPEăăDEFINT A-ZăăDECLARE SUB AnimatePoly ()ăDECLARE SUB GeneratePoly ()ăDECLARE SUB DrawPoly ()ăDECLARE SUB ErasePoly ()ăăCONST Points = 10     ' How many points in the polygonăCONST Colour = 15     ' Color of polygonăCONST MaxX = 319, MaxY = 199     ' Greatest screen coordinatesăăDIM SHARED Polygon(Points) AS PolyTypeăăRANDOMIZE TIMER     ' Use the timer as a seed for random number generatorăăSCREEN 13ăGeneratePoly     ' Generates all pointsăAnimatePoly     ' Example of animating polygonăENDăăSUB AnimatePolyăă  WHILE INKEY$ = ""ăă    FOR NUM = 0 TO Points - 1ă     ă      Polygon(NUM).X = Polygon(NUM).X + Polygon(NUM).XINCă      Polygon(NUM).Y = Polygon(NUM).Y + Polygon(NUM).YINCă     ă      IF Polygon(NUM).X > MaxX THEN Polygon(NUM).XINC = -Polygon(NUM).XINCă      IF Polygon(NUM).X < 0 THEN Polygon(NUM).XINC = -Polygon(NUM).XINCă      IF Polygon(NUM).Y > MaxY THEN Polygon(NUM).YINC = -Polygon(NUM).YINCă      IF Polygon(NUM).Y < 0 THEN Polygon(NUM).YINC = -Polygon(NUM).YINCă   ă    NEXTăă    DrawPoly     ' Draws polygon on screenăă    WAIT &H3DA, 8     ' WAIT for vertical retrace, lessens flickeră   ă    ErasePoly     ' Draws poly in blackăă  WENDăăEND SUBăăSUB DrawPolyăă  FOR NUM = 0 TO Points - 1ă ă    IF NUM = 0 THENă      X2 = Polygon(Points - 1).Xă      Y2 = Polygon(Points - 1).Yă    ELSEă      X2 = Polygon(NUM - 1).Xă      Y2 = Polygon(NUM - 1).Yă    END IFăă    LINE (Polygon(NUM).X, Polygon(NUM).Y)-(X2, Y2), Coloură   ă  NEXTăăEND SUBăăSUB ErasePolyă ă  FOR NUM = 0 TO Points - 1ăă    IF NUM = 0 THENă      X2 = Polygon(Points - 1).Xă      Y2 = Polygon(Points - 1).Yă    ELSEă      X2 = Polygon(NUM - 1).Xă      Y2 = Polygon(NUM - 1).Yă    END IFăă    LINE (Polygon(NUM).X, Polygon(NUM).Y)-(X2, Y2), 0ăă  NEXTăăEND SUBăăSUB GeneratePolyăă  FOR NUM = 0 TO Points - 1ăă    ' Set random locationă    Polygon(NUM).X = INT(RND * (MaxX + 1))ă    Polygon(NUM).Y = INT(RND * (MaxY + 1))ă   ă    ' Set random speed for pointsă    Polygon(NUM).XINC = INT(RND * 9) - 5ă    Polygon(NUM).YINC = INT(RND * 9) - 5ă   ă    ' Make sure every point is movingă    IF Polygon(NUM).XINC = 0 THEN Polygon(NUM).XINC = 1ă    IF Polygon(NUM).YINC = 0 THEN Polygon(NUM).YINC = 1ăă  NEXTăăEND SUBăMatt Gulden                    PALETTE ROTATION EXAMPLE       www.karland.com/code/basic/    06-23-99 (09:42)       QB, QBasic, PDS        127  3016     PALROTAT.BAS' PALROTAT.BASă' by Matt Guldenă' http://www.thrillhaus.com/ă' Real, fast, efficient palette rotation!ă' This is the second version of this... In the first version, after a whileă' on some computers the colors would get mixed up from reading all the valuesă' every time the colors rotate. In this version, they're only read when youă' call SavePalette() and stored in an array... They're rotated within theă' array. Also, the demo in this creates an optical illusion! Watch eitheră' of the rotations (up/down) about 10 feet away from the monitor for about aă' minute and then return to this screen and it will appear to be shrinkingă' or expanding!ăăTYPE PalTypeă  Red AS INTEGERă  Green AS INTEGERă  Blue AS INTEGERăEND TYPEăăDEFINT A-ZăDECLARE SUB PalRotateUp (PALSTART, PALEND)ăDECLARE SUB PalRotateDown (PALSTART, PALEND)ăDECLARE SUB SavePalette ()ăDIM SHARED PalColors(256) AS PalTypeăă' Below is a little demo I made to show off the routines.ă' You can snip anything from here on.ăăSCREEN 13ăăFOR NUM = 0 TO 63ă  OUT &H3C8, NUMă  OUT &H3C9, NUMă  OUT &H3C9, NUM / 2ă  OUT &H3C9, 0ăNEXTăNUM2 = 63ăFOR NUM = 64 TO 127ă  OUT &H3C8, NUMă  OUT &H3C9, NUM2ă  OUT &H3C9, NUM2 / 2ă  OUT &H3C9, 0ă  NUM2 = NUM2 - 1ăNEXTăFOR NUM = 128 TO 191ă  OUT &H3C8, NUMă  OUT &H3C9, NUM - 128ă  OUT &H3C9, NUM - 128ă  OUT &H3C9, 0ăNEXTăNUM2 = 63ăFOR NUM = 192 TO 255ă  OUT &H3C8, NUMă  OUT &H3C9, NUM2ă  OUT &H3C9, NUM2ă  OUT &H3C9, 0ă  NUM2 = NUM2 - 1ăNEXTăăFOR RADIUS = 0 TO 400ă  COLOUR = COLOUR + 1ă  IF COLOUR > 255 THEN COLOUR = 1ă  CIRCLE (159, 99), RADIUS, COLOUR, , , .5ăNEXTăăSavePaletteăăWHILE INKEY$ = ""ă  PalRotateUp 1, 255ăWENDăWHILE INKEY$ = ""ă  PalRotateDown 1, 255ăWENDăăSUB PalRotateDown (PALSTART, PALEND)ă ă  FOR NUM = PALSTART TO PALENDă    OUT &H3C7, NUMă    IF NUM = PALSTART THENă      PalColors(PALEND) = PalColors(PALSTART)ă      OUT &H3C8, PALENDă      OUT &H3C9, PalColors(NUM).Redă      OUT &H3C9, PalColors(NUM).Greenă      OUT &H3C9, PalColors(NUM).Blueă    ELSEă      PalColors(NUM - 1) = PalColors(NUM)ă      OUT &H3C8, NUM - 1ă      OUT &H3C9, PalColors(NUM).Redă      OUT &H3C9, PalColors(NUM).Greenă      OUT &H3C9, PalColors(NUM).Blueă    END IFă  NEXTăăEND SUBăăSUB PalRotateUp (PALSTART, PALEND)ă ă  FOR NUM = PALEND TO PALSTART STEP -1ă    IF NUM = PALEND THENă      PalColors(PALSTART) = PalColors(PALEND)ă      OUT &H3C8, PALSTARTă      OUT &H3C9, PalColors(NUM).Redă      OUT &H3C9, PalColors(NUM).Greenă      OUT &H3C9, PalColors(NUM).Blueă    ELSEă      PalColors(NUM + 1) = PalColors(NUM)ă      OUT &H3C8, NUM + 1ă      OUT &H3C9, PalColors(NUM).Redă      OUT &H3C9, PalColors(NUM).Greenă      OUT &H3C9, PalColors(NUM).Blueă    END IFă  NEXTăăEND SUBăăSUB SavePaletteăă  OUT &H3C6, &HFFăă  FOR NUM = 0 TO 255ă    OUT &H3C7, NUMă    PalColors(NUM).Red = INP(&H3C9)ă    PalColors(NUM).Green = INP(&H3C9)ă    PalColors(NUM).Blue = INP(&H3C9)ă  NEXTăăEND SUBăEric Sonne                     NICE GRADIENT FILL ROUTINE     www.karland.com/code/basic/    06-23-99 (09:42)       QB, QBasic, PDS        51   1072     GFILL.BAS   ' GFILL.BASă' by Eric Sonneă' http://www.thrillhaus.com/ă' Generates clouds/gradientăăDEFINT A-ZăRANDOMIZE TIMERăSCREEN 13ăăCONST S = 5ăCONST A = 2ăăFOR X = 16 TO 64ă  OUT &H3C8, Xă  OUT &H3C9, X - 1ă  OUT &H3C9, 0ă  OUT &H3C9, 0ăNEXTăăPSET (0, 0), INT(RND * 48) + 16ăFOR X = 1 TO 319ă  CLR = POINT(X - 1, 0)ă  CLR = CLR + (INT(RND * S) - A)ă  IF CLR < 16 THEN CLR = 16ă  IF CLR > 64 THEN CLR = 64ă  PSET (X, 0), CLRăNEXTăFOR Y = 1 TO 199ă  CLR = POINT(0, Y - 1)ă  CLR = CLR + (INT(RND * S) - A)ă  IF CLR < 16 THEN CLR = 16ă  IF CLR > 64 THEN CLR = 64ă  PSET (0, Y), CLRăNEXTăFOR Y = 1 TO 199ă  CLR = POINT(319, Y - 1)ă  CLR = CLR + (INT(RND * S) - A)ă  IF CLR < 16 THEN CLR = 16ă  IF CLR > 64 THEN CLR = 64ă  PSET (319, Y), CLRăNEXTăFOR Y = 1 TO 199ă  FOR X = 1 TO 318ă    IF INKEY$ <> "" THEN ENDă    CLR = (POINT(X, Y - 1) + POINT(X - 1, Y) + POINT(X - 1, Y - 1) + POINT(X + 1, Y - 1)) / 4ă    CLR = CLR + (INT(RND * S) - A)ă    IF CLR < 16 THEN CLR = 16ă    IF CLR > 64 THEN CLR = 64ă    PSET (X, Y), CLRă  NEXTăNEXTăDaniel Davies                  PHONG SHADED BUMP MAPPER       ia53@rapid.co.uk               06-23-99 (15:22)       QB, QBasic, PDS        237  15539    BUMP.BAS    ' A Phong Shaded Bump MapperăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BUMP.ZIP",4^6:Z&=11364:?STRING$(50,177);ăU"%up()%9%'%#-%qI'PK5]2s_O%.%%d%%%%/%%%%wj%firj.Sy'y+rEb/%'V5e0ZcăU"_$:qxF)g6Z'BE'oEe1C/+hFAUrUou=ooi'T/nqi^PN+nYoGIAa?OA]W4)*V6]wAăU"/\SHQ,D)80Nlh83t6Pz<8UT*=[OSD4$ZnaJfGJ2h):',%p>8.RdU1QNn4gEb*&KăU"[-*=jvs??hnFE]N35[BN%%up()%9%'%R-%pEKNKXb.T:gG.%%sM%%%-%%%%gz%răU"uSwCf&bI_HCANYlgXh%XnE5gT'a._(*Tcjr6Fnk%V,N<N,6TuNNtW9cj6m4RBaQăU"WTOR[&(78g_?5mk)G0mgF7;Ib[)WF%5E9zI-h+2a+WhrsT9m_ltog5Xn<L(G9ZEăU"egY.Vt*u7htVJ:V(;nmm/K&7st:g7[j/-Tf[70PO48LwTmCF,R%<Vc#sJ)IV)/YăU"R>%&MYG2+&Pyp]1aP/U?Ypra/=<<HRRKU76IdC_GRRoJAhmGhAWWcvTFk4K1c+>ăU"Ek+Z+.s^P%_&qc$n_'<[CG1IM3dW^5/'2bswaPZ1o=4j]+0Cfb+;tgH<GWNkzuVăU"bosqKM8X<$#Rn0,fvv)zco:S5Iem&/]?2L,+%+^4w9&Lx:[ELK*ll/nNv=ES1Y)ăU"#m#jgEmgop9M=EI.j=cGugAa1<U/l+R(CCo&c-*gO>ulT)q,CdZ%AhpLn+va:tWăU">7eho>*K4(p?0AljVDh'YpN9?\+T'JvxlCE;6(5D8_P\O7p/;98[0cU\+HL:KwMăU"4q#PV'TLP\7W6oER[OOF6Dygd3L808n.*f_nbY;D:KC.7Eva%]>D1sh7b)=[>C?ăU"ZMYcg+5u*G8VtI6cL/'DAehw6/p^k)JM5R%r%wN:/&hyWF0P6=[&hT;W%v)XFC9ăU"WIA6mNmE:#X)&LLpfZDGrH2)KXwtcI)g8Yb9=rlvV,V'vHGAFxdn.Ca.St(>jsOăU"F9CUZ0L,*rM*#l)(SdmKDsA:UTT(j+W2%(d9,V82E7*'J4(*#fa%[vOa4XRZb\eăU">_FoMkZ'FBepN:dQpDml$EnE4kf2SX?)6[RKOOidtKIStQ(*6;IA?mQF_&dyQ7IăU"n:g$DCVXt9Sq,^/,P4FFlE_'bu?m3Dg'Wd5[*-o.T<[3(3]/:g+aUn/ThM?J&.UăU"Ju4gRNaXA43.Bs.M8mq+S;bkHBf^mCo&/a>4jheCC(.$m1;h5plllNhRQ2R5re%ăU"Ss;.c,4Vqh04Q/3[fpB#>\p2$?V,eU]1.QRg0q$jGIa6-9n2?npo22[Wav_U0H*ăU"G'Qhw>T5*F<GS:>:s4LvCdoMsG1*q2eu(XBu?u;;TUq6)RN:+XXmI$ET2a:'*/'ăU"S:4Wjo(S&/#U1+V0LC-6Um<Gs\FKAkdS]H>B^=-]^ggKhW#';co\+FY14)?3KtpăU"Q&A?C(E8c&u9[DdgwwHNh*)g'&(kFbnDI\'Jm]70Hq%#J\O;piXufjUlUo[ii4IăU"C+DF;KhBxWX%f?V*m);/5$RgO_RwV?X1h][1C1?:S%dzQ<[7&$'#zN99c6N8GLyăU"5fe-pF\OE>K[j*F4$t,=+Wb90UXMY6;)0t1gAi(->'HQUZ;8nywE?=>(Lkhg\I6ăU"NW7-gMn:cB*jOrP[>DBelb$y%+q'wPMtQOq;%:m;NQP+tu2)1I$%d/2dqKbF9^0ăU">w02w:S%QTTZ%vV#:F'GM3Z*?[1NLtIr,-BLHg13yTOnT<EMI#0#2>rc1pu9:QFăU"eHbL,+.Rwb;Ey,:1\dUrE/*t9Qi/]NNgPoDcZ*'IqKjnL)_92M=#HH$X;NZ#HV.ăU">DCcL%I(my'hnl:O)YhiYI7.V(X+.3tu^^^r/9[3xTl,3FZee^8NaG4=37$6&1*ăU"I_2*s4I;^t5LZ3p%zx6^B+K+*DNqR;PLJL&t([E3?^NMCGC+,5),8STO%JbM3wAăU";saiI.u-(%M(-ihn[_.;mfeb\P0'3<50*(-QL1->GqU&UF.qam#e]zg)i=[#&dgăU"OCS\k\XY3/Ugh.)gGN,Elg%XYYOCuiv(-N$;vMqc0FLFIOd+m=_MWFAKZpt[oguăU"SN##q+x?[^wBWeOUb\Sj(ScX+n[+XIBqdjhZZBn^gQ2q05cNUI'6glN&4R%3./3ăU"5n9*,sH\ro21;pCWUJbD4TLN9P%%STYCPhExo[4omF1i$:h(gP.Ag1]C%5;o32băU"Y4_,J1]0?hOl6dTr(&1[VfrLr%:t5sHqA%D>?>Af#B;GI+w>QGhlj)xd&JPlbosăU"s7n_eTeq&c)P4pka,s+#:ZC-Y9LiJ\U#/<QP[Xub;?U#KM?.E51.1g3HSF+RoJqăU"K7e?OfHOiU5dG_#8qmwn]Dsx.?E_CL/^8K_NftPcC]d0u7R4iAXPW?pV\kzA/3aăU"yGh62g\5/PGG8%0i+J,BqMRi_B\g=q4U]L<\sVBX1#[$kO<[BDtA2=opjl^^sU9ăU"l]bi9C#[.MhA3QA3(gpu=mwSa+,oC?B,&YS[8$s)CPjRW*XM4FQFn?+IL,HNV)^ăU"Inb,uJ&F?359GW9:9/:+7=SCDjQ%5:.xwdc*+ebE2(ZIiKbYf,cv<RsvaLqnbIBăU"m)AG1[ql'L.&T(r^+R&#12g+-&+YKyMh,pG,knu[Jnj>S]G#e%U4sho?f-DD[1jăU"7RPA&%zDoEobk5U1pQ+IF(5nV1'6/OhMYvDJ0>CW1ie4E7qdt#8KJ:Z9t&KgIeXăU"i(Ii:NvTrs8?QLrD80L'HkHF38ju6LPV1x/CKbP+yIwe4cQ?qCN&#<*w?Q'<UrJăU"q=-?>o7E*4:KPmTKf7uyK0Z;aI(.b&xdojQjM#p'y]Ie\+A'Qeo?cmT<A.N,rGbăU"DphqOR+S_,Pm32'hyyNCdx9)t+m+'fkIf.iObXs=g);^)F-1ClTxEHC%zW($nRzăU"t9m1R21UeOU6?2KJo=rT7EQ1fqVx]kEmhT%p;1Rt?wiGxI0jvhAC+8bun222K_qăU"r%;Po)3MrKKC0HC]iP>pV_HI[f$PCpB45IK=H(1y.&t^D^k.eG/k.X&I..9(.IBăU"L=._7t)=mr&_CKY6/Oe=wn$cuU5*ojoCOT,K*g(-NV7YKagaDp?4U:ZVV4VCi)#ăU"o^e6=ZioFDn2BsI'JM01lQ*J$00Y.Xo%tu5?&loKxDgRYWpYG::\)Z/\uK^&.l^ăU"epp:c>0\J-r/)6UW80\lKwB%ka;^DFo#WMG'1?1W$_xmTC_hcbfB[BD2IWdHB3LăU"oICYI#bAZ*H%Fy(+LA'AptL$Whkbse<:RHrs7?q(=\SdtmsB2S>90(BLGdU7kx*ăU"?h*<^A)5g29K53#ShKV$FENnBdSLdiYI-FKvVF<Alq:V(&;j(A_ZuwWg'iVR+XLăU"p6&&*x?](XwDfwsD8mTf63:aK:8vetKmMRV%Jl\Nv^-<lx&L7B'x)NtKceClSrFăU"8I(UJ:a>8jGubT.,Dz>9es7G]L:1t[PmIG-hSoLFI)TWX-=EV6hW\XL.M;<LEEkăU"jx(ZYJRd<&j8nNR9><_+MMBgY&)fuOr<#4ceo=qcXpZuN&O?KjlfeNp%b=MR7w6ăU"q&&X)%uh*x8bu?s'6)o',wCk$&;;efhi2FX.Elkc?lR.0j\wKu0:N7[p0z&OShGăU"6Cq8:vBMA98D'\t#<P]6Jz(2/XKsr[]F#0LT<r/=uDZ7>2AZM'_P*MR4zYhVJ+]ăU"2W>pngz1Bm'>hjDHk9](FH]aaaC:Btr82kW;L#=\+_w&F9Lp:?fO2NcH:P&9dtNăU"0U,%PNu/7ovqZjx$?lOrK/xtnaf8TKiqAJlVpl5d2hOH11;6&p%#I97Y$>1Sg+HăU".)*N&Q0(??$+h3_Qg9jp]9&unW,8qjNks$n>t^B+.e89(YR,B''o2uk7..V6&PmăU"W4?v&s\/O_h7qCsS3g0GttV3mG7&=Fb9#F:%esOqA]eIh.kB$W(5E\(J[#^U_hOăU",=(A=YgJ&\jurG-rZWj\xMYxE+pu>lfo3rLxlWO*P]oO/p&T&c4Iun^nlWH,QG-ăU"6_3ctC^kZYJXSO6.U.oF,&O-,.Pbb+h\/Hs-RG$[(.79%7.E?p5qI%s>8Pf8E^făU"9n(b0jWj5tN#b#'j%W,M<d4:^%60OnMqe^'v0w#z#sDxpjX<PP^XiuLNlQ1DfWSăU"54L6\R)[c[?v*GCn3^uDnIIIBsfbnUt0IG_Lm,UFmB4(xX]7KPSJ<nt*n)Hjs':ăU"[VZ%^<C$s8)&*DcXxUtVT.Ht%M)*&mtN$,NqHNa9(jG47t0lq6irSnKFn2uP((răU"'>b59r_Xsh<#L5kX;CcnTciCt1*a)xq_TL68znM3k.u.nbC70cF9Go%Dl^*cdxuăU"%+-/N/F5tZ.jcrQ$7'l[0iD1I'=nNtC^=0Aynu&IOV>3%5Z4J5uPR*$;C_6o:m2ăU"RgqMA+IuMqv7a*6:VS4I,YKn,\^0Na*3kfBZ\,*u'qNJr2=4/'bLAk*,h*g*RN3ăU"Ao#2E:D[;gG]ObO%bx3=p97*q%bFr]#?13Ayhq1kl)Fh&wOk//N7>hbWflEYQK0ăU"^bTI\lkUJbN[qRkO_pfnR*O$*ofdvmVNkW;JlPi9^P:pL?8xmqRc0&HL[cMCu6VăU"wq-rrwK(?orOUVnDP+K''Oe#^<YO?9ly(URd/tI.SJSAECrD$7Gd%+Jr8T>x$:aăU"HTQh-uniGux_&o?xvLlYjfOxr1q1+f/dDar.n#+q6=w'F;FB(>>0'cSa3t,j9'hăU"YJ^2^[j.]IC3DQJ*&V+w#Xu;b10&vnO2sr[DqX)iFLE*kcpNNcLqflscNC.-5BvăU"ld;2FmjdT0.+6S&4=bhdk6rQ[^V2Zjc8KZM7nEoL2u&jzDoT.33]-GoeHh$[3K[ăU"B*?Y9CZupQUqj'&,AjE=Lu?'9pB=.T<:Y$t_>,]sN,d^MIxGlZ1L=De&M#D#IrBăU"NL[VB4IZepxCc/BIhLbMzLBvv<U(QoiQoY1np%4f,(-PV)daAlv1XC<-h]Bo2MLăU"xYDi2P_HAJ]eyUR9YcBtv7qei?vn5S)WYmiB>lqq?B\kUPX:l,J[TdP%Eu'qfBgăU"PK8MVap4+USA)NOGFEt]KK:]67D//i1&?LOm^hRWoOED^4Fve08TYC.gW,v(66păU"9gul'J8*0ipvsnlarC\c&H6QJCP6NWG<X=CRWZ4Au5b;dRpnnJW\lIl;-,b*r^<ăU"s#abb9TXC<[eDAZqz<Z[pAa?tEchE<=Vc.nRUIB'KAh94?\<90W4Io?B>/2udVjăU"_C;\g.]*^5EL^O8b0,Np%Dt^>[b=Id/?RfkLmFm.vYGw#+E?pmo4/B*oj%iOWy;ăU"g,ga.X^UK_?rCUV;6moG&Di+ZY)WPRsjbCY)&G/.YEx/7b#Fn#1/6^RLw[][eYCăU"o9L;6+%)Kf71]'8FDF3-9/$09lS]6:Kol[A7,)Clf6b\=<Ir6oN8c/2ypQO1i&TăU"8/qq>S8;HF0DZ,tLK1&)INn&VT=g4BIwv-A^O25uN9VLqraXc#2A7)'u[uZwem<ăU">_^R'C0iCC(/7$1)slyG.xMdoLyy_G%k8-Hka-)&1I0P7)U;)%=0^5rU7M0ll9.ăU"oNBI)huEKhmjJ\YytCg$9c\-EzTJF#3>a^_KmqgP)b$MA.5#R5o_')XG>C+.tOPăU"e)R;K-HLS&U07^D5#VX/;Fn&/FthfjXBpG%lv.?&;cMfAnzLf7OfpLJv;>RCQ%xăU"Mb'+?s.%w^aBM:iI450c2/MVKdeO]+g.3.'r:ep\'bxG;CWO5$uZDAP1)9dwKa;ăU"k^<DR2wRCPaPf0Y\1O:1'1YJF#3xqmTkIGxM+z%xcFkOUIJQRtDEJWe7E2CYi-jăU"ELRk.h-flI=P=\'khJl%';lSy%xc'x6;?Qi,S>14YXmg3At^xY^_#Ret&/jpWfyăU"$2+&A>RKQk)t_%zEg^gp]r6o>fXMShYTP\IHO%h(q-:QtL+MZh_9H%0X6hpa?\hăU"7CuLLfbV,NY[:ltXcUeFyKhO:T3lXUB_29%SC3g.)f#xec6S0T>-+JpGHs(Gvl?ăU"4Qi>f6:GMUeK3';I;E8hyL%y&zQ012tS(yG/#*2Ot<?/*=#z'CN\+EuTsH>bbbAăU";p[d;,b&Bh*N*\nqjQ.UuL=kGW9+_JhuIG2<ZYu=b&Lq#p-3ZkBcXg<K9UTg4hLăU"unuSd;^e69%m5[xMmhnn%S&D?pY7&-CLd3JmZ8KTBoN<#&bK0Bmq;dL'.w_A<iDăU"%eC.)Kxd*P'EhvONifr0*h7,+jDPNS=L0kxvy(pIwl<(>.[3PN,4+)R=YW59.k5ăU"V'9V)CycuHvpXvYM=9e2j,;WC:TEgd.$GFnK&1?Y8,t1N>hTH6iISG1wkhhb-N;ăU"tr^6&.fBbu0Z0S&d/aiwW<25W)?JIW_/NU(_?iiZlLDLGNtPnJg(qxaZIXdb->)ăU"VS_,d?Qc+$^.W6JcCZ9$+(>]FTQH^<l]bLnoChITWeX]Tdz[H'Bx**fjdwu[h-wăU"oO_gZd-:ITpa?]XuwO7m4urP\W(-6I6^[j4\UMGvlkRdN-..\CbLa'A$-q[sum5ăU"T_hCdN25AgdnnV$Ou0_#:PZ(g.h<VXc7/spXVDXq:?.CE>bf>x*&$&Fab;BOkC:ăU"HcAZV]V(DZ1dk$o?\O0k)i;u(c>[zuGWO>n>B4Ib9&Z%sxh7.Wete\L:oOu=$sYăU"#oP[0/,=w[h63\4MDl5SOmp'r?WuK,k]i9tWZ5jbXEs^d8-.0sKN]/*1i(=;wX<ăU"IPdr#572kMdrDODU9,sb])Mn%['&P,T;,QxBJjf&0Zwur.HWjbYrctzfoSVkN_\ăU">\O&#Q$(m7cIWm'^_,T?%bK^B3B&uoZR),GYAf4zaLoDxi]R\O3Rq-RfPROs-w>ăU"2eqHK_BnzDwYr:2PTX#(^wYhNn>WfLc)YJ\q^2=;,dJi$?p?.jg&eN(pe.rcHB6ăU"mXF4jcrKV7D-#X_(sFE>gBFKjwBwXn-arWEvNa#<hXNDA+&*3^Xy'xYMl_:mlT/ăU"T8&D(d>ErK(TrL(PaM($$uPOo>L3Ru'bHogd'O$,DQ3M9><5Jh71g(k(pFAdV,RăU"roX(D0h1ecJ9r#]k]L1&w?PJoAI><f.PsUC,TGVJP*(R<SUK)28>GYKn*h/2\=aăU"?t=j2G'DIBZ]S.6,]50du8s=rY%dk$[lTheR[eNQ)g-goQl<Nlez\9^aA-z)7P=ăU"-=F'Ubgg<iAVPJcdLgL>Miq.>vaW?VXnTDWr.uXua2Tc&-esHp6,tHdSsm+I;6ZăU"'BX>QU3M<R(IwL2Z:7$FD4'E>x6wx3I4:pm,S:toHawm*0ncWGbc]A2p'pLL_rKăU"YQ+_MJ;5.by>:dctssX3whlthkN\&)j>&wlL;o$'CPM)rTk*&jxO6?Y6Y>d[jZ8ăU"FH-=esrU/)pJ89-$e=pg(xjbXd\'(DN]<AsUV6/GqwU(%vw[WC9&n%b\zclPSKtăU"6rd*\tmV8u0A$wG+\x\=]ZP4VeN&<CYtL8kBKm7vS$o8AugNveL7O.MHaI*SW*PăU")&]pS(CN.&o46-'NH-HQUV^?40]p[V<bl)T;LLPzBBD:*DKExJ\)VOAaTp4*f8(ăU"df4BqS.-jW?1;v$Y[*WG>.dJ6\wIJgC,I$t%t?Jrt0X'6wT4MuYO2RtL)<dLTlPăU">Q4w3meD=45abv(<)+NE5li383u23/5uiG?sN*2_mfHCGcQE$nN>?j[2,soSBA+ăU"+^M\HnP[8^2o^4s-)<De7,b[QqDtto6rsa8YfG=AsNr6Q>BXd0<)f$n2dud=umAăU"&TbIKmC&>K(<\kHcYoAFu.lpNr7Lk=sx#'X=_lM(pTMUs<qT<4%D$(U=<ph()2HăU"KFN_BUEThIX<G<vV=k?#pp^cE>kNrj6*o&xrkWh=/*>6d.\G=.dI-w4uYNP]3rdăU"&,i&ZneShNBsb$SO0OAuwwkKNJrV.?uq\<pDGcmZ&On6*_i0d'q-uCqGK66BjPTăU">k;1>$4%-otb.k=UrBx_eT\5qdT#t0)NhVsTrP=/GFyRL>K-c.HTft)>bV,v?(hăU"8jHo6$0$ol^aLU3*v^B(T96bepdois./<q]mqqbbLtf>.Wx1c-+pHNu0rL8xNRXăU"QI4:vH_>t*S6L^g:X%%\m3h%HpFcpuW<qU:MnmhAuH56RZwuHnW0*d^AsHe+JINăU"F?JF<os%Hc$vPIrp'YK+*?ZXpWNrdpS;u\xos%43RTWhNo)VzDjJM:.;lm13meQăU"S*LjZbF8Mlj/b(B++xbAt,S;h<lLu?MOO.-XYCnijF>PZ5b#0m#cxq<\*Y[_/^MăU"6&+-oLkbFC]>7e*IBb)Nc7PTEKr<xKWIl%3HcxJ8dqfNp]_Nk$vsGR6\ug4h7ppăU"Me&r0n,iU:llz668(b*pZ(Tu6xWxhsUU#Oy.6YVP7rx^d-bnT;4XN9lciYR3g(căU"Unt+G%W>0_rFgG'Cz7f<'I9m=Q;>5z]lmIU>NmbHWtYN9oGZ/\o'$g5Elz$3,5CăU"Q7hopYDpDzHFU9R*3'=FACW^ZF0/Ur3#p4L\j/R,]a8+p+CAjn0II6Lg74YeVsOăU"E]]#0qGxqOO[#GC7lRgGxW;>jp.+=ppy24Z0Xrdr(K^D;F;dCEYWKsG/]1sf<29ăU"Cgj//:Fk2g?,/wmOG&%Y5l$$6d9>I\IA_i%lW[4;_C.I>>Z)((Nh?7w8YJ#/lovăU"'E?9wh0tXt?vctUX0vh:FKnt]4gb3$Wd?h?,oEGPi($+]dWN()kVU,b1H=gr5AYăU"2W5iX*.1WmB<web>ULG%<DG%_iB7>Pl''mVTV$7Ef#BFW[bEWs^WN<gi,t3IAu8ăU"3Et<xs/bl4l=j?,\;Sp1sV9?Z/uCOf1'(zQv34_/BVD$79[jl7+&.zLbB^6yHv)ăU"XqX=^3HN&qGs04i4F/)VN&$Z*4G_tbEw[Cn+J>IO+B7.>Fpg&?'Ea-B)&/E6)0NăU"mgoUA>k;Ay]13\]pI&JWCMq^XQ$Yx9L(Fv.xJ:..10K:YjI'[lGM3oN?#qE;]kCăU"XD$uPgg[6bvbpB0v;y&hsh?]WXYC>f\YpMB#feuTLVL[LWX2DA]FsN<LR2pGdRbăU"#(Pi(D8NY*/yyA6^4p(bEe3xmmmW:Is_jaaQA1+6o;zuWt<T/pO.FpxN^No3D(făU"jT55F1JWg[_zUx(8P<XDHbHV\]b^P4'1Pw8z6\_PZSKVSj(9(XR(GX;yD[7.i.8ăU")t3>/.Qb3m$2Kj8#Yu3L)7l/V/&pWqkYx<Zce&5$;=7FR,9i,iZKL'q(1F;uWfTăU"3(*GU\bhk?qjbTFmU1Xn%R?2R3J_:$+)t)oX9-v&yAR3*c4q=<wGY>/bUPaGS&8ăU"qUa=QM2W-,xUyW^CQ6I,fX]OUQ;<Qh7T9qcag2n6,S*n;FZOuk3h7,J$C6dku5&ăU"Fy9<:?%w]IhW&35g:AdOBY.Lb2o3Do,d:;mN]A#^\(S5AuFwUXjv_:r#i=iQ9FkăU"4(t$T>S[m^Z5-wW6>WB5l#W0]8JZTP4UE>)00Ry.#U028I_YcC$a(Fv*xB9CMlhăU"P?cnHRF+rkToV\5#?8wLn4)Y-rx3Fhn[UIL.)OXaIlx,nl8'%14fAl\T=BBH^\CăU"rnGtP'DM]q>u*a^\<<R<'RJm$GCAXI<tv<QUM_LMfAlImjl<f#TKF_t+>\<w\I;ăU";ee2id+GTE)uPe/M[c\o&pR:\.H+E&gqqgYHqRe;1%H%BA=62x?aU1MSrhGl<vFăU"(EWkXAg/)s<E1p%Y,sU/of-,JAoxP3gwT]m/OS;qR\#^;+QM^*S2GjCN''lmM*'ăU"g:%e*^QtI]5[TRq-B)_W?1gf$7Y,R_D?YbFbsG$xi6Bp/H0;FIJfC^gXdai9#\BăU"ii/R9FDF9MZ4CcX7i1+M=>O\=J,rw[*BlNcCriA]d%x\#2LX8:u[1?.cr:kIlgIăU"C'>eI*f\qO61[oz-X?)do&cAcK4Ak_?KZ5_6BpEt]5rj8KSlr#QjCS]_.q19u?aăU"A.yPiE6b7v[al2vKX105(m>NP0Ib;dEQ$%L(87nx'u5Y-(L8GDiTR^vtwd#-<8\ăU"oqn^ao'$xr>]f4^eA8C08?]E+TU[;;(K848jr$OhK+>Ce.;,x%dtYmC0_0TQR5_ăU"55mFMS^/qNZ6KVbOO5rBPknzlWW81fPTFUK<Xm*N>if/TLbNDFF^cCF3(HHdfU:ăU"uvJ=U-/0KDt)Nq7ZU:Ep81J)d3EYaCtB./V-ca/'VB['iP:_h(;XJW.J?pu#[#jăU"XK2H21IbB[C=uwbpk.7:P,WEm^574RK4errp+Vwi.+Q^qJO8jJ+2=^n.al\nAm*ăU"-LE71-[)<dBQuMUIkOnqxD=Q;j#Cox(qDq]56-V?w0F1y5E,qL%NaoGTxlA&%jqăU"#Z8)07J$PPqOjQGIA/kMKIf(<^SN-5/>GhNUy9LBbZl2)Dy-$8u.45a'%BBeX.răU"u#%F_N'XdhlH]VSfxKGBLKO2^#bp?MhVtFUjnOCAKlLf^j?%qVF7LP[]GB&XEy*ăU"?,;Hj_mT[tTQ=,?^bR*jy0(OUriFcX(&>QJUxlBFT2+P'q>+yht7/#0/SW)'f)OăU"#6R6BLCG+^iFZcUtJ+GewXQWTKB/y/('.O2]'mmG6X0,Z3\pV4eW)'HUpA56:V1ăU"B281P]eGoY0IY[,rKQRU_;$p3FfU[bOXS2olyi/2hRhP2\1hCgpwxK]/cbd?OghăU"Lq%i8Df-Oa)1s\')YS2WE*+2lAU&/21\1)H_8V9L)rw-)eq.4$'+1i5pn&a9\RHăU"g.;TEKuSe8iQ/'O&M1:Ah9(_RyOiP)R2U+Kk;gc/akO]\ArdX9V.CU;a&tlT05_ăU">=O<cI1;^U80K:I9wX'LQm_:M?7-$&G7W53Se)OV$8EEd\mAK)Wx9/Mt)Rp0LuhăU"AIC*__L\iny%zWfgKBlv*&)uO5&fmYzkwGC=1oYD6eIRi#e8yAb[)7]i3x(7D.#ăU"ruEL&8QUN1$lJsjIV&/5h6Q>>MdU'.?/;a2X-SB#iG[HD%7[Be>BfI%lT1AXiWdăU"7PrN#3nx1;_M$2h/CeX=?NBfnsCbm,*i-Y%&IN5-bqtUjq'Sj4CBc*\-YI&Mf30ăU"uNeDof)Uw%;wPmYrzd''xC&/4i7$b;Cs_+tyA;s/t_XxiG0dLD\l3IfiNhfn\?PăU"ra-[U_eBf6C^1c%84H=Jwxjl)u<9n,Q.jh7dYMi>B6JbWvLvJ.]gxwUlI<X+Q3kăU"w3Ev1Q2RU[CECw7#_VVlILa)^rA>j.U^S$^EJgQ*lh,'S3%k\p5d&]kI&PbC\:_ăU"l*w7%mZ?gNNs8>:$oBi4IV1('XAXMF5Zt*B1[CKk^l=+URC#o';X7o?JP[DlpL\ăU"7WQO6$'1Y=q'-cIb=$EV-\n,=hUPn6q=vD\lnI_YXH40LinzFWQ.6JWCLiu7(q]ăU"eYYdF^=EH$qS-F^fl#.w&fB<:qw[2;Pq;0j<#&YF6s0\o0l72TGfn^/s6)-'*UIăU"T#Ue>Z_E5r,OD%I62FLlfD.2u\G43MUG1h1w:u$V#\,o'b2=+3VYq_Ch(.33))6ăU"gquj+4F'Jq0%W#j<;ou_<m<<_dST)\D^^lsMU1RIAIv4XS7&R]F'-7I*ZZ24J8WăU"4*Zg57uE,qL_73PydOn\3KK*I08-04.+\ES;\jaON?NdA09h'x&up%()9%%'%-%ăU";wHPKOa%?e%a,%%%\6%%%-%%%%gzru%SgfxMt'<>][m7w5]=NMFf+ee#]+KhQBeăU"3DCI#-i]52U05ht?wn2?i>G>+rW?pPXx-V/V^na>b%XM14ztm'0'VyE\K3^TCP?ăU";Ij<KNo2i<KtiBub[$Re$VuiJF6S80]Qe.dZT)m0vPDsdttB;GP*jJnlIZ$VrrnăU"I5<%1>'>kIg;65qW(V%tlS]]gPKA8]j#)E8$9fWidFg*5M8;)JgT<1$c%+P')I.ăU"dt/XsBKXKB35a:AnPGF/OcTOv)WSL<2(1B]o&]bTlQBDb3lA'_Ie0,Kkw/)tn]PăU"M^Hw:Ai?V)KrVXSXcG<gG$8BmtZQ*T0IVj&RWE7leNU]B3knlM]ibE.jFQ[OH5&ăU"BGGp\o[Dk3ni]Kn/aYmBY)+TS#t<sbZj9.w&q/Ma'Y/4,3tK\_?6_/pmGJ4IL*KăU"KaW'g%ARY&8:w=9=s[eDl+SqoR0n#OY5j'((:)1026$a(6Q1GC-?_gPO;B01P.RăU"X1R#%PcOVJ*mmQS^Niec2bOIabl.bsPHSWkZiCq(TL#95%DZH$uI.xiu6[GDR:VăU"zqxt+NCv)RDlZmKgI%2:CDdYqlZ,PNmRh0dB9)M?p1jc<UU4Sn-#VL[9=)DQ161ăU",*qB-lIRa5#fh/KI\zpd#QHNx%XH6jgG\d.O<Kf$7mWM2(yF,yB7JJ1-cC[r&tRăU"=\QT;fW/XIoLLd'>RinEO*(_;h:]dQ<tV\2XV)o]L2hI?&*>]S.m3RR>b+2OSKbăU"&?VG&P<iN)VPtp]Qb\P.?(kJ#tQI*0%V_n,5SMs.W.'yHPj&tYSCA^Jy:J^*G7aăU">F2h+JKFsj9k^.%.f;3JUE#YnbqJG6l8h+O)Dm:xjZe6HhRpCp*5ob^Tkio-dOXăU"V(^=8)vGYJpx2uh6B'[&w+a/7%br2+oeLqxWh#Kv[G)R+sZ(%FDB7;kJ1>uxG\?ăU"i&Ga((GDLy/if8pUB=]5TsgWa>72;?W(;]\Z>/\2e;lPd_=+oAIRA6p9lGV2+q0ăU")x%med\pPEY][=nVDmW:G;%pgAp(Y^'T1t-h[umgLY<L-&M<SCTxjolbWD*[(LYăU"e.N.IJkr)ijNCd7%&K6peY*s[^udxM:5u25;x$n1DB%ZinF,>fBF\8D\iq?PoAMăU"&FuC*\=0ZSPR\<b.:]qw'%ZhDTU22l-_[DeVZ\\VY9rf].bfwNf%)NpIm_P]NafăU"\1(F=c0ZVL\=9S::/#XW$U3tx7&DRMaCx+FJ]j+BA'9FUoP^pZ_]eEY(ktfE'd1ăEND SUBăSUB V2ăU"1mVOo17d1or:*k^3q13fB5st48p.dVsjjEKQ)]Agb0I9>)LU]z<4SD%khE#V>d$ăU"qg[:j4V8P08[-989VBr&.>Zc)<dj733HPkrkbQm,?&j_,\GFu),6K?.ln1>ng-+ăU"=QHJ8Ph+9]aK)>;p3HjVi^R?R'y:6;8YNJI[wj#[\J^ROk;XD.Bu1,M:gx2=?]aăU";&6REC:;&w19fw;7:O6GBLJUo3[*D$;NNd+h4^Wpbom;w;AdO+\r\^_#iLb-p$1ăU"mr#c($61#-TzFo8tamf]xjE'Pny6dEGhpr[MUMs#-aX(uO<GDu;[0W6RkII0F>RăU"'eE$?qZ[e]5L+8k6obLWo=Zov;b^6/\;Ji*'-MTRi/eu^qt87=GZS'v2</<2X<TăU"<xd?;%G&-3NXn?;O3_gwS=<3q*Zj%b>P,LLY\fb\z.0oOY]:_22uS8nE5O6P;SHăU"<,XbUf%5z8d]Z2OL<*=TMShz5dr>=B\DOZ)A?K4dL#r<bJ4T%6Y*X.]-=r5OAIGăU"GiP;M970x+fs2,ljW<#(JoSbg[_0*x<UhSbmUxV*jr7PMv.>w[)eOC%1pAz[6,UăU"^Lti<D1j8n%V4aQoQ.JDx^<TI^bCbA<[[6E'7/[8cV:,KGx])zH<90Y%A:a3WMqăU"M8F.&eShALEvF?OXuR0NXcOnL#ld%S7<S52u4Ar1[RiW(2WhH:h'iRjow$IK*5OăU"\yB0>EXW>p487'6VQ]I<3h4csG+Tuw=I<B_ow'St15,r6h+'K7FJ3B\JC6g8))HăU"d/\x4DY<+M<dLQ7P.$\)V>nV3;DrzHJT5(U\2df5+EX4R'^ca+W<*e0$$l[eF.6ăU"7nV;\gAVo;O^\)Hx59=xP0eLr5C2U?-*b$3K*w^8zr'^9Z(P4;d&(efMcNH9fpwăU"#iDs]V'rpSSg-R:kW.jPM#OhD>dB?82\CWWL.M'ezP\cpp4muPni?IGZ.z(VXQLăU"X.7/>fn?&1%Kp?.l'>(F7jMxZi5k+LpL+K3Fmn47]aLy44?n>R+?nL;ZNwA6?8\ăU"E4qw%(Pq\I6o.,LnHk9kmaLubIzsE=>f)0+Pktj0k0tUFed7t34]bNf(=OSGnNtăU"]QI7'pzg>uq[?c=PLw<%up()%9%'%#-%qI'PK5]2s_O%.%%d%%%%0%%%%kn.qj.ăU"n%iSin8)rEb%/'V5FeZc_d$qxFI)6Z'6B'oEJeC/+7hAUrbUu=oQo'T/ini^P9NăU"nYo#GAa?)O]W45)V6](w/\SYH,D)G8NlhO8t6Pjz8UTm*[OSRD$ZnCafGJM2):'ăU"',p>8[.dU1PQn4g;E*&K?[*=jmv??h9nE]NV3[BN%%up&%'9%9%%'%-d%qIP#K5ăU"]s)_O%%(%d%%%%/%%%%%%%%%&%E%%%%%%%%%w%jfir#jSy'%yup&%'9%9%%'%-jăU"%pEN1KXbT(:gG%(%sM%%%-%%%%%%%%%&%E#%%%w%%%%g%zruS.wf&u%p&'9%%9%ăU"'#%-%w,HPKa3%?ea%,%%\%6%%-%%%%%%%%%&%%E%%(%5H%%%gzr%uSgf%xup&%'ăU"9%9%%'%-d%qIP#K5]s)_O%%(%d%%%%0%%%%%%%%%&%E[%%%A%O%%k#nqj.%niSiăU"(n)up%*+%%%%%)%7)%V%.%%#P%%%%%ăEND SUBăV2ăCLOSE:IF S=164AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRich Geldreich                 GIF89A DECODER                 richgel@voicenet.com           06-26-99 (10:07)       QB, QBasic, PDS        287  10132    DEGIF6.BAS  'DEGIF6.BAS - No frills GIF decoder for the VGA's 320x200x256 mode.ă'By Rich Geldreich 1993 (Public domain, use as you wish.)ă'This version should properly decode all LZW encoded images ină'GIF image files. I've finally added GIF89a and local colormapă'support, so it more closely follows the GIF specification. Ită'still doesn't support the entire GIF89a specification, but it'llă'show most GIF files fine.ă'The GIF decoding speed of this program isn't great, but I'd sayă'for an all QB/PDS decoder it's not bad!ă'Note: This program does not stop decoding the GIF image after theă'rest of the scanlines become invisible! This happens with imagesă'larger than the 320x200 screen. So if the program seems to beă'just sitting there, accessing your hard disk, don't worry...ă'It'll beep when it's done.ăDEFINT A-Ză'Prefix() and Suffix() hold the LZW phrase dictionary.ă'OutStack() is used as a decoding stack.ă'ShiftOut() as a power of two table used to quickly retrieve the LZWă'multibit codes.ăDIM Prefix(4095), Suffix(4095), OutStack(4095), ShiftOut(8)ăă'The following line is for the QB environment(slow).ăDIM YBase AS LONG, Powersof2(11) AS LONG, WorkCode AS LONGă'For a little more speed, unremark the next line and remark the oneă'above, before you compile... You'll get an overflow error if theă'following line is used in the QB environment, so change it back.ă'DIM YBase AS INTEGER, Powersof2(11) AS INTEGER, WorkCode AS INTEGERăă'Precalculate power of two tables for fast shifts.ăFOR A = 0 TO 8: ShiftOut(8 - A) = 2 ^ A: NEXTăFOR A = 0 TO 11: Powersof2(A) = 2 ^ A: NEXTăă'Get GIF filename.ăA$ = COMMAND$: IF A$ = "" THEN INPUT "GIF file"; A$: IF A$ = "" THEN ENDă'Add GIF extension if the given filename doesn't have one.ăFOR A = LEN(A$) TO 1 STEP -1ă    SELECT CASE MID$(A$, A, 1)ă    CASE "\", ":": EXIT FORă    CASE ".": Extension = -1: EXIT FORă    END SELECTăNEXTăIF Extension = 0 THEN A$ = A$ + ".GIF"ăă'Open file for input so QB stops with an error if it doesn't exist.ăOPEN A$ FOR INPUT AS #1: CLOSE #1ăOPEN A$ FOR BINARY AS #1ăă'Check to see if GIF file. Ignore GIF version number.ăA$ = "      ": GET #1, , A$ăIF LEFT$(A$, 3) <> "GIF" THEN PRINT "Not a GIF file.": ENDăă'Get logical screen's X and Y resolution.ăGET #1, , TotalX: GET #1, , TotalY: GOSUB GetByteă'Calculate number of colors and find out if a global palette exists.ăNumColors = 2 ^ ((A AND 7) + 1): NoPalette = (A AND 128) = 0ă'Retrieve background color.ăGOSUB GetByte: Background = Aăă'Get aspect ratio and ignore it.ăGOSUB GetByteăă'Retrieve global palette if it exists.ăIF NoPalette = 0 THEN P$ = SPACE$(NumColors * 3): GET #1, , P$ăăDO 'Image decode loopăă'Skip by any GIF extensions.ă'(With a few modifications this code could also fetch comments.)ăDOă    'Skip by any zeros at end of image (why must I do this? theă    'GIF spec never mentioned it)ă    DOă        IF EOF(1) THEN GOTO AllDone 'if at end of file, exită        GOSUB GetByteă    LOOP WHILE A = 0           'loop while byte fetched is zeroăă    SELECT CASE Aă    CASE 44  'We've found an image descriptor!ă        EXIT DOă    CASE 59  'GIF trailer, stop decoding.ă        GOTO AllDoneă    CASE IS <> 33ă        PRINT "Unknown GIF extension type.": ENDă    END SELECTă    'Skip by blocked extension data.ă    GOSUB GetByteă    DO: GOSUB GetByte: A$ = SPACE$(A): GET #1, , A$: LOOP UNTIL A = 0ăLOOPă'Get image's start coordinates and size.ăGET #1, , XStart: GET #1, , YStart: GET #1, , XLength: GET #1, , YLengthăXEnd = XStart + XLength: YEnd = YStart + YLengthăă'Check for local colormap, and fetch it if it exists.ăGOSUB GetByteăIF (A AND 128) THENă    NoPalette = 0ă    NumColors = 2 ^ ((A AND 7) + 1)ă    P$ = SPACE$(NumColors * 3): GET #1, , P$ăEND IFăă'Check for interlaced image.ăInterlaced = (A AND 64) > 0: PassNumber = 0: PassStep = 8ăă'Get LZW starting code size.ăGOSUB GetByteăă'Calculate clear code, end of stream code, and first free LZW code.ăClearCode = 2 ^ AăEOSCode = ClearCode + 1ăFirstCode = ClearCode + 2: NextCode = FirstCodeăStartCodeSize = A + 1: CodeSize = StartCodeSizeăă'Find maximum code for the current code size.ăStartMaxCode = 2 ^ (A + 1) - 1: MaxCode = StartMaxCodeăăBitsIn = 0: BlockSize = 0: BlockPointer = 1ăăX = XStart: y = YStart: YBase = y * 320&ăă'Set screen 13 in not set yet.ăIF FirstTime = 0 THENă    'Go to VGA mode 13 (320x200x256).ă    SCREEN 13: DEF SEG = &HA000ăEND IFăă'Set palette, if there was one.ăIF NoPalette = 0 THENă    'Use OUTs for speed.ă    OUT &H3C8, 0ă    FOR A = 1 TO NumColors * 3: OUT &H3C9, ASC(MID$(P$, A, 1)) \ 4: NEXTă    'Save palette of image to disk.ă    'OPEN "pal." FOR BINARY AS #2: PUT #2, , P$: CLOSE #2ăEND IFăăIF FirstTime = 0 THENă  'Clear entire screen to background color. This isn'tă  'done until the image's palette is set, to avoid flickeră  'on some GIFs.ă    LINE (0, 0)-(319, 199), Background, BFă    FirstTime = -1ăEND IFăă'Decode LZW data stream to screen.ăDOă    'Retrieve one LZW code.ă    GOSUB GetCodeă    'Is it an end of stream code?ă    IF Code <> EOSCode THENă        'Is it a clear code? (The clear code resets the slidingă        'dictionary - it *should* be the first LZW code present ină        'the data stream.)ă        IF Code = ClearCode THENă            NextCode = FirstCodeă            CodeSize = StartCodeSizeă            MaxCode = StartMaxCodeă            DO: GOSUB GetCode: LOOP WHILE Code = ClearCodeă            IF Code = EOSCode THEN GOTO ImageDoneă            LastCode = Code: LastPixel = Codeă            IF X < 320 AND y < 200 THEN POKE X + YBase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă        ELSEă            CurCode = Code: StackPointer = 0ăă            'Have we entered this code into the dictionary yet?ă            IF Code >= NextCode THENă                IF Code > NextCode THEN GOTO AllDone 'Bad GIF if this happens.ă               'mimick last code if we haven't entered the requestedă               'code into the dictionary yetă                CurCode = LastCodeă                OutStack(StackPointer) = LastPixelă                StackPointer = StackPointer + 1ă            END IFăă            'Recursively get each character of the string.ă            'Since we get the characters in reverse, "push" themă            'onto a stack so we can "pop" them off later.ă            'Hint: There is another, much faster way to accomplishă            'this that doesn't involve a decoding stack at all...ă            DO WHILE CurCode >= FirstCodeă                OutStack(StackPointer) = Suffix(CurCode)ă                StackPointer = StackPointer + 1ă                CurCode = Prefix(CurCode)ă            LOOPăă            LastPixel = CurCodeă            IF X < 320 AND y < 200 THEN POKE X + YBase, LastPixelă            X = X + 1: IF X = XEnd THEN GOSUB NextScanLineăă            '"Pop" each character onto the display.ă            FOR A = StackPointer - 1 TO 0 STEP -1ă                IF X < 320 AND y < 200 THEN POKE X + YBase, OutStack(A)ă                X = X + 1: IF X = XEnd THEN GOSUB NextScanLineă            NEXTăă            'Can we put this new string into our dictionary? (Some GIFă            'encoders will wait a bit when the dictionary is fullă            'before sending a clear code- this increases compressionă            'because the dictionary's contents are thrown away lessă            'often.)ă            IF NextCode < 4096 THENă                'Store new string in the dictionary for later use.ă                Prefix(NextCode) = LastCodeă                Suffix(NextCode) = LastPixelă                NextCode = NextCode + 1ă                'Time to increase the LZW code size?ă                IF (NextCode > MaxCode) AND (CodeSize < 12) THENă                    CodeSize = CodeSize + 1ă                    MaxCode = MaxCode * 2 + 1ă                END IFă            END IFă            LastCode = Codeă        END IFă    END IFăLOOP UNTIL Code = EOSCodeăImageDone:ăăLOOPăăAllDone:ăă'Save image and palette to BSAVE file.ă'DEF SEG = &HA000ă'OUT &H3C7, 0ă'FOR a = 0 TO 767ă'    POKE a + 64000, INP(&H3C9)ă'NEXTă'BSAVE "pic.bas", 0, 64768ăă'Load images saved with the above code with this:ă'DEF SEG= &HA000ă'BLOAD "Pic.Bas"ă'OUT &H3C8, 0ă'FOR a = 0 To 767ă'     OUT &H3C9, Peek(a+ 64000)ă'NEXTăăBEEP: DO: LOOP WHILE INKEY$ <> "": DO: LOOP UNTIL INKEY$ <> ""ăENDăă'Slowly reads one byte from the GIF file...ăGetByte: A$ = " ": GET #1, , A$: A = ASC(A$): RETURNăă'Moves down one scanline. If the GIF is interlaced, then the numberă'of scanlines skipped is based on the current pass.ăNextScanLine:ă    IF Interlaced THENă        y = y + PassStepă        IF y >= YEnd THENă            PassNumber = PassNumber + 1ă            SELECT CASE PassNumberă            CASE 1: y = 4: PassStep = 8ă            CASE 2: y = 2: PassStep = 4ă            CASE 3: y = 1: PassStep = 2ă            END SELECTă        END IFă    ELSEă        y = y + 1ă    END IFă    X = XStart: YBase = y * 320&ăRETURNăă'Reads a multibit code from the data stream.ăGetCode:ă    WorkCode = LastChar \ ShiftOut(BitsIn)ă  'Loop while more bits are needed.ă    DO WHILE CodeSize > BitsInă'Reads a byte from the LZW data stream. Since the data stream isă'blocked, a check is performed for the end of the current blockă'before each byte is fetched.ă        IF BlockPointer > BlockSize THENă          'Retrieve block's lengthă            GOSUB GetByte: BlockSize = Aă            A$ = SPACE$(BlockSize): GET #1, , A$ă            BlockPointer = 1ă        END IFă      'Yuck, ASC() and MID$() aren't that fast.ă        LastChar = ASC(MID$(A$, BlockPointer, 1))ă        BlockPointer = BlockPointer + 1ă      'Append 8 more bits to the input bufferă        WorkCode = WorkCode OR LastChar * Powersof2(BitsIn)ă        BitsIn = BitsIn + 8ă    LOOPă  'Take away x number of bits.ă    BitsIn = BitsIn - CodeSizeă  'Return code to caller.ă    Code = WorkCode AND MaxCodeăRETURNăDavid A. Wicker                FALLING RAIN WITH SOUND EFFECTStopaz817@netzero.net           06-24-99 (05:51)       QB, QBasic, PDS        210  4954     RAIN2.BAS   ' Rainy Days #2 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ă' Written by David A. Wicker -- topaz817@fastlane.netă' ---------------------------------------------------------------------------ă' As always, if you borrow anything from any source code for youră' shareware projects, please give credit to the original author!ă' ---------------------------------------------------------------------------ăă' Nope, you're notta even going to get a lick of documentation on thisă' quick hack of mine.  Suffice it to say there is very little rain ină' Fort Worth (my Father says it was originally a desert), and I told himă' I didn't want to clean my room until it rained.  He said,ă' "Make it rain for yourself."  So I did.  :)ăă' Let my proggy run a good long while and the rain will pick up and hit thată' nice fine level for sleeping to, complete with thunder and lightning.ăăDEFINT A-Ză'$DYNAMICăDECLARE SUB Center (A, A$)ăDECLARE SUB TR (T$)ăDECLARE SUB CLR ()ăDECLARE SUB DEC (N)ăDECLARE SUB SFX (P)ăDECLARE SUB INC (N)ăDECLARE SUB RGB (N, R, G, B)ăDECLARE SUB Nano ()ăăDEF FNC$ (A$, A) = MID$(A$, A, 1)ăDEF FNR (A) = INT(RND * A)ăRANDOMIZE TIMERăăA$(0) = "freeware rain v1.0 written in quickbasic 4.5"ăA$(1) = "you like ?  please send a postcard to let me know !"ăA$(2) = "david wicker ÄÄ 3436 clayton road east ÄÄ fort worth, texas  76116"ăăFOR I = 0 TO 2ă  FOR J = 1 TO LEN(A$(I))ă    A = A + ASC(FNC$(A$(I), J))ă  NEXTăNEXTăăWHILE A <> 14425: WENDăA = 0ăăSCREEN 13ăăăFOR I = 0 TO 15ă  RGB I, 1.4 * I, 2.8 * I, 4.2 * IăNEXTăRGB 16, 31, 0, 63ăRGB 17, 63, 63, 63ăăM = 199ăăDIM X(M), Y(M), S(M)ăăFOR I = 0 TO Mă  X(I) = FNR(320)ă  Y(I) = FNR(200)ă  S(I) = FNR(8) + 8ăNEXTăE = FNR(100) + 100ăD = 1ăPLAY "MB"ăDOă  INC Nă  IF N = 100 THENă    IF A < 8 OR B = 5 THEN A = A + Dă    IF A = 8 THEN B = B + 1ă    IF B = 5 THEN B = 0: A = 7: D = -1ă    N = 0ă    IF A > 7 OR A < 0 THEN D = -Dă  END IFă  FOR I = 0 TO Mă    FOR J = -S(I) TO S(I) \ 2ă      C = Jă      IF C < 0 THEN C = 0ă      PSET (X(I), Y(I) + J), Că    NEXTă    Y(I) = Y(I) + S(I)ă    IF Y(I) > 200 + S(I) THENă      X(I) = FNR(320)ă      Y(I) = -S(I)ă      S(I) = FNR(8 + A) + 8 + Aă    END IFă    IF I MOD 6 = 0 AND FNR(8 - A) = 0 THENă      SFX FNR(5000) + FNR(16 - A * 2) * 1000 + A * 750ă    ELSEIF I MOD 6 = 0 THENă      SFX 32767ă    END IFă    IF Lightning > 0 AND I MOD 16 = 0 THENă      IF Lightning = 1 OR Lightning = 30 OR Lightning = 10 OR Lightning = 40 THENă        FOR K = 0 TO 2ă          PSET (BoltX(0) + K, BoltY(0))ă          C = 16ă          IF K = 1 THEN C = 17ă          FOR J = 1 TO 5ă            LINE -(BoltX(J) + K, BoltY(J)), Că          NEXTă        NEXTă      END IFă      IF Lightning = 1 OR Lightning = 30 THENă        RGB 0, 63, 63, 63ă      END IFă      IF Lightning = 10 OR Lightning = 40 THENă        RGB 0, 0, 0, 0ă        IF Lightning = 40 THEN CLRă      END IFă      IF Lightning = NowThunder THENă        Thun = 1000 + FNR(500)ă        Thunder = Thună        Lightning = 0ă      ELSEă        INC Lightningă      END IFă    END IFă    IF Thunder > 0 AND I MOD 12 = 0 THENă      SFX FNR(Thunder) - 500ă      DEC Thunderă    END IFă  NEXTă  Nanoă  IF Thunder = 0 AND Lightning = 0 THENă    IF A >= 3 THEN R = R + 1ă    IF A >= 3 AND R >= E THENă      Lightning = 1ă      NowThunder = 750 + FNR(500)ă      R = 0ă      E = FNR(100) + 100ă      X = 160 - 50 + FNR(100)ă      R = FNR(2)ă      FOR I = 0 TO 5ă        IF (I + R) MOD 2 = 0 THENă          X = X - 25 - FNR(50)ă        ELSEă          X = X + 25 + FNR(50)ă        END IFă        Y = I * 33 + FNR(33)ă        IF I = 0 THEN Y = 0ă        IF I = 5 THEN Y = 199ă        BoltX(I) = Xă        BoltY(I) = Yă      NEXTă    END IFă  END IFăLOOP UNTIL INKEY$ > ""ăăSCREEN 0, 1, 0, 0ăWIDTH 80ăCOLOR 7, 0ăCLSăPRINT STRING$(80, " ");ăLOCATE 10ăCenter 1, A$(0)ăCenter 5, A$(1)ăCenter 4, A$(2)ăCOLOR 7, 0ăLOCATE 23, 1, 1ăTT! = TIMER: WHILE (TIMER - TT! < 1 AND TIMER >= TT!) OR INKEY$ > "": WENDăDO: LOOP UNTIL INKEY$ = ""ăDO: LOOP UNTIL INKEY$ > ""ăENDăăREM $STATICăSUB Center (A, A$) : SHARED ColFlipă  LOCATE , 40 - LEN(A$) \ 2ă  ColFlip = Aă  TR A$ă  PRINTă  PRINTăEND SUBăăSUB CLRă  LINE (0, 0)-(319, 199), 0, BFăEND SUBăăSUB DEC (N)ă  N = N - 1ăEND SUBăăSUB INC (N)ă  N = N + 1ăEND SUBăăSUB Nano : SHARED TT!ă  WHILE TIMER = TT!: WEND: TT! = TIMERăEND SUBăăSUB RGB (N, R, G, B)ă  OUT &H3C8, Nă  OUT &H3C9, Ră  OUT &H3C9, Gă  OUT &H3C9, BăEND SUBăăSUB SFX (P)ă  IF P > 36 THEN SOUND P, .03ăEND SUBăăSUB TR (T$) : SHARED ColFlipă  FOR I = 1 TO LEN(T$)ă    C$ = FNC$(T$, I)ă    IF C$ = "`" THEN C$ = CHR$(34)ă    IF C$ < "A" OR I = 1 THEN COLOR ColFlip + 8: NextUp = 1ă    IF NextUp = 1 THEN C$ = UCASE$(C$)ă    PRINT C$;ă    IF C$ <> " " THEN COLOR ColFlip: NextUp = 0ă  NEXTăEND SUBăPetter Holmberg                JPEG LOADER V1.2 WITH COLOR    petter.holmberg@usa.net        06-28-99 (13:34)       QB, QBasic, PDS        875  21908    JPEG.BAS    ' JPEG loader by Petter Holmberg of Enhanced Creationsă' Version 1.2, 28/6 1999ăăDECLARE SUB LoadJPEG (filename$, jpegerror%)ăăDECLARE SUB ReadSOF0 (sof0error%)ăDECLARE SUB ReadDHT (dhterror%)ăDECLARE SUB ReadSOS (soserror%, numcomponents%)ăDECLARE SUB ReadDQT (dqterror%)ăDECLARE SUB ReadDNL (dnlerror%)ăDECLARE SUB ReadDRI ()ăDECLARE SUB ReadAPP0 (app0type%, app0error%)ăDECLARE SUB ReadCOM ()ăăDECLARE SUB DecodeMCU (mcuwidth%, mcuheight%, numcomponents%, decodeerror%)ăDECLARE SUB DecodeBlock (compid%, decodeerror%)ăDECLARE FUNCTION NextBit% ()ăDECLARE SUB YCbCr2RGB (mcuwidth%, mcuheight%)ăăTYPE JPEGTypeă  filename AS STRING * 12ă  version AS INTEGERă  units AS INTEGERă  xden AS INTEGERă  yden AS INTEGERă  xthumb AS INTEGERă  ythumb AS INTEGERă  numdqts AS INTEGERă  p AS INTEGERă  x AS INTEGERă  y AS INTEGERă  nf AS INTEGERă  ri AS INTEGERăEND TYPEăăTYPE ComponentTypeă  ci AS INTEGERă  h AS INTEGERă  v AS INTEGERă  tqi AS INTEGERăEND TYPEăăTYPE ScanTypeă  cs AS INTEGERă  td AS INTEGERă  ta AS INTEGERăEND TYPEăăTYPE RGBTypeă  r AS LONGă  g AS LONGă  b AS LONGăEND TYPEăăCONST MSOF0% = &HC0FFăCONST MDHT% = &HC4FFăCONST MJPG% = &HC8FFăCONST MSOI% = &HD8FFăCONST MEOI% = &HD9FFăCONST MSOS% = &HDAFFăCONST MDQT% = &HDBFFăCONST MDNL% = &HDCFFăCONST MDRI% = &HDDFFăCONST MAPP0% = &HE0FFăCONST MCOM% = &HFEFFăăCONST bestpalmatch& = 65536ăăDIM jpeg AS JPEGTypeăDIM component(1 TO 3) AS ComponentTypeăDIM dqttable%(3, 63)ăDIM huffval%(1, 1, 191)ăDIM huffsize%(1, 1, 191)ăDIM huffcode&(1, 1, 191)ăDIM decodeinfo(1 TO 3) AS ScanTypeăDIM block&(7, 7)ăDIM mcu%(1 TO 3, 31, 31)ăDIM olddc%(1 TO 3)ăDIM truepal(255) AS RGBTypeăăjpegerror% = 0ăt0! = 0ăt1! = 0ăăCLSăSCREEN 0ăWIDTH 80, 25ăăPRINT "JPEG loader by Petter Holmberg of Enhanced Creations"ăPRINT "Version 1.2, 28/6 1999"ăPRINTăPRINT "Here is the third release of my JPEG loader. No big news. The only real"ăPRINT "difference from the last version is that color images now are displayed in"ăPRINT "color, using a crude color-matching algoritm. Most color images looks terrible"ăPRINT "though, because the standard SCREEN 13 color palette is used. A customized"ăPRINT "palette and/or a better color matching-algoritm would do wonders. Also, this"ăPRINT "program now needs to be optimized a lot to reduce the loading time. All of this"ăPRINT "will hopefully be seen in upcoming versions of the loader. Check out the"ăPRINT "Enhanced Creations homepage for news on this."ăPRINTăPRINT "Petter Holmberg, -99 (http://ec.quickbasic.com, petter.holmberg@usa.net) ";ăăDO: LOOP WHILE INKEY$ = ""ăăCLSăăPRINT "Now type the name of a JPEG image file to load. Make sure it's a baseline"ăPRINT "8-bit JFIF image, or otherwise the loader won't be able to display it!"ăPRINTăăINPUT "Filename: ", filename$ăIF INSTR(filename$, ".") = 0 THEN filename$ = filename$ + ".JPG"ăăLoadJPEG filename$, jpegerror%ăăminutes% = (t1! - t0!) \ 60ăseconds% = (t1! - t0) - minutes% * 60ăăIF minutes% = 1 THEN mintext$ = "minute" ELSE mintext$ = "minutes"ăIF seconds% = 1 THEN sectext$ = "second" ELSE sectext$ = "seconds"ăăIF jpegerror% THEN CLOSE #1ăSELECT CASE jpegerror%ăCASE 0ă PRINT "JPEG file successfully loaded and displayed!"ă PRINT "Total loading time:"; minutes%; mintext$; " and"; seconds%; sectext$; "."ăCASE 1ă PRINT "No SOI marker found. File does not appear to be a valid JFIF image file."ăCASE 2ă PRINT "Invalid APP0 marker. File does not appear to be a valid JFIF image file."ăCASE 3ă PRINT "Unknown marker found. File is probably not a baseline JFIG image file."ăCASE 4ă PRINT "Cannot find DQT, SOF0, DHT or SOS marker. Cannot view JPEG image."ăCASE 5ă PRINT "Invalid DHT marker. File does not appear to be a valid JFIF image file."ăCASE 6ă PRINT "Sorry, but this version only supports grayscale or interleaved color images."ăCASE 7ă PRINT "No EOI marker found. Abnormal termination of image loading."ăEND SELECTăăSUB DecodeBlock (compid%, decodeerror%)ăăSHARED jpeg AS JPEGTypeăSHARED component() AS ComponentTypeăSHARED decodeinfo() AS ScanTypeăSHARED huffval%(), huffsize%(), huffcode&()ăSHARED block&(), dqttable%()ăSHARED olddc%()ăăDIM blockdata&(63)ăDIM idctvalues!(7, 7)ăDIM newbyte AS STRING * 1ăă' Get DC coefficient:ăădecodeerror% = 0ăeob% = 0ăblockofs% = 0ăbitsleft% = 0ădcnumbits% = 0ănumbits% = 0ăbits& = 0ădcbits& = 0ăăDOă   bits& = bits& * 2 + NextBit%ă   numbits% = numbits% + 1ăă   FOR i% = 0 TO 11ă      IF huffsize%(0, decodeinfo(compid%).td, i%) = numbits% AND huffcode&(0, decodeinfo(compid%).td, i%) = bits& THENă       dcnumbits% = huffval%(0, decodeinfo(compid%).td, i%)ă       codefound% = 1ă       EXIT FORă      END IFă   NEXT i%ăLOOP UNTIL codefound% = 1ăăFOR getbits% = 1 TO dcnumbits%ă   dcbits& = dcbits& * 2 + NextBit%ăNEXT getbits%ăăIF NOT dcbits& AND 2 ^ (dcnumbits% - 1) THENă dcbits& = -(2 ^ (dcnumbits%) - 1) + dcbits&ăEND IFăăblockdata&(0) = dcbits&ăblockofs% = 1ăă' Get AC coefficients:ăăDOă   numbits% = 0ă   bits& = 0ă   acbits& = 0ă   codefound% = 0ăă   DOă      bits& = bits& * 2 + NextBit%ă      numbits% = numbits% + 1ăă      FOR i% = 0 TO 191ă         IF huffsize%(1, decodeinfo(compid%).ta, i%) = numbits% AND huffcode&(1, decodeinfo(compid%).ta, i%) = bits& THENă          acrunsize% = huffval%(1, decodeinfo(compid%).ta, i%)ă          codefound% = 1ă          EXIT FORă         END IFă      NEXT i%ă   LOOP UNTIL codefound% = 1ăă   acnumbits% = acrunsize% AND &HFă   zrun% = acrunsize% \ &H10ăă   IF acnumbits% = 0 THENă    IF zrun% = &HF THENă     blockofs% = blockofs% + 16ă    ELSEă     EXIT DOă    END IFă   ELSEă    blockofs% = blockofs% + zrun%ăă    FOR getbits% = 1 TO acnumbits%ă       acbits& = acbits& * 2 + NextBit%ă    NEXT getbits%ăă    IF NOT acbits& AND 2 ^ (acnumbits% - 1) THENă     acbits& = -(2 ^ (acnumbits%) - 1) + acbits&ă    END IFăă    blockdata&(blockofs%) = acbits&ă    blockofs% = blockofs% + 1ă   END IFăLOOP UNTIL blockofs% > 63ăă' Dequantization:ăăFOR dqloop% = 0 TO 63ă      blockdata&(dqloop%) = blockdata&(dqloop%) * dqttable%(component(compid%).tqi, dqloop%)ăNEXT dqloop%ăă' Zig-zag scan:ăăblock&(0, 0) = blockdata&(0)ăblock&(1, 0) = blockdata&(1)ăblock&(0, 1) = blockdata&(2)ăblock&(0, 2) = blockdata&(3)ăblock&(1, 1) = blockdata&(4)ăblock&(2, 0) = blockdata&(5)ăblock&(3, 0) = blockdata&(6)ăblock&(2, 1) = blockdata&(7)ăblock&(1, 2) = blockdata&(8)ăblock&(0, 3) = blockdata&(9)ăblock&(0, 4) = blockdata&(10)ăblock&(1, 3) = blockdata&(11)ăblock&(2, 2) = blockdata&(12)ăblock&(3, 1) = blockdata&(13)ăblock&(4, 0) = blockdata&(14)ăblock&(5, 0) = blockdata&(15)ăblock&(4, 1) = blockdata&(16)ăblock&(3, 2) = blockdata&(17)ăblock&(2, 3) = blockdata&(18)ăblock&(1, 4) = blockdata&(19)ăblock&(0, 5) = blockdata&(20)ăblock&(0, 6) = blockdata&(21)ăblock&(1, 5) = blockdata&(22)ăblock&(2, 4) = blockdata&(23)ăblock&(3, 3) = blockdata&(24)ăblock&(4, 2) = blockdata&(25)ăblock&(5, 1) = blockdata&(26)ăblock&(6, 0) = blockdata&(27)ăblock&(7, 0) = blockdata&(28)ăblock&(6, 1) = blockdata&(29)ăblock&(5, 2) = blockdata&(30)ăblock&(4, 3) = blockdata&(31)ăblock&(3, 4) = blockdata&(32)ăblock&(2, 5) = blockdata&(33)ăblock&(1, 6) = blockdata&(34)ăblock&(0, 7) = blockdata&(35)ăblock&(1, 7) = blockdata&(36)ăblock&(2, 6) = blockdata&(37)ăblock&(3, 5) = blockdata&(38)ăblock&(4, 4) = blockdata&(39)ăblock&(5, 3) = blockdata&(40)ăblock&(6, 2) = blockdata&(41)ăblock&(7, 1) = blockdata&(42)ăblock&(7, 2) = blockdata&(43)ăblock&(6, 3) = blockdata&(44)ăblock&(5, 4) = blockdata&(45)ăblock&(4, 5) = blockdata&(46)ăblock&(3, 6) = blockdata&(47)ăblock&(2, 7) = blockdata&(48)ăblock&(3, 7) = blockdata&(49)ăblock&(4, 6) = blockdata&(50)ăblock&(5, 5) = blockdata&(51)ăblock&(6, 4) = blockdata&(52)ăblock&(7, 3) = blockdata&(53)ăblock&(7, 4) = blockdata&(54)ăblock&(6, 5) = blockdata&(55)ăblock&(5, 6) = blockdata&(56)ăblock&(4, 7) = blockdata&(57)ăblock&(5, 7) = blockdata&(58)ăblock&(6, 6) = blockdata&(59)ăblock&(7, 5) = blockdata&(60)ăblock&(7, 6) = blockdata&(61)ăblock&(6, 7) = blockdata&(62)ăblock&(7, 7) = blockdata&(63)ăă' IDCT:ăăblock&(0, 0) = olddc%(compid%) + block&(0, 0)ăolddc%(compid%) = block&(0, 0)ăăFOR y% = 0 TO 7ă   FOR x% = 0 TO 7ă      idctvalues!(x%, y%) = 0ă      FOR v% = 0 TO 7ă         FOR u% = 0 TO 7ă            IF u% = 0 THEN cu! = 1 / SQR(2) ELSE cu! = 1ă            IF v% = 0 THEN cv! = 1 / SQR(2) ELSE cv! = 1ă            idctvalues!(x%, y%) = idctvalues!(x%, y%) + cu! * cv! * block&(u%, v%) * COS((2 * x% + 1) * u% * 3.14159265358979# / 16) * COS((2 * y% + 1) * v% * 3.14159265358979# / 16)ă         NEXT u%ă      NEXT v%ă      idctvalues!(x%, y%) = (idctvalues!(x%, y%) * .25)ă   NEXT x%ăNEXT y%ăăFOR y% = 0 TO 7ă   FOR x% = 0 TO 7ă      block&(x%, y%) = idctvalues!(x%, y%) + 128ă   NEXT x%ăNEXT y%ăăEND SUBăăSUB DecodeMCU (mcuwidth%, mcuheight%, numcomponents%, decodeerror%)ăăSHARED jpeg AS JPEGTypeăSHARED block&()ăSHARED component() AS ComponentTypeăSHARED mcu%()ăăFOR getcomponents% = 1 TO numcomponents%ă   FOR getyblocks% = 1 TO component(getcomponents%).hă      FOR getxblocks% = 1 TO component(getcomponents%).vă         DecodeBlock getcomponents%, jpegerror%ă         blocky% = 0ă         FOR patchy% = (mcuheight% \ component(getcomponents%).h) * (getyblocks% - 1) TO (mcuheight% \ component(getcomponents%).h) * getyblocks% - 1ă            blockx% = 0ă            FOR patchx% = (mcuwidth% \ component(getcomponents%).v) * (getxblocks% - 1) TO (mcuwidth% \ component(getcomponents%).v) * getxblocks% - 1ă               mcu%(getcomponents%, patchx%, patchy%) = block&(blockx%, blocky%)ă               xerr% = xerr% + 8ă               IF xerr% = mcuwidth% \ component(getcomponents%).v THENă                blockx% = blockx% + 1ă                xerr% = 0ă               END IFă            NEXT patchx%ă            yerr% = yerr% + 8ă            IF yerr% = mcuheight% \ component(getcomponents%).h THENă             blocky% = blocky% + 1ă             yerr% = 0ă            END IFă         NEXT patchy%ă      NEXT getxblocks%ă   NEXT getyblocks%ăNEXT getcomponents%ăăEND SUBăă' This SUB controls the loading of the JPEG image.ă'ăSUB LoadJPEG (filename$, jpegerror%)ăSHARED jpeg AS JPEGTypeăSHARED component() AS ComponentTypeăSHARED block&()ăSHARED mcu%()ăSHARED truepal() AS RGBTypeăSHARED t0!, t1!ăăOPEN filename$ FOR BINARY ACCESS READ AS #1ăăjpeg.filename = UCASE$(filename$)ăăGET #1, , marker%ăIF marker% <> MSOI% THENă jpegerror% = 1ă SEEK #1, SEEK(1) - 2ă EXIT SUBăEND IFăăGET #1, , marker%ăIF marker% <> MAPP0% THENă jpegerror% = 2ă SEEK #1, SEEK(1) - 2ă EXIT SUBăEND IFăăReadAPP0 0, jpegerror%ăămarkersread% = 0ăăDOă   GET #1, , marker%ă   SELECT CASE marker%ă   CASE MAPP0%ă    ReadAPP0 1, jpegerror%ă   CASE MDQT%ă    ReadDQT jpegerror%ă    markersread% = markersread% OR &H1ă   CASE MSOF0%ă    ReadSOF0 jpegerror%ă    markersread% = markersread% OR &H2ă   CASE MDHT%ă    ReadDHT jpegerror%ă    markersread% = markersread% OR &H4ă   CASE MDRI%ă    ReadDRIă   CASE MCOM%ă    ReadCOMă   CASE MSOS%ă    IF markersread% = &H7 THEN markersread% = markersread% OR &H8ă   CASE ELSEă    PRINT HEX$(marker%)ă    jpegerror% = 3ă   END SELECTăLOOP UNTIL jpegerror% OR markersread% = &HFăăIF markersread% <> 15 THENă jpegerror% = 4ă SEEK #1, SEEK(1) - 2ă EXIT SUBăEND IFăăIF jpegerror% = 0 AND markersread% = 15 THENă PRINTă PRINT "Filename:             "; jpeg.filenameă PRINT "Version:              "; HEX$(jpeg.version)ă PRINT "X density:           "; jpeg.xdenă PRINT "Y density:           "; jpeg.ydenă PRINT "X thumbnail:         "; jpeg.xthumbă PRINT "Y thumbnail:         "; jpeg.ythumbă PRINT "Number of DQTs:      "; jpeg.numdqtsă PRINT "Sample precision:    "; jpeg.pă PRINT "Number of columns:   "; jpeg.xă PRINT "Number of rows:      "; jpeg.yă PRINT "Number of components:"; jpeg.nfă PRINT "Restart interval:    "; jpeg.riă PRINTă PRINT "Press any key to view image..."ăă DO: LOOP WHILE INKEY$ = ""ăă FOR getmcusize% = 1 TO 3ă    IF component(getmcusize%).v * 8 > mcuwidth% THEN mcuwidth% = component(getmcusize%).v * 8ă    IF component(getmcusize%).h * 8 > mcuheight% THEN mcuheight% = component(getmcusize%).h * 8ă NEXT getmcusize%ăă ReadSOS soserror%, numcomponents%ăă IF numcomponents% = jpeg.nf THENă  SCREEN 13ăă  IF numcomponents% = 1 THENă   OUT &H3C8, 0ă   FOR setpal% = 0 TO 255ă      OUT &H3C9, setpal% \ 4ă      OUT &H3C9, setpal% \ 4ă      OUT &H3C9, setpal% \ 4ă   NEXT setpal%ă  END IFăă  OUT &H3C7, 0ă  FOR getpal% = 0 TO 255ă     truepal(getpal%).r = INP(&H3C9)ă     truepal(getpal%).g = INP(&H3C9)ă     truepal(getpal%).b = INP(&H3C9)ă  NEXT getpal%ăă  BEEPăă  t0! = TIMERăă  FOR py% = 0 TO jpeg.y - 1 STEP mcuheight%ă     FOR px% = 0 TO jpeg.x - 1 STEP mcuwidth%ă        DecodeMCU mcuwidth%, mcuheight%, numcomponents%, jpegerror%ă        IF jpeg.nf = 3 THEN YCbCr2RGB mcuwidth%, mcuheight%ă        FOR y% = 0 TO mcuheight% - 1ă           FOR x% = 0 TO mcuwidth% - 1ă              pixel% = mcu%(1, x%, y%)ă              IF pixel% < 0 THEN pixel% = 0ă              IF pixel% > 255 THEN pixel% = 255ă              IF px% + x% < jpeg.x AND px% + x% < 320 AND py% + y% < jpeg.y AND py% + y% < 200 THENă               PSET (px% + x%, py% + y%), pixel%ă              END IFă           NEXT x%ă        NEXT y%ă     NEXT px%ă  NEXT py%ăă  t1! = TIMERăă  BEEPăă  GET #1, , marker%ă  IF marker% <> MEOI% THEN jpegerror% = 7ăă  CLOSE #1ăă  BEEPăă  DO: LOOP WHILE INKEY$ = ""ăă  SCREEN 0ă  WIDTH 80, 25ă ELSEă  jpegerror% = 5ă END IFăEND IFăăEND SUBăăFUNCTION NextBit%ăSTATIC bitsleft%, byte AS STRING * 1, byte2 AS STRING * 1ăăIF bitsleft% = 0 THENă GET #1, , byteă bitsleft% = 8ă IF byte = CHR$(&HFF) THENă  GET #1, , byte2ă  IF byte2 <> CHR$(0) THEN GET #1, , byteă END IFăEND IFăăIF ASC(byte) AND (2 ^ (bitsleft% - 1)) THEN bit% = 1ăbitsleft% = bitsleft% - 1ăăNextBit% = bit%ăăEND FUNCTIONăăSUB ReadAPP0 (app0type%, app0error%)ăSHARED jpeg AS JPEGTypeăăapp0error% = 2ăăDIM lengthval AS STRING * 2ăDIM units AS STRING * 1ăDIM density AS STRING * 2ăDIM readthumbs AS STRING * 1ăDIM extcode AS STRING * 1ăăGET #1, , lengthvalălength% = ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1))ăăDIM idstring AS STRING * 5ăGET #1, , idstringăIF idstring = "JFIF" + CHR$(0) THENă IF app0type% <> 0 THEN EXIT SUBăELSEIF idstring = "JFXX" + CHR$(0) THENă IF app0type% <> 1 THEN EXIT SUBăă GET #1, , extcodeăă SELECT CASE ASC(extcode)ă CASE 10ă  app0error% = 0ă  PRINT "Ignoring thumbnail image coded using JPEG."ă  SEEK #1, SEEK(1) + length% - 7ă  EXIT SUBă CASE 11ă  app0error% = 0ă  PRINT "Ignoring thumbnail image coded using 1 byte/pixel."ă  SEEK #1, SEEK(1) + length% - 7ă  EXIT SUBă CASE 12ă  app0error% = 0ă  PRINT "Ignoring thumbnail image coded using 3 bytes/pixel."ă  SEEK #1, SEEK(1) + length% - 7ă  EXIT SUBă CASE ELSEă  EXIT SUBă END SELECTăELSEă app0error% = 0ă PRINT "Ignoring unknown APP0 segment."ă SEEK #1, SEEK(1) + length% - 7ă EXIT SUBăEND IFăăGET #1, , jpeg.versionăăGET #1, , unitsăjpeg.units = ASC(units)ăăGET #1, , densityăjpeg.xden = ASC(LEFT$(density, 1)) * &H100 + ASC(RIGHT$(density, 1))ăGET #1, , densityăjpeg.yden = ASC(LEFT$(density, 1)) * &H100 + ASC(RIGHT$(density, 1))ăăGET #1, , readthumbsăjpeg.xthumb = ASC(readthumbs)ăGET #1, , readthumbsăjpeg.ythumb = ASC(readthumbs)ăăIF jpeg.xthumb * jpeg.ythumb > 0 THEN PRINT "Ignoring 24-bit thumbnail image."ăSEEK #1, SEEK(1) + 3 * jpeg.xthumb * jpeg.ythumbăăapp0error% = 0ăăEND SUBăăSUB ReadCOMăăDIM lengthval AS STRING * 2ăDIM comdata AS STRING * 1ăăGET #1, , lengthvalălength% = (ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1)))ăăPRINT "Commentary marker found. View marker data? (Y/N)"ăPRINTăăDOă   keypress$ = UCASE$(INKEY$)ă   IF keypress$ = "N" THENă    SEEK #1, SEEK(1) + length% - 2ă    EXIT SUBă   END IFăLOOP UNTIL keypress$ = "Y"ăăFOR viewdata% = 1 TO length% - 2ă   GET #1, , comdataă   PRINT comdata;ăNEXT viewdata%ăăPRINTăPRINTăPRINT "Press any key to continue..."ăDO: LOOP WHILE INKEY$ = ""ăăEND SUBăăSUB ReadDHT (dhterror%)ăSHARED jpeg AS JPEGTypeăSHARED huffval%(), huffsize%(), huffcode&()ăădhterror% = 5ăăDIM lengthval AS STRING * 2ăDIM tcth AS STRING * 1ăDIM ncodes AS STRING * 1ăDIM incode AS STRING * 1ăăGET #1, , lengthvalălength% = ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1)) - 2ăăDOă   REDIM bits%(1 TO 16)ăă   GET #1, , tcthă   tableclass% = ASC(tcth) \ &H10ă   tableid% = ASC(tcth) AND &HFăă   vallength% = 0ă   FOR getnumcodes% = 1 TO 16ă      GET #1, , ncodesă      bits%(getnumcodes%) = ASC(ncodes)ă      vallength% = vallength% + ASC(ncodes)ă   NEXT getnumcodes%ăă   valofs% = 0ă   FOR scancodes% = 1 TO 16ă      FOR getcodes% = 1 TO bits%(scancodes%)ă         GET #1, , incodeă         huffval%(tableclass%, tableid%, valofs%) = ASC(incode)ă         valofs% = valofs% + 1ă      NEXT getcodes%ă   NEXT scancodes%ăă   k% = 0ă   j% = 1ă   FOR i% = 1 TO 16ă      WHILE j% <= bits%(i%)ă         huffsize%(tableclass%, tableid%, k%) = i%ă         k% = k% + 1ă         j% = j% + 1ă      WENDă      j% = 1ă   NEXT i%ă   huffsize%(tableclass%, tableid%, k%) = 0ăă   k% = 0ă   code& = 0ă   si% = huffsize%(tableclass%, tableid%, 0)ă   DOă      DOă         huffcode&(tableclass%, tableid%, k%) = code&ă         code& = code& + 1ă         k% = k% + 1ă      LOOP WHILE huffsize%(tableclass%, tableid%, k%) = si%ăă      IF huffsize%(tableclass%, tableid%, k%) = 0 THEN EXIT DOăă      DOă         code& = code& * 2ă         si% = si% + 1ă      LOOP UNTIL huffsize%(tableclass%, tableid%, k%) = si%ă   LOOP WHILE huffsize%(tableclass%, tableid%, k%) = si%ăă   length% = length% - 17 - vallength%ăLOOP UNTIL length% = 0ăădhterror% = 0ăăEND SUBăăSUB ReadDNL (dnlerror%)ăăEND SUBăăSUB ReadDQT (dqterror%)ăSHARED jpeg AS JPEGTypeăSHARED dqttable%()ăădqterror% = 3ăăDIM lengthval AS STRING * 2ăDIM pt AS STRING * 1ăDIM dqtvalue AS STRING * 1ăăGET #1, , lengthvalălength% = ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1)) - 3ăăDOă   GET #1, , ptă   precision% = ASC(pt) \ &H10ă   tableid% = ASC(pt) AND &HFăă   FOR readtable% = 0 TO 63ă      GET #1, , dqtvalueă      dqttable%(tableid%, readtable%) = ASC(dqtvalue)ă   NEXT readtable%ăă   length% = length% - 64ă   jpeg.numdqts = jpeg.numdqts + 1ăLOOP UNTIL length% = 0ăădqterror% = 0ăăEND SUBăăSUB ReadDRIăSHARED jpeg AS JPEGTypeăăDIM ri AS STRING * 2ăăGET #1, , length%ăăGET #1, , riăjpeg.ri = ASC(LEFT$(ri, 1)) * &H100 + ASC(RIGHT$(ri, 1))ăăEND SUBăăSUB ReadSOF0 (sof0error%)ăSHARED jpeg AS JPEGTypeăSHARED component() AS ComponentTypeăăsof0error% = 4ăăDIM lengthval AS STRING * 2ăDIM p AS STRING * 1ăDIM xy AS STRING * 2ăDIM nf AS STRING * 1ăDIM c AS STRING * 1ăăGET #1, , lengthvalălength% = ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1))ăăGET #1, , păjpeg.p = ASC(p)ăăGET #1, , xyăjpeg.y = ASC(LEFT$(xy, 1)) * &H100 + ASC(RIGHT$(xy, 1))ăGET #1, , xyăjpeg.x = ASC(LEFT$(xy, 1)) * &H100 + ASC(RIGHT$(xy, 1))ăăGET #1, , nfăjpeg.nf = ASC(nf)ăăFOR loadcinfo% = 1 TO jpeg.nfă   GET #1, , că   component(loadcinfo%).ci = ASC(c)ă   GET #1, , că   component(loadcinfo%).h = ASC(c) \ &H10ă   component(loadcinfo%).v = ASC(c) AND &HFă   GET #1, , că   component(loadcinfo%).tqi = ASC(c)ăNEXT loadcinfo%ăăsof0error% = 0ăăEND SUBăăSUB ReadSOS (soserror%, numcomponents%)ăSHARED decodeinfo() AS ScanTypeăăsoserror% = 6ăăDIM lengthval AS STRING * 2ăDIM nsvalue AS STRING * 1ăDIM cs AS STRING * 1ăDIM tdta AS STRING * 1ăDIM garbage AS STRING * 3ăăGET #1, , lengthvalălength% = ASC(LEFT$(lengthval, 1)) * &H100 + ASC(RIGHT$(lengthval, 1))ă  ăGET #1, , nsvalueănumcomponents% = ASC(nsvalue)ăăFOR readfield1% = 1 TO numcomponents%ă   GET #1, , csă   decodeinfo(readfield1%).cs = ASC(cs)ă   GET #1, , tdtaă   decodeinfo(readfield1%).td = ASC(tdta) \ &H10ă   decodeinfo(readfield1%).ta = ASC(tdta) AND &HFăNEXT readfield1%ăăGET #1, , garbageăăsoserror% = 0ăăEND SUBăăSUB YCbCr2RGB (mcuwidth%, mcuheight%)ăăSHARED mcu%()ăSHARED truepal() AS RGBTypeăăSTATIC maxpalindex%ăăDIM rgbblock(mcuwidth% - 1, mcuheight% - 1) AS RGBTypeăă' Convert from YCbCr to truecolor RGB:ăăFOR convy% = 0 TO mcuheight% - 1ă   FOR convx% = 0 TO mcuwidth% - 1ă      rgbblock(convx%, convy%).r = mcu%(1, convx%, convy%) + 1.402 * (mcu%(3, convx%, convy%) - 128)ă      rgbblock(convx%, convy%).g = mcu%(1, convx%, convy%) - .34414 * (mcu%(2, convx%, convy%) - 128) - .71414 * (mcu%(3, convx%, convy%) - 128)ă      rgbblock(convx%, convy%).b = mcu%(1, convx%, convy%) + 1.772 * (mcu%(2, convx%, convy%) - 128)ă   NEXT convx%ăNEXT convy%ăă' Find the proper grayscale gradient for each pixel in the MCU:ăăFOR findycol% = 0 TO mcuheight% - 1ă   FOR findxcol% = 0 TO mcuwidth% - 1ă      bestmatch% = 256ă      matchindex% = 0ă      FOR findbestmatch% = 0 TO 255ă         reddiff% = ABS(rgbblock(findxcol%, findycol%).r \ 4 - truepal(findbestmatch%).r)ă         greendiff% = ABS(rgbblock(findxcol%, findycol%).g \ 4 - truepal(findbestmatch%).g)ă         bluediff% = ABS(rgbblock(findxcol%, findycol%).b \ 4 - truepal(findbestmatch%).b)ă         match% = reddiff% + greendiff% + bluediff%ă         IF match% < bestmatch% THENă          matchindex% = findbestmatch%ă          bestmatch% = match%ă         END IFă      NEXT findbestmatch%ă      mcu%(1, findxcol%, findycol%) = matchindex%ă   NEXT findxcol%ăNEXT findycol%ăăEND SUBăKevin Everingham               QB GRAPHICAL FONTS             fortunecity.com/skyscraper/quan07-13-99 (01:33)       QB, PDS                698  31894    FONT.BAS    '       ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»ă'       ş                                                      ş Űă'LETTER ş     QuickBASIC   G R A P H I C A L   F O N T         ş Űă'exampleş            PROFESSIONAL QUALITY LETTERING            ş Űă'       ş                                                      ş Űă'       ş        QuickBASIC PRO QULITY LETTERING VER 2         ş Űă'       ş    Abacus WebDesigns (C)1995-98.  Kevin Everingham   ş Űă'       ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ Űă'          ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßă'                                             Last Edited: 2-15-96ă' Author's NOTE:ă'                 I know this bit of source code is large but much ofă'                 it is example and explination.  To use this program,ă'                 just take the call source you want from below, insertă'                 it into your program and add the DESIGN, TRANSLATE, andă'                 FONT sub that you want to call.  If this is used ină'                 commercial or shareware programs please mention theă'                 author.  Please do not change FONT data at all.ă'ăDEFINT A-Ză' $INCLUDE: 'QB.BI'ăDECLARE SUB background ()ăDECLARE SUB translate ()ăDECLARE SUB FONT1 ()ăDECLARE SUB FONT2 ()ăDECLARE SUB FONT3 (Bold%)ăDECLARE SUB FONT4 (Bold%)ăDECLARE SUB FONT5 ()ăDECLARE SUB FONT6 ()ăDECLARE SUB FONT7 ()ăDECLARE SUB FONT8 ()ăDECLARE SUB Design ()ăDECLARE SUB bLANK (COLR1%)ăCOMMON SHARED Prime$(), Prime$, size$ăCOMMON SHARED C1$, C2$, C3$ăCOMMON SHARED c4$, bgc, angle$ăCOMMON SHARED spacing$, word$ăCOMMON SHARED pft, pflăDIM SHARED Inregs AS RegType, Outregs  AS RegType: C2 = 6ăDIM Prime$(122)ăDIM shape$(122)ăDIM A1(230)ăuser$ = COMMAND$ăwhere$ = "Print to Screen  "ăSCREEN 12: CLSă'*************************************************************ă' below is an example of the CALL section you will need to addă' to your own program.  This is all you need!ă'-------------------------------------------------------------ă  CALL Design: word$ = "VGA Quality Lettering in QuickBASIC"ă  spacing$ = "l0": size$ = "8": angle$ = "0": bgc = 0ă  CALL translateă  C1$ = "C 5": C2$ = "c 4": C3$ = "c 0": c4$ = "C15"ă  pft = 24: pfl = 20: CALL FONT1ă'-------------------------------------------------------------ă' End example source code to put graphical text in your program.ă'*************************************************************ă  word$ = "It looks nice but..."ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 8": C2$ = "c 0": C3$ = "c 0": c4$ = "c15"ă  pft = 45: pfl = 390: CALL FONT5ăCOLOR 15: LOCATE 2, 67: PRINT "?"ăLOCATE 6, 1: PRINT " This will be too slow for my programs! Right?...."ăPRINT " It doesn't have to be,... if you first let all colors but one,"ăPRINT " equal 0 or (black) then draw the letters, then go to another"ăPRINT " sub to reset colors back to normal and flash!,..your letters "ăPRINT " will appear.  While you are drawing the letters, use that one"ăPRINT " color that you didn't change to black, to display a message:"ăPRINT " (Loading....program), You've seen that before right?"ăPRINT "    ----Look up the palette command to change colors.----": PRINTăPRINT " Try some of these in your own programs...Some of these letter"ăPRINT " designs are quite fast and some take longer to load."ăPRINT " You will only need the FONT sub you wish to use, the TRANSLATE sub, "ăPRINT " the DESIGN sub and your main call statements in your own program."ăPRINT : PRINT : PRINT "press any key to see all of these high quality letters"ăPRINT "or, for quicker viewing:     (3) view heading text only (quickest)": PRINTăPRINT "press (1) to see only small fonts, (2) to see only large."ăuse$ = ""ăDO UNTIL use$ = "3"ă	   use$ = INKEY$ă	   IF use$ = "1" THEN EXIT DOă	   IF use$ = "2" THEN EXIT DOă	   IF use$ <> "" THEN EXIT DOăLOOPăuse$ = LTRIM$(use$): use$ = RTRIM$(use$)ăCLS : CALL Designă   a = 7 'backgroundăfontpack:ă CALL bLANK(a)ă IF use$ = "1" THEN GOTO size4ă IF use$ = "2" THEN GOTO size8ă IF use$ = "3" THEN GOTO quickieăsize4:ă  word$ = "Standard Print                     <size 4     size 8>"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C0": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 80: pfl = 50: CALL FONT3(0)ă  word$ = "Standard Print  (Bold)"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C4": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 95: pfl = 50: CALL FONT3(1)ă  word$ = "Standard Print  (xtra bold)"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C0": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 110: pfl = 50: CALL FONT3(2)ă  word$ = "Fancy Small print Font "ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 9": C3$ = "c 1": c4$ = "c 0"ă  pft = 125: pfl = 50: CALL FONT4(0)ă  word$ = "Fancy Small print Font  (Bold) "ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 9": C3$ = "c 1": c4$ = "c 0"ă  pft = 140: pfl = 50: CALL FONT4(1)ă  word$ = "Outline Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 7": C3$ = "c 1": c4$ = "c 7"ă  pft = 160: pfl = 50: CALL FONT5ă  word$ = "Front Stamped Font"ă  spacing$ = "r2": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 7": C3$ = "c 3": c4$ = "c 0"ă  pft = 175: pfl = 50: CALL FONT5ă  word$ = "Reverse Stamp Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 8": C2$ = "c 0": C3$ = "c 0": c4$ = "c15"ă  pft = 190: pfl = 50: CALL FONT5ă  word$ = "Light Color Outline-Stamp Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 5": C3$ = "c 0": c4$ = "c 7"ă  pft = 205: pfl = 50: CALL FONT5ă  word$ = "Full Colored Outline-Stamp Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 3": C3$ = "c 0": c4$ = "c 9"ă  pft = 220: pfl = 50: CALL FONT5ă  word$ = "Bold Statement Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 4": C3$ = "c12": c4$ = "c 5"ă  pft = 235: pfl = 50: CALL FONT6ă  word$ = "(Double) Bold Statement Font"ă  spacing$ = "r2": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c14": C3$ = "c 9": c4$ = "c10"ă  pft = 250: pfl = 50: CALL FONT6ă  pft = 251: pfl = 51: CALL FONT6ă  word$ = "Upright Shadow Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 2": C3$ = "c14": c4$ = "c 2"ă  pft = 270: pfl = 50: CALL FONT7ă  word$ = "Heavy Base Font"ă  spacing$ = "r3": size$ = "4": angle$ = "0": bgc = 4ă  CALL translateă  C1$ = "C 0": C2$ = "c 1": C3$ = "c 1": c4$ = "c 7"ă  pft = 285: pfl = 50: CALL FONT7ă  word$ = "Marquee Feature Font"ă  spacing$ = "r1": size$ = "4": angle$ = "0": bgc = 4ă  CALL translateă  C1$ = "C 0": C2$ = "c 5": C3$ = "c 4": c4$ = "c 4"ă  pft = 300: pfl = 50: CALL FONT8ă  word$ = "Fat 3-D Font"ă  spacing$ = "r3": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 1": C3$ = "c 0": c4$ = "c15"ă  pft = 317: pfl = 50: CALL FONT2ă  word$ = "Glass Tube Font"ă  spacing$ = "r4": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 7": C2$ = "c 8": C3$ = "c 0": c4$ = "c15"ă  pft = 330: pfl = 50: CALL FONT1ă  word$ = "Colored Glass Font"ă  spacing$ = "r2": size$ = "4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C10": C2$ = "c 0": C3$ = "c 0": c4$ = "c15"ă  pft = 345: pfl = 50: CALL FONT1ă  word$ = "Plus Many other combinations!...    "ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C1": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 365: pfl = 50: CALL FONT3(0)ăsize8:ă  IF use$ = "1" THEN GOTO skippedă  word$ = "]]]]]]]]]]]]]]]]]]]"ă  spacing$ = "r1": size$ = "4": angle$ = "1": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 0": C3$ = "C0"ă  pft = 370: pfl = 330: CALL FONT3(0)ă  word$ = "Fancy Print ^"ă  spacing$ = "r1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 7": C2$ = "c 0": C3$ = "c 8"ă  pft = 95: pfl = 350: CALL FONT4(1)ă  word$ = "Outline Type Font"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 2": C2$ = "c 3": C3$ = "c 0": c4$ = "C10"ă  pft = 125: pfl = 350: CALL FONT5ă  word$ = "Stamped Font"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 8": C2$ = "c 0": C3$ = "c 0": c4$ = "C15"ă  pft = 150: pfl = 350: CALL FONT5ă  word$ = "Glass Tube Font"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 7": C2$ = "c 0": C3$ = "c 0": c4$ = "C15"ă  pft = 175: pfl = 350: CALL FONT1ă  word$ = "Plastic Tube Font"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 7ă  CALL translateă  C1$ = "C 5": C2$ = "c 4": C3$ = "c 0": c4$ = "C15"ă  pft = 200: pfl = 350: CALL FONT1ă  word$ = "--Neon-Sign-Font--"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 7ă  CALL translateă  C1$ = "C 0": C2$ = "c 9": C3$ = "c 3": c4$ = "C 0"ă  pft = 225: pfl = 350: CALL FONT1ă  word$ = "Bold Statement"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 4": C3$ = "c12": c4$ = "C 5"ă  pft = 250: pfl = 350: CALL FONT6ă  word$ = "Marquee Feature"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 2": C3$ = "c 9": c4$ = "C10"ă  pft = 275: pfl = 350: CALL FONT8ă  word$ = "Standard Heavy Bold"ă  spacing$ = "l1": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 0": C2$ = "c 1": C3$ = "c 1": c4$ = "C 5"ă  pft = 300: pfl = 350: CALL FONT3(2)ă  word$ = "Wax Letter Font "ă  spacing$ = "r0": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 8": C2$ = "c15": C3$ = "c 0": c4$ = "c14"ă  pft = 330: pfl = 350: CALL FONT5 '0)ă  word$ = "<...>"ă  spacing$ = "r2": size$ = "8": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C 8": C2$ = "c15": C3$ = "c 0": c4$ = "c 9"ă  pft = 365: pfl = 400: CALL FONT2 '0)ăskipped:ă  word$ = "Plus Graphics"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C0": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 390: pfl = 350: CALL FONT3(0)ăquickie:ă  word$ = "    Press"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C0": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 380: pfl = 510: CALL FONT3(0)ă  word$ = "any key to exit"ă  spacing$ = "l1": size$ = " 4": angle$ = "0": bgc = 8ă  CALL translateă  C1$ = "C0": C2$ = "c 6": C3$ = "c 4": c4$ = "c 6"ă  pft = 395: pfl = 515: CALL FONT3(0)ă  word$ = "(c)1995-98 Kevin Everingham"ă  spacing$ = "r3": size$ = "8": angle$ = "0": bgc = 0ă  CALL translateă  C1$ = "C15": C2$ = "c 7": C3$ = "c 0": c4$ = "c 0"ă  pft = 440: pfl = 48: CALL FONT1  '0)ă  word$ = "Some Sample Fonts you could use..."ă  spacing$ = "r1"ă  size$ = "8"ă  angle$ = "0"ă  bgc = 8ă  CALL translateă  C1$ = "C 6": C2$ = "c 0": C3$ = "c 0": c4$ = "c15"ă  pft = 20: pfl = 32: CALL FONT1ăender:ăENDăăSUB backgroundă	   COLOR 0: SCREEN 12, 1: CLSă	   LINE (1, 45)-(640, 420), 4, BFă	   LINE (4, 49)-(636, 416), 6, B: LINE (3, 48)-(637, 417), 0, B: LINE (5, 50)-(635, 415), 0, Bă  word$ = "Michigan Prime Software  Presents:"ă  spacing$ = "r1": size$ = "8": dot$ = "Y": bgc = 1ă  CALL translateă  C1$ = "C 6": C2$ = "c 0": C3$ = "c 0": c4$ = "c14"ă  pft = 25: pfl = 33: CALL FONT1ă  pft = 25: pfl = 31: CALL FONT1ă  pft = 24: pfl = 33: CALL FONT1ă  word$ = "QuickBasic Tools"ă  spacing$ = "r2"ă  size$ = "8"ă  dot$ = "Y"ă  bgc = 0ă  CALL translateă  C1$ = "C 6": C2$ = "c 4": C3$ = "c 0": c4$ = "c15"   ' glass look text!ă  pft = 372: pfl = 342: CALL FONT1ă  pft = 372: pfl = 340: CALL FONT1ăEND SUBăăSUB bLANK (COLR1%)ă	   count% = count% + 1ă	   COLOR 0: SCREEN 12: CLSă	   LINE (1, 45)-(640, 420), COLR1%, BFă	   LINE (4, 49)-(636, 416), 6, B: LINE (3, 48)-(637, 417), 0, B: LINE (5, 50)-(635, 415), 0, BăăEND SUBăăSUB Designă'        (c)1995/98 Abacus WebDesigns (abacus@pathwaynet.com)ă'              Contains the following Keyboard designs.ă'      0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZă'                  (space)       * - . : ! ( ) " =ă'ă'  Graphic shape keys    < = left arrow     [ = a checkerboard/waffleă'                        > = right arrow    ] = empty boxă'                        ^ = a triangleă'ăPrime$(32) = "BR4"ăPrime$(33) = "BR1BD1U1BU2U5BD7BR3"ăPrime$(34) = "BR0BU7D2BR2U2BD7BR3"ăPrime$(39) = "BR2BU7D1G1BD5BR4"ăPrime$(40) = "BR1BD1BU2U4E2G2D4F2BU1BR4"ăPrime$(41) = "BR2BD1BU2U4H2F2D4G2BU1BR5"ăPrime$(42) = "BR2BU2U6D3L2R4BL4BD2E4BL4F4BD3BR4"ăPrime$(45) = "BR1BU3R3L3BD3BR5"ăPrime$(46) = "BD1BR1L1BU1BR4"ăPrime$(48) = "BD1BU1U6E1R2F1D6G1L2H1BR6"ăPrime$(49) = "BD1BR2U7BL1E1D1BD6BR3"ăPrime$(50) = "BR1BU6E1R2F1D2G4D1R4BU1BR3"ăPrime$(51) = "BU6E1R2F1D2G1L2R2F1D2G1L2H1BR7"ăPrime$(52) = "BU3E4D8U4L4R5BD3BR3"ăPrime$(53) = "BR1BU3U4R4L4D4E1R2F1D3G1L2H1BR7"ăPrime$(54) = "BR1BD1BU4U3E1R2F1H1L2G1D6F1R2E1U3H1L2G1BD3BR6"ăPrime$(55) = "BR1BU7R4D3G4D1BU1BR7"ăPrime$(56) = "BR1BU6E1R2F1D2G1L2R2F1D2G1L2H1U2E1H1U2BD6BR7"ăPrime$(57) = "BR1BU4U2E1R2F1D6G1L2H1BU4F1R3BD3BR3"ăPrime$(58) = "BR1U1BU2U1BD4BR3"ăPrime$(60) = "E7D5R10D4L10D5H7BR20"                             '< graphicăPrime$(61) = "BU3R4BD2L4BR7BD1"ăPrime$(62) = "U2R10U5F7G7U5L10U3BR18"                           '> graphicăPrime$(65) = "BD1U7E1R3F1D3L5R5D4BR4BU1"ăPrime$(66) = "BD1U8R4F1D2G1L4R4F1D2G1L4BU1BR9"ăPrime$(67) = "BD1BU1U6E1R3F1BD6G1L3H1F1R3BR4BU1"ăPrime$(68) = "BD1U8R4F1D6G1L4BR9BU1"ăPrime$(69) = "BD1U8R4L4D4R3L3D4R4BU1BR4"ăPrime$(70) = "BD1U8R5L5D4R4L4D4BR8BU1"ăPrime$(71) = "BD1BU1U6E1R3F1BD6G1L3H1F1R3E1U3L2R2D3BR4"ăPrime$(72) = "BD1U8D4R4U4D8BR4BU1"ăPrime$(73) = "BD1BR3U8L1R2L1D8L1R2BR4BU1"ăPrime$(74) = "BD1BU1F1R2E1U7L1R2L1D7BR5"ăPrime$(75) = "BD1BU8D8U4R1E4G4F4BR4BR1"ăPrime$(76) = "BD1BU8D8R4BU1BR4"ăPrime$(77) = "BD1U7E1R2F1D7U7E1R2F1D7BU1BR4"ăPrime$(78) = "BD1U8F7D1U8D8BR4BU1"ăPrime$(79) = "BD1BU1U6E1R3F1BD6G1L3H1BR5U6D6BR4"ăPrime$(80) = "BD1U8R4F1D2G1L4D4BR9BU1"ăPrime$(81) = "BD1BU1U6E1R3F1BD6G1L3H1BR5U6BL3BD5F3BG3BR7BU5"ăPrime$(82) = "BD1U8R4F1D2G1L4R1F4BR4BU1"ăPrime$(83) = "BD1BU5U2E1R3F1BD2BL5F1R3F1D2G1L3H1BR9"ăPrime$(84) = "BR3BD1BU8L4R6L3D8BR6BU1"ăPrime$(85) = "BD1BU1U7D7F1R3E1U7D7BR4"ăPrime$(86) = "BD1BU8D5F2D1U1E2U5D5BR5BD2"ăPrime$(87) = "BD1BU1U7D7F1R2E1U7D7F1R2E1U7D7BD1BR4BU1"ăPrime$(88) = "BD1BU8D1F3E3U1D1G6D1U1E3F3D1BU1BR5"ăPrime$(89) = "BL1BU5U2D2F3E3U2D2G3D3BU1BR7"ăPrime$(90) = "BU7R5D2G5D1R5BR4BU1"ăPrime$(91) = "BU7R2BD8U8R2BD8U8R2BD8U8R2BD8U8R2BD8U8R2D8L12U2BR12L12U2BR12L12U2BR12L12U2BR12L12BR14BD7" '[ăPrime$(93) = "BU5R10D6L10U6BD5BR14"                             '] graphicăPrime$(94) = "E6F6L12BR15"                                      '^ graphicăPrime$(97) = "U2E1R3U1H1L2G1E1R2F1D4G1L2H1F1BR2E1U2D3BR4BU1"ăPrime$(98) = "BD1U8D8R3E1U4H1L2G1D4BR8"ăPrime$(99) = "BR0U4E1R2F1BD4G1L2H1F1R2E1BR4"ăPrime$(100) = "U4E1R2F1H1L2G1D4F1R2E1U7D7D1BU1BR4"ăPrime$(101) = "U4E1R2F1D2L4D2F1R2E1BR4"ăPrime$(102) = "BR1BD1U7E1R2F1H1L2G1D3L1R3BD3BR5"ăPrime$(103) = "U4E1R2F1D4G1L2H1BD3F1R2E1U3BR4"ăPrime$(104) = "BU7D8U5E1R2F1D5BU1BR4"ăPrime$(105) = "BR0BD1U6BU1U1BD7BR4"      ' "BR3BD1U6BU2BD7BR4"ăPrime$(106) = "BR1BD1U6BU2BD7D3G1L2BU4BR8"ăPrime$(107) = "BD1BU8D8U3E3G3F3BU1BR3"ăPrime$(108) = "BR1BD1U8L1R1D8L1R2BR4BU1"ăPrime$(109) = "BD1U6D1E1R1F1D5U5E1R1F1D5BU1BR4"ăPrime$(110) = "BD1U6D1E1R2F1D5U4BD3BR4"ăPrime$(111) = "U4E1R2F1D4G1L2H1BR8"ăPrime$(112) = "U4E1R2F1D4G1L2H1D4U4BR8"ăPrime$(113) = "U4E1R2F1D4G1L2H1BR4D4L1R2L1U4BR5"ăPrime$(114) = "BD1U6D1E1R2F1H1L2G1U1D6BU1BR7"ăPrime$(115) = "BU3U1E1R2F1H1L2G1D1F1R2F1D1G1L2H1BR8"ăPrime$(116) = "BR1BU7D2L2R4L2D5F1R1E1BR4"ăPrime$(117) = "U5D5F1R2E1U5D5BR4"ăPrime$(118) = "BD1BU6D3F2D1U1E2U3D3BD2BR4"ăPrime$(119) = "BD1BU6D5F1R1E1U4D4F1R1E1U5D5BR4"ăPrime$(120) = "BD1BU6D1F2E2U1D1G4D1U1E2F2D1BU1BR4"ăPrime$(121) = "BU5D5F1R2E1U5D8G1L2H1BU3BR8"ăPrime$(122) = "BU5R4D1G4D1R4BU1BR4"ăEND SUBăăSUB FONT1ă'                      Glass Tube Font/Neon Signă' creates letters that appear to be made up of shiney (glassey)ă' colored tubes.ă' in the input line: C1$ = "C6": C2$ = "C0": C3$ = "C0": C4$ = "C15"ă' C1$ is the primary letter color.  C2$ and C3$ are outline colorsă' C4$ would allways be used as "C15" since it is a light highlight spot.ă'ă' For a 3-D glass-look, mix C1$ as a light variation of the primaryă' screen color and C2$ as the screen color. C3$ is 0, C4$ is 15. Theă' C2$ AND C1$ value can be set the same to produce a beautiful font.ă' following line would be used on a red screen:(looks great on any screen)ă' C1$ = "C4": C2$ = "C4": C3$ = "C0": C4$ = "C15"   <also try C1$ as "C12"          ă'ă' For a great glass font look, try the following line with this fontă' on a grey, black or white screen. (looks best on grey) ă' C1$ = "C7": C2$ = "C8": C3$ = "C0": C4$ = "C15"  For a nice blue neonă' light look, replace C2$ with "C9" (best on grey or black screen) Theă' neon effect is taken away with a white screen but it makes a niceă' glass look.               Smallest recommended size for this font (8)ă'ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ăIF c4$ <> "C15" THEN c4$ = "C15"ă	   PSET (pfl + 2, pft + 5), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 0, pft + 5), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 1, pft + 5), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 0, pft + 4), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 1, pft + 2), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 2, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 3), bgc: DRAW c4$ + Prime$ă	   PSET (pfl + 3, pft + 2), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 4, pft + 4), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 5, pft + 2), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 5, pft + 3), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 4, pft + 3), bgc: DRAW C1$ + Prime$ăEND SUBăăSUB FONT2ă'                         Fat 3-D Fontă'in the input line:   C1$ = "C7": C2$ = "C8": C3$ = "C0": c4$ = "C15"ă'C1$ is the primary letter color.  C2$ is a shadow of the main color.ă'C3$ is an outline color "C0" and  C4$ is a shade of the main color.ă' other possible colors you could use: _C1$_____C2$_____C4$_ă'                          mint          2      10       9ă'                          green         2       8      10ă'                          green glow    2      14      10ă'   try these and more!    pastel blue   3       1       9ă'                          pastel blue   9       1       3ă'                          pastel pink  12       6       4ă'                          pink          4       6       5ă'                          pale red      6       4       5ă'This font looks best when used as a white letter. (use input line above)ă'Any font of this complexity is effected by the background screen color.ă'Try this font on a black, white, red or blue screen.ă'Smallest recommended size (8)ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă'ă  PSET (pfl + 0, pft + 5), bgc: DRAW c4$ + Prime$ă  PSET (pfl + 0, pft + 3), bgc: DRAW c4$ + Prime$ă  PSET (pfl + 2, pft + 3), bgc: DRAW C1$ + Prime$ă  PSET (pfl + 1, pft + 2), bgc: DRAW C1$ + Prime$ă  PSET (pfl + 2, pft + 4), bgc: DRAW c4$ + Prime$ă  PSET (pfl + 3, pft + 3), bgc: DRAW C3$ + Prime$ă  PSET (pfl + 3, pft + 2), bgc: DRAW C1$ + Prime$ă  PSET (pfl + 4, pft + 4), bgc: DRAW C1$ + Prime$ă  PSET (pfl + 5, pft + 2), bgc: DRAW C1$ + Prime$ă  PSET (pfl + 5, pft + 3), bgc: DRAW C2$ + Prime$ă  PSET (pfl + 4, pft + 3), bgc: DRAW C1$ + Prime$ăEND SUBăăSUB FONT3 (Bold%)ă'                      Standard print Font.ă'                      bold% = 0, 1 or 2ă'       0 = Normal text     1 = Bold     2 = Xtra-Heavy Boldă' in the feed line:  c1$ = "C0": C2$ = "C4": C3$ = "C5": C4$ = "C15"ă' for this font, the only one that is used is C1$.  That will be theă' color of this basic small font.             ~~~ă' Smallest recommended size (4)  with increments of 4.  4,8,12,16,20 +ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă	  ă	   PSET (pfl + 0, pft + 5), bgc: DRAW C1$ + Prime$ăIF Bold% = 1 THEN PSET (pfl + 1, pft + 5), bgc: DRAW C1$ + Prime$ăIF Bold% = 2 THEN PSET (pfl + 1, pft + 5), bgc: DRAW C1$ + Prime$ăIF Bold% = 2 THEN PSET (pfl + 2, pft + 5), bgc: DRAW C1$ + Prime$ăIF Bold% = 3 THEN PSET (pfl + 1, pft + 6), bgc: DRAW C1$ + Prime$ăEND SUBăăSUB FONT4 (Bold%)ă'                       Fancy Small print Font.ă'                         bold% = 0 or 1ă'                   0 = Normal text     1 = Bold                       ă' in the feed line:  C1$ = "C0": C2$ = "C4": C3$ = "C5": C4$ = "C15"ă' C1$,C2$ and C3$ are used to layer colors.  (If Bold% = 1)  If thisă' font is used without Bold on (bold% = 0) then only C1$ and C2$ areă' used as the mixing colors.ă' Smallest recommended size (4)  with increments of 4.  4,8,12,16,20 +ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă'  ă	   PSET (pfl + 0, pft + 5), bgc: DRAW C1$ + Prime$ăIF Bold% = 0 THEN PSET (pfl + 1, pft + 6), bgc: DRAW C2$ + Prime$ăIF Bold% = 1 THEN PSET (pfl + 0, pft + 6), bgc: DRAW C3$ + Prime$ăIF Bold% = 1 THEN PSET (pfl + 1, pft + 6), bgc: DRAW C1$ + Prime$ăIF Bold% = 1 THEN PSET (pfl + 1, pft + 7), bgc: DRAW C2$ + Prime$ăEND SUBăăSUB FONT5ă'                     Outlined Font/Stamped Font/Wax Font      ă' in the feed line:  C1$ = "C0": C2$ = "C4": C3$ = "C5": C4$ = "C15"ă' C1$,C2$ C3$, and C4$ are all used.  C1$ is the outline color.     ă' C2$ is a highlight color.  C3$ is a shadow color and C4$ is the  ă' primary color of the letter.ă' For the Stamped Font look, use C1$ as a background shade color,ă' C2$ and C3$ are (0) and used to give a 3-D outline/shadow foră' the main letter.  C3$ is the main stamp color. This color shouldă' be a lighter shade of the screen's color.                    ă'        Examples:  primary screen color / lt.shade / Shadowă'                                  __|________(C4$)___(C1$)ă'                                    4 (red)   12       6ă'     use these or try others...     1 (blue)   3       9ă'                                    7 (white) 15       8ă'                                    8 (grey)   7       0ă'                               ÚÄÄÄ 2 (green) 10       3ă'                               orÄÄ 2         14      10ă'      The following line would be used with a white screen.ă'        C1$ = "C8": C2$ = "C0": C3$ = "C0": C4$ = "C15"ă'  This font is designed for use as size 4,8,12 +  increments of 4.ă' For a Wax letter look, try the following input line at size 8...ă' C1$ = "C 8": C2$ = "c15": C3$ = "c 0": c4$ = "c 9"ă'ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă						 ă	   PSET (pfl + 0, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 1, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 1), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 2), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 3), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 1, pft + 1), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 1, pft + 2), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 2, pft + 1), bgc: DRAW c4$ + Prime$ăEND SUBăăSUB FONT6ă'                        Bold Statement Fontă'This font creates a multi-colored letter outlined with a bold black line.ă'A metallic foil colored letter is producedă'In the input line:   C1$ = "C0": C2$ = "C2": C3$ = "C0": C4$ = "C9"ă'C1$ will equal "C0" every time.  This is an outline of black.ă'C2$ is the main letter color         C3$ will blend with C4$  ă'C4$ is the light from top of screen (blended with similar/same color C3$)ăIF C1$ <> "C0" THEN C1$ = "C0"'Try these examples of multi-colored letters:ă'          ____C2$_____C3$_____C4$____ă'               5       1       4 = plumă'              14       2      10 = lime          For use on colored screens,ă'               4      12       5 = purple foil   letters are thinner on aă'               5       6       9 = neon light    black screen.ă'               2       3       9 = teală'The blending done with this font will create new colors.  Standard colorsă'    can only be used if you make C2,C3 and C4$ the same color.ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă	   PSET (pfl + 1, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 4, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 1), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 2), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 3), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 1, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 4, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 3), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 2), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 3), bgc: DRAW c4$ + Prime$ă	   PSET (pfl + 3, pft + 2), bgc: DRAW c4$ + Prime$ă	   PSET (pfl + 2, pft + 2), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 2, pft + 3), bgc: DRAW C2$ + Prime$ăEND SUBăăSUB FONT7ă'                       Heavy Base Font  / upright shadowă' This font is designed for use as size "4" or "8" only (small font)ă' It looks best on colored screens and using dark colors.  For bestă' results try the following line.  C1$ is always equal to "C0".ă' C1$ = "C 0": C2$ = "C1": C3$ = "C6": C4$ = "C9"   SIZE$ (8 or 4)ă' For a nice seperated effect, make C4$ equal to the screen color.ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ă'ăIF C1$ <> "C0" THEN C1$ = "C0"ăIF size$ = "4" THEN PSET (pfl + 0, pft + 3), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 1, pft + 3), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 2, pft + 3), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 3, pft + 3), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 4, pft + 3), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 0, pft + 4), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 1, pft + 4), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 2, pft + 4), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 3, pft + 4), bgc: DRAW C1$ + Prime$ăIF size$ = "4" THEN PSET (pfl + 4, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 1, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 4, pft + 5), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 0, pft + 6), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 1, pft + 6), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 2, pft + 6), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 3, pft + 6), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 4, pft + 6), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 2, pft + 7), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 3, pft + 7), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 4, pft + 7), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 5, pft + 7), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 6, pft + 7), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 7, pft + 8), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 8, pft + 8), bgc: DRAW C1$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 9, pft + 8), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 0, pft + 0), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 0, pft + 1), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 1, pft + 2), bgc: DRAW c4$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 1, pft + 3), bgc: DRAW c4$ + Prime$ăIF size$ = "8" THEN PSET (pfl + 2, pft + 4), bgc: DRAW C3$ + Prime$ăEND SUBăăSUB FONT8ă'                     Marquee Feature Fontă' In this font, C1$ (background shadow) must equal "C8" or "C0".ă' A simple blend of 3 colors makes up these letters.  C2,C3 and C4$ă' can be the same colors or colors that blend well together.  For ană' example, try the following input line:ă' C1$ = "C0": C2$ = "C5": C3$ = "C6": C4$ = "C9"ă'                                             + try C4$ as "C4" or "C5"ă' This font will work from size 4,8,12 + (increments of 4) althoughă' size (4) is very dark. For best results try sizes 8+.  The Marqueeă' Feature Font looks great on colored screens.  It is not for use onă' black screens.  (loses design structure)            ~~~ă'                       (c)1998 Abacus WebDesigns (abacus@pathwaynet.com)ăă	   IF C1$ <> "C0" AND C1$ <> "C8" THEN C1$ = "C0"ă	   PSET (pfl + 0, pft + 0), bgc: DRAW c4$ + Prime$ă	   PSET (pfl + 1, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 4, pft + 0), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 1, pft + 1), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 1), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 2, pft + 2), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 6, pft + 2), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 3, pft + 3), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 7, pft + 3), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 4, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 8, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 5, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 9, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 9, pft + 5), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 10, pft + 4), bgc: DRAW C1$ + Prime$ă	   PSET (pfl + 6, pft + 6), bgc: DRAW C2$ + Prime$ă	   PSET (pfl + 7, pft + 6), bgc: DRAW C3$ + Prime$ă	   PSET (pfl + 8, pft + 6), bgc: DRAW c4$ + Prime$ăEND SUBăăSUB translateă  '           This translates user input in the following manner:ă  'ă  '  "B"  Added to the spacing$ below moves the plot point without drawing.ă  '  "S"  in size$ is the SCALE factor.  This number is divided by four toă  '       derive the scale factor (Basic interpreter does this)  That scaleă  '       factor is then multiplied by the distances given in the directională  '       draw command code.  INPUT may range 1-255  The default is 4.ă  '  "A"  is the angle of the text you wish to print. 0 = normal/defaultă  '       control range codes are ( 1=90ř  2=180ř  3=270ř)  "A + angle$"ă  ' word$ is the user defined text to be translate (0)d.ă  '       the looped line below (FOR-NEXT J) reads the defined text andă  '       scales, draws and adds the appropriate spacing to each letter.ă  '          (c)1995/98 Abacus WebDesigns (abacus@pathwaynet.com)ă  ă  IF angle$ = "" THEN angle$ = "0"ă  IF angle$ <> "1" AND angle$ <> "2" AND angle$ <> "3" THEN angle$ = "0"ă  spacing$ = "B" + UCASE$(spacing$)ă  size$ = "S" + UCASE$(size$)ă  angle$ = "A" + UCASE$(angle$)ă  Prime$ = size$ă	   FOR J = 1 TO LEN(word$)ă		Prime$ = angle$ + (Prime$ + Prime$(ASC(MID$(word$, J, 1))) + spacing$)ă	   NEXT JăEND SUBăMichael Fincham                USING GET/PUT TO SCROLL PAGE   maximike@geocities.com         07-18-99 (12:10)       QB, PDS                41   1716     SCRLLUP.BAS 'This routine will scroll the screen upwards smoothlyă'Its my first submit, so its freeware, just make sure you tell me if you useă'it. And put my name somewhere on wahtever you use it onă'email= maximike@geocities.comă'web= www.geo.to/pokemikeă'by Michael FinchamăSCREEN 7ăREM Must make it dynamic,and load qb with the /ah optionăREM $DYNAMICăDIM temps(0) 'Dim it to zero, to save memory untill its neededăPAINT (1, 1), 1ăPRINT "Well, this demostrates my smooth scroll"ăPRINT "technique. This routine will scroll the"ăPRINT "screen upwards smoothly. Its freeware,"ăPRINT "just make sure you tell me if you use"ăPRINT "it. And put my name somewhere on"ăPRINT "whatever you use it on"ăPRINT "email= maximike@geocities.com"ăPRINT "web= www.geo.to/pokemike"ăPRINT "by Michael Fincham"ăSHELL "pause" ' shell to dos to wait for a key pressăSCREEN , , 1, 0 ' must have visualpage = 1 activepage = 0ăPCOPY 0, 1 'copy the active-visual pagesăREDIM temps(32767) 'redim the array to be HUGE, I dont know the right size,bută'this seems to workăFOR i = 1 TO 200 'start the loopăGET (0, 1)-(318, 198), temps 'get the screenăCLS 'clear it, try remming this line!(WIERD)ăPUT (0, 0), temps 'put it higher upăăPAINT (319, 199), 4, 1'use this paint statement to make the scroll 2 colorăPCOPY 1, 0'display the handiworkăRANDOMIZE TIMER * RND 'make it random, you dont need this unless there is something random in your program.ăNEXT 'cloose the loopăREDIM temps(0) 'make it small + clear the huge memory hogger.ăCLS 'clear offăSCREEN , , 0, 0 'reurn screen to normalăPALETTE 0, 0 '????ă'The End.ă'There is 1 bug I know, you cant have black on the last one pixel, otherwiseă'it messes up a bit.ăMarc Santa                     ROTATING SPIRAL EFFECT         santa@tir.com                  07-25-99 (11:58)       QB, QBasic, PDS        45   1668     WHOA.BAS    colour = 256 ^ 2 '0=red, 1=green, 2=blueăCONST pi = 3.141592653#ăCONST k2 = 31.5 / piăDEF fnatn (z) = (ATN(z) * k2)ăCLS : SCREEN 13: xc = 160: yc = 100ăFOR i = 1 TO 31: PALETTE i, i * colour: NEXTăFOR i = 1 TO 32: PALETTE i + 31, (32 - i) * colour: NEXTăFOR r = 1 TO 200ă  col = col + 64 / r: IF col > 63.5 THEN col = col - 63ă  col1 = 32 + CINT((col - 32))' * r / 160)ă  CIRCLE (160, 100), r, col1: CIRCLE (161, 100), r, col1ăNEXTă'PRINT ATN(TAN(PI / 4!)), PI / 4!ăFOR x = 0 TO 160: FOR y = 0 TO 100ă   IF (x = 0) THEN cc = 15.75 ELSE cc = fnatn(y / x)ă   c1 = POINT(xc + x, yc + y): PSET (xc + x, yc + y), (c1 + cc) MOD 63 + 1ă   IF y THEN c1 = POINT(xc + x, yc - y): PSET (xc + x, yc - y), (c1 + 63 - cc) MOD 63 + 1ă   IF x * y THEN c1 = POINT(xc - x, yc - y): PSET (xc - x, yc - y), (c1 + 31.5 + cc) MOD 63 + 1ă   IF x THEN c1 = POINT(xc - x, yc + y): PSET (xc - x, yc + y), (c1 + 31.5 - cc) MOD 63 + 1ăNEXT y: NEXT xăăda = -1ăDOă  'da = -daă  FOR b = 1 TO 6280ă    da = SIN(b / 1000)ă    fa = fa + da * 3ă    IF fa <= .5 THEN fa = fa + 63ă    IF fa > 63.5 THEN fa = fa - 63ă    a = CINT(fa)ă    FOR i = 1 TO 31ă      IF i + a > 63 THEN PALETTE (i + a) - 63, i * colour ELSE PALETTE (i + a), i * coloură    NEXTă    FOR i = 1 TO 32ă      IF i + a + 31 > 63 THEN PALETTE (i + a) - 32, (32 - i) * colour ELSE PALETTE (i + a + 31), (32 - i) * coloură    NEXTă  NEXTă'  col2 = col2 + 1: IF col2 = 3 THEN col2 = 0ă'  rand = INT(RND * 4)ă'  IF rand = 0 THEN colour = 256 ^ 2 + 256 ^ 2 + col2ă'  IF rand = 1 THEN colour = 257ă'  IF rand = 2 THEN colour = 258ă'  IF rand = 3 THEN colour = 256 ^ 2 + 256ăLOOP WHILE INKEY$ = ""ăăKrusty                         3D TUTORIAL                    santa@tir.com                  07-25-99 (11:59)       QB, QBasic, PDS        384  11134    3DSTUFF.BAS 'Here y'all goă'this is *substansially* commented, and progesses from the veryă'simplest stuff (rotating dots), to the good stuff (acually stillă'fairly easy) such as rotating cubesăă'I noticed a few bugs in the last progs. i sent you:ă'1: i dimmed somthing wrong {i think it was angl()}ă'   it should have been AS SINGLE, not AS INTEGERă'2: I rote "rotating at *t* radians per second" it should haveă'   read "*speed* radians per second"ă'3: I neglected to take into acount screen 9's dodgey x-coords toă'   y-coords ratioăăăă    '-----EXAMPLE 1-----ă    'Screen 9 is dodgeyăSCREEN 9ăPRINT "Example 1"ăPRINT "Screen 9 is dodgey"ăDO: LOOP UNTIL INKEY$ <> "": CLS     'press a keyăăPRINT "100 pixels by 100 pixels square:"ăDO: LOOP UNTIL INKEY$ <> "": CLS     'press a keyăLINE (0, 0)-(100, 100), 15, Bă'should be a square right? it's not though (try it)ăDO: LOOP UNTIL INKEY$ <> "": CLS     'press a keyăăPRINT "100 pixels by 73 pixels square:"ăDO: LOOP UNTIL INKEY$ <> "": CLS     'press a keyăLINE (0, (35 / 48) * 0)-(100, (35 / 48) * 100), 15, Bă'this time we multiply all y-coords by 35/48, to correct the problemăăăă    '-----EXAMPLE 2-----ă    'dot going in an ovalăDO: LOOP UNTIL INKEY$ <> "": CLSăăPRINT "Example 2"ăPRINT "Dot going in an oval"ăDO: LOOP UNTIL INKEY$ <> ""ă'press a keyăCLSăăDIM t  AS SINGLE, y AS INTEGER, x AS INTEGERă't can have decimal places, x and y cannot (speeds things up)ăCONST PI = 3.141596ăCONST speed = .1ă'set up the constantsă ăLINE (100, 0)-(100, (35 / 48) * 200), 8ăCIRCLE (100, (35 / 48) * 100), 100, 8, , , .22ă'draw the axis, and path of the dotăăSCREEN 9ăDOă  DO: LOOP UNTIL TIMER > stoptime: stoptime = TIMER + .025ă  'just a little delay loop-ignore ită ă  t = t + speedă  y = 30 * SIN(t)ă  x = 100 * COS(t)ă  PSET (x + 100, (35 / 48) * (y + 100))ă  'notice that (35/48)*y-coord is used here [refer to last example]ă  'i have added 100 to both y and x, to display it on screenăLOOP UNTIL INKEY$ <> ""ă'the formula y=A*sin(t),x=B*cos(t) gives a circleă'in this case x and y are in the ratio 10:3, givingă'an oval around the midpoint (100,100)ăăăă    '-----EXAMPLE 3-----ă    'applying vid-pagesăCLSăPRINT "Example 3"ăPRINT "Using vid pages"ăPRINT "(to get a smooth movement)"ăDO: LOOP UNTIL INKEY$ <> ""ă'press a keyăCLSăă'I have already DIMed t, x and yăăSCREEN 9, , 0, 1ă'draw on page 0, but view page 1ăăDOă  PCOPY 0, 1ă  'copy what is on page 0 to page 1ă  LINE (0, 0)-(200, 200), 0, BFă  'erase the last image, by drawing a black imageă  'over it.  Strangly this is quicker than CLSă  LINE (100, 0)-(100, (35 / 48) * 200), 8ă  CIRCLE (100, (35 / 48) * 100), 100, 8, , , .22ă  'draw the axis and the dot's path (why not?)ăă  DO: LOOP UNTIL TIMER > stoptime: stoptime = TIMER + .05ă  'just a little delay loop-ignore ităă  t = t + speedă  y = 30 * SIN(t)ă  x = 100 * COS(t)ă  PSET (x + 100, (35 / 48) * (y + 100))ăLOOP UNTIL INKEY$ <> ""ăăăă    '-----EXAMPLE 4-----ă    'doing more dotsăCLSăSCREEN 9, , 0, 0ăPRINT "Example 4"ăPRINT "Doing more dots"ăPRINT "(to create a rotating plane)"ăDO: LOOP UNTIL INKEY$ <> ""ă'press a keyăCLSăă'I have already DIMed tăDIM dots AS INTEGERăDIM x(100) AS INTEGER, y(100) AS INTEGER, angle(100) AS SINGLEă'not much has changed, but now we have up to 100 dotsă'each with different anglesădots = 6ă'say how many dots we actually wantăFOR m = 1 TO 6ă  angle(m) = PI * m / 3ăNEXT mă'give them angles between 0 and 2*PI (360 degrees),ă'and have them uniformly spaced:ă'1/3 PI, 2/3 PI , PI , 4/3 PI , 5/3 PI , 2 PIăăSCREEN 9, , 0, 1ăăDOă  PCOPY 0, 1ă  LINE (0, 0)-(200, 200), 0, BFă  LINE (100, 0)-(100, (35 / 48) * 200), 8ă  CIRCLE (100, (35 / 48) * 100), 100, 8, , , .22ă  'copy the old image, erase the "active" screen (invisible),ă  'draw the axis and draw the dot's path  (...in that order)ăă  DO: LOOP UNTIL TIMER > stoptime: stoptime = TIMER + .05ă  'just a little delay loop-ignore ităă  t = t + speedă  FOR m = 1 TO dotsă    y(m) = 30 * SIN(t + angle(m))ă    x(m) = 100 * COS(t + angle(m))ă    PSET (x(m) + 100, (35 / 48) * (y(m) + 100))ă  NEXT mă  'draw the 6 dotsă  'draw them at differnt angles, by using SIN{t+angle(m)} not SIN{t}ă  'where m is the dot's "reference number" (1,2,3,4,5 or 6)ăăLOOP UNTIL INKEY$ <> ""ăăăă    '-----EXAMPLE 5-----ă    'using elevation and distance from axisăCLSăSCREEN 9, , 0, 0ăPRINT "Example 5"ăPRINT "Using elevation"ăPRINT "(to create a rotating cuboid)"ăDO: LOOP UNTIL INKEY$ <> ""ă'press a keyăCLSăă'I have already DIMed t, x() , y() , angle() and dotsăDIM elev(100) AS INTEGER, dist(100) AS INTEGERă'not much has changed, but now we have differnt heights and distancesă'from the y-axis (vertical) too.ădots = 8ăăFOR m = 1 TO 4ă  angle(m) = PI * m / 2ă  angle(m + 4) = PI * m / 2ă  dist(m) = 100ă  dist(m + 4) = 100ă  elev(m) = 50 * SQR(2)ă  elev(m + 4) = -50 * SQR(2)ăNEXT mă'Set up the variables in such a way as to create a cuboid:ă'(distance of points from the axis of rotation is the same,ă'there are two elevations : 50 and -50,ă'and the points are uniformally spread outăăSCREEN 9, , 0, 1ăăDOă  PCOPY 0, 1ă  LINE (0, 0)-(300, 300), 0, BFă  LINE (100, 0)-(100, (35 / 48) * 300), 8ă  CIRCLE (100, (35 / 48) * (150 - (50 * SQR(2)))), 100, 8, , , .22ă  CIRCLE (100, (35 / 48) * (150 + (50 * SQR(2)))), 100, 8, , , .22ă  'copy the old image, erase the "active" screen (invisible),ă  ',draw the axis and draw the two oval thingsăă  DO: LOOP UNTIL TIMER > stoptime: stoptime = TIMER + .05ă  'just a little delay loop-ignore ităă  t = t + speedă  FOR m = 1 TO dotsă    y(m) = 1 / 3 * dist(m) * SIN(t + angle(m)) + elev(m)ă    x(m) = dist(m) * COS(t + angle(m))ă    PSET (x(m) + 100, (35 / 48) * (y(m) + 150))ă  NEXT mă  'draw the 8 dotsă  'the x/y formula get a little more trickyă  'what has been added since Example 4:ă  '   "  +elev(m)  " to create more than one planeă  '   "  dist(m)*... has replaced 100*...  "ă  '   "  1/3*dist(m)*... has replaced 30*...  "ă  'to take intoă  '   acount the distance from the axis (althogh as it happensă  '   dist(1),dist(2)..dist(8) are all 100 anywayăăLOOP UNTIL INKEY$ <> ""ăăăă    '-----EXAMPLE 6-----ă    '3D linesăCLSăSCREEN 9, , 0, 0ăPRINT "Example 6"ăPRINT "3D rotating lines"ăPRINT "(or join the dots)"ăDO: LOOP UNTIL INKEY$ <> "": CLSă'press a keyăăă'I have already DIMed t,x(),y(),angle(),elev(), dist(100) and dots.ă'Also these variables are already set to that of a cube, soă'i do not need to redo that eitherăDIM join1(100) AS INTEGER, join2(100) AS INTEGER, lines AS INTEGERălines = 12ă'self explanatory reallyăăFOR m = 1 TO 4ă  join1(m) = mă  join2(m) = m + 4ă  join1(m + 4) = mă  join2(m + 4) = m + 1: IF join2(m + 4) = 5 THEN join2(m + 4) = 1ă  join1(m + 8) = m + 4ă  join2(m + 8) = m + 5: IF join2(m + 8) = 9 THEN join2(m + 8) = 5ăNEXT mă'do all the lines:ăă'  join1(m) = mă'  join2(m) = m + 4ă'refer to the 4 horizontal line's -ă'it joins points 1 to 5 , 2 to 6 , 3 to 7 and 4 to 8ăă'  join1(m + 4) = mă'  join2(m + 4) = m + 1: IF join2(m + 4) = 5 THEN join2(m + 4) = 1ă'refers to the bottom 4 lines -ă'it joins points 1 to 2 , 2 to 3 , 3 to 4 and 4 to 1ăă'  join1(m + 8) = m +4ă'  join2(m + 8) = m + 5: IF join2(m + 8) = 9 THEN join2(m + 8) = 5ă'refers to the top 4 lines -ă'it joins points 5 to 6 , 6 to 7 , 7 to 8 and 8 to 5ăăSCREEN 9, , 0, 1ăăDOă  PCOPY 0, 1ă  LINE (0, 0)-(300, 300), 0, BFă  LINE (100, 0)-(100, (35 / 48) * 300), 8ă  CIRCLE (100, (35 / 48) * (150 - (50 * SQR(2)))), 100, 8, , , .22ă  CIRCLE (100, (35 / 48) * (150 + (50 * SQR(2)))), 100, 8, , , .22ă  'view the current image, and erase it ,etc etcăă  t = t + speedă  FOR m = 1 TO dotsă    y(m) = 1 / 3 * dist(m) * SIN(t + angle(m)) + elev(m)ă    x(m) = dist(m) * COS(t + angle(m))ă    y(m) = (35 / 48) * (y(m) + 150)ă    x(m) = x(m) + 100ă    'i have put these two lines here to make a line furtheră    'on easier to read.ă  NEXT mă  FOR m = 1 TO linesă    LINE (x(join1(m)), y(join1(m)))-(x(join2(m)), y(join2(m))), 15ă  NEXT mă  'that last bit is a little harder to explain than the rest,ă  'join1(m) and join2(m) store the "reference numbers" of theă  'two points connected by line mă  'we then draw a line between the point[join1(m)] and the point[join2(m)]ăLOOP UNTIL INKEY$ <> ""ăăăă    '-----EXAMPLE 7-----ă    'One way to only display visible facesăCLSăSCREEN 9, , 0, 0ăPRINT "Example 7"ăPRINT "A way to only display visible faces"ăPRINT "(The end is nigh)"ăDO: LOOP UNTIL INKEY$ <> "": CLSă'press a keyăăă'I have already DIMed and set up everythingăSCREEN 9, , 0, 1ăăDOă  PCOPY 0, 1ă  LINE (0, 0)-(300, 300), 0, BFă  LINE (100, 0)-(100, (35 / 48) * 300), 8ă  CIRCLE (100, (35 / 48) * (150 - (50 * SQR(2)))), 100, 8, , , .22ă  CIRCLE (100, (35 / 48) * (150 + (50 * SQR(2)))), 100, 8, , , .22ă  'all as beforeăă  t = t + speedă  FOR m = 1 TO dotsă    y(m) = 1 / 3 * dist(m) * SIN(t + angle(m)) + elev(m)ă    x(m) = dist(m) * COS(t + angle(m))ă    y(m) = (35 / 48) * (y(m) + 150)ă    x(m) = x(m) + 100ă    'still nothing newă  NEXT mă ă  FOR m = 1 TO 4ă    LINE (x(join1(m + 8)), y(join1(m + 8)))-(x(join2(m + 8)), y(join2(m + 8))), 15ă    'Draw the top faceă   ă    IF y(m) > 144 THEN LINE (x(join1(m)), y(join1(m)))-(x(join2(m)), y(join2(m))), 15ă    'draw the 3 visible vertical linesă   ă    IF y(m) > 178 THENă      mp = m + 5: IF mp > 8 THEN mp = 5ă      mm = m + 3: IF mm < 5 THEN mm = 8ă      LINE (x(join1(m + 4)), y(join1(m + 4)))-(x(join2(m + 4)), y(join2(m + 4))), 15ă      LINE (x(join1(mm)), y(join1(mm)))-(x(join2(mm)), y(join2(mm))), 15ă      'draw the two visible bottom linesă    END IFă ă  NEXT mă  'this method only works for objects that we know about,ă  'such as a pre-programmed cube.ă  'It is not a general algorithm.ă  'All it does is draw the top four lines, and draws the othersă  'if their y value is big enough (and they mustă  'therefore be visible)ă  'more over this method is imperfect-watch the cube closelyăLOOP UNTIL INKEY$ <> ""ăăSCREEN 9, , 0, 0: CLSăPRINT "             That's all folk's"ăPRINT "            Thanks for watching"ăPRINTăPRINTăPRINT "To find out what was going on read the comments"ăPRINT "             within this .BAS file"ăPRINT "To find out about other 3D stuff read the comments"ăPRINT "          at the bottom of this .BAS"ăPRINTăPRINT "                         Maths/Algorithms:       Krusty"ăPRINT "                         Coding:                 Krusty"ăPRINT "                         Graphics:               Krusty"ăPRINT "                         With special thanks to: Krusty, Al"ăPRINT "         (for getting me into all this kewl 3D stuff again)"ăPRINTăPRINT "                    E-Mail Krusty at christie@intonet.co.uk"ăăăă'      -----Final Comments-----ă'ă'As i said earlier, the method i used for showingă'only some faces of the cube was not really good enoughă',as a general solution.ă'To do that you cană'ă'ă'ăăMarc Santa                     3D CONSTRUCTION                santa@tir.com                  07-25-99 (11:59)       QB, QBasic, PDS        279  4525     3DBUILD.BAS SCREEN 13ăH# = 84ăDIM x(1 TO H#)ăDIM y(1 TO H#)ăDIM Z(1 TO H#)ăDIM C(1 TO H#)ăDIM U(1 TO H#)ăDIM V(1 TO H#)ăCLSăFOR I = 1 TO H#ăREAD x(I), y(I), Z(I)ăREAD C(I), U(I), V(I)ăNEXTăDOăă' ROUTINE 1ăf# = 1ăFOR S = 1 TO 220ăFOR I = 1 TO H#ăLINE ((x(I) + S) / Z(I), y(I) / Z(I))-((C(I) + S) / V(I), U(I) / V(I)), 10ăăIF f# = 1 THENăFOR H = 1 TO 100000ăNEXTăEND IFăNEXTăf# = 2ăFOR I = 1 TO 5000ăNEXTăCLSăNEXTăă'ROUTINE 2ăFOR S = 220 TO 1 STEP -1ăFOR I = 1 TO H#ăLINE ((x(I) + S) / Z(I), y(I) / Z(I))-((C(I) + S) / V(I), U(I) / V(I)), 10ăNEXTăFOR I = 1 TO 5000ăNEXTăCLSăNEXTăă'ROUTINE 3ăFOR S = 1 TO 20ăFOR I = 1 TO H#ăLINE (x(I) / Z(I), (y(I) + S) / Z(I))-(C(I) / V(I), (U(I) + S) / V(I)), 10ăNEXTăFOR I = 1 TO 5000ăNEXTăCLSăNEXTăă'ROUTINE 4ăFOR S = 20 TO -200 STEP -1ăFOR I = 1 TO H#ăLINE (x(I) / Z(I), (y(I) + S) / Z(I))-(C(I) / V(I), (U(I) + S) / V(I)), 10ăNEXTăFOR I = 1 TO 5000ăNEXTăCLSăNEXTăENDăLOOPăăă' BOX 1ăDATA 100, 100, 1ăDATA 50, 100, 1ăDATA 50, 100, 1ăDATA 50, 150, 1ăDATA 50, 150, 1ăDATA 100, 150, 1ăDATA 100, 150, 1ăDATA 100, 100, 1ăăDATA 100, 100, 1.2ăDATA 50, 100, 1.2ăDATA 50, 100, 1.2ăDATA 50, 150, 1.2ăDATA 50, 150, 1.2ăDATA 100, 150, 1.2ăDATA 100, 150, 1.2ăDATA 100, 100, 1.2ăă' CONNECTIONS 1ăDATA 100, 100, 1ăDATA 100, 100, 1.2ăDATA 50, 100, 1ăDATA 50, 100, 1.2ăDATA 50, 150, 1ăDATA 50, 150, 1.2ăDATA 100, 150, 1ăDATA 100, 150,1.2ăă'BOX 2ăDATA 100, 100, 1.5ăDATA 50, 100, 1.5ăDATA 50, 100, 1.5ăDATA 50, 150, 1.5ăDATA 50, 150, 1.5ăDATA 100, 150, 1.5ăDATA 100, 150, 1.5ăDATA 100, 100, 1.5ăă'CONNECTIONS 2ăDATA 100, 100, 1.2ăDATA 100, 100, 1.5ăDATA 50, 100, 1.2ăDATA 50, 100, 1.5ăDATA 50, 150, 1.2ăDATA 50, 150, 1.5ăDATA 100, 150, 1.2ăDATA 100, 150, 1.5ăă'BOX 3ăDATA 100, 50, 1ăDATA 50, 50, 1ăDATA 50, 50, 1ăDATA 50, 100, 1ăDATA 50, 100, 1ăDATA 100, 100, 1ăDATA 100, 100, 1ăDATA 100, 50, 1ăăDATA 100, 50, 1.2ăDATA 50, 50, 1.2ăDATA 50, 50, 1.2ăDATA 50, 100, 1.2ăDATA 50, 100, 1.2ăDATA 100, 100, 1.2ăDATA 100, 100, 1.2ăDATA 100, 50, 1.2ăă'CONNECTIONS 3ăDATA 100, 50, 1ăDATA 100, 50, 1.2ăDATA 50, 50, 1ăDATA 50, 50, 1.2ăDATA 50, 100, 1ăDATA 50, 100, 1.2ăDATA 100, 100, 1ăDATA 100, 100, 1.2ăă'BOX 4ăDATA 100, 150, 1ăDATA 50, 150, 1ăDATA 50, 150, 1ăDATA 50, 200, 1ăDATA 50, 200, 1ăDATA 100, 200, 1ăDATA 100, 200, 1ăDATA 100, 150, 1ăă' THE M!ă'DATA 200, 100, 1.5ă'DATA 220, 80, 1.5ă'DATA 220, 80, 1.8ă'DATA 240, 100, 1.8ă'DATA 240, 100, 2ă'DATA 260, 80, 2ă'DATA 260, 80, 1.8ă'DATA 280, 100, 1.5ăăDATA 100, 150, 1.2ăDATA 50, 150, 1.2ăDATA 50, 150, 1.2ăDATA 50, 200, 1.2ăDATA 50, 200, 1.2ăDATA 100, 200, 1.2ăDATA 100, 200, 1.2ăDATA 100, 150, 1.2ăă' CONNECTIONS 4ăDATA 100, 150, 1ăDATA 100, 150, 1.2ăDATA 50, 150, 1ăDATA 50, 150, 1.2ăDATA 50, 200, 1ăDATA 50, 200, 1.2ăDATA 100, 200, 1ăDATA 100, 200,1.2ăă'BOX 5ăDATA 100, 100, 1.8ăDATA 50, 100, 1.8ăDATA 50, 100, 1.8ăDATA 50, 150, 1.8ăDATA 50, 150, 1.8ăDATA 100, 150, 1.8ăDATA 100, 150, 1.8ăDATA 100, 100, 1.8ăă'CONNECTIONS 5ăDATA 100, 100, 1.8ăDATA 100, 100, 1.5ăDATA 50, 100, 1.8ăDATA 50, 100, 1.5ăDATA 50, 150, 1.8ăDATA 50, 150, 1.5ăDATA 100, 150, 1.8ăDATA 100, 150, 1.5ăă'BOX 6ăDATA 100, 150, 1.5ăDATA 50, 150, 1.5ăDATA 50, 150, 1.5ăDATA 50, 200, 1.5ăDATA 50, 200, 1.5ăDATA 100, 200, 1.5ăDATA 100, 200, 1.5ăDATA 100, 150, 1.5ăăDATA 100, 150, 1.8ăDATA 50, 150, 1.8ăDATA 50, 150, 1.8ăDATA 50, 200, 1.8ăDATA 50, 200, 1.8ăDATA 100, 200, 1.8ăDATA 100, 200, 1.8ăDATA 100, 150, 1.8ăă' CONNECTIONS 6ăDATA 100, 150, 1.5ăDATA 100, 150, 1.8ăDATA 50, 150, 1.5ăDATA 50, 150, 1.8ăDATA 50, 200, 1.5ăDATA 50, 200, 1.8ăDATA 100, 200, 1.5ăDATA 100, 200,1.8ăă'BOX 7ăDATA 100, 50, 1.5ăDATA 50, 50, 1.5ăDATA 50, 50, 1.5ăDATA 50, 100, 1.5ăDATA 50, 100, 1.5ăDATA 100, 100, 1.5ăDATA 100, 100, 1.5ăDATA 100, 50, 1.5ăăDATA 100, 50, 1.8ăDATA 50, 50, 1.8ăDATA 50, 50, 1.8ăDATA 50, 100, 1.8ăDATA 50, 100, 1.8ăDATA 100, 100, 1.8ăDATA 100, 100, 1.8ăDATA 100, 50, 1.8ăă'CONNECTIONS 7ăDATA 100, 50, 1.5ăDATA 100, 50, 1.8ăDATA 50, 50, 1.5ăDATA 50, 50, 1.8ăDATA 50, 100, 1.5ăDATA 50, 100, 1.8ăDATA 100, 100, 1.5ăDATA 100, 100, 1.8ăă'BOX 8ăDATA 100, 100, 2ăDATA 50, 100, 2ăDATA 50, 100, 2ăDATA 50, 150, 2ăDATA 50, 150, 2ăDATA 100, 150, 2ăDATA 100, 150, 2ăDATA 100, 100, 2ăă'CONNECTIONS 8ăDATA 100, 100, 2ăDATA 100, 100, 1.8ăDATA 50, 100, 2ăDATA 50, 100, 1.8ăDATA 50, 150, 2ăDATA 50, 150, 1.8ăDATA 100, 150, 2ăDATA 100, 150, 1.8ăMarc Santa                     A SPIN ON 3D                   santa@tir.com                  07-25-99 (11:59)       QB, QBasic, PDS        107  1642     3DSPIN.BAS  SCREEN 7, 0, 1, 0ăCLSăzz# = 0ăGAIN:ă'LOCATE 1, 1ă'PRINT INT(zz# * 100)ăPCOPY 1, 0ăIF A# = 1 THENăFOR C = 300 TO 319ăFOR I = 100 TO 200ăIF POINT(C, I) = 10 THENăFOR W = 1 TO 100ăCIRCLE (C, I), W, 4ăNEXTăPCOPY 1, 0ăGOTO VBALLSăEND IFăNEXTăNEXTăEND IFăCLSăC# = 160ăR# = 100ăz# = 1ăcc# = 0ărr# = 1ăIF A# = 0 THEN zz# = zz# + .0001ăIF A# = 1 THEN zz# = zz# - .01ăDOăcc# = cc# + .01ărr# = rr# - .01ăC# = C# + cc#ăR# = R# + rr#ăz# = z# + zz#ăIF INT(zz# * 100) = 3 THEN LOCATE 2, 1: PRINT "READY..."ăIF INT(zz# * 100) > 3 THEN A# = 1ăIF cc# > 1 THEN GOTO GAINăPSET (C# / z#, R# / z#), 10ăLOOPăăVBALLS:ăDIM X(1 TO 800)ăDIM Y(1 TO 800)ăDIM V(1 TO 800)ăDIM E(1 TO 800)ăFOR C = 320 TO 340ăFOR R = 200 TO 220ăt# = t# + 1ăX(t#) = CăY(t#) = RăNEXTăNEXTăDOăCLSăA# = A# + 1ăIF A# = 100 THEN GOTO VBALL2ăFOR I = 1 TO t#ăRANDOMIZE TIMERăxx# = INT(RND * 7) - 2ăyy# = INT(RND * 7) - 2ăX(I) = X(I) - xx#ăY(I) = Y(I) - yy#ăPSET (X(I), Y(I)), 10ăNEXTăPCOPY 1, 0ăLOOPăăVBALL2:ăp# = 0ăFOR C = 150 TO 170ăFOR R = 90 TO 110ăp# = p# + 1ăV(p#) = CăE(p#) = RăNEXTăNEXTăYO:ăz# = 0ăDOăz# = z# + 1ăIF z# = 150 AND n# = 10 THEN ENDăIF z# = 150 THEN GOTO YAăCLSăFOR I = 1 TO p#ăA = X(I)ăB = Y(I)ăIF X(I) > V(I) THEN X(I) = X(I) - 1ăIF X(I) < V(I) THEN X(I) = X(I) + 1ăIF Y(I) > E(I) THEN Y(I) = Y(I) - 1ăIF Y(I) < E(I) THEN Y(I) = Y(I) + 1ăIF POINT(X(I), Y(I)) = 10 THENăX(I) = AăY(I) = BăEND IFăPSET (X(I), Y(I)), 10ăNEXTăPCOPY 1, 0ăLOOPăYA:ăn# = n# + 1ăFOR I = 1 TO p# - n#ăV(I) = E(I + INT(RND * n#))ăE(I) = E(I + INT(RND * n#))ăNEXTăV(p#) = E(1)ăE(p#) = E(1)ăGOTO YOăAaron Severn                   ROTATING 3D POLYGON ROUTINE    bob_severn@msn.com             07-25-99 (11:59)       QB, QBasic, PDS        249  9446     3DPOLY.BAS  ' 3DPOLY.BASă' by Aaron Severnă' June 18/97ăă' This uses the same 3D routines as the vector ball program, but instead ofă' rotating points it rotates lines which are connected to form an interrestingă' shape.  The idea is simple, each line consists of two points, both pointsă' are rotated and a line in drawn between them.ă' Unlike vector balls, this program is 100% user driven, the object won'tă' move without you.  I've also added the ability to move the center of theă' object which gets interresting results.ăă' I've been trying to figure out how to eliminate the lines of the back ofă' the shape so that it is a solid polygon instead of a transparent one likeă' it is now.  I believe the technique is called plane elimination.  Anyway,ă' so far I haven't gotten it to work, so if anyone knows how could you tellă' me or make the changes and send me the code or whatever.  My e-mail isă' bob_severn@msn.com.  Thanks.ăă' As I mentioned above, there's a little more motion going on in this programă' than in the other one, thus the controls are kind of complicated.  Hereă' they are:ăă' Left and right arrow keys - rotate around y-axisă'    Up and down arrow keys - rotate around x-axisă'                   A and Z - move view point closer/farther awayă'                   X and V - move view point left/rightă'                   D and C - move view point up/downă'                   ; and / - move object's center closer/farther awayă'                   M and . - move object's center left/rightă'                   K and , - move object's center up/downă'                         R - resetă'                       Esc - quităă' The documentation in this program will be much more brief than vector balls.ă' If you want more detail on the formulas, check it out.ăăDEFINT A-ZăăDECLARE SUB setColours (pal() AS ANY, fc, lc)ăăTYPE pnt                                        'type for each 3D pointă    x AS INTEGER                                'x coord (horizontal)ă    y AS INTEGER                                'y coord (vertical)ă    Z AS INTEGER                                'z coord (into the screen)ă    p AS INTEGER                                'dist from center of objectăEND TYPEăăTYPE hues                                       'type for paletteă    red AS INTEGERă    green AS INTEGERă    blue AS INTEGERăEND TYPEăănumLines = 24 - 1ăăDIM origLine(numLines, 1) AS pntăDIM newLine(numLines, 1) AS pntăDIM scrX(numLines, 1)ăDIM scrY(numLines, 1)ăDIM oldX(numLines, 1)ăDIM oldY(numLines, 1)ăDIM sine!(360)ăDIM cosine!(360)ăăCONST PI = 3.14159ăăFOR i = 0 TO 360                                'create sine and cosineă   sine!(i) = SIN(i * (PI / 180))               'look up tables to speed upă   cosine!(i) = COS(i * (PI / 180))             'the mathăNEXTăă' Read two points instead of one.ăFOR i = 0 TO numLinesă   READ origLine(i, 0).x, origLine(i, 0).y, origLine(i, 0).Z, origLine(i, 0).pă   READ origLine(i, 1).x, origLine(i, 1).y, origLine(i, 1).Z, origLine(i, 1).păNEXTăăPRINT "3DPOLY.BAS"ăPRINT "By Aaron Severn"ăPRINT : PRINT : PRINT "Controls"ăPRINT : PRINT "Left and right arrow keys - rotate around y-axis"ăPRINT "Up and down arrow keys - rotate around x-axis"ăPRINT "               A and Z - move view point closer/farther away"ăPRINT "               X and V - move view point left/right"ăPRINT "               D and C - move view point up/down"ăPRINT "               ; and / - move object's center closer/farther away"ăPRINT "               M and . - move object's center left/right"ăPRINT "               K and , - move object's center up/down"ăPRINT "                     R - reset"ăPRINT "                   Esc - quit"ăPRINT : PRINT "Press a key..."ăSLEEPăăSCREEN 13ăCLSăăxCenter = 160: yCenter = 100: zCenter = 250ătheta = 0: phi = 0ăăjustStarted = 1ăDOă  FOR i = 0 TO numLinesă     ' Save the old values of x and y so we can erase the balls later.ă     oldX(i, 0) = scrX(i, 0): oldY(i, 0) = scrY(i, 0)ă     oldX(i, 1) = scrX(i, 1): oldY(i, 1) = scrY(i, 1)ă    ă     ' Rotate both points on each axis.ă     newLine(i, 0).x = -origLine(i, 0).x * sine!(theta) + origLine(i, 0).y * cosine!(theta)ă     newLine(i, 0).y = -origLine(i, 0).x * cosine!(theta) * sine!(phi) - origLine(i, 0).y * sine!(theta) * sine!(phi) - origLine(i, 0).Z * cosine!(phi) + origLine(i, 0).pă     newLine(i, 0).Z = -origLine(i, 0).x * cosine!(theta) * cosine!(phi) - origLine(i, 0).y * sine!(theta) * cosine!(phi) + origLine(i, 0).Z * sine!(phi)ăă     newLine(i, 1).x = -origLine(i, 1).x * sine!(theta) + origLine(i, 1).y * cosine!(theta)ă     newLine(i, 1).y = -origLine(i, 1).x * cosine!(theta) * sine!(phi) - origLine(i, 1).y * sine!(theta) * sine!(phi) - origLine(i, 1).Z * cosine!(phi) + origLine(i, 1).pă     newLine(i, 1).Z = -origLine(i, 1).x * cosine!(theta) * cosine!(phi) - origLine(i, 1).y * sine!(theta) * cosine!(phi) + origLine(i, 1).Z * sine!(phi)ăă     ' Translate both points from 3D to 2D.ă     IF (newLine(i, 0).Z + zCenter) <> 0 THENă       scrX(i, 0) = 256 * (newLine(i, 0).x / (newLine(i, 0).Z + zCenter)) + xCenteră       scrY(i, 0) = 256 * (newLine(i, 0).y / (newLine(i, 0).Z + zCenter)) + yCenteră     END IFăă     IF (newLine(i, 1).Z + zCenter) <> 0 THENă       scrX(i, 1) = 256 * (newLine(i, 1).x / (newLine(i, 1).Z + zCenter)) + xCenteră       scrY(i, 1) = 256 * (newLine(i, 1).y / (newLine(i, 1).Z + zCenter)) + yCenteră     END IFă  NEXT iăă  ' Erase the old lines.ă  WAIT &H3DA, 8ă  IF justStarted = 0 THENă    FOR i = 0 TO numLinesă       LINE (oldX(i, 0), oldY(i, 0))-(oldX(i, 1), oldY(i, 1)), 0ă    NEXT iă  END IFăă  ' Draw the new lines.  Note: no clipping yet.ă  FOR i = 0 TO numLinesă     LINE (scrX(i, 0), scrY(i, 0))-(scrX(i, 1), scrY(i, 1)), 11ă  NEXT iă ă  justStarted = 0ă  A$ = INKEY$ă  A$ = UCASE$(A$)ă  SELECT CASE A$ă         CASE "A"ă             zCenter = zCenter - 2ă         CASE "Z"ă             zCenter = zCenter + 2ă         CASE "X"ă             xCenter = xCenter + 2ă         CASE "V"ă             xCenter = xCenter - 2ă         CASE "C"ă             yCenter = yCenter - 2ă         CASE "D"ă             yCenter = yCenter + 2ă         CASE "K"ă             FOR i = 0 TO numLinesă                origLine(i, 0).Z = origLine(i, 0).Z + 2ă                origLine(i, 1).Z = origLine(i, 1).Z + 2ă             NEXTă         CASE ","ă             FOR i = 0 TO numLinesă                origLine(i, 0).Z = origLine(i, 0).Z - 2ă                origLine(i, 1).Z = origLine(i, 1).Z - 2ă             NEXTă         CASE ";"ă             FOR i = 0 TO numLinesă                origLine(i, 0).x = origLine(i, 0).x + 2ă                origLine(i, 1).x = origLine(i, 1).x + 2ă             NEXTă         CASE "/"ă             FOR i = 0 TO numLinesă                origLine(i, 0).x = origLine(i, 0).x - 2ă                origLine(i, 1).x = origLine(i, 1).x - 2ă             NEXTă         CASE "."ă             FOR i = 0 TO numLinesă                origLine(i, 0).y = origLine(i, 0).y + 2ă                origLine(i, 1).y = origLine(i, 1).y + 2ă             NEXTă         CASE "M"ă             FOR i = 0 TO numLinesă                origLine(i, 0).y = origLine(i, 0).y - 2ă                origLine(i, 1).y = origLine(i, 1).y - 2ă             NEXTă         CASE CHR$(0) + CHR$(75)ă             theta = theta - 5ă             IF theta < 0 THEN theta = theta + 360ă         CASE CHR$(0) + CHR$(77)ă             theta = (theta + 5) MOD 360ă         CASE CHR$(0) + CHR$(72)ă             phi = (phi + 5) MOD 360ă         CASE CHR$(0) + CHR$(80)ă             phi = phi - 5ă             IF phi < 0 THEN phi = phi + 360ă         CASE "R"ă             RESTOREă             FOR i = 0 TO numLinesă                READ origLine(i, 0).x, origLine(i, 0).y, origLine(i, 0).Z, origLine(i, 0).pă                READ origLine(i, 1).x, origLine(i, 1).y, origLine(i, 1).Z, origLine(i, 1).pă             NEXTă             xCenter = 160: yCenter = 100: zCenter = 250ă             theta = 0: phi = 0ă             justStarted = 1ă             CLSă         CASE CHR$(27)ă             SYSTEMă  END SELECTă  DO: A$ = INKEY$: LOOP UNTIL A$ = ""ăLOOP UNTIL A$ = CHR$(27)ăă' Lines are stored in format (X1,Y1,Z1,p1)-(X2,Y2,Z2,p2)ăDATA -20,20,20,1,-60,0,0,1ăDATA -20,-20,20,1,-60,0,0,1ăDATA -20,20,-20,1,-60,0,0,1ăDATA -20,-20,-20,1,-60,0,0,1ăDATA 20,20,20,1,60,0,0,1ăDATA 20,-20,20,1,60,0,0,1ăDATA 20,20,-20,1,60,0,0,1ăDATA 20,-20,-20,1,60,0,0,1ăDATA 20,-20,20,1,0,-60,0,1ăDATA -20,-20,20,1,0,-60,0,1ăDATA 20,-20,-20,1,0,-60,0,1ăDATA -20,-20,-20,1,0,-60,0,1ăDATA 20,20,20,1,0,60,0,1ăDATA -20,20,20,1,0,60,0,1ăDATA 20,20,-20,1,0,60,0,1ăDATA -20,20,-20,1,0,60,0,1ăDATA 20,20,-20,1,0,0,-60,1ăDATA -20,20,-20,1,0,0,-60,1ăDATA 20,-20,-20,1,0,0,-60,1ăDATA -20,-20,-20,1,0,0,-60,1ăDATA 20,20,20,1,0,0,60,1ăDATA -20,20,20,1,0,0,60,1ăDATA 20,-20,20,1,0,0,60,1ăDATA -20,-20,20,1,0,0,60,1ăăSUB setColours (pal() AS hues, fc, lc)ăăOUT &H3C8, fc                                   'tell controller to get readyăFOR t = fc TO lc                                'from first to lastă   OUT &H3C9, pal(t).red                        'send red componentă   OUT &H3C9, pal(t).green                      'send green componentă   OUT &H3C9, pal(t).blue                       'send blue componentăNEXT tăăEND SUBăMarc Santa                     SCREEN STATIC/WOBBLE EFFECT    santa@tir.com                  07-25-99 (12:02)       QB, QBasic, PDS        57   1082     WOB.BAS     SCREEN 13ăFOR I = 1 TO 200ăFOR C = 1 TO 320ăPSET (C, I), RND * 200ăNEXTăNEXTăPRINT "MARC SANTA MADE THIS!"ăSLEEP 2ăDOăDIM wib AS INTEGERăDIM m(1 TO 1000) AS INTEGERăa = RND * 50ăf = RND * 50 + 1ăneg = RNDăIF RND < .5 THENă  FOR x = 0 TO 319ă    wib = a * SIN(x / f)ă    IF wib > 0 THENă      GET (x, 0)-(x, 199 - wib), mă      PUT (x, wib), m, PSETă      LINE (x, 0)-(x, wib - 1), 0ă     ELSEIF wib < 0 THENă      GET (x, -wib)-(x, 199), mă      PUT (x, 0), m, PSETă      LINE (x, 200 + wib)-(x, 199), 0ă    END IFă    ă   NEXTă  ELSEă   FOR y = 0 TO 199ă    wib = a * SIN(y / f)ă    IF wib > 0 THENă      GET (0, y)-(319 - wib, y), mă      PUT (wib, y), m, PSETă      LINE (0, y)-(wib - 1, y), 0ă     ELSEIF wib < 0 THENă      GET (-wib, y)-(319, y), mă      PUT (0, y), m, PSETă      LINE (320 + wib, y)-(319, y), 0ă    END IFă   ă   NEXTă          ăDIM count AS INTEGERăIF RND < .5 THENă  FOR count = 1 TO 120ă   PALETTE count, 0ă  NEXTă ELSEă  FOR count = 120 TO 1 STEP -1ă   PALETTE count, 0ă  NEXTăEND IFăăăEND IFăLOOPăAndries Mooij                  3D LANDSCAPE W/MOVING VIEWPOINTsanta@tir.com                  07-25-99 (12:02)       QB, QBasic, PDS        302  7738     HILL.BAS    DEFINT A-ZăTYPE Vectoră    X AS INTEGERă    Y AS INTEGERă    Z AS INTEGERă    XW AS INTEGERă    YW AS INTEGERă    ZW AS INTEGERă    XV AS INTEGERă    YV AS INTEGERă    OX AS INTEGERă    OY AS INTEGERăEND TYPEăTYPE SimpleVectoră    X AS INTEGERă    Y AS INTEGERă    Z AS INTEGERăEND TYPEăTYPE LineTypeă    P1 AS INTEGERă    P2 AS INTEGERăEND TYPEăTYPE Colorsă    R AS INTEGERă    G AS INTEGERă    B AS INTEGERăEND TYPEăRANDOMIZE TIMERăDots = 400: SQRD = INT(SQR(Dots)): div! = 2ăDIM Object(Dots) AS VectorăDIM Lines(Dots) AS LineTypeăDIM Sine(450) AS LONGăDIM CameraAdds(2000) AS SimpleVectorăDIM Pal(256) AS Colors, Order(Dots), ZC(Dots)ăFOR I = 0 TO Dots - 1ă   IF (I + 1) \ SQRD = (I + 1) / SQRD THEN Tg = -1ă   IF NOT Tg THENă     Lines(I).P1 = I + 1ă   ELSEă     Lines(I).P1 = Iă     Tg = NOT Tgă     Tg2 = NOT Tg2ă   END IFă   IF I <= Dots - 1 - SQRD THEN Lines(I).P2 = I + SQRD ELSE Lines(I).P2 = IăNEXTă'256/Dots *2ădiv! = 3ăRad! = 5.72958 / div!ăFOR X = 0 TO SQRD - 1ă   FOR Z = 0 TO SQRD - 1ă      I = X * SQRD + Ză      Object(I).X = X * 4 * div!ă      Object(I).Y = 30 * (SIN(X / Rad!) + SIN(Z / Rad!))ă      Object(I).Z = Z * 4 * div!ă   NEXTăNEXTăFOR I = 0 TO Dots - 1ă   X& = X& + Object(I).Xă   Y& = Y& + Object(I).Yă   Z& = Z& + Object(I).ZăNEXTăX& = X& \ Dots: Y& = Y& \ Dots: Z& = Z& \ DotsăFOR I = 0 TO Dots - 1ă   Object(I).X = Object(I).X - X&ă   Object(I).Y = Object(I).Y - Y&ă   Object(I).Z = Object(I).Z - Z&ă   Object(I).YW = Object(I).YăNEXTăI = 0ăFOR I! = 0 TO 449 / 57.2958 STEP 1 / 57.2958ă   Sine(I) = SIN(I!) * 1024: I = I + 1ăNEXTăEyeX = 0ăEyeY = 0ăEyeZ = 400ăSCREEN 13ăFOR I = 0 TO 31ă   Pal(I).B = I * 2ăNEXTăFOR I = 0 TO 31ă   Pal(I + 32).R = I * 2ă   Pal(I + 32).G = I * 2ă   Pal(I + 32).B = 63 - (I * 2)ăNEXTăFOR I = 0 TO 31ă   Pal(I + 64).R = 63 - (I * 2)ă   Pal(I + 64).G = 63ăNEXTăFOR I = 0 TO 31ă   Pal(I + 96).R = I * 1.354839ă   Pal(I + 96).G = 63 - I / 1.47619ăNEXTăFOR I = 0 TO 31ă   R = 42 + I * 1.3125ă   G = 42 + I * 1.3125ă   B = I * 4ă   IF R > 63 THEN R = 63ă   IF G > 63 THEN G = 63ă   IF B > 63 THEN B = 63ă   Pal(I + 128).R = Ră   Pal(I + 128).G = Gă   Pal(I + 128).B = BăNEXTăFOR ix = 0 TO 63ă   OUT &H3C8, 0ă   FOR I = 0 TO 255ă      OUT &H3C9, ixă      OUT &H3C9, ixă      OUT &H3C9, ixă   NEXTăNEXTăA3 = 0ăGOSUB SetupCameraMovementăGotoNormal = -1ăFrame& = 0ăRE:ăxc! = TIMERăDOă   IF GotoNormal THENă     OUT &H3C8, 0ă     FOR I = 0 TO 255ă        R = ix + Pal(I).Ră        G = ix + Pal(I).Gă        B = ix + Pal(I).Bă        IF R > 63 THEN R = 63ă        IF G > 63 THEN G = 63ă        IF B > 63 THEN B = 63ă        OUT &H3C9, Ră        OUT &H3C9, Gă        OUT &H3C9, Bă     NEXTă     ix = ix - 1ă     IF ix < 0 THEN GotoNormal = NOT GotoNormală   END IFă   IF GotoWhite THENă     OUT &H3C8, 0ă     FOR I = 0 TO 255ă        R = Pal(I).R + ixă        G = Pal(I).G + ixă        B = Pal(I).B + ixă        IF R > 63 THEN R = 63ă        IF G > 63 THEN G = 63ă        IF B > 63 THEN B = 63ă        OUT &H3C9, Ră        OUT &H3C9, Gă        OUT &H3C9, Bă     NEXTă     ix = ix + 1ă     IF ix >= 64 THEN GOTO StopItă   END IFă   EyeX = EyeX + CameraAdds(CurFrame).Xă   EyeY = EyeY + CameraAdds(CurFrame).Yă   EyeZ = EyeZ + CameraAdds(CurFrame).Ză   CurFrame = (CurFrame + 1) MOD 2001ă   IF CurFrame < 1001 THENă     a1 = (a1 + 1) MOD 360ă   ELSEă     a1 = a1 - 1ă     IF a1 < 0 THEN a1 = a1 + 360ă   END IFă   s1& = Sine(a1): c1& = Sine(a1 + 90)ă   FOR I = 0 TO Dots - 1ă      XO = Object(I).X: YO = Object(I).Y: ZO = Object(I).Ză      Object(I).XW = (XO * c1& - ZO * s1&) \ 1024ă      Object(I).ZW = (XO * s1& + ZO * c1&) \ 1024ă      Object(I).OX = Object(I).XVă      Object(I).OY = Object(I).YVă      z4 = Object(I).ZW - EyeZă      IF z4 <> 0 THENă        X! = (Object(I).XW - EyeX) / z4ă        Y! = (Object(I).YW - EyeY) / z4ă        IF X! > -90 AND X! < 90 THEN Object(I).XV = X! * 320 + 160ă        IF Y! > -90 AND Y! < 90 THEN Object(I).YV = Y! * 200 + 100ă      END IFă   NEXTă   FOR I = 0 TO Dots - 1ă      P1 = Lines(I).P1: P2 = Lines(I).P2: P3 = Iă      Order(I) = I: ZC(I) = Object(P1).ZW + Object(P2).ZW + Object(P3).ZWă   NEXTă   ă   Dotz = Dots - 1ă   Mid = (Dotz + 1) \ 2ă   DOă      FOR a = 0 TO Dotz - Midă         CompareLow = aă         CompareHigh = a + Midă         DO WHILE ZC(Order(CompareLow)) > ZC(Order(CompareHigh))ă           SWAP Order(CompareLow), Order(CompareHigh)ă           CompareHigh = CompareLowă           CompareLow = CompareLow - Midă           IF CompareLow < 0 THEN EXIT DOă         LOOPă      NEXTă      Mid = Mid \ 2ă   LOOP WHILE Mid > 0ă   ă   FOR I = 0 TO Dots - 2ă      It = Order(I)ă      P1 = Lines(It).P1: P2 = Lines(It).P2: P3 = Ită      x1 = Object(P1).OX: x2 = Object(P2).OX: x3 = Object(P3).OXă      y1 = Object(P1).OY: y2 = Object(P2).OY: y3 = Object(P3).OYă      dp1 = x1 < 0 OR x1 > 319 AND y1 < 0 OR y1 > 319ă      dp2 = x2 < 0 OR x2 > 319 AND y2 < 0 OR y2 > 319ă      dp3 = x3 < 0 OR x3 > 319 AND y3 < 0 OR y3 > 319ă      IF NOT dp1 OR NOT dp3 THEN LINE (x3, y3)-(x1, y1), 0ă      IF NOT dp2 OR NOT dp3 THEN LINE (x3, y3)-(x2, y2), 0ă      IF Object(P1).ZW < EyeZ AND Object(P2).ZW < EyeZ AND Object(P3).ZW < EyeZ THENă        x1 = Object(P1).XV: x2 = Object(P2).XV: x3 = Object(P3).XVă        y1 = Object(P1).YV: y2 = Object(P2).YV: y3 = Object(P3).YVă        c = ((Object(P3).YW + 72) * 14) \ 10ă        IF c > 143 THEN c = 143ă        LINE (x3, y3)-(x1, y1), că        LINE (x3, y3)-(x2, y2), că      END IFă   NEXTă   I$ = INKEY$ă   IF GotoWhite OR GotoNormal THEN I$ = ""ăLOOP WHILE I$ = ""ăGotoWhite = -1: ix = 1ăGOTO REăStopIt:ăFOR ix = 63 TO 0 STEP -1ă   OUT &H3C8, 0ă   FOR I = 0 TO 255ă      OUT &H3C9, ixă      OUT &H3C9, ixă      OUT &H3C9, ixă   NEXTăNEXTăSCREEN 0: WIDTH 80ăPRINT "Hill by Illegal Opcode [aka Andries Mooij] (C) 1998"ăPRINT "A simple example of 3d landscapes and a moving viewpoint"ăPRINT "Want to see more cool stuff ? Visit my homepage"ăPRINT "www.geocities.com/SiliconValley/Orchard/5183"ăENDăăSetupCameraMovement:ăFOR I = 0 TO 80ă   CameraAdds(I).Z = -2ăNEXTăFOR I = 81 TO 140ă   CameraAdds(I).Z = -4ă   IF I < 95 THEN CameraAdds(I).X = -2ă   IF I >= 95 AND I < 110 THEN CameraAdds(I).X = -1ă   IF I >= 110 THEN CameraAdds(I).X = 1ăNEXTăFOR I = 141 TO 182ă   IF I <= 152 THEN CameraAdds(I).X = 1ă   CameraAdds(I).Z = 1ăNEXTăFOR I = 265 TO 330ă   CameraAdds(I).Z = -3ă   IF I < 301 THEN CameraAdds(I).X = 1ă   IF I >= 300 THEN CameraAdds(I).Y = 1ăNEXTăCameraAdds(330).X = 250ăCameraAdds(330).Z = 400ăFOR I = 331 TO 480ă   CameraAdds(I).X = -2ăNEXTăFOR I = 481 TO 600ă   CameraAdds(I).Y = 1ă   IF I > 540 THEN CameraAdds(I).Z = 2ă   IF I < 499 THEN CameraAdds(I).X = 1ăNEXTăFOR I = 601 TO 676ă   CameraAdds(I).Y = -2ă   CameraAdds(I).Z = 2ăNEXTăFOR I = 678 TO 760ă   IF I <= 759 THEN CameraAdds(I).Z = -6ă   IF I >= 730 AND I <= 750 THEN CameraAdds(I).X = -2ă   IF I >= 753 THEN CameraAdds(I).X = 5ăNEXTăFOR I = 761 TO 800ă   CameraAdds(I).Y = -1ăNEXTăFOR I = 800 TO 1000ă   IF I < 862 THEN CameraAdds(I).Y = 1ă   IF I > 861 THEN CameraAdds(I).Z = -4ăNEXTăCameraAdds(1000).X = -282ăCameraAdds(1000).Z = 827ăCameraAdds(1000).Y = 32ăFOR I = 1001 TO 1140ă   CameraAdds(I).X = 2ă   IF I < 1028 THEN CameraAdds(I).Y = -2ăNEXTăFOR I = 1141 TO 1500ă   CameraAdds(I).Y = COS((I - 1141) / 5.72958) * 10ăNEXTăFOR I = 1501 TO 1680ă   CameraAdds(I).X = COS((I - 1501) / 5.72958) * 10ăNEXTăFOR I = 1681 TO 1880ă   CameraAdds(I).Z = 1ăNEXTăFOR I = 1881 TO 1980ă   CameraAdds(I).Z = -1ăNEXTăRETURNă'-12,-2ăTheos                          SNOW DEMO                      santa@tir.com                  07-25-99 (12:02)       QB, QBasic, PDS        128  3253     SNOW.BAS    ' Created By Theos.ă' COPYRIGHT (C) 1998 Lab-Xă' Command String Functions....ă'********************** Hires/LowRes Screen modes *************************ăDEFINT A-WăIF COMMAND$ = "/HIRES" THENă  ScrMode% = 12ă  ScrX% = 640ă  ScrY% = 480ă  JJSym% = 76ă  JJSymX% = 16ă  JJSymy% = 15ă  SnowSpd% = 5ă  SnowCol% = 15ă  Snow = 200ă  JJStr$ = "Created By Theos §o§ Theos.deotech@telusplanet.net"ă ELSEă  ScrMode% = 13ă  ScrX% = 320ă  ScrY% = 200ă  JJSymX% = 13ă  JJSymy% = 7ă  SnowSpd% = 5ă  CFlag = 1ă  TCol! = 1ă  Snow = 200ăEND IFă'********************Palette Config******************************************ă'{}{}{}{Set's Screen Mode/Default Palette}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}ăSCREEN ScrMode%ă'{}{}{}{Set's the Snow Color}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}ăOUT &H3C7, 0ă  OUT &H3C9, 255ă  OUT &H3C9, 255ă  OUT &H3C9, 255ă'{}{}{}{Set's the Text Color \HIRES ONLY}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}ăOUT &H3C7, 1ă  OUT &H3C9, 0ă  OUT &H3C9, 0ă  OUT &H3C9, 255ăăRANDOMIZE TIMERăăComments = 20ăCurStr = 1ăDIM Y(Snow)ăDIM x(Snow)ăDIM JJStr$(Comments)ăJJStr$(0) = "§o§      Snow Demo Created By Theos        §o§"ăJJStr$(1) = "§o§    Snow Demo      §o§     "ăJJStr$(2) = "Created By THEOS    §o§       "ăJJStr$(3) = "Well we have it outside...    "ăJJStr$(4) = "Why not have it inside too... "ăJJStr$(5) = "ĆËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËµ "ăJJStr$(6) = "  COPYRIGHT (C) 1998 Lab-X    "ăJJStr$(7) = "   willard@telusplanet.net    "ăJJStr$(8) = "Program Version 1.2           "ăJJStr$(9) = "SnowAI Version 0.20           "ăJJStr$(10) = "Virtual Layering Version 0.6 "ăJJStr$(11) = "Watch for New Version.....   "ăJJStr$(12) = "Snow is Kewl...              "ăJJStr$(13) = "ĆËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËĘËµ"ăJJStr$(14) = "Ahhh it's Cold Outside...    "ăJJStr$(15) = "yea right....                "ăJJStr$(16) = "Where is my Comb...          "ăJJStr$(17) = "It's GONE !!! ahhhh...       "ăJJStr$(18) = "Perhaps i should calm down   "ăJJStr$(19) = "Or Perhaps not...hahahaha    "ăJJStr$(20) = "§o§    HAVE A NICE DAY    §o§"ăăăFOR T = 0 TO Snowă  Y(T) = RND * ScrY%ăNEXTăăFOR T = 0 TO Snowă  x(T) = RND * ScrX%ăNEXTăăDOăă  x = x - .01ă  FOR T = 0 TO Snowă    Y(T) = Y(T) + RND * SnowSpd%ă  NEXTăă  FOR T = 0 TO Snowă    IF COMMAND$ = "/HIRES" THEN SnowColor% = 1 ELSE SnowColor% = RND * 4 + 25ă    PSET (x(T) + SIN(x + T / x), Y(T)), SnowColor%ă  NEXTăă  WAIT &H3DA, 8ă  ă  SELECT CASE ScrMode%ă    CASE IS = 13ă      IF CurStr > Comments THEN CurStr = 1ă      COLOR 2: LOCATE JJSymX%, JJSymy%: PRINT JJStr$(CurStr)ă    CASE IS = 12ă      COLOR 2: LOCATE JJSymX%, JJSymy%: PRINT JJStr$(0)ă  END SELECTăă  FOR T = 0 TO Snowă    PSET (x(T) + SIN(x + T / x), Y(T)), 0ă  NEXTă  ă  FOR T = 0 TO Snowă    IF Y(T) > ScrY% THEN Y(T) = 0ă  NEXTăăIF ScrMode% = 13 THENă ă  SELECT CASE CFlagă    CASE IS = 0ă      TCol! = TCol! - 4ă    CASE IS = 1ă      TCol! = TCol! + 4ă  END SELECTăă  IF TCol! > 240 THEN CFlag = 0ă  IF TCol! < 2 THEN CFlag = 1: CurStr = CurStr + 1: x = x - 1ă    OUT &H3C7, 1ă      OUT &H3C9, 0ă      OUT &H3C9, 0ă      OUT &H3C9, TCol! * .25ăEND IFăIF x < -.12 THEN x = -.08ăăLOOP UNTIL INKEY$ <> ""ăROYAL                          THE GREAT QB VOLCANO           columbo666@hotmail.com         07-25-99 (12:02)       QB, QBasic, PDS        74   3463     VOLCANO.BAS '***************************************************************************ă'***************************************************************************ă'***************************************************************************ă'ă'                                the great QBă'ă'   ///    /// ///\\\/// ///      ///\\\\\ ///\\\/// ///\\\/// ///\\\///ă'  ///    /// ///   /// ///      ///      ///   /// ///   /// ///   ///ă' ///    /// ///   /// ///      ///      ///\\\/// ///   /// ///   ///ă'///    /// ///   /// ///      ///      ///   /// ///   /// ///   ///ă'\\\  ///  ///   /// ///      ///      ///   /// ///   /// ///   ///ă' \\\///  ///\\\/// ///\\\\\ ///\\\\\ ///   /// ///   /// ///\\\/// by ROYALă'ă'***************************************************************************ă'***************************************************************************ă'***************************************************************************ă'ă'hy, i'm a 15-year old boy switzerland. here is my second program for theă'internet-"qbasic&quick basic&power basic&turbo pascal&and so on"-homepagesă'the first prog was the qb plasma. it's great. have a look at it !ă'ă'if you've questions or only word's for me, mail me : columbo666@hotmail.comă'or write to me : magic bytes, h”ngerstrasse 14, ch-5313 klingnauă'ă'have fun with my prog ! but if you're one of those little pathetic worms,ă'who write in their "funny" games, prog's or demos, that this is theiră'production : fuck off ! you have only to write :ă'                    'the volcano code : by ROYAL'ă'            and PLEASE write my email adress too ! :-) thanxă'ă'i also program in hypercard 2.0 for the macintosh ;-). you know hc ?ă'please write to me !ă'ă'cu & byeă'ă'ă'ă'ă'ă'pentium 200 or amd/k6-200 and qb 4.5 is recommended. COMPILE IT UNDERă'QB 4.5. qbasic, which is included in DOS, is too slow ;-(. but you cană'download QB 4.5 from many QBasic-pages, but i don't know, if it'să'illegal or not. you've to know ! but i think, microsoft don't searchă'illegal copies from QB, because it's from '89 !?!. (but it's good)ă'ă'ă'and for the end a BIIIIIIIIIG, BIG sorry for my english.ă'ă'ăSCREEN 13                                 'graphics modeăFOR P% = 0 TO 63                          'init "fire"-paletteăPALETTE P%, P%ăPALETTE P% + 64, 256 * P% + 63ăNEXT P%ăCONST N% = 750                            'how many pixels ?ăDIM POSI(0 TO N%, 1 TO 2)                 'create buffers for acceleration,ăDIM PLUS(0 TO N%, 1 TO 2), COLO(0 TO N%)  'position and color of each pixelăDO WHILE INP(96) AND 128                  'main loopăFOR M% = 0 TO N%                          'update screenăPLUS(M%, 2) = PLUS(M%, 2) + .05           'slow down pixel's (forward-speed)ăPSET (POSI(M%, 1), POSI(M%, 2)), 0        'erase pixelăPOSI(M%, 1) = POSI(M%, 1) + PLUS(M%, 1)   'update position of the pixelăPOSI(M%, 2) = POSI(M%, 2) + PLUS(M%, 2)ăCOLO(M%) = COLO(M%) - RND                 'decrase the color of the pixelăIF COLO(M%) < 0 OR POSI(M%, 2) > 199 THEN 'if you can't see it -> erase ită    POSI(M%, 1) = 160                     'generate new pixelă    POSI(M%, 2) = 199ă    PLUS(M%, 1) = (RND - RND)ă    PLUS(M%, 2) = -2.5 - RND * 2ă    COLO(M%) = 127 * RNDăEND IFăPSET (POSI(M%, 1), POSI(M%, 2)), COLO(M%) 'show pixelăNEXT M%                                   'end pixel-loopăLOOP                                      'end main-loopăAaron Severn                   QBASIC VECTOR BALLS            bob_severn@msn.com             07-25-99 (14:37)       QB, QBasic, PDS        282  11290    QBVECBAL.BAS' QBasic Vector Ballsă' Here is my version of that popular 3D demo program done in QBasic.ă' First off, many thanks to Lithium of VLA and Denthor of Asphyxia, withoută' their 3D trainers I would never have figured out the math for this.ăă' This has to be one of the least complicated 3D programs around, and ită' still does just about everything the others do.  I always found ită' annoying trying to understand code in other 3D programs, with dozens ofă' formulas and subroutines going off in every direction it was all bută' impossible to follow.  This program, I'm proud to say, contains only fiveă' formulas for the 3D and the entire code for the 3D rotation and drawingă' can almost all fit in the QBasic editor window.ă' The code for this program would be easy to implement in other programs,ă' feel free to do so.ăă' Aaron Severnă' bob_severn@msn.comă' June 18/97ăă' Controlsăă' - / +         decrease/increase rotation around the y-axisă' [ / ]         decrease/increase rotation around the x-axisă' Arrow keys    move the object up, down, left, rightă' A / Z         move the object closer to or farther away from the screenă' R             Resetă' Esc           quităăDEFINT A-ZăăDECLARE SUB setColours (pal() AS ANY, fc, lc)ăăTYPE pnt                                        'type for each 3D pointă    x AS INTEGER                                'x coord (horizontal)ă    y AS INTEGER                                'y coord (vertical)ă    z AS INTEGER                                'z coord (into the screen)ă    p AS INTEGER                                'dist from center of objectăEND TYPEăăTYPE hues                                       'type for paletteă    red AS INTEGERă    green AS INTEGERă    blue AS INTEGERăEND TYPEăă' The number of points being rotated.  Subtract 1 because all arrays in theă' program have base 0, so we want points 0-7 instead of 1-8.ănumPnts = 14 - 1ăăDIM origPnt(numPnts) AS pnt                     'start location of each pointăDIM newPnt(numPnts) AS pnt                      'rotated pointăDIM sine!(360)                                  'sine tableăDIM cosine!(360)                                'cosine tableăDIM scrX(numPnts)                               'x coord on the screenăDIM scrY(numPnts)                               'y coord on the screenăDIM oldX(numPnts)                               'previous x coordăDIM oldY(numPnts)                               'previous y coordăDIM drawOrder(numPnts)                          'order for drawing the ballsăDIM pal(255) AS hues                            'holds the paletteăDIM vectorBall(121)                             'sprite of vector ballăDIM mask(121)                                   'mask of vector ballăăCONST PI = 3.14159ăăFOR i = 0 TO 360                                'create sine and cosineă   sine!(i) = SIN(i * (PI / 180))               'look up tables to speed upă   cosine!(i) = COS(i * (PI / 180))             'the mathăNEXTăă' The following reads the data for each point.  It could easily be set upă' to read from a file, I just wanted to keep everything contained in the oneă' file for this program.ăFOR i = 0 TO numPntsă   READ origPnt(i).x, origPnt(i).y, origPnt(i).z, origPnt(i).păNEXTă ăPRINT "QBasic Vector Balls"ăPRINT "By Aaron Severn"ăPRINT : PRINT : PRINT "Controls"ăPRINT : PRINT "- / +         decrease/increase rotation around the y-axis"ăPRINT "[ / ]         decrease/increase rotation around the x-axis"ăPRINT "Arrow keys    move the object up, down, left, right"ăPRINT "A / Z         move the object closer to or farther away from the screen"ăPRINT "R             Reset"ăPRINT "Esc           quit"ăPRINT : PRINT "Press a key..."ăSLEEPăăSCREEN 13ăCLSăăFOR i = 1 TO 15                                 'set up the paletteă   pal(i).red = 0                               'consisting of 15 shadesă   pal(i).green = 0                             'of blueă   pal(i).blue = i * 3 + 18ăNEXTăăsetColours pal(), 1, 15ăăFOR y = 0 TO 14                                 'get the vector ball spriteă   FOR x = 0 TO 14                              'from dataă      READ clră      PSET (x, y), clră   NEXT xăNEXT yăGET (0, 0)-(14, 14), vectorBallăăFOR y = 0 TO 14                                 'create a mask for the vectoră   FOR x = 0 TO 14                              'ball sprite, this makes ită      IF POINT(x, y) THEN                       'possible to put sprites onă        PSET (x, y), 0                          'top of other graphicsă      ELSE                                      'without erasing what wasă        PSET (x, y), 255                        'underneathă      END IFă   NEXT xăNEXT yăGET (0, 0)-(14, 14), maskăPUT (0, 0), mask, XORăă' Initial values for the object.  Theta is the angle between x and z, phi isă' the angle between y and z.  Note that by changing these two angles we cană' rotate a point to anywhere in 3 dimensional space.ăthetaRot = 5: phiRot = 5ăxCenter = 160: yCenter = 100: zCenter = -256ătheta = 0: phi = 0ăăjustStarted = 1ăDOă  FOR i = 0 TO numPntsă     ' Save the old values of x and y so we can erase the balls later.ă     oldX(i) = scrX(i): oldY(i) = scrY(i)ă    ă     ' Three formulas to calculate the location of the point on the 3D graph.ă     ' Don't ask me to explain the math for this, it would take too long andă     ' I hardly understand it myself.  If you must know, check out the 3Dă     ' trainers that I mentioned above, sorry I can't remember where I foundă     ' them, but if you look hard enough...ă     newPnt(i).x = -origPnt(i).x * sine!(theta) + origPnt(i).y * cosine!(theta)ă     newPnt(i).y = -origPnt(i).x * cosine!(theta) * sine!(phi) - origPnt(i).y * sine!(theta) * sine!(phi) - origPnt(i).z * cosine!(phi) + origPnt(i).pă     newPnt(i).z = -origPnt(i).x * cosine!(theta) * cosine!(phi) - origPnt(i).y * sine!(theta) * cosine!(phi) + origPnt(i).z * sine!(phi)ăă     ' This takes the 3D points and translates them on to the 2D screen.  Theă     ' idea is simple enough, divide x and y by z (the bigger z is, theă     ' farther away it is, and the smaller the object should be).ă     ' 256 is the persective, changing it gives the object a different look.ă     IF (newPnt(i).z + zCenter) <> 0 THENă       scrX(i) = 256 * (newPnt(i).x / (newPnt(i).z + zCenter)) + xCenteră       scrY(i) = 256 * (newPnt(i).y / (newPnt(i).z + zCenter)) + yCenteră     END IFăă     ' Here we decide which points should be in the foreground and which ină     ' the background.  We draw the ones in the background first so the onesă     ' in the foreground can be put on top of them, thus appearing to be ină     ' front. This section of code organizes the points in a list fromă     ' farthest away to closest to the viewer.ă     IF i = 0 THENă       drawOrder(0) = iă     ELSEă       FOR j = 0 TO i - 1ă          IF newPnt(i).z > newPnt(drawOrder(j)).z THENă            FOR k = i - 1 TO j STEP -1ă               drawOrder(k + 1) = drawOrder(k)ă            NEXT kă            drawOrder(j) = iă            EXIT FORă          END IFă       NEXT jă       IF j = i THEN drawOrder(j) = iă     END IFă  NEXT iă ă  ' Wait for verticle retrace for smoother animation.ă  WAIT &H3DA, 8ă  ' Erase the old points here.  I use the mask to clear them because coloură  ' 255 hasn't been set and will appear black, this won't work if colour 255ă  ' is anything other than black.  The first if statement makes sure thată  ' this code doesn't execute the first time through the loop, becauseă  ' there's nothing to erase.  The second if takes care of clipping if theă  ' points go off the screen.ă  IF justStarted = 0 THENă    FOR i = 0 TO numPntsă       IF oldX(drawOrder(i)) > 6 AND oldX(drawOrder(i)) < 312 AND oldY(drawOrder(i)) > 6 AND oldY(drawOrder(i)) < 192 THENă         PUT (oldX(drawOrder(i)) - 7, oldY(drawOrder(i)) - 7), mask, PSETă       END IFă    NEXTă  END IFăă  ' This puts the vector balls on the screen in the proper order so thată  ' points in the foreground will be on top of those in the background.ă  FOR i = numPnts TO 0 STEP -1ă     IF scrX(drawOrder(i)) > 6 AND scrX(drawOrder(i)) < 312 AND scrY(drawOrder(i)) > 6 AND scrY(drawOrder(i)) < 192 THENă       PUT (scrX(drawOrder(i)) - 7, scrY(drawOrder(i)) - 7), mask, ANDă       PUT (scrX(drawOrder(i)) - 7, scrY(drawOrder(i)) - 7), vectorBall, XORă     END IFă  NEXTă ă  theta = (theta + thetaRot) MOD 360            'increase thetaă  phi = (phi + phiRot) MOD 360                  'increase phiă ă  justStarted = 0ăă  FOR t = 1 TO 5000: NEXT tă  a$ = INKEY$ă  a$ = UCASE$(a$)ă ă  ' Handle user input here.ă  SELECT CASE a$ă         CASE "-"ă             IF thetaRot > 0 THEN thetaRot = thetaRot - 1ă         CASE "="ă             thetaRot = thetaRot + 1ă         CASE "["ă             IF phiRot > 0 THEN phiRot = phiRot - 1ă         CASE "]"ă             phiRot = phiRot + 1ă         CASE CHR$(0) + CHR$(72)ă             IF yCenter > 0 THEN yCenter = yCenter - 1ă         CASE CHR$(0) + CHR$(80)ă             IF yCenter < 200 THEN yCenter = yCenter + 1ă         CASE CHR$(0) + CHR$(75)ă             IF xCenter > 0 THEN xCenter = xCenter - 1ă         CASE CHR$(0) + CHR$(77)ă             IF xCenter < 320 THEN xCenter = xCenter + 1ă         CASE "Z"ă             zCenter = zCenter - 1ă         CASE "A"ă             zCenter = zCenter + 1ă         CASE "R"ă             thetaRot = 5: phiRot = 5ă             xCenter = 160: yCenter = 100: zCenter = -256ă             theta = 0: phi = 0ă         CASE CHR$(27)ă             SYSTEMă  END SELECTă  ă  DO: a$ = INKEY$: LOOP UNTIL a$ = ""ăLOOP UNTIL a$ = CHR$(27)ăă' Data for the points stored (X,Y,Z,p).ăDATA 25,25,25,1ăDATA 25,25,-25,1ăDATA 25,-25,25,1ăDATA 25,-25,-25,1ăDATA -25,25,25,1ăDATA -25,25,-25,1ăDATA -25,-25,25,1ăDATA -25,-25,-25,1ăDATA 85,0,0,1ăDATA -85,0,0,1ăDATA 0,85,0,1ăDATA 0,-85,0,1ăDATA 0,0,85,1ăDATA 0,0,-85,1ăă' Data for the vector ball sprite.ăDATA  0, 0, 0, 0,10,10, 9, 8, 8, 7, 7, 0, 0, 0, 0ăDATA  0, 0,10,10,11,11, 9, 8, 8, 7, 7, 6, 6, 0, 0ăDATA  0,10,11,11,13,13,10, 8, 8, 7, 7, 7, 7, 6, 0ăDATA  0,10,11,11,13,13,10, 8, 8, 7, 7, 7, 7, 6, 6ăDATA 10,11,13,13,15,15,11, 9, 9, 8, 8, 7, 7, 7, 6ăDATA 10,11,13,13,15,15,11, 9, 9, 8, 8, 7, 7, 7, 6ăDATA 10,13,15,15,15,15,13,11,11, 9, 9, 8, 8, 7, 6ăDATA 10,13,15,15,15,15,13,11,11, 9, 9, 8, 8, 7, 6ăDATA 10,13,15,15,15,15,13,11,11, 9, 9, 8, 8, 7, 6ăDATA 10,11,13,13,15,15,13, 9, 9, 8, 8, 7, 7, 7, 6ăDATA 10,11,13,13,15,15,13, 9, 9, 8, 8, 7, 7, 7, 6ăDATA  0,10,11,11,13,13,10, 8, 8, 7, 7, 7, 7, 6, 6ăDATA  0,10,11,11,13,13,10, 8, 8, 7, 7, 7, 7, 6, 0ăDATA  0, 0,10,10,11,11, 9, 8, 8, 7, 7, 6, 6, 0, 0ăDATA  0, 0, 0, 0,10,10, 9, 8, 8, 7, 7, 0, 0, 0, 0ăăSUB setColours (pal() AS hues, fc, lc)ăăOUT &H3C8, fc                                   'tell controller to get readyăFOR t = fc TO lc                                'from first to lastă   OUT &H3C9, pal(t).red                        'send red componentă   OUT &H3C9, pal(t).green                      'send green componentă   OUT &H3C9, pal(t).blue                       'send blue componentăNEXT tăăEND SUBăăJacob Wieles                   BIG IMAGE LOAD/SAVE ROUTINE    jazwls@worldonline.nl          07-31-99 (15:56)       QB, QBasic, PDS, PB    108  7097     BIGSAVE.BAS ' BIG IMAGE SAVE/LOAD ROUTINEăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"BIGSAVE.ZIP",4^6:Z&=5028:?STRING$(50,177);ăU"%up()%9%%%I-%<AfxKPE/(Tv+.%%e;%%%1%%%%gn%lRxf&%jSgRfx6';>>T[g8NăU">9EXPrR1jYxi[yA$G]_2nTo&B/'M,Yv>8m\-qfTi3Bbb]kS8vDhM^ocH.9d[=ESăU"1ChG?5tVDKK^HfOKdc>PXr+bBT\dHSF\xJMDEJB/v;k0H_rx>L[BVRp8Ai2XK8kăU"J^fGq]Ge(*#sG*C6aaR6#,v7pwZ2W]3k$]H+XJG]1Xk#LhZT&b2^OBf;#Iow>EBăU"Bsa[:6aUA_QqT5W6lQ1ic$aFFrk_=qu*<e#SHMMp[_de[)IkZogNVl,4&hbX<<BăU"RcLeak$t*pc%X>f1..B>SFpVXYk=[P655Hf%A>Tj(fKUp4tRsxI^F>%V3nBG+rWăU"J4mGzY7eH&m=iCdkeeGIA^?7h*pTI*XlJ)ACm2>dT>YHhe4PGh9,SzI&o.GQGo&ăU"Wd+8+e1DQY=YKV$kGn/8N0bl9oOD?Gz%EN<GQX*D.qdV3[3dKk*+cRUbimO8VN:ăU"sV><I1.241+_6ECtLHS2bmae=l42HjG*ZxE0>P$^OG'CL]i/DvFp,DM'FOKy;JbăU"t72etOa*TKz[Fb4BRH23g$DR?p%KR(dfsavk\tb+exT<knHcIo6X;#]=3eJ1J24ăU"Z4p$?RuLP?Qii;mcD&mN/;(wGujV<,464M5EjA]OOwt5B[6sN]V#gG435B/&TSmăU"1=DbZ;x1YUj*<H]$lNh=^UF(2G9-<]g<5Z>L4iUDafU<'1>I%62_G[hjH?uVpl(ăU"ldfv^7A:Wr9vCu2,yk_&IRFZbdUv<[3?[MNL*7Sp;JU)6f_qI&cW]6saR$#C3B$ăU"^9%vgc3+Z<BM8vTaC-H98p0pRKGy4wg60&B$A/oje(LxEp[Cgw,gK3&MRD39HL^ăU"6_kW\zZO/_9yM.qGg#TB>>TA'9^$g=wEe(U1k<'/mm+%w\$n54,*jtXANLZ?(c+ăU"5e9s6qO)*t?ORLl?2T)l(Rqd<bgB*\bxtMk$:N5rmLM;wj?%2q?m:bjPlJe<$gfăU"5*asa%=nYb[j*D>\TX#gN&EYp2U?vGP>;72I:'+(8HT:dBGJ<.'%5%0(t(bxxf*ăU"Y)>#k4nt\d4,H$Dlb\F.s:p4sa7HipZcg\2'(#k29Z#>OTh3n\U'q9T&LlN]u>3ăU"cl58=n'3>915+E]ae48yw=)'$],;_n<F;EQ?[N#n3n'Zn-6UGRv;?yU&AHJa1MrăU"xJM*^mG>8[U0f=Z5+bIRh$t;c\bghx_*vLk?e*=4=PGihae35/&y4MgQAn,rNChăU"*4d'R^mZI.q)EC,BcJ'<jJXvj$8S7S8WsHM0ZpG9XB4QF\EGKn%7k6xm+C:H((_ăU"uu4TC+9mrSJ$DPz^jn-3g*6kh/tUL6#rbm^q]2BmT3dmyz>Rs;1%P($]O/w1At,ăU"RDnJI,PB_=c(UNA*$pJq68hEqAm_>LAM+HZ)XvNn/VC2pXmG5EK5%IGtGv'Npg-ăU"%[keoNE7pn\MNI.pJB)H5hl_G8_,W9&lVCtS2YY7f,hd[we07x\EQ+pbG<+I;bAăU"A3_P]_Jd31J=0Tf9?]DEH9kI_*3u_ECy3?-SKR*GI\)A5(KEJpNkf/IS&Kl5%ILăU",7rJ4_dU?**jd2<<Wd(Tt-Y&SXEQ3*ETaX)LH'8urKUIMVlusmS*kdrD6&2Y6vuăU"yh6QK<C52fH=UJh9IkR.;8DO.-'*+G*;2[e[;#&R(y3Zq#7dqM)R0MWei(6G*#2ăU"0scD<)Sr59al7;pvN-=M0#/8McP&%+?)$Y;vo$/FxLDy>K9dfRvYUsf#sB]u^=văU"/[p'j5keUH(P?r4D_':R2)MD?cH<dT'[%k*xHaDJ9hY>f9]&wY>&oeQDp:8IA0năU"o%j\.NC*-BbfZ)07F([37x(cdV:,:KvAdWRt[b1uGWYdzCTBLw_Xt'Pst0+,vZgăU"X).;EKb9Uyc:O$7XZdNdb)3CwN(yCx%t3dLiN^?dR,]7GHM]X\<<Q9YJ\K9uNwvăU"Vl#'hcmi/qRx24Q]hFAe>%#ic(Fc6J%W7Qq8?b=\fn'&&\/,J3z2PH.xvQ0)%>[ăU"Vds(20iBWN7s2n(+f:^(vB=:5x_b[eXP\)rFl-2,I(RaMMsH;cAjHFYP>>Hf<zBăU"XUwtBiQd0TLu]s7^VK?vWSVI4qO]Ex[T[U]gT[U]c<[wA0bn[U]j*>0Aj.>0A4>ăU">0A%-M3P#IU1H^j#y](Jr]1(^u]1C^t])[6'Qw%'up(%)9%%#%-%)GAxKuKmu\răU"[(%%p%-%%1%%%%s%qtfi%RugS#gfx\gz<>TR[5w=Z9xZyp>zMAJ=Iv8Ee%>a(S*ăU"$1,8/9P++e0R)l2G7;8_MGQfP^>2e4&&#o=UHtFHV<nVlc^,%i,f1O?2.l08N7NăU"sHIFsb473C\eU,7qtXs1<Z7aAI.,2(.NGN\OX)7F+.f'BL7J+PNsDI;JNl*u1)lăU"(ubrew0_4'0\-ff^0\\h%#-Peq-KxeP*koXW8jv_'G$F+93x1:6tP)JY%70E7_%ăU"c6J#_C+sANPG84SZvBEg]dprIjtm[f$n&T);tsi8$k(BYPj\UD^?rO'Pc8t%LxmăU"_k^lYO.:xhE$tYNKcju7YT;Ena[3YQr^Jn[(I(cFgP[r][^v-ld]Zz&iI8R8nH2ăU"2WTjWa;DJv$X+sOszpP4_?]^JIX5ZVlgQ/#uRNQ:+B<&yS5O*&5'KNw8\'xj5ZrăU",xg(cw3VvRV#=N[;E:XuSc4gfC3V'RbD=M\s/C*eTIUMZ-HUdk?K::U\k_g.vKdăU"-/RIl,UV4T)Fr;IYtkC3)#$(D:U4Y'FlD2p>d%#,A&4Z'vj[BQ7-9:FO2DwRui(ăU"v\]C_r5i0h(&A>=2br>:Xgv\oz*D9OYc4)X:ESQJHL2jJbF0mysCKVlCa:+i6spăU"=T[]m;(1.ZdaO3.PbO4v^qJKhgTRoDr7pCQo+sYj*Aw$Cb88^Oi^G3t_NNFohsnăU"pe_xKFeCv)?qV5[+VBR6$JEjHRA%YARyiPx&63Fek9k=4l?rO3jw#:UWv*'#CuIăU"rE\b<1+./PjB$DpX7.*<f/e\]ORN6FnHIy,[AaYQ?A(jpR<%F^8WsEQ;P\-Vt>GăU"L5k*3Kls.vW7CETcH+fHt#GgZ(/Gc.q72csL9f^SQUaJ4gN/LV$,yFsfM#*3i:]ăU"B0P0DJ=oWC?+B.>qbJ:+2V$I$%zzm:/D-Gq>ICl11Xv$NCH$JtSd3#S?O-geAMeăU"ss,IrAvcaITV4S9nLh0VGbmzwnXl*T]]n#>#CWAm#a0mFL%U\Qu?&e5qDB3WLB<ăU"1.nRH*GjS[Q](_&L:o(:uq>#wZG4cfzl2lI6<qJU4AjjUx$>B>-T)nth4>bR\p?ăU"Wm/p#oy/PE?C-Vl%I*bdbcx6S0Eddr24gft)s43-8+#9^_t)?BV<JGN$nkFPP2răU"V*JFJ7=^u2]L1C^5KG0Stgsxf#C6V4R+FcdNFKRX>?P9DJFuO:QYN3?r'x&up%(ăU")9%%%%-%;&AxKN?),='c(%%'(.%%%1%%%%sqtf%iRvg%Sgfx2d%<t]\k5wRCNx0ăU"Tck&,^AYBCP$UTb8bQY[cQ:[^tws>=F0*m;$]fOwZpVR,%Ls-bJ9F4FN_H55Sn>ăU"(ht_jMk4-qFH;?u'ZF&nN-*K4?ksB&VsBrZpn$,?*[[>-qp_ECa+PK-w5W8Jkx-ăU"ThH=DEm&G(Y[Er(MstudQM/]7Akoz-Pjn%t8?Pp?_R*t,=ZNpn&5>r*Djm%&07făU"sa0o0j1OK56#8CVn_6cK#g,A.kD+0k0-:Ap?Ufg<22kS(J]ce7tSJ1lGYm<PihFăU"zejfuj2#?,#EB\e*R,t<QX<bHs-p^V46S3&E:g(S<L%Gzt<*H4f;OFdo-#oY)P\ăU"_x^d>d4US9]7FCg?g(fNU6*qQ'7HU+/?tk.qIvgQR/-mC^U#$lXU5k_JeU6V#DMăU"#2B<P$&Fp5vg]D_9H]>*=C/F]DLMU*]H4]ZWcStqS1[6;u*NS%4-UUpxpD_d.^3ăU"^*N7pAa\<a&U1kpGL^r]d>#gdcQJh+Ur_SNYT%/LU$?YeIGXI:D/7mK\^4aET]DăU"G2y1gbgj6jR,,Iv2[r8W44XRX2tk0E70U?I5P+,%aD>EERery#K/0ctN?++HY(*ăU"B4SQn^7fc>naPARP\?K:n#-r2LOY\,Wd(##QDMaY=m21c$:^V9UrN2V;;r)v1%yăU"eho:EVmH'Rl*(FAL:6,V%:roF01m1$2N_V3,K2%jiRu'=I*HCGp<sifU;yW=TJIăU";ea4SRwMM;.go_6wd1%D,ftg5]5Gu%qap]H?+:]qV7\Y3I1W:(I[Cgkha5Y:&c3ăU"PAN+7*(e6\5p?_>>$sRD_5>z)3mk9d+=d.Kp25&%nKibWugqLd^4YbX6xgU\Oy8ăU"HcuGJ7d>N=Y7hZ+B<DJYx*>VLOA&PC.=&WRPL7OxRISB7)Cc%*,1H5:$1%*K1*?ăU"rzDkZoLQt:1U>.U(MSPUeS2j:6K7ZP(j)6S]8Y=][Tjc6v*E-XG];7R1E^W8YDGăU"E6[8Y5XuhZIKBd25G]9TbA.#2S9kGZ[UP5&tmnsI]^>Yqq*sYGL/lvnEI(ZlTQ^ăU"mlOeYYc5,jq[%i6Z/FH[V$hPG-%])(I^ic$5+f[#J;QG;H[<(R5G0rziS/(?R&XăU"J\?lqO#/dj[*+bHhO9\bX/*GriJ(CebDPBfMuHn_i-DrR-O/$ieFG?j,1uY4_]*ăU"%;:+lzpJ>aFS/=uUF;QMkgX=r*Yv$Sm]%7G%*g,%dt,p?$63q5-kt\)buLl3uX2ăU"+(>MdepC\W#wl1G2+8b6;/>i4$.msK8JifxXK<'x*up%()9%%%%-%:yAxKWH&IJăU"'I(%%%S/%%%.%%%#sxf%#jSy'1y\%v,>T[5kMWOv)VJMUg#_RQ9VW-e(Ck[P.'9ăU"8X,6TXJ&lQG7Dx$y3ZfPh]ScGCE?S^>-tDug\cpVBr$L^Uu^be-/jrZM0QvdE#8ăU"'Lv_L^;aMebYq+0a7t\e&n&CK%Q3T)>eERf-;Z/Aie/<K9_<s$SRH9pq&S%bAZ)ăU"aC'S'(eZbQL*w:NqQ7CtLp'(i;;SbD?Mdd)(cW$oZqUl;qrVxUlItRm77.cVcE'ăU"SVqE8g5M&>2F?)UtRiCz8uWQ2XuBG(mX]5EG^7msu-2[;^gSW<&Vpu2Rgg.cu?3ăU"dI07^1v;55+:#aQ))hbRAL96Y^M$]=bgl/Q$vH8GWN8l3;pb'a4kp:VJ)W0lGYDăU"P\ga/46gml$G[6F_'pEmx-)wk9:3)F$qle39dDccG[)0Nn+3wzd84zNJU^cv1$:ăU"Qs*3\+lCmj3fS]ERAit4$x<-6&Jd_Wx-C6dYs5$:7)EYYXj&[>%Mqo7Ca1e55jzăU"P<#aFf\'MO*j4nYG'*L/$?q1v5g)DI'+ZD+96%-JRsjIV<#XQ#?BK+)3&CB:q8căU"j8I8YWUE20TQqZuphjE^jGfuHKC-_YIOf&08\-J#i$d]I->\-6ibxCyRR)Spdj$ăU"4:r7'r5VH3X(>rV+OiE.2cA.3rdR(w2R>bDQw9)?=Tux6U9FP0Nfju.DR<UbsjhăU"B0.rh9zA'19K*E08gp\2aU<dYT5%1vB\m2oqZI5nG&j1\T.=vSDH;5D]bRx5a.AăU".'.XW\Ndrgg9[W%#vX/?2IB1,^9sWVVy%*TK\^8bykOM9on#4pa'8don)\bZq>DăU"r>Z9r6%cnB+aTPDpVi]KJ?djY]qj%WB;wKhcZ&QEZGjf3;nx$'P#S=1hXuEt+B#ăU"q-v[hSYGn9MD>V4A2+sR'W7t*vkT?4^QklLrrDPXa)G.dR[1WhF0^X<4TV$*[0JăU"k%gke<\U8\\&xa4EwYrr)*Csr2$POIqN;/Yp+I,5EW+fRPu_0lMRl5O6n7meEFLăU"st^7u4jV67WNkZ_C>#MbLCVIO#a:mJ0,'HG3led+8dkU'oQ78IJYFMEU/PAr[5năU"^OleW$rBocA2=kgv]f:F^6?u<_JDt_fnRUtNw+vX=jxqiIfe$.#S-t<kcpjR]I8ăU"O>IVK7]X^JO]JXeFoC^gW4s8eJ_A7[NsXJSI:ux)Wi,_:7J*K06-W7aW-1r_VVnăU"&ZHhrVb/oO\gJVB1ZTV(L600_p>bg>xHp-uj;d4\?,4n0<jx%4up&%'9%9%%%%-ăU"g%<AxUKPE((Tv+%(%e;%%%1%%%%%%%%%&%E%%%%%%%%%g%nlRx(f%jS%gfxu%p&ăU"'9%%9%%#%-%)GAxKuKmu\r[(%%p%-%%1%%%%%%%%%&%%E%%+%J+%%%sqt%fiRu%ăU"gSgf%xup&%'9%9%%%%-g%&AxOK?),,=c(%+%(.%%%1%%%%%%%%%&%E#%%%m%/%%ăU"s%qtfi%RvgS%gfxu%p&'9%%9%%%%-%ybAxKHk&IJI%(%%S%/%%.%%%%%%%%%&%%ăU"E%%+%+3%%%sxf&%jSy&'yup%*+%%%%%)%7)%^%.%%x7%%%%%ăEND SUBăCLOSE:IF S=143AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăBernt Figaro                   ANOTHER WAY TO SAVE GRAPHICS   bernt.figaro@swipnet.se        07-31-99 (16:12)       QB, QBasic, PDS        82   5330     ICNMAKE.BAS ' Another way to save graphics picturesăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ICNMAKE.ZIP",4^6:Z&=3690:?STRING$(50,177);ăU"%up()%9%%%#-%[EfxKR6&-MC..%%2#%%%0%%%%nh%srfp%jSgfjx6(T>=\A6JL<ăU"oN1M73TE.eA-;D(=fM7x4#Dfq)$>m*lKCpcq[%R?72W(Rvz8L-)e8_aEDI)-_KjăU"r3yR#9Npmf*8S?uQ]bcYyLN,-NNb81[SN$h,>7x*=o$?/]BfrZ7A$>]^7/uL/VmăU".bt9r1J-JvZe7^,#,NUaj(4zU^NVS*PW(9)&_#A#'W:h>zP-1Xe4Pw$<4-;n8/'ăU"iFFk[huHlLN8;c8l'<?bHiNSiL06<34fX/P'RU,)WKj\Xqed\C_2.oNu.6sIxw^ăU"-IlT7gMfI%-dS8+9vp(#%]H4cUSvoIUbLorUdV#oD+8lDQ1?.&=_7ZTbN/C?lliăU"w/Qfg.mE<H\MeG+t8Y]hv?ZB^i<u-Qi0%E;m5kZh=uf1o-mq^%3pnG4C#lbV2A8ăU"t])nQOJ9(iV$k#=tjsXOMgCbQm2N&uLt)C6.GFzX_,N?'s^)*-$A8w\&]1wfhxcăU"Et>rXTB^0KkPTG\N7(8x[GM[kSC&sG\c1j1fEYnb,5QT?7n=7gW8qAw)iP2U=kJăU"Ji&kanB2+9Fdj0l5;DWu/[GF<ib7eW3q^9fScL<jI3IV0F],Y?LLSHt-EtSepo2ăU"8A#(0l)B0_9n%fH)^mX)kN9(pCEi^BncR);tngAl_R;b9(>7_,Q$muAhLMF;\gLăU"uP9#C1O/>CbIV-<Ct>Bjk((\5,[27u%,b7PZD;wR'ocMc--Yt^J%:pofsOCf'SEăU"c9PV*ciNu*6hl2Lhoud7lR:fb>_^aIRzo<^b>2rnA^[T6+kK64j7*9KrGYKo0MkăU"^=MjFu$[ZMk<VqA<=v]4jjR:PqS=v]Zk74O/[*XhF[XXy:uEIkEO1-\wTJ;aFg)ăU"zDs\$/$a;e5VUT2>&dClDroGUwo&qRF>*Gi+P#.UwT>k)eXhkURyde%CpoEUAPfăU"Uk2w)s>4o.rf0_&(eNY&0##.+E1ed7Q^KvP9\WikF&)v.WJ9^aEdGQdQr9l3b&DăU"JeTnH'7^:Q61TExe9#2?=;^#SdS''w^CFyY)UXs(C*0dMN'l58%\+_#c0jer$KFăU"s&3jVrAB2&&&<Obf'v<.ZnB_cEdFlsY66EP=^aL8[;lN5)ZMiq&i1[OR._l%,zSăU"bh/&kMFVu3C)3,8vbWJb6.$w7uB2F1y:Za1erGw3O1us=sVmF:;KO,n,cIQLu[jăU"FjQ?hU0dsWgm4<bB1cMLW5dO_C[R;XcZcFbGYs2(PaE*PuYr\dxYESE2RAchA+,ăU"S\23t&t2]d6>UhwS28T6K[Zn6rlq^K4B3TKf2obg34[\NWrX%Up^yS4loepL4J'ăU"]<>OVqx]2I[PNp=Eqp\<4RsPulDr4m8]PDuUcgKfP\i:*mXeY_?dSQDK$o6x#4&ăU"mBBb$_FLGhgy$pfc=UpRXA?QfH/;[H#nQSgIU33q-UBbZ0bq.2[4;t]eF0QW=N8ăU"])C\fH[2\?MSpV5qY2-Q?4B7?ki5';;B]r_7b,lTGt23Wi9PIw?AZb__F*c-7XOăU"W<Ri[XCURaLZUE_Db,e<;qu?w8FR8n2#cPFR*uhE&V,n)sZ8l[j^pr^^8gInlM/ăU"d,s&?7sz;sbn/mU*r3x28Q&lUA&/6XT<>q2Q4DyYD85.^&EjNvr#<J%>#:Zt8=zăU"JqMz<gIHDM3XV*HjUWO8cet0afGFFrs-N727<hz2(cRfW?]nIrda,USam^l::bhăU"zu5-jy\_1n-A&N2=9<x_<(,^/.1fxN+iuMf)h05,eWVz*<;\4eX#Tjh9I*0rMEdăU")VG#-%$,8[&i/M?1V501IDzxD6VqG/?csTZl;qYA;qfcaSo'0oF4K7Jqf;\;.YDăU"if-q>z(/n2WHAo8aH/tK*wDsJUX4\#Qo8Lm%Mi_tQD)gVlnuoJJh%'bB0?s5NZMăU"KEUd2.L7rg#T7,zKM98N)kLk()'lgJrICNNJihF3,kpdyj/Kk+ih,WcE\zl.mScăU";*oQb)2:<=qdUQJ)?,CsUpbZQ&l)O,^&,oiyh-M_7\rmE<XR;=#dlgUh&0)Ik]LăU"<RoyQq:sy_ol_a.Z3&s4HW-SU:gi]SZO0eGm4<kBSS8#=a=Xylm3rJ^=h<#/kz+ăU"$>vqe5Qx[)Q5U8vaHwC*UVwS>5Vc%<+PX%bx=/7KmOf&p3?/c+,1\Xr>/^]0Y&TăU"bn_Rzf$X&[hv*4__k'X'HPvfbNn4b59Bv1YvaVM<pbMWSaW&^uZaf&nvzrS_]hnăU"FfH3'sZ>KL:cnM(30-K?h4G<\(VB/+__[^JJ[*Lpn()[/uhujw/mG(i+Kg0=/a>ăU"kd,hit6u0><MF%^iVuf/;$'_)U>nMLCM\>t/^oK(&xUYybY('6$ZUr$&f#ptzh?ăU"6]qCM]?Oc0a)j_EhG'+6Tpox:Qk:xRZzx_$'96p+l[affpg^pWQ=ZY3l(_COt^QăU"utrb2\3Rb:_bjCC[hsbLO/psFV)J/f2#4yHn0^:W84v/+X)V%O$Ov0BlQnC<eCmăU"fL\*Pm8F0m0o?r1l'_,FZ+;Bj?slT'l0q=#q^#%ZvgFUj6InOUOF+6/n/kPC#Z8ăU"F8^cFNMf2yD4(uIdP8s%XmgQ=D%J-5,24-8#cDPWq%Zq9//s3?ir_)RBGFJz&K=ăU"8x,]wCYLn_3;<8z]w7i27,#*VJf1B9CWH'B^dZUlB<YSD6_4[k&'34$e<H%6AQ;ăU"+>t7ml;^2\sv1xWVC*b(p-nYV(u9S8&S6b=0e4_RmRM0UqprU/oN-:PKfIF6;u/ăU"Y)0A4ylX*.\m/61FM(_W0Z/W7x[xc$-GtDYO9T\c_S$>YUOcK:cf6#HG=\huTL*ăU"#vK#CJi'TPyw7cm-P+/Dq&](:\?r-LMZxXhWE49V%3]\HwHh2QnGjYUd8(4,#VdăU"hO5sZLS(uAuEnrut?dRV^CH/bV;(CZ?64bOOQC#1=T=AJ0=Q,nF=LKF+?O1/n%)ăU"I98Q+VmT*rO#^c)=M5<=sN3Wy+x#,QLw2V'SbJx=dE,Lhgn%6wOw^h#CG%i1D0DăU"Q*\c+px&u%p()9%%%%-d%$8x^KGB])6C)%.%O&&%%/%%%%uqf&(fsS^y'yfQUfAăU"y[_=+IrxJ_U6Dt24o6'1w,*Sb*1ISW9Rd-EI2uE;OhWZg=Vw8^<-rhtPGCb/,T3ăU"<M<I3p*D_1&WV?_9-zZdgRwbhd[F*PPNz\bLo/p:<T'\\[^;sxd_#Q0,3*uJ/f7ăU"QDwM60KDMt*PM[pcH#BVrgo%bR3lxL8hq?,ok$VKDme\Yk-j]gA<ldqf\S1JeQ9ăU"C4W<ac55AJfiJu#^C'to:>uUH^Z8EdT[\Txca$oJ>(RJL'IWV+'NX-*I\thg5]PăU"mg?(?(ll($AClQr/l'VY[dP\V+=c3XWDQpH4QxxCjhbHVYD0l].+V/=8NdsrvDFăU"3fvX/1TT8bePI.Y)DU6k3NV0(zQ4fe-M<j=jrn9r6sbeN'5w4:ik%I,e2xo*=k$ăU"fMrhHQeZ$i&8(Pg>pJtHV(>ZMG7an<jT/W4]g4n6Eb78J++$pQ<N3]BQCVGfd3BăU"G3\8MXAc>'a70VkdUws4mh\6=LYQ]8JoqFFo4$A?oqPL6edywTLyea=0S3knnF[ăU"G%e[\z4k$EM]gJ<l3iV&LReq$zFlnc%AVJlj=VTpt$Y#Er6:E:ObBxQ3,r3CXI-ăU"g'rW_m1++,9V$Z<,Hqti3CzJS\mwg'bkITuMagJP\R.BHV]8$>Cp/1bFdSV$$D<ăU"h*A:>cEJzjx51LLz-VF_bB3DA$W.CXxutx4oSl9_FBPK>&lxbj%B7Lq&6aKtP>CăU"bK:<3Cb/J,P5,Y2>%fBa[,u?63':E,eD+tIcw'N71%sUp,u1N4fLJBt)P5(:%#>ăU"JzuIjYpO]^U[532i^9uHREQPD7M;nd9B6md?8Jfs$+Qe/])jIh>G(ck?7/A[cVwăU"Ni7u\_Lr1%VAh998NMpC#d%m[qnVeZ23-3<RG[^*n<Ghbc)<&7wZND9D2-7_rn+ăU"\8rn<pE\lAD\N(8:>KHXMNVBQaGz+pq\^h,Dt2<V?BVCMtk3&qHZ+*h4w+0t/2iăU"WfMW[$V0%65N<WxIe6(Z7r6'J6g$5w5?VVO3OiWzdqC2JJc>qbB5DVpa]NB_/2VăU"2UXocSs2.[D$:qCrIg]7x\hRjT-ujxOmUmsxW&5fG+wMA&F:iD?TjQg4.BjR:.jăU",)&$Qj:(gnf=o*O=;rM1jIVFGDm&UZE\lDpppf'Ietp&WSt#kqC9D$HXnaKtpPCăU"bKj:3CbU/,3C6bKtpefS,3CgfS,eppf'$Itp0j83CbEKtp&6aKtPAC41,33CTSGăU",3gf1S,ppefS,3YCbKtpp&aKetPCbTK:3CEbEgfUS,3Cfb/,3DCTS,03gfSD,ppăU"fUS,3CeTS,3CgfS,eppf'EItpf:S,3gJfS,pppf'Ietp&aEKtpf1S,ppYf'ItppăU"&aKetPCbEKtpf6'ItpY&aKtpPCbKj:3CbEKtp&6aKtP>CbK:<3Cb/k,3CbEKtPCăU"Ebm[C+d(PTIon&-jC3CbU/,3CSTSV:-dw(u%p&'9%%9%%%%-%[GExKR*6-MC#.%ăU"%2%#%%0%%%%%%%%%&%%E%%%%%%%%%nhs%rfpj%Sgfx%up&'%9%9%%%%-%:$8xKSăU"GB]6&C)%%(O&&%%/%%%%%%%%%&%E%%%%l.%%%uq(f(fs.Sy'y%up*+%%%%%%'%'ăU"%&#%%%'\2%%%%%ăEND SUBăCLOSE:IF S=98AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDmitry Brant                   JPEG VIEWER V1.2 FOR HICOLOR   dmitrybrant.hypermart.net      07-31-99 (15:33)       QB                     329  21737    JPEGVIEW.BAS' JPEG Viewer v1.2 for HiColorăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JPEGVIEW.ZIP",4^6:Z&=16024:?STRING$(50,177);ăU"%up()%9%%%R-%Vz]JKV8;sk;'%%%Y.%%%/%#%%q8M1E4BJ0S18B.zvbAiU5MZhEăU"vVYL2W,bvL&mF]t-QTM>nw)'Jck;W-_U_#1]*-87.M#/'\LaM\h+ZX0X=X[Rn=TăU"?8U64V\?d8F(d&:k3B6Od9_U/#70=8_=<oo[dfg6\Fv$cr,4Y2;W_IAjHOADrnQăU"2:7Q<[kWI>K3Y$F1+F#66<)N>A1hc/*7q=e6D&m,/7Pem%)>Sk7u3r]1Ev$ZDOFăU"q4RJn-nsL]UJJFV0k_NWMTKeDM%5k'&ZN6kopQ<]?-D(6Y0FQv%C-Yu?R9Eu*%jăU",txr$VgJO_'C?C(Te.n3Kf/VfFNW:ju>^?WV=ZnEO#YB_CR)pmC1C,2OKhGa2;eăU"g(MOC6#IG-r_tLRDQ:Nmuc-xIZRr0RRNWK=*bPnj7-HImp)<($O^M)JiePiF9^:ăU"lz'>uVmBe4ZImsLYrvtDY*tBP]O]pkt?4I5]jEfMBj75Epa[7tqb__FqLpD]dZ*ăU"N4#d%/\y#r-tAI?kheRmc&CjP,UZ^Oz/*Mz:K0utdQN7n7HNDOz8(r-qY</i,lAăU"s2>iegTK\sUZA4'+umUIAc'm&),b>?[:<Eam.BWEFclCpG]h$2m$F3*6FAm-saSăU"L<+Pr3$XfH,L-jp[78fi3'%dihgxM3EkkVP9[VWUd^Wzjk3D0wM]raq$J$TO/l]ăU"osPw_1E1wt,^/yW(g-_4qi\mznu1\p%>7Sga*Q<w_p%+s7Hjs=Dw773ADe+#)GJăU"k2uqj3,*)Rfg<zF?S,h2n^H5^Gi2lDyr?SG&?jlWjtxYoqNbcJ#<</IcMn&MM[7ăU"LZ.]I<GB-6LYznD.tV3G1q%%s.OI^zPD-VrF9hv&BUl2-:VcciOoY]kRM]W2f[yăU"^C#Pg/X3eS44e4]:<O+/xuiaB,r=.FAVG't\$Zsvv*dnIv(m*[.up%()9%%%%-%ăU";qXmK,^I%&%';%%(V3%%%1%%%M9?46ME84FLS10BTfbvFuS?+89tAx4,Jvw(C2uăU"-2cesI2R4(/8[.]eKW1v$l(H/&JC'#JP=rxs\aX4Pfjo;EKZ5Po-$D\RfuEeGG6ăU"GPMmlFvCL*31DA5M#L[$nK[qJ?z6rCR:Sk?IX+03X-UQ03c?dG?5Jzueh^Y$8H=ăU"'WGNq0+g1Hi=RF0P0gT;d.QRH-7M?%w?vh2<:S;#RP\6TwYpvouoPDO43<BG=5IăU"E.T/(]F'Z/k6hJ>TY;Zd&R1(BSQ-Vp%o=Ef[d.EQPX5&Fs],/33cx<HD6$/6^2uăU"6l;-sbgdQrr27\Vj*tp<4_fZ4o&f6mE'BFY)V)X1_=vc$>F/HpreL9bcBV;RS7BăU"+hl,Z;:?RQ$8LL3FBEgz,w#,mL:,o3)'gG2p#j;o6G\k*y89Z0718RG,LnO4;<VăU"*/I*tTG;r3Vuq7DY1oL_lGj/,A22akSUD*J,=e/ugVZf-VU3.)<=(t:8>Bpp>,*ăU"VZ9<$\sXZIK.7?3,;E?])^,;)+s8f**Q6ET;l=Rk4X8_l/+*%]HDfbKO>3R;.W?ăU"B7#K5ZCaBlnEU-<WW=84e;vXy<9;4,Si?E<&7qlgoU&/Bk++IPcEu1UI+mdhu?/ăU"d6OW;E]PX*a'XE?=$HxqK\1d+[$l2HF*?uIphNF>a8o6]Kf&(XNVI:nJp+^<8NGăU"M+W3V\MU)Y*A%BuhAUW7OnUeBIS7bClE[eCe[;qivbr9HJgR[_hjW9Fg.trKAB;ăU"h4'X?Si9;%%Z)3BN('Fr0;iwd'C/-i_EOfd%D2T8Dj8K4s)Af;YWfQKe>]1u,NaăU"M]tRG5_(VdVt+*uM5#rZG04TN,nUuw'Q)8V%hgr1oYiZXtA\?GSAWYyl-=4TH.>ăU"E]bua(,-[hCmn.*KSf1rKj1^L1*4#hBgPAGu1]G06AbSmWT^o3Vn6g*\\,UI1BBăU"B)C.dW]*;-+,Uj&;^w00PGS_W^zFTXSF#<EQ(DiKX1Kx]i^l4Vlpf<7H9c(%chWăU";RPK2-/B$xYLOc_/k%<s=%-ZQ3X?*3uc7)99MDg1CIEvz0eiXqG#sHsf\b>sZ<VăU".rkF(.iPCt-1WqjXD>qs]muh$kTG4e-tvF>U?*Moa'T[$7m)O=JiV?Uyaco%$v]ăU">[\acFBe0Y^]]h#EIYUJs0\u46SaFJEYFQ39*nF53qIRV.Kw')Cf18I*j2r=S=făU"(6#TQk>z;Vp8(S4%m/NO>TQModq?a5j73c<cl8u[LioPu>M)HjR5Qd5p.209(*.ăU"76]Zx86NUVS'>1$i*V5*LAB82bLhSI;s4OheE'-LGhFhP=37aVKm$6Q&M1p++[qăU"GC$U5v].')qj's=#'DRqV9Kq?$Oi>2l'+UpT)9CU<g1i1/q:HW\nZ[E3TLC6&mAăU"j(5Q;<%.?lVGId$bIx9Cq1Ua:+Glq,H$)#oa6J\ghOSYu48Pc.[>ylSsKPQcpO7ăU",sAlCR%gluRn[SC7E.f8MM^\FI]VPZug8m1,*<fX-h\I#E:+J]'UKuu]NF+>3i4ăU";2tk]]oJ,Jt;RB[?1sKB+_UHi^TwS)jr?=RNKijA(L-9HGV]hg^K;fav3&t-4A]ăU".uf8b$3J\E5;JM&P5PMzCCjWa7fTJ_6TDxlcgJec0l>(l;.g_l7(M%(5oCA2AwAăU"L?$'4[epVzAaY>^]SDkhc[;(CnT2tj[h(f#ON^wN0?/Wgw$Iw<zR2.(OpL.L0>+ăU"6]-6p#l:wrW44Lj?)Rhgpn%,hRBELqVioplSVjp^hE%e>OcSU9US]w/tMkx_o6=ăU"b6X)RGtj79c535lg\MukW5sW/aD^R^R4)=js%(C'wF>BS)r&jv6Rflu8<m*&SUPăU"n,.?SFZZ1$RiO.LuM$==/WK5IP)w5MPSSpKI/8EpzXz8kl30=t8TXc/+hag4G'-ăU"^InxC_T]Rf\b'oc#ie*\P:OVDl:(wbf?0S(1c^/;<uc^xJtMnZ/d-M1oH:q*9YsăU"ZzVZXk1FZ;dP/aOcD]<t*g#QMvCH.[3GT*;Jn%gn2EmL%(;9HVUzGo='WGy$&k/ăU"wLvu8)(Q.ouyZg%=oO6\L/;nTe9C9EiB'F'N-dO2ZIA/Fd.-MhY2fAT97bQ&=NGăU"8trAT7[yFDK+p)O[N5=DT2**)uUIPK2V-1ZjuPei3D(UAwqX^(a'jyHIo[/O#9wăU"lrN>E=%=U_7.M,5xJbm<c]bK7%'dI=0ibTgs-TFz;T;>WML6ZR+H0FS3iTCA0hgăU"N%)u2F+X-sAXgNt6P%ke-wQCk%>p1g>fX79ZH&Go0nJlv9-VV((Ye-T>W88,lvxăU"/4qVQD0JE]m._I:U*cPe-igSJL_>1HAZuO)[U&G$+DO8GL>gbj2ZTC0=3Cu9%B:ăU"NmBEd=\ogN7V0JVxAf70UvSI3qSG)7'W[E,bK\XZ\C2mNphkV^2BsaC(bx\&:bOăU"#-\'y<Zn-Ak[gn+ZO\I.\;\-xnFy(Jd4^I()IGLWTCf<>AbFGXSiOdrT0s]3sdIăU"]\qI21)aPJ;Et#JK+'3Yqrdt^.nA._t^f%)Z$9*P&Mv59<AcX4P7_l76QR'v/77ăU"')TI<MIv&j%Ztos8bq87rFfEb.w?xSe_M<Ne6r9Kmy5JU-?Wy7e$A/;AqN5UtK*ăU";2E*_f-<jujw;O$AfpdwPF1+CettvGQZi1Wod9oiMNL]OJHKlwnnE_xb/CfY(2năU"EF?v_-ENg#4FEraD:7*2PBEPuhops?&:),CXsiK6UXz\K?U=pV?*FmguvXR<FIMăU"rDa5F<'%8JIX)uGLV9E;Ma(8EC3A216:_'dIRO)^VY16TW&(uzf(#y[6C,3b4i^ăU"kB&'W*I?KM,g^(r1xf,&j.u.z,0eP:#u0<o*nK(h8:n#wKuY%b+<q[<s+n[nXr-ăU"#:JeCo9?hOmn;l2b.tB?tnA43&L>nt>,X-<0*_72QO+q$3[$1'bDm#+)T&KPONHăU"y/S_QMy,iLxHVP&+bU$(D3gp98S9YY-lR)M^v+^hl]6hmI\Mc9P_Nhh[FSvq4A<ăU"a2SUC425OCh6.8.=Rs3f9Cu'3<RNmPu)Y<RyjE73)-gW+l=r+VqQ&FH9ig.5T*,ăU"/M?,3j%g?0_dR5x,nYkuv_m5wpIj+MjcAR4e3=ysPp6K\h;fQMi5p*-L*?M8d.păU"l^2%:ib'1kG*>jLhde;bLWJ=H6X%2e\WlX=xCh-OAk[-+?ku7LEs>28Dc/5..UvăU"Ng%sX_CkgPp,\5vMq_]t0RPNGEC$0.YoO^4[O,:1X=M]1dBIQq.y6pemjaRc[^HăU"Eu^Gd3j[fiNZ$N:*b0i:l+K<^1zKL'D<'M,R;4o6r,.Z:4^)WhhXRj06_%Gigt#ăU"B;JrQ_i2b0Ose2pq(,qCPCNP;qXDN6Aw7MJI'UfM$kY9q^a&?'D8IA'C*#GhtIgăU"^232_]&Q8_Y.j(TOo*a+K_[4oEHi\k^lL/vN4DVu)MZ&yjX/VAK0*(.i:#tRs(KăU">wETcS>(IW33b,L(t22b1&0_.ODV4kf_[V:<wj:O>vdUhHdNUeH,7rxK^&6#C*\ăU"2cfq5N26$IZ)pV0<4R<-NBX*u918#7ro)JenY$Jo_[W*N%h;j=5lvk9/X\4&JnRăU"7i)cW^_+_=,$u-RC$&2,t:$IkoYr8I<Ggi%p0EG773Uq1*eF$U-6dpTSaN8)HM[ăU"-&?p?E&S6*]IQ5S*LtJ21rd[nEwe$ew6uOBG*O<ccegv:j;$alQ8=_2-S0&diTUăU"MYh=nW77b=_$SKGb,gio][#8Ms^8<$BU]>B'A-%Zb4*8XAIGrz>(W4YgdAzYeNqăU":hq_\md=Yf%:7#o\)4Ib.\IXin.\WMltw2.j#j<c]VbH57Q:JZrXu0,Y.MRcCZWăU"im-75-S%w8>ceurA*g%=Nh&q\ORv\dc-%t-h8qD82Q+JJ(z%/i%_l&O?ee)?_QFăU"v(QWb=:)fzW*V$-#Ib7u+6Qowm\&VJ3==$9%zn*e.+)AA=:i;>+pk.]88<at1d3ăU"5=m:H[n6ZOKI9x.i[#eI147dG8k=6,R-$r;x[b9DT4i^N#$^S0CWCiR^W.0Ws)2ăU"j\,SML_-\iX0E_E^>qC<[1TemG\>GMmDdsYIUXXwj\$a-xBll=$Hg\0G[VMWQQBăU"iTNRK$_A^4-4aU2Q,kbv+Is:,&g=NH\#Nf<L;-c>\jr/N;sz5(Cq7*/PRcW[DboăU"gne#3/4YekMvJdf(X517VdbS=>3uvWhm.zS+*]&[)ql1^FZO[tHop['qAcHdftqăU"02&OkN;t<NoN):BHpn=rZlpPutt==xmaHS6o>Gr>5B0HrQzI;g*:+dCjMW*X.B2ăU"W8RNfS]a6(+Yr^DJ0dDR[2HgrB4pTO4-?1RJ<WhP#^y9Dzf[FD=h2p9Q>&hk=MaăU"*GK(f^gDS%,;p\J,?2swEVNe]^NQ:[aouZu(bw>tO[7lZlMWQ(.W'a2,,m8RWXYăU"q;R;zY2[Vm#+,r$FGi>3]Q0D?4v<)j4RJb5'1g\)K0x>P?Q#c]l:)LgiMpX^'Z.ăU"ZBs*EP+v$AK1-2z#U[_UYp:+<n)u=SKZ<omnet&kVxP1H171A6+w[jPPG?I1Q-OăU"g-7aI8'WMfv%g0^?=ms2aio)H]$=A_QH=WOW2A?J38bqaSSNVIn]7^.xiq=oL4:ăU"yJ0v.l?lCL]9PCNGM=FC_q;HCsSB+%G<84.9%v$cuW.;WKP-;))E9cae]D+7wnSăU"*:'D+)p4LxiBLJE2in'RR_A+Dwl=R)-i+v,3t]Jr33jk^d0(a6>lc#e-B2OCVUUăU"mskq]qCn4(EkX$SX#5ojForY*I_4EaJSB(b>j[L+tnr187h,#9i*>:.^J+)vuOnăU"MFZfmlt=BV?UVU>B<a<;R.tvU9xY\O/0D-\;1#^+Z6D=E1--QlM2M:[Y(DppA*XăU"CU/Go0e3$DJxYEb\h]XW8vqG7q+c1+1'aWOpwU5&O&kAnr:iN^8'k3\DX+.$0CCăU"_2aCJV1o1F4=)Wst7-Rk9U;lDIgNZ1mB.fm/%OUWMnLvR(YCz9=ODh/1Y]Y7)tfăU"+G-s[c93yp?Rvn'(,>ud.N.(^*\tns+4z^s+D^x;/FQ7mjk3fHFr8We2JmQWlM)ăU"tOrDikM(I41<C&WE8Mcouw^]2P4Xl=9Bp7AaPI-b:W+U[d)zmpodv>aX(Eu>9<qăU"M]G:2;0VXm)Fi<v=n'rSTTYWLJPJ7blq5es.9/^MmfkolW&IQ[UoAFMd$rz>Mt7ăU"Im[vtplQlnjjO16o(Q,27i3.%iIeZK*-hA$ScJBQ(c_rgc$<oSt$5zDwOA268Q]ăU"]L_.i2$:,Ltq#en.qL]cD9.0WSXuvEJLaa\cth8ovWmZ,K6=Rb<#zd$5(iOgsq:ăU"f0N%Dn5<2;jaJ2kh3f]0?cUM#&1<HtTOlYtm/u&L3nb17Z9mGUhM)txPjcJ&HiCăU"5K=M=FN=-V75*ho/M5gaE)ANC+2BWMem)5_i)YM.$Vmbt241#0c1rs2pjNLR#YlăU"1sbnDCi'166)%%RK<YrIkU8:NTH_1aU%*.T[3c+iq(haC=>MN).]fL'M/z+xX']ăU"-E8eK(J9Z.sxDS&).['Rv:\(/fM:5nZoL2SmiosT[J&s'Z_]$qB^+[9,;l1ITQoăU"c$5/:Qc&dSQ,Y2p[R8N?lm*#(f(VNFfei7.ng:LHZ*n'2LIbz,bkivXcW_XpnHsăU"m^[:K^WRb4HS97On6W]hn5Hj'\kb4K-[eH3m,*#Y:NM-jqqfuK*;e-pj[]rMf%2ăU"]T1f*=0\8F%+3mEs?0Dq7W=D[q$.a%hB2*(Y#/lSv15.;-APS>Kw[;gkqbT/-/^ăU"CTKfn](minMAhw[A,Wb\uTXLPP0L797dq9.(u\,jRDE5_70_I?:RABh5c[?(LasăU"&zbZS++/Pu^5Em+m0M7j<GZ'no0.kON::k]xOS[yxCgkqT?7l>:z65#G67]4,HGăU"?I?FZ*]x8UQhBwrBn*J)g#9v7B.R*'#0<VLHzCY]exk+hSfRt7T3tRf2xs'mt-xăU"-%#ckt7:2&xqPe+k%Wgj<:<Xufayj;k^;.f?1<_Z1$wj:R7M#tC\TFBe-D]&7DDăU"<vqM*Tc#%e*T-75uRP:^;[2&%-NetzCa%\S-<dui?2$7Sw59b:w3U>;Z?,tHr9răU"X1wG_)>Is\;hDYJ_Hq*(8vO=>gRine75e%6+:K-mkpHm.?[h(:7$lv0lv=#WgfdăU"GoF:x>)0jy6vt\M[R>0u6z1HiRi&lqC[aj?*eNF:lJ0[YB/3,\zw&b>Pz&vQLFIăU"iPWG#Seykl\pK5432K*gzKS>0:\U[W/jg=/9;cVOVSH/LE($k2*tP4ZE_-(ejs$ăU".N'i)qUu&oiCv9?ke'Qa4Gr1nl%=KwMMr+MUVoCT&D.8mmg-ImGdbt-7Z:]^HH7ăU"kA7B7sFmhiQ'H0l:Hb\vD$Kt^,$eQ\h_Lq7rlPKHcmRWwBINkEh.hHWHqSt6h''ăU"nNhh'Zh5cm;->iTcZZDkq*^r%,vqP5Kw[I$^fkJX,PmKchRZ7iA_kqG>\l#b3=&ăU"I,8C1itrsS&mF.T1n,_m,n5.ioDcq?cY>jSx\Q*vlEjDRKCW7b/lb8Pt)ib>5H]ăU"3Rl$O0i2\ijPue3HI7D(^qt4X<]4Jok=4j/YBO*fT6U5(nKYrqx&uOKXFA[0(C0ăU"8'q3vfg$8x,qoyM8U;6;^Hkm/b5y_4qGo6*sl8fb<R(Iq8FkjzG[afwK1)olS=6ăU"X]RJW<*o#1d(YTh$A*'rjua'bd0op[9sZYDn++/eJC39ph64GaHpa&Q)rAa&3>oăU"dZurWcbI01ZvwtjuZ#uZ'.*fCX.=hQ19p94%q)#9qIslvs_\V0U9jjX0rB&sAf4ăU"6^)$GfD7lpnu3c.%4G2IxJ\wmoQkl3I<+m1fpX$hl'kvhk^&d4Hr7DTsR3+$.iZăU"jS.L^as>p[=%8hG]FYo=br-3-i1]VbuNU9/Fh-jJ.jI+fwe]h*dxOSb%ms*MDQEăU"k(*wj[h$oKDp<m8>2e+I\-(oY3u[PZ+1]p^8<Ipk1GWuY':Kw/8UyH+7g7y(RN&ăU"cAoX+ktDN3E]1cfud/8s&RQBwt8S[G:H6ZqQ#^s1d71&g7rv<Pqse_kb[J?3d>2ăU"l1rO7'DiR?Ua456V9KqlH7tsntL#(7o\lXjYjhI8#Dt)>?b6nw$.[T('^&.bn6*ăU"P^e57K=Xo#Ny7zJqmu:*qMaw>?Rpmznm*-1wnRn(3e#Q6Dc#R.uc/;6oqK>XR18ăU"uxEY)Y(qV%WMk_0>mr=[n/Ru'vTup%()9%%%%-%;BsRKu=V_6&A6%%%FE%%%0%%ăU"%#qng%%jxfS[qngN&(0yzuN3w_bIEZR,;0-iBq-ibmWrLK(y]KEbZ17eDG;YD%#ăU"O=c&O%vpqEEmWNo5x(K<_%%Yq6lCqJ,,L\0Ar=ScQ,B=aN.WikP^\%jIiw3olBRăU"ZQqc]msZg1qF^*7j^PkxZu$xirx)dX5\VOMqOo\0#Y=fxRN.'sHEqFXLdGRPY\SăU"5QO>^Ht32.JHI^fG%N[w$L^8Yo_o^;Gc/j]7u3X*V1k:ly9[^>061bO24Q7q(;LăU"<br-7/A_#-%)_9?x_.&.lmXG-.t6O\eC2<'[e#'>k[]9.f-U(RbUW)jM_1>K;>aăU"\U4_Ra5\juiN+#E3r*1,lM5$1B=%4%:pVgd65n(_;0GysK^dc>2)TB:kh%0w%U5ăU"wlY47$#Nbivuh7PU4RkMIqu?uK5W=O.sFgR]vKkH8/D.mUAI%$:$Vc[9=B]'*[hăU"F5>7;DqxnT8;4-pJSk0WE:\=Y:vW#)AsG2h2gQ+9Jo->24P/r;K4uV>1Ug[FP2BăU"GapmaA\']E^jLsb5A_ekHB9Kob>0b^xo/IfIn&Ix_E:BfwFIZo6s:Ds,7Sbh^#2ăU"AykSY6ARAJ]a(mIHTcn$-;F]3YqMD%.*67&A_q>_8hWK(yrIw.=tgW0MW4]Q)9)ăU"=6Af&Zf^o3xmGxG5WAc34:o:l3RvQ:9<&oIoj'&8C4/R_D2fna\ZA(D><Aj^R>AăU".5hE'bdfN8crcH:Cu4]1Wg2G,2pHM%H,HChHpHY&R%w,9/_x$F&0MMH9p)'&w?săU"r(t6a/DYi3YsLbKA)qp8(^,iDVoza)'s.ber8tnm#Ubo^TJ0-j*/xH5K2ArMdO5ăU"t>H<Fmc%;2\h(v)aqi*TWth0u(xfU6iSFQh/0NHhZ<r;9KE.j[0WV8#*\&$QC.YăU"Y?PW/j1K1eTgi>CNTF6,#C[f)(/8+nd;j/3V>=E^Qj&4,3gOqSj*4KJ$Me7M&\)ăU"VG8[0iX\IW3Fk&;r$>9H-I)R(B88X.G><*/srTo6%W6y6rHfP373X86ZMftc'EnăU":2rr+V5RbQ#A'%eS;0]Nn&hbVZFDRK;2t+F<yxiVnrZgLu5D7>'f5,pZ*r54V'tăU"j;>1RJ/[[\G0jQX[JXLDn0xQ6i%Sd+^j;VlK)FeSS1JHiplc[UiRHYYQ5Piwq3<ăU"WIT9)\h]g?FUkz_Md$RpedF5tS6Dd;:*?<O*ll%^1_MyK.2h.H2q.iuMfLn8(9LăU"f0mhm^$0*Sp\q0rS:+XcDW2-g61jn9eZoChz5*RVE%DEo*_/S][OM[^^&z)mNZpăU"L[;;9_Ye_F%5SNc>Z>>>YLUrK.M-P8%;H0:QuLGCebaUgLhJn)Eco,\5*3_bU^6ăU"o2%$g1=QOlQ7c-)Jjg:a1CDL?CNo]..bo?+vE66m/&($SIm9=Q(ED[ZP)JD#qQNăU"eAM/hbG_qHLoict(IutmCwvtW3HY&qMgm_h4NlZsamGmHqE%(NM?27_^IbmWN4băU"Zv5agq<1&y$DMmu/MfBT6(HgG(Wk43a\axKw+9oWm;X4>hJKkl0NGq[sp*xFbHYăU"#hc:(]pHXONDdaMha_i*][tst)H)K=IhNfhm;aptY=mNOa0a=&kacV4P>4wZl93ăU"/XwpgooOrcW;$?(;BJQLsjt3oje[Q7sGCIIh(YLGV3FaCgCkKs9Co)wgeU+bi93ăU"3;.OKZD$)g96K(L4^xIKJt%'AM\.&r_-84r;wmFq*-l0R;0=H)TI['gEqUC.rH#ăU"_^t$$Mggl$M$ceD+<0bLc3WIh+PA::o\qk7;$g5_/gPr-kjkx:*_2NkLae'V:^HăU")<DBeiEj-,3?-4[xw-\2n:aEDIY;ldUICie8kmsc))>:MGlCzvX,HH]V+PF>G5RăU"wWX=Y.P1R)^:^Nb8B>j&8aml8+[<:CoWtjcA\]jr+hBbu3GV#jhvU'm>x*B.>nhăU"aX4)DUjLj0g\CRU5,-ZtsA3#Lfqlc/AEbJgKEgEh>0Xz63PT1A[qAVZ*a,0yAZ#ăU"K^/Ud>gcK\kU2;XKe3L^=+wNa[czOM?U/)PKqLL4T\4aMdX/Q41,Ulbg,4&<=#NăU"cg7FOGl*xusFAhw>f&rcKva>8+]k2<uhvtWMKnzd>^M_8o6ZXY?P/O53\r<,RhqăU"kPhI:k<5P+mcJ]zEk4B[OtP>Squ\N%='AubFzXM$h=l&M<*k-fyTqLEicT4?.KmăU"k5v;Plre:K0BcKeIptGuOsm?b<&WJS*16#GO?njH0^\z/d_,pQm_O_EF+mBl(jdăU"'VeK\Zt'h.xKdWBPu0^0AZ86If.oPKOlhFn4dt[,uU0SFNuQLcpulP:]AOMyWQ[ăU"xnCjDubeXsm1a$Fd$)3X5Vs([&.t$ls^=%n0\aGp_nJKI_84JlL<=f$njJ>DKKTăU"gb8-lMsTCku-\=3]t^CZoW=/g1YEm-sLkG(^*;7i2QO6)'E8Uj4e+OiF&\*[R65ăU"GpiokO<a'78i)\OT)95RYnC&^0G^yOt9&3&8*lU90#dV&Q:)]I&,+)5Se-%VvGMăU"/SO0^'U-1S$hF(^&1jF%C&D-nGt94a'W5i*)Ow&d.'SECZQpW5hscP9v_AY-BHpăU"XN*d)\uTJZCjPEL.[x#]*ke^Nn?ouE[D*VvkXil742*z3nb4i(Ubykx3W--W)ITăU"pJ:oUag'o^lqs]a?\vT8L0K>TUSdFFpdfh?Me9hP[?pT^C8I7wUqs[<VCscL2FuăU"ny1(3tlf0Wr'bZ>22,%Z18alLgI&wZR3>fA(yC\cCAs$KbITs6cVhdJHFIBR4c-ăU"=.Xk4fkb/tEVQgL*F-c$R'rtofOURPJ3Wu7a<h#I:bX=':6=2UnLO+3AGp7CkETăU"ATcC1YG*^p2NEA5mlkMCs>StO(r,HqJk#75/XXvVK%%;32A4?>.RCDq)kOUSuj%ăU";rZK[CmB0orTDBwA$ttPs'-/rBjgLxdiwQ)8]AhGxlNw,99$'o/TQRY8[&p)ULLăU"/eO&+&GL]O37I8,e)%%Ke7.]cx&T#)90?+01le;]O4*%i.-7L>8ZO/f);5Qi5OvăU"+)]050=Zr*hW3(L/.e.&B6]Q.#Df-gEi&-FCqkC)&0\a3Rh4n#)nHglH4e:[Z8<ăU"r+tE\hD1apwutFcuVsuIkl0+iz/3#lkYMG.TCodcg2%]?Okjh>wVA7$642cVm-?ăU"4UczM6D=.[thWpt^$db3g8eb[2<2W-0=6<MpoQ#LC6^>s1:-VFw#$u0DMvkHfRFăU"pRacTRh*eS#P\]S]gRiWMopj)/oh.Z7e$Q-E]Ih[S_Tw#<F^S\UPA-<soijiA-NăU"bk*.$NNVQ_A.QWrw=JDqU]<f0BBO*VZB[)01O%3;/<'&))Y/R]NYW_OR'7O7iMGăU"*$rh]-7_.&/z(-m#:5L/^IV0[P24PC[z?jV6jAiNj/x5Zdw)R;e]EC\66g?E#)băU"5Y+UwrC8R-=HR7jaXX/m;r9u(s4EaRO+eVrW;WTW?5as.:v9)Bvv>Zd*0(\o3\TăU"[0US&>U-LIV=6?%XyW)abAumFK0Ee41</WjA0_TgUU[9\'W7\-BfmI_2_i[J_sMăU"V_x3QkBA]9_[$uq?VrQ=2m*n=\S3'ObFI5qCf5ta*5RUXt7n/7GNxQR3dG3$40qăU"l??1sbCYR8LGaCqkH()Oc2jMApVc;R-KI.inbVae3,<JtNWfJuF(ALH*i]47b-QăU"V$AjW#Y(Pt_hGqC'<XwcMmb5r+o34TUmBja.Y4>o'lvR:D1jyS^_x=t5tt#eFO:ăU"fx41#t*EqVy]^k8FG7m4Y,Kbfkd/ee$b,/kh-DdfG)nM=v^QX\5Hm>kBDRVsw&4ăU"IA^EFzoG,]oFh'=i/57+^kOq\eDj7ou=_Ah^2p5DU.tqCgM/UKuY-fkn<fk]l]OăU"(<$n_z')N#5Dx;ic9k'sNpT0)k^WUO(>/1kOIkMj?-4klI:P>ZS*^<qvcW:1^e,ăU"asuU,KC50ufH40HO*ubtu.(7PDY26^HGptx?4Ch%;%/8pkr5nNz/\_:t+FTC3qdăU"n,uNVm-xdIapv=0_zJ5(hMQCnLx3zJUV(VVthc$A5&xY'Nn>gv_MPgn[pQv89;/ăU"nd3jSI%tjM(jGmsByWNIMx*Xrfb8SKnUge^OKYr)J2U-v##IRbP-TmI'rixT7S;ăU"WPmYFkLK[2t6_qejVhw>Ob-*^X8P_ELBMu/<MtdVqk/2=6n\&%/wnJW+YC37RzAăU"P.yJjM1JjxkLcq[K:gRAc%?q3uO$reE=HnMfa3LC][M2J#&7=^lB(F<7j)bun3]ăU"&>7/uj$=URi=9,LB5RkUUynmHH-wG3%[O:I7*IP(4Ps/:\aQJ<E#87\60[YgEM=ăU":KHS5(W*#oPY-030*[k=?S&]V9f[+kR#fO8sHBlS1R3R[Yi5%\jF(98OHh720B3ăU"<A>xLgEqn7\BJMRmK5x>$(8)7rs6LB(R_h.N]JQ[$wUQdm3MF$'eUkU*C47HkIGăU"hVrAe'+h;LWXV4HjDje],AwBgK$De4C+mrXF(*x9]B_K$N;_RcCgJTJ(Sx4FXASăU"e4lc'cH8gHJn(&RHE__(;gSx6l.m(jtas*gK*=YmPmPKfeDMq)d%5luN-8wvNp&ăU"41aQ0m)+=Xn/6px6^F1Tii$kr-7W>Q+5FW2tl6>Hf9k]O^Y<UP2bBm^tW;+H9OeăEND SUBăSUB V2ăU"_DZtAmqtFG7oWDzeqW4NnxiVCgQ%(>/z>qKD4VqXP;NxgUoQ&m2u_=t.xmqsCZ4ăU"*RMi?L5RwWs(_4jsoP+AB-+*Qec\*DGwiahCHJc1vNsIY86G=G_Y^?\d<XCeI;'ăU"bZ-0Baxu'/%w+K*-X:j;i\M?H17hfd&&,34I0S3msnDCM?5hiTn<;9bS#K.3=%4ăU"7ck-G=km7)uTn9=X\bWW+elaj:j;1hM421rx<i/KvgNxxXGx0Vkm-3UQ]YPd]ZlăU"M(?Vn.pwiW=c,)dmHk>)Tr-lfEZRsk2Fak2lfB6#1=d#3Mxfow=49r*T:2sjSfUăU"Z+%?HOg4DzkBD=cu%uwF7bs#;f9>0M\w9swRKaY>iVHB=A?\=89#2Pntr5JimYRăU"l-Z*+iVdbRMGqGd4>;K#]b-6NMacn%MX(=T7<kuR.W-w%td$[B\qrK]tqGAv#nkăU"MC&WcalY&t?0%Yq>Pgl4PD^i28UV/YhH57&cDWaZn?Z8o4N1im$:8Xj?[cOiaXDăU"V**KA-L^\iKQW5Q^Z4;ka>G]g?jZ+7W=QZ:_#PC$VqEDqikU'G]&eDZW1bDQzXcăU"6Er7D.XjC6(JvIRTANm__6Qjl=*$AASi_WRn=>T14$Fls).9eV,FcB&&DYX#Z<IăU"kn$o^seS9XpK+$r.$SFKohl&siC7+bg^3s.eis\whd-<+W5IA?0l]8Uk+#\kLxUăU"v#qhvNmt9,^No_sxcmRkZBYZ5S3kHn_HkL=fOuY\DnR(cvsl(ucHuL1;VK5g>XMăU"W-(Mh7dMWHi-.p;T&d2THfDNa6J&8AE2?(hap;pc(43D,22tHZBkZ%6\]\qn9;jăU"_XtqoY3uBIQ>MNhVGFrr';^Qa,6sZX$r;mj7BSX,FB\;IdQiRtr567O&+8x=mCKăU":-Qd_x)E+?,Gr:EY))_ltwwO_U(Ru_w7%+MEl'qT6Jhg1i9GB0XY2/yn&%1z.cCăU"byAjRVpYh72trgOT;_wqA]6$-8)X_He%^g9jOxArR_PSK-gK/aE:4*KUs0OxkT%ăU"lxO&iM6r:g9%NcY$]AAUDhq;\uxBqZjP'8THAA:m)y.mIyn](p-w%#up(%)9%%#ăU"%-%\GtJKdjy3A=%7%%B%F%%0#%%%;M81E4DB0S#V;1fhqJ'MNu3#X2Nv5S8[IZOăU"01fH[SZ-&<cJxA+#0tFSUIW]Rf&5[GMPX9mje4^p-D\#NhbDE]NMb8lm5Eglf5<ăU"Km%dFN8f>r14=8,1V[1U5=YaI[U$b,d\S-FGxb5llkdj3E67Wd,PF66h)dV5CGQăU"AjE6mGUTE[4dN)%,2JjU%p:,%FO1;y].\FLk$T_R&W*Ng)MVQhVy$4_^?s3RDS;ăU"jmCgmh-Lii$%9]r]%0kcA)I.Gv_[F)yNA)(7R%qiKHBPHX$%YI,N#e;EZ&$$6<KăU"+/(Z'%l[Hs2ALAclApA_=3T++DbkcLeI$M&3%>kQMc9<#9W6hh[+^E1iA_'0]s3ăU"R0+>8eSEHt$G=](s+<bl+__0i&Q:r_#0Ai3WJAbaSTEiK_CAs%(\OQkgCi%F:8$ăU"2AH?A\A30]*s.8H2beTWkwU)KWAhIsE6_d6iz&0O?$.0AI3//A(AX'kTm+)aZ9GăU")Z_Jma*[fg+jglY&g487DR[h1&$nm9XQ<s4G'0q*..r?0R=z,_QRA+sFsN)j>_&ăU"AxWABAZfA';4^g4yFmy\:<3A._;3]<39+NNYfIPWY+qs<;RPjY43=\[NZu:xxuZăU"HvErCL9tw8jZrQFKY=tQka*,SqO?5\vc8nC#r,&>:skZiJ0cRPi]8DE_JZLCibaăU":[BTqL2;*4sSX&(u:t%V\Fc>%mdnN22\(0s#5*trEK^W=L]%wQS;x$g\Mf\<87RăU"0AHewwl2t[S)m0$(4&oT5Oe7PxBh/498#hYp>/^BX6VN(bVaUr:FmoD(q7Q&?KEăU"3c)BepC7O^fh&o/%&;xT?rFMV3--]oPwL.?*2RlST5OVV=R5LTe+>fU*SEiBn_,ăU"PDbU&&r4yT_k[J4wr6MNI-rA6SCuGaODNK%dKQ_5b6oIn*OP<d<RY4mvSo3pxPeăU"LkVT]C+Z8u7LXnGe$yBho;H0:ksq<p]*/?%d93(tG,G4gG#&;ZxVW>?qJbgO<x?ăU"ijD'/q)D%]\KF*]vE18KM]LKuxp]#Lggv=i$KUr*M$guRwW_u^NWpuNX\j;82b8ăU"vO>]sN>2&/[7jTvt4:=.dnB.3x3d:d'lgslpu*ivde#)RJk^,$u]/5J)<m$&GjjăU"m94biYwOm9_)JZc%(B31NwtG]5v=F]PsxJMq:MY0rw6qv<l=VttAqu.Ygtv[5.qăU"5u5+b*8?Xq\<,3;*L65YAvl8oA$jKuEV[\v:0rKW0KC[]_1G5QqzZ#K6X'+NE4kăU"FCrZ,?aGO8j7pO/u/5]5[Qpb[v[+]/psHiEb/q;\&q:IF&sZd;Vb^FopqU:0:EuăU"cVClF]%t'0cRC5B1F/O20UDKO99uHQNS(c\e9'hD\Gie\Io4hL*_d^Au-ZAaAC^ăU"St=0ePe>B]H,#hm3nBTTBohT;c\F[lq?[R$Zjlrk<?YVMa^#Vz\M>>qk1%G=Nd=ăU"tUF1S;ONx(d[HL(BOd3%Td_^#R=seZl#e-vT/_l;oe?V6q)<g?[2LpdGGf_-V:săU"<p+]c#<O?xL6i0ldJ(RNU0u0^xAHb1h#kRSsa$gJrBN*Fh&g#?],?vTh\6X*.BNăU"rK1r:cXg$C$DBueDYIioW.BLN)rx(9H8uOHHjMZK:RxdB21y]3R-2kt&0PZ<4#tăU"_qK^S7fCAW>tSDKol4ElK&)XeL/-DOe0%4<4YegQ>)Sq*0R0QZ8S>fq%Kjvwr'0ăU"xC[meMs5[6*&XW*O8FqR2]ja,^vc:X;mD;vH<Hu*sLH<Er7M[_NOeZJmfQti((oăU"<a97s3iii2h/8%hT0YPEJ'gIBhztH8h3(Nm(j5VZK8'e'iSpb9nQ<xc5F?qA_v]ăU"EF<dv/8iMFYsp,9v<4+HSZ-w:Us,+h=9]p)pka5&arO)pb%5yJhX>0Xa8j&rG9măU"61]np,?1u&#ec>$il/q%,[]+O\YpF;[;mBb^Lx8$=LcvF1nBrrw-spF$opOiGF9ăU"<D0t/J+O.G0[Bl_^kpl#YC+^h>*9Ni.&Q9a*F&T--[01miX==NNdet<m1DrHhmGăU"Uj8mEW&X5YEO7Vh2MPB*3w*Odnlsowx.w.F6hXUo3GkJZ6Manxaj&BA1M$.^;?AăU"+4]*(:]+wU^En-qRs+uvR[]G;e_,2\j\s]N9DHMdWEl_$<btwHdo11\ZH#_jLo)ăU"wu$SE#vqWEJql]1bYgBsVFJ>vvErde1sVmlj]MExM>%'Zr+Fbfm;8BJv[:/+8r_ăU"e-&P#Z4o4K_,t4)5BP_1>mE7Y;o2e'=t(x.tg'_MT[&Thveh*$*>6HjexIugS4ZăU",]5=:Us5'hRP1gpVQ_h[=cn=K0c2#K0$4qDWcbNKhEnT[VAQ$hNq^^gR3e7VbTiăU"mX.2o#)oH\FN\fJN\3&ckro/rctV($tvo=/pv#6eJ>/=2&baR+x<f5C&8$s3miMăU"oiZZ166Y;4^tLB-(U.Xl;Br'2f8vJNuvcHN>bMo;kOIVod;ZSW6.07F>C9WGpf7ăU"86C*^mV'6J/gQ(T*[p59/0SgEma'6J+gjTQ*?Ofa(J'D)-bM4>XTpuR6^#W-b1DăU">h-p;IJDIX-NR*o[E-O$WAJmoV8/0(qUc4TC9a*DPa%L84MPgSn8^I]aP/\:8oxăU"-SM#VrD\wFq<?W?i2CQq=1nB:UG6-xa^y9-=R>yTq7yZ,q=Oi_isBlCt(IbOq7BăU"7Fwjx4E4e):WNJy/QN4=V=y4RYV_TG)jgTZ,3]Xs]V=_s>IC:hXkEo7U4msm:U7ăU"LVr$6DfSbq\Jawf;L9uO]TNp+c2J=odn2.YZpWa%o([3TtBVUYmUQ-MgpVo/WV_ăU"I$>tV)\:=SFj/X,KvgNd5(MpE')8xV0c?o)2zPNwpwB>,>]N7EfB=Sviz^:'v%VăU"eUB9;ry/htqhL*<Mx'FOx6iLhI6Ih&f#BH2l(9%,Z.FC'tY?QnY8VWuD*BSiI^UăU"=8lUpIFITrIu0sZ#T)F172cnDZ.YktY4?>.1daZ%7MV1k5)p40_*?VvHEnw87qKăU"<A9]0vp9_BH'6RtbPEWs(#Ke>M03iGJ+R4Bf)=n[CNl,v8?[[Asa1LpJw&Q,0LfăU"Pur)B]iv-7L,,E8auc(.-#IUl9L):ctWL83?BU[VjLwV2rn/Xbad3zHEl487<edăU"q;[<,.nBKIUVIVK2.VTiLNlUI%lIkqL*b]pD-dPWo2ZK5T2but8XH%vo)X>TIorăU"[(ia1DuJZeVgaKE5L\;F\[DToPE.?\SSYH#Y,ZoqFEReLnn>8QO9+jI*h<<]qAHăU"/])[p&F.G1>=vEYrfZlbHSIq..)7xS_+xf>-A.6_(Q]Iki6Xtu8/n+G?bb\;:LoăU"2LeK3Nj,=zT'25lec;8P6x=_,y'Ii02O\Za%poDE%4O$#Qt=&Un]ZaZ6(Jgb^J-ăU"DXna?_G*4?krwLl:E=e><09#8SmMFO25gEJ?wnm3#Nc7gAXaUf?j9=g,LUv-#[eăU"Mye0R=38prT)NjgPE2ZD=&;.#T$[a7>mUrBpm6<QB)<&8nw.4kcs\J4wragXq4]ăU"fWmWqZv0NpXT72]$x-W>Xv6+:cAbmCMUCuVur1==A'T;JkG%)1UN0vGf+LX]pHHăU".*,]/(JVL\C\h,jgV1HgmkX]=<J0SVBH5vGT;Kvf2WHrx,=doh>NFy+E6N0)>s^ăU":A$2[S>in=gw2EZ%UyW)_M_)YTSQJh#Ac_yj#%joZewbv>GC>#(nl)PF_c-E=L0ăU"58/&Dqk^HhduCl/1-5JS3?S.isXid89B;52jAg8.6t-:kC<P#>30&93\VD0vj8văU"o/YLe:mV,GEiP5,z+PLBg<<XhF&)<ouBW9Hi9d$BGLN37mXMml$z]o=HL8G,7/]ăU"VedI^qAJIjhn<B566U>P#(PJeKM%ESHU=NMjA?%cV_,-$m/$3mB#X8d#DE1DNKnăU"[]a>><$A'k?IXWP$RIkE[?UEARe[q2]/%kuXgWR$T.=n4I)\$qk83k+=,hFm[dHăU"^[U'GmCH7;k_WOw9Wd#6#HECkY=h-HA'kR;W+gA$7ke7UwCm7>HD=:N6]s(keXwăU"':mJHWN[um#6<H=Ika[Ga>jV+;a$4>>(#A(M[;/3%HH4WN+X$VL=Hg$Rl=r&ak/ăU"Uk.MH*>?RGA3gkm0]S(kwlh$l[uMX$,[-5=mHdHr[5HEAP[<e0]ZakS=R'Dm$HpăU"B[5:'AckU$X>X;+=rPHR,>b5]]5Hh+WkCHKhXAg\$4=b,0]hkUc1]2dkc0].-HnăU"WZKDA#Ikc2s)n$5H#L>>/]]pk7)13=t8[;JF==$)&N:/Vr)_Z58WkjAH-5M1,.VăU"T>Ft&ju98GMCt=PCHQE+s:(pWZKLGYKXZl+LY+sXLl$ZEBHboY[lpa4rJ[up$wmăU"Z#YZ%\JPK<+)N_2Q9&y9Kfr2=azj[^J,*D)^,Ew:+KfJOW'*.EJ0dx\+63Hw08xăU"jNWe&.9nG-#fb\-XfnGVH4oSj;wq'J6I6H-HgKx6h>(mjQy5zt\=1d%fE6eDDnRăU"gLdug/lyt.tbnTIn\-79+sjXjl0)<rNy4Xl9.'pPcI9ljpPS3^o67l-W($ETc\[ăU"6$Avv0$aYy5TvNVGo-&MiZ5'?KCPM5GgnFhIFb3S[JU3)DmnKWWkxlWs30DDg=4ăU"cO.ML&v%,#vi<dJYw\7vy<<*3dg,_D:j8=vV6gl.q[$Y9=hkG+#nj)S-O^aivzqăU"UzSdDUwc)>)$e0JSafa;2x(wz8Ioagjnj:*RyHe9/xowtN3.w.S)LmPamthKJLgăU"n_S-9tJ\%o?^-tTNbORc.$mC<s3Bm$X>3haa;ljo=B5w[E4dCi=pOoHXM4FbHV*ăU"Hfww(QO3kesIX05:m:jf6nnk=Y(8iX4&5MLwsMYUC91lbwh7liUwf=uuLn7l&5NăU"3lwVF2c_bf]-#'dIf?R]QazsL>Z14m9;pNI#YTOdd<q=NTU7#RpJ.ECf]w*v8XlăU"(]vax8oM,FbT:kHtjw^S0DNUpqvSq-XL)cwHgN++>[?7Ao71M:SLt]Ztg(F\%;IăU"GbZCp.X1F0ANX1Y68rUGLV=$pa&qRLT97JqbPX#qZVJ9LC+bu9*Y6y(n^>-qY3IăU"9blQHwK]93(p&+($HEsAiF7#1)q2zP%h[9QlV_VE*cWwW+W:C[a$C6Ldq7Dkmm^ăU"i^km3,WmiLd%om??r23F0N'[#V.Z[]JgJOn.AJQ#VvuTI_Vq&4imyVF%udd]'6/ăU"YP+e)-E[x%63b,tJo7w'^:C?'MFS()vQ43G44J(C;*(?TzniwL%?r2l/gXHt0H;ăU"fNEbH9W(NIa,c2hZDJiCG6Bl+^=H_A-M(im33TK)98$W$',kDThjTM_l&g\(uUHăU"gw'SN>4N'wDFxlcXa'[9.QyIPIOoedeeQV-9uGAMXm.$5E$4g%q50s5qQQE59;^ăU"r>];y;0J5;uu:<5TWLRx(hQU+4*6,LAHM5x6-tu(-KQlFy/N.4t5*$40lnutDHcăU"F9ZLX/_^0],wz=ZdeRHJ(*xH-)Q^TWP%eAi<c[MqC_,L=0_G:%xevfnu:_l?0>GăU"wMfzGX#pNyIq&O.i?oRQtJgzOMqvt_V[3;p7b;^6=Na&r4?FE;S/dpGzLn(H4n(ăU":EH;f4U(Q(ZPBf3ad55[J+w-g\Jt4z.jlM8#D)Q3LiiLKQ--2PBcSFNo9rr2sCfăU":PD&Ml(%Ajf);fiMged&iiS%2TH<GDs56V^1zKlOq.T(-g)FhCPFbC%LT,P(r:QăU",Q-.MLYjH&s1Vq1jA<ec:$eXR&Y3*$BGDRYp%LQxw[49UtpE*6K>>$,&oC,CuX2ăU"Zk<<72^bo)RwlximjQZU;b(wmw']kPGVtq2g$UxH%%;VS5j*6ehmanKg:%+IqAsăU"1*pAJ=Vtd7APfQ)#D#T,^;5dH:gnO6jKrg83A6S4.n.N\u)GgjC1OL=VA#VdhHgăU"kztV_5*?C#zPyAODY:&yRZ$I\:^lewT..-=vrKGYh9PT?A[m+jaHZqKlAn69CyJăU"\to/CUOYrAUomjlenQvLf4'F^+P'5$_CfT&O9>Wz&4:pHe(OPU'eY#_Vs+/BupoăU"uNFP)9mpTZL(>'bus[Nj^.N9h$)AgO/8n%P]F-D>$S>yK>$\M[giSd.q$+.:<;QăU"L*g]9(qAms8v=a'AV:'DHBwB>BlLFEl+fC0:t.-u7i;[b47B%ll$s^c$[8s'8%uăU"p%&'9%%9%%%R-%Vz]JKV8;sk;'%%%Y.%%%/%%%%%%%%%&%RE%/P%%%%%Lq81E24ăU"B0S)18up%&'9%%9%%%I-%qXfmK^I%%&';#%%V3%%%1%%%%%%%%%&%RE%/P'c'%%ăU"M9?46ME84FLS10B%up&'%9%9%%%%-%;BsRKu=V_6&A6%%%FE%%%0%%%%%%%%%%%ăU"E%*/P;>%%%qn(g%jx%fSqn%gup&%'9%9%%%%-g%\tJ^Kdy3,A=7%%%BF%%%0%%%ăU"%%%%%%%%Ej%/P*#O%%;M81E4DB0S#);1up%*+%%%%%)%7)%]%.%%mb%%%%%ăEND SUBăV2ăCLOSE:IF S=12AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDmitry Brant                   JPEG VIEWER V1.2 FOR SCREEN 13 dmitrybrant.hypermart.net      07-31-99 (15:33)       QB, QBasic, PDS        652  22883    JPEG13.BAS  'JPEG Viewer by Dmitry Brant          Version 1.2ă'ă'http://dmitrybrant.hypermart.netă'dmitrybrant24@hotmail.comă'ă'This program is freeware. Use freely, but give me credit where credită'is due. Feel free to make improvements, additions, and optimizations.ă'If you do, please tell me or show me what you have done.ă'This program is also provided on an "as-is" basis.ă'I can't be held responsible for the mischevious deeds you may performă'with the aid of this program.ă'ă'NOTE: This specific edition of the viewer is designed to work with SCREEN 13.ă'Because SCREEN 13 does not support packed-pixeling (HiColor), the JPG filesă'can only be displayed in grayscale.ă'The program will create a grayscale palette (0 to 255), and display only theă'Luminance (Y) attribute of the JPG file.ăăă'This is the only SUB that has to be called to display the image.ăDECLARE SUB PutJPG13 (file$, x0%, y0%)ă    'file$ = filename of the JPG imageă    'x0, y0 = coordinates where to start drawing the imageăăă'These other functions are called from within the PutJPG sub.ă'They are useless by themselves.ăDECLARE FUNCTION Decode% (inArray() AS ANY, hnum%)ăDECLARE FUNCTION ReceiveBits% (cat%)ăDECLARE FUNCTION NextBit% ()ăDECLARE SUB ToRGB (y0%, cb0%, cr0%, r0%, g0%, b0%)ăDECLARE SUB GetBlock (vector%(), HuffDC() AS ANY, HuffDCNum%, HuffAC() AS ANY, HuffACNum%, Quant%(), QuantNum%, dcCoef%)ăDECLARE FUNCTION GetHuffTables% ()ăDECLARE FUNCTION GetQuantTables% (inArray() AS INTEGER)ăDECLARE FUNCTION GetSOS% ()ăDECLARE FUNCTION GetWord& ()ăDECLARE FUNCTION GetByte% ()ăDECLARE FUNCTION GetSOI% ()ăDECLARE FUNCTION GetImageAttr% ()ăDEFINT A-ZăăTYPE JpegType                   'some type definitions (for coherence)ă    rows AS INTEGER             'image heightă    cols AS INTEGER             'image widthă    SamplesY AS INTEGER         'sampling ratiosă    SamplesCbCr AS INTEGERă    QuantTableY AS INTEGER      'quantization table numbersă    QuantTableCbCr AS INTEGERă    HuffDCTableY AS INTEGER     'huffman table numbersă    HuffDCTableCbCr AS INTEGERă    HuffACTableY AS INTEGERă    HuffACTableCbCr AS INTEGERă    NumComp AS INTEGER          'number of componentsăEND TYPEăăTYPE HuffmanEntry               'a type for huffman tablesă    Index AS LONGă    Code AS INTEGERă    Length AS INTEGERăEND TYPEă                                'a few global variablesăCOMMON SHARED curByte, curBits, jfile, EOI, DCTables, ACTables, QTablesăCOMMON SHARED a$ăDIM SHARED image AS JpegTypeăDIM SHARED HuffmanDC(0 TO 1, 0 TO 255) AS HuffmanEntryăDIM SHARED HuffmanAC(0 TO 1, 0 TO 255) AS HuffmanEntryăDIM SHARED dct(0 TO 7, 0 TO 7, 0 TO 7, 0 TO 7) AS INTEGERăă'--------- A demonstration ----------ăăCLSăFILES "*.jpg": PRINTăINPUT "Enter a valid .JPG image file name> ", f$ăăSCREEN 13: COLOR 255ăOUT &H3C8, 0            'create the grayscale paletteăFOR i = 0 TO 255: OUT &H3C9, i \ 4: OUT &H3C9, i \ 4: OUT &H3C9, i \ 4: NEXT iăăPutJPG13 f$, 0, 0       'draw the image at offset 0,0ăăBEEPăSYSTEMăă'--------- End of Demo ----------ăăăZig2:        'Zigzag patterns for reordering quantization tables and vectorsăDATA 0,0ăZigzagPositions:ăDATA 0,1,1,0ăDATA 2,0,1,1,0,2ăDATA 0,3,1,2,2,1,3,0ăDATA 4,0,3,1,2,2,1,3,0,4ăDATA 0,5,1,4,2,3,3,2,4,1,5,0ăDATA 6,0,5,1,4,2,3,3,2,4,1,5,0,6ăDATA 0,7,1,6,2,5,3,4,4,3,5,2,6,1,7,0ăDATA 7,1,6,2,5,3,4,4,3,5,2,6,1,7ăDATA 2,7,3,6,4,5,5,4,6,3,7,2ăDATA 7,3,6,4,5,5,4,6,3,7ăDATA 4,7,5,6,6,5,7,4ăDATA 7,5,6,6,5,7ăDATA 6,7,7,6ăDATA 7,7ăăFUNCTION Decode (inArray() AS HuffmanEntry, hnum)ăăIF GetByte = 255 THENă    n1 = GetByteă    IF n1 >= &HD0 AND n1 <= &HD7 THENă        n2 = 2 ^ curBits - 1ă        SEEK #jfile, SEEK(jfile) - 2ă        IF curByte AND n2 = n2 THEN    'if the remaining bits are 1ă            EOI = 1ă            Decode = 0ă            EXIT FUNCTIONă        END IFă    ELSEă        SEEK #jfile, SEEK(jfile) - 2ă    END IFăELSEă    SEEK #jfile, SEEK(jfile) - 1ăEND IFăăcurVal& = 0ăMatchFound = -1ăFOR l = 1 TO 16    'cycle through 16 possible Huffman lengthsă    curVal& = curVal& * 2 + NextBită    IF EOI THEN EXIT FUNCTIONăă    FOR i = 0 TO 255              'look for a match in the Huffman tableă        IF inArray(hnum, i).Length > l THEN EXIT FORă        IF inArray(hnum, i).Length = l THENă            IF inArray(hnum, i).Index = curVal& THEN MatchFound = i: EXIT FORă        END IFă    NEXT iă    IF MatchFound > -1 THEN EXIT FORăNEXT lăăIF MatchFound = -1 THEN BEEP: Decode = -1: EXIT FUNCTIONăăDecode = inArray(hnum, MatchFound).Code  'return the appropriate codeăEND FUNCTIONăăSUB GetBlock (vector(), HuffDC() AS HuffmanEntry, HuffDCNum, HuffAC() AS HuffmanEntry, HuffACNum, Quant(), QuantNum, dcCoef)ăDIM array2(0 TO 7, 0 TO 7)ăEOI = 0ăătemp0 = Decode(HuffDC(), HuffDCNum)   'Get the DC coefficientăIF EOI THEN d = 0ădcCoef = dcCoef + ReceiveBits(temp0)ăvector(0, 0) = dcCoef * Quant(QuantNum, 0, 0)ăăxpos = 0: ypos = 0ăRESTORE ZigzagPositionsăACcount = 1ăDOă    d = Decode(HuffAC(), HuffACNum)ă    IF EOI THEN d = 0ăă    zeros = d \ 16ă    bits = d AND 15ă    bitVal = ReceiveBits(bits)ăă    IF zeros = 0 AND bits = 0 THEN   'EOB Encounteredă        FOR j = ACcount TO 63ă            READ xpos, yposă            vector(xpos, ypos) = 0ă        NEXT jă        EXIT DOă    ELSEIF zeros = 15 AND bits = 0 THEN  'ZRL encounteredă        FOR j = ACcount TO ACcount + 15ă            READ xpos, yposă            vector(xpos, ypos) = 0ă        NEXT jă        ACcount = ACcount + 16ă    ELSEă        FOR j = 1 TO zerosă            READ xpos, yposă            vector(xpos, ypos) = 0ă            ACcount = ACcount + 1ă            IF ACcount >= 64 THEN EXIT DOă        NEXT jă        READ xpos, yposă        vector(xpos, ypos) = bitVal * Quant(QuantNum, xpos, ypos)ă        ACcount = ACcount + 1ă    END IFă    IF ACcount >= 64 THEN EXIT DOăLOOPăăFOR x = 0 TO 7            'the IDCT routine (this SOB flies!)ă    FOR y = 0 TO 7ă        sum = 0ă        FOR v = 0 TO 7ă            FOR u = 0 TO 7ă                temp& = vector(u, v)ă                IF temp& THEN temp& = temp& * dct(x, y, u, v) / 512ă                sum = sum + temp&ă            NEXT uă        NEXT vă        array2(x, y) = sumă    NEXT yăNEXT xăăFOR u = 0 TO 7ă    FOR v = 0 TO 7ă        vector(u, v) = array2(u, v) + 128ă    NEXT văNEXT uăăEND SUBăăFUNCTION GetByteăGET #jfile, , a$ăGetByte = ASC(a$)ăEND FUNCTIONăăFUNCTION GetHuffTablesăDIM HuffAmount(1 TO 16)ăl0 = GetWordăc0 = 2ăDOătemp0 = GetByte: c0 = c0 + 1ăt0 = (temp0 AND 16) \ 16ătemp0 = temp0 AND 15ăSELECT CASE t0ă    CASE 0        'DC Tableă        total = 0ă        FOR i = 1 TO 16ă            temp1 = GetByte: c0 = c0 + 1ă            total = total + temp1ă            HuffAmount(i) = temp1ă        NEXT iă        FOR i = 0 TO total - 1ă            HuffmanDC(temp0, i).Code = GetByte: c0 = c0 + 1ă        NEXT iă        curNum& = 0ă        curIndex = -1ă        FOR i = 1 TO 16ă            FOR j = 1 TO HuffAmount(i)ă                curIndex = curIndex + 1ă                HuffmanDC(temp0, curIndex).Index = curNum&ă                HuffmanDC(temp0, curIndex).Length = iă                curNum& = curNum& + 1ă            NEXT jă            curNum& = curNum& * 2ă        NEXT iă        DCTables = DCTables + 1ă    CASE 1ă        total = 0ă        FOR i = 1 TO 16ă            temp1 = GetByte: c0 = c0 + 1ă            total = total + temp1ă            HuffAmount(i) = temp1ă        NEXT iă        FOR i = 0 TO total - 1ă            HuffmanAC(temp0, i).Code = GetByte: c0 = c0 + 1ă        NEXT iă        curNum& = 0ă        curIndex = -1ă        FOR i = 1 TO 16ă            FOR j = 1 TO HuffAmount(i)ă                curIndex = curIndex + 1ă                HuffmanAC(temp0, curIndex).Index = curNum&ă                HuffmanAC(temp0, curIndex).Length = iă                curNum& = curNum& + 1ă            NEXT jă            curNum& = curNum& * 2ă        NEXT iă        ACTables = ACTables + 1ăEND SELECTăLOOP UNTIL c0 >= l0ăGetHuffTables = 1ăEND FUNCTIONăăFUNCTION GetImageAttrătemp4& = GetWord            'Length of segmentătemp0 = GetByte             'Data precisionăIF temp0 <> 8 THEN GetImageAttr = 0: EXIT FUNCTION   'we do not support 12 or 16-bit samplesăimage.rows = GetWord        'Image Heightăimage.cols = GetWord        'Image Widthătemp0 = GetByte             'Number of componentsăFOR i = 1 TO temp0ă    id = GetByteă    SELECT CASE idă        CASE 1ă            temp1 = GetByteă            image.SamplesY = (temp1 AND 15) * (temp1 \ 16)ă            image.QuantTableY = GetByteă        CASE 2, 3ă            temp1 = GetByteă            image.SamplesCbCr = (temp1 AND 15) * (temp1 \ 16)ă            image.QuantTableCbCr = GetByteă    END SELECTăNEXT iăGetImageAttr = 1ăEND FUNCTIONăăFUNCTION GetQuantTables (inArray() AS INTEGER)ăl0 = GetWordăc0 = 2ăDOătemp0 = GetByte: c0 = c0 + 1ăIF temp0 AND &HF0 THENă    GetQuantTables = 0: EXIT FUNCTION  'we don't support 16-bit tablesăEND IFătemp0 = temp0 AND 15ăRESTORE Zig2ăxp = 0: yp = 0ăFOR i = 0 TO 63ă    READ xp, ypă    inArray(temp0, xp, yp) = GetByte: c0 = c0 + 1ăNEXT iăQTables = QTables + 1ăLOOP UNTIL c0 >= l0ăGetQuantTables = 1: EXIT FUNCTIONăEND FUNCTIONăăFUNCTION GetSOIăa$ = "  "ăSEEK #jfile, 1ăGET #jfile, , a$ăIF a$ = CHR$(255) + CHR$(&HD8) THEN d = 1 ELSE d = 0ăa$ = " "ăGetSOI = dăEND FUNCTIONăăFUNCTION GetSOSătemp4& = GetWordătemp0 = GetByteăIF temp0 <> 1 AND temp0 <> 3 THEN GetSOS = 0: EXIT FUNCTIONăimage.NumComp = temp0ăFOR i = 1 TO temp0ă    temp1 = GetByteă    SELECT CASE temp1ă        CASE 1ă            temp2 = GetByteă            image.HuffACTableY = temp2 AND 15ă            image.HuffDCTableY = temp2 \ 16ă        CASE 2ă            temp2 = GetByteă            image.HuffACTableCbCr = temp2 AND 15ă            image.HuffDCTableCbCr = temp2 \ 16ă        CASE 3ă            temp2 = GetByteă            image.HuffACTableCbCr = temp2 AND 15ă            image.HuffDCTableCbCr = temp2 \ 16ă        CASE ELSEă            GetSOS = 0: EXIT FUNCTIONă    END SELECTăNEXT iăa$ = "   "      '3 reserved bytes (?)ăGET #1, , a$ăa$ = " "ăGetSOS = 1ăEND FUNCTIONăăFUNCTION GetWord&ăGET #jfile, , a$ăl0& = CLNG(ASC(a$)) * 256ăGET #jfile, , a$ăl0& = l0& + ASC(a$)ăGetWord& = l0&ăEND FUNCTIONăăFUNCTION NextBităăt0 = 2 ^ curBitsăv0 = -((curByte AND t0) <> 0)ăăcurBits = curBits - 1ăIF curBits < 0 THENă    curBits = 7: curByte = GetByteă    IF curByte = 255 THENă        IF GetByte = &HD9 THEN EOI = 1: EXIT FUNCTIONă    END IFăEND IFăăNextBit = v0ăEND FUNCTIONăăSUB PutJPG13 (file$, x0, y0)ăDIM YVector1(0 TO 7, 0 TO 7)              '4 vectors for Y attributeăDIM YVector2(0 TO 7, 0 TO 7)ăDIM YVector3(0 TO 7, 0 TO 7)ăDIM YVector4(0 TO 7, 0 TO 7)ăDIM CbVector(0 TO 7, 0 TO 7)              '1 vector for Cb attributeăDIM CrVector(0 TO 7, 0 TO 7)              '1 vector for Cr attributeăDIM QuantTable(0 TO 1, 0 TO 7, 0 TO 7)    '2 quantization tables (Y, CbCr)ăăFOR x = 0 TO 7           'Initialize our cosine tableă FOR y = 0 TO 7ă    FOR u = 0 TO 7ă     FOR v = 0 TO 7ă        t! = COS((2 * x + 1) * u * .1963495) * COS((2 * y + 1) * v * .1963495)ă        IF u = 0 THEN t! = t! * .707107ă        IF v = 0 THEN t! = t! * .707107ă        dct(x, y, u, v) = t! * 128ă     NEXT vă    NEXT uă NEXT yăNEXT xăăjfile = FREEFILEăa$ = " "   'The ideal byteăOPEN file$ FOR BINARY AS #jfileăIF LOF(jfile) = 0 THEN CLOSE #jfile: KILL file$: PRINT "File does not exist.": EXIT SUBăIF GetSOI = 0 THEN PRINT "Not a valid JPEG/JFIF file.": CLOSE #jfile: EXIT SUBăăăQTables = 0                   'Initialize some checkpoint variablesăACTables = 0ăDCTables = 0ăRestart& = 0ăăDO                            'Primary control loop for markersă    IF GetByte = 255 THEN     'Marker Foundă        d = GetByteă        SELECT CASE d         'which one is it?ă            CASE &HC0         'SOF0ă                IF GetImageAttr = 0 THEN PRINT "Error getting Start Of Frame 0 Marker.": CLOSE #jfile: EXIT SUBă            CASE &HC1         'SOF1ă                IF GetImageAttr = 0 THEN PRINT "Error getting Start Of Frame 1 Marker.": CLOSE #jfile: EXIT SUBă            CASE &HC9         'SOF9ă                PRINT "Arithmetic Coding Not Supported.": CLOSE #jfile: EXIT SUBă            CASE &HC4         'DHTă                IF ACTables < 2 OR DCTables < 2 THENă                    IF GetHuffTables = 0 THEN PRINT "Error getting Huffman tables.": CLOSE #jfile: EXIT SUBă                END IFă            CASE &HCC         'DACă                PRINT "Arithmetic Coding Not Supported.": CLOSE #jfile: EXIT SUBă            CASE &HDA         'SOSă                IF GetSOS = 0 THEN PRINT "Error getting SOS marker.": CLOSE #jfile: EXIT SUBă                IF (DCTables = 2 AND ACTables = 2 AND QTables = 2) OR image.NumComp = 1 THENă                    EOI = 0ă                    EXIT DO                 'Go on to secondary control loopă                ELSEă                    PRINT "Unexpected file format.": CLOSE #jfile: EXIT SUBă                END IFă            CASE &HDB         'DQTă                IF QTables < 2 THENă                    IF GetQuantTables(QuantTable()) = 0 THEN PRINT "Error getting quantization tables.": CLOSE #jfile: EXIT SUBă                END IFă            CASE &HDD         'DRIă                Restart& = GetWordă            CASE &HE0         'APP0ă                temp1& = GetWord   'Length of segmentă                a$ = "     "ă                GET #1, , a$       'JFIF headeră                a$ = " "ă                temp0 = GetByte    'Major revisionă                temp0 = GetByte    'Minor revisionă                temp0 = GetByte    'Density definitionă                temp0 = GetByte    'X-Densityă                temp0 = GetByte    'Y-Densityă                temp0 = GetByte    'Thumbnail Widthă                temp1 = GetByte    'Thumbnail Heightă            CASE &HFE         'COMă                a$ = SPACE$(GetWord - 2)ă                GET #1, , a$       'Retrieve commentă                a$ = " "ă        END SELECTă    END IFă    r$ = INKEY$ă    IF r$ = CHR$(27) THEN CLOSE #jfile: EXIT SUBăLOOP UNTIL EOF(1)ăăxpos = 0: ypos = 0ădcY = 0: dcCb = 0: dcCr = 0ăxindex = 0: yindex = 0: mcu = 0ăr = 0: g = 0: b = 0ăăcurBits = 7: curByte = GetByteăăDEF SEG = &HA000ăăSELECT CASE image.NumCompăCASE 3ă    SELECT CASE image.SamplesYă    CASE 4ă        DOă            GetBlock YVector1(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock YVector2(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock YVector3(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock YVector4(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock CbVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCbă            GetBlock CrVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCră            FOR i = 0 TO 7ă                FOR j = 0 TO 7ă                    y = YVector1(i, j)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            FOR i = 0 TO 7ă                FOR j = 8 TO 15ă                    y = YVector2(i, j - 8)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            FOR i = 8 TO 15ă                FOR j = 0 TO 7ă                    y = YVector3(i - 8, j)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            FOR i = 8 TO 15ă                FOR j = 8 TO 15ă                    y = YVector4(i - 8, j - 8)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            xindex = xindex + 16ă            IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 16: mcu = 1ă            IF mcu = 1 AND Restart& <> 0 THEN 'execute the restart intervală                curByte = GetByte: curByte = GetByte: curByte = GetByteă                curBits = 7ă                dcY = 0: dcCb = 0: dcCr = 0: mcu = 0ă            END IFă            r$ = INKEY$ă            IF r$ = CHR$(27) THEN EXIT DOă        LOOP UNTIL EOF(jfile) OR yindex >= image.rows OR yindex > 199ă    CASE 2ă        DOă            GetBlock YVector1(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock YVector2(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock CbVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCbă            GetBlock CrVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCră            FOR i = 0 TO 7ă                FOR j = 0 TO 7ă                    y = YVector1(i, j)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            FOR i = 0 TO 7ă                FOR j = 8 TO 15ă                    y = YVector2(i, j - 8)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            xindex = xindex + 16ă            IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8: mcu = 1ă            IF mcu = 1 AND Restart& <> 0 THEN 'execute the restart intervală                curByte = GetByte: curByte = GetByte: curByte = GetByteă                curBits = 7ă                dcY = 0: dcCb = 0: dcCr = 0: mcu = 0ă            END IFă            r$ = INKEY$ă            IF r$ = CHR$(27) THEN EXIT DOă        LOOP UNTIL EOF(jfile) OR yindex >= image.rows OR yindex > 199ă    CASE 1ă        DOă            GetBlock YVector1(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă            GetBlock CbVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCbă            GetBlock CrVector(), HuffmanDC(), image.HuffDCTableCbCr, HuffmanAC(), image.HuffACTableCbCr, QuantTable(), image.QuantTableCbCr, dcCră            FOR i = 0 TO 7ă                FOR j = 0 TO 7ă                    y = YVector1(i, j)ă                    IF y < 0 THEN y = 0ă                    IF y > 255 THEN y = 255ă                    xj = xindex + j: yi = yindex + iă                    o& = CLNG(yi + y0) * 320 + xj + x0ă                    IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă                NEXT jă            NEXT iă            xindex = xindex + 8ă            IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8: mcu = 1ă            IF mcu = 1 AND Restart& <> 0 THEN 'execute the restart intervală                curByte = GetByte: curByte = GetByte: curByte = GetByteă                curBits = 7ă                dcY = 0: dcCb = 0: dcCr = 0: mcu = 0ă            END IFă            r$ = INKEY$ă            IF r$ = CHR$(27) THEN EXIT DOă        LOOP UNTIL EOF(jfile) OR yindex >= image.rows OR yindex > 199ă    END SELECTăCASE 1ă    DOă        GetBlock YVector1(), HuffmanDC(), image.HuffDCTableY, HuffmanAC(), image.HuffACTableY, QuantTable(), image.QuantTableY, dcYă        FOR i = 0 TO 7ă            FOR j = 0 TO 7ă                y = YVector1(i, j)ă                IF y < 0 THEN y = 0ă                IF y > 255 THEN y = 255ă                xj = xindex + j: yi = yindex + iă                o& = CLNG(yi + y0) * 320 + xj + x0ă                IF xj < image.cols AND yi < image.rows AND yi + y0 < 200 AND xj + x0 < 320 THEN POKE o&, yă            NEXT jă        NEXT iă        xindex = xindex + 8ă        IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8: mcu = 1ă        IF mcu = 1 AND Restart& <> 0 THEN 'execute the restart intervală            curByte = GetByte: curByte = GetByte: curByte = GetByteă            curBits = 7ă            dcY = 0: mcu = 0ă        END IFă        r$ = INKEY$ă        IF r$ = CHR$(27) THEN EXIT DOă    LOOP UNTIL EOF(jfile) OR yindex >= image.rows OR yindex > 199ăEND SELECTăăDEF SEGăCLOSE #jfileăEND SUBăăFUNCTION ReceiveBits (cat)ătemp0& = 0ăFOR i = 1 TO cată    temp0& = temp0& * 2 + NextBităNEXT iăăIF temp0& >= 2 ^ (cat - 1) THENă    ReceiveBits = temp0&ăELSEă    ReceiveBits = -(2 ^ cat - 1) + temp0&ăEND IFăEND FUNCTIONăăSUB ToRGB (y0, cb0, cr0, r0, g0, b0)ăr0 = y0 + 1.402 * (cr0 - 128)ăg0 = y0 - .34414 * (cb0 - 128) - .71414 * (cr0 - 128)ăb0 = y0 + 1.772 * (cb0 - 128)ăăIF r0 > 255 THEN r0 = 255ăIF r0 < 0 THEN r0 = 0ăIF g0 > 255 THEN g0 = 255ăIF g0 < 0 THEN g0 = 0ăIF b0 > 255 THEN b0 = 255ăIF b0 < 0 THEN b0 = 0ăEND SUBăDmitry Brant                   JPEG VIEWER V1.2 FOR MODE-X    dmitrybrant.hypermart.net      07-31-99 (15:33)       QB                     335  22140    JPEGX.BAS   ' JPEG Viewer v1.2 for Mode-XăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"JPEGX.ZIP",4^6:Z&=16329:?STRING$(50,177);ăU"%up()%9%%%#-%%_9'?-O/l,p3%%%:A%%%.%%%%rt.ij'S[qng^_(NyTrPD8hHt7ăU"m./S%p59?a[]1Sp(mVXZ3k^ZGN+A_e3e7-7Qs1#86nt+0l59Gm1b_Bxs]<=e7>?ăU"jcMspxn=*Plw?A#s^L-8[n/e]qoG1;GO,9-TRV3-ou(/X]-<\tl)tWd8g/5V;NeăU"k]fq_Xuh6h7YJhtDuX$6h;JbR%&T%7I_NpQAWuz8MZ[Bhe/(b:O)F5'ArE'\'l+ăU"(*6]$p%3PycIFdhB,^HjAz%T(z/0Yee#snPPr6<oDW1jdD)vJQC9q-Rs17/3AOGăU"m8H\g%*BJ<5-MPYsHFI(-hs:&Y1'0*tzIE_6(0&$gb-J6E$4BgG:V0tg#D/mk%NăU"*P$s&^6P:%DLd+UIO<4;wOqvv'O<3M(Ck[NE(qNlXfq?GeWr$abn6Bm=brazdcnăU"lS(fIzb3rQ=X'<unlCD.)9>W$lo'2lEG9lm_#fwp_:.vAq3WHHB.sf.bpUq5j4=ăU"b*HH$0SAbldJJvhX-1\lIM$wBrfd(gYb4qbWQs&h/J?]::ivz9VN/VPQiB%:0HOăU"l_Hk;nE4IPIPP&F3\CYc9=y,dWL[A,wKIJO<.qL,b6P)-XSNapL#NqPPBO^_,zgăU"u.pc$8:]USZhh)UfWyLT[XFP&Hpl1_*>JfImrkq\8lW9&XW)XO8\nwag,APc#e+ăU"A7rYpoIEw4eBoYdtV08D?aRE\#wp5yH>'aVo+n,3BEiAu(sZUECKEqR6OgqzoYLăU"L=x].cJJX:ggspN+-IcZ/C7[7M+f$]s$rtrk)FHlV7vYp=u,np4h']Cb:cJct>'ăU"V'FjdS)&aCMNA'$9-:\wJ0RjEoMBaZC1HhSOAHMZ#LSa\3egQb_7IH-7nDO^kGcăU"N-xCilG8askrml<Ci,TsKshq.%<K??.ZV#nBxL?rZdo=xn9m)hI9E0K1yPGvu\4ăU"j4Oa&]^HP;=#EPyYV2%q=oSk*tKd/WGpsq4j:X_0l]\*R5iLDn&ic\bfk\UN5(văU"P1Op$4OloToHWMpJE8(\:-M_X]F)8(yC]$N_Jfjc<DC#.Z%NuR#3E<#hhB3WAf$ăU"+5'R)49k]1F4D+B?KkvIG40\U;HS0'xf%:HdcUzgb4t.%w)lCV:QKPIpl=J(kjuăU"B:Kel2Ph^oGE3S8;dA8'GAwLHJ=&;V7EfF+NcDcJ^ps7aT<KH\=2Su-$joT&]EnăU"hG4X%H[O:Cd$JiT65;ti]pV<r'('U2\cg8txnN0%LZaHB'Qjm.mqA,4JOw>M7gjăU"uOf7#JIJ7'2z]t:^=DMJ]Z#OOt9YkM5:w(2)et_1l%WyH8wCh?bdau4mig$aEYHăU"YnOe4alO)nD8<sYI\sInT]Za2IH3S#QsDcnTXLW<h^Z6I8PPMSs#WOZ7k,Yg;^9ăU"[XhSFB+jKa^E4>tpH#Z]_^3Lt=.8d&YidfNXftYSPE>p+SfzL-<xk(k.eWZ(%>,ăU"=q&vN?Vkw<w[S*MRjNLxNm&jIYY3.Ly([judBu>2cVuhIz3'**^L(^o9Y*g1)AOăU"*3wPvM5u1_D'b.sd#*SvlDHFB1TDVY#D$1hb#A<fcH1,IV>uP-VFT&7t%F+&I[EăU"SH+-\^mUft1[a^fWTS]<'I[H^O&SF_95%S;CIVf:CfA47#FIzo1bT3>k74Si8VgăU"qa8agI3^EH%-Rhm5o0vy7CF6;\Ti),7?2TH^59o/FF#FaRS7D/FP*;Kq9#YSY>OăU"-Z6+7=('>;*Q].PGS^sV)Y6=aGM)*I[I5W.Bfa4E*EIw0r[aJ+5diwF)*]aL'WLăU"O83N=c'ELY[GXuWW.rF$EF[FinCEn(#JQiUG[K7B=tZ1Tq0vmeh3UQs='[4FN,PăU"qOI9peunD-z8*b$AIwkF;/(P?oB$TsJs^74.wQfk.Tl\XTG8&2Z?3ZK=P4#g7#(ăU"85Pl)_Xf=xL;Jl5k($Tm/29G=QWXo1NeRbKf/??/,1mLHXd3RoU[jNeqkYb952TăU"sB'L-#:L32OT^[nnvh9kVO=c]x^SK62N0]eRX\OrEsj.6%SL8cenN>?ZEA^lBUZăU"aIZ$C+6e^Tj?fm%_ArEI^a92kGM;%5W0_b_tb3g6tP,8.7r?\<Pq6]3(#EL)vEQăU":',S[4#=2s1,l=I\IVe?hgPUi]oV=[BkxSTNtqPSk%=e1lR\=cq$<<7l<?v0.F:ăU"NkrGYqzIK+NRmnmcvpe>fw-e60>d;xYWRe%p6b?4ZLU/LzlwPVO0Z]%J$h\E+oaăU"(ybidtDpp%9U6wZh[B0Ws'Zatef>Eg:='E_(Xtkd1r(v0alXDvowS%;EP=vTJ1văU")NK$oByp+ur+'J4kD6U.'*Gg&Wz8dQXYS.[sP-X#h(5P2VGh3[F5kV=O\5xYr#KăU"$M^h,XRqpOL'kU8WCX/GNdGIc'-9PL'S<+]9W][$#ira6KK8^:8D]iALki&nSRuăU"X2/=u[^L2w#+52J,d05y?>wH)eMDb.nK%+e%YPjJcsB:p95W3RTV<;ZGO*YGi^găU"8wZO^Y*rk]LC%J'.-6iD>Em0UijV)I0g-X(P$hO#1HRccIzYY10.%\DN:ah/z\>ăU"a??cfK;'TB2Ytzh3l,^U]P<x'I$_8jC*&>tGgo4^0,*Z:3=m(XN'E+;7o9*[?6;ăU"UcsAj:m8Ug/5IRvJG&OlBj#d4*[0>d/xGS&-rBCQ<8_c^eP(Uth6JnSK]owhgYbăU"ltWB'odfmXmAS&%67Y$q1S__p=p&$WaqvWcBp0wsr]08H#)zv9n.Jlj1mAi6nm,ăU"MpdcjmgkmL[nJmoc'\D-AWu_<:BuH&VI<)U\=.Z-uErc(#MQAdSMm2=q[y-DYUOăU"X(#T1rM?7)s1=\wZ/6UlTWn=0\$r+178T/g=KLC)uL]+WnxAnB8xC#V\V1h1Gk1ăU"h71Gu-cw>oH'bTSsS]/BEpEjJR)+'9CxE_s;%n%[*dqPBM$5ltu,uEBk=/c_BkjăU"ZoD^=M/bb'a?WQK?%VFDDZ)7KJ\St6s,Y=apAoY00IXql^uUROSn]2I35J0rhT*ăU"c*)id&0W;[yeQrn>)=$]0CP.>orkGU2eLiPGt1H28\ak=4E/n=ng7yt&wAv&)pfăU"n=Y\g>m-9H1*k6A*qDyHe^.FP1m2h=o*Yu1D_rV(BZa(1R_kc(lUmxOaVnC);N?ăU"4m#-]PVXcg9YX*1n##1>I7R]CdF[($C)'s92AC_6zI7YZ]6<Cm=2#W?X63:vchJăU"Z(Jd$:;(n:AyLVX8RvSB8#e=LJTdq$1k,sv+.,:QjT2QV/Gh]Z%Tz#0.yYAn6xWăU"DH(uGMAbvbtar+[kY&t6bpp^R8HAAN&IlAfqFs_e6Nl:q6#U(NMnM/::1=A:3vnăU"U>#KNi5TS##:=LFN%>5-TndzfpH_%WvR(27BDM'J;$$3N^alEGa?p8[a2L]>3t[ăU"Hr28/NcGYzOZGEP,OnB;:Np/:Z5=R)cOVKjZSj=N$u<i2b3H?o^M1Ntq+$)'&BxăU"B[&5_[6-?t)9;<0E/3YD-eJF4-:We*/7nVQ;\3ctDmk+9fr&,H#=GGmZmqGl^mqăU"G,Ymq,,_m7i4n*>;;Qq^$bJ(B>zs7ndI,d19E2[^TUp5'O%[L;kR$/(n0F1=dUpăU"1Ta$/D77HPJT5OicEm<)Uv1k_zK$/(quZO=/x?Hex..Fx(L,74'8QBHxx%hBQb=ăU"X:4ndskT%Y].c'jyqek+sscs4c/iZ#*yl$W>07j4gi*'.2_S$]Nvuc/'wXVi;/uăU"*qW<q'UmthqRiooyAWU_X%S=/rhyvaVTgUFM(_h^a,0q](f2=YZ76?qsZIC8_ajăU"+QC0Os.FV2fhgrv3ZA&4^x7B>2EphvlP%R9#5Ahh:#<THx&EcE1IZ1bCl+9gpRVăU"B*UzLZK[/'Wb$KH:D,Q:Vvmf9CbtCn[_y8AntD,hE9xh[9O)(Io4b%Bc5$rIE6>ăU"H7lpiPKt%i*MB7Om_V^t/\hT'zYTR'5leLBT+r.FQsoUPO$2N0A;ssXDO*'pa+eăU";N-:CX2:[/NA.B%v.V<rKMe5mV=qOeuKEWDGn]>G;i_:7b4eN^sl\GAlZ?G,-SVăU"H1d++o^W3WBi1KE1GGvjhRBSsF\L<d+B+b[zZDx)LovO0.-7c.%RbdDI,swQeR3ăU"dxBt%RVu,o'3Eu,Cfjcl\S%qjpWcqyA(j,2cNqGt+a.j+AA3;k-8uj==sPl2?-hăU"H02#+\-8&x0eV'F=$g3u2s>)siXOriFKIu%IM\c<X=U8k15g,E2i\yv]noHsB0-ăU"Ax6e4zB1f/w(*Yg)nBB2c'cK&1_h6fn#2,8nNgrESm.:)[lto(9IO>IdnCDdQl<ăU"UUfF^R6Qhr*\bm6Hi0,1pJ#wlmS;xM4(f4P?3(vc7Do,PC/Eec5+nw3+]<u?P+LăU";WDoS1L]5QPeZ(RuL>5O6Sz]2\qem%u0a7DMD,f9MKWV:,Jq;;eq^.XpaMm9WJ]ăU"vEVeXm5IEMKG8KHF^$01#X6c-6qm(WJB9$kn.r8:qm+\JB:k<0SuBXK;h40btHQăU"b-v9w>.xoZ^%/]X'jIpa.4,o:B/<dYnK*U4l_/>Ta&/*Z%<\BpP2aunWua-rM#aăU"Ms)\I\BM'v38F,JMjDF=djJ-dfmGl0Z3_$J&EuPj,oi4_*]^[PesdV_u_]<g22HăU"bY#Do_3fBhQzQ-Sj'_HNgOkKpsFxh$tL.Ya4x'bGu8*?G&9xFBw=C'F*)3q')*<ăU"lZ1&_VZiKU,d,nRAL?aUXpZ3WNs%2bwMSs=-oAam%gFh8VqfU2a>#Z./Q2r)RXjăU"L;:>\R*pG]N'gOl88fmCQKKh>_'Sa$(Fll96UaKq7C&ZFx6pt-ep*(>&M'CkwFBăU"7<Wx&%up()%9%%%[-%4*oIK9;2&9n(.%%10%%%-%%%%rt.ij'SRgn.%;0>[k+5văU"CN*x09NmoH^18Sp(zqtb3QPU,9;WPE9%:zp>QV0D?ZeerRtQd4:[lf>P/mw3qYhăU"hlHhZFGggPj*6)gD1?aMk2-OqlvRDPQ9_5?]k[k-wEZ:VA09#RS%w'Pc_+(Qv#.ăU"&aq%VFeIN*xLN2N^iQU1q%%PF[r8KuQX/g&Yj2Z:E#jTL1j4f#s1qBkfk%*>R#0ăU"t.s.qOg<FU?gOEHxm&ngTgY2dYdqG*,*,]K90CTkRYK^&;HaPiw,HM35*Cn>t_8ăU"fEXi;SQn:H^4++(;gzn'0Qwq9<i\_0=>%7\0ijLERY'DAaF)gHhHY;HF2p0fL<UăU"K]J/QdMucXhs?ppi*lgh9#k2bGI][cD[WsF.2ODpxRWpwU^OR5ndH\#3-X>p2TYăU"&?vC&H&r6,y>5h&7jtcp)m%<-.c_qED?u/?:iBZ(yP57gVp+=*POA#_T?JlD5b6ăU"i:Ngq/&M=I8N]cS$>;bnBRy35Zp\;T/tb/f\t6+67DLjvp3b[,[PdTy9SOgTOpvăU"Ou(0/6QD$Q2$+sLVC;&v&=>':aq^jFrP=A?Q9cPTfj+AB>Q2iUL(0'.O1NEL6y-ăU"_QeoXl,VwGZMcPYnN0,'\Ny&P'n,;W9x:smtl5)RpE2b0X(AIEtkR9jG[XY_d,2ăU"t*NM).*$dnz(I]r].1Bib(et>obiE$vdJ,>je$t7I0lF*LXJElO+axVtHh#cDc2ăU"+&lh2xoN6nD+Tf(hU_V1XT*p&%VS$ENw+v?gOa-Gw<bp8*_H_$]uBs73ow4AJ0năU"r$Po_umx^PQM:jI9$4u\&mnr3VG31M0ldgGDN^eWu1ddLg$RmHOFy>X>L]cCaN$ăU";%qJ4J>5JxwugDYO-]*L5D8BP]yNht\VAJYHw%KGC]$JkA=3lM0.7)9?Om>HsSlăU"?nE>Cuc_Yqnmih;/#))geUv?Q5YKmn=lVOu$i_aPXUKme3SKEm*w=JCrDX70kmgăU"C'k]j_b4Xs?^)U-^t(h:)OH=='RJ[f=Age%=Rna^Z#'h?$?pH._CnqGdo(dlPZ[ăU"A,ywjbS7\\#4zb?)P^q0IikS/K\t0r*yF(8Sc(iev6,Wca46P\*)8TB-a=*&2TmăU"e+UV[a6xu->n;x-#nroI$;1'wX0MKcni/qCU>E:m2sMZcsRt'gi8FxJa<gi0wlJăU"ha0OBjR5[K4oS%dup(%)9%%#%-%u,XmK$DsAR2%9%%'&,%%.#%%%9M?46GLS10BăU"Kfa:BuSA+X>,^xU-#P.522VfDMpakRsf/R>J/#a\Q0/=d/O&c-*=d)[ltd>p'5YăU"H.M[FB>>EH*mo)YLVuLLL(;HWEta\OJrceI,cMb4X[Lan+F=?OZ<iK.$?9M.v:XăU"^pf(Q14bPDNbUk>&X7BE+YceIDr%B0ct<dCaivSHKcodSNr5?n9$gJ39jA/lFdjăU"Gt,(OgjzZp$(6NVHcZ=.AuUp?7ObFbd90ELj(5aE)ky]EZj17lT&PXE4#s]&/^/ăU"gHHGD6,6#[KeHk9HU=qD5-C-T1bL;>*%DM.]=*Z$5)vRZgYET]xs/QtmWKI/MJAăU"V&HK.;S3eQ(NhwW?ibI.lB<Ss9k&a%Ec?&'p<O9IOma$xEv\76O/]fCLo60_aLoăU"5YgB>U0*9m\4qlxl43FY]um5HOLDpfLB>fS9h^m,<T&TV-K9W(WcOqe_PUr;Y8?ăU"aFav1o&;\liiHb71N-YSR+Bm[BA_:jCbR]MGJ3/]HWFbdxWpgG_qYg[(PsX;t;QăU"f<'3c)/R.,_'W'_nTbUYRG0(-[7V%Z=]CfE/L(<\[T:$[qM=FI%AdUSR%^B]HR=ăU"$CtB:VM(DAdh0cK9>H_O>5\kR$N\5rEd5WblLP96%b-0.AIY[EX4-J2VnJJoDBJăU"*i\34H$GHDRvD+&4sVBb1df623vCBn(k]p(%E*'%Hb1Pcc:I._Q'6QE\l>&WY&:ăU"9E2TCx7*gR(hI'h>V-IX-11?D8-b4R'+\,_cG'jv;y/HP+x2*ZxX*,6(%-7H6$CăU"1L,c&[ofm3wo4%rW>/dB&t2_;-5c2cb\vX-B)/K4qqVMq[GpLI^aOEFqe%HAOS&ăU"6LSfr3L(plx7bkc2kzWyVS(1j5R6g4.dm;*WrHb#;sP)4;>zUg3SPP<YoB,?Q$EăU"m?E^WI'g3*O7%F]iaNF-V10>?16%O<UMV?7FeyrjQvZ_1UvnGoQLr<>;91tRQ7căU"Z#Apu.q>k>ah_q<?1p>M]&=YaL+[=OKw/ouQi-sP6OXZtrfI(R)8b+BJOm.$f%XăU"zr:UaRA_xDn&DLnLbNR1YlstYUJI&*>?*gS&E+3eU:&yrDhI%&WkON$mF_FHs+RăU"P9holH7Luh5.2ufc<->J?S8GNgIR>OI4sRQIl.4=f0';ervr'b#E0So9[8(K>P:ăU"qEkE&]PgJ/FE5?]whJCcS^<7CJSJ[qT69e$3*<WNEUhqFEuH3-g0OEE$HVnyNd&ăU"RI66/oK:uKn1VLsBL478:(+'/LfS&Opw$]u:z*MFN2$kn_CUARukan&Ki97)g%AăU"$K$X\/=B[,?5_9h8<,d;5u\J4APK)bd3xNi67GG7kAiP$mc*wYF1<.V-gSx-4::ăU"L?7kK9o#YYD2gq//M3tD.h<[DJ5dK.5w[,Pj1%GF'6$)$cn/R]AOk<'mbB=X8w2ăU"S_lk5%<*pN0esj&wqj+lV(JL;Hy5XJk2CCA_ue/o=E74,2.#)fNhxBX:$ViM013ăU"-:>jd-;yTJj?J0_1[A_[WHc-TH%vBAwGQF;l\\F'c]>6#]/X0g=BJ,WEZ67faGtăU"f$QqRI$sL?;pJ:*uJEM,W8CKo0y%/-a+.'.Y&,70DFS$H=AE5:71ufA8zL'E8VyăU"Cu)xF?06M;$fLU4Q_.K3L+XLc;E6M/:NR#P2_-V9rlSv>^]Z]spEsZN)mZ\A8SAăU"\yn/Iw_k[jOq&BMTw+((U*nV5sU8)yFFj'O*VNVlZ5lDca6d\l.$c\6O2]2(o4săU"$FoF8vCR(SEej;%=Q<WAyH:2,(mJ=eMda67a>fH7^>2la5.0AJk=E[K+vWT#Y(YăU"HF9I5OL/WF=8(\4$9V;xx?8,%[7NyBTTFkhYek&tKUVcXFkJOD%PJO[tSH2a2<%ăU":4$98_\w(zxCa3v=^Fp\QEAI,,XUfYx?bTMl8c\CN&D2hGg(VT8MIFZGTvbC\*UăU"EN%z,[6c*jjyCZ$SKnNfHZ2)naGUn1Ioc%mT(Mq2CMxeH[>cJ1dPgX=X$B(x$HnăU"Mu#xM^Phi2w(E9v1F%JMNg;\s,&=kn]9dotog[=c:1%Phnn9ZLcyfHspeR)c#?SăU"&viy=qn]9dcLywF9#Sej<>Q1&=Oad]CFwl.g+1m?s9%mQhC9B'(YPg)$w93'h'0ăU"dnME((7?*AqX?qqmLbm9Wj12Sm*ANp\%h3nVkyf)OZH]8S6\:VQ-4H&ygNQQ_YSăU"0[<mFnq;2UgI_:aVnNIqm6w2_L;-jxAqb>&:.&,9%um]b(N=GO8YJOONWy*I2\TăU"uq,NcY)Hb[<=\i[KY9HC=eqVBlax6TtLF25u/<:]N;*OX/LEV%>FJ2HjSo[rB?8ăU"Ika>%+Yk3;Xh+R?8QDkJ&n%8/2E%S0lG\Uj2AB4\U;#,W(%E\]G3MQ^XV%(EH3.ăU"WNkXjV'[dkHXgl<)0c./LE1')?t,zk2UtcVqm_X&b$7VTmHm&h2rB0F:O,P/43CăU"?R'4b$LU'*U3Ul9olT3A-]&Tb[jM:8ApD0I[KUX7&M'1;O[^Q_sV9s&V3>9A1XyăU"&RpVW-gW\4KI\WL?ZBQbTBgF9HFnF%tgC$'F_RH-RpK<k1s:(ZZVL.Vno?L,1(văU"1cf$x\hA4$4[ou9a0^u#^Ri*;8_s$]b2^WAFoWY-&AU7>Ta,dDJr3ltDr$X?dMSăU"Qb93b]Y.^,?TS=3m(;2e.,IQ-#/cEGj)J>ifqBwU%30m0'G[[uJpi[=F$?Gco_jăU"U.X>Q#Vl)8L%\;tA0NaD?D?iQV%x=UW8_a0?_cgW;YXxEHiBacX9TiaW_V*d-B;ăU"je':QkXh*W<,SEnwiIUs?3\OoxG_G^2bDGFJh/LOb'MUW:/C:.&(yE5+3ms;?E_ăU"lz:L5c%m=nC%9M1^yB/u06+'nzXr'-:NebC9?hc>\Y_sX8W.O-VaFMHJossL(hSăU"\ZmB-R+tKqk$]$>s)OJhKA;-xB%Iazi%R3Z)sq^bd^7G>j$2e.Oy/Se%K2s(/JgăU"OgVMilMPQl%v,B<wR+5kH6Qjgc7/&+Lq(8uv)p'?aEdE22dVx,)Vt$dIY(DQNI'ăU"*wIGpkR>M&c^'Sdx%4VA1rB-$azU/[0&Sk)3hpg(fv^Eud%=ZYNX)xNM2mOrX5aăU"]#R^Se\ai]X<qL9v[r5[O>ZQQTqr6ZaE*pAvc<d=U=o=BlONtGncPBmh.\yZkKqăU"H[NKbq:3IN?(/(Hw85Wv[-)Pt;f%Ot^=H.[4]wWa)0ml.pBB;'i7CE#rABoZxM3ăU"T%m^O)OZfr(QpfG&WtJC:/3=8E&%.zeSTuK7FciM?>6snIs]KX>vNZANJ9(ol'năU")P:GpI$KoEvq[I(V,M6u7p+<+-6KLxVwG3MAMY;+1e&4(wu<_N2SB>eY#7^^JD[ăU"2it90iWaxasoUWb9-c:kS<A:._tx[0,A>1.7l?g9(rJe&pqQ48Zn?wUJ5q#br#năU"TlLazT;S/jo/CxQ#ehTEYb(1OF/EwH81'$F.6G[#E4Bf\cLZ[Z,$'*&593zfUt<ăU"OSum\zWSqNUkOWwSkulZwG^T&jC*1XcfjOF_mH]cfc.,JF;3#HIL=5P>lM)e_47ăU";6,Uv&jKa;(y-8:;0CoXRgIWWC)Ca4iLs'E-J:Fc$Qpr_%cB]&WE-QktY<8xOmGăU"G%bp0sQjIAg=^Gd,UI4\EQ8ZJU_(TmAg]'l'7ol&MRTwLTfjn)nZlDIAb;jR+bhăU"hDo8QiVg\Nv:v=[J=;96ir__*<W3TTJh%rTFL[]j.(g,IVPHNQM'$W]lj6DMBo5ăU"q0Y\mh:I#nb)qck=(ltaNfxvuQjcFn[#puUiBK2f)ItqrmLuL<JtBfg_XDF1cN3ăU"2F._.,9-i>u'L;8iH:.DtAM-6$?T<pi])dJbNLee5OTK#^>2->wkob)ILS;;qn]ăU"2V+JS(y%-iI]l-d5*T0^O)0y&Z03T)*$yqf=IP*[q\.0LuUV*j+-<CFVJg.9p0wăU">-AkAkTu:P(glo,;<raOX8i79k^5qn$GSjeDt=7J=CY21D%DhUt#oOr3L5SCgsMăU"$*UI%QPD.0=wCim_W2XTrf3j\DSMN_-\iX9E_O^PqK5j]$ptCDj?1L[JN.WVWRxăU"5mI4UxBu>kS*tG+T%+k/$=N7il$+2SpHY.f>T)_FHdop1xlZCcjTq=nf8CmsPjaăU"mbv/6s'z^v)yE=[)>L]5S$wM$5k=g&\tWh9.5>/[>Ri6bq3b(UMDiEl:nl3P;/hăU"Nf3Wxc*/N.Z4,=ai<;%X&6/0^RYo77=P0(cJg#(1e:/nX=8VXl$ivz.;JdUk;Z9ăU"Eb[\vR,s5/.o[sQgj=r%.hfE[gM<?$aZ\/Q0b=0tBH;2GmpZ%4XN\5PL>-qC$V]ăU"'qjgZn+VlHtaUkdfJ4vD-zR>l%&sPlOtn>cktkw_YQd?b-6D$?(gx&1OMko=9OEăU"h7/K6q:ND8aDJnL7lj2\DDYhKmjv+,$8Fo5*#Cw/?S8vgjGt&JuRS2'*RL0xPZOăU"Qb5',JUhF[xgJY+9xrQ[4bA]^Bp[+9=og(QD-hSTjT;dj6x<1<Om;1sZTx:(?2:ăU")/K:w*9xJa&2fvR.[K&4_h2&enZ$D;IhA$&.(aEwBM>wgk3ph.2E=OP)ME7jkFWăU";P-gQVJ3gogD_7DS]?_&cm-6N&tiFPy]i$5z>2xWbGb3h'2duL.b/r8SltJ;-R0ăU"3HF'%a&6i(*9#5-]R7aZevov.0%5LgsPQR&Ai4dOv3ueco-pPCVEc=LUpR>PBHhăU"THs*H<<+Y$F_[v$C1sWY*.)qlx$SX?5ijlxfK(ej6tph2=cn5^,RVMvuLs_tmauăU"Y)'.>A0$hkiy=KvR-IBk8rE#X486d%8,).Ja\#cwL1%=1snzIb7&ulT2WfYVY>HăU"mYK1?;g(749V?LUE=2/,;E[/X%G<cC]>R5WS^r<fo?zJYpO4:]^t#zu;R+6Xi1IăU"f]doY-lDl?Wt8pX9h,BA%OVEfHOuai2F2%q5#G&6y(4MFL4I^%'B(hNsC+4IUTGăU"2DQjN=7k8=-/f+G-sccr53pcSyILwQNxnS$Swj&$+(s5jzbs3(tx;e1qntrhQI%ăU"ldTaL'B>0GvY%CZw$?6o>.2hzsg6s%kFr8iH?_K<\+Wi]aF*HZ[PJ)cPpr3ek=7ăU"KsY2r^BmjVi[5Z<XWglSZFK>l?2OfBY=L=r\o>qeoF[W,)cb0Dbp)sNRHpEc0hdăU"e3?FFFI';fHMuaTq]trrHSFrYk-)8,i29i/&'?lxT,R/C=6(NL_(qM<k1sSS=hcăU"(JAfgO4d:8Q]M&E;BdN;60i;#5HW?8I($YSPfOivEG\.3*_tEYpH+(hr;ZLwEEYăU"+2IjJUy+Z_CtBfVffIeI0pd3<cldZZ<M6xuN&v%$MfhijwT89(BTn+8,wo_oUK&ăU"KfMenb3D68X[cg\Tpd*pt]5%9E>^O#sMB8h:V3]SiAm*.>k$F&=i*60g5,cQ4XHăU"PW_CCMfjHlU*yCfDtP15+qE]^w&_(=tgfK(MyYhY(P$,$DLN(=4z6E<wi<gy[Y\ăU"Dw\Xrf[I9<f=]\SS/=J($%SanX1LX^(+T:m1F&Xa_a<yhF:9894lqPY*i(Z33k2ăU"SP]A:Cv.=2vuEUYg4C(TwaZ;BlGCM>j0d84df0]u(t*ZG$^Pk&v?*+lA[Wi?3l[ăU"A7a=?ptQwR2dS.FQ,^0MfU7.P.+n:Z&%8n^7CdFsU-kmRi?\-2sEltjbi,^Ws(WăU"k:)5=$2$GKNNj%3;##&K0[zG.6TDh>>V7BTcuAn#mrL_<:%bT?3icLD$-lCllt;ăU"k[g)UEdBdQ]OQ8&AldALGKpst&Af6[D2EKopQzG<.gPY0bO;;sc4$3sq?7pq=GjăU"DI%vX9mhP:E5_0E$3%R1eX8lu&s*aItfGlS,=/&uIx%I-RKF-lIda3Ji8h$Kh.TăU"$kh.T$C(46iR8IcB-]'Mc>p0VREC3Vf:k+#ax3<'YJ3?UVo#^/N^ks%z#F0PuddăU"F_HkdZJ&<70AjoZ&tld0P2OD&rzP)hTVCYCl3tG92(k:]6A9%n3fCj495o.^eKTăU"]E=.dTmU'1+t[8:CoD3if6gp5IB;OE#.eCrOaC0=Hg5A=QsGY\PUa_AbbcE$fR5ăU"quc:0-T30K>*lA.HL<Jco;cCEzcJU>xxj)$)$7QH-vAQO:0I**xD\+wT?zRj2NZăU"q0LxZpw8%c>5uiIVEVPLWuopX3*ai*'(GwW#DSK7VYAO&f.EUtNUk?U=cK:gKE%ăU"K-.tAK(q584B]gK7bkcUIfL+Gk_OmHbd##K))Q[(2s#R8KuHcko.['nqcD1:D1TăU",4p+t2<=M]EM\Xf=l1j%8STXqQfupsJx>djJxLBbNxX;HmRpcBw$i8q<Cws+vsJăU"]o7)#=fn\F2S6K9Zr#dP8tp#NpW7Chzj\qfii3jKB1xM3#jD+dxlQSFuarvkUt6ăU"=v>Uk.jllv=Fn=6X>dc%n2C.TIKeHUwx<nN04xn=[(Tl4SQ>k.PZG;nsx15RorYăU"Ke,+BE[,P#3c'iLAJJ/y+^T/glU=M]OOSe=J-m_^Buz6;s'XrYZ;YMC[;InvuP6ăU"Esf<QJ^Cia^WX5SJ*=#j0XoM4F+3Xh4d:XZ8WAZdWZB8V0llojwLPY6$FRyNYxBăU"uQ%0.#Jk28]jnF.^O&Of>/zh*DIQc4RC12-&(vbIbRh'[ge%'92C?,9lb5o02S%ăU"v5/>2(P2%2[LZ[#S]J\Usd_k.<'a01r+vw<u%p()9%%%%-d%%_':?Z<&*1i<%%%ăU"0K%%%.%%%%rti(j'SvRqgf(_JKyN?.W$Vb6Gq;.Ii[9n#e=a7J[KA2t9OrJ-8Q0ăEND SUBăSUB V2ăU"3kg_.AWX2_1%aSYABKv:7VW&UbBKm>OG_Axaa-oJ1#T9->-l]vc[/a%()1P5&cIăU"h()a95NYBPWBsg\dwogD6xrV07rro2&.iP-:hGLo.B:<'2D5qV7;=/:$z46:69tăU"y_%9aA386[Os*UC,g*g+2A&9C'M''(+w%a^/w&%F*%(;F)5-GF*I%7+)-%3['3(ăU"3^%v%6hOZOD=%=6OiCO79b'9i9MlOxO9t%,%B,&^O+g9t%BD%:O#l&ZON.ODO)\ăU"O<&'(%?%_\O;9af9v9+n9>eadY7YU/O$.4:FO=99]99'9AeC//&/68o7i]&/ZE%ăU"/w,;*05.7'0-&]'7s'G%0s&f%8&%5%Bo&VOD#OnO^NOi9^(O99#AeC/^&/6Y469ăU"9eF%iQ/^,o.I%+])]%/].]a(1)1R'5>&9>m9=W9G93N9,OJF%L&8&OQec//F/./ăU"o9o'8m%u'.u0G39).)B9)8)#0i3o(9iCY(f9lO,,Ol%&)A7&i^(1%*kOjO#2GSyăU"J)S-XFKM4gSE3_:<[;L&[1%dwD$VZw1VhORO\+eRPD^m(;^';,e+)e+Q5O7*]t_ăU"^tJWlO6O5E90%jTmr^&O3%TWorJOaw9C9<4O#1?vaxdHXwi((G4sUIkF([Q]FaTăU"%X>k.a6?MLT%Vau^CSqB/0k=SGjH6%5ZrU?tw&Y_0l0S_*J4-E%IZ#LCi>?,X<lăU"E\:#1peMLc#5tCxaS2g^>aR<02&?JLa9<3SWfNhr\7^,)140rEYZ7q:giD87GgtăU"*EH[iO#:rP?D'7[^LQ\^SqY*hZnUkGhE^=L>FYjNAV*w(q^U0;35:Cf3xfbiZ5PăU"E8GcUg24eQB7_;N/b^.9ePS#iuS^ZH)lYml$Q.li:b[hPR2b#sL1fJJ.$k&FFS=ăU"nu*K;((+;D1HyS.nE4KF;b_kc?&Wa+8wn(RiP_LF8p'd^+M^/9p:TLdCIw<$v_^ăU"C6VzR?KKpNG95&$Eau3p(vcSuOgUTu%[FFEO3)i?Gpb(pb0meC-rBt3seJ0X_koăU"rp-f$Hg$cw)F9Y$9l<-w$T7),vXR\OwhEnOrO.<&*&$TdkmZ[/FYX+7S1$-R.jtăU"(5XkK+'m;_*zAbrVL<L#B<Y*4Yf(M9sR(M9T'CuiU)4T[+*K$-0MOor0EExVKl[ăU":W$T<hcW8x8*qw0BUU]KA/D4y>?uvTg?\MJI<Sn)h2xdEOh>ZIn)Dw[Mh\p_(;RăU"F4K(aKmkol/-lUoZ_a88I#$BmuKS%yCEKs)K1=9,^nGqV_dZdhai$6MG^=1U/b(ăU"Pv'9ej2C$7Z:X4VLJ7f57Xx8Zq&sORj?]T'1kmz^%RAb0'c<eT\=R,k0K-H^pQ>ăU"O^s#=9bbi,gLlt;T=*,#&OXR+UVQ^(Ql1+MOkEJ4n9S.Js,sVd\4+wvS0].HecTăU"#e3(e^RI6YE1.nj<'OfRccbW5&aJ?9>DKS]sc:M:$iofhQNPI/O[s:8''/mQF3%ăU"XA*P/R\By^EEWZ>h*B)zY?At'.29K'jSsO;6uohPC^yBf-CF9eZ;,z=D0Js7zLyăU"C?VfON+*MJVQX]E,[5#[mpb09Ow1se/(TIY-.4gwjc6p<(_EJ_^WS^CTe2h(zYJăU"M%(aUiMVnY9P1:7Fo+jyOgXBWsjn)/8n2,.kUrbh:Acwp=i)aEd?Yg;j:ZAu[fTăU"db\2=_IRc5)hC(,$I3_4yk9ibIc01H?%A7lUdl'FyAksvz1F2j<<uEojOO05?O,ăU"h2A].)^UqWd8WFrVN4gl8VJ*&>c<s/GY,A3ogsSG^1Cu;zv&:'U7S\h[uZ^Uyo=ăU"km8]N9^x:QN0JEw:(i9.5EG2CRq?Aa]Q(pqi3qRdgoXTJIDXshdBBopK,jhI?]săU"q#M03/0kNB#:>THy\S[f4TusHti:ib:K#0J%:Arv\?Y(,Lrmh8(B]c4-rPN>SN+ăU"9PCR=ouEqlbDY'w#C<KV7l$UW=b_3,3J.>0JM=K/*VF^e5D^0NtLua(B0*dCZ4QăU"KOCrIuOo^XIm[lEX]%x+m(b;#h$GPZst[*sv,9X-8W<tdukLK3TB+&/UAq5Us$SăU"\-fz/Y+bobZKB)8(''mWQ8)SHZXz9P5)+.Sb7Vl&zQUe\'YWY^WNh-rM<MVkOJaăU"%N.Y6c<X)(AubJOM+NT[N9m5Rw3(C]55Wp*\gwP6cX9:+,A8_NkenQJ8Sqljw-9ăU"b02)$PtSnS#N(Ggsk,uVEM$&8[NneIjxG6KeA7Yk/NxtC&:SU<)0<>&;?*p=,dsăU"H3bC9lsUDL#rRgR.'L]aJ(]K9JOC-*\-y_0A;z_VNNg'6Bq&JV$HxR)ah3Cmc4IăU"uBD'IM\9L3+*OC)\NJtk\kNus5L5,J1#Vco%(JFe8vB[T5FGrOxQ6I^Fn?7L;D2ăU"q]MwBlnyRC]tZ?=U5Zx=?].[H7GJ9dzw/3*F.JNpRXV#-Sb>7L*vX[1y2oIte')ăU"=GL-]Ud;X)Tl>h_1=Lc3i-F$vZV.Yc<]XH^;>%/)/,PmZ$U4vErKii$VWHthheLăU"Qlv?Qd,D0pTlbj]n\bGZXV0G#=9>?u'76Pb[R*bV$Id8^BFcYu$g]4z*#&H<fFsăU"ms3R#;S;*^niP?Zq:fZr4(#b(/mkOmalvp);:QhV:(ed+;1I[$;%\J2Rq1R2+g/ăU"V^Cy\>W?7'5r=+^<qL^a=dn]zk4C$cFjB=FzG<pD>dK6[\6A^t;<H,wqSK^:MWSăU"]4)V<a4ZPBxOvB5\N]f^:a6Xcg0F85Zpl6fu*a8seoJ\PI-M+b.VJg5z+9*]*?MăU"RfrT)(qy20t'o0Hv]LLg4?00#m;:hWT=He+O>;H/0#z7i>q]Fx.ssn_<j,aR]09ăU"%kq[*G/RQ%7Ah9l:AMZ1RP0pCmPxYdh4$-gv($-:#,_.y&mbJIv[*5jG\MTlHCQăU"ihOwH_>NtM4-V[qNh6CmhulE6;4G/#t//\85F/LP1g.nSFa*Zj.JnQxA8+Ii7BtăU"pI$.zxZ2C:u,s5iT9q?rS+M(x:x<dQtt_r[Satf':fo%C392;YI-OjfKl]->ga0ăU"+WZd2Vdi)J&j^ycR?P/bgT*]8,CW_93^F;(#>#\[0'opP3:GIs:a$\iToTP/,-văU"h]1-KaPe6wl<IL-jU4.)1NQ-U'D6yv_L\.^oq%GZjETFAT/z.PZP?Z?\Gt>n:AUăU"T[Wh-Ucg01%Qp)o?Wxk\1-mQo<\Tt,'OI?tQxQ_i00RZr)nio()n'f)C+C27B'zăU"tBjX&m0sp=5Nf9+\p]vT_)FgdFAUc*\\7SJZT[YEuC,6v5IQLBgGZKmWi]'YTMGăU".KZ7#1fOh46$8*#D]HAR94U4^meezqPxUcT(FLLmT6^KXCJ$/jH*59]=iG1FRy_ăU"cG[Af<RnofLLkKH&uv*^X%>sAlz>IYJ+[N,M%GARorv.-0.Ol_VyI&h\]u-ZM.=ăU"<.N:NIV\T#v,b7<Mal.z_sbJaA'2Hl>FsJ:i;iCe.sFwQ%4X6Qrk=fdR3FK'$(săU"ZR<m$0-8V7lSSaId%k2Mpl%sTV[?s2O3goPK1S>t3/]'FW.>r.]qOHC=DiFv^4băU"bs0u^FBHm^+PHmt*9Z1q.SY<%I:]BB9[tt8[+um34-1P07Ja'eG6XgIXQoP#WvwăU"9irL/g&O2ND>bohkl).Rpp/;wzL:Ox6WP1v:-:Vx&Orq;)p-.YL8OG3nDr.r6auăU"270JE'8XEKVX2&N=[,U4>4S>E4[XE>4GQJpJUswaBfZ'g0-Mc7eT5.?VQryS:d%ăU"\,SIBFe:#A08V7WjgWI'A7:9<c9jRgVVMOx[GnA$juZEwAlRErY5VG56iG>6,MSăU"QVkWF?eD:]jFM?q',^#7*#lBF;9KHLRA\eQ$lFmVMq+*,H1/Q7a;]Oj:I6El'9KăU"-GRa3j*dkFf\v?&Q,RYQ;zlF8=vXHgHG_nwIt*i[lsCO[^u..I;lwH27Y*n:bUoăU"GMSN;nrr6qG+*G$_l]daKEnCJ.m6G2Ee\a]Cro&W0>uENE-b?A$#kKO:T:T(15>ăU"+?-1h-BYT,GGDPqAH68H5/Ra;*/&$Dx(R71'3Gr,6H]O>E0/T$WE^W0o*KFl4SxăU"59UcLZr/q.l#7miC;zahn(CH2,G;K'42&3wonyD]tIviZ&e[]yw;*=h:BmuslSCăU"1:R+V'Hhr%<dfajH;?aD'WHP'&G40X:x?$ggT%h&)[3_0I3SsII7lp2F'o'JC3^ăU"\OA^nbbq9GKPF8,q)c__M:?Q&NQ>CvYmru&*'z,W2GSAABn8e5Dfk8E<[wp,6I^ăU"wDDOYil\O8MBe8VIq'nTellh;:SULCI,9_>4G,0]'LB%?,lIh6gH(M6(]OkN/v2ăU"zKk[f:<cbCYK=xUdWLm*]B0+q.EFp=+\gX\Gd2HOsdKwj\[iJZFW+:Ft=DH.haEăU"k27:Nhq7k'mLc^I^ersvmPTMVG=z'H:0sv>Do+?p-OMF?IKvn8pFTYC=[,B;/oYăU"iq*J)v+l%YCNF\Wn9tK<e<:uF7a3oO^WHK-s,p>#.K)l$]pqGR7TtucQsFOAFQ9ăU">+(..$#Qw1_J*8Sp;Xu*<ho]?X01I7D&I*3)CF;]X8x/p7ve2*.^59l$v65*_VKăU">5HIte7=h1S$aZma52e)K<FiF5$3Gzfg'0),/t,;>rn633ZUYONgM3,WyaHdWqWăU"Vh]%,.4=A%]ERiP$aOCg8V_*dB';N\5Cl7GhV-x%^ops]viU&5(w[GK3\x16u#:ăU"sP;bUGEMDN.l9=-k>?TxhpZVHicqp,0mp8m92[rP>#p(8ZHc%bw]0C*FTnt<sldăU"pXvJ7'3oOb#$jmllUk/6?XYNfoACfh._5O/.8D%w\iy)jEAJWLPw8PED'cfM+z0ăU":jl%B$UJ?nRc'k-_h9S6L?[U&ANp4[M:T#*SJL,$O;ENw')XaLYXCZz$7hb%O'căU"X&C$dT'ig18gP-KB&VJQKXa^i-dWM6S-ox_qX?rf8;XGMA4_$*lmg5KmY]86A3[ăU"#U:iGrsDr#93/XcnBua)Sawd4LUCtf6H+160x4[geGxth%h$pmc]A-['>[UY;(*ăU"F:ckVf04[<FPi&]Uq3^KK>G8Fw]I$02jaLKt<>v'RmiCQR)-xV9JIFGj>EKPC;DăU"st2V'146_b*Pt8aELz;NNOT6slHdiQP<fbE:Sd>shthWp6j9Vs=?JZbDY,KSn0KăU"h4kE%f'Z8AOPX>L1,H=-0?WjltQmXgp^/Ni'e?v$fK3=#4saN<.3_gdJKJQ\C)jăU"-]FGq+Q0#5km9)giba)Xpi1YQNq$iL)XFtiQQ&b.sF1]l/#]:>)HdK]bY%^)dm<ăU")lYA_QB.GFHQf?F&:sQ.0.mt0i'QD^GG6:/Z.-g8?V:J#)THG4^:^5<5QYwbQD.ăU"'4Eqv)8&7eF8'JQpn?::N[)dki9L)(FW1eY.a6u1:9d-wZH:d.M>]YX5r5PY$a.ăU"Wmi:[Q089u7:TF8u$QS.HqDbQXEq1rQF6<5jYda5u;:JJ.MViY%QT^-=L15RYL)ăU"]hL=kTvC:S-Yp.cFgivQ8^6uFc:#.gaGq):7L.gKfqHQx4gi..<wgYx^)nKq41:ăU"n7VK]YM)QR)4g5KXYTH.waTYP)1(iO&%8#3B%:-EA17=*)%t=OP\Rr/s3-5JXn<ăU"QTWk/>FpKJqKy5YcrH_RP'1lT_1VO+/,x/H,L0Bdw/BK%0xx/+xL0X[x/XLsx,$ăU"G-F/pMt.r_;r8$vtV&Msrn0XiW9Knab3giOuO>py'S6S\75.qfh%<j<-Y#a+G%HăU"l>>]Cv<-S*1m>mMA3RrY3v0^?q>X80-Dr+ZI<c43V>=T#vrC.(77br#_G]=;ckpăU"[20>(dYq0uYw:GGW.=P>:m1u#mhA\XL?9G9,v:5BanrB<d$6cp.#kjN#DZiWAcdăU"Wk/bMn\SsWwV>pCI42;c]W0v=8FXld\tn98&#^n5[(&xw'#b639#Hm_o*,h5xoPăU"1vZslX+E(0m6zdsJ6=[<Yf[=0PpXqhNjcD3m-b-Elz.m8By7rDy4qs;6gunS8b\ăU"BoK'OwkT-[R%\>4VWwPjBH_X92P_Nb[9mTPABCYs0>Ir?kF8F9^?U?.o1>+Eo\CăU"S\Wu>1SQH;q.l&&#$6B^Zkm>r5G=HBq*rN=Gz$P5XO-IZK-rJE#[j2(L^V#6aUoăU"j;\[&\c4=JsQSx7ZJEm]g#zhVf8?H?Ff\gu^\7q-+u2PkMd\>cs<+wJr+ZjFBkPăU"q=N+[)wY+55RH.XPjV(J+kr1_/Hqe&)o#a>VEfB\#-2Nxk=XptD4kX.&DaW\?2băU"$*K8rAG65kij52GUjsHaJ\\^<x3UINxQ#jCSFmMGijV,9wTkx/[ddP]QaSB$^[hăU"kbb%b;QM9G[S8P\*Iqd6KDj88jal5.NHI1JiAy[wND6gC2cv,rZMK3h]dV^vbf<ăU"4xU7Gb(Pdqd2fhy-NK=yB?2>g;\cG6S>mVf-X8VIlj*huIupZ''P8LO4I,AumiFăU"$0Os,.C&l\HJ.ToRF8UyGP(gJ[/LEW#qHRog-l>I5H%(kAjj&(9F;-:,G+^78<(ăU"7xi$GlhWO(JHbiG4aRax$3klLDGX'tTPbB:c^Fg?GA;hHm7n?.m8F)fPD;%pv:făU"YlDwGhGtQH8mdU,NB=F<pqC:bZNw]USM-GA#zVAnsKTV:4uHt9BsGpph]roLyF)ăU"u#HLPHdc:('gGF(JrkA]o#y9zf2RKMk1s-ubRd:^6TGrHBqv5H,K$H*5)%e$J7PăU"$nfE]E<dVHecyKgG>xIlRysl>>IL*[4PaKc/)'P-'u4[;enhQ*FD3?1lL03lp+wăU":v(eNJ%v9%hIAm4mEHRf+mFptr0rMeYkrgcuEu2B4^ZAs&Ak_o0DpE3Q0+A%AubăU"B4Ys$4b+xlX0cK<w-hmekcoGpHAkC]v$7Fl*_jT6y1e+jHbWB8gk);g>1_ma\HMăU"mmfVTQqV]Kuace<f?,?3meJp%p<TP,-5'^*744?9;k'P4];ulAY^uuRbXXl_f;tăU"DhmZU\*Bk0l+ceR22Q)(yu:%GF%spTiorH$B>KDFh/0$=_aO.va?G/Re8Tz_4M&ăU"w\QZE-m;J5.44bNDL#:\Q^=$Z^RTYmx.U'd7YXk0X7F8h.']+vwd(0$S-w8s;JAăU"UX-]m&fzuyrbPokFJ-:M^LRDILv+((E-sW+^MT:#C/4PfRElwRN,BB08\J$&nPoăU"Nk<Cd^uYF]*5^Lr^%JfNdJTD5\dAC*;dYy)W%8%zK/+Qw/uLn4eoqme+1kw-CJFăU"/6t,#yqpZLpeffXU^>4Ipo0wa^3'&hJYfKp7,,gUods$VuF;IY-+5Ybea7j1QNkăU">X(rKd:Ed'p+ft74(RwPP#a:u'gy$aceEIv)Z6*5c;U4Bo?H)xu9%O'QV*-7aLsăU"os7=Vu;eZ%(53AHNBRmnX7WFU%%tedpYnN2%y0:^)oyG&9s3p7/X,[AG/^PyKy1ăU"m_g>KgW'J-39+C<RzS&QdU]U<1uxIbH>Mx>2($6j#zvNi*Ea]TQDj'hdHAp-X9iăU"6iDyfycp:xD;NO7]8qZ6rK&Au0$\rD%Yb;JHETfGAAs]IsuinE?)Ps-7xQgK15[ăU"n*4m^jut%_sc^9p7YQc[1DPl9kX,A$Z1OV4*Zq2p3g-]3u3%mJ#]_L)-%;/U\t+ăU".$1d'Yqj]Y+(/OT91xpg//.]MwngALObbB-Rf$K6:W*WKV[0q)go6%q;FCCtUFhăU"LVN/=oE;:aVw#%up&'%9%9%%%%-%:%_'?0-Ol,&p3%%%:A%%%.%%%%%%%%%%%E%ăU"*/P%%%%%rt.ij'S%qngu%p&'9%%9%%%%-%4c*IK9N;&9n#(%%1%0%%-%%%%%%%%ăU"%&[%E%/,PA3%%%rti(j'Sg%nup&%'9%9%%%%-g%uXmIK$sA(R29%.%',%%%.%%%ăU"%%%%%%&%EO%/P\#7%%9M?46GLS10B%up&'%9%9%%%%-%:%_'?bZ<&1&i<%%%0K%ăU"%%.%%%%%%%%%%%E%*/P<L%%%rt.ij'S%vqgu%p*+%%%%%)[%)%T[%%%Q%c%%%%%ăEND SUBăV2ăCLOSE:IF S=120AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMarius Andra                   FAT LINES                      marius.andra@mail.ee           08-06-99 (20:08)       QB, QBasic, PDS        27   2015     FATLINES.BASDECLARE SUB li (x1!, y1!, x2!, y2!, c!, t!)ăăăSCREEN 12ăli 10, 10, 100, 100, 14, 20ăăSUB li (x1, y1, x2, y2, c, t)ăLINE (x1, y1)-(x2, y2), căIF t = 0 THEN EXIT SUBăr = INSTR(STR$(t), ".")ăSELECT CASE răCASE 0ăIF x1 = x2 AND y1 <> y2 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1 - i, y1)-(x2 - i, y2), c: LINE (x1 + i, y1)-(x2 + i, y2), c: NEXT i: LINE (x1 - i, y1)-(x2 - i, y2), căIF y1 = y2 AND x1 <> x2 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1, y1 - i)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2, y2 + i), c: NEXT i: LINE (x1, y1 - i)-(x2, y2 - i), căIF x1 < x2 AND y2 > y1 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1 + i, y1)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2 - i, y2), c: NEXT i: LINE (x1 + i, y1)-(x2, y2 - i), căIF x2 < x1 AND y2 > y1 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1 - i, y1)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2 + i, y2), c: NEXT i: LINE (x1 - i, y1)-(x2, y2 - i), căIF x1 < x2 AND y2 < y1 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1, y1 - i)-(x2 - i, y2), c: LINE (x1 + i, y1)-(x2, y2 + i), c: NEXT i: LINE (x1, y1 - i)-(x2 - i, y2), căIF x2 < x1 AND y2 < y1 THEN FOR i = 1 TO (t - 1) / 2: LINE (x1, y1 + i)-(x2 - i, y2), c: LINE (x1 - i, y1)-(x2, y2 + i), c: NEXT i: LINE (x1, y1 + i)-(x2 - i, y2), căCASE ELSEăIF x1 = x2 AND y1 <> y2 THEN FOR i = 1 TO t / 2: LINE (x1 - i, y1)-(x2 - i, y2), c: LINE (x1 + i, y1)-(x2 + i, y2), c: NEXT iăIF y1 = y2 AND x1 <> x2 THEN FOR i = 1 TO t / 2: LINE (x1, y1 - i)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2, y2 + i), c: NEXT iăIF x1 < x2 AND y2 > y1 THEN FOR i = 1 TO t / 2: LINE (x1 + i, y1)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2 - i, y2), c: NEXT iăIF x2 < x1 AND y2 > y1 THEN FOR i = 1 TO t / 2: LINE (x1 - i, y1)-(x2, y2 - i), c: LINE (x1, y1 + i)-(x2 + i, y2), c: NEXT iăIF x1 < x2 AND y2 < y1 THEN FOR i = 1 TO t / 2: LINE (x1, y1 - i)-(x2 - i, y2), c: LINE (x1 + i, y1)-(x2, y2 + i), c: NEXT iăIF x2 < x1 AND y2 < y1 THEN FOR i = 1 TO t / 2: LINE (x1, y1 + i)-(x2 - i, y2), c: LINE (x1 - i, y1)-(x2, y2 + i), c: NEXT iăEND SELECTăEND SUBăMichael Bourgeous              CYCLOWAVE                      yttren@netscape.net            08-08-99 (17:46)       QB, QBasic, PDS        119  7855     C_WAVE.BAS  ' Cyclowave - demonstration on how swells workăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"C_WAVE.ZIP",4^6:Z&=5586:?STRING$(50,177);ăU"%up()%9%'%[-%t0S+K5,'nd.+7%%x2%%%.%.%%&f&%jWS[gfxFk&f>SRm8x]c=xăU"UZ#O*SS,a]wN<f,n]:e)XJ.I'&nQgDr4c6Y:o=S043YDxsj>(T5j<fL&:%*XX$jăU"T8HR0Z=qib)9d&a)a^17i%P_s:O:CNaT0h\T57o7Ge5-.(>ZjI4ECCRmO4a+k=UăU"P2i\2UVQt)5CsgHcJghpBFm^wO>CIO+e3nY.C_EZr[hK:%Fw:Qi4]FgqCn&KOF^ăU"qLfJK^2%ckx^:^8tx6t_On1?G9Aj9[ebZL?zr/V8uJBNjd#f+;W+N_rwYC(pT33ăU":/mcZ++Mj^^S%3R/7/LqJg*j7&R&%.M'APO#6O+uJ1wd9Q.Q4JZNqH_[5'XB_dvăU"zYPPL/T7et1uC=oyBS<W_sP%652a]3.#I6)vN3\JG,_R?W17Bb.Titl,;'lFFMXăU".L:3mY?<R>H,jU7Fj&u.nL(Oo8n.aWnI&56\_M'fZ][Yd4]RamCStFF+YxjCG-,ăU"hP-_&7?8t&4/>vy(,VHVq7j>h8c5)Y#QqdQ$qUvqNBc7os1:/l6n]L91lJOI2)DăU"qx&\e#FM9'<H#mTSGt?i\$=\=wYjb+4eqpKIfnNT[tx^UvX2eoAXrq+?PTT.95YăU"up[Vp*\\q&/vIO^l<u2k8kU;_F)0wMmyO(IUT<5>>LiSdgez\(\JeH&m0#[lYUQăU"b=hWdZF<?Gm9nHjF?<YE3nY#bUu,WZAs6Z3O$'B8KwZ1O2(1-l*ItVTo%/IxjYAăU"Uzw'3B<zwc2x&&*3f-zcXEz*-\ZJz+albG:wx/BPcZfy6(20[tPpfOT/Mj7;]EvăU"5MXxnkg\p/i2E?A'B2JeVMNMIG/oSR%bb1U3=0,Uf&'3/qWh%Z?[7a'PS(kKwK_ăU"_gUDRAM#Iq8Ti1;/&'Uh^>Z+mnO8*CPe7;fm2sGSSOsF'Gx5aELT;VZIx-GCsGwăU"&x(pviD'OK(3r3N='.UyU$i-HQce%r'h1ywJ^&577I-$/_'7Bh?3;.G$NUei#/6ăU"TRn5e3&gc[aFOY[#M:n/$318aWiCuZtr\/7jZcVa<qj(aBKn;1hD<Cso43?n=lkăU"Dx.5\z+eFLRz=IR]Dc6L]HKRZ5On,.0s/?srW-dGY'sEO_A7Ds4QHt]eM]Ys,tuăU"d[T#c?>*lueYys,cj#mVv8y*wt3\G_U?.i^&T<c=Uf&\TZ1Y3;NpEel2(UcyP?8ăU"JIk8mrQo\'O>3oN9C=M_1ESMpj_ZArh5QK#7XnKe^U6kltqH$&OMaD>qSCG=CUxăU"Y5:'s'cGxD1iEg1aqnPK:.khD1/>-0Kv3LWpc^?4nkoZ>Q^NNnfxmdrmohfLQRHăU",cG&7M^iZ]_0B2N0ahy$iS=__uy$*M1AC=.J6\8babnEFr:_&'V\N7&J*-+8>OMăU">EiHO7U\umY(c0;b,U5rm?uPcar2ufw6)&=7cJx%=fbP*5)dQ6ChJH.*s0$A6ocăU"9[QjcO?286D+)J-SEs,]J5.XY\=4LkoY[S.2P>DRCTlzGa+i>JGr*X]>[cY#0cpăU"p4FE?^AyVEpw5813-sr4_]B]J4T3SIe\:kJIP,hzzzP2F8^[FqEQMB$'W%r9[O]ăU"Jd9#F($rXBKD^$/.j$31PgPDQW2v6hb(8_Ke6-3(8+8263*Cjr\9s#c&%H_<Z$UăU"Jpf6:e^mSf^4Bd<:iKX,wScIXT-P73+pZr-Q#cKhnwb5%shI%U2eNat6JLg+6zoăU"U.Ll8JbvC,W0O>d?S7i(]hF_KS-/kQ$?jUK.i.B#,kye6+kqh10TDGilv76QSJ'ăU"nS(Xbf4R8N&W;'o\+6GUqgiJpvU+w:uVI,vakw0\UEg;1asEr%P_cYS&]sYHvAtăU"SWHqyfaxcF<9<]Ez>^M2q0x6mSENQV,A4iR#?4-IE)?sjE%G<aZ[n-?E7w\8B'CăU"qfcb,DzzX).HyPm5Dv^EbiR0*Q6Z>rUnGpu%bNd[XX$)2HijrR*GqrdZ]dUG>spăU"/3,./qRT&,)+N,srMg=\VF=k,jT%up()%9%'%R-%BoJ+KcC8vf>*7%%e1%%%.%.ăU"%%&f&%jXS[gfxFk%d>[Rk5x]-=xUl[H*?YLE^bA8FbN&5A$ee\3AJbu0>WYaRoSăU"Vq,VK8K7X:jk&Mzs$&%G\thRX5/ECv5aK;%waNBf6&Or]iUotU'q'8.I7QXYh$;ăU"-^iG&'F2aVh'qAe3.88%gl=i_jIf.9Y6Nr%h^smBo59Ok^_YIJ,0pJxYWQI9PH9ăU".PkZyLo'tkm>yJB&gm.Pc\9Qu2$Z7^&6kid&*CJwDt9F['fkO(.R;X*kxOw%NkQăU"thXgDrnsQ+b?obE):RKoNi/K]>HFX[PZ&96D2/ZZ*#l$p)bs=7r]Gd^Qu5?umH>ăU")%%f2fR+7I;ne$U&z9?)]9GSEJIF.5cGg:poEd.ZZaOnPSYDMbzP+L0BQSU8G=:ăU"tQIb&S)*>aH3C3)U6d./?JIF$Y3HpN,#(d=[RltFzh-:ni8Kqi/m'On?pLWI1:>ăU".V13HVf49$&w4^T>'udVcN9uxY+*5vDhvc(F+:e7YPw5H6EDG_b2../P'Ofw7AJăU"rfEjEBfY%NN[VGya4Z9'bIn?Y[x>n5d;WlEY^Iu?<RRpMrNQ\$p95U387c:PgpBăU"=/9ptaMK>trY.IF<(N?9=rL)'sdONldw2cRXYW$AXY-$&:<o$bqw8B/0N;yG'qDăU"o[K9cfir?rKcdGA+Q;+g(NHZY$fg:ZkWqJljZnv+2n+_4IiqY#U.g)?'2*=TU7uăU",^&-k8uIj*jNBpNQ.k8NCI)?8<fQ7n03=%JpmQr%PgKrvIO&N:Rij;j[Q;1,PA+ăU"e,=C[?LqGSj9=Fy'<+o^+Bw?'SDwJ&_\0Md;[W1qrSa/KfrOgrYyd.2eI1CB-wXăU"mX/1_Mx_K*Jj>Mcn<GKEsIi*R*Q,oahir-PVb1c*3Ox_U&Gd]$,RUuekV8K6c8#ăU"M#*Y07<P).0mk*iZ7>RbV&73(h61Gd4I\\U\W'ED9bFS;Y$bzb+E;YrdVPN^x)hăU"4+)YLmYS2B'8SFhOCPlqc8AMgPFqGi7&d70k=PbLh-Zg\Ry;6coB(26UWEyY8kMăU"i1Bqz1()x?4lLMS10.#'M4:hj7RNnIi,QY%VS-?NO])$ambaF:?$\ql:'GRKI0ZăU".v72nT-5tUwVa^,9hqs3c.Z6-1hyuwW]dnGyNx<>V+&syU[O<F]thfn1R#8q\VZăU"KY150Y?K%=qCH+NIgkrLE=Mc3bVW6X=$]XaY;ra>E>B2xH%Hg=TIH2q\4C#c.b_ăU":4uB#SI/f\sX[]da]cX7:s[1b-8S\Ktks7i[cZsXHN>pI8fqw;cxi8rMvpDqgsSăU"%..FTN'h=CYr#)Tv_TF7?H_tAMBbnc9$TI/79#?+brFys\R:32z+KDq+Ga9''//ăU"c#G;G.Py=\v.(?n<96[mdn%bto_M%Ye$)(>oB7]mL02YeI#oS6X[rILo)x-#ttvăU"pnS'p1OLhD>*H:(tK[pIHkgW4<19=Dq,^n7fxsQss<vchK_>l:YF=CF2#g9Ls17ăU":a=h_gmu1j.gI'N)<H1of<_0O:RXEeky]QWCc_c(U1EF2k00Bwdjmeg=5J1]&^QăU"BG6'K1fO'9AjXEqwA=e6Fr8z:L;ifLo>cD_7N)vjbHKV9FL94a6<&O^Xi%TQ$5năU"Yy/CjRP,0?=Kk#'hE>OQWIi/:jUJvJi(Zqn+$N)L;7:=+flwxk%-0MK)Ve6]g92ăU"xsb=cE8i.0/-1f%U_[%ia67_%XIqiBpiUMq9hs9,'cFNQE-FWa8L9a>9grx7L;YăU"j*JJFHV6Mqre7?xfv1lVE4ZN^2q/sNNS-XNVl1bog>1O#0B].oV5kG4mFr1I2I.ăU"&xU;([?RNL?vddcm2^2:sm.V?gt2C:5Fl6A=+wVndXM-T2U#+V6q1qf&2vL'Nb<ăU"=+Js45q-4/qSe\0/*[)-pn^Ui1dW.If>%up()%9%'%d-%X2A+K,^3[/T*%%%j1%ăU"%%-%.%%&f&%jSgRfx>%;<>[kj5w]=MNgr$7'2ZEt8'C62xS_$f0.X9nvIv/KQ(-ăU"0ZhKVDXMvnl>(T5j?3W0GaITX,+XHcX=$,#5aKK'v9.gIXA?.gsqDYO:?Ka26)hăU"T%73jQOT&7E8V\E%'#;Zs+pe8UUb*3-$+JRGTdV?7W_9>1O_&VyS52sRu[[E0v%ăU"6N*z9IR3x/;hq)9'[Y8WD4.>Q5?i&SGr>y'=>v_U^ocsnV+)PX\C+kG[8,o(FMQăU"]&(CI.>ek+ZAAMw>paGHwFQ-BSbq)Dc.-dZrUg/pNsFL6,FRU-?RcTZxl>qTS:[ăU"aD/s)T/W=^4VHa5lN:4;2EM-DcCwsfkDx_/lsvvZ(VU^%F=*FDKQCSrp?J&3POMăU"z=MO.mNb<MUl_4.3Wie%)6icF1L8CMNatiGK+AfKz0KicPE)icTN0(RDL+,cOqWăU"[/O-T&7o=NQAE_y,=Hm#=Fkh\_ko03:c8O]tDRn70\rCl/-R2k6vZ1ixu9[]blKăU"Ag[qB90z$vggsH4,[W$%0H_VmCMW7p6_-]p/cXyXt)H/7tEGH3=QF='JZbA\+OfăU"eP:5_AYlfe=.rxYjl5FX0aCY:]4)Zh[eM'sA7BI_3^],>kg=rZ6QnOGAto?,hwdăU"(YimN3f:aE.0HKfW-*fY\)='3(\Ut_pFy(C2=Lj7OPJ2fOiwXfgN+&'Zs7vkg;dăU"GKFAD=.nA;t_5HQ.1n2'K\:PHT7MbgdAovZROi(YBoen.5bGJ+uO$;tR//hH+SBăU"2*-[NK#Wo0?T\IepAYc$tkE-6>Lv7O=5BDkke=th#dX'8aa5o2VmL+9$k<\d69răU"Jt%*V?P\wHmi_DQkiU+njL:oa^h+N5E>C2E>X-^=n.UND(1d(IRvI6A;doS_<]aăU"Fx80ELT]arb7U<l7/:q]t;^)'>tGa;[PQ[K*;$cjgSgaDEdEJn*AFwnE0K1DpB_ăU":qn#]4uG&ZQ.jD0H3XT^h0e3T&dStVg9[r/F&hy*2riIAgE\fFnQDV_0?\u%.c&ăU"du#nSneLv_U5GsrTl0<ylGk8P*CttRYV<AQhtyXnqNjWC\Gz4+k'9IAD(ZzgS>&ăU"/1XaYS,ci$LDQsdIpprn&XGW3RgDE(#=laWF5o*>VS-9YPJ.-mo<*4\(\cmg<;(ăU"Z<J'uMCGM#?rXdd:Xn(agygIx1Ddfd1gt>QQ^SlqX=phUj8'tcD<^oq7F=vVJKcăU"Q^;npJM.[dK/ggw9GH4nj&5KhdKYk;/-.0bHQdqc&Rc16DmK<FkFQTIJ.OZNjVaăU"nJv<S5*e<E*_#6(.eRodR0(FUG>opt-468qNO#(u:f)Sj)^r*YhZVI8<(_xp*usăU"e8<3\e-d-2nYm5r=?h%Gc'6[,RNa,--<7=HB][Lf)BmBF3\12x7\CRJ?uffjH/CăU"Q6Q)Qt[3G2I+%;X?w;IKQs)-Fr>%9#P'dk$:'33F'mn=JK&lR'<$$o\j%N=kGR%ăU"Fig7Ao7$D2aVr&,a9?6WM>KJAr2qib&I,ITgMi=2MIVOxB)QT_'f>j_,*_3rc#XăU"7rJE>>,m//5_6:g3k3e7RE&qM\cFY%I0'FB=Q(H4j4et-:dOUlzGk/hG%lO%SmHăU"\TtCIE?l[G7t+lg6cW_q+rnP:5jcz8HT&+M(=FU_$3o7Kc:vq3Ff*CMWM-/RKtnăU"Q-iXaq;7j2OPErg7n'M6+n<sp-)gU$%Q0,AY^9c]\K43LwOMBS(7eO&HCgr*6i3ăU"FHRf\.tOT=yT._xH+GA#$a=N<#?F'MA<4'X]34(uz]gVSb;$F4,nZLLH>eErY:9ăU"J0bFM,Gl^=t]'d.5If.u%p()9%%'%-X%F5+:Kjb;)C?'%(%z)%%%/%%%%wjf%irăU"jSCy'yL%ypt#mV57(l-x0=AtioQ#%zOk1/pw^eoc7NW,2H5tlq*nsHJwt-GQ6.(ăU"EDt#,:ubLg0>m>UM\XZdBs^(\?Z*Z?MB:ZnCc9<Z0$/P]xaX1aDZnDM-oPJGn<?ăU"LJ]U:jf/^Qbd-'UYfPf'Q'pY3WnomA$ZOh-*N<mMUPhJ*S&ALlcAd_mRM#MYEjzăU"i[n.Vfhd>#-C.2CySoAFB+C(.1?2bQh/kOP%:u.L>xLA)D9kML,mP7-c8oH\c%păU"&,qM9^h<WJLPn'*BTaw'IkpC$&VM_Pbao3Gqz*K,9<U;o%iRLx#=1/ia1R:_.hYăU"#3i);j6BHkz6h;tRJ569h:ESo'ZmE7uF_)=0SW$S+FZWq.]88S6RIjK>GPc9IiVăU"5OM:<04ZL8Sjs7:O0HkT&uAr$jtSfe/vBvW:kpFZHD>V[-4dhTw%*(P5,1*(X;#ăU"S%Q#6oW'e;^75bQqLF_4\>pAd)'^=mJjMUpjm(^x><%+UUPWKiE5<<1$IF8PbC4ăU"a?Ki;1pLAP/]%hCq&%saB6up-%4E(pE$FWuv*<+aV1aK3fhGJXa>m#sb=95aLx8ăU"=V^'(RNA%WAxQ(dn8lQ\e95:'Vo<sc5UTZ0$.(4<0ue>VNE85bQf9,+9)ABzeB*ăU"JZ^7A\)VDMH4rP=2cb9n%xB+E.\qxa[:edst-(TQ'bGcrSRpm,K5tR#hH]MvKO#ăU"u'kWg(qI,g*<BuLd$5qOKS$i+>INSH;PR,kKx,hEP>*B5kP:8V?mp:=rWSk9r?băU"s=Pm]c;wI&-^d.qWJNTu?VHBlx,<w&u%p()/%%%%%X%T5+dKOvI&uF%%%%F%%%%ăU"/%%%%wjf%irjS%gfyeM427>LE>55I2/2;AB2/C2H?4EMA403D<4SC)GC2/%up&'ăU"%9%9%%'%-%4t0+K<5,nd%.+%%'x2%%%.%%%%%%%%%&%E%%%%%%.%%&f&%jWS%gfăU"xu%p&'9%%9%'[%-%BDo+Kc_Cvf>[*%%e%1%%.%%%%%%%%%&%%E%%%%U+%C%&f%%ăU"jXSg%fxup%&'9%%9%'%d-%X2A+K,^3[/T*%%%j1%%%-%%%%%%%%%&%%E%%%%A1%ăU"%/&f%j%Sgfx%up&'%9%9%%'%-%6F5+KGjb;C&?'%%&z)%%%/%%%%%%%%%&%E%7%ăU"%#6%%%wj%firj.Sy'y%up&'%9%/%%%%%%6T5+KUOvIu%F%%%%F%%%%/%%%%%%%%ăU"%&%E%.%%.9%%%wj%firj%Sgfy%up*+%%%%%%*%*%%9&%%&w9%%%%%ăEND SUBăCLOSE:IF S=236AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDieter Folger                  TINY FONTS (6X8) FOR PB        folger@bamberg.baynet.de       08-21-99 (16:10)       PB                     332  8498     TINYFONT.BAS'---------------------------------------------------------------------------ă'TINYFONT.BAS for PowerBasică'6x8 font for use in graphic mode 12ă'For constructing font characters see end of fileă'Based on the font that Sami Ky”stil„ uses for his WINDOZE GUIă'---------------------------------------------------------------------------ăDEFINT A - ZăDIM Font (33:144) AS SHARED STRING 'change if you construct more charsăLoadFont 'read font into arrayăSCREEN 12ăLINE (0,0)-(640,480),3,BF  'paint the screenăă'-------------Demo program ------------ă'Normal VGA font first:ăLOCATE 5,2 : PRINT " This is a demo of the 6x8 font:"ăăPrintText 10, 100, "The text doesn't erase the background", 0, 16ă'Value 16 for BgCol doesn't erase existing backgroundăăPrintText 10, 120, "You can use a different background color", 15, 1ă'Use blue background hereăă'Show all chars included in TinyFont:ăFOR i = 33 TO 88 : S1$ = S1$ + CHR$(i):NEXTăFOR i = 89 TO 144 : S2$ = S2$ + CHR$(i):NEXTăPrintText 10, 140, "These are the 112 characters in the font:", 4, 14ăPrintText 10, 160, S1$, 15, 16ăPrintText 10, 170, S2$, 15, 16ăă'3d textăT$ = "This line is printed with a 3d effect"ăPrintText 10, 190, T$, 0, 7ăPrintText 10-1, 190-1, T$, 15, 16ăă' bold textăT$ = "This line is printed bold"ăPrintText 10, 210, T$, 0, 16ăPrintText 10+1, 210, T$, 0, 16ăăPrintText 10,230,STRING$(103,"="),15,16ăENDă'-----------------------------------------------------------------------------ăSUB LoadFontă'----------------------------------------------------------------------------ăFOR i = 33 TO 144ă  FOR j = 1 to 8ă    READ că    Font(i) = Font(i) + CHR$(c)ă  NEXTăNEXTăEND SUBă'----------------------------------------------------------------------------ăSUB PrintText (x, y, Text$, FgCol, BgCol)ă'----------------------------------------------------------------------------ă FOR i = 1 TO LEN(Text$)ă     IF BgCol <> 16 THEN  'then we draw a square in background color (speed!)ă        LINE (x - 1, y - 1)-(x + 6, y + 8), BgCol, BFă     END IFă     SELECT CASE MID$(Text$,i,1) 'special German characters:ă            CASE " " : GOTO SkipSpaceă            CASE "á" : MID$(Text$, i, 1) = CHR$(127)ă            CASE "š" : MID$(Text$, i, 1) = CHR$(128)ă            CASE "" : MID$(Text$, i, 1) = CHR$(129)ă            CASE "™" : MID$(Text$, i, 1) = CHR$(130)ă            CASE "”" : MID$(Text$, i, 1) = CHR$(131)ă            CASE "„" : MID$(Text$, i, 1) = CHR$(132)ă            CASE "Ž" : MID$(Text$, i, 1) = CHR$(142)ă     END SELECTă     Cr$ = Font(ASC(Mid$(Text$,i,1)))ă     PrintChar x, y, Cr$, FgColă SkipSpace:ă     INCR x, 6 'move x-position pointeră NEXTăEND SUBă'---------------------------------------------------------------------------ăSUB PrintChar (x, y, Cr$, Col)ă'---------------------------------------------------------------------------ă  c = 1ă  FOR Ypos =  0 TO 7ă      FontLine = ASC(MID$(Cr$,c,1))ă      FOR Xpos =  0 TO 5ă          IF BIT(FontLine, Xpos) THEN PSET(x + 5 - Xpos, y + Ypos),Colă      NEXTă      INCR că  NEXTăEND SUBă'----------------------------------------------------------------------------ă' Font data areaă'----------------------------------------------------------------------------ă' ! 33ăDATA 08,28,28,08,08,00,08,00ă' " 34ăDATA 54,54,36,00,00,00,00,00ă' # 35ăDATA 00,20,62,20,20,62,20,00ă' $ 36ăDATA 16,28,32,24,04,56,08,00ă' % 37ăDATA 50,50,04,08,16,38,38,00ă' & 38ăDATA 16,40,40,16,42,36,26,00ă' DATA 39ăDATA 24,24,16,00,00,00,00,00ă' ( 40ăDATA 08,16,16,16,16,16,08,00ă' ) 41ăDATA 16,08,08,08,08,08,16,00ă' * 42ăDATA 00,20,28,62,28,20,00,00ă' + 43ăDATA 00,08,08,62,08,08,00,00ă' , 44ăDATA 00,00,00,00,00,24,24,16ă' - 45ăDATA 00,00,00,30,00,00,00,00ă' . 46ăDATA 00,00,00,00,00,24,24,00ă' / 47ăDATA 00,02,04,08,16,32,00,00ă' 0 48ăDATA 28,34,38,42,50,34,28,00ă' 1 49ăDATA 08,24,08,08,08,08,28,00ă' 2 50ăDATA 28,34,02,12,16,32,62,00ă' 3 51ăDATA 28,34,02,28,02,34,28,00ă' 4 52ăDATA 04,12,20,36,62,04,04,00ă' 5 53ăDATA 62,32,32,60,02,34,28,00ă' 6 54ăDATA 12,16,32,60,34,34,28,00ă' 7 55ăDATA 63,02,04,08,16,16,16,00ă' 8 56ăDATA 28,34,34,28,34,34,28,00ă' 9 57ăDATA 28,34,34,30,02,04,24,00ă' ; 58ăDATA 00,00,24,24,00,24,24,00ă' ' 59ăDATA 00,00,24,24,00,24,24,16ă' < 60ăDATA 04,08,16,32,16,08,04,00ă' = 61ăDATA 00,00,63,00,00,63,00,00ă' > 62ăDATA 16,08,04,02,04,08,16,00ă' ? 63ăDATA 28,34,02,12,08,00,08,00ă' @ 64ăDATA 28,34,46,42,46,32,28,00ă' A 65ăDATA 28,34,34,34,62,34,34,00ă' B 66ăDATA 60,34,34,60,34,34,60,00ă' C 67ăDATA 28,34,32,32,32,34,28,00ă' D 68ăDATA 60,34,34,34,34,34,60,00ă' E 69ăDATA 63,32,32,60,32,32,63,00ă' F 70ăDATA 63,32,32,60,32,32,32,00ă' G 71ăDATA 28,34,32,46,34,34,30,00ă' H 72ăDATA 34,34,34,62,34,34,34,00ă' I 73ăDATA 28,08,08,08,08,08,28,00ă' J 74ăDATA 02,02,02,02,34,34,28,00ă' K 75ăDATA 34,36,40,48,40,36,34,00ă' L 76ăDATA 32,32,32,32,32,32,62,00ă' M 77ăDATA 34,54,42,34,34,34,34,00ă' N 78ăDATA 34,50,42,38,34,34,34,00ă' O 79ăDATA 28,34,34,34,34,34,28,00ă' P 80ăDATA 60,34,34,60,32,32,32,00ă' Q 81ăDATA 28,34,34,34,42,36,26,00ă' R 82ăDATA 60,34,34,60,36,34,34,00ă' S 83ăDATA 28,34,32,28,02,34,28,00ă' T 84ăDATA 63,08,08,08,08,08,08,00ă' U 85ăDATA 34,34,34,34,34,34,28,00ă' V 86ăDATA 34,34,34,34,34,20,08,00ă' W 87ăDATA 34,34,42,42,42,42,20,00ă' X 88ăDATA 34,34,20,08,20,34,34,00ă' Y 89ăDATA 34,34,34,20,08,08,08,00ă' Z 90ăDATA 60,04,08,16,32,32,60,00ă' [ 91ăDATA 28,16,16,16,16,16,28,00ă' \ 92ăDATA 00,32,16,08,04,02,00,00ă' ] 93ăDATA 28,04,04,04,04,04,28,00ă' ^ 94ăDATA 08,20,34,00,00,00,00,00ă' _  95ăDATA 00,00,00,00,00,00,00,63ă' `  96ăDATA 24,24,08,00,00,00,00,00ă' a 97ăDATA 00,00,28,02,30,34,30,00ă' b 98ăDATA 32,32,60,34,34,34,60,00ă' c 99ăDATA 00,00,28,34,32,34,28,00ă' d 100ăDATA 02,02,30,34,34,34,30,00ă' e 101ăDATA 00,00,28,34,62,32,28,00ă' f 102ăDATA 12,16,16,60,16,16,16,00ă' g 103ăDATA 00,00,30,34,34,30,02,28ă' h 104ăDATA 32,32,56,36,36,36,36,00ă' i 105ăDATA 08,00,08,08,08,08,12,00ă' j 106ăDATA 04,00,12,04,04,04,36,24ă' k 107ăDATA 32,32,36,40,48,40,36,00ă' l 108ăDATA 08,08,08,08,08,08,12,00ă' m 109ăDATA 00,00,52,42,42,42,42,00ă' n 110ăDATA 00,00,56,36,36,36,36,00ă' o 111ăDATA 00,00,28,34,34,34,28,00ă' p 112ăDATA 00,00,60,34,34,34,60,32ă' q 113ăDATA 00,00,30,34,34,34,30,02ă' r 114ăDATA 00,00,44,18,16,16,56,00ă' s 115ăDATA 00,00,30,32,30,02,60,00ă' t 116ăDATA 00,16,60,16,16,20,08,00ă' u 117ăDATA 00,00,36,36,36,36,26,00ă' v 118ăDATA 00,00,34,34,34,20,08,00ă' w 119ăDATA 00,00,34,34,42,62,20,00ă' x 120ăDATA 00,00,36,36,24,36,36,00ă' y 121ăDATA 00,00,36,36,36,28,08,48ă' z 122ăDATA 00,00,60,04,24,32,60,00ă' { 123ăDATA 12,16,16,48,16,16,12,00ă' | 124ăDATA 08,08,08,00,08,08,08,00ă' } 125ăDATA 24,04,04,06,04,04,24,00ă' ~ 126ăDATA 20,40,00,00,00,00,00,00ă' á 127ăDATA 12,20,20,18,18,18,20,00ă' š 128ăDATA 34,00,34,34,34,34,28,00ă'  129ăDATA 00,36,00,36,36,36,26,00ă' ™ 130ăDATA 34,28,34,34,34,34,28,00ă' ” 131ăDATA 20,00,28,34,34,34,28,00ă' „ 132ăDATA 20,00,28,02,30,34,30,00ă' up arrow 133ăDATA 08,28,08,08,08,08,08,00ă' down arrow 134ăDATA 08,08,08,08,08,28,08,00ă' right arrow 135ăDATA 00,00,04,62,04,00,00,00ă' left arrow 136ăDATA 00,00,08,31,08,00,00,00ă' diamond 137ăDATA 00,12,18,33,33,18,12,00ă' ţ 138ăDATA 00,00,30,30,30,30,00,00ă' cross 139ăDATA 00,17,10,04,10,17,00,00ă' triangle up 140ăDATA 00,00,08,28,62,00,00,00ă' triangle down 141ăDATA 00,00,62,28,08,00,00,00ă' Ž 142ăDATA 34,28,34,34,62,34,34,00ă' triangle right 143ăDATA 00,16,24,28,24,16,00,00ă' triangle left 144ăDATA 00,04,12,28,12,04,00,00ă'---------------------------------------------------------------------------ă' Constructing font character bitmapsă'---------------------------------------------------------------------------ă' Each font char is a 6x8 patternă' Example of letter k (data line: 32,32,36,40,48,40,36,00)ă' when you write the decimal values in binary you see:ă' 1 0 0 0 0 0  = 32 decă' 1 0 0 0 0 0  = 32 decă' 1 0 0 1 0 0  = 36 decă' 1 0 1 0 0 0  = 40 decă' 1 1 0 0 0 0  = 48 decă' 1 0 1 0 0 0  = 40 decă' 1 0 0 1 0 0  = 36 decă' 0 0 0 0 0 0  = 00 decă' value 1 = pixel is set / value 0 = pixel not setă' Following this pattern and converting binary to decimal you cană' design your own characters (it's easier when you use a squared sheetă' of paper).ă'==== eof ==================================================================ăLennaert ver der Linden        CLIPPED PUT ROUTINE            luckyone@xs4all.nl             08-30-99 (01:13)       QB, QBasic, PDS        142  9402     CPUT10.BAS  ' Clipped PUT routine (ie. allows for images to be partially offscreen)ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"CPUT10.ZIP",4^6:Z&=6730:?STRING$(50,177);ăU"%up()%9%%%d-%>*9sK\08WYb/%%%FE%%%1%%%%hu%zyij%rtSgRfx&(<dBTkj3xăU";H*qNeX9Fn-N[Bn^/6^2CoIpqqk,;biJ<.J64gP9<,&umBDheCNvX&4DVjC*d/;ăU"iUW,eO*M9='4T?*1;[4s]E\a^F5XAI7dKOEm$h6Eq41#hctMA8jU?6'N&d&.+VnăU",-E\XC/ulVZ,wtNqgHmO#eQ%_nR,2grDg)_YS2NYGK-mS7,N?C]As6q?/0;vc6GăU"&C78RAp>nEE38jt5gl;_e?*g<;t<4OC/6,T.9C\GOIn_QOd)I%c3p,fsv-#B9jQăU"eGAr%'>H4*S&?(7IbWXTQrssd0I^[wB1l(_MnSyT&^3n5k#,g<Lb]$W[QFsMmmFăU"op.A:e-9S)Bu8esvEIgQ(a_Zh/N^8]%Z81]hLXraVzT2w+a\wh4&$FQN)Tra_mBăU"Hwsqam1T24Cu63dX3wiKMtj/AVxe>:Wc=#+X_,Y)X%bk[0fDqgtWMsnRY&H<<_jăU"]VT6=3rC2at$Zc5x_kp,%c,m6EYE4VS*Zum;?'Y8>7t-kiQrFZ5.91Xi'*)-5'^ăU"p-WEh8:TQu$4AJYS9UX&bIDg_LJ]>Ot^/K3V*ofwDHc*G2djQ0Mh;66&:-B$ZpmăU"W)t&B2DU(/6n^*B,%qT6EmD2;C<I\2$$rXK7jMj9V66Jcu8VY8-_,sY8.fvcD]5ăU".N.eW9:(a8I,ELw=iB%u^a;BCQ>lU12iGU'XUrp/aQRA^+2t1#7bt1D;O2/S\;^ăU"[=jd7y?x&nD)4jsPnUGiA#=9D;,gvBho,pt*J$91E$jYFv9QK/C2R>UGQaFPJPoăU"_hyj5TS;zFV,)vV/Su.-A/=r#5Sm$a0RL,k;02L.X/Fs,gCGdDprfRdWK(3[J-PăU"GmmF=9TnDIL,fisvBpsH;i_uFJZ:9kR/?e6+k9F-j_UNOT#XcWU=.N),Rg5TL7+ăU"8-9>xddi?IiwR7kF$pw17eHcoeWknof2.:8:gQ]fr_.eWX=woxlN.D1/O<NZ&'UăU"d:k8fh#>xh*%;1m%g44^WecE\uZ2pz4ygMcA_mmpWT'[PFRI]N1y,KKNlYVv:/>ăU"w;AB_^3=vBJBvR'(asM)Nir(%?#.eNx%u_.vOZ*(S)90*4)B[KCe$?hvKU':5R2ăU"9qhfhvdY&3mJ2sT/.RLZ_.iJ2$VJZMgnO<qlC^ngl*k:-B'Nj*YA,mg^\ti]nO8ăU"M#T>B+_FLjb3[IPNgAK+Q(H,mALKFPqATF1.-p0XiOCSGQQ,#O8/$b53IN#'SUgăU".jVi=;1B?iu&;x+&SQKAR;vuSM9wyBC<4U2kz&i)pz4qKZ\lFqmg7OdL/$=&X8[ăU"Q,mnm;GN%.3H-K2M&XT^qi,W+pUBYbuq8s6rXn8i]D>AE;V3tu*33-?/UjOtvQKăU"8BWS#w$c%/#&bM^0vQoINDwspaFvx$j*o4h5*&Vm$oEfGEGqM&IkS[g.SjbAc70ăU"vLt4a+ki-\aR8)mpq,dJ/DYx:Wt%-9(7tY7Js-&02PK=ee6A_BC+,ucjlm[_#(9ăU"L8C#i0OjLF.uCf'5pb.dau5O.'yHmM_&B:eNo8+D.b_ieLO^k*qx)JBUqkfrx0aăU"3qbB(3G<>qJ4S&7]CxCHLM]?DXCDncawlMjEBhlVS7Z[SfKto'<kVC=+?u+<7?YăU"9aC_+.y7:v&8NZOx7d5ZsR(Rs+&74DKlE+f6[W-,>%/&.=2i<<LbI9_Xmg^Pwi7ăU"8=h47D?i4IU)Ay02*ig9rbGv^+.zSPQvLP<8g'3%n<AB^C_G8V?DsJ>3H[=:n8căU",4?o'-*86nO0/Nltpj#([G?Y_LJvXU]Bf_W2l\QPa1>fQj_4JrX]i)3ApBvAFZPăU"BNERy1Oz:11(OlcOzM$->:jWbz=1AfD]Wnz)Ya?Ib4s^.73^FIlNz+fA<o>WUCvăU"7=u7/4x_VW8XxZu]uO5O*DZ30ib_cg(2*3N1<o2p7I\BJ9%G26A?U5V+>moK'GTăU"+33>1W[:gRi4<=S+Z'XK,9&5vJ))tk+nGfd=aA7zJaJ:Y%T1/YW'H,E0Q[yOfX_ăU"UgcB;vdQ/,VCAwats[=PCG#vfiho;h7pK)t$\k,khSYd016BB;\qTADH(.)/fFRăU"%rcH;NbwUM_M\;_bK_>(:H_4/,hns#_&tWD-0_o[uO&lws#p:bmdIQ-:<U.kE(6ăU"f%Vm8*r;/atW<Jpz;4g;G(9#w.iQ%EZN97'p]cU.I)cA86Lw$'o?c8sLA5g6XC/ăU"FwRxK]CH#+/dQUKR'oi,6%FgYK,FyQ5)>GoAmf%SS+[PT#,;^9KlAS5cZd?K*CrăU"-Bg75-n#Iiljt3Gr-7ey*jIF<8leyOswXq9[Z>yjNCO2#r\W3Oc)C?hsyjDLe2MăU"sa)aMfU)C72aqU:=Xkp8p4\f3>AibiA^;A]f_Dl'>1r89^?P6NJt5zNi9:touebăU"%&G'^I<mqhnpsE\U_]T_C5K;F?0JZ-F%pExcHRS7Jl]pA819YMPc0hKv:k-Xnf5ăU"XvhksUdHnF7gAZ^QgL__Nz*i&-W8fhjo/nMm7pJRe5KO;#;t+SEnYB\#\83[cf5ăU"LCBHn_e&1JdQ3R-lDRB].0gGX:.gpi9%Vpw[;c)u:2aK.o-w0D<0v._#gcx6/KjăU"6g5L;Q%3&oGsN=PdqfR)FeL1pP]HfmklT7(nebx\IN+os02bswrqoKKUC6bck-RăU"pYmr/R9U3PUOwnJ(_k(;)HXYk?nMhl?Ru)uW6LZX/v-td(Z[f3.\>RXJ'=U</54ăU"*\DT/r^\&\]TS)Eak]gSD#>'Gx2fQyFfO[A,ofP07-=8Rpnz%)%Z%)?2:M0Nj&ZăU"FHDAH*cI_6G2:5+bL9(uqO/8KTGo8r/MRkw#^J2;Qrhl4h[#t]MeMKQ8K$51FFlăU"\V,*s+-q.QM$6XNan,J+Dh6Y'\av:S=I.7rVIeLY)]1]bcPl&^o_2'l)l+<$?1OăU"<f&If?R80RUfsxTj)kRAw10%su:U'zwd=H;l:Fd8=%c$fxdWn\rfO#kL$2uc+pWăU"]No0u.ow(EtX\hdqauJ.K?FcU^,1Ef'$RZCB[+.i?3Nrld+cWOO%UDNW7.ouJ?^ăU"4eBv09?GK#Ml7UMp$RIMeJW,^NY,bq^jJ7v<6)dQ5:WWv,Od5SO:=N_Q%sD(d2KăU"9UaA,8V3BW8l\svL:aN'8.DNwA']V^^>R>qqxM2pn=ck#r0[strGP?(s$Q-i:_8ăU"NHRiaHn;Hps$/#6IsSu8l4PC1kD#rWlF#1ORlB3CP7%mJT>:u5dUS6N-&3Op96IăU"(4^zJLIorYs*GMjsRI<DGVG.Ut?FZUleoR_Pkr/4.0=)P',e.vcgTgJ&4ier(PTăU"Vt,E>pR2v4YFK.MphLzQxt9Gt1QxR4p]xziC8*4h\D+V-7vX/bmgwI*r=*RWl;0ăU"QKVdqoM8-c<k42__NosQlTv9%Yl-GYosjN_'p7HjV+GHpJj0\TAV]Qj;UT$O8cdăU">]%q\kZ(PJbEEcs+EMZF6S:q6g(fk[:?Hk\JMRd]N98$V>>(7'ZweHPVa:N6VU(ăU"V-I=,U,+$r?5UK*c-+-Ve-$E8F4oIXnQQ^nYz4(EFDCo)<oZ[NPVkyiKp[u4tTNăU":.?4V.:K.gr\4wwNu%p()9%%%%-p%,+s%K$Yn,CF+%+%2:%%%-%%%%huz#ySy'jăU"yF'f,>T[8]xCExE<LN9+<+?Lb,J)ffiI8/nup0-=n*fH%Rv;D*LskwT*ze^9XBnăU"k3R-a'%BuFj4RjGT]8$ChZgu3C5?#\:,):YcQQXJ.BC/3.f3Au#H##6+)#t=\FmăU">9s6U9duCN&Uak4+w-l[x*TR<qC'uBjwWZwW2%e]P6ZPSWoH5MHh(qPN/x?oR+^ăU"g,lPJet8YpdP<:/pQ3iZdwNc5$K5FMHUKCfllfL$;Uv;*XG'qk.n99p(CKbP&$,ăU"xN]uz/,i)s6(KXu>^L4M3/eGF(;Df7#3*SG*c&mVP761wK0DX-SX/tu/8K<6otRăU"s(Nu.l6=fIF-d-)$G5pQ+X8g\#=:E1]P::sEh%=(D2YX;zH>&:7(8Z^h*f0('r5ăU"8gm_fn2ipOy8'y7gL(rmb0Ae8<hp8Y(&O>h)C;_<B:a<-r*IjqMNdHb]F2o&j'SăU"/Gs4Z0sy$(blRK(23c;ev)7=ShR59x5#e5:uHLW%gBP:+\Ys1yW$'A\9c/7w#NsăU"lmCp:IU<Fk=U]?E$MzA.leRTjHRtI?%j)wQJ9zX2RA+D<JOdi'5RoPTEHDvDa0,ăU"/W,:>59(*&Vj%M\6jjyHvYF+X6UVSJwjC,4=q/f2mX&YjDf=IO+J,)bHE<oYR/XăU"b2'2)HUcogje#<#z=7%GoA[yO$9;(d9?#H^od]C48s]#_x(OM;K/xr4R[sdpaWKăU"s[n):wE,T6]k^?$#8a$uiaL]nA;oLcb*q2'MU#Tj[7g66N75^g8seF(p]xSc&FqăU"]hgZMjPSmYOXt>LP_k^r7[PB(9TUI,&bo^#6Av)&yYebA#hj7Sy(-T2*6#i#3XWăU"*BDNx3[C?dC<$ftOpm-yem_Au%e^9&Ud.U=P=S4m[,Da?^gtGj61_IZ7]1f>?]băU"6o-r$%^k,X+U%cq^JBCt<^\qbiS<L.XcLqGSSN8LIgog*Kv^fSbb+tSEAia%puEăU"2rE^Ue96O?+QCq/\4jxWk]D1S?-GG=k%An9]BCb76QR'qL+OX[29kHp2*oRVDuJăU"#W=dARR(zGi=1S$6?u_^Z,F]kS(uXQxtmO#UoO9&-p6l#qlem5eO>UJva3Rww$1ăU"2k)Phm(\o'V<d3-R?U7m*lGpsQeR#AuvvUf<=+.MKjXO>JT?78wm$e#j%fXbMI^ăU"I,=FHpGyYRhsNmftExXZEhNJ8lm6^]:6+7&HB9G'gtr93,jiZ7DOceSpd=\,fOvăU"t8m>c68f7PKg+j_5[Y$b&/*/zK?]H4g7rD9J:seY?l#-i\fXCQJTcZPEn/'>ABYăU"dNP9pZ[##]e=]j+dT6ii]FrN*P2:an5BBcs#tuwKQBuG0dqh]33tCk]Pl2gMWxuăU"AQC.si$(:e?7f<IzQuLrlr$WDJT:=xN4(dX:A.]aRJ&$xuRZz^x\EwA?'j=N/H*ăU"_W4n]2sE9s_l+-A2k(uk:&MY,r;'R,nGb^*dyv\,JyL8:)vi3IJ(B^&.0PEWb$wăU"iG*u7MZ:*f-1Vrj^&d872%r-ijZKF*ikFohelkEBks]5U),o.zU(R?Wdo*383FvăU"bl/k_8#cGhEY9C.<v'n30=bDFeGigim.HXW:Xr\WeWa&p)O*i28FH4v_PfcfYnpăU"9-<:uG6FC/RKD+Z&cKl<5P30Rj=Vvdc/Gl/_&*YtR/6PqU?e*Y<tv%l03^hqwR/ăU").#6CVBN)-<Wa,TS^+Lq-%Va.OiCshG%iYEmOoRU&EQ5>y.0l:Bpft#T[fjj]Z/ăU"rtJQVit.iU9CvW]S3m,\']CcmGP/A0ZB6N&G*r2mmlt^/eQ10,Ua_*jDG0W%+&%ăU"i*>V$8tN\iUTn,(Lwj1t,g$3V>3bxpBd,B%)R?tR&0X.+[71zjB^Rnu(oks5P9QăU"o\\:cpG)tmV.MrjFvSnSW]UNX/Lrj?sMH,wxf$)3zL]6F?&uZEs7$:AdTepqbiZăU";Z4cUYk;4;0V,EfX09HeX[+;lCp$%XMIhQ]5ph&,iG4cDekO:VCcP?T#I%2*g^_ăU"Z>h70j/y/5i.sR$+Dt&V+apGu+0Ks3:<*=4xCB7>I#[l85&Cp]soQxpGuYm<T]BăU"TTZ?iaah'wJ'xOOXkr%uC1j/%gtY.]$Mzkv+ux>i?L=:Sl$q3$9b$59f6fgbrESăU"PXWzH0=&_P_0BW(4+-d)aT[DcIKSgd/cffl=Fju/SCv0];Mw]b0bMIdSm2+</R?ăU"nQ2h_S?RNnVtpDjOW.e(_8B7^]Pofndw'Wdup%()9%%%%-%>V*sKq.66J&1,%%'ăU"c9%%%-%%%%huzy%SgfxN&&<B][]7w:Ayq4)L*\*[Ie&BdKFD2/),k>eu-?QnhpoăU"g.c]o)ff=X.o^)X($8=n?^K08o2ExXl]g\bvjmVat;=>aqk,i=(EYURJ_AdgnUVăU"aDg1bLy(Y\]\29E97MD8So=Ii4x1ijv)2mySnVP:HnQZLq2+;q76n;qo3knr9x[ăU"Fz=:zZO9j/sUkVHHg-3j#Up^6^9t'X/'9BN5oV;fF(7K0^/lx.qOE0T6&<_.a6)ăU"m:eBE/G.G=AVh6Qu()O)UX\8I8>1*:Q(g6*T:/[RhuBiMHgQUsWN.6Mgp1;R_]băU"/DeEf.UZ;Gf:8R4l'1e%lCVi)Pgm:9HG?i^8KA(7'i+B(1LM-_^0;kWNYFp=?=9ăU"*-meP'PwNDs5W>Y1B$ak[ONcagSZL+7Iw1NPCoj/yn?'kC'OMxaGsizY%%v-=1[ăU"$oLL;8F^'*2Hr0.K7FBLAQ4&SN/A#S(j+H\8Iu2[XV<(>Ll=sr<b6Cq/>s%YdkPăU"=%;%wcM>qlRy,/mr*d;p7U)'mNF2\2$iw2$aw#ELO&G$SJB-%zPWFGomm1UQ4bjăU"6+[p+mlAkPB0F7+%,_(2>i2_CPme0Kf-tw*?uM:Q+1jKquYj';3ogbdQvE-]tQgăU"U;YImIh4e1')?.=8HnnM1M<aFqVR(U,4Gw/n0]vpUm_h4LqMl%'9BC*SL&47W6lăU"EB[QSfkI\$$r<;^jcx+$-gc=FdHonC.lTV=_Xqdm[G-:hw8f>,-sG6al_Axd1hPăU"DjC/WC0mL4yyS0COqv8wlk*Mnk;G.l#EcP4j$*eiG(&8'9+lGTejQ=j-tC/'M.eăU"RkEQ)MPa5:3kvT'kx6Yb)07zVj#vh#4AJepMR:'NkQ8>k[AtFFuXh:xr[]96X#qăU"M1IWeBuP'-sLtS,,A$E6f&53E8V9DJE?>H;alsu.v<_E[?uj#G:IVOE2ch9zc%$ăU"/\uI9/[A?-Se3w2P_XL3.oK(;q$CzYf3/Ml>Z*5:m1iEJn>$7crLAh[tDKig\78ăU"_Hei28be^pMU^r75d]#:pTD2x)/,9hJ(Mf3-]Ad>EDtwM'^)W=Z:wjs0MX6POh.ăU"a'bpWlUsQi;$b#G4,m1$CJc9mAHZ.B#4,Qs&Dpq,;0(<N.&)R/q>(ulo#_9/A&hăU"B$h,,tzOsqLh:y*V:Kkp?*'k((<HZ)ncpgI)BBgX%OD7sA,2)J'*fqN[p6w8m7OăU"Y;(Y#_]?%8V--T#pBP-EQoOm5,_\K'1+)eumS1Edu5Ru='8MWzas2IOqm)Zw5?3ăU"=Nw:=[P%qg37jBB;;Y#m?9VEBLWk8uJAEJ[m\5%p6<E5(T7x(_Qm2&=cCM[Y;:<ăU"EL3Rbm=2&Ga0gRNmDc_TE:2-n]X>F2ol\>c[U[>]+<>sc)<3%H'G<#Ujg%y(<Q&ăU"J#2Ml.DRoEYdA3.5%zZ1m*Y_ahWv[e$<o.-B/Xa_K2=:>Z\Epo0>P:Q[n*Lq:3găU"Ur;uC>G6.[etAS,.I1cFIGkaiT-:;]igLUm;?<SG4Oa+f:=mR''S1>VdqLxfPmsăU"$.HRIRFY8NmUWKM$*Ji[8-STO)%Lmmi6#='Vf6%cI*S-WO%m>.FFq)&IOS+jaaEăU")k:>UgC.X;&[F\D[)\XUo9dC;yQ[pRr0Pv0?\6_rjv(GU*STxavc)vS_o_Q>]MUăU"a7t9fUQOnGyq^.SsEY^0hbboE4r+p0$GMGK:rN9s1r?Hmgc+SG6l.&ru<91/cJpăU"68+omaCEjkgl(ZZQmXfX^A)&8OiW*nb\Jf*lNH$d4(mW0It=uLXadg$\Foimle4ăU"csrs<aB6A#qR:l8pb;tgrn/]$e.WN]i4wAru$vm.UcHqT]F9KbHq6T=UD=Uj3WGăU"A4?Lj&dj=2_xisPqd;=vJ^V:CHpiS9,u_Gud+99nMg.k<>dsBYn(tvhExW1y\.+ăU"5l>S>0XLVf?6N[]['gkEtX*$M)S+Ke>/u/dGqQR2FUO6iaGIXPC'INI_PVVGV)oăU"ChNTPY-cnl7d<Vn,blXtNT(nAp)BydU8:[O$hnhmh3qR-;5ubG\BMCbNd_=LWe7ăU"^1aFxTNE1sLX#P\v+:Wh4>'>fi<4n>i>0OHaLhlw.Iwn22WtmzK0Wj<1ieL8zLKăU"Y%D?lasprY?CFq#MUyJJdj$=fqR[oI=cA3#q36&FE)lrpe$^FnDN,r]k)GNop/HăU"KB$\C$4qbD63,Bpl%bme'aNw=OlQob=OHvx,/N4Lm^G<__i#\U%JBt&QUiek=?lăU"$>kts[]rhL3HeR9UI(hKoQ\vVJTek=A844dPxFk<l-QsFtW4SlQ5z6:OrvvD4[LăU"Jm;kpvf]qwvty8LsS_MxidSq(P*3Sk$Rd[n8p.mtR;+^a/gxgSg.db6]F)$Feh0ăU"q'n6cwjXbSuEFKX\6vL64V9Hooo<F3Q_G=s88ZM2<RW]9:sn'x&up%&'9%%9%%%ăU"d-%>*9sK\08WYb/%%%FE%%%1%%%%%%%%%&%%E%%%%%%%%%huzy%ijrt%Sgfx%upăU"&'%9%9%%%%-%>,+sK#$YnC'F+%%'2:%%%-%%%%%%%%%&%E%%%%80%%%hu%zySy&ăU"'yup%&'9%%9%%%d-%V*KsK.666J1,7%%c9%%%-%%%%%%%%%&%%E%%%%+7%%%huzăU"y%Sgfx%up*+%%%%%%(%(%&u%%%&]>%%%%%ăEND SUBăCLOSE:IF S=236AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDarryl R. Waltz                FULL SCREEN VERTICAL SCROLLING drw@telusplanet.com            08-30-99 (03:04)       QB, QBasic, PDS        609  40015    VSCROLL.BAS '********************************************************ă'AWESOME full screen vertical scrolling demo in SCREEN 13ă'********************************************************ăă'Run this program to extract Vscroll.zipă'Unzip Vscroll.zip to desired directoryă'Run SETUP.BASă'Then run DEMO.BASă'Best scrolling demo for Qbasic you'll ever see!ăăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VSCROLL.ZIP",4^6:Z&=29518:?STRING$(50,177);ăU"%up()%9%'%7-%m6.CLDR>s1I*7%%[6%%%.%#%%x42CD?Sh10B&M'<>qS)5w=N[NăU"gGf4P;&jPI)TcUV)j0-Zf/4&S<dS<e*:2Q1_[?ows$&B3E:hJD.Q^2T^l>E_EaOăU"XKChqF60t'30LU%sgd2]ZJqKQRQ^/7Zs[MJiRm/X7G\I-&baTFEvV*K:WXn^7N3ăU"L,(+oFq\BJoiLC\=:M+:YUs/9=jRK,(rN:'Z%U['j.hbn3N7_Hd]sn/js9SDjU?ăU"qQnAS.miZSr%EX_a.I3OT#AW>Xub&i28B0lC<+9Wr6+2?z^%l\YIGD?C2n7eF[băU")Byi[pWy=w*Iz7DgqfW<Y$#'h:hc#/u^Z/;:xpU]M;ZA.ep=er<?PLCRvB_%HV+ăU"rL]#+C6(R\pqPQ0czEZ*#627R\+1e0sxdC1>ZAU]Ms9mWIPUvxPu^laG<p<7mvRăU"Mwa+I#e&B]$^F02)?zJ5=IOw\1^#(p]f?2s']Koub%PuOeqowef5[,i$BD0[en7ăU"^f1\y;B^yFv5pUZD1b6Xd;]5DJ=:G?dYc\wx)v+s8tAV6o(U[;j/M6o%EW]fPHFăU"Ny)Yo/9.mqeDG&VBFH^k26A[*<jgj$>SmC&'[%qq/6+XAEU$9gaKV-v>8&iYiHqăU"TU'uN[HM+2dPC.jE*B.:]sHMX\=u<+cuv*3_vls$*&a;J\PE2($IYFZ041.f]2uăU"f#']NmMN(ml0lg)$Y.,U<<'f9ALpIc(fLUODp;jF%I5aLBTsnZPU;##R-SQE&*TăU"iO0SDKH:Lku&9C^*Fqe$talZ)dn+XP,?x:/IRZwNI[<q9Q6VtoC0X)b[=#blT0jăU"pG,wjFN0+tiUC-JBEg&C;QL3q1U^Pl=B(-a45$Q&,^aZ3jTV9i$%.&jOG]mXk6CăU"hA,jd><5QHfieaL;SWql^q_;6ia^oA1K,pvq\fj8ngKeAesg3Rhe6Gldc$av^V*ăU"IDHR'N)DbHXC\?*;k\aHZoY^]L=uTvY#aN35'$>$mFNZ?)iVZbf[1%w.p-,*&sCăU"K&JEwSwnD=B)Giv#AWe)vsRogsvE^^4aGqo9H0XSW.2?Yo8f]KBAH]3Mf(M*6UFăU".;Ulm5SbB$ng26^Q0<HbB;h5h>agmInByXm8.l8I*74KD^r+ed.^'qD/o^oHfL5ăU"PL-lxg1C4\+%n29[<*>VC=nQ75pun$+,[-+r.^27SEuH-Q0n$$W.:(E*+S4kb6păU"3R4%74qlrG:0h-cp12avV_/9$9d-]09=EH/;p#Owwy1>U$IPPp28(4[U\a>;E5jăU"57tqD6>jak9/j1smjKjf[D[aJ%akS:7h<F-20YrD_9;tuJctNVQc[LW4lT^mc1:ăU"4X?3le$jt-rD_I\md(R3f;3qGr>o$RYjam;.hZ75w<_XeS]1pgsN=wk>pcq_1*#ăU"?.Y?2TR)7VUZtF7J\D$G3tmMk.-'&Omkr*lLq82?eI1DIcS6brqC/9rZ\$HesYeăU"xM0:W.:qv:U7(%n(s3_$V6'Ef-KZil1R(GUvA$N#P5w;J$T+XqqYm/T<c]ZXw(?ăU"z\(%IV+Z5N#*yptwB#Pt^B)7VwsJH<b]:fAUjtXtZhjSuY?/2wS;A]M)AeR&A.SăU".]g/<E5wJK3bjeciQQfk1_de%$Be]*%;DK[nrB#E/qt$4uqkDtR<v$gYpn/r5Y<ăU"A76HbFK'O>*DT\5%-U/gt4VZdg_i0U-WL?cZZ7a%4e5al&x\o]RmeAtJAZ$gkMZăU"wxeE[Z+Zdp1K%W[S:CNmR85'si.r-JHv#PJWhx&j5.zgdB]_^bSC)tmo4D++a#CăU"_r,oQ'tb$Am+,Y4:.1g;fKQKrwU=9)zKD5;i,5ovg,)=N[*7?77s-5G\UIcxO1,ăU"HZwtw)4C8jqRvZPd&qNw67i4M)82cR0.L:WCeAs/w9<=?-j<B-,2:)Xtg%AeaTYăU"%4Qy$B[$.LMx8_U6uXNu%p()9%%'%-%%)2C7LArY(yw,%+%:8%%%-%%I%i4<J>SăU"10kB.'h,BSm7ivmyu[4B[4;U,%(nkD/p)Ez%PF3.[?qObFOM%,\s%&9p?dsHPn?ăU"XXd>^.?q+(s=tDmQYcbtHVvs-FAl<ugnAbDDvtnRArkSN+4wXAnNxs2tsHC:jsvăU"y<CSOWKFg.gA6:j0Z+9%hD'$$k028m65wUZIH&;$(_(dKLt#0h+]Bwidd,;2t$1ăU"aWIQ$M=EJiTivptnYF6jXG>\ViY\LE&x)\sGKu(9WY2Fz'N.J0Q_[3lLW-HjwhMăU"Ds8?T_PkSN&5<_*:W%i<GAKID2JL).ix%5S&p&Fp/MCXq#+9<J;b3+-X8\XbIIaăU"d6<mi+Une?'_Cg6WLgkRS_6;HiILYMsKO#I>XTSYRh958j/In+?-9QqK>&<ifP2ăU"tDW'W9&'HW2mIpPN%awa]O>I9=WBYlbU.+ZLjF[Ri7ItL$BwzW.[6wVo\Cr5OZ(ăU"]CYO\l6(Y*[,8,1VAFem[EG_FY&sm8Q6^eaPQbV4FuUxVI&woX=GSnZtC'oxYjiăU"3_]4Q_FYd4H[PLjyA/<b+p?=3nk1lW+tAIeNxb)r[UdO'3'3j1Cb76A.s2$+go+ăU"HJ74b^e<Y6*lT49^Ot0>;Hl?GiFQCF.V01Y1fw>B9D(MtuG$KH876'&$].C$L1EăU">>US,K0_+d6^LsZ6?b&3tl=)gkq.&7F*B9F%/U([,fhNml+b::5A^xFE>ek/dl3ăU"-9\U,P0zI//,zK&fXV[h#]Q+V0TU$_FWZE5eM#s;1^MA0FGK8UH/B<BofB.RETeăU"T+8,v1O.B8iE;oO7[bDiPg-xsgD]l#huC+RZ0G<zQ(t0\t.z1quipI?R[j*wg3jăU"TWJ0LaQfF405KTYM&:W/]<T/O#8W1-oB+\*%(rUO-^+%kH>k8CAs%oAc_Fmvjc8ăU"MI0w8Pf%+?(Vd*BgKgnAb[cwa3[(R.41u/I,Y5iFL%+Bm:=v/0D<amX,OdSZb2$ăU"E20a[*9Dx[Lo?L2h%F;<N0\%zT\ic(dc+6s]geZUKirx-c,--YJ6OIccUaquWRBăU"iP<ercU-iADeEi6?DU#WEs<CN;E7Pl)0?$7v-NnLRj(^7Y*2vC=z3M_56tt+8PBăU"wBt)/[B=e7w(r:)0)g1FVh.$[;#]qeFh=HR4_A>=-JtKF-Yv[WmI8HLxEmpW?2^ăU"]4GW9fYL/RJZ#Z;/7wc]?xc$/8FCF$L1wgDSep>n+rE?Duq'YmoO1G>oV%t_eoBăU">acTE7RD-'2*[I?Jh'DLNMYrZsi+AZ+*(qo9lz90Phf^TZVMXyCo(eVOk%+j')QăU"VLMQZvQ2?-'3L=i#=7o=(PQ6][n6g$X2H0BS&KY2oy&4dtx\jiH.:#dWW19]U\<ăU"IH.HQXX\;4;2V=giXJ$^;LQ^#cDPgpKPGgQ*WMT^;\ySrQ*9e,bYAx#Hw#=$WtmăU"on7zh59Usl/9<cen6Gx4<nv0pFe/]rgfjDGQG1Y<RV:)%e-XPt_W(.69e'xi3bfăU"m06Tdsir;=-0?6u'NZjZqMu)zZN(9fenG2hh)b51C71.yZWHS5^Y&5\W[KmY=k7ăU"tZ&j4-oLLab?p6Q&)Y#vH$^pOh1<P>^4>tsnvr5.UhESF0fK2]NX)khZ$8D3-awăU"cX=Po(k+xPEI8Iq)4]+jC$[p8[x3NaFAs-/Sgu6n.RshxM^ZwOqeRZ5GGK;Qw\6ăU"JWK=:50_]ssF534=RWNWB2]fcxwif;A;wA%hZti;m-PU/MZj1W'nPv?,Bl_#Q#2ăU"[6NqCwmPLm'+kV0qe:WX?H,BcXGW'krFVV16hRzA.\bxXwBNv>i/x:<tLcu\oHZăU"rLv<g>AzO.&L]%c[\4l0LBk;hL$9iYE+_g,JU*s-S^63,J8Rc/RJ:AxA1N\Bda(ăU"eU+>eb7xRK#.RK_eK\?K>8IeR4_\AYc6bv4rNy_R,ymCvC::t/8hVw\14%-cn*OăU"sEnDyGUDR>w2XvgR<^RW//EiOLoNH'W^Q?#v:S$#BD57/'$i[-pJL3pqKd6:N6\ăU"q1;k/bz*4>LZ=Kp(64_3iQrai)54:dOv>ZO0]2r>8m-n$\x$T/(yUl,^\C11RL$ăU"7nKz%E^&:HK&Ot6Cr7j7SIDP6P)/$<MSvtLhL$u/f&XH[-/3IYDPg=;C6S;Ds=kăU"]Qg-&+uJfaQ2/O\nLFV/CjqiTK';otx0X<=xEwPkAF-\y9;p:W'6\:EY(r*_-_xăU"DXtFIn:6^opeP(B\Sd.E4,O5<iI&GVoPo*PL4tylVheQTM'Xld,c\wx))%xs$&uăU")flt%JYr.DIb_f3Oa:AABGuu1Fu[6OaF7bAKXWw%#(=oL&Q4a>C2m8cMlWZcx('ăU":Lx5\g4i_lt[NI*aR]E;]Cwu+t4-#F?vtkuNg$Gm-\wutW\r$cM''7hj43W0HolăU"\WL^TVsZKAN[baQ$gJm.2oF3[r<#fiy-Btkerp'nArdoMhN&Nn3:[3h%b&8eik9ăU"i9MQhG+9E87wJ;:8HRbMoXN-ox8+lWMMWX<1x;u.d%.48(vtXKge5pW3/x%<up(ăU"%)9%'[%-%=bwmKn0kC2]%L%%N&:%%.%%%%g%fqqVLS?2GNfL8aQ]?ht/6'?):aOăU"9>?m8hUb23/(<<zi7B7%6$.p:(J#vwpqeI]k^U,jV<Oh/\;WEAWJBgeQdFz%oANăU"w[D5]?')YZX73J2s:=[m+dxbS5[x?Bl4\KuxTXuu_,XcZ$,HMrtjHqulr$?YKwRăU">=d$H<q.KwRg<.Kj,7E4diu/=wNl\=IuZHLsnjcc6L\dDRs08e^HB5ZjW\=l3cgăU"Fyt%4a3ktFqJvb)(t_=T?h-i2\unXDv51jWu)(mLq/J,;vldm08hurYM&PXLl?;ăU"<gSC=cFads2hwG#5kvTTRiEgw#;rY\lxa69opz-N*Dmtu$47_xHJH,g:fy;l[aSăU"960pDGAFSE1I1d=*Tjj*$s30<:>h^MrlayDR(bxhM>Q:17+(=58kG2#UgM7RHwMăU"uuzK:XRDCnE,&,<79#;W/T\Lq4?s7A9ac^/dr=d8CSoE(XDr%>b4WYPLp/9gd;lăU"(&P=e'21ly?OHMr>%lx&JLu*2+G.X8#X1XOJe-1[v:%os9kvr0O%_6'IgkM/cjqăU"D[H;U75*BRhUEI%6s5R7^79F3N1Ym'M;6e#=l(EAX%UgqG/E0JByKFu&mc.$1ppăU"hL21PKQiY[9hf?CJO1=wI%RR]C+NxTsV5VqV$]'ERzWfz:qC2QQZue7[4=JZ.I6ăU"heaoY^a9L5eu,^?4Eg%rGtRe)hPYBaA705iXH&XTCq+U[=k996h%=:*Cg1#qj,'ăU"W_fO#rWHsR7_)KBAArh;ho\VNlEyQ#0g,G^g\M%P%edm>/Ejf*p_;m>Km<PF(w7ăU"e7D2qc<SI)+q)V40'..y4%UYZe1EQ[yecN_tay4QiU-M;kF(A>?I(]8V[)oE5quăU":_WU\JLC.KYu&]ou5W+/n%62Gu=4QtE87h1C$k3.*yv.077'dlMO^96[da5W%UiăU"&2=,\.>M^Zp(C?-;bp[1KGsul/#XUn;s0XaJ%*F'X'e>G1fks2n2p]B<o0;:\JMăU"0INg5ol4?\jO93ibu2md_D(3(POJ9pA-2I,$FRx;HPB1e-duM</ns6u-]F8MAF)ăU"OTg6$IP]M'>Ww^cAY-W'h^7Y[Fz6u\sgeTIK?cjeZ_iIMbqyVGx99a9e2U#n]reăU"sOSm\lCr;U'C%3tY2#Tp2_5m,k+2c6ORC+J/G0Uu02KOwLI_GW7I06*aU:/ms&IăU"=L7Ob;[YOc[_s'iV]6\3499FqZ[.0:%7),,eXNbMU<\SV#=w/O4)k,((m.9<BmLăU"JX99N:,:A+7hTgp71XB&-<%FEb3/:eG);<P,_;q)IfU<FA#[F.b<#)o9J9+U%EDăU"]u//3ZIfw9u-;++x7-aLKK.v5WPBvnD#UR4TV>$At/Tw;uS<s6Tn%BnA5^[0lR_ăU"'0s'JiB\G.QSambH*[kU>y2TiK__B_Wao%e(A5;U=XP=uZ+A)/;,CO/W.EAE53UăU"'3W)6?3c<sHe\UWQ*#uwecBO1Boo8RK&Rpu.$)VYab)Sh(h.UU'MhY.[edwXY/7ăU"jMy/y9Wb$w]kS-+&DqR;+(T(l[yDOhwPLX]n?[<=esnP3p5#u0iLFRBr0xRaIX^ăU"iv'dA[f#+?EqJ)&Sk,CY]cyOq.t])]:P'gi\[bVW=T'7?c/1+WC;'HA8]/1IT0răU"=HtcT:Lo6&c,ApMV7FZ$5$D+%?udsE[GuO%Q<El?UXj,'ZS:s.Q%[<4JanIEVL5ăU"a]V=F#BTU(Ii9Y)safFjn]l*E3VBJnytP].vbC+;EVQW%=wo\EC'#8NurK2_$B3ăU"N,uq\&+#+NuEfQ163)sa?)^wJ?;OCvK'dG]4QuBEgkQ-,J$U4bFlo\wmaz[,_#eăU"_4WatY$gP:gPo\baqBFya<4&11ige>v2Z&KYg_c&a+Sch/KC*n'uSd\+qU$OE)văU"(;(mR/H:*<lWY.P_^G*c(Xb*p%sXC)33]h]1,,*BRnK,R%k[u2Eka1\?>v.WW<[ăU"e#=V71Oe8.+9s48CQOg_Jy2o1da,zFq]FUM?U43D7St)Y2:\%M3R?[#27NoopV<ăU"LwoW]GA5]_'aRGTJm,52#jyk+JH)u8q1b,n#iGRbW:*no(q45FZEQfn3WtYn0nQăU"+Sj'413>_6:GDvN*'luDp0j3c'M+U0mNZzi]Pljh7\YAE3[,Ry2:mN:ql-jj)0lăU"#(#MBb(i%tT^K,4&Y&UgQ(P=VJ4kWJcV06oB.nWtXe,TBi;Q5.OqQI2.WP&i]==ăU"\(%ld/x-R9)GaUCJ8nC.,]Z0F/NmAJQF**$[4-:F41EX]IAHX32K<-z=0a;dK2iăU"692/Lc<B%XG.LWVo3Mw3cM7V%]]OPKzI=.$Y7aCYTFL(P]$AJ$9c)*qQ#A3?7g4ăU"VqQU),SWVEiNLS^>-ww9=qiUm^ClRsUKA]<A9kjmCtk:Ph\/zF$Jj8[En#+ChtMăU"'reGtSV_7RZiuR;R=Nu<b-:F/vJ)SKgfT+HN(K2urLB\eOlr=&+R'^E5<W<A,AqăU"*G$]V3XvY7XmxX?t;9oRLLaE=C[:+Tr[q(ecnb$,=IVW&&-z/AFQ\%,Oun>.aDkăU"B=+koehyXvZTs*Slx:_fSZy?%ruXMV*awykr5VJ;(.-u'0IBq<5q_=X'$Q*K5ysăU"]&7/yYx*1H)'Cgt,ua<5#oR-x<kR*WM]<U27:eVO28AvQKt8sqVkjjHkpN]ytD^ăU"4uI2VP(SQ9v;WwJ2y-8Q5FY%(g<j,ACf(<m>]s78ze<I2(GMU+5ri?\i3ImUraLăU"uY4/mW1,&>6ezR,Z+ely(X).?e<K&Ga#7fG29uG4.miV#,4ofh*06WWs%UF7%kUăU"9o+1tJS0I\/v*6?9u'f_Bcc+Be>mbFAH4t5<uL+PHOYC5JM/jtu#,ZCh3GMNqJ6ăU"CNV7O*&h,n4IY7UDTURGS.Nfqccer/+Y_NHma;I%4B?SU]/5uGc4,,4n6CD->^2ăU"rUnX+CYhiUY(;P%Kl1]o=y#SFWQ.S=7:KCXh6E9yoHDaRZTlZfPP%w6m+2km01JăU"3>U)MM'c7:Elmq9KIR'brS]DGz,_GXik=$KXQTLJJ$lkY*n9_/eZXOWNTcQ^-5găU"%%-f1z,noxM9iBKuJuahS29qPn)685JVnv,bod9/A+uj3'%-hO>pM+8ad]M9LtBăU"]gB7aA?qI'Nwffwn5G5\8,7$=&y>]eGlO1r%sYrHb;-HQ,aP:x1NP&D#A9A9F(XăU"IHaEjSAO(38<E:?LBwV#]CKfSk9>E5'FrD_Ft(/e#JK15#dM$sBpuA6\%J\]D>=ăU"4v<A+=7,',VtPu\Wt-qkLGKugSc,N?8nduF'niMtm/^y;7ePxH_am$Y+Z[qoJV4ăU"N-G_^Wl^h9vai>&hIR*t=2/%ArN5/GKHoNC0IEXisD#9.5Zk?%PJZjM1d$n>P00ăU"ypHyBE(w&cZ[z5)*p+p.Ql'?(B9ap'nJ\6jVr*S3J^PH(+ZR[dT)Sgz?,X^;ZJqăU"xv3q7df+8d'=Lm'N>7RWQAPT'Hd9>//Gy>AE+-[z,O]P*6WPK[G,m=m>*P8euBSăU"\scm6X]I*s#[0W_JHk&E(1uxlSoF?4u70kDLcFwAWGY+1n?Zi0j(;sS%<8qkA4aăU"^dE,v(hBH#Cso%n::L493HhTqkE3*mT-WY]YtT_3n3glycjK:kI$Ie>/g7Tpkz(ăU"uhoFti,/%0fGRr2S%ua^MQyR\StOF]mT]?.+[HuS-XJ\OHKaan>uNCWQ_;1*Wa/ăU"9\WRt/)'+S53AKiY2-,Bj.luUr#?IMk%U1_QEeA;NY$$&41ejvli?sfA'o>=-60ăU"-de07k<'+'/m-<F]b:/:;Ta_D?Pbs8R7c0ci#AXqU>q0;q-vn(h[c'TUZl*+y9OăU"FLRISCNTM$E&wPpIO-YuOQH[JVDEuyjAfiLVfwd9%5&v1<+Fa:AWu\F316;(-JeăU"fU#<&Z<7y/&Q;>WCpg1Rpmj.Sgv'SwXf[W54+G68P84^AaD)SOWOB:iZ(#itJiOăU"'\)TL?q0)E;;3X9')LWRbM6bco1i%s(fLJE*a+td<S6RImN]t)(\#yLB'%s1pdIăU"tmf1/1s1s&P/c'A0iY;Snb)-'5Rxf7s:R?k1oXQoRVLOd3IvNXO1E_/N.8IozLsăU"*4I?lB6cG5pOj&%Tr3?AOE0F%N3t\nJB*^/PMC8B[GE]B5-?O<u3E(HyN95U6ZbăU"Buv\<M_R>En1&1<a3-U1Y2d10DzVJK9.LczP6^u5fb/L+SCatoKeSO(f/(Ik6o%ăU"^TWn61jcE0kg1:E)c_5\V+j8?[Pfn/o)X8a$loReP^-sZ$9SWUE*/B9=,Ua5ZgRăU"BM-NtjVghRX0,Jh+#oanPTLW3P5'h7<Jp2l.%<3MSC_TLbK+l]J.Q3)hXa=W4P)ăU"BrXy&cR-2Fs>RX\;[F--E#gn=DreaN2\+O3gjvc.+A[*R#Z_H^afU\7d38qKidwăU"_yN*;%:70r6%+kx2]_]4(s4HIV>:,E2LW^N2Y'UYIC[cDEERhw2fkAKhj.rfZY_ăU"nt=A2$a)P$VhQ;s2N+)mP:*O6J5W;thL4wFfY#[)_FxV<#-LAW,5au:8F,Y,+d4ăU"PCUf<b858ik**[xWM\gLr?bl=\(]lVas%#(x$ZbvT+s8fbhO0OKUbdj\]*/34qfăU"Q,P+Z\eMFbEcx<qxeJ[)cFx<VE_M=?,XJUo?a*?#k2Oi(zD;0I?s1j;G$PHevKZăU"8q+h-EpHL61,rKa7D,>oC1=$Rg3/O4?WAKgsk>vGP(PbqeC=E%u43Yy^;C/aS5EăU"F08DE8.sUMGc9U_BRZS(2gdZkE/3hTzGP2;fnR92zobOpCz7n;Z(<3O*q,_VT?QăU"_h0jTM\wh7+UK';CxKql%Y%1CZ;1hEO].0-08hc2)?e0p'BcK:[oR+Obs]rGrE'ăU"1x1Hbk_D&,>B1cr]MB>0pf[&NQ*p/ktniv-Dl_<8o,FRVrW#742BVK/<HFLZ8jjăU"2FVw[y=R%/o8ULrv9dtT:ja]j_&IgZ4vkCE8Lu1*33F^D\vxy^z8(,[c3m,Jh:uăU"$#Xt-lFMKg6tcAV?>Mg7+;%e,sMk4jjF2-8G%6DrOurFgnd7*KvSE-$'Mk0DIeJăU"dc2thULTs<2D8i60[Wby4ZmSkijk^itiR<b:m,FhbqvpV>:2o02tpoK_)G7%Z\\ăU"_[,#GARY#qF>Y4VEA=^*38GV]Y,8?w9bBesk>$Qgk's,3ZJWJv7'5lt=_:neak,ăU"C^83glMhE[(%[QB5I['Mm=SNIs-5,$S-.&<$+KY1\k7ngaQ[m=ki:?q0(h7gwZ.ăU"9B+\WXusPsTl.]-,q,j^d,/\$148'0U\j$W7W'KmK<Iec/R&N,A]1TUvd7Q9XnlăU"eR1;A3<ZnRa4G8#TQ)Vw:^RC2JM4)4zCByJ_H,FBM<6nc$mkQ8vXCSBU:&S_:,NăU"vRLOZC4C'7(TQ>F&pH68f$heI9c:bX&e,PR&RJfK07$jR,OBfgZxaaZXU;*wgVUăU"-4*#sNKZzCM:M&52Tp<OZoKR#)y^R/toZh&0hpvuGb)K[rA_v&LPLVK:Z,bu6kJăU"AO8m2$lY1hs_,dSvQr=NK-j?c&1-JTnPm%-<_^n>G]#i+S]b%nUtQvO<Q2dAsBWăU"+>#=[N91Pt#Cq[Fi%4T_Y]F_]cxIBQW1*BeM33fuFRJRURyxJM*WWk06GNfL,,=ăU"bg:5[)NIW?m%5[e5XL4rm'S'ciK.YpilF'heS7]Z4gl5SNUiKN7BnmZxM0pm*o/ăU"mW/)?TMM>?Tgt(R;9WVX9^d*d_LxjED#^Yoj%-0Vy8uA-?Pw^gO-QokDU7E$q,yăU"WIrjlUv7ID>rZ-p2oyzv=hl^6Sc,UQEh:aT(&o7rK^KYAk3tlLOK5hVVD9<Y0s3ăU"W#PpxVeLz\>JL3NEHa*P3^\)tyMaY[w2\YC)Afd+.Vq]iaBc3=src&h8>Og4<wfăU"auaR\7bq.jY#Q_C(0Ze3op8OLWeVe3VC_jn^J+aa1i+[]OBHdm:rE1.W+W0#ES2ăU">&);;UnHatVrP<P#Ge6bb9GT'u?v31E.UW2&e.lgI+RQlcpGy*XFaW7RJm8EeaxăU"1&o<W7kQ0ADPaDu#9f5v2BkX3.oSVsbU6Jt1#47G\EE%n;Oz2j8AH0-6)+/*y:%ăU"^/[H0I,F>*p7$xocfFRQ'SGP)If.D1CQf7F:\jkcew]^0J9-rKtUX$UfD%:cU>'ăU":,,F<o&>C)YvfXqCie&yo7['CH;B*v/2.lrs+r+ngX8*[/WFBmN;I;vF22d&R%VăU"i&6dG^VqNN$tBXicU68\je46B^&n(j?2%:6=nmHdt1-h$npvl%<+z2l0Y&76WZOăU"jAJ4WgaZqCbeP?#/56($)&Tq:jeRaPgL:d)CLn+j4^OGt8E/0A8?Y4m68LBn$_?ăU"<v>Lj1?Nsl#7f$Te.?%>&5l1k71$.F2Js>FJc7cu&c)4l15M&d3OJMRC(q9B&bmăU"3%>+T,(qk/O:]S2Rk#[/gUeu_ER%d9]J;UXfeFZ1S$$p92IH,^)ymzLpAg<0GN6ăU"G]9I[UC#[eA-^Bh,'<A2H]7[V#V4FDjze0hs0N<<Tf5?D8[3u81y)QA.H)PV0.^ăU"e-FID6\g+#H2:b)kYv71q6N0'(_%2t9P:Ggu.Sj6'Cpyo6H1s:(kRDJ*+#.mCE;ăU"XPSTjE-W9?Ko/lRL1RR2I1M>Mt'UZYb^;69a\y=%5[?Jk,W)+.$-sBz\QO&ybANăU"h;T/7e=g<*I/tWB/kiIkQNzA2IAYneUguZ*PuFN7+D$J]7+.6v$%2/_%Z-9ky72ăU"<.>\rCiA1ydi=>I(We:I\r(qj#'*$7[kMUdum0EcV2t>>_-ZAZfRBw,FEhKbQ#năU">A?CE'2hWRKcs7X.YOR'%_Z$##KJy/j60(>CK>,U=paoXD-BsQcn?>$T)Cw^Z9BăU"DnXTSY-$rEK.cR(na5>+il>(-J&g)u-waMJ>Ih#\pt;>)dNGxGB\[V0-E2?Tlf.ăU"xX[L^67a=G4oqn%xeajfB<Z:tz]F%_PWZImz5R:3u5khF7^w-,YtO1_IDYOw$XqăU"<3Q]v_Kr*eGW3Xtm#rQW;>,Pm8I6GX%']U^J->8OS)raD3zh;Sq*,_6a79g#u%+ăU"2^XwF3DTN/D+<V4=_atHSV=lJf9cL=ug>4hkpFxwG::WvRxvs#;.Ft[M-^K#,/GăU"+hA)*y6*&/XLS3v\6n*kR8mF\FQD_jc66selVZr\;_aVc+aZ:bLkP38BOEA0ry9ăU"8&SlqGr95657>ZuM>1^qO:e[KneokA-0Q5/hX8z<AQmF34n\;]Ke<?Pi0vkE0fQăU"m$rI^WDkL/';DIpUC3+h9Pvs><oQq4Xr*dO_lk[1Q8A5Q:K4CR3_RD5K11k$#CWăU"o2+$9=CYod#M0n+m?7jU;uuM,H*<fek>.kIKm89n\A-;=/JtNnfDh\[aD9t;o31ăU"^W&\W*^]=22ZWwHGOHE?'H[MADF;k(GNFjlj#&=WL5*UZezXjcNR:'cP,VDJtr.ăU"?01\E.dC>gW$VM5=AixukZsQ9tJf)#/DOE3jdVf823SpL*Q4C2gaWK$BrnXG\D4ăU"g$$p[u^4k?G2Fl2-vB\8+)#<($B7Qix99?,KkVGGNvf7Mw)eBU0:WVqv2.E\DF$ăU"_m[n5b4<WGie$Sy;>oH%v_Xj]cIc3#H$1XMvc;tcN2pC8_Vvw6o0hH^LQb>8'4răU"Fl(nlMw$__tO$=:?JVJw,$JiLb+MK)B&],7Xk)?B.^7.)scVap6cYYICpKH=6&$ăU"c08e/cP#VTl9l/127rI;Oa%&]M#[;#J5_h=\6WhX:ry%][JW2B31LHr%uBht<)măU"Z1L3fPj1pA-Mo3gGr]a8)*sf.5JQucAeA(/8*EB>Y;M[5^Eds.JKn,xfRH7oiMUăU"]AF7>H,2_a*(?n>mdQvpw+Jl.g&Hw2SoB+4]8#l_9p81?n%3_BGM)7rtWAbGh9<ăU"I>KLRYIKRAkYUt,6TMNLI$A\,)?fSu/#g6.Fj<iOr$]G5Q?H_[%LlTi'.]Ee;76ăU"IawEK3kVnI1Qv<Q;w,Q%$xhHnul=:+0pu<jgf0ZKCtuJ=4vzo')1ke>mEwQTRLNăU"e7uD,1hgc2K)b$27M^MiOSi1<O$IfLlXV>7rfKnM<FIwHOyT<A:b_p89^+#U\9băU"fM;s601CW79>Ww6#Hm%[Qu(+X77Jid.[oBS&*US6G+4q7[l;ci24iVMC_k.sHp>ăU",hfx=ddrt2+>nqfRmcGq=j92dK6V*L#TSH?cwS*p%jmu*#]r8aR:[LfAjG5)&%UăU"Zu6g^V_e/DTKfTHs;a:EQ%0h4=\)::2)Z075Rt9F26Vwal'CPdu^uTVS)mjo1dLăU"&6G;O\6*Bu43#n.Llin05,J]3y[h/le?'Xp,mHVBR9[lrpR)V])0?ip07IsXD^făEND SUBăSUB V2ăU"?NAoVE4=qzaY.C.rSHcRo6.\i1f'Va;.Lu^3g8X3ROuu4,7IH;9ScH\f<5BS$CLăU"3DG\i4VWSk8HB5c]ceT.FHVLGnW5+#.[IZEt6/Ngx'F<ECp>d*0XW+^^]o3bM%0ăU"1t>CT(4_I)hwaa?pjNhdSY6r^QOMZj:w-tU41(]O_P=NG_bxhT4$:LSKTA7]k[căU"qf+1$bC(&K#W\1aRE^mj=F4vd5h*B:]afp)&k/-]70K2&\]:DI/ar'q*6sJd*g%ăU"NFn$N6cpbV6+Obs3k_)K^k[$UP:1ka(;9U)2'WqxM-DU?lx<EVzP9<bg1),hMU4ăU")3wJL7^zA[OfM1$&]zV:Nv(\)BW%wmr/mEX#v?nwKHMgfUsB8&,OMm8L$[+oe&.ăU"y0fpzn0GL7lX\e\'1pq=8.]g$]E*pyB8GP=w0)3h(bRGi=fF.[W=Q_[+Gf66HAmăU"Z(XQrxASOToJ4*uX6<Al5FW4:aBCWDAtJQD&]DVs/KPsCs3(DD;v0&75iDbqR[văU"O9V>/2lV8(0'(TS9:9ug^T-E?AamkU<':TgZ<n;-1Y?eAp#Ib#0W'v/5MNH.#PYăU"_*JVV[a.>(dHe+O[/-*fG.SRlWn[#m;<<I'CDkOE2H$4xUEyt62qep%PL0V;xG1ăU"+eYc<HtXFOEXzYN*&2eCS9[(5S+?SBBP#:n35u4+iGR'jLs/L%Ip%5eOohv*'geăU"(aJ9Q/PBb6UmFA=3$HVR,v]fe('oQ(cogqQ-4JG86S*Q+<PmXU:[r]:aA$N8ap$ăU",p2Y9a/g%jeXO5+bl*atJt6\.kW+(Xv73]2YPJr*5u5ahvSh;sTis*89/9Z8_%hăU"EXs&YqGL\3tERP<=t*=D:KwRRlcTr'%CGt[gV%Ma,[AjI+ENs*<5L#<n7[T*Mp6ăU"$EmCR<-ibbXDqYUipOtNhooFuf.+>Nra4a>7So1>TB,So=C5:b*Dm%bkn[+8HJyăU"\LHi?JaAO]7EiY3t*kTdKvf>W.-z84oWd]2q:zF65A/wrb#g&$NW3ce3T-,^I,jăU")z/-G$/n3sEE76w9-[SoWjA:WV$I<0A$?='+F9a)-Cnz$STGsgd.n$oXZ>;-(WgăU"g^s^TZGSI$,=G]+S#::S'N)7N-H[dOR$eNV^/o,%Rl_.OEblzaH6LpDe8C7;EA]ăU"l_K_T1s<e(cSN*NjZKl\;:lt6kMro#MG\v8wLjUgX1k77Clt*MU$'^jnJ6ayRk4ăU"_.Jm+q[,OaFPeH#H4TY9U2Lp]T2)gGq8/B5&gc_V[0kf#*$G4FV7CW4-5JjajkEăU")L?l][fw.Q',Q6lL87N/Q(gHm_noXJagN&Y(b6T<?aUE[#+&,%fCYy5[jetwq,+ăU"1)B^ZiAa5rET>>%XAPk1BOWXJ&oqJXGv[NgOc#x'vd^1hfgr$wE/k1?6aiUQ_/IăU"-Gwd$$FUsMlc2qkP^tUb3G+8AcvMvXL*dFV&GVl('9s<U]$Hl+o]9QD(0yWA87&ăU"eDaH:+1saM3-.052tt>FJ>i*.W,1(89P1)>n)f+sJY[D44'Ku.DpSs1=ml#BsP=ăU"hync<^29uW40Yr<nic4<8#2qGQ4AYj%lMBcp;7_F6+22s4H0mLO&pu9vCR(lhUMăU"tffV\ivSBo\z8+e3Z.3A^#LN=*+2<g&dOQ^drkP+=e6Bzd8g1xOQuNA3)_wRK,4ăU"[cNxCQi.(X65Z_d-Os*'&s%FL*JlRJQh(czeSonXfjCbsH)<6ASO:)qZ;*xE'BDăU"d\ioIueV+%C#:(gUumlDy8nN%iU\COntAzcY$)wD\RR9iSWB0af(]j'F..j&>hTăU"d&.ILnAl1E]A?FAgO6>[QJGCBjcZ$Uqi:4t$u?ZugSV8i2jnD%Y7^zJ/<'Y?Zl&ăU"2gHs$22RN&j$v0ua+e=VCd1aa\4$)Ie(\DqEgEY5G,e&w]5l2wiA;0;sQq1dgJPăU"UkJ,RjChOvt6;Btqyc0u3lhTVF_0*=k+6]ks;'?YT;UQis$HFQZ*aRW&HSIEEx1ăU"1St.<Dp%Le40,_rQHKjSVEQ'*09?_O%ILTZ0%W;-jM^A-\xVqotrXx;jr+kwk>EăU"o.sh4iI9M3=$cX_XouKgM1w4AACjfFms8V41ovZ7uWU7QPfk2b4B5-UjDE:%m-hăU"n-2)2'['-bM*YkH0M&MAAopd&usEdGRJ#/WX&\3RnO=PCWfWn:0?2C.PQBIB?owăU"BGZ'Xteg<0&%a-P_8Ih<z6huP'9OV;gtydG#F)-b$%b62xD'mh<PoNhPr_=9-##ăU"CueG)ctagRGP?C*T#a$b1Ettyp$zQvR'nDMK#';%%D5_#F+t1WkvZvZ[)%c,Jd:ăU"lRm]PS2Q1E9pHNS6gQ-fmDq/Vcs[B-tghx[mYF=Sc0Qe,aC_XwF,5Y<&s%7SGN4ăU"pBirm'1AX#zD02;Ny=TIG<4>>hb1:VSp*TR2i+2_JR0T#d+kys^L6?OM/>L58XQăU";MMz\ZYt(:LUnXD)DF\[h>BOvH%eEflUUiW\eRV>B*H0u#C:LX>Z[g>Ro$m$lT]ăU"a0.-nE)8h&bAje3X<_D,rNvItBhLg5hE[K)^Ct[WGNr<iWS7V'bF:Ieo)fYb8>ZăU"4:k++Uqj):]iuX[eRGK5:Aa&bC?\;5ZgbhbI;L%+Jh:EH6B-IAoOaNnVbL+EVG,ăU"8=Hon\W7:v>8gUxued8h-KB.x&Rd$HLtcVoBxKtV^x$oZLOVffa:6ckAsn'0$W_ăU"2e5vF;8jQj^;5#D+/[Vdp3Ke9\arG7LySWO+#jG_yk#F\5585dsI#t^wGp?T.yfăU":9E^9y;>=<>$QuGQdUIO]Z3g\Z^f5D-+y^fPP4rL*,+,yrC\02q-rT^+_$zU3]^ăU"<57>kO-]&\'X^k_AdJH0w+NWZ[>Sma]bm=q1&,Q]rT_g(+11DQKpWoIB5?bj)k:ăU"eUPb1Uac%-dgSUiZ&-jb#elUH*8qURQ=(P:SA\l<7_&p>#]2adR;%T6)Fn-[s.VăU"&ZK6*EIj\cG?T--cvdP)E\dSlsruV)r,b^UY[_[6+FPEOC9p0BvBICgv5*\>*A$ăU"a6k8Lp:d,8LWaH^nM3e%N+sSjwS:mWD/<=sOn,rinO1)3F=8ECl_a.bQnIP8a#NăU"p>osfnZ1j;Ri]'xn68<-s=WPC9pROgKdwMJl:7*[H1;_z,6B.qe;A=iK=R*8uBCăU"Ub#6?]t5F&\yi8yOE84zcoOC1-WE9'7[:YN8LqnWdb4=.#5K%73*c,o\O2+r5Q\ăU"NVhfS7Nbu[_kq:D(\UPR5:$EZ(8JJ8%mz6_][S5^X<,;ZO<LHV1<[nRdkZ+*K:7ăU"l.(EoM*H+COOe.)>F<oAt[-(,AzN>BH&A2/ujWlU+GKY<Pk:;^6[,9D+-C(e;gkăU"kLy;7^uxpAOW=vJZWuKCnv;=p6uHnKiQ_$u*x^ikQ]gMcjb3vPHZs\?a^4EZH9căU"JK8W35a^81-Jf/tiBd(s4e*IC&sy_PREnHR1O3CJ7RT8F6Oo<^IFa-3h_1P#1^'ăU"vv.hD%4rH:E(P'?J*^0QIb>e.)aD7i>$kl&:(Y2Aj6+e*g0CZgXlz8uWewcW4H9ăU"qBqo>QIrDh=k6.qc*/u$(J6/3%-_,f4BOydP)p/n+Rnd?k9]FcRkJsQ5z^Tr7L^ăU"tZ7?Wq59-$n%BM:C51#Ufo7^8V72P?]e75'Ed;;-e8]f]05k.Y:4^exFPZu$^1NăU"pU'kXFJa*.,MOwssS5k]x70G^#s<$7dLifcYv>q*)OTP>^YGw1[>J'Y=lsQ[xGyăU"[KQ\+Q[L'UcuPU^75KB>AT+dm=O2o;d]ft^F70'SBi+<V5C$gRx\OWFLh7$O\7iăU"huv7[S4Z(*Kafk^UkiQ+=50D.]&qUzBo/YoRdjFsnzLJt1cJp?&1smSo:wPgu5hăU"q/LpYSS-L7%_pEgl$johXEouyUV=oUAq0*u7ap;(=<f-L9lOX^l-DCrD4)x5anXăU"b1#gG'Xdx0Df*\hf=Ms#<U3izvCtylW;P-0N9C.0s4S?.88mU^e'7p^k<n,vxG9ăU"l>9pen-=8AsXV&Y6cah1ALAO(v5a'R\a^D>\H-te-1^E7Y(8[b?r_-Fa#uE.Al'ăU"wKCr_.[3WQNaD8:A1351-))u;g4s&+=7($FTI,\niRkJ3AlFDmTXeHOE4]ga55wăU"l;Go.pNsZbY;)/._L>7J<$1eM&i0e0xQSp1Rmbr%%W/0%x.-TPQNt'P7*%H/ZYxăU"i9dDE5:UK;]Nw#/6Ll]Fu.(Uu4c0?2nfQ^kXv'RxH9E._VN\xfWj3wz$w#%xsZ9ăU"A#kfDj^>#5st.>n.souPw\S[LlLWWI><q_k2aJ'\L(t-2$/sXdbk;AKHd$HOUk:ăU"pz(9WuDwnT?.:[OnYU(:F7;*SQ_En=CXldmZ5RmnitE8ZKxRGsWXkxh9kGqL3YTăU"F$$nCX-l8[78nL'9Zx>xKqRG>V]j8^p?u8Ym;I]ULlx[NCV#\HVpz<:$WrNG$rmăU"[8rl\x,#?BS_3GN)ZO^^JA($w(,gcr9dhrqNj76xMN1-mmDduxjlx?JHx*%up()ăU"%9%'%R-%]wBmKNE%(tI#I%%n*%%%.%%%%gf%qqWSh?2G-h+8i\(kAr%(iai6nTXăU"axZU:wCkd7]'8qp]'t?&ccQ6Na5ns>B,5LO[d?T8eNf8<hQ(mOzH6BV1:o4;5QFăU"W[j3DuYa(XNurf8sv8nqMbivi$nLor[BrlZ[>$n66YnTT7ucZg<nN:gd.Mr$>ZTăU"8Huksx;nMsnjJxiA=TvEdk^V.xZxkWwIq<405N_vlln.)fh>&^ckwcT2ckSNr[2ăU"x:8lmlrs1fh*GLSl)i;6NeIpMNb$D-Q#v>=E,d/Y)uU,4jpdCdyt9&D56OnvOleăU"S^9:7k*antbXA398>ygy;=mv609KB_$t6dohG:vOH_RDFg-<nRgL-rq$VgP(WV7ăU"RGS)(JOKxshEq9#05Wr((5fRQecY=*myLUyOFDLx[:AbP4F]No<qu3Y1Kmzjll>ăU"$/D_dE^TNP*9fu0-'4zUz%qiR,?wYnnR7[ur^EuDI_+^Wn)Nt1OX%%C4/+H*=djăU"N5?s&e-,C;:EFULJ\,74iY]/MThTA]c&%u7ni^fJG[Mx];QZ:I*9S3DEsWYG;d-ăU"y(v1/'evggDCZIZ8PTKZqZ7\7r*AZCIQD4zuAitGBZB8KC-HesKiJnQ+6Z(_/[zăU"PHnH5u2iDtJq.>FHD>8gB-Gq)?c++>Ee&092U>3_'..HnCh4I2D.,*-]WQjq,JfăU"0HHxWR>9E8a*=9\sUgz5&/Gqcv8g4?g5sMZS_%OWuFfnNzj_bFt[/p72:4%F&1CăU"v4zl'sI-ferHKqrp#jp>TPhXM^/J+N5,KsMpo,TnnURCZW'YC1-.vSUfx9F:>^kăU"-7p4Vy>b(vr<&FR.gTVVfgKMq2bPd9N.g]'2d(yS,09(k&5k/W,C*4rh)#PF-ZDăU"[C1NnIj<<.(Tr^(+OJXquU=ZbTAF0Ar+qQRc%_J$3PkL=u1'I3;Pma>IP_#8b<UăU"XFoct?Lt%&-7H[zLPPl[?DvK*L>9#d5'3P%R-c#o.IaZ&[JEcO:IfBqX]?iB+5YăU")dN',u+2%HL9[.Khl-)-VyJ%[cXtqCUflCUeiE1T9w(l)*NA//jKX6[CIlM9JA6ăU"mS3/Q8:9*rbf[xV:=9Q)&zE%<I>Z/:xhT:&1x/-,sAI5<+Qr-E..;ZPh*U'l=aKăU"l+k$MYoRo&qP8l)jU2yWd4A(%KmmGi0Yt4>166n4P.)70+gxwK6NBho(?P_kTnMăU"]pd&Vrs$,SxC[Eni7kB_8V9A[zPU1&ZtT8T9PotK9E=oN%m.Vqp$y<aXYKtN0G,ăU"s(mGX\qA(okGo2n8A$%ZfAn+IT=Z[5GJB9o'x1R^H;[#zoX0]s;,=nk^<V^=1u#ăU"_n&ssX#?*]1m%<10ODZ+j5.clS3TDq$:<,H(,pK-8P=39t^uY'iq/qQ19^n#BLJăU"cK?fFnUb#IBaZ)Gh<FW\#:c&%vcD[R;Wb1AFj'*FUG1<M9z,#i:)y9V)55ZA;xxăU"SZ4.Fll'jk5.<G*#PKB8fdDj[f#:VeZBEoVZ$h'CA=ZGq138p5WP]A?SU1CN%]$ăU"GeqY>6>fsuUk6QAI+ds&3,tR66Ug6\Q/-FZ<JOSNEJSo%L:H=IZ%t$;hq748mI;ăU"3VYi1'8hj^=GT*gnfP*C?\[<'dU$wB<9G9x;RpP4h)9371:_NQK7g+PV(?nWQV]ăU"H$<H'jO>cUGyCpN(_Q&a1YqF?Ws+Bd+CuXA\Vb+Vi;5/vq4:toORkhb&HgA$#-eăU"-HH:R;lV3Zp3G7I]K])OefduCggc<IIoDy:+JK-Hqs1$afq7T+(tCJ6'JOJPlB]ăU";Fg^#63Y,HB+Wxii<)0&%r&YC,-6ljx^k9X#$W3.LHW>Cd=*IR39((WDZ-Q9Xg=ăU"5yA:3H,o[8IMA/0(oF(roIYO,,X2bU:w+&POr?^)kO0e:Q5%^Hjb9R8KF-H[fSgăU"4IAAJ&fKf/KkL38&Qzv-G%FG_L-XW('siNML)MkeEqo8b0725N+=nxG6q^=QjgAăU"t&Ef<>T/WiUn*0t5XD(T>lds&TCZ7KB,DI^\*&Y%.[?$.TQD^#NFo67ip&l,m?#ăU"e-H&DgU)qHGpeHSrr[DJ1f_<J90nmp)iC,ec2NbK7Rj<KT9Y'L6CrX[$&=Ym*iAăU"_NI$uCWo%Ts5u>:-/$;xTP+Cg;:=Zr>o3gm>ADUM5t1sKp6Ae8/If4D<mw%[xk%ăU"PXL%n/XL7S*dl(]v,rC?*-GRtPEQbB0CVC;8GTgqng[8SJjT&'7Y\P+Phlp&uWhăU"q/>fi+'1raH9RejJCDCVM:Ym.3QTA0HT'buOE=k77TzMb_6K'QohY-noBC1T>cFăU"3*h+ZEc#xs(A\yQ7^==I)\oVGPc]$3w+=d:9U25An;siTbYKP3;X);-T9M%Cj&,ăU"1vjW9*zgOkjt6kmGU8p$Su43SPvXub)Y1URu1q.kREpsLk$DzDw9nqKr?L8-7oHăU"_n3oV=tpF\[5M:7j,Ku6teFyu_jtwM*%x$;fLY:4o__Utc%C\E]P7+huSCAEk?NăU"/L2efG%;<p8[9CwOego[=8h)=E0N,PTJP:EkG+W'eUei(0z.^d2VS2&IAM_B)7BăU"TcDK3Az52t#hAwnBOw;eN+ft^L4TFOi?&#?A)Y28N]rioQBR:L^qb9dT5nWsKBsăU"O<+)gl=jeo,B?<3TF:e'pqt&p=-j9Yk2,cI;_d<8[re\sbPKbcHhgKJdepH9LHsăU"S11d:3F:)S>I8B-K_gq7'89F*BlVAS72]AnYX8OQIr2)A2>I%^Zhocm9p6NN4TFăU"ZHf1f^3A$(npJYN&&6_st$jkbM7rykZOWsmx#Jr3(9+p:]MK^7pWX=Q]NTEyWhKăU")f2t)4Kn9Mg?9aUp14BY%'3'MUtIK8p,Asm:\L&2+L,rU5+hFAOT&sOLR0o\6;EăU"b31_FIIeV.A0r_5(vTa3XyMw3tjZ&>h9qdd4NeXO_5AoI7.U]5K/yIU%je'UJgHăU"aRR_G/.dh;bcfMj8+4_j(8]&utjEC#ZRF9d'E[M_7Z>1LOq2[09?$wW)6Owtc24ăU"b?h(CWBmlS=8P0<t8e]7#QQvp6eix:1NjvhLW?47'SDo3&+A7C$ou)W/6)WgnFGăU"XOo\utM0E^tq\(-ahTHYMNmAwd<>a,EpW\+BXVCJ3#cbIw#.1/]SJlLxIEgj>-SăU"w1p=q+2Ul\nBA5\dt%_jQ5p&[H,^%3Gl*a^=;#2sb3YJt/QCR.M/9Mocpyqo)t$ăU"#XBm2[j?LeBgJ,B9A.:E#mGUV.pt'_*iX#\4D$DW-m$9g7p6oXks$#Z+<J)U)O-ăU"&OqHtp90Sj+QC-ogN=Dnxp<%nKTg)R:#l'gaQGkNqBC8oqq#w,Qjc7O,%8MgRYMăU":aw-Z-l)$R1z-]0tM%64z*h&WgBq\DX]KZn*Vj68T,kQ'(HaWa%;b6bRb(sA+l>ăU"iA=KCzA'blcr#ddF+A$6&]gEe9PN#h6ZK9J+b7R5sh;f/U:sUJp69pdd.#-83uVăU"EUO;dWi/9q[r%0$hL4^HgM>XcchrU5rFQH:w7jLnhC:[N%/Gg4sI9/lezim9$,&ăU"(JP3nqKQ;3pz;(6)WR'9S3VbL7G*:23Txp=t/2K?YB#9oi/%pW;EcCk+>cNsQ>#ăU"Mz<,r;W(]5Yf8lUX1#QUZU.LMi<b]s>tiSc=AM9+S;(S(2&u8OR68)E6_3o;o->ăU"()6%FxV%Kj^re3>*dQ#BT0s2O_UZY[ph(p;tQmIX+)liX:0gKAMT2lsi$rET8R3ăU"-Mk)UH.xV1ZL6HASahet=;-O95Kv9PV./4?$.hpX*J9M3Di(=kUs)EDJ72Don1(ăU">(RtPa2?00>w=Ru8<uIZ%j7cbLJ)*mYc[&YHcJY_LliGwaBOh>;D,&+Mab*Tb)GăU"kl*:&^&^QL6TsCC3J<v-c)QM+S=9fGaKYtG86'shBI?0$'\5+<\cKY1%;Y\N&JRăU"DyO,w3U$bjls<SVovL[H)A+:^Ux^Xix-9xPs#n8>8MW][./7'PVJLQP>C(CgqVSăU",:VR5dCSw3/hk1F#J^l^XzxdPOP9(/BjnGnw&*YB5%[7m)YQwJGf;VjjL&*e13EăU"0)/Vaw4Ov^j%ex0M*SwK)=>P+8[bvu=6cT%rsEw1qg]whte'R*CX+x]RM,z#f=>ăU"*7wWEc2T)*x>u<o1LFZCj%+joL8s1.DZo,=/2QinKBc^=Lm9Ml=bc(8*/GZ.dVFăU"I]T$s,R*kwFrP(Agh''Q(^mIMi.SToSCWLb<]/mf.frji-8n6$2g<Q'$#q=?<l=ăU"1._5Ct19MaifQ$tw5/iADObo&z0)LW3lqy%nL]du&tcv(_kIPXRXO1jPoM5\q6NăU",Kbbs%L?$$YVn]Z:q3eE+FfPcer+Qa%TQWezHK4L[j+A*)oCI(n[v,TV<H(ZMf9ăU"iRHxZ1\ybT<ZZ>>%fMfQbPto7nX:L[*GD;gQW;?,O5Pmv,d_]SL]waD0CBvPU?.ăU"HL+M$83t#OZ'+(t;jBji$J6+hu%Dl%c\3rL5V]<Ru#dR39XFjqUz/d-;,$6bGYEăU"*m6gi2k4uy>kW9s6-<c=nFa3:E:tnH37zqD;-xesBD+5AfM#i[7w9,)8lzeSYUFăU"$E7u><u.,+p=EA*Mc2i2zN[NsU/54,,:I5h[17;4)oq1B8oAH9HGS3E>A%PL.T?ăU"3I/sKo,?kTW88gL%vt:kO<#aCZ7(]4Zg7)&bA([bN_A45eK5LeiseB#KG#LDV&^ăU"P=p,+#^290+O6>^ST/.O0DlBVkj.)<lh\0q#<K:d8T4rD3?<sQ-LTHtY/9'ItS^ăU"GR1tl.QaVg=e1gt7f]e0:uXWnwVgoDO37Ul<B^,s2u<K</KReIbPFUilft0*83+ăU"DvT>$bvg&F/,$jL$Xn#U%OUeZ1O[<VA]j65nM0AxA()9b53#%f#l=PMhT7'scmdăU"%[%H-/70:\#'ud<_&XD]Gf4Elr?_G_?A1_FqDV4)esD:GEnbXGXr#u6Nl(sA3'GăU"&oEt:W\o(8ZfWyCV>G<SexdUriF+lPO%fM$&j)OqBjupP2dl_.\-)P6LPvI[C]YăU"VpKo])Blf^_ULOB*V-AHVLxW^Ip,TvS;=;w,%b3xgKXm%#pbG4ju#[Q_3&v^5cmăU"A4+WXpLFhInkkODm([/m5o&XxRD,dcPIN)tj^]:Ur(nG-b?wc(nVB$P*SEdC]SaăU"=fr7SNn*Iv0KbHWLEo_Ql7O*1Wlshb<5-tr-w\am)FsWAp&x/\Z/(VU\n)WBG*văU"H[-p\]w]uwKAT%XFd&L_d^]83$m1<dea<xlwFhxBU_Q8b0(qD'qi>)6)tlfC,XAăU"h4aQsmhnh\8^Ev?*,Uf4kN]mKC&BE+0g>$9jbK,$vL7/W3<wv(6e8QsjNUe5UTbăU"#9gbKlZv4]_cxr'<pT4U1d#;pIaM*FLqLvmmDMI05a&oR,R-wP.F_9e#uvKB=_NăU"x%bHG4GW?(d'XtI?_ro*0>(Bm\FPW]NN$.ylIpmmHcn$]zpwR7.38=09.Nlp*Z=ăU"atsx+6Dx,4&)*^1LU3dpj/1A#tl(eC#A$Y,bKe\s7hG#WiwurFoWE#h:<.D3/jNăU"3O>2A=Y*pH/bU\_77Q,ab>-nT)r>eFxhg4iy__u-3H<,SvZJm]_CV]%9&Lt=unIăU"_TKvh.1\wSvC-rcU?Z\RkOgp1VZTvjHUmR0$rbt\l<CnD.*4CSvddT$27N;Wj_CăU"BKHMkBGMOSHEdd;U6L3,#+vF13P,cHwR3?RvQo<*rabcddZ:e=#W]Mr?BsDt>\oăU"+C(ffXU<E&tEL^hdjhJRq?+<t$1o<?Tkt7?G7#(qaQ<M]*[^'#4o,:4i[<hxExfăU"6rWDRF$F82cTO%KFtk]tLaUn/R[J5]ZlLgrtKDB:dpJ.IhqTK#PSLF%d4KMAJ<qăU"#b)J<*tkH'GaV'8--\hbDlt9RZNrL2WOo+fkwD=Z-=RS)$&T:IrE3T91N*t/SOsăU"XJZ9+OMUUWAG+_)3vJ&sq<4%u[g==.)]iZbg?8TQ0+,WIKDUq7>6fM#kA1:^lRiăU"?P2<1ys'hbp]X2GVlaBlpRfY/16N&'t%o:ix>l>SH<(2BgWxS]**k'.Q\g2_1j'ăU"N3N$UiqGR+9Lb*t)xc0-U*_S8g',U#AJ$l53tIYZmLK2$ynY]#Ra<s/?,f+_d]'ăU"h6oE.STm+#J.s>:$I5SSIq2[5N#q<*<,Ehz:]p5$*XI^Rs<&fs$c:gTI<p>pW1NăU"[%6n&+,DxuJ2G_R-:=_J'oN?B4URd=7Mo2BLR?&(JBQ&g^Cm',KVQ'u<5g^lgRUăU":znSVKfDBp#2J-md6xNPkhfDnp;d4M8hGF3o$jtM=4GWUDP?CHATB=rJiDE\W8wăU"A<i\JFnrYfp;<[?ERB)tMEjr71EI\fL:\(HzlW%=F./&%WVX,e'NSj7o&CkGXq'ăU"F<0OV6DHl%v]A.>;v>*Y;nUVI5JEX9vm,r2K4C>3e'Lm3Z1Q[$Jw2]=M'TfAdi1ăU"L7G4X\ZuImpaj(IHPC4m\<L4pgA&9ItEagK>V+rOopUVM%^,^bCPep.b9OMnGwhăU"i::$B,plV'YZXe.aO/AEhz\=&:R//[#yQO/pKjT/&RDrMbB/;&7a0tU;a]3pI2'ăU"ku0u$,fm;E:TkvhF+1=*2jdFg6oY7TlU^/1ImzK?HeUBA$_'#fefg0(X6g_2]0VăU"bo#X#Y0ji[<8&bcdEaI?q[J)Rb>NG1$m)w-OPrw=K>ya[aoFsQ7^TmXFL38uJ<măU">#\s-/<7*lEZcEsHcE<j9c=ngaRYuJXaV:y9\O#JP?lrdKGNG[6=JCpxd\N(.[9ăU"aFh;*l2%zndKYfHi7K0Ae^__(<mMcWNN?i7kz)RTfG9n5>(*5>P7jMKMN5yJ&CzăU"a1NI,.G-kc)//>eo4*W]FKHs#O=F.4u3[KSmUOT]P^rs*vXb,(=/sVTXM3ghFF]ăU"IS;+8HNKbKm#>rmp4V9+vSv&Y84=vITdoP-L=U*8,]38=ZStoNs$5NcY;bp&qhEăU"$h3LA3Y$g5nm*0,=\p_zTmO3oB-,r$2Y$:-?t^s9JluaiRd5S8hFQ-3aD=#a2uBăU"atEiE+)A/GG-sT^ccU_'j>-oZ=*a8;NTrCR3d3iZ8be'CB*f7Zf<,Ib]gMJMsz:ăU".1,V07q,QrUf_XB,Dnc'nW1hdoBvqxhd<e,6,qrHkJv_Jd*Z,d*<Em'J-PW&n>HăU"A6g8PKM[gE[s^/9mjE5=JiusZ-=0Dfq2sohUvd(CW$]>/xApRZx[]7/yQt+W.Q^ăU"s[Ad#5djH>Md9)M/m0iW6I)_&:TkS(iU$CkN<:HloS;E7z&3fdIt*DpnsD4m,GRăU"UifRG$7kS.==f0>PoV95M?>lkQn4#47Z5jKn2'Y2o48_ciPZ>sjH2qESkl5YI&DăU"hf77lX9.YJ2D5J'GHa%;T][fWMk44dU%AaKd=ggw?U>dCgqBnj_8P&Dd[/)1Qh3ăU"MAz^8Gs:$-Lk07>ZUse%HMqad=0x<'P0LL4(??(xZORud[sLWqe/1-D-S;?23p%ăU"Hk>4\P8ZPKGi.GH6zlt\I\DRKJVO>riTOMW6GLLF?9%v#N]Bt$Ydl,Oj_uxS2S6ăU"^-0Eoa>RCs-=iw<(2B+1#fSncT5hXto8KT7$.TEtH[-u3bSXVC.S$LTWo3,N/%=ăU"Ndxyb7.[0UXHQ)xk*2'Nc8ts)?+GDt=GLE/&H(ExN[j/5PHfJIx)M4$.eJ&r=/wăU"\R:a$%iAX.%$#rke%[qezqAmsuH:=.*ZBFC4dbmLM3,dBa8kLQ4;A(51B8.&L*UăU"I#tgaS6B%\4<Ajg?ImaTny8?1+5?$5-h2ksmKpY]^94HZ&b<wei\bW/nBx1+C8năU"11n8k8[oASnM:GW/eEW5g8/t/<:5a>kBUqeLYDC4WBPDCzg_-U%-;Vu>)j-.TEbăU"$U#LQU9]lp?[0EBmzxu*(tu-Ge&bj=QJ0TZJT&3_h;9F[nFGOA_w5NL'7qPH<wEăU"n)?nJcMRwGx1Mah>llRQrY+j]_IKcFtSzu.W]FlJF6=#2Y\u[HE(fu*^7jD>9_qăU"A)GkPBYsqv4/rU#D^y3Ovv9+$iu[_d8Q#E_bI%^kb6g%u6[$<)_JOCYaX<jF%ItăU"0<)zW#x3nz[R:<>'))-QQIcl8\UboGSeEgO3[5d:^u0RNltAB0^<hKhT-)=MFx+ăU"aa?*Mc;b;l$tGKi%':nzwIArG/]eSe(6oa#+t+j;\r6&$s4N7sXq$%R<3^mJ6*(ăU"=Hv<3R<W6gXOPij_PDq'GMR:*]LEP\Iu,R%8k4n/&)p^Bap9ZS[vr9-mO<J$-B6ăU"3jUsQ6sGv-]\XUMRd8Lktssrc?g6kBrF*MKp77XTepS&%nS0?v\_+A>dGmJgXAbăU"H[-.%VEOQY0x#J=8vRH?>'M,b:2TC_ozsi5jRgM#Oh#qq$&u9Y'[Z5dxOvglbc'ăEND SUBăSUB V3ăU"E<[9O8+F*IWG$;xBqzkJ=Y7EvpDxuh]^uwuRNTq7'<fw\s/*SL:Ap?Tj2I[W:9+ăU"O9F0KZ7S.6(8SDo3ucWsL0)ta;Bd'GwqA'YwvgGZ/gA:/>YT\5oB1/U0okuQ27^ăU"gVLmK;\;6&m;$w$#rP%pC$ogGE-CREFd/.16XIJ]3geIr$[braG+*'nsS0#.OJQăU"aS-c_FnO7),OvHKCYrc%VYr^)oC)$S3:q98g$421o6Hc_ZI\q%a_-.\xNc/;Tb%ăU"#l'U^ZV\CNh$kc,&u=M'4[&h]vH+o\gKFgL<3+#x;7=Cc8Ml/j7g9KCR90o%W^?ăU"*ucSKYvE/SFy6EMBjVxbMPEnj0q%lrRM6g#P,[ZGKn\Ij:Yqv(K^\8Cb2'LQdiPăU"r;oQp1Lo&U>nZHZO6.I^xfH]oupZGscc^X?>7lKDx(ruz5TG6=$,Z*^trRZb#icăU"6l[M?amVctrlRYi2LSm>68+[3LAo2Fdxx\lIwuhQ^33CaQ&#SQil.XtXO>:'I42ăU"vo+[2s[#nvsen*XJY^5/:r^WX8gC.^x-aj,u%p()9%%'%-g%\zmgKp7M)a_F%4%ăU"C/%%%.%%%%gfq#qXS?V2G5+;(aUk)a\G5[&E7DX>mXFJgV,THPJzCDXW%_J::&$ăU"Fw0i8<?5?kV<9wCWd:E9HWl%_9A*>7#p7P$deGPisJUv2eJE8nsr'ihiX=InqfjăU"8U?iqDTW7GwtruJwufDTml3X&.N?nNlTu8[8(u8wcrNP.NLYzM#^sDNF8HXArnlăU"rhMse:DDeLy1;4ovD7tZ4C0DYM(oyapV(TskBn'r*NowtnCN]#T0OBh^Mnqu&weăU"vHAhOwqdJm4Zid%zren6xG(^$0K1.y#_^ML<iGG:w?qVHO,O:\oU,tVr6X:opSQăU"nwW3p$rGbw;bsSL(0=j8xhT]Expp-9/^.7I&L1\m2Yb(76P*L#t%zg)uiWh5zZfăU"t_jSkS<vc3MvaFTpPl*ti,z+/ItXDjD5%*z9eSjKNQyxk&\Ib+r*X>m+z/oai78ăU"aC/-JGpGQ3P-b9A^5<Cf3R=mp)qZPTUxa0;&+(?Zd,0ksP_J\a(oB5oj)?vSa).ăU"V\&^GF^#rXfuk1Jf*;,E]O+Iq\R=qqsTYC88jbB$'*IhRW?MZN=7fWr]g%;l5=găU"O\34VY+w.n:l29tGh;aoHB1-n>;Q%&rGeB,_Ep54MeDmo4\qZ,i'\<m,J;>W=?KăU"EZEoQ%;3^MZXK7W0WMJK*>S=MIcGp4li)a&0s0eXPI,7*0f'U0<_r*sl/9$5vZdăU"('bm;XU\&qd*u^?dgKA$\c($c+cv^BUnHfY$.(hi3tCn+4:K>:3qFurmE-m_CrAăU"A^hPW%NPY)g-jm,9',=T:L_CbA)hD5B^F/0/h&.fc*ehawWCM'5w8HM9Yds-JN/ăU"$SK-N(%s'LTz?n?J]WfN'3fL3C;dz$H=';bP(_\mm4j5I(N4lBI0z7k;x_F_ujQăU"F&%&'CB)&maTT*+(Rdv6HbEL>d(Pg<i#r'Y:SSGM<G*St2iT4yR;9b&A:3KOKSFăU"EBO_EE2Q1/&W$=OrRr;:;He[irlc21h?zG.n]Z2k7$_N0DEfTm<$%CXah;_Q2Y-ăU"(sGi%%V-;.n)JK;UwH79+nLbqBl_Dz*oQIm#N.iq(o)SmF+GOC#36n?>R%c\Fx4ăU"7HC>&:dglAdf[O1dI6;-?WVLcgFep+KRgVU&V^mTse1MvrmGAv[RKtd\]l0H==4ăU"*EP8d)w]I9b)<'=x4n%_hnGOP43NS.;2;7il5w'NF$o^&o.pFcF7>_NUx4q8VqLăU"1R6JsZa%8g9P;(Hs%B-^V%1ick&>P.s(0LLF9sonNO+??_fgW3X+?w.c*O6<F>;ăU"(3PM+/EpBjkuINP'Ba0*)I5WM_9VWuot4(cu%VuiZA#D5#C5CF$uq4qmk2GRIVTăU"UVa;_[,lz11FV8XKdCk$XB7ni^A;DYC%pQA-IK3OQ_\VX,M9i%]:5^tNCKbIsPmăU"gL74MA'F+7tNda'f)QR17t'fV:g>C0m=.btT%ggMtUby.udmz9T&$AMvg.<u]=?ăU"O'u63<k?EEm*kA4i/?q&VA(b4GM(gB]&0(\WqQaZIb;f'4,y=1xaWUkG:5aAy7#ăU"]#A5PUJ3%Yg7WGU0i(NW5+S3,rV7i9XI_O:PCW?U_0p'y17I'\o(WXVFP9:Qr.4ăU"Sjvo*Nt#0)ecHm4=GT#h:IB$*53c;m8I5kq;ROr4%4#DG]ElKERumDaF5MLgEDXăU"Teba%V=$e%4bC0*Hf%i5k>0ka&4Y4mn'B_#&N;_AFHN-JP-ijGOI476p414H*UYăU"a]67vEK-+<1.7.<mEWA,.EO>Zh-,QQxN2I)cXNJwiMH9>JoThIwq(YH7rSG6>CIăU"==h1Bp.IU/Wtokg5ckBT%liP9IwJj'4*8(OF0IY.OVFC#-x>)a1Y++9.l9lDCwIăU"AT1Kbj0Hsik&1w?jC]8=U/)XOo1iF1O]=psiTvNm7'vH%&BBuygZ_-nO_)kkdY'ăU"^I5ogxwv,&sDM:05A&B,'d6uqD/>]Qh5u5,9stb<Ed346*'(4j)7]70X--\qF41ăU"Rq-5n$(k376PGzD8P,A44VvS36K(/jXNQu?c([VZ29]Vg+X?/;%E+=Ue>v';nz?ăU"_?;KM'C[W\TD'v67Q4*nYkANIBs2^U+%H/qu>T[xTE,cm)2_/-yh46tVY2WhSCXăU"f[lXM=]7J%&,Ea/qf;fKm.xeZi?=NXcBnW_Iv%9DkzBW$>&dddsalOK*A)*#sO*ăU"Z7b.sY2qfEm0ldnymd(O*+7kmwOK:Idai254Yw?X$7;KH(7h5&1Ebg-q#nL.)lxăU"rC3b;6yO%mW;$7QBE)8Sqp$%5?p<_Xyw4*EBT=/6j$-extvNAx.yE)2dWJA,3FuăU"aF&tp%vCjQh1YZ9P?%95&8;i[Q-:g87jir^*vMi9/.rtm)JiK*CHMGxBKNkg?tcăU"7gGsS2v?3Ns-+=nr)UOx+]+*?a>qaPf.r?V20Zp/cu6m/n\6??$tLpVHr%Ho??VăU"JLU%9&[$Cma3USHTcGTFgC6D(u,D5YT^oK99N+p5=M\F5LEf]LB1;pe(=B>Z>'FăU"HIEBrFV6FN4I8I)d]L41CoEqn$ho?[HKAE^X?s%>vDXJ)L[J('jbJlPgT%wBr3VăU"y./Z?dA5m$'G%/B&LYLf.(6qp;po_nEI)]41xWlO#5M\4h'chxkmS.6p2H52V,2ăU"YPnMG>)HT2[R<8'#IbLR>-1cU7GYG7U)M^'D8ELx.k=IrG&k1M0lP+BNmN,o(USăU"xkKfRq8&FqJ[MgO38mm?_R8_RPS??9BILT[01'cb2NmhT37eiR?q_N(6e8.0<(^ăU"yQiCq<[BldZ.6QOYp&VQv>imu3a1th40?ASNQ6UHZ#JY=bYxc7r^OdkG4XnU*^]ăU"B?nXb,OjD<2+ElMjlSr1<QDDwWT*ck-%:XN1Wn#Y;i1w4q20ksLIP\%8/pVp^5PăU"7p4:VV7e_#]/qmM&?*q<q[J'#*RmQD^'w^ZUR'raT$DU/BqB<R%2Ho64O5*);56ăU"1AcfbLsKGW\71r%BOU.W+b>.7j3fV2ZV9Sy8-Zcmfol:g1Q&tql+#$rY#:kTJ-,ăU"nS=_O^NI%sLUSh(YUT3z.j5$sXVRImOEW9$r8GPMQB[D<SM33G7.Spz2&&HuXwuăU"GeadqX_TZ/R$v\^*qViC4:;-Qns):EZ'3DLO&HJYsoCiG*TF7i.ut_GpB;nP>&HăU"DCoA+0IHMS01/RyCe'z_famiZ1HVT\oomBoG'5cJX+fS6#&'<mXc\:S?XZZWO?BăU".f>;Vaa,AW[RFhA=\(iXkaXS\JQH9T+w_sfX.WQ?NxK=PLQn2'u57\_Y^wi)rq]ăU"DCVpQ5H4w+d_Cx.dh#6;lWwqp?92bVm\l4fXE[:=1rfWf.v>:PO)43Zq>WePhvHăU"+S\_:1/XH_ZLO+IpiIRQ;$VAuRMH?9+U$N2(AamFok&y:*)DPmIME8(W?+n9,uqăU"C2D$X9A\9WVW\:0Ykys4(M-KpGo3T(?8;5.D%-bqr%9B^cX<ej<QWV#E<by1.u9ăU"s1Fn]Uh1Mn&0r)d$P\BF/TZ;WkXu^Ivu[WL8n>V;V.ga8l2gxG0JJQgXHoeN\U[ăU"eG;5J5V4hs(bv/_k.#[Cj5,n6%+[WbcmOtBJpwOLveU_:>KI%f5<i\jJDdG2_F'ăU">T9UP=)CV6ZWwC84qOsIQ(.KI2NYAL?N9,#0jHY+;_jn#_Q33dK\?R&Akzd5SHVăU"s>*=f$F:ll/]$,S&22b%]DX_GI3Lj/l)(m1vePTl[TVs0PB6;8O9elm1L)HMV,măU"BSOLLplp^[qR2';rg,1*?6-#k(3hL&(s;TFu?zc%jMm+PRP0;;0?a+,2(D\0o>qăU"yf*4CjP7<gL)GgMlZhMwgWo&8%10-C/sBfMrVf;<.#K#AMGTjBYbxvnF)AtRVp,ăU"[gsMIUheO8s0+tDqM)U<:E6d0:po4Wm7UL$D%-D,81\;2Ib\ekd4I*P0q6dC==;ăU"GW,z78>s9]pyHf9GHV3OiUBtm&q+ac++\+h])<034XeDA\dv<<sSN80tfn]%kv7ăU"jsfbc5Pn%=>m$PBuvtSel/i2:cg+?^/d/*:7r/]&^4.&Q^^drtg0%d?zuMJda4făU"H&MrM7i#HRbRhrb)1\pT?yxjSM\hZSR>Fj9.PV61_R'3EqA8G_M5d7A6vbS-L*$ăU"3*/dSYdZGZ.OX5slq[;4>.l.Nh4Tisf=s3'-,scouDTO&yR/IrsM4O:P*HX>NSvăU"pfz&pjAN^?hCGNsvm*DKKPA'WBLZ1q64Oat[/K%2EnnPTebe+'_y>LS,9VNwG;TăU"j(1q9bmkG[$<<)0JAiqvIQ+S;a$=Lf_<y/V%v7F*^+Cy+7LrS5<)lK[<nbO't5HăU"kafKcr4F5H:*e:.X+.BMCa:-x3<2ORst/(2g8JDJWe;x2tn[$$u^IOe.zLuj<anăU"J-rtXu,3K,e;^w55.K[m)$a2^MFZE;ER[&JAcTa'<[KEj;70RikS'E\dnTAm?sRăU"N&P0(#K.kdJW(NIKZh^vLB;:R6nC>a?V%eOC3:sQ;<YYsZTFShGk6jLZPatqfHpăU"[b:THIaS_f8Tpbp-\ju7PCPG=b[fe/GK;]t=Er/3NBgoe3CNc-233u:&^pStXp4ăU"XTh7Kh&wa^a5gG0eK%H1,&oB)Z5>uP0]4T,9*sWhEj%SqCDZt#Cl1i\hGN*8$>LăU"#r[f''-%bqlT_vr<Lav(gshn(&xt_.L2l4b7&OoV^n'O*464ZqGF#YxkL2RDpaeăU"A%xXu:(l6IeGo*/'>]HIX^z,q[2p\&&-u'bybtR3/MnfY]EH=QTF]$p'cVq0R\găU"LBVf2Jb(FQV/s:vbRGsM9]vRLw3'eM.&*I.8Mg]nEFaGzn$\G#H*,[=Ce0oNE2OăU"DY8lac>9&flId6W5hBDJS&\b$ZN+3C>,hX;1rA_z)q-YZ5B1hsf(msjv0uFjV\eăU"AEbSGKmv8aY<q5u7[#E*oHy6ZnbaYehR?EUWWO4_Sl1Kn)KAm)XIFO#.zj#B=/CăU"j_#9Ryy%bU&a*KYoW#om)V>>l3*^8:=+d<2QNJ0.Uhrb5uIf-Zc1G%Ki:7vJkv8ăU"*Us(F=n(buU8G9A6_DqMnNW;R?zbymi7P1gf,1VCJd>c^34m=.\h(1t;7Cd=cXOăU"(K;/zs,f=8r]-C?uKu1q%_40r:e;9nIK9yv<'/PW-65:*=Kq3Y;,2kxKsgljSR0ăU"/Y.<_aDF<e*\pjBFOc=SZAUAU5:,A%1AyfAPYq1R6i&A9ernip[yBhol<Lat#&;ăU"7*c5uo*zS;UQ+,PF#fo5Q0r)CP])T\j_X6Vi,qzqC1p1S<*6<s7AHbP6TA=PKltăU"T:'>kV(F3Ehc#3$N/LYGN$0P$'+jZ9c,9HBfQR>c49TVu4]6B%Kea?f]Re,:7#2ăU":A+-j;pR/r\%h+.cWKAX-BKKWYXb+kA0aSn<jH-\-=\97CLT=8lI)0rDV5WjuHjăU"3C>&7jlQDtf[JwHE1sDqLo_2%58(]]QSYJSh'1i:72-WsGER8'MLs(-W#1\j6lMăU"RWWJ+u0Y'G.fuf=0K[M<,;?K'R*LjS:*+gt;8d1kYi5jbUxrOLJJ[CCUiA6##AMăU"V[$^)FI1r6N-?lH;'[i1Ih6m^'\=d#*/2vF0%Gl',*7y(n.sfrN1s6g5b)&m>?:ăU"Z_3(.Pz[tT#TkAksH69h?oACPq2b/1T.I2^T87s95x(v2oSB]48ZgCj6VFlL>-1ăU"#sQj\j3H<qqv*<IJ^T7jgnAKD)HMtgusymC;%9YD-q0P%*c/F6XDT9&tXW3.#IWăU"[:Oh.A8Hk]5br:B1C+Jysif?lZhDAvcoL21V_6ktZtnW3G_Ecf>+fVE(#S4<SC9ăU"L9W:88N^Yo%LTq9/usaEg#C^+_xA6,-igrmH6#/dy=B&A7igdq$=bM=Xbu'Y+G]ăU"-/cU8F5++/6DL,n,K)E5T*Pn%JctTP,-&IyG=,2u=*U<3A)ca,Kmzg\;Z_=UEaXăU"O)uniM:35Fw0K9V-/>g_\Jig:OHW0$F\)#DTqrC'TAS2cb(6[7?>1#j5r#;4(ZOăU"6=.3#mUJaXp'Ey7Xf?Q.Q3rG&?GBP5DAJj(S+i?'6D=1)4*iqWK_[>BM58JmqqVăU"*qSak6T0agqKYY6wnZP>#1T\I&b%K$)Q0&.5#MrbcOKW3h.y++C252TV6oCzQ,=ăU"nB%7+cPUmCP;qb:SL;&*ElS74;^P$)Qti+Ij,#dscFu:1\91-qM2eG;wbNTS;9]ăU"+pXFUGCnPo2D3]wnb^I>k,Z;M(%+Pz\-WNU=f.s*[hV>eF//8+3j&)A7OE=JSx]ăU"\b(qS)psN#H+emKa$YyFF?>%S_alBW8N4G4&eE\s(niX4,wSYR*$IrqfdQ5sG6&ăU"AfFK2/CnsWlhsoe.vpd;A&uYUq9F6NP$''DXjMc;FA]=ilp/_l*<Fe%<]S<Cmj9ăU"t;-I([bq*wDUXf%03[tM[F3]v[q$)&nJ:v&^;cjcGR0m#AM0O\12cC-?f$SEGYVăU"tV?PeE[6hvb0YAVp[xus8MjM6RX3Yp+wWfA6nFe.=ieD<q(/rtUOXl;WE>^,XEAăU"A1%Pq[JU%hMCuZ\-aG)Z^BIAk;V1d)$,Bmx4v=nTsK%dq.u_EuqmiVSaK%+QGqIăU"/NBh/v[;Z%w[*P*5tUI)^kjJGT(>rR-5Y3FCmtBGveAS#dJ+8PM.Kq.H15#\urPăU"<B1p6t:goebi=#,#VJ>uo?RgKa+4xqFRnLn*I=6nqvb.Iiy[V<15Q'3:#kYQwM&ăU"M9,6H=u:#D,VAAH^215/CC+RmY\\FnFHoTGtl\nR'E2)EJ.>M(K#NLvRPGv-S*9ăU"k8maEMp12>]YpDun<F(^;ItbQU#qf\rEQMvrG/?[=(0OjT5M(([7KH2X9ih;e,CăU"8-DNZY7T,jRc#-6%K+*,-)^pKhL\71B1j3i4h,]SYAARz<6T>.[tkB[1F]-tK,2ăU"IP+8V;L+xG;lSjo,G9?,#(VrV\_n+$\kI;G-3F*LQ903hIe6Va-Q19p.wNF+cKWăU"#-5s7FT]M=CE_U$=8$V5$*'QD7no?tpt3Ad?83<(TVFJ'#vR[p+Dv&aUP'069TeăU"dLFvUXjl1W2t0KP0<KFUfIKcP;iu\$[N9iF6&mVO0[8<wwOeAd8=#v<p'\(.^5FăU"3nkkCJqq49<sMfkxP1-HpH$PS$mBn'hBj,N8eNNAd%(T6f?;K1mc?HBes1CMr-GăU"smRtI[(8S/\.5w[<Hf9eB.BD]n$D8mJWI0/3;edT7$9X^FZCaVJ\?3m7w[f7gndăU"*O*oE-CEutz1;j9&[';htJCVu3;K=Dtm5A[T8%R>dAeZt=nKECHSuA_rs?_xT^ZăU"8n/#UPW<T(nZQNZ7xd_#ENpEqi30fq=avKk+ou(6IG>3f]M<+Vj-muWX5P]9[MMăU"%:]N_1O3iQ8F#=^]&K>9Y'1M&PU.v\B=RQUP/7ySCjWpuAQR;6n,I2o#Ox0Boa#ăU"G2(VH\3ck2Bi3A%T=d30j:&YqiN)(&hl>SH$ITOh):gfJd:Zr;g=lJ0?7*:LocfăU"Ag9?h=]Lvx(R?Av2SEvn5t3]o4/oN(3]nK06BB)8]gE<#Knw]m>]N^K['<qo+pQăU"a0T(5k\khVw-88EWz0L5M<MAI9M[iUUinLub#*M)#_Ryrh?4opvOk#:96.J8ZCjăU"6*^D.b)u2hTqLkPz^YJf?oF&PQ,;K]:#RE7NQu,M=]QP)J#9sNg_rqnNnWG;Kv_ăU"27zRZrrBist0BO[Po=j'%AiRb'L.*uDOI9[s4t_ORO7e,Nk6mzHIv9rfNfe$%f8ăU"BbbgHD8kaTE_Bjj>h1Ou.ew*_US*&I>WR^n%[OLiC^(NhBgFjxK(-=9U$%SLFC7ăU"3Odw:%]9/<OQ]0IK14GZ>_0wOTO*mR?7&ABcF;Ob/H9G>?s[Wo_(<=cm__C]jlXăU"nIs_>bXTOVQA;A_n9+hj5Q#O2iv>-G5=9#gP;Vr7O:1/.:2_d#rvhKwz)n:9/F2ăU"GD<N/OeHe65]+YkxM*a;L]DdM7TZ:[r9vaq.js;2_QXQlvNY>#xXl8H+%8Z#n6năU"8FGMdT$W%vY2%wb00pvz1tzh]1V]y$=72ov+X[p]c*W3^)hinGDp]kJ4\1M23_QăU"-j\H;$VT*QQ1%TZf5'>;u&H4G%KQh=Uo-kWp&'4#?\d9^XvJ#8'$RCV0G>E?/c:ăU"kH<;cAv<PUkDk';$GgNum0hL[FY*YcRA?OWB6bO5^S-A;#^rze$)#65,4n%w?OLăU"CMAKbL^9gw'HrQuRoF=#L>FRu75MjuM]C*#7g^#Wm'0lCAf:fX+Q6(Qb\&QVJXpăU"CmbQj<q&FVXDDIFlIh\37XD]OVtTDngBrVhr_,3^UP0*;mH$):h>uJuVvZ'FCUsăU"k>kd$=>;XW?2Fx5_G#9NGOC0no,x_KRX\;Wy/y<tz^+dtE)QDqd7]2G/(2XRb3*ăU"GD,#hht^Z%9b?9J/9ckcQx[iU5Pr8/Urzp7M[fOyFV;r\2;;X#\Qw'w]%]V^-3*ăU"t*7oLEqtbn8U+/ZLbYArAc:TTdkv+tN.?,n^VhsBfojoN#=;,U%JvyP*S]?f\G(ăU"NJ?:q9s5N36A0sv^$b+;JTtibA9)IbgyH-dirU#V'_WSJ?pX1PU)?keoA_^RZN>ăU">VDUJeTUpHx>5qO4%F51QiZFii&&Z,nAJ/4';92c*Y64AVw3?'rh9qbZtlgOx=lăU"v/)/bHJ'(CDD;Y?hsUcFZB=U/A#+ZJ;Ql>qB,CxMi/6]Imi?xx.]nz*-M=(/zJMăU"GU9Ws*?8S'#lZqu][(]M-U>20FaH)]sx[HRa4:,_9Ao2uJwmehJdY&\[HRhQ9TaăU"3jFj;.x4W#s8ApJ6u\SgnNEp%JOVcYl&2iIoYI83rt<ZBpW.Nd2Z>ioHFH'n:CRăU":z9$R9RrCGI7n#^ATbu6Ctj+6>'1f<Q-5Tv]c1gnOrG>V>TtpR3HAZbs<gQ*SZ>ăU"<cdBFMeJ_K\QfTc9$u3jsj^t]J_%X-jNRqk5&5<+-]1hb8GC;0sWSbmP2%bib78ăU"95n_=bn'T00$]$-[;:Na,iC6v]BK$t;,iBcMYlJ0g-LvDL#sf$Fj-VS6NfGfd<-ăU"zS,YEaP%T^C):_(iRkLVpa&CUsXa'FJOfcDg+7\4xv6HlF6x]6gLm2?f,[<\ArdăU"j_%\Rsl;_uK/z8H?hr-TQ-JmUb%7J0#H:D=S7nFYE'v#\Aa2Y35.XJj8=PVjCvmăU"0g(O+;o#1gp?=[[>'Qe_Q2F4AOa<mrDV_idi#[1?')9OP5A=Z,TNusNGsU?&1nWăU"gdZXDD-FqMxp6EE-),f3Y%A-LJ:aZ6IYl*piy?mM=*7)-]6d,ErPbVK3t^J[8[CăU")G^PN-2B?7[o3zko2VSk&Kdf'4I94mB&i9K3m%P/Ed)uf87S3Uc?Rg5V9Dp#Ep<ăU"=CppE;h>nFMA=5E?vM&ze?0[5HUdffbSROH)L:f?$&J?Yh]t/TOlw'>HM3MWi?\ăU"Ff(#hG>+Yg7xAO->Mg%DT$MEgk8$T]hWhgTACpR%ZLvC1TJjIEP04Z>o[>FVB5tăU"eScKUExnenBR:i/iZ19rROt[8bwSQW7o2cvbqOK5IWdR^zo)j5dDYMIU22);=A#ăU"qGzD*q[Ki)8#XT$,kp>ps\)]Y&fq7]=4L&-+)+X9VlLW>?/vBq^'V\<C-B.eRq3ăU"D]#S[ZKsx=VE.JD8AvH-=9Z4*zUpP8GEh)eNIa/u*MVfKo,HQeR/ivhL0d?gh;MăU"sP<)Qgr$DqKA,+<f9F>_,NYf'R#b_1Q)N]lCXatv[#Ho)ojV*VK<FbFeDl3OL/9ăU"B]JFu+z=Cq7wXX_aW6dRGuT:p&=rvGofcPY/wK5DHW1HoLN1>=Ij=lf)wgm;-BWăU"\_+CoOchIE6U/NDjLhbxBgkl2m*_Q]p2.sgg*fjAJ?6=^Gj/o)j'0Vd]p;4o,$oăU"cpoRi&d);h9sT6?o=J\TCI#Q(ib/iU-/WZd7QC\N\,.FJ6Q;ZPWqUOKe1FY6e&TăU"3_7n?Tb6e5l>FV,X.a;Ha'5dcP1/r<'><D*\NYi)-]da':$ik:+&BT$IdpY/W$VăU"q=>&nMkYWEH<ZewFOR>4%5IsWPS1/F&yUPF7uv?]6t=nmC5<pCB2[>4DbLGK8A.ăU"=P4^[^SDQgJyTIG\.f_:GH4%[C#Ie:Dewnt2GC,Lq[r4d9u=W0E?69fl?K]IP<VăU"z0ldwU=%n30Ml+Ag'5ruQG:J,+Z025u(6HAkR^EyCEq^8nkl$m6[Mx5]X^$tV'9ăU"<xiA6df+FFiISmNb*<.a^N/J'Wb2>:mfg,+f2-obB':s-JTljK-02F^&a;d(6ETăU"YF7?M-'ayyV*FC;w2bR=ZjS2-<Ne13rUnn9XdajnlKe#Pkqg&TdrMnnO5b_v6]3ăU"rpq,yliNTmRWG=8AV#hk&_sa8fvOLVAX[8Mgw_.A2<.=,Y=s1VsS(+9,TM<5Kn3ăU"sJ>.%2vc_HVniUmHbrXtmyAg_*q.J3MP3?P?m*rjWAEL,W:9w]4Ug[5)FKi)?LkăU"VepGoJg'xAbh)m'_c_$:RW9E,Gvc/2?Lg0mt6FCjha\m(8+7qH+)YipWEWx/,^JăU"G,u^nVK?[5iw/al\mA7)#myC:']fNDzTsId0,zcTj[#)>Lg2Ztdfdo].Llhs[1.ăU"gOi-#Vc^RG\uia[dqRZ<_IB,RxSGP).9Y3P2B)%LZ143EigiVrIt,:>)InJy:TVăU"Wv']TL9Suo1.<:x3_vihkqEh+B3-KW6X/f7^u*obLdCH;qs=ivP4&,BP2o>,F4hăU"H\O493ouO5rPj[;S]?wvir7W:'eV;oSFDKpEnkz+5h:VNYX)1HL3o%O;;Ad0U]wăU")yBlx)y>\6bjfAoMg0]1;_T4OcUHX5Lii8Ij_W\m/0cs=\7ZWwT\$G1O^f4SG_;ăU"#>u]fpBE<^LE'mlXYEnV=Gt\($g:+u\0h5YhroR?uuT4778K,YLvk3uN,wvH4hyăU"]gt)]Tif_eqsExrfC\=b-uvvt'Xg7v_n>1$dm\<(w9wBP>cxcL=<CKvKZ[NXN<năU"I[UUGm6FB+FbAi\H.WdZqFKc0hCwb.5CwrTjTxurt(XbNvDv's<up%&'W0%9%'%ăU"7-%m6.CLDR>s1I*7%%[6%%%.%%%%%%%%%&%R%%/P%%%%%Lx4CDJ?S10&Bup&%'WăU"09%%'%-%%)2C7LArY(yw,%+%:8%%%-%%%%%%%%%&%%j%/Pp%*%%i24<>S210Bu%ăU"p&'W%09%'[%-%=bwmKn0kC2]%L%%N&:%%.%%%%%%%%%%[%%%/,P>2%%%gfq#qVSăU"?)2Gup%&'W0%9%'%R-%]wBmKNE%(tI#I%%n*%%%.%%%%%%%%%%%R%%/P%IZ%%%găU"fqqIWS?2&Gup&%'W09%%'%-g%\zmgKp7M)a_F%4%C/%%%.%%%%%%%%%%%%O%/P>ăU"%u%%g%fqqXLS?2G%up*+%%%%%%*%*%%7&%%(KA%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=32AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăRuud Wijtvliet                 BURNING TEXT                   wijtvliet.c@wxs.nl             09-04-99 (21:32)       QB, QBasic, PDS        99   2753     BURNTEXT.BAS'ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ--ÄÄÄ--Ä -ă'łă'ł  05-09-1999ă'ł  Burning Text...ă'łă'ł  Created by Ruud Wijtvlietă'łă'ł  Feel free to use this routine in any program you want, bută'ł  it would be nice if you'd send me the program you used it in.ă'ł  Here's the adress, although i'm 99.9% sure you won't use it ;)ă'ł  wijtvliet.c@wxs.nlă'łă'ł  To adapt the text, go to the bottom line (the DATA statement).ă'ł  Just put some $trings behind the DATA (all text between "" andă'ł  seperated by ,). Make sure the last word is "STOP", otherwiseă'ł  you'll get an errormessage (Out of DATA).ă'łă'ł  You could also try messing up the palette...ă'łă'ŔÄÄÄÄÄÄÄÄÄÄÄ--ÄÄ -ă'ă'ă'ă'ă'ăSCREEN 13: CLS : RANDOMIZE TIMERăă'-----------------------------------------------------------------------------ăă'Setting Palette:ăFOR i% = 0 TO 63ă 'Cold -> Warmă colr% = i% + 1:   r% = i%:   g% = 0:    b% = 0: GOSUB Pală 'Warm -> Hotă colr% = i% + 63:  r% = 63:   g% = i%:   b% = 0: GOSUB PalăNEXT i%ăă'-----------------------------------------------------------------------------ăăDOă  READ Text$ă  IF Text$ = "STOP" THEN ENDă  Breed% = LEN(Text$) * 4 + 6ă  LOCATE 12, 21 - LEN(Text$) / 2: COLOR 126: PRINT Text$ă  Links% = 160 - Breed%ă  Rechts% = 160 + Breed%ă  Boven% = 70ă  Onder% = 99ăă  '-----------------------------------------------------------------------------ă ă  REDIM clr(Links% TO Rechts%, Boven% TO Onder%) AS INTEGERă  DIM a%(2)ă  FOR x% = Links% TO Rechts%ă    FOR y% = Boven% TO Onder%ă      GET (x%, y%)-STEP(0, 0), a%ă      clr(x%, y%) = a%(2)ă    NEXT y%ă  NEXT x%ă ă  SLEEPă ă  '-----------------------------------------------------------------------------ă  ă  stap% = 0ă  DOă    stap% = stap% + 1ă    FOR y% = Boven% + 1 TO Onder% - 1 STEP 1ă      FOR x% = Links% + 1 TO Rechts% - 1ă        IF clr(x%, y% + 1) > 1 OR clr(x%, y%) > 1 THENă          h1% = clr(x% - 1, y% - 1)ă          h2% = clr(x%, y% - 1)ă          h3% = clr(x% + 1, y% - 1)ă          h4% = clr(x% - 1, y%)ă          h5% = clr(x% + 1, y%)ă          h6% = clr(x% - 1, y% + 1) * 2ă          h7% = clr(x%, y% + 1) * 3ă          h8% = clr(x% + 1, y% + 1) * 2ă          clr(x%, y%) = (h1% + h2% + h3% + h4% + h5% + h6% + h7% + h8%) \ 12ă          PSET (x%, y%), clr(x%, y%)ă        END IFă      NEXT x%ă    NEXT y%ă  LOOP UNTIL stap% > 18ăLOOPăă'=============================================================================ăă'Palette instellen (zo = sneller dan met PALETTE):ăPal:ăOUT &H3C8, colr%ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăRETURNăă'-----------------------------------------------------------------------------ăăDATA "Ruud Wijtvliet Productions","Presents","Burning Text","STOP"ăMichael Galos                  3D ROTATING WIREFRAME FACE     galvin@powerup.com.au          09-04-99 (12:41)       QB, QBasic, PDS        114  3784     FACE.BAS    SCREEN 13ăpi = 3.141592654# / 180ăa = 160: b = 100: c = 31ăs = 2000: r1 = 60: r2 = 5ă1ăFOR i = 1 TO 360 STEP 1ăx1 = a + r1 * SIN(pi * (i - 3))ăy1 = (b - 5) + r2 * COS(pi * (i - 3))ăx2 = a + (r1 - 15) * SIN(pi * (i - 4))ăy2 = (b - 20) + r2 * COS(pi * (i - 4))ăx3 = a + r1 * SIN(pi * (i + 3))ăy3 = (b - 5) + r2 * COS(pi * (i + 3))ăx4 = a + (r1 - 15) * SIN(pi * (i + 4))ăy4 = (b - 20) + r2 * COS(pi * (i + 4))ăx5 = a + (r1 - 16) * SIN(pi * (i - 20))ăy5 = (b - 25) + r2 * COS(pi * (i - 20))ăx6 = a + (r1 - 16) * SIN(pi * (i + 20))ăy6 = (b - 25) + r2 * COS(pi * (i + 20))ăx7 = a + (r1 - 14) * SIN(pi * (i - 30))ăy7 = (b - 23) + r2 * COS(pi * (i - 30))ăx8 = a + (r1 - 14) * SIN(pi * (i + 30))ăy8 = (b - 23) + r2 * COS(pi * (i + 30))ăx9 = a + (r1 - 18) * SIN(pi * (i - 20))ăy9 = (b - 21) + r2 * COS(pi * (i - 20))ăx10 = a + (r1 - 18) * SIN(pi * (i - 27))ăy10 = (b - 20) + r2 * COS(pi * (i - 27))ăx11 = a + (r1 - 18) * SIN(pi * (i - 14))ăy11 = (b - 20) + r2 * COS(pi * (i - 14))ăx12 = a + (r1 - 18) * SIN(pi * (i - 20))ăy12 = (b - 18) + r2 * COS(pi * (i - 20))ăx13 = a + (r1 - 18) * SIN(pi * (i + 20))ăy13 = (b - 21) + r2 * COS(pi * (i + 20))ăx14 = a + (r1 - 18) * SIN(pi * (i + 27))ăy14 = (b - 20) + r2 * COS(pi * (i + 27))ăx15 = a + (r1 - 18) * SIN(pi * (i + 14))ăy15 = (b - 20) + r2 * COS(pi * (i + 14))ăx16 = a + (r1 - 18) * SIN(pi * (i + 20))ăy16 = (b - 18) + r2 * COS(pi * (i + 20))ăx17 = a + (r1 - 13) * SIN(pi * (i - 8))ăy17 = (b - 3) + r2 * COS(pi * (i - 7))ăx18 = a + (r1 - 13) * SIN(pi * (i + 7))ăy18 = (b - 3) + r2 * COS(pi * (i + 7))ăx19 = a + (r1 - 13) * SIN(pi * (i - 5))ăy19 = (b + 5) + r2 * COS(pi * (i - 5))ăx20 = a + (r1 - 13) * SIN(pi * (i - 20))ăy20 = (b + 5) + r2 * COS(pi * (i - 20))ăx21 = a + (r1 - 13) * SIN(pi * (i - 5))ăy21 = (b + 8) + r2 * COS(pi * (i - 5))ăx22 = a + (r1 - 13) * SIN(pi * (i + 5))ăy22 = (b + 5) + r2 * COS(pi * (i + 5))ăx23 = a + (r1 - 13) * SIN(pi * (i + 20))ăy23 = (b + 5) + r2 * COS(pi * (i + 20))ăx24 = a + (r1 - 13) * SIN(pi * (i + 5))ăy24 = (b + 8) + r2 * COS(pi * (i + 5))ăx25 = a + (r1 - 13) * SIN(pi * (i + 8))ăy25 = (b + 15) + r2 * COS(pi * (i + 8))ăx26 = a + (r1 - 13) * SIN(pi * (i - 8))ăy26 = (b + 15) + r2 * COS(pi * (i - 8))ăLINE (x1, y1)-(x2, y2), căLINE (x1, y1)-(x3, y3), căLINE (x3, y3)-(x4, y4), căLINE (x4, y4)-(x6, y6), căLINE (x2, y2)-(x5, y5), căLINE (x7, y7)-(x5, y5), căLINE (x8, y8)-(x6, y6), căLINE (x9, y9)-(x10, y10), căLINE (x9, y9)-(x11, y11), căLINE (x10, y10)-(x12, y12), căLINE (x11, y11)-(x12, y12), căLINE (x13, y13)-(x14, y14), căLINE (x13, y13)-(x15, y15), căLINE (x14, y14)-(x16, y16), căLINE (x15, y15)-(x16, y16), căLINE (x17, y17)-(x1, y1), căLINE (x18, y18)-(x3, y3), căLINE (x18, y18)-(x17, y17), căLINE (x19, y19)-(x20, y20), căLINE (x21, y21)-(x20, y20), căLINE (x22, y22)-(x19, y19), căLINE (x24, y24)-(x21, y21), căLINE (x22, y22)-(x23, y23), căLINE (x24, y24)-(x23, y23), căLINE (x25, y25)-(x26, y26), căFOR t = 1 TO s: NEXT tăGOSUB erase1ăNEXT iăGOTO 1ăerase1:ăLINE (x1, y1)-(x2, y2), 0ăLINE (x1, y1)-(x3, y3), 0ăLINE (x3, y3)-(x4, y4), 0ăLINE (x2, y2)-(x5, y5), 0ăLINE (x4, y4)-(x6, y6), 0ăLINE (x7, y7)-(x5, y5), 0ăLINE (x8, y8)-(x6, y6), 0ăLINE (x9, y9)-(x10, y10), 0ăLINE (x9, y9)-(x11, y11), 0ăLINE (x10, y10)-(x12, y12), 0ăLINE (x11, y11)-(x12, y12), 0ăLINE (x13, y13)-(x14, y14), 0ăLINE (x13, y13)-(x15, y15), 0ăLINE (x14, y14)-(x16, y16), 0ăLINE (x15, y15)-(x16, y16), 0ăLINE (x17, y17)-(x1, y1), 0ăLINE (x18, y18)-(x3, y3), 0ăLINE (x18, y18)-(x17, y17), 0ăLINE (x19, y19)-(x20, y20), 0ăLINE (x21, y21)-(x20, y20), 0ăLINE (x22, y22)-(x19, y19), 0ăLINE (x22, y22)-(x23, y23), 0ăLINE (x24, y24)-(x23, y23), 0ăLINE (x24, y24)-(x21, y21), 0ăLINE (x25, y25)-(x26, y26), 0ăRETURNăAaron Severn                   15-BIT & 16-BIT SVGA ROUTINES  rlsevern@idirect.com           10-02-99 (21:10)       QB, PDS                537  20219    SVGA.BAS    '****************************************************************************ă' SVGA.BASă' Programmed by Aaron Severn (Laeden)ă'               rlsevern@idirect.comă'               www.geocities.com/SiliconValley/Peaks/9572/ă' July 18-29, 1998ă'ă' This is a bit of a revamp of my previous SVGA functions.  A few bugs haveă' been fixed, the 256 colour modes now have a much faster put pixel routineă' and a much faster put routine both done in assembly, also 15 and 16 bită' colour modes have been added.ă'ă' The 15 and 16 bit stuff is still in the early stages, I might redo bothă' routines in assembly some time, but I'm kinda sick of this stuff for now.ă' I'll see if I can add support for 24 bit modes too.ă'ă' Since this is an early version of the routines I'd appreciate bug reports.ă' If something doesn't work on your computer let me know either by e-mail oră' by leaving a message on the message board at my website.  Try to give meă' as much info as you can about the problem and about your graphics card.ă'ă' As for the legal aspects.  This code is public domain.  If you use it,ă' give me credit.  If it does any damage I'm not liable.  It shouldn'tă' cause any damage, and as of writing this it hasn't, but if it does youă' can't sue me.  Okay.ă'ă' A few IMPORTANT instructions.ă' 1. This code requires QuickBasic with the qb.qlb library loaded, otherwiseă'     it won't run.ă' 2. There are three put pixel routines, one for 256 colour modes (PutPixel),ă'     one for 15 bit colour modes (PutPixel15), and one for 16 bit coloură'     modes (PutPixel16).  DO NOT use them with the wrong modes (ie. don'tă'     use PutPixel in mode 111h, use PutPixel16).  You could do some seriousă'     damage to your monitor if you do.  The demo code is set up to avoidă'     this little problem, read it, learn it, live it.ă' 3. The put routine (Put256) was designed specifically for 256 colour modes,ă'     use with any other mode could cause some serious problems.  Don't sayă'     I didn't warn you.ă' 4. If you use DEF SEG, you must change it back before running a put pixelă'     routine.  In order to make this easy, a variable is set up that holdsă'     the segment address required by the various routines.  Just put theă'     line DEF SEG = ppSeg to point to the right place.  Of course, if you'reă'     not using a put pixel routine, you should restructure the code so thată'     the default segment points somewhere else, but that's up to you.ă'ă' The following is a list of SVGA video modes that are currently supportedă' if they are available.  Exactly which modes are available depends on theă' graphics card.ă'ă' Mode Number   Resolution      Colours         Graphics Functionsă'==================================================================ă'    &H100       640x400          256           PutPixel, Put256ă'    &H101       640x480          256           PutPixel, Put256ă'    &H103       800x600          256           PutPixel, Put256ă'    &H105       1024x768         256           PutPixel, Put256ă'    &H107       1280x1024        256           PutPixel, Put256ă'    &H10D       320x200          32k              PutPixel15ă'    &H10E       320x200          64k              PutPixel16ă'    &H110       640x480          32k              PutPixel15ă'    &H111       640x480          64k              PutPixel16ă'    &H113       800x600          32k              PutPixel15ă'    &H114       800x600          64k              PutPixel16ă'    &H116       1024x768         32k              PutPixel15ă'    &H117       1024x768         64k              PutPixel16ă'    &H119       1280x1024        32k              PutPixel15ă'    &H11A       1280x1024        64k              PutPixel16ă'ă' And now a brief description of how to use this little package.  You cană' look at the demo code below for some help too.ă' 1. Include all TYPE definitions, SUB and FUNCTION declarations, COMMONă'     SHARED and DIM SHARED variables in your code, a header file might be aă'     good idea.ă' 2. Run the LoadAsm function to set up the assembly routines if you areă'     using a 256 colour mode.ă' 3. Call the DetectVESA function.  If it returns 1 then the computer hasă'     VESA capabilities, if it returns 0, it doesn't so this code won't work.ă' 4. Call the SetSVGAMode function with a mode from the list above as aă'     parameter.  If the mode isn't available it returns 0, if the mode isă'     available it returns the number of video memory pages available.ă' Last. Call SetOldMode to restore the previous video mode before the programă'        ends.ă'ă' And then the other functions.ă' GetVideoMode - Returns the current video mode, this routine is used by theă'               SetSVGAMode function before changing modes so that theă'               SetOldMode routine can work.ă' Put256       - Very fast put routine that is compatible with mode 13hă'               sprites.  As the demo code shows, get the sprite in QB screenă'               13 for use in 256 colour SVGA modes.  A sprite with data ină'               array() is put on the screen at top left corner (x, y).ă'               StartIndex refers to the element in the array at which theă'               sprite data begins.  Thus more than one sprite can be storedă'               in a single array.  Use only in 256 colour modes.ă' PutPixel     - Puts a pixel on the screen at (x, y) of colour clr in anyă'               256 colour screen mode.ă' PutPixel15   - Puts a pixel on the screen at (x, y).  The colour is made upă'               of the red, green, and blue (rgb) components that are passedă'               to the routine.  The red, green, and blue components can haveă'               any value from 0 to 31.  Works in 15 bit modes (32k colours).ă' PutPixel16   - Same as PutPixel15 except works in 16 bit modes (64kă'               colours).  The red and blue components can have any valueă'               from 0 to 31. The green component can have any value from 0ă'               to 63.ă' SetActPage   - Sets the video memory page that will be written to.  Noteă'               this routine does not check to make sure multiple pages areă'               available, that's up to you using the value returned fromă'               the SetSVGAMode function.ă' ViewPage     - Sets the visible video memory page.  Like SetActPage it doesă'               not check to make sure multiple pages are available.ă'ă' Finally, a list of important variables.  These variables either give youă' or the routines important info about the screen mode.  Variables markedă' with an asterisk (*) are needed by the routines and should not be changedă' unless you know what you're doing.ă'ă' xRes, yRes   - Holds the screen resolution, filled by SetSVGAMode.ă' yOffset *    - Adjusts y coordinates for different video memory pages,ă'               changed by SetActPage.ă' curBank *    - Holds the current bank being written to, needed by all pută'               pixel routines.ă' winGran *    - Holds the window granularity of the graphics card adjustedă'               for use by the put pixel routines.ă' oldMode      - Stores the screen mode that was in use before setting ană'               SVGA mode.ă' ppSeg *      - Holds either the segment address of the assembly put pixelă'               routine or the segment address of the graphics buffer.ă' ppOfs *      - Holds the offset address of the assembly put pixel routine,ă'               not used in 15 and 16 bit modes.ă' bpp          - Holds the number of bits per pixel for the screen mode.ă'               This can be used to find out how many colours a mode offersă'               with the formula numColours = 2 ^ bpp.ă' Regs *       - A variable used as the CPU registers, used by most routines.ă' pp256 *      - Holds the machine code for the 256 colour assembly pset.ă' sPut256 *    - Holds the machine code for the 256 colour assembly put.ă'****************************************************************************ăăDEFINT A-ZăăDECLARE FUNCTION DetectVESA ()ăDECLARE FUNCTION GetVideoMode ()ăDECLARE SUB LoadAsm ()ăDECLARE SUB Put256 (x, y, array(), startIndex)ăDECLARE SUB PutPixel (x, y, clr)ăDECLARE SUB PutPixel15 (x, y, r, g, b)ăDECLARE SUB PutPixel16 (x, y, r, g, b)ăDECLARE SUB SetActPage (page)ăDECLARE FUNCTION SetSVGAMode (mode)ăDECLARE SUB SetOldMode ()ăDECLARE SUB ViewPage (page)ăăCOMMON SHARED xRes, yRes, yOffset, curBank, winGran, oldMode, ppSeg, ppOfs, bppăă' CPU registers used for BIOS calls.  These are also defined in QB.BI.ăTYPE RegTypeă    AX AS INTEGERă    BX AS INTEGERă    CX AS INTEGERă    DX AS INTEGERă    BP AS INTEGERă    SI AS INTEGERă    DI AS INTEGERă    FLAGS AS INTEGERă    DS AS INTEGERă    ES AS INTEGERăEND TYPEă         ă' Type used by VESA function 00h, filled with info on the VESA.ăTYPE VGAInfoBlockă    VESASignature AS STRING * 4ă    VESAVersion AS INTEGERă    OEMStringPtr AS LONGă    Capabilities AS STRING * 4ă    VideoModePtr AS LONGă    TotalMemory AS INTEGERă    Reserved AS STRING * 236ăEND TYPEăă' Type used by VESA function 02h, filled with info on a screen mode.ăTYPE ModeInfoBlockă    ModeAttributes AS INTEGERă    WinAAttributes AS STRING * 1ă    WinBAttributes AS STRING * 1ă    WinGranularity AS INTEGERă    WinSize AS INTEGERă    WinASegment AS INTEGERă    WinBSegment AS INTEGERă    WinFuncPtr AS LONGă    BytesPerScanLine AS INTEGERă    XResolution AS INTEGERă    YResolution AS INTEGERă    XCharSize AS STRING * 1ă    YCharSize AS STRING * 1ă    NumberOfPlanes AS STRING * 1ă    BitsPerPixel AS STRING * 1ă    NumberOfBanks AS STRING * 1ă    MemoryModel AS STRING * 1ă    BankSize AS STRING * 1ă    NumberOfImagePages AS STRING * 1ă    Rsvd AS STRING * 1ă    RedMaskSize AS STRING * 1ă    RedFieldPosition AS STRING * 1ă    GreenMaskSize AS STRING * 1ă    GreenFieldPosition AS STRING * 1ă    BlueMaskSize AS STRING * 1ă    BlueFieldPosition AS STRING * 1ă    RsvdMaskSize AS STRING * 1ă    DirectColorModeInfo AS STRING * 1ă    Reserved AS STRING * 216ăEND TYPEăăDIM SHARED Regs AS RegTypeăDIM SHARED pp256 AS STRINGăDIM SHARED sPut256 AS STRINGăăLoadAsmăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-DEMO CODE STARTS HERE-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăDIM spr(201)                                    'Set up a sprite for useăSCREEN 13                                       'in 256 colour modes withăCLS                                             'the Put256 routine.ăCIRCLE (9, 9), 9, 27ăPSET (6, 6), 11: PSET (12, 6), 11: PSET (9, 9), 14ăLINE (6, 12)-(12, 12), 100ăGET (0, 0)-(19, 19), sprăă' To test the various screen modes simply change the value in the SetSVGAModeă' function to the mode of your choice.ăIF DetectVESA THEN                              'Check for VESAă  pagesAvailable = SetSVGAMode(&H101)           'Check for/set SVGA mode andă  IF pagesAvailable = 0 THEN SYSTEM             'get number of memory pages.ăELSEă  SYSTEM                                        'No VESA so shut downăEND IFăăFOR y = 0 TO yRes - 1                           'Fill the screen with pixelsă   FOR x = 0 TO xRes - 1ă      IF bpp = 8 THEN                           'Execute a different functionă        PutPixel x, y, x MOD 256                'depending on the mode type.ă      ELSEIF bpp = 15 THENă        PutPixel15 x, y, x \ 40 + y \ 30, ABS(x - (xRes \ 2)) \ 20 + ABS(y - (yRes - 1)) \ 30, ABS(x - (xRes - 1)) \ 40 + y \ 30ă      ELSEIF bpp = 16 THENă        PutPixel16 x, y, x \ 40 + y \ 30, ABS(x - (xRes \ 2)) \ 10 + ABS(y - (yRes - 1)) \ 15, ABS(x - (xRes - 1)) \ 40 + y \ 30ă      END IFă   NEXT xăNEXT yăăSLEEPăăIF bpp = 8 THEN                                 'In 256 colour modesă  FOR y = 0 TO yRes - 1 STEP 20                 'demonstrate the put routine.ă     FOR x = 0 TO xRes - 1 STEP 20ă       IF bpp = 8 THEN Put256 x, y, spr(), 0ă     NEXT xă  NEXT yă  SLEEPăEND IFăăSetOldMode                                      'Back to last modeăDEF SEG                                         'Reset default segmentăSYSTEM                                          'Shut downăă' Machine code for put pixel 256.ăDATA 73ă'      0    1    2    3    4    5    6    7    8    9ăDATA &H06,&H55,&H89,&HE5,&H8B,&H46,&H10,&H8B,&H5E,&H0C : '0ăDATA &HF7,&HE3,&H8B,&H5E,&H12,&H01,&HD8,&H72,&H34,&H89 : '1ăDATA &HC1,&H89,&HD0,&H8B,&H56,&H0A,&H39,&HD0,&H75,&H10 : '2ăDATA &H89,&HCF,&HB8,&H00,&HA0,&H8E,&HC0,&H8B,&H46,&H0E : '3ăDATA &HAA,&H5D,&H07,&HCA,&H0C,&H00,&HBF,&H00,&H00,&HBB : '4ăDATA &H00,&H00,&H8E,&HC3,&HAB,&H8B,&H5E,&H08,&HF7,&HE3 : '5ăDATA &H89,&HC2,&H31,&HDB,&HB8,&H05,&H4F,&HCD,&H10,&HEB : '6ăDATA &HD7,&H42,&HEB,&HC9                               : '7ăă'Machine code for put 256.ăDATA 215ă'      0    1    2    3    4    5    6    7    8    9ăDATA &H06,&H1E,&H55,&H50,&H50,&H50,&H50,&H89,&HE5,&H8B : ' 0ăDATA &H46,&H18,&H89,&H46,&H06,&H8B,&H46,&H20,&H89,&H46 : ' 1ăDATA &H04,&H8B,&H46,&H1E,&H89,&H46,&H02,&H8B,&H5E,&H1A : ' 2ăDATA &H31,&HD2,&HF7,&HF3,&H89,&H56,&H1E,&H8B,&H46,&H14 : ' 3ăDATA &H8E,&HD8,&H8B,&H76,&H12,&HB8,&H00,&HA0,&H8E,&HC0 : ' 4ăDATA &HFC,&HAD,&H89,&HC1,&HC1,&HE9,&H03,&H89,&H4E,&H00 : ' 5ăDATA &HAD,&H89,&HC3,&H8B,&H46,&H1E,&H8B,&H56,&H1A,&H39 : ' 6ăDATA &HD0,&H73,&H3B,&H8B,&H46,&H02,&H8B,&H56,&H1C,&HF7 : ' 7ăDATA &HE2,&H89,&HC7,&H8B,&H46,&H20,&H01,&HC7,&H72,&H49 : ' 8ăDATA &H8B,&H46,&H06,&H39,&HD0,&H75,&H47,&H8B,&H46,&H04 : ' 9ăDATA &H8B,&H56,&H1C,&H39,&HD0,&H73,&H08,&HAC,&H47,&H3C : '10ăDATA &H00,&H74,&H02,&H4F,&HAA,&H8B,&H46,&H04,&H40,&H89 : '11ăDATA &H46,&H04,&H8B,&H56,&H06,&H83,&HFF,&H00,&H74,&H24 : '12ăDATA &HE2,&HDD,&H4B,&H83,&HFB,&H00,&H74,&H38,&H8B,&H4E : '13ăDATA &H00,&H8B,&H46,&H20,&H89,&H46,&H04,&H8B,&H46,&H02 : '14ăDATA &H40,&H89,&H46,&H02,&H8B,&H46,&H1E,&H40,&H89,&H46 : '15ăDATA &H1E,&HEB,&H9C,&H42,&HEB,&HB4,&H42,&H49,&H89,&H56 : '16ăDATA &H06,&H8B,&H46,&H16,&H53,&HF7,&HE2,&H89,&HC2,&H31 : '17ăDATA &HDB,&HB8,&H05,&H4F,&HCD,&H10,&H5B,&H83,&HF9,&H00 : '18ăDATA &H74,&HC4,&HEB,&H9F,&HB8,&H00,&H00,&H8E,&HC0,&HBF : '19ăDATA &H00,&H00,&H8B,&H46,&H06,&HAB,&H58,&H58,&H58,&H58 : '20ăDATA &H5D,&H1F,&H07,&HCA,&H10,&H00                     : '21ăă' Detect to see if a VESA compatible graphics card is present.ăFUNCTION DetectVESAăăDIM VGAInfo AS VGAInfoBlockăăRegs.AX = &H4F00ăRegs.ES = VARSEG(VGAInfo)ăRegs.DI = VARPTR(VGAInfo)ăCALL INTERRUPTX(&H10, Regs, Regs)ăăIF Regs.AX = &H4F THENă  DetectVESA = 1ă  PRINT VGAInfo.VESASignature; RTRIM$(STR$(VGAInfo.VESAVersion \ 256)); "."; LTRIM$(STR$(VGAInfo.VESAVersion AND 255))ăELSEă  DetectVESA = 0ă  PRINT "Error - cannot detect VESA."ăEND IFăăEND FUNCTIONăă' Returns the current video mode.ăFUNCTION GetVideoModeăăRegs.AX = &H4F03ăCALL INTERRUPT(&H10, Regs, Regs)ăGetVideoMode = Regs.BXăăEND FUNCTIONăăSUB LoadAsmăăRESTOREăăDEF SEG = VARSEG(pp256)ăpp256 = ""ăREAD codeLenăFOR i = 0 TO codeLenă   READ code$ă   chrNo = VAL(code$)ă   pp256 = pp256 + CHR$(chrNo)ăNEXT iăăDEF SEG = VARSEG(sPut256)ăsPut256 = ""ăREAD codeLenăFOR i = 0 TO codeLenă   READ code$ă   chrNo = VAL(code$)ă   sPut256 = sPut256 + CHR$(chrNo)ăNEXT iăăDEF SEGăăEND SUBăăSUB Put256 (x, y, array(), startIndex)ăăDEF SEG = VARSEG(sPut256)ăyVal = y + yOffsetăCALL ABSOLUTE(BYVAL x, BYVAL yVal, BYVAL xRes, BYVAL yRes, BYVAL curBank, BYVAL winGran, BYVAL VARSEG(array(startIndex)), BYVAL VARPTR(array(startIndex)), SADD(sPut256))ăDEF SEG = ppSegăăEND SUBăă' Sets a pixel.ăSUB PutPixel (x, y, clr)ăăyVal = y + yOffsetăCALL ABSOLUTE(BYVAL x, BYVAL yVal, BYVAL clr, BYVAL xRes, BYVAL curBank, BYVAL winGran, ppOfs)ăăEND SUBăăSUB PutPixel15 (x, y, r, g, b)ăăr = r AND 31: g = g AND 31: b = b AND 31ăăyA& = (y + yOffset) * 2ăoffset& = yA& * xRes + (x * 2)ăbank = offset& \ &H10000ăoffset& = offset& - &H10000 * bankăIF bank <> curBank THENă  curBank = bankă  Regs.AX = &H4F05ă  Regs.BX = 0ă  Regs.DX = winGran * curBankă  CALL INTERRUPT(&H10, Regs, Regs)ăEND IFăhiClr = r * 4 + g \ 8: loClr = (g AND 7) * 32 + băPOKE offset&, loClr: POKE offset& + 1, hiClrăăEND SUBăăSUB PutPixel16 (x, y, r, g, b)ăăr = r AND 31: g = g AND 63: b = b AND 31ăăyA& = (y + yOffset) * 2ăoffset& = yA& * xRes + (x * 2)ăbank = offset& \ &H10000ăoffset& = offset& - &H10000 * bankăIF bank <> curBank THENă  curBank = bankă  Regs.AX = &H4F05ă  Regs.BX = 0ă  Regs.DX = winGran * curBankă  CALL INTERRUPT(&H10, Regs, Regs)ăEND IFăhiClr = r * 8 + g \ 8: loClr = (g AND 7) * 32 + băPOKE offset&, loClr: POKE offset& + 1, hiClrăăEND SUBăă' Just changes the pointer to the video memory but it's easier to use thisă' way.ăSUB SetActPage (page)ăăyOffset = yRes * pageăăEND SUBăă' Sets the video mode that was being used before the SVGA mode.  The SCREENă' command doesn't always work so this is used instead.ăSUB SetOldModeăăIF oldMode < &H100 THEN                 'SVGA modes cannot be reset by thisă  Regs.AX = oldMode                     'routine.ă  CALL INTERRUPT(&H10, Regs, Regs)ăELSE                                    'If it was SVGA, set text.ă  Regs.AX = &H3ă  CALL INTERRUPT(&H10, Regs, Regs)ăEND IFăăEND SUBăă' Sets an SVGA mode.ăFUNCTION SetSVGAMode (mode)ăăoldMode = GetVideoMode                          'Get the current mode.ăăDIM ModeInfo AS ModeInfoBlock                   'Get info on the desiredăRegs.AX = &H4F01                                'SVGA mode.ăRegs.CX = modeăRegs.ES = VARSEG(ModeInfo)ăRegs.DI = VARPTR(ModeInfo)ăCALL INTERRUPTX(&H10, Regs, Regs)ăăIF (ModeInfo.ModeAttributes AND 1) = 0 THEN     'Bit 1 = 0 then mode notă  PRINT "Error - screen mode not available."    'available.ă  SetSVGAMode = 0ă  EXIT FUNCTIONăEND IFăwinGran = 64 \ ModeInfo.WinGranularity          'Window granularity adjusted.ăxRes = ModeInfo.XResolution                     'Get screen resolution.ăyRes = ModeInfo.YResolutionăIF ModeInfo.WinSize < 64 THENă  PRINT "Error - this program requires at least a 64k memory window."ă  SetSVGAMode = 0                               'Window must be > 64k foră  EXIT FUNCTION                                 'these routines.ăEND IFăbpp = ASC(ModeInfo.BitsPerPixel)ăăIF bpp = 8 THENă  IF ASC(ModeInfo.MemoryModel) <> 4 THENă    PRINT "Error - screen mode not available."ă    SetSVGAMode = 0ă    EXIT FUNCTIONă  END IFă ă  ppSeg = VARSEG(pp256): ppOfs = SADD(pp256)ă ă  lB1 = ModeInfo.WinASegment AND 255: hB1 = ModeInfo.WinASegment \ 256ă  lB2 = VARPTR(curBank) AND 255: hB2 = VARPTR(curBank) \ 256ă  lB3 = VARSEG(curBank) AND 255: hB3 = VARSEG(curBank) \ 256ă ă  tempOfs = SADD(sPut256)ă  DEF SEG = VARSEG(sPut256)ă  POKE 46 + tempOfs, lB1: POKE 47 + tempOfs, hB1ă  POKE 200 + tempOfs, lB2: POKE 201 + tempOfs, hB2ă  POKE 195 + tempOfs, lB3: POKE 196 + tempOfs, hB3ă ă  DEF SEG = ppSegă  POKE 33 + ppOfs, lB1: POKE 34 + ppOfs, hB1ă  POKE 47 + ppOfs, lB2: POKE 48 + ppOfs, hB2ă  POKE 50 + ppOfs, lB3: POKE 51 + ppOfs, hB3ăELSEIF bpp = 15 THENă  IF ASC(ModeInfo.MemoryModel) <> 6 THENă    PRINT "Error - screen mode not available."ă    SetSVGAMode = 0ă    EXIT FUNCTIONă  END IFăă  ppSeg = ModeInfo.WinASegmentă  DEF SEG = ppSegăELSEIF bpp = 16 THENă  IF ASC(ModeInfo.MemoryModel) <> 6 THENă    PRINT "Error - screen mode not available."ă    SetSVGAMode = 0ă    EXIT FUNCTIONă  END IFăă  ppSeg = ModeInfo.WinASegmentă  DEF SEG = ppSegăELSEă  PRINT "Error - screen mode not available."ă  SetSVGAMode = 0ă  EXIT FUNCTIONăEND IFăăRegs.AX = &H4F02                                'Set the mode.ăRegs.BX = modeăCALL INTERRUPT(&H10, Regs, Regs)ăăIF Regs.AX <> &H4F THEN                         'Make sure it worked.ă  PRINT "Error - cannot initialize screen mode."ă  SetSVGAMode = 0ă  EXIT FUNCTIONăEND IFăăcurBank = 0                                     'Initialize bank and page.ăyOffset = 0ăăSetSVGAMode = (ASC(ModeInfo.NumberOfImagePages) + 1)ăăEND FUNCTIONăă' Set the visible video memory page.ăSUB ViewPage (page)ăăfirstLine = page * yResăăRegs.AX = &H4F07ăRegs.BX = 0ăRegs.CX = 0ăRegs.DX = firstLineăCALL INTERRUPT(&H10, Regs, Regs)ăăEND SUBăAaron Severn                   WAVE VARIOUS FLAGS ON SCREEN   rlsevern@idirect.com           10-02-99 (21:10)       QB, PDS                146  9630     FLAGS.BAS   ' Waves various flags on the screen. Flags are 16 colour bitmaps.ă' Uses 640x480x256 resolution.ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"FLAGS.ZIP",4^6:Z&=6883:?STRING$(50,177);ăU"%up()%9%%%I-%(n/&HeR?rEH%.%%UL%%%,%%%%zx%fSgr4ufgV+3;U1Uj\=+&#0ăU"],=$0Y1<Eh1hKHgV[mmyEU7K]b+%hG>j_sHT.Uxt<fa#v_c<jCVpi[q#I31:kZaăU"[+rd:$LwALi-RKcYKJG#RxAI?\6P^3'SCn+-D9l,+KY'#Yo%7\c6%q9/(Id+%avăU"%^P1S>]YfYsrMGEr>;N1r-rUgBsjMi2S,HlqhMq$RWi5c'r>m\laStlWgDE\5-HăU"f?Zuca#$Ck\Gnd#Z9M]Jzd0EtrDn(\ofdZ$UwdO^0B=u#$up0r(\\%up()%9%%%ăU"I-%7rS&H2y*f/o'.%%UL%%%+%%%%zp%SgrucfSV+'SU5+)/6KZ_b*I$YG\o\CT$ăU"XsGuCB+frOc()ID3gXh^AUp=:nhlg8Q5F9J?29?mw=r-:)Yu^n$PD=\D8rveO0$ăU"-Mtdtvgl3fxpIwlvID8g3lW\kId]#id5(KYRLbcQ/DmHW6DlKoVQD+jPV\l(RITăU"wMj#ZXTaUU];ki,m-MQ6Y#7YWQ1j1UE'OCc7UW==4?E31m$=gp[M]kn1CeQfGRhăU"7pM#Cg#A6->20h0\aa)8SX++emYgU>gA_lBA0?OMC1:K?FSp78I[#s;*m831W:măU"Fg/>Kf=X3^mrjgeA_6H].F8yI+-=[=.'G(X-LY-<K*1e'182N55PaUqYwJr[9I6ăU"N%Li>NO2xW5i#.0v[C]$FH13225,rF5_.'2hu^ApGASwJ-a^,UIml+)$b#4w?A'ăU"-H)k+/\V'OGKGcUu_KGGS9m0,?=A.*i-bbYijP\0*jZ;UR)-7iJQW2tL8shq[^1ăU"w<qVPvCD?bW[.]C.7-GG(<7E'iUE$FoHf$%y>_5P[':y?-Mxma(\.CUsMAo9v>eăU"'h%+Wc5iecXi>^A()J4.>WH(+p>f23Ncn:7y*F1<1M<.;\M*/?3hML9+H[1f&rlăU"eg+V1DS<UWIt]U^K]nPNgJC[+-]l[1BZ?[1pz-9))y$H-#hlmQ.VYSJ[M(H_dNOăU"=9Db&nk'tl1u%Maf#'SdK-nQ\cx&e6UUaWti=^%.Jebk&VCLAuWg.F6]-%?^g7găU"v2^)=iQ1H'8&up%()9%%%%-%31r&H,m[My'x%%%&UL%%%.%%%%ofuf%sSgr4ufhăU"V(7QU54j\[Z9\RmA?oW;XJ'xHV-&oON?&%6/#zqgrm-1>g=D>xg.K5Y\^p5=kp^ăU"m'tXu2]MlAveta^prQlOr,7DN>gGCY0e*t^I/vCu)cXsV_*EMsISc<sp-W+z'.FăU"8S5+9:N7k[E1)_HXF2iu*i$19#S7>q3B,0T*rGw37tp?u0xW[0q$#M8F1Lg3a/năU"T<0)5Sh8uvxW'E/f]833v>mlL,IE*C^[C;S3zIJ\(CO_ao2Tv37Fu8EJju4]h7:ăU"j&,\Oeer%c,$ie'HF^(dGTP]:cWu/ba<Fk%imS/*BF6^IZI>Vou\9u0xES5(gOaăU"&%up()%9%%%#-%wpA&Hyg0;kU%.%%UL%%%.%%%%ny.fq(S[grufEFp6Q[V1+IV?ăU"Vw^m>UYQa&H;E5O'1,E/xip\(*zKBw3xTMJ.iuhfYF7BU4VA0Dc5dZ,(Rj<Q]vSăU"$x.p=MJXncM#qcDcmCl&pZ6X-V#q.Dlmcz5lo,kS:In#Qd1+R:&/U=1U+R:/%U=ăU"1+5R:/U#=1+R*:/U=d1+R:t/uTq%'up(%)9%%#%-%6)p&HTT/-%T#%%%U%L%%/%ăU"%%%k%wfsh%jSgrXufFp(6QV1O+I?VEw^R/.3a*U4(3YB$Qu7:)P4:y+nt$qO:gLăU"8_i-OWrjCV#TAJt_GLHc6_>1$o64uNSF6hJM4w?Xw-OJPDQ.OkLlL?XOlOJz(rkăU"IEkM9bK=',U=1U+R:/%U=1+5R:/U#=1+R*:/U=d1+R:&/U=1U+Rj>'\0up%()9%ăU"%%%-%3^m&H.atoB&t&%%&UL%%%/%%%%hfsf%ifSgRrufi1VESEU5UBJ>xp^;oB^ăU"K$#;^h9PzU0zN2Y4y?M2Cy+)*5k%k6+CK5*4,VgNumjM,OtZwjvyb;sWrHF]Db.ăU"drMwuH/w>3QN>o-vV9n>bVNY3&V4X5._H[$#tkT;,86C2e<xW^DF[b5zbMb#2k<ăU"[4hD/1$?/1?S/1?/7aY<R3s.xO;lP%-o==54D+*z0G?wViUl2]XGqtle6cU*gGEăU"[Qs4$kd8l+'qC<)v-Y*Y'ep6vCWbr01cFVzs59k*NH'-cmfa[:g4vdAHcI8MQ:MăU"aN-C(#Uw0<0#i[;nRuUnkZMgA<9r9o_Y_CT1ZZCtkyL24oT'44c\U&6aoL=TJ2DăU"G=^ajsxP\k56RF$J4J[jR0d*AjMT5[E_/l$.<sYB9<DHBd[.IjJ1pa(AaDT$O82ăU"[PvP(pLUW%YRVU;1x(,1kmw>L+%'Jr.[Vq1oe#4U1709.V+<WMorzKc?gQ7pfQ*ăU"4BpeQQThK[[nH1]?VWah':G;R1B]Th[cZE]C:V_61R^+bFS4=A,nUE<d5E\Np3KăU"[Nu%p()9%%%%-I%3\'(HwB:*IO&%(%UL%%%0%%%%gfm%frfx%SgruHVS$='<U5)ăU"#u+mv2T$*IK$mn*K]1x,0^w;yeu=sG\<9oCc#ODIZECQ$e7>Cj6Y.p4lB$fpu#MăU"^&<-vKc^oJRfjSVFvs4^lHIxo.vsYA2T?LrUDZS&5xcd3AT;muTxQLmVE>:4C0[ăU"Aw#mGU<\xAbCNUUf>A$KOu&zFX=m>4=mU;frVsNfsZcA;n0I#sg]XIXzd;_1FfUăU"f2>w_PRhy&:(hR115RW_E[hhv&\$Fe?eUf>iJ$.R]Rq>en,3KEH*LU^=;+3?mDhăU"g^RGXE?d\Rfi_:2-.;R1?+3%y3+0\(YmN\)[]A&Yv^=U93F/:y:NEaEdk^,/el[ăU"j=4z.Q>QZ;(WyEk]O#^=DNF\#4#$aA?[UGEP=Y)jXhUt_;Wrhj2BW6(pC#a,,)OăU"#3cHGy[H1*1S1=*187x+Q>L#o63_On(?\_2F?fmFXp^AZF=Ak<y#DlRYS/g8UUVăU"MBmUC5:Ko,\L?;(hWZjP_#2\8fl7&%up()%9%%%d-%y&KcIIR3;-h4.%%oP%%%-ăU"%%%%kq%flSgRfxF)_*BG2MaMFSBxh3v&v2[ra(7$?CBZVEN,RPtTa^f\/M6TU+_ăU"'0xJtW5Niv5ucL/4nm)WH]agedcsPcCZcth[Yit>uehXB9VotBX1b,'ma3$uve1ăU"W'k<;[(B6q:C'kj%+Cy,OgGt&=H+[L\?gKrITZ&Pr-D<oiV,ynPIVGaZ7&-agF$ăU"K/hcr;XBth]]*UKCpfjAM7Iab>NGu:H*shtqlo^^7I3tCxg8'>o%/quUEIEymSNăU".G$o,L)(NQ-=%;auW89';6t28O$uf][eg43RK<Z8j)P_j(TFugMOhKN''T\)GmlăU"d5Q.AA'iI/&e0B.Y]hw'up^:ubcE9v,%e)#uXCq:+%+i9i4CK3A?[-v*E:<5=5=ăU"sdkSe'Xt5PxBxGv'(kO,jmti,PTk]_iX#G4E<$eRrp\f(6xd94P^m8Qx3s35GOtăU":YGf,QH)e]'<8WIi'bul7m)xi^qNB;'^Nt,A/04mAsK1QbjBu<%o+0d2?T6po<1ăU"(]a/$jn.ahwjkO,UDImHe&/VeA8%&+Mi/F:8>fM.=6Ii[(%.nXomh1I%B^/.g1]ăU"4eab7my*J[;7Cu*2szG(4BWf;FtR)^acf.jteGH&OdgDeS]XICIvu;o;_(aOe<năU"$lK-=bCoFKRp?Y\J;Wf>O%-Syt)m)MAbO\b+;e_fKH0wk9G;-)35Yq.j#X9)9BJăU":/f5^S3;2'o:'S*P63HFEG\#G*5:K+[N$;WHZ$Awn7OMA&Mon85+9W,9^JEA<,(ăU"\4(Wl''*SYLu)ryA6#%&VQK.tJ$0]27F#D*B/u>_(*OB*bPmYCP<gb+uYRlP9ATăU"kA<q)+1aFiHMPU%R)p=j[bJ7b3+*;J36AZieiVzb%kY7Gcr5(BzwL<ZpO[9<TOZăU"s\7b3-rQ-%?^w&0R]#J88f'qO2O7WTPCc7T*EX-%i3f7=A7ZHg3,$F\pq:DiG'năU"8foE#215KEj_ejYv:q_kge?PVN73tcjnayR*9feG6r/^uB#u+TUT2_qm?bpj$p%ăU"cE5\mx7:7bP#.'0aF;/LWR&7L:\O-_;:t:7%Drqw;ZMFf3c(R%c+X''9WDq#V/dăU"e/0+w.Am1aaTT+'J$z4%egrZDL4L&akS*Z2sh^PBJSb.RN4PTWpAlQq\W<js;5zăU"9><6Nr#6cvJ4tgv6T3W,N]kTGvx:Z>Vfb6K(dKT2Ct(ljiZREc.K0ND9>Z:V00,ăU"FSD2NZ%98KddI%U,y2Mj'1fSA)n$SBcg^A1M+hl1EYPT*_C'edz)PQgy:DiFoACăU"S-kW+>UlI%-St(N&nc$c>+./MQ8x$/C2bAzP0uS*,iK_Bih=&Dj/J#2>rb*+Q&yăU"1'deG-n/6r)7H?v/S6]<Do'p0Bhh&Dl44OY$&s<2TP.lr[U89fM16EWBBS80=TlăU"\ZjMn]#_$0GtwtM]HCD0u*OC4p4S0VOQUdr\CYl5/d1cd6#Xt-,t.y0%rArDf#băU"gA5vb5JrZlH:-fAG_C:9>Su5TVmH*B;]ah#YJbC7h#kQw?S-4hrq6LF=xtF0b/PăU"3YGv?Bch3iU<q9cBSJUG<c:j5I<*E)0_u3+cUc37$4vS94kxF;$uku#'F2ZpJ%aăU"nXH6L,pEo9atfcjb)4;0h8:/\cP+<#rbDK_6J;xBy2;;>\hj&hCW*P\sTvbM>&>ăU"W>r*YMYB=&T^Y75PcoSLTni?v6=eZxV$oThN&S_Rb&>\]#_\nnu2eqVH9=dLOdpăU"(&XU,.*9zYkWFc$kzqhuI/<'X;2,IW_?dL-&k\uzXi:t;U*]9i#scy#-v.AH.N+ăU"PtnI4i:MiEus39R3dJrhREpXkxFM,=N>OUcEuXbYOb1KKQf_>'ZV'i(uhK\.<jTăU"Ugm3R[-#%O8hXCC;SwQ_)O%W+Eb]5,)FA.?11Nw2pM;60E^_.;3W%EJ&J*:n1emăU"Ufp;M.0Nc6[&\J[_\3JD8GmUZj>>2&D*+^7xGB<CPIZwWmJT5NCpK%h7nisL%fNăU"wQT'7F=t^L*)V<G/931YhK#4t8&d_M<Zd<*bM8hF/EtkFB:?mWq8o=/#AZ$-o\)ăU"YI>/5+G^ia=kMxBJT?SV?,b9,D2w%L1rPC-AQx**;UpB.a;7.k0B+quF+*2cmDyăU"1)bP>d?Li)Dw=uYntp8-J2[zn$T*QHxqZC+G2oeAR320Au/ff$8Xp>r_K4LG>]AăU"<7Kk/ZgiS&ftZWE]BA<.wMf)7VpLMk'j$1&jnzw]TKJ.muL<j]0Ny?XKoCK8S3[ăU"]dqsQR(*65c,Xg/Olnu%9]3JDBdI-.YKQMfk[)z]bNXNlMTAMc?IwXi]..Od=T_ăU"3Bwm2>%:h>.oK&wU7n.SB](H+$Hs,h2P).EeqhpEU^ZNM4GHHaX;'?Q[r8OAPWbăU"L);GZ(eHHE(j*KbRo'gR.U$.n-7b0'tlehV2]Wlus,5,j$'dwMMW#/Z[mK]'g#)ăU"94LB,PosvvZhH6#4&dU=\?$i<]fL4wleS%naA),U_;:MON#cm3xaSEuKQb#\40,ăU"C8GhLr1Sn?GT.Ap*LkDBB]lIuMF<a]OAkhD1-YNs?lkknLuWpR/uOr+ZfbusHh:ăU"5t%+j5to'FY$O#R(-CLwzGiq-yieQ]m>mm+kq)\T(*B6oyb93pmPHonu*HCFV$HăU"hKTMvN($UJ/fb>FJwsL2-c9(U+n^26dtFpSxf-)+>NrbXgSxN\Cf.:v]pqPV#6NăU"9V#XfStMn,HU8hltTYb?JkZu=l;B#'HO[oyC^hAMMzIqC)\zQS2]rrxT'.F-F/hăU"nUDC9v8^r#y?AT^xw'Bz*r+Qisoq91)RR+Ld'n3bvZRbAKMD/]R;GGqulAgDXWrăU"Haq]o:zght\?q=DL?\if9rNQ\ha7UCd)+3hC&<Jhw5IY&D,H9a[n(u]WD1E)?IPăU"i3EFC]Gb1;MZ]F(Ojg]c+mQeGGI[R5]^Yubw+[vubUbx\KLZORJC>J;P.TJz)*4ăU"(-9EK$eGZm#c#E,eXQbR'Nq)I$P(Dyu%ZMbt=?H1m%%0hcZ$)2s;*JdP.$44wi*ăU"5lr-y6fQN[p:q2IN;SDp#3Myy,gnyM4MmF]+U6DPNtJsOiP.\%(l?o'gC^Mh7f_ăU"n6,EPv^'VOl2F+/s2J]Mu2psU6h$LCNED'FN<_2-T;Fvl]9'[Y5:e+e9NDp<'k)ăU"jV/E+$j?tc1jI,7&Ubk;4Ws:jVg0\r_0EaT8y'[\DJO>2H1s0akS*SR2^BCW_9^ăU"o/WKRC:m^kQW<L1\Q88VQ,v9W-2B5b=#'jvX%.BquBRy7+0JjQKFdn;MD+GO9#DăU"NcemOcgApY-9CaGsyvgN>w]#(['Q0Y_7E<$$Ff]e>j.>KU,Zs\/fZTe=%8A>q6+ăU"9JQcuBFqGlDy/;cOHg[rsbsV*rfF#/TXBTIeFQANHUX#Fs+6b-dl(_%9GgRV//eăU"$JU_Z01AEU7-=M.BPmg5/fI,yFE4[tJ#p7)%v=XMr]6K]EXX9&8Od<>7o*8GMPPăU"3l:Ad?8IG,Wi8H_laB.b9];$pZB9vRENur^:n]vs$AJwV/&[GJmF:h?FL#vSmYJăU"+>]RL],h$_u/k\cuD6gV8Ke++61o[ujCkb#fP/jyX%EzChiNH>Z#RI3XHr1fwChăU")IYJc<NlY[hYkH&LW1[GQ>i1()6.ur:Qc.rFpdXWm.Ig^EP1:mg<Y\5ht%eLXLZăU">ghjvV%Cn^S.$F5YB$Evu-S^[=wgwGf7?WHc^V?)g^L7=RR/-)A%BZt,k]itLn:ăU"*x)z-oRCq\fGptlr88quxg?n1,KtKGC'pu)Sk8,n>#.lvlOcQY_mVANhD6YTWe)ăU"t,WV[9s+<+K0V)2j,QlXh9pAjye2Cpt(C-T8L6HiS#cDVt]kDh00:nsG2iEaPD:ăU":'jRRo5Bm1a\$q>P%tP\7Mh]o9Gm[e_+\=qiT*NIsKX^$rr:nEYI?o=VNkdAEAuăU"c'aXuU50<pn_7K:hwi:Ox:aSSY4WQ:\_c-/5H;7i'nE)7arvI;Nj^%nJ.7TX2fOăU"1?28xI>:Tj=j-v$4hjTUoBtqf*0:Xvh0Vp<OZ2YGf&X06V7m*8[c;G_SSRlJs)&ăU"%,f)Jd;r$1kuMucIv3rtvyTZ^4Gqv1DvR0l&%nKXc:oRnlnr]qrSFc^BoV/,2foăU"hMKO(Sk/Nt1$T#[L/1rJuE6$:>QZ[ujAMuNk8)iM]ct(n(w+.6#Y;EBEk;>+N^<ăU"lrtJ72q?pbBD]a0g#?A?NpcQPvW6hime$Gpvm&yn]B6R#m(aLo_p6P?>[.(huooăU"J2lFn&NH38]X&YEC5vl2OjhW?wLU2*9WT;Q??=A]x.y*MAy5RiPv5\p[0lU]_ibăU"%0M9u_x'Nq.W?S<^Zfc16KnR23IL&(P/ajy98#Rpo'dt)DcPY&Nkp%]1xvNq&S)ăU"LjMw3kgc&>KO+yB*Cq>?*v6&Q=7mbJ4ch0AVo8UN)ZfKr.73_-E2nWa]+MEf>f^ăU"Ff,,PA([<M+br+m>+'Z:I&>oUn*^sd<Js#+NbjX%HbPh#brn*-FonohJME*gpJmăU"JB/TW+C?'Iu42ayE_b:es?WpwYV&VHv-r_uK=>^gN</[0:i0Cx>;WB$/7GjY#DUăU"l0W;1Fr*tS*cm0gF#-m7$uAM';f.Ys-ZvLcTZd=UrlsfWX,wGzCtqZ>_qbPM3LpăU"lkTfU>\Ct81bW6.\09mw)VXDa<DH+L<$DFzMk,<jTFFTvMiH>;1;+$tKTG9z0uOăU"6oXQRjn)BY\\cmxK77YYxggnETKOPr<,aCx*ViB&<mXz.3bmC/*rbb3E-T2TrcQăU"\ca'Ru&J+*Vs#r;':=oBDO\+4\E9b/r&t$rmgUK3MpD:t6f2[srSXGrn&?u[4S&ăU"H5AL7Y]WNl?HNCqfOnJ=:;vKdK4]pN,gC<sNC_u<Y,ysn;MLKIHg:.GpmN^*s*<ăU"9D3?b7tXf-Si.CP]voID0uG6$pUJB$oQT8Jz^ME60X]c^:<?P&i>=V.xk$5+8iGăU"/<Q[qjaA(GGUR-A4z3K_I5DVp7BmbJ-#D3ht%OFLkVJYwqJ5COJ41;vpu>Sm5g+ăU"MWG7[G,0$Q)QZq3l\HLtjTpQgV\uTa3]#dQMa=zeik#-0:SJIefcZM=pIBrK_3păU"oFSl<[MRqY.4>&^3:w=c8)n_>%uxu%p&'9%%9%%#%-%(Dn&HesRrEH#%%%U%L%%ăU",%%%%%%%%%%%%E%%%%%%%%%zxf%Sgru%up&'%9%9%%%%-%27r&HW2yf/%o'%%&UăU"L%%%+%%%%%%%%%%%E%7%%m%%%%zp%Sgru%up&'%9%9%%%%-%31r&H,m[My'x%%%ăU"&UL%%%.%%%%%%%%%%%E%.%%1(%%%of%ufsS%gruu%p&'9%%9%%%%-%w)p&HyGg;ăU"kU#%%%U%L%%.%%%%%%%%%%%%E%%(%W)%%%nyf(q(Sg%ruup%&'9%%9%%%I-%6p\ăU"&HT/4-%T%.%%UL%%%/%%%%%%%%%%%%E%%%%Z*%%%kwfs%hjSg%ruup%&'9%%9%%ăU"%R-%^m&&Hat/oBt&.%%UL%%%/%%%%%%%%%%%%E%%%'[*%%%hfsf%ifSg%ruup%&ăU"'9%%9%%%#-%3\/'HwB4:IO&.%%UL%%%0%%%%%%%%%%%%E%%%'(,%%%gfmf%rfxSăU"%gruu%p&'9%%9%%#%-%yH&cIIPR;-h#4%%o%P%%-%%%%%%%%%&%%E%%(%'.%%%kăU"qf%lSgf%xup*%+%%%%%-%-+%/&%%%<>%%%%%ăEND SUBăCLOSE:IF S=173AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăMichael Galos                  3D ROTATING WIREFRAME FACE     galvin@powerup.com.au          10-24-99 (09:33)       QB, QBasic, PDS        138  5143     FACE.BAS    'By Michael Galosăă'This is a program with a 3D face which I made without a rotational matrixă'I used simple sin and cosine math without a z dimension.ă'It took me a little while to make this and I'm still adding more to it.ă'Eventually I hope to have a full man.ă'Increase the 's' value to go sloweră'Fiddle with the r1 and r2 values to change the perspective of the faceă'Change them in multiples of each other eg, 60 and 5, 120 and 10....ă'I should have used a sub for the erase part but I'm too lazyăăSCREEN 13ăăpi = 3.141592654# / 180ăa = 160: b = 100           'The a and b values are the centre of the screenăc = 31                     'This is the colour of the face.ăs = 2000                   's is the speedăr1 = 60: r2 = 5            'these are the horizontal and vertical dimensionsăăstart:                     'just something to loop back to...ăăFOR i = 1 TO 360 STEP 1                   'Increase the step to increase the speedăăx1 = a + r1 * SIN(pi * (i - 3))           'From this line and down are theăy1 = (b - 5) + r2 * COS(pi * (i - 3))     'mathematical formulas for eachăx2 = a + (r1 - 15) * SIN(pi * (i - 4))    'of the points of the face.ăy2 = (b - 20) + r2 * COS(pi * (i - 4))ăx3 = a + r1 * SIN(pi * (i + 3))ăy3 = (b - 5) + r2 * COS(pi * (i + 3))ăx4 = a + (r1 - 15) * SIN(pi * (i + 4))ăy4 = (b - 20) + r2 * COS(pi * (i + 4))ăx5 = a + (r1 - 16) * SIN(pi * (i - 20))ăy5 = (b - 25) + r2 * COS(pi * (i - 20))ăx6 = a + (r1 - 16) * SIN(pi * (i + 20))ăy6 = (b - 25) + r2 * COS(pi * (i + 20))ăx7 = a + (r1 - 14) * SIN(pi * (i - 30))ăy7 = (b - 23) + r2 * COS(pi * (i - 30))ăx8 = a + (r1 - 14) * SIN(pi * (i + 30))ăy8 = (b - 23) + r2 * COS(pi * (i + 30))ăx9 = a + (r1 - 18) * SIN(pi * (i - 20))ăy9 = (b - 21) + r2 * COS(pi * (i - 20))ăx10 = a + (r1 - 18) * SIN(pi * (i - 27))ăy10 = (b - 20) + r2 * COS(pi * (i - 27))ăx11 = a + (r1 - 18) * SIN(pi * (i - 14))ăy11 = (b - 20) + r2 * COS(pi * (i - 14))ăx12 = a + (r1 - 18) * SIN(pi * (i - 20))ăy12 = (b - 18) + r2 * COS(pi * (i - 20))ăx13 = a + (r1 - 18) * SIN(pi * (i + 20))ăy13 = (b - 21) + r2 * COS(pi * (i + 20))ăx14 = a + (r1 - 18) * SIN(pi * (i + 27))ăy14 = (b - 20) + r2 * COS(pi * (i + 27))ăx15 = a + (r1 - 18) * SIN(pi * (i + 14))ăy15 = (b - 20) + r2 * COS(pi * (i + 14))ăx16 = a + (r1 - 18) * SIN(pi * (i + 20))ăy16 = (b - 18) + r2 * COS(pi * (i + 20))ăx17 = a + (r1 - 13) * SIN(pi * (i - 8))ăy17 = (b - 3) + r2 * COS(pi * (i - 7))ăx18 = a + (r1 - 13) * SIN(pi * (i + 7))ăy18 = (b - 3) + r2 * COS(pi * (i + 7))ăx19 = a + (r1 - 13) * SIN(pi * (i - 5))ăy19 = (b + 5) + r2 * COS(pi * (i - 5))ăx20 = a + (r1 - 13) * SIN(pi * (i - 20))ăy20 = (b + 5) + r2 * COS(pi * (i - 20))ăx21 = a + (r1 - 13) * SIN(pi * (i - 5))ăy21 = (b + 8) + r2 * COS(pi * (i - 5))ăx22 = a + (r1 - 13) * SIN(pi * (i + 5))ăy22 = (b + 5) + r2 * COS(pi * (i + 5))ăx23 = a + (r1 - 13) * SIN(pi * (i + 20))ăy23 = (b + 5) + r2 * COS(pi * (i + 20))ăx24 = a + (r1 - 13) * SIN(pi * (i + 5))ăy24 = (b + 8) + r2 * COS(pi * (i + 5))ăx25 = a + (r1 - 13) * SIN(pi * (i + 8))ăy25 = (b + 15) + r2 * COS(pi * (i + 8))ăx26 = a + (r1 - 13) * SIN(pi * (i - 8))ăy26 = (b + 15) + r2 * COS(pi * (i - 8))ăăLINE (x1, y1)-(x2, y2), c          'This line and down draws the linesăLINE (x1, y1)-(x3, y3), c          'for the faceăLINE (x3, y3)-(x4, y4), căLINE (x4, y4)-(x6, y6), căLINE (x2, y2)-(x5, y5), căLINE (x7, y7)-(x5, y5), căLINE (x8, y8)-(x6, y6), căLINE (x9, y9)-(x10, y10), căLINE (x9, y9)-(x11, y11), căLINE (x10, y10)-(x12, y12), căLINE (x11, y11)-(x12, y12), căLINE (x13, y13)-(x14, y14), căLINE (x13, y13)-(x15, y15), căLINE (x14, y14)-(x16, y16), căLINE (x15, y15)-(x16, y16), căLINE (x17, y17)-(x1, y1), căLINE (x18, y18)-(x3, y3), căLINE (x18, y18)-(x17, y17), căLINE (x19, y19)-(x20, y20), căLINE (x21, y21)-(x20, y20), căLINE (x22, y22)-(x19, y19), căLINE (x24, y24)-(x21, y21), căLINE (x22, y22)-(x23, y23), căLINE (x24, y24)-(x23, y23), căLINE (x25, y25)-(x26, y26), căăFOR t = 1 TO s: NEXT t            'This line pauses for a split secondăăGOSUB eraseit                     'gosub to the erase command belowăăNEXT i                            'loop 360 timesăăGOTO start                        'start againăăeraseit:ăLINE (x1, y1)-(x2, y2), 0         'This line and down erases the faceăLINE (x1, y1)-(x3, y3), 0         'from the screenăLINE (x3, y3)-(x4, y4), 0ăLINE (x2, y2)-(x5, y5), 0ăLINE (x4, y4)-(x6, y6), 0ăLINE (x7, y7)-(x5, y5), 0ăLINE (x8, y8)-(x6, y6), 0ăLINE (x9, y9)-(x10, y10), 0ăLINE (x9, y9)-(x11, y11), 0ăLINE (x10, y10)-(x12, y12), 0ăLINE (x11, y11)-(x12, y12), 0ăLINE (x13, y13)-(x14, y14), 0ăLINE (x13, y13)-(x15, y15), 0ăLINE (x14, y14)-(x16, y16), 0ăLINE (x15, y15)-(x16, y16), 0ăLINE (x17, y17)-(x1, y1), 0ăLINE (x18, y18)-(x3, y3), 0ăLINE (x18, y18)-(x17, y17), 0ăLINE (x19, y19)-(x20, y20), 0ăLINE (x21, y21)-(x20, y20), 0ăLINE (x22, y22)-(x19, y19), 0ăLINE (x22, y22)-(x23, y23), 0ăLINE (x24, y24)-(x23, y23), 0ăLINE (x24, y24)-(x21, y21), 0ăLINE (x25, y25)-(x26, y26), 0ăăRETURN                                'return to the for..next loopăMichael Galos                  ANIMATION OF A WALKING MAN     galvin@powerup.com.au          10-24-99 (09:33)       QB, QBasic, PDS        711  19138    MANWALK.BAS 'This is the first animation I've ever properly made.ă'Keep in mind that I was 12 when I wrote this on my then brand new 386! :)ă'I also had no knowledge of arrays so it's not even close to optimisedă'which would have helped.  I've only just now added the comments and organised it.ă'This program could be made a lot cleaner but it doesn't really use thată'much CPU power.  You might need to adjust the speed for your computer.ă'----------------------------------------------------------------------------ăăSCREEN 13ăăspeed = 40000       'the speed of the animation (you might want to lower this)ăăDIM half%(2000)     'allocate memory to store the graphics for each frameăDIM man1%(2000)ăDIM man2%(2000)ăDIM man3%(2000)ăDIM man4%(2000)ăDIM man5%(2000)ăDIM man6%(2000)ăDIM man7%(2000)ăă'draw the ground:ăLINE (0, 110)-(319, 199), 2, BFăăă'this is the drawing for the 1st frame of animation for the man'ă  PSET (160, 100), 7ă  DRAW "D5;R1;U5;D7;C13;D1;L4;U1;E1;R2;F1;L3"ă  PSET (157, 106), 5ă  DRAW "L2;G1;D1;R2;U1;L1"ă  PSET (159, 105), 8ă  DRAW "U7;C7;R2;D1;L1"ă  PSET (158, 98), 8ă  DRAW "D7"ă  PSET (161, 97), 3ă  DRAW "L3;G1;L2;H2;U2;E3;U1;E1;U1;R6;D8;G1"ă  PAINT (160, 95), 11, 3ă  PSET (157, 98), 8ă  DRAW "D7"ă  PSET (159, 98), 7ă  DRAW "D7"ă  PSET (158, 98), 7ă  PSET (161, 90), 3ă  DRAW "H1;L1;G1;D2;R3;U1"ă  PSET (161, 91), 11ă  DRAW "H1;L1;G1;R2"ă  PSET (161, 91), 3ă  PSET (158, 91), 3ă  PSET (161, 93), 12ă  DRAW "L2;D2;L1;d1;r1;U1;R1;D1;R1;U2;L1"ă  PSET (161, 108), 7ă  DRAW "L4"ă  PSET (156, 108), 8ă  DRAW "L2"ă  PSET (158, 87), 12ă  DRAW "E1;R1;F1;L2;U2;H2;U1;L1;U1;E1;U2;R4;F2;D4;G2"ă  PSET (157, 84), 12ă  DRAW "F1"ă  PAINT (160, 80), 12ă  PSET (163, 85), 6ă  DRAW "E1;U4;H2;L6;E1;R5;F2"ă  PSET (162, 79), 6ă  DRAW "F1;D4;U4;H1;G1;D"ă  PSET (161, 79), 6ă  PSET (157, 80), 1ăăGET (140, 60)-(180, 128), man1%   'grab the first fram and put it into man1%ăGET (140, 60)-(180, 98), half%    'grab the top half of himăFOR t = 1 TO speed: NEXT t        'pause for the next frameăLINE (140, 99)-(180, 109), 0, BF  'erase himăLINE (0, 110)-(319, 199), 2, BF   'redraw the ground (just to make sure it's the same)ăă'this is the second frame of animation'ă  PSET (158, 99), 7ă  DRAW "DGDGDG;FR;eueueueu"ă  PAINT (159, 100), 7ă  PSET (155, 106), 13ă  DRAW "l3;dg;frrf;e2u;l5;d;r4;g"ă  PSET (151, 108), 7ă  DRAW "f1;r2;f"ă  PSET (161, 99), 8ă  DRAW "d9;l2;u5;eud7"ă  PSET (159, 108), 5ă  DRAW "r2;d2;l4uedrr"ă  PSET (157, 110), 8ă  DRAW "r4"ă  PSET (159, 91), 3ă  DRAW "f1;r1;e"ă  PSET (161, 92), 12ă  DRAW "f1;f;g1;h2;u;f3"ă  PSET (161, 95), 12ă  DRAW "f"ăăGET (140, 60)-(170, 130), man2%     'grab the second frameăFOR t = 1 TO speed: NEXT t          'pause for the 3rd frameăLINE (0, 70)-(319, 109), 0, BF      'erase the manăPUT (140, 61), half%, PSET          'place the top half downăLINE (0, 110)-(319, 199), 2, BF     'redraw the ground againăă'this is where the 3rd frame gets drawn'ă  PSET (158, 100), 7ă  DRAW "gggd3rrr;uuu;eeelgggddluueee"ă  PSET (157, 100), 8ă  PSET (160, 101), 8ă  DRAW "fdfdf;l2;uguugurrhug"ă  PSET (156, 107), 13ă  DRAW "r2;d1;l6;e1;r3"ă  PSET (153, 109), 7ă  DRAW "r5"ă  PSET (159, 107), 5ă  DRAW "r4;d;l4;d1;c8;r4"ă  PSET (159, 91), 3ă  DRAW "f1;r1;e"ă  PSET (159, 94), 11ă  DRAW "r2;d4;l3;u1;r2;d1;l1;u2l;r2;u1;l1"ă  PSET (161, 92), 12ă  DRAW "f1;f;g1;h2;u;f3"ă  PSET (161, 95), 12ă  DRAW "f"ăăGET (140, 60)-(170, 130), man3%     'grab the 3rd frameăFOR t = 1 TO speed: NEXT t          'pause for the 4th frameăLINE (0, 70)-(319, 109), 0, BF      'erase the manăPUT (140, 61), half%, PSET          'place his top half down againăLINE (0, 110)-(319, 199), 2, BF     'redraw the groundăă'this is where the 4th frame gets drawn'ă  PSET (158, 100), 7ă  DRAW "d3;g;d3;r3;u3;e1;u3;l1;d3;l;u5;d8;l1;u2"ă  PSET (157, 107), 13ă  DRAW "R3;D1;L5;E"ă  PSET (155, 109), 7ă  DRAW "R5"ă  PSET (156, 102), 8ă  DRAW "E1;D2;L"ă  PSET (161, 104), 8ă  DRAW "f2;l2;u1;fg"ă  PSET (161, 107), 5ă  DRAW "er;f;lg;le"ă  PSET (161, 109), 8ă  DRAW "err"ăăPUT (140, 60), half%, PSET           'put down half his bodyăGET (140, 60)-(170, 130), man4%      'grab the 4th frameăFOR t = 1 TO speed: NEXT t           'pause for the 5th frameăLINE (0, 100)-(319, 109), 0, BF      'erase the manăă'this is where the 5th frame is drawn'ă  LINE (158, 100)-(159, 106), 7ă  LINE (160, 100)-(161, 106), 7ă  LINE (159, 100)-(160, 106), 7ă  LINE (0, 110)-(319, 199), 2, BFă  PSET (161, 106), 13ă  DRAW "d1;l5;e1;r3"ă  PSET (156, 108), 7ă  DRAW "r5"ă  LINE (157, 99)-(153, 105), 8ă  PSET (153, 105), 8ă  DRAW "r3eueulgd2;l"ă  PSET (157, 102), 8ă  PSET (153, 105), 5ă  DRAW "rfr;g;hlhd"ă  PSET (152, 107), 8ă  DRAW "rrr"ăGET (140, 60)-(170, 130), man5%      'grab the 5th frameăFOR t = 1 TO speed: NEXT t           'pause for the 6th frameăLINE (0, 70)-(319, 109), 0, BF       'erase the manăPUT (140, 62), half%, PSET           'place the top half of him downăLINE (0, 110)-(319, 199), 2, BF      'redraw the ground againăă'this is where the 6th frame is drawn'ă  PSET (159, 94), 11ă  DRAW "r2;d4;l3;u1;r2;d1;l1;u2l;r2;u1;l1"ă  PSET (159, 94), 12ă  DRAW "g1;h1;g2;f2;e3u;g3;u2g"ă  PSET (158, 100), 8ă  DRAW "g3;dgd1;r2;ueue2;lggdgd"ă  PSET (159, 100), 7ă  DRAW "d3;f;d2rruuhuuu;l;dddfdd"ă  PSET (156, 107), 5ă  DRAW "d1;l5;e1;r3"ă  PSET (151, 109), 8ă  DRAW "r5"ă  PSET (159, 107), 13ă  DRAW "r3;d1;l5e"ă  PSET (157, 109), 7ă  DRAW "r5"ăăGET (140, 60)-(170, 130), man6%   'grab the 6th frameăFOR t = 1 TO speed: NEXT t        'pause for the 7thăLINE (0, 70)-(319, 109), 0, BF    'erase the manăPUT (140, 61), half%, PSET        'place down half his body againăLINE (0, 110)-(319, 199), 2, BF   'redraw the groundăă'this is where the 7th and final frame is drawn'ă  PSET (158, 100), 7ă  DRAW "dgd;fdfd;r2;uhuhu;eueu;l;dgdgdfdfd"ă  PSET (157, 108), 13ă  DRAW "rere;f;lglgl"ă  PSET (158, 110), 7ă  DRAW "erer"ă  PSET (160, 102), 8ă  DRAW "d1;r1;d2;u5"ă  PSET (158, 107), 8ă  PSET (158, 106), 8ă  PSET (156, 107), 5ă  DRAW "r1;l1;d1"ă  PSET (156, 109), 8ă  PSET (161, 109), 8ăăGET (140, 60)-(170, 130), man7%    'grab the 7th frameăFOR t = 1 TO speed: NEXT t         'pause before going back to the 1st frameăăanimation:                         'the actual animationăPUT (140, 60), man2%, PSETăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man3%, PSETăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man4%, PSETăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man5%, PSETăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man6%, PSETăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man7%, PSETăFOR t = 1 TO speed: NEXT tăLOCATE 1, 16: PRINT "Hit Space"ăa$ = INKEY$ăIF a$ = " " THEN GOTO cliffăGOTO animationăcliff:ăPUT (140, 60), man2%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man3%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man4%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man5%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man6%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăPUT (140, 60), man7%, PSETăedge = edge + 5: GOSUB cliffwriteăFOR t = 1 TO speed: NEXT tăGOTO cliffăcliffwrite:ăLINE (0, 0)-(edge, 199), 0, BFăIF edge = 150 THEN GOTO fallăRETURNăfall:ăLINE (152, 110)-(319, 199), 2, BFăLINE (0, 0)-(319, 109), 0, BFăPSET (149, 110), 7ăDRAW "rer"ăPSET (149, 109), 13ăDRAW "rer;u;lgll"ăPSET (159, 102), 5ăDRAW "d3;r1;u3;r1;c8;d3"ăPSET (149, 107), 7ăDRAW "uhuheueuerer;gdgdgdfdfdhguuulduuugeuurduur"ăPSET (153, 98), 8ăDRAW "dddfrrrrddllllhhuudffrrrr"ăPSET (154, 101), 8ăPSET (151, 97), 3ăDRAW "llhlhhuu;eehu;rrerr;fddfddfdd;gll"ăPAINT (152, 95), 11, 3ăPSET (149, 90), 3ăDRAW "r;f;d;ll;u;e"ăPSET (148, 91), 12ăDRAW "gghgffeee;lgghe"ăPSET (145, 87), 12ăDRAW "rrrerreuuhuuhhhlllgll;fdf;lgddreddfdd"ăPAINT (146, 84), 12ăPSET (142, 78), 6ăDRAW "r2;e;r3fffddfdd;g;h;uuu;f;ddduuu;hh;u2;l7;e;rrrrrr;f;ddd;uuu;h;ll;ddd"ăPSET (143, 81), 1ăPSET (144, 86), 0ăDRAW "r;e;r;d;ll;gll"ăPSET (145, 82), 12ăDRAW "e2"ăFOR t = 1 TO y: NEXT tăLINE (0, 0)-(319, 109), 0, BFăPSET (110, 107), 6ăDRAW "u9dfedfeuudddrefrrhlllllluuudfldrrrefllrrrfllllllllddddd;r;c12;uuuurrrrrrrdllddelulllldd;c1;r;c12dlrduruulrrrrrggdeellhgddlhh"ăPSET (120, 101), 3ăDRAW "rrrrerrrrrddddddddlllhlhlhhluu;r;c11;rrrerrrrddddddllhlhlhhrrrerrrddddhlhlerdru;lllldrfrf;uulc3lluuurrddduuuuc12;uuuulldddhfdruuu"ăPSET (131, 107), 7ăDRAW "rrrrrrrerrrrrrruuuullllllllhllllllddddddd"ăPAINT (133, 105), 7ăPSET (147, 102), 13ăDRAW "dddddfrrc7uuuuuulc13llfddddruuuu"ăPSET (140, 101), 8ăDRAW "rrrrellllueueurrrrdgdgdgeulllerrullerr"ăPSET (143, 94), 5ăDRAW "rrrrreuullllllddderrrrullll"ăPSET (143, 92), 8ăDRAW "rrrrrr"ăPSET (143, 91), 0ăDRAW "rrrrrr"ăPSET (150, 110), 0ăPSET (149, 110), 0ăDIM fallman1%(5000)ăFOR t = 1 TO 3000: NEXT tăGET (100, 92)-(153, 109), fallman1%ăLINE (100, 92)-(153, 110), 0, BFăPSET (151, 110), 2ăDRAW "r5l5d8"ăPSET (150, 126), 0ăDRAW "l5"ăPUT (98, 100), fallman1%, PSETăPSET (109, 107), 6ăPSET (130, 108), 7ăPSET (129, 108), 7ăPSET (135, 109), 7ăDRAW "rrr"ăPSET (114, 106), 6ăPSET (116, 107), 6ăDIM fallman2%(5000)ăGET (98, 100)-(151, 117), fallman2%ăFOR t = 1 TO z: NEXT tăLINE (98, 100)-(151, 118), 0, BFăPUT (97, 108), fallman1%, PSETăPSET (151, 110), 2ăDRAW "r5l5d8"ăPSET (150, 126), 0ăDRAW "l5"ă'GOTO casdf2ăLINE (0, 0)-(151, 199), 0, BFăLINE (151, 105)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 100)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 95)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 90)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 85)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 80)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 75)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 70)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 65)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 60)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 55)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 50)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 45)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 40)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 35)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 30)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 25)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 20)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 15)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 10)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 5)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (151, 0)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 195)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 190)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 185)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 180)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 175)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 170)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 165)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 160)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 155)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 150)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 145)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 140)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 135)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 130)-(319, 199), 2, BFăPUT (97, 108), fallman1%, PSETăFOR t = 1 TO z: NEXT tăLINE (0, 126)-(319, 199), 2, BFăPUT (97, 108), fallman2%, PSETăcasdf2:ăPSET (130, 125), 4ăDRAW "rrrrrc12rr"ăPSET (146, 125), 4ăDRAW "rrr"ăPSET (120, 124), 4ăDRAW "rrr"ăFOR t = 1 TO z: NEXT tăPUT (97, 108), fallman1%, PSETăPSET (107, 112), 0ăDRAW "rrrrrrrrdlllllllldrrrrrrrrdllllllll"ăPSET (107, 115), 6ăDRAW "rrrrrr"ăPSET (121, 116), 0ăDRAW "rrulllhrrrrullurr"ăPSET (120, 119), 12ăDRAW "rrrrulll"ăPSET (137, 117), 0ăDRAW "rrrrellllurrrrellllurrrrellllurrrreellllllurrrrrrllllllddrrrr"ăPSET (139, 117), 8ăDRAW "rrrrrrerllllllerrrrrrrellllll"ăPSET (145, 113), 5ăDRAW "rrfrrullhllurrfrruc8llhll"ăDIM squash1%(5000)ăGET (97, 108)-(151, 117), squash1%ăPSET (130, 125), 4ăDRAW "rrrrrrrrrrrr"ăPSET (120, 125), 4ăDRAW "rrrrrr"ăPSET (122, 124), 4ăDRAW "rr"ăPSET (132, 123), 4ăDRAW "r"ăPSET (142, 123), 4ăPSET (120, 121), 4ăDRAW "rr"ăPSET (124, 122), 4ăDRAW "rrr"ăPSET (132, 120), 4ăDRAW "r"ăPSET (118, 119), 4ăLINE (0, 125)-(319, 199), 2, BFăx = 0ă1000000ăCIRCLE (130, 115), x, 4ăCIRCLE (120, 120), x, 4ăFOR t = 1 TO v: NEXT tăx = x + 1ăIF x = 9 THEN GOTO splashăGOTO 1000000ăsplash:ăLINE (105, 110)-(151, 130), 4, BFăPSET (106, 109), 4ăDRAW "r39"ăPSET (104, 111), 4ăDRAW "d18"ăPSET (106, 130), 4ăDRAW "rrfrrffrffrerrrrrrrerrrerrrfrrrfrrrerreee"ăPAINT (130, 131), 4ăPSET (106, 109), 4ăDRAW "rrrrerrrrereeerrrfrrrfrrerrrfreerrrffrrffrrf"ăPAINT (130, 107), 4ăPSET (103, 111), 4ăDRAW "dgdgfdffdgdgdfdfdd"ăPSET (103, 123), 4ăDRAW "d"ăPSET (103, 113), 4ăDRAW "dgrddd"ăPSET (105, 130), 4ăDRAW "rddgdffrreuhuurllldgdfrrelllued"ăPSET (139, 130), 4ăDRAW "rddgdffrreuhuurllldgdfrrelllued"ăDIM blooddrip1%(200)ăGET (106, 133)-(112, 138), blooddrip1%ăPUT (106, 134), blooddrip1%, PSETăPUT (140, 134), blooddrip1%, PSETăFOR t = 1 TO m: NEXT tăPUT (106, 135), blooddrip1%, PSETăPUT (140, 134), blooddrip1%, PSETăFOR t = 1 TO m: NEXT tăPUT (106, 136), blooddrip1%, PSETăPUT (140, 135), blooddrip1%, PSETăFOR t = 1 TO m: NEXT tăPUT (106, 137), blooddrip1%, PSETăPUT (140, 135), blooddrip1%, PSETăFOR t = 1 TO m: NEXT tăPUT (106, 138), blooddrip1%, PSETăPUT (140, 136), blooddrip1%, PSETăFOR t = 1 TO m: NEXT tăFOR t = 1 TO 10000: NEXT tăLINE (0, 125)-(319, 199), 2, BFăLINE (0, 0)-(150, 124), 0, BFăPUT (110, 75), man1%, PSETă'dynamite1'ăPSET (124, 107), 4ăDRAW "hhheffflhhu"ă'dynamite2'ăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăg = 1ăstrt:ă'frame1clear'ăPSET (122, 101), 0ăPSET (120, 102), 0ăPSET (121, 101), 0ă'frame1'ăPSET (121, 103), 14ăPSET (122, 102), 12ăPSET (119, 102), 6ăPSET (120, 101), 4ăFOR t = 1 TO w: NEXT tă'frame2clear'ăPSET (122, 102), 0ăPSET (119, 102), 0ăPSET (120, 101), 0ă'frame2'ăPSET (122, 101), 4ăPSET (120, 102), 6ăPSET (121, 101), 12ăFOR t = 1 TO w: NEXT tăg = g + 1ăIF g = 3 THEN GOTO nexttăGOTO strtăENDănextt:ăPUT (110, 75), man1%, PSETăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăPSET (122, 104), 4ăDRAW "hhhefffdhhh"ăPSET (122, 105), 12ăDRAW "rruudfddlul"ăh = 1ăfiree:ă'frame1clear'ăPSET (119, 99), 0ăPSET (117, 99), 0ăPSET (120, 99), 0ă'frame1'ăPSET (119, 100), 14ăPSET (118, 99), 12ăPSET (120, 98), 6ăPSET (119, 97), 4ă'frame2clear'ăPSET (118, 99), 0ăPSET (120, 98), 0ăPSET (119, 97), 0ă'frame2'ăPSET (119, 100), 14ăPSET (119, 99), 6ăPSET (117, 99), 4ăPSET (120, 99), 12ăh = h + 1ăIF h = 600 THEN GOTO gextttăGOTO fireeăENDăgexttt:ăPUT (110, 75), man1%, PSETăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăPSET (124, 106), 12ăDRAW "lhllhueerddrrgrddrddhluuullluru"ăPSET (124, 104), 0ăPSET (122, 102), 4ăDRAW "ueueurdgdgdl"ăPSET (125, 98), 14ăFOR t = 1 TO z: NEXT tăPUT (110, 75), man1%, PSETăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăPSET (125, 106), 12ăDRAW "uhuhuerrddrdldluuleldl"ăPSET (126, 100), 4ăDRAW "fehl"ăFOR t = 1 TO z: NEXT tăPSET (126, 100), 0ăDRAW "fehl"ăPSET (126, 101), 0ăDRAW "luulddlderrrrf"ăFOR t = 1 TO z: NEXT tăPUT (110, 75), man1%, PSETăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăFOR t = 1 TO 10000: NEXT tăPSET (127, 100), 0ăDRAW "rul"ăPSET (127, 102), 12ăDRAW "e"ăPSET (123, 111), 3ăDRAW "hhuuererreu"ăPSET (123, 111), 11ăDRAW "uueeelldlldrld"ăFOR t = 1 TO z: NEXT tăDIM belly1%(5000)ăGET (100, 75)-(150, 117), belly1%ăPSET (125, 113), 3ăDRAW "llhlhlhuhueuererrrrf"ăPSET (123, 111), 11ăDRAW "hhuuererreu"ăPSET (125, 112), 11ăDRAW "llhlullurullurrellurrrrhlrrrr"ăDIM belly2%(5000)ăGET (100, 75)-(150, 127), belly2%ăPUT (99, 75), belly2%, PSETăFOR t = 1 TO z: NEXT tăPUT (100, 75), belly2%, PSETăFOR t = 1 TO z: NEXT tăPUT (99, 75), belly2%, PSETăFOR t = 1 TO z: NEXT tăPUT (100, 75), belly2%, PSETăFOR t = 1 TO z: NEXT tăPUT (100, 75), belly1%, PSETăFOR t = 1 TO z: NEXT tăPUT (110, 75), man1%, PSETăLINE (0, 124)-(151, 124), 2ăLINE (151, 0)-(151, 199), 2ăMichael Galos                  BOUNCING TRIANGLE              galvin@powerup.com.au          10-24-99 (09:33)       QB, QBasic, PDS        43   931      BOUNTRIA.BAS'By Michael Galosă'This is a bouncing triange program that I made years agoă'It's pretty simple and was one of my first programs ever.ăăSCREEN 13ăpi = 3.141592654# / 180ăs = 3000ăr = 15ăa = 160ăb = 100ăc = 32ăd = 1ăe = 1ă1ăFOR i = 1 TO 360ăx1 = a + r * SIN(pi * i)ăy1 = b + r * COS(pi * i)ăx2 = a + r * SIN(pi * (i + 120))ăy2 = b + r * COS(pi * (i + 120))ăx3 = a + r * SIN(pi * (i - 120))ăy3 = b + r * COS(pi * (i - 120))ăLINE (x1, y1)-(x2, y2), căLINE (x2, y2)-(x3, y3), căLINE (x3, y3)-(x1, y1), căa = a + dăb = b + eăIF a <= r THEN d = 1: GOSUB sounăIF a >= (319 - r) THEN d = -1: GOSUB sounăIF b <= r THEN e = 1: GOSUB sounăIF b >= (199 - r) THEN e = -1: GOSUB sounăFOR t = 1 TO s: NEXT tăLINE (x1, y1)-(x2, y2), 0ăLINE (x2, y2)-(x3, y3), 0ăLINE (x3, y3)-(x1, y1), 0ăc = c + .1ăIF c >= 103 THEN c = 32ăNEXT iăGOTO 1ăsoun:ăFOR u = 1 TO 12ăSOUND 11700 * RND + 2137, .0229ăNEXT uăRETURNăIan Barker                     RASTER IMAGE ROTATION          mrianbarker@yahoo.co.uk        10-25-99 (11:48)       QB, QBasic, PDS        592  39129    ROTATION.BAS' Raster Image RotationăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"ROTATION.ZIP",4^6:Z&=29094:?STRING$(50,177);ăU"%up()%9%'%R-%2[7fLKo42P%0%%%%5%%%/%#%%gA2>F=hLSA0FM<f>;a8$>9$(năU"G6c)+)ZhMob'NSL09ht%ZIVs8d%TJNcVEgKN-,<>BV]2]K=nr,?QB+B799k,\=năU"1##ue8tx:+s\)L/g?1WU<j%2CO#aj_]=e/:;9V:;CmiNXDp56ULS.>tqPKrtMHlăU"5?HXPIjnLW?.#G8iFGqi\hWOLPoKVc6ZB*b+V.n$AS#_l2rMAn<^Pc[aQ_ml)DGăU"l)[MS4t&jm3&VMXI&%/Wda-r&'H6>N'BUVJH^o.LblD$usTlYn\0.Xgas$7tNfnăU"Q0.*^$N$-L1IyqO7nTLz6MI*jDFI6yK'yJfa\m\5Qli>RopsVlI13ctW:Nv+lN-ăU"bx:-xVH556%vM+*Cd8-KB+^yt#I^/P4+l5ksp*ZeHDq>yUuHqZl^tvG_>bNH<(KăU"8io1muj8hcaMWapN^GJ#z7Zo,4Me5eS;]7fKMk6I8[Kq(T,4;Xdwc)c^Z\P[D1păU"ts--K82lu(Rqr-#('RfP#/G3<Z^Ec-xUIkGL_bn672G+lR:pF8?fqBIp$CVYF87ăU">s,*qiV13_.JC;<hg$.cHc/[4DnR)zd#zN*ahNa>JlpiJs)0%sbjFnW><I4):O&ăU".1hO*QF=jbkL(Nw-f&wJKviYnH'AXa7IRnZFG#fW9/sjcLn0iqEMglFR5hxRLI>ăU"%f2fJz2TDzH$J22ZQ1u(GG/tXd,)((;0M2\72U#gG_6drj1%GE)Eg&ml&/%FM2FăU"4x$GJrMXQIMaatswrBPn4fqkGzq;SE/0;0Dmq9kT3(s8>183<0l\>Sb&Hzwcs]făU"Z,bKdj%v9eiMH(a>24fubHbF-xCU+x.H$dDDZxZ.xtL/i&t?x_PB+E9T)KEFbpBăU"mfT1hTj5jx$:rmxh8#g\JA2hTttK5F>Tg[vmqpon#/6KQgqR7dg-oR.U6mVvm^XăU"N?Rm8gtGAE#X^Yg1SM*a'o/),oKoNxC[OopkxPq0b]#gdqKnsN%<5hvcF#7L>XZăU"P.2TvFbt^I49NL9U-6^P3%=sPf\dAeS+HI(+m*4g[E[*lrTHsN54ASE&**AD>ylăU"$Nzu7Sy$.u-vlCu6XMM=8a0\rYJ.;9Ld9XnCRtJKGZm7N7.$NO.aufqMYWA&dN]ăU"$2X)D_bi%LI(?^4z]$2tr)<FJ^BlKw<]iu$wb-10*PP]rDX__xH%]cArWZXouUKăU"QQW=[9/uPS=L2o<KsfkRltK*&.u+IMU)rt:&#dY(7'N\7LA0[.'kuoeSi;DF6axăU"*HApgc2qNfg&m;vmCt'kb\Ic#CaL#XLrUf.-e4R9)3x1K,W^WItBZ?hUL#uhR3RăU"rRT5?l*Z#GuHqM;a)'$ov;2ZgfOJaQ&3Pp)ZXZ\sJC9%J9OUt2xxt8U50T?82KaăU"c8IAJaMe3In5tYl+=t_9_4j&Z.hL:j>5m#mS)jZWrtk,CfcJwHYk_-TA^sVsUHaăU"M4tr)?/QeUvmX?u.G67EW%/)*MA&iv%G72YR9[li0PzmIm^yG;;fPWwi==;n45jăU";RTVuj[No;+/%8tD.OI'Aw0[Y?;;Dr9db%,Ahg5(9M8#O:na_T;$2)Wj4rW(>2:ăU"f5;?Os/kT;*21nvUOcC/PN2[HMpkr-r4^LhS(C(eee;iON+;f$JRCPUgWT12)uNăU"v%H4D]MhA#aU\-EvD3pHGgbzN?GWE(1l7uRcXg0D-E9UO<-Q:5_:1l<f%<PwP4găU"1kCcM%U8tdZk],fR]+cGUrGkq+a>k$jhq38>Ce<[/.(N2uuhS'\D=/Mpvipuv0/ăU"/bQp_3J;[fjB;(Qmm,&Y<gir61gBl%qRn(.bVpFpgsq3NwApIRg69aC_2\%rXWRăU"+WrCoJdlCR00Up\>WJc5v=_PZZL32j(>^P3*g['&9[%872'?8_(53ZuH2K*7)4oăU"W]#eULzWI<9sO_p,Xq$Df1^fV<;#?30>,92B-G+6DLZkr?dIcqsS(X()&ie]=x;ăU"s4Vby7qEmoGX2tGKMr]F4eLAFwz%(?m07s^)?\u^g&NIcEFoRsqriIw198'?l4QăU">R.N[NozY3DXhpr*WL^$+(3f?hIYUT[vG7B)&Yr6Jb[bn-c9lAM;$/*eA.Oew'#ăU"<exQ%]K>i5;)11)Dl9KrLNYWRMrA(QML?\%z*R<0qii$7AVXbIb>zlXerinYei6ăU"kjsQaK7fc>_'7g:c:)rr)qP6<G9Z&,Sc>8XqisF<a\3Rpu1A#jNh(Yc>rTfu5n[ăU"kDt<o7hb4fJNP%y6P<NLC-0Zi(S6Y:5\=G$X,sXjRNgj1A-+VqpQs,RN,K9+Y:-ăU"QODV/&s6P*;LlD+IIZ(JmG)bBvCnG,MQ2zvP,i.ZhR<=<q96_,Tbe6TlK3aII3VăU"h[4DjQA/Ri6J(/GJ(.3,7nbLFwPeN6=dJ0)xECSPcCq+%]caU^a_MWA,q9A4i$TăU"4O=f=2F<ikbYXN+5W,tT3H_e[B>fJ=*H'Fjrr*wX&4l47hT'EU.%AC==,m6_UA_ăU"sT386mN,d3-cJ&3Y?r;_U4ra;G'1dXU9\P/jBB*J3W;l[aewepHX8.9<ULmDPB,ăU"qK:bkq\Z-C9*4qStbB[kPI6EwA&mkZ7$9ZF>wt2uCWDFd(oU_nT-TfXAv8(.fAGăU"E8sQXCEE]u5AP'._t+A$1kaG54CWV50GOhJXWWP5*'4'*'QShok?*4%r4_HuXpeăU"?(RwK.Ic5l;2#YpBI&'WT9lT(K18&PfF=BcRv8*X=h.'e;sNmou*E\7K=hd1Xh,ăU"QfUR6,2h;0Vqj^$oOE]Ejun946-u=iYuY.RZL=p'A=GY]]'4\%k\,mJv<q]JdI]ăU"*LKY5wQBU$-8k,hDsrq-U#gfJ(I6ZRZoT9Yz843a$bFXuhpi_I+LqBl<'$J3wx/ăU"<</8LD$nDSAUt2sZ,PKR)vi5bs?+cp;'Pp,9uLuL<5-pm(5+6/GHRC&#EYCZ(ibăU"N$B_zl.Kf4Ne[CyFM(cbnIbu?39+m_T)<pg&3Z4PZ?frU<pj*vKeYK=Fif5&Na#ăU"wQ^f[YP*U?OM5TVkWh7CdkRekBPu?ui<a>NjL5Vf<+p\LAEv:]=61r^H?%Yklw$ăU"Y/tyAS\u1V1s%5NmN;KM#-jJHnXQW17u9p7A\tN,af$E.p5Q#;H]G54sSrf0xQDăU"^BmsqGFF:j90-Jie<j3<ZG3(n1Fd',>d13?uQ,NE%]T0;Vh]^l?)qCm;a7_6\S(ăU"a(lN8JA0R\#]7crn[F1xM5eMSYn3#v1s((;PQAEj5[9n1]j&MRR6sX0Hj3VnqCpăU"NNtnG9atP8Kf*e\r/[D?dclcOE,JIMl='GBA>cnth\gfzhN3nGLLA2u&JCv,dI(ăU"JbRg0jpAcj#XQ4:IAifr0RLcs$44Fn5X$o'rkkE\Q3bDDE?5OiA+ah(uGak?aq.ăU"a-7:<Xrb,.4\h\W[j=nEb$ZL59b\Y=3ML=7-'Y4DD$[bn8$[MoZd4s,Ed;0TmqvăU"#ud19eN'YQ]0/RC39Hf6svDt<hO;>1ptE^Jrn8&1MrN/-y\r6_'4a\<YnN]qIdCăU"WlE6elVL<_f%sf<h0F(Z#,FC--Wl6D%D0MdH:MZ-<6tFUM:O$%9$hBMX4>WxBf[ăU"DO)U0(CdkSg(QL*kbN$LP'+-dL21ZMDv(O)^6&noKLDGnn6</)&A,6.$A9i.Z%^ăU"A5<heZI#sk;6aX]nQ4<j+l$2[g[>nG*4^j*;*^-4HYI=+C78afHts?s#ZWuD''EăU"m_,7HWq2T#;8+YY+]X&-T'x%up%()9%%'%-%)w[fLL9,ug%()%%'E/%%%/%%%LgăU"A>FA=hS?M0;,%:p]VU+1T4U,Fi*/t'wCDPq4qZX'6x,.owAK+RW1GHRsucue]$păU"mdd7vuwwdlVr)&nCD<SW=*8H4&:CgR(72JjTSe5%F7<S%7tPrDCo:ZdK.oz':=WăU"[*#d_O5YulI;CJ[:I[#<r6[cCcwL)a^v2^v^LZS%%\,GoCfk1VBVl.g8hk8h8$PăU"8$8v,KUug4/CgPgMA2>aEmMYd;G?6IlfIUNgx:N>'e\^oDq8E%6UI5/Vg?pf77kăU"b=rW*WgsSj6k[KsH21?m#40'6))P_S0OKfKMN%,IPZbcmPBf?1QGl6E_\$:v6DdăU"T6O]IF5]CewG=oj1+Tdm[B>X%no\^qyW%b+hpr[ebWf%?8?b%sGk^V)dMqVD'a_ăU"_QjeKEJ$N_VWONsR7qJdKOK%jb:PhS;f8u2*-2yjZZS_=_Ze6V&ci$%8mvh5G&iăU"E8bAF9aphZg<n6i#?gwX)I/)D4'3d]8-mMFB\ec&+RgyJs-Dj4rP+gdLO7&<4:1ăU"M9/LR'jWc,5N%%Pq9*(J-KK#_;hK?_2RRq2ITH>^e^*EHA]Y0qeieYc*<(:Q1?;ăU"70\w3Qn39I[7Cw$SQ,J=euFt;IN^u=hPp$*dJ'b4\:]RNNKGr#fFxNB+R^-.[S-ăU"FK:sGIO*Q)Z3o&Bgu<&PW%1BJ7sZ+BI+(73=cID9].RhH3w^pAt>\ao4=g'/*34ăU"4kK?+#=:tz#PEGO4z)Dw1[chMU2B+C>t;WO\yG]SSJyKHT-s=CKE9wheks_:U]săU"8#BCN8;3#K1U=-#E5L,FP30;I7C8^KAcdx+U,#X<S$.ra[hNVCm__oRVV&#L[OaăU":E/x,,pGaXe/,:?a(jo]J_WHd>>':3+qf'Fk:KQIz?0+9a%aIbk.ZZ&=al]k8GrăU"G1?gP\<eoUz4h<[=*_Wv#d6&qd#gfACasdRI_PRqYSE:7t/o=>?ts+<OiJn>/OjăU"Gt?.,f[ciaWWIb4Xueq%$*L;96H-?9nWhqBxYi1>(4C+5KOh]Hyylf7$;=CoTLpăU"q^7,SQG2/<Z&*OEO(96+=DO=v8I'ELPi,2xX1*G80;.xu1iB4.jiGlGe&/.cW%văU"l-$_LLML]skAiJZE-+VW/vTUa1LiJof[THsHsJQ(;MWd0[I=.:iZZ4niEE&^WB&ăU"vjbr7T1S8/;dx5aw8$=([5'JMzq&w+\boX+fSVxqYuP;RZ#tt]E#Rq\MNos4M$tăU"aL&q[*-bF8KI>RxYc[gsx%l^Tg^Cn,:Drk<r,28'arC&RJo%</lpwm+(iHf1j2tăU"6ZxhgbG8FHf;f^DE78tq]#Wm8Q>s_NYyw%'up(%)9%'%%-%BE&'L^*L#/o%7%%7ăU"%d%%1%%%%yM4GCA2>C9Sh10Bf,*fxGsnKx%+6w4ZWgG9WaSq[W*EItEIGWZ/(eJăU"H<3ptTgos+32rg5MtNdn.51zD&\uYcg,m#tUV:i[IzMh(((<r-FjtrW'nL?qNJXăU"S'V>0K.,d/9T1vl5muKVF6kLq8:l;_Q9,g*aZ#2G>UNO5)fU2V?HTx4$&=lbkDMăU"'4,L/6NgW1>evQiqYN7<o5f&]Hh9JNDHKftQ[llc>JZuY1k=Fz$T21TmOTV?86găU"U*X<ZSoqYEgK\$[-54=VOc4$Vx9.?7a0_3FErQ5IgWCi:4rRla^wob4U1^+Xhc\ăU"jzl2(=[nUmUT'hElsQ7(S&#m*2N:WX)#AQ/'Gi/\41V66kHxa;JZi[$pVsFH]4zăU"vuFO>U'6q*w-;fv0[R0veUM#8.kgdZht-FlD=Ir8iIg4bGsXQg6Vd,>1?6n>r9$ăU"7cHs.A*MFm;8p4C9#%)E<XAM*<&6n.UU5o,Bhns.8I?:=Q[A#^n:>iGQrl>7_:păU"w=)wm>]-C'[MtY$X*$^i5H[4$$:SN68aS?+t2OJNVZaM'*AD713/O*q]p-tS6($ăU"[<5%M.&Gh<,Zw1:SIFPk?lB*T:98C>ex#Ge%X)mnY]l[BRxf;DlXi6Ql2>*GRNxăU"V^dC5p;wN-jG8P7h67^Vk()WC\1C+p%x^8hJF6$WTRW$=sMvZ,#_57:J:QmR4*MăU"4[0#[T<3\+g5^k5Iu.NqoQ[9.?xp6vwa-><n>9Q=i>8n4nfc?;:JB[c?U'Wa;W1ăU"1#Uj_5>9ARmNJK1SLocI?y:8[tRRv$h-=qsXb#tZttI(+L9Faa6=Ui-8DU+IcCoăU"OA'S3X0.b#4tv<%)T+g:+2;n/;A$jAg5(k1\WVOO?:VSwd/O%Ug(^eIWa_3efj]ăU"N5.SEIc&Z6p>aU=20^Sp<,wO'%(5un&nd897aFL9ju&7Q?C,QbD_+s/Ff0/>B%băU"5)A;8I9'.Qld%eLBB;4]G^D'Ne-y^jEMLuK.sImhfo^Je)CWRW_*n1H=4[%k<+:ăU"Cx%KTM_If]Bve-),ggh&GDfnEq(9LEqK^;B6L#vi>Q())aaqx32.I%9X4O5W_[făU"a93+;tWpi[tVa6X-?RLA4-#NJNnq'r,G[sS.'+Q0Cp/R6+ox$&cpeP5+<_hDmgHăU"q0=uStj%bcZa6Hih9,]9lcl,]=N#H%%\WK$>VY?3Q$.ooXp3DI3+9vk8UMN3y.zăU"OdJ>\qgs:<?C8\>]vs#-:AH[hwhKQxDj*.UZQ0E1Ns]D)8G0BLYxW>'\*z3=^WYăU"87?9W,/38wARl>uqZdN*LfF3wHBa:/':Ao'BAhFGdX<Uq.t]FT;M%MK&Wz[^><NăU"pI'):mN9RM^H&iHmNBdiii<:iB/8X>^S)gHR9]KXgVjlaer0Yt9,ef#_R*9sgB7ăU"ElWqELoJ[,'orm[tq+#%wb]r$H3-x^5:ziOR49Dhc(Dt:^jS<q.Xf=8#NpM+S]hăU"M*NhE>cjYCCielX'#rQ=z1(Ws^gji0(AmQt^4XtCNh;?U*A=RP)mec,>'MJbS<WăU"G[l.vbTb2NOHc[uuRMB=h5[()Qg=XaZU1C4QIp7'=k]X]qjr^ME'=SaL=Gdco%KăU"^voBc6\=\^hz?LC,=s&T2JxejI9eC$.6T.a=]9sDFpDq+:Tu*\Fls87ar24V'Z\ăU">l%kfE_%K&/?DZxAk$9kS4ObJIV;R3l$esFp55*d,.N<DgJd6Wvn0X&lka:g$[.ăU"FvT7NZ8v6P0[c-,PRf_f;>24T(A,v8]vM6K]gEW)X0=JH5okrLN8/i&3EQz)8\(ăU"G5ALrYYJ4#E1O);xH%n]q/<bleKV':POE%A0^*K$X+s_TUXdCF.1)^M/J#3WJdeăU"]ZIUtBk;kGc)i43Y2(qnucd46'OU.V-Ef0)Ct.)cVzM]Fn5>GHaSo.((lHI_Cv?ăU"4R9H+'Gi,j#1X/CY:,X=:Y=qpQ6P7Cain5$TSjgS\3%+p+A*IhTpv$vmynfY%YTăU"&rcX0[47\eTcWhD8Ecct%Ug;sz$9&s&\8o]==q*j.pH9S;'0-et>LA[zCLl6u3făU"pfi>Gb#6TFFdzP*kybV5dgF:g7/#Q'D\Fl44%CzJ]F=W&1IhxkhFOqN^'d9NYmwăU"asFImVEs8FiI2l<o^Q_?8)&RKPZ8<a/MV;WAl(SJ/aR+6IOy?Q8i+e=8b0=%gQLăU"K;:HL'w\g1>9f5<+m[/ghkrj3m)N1xy+rAz]?:Yb07lp0V5nuo$&F1q\;-sHNTOăU"*?*u;7g#xv19>3mJaK:P$^&OQj-Hb88x7H3hLB)PJcs'[>$qQt9f=#ydb_y);:qăU"x*sB6A6mNb+H&JtiM/t^4Ctj=H\0]baV[Ds?xd9\46.=KhaTQK#n+u-jg+%&phSăU"f4qyTJv$6bdiYIfaEJ3#YiNM[F[x5JlTg^VMrVwg$q-<+N/_d.\+)2hGOBk)R^JăU"Z1)1FR>VMC'?R7VStZf>/fIg.EC2?G3$v4te;&<=0#gAJWUHG+Dbw4^M8Bg6LayăU"eLd1JQSm^OltR_Kdl+]RN3qBLwSYdfhzVQ&PkU)wq]%toj/T[[t3jU9>()=b8OWăU"Oh81D=L,s:f&c(2TsWZd]dT.]?>N(WhzF8nP/nH[]#pq64q3jFTVooc0&&G<^;MăU"Z:q>4i66.qdZfq/ReFkRkiR>]/v'IF*yH7/SkLP#)p]CV2&TWq;2nLh%r6-v(5:ăU"OqN$i1djw[$s=Q'SNxMGiBwQ%2EkH3Y3_VHC[WC2$]0wjvqkq\\#r2(oXscCF(?ăU"p8p1r#&9cj'*CQIB5XbW^i10_&WF-\)-5h$ZGV3lhLkj$>*:P#_a5GF7a<hMC:EăU"OIlU.^O&G)Vau91l;f]e^Kw^2=nFCVAnLcL1;W)X?c/o$Y,_Y=3_=PEF,-tbHooăU"jaR%K^:Jj$FyN=kCd^rQ(m%()CxGcIZj=-Ni_P^Q#8.jR>R>r3DD-yf4kPwy2cPăU"9M?x2iyg:ZSUNnDbSZ;$=\D_WhhLyDR;QXP4nCNBl=EeyOg/YJYame^6$MM^02hăU"nz(M]5<CQuFPS-$bd86qdrFNCiekB9.Wpu9BXQjIXr[Ouas<-02nKh0)Hyu%EwRăU"I&^_^j+<nyn_;VCC0e*sC:NAih&yfo*E$25ARsfAoS#g+W4uJUwcPMXp1N8uoNMăU"0y\3]#xH-=BFQL)NE&VKRpxZw2k#e:X$RL>+g=m2u[I#V^(v77Oq[>DjQPR\zRKăU"S=/?#O=E;L%u,tmUbk_h'gru8&RZD.7;Y:?XcYZB)avZoTF0.A+wCIW:ktxm(iaăU"3ee3?V5XYl#w:;Obp0#&zc<,vpsb;gfBAh$bul1URSLXBIc5hU2HEIHy:(14RioăU"3_^3R>Pv2m6v:c*>x^>iZ/<rsIu>eDmIDoYoslp;yn$&qA<SEqWj['0xQ5U(/PqăU"'Pi;d&bslL<nLjMYL6ihv-l]NrW&;(?jKmoCtX-\)dXS5&RVjj>d.S)E.qFxz\$ăU"CN:]H]1?CZVj51PS$YVNMIn<4id4isB&l0vfLK+W'f//33'*tD=<=H70-W98F5răU"c[HGMB=x>4Q2Aw[ZtVnu0U#%cOTbHg86kNRI*R<5revMDk3^y0G61sS/<)looNiăU"\eG8aLi=EImeD%SSbZu9EbOGR(hD5jW9'ig:z'1.JNL<OcpTa_ch_)\A_)_+bD0ăU"J(L^^[.ckcm'F<cNS0D1-d,jl<I\Bh29ML3?0az#^,_rj$Kn#QslrlnJ:cS1Ew&ăU"=_H;<eX(KSP\Xb6.($/d6T2$6nhv2MQ[z4iq.snZn%#t<RdgS*B45r=PlCi7V1&ăU"0hWeXQXe$EK+Y/W%]wbO\a9#V&Av7%Dl%7D.9yRXpEyVA+jhlIAa1i,A^mpy/KMăU"RpYpFKBC:S-&g:Ar%kgFqiwJElJSh\].XpT,w:%6[Q<h7)wPcy*,*NUs*ur4d][ăU"2B<U&^&>s#p>/kj'<najNn1Rx)<H[;'s(]0o$$2;xB.?RcqeEhR]ArISy8uZn>0ăU"*1:kR=5TKphrSDNMq[57feUI&3yl_cMVXaGp3vtBdxJF&GMK<Uq2G_.GV*1RL+xăU"u$tB(o'ofACpyo0YH,_9=d;Vv6'm]MX9L/W]g>d3cB5hZvEBz*ZTbmEvbPKA3$WăU"2d'*qoAi82wvDob[6CKcC,DQ0.Onkhcj3)$UK<fYahEnpkg2Hhvpj21080oGxR3ăU"3^svf+NV6dIT(71?bwM\dPJMFQNubLI\T[>>tuhSX&PL'qCHa'2mTwTN^$F(5OEăU"bH>6l4Jm1?F;ZV.4lD5es=tS,LSp9v\LG-NfyNtWstl1.XY6>>2#Z>\A930;3k$ăU"Z(#fAMHd+az;z*Yzi,cQlm1krm'VV<42K5eeQts4mkV8/oDmy9=mV2:E]2i2^/găU"J,Iu0h#5\Gh=:PV0'Nh,PDFu:u>)aM=R,-NMda&DQC=3eCBpa4SI(h4ulTVEX1AăU"Eg3R<Z&,B&+Ju9xKMb%0z=Tf.vo)n[YB7\1Jf(EbPNs_\fGp.+&;MR2fiy-l\edăU"F3q2X72jZS#VmhP2uGIhk8[hOQ-8vjLpvXP?:k-'gUi40gZ[AZY.:g;Jjr>;V'*ăU"-7(Q8Lx?qCn:XN/2M-[>E).yaKr(B[kPDw=95'g\3J1M[m.MWXg(7Q_YaO^,)]#ăU")f:dDWM7d_aOUnr\.Gen&VEq[E0[A_P(0Z&.cQPj0MbS45PRKRn&*r7a/rk,R'2ăU"[WxcVn'.mGQlBK1JYu[CXMTsqTG&+O[\Np._D47ifbH-*bp,(Xt7$pZ*F>Q7Gl\ăU"wBTG*&dXZhZH,RBKN+r[WqL0qimx*j)$EtEDq,n:h)<+BMXIp:%37fWAXTi.,z[ăU"*rfoCr,VP3*Hd3]pH[XTV$ID]omzglgVDn]a'ZSB-/xl^cE=z7TG$wpl?6kgt%kăU"Rg1_2.kV,xdH>AxPSiNAq8oY^x<C*ixz6.+,btm+3K9pS^?i8bOXgE-*1i8R7PoăU"BN\LqNrlGj]J.f]<Zl2uSF3hZLvX.PA$><7z^HzX#wIMd]Vom>?sO;QPd)&G>bnăU"8M[yuB\wdtmN$8e=KNKF7Sb$*6gsbhx=dv%<&jzo%+>]OF/v\?Q8h19F.&Au%1LăU"HO8%']n&Fsl%vg)?)sjht0D=XN.X2V:6slOGk_NtNERajDYLuw+$.XmPG:kX'lPăU"s'NlD2ly+(ON&&&6/9Mh9xMXcGIZsDcfHz%JjyM,BCrSG9EB$b*VLGGTnL:+NUSăU"PIYZCUZWcf,gsAh5NQ22Dwc2l(8QOL=D:?Ie,#Aqaj]8<*wR#r1NnFK7M6sn&&hăU"%yC.kf;G'W82Sa<mdhiP5uB$V/kUXPGtA.#ytM:%a]cVD&RRBUc[2v'Wf7;O(bLăU"BWSk_ZrU-lUZ3E^FsBr'(:z%rue>,xjD$9*jR\pFZVvCthB:]E[Yu?ajk]h['L%ăU"aj6NcShF\[RyOiYB\cC3VW1t53YxLt&VDD78pg;NT7y7\hE*t<^(Fni2v$-+_$\ăU"EQ+ZGo',f0sZbv,:DyD?t7Xq%fxzdKIFX_J<4^AG3^8FTPZ2SbZ(>^wDWBRdfNzăU"vwds<kuMD:b&35sFWWo^f=Cb:&.k1Sf=I#i^V+pBRSgdy:XX2.A94%kt#u5kcrQăU"<K966JC-x5z5QKE73KC6._Oh5M<S^ktwoWS0.WSX,8iZIKzMl.jtd1sWlHa/ILHăU"',9qJ7K-huo$/iL9>rdj2m:?NpucMj]q,deBN]Mlv+:X>%tBLGl'EyN6C7,i-TlăU":Vh2D0+Y;ze&J9CN.1Hr[<'7un\XURu'bslv3GFc6.htmb3l&+cqB=0-,N0Tp5.ăU"jK'll-f0Tf3(fyJ1ERlI=rAeUnln,T9e+f%YrkhdUKnv(rYa(N5;v9<WN)Z[/-=ăU"*6^:Bd(WMf[hZpi1^)n-sX=eo.a/UmUY+mw*d++Cy&.^[;'cx&4wtOsY8Oz;zz8ăU"S:(Ls9+hPF:mt28+vRd<wSxGN/MdhQYl>Jlo>&tT&<lm8\tvaKdrdN?4c]zs<l8ăU"_jkuDpWM>2R_-(gu%Tup(%)9%'#%-%:$6%L*2vxF:#5%%8%S%%1%%%%y24GCw)>ăU"CnSh10B&1?:BGc2jX'WkNaDTO&Ggu^*?GBV^zO+V_3(F*\AsCwx?R1UbT>7WX%FăU"98cVRn8k[*opm/O9EmvykzN9.r_pnQ]b^u8uwtrRphzR&C4*UIt89,tdj]pd+lVăU"r102l>N)KFJcW_<%=QYGMyD^i(FJXml=n:DZ*LcAUL>vg-E:\i3pF&n6[j_6E0găU"zO0v_PiM8$N=2p#MlG=VV1#k=2I\pl(bCs1b7WMS=+D/C8-g=2G(O[]wZSpu1MvăU"Q&zTb\E+g53$)X,W8%EpVm7si(*2(Sj2GHwlT.wS%LcfmReh]/l(]G>+'*#0^c3ăU"XVA\3I4[fF.Ugoe(]i[Z9G+X.GHicvW-$87]%tpkl800YC9\)_D;'KUUCF:5Hx6ăU"BYj52KHAvYiT&4A0vG/?,;u=ooYWquRQ#>=j=$ZIuQ:Cv6[r>q\u=R6o0j5Ur:zăU"podKgS1ac50iVTgJB=;qR=4;g&&V#O5uR0VvQ'(5.yk/GkOA;zrS/)*j]QkICxaăU"=M*Z6hWA.B(''NK2h->a&bw?qmT$HmE-jVJ,-f.l#Y1X2sWGDmDK6sDBvnUIf#oăU"O%M3gFalhs\(2I1>R&RVHbUJ8Sfs&kO$QH>/)AX20Sx^lU*2^W2MHQ6Vt+J,x4LăU"?mD)Z?BQ_hJQ/9jK-*lMd]e9vBubrFJg'AQryO8D=5Sf>/ug[KG8lW+-4p*iv$^ăU"pF3OG:AE:+rV4.?_0Q<\]5UHeV($jf&mT/E8(uxL5knFT&mS/m\\BcLWls7X1=+ăU"W[c(JYm0OVWUo=^E*,I,eiWKXO:oZHb4#KZiJsw-i8qI0Y(ASD<Z4jm(L99nQ7oăU"?Yi8AYUkID;o(q]1]IN-'Z:Hp;z;GnY3_[0i.68j>E$Ke54&bg%cV<=9vx21>/&ăU"M*_Qqk7x<A6GvWQ44lIK?YME^02]rL4*6gr:boE'4%T+o.+ik5BGj9lSbU[rqIGăU"iv/t'*t[6)d$E7bq]5oq'./36k5[>&22Nj%wKLab_pp=rc25'Q3^w2-BwIr.7RsăU"?-iuE0/ba(0cF66\$^i;p$1_MMYF:+N\B*OZ>,ZDuJ0UI$[92d/&5mu^iG)^iAaăU"jkJe&:[]KV?q8Jib:sUKU<fi,wY,rv(y?jJ))KI+Fh:PPL,i/=hWVyHDy:Y-SGlăU"'#a-ZZ>H=Hm^WFhZG^v1FD+GP6_AJ&M+N+Ffk-y]9d>dQu%V0JTHNF.iG354eH'ăU"/n]:av==?v]$KJh\8HUgd1c])3Z+BZUYTd9WL8no1\/swEaobY_*1X0Hg9sB3onăU"=iBsnqrRe/m(>6>I\Uf;f6^T[O[L9K0u0R*s)-M_9R9-A6xG-8%T7Tq(;6kJiVYăU"'VtV?5WjY=9GKm2kF++3G>Y$WgD:K<'6s7a+F:g8P'gEaDs^IPFKRhj9HTAo2r=ăU"zZrYf_)cNcf2qYbV#<)WdAg8P,=R(3VFH.nuU4j_Mi);Iddfd4_enqVex*K:;6oăU"j'QLX_6s?.gpPN?GHcD,$c'u)7ew[,'K4Tjs^(178*b+&,)qAf+xmWUQTE:=e#tăU"O$\]0(Ip<FLUVJ\Dt,_iaMUg6':atLt1m.-S2x^+hkhUn9Q\L/O+[sM4no%1dMLăU"clI3<d(#B&?/z&Doa&,7REt*2M5qC0wd9J8Xkn/h.z[rToW6UUKo(7Jj_S#nF]uăEND SUBăSUB V2ăU"Y<][V'lXPZBOq5R8ha-CP0M9rM)NMyAfoJm;,i?4jaI;r+8]+G4ITa#MNQAx<=#ăU"=F:)vlqe#PzubpmbuNKH?m-Y'i6q,)-g'8Rj7:my.7V[kOO\eB%v,4pww)Eq4*4ăU"j#Ut>bkJ&k_wa%M(F[)WV%LPe5B<RZbvUi>wBY3cWmO0bHR*IC?FAin+(^[*^q%ăU"<8j0AoJl[:\bkQk6S+h*;[7c5ZdQFkZB+djI9.lSE$K&G>PC=-Oaf;if\6]\XMvăU"PR*V8'1v&XU<b2EgQA.79.A_28W*gJKj^48*+A)48xB=U.M[P(oX4b?UAlErPIuăU"b<nCMNUv*a;2IcNLld:X#uV%MlIfkkG,UI7PvB8G\-HmqU4_[$<=0d>Uc]I.=NbăU"0s8D)faa?_&$>xN\z8O6eBAFmow6K:y(9Cy?Lc=c+:#?$VG06R[(BCZBj&eXoC&ăU"4/]HacV+#o1'5iMZ]0bD>SU6Rl^>SL_?9E)nxfTX\s^e*:&?D:,221=Ex6.^tUMăU"r8frwzo,vL%hx#6D;pXfaiCF]<BX=(iGxbSvI#_uwHLVWg$k%CbCq,D$WmM+AJbăU":mDD_#*ksO7$?H=/EDWE2LG4J^CX,tv13V]aEdHI_J[>Xlkr0J?CZq?=:2N,3-tăU"OW(;hq&UE=T-:.oUcz$\5IWuPX0*/S=[?gRiZ\djT0\U_c?X7>_gKzKcuonG^]4ăU"J-_ymZnE5bo3;k<R9n*Z>O4qA,'sn[-ZO(ow\eBR](Le-kg5VF0FeKKSH=N;Fc]ăU";2FUns-0tO-0S_A;E.m/\[e8Kul\7..Qbe,ik1#*OQz.M%4'<CD%H'h\0Ftf)$QăU"VZ^p&jC)%?]Cao^W8h?M%oM.kr=I]_Il]9E8o<_t5TQQtliN2l.22lvR\O_Zo4yăU"+Dy:/4d=S3HUs'Kg%le47eMsh][#c]Hn=ADlRqp[V2SCi+&Wr<\)A%8<uQUQ_kOăU"82E^%f#e9w)<lQ8BABYHbitlBPY6E+%c+(=3mN=FEbFeVB6PeJTe>$gHElX8ttxăU"4e3<DIy)G13s^Q-?BrgmMmJMhL&Ym123XWpMh)R5#.umjwVSZ<3G0.3Kq0/H_aoăU"15L1Ps3$C%Rz.M^'B2>f8\m%a:1V[MyKO]%00qDe-*mFDupaS-47O(rb1;EM\,(ăU":Vg$\qotGBVgP&z-%?jcIqCmZ:phDpdR>YartOZJW*o#K,<6J.D]'%xWQpN,=IUăU"r)GUx8&hIlzT8_)iJ6-J)XOELpnd/$ayhQ^UT'c^ZGm85C_+f:KaejUDc^_,y+6ăU"#,FDueW=HMoA;J8d\Y&=PZkS<#w/;.IjMZ//-iD>DO):LU1N']<509MNxtCJqMeăU"Qe#COJDo[Gpft8p&UfUM^Hf/VyIgeVT/FQBZsoK6E<V/4sR%3^%h5kFJz(&qw6*ăU"tE$IRtU341a>_bD\-/j0cuubXZ*jz5WXX.\DOJE>7#sVMxPozrc#9'lHcx*qbiPăU"al]%lcMb)-rQT,Ayqfd5_Cjos[Al^_:R['*D)v;ESQsxZQYvQ[c+JDn#1,4ZRWqăU"jNz1-hRq<&HZ)B)3an4hp[pZs'8R#:S/g/yQa7:lq;2Lf:.Qd_kS/$N9I&FY\ZrăU"0;bwsGHYyPIhD*CZQF/e&$U2<_<%y/EYTE,_$iy<])'+LQcBq4^0oRFuHhMlUo8ăU"vl_I-N6r8bH=<?D-'CRVHv\\MEvJu=<a8G;&uRF6R)S'S\MGD6J&W/4EZ<QnL7^ăU"L*]t[StfCZS%Q^q8c*fhyUv.:s[&2_l)z#)BJ[yUpVpCFgos?=4&#v9(R(AGNlJăU"']/N0w.6,4_LCaR8+y3%Ui3$^$Ma^4lFeX9gB1/s%\v$&'S(,D49isg_F4;:IdNăU"joU$9r/Fe,N^L,(X8o/FKM9]l*:s*HIB+V*>^A&/j_9W,TAJ?l62\qtRaU>J<6^ăU".OMxm_-xEp/*/f(K(Md\4Mu<GW.AmyrJZ?3&^PIsf,.8f(v8Sv%g4OB&Y9k(c:jăU"u%;sE2w#PJe9[A#MP&XPl%ErS(E;?Ld(81J_n2vcsN]I,jl-ZInC;[zad2?F[$]ăU"X]fd$oJ=ZULJf#$LOJh5YO/lmlg,^PWNIKc)Hw(A\\KE8U-,N>8c+hD]Q+lqpmtăU"=*vB]Sjc]3M_'?Xb?oS2AFw]5dN_vEB=x&J0&2u3ci*#jviJ8+-+&V5yXxY.90_ăU"9jPb4#a,Twzm:7(Bm6C_2Jf4ZUOX'qdH28S,JK0.KyZ?Z4UqB?o_h_UXWKuupC5ăU"3x_YI^5aW*RF1<G2fbcda'sZkt%F8K<nHSV-*Z82_&v6uW0nUyDrFKr8]A#v)abăU"F.AdciHCV$JPLY2gSVn&C6U>cQV>nSG)Ja&'iAVL9N]'1]HiSs8+\bIkWZv#7-_ăU"_Bawd*\yYZV5r$,OBN%e.KXiQi'Wx#s&Jg7<3#Cjh,$$r4$RJ71G4hr'E6M^YrnăU"LW=#/%,:0lF6B]f;FWqjg#(j6547cEA>F_b<iGD3QsPin,,lwOS-b?yuh*MAFH%ăU"/M^13zB/?su&*84sj'%>9J,_8RH:,QR4g=fBD+S2dSUB,&YXgsD'vGQG6K/HPO'ăU"C::z-Z#Z6H>.bwN?;lqL(m>OI8iYsbehMFF9cI*j2diH7.U50-#_euqnC7'7Kb%ăU"H\C=8d0h>5N1hs'bL<P_=M4Lr.n:jC=v<W=Iq:38'xPimWJHcqpD)S$wx8fYPf3ăU"]x,]Q)mn99vXar4O/pLpJ#fM&(_Hp/zp>r4A^t??^Cc(d?cdF[NT2_&Bp8SN'5CăU"hn6pjd^(&x/=94KJ:i,4963,p_N7lW=dknTn2;o*lU0+SsU.5A$uKI^TW<LvYRLăU"]dE[8HoGlR_#R6kT]\4#43G3^EK__>zQf&/S9;d#CN'Ss(c-Ji)6vhvmHc0MZ2XăU":ckDY0%O1HAwOF55$\3fQ\]6Adk>R(Y2V]C\t01(UyG9r$M76%\05+k)e%<JcM^ăU"T,q26gm%+T3*f)ddrYy,L:Gx7ddm05(O+DjQnK8]\CE2#4s*L>gQPdb+l$[/54LăU"ydEMo^-,[aTFUWKa(X&[9jMPfaXaCdrrnD($INUaJXWiKjI0mU;JK'K:zc0*40yăU"w\WmC-C$COvGRRJug%nPd/V_sG3jYe<AdCQY7/v-:3>WY[C7fhv:_gJLUBBwSo:ăU"G^Ke/h$3[xaC+pWLMxoHtN_S,&#wEx0=$gFFt<Z?XSD+8tT*Ptp-63t'6hDDiDWăU"cIv[FHq7,ig<5v8E_ccs=$o7CFE/=1?3v#Ag#'n=[zroEnA](1YU2GorWx396($ăU"6Qrj$KxN[\]zj_kE1MQ/%7jW=^4Bln.TYj+_a/$g]HaunJ<Va^<zn%fKIH;'6t,ăU"xdt;ae#8MJ_kb21r8>v4HE2qQYGnGo<Nl&nu'b1?_)wqo'k+HLeENZ1*\_^<ApgăU"XuYWLmSi0nySq;#-7?zW)+K>R++p6R)5,_1]CPdt[IizO6j\?lZrWwO]6-MQFhqăU"_A,lQ$M;g:c&mcED-V4>nhk8$c>UtZE#$*l?WzC.**jSQNk*=JlXTJQc.$FGI+făU"6B&eZK;9qt;q9O%:4:$ltf5vB9mf%z>9vZ5BN^7[67J6O9&9uT%up()%9%'%m-%ăU"T,/'L)14TM-7.%%Ve%%%1%#%%y4MGCA>DC:S1V0Bf*;<B[m5aw;lBqdyJoS0-*săU",uOWQgn-/&[Vb=IAE.j,\vGh)0C27pPX/6l8wmE)yao'paEHFZ?WVC#i#ydMhddăU"d'hJS?rnE&PX5vTBP#fMb=sasveJ6Z[et\d7:$bhp)*j<;.y$?lP.U7G]\s&MJ9ăU"\;OcDTsV_8D$[/+k#bJg+Z?.l9J$t4J=x]lB+6);DAvQTt*e)=N7aF_kN-ASw9BăU"_:-bHY4QoKEbUpB6$Wi.jL-6+2Bf=9WpQQ\i*%NagstwnXj8N8f/#4J8Blm-7S#ăU"Fk7Tl.TE\5MnYHp2xeiDJ.Gx$kIr:I0Lf#kJ6rSoXsJ*hkXDb2v?RKw10facZAEăU"tv9-LI1[[gF<MWW&Y[&pNU:;\^jj1Xa6.(DW1\[spt[uY(EU>Ymx97YiIMJYg=LăU"6,#hba]A5X'dTCtintAJ$aMi0*Yg1Xt8W(I?=s]i#E7YmQAPVxiJJtAiLEPz/76ăU"lWm5)DO<fEdIL5x1fGWivHo'n55T(z[qa/NIQ5QXVXCQrdl?7V[Q,6UtZfVvEVyăU")b/E(7Q5>fsMNgV505Oe#n-58rd)m(aEM0ZjYgkTh-rgAi)kY,;3lJoeqFnhh7hăU"9(cduK;SmDD?ICqhI]%y[,4e&u:9r2mbphJeG&Qjy;TlU1n$Ch=3_ZWiE/e^FhfăU"b4nNMP_'*,2jAQ8oS,^9/N5=6$;SU7WHZtJ0'4psmIqH+]nlTmCsC9r?OHq)Kw4ăU"W4;'W;cpJUmQ_*_0&WXQW)JrekUoX_Bob(nJDo)pJV98bNZp;9nmndWX<XVG_R&ăU"3ZXgEUPx_,UVi]j%*=_A#m%3fXJ]LB5TdR:/_1Tt),WsQ[9Ena<4bO+-UZ=Fmx&ăU"[)U9Cf*I$JfJ*9#ex[z.mHv8cf6Te=4=4L1*6gj:G/FWzP>&.&Abe4pTQY61'JuăU"cm;.U]wV7=8Lud)cJLg5joF5q7+56.ksN/G?Kn+;qlMqI[vWgR[BaGjA+QHR2vgăU"h;$RNs3GMC56Za/,xmW8HfJ.$;h$n4GaADl3;*'I,6Lla+:\*MgZg]+GC5I?I[ZăU"n=JD&*AomQR3iU3i/vEbRFj5LI>YZbj=UGgPshQqtRp7>io>8Px(7_:yJ-':$T.ăU"tVpe+')Z^?UAk'=A6J/UGK'Cmv1^JGKInB>&ci,n>Fc?G,+gFYRN%bSL:%R*zsEăU"VwROt0a\iecrLz&CwxQ8i=FF3JOxmG<<XKl>wYA#ea?awY.WUQex6+9ivBAM#o8ăU".j_uhg=:?^&G/Misf0L%e&3Ll_?FaCU,6%%]2'3Hhr+k(%0'_u7eRC/:jT2U=NlăU"92Jj*,q[fZ%+B8Gz7LP]&eoB[kNDJ#Afo(7LGK10Oq%mfEMF:NE:p_8m6cc=g0EăU",\Nw$1<UOE+7K:c%O^k5id+R0=E+>gIA1W]eQc:8IRKhqVM'zQ>KRzzrrEyTHuRăU"M7qCo;L]Fp2l##FDgxTG)BWF,pu5KhqC<51:'B7eIFNfK1JnM3HIkERvp0JRX[DăU";:(J'EkhRujSb#jB?8dZocNerX(ElP2Q9pK1CQ/Im59;YF.$;J%5I.:r9_#:-:HăU"DjB*8EemaF?lOv+a]+'fuDUL=E(GTdxEfL4GRFp.QqL%qZ[tGr[:X&Ox'V)5[I:ăU"V\6^EKne:<CLa3-8B]W7/'JVR.uI'=q^Y)r_CRf,XO$A:IjXFm2.^V,)ho=Z'<UăU"Zn_^&xF3aYy,?X64/XOc-%t$b0:8vm/9E3K6TG=TLE^gbD2[q]E+<+hqa1<MZ'.ăU"\?r7n(LI1(0xoA:A5$ejCtR9Tb/xNJ1j1H&#6<cdb)c(;'0))0d0PZYTrEgWNPrăU":v=wGGGmxW8BeU(N;(SMhib6<OxPQF[%D#qIYz.^J?*SXFf)0QBnMroFa%g8^sQăU"MG(hF&Ba=aAJKj]T:F&GX?#K_M1Jgvo*PjvErk#<.c06krH_yV]P(SALIm(U1$\ăU"WJ>3A^_dtCo9,veH.7su7.R6X&SoH?(t.xoX,Y/CE,b>;D96&o>F?Q?S%6,ZO/9ăU"qm*OFY2/+t$[_XJ4F4KQm(a]M1G((/cP&fXxPC8z_U%Z<-B7.^IM/tzA(1#h9dHăU">iC8;+=T*#yy(0pid1qPuhORt0J;C]9(4tPMq6d?Y(r%Bk,$J3hcJZNW,<M$\OuăU"#W;qb<.Ct2IH+?nMe5*jMEd93JGx:>tbn-:OA[;APoPymOw^9)Q>J'jZ5nf+s]]ăU"&0Ld><5)93h=>xW/[<WQ+5ZSqHqAGHha(Y(0Q98w:k;GmurhdGEaYjL3uPC;1[QăU"=#M9f#]ucKJvT,a8vTa9ajgrib$LW&JGgNoFNlQ(IMCLih$[rY?Kqvo1Nd>sUB]ăU":R[^wS&qR7'_7,?3PK9&\A]_dz2SvPkX,RLt7Foj0r*h[fkK:Kma#fkV+6n?sZ*ăU"NrtjVI991(kbD/KQxF454:^_s%;AQofE(S;T/TO;s1=\O8FdgTJ18/9H-5'[MfAăU"<:b&hQVFpmF8cbp/1d(T%6IiwrbKC_ezaaFUs#9n)eAv1U?)f=-6_Yi+:>&%t\0ăU"V/MHAWvqGJNc6r.e>WsPNllEc&-rs3^ciDS&'08I_<t&8C%WWtNR-N$VC7TVnWNăU"b=UCaPRx/O+Y,'cqN)8td:pOr[&OY7P1+#J4#856YQmg\V9urlS3?'3=8TOT#Y-ăU"IdX.^ns2*_LEo6fwqW%hYq%=shL]0/:Jvqp7%Kp.[JO=\O8bf?M>ZDIj(_Unj<ZăU"B[\8=Y^ORJ_rSM38SUOW]>w'r9.M10aCInuH_Y8Uf/[hJ\:j?7hMA0cC4?8<k7*ăU":,=aeU]Vq-E5rMR%%gDJLa).8kDlg[[C.,*<$gq\]1JZ#9AJnr3\)GLH;rMklLEăU"i4rbi4R1ZFHrscTTlD3*n&0e:lxgz2?w%a[.G&(25quZra>X8Lwh.,c1t%I923aăU";$$M/Hv,?),rwvg+ypu-#;xzdQ7AP'Pr7/&n8\g.G34wTN2+LM.fLuoEB2*2zy/ăU"O8eMk%l^mmtLbU\L$'5vl2-G/\V.:LuS&sm%/][&8n(?FN-CUhJ$H/<F#YV'qodăU"4L_aKj2:D]wgP4m._aHc]9,]MxJ*^BIM,L<_IsHA:4x#+N:k8^fA^d*FR?+.BGgăU"#j#o,XxHUv)shOvDVx[a3#t]5:LV)5luR,jj2Wvsu$C#&KFi56;?03Z^eXh#0]1ăU"kotwYTMr>2(Upy4l2RN=#0=U,nf[BaFnh?i63%\fr1EOKI'fI):q;OVHn,mOMZ=ăU"TMCn:NbA=,dwH6#n_%$n8AkKKEDr)(%uTBs,%sEbmW$*B2,J6lgmg[eA49HHEbvăU"52A^\e9$v&Vbc.5bWccd5Q%m.Z/W/%T=sFB-:,:DLfZT5p-Mt%**Nn4zBva4_5:ăU"L5kfU9Fv/6VRv^-37I=9'5G\ld>gCPq+^HIEalILt8924JTX&p,zsJsBVlJ#V:\ăU"1NYNpP?J15R/n&YBmm.M$?0U'#^QW*gF[srrlRwUiN+NIkn4ihF4cX$&#2wEGB9ăU"Ow[HCKo]6jeu42Z<7/N;pKbmCMDdjk4Uch'\^ZW)kH=nH<a1Xy=ND78X28Nn6qPăU"%'IJbUdiQ4kIxyRrYGm2UMq.#'r43ajaWB+4EaNMald80/Nr+#TyvTJjuaA#&m>ăU"YN'rmx6NA03?BNl6ObIf2-l^HtBh?W+Z&6)[+uRzY41VgaGu_\<IAK(d_BoX3jHăU"vH%mddS2;&p'2MQIT$<#E:cFE&Bg]Q8v4F(o8$Z4LtHO__V,fneShkc-g-<jCJGăU"6]+d1Y$h/q:1^OBC5eNbrAaAGEE6%]+-YM*+]G(A489#/]iV4i&$%qZ?,=%O0#:ăU"n./\QX$+Ppmt[*Kr6LiBNfce*kQrc-::uCbW%8X?FAE&l^-X$,-\[?15:SAV]Z+ăU"?ahZ*4d'xW9n8Ze2XeE&LzCehIKn:2(SDFe(y,X2ayDF#SQeYU8u-bfD[d%TJgBăU"3%\YmcOo[q9/)xn6QD)5S=&*F\:Yy6q4RC7;+)=rg1kDsh0VbRC\y#z3IczAVhVăU"1A:+Y_1NX7,>?k1i>3K8Y/>=D=Zf(*I0cS:sZ5:6BSp)^RWXQ&Y\bdvnuGI$yBiăU"W5))g5]=K?jMFpdXbo\Y+4CfYXKNx$k=Lz%HgJzFS*0qh5x7x#287A&<GbBAk9]ăU"mt9Wd.Np;e/YUad&*CsI?coKBjlCWOKefgtL,Xw[P+TFdRFZl;q%?Cxg7/?b\jqăU"fVgc;(Wsw1CHf*BAa^Aj[8*;boJQUY,4T8>5b]k7]$&r\#_cfdzBs3J^m)YD*j-ăU"-8+a/vUa]%E0Dk59tm.Jg=\k<z^J+:4+/8m^7tT?nt^NV6#$K20KBwy^(IN]&-săU"Znj>[MV%$[gpmL-U(q-#8W)J#Ha(>#V6uUbC)AM6)0yJTs\#nOuf#I8uV\#f+iFăU"-Hle]dUy53rV<pFV0Vb?svLSNe9u1sn>gV,:uTjw[#*/D:mbePS%7mi^CggSJGNăU"A>j59UK75)(_md3m\kOX_Q7u9g7ARY97DYv\c1Km8rrtJ32)Ci==%QtP%Mr(E*]ăU"<M<ws:eG/ZRm?Uf.jZ?DaEWTN(+.$;1jdL&-1geu><PMW:7-Qfck0_GM\uQQ;ahăU"OhgWh>Sq(Gb:Xz^m#5yvX0aTqwI75uMludhv(OU>D,3:+^^U:FuNDV44)PIw#<[ăU"IIIINEEcRlFX7uI.:_tn+t,.;nSJ_()QS^y+^*n_y-igo%TjJNwQHR>?J4^C<fsăU"sfOpw0GwGfa+/)Wu1xUob%dt[PJqB&AVnZf7]GwY:c$$yH5O3WoVWweTS5e?+,năU"1nqTd'(R\l[EP<PyGlw.a#ueZ.g_Bt(GX-\pE>sW+HVLdtKaqVL2ae1p+-fxu3găU"X#d(<l]xwE\-sFOPr;FGl*Tr?'MnaQ2x8fS9^J.rjkxHC*ixz6.+,btm+3K9pS^ăU"?i8bOXgE-*1i8R7PoBN\LqNrlGa]JDoNZir+rf5Vpubwh(u2l0/Vyk$y12N7dAkăU"=uIL]L:ZWdD&z60msY7kzL^$MnLs]lYp0_9b$-<BlQXtvBE8mtdd>)5d7ea+2oAăU"'b2Ap.K(?m^%VN9RnCYS#%swO9La9N:&k_#h5E*%is1.eTi,s1>v8SV_*m^r>PGăU"Uwj#iNF<f6oUl%o_OnWqlGbmP/*qE-d<<SH&3qIM2HMe:Nt?NoC+WW>aM3^j.ToăU"U-(v3*\D4fETJ2lBnc2Pp6vjt*=LwLIgZjRUuhOhh*,ve9>b\,l0_\T03.uPM[făU"a-S&shP^vSRqX6lpPq9Nr^.FDHi=f)89wO9o&dSKxX=HnFdqxd7Wk\G[GNe7[AbăU"#B>k.gZc=.^5,T#L_1W,4GV=VpM#4y;1EB6Rt*$dK2VM:m*&6JuuKoXy/CpOjdfăU"+E*dwV\;l-N%H<e*g=X=p,SJMp=LL(,mJ*kDA>sLjalU-GTC?Ko'vVZ7ukEqs<uăU"xb-c)3Rn<.l(WIfc-kZ2o&Wu6,5shx2%-rG2[e&2md4ft,xVIJgvcc++STpzdNgăU"8uCA=1]WraI+mQZSVD1:S,_p\L^O[J+p4Dpvz8LfnQNV-S]:Tib\avY2t'PW.O(ăU"/9fPg2Yq#<t0]3iDWNtnU))3Z%CjO2-YHnu0Y8.,784TRzA%i8.mW83ObC9F84DăU"<kwnFxh)U)>;RG.qZhOO8[rAvo+hir6C6&ba&Z]u7.S#Fxu*oF8YJ6nqU/>\c0'ăU"qw.D4jORbB]T&a&HqG%gKp)Gm&hOJgVq:M:$7/a,Q'4Z5?N+.i1^teF,.u'0LO8ăU"Kul>MDc_z.[Sbvp]LLX,FmNDVx2DPE[4bJBQ:l=.B.cioJa<^'.)53)bIC^hBuLăU"X8=mEVoB/syn)KH],d9Y+k.i0&DEvo&:Ga,T*:v=Vp\uMLtnH2Z_>F3KzD+cA7yăU"A45B_+lB8mA(eh?K$#UrYY^c_.=uVuvu\52?<*-'M,3X3QoaDo1kq+NuF.xj;$văU"uY:$$.Kf>Z(o$+$_RFkn3$O/J[N9+zxCjWNzWU<q$P5k-pA9S*Sw&8%cx2%up()ăU"%9%'%[-%v-\'LOW9S^?5.%%]W%%%/%#%%x>MDA24LSCGCNF)<Ba#06w9g>x,[]XăU"BRC.H6.IR^b8btMoQiM]9218vlsj,]P]Fj#(Bo1XFw9sc40UA^;8K;4huAi]7H8ăU"V*)TTHc4O]3odc_10wnq<x0d>;ZMPons4Cqc9/JpPrWR1o&hRSmcbNbLctx3bbvăU"t3g;,SY[s?u*_7QdYK8Gki;N)fVCM(yqD8dNk)RtK2H]^kXRO3'F>5vs4OT;p6tăU"J;qmv^.<OOP9u-OsH)2>C9yk4N5(*Wjtze,C%UCxF0lP6>Y4*U3^[Cjn;'pvqW(ăU"G\<QE0<wnc]R>1VDd(zhjgbYP(u4#hY:[n/^y^J2Z.VJK^p2m32.19YJsyEv*DcăU";.d6X;GYxMKsDL;:j)'d?8beq[L3^m3$D*%S0Vl/v'qJA&B+-%F?:tbTW)*0l_?ăU"#d%zuR<%[#\c?W2i:fRA7NtnDwrDMrcA4\Qp058$D\m&YZ7V1h^hRviX7K.kP[oăU",JVG'r,UpnO=Zf^3lSd,tTnS>R;==xCn^bee'ZYOZCS*:'j1OwU4T.Un+Wkg,$văU"4p.T0ZM(Jkz;KS7yWXH]i=)CmpWwCMRpd\M>:Rm&;:h-2&PZ<qA]RmAnRbl6KZKăU"+_R80#:4=KO^]vxHVJ1</D1b^2z2uoGbO9'1Y%fJV-FRNVoiK=iM7?R:xRDpukUăU"b1hVNX3-,J/Y^CwtmsdRJGiOHy_')AQ+JBOlu2g0wQ.KN4;<PZ=1tKE1CAek[R3ăU"XD-*KXSjWYpVbQZ>>sGD+WhS<_3]O=h=:86ZjE>:n7M-+\?,D_46dd]NOXg:q$6ăU"pK,fwv[Fe0,tZN;tUyd7V4K/9]WwMWrOmW1K%oOB1sLXHR>XYu31#B95Op:%V5XăU"3U8fE/Gd?O_%)nai1</mw5-i/M2D:mWT?hbI[[YL:=<\F=Zg.e3^-<6>iI6H/*+ăU"[LlsSTo;h8LSEWiUZJ4VEg%;_rb70Di%_#2LN%dO&w'W>Wny<rsc#8(oNA8$oc0ăU".9ohjmOO13z(_wo=4_,0i2O0Y48Y)/EO)fT=JVaS.+.3d,3gNI8=([*Uk/BM_obăU"u\tLe#p0\Lk0x(_3xq2TCcCSriJ12/ih0#K1FaS%J(VOJbJa7:&FoU0)%=,,SkHăU"FFAdN][bE7k#h&)%IdQfXK3F31trHMRj;Q<KB,Kd_]1\duQrnVm#)pI73^0Z*53ăU">qi-KY1X?126(CCb8662pwf=W:0B;07Ql?^>7/C0AI6,g5In1YKc1E4UH7*05vfăU",rrcvlHX-Lcc*-B8N>r4FG[/$HU8/p*U$z9d'jJTM%aG.H-E]8<E'&Ni,&'a4qVăU"b*h56O\L9M3Bl]+2Ei9glB6lQ<BWjb6r.)gP&,(G)-56epQ'G7e]Cm=IQ5EM;-VăU"pR0*32WA/b[0kkM%Ba(m6$Z%BR6Bk&LauVb0jVvM<83\jeBI2J3)y7g+*g':b0EăU"C/IMe^3;Q\nLw%\cXHVu+T4OGg\(opHl&6&YX-dC>nxY8M,hYYgkgkuHPgP>=mHăU"FHBATe(A,,7us*luEgBhID?1CTWXL-_v(,D_GNb*%=]p.9-ERY[AGBAIo>K0kfsăU"&,ISFFh3%Q*Z^]z,$g*B9&X'/Fs+i7IU[VL8DET0AD*b?R_'J)a=$mt;/?6srxlăU"0W1<m&5hxjj.rGf-SdKa80+25YC[cbgoQ&GY45l$/1j$C1WmFIIj(FS*q2Kmk4)ăU"JyXBHZJmD7Efqe[I&8'#Q$PxKiC)[:iLoB*;;&qbm:-p]-&tAQwq(q/MiK&ga,băU"ukHlBLCJWW;6:trA1her&s*ER+j2Yn6C;Ww_F8901)6fmUZ#1KYM3;66*DJW'DHăU";ACt>90,a7,7J1;-;z5)S<xRU5R3O5GWb6nAd_.--qfoK>#<9?E=M+':8=[cEY0ăU"-Ymqd1/5#^IG5CzM*e'nPeGcvIu<cjReTFY/'cbb*GJc]m]po3gVLUjn?EC,YaoăU"_uURHSe<u[<anaHtZndFZGc;Ga(pEl$?;XBt:2aJ$?*0l$YhPTfO:Cg9/TG3L<*ăU"5N0oX5J?1+rsQ+.q/o0&EY<o1(-28R:4uLL]ef2:\a:laN)l'7l_;/(3XU>(q(yăU"WT7u8mO+XPL::xqgaO=i$k?GOjPL^9?P.VTI\/epHB^i83]b5PER$ammF.$]rf^ăU"vLQdRp'KgLbJYaIuM[kG1q^+.v<K9]0Ri9v))L6e^(&<9hIou[,',EG8]ADRG5lăU"k)H95NQs\L7TboZhdkz0t*d3BMi6)[[[yS#(A)y#V7S=o2U,hIoK]x9Iy0nkjDDăU"R]DP[Ohsy?W,WT:87&?$9tl%898aZe]#0E,JQ6,85)hHl(][$1P^j^P2[[Y,OXVăU";0v73eBIFe1Ylm\sS/=bi1OA,='vZ:UnPJ?Lk%(FDR9?EbcOq=;KcqS_[)\[g%săU"51(i])aRO+LU.,XBdjksIkRuk_&Fl#70G;XFT/g-3#P=]ou2'W6Z4sb=Wo^PW\văU"&fSL,]fnu[Vul(s<:1T'we[hCOosk&m%mZl3qgGd/E^#*29GnWk6.U4;%uuBrFOăU"6BL8WZ>XJocdY)FEHHWgnSv$VnR3'L%?Yc18i13kN.+yJd949uHr+BZ'UvH;6C&ăU"e5BRR'AD$wxcl&w6S]7arT<\3M?hCMi/+lBjXq7Q;agI4^qf>U7ekdv/QV^Urd.ăU"Xk_z,GW3aMpFWjbdH(AA%9j,[2KsOS5HBm0K5#25=:P-re[(2Jj\c]LXM%3)jIhăU"KjC*-$cMYX+#/%U6gCoI'*/Dn=9Vh:=Unh/VNg3BOh>hicPJ]KqfArlI4kMz+LvăU"Xgqu3&$'>aK^f\t0w/_&j_(r+<7p.NW)ppv>_=LqO2GJJ_h[)uVWILjy>WTaLwMăU"+Tva1JX.[LBIb2h&s6q:b&fIHFd/Eyp'$[&_5:olt_t(8&FI2k&Vu?rRaUu9IMFăU"MiB)=3bW:8*s=i7m8UTaZ8E:SvRe5yWTN'7qG-Z]^\,z%Map:vqKF/g+yF/LTf1ăU"-s1f9No.XbuaI%m#x&&9]M0&S:JG$hGm]SI6AKjebTuKceaW1*P4TyArw,;41rtăU"n6T=n.o4Y^[ZI]O%C]d-tQ-hH-QV68rgXLd;p,X#=HfTF*Ah#SrlZrvZfr^djlHăU"Mz$jVNu_cC6VY1%t^UG98a:YTdnR&SFYt=o2In8$kaFV<+nwgFftU6Fa7*)h/R_ăEND SUBăSUB V3ăU"p?hdMhbTyC=.<9Lpi(un:Z9#lAIYrh'X4J*KO,#3o8zLhJ$9WF.1zky70aKL*^yăU"5:/RdQ-1rneS?7j3]Q4DxHtahH;S(xS;k,6Ij94,3IgGXw:NBPMHX-7Jx>0wk5ZăU"_<jX[fcb%Y=ikgtlurPs:uFx2RQ.C[yZbh0_<l/>=1;m4=C8O*7;yaNb5]lpom/ăU"iPFS\sJp/OEL6XW^-+dYhIT;DxL<J=A_Sk=,#8_[rl3][S5bpua<ldK?H]9xTH7ăU"hZ?4t:p=tw3cSn?+PcL)qs$JRwYBI7JnkWpa]GV>>(j%k#[H/?Pt5;2GiZZ:QRpăU"L^]X2&[.R>UO<2+hViJF\Py;sLh4,WQmdFN8N#0qEVU_,etWnE\ZUTJRD_Cx^JPăU"fSpJHN,KIVmF]^QbH%>bphUAXsvn3h'u)wpm85w$('&EmUpO2N]-#+Zj89C^_COăU"tuQwBdpi]:pHAatO[K_0YY,Bad(9cc(?BLqTIxs6<tFdW5Nvt0vOI1+bW\TUIEwăU"B6(Pjh<WGkz8VU(7)QQQZr5%O/K0B/r*[uFwNnmx7T8n:,.Yt=0Zi_wEA\q*<t%ăU"/UtfmL]7ZEk\Q*5zNi0]9)GE&6,Nsy:Ue-uEN04GqTNG0+=05K2;3D7c%D+OgzoăU"MG%3FCL#V6dbaA;5G))pIZRSL9f6oT1y?:ir,zSBX=OUz,*cL^_DZ2UqhTn#>TUăU"c7j,bDQ3$_?lR<<6B/_3WBX4Gj6,:s#duvNJE,Kv&5gk6TMWB70i^*p/c/4cAonăU"U';0>Ur9mKcLa[q08L4lWeLX,-'U5rF:&dETuM(Ou^Q1bQVpLWbYo,c]7At<^IJăU"_WGCFp-I7hNh8xF=F$aoT)7a#XukF+M+#L_XEj-u/+jkQ7sM\]m+cp,wkV\G'lTăU"YK9G.<Rq;U$s+IvARCS9G&()7W$p68MwNnzbA[MR2=E?6SNaa*Vgb6];SMiwwOGăU"<*Gs54wmTMJ.I=CLkK'RevTKH92Hp;Q&]Zf>iFo>.$nEsm\Pc2jEq0Hf*^]o6\băU"l(83QOweY;W\/y):+%/LBE0md5>brlh6C[gsji_QFREh]sch)lN/f$r%sP_^eL<ăU"d?UyZwu\]Vb*-_h*6o>6T31=4uH$\3Z=>E<cRH9Z0oWw>nM$y_-wTMAVuT$DFEiăU"6R.GZjr6albKc&GEO]?7,^CGM2nr,K3#V)6w<EfY-ALs5C=3bcrkw2GB-f\#o5wăU"c$hg'N%O&cYg,Y70Ktm=rGxF5.Lwa>I&_ou]9)3#>zK4TRi2qUsBZR79Zen>c\NăU"Fm]iIpZGJ$#f^b:?3_&#p/AK.^X[6q=0H4(_Pf5'pp(3f4uveclxOeA8P4$$Z:dăU"#<30n[sP5PRf?f3[w_iHLicd:mSO8k0K5A(1U4=.)Ar<P$lUrGGK)G]MYK:zXlfăU"eNXUf9^g>gB>K'$$Ju8f,yIZuD%AUhi]:[A_/ln0hp,]-3>yQEomxUfd8nJ]Z#,ăU"'aAe&T</QRc;jD*G5sA?>;ap\XMn%xa;>lR^jc(v5A+vsohMfogsQ79;B*XCnLHăU"Gm^TvVVZU,#m[<=#_KcZZW^W\sLnfSbf?71^'.'pA.C*_kLmjb7PJs8AJF4>m2lăU"Y)+N?%E9SIBEr##+7nHLr;<C]iTU(7MZf8<Zj[N>dCwv-QE#vTpqF>W%6GL;_lRăU"lS<X>(8aS,%=kCce+Yv.dxT9zvl<:u]d<Y6#v[Oq9gjlNB0OM,<t1q()c&(h?l%ăU"2O2MW2Fbj'4AXg;vP8VZM3C=lRJ\S#uA_nCSH)pVzz1C$s+2=rbF?X(V4'Q*DLQăU"LAgus5[9hp36Q;d&tT$S]8*JpotGJW4gfaAs9sz#zi.+fxZ7,DYW'_u8/<PI\A(ăU"uo>+uaTC)T=gYq$K3KoTo<W2f6Kr_c>OD9*^,,;-?<]JqjKr,8dp2cURaM[TzNqăU"l.joMhk%ULs4id;PEV;PRX\Pg<+?Po8W]nU,NxAZIAB]f/W>k;;=rZFmfvLqZMaăU"4;.2#mL=L/R+'&3aZfL,^.YOEjhin$w\_LryTHA.\S/,sDzdMB/O:QUNu4pm*X3ăU"A,XBY,AN9D\A>]X;W\9s^a&#7Nf'#0$BF$-]kTFl0U<_'drrx>u2Je4P]uc8.%+ăU"rI<DcV6,\2jq4B(;TjqwY^=u_3?Ri64o($7RcbdBL&;M)eqn=2V2VzNh1_TzP.OăU"BT\*()\eu[l&\'dxrdDy9LNnX\3C%Kp;AdJk+Q?)tq7,SP+<[ewyoD*y^+V[rj3ăU")[d*zQE,J8g_Dt/#&[\YH76ufe9ALtRwrNsUhU8Q9Tww>NVyaju,/.S-]8up%()ăU"9%%'%-%+Y)yLJl]Iw%B1%%'-Q%%%1%%%.yj'y%wtym%SgfxNf)<B]Sm7w;;&rd;ăU"Cwe'b:e*uZ3RD-20[<O.=M_T)?dTW&[f:Fh#aWFuvsdg)h$k7g]EE,qDD0'[/mXăU"vm[bVHTmY2;>,.4;mY3w2W0JR9/E?R;F1hS/+]pDR9j9&'L&tAI<g569Xf#jS=BăU"]_SAkR8%k/Gs$-'eU?Eq$BpZ'Z=E.*YUU;;F($]&/1eON6qd?&dOECHDMqode%tăU"$/jxQfiGvZ1_Ew9:[JVF[SY-eunIr0POp?I.'j:S*9uV-,8I.F$;$,#X:u7.,RKăU"l&:8N^jIu*jvNpEZ0\3,vrm5SO)])d$W5[RcE<PhFHnF2pGA;K'k0*bG9BY.Vt<ăU"hxh:UHgT.[)icCtiE>]%XcgMEIO,eN-CmS.#XpzBwO/lSxUMomR]xa91SU0KibFăU"\$+5cRjw<$29\r:46iRm0AjDl/?\Qq5QbW-]W4\TE/bARcde*0]m,g'WAmiPC#MăU"^&,lS7TZ72_n7u%OA3a#-o*.4PX$HD?C<m9?iwFslw#K\zoLVj/#ZXi)m,&eCnnăU"dN*\??d^d],?f>abodC$+'X(3/y(]OTkXfZplmnuOM&a2dTPh;jA3M)*),Li22VăU"g4'5JrdnslPp4d<9.h$L^ZAf7msVtrL93S)RekYAbi&QimfFH[JTK5KIZUUd:N+ăU"m(PJ8'Lm:i21Zk4]0nH7Wu\^K+[<vA:ti]>WKt/5U&:q0VD>?$N9Z0M..;FAT^VăU"F1KBh>jG)vGqSO>?<0zwBbuk90ExMB>7)T1m9UYF7FgCkYRPqX_uoPn6)(G-)=;ăU"'xM/Qi(jI_:F%d)o[K3)Y3KKt=xa<:(QXs&x;UVAq.c.[lwUf>NG2R<v-X%N6#KăU"_ESp=&W/,7F';'pPP)T[*j0:/585A/7j&*C1GAYQ'owu]*WRtf&\&DM)Ki_0CJRăU"y700A9i\\(?0)t%dt*o37-\cO\?pXq7V8dfX#85Gw5:caR/j>J^W#<6i?LN5P_MăU"JQ6P22J0*n5g3:a9_dAd2-TW:ji:&[Tvt(10BF.m1>Y0Bbg<98GlxQ>%'v3/(oLăU",;MUS^G5TtgmaX;-e1(57dd*J2a1uLU-0Afl/ax$=ovv(xeK+t'1DPGgtW^&]:EăU"lsi\T'C$PE=o=;JC112L%JJ0NGutEuT-(2Lx-lrv6^5+60P\hAeGs]qOwgU(Jk(ăU"(ip35/CBZeL.YZtBMtVlE'I(7l8:\%5QNRH.?'Xb0f\4AD=1WelI$sxX2+Lw*]LăU"h[*=puK%c*n+=LgK0j]4GE<iPV>joQC]#[gxG4v9?:^LU3;D*6_D#N'8[MVLw$\ăU"]_.b:4wCN#1]tp9F^>v)^*yu9LVNB>A&Y%A3NGXNheTGTw7$vbhrpx'JpMS,_[CăU"N9%zYJmJvsi9a>m;0Klic;xc/XTUE<+pXgnQMEe:3hh<12Pmt0cbtgF.*(xXg[DăU"C73F[K^i:s209JUXaCV>FQ8u.suIOA-),nwBZ7Noeghp[/;&Oho3/pdykYkyV8văU"PO4HTuMm50HTdH*rZ1It-Q6ci];'u%Y--4\*:gs.Z_QT<95j''koK1#W#y#t74căU"aygRZHh%Lj9F%39LAJ&j?7L0+0NA$l'5=A'^XPWb[RQ'?6WCB/RgSaNL5=qoOM)ăU"<a-a&O?J':r^/t:(+0QE2O//54k%3Nc9:S,r\DMSV?<5PxjeBDZA)4WC3:8rCeWăU")PtVO]e]02GIF>y3c:Huc2ZOeqD0ZN'E&qim>v=(6?rW'jWH%telGV5(JR0wn5kăU"ATW53uoVMqEK+M4coN1jD_5-KARZ),N%Fn-OADWGR'_hk_9ZRuievf]MaoCycWkăU"53j7])0?QVjSjH<O%S&)XStsu<Nd'Y[SXYINc1h#;tTKv,Q#IBbLD:TLV;D).r0ăU"i2qC74t/pZ%$T;(Fjc:Twv0%QVuiQw<J#3#IT'4g*/\z'M03(ei]5E,I]kO<iBeăU"Gn[LMg#Yo3+\Dd$<If%lp=Yd7nL%Dm0n5lpS,Qjjm3[<12MfP$S?uD6cmi28z*.ăU"/*M$u(t.:-BgGjq;OKf(,;HR7fW4dKM=hS$#H.$*>iMnBA6,S>wiSJsV-X5D4I4ăU"^rmF<VpX5=#:o=<D5/bR8;lo0xuG>%wc;GMBfH(HBH^&sR8NO93rcb^fpd4+GzMăU"]^I^^_kT%Drw[)x-'iP5#PCA>p5%s<L\KEBQ/Lp,WKb^gL#Xg\bW\f_Gw9z/M24ăU"Sb=w;(Vk=md]a?NAR'SE\gRhNjLN3UVO<:QnW$OWx/GoHIJ<4ROR05B)2YZgJ5'ăU"l(&\Xcm&\M't^T0jXvg]*D-E]n.7B2I%l0Bd_W\AX3HC\LqTm_?qDGMGI.Z?ZL$ăU">%ZEhYJk)ESd\)\&'BjM3prz'KN['Ln,whXX_OZr-SHjP#65tS31z'Gd<laLwC.ăU"JG84H]MGS#H.mev8MRAfTIGXI6>q9(zRDB''cU:Nj1z17u;YJ)/wudgSZj)i\t6ăU"RA8:#1g?aJI]FQb,SYQp\?k)s+mA>PKD086#QHR1SSl5eYneC9$:FHVp3YPQCE=ăU"0LVSZVvj*fbJiq#e*)oP&#5Wb9GuaM>&W%t&/=fqj.asmuE^pfGTj(Z?X,RtRk_ăU"6yIhhn4HM'\gvch<H_a_=s;#YY[B-_oha%m-oks%q\Cy$<J?qS3ZW(0mjfSspZ;ăU"pNBi'[B5#,yG]#-aT&ZcrUn^ZlYX>r=+iVF$5S>9WuPuvWeV;5C^t?y(tqtIGnUăU"ze(OGGIIUB&Q7Fn(6^OZduRT5KLd<F.2xt'37U/B<bd_sqvSkP0B.AJjONFgNUoăU"fOE-qq;VDhd:GSD6U;jOe9o-dIn<*#royRUO7%vYlJgq0/#^(6H8$.ci)3LktXJăU"wg;QZB<im7nE.KR7y>s?GMUK&Lw#YdY9euNi2++JMrq_I,=S1^C#NI7i=lMbD(*ăU"LAWHA+S\+fUB^O#O\wEsk[DFKWS%ihKEEi$ek?N0_s99=V*N>?/+<Z*b+Of+vP,ăU"FJenVcE['[#0f,Y5-oeA(R\5o35]eGN;VxewKY.3bLaq0bHan\uCE:EmYTTWt65ăU"FrNCHL<_VfH3q#H.BLpaPZ)IXs$w2JKe-#\14%GDj[>iigVBn?nBSD&0u56r(1băU"CU'fr0Ms$3Oy5$hi&'AmJePO3rSHgE0VFQBd>FGejYrD%>-#UO*X$7k.#7Al?+hăU"AmbK(GfXx+13\i1=$JvJP]jQ,yL3:TNj<l]&<66,2QNJ_$ZUsei$^$P9Qo36?CTăU"I.[Z<YE/dhl=_3gx+/f:kovjC):G1CFI;dP1'0+5v-4i[5zn3*a>uR[(_x6uwoWăU"eZBdj#2i;kFRX9Z.0oed>&wKzGn=LNp&<[lGL/0r5J&.jL=p(Hu[7$p)Z0Q.X04ăU"W=FT(M$dq4;vh8IUdhZf3Mz9bmHtk2hFo';XcUsbiCn;6e0^qM1eZ3hLDqHC2=WăU"3q*2GZHBl)7&5<W5Mej9X11\5:os]oWmz>$E4<8)ktF.4c%aZ5%9c\'b?C>X.#măU"la,_7-c7D8qIR-i1s?Uw4)BE=O.MU]N9tA$DVt9/SVkeeHO5\*m:Bplhy1&q.fQăU"GxBVP5;9z/>\^Lqu==WY+&jlaAu/p>iGv3Z'V_v:9uxsfisPap\21+1MBFXiSlyăU"dBvZ]NV<bB)9PqsHHl^ybZKDr:AjxT:O_6uj/s]9o<G$scXzX$8]2ZxUn$NgMJkăU"^^6*wJ_vQH/hs7(wEZ,1'J)1l(QH%G]o-Fs,)v1i?i5_k6.GtXY5uBns;LZMa\WăU"mcsb\saX/sFJb2iS,2._XyHBk>&dQ_W(e*Db-&gFc$ThHqE<wASur/6tbDumrHOăU"ulK7[ZNoI(aVt(i\Fmv8PM4+v&A+/r#LEx..9ssu\380wxgrMnYq<^2T1FqxYVSăU"vnc64=g2I)<DKm9xO<9$j_GB?w7<iRN9Eg80/q0FDx)KBu0J.;[a8,gQnTEq6JmăU"XKKAN(cDsZfra\9o%Dup(%)9%'%%-%U\$fLbK$$'V%2%%%%5%%/%%%%gMA>F=IlăU"SA0MF<fHmyxPOQ9PI_VJ>gc,$EF8.nESU8Sf?I(egL&#j*&#[evv*.3]rw6d%C^ăU"A^zc*g::z.YnL,%=RGS_G^&zzDOY1ho\DX2tW/hlEf3J6NVDN6?h,pcitk\K]t)ăU"jb.=foUeSG_(](T):<iWBztwjdhPN'm'ri:#5KX*_eH0+[iIqDe1*Myn-)u211TăU"<V7_(5?v:Vx0agIwCf^E;w-b'[ofxe8c:mr7r$ch5e-b6qk%&As5TxL263]fAY9ăU"^C1o6rO)(gr2,kZ\H]'o*2>9myCXh&x;eTe3JlzE9rx/L*Zv8UgW08VTg<v)OdEăU"A;e9m%Ka4G#w63YOKT(:Bw\6^[zXJEJMeQ*(pKm2/qI'xZQBl4mVMA[b,>lv3;BăU"2XZ<TY5wBVDpXr91y*326m$/DHrk*4ppBjsMq#Hz-\PQ?0/%PIf47int#T#gWFxăU"2MZv;(.h<NC0ZL2[4R:gDgi&oB<];JgOm,?#v*v4/6j;Ger#l7oh0EDufG$jOUeăU"#k0EZ5_DNtlv\[tqXhS64hnbE;p.Z[+X-'b+AFxc_x;Ys5q6tm8ESikh3#PET-dăU"MM=F=DZ.VfDM,H;Q6a_I[#f/j[Y^O\L40:wd%5f1FY/9L3^YKp;2o:lTH44CI/,ăU"<Ibf$A=t/R?c;([dh5#gVsv&oc/#.^W6u5mBiV:X;59k._.FDnvx^18<mdQ.^4>ăU">fdF0?(fWP?hl0C-Hdb)IrcWZ_r+&vsDu_?lkkUCH>j0T94-uuM/bA#bQj,V6JnăU".ctHcaj37?IAq,E(LrZAQ(3k8'U+(QmG-mpQJrt9DCIlSg,LUh,TTZ$<i_3z7\DăU"][dD6^oj[tVDrOrfCRVpCf&dHrr#A%?IE5_g]gxWYzF(9>.2N_8DfBj=/S6,SR5ăU"=X\xu>t>'56$fA^fZGgW&dBT=ultEaeJU).WB=6=UnpclxYZ97cj)&GOlOL4,p^ăU"<foWWvHE&;>XQgW]Rb*[75fEK0-p>Nmvd#)*DYTpf[Ns]nnb#0LSlsc5$FWT&42ăU".zqS+0JE%K:2p,uj=:?_Ava/e&SH9t9]QF>D_f?m[=GP1PEv4LsMT##c#P<ZqdOăU"VBR+^;/'*cZ%7J-ub/^LUF.UoRE&S1?$)CLf5uM#Li4>9FQ#AK]+13]Lm\m4aG%ăU"Ef/w-D#z-QFPV1U5(]TQ'^M/lq(NrlqKfr%hUnGqsOPHWp6WJ&m*;jRwa?K_^R.ăU"):7f$]#k26.?1eeY+=;>-mN6tZ7D7aH4t)')WGo+nmfgv5m4aB^u6Dlj\T^kA?uăU"TLRV+S:sK\whWiqS6)a&H'5D^Qjrm1+[<sbhmo+Y9Yq_zW$x?_NGu+wEiu>m8]8ăU"#C,s4[5Q?YdH9LoQtKK7kD6E(9fz2VY1q;nrS<(h4=M)+Lg6Zt+1%d%-x:XM6WPăU"aN((#u8R=;swu0#T\YKnq(eJl^VHNL6h%DfE-gxy/vRdC1]W>1+go7ef),X4;L6ăU"qlSFE,>];QVW-f6P\E^fVSFh.RfD50ADeGhOXNC3,(;3K>t:;VL?rvf<<nT\kSlăU"(ZPZkGut=Vl.B[*g/V6uklBqc$5?Q+dHA#<ll4vE#bjGs)Bfasj]V0ypil>iBB.ăU"A)pAbOVR]qTaDdtevJ<Qr/dWgEm89n]f3QiL6O6#dIVM]FgXRE-G65L%-Dn:=BoăU"52tX]d5r'UZmQ_?bLYbvl5T<8;>eum'K&t5oQlk6p./EZ;#HwF#UI4h>A,tbrhEăU"Qf)OFu0?i14sg.a^\?Y%t#Zd06>4K''I,%?UEoET0nYd<Wvu80PjuGd-2XMWn9=ăU"NSi:DYq]P9xLX\a*:2Ij)cq9m;f.XuwRNdYoqg=i)MjFprx0X0DEEq4,hai?xRpăU"&MuA$36sbr+Z=?b0p=2NV5=hEwu5&,<rJJ0Lfv3whe9;$DfLuk<sFx:pfb+p$VAăU"G:#D5zNPdi5'n6v,mc-vo$dpcI*\l1vlP5<xB'5X#A.<*)G,:+ovZ+,q7LKq'PWăU"'H4-t7qpD01e/WcZu_d-YVDfHfVU?fiCog/hF-ff0?UQ5LUHUwju.OJ0#(kESxiăU"YX.JWXudC59G7NA=hUeU'NiK8B1-V&omevlQxikI,o*DR]1Jlqb3&Y\+ojmmLB#ăU"F]qQ0==MwAhiQb/9,3</^wP1APZR^B4f-)/s5ZT*CHgRQ^sk?M<IK1)%yNFk+<răU"E1LH+K8n(c3=ki]702guC8_X5KF3al_9]0fE5;4CMnQr6dSIl2qt#<AcPa5P8d.ăU"n#:'wy+6\Kcl=6$+O$8'7*oK&Z'VlOM\[[(C;gux<_oACAQ6EDn_xrmBu/ZxA+UăU"Pi;P8CneIR7'A:)BG;v]'\UV_#xMvyp2uZ.]n2xENYWPs?F8TaFEcb6Z/2U-tvPăU"f5tC[Ikq<B+lf,QxB*ZA3fB+m[o.j'mDbZZLi&f,i:WE+-/-N;WR1BUd,lx-J5găU"E=/X-46E9Top8lkk*F.RJRD9^ZTp1pIR#Z$kSG*#eM6Z/sWtYgExA\N/Tj&A^CQăU"OsFZW8HsKC;b1(#QuZgrr?:.:RoTR*OKmYBwnSl+>Ug_jA&xi;5TYTJw8S&B8o8ăU"bqrr/DNr7q)?;Wu0hD/RAI,GK$&KNpd6fDbM]/*NhXW.Q6A.%lE:NH]w?tV%rNWăU".j?dmnj[lEn^p/&:#b#eV/%W<=uj9)c/gl(M,=fzlf_ZL8pRtQiw$emH]i%t1qxăU"cMXZCI/Q6Go&FP-?hpc:r.S2p0=8ku%)dFykf]/$b'?o_sNsP'QeE/V\mieeK*%ăU"Kw9=#88<q#z,#CJAj7?;;SW5gBn/M^,8hlc/X_/5A#]>)tx=Ok$g=dkD3mN#;3UăU"6quLoL6LTfCRSEk:C'T/lr:wPbe\(q-_igMLGOImB)08kq_33yJ'w$l\XBq_Z3kăU"?[$pQ9gva\/lNH<PBIiMH:hWJ.h+*2,3,m31YD='<;g^,'W+'KH2nujBjJInJDBăU"+pFnnf*JJ'tN0xMApRhTgU>0gWebH]>%ec+pf?3V?G/t<Z'?;iS;RX..#:lye+băU"t/ROH?k&7r[4Yh438Y13N;X?-ZvTx^UI3uz1+/[rl_><#bJd<BoqE3lsj?\Jb8?ăU"$>)_0HE$,Uk*kyR#\(>4M*'xc,%(dZ0ewAXg7NasZml6.#4k$H,4%R;$a>HL;lJăU":m,*)p&DlltipRB#kjrW/7I&1_UKBisZ.F4&>]EBqdTA'.TkeDy/$>5prJw2d_%ăU";^rFp,:kX6?R48j40bi8H2Xny.dwiaGEh6IJI)1v&4*COR7AbVMSVBUyd5n?fZ)ăU"-+*P4Nem.45\*cst9U)-Zjt,*-;b5Gewqk)6q:RH_r41s8w2pCZ-gVhm/F33(glăU"[Gqt/iQ7^2nZ+Z^hpVV\'=QU/5ID<)mAZNm?\e.S9r\tn*;&^jj1>hqh#0dHgUVăU"1=2#$kjZ,]Q576;A1-c4[,?uV48>w.6HU4]&?Y'PE?yu*?8nffOVDLX\fRE2sDXăU"%8U63e^#kZd9t(J)qe?[^*hJ3[a:JFQQkfUqui=eu9uQ,^4$07u?Za[nNL5=;&-ăU"V^NpUDMQ4Vd^CZtru6(1?ji#Vd+*pvJnQk](nmC]JC-))r(bh$4.Dqcg=%W-SI?ăU")2qNHgXNKR<5hL\bMV]OC7caqt9ASO'OpLp&OG=*V4k<WhM7vCtw#oc'JGAaY\QăU"->2#9+w5A-%#2;[XXa:F?,kGscF4$$&I/98UzX9&1C-^k\V^UtDUKN)Hd3p+/(uăU"7lo-NXhUPev&B/f'C7MB#i*7PQn0$^N40#$Gjz8M8,Lp#v:z'g_3(dHNO:A>Y#aăU"-u%uoSLr?CPs2UVWm?hbpE(,[N,7%oD&u3Yi%i=xP]$yr%r(.w>)gcujh'%H^6;ăU"L&s-Orf9b^K6wE'V4xP2=:NEr/FnN[tbvJ%:*R[9fFs1U23yt)^qClkc#nbb%+6ăU"IWIr96ue2<]8P*6(FwD=tYY\(jcfA35+'f4V]TYLuuES[Nup#96.G/-q^[B&+M(ăU"=a?1%3e,zI)?9+LMtZTnl]/CAS4':v9fhcnn7WP40D/m^+-:S;9O->+^J)db/1IăU"&?L_]W=\)/1m#sIvvEW7yOLi53H'W5<RF#9\viG4BMCu5UN($?h-Xd.^^TiM#Y&ăU"<_8iuP%u6SzYTa;qj8+Zlo+W++Sr(=1AXWYL6OcxxE0>poaxgLtJGqrjQ,,0Y,măU"3YuVlRoz-&,;QmB:b((/^A5Mngadhhh0..k,WIC/tF4ucc3J2:Fhf\V%Xq+=>h-ăU"BC:X'Cy:kO]G*[ek<r5lBSn;DV/kB;Oo+s6%%aJkMvazD]j^:n\D8[f#t&av&=^ăU"sjG_czw$No=:XE:'WpaCnj?2&,pIG2ec/3pQ^RbRR3)]Z/.%w*k<M[wxnX\4^?dăU"OirNlp-::.^srvG.I-OqUZ99H9mpvuvZw?-cMMp\yNVO;c1sd%up&'%9%9%%'%-ăU"%*2[fL]Ko2P&%0%%%%5%%%/%%%%%%%%%%%E%*/P%%#%%gA2>F=hLSA0F%up&'%9ăU"%9%%'%-%)w[fLL9,ug%()%%'E/%%%/%%%%%%%%%&%E%3/PM0#%%gA2>F=hLS?0;ăU"%up&'%9%9%%'%-%4B&'L5^L#/%o7%%%7d%%%1%%%%%%%%%&%E%3/Px4#%%y4MGCăU"A>DC9S1)0Bup%&'9%%9%'%d-%:6S%L*v)xF:5.%%8S%%%1%%%%%%%%%&%RE%/P%ăU"BG%%Ly4GC1w>CnLS10B%up&'%9%9%%'%-%6T,'L\)1TM&-7%%&Ve%%%1%%%%%%%ăU"%%&%E%3/P+W#%%y4MGCA>DC:S1)0Bup%&'9%%9%'%[-%v-\'LOW9S^?5.%%]W%%ăU"%/%%%%%%%%%&%RE%/P']i%%Lx>DAD24SC)GCup%&'9%%9%'%[-%Y).yLl])IwB1ăU"7%%-Q%%%1%%%%%%%%%&%RE%/P'Kz%%.yj'y%wtym%Sgfx%up&'%9%9%%'%-%(U$ăU"fLHb$$'&V2%%%%5%%%/%%%%%%%%%%%E%E/P>1#%%gA2>F=lLSA0F%up*+%%%%%%ăU"-%-%'A&%%*A>%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=69AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJernej Simoncic                SNOW ENGINE                    jernej.simoncic@guest.arnes.si 12-25-99 (20:50)       QB, QBasic, PDS        284  6713     WINTER.BAS  ' Winter - a snow demo with a nice image :)ă'ă' Programmed by Jernej Simoncică' jernej.simoncic@guest.arnes.siă' ICQ: 26266467ă'ă' Use the snow 'engine' freely, just give me a credit!ă'ăăDECLARE SUB Winter ()ăDECLARE SUB SetPal (Attr%, Red%, Green%, Blue%)ăDECLARE SUB DefSnow (S AS ANY, YPos AS INTEGER)ăCONST NumSnow = 200ăTYPE Snowă  X AS INTEGERă  y AS SINGLEă  oX AS INTEGERă  oY AS SINGLEă  mY AS SINGLEă  mX AS INTEGERă  Amp AS INTEGERă  sX AS SINGLEă  Col AS INTEGERăEND TYPEăăRANDOMIZE TIMERăăDIM Snow(NumSnow) AS SnowăăFOR i% = 0 TO NumSnowă  DefSnow Snow(i%), 190ăNEXTăăSCREEN 13ăăWinter  'Draw imageăăFOR i% = 0 TO 15ă  SetPal i% + 32, 0, i% * (63 / 15), 0ă  SetPal i% + 48, 63, i% * (63 / 15), i% * (63 / 15)ăNEXTăFOR i% = 1 TO 16ă  SetPal i% + 239, i% * (40 / 16) + 23, i% * (40 / 16) + 23, i% * (40 / 16) + 23ăNEXTăSetPal 100, 63, 31, 0ăSetPal 101, 47, 31, 0ăăr1! = 25ăg1! = 13ăb1! = 0ăr2! = 37ăg2! = 24ăb2! = 12ăr! = (r2! - r1!) / 16ăg! = (g2! - g1!) / 16ăB! = (b2! - b1!) / 16ăFOR i% = 0 TO 15ă  SetPal i% + 64, (r1!), (g1!), (b1!)ă  r1! = r1! + r!ă  g1! = g1! + g!ă  b1! = b1! + B!ăNEXTăăDOă  FOR i% = 0 TO NumSnowă    Snow(i%).y = Snow(i%).y + Snow(i%).mYăă    Snow(i%).mX = SIN(Snow(i%).y * Snow(i%).sX) * Snow(i%).Amp - Snow(i%).Amp \ 2ăă    PSET (Snow(i%).oX, Snow(i%).oY), 0ăă    pnt% = POINT(Snow(i%).X + Snow(i%).mX, Snow(i%).y)ă    IF pnt% < 0 THEN pnt% = 0ă    IF pnt% THENă      IF RND AND 1 THEN n% = 1 ELSE n% = -1ă      p% = POINT(Snow(i%).X + Snow(i%).mX + n%, Snow(i%).y)ă      IF p% = 0 THENă        m% = n%ă      ELSEă        p% = POINT(Snow(i%).X + Snow(i%).mX - n%, Snow(i%).y)ă        IF p% = 0 THENă          m% = -n%ă        ELSEă          m% = 0ă          FOR j% = 0 TO 3ă            IF POINT(Snow(i%).X + Snow(i%).mX, Snow(i%).y - j%) = 0 THENă              PSET (Snow(i%).X + Snow(i%).mX, Snow(i%).y - j%), Snow(i%).Colă              EXIT FORă            END IFă          NEXTă          DefSnow Snow(i%), 10ă        END IFă      END IFă      Snow(i%).X = Snow(i%).X + m%ă    END IFăă    IF INT(Snow(i%).y) >= 199 THENă      PSET (Snow(i%).X + Snow(i%).mX, 199), Snow(i%).Colă      DefSnow Snow(i%), 10ă    END IFăă    PSET (Snow(i%).X + Snow(i%).mX, Snow(i%).y), Snow(i%).Colăă    Snow(i%).oX = Snow(i%).X + Snow(i%).mXă    Snow(i%).oY = Snow(i%).yă  NEXTă  WAIT &H3DA, 8ă  WAIT &H3DA, 8, 8ăLOOP WHILE INKEY$ = ""ăă'Make the snow fall down before quittingăăDOă  FOR i% = 0 TO NumSnowă    Snow(i%).y = Snow(i%).y + Snow(i%).mYăă    Snow(i%).mX = SIN(Snow(i%).y * Snow(i%).sX) * Snow(i%).Amp - Snow(i%).Amp \ 2ăă    PSET (Snow(i%).oX, Snow(i%).oY), 0ăă    pnt% = POINT(Snow(i%).X + Snow(i%).mX, Snow(i%).y)ă    IF pnt% < 0 THEN pnt% = 0ă    IF pnt% THENă      IF RND AND 1 THEN n% = 1 ELSE n% = -1ă      p% = POINT(Snow(i%).X + Snow(i%).mX + n%, Snow(i%).y)ă      IF p% = 0 THENă        m% = n%ă      ELSEă        p% = POINT(Snow(i%).X + Snow(i%).mX - n%, Snow(i%).y)ă        IF p% = 0 THENă          m% = -n%ă        ELSEă          m% = 0ă          FOR j% = 0 TO 3ă            IF POINT(Snow(i%).X + Snow(i%).mX, Snow(i%).y - j%) = 0 THENă              PSET (Snow(i%).X + Snow(i%).mX, Snow(i%).y - j%), Snow(i%).Colă              EXIT FORă            END IFă          NEXTă          Snow(i%).X = 400ă        END IFă      END IFă      Snow(i%).X = Snow(i%).X + m%ă    END IFăă    IF INT(Snow(i%).y) >= 199 THENă      PSET (Snow(i%).X + Snow(i%).mX, 199), Snow(i%).Colă      Snow(i%).X = 400ă    END IFăă    PSET (Snow(i%).X + Snow(i%).mX, Snow(i%).y), Snow(i%).Colăă    Snow(i%).oX = Snow(i%).X + Snow(i%).mXă    Snow(i%).oY = Snow(i%).yă  NEXTă  WAIT &H3DA, 8ă  WAIT &H3DA, 8, 8ă  n% = 0ă  FOR i% = 0 TO NumSnowă    IF Snow(i%).X <> 400 THENă      n% = -1ă      EXIT FORă    END IFă  NEXTă  IF n% = 0 THEN EXIT DOăLOOP UNTIL INKEY$ = CHR$(27)ăăSUB DefSnow (S AS Snow, YPos AS INTEGER)ă  S.X = INT(RND * 320)ă  S.y = -RND * YPos - 10ă  S.mY = RND / 2 + .5ă  S.Amp = INT(RND * 12) + 8ă  S.sX = RND / 8ă  S.Col = INT(RND * 16) + 240ăEND SUBăăDEFINT A-ZăSUB SetPal (Attr%, Red%, Green%, Blue%)ă  OUT &H3C7, Attr%ă  OUT &H3C8, Attr%ă  OUT &H3C9, Red%ă  OUT &H3C9, Green%ă  OUT &H3C9, Blue%ăEND SUBăăDEFSNG A-ZăSUB WinterăăFOR i% = 0 TO 4ă  LINE (50 + i% \ 3, 50)-(50 + i% - 2, 169), i% * (15 / 4) + 64ă  LINE (90 + i% \ 3, 60)-(90 + i% - 2, 173), i% * (15 / 4) + 64ăNEXTăăFOR i% = 0 TO 5ă  LINE (150 + i% \ 3, 70)-(150 + i% - 2, 189), i% * (15 / 5) + 64ăNEXTăăLINE (0, 180)-(50, 170), 240ăLINE -(125, 175), 240ăLINE -(170, 183), 240ăLINE -(200, 177), 240ăLINE -(230, 175), 240ăLINE -(290, 169), 240ăLINE -(319, 173), 240ăPAINT (0, 199), 240ăCIRCLE (220, 166), 12, 240ăPAINT (220, 166), 240ăCIRCLE (220, 148), 10, 240ăPAINT (220, 148), 240ăCIRCLE (220, 134), 8, 240ăPAINT (220, 134), 240ăLINE (200, 140)-(205, 176), 74ăFOR i% = 0 TO 10 STEP 3ă  IF i% >= 5 THEN n% = 1 ELSE n% = 0ă  LINE (195 + i%, 133 - n%)-(201, 143), 64ăNEXTăLINE (216, 129)-(224, 123), 48, BFăLINE (216, 129)-(216, 123), 4ăPSET (215, 129), 4ăPSET (225, 129), 51ăPSET (216, 123), 0ăFOR i% = 0 TO 1ă  LINE (220 + i%, 129)-(220 + i%, 123), 52 + i% * 4ăNEXTăFOR i% = 0 TO 2ă  LINE (222 + i%, 129)-(222 + i%, 123), 62 - i% * 4ăNEXTăPSET (224, 123), 0ăCIRCLE (217, 132), 1, 0ăCIRCLE (223, 132), 1, 0ăCIRCLE (205, 148), 7, 240, , , .38ăCIRCLE (235, 148), 7, 240, , , .38ăPAINT (205, 148), 240ăPAINT (235, 148), 240ăCIRCLE (220, 134), 1, 101ăPSET (220, 134), 100ăCIRCLE (220, 134), 5, 0, 230 * 3.14 / 180, 310 * 3.14 / 180ăFOR X% = 0 TO 319ă  FOR y% = 127 TO 199ă    IF POINT(X%, y%) >= 240 THENă      PSET (X%, y%), INT(RND * 16) + 240ă    END IFă  NEXTăNEXTăăPSET (217, 132), 240ăPSET (223, 132), 240ăăX! = 0ăn! = 28 / 90ăFOR y% = 140 TO 50 STEP -1ă  X! = X! + n!ă  IF RND * 5 > 2 THENă    LINE (20 + X!, y% + RND * 2)-(50, y% - RND * 2), INT(RND * 8) + 40ă  END IFă  IF RND * 5 > 2 THENă    LINE (80 - X!, y% + RND * 2)-(50, y% - RND * 2), INT(RND * 8) + 40ă  END IFăNEXTăăX! = 0ăn! = 18 / 90ăFOR y% = 150 TO 60 STEP -1ă  X! = X! + n!ă  IF RND * 5 > 2 THENă    LINE (70 + X!, y% + RND * 2)-(90, y% - RND * 2), INT(RND * 8) + 40ă  END IFă  IF RND * 5 > 2 THENă    LINE (110 - X!, y% + RND * 2)-(90, y% - RND * 2), INT(RND * 8) + 40ă  END IFăNEXTăăX! = 0ăn! = 28 / 90ăFOR y% = 160 TO 70 STEP -1ă  X! = X! + n!ă  IF RND * 5 > 2 THENă    LINE (120 + X!, y% + RND * 2)-(150, y% - RND * 2), INT(RND * 8) + 40ă  END IFă  IF RND * 5 > 2 THENă    LINE (180 - X!, y% + RND * 2)-(150, y% - RND * 2), INT(RND * 8) + 40ă  END IFăNEXTăEND SUBăDavey W. Taylor                DANCING JELLO                  logiclord@swipnet.se           01-01-00 (02:59)       QB, QBasic, PDS        248  6358     WOBBLE.BAS  'DANCING JELLOă'ă'Hey! I havn't contributed to ABC in quite a while now, sorry about that!ă'Heres some nice demo like eyecandy for your enjoyment!ă'It still needs a pretty fast computer to run smootly say like a P200 whenă'compiled and a P250 when running in the programming environ.ă'May flip occasionally, sorry about that... :>ă'ă'Yeah, I know, you can probably find a million things to fix andă'optimize so please do, because this is just the beginning ofă'a basic/asm project and I can use all the tips I can get!ă'So if you improve the code tell me about it :}ă'ă'I also need an asm rout that will map a texture to an area on the screenă'defined by four xy coordinates. I'd be real happy if you would sendă'it to me or tell me where I can download it... thanks! :)ă'ă'Have Phun! /LogicLord (logiclord@swipnet.se)ăăDECLARE SUB relate (a%, b%)ăTYPE advnodeă xp AS SINGLEă yp AS SINGLEă xv AS SINGLEă yv AS SINGLEă xo AS SINGLEă yo AS SINGLEăEND TYPEăTYPE basnodeă xp AS INTEGERă yp AS INTEGERăEND TYPEăTYPE basrelationă ni AS INTEGERă nd AS SINGLEăEND TYPEăăCONST hinode% = 27ăDIM SHARED node(0 TO hinode%) AS advnodeăDIM SHARED newnode(0 TO hinode%) AS basnodeăDIM SHARED oldnode(0 TO hinode%) AS basnodeăDIM SHARED relation(0 TO hinode%, 0 TO hinode%) AS basrelationăDIM SHARED floor(319) AS INTEGERăăSCREEN 13ăRANDOMIZE TIMERăă'create floorăys% = INT(RND * 50) + 150ăyb% = ys%ăxs% = 0ăxd% = INT(RND * 39) + 1ăyd% = INT(RND * 50) + 150ăf! = (yd% - ys%) / xd%ăFOR n% = 0 TO 319ă IF n% = xd% THENă  xs% = n%ă  xd% = INT(RND * 39) + n% + 1ă  ys% = yd%ă  yd% = INT(RND * 50) + 150ă  IF xd% > 320 THENă   xd% = 320ă   yd% = yb%ă  END IFă  f! = (yd% - ys%) / (xd% - xs%)ă END IFă floor(n%) = ys% + f! * (n% - xs%)ăNEXT n%ăă'interpolateăFOR n% = 0 TO 319ă y% = floor(n%) + floor((n% + 1) MOD 320) + floor((n% + 2) MOD 320) + floor((n% + 3) MOD 320) + floor((n% + 4) MOD 320)ă floor((n% + 2) MOD 320) = y% / 5ăNEXT n%ăă'set nodesăn% = 0ăFOR y% = 0 TO 3ă FOR x% = 0 TO 6ă  newnode(n%).xp = 160ă  newnode(n%).yp = 50ă  node(n%).xp = x% * 25 + 85ă  node(n%).yp = y% * 25 + 30ă  n% = n% + 1ă NEXT x%ăNEXT y%ăă'create relationsăn% = 0ăFOR y% = 0 TO 3ă relate y% * 7, y% * 7 + 6ăNEXT y%ăFOR x% = 0 TO 6ă relate x%, x% + 21ăNEXT x%ăăFOR y% = 0 TO 3ă FOR x% = 0 TO 6ă  IF x% < 6 THENă   relate n%, n% + 1ă  END IFă  IF y% < 3 THENă   relate n%, n% + 7ă  END IFă  IF x% < 6 AND y% < 3 THENă   relate n%, n% + 8ă   relate n% + 1, n% + 7ă  END IFă n% = n% + 1ă NEXT x%ăNEXT y%ăă'factors... don't change it'll prolly flipădfactor% = 10ăsfactor% = 100ăvfactor% = 2ăifactor% = 8ăăWHILE INKEY$ = ""ă 'gravityă FOR n% = 0 TO hinode%ă  node(n%).yv = node(n%).yv + .01ă NEXT n%ăă 'calculate average distance from related nodesă FOR n% = 0 TO hinode%ă  node(n%).xo = 0ă  node(n%).yo = 0ă  FOR r% = 0 TO hinode%ă   nd! = relation(n%, r%).ndă   IF nd! = 0 THENă    EXIT FORă   ELSEă    ni% = relation(n%, r%).niă    d! = (ABS(SQR((node(n%).xp - node(ni%).xp) ^ 2 + (node(n%).yp - node(ni%).yp) ^ 2)) - nd!) / dfactor%ă    'd! = d! / dfactor%ă    node(n%).xo = node(n%).xo + (node(n%).xp - node(ni%).xp) * d!ă    node(n%).yo = node(n%).yo + (node(n%).yp - node(ni%).yp) * d!ă   END IFă  NEXT r%ă  node(n%).xv = node(n%).xv - (node(n%).xo) / sfactor%ă  node(n%).yv = node(n%).yv - (node(n%).yo) / sfactor%ă NEXT n%ăă 'move node based on calculated velocityă FOR n% = 0 TO hinode%ă  node(n%).xp = node(n%).xp + node(n%).xv * vfactor%ă  node(n%).yp = node(n%).yp + node(n%).yv * vfactor%ă NEXT n%ăă FOR n% = 0 TO hinode%ă  'bounce off left and rightă  IF node(n%).xp < 0 THENă   node(n%).xp = 0ă   node(n%).xv = 0ă  END IFă  IF node(n%).xp > 319 THENă   node(n%).xp = 319ă   node(n%).xv = 0ă  END IFăă  'floor collision detectionă  xf% = INT(node(n%).xp) MOD 320ă  IF node(n%).yp >= floor(xf%) THENă   node(n%).yp = floor(xf%) - 1ă   d! = floor(xf%) - floor((xf% + 1) MOD 320)ă   node(n%).xv = node(n%).xv - d!ă   node(n%).yv = 0ă  END IFă NEXT n%ăă 'syncă WAIT &H3DA, 8ăă 'erase old blockă FOR n% = 0 TO 5ă  LINE (oldnode(n%).xp, oldnode(n%).yp)-(oldnode(n% + 1).xp, oldnode(n% + 1).yp), 0ă  LINE (oldnode(n% + 21).xp, oldnode(n% + 21).yp)-(oldnode(n% + 22).xp, oldnode(n% + 22).yp), 0ă NEXT n%ă FOR n% = 0 TO 2ă  LINE (oldnode(n% * 7).xp, oldnode(n% * 7).yp)-(newnode(n% * 7 + 7).xp, newnode(n% * 7 + 7).yp), 0ă  LINE (oldnode(n% * 7 + 6).xp, oldnode(n% * 7 + 6).yp)-(newnode(n% * 7 + 13).xp, newnode(n% * 7 + 13).yp), 0ă NEXT n%ăă 'calc new nodes by interpolation and remember oldă FOR n% = 0 TO hinode%ă  newnode(n%).xp = newnode(n%).xp + (node(n%).xp - newnode(n%).xp) / ifactor%ă  newnode(n%).yp = newnode(n%).yp + (node(n%).yp - newnode(n%).yp) / ifactor%ă  oldnode(n%).xp = newnode(n%).xpă  oldnode(n%).yp = newnode(n%).ypă NEXT n%ăă 'draw new blockă FOR n% = 0 TO 5ă  LINE (newnode(n%).xp, newnode(n%).yp)-(newnode(n% + 1).xp, newnode(n% + 1).yp), 63ă  LINE (newnode(n% + 21).xp, newnode(n% + 21).yp)-(newnode(n% + 22).xp, newnode(n% + 22).yp), 63ă NEXT n%ă FOR n% = 0 TO 2ă  LINE (newnode(n% * 7).xp, newnode(n% * 7).yp)-(newnode(n% * 7 + 7).xp, newnode(n% * 7 + 7).yp), 63ă  LINE (newnode(n% * 7 + 6).xp, newnode(n% * 7 + 6).yp)-(newnode(n% * 7 + 13).xp, newnode(n% * 7 + 13).yp), 63ă NEXT n%ăă 'move flooră floorm% = floor(0)ă FOR n% = 0 TO 318ă  PSET (n%, floor(n%)), 0ă  floor(n%) = floor(n% + 1)ă  PSET (n%, floor(n%)), 38ă  LINE (n%, floor(n%) + 1)-(n%, 199), 0ă NEXT n%ă floor(319) = floorm%ăă COLOR 72ă LOCATE 1, 1ă PRINT "LogicLord '2k"ăWENDăWIDTH 80, 25ăă'eliminate the black-line-at-the-bottom-of-the-screen bug in win95/98ăCOLOR 7, 0ăCLSăăPRINT "LogicLord '2k"ăă'Hey, whaddaya know... nothing happened!ăăSUB relate (a%, b%)ă d! = ABS(SQR((node(a%).xp - node(b%).xp) ^ 2 + (node(a%).yp - node(b%).yp) ^ 2))ă' PRINT d!ă FOR n% = 0 TO hinode%ă  IF relation(a%, n%).nd = 0 THENă   relation(a%, n%).ni = b%ă   relation(a%, n%).nd = d!ă   EXIT FORă  ELSEă   IF relation(a%, n%).ni = b% THEN EXIT FORă  END IFă NEXT n%ă FOR n% = 0 TO hinode%ă  IF relation(b%, n%).nd = 0 THENă   relation(b%, n%).ni = a%ă   relation(b%, n%).nd = d!ă   EXIT FORă  ELSEă   IF relation(b%, n%).ni = a% THEN EXIT FORă  END IFă NEXT n%ăEND SUBăBernt Figaro                   BMP TO ICO CONVERTER (32X32X16)bernt.figaro@swipnet.se        01-01-00 (14:41)       QB, QBasic, PDS        198  5335     BMP2ICO.BAS REM ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄżăREM ł An simple .BMP to .ICO Converter                          łăREM ł bernt.figaro@swipnet.se                                   łăREM ł Here is an 16 colors converter                            łăREM ł Supporting only .ICO format 32x32                         łăREM ł An Icon are index in three parts: Head, Body and tail     łăREM ł The Head has 126 byte (including header and colortable)   łăREM ł The Body has 512 byte                                     łăREM ł The Tail has 128 byte of null                             łăREM ł An Bmp are index in two parts: Head and body              łăREM ł The Header is 118 bytes (including header and colortable) łăREM ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮăREM 2000-01-07ăăTYPE IconDirEntryă   idWide AS STRING * 1          'In pixels (16, 32, 64)ă   idHigh AS STRING * 1          'In pixels (16, 32, 64)ă   idColorCount AS STRING * 1    'Number of colors (2, 8, 16)ă   idReserved AS STRING * 1ă   idPlanes AS INTEGER           'Number of color planesă   idBitCount AS INTEGER         'Number of bits in iconă   idBytesInRes AS LONG          'Size of Icon in bytesă   idImageOffset AS LONG         'Offset to image dataăEND TYPEăăTYPE IconDiră   idReserved AS INTEGER         'Always Zeroă   idType AS INTEGER             'Usually set to 1ă   idCount AS INTEGER            'Number of entries in directoryă   idEntries  AS IconDirEntryăEND TYPEăăDECLARE SUB Showicon (File$, Xloc%, Yloc%, Scrmode%)ăDECLARE SUB SplitVision (InLine AS STRING)ăDECLARE FUNCTION ExtractCommand$ (Srce$)ăREMăREMăREMăREM ----------------------------------ăREMăDIM SHARED Array$(1 TO 128)ăDIM SHARED icID AS IconDirăDIM head$, Body$, Tail$ăCONST Scrmode% = 12ăSCREEN Scrmode%ăCLSăCOLOR 14ăăhead$ = ""ăhead$ = head$ + "00/00/01/00/01/00/20/20/10/00/00/00/00/00/E8/02/00/00/16/00/00/"ăhead$ = head$ + "00/28/00/00/00/20/00/00/00/40/00/00/00/01/00/04/00/00/00/00/00/"ăhead$ = head$ + "80/02/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/00/"ăhead$ = head$ + "00/00/00/00/00/80/00/00/80/00/00/00/80/80/00/80/00/00/00/80/00/"ăhead$ = head$ + "80/00/80/80/00/00/80/80/80/00/C0/C0/C0/00/00/00/FF/00/00/FF/00/"ăhead$ = head$ + "00/00/FF/FF/00/FF/00/00/00/FF/00/FF/00/FF/FF/00/00/FF/FF/FF/00/"ăăSplitVision head$ăăBody$ = SPACE$(512)ăTail$ = STRING$(128, 0)ăhead$ = STRING$(126, 0)ăăFOR I% = 1 TO 126ăA% = VAL("&H" + Array$(I%))ăMID$(head$, I%, 1) = CHR$(A%)ăNEXT I%ăăăăOPEN "Quit.Bmp" FOR BINARY AS #1ăSEEK #1, 119ăGET #1, , Body$ăCLOSE #1ăăFOR I% = 31 TO 0 STEP -1ăFOR J% = 0 TO 31 STEP 2ăP% = P% + 1ăA% = ASC(MID$(Body$, P%, 1))ăPSET (J% + 1, I%), A% AND 15ăPSET (J%, I%), A% / 16ăNEXTăNEXTăăOPEN "QUIT.ICO" FOR BINARY AS #1ăPUT #1, , head$ăPUT #1, , Body$ăPUT #1, , Tail$ăCLOSE #1ăăShowicon "Quit.ico", 40, 0, Scrmode%ăLOCATE 21, 1ăPRINT "That's All, folks !"ăSLEEPăENDăăREM $DYNAMICăFUNCTION ExtractCommand$ (Srce$)ăDelim$ = "/"ăSTATIC Start%, SaveStr$ăă' If first call, make a copy of the string.ăIF Srce$ <> "" THENăStart% = 1ăSaveStr$ = Srce$ăEND IFăăBegPos% = Start%ăln% = LEN(SaveStr$)ă' Look for start of a token (character that isn't delimiter).ăWHILE BegPos% <= ln% AND INSTR(Delim$, MID$(SaveStr$, BegPos%, 1)) <> 0ăBegPos% = BegPos% + 1ăWENDă' Test for token start found.ăIF BegPos% > ln% THENăExtractCommand$ = "": EXIT FUNCTIONăEND IFă' Find the end of the token.ăEndPos% = BegPos%ăWHILE EndPos% <= ln% AND INSTR(Delim$, MID$(SaveStr$, EndPos%, 1)) = 0ăEndPos% = EndPos% + 1ăWENDăExtractCommand$ = MID$(SaveStr$, BegPos%, EndPos% - BegPos%)ă' Set starting point for search for next token.ăStart% = EndPos%ăEND FUNCTIONăăSUB Showicon (File$, Xloc%, Yloc%, Scrmode%)ăăIF Scrmode% <> 12 THEN ErrCode% = -255: EXIT SUBăăREDIM Ct%(0 TO 15) 'Uses if translates from screenăăCt%(0) = 0: Ct%(4) = 1: Ct%(2) = 2: Ct%(6) = 3ăCt%(1) = 4: Ct%(5) = 5: Ct%(3) = 6: Ct%(7) = 7ăCt%(8) = 8: Ct%(12) = 9: Ct%(10) = 10: Ct%(14) = 11ăCt%(9) = 12: Ct%(13) = 13: Ct%(11) = 14: Ct%(15) = 15ăăăREM ÚÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂżăREM łł File Handle łłăREM ŔÁÄÄÄÄÄÄÄÄÄÄÄÄÄÁŮăăIconfile% = 7ăOPEN File$ FOR BINARY AS Iconfile%ăăREM ÚÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂżăREM łł Get Icon Info  łłăREM ŔÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁŮăăGET #Iconfile%, , icIDăăicWide% = ASC(icID.idEntries.idWide)ăIcHigh% = ASC(icID.idEntries.idHigh)ăCLOSE #Iconfile%ăăSize% = (icWide% / 2) * IcHigh%ăDIM Pico$ăPico$ = STRING$(Size%, 0)ăDIM U%ăăIconfile% = 10ăăOPEN File$ FOR BINARY AS #Iconfile%ăăSEEK Iconfile%, 127 ' CLNG(22 + (32 + 8) + (4 * 16) + 1)ăGET Iconfile%, , Pico$ăCLOSE Iconfile%ăăăU% = 0ăFOR Y% = (IcHigh% - 1) TO 0 STEP -1ăFOR X% = 0 TO (icWide% - 1) STEP 2ăU% = U% + 1ăA% = ASC(MID$(Pico$, U%, 1)) \ 16ăB% = ASC(MID$(Pico$, U%, 1)) AND 15ăPSET (Xloc% + X%, Y% + Yloc%), A%ăPSET (Xloc% + X% + 1, Y% + Yloc%), B%ăăNEXTăNEXTăăăăPico$ = ""ăEND SUBăăSUB SplitVision (InLine AS STRING)ăDIM Token$ăMaxItem = 0ăToken$ = ExtractCommand$(InLine)ăREM Invoke ExtractCommand$ with the string to tokenize.ăWHILE Token$ <> ""ăMaxItem = MaxItem + 1ăArray$(MaxItem) = Token$ăREM Call ExtractCommand$ with a null string so it knows this isn't the first call.ăToken$ = ExtractCommand$("")ăWENDăEND SUBăJernej Simoncic                FILL ROUTINE WITH TEXTURES     jernej.simoncic@guest.arnes.si 01-08-00 (15:05)       QB, QBasic, PDS        195  12911    TFILL.BAS   ' Paint routine with texturesăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"TFILL.ZIP",4^6:Z&=9402:?STRING$(50,177);ăU"%up()%9%%%.-%)x.UMmg?d4v)%%%i6%%%/%%%%yu%fnsy%SgfxWf&XBAjk5MWP[ăU"wVLB\,Za=DgjP^A<iRmW/8_3po1jrkUYjIZ/ICAv=-ls0Fp#3UIEPaGsL*aS>&uăU"00tfN0JJJt7(RQPRJiH=D92-0;5eVqV<['4=1$4IvQ'Q:Osn#T\64T)H?<lY-YbăU"?.P*lIO<5-<&(G_S#/89aiB)WFuRZZvWvL(cjDwd=)j*W_dI::m9t>ms&ILLl:LăU"vKxN,#=]3?Rh.ilj0Gqylgck_Z>9<2j.ZX=E:i4]_t^ZLcsB(KuS?U1SYw^d2cWăU".T^26UcVZeWf9KT&D23pr>e,o5#0:yU68WH.\Z088sGTUE9:T1*E6cQjW>wR.%măU":[L%(<;4sGPuC-<[gtkTPO\J8AdJ)^g^)5u^&W\H,04tjtJC9j;+BQX=)>b:eB9ăU"Z>)<c?'4rbC,fLTbS5S[S][mQt]h3'RLW%&F,JRV7xJtNbOpRD]1Jg0GvaLt%<EăU"G1l<FlDRLU7VM17DJi2D>^[G..jOXU^+#24o?p6\Hm)MVj5lc7zI#28c](='ehbăU"cGiVlkIySG>g7p*jJQ>mD%74q4zhe&$7pTt_?\0Cs$Laq*'gRBDd?uk5qJEE7avăU"N#CUz+*&V8d.QxE]=_m9+01<W914=?K5][H>vL:E4lO;Y1[p<A4<'[SI_lC(FtoăU">[D<J/NM-(w4jrWghh3M)K*JOAzpqtNQ#C2Ab81[GEN$1M3=AgVm7UDUM7hgJ/WăU"g1G_Aj#nQN().FTq=moJwF,=VAe3FVj_6QWcT?99<>VcmS,S.M6bBGak*Gfkr#SăU">=[K7s?dU5EgORRpo1_X3,(f#,5M3Ica_NfcIbm-KFKbP_nieZNIi7)<1vs$X&jăU"tS:=XRfy7?39RE+uOS*#*6iUQ&3pgkHed<O)MSnthc]2Ah-T,]2DiE'/.WR=7ZAăU"=v<x>77O?g.9Tf]]Ov\gFm%'j>E0UkRfIQY2#?8g<N;RNuAv:p65kWKl*9o>8iFăU"<EdfGZfL/X_s)esX-De4M-#A.\W^7xJ0eds'p6d9*81/X2C'%U$FpQ+h<#/vG.JăU"Ve/'m-??jJU/fLb35(OU7aq](R1dh4YGhL*akw$s=ra)1.hjUrE6]<XBDBtTETQăU"D[yYT8$$dLA=S[1eHK7Q]%j+xK=)'Mz+AWR=^LUwIk($QP?T=fiXqAcz0M)D%sYăU"x$#l(S2XhAOyle?8s7sPU/J($LF:lkl^_:xH]MH\'+VriqRA0+,hFmv;1)pIjSMăU"OIkrT(Ke&tC)Z)&8vy,6W3d*$KhegjSf]u2OU<fE9ZQhPJC,Ot[Iwu&3Y9ly(N3ăU"tOA3^+PMxM6,Mc+0nl)^%V%L52vRyaGd[^N19bbwv,&cE+.qNpL(2y(#x<SHKtkăU")*%VWk5['82^tPJ4LnqNw3,Kr[igP$oH2=\bVHbp?xed2sslLahGOORZwRf(nd5ăU"iAy/wKM.Ke'gBuur2uLShSd4+MOk/)d'xx0(^,/a*=]^+d;cfOn:d((l/dWdd$;ăU"Mu%g:84)A.zguWn1glfoJz3HqB)MXNKvN4VK)5fxjs_SgcTY5x0extx>3_Q+Q2tăU"VNy#>n7%^k*v7'd5i9^K0id8'C,^YPHSpiDCy_jmDDt,qhnL[Irxt+M-d,4faz7ăU"vau.kXZ&>up(%)9%%[%-%SAYUMBbyl\f%C%%5%O%%,%%%%y(j'yzRwjNIMV.*6QăU"/&_3SRr08&unEUU=29u&wpg:R5=MJrh,KF3UhS]S]B$]>lB5ngW>aEKE*je<BsQăU".E?E/#K\DJ:SNogJ-x;$YhjnLOrR<f.*pFStqB=5tcB6dvHr\dN$uf4XtJh?TRXăU"8\<,lu0<YUfW/Dx+Ms47bC_7CtY0ANmIb'Bi_;p0VLB.iyxzHA^7hWQ3WGu)00lăU"lY:RfM\dHh'?=s9lkW$:ZgLU]te/DPlW5#$]g,DxurHxdo\4gVu6r_e6M]+$Q0*ăU"(7bDrXr59.gq1IOaIFIumu^wxIY81.u-L#D)\.gFd%T\cg^P:<;)jua[JqCp]/.ăU"/SkcN><8lqiLlO&l4dGVW^wCQho*krbX2/K'X\rUGjPn*BdPN0U[$E:E+By&P1păU"I*[Xy&R=o\qh%z%AXq_n\rf\&&o&2lk&Qyr=>x%TKQ1IKuH'^G+>Ddg,]ExDVN4ăU"BRBk4c1d>HWbc>pA[3;5A2'#b\cbAOnWWd'>a=*H3GA%V?1_K&g1)j[(.8l7*#VăU"\;;p]D9lFaCSUaENZ7BLt&TQNrFFgU9t=PltNriGRD]Puc?$_dEcJ+V0eS.EGj(ăU";:DF4Ex+'t#1D0Nqtc\Jm=,wPMMpE5lS<SyRapT$BN%?hYv(.HBH#(b2l2Bf5[qăU">Lk:dlDLur:.gVqMFoClMQ+DorXVvp'z<fL05BWOl*)J0oyymF5qkN-=hNS$*WoăU"(%zpJpcDDP_Vdd^t(*XySKPO2x/A[/6d2[#Hn\tEUW1LpRm4d3pqvJ0WMlluG\FăU"[Yp[G?S0CTcNd^Pd/4AD/t-[R'+Xp/O9(.0%Xj(zUj=OW83)'?,EIgWx)(JY<y4ăU"Z8DSNj;'iQtKpO6nJDWvuig4hfE%q.-&lyxZH9iW-<b.GCCtwxsw>,L&bX-E=;jăU"po<'[8KKA5t-Dz_SWbfiV8IE&W+10&twirOJ1N0p4=YAs&FugU2tKWLF='5ZXZmăU"V^POiB:;gmD?/S1QMYl:cf(9%NMzeZI6BHWq$Fe1o?%GUfU9((WXqgip.O(0M_4ăU"QSlM_QCs0x,6t>XPY>W5DZto&*7\[(r:r[:vc5,rvs'Z)N?^nqh)h;[yXS\Jz?NăU"C(5f^ORAc]lzq1OdOFT?j.+W'_C?FnYOT[kD.#ta>+HlOX?7q<;cCA\#\>HV1f4ăU"q#8%.i6bN3)xNuEpA#1U'WeE9O/_AWOm2)J<w9.qA%zXp2;uSy5/WYO/D?\kCRfăU"o0g24dG2oYsxMT_JwGXXWFJ8/xJM2BBBq59kKtGT2lkvcjt%+l*Gu4V[jSH(:/(ăU"M&SHoi%:6gPWC.P+%3?Z^D>1L>eO&2[ZZ-\X?M)%i/X1Dy?G(s/QtG>AT#Tmtt8ăU".#^$$JD41AMP9b7wchgBem<3R%pSZ#fon,vr&+S45T3X>qIqDhKL[cPH]2Op&ewăU"w8I;:wU.pipJc_[$]aTCH5?Pu,DKt1cCecm.PL)bB<6j/ghsZg7JMbpI_[5C2,CăU"k.9VTY4DrA].yQ\4(?cPDtKcna.^p9Fks7p[izo6P-HWZ0ct:u&QTPf'TMGcL\EăU"89M1999q1K'.N&tZJl37v8&NeMAF6RB=bVT8iO*Zb+'/yNzcC>w*f;EArdwKgFYăU"6lA9/cLYB_xtyc#<NIO0I=g>b(DuXYxlfBE\fS\Itq+i2::V6Qu,6JBt,5>t$AcăU")TQRA,qN_eA)dxkoN]y9tayCz+9:1<Ki#PdL3j?c7)g7C5AWkQl[gw.GnA$T_u?ăU"#$_jK#*H<.kd]szXMM%\UO5d32Z%qEvV^rkHvwducbF?$CibV+TEyYeD29Ccb.UăU"3AVW8/qsx:R4lmo#R*AtqVv[Bb1AJcM8w:8hnRZSOuQlW1i2BtZxYY_M?G733==ăU"F]h,->9X#A[P\B:]72)3D&A&z6\#%w\*<Gdk^o[>O,8ck&k#r5k4U9mCHKf(\vpăU"_)Sb9caPzb&#dT2Kp>e#M=;YSUl%EmPEUWko#^m1.d?Tey0%Vj%Bd+n?F>5[)\7ăU"JIuHXQ[>Z?fPq:w[)oJz(i'pmL-UlRR$$)_4H31aMkLpTwuJ:ZZn$FdAPWF]s6+ăU"1L&&c^E5&Z7z+0jGMy=o^5d#=/GtGB)*]^ic/BkGMwPM8DIt%v:*i=V\*3VCn[EăU"bkhaXZ>\On4^VG&B]VY1B.2$;&%e%&VtP[OZLB^3:f\M6&eoS5#1)f2'2QmE5SIăU"fOATiQ1FUa6;[z)5B=yGh9WopDA4$3G2J6?ji-4t,6;5jVS5AR<[kVF4jm''jG,ăU"ck:/gYGl7U/[-A)pod)[L&GaRLCAe2yxCqAtY=[&ymI+DW3J2E*][lX^>$A/0fBăU"tY.XY_lN_C1nk[0L)0F^RXS8#RWxkB&fAn/n[g7%MVo_4tLuO+Wa7B)u7&dQK&năU"PGA.6:;-&V>iV*hDE?0n2vsql<c7'I$_M0-_+CtG#^.N1k=ZT>:mI%X>i8&MK4JăU"+xx(v<%os'\peU<FEuCZ.\%:0%.9m).y#Re#oI0thO:s(qxxwmlb_mW37PpFt$LăU"[nHr5c^lXdE41b=FM#5eJb8Zm^u&Ve,qpJXQD*^;U5/OF4yamI,/]j,'R+Gj$(5ăU"/czuO32<r0Vb\rIrbw8=F+A*ABX-2HA$(].,K3u6IM)8Xq&JF29QW+[w/4Y,V)hăU"kF*6;v+#H;QLVM^v#.&5x=oOd9coo[p3mos,Cv:S^%<2Rh]xL9iDUK&3a.]2Vm$ăU"24L,sV-'#nzkX26QM5%c]V<ik'+)%?JyS5_3rt&IAeemN1mn-oo3-d)hEM0+d_&ăU";rqEW'ruU#KCwZ5Ep^HI28an.77wAN*i1NDNmJLM]MiN\;DRtv7jfO2kh32c[0iăU"(^+[IdU%U]aICgR-3LWt+y,Oc*R;OeCI25WKE/5Hox^esn.,tA/as-%itUX7](YăU"nP\#OHBLpbA.uL&-Iw0r>+Od%=CABdiOX%#CTqoQU:Bq?/IZ/3A^7Y[A2HF#H6=ăU"aCsRdbMc(OwJcppoM^yu+'C*5$(eo#H^$/,gD^6F:r,MPAM_/77iQ=BYnHEHaa6ăU"bfJ'G/.OmIJKU\WT:^m.EaZ.%f^uEG3vBJp1KeI.)KW>V>\2-^Dq^qsg.Ng7Q00ăU"(3ZiHgsvZSDCPAh,3x%6LHhs.'M#1+_?]/n^?Zh8.IML0[I:PrdwER[jhax;'6;ăU"0'Ugi4''4d74RBWa#U_Wl+dC\W22i31dRvi11A0-olj+=xLid\Ux&PeOKKA1qy#ăU"wZy:;L4?G19?fT4)&)m7VO<xbckFMP[<9B>o6^p^jA2VLKdYRHsn_W4/.+&9_YaăU"zGoG]R[ekGF./QD0:E)];)Keh&is/VDA^[w53sfcNE;c.IBVSOWRu%Qs:xr*M)dăU"Ool*lRqGPdCxXKbHy':2Qc/-/O7KIzJESp]x]+TRq96)p%A-W^wuX,]D)6#gK]lăU"3i/uq#.)3Zmkuw*DW)Sb%QRRf..8SFh[[Y#m.G??dX?lY.Wk,Ir)_]Rh[^yH0\lăU"#UC)sfXfSnOE<l_QtPtK0d:fXu1gldIF+a?8mMIW<la&SPE.OIe+L(TXU3a^??GăU"T7-_a7bR8?H\lhU>4J)?IZJ?*j$*.nGbIsSc+BG<=O?31pcZ?Mx3<2;2LNI\$O;ăU"J;X2j)7V4gA+2\6e*P$=74EG9=f:Tr?DBohN%%MFYb)-nuFSHE/%+:BGD$WFVciăU"=k6/-RT6m$$TdoD=(m&y-vX;\f]gA9-+t7on&RL?6(+.%)ybejfVm'qeH-U'(9iăU"e1KS;R1),3[)kv63Oo&?K-?x8m*8U:3gUhK/Um[a&aqG%T*Ug>gYo)mlMV_C);3ăU"Sy>AEjuD&7,?+$Vdl%1.Zi&[Agn+7LlV:GqlSUOsl:I#4EFQgh>.Vf/O\B>>Xp.ăU"A80q_zwl&>%(Nw#zOHcE?XgT#AxO6&A>dCJhy+]*]13n[%l*bg\_*A#Lad8Ox2GăU"HtJ$iiq/Ft:E3Skz^ipel.7E1vSrf0w:zzbx6417u6>BXN1Y)sMi=%e[CfAFj)4ăU"\b(EjO09/^E16%a?CvgR*-XgdKDuN]/6D/Lf2-JvVXpZ4K1^8$*x-LhZi3.DIb6ăU"BU*\a2ORehmegMB&RfYB[1_ynnOeHF[WlFSb36s*u)oYaHNHT-4Df,\,X.omIl5ăU",ue+*P>.V:pMCv$wxd?Eg-G$9Y]h&:i3\[Ajrd*gs0o,uiIdK)$HIxl[bZgNdDtăU"AL?wdTdNxZe$\RL2b+vpo/EFt1KqNJh_\+:SbKIpFV,mUk/9[#'V7\^]WS.&$%băU"^2\A?wC%m(f:z:xBp5)bk?oJDle.dKousjO+&+:n;MohK-T[*KJ/w>xqIoXfcQEăU"Izq(vc_Z0mW\]0AEn4%Vl,*12brgI14Q$b4MGc[gPZhZukL&uxskZ2Zr<eIE7(CăU"%(tEp/aWui]JU-[UTg*7+i4GX1%P/y%-'?7.R\cf)cR)6h35cbT8#nZs5PKNr6băU"h8cqtd7usbq:0+yhS8eXIn/=D37(M'j5A;3+SI'I8WQ)30i4&-SAAQmjv'nF-F.ăU"e)0*NeOwRhaZzm)IdwLk,VNjfiDNtEm.t.-h'm2SXG\K)9iY5Fjm?[[gY'DN)__ăU"2n-fv*#7Tw8boOuF+&amDLbKe1pBoa9(1GO2'J#vRaoF,Hu8wuvsdwlJQB7(5LmăU"bno=2VwQC'e3re=U6,(f*oXC6QvrIOecWe#hsZB5iIW1lWa0Okrh'/sjbWm?VAFăU"utH8sWmFhNuwnl<Czhc,7e^2FGcu>a.IVR3NRYkd#U-]Y%Em2y'D^1xKra48:5săU"d2(wlx_nP+6a1HHex]aao>ukWl(cwp#xHr0TN1_)fQK?/HG&fEgJ[Ou56Su[x1iăU"Ae2')Z/aJntpF5U1%#7nR5LUa3peo1+R_e^C^<sC<t&YA]lYuhlf.vrn\Xv6j8năU"Bn<p-J%9)+U%aceuBTWQ1'uJ-yAn?kSsV&M=GC7genSE.J7sN(5\A59k/$^i?C.ăU"aOmbWb</st7rdp#>5x5^h]DJWZy3mJt^]ij6w6c#<oS=6B^Q-QSjYAD=fqGRmg$ăU":k5M%#W<%-BEd9:eWjfL8XADw2<o.OYtd#^:cL\dYMxrrG&4KT7V&:j0g23pOj]ăU",[0OuoM#G5qD*ZGAgAf[zTbimfA>$3AyTA\Ud75E\UH*94PgA+TeVZyF^YnvvFQăU"xjnnRbaR.ted*<+G?)^2fZ[hS[_Eth9TUNL)d,YDe%ql^vD5bH;gE\:5-1=g-=văU"V;5tVrnuK+[W3t6nZxtp>ZuwL>JmDg4<3?+mBfD(L,tq#r6ZKQ.dE?gCe4x#+5uăU"[gWTA88a2gURb[5K3T:-\k;7/,]t7wJTclrc^8tJxL(MNKKL%f(/N7eO*n,R>#xăU"#NSbdtD[PV7IZF)A*>8/;d\wf/n*:95g[AfN%X7]5CIK%e.;2cHN\lnQ6x.ntLrăU"eB<OaS%86Xfz\sf1*TITcChZI[OEMzmaQ*F9kLI%q%9$z=A%5SqQZ):bCR_i<'LăU"n['lno_1*kcIjotNu[(YNveZ>v#pr2ALc+[COSK6mY)B#;uy?3)]Iic2=;YFVKdăU";EC0zWu[i4YtL0>b+e%jhRhgaBkzDR*(XcNi3Yx>dZxT$.tKxDg0+qr/*#:87&+ăU"&CYNaCS_jsIlk_GsA2dN;ZK>W9SQDcJS^VyBJ+k<:y<&5#C;g/SR;G040*;V/)9ăU"M&j^Muq[,8tNjVd5LlQ'nJ>3K;;+;S1jZTx(ImoF2wh/CSzu-+AiyFKB;I;$c=NăU"AEO-18#m+fd)A)jGp.eUOn$?]f?0h0t1]l$LXQuln.[ca^5f7ItU0=*l+p:4McMăU"Wf1X&1Z0'Kn*piIEA1S1%3I9&S3w2?m]v2/1)feOUQ^l4EoDYg:&rkKdtmL?n>8ăU"DW7K50Va/X=)sd%%[1M$EL('8tFor%5VC^Xno&9RkO>kVE.DYRu[3uX/K1bmiF:ăU"O6p5/)>y7UiDY6(Tbt9dqtLuXvtdkVH^/>&=Y_063TACVa._UCZ?7_qWvQt]J#$ăU"ED&/'&Hjyk%HYtI%;sXjjwEru)orb;%i#$:*d_u%7P)Q'd$vZ:m'o\aVvVXMQpuăU"76'NIxeEP_W*_s$(]*0w1LTDF(4Q=_?G_L7HQ&tg.P_pMF)<\#O(pF6:[Fu^SZrăU"<00TMUVS'BQ23X[kA;0N>&Y:WEJ(npbIsuuBg?k#'xrwR[2&K6*g,yGT*ID^$VlăU"ed[+P7r(QON1Pd;KXq)VIpNn>cX'Nf0dEHqZB:f&E%jG$Ema-q;Q?JZ6[dcdW9XăU"WHh);_9uCM30u_Hb);^LkOrhlEpAn5(#LECOW%_THr>.wT(%RX7(Rp*P[ou1)5*ăU"V(Teqf6dw6p?%%esBxuuurj:oAynq\JiQg.[[TTHZD-C7ky[BQcA*ELOGF&0VimăU"ReIMsdi(MqQPS7AQ(VRBVgV6lo0ec]R9Xm\DvKn0*V0(t-CIDc'.p[X>9__WrD/ăU":#:]%[w#GBBOES^Gz:<C.$H\M8#iM,7<g5e;ZU;gIUu:*<Zb.Sd,/EqEiI6\pgiăU"7r+BmDZd\#gI%quH$jQi5t;77vY/t3H4n'&JJYfv\;%?ge/W-gB,:N+s$[xI*M&ăU"PEqiM;$8=uH9e29Pw%:fl67fPR;e%BBDD<f<(RUTj_f0_rz#oT$t4Mg:3)e2_djăU"9Ql%];VoV[330YBKEJ7sGpVfajrWgJ$91z/6h9'%/>^;3I$WY9^[nyC-FT,lpt]ăU"ohH((Qj>?&Y=-hYVkO'lQ)IDteKe/DjV7gp*oJ$)6$f&C'x+pv_[;v9\V\OO^[&ăU"-46$%/We?o-5LGDjF3]/]3E[3E5/Q>j0p3q^]jp)Dby<l?JfPc\)$V1I,#S]<s-ăU"Qd&fdg7oU9rHwO2Zbc=^-FNaJ7OQS'Uhy8RMQ-*JG2GW/5Z?CSRT<L(-Qxk3NeJăU"jq:9*9?lj4o?M/KW;0GX_#13l,X;l31<+]9+]k1#D$/4[Ap50MSUpA;Shd&3iPVăU",>hD%_1\EEa#4l(G-7aHkL-JV1I.[IuIJJs-6-#i%Y(uoaCA9aJM1EHX_c;k^rPăU"tu3XM'*WBb/q*N=c09[VAr6d4J,r4*PP2%ff&Zj]]vqn.uu,YEeT-=C-t3gR5gcăU"iuC4U(p-0Cf9F<PRqc7%EfLnB,jCRd&mhFe7Ya\]QE>J39[lbH]I?aZC5.F6uuVăU"DqMIo[27FLnVutLkA+;(2I;f#JJkhq0IF_j7iQY<4PVf?ZL1QEAb;.f4Ca?<q2eăU"v4W*?$gqdT\,X5ujjfV;oUntMxmJG^8A=](QNm]Ji7CI1X3ete'OJEJPc;=&ts,ăU"J#[0F2$WtXhP3kf:ar--Gq.kPAlB9(A)y08ndk++N7LNJM2<<4)H4B5oXbsgDjvăU"Tnue'(AF5j]*:q0Z0m+?cf$b8_T,G36$EXPvCL\;%7^xgg(:22j,F9/d041BEr-ăU"A4gGB5MlcH00[%cP9rP2F^-aYIqiz7ld7c35^5-iNn5dW,qP4'03[\8mb>dT>b>ăU">4]VS8Axf59:%Jm9%:b6=R1.,ePg%lG'+P>\J9Iw80eg%f:GzpDnnasoTTT8HEsăU"Q7F4f,wIJ<'F4[R[vxERUxD),,RBAl]jw=dVLbU];n3\7*j$AgItgE09WW$fimMăU"+IL6bu?u.d]AMe%n;B5wuwT(x.*X-BrgqwM&IHCPJeMcQrop7L2+=60d$38bc][ăU"IZW;OIP[j_$mVt_#2Q8fpb/xY*Rh2DU>&ZwHXN&g&&)&&qp?AY\DpCMv(qNNteZăU"]BZLll5+,#m2blMyUKQH7sSkZ0-Z3A<3LxpR+gR6_70YoIAfjIE:8Z.jU[L_N,:ăU"L_FWp>1'wRoq>MB5tLmu4Q(8Svbm8_W6T9elI(f/s.Xak8tmba=txJQ^u*B*j6/ăU"/es3Whuvej:zmI1sWg;>7Tyr,r/i+sIC-(l^?N*<'[R:Q/]dYHof&q.Mlv7tL(5ăU"b#mdF/qC16)6Gsv_L&ptZqq^xm.A)ZX1(6r*'plE1%BJh3=bCY\P*,fi_7H?X;păU".>8$j.90&-MgNH*LOu-v_XrXMx\qZb\60&:b1[8PsJ.V3IiqLD$SQ?#uuKjVDHVăU";;g+4pPhC-eCF%k#i_D>&b5YG%4VT.Ks(eUE05aCFj,d3H2OYe<Amuuiadhu7xjăU"$8fmUZ3laSI/^OeQF*&(6QH.].ki3A^ZS.bxrDf#a%Q7,<1bLQFkjLQ^SI+w1V#ăU"wVkp*U&)P8G-gF\FT/l,+/WtLk[R*<vt&cjk-U,TVFsOabtUW52)XKP+W:Y&(G+ăU"hlmi1g16l\,ENZY:[.9&YaVbt.R/tN0DTs<.O78qbGQmAM?/]*gNsu&Wv&HnuwiăU"\H<H.7eQ(S)*nm<D))FZJP(;0thuPq]M$Nh>GZE.XkWNM'bi#z>gNfV/E)b=Q9&ăU"gY3x1+22p7_#tk8R;\NJxA\1r:Kxj,z$5KdTt_0Z4p0%IFB39e,I,ik^mn_E/[tăU",dH-/9V_X*ZLUttth]&NopgnI_Zk\)eP%S;^2(R/N)U$jH8&M]]G4Oof99G(sdsăU"s-8VMDuGbNp&3&dnQzp#qB%>B)ry>6D=YUU5Yy4?AtpSbm'egS-L\R*&WcN:Y_-ăU"4LrNEHQw<*RS2F^Y)%14qu\6#Z##(]8#bW,rH.87FgSrhi'GVt3d#7$^ZL2Z5o(ăU"z]c]?Nmkt*#5#4%pIbPZ2_7m7Jm[*c.x&9*9VJl^9xO)m9CY_V<r>r#q_saQXXBăU"Rgp+qaxnJayAF=R$QfBXxLL&3'+PJg]yV#*i=+ASUw]mKf:YkRc?Wb\;wf-'<Z-ăU"-f6-]^A8YWwhCYHluOgw:-wg&5#335]6n.4V^k_iBn:#a_Pr;#OdcbLnpOV,2HrăU"oK6;bRugs/00ia#tl&M_,4U=v\?M%XGrWO4t0kh2wqQS%RZLqqltTN4JJJ:,Vt$ăU"KT#_Ad=f1>D[*YOulfo/Rp%2Eu^f0X>Id&#cqQiiaL?T/qDkcggCAG5)'xxl$xdăU"=\ij)x#0bym2%V+ZUoO\OJnxCegXDg:[P\ndHhx)d%qU+<6[-lptl]^Xbcb0\XuăU"3jG4p\>W5Q*Bhli7K85tt'wm:M]chlMMbBP.Dr%Hf.8bp-lFKT?p/SPT6HDAL0=ăU"OH9Tp'o&Pmj=yRhAWcx$DPD/^,higmVbKl4hlW3BdlGFFWWUk:*^E<RU5UWp6&VăU"Tp1[tVLgb4Ns]:szeMJu8_e%fR8hJLg&<uVXVVZVWWQL)lf9[u#^8k2)v*PPTH]ăU"t9ifFsdU5vuBf40t>6lOT_z5OiNMmXRYM)):''A;n91H17[s$F&7CQa5#[F5SrqăU"3O;&YO[-gPE[(eW/hJcU;QEwuXGY$e[t>8G_$U\>XLchWLh?V3j3EW]?:_<x$L0ăU"XTAEnBp-KCm_-51_ZsnVyeD'/mL2OUQAM'L4Yf&+\gH9kGB:N9-ENOlj')Gn6DgăU"hXc<d9^6?)nDKHb.(vNovDN)v.c(Y\C$r6:n:2YsXL/MbkoXQ$0uAr&kUkm1dX$ăU"TCj><[FZ-j=2a[n(48ncYi^]u[^8,,GdTr$FArMlAMfbkXR$V,_iI+J5c.<(.;#ăU",_i+JgaPSX:H>\sGn$smK$sF?UTFP\kFP,goYsoNqXIc?cscksO^;M],w8sIoY-ăU"T1FX&w-;zSXOc^0ocejI\&)aUKngxbs.5-U.T[;YoS7?J$#OIV\aA]knF2RsvfcăU"KPEbh>bAS>s5lwgsVcL=R^mmU^Lqc5#s4A;P[<#48lS73W_S\4QZXI]5v.h)qSXăU"SE_+7BjK=kDP1GsgSBjEhg7Bu>PK*w-FQ%<Zcq[67_G[L7]E8tkl=LKj^]6kEo2ăU"O_EWG#'XF^[>])GeX\i#hn\jQE#=2Bb6]Db6^bUrkB5EGC06b[LR]EmX]LRgs8_ăU"mH=Zmh[#I?9d_?^<Vfd_=KdGtcP.r\eJ#63JlXL]OX<<ll^/Y2h\1-\aA0n:qz&ăU"lrL7-RS9PM$ZWE?T5#_]Xl_khSGdq\6oU'6/fXXT#h=BYE2>A_Y$[>lI\G[A]2OăU"WWgkR\S$,belK^E58^>)=WX\KE6ZGf[vmq%G4[n+SjI8OaB4mD3aLnQ[BvH:XAWăU"Q3wtQL>%i]XFarZmM1evgB\N;G#/VtQJ.OG9[.tR\Gx^aTg'nK.tQHrx-isdu%păU"&'9%%9%%#%-%)#xUMmsgd4v%)%%i%6%%/%%%%%%%%%&%%E%%%%%%%%%yuf%nsySăU"%gfxu%p&'9%%9%%[%-%SAYUMBbyl\f%C%%5%O%%,%%%%%%%%%%%%E%%%%J*%#%yăU"j'%yzwj%up*+%%%%%%'%'%&<%%%%\I%%%%%ăEND SUBăCLOSE:IF S=210AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăSam Thursfield                 VFONT V3.0 W/EDITOR            sam.thursfield@btinternet.com  01-15-00 (12:42)       QB, QBasic, PDS        459  30260    VFONT3.BAS  ' VFont v3.0, with Multispacing, custom fonts and an editor.ăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VFONT3.ZIP",4^6:Z&=22396:?STRING$(50,177);ăU"%up()%9%%%R-%S%[NM/F5sC3-%%%,G%%%/%%%%gn%txV[%SksyEfhb:CA&9U%4KăU"QN1+pCh&39-ND+s=aIET0_4hA.mhb9_<+k>5y\<;W%7B<w.F&41s,#bcURMUNq9ăU"K=56,y]KI_y;:GjOhHHWvgRdQ-k&?OmG4%sXplUilkBhPlJ.N]wMGhT8RxvNxAiăU"f^8Fb(ksDz5MA(,-0^JtT-BkosqUv_7UH.C>B)sOT4ye<(LnGxsW-k8UPp%,vS^ăU"P<d=mgc>/p1Nx_e67#stVl>:Z>DaixjABfVzvMd[>W$hnl($qDW0DVZY0'[gtOQăU"GnV.HRZw3HV(=?aR+n#M+08PMRtA<85z$QZOz7_JfkB:Mk7Pbl]rtt^h.qtNd=EăU"HwlSkSlRT$\6eKs'c,LYea98c.trjc4+[Vw9\W8]K:8A(pZPCO#>i1ExE^lIowZăU"S4s,dWlsHZ*Ml6<1njctYW(CLX[E[9+>w[?1O^u;]7$/h4E\rW%89I_Qz9,oS&'ăU"D'g_esj48Lb:oF&uS=$-'[S8kE_SEXt\3=H$4a%frnf$;N]1Coc37Uk9e&k.C88ăU"&Fd&oCOVNw&hyu9XCT*uVG0KudP4o37rTfX6BFef4/0n'P'CGh\Lk5rGzl\9Od1ăU"AGth^=L)HepcedAO^9L]nvlmagA8m8qeee6nsZ3^UJ<POOrFW9&kC?.m*.pb0NJăU"N,Hmm)NF0r(-]IUl(L[N4#X8.-vIiQ-<k4NJ^e.Q7RunCa#%(6lc:J<hxd(l;?jăU"aDl)Ys[1.<DmQOS$VSv6K)-KW0_8Tt3v#qThXV9BjDmfox9^l9uxm^n2Wd$aRw^ăU"wG%Io289o8P)Q\X\^XbR#uHlP/;M<q>J4J5igXy[xr47&jkn;nOq0J^(?OJ.GV)ăU"EN8on&Sh:Gd-k>JX2)mrkYJOh&i:7nh;N2:4Kwuk41Mb54RwpXHK[NxdjfQO7\eăU"2D:kgb[xlgS-SEN.:HmRkLsu9*;<V47SAxMbVGtg5ZIbr51ufqSF(x9tP8Kb<k>ăU"]hR<<7=e[w*x1#76?hh%dqF=l?sQeb$*-DsSth&D*pOZwD<QGrKQZ88;a:('e_eăU")B2nXpB8;q8oO5l;n+aRZXg=ESFkI]WSb#W,VO,'wNbN:6Za?]P[wf<cf]dO0udăU"vTFp&ubJEfYmdgKVc%[O%-dF/Z*qlVVOjWcJ9Aiu/dW0EeJ2i\n/$pdpU;zC:F0ăU"vq+9gImv%FSCuTP6c8oB9W3ZBnxmiQY$;fc4*j/>RNgo62$TW2Cr^D_F:#]p99'ăU"N[IYm\JSW/i1bmF38qlONSz#%4:#)UnVl[H:WeP(9\[xoaClYr==fgeO8\nbYQkăU"x-=?ju8iiw8bso5Xc43(Ju0?xyDgNPd-tTg+He_7xU)wEgr;4n3PkN.NF9J7U:tăU"72h_:z#g_8v,mxln8l9k.6tZ+Z;Mh9Gr$_PB7rHK3Cil1o);,o^PM4V5M[aE0,?ăU"Wh<be^jkwJM6(=+7WOjAOr*ol3aDup6sE?8$fXh^34GOao)fNgbE,/D\fbrGC#[ăU"x?a^dp#xeVf:8VREr^Y(LqH?BB:mNuQG&iC^,e2N]k.THdP$6$\NraGx>\WVn^[ăU"-8'LxaVwLe>H?+,>sN<x;^E.Xu)&LSM5nkKluhZ>rxWtQ#CS$TmL7rTSHP7h(z;ăU"df%d>^M]x6loTu,UfXK'6v_zI\'qt^tSlf.$xa--aniANnu(zfoarxLE3Fgwb[0ăU"(?uEo,6[xlQn;j*xS;AFHpb'Zd=v%?A6_GNXM\xK&r-:9XkU1u[3O^>>$t>q:4]ăU"$-Hrc_-fr3MP*u^*]ux<x5Mx.8LbV[tFBx:&bKHd\jcR\x,[OSu;i_8c<p+B]l=ăU"xOucvRjH_(4]#79Qh*WwdQh<dAYd>#udXKr<+fOHx;]8Nr+8NW(YM'72b<]rd.uăU":LPxCr.xB815LR]jRw<xZXYQx3,b.(r-F8lltvNYmGH?8H>vngdfq,w;mPwZbMlăU"7P9xOeS-/wtuT/HX/uP)l8Z7ba=<(3N,OWU.$Ah$rwYfV?kFbxfg\(fbc4^w#C<ăU";B,doxjws-]r#lN.nIou'e4ak6^+w;)zFdHbiTQ7+2s_kj8]8eTM-])NWc3R^o]ăU">3d:R8nM4,SbR&sT$x>*w%z]pTu\8^WmLS;8d/t#0:<7,ki;,XuBt].*bN/,a<%ăU"]Y0u?GOxl=&Zw$4PwPN09ZNN,^nZlXJ9SOmD;>NFGvDQeu>.RjyhaLPO$mu-u19ăU"s/ZrpKjs7Fm>bC=J;d$ui>.NTou#'[0_d5#rLB?kjKi^/Hl=+v*k&4]hcU4lZunăU"EEL##=E;i^xOHip_kl#8aq_5KVwgjG9Lf7pMlUWE82qA;8xn\iXuj4j:Xrx;xpNăU"dN&[_NT^dlrHNxIVb>QrRg4Dj_p&v%_W7F(dJpxYNnXNb]]xJML:S$56G)lo13>ăU"GNpzsf8BB39Wu?AmkVe(dQ_a*N[#kh^6s1[?PL/&LQet^?oOh//c]H&okuV?G0XăU"GIOO\?_J95KvK4Ja2miFUP8bLVo)h^jl_r\.GZpd+YX%mCs3K2p$NuGjuTLnkzuăU"5#)^wT7;G>rDsvvQ0gckQvv&4l7$&pjJqH7;2*VfLPv'7HXdaDNn-=nuQs,,[PnăU"?cu>qp[$r*btdrJ]VW_N3Gcwl78L_F6Ho;L^0iUe>WixN%GpNjPMl7MkHZ8t5BQăU"GL8A:V>U1ro^jhT^zj.nc[x'Mm-j$^Qb<^ix5WFCTmuS0hT,^hef$^s;eCdGZxjăU"xu<PxggQnV$W8jxjjLx3u<8Wu2%up()%9%%%R-%T%7NMX9&)'m-%%%,G%%%.%%%ăU"%gn%tx]S[ksyfMf<[+n4:#xV<VRDPh+tiR_e,odF#s3J-N<f[WNuJ8u[.reo7yNăU"aNNJJY$%I=V6#Q=1xW<<Mj_wThSaUa=<t:kI/yr3H.d5#+QJeHY<L%sWO,&C2_făU"eWlWjFG?6,E1PgY&lll]HgVBnPBuHx5VYN&tPVs^/zOzwnZRYi2(3,cumjz(lCWăU"dAVo&2?zwVPASqd1X8s\P?N&na;KwY)6EtO?_vz09qPWA&FLS'W\ov[(k/ehy7XăU"G7V<kQ4WOtx+OLPWV*Xd_]sM[O'$L2xWLM4cY\Hdt\]$4\Wc>[A>%<Tju%cpJWBăU"Uj6fNmRA;1aoA*>G_rtxJd3EGt698l;a&'vitVbeLnoFyntL5-P7:^w+)xE07?AăU"T567s),[QxN0E9S36F7K)DvCk*;fX$Rkb=lFTd(MLp(6DF4HH/Tn$q=TPk&5MLVăU"57a86r5(<D=nqZbod7ZbhJ2xrk\8s0m09s8%$E(SC4J&gBGVEAtrkM\%1SL*R4FăU"AZOJ*/y2q$$:(q\ffHH/&BBNb6a,i8?*vP2$-w-TxA4Y3-P:v'GvVoW;((reefbăU"+TWPsia-4cX\D<7)59>5xq[6Zb_crBN9.Vw^TS7p[o+OKAtFiH>hL:j.c-jbfnkăU"39Tm\??xuEpOLOF)f=TLrcPjhL]HcMFSM7LAxLrng7bQsto-U%.<NC04:DnmcBCăU"F:7cPIk-H=s*&>a99Of(<J=cWWvPo=Nf/u*/$:M,&-+>ZCO2>u<lUo;lGbu8a>7ăU"We2kp6e=X<lGG?R,EFgT1hssIhJZ6Yv('szBeX,/b9Y<$rcgCq,HeyDP&-R^VU?ăU"Ei>ponp#xX+0rBiU+#uarShmuF7+ASNNKz'ZD_CK6SFJcOitb+)vIJ0#s*xo<dYăU"%+9\LA]XvlUps\iHoJ4n_s9w\'XPOhtl.V(P=7>0;5G_H3=utjZbL%Mb#]aD6KeăU"]BHNW<NX:wXjdTGbX%Lb,tvj#W.O?X9Y1LwgOnaXmL[5h$w\kP$=6PWfV-EW?2GăU".1nN*cfvNkW4mvn51^K5G8Poh/5C4zI47mu<R]g-87s$0sP-D)rj^*$BhEcxU04ăU"36A)U%aV*'jU*wPkRWOAs.[k,_9ow>f>ipC?gHhj0<uQ-j1X3=0pRT$Q8\FBihsăU"q(?I4WLnSAKl\Kjio>UtjOOiQ8H<;>RwcXkP\>Kas#CHui'?7uU)G2Jn\^93qV/ăU"P*(8UqkR#+G=p3U0RcCR8uKn<565Z>=,\+\Bh2HS79FBj=j6ZN=9vyYJI:H$12MăU"[)'nt7H9un#1eBlwgIGr'4Uc8bf=YxB7wFksVt\$cg6Xj0d^f-kz\oj)3+awPGrăU"bdsS^>:UpbeLDlSlfWN&dS*$dBj,0'WVRhfDn/M;lM\?U+rRIh;GSr>fEAoVD^&ăU"]xAfaWj*Vn&TH*t'EY,E06$Z3F07t,VJJ[jCgrWEuj;lo8C-]P5&AM3LloUV:C/ăU"0YoDsbb[v,Rag:gtj?U4*SVA<BItT$2n\ucFw(08bc#ZO%>c*0$wyjb+<dmjQZSăU"M,3x&ciUslmR:jWZ(ar>hjSFm)cGw4#Wonp'P03$tEFRzS>Na*JldO*<u8YtFPyăU",]#HYt(ChtUNO9Xp'dMP:E3uxh?8nh+Vw8zivXEgb,$D9\c\#:S)Nc,s,5;LPkzăU":kysGlk6ULe&E4l6xl4cBRsmQSE#r%>f#xp*95S?K)=sJ5'JU+TE+.MZ7SeMbuXăU"y?tj5FEXk_4WjTpR$6VYA,,)*DY*$#wLAB:s'A^,VnKK*>Achx_UXTZMEcqf,xuăU"Fm4Yn:L&Rf9HoUidgtdui0uaasWRwM&'DhM6>5J<rxqD^s4z_9VrKwaRwljObdGăU"iEH^aNcY6Mwa4r?lZq.qneD0\kF.dBE9u05:OBx[JPS-nbYi;X?^BrBnr.$$HfrăU"rU7Y8/>Yn:>.v;HNxtiqfj[B8jl0uTPB%kF1=utHum#kXxpofaTGTOb'j2c-tasăU"o(jo(k/xJQNtTGvfZdQX.[A6HQVT'BDmIN7>gPq20O$U<Hq&QBHgibu:*5^BQQjăU"(IGePJ_Ko+L]o$U>k2\f'dY^Uh6-aL)L;mu/x%Dih)?_pd.&=sU[ZEA>/^$Qkn]ăU"4T[xCdZwnExhZdc*VMx?0uhWu0ZpG$xtd205,3[IBq\u<R<wcQmq+?rX+Y-VC;6ăU"UgfPL.cu8A$3xH=3s:^x\NUJY6??lvM&bYbq+_0k;oX0-/NOAQ-iPW-#Xd\Q6cvăU"G&PTE7hdGxud;<seF2M>Rc_b)?g?k$E(H.+HiI9'Tk1q7\#x:<X<,-).Lbe]cVeăU"]83wl$:4&OsSHHp7wtdhM?/#FOK66(o4(ehg&r**6-nmBrS9\G?)0$SAIL^L>'(ăU"kj.Hi\[fs.5G]lRL)*v.6:Y]k6ziJn8*t%QPFTZp,]AKedTS=QZujLIR0s^(V.eăU"2M]AR6jxN9_T#f3hg^jnWkrX3tt5Rir>5XddzjWVrNDKQVAGkRf\(HLTiK&6m8dăU"Qn+iqT,Xad)'.jxXVf/PZli*enoVl_..#T?w>.;[G?uh>cuH\xfppf#r<14xb\oăU"Vg%?/a8:+RW)S$VkY_crY[c2*oCm2uL5HE</dP2-)uug&Rh%Kx;MoQ[xMziIS,]ăU"WkbMREgz7/[_,raM14a>uv)thtzrPT$G(\[C.EmMrtCo7GrHR9gvZ)MSq;.w.jRăU"9vVZ)MqX;.aN,fw2u%p()9%%%%-4%\UNdMIEr*-<8%+%px%%%0%%(%%kt%syji%ăU"SgfxKNa:BoSm/XpxdxIW<\#_]ASI=<DjES'?GKFB9?W2b>f<R%-h*Hdo7#ur(5_ăU"h9edR4c0g^v;_)&;:4j4zjpR'cUcLWLlsm8B6#(.BqbkH(eshK+dI6#A>SEZTIFăU":OVenp>*uiBClS&0hcV[6l_E9^p%A=56NpoMfq$DWar>:kaTA^HWB$8JImo5J2năU"VuMY$XGUEf-p=2&'Ta_36BKJQhl$7_C6>W^6uYv=sR/VG?hh6UCGFXFkHh$r)a$ăU"]HbFdUkFDA9=f;xA\T(&Xl]4Ipxn$a1X7aAve=C$J1''%>hA]aHefA0ugDlVy%&ăU"P<jtQ9]1I6[v'R'UJ'c(>O4>3ifZLB=%aFlbX>9B*\&SI-$.1X,^N4,AX&hkP8oăU"E+dGLe+CM'\?AWE2BU$E\e1-PBc&xh)3b$T\V\W4k2_/Md)RzE%5#7HtTZNLN<XăU"^5X*Klww1eaYnquZrV7\edT5h%W%R&=4,s7Gunk1;[*F36.gTdCqu#G+t3*.]G9ăU"GR.GB#U]eTVka:6VRX^q:^>:E[cu15AXfgn)C^<EaNq);a%/lMl;E,&354Gk0;MăU"okW4,1FKXsOx>b#RAq'm1Zg1g'EAfCf'DfB3meA<O(nk'Wh,w)ldfq+OwU_q6F%ăU"SUTAQ\:Vj7xWk<<d7gTBxok$*8qbqX1')E\Oo3H*Q,<24D%&6=.unW[g+sA,t41ăU"nG>610O99oRV+pDl;_$t%Kw'ygTGbI.(VCDsYrqw>K06Dset<lWfr4tPr(-83t?ăU"S6OAdhk.HHB^YLrYtC9djYc;mR;fZ[[.H_3_#u?3/i/Z8?l7cZ6VA+UigUNN$5GăU"(L?Da$V72e>>l^)e+MnMB2#mfh<FTShKr/co18(4lEAQFd(U]SEWTNsV8[wMUsYăU"ivWhbOWkCt2$2rB4eXlYV2LpzN2459F:BXOMIK7$8\E73uNMPHg<Ri,2k.taLt8ăU"F^nf%RPdi8D1bD3)ZyhI/$ipg/dm76pQhTc+Q,YluS]8f(Z)20kK/JIwi*P<xx]ăU"lpU4.AQ?ap9UHZ7Y:u2hls)wMo[<MFt1XYm;aCujq8%51t4l>a3uPruwXuaIE/[ăU"bc,+U]&wG$0%Eu7oT\rgoHE,BZjC>SNBvIoF8g*:FT]*ChX]8u(gmn)Lx964oodăU"g?b#)HoA,Ah1Q+gsG=dw&OZ05^[^ha[&E[Lci?'npewhFB:iDW-FgA-ah$5c^d_ăU"+K+=X1BsUwvqS8*a?iN<,LihG1)NOB<:P*TIpo#UM.5]3)1uSOG;o64,)RHB%b;ăU"8Ds<L)ttIEgMFr=p)G*fCs#?7_mn_H)i*rWA\OpuK<UK#4#jzJ)ZW(pP84Fbi7DăU"Fa%l1:(IO9-#2y55_YEzfG9((5,B.:Rc%93Vaj*q?s(;AYpzT[<?aqs:9?Q5$7căU"^E,fl^+3=CU4>3':FcIiceI3)KVSqJz980lK:mB=E#2/aCa*Jp_+=UnNv?SZnBcăU"'UcjC6QjqZ/=61[lDQJbrvON\>=wYS+mYf7^;Ip)%\Qc]1geQ4[)R[Gg2v\Xaz#ăU"MLO0,=ce*kv?>0c/v9'#f__MF_q0\Y\;EUe&'<YP*ZO_/2'5]J7=HF3vvdU:Z<TăU"-&7;2C)Uz.Z56zQUO[I5d<cRT]&7z54<s],zix\PifS%r6Ueji*4rW[suzCC'urăU"0sqSTY8;HJo_Qvk4_O6#SXB]cq)9c$m^_UNT.yXcJ_SS0OI'hSMfY;x-[*.fPi-ăU"oT<+IMBIC,,Aui%VxKjSI9lN;7.OI?zJp[gOk4MYkF9)U,X_^sqh=/2>E:JNe\oăU"Fh=._;<X$?+:8nJA9/>jCErIJ/bn9Y%_ypR;;p;/Fa-B'P<-T+XB'HU/_0>#^VbăU"k;&m2dAX+=%Enw,OJDTy2rU/Q0?sECws.:S*YGM:Q_#wU8[?>7eKJ-Z/h?9>=EIăU"*/,GrvY&XaKAfE^_C<afK4Bo,EZb9%1w;dIn5SWaWc^G6inzPY6mnZshsGn4=2WăU"XLu/7?1*jO4%iiH;ex,.#?]$D/7q;Krf0YP?&=Rm11l2[,2QQ=_-#>*<NP*+=aXăU"rRi6XfW#jW7Csn[s(TtF=YK1n$\S7>)1bEh;+8[%m+;SaFE9/yDjr3k]g_L=5b:ăU"le(?1IoGT(rNi=b_\k<D>P10--KQSlK\J1Ob(4B&GH\bWq;,35\<6l_+:4>A'^xăU"Bn3>T<=ZhOk$Ee>Y=[+#?f3O5ZvMEbO9L_t#31z1(&cPQs:0=+9UjZK9Lhg'CleăU"P-1^)/q8s[MjX\;/wFv]Q'jUMOs:Ou#G3has\Ec#OcRRUzB#dEl8V_[R(JpK(01ăU"(-PIr)RmIl6a'T<L)o^V;6K%4]2^m?hYO*/5sXc8.K3Y9-Z-[rWli)HC:i4umA$ăU">eafo%o4iv0$?oXwKw:Vvv[8vBeD,_pYfF*uECbX3&>:Do[w/oD4u_ZRGBS^>I*ăU"=>-;f;$ZTYSw5)p%-MRSYP/nrl/ne.$+dt%2N)*2QOJNt$*Mf;)XXsWCKY&ge0yăU"OTg)Oh\0]d<30>=;4g)#:I)=\B1IvK=yMJo7j=sSZ:b=A08?xwtDtNuj$qnNwd%ăU"jDe%/7%(fOu:X=cDmP.&gM2;B1vIdL'>34[&_U>ZXxKi^9;MHt1En1X8.i>R&e)ăU"?kTThLZLL;.JOWz4H>98NKb:AU'+G\#&f9w/Z$V:wY#Sb^s0C3&*9gZ*>W>-aLMăU"HZ+WSX8d64iqmjm/:32X$qpnrtOlVHn.pW(qoX83y<U.0-I(nqPGVT>aU7dj>YPăU";mh-UH4)QcROi*hH?#TLI+4%+%TLd:9G-E*SdpIid-troJd(rjr(.jm#bSf9Y5JăU"/asO('A84zWyLGr#:$U<D/X'JF%R?sB>,MiR9\6CF_;\^g8)#pN/I.-/nh%05%/ăU"#MmHJlCatT=e%qEIU>G^96b#\sX4;JWiB/e9'.)4G9uJ/['Ik)TTl7<r3_T#KonăU"QO5Q>\C,&s+gS1<&O0+Sj<lj*XC_1r'j8;unbCc*%gIcOI951FWC?RhK(I>V5)YăU";(ZQsJZW:$hY+#nx=#U_3]/ZEx.D#*<jX+3Op,<L8aj4l%N]o7wtpcIG'__I)VmăU"9IoN/Glul1Wov^3<Lfc-s.6ZL>HiRF5QJFUKQ%5JZ>;HfO*1tOtC[,bbL==d7SLăU"l$jawA8Q4lTJ:$.Yo,mJ4nO0oP&q>4v/-V>GN2_lYW*ScoS9Q'0)E0tLF[F$f42ăU"L1vutA.f:5nEvt'm-RG2GKU,);Gq[2p6p0X4HXoED.Hl;EzPHZ&lJorpDe)U^K=ăU"6W'g'U8/E75WN9-I7KA=p%/R+MNGh#d-1Enb.&R$/lUF5+K1xb,AIdIz0Z,KljYăU";w;fx9'UGB'FP('+.E7ZVpe/hQi$h4<P')cs5=3J2PX(GZOO6(2-h&=t85,M%G/ăU"umh[c6u4sYoxs'DT,%EA*rZ&HEXLh&tgHGFU#;?u-]aMK*>0$1i5LHn[+i(]GTHăU"*8kF>0]N.df\&0ZOfhI5A^f^%KAKfntAP+gc/NQmGKj3,.oG/ob8UafRFWH1oe1ăU"_4zTX:YBJP$Ju'FssVzo#6jbRt6OL/z'(D,;gOz97^:XE2+)eMQo%5(=iZ.nR]găU"D]>wv)Mg5\pLVzeSplkm^-[*za&'FiaM%(eWRDp_q/xO7Q/Zp4zY4*iK%V<lr<:ăU"P2Y5sI%2W8inaS1<u?:LoZJEVbybD;5Az)UQZ#&8U1s5n=-2_GT*L+>;Cd[2JE4ăU"7$f[,[ip)b?+;;LKu(kCK\oQ7D24*u[GS7GIHSkmJQIIK_hi,[H<oojD*s^rC01ăU"Ww\;Vj$ID,oi?J0r/MdnCX8XLg:c,P:,/&qb>-W'Y\U>MaVJ(;Sd7%.S.:u;/M6ăU"SW5K><OpVLNg](O70KnEa.Bn:/QZ%;a8c4#KDz1XP\?P*q0ZO(I*_N1OCHv3)b^ăU"FSxA$LF[\T>Of(''NvouJt1g]bq&K9'.\%*Q*o/6_X*&7tSb(_Xu?2^H]ra?3#6ăU"c_b9n0n8iTqQ.IhIXU1Uz;3&uUn\eo2z*^$1c#GF#SY[j$G(-e>_CjhgPUP=etfăU"#Rkz_QPeL_<hvkknHDUtY852fa^px1E2vL=Fk'rdDIt9e&K1Yjugbtl[K$Bl=N4ăU"K5n4&DDuH=$^#0q3UtCoGSDbsuo(b2BaIdYnhXD?>j]UAV>3]he^C2EpR),jecCăU"4LjRRcL,K.C&*l1enAc&^ezh#EL>LLCPiU\O[xFeBh<sPb?fbF'bU9eFZyP/5x[ăU"ygWr#HfuNx=Sla&0E?$Gq6lKKOfOXxa/lZnsl^2C-^cjt#\MKB6Zd_LxUcbG=5JăU"&37S;e.:WwmEOj1+\je%B-WLv38$s5P6:M/wcNlmHOK3[fFD>m/'>+jwu?JmbO#ăU"N)ZL2jt37xPPiPQ)_o5<Aj5An[Ms8*^[$udUz#vWgc%:IVv9bR$#tYK0CKs%FS1ăU"bv]UGSJNKUejM0AN#Q&i$L:U%lA)V)u(M*.b.'i)B(0OZH4>omk+D)>qM0rCnY\ăU"o&U:dR<,.(?4l#?+i_C:?\dBI$C6<]RePQbbcsw_b+Y)9iL2kKW'kXiY_Q_\HS,ăU"diE3X>C3Kl26^[:DCcN_0U/RGA5nk1A])g.<lQ9hT2O/2[,:[.5ebc:S$96deC+ăU"-[t^rp]e'=z)z0UDMB/b'm0+'^cEDu4s?=1$c/EoPYVJZD5bR:A<6E-jC+q55V4ăU"(9jV(4PLxlb3BNWF=X$H&ChGBKV?'r=t8:v>WHMi$*fC>4N=clWkxgdAV'w$(%uăU"+,Gt,eWglvP]4ZEuZa1.:4^>Jqs0)^RrewRX%HQDh9[OBepfsV^9)kiIeg?c-WnăU"09s1XWCC[gwf:mYDp4vh[z3#FNDT[/R>z1o,X<MKN9U0#jw>&2d^A9Z>>7dP7'lăU"x4fket[npWBu-NAf[zmvP;9;%cBkG3$WC\5i>Rn?kl3U7Y.#*9zGV>1t\/n0s7găU"M%[ZRs#h/3ia3Z[DMugZ,SUZ&33vGKqa%$dKy%b_0ii>niLRDdmFN]0IdG,t=N>ăU"bb];j_4]'Q0Nkn83hHsLLQBxYD(5s4'L9s][:x;H0?UAx38RCQOzGZ.<AXL[k(SăU"<;,uEKBWfDl^SHc9OC8MStK,S%=iX$1*uDG)X'kL(v('L<8$BcWe>;.lj;w4Ew7ăU"7NP[CwIUtJS[4S71*-/Lk=,&1q&M?,irlOK8vehu]9$xsV290aawp+tZq6(ixGEăU":?G3+^lhd&Cfgj)ogJZp&TaTSzjGRZ7qrV5L2T,'1E.*,o#'IZF9XsG<^c\DxWiăU"%,v[%W=hO,2?vF6rYN3qXcrMz1&:onkl(R5sjD)8KL;*YNO:X[EqSU7)i?Gc%2căU"6E+Dm+woKwP5\_s&9>wwpKQm%(+Kzv/d;5r>T:$'ANNuhZ[[BPM3jfLFqYUVoR>ăU"//HfV\=37B6ppWpK<BbXCCF/>Ri_,Jo_K<97BE]%pS'jqbH=$Tkq<W]gQi?eYVEăU"WEwySEwA$DjF6Yb<4XAX7riB8O_G05']BM8RrZv<d)%IhsSAbC27v*Ln-'5ohPlăU"PVdt0dPZjr?35]Aw?*c._8BQWYkqxhY+\s4B9wniz[(a4ca^vG>5^2Or<*+\P<7ăU"CI$Rw,)11:B)oMaI]TW==ixhB3^L4r3<n6put*u=>W[(=YPSd88vE:J1(dRmwBhăU"L-LSL:;WEL20k$_-w[b1VrOg*WWaOwt,uK6\Gx93Sj*qkmSCfwGKbIXUy^iVK>qăU"xi&h_-pZ1B<8#%;a,+tFDn/,?.))Oqi*c:i>Ccw>s]laL%U61<$X:+>:UF,B2);ăU"zVOj7UUJ$]KPv#o:3SV1Pt\NW,l<hf.L6.LRk#&d]5FobmUz0DB6B]l4?mUZRT2ăU"zCA]$K$O0TosOTR,O4#-4t.H,/*,&bAPJ.L,ZHUG-rfO?.roD7ktEwcH-]h]:77ăU"#m#G2([YSth>BUyaVdKdH=YBqfH5,)%hlRa:t0gHeYv'96ljPNYWpSqdi[G&JDIăU"<?yq4Fb\qD:&Kg9<dvDxWeY^]L]^FZ=_[n_\,7Axrdm6l0YIRb;pDVy3+ijlj/>ăU",qW=Bh5,S76;MwAP$4msBabY5:j0jBY>6xp7,%on:_UV2lt--^]srWZqr6+L8nqăU"D;sxojwRe*I#c<g^*7hUQi<u3:yVX-X\TfK#6fd7FtQ'L5Jr(jpsSNU$j)*b8eNăU"H/emkUQEHv2,6ayQgRlYn.G_\1(BKuwjh#=5hW](DU5yR)7gZtj/SO(00Z8c?UgăU"\kZ=-N+KP9c,pfrW&927_#_Fxh2uE2z$;bKj]$rx_jx:Su7rsl4);1O-$_0h2)<ăU"_S^9hiMtokt-GSk>NF/xOC.MD%[u[m76t\eLFD+F[QbLx%,up(%)9%%[%-%BA\OăU"MHi$Bh6%-%%,%G%%.%%%%q%nsjx%SksyENhbWaI#:#enlr6F^,Q22p/Rj,)REAhăU"=s:=/A_SGH^GA;%EI*/Dip^^VV5--[9MYCu%IY]jg^Q>[;<->Lo3Zua>gkDCFejăU"ktU\Uduxt8sWchW^cTl.bX:VL,n,zvcQvWzyZ'rh\W8YA>j,Kd'rB)1K;:N0;Z'ăU"(2kbMkyhSml+znPa$csQ0gDqCvNkPzbHFVCdgV^7&tStvD/)>y:.X$knSnt,HG3ăU"ThoP%VAelf-^MBt(OzRbJJ>-+B]NJRA\TPruGUXAaD]d+)Xcpn4P6UIRaymXDS2ăU"9m)t4WAR$]o3*PdXgtVqFqpafqwlEV>Bgz3hxbM)eR4vS3SYmxWhM4mT73XzZ/năU"lH0V'h_bN26JEJN+\e::N+8Y00'R/f8Zap8[2kXJU4aekB/pk5eU$dW*S/vtDG\ăU"xMobNP>ism5J[lPNg*:nk[b*ZplhHH8bT\YqQ9*GMYhL7sCTxq$Sq=x,+>D#mlsăU"GDQ\1SD+BW[x*tAkPOUX7-Rg?x3AUN$Ot^fz2(>ranu=C\B'HH-i\\z2^:k(f+[ăU"\hB2hgZ\?&'v^kdV\dW8LtFH,Rn4$2A8pSx\;UCx'F_Xk;[m.b0.tUCO>:[tA>WăU"\frp#M'VTQ3._6,r0$R%kDO/X>>G[jd3dO(Nl<%cxmV3TxZ0)i*G,NtBX$PK^omăU"$pGsrtpL5*YH1#?rj[T+SW\hiDvon6*5QY<=*/m9q$olH&+R<jVv]QBoFa/Z(n-ăU"o<F9-wT2PLr4L;WMMpjIDQ:lWEHg\\fPViQi(^IAJButuB?X*ICDy5?(^H-Pxg=ăU"N-SKpc5LhlQHSVe,bg0/h-2flQF?RLJX*9AbJv1TF8SOZD4A=E[kyP1ujn7AIulăEND SUBăSUB V2ăU"?K_x%WHfr>5qFUn*ftRi0w:Mp)7tVZtvX^:Z?2dhXngqHfw>KNY^dx_b>](mVCfăU"j2Eu.)Nb\xFu^n2xr9d1-eBS;T5/l**b\Q[*.RoRVRhd]#gMpdY3+q0AC=KMnSQăU"BPPMl]XCkl0KdUsoWL_e>^f\gdc)G;e[7N$)?O_Z:2\nN_jnKXK;7gH=qTgmc2uăU"Dj:w9#j[xi/s=2o3uqPIG7YW&o9jV_ZZIk(RA._G3dEV?\67?NhM^gY\cvx'\;^ăU"#5Gh.R=Bcjx$sVf\xjWmTXrt]$XI]xXVwihUdR+?%YiUDIa(hjNU0Y<[B,-k&maăU"i$Wou,DM]ouq$IOist%d5rUEEm_kKRT%iGSNh(2\O'jsB<#S80&6LrriYnp-Z?HăU"QtfKJZXYQWoReZU\-5(I1f/^Aos0GL.fWTj]Bpl;=A50nH7rx%lhO=P-R[+4vXhăU"%B$x4=H>EEcM)T.#]MiuD6981_fNnC$dSU_;kYJKkdO.^65(\KxgZNsNpj4kXljăU"k[^YVwX>epgHuxQ#cwhHsKoV53t=E*R-)H^mcrh+w?da^5P%SQe]SwD^ce&;,j(ăU"re3UPN.Nd*rcxPgu^+i8C]i-uNt,[M\1u3N*9C*CGgTFxddAi7rHcLz5vQs;DJLăU"X2MvO3u:Mp>8k/XWwEnI_'Jiw+ZnPe65HAXl5$$,re6a$JOXRIgf[NHnN2unWtAăU"gwslwswjB?e1)B\\abASQl4<#NCMCY27<C.fbY?u5w4\XCImcl5druAX>?7kxm>ăU"Ak8#?[x3i3w)Idl%^[x6(j],b1utV2goLw]w$EKOUod1)^>b99Z=mRtm=q8UTDYăU">V2MGm9mBxHVIQ'tg,PNBfsXIGb[Pb$pdm8.G<eW9uZ\x'tzb\7hAB<].d+NtFbăU"kd1*typ>Tq\)vlWVP/=hs$A;DLuTb+D;x.4^1sb$tW%YDcGtqK^a0?A0,V=B4QUăU"lw7]&1%:XclR_>dKtk;mgxM\,AgD,[QxX/DkZx8;tNT>8Ynx(BjB+7>5NBea9xrăU"rg5e\N,Mrq)q]#^e6uTlHjR[Dx$98jOq5;NGtjax-Yu(XIsaBO4uM6]NDgKN\o>ăU"cxG7NxY36l5+3u0F8uB]ut'x>(YxbW.xANh*-T&u3[X_qNlV8a98+nq2O/g_6MdăU"xM^k41$u:n^8.^wVu.rt.>X/vO'rRpA0xp]Pbig$wX0%\NtVrXOQxotr?OQ?8GlăU"xD23w>QL+ZarCZq#rN5^uzJlwSmnahi2_c$qv;lXs0uV\rk&R4Q1=*'+POb,u0$ăU"g\mNX]jdGxN6SNLp3N,br5R8c/Dg,GWxJMu9?/8TVNc00tv'rxaEiT2R'72g;NJăU"wd_nN>guK.bT9gp.R)$N+o;uTF&pD#x\sb]sh?xdaz6<a^PTbKeeI9AzDZupXN&ăU"IciO?1?O>Koe[NY.[sNJO7uFsfwov6P_NTQiHgr;&d=:Wv[H6;p5>Zpxj8v5ixwăU"[qmN<uO_i^CjT[N;cNbaZk>l:FPdIPKQ[7Zfc\81ug,fWxjw[fju^q$Z=S^x.orăU"RDMVlv]gkMx\:9r;S=GUvdj[d;BtddKtupxC>Z<pNoilrhB7QKR4R<lzg*n\jAAăU"T_Tn&Z8x,?ftd2QW/#O)ae48ub=Z=C.$wB<$b'IenCqQk_S4pgs2mUwuJAFc5i8ăU"Z7+>btv6XoNyhE(B[UwJv.u,H0ZhDtJ#;SB5K*VbwD8kmGLYm8f=KnV^*?tDjTlăU"$in%ui(<GD'B+NuxvhLQ*tlUf6dtuVU*8<fCjag6xW9bU^Jx&q4HxxW)zId*]&<ăU"<U.17i?g=$PkMX:VZ.#=Zlx>W.2>l,-6fqAVlw6GwpO<ww>H]XRYmx+s04C8TgtăU"HvuiOfz%oATbxAnzr<kv_Kw6ft2n;tLPJbftda;t/x=Wx-w.$u&J^ZXOL:gXeZ]ăU"5yuNCt1vlx_;wQq;lnCgemkm-lo,Zx^zx7x4rnK7km8;w7ddrNc\xOk%dup(%)9ăU"%%[%-%C[sNM-Nnk;p#'%%>%*%%1%%%%r%pgnt%xV[S#gfxDgy,>S.U9Llf[d+n,ăU"09?5/8,:LBnFNp%jRYHsvNfFRIKjiWQ$fw?\Xh_:DT'5LFVkJ?gj2L;%ID,/f.4ăU"t)NC$b*uTNx.um$mAahIAkyY\bU9m$Q'dpEa(+u:M&$vMoA(-jP>#AQ;Th/-O.măU"wqNiacqUneFhE\,a*oJCY.T/6H'e^o1hE3BzpV2rU7IKCQUSEcETsT5.r)mzvc8ăU"]3<XV[wuyp795A)ptU+]Gkj)q_coX*0&z_?YZJ:_GkK=J1Y3cMR2dV>MrX00]4*ăU"JHP'^]QT9j/$dMX;^92EJPLnwTAbY^j//R2\mG8[U--1I=;&/jmrr1MHM:IW<7?ăU"WLQ&Jjom%GP5nuCr7/2d,L';&nwzX7kIDeV?b-u1weTcCASNr1:X1L2(a9?,*)NăU"Z])R_:,hj27i7Rg]k7PwZ.8sO&T6#FF0_z$WD:D&/^]S%f_U8NN,eJ1zffPgJbWăU"_#Eu<777:kA0X6l_Zzs-Gi0eH/Nr4C%870g/k)P49HP*cA'eqmF$&G:UbPWXm96ăU"qvCu\GG)]p/B'nd:_F:VhM?khsB:6N%1q'zCSZJgYBS8gmqU3b9Y(LydVK49?p1ăU"3B^(\U*O#qA><Tf\+2#:3_XkYOHPKUnRE8LI]K&oz-j,V]R^[o.o4yV-u%hsQztăU"Z27R43jvZ,m?#=ahq)a3-m<nDB.pSffNK>os^-vUr%Qd<.,o)=3(Wq#%JvY8n)WăU"A;Py>i6*)/a697zb,]#,'oh3:?6n73SMf8n7^AeH<Qp5VMc\fA+f:LdH$T4m-NFăU"eJpYi-k-N;=v-nzhU1qGEOqVv.n^5\V5<g\?m6^4.WDP?v?L-A.Uh:8hvB_fZhVăU";#lpd%up()%9%%%7-%1s[NMeY4yM2(.%%8+%%%0%%%%rp%gntx%]SgfCx\y,,^SăU"k9hL.8x'<zC'CI-0w)Efrz)xoZ.4rpr0J)ZHwOYQ2J--\>YmX3^X-pUVQ3-$q'dăU"'aB_<UBHbtEhgl^q(drq?MO<&6zPt(#6PL4?C<HCb<zw3bH=r3qXSN[m*tWe9njăU"OP<%fs^18z[TPx)cI$NQsRupIda/1\,Q><AaQGh&>(w)uRa/?Z[eTvYBW)iT%7<ăU"yBe6H8*vA?^k<3&JX%D_leG7$PMPj)5p$Un_/u<3?&VfCycPj'S;Rf*%)Q>c7Q;ăU"W.FYz]>\n?(+dpMnyja]=iFq:l3*mP:IHJm^7m_(Uk&b;K3q8D+e,[ktcCZ933\ăU"V1)i9iF\.4jlAK5So2kwqYd8pu-T-./FKOU&c?;79Mh8;*N9*rJ^<k1e[p^a+bLăU"u7ly&c6_bC>rZImlkC;]LDXZszG#Zmrg&J4O3NykfI)_GqnLI/#&p+bCC)b5+4XăU"'CoTc;KPIXq5?KJ[\hTLhY?'=?^wi&*;W9x(A[BWCp7$Up5%eaS^+TZ675j#Qj.ăU"&$0NLuc6(e=\$qC+<C7I?'oEY??H#*D:q16d3/P+:1S(f#eUh<9GoVt7nP)fWSSăU"q7X9(?cOrwmn2Oj2g=4S5j.CYu322R>R$OfLNU\g\J0T4m-pR=Tm\U2]4F;G/,GăU"Qs$]?43cC9y\V:S.vsZ1-.OT1J?F1SH8M2lsM2+6Vps9dg5ACYmXt:#bhA;0+Y=ăU"&WXo_J&tcs&]5Mq43'fU;4DL6A['a'Na#C6aX,<-d/om7[g*]Awfa$ouY53ckd_ăU"=%M=>wdaAMe+DvKqjPU]?H<ZUt9w<b8GgHtd.2^zZq5;8:Sa]A=h[Z]g-x5/z8?ăU"7/GT]Zt&q(mkHnN2GHiqLjFF<pPiM-K\&/Z$1Dut\DD/Sk&(\iS.tZR#eX-p$4tăU"+-XTY,sN(&;BM?J<g3l=^AeLms3Thbrfv%TMX+ZSnU(WV*(PhDX]'xt3.F:nX/aăU"MY?hi<WaYKWt/WX>dZF$LzT\385dOaY9S=(igV4ntJ+bhn4'7H^S4A-8%=l%hmrăU"MPg,Ud&$6EVFY9jT[HsSSdvGtMA6fkzEeL?$emNSmUm#$nC/>T9T(/HLa?.T\xSăU"01\_N%%up()%9%%%#-%($RRMuv84Ww-%%%,G%%%-%%%%ym%nsSkRsyNh^dWI#F:ăU"?DB,rV^]Ci*A7kR<9&a\QuZ8/;4>.?XP(%J+*/p32OB^*R^in'Ydo.UArj_W2u)ăU"VA/E0%L/B^d6Qz<]*HL?.U=RA4=,Peg#[6vu6h6cr'mbVf6$C_ouCVLun8cv]czăU"zp-u$Lx=6Rfn_j=hdWIe5%XbRNz?K4I_V6f3\aa05c=Ug.McVm;-i'8,4jvf<3iăU"^HQ'c$fU?P9R]ARYlMxk)0+T>d'P=>v=rh-x4v$Z*V3\Uuj/^sdO1u4R0=-_FyAăU"TV\Jusl2d%/1mAZZq<Hu3t+sn5kaUk^g#ffX>58>gP&B0:?e0]l9k\mY\$q/Q,,ăU"]Sy)GxIAFj13z]-]tXRxxM0dtkw=<(UWfjoVM[WZ6hH=QdupKEXbqXJ0B27.Q+PăU"cl51RX<fXZOp)'^66H/\ojL,nCiADfW>ivvJq06nPE2Rc0M>miCZvIokaD6k,B_ăU"MvVne2]]xnPx.,MxY+XrRY]iT6783$<k9tN<_5uDy<m0.ugED[ZlZDQL]bo.=xpăU"([ht^u$x%[8N-xU7L)#JT_R3u](.pV8r+$'Slq&]6HPmY7>$)0m^$JcS4eSa/88ăU"mNnDHYWtni+=EF':(guXaRTi#c,Z*_:dJFAH5nnMO#rn#pXBmkc#;$eLC.I^r*VăU"CsrKjYbFq(qHUI,Cz#Fx(F6ZXXYk(ujAWu0_PqftubSKxrZY2Ng(Z0xh$2EwFfyăU"dNZNtCZ][fCt8>$UUF+yG[jX.$NKbGg(d.2-8he(]x$=X6TISY7kMnF'd?fxk8CăU"QpE2wrCgs5\MCAeu92F$e_df:lHmJ.hD:%ilc.eqUz=W#vXd^h7Y9Pa[dHZQxnAăU"$[o,V(Fr+<[H6<cduxopk49I4(*Dxp]vM;7XL,7KnTZl:V5E^b_DH?84c_8$=9căU"dBNSY2uv.xh[xL6xShYrnt/w%l<hpO:gZB<s68o51abZaIKmNDfSLS>3cPr*wH3ăU"OJm<oJrPN?n/eRDmYNp<tNxX8E7>f<\d8HGf07#Of7)\6F_C=^S+;3dCdlb'*_IăU"=bo0h)Q09>+h2X[TsZxHsPxUr6#f376l0gqniw$/__dt'9VdoV)5lDXtX>OxLq]ăU"tHp'Hclo]41onoK.xQ$M.&$uZ2wb9#KxINng<HSrt,$>JZ'?;2pE\4rDsh)EnpaăU"1lOnVD.vNGTM(U>Dfx'e8_bXke8Op]pIJxt+;s8[htvda)wP]laqM%Wd7c<2F/tăU"9/;_+#jo$>6p_1C#<]*[?7gp$d+IxL:eNBDFZ8D*V#[k=BDP-<W8HMhH]f3puOpăU"wWchtKOXO'\gH72xm[uiX#ha12k'D2&#6XsTxh.^y6u3,=Pv(DBb=cJ_X-Wjc45ăU"C/N<I_IU^iO]kN:3vXK*m?pU$=MT]djgsjk)eK2/>>[s?LZFm$W8AH#NHzgg9xdăU"BT>'Eq4a#u0ra78$1jDCv%slrp2TkMx.V_jRt=P3cb^e9F_n#^H/n2Vwh.yRDVfăU"C9<VghNeIFSkBH:4C=b$sDfwk9Zad2+f%Zow*(7NT>]vd6ode\Vn4&gtG\9HZ#wăU"%WdVS1%epqIPDw5n=x]S6QT*c8\Gh//i,#9w%FmSbZ/_xWQn8Zm0nI2oOS82>=wăU"qxw?e5(Xu3ox9o80ws4CpgHYWrp_&mm]<SwqZL$x/b<s2w[uRtG[Ha0x0O55uQQăU"6)'.]U.,xdrkfgtF(rAtut]xh6Cx>lKuZF(,l^Wva$7fda>xJT6M.plfw.5j>Y7ăU"(HZe)NaVxi7Y-ux\WYxqTiV>vi=<=.dPUJxq^V(Mc[F,]d+$\nzu]pn$q?x=r,făU"8T82P4=N[g7PIFWxgn:Ft?6NN.Vm*o3Q&$u[6Cx*HL<\Hxx/<gaUdG6Zffui4^$ăU"wqeJ7Vu.x2pFRi44?EkLmkju<6M.#kJ<]FZ;uDuPqnN/k_]xl6xsiEx<*wN#Zu(ăU"1tP<w.)29&rrLs:xSx18[&p,C1,qXm*\Lp]yuXiq61$s&.$)3:NOWqPNGs#oWYhăU"a^xz=tNel?3q6kZo?dj*6>ufIMz)Ad1OrHcu]c7GDN]_n?9xn1j<qN;rWc](l78ăU"7nYNTxDYF0r2n%WxP1CUlduexC86bxixWrfGNSA*x?j[J#wY_uOtk-xd]X3NONuăU"VZgDtF)xTEr.u-]p'bvV.?x.0;T%ci#CebMj_mW$NEhGVM:t[9Hrw_SYy%6mDnQăU"\.,6N$%8CXYE$BgmH?X=vWWEY.=kulZ<w,$dTp\2iWxSM:rwu.xg4?MVl]xSuS6ăU"RudIl<vPU8''<$xnyuTnqk;rujtx?nu#zIMcjM1gMxYtt_(tq:GxL%ZepTW]v1VăU"?pxT=3NY%>Oz^&1_vG$x_6/NW:hZNCr_=#'Lqk1fCN%wFMA2nBeSd7iixgp\GYxăU"c;L^0LI8aq6<^Xu\Pcx:?xF.W25(cNYSZiP66i_3:3ujwXGTx1nkbX7rNKud1>AăU"ua.DcJP*<6dw.yZufD$WADuD&>#c<cx%/>ZupA>V,]uMu=5jtrX'mu*kFnItKxLăU"vXH%x<Yq$-n>XI+O?Z'$ZiV,-$<gwXd$eJjHrl72ilv$+7XPsv6Y[,-MWhH=B&EăU"&p<^a:Ku:7unR1IKF5tkr._p4?brrv[uH/__p\:9-#bu]d,5nMp+hIdOJW+D\WRăU"7Icxt=]_pe<O1dAZc4ol3$p3qs.u<aO/pRDixf:q=dUYdqT4;Bqplx1rclb;MNZăU"9<rO,xAWH>jkq7fqtb>Om2ust(CTFZ8wY;GTz6>7HtMrg;rnKX5Ls-VuFK5S,-JăU"lnayYuSxRj)weH<gXM;>[r0pHY8S([iQC^mJhChZ_j6IlxxC'Un*hxVLx2mbNL+ăU"nG=/>9Vb6t&N^oIy9vdA\E>Nx1?wfvah>\\^=jr8?>1u;dI#OIM><CF[K1s=mIFăU"rHHHw8N4'.L[l]raaxZ8r8Iuk8mx:<$x'%up()%9%%%I-%D^#SMPU1*bJ4.%%/dăU"%%%/%.%%%k%tsyX%SgfxKf?:>ZTAj27&(w4.8H&p5X%)4ETA3VA%4_5_pVPK\#wăU"A'A'nPZ(<Y9mpOYsd%$XpwMc;XcCH.voqMYURkhRHh*emCDtl;g((t?(S%]5%yIăU"5?N=0&Gg89D,u..K7NRS>)Xs<$*'(]g=cVB1suS'/Pkc4bHs$9,J];-K/0u[&V1ăU"_Q;/fH+i/5s#ElUlrTP^H6=IAC.0Ek6j1$MYLs0[wEuqGK3h[,T\g$G)\f*Gd]<ăU"u]Yr1/4GYrm9bM1s5OUDG;I\k)Uom50*R*IJk&eK<eg(A$r67dq=\#.G%*1/KABăU"QB,0;?RmBx%Y'<;?'p.-c0gg[IW0ozAXxVa)W?O6GluSugX*UM\8&gZ&aHPe(qSăU"2.j8+xq2YB,tbUDW_tR8UE_l0e[],Rd9PF8k<8KPIt5<bKu%DvZR4^-TL>7WcJYăU"L.-5u4WPY?_7TYEn-<70Wt_XZ^pY<#&mbDTH8Dn5ArKa'j3vrM4O9+jl?bYb[x8ăU"t8m1_CdWOl#V/Qc,mfKj[()Ii.)qG:/'+=LkOB&Glh'n$t=U,7p&Jj('IGCq#hcăU"/bM/1A,\V_jub+365TC>QXnj3I'AgUXY(E-[+R'/,&O<#Vr1eAFl$DffTo]R*#aăU"\U89Z&_Imq8)&]5c,l:=$9l,qKu&N&oa;gUaC:e;rUf/mk#Gg_/[QI^49q%.k^ZăU"kLMO(2Ygn6(ZB,Ay]m=3V2%8M<7EGAFejY>0T%#WjguUO3Cs=krIj-R6pmUR\7GăU"puAAknh+x/v'KvBxg#:'3[cYBMdH'oS7xxq:T$2T(r4SKfkhshXuE#K_WC,%4H3ăU"$pSAjM_S\u#=SEihp'OQ=$j]e6U2,TlqJ$J&A/?F_:FV'XF7WWQ*=&8VnA<Zl29ăU"U)[-L>4t7Vc$T2Qmbp-Q^R4qmT_GrUn*?bh#X>[,kz.5=-pZ,#Z?\\KLi#t=.)IăU"N\K5'rj.U^D+:pGcP2\E;F3KH&:OBo+,A)kB?F+;p:WH:oefr[,q9DoAfj9v)+păU"#mj#^wue4AZ<sT;6([qd1gulRE/[5\XD)5'&97>jO:K+Jz#0ZIoYj1?g5&+=oLoăU"iID1K9C#%LN.,-\PuF[jXE+XpGP(I2$KL>SOVms8CC%6%GjpGBi*d_tMj:$G#G0ăU"Z&XiG(PXcc00S.$J9aLQPsgVoV.'$zHh#LSH9/A2KkBs9bdBU=Jg6*:uoM2I4buăU"ovd?(F)AgJ[h$(cqdJ4]S+v)#<C/A9C/m#qA>1'<MM*RQzoF/6nfF2U4O3^#YW*ăU"A3+OQUc5;cKq>JW<rLaj\Ayub[?r^'(U1?PVC$-H(w[ZgLmG'2(9th/%A,\u?(iăU"rn1D]QG&dUT.b[JaAEV/NPfZUJ3'^.92Aw+.wf-6rN?alZG+)\95CHJc3)wqq63ăU"Z[$JYTw(HE11Cr'vAPr8^H(-0,:b$VMu9Y68N3r.1LYf0'2+/Gvak'e=O$#fdluăU"$G$17-Fn=?e-d$m95tDK-h#MUHMSWf9hH'Ds.wzMmml7J1MYo4kFl)c6,lAFKqaăU":TIO,O5c0GofV(SYB6lp/T^8Ru(gAsy7z%jsJ;PsD,QMriGfZUMMI%)BrF2%MvwăU"8*IM2m2(d$7vm'R(DT2rstEOi5z:u$q*I5QBUU4tuddd,?krr^m==?EuBUl#,e-ăU"l/9ophCbinSUd#?g0T3&F-4p<O-j]IVWmh<gsW6^vI:,r]2$6S,Vc1>O^iWS^s%ăU"L2_?dYvH3RngaDi-V*&r(071o>w3PIZ2wFn*e\6Ucpss90uL4i3HzAQVa<\C>7EăU"KY.LS.]QK1,](H.&7zI+1QRc8Sfe0o*GCAt_hhQ1,?RdUFb?8e\=-Uvm6m4o<.5ăU">#wK8\>JU];M#l_fLXZ1J.EezeS4gbb7X9[XmZ?\'PZBmk#&HIc&\:ZJVt5)X3CăU"^-*4SB6,28BO22F#ZKE:giqHXNh:,Sl<87Cl1SI4fFH<fG262U2HNBh\;\m5VstăU"slG=[e*1X$DH1y;kc61k.pCfM&5<l/<AdV2ppkalrb(/EOu4J?V28LhG<*L15dEăU"x<5/1UbmHYR[IlYU:%=WTYq/?2xu04/napYJ/3:lq4?_jyo$vmV&ulQ/nt*uhaFăU"\MreERSx<c6ixsP$lC](O1WHr3EW>\f%^4BDAp^=5JcBNP+wmk4_S<2j[r^.<FNăU"n<wXkhglG$mmLcm/;6/<oaH'8xJ:RpH6)A((GeD*AQ?>n<j80LmM2\I(;0\GsK9ăU"=[+dda42P/l6Yje](FDJE+*=)+vHH.OdkDIPGw]^11[E=n)o^$[-OrJ>oh;gMAzăU"4[R#yc+GOdI9e,icIKcT?(RbLeF2LAW8T+fSD)#1T;&ZLdDaD&1lO)vuM0X[Z\kăU",ls)>uru?:AT;)15zKB5q&FZIH&qc)l^>>50*Ag\[6E]KG0?mOdD,%-'J=S/?h.ăU"gFl5n[l[D?1qI(:jqz\jc\4Z+1K3kOy7'uwC%^'wNf9n':]Y;XS64DwxSTKk^tUăU"i&Z(.$Q%qqZVf5LaZt+*,f(AHfO\:L#g1SE+3_23x+mFyX#s(G1-xIg6k;H/xk3ăU"oXvP(^wSTgQumjs%ed5(0%/Tr,<2Jzc[OUU0L]A&e2Nw?fidk)YWMHi89H+zcMEăU".Ri]n%[UhZSkF<d$m)G#:t2;yEG>\qb8o(Oj=*cy;B26jKr.yD7xcK)C2Vp&=qVăU"Ip/D<*'7_\',ti\FEkq5w<Q[KlUAV,B%Q(<W0i3MU/uc:6xd=KAy8dOo=KS,VtBăU"-$kWJo4(p..<FW/10-^\?2qvgODN^$qoME:eganx;R?PcCSyz-r_b3PLAV[SLbtăU"Vz7MG%?dFOR<XM]jk*Jvb#QHDD'uP3mibl]W;druDG(e:]hf_:nQ48*?E5J*u1^ăU"B0,ddnB7^LkmN5\AD\<[&xqPp?+7&Rkj7qCa*&MWXyg,mX?&$TYlVV[[J'E#/u$ăU"^?nx'7CLJ4i<<'9-Z]fSbKo(;HAQN?G^;T&BMYN)vkZ']DZm2B81C\lszOkoCg*ăU"?D_V_]rTfb9hkH3:uKBFJ_brsrb+m$k7x3f'IqFYZSa:HCG5ZBC<T]Cj4spt(3făU"bBsyV#[pTc<Tm?b:)JvchX]]9i3.^nZo5cX^THU4A].J](/n&3-<FfPT4-FNiieăU"3R$,Aa5LL:(3Yu-?mmBm=H,\]Anp>]kPtHM1tfg9a<Kfm*y[]g%rM(1s]c+C]5JăU"%(VSDU4?=a\P9lhIb4/EJrR,&l\9mOucQ=mjI<?%r\_6#f*rUi9Bzg&CsCW_N[săU"#_Wlm%(0^Uvfq(bIsJ(vIxnp7>cUY88A7hzWT[Q\yjbl*N1JJJN7Z*v+AnTPg$=ăU"sIKZcD:dvAGRbZVwKiQ_La/1n*4aKpNzA/AF'xPod,,Pt)_BYjl50X;do/CHgfkăU"-&]HBL:+P8ZP+AG[mt]EJ<G&t+3Z?O-i,dyW;5$Rv&^pSt$674^(</e,(;S8x%iăU"_8Ad(lAEL2AsPE>uD/R1qdF+v5-prV\ouVX9OlO<;F*%g+,A$'C\4TrVZlar>z9ăU"YISt^:V;f;LK??LQtU(P3;AdFiudr[g[cQfE3.vchmg$G)wLjo9:aBrJ8:^#dd?ăU"ksZia3rp9*r*\O;ZHpPjfhOorKr$#+NffeVzZ5)rhCMBx%Xs&'xDab_wfrNIE*EăU"/(40]o3KM/o-w$Cgz-d+D1S1K%lD5AWhxFdI0xg]A#(cgoo4=ORQw*,0JFds$5#ăU"$BN==93h9x]F^RU6[^_m(HJJh-_(ssJ0^YoE:_?Rw+lRWv%^qiyt0P2JLvOTs1UăU"c+TX<>K&N>NeO9;^B1tjo7k7JS/heTMB(q_o[ii+%p&F^9o*P+.BziT[H,0QfvXăU"%[cTYpe5V0TwRX3tDBK^rD,+5<ba.rY^uxx$H-CB]'f\3BB(,9+\9+N4'^OU)AtăU"t;/>*N*Als8SK\TsvpeqDHt6)=]6tl>No.q](C_lHxoDH5Ncn_3InNSobpmRu9#ăU"L<6gl0<zWJK,k>+81x_j%j2HGX/v3lqb*Y?A:\WOib<BF#5;zYecaZ$hT0[-=?MăU"h)XWL<IesT4Ox1p*<YCjaS*UQx^q9AI\Q70?q9R'SpHBcK14bL8D=<NYgwr43^iăU"o&gZHL^oH378:=]Za=qOkJ5E[3^bBW9J.^I-wJGwWj*3qKLd4SH7<CD<Yr7Xf/=ăU")m'rdICyDBAVO%t_rk$qk52BXM-qJY<A-Nj,KNhC[RBV>AqmZW8U8ZaCod&Kc>MăU"GgCS2WoH,)F)/Ho,#j,=7XlGFTimW0uOMOkapNcnB\]D5(PjC^h&<XMV%Ek8L;IăU"vCp-RN(?T\8_X5^B/01.Z$<-$=rt#eNyD4l7Eo)<ds;1o30MJsedMnEoj\>QIFvăU"371$&xJX$8VUvZ^jN^*J(GpSW;K,c9nc*;uq<C?We?H<F8A,c5_j#SB/CWVI]5$ăU"YF^41/n7tSr]Y%\gY9W?0gRQ5K\_l7OP0_U(\bsoL?^4JNdrICrwb5Xi/gUn_0$ăU"cZvGvL+7-KI:m,3(0.J8cm(u?]Ue,'1t]*6[:2836HX#?EHM4&U-n4O_F_xtO[3ăU"g&LKy.eI-iKUO1%UzXqwqWh3v%>61Gw'8o.cxpm.&d(a+?34zPG_dcG6ID>W-,)ăU"^:saWSpJ5DGD-tgmlE]fmSoZ4?+*\ki2]W8I#&8gLqnZX?X<nA>ZZRF5/6-cf&TăU"MOps9'N:lo'Z_YaY)j<]0GW^bMJ'F'b#l^F^%)eSfGT9oH,t/$haXJ37jHC+b>QăU"=XKB>5>cirJ7$KRI7OYVTrDofIrQ1gykkROyOPBAzX_IPD]+mR(2CuZAJvf/yINăU"Q<Jz3uJW>Z3a,5vcX^&^k(Gq9Dzf8+=2OqTeT%kDsINg\VHa.g-]R[-DKhJ+Yk8ăU"=fl./pf.Bi-VP55=WkGVWiTC&YdlvvdVut.6rWnlpXZ(7/:/Ez\gYn4S6CxLw4ZăU"MpESV^^M+*;U:F8faB$nAt(Ak#r6C$b[k*A]vZaH7&g)IfknE3*u>U7+_g6EOuPăU"%RHCrmllo2(HiGa94utWMscNtqLFvU7D._4hk;-Jn(;SX6ZcGe>^eTmO+)nDu%păU"()9%%%%-.%mGN(MZl\,S*-%%%,G%%%0%%%%ijk%fzqy%SksyE^hb:CA&9UU4]6AăU"0*=t#+QZemS$G>_C)J.Z7Bgwg'sf[#d<h?.5(Ao]aSu0KEQ4E\*D_[URMUNo9K=ăU"%=^zA8;G%/06tcp5$tMEE'P%k&?ZA2E7r$MXlVkBglZJX$Np9$pHDYuZsT,pL)MăU"v;<pu_bWLR>I&vcrhAJ3l8sZ\eR#juEKU.HG(XpY-4oiND(br)IXZt=T]vd^x.3ăU"V3nqaAt.^.DHsjz-%vkWai7abblKUF^aPr(SInIbQ*6,i7&-O.Z6$(8Mb:P>ZCoăU"#24Hec>pC9N8e8v7#tZUlB6$WecxGji9bJ1n<bqXGwRV$DWSqw-C\aO&5('*FRNăU";2NopiAzaU6&DAx&eym_?/c^AiCV]Z;-z$Qb7[p2=LX+kDXE((3FN>N]xAR&o?)ăU"Bl3PeVI;lF?tKra3xi0PLjKukkL;Qv*PKTkY1fuTomDYKTyfXFI%lj41X.Nl;psăU"gwSt&W_O$2t9Z*sR8:hkU8raNhDH]iJmp%c:Xo_F=v%F3NBPW\NzSN\w\l4j^O8ăU"%No#<YHR<cA>U1hpY&3*1X8.ox9*Vsx2^xx\0LtY:>\2G6h:.E2gX+dd=F$U\)_ăU"buLOxo4zL:]>eO8vNlnx-u&65FNO?+9xxD7uP$68vlVNP;HnYij.1%ysBdKZ?D,ăEND SUBăSUB V3ăU"[(wxr6:rJ7JIaS,at]82hYkLa89+fahsu6MUf&?wYj,pk2EnDoGB2f9kj)ZE[6yăU"vD.QnGiPzGHn7ElrrG?x0%[uVl(+[x/R&>_;_YjEn6rooftr,_W%gx)yC4i=$t4ăU"mTM.0vqHZZE,UimJ*#64K41vOG^7J4w*-OW0_8Tk33^wpd13N3[>#XHkXhH2nNQăU"cm#KN-PuAN[K8*5tac.l43DQ]x00WbRu#HlP]/c[u,[+AP%BXG=lxl7&Wwn9mu?ăU"I6k,&falMYi+Fc,s%fMF_A?.N$icR*RF0n:(MKT+&$uc,MzQ;+du3=SNRs)ZNHtăU"P)uNDHdCVf6T6#WsVwP=]heL^E8]6^/e6<xgU1*E8QX#dWCP,be.i7BXKJxBPu4ăU"PNl*9.bkCr&kG$l0.g\Ix>PNlVY6lK(:r[LEH(E0t4\,Q#2B5&SZ?tcx?5j#KcuăU"=XX^b2-sZBx46LR/nB.<P5jdGpgc3.a<)rph.O7gp)mP0o%)oW:5Y;+HktV_ieyăU"]Y*[3]7y_w^Kr\PN:k>0BJpkHXu1]#IVgs4(_P)x-3MWtR$wstegF>^t#lRcQ:YăU"Px-pbxxE/+O+WJ.z-*iavE2PDarOazX<VMd6wvpJJ)OrD[xp'=Gk'f&d7r?8.u.ăU"]nS_Tl/L+]7dhWJ-qVxu<1SdN\IC]HTQgXz9q<Mx(fLzs5z['0cOiuu>(?k+Y/UăU"_.3A2mK:DrVBZE=q^tl#Pk;l'-rdnRRWtA'UTu&gi3R,Nx#J/XSeNM-CfNNmUwMăU"6r5=j*4k4Wk&vfVgXkn3ZM.C$2D:M>z'bcbMFiHIw\)2lagrPCArq*Wo2/r8H:PăU"u*2IZtR.[hafrhf5$gaeeL_8(=u]8DrW^'D_in9[L\?[Nur8#fNU/qxJTw(mwj6ăU"*CMaHxF$5h3My=OQM8>I?necXl<#fxfg.oXf4ur0(LqJH>bRb$q2wu'7oQcrw<AăU">xBiOZk5x>sm]XIlXv(G<mwjioHxCxg5sTs+mAdjS8hX&#R1]97NgVbmGLhxsoUăU"l(/7#E/XD/q:2Nt['WxQf:\)srHupo\rP*uw,hJlTpuxC.mqM.36O[knP_evCrpăU"d1xcn$jYx=-sM=\C4P-FMr%<H6xdB:bjxdSp+0$TtC-DHag*Ao(]H0o4V.Q?]btăU"[burOEtxHXGKp2:tu]$Hrmc3Ql[Bu[x<X=jtu=uXhfx#q$C5\*r-Yx*H?7$(?QgăU"tNY/,vDbBYCu$>qjHU8)gwcZwt,ZXwE>n/2We4j'xQvVdWjM>[SjTk^]nJn)Gx-ăU"c#8IRGi8QhVudPDiEB$x>b983EuF^jbauXJg\W4w>>txj)]l]7dc+7htM$pt6x=ăU"HkrmNltXhp49/tSNtb(xsA](TVwg<0F*iq.reMUK\,u<Gxsqur46kmwnLm[?exAăU"\$rwkdVuoQ\w>rk6].o$q6stkINk0GlxGNYLku\,r/y09M8o3SIa0a>NW\dZeiHăU")iuF%iuPj0Y<>Zu4u1+5<68[;OGki,WtS4Y8>;x8:9q<m%Yd\q>Q2pXb9iT;xcUăU"f*,oREZ'FiwHkYSvGq.Ve&Z8VRas>:3T5hLR&H;hTo2rXyFxmrdj]H&2JrqSH'făU"f&NN>6l8L:<JH$IDv)YY*W]XiO-HNS8FgtzIWGggugdIKo8d-rV&[[5[d[4\?X)ăU"5/<urgac*Bww&9&,wZ*%H.rH;0Zf$;Nt$w.)wbm_OwbT=\\tbjH;Uxjo,ukdD/NăU"4>b26tv>KQs_NOr4Lx,ZvX[NuxvXqU<',m?xupD$\N8EhmBF2c9vz8P]E'1chx.ăU"fWNNxhND6qvB1>k=tk/_1j3Qy9UQdW[.ZtTT7Bxoap2D$a-T7DruU''rDjwV1rtăU"<-0BhdO2r/k3]TH&ouq,#FX*9J/\i?cJ5+KvKJDW$xmhtuP8GLV?1mD\vpiv.%iăU"nnSi(&3As3_2fGxXV#l>UL#&if/JMXs8E?Gb>v-)sMfh8q4v]ach8Ovkmt%kckkăU"GXl*&=tJLb*7FdaaDW$L5MY1dH^B'InwX<vXZr$>ne\mmA4WFN2GNwL8Nrn7(knăU"_tChVG,7Lcxx^0bq%dLE3D\(l]XL7Q*[8h,kE?Ta,vlxupk3qITojN2FmM[,#hcăU"oq-exTsF,OVjixjI;d6kObA5+4Zk_uN=vC)L;E&rGsaxTu9Xcr\lvx4]%Dup&%'ăU"9%9%%%%-4%S%NRM/Fs*C3-%%%,G%%%/%%%%%%%%%%%E4%/P%%%%%g%ntxV%[SksăU"%yup&%'9%9%%%%-4%T%NFMX9)%'m-%%%,G%%%.%%%%%%%%%%%EO%/P[%-%%g%ntăU"x]%Sksy%up&'%9%9%%%%-%*\UNMpIEr-&<8%%'px%%%0%%%%%%%%%&%E%</Pt5.ăU"%%%k%tsyj%iSgf%xup&%'9%9%%%%-4%B\OUMH$B,h6-%%%,G%%%.%%%%%%%%%%%ăU"EO%/P$%I%%q%nsjx%Sksy%up&'%9%9%%%%-%'CsNMQ-nk;&p'%%&>*%%%1%%%%%ăU"%%%%&%E%3/PDR%%%rp%gntx%V[Sg%fxup%&'9%%9%%%7-%1s[NMeY4yM2(.%%8+ăU"%%%0%%%%%%%%%&%RE%/P%eU%%%rpgn%tx]S%gfxu%p&'9%%9%%%%-%(\$RMu_v4ăU"Ww%-%%,%G%%-%%%%%%%%%%[%E%/,PEX%%%ymn%sSks%yup&%'9%9%%%%-1%D^S.ăU"MPU*)bJ4%(%/d%%%/%%%%%%%%%&%Ej%/Pi#a%%%%ktsy%XSgf%xup&%'9%9%%%%ăU"-.%mGN(MZl\,S*-%%%,G%%%0%%%%%%%%%%%EO%/Pb%q%%i%jkfz%qySk%syup%*ăU"+%%%%%.%7.%r&.%%<z%%%%%ăEND SUBăV2ăV3ăCLOSE:IF S=189AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăDieter Folger                  DANCING TEXT IN SPACE          folger@bnv-bamberg.de          01-25-00 (17:05)       PB                     108  3434     DANCETXT.BAS '-----------------------------------ă ' DANCETXT for Power Basică ' Originally a QBasic program foundă ' in a computer magazineă ' Converted and improved by D. Folgeră ' ----------------------------------ă DEFSNG A - Ză MoveText "Dancing in Space", 1, 0, 0 'Text = 17 chars maxă ENDă'----------------------------------------ăSUB MoveText (Txt$, blue%, green%, red%)ă'----------------------------------------ă cg = 15  'max colorsă atg = 63ă nrmax = 30ă stp% = 4  'size of textă DIM col(cg, 2), clr(2) AS INTEGERă DIM s(nrmax, 1 TO 2), sw(1 TO 2), p(1 TO 4), spd(1 TO 2), lim(1 TO 2)ă Txt$ = LEFT$(Txt$, 21)ă Lim(1) = 639: Lim(2) = 479  'x/y screen dimensionsă sw(1) = 10 + stp% * ((LEN(Txt$) * 8) - 1)ă sw(2) = 10 + stp% * 18 - stp% * 3ă clr(0) = blue%: clr(1) = green%: clr(2) = red%ă DIM TField (INT((sw(1) + 18) / 8) * 4 * (sw(2) + 1)) AS INTEGERă FOR cr = 1 TO 2ă     p(cr) = lim(cr) / 2 - RND * 40 - sw(cr) / 2ă     p(cr + 2) = lim(cr) / 2 - sw(cr) / 2ă     FOR nr = 0 TO nrmaxă         s(nr, cr) = RND * lim(cr)ă     NEXTă NEXTă SCREEN 12ă 'paint a black screen firstă FOR i = 0 TO cg : SetRGB i, 0, 0, 0 : NEXTă PRINT Txt$ă FOR x = 0 TO LEN(Txt$) * 8ă     FOR y = 0 TO 15ă         IF POINT(x, y) > 0 THEN 'write bigger textă            LINE (50 + x * stp%, 50 + y * stp%)-STEP(stp%, stp%), POINT(x, y) - y + 1, BFă         END IFă     NEXTă NEXTă '------------------------------------ă FOR x = 50 TO 50 + stp% * ((LEN(Txt$) * 8) - 1)ă     FOR y = 50 + stp% * 2 TO 50 + stp% * 18ă         nc = POINT(x, y)ă         IF nc > 0 THENă            FOR adx = -2 TO 2ă                FOR ady = -2 TO 2ă                    IF POINT(x + adx, y + ady) = 0 THEN nc = nc - cg / 25ă                NEXTă            NEXTă            IF nc < 0 THEN nc = 0ă            LINE (x - stp%, y - stp%)-STEP(stp%, stp%), nc + 1ă         END IFă     NEXTă NEXTă GET (45, 45 + stp% * 2)-(45 + sw(1), 45 + stp% * 2 + sw(2)), TFieldă '------------------------------------ă CLS 'Main program starts hereă FOR atb = 0 TO cg  'new colorsă     FOR cr = 0 TO 2ă         IF clr(cr) = 0 THENă            col(atb, cr) = INT(atb * INT(atg / cg))ă         ELSEă            col(atb, cr) = INT(atg - atg / (atb + 1) + 1)ă         END IFă     NEXTă     SetRGB atb, col(atb, 0), col(atb,1), col(atb,2)ă NEXTă RANDOMIZE TIMERă DO  'Loop until keypressă    FOR cr = 1 TO 2ă        IF p(cr) < p(cr + 2) THENă           spd(cr) = spd(cr) + .005  'increase for faster moveă        ELSEIF p(cr) > p(cr + 2) THENă           spd(cr) = spd(cr) - .005ă        END IFă        p(cr) = p(cr) + spd(cr)ă    NEXTă    FOR nr = 0 TO nrmax  'backgroundă        LINE (s(nr, 1), s(nr, 2))-STEP(nr / 6 + 1, nr / 6 + 1), 0, BFă        FOR cr = 1 TO 2ă            s(nr, cr) = s(nr, cr) - spd(cr) * nră            IF s(nr, cr) < 0 THENă               s(nr, cr) = lim(cr)ă            ELSEIF s(nr, cr) > lim(cr) THENă               s(nr, cr) = 0ă            END IFă        NEXTă        LINE (s(nr, 1), s(nr, 2))-STEP(nr / 6 + 1, nr / 6 + 1), nr / 2, BFă    NEXTă    PUT (p(1), p(2)), TField, PSETă LOOP UNTIL INKEY$ <> ""ăEND SUBă'------------------------------------ăSUB SetRGB (BYVAL c AS BYTE, r, g, b)ă'------------------------------------ă  LOCAL Col?ă  ! mov ax,&h1007ă  ! mov bl,că  ! Int &h10ă  ! mov Col?,bhă  OUT &H3C8, Col?ă  OUT &H3C9, ră  OUT &H3C9, gă  OUT &H3C9, băEND SUBăMartin Grosen                  COLOUR TRIP V1.4               m_grosen@mail.tele.dk          02-24-00 (01:06)       QB, QBasic, PDS        1982 52572    TRIP.BAS    'ă' This little demo like thingy was designed to run at fullă' frame rate under QBasic 1.1 under DOS on an AMD K5 133 Mhz.ă' Machines faster than the previously mentioned processoră' will run Colour Trip fine - even under Windows.ă' You could always compile the source under QuickBasic ifă' your machine belongs in a museum...ă'ă' E-mail comments to: m_grosen@mail.tele.dkă'ăăDECLARE SUB Display (mode%)ăDECLARE SUB BlinkingStars (state%)ăDECLARE SUB AnimatedStars (state%)ăDECLARE SUB RetraceWait (periods%)ăDECLARE SUB StarDraw (x%, y%, size%, InkBase%)ăDECLARE SUB CycleAndWipe (cont%, periods%)ăDECLARE SUB PaletteHandler (state%, CBase%, SetPal%)ăDECLARE SUB ColourShock (style%)ăDECLARE SUB PaletteFade (cont%)ăDECLARE FUNCTION AbesFilter% (scale!)ăDECLARE FUNCTION BlindAndFade% ()ăDECLARE SUB ColourGenerator (state%, r%, g%, b%)ăDECLARE SUB wipe (WipeStyle%, PalStyle%, state%)ăDECLARE SUB DisplayStart (StartAdr&)ăDECLARE FUNCTION DripScroll% (MinColour%, MaxColour%, Rng%, RngSub%)ăDECLARE FUNCTION fireworks% (periods%)ăDECLARE SUB PlasmaColumn (c AS ANY)ăDECLARE FUNCTION PlasmaFull% ()ăDECLARE SUB PlasmaInit (c AS ANY, x%, ystep%, smtrc%, ink!, crange%)ăDECLARE SUB PlasmaRow (c1 AS ANY, c2 AS ANY)ăDECLARE FUNCTION PlasmaSplit% (symetric%)ăDECLARE FUNCTION RotatedLines% (style%, periods%, RotatedPnts%)ăDECLARE FUNCTION ShadeBox% (xangle!, yangle!, xstp!, ystp!, periods%)ăDECLARE FUNCTION StarField% (periods%)ăDECLARE FUNCTION WobbleCircle% (periods!, twist%)ăDECLARE FUNCTION ZoomingCircles% (periods%)ăă'ă' V1.4ă'ă' - animated/blinking stars (effect 19)ă'ăăDEFINT A-ZăăTYPE LineDef                    'used in RotatedLinesă	x1 AS INTEGERă	y1 AS INTEGERă	x2 AS INTEGERă	y2 AS INTEGERăEND TYPEăăTYPE FirePixel                  'used in fireworksă	pixx AS INTEGER               'current location on screenă	pixy AS INTEGERă	x AS INTEGER                  'current location of pixel (*8)ă	y AS INTEGERă	stpx AS INTEGER               'values to add to current locationă	stpy AS INTEGERă	add AS INTEGER                'value to add to stpy (0=stationary points)ă	ink AS INTEGERă	frames AS INTEGER             'how many frames the pixel shall "live"ăEND TYPEăăTYPE rocket                     'used in fireworksă	x AS INTEGER                  'current location of rocket (*8)ă	y AS INTEGERă	stpx AS INTEGER               'values to add to current locationă	stpy AS INTEGERă	set AS INTEGER                'what set of pixels the rocket ownsă	state AS INTEGER              '1=wait 2=launch 3=explodeă	fuse AS INTEGER               'delay before lift-offă	height AS INTEGER             'nr of frames before explosion (height)ă	explode AS INTEGER            'how many frames the explosion lasts forăEND TYPEăăTYPE PixelSet                   'used in fireworksă	free AS INTEGER               '1=free  0=occupiedă	first AS INTEGER              'first pixel in the setă	last AS INTEGER               'last pixel in the setăEND TYPEăăTYPE FADE                     'used in Fade____ routinesă	x AS INTEGER                'horizontal position of rowă	y AS INTEGER                'used when fading rowsă	ystep AS INTEGER            'distance between peak pixelsă	ypeak AS INTEGER            'counter used to find peak pixels (PlasmaColumn)ă	symetric AS INTEGER         'vertical symetric: 0=no 1=yesă	ink AS SINGLE               'current colour in row fadeă	inkstep AS SINGLE           'value to increment ink with (PlasmaColumn)ă	crange AS INTEGER           'physical colours are 1 - crangeăEND TYPEăăTYPE ZoomCircle              'used in ZoomingCirclesă	first AS INTEGER           '1st and last pixel from shared pixel arrayă	last AS INTEGERă	radius AS INTEGER          'radius of circleă	ink AS INTEGER             'colour of circleă	xangle AS SINGLE           'sinus angles for locating center of circleă	yangle AS SINGLEă	xstp AS SINGLE             'step values to change _angleă	ystp AS SINGLEă	z AS INTEGER               'distance to circleă	zstp AS INTEGER            'how fast to move cirlceă	rotate AS INTEGERăEND TYPEăăTYPE AnimStar                 'used in AnimatedStarsă	x AS INTEGERă	y AS INTEGERă	ink AS INTEGER              'base colour of stară	anim AS INTEGER             'pointer into size arrayăEND TYPEăăTYPE PixStar                'used in BlinkingStarsă	x AS INTEGERă	y AS INTEGERă	ink AS INTEGERăEND TYPEăăCONST PAUSEPERIOD = 40ăCONST FXMAX = 36, WIPEMAX = 19ăăDIM FxRow(FXMAX), WipeRow(WIPEMAX)     'order of the effects and wipesăDIM WipeChess(191)                     'locations for box plottingăDIM WipeBlk(15999)                     'space for pixel-wipeăDIM StarInk(31)                        'colours for blinking starsăăMAXX = 0: MAXY = 0: CNTX = 0: CNTY = 0: MAXINK = 0       'global dispay varsăăFOR i = 0 TO FXMAXă	READ FxRow(i)                           'read random row of effectsăNEXTăăFOR i = 0 TO WIPEMAXă	READ WipeRow(i)                         'read random row of wipesăNEXTăăFOR i = 0 TO 191ă	READ WipeChess(i)                       'read positions for chess wipeăNEXTăăFOR i = 0 TO 31ă	READ StarInk(i)ăNEXTăăRANDOMIZE TIMERăFxCount = RND * FXMAXăCALL CycleAndWipe(-1, 0)                       'init wipe counterăcont = 1ăăDOă	SELECT CASE FxRow(FxCount)ă		CASE 0ă			CALL Display(12)                         'Wandering Lines with rotationă			CALL PaletteHandler(128, 110, 0)ă			cont = RotatedLines(1, 700, 6 + RND * 18)ăă		CASE 1ă			CALL Display(12)                         'Sinus Lines with rotationă			CALL PaletteHandler(128, 90, 0)ă			cont = RotatedLines(2, 1200, 8 + RND * 16)ăă		CASE 2ă			CALL Display(0)               'force BIOS to reset standard VGA paletteă			CALL Display(13)ă			cont = fireworks(900)ă			IF cont = 1 THEN cont = BlindAndFadeă		 ă		CASE 3ă			CALL Display(13)ă			CALL PaletteHandler(128, 5 + RND * 30, 2)ă			cont = PlasmaSplit(0)                    '0=non symetric plasma patternă			CALL CycleAndWipe(cont, 525)ăă		CASE 4ă			CALL Display(13)ă			CALL PaletteHandler(128, 5 + RND * 30, 2)ă			cont = PlasmaSplit(1)                        '1=symetric plasma patternă			CALL CycleAndWipe(cont, 525)ăă		CASE 5 TO 7ă			CALL Display(13)ă			CALL PaletteHandler(384, 0, 2)ă			CALL PaletteHandler(2048, 5 + RND * 15, 0)ă			CALL ColourShock(FxRow(FxCount) - 4)ă			CALL PaletteFade(cont)ă			CALL CycleAndWipe(cont, 525)ăă		CASE 8ă			CALL Display(13)ă			CALL PaletteHandler(192, 0, 2)ă			CALL PaletteHandler(3072, 10 + RND * 16, 0)ă			cont = WobbleCircle(0, 0)                      'full circle stară			CALL PaletteFade(cont)ă			CALL CycleAndWipe(cont, 875)ăă		CASE 9ă			CALL Display(13)ă			CALL PaletteHandler(192, 0, 2)ă			CALL ColourShock(5)                            'fană			CALL PaletteHandler(2048, 5, 0)ă			CALL PaletteFade(cont)ă			CALL CycleAndWipe(cont, 525)ăă		CASE 10ă			CALL Display(13)ă			CALL PaletteHandler(1216, 6, 2)ă			cont = WobbleCircle(1 + RND * 22, 100)ă			CALL CycleAndWipe(cont, 525)ăă		CASE 11ă			CALL Display(13)ă			IF RND < .5 THENă				CALL PaletteHandler(128, 10, 2)ă			ELSEă				CALL PaletteHandler(192, 10, 2)ă			END IFă			cont = PlasmaFullă			CALL CycleAndWipe(cont, 525)ă	 ă		CASE 12ă			CALL Display(12)                   'Wandering Sinus Lines with rotationă			CALL PaletteHandler(128, 300, 0)ă			cont = RotatedLines(3, 700, 8 + RND * 8)ăă		CASE 13ă			CALL Display(13)ă			cont = StarField(1050)ă			IF cont = 1 THEN cont = BlindAndFadeăă		CASE 14ă			CALL Display(13)ă			cont = ZoomingCircles(700)ă			IF cont = 1 THEN cont = BlindAndFadeăă		CASE 15ă			CALL Display(13)ă			CALL PaletteHandler(128, 10, 2)ă			CALL PaletteHandler(2048, 0, 0)ă			i = RND * 200 MOD 4ă			SELECT CASE iă				CASE 0: cont = ShadeBox(21.2999, 20.02834, .09419735#, .091430461#, 2100)ă				CASE 1: cont = ShadeBox(20.49337, 21.95502, 9.283991E-02, 9.806624E-02, 2100)ă				CASE 2: cont = ShadeBox(21.2999, 20.02834, 9.419735E-03, 9.143046E-03, 2100)ă				CASE 3: cont = ShadeBox(20.49337, 21.95502, 9.283991E-03, 9.806624E-03, 2100)ă			END SELECTă			CALL PaletteFade(cont)ă			ă		CASE 16ă			CALL Display(13)ă			CALL PaletteHandler(192, 6, 2)ă			CALL ColourShock(1)                     'circlesă			cont = AbesFilter(5 + RND * 8)ă			CALL CycleAndWipe(cont, 525)ăă		CASE 17ă			CALL Display(13)ă			CALL PaletteHandler(384, 6, 2)ă			CALL ColourShock(5)                     'fană			cont = AbesFilter(5 + RND * 8)ă			CALL CycleAndWipe(cont, 525)ăă		CASE 18ă			CALL Display(7)ă			CALL PaletteHandler(128, 100, 2)ă			cont = DripScroll(1, 15, 40, 20)ăă		CASE 19ă			CALL Display(12)ă			CALL AnimatedStars(-1)ă			CALL BlinkingStars(-1)ăă			i = 700ă			DOă				CALL BlinkingStars(1)ă				CALL AnimatedStars(1)ă				CALL RetraceWait(2)ăă				i = i - 1ă				IF INKEY$ <> "" THEN cont = 0ă			LOOP WHILE i > 0 AND cont = 1ăă			IF cont = 1 THEN cont = BlindAndFadeă	END SELECTăă	IF cont = 1 THENă		CALL RetraceWait(PAUSEPERIOD)ă		FxCount = (FxCount + 1) MOD (FXMAX + 1)ă		RANDOMIZE TIMERă	END IFăLOOP WHILE cont = 1ăăCALL Display(0)ăPRINTăPRINT "            *** Colour Trip V1.4 (c) 2000 by Martin Grosen. ***"ăPRINTăPRINTăSYSTEMăENDăă'effectsăDATA 3,7,0,9,13,15,6,12,17,5,19,2,1,18,0,4,8,12,10,14,16,11,0,17,2,3,10,1ăDATA 15,13,12,16,11,14,8,18,19ăă'wipesăDATA 1,2,10,8,9,3,7,4,5,6,2,9,7,10,1,5,4,8,3,6ăă'locations for chess style wipeăDATA 0,17,2,32,4,64,49,19,34,96,36,66,81,51,6,21,128,8,53,98,68,38,83,113,23ăDATA 25,85,10,40,115,160,145,55,130,70,100,147,12,117,27,87,132,177,72,42,102ăDATA 57,162,164,74,134,104,44,59,89,149,29,179,14,119,46,61,76,91,31,136,181ăDATA 151,121,106,166,93,168,183,153,78,108,63,138,123,125,95,185,170,110,155ăDATA 140,127,187,172,142,157,174,189,159,191,16,1,48,18,33,3,5,80,35,50,65,20ăDATA 82,112,22,37,97,67,52,7,54,84,144,39,114,129,99,24,69,9,116,176,71,41,101ăDATA 56,86,11,161,131,26,146,163,118,88,43,58,148,103,73,28,133,13,178,90,135ăDATA 60,15,30,165,105,45,180,120,150,75,62,182,107,77,137,92,152,47,122,167,124ăDATA 154,139,79,109,94,169,184,141,111,171,186,156,126,143,173,158,188,175,190ăă'colours for blinking starsăDATA 1,0,1,1,2,1,2,2,3,2,3,3,15,3,15,15,15,3,3,3,2,3,2,2,1,2,1,0,1,0,1,0ăăFUNCTION AbesFilter% (scale!)ă	SHARED MAXX, MAXYă	DIM SinTblX!(MAXX), SinTblY!(MAXX)ăă	stpx! = 2 * 3.1415926# / (MAXX + 1)ă	stpy! = 2 * 3.1415926# / (MAXX + 1)ă	FOR i = 0 TO MAXXă		SinTblX!(i) = SIN(i * stpx! * scale!)ă		SinTblY!(i) = SIN(i * stpy! * scale!)ă	NEXTăă	y = 0ă	WHILE y <= MAXY AND INKEY$ = ""ă		FOR x = 0 TO 319ă			ink = POINT(x, y)ă			ink = ink + SinTblX!(x) * SinTblY!(y) * 20ă			IF ink < 1 THEN ink = 1ă			IF ink > 255 THEN ink = 255ă			PSET (x, y), inkă		NEXTăă		y = y + 1ă	WENDăă	AbesFilter% = 1ă	IF y < MAXY THEN AbesFilter% = 0ăEND FUNCTIONăăSUB AnimatedStars (state) STATICă	SHARED MAXX, MAXYăă	CONST STARMAX = 14ă	DIM s(STARMAX) AS AnimStară	DIM StarSize(25)ă ă	IF state <> -1 THENă		FOR i = 0 TO STARMAXă			size = StarSize(s(i).anim)ă			LINE (s(i).x - size, s(i).y - size)-(s(i).x + size, s(i).y + size), 0, BFă		NEXTăă		FOR i = 0 TO STARMAXă			s(i).anim = s(i).anim + 1ă			IF s(i).anim > 25 THENă				s(i).x = 13 + RND * (MAXX - 26)ă				s(i).y = 13 + RND * (MAXY - 26)ă				s(i).anim = 0ă			END IFăă			CALL StarDraw(s(i).x, s(i).y, StarSize(s(i).anim), s(i).ink)ă		NEXTăă	ELSEă		PALETTE 1, 3735552     'blueă		PALETTE 2, 4135964ă		PALETTE 3, 4139048ă		PALETTE 4, 10240       'greenă		PALETTE 5, 1650713ă		PALETTE 6, 2307875ă		PALETTE 7, 63          'redă		PALETTE 8, 1973823ă		PALETTE 9, 2763327ă		PALETTE 10, 3801146    'purpleă		PALETTE 11, 3808058ă		PALETTE 12, 3810618ă		PALETTE 13, 14135      'yellowă		PALETTE 14, 1652535ă		PALETTE 15, 3618615    'almost whiteăă		FOR i = 0 TO 12ă			StarSize(i) = 1 + iă			StarSize(25 - i) = 1 + iă		NEXTăă		FOR i = 0 TO STARMAXă			s(i).x = 13 + RND * (MAXX - 26)    'initialize starsă			s(i).y = 13 + RND * (MAXY - 26)ă			s(i).anim = INT(RND * 26)ă			s(i).ink = 1 + 3 * (i MOD 5)ă		NEXTăă		CALL StarDraw(0, 0, 0, -1)           'calculate line sizes in starsă	END IFăEND SUBăăFUNCTION BlindAndFadeă	x = 63ă	OUT 968, 0ă	OUT 969, xă	OUT 969, xă	OUT 969, xăă	CLSă	CALL RetraceWait(10)ăă	DOă		OUT 968, 0ă		OUT 969, xă		OUT 969, xă		OUT 969, xă		CALL RetraceWait(2)ăă		x = x - 1ă		continue$ = INKEY$ă	LOOP WHILE continue$ = "" AND x >= 0ă ă	BlindAndFade = 1ă	IF continue$ <> "" THEN BlindAndFade = 0ăEND FUNCTIONăăSUB BlinkingStars (state) STATICă	SHARED MAXX, MAXY, StarInk()ă	CONST STARMAX = 50ă	CONST STAGEMAX = 31ă	DIM s(STARMAX) AS PixStarăă	IF state = 1 THENă		FOR i = 0 TO STARMAXă			PSET (s(i).x, s(i).y), StarInk(s(i).ink)ăă			s(i).ink = s(i).ink + 1ă			IF s(i).ink > STAGEMAX THENă				s(i).x = RND * MAXXă				s(i).y = RND * MAXYă				s(i).ink = 0ă			END IFă		NEXTă ă	ELSEă		FOR i = 0 TO STARMAXă			s(i).x = RND * MAXXă			s(i).y = RND * MAXYă			s(i).ink = RND * STAGEMAXă		NEXTă	END IFăEND SUBăăSUB ColourGenerator (state, r, g, b) STATICă' State: 1 = create next coloură'        2 = fade source coloură'        3 = initialize source colour:ă'            r: range(vividness)ă'        4 = returns zero in r,g,b (colourless palette)ă	SELECT CASE stateă		CASE 1ă			CGr = CGr + CGrstpă			IF CGr < 0 THEN CGrstp = 4 + RND * skip: CGr = 0ă			IF CGr > 630 THEN CGrstp = -4 - RND * skip: CGr = 630ăă			CGg = CGg + CGgstpă			IF CGg < 0 THEN CGgstp = 4 + RND * skip: CGg = 0ă			IF CGg > 630 THEN CGgstp = -4 - RND * skip: CGg = 630ă			ăă			CGb = CGb + CGbstpă			IF CGb < 0 THEN CGbstp = 4 + RND * skip: CGb = 0ă			IF CGb > 630 THEN CGbstp = -4 - RND * skip: CGb = 630ă		 ă			r = CGr / 10ă			g = CGg / 10ă			b = CGb / 10ă	 ă		CASE 2ă			r = CGr / 10ă			g = CGg / 10ă			b = CGb / 10ăă			IF r > 0 THEN r = r - 1ă			IF g > 0 THEN g = g - 1ă			IF b > 0 THEN b = b - 1ăă			CGr = r * 10ă			CGg = g * 10ă			CGb = b * 10ăă		CASE 3ă			skip = r: '                    how fast to change colours (vividness)ă			CGr = RND * 630: '             base colour for building a new paletteă			CGg = RND * 630ă			CGb = RND * 630ă			CGrstp = 4 + RND * skip: '     step value to change CG_ă			CGgstp = 4 + RND * skipă			CGbstp = 4 + RND * skipăă		CASE 4ă			r = 0: g = 0: b = 0ă	END SELECTăEND SUBăăSUB ColourShock (style%)ă' Generates different simple colour patterns for palette cycling.ă' style = 1 : circlesă'         2 : inverted quater stară'         3 : quarter stară'         5 : fană	SHARED MAXX, MAXY, CNTX, CNTY, MAXINKă	c! = 1ăă	SELECT CASE styleă		CASE 1:ă			FOR x = 200 TO 1 STEP -1ă				CIRCLE (CNTX, CNTY), x, xă				CIRCLE (CNTX - 1, CNTY), x, xă			NEXTăă		CASE 2:ă			stp! = MAXINK / 262ăă			FOR y = 0 TO CNTY + 1ă				LINE (0, 0)-(CNTX, y), INT(c!)ă				LINE (MAXX, 0)-(CNTX, y), INT(c!)ă				LINE (0, MAXY)-(CNTX, MAXY - y), INT(c!)ă				LINE (MAXX, MAXY)-(CNTX, MAXY - y), INT(c!)ă				c! = c! + stp!ă			NEXTăă			FOR x = CNTX TO 0 STEP -1ă				LINE (0, 0)-(x, CNTY), INT(c!)ă				LINE (MAXX, 0)-(MAXX - x, CNTY), INT(c!)ă				LINE (0, MAXY)-(x, CNTY), INT(c!)ă				LINE (MAXX, MAXY)-(MAXX - x, CNTY), INT(c!)ă				c! = c! + stp!ă			NEXTăă		CASE 3:ă			stp! = MAXINK / 261ăă			FOR y = CNTY TO 0 STEP -1ă				LINE (0, y)-(CNTX, CNTY), INT(c!)ă				LINE (MAXX, y)-(CNTX, CNTY), INT(c!)ă				LINE (0, MAXY - y)-(CNTX, CNTY), INT(c!)ă				LINE (MAXX, MAXY - y)-(CNTX, CNTY), INT(c!)ă				c! = c! + stp!ă			NEXTă	ă			FOR x = 0 TO CNTXă				LINE (x, 0)-(CNTX, CNTY), INT(c!)ă				LINE (MAXX - x, 0)-(CNTX, CNTY), INT(c!)ă				LINE (x, MAXY)-(CNTX, CNTY), INT(c!)ă				LINE (MAXX - x, MAXY)-(CNTX, CNTY), INT(c!)ă				c! = c! + stp!ă			NEXTăă		CASE 5:ă			stp! = MAXINK / 722ăă			FOR y = 0 TO MAXYă				LINE (0, y)-(CNTX, 0), INT(c!)ă				c! = c! + stp!ă			NEXTăă			FOR x = 0 TO MAXXă				LINE (x, MAXY)-(CNTX, 0), INT(c!)ă				c! = c! + stp!ă			NEXTăă			FOR y = MAXY TO 0 STEP -1ă				LINE (MAXX, y)-(CNTX, 0), INT(c!)ă				c! = c! + stp!ă			NEXTă	END SELECTăEND SUBăăSUB CycleAndWipe (cont, periods) STATICă' Cont:  1 = continueă'        0 = exits subă'       -1 = initialize WipeCountă	SHARED WipeRow()ăă	WipeCount = (WipeCount + 1) MOD (WIPEMAX + 1)ă	WipeStyle = WipeRow(WipeCount)ă	WipeState = -1: '                            force wipe to init on 1st callăă	CALL PaletteHandler(3, PalStyle, 0): '       read current palette setupă	CALL wipe(WipeStyle, PalStyle, WipeState): ' init wipe before cyclingăă	WHILE cont = 1 AND WipeState <> 0ă		CALL PaletteHandler(PalStyle, 1, 2)ă		IF periods < 0 THEN CALL wipe(WipeStyle, PalStyle, WipeState)ă		CALL RetraceWait(2)ăă		periods = periods - 1ă		IF INKEY$ <> "" THEN cont = 0ă	WENDăă	IF cont < 0 THENă		WipeCount = RND * WIPEMAXă	END IFăEND SUBăăSUB Display (mode)ă	SHARED MAXX, MAXY, CNTX, CNTY, MAXINKăă	CLSăă	SELECT CASE modeă		CASE 0ă			MAXX = 0: MAXY = 0                'MDA text modeă			CNTX = 0: CNTY = 0ă			MAXINK = 15ă			SCREEN 2ă			SCREEN 0ăă		CASE 7ă			IF MAXY <> 199 OR MAXINK <> 15 THEN SCREEN 7ăă			CALL RetraceWait(1)ăă			FOR x = 0 TO 15ă				y = INP(&H3DA)     'reset Attribute Address Regă				OUT &H3C0, x       'palette# + disable internal access to palette regsă				OUT &H3C0, x       'point palette to same number DAC regă				OUT &H3C0, x OR 32 '32=let hardware access palette regs againă			NEXTăă			MAXX = 319: MAXY = 199            'EGA lowres (320*200*16)ă			CNTX = 159: CNTY = 99ă			MAXINK = 15ăă		CASE 12ă			IF MAXY <> 479 THEN SCREEN 12     'reset mode ?ă			MAXX = 639: MAXY = 479            'VGA hires (640*480*16)ă			CNTX = 319: CNTY = 239ă			MAXINK = 15ăă		CASE 13ă			IF MAXINK < 16 THEN SCREEN 13ă			MAXX = 319: MAXY = 199            'MCGA lowres (320*200*256)ă			CNTX = 159: CNTY = 99ă			MAXINK = 255ă	END SELECTăEND SUBăăSUB DisplayStart (StartAdr&)ă	adr = INT(StartAdr& / 256)ă	OUT &H3D4, 12: '               0ch = Start Address highă	OUT &H3D5, adrăă	adr = StartAdr& AND 255ă	OUT &H3D4, &HD: '              0dh = Start Address lowă	OUT &H3D5, adrăEND SUBăăFUNCTION DripScroll% (MinColour, MaxColour, Rng, RngSub)ă	SHARED MAXX, MAXYă	DIM rand(1000)ă	DIM pix(-1 TO MAXX + 1), src(-1 TO MAXX + 1)ă	DIM lb(MAXX)                                    'lb=LineBufferăă	DEF SEG = &HA1F4            'line 200 in video bufferăă	OUT &H3CE, 5                'set write mode 2ă	OUT &H3CF, 2ăă	CALL PaletteHandler(2048, 0, 0)ăă	MinColour = MinColour * 10ă	MaxColour = MaxColour * 10ăă	FOR x = -1 TO MAXX + 1ă		src(x) = RND * MaxColoură	NEXTăă	FOR RndNr = 0 TO 1000ă		rand(RndNr) = RND * Rng - RngSubă	NEXTăă	y = 0ă	DOă		RndNr = RND * 1000ă		CALL RetraceWait(1)ăă		FOR x = 0 TO MAXXă			pix(x) = (rand(RndNr) + src(x - 1) + src(x) + src(x + 1)) / 3ă			IF pix(x) < MinColour THEN pix(x) = MinColoură			IF pix(x) > MaxColour THEN pix(x) = MaxColoură			RndNr = (RndNr + 1) MOD 1001ă		NEXTăă		CALL RetraceWait(1)ă		src(-1) = pix(0)                  'copy far end pixels to avoid odd sidesă		src(MAXX + 1) = pix(MAXX)ăă		FOR x = 0 TO MAXXă			src(x) = pix(x)ă			lb(x) = pix(x) / 10ă		NEXTăă		GOSUB BlitLineă		CALL DisplayStart(y * 40)ăă		y = y + 1ă		continue$ = INKEY$ă	LOOP WHILE y <= 500 AND continue$ = ""ăă	x = 40ăă	WHILE y <= 655 AND continue$ = ""ă		CALL RetraceWait(2)ă		CALL DisplayStart(y * 40)ăă		x = x - 1ă		IF x = 0 THENă			CALL PaletteHandler(16, 0, 2)ă			x = 2ă		END IFăă		y = y + 1ă		continue$ = INKEY$ă	WENDăă	CALL DisplayStart(0)          'reset BIOS defaultsă	OUT &H3CE, 5ă	OUT &H3CF, 0ăă	DripScroll% = 0ă	IF continue$ = "" THEN DripScroll% = 1       'return:  0=end  1=continueăă	EXIT FUNCTIONăăBlitLine:ă	LineStart = y * 40ă	LineEnd = LineStart + 39ăă	BitMask = 128ăă	FOR Bit = 0 TO 7ă		OUT &H3CE, 8ă		OUT &H3CF, BitMaskă		x = Bităă		FOR pix = LineStart TO LineEndă			i = PEEK(pix)ă			POKE pix, lb(x)ă			x = x + 8ă		NEXTăă		BitMask = BitMask / 2ă	NEXTăRETURNăăEND FUNCTIONăăFUNCTION fireworks% (periods)ă	SHARED MAXX, MAXYă	CONST PIXELS = 250, ROCKETS = 12, PIXELSETS = 5ăă	DIM pnt(PIXELS) AS FirePixelă	DIM r(ROCKETS) AS rocketă	DIM ps(PIXELSETS) AS PixelSetăă	FOR pcnt = 0 TO PIXELSă		pnt(pcnt).frames = 0: '         forces a reset of each pixel in draw loopă	NEXTăă	FOR rcnt = 0 TO ROCKETSă		r(rcnt).state = 1ă		r(rcnt).fuse = rcnt * 15ă	NEXTăă	ps(0).free = 1ă	ps(0).first = 0ă	ps(0).last = 34ă ă	ps(1).free = 1ă	ps(1).first = 35ă	ps(1).last = 69ăă	ps(2).free = 1ă	ps(2).first = 70ă	ps(2).last = 104ă ă	ps(3).free = 1ă	ps(3).first = 105ă	ps(3).last = 139ă ă	ps(4).free = 1ă	ps(4).first = 140ă	ps(4).last = 189ă ă	ps(5).free = 1ă	ps(5).first = 190ă	ps(5).last = 250ăă	DOă		FOR rcnt = 0 TO ROCKETSă			ON r(rcnt).state GOSUB RocketWait, RocketLaunch, RocketExplodeă		NEXTăă		s1 = 0: s2 = 120ă		GOSUB UpdateStarsă		s1 = 121: s2 = PIXELSă		GOSUB UpdateStarsăă		periods = periods - 1ă	LOOP WHILE periods > 0 AND INKEY$ = ""ăă	fireworks% = 1: '                                return:  0=end 1=continueă	IF periods > 0 THEN fireworks% = 0ăă	EXIT FUNCTIONăăUpdateStars:ă	FOR pcnt = s1 TO s2ă		PSET (pnt(pcnt).pixx, pnt(pcnt).pixy), 0ă		pnt(pcnt).frames = pnt(pcnt).frames - 1ăă		IF pnt(pcnt).frames > 0 THENă			pnt(pcnt).x = pnt(pcnt).x + pnt(pcnt).stpx: '          active pointă			pnt(pcnt).y = pnt(pcnt).y + pnt(pcnt).stpyă			pnt(pcnt).stpy = pnt(pcnt).stpy + pnt(pcnt).addă			pnt(pcnt).pixx = pnt(pcnt).x / 8ă			pnt(pcnt).pixy = pnt(pcnt).y / 8ă			PSET (pnt(pcnt).pixx, pnt(pcnt).pixy), pnt(pcnt).inkă		ELSEă			pnt(pcnt).x = 0: '                                   inactive pointă			pnt(pcnt).y = 0ă			pnt(pcnt).stpx = 0ă			pnt(pcnt).stpy = 0ă			pnt(pcnt).add = 0ă			pnt(pcnt).ink = 0ă			pnt(pcnt).frames = 32000ă		END IFă	NEXTăă	CALL RetraceWait(1)ăRETURNăăRocketWait:ă	IF r(rcnt).fuse > 0 THENă		r(rcnt).fuse = r(rcnt).fuse - 1ă	ELSEă		r(rcnt).x = 520 + RND * (MAXX * 8 - 1040)ă		r(rcnt).y = MAXY * 8ă		r(rcnt).stpx = RND * 4 - 2ă		r(rcnt).stpy = -6 - RND * 4ă		r(rcnt).height = MAXY / 1.85ă		r(rcnt).state = 2: '                            launch: use RocketLaunchă	END IFăRETURNăăRocketLaunch:ă	PSET (r(rcnt).x / 8, r(rcnt).y / 8), 0: '         delete old pixelăă	r(rcnt).height = r(rcnt).height - 1ă	IF r(rcnt).height > 0 THENă		r(rcnt).x = r(rcnt).x + r(rcnt).stpx: '         draw new pixelă		r(rcnt).y = r(rcnt).y + r(rcnt).stpyă		PSET (r(rcnt).x / 8, r(rcnt).y / 8), 7ăă	ELSE : '                            initialise pixels for explotionă		r(rcnt).state = 1: '              restart rocket if no available pixelsetă		r(rcnt).fuse = RND * 20ăă		i1 = 0ă		DO UNTIL i1 > PIXELSETSă			IF ps(i1).free = 1 THENă				GeneralLength = 15 + RND * 28: '      general length of the explotionăă				FOR i = ps(i1).first TO ps(i1).lastă					pnt(i).x = r(rcnt).x + RND * 17 - 8ă					pnt(i).y = r(rcnt).y + RND * 17 - 8ă					pnt(i).stpx = RND * 20 - 10ă					pnt(i).stpy = RND * 10 - 30ă					pnt(i).add = 1ă					pnt(i).ink = RND * 15 + 1ă					pnt(i).frames = GeneralLength + RND * 20ă				NEXTăă				ps(i1).free = 0: '                     mark pixel set as occupiedă				r(rcnt).set = i1: '                    pixel set used by the rocketă				r(rcnt).state = 3: '                   explotion: use RocketExplodeă				r(rcnt).explode = GeneralLength + 20: 'set length of entire explotionă				i1 = PIXELSETS: '                      exit do loopă			END IFă		 ă			i1 = i1 + 1ă		LOOPă	END IFăRETURNăăRocketExplode:ă	r(rcnt).explode = r(rcnt).explode - 1ăă	IF r(rcnt).explode = 0 THENă		ps(r(rcnt).set).free = 1: '              free the pixel setă		r(rcnt).fuse = RND * 20: '               set delay before next launchă		r(rcnt).state = 1: '                     waiting: use RocketWaită	END IFăRETURNăăEND FUNCTIONăăSUB PaletteFade (cont)ă' fades internal palette towards fade paletteă	i = 63ă	WHILE i > 0 AND cont = 1ă		CALL PaletteHandler(16, 0, 2)ă		CALL RetraceWait(3)ă		i = i - 1ă		IF INKEY$ <> "" THEN cont = 0ă	WENDăEND SUBăăSUB PaletteHandler (state, CBase, SetPal) STATICă' State:   1 = Colour Generator: make next coloură'              CBase: colour index to insert new colour ată'          2 = Colour Generator: fade source coloură'              CBase: colour index to insert faded colour ată'          3 = return info flag in CBase.ă'              What the subroutine is set up foră'              CBase:  9 = colour cyclingă'                     64 = RGB shiftingă'          8 = cycle internal palette upwardsă'         16 = fade internal palette towards fade paletteă'         64 = RGB shifting of internal paletteă'        128 = build an internal paletteă'              CBase: >0 = vividnes in the colours selectedă'                      0 = black palette (fade in...)ă'        256 = randomly selects either cycling or shiftingă'       1024 = mirror internal palettes (colour 255=1, 254=2...)ă'              note: only callable when setting either paletteă'       2048 = set fade in palette according to CBaseă'              CBase: >0 = vividnes in the colours selectedă'                      0 = black palette (fade in...)ă' SetPal: 0 = don't set paletteă'         1 = set one colour. CBase specifies colour to setă'         2 = set entire paletteă	SHARED MAXINKă	DIM r(1 TO 255): '                  the internal paletteă	DIM g(1 TO 255)ă	DIM b(1 TO 255)ă	DIM rf(1 TO 255): '                 palette to fade towardsă	DIM gf(1 TO 255)ă	DIM BF(1 TO 255)ă	DIM pm(1 TO 510): '                 pm=palette mapping used in RGB shiftingăă	IF (state AND 8) = 8 THENă		rbld = r(MAXINK): '               read top colour for circular cyclingă		gbld = g(MAXINK)ă		bbld = b(MAXINK)ă	ă		FOR c = MAXINK - 1 TO 1 STEP -1ă			r(c + 1) = r(c)ă			g(c + 1) = g(c)ă			b(c + 1) = b(c)ă		NEXTăă		IF (state AND 1) = 0 THENă			r(1) = rbld: '            circular cycling: insert top colour at bottomă			g(1) = gbldă			b(1) = bbldă		END IFă	END IFăă	IF (state AND 3) <> 0 THENă		SELECT CASE (state AND 3)ă			CASE 1: CALL ColourGenerator(1, r(CBase), g(CBase), b(CBase))ă			CASE 2: CALL ColourGenerator(2, r(CBase), g(CBase), b(CBase))ă			CASE 3ă				CBase = 9ă				IF RGBr! <> 0 THEN CBase = 64ă		END SELECTă	END IFăă	IF (state AND 16) = 16 THENă		FOR c = 1 TO MAXINKă			IF r(c) < rf(c) THEN r(c) = r(c) + 1ă			IF g(c) < gf(c) THEN g(c) = g(c) + 1ă			IF b(c) < BF(c) THEN b(c) = b(c) + 1ă			IF r(c) > rf(c) THEN r(c) = r(c) - 1ă			IF g(c) > gf(c) THEN g(c) = g(c) - 1ă			IF b(c) > BF(c) THEN b(c) = b(c) - 1ă		NEXTă	END IFăă	IF (state AND 128) = 128 THENă		IF CBase > 0 THENă			rbld = 1ă			CALL ColourGenerator(3, CBase, 0, 0)ă		ELSEă			rbld = 4ă		END IFăă		FOR c = MAXINK TO 1 STEP -1ă			CALL ColourGenerator(rbld, r(c), g(c), b(c))ă		NEXTăă		IF (state AND 1024) = 1024 THENă			FOR c = 1 TO 128ă				r(256 - c) = r(c)ă				g(256 - c) = g(c)ă				b(256 - c) = b(c)ă			NEXTă		END IFăă		RGBr! = 0: '                             no RGB shiftingăă		IF (state AND 256) = 256 AND RND < .5 THEN state = state OR 64ăă		IF (state AND 64) = 64 THENă			RGBstpr! = .008 + RND * .005: '        how fast to shift RGB bandsă			RGBstpg! = .008 + RND * .005ă			RGBstpb! = .008 + RND * .005ă			RGBr! = RND * 6.28: '                  start point for RGB bandsă			RGBg! = RND * 6.28ă			RGBb! = RND * 6.28ă		END IFăă		FOR c = 1 TO 255ă			pm(c) = c: '                     build logical table for RGB shiftingă			pm(511 - c) = că		NEXTă	END IFăă	IF (state AND 64) = 64 THENă		RGBr! = RGBr! + RGBstpr!: '             move bands ready for next periodă		RGBg! = RGBg! + RGBstpg!ă		RGBb! = RGBb! + RGBstpb!ă	END IFă				 ă	IF (state AND 2048) = 2048 THENă		IF CBase > 0 THENă			rbld = 1ă			CALL ColourGenerator(3, CBase, 0, 0)ă		ELSEă			rbld = 4: '                        ColourGenerator return black coloursă		END IFăă		FOR c = MAXINK TO 1 STEP -1ă			CALL ColourGenerator(rbld, rf(c), gf(c), BF(c))ă		NEXTăă		IF (state AND 1024) = 1024 THENă			FOR c = 1 TO 128ă				rf(256 - c) = rf(c)ă				gf(256 - c) = gf(c)ă				BF(256 - c) = BF(c)ă			NEXTă		END IFă	END IFăă	SELECT CASE SetPală		CASE 2ă			IF RGBr! <> 0 THENă				rbld = 128 + INT(COS(RGBr!) * 127): '  offset concerning RGB shiftingă				gbld = 128 + INT(COS(RGBg!) * 127)ă				bbld = 128 + INT(COS(RGBb!) * 127)ă			ELSEă				rbld = 1: gbld = 1: bbld = 1ă			END IFăă			OUT 968, 1ă			FOR c = 1 TO MAXINKă				OUT 969, r(pm(rbld))ă				OUT 969, g(pm(gbld))ă				OUT 969, b(pm(bbld))ăă				rbld = rbld + 1ă				gbld = gbld + 1ă				bbld = bbld + 1ă			NEXTă	ă		CASE 1ă			OUT 968, CBaseă			OUT 969, r(CBase)ă			OUT 969, g(CBase)ă			OUT 969, b(CBase)ă	END SELECTăEND SUBăăSUB PlasmaColumn (c AS FADE)ă	c.y = c.y + 1ă	c.ypeak = c.ypeak + 1ăă	IF c.ypeak = c.ystep THENă		c.ink = INT(c.ink)ă		c.ypeak = 0ăă		IF c.symetric = 1 THENă			c.inkstep = (c.crange - c.ink * 2) / c.ystepă		ELSEă			c.inkstep = (RND * c.crange - c.ink) / c.ystepă		END IFă	END IFăă	c.ink = c.ink + c.inkstepăEND SUBăăFUNCTION PlasmaFull%ă	DIM c(4) AS FADEă	RANDOMIZE TIMERăă	CALL PlasmaInit(c(0), 0, 25 + RND * 25, 0, 1 + RND * 255, 255)ă	CALL PlasmaInit(c(1), 319, 25 + RND * 25, 0, 1 + RND * 255, 255)ăă	y = 0ă	DOă		CALL PlasmaRow(c(0), c(1))ă		CALL PlasmaColumn(c(0))ă		CALL PlasmaColumn(c(1))ăă		y = y + 1ă		continue$ = INKEY$ă	LOOP WHILE y <= 199 AND continue$ = ""ăă	PlasmaFull% = 1: '                               return:  0=end  1=continueă	IF continue$ <> "" THEN PlasmaFull% = 0ăEND FUNCTIONăăSUB PlasmaInit (c AS FADE, x, ystep, smtrc, ink!, crange)ă	c.x = xă	c.y = 0ă	c.ystep = ystepă	c.ypeak = ystep - 1: '                forces init of ink variablesă	c.symetric = smtrcă	c.ink = ink!ă	c.crange = crangeăEND SUBăăSUB PlasmaRow (c1 AS FADE, c2 AS FADE)ă	DIM ink AS SINGLE, inkstep AS SINGLEăă	ink = c1.inkă	inkstep = (c2.ink - c1.ink) / (c2.x - c1.x + 1)ăă	FOR x = c1.x TO c2.xă		ink = ink + inkstepă		pixink = INT(ink)ă		ă		IF pixink < 1 THEN pixink = 1: '              make ink stay in boundariesă		IF pixink > c1.crange THEN pixink = c1.crangeă		PSET (x, c1.y), pixinkă	NEXTăEND SUBăăFUNCTION PlasmaSplit% (symetric) : '       function is hardwired for mode 13hă' On call: symetric=1  : symetrică'                  <>1 : not symetrică	DIM c(4) AS FADE: 'ăă	y = INT(40 - RND * 80)ăă	IF symetric = 1 THENă		dist1 = 2 + RND * 25ă		dist2 = 2 + RND * 25ă		dist3 = 2 + RND * 25ă		CALL PlasmaInit(c(0), 0, dist1, 1, 0, 100)ă		CALL PlasmaInit(c(1), 80 + y, dist2, 1, 15, 100)ă		CALL PlasmaInit(c(2), 159, dist3, 1, RND * 63, 100)ă		CALL PlasmaInit(c(3), 240 - y, dist2, 1, 15, 100)ă		CALL PlasmaInit(c(4), 319, dist1, 1, 0, 100)ă	ELSEă		dist1 = 4 + RND * 4ă		dist2 = 4 + RND * 4ă		dist3 = 4 + RND * 4ă		CALL PlasmaInit(c(0), 0, dist1, 0, 0, 100)ă		CALL PlasmaInit(c(1), 80 + y, dist2, 0, 15, 100)ă		CALL PlasmaInit(c(2), 159, dist3, 0, RND * 63, 100)ă		CALL PlasmaInit(c(3), 240 - y, dist2, 0, 15, 100)ă		CALL PlasmaInit(c(4), 319, dist1, 0, 0, 100)ă	END IFăă	y = 0ă	DOă		CALL PlasmaRow(c(0), c(1))ă		CALL PlasmaRow(c(1), c(2))ă		CALL PlasmaRow(c(2), c(3))ă		CALL PlasmaRow(c(3), c(4))ăă		CALL PlasmaColumn(c(0))ă		CALL PlasmaColumn(c(1))ă		CALL PlasmaColumn(c(2))ă		CALL PlasmaColumn(c(3))ă		CALL PlasmaColumn(c(4))ă		c(3).ink = c(1).ink: '            make column 2 identical to column 0ă		c(4).ink = c(0).inkăă		y = y + 1ă		continue$ = INKEY$ă	LOOP WHILE y <= 199 AND continue$ = ""ăă	PlasmaSplit% = 1: '                              return: 0=end 1=continueă	IF continue$ <> "" THEN PlasmaSplit% = 0ăEND FUNCTIONăăSUB RetraceWait (periods)ă	FOR i = 1 TO periodsă		WHILE (INP(&H3DA) AND 8) = 0: WENDă		WHILE (INP(&H3DA) AND 8) = 8: WENDă	NEXTăEND SUBăăFUNCTION RotatedLines% (style, periods, RotatedPnts)ă' On call:  style = 1: Wandering Lines with rotationă'                   2: Sinus Lines with rotationă'                   3: Sinus Wandering Lines with rotationă'           periods = nr of update periods to rună'           RotatedPnts = nr of lines to make via rotationă'ă	SHARED MAXX, MAXY, CNTX, CNTY, MAXINKăă	CONST SINUSPNTS = 75: '                            (Sinus Lines)ă	CONST WANDERLINES = 43, SPAN = 30: '               (Wandering Lines)ă	CONST SINWANDLINES = 10: '                         (Sinus Wandering Lines)ă	CONST AMPLITUDE = 170ăă	DIM tbl(0 TO WANDERLINES) AS LineDef: '            (*not* Sinus Lines)ă	DIM pntx(SINUSPNTS), pnty(SINUSPNTS): '            (Sinus Lines)ă	DIM CosTbl!(RotatedPnts), SinTbl!(RotatedPnts): '  (rotation tables)ă	DIM Angl!(3), AnglStp!(3): '                       (sinus wandering lines)ăă	CALL PaletteHandler(2048, 0, 0)ăă	Angl!(0) = 0: AnglStp!(0) = 6.283185 / RotatedPntsă	FOR i = 1 TO RotatedPntsă		CosTbl!(i) = COS(Angl!(0)): '                    build cos and sin tablesă		SinTbl!(i) = SIN(Angl!(0))ă		Angl!(0) = Angl!(0) + AnglStp!(0)ă	NEXTăă	FOR i = 0 TO WANDERLINESă		tbl(i).x1 = 0: '                                 clear table before startă		tbl(i).y1 = 0ă		tbl(i).x2 = 0ă		tbl(i).y2 = 0ă	NEXTăă	SELECT CASE styleă		CASE 1: '                            *** Wandering Lines ***ă			basex1 = 0: basey1 = 0: '          init line draw routineă			basex2 = 0: basey2 = 0ă			TblDraw = 0: TblDel = 2: '         draw and delete pointers into tblă			c = 0: '                           colour counter (help variable)ă			SpanCount = 0: '                   initialize stp__ varibles in 1st runăă			DOă				SpanCount = SpanCount - 1ă				IF SpanCount <= 0 THENă					stpx1 = (RND * MAXX - CNTX - basex1) / SPAN: '     change directionă					stpy1 = (RND * MAXY - CNTY - basey1) / SPAN: '       of linesă					stpx2 = (RND * MAXX - CNTX - basex2) / SPANă					stpy2 = (RND * MAXY - CNTY - basey2) / SPANă					SpanCount = 30ă				END IFăă				basex1 = basex1 + stpx1ă				basey1 = basey1 + stpy1ă				basex2 = basex2 + stpx2ă				basey2 = basey2 + stpy2ăă				c = c + 1ă				IF c > 2 THENă					c = 0ă					FskInk = FskInk MOD MAXINK + 1ă					IF periods > 63 THEN CALL PaletteHandler(1, FskInk, 1)ă				END IFă																												ă				IF periods < 63 THEN CALL PaletteHandler(16, 0, 2): '    fade coloursăă				x1 = basex1: y1 = basey1: '                       set call parametersă				x2 = basex2: y2 = basey2ă				ink = FskInkă				GOSUB MirrorPlot: '                               draw new linesăă				tbl(TblDraw).x1 = basex1ă				tbl(TblDraw).x2 = basex2ă				tbl(TblDraw).y1 = basey1ă				tbl(TblDraw).y2 = basey2ă				x1 = tbl(TblDel).x1: y1 = tbl(TblDel).y1: '       set call parametersă				x2 = tbl(TblDel).x2: y2 = tbl(TblDel).y2ă				ink = 0ă				GOSUB MirrorPlot: '                               delete old linesăă				TblDraw = TblDraw + 1ă				TblDraw = TblDraw MOD WANDERLINESă				TblDel = TblDel + 1ă				TblDel = TblDel MOD WANDERLINESăă				CALL RetraceWait(4)ăă				periods = periods - 1ă				continue$ = INKEY$ă			LOOP WHILE periods > 0 AND continue$ = ""ăă		CASE 2: '                                    *** Sinus Lines ***ă			FOR pnt = 0 TO SINUSPNTSă				pntx(pnt) = 0: '                         init pnts before deleting...ă				pnty(pnt) = 0ă			NEXTăă			c = 10: '                                  force instant colour inită			newp = 0: oldp = 1: '                      pointers into pnt_ tablesă			xv! = 0: yv! = 0: '                        angles that generate patternă			xstp! = (100 + RND * 400) / 5000ă			ystp! = (100 + RND * 400) / 5000ă	ă			DOă				x1 = pntx(oldp): y1 = pnty(oldp): '                 1st point in lineă				oldp = oldp + 1: oldp = oldp MOD SINUSPNTS: '       oldp=next pointă				x2 = pntx(oldp): y2 = pnty(oldp)ă				ink = 0ă				GOSUB MirrorPlotăă				xv! = xv! + xstp!ă				yv! = yv! + ystp!ăă				x1 = pntx(newp): y1 = pnty(newp): '           1st point in next lineă				newp = newp + 1: newp = newp MOD SINUSPNTS: ' move newp to next pointă				x2 = SIN(xv!) * AMPLITUDE: '                  2nd point for new lineă				y2 = SIN(yv!) * AMPLITUDEă				pntx(newp) = x2: pnty(newp) = y2ăă				c = c + 1ă				IF c > 6 THENă					c = 0: '                                    generate next coloură					FskInk = FskInk MOD MAXINK + 1ă					CALL PaletteHandler(1, FskInk, 1)ă				END IFă				ink = FskInkă				GOSUB MirrorPlotă				CALL RetraceWait(1)ăă				periods = periods - 1ă				continue$ = INKEY$ă			LOOP WHILE periods > 0 AND continue$ = ""ăă			pnt = 0ă			WHILE continue$ = "" AND pnt <= SINUSPNTSă				x1 = pntx(oldp): y1 = pnty(oldp): '                 1st point in lineă				oldp = oldp + 1: oldp = oldp MOD SINUSPNTS: '       oldp=next pointă				x2 = pntx(oldp): y2 = pnty(oldp)ă				ink = 0ă				GOSUB MirrorPlotă				CALL RetraceWait(1)ăă				pnt = pnt + 1ă				continue$ = INKEY$ă			WENDăă		CASE 3: '                             *** Sinus Wandering Lines ***ă			TblDraw = SINWANDLINESă			MAXINK = SINWANDLINES: '            only cycle colours 1-SINWANDERLINESăă			FOR i = 0 TO 3ă				Angl!(i) = RND * 6.283185: '      init random sinus movementă				AnglStp!(i) = .005 + RND * .05ă			NEXTăă			DOă				TblDraw = TblDraw MOD MAXINK + 1ă															ă				x1 = tbl(TblDraw).x1ă				y1 = tbl(TblDraw).y1ă				x2 = tbl(TblDraw).x2ă				y2 = tbl(TblDraw).y2ă				ink = 0ă				GOSUB MirrorPlotăă				FOR i = 0 TO 3ă					Angl!(i) = Angl!(i) + AnglStp!(i)ă				NEXTăă				c = 8ă				IF periods < 55 THEN c = 24: '         finish of by fading coloursă				CALL PaletteHandler(c, 1, 2)ă			ă				x1 = SIN(Angl!(0)) * AMPLITUDEă				y1 = SIN(Angl!(1)) * AMPLITUDEă				x2 = SIN(Angl!(2)) * AMPLITUDEă				y2 = SIN(Angl!(3)) * AMPLITUDEă				ink = TblDrawă				GOSUB MirrorPlotăă				tbl(TblDraw).x1 = x1ă				tbl(TblDraw).y1 = y1ă				tbl(TblDraw).x2 = x2ă				tbl(TblDraw).y2 = y2ă				CALL RetraceWait(2)ăă				periods = periods - 1ă				continue$ = INKEY$ă			LOOP WHILE continue$ = "" AND periods > 0ă	END SELECTăă	RotatedLines% = 1: '                             return:  0=end  1=continueă	IF continue$ <> "" THEN RotatedLines% = 0ăă	EXIT FUNCTIONăăMirrorPlot:ă' ---> Parameters on call: x1,y1,x2,y2,inkă	FOR i = 1 TO RotatedPntsă		px1 = x1 * CosTbl!(i) + y1 * SinTbl!(i) + CNTXă		py1 = y1 * CosTbl!(i) - x1 * SinTbl!(i) + CNTYă		px2 = x2 * CosTbl!(i) + y2 * SinTbl!(i) + CNTXă		py2 = y2 * CosTbl!(i) - x2 * SinTbl!(i) + CNTYă		LINE (px1, py1)-(px2, py2), inkă	NEXTăRETURNăEND FUNCTIONăăFUNCTION ShadeBox% (xangle!, yangle!, xstp!, ystp!, periods)ă' _angle! : locate boxă' _stp!   : how fast to move about the screenă	SHARED MAXX, MAXY, CNTX, CNTYă	DIM ink(1 TO 255)ăă	FOR i = 1 TO 254ă		ink(i) = i + 1ă	NEXTă	ink(255) = 1ăă	LINE (0, 0)-(MAXX, MAXY), 1, BFăă	DOă		FOR i = 1 TO 2ă			AmplScl! = .15 + RND * .85ă			lx = CNTX + SIN(xangle!) * 141 * AmplScl! - 14ă			ly = CNTY + SIN(yangle!) * 86 * AmplScl! - 10ă			hx = lx + 28ă			hy = ly + 20ăă			FOR sy = ly TO hyă				DEF SEG = 40960 + sy * 20ă				FOR sx = lx TO hxă					POKE sx, ink(PEEK(sx))ă				NEXTă			NEXTăă			xangle! = xangle! + xstp!ă			yangle! = yangle! + ystp!ă		NEXTăă		CALL RetraceWait(1)ă		periods = periods - 1ă	LOOP WHILE periods > 0 AND INKEY$ = ""ăă	ShadeBox% = 0ă	IF periods = 0 THEN ShadeBox% = 1: '          0=end  1=continueăEND FUNCTIONăăSUB StarDraw (x, y, size, InkBase) STATICă' x,y     : location of star on displayă' size    : size of star (=radius)ă' InkBase : -1 = precalculate line lenghts for star sizes.ă'           >0 = normal star drawă	DIM sz(1 TO 13, 3), ink(3)              '13 = max star sizeăă	IF InkBase > 0 THENă		ink(0) = InkBaseă		ink(1) = InkBase + 1ă		ink(2) = InkBase + 2ă		ink(3) = 15ăă		FOR i = 0 TO 3ă			LINE (x - sz(size, i), y)-(x + sz(size, i), y), ink(i)ă			LINE (x, y - sz(size, i))-(x, y + sz(size, i)), ink(i)ă		 ă			mid = sz(size, i) * .5ă			LINE (x - mid, y - mid)-(x + mid, y + mid), ink(i)ă			LINE (x - mid, y + mid)-(x + mid, y - mid), ink(i)ă		NEXTăă	ELSEă		FOR i = 1 TO 13ă			sz(i, 0) = i * 1                    'lenghts of lines in individuală			sz(i, 1) = i * .7                   'star sizes are precalculatedă			sz(i, 2) = i * .4ă			sz(i, 3) = i * .2ă		NEXTă	END IFăEND SUBăăFUNCTION StarField% (periods)ă	SHARED CNTX, CNTYă	CONST STARSMAX = 240ă	DIM x(STARSMAX), y(STARSMAX), z(STARSMAX), oldx(STARSMAX), oldy(STARSMAX)ă	DIM scale!(-200 TO 200), ink(-200 TO 200)ăă	c = 63ă	FOR i = 1 TO 51ă		OUT 968, i: '                 PEL Address Write Mode reg  (select colour)ă		OUT 969, c: '                 PEL Data reg (red,green,blue)ă		OUT 969, că		OUT 969, că		c = c - 1ă	NEXTăă	FOR i = -200 TO 200ă		scale!(i) = (200 / (215 + i)) / 10: '  z resolution is only 400, not 4000ă		ink(i) = 1 + (i + 200) / 8ă	NEXTăă	FOR i = 0 TO STARSMAXă		x(i) = RND * 2000ă		y(i) = RND * 2000ă		IF RND < .5 THEN x(i) = -x(i)ă		IF RND < .5 THEN y(i) = -y(i)ă		z(i) = RND * 4000 - 2000ă	NEXTăă	RANDOMIZE TIMERă	vx! = RND * 6.28318ă	vy! = RND * 6.28318ă	vz! = RND * 6.28318ă	vxstp! = .004 + RND * .004ă	vystp! = .004 + RND * .004ă	vzstp! = .004 + RND * .004ăă	DOă		vx! = vx! + vxstp!ă		vy! = vy! - vystp!ă		vz! = vz! + vzstp!ă		stpx = INT(COS(vx!) * 30)ă		stpy = INT(COS(vy!) * 30)ă		stpz = INT(COS(vz!) * 30)ăă		s1 = 0: s2 = 119: '                   1st lot of stars in 1 update periodă		GOSUB CalcAndDrawStarsă		s1 = 120: s2 = STARSMAX: '            2nd lot of stars in another periodă		GOSUB CalcAndDrawStarsăă		periods = periods - 1ă		continue$ = INKEY$ă	LOOP WHILE continue$ = "" AND periods > 0ăă	StarField% = 1: '                                return:  0=end  1=continueă	IF continue$ <> "" THEN StarField% = 0ă	EXIT FUNCTIONăăCalcAndDrawStars:ă	IF stpx < 0 THENă		FOR i = s1 TO s2ă			x(i) = x(i) + stpxă			IF x(i) < -2000 THEN x(i) = 2000ă		NEXTă	ELSEă		FOR i = s1 TO s2ă			x(i) = x(i) + stpxă			IF x(i) > 2000 THEN x(i) = -2000ă		NEXTă	END IFăă	IF stpy < 0 THENă		FOR i = s1 TO s2ă			y(i) = y(i) + stpyă			IF y(i) < -2000 THEN y(i) = 2000ă		NEXTă	ELSEă		FOR i = s1 TO s2ă			y(i) = y(i) + stpyă			IF y(i) > 2000 THEN y(i) = -2000ă		NEXTă	END IFăă	IF stpz < 0 THENă		FOR i = s1 TO s2ă			z(i) = z(i) + stpză			IF z(i) < -2000 THEN z(i) = 2000ă		NEXTă	ELSEă		FOR i = s1 TO s2ă			z(i) = z(i) + stpză			IF z(i) > 2000 THEN z(i) = -2000ă		NEXTă	END IFăă	FOR i = s1 TO s2ă		PSET (oldx(i), oldy(i)), 0ă		c = z(i) / 10ă		oldx(i) = CNTX + x(i) * scale!(c)ă		oldy(i) = CNTY + y(i) * scale!(c)ă		PSET (oldx(i), oldy(i)), ink(c)ă	NEXTăă	WHILE (INP(&H3DA) AND 8) = 0: WENDăRETURNăăEND FUNCTIONăăSUB wipe (WipeStyle, PalStyle, state) STATICă' WipeStyle:  1 = chess style wipeă'             2 = line fade wipeă'             3 = line block wipeă'             4 = random block wipeă'             5 = top and bottom line wipeă'             6 = turn off TV wipeă'             7 = closing jaws with colour fadingă'             8 = closing curtains with colour fadingă'             9 = pixel wipeă'            10 = emerging vertical line wipeă' state: -1 = inită'         0 = finishedă'        >0 = normal run periodă' PalStyle: used in call to PaletteHandler (fading)ă'ă	SHARED MAXX, MAXY, CNTX, CNTY, WipeChess(), WipeBlk()ăă	SELECT CASE WipeStyleă		CASE 1:  '                                               chess style wipeă			IF state = 1 THENă				x = INT(WipeChess(h) MOD 16) * 20ă				y = INT(WipeChess(h) / 16) * 17ă				LINE (x, y)-(x + 19, y + 16), 0, BFă				h = h + 1ă				IF h > 191 THEN state = 0ăă			ELSEă				h = 0ă				state = 1ă			END IFăă		CASE 2: '                                                line fade wipeă			SELECT CASE stateă				CASE 1ă					LINE (0, y)-(MAXX, y), 0, , &HAAAAă					LINE (0, y + 2)-(MAXX, y + 2), 0, , &HAAAAă					y = y + 4: IF y > MAXY THEN state = 2: y = 1ă				CASE 2ă					LINE (0, y)-(MAXX, y), 0, , &H5555ă					LINE (0, y + 2)-(MAXX, y + 2), 0, , &H5555ă					y = y + 4: IF y > MAXY THEN state = 3: y = 0ă				CASE 3ă					LINE (0, y)-(MAXX, y), 0, , &H5555ă					LINE (0, y + 2)-(MAXX, y + 2), 0, , &H5555ă					y = y + 4: IF y > MAXY THEN state = 4: y = 1ă				CASE 4ă					LINE (0, y)-(MAXX, y), 0, , &HAAAAă					LINE (0, y + 2)-(MAXX, y + 2), 0, , &HAAAAă					y = y + 4: IF y > MAXY THEN state = 0ă				CASE -1ă					y = 0ă					state = 1ă			END SELECTăă		CASE 3: '                                           line block wipeă			IF state > 0 THENă				FOR y = 0 TO blocksă					IF WipeBlk(y) >= 0 AND WipeBlk(y) < height THENă						h = y * height + WipeBlk(y)ă						LINE (0, h)-(MAXX, h), 0ă					END IFă					WipeBlk(y) = WipeBlk(y) + 1ă				NEXTă				state = state - 1ăă			ELSEă				blocks = 24: height = 8: state = 32: h = 0ă				FOR y = 0 TO blocksă					WipeBlk(y) = hă					h = h - 1ă				NEXTă			END IFăă		CASE 4: '                                           random block wipeă			IF state > 0 THENă				x = INT(WipeBlk(h) MOD 16) * 20ă				y = INT(WipeBlk(h) / 16) * 17ă				LINE (x, y)-(x + 19, y + 16), 0, BFă				h = h + 1ă				IF h > 191 THEN state = 0ăă			ELSEă				FOR i = 0 TO 191ă					WipeBlk(i) = iă				NEXTăă				FOR i = 0 TO 191ă					x = INT(RND * 192)ă					temp = WipeBlk(i)ă					WipeBlk(i) = WipeBlk(x)ă					WipeBlk(x) = tempă				NEXTăă				h = 0ă				state = 1ă			END IFăă		CASE 5: '                                        top and bottom line wipeă			IF state = 1 THENă				LINE (0, y)-(MAXX, y), 0ă				LINE (0, MAXY - y)-(MAXX, MAXY - y), 0ă				y = y + 2: IF y > MAXY THEN state = 0ă			ELSEă				y = 0ă				state = 1ă			END IFăă		CASE 6: '                                        turn off TV wipeă			IF state = 1 THENă				FOR y = 0 TO CNTY STEP 6ă					LINE (0, y)-(MAXX, y + 6), 0, BFă					LINE (0, MAXY - y)-(MAXX, MAXY - y - 6), 0, BFă					CALL RetraceWait(1)ă				NEXTă				PALETTE 15, 4144959ăă				FOR x = 90 TO CNTXă					LINE (x, CNTY)-(MAXX - x, CNTY), 15ă					CALL RetraceWait(1)ă					LINE (x, CNTY)-(MAXX - x, CNTY), 0ă				NEXTăă				CALL RetraceWait(20): '                 pause for a moment before:ă				PSET (CNTX, CNTY), 15: '                  - displaying dot in centeră				CALL RetraceWait(15)ăă				FOR y = 63 TO 0 STEP -1ă					OUT 968, 15: '                          - and fading it to blackă					OUT 969, yă					OUT 969, yă					OUT 969, yă					CALL RetraceWait(1)ă				NEXTă				state = 0: '                         finishedă			ELSEă				state = 1ă			END IFăă		CASE 7: '                              closing jaws wipeă			SELECT CASE stateă				CASE 1ă					FOR x = 1 TO 2ă						LINE (0, 0)-(MAXX, y), că						LINE (MAXX, MAXY)-(0, MAXY - y), că						y = y + 1: '                         next line and coloură						c = c + 1ă					NEXTă					IF y > MAXY THENă						state = 2ă						IF PalStyle = 9 THEN PalStyle = 10: x = 263ă						IF PalStyle = 64 THEN PalStyle = 80: x = 63ă					END IFăă				CASE 2ă					x = x - 1: '                  count down while colours fade oută					IF x < 0 THEN state = 0ăă				CASE -1ă					CALL PaletteHandler(2048, 0, 0): '  ready to fadeă					c = 1: '                            colour to plotă					y = 0ă					state = 1ă			END SELECTăă		CASE 8: '                              closing curtains wipeă			SELECT CASE stateă				CASE 1ă					LINE (x, 0)-(x, MAXY), că					LINE (MAXX - x, 0)-(MAXX - x, MAXY), că					x = x + 1: '                            next line and coloură					c = c + 1ă				ă					IF x > MAXX / 2 THENă						state = 2ă						IF PalStyle = 9 THEN PalStyle = 10: x = 223ă						IF PalStyle = 64 THEN PalStyle = 80: x = 63ă					END IFăă				CASE 2ă					x = x - 1: '                  count down while colours fade oută					IF x < 0 THEN state = 0ăă				CASE -1ă					CALL PaletteHandler(2048, 0, 0): '  ready to fadeă					c = 1: '                            colour to plotă					x = 0ă					state = 1ă			END SELECTăă		CASE 9: '                               pixel wipeă			IF state = 1 THENă				FOR x = 0 TO 3ă					DEF SEG = &HA000 + x * 1000ăă					FOR i = ofs TO ofs + 196 STEP 4ă						POKE WipeBlk(i), 0ă						POKE WipeBlk(i + 1), 0ă						POKE WipeBlk(i + 2), 0ă						POKE WipeBlk(i + 3), 0ă					NEXTă				NEXTăă				ofs = ofs + 200ă				IF ofs >= 16000 THEN state = 0ă				 ă			ELSEă				FOR i = 0 TO 15999ă					WipeBlk(i) = iă				NEXTăă				FOR i = 0 TO 15999ă					SWAP WipeBlk(i), WipeBlk(RND * 15999)ă				NEXTă				 ă				ofs = 0: state = 1ă			END IFăă		CASE 10ă			SELECT CASE stateă				CASE 1ă					LINE (0, CNTY + y)-(MAXX, CNTY + y), 0, , &HAAAAă					LINE (0, CNTY - y)-(MAXX, CNTY - y), 0, , &HAAAAă					y = y + 1ă					IF y > 100 THEN y = 100: state = 2ă				ă				CASE 2ă					LINE (1, CNTY + y)-(MAXX, CNTY + y), 0, , &HAAAAă					LINE (1, CNTY - y)-(MAXX, CNTY - y), 0, , &HAAAAă					y = y - 1ă					IF y < 0 THEN state = 0ăă				CASE -1ă					y = 0: state = 1ă			END SELECTă	END SELECTăEND SUBăăFUNCTION WobbleCircle (periods!, twist)ă	SHARED CNTX, CNTY, MAXX, MAXYă	DIM SinTbl!(1045), CosTbl!(1045): '                   1045 = resolutionă	DIM InkTbl(1045)ăă	FOR i = 0 TO 1045ă		rdn! = .006012617519# * i: '                        2*pi/1045 *iă		CosTbl!(i) = COS(rdn!)ă		SinTbl!(i) = SIN(rdn!)ăă		InkTbl(i) = CINT(1 + .243062201# * i): '            1+ (MaxInk-1)/1045 *iă	NEXTăă	radius = 144ăă	DOă		rdn! = periods! / 144 * radiusă		InkOffs = INT(SIN(rdn!) * twist) + twist: '         start point in InkTblă											ă		FOR i = 0 TO 1045ă			y = CINT(SinTbl!(i) * radius) + CNTYă			x = CINT(CosTbl!(i) * radius * 1.55) + CNTXă			c = InkTbl((InkOffs + i) MOD 1045)ă			PSET (x, y), că			PSET (x - 1, y), că		NEXTăă		radius = radius - 1ă		continue$ = INKEY$ă	LOOP WHILE radius >= 1 AND continue$ = ""ăă	WobbleCircle% = 1: '                              return:  0=end 1=continueă	IF continue$ <> "" THEN WobbleCircle% = 0ăEND FUNCTIONăăFUNCTION ZoomingCircles% (periods)ă	SHARED CNTX, CNTYă	CONST PIXINCIRCLE = 50, CIRCLESMAX = 3ă	CONST AMPLITUDE = 60, TBLMAX = 250:  '           = PIXINCIRCLE * 5ăă	DIM CosTbl!(TBLMAX), SinTbl!(TBLMAX)ă	DIM scale!(-200 TO 200)ă	DIM c(CIRCLESMAX) AS ZoomCircleă	DIM pixx(199), pixy(199)ăă	FOR i = 0 TO CIRCLESMAXă		c(i).first = i * 50ă		c(i).last = i * 50 + 49ă		c(i).ink = 100 + i * 21ă	NEXTăă	FOR i = 0 TO 20ă		s1 = 23 + i * 2ă		OUT 968, 120 - iă		OUT 969, s1ă		OUT 969, 0ă		OUT 969, 0ăă		OUT 968, 141 - iă		OUT 969, 0ă		OUT 969, s1ă		OUT 969, 0ăă		OUT 968, 162 - iă		OUT 969, 0ă		OUT 969, 0ă		OUT 969, s1ă	 ă		OUT 968, 183 - iă		OUT 969, s1ă		OUT 969, s1ă		OUT 969, 0ă	NEXTăă	FOR i = 0 TO CIRCLESMAXă		c(i).radius = 100ă		c(i).xangle = RND * 3.1415926#ă		c(i).yangle! = RND * 3.1415926#ă		c(i).xstp! = .005 + RND * .05ă		c(i).ystp! = .005 + RND * .05ă		c(i).z = -200 + RND * 400ă		c(i).zstp = 8 + RND * 4ă		c(i).rotate = RND * 5ă	NEXTăă	FOR i = -200 TO 200ă		scale!(i) = 100 / (300 + i)ă	NEXTăă	v! = 0: vstp! = 6.2832# / TBLMAXă	FOR i = 0 TO TBLMAXă		CosTbl!(i) = COS(v!) * 1.2ă		SinTbl!(i) = SIN(v!)ă		v! = v! + vstp!ă	NEXTăă	DOă		s1 = 0: s2 = 1ă		GOSUB DrawCirclesă		s1 = 2: s2 = 3ă		GOSUB DrawCirclesă		periods = periods - 1ă	LOOP WHILE periods > 0 AND INKEY$ = ""ăă	ZoomingCircles% = 1: '                           return:  0=end  1=continueă	IF periods > 0 THEN ZoomingCircles% = 0ă	EXIT FUNCTIONăăDrawCircles:ă	FOR CirNr = s1 TO s2ă		c(CirNr).xangle = c(CirNr).xangle + c(CirNr).xstpă		c(CirNr).yangle = c(CirNr).yangle + c(CirNr).ystpă		ccx = CNTX + INT(SIN(c(CirNr).xangle) * AMPLITUDE): '  cc_=CenterCircleă		ccy = CNTY + INT(SIN(c(CirNr).yangle) * AMPLITUDE)ă		c(CirNr).z = c(CirNr).z + c(CirNr).zstpă		IF c(CirNr).z > 200 OR c(CirNr).z < -200 THENă			c(CirNr).zstp = c(CirNr).zstp * -1ă			c(CirNr).z = c(CirNr).z + c(CirNr).zstpă		END IFă		sclx! = scale!(c(CirNr).z) * c(CirNr).radiusă		scly! = scale!(c(CirNr).z) * c(CirNr).radiusă		ink = c(CirNr).ink + (c(CirNr).z + 200) / 20ă		c(CirNr).rotate = (c(CirNr).rotate + 1) MOD 5ă		r = c(CirNr).rotate: '           offset into tables for building circleăă		FOR i = c(CirNr).first TO c(CirNr).lastă			PSET (pixx(i), pixy(i)), 0ă		NEXTăă		FOR i = c(CirNr).first TO c(CirNr).lastă			pixx(i) = ccx + CosTbl!(r) * sclx!ă			pixy(i) = ccy + SinTbl!(r) * scly!ă			PSET (pixx(i), pixy(i)), inkă			r = r + 5ă		NEXTă	NEXTăă	CALL RetraceWait(1)ăRETURNăEND FUNCTIONăToshi Horie                    RAW IMAGE LOADER & DITHER ALGO toshi.tekscode.com             05-10-00 (00:37)       QB                     436  11551    DITHER.BAS  '------------------------------------------------------------ă' DITHER.BAS - fast RAW file loader and 16 color dither demoă' Copyright 2000 Toshihiro Horieă'------------------------------------------------------------ăDECLARE SUB dither ()ăDECLARE FUNCTION get13$ ()ăDECLARE SUB setpal16 ()ăDECLARE FUNCTION put13$ ()ăDECLARE FUNCTION loadv% (filename$)ăDECLARE SUB closev (handle%)ăDECLARE SUB readv (handle%, array%())ăDECLARE SUB loadraw2 (filename$)ăDECLARE SUB precalc ()ăDECLARE SUB setgrayscale ()ăDECLARE SUB loadraw (filename$)ăDEFINT A-Ză' manually define the type needed for INTERUPTXă' don't include qb.bi, it messes up the call absolute.ăTYPE RegTypeXă	ax    AS INTEGER: bx   AS INTEGER: cx   AS INTEGER: dx   AS INTEGERă	bp    AS INTEGER: si   AS INTEGER: di   AS INTEGER: flags AS INTEGERă	ds    AS INTEGER: es   AS INTEGERăEND TYPEăDECLARE SUB INTERRUPTX (intnum AS INTEGER, inreg AS RegTypeX, outreg AS RegTypeX)ăDIM SHARED regs AS RegTypeXăDIM SHARED div3(767)ăDIM SHARED ytab(199)ăDIM SHARED div16(-105 TO 255)ăDIM SHARED clip(-105 TO 371)ăprecalcăăăSCREEN 13: CLSăsetgrayscaleăă'slow QB-only loaderă'loadraw "amgpcd23.raw"ă'SLEEP 2ăă' try the fast loaderăCLSăloadraw2 "amgpcd23.raw"ăă'Floyd Steinberg ditherăditherăSLEEP 2ăăENDăăSUB closev (handle%)ă'close file with handleă    regs.ax = &H3E00ă    regs.bx = handle%ă    INTERRUPTX &H21, regs, regsăăEND SUBăăSUB ditheră' Floyd Steinberg dither algorithmă' implemented naively in QB by Toshiă' This version dithers 256 level grayscale to 16 colorsăDIM vscreen%(32000)ăDIM scanline2(319, 99)ăgetcpy$ = get13$ă'putcpy$ = put13$ăăăDEF SEG = VARSEG(getcpy$)ăCALL ABSOLUTE(vscreen%(), SADD(getcpy$))ăDEF SEG = VARSEG(vscreen%(0))ăSLEEP 2ăCLSăă'DEF SEG = &HA000ăsetpal16ăLOCATE 20, 1: COLOR 15: PRINT "Lowering color depth"ăp = 0ăFOR y = 0 TO 99ăFOR x = 0 TO 319ă    'scanline2(x, y) = POINT(x, y)ă    scanline2(x, y) = PEEK(p)ă    PSET (x, y), div16(scanline2(x, y))ă    p = p + 1ăNEXTăNEXTăERASE vscreen%ăSLEEP 3ăLOCATE 20, 1: COLOR 15: PRINT "Dithering to 16 colors"ăDEF SEG = &HA000ăFOR y = 1 TO 98ăFOR x = 1 TO 318ă    trueintensity = scanline2(x, y)ă    approx = trueintensity AND 240ă    POKE (ytab(y) + x), div16%(approx)ă   ă    'calculate error term,  -15<=errterm<=15ă    errterm = trueintensity - approxăă' spread 7/16 of the error into the pixel to the right, at (x+1,y)ă    scanline2(x + 1, y) = clip(scanline2(x + 1, y) + div16(errterm * 7))ăă' spread 3/16 of the error into the pixel below and to the leftă    scanline2(x - 1, y + 1) = clip(scanline2(x - 1, y + 1) + div16(errterm * 3))ăă' spread 5/16 of the error into the pixel belowă    e5 = div16(errterm * 5)ă    scanline2(x, y + 1) = clip(scanline2(x, y + 1) + e5)ăă' spread 5/16 of the error into the pixel below and to the rightă    scanline2(x + 1, y + 1) = clip(scanline2(x + 1, y + 1) + e5)ăNEXTăNEXTăăLOCATE 20, 1: COLOR 15: PRINT "Dithering successful!       "ă'DEF SEG = VARSEG(putcpy$)ă'CALL ABSOLUTE(vscreen%(), SADD(putcpy$))ă'ERASE vscreen%ăEND SUBăăDEFSNG B-ZăDEFSTR AăFUNCTION get13$ă'-------------------------------------------------------------------ă' GETSCREEN13 function by Rick Elbersă'This function gets a screen 13 to an QBASIC array. 386 + routineă'STACKPASSING: ARRAY%()ă'IN          : SCREEN 13 EMPTYă'OUT         : ARRAY%() FILLEDă'-------------------------------------------------------------------ă'SET UP STACKFRAMEăASM = ASM + CHR$(&H55)                              'PUSH BPăASM = ASM + CHR$(&H89) + CHR$(&HE5)                 'MOV BP,SPăASM = ASM + CHR$(&H1E)                              'PUSH DSăASM = ASM + CHR$(&H6)                               'PUSH ESă'GET POINTER TO ARRAY FROM STACKăASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)     'MOV BX,[BP+06]>ARRAY()ă'SET UP CX TO 64000/4, ES[DI] TO ARRAY, DS[SI] TO A000:0ăASM = ASM + CHR$(&HB9) + CHR$(&H80) + CHR$(&H3E)    'MOV CX,3E80hăASM = ASM + CHR$(&HC4) + CHR$(&H3F)                 'LES DI,[BX] ARRAY()ăASM = ASM + CHR$(&H31) + CHR$(&HF6)                 'XOR SI,SIăASM = ASM + CHR$(&HB8) + MKI$(&HA000)               'MOV AX,A000ăASM = ASM + CHR$(&H8E) + CHR$(&HD8)                 'MOV DS,AX SCREENSEGă'COPY IT USING THE BLAZE OF MOVSDăASM = ASM + CHR$(&HF3) + CHR$(&H66) + CHR$(&HA5)    'REP MOVSD < 386ă'WE ARE DONE :RETURN TO QBASICăASM = ASM + CHR$(&H7)                               'POP ESăASM = ASM + CHR$(&H1F)                              'POP DSăASM = ASM + CHR$(&H5D)                              'POP BPăASM = ASM + CHR$(&HCA) + MKI$(2)                    'RETF 2ăget13$ = ASMăEND FUNCTIONăăDEFSNG AăSUB loadraw (filename$)ă'loads a 320 x (maxy+1) 16-bit color RGB-encoded .RAW fileă' and displays in in grayscaleăff% = FREEFILEăOPEN filename$ FOR BINARY AS #ff%ăIF LOF(1) = 0 THENă    SCREEN 0: WIDTH 80: CLSă    PRINT "**"; filename$; " doesn't exist.**"ă    CLOSE : KILL filename$: ENDăEND IFăăbuffer$ = STRING$(320 * 3, 64)ăDEF SEG = &HA000ăz% = 0ăFOR j% = 0 TO 99ă GET #ff%, , buffer$ă IF EOF(ff%) THEN ENDă FOR s% = 1 TO 959 STEP 3ă  r% = div3%(ASC(MID$(buffer$, s%, 1)))ă  g% = div3%(ASC(MID$(buffer$, s% + 1, 1)))ă  b% = div3%(ASC(MID$(buffer$, s% + 2, 1)))ă  POKE z%, r% + g% + b%ă  z% = z% + 1ă NEXTăNEXT j%ăDEF SEG = &HA000 + 2000 'segment changes 20/scanline * 100 scanlinesăz% = 0ăFOR j% = 0 TO 99ă GET #ff%, , buffer$ă IF EOF(ff%) THEN ENDă FOR s% = 1 TO 959 STEP 3ă  r% = div3%(ASC(MID$(buffer$, s%, 1)))ă  g% = div3%(ASC(MID$(buffer$, s% + 1, 1)))ă  b% = div3%(ASC(MID$(buffer$, s% + 2, 1)))ă  POKE z%, r% + g% + b%ă  z% = z% + 1ă NEXTăNEXT j%ăCLOSE #ff%ăEND SUBăăDEFINT A-ZăSUB loadraw2 (filename$)ă'RAW file fast loaderă'uses a 65280 byte bufferă'displays it in grayscaleăăDIM vscreen%(32640) '65280 bytes -> 21760 pixels -> 68 linesăputcpy$ = put13$ăMID$(putcpy$, 10, 2) = MKI$(&H1540) '=(68)*320\4ăăă'-----------------block 1----------------------ăhandle% = loadv(filename$)ăăCALL readv(handle%, vscreen%())ăăz% = 0ăs% = 0ăDEF SEG = VARSEG(vscreen%(0))ăWHILE s% < 32766ă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăăr% = div3%(PEEK(32766))ăg% = div3%(PEEK(32767))ăb% = div3%(PEEK(-32768))ăPOKE z%, r% + g% + b%ăăz% = z% + 1ăs% = -32767ăWHILE s% < -256ă  'slower way (uses smaller LUT)ă  ' r% = div3%(PEEK(s%))ă  ' g% = div3%(PEEK(s% + 1))ă  ' b% = div3%(PEEK(s% + 2))ă  ' POKE z%, r% + g% + b%ă  'faster wayă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăDEF SEG = VARSEG(putcpy$)ăCALL ABSOLUTE(vscreen%(), SADD(putcpy$))ăăă'-----------------block 2----------------------ăCALL readv(handle%, vscreen%())ăăz% = 0ăs% = 0ăDEF SEG = VARSEG(vscreen%(0))ăWHILE s% < 32766ă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăă  ă ăPOKE z%, div3%((PEEK(32766)) + (PEEK(32767)) + (PEEK(-32768)))ăăz% = z% + 1ăs% = -32767ăWHILE s% < -256ă  'covert 16-bit pixel to 8-bit greyscaleă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăăăăMID$(putcpy$, 15, 2) = MKI$(&HA000 + 20 * 68)ăDEF SEG = VARSEG(putcpy$)ăCALL ABSOLUTE(vscreen%(), SADD(putcpy$))ăă'-----------------block 3----------------------ăCALL readv(handle%, vscreen%())ăăz% = 0ăs% = 0ăDEF SEG = VARSEG(vscreen%(0))ăWHILE s% < 32766ă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăăr% = div3%(PEEK(32766))ăg% = div3%(PEEK(32767))ăb% = div3%(PEEK(-32768))ăPOKE z%, r% + g% + b%ăăz% = z% + 1ăs% = -32767ămm% = -256 - 5 * 320 * 3ăWHILE s% < mm%ă  POKE z%, div3%(PEEK(s%) + PEEK(s% + 1) + PEEK(s% + 1))ă  s% = s% + 3ă  z% = z% + 1ăWENDăă'modify our asm code so it blits the remaining part of the bufferăMID$(putcpy$, 10, 2) = MKI$(&H13B0) '=(68-5)*320\4ăMID$(putcpy$, 15, 2) = MKI$(&HA000 + 20 * 68 * 2)ăDEF SEG = VARSEG(putcpy$)ăCALL ABSOLUTE(vscreen%(), SADD(putcpy$))ăăăCALL closev(handle%)ă'SCREEN 0: WIDTH 80, 50ă'FOR i = 1 TO 28ă'PRINT i; HEX$(ASC(MID$(putcpy$, i, 1)))ă'NEXTăERASE vscreen%ăEND SUBăăFUNCTION loadv (filename$)ăf$ = filename$ + CHR$(0) 'convert to ASCIIZăă'open fileăregs.ax = &H3D00ăregs.ds = VARSEG(f$)  ' segment of filenameăregs.dx = SADD(f$)    ' offset of filenameăINTERRUPTX &H21, regs, regs  ' DOS syscallăhandle% = regs.ax            ' save filehandleăIF regs.flags AND 1 THENă    SELECT CASE handle%ă	   CASE 1ă		 PRINT "Invalid function."ă	   CASE 2ă		 PRINT "File not found."ă	   CASE 3ă		  PRINT "Path not found."ă	   CASE 4ă		  PRINT "No handles available."ă	   CASE 5ă		  PRINT "Access denied."ă	   CASE &HCă		  PRINT "Invalid access code."ă    END SELECTă    ENDăEND IFăloadv% = handle%ăăăEND FUNCTIONăăSUB precalcăFOR i = 0 TO 767ă    div3(i) = i \ 3ăNEXT iăFOR i = -105 TO 255ă    div16(i) = i \ 16ăNEXT iăFOR i = 0 TO 99ă    ytab(i) = i * 320ăNEXT iăăFOR i = -105 TO 371ă    IF i < 0 THENă	   clip(i) = 0ă    ELSEIF i > 255 THENă	   clip(i) = 255ă    ELSE clip(i) = iă    END IFăNEXT iăEND SUBăăDEFSNG B-ZăDEFSTR AăFUNCTION put13$ă' by rick elbersă'-------------------------------------------------------------------ă'This function puts a QB array to screen 13. 386 + routineă'STACKPASSING: ARRAY()ă'IN          : ARRAY() FILLEDă'OUT         : SCREEN 13 FILLEDă'-------------------------------------------------------------------ă'SET UP STACKFRAMEăASM = ASM + CHR$(&H55)                              'PUSH BPăASM = ASM + CHR$(&H89) + CHR$(&HE5)                 'MOV BP,SPăASM = ASM + CHR$(&H1E)                              'PUSH DSăASM = ASM + CHR$(&H6)                               'PUSH ESă'GET POINTER TO ARRAY FROM STACKăASM = ASM + CHR$(&H8B) + CHR$(&H5E) + CHR$(&H6)     'MOV BX,[BP+06]>ARRAY()ă'SET UP CX TO 64000/4, ES[DI] TO ARRAY, DS[SI] TO A000:0ăASM = ASM + CHR$(&HB9) + CHR$(&H80) + CHR$(&H3E)    'MOV CX,3E80hăASM = ASM + CHR$(&H31) + CHR$(&HFF)                 'XOR DI,DIăASM = ASM + CHR$(&HB8) + MKI$(&HA000)               'MOV AX,A000ăASM = ASM + CHR$(&H8E) + CHR$(&HC0)                 'MOV ES,AX SCREENSEGăASM = ASM + CHR$(&HC5) + CHR$(&H37)                 'LDS SI,[BX] ARRAY()ă'COPY IT USING THE BLAZE OF MOVSDăASM = ASM + CHR$(&HF3) + CHR$(&H66) + CHR$(&HA5)    'REP MOVSD < 386ă'WE ARE DONE :RETURN TO QBASICăASM = ASM + CHR$(&H7)                               'POP ESăASM = ASM + CHR$(&H1F)                              'POP DSăASM = ASM + CHR$(&H5D)                              'POP BPăASM = ASM + CHR$(&HCA) + MKI$(2)                    'RETF 2ăput13$ = ASMăEND FUNCTIONăăDEFINT A-ZăSUB readv (handle%, array%())ă'Read and display the file (vertically interlaced)ă    regs.ax = &H3F00ă    regs.bx = handle%ă    regs.cx = -256   ' number of bytes to copy = 65280 (68 complete scanlines)ă    regs.ds = VARSEG(array%(0))  ' dest=screen 13's segmentă    regs.dx = VARPTR(array%(0))       '      at offset 0ă    INTERRUPTX &H21, regs, regsă ăăEND SUBăăSUB setgrayscaleăOUT &H3C8, 0ăFOR i% = 0 TO 255ă OUT &H3C9, i% \ 4ă OUT &H3C9, i% \ 4ă OUT &H3C9, i% \ 4ăNEXT i%ăăEND SUBăăSUB setpal16ăFOR i% = 0 TO 15ă    OUT &H3C8, i%ă OUT &H3C9, i% * 4ă OUT &H3C9, i% * 4ă OUT &H3C9, i% * 4ăNEXT i%ă'red to show wrong parts of palette are being usedăFOR i% = 16 TO 255ă    OUT &H3C8, i%ă OUT &H3C9, 255ă OUT &H3C9, 0ă OUT &H3C9, 0ăNEXT i%ăEND SUBăCaleb Cassel                   TADA SCREEN SAVER              ryuse@tcgcs.com                06-03-00 (01:43)       QB, QBasic, PDS        70   1385     TADA.BAS    'ă'       Here's a nice screensaver/eye entertainer that I wrote.  Feel free toă'look at my source code and modify the program as you wish (but I think it'să'fine the way it is :)ă'ă'                               Caleb Casselă'                              ryuse@tcgcs.comăSCREEN 7, , 1, 0ăx1% = 130ăy1% = 110ăx2% = 190ăy2% = 110ăOUT &H3C8, 7ăOUT &H3C9, 0ăOUT &H3C9, 0ăOUT &H3C9, 0ăDOăFOR i% = 5 TO 250 STEP 10ăCIRCLE (x1%, y1%), i%, 7ăCIRCLE (x2%, y2%), i%, 7ăNEXT i%ă20 PCOPY 1, 0ăWAIT &H3DA, 8ăIF dir = 0 THENăx1% = x1% - 2ăx2% = x2% + 2ăy1% = y1% - n%ăy2% = y2% + n%ăIF x1% = 120 THEN dir = 1ăGOTO 10ăEND IFăIF dir = 1 THENăx1% = x1% + 2ăx2% = x2% - 2ăy1% = y1% + n%ăy2% = y2% - n%ăIF x1% = 140 THEN dir = 0ăEND IFăIF l% = 0 THENăn% = n% + 1ăIF n% = 5 THEN l% = 1ăEND IFăIF l% = 1 THENăn% = n% - 1ăIF n% = 0 THEN l% = 0ăEND IFă10 CLSăIF r% = tr% AND g% = tg% AND b% = tb% THENăFOR a% = 1 TO INT(RND * 100)ă    tr% = INT(RND * 63)ă    tg% = INT(RND * 63)ă    tb% = INT(RND * 63)ăNEXT a%ăEND IFăIF r% < tr% THEN r% = r% + 1ăIF r% > tr% THEN r% = r% - 1ăIF g% < tg% THEN g% = g% + 1ăIF g% > tg% THEN g% = g% - 1ăIF b% < tb% THEN b% = b% + 1ăIF b% > tb% THEN b% = b% - 1ăOUT &H3C8, 0ăOUT &H3C9, br%ăOUT &H3C9, bg%ăOUT &H3C9, bb%ăOUT &H3C8, 7ăOUT &H3C9, r%ăOUT &H3C9, g%ăOUT &H3C9, b%ăLOOP UNTIL LEN(INKEY$)ăSYSTEMăCaleb Cassel                   QBASIC SNOW V1.22              ryuse@tcgcs.com                06-03-00 (01:43)       QB, QBasic, PDS        131  3529     SNOW.BAS    'Qbasic Snowă'Version 1.22ă'(c) 1997 Caleb Casselă'ă'       This program is freeware and does not cost anything to own.  You cană'change anything you like as long as it is distributed in its original formă'only.ă'ă'       I apologize for not writing this so it's more self explanable but Iă'hate to go through my programs and add comments. :)  You'll have to figureă'out how it works if you really want to know.ă'ă'                        Caleb Casselă'                      ryuse@tcgcs.comă'ă'Updates:        Version 1.20ă'                   * Reduced the flicker that is caused by addingă'                     too many flakes.  This has allowed me to addă'                     many more.ă'ă'                   * Added a subroutine which helps add realism toă'                     the look of how it piles.ă'ă'                Version 1.21ă'                   * Small bug fixes and revisions.ă'ă'                Version 1.22ă'                   * Slightly smoother animation.ă'                   * Random amounts of flakes.ăăDEFINT A-ZăDECLARE SUB manage ()ăDECLARE SUB snow ()ăCOMMON SHARED n%ăSCREEN 7, , 1, 0ăRANDOMIZE TIMERăn% = INT(RND * 4) + 1ăSELECT CASE n%ăCASE 1ăn% = 75ăCASE 2ăn% = 90ăCASE 3ăn% = 100ăCASE 4ăn% = 110ăEND SELECTăDIM SHARED snowx(n%) AS INTEGERăDIM SHARED snowy(n%) AS INTEGERăDIM SHARED Speed(n%) AS INTEGERăDIM SHARED oldsnowx(n%) AS INTEGERăDIM SHARED oldsnowy(n%) AS INTEGERăDIM SHARED colors(n%) AS INTEGERăDIM SHARED stack(320) AS INTEGERăFOR I = 2 TO 319ă   stack(I) = 199ăNEXT IăFOR I = 1 TO n%ă6  snowx(I) = (RND * 318) + 2ă   IF snowx(I) = 320 THEN GOTO 6ă   snowy(I) = (RND * 200) + 1ă   Speed(I) = ((RND * 3) + 1)ă   colors(I) = (RND * 15) + 1ă   IF colors(I) = 15 THENă   CIRCLE (snowx(I), snowy(I)), 1, 3ă   ELSE CIRCLE (snowx(I), snowy(I)), 1, 7ă   END IFăNEXT IăPCOPY 1, 0ă30 DOăsnowămanageăWAIT &H3DA, 8ăPCOPY 1, 0ăLOOP UNTIL LEN(INKEY$)ăSYSTEMăăSUB manageă   FOR e = 2 TO 319ă      IF stack(e - 1) - 2 = stack(e) THENă         CIRCLE (e, stack(e)), 1, 0ă         stack(e) = stack(e) + 1ă         CIRCLE ((e - 1), stack((e - 1)) + 1), 1, 7ă         stack((e - 1)) = stack((e - 1)) - 1ă      END IFă   NEXT eă   FOR e = 2 TO 318ă      IF stack(e + 1) - 2 = stack(e) THENă         CIRCLE (e, stack(e)), 1, 0ă         stack(e) = stack(e) + 1ă         CIRCLE ((e + 1), stack((e + 1)) + 1), 1, 7ă         stack((e + 1)) = stack((e + 1)) - 1ă      END IFă   NEXT eăEND SUBăăSUB snowăFOR I = 1 TO n%ă   IF snowy(I) < stack(snowx(I)) THENă      oldsnowx(I) = snowx(I)ă      oldsnowy(I) = snowy(I)ă      snowy(I) = snowy(I) + Speed(I)ă      CIRCLE (oldsnowx(I), oldsnowy(I)), 1, 0ă      IF colors(I) = 15 THENă      CIRCLE (snowx(I), snowy(I)), 1, 3ă      ELSEă      CIRCLE (snowx(I), snowy(I)), 1, 7ă      END IFă   ELSEă      IF stack(snowx(I)) = 80 THENă         FOR e = 2 TO 319ă            stack(e) = 199ă         NEXT eă         CLSă      END IFă      IF colors(I) = 15 THEN CIRCLE (snowx(I), stack(snowx(I))), 1, 3ă      IF colors(I) < 15 THEN CIRCLE (snowx(I), stack(snowx(I))), 1, 7ă      stack(snowx(I)) = stack(snowx(I)) - 1ă5     snowx(I) = (RND * 318) + 2ă      IF snowx(I) = 320 THEN GOTO 5ă      Speed(I) = ((RND * 3) + 1)ă      snowy(I) = (0 + Speed(I)) - 1ă      colors(I) = (RND * 15) + 1ă      IF colors(I) = 15 THENă      CIRCLE (snowx(I), snowy(I)), 1, 3ă      ELSEă      CIRCLE (snowx(I), snowy(I)), 1, 7ă      END IFă   END IFăNEXT IăEND SUBăHomer Richardson               VGA PALETTE                    hcrichardson@earthlink.net     06-13-00 (10:56)       QB, QBasic, PDS        522  23297    VGAPALET.BAS   DEFINT A-ZăREM   -------------------- Look at SUB README ------------------------ăREM From 99 colorsăCOMMON SHARED milo, red, green, blue, magenta, cyan, yellow, blackăCOMMON SHARED brass, gold, copper, pine, pink.hot, sky, plum, whiteăREM From 64 colorsăCOMMON SHARED wine, pumpkin, sand, midnight, sunset, lily, orangeăCOMMON SHARED cherry, pea, lemon, mint, daisy, BrickăDECLARE SUB delay (n!, k)ăDECLARE SUB MakePalet64 ()ăDECLARE SUB viewpalet64 ()ăDECLARE SUB makepalet99 ()ăDECLARE SUB palet99 ()ăDECLARE SUB ViewPalet99 ()ăDECLARE SUB palet64 ()ăDECLARE SUB colours64 ()ăDECLARE SUB colours99 ()ăDIM SHARED HTML$(99), palnum#(99), ShortName$(99), LongName$(64)ăDIM SHARED Colour$(15), Palet(15)ă   REM GOTO Quicklook99ă   REM GOTO Quicklook64ăSCREEN 12ă colours99ă  palet99ă   ViewPalet99ă   LOCATE 2, 40ă    PRINT "This is screen 12"ă     LOCATE 14, 40ă      PRINT "Use colors like this"ă       LOCATE , 30ă        PRINT "LINE (200, 50)-(555, 200), white, B"ă        LOCATE , 30ă         PRINT "PAINT (201, 51), pink.hot, white"ă        LOCATE , 30ă    PRINT "LINE (250, 70)-(500, 170), green, BF"ă    PRINTă    LOCATE , 30: COLOR yellowă    PRINT "Details in SUB README"ăă    LINE (200, 50)-(550, 200), white, Bă    PAINT (201, 51), pink.hot, whiteă    LINE (250, 70)-(500, 170), green, BFă   PRINT : PRINTă   COLOR whiteă   LOCATE 24, 3: PRINT "Any key"ă   delay .3, năBlink:ă      COLOR whiteă      LOCATE 23, 30ă      PRINT "Blinking text is easy"ă       delay .3, nă      IF n > 0 THEN GOTO dună      COLOR miloă      LOCATE 23, 30ă      PRINT "Blinking text is easy"ă       delay .3, nă      IF n > 0 THEN GOTO dună      GOTO Blinkădun:ă SCREEN 13ă  palet99ă   ViewPalet99ă   PRINTă    PRINT "This is Screen 13"ă    PRINT "Any key"ăa$ = INPUT$(1)ă SCREEN 9ă  WIDTH , 43ă   colours64ă    palet64ă     viewpalet64ă     PRINTă      PRINT " This is Screen 9"ă     LOCATE 23, 2ă      PRINT "Any key"ă      LOCATE 23, 30ă      PALETTE 7, 63: COLOR 7ă      PRINT "Another way to blink text"ă      LOCATE , 30ă      PRINT "Change the palette. This"ă      LOCATE , 30ă      PRINT "may be useful for other"ă      LOCATE , 30ă      PRINT "special effects"ăBlinkagain:ă       delay .5, kă      IF k > 0 THEN GOTO alldună        PALETTE 7, 12ă      LOCATE 23, 30ă      delay .5, kă      IF k > 0 THEN GOTO alldună      PALETTE 7, 63ă      GOTO Blinkagainăalldun:ă SCREEN 0ăWIDTH , 25ă colours64ă  palet64ă   viewpalet64ă   PRINTă    PRINT "  This is Screen 0"ăENDăREM  -------- Cycles through all 99 colors using screen 12 -----------------ăQuicklook99:ăSCREEN 12ă colours99ă  palet99ă  CLSă  FOR i = 1 TO 99ă  PALETTE 0, palnum#(i)ă  PRINT "  "; i, HTML$(i); TAB(40); ShortName$(i)ă  a$ = INPUT$(1)ă  NEXT iă  ENDăREM  -------- Cycles through all 64 colors using screen 9 -----------------ăQuicklook64:ăSCREEN 9ă colours64ă  palet64ă  CLSă  FOR i = 0 TO 63ă  PALETTE 0, iă  PRINT "  "; i, LongName$(i); TAB(40); ShortName$(i)ă  a$ = INPUT$(1)ă  NEXT iă   ENDăăSUB colours64ăLongName$(0) = "black": ShortName$(0) = "black"ăLongName$(8) = "blue.midnight": ShortName$(8) = "midnight"ăLongName$(17) = "blue.beryl": ShortName$(17) = "beryl"ăLongName$(49) = "blue.bird": ShortName$(49) = "bird"ăLongName$(33) = "blue.steel": ShortName$(33) = "steel"ăLongName$(1) = "blue": ShortName$(1) = "blue"ăLongName$(41) = "blue.peacock": ShortName$(41) = "peacock"ăLongName$(9) = "blue.lily": ShortName$(9) = "lily"ăLongName$(25) = "blue.azure": ShortName$(25) = "azure"ăLongName$(57) = "blue.berry": ShortName$(57) = "berry"ăLongName$(11) = "blue.sky": ShortName$(11) = "sky"ăLongName$(43) = "blue.teal": ShortName$(43) = "teal"ăLongName$(59) = "blue.pansy": ShortName$(59) = "pansy"ăLongName$(31) = "blue.chrome": ShortName$(31) = "chrome"ăLongName$(27) = "blue.water": ShortName$(27) = "egg"ăLongName$(15) = "blue.icecube": ShortName$(15) = "icecube"ăLongName$(24) = "gray.khaki": ShortName$(24) = "khaki"ăLongName$(3) = "gray.cyan": ShortName$(3) = "cyan"ăLongName$(35) = "gray.ash": ShortName$(35) = "ash"ăLongName$(56) = "gray.smoke": ShortName$(56) = "smoke"ăLongName$(7) = "gray": ShortName$(7) = "gray"ăLongName$(42) = "green.celery": ShortName$(42) = "celery"ăLongName$(10) = "green.pine": ShortName$(10) = "pine"ăLongName$(2) = "green": ShortName$(2) = "green"ăLongName$(34) = "green.Leaf": ShortName$(34) = "Leaf"ăLongName$(16) = "green.kelly": ShortName$(16) = "kelly"ăLongName$(48) = "green.olive": ShortName$(48) = "olive"ăLongName$(18) = "green.pea": ShortName$(18) = "pea"ăLongName$(26) = "green.moss": ShortName$(26) = "moss"ăLongName$(58) = "green.lime": ShortName$(58) = "lime"ăLongName$(22) = "green.autumn": ShortName$(22) = "autumn"ăLongName$(50) = "green.neon": ShortName$(50) = "neon"ăLongName$(19) = "green.mint": ShortName$(19) = "mint"ăLongName$(51) = "green.aqua": ShortName$(51) = "aqua"ăLongName$(23) = "green.squash": ShortName$(23) = "squash"ăLongName$(13) = "lilac": ShortName$(13) = "lilac"ăLongName$(29) = "grape": ShortName$(29) = "grape"ăLongName$(45) = "purple": ShortName$(45) = "purple"ăLongName$(47) = "bubble.gum": ShortName$(47) = "gum"ăLongName$(61) = "purple.sunset": ShortName$(61) = "sunset"ăLongName$(5) = "magenta": ShortName$(5) = "magenta"ăLongName$(40) = "maroon": ShortName$(40) = "maroon"ăLongName$(21) = "tulip": ShortName$(21) = "tulip"ăLongName$(52) = "orange": ShortName$(52) = "orange"ăLongName$(60) = "peach": ShortName$(60) = "peach"ăLongName$(39) = "pink.flesh": ShortName$(39) = "flesh"ăLongName$(53) = "pink": ShortName$(53) = "pink"ăLongName$(37) = "fuchsia": ShortName$(37) = "fuchsia"ăLongName$(12) = "red.wine": ShortName$(12) = "wine"ăLongName$(28) = "red.Brick": ShortName$(28) = "Brick"ăLongName$(20) = "brown": ShortName$(20) = "brown"ăLongName$(32) = "red.rust": ShortName$(32) = "rust"ăLongName$(4) = "Red": ShortName$(4) = "Red"ăLongName$(36) = "red.cherry": ShortName$(36) = "cherry"ăLongName$(44) = "red.tomato": ShortName$(44) = "tomato"ăLongName$(55) = "manilla": ShortName$(55) = "manilla"ăLongName$(38) = "gold": ShortName$(38) = "gold"ăLongName$(46) = "sand": ShortName$(46) = "sand"ăLongName$(62) = "yellow": ShortName$(62) = "yellow"ăLongName$(54) = "lemon": ShortName$(54) = "lemon"ăLongName$(6) = "banana": ShortName$(6) = "banana"ăLongName$(30) = "yellow.daisy": ShortName$(30) = "daisy"ăLongName$(14) = "yellow.pumpkin": ShortName$(14) = "pumpkin"ăLongName$(63) = "white": ShortName$(63) = "white"ăEND SUBăăDEFSNG QăSUB colours99ăHTML$(1) = "Red": palnum#(1) = 63: ShortName$(1) = "red"ăHTML$(2) = "Green": palnum#(2) = 16128: ShortName$(2) = "green"ăHTML$(3) = "Blue": palnum#(3) = 4128768: ShortName$(3) = "blue"ăHTML$(4) = "Magenta": palnum#(4) = 4128831: ShortName$(4) = "magenta"ăHTML$(5) = "Cyan": palnum#(5) = 4144896: ShortName$(5) = "cyan"ăHTML$(6) = "Yellow": palnum#(6) = 16191: ShortName$(6) = "yellow"ăHTML$(7) = "White": palnum#(7) = 4144959: ShortName$(7) = "white"ăHTML$(8) = "Black": palnum#(8) = 0: ShortName$(8) = "black"ăHTML$(9) = "Aquamarine": palnum#(9) = 2373148: ShortName$(9) = "aqua"ăHTML$(10) = "Baker's Chocolate": palnum#(10) = 330775: ShortName$(10) = "cocoa"ăHTML$(11) = "Blue Violet": palnum#(11) = 2561831: ShortName$(11) = "violet"ăHTML$(12) = "Brass": palnum#(12) = 1059117: ShortName$(12) = "brass"ăHTML$(13) = "Bright Gold": palnum#(13) = 407094: ShortName$(13) = "gold"ăHTML$(14) = "Brown": palnum#(14) = 657961: ShortName$(14) = "brown"ăHTML$(15) = "Bronze": palnum#(15) = 1318435: ShortName$(15) = "bronze"ăHTML$(16) = "Bronze": palnum#(16) = 991017: ShortName$(16) = "bronze.1"ăHTML$(17) = "Cadet Blue": palnum#(17) = 2565911: ShortName$(17) = "cadet"ăHTML$(18) = "Cool Copper": palnum#(18) = 401718: ShortName$(18) = "penny"ăHTML$(19) = "Copper": palnum#(19) = 793646: ShortName$(19) = "copper"ăHTML$(20) = "Coral": palnum#(20) = 7999: ShortName$(20) = "coral"ăHTML$(21) = "Corn Flower Blue": palnum#(21) = 1773584: ShortName$(21) = "grape"ăHTML$(22) = "Dark Brown": palnum#(22) = 790551: ShortName$(22) = "toast"ăHTML$(23) = "Dark Green": palnum#(23) = 725771: ShortName$(23) = "pea"ăHTML$(24) = "Dark Green Copper": palnum#(24) = 1776914: ShortName$(24) = "fern"ăHTML$(25) = "Dark Olive Green": palnum#(25) = 725779: ShortName$(25) = "olive"ăHTML$(26) = "Dark Orchid": palnum#(26) = 3345446: ShortName$(26) = "orchid.1"ăHTML$(27) = "Dark Purple": palnum#(27) = 1967905: ShortName$(27) = "purple"ăHTML$(28) = "Dark Slate Blue": palnum#(28) = 2295834: ShortName$(28) = " "ăHTML$(29) = "Dark Tan": palnum#(29) = 1251877: ShortName$(29) = "tann.1"ăHTML$(30) = "Dark Turquoise": palnum#(30) = 3548188: ShortName$(30) = " "ăHTML$(31) = "Dark Wood": palnum#(31) = 1054497: ShortName$(31) = "wood"ăHTML$(32) = "Dusty Rose": palnum#(32) = 1579041: ShortName$(32) = "rose"ăHTML$(33) = "Feldspar": palnum#(33) = 1909812: ShortName$(33) = "rock"ăHTML$(34) = "Firebrick": palnum#(34) = 526371: ShortName$(34) = "brick"ăHTML$(35) = "Forest Green": palnum#(35) = 533256: ShortName$(35) = "forest"ăHTML$(36) = "Gold": palnum#(36) = 794419: ShortName$(36) = "gold"ăHTML$(37) = "Goldenrod": palnum#(37) = 1848886: ShortName$(37) = " "ăHTML$(38) = "Green Copper": palnum#(38) = 1908500: ShortName$(38) = " "ăHTML$(39) = "Green Yellow": palnum#(39) = 1848868: ShortName$(39) = " "ăHTML$(40) = "Hunter Green": palnum#(40) = 530184: ShortName$(40) = " "ăHTML$(41) = "Indian Red": palnum#(41) = 723731: ShortName$(41) = "indian"ăHTML$(42) = "Khaki": palnum#(42) = 1517351: ShortName$(42) = "khaki"ăHTML$(43) = "Light Blue": palnum#(43) = 3552816: ShortName$(43) = " "ăHTML$(44) = "Light Steel Blue": palnum#(44) = 3089187: ShortName$(44) = " "ăHTML$(45) = "Light Wood": palnum#(45) = 2699322: ShortName$(45) = " "ăHTML$(46) = "Lime Green": palnum#(46) = 799500: ShortName$(46) = "lime"ăHTML$(47) = "Mandarian Orange": palnum#(47) = 794169: ShortName$(47) = " "ăHTML$(48) = "Maroon": palnum#(48) = 1706019: ShortName$(48) = "maroon"ăHTML$(49) = "Medium Aquamarine": palnum#(49) = 2503436: ShortName$(49) = " "ăHTML$(50) = "Medium Blue": palnum#(50) = 3345420: ShortName$(50) = " "ăHTML$(51) = "Medium Forest Green": palnum#(51) = 533274: ShortName$(51) = "pine"ăHTML$(52) = "Medium Goldenrod": palnum#(52) = 2832954: ShortName$(52) = " "ăHTML$(53) = "Medium Orchid": palnum#(53) = 3546148: ShortName$(53) = " "ăHTML$(54) = "Medium Sea Green": palnum#(54) = 1055504: ShortName$(54) = " "ăHTML$(55) = "Medium Slate Blue": palnum#(55) = 4128799: ShortName$(55) = "slate"ăHTML$(56) = "Medium Spring Green": palnum#(56) = 16159: ShortName$(56) = "spring"ăHTML$(57) = "Medium Turquoise": palnum#(57) = 3552796: ShortName$(57) = " "ăHTML$(58) = "Medium Violet Red": palnum#(58) = 2366518: ShortName$(58) = " "ăHTML$(59) = "Medium Wood": palnum#(59) = 1646633: ShortName$(59) = " "ăHTML$(60) = "Midnight Blue": palnum#(60) = 1248011: ShortName$(60) = "midnight"ăHTML$(61) = "Navy Blue": palnum#(61) = 2295816: ShortName$(61) = "navy"ăHTML$(62) = "Neon Blue": palnum#(62) = 4133651: ShortName$(62) = " "ăHTML$(63) = "Neon Pink": palnum#(63) = 3218239: ShortName$(63) = "pink.hot"ăHTML$(64) = "New Midnight Blue": palnum#(64) = 2555904: ShortName$(64) = " "ăHTML$(65) = "New Tan": palnum#(65) = 2568506: ShortName$(65) = "tan.new"ăHTML$(66) = "Old Gold": palnum#(66) = 929075: ShortName$(66) = "gold.old"ăHTML$(67) = "Orange": palnum#(67) = 7999: ShortName$(67) = "orange"ăHTML$(68) = "Orange Red": palnum#(68) = 2367: ShortName$(68) = " "ăHTML$(69) = "Orchid": palnum#(69) = 3546166: ShortName$(69) = " "ăHTML$(70) = "Pale Green": palnum#(70) = 2305827: ShortName$(70) = "pea"ăHTML$(71) = "Pink": palnum#(71) = 2302767: ShortName$(71) = "pink"ăHTML$(72) = "Plum": palnum#(72) = 3812154: ShortName$(72) = "plum"ăHTML$(73) = "Quartz": palnum#(73) = 3946038: ShortName$(73) = "quartz"ăHTML$(74) = "Rich Blue": palnum#(74) = 2758166: ShortName$(74) = " "ăHTML$(75) = "Salmon": palnum#(75) = 1052699: ShortName$(75) = "salmon"ăHTML$(76) = "Scarlet": palnum#(76) = 328995: ShortName$(76) = "scarlet"ăHTML$(77) = "Sea Green": palnum#(77) = 1712904: ShortName$(77) = " "ăHTML$(78) = "Sweet Milo": palnum#(78) = 593946: ShortName$(78) = "milo"ăHTML$(79) = "Sienna": palnum#(79) = 530979: ShortName$(79) = "sienna"ăHTML$(80) = "Silver": palnum#(80) = 4078137: ShortName$(80) = "silver"ăHTML$(81) = "Sky Blue": palnum#(81) = 3352076: ShortName$(81) = "sky"ăHTML$(82) = "Slate Blue": palnum#(82) = 4136704: ShortName$(82) = " "ăHTML$(83) = "Spicy Pink": palnum#(83) = 2819903: ShortName$(83) = " "ăHTML$(84) = "Spring Green": palnum#(84) = 2047744: ShortName$(84) = " "ăHTML$(85) = "Steel Blue": palnum#(85) = 2300424: ShortName$(85) = " "ăHTML$(86) = "Summer Sky": palnum#(86) = 3615758: ShortName$(86) = " "ăHTML$(87) = "Tan": palnum#(87) = 1844278: ShortName$(87) = "tann"ăHTML$(88) = "Thistle": palnum#(88) = 3551030: ShortName$(88) = "thistle"ăHTML$(89) = "Turquoise": palnum#(89) = 3815979: ShortName$(89) = " "ăHTML$(90) = "Very Dark Brown": palnum#(90) = 790551: ShortName$(90) = "umber"ăHTML$(91) = "Violet": palnum#(91) = 1248019: ShortName$(91) = " "ăHTML$(92) = "Violet Red": palnum#(92) = 2493491: ShortName$(92) = " "ăHTML$(93) = "Wheat": palnum#(93) = 3094070: ShortName$(93) = "wheat"ăHTML$(94) = "Yellow Green": palnum#(94) = 799526: ShortName$(94) = " "ăHTML$(95) = "Dark Slate Grey": palnum#(95) = 1250059: ShortName$(95) = "smoke"ăHTML$(96) = "Dim Grey": palnum#(96) = 1381653: ShortName$(96) = " "ăHTML$(97) = "Very Light Grey": palnum#(97) = 3355443: ShortName$(97) = " "ăHTML$(98) = "Grey": palnum#(98) = 3158064: ShortName$(98) = "gray"ăHTML$(99) = "Light Grey": palnum#(99) = 2763306: ShortName$(99) = " "ăEND SUBăăDEFINT QăSUB delay (n!, k)ăt! = TIMER + n!ăDOă    IF INKEY$ <> "" THENă      k = 1ă      EXIT SUBă    END IFă LOOP UNTIL TIMER > t!ăEND SUBăăSUB MakePalet64ăcolours64ăpalet64ăOPEN "palet64.bas" FOR OUTPUT AS #2ăPRINT #2, "REM        Created on "; DATE$; " at "; TIME$ă   FOR i = 0 TO 15ăktr = Palet(i)ăă     Colour$(i) = ShortName$(ktr)ă    PRINT #2, "Palet("; i; ")="; Palet(i);ă    PRINT #2, ":"; Colour$(i); "="; i; "  ";ă    PRINT #2, ":Colour$("; i; ")="; CHR$(34); ShortName$(ktr)ă    NEXT iă  PRINT #2, "for i=0 to 15:palette i,Palet(I):next i"ă    PRINT #2, "' Copy these two lines to the start of your program. Remove REM of course."ă    PRINT #2, "REM COMMON SHARED ";ă    FOR i = 0 TO 6: PRINT #2, Colour$(i); ",";ă    NEXT i: PRINT #2, Colour$(7)ă    PRINT #2, "REM COMMON SHARED ";ă    FOR i = 8 TO 14: PRINT #2, Colour$(i); ",";ă    NEXT i: PRINT #2, Colour$(15)ă    CLOSEăPRINT "PALET64.BAS has been written to disk."ăEND SUBăăSUB makepalet99ăcolours99ăOPEN "palet99.bas" FOR OUTPUT AS #2ăPRINT #2, "REM         Created on "; DATE$; " at "; TIME$ă'==========================================================================ăFOR i = 0 TO 15ăPRINT #2, "Palet("; i; ")="; Palet(i)ăNEXT iăPRINT #2,ă    ăFOR i = 0 TO 15: ktr = Palet(i)ă  PRINT #2, "PALETTE("; i; ") , palnum#(Palet("; i; "))";ă    PRINT #2, ": Colour$("; i; ")="; CHR$(34); ShortName$(ktr); CHR$(34); ": ";ă    PRINT #2, "  "; ShortName$(ktr); " = "; iă     NEXT iă PRINT #2,ăPRINT #2, "' Copy these two lines to the start of your program. Remove REM of course."ăPRINT #2, "REM COMMON SHARED ";ă FOR i = 0 TO 6: PRINT #2, ShortName$(Palet(i)); ",";ă    NEXT i: PRINT #2, ShortName$(Palet(7))ăă    PRINT #2, "REM COMMON SHARED ";ă    FOR i = 8 TO 14: PRINT #2, ShortName$(Palet(i)); ",";ă     NEXT i: PRINT #2, ShortName$(Palet(15))ăCLOSEăPRINT "PALET99.BAS has been written to disk."ăEND SUBăăSUB palet64ăREM        Created on 06-09-2000 at 12:10:53ăPalet(0) = 12: wine = 0: Colour$(0) = "wine"ăPalet(1) = 4: red = 1: Colour$(1) = "Red"ăPalet(2) = 14: pumpkin = 2: Colour$(2) = "pumpkin"ăPalet(3) = 46: sand = 3: Colour$(3) = "sand"ăPalet(4) = 8: midnight = 4: Colour$(4) = "midnight"ăPalet(5) = 61: sunset = 5: Colour$(5) = "sunset"ăPalet(6) = 9: lily = 6: Colour$(6) = "lily"ăPalet(7) = 52: orange = 7: Colour$(7) = "orange"ăPalet(8) = 38: gold = 8: Colour$(8) = "gold"ăPalet(9) = 36: cherry = 9: Colour$(9) = "cherry"ăPalet(10) = 18: pea = 10: Colour$(10) = "pea"ăPalet(11) = 54: lemon = 11: Colour$(11) = "lemon"ăPalet(12) = 19: mint = 12: Colour$(12) = "mint"ăPalet(13) = 30: daisy = 13: Colour$(13) = "daisy"ăPalet(14) = 28: Brick = 14: Colour$(14) = "Brick"ăPalet(15) = 63: white = 15: Colour$(15) = "white"ăFOR i = 0 TO 15: PALETTE i, Palet(i): NEXT iă' Copy these two lines to the start of your program. Remove REM of course.ăREM COMMON SHARED wine,Red,pumpkin,sand,midnight,sunset,lily,orangeăREM COMMON SHARED gold,cherry,pea,lemon,mint,daisy,Brick,whiteăEND SUBăăSUB palet99ăREM         Created on 06-09-2000 at 11:11:04ăPalet(0) = 78ăPalet(1) = 1ăPalet(2) = 2ăPalet(3) = 3ăPalet(4) = 4ăPalet(5) = 5ăPalet(6) = 6ăPalet(7) = 8ăPalet(8) = 12ăPalet(9) = 13ăPalet(10) = 19ăPalet(11) = 51ăPalet(12) = 63ăPalet(13) = 81ăPalet(14) = 72ăPalet(15) = 7ăăPALETTE (0), palnum#(Palet(0)): Colour$(0) = "milo":       milo = 0ăPALETTE (1), palnum#(Palet(1)): Colour$(1) = "red":       red = 1ăPALETTE (2), palnum#(Palet(2)): Colour$(2) = "green":       green = 2ăPALETTE (3), palnum#(Palet(3)): Colour$(3) = "blue":       blue = 3ăPALETTE (4), palnum#(Palet(4)): Colour$(4) = "magenta":       magenta = 4ăPALETTE (5), palnum#(Palet(5)): Colour$(5) = "cyan":       cyan = 5ăPALETTE (6), palnum#(Palet(6)): Colour$(6) = "yellow":       yellow = 6ăPALETTE (7), palnum#(Palet(7)): Colour$(7) = "black":       black = 7ăPALETTE (8), palnum#(Palet(8)): Colour$(8) = "brass":       brass = 8ăPALETTE (9), palnum#(Palet(9)): Colour$(9) = "gold":       gold = 9ăPALETTE (10), palnum#(Palet(10)): Colour$(10) = "copper":       copper = 10ăPALETTE (11), palnum#(Palet(11)): Colour$(11) = "pine":       pine = 11ăPALETTE (12), palnum#(Palet(12)): Colour$(12) = "pink.hot":       pink.hot = 12ăPALETTE (13), palnum#(Palet(13)): Colour$(13) = "sky":       sky = 13ăPALETTE (14), palnum#(Palet(14)): Colour$(14) = "plum":       plum = 14ăPALETTE (15), palnum#(Palet(15)): Colour$(15) = "white":       white = 15ăă' Copy these two lines to the start of your program. Remove REM of course.ăREM COMMON SHARED milo,red,green,blue,magenta,cyan,yellow,blackăREM COMMON SHARED brass,gold,copper,pine,pink.hot,sky,plum,whiteăEND SUBăăSUB ReadMeăREM  Every time I wanted to program using screen 12 or 13 I has to fireăREM  up a QB palette generation program or recycle colors from anotherăREM  program that were not exactly what I wanted. There are many goodăREM  palette generation programs, some better than others but they allăREM  require you to enter the red, green and blue values then keep tweakingăREM  until you get the color you want. For me this is for the birds. I couldăREM  never make a Gold color that looked correct.ăREM  There had to be a better way. This is my better way.ăăREM  ---------- 99 colors in screen 12 and screen 13 ----------------------ăREM  HTML has a very large selections of colors, 256 colors to be exact.ăREM  But who needs 256 colors? 99 colors are enough for me. I wanted to findăREM  a way of using these colors in QB. I found it and this is the result.ăăREM  The sub Palet99 loads the palette for screen 12 and screen 13ăREM  The sub Palet64 loads the palette for screen 0 and screen 9.ăREM  The Sub Colors64 has data for the 64 colors used in screens 0 and 9.ăREM  The Sub Colors99 has data for the 99 colors used in screens 12 and 13.ăREM  IT is based on a table fromăREM                http://www.webwheels.com/free/f082.htmăREM                There is a lot of color information hereăREM  This WEB page was converted to text format then edited with QB4.5ăREM  The HTML hex code was converted to decimal using HEXDEC.BAS fromăREM        http://www.basicguru.com/files/abc/abc9805/hexdec.basăREM        A very useful program.ăREM  If you decide to go this route download a page of HTML colors andăREM  try it, It's a little, well realy a lot of work.ăREM  NOTE: The HTML colors use 256 shades while basic uses 64 shades.ăREM  Some number crunching will be needed. This is not for beginners.ăREM  But what the heck. It's good practice in using QB.ăăREM  HTML$ is the colorname defined in HTML. It does not realyăREM  belong in an array It's put here for future use. It's used inăREM  QuickLook.ăREM  PalNum# is the palette color number.ăREM  ShortName$ is my own creation. Change it if you wish.ăREM  Using ShortName$ is an easy way to print or draw with colors.ăREM  It's easier for me to use   COLOR gold   instead of   COLOR 15ăREM  Not all HTML colors have short names, change or add to them asăREM  you wish. Just avoid duplicate names for the colors you use.ăREM  A note: the same color can be given to more than one palette. ThisăREM  may be useful in some games, also you can change color assignmentsăREM  as your program runs.ăREM  -----------64 colors in screen 0 and screen 9 ------------------------ăREM  QB has 64 colors assigned to 16 attributes but the colors are notăREM  defined. I have named the 64 colors, the names are mine and I'măREM  sure that there are better names. The names attempt to define theăREM  color and are arranged by color (sort of). If you think of a betterăREM  name or arrangement go for it.ăREM  I used names for colors because it is easier to use names especiallyăREM  if the name describes the color.ăREM  -----------------------------------------------------------------------ăREM  If you want to change a color go to the appropriate COLORS?? sub.ăREM  Pick a color number then go to the PALET?? sub, change which palet youăREM  wish to that number. When you have the colors tuned to your likingăREM  run MakePalet?? sub. This can be run in the immediate mode.ăREM  MakePalet?? will write a QB text file named PALET??.BAS to disk.ăREM  Save your work. Gnomes sometimes eat programs.ăREM  Edit Palet?? sub. Cut everything between SUB PALET?? and END SUBăREM  Merge PALET??.BAS into the sub. Don't forget to copy the commonăREM  statements, they will let you call colors by nameăREM  If you change a palet number the color name will not be correctăREM  but the colors will. MakePalet?? will fix that.ăREM  ViewPalet?? sub will give a quick look at the colors.ăREM  I have for the most part used discriptive names, this makes theăREM  program bulky but it is easier to follow and debug. There is no lawăREM  against changing anything. Have fun and enjoy.ăREM  Released to the public domain but if you use it credit would be nice.ăREM     hcrichardson@earthlink.netăEND SUBăăSUB viewpalet64ăăcolours64ăLOCATE 1ă     PRINTăCOLOR 15ă     PRINT USING "####"; 0; Palet(0); :      PRINT "      ";ă     PRINT ShortName$(Palet(i)); "       Background"ăFOR i = 1 TO 15ăColour$(i) = ShortName$(Palet(i))ăCOLOR iă     PRINT USING "####"; i; Palet(i); :      PRINT "      "; Colour$(i)ăNEXT iăEND SUBăăSUB ViewPalet99ăPRINTăCOLOR 15ăPRINT " 0", Colour$(0); "       Background"ăFOR i = 2 TO 15ăCOLOR iăPRINT i, Colour$(i)ăNEXT iăEND SUBăAlexander Verhaeghe            MICROSOFT PAINT FORMAT LOADER  alexanderverhaeghe@yahoo.com   06-24-00 (15:31)       QB                     848  55980    MSP.BAS     ' Microsoft Paint Format graphics loaderăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"MSP.ZIP",4^6:Z&=41731:?STRING$(50,177);ăU"%up()%9%%%%-%%-BPM/O:YAt%7%%C'%%%+%%%%rx%uSgnGTJ$>&RU5%fYBXx2?2ăU")VXkVl?%5wp6#KhlR-(qyE]AArs-hdmzeZ685Y(sg,E54'-D35u8$-0%I_yiOi0ăU"XkQQfkI\Z46O&i4sZhY##4J8gF1$x(/Ry#'7FSJ2#zIZ<m'*zpqv2q]3PS6;t]JăU"sTBQ#,Tj(58C;T\\#TQ37mdvx4l-C/n:V[f1[r0N&hxz>g'wN1ir3VdJE;/TEiHăU"j+9WZggYB]Z*81s6FoG'6xR)N#400melcJ_BG]RHuEeiC$#K0TwY=\HpS7a#T7făU"m)lYGB/AQ^V*_AhM9_,PoNw&AdRxJxKSGEMhP5k.7<+Xu%p()9%%%%-p%Q1OFMuăU"jt*9*)%(%j2%%%,%%%%rxu%SgfxNN&<>][k5wn;Iw<gMYY&\BGqg4SBxyaJ)KO:ăU"^USK-FnhJI(0;1M;9jauutg'NXEPWFyvycOMW6mML5EEe5q)iEY\fL+E,Is]\j+ăU"\&Oi>QE[3B3I?Qb/B,GX'&_5h=1,BkYR#Rql8SF=v9q+4]\H&7:D>*WJQ2dH%,năU"S>*,,%(7MMR-Wh.RWg>J=BOc9D:wfnR'>Hj^Q-GBc%hbe\hhi[^5<Ij4?=1^LJWăU"jeXon6PmAo8),i_uV]1PeF6A9BaY#L*T:[7Mk<b7F;HVC<:*>$nI[neD=FnFqk8ăU"MT_#QlJ6Fff8LQ22k)/CsW''sWc2n3K^QBqIaM#La#MBa#JVa0-:4o,0sPk7>\%ăU"AUnYI\na5tok+ctHYr'0^1D-]+QFLb<?fDcjJ52bC,W)(COi.q-uEYr[tx/]:t_ăU"=*T;DQ'Qq^/*OQ_Z(y/\ToatI8>FHN[VB$D.s+(MqlLv6MY=PY[/Pz;Zpc61P7#ăU"1MwJ(uivZMqQBdbYcE<e''$a>ttMXt#IZJRzV0R98M1,D2-(/Ee6%\Uk*T-YXHVăU"\V1g/nVIa;\7[5Vjw_+CKx56F\SKdS*'v]6XW&<cW[A_8dMJ^cRV$p.q7C:Aql&ăU"doMp2>Am,CG?CfWXI?,c*pTOF:B,86qUt]]Y;NfM,[[Kcr[+zxkMmB&7^T+W9D_ăU"4W.$G0Lutdy:t52.w4n-'L2(gN2TlrJ'PWh0AX-JI;%45T(RJiW$H/GapVG5TBAăU"J_-]3,g][bm:u5/rd7A4([W^,XCI?h-5#A43Lzu>J[<it=F#uESsb-U8e,Q?+?BăU"1-b51Vlhij1$[]%iJ/QM%e(nfYH8R3b$Vk8Rwg#(oxSV;F:CC6195L=\$bHp2^AăU"QZGAITg4_p6W9'h0]0W3F_4z5YowRZeUKnElY$.YKEK$Fb%2zsHoAhJ/1o(UB%*ăU"&)+Is$-*Bkz-^\rLD1<IR'BG%Qbdb.fXN^]:o%W<jE3QBS6Ay'o6.f9a-Az'fb0ăU"hl0./xOQLeBIdR#*=a-t()U:lkXN-+yD>tWuB.rU0(I'A>M3IBkP,4MCjGVJbY-ăU"CiMj2jJ_W_:6g358H_((Ng'xsrmxvxMW?%;St8d^Htm:IZodzrDB<gKG_7'4cT5ăU"3.NMbrqCf4us\)lknn77[+3t0b-NtVho2-CXKj:9iAP3Su*\d;\%FHWFtzR1ku^ăU"?;t00V2S7zMqQ%g_^X;DXt>B'#09WD-4Jt^j.W&xGg5w^,^xQJ[zu>Ypj4_ot62ăU";QglgOVK[Ju%avbgBS-x*6Crz[]Fb]hHZ4(nKQN=x)N*T*ysCdQlDiMS%)DPP/,ăU"J0C$aE8:Z\CDo]R,XrN%rzZn(:JY??<=jRe*crIR$ykl[cbc79k^:CV^\vIHc0&ăU")KeNMpMGHJJ7T*o=l>eN%Y<=7kVc$hN,>s,u%p()9%%%%-[%%-P.MDDO+I*5%(%ăU"3:%%%+%%.%g&S%rxur)'Nyxq&m8h0_6-u]jJiT<S8$JJLEX)q*znEcoesE2S=-MăU".HkQ*_yEA)[P?^T4^c]C42+C3*IlXFp5)*,1Ojo._\;vARv+LhcLVxf+s4p*S&GăU"]n&<$gVN$;&AhU;ApTt2mkoFbh7YJ8pBsdptvZ7hvd]P3BV,<ZcJZxx:n0jTAT&ăU"atYi)OKZIC6a;ab]aFbRm6]:bAH?+\ea&b%nmtfDIe=WMXc_1$+m=BeBiU+s&k$ăU"Y(Rbwm^K1KH(h]M8$MNeOq$6ALli%Rk3L_m'37vO4>hP;MItQ^uqV#P;',+C60-ăU"eLu6,N3:]]PF&NA8\8s*a'Babr^Rip^_,n8N#3:?AnW2%O-?Lw_2).r/P:;<.+#ăU"LZHA(f(LeLU4Ab(]khmH]^CHQ89)toQ9'ak2tt3HBRq[PW>jBZ6i?6HoR%knEI9ăU"'n*%Vl+qNd]5>4ENp;BDE\g%92Gq*y1U[1'?j#8O&UNH]&lbT0O\0a(HC40Bq)YăU")LO5Ki4nL-e-erK>#4wQ_*xEG_(GyO[JmzG.&'J;p=uUq_zHnixmQVdat.n_poNăU"L+Nfe&PLX+VeQ):-VoflS$s^cv(=+gMl\vd5p--DLj;vCqg*_xL?e8(5m/G.j?CăU"X4\:[Rl%%l([=pP^p8HIl.qX;R%famQv$<exag=vClda?V3eBa/PVL\-S]HrBDnăU"a$I+1g'q=(4vO\H_jiJcgjR[9hQuaDfg\B+>35uzO/1K\mPaNY&MFLaEl$VC^6TăU";^VtaCjuD3ipHnGwc9/9mTpkyh[aeevYW\=(SOV9:4bN=6*1TR>_-;f=At):84săU"_)p[na]H6YteF52S*)q7#kdoo/RD8Ox/c%tquPkFB#h.312(cjZhFjL=5awp#MrăU"ZQ's5WV';A]5cD<=;XCfdZ2mp-2Ef147:x##_KNM,h/;Ueuf^.pC0=(Y_ro0-$_ăU"n3P4abdRASL*Q%G_((/$eFX&O^6&DcxW^#?-2wBqp'1.]^7_<-DuU]mu6G.1DWxăU";eg1YhpbKHfioX]+6F?j6XTB\CU6,'D-FX,/:&l.-HMxZ_fE]D&Ay[Fb'%A'BozăU"'Zq)%EWCdoHO4oA[qb-hRog[26:?IBt-PD&G48*HR\EbBz;:R,_o7\K]P&0=sP[ăU"=PhkiilhtLR%\q(VEnpYWua+)#?gP<:?S;0:QV$bq:m<PpsOrO$]+Q.5_b\r^CUăU"rU=8G)WSK4j=aR/C*PeFl+z0<aW.;Sxr5V0('f75Jt&fK1*p6x2gf.F#aeq7'R%ăU"5pH;xLPDV+P+e>r//iqiDN1L:&FRB</fXs%nEe*Az8GRu9b)6^GaxlBb>tn^)sdăU"/IgV1/dEUm]Dp$_#?d*KD$l=,Pj,;JH;b=lg(,)t)C/+?/dn&d-7wLHPCIB)62VăU"gmc*]TvQ>'<$GaoOJ:,qMqLbEMBeKPMB(GTM#n1QwfTeUtEqKqWU1x^]*tTk,eZăU"Q]VmJ#Yyl:],NQKD;IjW?5?k1HlS_l2h#B9BlJmo\%YkYw%Z2.5<z7GZJvEl[ioăU"K.BW0Ur9grb1iI0qVmVSYRanP;AMT;43j2O;$K.BtEV4lVP[9KeqN9x[560uc2UăU"i)F6_O?+>vo[1mGX*WGJ'e?)ha#Fim$I3>xZmj/WkyS+u=Wx='JlnRiL,;u0KaeăU"b+[:#>'oScHo_0uiCIx>D&E'P/h=Uy1Qll?<7:,e9%&&[qlY*:,Cmkj0pjpz+WfăU"hW/i_\X)1P2\2cjLp)[k,i'MXjy_]Q;TgS]mvBD=pqPN$>[1bUhpDBw9I1ID:F.ăU"M,.\j/oBT$GR%;U+L#yQh?DdcD9QIu&EmOVUkoE7(Tt3dGSht%;Hx(B_P9#XPQCăU"C6_w3m-/-=A3C5q&cxFDx<0/9gKAO%?>3]A%4:fLoI(N/HevckfWG(.Yr^V\NM<ăU"-tTRu(0].-qbn4kpc2iriBV(W6C_d2y*dK61SS>5M,hJFOt+r8Tl<)Mv)QRabhPăU"uO5]a;U2C7$bYq[f1G7]*7,2V>7Cpqjqn--)2Z_xAlN*l_wUo$pvdE[:i3\wN(QăU";7]XyZXZ+.FnR#R&ms^qlXnZ^;e;66W60Gc8RO_eP-gYIRI0d9CQS3*PrdL$W.NăU"-HL=Vw3_.Th$]+;RJxmRh0$w$6$%h*]lAAu+]=b]Ah^YRQPWR&)h]dK7$4:SU+FăU"R#TbsZ-)>\/n?cvr/?(y*ukeQIg$iao<6&Bo\e\_IEaTrnb8sCV5NZ;zH#b=oUzăU"xr>4.F$QB7VKDHMAh#I)l507j*)U>#FWEMF<^QpNKmhYemGUhv,ucZICbk/Ir^LăU"&3LgX8Jp4h3V.I5O_tEZPO+T:CoHjrAJC^2KL4/$j(ZK]PO,EGBV.)M%BKziY3răU"Xm1PE<?%sES$60T5)V+M_SlUvdlA&UIN'ld$2MwJI9]Uv$eh]I?]-=5#;X%a5'QăU"0TCC8y.rK4(W=5pfcJ4uuYis%1/lt'o\ESGBFb-*wE'jHRpq5qq2u;-NebAuYw8ăU"t&li00lB&APS7s,s-TZ,i2-K3KgWUQx.B/S5Gaoqs\N6lB)XWpk_a;Q3d4na.#căU"dN1uuum^ek<=GtVZM9-1\57Po690R_qm[J5X'HdYu[QaIEq=Aust[)22O2>iK>4ăU"hp\5+[UCbvO0+U#I.9v-=L>)n.JcrQLh3O,A&rLi>o=>z*B7'0G\UMpaCkAmXsLăU"bH$9B>NE:T^;kj]u)d2Mqh0>u_viNlk??sf:IB7Syv1uk%^sW0)gNSm+QinNm>9ăU"3N3,rd(Wx*Cw,:.]=(?>/YYIF9qZjLtpgn\lsE8)ys.:Ou2>uTYj4q2SqgkLasSăU"x)9vWMeDJp;[la^n:.\Kqb];^XpY\hv5XJr]:KSb'mrJ9)u5lC=IPLoomc]kul$ăU"lD=EASr]#tK7^Duqi1eQ\G\H^8>ZUJo%y]'QEm4U8BFBfFd3F*C+6Btds54G%XaăU"9DY>[Rjc)FEijv7M)0dW'LDrDM=i]$P6QYBO*7Q?u\AeQJ7?yz1IZ1yPEh[[h36ăU"ovt8/C_mH[#?i\dDl->bK5.9w\Q1;f<mnej8TPnk_DQ%iYTmHRGWt^UR]YZ(=#kăU"6n_.n;:h,4]=B:u(nO6L]D0838LQ:$CU'kX3Xx.c:\lVNl#+n4<[OSfUJ'eGa<^ăU")sC2xg>mrhnU/*%QUmL$-'dac^0*S\L>f21,E;suS(N5\y71BrEA+$\hfT6qI2păU"72$Q#LdLYu'0+Kn#]\->W=e5GJ(.-GW$q^3t\U6^3HZ*j\7hB*nI-Q:ey#2<ZV[ăU"r2lb?fW)Y>qFGb%K&H7mr8-NpunjbZD2rM%*88IWN&FCd(yFz2Xl/2[gNgmU+a%ăU"wj4;7(l+g>T_k9g&6n*X[1_,F&TH7=[n#iR_\W2rcjY/6uPV:MQNj+TqQH/k8-aăU"EOs$n4x&hu/d3XHJ),emtz_7p,esNRkRZ[$k:&tNhQ5,nHHeWf-\QDb:o0a]%<TăU"sPwIEXu3w3om[Dg218ygnqO+n$Z0\Ij1PRtdqn'Oa1Th0c.y.UbT#q>*ic?+N)FăU"0\e-m+I7TWoOEO>St=e>]'^Fpv6j4Dh\gIXJ?/(E)OZ45t:fX(xLFT4$7?mBkNqăU">VviF3k0y-L7/%:;SFFc,vH==5EgEC\),Au0eFF1(5:i.LsO%18?^XLC_2j8uqmăU"APL.sgwAme/9M:P<(Dck[rMXb<Yhx;:xM3,=_[$8,[;WOL4iepEAqj&.TS<cG3]ăU"dQ42VU2X>QAun--R48,,Rd%tpj-0>^M$wdhe?6n&P$^yd1vx+/pMo)*6TmASdYYăU"olN&%Cl(J.&]bCn+#1$&6K*a<<$i51H#N7Mup<ifKd3n7_1$<Lo;X2>[)egfyloăU":<0:0,9pZ1:dtqe%2<Ugi^_PHY>ZKhKO<U9^chbR:Rj+)IvOg'=\U+KK[vGO+hxăU"fhBIwM:U:Q7/;W2*sMg#=&2GggQsl$lY_BOt9%eMKP+K,9T4#XZ#i]qGMvss%L_ăU"-++v7:=q&(-+)m'M6X_E:.18ywPCk'[lr=BH[h>-A27LsZn(;]''bGIw19<%w9LăU"^*.4uQRa?CndaR\vTzo%dC5_(j:8%7LypIN*)ipClmiFgyi:E4SVJrB*y[h.$b<ăU"D+EmRc/GaJ>P:MOf7+&+Gr1$:bYpIP-5=uhNhm]4+VwW)mOzuH/iH$0M-XW1vtTăU"7^iDwt6N^K&*3BToaw.hG\pMW?Pt)VuG89>uGX5WFoURt]q-eSdzNbD9iYlr'''ăU"7hK/,$H[$RN&8Fro(#rn(aK+at:cYw:T>M:/j9RHMm1h3e552ZpEI4*O_KWy5:&ăU"w_MT2?PIi],nu,TgLH9pzl^q-hi+*E;.:B%6BfsVe&PG:%b2dQP8MQuEWEWfbOMăU"vv9eE[[WDuo,SI'rKM6[Ou3hL<:*iLnZ]fQ(AY9aU?CXB4Z82>BXZBBHdu*,T6yăU"A*:zw&m:'xUIfRKJs;fC+E=l=juo$A_%zh^B8w6hg5:5qjP2lEaPZ''iZF+mxFKăU"/U]Ac(Lv*DFGS9pl?X=AZT'.#](lLZvg6JGIdXW+x)V\LVW7mYWw2k$,WILGAT)ăU"\s;9(V-W*Xt9oQhk0J[,bNBC;ZZ&lhpBSpSHgk;-ZUncOltiM_0rJj.V+/J8<xUăU"D-A+f/H$KuWa5D&iDXzH7^q].jr>'S2dE4FsxTFRv/*(UaF0-b&DM78u%pl<HUfăU"oyIZi6uYvGNw<g(.C:kpL+?P^nkvMe(*j]7RPWz-n'L$us^mq;TCn,/NIC%RV?kăU"[n$yk&bl+i%)KvbQrt(e:fFy7lEPp(U(b$JCP$k-R_,o[WaSa9X6H:mytPdafl0ăU"K*u,>mqE4m9'uM$DkoLb*9c>wNWBlK,[tq9uc0cPxFM8*c)ifn($0D(*IyB^T/6ăU"?^C[=h*kYpENm>FRY1W*'OmF_5PQTs\-6R?0kry8\;W=lo(dcXbE+Q7FilYkh;4ăU"X0K:irqlUOlA^cEU>IDxy6]cE_j'8'=h59J7TmfQb^;ZkF\*'kn3B5)H,CUnt.[ăU"sQ4?\*iR*[/+HNUnQ&m)^4C\HuQyKh>K_6&T$L)7g&#pN&%1>OH);GJZm*Z6RPFăU"TXvTv\u<M]('D3\R*Zm:]+6O$v^WYa%J%+<x]+Nb2'4SyZFAw2jFj6Ys(-e8*quăU"sNWb;^*7[ld74gt7\)Z.\u&FF/5,eAK+hU]+nmWk)rEeRs_qLcJZ2<jmuPkVLD<ăU"HBK$fb?H/i:4rGEI_JmbP*61.lN^u?iAppoEwL#(K_Jk(+;uD)lw<9.Cx+2wbfTăU"&eSqkYMVC1C(Z(xi+9I<Dy:Qh9P&a4\2V+0%:-fMF7bRN:)ow[k2:d'e]tseHomăU"FNG]_KM,6;sdZ[M&)G%K_/;I+vO^K?V4YDnY?n/'8/1Wo-+eAILP0Y4[hoAb>h9ăU"6o9T/xu=1niMW($L]$G8T;hQ9tI5m41YUD6&&qWqPXn]nni5B:UEXGL1JjaA]R*ăU"%qN%up()%9%%%%-%%-BPMOSHUImPI%%us%%%0%%%%xj%yzu^%ZSrx7uq54S?#bDăU"jLqD,[f[ev/8eOY2N;z.a\?iDSYw2j7rz+::Z0I+_)E+e0b4k&FqJn4<o59el5eăU")KGl-7iLa9fs&:TE1t[d[4+X=%VfI=WWTB%maMuohjCy\LD5d*eE(B/N_+N4sh;ăU"Us\8BBVNoEhLR4_K16;tn?dpu6hvvZ6pjzM>+I(_rNkv$xN6u,BxCWQxv:CO&6SăU"-.kFGyWYNkREF6=M[+v=6L'n0Ga1<Pk[?H:vg6Yg(bVY<<tBkBD0i3HTj/Hqi/=ăU"=LB8L('Jox4:h>ziwPTiQscNcbzn/K\Q+TY/k,=*7jO<u/lc=61gG$5I*7Lp-$JăU"05/&j-ZrjYa1hlFfp-v(5iP,YknZv-*BL+r_M-Z8Tr/u_;6yB0bHu?5:w/f(riIăU"9]=7<h5'5#ZNU3iuV]FP-$+(iQ1.7.jdW(gUbP:70M8N5gtogoOtQ]t0b9<LUjiăU"EJUZ9njl^a[(L+2\gKj>mkwL*_FGtgJ]nC#g*cVRq>69MMV+zJi7WgVFJ>cCEHyăU"n*K%q_r],nbg31bCPo25;cCm:lX$x+Z_yHjmZb4(g$dN.g9si?tlqv<IehTp(i9ăU"^[7=/kt?a/9X8cru4Fbn(cNtx(;l1&GK.c]nTH.zxeFoqvYpj4Z#9tsw+Bt(Q]găU"A.YU;$7%r2l7sc4X&Y_Xkk7=gP?]x;\Ve#7G=wtsTk2qH-nbztPsqYxpdy2og&BăU"d(5gmWSg1jF>o_\BdE(jyq9_s8/ja81krpVisJXi-MB3Ptw/xK6iN4.JyK*i^-VăU"HyDRatncmsy$BGkS9M;mEnN]ixzuFcv*NnSfqsR(t<gVor-94:ThP).r0G.l'5/ăU"C<l:i//D#v4bfSZ\e6[2\Y-XW?qnE/Sn[>fg/G;(g7;^ak3VWu)IiHZ_Oi3U'6MăU"Z-QJoSS;tUtYG^K=?pdokZxRBHobDx?X-%>[s#Wp_.&RAuLIa;7mL4A+oH'byvqăU"0B^&T5qfWfB%Zu]objq5.(FzFQe&.mb.5wTl9?2mc?iS3aBJPJ5$o8hdhC.j5:găU"o5:I+IcO.7?[)#2C*&Ho=4]oo'5lL&H=r%Rjo[+B&=L?n.z9b4Okq:jhVaVSqf9ăU";&3:/*2>zj78.4>V]%cej65Y/*1T=:.wSM/f_l78u(/%f2,r:&6BC^_R7q8o'&0ăU"90Z<E4OPNI;P8j4rq<^8w^h-T#GEn,>/l$cMT(*8qC)TGit3BS%8+uBw:3m[.CZăU"Y(9\%?.7\#blW]ixc+?[4^pL#ttd$szkD9ksnXs8^rctlCAu,H\HKK$mLH1og1]ăU"nb#kv#H;4E#)KLa<m<4%i[3#)nFEj/N8O7]J1vf#r_?07Ud^NdZ>1xKTt4cUL2dăU"-\6[+-DPyVBz*LIvrB2h7a_GYFue3G(SfFXb%cBJI5BNj^KC;L>p[3/=hIW_F9UăU"H6(d%5Bbz6(u^BZfhbT=H/.$Tnb6KObotF$&(6J%_H,((;'Wj+iO:9'ds[UJT_GăU"i=.94l_gC52%7#&K]Yle+Vr55R-aK06E6).6F5eS5jax5l_5(4(Z.IH-a-ajHbOăU"Y.Jga1'+BqSKr55#7)+o=uiSm1cEmt-Ld&>uF/L^Osv$./YcFV6>.$=>IG.#DGsăU"[SyofCy8cCit-UONlYki0-'B9Vp6^$p#&#2/-dq(9E)>6J(Ap(D-BT=:-C9SSpsăU"\CrTG<K,AdP:Z6gD;8n\+8uJK>/.CA9Q?\PM>KI/jkI0M(]G5J=(opy1Q5:j$#_ăU"C?1A[899jB,NU$/F5VKd5F)Te,/X\AINw]$T%O$b\pQ*Z.KY4$P7gkBEO[_qttaăU"A.XSol_^bRxe[h.OW=Fsg&XccEujAH)ka<%T+mV7]F,+=vr0\oCU;2:$h\?P?%2ăU"uAp4zX>bqc:?4%]weB91pMBIj.8o4UVcLkYr>>LuwV;F^a1Rm_x%Oc8w5JSK,%RăU"UUH1T'<?:BN>$4:jY79UI8p&VD\.^i^H(<gRH#W,Ry/5ogFmpV4e$W:sP-Q)jw%ăU"*g1&u(S$B^Hsmo*JOd3*c9_1KVJ0'B-l1qLx]sGrCZ4*\r\lPCB?CT>>n(m1by:ăU"/vKxcvkIFh9WgX7v/#/MbR*/(abE$cYN3TuXFiAaztmDAQe62XEsiTN2FVB#?:[ăU"%lWK;lY$KYJZJQWk-ja)3r^]b0J?i&1J-$0YqqWH)EB4d.i7US%$4Oq^a/)XACfăU"0iz%1X^KJO%g,c.tHqla27%JDDl9?Mj;tY1lJf)[.CZLcam^t'[(:fg8Uu.EfoAăU"VOVHIQ'6lqs+P%A(;o^.IvMZ'NB&L^Fsk10</B6:XcuACIYLNA0wHuaTs+7S6akăU"$ktLGqnUJ,[v#0=VI3PVx>FDDx?cZBnOtA$<9c=VbBBJh,O&wEw'jFJdjbUUYhaăU"+BWdJjL0je$D>x(T(O1WU%m9AH.#^]'#m+9^sc:=Amo+/G)*7Xe51v:L,??BKKzăU"\>UvPKMP&%mb/Y.QZ(J2Ngb#rrm_u]0jP(r',$q4o5fCtP;z<\88rbZ;J>li'EFăU"z>^W2Ek?CimxL.<7^A;[JKr_s;:rON=7]a&(85UF0kf_B*FY3tHyzTw&sKH4b#yăU"B\mXe.Da'Ddiaem8A=m/jat6-%Q2#X9GHHg(Cl*kK2n4a+l5T-9W(uAp-U*qRIDăU"]ogBUt/<nD-)<0K?zET*k>qm:jN*>'.T#2T?flX^J)12DO;21Z'u7rlSHYO.4EgăU"gPH\q<Xo9Tk^Fhl,la?KjXkRK^en\?G/*]BxU'3bn6]W;awdXEx-P>Q^jtdt\.aăU"sO%=X*P0Mp*Iwjfd9%/U$fhsqi#g+j[/Vm10$,[kt9)DU%rA'GkL7+2':3\&mm:ăU"iG\)Vv6xQwL#Ilw[L6mW7R5B+$[0Uv,*d[_3/RV(ob?&r%pF<PEObu0',E%QrIrăU"94EwJA<-c$FXE=HWH/oFn2rqe<0<Ff^.D\psJD.v3YT5*+4.GYf$/XNRoi#Y3E8ăU"=IM'KyCHZ+ad\78:0BThaVN%L'oKQCe20uI%xU7psob%;eNfVz(Atq\fhP9VB$BăU"jmZRClEc0(ZfdxPY?Yo%*WtQ4cTZMq&h,97Wtj7Ef6YXHJGOLDoEaLB_U-]?5DQăU"\u'5ROuZk$GE.&ZIaMjtKL<jdmNJ<,m7\Cpn/I[%&10/An\-(cUr-ZGp_Y^KiciăU":)[IAnUe1Ax1TfKK_o2n)K4A$a]P%k,_lBqckN?VqLQ<n]^%5d[N/0%Q'AVdD\OăU"#)\BcT8q>X#O)jHL?C6a]LgAcK?b6[b<)QOiVV7o/wI6Q+OFr-E$[4PO_XD7<-eăU"cYY0$,eagpS+1B=SQp]KX6K,F6-[Wcf0K)J+x*'_U]nrm=hrT8J[Fp^/+Z1/98\ăU"at(>fd^9L+zi-YbvF#K:Iq.sn2V/+e?4sjr5<8hj8mT:9DyPfr,?uSC$qc*tJEBăU"3Gr*'96?]4FXh%%&WDAA$fhd:eJQ4olGkDdPU)LOtJ7nnrt5a=JAC=BG%Ziw<,+ăU"wFU?\3*[&Vs>R<]itM5R,C03BTrVlYO*:dG+n;r18J^0HrTA/Z4M/a/NTRE2[(zăU"J(kO'gX;3B8a_p[biqQj7a1NKeZjvGHhfGKJuRTF7hL00]almES]i\//;_*1PsKăU"ksgf)qRU]sQArdV(*?YB2sMVn$uu9PCVHR*&ni&5s:f-$\S-PS#I\F53drP_^.;ăU"S]gSiTxp4N0qdaS38]qW1t(c-N5lebL)PE1n(kmLV(&qVlc-#&.D\P4Os<5l,,ZăU"blFO[pOmG48HM#kXt6ueRHhUQoo$0Xrkt585G^_VN:[qpW_cgR\\7)9G76y:O)ZăU"o5MLJf9D_hRZ,qEvXWt6LL0_K2(-gR0S?s-Jv1LiLRwWi/XpYQGg4\bBhq26l\2ăU"G)XGh/lc-Fi'p]N1>aaC#8Ac$[3ua72I_kmeQG's#A^vPa0&o(KC9=nd+jr:nmRăU"^:p*\ivs^cSkS#26(Bt__<(A7L+Ch%AMW#$.U=RZ_?Ej5C(An.FM-EX$;nozr%uăU"JilEs)\5fkgE+25<fF<)7621#Hpww=(v:hk/]BGBk$mqO[d^w'\kZ^>cqapAV0DăU"0IsQY\(W]%dnlj:(jv)Ah;8.(B.'ux;ld*426]1Bo^>+m$tILvcQebEiRM),tMfăU"WeL0^yGBPC1D8%&R1c7kEs3J2pDM2'&,HT*w5[[bo/MnAa#VVa;3?2E:HWudk26ăU"u+Y21ARBNHi?<NB'iJ.n)2tsI?tRZod1/^ZW<;#7I-Hrldb^,45<<6gdJA\<5EJăU"PERveOpW]HY>aQUSq]&7\B>SaMG2'Jp$[dE,^9whi95W2D==HOt1nd]%WFhlL[tăU"OfII<3>eWqGfwAphE[0k?.-:]*G+vH[bNHfK*#LrR,blNs,A^523Wlq\K8\AzjFăU"N-[j)noX$-ZS^nb/sPW%<*D64cd]SHCt'kexm-R[PhHZyXI3\2I0N19NS0+Uo%lăU"zY,>nKm;Z$lsIL=NWbn\;o;/,x]..ae;;o5<J&\bd]6,Pa^UZlZvi>CsghDI4rvăU"%Nt=WsF6\GF/U8F)wTn7[L=<o_2M_Y$gypb)XqX02HXKqg)F_G3Ndq_I8FuVSwWăU"]Ngg8hwpJAZZCDo)'hkMGXUC\biN8W.]&cFmyc9=9[bH.1i$\&a%+b?+:,6WVB)ăU"i#>,#jJHQr#fqRFN[yFMX1ls9DHR%a_6z2k6rlS^Lo'p37+y7tx5Y:u/ND1+9>oăU"_+*rKPrdb3<1#_=jW-kPvF)sjp,NQUjX)DBG#6bfhAHNh.oE'b\?'iKPJW^NFs$ăU"dSk'520XS]<3#FyN5M4j%S#=:[IdAv9hoER1jt?ssV1G&Yx8>LCZCfa$0-odG+aăU";laVBReAvf(i2t4)&%[5MT\UEM;#(1n[(cmEoUs#G9wgs%vGN=ofLGA9[.H;)kWăU"sDcHsA\*k;+,WfP;3txnM7]nNwk,[L0*rL7H.Op(obBRx,7G?Te6e[DplW?qCo6ăU"b;Zehc]F[\gC9BS%ee[m*Qv[T%:r('nT9Z%\RWcD'k>naMA$mEGJf>YO_b4*[AtăU"VD42^Z_m>n(ZmuWqUslWINAc,*l]/eP=+;nM&#K:bh^RW+qQJ=V8muh9bv*mL6lăU"iazkI]1(05jKX:zQ9e(6yB97Pxx1lde#v-iMf;5T$pO6TR-hKJiW=:9MdHem76năU"dmBb6*=EFLUVoBIcOKT]'qC&aYZgEGi)NKw]CoJW$IzJ8TT4Xp^C$o5U9rTW4_4ăU"E-0BJ<AlDKrt<h.1?OCH9C8uDJH,C1/##h^m+X(6AS+wQ/:f0kwwg)d1W6AX\ibăU"z^o,1G8Ek9Au8)\e^O5kU7WaKvP4CZZIQO_W<A6<V,WMYOd#%3I.'F/,+8PKM,săU"Wb/V>EHT53XA2]md)C&nrQZR*mc[K;'j[\fgW*W,yoML=t2'q&DY$]5zNNKS-qkăU"?Vd#GN#GEqY/>Z,-wQ/-.j/E#WjP']+'*jJn<rYR-?\3lIr99JZj:^bRl(ga7UPăEND SUBăSUB V2ăU"%Px99,cQIs)n$rRFloSrov<Mifn'F?WqP\.,dh5$r*)NbA5=y^<qESh.Wo^[(BcăU"hs3JR7.;\&noiu>cES,:4=RYl[Z8d,p-i9Ontd)vR4Ch&6t[C\I-H8v-LGvu.9+ăU"Qw$q5'/tic6jI*Z/]Kun:lGmP<T;ylY_$9^[2hN900/7_#PlPq\tc/2#(R/3Z%SăU"5scP7xg;q&-G7O7(TuN388KY6:IS8(CB1y<1-iRm>^PI-9mE<fEO+kM\Jt6.Mu$ăU"GCHtBg85u(h(hEee4F'(Py4>AaHbmk5g0$WU)cn\sf,Tl4g*?opgv$?psmEqwPoăU",&nw189:j[8$R]\nvzV^:-sQV&mkPDJekY$mNA<TAz,Zr2eOo(eH%<>J]t_6*Q7ăU"Lv?pIVQ=_VW19:,.s<>1-\LmU:dCh0MXH)wFxA*VI7,;h9:f=E(wF)9.xr)Whw[ăU"G[vq;VfP<S\R)thl],F(iha69_V;Z(uRH73;rDE=4:a9mN5I$D&\j13D,mc6ikIăU">E]0'3+51BF,,NxW.B'd(TY)4ELO$(;MJH#>GvO[)E.F&M8PIpV+J'(N(LqO]mFăU"v80)=od\ZSKbQStjEbT>36SK<:ay>X2M=U=BI1&F<(-fCY)wstqknt^<xrl]ff'ăU"G=03F8)kdCeTYzA4a/S.'#s2>QPnJe24MPclVsWR8'NE8$+6w\U_StI/'TYjI;/ăU".V:G6)lK^>zSd)vNiMZz.frL.2-A-X7wb26x[)'YTW=,'aU[ub&8fTrCer)PQZqăU"l;Hi,D>ga_t9P\O=Q&F.*P_o28+^<2SPn0.eRp^rM*'Vf=&-IPRk):,GVmA/-L8ăU"TR2:p*VITID27d#M8ksN7BRcH$r6D25d*<CK3Y.1J,3:qumgiS#/k8x1PEt'wh]ăU"w&9>u_%,JF[;x>x<>^\wW$X#jc;(Mh9x#hm?J(:Ilt^l;j4&GB8JDXdQLN.kYQ/ăU"T2UYE/I(k2s.[E%#'.*EI+E(6pbyN/YJ.v<qkb68AJZkw)Q3nj'LA?U;4?dkg*4ăU"xaKuZxJ2xX+HSt-B-IM%>3=EqrWF+J'S.FIlxmEu0_]*gZLEd*d;c\^yWEj45o<ăU">ohV4i>auM=%7DtmI68iSOoP+_u,IB'dkRj<P1=%W_QFGQ1uD#G+J8H?#SnVi$năU"sbR1iSTc66$<+pcfi$ncP<wZBUNAO1,W&$wG6;q?NfjxG,oVel?+TbFiD&88$,4ăU"=>mZt3m]'-iO]2zf%i6V(#E+/w]P,9.(H#w9/bWX-un18_jvfpq/DQRHdeKGy&[ăU";\aw-kLwQj:p?6k]PLn\c)*gk'%3l;BCk76==ED^N=vKx\'vS30fEHphng]5/4QăU"xXn]N*6EtcSwr;g<Rq-E>09O4<kPW3wlKs>d7WHak]D]b_k8en_h5f;saCQInMMăU"]m6R/o3Iej/ai=NF]l:U#B+>XeE#Nfj#U#p*^,mD77bI0R]cDCwVRXD4myS=k#WăU"W)0g+QrHU:;D8U<5o:9?AHGQjvPNcD*rR'Bplo4T>+48lEUA?4k3v36pLbFHXWeăU"(#qU)4_7oPLa4'f,?%mq+n3hx0qHqC5=n-o](?+0Nu/VV5UQq,gI?rIG7x>U*,aăU"Jr)uq5hlnW.pte_:p\hclQuJ[MBE$4iboPG4D/_n0rHaEK_R0W8j11nC*Dmn9ZuăU"IFHtL?gSVhYI>NTJY9o\uq=ur7cTuNRO:GF/<6N>ys]Ack[-GiHy0TF#?]AcYh-ăU"%Sm].K&WxIWQq7/%MIAd&Tb+=7(_#5NL.ocu8#>SoHnH-h2tnCxmXl>t&ioj0[găU":(Bo\PX%l=:TDm76RVmA5Waq&Q33?^ALI?=n](dYbDUQ]zo_u(DKWXKGLU0&S?0ăU"Ma8rrQR56RRYC3aB.G[9DH\H[uhIQWqUE>uvJ^^7oRO/_,Vf;#^$YC?O:62I)h9ăU"*?4+gf[vH;s\pdH9FsqL)v>47FSX\&:L.aQEfd#HSaUI^DX)B8QR4F[=4a4JLzJăU"15$kBtK8rsEP#%eVb^fw+s*Z(DX4HE)+:QR&00HM.Rrou\8;$;_qr$d26Kf_#[YăU"CDMy3/EkIX3hkzK&r/XF;,Ix_ZpsVFCmG\#nGFt?a5[xR]7b^K*bMIi'tcJ3EXmăU"cEVc'wbthrT6s:+YjSN[#UIRc7aV$mYkHXA&7Yi9^/aL'V(Rs.WJ$iL=GD+tU\'ăU"qWaFV_,;o*Ruh-3\t9f#a_eNqOs0k-cQfukY.&E>tfrivS&wmYFsJ,Xn,#J>6qhăU"jcQzHAzjAS>'G)Sn(nHY_m-sd?ZqRES\8:NG\kgEH3m#lnd*TsuZUwoso/O+mb6ăU"9pj-JnB^#jhp#.v1\OCVlVUB6b_+;e6Q4'aT)G)?]JOv??Nh(6uuV6M,.0e15OHăU"Zs7q*()T3H/4l\j[pSJ1xXp2N+,lcU]]<D3A4(zNHGIH3,AMsAGPzg#vgnu#,V%ăU"9jFrKSJpJ6w$,rt^]c8wVr?e+2H1)>'AA68u%J7O_ix0'X*u&)QD/CPsV$lqgPiăU"G$ua4fm^RA&qnAEeMbju(\o-Evhu)CJ]q7ipV\:^mkCT#\.tPdNtNldqR.LiJkSăU"kYGVQu1KqA79x:gIw)a9#vNw;1L$*o=&L:SK4dDjm45)xng]_B%_+DrR%e=3kQ8ăU"$*pU#UIGxiw:u,u:lnjuSHX6cxGM&>]g,x5rL_4]nQ,q]/KFyA/9fGPs&kcRJ,PăU"qICnUZIYD$3DIx&\N33srGY\Kqv6BjZ5Cq-sj#Hcf*-R6:VzRhQeTE9-]YGCJ$LăU"e5UW$4In33D2HO4)m^7d$2dXmu]x*hcGR1I9GS\DbXR0nmb9du6cf%3NrW-&Ok;ăU"^ijYzfK-bl)0R7G-QH(PIoTs%kJ#A*:d/CU-)7npKIL%js\W$6H$3GDk\m/u4nAăU"&;J;\mHpTn?QISkExdzrPD1&]\b)iEVX_o*/C&A>)]n)$Rmt2B.N/I.4?Dsgjw_ăU"(*-ol.M%)AMfE5mnbJ#smY5cmdJZ\KudZ.uNWqrCFQK8]F(#\((UVetW$3:_6MqăU"CP=Et=a_I89WA;Iw)nV/KF76rj&^SOLC<U$oN.1GtX\fOM\brufn=/Q7X7-,8uDăU"4uH'FN,)t0P%:GBEY>J8_spb>Y40B#&m&_]/#rM1iL57VboZY6DXZUO;XF=2mnAăU"0XcoZtwwiY4Lwh?084R>08bqX<%gCT;zC.xjCDK1iZq/f,K)Se,F18mp$+'%(W,ăU"ADxDCs35x<iq+*5mrxm&QZXW/U_Bk1Vz<%T/Fkrpll0tquui.o.sY1_aj3-B4+găU"cXlgb-iDibQBZTJ$/\6>8m-Oe*s$i\*q9^^<LSVu92jWtPr7Flrt_mnDMupxwSuăU"gKCSp2M(*i*))Q*S-Kc*Uq7PDRi2Yq.,J*FiK?jZ?smoN;46o=V#QRdWOw;9MdOăU"1)6AGh9X?uy470ItWwMdoE._bL2FJ:x2.-[TakT$Nf83h/Fu-a#i1Oc]FjaR2%\ăU"y$uY-p,ESFt8bgfklPug2a]j<xvhX&X6w<06qxrK-XBNLBrBkrKZ12AD7yVlz';ăU"7\PjFcLEeDkWv59Ma^GI5bx*7_IUAhd+e7ks9$Do[Er;&/QOxd7o=WCUl_+dRc:ăU"-^o_swr?ZSg?ROB'fAFOrKML8#Jt<WE>X_=%ZFeLV,OKV?;M$B_c5PZEqe^fXe=ăU"^gmtBI3+)dHxC]AC'EbK-JzxQKUvKC<utMPt6N#;>Krsi^I34;y>h#ZP$xCo<qBăU"mPsuS>U?F347btYl'F)&=bmFfo)yl))RSEFyQOW+oEqFkz4C-HMGvwNHqiFv^uwăU"Kw[hhfF0b&/;\a#.,n*.RK[9V$-0Km3Ois-\6b(awRrAL3.%AFo;,b-0eR3ecnCăU"Re($[mtU9ea&X>K86'*UuYQ?Td$h:^Zs>>t,96/.^Z<UTAB)lU(=pxGibW4M%G)ăU"Gw1OnSc^ge/oFEB^Xs)W(S;HexPhaKC2p'q[YtM<+?o2o<FuvJrqc_Soll_O9[WăU"cdr\)U8R9eU5qp*CHQP/=Do]fYfSB)q2[YLh(pHuHoLv1L[lk'Wd^KSR.KSY*9WăU"L6'kT[re0l[Q_ntIqD#8.B/Zy,s[N'9X'B'q./U[oW9zH(#^o6738d5iJT>OUCMăU"n^:*ul6oTsEa$O?fX1o16dSWxM5LSFd*Nh44B-N2M2Mrx9.rexW*)k&BZbC>#?9ăU"dE29vomqA';Ss*e;e0rIqA1\VlV+vp+;o1d/p/z4iK+H9aM&3NMrBXpqTtddA<iăU"TDQ=DpN(v3k,ia&TGDG=eQCKl9?I,>ZnblYi:cCH'-j=qJ\-wUSes#%5wASS-Y&ăU"F>44n>Cg.G*PojSzHdV]l$PF$DuOb&(l3Y0:/tnOoOdCJa-Pu,QCe-C)JPwc9U-ăU"fdlbL?=i-n\)6,/bEpx5uiQ8f7;?=dsj2HdxHP4pF8*$&*^m'r\E9a1q8L7V+$%ăU"ADj1cn2>;0A;7,?KmQjMeJITCn^[t32voJo[Un9C&e,QjMBXW.B.%lVQLMu*2*2ăU"MNFD6AznE0ge:W[,5)o-.,j,EE?A?InS3U<*4>,a]1Dn6L;7$KcbuTicF8d'qz;ăU"BMg*e2#mjllC5Fo%2nKv0UF='fHK0%7>N^XIhr:mI.1;R9Sbn[n>K;D0Q)K/??)ăU"q)k*t$J#,t%]4.fwpH$t]wwq,;b\_f:Gv*]o\k4b1ededSzES^kCL7&ucvYX)J<ăU"aAVK%OtJC$:ruoE_nS1<pot''ieL,&)0k76#$wT]0Ntd^Ja(qx&cal]nWvPDR^$ăU"GMmr>tf4sk,6I^AX6+(Cw%_.-5:z<h2(pbk[no+(\Ef84_Rp]Sr%44o\/Q7;tbDăU"khk%^aDtB^(Lef,4^O81.dY)\5[vnjA.%At?62,y#V6o&EA,ITf*\r]8d.nr1u0ăU"E'Ir/;^kV[6)];XdZ85IW7rx'2Qt=-GqB<KvN5Oo^$7P,hIUk&ntV&zX,L\9zFOăU"P*Uxg7IeMmPGQ(2)K(CDO5U[a21x,NL+]4^o>UUSr%H(5RZnxA67HF*8,9dg:<aăU"d5Dg[cja8JLa%)X5qNtVS5;&dr+2?c7Qdj6XU2J^C?Z/EX\O5w%Pf\B7A+S<ac\ăU"8k-->>m3WVzWie*pK^IbW70]$ac3L8Aw7r&8c9[zU[a>F'XQ)\+K*J0l'BPH*a&ăU";PD3-:%wd1&7#EkIq4r6Ta9Yu>H=0h3B_tLfs(se>=E&dlCM[p+>aCsTK$lsZsVăU"882ek:$lY\;P#p$zli9tWQs+j6$aa8(*%9OfYK?VY.bQseIF0v[R?jI5D]8Kp8]ăU"N?Yw$RbUgM4(&OR_6vvrKnVQsQ\f6iCKr2-V3AZLbhr7[J&9c+pvmktc:nG)'pCăU"GgEV_-/tW%TNZeb[Vno9c+zu&dYD_[W,#Y?[4c)4ZQ0XEFD#wV+,RqXiWUKTgG.ăU"UGib:*RL&Y1ydJfvNq2uZ->(7;2g^M,1;]))89L&n7;>O/KLEq[cL?HoLzi\#MQăU"8GTDeh9H1-kMnj$roeCdut<fv2HL:*&j.O3\(Fx?*x,qTLPH73:O_\*rIS=aUObăU"hr&<CsXLC:pQh.-$7a^okBk7DB?j,k<]i.Bfj$KR\P&F3PhAJ$4)*?,iTMi(>v,ăU"ml5IF0e\R*tpBPR_-QNq[v%[\[:?^8;cYLa_NRSFM4Hi3/p&Feu?%a-;wrTIPhMăU"Fq&.V8POaR]F$?cWQZQIK&D*5i%/9f&u<f9H>xh]:l%u'A&]h[2b?'_DBoV7fhAăU"7Sio4wSXsDpV[,I7k-j,81U+tFGfAq\fJq=Cv^$akv2g-MHhuagW:A1ige\WKtDăU"&/:5S4XWoee7Crrt/8EVfcBotmNdZi0]L14&4<0ba1ngF*A+\cEI(43NrFZRAzdăU"fC'DwV3fT5kOMhtAl-=CsP[kjq;*>B>J1zcTY)/#C&Si&Gq,n8*v46kEgB1Jrw*ăU"waW>CgNc6?5p$kIbM8Qf_UA'Aj48rpk8m)hDG2n-CV+&4\>4?VqiRlo)fs$(6C^ăU"\(ni&le6)(hk#jQH.p^3gZ0fcpsA1Y/LwvE\e^l[tl3;9UO6\MMY?bUPfW[9t,OăU"RW\kixde/kZr],AY;qQKHYI2)n#$JGR_S,9LV5<A49x\w^%5F1Pb(<fB>K.Zes8ăU"S^W?Vu3?,w-\?feFdqd&p8t/*_MB6%7^su]'c1<QD1Uy(*OKunALrRa8$3SgL^AăU"%/-LJJ*.A1<LTl='\4IfcP#UDjl-(v/#PDetJPw$[RM*v9,jDte_Np[5:bCw/1măU"HbdE=fWMfe1jVGR'o_g]IA)xIcOpM)>.uip7&AFL7yn'QMTm?jdE+F+2x?#^P*UăU"Kc^)?fpg/dx9K<74,q+D=/B0*J1C(qU0?E268u+iNK(,J-:2Y-9fK=zY<EX;iD]ăU"$mR7#u:8;EE59M_88?Tl8V7)-%([QbrDrTXxtT?9A?w?&*4C'vx5vC>X/oSGeiWăU"L1dKI#G\8I#w)Ap*UxVJai:AUM;m_K,.bR4JoI4ZW/0jF9#5hIP\4Vxcv0x>pXVăU"tTE?Rodf=nZ$fJ]G=IsqzN4&&tS(BZ5MmYW_$^-OvLh1&Uh0\I%&6+o.rRV]PZGăU"gw\)Pq*)N(B%Us?aW8u8:tn(u%51+08:.[opO<;SgNjZ;HBYhbhb&]&V$3U[Ao0ăU"w=NWCo+;pI1IC]M-49xmSWo?X=NdX\EOO9Ug>D\#Cq1PDWP$oi$)'g\xu*GKd0-ăU"cz(Z0#:FqHI^-.^Y8:oYF>_\uZ=#k1<S]+h3d+DB^ckP?N%rP(M2JigU$vXs;QdăU"t:Pp0([E?z)W0h^)wLWI$*HKXE(5gA'OLfSSZ/2o%=7L^\_OF/tz3)V+8[cd8[8ăU"n;B/XKS\dHF6N\#Mck/$XSB;w(Qsn.YjhIQ'McdY34UiF8z#,6C^#n8NZRHb<7(ăU"bLs;L8y^vVKFWf<a*OvE*%Dc\gcL,2I2O%%qTA]/[,:PAJ$H_G&Q?(b&8'<A-UkăU"&#9wjgnxptq3mc'(YT-gzWshi*-p:p%N>Ew&?8fc2Ev7cbQqTeio]IGQYmugwWjăU"G+EE1>Q-HWtL1<p6[-?xpL_OfR]w3v-g*AmAl=g#x2%g,H^80a6pXWL4Q>EnnvtăU"b#_Kw<iJDJMX1++DD&^*dXCp=RsR7MnvqSM?eB3)#='q>GCcl3gblQ;tOn)28HWăU"8y_%aN,1+cDgficVX>?oWc$v5bj\-zto=nU3C<I0%6tl(.S*4VrX;((uKE&aIWLăU"7nOP#Yc?S'BN1UX#(:[R2F5&4-D5=S&.VVVH*.^VEmx**rJD[gYZb*e,SYs20qoăU"2C(WWN']s^3K2j(vDcK593br1s0G,CJU\=$Y>se-k7Wf(-SRyY1s2$w3?*D^HfLăU"(L#lxr\Z/FjwIceH[mlEg?thLCM82LG2dYqJO$rP,)Hc=5NKJEFdl?0<L8IURapăU"1Rr3YP=<fjs+vpIV9mq^n9^/wU]6#pY8$p*WqtpBk2'OoZe?ETC,*$YbE3[3o78ăU"R[,'Dww0E:pg83-Cq;S$,;0KN\p6GcZI1XRX*_VhWLY/4YnX#Fo1Qe'>qsIl\oWăU"#dJJm3V9,?HM^X,V.Ds6j$),34fFyDsXP(e?oHIUr%(z8IsHeoxgg-7XYdE*tNyăU"ta<V/mgsCr6^tO)tq9):x2(%v29j$hr5um#\KlmnRWSF<xhufE_M9B$VKIA^\IfăU"B2Q.Y_&;-Zt>=+*[JclbDb;rfGdn'5%J.T]V?MesV>s]BGPw$0Bxg:i5qCcM<U7ăU"E20L?c,FdggXe)nGR&C1Hj^Jsp(7BadBzlmT9$Nq6P(5m6K:?3XgbQmaCA)BEVZăU"k3AVe3]7^H'q6d.ntql.rw4b/C>rr^xc:hg8wo5hFv3rjBvSal*Z-DLj>K[Y#MCăU"C/b<^:v(-<.vXQ*.]COR>jAb?9QSG4cPp?k\%+&uvc$<f8=KHRLSXuLs=w2(kJWăU"XYg1R)HVvL\l,=2-hh'g3:p&9j0alYoqM59<7o1$F?;)f+]VfJ&$<'-mGPY'6baăU"Jpte$VkqZ]p_M+z3l2dSqAHZe?aS9Z3W]iU(,3_'PUL5S:.6X8i+r;;Y[M?1'-QăU"N97:AmGjC1TgZI/2ja$X;1bma\$djde\R>1$O-dn3d$Js;#Zpd-,t=B\>*b<m$păU"fv3F4P_-36QS[<:MS%VBJ1K<mtf.%.AL>C/e[UG['\S(JxiXqKJ6=%eSg=w:jwYăU"G[EkP#g>*>Rhn2^[=vG)RLi>pg8xg2MC0.Pkhhw+iI3/:5#6H[k9ZFK;1]eAc9wăU"HAFyUc%YnwwqunD^UH\.?VRpt-l5w6[o5vvB-\[byZ7EpmBU\c1iTx?tt?6.7SAăU"#jRj\q?J%h[Rq*IzSZ=Tt]YeSFU.GXdU<c;w,Y]6P-I25IV=iZX_=Y(]x5e:?NpăU"^4^pp>g:.E1hIL4NJ??GtL$SCB?'14N;Oph0(usEYtd=st^AbTMgf'=bU8j5)K&ăU"Qd/Ob3Ca%LTxac:>0-E?q.u$**rTF[w#D^'&[X*-4\s7qCZoKsf?UW'QldkDp%5ăU"a*ew2c[RPN3QJ0EQu(LGP:.709PgtbQB,NK.lTyuJ7$Pt+**)ujxU8VhP7FOH=aăU"M]k&_XG.TVed[pY?U+j(FZ#9x'kp>f#$G*uDBqx(_?u/)zHE55c^xIK(BuzO9WuăU"J;scn0Cbl.V.x=&7#s(<<^<;CzJUcW8vVu8*0E)]DSRl49M4XUE8C'aLWWim2JBăU"OEvT052(ohJy&<pr$4%5-a.,zSKF^uNn3GL6pXNt&Kt_8fD_]Ei:H$lMBXL2Kf3ăU"csmw<xuPE/S.aI;7FNZq'T4q1lM7/>(%_2KfW\jU3k\MqwEZMl>o'qc1A?4nC\YăU"/+aap]F)n/a1?lNSeD$M_BI8K&[ADJN21LhG-Ic,GF-f-swLyD,hmT9QI+f3>%&ăU"e;Ppr2WbZ$(lE*?-RI=w$ah+z7sZS3tg*&/CUbj.l:=)Xe5vp\h\2Rw*llOp?X1ăU"b>a0R:U1G[RLdf9)1kF7MO*E:MT2SYE&vMo35$L,._OoTD8utGhT\Bp5#/*+]BHăU"hvl-X_*^=TKD7jl081-kYN/'f';U=)%b7\tVV_<bD70ZdkMT+/bkOno:'6(OIf$ăU"*M)<wbAHE9#]jcdX>S:jwcmv$UJT$,Q#<D)<74,.6kcA9Ie=vJLDDgaK8\p44g4ăU"zUya#*^w_9b&TJr<[=#R^aqDXdvkz6q_q_BwXCAbEB^ppEVG.'S438h\Qj,cF8SăU"Ogz3LKAFaFsGIV/ZOK#'&\18,VOjj*3BJ_IT)i^':ARVOgsF=.:<pAS]4TUA_fpăU"cEEg3.<gcHNT<YWgp*<2>>mk9:TD7V=I'i0kmEdG8JJ94O3l?GDY.#wLfo^'[g<ăU"BJ6PUKKBV:hFM7p&bKcfJOAZ9(SgU7d\3[0p/;c2p$??>I/%6XreG$vKUQkVU'ZăU"hm.M)VH-)VG>/h0E-:XYR7QMA?q0V:HDlR<hZ?hgon=QM1n?t/gM:&+1_hY2OGOăU"4gQ[ZC9dBeIJuPB*QO'a%ISB0JC++\cPhU)oIaJ#,M,<djuC^dhNU1ZAN8Z%-UFăU"SPD9g+D6zTGFS*t+Et1Pj',Mp<hL_ScAek^+mK$>MT>niAgng)bZ,\Quc%_/L_AăU"9_aBnUwO)FgMd=.$a-be$[x[NNv%_nbs/<LmasmGCRONL+a-<vd^W5[(hxpSs*XăU"F.2:[Th6E-51u1^FwmNN#j/SHIemtp'RYS.:f3LxZ-d.f=\gsY^WxmpE*lRF7K&ăU"?4ij1#Hg\P+P\Y3=<4EZY]sbkAaH8nZDoC(OH7KN29(pJ&gFS7Mvd'<7W':g$p[ăU"wEI^QN2.[0og5j4G.rbmJ\(HZF#/?q>^u&<n\g]2oul:.A4fp,uD0/BBanUlbHsăU"nB+c0pLZl$0HWL2kcoi&9D0/1Xf9Cl49lu)%B4U?3&8.U#73jj6;rusK6JR';C+ăU"XmjJtvXcFn-da3L4]lhOlIB1-<i&dtgq]ilxqCr)[?9Jx^gqj0mzsT.jn^$A8(SăU"9NsV^sYo$mP\TkJb/Iu>I_>:T[-=LrAuZk]2:WLb7W>m%QNBVf>00^3Bn;n#8;jăU"$9VaaGhM-12C)UcK;l6m6JAFrY.$a2tUI1k:X94,?gM0)2e,?XUKr%)djdUq&&)ăU"gBusLeb0=_.qh,G_S,J4aqFm\-h+$/m&_;13W(9EBR*ftgrsK'+Y(li]GJ;>bQXăU"'1uK2g(76k43-^Xh1%afe)G6E7]G-x](adzQ.2-4Q#,:=PU%3#l)3A;-N6]QSgWăU"G7]b^FFke-&L_mGNW(:Q,N:a<+yMKgUkZ8QF3/G]5rcU1gb_hR3WS+W\\8E5cZ,ăU"p%725^)8Im#'QalDSx,uV3t*K=LuALg)7<uN]H&BM<NLNG<9OtsX??&G:nWh^GQăU"g).Y7\5J<H4p30rVpYi<s[2*xwfafJbW7ECU:JXRS;+n0[kKJ%Haph(mp7mH4HZăU"bYaj8Np_7Je3>+[Nm3wX4neh(wsWgbiUUhd&+q4*Y7qEMlb_lFD)(CGcw[%2b8aăU"_e<2$*.aLl:.Kivo:f3CP=JjP%)>_Vd-gmpkuL12S^m4'0_-;:G/Qo_nTI7e*DlăU"[BI]NyShB/JNgKg&Hw#U)9S*mr9Zu9<lE(=CHv.WH4Bq?f:'&&Y+rnu>_uTD+9UăU"/zl)Vr8j__W;xKQ1NZ711+dmInPynBQ2,/WpASdc8#M3z+I.816gJ-#Z7-,z99măU"T/I>fQRbOI]cs)-GL$<n]vU:28D82Uh2+9?<4Z+N38[:5:B%2GJq9]'lN(jpd)<ăU"FM/tlMhv91(p]Ynb>5T(K6KwIu*a)&2VD(eE%cI/7$l/pqL_-r>7Fh%A9K=lS4,ăU"/hO-SZACqJ%aT:C;:)=jj(l_HbD(UDF\5y&co-9-R,]Y=qtUs^M[ob+d;y*;09^ăU"Q*7kBu$ZnQ'xE]jT&TC04dkG1t4ZU4v0/#EsT&FUAJ=Us^cCF3%FGEU$LLHBWVoăU"bkp7il<dc$7kFB>])zS&#ZTR=B&y9idqt(u$vmEliRbwOtmTRnIWaL9,*pyP_o#ăU"]5Ow?d$,'rn?$O$XH(EAUAUMW>O#X(h&a8b9bS*BLvlB9.2o+w&=EXP$B),bb95ăU"fG4be.h_((Qsx(SAF+'AGcw^f\=hP#K_,]I>_IESh%\kgY4dL.CJ^,ai><AU5O7ăU":YF9O'7Rh$^nIY+k]J=^i-CnPNR#YD]$09$*bo9v<;*LZ2NK:zRfvzj]/Gx6o%răU"rb^9Vhlcfep$YJxx25f&Nak_vzJ[M$'dOV3ek+Zud]3quTZ==eor'nk^R5]UTqnăU"TtPPa-^c/UI?SV&*A_P(_#qMUL+ccU^I.y:lVbPA.iO_?sGBrBq4^7Iq[f;4>f<ăU"s);o+E17ihO3o<d?V_I>oZRtICegPsb0D1ziWCccV8P193gJo$P.=$-5LFWgA#$ăU"jMJaC.M>stJk\iTCOAFZZ4^TJ4$G1JOVRQBhXdTEC0derk^BL0nlI8o#HY0hyd$ăU"io?/R+[s]_S[L8I-k*k^4cN-HagJd_P1GsSG/8YlaBAiHZtdACOGdsJO<]74LV_ăU"j[wFb+DXA%fSwZuR/=bXX&^pJiT=mHh]Q%nLeb,?i1=0_]zW)jVQR'a,5hG#6qKăU"Cq:U-;-8'k-<Fp_1t/Lu_.^=ksxd]=u:r6EhOTms-V:Q1WTR\;r;cd[0Im[y_6kăU"lM2v3OQZ94r4+LYE%1S1.uQ)sIXGS&2Ld<so?5iY%ON/*/inbUhHMo6)(+mH9>(ăU"3FSCEanBXN\A'.DwiK0=*X%;F,1A#*AlIC\/D^#)b&+)1bf)SqMh-(q+*Nhc?$PăU"lA#5laA2F[)bTT'4(HpxR'(%5p38LwQK&STzRE0%>-?(%4m1AHL8d>)29]:%CH>ăU"dvD+^(-oh_%Z'YS*K[S&#KBWNd&WXk=YHs2K=$heMX3;)ACGV'E'sc'N<cK19(8ăU"i7wf[N=OXEns$s&&MEOg3UtpK((<5F-nBzQcGup?CFUE]RQe4m22857q4SRY9,+ăU"E%3.BO=tm%uML+(3sR&hXG,47g7U/H/_$laQ(&fhgk6f*Qx.=%<5U(TRcQ+xN&;ăU"jj(H[O+,=],a%\&8]h&X%>_24i./OpLOTncwv?QLes-Unxk3jaIdF*I(K9m_klkăU"e>;S%*1R.b(>8AsbJ%Le.qQ0n,Q]UX4]7>RH,_Eeo6KssE10F&Yuc_-<'[CCy/MăU"\ADqAm:AC/hA-1&^u9UBPU[V8eOM-$%g+<rp3'#mQ:gJl76jG#VAa5uGQ.+Xq#QăU"m>;ci$--H2a*EB;0*>2%%4uH,>TEuuC>]gV<Z[nJ+U3Lh'^UG-RMW+99GD4ae'IăU"</6mJ(e<jk2y1E-,\f#K]:KGZRsYbo&lJQtLMAJsg<UbjG.FQtS=6>c0UiY9((.ăU"YpskldCW=%)mGSTo^e=\0W2$E:pt\sjiPWeo,s49CHcy<bIu#bW\($L1Trn0(B5ăU"vCgE*/MwK5s03w<yLk?2Fj9-k=gEZip,$8A%oI]+ARN'>PPdAYgYQ?scS.=#ZWNăU"YBz><0%<#YYklCWMqHYnX4B%424Mq=#Z8lQOqP:HI6ACNTP*0*/x&d$:WB3LiHiăU"(B(Bf)j1+wh^fkA+tJcwD;'+qcZk?:YKQ'Z1Pd(W5X;'kb\P(E3l:VF2C-m/hK6ăU"Lrc;NR6#c7V6?,H97Cnx&p]:r3aMp6pw+5kG;pW?w_*D9uq$ZoZ73)6]N^Brp*0ăU"?tpL$>n\cU9Eef6,aKv3]>+CF],ul1DP(nN3AK#-]K?35f\9v7>-3XB_F#qJk30ăU"uX<I*+RV]YD6db/E1\*,J]bM_OEJ'16dZI\:R>e:08(]I5XE=22W\BdT*i9Yw1NăU"^S.m=ybI/ji^$llkCC(NhN)6-vT91&r](_MfpHZ95620+CRH\7%,IcOqo\MvwV5ăEND SUBăSUB V3ăU"fH#\*?YJn$UU((v93PXq\d<56hDs[D$*9>%:^-'aZ:VMoF4+)g#d3e-^GnElWnHăU"0iNK4^*h$Lt>Jd$S2X/[_nBmUQDHGq8vZ$a^.Q:*s+P/SG?Bt_]T89\-B=E-:y:ăU"JkD',M*XM;sXRb]Dm;:Kg6Z_Vx4UADn_/)hTCD^a?bzJ[7=j-'4Y%7uox'js8CrăU"eI(bX]EXnbRlx&<':>8%Yfc6LZ$\g^gBDgRf#<wcP*uH00ad\t^#VNA^9^WWT)uăU"QgS.j\rJCG//5u80Qq'da1)/n+'xYtmH>R;aaGel$6aQXS\>&PcypPGn1D+*E?PăU"921YGMS.Wj]VS&+(zoK,+&nr^+eUoulN0UW/P8ayIZq5LfbS3xhQ#jk:]esJ3MDăU".'sape>NcKhsqA_c5C/u6t3F;y8.m0M7?d4su#SZSa=uHZ&o:8i$SWY?jEZ\,3ZăU";/2WANU.DDrz:_-N$[w=SMnVXZS7&NS+z.WRYbNRBSd*&o?Ka,%m/XR3wtl;0$TăU"61MOu:%:MdbJ-,$S+b7]AIHl?1<nUGt:oPx=cpQtIs:9_+Xq#+4q\gg>XJAS00păU"_ii(>y9.Qt-h6>E_KuUCb173w\\xVImjRW(_xw:L_k,/TNVU2,YLae3Sy32?6hFăU"^XJ;tt=9(T_f>fFuji]wnP[82.9T0'V));\e5a5o3h#&ufE,JUFiSQ4(0y%pj8(ăU"KU,ho-Xb=I)&%Tc\m.KL]p\w^]kI_)&7DX]^Y6HdYdsivE.)sV#paHNZQB<R]$)ăU"-,1dV#ir-RF2\l15dIaLG8ywE>ozi79KlW#T_fRVz3Av*KwMU?MS$3Zos^]ET%TăU"xUAa<zD>CL%GP];s=l^A?+[^%O(,u59QA9UdAPSROB)NU#N^wZk3#v+Us$R%'K:ăU"w;e#pHvD33FkHTFpSp.DzB8U_S%e>]dPE,,W_v&yioHS#-v?7EwHriDL=kDV*c2ăU"qVllY7E3oU,(O\.=c+9[fCvgR%juIy>gkdUSF-Kt8G]XpfGgG4B:nLyTR$?lgr'ăU"FN>uPZMFEAG+CZL#[7Y*ki:1?O_brEM3K%s5<l,6==ew;F5f3:V\Ba9=&Uvg-*dăU"*PZ>'$g8cZQ._DZu4qAr.Xn.UpNJwUeQVwnjc7ABF]m86[Id'0j73_o=:+LPbs<ăU"Yk6n51OoutdZW7,?%d(B'=8t)OoMRYo\3%B81vvj$VFijTl_8x%&U#UJ.iOtS0AăU"ND^muE5K^f^A7p2P'#;v(u*O=VQcIOC*;n5JwOY.x4?gfVRhuAF$*Az\^huKG%7ăU"erT,Wh^&&\<J?Ea[akhd#8Gl?=[L\KYNo_[nSAYGh,?ueB&I3#<m3C\sK*l^m_+ăU"#LdVy-uQ\5l28a?]m0HfdFUmFTD6PalW&S]e\uCJiOJt7M9%3c^=R'cfKF3/oU*ăU"bQydc+m,AdMFFCqxxNkFr9.]4'Ws9_O4=c?Id=27JtGub&D*5\JB7hJ5*EyD-IvăU">CYPxZ6q+&m5a,rU#.2PFHBbNm9i.#vRKYHh7mXx(d+?#J7#oQtX;M:/MdQIf=)ăU"\.hM4=G<(Z-RhL:EtKGH>)GO_lP+BC8%i[9E+::<o:+dhKo)B7u7T&G4?OQ>(NbăU"FhHRecl0,eNUcjFr8xl7RV$XD\DMuRH6-y<J-NT&7mY7(T$Qc9c?\-;*OFU/6j.ăU"nP+/2&f\a(Q\F3K[sDW\o(Rl7Ax*eJpXcHuqcbDONC3K(2(Pyh0*(*qrNJ-VL\4ăU"sv&8X1J45npF^?[I+DpIrNQ-\V%1.5itEDX^-?8g^cX(^eDs>cD_&8;(%j,8og;ăU"FTO\LR#Em';r*Zadjl\dD?Y?DH]jOIM(Iwj/a&x1BJm_'DSYAc%KZARk7RG?N,văU"u'J/k2fS#z%\]=znR1e[MA5g\+M/<Png#gZe,dU<&DZKJ$Ixda'XeXoLMO'b0C,ăU"&CoQ5>HUIRBI,mm&2vu_8xbrX=:VxDaxhDTLmimX1zdYw,$VbxK%KJM)^ZZjh*3ăU"J59A4XdC&AJUL/'kB4ej'w1Qt*3;?j%J$,T%Ta7I_.1MU\u%/5uaVA\QN&'7MhIăU"OS*FK7Fh:5(FR(#H<#F]*LrB:6^F)d])ED89_oo'mnGPrH*S6r]nRRWOwszrhJ8ăU"pc#lcHS*Gtoi31kK7)?sv#M;vPF&kh8t2$g1O9[]yusML,9lj1'DvP?zn)PHT?.ăU"Cp8NrLa6kq9Z&tbc9uGG<1hOJ5n.jr]1ZfU\b45VB>P9#I;At)pTGF[#]R]tDnsăU"2wrJCJz5pqn%b(E'.OXn'<+7b2HG2/?f5eoj5_?pCYu,r>N>=fe9HgnUHW%zkv#ăU"5dB-/V2I_LZHOK#gJnnikSa,(3vmXtD#X-c.%Cb8YPctSexWiFtUYqK=jH4TAijăU"V^7B?%xnc_\0wpMs<F?WtjbRWrTBsaRICJ<;h-u+GO[$DM..v>M2tKV.NT.M8R&ăU"[\A55YOaxC5Ya5:?g5AjFgvAX;XccOYdQ:6x&Y>z*\%8YeYJ+sw%_4pEYkB.$)2ăU"S5),JrbL_7t,(9Wjt-,[^,p4MRO2#=mKb+uQG$F/ca(%>r\vK27TiL,/?'?xOHVăU"BTGm1T2V>;biFOmkX?,c0fNAECFv(kJv90n,)?l,P>TZvE$^;^H*6z1]hxL:.&^ăU"SW>P>wAY^k67jqxZ9(93^m5q;ja[-#MccWPOBgni-Zba/)'Q)?XKUg_k]6#_m.răU"<,3T6'Hkz%u)FNN&ae)Bpk8EY%C,=UM3)L\d]eVdP7q)L))MqJTG8tls+YOph:SăU"U*LSySMc_hlqc_NgPCtt(WMofJO0BB2c*n/N15AN$/h[FK\k7;D\^k*4VD./xtZăU";X+Kccrzh=Qj^49/pb/>uk[8,S-bQ8OlY+5u]S_JnBxpLBhWWPzP^EXr?mehch%ăU":BnSJLjqweHOfWWA2okO<U?nFR6NwY)Yy45OHrOionsOcN]sp29U,P\'/tU$W\-ăU"P5O4whFZ.jmKk8k;?Fm[-y<puXZA$s#Xe\m-0Sz/FcHk8pd<$FM3r6F<]6<R730ăU"NbvvSxLMvAP+>so^(TC7e&DjQQ[,TjZ'iJN_(2xPQ_ID>sOs2K]ENVZ)iXRa6>BăU"4Q3[p*5VcxihfH7Kns/wDQ8FRfnWu#$.HAybHlEi]L=\SkewpFaucVF*HHddGQqăU"swHl-uSZoW_ZW,mIEU(O^lef^>tU7<$;O\7c8uM+v=zlu$[:bTNVMZR%TgLkclPăU"YP?Uq5Uw*Ig*D[csM0l>c,pED;l/Bsj]F8lT1cl.Q:WWVR=BC:t#k>U#3BG&p$păU"oZQ9MhW$AY_8Dz]DfP#&iE)Ywie<1mUL/z<Vc81Cm<Xp,Hz)6&ltA)tv9p[ztBSăU"&Il#sivc3_f9r7g5Zo8jm8=j[<Id_&'C'B=/$W,ihiB^i]+4S'EKi+&DrcZ4;m7ăU"4[4sh$k4dH^2s):Tf9*n7XIl:No/DQD]#hV+F_OFdh;$p6c:L#tRoQ;;qyhF9_;ăU"w'mt2+rvN=ikXU;vlEc(A$;gyyB>$#OVDo<pHWu/D]rWqbB5J\A5p.yiHf5uZcjăU"rV:4u#8YB<m'[HRM10$6O?tBd;H/wzFh*6Ni](qg-u_&$t26jptiv>oZ:uR1_4uăU"*Dtk'Wo\>hOqRP]4OLQstGu;%MJeEqSl)2$Z:=B;[E/S-^J6xJm8OR./b\vs2tEăU"6^BZu_w]ZocyteHmavtJTWz4ncLfI]ZM+[:v)fbRSI'rhx*:wW.xt<*FvbLfds]ăU"xnuTE9_Y<ypIsMf4e$3WE6q]l$P\0tVHfkzLX*5P2i$4DjG7'wz<W%W%5xJ'vliăU"a.E1gNTiH351ue&SgA?]<r-u8r6wQQPUX(7y?6eqqE\Ir=ageV4QFqvp0V?wMr&ăU"YQ_Ebo_Vnm%EwXl;?RxfgFJ:5ergWS=G<fD&^jM;jVoo6m6s\d:dPO,bl)R8QCjăU"Cd5AaNCtG8p51>'I_WN.7'L_y&y\V+/F^/hd*=5kU=Tkt_Bt%^OU;9#+a4DUd[8ăU"dU/zhftG\+G5fElqV_-+<jbq%]]Rz_fyLX^;6?v)xf:yqQf#xhaol\2pu\mqA#TăU"-%0Y,t-Y:K4OhfQ*f\=boVqSiaukOB1K%d0cD&3[F1n^$Ntgi>'Vh^W-sZvv_rMăU"zDO6;k1>t/RukUY3kE8Agv5heamH:9':ij9:s)X\''#/0yhN?V)WNU'TQJ\XReiăU"'[\Vfp8KX4+XxMcurK3c-GMNoL]]94&sSM%DPpgZ+h;&:&c<I#qx_)_p2i#$[clăU"E'9K01yY=CCt<K.TPs=W$OV<h5X9OPbn=qZaQHkTb2m;4gXVHA/Gh+Us<ngLK:&ăU"?UDTYpRe/hUH_hFkfXz>iRvU727r'XPG,r(,RRnDM$)w7B;\^qDL3]R89H>JIsmăU"y[t3,h-W;yDQ._=i]ioz4nr*F,UPmXrcemhFFLjJL6k1e4I,8HJ92^'V$As)^,eăU"*7AI,T&hAYh>l=[5HsQxJ0Jty*mwHuaQH7]ZLQ]x+NB7M/f$CH0a$r,d(Ua;KHLăU"&.^r:CL_M2nl6W-''YNIgckhUQTm[^X/dBL\_,7>d,,XauTgN4uL<Rrr#Wi$iL<ăU"G_YYvMaPx]<72SRCJWhYK'F3Uk4_rwxNHf[YVAD&tn8pK],Gk+diSbBL>1=82lVăU"N?n,Q)wCyMMCA#PHJIAe8CKX'qNHnV&r2QpBNe'^BAVX23HUTB9z$<njb)W&8wiăU"sX.2QN]pKB^H[V.*X%+(IXPsMDMrnk.qhHmko5_,itCsMOt3::upHnX$JqYad+^ăU"VN:t/+FZ;'KVTfJ$KcV3u%n\sZi+R5A<FVX+OD91\:<p8Hh4Q&C3BNCIJK/-kX+ăU"l=)l%lSFS=$W>jI5[$hTPS)_4J3b-mMHszXT5kQTR+;vm<acliNL[TvQG2W+5KUăU"3iu<]8%jjdLdDdXW9]i;*s>8v8ks4pQUI4jFE9vuV%Uv1N[_v7ID8Ac&pYcYX#<ăU"36&d']x'XakL\hsbuB7MiEl8a1tphu/7Up^ciW3?PL&hZM3^hlBL&A<FvJk6RnWăU"^ck%HaL/z[*OF<h;Fkn%guE-Ex;c)PVGk73)bP$\(46>lg\wV<_uDL;Vs\46w$tăU"&,nH$#Yu/x[Aca48kq%#w5h<Kr\Gp:6M\VY9Ww2(LagJZJ0>5xD:27o7Sr2a_(0ăU"lovaedZ[h*(lN67f\4-6Faea,n8CNi]sxlE^u\JE&5Ivg.<*<1=,l.+sDD$pLL^ăU"zXgm)6f9,,LBE6my-]TV7XNm2*:HUtb$\nYjHfwqvN_m:D8.cp%Prn&4LTamQ%SăU"iTeG.[-6h)2U/A7Z<m#4X#:o+eVGX$vcd)6'oCv_0+MBov(L>^)M^5*_m_rkH.făU"NVdT?(?kejJp9^F>u,2LT]5S6kocW^[*<Q=&MH$9l1^B>b:QIKeb8[XO#:Sj%8făU"prB6<S\n8+F#XK_4G>M#xB?Qj'#W=)m5Z%dx[u/Zuy_;k^glMEkGs1$s\VCsH\'ăU"Vm;lY>JUO6&MK$#<O.=G=YQN>==V)7AyK=9sSsIEtHu(W8,a'\ebmddoBokJ=p4ăU"hlD'dd'a7Bef'wAO4FtC*j;ihT;+W+'qk_X,.$W$5?+LsLgiZC/.=^?%Nj?#qYDăU"DJ<%4<GaPNnhtRslL&SX$k'CKBfbY24s,OQmUQb#&PA<5W2YLl]lY-BQ,F>?#SCăU"j%W%3'f:i#.'c6iB1s6>MQ1FN/Ak[t^m_TT$;dvNS+w0>C46Qm51yQIyLI*TH=(ăU"R_A9q<n<)E\oz]D:wd_A-<FMmdom>o]^\rVMdVee4$IOF6WOkX,),(smSR9OSTtăU"Jy%*-d[LjoHVH<qWZ7gEegP0.,i=+24IK(<>bIAM^cBrFO3/4T)dgyaU?X'a3TYăU"0VhrH8=aU4k+V\s4DVN57)qhPvH4eB<iP\IEO-uM5tJbRTp=9+RFghl%-k,ObLlăU"NfhdDv0LdgoM0LmTZ'wj^i0?_jOiSQlSIE8L]8u_znDZ+'5_c>k4f9Qe#Rm6E?<ăU"^HHi>1<FzES<kZ2y^C9k;r0lWB5R/gwlB*obs>EfHD-is-[e+c?$%Zr,ulkvTuLăU"loXDH&J_AU/(JQ1$?1ALG?v;z4$8A]YPH&wMxPR7D]+M29#KH^cL8aZ>V3qPkI*ăU"3S^pj)vdrFRG$%dT_7srjppe$cTn*mh=59f-T3Y_Y&m2R9E-l>1S'=Qe-Y9Xeq*ăU"gT#7>^'8mZIT:8X>PqIRT?Ne/n$fPabtmFIs?lBk8djzt4tjn4Yer29$TD]L\wLăU"+c;^6J/YaUT;QSh/;Ums6hYFR<kh;9HNBF1SyVKCaW,7u,j<ap>WUQZvd^fh\d%ăU"fqq-&6sd(OJ;/:Se>MB($I.mQ?Ge_4\pN'aEO4V)9C'\m4c++W0:**94]ZR]v<găU";xtr=caw[?R9Hqlf#6u,\Sr+fk.UiNhpbZLrTp2%C/fXH(?8UuRV[FD_:/]8f$7ăU"(?ipj.0J.Y^_42U^#W9o7ge5<u%XIU[q+?DpAB80savc)S,$6;jJH:VT]vK;3S=ăU":H5$H;vBA;.:Q_N#3R:h?62JKYjqb(oFaa6Y./Q8HQNd(fc4NdnU,EeG'=)<[:măU"Ogp]E1Uof6UoVR52k^&mNY$kE_Sxu>)X70[3VpLhUV[(N_yA/nc.a'OD6K*LfexăU"x,88?okcO6&E83z06m^nwkP9.oPm;qe]hSJZN16aVcAkN>.=&'#D^uxE<Q6Kq+/ăU"K.u$CUqX=#q?m/YNh<)6v$Y](nm*U&f'ei&no7HZ[du<^yp4mPl(TULd0<P+Uy#ăU"Yg-$-Ap$.gIcpd[HVRfq.6gXlK%C.;FpP]&/'W5D&N#;/4GkQ)Q8&Q*Wq6i-A[răU"G1HPga9ID\$3Y%$fbH\X[x&CX)9^nGZ82Z]\aBOh*Qo<Z0X;gz6&r]lLUNssH#FăU"/o.Pq1;UI6>+DFK]W9cNc6%?&nRCST(C/oO-%,m9H&*h+fE(orlb)WQo2/AN:Q'ăU"Pa4$vFNwf=+IQ\7]?&#xKu9(j9+XlsnrVt*YeGX$n]Lm$p?dOj.9k0c88dLdthzăU"EunLP#G_:7=QT0K1-^qeV),41c$9%.(%nGm>xqJVfg_Opt#=6Ks*DDk]mI>,g].ăU"^N3<H4uQmpu.OCZSC*Em1ncWk\;LioIjHN#IFI9a7_z4pC#Akx4d=K7jZD^ohScăU"uit88DF9(LCu,lBA516CIYupnZ;5K^7C:Vvol0FX3lHMns;*3C4/2'J*jaR+*l>ăU"vO*x'n,yGT$aA;ZJk]cSeV\YE*IHse1Wb,N4Fn%taFoKPK.+PfZcxE+,Tn5OfuNăU">R<)Pn8-Ui[/kay09C[ht+;rarqPeC?'bCJkP:q*tK4&4,hNWL>r&[Q:tsnZl)IăU"t+Ys.;Ic]LlLX?0Lpg^aetUn=&SxMO]t<LdM?nTwRg%NPRd31MvU9jCwQD'UNIiăU"-L3vi#cjHU)V];6t+'g/rD7pPlS&fh5-N;/:tKVJN\w+=IA:z7T'.;b//^'Mst\ăU"-EGpcM\J<kjf\f:b-<t?n+fe\Xk;wp,[LEbxJ;Zf&o3&Te*Ei/?frcW?0u:NZfXăU"V/EV:N;'P'5vYK'<G[;k'pv'G,<1T_l=VF]][/rhO'k6(.2*Nos*#dQSBzBD5wWăU"C4nmW?Ulwv[cf8A4#kIfrKV^JFHJh&*jzGxMZn6<sqDi2)[zE&8(MP;Ns%X$m]=ăU"k94kj_8;sMD4'X#(G5knom.gThn0fqfSak4?Rq^]ZxNi+A1()_m-[J=yP]U>lXfăU"uFGK4i0dE&qAK*3LYBK))-8J#uPHtYiPKE<1m2MH^GUbAgRgDO,puODufU%BDKXăU"oquWd,CYrcZK<k?.vrgo<1uc+3AS0_VbTrz?:[.\m7a8>]F:ZdKNY7,N'm6*s:VăU"\VRCZtiPNe%^JmZ5p]Li4EMsD=?VHME-:ln&?PDbzO^<XZ1wOh#*nX.Us0HF/9JăU"\p1-E(?2-5GCZ=w8Uca+6XvU8M^y>C/V5m-5te%ke6ndUZ7E2dgMvN3,n-TNHd>ăU"6^Bh:pX1Jn.Pg9ai0PBuHb1GmUI3Dt3tir_SCR*N:Y>jTaQ/X2dk<$h,86*MADOăU"'m+nkf1kVr)_u+n8qpPg&[%y:ekm1*hxYB/6Hkmai2j$Wr\R,g(FCgXi<zejlaeăU"cmK:[\E3IH1b3h(\sFD([A&rXTKeQ%>=it:[AP6Oo/-H(#x%\5LjYwT:5&(en<&ăU"FCrDB06hjj+MmUXOvR*f'*rbX^&l=Zxu+N+U9$/\LKG4p[x*<?4#96avousdOXLăU">mBUasQV8MH?)-3'E8-#'r?9..ZU4/67AD23I#llUlN4yp<jY;2Ue\fWeS]rVDfăU"PK\X05'=g_v=+rIfSLVb(gb<CDdzulquiLn6x;5hVd&l)(I0WPtFF5CWe<qIGM$ăU"O\%kB9rZJNbs>-D_SE/r6AgCDSlRVEY-[$fkd>b<'rjY>OstUDSCwgPu:x5lQu%ăU"FX'NR4J\y2aaDZjAYKIAA+jkI'N+R3:hbdC\3m;-_e(S<mcPGKMD&My^_FdeB'UăU"kF>INWxD)Wv:d<2v:ll9xXT3rqC=d&_hNuHO<qgrX_+biK3._FX95#pJynr_ThLăU"6rrh]Cu,+.ULrm+'l6NI$JW=8\ul=o<TNclP,D$K,'X6H?Bg?zda_,Nhf>llXQuăU"<\+i9ud+XS^f8Ztm5(;xlPsj_v3tuIcHG3(k*PZV].TUqKl4.4t16)D'fZFe;,năU"QXweRr=J:x'SV,%2d</%iW5wSJOw28HarJTWH^sBgLltpu_:.N58-JluO:n43K=ăU"C+.#ZC8?/tNVOkJK1;'e-.)<.4pp4>OR-qf,S2'=w$7,$(1d&OT2/NY4BFzT5:[ăU"QIT(P&X)>L,l6HKB\Zv(^>i%b8A#AFLV:HlFBGNaaA&xI*71mMVCZIuQNGDlOlZăU"Sq*G-t2Lr:RpZ:V7u.Sf&roe&wODRITpMm?VesNi2n4sA'4P%^tIjxHlDbZPKCkăU"&oqUBI7;HH.;jq^*NO?EMYz?^6N^;iy0?FlPl%?(wd&4g5E#9Q]ZkseZE$VwC5făU"/T+XViMK1<iqLqSL1<W2g[fpwNr1:p)kKw^KhtDJlD.ZWnod1gtD&gC%zVqi+?hăU"'Cco^298CL+vUj\qO&L,^nqfLc8,e1)gWj<FE5I0daIj[J(4$1I*kJaK1H3Kb'kăU"GXHV3fF[-S/FY*9,(_Cn[:I2N_%<T)sexxDJow3hZXcEKcG>.,n4mVldl^JP-&+ăU"O?$P^SA#EL]>6vd+sEXdZ)tZK)hfG(i86d)AbWo1J0bB9OFRI%j.4xahtY]?\f8ăU"TqO$Vprql2OCvL98*:t4*jg6ibrsYN.L<?mdOg3$Xh4T$-Kj-;<I_Ux\a.][;P_ăU"(I<0U,hXJ,WXS9;R9-a0OA.=J&P=AY=Z/unqBDIbu&E9LtkP&30.wdHmEla:US-ăU"O#L8uWXA1x>t\p(Q\rjy2-,Fu<>n>m:,O6o)wjP*2$Wp9fdOz,KHQM.%6kX]H(\ăU"4JTx6=>xTVcK*PDv\Ek6b9wN2RVi.A<3M#a*Vd3+:qzFFjk4YWr]SHTd9>IrfZOăU"uoh[&:jvp?7eHbw6VVuoC1Hd2kg0$wNY1g[/0le8u1>RGDL7L[ksul\'$;^>8pKăU"6fh1E/#:9tzhLXPDH:i&brgk:dDD#_QT$h_'E+nMsRnO*H&hC$GAr$^HZF&wau1ăU"k-V/nE9w;QKW)N5SN(9$oeSShBsJ5y>bglfh>tFMZf.Wjl8NI,0g9hmR;r6xR(aăU"eR(#d_0dg]t^_'\7(34uind,(XM(0$/EHk-d.tz/Sl\7fK$]'3tcGlOoFurjYp:ăU"7*87hfXB?>Tn9P.m?,]'PZ^4'n6Wc9M.%d6:Y+(r;g$#ds5J)Xa?Xi>h%P3A$KZăU"5WX.nnJ(LVlD:BBqHG6q'M*&1=3n46+dPHv=nNm2YU3I>[SQ)?Ood-XnDojFp'8ăU"I^:*?.^d(a<ZLn:LF2cOef0ukuvnn9X*#]C70mFfYw=qrIwLbvBD_Hru\N^3,1;ăU"+[So_^r[heNm]w_r7X/Jlvu4fN1aKAhW=SN]1iCIK+_>1+cIPwd9_g%MfnH%Pn>ăU"zM,H,k$<pFxD&T.fJ'F]7odcXyfaV'-Dq\$jUMR:*yRBK$]>)?rHb+O$hl%rv68ăU"7;FA03mF9e+H<[c^Bv(o:]ZHd*^jR%i3A6-B,Vjr+\A6s.'qp]kJ?lIJlgJ?.l<ăU"DY2lcb,d:FG6jL$kH>ciK]]ydASs[Nc(Q]$BQDvH)Q\i\^5ff>;1uzhB5u'[<9EăU"LxBA&gu4g[UFW:EK3Z$V+gplZm;*WU,f'kfOCX%Dj+EL0yW&S0lI:S9t6M&6dXHăU"ku#w2HqjDS%zMn[dZSnT,5#2cF&mjTF7v<afnl5vZBtCzQklEBPH+#5Uz2aN\#săU"J6jPl0?umO(Gm?b5mgU[(YY8oVlN8q^1$]HL3k.YYV<jXTq?C&'jabkTMFsHCl*ăU"/u;t0SxDQu(ruvF$PKsMh*iw)<;Vvo_l$,4PF(aiH#riKA3U/2X2Y%iHf#6EiBcăU"&:Y6X1d_M][N>VY^a6P*_kyXIP_)<FJ+S2ZFL<DH-MG4>O]JD[WOB<=U,>+cs*+ăU"V>2hwU$,-3]##6FfVZa8g1O9&1>8?ma(]/6yXK?/mhBpa>mW\*(5<<KMX)N+oqeăU"kXl^WCB-x.YROA38?M5Zhc^sfX-Zr?TUT2RUsh>U7_bb1RbtQ$Pl:,fuqes]QsBăU"04o'9Z]A;f2I%ogVEY;H(Q%8m01(V:4n>7vZd'$)JwmA0Br:mU.J+t<#q\MLf;lăU"h(cAu?OsauQq;DKwfN/8,mr-s=&tSp3r=<Vt7<SAz'TsK:-er=TA[IU2u4QUBI+ăU"w',ajZ^d$uOdu?eqTbaVc3(ky+IkhP(35MHzLd8p6[3Gw6NbTZC=+\>^ND'p<6dăU"[X]N^\?$aiID63Ds(^+'=JWaK)vM88+,B]/lIXjR^R\(3l2cGIRhvtEY./U:FEGăU"=YqBsUm5\jLsNr9?6uRGVV>9n\Gm^jLlLh$5lU7f8f/\.ONHGT?1#M.>pqM:8(#ăU"Vxm8qhsM7Hy-P\ciz6U,-:^k0/u#mYv-]e?p-TCXt$GkHxsqX5u45LBH$,srhZPăU"[8L+I8xwQQ[4rE+=W6kGZ\_2[ckNVmjXa\K/tChYdNlubaHW%t>udGf.*CqHnfgăU"H=y/ogLp)Y.b^fpr%gVS:$KM[++Di7]ijXFMKZDT6A)_$+nxtv)=5Wmh>pp<rL)ăU"CHS/X+uSgCjsd]fQRILlz=gJkc-p26-QIUrTM%4)22-R)2M0U*B\BDh(DZj:K#OăU"lxaHpPsVNVucn0&bE8>nhbM>Qel]if)(S,clfTzEE,mgZ;mG.4A?G_061k8H9_AăU"NhD:YYm?Q+#tC;+]ypb5b]-a.zTj:1K\uKcgBCYW%7iPZTdVs0(AP9_EdEZl]l]ăU"3]U\U7tx#Jk*zs6*tr3J0Qo_>$CrVgJp4RN=zz=q>=)HZCJpl'WvX_Q'gZksv&TăU"nbP:RX9'X;>o:O&llSi;&+*?1Fi85weWa-sTdQ9Y%.li2qQxta^&6;3S&e$RcoZăU"G_wlAd-UFd3n]KKv+LOpF*:Wa<68CTc0wd>U;&X$v6lPqAGg\l-RF(Js^:bw'7XăU"^h$Z_c[pw5WeKOnD<.dlp5F80umeSs\DV9WrMgarb9pZ.W##n&)h0I6o2<jXN,VăU":N#YeH>Ia_5GQkd#nO7D4T^ZHb;VGPO8d$dY<uHFO(8f;ww4m4&eX.fWz^;EbrgăU"MA?dQ[a[7a%L;A+0muKV'CGCWbpPX:2?ZaRq-2ESUP3KbiawvEjJe*aag.WaHq<ăU"t;/9-dlv6,Naa*?(C,NEs$N<rogtEIHcF+zf-\Nv%:?#ll-0DYL/Q:2QA'uW(t5ăU"Eq.j9(tkF^?0r1/<[sPSOghqRzWKf((m+meP37bNoDg4IkmEQlDz&IlR:/qE5bFăU"Y#etr8jYffk7s\qDeg'PXw5Dy0'k#y']JKoq8UD$>X6YF(aL3L?Lq546jF>De(măU"3xf9R[bZZMD)Av$erlf+&=OXrj#2QrqQ\#tccl#:ZvEf7Uj:k1)[NpNA2q[5A%&ăU"\W2F[th7%twku:ZRbDa9e_af$lLzA]?b5-jAw].XaN1yje.>hbvLmeisfw+^sSmăU"D4:Gt]=%MKud,9785bBSdSbx5id0Fb_Pmp.*>&dG]Zm6.%/*H+fB8<5^ux)SfPnăU"F-nTFa0nTb\u1S$S$RJA5ifc)3Z?o3Zx^2no(JSzGG,\3JxA)O=[z[dPL^r&/vSăU"UCd7785klotG$iEL_)GMNjs#BEI/AG\36w_jwVMpG>pbo2.6l'X70xEWn^O4Lt5ăU"\rL4C\q80=HPaUHzdN(r]>Ws\>)*dY4]DSQ9Lrx^d6rd%\sZkm3:FdJ#W=<[oGXăU"2n41#a7gHAtnhdq.b2-[QieuCq4B060vxeZP;:84JZerBY=heg,y^6Wqgg,jC-.ăU"PVfi,^4S%4aGb4FkrabasR99)>Tkfi8r>O5be5IzB^iW'A]+/&FQ1v#Np]-CCcHăU"'<%Vlad/D/P/BSdZJYpvFdBE8Jb7r(-mw4+k0$J#XH2dGfMRO.64qY_T)Zs?:#6ăU"Tu8VP''0O99:2UUD_?,Plc\EGN60ExhAo.kr5Xt;W_gwhZno8.V7(#lZ0xC9P26ăU";n/7CI5TG>dLIfG67M,pM%RXoD3&KvBZ](9r*d3bcH3Cxvp],;#p*Yy1ce=h'+=ăU"Cn2bq943pl8m&$S&S&bKWwR[Kw+?A]7=a*\V?ek7YF((E%A^n_;Vaa&r<kd(D4)ăU"UD*qF]5,f+ys8kgbUnz09'vU1N+A.#CVE^wj6s2DW>*xs-&*E1/Ijh^cY89>lAyăU"CYqFjRTTb0(c$[T<i)\OzSl\ZJn_MZYP6Ut-EmdO>2.K8_J-3x=BAW5%.E?V6+?ăEND SUBăSUB V4ăU"5dNZfSr$a1MhAnu?Ls6xk%8x_oFiA>_7=9x.d/4I:x5oK1)CV%-]QX(qdd?^nTEăU"v_lr:H8BJtiAkX&?wrY4n#D..'<2jH1RKmN,otr[a<U(#O%b0Ff=d5R;J'1ZUJ;ăU"T/:rdwEllGy%b[AU4;Y%)RM0l$DJ4lUE9X$c,T=G.1[,eYc\cEvF_6GzD\V3NMVăU"C=t$n&+MpvY,Mx4b=vmBSd$?VhT)W(V)q5S7<G\?>+CgEGMWp6\l0XX?gyB0+<,ăU"?6\^_psaiwTRC9^D(Y*c>.5$\ObZ99E+W70>xHkJBXV3=^Z?8P9[Bba1gZg?5R4ăU"j'Qg5'ZzM1tM.igZ%-^+t(6/sbR/6CnS[MuqzZd?ipJ&v;tZO'IG\HckP&K;[[tăU"6Bi(yOxR</IV4LhOFtQoq7n^.$QpR*.BoQ/ktr;A\n>u\t,9$,Dp*PRBt'9([hHăU"m<s2tprVTTGnt3].4EB(s>F=a+vZJI=YDCA#lnd0(3V>\ht8'KE<sogVaV]'4=IăU"iM*MKHsCO5PPzv=69/>R3fbSnxrb(X3V8+;KQHZ*7OTURLrmXNVAx*PxZg?n#JjăU"Ed1CMh7[eGVp*K\6^U1Kh)g%gITZ8-Nae5%dw[lt;/P6^B<LVMbZ-<XzHdRn[c6ăU"l#O9<_qxgU-F'b3T0M>*iv9kqc.gv:E(Q[i2dSq6$H4'C1mE\.9(,5YhX^LooggăU"$CY&O9)uaG^/EO+CfpVNO/*'N,kWqB^:hz#\$s3nfBU]F\IT)W9lOQcp<>),?xAăU"XJej#w-Xh]UTNQO/.SIhPh<ue(K#)_I)d8sc3Snd+LqTX4t(Jkd#NQF]aRQJP&3ăU"[h1=n_;/?s,A96m+%gZ8*7Fs<r:YfEn%.GP+i:?YY6xeBIF2qYH7c\CBaBp+OD:ăU"zG9l2E')sW.iUHcvx;lgArRQOno::4'ch]h(EX1:T-lLVFr2ZmdpK5=)a5A\pVHăU"7x;57:H>]lM>0n4TwtR8l]$\Huc.grgtERIa9dxvqZ%naNH.F>*'&#bnJ-XvLcSăU"s5b3VdVgWpOXL3YHl.K^W^AeT+D_eBjh59RDk*V*0Xou'9+5ae.*Ms1,*257+/VăU">yNxfRJztd4<]wHR;Jqc*6:<s\t?(3as&LN^BA'0pLMPChDHL:,as)DPG+[nU.OăU"f,YDsNQ%345S4N;MMB[ixaH-+&2vmkRY;sYoYNj/AlQr^%$88\'#,d(tk>(EIFQăU"&,u^KzEujjI;_&C<H%s0[p[rMu^R&SU;n,8\&\*vtDRH-2g#YDccAXu0W;T4ocuăU"3x(H;lBu/]*[N]c8*r;*<n'3PQg7.TdWW$RhND+Q?Ahsb6-a?o<W1\y-&Yb[+^:ăU"0](*l>oKilm-=K1R;s;Nq-n4R7j$=sr.p]:nSflL\xQRsf6'AxE_nVvpfW*E4IGăU"K+^LJzc[[jJkq=^V([57PV=ZP%lA%F.#.E>CHwO%#US4TGT&BuDURAe18rgPF_zăU"-t6^qxe)aHV/)CCQX'=2MuI_T$lh=R>,x2Gi&g/R#O'?;]Qjep8E(#^=jmSrnC4ăU"t*YZLcLFs.#l?LzrB;u.xMfNlz:OJY$^e<4zxxf$J?Sc<wZ^P]]whlZa84dwGM>ăU"JLSi,'lhp'oQK=f77'5L;g0GRt[gILc^RDA,52.le0Z%$=E0V1PiFxvZ6pfZi:NăU"KqU;VE*0'+ieq]/rtPBMhA,At&Ypa$S<8H-ECk3+kY.5Arusn*oPK3keE+ww&Z\ăU"(_QG9%\-T'L5-N$kjl$k'iD$3BRTJPzN,os(-PdLeVmCQBE,/,iwiFknB>Q]SMfăU"[b-)Gs:yQ2NdPq%*#jUP$h7#yOh'PH6>D0X9L*n)kdcf6c?^:CZHYY[N*1IiLuuăU",vq(ePE-0>#rN1*b5DKC5T4?*X/R'KMis>twR57p#=1mt'BeYFB?%Pw;XVM_cUvăU";m,5bQ3gF6iZR%2n=4Jt+0-C\?9$SoI.%DrWrqC>);]O?j8Z+o>bQ1%L_[_f=hoăU"?ailxbnV4cGl1TfeT9X9+#+%P_X9lL,0YV688tl&5ffO,%Xfg9NZO,&%/8KQh2[ăU"iHqGDvANmK^G*xWUgC^8wNAG,GcR^qM,)D\U3;Dondb'SiE9xrrR2pWvd,&Th$XăU"NZWa%-rT0DWS[TY$H:ToTPh*Spo]AJ*+v(A;%^49f3Eu_4AUzR42F0U8O$\^^mEăU"*hVt*a9c)q1GD]&C'.^Q^ahs['xqq[M?'jw;Dl]LN*?Mv#$1GmdP4aT5>i$Iv7?ăU"raR31l^<$.^E(^HAK:<QY66Nrjk8FQrt\E'=xpHIL$ZRbr^v,x$C)bcW5>nMQ/WăU"^$E;o-BgX=.[,NmXSABqS;E2H<q_63mD]>l9H&=-Y)sao$/HvH$vu6lslWpl_7_ăU"ss;HM*Blxr<E$+;-8n-3,?C%s3XI/BJQ,AfrE*si#hpq4,tqpBZYvETJ/r$FmA%ăU"U#l$a1=U>sPm0SNsE-:2M)aM&ZQJE1vtIj74HQr?LtoWZxD>NBM7J'hE,3?eLM/ăU"_2;Wdrug.H;0jhV>Wns?/BJZfm2uuSODdk)tI2BwOV)0KDQEul]nZlLG4<O%c^VăU"ESx<%%P;^'dVxF>EJDHp&rnQ9dw[p9+*aU<(B%:XFILhd:iw+YYNV*IO2-tc]5yăU"OP1<m+\BH#<^taOZ;qoJw,/v3>i0oY]M[&Cu<E\[d$TXJN2Y7T:S/'uB[9o*Q=LăU"4DyvKWCCeVbz$R*wzA2^reOH1s*dzKM-&%ZKcP>k0-ng;PVlNh3lA=B&gZ(MkbTăU",$Jm.\[fx0VOMNgrX#jlS4V#qlY%v3:c60?nhPh&pUDEcZXR,6ISDv/aqDzVq$RăU"Id$3PD#PNd3H3hDo'il4?g)(.k<a[_sm4#q+1.c3JW(nk=v?UoL.Uo]B]#q?Jg3ăU"5LM*Us4wblf3Z7Ljg(>V%(CPG<&QGc/p^\u1F>]nFKScymLOs-N=LFK[D115UrEăU"E'<*uI6H6-vZiwR>PMDx+z#a^hdMCLEMWN))eb_G3v<mxbZ4uV4d:PdE)boRg-XăU"7_I.Rfnh49rUiV/c3.NNGVlhafh-AtJ6LqR3W&)Wt<.EloQKv&N\3QsA\K82JJ0ăU"yDCG]0(tb1)]x]#%E[iorfbUbS,Ja)(V_is+gsLHOq*GV,_e&,6*Dux?Mn,iNNTăU"HL55lu><>R\GWhdr;$?o^JKJN6Y8u;G1L4DR0Au*6[-%.UDGjpN?igNcG1[G4&dăU"7j\ClXt'3%?+t7Zu)w+-(Dg$b2I)ld(W%f>Uka*QP;'2.-&H^v5?24T3cd,knf\ăU"1a8H3mnn#1mJBQTgSDSu);-PmbkO#ty4RBZ%T3s1]TOCN8+r;XNsEs1ulsrowV*ăU":bk[DC6PR(+E]2K.AYRDXpE\^G4l1%5M]$2]^(y>Z125Rj;$z'h,,lc_^jkAytGăU"iq^q#$X5(.m;hRPTEDl0z,BRgO56(d:q?R+r')=%Y=%53ae,mxa(TS^b]_m9+k:ăU"=ptpoXg7dCAe(N3z78pACsZ?FqZY;cKB(3Dk*?)+EKNlZZ.XWseHH>eXCOcJ69măU"q4i-,Hb&(,g2P>+.T_G3.q8qGnP<kfq^i^orTR<\l0$^(s<Dtco?VSilBSxrt>8ăU"v&HkExz8-^+?Z$X[kJUz\&fO(EG/g($(#b(HhUe,#31I5+C=oQuVgf0huG=)&&4ăU"\(+IkfH5H+OffNM^6ebV5:By$?N.2uXU2N,<n#-QdEva%SIoK6h9h00b5yv1KTUăU"qZCE2U\lvEUU[LEh)gilhie7G/?pka'H^M7.nJ8.dY?1,i$T;#x*tn<P>VN?O%=ăU"#p[LLVt(=4GI+<]y*]3sto]PYJ&*/kxocs#8vh->QvE18QBa4cV-cgcH&2^]UW-ăU"DL\k:2th[[\v;+x,5xfP3rs(cr-_%vs>*3nbG9DD\OV/=pCVfidl0q5&b8:x:8UăU"v.%C#'\cBZY28HdM<A^ee-kSAHkHV7VHp-PiU58rjis>Oi5cxWA-a_owbRecGKqăU"*c>&%m]:nJXVBj'BukK%o3UM'$WI_PMY\V8\la[\mRQFYd$G:Nv9'LFjUx8Q37CăU"(cr.l.LKc2V?OMdP=_,HiUZYE&$9TluRwh'q15eEfZ'RN1Nu70bY+YHX^U+(sQtăU"Ory/HW,Ve5Kj:GKr.g;ovf>MJc$zZo/RIFw7_zWL)h\Z*E3p):=RQIiN8Alg=2%ăU"8YB)X43#f7^<t)F:Qs:D7RLXBu0$G_Vb_MK\v#95a2py(n9iE\6OXNwP:/6.$8NăU"hS7>vn#'YN9j]G#fJ4GU#O#6LMW]T.nuIG$0ON1c6Ef>eK'1wnlP1DM<q1[nl#YăU"yF6djO(]wun]wEN-(h=jRH&$14Nn31PS-jgFV?A)8FE0(.<Lw8;]YH+7f?8:wK'ăU"]_H:-+F2i%vWx1_xNjJd.SlSxl66u>dJ>s%<e<Dj/$$[AT2Y^3dTr(=tIt%%:8+ăU"FH_aL8hE+(0zNKj/)%NELM+:l^RP[>1rQ:dh%q9Sy_new>E^SwRwgXahx2&Jsa,ăU"/HM&BDm:CfZd-WJ77#('d516QJVYr(%Ir=H+9\^+W=KPV3kwXcZ7/(OC]jU.rZFăU"2bZ_f5HsU%CLgvJMDmUmrFB=]ZSnUq7u27Mh+k#xOe_P4oGsmCZBtXcJ/j=KSKgăU"_CTdEY/WF)l]%L_?_MD?wYH+Cv#[(egJAYTVwC*mr?B:Wb]btOf-bv9^l8wb:v=ăU"d1+\B\LC_FG>\tV\mQyL-<c#AT#bN&_CA4oFFFhY15xYudq'mtRYKYTDh&[/bVEăU".CB]tWMmMu?)m%PT[Pjd=%XYZ9XI9V8%]ElRUxDM+.L/Ct%ZAc%DS<q,mniF&74ăU"Pir,50Q=Yx;0<UrVssCk3R9jT:7M]t_]yVV-U<olWY%Nw:2W1h\dR]ej2%fDN)]ăU"#h$xOfgeg'K+c?qbtdC-og+fR*1m#GLBB+b14A7Qm2Q[fx.VK4j*^oGEm097R5WăU"VA;,'l$V<Zk>ql==qQA9^Ap=LC,55cpPl^oJBs^DpYfS[6\maU-AL5lvAO_M/.tăU"T&^q[LY*l?N#sp:kRcvFstWI[teik89%G)<T%0#WX:C-\cUI.<B0WiiD*pyF?H]ăU"xE07?&(dM0ut,6\Jk>]Ek8_7c]LK<tUE[$>Vxj^Ew&^s-3a\?9Y^qI=2>$tI1SIăU":?XVrOfG\=o^04=:vC>f5+R^l(x=7uJAb+S%7d;%&oNesE2VonH2<n2[qumZeK.ăU"+21Lfwk9FU%c\9xR)a0Q'h:)'u4CG#tP7+OVT%:1-hVQ0Wk0%a\pthVq?0&IZ\VăU"UuFf#Ickz=IA?&<Zc;iFV6(:7zj0m18N<cX9wZ6,\6uOl/fFc/#x^#:f,QjM>(kăU"_$E]Ngpp#ak^1i$Hdz8GvO4;)y1Ivo_(;$%FR_-aY7WN7=CT8f518YM:mW8Nh3RăU"[zvUB%2xigYTVV/iRn6sZMYoD_<3n04E_%uI4(Jk5(fE=^LwNLIf&E/hmW74>8oăU".)p5Yc#*fmREHbWOT-8OnO#F#Pr3gb=X'Cf&1PCZQ\4Y.[Ng8#sJ?i?Pn1L]TJRăU"]IDug'NIHjc0WJ:uR.A0acdFs9-PcS$cSSH[X'cM.L6i3y>uF3\.bnei,PhiUv0ăU")t2Kcftp_DMV*l;[Bk^/vf6VPkkG2gsj7,t=M?=K(MvV\;e:-I-#B[-rNG[I6TlăU"F<AO_PD4l=xJPFDVT?QTo(f8Mt1$OFt%p6ri;:mKH99,A,1wQe/uOY+q%%(+I70ăU"yALq?J'62o'[9$n?c/NZZ<;kT#f_9M'q7/#B(_R<:E1/KD;\9K=4iS(h(T<pgoFăU"CH7,,YJk'Ydq$$\7c;et)8c7gsMZI1oMk=(Gzt_dP1'^4df1%EXa#eSbp*Ts^%:ăU"9v%OU1U6uPx\-h4T$m79t.LqifAtq$-Bd)]jT$\X9UQe1w<4*pQchNpS?j/FpVWăU"swa2i6f>mOiOrw$rwk,H)n)AqNaaS_y(,H#O[sA+tB+7):$9#7TL-1[Xid5E<UjăU"H-U\I\%h-<-cirT;)(f,=Mv(X6^)=Q+-bm*H7J=AkOc?b7sgilRm18je-R=TJ7TăU"p:71OrLNBqDUx$-^pA4T51MH&_GA/EbylV\O+duoce<;v$J.K2ET0)4My5T_i-căU"?\f:dj[vSX*m^6GWwP]W?aJ)>s#l?lki<m'I)bJ%r?y2JFTZ2,,M.y-<Ah%0]=?ăU"4oMC\FAiT=-GcYgkrRZ:7#8S+$uI0D$OW;:eT;.E#xJ[C[?Wt'2&224nPd]61kqăU"ikC_pJ7a:at^m*ee[jk/7qZ.3ZL&eBQjshY?]NNQ:Klq7Ks?Vs;U/#QKUB[:;Y\ăU"kq[&0vSqDPOY-=^1)KK;),31dsq#1&Zdq[vK&ja-qmJ[K5N<T9>X#W5w5;a#Yr,ăU"UZP\s,1d/kS\W#G<D^M9wZhA\mS,Bu5vZ?BDrUL)T_';bbvO<4x]k.:,s9?r[U3ăU"CHbw;FaZVL0Ju0giVO9KCCLiOG]am9\8K9Z\B$jA8(=0h+:Aj.*0)9$-p)rj9tOăU"(-_$7_4p:RHr2uiW(/r.iGNMnQ>gYip2V,smDr+OivebJd]Hnp[N]W8[pjv'731ăU"TGf9:J'M0n,/QBO;nys*n#NZ;yGr2M'ah1%wFwN6WF;>MXl\>/K&MYYPLs'sy?qăU"mezr$BVuG0]-_Z;X[3E]CTRGiJjOBz/$9,gbje=OZ^q_:eIVTF,)d9eg\>VDjRvăU"x=X]qumfi5WU)-&p^9tTWB&L<Oy0_>jeJ)WC[ynY73x$hr)P6uWW0DF*pX0Uk0'ăU"];Bm;8Kofr^/Gdg;'%Gl%h#S5e,qdQCnspJ#6?pUA2>]S7..61]Smcc/5/F>Z%AăU"Fvu94,^Xy/S[/f^)V?hY=yW?:DJ*r$A=A,Wnfn#3E/tiW)$Qt,sJPE*mgTTzTC>ăU"X)p58sB]QilE,<L3P5B/fm\N7v/a7CtvasOjI.krqalBWm[V%dq;Hm<slm&SuqBăU"bODnHLaWog[R^X4<)S2]u%\RagWlDr/RQPJ7^/;XhUo^jyIK0=Pc.B^5hREgwTkăU"$W3I9)/m$B>6]/Bl5hd_Lc+&kgFy.Y5srA4(.5rQt#pkL0m#0H5jlC%5I5NpDJMăU"44$f.ku*F?%R_KT+Y=FVXGibw1k_oM3AJ8.TMO3;PFx&DB#5L'jF=;RTl++3%uaăU"U5nY6IN2A0dtD80?)KCG0dE7/EXmqV^bRbM+(A=,UTIYK5-Z11J;bPM-g7D*l6qăU"8+Q\+)B:j1tV+H1t+E,2rWc7T*hjoAboCIol4B)0b:_sYg%L%:q#[5;tD=/euNmăU"T[V3uIpK%Yo)dCSPDe/)x=rxUsTWcvGoBB5\D3/41%GeoSr15FwGOH-Cs68M-HbăU";s0(ai*\%Vt79VVZH\1wb_x+M]musser?5t5S5ak13&>P0^OT-.AbCA;=-eRyW/ăU"hEP\Qh7q\U-SeGL4L*[O2v7gb)GP3^N#v#wf)-%VTIv?<;PchxGq_sXfa.K7=9_ăU"ggK%OzAIgnr(%e89)h,tjl/T+.AC)bRv;TRr'*jtzVo^w/]^AP;1OBUS9DYYpFGăU"8YghK-,3rFqG&t70:DA2.WpFnTuBC_E?#O\owgU#)XRl)'b8?ke]e,Tu+^K\kb_ăU"^+H0EVb2;;U],xVp&r-S1k3-/SiX90+'*5TwmNsR'8i(ES?%R;BBYYAn'pk8a*dăU"4)^2Ri\fpHZ'j8,c7cr:V5*M/Ycti?_kk9TpF]+NT9kjGQ(H#[rrsk7;bW+.]UmăU"-I/m::INAitEOU90>h(VFII],>JL*zS=5Tx75m2w%_<Ok0+saVRoeIG)(R*1KB3ăU"Ws_TWRfPUcio$nJa,qPt\1AFbenR^L]]<Ci1xa7=V+7p,leqF:b)*3<%6aUucRAăU"[Xy2?)-8H(unM^ca]kI2C_;Jp8deSIL1Wi\/Mp3F'?EZ4H^8-r(/$6kS\I)^A^AăU"<Ed?ELhOX9<[>UuwaSE+PUGf^X#1[1Y(xY?wII9%GtYQ%'O;/G&,]R6[6#\?jCUăU"6_NV81Exi?FYuU?vg97Fx)bjnc]%SXEb#W+U8M)S3Y[TJx,TW+nA[oGMIo0ds40ăU"%><g?M'xx[QATRnFa/RJM8nUZJ?#cFX6W9Y#Qjz6(/l/C5yIcBCm0XC<q.)c/%măU"\&1.q(9L?A85AVv\Om/0-u]T&z7I6t82OP1RfS[]oH:lQIQ?M.peI0;4PHB&hi^ăU"g5b=p^X]FiXYAr0t%&'#Eop2\0f:k^uV_^)*SDLIEi7LY+M?nI^dS9=o?OQn\iaăU"c3sGJo1-\8HbWLFlE]/^JR$]j2+L/u22x*a$K=OAMm(++?Ri)3S0;0VMa>w%/4qăU"7b0K,3I4gVR.</LrpP\pVYsWEUGT^YPAQA:mu#HA46vWZ3;1,%AUcfqp$tb(5fWăU"#9h:V&E.783ma-m'o;%nVv$QO5M;:]9U6qMOIM/mTQ&mrIyidcncyK*do5S+*YkăU"h^pm]QZ/CNM)(^7qel7P'P8wbum;3<VItC%[H#GHlhaYwm/(zEA:5F;L30>>zlZăU"uabSb#VW0UY;tifLrSK(a\0&T.-%->?i9$\<<hxU&f0<?PgF]JGM?3bJo9D:xukăU"jYYpBq(+\tU\f/efDO)Xe&^)Ex)4C?YpEY:)m.?*Y[yY?rY_*0PT4hS./qNwdGlăU",jJi?t;^(UJ#5G7U4w^=qX3?#kc?FpD*zWUFtme3TO\fI3tr%eU8VY2_1g<&mC^ăU"&+NFRKQs_maC+lUk#/Q>YlC+o2BGQ$J[dmjJ/E<S5\_1NP].4V\s'8E,CUq./A_ăU"[wfWj2eL];'ga?2h+.bfj0=.0leDV>ZBsHIEAj>3C%0a,Nk/FU#RQ^?MxZov$K9ăU"-)UcYSLqV4?Oe*-ItGg874H*i-*z:ab]mS=meDT9iw:A1H=Z>Jo8qk.X>&GQ_#JăU"3rMkhx.#W2#R#GGI[=e'\hbg+?d&Syv2rk<A*]MA9\G*$m.2X-?qJm_vMwOFhIyăU"ysr3FQkmJMyow7aI:5a]ZCw%Xc50gf-h;G2ky^7$E4:Bf$>UfjOo>iBcRZeO=%săU".Lq?TihSBU>_;0pmm.ou)awCqfYE3:i>w2u1kPk<\XC7m;2][g)9g<NZB.n06oZăU"1tpGFi_F^M_I)cAw:KYeYhhWb,Tf(H\##FZ+$BW8,n1cd0wsW$0pEK<DdNf^<_9ăU"nCW0mw;RwSXb*fhv^iqRv(ZN%7&\22C2WJD>>%t)ZyNf:jm;J+jkG9I79100(AaăU"k);RK.60WTz2=<OSkZF.qG'*H4EUk[1B)X*ziN?YEEQ<hPK_raba<<[bK96XVNeăU"k7WPs5XcBf+]Jf;ZLc5aI;)LtXuUUVn+KL[TFWH)?]aX&IbsPWBVoUA2aiV^o?ZăU"(g0*8/$*s(GE'Hu\=v8wqE\ext*<Nf2u\SvAJaK2o0r#W5G4zo2zx4IBAx]e/$1ăU"&)7ZT)tM1r+_]6G-g[NG7ZOns'JTG\f4RuU\>r7nlv(BiI7oK#(/G.MyV7.k]SYăU"V%:o%b?s[PGn-sbNZ88H&_KB<5hpwe$>):<p+=o#FWC+jF[]q$$5L9I#[W1F0X(ăU"r#zdrr5mTM\$U8;A3.GAXdTe]Jm0s##WTZ%eH,YJ[fGIe?/#,i(%qf>?Wt&Gqr[ăU"5%B<X%\,f<shLV0\nfJ-?jCE]w6s($bed-4nZ:A=rF,'<+jEes)ppCZW-4Z0nUjăU"AR5]N>='t(3[M[fZ+=.kY>K)5jLe(r/p_PXGRJtV>Cc5R^UBNCEKHdOYFj6KXJAăU"%7cLB(v)1JbD]m.'U%\Y-b^G)8SfJ40/01154<HPhyD/HUA7pw:vQ+=rIDeggndăU"Y%.I^TK>i\:Z1v030eKXNIl,mEm^wffk_x3-loV6F<wZg,f'M7fe#hF\<Tn4T3zăU"_j>*u#YpRvL%4[>E9A*Qzsz6'<0kJ7W#PQ6PE#Z\'#8ux02.XIP')*x,6cQJX+8ăU"v+t[(kW9S*9_I.z$;XD6z+b4./we=Pid3CQC#pih*FgGggfUO^3M*l(u5cNvy7păU"beTJDa=7JWGP7HIKhMc^''bq3O^C<DsC,3XA=Xvoq)'2?+>WfX?Nag^[OOL=''%ăU"jF:]-Evf=PYj^:Tu\]k8__$N_G*jgENC$d4RR.*l<*q(gV*(Wg2:>0k=E&8VE&CăU"1=nE#I4LrTwdHOBvRzuX_/xPJ5:d+b,$M0^%&>wB+nK8gUzIcsj]4a_$#0:o(b2ăU"c.7k#>2WYj%^-TRjTB&s\^rm'NL$ic4M-1?]_j/9PN((rT/F&kJJKCYOHW$p/4păU"#,nj&Omu,F5ecG&hAud$yI='[u%-9ignjjM9FgBm*27amVW<H9a[z5Qq+fpJ1xcăU"^7LQ#UEaYMl,>XmeU2p\S<75po>,hqJl:;mPbxIVo3ln1-aP4UP:YY+a4DZ&MbFăU"ruDtc=0JFtzNl\I^?BYlxL9%'bXW/goPjm5mi_Pr05tslheqc/wAfa.mpJXxUQCăU"$:GZ^'vm0s%DfO:ZT<7cr7^H&N8YeBRwgo02XXI8]:53lYC)R2%]PkR?Flu0rB,ăU"Mt%]SPqB:bf^YOt*[)H<6Ge>ed.t9nNME?m(1HzuZ&Sa]u<&c;_^68fE\o3G=Y&ăU";=RkW-IN8XiHd-Pr4AQW?B&([kH'/F3\<&y(EvOS$QHa8b\a,ME$(i&Z3V2yb&4ăU"JhH0E:/FWLSs,)nhpE^VP;bg)(%E7R\vfynpVls/N01#I&Z+vmB6<TVtvo.puO&ăU"]+EsC;7&X/k8A+tRkV7kCNd-]O=1WPXk_wAPF7/Is1+^ZsuD1r+6EwW-,7vQ0M]ăU">f'N(.WK22sMU.;g;_7_FS_9<uWEh8]>]uSIbA[d;c&M2]O%EL]1o3>c%A?$lU7ăU"xgETaTU*Ej[IP7'i&o#G(0SpeE2Hqvi#.DcqRN%#G^6$B5q^o8rmPH/:V1/>OS/ăU"\aPId:\y9R(2fH'&gPN$Nw(=B_fCWqp\S5f[g1+ubLDVG_5%S%%wKAXxe0<</u-ăU",/)f68x7Cp1+#ZY00:&#O:XHl/X_%_kkEvOal1MmCvQ\bto'DF#yLb1iU\lPFh2ăU"YVbh,sK[kn%=rXL18-mN&V-H5xH[yqaj%dup(%)9%%%%-%%F-PMn>1hIe%%%%e%ăU"(%%,%%%%V%uVSrRxufX':2%F%-)<pf*1:inFzq*=+C,Q-\>i9B7Ka3K+10B/xDpăU"f\5qq875C'E_%'dHk/TgpDY;s2N;uDN+#gup%()9%%%%-%7%-PMr+:w(&+%%%%eăU"(%%%,%%%%WuVS[rxufFs*2O.U1B^JTXgId%#&)\?hsD*A(IrdwoT=NSP)]cf=hPăU"HvQKkM7x>-8YmwV%77L76/A,CX>]xt+_,q9GvCgD8#V.Ksa:4/jfF$gq;lW6<hnăU"pT(ijTu%p()9%%%%-[%%-POM):$*PD%%%%e(%%%,%%%%XuV%Srxu9ft*:&TE509ăU"Xjg^c?(=9KG*7<)kPvA,TKV=]>5i7*N>RY$hAFB7:sD_=4Qj$T^#8)6q5G9h+AjăU"DI\)IFE$hmk8\Am4SmABm*Sw'\KQUywK5ID6W^Eo\=8>IrSLh2#$\Ihf8uE-kk&ăU"V8WYN-tC%%up(%)9%%%%-%%F-PM(P*2'^%%%%e%(%%,%%%%Y%uVSr7xufs'42gfăU"(1Z6(]56G?Do1%Yqb'Y.=YE9-a\;#Z^kGJ^j#Z\9%-]k6;nUo/TGoekmBN#lZ^-ăU".jr6&5V2-3jd'3';qi1N/]iX:)8rUM)ic/?CpR[9Ew(]_L]BNmCgD?yo,9]YjO.ăU"dwT#rGyc?ASv:+?2des+[rKB'byk1Airx5kRLN3r8$tl%(up(%)9%%%%-%%F-PMăU"QL9Uks%%%%e%(%%,%%%%Z%uVSrRxuf^7F3;eR5j$b8_yo-4#Mm&GT%e;;Qx%)'<ăU">]gIJ7(XIiGJSCCp7X-]fIrU%R&/qNE_HixNaVZfZ1*;)>h\YnNSj4Rwg:pYwLlăU"U(J-XddYM2ul:9TP=MUJOz&-67zo3M8yjfySa-uv,TP]B'2)#nC[mo;L)<gB%Z7ăU"+pF_*#x_$=]&+/m7;)grX(>tH_x<i;^bitT:_fv<uv't0up%()9%%%%-%7%-PMcăU"AqOV'9%%%%e(%%%,%%%%[uVS[rxufn^FG;de5Tp)$UyE,%m%2;xwY)38)Pe(EiuăU"v5P=_5-GIHE)MPeG(5d-3,Oa65#b%'XmeEq3./57)'tWX$uh6Re>[$Dn?PM_^uSăU"Lxli>CMq4Oaso]p<QM__>c'l35xX;RU8BfAXEQSzu&\=kC.zVyNQlgGld)*HYB0ăU"Jc/.ugNB:m:&KGi#GlD:+M<qe2nxcjpTHB;(]kbA.;tQP'n\(GrQOcA3&=GT,U.ăU"UFe,qSWTr>GJ*&]4u%p()9%%%%-[%%-PsMmct+iH%%%%e(%%%,%%%%\uV%SrxuWăU"f^*9#'f5U]p$3.9)]]C'Y]gm0Z8'BK#:V'&W.NQ[w/g1/65ne'=gQQ4j]902:ZJăU"+#6DES&cNg-$r,5'Q+/?NrwhRr265F_Z<e29m/x_rSSRd[GB#rPd(^NuJY<3k_3ăU"NQ8]rON0qTrw/JbB7VCRL/ei-H0>.8X4\rqKiAm$xfQhfaz'0##nQes\hi+oC(VăU"&B'7AZO13F+>\nDD8alTRm8cSeY8x?J58Hr.<'D])y?:Zp9tk7imgimsu%RC<dWăU"=e5,tNu%p()9%%%%-[%%-P#MpYv-AL%%%%e(%%%,%%%%]uV%SrxuWf^*9%'v9i*ăU"X$jQjw%qv[kYE=OD))3%(nm8[j0RKR.NM>]IT5>RgQKTFe)s$7[jk0C.1TQ;toaăU"_RS;b;H0i2Fo_Wlgl^6V$e%^57HFx_k&CF58[^HyY\^.$/*q1deMjhGrP),1HPCăU"<VxHWoN=HiD,DVMGZm=/(]=$CLL>/kPi1Qm#iaPXgdGP1:'H\mCzgKAw3S/RlS\ăEND SUBăSUB V5ăU"[QWaKQ>_i]F[Ri#EbBf)*v\w8W1mM_3Mkt^5&e_ukFDtU<1E?e.Xk9s];z^S-s.ăU",u%p()9%%%%-[%%-P^McVP+ts%%%%-)%%%,%%%%^uV%Srxu<f]:O#)u9UDNnnr7ăU"Q5tV2puG&\zn9+p>1:;:s(Y:DMme3%F0$NuFS;O_Q&=BM-9eYO=pm5_18N2l$UBăU"xYBtGNuh[OGkA(=nGL$zmnYhVxNjzQJ[v\D_b,-g-4_2:CFh5jLIZTqx^3oTkQhăU"^R8hi:4*n8?[CE%Z$BRK;EY#]\:BK%1+Yk0j3?->/^WkD*e)g58EBM;g6B4?us]ăU"LUz1-M[X8#dGo1?[ESi:h[YiQj<v5;$eXoa#Cv:VkqHc\D5%>eF(AKxFnBuGC;căU"bzrZhS:>7$EmR%(jI^vCN2i^xqSr\9tugIbN'Ytq9\%c&up%()9%%%%-%7%-PMiăU"<JZ%%1&%%%-)%%%-%%%%VUuV%Srxu<f]:P[Ze9>2^nfIX0=wH;p-j4b'Vir*7;5ăU"0:;E(QfiT+w1'$TQresmO=;X_S97*x'<B-cR=:jEq1t()oW_m2BWgCGhY(QU-6găU"Ldclh59LT^up>VLz[%pYl0Y$N7<K\]qwXs.gDqjwsBi,3-y)F.ofMOGgQeHlHW8ăU"R)\?t3,=+$Yv?X/Cjk*DB$mYk(02iaR)8?eGBaY\0.IZq_aFNQ.-CR8HDsN2$X(ăU"Zw2W#2k1AZyVTdEG\&YXK;$>mVYRq_4q6'EJ1.8,qd2wdj^>4*5-ScgK_-9)v:XăU":^E3UnhbX8pWG$&rnE+ZDd6q[pNR4YIN*zGbl:sluUz^=(xn3%up&'%9%9%%%%-ăU"%7%-PMC/OYA't%%%'C'%%%+%%%%%%%%%&%E%%%%%%%%%rx%uSgn%up&'%9%9%%%ăU"%-%>Q1OMfujt9&*)%%&j2%%%,%%%%%%%%%&%E%%%%D&%%%rx%uSgf%xup&%'9%9ăU"%%%%-[%%-P.MDDO+I*5%(%3:%%%+%%%%%%%%%%%E#%%%n%*%%g&&Srx%uup&%'9ăU"%9%%%%-[%%-PdMOSU0ImP%1%us%%%0%%%%%%%%%%%E#%%%C%;%%x%jyzu%^ZSr%ăU"xuup%&'9%%9%%%%-%%-KPMn1-hIe%%%%e(%%%,%%%%%%%%%%%%E%%%*^f%%%VuVăU"S%rxuu%p&'9%%9%%%%-%%a-PM+Y:w(+%%%%e%(%%,%%%%%%%%%%%%E%%.%og%%%ăU"WuV%Srxu%up&'%9%9%%%%-%7%-PMi):$P&D%%%%e(%%%,%%%%%%%%%%%E%R%%DgăU"%%%Xu%VSrx%uup&%'9%9%%%%-[%%-PgM(*2)'^%%%%e(%%%,%%%%%%%%%%%E#%%ăU"%4&h%%Y%uVSr%xuup%&'9%%9%%%%-%%-0PMQ92Uks%%%%e(%%%,%%%%%%%%%%%%ăU"E%%%(>i%%%ZuVS%rxuu%p&'9%%9%%%%-%%a-PMAoqOV9%%%%e%(%%,%%%%%%%%%ăU"%%%E%%4%[i%%%[uV%Srxu%up&'%9%9%%%%-%7%-PM?mcti'H%%%%e(%%%,%%%%%ăU"%%%%%%E%R%%#j%%%\u%VSrx%uup&%'9%9%%%%-[%%-P#MpYv-AL%%%%e(%%%,%%ăU"%%%%%%%%%E[%%%4&k%%]%uVSr%xuup%&'9%%9%%%%-%%-0PMcV9Pts%%%%-)%%%ăU",%%%%%%%%%%%%E%%%*,l%%%^uVS%rxuu%p&'9%%9%%%%-%%a-PM<;JZ%1%&%%-%ăU")%%-%%%%%%%%%%%%E%%4%Km%%%VUu%VSrx%uup*%+%%%%%3%3+%b'%.%)o%%%%%ăEND SUBăV2ăV3ăV4ăV5ăCLOSE:IF S=195AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăEdward L. Blake                EDWARD BLAKE'S GRAPHICS LIBRARYblakee@cyanwerks.com           06-28-00 (19:51)       QB, QBasic, PDS        377  17079    EBGRWIN.BAS ' 1995-1997 Edward L. Blake (blakee@cyanwerks.com)ă' Edward L. Blake's Graphics Libraryă' This Module contains routines for:ă'   Primitive Scalable Vector Font Drawingă'   Window Drawingă'   Mouse Handlingă'ă' See LETTERS.BAS (done by the same author) for a demonstration of theă' font drawing.ă'ăDECLARE SUB TITLE (X1!, Y1!, X2!, Y2!, A$)ăDECLARE SUB WORD (A$, C!, X!, Y!, A!, SZ!)ăDECLARE SUB LETTER (A$, C!, X!, Y!, SZ!)ăDECLARE SUB WIN (X1!, Y1!, X2!, Y2!, A$)ăDECLARE SUB MOUSE (A!)ăDECLARE SUB TDSTUFF (X1!, Y1!, X2!, Y2!)ăDECLARE SUB PBUTTON (X1!, Y1!, X2!, Y2!)ă' $INCLUDE: 'QB.BI'ăăSUB LETTER (A$, C, X, Y, SZ)ăA$ = UCASE$(A$)ăPA = XăPB = YăSELECT CASE A$ăCASE "A"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), CăCASE "B"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "C"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "D"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "E"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "F"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), CăCASE "G"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 15 * SZ), CăCASE "H"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), CăCASE "I"ă    LINE (PA + 5 * SZ, PB)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "J"ă    LINE (PA + 10 * SZ, PB + 1 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA, PB + 10 * SZ), CăCASE "K"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "L"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "M"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "N"ă    LINE (PA, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "O"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "P"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "Q"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "R"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "S"ă    LINE (PA, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "T"ă    LINE (PA + 5 * SZ, PB)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), CăCASE "U"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "V"ă    LINE (PA, PB)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB), CăCASE "W"ă    LINE (PA, PB)-(PA + 3 * SZ, PB + 20 * SZ), Că    LINE (PA + 3 * SZ, PB + 20 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 8 * SZ, PB + 20 * SZ), Că    LINE (PA + 8 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB), CăCASE "X"ă    LINE (PA, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA, PB + 20 * SZ), CăCASE "Y"ă    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 5, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB), CăCASE "Z"ă    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 10 * SZ, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "'"ă    LINE (PA + 9 * SZ, PB)-(PA + 5 * SZ, PB + 5 * SZ), CăCASE "1"ă    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "2"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 7 * SZ, PB + 0 * SZ), Că    LINE (PA + 7 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), CăCASE "3"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 2 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 18 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "4"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "5"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 17 * SZ), CăCASE "6"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), CăCASE "7"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 20 * SZ), CăCASE "8"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "9"ă    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "0"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE ","ă    LINE (PA + 4 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 15 * SZ), CăCASE "-"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), CăCASE "."ă    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "["ă    LINE (PA + 2 * SZ, PB + 0 * SZ)-(PA + 2 * SZ, PB + 20 * SZ), Că    LINE (PA + 2 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), Că    LINE (PA + 2 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), CăCASE "]"ă    LINE (PA + 6 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), Că    LINE (PA + 6 * SZ, PB + 0 * SZ)-(PA + 2 * SZ, PB + 0 * SZ), Că    LINE (PA + 6 * SZ, PB + 20 * SZ)-(PA + 2 * SZ, PB + 20 * SZ), CăCASE "{"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 3 * SZ, PB + 8 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 3 * SZ, PB + 12 * SZ), Că    LINE (PA + 2 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 8 * SZ), Că    LINE (PA + 2 * SZ, PB + 17 * SZ)-(PA + 3 * SZ, PB + 12 * SZ), Că    LINE (PA + 2 * SZ, PB + 3 * SZ)-(PA + 4 * SZ, PB + 0 * SZ), Că    LINE (PA + 2 * SZ, PB + 17 * SZ)-(PA + 4 * SZ, PB + 20 * SZ), CăCASE "}"ă    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 7 * SZ, PB + 12 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 7 * SZ, PB + 8 * SZ), Că    LINE (PA + 8 * SZ, PB + 17 * SZ)-(PA + 7 * SZ, PB + 12 * SZ), Că    LINE (PA + 8 * SZ, PB + 3 * SZ)-(PA + 7 * SZ, PB + 8 * SZ), Că    LINE (PA + 8 * SZ, PB + 17 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), Că    LINE (PA + 8 * SZ, PB + 3 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), CăCASE "<"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE ">"ă    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 20 * SZ), CăCASE "|"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 24 * SZ), CăCASE "`"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 5 * SZ), CăCASE "!"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 12 * SZ), Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE "="ă    LINE (PA + 0 * SZ, PB + 7 * SZ)-(PA + 9 * SZ, PB + 7 * SZ), Că    LINE (PA + 0 * SZ, PB + 13 * SZ)-(PA + 9 * SZ, PB + 13 * SZ), CăCASE "~"ă    LINE (PA + 0 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), Că    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 3 * SZ), Că    LINE (PA + 6 * SZ, PB + 3 * SZ)-(PA + 9 * SZ, PB + 0 * SZ), CăCASE "/"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), CăCASE "^"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "\"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "+"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 15 * SZ), CăCASE "_"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE ":"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 2, Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE ";"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 2, Că    LINE (PA + 4 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 15 * SZ), CăCASE "?"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 5, C, 3 + 1.5, 3ă    LINE (PA + 5 * SZ, PB + 8 * SZ)-(PA + 5 * SZ, PB + 12 * SZ), Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE "#"ă    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 20 * SZ), Că    LINE (PA + 6 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 6 * SZ)-(PA + 0 * SZ, PB + 6 * SZ), Că    LINE (PA + 0 * SZ, PB + 12 * SZ)-(PA + 10 * SZ, PB + 12 * SZ), CăCASE "%"ă    CIRCLE (PA + 3 * SZ, PB + 3 * SZ), 2, Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    CIRCLE (PA + 7 * SZ, PB + 17 * SZ), 2, CăCASE "("ă    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), CăCASE ")"ă    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "$"ă    LINE (PA, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 17 * SZ), Că    LINE (PA + 5 * SZ, PB + 3 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB + 3 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 17 * SZ), Că    LINE (PA + 5 * SZ, PB + 3 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 5 * SZ, PB + 17 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "*"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE CHR$(34)ă    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 4 * SZ), Că    LINE (PA + 7 * SZ, PB + 4 * SZ)-(PA + 7 * SZ, PB + 0 * SZ), CăEND SELECTă'LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 0 * SZ), CăEND SUBăăSUB WORD (Message$, TextColor, X, Y, LtrSep, Size)ăFOR i = 1 TO LEN(Message$)ăB$ = MID$(Message$, i, 1)ăLETTER B$, TextColor, (LtrSep * i) + X - LtrSep, Y, SizeăNEXT iăEND SUBăăSUB MOUSE (A)ăDIM REGS AS RegTypeăREGS.ax = AăINTERRUPT 51, REGS, REGSăEND SUBăăSUB PBUTTON (X1, Y1, X2, Y2)ăLINE (X1, Y1)-(X2, Y1), 0ăLINE (X1, Y1)-(X1, Y2), 0ăLINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 1), 8ăLINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 8ăLINE (X2, Y1)-(X2, Y2), 15ăLINE (X1, Y2)-(X2, Y2), 15ăLINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 15ăLINE (X1 + 1, Y2 - 1)-(X2 - 1, Y2 - 1), 15ăLINE (X1 + 2, Y1 + 2)-(X2 - 2, Y2 - 2), 7, BFăEND SUBăăSUB TDSTUFF (X1, Y1, X2, Y2)ăLINE (X1, Y1)-(X2, Y1), 15ăLINE (X1, Y1)-(X1, Y2), 15ăLINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 1), 15ăLINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 15ăLINE (X2, Y1)-(X2, Y2), 0ăLINE (X1, Y2)-(X2, Y2), 0ăLINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 8ăLINE (X1 + 1, Y2 - 1)-(X2 - 1, Y2 - 1), 8ăLINE (X1 + 2, Y1 + 2)-(X2 - 2, Y2 - 2), 7, BFăEND SUBăăSUB TITLE (X1, Y1, X2, Y2, A$)ăLINE (X1, Y1)-(X2, Y1), 15ăLINE (X1, Y1)-(X1, Y2), 15ăLINE (X1 + 1, Y1 + 1)-(X2 - 1, Y1 + 1), 15ăLINE (X1 + 1, Y1 + 1)-(X1 + 1, Y2 - 1), 15ăLINE (X2, Y1)-(X2, Y2), 0ăLINE (X1, Y2)-(X2, Y2), 0ăLINE (X2 - 1, Y1 + 1)-(X2 - 1, Y2 - 1), 8ăLINE (X1 + 1, Y2 - 1)-(X2 - 1, Y2 - 1), 8ăLINE (X1 + 2, Y1 + 2)-(X2 - 2, Y2 - 2), 1, BFăWORD A$, 0, X1 + 6, Y1 + 7, 7, .5ăWORD A$, 15, X1 + 4, Y1 + 5, 7, .5ăEND SUBăăSUB WIN (X1, Y1, X2, Y2, A$)ăLINE (X1 + 10, Y1 + 10)-(X2 + 10, Y2 + 10), 0, BFăTDSTUFF X1, Y1, X2, Y2ăTITLE X1 + 4, Y1 + 4, X2 - 4, Y1 + 26, A$ăPBUTTON X1 + 4, Y1 + 28, X2 - 4, Y2 - 4ăEND SUBăEdward L. Blake                USING VECTOR FONTS             blakee@cyanwerks.com           06-28-00 (19:51)       QB, QBasic, PDS        364  17022    LETTERS.BAS ' 1995-96 Edward Blake, Display Adjustable text, Usable in almostă' all the Graphics modes (blakee@cyanwerks.com)ă' Qbasic\Quick Basic 4.5ă' use the Word procedure for displaying a message, the Word procedureă' provides a interface with the letter procedure ,who accepts only oneă' character at a time. the Letter procedure is a large procedureă' It displays Uppercase letters, numbers.. all except Lowercase characters,ă' extended characters, @ and &ăăDECLARE SUB WORD (Message$, TextColor!, X!, Y!, LtrSep!, Size!)ăDECLARE SUB LETTER (A$, C!, X!, Y!, SZ!)ăSCREEN 12ăWORD "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 15, 1, 1, 12, 1ăWORD "`1234567890-=~!#$%^*()_+[]{};':" + CHR$(34) + ",./\<>?|", 15, 1, 25, 12, 1ăWORD "Normal size", 15, 1, 75, 12, 1ăWORD "Half size", 15, 1, 100, 7, .5ăWORD "a fourth of the size", 15, 1, 115, 4, .25ăWORD "Shadowed using two word calls", 8, 5, 130, 7, .5ăWORD "Shadowed using two word calls", 15, 1, 125, 7, .5ăWORD "Compressed Text", 1, 5, 150, 5, .5ăWORD "Stretched text", 9, 5, 175, 15, .5ăDO UNTIL INKEY$ <> ""ăFOR i = 1 TO 15ăWORD "Special effect.. Decompressing text", 10, 5, 200, i, .5ăT1 = TIMERăDOăIF TIMER > T1 + .01 THEN EXIT DOăIF TIMER < T1 - .01 THEN EXIT DOăLOOPăWORD "Special effect.. Decompressing text", 0, 5, 200, i, .5ăNEXT iăWORD "Special effect.. Decompressing text", 10, 5, 200, i, .5ăT1 = TIMERăDOăIF TIMER > T1 + 1 THEN EXIT DOăIF TIMER < T1 - 1 THEN EXIT DOăLOOPăWORD "Special effect.. Decompressing text", 0, 5, 200, i, .5ăFOR i = 15 TO 1 STEP -1ăWORD "Special effect.. Decompressing text", 10, 5, 200, i, .5ăT1 = TIMERăDOăIF TIMER > T1 + .01 THEN EXIT DOăIF TIMER < T1 - .01 THEN EXIT DOăLOOPăWORD "Special effect.. Decompressing text", 0, 5, 200, i, .5ăNEXT iăWORD "Special effect.. Decompressing text", 10, 5, 200, i, .5ăT1 = TIMERăDOăIF TIMER > T1 + 1 THEN EXIT DOăIF TIMER < T1 - 1 THEN EXIT DOăLOOPăWORD "Special effect.. Decompressing text", 0, 5, 200, i, .5ăWORD "Press any key to continue", 7, 5, 250, 7, .5ăLOOPăăSUB LETTER (A$, C, X, Y, SZ)ăA$ = UCASE$(A$)ăPA = XăPB = YăSELECT CASE A$ăCASE "A"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), CăCASE "B"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "C"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "D"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "E"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "F"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB + 10 * SZ), CăCASE "G"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 15 * SZ), CăCASE "H"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), CăCASE "I"ă    LINE (PA + 5 * SZ, PB)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "J"ă    LINE (PA + 10 * SZ, PB + 1 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA, PB + 10 * SZ), CăCASE "K"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "L"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "M"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "N"ă    LINE (PA, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "O"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "P"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "Q"ă    LINE (PA, PB + 5 * SZ)-(PA, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "R"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "S"ă    LINE (PA, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "T"ă    LINE (PA + 5 * SZ, PB)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA, PB)-(PA + 10 * SZ, PB), CăCASE "U"ă    LINE (PA, PB)-(PA, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "V"ă    LINE (PA, PB)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB), CăCASE "W"ă    LINE (PA, PB)-(PA + 3 * SZ, PB + 20 * SZ), Că    LINE (PA + 3 * SZ, PB + 20 * SZ)-(PA + 5 * SZ, PB), Că    LINE (PA + 5 * SZ, PB)-(PA + 8 * SZ, PB + 20 * SZ), Că    LINE (PA + 8 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB), CăCASE "X"ă    LINE (PA, PB)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB)-(PA, PB + 20 * SZ), CăCASE "Y"ă    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 5, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA, PB), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB), CăCASE "Z"ă    LINE (PA, PB)-(PA + 10 * SZ, PB), Că    LINE (PA + 10 * SZ, PB)-(PA, PB + 20 * SZ), Că    LINE (PA, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "'"ă    LINE (PA + 9 * SZ, PB)-(PA + 5 * SZ, PB + 5 * SZ), CăCASE "1"ă    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "2"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 7 * SZ, PB + 0 * SZ), Că    LINE (PA + 7 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), CăCASE "3"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 2 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 18 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "4"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "5"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 17 * SZ), CăCASE "6"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), CăCASE "7"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 20 * SZ), CăCASE "8"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "9"ă    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 10 * SZ), CăCASE "0"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 10 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE ","ă    LINE (PA + 4 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 15 * SZ), CăCASE "-"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), CăCASE "."ă    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "["ă    LINE (PA + 2 * SZ, PB + 0 * SZ)-(PA + 2 * SZ, PB + 20 * SZ), Că    LINE (PA + 2 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), Că    LINE (PA + 2 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), CăCASE "]"ă    LINE (PA + 6 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), Că    LINE (PA + 6 * SZ, PB + 0 * SZ)-(PA + 2 * SZ, PB + 0 * SZ), Că    LINE (PA + 6 * SZ, PB + 20 * SZ)-(PA + 2 * SZ, PB + 20 * SZ), CăCASE "{"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 3 * SZ, PB + 8 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 3 * SZ, PB + 12 * SZ), Că    LINE (PA + 2 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 8 * SZ), Că    LINE (PA + 2 * SZ, PB + 17 * SZ)-(PA + 3 * SZ, PB + 12 * SZ), Că    LINE (PA + 2 * SZ, PB + 3 * SZ)-(PA + 4 * SZ, PB + 0 * SZ), Că    LINE (PA + 2 * SZ, PB + 17 * SZ)-(PA + 4 * SZ, PB + 20 * SZ), CăCASE "}"ă    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 7 * SZ, PB + 12 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 7 * SZ, PB + 8 * SZ), Că    LINE (PA + 8 * SZ, PB + 17 * SZ)-(PA + 7 * SZ, PB + 12 * SZ), Că    LINE (PA + 8 * SZ, PB + 3 * SZ)-(PA + 7 * SZ, PB + 8 * SZ), Că    LINE (PA + 8 * SZ, PB + 17 * SZ)-(PA + 6 * SZ, PB + 20 * SZ), Că    LINE (PA + 8 * SZ, PB + 3 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), CăCASE "<"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE ">"ă    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 10 * SZ)-(PA + 0 * SZ, PB + 20 * SZ), CăCASE "|"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 24 * SZ), CăCASE "`"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 5 * SZ), CăCASE "!"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 5 * SZ, PB + 12 * SZ), Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE "="ă    LINE (PA + 0 * SZ, PB + 7 * SZ)-(PA + 9 * SZ, PB + 7 * SZ), Că    LINE (PA + 0 * SZ, PB + 13 * SZ)-(PA + 9 * SZ, PB + 13 * SZ), CăCASE "~"ă    LINE (PA + 0 * SZ, PB + 3 * SZ)-(PA + 3 * SZ, PB + 0 * SZ), Că    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 6 * SZ, PB + 3 * SZ), Că    LINE (PA + 6 * SZ, PB + 3 * SZ)-(PA + 9 * SZ, PB + 0 * SZ), CăCASE "/"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), CăCASE "^"ă    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "\"ă    LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE "+"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 5 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 15 * SZ), CăCASE "_"ă    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 20 * SZ), CăCASE ":"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 2, Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE ";"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 2, Că    LINE (PA + 4 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 15 * SZ), CăCASE "?"ă    CIRCLE (PA + 5 * SZ, PB + 3 * SZ), 5, C, 3 + 1.5, 3ă    LINE (PA + 5 * SZ, PB + 8 * SZ)-(PA + 5 * SZ, PB + 12 * SZ), Că    CIRCLE (PA + 5 * SZ, PB + 17 * SZ), 2, CăCASE "#"ă    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 20 * SZ), Că    LINE (PA + 6 * SZ, PB + 20 * SZ)-(PA + 6 * SZ, PB + 0 * SZ), Că    LINE (PA + 10 * SZ, PB + 6 * SZ)-(PA + 0 * SZ, PB + 6 * SZ), Că    LINE (PA + 0 * SZ, PB + 12 * SZ)-(PA + 10 * SZ, PB + 12 * SZ), CăCASE "%"ă    CIRCLE (PA + 3 * SZ, PB + 3 * SZ), 2, Că    LINE (PA + 0 * SZ, PB + 20 * SZ)-(PA + 10 * SZ, PB + 0 * SZ), Că    CIRCLE (PA + 7 * SZ, PB + 17 * SZ), 2, CăCASE "("ă    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), Că    LINE (PA + 5 * SZ, PB + 20 * SZ)-(PA + 0 * SZ, PB + 15 * SZ), CăCASE ")"ă    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA + 5 * SZ, PB + 0 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE "$"ă    LINE (PA, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA, PB + 15 * SZ)-(PA + 5 * SZ, PB + 17 * SZ), Că    LINE (PA + 5 * SZ, PB + 3 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), Că    LINE (PA, PB + 5 * SZ)-(PA + 5 * SZ, PB + 3 * SZ), Că    LINE (PA + 10 * SZ, PB + 15 * SZ)-(PA + 5 * SZ, PB + 17 * SZ), Că    LINE (PA + 5 * SZ, PB + 3 * SZ)-(PA + 5 * SZ, PB + 0 * SZ), Că    LINE (PA + 5 * SZ, PB + 17 * SZ)-(PA + 5 * SZ, PB + 20 * SZ), CăCASE "*"ă    LINE (PA + 0 * SZ, PB + 10 * SZ)-(PA + 10 * SZ, PB + 10 * SZ), Că    LINE (PA + 0 * SZ, PB + 5 * SZ)-(PA + 10 * SZ, PB + 15 * SZ), Că    LINE (PA + 0 * SZ, PB + 15 * SZ)-(PA + 10 * SZ, PB + 5 * SZ), CăCASE CHR$(34)ă    LINE (PA + 3 * SZ, PB + 0 * SZ)-(PA + 3 * SZ, PB + 4 * SZ), Că    LINE (PA + 7 * SZ, PB + 4 * SZ)-(PA + 7 * SZ, PB + 0 * SZ), CăEND SELECTă'LINE (PA + 0 * SZ, PB + 0 * SZ)-(PA + 0 * SZ, PB + 0 * SZ), CăEND SUBăăSUB WORD (Message$, TextColor, X, Y, LtrSep, Size)ăFOR i = 1 TO LEN(Message$)ăB$ = MID$(Message$, i, 1)ăLETTER B$, TextColor, (LtrSep * i) + X - LtrSep, Y, SizeăNEXT iăEND SUBăErez Shinan                    3D MAP ALGORITHM               shinnan@zahav.net.il           07-22-00 (15:33)       QB, QBasic, PDS        115  3249     3DMAP.BAS   'Üßßßß ÜßßÜÜ Üßßßß ŰßßßŰ       ÜßßßÜ Ű   Ű ßŰß ŰÜ  Ű ÜßßßÜ ŰÜ  Űă'ŰÜÜÜ  Ű   Ű ŰÜÜÜ    Üß        ßÜÜ   ŰÜÜÜŰ  Ű  ŰßÜ Ű ŰÜÜÜŰ ŰßÜ Űă'Ű     ŰßßßÜ Ű      Üß            ßÜ Ű   Ű  Ű  Ű ßÜŰ Ű   Ű Ű ßÜŰă'ßÜÜÜÜ Ű   Ű ßÜÜÜÜ ŰÜÜÜŰ       ßÜÜÜß Ű   Ű ÜŰÜ Ű  ßŰ Ű   Ű Ű  ßŰăă' /ă'<<<<<<<<-------------------------------------------================<ă' \ăă'ßßŰ Üßß ŰßÜ    Űßß ÜßÜ Üßß ßŰß Ű Ű ÜßÜ ÜßÜ Üßßă' Ű  Űß  Ű Ű ßß ßßÜ Ű Ű Űß   Ű  ÝÜŢ ŰßŰ ŰÜß Űßă'ŰÜÜ ßÜÜ ŰÜß    ÜÜŰ ßÜß Ű    Ű  ŢßÝ Ű Ű Ű Ű ßÜÜăăă'Made by Erez Shinan 21-07-00 / 22-07-00ă'Email: erezshn@hotmail.comăă'To run press Shift + F5ăăă'This is a very easy 3D map algorithem.ăă'You can change and use this program as much as you want,ă'but if you use it in one of your programs please mention my name.ăă'If you know how to "hide" the black points that occur on certaină'rotation angles please email me.ăă'If you have questions or answers email me to: erezshn@hotmail.comăăDEFINT A-ZăSCREEN 13ăDIM Enlargement AS SINGLEăRANDOMIZE TIMERăHDiff = 10          'Height differences when smoothingăSmoothAmount = 5    'Smoothing amountăHWater = 5          'Water height: 1 to 15ălx = 1: hx = 100     'Borders of ...ăly = 1: hy = 100     '... the mapăEnlargement = 1     'In how much to enlarge the mapăăDIM P(lx TO hx, ly TO hy) AS INTEGER   'If error accurs here use /AH on command-lineăDIM sP(lx TO hx, ly TO hy) AS INTEGER  'or decrease the values of 'hx' & 'hy'.ăă'Random pointsăFOR x = lx TO hxăFOR y = ly TO hyăP(x, y) = ((RND * 256))ăNEXT y, xăăFOR x = lx TO hxăFOR y = ly TO hyăsP(x, y) = P(x, y)ăNEXT y, xăăă'SmoothăFOR c = 1 TO SmoothAmountăPRINT "Smooth:"; c; "/"; SmoothAmountăFOR x = lx TO hxăFOR y = ly TO hyă    cur = sP(x, y)ă    IF x = lx OR y = ly THEN p1 = cur ELSE p1 = sP(x - 1, y - 1)ă    IF y = ly THEN p2 = cur ELSE p2 = sP(x, y - 1)ă    IF y = ly OR x = hx THEN p3 = cur ELSE p3 = sP(x + 1, y - 1)ă    IF x = lx THEN p4 = cur ELSE p4 = sP(x - 1, y)ă    IF x = hx THEN p6 = cur ELSE p6 = sP(x + 1, y)ă    IF x = lx OR y = hy THEN p7 = cur ELSE p7 = sP(x - 1, y + 1)ă    IF y = hy THEN p8 = cur ELSE p8 = sP(x, y + 1)ă    IF y = hy OR x = hx THEN p9 = cur ELSE p9 = sP(x + 1, y + 1)ă    P(x, y) = (cur * HDiff + p1 + p2 + p3 + p4 + p6 + p7 + p8 + p9) \ (8 + HDiff)ăNEXT y, xăăFOR x = lx TO hxăFOR y = ly TO hyă sP(x, y) = P(x, y)ă NEXT y, xăNEXT căăăblue = 40: green = 0: red = 0ăFOR c = 1 TO HWaterăPALETTE c, 65536 * (blue + c) + 256 * green + redăNEXT căăFOR c = HWater + 1 TO 15ăblue = 0: green = c * 4 + 3: red = 0ăPALETTE c, 65536 * blue + 256 * green + redăNEXT căăCLSăăFOR x = lx TO hxăFOR y = ly TO hyăLINE (x * Enlargement, y * Enlargement)-((x + Enlargement - 1) * Enlargement, (y + Enlargement - 1) * Enlargement), P(x, y) \ 16, BFăNEXT y, xăDOăINPUT "Rotation"; RotationAngleăRotation# = RotationAngle * ATN(1) / 45ăCLSăăDIM h AS SINGLEăăRCOS# = COS(Rotation#)ăRSIN# = SIN(Rotation#)ăya = (255 * RSIN#) / 4ăh = yaăăFOR y = ly TO hyăh = h + RCOS#ăFOR x = lx TO hxă    y2 = h - (P(x, y) \ 4) * RSIN#ă    LINE (x * Enlargement, y2 * Enlargement)-((x + Enlargement * 2 - 1) * Enlargement, (y2 + Enlargement * 2 - 1) * Enlargement), P(x, y) \ 16, BFăNEXT x, yăLOOPăLithumn                        MOSAIC ALGORITHM               lithprod@earthlink.net         08-07-00 (11:55)       QB, QBasic, PDS        36   985      MOSAIC.BAS  '-----------------------------ă'Title: Mosaic Algorithmă'Programmer: Lithumm (webmaster@qblithumm.cjb.net)ă'Website: qblithumm.cjb.netă'Date: 8-6-2000 (8-7-2000 GMT)ă'Time: 23:13:52 (07:13:52 GMT)ă'Programmed in: QB 4.5ă'-----------------------------ăDECLARE SUB mosaic (size%, x, y, xx, yy)ăă'example to go along with programăSCREEN 13ăFOR i = 1 TO 255ă CIRCLE (160, 100), i, iă CIRCLE (161, 100), i, iăNEXT iăămosaic 3, 1, 1, 160, 100ămosaic 3, 160, 100, 320, 200ăăSUB mosaic (size%, x, y, xx, yy)ăăFOR xsize = x TO xx STEP size% 'only gets the part asked foră FOR ysize = y TO yy STEP size%ă  p = POINT(xsize, ysize) 'gets the color of the pixelă  FOR xblock = xsize - 1 TO xsize + size% - 1'starts a loop to fill ină   FOR yblock = ysize - 1 TO ysize + size% - 1ă    IF (xsize + size%) - 1 > xx THEN EXIT FORă    IF (ysize + size%) - 1 > yy THEN EXIT FORă    PSET (xblock, yblock), pă   NEXT yblockă  NEXT xblockă NEXT ysizeăNEXT xsizeăăEND SUBăJacob Wieles                   ELLIPSES                       j.wieles@hccnet.nl             08-15-00 (15:47)       QB, QBasic, PDS, PB    173  3872     ELLIPSE.BAS 'programma    : ELLIPSE.BAS  (15-08-2000)ă'auteur       : Jacob Wielesă'               Playing with sine and cosine and find oval shapesă'basic        : PowerBASIC en Q(uick)Basicăăădim col(15),x0(15),y0(15),x1(15),y1(15)ădim sides(15),oval(15)ărestore sidedataăfor i=0 to 9ăread sides(i)ănext iărestore ovaldataăfor i=0 to 9ăread oval(i)ănext iăscreen 12ăxm=point(0)ăym=point(1)ăasp=ym/xmăradius=xm/2-2ăwindow(-xm,ym)-(xm-1,-(ym-1))ă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor=10'=====================>> For PowerBASICă  if cr=63 then timedivisor=.8'=========>> For Q(uick)BASICă'The value for the timedivisor are found for a Pentium 100 PCă'For an other PC maybe you must change this valueă'To prevent flickering monitor and SetUpDrawSpeedă  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăDrawLoop&=wp&/timedivisorăăgosub SetupColorăRunFlag=1ăTS$=" Key for stop.               "ăpi#=4*atn(1)ăsteps=120ăfor picture=0 to 9ăn=sides(picture)ăf=oval(picture)ălocate 1,1ăprint TS$ălocate 1,60ăprint picture+1;"from 10"ă'********************************************>> Draw pictureăfor k=0 to stepsă  anglek=k*2*pi#/stepsă  for i=0 to nă    col=col(i+1)ă    anglei=i*2*pi#/nă    x1(i)=x0(i)ă    y1(i)=y0(i)ă    x0=radius*cos(anglek)*cos(anglei)ă    y0=radius*cos(anglek)*sin(anglei)ă    x1=radius*cos(anglek-f*anglei)ă    y1=radius*sin(anglek-f*anglei)ă    x0(i)=x0+x1ă    y0(i)=asp*(y0+y1)ă    if i<>0 then'***********>> draw polygonă      line-(x0(i),y0(i)),colă    elseă      pset(x0(i),y0(i))ă    end ifă  next iă  if k<>0 thenă    for t=0 to n'***********>> connect angular pointsă      line(x1(t),y1(t))-(x0(t),y0(t)),14ă    next tă    for w&=0 to DrawLoop&:next w&ă    inv$=inkey$ă    if inv$<>"" then gosub KeyNextă    if RunFlag=0 then goto QuitProgă  end ifănext kă'********************************************>> Line up ellipseăfor k=0 to stepsă  anglek=k*2*pi#/stepsă  for i=0 to nă    x1(i)=x0(i)ă    y1(i)=y0(i)ă    anglei=i*2*pi#/nă    x0=radius*cos(anglek)*cos(anglei)ă    y0=radius*cos(anglek)*sin(anglei)ă    x1=radius*cos(anglek-f*anglei)ă    y1=radius*sin(anglek-f*anglei)ă    x0(i)=x0+x1ă    y0(i)=asp*(y0+y1)ă  next iă  for t=0 to nă    line(x1(t),y1(t))-(x0(t),y0(t)),14ă  next tănext kăwhile inkey$<>"":wendăt!=timerăwhile timer< t!+2:wendăif k=steps+1 and inkey$<>"" thenă  gosub KeyNextăend ifă'********************************************>> Remove pictureăfor k=0 to stepsă  anglek=k*2*pi#/stepsă  for i=0 to nă    col=0ă    anglei=i*2*pi#/nă    x1(i)=x0(i)ă    y1(i)=y0(i)ă    x0=radius*cos(anglek)*cos(anglei)ă    y0=radius*cos(anglek)*sin(anglei)ă    x1=radius*cos(anglek-f*anglei)ă    y1=radius*sin(anglek-f*anglei)ă    x0(i)=x0+x1ă    y0(i)=asp*(y0+y1)ă    if i<>0 thenă      line-(x0(i),y0(i)),colă    elseă      pset(x0(i),y0(i))ă    end ifă  next iă  if k<>0 thenă    for t=0 to nă      line(x1(t),y1(t))-(x0(t),y0(t)),colă    next tă    for w&=0 to DrawLoop&:next w&ă    inv$=inkey$ă    if inv$<>"" then gosub KeyNextă    if RunFlag=0 then goto QuitProgă  end ifănext kănext pictureăQuitProg:ăclsăscreen 0ăprint" Hit a key for the source."ăendăăSetupColor:ărestore SetupColorDataăfor i=0 to 15ă  read col(i)ănext iăreturnăăăKeyNext:ă  while inkey$<>"":wendă  RunFlag=1ă  locate 1,1ă  print" Key for go on. Esc for end."ă  doă    keyhit$=inkey$ă  loop until keyhit$<>""ă  if keyhit$=CHR$(27) then RunFlag=0ă  locate 1,1ă  print TS$ăreturnăăSetupColorData:ădata 0,9,10,11,12,13,2,3ădata 4,5,6,9,10,11,12,14ăăsidedata:ădata 6,6,7,7,7,8,8,9,10,12ăovaldata:ădata 2,4,2,3,5,2,6,2,2,2ăJacob Wieles                   FAN SHAPE                      j.wieles@hccnet.nl             08-15-00 (15:47)       QB, QBasic, PDS, PB    121  2477     FANSHAPE.BAS'program          : FANSHAPE.BAS   (15-08-2000)ă'ă'auteur           : Jacob Wielesă'basics ?         : POWER and Q(UICK)ă'ădim DrawCol(15)ăYes=1ăNo=0ăscreen 12ă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor=100'=====================>> For PowerBASICă  if cr=63 then timedivisor=8'=========>> For Q(uick)BASICă'The value for the timedivisor are found for a Pentium 100 PCă'For an other PC maybe you must change this valueă'To prevent flickering monitor and SetUpDrawSpeedă  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăDrawLoop&=wp&/timedivisorăăgosub SetUpColorăxm=point(0)ăym=point(1)ăasp=ym/xmăpi=4*atn(1)ăts$=" Hit a key for stop.                "ăwindow (-XM,+YM)-(XM-1,-YM+1)ăSteps = 960ăRadius0=.6*XMăRadius1=.3*XMăLineColor=Yesărestore FanShapeDataăfor fan=1 to 12ă  read FanAngle,var0,var1ă  RunFlag=1ă  locate 1,1ă  print ts$;"           ";fan;"from 12"ă  ColorYesNo:ă  for count=0 to Steps-1ă    Angle0=count*2*pi/Stepsă    Angle1=FanAngle*Angle0ă    X0=Radius0*COS(Angle0)ă    Y0=Radius0*SIN(Angle0*VAR0)ă    X1=Radius1*COS(Angle1)ă    Y1=Radius1*SIN(Angle1+Angle0*VAR1)ă    x=X0+X1ă    y=asp*(Y0+Y1)ă    if LineColor=Yes thenă      Drawcol=DrawCol(1+count mod 2+fan mod 10)ă    elseă      DrawCol=0ă    end ifă    if count=0 thenă      PSET (x,y)ă    elseă      line-(x,y),DrawColă      for w&=0 to DrawLoop&:next w&ă    end ifă    inv$ = INKEY$ă    if inv$<>"" then gosub KeyNextă    if RunFlag=0 then goto QuitProgă  next countă  if LineColor=Yes thenă    w!=timeră    while timer<w!+2:wendă    LineColor=Noă    goto ColorYesNoă  end ifă  LineColor=Yesănext fanăQuitProg:ăclsăscreen 0ăprint" Hit a key for the source."ăendăăSetupColor:ă  restore SetupColorDataă  for i=0 to 15ă    read DrawCol(i)ă  next iăreturnăăăKeyNext:ă  RunFlag=1ă  locate 1,1ă  print" Key for go on. Esc for end."ă  doă    keyhit$=inkey$ă  loop until keyhit$<>""ă  if keyhit$=CHR$(27) then RunFlag=0ă  locate 1,1ă  print TS$ăreturnăăSetupColorData:ădata 0,12,14,13,10,12,14,13ădata 9,14,13,10,12,14,13,10ăăFanShapedata:ădata 486,1,1ădata 485,1,2ădata 484,1,3ădata 486,2,1ădata 485,2,2ădata 483,2,3ădata 486,3,1ădata 485,3,2ădata 484,3,3ădata 475,1,-1ădata 474,1,-2ădata 473,1,-3ăJacob Wieles                   GO ROUND                       j.wieles@hccnet.nl             08-15-00 (15:47)       QB, QBasic, PDS, PB    119  2680     GOROUND.BAS 'program      : GOROUND.BAS    (15-08-2000)ă'auteur       : Jacob.Wielesă'               Playing with sine and cosine and find ??????????????ă'basic        : PowerBASIC en Q(uick)Basicăăădefint x,yădefdbl a,pădim col(15),x0(15),y0(15),x1(15),y1(15)ăscreen 12ăxm=point(0)ăym=point(1)ăwindow(-xm,-ym)-(xm-1,ym-1)ă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor=100'=====================>> For PowerBASICă  if cr=63 then timedivisor=8'=========>> For Q(uick)BASICă'The value for the timedivisor are found for a Pentium 100 PCă'For an other PC maybe you must change this valueă'To prevent flickering monitor and SetUpDrawSpeedă  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăDrawLoop&=wp&/timedivisorăgosub SetupColorăradius=138ăpi=4*atn(1)ăTS$=" Key for stop.                               "ărestore ShapeDataăfor picture=1 to 7ă  Runflag=1ă  clsă  read varx1,varx2,vary1,vary2ă  locate 1,1ă  print TS$ă  locate 1,60ă  print picture;"from 7"ă  k=0ă  doă    k=k+1ă    if k=121 then k=1ă    anglek=k*2*pi/120ă    for i=0 to 10ă      x1(i)=x0(i)ă      y1(i)=y0(i)ă      col=i+1ă      anglei=i*2*pi/5ă      angleki=anglek+angleiă      x0=radius*2*cos(angleki)*cos(angleki/2)ă      y0=radius*1.3*sin(angleki)ă      x1=radius*varx1*sin(angleki*varx2)ă      y1=radius*vary1*cos(angleki*vary2)ă      x0(i)=x0+x1ă      y0(i)=y0+y1ă      if i<>0 thenă        line-(x0(i),y0(i)),col(col)ă      elseă        pset(x0(i),y0(i)),col(col)ă      end ifă    next iă    if k<>1 thenă      for t=0 to 10ă        line(x1(t),y1(t))-(x0(t),y0(t)),14ă      next tă      for w&=0 to DrawLoop&:next w&ă      inv$=inkey$ă      if inv$<>"" then gosub KeyNextă      if RunFlag=0 then goto QuitProgă      if RunFlag=2 then exit doă    end ifă  loopănext pictureăăQuitProg:ăclsăscreen 0ăprint" Hit a key for the source."ăendăăSetupColor:ărestore SetupColorDataăfor i=0 to 15ă  read col(i)ănext iăreturnăăKeyNext:ăwhile inkey$<>"":wendăRunFlag=1ălocate 1,1ăprint" Key for go on. Esc for end. Enter for next."ădoă  keyhit$=inkey$ăloop until keyhit$<>""ăif keyhit$=chr$(27) then RunFlag=0ăif keyhit$=chr$(13) then Runflag=2ălocate 1,1ăprint TS$ăreturnăăSetupColorData:ădata 0,9,10,11,12,13,9,10ădata 11,12,13,9,10,11,12,13ăăShapeData:ădata 0.300,1.5,0.300,1.5ădata 0.250,0.5,0.300,0.5ădata 1.500,0.5,0.750,1.0ădata 0.500,1.0,0.375,0.5ădata 0.300,1.5,0.375,3.0ădata 0.300,0.5,0.300,1.0ădata 0.750,1.5,0.250,1.5ăJacob Wieles                   MASKS                          j.wieles@hccnet.nl             08-15-00 (15:47)       QB, QBasic, PDS, PB    99   2205     MASKS.BAS   'programma      : MASKS.BAS   (15-08-2000)ă'               : Playing with sine and cosine and find masksă'ă'auteur         : Jacob Wielesă'basics ?       : PowerBASIC and Q(uick)BASICăădefint b-zădefdbl a,păColOn=1ăColOff=0ăscreen 12ă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor=100'=====================>> For PowerBASICă  if cr=63 then timedivisor=8'=========>> For Q(uick)BASICă'The value for the timedivisor are found for a Pentium 100 PCă'For an other PC maybe you must change this valueă'To prevent flickering monitor and SetUpDrawSpeedă  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăDrawLoop&=wp&/timedivisorăTS$=" Key for stop. "ăXM=point(0)ăYM=point(1)ăpi=4*atn(1)ăwindow (-XM,-YM)-(XM-1,YM-1)ăRadius=(YM-4)/2ăTotalMask=12ăRunFlag=1ărestore ShapeMaskNumbăfor Mask=1 to TotalMaskă  read ShapeNumberă  SidePolygon=720/ShapeNumberă  locate 1,60ă  print Mask;"from";TotalMaskă  DrawColor=ColOnă  gosub DrawMaskă  t!=timeră  while timer< t!+2:wendă  DrawColor=ColOffă  gosub DrawMaskănext MaskăQuitProg:ăclsăscreen 0ăprint" Hit a key for the source."ăendăăDrawMask:ă  locate 1,1ă  print TS$ă  for DrawStep=0 to 720ă    Angle=DrawStep*2*pi/720ă    Angle2=ShapeNumber*Angleă    R1=Radius*sin(Angle2+Angle)ă    X1=Radius*cos(Angle2-Angle)ă    Y1=R1*sin(Angle)ă    X=X1+Radius*cos(Angle)ă    Y=Y1+Radius*sin(Angle2-Angle)ă    col=14-DrawStep mod SidePolygonă    if DrawColor=ColOff then col=0ă    if DrawStep=0 thenă      pset (X,Y)ă    elseă      line -(X,Y),colă      for w&=0 to DrawLoop&:next w&ă    end ifă    inv$=inkey$ă    if inv$<>"" then gosub KeyNextă    if RunFlag=0 then goto QuitProgă  next DrawStepăreturnăăKeyNext:ăRunFlag=1ălocate 1,1ăprint" Key for go on."ălocate 2,1ăprint" Esc for end. "ădoăkeyhit$=inkey$ăloop until keyhit$<>""ăif keyhit$=CHR$(27) then RunFlag=0ălocate 1,1ăprint TS$ălocate 2,1ăprint string$(14," ")ăreturnăăShapeMaskNumb:ădata 120,121,122,142,146,178,179,180,181,182,238,242ăJacob Wieles                   USING DRAW AND VARPTR$         j.wieles@hccnet.nl             08-15-00 (15:47)       QB, QBasic, PDS, PB    89   2311     VARPDRAW.BAS'program      : VARPDRAW.BAS  (15-08-2000)ă'auteur       : Jacob Wielesă'               Playing with DRAW and VARPTR$ă'basic        : PowerBASIC en Q(uick)Basică'             : If you have the two basics then you find a differendă'               moire pattern on the same pictures.ă'             : With PowerBasic the looks betterăădefint a-zăscreen 12ă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor=100'=====================>> For PowerBASICă  if cr=63 then timedivisor=8'=========>> For Q(uick)BASICă'The value for the timedivisor are found for a Pentium 100 PCă'For an other PC maybe you must change this valueă'To prevent flickering monitor and SetUpDrawSpeedă  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăDrawLoop&=wp&/timedivisorăăxm=point(0)ăym=point(1)ăwindow (xm-1,ym-1)-(-xm,-ym)ăfor i=1 to 90ă  pset(0,70)ă  X=3*i-10ă  Y=2*i-30ă  angle=i-30ă  linecol=i mod 5 + 10ă  gosub DrawPicture1ă  for w&=0 to DrawLoop&:next w&ă  angle=-angleă  gosub DrawPicture1ă  for w&=0 to DrawLoop&:next w&ănext iălocate 1,1ăprint" Hit a key for next."ăhitkey$=input$(1)ăclsăfor i=1 to 80ă  pset(0,0)ă  X=i*3-30ă  Y=i*2ă  angle=iă  linecol=i mod 5 + 10ă  gosub DrawPicture2ă  for w&=0 to DrawLoop&:next w&ă  angle=-angleă  gosub DrawPicture2ă  for w&=0 to DrawLoop&:next w&ănext iăwhile inkey$<>"":wendălocate 1,1ăprint" Hit a key for end."ăhitkey$=input$(1)ăQuitProg:ăclsăscreen 0ăprint" Hit a key for the source."ăendăăDrawPicture1:ă  draw"TA="+VARPTR$(angle)+"C="+VARPTR$(linecol)ă  draw"M+="+VARPTR$(X)+",+="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",+="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",-="+VARPTR$(Y)ă  draw"M+="+VARPTR$(X)+",-="+VARPTR$(Y)ăreturnăăDrawPicture2:ă  draw"TA="+VARPTR$(angle)+"C="+VARPTR$(linecol)ă  draw"M+="+VARPTR$(X)+",+="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",+="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",-="+VARPTR$(Y)ă  draw"M+="+VARPTR$(X)+",-="+VARPTR$(Y)ă  draw"M+="+VARPTR$(X)+",-="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",-="+VARPTR$(Y)ă  draw"M-="+VARPTR$(X)+",+="+VARPTR$(Y)ă  draw"M+="+VARPTR$(X)+",+="+VARPTR$(Y)ăreturnăTom Shearer                    VORTEX GRAPHICAL DEMO          shearer@bencombegables.freeserv09-09-00 (15:43)       QB, QBasic, PDS        551  36406    VORTEX.BAS  DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VORTEX.ZIP",4^6:Z&=27065:?STRING$(50,177);ăU"%up()%9%%%R-%#?mNNFL<;)['%%%,-%%%1%I%%E>MAC4GA.WS1;0B.y3T=je^5LăU"l[dDK%VV/d1+gyiscnRT1*+o:'7/twt/L81r1\?&$BiXF5:'_7$vdzzWD*Gmb$GăU"B_Q2DL31;:BkdFQ%6wn4K2f,sE%;Qdd60^+bsLbSm#P/)(_H7L)KC*Fx8\pExZrăU"uA,6;GuHjoTo)jBI+%J[HH<Z^6>3d3.N+YZuuX92;D42-&5Z'oOAaIF]T$svt[<ăU"T'ADf0+H%'4pq/J#s=m-5dZ*ML=*(5JPAb61E52Vv3(JFnKi?<KT+^Rw-b^KU#DăU"YEnTnDAN]?,WPt(oKHEt[a\JeC)pKar7PHIKjTN;&bY4CND&Nm/<$cC2,2L'G]wăU"*#%\(#dg)%QMQ<uVU#Z=hbmtIQEW.:)akPA5o<MCD<ACI]R,0-._3tW[6TT0\H'ăU"ku*:R1s;cJ/xBE2\$h<R*^Ob6rD/:_+Ec:X_dk+9RworF<d(9eE<5dNAJyc1g9săU"6S36]mWAI;?_t:-/gSFw-M2Zr7DbTn[CO]+UFv,?#[ND9OoM<6:eB;=vBooBLT=ăU"-Ht\,y;DI7MCP&Oj$U/>,Gss\#]9iV5<#1<U6me^;nB$%$;H[&qLAonzxGL?^fJăU"/TK4MWLAjrN=/S5S7)99[RO7KeSOq#SkC-,'(erQ##gGq+=1;p2qg9v9MY:*-h)ăU".2uQgq.nOJAM_>,ANpWziF9UkaCSPN:eicUr8A-tF+f,C[*_IwS#$N6qIb&d_tiăU"8D$iLj,7U<bS$1rDi:.Kbs\)>V6v^V=H_ThN+4J_BYy<=0u2YVVZ_?9Wb)xKdlZăU"V/Gg]Jq4t6BWo1DsQ-%7VhC_g''hf6fsxpKN2Sz'9;\Gii=CZJy*e^E98<w-Cc*ăU"o?-#:T>vrC(r48k0?GG8bDA(KmHnLDo<u#QDn(Lx^6+hvL]9R)-+RT+x%xa,:$*ăU"IPalGcEw51WUF8og%n.-\yPBx6EQN%%up()%9%%%I-%4>RNN'YX91b/[%%.s%%%ăU"/%.%%%t#wyj'#Sgx%NfLVjoOz+mgZ0)\L?'D,uP-%POzPD,23\g5d)*$%%MEEE(ăU"oaQ^'$1hs(hg%X#1vna&$MME^'Q^&n13Hp1a.FzTp^$lW:JxP2JOhF#MqrFM&DDăU"nuXtx+X+wPN>luDtq6=s(kNUIdr&N8rVujwE$\\\wBp2\c7Nx_TiP.NfLZ&.LrnăU"n(sNLd&-GH>:f;.ERDpof7]_aZS7Hap<-tG:r$qnJg2u8tVRh6l#?1>vfO=zcMxăU"ms^rPq.Nv^i$nNu$jVD7ZxwT>f8^Muud(7sNHf.MZjr$nSMQ$rm4dqY?vpXd>ImăU"6H%l3D_tCaY:[(,3elX8>Xq*>fVW46HmlV4FflS*24Sk\WG52deRej\>WW1#<UuăU"ndP&tJvn.Y:P%(N6IdkedP&7kY,Kr#W^pfUS,+3*B1^jIjjZGF/eQc],et7tMHHăU"HcDL4]n,CW]rRVq>F*ok^Wu&k.$[Nv1/7v0FWwvkNXTK85NjatIeeR./5+GY:BsăU"t&Kc0U)uX)78eWrZ9FcV.&7^d-SiV,%sa7pT2)ril(i9vsZ$O0ilEBcNLncudn8ăU"9w1q)?6h7b,MuPffhdYWD6n/MUDLmptOpw*Grh.KOehlFm3AQ0uhf0X>Id&bPJWăU"KBQp'lAr/>X/uFIT-/xIKP>&7o?i9*pxuq^9GH9<L(L=P*7A/%>P:nPC$HZB,a]ăU"qx0;;('Y-1?MZAB7Ji?4>jJz=%5fD+/XR\X,qC+Q(i,rKiNMN95gJPS,?i,5wilăU"<Grh1T6hMbtmcnZt$bvD8uxwthW72mLmNlJtf]8Th[hjtYC$CMP=4:0#G6$s\mcăU"jHYKTE6lPk.A%<D$A(\KP-W+W=f?5Gkx+ou15uOqMAB'n$ssY-qI/U)UrH#F)RYăU"%0h)S'o%y%8fRn%s1iV]ridrD;DOhOVR^q,jGRJJbT84JjL:F_(>tsd'fYfTl9păU"r;cpF\#l8wi2rtx9pHj#DMjMBJeHQJHIs36t'l_'ug0T?Jmn,hHYcT-nZdPCJABăU"U:/n'_R(tJ]'v#aga;Aqja9^0]MA^N2AAO5k5d\KsvQx'?GH;\veFMNxDPv])'MăU"jT#%=&>#>k-0XrN0$i,Pie,8qh,AOcrV-Rh+>ThEXCJJt2lmvyiC.IdKEx,MLGaăU"47M=+Xt''Xvyc;T^200iYD2IcNK>-=MR;bJ(FogQ>(m8YQm/VbY0/%fC(4&G=W^ăU"N8#O./5E9>(IQn-(;u>q*us%'l:T=DVO^U#l&YFFKNCLf+HsSroY$#YX$6M8St9ăU"7Sa_7zcG_SLxjPaLo'BLDGEqc]]4%7Re5>83SjPX=9YVQTq?$0dCF8P.r[MJ1>IăU"2njSn,SiDmR+Ru]rJu-4eE0)1otC%#0/W9S/qYtSp'WE<T<x5$q=&r<WOi(SF%7ăU"zF%X:fbdwhbdpTd]GDcEKDo]xd[_s3i>8btknrtItjgYB[pbIMYc,Uj^;J:(+SnăU"97lane&5>D>dCT:X;,ZC%.aZ#=.A&f<(44f^o.q;A_Z9Far^*W3E.712r=)Q]DXăU"\gAQnmTI);;Fz<LuNHZ4$OYDYcLezqRSWZA:s3Wwq/-;pGR_Sb8&pX<2n$GZnFJăU"sAc4]2k$g-)X;=o0B_D>Xd2mu=nHGFI++45m;j61k5(Y2:KLf=-A;Oquw1KUhF-ăU"19gU9a=>T\dU&7S*bso'uAc;4d9&?9;T9,o_bdEp5L8wF/Z7D_ZoL.j4=:+(jH\ăU"6GLC#yrraMV;i$3J77<Jlo;R+=FjYvwae265Vk_*[u.x^AJnNUp>68<,1)lR2%căU"*u*0Yd>H;HGm.VMShi_o+m6b)t-XqHutGOyZA97gB;ASs3(LGOhhf#Rl3:BgC%IăU"ak4-7[B$y+k7c9mt<uF3c#=J^4SksRk/UTA9DVeYE+Awg6_GjPXlXHjm\lWFQF9ăU"?-o=tBQ/b]RiVOn9&O9\>h*<F0#O4&MNk#^6ipNDu:WZriZ9iv15Icr-TrHWpL7ăU"tFt9u6p:4iA,X7$Q?EqZ%XQYlUV7i,4MbK[S)p]11a<qlS5sOW^3=lf[[6Gk+vuăU"Xl^$YXnk^u9n]F'qf^]Or3O^'L'[11*dh&G4r<FDF?O0vZj-$zxCAqtt?D>?BT$ăU"jg??R%ij?V;ez0_*ID5M9UrGQhEGbfif-Te1vUB0#S(ss=2Y#1*TUD--%^K+SvGăU"9;GSs_?WFW]=dAK[]iEi-,qp8oQ)Yfu0xLZZ4BZbTmjo-Qn$z1TP0VkXuhRmf5LăU"*HEtb[<;q*7jQHotz$7^27YrW)pfkVF66XiEHuc^[*O,G\k(6ZCPM-mv;)]tQwGăU"DG._uDGOh3>Ok#1Uk>F/wzoi.'<)%[K'uYQ4f%fqMN,aaxPEm8<Kuo_.)771wo]ăU"x(M+%DkCD#fhGt4tQeL^,RYpm8]8;J,QI'E:Tm//p$i<nntA*Q,#KRn+F*Ho-LsăU"#y/;y9?'Z)ei5i/KbhbB+2B+)<^F2^Bkm&A2cK4Udn'mM'Idbn;LbZdiVg#MdRMăU"Y&wBr:tSXJ$:A^#Di-uVOjX^af6?L'\*c436>EeHqV2<_<vip#h*X-M3DQ-ViK/ăU"rZZ'C;SaUk155Hl[CjgE4Hp+AR,6^Y\BBuw[M%\G=o8p/=)99aA=O<JXQ>$spT?ăU";$KjrK&t/a1Pej>ri4]ax2)_;T?r6te:0#i8p0ia*f;;rpMIEZ_.).qr7*Y?T5BăU"*Z,b^cL[Q%]C?HfweH^-k6_?g(mU+UxP?_3/>g9#G)g:w_F6JQO%K%*ceal1sVdăU"0j23TJd/Od9&iem0dDg^S^>iHg&ZsxRu.I[BX0NiM7GTXzF;3viCAZ'rQ>[eS,6ăU"b[E2*Ol&+31oH0'/.5H+;-W476AFiZXpWEk7JDYr<k*RV/^($9HDYIP'6%;6$7NăU"+qbqb,D-Ms[8NGfse8dwh>;X?r*$;Tr#$P.670H(Klj(jqZt_UVd?54<YrDuY,'ăU"5Cn\5PHLbAZcK=/=5HNr:I/G3K>Q:D_j>]\O\pX6YP6_8Oqm^H?A/n(&g#YCq?'ăU"R5X.Gnn(98ThYHuAiWz$7Y7TECUnTX(&[c8SM7HNs50Yy>cJpvauQ%XVZ$vS=#]ăU"z?KtpX);kvi(_%;<Q.cZ3sJEAjp8i#S4%fFkwFCqPPM9mtitIW)6JC))-aqTh9WăU"6?2QVd'S*o>.x5R>_#XWYsDNXMCp6daNuqpFjZgz4ccet+ZqcYBq3VFVlFXKJb2ăU"VJC*P\+0,->),FH)0g]20imzQiKta$YFRO+T[R>Xe\u7Dq&8(6<^:3pu4'L9s7%ăU"]me_nO'XfanX#Z5BbAJ1#^7?=iH^QdxS)tnMfk39V,NqWc/HPkMp,Gm]MsMkxShăU"JD>_]Qq5X*0<M+^eg#Qm$gRA%*QDokl-f)5\hT:I9t>smbUXuHg.Nd5)R9:b'1/ăU"p69c72+XGKoFHCKpHK<SMUvrOzXXsxHMY3,HV9ad9,umS]xUol)7,$EA.iOf1w2ăU"bO]ZN(1rCs7XiXflLEJFV35g=;DNWZ<D9LQ$:([KUmc+q56fTj/,EZ5;#UP.,]ZăU"]b:iqk/#F1ak9:F26[d_-c#&'c%^dEC:TmhXz,LTz+iX40U\#fwu%1c#:k0K#u#ăU"#5T:h.?iNl%kUF5;KlE2]<P]15K:>>K:YHSGjO8jUk_2Uvy=ccN%2I)8G:(M<iKăU"n,ejP;Jh%_dLuZ/5a'Htja0nT;X,b$uhxhM-#29cFSk27ZbQ$7YsXcNSX,0m:SrăU"3m;UDp$G6ha0ITh$:;<ZOAY:DQH/TX?F+dDm)c7S+^WKkY#B:7$EuFf60PH$9N'ăU"ELusbopxj,Y8q:./iCP)8U]*-%K&]DS<-3/qzN;8UNKMMu0=c$euDtD::=Q8'70ăU"T],^LGxUSv1615TZj&n3Nd<qO3j8vA;AT_WhE](*2#CK)*:(8N^JfVjupp/g12(ăU"^=j>;*3H[/<gI-.fL'rqjY\huj*xCgYqyqSH-Gk[>GUT7m=iJ?nHmX'ZPOlrq1năU"t/*uM3<Xnw=/+(gSK$$K6s*qa1<q_U1O</;8T<04//.W.0Wi<U/0wa7H[;cxD;TăU"[6aOC(IBn\W%]Y4O3xU>6Cc/xJ]'#]Z)03]2\e-MKY%Xhub?cVY8uWCd4RHiV;,ăU"r8ouAr6N3KC2JX,ISMp+FasGKQS,p4SJd/;s9F?4,p\m?L36,TXTfMkFYk>I+^eăU"V7ie54]#QEnpSjQXu#q[5Z[F.-nRdumh?=?;+nn[JlRBeY6]i:77c+0lX5O'.WZăU"(M7&Md.gFksil^,m:n>Q;>C.=uF#]P2,U&t\K-\XUW)=KFW&Q4T1rss?G1gf$J[ăU"ZNQ80jA=N$4Hk]NQ_dQZRM]/WFis<ywS/5c^b_=mY_h8'Hd2)q\(LRt&=9qgQQ$ăU"]plPj4MNinHt:fplVHCqf5L8vXssB/^TT%0Q(5J>m-]dMJFX0k&*1B7R?KcS&*JăU"a'm'b1;)fp*?tPZ.LWU*ICH>i3>jq[62]hY:NM%f<b$aj+u2]Iii;B/-_3')Tx7ăU"7TtS(iGYN,shJ>5yn;$V2S(Jsp=Q/*:b9UzZ,rDO+rF0Oc<^_]KiY8D/F*(&c[găU"Aj;9r*e-d\TT(7JTKdB8\Y_?\G-axKMb6P%piqEJjY#aeKU$q24/wNd2),L&S)[ăU"3n5'H<Y[LZB]gRyqfC>HUVi(vKIzMg%=+XhNMkL%8oJ,Vu5RD5pV-ThRJrl^P_GăU"Rx3k&FeVU[lU1L(]Dyb)OI5.6n&N(<9TxCO6,db6Y>6G9K_CF8^-MJG$$6&aF_^ăU")Ow5W(+\lY('6fn]#/-uj17K;Sv%WHG62ILuRqW=VH>?udzO,EjZ)(^D8P_k%$]ăU"J\?qM'g<#JALSc=hq,0\g:I?3B)m9c3l^QKs3/Hn^#2smY:.0afKC;D?:tYJ=X^ăU"ab%d4ID1k5o96Z&_:UK<)i)+en'Wen,mqgZu09&cOK\'h:SX#2nR8:ktDH>oY0CăU"^>*;pD)>HX_$WR,U56?9f)q)qV<((f0a*DgiFvgNIZ2O\Q8#ra^0Rs43(WwKNd_ăU"a(s%RPpc)goDqT9TbFO(J2?Ro-:aU.;n^-i^7ch6.T(,+R$5VMxf6a(DU(i5QL(ăU"<HZGbU<<hhY%u%:u,atc^d.f1GK;2R_20kb?i62$cGP[#PEFj,]TKUKpR?:$.hYăU"r1rF+fu/v$*E0eKTQ+2)r5EQ?%nfwOM#>rIL]oMe](7JUY8U*7i$SJ8jAl0;&gLăU"3U.UNfVPt7Pdpq]*MI;QR1&FlM[oU,xpP\8jvtQZsQjUn]2vg1[FyqRV$d9KiVBăU"lgZw'_A6w+1CTC;[4$[f:7V$Zv0qK3e/W-3/Av.aj$q0_eTZ<=Zsy84hs[qYtk4ăU"QM'S,q3/fRetDeTS,G^_j03QaSMElq1/>NaR2_fEMpsf;cs3m*cS.'b5gTNZ\Q_ăU"?4MC>1Rio<Qb;hQ'b^VEpZMu1-jkkcWI>\Y8R-q1.d:R1r98m.55KY&VKW8kTUiăU"t8ur4tgc4gYqg=Mxf'#zZq.aGKGS,S1OLpa62lDCrHtTXPW;Dgg()KV4VZso64jăU"BTEsfEVFP<%-^3dX<(5FzDL8j]\in_=$lq0]x&)^%,;\C37N;48?\#7LDA#eLd]ăU"8X]WiB#-L#Se%'$9,7\1cstXA7<UQ7l9Y8uMTwuw=H2r;>MKTLLM/H4u;</K*;băU"A>4civ14I^/f^Fd/nVdYBV:#A,aHkF:zS*3Dp-T7ZA,pj^&'Pr$\i)84KS_*[IkăU"Q%]4(]9Ng9]dil*FI)+p.*R:E\i_K)fS4SH)y.5TCCN'nk&8N>QGp5>tKDq'Cz_ăU"St.Trs0,FusH;KxipY3,:6_UP#FYa5UVEUk5VI+D'FEBaq^1J^Xpo*\T.\mvJ98ăU"j=kz#v#DOd#$E%$6b4mJ*)#Qn5ZG=g5Pe;BGE+n\$lKtj+q_7H^E[trhVm^Z9psăU"we,E,QNpA)89<ooBi8g4^9iv1=<jAC;;WF0>etG*UYxKYJ-f.:P2;noiKmFBL;7ăU"u*VV<yp4:QF?:U6o*2c#A\7.BXUd*?\BX:SQaVfa67i:FPN>^IK-8k_7puj&7JhăU"azqIwugAmvlw?P(PhG&hTf7t-R3aECtPXeiP8oUmoph4Hn#=+h]9&XthEp2TD95ăU"0HG&SZ)Vsm4+#J-KPDb=5JhO>qL7*0W]TY\Oq5=EX4LG$0x)$96]&PB.84=q#E5ăU"1RjvivQE7b&jhseeRjZftVL(9prLd4VuaRWLBHXrC^Dn=dw=Z4(dHdW\cpwE<vbăU"j04z[cdS*hBT5W_=[5R3XqKD^,Xr(Es/).$,li+1]G8A6vlJs<-eMU9m27M/%29ăU";U5.)BJ%/afs%bui>tbUc<-6,9F4K>0lzu=pthYCRC;>fDw5R+k$B-8Wq<TWrq$ăU"A:+[8ot)BtZ705=?o:d0/-:LcND,B)C%npepAj\+?N)E2\X$^Kj*kD%8V=Y79Q)ăU"1vs]olJdF+$SCe_i;BV-'_fiNOCo6v5Es2i*uX674arO&-Xl&MM/V9I&$fhD2\NăU"?P$=h9kHOR>>iLA^R2g$nn>lPAGux>J9YXnz4<jX2dPAgc3RV84Kr/$V5vKh4bZăU"bif['nH%:%G/[IZ$+&EUP&H)rg+#K=^&;Z5&[M9'qSu67ouv_1qbZevwUcRH[l8ăU"T>t;67VyO_xt[n>0r1La2/C8eN8xgs]<#L\.L\?/\,t[c2b(r2LtW8I#4R6K+<HăU"nI#P:h:p3/8E25vuYg+pa?Rs2IvLv$hVAuY/\?td*e[AV_1sAv879X#_W21:**2ăU"Q%16P(-Oe;fu\>5TS>K]]kr$y5YGFpbFc*n2GuNX<EYa',jNGcM9C#+5+U<Rh3XăU"=GOE]isva,HX$7YJ/6+IpXz>nrW#d7As;P+umqV=LiFZ)J9+>8&#U5JHMImT,/DăU"78Qj1koa>Bh.HluE]?-A<+?A7Mm6-qK9qp=paGw98Bt*cX98$hqn[d)(*.=[VBpăU"rn5K(pfBfH^jt3nv0v,R,oMg<>IJ3-h(O[b#K]b>;TQ9'R#+*0yWOY.c,gM1h2,ăU"XS.+(+(Y0.]6VIR=%VA6=-4X_lsTUY.Mg7IB;%)K,bI%lrqac$9iFuCpM.75u[$ăU"N(Z%ht(Wd%?LCdFr8'4I84$WzYHHctD;R\AiL<[56ltn90$TFb4FI;#A'WgI^ReăU"7.DHU]f%p8c$>.iPTm>IBx%B*NP?ckKqWZi<UVpGMmt\C?8Fw[-g3+Jn(KbF97NăU"h'b$P$qJ=/<u$Zp9<vi7Kuw5nvC,l<jF?vJ9efdib41bASOT0l8X0[WF;g6i^AqăU"tL<K5nxB+[LR=GBqksun4c.Pw#;aLTp\_T2.\U1SRcf-u9;&YqZ<V.2#U\H<ikNăU"(W+6IVYi>8(%)'(07QTTqWfb'8-7$O,3h(C&MuTUEw/B7lnlpTk.'^ST^/,,aSkăU"RV+Ui]N<;v<GWWT?s0F[+)LcGt'>uX?Ng,+I3O*mgfXukJ/Fk,6+VQ_2b+h]rUqăU"t1[=nOxa]'vUdh\V3pGt?w'OIgTQrp5O;;\OTpZ4pRF_?lPZpW-n9vEjFTJi0NfăU"lSd<';3UgW<KPSf.N_Ju)cvGVbGV7rFXIJ/Llnn&O<.HkC^3M:EN7/%<Y'8wDCXăU"*IFQ&X'Ss*AA3Z?2LgW25a4an]JQ)po2L/E;<h*njE\,CAu^is=g#W[WZeNBUo#ăU"GW;\-cZDoZ;juOz2S>=/iXRO(NuLF65uh<cH-=bh=WOrkrXTS^aalqVW-a7R_<jăU"jXXL:)1HP*4:Gt4(BgMKCs5g47]saqQ%.vRRZeuKhD8q,;m1H>G101FA9]/Fhq6ăU"J)0hJUK#w$N_^%%j5o5ii\&q]+1c]sT=,ph=x<(oibmII(QNFk*h%GDlzE-UQLbăU"*?vjkeo7YvubAON)^qNw8qmrCH=dve8%DyC.I0SQ-cis]^i9O\=e0CBS0d_KXLEăU"evSHEnCRiQ\[QINkUhkm:R^Olqhp%=5y%Il]V7U0qi\stilWsH-7_?5]ELAM40MăU"M3^J_<6+Smi=Z.+VSGrbQhsh>J_O6gV%Oh*;*_u1Se0gqXCOD;sOtoQMgW%xu;0ăU"OYhr35^jxqqDOWT\46DUX5rCi2'=yA.ee>mYVaErKY%2?1=OB<0i3JYnJ])of9căU"#ihsjg6wvXA>X;:J.hacE07q5_87c6g5zA]$Cv5uU]Sh<3:V[f6Qah5H:AS>T?\ăU"<[Z2Iu?7wsPoTu,aX$EaRk&3B$0'B7_umgg3iP.FFa1F,qm;Q)UbDO*bdgQZSghăU"ZUA.#rt';Tq*\;3Ww=9%lW347UaXAGue#Ta59vV4?1$AWO=T5>%tT<aFK9]e6*făU"[A$40]vO%7^,cbgs.?6+4T?=/GnMd*m=Woith#h2;=?/bFw\9bXSSnqJ<HK?]%)ăU"c,HcX/E/d2XqOX89i;>$$S:YZK+utUb->'%<Zq6/-NXaDS0:;Aj1Vc>oP80]Qw$ăU"RzEM+1Y#bg?uy;4,slmZn$?n_Un%AgP+psgzwoNa4ePrVJ&SKsuuRCgp+&4H;'NăU"+aqP4U,J3ndro<Xk)5[lD]Y$mZeQl696'S9kYBIEkq?Gc_P5;6h^p2oD)mq<hoHăU"0WY+1e+1%?Ye%dA]?9C%H8NT<gIW5Si\A+ro=02vNK'BX9H.]daW2*p$/qJ.PN5ăU"t,RCS?XB7_op-?DPn'SEY#k.X+6Z$Nr9V'P64/2l<2m/4EMP2Rb<Tw_;'XKLi5*ăU"3igJa>/KT)wJ,(m,QZk-a$.U=FhGg'/eLeeHW,qZ\MOy:pSt>]AJPe8gRbGl&j7ăU"WJ;\mPx3]r$&%qfAh%wug._\iGAFq<K_,,8E[aAt7d?iO(ryAOcTE,VcJn1rYFWăU"nSMCYbl/\lYS&Nn=G2Hfn1>iH>0F'9cd9ca'%_yOF^Kj\>^K2yE<TpMN/R6I-m^ăU"^vtTpDI.ZWpdv%D*1,/H9I::)K<lX'9JCj%#Il:V$6TEYjcB[kY3%HjA(K,a84_ăU"cvWB6p<]VQnK)j[Rx4s%1E.-UQ[-+Ztn/6XHc)7m:p[7(oa_M(i;[f=P:+4teXcăU"%78K<E&#czQ80_O8EEmU,hXGQ>g6dP.vZdX(no9,us&vM7fW^$:OY>qi$I1eu>iăU"KK/(,a]$80qJ\lOSZz'=flpFZ)(]>rm-5rPWeJ<hkI'oOw4kLnetDJ30x?;fq]zăU"u$Ar4.chfUbjef2bbBF1,h/0OH/;;p2M;/35FS-/S1/gE-p'^InBLDJ^u;P(8+JăU"k%P5QS\5.et.x?HW5ra3e61AF3r66Yp7Jl:h0]q>Hp't;f9=KXR=k6S7nbVhxmtăU"^<.'Xa//:ogq<)wr<F'ulI/hV&K5#S$_eg0l=KVFX1i'D-4/vUJJ[8RrW7EU.VuăU"I/_mUC,oJW/8XfP0.Y.vWvG.XcL$^s=[)7w'cr^^Z<GOXMr.4r.LTX]pgC^2KYYăU"./:vWM$pw-Ypm*1TN_T_q-7h[*pT)f'M-wce/bBR\Y7vVV8r^61MZvErvDN/q4/ăU"_=/<h%Sj[6UQ3V5cX5Fmhfb;g_ahi^bhAcZ;D6h$IF)r;8#PJ4(kzByrQS(.n8MăU")&4Lt.M&am&7C5F^ffF?/hPXEKPj:4\8.L.Jg#.ZX#r2lIzE]uOampUj0kt-wCSăU"3G8k#LNM3.iXesjVAmR%h6kIcsN5QtZvpXK?tFPA;%Mk6Es]H=uO<(Sa&4/EHjsăU"?9;5R(%2t^qJB;\*h'Dsr#%29b2c6:k.C?H;.a&.c65JTJlOV?o/-fi2CR_IK>căU"*mr_ICXq>t_-6rIzO&IayRh^<DRcBi1F4WVZy$3V;X*VK(A/.raQ=/9+J$Ds]&uăU"cU0RhLA+qEKn9[h[D_FXq+4+*pXzAVQPwrq5b#BWG(MF]MJ2-DY2SmAhhNu;9N'ăU"&>k5-qwt4]A221xT>5R#9\^I6VLl[bAc>0H$^^T?BQd9%w^v<F.[lonql>EMZ3]ăU">=2r;?EVCUQww[j7W_,yZs1iKkahh%YM1QZ&##Rx:?uc>FA]r7r&LeRIyZbGM8căU"i5U+KlaiUT3*^c&n<o31]f_/aR<F3rO_g.1Lsfmo][0$EqI77cfna17Yw:k*l#9ăU"Z(p+cq+8LeoodCqQn_(O%qoj^TFJmj0nA,=#HebP+u,I$*9dEY[G-DX('QNQ$iLăU"q_r-w#=$h9XiYUUME7\#\)G.0k;xe7alDVWW^IgQ-)dRw3\p\eN(n.KRI(3v6$(ăU"mbnLl^Wp<Z6if;+Vk\P;a?>nM&XQj97xLOgmh?c/'\hH*#=MqYn=Xrve8mo'wh^ăU"Yu8V?T<2o_I(]&GpcS/7V+%L$ejm6.d2U>\->/tdZr=v5#.daDBgrBD;o6T=_gRăU"8/sMsKCO,q/]^?8u'bGafWk(:ZjpKonasNX]4&KEM+d5*19XLZPn'r$i0qovhAuăU"au>[Yfo6P#$USITuV=.aJOd1=,>F<8&Tm3hcL<Z3H\z0bQoh\K?l9KhB+wp%0a-ăU",iix8)ZXYT8[r,;LBAAS*.%DLOhzKbR;=gU(nKh54[B]E)gj>OPC8vlXTL8ZwHiăU"n'KYLBLiZ8>Lfu6TQQfr?KLc</?21(f[CF\uO%qSM*gifm/Vtrt1FRKDx,j+6*;ăU"N709S$G\80qnNOdsjXQ-jW9FapE9XW^\Fl#LebFtpjnkgFgkSR+T=CnSFqE+9a:ăU"fBN9rLg6.A%2u1gV4upaJ&jlp=Vc4\hr[:*u7%H1:c;kMv,CGN,9*m$cUR/3G.săU"=sSAQKs]3oRE(Sf\//^pOdI6:b;_zIUt<A5S.\#Or6+N&lRB-Zts,##i_0JMk]4ăU"pq.M_vO=m<niRi_;qvRW0Qocr>$%6hfl,],+cQU'B3Vwg2%cZlh'_'bRAI7eo=0ăU"M45eC/*0,?iVfueJ<Y]d2:<j1g^kH#m*O)r+_8T71PYWBzU0T;J0i*[&j'T)GjJăU"9Yf<tu[hXxH7l3ye6c-PQNDDkMiB7-is1-L,Akbjbs,rDi.>b?ahZ$kVmC6SgtgăU"&6SIxFc2L;G0fZ;'^&jBx<)9(n<3i8v&2xv8p2\q(0]])L#W&:0&*]*%vqMr4u+ăU"cZx):.n]T*af3OBY#^YKGpO^6;R9D:2JX8iHz%&4Ok&-bs[HKT7buoYhHQ*sxruăU"(VNT6\qw-A7JKgS,cLsBpsZ)fk9L4eaZE)P(=TZT<>TD_-Gnr*q\hnA_<IVY(3$ăU"1sV-U6:0'6c1b0<s/7ZEi6*n&^(a]b?Uea+q)8V-S(.D.cdZW80<VU_JIGLC^lfăU"k1i8fCp%2yCdp%%ljs&UqL0w[$;etWRU[pxa^#k8c$7zaQUQHwn<%Hh6\p^CtJhăU"iZSFz2GKf(K7g_Q.)5wIX(AtTn,&n.fSnRY90OFmWlIC'eH636q]COu/nhm-e8kăU"_Hi7/RM.GZrSQ7dg9ML?F*H+eMKjlp&.N#)p.OzGCtEDq.Cfhtn0Ta3\>K]r%\FăU":97[m:$jVrj]Ls^Bm$4o63Y]2ld4BMpPO:VmPFd5GKF7L%EsY;TGU&=#duSVEAdăU"C<)Gt(VU;q6Q^V1,3CZfS2:kfG,ma(?FZcd');$sV%e<T>9e*/>hGVJG\p]M#QtăU"HbL'KkBQDa-va?t=a:uzfuOivtqnh7Zk7rQ6.LNMlv3Ir2Z(vAutS+1AYdL.EJMăU"dy2:TvEZc1fgJ3TcZk-dO\$+D8uLOy5:qG#NWUi.%K4f,glH93<C8-4O$(i,<&RăU"ss$?'iX'oHq3HPVJ)wU9whFx)U.W[kA^f;H#]2UD.\Lzk&(-.S9Z&NJ[dDnUDWrăU"zcgNB79nqh*]V,<?brngjVvZ[v99Zvv[Lk'XhfnMslJt',m_-Z0;F^:,i4^ENL/ăU"2]T*'hfAsVq-N0>E&g^4L+-[Cht,'OW[8-2GB8[9$(7k=(CpU)%qItvi>epBTi,ăEND SUBăSUB V2ăU"_TfQ't*J+[qu)cp$NwFi[V%D(a1t*LV^3ntCA>R?G#aKrk^8+dgp&fL=^N*6igwăU"A]2UhVo+d.2cT/R.FZ.fQ2Wipop86(jg7YxmN8BmgK)xzS0Hn+o4^PJ9BYi/('KăU";?%l1_DaD:/.#s5Im&%&nCIUO-1&>/Zc64G3h-f.S><#,DlqK*(\O&J.RS.W.9MăU"N%zON&hjL?8oT,^g>W_XR7sDP$hL+%sm49H$nn4$^bC-Ca3U]NRuJpr$e9#w$MvăU"bA\sc6MZuEdBDSU<2:AdTNKpI,/2fcr(amfG,]d6$ONu*QbMk$iDboc6Auk4u4;ăU".\9B46m6s3nBq&b\lZPYG6Mvz/%rUD9nDu(_$N:EXc1HEX\Cwz-%2,gf8\/ku?găU"FbtRDoegbkK8<L$#<i5n?e5g/<,Eo2yx3Dt*[b>QmZXGiRW(wrtwqF5K'_#Nt#XăU"gC2RiF-0RTdNY$aS3U]+9&3Bp_C]p]oB$-;fFkFEZ2)ER(&p/Tsoqh9q0R#Mw&YăU"niW1laMeZ.aMXM.-h-M<:%t(u&dy&2ond+Yvrpjv#e:04x8H$ih?wwN,o8_r)eVăU"iwl3#p*Ne:bssrJEraqR2#W=$k'<#dByiS4Ei89k?joEi0.+fYp(PCk9hgu1vs*ăU"TcnR2uYBbMF6QNGufT0#>jof$;E;(dC,KCPWY/B.Ti,RrE8(,Ra8q]jEN,x*YCoăU"'2P%3u$;n.4sN&i].UzZ8/o8-xWhF>?h;H<:kIl\gFb9O:0L3C=S>h2/C:?MXAXăU"dw^fqnL%ST^=12=DZTFNiPH$'5P9cd)Dv4G_Exvh37eZ(Yw+1Xu6[pGv[=8ETxxăU"OXsHDAE],$KF1q_Doc%q3%eo(cM4.4^G[erc70R8M_++[<Hhln*0V_DYWw9M/fqăU"b=wRp*kVh\^qw-4fDA?6R]<jP\NM)\,SaldURtS9/X^uS2:.6sqr4]AB,9.B/nWăU"?h3Pjc1%7qPCA%W.>6LwM;rtxidh:*=Li*XidYi#J[J;A6S.:,ZuS.>EpA$TB(hăU"lZ-9Gw%R:e)V9R,v(?p;nx<cdUB#X[W>&OT=Soe^klZldNx1xvERbPH=]-*#P,9ăU"xOj4a97$Cj+rALV\EVfrmJr^_I,+ZYFGh;oNCH><:q'[e=D8X5Jq_ceXidD.3/făU"2Td174:pos;XmmFle2sd]9'*Xmfs)R%cenfW8EX&GWYp?8Yo.<86T/lD6ri4pt/ăU">HZrd5k>6DXOU>E<ArmLkMFN75>=bLa^E9g8qITuIw9.i&r2q?taxrVN8V0TOFlăU".^3^anNV3-B.PY>l88WO_d\b-fn%K)Bed]UG(2sZa)7\/96f#jtDXk^]D;<ajS6ăU"-1c#FPL/K3n/Lc[Swtetmc>PAd/?'NIgna7(/><Ta#aj'2Z9LmM-Eew&w+)u/qaăU")+,;ptl$EWSVelO5Yj1,=,4O6$RYp9wxn9:e\8ED//%%o++QvqR?dPriZ_bYn2oăU"Aj>Mn*^TI4WoJwfpm>QtpWM#W^ceVFZW0XMp/U03Dji,=m>8#:._VtSeH^:=RpHăU"B4nHaJh26(,AR<*bL;6Q.<8=tdO/k.4fT]71[b'QfZqX<k(dOd,mhZ6W.\N+ufZăU"33='638;*UG4iRG6Sjz.(%zbvb\w:v'L/4c$mOTxoVjw6<vE#T<iVOdMG&k*b1găU"&$#j<3]u<,#FgyT^UE*,ldSj\'*?xsSzRoB3gM%O4?JycyeB%.FFt0in0gs\pPpăU"*9>9bb1XAX)-OGG2i.qU?Mk,<>[_T?KPZ0KC^p]1vPHX\i3nW\3n(io^dvMTLtPăU"zn*TY$lrt7^=oBsk?rk/_ast>gsbU8d_<E)sO5wTG0?zrxDC.2z<3.vl9;44?guăU"M7T^-nsS2%Y?v,v7uo8.Sf'G<QIF$N9f(L0n/OYa'A4XZoQ5ameVgCY66;<&*0/ăU",vnpTpNK=)8lL);K9SXGHJiHKPsW0ir50Q_qM.QKc)#gEN>]P-qZH_b\vZ%dC.KăU"Ztg(xpqCVNPR2O<Lh+8qSSp4TN8?82tllhwAUZnv6I(,6vaj0tyjGqSt>]0B$siăU"WpRG=BTXufD*5vuk^;5mj_Z>,c<?[._zO4JxPnrN?mOV9Y(ZOMIwG<U5?&)Z6McăU"tMf-9T#\TOK<k:&Z5pT8)DQPF.)o,9cCK>dF=2%br:QRAAQLV>pHeLF>YMw;6_măU"xTZJV)uOkHkXc,99m,n;2i<m4bYlSB&i]X$CV=$rJXrupsd'<2eHLu7%-FuFHZ?ăU"\i_TQqC5qblV/FXQR8.YJn?u*fncoM*7&j[k2Cu+Y>wU;LPLb7W.78p)b\f(ZspăU"dZ1c\x08d1iYRdRc-r[Hj>1<.9nNq-9TV+ea:bvjLiY8jdat$6vstuBd+cRewmGăU";e^5G#8TJTgaT?6JaJko\4qN1KM/5ifOXX[HU%2<7pwXneLn_4''<6Oda6[S]yvăU"0Y;'[hL0&Cl4Zu?ZY?XwLo;BT0G>PR\>DdMWj5[d]aRIV#l52-smmAaO6QdQZIyăU"QRA4j'wUG5F(C'&9[bpR*7qB[0/n:%8iN.:XN$gOMe6nOt$7Bv,3_']2r#k9XGPăU"URbIB9EmVc&fR0;:YGo>m2e:(ssVS.SQ%%Y[3=(m1lqP%[&r(ir/*vKB(RsAudrăU"KK597kLZiZJM>9ubb[*0d^$WFq3koq8Ti*AtO*7qgK3h+dRsvm:^axO:>1,*(NGăU"&;l2=tL/2r92A.W]HZT/eR*-MKQn/0QoRuNc1*fVOO(Zb*H[mO=Yedg,nz_\3qcăU"L#+jcs<=LW+2Y.L9H93;OrNn-qaXuOqTwX_>(Y/q%3W;^#T3SYVBJ6[mBn66v]aăU"(376x_:4=d6P0fD9Ulh5p]N$MLp-ro8mFbPc8N*;t'+>nm3gd#/nS#x-bXN6EoZăU"4[E%.^]m;kYr29vplqh>\eTnv#8%6N,;Y_xW37$0r'PD_G0<k[jU[4m54rUzs=,ăU"F.ZUF<LNuUQ.eR+QXdxt8w1WPPDIkm^%]o*3eV^Vr4Y(gWBeH-ZpP'uRK?7q;0măU"T]$Uc,Hav%1vT/S.EX2[==*q?-o&z<8>RW6-5Stm_['IP^L=&\V#9E=wq-t1xNoăU"8rI2a6k3ryArR8O5g*O;JTkj]?^+Ko7b;U96q-?etU$Bqm:D)W.1.B?k.c0yT)CăU";0;US;Mw[v(f)W7%9v)dO*don%F;%4#-4(b;BU+A%$1OdqNMZdFmBfbp07bwsx$ăU"Ft(OK6pnNgiqXEJjBBl;gBjD.PHN9dBFpYHuJjG?T6n]=2O^Yt[*DN0LxJqv2[PăU"sZ<ai\asTiB#=RmP**9eTFnN8qaIAMFSi/RyRHU_v2FgD[#dw7K];,j*NfhS+QHăU"Qi(T)WQv*S\7qS4999z_X.Jf9YC_)d]]Omk.w=\GB>4Z04=lpurL_&IyNW616N7ăU"bjYuCNb4xC9_vJ+dlOca:TK%X+Qnsu(3bR&US;-?9hLJ:ZsXq91/Wb\a\\Y'PW%ăU"H,5EFi/KBquUK\P>QjgLI)Nmp,<H/9D&3LQHVS8uh(,;]^20?[AQUFEh/M&\2d5ăU"\W;e-N9s_920U8BdU;Gh7X'O%sq?$C08AMmcr4i]fD^?g[tcnZ6tgj=kM3;)6pFăU",$r0<T-_0bw(WStILo2^isFinFF#fA?K-vA#Ul_4Ec4);<(klPY^r'T;OZ%RlIeăU"i-Kkepk/,p;i9AY.+(Tq.a5JSAVqa'U2$+V=dGEhzcfBBnfS\m#dpU)BUDIOEjrăU"QBj;]h\0g%cC+eT?pENj5u.d'8hUFMxG?bJ'VI%n[Wkv6jkVX0VilJ:pN',>;rTăU"qJ0p+=,aW7Tr99onHVCh4pe8ecIS,'0TRby'9D:q+^1IkC$:WsKLu#r#0K<sp;NăU"cBUgjd8%*89M_Z3+8Gb'/M[9#S5#G2J<u3t<H65.kI2Gv)lT*r/j-O7&O2#a$t;ăU"19?SO<NSMz2Q7uV%eqzQ2P3[^&TYLvY)N%m-#'>Dict.9g\bCn3)QhpTT6X4IN>ăU".B\2Ia(6\Y-]NuB&e$-D$LE-]f]urAU1CW55&v7SV_g_/J?JT)P;Zt;P,LK_Im8ăU"q]]heQUya1(10xNR>$7&Rfu_Hka+RQ:7\]oA_r+Y#%Vve4)%.sEM]QQuVU.<U&uăU"%2d[)Ea%5yaPP0d1g\b7e'FiVFe,q6E[kX1vL:POX4fq,AJ>U<7vb0_r&KnNwdYăU"AB4dLF7QCPb>D;JNF:SI5&awh;*-LR6Kh]DR8yDOs&vsmag0F*al&1&kV%<w>KlăU"_rs:*?k/HY=IKiZ8qd5[8Sr%8,$>j,w^GKf=LGi5Gj2Jg932t>7i:T9_N&#V\SrăU"o8^<oLpnDlO-X[JV7'.RN=q8a*%JiS84pgW[&BU&g4g&?Wdp,o\%q(1\gN/oxe^ăU",9CdeqQwur=WdInJslYT4LxsZEi6z&(N;wwoRezlk/;RL8iJA'^a#ID%:PIr:=văU"Dc6^-6e$MP8n>6k5UBAYuhPdtc7U^)/[NR9ksada'Ka3SwiNut%$Irdd_n_p2hiăU"nTFJeueYK$9SH%/10dy5DP\ZPmv'J<BNV/uO0qg9>7EIPpa+Z:EY0FP<*P^(SsWăU"P,eR'woZ6M8B9Gzs](:fbiru(q6/Je><lb-\>OtY*1].T#3G4kiDd0'Kcl,9ihrăU"Up<Db)py'C=2-&9adw^%b2)csN]HB'H9cri\5)wauuIs6S.J>B'f'nEBefR_Q**ăU"4N>=taVFD8/9OqXTU%MrouV;;;X;=(#=.uYF1URn-[17Y-3Y&m$jAWPU_3fd'u\ăU"gl^hf,E*la8BHGdqPtF#\dKsP[HBs<'Noj\W?qSepf*+M.4h3C89<gMKi4uOeoeăU"HJf:E;9<T'K6<XlPK^n:bqBH$_(Pt,6a2U'/0HPtTi8w/NoyC%rXY+ReC0)/Tw9ăU"FgSB]h]ZnNAG>v<O0k18z2b*Qgj8JCq^%*p2y]u1e[&VC=hTYl%VMRX?fOu))wQăU"5wufk&6PL9wrVx5dHtot8rtwa#bbM$pJtPs2oeRi6*YXF+^38hIfwX/f\nk9v9-ăU"Ad'DG0UdjV==IVoO;'_3Ee[KW42UIm63qsQ\8;Ih)'7k-d1r.VtkbP4,f9<Q(98ăU"Z5cB$mo.ge>5I\K^^']r/)7)e)f9-9?kF72m:t920&[<wbGE[=H68$tR.<+LPj0ăU"e)&SxV+)ffilNFOVhtILOuuLw6',CCf3F]eXjL43H*cc<:_5KTcIUJh[gVpZbBSăU"5K/G6kFbHtA:D:oz*WYbM89IuWZKMUK]TN4]plC(\kugD-%O7R1M;Pe76bhar-HăU".U>?a0+8Fk6-*18w-v3O()gSt0uN'k,#+a8yY*)ad4j<dp1F2()[HI*[FJCS%LsăU"(J6lvm-udtdMKJ+*9X4WdXOZ0..TM;xTHo4-kll9f0LVjkt.Oq*c/L'SZfN6:uPăU"'S$tYoIE<nqpAuw6HcVH)Yb-Ol>n)m6#acT)&Yu,eNO^h:D3D]]VF5JK9C>_m4SăU"Ws_30TAVLL+wX1gBi:OK99tcPXM1bB)\(j?(a2rUCyC2W3ay)'CPj-K-Aj07kipăU"vjN9EC?BsONtOjx,w/z,tsjc^&.Y--pGrxg3GUG,/>QX+8btC6KmpS5kGk4mxVCăU"W59Q'(dips4K?Db9Ap_FgcZ8[QZs,rnhsHjclc9Wp[ww%Td8%m#YIkj<Y2T>p=TăU"VkW_[UU*#9z$;_HDSlcX<1n+58RR0jQmB7Ocq^$>9XFH*ZD:/[M+WAi8haY71s-ăU"pUD#FA>'jIYNX$q&crRe/YtntTON98XH7?rpD4sww7qQeL^oYlp6tZLk&j:[7mRăU"h,uBW,+9\2fp5s^a-in0C+bo74(&UI&=xzPEA)&z5MvI'q.Lvj3-Kb]SKkY:7yQăU"sI?qS81QVKd%;LXC\i;eR?/vBV2+^;kXUwf-*dyysxMme]n>#)4-d[+#uqmKK$\ăU"?zWimh*u02-qP,VWV8cpNrqv?jCDpbf7)vKT>6kDAaY>cXul=NlVylZpfTrn&(.ăU"qT&w8(9Y8R\/6;)[;C;<ZtFtndVrZ0,ZZ+-8Proce%bzP2>$/n*U\Th8cuI\nc.ăU"x9qs)8?Hl#aB_CmG\%B7Fi>py+elI0.]mihciJ,vqROt)USi>:bqZ2pU8%:3xh&ăU"7-2lIGL%EqN2WNN*9^rAUq7'?J7,Q:6L$nH<rJCnr8Kxfs\xr[*L^d5$jAe;Y>#ăU"o<^O,yq/0uhX(\*Td+(7v9&LgAO*rCIn02Q4ko:(VO<$f1s)lItb=z0WxYDdCjAăU"vI-n[;?Vgauh4=?d2DvV$8_O7CIlMe%cj)k4?m&Mcuq43JqqGLBvwz[B'u=se;:ăU"=W(-VI9_(cOY>.#;D_=[eoVH5,fUBFUq0&qxSE8h.Ow:+AY$Sp6Sc_f&pvN#8ruăU"+MD)JV4m-nL0/s#O67,ANWB8bpfxi<4i<#\ASB(D'*_p;I2&rSJF:nAr]dVz$pcăU"UCP(-uf3nc-M&H%:OMHMm0\KSO,_T9P=D0j9g>57<5ywsi4hxdY%DMcj\_TCC<-ăU"N:uj[/aN7toO1hivA-%qbHGd]Nb]Jvj4A$/:7Gz5+/>(HY#428z)$8ZTJ?wfmwtăU"vwklHpcBWeGcAiZY76>Tg5g,lp3UX47&L^U^a5SLtB&R[t?3fKO_COc:PonjCwHăU"H:bzx[ZvKOz^zvsVt).dO&akxcVyzZ&fx>dIgK+-)oU:mEb8GeH\kO.7')y_V*DăU"[O+V.EK>Z]_<9jf^*5eGn*YoPO:h6r$\h7u(Fldmkh>FymH^oQIV3QY+4<)\R\UăU"o(<uY$9kLvlTbvwlsLF#u8wu,A^caENao][qs#TqlsSd(<'_'R5.<>;t3Xq*/rlăU"1.B5D;)i3E%FXGi:1h8q.T56n.zV.q&=UrP(5H&SZ:-N%ROSzsVIZn-s8=(P1njăU"XD,kl'jUJD=ncgA^4'Kg=^^+_vw>fm'bbO2Ypft'm-DKAL_r=BFn:5.*.M2hP.LăU"dARZ%:Ccxk%Lz,5z/[9Mi+l:sFDFU^Wq97[pCLl%.tCZ28=$,MNu8uq<iP.Lr'băU"lDApbCYfr6>gUr38LSN.z.,kpRzD/$X6s&naV0bEDUZ;,dE_>geQC8TtvNUn+r&ăU"]BdncJl)+\5i;:ZkdS9O#99&n-O7+Q,LFAb6FV]S)hPCO/.i>y1+IbbPD<Sw()IăU"jpSeQJ,i1E<SH//?'[1d'a.kEL)<Y&v.c>hV:<(A>okYXRcbsk.S$x%%JB>n4&IăU"+p'9(f.I'?s%Lsuv^#ht^x$DItcK.(_.2dsvGK/3&'%IT;tYj1b2icNn0kE/;+năU")/.lgyCR*[:+SKym^(KP><'=fL:&,FLAz(dPi(]a(:wVc;?i'/AOmV]soVUXnlMăU"^9?tw)Q[L(q?Z'F?3yN7T3,eXbLBG9g8Y;i>fJf)*;-S5YJ7a*sQlrbvNBSyHqTăU"M0k<2)0j(6PG$,;E\=HM+\UukDI_d,,H^Dig&mNg$Rtsr9r,:t,iXHlZWR8FfpsăU"l0$&-.^Dan$>6G%hx8vsC'AB1BSD]r,irVfT/JM&D^2czkFmBvfcU'n397ty(SdăU"%_KnYh4Y,&w;2cd:R[6HgJPWiah1G=/pQs)o(]?k&['=NY*y)ac>t#?F=H^pit6ăU"aZqsOVKMn4CUzbJd]Q-dq4eSU%gf,SrWDDP-kD^d;f9<+qs$>h#rhstq6q<r,p4ăU"WoTW78\UK.P&YnANEH8h,Zgrqos-Tk&7EKkt:]<3vaf4sNaq45q9y%8^/%.*oTtăU"JQt3.t#mEbK,6$-ZCP$8EaDGLD[dRtFJ%#%Wb2,jj<J*=Na*yzkfU6>.[wz9%d^ăU"rQJV^[2CDvN+B4k2fYP)+C&nw_^>)r]5ogwW;XfU.Nl7cyD%SPRBQAR6mkKK^XtăU"Ln>$jD6N]lVvqvXi3%*B2wRzu5u2l3_w.Zdfon^n=t]'F;7</-+A<xs707Gqs:OăU"%Xv&sb^zzz(lo1c[A9t-KN.9XUnxL3>/)3RTGoPZu%Srw;Q7Z_KE7(%vu>JDo;dăU"yrc7CW>Ll5*3b'KsB_Nq1:QAn3-i*4[VBh<%/%/PZKAh;5yY,&ZfhFujP&psF*wăU">MDFA)3y.xn)9mRq6kkdj4XMni^6)wlofeiWL#^z%p<<Q*Ej\TbJ_Yc#;4cR]HQăU"Ob<Mc#i]c.vMa5aC(n)jxw%)cNV5;RmLVIh%zkxTZVq)NfO++twzg=?7^clPp)uăU"jIuYRVT-EQ<I*uXpb/ofR3J&Oo;wP:R*1:RhX)P)((mA<eBis/WTCyK_g9T;VOXăU"b6pUrND[VF/s:d(P\.HriL:q/MqFuYprVN7uKmh8LZXS.2tZ9pS6k^Z<RRu4Hl_ăU"MXGUAOhdsSaOIhz8jTL5NN<Hv[b-6.S2'EX2'oK5,KDCE*MhN&,JxCZ;wTA^(G=ăU"OYTK7J'i>;jVm5S(gn+D_nf;J4xqeS>*/5p]94z)^r*HZ[<(.<'Lz%#_#pHQQJ.ăU"R],M[.'b'Rm][&csJqu#0Vi?4K^oYP(5rmalHX$lMb+)8TymaDQ,rd\FdFi3QV2ăU"AhjbYBsM[ZadS(<w(cw&xjJgMOX**4O#b/>lw.z8y57?=Z.x-TaZl5*0,g#dbMgăU"tTb_loFF?#X:fnIkh+9h$n:>r_:9okRGb<:&?Veh%HuS^M%uVct0I[xNOQjUkj-ăU"L]'d0Bwlm]vKNhy#vp+6-G4Ca/T4epNKt+dm[KSK)fQgpnNOWbi8.qKKeiQ:6>=ăU"lX38FTCzDf_yAfLtUaLfd'NLVi4Ee3$%2Zrgl_B.9xvbyQ^jy^mcK-n3ard*r?9ăU";5i.98i+bTUjV^sdhJzC8.D*uLIcom6W3\ggqPVKdo5k)%uI5Inqi0q:Pn&_dK(ăU"rvs6%d%=?16gP[1u9c^+4jssqS[o;63Lp(X66Od_CA-:5NY0s';FG'ppf7YcELtăU"sZ^T\nqMImAbP6$XlQ+=ncc^wu+)7^X,sd=d,%Z#-?WfKnKYxvoONcm7?^3.id^ăU"b(&qAd#Niqx'*UwtCdUDb(-^2$R;o3293Zg--pgni5'.b)QP(zhPfA(8>J;PC<[ăU"tnH>rH3+i>$>Y:1m,#jdq/z;=FtPh-.uBwV]Q9j)R6k;sn0;:Y2v%rDWq7eTV<tăU"a=8GVxumTk0Bet)e7-iUXsusr4\enDJhuI7VTi0='45INajYZN+ipc2C=D#2k^căU"IKL:Tpo$]-kn9G5:'Y4ZaN'x]^gg'/1*x:\^aw**KrzYiq99#;pQr^GZ6<rZYdeăU"RTjUR\NDs#fpY:[]HiI#nIq+VHYP,'Xp;ThN2=U.<<U_I#jK79V3SE,XHU9=P-HăU"KuZpFwqN,GKSK/8TV5\KE.:^$s>O[59326oczTUPLWhsLxkfWPn8Nt3xT4i/<)8ăU"PINzZ7<TA8]VQrTPS*q*Km/[yOcJKq\gjh*ogneN^9lwnlJC^Y*J4:)c7Ce(2%,ăU"dQka2[6p;kf7V;Ihd5=VWC^DP(F:gRRD<qyar^nEW+)LpOY2:u()<6tC#m'D'$*ăU"iMsL04>uOl_^fT1GXr#:=c-i=f\?2..FI6L)/<?*Zbty2ZeCJs0:tDlT.i+lxMtăU"ubjN15Ns^&+M#=x.o7$wBrtVohlW24\BczPf:R-)e;Cn;\Y5Q)0nR+mf1Rytx#,ăU"]R/>,r4yV#9<'4vYbk3$pVDB'uvYq/DFU/vIB#R[16)Vz/,CT+k0frh3Yb0(?JHăU"sao+U*\j;\/)YD(SI0VtHKM*IYS(4.P3hQ:gK3$oe]D'qH>=3c(E;AATb+eUGn;ăU"qxgKvi3WS*.9ek/&IZ>WkFKTy,t]mr\VdIIA>d:<nwKdt.LtKmV0YE6*8Q<C&&LăU"Q-cnejbB_Z-%jr(k\=?<YJ2raPb\]Eh;E<J=RxIAqYDxiqw]dUDGipAVPzxOG*&ăU"vjsVvZ],YsNUW2(BYf'1U<^&Q7hZ^Z1*O<qn+CoZ$2RCBB06gaSV2>>zu(o]vWwăU"=A/&-ri:*M%IFJ$<<6Sg5S+$8$<:Hab0Qg+o9*T#PlEsUTZ4t8AU?Gps24/s+mxăU"<cv\DtNqgW$f*['P,21Hq0-ge9e>LL[q=(qKYzD;EXyzzeeRCvl$RIC.?zzc3ogăU"3Q?;sw,pDe3p^iDu'$=-H3IQR)?B(Cx#RQhc'r0&(1]#aI&5J\;Jt2+f,lQ<eKtăU"J4_,#Qom&rIJf.k-6Io-aG59>5h;G7-%&<K_GlaFmDEt+jC%eP%:w3)O.RJ51fWăU"DDNki1>))5Ct\:+MSQ\V?Qv.&-t#sH#md^mOhm<jPr&(*-q/pc_iBbto.&cdRmBăU"imBQXsKb26nL;P=>2^pb%2;[H4amW9LpeQ88qoJ&B9(MIAfJ^RQdS)mD4xiBWm&ăU"1(h/&8<q]2F)[<Iu.)C$(+Be4YhtS:XPjqqBgF).,#ua''&:.w,)06&CEcYa;gmăU"cXpt0+'_]tTa0<9c=#9-PG=1cnIU^Fa5HJF\eRNx_Yt.8vqrA*Krl77Krp7pWR$ăU"LvtO]a#W)l8:VUVL-&HM8Bz&l&u'^nV)7tug6p7I/zSA5n%t[)P]K#1bv*RsT59ăU"=k<PP0su43B;1^&?[Y-$Y9-.?K,f(]>SiC$a7>xV'Hl$Z#IBbP^q^NcB#=Y:2C<ăU"[./[.NB.N-Jy\-IGbHW='hxL]hRk*??=nl%td3LE<H[ltbI0inUz8lwYlvR$\&*ăU"W4;BQc52wt4YsUP5KihZ_FjdXQqRvnj;SGkGX#O&bIiFq#7:CL/+=&_&\_tbbRIăU"xih;to.<3rBGP3(-#9%kmkcS6x8Emkcq+9-VT$%O,ml%N4Vj8m%&Fw$+^dzEO(%ăU"i;6%1$D1PK$Yq*bDejIfHb>4q(i>O$HxR&0,#472pa)tNSCgfmAC&YW7/rJ[)%:ăU"Mdw.>2ijU:XlR6B<EStpY2At3teja8eDw0hst4lKp:gBb\A/8yN<5A^,sC5(u]6ăU"4nS)%zSjB(sBlI1Z93PkjQj8rOp_Ktm&&Q9ttAh^*s77vemWJ)Zs=N'rf0B,Q(>ăU"LMGz%Qn.6_$n3-o*a=_u=(IT^$<^jiJt<.[*'Cx\Lz\YnYt*(Fai%7O0%S9kfF]ăU",K_IcfqY_&bf*8&D7twGE&U\-8:HD3zZnZ;]]/3tlO$i\5qPIpGtmplBV/eG)IiăU"79zH>,^Jo+'X(:H.]nbS%pr%2j+,,h9PX1LkmYV_]l$T[_&Cr&T,k3I?i^4o]m8ăU"pm\SeHrtlL1g&mRY)*/P*tT'pA<3a2'q.N#(Z0\#J*S,yoRxq#-\sr#PhQ?t2NVăU"XMg,(U52UnLVd)wfu./e)\p#u.P)49CPZpHve&g\e(4*1wETpLJ?MDX2IHa,mx8ăU";o24[i&-7UY'FrvZ]xj'nto^Dsdma\A9Sphl&$$P#=XZsM<:=OQTVz=]5\n&^AmăU":]?a2#WuB'TH%o^\LOBc)zr/c*pbyK+Y$d>%oKJ#2el;V_>c9(X(M:FopoN[3K3ăU"aW,1.G-j5K:k\mI&:2[t'0'&/ipfO)t_=G/^DLyb&VC)PBhl):3>NXYJ?M#r\_5ăU"6r3FfMu7&i?GBH.G(Z:cFPNipV)zwW<qlv/kuLn.<3NiVS<&tfT<0>XNQqkCefNăU"BT4Xl&e<J==W6k+0^HdKzFRN#aYm<;v%&Wm%')i6I/x1%/>(]IEYu7M+.<fJE;$ăU">1S+=n)57-:(W^Ut*M(xhc>yO9+]%6Yr)+k,Y--P^aw2=i6y;g^R*;r5KD_&hLJăU"8b8:HiZmQL1B&xEiPIl0-lGvZ3WiK:1Ge-pZ5a3/aXCJ;vhmdZI6NJ$M:J\+d<iăU"j0\(]qS5I9\c?7Aeb:KIP=Jz,&(>-?umbMj)Ig1\JgH)#)h7JC>3-i:?;gRJ#A?ăU"1f;nNxb8%tM-ltG)_$f3FtpJl)i['p5=j\6%#xd)=.GvyMi_wF.RzHP&E>xp7d1ăU"a+WF:.G._4+^f\Ylks06<NyQ?i?*GKE]N7qp5QaCOVQbxRi5E98Ha_UoL=W*IFiăU"(ZR+2E[2Qd>gA;6LeN)Tqz8qsLKuRgRfppQ0FkaR1HED2^YZ*?eIQU.G:P3PV'RăU"v#^'rBr.>Ezu:f0^TN:bwt8#Lx#oKj\?8_OFRQiSSJU,l4C6bgS#*0>,4g2LiW.ăU"\*GcZP)=ljBcmrbJB_?[7kDJaxS5icO'Be]qV-tj'9-6a9:Cw,?+ir:$Ofg%pl%ăU"ZF/&H0dJi2Up=+KYd>%WJZ%c;IH.)3/U[\:7O>&via?(zur<9N9X$NNfDwR2ySvăU"z]xCu8+2\t*'(Urj/+5+gSLp*xOd_\VA?#,:12oRX*$It>#NOTU(j_6l?J4xqY'ăU"JISf&I&bT^X4i^r-D&1W_V((BmG)),#N>8R=T0^8p)).k8m)7q.-h-<Y7Q)pEHhăU"QhHd*AUd(-zT\Hw$7d?3i#8kA^.'vWYe;NP(5a/Wp1o,Ff&BJRSjZoY_<J>a33săU"e5g$ej=2,iE0hePF'5TUzeQxa*:gKE.5h8U(X45uFd(T$d,1OH$[:r)$-9X5;_+ăU"sd,tPvO-#BP^pGR--2,n8AdYrgfC;WUcA,KhDxI34rV)Za7tF2>erMjk1lP*(bsăU"%I&>-P)fD_K..;EpP^cU/7;Q^,,,9'ee>)GhpyB>#ZOo#kP9she2BF'SEGZ((LfăU"&<=_Y0Y\/%Mnxy3$Xvte=kK#XMEE:ij([_?=9N7N?LE<55cUs6.4fK[DUq+rCjsăU"B)6)Z2ItzO3?a)'NwnvRiP>7U\V%Hk=w,wf&fN6x%_l/o+FM$5\1DHC'FnwQm%WăU"No<QSPSF4j97sem&aA^fNe>v$s068?:s;<H>j(QeKs-0k_>5&\ItARJ'dn%ZqEYăU">J(^[crUg48;Im^/B+)Iz22LRybNBFlGW<F=_wE7\gTa8r;_eoyUO,Iprn/SkfrăU"GRr\QKqUWJ2<:LFg%mDecb-S'(^Ue<'tU<>i3K;'_1Ge'YFPUOM<#&a<3>to>;KăEND SUBăSUB V3ăU"B1t+O#a>%5m3mSkKrXYqUd'9VAlar_]Fr#\0ktrk?Hbt+hPrhS72wAa?[maJjn6ăU"TN_aQ.QfZVBCW.A3E=4Ynr2mZ5z5>Mw]+.0*Y-FU>Xn;=g(Cc8(,NsJy&S;K21XăU"*nW:hUmO0t=Vsn#Hl=MO3Yo'a+fns8p3o-R%gFCfgAi3p3e?f95TZx%fa3Z(5jZăU"t<>0LK%FA#xW$gS0tScN-Q?=)>98%1;^q'O5NOgLr6]Rbj$q;6)V<n7Kkks/,r]ăU"Z.1i:/PU[08Zo88^7pa5IX22;I>:9MWJxfqk]=,:w34dTh/qd6eN76(jWjko_#PăU"BEYk&l[_QJ=nMN;kXF#:]/>SEa\\JU%K)8mV(?c8R;X.T-ZoGC.RG.<9v01]FEQăU">,u5KVB9/\'\22kPl;qtH*<C'5RqE4<JH,:k0503Z&0GZb*8Qt:8Km[[asXKj<FăU">[a1eA?^Plgd(%BHe'O:n*U^F=%;U7F3n.[Pf#7fqw?%V*3]CdX+'9YzRlmVw%aăU"OUC>])N2J(n(28:tK4XtZ_mUB-'Ce9boU9+FjbT)GMAJT\O+Yj:W/K)e:01['4$ăU"LJ+dC]FV's2#[k=MVK]sp:c%pk2Z%G>-^o&FQH\)_8M=%I[U%/g4h-XpU=VlbjcăU"YnO:#5<rQJBn034mpphmK$R*)Ph,C<qRvRA-:LE6SF_>?l'.6jibfLI+ES(h%:$ăU"ybg-4DosKsW&k\;6t$cwv'cX0O-K=JI/C2g)UVm_gIgf>r7kSA75FC3C%#f']WKăU"v-HsS.d=o_FCaVM2*10TQ^eJ-Q%i0%y)Vn;8Jq/<Ljj:ri15rn>8qOc'g_Yh%noăU"#EWq$-:qQ?%<PuqYr(0<qh/Q$jF>YKc.L$6I?gM5mB2)4Q*HUgcTPuq%%6ajtlZăU"TSPS8B&.[F,5(c6CLd10OG:aT0:sXwImEMFdL,.k=)AHkl1Pq7$Q/o.ba%:]cqnăU">OL<R83PK:X4ZLv(=EIx>'Un[<//Bh_Z04[Vrz#qPvWci1PM*HCaf*La+hA]W$VăU"I2$VZ3DJz+mac?S%Wi?\jjOO:Kt5/<>)&-v)yma]O:4&wy[JLR\JK+V]0NA(6f1ăU"=Vl_tS\kIdui(MB<4>-R6SwIF$Mu7H[oCBZu8ltj53(2-l$,X&:,2?U7.232cHqăU"G5b\2m.:a[YQ+Fki.<\><t5skOn8M$;0Vhj096,i[><WE<O//&)UKQ]$/0FZ2IgăU"%wdOUQz9CR'EEIt7hx0U^rEYUL7,Gq-2tc/Z<uZ0eHGZ/+QDW*w,j?YqsVS8r^$ăU".Ta:lG\kv_5.jjqEC?tMI[-F=rY[5uOImc?Yf+NO?>+Cg.t:Z+*XI.bj^\H?1_OăU"rkP\mf*#[b]g_I5EdmEfeh4%oEg$gX<,HbRb#[=gESEQXtt,ep6#?=ODFRgh%5căU"9_vpAY:$6=/5i:TcB,emypmmIxfJj?%fZn/AX+M-t[H^i<K4(_IZB6la)G[W'*$ăU"D=tIT_j&(jb4Tn<T*o\o]%G%mfCBr5\tlN:7(+0E9^KA-=\WHR(A]+-3JV*sR24ăU"7DQC+jll9d8=B79CGe%H0cYgbW34b5Yt=;W^k/14ri8WP=V%O;uYq.Rt.C\Q*+DăU"8iIm[Y<S-H?DO&O];R%#\(-OJ(H^R'%nIhQ_$2JmjUe<&.n7VC>W=*pOi*BS(7>ăU"Y[4B.]3S<eFbiNq]xM.J35t.%?D=>eI^VEi/2ahF0_UeU01laFjhc<A**rL'+=7ăU"[.Y6iIoA2kvi8VWTsi<6W3D78kT5;(:.UB+qe%w(uzEA7CPZEnJFU=4FeRa]c#VăU"=sLc(Zm7WS[I6thN(J0?%BT^e*=1.gCbD6Qc6smP\YmM4pMKh;^R$^%Ha8;Y<0VăU"&*a10^D-VR?ldp<T6T/4;I[3N'bI=S)TGl:0DK)sXOK=:9j%&?AfA3fT?i(MSh8ăU"anaMo.\n2U(+fFoC#^iJfBOV+D:OMMS3uR:R1>iKJ$Po6sIJXs+/3v>n$\S,_eBăU"E_1Rnm^u<9l&ml1L9m>Fk)jc.GjK[1R4b4i-O%6bwSZ9TsUc7[\j9,-E1%g%=J%ăU"Z.^&n?u[m(#O>J$*6aVZLL&Joj8:kX/PLCdnMBv=Qas$5EuI3rls.>>PY>t?kgOăU";5vQ4iNC/f$0hb=%aTJP(kHa(RETWHs=fm/rEJ&3eB8+&g24d_%?[N$v%/l+%&VăU"*j8magac:=Vo^0o2=2Cu[?$%Vnehn/&Vi)j[ZtIz7;WE5PCEUV6bSJ]3zIgQHp_ăU"ur+&.q75e^M)f$>DuK6)QU>#P0C-F:TNCdmhRv4hS\\/<<TU8f7&yuKJ5^OSe?1ăU"yAcQJ&9.u.bw%]]W/e,?Z>MMUo$[p-IA3f1$.GC\D?6Is3+\,e3(EC=T]G2PW+_ăU"w?tMG)TNpH_:7D,B>S[6$_T;[\7S:tr:+C.1;O,tR>mCq5UW/5<Tvr>Bue)1GpgăU"f1=]4C%x7_JhJ:a=&0kEK_v>iKc,s)#kA8>q09Plh.<Plj[Bx;V:*aODVmcITKNăU"ar[L^BLaVebd8h*/RUd)aB^iVlAK1%IjAgbP>tF3r0u.s*OxSu58XXk>\rAqkA)ăU"FJmauQB^X;&%FoGdVA7^jb=1x#uAtC&amP+6S9af<#A$yrZ0#%V4:Da;6=kq;zHăU"G=XqUu?^n76/N^Z[?4B5dPC(GY'LM'Wm>UW/BC$Eqn%+%2ieZeXv;Xi<VO/#I&*ăU";RU1,ke=w%B3r($JPAIE83yUa_RDAr?.?4#&(1NOY+R1']24qP0Q\XV0vx??_%8ăU"Q&v>PMDI;V/,XSE7grUR$J*)P#SdYOiFh)cOaL%&i0/0I$P5Eg5A6O%kgWXTICoăU"p&wIT/]f&XAbKI(e6cO9<pC/+,HMd3/n7%hny7=EJ?i3)ZP;A1Sf=^9JHOhe#m,ăU"hwGClA/1qv(<NghiR%NUh+0b/?UrOrfrZ:%iH'>Y_h/fa?fQ2p;R*8k:Xg>/(FhăU"]KKk)bS-i3v-Cbd(v.U5V3.B?X^=i[Y-XiEe[L(6#?ou8Z<-:jP7\$0f$La:UYFăU"Lf9V)^H#jfka=eH>FD2a1p,[%/+,g_:q$.hM2yojA6,42EP$u1F5'1.?<*KD64JăU";G+5;I^A]qNuni=(0:&SCglRN\'=eP&2)Qk*?Va99D((F6RLr*Q+\N>H*spk=r7ăU";DfSZ'e.J_WK0#>+fgSu^\=jYm+f^VD*6>,RR1A>%]LJI)?Yefg9c49=#Kh9[abăU"CW[WL7]a\1KFiA7.qiM]dIekuF65#5f]/a+%WV_jY=uqO)-W$YH/:1lJ<?Hm,0#ăU"32IR+lx^jZw.];;<ORy=]AOE]9>_ZxbOW6l4E06N$bf4]OL8uwGEg/pyJBQ^JrRăU"$C$#C=3r[Cj\iJnf)^)][uG1^1wIIDW('i_N#11bg)s,(UrKtI.:>U>>%9;uYc9ăU"u3]%3khZ5Kd:B=ijS.4Y<B)c(ps<:TB?aDo%JkZBu.zgQ][R(ei\X(-l8e%+l1CăU"lmv%nzIjYV)-O=?GwJI'ZK34]BVH5bx8)3G8QNF$B;LZ%[F/NO5Va\vwJPJdo'FăU"T]5KI]-:a'D%%>GN-&k#00=E>6afm$VfNL;s(I[I(%kkO)Xhqo\mUF]lk1#\3E3ăU"/E#KjVP(Uk5w:na#]^ho:#D;;7B+8up<3Y2aif]Q:V/$/]CHBO<&T%h,\1vWd:aăU"NZ76pE&%LgEIe0>QVg\?XM8F#*UH$.r9ISDJ:7:80gDV)h(:bREbj__PWL;+YKdăU"KB%6czR'k&[>>wxxQqenA1'$1?'HJWo_-M.;:-eaWFD[K9Ij]2LecPjKQEV0cs0ăU"ioeVh^85'GA%]^$uW8&cXQ-pbbLgXS)+6MA/d[RX_\[F.J>?H[HG3[JgSBlQ%g*ăU"pxa1lK9H&'uJl)D?\/R.(-2n'dC+8gj41z5RVhe<=r9TJKY.IJZ$H#w7n5-=71%ăU"+7*k'GtPT-m[RwbBb.^)q*;VL3;.Z&X-:2QCh0DU]Dne12j^V2b_U'=L1&*[PyKăU"5^KC.-P-e]H$1hLVetC9dZHK>8dOJiY<EiqQ+RnsK:T4b&8klL-/EaQA,6Jd1?YăU"L^GQ1>F):=Z.8gE&E:W%:W]'[9tVY?Xt?Q\#?\,[Np>AAQfbX6K.5%Kq<RHlaQkăU"UbY.B+>XOl34N8jVG-9we),jq';TN7LVRFLi.I2JBBApeHD89V6mgj=<?sWm_EmăU"*D8WtDig:8u>9ECmoIp13i$Q]iW:5q.2)>'k(Os]0YTk?tCjmbke*8UYH6LQqf%ăU"51+^90+LpfinA;jTRY>JZ=_o+veW/;Vi>Y6Vijt:Jdt<rs]Z]Ep24%GD%;Zf;>#ăU"uzVfbXZ9IJAKc(28)6jK.8lW6ijS)5#p;xA,'zfSY8(Dk[4_*[c^0'2O(p*DMnTăU"//62)5JIKcZ)zdr1W6/(gn+VeorgLtfo06Yu-di\#\MoKsIS'g/Aw%G#(=T3HVQăU"#Cc+1X+m%;$9d8bow;#5P>#=LAQ5,D/DZ,fD'Vq:(j%3:?*JKij3*usB*D1mkx1ăU"T.7.mOWg-UqmkuuEUGW1$IC87Q/,5f\_ZXu*lgcR]+o]>A1V^hkP>bwSsi=tj>dăU".6Yg(RBT_IiTB2HYmFN]gr+0$07SU-6d$-bHVH?-*EbjVzWV=[4JZpgVmo2/W7lăU"vs&^FFE.og;\g=;]2/*&0gNF_b6)H]Dclt/S6]1-?B.=%+w+oM8cdO:QX1I<]1?ăU"7:cMZ2N4O-0FyAOaF87-EkA[XS0GCV>b*/]Z^_G&6pbUWw?vtn6o=0fh9-iGn>YăU"Zu1(%6lsTO(?jL62$n.N5k?1dLQ7agBeCEu('(hw>8-jja5HVE#$.>,/-^<2e,NăU"/.=GjO>P)k_<dUOZQjwE<6P0N[zPvdF*iYBQpd(WAvF_O)HH3FgWH-%_U%0$JkEăU"f6&82\)ZfVmS&rbU>doChBmtaAeOtk,[L]rWhjnM4M]47'H(RPyE2R9b*P>gjT'ăU"TRc%NX/p6&IJzPAcP5J\QC/X'w(,/[00/e&>q&I)Y-0z[:+E<)v_G]1PMYC=RwRăU"t7P3^Y%s,oAjh63=Bj9t'TH4km2zc/GplLE?HOI0ETaO,tsgY*ag.M*f1]GWbc>ăU"Gn\Y<M6Lot45lUsP[&P_?/-q-=A])+v8H3.H38iD4VJg7I5q(q69d1VaG17Hh%iăU"J_:V[ULX1Hm&_pWDR\lP5fE<Ngx;<9OZ+0vgj>,Q2hA*TK3Po*jJUwng'GIW5$(ăU"$&5W,/feMMU>&RU.j4r\sK&Inqx*S#%O.6]1YB\iM6K9<:kO,Uk1-irdT(K;f&4ăU"JWqe=<G.P8[S-bsP?/WTU+&q<Y<D)gtr>hrWaY65B)w-.%;UI'/rR07ib2S11B(ăU"1o$(9rLq5M5I>vq'4'A['3bwmEc?e%)I8*klU=?/j,ah.#rZ2U2;$VAHn*i3)Z_ăU"OQ%oM/)l^&Gk]Wf?ikFXWKIa'V&BS+^sDa7u1;YTBjN=BR%i[S8ntKE7\7G/GsoăU"SkBJhql1]88c'_dIN>?8(HjFuC;Ih:mHlWYQlO;hi,T20pO_&$Qfso%:gV4HEj%ăU"WsnmiW7X%W:RUp[SZ%g1kA0lZdx.%>ROJ;W1#2mL]e'IGWfOxjkj7us=ME\'AnXăU"EYeGT+?>I<CII>&Eo<II/Q*7VN$ITPuf)Za$<s9=X/.V+?u&(1T<#(;Gi/%lhVFăU"rqT)5QC%3N[;P7.U;S1'(/'Qj6%#;J>s%Ej<Dn5gdrj*o$]rS.1b_)nI'^Lyv(5ăU"8[UV<OH,2PS9x,69>H/'P*fZ/TVgPA21,cS7umoW6a]pA)[q[Rk-?1wg%hC(?&qăU")$ni?/Z^[1n^7x5mx1$w?h#)d=v9jI9r?nnh0#X[7i#rG3?lJwldPvQM<C>/TD#ăU"==E4HP>CKK0xSf96F9W6i3:B)/qHw3%o)rg%=qBhxe>_Er.^\JY_9GdJ.sv]jBMăU"nGWTHXN8g#&LT38y&0U2kW,1._TFKe^b:F(w(BHjTK<KrViGT3gD^oJ^rUQ1,xfăU"&uWZ<sGfZPe(>U&h*D]mO]uA9=%q-(br$UEwN&bP&m]>1R-BH]V>.<='*#7[N\GăU"6a810c3RqI*K&5004p#W+/KB4$k-.yPS3qXJqiTZHkFU^ODem:()A#0o%AV0A[văU"a:\Hp#iLLu\E+ix1xo4%]_LnO]A8>QAHx#oqZ(dIgV<b1Jr\/CW*24\:Er&<(G>ăU"dxYfY6J,'J$G\N:&]5.8si%5;R/I%w-6c=[gtsIlV06jSg&;4-S/Hw?N$Av0;s>ăU"QG,EqP>*x_2fKgW*x\dpPLo,I_]p:iPUi$Y34Bw3o\oz\an5k5eYtzNhoRFlqAJăU"hZZ(-GAF%bb-j.2Nr+w1-rj?-N?cuX_%eXT^Zod>M2i#M037qGGVE82J#ZvN:EuăU"wy(U<oT/P;48:+%HQv;2*LOtJoe.99p:xu2[Y6lpWz(]'m3w#Fp(l/'Iu%B[(ojăU"';=8V[?:j5e.5oqtn:Fq4xZk]0WW?0s.d^gUzBjWUC?<Q1C3mGY64BE^PRg>&veăU"[i9T>-/r5d0WOs>YPPFa_RlpWJk5&6Yo'Z%S4fN5><]8ZEArHq)qU.n2KOA;U+tăU"lrLEVn3)8pahxhI7FfqSfvg-SZ;+H('PS[;)B/NRsD0<WD/TOWVjJe:GEt2g$OvăU"i4&4rl5^&KR%^PgOO8:4h/#MhqII<T/W]v_nA5fM]GeU&XGT8&bnmYGu8L.UAT4ăU"Md;B0'>j4Fh[Q:'=dgeJ6;qLR*[;fX-%u5]YzUuk%a:(;LL9gb/VY7$OYBj$/9^ăU".ouc)8p'qOtaRBX',H(h:G']-JIs(Qrb6e^>$R6U//xg6/'*MW#%Pfz6Wv6g/vLăU"1<;y,cED*>;9km05:AUtK7^$qX96%ny<9K;a*Ti9625Iez*U%Hitlm(:k<(,CtIăU"EEwn/fl2-6#iX<;Zr[M9>xmd/lJhLD1uL5HFC1Dk6YT7V;L+pK0^C6]7G?AA%l>ăU">$gXORYZWwo*mkXu9p954scq(xj$xFw%dup(%)9%%[%-%D\?NN_JdP2b%(%%w%.ăU"%%1#%%%EM>AC4)G.VSh10B6dyv>[Ik5M^GcxUXYi?-]JZnop%wC-]AFm^WW9XgpăU"Y9.QZiRm(LfVZ+s-dh###7S_xIt)0Hmb$lfoe\XEGH5ueV%uA[e'w9=3?a*mn)<ăU"?Bf(ICCVni%'RppC$UP7'A#>ADl?#i\-&tXkmnsj%q.'d$n*dbR]F%iX8bz9g$*ăU"Hc;eRy;j9asHjB(+,]7E2$GLAu*sy[wup9K5C%_Cm+NApec/o>_l2qektuMZNpLăU"Gd7lnxn=*06-bgsch1bTI:>6Bs:hU6(]cmQ^+t-;k)X(S^-8Fg]i2eUv4]8f)+măU"<<\KZiWEfIphK3ehejGpfg8'R^c_[c?ivHtWIqZb\f]Xi(j9$7JAn6\ZGiP8Dk_ăU"_fmY7=4r0yiBfdA0BX6cM4G5G/aXE#;Mqbl%]3]]BjfuEW_,/iKFKEvBvn9\=M5ăU"]I?s\JYUKzwbSCh&=Vb<$h&C:&k(]TG;_Uag\3/]hn)45IO.,;[m,dIM5VnQq-=ăU"ak;+fvk&f^/Vp7f(6^Ddn#d$FznnOLl?Uk\9,3sX5>]T1cT\0ThWe1cJf[cj#MsăU"VTJYsO3<mI8XQ5c9BF+U=Pv6vW^sbdwu%J/(V/5Pvac4d=Jb<FnU_&F5od:if$hăU"kKID10E+d^<4g[-w>o6BC;NB.0]h5VB?9lLboIdW]4<>MF/J2r9Lh9b.vw^z208ăU"t4M7iGxmcrWJ7iqR%kwnnY()[^;Nvt\p$q3O6AN22cbS]?bi'9jSbQCp:f)LKuoăU"B0&lY1WqM[b$V^fv:GUV\o=3_&FMJ:gl$NHHPY,C(DfvsFv9tNA?:t_e2JT9^:măU"*s\aMPQED8li]nqhrD/#oqz8\H(P=VGQwq#;p2qe5XRvGB/h:i.*;U'*w4P(fXWăU".h)CrUnqg^h/A^fkKc)D%q:dC3#3%etO8A.*\?Jj+f9q1>2u9-*F]mi-GgfVd8RăU"xD_<T9#7q)LgI*r7E9LG4OOJyNi/eO^(H+t4w++Z&Ly#e6H<j8Vu'hx*0T$Vl/EăU"[:qD]+UD*oSl;I$,'&IKkcGQSf&dkm9hHmw,vbXpi1UOer:nHm9v/3?$m8a9J,hăU"Kp$^osHC(X<7(cWZ1r')PfcX<k6_R\bTF4Gerc7<>Pd,brVdba&fZgZ2yBH]Q&GăU"liBCj:7R'0;(#Z8Yc#e6ZR&R=*(o+']\up%()9%%%%-%)6?NN+:tt^'6%%%%]&%ăU"%%/%%%MA403D<4SCMGCl^%fp(VR5khPWuVhugg(wp%C99/^*p;nXK<g3UXgFcleăU"MtxBWYOGj[PKlpC>,r?$lg5DH5AZ2]Tu>Chp*S0rMT7eY?h]16ZeNt9[G4mlN,&ăU"%us>;[>Tttu<<TtZ348J?w>99_L0W7Oq5bXdkk_=i1eO,emU77RWis3DWPw,44$ăU"j:mM4i'k-^5qGpX[IJtS3LD;-3PtJdc1:ZKtimXY-xsdGPf/=,r4E'0n:5\BCN-ăU"jg0u%p&'9%%9%%[%-%#\?NNFlL;)[%'%%,%-%%1%%%%%%%%%&[%E%/&P%%%L%E>ăU"AMC4G.IWS10&Bup&%'9%9%%%%-1%4>N4N'Y961b/%7%.s%%%/%%%%%%%%%%%E4%ăU"/P1#(%%%%twyj&'Sgx&%up&%'9%9%%%%-4%D?N4N_dP)2b(%%%w.%%%1%%%%%%%ăU"%%&%E4%/PBA3%%EM>AC4)G.VS210Bu%p&'9%%9%%#%-%6&?NN:]tt^6%%%%]%&%ăU"%/%%%%%%%%%&[%E%/5PS6%L%A4023<4S2CGCu%p*+%%%%%)[%)%][%%%8&7%%%%ăU"%ăEND SUBăV2ăV3ăCLOSE:IF S=55AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJoshua Foster                  MATRIX DROP-SCREEN EMULATOR    joshua_70448@ureach.com        09-10-00 (14:49)       QB, QBasic, PDS        237  15652    MATRIX.BAS  ' Matrix Drop-Screen Emulator 1.1ă' (c)2000 Joshua Fosteră' This is freeware.  It may be distributed freely,ă' but no copyright notice may be removed or alteredă'ă' Description:ă'    This is my attempt at making a program that has the same effectă' as that screen on "The Matrix" where the letters are falling.  Iă' started on this in keyboarding class (boring), but it's developedă' quite nicely.  Anyway, I put options in it so you can fiddle aroundă' with the max number of streams, auto-erase, speed, and character type.ă' I think the most realistic (and set to default) is 50 streams, no auto-ă' erase, speed 3, and binary character type.  Well, good luck, and ifă' you have any questions/comments, email me at joshua_70448@ureach.comă'ă' Works with: QB 4.0 and QBasică' QBasic note: Remove line 11ă'ă' Inputs:ă'    In QB, accepts parameters (type ? for a parameter for details)ă'    In QBasic, or if no parameters are given, asks for optionsă'ă' Outputs:ă'    Noneă'ă' Side Effects:ă'    Noneă'ă' Other Notes:ă'    Speed doesn't generally change from machine to machine, or withă'    number of streams.ă'ă' Version Differences:ă' 1.0 to 1.1ă'    - Released publiclyă'    - Added optionsă'    - Added help screenă'    - Timing bug fixedă'    - Added use of command parameters (QB only)ăă0 DarkGreen = 2: LightGreen = 10          'Set up global color variablesă10 SCREEN 0: WIDTH 80, 50: COLOR 15, 0: TOTALSTREAMS = 0: CLS          'Set the screen to mode 0, 80x50, colors 15 and 0, and cleared, and also sets the stream counter to 0ă11 GOTO 300          'This checks the COMMAND$ parameters.  If you're using QBasic, delete this line.ă12 COLOR 14: PRINT "Matrix Drop-Screen Emulator 1.1"ă13 PRINT "By Joshua Foster (joshua_70448_2)"ă14 PRINT "Email: joshua_70448@ureach.com   Homepage: http://all.at/joshua"ă15 COLOR 15: INPUT "Enter max number of streams (1-80, default 50): ", NumberOfStreams          'This sets the maximum number of streams to NumberOfStreamsă16 IF NumberOfStreams < 1 OR NumberOfStreams > 80 THEN NumberOfStreams = 50          'If the number is out of range, set it to 50 (default)ă17 PRINT "Auto-erase streams? (Y/N)"ă18 a$ = "": WHILE a$ <> "Y" AND a$ <> "N": a$ = UCASE$(INKEY$): WENDă19 IF a$ = "Y" THEN AutoEraseStreams = 0 ELSE AutoEraseStreams = 1          'This asks whether or not to auto-erase streams, and sets AutoEraseStreams accordinglyă20 PRINT "Select speed: Fastest ";          'Lines 20-36 set the time delay amountă21 COLOR 4: PRINT "(1)";ă22 COLOR 15: PRINT ", ";ă23 COLOR 12: PRINT "(2)";ă24 COLOR 15: PRINT ", ";ă25 COLOR 14: PRINT "(3)";ă26 COLOR 15: PRINT ", ";ă27 COLOR 10: PRINT "(4)";ă28 COLOR 15: PRINT ", ";ă29 COLOR 2: PRINT "(5)";ă30 COLOR 15: PRINT " Slowest"ă31 a$ = "": WHILE a$ <> "1" AND a$ <> "2" AND a$ <> "3" AND a$ <> "4" AND a$ <> "5": a$ = INKEY$: WENDă32 IF a$ = "1" THEN TimeDelay = .05ă33 IF a$ = "2" THEN TimeDelay = .1ă34 IF a$ = "3" THEN TimeDelay = .15ă35 IF a$ = "4" THEN TimeDelay = .2ă36 IF a$ = "5" THEN TimeDelay = .25ă37 PRINT "(B)inary or (R)andom Characters?"          'Lines 37-39 ask whether to use binary or random characters, and sets CharacterMode$ accordinglyă38 a$ = "": WHILE a$ <> "B" AND a$ <> "R": a$ = UCASE$(INKEY$): WENDă39 CharacterMode$ = a$ă41 CLSă45 REDIM STREAMCOLS(NumberOfStreams) AS INTEGER          'Lines 45-49 DIMension arrays to hold the stream columns, rows, alive/dead status, death row, and delay to eraseă46 REDIM STREAMROWS(NumberOfStreams) AS INTEGERă47 REDIM STREAMALIVE(NumberOfStreams) AS INTEGERă48 REDIM STREAMROWDEAD(NumberOfStreams) AS INTEGERă49 REDIM STREAMERASEDELAY(NumberOfStreams) AS INTEGERă50 FOR a = 1 TO NumberOfStreams          'Lines 50-70 set the STREAMALIVE array's values to 0ă60 STREAMALIVE(a) = 0ă70 NEXT aă80 STARTTIME = TIMER          'This sets the variable STARTTIME to the TIMER value when the rendering loop startsă85 IF TOTALSTREAMS = NumberOfStreams THEN 140          'If the max number of streams has been met, don't start another oneă90 TOTALSTREAMS = TOTALSTREAMS + 1          'Increment the stream counteră91 TEMP = 0          'Lines 91-94 search for the first dead stream array positionă92 FOR a = 1 TO NumberOfStreamsă93 IF STREAMALIVE(a) = 0 AND TEMP = 0 THEN TEMP = aă94 NEXT aă100 STREAMALIVE(TEMP) = 1          'The new stream is aliveă110 STREAMROWS(TEMP) = 1          'The new stream starts on the first rowă120 STREAMCOLS(TEMP) = INT(RND * 79) + 1          'The new stream starts on a random column (1-80)ă121 FOR a = 1 TO NumberOfStreams          'Lines 121-124 check to make sure that no other stream shares this column, and if so, sets a new numberă122 IF STREAMALIVE(a) > 0 AND STREAMALIVE(a) < 3 THEN 123 ELSE 124ă123 IF STREAMCOLS(TEMP) = STREAMCOLS(a) AND TEMP <> a THEN 120ă124 NEXT aă130 STREAMROWDEAD(TEMP) = INT(RND * 39) + 11          'The new stream dies on this rowă135 STREAMERASEDELAY = INT(RND * 20) + 10          'The new stream starts auto-erasing after this many loopsă140 FOR a = 1 TO NumberOfStreams          'This starts the rendering loopă150 IF STREAMALIVE(a) = 1 THEN 160 ELSE 260          'If the stream is alive, keep going, otherwise skip the draw sequenceă160 LOCATE STREAMROWS(a), STREAMCOLS(a)          'Set the cursor to the stream's old row and columnă170 TEMPCHAR = SCREEN(STREAMROWS(a), STREAMCOLS(a))          'Read what the character at the old position isă180 COLOR DarkGreen          'Set the current color to dark greenă190 PRINT CHR$(TEMPCHAR)          'Print the character in dark greenă200 STREAMROWS(a) = STREAMROWS(a) + 1          'Advance the stream one row downă210 LOCATE STREAMROWS(a), STREAMCOLS(a)          'Set the cursor to the stream's new row and columnă220 COLOR LightGreen          'Set the current color to light greenă230 IF CharacterMode$ = "B" THEN PRINT CHR$(INT(RND * 2) + 48);  ELSE PRINT CHR$(INT(RND * 221) + 32);          'Draw a new character, either a 1 or 0, or a random characteră240 IF STREAMROWS(a) = STREAMROWDEAD(a) THEN 250 ELSE 260          'If this stream dies on this row, go ahead, otherwise skip the dying sequenceă250 IF AutoEraseStreams = 1 THEN STREAMALIVE(a) = 0 ELSE STREAMALIVE(a) = 2          'If auto-erasing is disabled, kill the stream completely, otherwise put it in wait modeă251 IF AutoEraseStreams = 1 THEN TOTALSTREAMS = TOTALSTREAMS - 1          'If auto-erasing is disabled, decrement the stream counteră252 LOCATE STREAMROWS(a), STREAMCOLS(a)          'Set the cursor to the stream's current row and columnă253 TEMPCHAR = SCREEN(STREAMROWS(a), STREAMCOLS(a))          'Read what the character at the current position isă254 COLOR DarkGreen          'Set the current color to dark greenă255 PRINT CHR$(TEMPCHAR);          'Print the character in darkă260 IF STREAMALIVE(a) = 2 THEN 261 ELSE 270          'If the stream's in wait mode, go ahead, otherwise skip to 270ă261 STREAMERASEDELAY(a) = STREAMERASEDELAY(a) - 1          'Decrease the wait counteră262 IF STREAMERASEDELAY(a) > 0 THEN 270          'If the wait counter is still more than 0, go to 270ă263 STREAMALIVE(a) = 3: STREAMERASEDELAY(a) = 1          'Put this stream in erase mode, and set the erase delay to a row counteră270 IF STREAMALIVE(a) = 3 THEN 271 ELSE 280          'If the stream's in erase mode, go ahead, otherwise skip to 280ă271 LOCATE STREAMERASEDELAY(a), STREAMCOLS(a)          'Set the cursor to the current row and columnă272 PRINT " ";          'Erase the characteră273 STREAMERASEDELAY(a) = STREAMERASEDELAY(a) + 1          'Increase the row counteră274 IF STREAMERASEDELAY(a) = STREAMROWDEAD(a) + 1 THEN STREAMALIVE(a) = 0          'If the stream is completely erased, kill the stream completelyă275 IF STREAMERASEDELAY(a) = STREAMROWDEAD(a) + 1 THEN TOTALSTREAMS = TOTALSTREAMS - 1          'If the stream is completely erased, decrement the stream counteră280 NEXT aă281 IF INKEY$ <> "" THEN END          'If a key is pressed, end the programă282 IF TIMER < STARTTIME + TimeDelay THEN 283 ELSE 80          'If the rendering loop was faster than the current speed, go ahead, otherwise go to 80ă283 DEF SEG = 0          'Lines 283-285 wait until 1/19 of a second has passedă284 POKE (1132), 0ă285 WHILE PEEK(1132) < 1: WENDă286 IF TIMER < STARTTIME + TimeDelay THEN 284 ELSE 80          'If the timer is still less than it should be, go to the wait loop againă287 DEF SEG          'Reset the memory segment pointeră290 GOTO 80ă300 IF COMMAND$ = "" THEN 12          'If the command parameter variable is empty, ask for optionsă301 IF COMMAND$ = "?" THEN 580          'If the command parameter is ?, draw the help optionsă305 ON ERROR GOTO 550          'If there is an error, go to line 550ă310 a$ = COMMAND$          'Set the command parameter to a$ă' Okay, here's the hard part.  We've been given a single string like this:ă' 50,N,3,Bă' We've got to turn that into separate values.  The following code will chopă' the above string into separate strings.  If there's an easier way to doingă' this, *please* tell me!ă315 REDIM COMMANDSTARTS(4) AS INTEGER          'Lines 315-320 DIMension arrays to hold the starts of each parameter, the ends, and the valuesă316 REDIM COMMANDENDS(4) AS INTEGERă320 REDIM COMMANDVALUES(4) AS STRINGă330 COMMANDSTARTS(1) = 1          'Set the start of the first param to the first characteră340 CURRENTARRAY = 1          'Set the current param counter to 1ă350 CURRENTPOS = 1          'Set the position within the string to 1ă360 IF MID$(a$, CURRENTPOS, 1) = "," THEN 370 ELSE 400          'If the current character is a comma, set some arrays, otherwise go to line 400ă370 COMMANDENDS(CURRENTARRAY) = CURRENTPOS - 1          'The end of the previous command is one character before the commaă380 CURRENTARRAY = CURRENTARRAY + 1          'Advance the current param counteră390 COMMANDSTARTS(CURRENTARRAY) = CURRENTPOS + 1          'The start of the next command is one character after the commaă400 CURRENTPOS = CURRENTPOS + 1          'Advance the position within the stringă410 IF CURRENTPOS > LEN(a$) THEN 420 ELSE 360          'If we've reached the end of the string, end this loop, otherwise start the loop againă420 COMMANDENDS(4) = LEN(a$)          'Set the end of the last param to the length of the stringă430 FOR a = 1 TO 4          'Lines 430-450 set the param values array to the characters specified by the end and start arraysă440 COMMANDVALUES(a) = MID$(a$, COMMANDSTARTS(a), (COMMANDENDS(a) - COMMANDSTARTS(a)) + 1)ă450 NEXT aă460 NumberOfStreams = VAL(COMMANDVALUES(1))          'Set the NumberOfStreams variable to the first paramă465 IF COMMANDVALUES(1) = "" OR (NumberOfStreams < 1 OR NumberOfStreams > 80) THEN NumberOfStreams = 50          'If the value is invalid, set it to 50 (default)ă470 IF UCASE$(COMMANDVALUES(2)) = "Y" THEN AutoEraseStreams = 1          'Lines 470 and 471 set AutoEraseStreams according to the second paramă471 IF UCASE$(COMMANDVALUES(2)) = "N" THEN AutoEraseStreams = 2ă472 IF COMMANDVALUES(2) = "" OR AutoEraseStreams = 0 THEN AutoEraseStreams = 2          'If the value is invalid, set it to no (default)ă473 AutoEraseStreams = AutoEraseStreams - 1          'Adjust the AutoEraseStreams variable so it works correctlyă480 IF COMMANDVALUES(3) = "1" THEN TimeDelay = .05          'Lines 480-520 set TimeDelay according to the third paramă490 IF COMMANDVALUES(3) = "2" THEN TimeDelay = .1ă500 IF COMMANDVALUES(3) = "3" THEN TimeDelay = .15ă510 IF COMMANDVALUES(3) = "4" THEN TimeDelay = .2ă520 IF COMMANDVALUES(3) = "5" THEN TimeDelay = .25ă525 IF COMMANDVALUES(3) = "" OR TimeDelay = 0 THEN TimeDelay = .15          'If the value is invalid, set it to 3 (default)ă530 CharacterMode$ = UCASE$(COMMANDVALUES(4))          'Set the CharacterMode$ variable to the fourth paramă535 IF CharacterMode$ <> "B" AND CharacterMode$ <> "R" THEN CharacterMode$ = "B"          'If the value is invalid, set it to B (default)ă540 GOTO 41          'Go back to the program using these new valuesă550 RESUME 560          'Resume the program on the next lineă560 PRINT "Error in interpreting command parameters.  Please enter manually."          'Explain what happened (Usually this is because there aren't enough parameters)ă570 GOTO 12          'Go back to the program, but ask for optionsă580 SCREEN 0: WIDTH 80, 25: COLOR 15, 0: CLS          'Set up the screen to the default settingsă590 PRINT "ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"          'Lines 590-810 write the help screen out, which is accessed with "matrix ?"ă600 PRINT "ş                     ";ă601 COLOR 14: PRINT "Matrix Drop-Screen Emulator 1.1 Help";ă602 COLOR 15: PRINT "                     ş"ă620 PRINT "ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¶"ă630 PRINT "şYou can use this program with the command parameters, or you can edit the     ş"ă640 PRINT "şoptions within the program.  These options are:                               ş"ă650 PRINT "ş";ă655 COLOR 12: PRINT "* Maximum Number of Streams (1-80, 50 default)";ă656 COLOR 15: PRINT "                                ş"ă660 PRINT "ş";ă665 COLOR 9: PRINT "* Auto-Erase Streams (Y/N, N default)";ă667 COLOR 15: PRINT "                                         ş"ă670 PRINT "ş";ă675 COLOR 10: PRINT "* Speed (fastest 1-5 slowest, 3 default)";ă676 COLOR 15: PRINT "                                      ş"ă680 PRINT "ş";ă685 COLOR 11: PRINT "* (B)inary or (R)andom Characters (B/R, B default)";ă686 COLOR 15: PRINT "                            ş"ă690 PRINT "şTo use these within the program, just follow the on-screen instructions given ş"ă700 PRINT "şwhen you start the program with no parameters.  To use these as command para- ş"ă710 PRINT "şmeters, use them in the following format:                                     ş"ă720 PRINT "ş";ă725 COLOR 7: PRINT "MATRIX M,A,S,C";ă726 COLOR 15: PRINT "                                                                ş";ă730 PRINT "şWhere ";ă731 COLOR 7: PRINT "M";ă732 COLOR 15: PRINT " is maximum number of streams, ";ă733 COLOR 7: PRINT "A";ă734 COLOR 15: PRINT " is auto-erase streams, ";ă735 COLOR 7: PRINT "S";ă736 COLOR 15: PRINT " is speed, andş"ă740 PRINT "ş";ă741 COLOR 7: PRINT "C";ă742 COLOR 15: PRINT " is character type.  If you leave out a value, the default is assumed.  You  ş"ă750 PRINT "şmust put commas in, regardless of whether or not there's a value.  Example:   ş"ă760 PRINT "ş";ă765 COLOR 7: PRINT "MATRIX ,,,";ă766 COLOR 15: PRINT "                                                                    ş"ă770 PRINT "şThis assumes all defaults (";ă771 COLOR 7: PRINT "50";ă772 COLOR 15: PRINT ",";ă773 COLOR 7: PRINT "N";ă774 COLOR 15: PRINT ",";ă775 COLOR 7: PRINT "3";ă776 COLOR 15: PRINT ",";ă777 COLOR 7: PRINT "B";ă778 COLOR 15: PRINT ").                                         ş"ă780 PRINT "şTo access this help screen, type ";ă781 COLOR 7: PRINT "?";ă782 COLOR 15: PRINT ", with nothing else.  Example:              ş"ă790 PRINT "ş";ă795 COLOR 7: PRINT "MATRIX ?";ă796 COLOR 15: PRINT "                                                                      ş"ă797 PRINT "ş";ă798 COLOR 14: PRINT "Matrix Drop-Screen Emulator 1.1";ă799 COLOR 15: PRINT "                                               ş"ă800 PRINT "ş";ă805 COLOR 14: PRINT "(c)2000 Joshua Foster  joshua_70448@ureach.com  http://all.at/joshua";ă806 COLOR 15: PRINT "          ş"ă810 PRINT "ČÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍĽ"ăSam Thursfield                 VFONT 3.1                      sam.thursfield@btinternet.com  10-14-00 (07:43)       QB, QBasic, PDS        684  45125    VFONT31.BAS ' vFont 3.1 for QBăDEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2ăSUB V1:OPEN "O",1,"VFONT31.ZIP",4^6:Z&=33593:?STRING$(50,177);ăU"%up()#9%%O#-%mG.NMZl1\S9-%%%,G%%%0%#%%i4M50D;JCS5=kC^hH8ZA#:9#0ăU"#$Ek05j)*0R3eSAAA2p#Qa/Sf:gWwTUju.baI()lK(58OY3fs0A*M^P+CF97?ijăU"2mxRer57+3E8DV80t+3kjWKXlp6yw[Z$?R'+um:jbT,8WdLW^ZcWxKoq\$UKHd?ăU"ae>EN)sVXaN$nnI8:dGSh_eEwwDb:kMaDr+dX[F1FTF_3FtJ*VWPwF-;;#L7VY'ăU"px>^CuP4e-\HpuoL7t?*LErqF=4Qb'sxp+,pTm?#4M:aAf[+i\tAl7KbHVpg,0FăU"L1&Q:?c_Osm.Jqdh(nC_upo5tuC0j874pJyG+TLZ9uxp[kbAtuj&vR=PuMsc?\făU"TSVS&^A3TfeKN%x_4;=$DrfMt\Z/yXA?jJjJp6AvhRjomj55Qx9H]xAb.^jUAqFăU"pHPa<GJlL;Km+[ca9_k;j#nC1tBz$mkCkxj-.VgO0CFYU6:U&RA$Z[YLDH;0m>4ăU"y*o9j<L09MRWtUp<7OMTpHEo7Dj2w%gj',n\P&]+ogS+d^a?fSI9h'ty2%:+,JuăU"4:c=qj4Cr%A8pMCO%:go;]ji=19COr^b/UlBgBl?OF%MCXzAqPX%v#;oa4l+Y'3ăU"t*#rvZ9wphYZAX^]qT+e-^s2IXXo-&Yl8D]FS(NhTODtwp8.QC)BrWF.ZnNZkJpăU"#=jPaD_,MfchTB?+)7g_HMfbJ4IptB-F^^Is6ptJ.204l9,<IZM-+_lsJj.HwNCăU"^NXca-818*xU;ygQ$zDo8gHt'?GVB>gSWwooD';12%lu:xRhwWkm-Bhb)5=L?e8ăU"8iFiQlbMgsFIpIk<gj>$\Tb&C^t_v9w,6E4_cu,&xj:cVuOb?;gOjKa*<wBuRT)ăU"O*xF:nS\IWs;6Mi][.KYTLRb>q,cbAey?+3udi5>*N4_LihoN;.sB)XkiNQgTyMăU"bPwLA4^1cb+n8,N8,ePK/7JD8f'r%b62SYwHDI\r]Es_uj#pq<Wx:T&,].aA$EbăU"?x$H2)SGdxc5KU;.5;c1VP#z2s\;NjGr#tCxJo+vuHkh8YuJZ6NplL$.2M.h,SrăU"/MYx]NCO'(p%ziF#D_m?Y/j0OCFRSa\8TojT7HGo$Puvbvt=6=8QxXhGnQwTx>păU"uEw.am5B8sdPFMiU?/%j])0.r8#mN&jbXbkD4d:;wLx$>XKdSA8WuBk>gGN8(KtăU"7LnbqV_G#Fcnq2(P%00m9^J4b7trB%uKN#TrsaPjANUP$=MeSe0D9>z;d-Q\M%)ăU"B#V/7]n8k^aJSnFO/SIVQwx$H.14xdufQ8oou$SV4[Vm4]qTvo=.eg$auq)PJF=ăU"H1he#S*-0jTMVvQky^qyRxt>B(NY%Zx#V^NZm9lYrA?v7=o>cxUQN7EN#b<u<x_ăU")1aRPHI*X9i0\dM^;u_5aaZiJ(>8YYE#J5J4,v+c4i<rhf'XiY.[pX4$,L:qczeăU"bj.geadzGy->B]m0hAAw*2U%NyqFs%[ICO:&ilcod^S(c.:A3$H6*4s:RGtYNuCăU"n^QWDcf9QELg6)H[$DsR7.x39NQ60>Hekc6^d^g_b]8)yoxT/7>FHuvou(NunEWăU"86#qDW,tk:_2E6HtLX9WQ>Omj-fx3JIZ>MUr+/x0O_utD4>HAO+ljLP$\N*Kt]kăU"i]Vno/p*fJ$(Qd2,3\Fks:uwHEw_TNjVoIxq-<<.?P]fBlHA_>NYK_-V%eN'NnXăU"D.nfmz)t(r%6)tiK1<DeN.)nbWx>#(<ZQG9xXAxbKIHe=u6]xom2oxfKk%t&Nf.ăU"CPrm6_<Odv;[MbYDNP.4y97NI48Lykzu#(nrZdr70VzSu]DJ6h6iH.Q+QSx#V98ăU"\t4cjx;HFF[05?Jw>Sb*wGZGpvLW8YGd.A2ejYTCd>;kmuRxC46<p5g#BqcCsn]ăU";.?577ccEvX#xk)TwN.t$^n1qefI*lFs,o)>GV>_6#u.iWwD]N_9IRuFx7f;i+NăU"\x90^0Do5(AasFkd(sWfT8lSvdVq&lU$9h$-Xfk#uO]x<V3>wx(v>FHv6mvhHx$ăU"kuHJS-sxf$M\+jf8FNNN+VcMs#x<pMOB):hnN9KRtm(Yl$8e8ma*wC1vIY+9C.tăU")sHWUCRdDin6oqvBfwL*qcDul)T[VxBogQhj6(E2df93&ItUr?q9xEkTn7&4i?PăU"q8#Wx1=.oKNrrY:rH?.73$jqKOecs'3Y\ctxR7<:Z^QP2xU><N9xOtno]fAx0JHăU"pnl?OqSFfrP.8YS6p8cwgyY(]nN;rHKiswF[JbgDk.6/Dmd#i(Ha>zNnCBC8_0LăU":rV&rqn,<]T?>?GQ$f_T6/tV)lruYu(vtYAXhb/xj$$FG\wTbkw.k$X5tqfB97iăU"6,UpCdX[:ueITppd\xc<xb:MZZup_u$8iv=lrX,B,pkf/^=.8Ym.nzkauIcY:qwăU"B<ZMDx'U7X\ijk,YCnI:'ktI*+r^J1;A&a>HO6T-/P;vMce(yfkj(-g*oxVsd'păU"Db.ORQ*BR],ajbE>bxa.OxQmA0?q-;7n^cqA*HpwZA8o)XbZQav.x91Ru<aHwzuăU"XWOQiT_BwB<G&#z,V6ocM5<oKY7$0ps,QwvZ0eN+ZxvP<I=^#>XO6GFV;<TL\.tăU"lvpL*Ovt9r-6FdVO\?BavdYs98lE(L,?X(wP\Q'uVxltN2KA2_VMr(e^4Qpxnj3ăU"('<\oN$ihsdXTkumv.jLscN:ix>ixp]DrpfP>%,TU]WjQYx=si^7fkNXSMI<bMqăU"1$4vDHQw#x[sV*8DuPZr8?FxVpt>Lw8+tsTu%p()9.%%O-.%rPS:NiC9%LQ'%+%ăU"6(%%%0%%.%r:g28>B]LS10BS4xT=BSe5LFl[D]Kk5o#%Qh#7(zyyu*fUk5^/%ynăU"e<(:5J4T7FY,CXF'O[2w=R]>X56G4Q-p_txt0U<#_=vl8'593,2:EeN;;[[3alZăU"p5n3ktpBj5q>4F5RXba\uR)R#Ag1hYQsp,>)*DkHs3-7]M)lZ'u,H$nhkjRkzqOăU"g#7HkQ_KdWiLCkNQS8*9b-8Oi$XAHHJQ#]jT$SL7btg3ILPEtc$T-(_dVMA4>/UăU"aUXL;eXN/\P2amKN<m]Sb^,<aMGX1/%XnXk5]?wI>4fWlF%,c-^BGzBX-oYuB*9ăU"simK.Nh4+#HRn1:C/]$3^Vddnn+KSgb&S-?Asrqy[^a*PDhk%07$TAC5H7M:B[?ăU"#W:Vok38:TYYfH*H5IH_)D+;Z2B8]I2*SSkkBeX?hPY0515Ni9-(NS'A&q)B6]?ăU"7]2u1.7mvF1UVMMn3Vf*FLXqh5,U.OT*$%hgwd4>0qr:fq?>C>e.&rIn-6VfKncăU",RG#l]o6v^YjH=rd^gg_71a9S32cvb.Lza,6HP-eKgQuU>SbEdm0B'beWwrO&hwăU"LtRd#-6bM+G[gW-V]/kAkrE#XM];js)as8w$9sVDKc\0s1Gu;Th[4v.)OqLvM)zăU"I(^rq^]&)?EE.[]1SW8W?IG3v$F$6F6-lk:[4+SqdvI#c..)kdbIk2a-M<^vOSlăU"BNJYq3^[8>W<J3\LS8bo?Kfu*%up()#9%%O#-%($RRMuv84W*-%%%,G%%%-%#%%ăU"y7D8=S5V=CNh^d7IBF:?DB,LKQQ4pt']:*Z(t;%oig;0SV1q\h9:%J+,3U;2]3,ăU"R:-aJFYAJX==%'J]j+oVB/E1dL#-]o=E]>]*HL?9)=<^mUk::gN_*wWW&(yhzJ)ăU"xs3h+'jlpCvW(I8Ii(yJwWlb2W0%4ttA%Fr;+jW3tfg?Uu4)Kcq^MzMlC;1(uu6ăU"6MsM*_ut]'IvdPL+14ti*/l#,qnqG(%SdJ*fxdNO+&RMC*[Bl[kMuanMt%i0sr>ăU"3wh+R8zR&J(R<4g>XNObeMo)6<%_]/q*)*mt=1)df/FdPdDwHN)0zlhhfTlW<M>ăU"A4E]>=8jO2cIQ4ALW3iABm=j;.8Hk[W*2ejp2-p]-z?qNQ,<A8stURMl$t.>8;găU"_Bp5u-GL9:GfP>m[^7(XD5?U^AL36AXb^,WHs)Hf2yvxI^ihw,-gGL(XUlvBD>.ăU"7sM]2u\kJO-j\1Ux7vTxl8w^]-nM(juaP=TQZH1NNu?1GbUG[[4-Ypu;G;byubeăU"0,bukX?u'706^;UnAeBq<=R_j&Kf2_bNnMlw]y,%g;wOoA,xgVqiH[rM^hPBmFUăU"95?8Xk[nm5H9vtGpS$$'%?VL0Xa8]k1/2Dq[7G4eY(h#lpv5&Q.?kHqh\<r619răU"+uk>3u_VG)AVu%*>KNTey8cl9z#Tw3PSNc3Vt*0;s4UF,tFRw+wxYCrhC?Q4dyYăU"e6WTW&KvlUk:rgVi$)Eoku#jkB/y^)U+,?qM8o7s+juh;1MhhOwKgo<O2/ZhP3lăU"jB1C4xL8,bH4P0OKkcSL]\4kuE[$zI5[NHm:'t-N^i53PtAB^f;k3P0=YN?269/ăU"GVQuN,'lQ2;BF:9,w>glr0=TQHljf;Zd[J)=hi-o^w<1qhA2s9+H-QU_KS7yR$kăU"9.3B$Ho8nh+ju<B0wl'db,wh-J)xAbZ/vd7_u_H'4(FnxoO^_Cl_4=uUaNnD>x^ăU"vsWwYrvY'^TPWxLM%ott*s97.Tyuw3/H(EhYP9*[w*TqyO25b(0D^C:%R*YG,I3ăU"a6$X/%=2ll8ZNQcD8UwJ#dHZE8gC=T;d6AZxQ=kCl+0#G?wdfbRG.]kT&bH_#<eăU"3Eo.uM4:qfpKuz^<NwBa??3b$d[\6#NOY=Z7Q_p\nqg.C*o'WltG9xZAf0>&XoxăU"l]bgoM.wX'WXprxNEoPkx.r2twEa'x?J+0/DzD?F%h&i-cPF5O7pWEw=yJQErSKăU"1P+2mt4u#]oxQiP8(\u8?GVpVE:kp[o3iC'Ku-HFk(\.kkJ]kD-#qRV;^T.U$#7ăU"bx+ruSu)91WZG#lQwTtd,SoC'[-;*1O,]m,8cDKPc-Y?PE/?hSgKKK\odl?w,hcăU"H]pI=]#v5>DTuLiAN&Wbb(eZM,+.pc^:2raPp'ppGs=uKxnM-q2]x16>8cTli4UăU"tV]K?Ebc87'QBxr7oxtan7CF0Y>ZLVU\p,w6/M5IoFUD1Ljb9GGmF.Cf:*jNx5YăU"SDnWwyZYJMSp%jBxaP>ebh5Rt8My;qBA566HGru9Z#mQxGNwmSkM=V[J3*Ldyj2ăU";c),B:phs\+I($\%tRd+EBBp<uqh,v74V+F+bg'RuvO-vs^C4lu7'a?9wbx)cunăU"bgMxHoU9x5rS9gbDAcOp4/:X-[T-?xMG>-midD2:DhcVrbtj9bJ:9xP^TcEolk=ăU",MWG$xN,to88jP]Kz]D?^M\$WMm\NfGc:+FvwN%8#rTDoS>Qfmqh_Pt$vxS<e.răU"$bnhsZjn=.TVzGgEY0CsB\2aGx2#VNCiq>a/l0xhj3pE.vbB$6xCN9QeTqD)LaBăU"BY[Z(sIBXp;SIaSW-oqN941c,xTJf#x7b49OM&b#pNkTXXDFJFBN0Y2luL.B.>HăU"lvul89(^H2Bk$X\u^Z](KZX_Fco8<jstFwv*wN,R?PUv#TtTRV$$n+wP\vvgH(OăU"=?g4g$[?9?)<ueXjHffaosXA0q^=u#lTEQ-jUISQ[NjBjnSW3#uB9'?#du.2>uKăU"Hn%tMqfyqJDcuF-hkdikjH/xqIUlujd.Dvbks><u?seXufx34c4n88a(a-vZGhpăU"NZ^X/N:RxuPT\d4SeNO\xTxcrDXh\xdo]?>r>NVZCuC0)xZ4l8oH7g*Iosd\wSNăU"34w;<\bOfL\pvt7xH&]h8c0Zr$/JcdnIeijrW8%$8CUYEA$cdaBN#s]di(FGwjVăU";N1u4ofr'ZRdHnUr8b?w7l]8S$lNkwnZCwCjH:8Yp-idTix6P88mnK#rj>hx5&lăU"nS?jPiN3r4A>kNV.v<tns%H&vwMkY4Nxi8R(NcMCIMl(RV,5N.WLY[^[L;[])UIăU"bK5L$ss^'tug],liwfD<p)udb0eEiEXSS6A;ttajVx(#$x^_uD6G\'?QsJYWH.păU"mhT$<aZG(^N_QEsqX[NiNgG]NBrVLLWYZ4o.=+wb2WeNCLoj[ulb-w#]WP>xJZmăU"=KIrxjkurkFg-rG.dwQZvN.rIBSHk7LdqWv,hIt-LV^^CFlvfwV\W$x,bxcv$y7ăU"-FhdxVktnJoHcHRmJY&w^n:d[jNHNx2#0fR_N[pHThL]NbQU>&,p-[CboU;dcd0ăU"IpQv#851<tErZCOrN9?^x523,9xUg<PLQ$RTmsY#lpf,PttuwhqDO:uFJEeN$k=ăU"Asrtl<ak5c-XWqB_XWEH$0y=clv\hF57Osrky;k-36a1KF+j_jTN>#rPIcXS;YNăU"d]S=S6uxtYrg\):Wp&s<xc+OBxt=i70a$D0?oC#FhZFtx6k?F7\c)1&xB/3K&K=ăU"S.0rPTfartv0xoxZx^=5lhD<$x5OEw>kgmicQ8ubW4.s3'hZu_ZNRixAw;kmQm^ăU"V<GwNrlNl;ud-x(+8w0u%p()9.%%O-.%</3^NWbO&<_-%%%,G%%%.%%I%g8>AB]ăU"S5V=CffM<[+4X:#x<Q#RDlE+4ZDa/FG=Y;-NA2<0FMebwYI<Mu/n#fg:k(w,7B9ăU"F/fW;*Vf[Le;(;#g'Ng]/Vk8]Q4[o#jYo%B436f[72YKg[jdMW+z.,S./.[sXwGăU"25F?h&m878bSkLHBYnt5mtJw$frwB:0UI,Ly55rNSTKE^b)irIjLOJ<&:s&bKklăU"MW[:/cN[_thnK%4ytnh\xjo#<oVfMwjnxdaXHCDKd]p3]Lr)^Z/IHi'qebCGBJmăU"F*?_D=kLm/0E;r_Mw-Y\-nsnh<MsXS;4qlwTM.$0CgL2+iGxJ4/[zLc[_z\w>K<ăU"'&A3VjJD$1alntyah63:tvZKV3-,^c,_N;'%vTRxO.$n8RO;)sQ(-xdZ(.^SVT&ăU"8<HP<Nt#Y6EWJZPjsgm4k;&V[$obCtl(b6tMD-WBM(a>g&z.<DFz[:=BdTYUp*aăU"<QZ6o2Lm)kC:eNLpb-[_:MHRI^JMoNa_Df9L:CE>Y_f6$0chj#0H<f^3hfESD?eăU"R';1U,qr'Yd2?X^7cs%p^rd_OV4J9xUKPjjq6RCzo2+PZ+]Y7vAGw)])?rrCG(YăU"S:geIPLP&$&OzP[)j/a(^t6Afi)=WiQHK]#fH-zKO2q6r-7.f(>anhnc$-DW$7+ăU"\wYJ70eV]Q6C;v=OGm]Yf1W.5/*:DFu4q:n7[Zst1-U+.<NC#4RDkp'4^)9.Dh^ăU"HSa0GROwCY/&oRJ7<DteMhJ88EWL:b(Z\Y;4OJus0G2G=#ST]VvZwRiid5$#Qb,ăU"iM8mfP<DM)8rS5A-GRwG<s*hTa)fD-B_G'0-,R$6b4f4$zfX(*,NDb/gi_Z&a;6ăU"]xrb=l<*WBq\>KKCs>$odfw1P_-*Wxa\$tA2T,_QNg\6m\cQ($<r*<xO,7_[^$7ăU"UH]1lO?[nt,.K#zKuL+&i%nq.9V>P7Xj0_H<_GoxctiZ69%=LNnGc>QjN_A5-TwăU"Vo=V;x9<pK63<h^altDh(b2^/?CmNq;HkHsbJTE0MjW:B0-H:op-aS1+e4hKn,]ăU"(DG84#nqc-:CJE$KyZ'ehL'.7-.Hu)Vr$1niXr;FGfo;rurUrdL5nK<t+pqX0sbăU"<b2>*vL>\)y=zmhfs,S9w^^L#X?L?2Tf[<))Y8\j=C5N=L$RX3QP,HqFMu&r7,hăU"btL*7r0cagt\g^r:Pqad][/=n(tqZYqp%rvNBj7Sl7aNbe6M?7HfQl:eod>YF6făU"&lt>(h:bJWB#h$\N4MgfF\u2r+6oKHpQ^L0-2\CHjgu^48n/5Iey_e$YzkU?V$iăU"phr%BRdS41b\]1c=wAu,FvjKtQcQbtcIW3i3-tFb0-jkdqj==3+k9PFrZTsK^ZQăU"UpsmggvE46pXoPae]kF%H[-^jTpB]UM;OFlY1Z+B>6C5AM;XV874Y:Fsdz^rE5păU"$T:pemY5P^K\J+s3$2LKaCS2Qsk2mEYb^h(v/\EN,F6YL?HKGBb'%Ag(6sIbs6WăU"X^S>cj-VN#,oLrM$%.oxVplYU8RNrYEKdK1+og5?d+fRrjqf#ap=^uix0vO,q?băU"5EU&9nGTi%Hq\)B$\]x>$w^joG>q<+7\W-^9)/jTqH;B1rn%iHrtM,c_[2AqKw%ăU",xWYnjFnj$gHsE+x0-\Xm(P=x4qrwHpB7(m.gi0/TViY>%x,w0TxH79m(Snj7ZCăU"^LZEtL&T8*r3$Fa3SR]_*lCxW$PFK^Y/Nq(S1j0F?I&9qLK.RlveyphNZhFEEF7ăU".mC&HtQ:^-;0t%7Si]sE_;Yk)6C41cta8WqhN/abk)4<,?i.YB4\W#BEu?18L,<ăU"Y>uds^5B+?uRdN3^FZKxj%,lbRjRb-'?xspN%CH54n)cNqD?Wp[\8mcdmutPp;qăU"jda:EW\&[N]?RYEjL%FEZjHl%P?u\Roia<1>Q8Z_Ro$[:jhHnnej1LL_;Z:PUV9ăU"tBlwwnihn=WxI;BT<?XYO$7yXw7kMs2=rxaocp4GT6i'jr-Ttbs>seo$)>N*pX?ăU"JG+HqB^\QVPCh39FJc:ho0-\;f'hMP-Y&m+^0jAj21d0k0#>KH,5SU9-\bxCaVMăU"et>5Cs5T]Md(knK^TjQ.d's]?G(UNi,o2^?QI5HfR]fU?Nu$7QuBxAo<<w6OYk\ăU"fUrQ8^N&T328BowTvG?^Vh[#BylbKe[N.6kq;mO)Mkr=D_x;m4/NunN_CxPBU+YăU"ckx.gsb<L1[0ZNMQ<1B:,3jbt)::RLFm2ksXAx-2bnj$tS,X#GpT%lx=w<0a<Q/ăU"v(f%=O(TP^4[Ku,yB=x=nCrHOgiHqx/#Tq5/E?Q\a0-AwpEr.S6PP2fUvHi8'hjăU"49P>ZVRmmb6fs)JN%[=H#K[IhE7ztsGef25ZW8sjDK.q2q0qk+0v=XPfqe#>;x$ăU"ieT8Kh4_m6kSs:oDYBrK[7HDItno#D1fbEIis;$.3&E1k6&(zBR648k%$6bZ2eBăU"_Ybih]Qx>1oVxc2ZbuZ0EN[#qi>CN\iFqbx0jx?TB;jPS8ZW$w,udtxGE<r'Ji*ăU",enbi-_.#Th?)n<o[gu0h1nfiKx&:&Xjrq1ZpA<cmBCv0kr>*92tZb1o03%0FhxăU"%tPr'L5.Hh/dMX-)udu)RRH%x?MYoaxMP:JS,c]kxMk6V&>E9CSi?IBC]cXsfpoăU"X0qPlT:(D]j)$VpH'GR:wrHrJ9wbi*MsKZAxnr9gwbiM\sKZb;Nfw*%up()#9%%ăU"O#-%g/73NFx&3e9-%%%,G%%%/%#%%g8)>BV[LS5=CWfh8ZaAB:#(00+,?F+G?4păU"A?]H19f2>j6:Y8a^uTp]#M%Cq*f2[[?41a=B/mCdkgR18Tf#&iZY=^?TgY?n+JOăU"C^[Glp'H?XWpL(yYNFG]^sFg?i'q64ld$zpGHhzDuh8xwo=^pBupVxlExACvV\,ăU"hiswpZLtpt'LfUJJ0_,;RvtPt.tjL-b3N;H]EPSeGxTWwL-BCVg,H8FA&eUP#2'ăU".xg>rwu%HkIlvou58]40qdC\leG.R;v[uXopFLu(b61?(p7n*-#L$lM-\z;h,)iăU"*eufe2<8VX(oML?if%\A:heaM^bm3d)gj\M,P:qn<N^.pv0/M$(tNb2Zrsz:u^>ăU"n8OR+#1W6u_ccK>x=DaP]VxrTw6dXCY7U9EWh(*dfsaIbJN>MEg[WKE^f'Tw?p:ăU"<WFBx$0>VTs#M&jl0:DTk,3&MK,ll-%PcpSZRGZy^q:<1P=RDPea>M$%HN4,Xt;ăU"fS4?D,p2^8x\0NtU^,A'hl322tp)+\0q4iojMgn#4-_tk?itc[;m?MrxFr,^uLXăU".x>WE6+dVM5u$EuLt4ecRk*mWO^#8*-X,KDH4y58sKbt6_h8AS#(vc<g6gCIoS?ăU"nc\bD-faAHED.9P]\-v#<WsY3:39uulRZK#[e-GS$l-cY8[JRb:?X;v0>%I)iK'ăU"cN0Tj5&3>s=uZ^VL:]e.qsE#k_1A,e_V?U\,-xWKW&(DutR:sa$v&)J5vG5r0nVăU"))W+C,pu=^XBrxkKrv^NO^[NU9sVx952'hzNtH^N,]8CweXtlJigYw\iE%ubcQqăU"*wTK\=Ur8o';po4e9<xVaRWwn;mn=hp;;N=*G6frco<n2mdOj'w\6w7B(SaQ:2DăU"U%Z27nh;N2*4K7<kv1i_6vbwt:p3#9x\/S,8v=bHdWaTljxxV?46rDk1?,tNDk)ăU";g,t9:tTjhKYtRBfi-mA+<x&Et^GNdZgTCUua#p8l&ZWobG[x2s(xXyOpDL%e^jăU"QH\d<GiqLm9#.Nu.1BcG$2w0w2iQkp*Ja9n+JT4JxyL:fUtta>HB&>5FVrup\=oăU"jMnA^7^hhFNxcecnglP1ogHPOT7GxDB]TaD_,qZR\2SGxXJ+e5emv'[]F&JqJYcăU"#UsWrtO0mIHBTn]#[][dpDZW+sy9i_?]W&d/#R148GLs(f7dLZ6)fO$[xItR1sQăU"IsZm<x:HdkrV$RnEc[8jiR6ic4(fZLX+.2i]hH?UVFKzrrJcB(x.Fs>Eu8Gl8-6ăU"xmXUgl-pgJtnbTJhd0mqu\Bw5wqNCVw)nOlrjrt70H+<T[,N0lIWIam_G,oRA$;ăU"laq_rkvG=N4i<6vPkRN:,Pmc$/SHQ.DimoLs>wdsGN*;eUP79,Q1[Y(dS;+lCICăU"DymO99e)n,Pc45H81^aSY\=gbheeEu8nv7/n:nQ'$^xiP<n4-Tr*QGx+(x>k2cWăU"'#3n]Ng4^,wDcjb$)tctEbbW8XwpTI=DORu&;>xu3blT#BX>.ZhgrrtrwK$M8HlăU"w2V+HYx\J3utDBWHAC.l[Bhj<X?]ZidmbO%1t?0Tm1%#nIkwdPmxnjfx0NJhA2văU"iks#.HP*Vjhb6x;\b3]Eu_fk^ikfqpuqtNLLD22bRuXP/PPEufoTNsqnPb8m<j(ăU"xB%<SruN'_<.xe_^YwHx?k%*xNr29'usHh7:28gCtFFQln&h)9;/wSVcG%WI-:.ăU"lHp:/6CA>Z#]#_Jfw'cN$x&bwkxrNQ<x>kAo+?q8Wq4#.mYaox,[SSu2j_N;<r6ăU"_$T$VwVi,Zk,2yG]Ne'dZuW6l2=sjw&jZ((].dUSFuT,6xiV3*W8?geucW]kkNXăU"Br0$'xXox;bN:\qW<w(ctx6$7slh%pWIQr3n&h3Wv.vMU8&I+o:dfJq%M\ME>NDăU"F:<\xRocsUhr):arP.WC3l0H<X<G?xNdt2iOC]b:$JN>&%gu]I=i8*V\f2^kx=_ăU"wk9]qPlJ2n'oiKox[B3)bNZ$[n1qR<bwvs$qDu?#i[NKxp[#$B(_w8\jelbgx1OăU"q_>Vx7Djwcqmt(\Z(txMluvS8;s6]\dc8FuB$].VJlj1OH%c:;pF\hxa\r+(kJ2ăU"ZMU4rxzVM+HugBJ&/5AV*XWWD$N]vO7W]x/HV?oe1enS-u$nGLM4n[;NjoPMQj7ăU"Tlu#Uk#.naKg%+)Qab(rx5+xVf*rZg*+Ah5lkfXWT2qHRc_x:RdDrvtJq8ho6>hăU"#u8QCxj.r<p&N^,AQST4GWxbqHeP:uoovtpx45xVNbkxClou<7x_wk4:t;>V^X[ăU"pP[D6<lM$seKos?7x5tA8Y7u.=EdYGGoG?KlvF6b^[h(\qBS4]kQHFpTA2QD(mVăU"36\#0=R_eT?kapD[b.RQ)*B],iajE<aZxCW3\<]*ipG>XSsA?'au+j]HhfqItFkăU"w(ayU3w8Z.xKJM>*jLqH^N?GrSMhD'z]XzhtmnRYZuToSXNfdf\XrR>ptQotsxrăU"V-P/1AKXBWpnf_WtIvC<6N2xs#,BtJNmPN:\.0#T36xzpk&w\3MLDC<'A<L*8fSăU"d?7xxA/+H<d<.JiDUcneGZs_OGsLc8lix>jx=Ynr49^1KQW0]p<Hix]aT'Thd?AăU"tDU<6#hdu<wb4Qlx8yu\PxZjOXT$SN\x^^TLmx9xKbd%up()#9%%OR-%B\dOMH$ăU"2BhR-%%%,G%%%.%#%%q82=4BSh5=CV/hdWIo#:?DYrOWk;(e*vjU:1hBREA=Vs:ăU"=o_*SG^KGA;/A;,/iJp^^V51--A.M9fnSpeBT0C*ZIIS5]l&';rXHUF2Z/';#?qăU"]B(8lpNzcT8X0JK78ayramgckyc&hrp-6cYixWKTX=lju7bCPWE%1a;:N0:6'(8ăU"nCyHOFRTH4z$7HnTUYJpDW3B4M=$8%lb&fMMGGoQ2E3;4<O.',IUA&B$V];VLO\ăU"#vd4\LTCS&rfmD-K?gg<l1alq+8Ub(s0l,JlDXIis[t)e-h[7aIB8L8]#Gb%&8\ăU"QQ##7:k)H6j_:>Eo$n^vZ*Whi\6nrw#lf(E_<jjYqN77HpI2Hwt^o0nMFjecK)dăU"F4fECIG:ry\?TirtK;*]eR;2VuAc<LoHj.t_mke2:wTC?K.Tm9wvblux-:Aap=ZăU"RlHo9f07Lkt]vZWVA8Zo\GQ9G(Y<z<me/Iq8UU]#dW8Bp0(W2^2,QEr4;0#\+t.ăU"r5*oI-UBlMmo?M*A$Tue(X*(D3GxTLGH+;Xxk$\9#Gk\QIW/G_]kQpa#T1c\gLwăU"4DuTOc[DD5I]nW.s%uXBs\&e;Xv#]A^zv0==$H==,o#RQrE.P?]PXNAMl<OJX5.ăU"dVZ:qrwsZx^(5#qrp*u#j2oA57'rMx?BXvsOO/+]j$'k^3p,da*^H'Burr[huchăU"<Ifl*76)6=E43ie,7YMAjWb%o?kj]reeBt);?2'Jiwe6^IBumCBJK\-S?CqzsH7ăU"CxH68M8l-;%_,ih]4Tx(^)CN;Z'Rk[_(K]5.s.\tNh,7XrC+''nHt;<)*Zzl)EdăU"Gur=k6Yx2H(sTJ5YJ;FmFh;[eNuvXRBq#Tx1c:x9HkjuVaE,/;L[n4Jx+18;wAXăU"tR7SFnI#SqHlrVNwPxcS<MEKdDjN_jFUKs6v#jnN*u>9x,)LojrZ84tOz/2Nvl:ăEND SUBăSUB V2ăU"DJ,giAcwJudqb7bF1$CIoBm?B>e9;1b46lkhHo.kmT_r4ESh^wf5LxjZ(H8j0r4ăU"QdPF#fgPLG:t$GQ8^J.RFE'k.J>l0[NCWu0Y>G*uj^GDw^DsVOw3lq$_Gjn]s+ZăU":#?dlr[Di;Z:lgX4+HQTx<-WYhGvn5RjJ]M=gNPu'^uxt_o^_fxF<ZqF7\rX<-xăU"'crxN%QE/ots&?I<ZAcu235<WL-pA\HEjSXQNif(25(Zne\)\SJM)SIJLMB8QXQăU"JEqY3Cp;B*j/NbaQV^9honIT2-u2TM;xhP7/ilrxu-/t>N<=HL_fYR:R+^d[.nuăU"=8K7f:cFBvaki_-Xws8:or6_.9PE:H]-DZq=tiuK-5g$u<1X\$cmU0u<,\uRWn3ăU"NVfUa(kox;uK[52AxY.Oq*9l%8hGkXYn7g7#dPUwm_-xXq>fxHGXO6_[''$A<2aăU"H?EZmd/u0aVC&-B-0NtSv-n5U:nfjo(N4iO<v6_aiqtAVNx\aX=ZrZGlov>j5qZăU".f]aSj_c%KS>N%/H)41zs#tNZeD/s$7Tt3rZYf2eD2fShysMs.#*51hG8./[6ZdăU"Fjm<#yRt+UGcH_R'fb<xmx;uqDp^ggxfuu^vtm:Rr$Aq>G%KaYr#^*8w5DGFi<LăU"ipd.2ug+aRb$q9wXSj^Pus7ix=,\u2qGvpx9d:wwotM%^jAxn\pBvCx+g$)>>biăU"X,;$Q7Tp9JsfA1],Le\LtxRduxn^uzpW]BmG^$8sJAb)3Dqk*/nLtA_5gkxvGwuăU"'h2SFtGCk6Wh8plhph?<Sax)cu$RwapoT+ZQ98O=c^gS8sBIcp<7dv)Ntb$<xN=ăU">VBUK.Ch*<IH/_#GQ8lKF\EqLcU#]8>N\%OHo>KduuVs7I7]Lu/229zgH#x(7uVăU"rx%$;NtvuX#xdV+V%9rw><capq4Fm<RxXH#%MiBaV+W;DJw.uW_v8N]nzvo3z\văU"c98<qTD\-KeVjPxP+r6:WrZ0&crh\q\6I$$kdD]83,S(,Zxl9N4CqNhn8WkXFX(ăU"g&t,wh[98ipTo<?MHX&K4^Tucw^dzXtxRprZn4NxK2ixM4wVNduiVxkxT>sLB(?ăU"^8;_lw0Wxt=vh7ACi#JnGGjx4.[N6UQx97Ya98[WxV]n=ZqtTUP$ez=5\#:Ew=AăU"]c8\Mu]>'x'SjXf4aBxyfQ?l^c<xau4=Pul2*uls<aBuj'bBCwkK8t8Ac%iHla,ăU"l[mTM:x^:(ND:rI4qPl\x5wl/>.KlTst3)]N1ocwtt_s%jxEfu>tw-tx_kXzItbăU"cI7-4mJN$c%x7dY8MLa)F^^?*sGe*kn^Odxpc9]Z]tTF*XKxtPbNE72]COPs:^năU"HhFpZd=riF8G\Mi?H38/HCuq$&q<8]x^2&vZ/JN<.Bi'S]FFBvS=cs82uWtfiNbăU"*rW7OAxsboxBkdroNRxU>?pqQuwjO9l&s=,Svd<^d%Bt#dc/NkU0j)$xBmw1l[&ăU"7D,E=.?p2O[Y3][frQzXxt(bwHa)3R;1_JU$;Z(Ag\idW'HrvDfkueHC33eJ(+băU"Vd?e:yfkU69=sddhJ0$x2]cUN*4+>.x$ANl<'l*NFq>?\&gn\X2s2$wn+wk%Ps0ăU"Y)Xx]YYR9NZSZxrr)Aa_Y><PX<D6s$10JNgrre'XbU_Ot]8,2;>&RxdaVHPvKe/ăU"DrfOsKKQ+t-:a4rOx;1c&4g[9rPuswpB0l\Pl0r2/?lu4b$TXqN,M^-\8jtr<(uăU"bj#rfxt*KorJqPchH[UZ&0)v_t.*vtfwx5Hr0xd)N,sTrFs,8Z$:xV>$UqkZ.VbăU"lUklNthI)f'uSs>r/N$4:it,<i_anSx:D-sclvx(K'x%up%()9%(%O-%(?PSNk+ăU"1#M't&%%&/(%%%1%%%Cr:g8)>BV[LS10BM4a*>BSe9S<X$q4nra=I:=3LeJzoLOăU"]OIs=)t/jz?X/o&J>V-:nF2[XQp%pQRO;k<$_KX4<?j6snsWZasp4^j4TBtfPtNăU"%Z7bw.L;Rr-^[3xzSG^v5qTEE&PIv*py)Dt1fSeM]U0(+%F'NIQVQE_S\>3XVI>ăU"-%<v\N_tg<sW6(J0ld48_#vx5j_i/(kly23<Sr8'd/oXEA?6jrDAT828(yHS]ohăU"[,jvV6^ku-tVp^Xc)YivrdsSCO%pzk>J+B$4;i[Z7.#3/yPuAcmA<mutQDP'MQlăU"V\&79aH5P-Me;#(ujU((8Hz*bB'$nEiN2jQ\g)+d:mp00z48V$ycsT^[0ck#BiPăU"9e_9Z*Y<bFU8J*<Q;qx(OSDm*_w4M,^[qSeeT0oP<<i8wYaPS;%I:q2aDjGC,)aăU"8+mf5)0-VsCrN\HQ#<h&l9ZHY74\6UA+YNM>GO2Orvt7^mbD1T=.I6E(O+bf;LSăU"0ktt-Nu_A9Z(d4E1NCl[J\uu[#-Tw^k?N*q^oDcl$dJgqRDm=4ThnDkV\zY;]X-ăU"pS0Rba$n4968ESJ4=M3h=-h</[8USi/p_j_J<HsV__njb2_CG#(rquLE=,'eJb4ăU"+C8Xjxv#5L$,Kqz*(H5*]EIlu=v:.R\?V6fO.u%p()9.%%O-d%K>w(MHW^%<n-%ăU"%%,G%%%0%%I%y78)2:VWLS5=CWfh8Zc^O:#CT5Rv45<s.%G$qE^zY9;+.dl5;-2ăU"u,01nboKE+4ZslQc^sf=,,*>%Nwj*5t:<Feg2A1'GT&'wR(&h1xr.?8u?n>VJ]tăU"J7$U8zP6\W,^.FV(aUZimszt<lKG^opmhXhJNAG6vqJSiG>^gOY8RkXiPh[GmWgăU"j;3Cp[udVSIZLxlj2fl*Fj4bY#r7*34Kg8+N:/a2$i;DP42kHkohmF#Eq?l4?u6ăU"'-dh-Di2YCd3ZV\tXFW8Cx?U>Ab9$oE,R*j_It\+];Z2(+6k9B$-Sc%W:DPBu5KăU"Sml\6tE8fEWx/64bp$P09\_pX&F4J2is(QxHXV&m:Q$lnEtBal_2<3$5arDJ1TfăU"fr)-1NZMx3NIl^Az>8YW$g,8GLR3+[L0'$Bat:rA#v*HR9cnAtUh_'rf4T]*u^OăU"\knrPtOw_IbJ8H?>nHl?\$5turMd9UN]S36O+<r;,am*uQG*;nQJCxbVYToVnp^ăU"mK4IN$fGJAg=+td(Wx6g_Euj.$a>#7Frh#VlAImZJu2=AHZj%#>VZ2XlMp&$Bh\ăU"6I%SGT21LbV2=pwbNfNR#YaX)$R7.;x.FBUCu1(*%O;0Lv=O/nA29q+Voki7dYgăU"H0GX$-2XknUkn1/2.1HZM6#9i=XQxSSBBq6,:u<8<oAuAJa>vP-8wSHe,cTU;U)ăU"wQj_jXF)K=y7W%#)N/0x?DZ1;h.lU4c##budv1I]wHZWxDYGlt.HaOxCub*U\]&ăU".j_Ukve))_87v&KFHpda-Z>.5IGBjRrtj**3Nf0;)eA6Bl<;nVqemc5i6uKr(auăU"D*)A<ILUe057ZO,=$njSaUy4=Ihe88#mLZ#vN.J9-:Gv.DWL*E#9p5^,uAR=w,6ăU"E4HlwNSx^VmtrY6a,6>E-IGr[.Y0Z?%=uM]xF42_#=PELC%Mk4=.SnuHw.0tLMpăU"8kPp>tCc(];.g>Dl2XBNKCdtl^0(Bl;2+x2htqR;o8-\7_T%pi[muK32$?=>.>păU">RVt%:FUycR06=8F<j6x.R<3soH7k>bMU'$4F7hY+RNx,[GHLwWrF94vxh9?8uMăU"VC5ITkJ.vt)Tx$$E^(xqI\8Ij>l>VFtFSysUd*xA>V$l5$Gy3C[%jmWY]r>?hJ=ăU"kpWZt7PQ6ZMO.xB+MNWa]c7gCCZ5vX]9qpfKuqkK5tpa(kW8QG7Lo[6Q:?2wWB3ăU"avZ;=?UlY=%wkZut9.>Gc3i89N?]+2uJKY$V%um<;&U5pnMrAj]khNu-ikFIpf]ăU"Z[*=Mhee:Dq9z;dO%vC%ESTc9cA^>$E3s:Cj=\QtIi3J&_^$fcUl$v:cDHvh5]băU"EVcZ8iRkJQF8nP)X<0j2Is]EW31qb-H8huk9CZDtBPuxPmX;(sx.T%jrNj+C9xMăU"zWN=uohpxHTmhfXHt(x=rCx,sMhOeLdTc3Ym+DYRLn2b2JJc=3^SB<TwGxU8;I[ăU"QuJk=OpzBf+Vu6Uv53xH5rqZ/-Cae=4Z:.B),JLBNn:^4ONcD7l[fpA.awCxD2-ăU"E(EqEn--YCYxc3lj2RONdD[LoC,.++v7Rs=eXlOtIrG6=?w49uxGX,^uz0Pl3o4ăU"TU4mV<q.rD4j=z2Wu&%xQwTvQpA%:xiPu,W9x0&,9g\I?b\xJKk$V-5o;J^Xt2xăU"hB\.w4wP4Y.#ate^gFXOs?Gv7e2P/NiSuutAwXtEwTo8m2.dMa\qb:5Z5khN;X2ăU"pnkA5SxaH>Jw[dYc8->mH^/OQKTL2YJf9N:.)V?ox8kP?QOldJPa:c=d:q?dJBpăU"&u0x$O?,Sx*Fba/tpdQm(ie+rmW'(7m;dxsKpd:X?TR/3:'q<kkt9^mXezv;aaGăU"wXe;S-,I9w8tdeVS3Zuvx/tIHJk*i5xLh=+txXn6W5rfa^v-%pmIJoxaiHEFEsQăU"Zxp*Z<=(l5N#cKms)w.>M+JPNP6uj:rrfmDj(xK;T8FR]q&in2Qi3^H?'l8-uu4ăU"9xUN6L_GNB\Wsro(tKxB]lFrW&stF8ldh(h]f>.fwOW%o6UnN;J'Qa8v8,4$:^QăU"?hN1N$vW7SKD;Ns>uxsfpDHxtJ=qHbNxNf4Ql7K3uVD]c?FcwX#qDl-$(AjGM+(ăU"X&6didR$\kn4tqvHrw4=x9i+wWow&O7HGx1LMk#cP_N:CtFF?dU[[9#pixVP8tGăU"Yfq?dw8BixI\8qsvmX3LgGZo2D7xq89Uo;xmU\)k6h>NB;C>$FHZ=cxsz=68xdkăU"r3Zm1qSViu_6GLM)zk?Z*i&T]ci(Kuh*I#N8n[e%D]Jt6n3,3jiw.<]dT???i6FăU"l8N=;^/c$>IwiPEDYhn<0xkDm554BxAHux#Y89wbijuu8f0G'Rb5m=joP>Lg(^DăU"2<lM$seKsZc8xki4.?XS)g/LkW,:U;8K8pnI*8xT5:7.XRQlQ7bpV'kLD(\uZSsăU"Q^h\>TrDKmt&^kg0u/Oe\U%LLes>mg0r)mS?h'?^(3fjchRD0G;46qzBYsQ#vchăU"xo>lV9N*H?82.3?Ijx+6jT]e-<5f0POH:f]HchuStTMg(KFuq.,Soa$ou0a?fsLăU"-oBilZ(8TcbUODU[uP0ns+tpB9lD?#\Eh\ZqN,hCVNi[>QhBW8V1ir1k(7Hu_F-ăU"UTg]D*iaDXd1uZg^.cjvExZ:w8:cwdN_LdmvnNFA2N]xbnPV&[wlWSnMH?g7v-NăU"Tv&66xdx.Y.x#ztK,er8NP6sitNhm%Dup(%)9%%&O-%EAqSNAW3*<q%=%%j&A%%ăU"0#%%%ELk>=CCj3S1;0B^b<dA[]Yfx4yBXfhD:t/[ung$Rgeh4Wb(Ube+laT&tE#ăU"O-m:=j.rO7W95V-6X3VN;&]=IT+RL#bsJ?0odoARRBlMj]sr\r0L(M.loc;NnI%ăU"-RAgC-KI7>K]#p)\(JJA'XJ[rp#<*6^Z#>FiOUZAqn]/3K\FJTog,/^>p66hj4/ăU"D[Pp.M^V$Z*T3_G4$R=:BZb0VGVaJQ1hB=j;MCMlH>/\6-?YmfuOK30>v5j_-FSăU"x)tR1sW'18D22[jj8De]2c\pIF*Y^SbvIKE$pF)?a9=AjHV#jC7H[)<%Dd;CxACăU"M'mg>Eq4=UWG1PHg^]gtodARE'V6>IYl514mDd?e?4HDMej#v][$To,<J*Xeh(IăU"OA(M*eVl>d79ek6d/HfT8]FfN>MUGi3*oLy%[;&ZmiUP'0SH-q7h;0?pQ5IE2Z3ăU"R%cY%269-5SUATs/tD[Jk09-JI<GPr.T-05H;PSiET^cj1=hG*?+cO7s^?fS=h3ăU"\5tPgiW=R,cC'RCcl'<:JjmmW>&1q2#lF5T;b%;5%%h2GWUH.6XfN%5Eo6p&Mp(ăU"]&-glHRrf-GlegSe/e$B;3Ms>[?8NmqQ8[f_[pa*Yt':#daVX2sgK5:=Qf&u-)OăU"0q*;2$HAnA)D8Bx.EUl6u9GCO+h0Hx4P:;S8\'=&%oG^#AA,]=*;4QpCZcb:EfgăU"-o6Elg+D6;5>?U#j5cHJM[Fhm0*8Mox6>A838RXP%hOkiVBoL[SYF)E*4^ZoGkOăU"JPXCxn*S3Se(SzE[>fV:K'lAuos+FO4$#,>NQ+qqVz>C-liw^2ml2B;M-H0>^o[ăU"i-D[Q+]:r?V]<oA0%Ck,*xMD>\utGdZFIA$w)JxyO*_<r#_+^CI'D?ndNdclGd/ăU"e#d2i7DHk$d&<SJ/]ipcgRdR5*xy$uJIY\Awd#]=law78Rr6jCj7e,Z#Jp>2ZtaăU"1MA7<FBW#yKu5*V0s/S,(p>MmWLMw>jr]4G7YIs[]FaR$Vo5q66>XBpf<u&QG2;ăU"?KN6IL^b9M(<fW>'cTSrdmEMm6*SRh:qR,^#Oau:#Ei[qq5Xj]QDjlk&sqH9J\'ăU"_%)'tlR)eoIh+xmKg-^LnL0NuLKU8o=TjIooA'B\)lfmD_)UQJQt6VYN]:3r'g9ăU"2l4XfR[IvmUR/>Ft$EsyEQn>75?pu+Rs9+$6sYo7O\pIBPI0=S\Jbe$1&SdB0$lăU"WGZdb_;sPko;'G%-d11gXXL5$>eY\*pliPO85CCnQAcCr)=\]Gvsbe(Gjf#n^L+ăU"Z:WVZDH)n%&6H1LNJCuF[Lb_V/.m(sG%D%1?4H&m0QeZTV)f>H/kX;[hH*l[tlFăU"5MN1D^uX1YBE=06l6OA$i\,JGC\(T+4;)0'pA-g5:*i#wzuNK&$&U<d$0_PJLeUăU"-P,Dndg#7EQ7W77hQ>6t[Rf,'avp0v(1i'p]fnxt-KM0^eU#(c8CM>EdrBgsN&jăU"Sl<C/.i8y[3emERfAPVP7I3Rl7<7E$>>KaEaz:^]fqsbVT2K*A5WH/TS%##2*xEăU"FaY*Y<Clp7?1d;09)O-j-fi3lLd16s6HchpA%$j:ywZ=3e\=;(P7[k\[1aN7McaăU"4P.8Q-a/WsG,-_D]TVUU>Hm>?KqPT6=6745)u';O*U<G2B:U)R3GbmJ(fizFwHsăU"NjFKOj9vg'K,[1lLX<B?k\$GR03E?*^bU0-%VGQ#5+rPp-JYWOVHUSuyaRBSwO,ăU">4I]UH&3w8FNv;KR3+ivDDcSH0&5/DR4NTs&4,ozOxS<t0Lw)9;u%^U/L'.vg+,ăU"tSdu%6<_N<O&1+VxynP,kR\wMO>0RENRGtL48<.i9CCT*v)]v5z&?[<mNe[oBTDăU"k<E)F0jY8=;Z2soKZYc)qpy+Ie_Ox3Mx5M%p%nC\'/N[<dV5'bd7t;2vz%nC/V.ăU"xJ:e]32#gYA8uf,?>iK2uBs<ot+7(Tu7mrb\,OlfxJx\dPa;c5i1ydI(Bwy2C#-ăU"].3>.Y2nH>huX4_7[BCGrEJeVny-#,yp,pmp;sDG7_0u.Vp^g??L/tL2Y.IBUxSăU"?eNBD/VF1[F+M'*e/g\/KKEQFnpEAw's:1oH-('Z[4BQ.7vvQl]6(tf&yg,3#*:ăU"MC-ZnP[(_zi3Gs/mE8P3eUTlYjuhooYxL<EGtQP(u&qiElsKNijM?5OIm'tW(SjăU"'xap-P\.WrIJ]p[cQ:wn\dGIV^f.M%pfkW9.haB&n/q%=[a$.%HcdvKH;U(L=40ăU"_:rG.J_U7]i=8Iew^#TY(8UHFl%w_PW%QJ*61NIRI%=_j9+97N]^_r.mf4iDSRpăU"R>O:ItMk)q[4'_4z^D1IS7pN2phq8wn[6g6b/E37w+Z(3)0Zf([s_Rjlizkxo3VăU"-D93pG&BL,O7e/,DRktwZeojD$VM.NS^SI?^E<o:.Qt;ni5'ika*Zj..'-R2N1]ăU"2W7.KZLAknoiJEtFs5bAk+PDQgmFuv,;ohmDA)0ul=ssIxr7_pb%(.Y_l+zpv*FăU".9kbiYzvoVYVDy1z(B6If#x4-^&X+qer)I_I)cJnsZBSb$SaI;_'YG#AIFSk52UăU"0&V>A1keFIAZ#$g_^3D<V4m\]IClA%20X[t(;>;iJG/JaVJc?]=2YC7R4jl=XHkăU"_>H]<&ft,]Gh-.b*xJM9%ceC(YtO<XYYzR33]>5tYB6Z5?:P_rH7U+<7R6G-iNkăU"rMkTMhkHg<:AqinXwx\l0pT4%#d(X0E.nnzIb%1dIR(iV4e%Y8FexLySgr'8RLYăU"gFe6?C.tkHwqe9aP')VF[\%8-V<uwulHu8wsduh8xw<H6vH#--?QB%EwR^syC$5ăU"vO[U#e$aWFp9o'=fAk,^+]O:<rNL5Vw0Vm7<gvUb/:6]Z9iq.nM&7M[yS<w:RylăU"U:U&a2Q#LEH(Ui:I\mo/5*S[:--4]hJ-=9qNu:vK/5?ZOqY*V=mAVJwt:tW+L[kăU"&^V7Q?-(1r>;'A+ZL+RR0Gnb%^u=J0$P%k0auZICWeSPA>aKJlOx.BWjeGIY7Q4ăU"TV*#6HR%a)fR$:r+hZAk/8N4SjHhu>UcJSnJ7)2V7l[<NJ>5gf/C-V;(?G)w;+;ăU"YnIJYlD,6<cL:snJZU0&n8o-OiU5we0sNEPj7QLRGq(*pjV2vJPQYaMTJ9Q:LFnăU"c-b4'N/$Q8a=9vBP6=loGK<Jj,mbX6#r]4SJ$rOCbsTf(UzskES75&g#oxoF&6lăU"n938kud9Me11j]&P5fYpE+\,nA(Iv/sU+U\I'AX[=Yh/7SR:z3%j4jK/2;k3T*JăU"GH?\W?4N.I5M8UXyj>8iT<N[W9G?sz*i\;4P5vKiwC?76#V.C?)p2p&:Lsi6=gsăU"TUU:*k_caSSpExJE7%ExPf7=in0y/EdxFK4hq)1e37Tl4Ts+LDVEf&ElHp;>V'[ăU"k=ret*SlL^=Wdss/:5j'9T'bs.8r<A2ZH:kXvQOh-,2p=>_c7s]LY'lY<*;>-/>ăU"6<x3*ci#r;qxrFP<S''+5uvfrt/q_Vz*wyWB8)3SA?'f2kYZJ&04U115.[hJ<#>ăU"7j,sjo3n\nB/C+Cj#TED5R3,%'WxAkuA'N6Q,TX/Vk*^?[k_=2u#/GjMC+.6If/ăU"YOpAx^nz&4_n-/lYi9Q_(^30wB9d5drSxhnVHkYgBxtq[N8FV&pFz6F]7Hk4J/VăU"_1Y%?SP&ot=)3B7Cm<uXiICuV5o,g_[X)$v/.5;s=$Vgmb'ogh]une;BWg=gIofăU"x/Pt.'&Ou.uo\Ijf.^+nL;EsFKa\91n,Q;)CiI';NH%b8xRAUnzjU1dSws/1uNfăU"nq+nd]SWV4('9j2c]>,TAiNWhpy%25SNUM3[[=?ZD9L[EZPNVao)YZ,rLOn*cZ3ăU"%3EMUu?DBUU3_'6:M&<Qo)lE79G;t4NI'rG6f?R:.2$e_0)iZ#/k6)gKFDiz0CRăU"R*$'uY;v;1y\Gsgt];\ux6M%6aK_c5]Imq?yIm9Kk1=7DfFoZc^<G7[kL$&20:9ăU"TF;S#Vix-1&uwxzS5Qn)r$_*U6Q'kJ'8k.WewxQcf)*O6EMh.CP)#iOYQwYLq1RăU"N39Sm\$5U]5a4AFw2Px53X)He,0)V0rE\._P?Qal'BjqvXWsb+/k.Y_dA/3IeESăU"z*L>;V(34ru7Tv4oYZjL8lpAJr)b]gK[Gn\ckGwTd>W\?g:Wdf22tO[z2gK=e3=ăU"l:t7P6>;;DN1wza3[O0^h+$kx5(HS^.*M]7&%[KAn,oWco%l^O$1ko(d>U9jzHIăU"'ARcxq?amAz>#M&OIs&dCKE?nmEw%)x[;oc+?;*)H$.b)o4r#-L0_k42fXq5/D9ăU"g;l5CAuxchWlS8z=c<X23;.xcq>Sbl#ykxlBZM*x4huC7.Z.X9=trbiBcWGA=<săU"bi%?7GNZGnLX#YJisMmFex=oV,M'G9<RC2zY5jE,;2fT8#-dIKkVT%Jv)8ek:#JăU"Y5c(&C[jn)&L9ji2P6LK%bfuZMW,8UoU5r>7CFdMju3hf]MirN$p0rU_OkgTroQăU"y\sm4ooj^?%:qD=+XRjv94a7Xiat^$Qrvwb&P*gM04Ai/$t,LqjE+%x7X[tmB\răU"pUhJL)[odtNWRcs$G[N=yVWr>R8JS29eS%%bivqYr'^_$Q9mPHhL01n^;/=oLsaăU"J<Ts,,KBuOoQtCw;xG%_5'JGi+d<k9]a]DJ.$wWcTgnc-W^^h/RH4f_dhOMYRdzăU"X;/pOy90nM<l'[plQ&xC-kE=wirY:bt*hzd))38DYr-5i59K\0\X,l'?QAKE0QUăU"p?3>5z<$fL#Lq?7PwiakDx:A%.0sV<%<a6oSrkM0b-<EUY:Y5+iYFy0DsS:KNkZăU">]ER)M;)Xfi>t=kG&.8#F&<W>tbgT?e:']Pl1e&)>[vIfd,M;Wntq_;a;y;vYB3ăU"aaR2R]?3<ob16LfPtu\R,%DJT-y+6#wqj&3L%0PXn,#0$;,[,]B#$+]>:Q-R:H=ăU"XkIEHOFSqL,,LKRA'aX_[K1$.SIL)E1f4T9)[MbkIl=0JYC=FQQ_j7Gm*JF*[7/ăU"kV[Jw7S5:%3zn)Wgose4Nh5#%;rn-[_7b_+HuI5P)f1;\JF\sMi0_24#+4JLgw_ăU"RU5NeyauFLxN\ui_W?$qZ;tjZHo:WR[4eX^F;CZ/R=E$a?;K5fAHL%^d\*;0b'căU"T[MiHd-b4HJk0h.<u)p(B[%jW)JldYNtsE)V6,Tj;,:aLy=q?hpStLc3J'7F[)uăU";[_A9REyYcifo-VsL&&bB'XN#i)0g+(vg8BL*>VlJ:ti,1lS2<vd1%0,,[g(f(MăU".kC4i>y1l_ZhskJf/1j[#u,'o[xyQkj*Tnq3?4_m,m>iyG2,EH4Yv(I0[91s8KaăU"w:EJ$?j&7iOP.f694Ik8(%JS4$5?M/K\.bjfWo,A0C&BB\]slqx#/B0]#8NTHRVăU"%#Z1*(KwG;h_?9%Ky[ysXvHG)oTc_[bS3k#)c0z29wa;nPRu7IX;F64bLuBTPdjăU"Ei6F+m..dq0PL^p.G\F4whq%:nsk,Ng]uw]IVlSQphyn]6SI%4)Axc,Lfv5I.ovăU"AmFjha:n3$o&4E[>az,9NKQ/\m8-[SCJM/;Nwf2*Dz(5=b>*DMUctgrYJ3pIj07ăU"3Bmc))rHgnC,2ex7Rbe1gIJM7:16%8]A8es)U:;N^_XlB8RC$akNFn#%HDTBE%MăU"wLmo'O*9gY7Lr__)ZbeH)K,weTA_YKKTsgdE<opV*F(8I4v8G4O+i'6PlF,eSymăU"W0dJV:maRO(4)<h68'3hV,M>%-TquWj<<mt\/]:Dr6r7Kb^L?'QRw0hI^^D7THjăU"n64mT%m8a:fFI>7)KdQnA#j\If9J5'4qR<3mJ=QB^Zer60rhOLvI(&oQl>'(jqRăU"mZ&+Mew93GU?J7oVU^YLK#e6#Ru1d=P3Zo>'4'ZgeD0(Uaj_WH9N%',:X7Jm\t&ăU"1sLu\GDv$Q2RE?b4v[AGmgA+LAEKTEDuN>fcdb344sDE2O-q?E+CZC8aom9.1-hăU"1(_u:qPiIAz7Qt.VbLzocO^%'H<?6O:n/p#m:p5iW>I*z4*%]9$i_)^.F%4/WSgăU"yuJoK=*5y-(qke&^B/oG_Cd+gFI#U3UUG<QfSDZn-8?g*qQ#Zp-Em#m3[,Tdy7IăU"8hh[2.;hR^y5BZ*x^3#a/0P/:yhu<>Di^AG5l&8Eu6BBd[)1Eu734*N8j5V*(0?ăU";KG't<gSl3LMjqIGj?%\Pg)5]?c9&Q.[yGXqNR^qgOMZ%Zbu0*uGhk;L,fBO7$oăU"$S4^JB40+dBKP7o,q9LzR_D-=,uS1::D0]R&y2Uw+8%C=HVhnqh(1L#+>H[p.v#ăU"%J\P&.2fcFAuH1h0aH%$E(hL(af.AI:TmpWQ>nhj,wK+Y:Ht9,j+LYjHyu,r;3lăU"&_xIQOlWUU%<s8g/Jrq^.#NR8EeoQ^2QI_*b_Ott<dkApw]G_a#pRXo7Projb#FăU"aaM7h8TiB3PuhJc8[tHt-ZbhJSgJp*J^Z0Se_2=[=c+YJKND8hf<qObj3372$j=ăU"2*1hZF]64,1g]91MPR7lK26(D#a63W:K$OfAniG#UbIjT\$lD^wLN7;QXIGkoy.ăU"ZKP#TY\)7'^HI%Te$N(&o/vmXZBM<*-inhJm.?7?&j#4M-/JtM$&--W7DT.y&F[ăU"kTY/K)1FxVLJ?3*?5V>>J5'Y#W0?kl*r-nT]2H(ja-kDjT'LIT9q8p*qi^W61t<ăU"l7N8*-9zNr&)nRH-S.)Qn/c%Q6v;))KaK7k:Ot=5in68/zJ:1Ho7pW9.PHKKOq%ăU"(Cl=Cl*$j,YEiSVy\A0vNA2qIM$\Va3--i(<:Qc,[t=P)C5$1xARgQm3CY*rqX\ăU"&L*i88cd=)C:f_8EX3,6,5%72NfAEPEu$83cIPoArT7Ih_ibX)PT<(2I*aN6fkoăU"8;d/.R[?Hpk6TD8u5$h/0jC[*%&J45D4Q-e0d>Z$>W/9JuZucGl2fHo>u=;rZjtăU"(T6d(R3*va0shRj1pXrPJb(\/1,Ug^#%/#^Yw#kI^t#-$vda6>12%8omB[0f3WLăU"e8gk*Aad;^nfsvhz(8u,TdREknUs#71/gqj*d?esBU%Gr<Px*SRPXF:S-fq%*>SăU"AT&\5._1DHW(]mcGPV0\65[G?.MTL^l2:EneCJ')3BjcVw.hPiEm-I]+moq]<GgăU"33c4t/KFaAw:Pn1S?$9ast?Gm+dvWZ,m#dY#-*DkFdrRgfm\kuSdOMnpMFJyvW7ăU"t<J]a?JtaEhLT&uJv's%':jt\i)WMqXh[ILGG_iyYW5#3T+j4]AZ[.N[+Fp/MFqăU"Nd>.AMxFj#-h1K$)PdnUnI]v%NdD(/l8*ayR^L_Fp>CJz5;+*YbZi-r8.;4sI.RăU"Ydcyn6z>teKz$P:S^+rFviP<7U06u&)uW#p$u;,RQ$v_]c\8M(a-o,/YqUD+S<WăU"gD4l.3:X_q/+Kmt.i?>wLI(2[DO>LGf_#PremBUJ%JYE?QIw3&i$(^16V5xlj))ăU"-q507eKiG^rT4P72VxXnU_UheZlQn\8wn_sq$;1SvW^aM-/\;x6cFH<x56?[KWmăEND SUBăSUB V3ăU"oEc-rhBxq+;X[\i1Y:hfsH%]Ur=wikJNL,:b^Q_[aBWp.a0Z+ingoa$'pUv)m04ăU"LW96,8bKPMcBTQ7fa)Lnoa9/LrAgl(A_nl-X'$:mkEUY>Tt1s>E8fw[)CuRWbMtăU"g3Y[\E1_pHZl7-cR7&,)(dU&C7H^fDkr5\Qs,=G8C,ab/Ea2fYNW:BF'(OH%zOpăU"dWbh3DF<u;eS<Sbqf3g6:r:ST;44;%%UC%Y,1Rj&f1aP8]_Dn(V51GF+5SLrw>CăU"w^ls#;^r/2Gx.'w]$WMz\#f+KBVjE\Q*Fo(s-RZ#BA^nfI$1nU0..&BQ;VjV*DDăU"kMZ\hu1*IOPG=uznoB6v%vED4Il5mb$8P:G51j50+5:)[*+<_cMX\['ILh:XmDvăU">X9:Hx:7_F/ClKkn+4'uU5rW^h.N7^o$FP*l>XWMrE%K#'db;tu17$mwpLlP=aRăU"<UK;0Qo*7rssWN31JP]++xCkp&a.?Z.F\%jPV)eNbU;7Sl#VBtNB73OT^Feh]5BăU"Sivs4))xoGAF;r.xUR'7x8uXnd%up()#9%%O#-%AbJLM<C*CoV-%%%,G%%%0%#%ăU"%fAM038=J0S5=PCfgN5;UD>Q#X:>Bf^\I#yX,gK\EshsqD221D]5AOO%2h&:'meăU"0:#W5kl_SFSH(S*F=jk07^7AkB+R2#dnHN)QAI8c$MC/[I)Y/3R=WBck%$EwS']ăU"DHl$dH7rX:hSSpIur*_mtctnh$#llr#HutrNwc,0EbW;wW,/8zZGM9&j&]dlYT5ăU"J,x[9Po&THfE,KM$?&jihwdAFYwXdt%o.sOc4v%QS5<07J7's9Fk;$t95&ZuS4văU"vcxdjc)vKoV(RomzT(BsUQGP4I7zHAM)x\?u[4P0a+LNm^12x&.M<&iM&Q_j6M4ăU"cq5s]8=GkapvA#k.:(4N+5A8HBL/7bpt#9S1lf+R*wPLJ-drXKuoor?wB);nqFrăU"DJ4o6;qS?#H?Hq*KHGZ#;)JTD,G#.oY\w'^]4YO3IvpDnPmIFhrTw\etxc(s0-;ăU":bpw+'+c'OQ]5g[&ng$h(&=SV(fZoW%H?Mt.#p.nHcG0cMFu7'pqRRj6x=$rw?răU"%M',/7\x4fw^7i25Ij>TxyHr6n[s(isj-iNKurkiP^]xG_w=Kp8o*#_<2cXp3=XăU"\p\=\.LL$H^gH+4HX[%dWbea;i.TO]SM;sf5N.VMaR\Ia.,SEPFWw4_r+OItv4/ăU"7=9a*&6#4Qb:vfh,a08l[cheJw-&KF$f\JUNHnB*_A1KXl\T6pmx6uxW)(NxWNaăU"oj-ttlm^UrlXjJdS89etrdC23TnzP]OPc%ffbH]xjxSv(?i&a&T6)7U0x%4bDD$ăU"SP2B<72qZ8\A]0jPJ5PnIAOi4wz9npS$i-Rd'oI/8B>*+E+b))/R9$Af&lGbq8qăU"TFn)B,ztRn54X,Y_c\/XL-F_Tb%v=8<*hP3b&D54B1&<FH:.C9nFS2b?f,TkYguăU"fE$cvLdgdAu1TBjTq#BRjX\favPnM+C80)7:aFwKr[F5mt+M:\6IoMU-2v72mK3ăU"mX0$BHl#5;:_co=]<QO50>OeND<7+3x9La+qL50SRxuPbKkc*j1LA,BHUiTtGv/ăU"=Rfl*3X.o9D,J7?3^D&(oW0n6tUjds.H=kgp/2uOsxm#;Pd$wfbR$S6k[f&5_kEăU"2QDVsd^^jL,rY,Cw^-;2)iqq)$(.b/&\17mts(lF5YM*G.h\EZ[wXFouXp\]d63ăU"'Ju*8.,B&m]sdHb7Mo&_pN888#3QdQFhGQ9Wvv'68I]r0T#>)WjJJfsBe-4L3pFăU"u;&VJW*Ln]WHg[BP?vTdrq::qXa(wne0x2.nO_w.k-mx[\X'pVc+?w>lXI9XK62ăU"Ua72/7a[fX5DD-F\N9'goUcu]q_u=)lTJo#dfargEVQdrrUqa4l2qM1Mj$1Fir3ăU"a^?*0_DZ4<Rc/CW&JJ$F9F\B]8W;r+3-t>xa?b'clN3-8SqZcj_[;0:El2mMelCăU"sU\YqCO+HsR?>0Wx+Al0Gff[4e;uVf(..81Tr\I1A3^MjBZOfO*(.^mJ%i(?+()ăU"G3[>\m'TtXj,RDO[qsHKBW=>a&VzE+*mabPbg<oo8&](RJ'uOhfC?#(=k^YgERSăU"[k[XVEPz=kW9\SICnDIdfWxWtHu<XeXci80u^P?IJ=a,x/&K:aeLe4s0OCT-i>yăU",x9RVa^'SeKj^8UP#9Kap8U0x41gYO8RCB(lAj[Rv8gpdq74aCx%\[E+22LLxpnăU"MBN./?h)\dX7S8+FtxB46VwziTvxgb9,m.kGn=/fkP8(v>LW7i'r'Xz8L;rS7KSăU"(jrCf1v8jt/8TSe4lnKPgjoxA)r7E?)7ts4Z)c%/8MpWIFf2M-w*+Ln;P2j'^8YăU"./lZKg%fjEJY(o32Wb_e'PB;d+aWr/c]>X-6Tos8A'WsOI/UBE4W#l9%k1d?gw$ăU"v^u-f*$u>/x=I50VQ/q.U9das:G9KHL+5xPChDB=xCj-z?Aj[QQ4QI?We:RHwb&ăU"m[\\-c<?fx=v^aLldDuukg*8n2lb-lTvk'>Ux1T_QxZOq[n8-ix*dYLA.w=5sxAăU"8<g0x_.3S\<ptU,.qLZvP\-nILPhm(k>'=wX*umVbXx:fuNhj/kJb<=AyPi/,ZwăU"\ErtbQx5-oMKNU(D3)=AA$k$gDimquH^rPgPq4.OJ=aTiXqt)ia:kZ+=^>B)\\3ăU"b(-<L&$*Cp:.t&;e>5'fxGA8Ehrt22kGQ?JtcOUs-E0d1n=]UVf2_;/3UWkt4)$ăU"9ix*S'QHx]?1h$[\cAxRxg$^>^>[r8Kul2TdH?2XAZ6,NF#kHX5jw'^LD>)U<85ăU"KH9h<h5v2(MB;4n5P+Lz$NEhA<k1H7UXon:bw8#qAcWT&b^#fm^3x1J_)'RSp*EăU"K<x7tse_vqptZ4l]ab(h=3)88t[':KL[GE7EUh5JQtgsFkkLBs%0=27=ZSblD'hăU"%v?P)vDd8:][YptInM(p%Wt&F#;NL]KaNw+C2#:\bXXC5>HOvP]M*PQ?*kNxhpLăU"dUS.O2,4rsExthSqkx<\Ec8xlQ-h-WW]?6jix:Af;jS8;mWwR^u*c2eA3E6IAD:ăU"(KXb3-c4i'#'n^QS$9NPo:^Pxtc;4KE9#<4l:Cs]bWs><u([Rp<IL>=lh'>vwd&ăU"or'qLBvv4j?*adxMR:Xaq8UmDMtXYMdJStl]k\TMhgzcexAlEJS]k8<in4Z1x7găU"?8nkCO>0r>ukTf8XXR0dgjbiMAsKZx.nr9wVbiMs.KZxnXrsxp&N&up%()9%(%OăU"-%(IXSN1;q>u&Q/%%%VP%%%0%%%&%kts%yXVS[gfx^j?TA[?CjVz$wV3^&YFPMXăU"(7f58Ls1-)j)136Y,6xSH></#902$Xk?uLE36IC6*1G<'tJ=xh1uvhsbLV<?jZ:ăU"V);Gbh%0)]EC&yuQ<k5iGV+tx#4&7VxfD(KD.N,Nc;5a<i?1iU7P]%e/5W<2VWkăU"6U$:q);FA'lQo?Pfu%'D.&6K?e;m&Ol&S_62iA>3bi%1,^idZ3.TEQ\io8?/SVFăU"WMYxqqXuRacMsK-Qg4\0l4PT$(#=bsFJ].6<FDRWe.M3:<.l2TS^ExA#La(eWcBăU"A.*]$&2S0#iojcd;mSS4;FR2=AtTF2QUc1<BAU,g+04,pDR9l[c#%NOQB-:??xcăU"D+^',]Y34X?6g/(-RN#TlVSz:A]-JH,&6]Fy[U1_pos<i*J6Ek,TAMEa4])X</;ăU"D[C3YI5y'QN\%P<$O<j#mnkeWT90U1f*gjU=$2k$X6&*kg/<%7xZlSev8Om-KSnăU"UXeZrCRh)PC0.Ta9e?&9^$&&EuSTs#kiYrqy18.d/__GN-A7$khedn]^uCrdGxuăU"%BC1?>LLeg*2aju)*YKb%&03HZ_9=a%U8S,rZw)p%9q.V6>EI*E$vLS-w'tFejHăU"6.JklgoF&5wxtcttZsf]:2kuRyVMFUt%)FgX7\uTIYSU\f=71mRaO.J8F'Ff1iYăU"*4)1A3QAm+H?-5BkL+kp9Yrl$c6(C86*uUkoWYFE[/ULqI->rtZMubcrb/YB[X'ăU"k\9%B](fSE6L(ANwK63Y?hZQ(WVk\q'gPSE;PNOh6_\AiJX%=/Y]DtfIH7Opa1)ăU"AQi]cp=)d>1v7BdrQ=h^$m#85J2?lq#R-%McBS%pHV0(MeP63B&cg&)-xkX*];,ăU";nP<<3YAjXh^Rg%cov[C'mMI?ti4q:dAFvUaz;?9UAs9,F(u>MSP,S%sa6V&,u=ăU"yrr$c_mU$0i__l9:RI6x'A2^%rGH$7)XD/^pDZu1ugmsA>a5gHS&U4K=Kb30rW8ăU"KQj$+UPhjdp_I?d'Q(S=opuq_xPP5II;xri_ab,NKSsCQ&rkbA/Sxv-K=:XJgRpăU"N)F\aE_beiG(S.SN?-S)5*=Z\:^0k%[AJ$8f*^gRM#9Hze$Y)-MGt^]eNuLTX-/ăU"iIW>Dk9z8?M_66d$Z9*Ogspn?P?O\3.XwSf:KZ^:Vf)*>HQx53]M-^DQhZ=0]Y8ăU":Y=sl6rc8&#DZ,X&pA1]%\uPt&cPE4\7SjXlT'ck(j(8a,EJ_gK;Hfa9/C_QHn7ăU"j=denW*.o[qQn3$wCX.2UloDbkxjL7sV+Q.M;L_R]8BWBCg?V_4A^TuXW?LZksoăU"#pX5qTr:)([s)SSlVGg?^aa.35ZAGBS)y).)1\ZO7;toAaaqb5Q>cS(of1P=*EjăU"fbyun&&Mu4S&&ikOPVlQcROI&q)SO6t4QBQN6LlYPUkR-j[BHX/(2B#>*/fEC8măU"RZ8,vD*'4M:MR',$auO;IjH*=OZ&_V^kUElgpCp-wVK/9/bPO=Wg,Rbj(/^SM=xăU"%#OuyNR8%AjoLI2$R<GoJW>5^DKjwIT&U_y^]i0HAqyc/H$^*xgNqnYs'B]HiY>ăU"_Pc3'F;C/XlOBDJ'aCw%)igS*7UQcYPX3^I7j(9is0n4OZiame-be8o7&iqOZ+6ăU"O6M/4)Oyd1.lom*#Cq.>hk0L2I^MuPj_gg[24WCY\b5bnWBw\MJak_gI#8(ZH[1ăU"KT7(D:$VTeGW0BUrA2x*d=R=5yd/=8nlsIg3tc4<)R,B,zWv/^F%Fu,fIs-sKR;ăU"rIz,=B$KCN8eWVWZSo5$8<\8^g0g.G+c0%*(VF9#.u_8ny;yQA+%_cMae5/sFNzăU"hEcadU7i%s[9>(C-#qyodTM'1^#ghA-85Ex-rk>^V8V5mC=,S#T)xIJdlVggC9aăU"c+aSei'*+\AcbeppkJC,adrva5UhP3D8^IxsTjolC8UYz4'<l;8Y$HFV$NrmD*6ăU"R>o<'8kY'f1yn-6JYIj_%fwRJ3T&3GZdE?_?f2bi]62VTe1EnWS;WHq>Hx&Q]vFăU"]+4QMcV/.qOG<YHqiw2Qu.zqNi.-,(wlq6:w1^[vKg_TLRVh\q)BC7Jd#Y_p+IuăU"lO^MDpx)sai9^MQi7r:NBR-sRY>+hjC]QZd#7&_Dy8\Q(%&9m&m%:VL,Nd)00Z/ăU"hBE,>=q&#NEp3ijI_r0D80u$flPvy*jL2<<%yQ5<*&rc)NBQgS*GMzZQ^4m?1F^ăU"b0lZT2CLYnwZeR(mmW$ecr+qRX:>&MWeM;yc(M'AY?i:I9hi<Q9&DTT_qR,O)w5ăU"GlsZ)Iqgh1E.17.Y[s9r,Q'-9/Zundh\PYbynBH_Qh#_r1d,,&SBGI1)4SM=/inăU"\b)iO$b+8i^67deJr2Z&A2[xgA$3O%lQHo_3uRe[j-h]RoBku8prW%].LTTI\mAăU"Oev$17/D]ZfJu5.XaADK^tKTT%DrE?dJN4tR5tnfQ=hn?^$[th40Mo\edbrJUhcăU"dw\-H#MhHQhdSP%d>SAVmxJ4[u,HB:QN1m;0oG,[;J.Y#e.wf%lVv5wF]s'lb-hăU"3g64<ElWHo&B?2q/U.U$5(E.-#g./G8RXZ%s,pLyVn7R,Bs(qVty'pfQWB6G5L$ăU"6RJm[8a9,2+;RGh/bN>_-jj4UrZO&bUROTiPg(X1E35AT6zADL7dzT6%/hnG\F1ăU";:9w]l-dIzS6+JHHs[$(jMTl)Ao-\L3]EG*#U9MccNS3YzTVq*z>.7B\i\QFEBOăU"U_^6N;[i]]R+XZ]RRHcx4/SPH4cLP)K>.KXi:1o?O?A8=e+wsU.Ztkx69(F_V7/ăU"GID=s$0[K0Z2U[qJj1P?1Vt;\2)w^2kIVsGYFn5c^EcK7t<#u8PA-l^qxMS$WS]ăU"#,PhbBXSCi^3Bb)jh.Ub)Qq>Bud#Y8\1YeZo$<HNBy$M5G6dY6bgXeOKW,[5XV4ăU"JuiP;ui,)fVgN[9Dqfw'Zj>xU&M4q(/Waa4?tIjGHtsvWI]#%TUT<zcAP>TFt^AăU">?k].fcx7&tjNZu4H?'oIp\VitV78#G;&t*oc:n=^9dff8fMJP*7h,OzFz%%YclăU"kj<bK(FEh.>yFJi&f#>vwGQqxNo?M,8\gd2Sfg^Ozo%u<pc3_u=X$:nd2y?\KVbăU"KVLx.%fi*\cv9E37*0sMi:%zdOOcr7s2(6[<ts3S#?MO^X/Bsz[CMU3;hIDJ9_PăU"w'>E+5[->V_n-W+YR1=Ax^rcj<tK7W8EM\:H3ORXDCu#=_G_rkwXOF1;EV/=6?XăU"#.YJNMdW$at0HO-xut,*I;s5/z'e?U7%Ot$Uz8dl1f[rL0kSffP0D&F#mk%N6l'ăU"*(Nq:cP<c<(Z*GOy_0/*Ge_eb&c=3RQL='?bUTwjrP>GrZBj2d%myJ/RMQPH\kSăU"wwnTjF(vZN(,1nJw6LJzFH\R&FhUKv)s]$?x-sS%8_[AeUf?GYG>bHWh.AnX;SxăU"%%up(%)9%%&O-%j\qSNV&-*d)%.%%1%=%%0#%%%%%ktsy%XVSiRth>'rdBT1=6xăU"'>9v4tFPhQ&iJ6LbfM6=uIKI6*([yj^g,LceI+Q+K.dB%)OsdXbghQs3#Zo^'F9ăU"L]/it1p0h8,%vC?5mh3%Sef*a;YBqb?oWrs.umqu0Xdpqq*Xp_<e#99x'C_'BsOăU"NCxhg-Y=-3bGt%Qw+/gSyt4Xr)OI[Ib%/PF8s+OC;M,'<9lTh<,aaB5SNMIrBVbăU"&d1DV^),#fsYo:z<loos572AbE/rN95)<A8B+Z0:]k2ruZRKldp_$cLvL1Of2?răU"7z.^3+;lTCMQt]lG3(y$8Qz)z6sOV&:'I)xRZIA-.#.F8,h(Xy(3<53Cq7REdC]ăU"<.?-.'1)390>Cwq_a08m2FEBS;X/d?<ek?qtGVb*IDlNh$O1Zaz#6_1$'M#sp6'ăU"$35;6Q,tGgDmb4RN7xP])WwT4Df=H-J:?.Xwb0ZD2(mC=RR17ZB&RW=)JdO6*2yăU"q%l[T5SBlK%WnIxIPQ+g&Z[(Bcf/n<pKDx4($<j'f5_3JDiU*39boh2ODq)p[3]ăU"5REXBZ)-*(#v9X*A;_6Ov-u,Y5],RHoX5].[\2sQK8'4UEWxFndLysi;dd3dB_#ăU"-\8dRpJyeW*oJv+($8a-FFFv6%wAhL6-Fbggw%'>=Cw#5M;-qV10P$NCV_>W&dgăU"lx[u6%v,5sbHM$X2q'^#oaCj.VM2ue?ch6$#6Qsjq#mN92*-vWtLh^MWgJ=OzBCăU"[LQb%'bh1N$,p\kRJC)X-Y[9g[)UJ:1WwZmAR^6,L^&:$EOwfZnJj#F8v^QJc=.ăU"<'oUq3aLun?E3[iBky.tu'c-4&_$mCJ(s0#)OO[y$i,?(6d<W<J>)[c&tkXi.,-ăU"RX[sm)Bh54*&/UQ8T0)#,B'C[GX43^pxy:4<>vUuz3+D0C5^3j\z=h2D-&3:Y*năU"06+]?d.tI[fQ([jFH-S^KBL_*m]gYcf/ngUPm\>VK/zD$];ow8CMsVcadAgbN1aăU"XoOS;=5Q3c\4N>'/(.<[v7^jD$1H5;EYIIvD4b,,7Ne=PE=sv2W=.'.F?<E+3A7ăU"x-7nZ;x^vlX\evFBr#.L2,JV>rt2Wo(bQ2/^K$lPy9VdrtWf't_qr(X<$Fr$UNKăU"l:4t:.9E^>72tC9UiWiBeJjWXjo]u):4TtDw(4fT*#+avTMyDjuOBBypMX4qy4yăU"a,pGW(W$qy<lUIV]2(:MMr+ihxQ]iZAovgX4D&&BP2P5L[ibVNDk4$S'Pe#hDbyăU"fS3\D;>jT1m1Pcm$onS;U,)x?AH:TNbo]tlCw%+dXibk-sI/Q2$*J/DX-W7NlhjăU"f,74cst*gLO0?mT76%$,=D3'[z6-gGamJYAp(ZD(5h(%CwN5=p'$=3S/_mE/KUHăU"s)y_lAC9BXsn1CssW6v-qZH-9Pmw.g#4AkD#Vk-FZKgke7NzdRajE5Ve;rpj>VUăU"PE:ww=289on[=cnS_C',K^4c$UY>I'XWZY5a6f%>0OR5SG^W')\F,C11p-6DYFpăU")]oTHP$U2\%:R0C(4CF#\D?qpRc?WXcBwd/LQ$?uG&,,<XA;(+xORq\I$;c6&q\ăU":hG<w00'RoTY2i.Mi)$xT#E<$:O7oaj9Jp.1s5m3-->H=m39.imk%0BFlABk=^%ăU"LdDp4sd^mNpTt;bZa7GT]Pj476[%XNZ13uscQL5s*K*3pYyLa+m<LOs[8$IH/6păU"a\xHOr9\kVfJ9,oP(wYXu8:'9l[v\lfhg\lNp[B,f#H1^jA$[#Ac=xi8:7?)%7păU"zbe4XQ2r8HrI#<idQ-f#4o.wpmB?UHHBrtBpC,eG\Ttk[tI;r=C+rn4DZ4XeQ.(ăU"_auJZfi.lXkEC3BU\P[fyEL-UkCIPr8^V^YnPpovt$d]57j*X(mHMi#k*gMJ*0oăU"j#skk(,8i9.t^ascZ+>nL)O?<%36KtB1qv>\0*BBPbgJ5tZ9iKMl^'x$&E;l2HDăU"j<#*Z0I&o*P#=O:2jZTh$A09(rEOz-XEBlO\CE2?Hye3,tISzg3Bih)z3(o#vDcăU"ElBT0Ls,C(P%u;\urXJ&DF2-C?HcSo/b$KfNkpUD5Kd7m2B$&JSiZ\%4hc<0iZQăU"FfW\C.bpaEFr#KC%Xw+sK[;U>hoZx^hTTN3-9DwK>E=rXSlTc&a(JUK-4W3#z,$ăU"(aL>$5*d>$xJ8lFVNuSu[$'t-<JpgC0n&=mx2onCGqw:G.(DuV.u7<,8OfPAZYqăU"rqDQQKc_pZ(#18r=;*_T1*Q>bUia2(0#,%j$nZ7q3cQ)v#\nvjni1hp43/PID6găU"PBmiHneT<V(nbmYxTMt>A\HS0jW[WI.e9%fftn*w<661VRbbC<F<ZRBRVU3X/xHăU"&WjM%P^HP$R13<UME_df+yIpl50=k=g7YQT[#-sdRb8j9h?f$N5$R0jQg3C2auAăU"Rd/=8*L^Sud>$SeY2*GcAu<R$HSntWm)mmgQgo'EPUtsYTe%M0'Lz)Fft6vWH0JăU":[+4X1Y(8's;=FkJ]On?+1)5OaI+Tljm44V1[FN5of?+B?84_U&pq^7M2YCWO6UăU"1U+qdYqDYI%7Q'DSp'1W,5D=+T,VIAf-Es(TZ=<L%BSLs'Sj]2b'w5b[<fUvGhkăU"G-%Sg95_[L7C,S\ME3%n0WV'+KmR0zjkVaraAG]=0^iO$Go>T=HEcmsbKV2?.k+ăU"i1?4h_#A.SWT;/a_omegQ)a]7.c<G>W$JQ^3VxM\NA&&q\qRP5/*3:I5QQ8eCBoăU"=.fAG5aSjVseJ1fJ1',E^n^;D:8;nG#X2_ZApU\R>NV0S>AsCA6G[#$$PV2e7:?ăU"w-b%qW5rbbYrqK0VSrhV&W'\[LWl,L8wP>dgW9=*DYNLM&U)'5mxrI<$y1fk&a)ăU"qEzV\f5^Ijs?l1XDJ>X9YrU^,<sL?\&N8zr&jFoj;a?><H]b^ktlRe]feBa=)A2ăU"B<d6Z]+5qY*rf7wyG-ZVlmo>3&uHmb839a]\1'uTup%()9%%%%-%:N>wM4c3W(&ăU"O8%%&Cz%%%1%%%&%kts%yjit%SgfxTNafAl[1ex1xdF]*<EKU<fs)Vt.Rb2jp9CăU"a\uF(mgqA:x#]E7&:8j+r5vl%X9l_tKNt2:DaIDD+R1FFlGyTjRIRBl>%nllw1săU"^^sYpYX>BI,4+4-:Q*F]m<oskZb$5Y%%CW%X0-2$BgbR]&I^:2:T4W:*;>bLH2ZăU"ZRT9bi$mUi)/NJ5=5[;BD(IcPgWL#UGJ)(Y'F.t(b?Bx^+';,'P3ZSm0xh[;lDgăU"kt/J7SUYN)VJ:']Dn5+9K8,SWHQ0bp?3l0WU[bjTS1]W8aSS.-/MASLLK&ot9>(ăU"l]aH;e_qpeJs_CfSL0q1qh+RuHA0n$CE6iV(rq_4&H,bmH+ClPOvMp(Ab*jPW)]ăU"ZL:[&j0Dbv16rWYV-x]QM2H>XTlAWRf*TBo?]>5'<blpr)Cn/je=FQg'YK$wP+căU"rc:0$0H3?G2wlA-mS/3)3sM%nKKQ>&Gu0Xjd2+/%iO%,kV&)j4W5.?Y?Q)e3&:tăU">mkFiimn06#.h9RefGB-**^/^GVjl\2Z4r^Kh-4f=wmBgkR9R:*bYoo-aPXXf98ăU"9ZW:-(X(#+e5QsE7FpPJw^e[WDoHmYue:<Eie)h'^S:&S.HBG.)BSn5pk6[vY/>ăU"JkuTX9ITS3%E=x3_T2a>Im^A5uW98:_mt4VgUWi*N?VG2TDLyqA?:XL+7GNo,3:ăU"p1[=W1kk:dfm+UU1C&<j0]IfKa_A6U.pD0o)3jRth&%0M,6o\H=Z8xP,9AABJZZăU"rUJ'%ADBsDn%gT)X*/-sr7SCv;M&$+tbXYM3USUFd1KMrn7?)Z.\+scZPEU.&]\ăU"++Pc.+'+]vsYhtoRHv.%u9wg140h808xpTt:bEfZP9l\S_x>TAZ9FBQH>\rgRPDăU"1]nyUunX7Cm60]f6/YRJEIA>rY)3ZbJQ3b[=ZboqKjhzS1arRZGm7x3nLcTBXpmăU".B]Ce(5DF39,Iu37(J&ky\ivD+=g(eV1EsJOOc9jk]xhu%kQ#,:[OPbMVM-[WF0ăU"XYuAJ%D]JTbPnS.X+7R1bRyS]rT(IM[SK0X76In%MOFxhUBHPgNs67\tcoln2kqăU";Db'UD/BWS],V'ku1j8Oq]BYOvHr*g;UC>#lmmFm_F(Dk39a/T>NJBwnfno:[v:ăU"e7+l,PN[*FUaiG/$_>-5eRXlCG4('KgC\H*=%Zv]AoZ9W0pYKVaYacQ-wI.g<s5ăU"k\P:ZSffW\)Img?,T\:0K]YMo5ura?OfuU)h1>2iKpM48&(fSx21)%ds,mo1CK?ăU"wC74-k)x:$%dP.#kbe8Dhm,nV/INhJ'bclNZ[D_kx.KX3lvpBJ='xU$4t<-oCk6ăU"'5PWwMkznU3sCFY10p-e'WAO)P8yXvy4[dAzPF\BjNDt70X.oS-)dzU#.(LRt(ZăU"U4l-#\HAu,ifm9eUxUkm<xd$JmdY95[p;#I/bGl5<u6u.hFBG1\8'eIcfm\_Q-NăU"EZC0r-F\B+RJp1JI3n?K?MdE_U%I4YW.&]jf6EB$3J-PtBOc.Wa#S]r;/Z-9Ov<ăU"I,M:,9%X<8deD%44IgxzE-JMHQ8Vi).xqDjqVZh\#9S:Bs),t9'4P<T/<Nti08WăU"&eO=&9r+x.XGgSkT(9v;]5MZ$=(<(O2&(^_/y+k=e8dz^r6]dumLMSiVS%,GPejăU"<Vz),j)oyz*pqf:ac%/:*/\i:.Jm+zqpaj-UOg'IDc&SlKRVqN3)i0QF:ILYJ<-ăU"XI4ALjO,mfgIN^2)7:+IMRIClzGgey?uGkyceOWg8Vmt%&CopgTM-\=B^hR\Y,păU"Hn&iVtW#IE1_MC0)DW]NS3\>BVRXX5O7.T[/<O2o0o[fyP:nheU_';S1:G'^>4.ăU"N:GAnHLi/S+qiSYhMa7oqsMX/wgoncl9aK3u6ktNxYgB;W+mDDZ-?>?(0]SG.:$ăU"mIz\D.5#n;)U?K%82o1i3CK=i$>lCL&Ib%tfQM8?o64:/HQ8u1:n35'%ADrMVeDăU"LSKY*u/nd(Ui+=5A.jAPwGU?8?fYBWJqW^M\oHXqjPyO<9$Y3pS>c?Don_=/?(VăU"m79,C,VSas1]XN[CjZS>NxRi7GPRSdZ[C2UR$Jp?&GC*5Dj(QCf4NI$mZQ0]E[YăU"qS-HMG2*3>Uf&:?PjU/L1RQzJOwaDtsn%ZM*s=^5Bp3f)Q4^7L/^=rCa1soli?:ăU"_-tDRm/^hkY(>'FZ=)nApK(SkfyH&]H(oXMUe6KodpAjBkH\h)qLC>\HzCNeJ?,ăU"TfIq*5p'xCPz[TeXjDM.5f['=q%<./tMIA)<9kM(qPGSFeK2Yu#E4hYZSbUleL8ăU")VI049[VR3+qr0CvhjQ'W%ZyBf;>;b.;K,E+cvj)<+N[+s*q[0'(A:#KPvwJ6T9ăU"kF-4Lg^-lXn%2Cv(?h[Nmwgsxa:au3E?Xmoww7You'oPKIvw)M5&Of>tT'dU\/qăU"/Ly++$mL?MeWe$]TtAa,F?-;PIG<F(.uF/p[7UZ2uqCKpHCK$-*C6cV0xN<ZWWSăU"xe-?s*.[LK_D\hM+Y_U$&gI7%=]?,8TA8aVq?6aq7]3gE5;I3vcnEgG]m8/<'CCăU"D,t?pf-s\n^dwuulH8wlsdN7'dDje0Ju3J[f*$3Mhu.:T=iR/AP0jwDdqgm(;/2ăU"XcuvDDmn^gv:j[2>_&q;w&&%%KE'?^BhMM-sdtoh$W+1YT*$awfpxm]_*faioEbăU"AUmZ/Gtre(ni07J=6Fa&jV&7-O6il'5W8H.6G0IMIJ8E1XHTf<kn5f$lD?Pe3i+ăU"(LQv**<Keud#5,J$*&s)NNY8wXMpEtOBm()gMbW[dbR9hAIACelW?,uFu3%:<MbăU"2aLcYVvh8F1JZOf\r1MK^xh_Y--CPt?4k&K8N_ww'L_(6[a%C[(V$A6?GrZFHxCăU"7Wb^=%\?LKt>;)%9+e*=UHdU$#Kajn#Dbu&_QJ+f[>T'B0EL#EMB/L'#4g-XBCMăU"Q,M2&KUEQI6JJygG5SIR,5>._w#7%8:[_#t%p],=Dd_b?buD^fE;imiGfE.0J,5ăU"2Ic%t.JE[QSh,gq6b:TabuS1(pW[:urhnO-o1P#0Ij1u=c<Mo;Vx0EGSccCxCU.ăEND SUBăSUB V4ăU"(_-S(p7miscdRi''Xh$P3H-3:T<[&3Z&)GNLGIN%OsWLhV]_Ij/w$^dA)E=LIp#ăU":crR02mf\zX7mWeOjbHpcZS[2UT=X#fTrtzf%Ke$6T(XHsdS_:e,bc6rdW0:(%UăU"nQe+5sJeqtA:OSc?^3T920q3cSVXXeTo6TjC6T,MK5*7aFTt=72[UKt*)6I=::văU"\P)^<_+s0XA4g$A_LCMm(054niLb&C&%rU5dDW;Z)[b\A=%x/p+OmGhBnd]FB.aăU"fS^Zj9V=(Lb$XTR:reE+)9'SWgSy'mDJcEg(\R+>[o%)hXH4CqbjBb6%RI(za5'ăU"jlm'YGkAGZO?^+>4Y14&=m-&Gj7m>\?euTIFZx[l,f$(UP^^J2jsWH<h5g^O]f#ăU"Q?;q3dM+K>P+nL3W6Pi5pqOv]t^>tMcOnQnH&4vS'(a/w0?/oqH*F%h/:1Wp+IAăU"FkUe_e^b7GORtJaUtX-t-DeTMLgt^kTu-B9u/$Z<IHnkFw:UyrQ#qQY*9%b5Y:TăU"DpCQjd=G?n_0\AuXod?Gmm<.ioS>5Y]/\-lvG9p(MO;DX[o8In1bs;;jrO*RMN9ăU"w8/e%ZwNDrdF=&W;GU.I)\OQ#I=spUW6O%gQZ.,Z'\]O?6=siiW<OIgau[X,L,WăU"3#wuJ5YoS0-JMJYAU6n4lML1ZE_=F])US(<mW_>Il9(E,OGRT<1<An=8oJ,ZmnOăU"H]'?V?M5'4d*7hDvEO;Cc&3gsAT<DGls9Am-iL5V6DFcYtd\J\t\eWWmL0ZOYi-ăU";7:.2vu_7:bME1FgbSaORFfs33\9+>$a?;VbCwMma#<mbZ,k^dLzx7/vWJx^WJrăU"PZ2ZF)qJjZ(T6EHQB)7jQ_EqM/J*9<>VAb/jEtgyR+4J]zr$%Md%OcJ)ZP\:7H?ăU"uf^J)zG'Q+.0aREi+d-,+i\ZCAoZdVI8tuPZ(gIeT('ktbpaR$js\\2OT1tt)^kăU"s5GY55-:dh((6=xZZUbNJfsG<2VG=Nfh<T/;w0[;Ln%qh4/t/+=xc^REaUYO\;hăU"An3jf2<,h3<G?(f>_Tg&hPWU;ftAfBkdS_\ELk_hvk_%DDUrt8568f^px617vLSăU"=l'[2kUd1)e11Qf%?ydAZ_$:]lFdLYs<,<=FSZK\g'1RVtb5K(57TWrjpwCTqUGăU"k4:?W>dKTcEI:+^(ceC%k5Da:/fm*$^0d-gOj'c_l8D)c/m'*:a'd-Y9L)c$9\$ăU"#O<SnQ7Q.5mTVH0wzHn<c=A[)X/pjQgaK01xsZ&[]Wi1y-)q#j?_.mqjf%i>C9(ăU"qtrmR81_KYEl1_90PRuxJNJlf6&.as9)*Np6\ps,3]_<B;>FE6/TGvK+.jaAk^(ăU"tU,js%SfDaatlY5B<%NkL'P#\vuf*Hnu:#:+$FKhE9%M-./)#utA-$G7VN/$_bkăU"TRBX'umX$<n,BG*&<hoT:*0f;[*=Jso3-]fo_Hh*V;zA;IQ[5;\kFAHmZ+M-:\0ăU"]t/V9H^9cbW6KK*bGIu>^,H)&UW:lGGmPZCptdK;d_J7YG5F5?TG##')N;m3FqYăU"^J*&PJ_k%\JPWI4&jwO3L(gB],<bCBGf55<\l#[T_?+)s\S/5^Q#3MGqS2V;0H<ăU"aZax4pF]Xa3eo>044WgR2K;v;2T1v>\66yj?asl1+o1NpCN^M1De2C^$9iq?m8CăU"<>7L.L/k]ZBSTF['A6,gl,NHhPvub]vBJ30DUhfMmem%wt_L?=_3l(Hc[I2r$85ăU"6to7+Vbc)6L6CG%HX71fs5P+S-E=29VE^Z*Uu2A29:5$<oges/N3juS*W+uds[5ăU";U&C(>:s'Ky.feyvhEIv&QI#t%4k'daq,r(Tq.XM')e>LrZ8-VWmanFE/+XH[,tăU"FUHON.zvcpJI>Q>7d7LSnR[%ocIJj$+$4$,_G(QNSiL_[a]bhC2cF3:K2Phj=smăU"*l(Bc&5m.p,e]<g>0/ByAnJxs[LdIb9B4Rj\:[.rZ+ecmlkZ01ZG^-+MRnok3HzăU"%O3(_NuLnntbr?x6k$,X'q3L%n8;f;+B,e4yr3(AvWn(-PGMkl\qRVA2hlX.jR2ăU"C-K#mO3TK-Kg7[Y2/oZuoQWj'fNju#<X1>2p+][N*MY]_4q)cIOSa=;5rA(8q[NăU"fS3_0$3JRm/\7XkAdvezYQA&yYNbu^qtBxA=F\KYb>;qu0SR051El>7,r=fgwloăU"aQhkD^2Wf\H8n;aioxd;h**Wx7()WC-eQ=IkGK_E0VMD=b'dbMV]l1T6fP_^\DxăU"OIdV6pdOXAs\aRD#5c]^%dez\q956J>;.x&9^&Wz9#0B9EwVo8(p^tM&p*4l-BQăU"gn0(?VID4=HtB03nyJ$HdYgi_mJ2q.Dy)tPvx>8u*9lVAc3o1]/*Wf[?0O[,B;WăU"f)4>_,K<o)eshnSV&iOa2dgTY%fxQg)<PU_AYUgSx<i1M*-sfqrVCQ*f<LND:f?ăU"AT]rl,Ogj4F^3(GXbPk]XW:1MVPEjwCCRm7atUkMn2B$*nq=ZlDl[J,jTMzjA\KăU"3VCVrkN[;5rBBdPOi+7d0j$$t:?x:2GH(ipRUOYwEi2(Q/WQU\G8i(ZI0rU/%'2ăU"+qDmWfHV_Q7RCrl9oG3nW.hKLDC2)#]jPYPK[NaX/Zx\I*[Ftw(wtH6qENY:^<$ăU"t;d]LDsJXa-Vk'VqeqEuVk8vfhrt(ag:o#hK1Z.t\d&d)wh\#wtUjyD<gaKU9Z]ăU"MM;UY,Hmnbc3977m&CN.O-U,8'l6<_$2lV4G\-tK&>c>_?gPd>D-O5i&Z/0QH-?ăU"'20]R:i%I'BI?xfeR7/G[db^:eKYQATg(#6g3B,L\tF?Z1Y:fBlr2j4SuZ1<,U3ăU"J*&QTFmHj]o9tVIm*ju6sZQY:edI<s=o?m,Y'*H(lzF6lPKJ2NvhFZ*>7#Kez]1ăU"<Rp[ZsOB(CKNH=U]qflE3%'VCWj3eVjB*3eI,C#3'm,CVb3m,g9jWsh$p'>x2pJăU"kSptO(fJ1wIY=djQ6?tjDk:B#0vR:)#N:\8h]1]X/v.]N'Re[HT[AIC5J9w%e_SăU"mTDtm#RAwL$lU3I2C-/g6Njg.eFxiUL5E#dxp]LT]wC^5&vMLbd#cFXj,Pecn*AăU"*YToGr(^;=QnJ]p60a+Iac[kY]C>n%1,>M#nPl)INC#EHZ=b\RN^76Al6dbg^%_ăU"Zhn2v5K<2l%]3^CcyI:V*Xj:l>]-#ZqJpPUr,S_9H0Z#.o*p>%n4-FZkK9hz,pvăU"PL'OrXfGbCo.\asjpV0d6&hQdR'<v8+\rOHGz;1z31nE^1AFI5'.9<?%Xuj\<\EăU"uvQ2Vcv>lX%R\cZM\G=Uto:\#WV<Mkud%up&'%>%9%%%%-%(mGNMAZl\S&9-%%%ăU",G%%%0%%%%%%%%%%%E%%%%%%#%%i4M50D;JCS5=&Cup&%'>%9%%%%-.%rPS:NiCăU"9%LQ'%+%6(%%%0%%%%%%%%%&%E#%%%b%-%%rJ:g8>AB]S1)0Bup%&'>%%9%%%#-ăU"%($RRMuv84W*-%%%,G%%%-%%%%%%%%%%%%E%%%'a/%%Ly78=LS5=C%up&'%>%9%ăU"%%%-%(</3NSWbO<%_-%%%,G%%%.%%%%%%%%%%%E%7%%88#%%g8)>B]S25=Cu%p&ăU"'>%%9%%%%-%g\/3NF(x3e9%-%%,%G%%/%%%%%%%%%%%%E%%%%EA%I%g8>&BV[S2ăU"5=Cu%p&'>%%9%%[%-%BA\OMHN$BhR%-%%,%G%%.%%%%%%%%%%%%E%%(%+I%I%q8ăU"=D4BS5)=Cup%&'>%%9%%%#-%?PdSN+1>#Mt&.%%/(%%%1%%%%%%%%%&%%E%%%%+ăU"R%%Cr:g8)>BV[LS10B%up&'%>%9%%%%-%:K>wM&HW^<%n-%%%,G%%%0%%%%%%%%ăU"%%%E%%%%PT#%%y7282:VIWS5=&Cup&%'>%9%%%%-.%EqSUNA3**<q=%.%jA%%%0ăU"%%%%%%%%%&%E#%%%l#\%%ELk>=CCj3S1)0Bup%&'>%%9%%%#-%AbJLM<C*CoV-%ăU"%%,G%%%0%%%%%%%%%%%%E%%%&7u%%LfA0328=0S25=Cu%p&'>%%9%%%%-%I&XSNăU";Dq>uQ%/%%V%P%%0%%%%%%%%%&%%E%%4%;'%(%%kt%syXV%Sgfx%up&'%>%9%%%ăU"%-%(jqSN*V-*d%).%%%1=%%%0%%%%%%%%%&%E%I%%<2.%%%k%tsyX%VSit%hup&ăU"%'>%9%%%%-d%N>wRMc3W((O8%(%Cz%%%1%%%%%%%%%&%E#%%%iA;%%%%ktsy%jiăU"tS%gfxu%p*+%%%%%2[%2%X%'%%i&O%%%%%ăEND SUBăV2ăV3ăV4ăCLOSE:IF S=184AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUBăJacob Wieles                   SCREEN 12 CHARACTERS           j.wieles@hccnet.nl             10-15-00 (10:29)       QB, QBasic, PDS, PB    176  4007     CHAR-12.BAS 'Programma         : CHAR-12.BAS    (14-10-2000)ă'Auteur            : Jacob Wielesă'Taal              : PowerBASIC  and Q(uick)Basică'Configuratie      : screen  12ă'ă'                  : In screen 12 the characters from ascii 32 to 122ă'                    are one by one printed on locate 1,1, set ină'                    array kr which are stored in array krv(.,.).ă'                    Gosub PutWords takes one by one the charactersă'                    from a Chars$, find the ASCII code of eachă'                    character, takes the array from krv(.,.), makesă'                    a GET array and PUT that array elsewhere on theă'                    screen.ăădefint A-Zăxl = 8ăyl = 16ăyes=1ăno=0ădm=2+(xl/8)*2*ylădim kr(dm-1), krv(32 to 122, dm-1)ăpi#=4*atn(1)ăscreen 12ă'To prevent flickering monitoră  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă  if cr=42 then PowerBasic=yesă  if cr=63 then PowerBasic=noăăcolor 10ă'==================> Get characters 32 to 122ăfor j = 32 to 122ă  locate 1, 1ă  print CHR$(j)ă  x = 0ă  y = 0ă  GET (x, y)-(xl - 1, yl - 1), kră  for l = 0 to dm-1ă    krv(j,l) = kr(l)ă  next lănext jălocate 1, 1ăprint " "ălocate 3, 1ăprint " The characters 32 to 122 are takingălocate 5,1ăprint" from screen 12 and set in array krv."ălocate 7,1ăwhile inkey$<>"":wendăprint " Hit a key for demo 1."ăkeyhit$ = input$(1)ă'=======================> Demo 1ăclsăx=640-8ăy=480-16ăchars$="O"ăgosub PutWordsăwords1$="The characters, taken from array krv, can PUT on anny"ăwords2$="pixel in the area 0,0 - 632,464. (640-8 and 480-16)"ăfor count=0 to 13ă  Chars$=words1$ă  y=count*yl*2ă  x=count*15ă  gosub PutWordsă  Chars$=words2$ă  y=16+count*yl*2ă  gosub PutWordsănext countăChars$="Hit a key for demo 2."ăx=320-(len(Chars$)*8)/2ăy=464ăgosub PutWordsăwhile inkey$<>"":wendăhitakey$=input$(1)ăclsă'=======================> Demo 2ăline (110,240)-(155,240),13ăChars$="Start"ăx=112ăy=222ăgosub PutWordsăfor count=32 to 122ă  x=320-220*cos((count-32)*2*pi#/90)ă  y=240+220*sin(pi#+(count-32)*2*pi#/90)ă  for i=0 to dm-1ă    kr(i)=krv(count,i)ă  next iă  PUT (x,y),kr,PSETănext countăwhile inkey$<>"":wendăprint "Hit a key for demo 3."ăhitakey$=input$(1)ăclsăwindow (-320,-240)-(319,239)ăfor count=32 to 122ă  x=-220*cos((count-32)*2*pi#/90)ă  y=220*sin((count-32)*2*pi#/90)ă  if PowerBasic=no then y=y-16ă  for i=0 to dm-1ă    kr(i)=krv(count,i)ă  next iă  PUT (x,y),kr,PSETănext countălocate 10,25ăprint"The screen is set to window"ălocate 11,25ăprint"(-320,-240)-(319,239)"ălocate 13,25ăprint"If the charaters are normal"ălocate 14,25ăprint"then you run the program with"ălocate 15,25ăprint"PowerBASIC else with Q(uick)BASIC."ălocate 17,25ăprint"Hit a key for what you see with"ălocate 18,25ăprint"the other basic."ăcolor 13ălocate 20,25ăprint"Without 2 small program steps the"ălocate 21,25ăprint"charaters in Q(uick)BASIC are"ălocate 22,25ăprint"16 pixels higher."ăwhile inkey$<>"":wendăhitakey$=input$(1)ăclsă'=================================>> The other basicăfor count=32 to 122ă  x=-220*cos((count-32)*2*pi#/90)ă  y=220*sin((count-32)*2*pi#/90)ă  if PowerBasic=no then y=y-16ă  for i=0 to 1ă    kr(i)=krv(count,i)ă  next iă  for i=2 to dm-1ă    kr(i)=krv(count,dm-1-(i-2))ă  next iă  PUT (x,y),kr,PSETănext countăwhile inkey$<>"":wendăprint"Thanks for running. Hit a key for end."ăhitakey$=input$(1)ăclsăscreen 0ă'To prevent flickering monitoră  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopăprint "Hit a key for the source."ăendăăPutWords:ăxp=xăyp=yăfor l=1 to LEN(Chars$)ă  k=ASC(MID$(Chars$,l,1))ă'====> set single character from array krv(.,.) in array kr(.)ă  for i=0 to dm-1ă    kr(i)=krv(k,i)ă  next iă'====> doneă  PUT (xp,yp),kr,PSETă  xp=xp+xlănext lăreturnăJacob Wieles                   GALTON BOARD                   j.wieles@hccnet.nl             10-15-00 (10:29)       QB, QBasic, PDS, PB    440  11276    GALTON-E.BAS'program        : GALTON-E.BAS  (14-10-2000)ă'author         : Jacob Wielesă'configuration  : VGA (color)ă'which basic    : Q(uick)Basic and PowerBASICăă' Running this program you can play with a manipulated GALTON-BOARD.ă' You have to make a choice between boards with 1 up to and includingă' 9 rows of pins.ă' Around each pin a small blade will swiffel from the positionă' (top-left / bottom-right) to (top-right / bottom-left) - or theă' reverse move - after a ball passed the blade.ă' The pins are numbered from the top to the bottom and from left toă' the right.ă' After drawing the pictures used by the program, the program will askă' for the number of rows with pins.ă' Next you must make a choice how the position of the blade-settingă' must be on the pins.ă'ă' With the board on the screen you can make a choice for changing theă' blade-setting or not.ă' If so you can turn on, or fix, or turn on and fix the blade-setting.ă'ă' On each board the number of falling balls are chosen so that - whenă' no blades are fixed - a binomial distribution appears in the cups.ă' The program finished with a binomial table up to 12th power.ă'ăăgosub CheckingVGAă'Find out on which basic the program runsă  out &H3C7,15ă  cr=inp(&H3C9)ă  cg=inp(&H3C9)ă  cb=inp(&H3C9)ă'    if cr=42 then the program runs on PowerBasică'    if cr=63 then the program runs on Q(uick)Basică  timedivisor!=5'=====================>> For PowerBASICă  if cr=63 then timedivisor!=.25'=========>> For Q(uick)BASICă'The value for the timedivisor if found for a Pentium 100 PCă'For an other PC maybe you must change this valueă  DrawLoop&=wp&/timedivisor!ăăXM=320ăXH=30:YH=30    'array for a pin with bladeăXL=8:YL=16     'dimention of a characterăădm=2+INT((XH+7)/8)*2*(YH+1)-1ădmk=2+INT((9+7)/8)*2*9-1ădim L0%(dm),L1%(dm),L2%(dm)  'blades leftup>>rightdownădim R0%(dm),R1%(dm),R2%(dm)  'blades rightup>>leftdownădim K1%(dmk),K2%(dmk)        'ballsădim coeff(12)                'binomial tableăgosub MakingThingsăădoă  while inkey$<>"":wendă  AnOther=0ă  DelayFlag=0ă  locate 13,1ă  print" Hit key (1, 2,... or 9) to select number of rows with pins. ";ă  doă    inv=instr("123456789",input$(1))ă  loop while inv=0ă  NmbRows=invă  print NmbRowsă  NmbPins=((NmbRows+1)*NmbRows)/2                  'number pinsă  dim PL(NmbPins),PV(NmbPins),Cup(NmbRows+1)ă  locate 15,1ă  print" There are";NmbPins;"pins."ă  printă  print" You must make a choice for the blade-setting from:"ă  printă  print"                     A. Determination random."ă  print"                     B. All blades: top right bottom left."ă  print"                     C. All blades: top left bottom right."ă  printă  print" Your choice is (A or B or C) ?";ă  doă    inv=INSTR("ABC",ucase$(input$(1)))ă  loop while inv=0ă  select case invă  case 1ă    randomize timeră    for I=1 to NmbPinsă      PL(I)=INT(RND+.5)ă    next Iă  case 2ă    for I=1 to NmbPinsă      PL(I)=0ă    next Iă  case 3ă    for I=1 to NmbPinsă      PL(I)=1ă    next Iă  end selectă  clsă  doă    gosub DrawBoardă    YouLike$=" Do you like to change a blade-setting Y/N ? "ă    if Change=1 thenă      YouLike$=" Do you like to change an other blade-setting (Y/N) ? "ă    end ifă    locate 1,1:print YouLike$ă    doă      Change=INSTR("YN",ucase$(input$(1)))ă    loop while Change=0ă    if Change=1 thenă      locate 1,1ă      print" Turn on, Fix position or Both. Hit: (T, F or B) ? ";ă      doă        inv=INSTR("TFB",ucase$(input$(1)))ă      loop while  inv=0ă      select case invă        case 1ă          Choice$=" for Turn on : "ă          gosub ChangeBladeSettingă          if PL(KP)=1 thenă            PL(KP)=0ă          elseă            PL(KP)=1ă          end ifă        case 2ă          Choice$=" for Fix position : "ă          gosub ChangeBladeSettingă          PV(KP)=1ă        case 3ă          Choice$=" for Turn on : "ă          gosub ChangeBladeSettingă          if PL(KP)=1 thenă            PL(KP)=0ă          elseă            PL(KP)=1ă          end ifă          Choice$=" for Fix position : "ă          gosub ChangeBladeSettingă          PV(KP)=1ă      end selectă    end ifă  loop until Change=2ă  NmbBalls=2^NmbRows  'Number falling ballsă  locate 1,1:print" There are";NmbBalls;"balls to fall.";ă  print" Do you want a DrawDelay (Y/N) ?"ă  doă    inv=INSTR("YN",ucase$(input$(1)))ă  loop while inv=0ă  if inv=1 thenă    DelayFlag=1ă  end ifă  locate 1,1:print space$(78)ă  locate 1,1: print" Stop with Enter.      "ă  gosub FallingBallsă  ERASE PL,PV,Cupă  locate 3,1:print" There are";K-1;"fallen balls.      "ă  locate 1,1:print" Do you want to play with an other board (Y/N) ?"ă  doă    AnOther=instr("YN",ucase$(input$(1)))ă  loop while AnOther=0ă  if AnOther=1 then clsăloop while AnOther=1ăclsăgosub TableLayoutăăfor power=0 to 12ă  Coeff(power)=1ă  for j=1 to power-1ă    if power<2 then j=power-1ă    numerator=poweră    for TermNum=1 to j-1ă      numerator=numerator*(power-TermNum)ă    next TermNumă    denominator=1ă    for TermDenom=1 to jă      denominator=denominator*TermDenomă    next TermDenomă    Coeff(j)=numerator/denominatoră  next jă  locate power+5,4:print poweră  locate power+5,10:print power+1ă  locate power+5,40-2*poweră  ct=0ă  color 10ă  for p=0 to poweră    print using "####";Coeff(p);ă    ct=ct+Coeff(p)ă  next pă  color 14ă  locate power+5,72ă  print using "####";ctănext powerăcolor 10ălocate 19,18ăprint"=> Blaise Pascal's **";ăcolor 12ăprint" triangulus mathematicus ";ăcolor 10ăprint"** <="ăcolor 12ălocate 21,1ăprint" Hit a key for end program."ăhitkey$=input$(1)ăscreen 0ăt!=timerăwhile timer<t!+1:wendăEndProg:ăprint Leave$ăendă'==========================>> END <<===========================ăDrawBoard:ă  NP=0:P=1ă  for I=1 to NmbRowsă    NP=NP+1ă    for J=1 to NPă      X=XM-(XH/2+(I-1)*(XH+4))ă      if PL(P)=1 thenă        put(X+(J-1)*2*(XH+4),I*(YH+4)),L0%,psetă      elseă        put (X+(J-1)*2*(XH+4),I*(YH+4)),R0%,psetă      end ifă      P=P+1ă    next Jă  next Iă  XBB=XM-NmbRows*(XH+4)-XLă  YH2=2*(YH)ă  YBB=(NmbRows+1)*(YH+4)ă  line (XBB,YBB)-(XBB,YBB+YH2),13ă  line -STEP(2*(NmbRows*(XH+4)+XL),0),13ă  line -STEP(0,-YH2),13ă  lstep!=(NmbRows-1)/2ă  for count!=-lstep! to lstep!ă    X=XM-count!*2*(XH+4)ă    line(X,YBB)-(X,YBB+YH2),13ă  next count!ăreturnăăChangeBladeSetting:ă  wronginputcolor=14ă  doă    locate 1,1:print space$(78)ă    locate 1,1ă    print" Put in a number from ";ă    color wronginputcoloră    print"(1 up to";NmbPins;") ";ă    color 14ă    print Choice$;ă    count=0ă    blade$=""ă    doă      doă        inv$=input$(1)ă      loop while instr("0123456789"+chr$(13),inv$)=0ă      blade$=blade$+inv$ă      count=count+1ă      print inv$;ă    loop while not (count>3 or inv$=chr$(13))ă    kp=val(blade$)ă    if kp<1 or kp>NmbPins then wronginputcolor=12ă  loop while kp<1 or kp>NmbPinsă  color 14ă  locate 1,1ă  print space$(78)ăreturnăăFallingBalls:ă  for K=1 to NmbBallsă    locate 3,1ă    print" Ball #";K;"from";NmbBalls;"falls now."ă    PO=1:BT=0:EP=1ă    put(XM-4,5),K1%,psetă    gosub DrawDelayă    put(XM-4,5),K2%,psetă    for I=0 to NmbRows-1 'number rowsă      SK=PL(PO)ă      BT=BT+1:EP=EP+Iă      gosub FallSingleBallă      if stfl=2 then exit foră      if SK=1 thenă        PL(PO)=0ă      elseă        PL(PO)=1ă      end ifă      gosub ChangePositionă      if I=NmbRows-1 thenă        Y=Y+YH+8ă        X=X-4ă        if SK=1 then X=X+XH+8ă        put(X,Y),K1%,psetă        gosub DrawDelayă        put(X,Y),K2%,psetă      end ifă      PO=PO+BT+SKă    next Iă    if stfl=2 then exit foră    WB=PO-(EP+BT)ă    Cup(WB)=Cup(WB)+1ă    RG=(Y/YL)+3ă    KOL=(X+SK*XH)/XLă    KL=KOL-4ă    if WB=0 thenă      KL=KOL-1ă    elseă      if WB=NmbRows then KL=KOL-4ă    end ifă    locate RG,KL:print Cup(WB);ă  next KăreturnăăChangePosition:ă  X=XM-(XH/2+I*(XH+4))+(PO-EP)*2*(XH+4)ă  Y=(I+1)*(YH+4)ă  if PV(PO)=1 thenă    PL(PO)=SKă  elseă    if SK=1 thenă      put(X,Y),R0%,psetă    elseă      put(X,Y),L0%,psetă    end ifă  end ifăreturnăăFallSingleBall:ă  X=XM-(XH/2+I*(XH+4))+(PO-EP)*2*(XH+4)ă  Y=(I+1)*(YH+4)ă  stfl=0ă  if SK=1 thenă    put(X,Y),L1%,psetă    gosub DrawDelayă    put(X,Y),L2%,psetă  elseă    put(X,Y),R1%,psetă    gosub DrawDelayă    put(X,Y),R2%,psetă  end ifă  gosub DrawDelayă  do while inkey$=chr$(13)ă    locate 1,1:print" Continue with Enter. End with Escape."ă    doă      stfl=instr(chr$(13)+chr$(27),input$(1))ă    loop while stfl=0ă  loopă  if stfl<>2 thenă    locate 1,1:print" Stop with Enter.                     "ă    if SK=1 thenă      put(X,Y),L0%,psetă    elseă      put(X,Y),R0%,psetă    end ifă  end ifăreturnăăDrawDelay:ă  if DelayFlag=1 thenă    for w&=0 to Drawloop&:next w&ă  end ifăreturnăăMakingThings:ă'pins and blades without a ballă  line(208,16)-(208+XH,16+YH),10     'Position blade LUp >> RBottomă  line(400,16+YH)-(400+XH,16),10     'Position blade RUp >> LBottomă  circle(208+XH/2,16+YH/2),2,12      'pină  circle(400+XH/2,16+YH/2),2,12      'pină  circle(XM,16+YH/2),4,14            'Ballă  paint(XM,16+YH/2),3,14ă  get(208,16)-(208+XH,16+YH),L0%ă  get(400,16)-(400+XH,16+YH),R0%ă  get(XM-4,12+YH/2)-(XM+4,20+YH/2),K1%  'Ballă  get(110,1)-(118,9),K2%                'Ball removedăă'blade with ball in the middleă  put(208,48),L0%,psetă  put(400,48),R0%,psetă  circle(208+XH/2,48+YH/2-6),4,14ă  paint(208+XH/2,48+YH/2-6),3,14ă  circle(400+XH/2,48+YH/2-6),4,14ă  paint(400+XH/2,48+YH/2-6),3,14ă  get(208,48)-(208+XH,48+YH),L1%ă  get(400,48)-(400+XH,48+YH),R1%ăă'blade with ball on the lower endă  put(208,80),L0%,psetă  put(400,80),R0%,psetă  circle(208+XH-4,80+YH-9),4,14ă  paint(208+XH-4,80+YH-9),3,14ă  circle(400+4,80+YH-9),4,14ă  paint(400+4,80+YH-9),3,14ă  get(208,80)-(208+XH,80+YH),L2%ă  get(400,80)-(400+XH,80+YH),R2%ă  locate 9,1ă  print"               The pins with blades and balls";ă  print" as used in the program."ă  DelayFlag=1ă  for i=2 to 61ă    put(i*10,150),K1%,psetă    gosub DrawDelayă  next iăreturnăăTableLayout:ă  locate 2,3:print"power"ă  locate 3,3:print"rows"ă  locate 2,10:print"terms"ă  locate 3,10:print"cups"ă  locate 2,37:print"coefficients"ă  locate 3,37:print"balls in cups"ă  locate 3,72:print"balls"ă  line(1.5*xl,2*yl)-(70*xl,2*yl),10ă  line(1.5*xl,3*yl+5)-(77*xl,3*yl+5),10ă  line(1.5*xl,yl)-(1.5*xl,17*yl),10ă  line(8*xl,yl)-(8*xl,17*yl),10ă  line(14.9*xl,yl)-(14.9*xl,19*yl),10ă  line(70*xl,yl)-(70*xl,19*yl),10ă  line(77*xl,yl)-(77*xl,17*yl),10ăreturnăăCheckingVGA:ă  on error goto NoVGAă  screen 12ă'To prevent flickering monitoră  t!=timeră  wp&=0ă  do while timer< t!+1ă    wp&=wp&+1ă  loopă  Leave$=" Thanks for running. Hit a key for the source."ă'backgroundă  out &H3C8,0ă  out &H3C9,0  'redă  out &H3C9,0  'greenă  out &H3C9,35 'blueă  color 14ăon error goto 0ăreturnăNoVGA:ă  clsă  Leave$=" Hit a key for the source."ă  print" Screen 12 not possible.":printă  print" Hit a key to leave this programma."ă  printă  HitKey$=input$(1)ăresume EndProgăAntoni Gual                    GUI SCROLLBOX                  agual@eic.ictnet.es            10-24-00 (22:30)       QB, PDS                875  28599    SCROLLBX.BAS'---------------------------------------------------------------------------ă'GUIScrollBox.BAS       By Antoni Gual                 agual@eic.ictnet.esă'---------------------------------------------------------------------------ă'To scroll or not to scroll...ă'Well, a scroller is a vey useful component to implementă'  file viewersă'  menusă'  list boxesă'  checklistsă'  drop down listsă'---------------------------------------------------------------------------ă'This is my contribution to scrollers.ă'ă'ţ It can scroll:ă' - Fixed length strings    in arrays and filesă' - Variable length strings in arrays and filesă'        (String arrays won't work in PDS)ă' - Any UDT's               in arrays and files (using a trick by Ethan Winer)ă'ţ Can scroll several windows at the same time, with different types of dataă'   in each window.ă'ţ This is as close I can imagine to using objects in QBă'ţ The text files have no size limit, and are no previously indexed, so theă'   display is inmediate. (and slow)ă'ţ UDT format and display format is passed as parameters, no need to alteră'   the routine to display different UDT's.(also slow)ă'ţ No mouse support at the momentă'---------------------------------------------------------------------------ăăDEFINT A-Ză'$INCLUDE: 'QB.BI'ăDECLARE SUB InitGUI ()                           'ăDECLARE SUB VIDEOPrintSO (r, c, sg, ofs&, start, lng, NC, atr) 'prints a str by seg &offsăDECLARE SUB VIDEOBox (r AS ANY, atr, bor)         'box border routineăDECLARE SUB VIDEOFillSq (r, c, nr, NC, car, atr)   'fills a rect in screenăDECLARE SUB VIDEORect (func, R1, C1, nr, NC, atr, car) 'changes atrib of a rectăCONST vrrecolor = 1, vrscroll = 2, vrfill = 3ăDECLARE FUNCTION GUIScrollBox% (N, comm, value)    'This is!ăDECLARE FUNCTION StrCenter$ (b$, l%, char%)        'center a string in a stringăDECLARE SUB LINEbINPUT (f%, a$)                    'backwards LINE INPUTăDECLARE SUB VIDEOScroll (R1, C1, nr, NC, lines%)    'Scroll a windowăă'------------------------useful functions-----------------------------------ă'$DYNAMIC$ă'-------------------------keys----------------------------------------------ăCONST KHOME = -&H47, kctlhome = -&H77ăCONST kend = -&H4F, kctlend = -&H75ăCONST kpgup = -&H49, KCTLpgup = -&H84ăCONST kpgdn = -&H51, kCTLpgdn = -&H76ăăCONST KLEFT = -&H4B, kCTLleft = -&H73ăCONST KRIGHT = -&H4D, kCTLright = -&H74ăCONST kup = -&H48ăCONST kdown = -&H50ăăCONST kinsert = -&H52ăCONST kdelete = -&H53ăăCONST kenter = &HD, kctlenter = &HAăăCONST kesc = &H1BăCONST ktab = &H9, kctltab = -&HFăCONST kbsp = &H8, kctlbsp = &H7FăCONST kspc = &H20ăăDIM SHARED KEYCODEăă'----------------------gui------------------------------------------------ăTYPE rectă	R1          AS INTEGER    'top left row (including frame)ă	nr          AS INTEGER    'number of rows (including frame)ă	C1          AS INTEGER    'top left col (including frame)ă	NC          AS INTEGER    'number of cols (including frame)ăEND TYPEăDIM SHARED rtemp AS rectăDIM SHARED borders(0) AS STRING * 6: borders(0) = "ÄłÚżŔŮ"ăDIM SHARED kolors(6, 6)ăDIM SHARED REGS AS REGTYPEă'---------------------scroller "object"-------------------------------------ăTYPE scrollertypeă	'window parms  (four first make a rect, don't move or modify them!)ă	R1          AS INTEGER    'top left row (including frame)ă	nr          AS INTEGER    'number of rows (including frame)ă	C1          AS INTEGER    'top left col (including frame)ă	NC          AS INTEGER    'number of cols (including frame)ă	title       AS STRING * 30ă	atr         AS INTEGERă	'scroller paramsă	typ         AS INTEGERă							  ă	'displayed array statusă	sg          AS INTEGER    'segment of the array to scroll  or file numberă	of          AS LONG       ' array offset of the first row to displayă							  ' file offset of first row to displayă	WDTH        AS INTEGER    'width of each row (very important except typ=1)ă	nlin        AS LONG       'number of valid linesă	STARTC      AS INTEGER    'first column to displayă	'current status  ------- following data can not be initializedă	toplin      AS LONG       'ordinal of the line in top of the scrolleră	sel         AS LONG       'ordinal of the line currently highlightedă	status      AS INTEGER    '0 not inită	txtfptr     AS LONG       'a text file needs pointer:ă							  'if negative is topleft ptră							  'if positive is bottomright ptrăEND TYPEăă'scroller type constantsăCONST ScTypCLSF = 5, ScTypVLSF = 6, ScTypUDTF = 7ăCONST ScTypUNDA = 0, ScTypCLSA = 1, ScTypUDTA = 2, ScTypVLSA = 3ăăă'these constants are useful to pass format to UDT scrollersăCONST scint = 1, sclong = 2, scsingle = 3, scdouble = 4, scstring = 5ăăăDIM sC(1 TO 10) AS scrollertypeăDIM SHARED sctemp AS scrollertypeăDIM SHARED scst$(1 TO 10)ă'------------------------screen----------------------------------------------ăTYPE screentypeă	nr          AS INTEGER      'num of colsă	NC          AS INTEGER      'num of rowsă	bytesline   AS INTEGER      'bytes to skip to go to same column in next lineă	mouseRscale AS INTEGER      'value to divide mouse pos to  have rowsă	mouseCscale AS INTEGERă	pagenr      AS INTEGER      'current pageă	sg          AS INTEGER      'segment of the display bufferă	of          AS LONG         'offset of the cuurent pageă	pal         AS INTEGERăEND TYPEăDIM SHARED skreen AS screentypeăăă'create some test arrays------------------------------------------ăăTYPE UDTTYPEă  NAM AS STRING * 20ă  AGE AS INTEGERă  CREDIT AS SINGLEă  destination AS STRING * 15ăEND TYPEăCONST udtreclen = 20 + 2 + 4 + 15ăăăREDIM txt(1 TO 800)  AS STRING * 76 'these arrays contain the items to scrollăREDIM tx$(1 TO 800)                'and are not shared by the scroller routines!ăREDIM clients(1 TO 50)  AS UDTTYPEăăă'use program listing to build fixed and variable length string arrays to testăOPEN "scrollbx.bas" FOR INPUT AS #1ăt = 0ăWHILE ((t < 800) AND (NOT EOF(1)))ă   t = t + 1ă   LINE INPUT #1, tx$(t)ă   LSET txt(t) = tx$(t)ăWENDăCLOSE 1ăă'build EXAMPLEs of an array  of UDT, a file of UDT and a fixed length sting fileăăăf = FREEFILE: OPEN "udtfile.agv" FOR RANDOM AS #f LEN = udtreclenăFORM$ = "\               \  ###   ######.# \                  \"ălen1 = LEN(FORM$)ăf1 = FREEFILE: OPEN "udtfile1.agv" FOR OUTPUT AS #f1 LEN = LEN(FORM$)ăi = 1ăFOR ii = 0 TO 1ăRESTORE CLISTăFOR iii = 1 TO 25ă  READ clients(i).NAM, clients(i).AGE, clients(i).CREDIT, clients(i).destinationă  PUT #f, , clients(i)ă  PRINT #f1, USING FORM$; clients(i).NAM; clients(i).AGE; clients(i).CREDIT; clients(i).destination;ă  i = i + 1ăNEXTăNEXTăCLOSE f, f1ăăăCLIST:ăDATA John Doe,56,545.3, New York CityăDATA Patti Smith,43,456.34 , LondonăDATA Steven Spielberg, 61,345.3, MadridăDATA Pepe Garcia,21,123323.2, BarcelonaăDATA Nancy Davolio,34,45.78,MarrakechăăDATA Francisco Garcia,37,45.34, Tel-AvivăDATA Nigel Cozens,34,5678.2, BeijingăDATA Marcos Regueiro,24,-234.43, TokioăDATA William Clinton,52,45.34,Los AngelesăDATA Agnes Agboton,37,456.9,Porto NovoăăDATA Flora Franquet,23,4156.9 ,LisbonăDATA Peter Rawlins,21,4156.93, La HabanaăDATA Antoni Villalta,45,23.2, HoustonăDATA Carlos Indalecio,35,341.2, TegucigalpaăDATA Uma Thurman,47,-2354.3, Mauritius IslandsăăDATA Jordi Pujol,65,357.5,CanberraăDATA Jean-Pierre Palacios,34,65.45,BangkokăDATA Eudald Carbonell,53,3121.1,DamascusăDATA Jack Daniels,35,343.1,AnchorageăDATA Cristina Sopena ,76,678.54,AmsterdamăăDATA Miguel Lopez,56,345.2,RomeăDATA Ana Maria Sanchez,32,4567.4,BudapestăDATA Antoni Gual,45,2323.2,RawalpindiăDATA Teresa Lluis,37,48754.1,JohannesburgăDATA Pilar Pallares,67,384.17,Dakarăăăăăăă'init screen and screen values array -----------------------------------------ăCONST palettenr = 3ăInitGUIăă'use sctemp to init scroller's parameters------------------------------------ăă'init a text file scrolleră' needs an open file number to be passed to ităă'title and typeăsctemp.title = "Text File Scroller": sctemp.typ = ScTypVLSFă'window size and posăsctemp.nr = 14: sctemp.NC = 35: sctemp.R1 = 1: sctemp.C1 = 1ă'ptr to fileăf = FREEFILE: OPEN "scrollbx.bas" FOR INPUT AS #făsctemp.sg = f: sctemp.of = 1: sctemp.WDTH = 0: sctemp.nlin = tănum1 = GUIScrollBox(0, 1, 0)ăă'init a constant length string array scrollerăsctemp.title = "Fixed Length String Array": sctemp.typ = ScTypCLSAăsctemp.nlin = t: sctemp.nr = 14: sctemp.NC = 35: sctemp.R1 = 17: sctemp.C1 = 2ăsctemp.sg = VARSEG(txt(1)): sctemp.of = VARPTR(txt(1)): sctemp.WDTH = LEN(txt(1))ănum2 = GUIScrollBox(0, 1, 0)ăă'init a variable length string array scrollerăsctemp.title = "Variable Length String Array": sctemp.typ = ScTypVLSAăsctemp.nr = 14: sctemp.NC = 35: sctemp.R1 = 33: sctemp.C1 = 3ăsctemp.sg = VARSEG(tx$(1)): sctemp.of = VARPTR(tx$(1))ănum3 = GUIScrollBox(0, 1, 0)ăăă'init a record array scrollerăsctemp.title = "Record Array": sctemp.typ = ScTypUDTAăsctemp.nr = 14: sctemp.C1 = 38: sctemp.R1 = 1: sctemp.NC = 38ăsctemp.nlin = 50ăsctemp.sg = VARSEG(clients(1)): sctemp.of = VARPTR(clients(1)):ăsctemp.WDTH = udtreclenănum4 = GUIScrollBox(0, 1, 0)ăă'records need a more init: you must pass the UDT def and the display formată'encoded in a string.ăăb$ = "\            \ ":ă'first field  is a string      has 20 ch. will be displayed USING B$ăscst$(num4) = CHR$(scstring) + CHR$(20) + CHR$(LEN(b$)) + b$ăăb$ = "### "ă'second field               is an INT     will be displayed USING B$ăscst$(num4) = scst$(num4) + CHR$(scint) + CHR$(LEN(b$)) + b$ăăb$ = "######.## "ă'third field                is a SINGLE      will be displayed USING B$ăscst$(num4) = scst$(num4) + CHR$(scsingle) + CHR$(LEN(b$)) + b$ăăb$ = "\          \":ă'LAST field                 is a string      has 15ch.  will be displayed USING B$ăscst$(num4) = scst$(num4) + CHR$(scstring) + CHR$(15) + CHR$(LEN(b$)) + b$ădummy = GUIScrollBox(num4, 5, 0)ăăăă'init a record file scroller(needs an open file number to be passed to it)ăă'header and typeăsctemp.title = "Record file": sctemp.typ = ScTypUDTFăă'window and posăsctemp.C1 = 39: sctemp.R1 = 17: sctemp.NC = 37ăă'file: always open files to scoll as binariesăf = FREEFILE: OPEN "udtfile.agv" FOR BINARY AS #făsctemp.sg = f: sctemp.of = 1: sctemp.WDTH = udtreclenăă'initănum5 = GUIScrollBox(0, 1, 0)ăă'reuse the format description we've buildăscst$(num5) = scst$(num4)ăă'displayădummy = GUIScrollBox(num5, 5, 0)ăăă'init a fixed length string file scroller(needs an open file number to be passed to it)ăă'header and typeăsctemp.title = "Fixed Length string file": sctemp.typ = ScTypCLSFăă'window and posăsctemp.C1 = 40: sctemp.R1 = 33: sctemp.NC = 37ăă'file: always open files to scoll as binariesăf = FREEFILE: OPEN "udtfile1.agv" FOR BINARY AS #f LEN = len1ăsctemp.sg = f: sctemp.of = 1: sctemp.WDTH = len1ă'initănum6 = GUIScrollBox(0, 1, 0)ăă'---------------------------------------------------------------------------ăăăLOCATE 50, 1: PRINT "Up/Dn PgUp/PgDn Home/End scroll, Tab/Sh+Tab change win, Enter select, Esc quit";ăwin = 1ăă'main loop-------------------------------------------------------------------ăDOă	k$ = INKEY$ă	IF LEN(k$) THENă		KEYCODE = ASC(RIGHT$(k$, 1)): IF ASC(k$) = 0 THEN KEYCODE = -KEYCODEă	ELSEă		KEYCODE = 0ă	END IFă	SELECT CASE KEYCODEă	CASE ktab: win = win + 1: KEYCODE = 0ă	CASE kctltab: win = win - 1: KEYCODE = 0ă	END SELECTă	IF win > 6 THEN win = 1ă	IF win < 1 THEN win = 6ăă	selected = GUIScrollBox(win, 0, 0)   'call scroller to do the work!ăLOOP UNTIL selectedăCLOSEă'display results-------------------------------------------------------------ăCLOSEăSELECT CASE winăCASE 1ă	a$ = "Text File"ăCASE 2ă	a$ = "Fixed length text Array"ăCASE 3ă	a$ = "Dynamic string Array"ăCASE 4ă	a$ = "UDT Array"ăCASE 5ă	a$ = "UDT File"ăCASE 6ă	a$ = "Fixed length text file"ăăEND SELECTăSELECT CASE selectedăCASE &H8000ă	 b$ = "escape on"ăCASE IS < 0ă	b$ = "space on line " + STR$(-selected) + " of"ăCASE IS > 0ă	b$ = "ENTER on line " + STR$(selected) + " of"ăEND SELECTăCOLOR 2, 0: CLS : PRINT "You hit " + b$; " window "; a$ăENDăăă'----------------------error handling--------------------------------------ădiskreadyerror: errata% = ERR: RESUME NEXTăă'----------------------DATA-------------------------------------------------ăborders:ăDATA "±±±±±±"ăDATA "ÄłÚżŔŮ"ăDATA "ÍşÉ»ČĽ"ăDATA "-|++++"ăDATA "@@@"ăăcolors:ă'0= normal textă'1= active cursoră'2= inactive cursoră'3= title,window header,hilighted menu itemă'4= boxesă'back/foreă'       0    1    2    3    4    5    6ăDATA &h30,&h1F,&h3F,&h4F,&h10,&h00,&h00ăDATA &h70,&h2F,&h73,&h4F,&h12,&h00,&h00ăDATA &h17,&h4F,&h1C,&h3F,&h17,&h00,&h00ăăFUNCTION GUIScrollBox% (N%, comm%, value%)ă	'scrolls a fixed length string array passed as a parameteră	'all init params must be passed in the sctemp scrollertype variableă	'r1,c1,nr,cr,seg,ofs,wdth,nlin,startc must be passedă	'n=num of box to scrollă	'comm=0 move cursor   returns key pressedă	'comm=1 create, without saving bg, returns scroller numă	'comm=2 create, saving bg ,returns scroller numă	'comm=3 focus offă	'comm=4 focus onă	'comm=5 redrawă	'comm=6 killă	'value not usedă	'returnsă	'    the line number if enter pressed,ă	'    minus line number if space pressed (can be used externaly to mark a line)ă	'    &h8000 if escape pressedă	'------------------------------------------------------------------------ă	SHARED sC() AS scrollertypeă	DIM oldsel AS LONG, oldtop AS LONGă	STATIC oldnum, RS, cs, buf$, l$ă	IF RS = 0 THEN l$ = SPACE$(5)ă	IF N THEN IF sC(N).R1 = 0 THEN EXIT FUNCTIONă	SELECT CASE commă	CASE 3ă	   VIDEORect vrrecolor, sC(N).R1 + 1 + sC(N).sel - sC(N).toplin, sC(N).C1 + 1, 1, sC(N).NC, kolors(2, 0), 0ă	CASE 4ă	   VIDEORect vrrecolor, sC(N).R1 + 1 + sC(N).sel - sC(N).toplin, sC(N).C1 + 1, 1, sC(N).NC, kolors(1, 0), 0ă	CASE 0ă		IF N% <> oldnum THENă			'call recursively GUIScrollBox to change cursors to indicate focus changeă			FOR i = 1 TO UBOUND(sC, 1)ă				IF i <> N% THENă					dummy = GUIScrollBox(i, 3, 0)ă				ELSEă					dummy = GUIScrollBox(i, 4, 0)ă				END IFă			NEXTă		END IFă		IF KEYCODE = 0 THEN EXIT FUNCTIONă		IF N% <> oldnum THEN : RS = sC(N).R1 + 1: cs = sC(N).C1 + 1: buf$ = SPACE$(sC(N).NC)ă		ă		'do movesă		oldnum = Nă		oldsel = sC(N).selă		oldtop = sC(N).toplină		SELECT CASE KEYCODEă		CASE kupă			KEYCODE = 0ă			IF sC(N).sel > 1 THEN sC(N).sel = sC(N).sel - 1ă			IF sC(N).sel < sC(N).toplin THEN sC(N).toplin = sC(N).selă			scroll = sC(N).toplin - oldtopă		CASE kdownă			KEYCODE = 0ă			IF sC(N).sel < sC(N).nlin THEN sC(N).sel = sC(N).sel + 1ă			IF sC(N).sel > (sC(N).toplin + (sC(N).nr - 1)) THEN sC(N).toplin = sC(N).sel - sC(N).nr + 1ă			scroll = sC(N).toplin - oldtopă		CASE kpgupă			KEYCODE = 0ă			sC(N).toplin = sC(N).toplin - sC(N).nr: sC(N).sel = sC(N).sel - sC(N).nră			IF sC(N).toplin < 1 THEN sC(N).toplin = 1ă			IF sC(N).sel < 1 THEN sC(N).sel = 1ă			scroll = sC(N).toplin - oldtopă		CASE kpgdnă			KEYCODE = 0ă			sC(N).toplin = sC(N).toplin + sC(N).nr: sC(N).sel = sC(N).sel + sC(N).nră			IF sC(N).toplin >= sC(N).nlin - sC(N).nr + 1 THEN sC(N).toplin = sC(N).nlin - sC(N).nr + 1ă			IF sC(N).toplin < 0 THEN sC(N).toplin = 0ă			IF sC(N).sel >= sC(N).nlin THEN sC(N).sel = sC(N).nlină			scroll = sC(N).toplin - oldtopă		'CASE KLEFTă		'    KEYCODE = 0ă		'    IF SC(N).STARTC > 0 THEN SC(N).STARTC = SC(N).STARTC - 1ă		'CASE KRIGHTă		'    KEYCODE = 0ă		'    IF SC(N).STARTC < SC(N).WDTH - SC(N).NC - 1 THEN SC(N).STARTC = SC(N).STARTC + 1ă		CASE KHOMEă			KEYCODE = 0ă			sC(N).toplin = 1: sC(N).sel = 1ă			scroll = sC(N).nr: extra = 1ă		CASE kendă			KEYCODE = 0ă			sC(N).sel = sC(N).nlin: sC(N).toplin = sC(N).sel - sC(N).nr + 1ă			IF sC(N).toplin < 1 THEN sC(N).toplin = 1ă			scroll = -sC(N).nr: extra = 1ă		CASE kenteră			KEYCODE = 0ă			GUIScrollBox = sC(N).sel: EXIT FUNCTIONă		CASE kspcă			KEYCODE = 0ă			GUIScrollBox = -sC(N).sel: EXIT FUNCTIONă		CASE kescă			KEYCODE = 0: GUIScrollBox = &H8000: EXIT FUNCTIONă		END SELECTă		'scroll = sc(n).toplin - oldtopă		IF ABS(scroll) > sC(N).nr THEN scroll = SGN(scroll) * sC(N).nră		GOSUB ScrllBxRedrawă	CASE 1, 2                        'CREATE NEW SCROLLERă		'find a free entry in the sc arrayă		i = 0ă		DOă			i = i + 1: IF i > UBOUND(sC, 1) THEN EXIT FUNCTIONă		LOOP UNTIL sC(i).R1 = 0ă		N = iă		'copy window and parameters to the sc arrayă		LSET sC(N) = sctempă		'init status valuesă		IF sC(N).typ = ScTypVLSF THENă			sC(N).txtfptr = sC(N).ofă			sC(N).nlin = LOF(sC(N).sg)ă		END IFă		sC(N).sel = 1: sC(N).toplin = 1: buf$ = SPACE$(sC(N).NC)ă		sC(N).status = 1: sC(N).STARTC = 0ă		RS = sC(N).R1 + 1: cs = sC(N).C1 + 1ă		'draw borderă		LSET rtemp = sC(N)ă		VIDEOBox rtemp, kolors(4, 0), 0ă		'headeră		b$ = StrCenter$(sC(N).title, sC(N).NC, 32)ă		VIDEOPrintSO sC(N).R1, sC(N).C1 + 1, VARSEG(b$), 0, CLNG(SADD(b$)), LEN(b$), sC(N).NC, kolors(3, 0)ă		'redraw interioră		scroll = sC(N).nr: GOSUB ScrllBxRedrawă		'return index of box createdă		GUIScrollBox% = Nă	CASE 5                             'RESETă		'reset statusă		sC(N).sel = 1: sC(N).toplin = 1: buf$ = SPACE$(sC(N).NC)ă		RS = sC(N).R1 + 1: cs = sC(N).C1 + 1ă		'redrawă		scroll = sC(N).nr: GOSUB ScrllBxRedrawă	CASE 6                             'KILLă		sC(N).R1 = 0ă		'if it's a get-put window, put back the background, else do nothingă	END SELECTăEXIT FUNCTIONăă'this scrolls the box, by calling apropriate line routineăScrllBxRedraw:ă	VIDEORect vrrecolor, RS + oldsel - oldtop, cs, 1, sC(N).NC, kolors(0, 0), 0ă	IF scroll THENă		VIDEORect vrscroll, sC(N).R1, sC(N).C1, sC(N).nr, sC(N).NC, scroll, 0ă		IF scroll > 0 THENă			t1 = sC(N).nr - scroll: t2 = sC(N).nr - 1: st = 1ă		ELSEă		  t1 = -scroll - 1: t2 = 0: st = -1ă		END IFă		FOR t = t1 TO t2 STEP stă			SELECT CASE sC(N).typă			CASE -1: GOSUB emptylineă			CASE ScTypCLSF, ScTypCLSA: GOSUB ConStrArrayLineă			CASE ScTypVLSF: GOSUB VarStrFileLineă			CASE ScTypUDTA, ScTypUDTF, 5: GOSUB UDTArrayLineă			CASE ScTypVLSA: GOSUB VarStrArrayLineă			END SELECTă			VIDEOPrintSO RS + t, cs, sg1, temp2&, sC(N).STARTC, l1, sC(N).NC, kolors(0, 0)ă		NEXTă	END IFă	'LOCATE sC(N).R1, sC(N).C1ă	'RSET l$ = STR$(sC(N).sel): PRINT l$;ă	VIDEORect vrrecolor, RS + sC(N).sel - sC(N).toplin, cs, 1, sC(N).NC, kolors(1, 0), 0ă	oldtop = sC(N).toplin: oldsel = sC(N).selăRETURNăă'these are the subs that build the lines sent to screenăăUDTArrayLine:ă	'DEV\NUL formatting trick courtesy of Ethan Winer's ibookă	temp2& = sC(N).of& + (sC(N).toplin + t - 1) * sC(N).WDTHă	sg& = sC(N).sgă	IF sC(N).typ = ScTypUDTF THENă		b$ = SPACE$(sC(N).WDTH)ă		SEEK sC(N).sg, temp2&ă		GET #sC(N).sg, , b$ă		temp2& = SADD(b$)ă		sg& = VARSEG(b$)ă	END IFă	i = 1: LSET buf$ = "": bufptr = 1ă	WHILE i < LEN(scst$(N))ă		 d = ASC(MID$(scst$(N), i)): i = i + 1ă		 IF d = 5 THEN sz = ASC(MID$(scst$(N), i)): i = i + 1ă		 scrlen = ASC(MID$(scst$(N), i)): i = i + 1ă		 FORM$ = MID$(scst$(N), i, scrlen)ă		 null = FREEFILE: OPEN "\DEV\NUL" FOR RANDOM AS null LEN = 255ă		 DEF SEG = sg&ă		 SELECT CASE dă		 CASE 1: sz = 2: PRINT #null, USING FORM$; CVI(CHR$(PEEK(temp2&)) + CHR$(PEEK(temp2& + 1)))ă		 CASE 2: sz = 4: PRINT #null, USING FORM$; CVL(CHR$(PEEK(temp2&)) + CHR$(PEEK(temp2& + 1)) + CHR$(PEEK(temp2& + 2)) + CHR$(PEEK(temp2& + 3)))ă		 CASE 3: sz = 4: PRINT #null, USING FORM$; CVS(CHR$(PEEK(temp2&)) + CHR$(PEEK(temp2& + 1)) + CHR$(PEEK(temp2& + 2)) + CHR$(PEEK(temp2& + 3)))ă		 CASE 4: sz = 8: d$ = SPACE$(sz)ă			 FOR j = 1 TO sz: MID$(d$, j, 1) = CHR$(PEEK(temp2& + j - 1)): NEXTă			 PRINT #null, USING FORM$; CVD(d$)ă		 CASE 5: d$ = SPACE$(sz)ă			 FOR j = 1 TO sz: MID$(d$, j, 1) = CHR$(PEEK(temp2& + j - 1)): NEXTă			 PRINT #null, USING FORM$; d$ă		 END SELECTă		 LINE INPUT #null, c$ă		 CLOSE null             'flush would be enough but QB does'nt have ită		 MID$(buf$, bufptr, scrlen) = c$: bufptr = bufptr + scrlenă		 temp2& = temp2& + sză		 i = i + scrlenă	WENDă	sg1 = VARSEG(buf$): temp2& = SADD(buf$): l1 = LEN(buf$)ă	ăRETURNăăă'I think it will not work in PDSăVarStrArrayLine:ă	temp& = sC(N).of + (sC(N).toplin + t - 1) * 4ă	DEF SEG = sC(N).sgă		 l1 = PEEK(temp&) + 256& * PEEK(temp& + 1)ă		 temp2& = PEEK(temp& + 2) + 256& * PEEK(temp& + 3)ă	DEF SEGă	sg1 = sC(N).sgăRETURNăăemptyline:ă	LSET buf$ = ""ă	sg1 = VARSEG(buf$): temp2& = SADD(buf$): l1 = LEN(buf$)ăRETURNăăConStrArrayLine:ă	temp2& = sC(N).of& + CLNG(sC(N).toplin + t - 1) * sC(N).WDTHă	sg1 = sC(N).sg: l1 = sC(N).WDTHă	IF sC(N).typ = ScTypCLSF THENă		b$ = SPACE$(sC(N).WDTH)ă		SEEK #sC(N).sg, temp2&: GET #sC(N).sg, , b$ă		temp2& = SADD(b$): sg1 = VARSEG(b$)ă	END IFăRETURNăăVarStrFileLine:ăIF scroll > 0 THENă	IF extra = 1 THEN extra = 0: sC(N).txtfptr = 1ă	IF sC(N).txtfptr < 0 THENă		FOR ii = 1 TO sC(N).nră			IF SEEK(sC(N).sg) = LOF(sC(N).sg) THEN sC(N).txtfptr = LOF(sC(N).sg): RETURNă			LINE INPUT #sC(N).sg, b$: sC(N).txtfptr = SEEK(sC(N).sg)ă		NEXTă	END IFă	SEEK sC(N).sg, sC(N).txtfptr:ă	IF NOT EOF(sC(N).sg) THENă		LINE INPUT #sC(N).sg, b$ă		sC(N).txtfptr = SEEK(sC(N).sg)ă	END IFă	sg1 = VARSEG(b$): temp2& = SADD(b$): l1 = LEN(b$)ă ELSEă	IF extra = 1 THEN extra = 0:  sC(N).txtfptr = -LOF(sC(N).sg)ă	IF sC(N).txtfptr > 0 THENă		FOR ii = 1 TO sC(N).nră			IF SEEK(sC(N).sg) < sC(N).of THEN sC(N).txtfptr = -sC(N).of: RETURNă			LINEbINPUT sC(N).sg, b$: sC(N).txtfptr = -SEEK(sC(N).sg)ă		NEXTă	END IFă	SEEK sC(N).sg, -sC(N).txtfptr: LINEbINPUT sC(N).sg, b$ă	sC(N).txtfptr = -SEEK(sC(N).sg)ă	sg1 = VARSEG(b$): temp2& = SADD(b$): l1 = LEN(b$)ăEND IFăRETURNăăEND FUNCTIONăăREM $STATICăSUB InitGUIă'simply sets screen to 80 x 50, init some variables, reads colorsăCOLOR 15, 0: WIDTH , 50: CLSăskreen.NC = 80ăskreen.nr = 50ăskreen.bytesline = 160ăskreen.pagenr = 0ăskreen.sg = &HB800ăskreen.pal = 0ăDEF SEG = &H40ăskreen.of = 256& * PEEK(&H4F) + PEEK(&H4E)ăDEF SEGăă'DetectWinTempăăRESTORE colorsăFOR j = 1 TO 3ă	FOR i = 0 TO 6ă		READ kolors(i, j)ă	NEXTăNEXTăăFOR i = 0 TO 6ă	kolors(i, 0) = kolors(i, palettenr)ăNEXTăăEND SUBăăSUB LINEbINPUT (f, a$)ă'returns previous line in a text file and set cursor at beggining of returnedă'line. If length of line >constant lol, it will hook to the current line..ă'used by the text file scroller to scroll backăCONST lol = 300ătmp& = SEEK(f)ăIF tmp& = 1 THEN EXIT SUBătmp1& = tmp& - lolăIF tmp1& < 1 THEN tmp1& = 1ăSEEK f, tmp1&ăDOă	tmp1& = SEEK(f)ă	LINE INPUT #f, a$ăLOOP UNTIL SEEK(f) >= tmp&ăSEEK f, tmp1&ăăEND SUBăăSUB scrllBxIdeasă'       headersă'ok     standard attributesă'       move keys loop outsideă'       mouseă'ok     make scroll faster by using int 10Hă'       scrollbară'ok     find a scroll mode for text files where speed is not dependant onă'           how far pointer is on textă'ok     implement scroll of text mode files window by windowă'       files should not need nr of lines parameteră'       provide a solution for arrays/files not filling the windowă'       maybe we could implement buffered line input?ă'       expand tabsăă'ok     unlimited text filesă'ok     option udtă'ok     option records fileă'ok     option variable length stringă'       use array descriptors to avoid passing width and nlin paramsăEND SUBăăFUNCTION StrCenter$ (b$, l, char)ă'makes a string of length l, fills int with char and centers b$ on ităc$ = LTRIM$(RTRIM$(b$))ătemp = (l - LEN(c$) + 1) \ 2ăIF temp < 0 THENă	StrCenter$ = MID$(c$, -temp)ăELSEă   a$ = STRING$(l, char)ă   MID$(a$, temp) = c$ă   StrCenter$ = a$ăEND IFăa$ = "": c$ = ""ăEND FUNCTIONăăSUB VIDEOBox (r AS rect, atr%, bor%)ă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă' Draws the menu-window borderă'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄă'top lineăVIDEORect vrfill, r.R1, r.C1 + 1, 1, r.NC, atr%, ASC(MID$(borders(bor%), 1, 1))ă'bottom lineăVIDEORect vrfill, r.R1 + r.nr + 1, r.C1 + 1, 1, r.NC, atr%, ASC(MID$(borders(bor%), 1, 1))ă'left lineăVIDEORect vrfill, r.R1 + 1, r.C1, r.nr, 1, atr%, ASC(MID$(borders(bor%), 2, 1))ă'right lineăVIDEORect vrfill, r.R1 + 1, r.C1 + r.NC + 1, r.nr, 1, atr%, ASC(MID$(borders(bor%), 2, 1))ăVIDEORect vrfill, r.R1, r.C1, 1, 1, atr%, ASC(MID$(borders(bor%), 3, 1))ăVIDEORect vrfill, r.R1, r.C1 + r.NC + 1, 1, 1, atr%, ASC(MID$(borders(bor%), 4, 1))ăVIDEORect vrfill, r.R1 + r.nr + 1, r.C1, 1, 1, atr%, ASC(MID$(borders(bor%), 5, 1))ăVIDEORect vrfill, r.R1 + r.nr + 1, r.C1 + r.NC + 1, 1, 1, atr%, ASC(MID$(borders(bor%), 6, 1))ăăEND SUBăăSUB VIDEOGETPUT (a%(), page, R1, C1, nr, NC, ORD)ă'THIS IS A GET-PUT FOR SCREEN 0ă'----------------------------------------------------------------------------ă'order 1 save screen to arrayă'      0 put array to screen, PRESERVING ITă'      -1 put to screen and erase arrayă'You can specify r1, c1 when putting.ă'array has to be dynamic, as it will be redimmedăăSELECT CASE ORDăCASE 1:                                        'GETă	IF nr = 0 OR NC = 0 THEN EXIT SUBă	size = NC * nr * 2 \ 2 + 1ă	REDIM a%(0 TO size)ă	aseg = VARSEG(a%(0))ă	DEF SEG = VARSEG(a%(0)): i = VARPTR(a%(0)):ă	POKE i, R1: i = i + 1: POKE i, C1: i = i + 1ă	POKE i, nr: i = i + 1: POKE i, NC: i = i + 1ă	PTR1 = skreen.ofă	FOR j = 0 TO nr - 1ă		ptr = PTR1ă		FOR k = 0 TO NC - 1ă		  DEF SEG = TXTsCRNSEGă		  b = PEEK(ptr): ptr = ptr + 1ă		  c = PEEK(ptr): ptr = ptr + 1ă		  DEF SEG = asegă		  POKE i, b: i = i + 1ă		  POKE i, c: i = i + 1ă		NEXTă		PTR1 = PTR1 + scr.maxc * 2ă	NEXTă	DEF SEGăCASE -1, 0:                                       'PUTă	IF UBOUND(a%, 1) < 2 THEN EXIT SUBă	aseg = VARSEG(a%(0))ă	DEF SEG = aseg: i = VARPTR(a%(0))ă	R11 = PEEK(i): i = i + 1: C11 = PEEK(i): i = i + 1ă	nr = PEEK(i): i = i + 1: NC = PEEK(i): i = i + 1ă	IF R1 = 0 THEN R1 = R11ă	IF C1 = 0 THEN C1 = C11ă	PTR1 = skreen.ofă	FOR j = 0 TO nr - 1ă		ptr = PTR1ă		FOR k = 0 TO NC - 1ă		  DEF SEG = VARSEG(a%(0))ă		  b = PEEK(i): i = i + 1ă		  c = PEEK(i): i = i + 1ă		  DEF SEG = TXTsCRNSEGă		  POKE ptr, b: ptr = ptr + 1ă		  POKE ptr, c: ptr = ptr + 1ă		NEXTă		PTR1 = PTR1 + scr.maxc * 2ă	NEXTă	DEF SEGă	IF ORD = -1 THEN REDIM a%(0)ăEND SELECTăăăEND SUBăăSUB VIDEOPrintSO (r, c, sg, of&, start, lng, NC, atr) STATICă'prints directly to screen from a mem position, aligning to left and paddingă'right with spaces. Writes to the current pageă'---------------------------------------------------------------------------ă'Needs skreen UDT to be initializedă'r,c start row and column,   nc  number of columnsă'sg, of& start mem position, lng mem lengthă'atr attribute to useă'---------------------------------------------------------------------------ă	tmp4 = atră	seg2 = skreen.sgă	seg1 = sgă	tmp2& = of& + startă	tmp1& = skreen.of + 2 * (skreen.NC * (r - 1) + (c - 1))ă	  IF NC > lng - start THEN tmp5 = lng - start ELSE tmp5 = NCă	   FOR i = 1 TO tmp5ă		   DEF SEG = seg1: tmp3 = PEEK(tmp2&)ă		   DEF SEG = seg2: POKE tmp1&, tmp3ă		   tmp1& = tmp1& + 1: POKE tmp1&, tmp4ă		   tmp1& = tmp1& + 1: tmp2& = tmp2& + 1ă	   NEXTă	   IF NC THENă		   DEF SEG = seg2ă		   FOR i = lng + 1 TO NCă			   POKE tmp1&, 32: tmp1& = tmp1& + 1ă			   POKE tmp1&, tmp4: tmp1& = tmp1& + 1ă		   NEXTă	   END IFă	   DEF SEGăEND SUBăăSUB VIDEORect (func, R1, C1, nr, NC, atr, car)ă'scrolls, fills or changes atribute of a rectangular area of screenă'----------------------------------------------------------------------------ăCONST Byte = 256&ăSELECT CASE funcă	CASE vrscroll               'scrollă		lines = atră		IF ABS(lines) > NC - 2 THEN lines = 0ă		REGS.bx = Byte * kolors(0, 0)ă		REGS.cx = Byte * R1 + C1ă		REGS.dx = Byte * (R1 + nr - 1) + (C1 + NC - 1)ăă		SELECT CASE SGN(lines)ă			CASE 0: REGS.ax = &H600ă			CASE 1: REGS.ax = Byte * 6 + ABS(lines)ă			CASE -1: REGS.ax = Byte * 7 + ABS(lines)ă		END SELECTă		CALL interrupt(&H10, REGS, REGS)ă   ă	CASE vrfill, vrrecolor                  'fill, change atributeă		tmp2& = skreen.of + 2 * (skreen.NC * (R1 - 1) + (C1 - 1))ă		tmp1& = tmp2&ă		DEF SEG = skreen.sgă		FOR j = 1 TO nră			FOR i = 1 TO NCă				IF func = vrfill THEN POKE tmp1&, cară				tmp1& = tmp1& + 1: POKE tmp1&, atr: tmp1& = tmp1& + 1ă			NEXTă			tmp2& = tmp2& + skreen.bytesline: tmp1& = tmp2&ă		NEXTă		DEF SEGă	END SELECTăEND SUBăAntoni Gual                    FAST JPEG VIEWER FOR SVGA      agual@eic.ictnet.es            12-24-99 (15:48)       QB,PDS                 1487 42644    Jpegv4.bas  '===========================================================================ă' Subject: FAST JPEG VIEWER FOR SVGA         Date: 12-24-99 (15:48)       ă' Author:  Antoni Gual                       Code: QB, PDS                ă' Origin:  agual@eic.ictnet.es             Packet: GRAPHICS.ABCă'===========================================================================ăDECLARE SUB svgappgrey (x%, y%, lum%)ăDECLARE SUB SVGAGetData ()ăDECLARE FUNCTION SVGASelectMode% ()ăDECLARE SUB SVGAPPixel (x%, y%, r%, g%, b%)ăDECLARE SUB JPEGViewParms ()ăDECLARE FUNCTION NxtBit% ()ăDECLARE SUB JPEGGetParms (jfile%)ăDECLARE FUNCTION filesel$ (prompt$, match%, ext$)ăDECLARE SUB JPEGGet8x8 (vector%(), HuffDcNum%, HuffACNum%, quantNum%, dcCoef%, viw%)ăDECLARE SUB SelectVGAMode (rb%, gg%)ăDECLARE FUNCTION JPEGGetByte% ()ăDECLARE FUNCTION SVGASetMode% (MODE%)ăDECLARE SUB SVGAPrint (cad$, x%, y%, r%, g%, b%)ăDECLARE SUB JPEGPut (jfile%, x0%, y0%)ăă'............................................................................ă'FAST! JPEG Viewer for SVGA  by Antoni Guală'ă'Original program by Dmitry Brantă'ă'IMPORTANT:ă'  -This program will run only if you have a SVGA card VESA compatible with ată'   least 0.5 Mb memory.ă'  -Some resolutions available in your video card could need scan fequenciesă'   out of the range of your monitor. Try using uour card's software to reduceă'   the refresh frequency of the image.ă'  -Some old cards are VESA 1.0 compatible. They use propietary hicolor modesă'   different than standard VESA 1.2 and 2, so the colors displayed could notă'   be very real. In these cases you could try the 8 pixel modes..ăă'The ABC packets give me oportunity of learning about new issues in programmingă'by analyzing the work of other people.ă'When the issue is as complicated as is the JPG format, the snippets must beă'exceptionally well coded and self-explaining, as Dmitry's was.Thanks, Dmitry!ă'Well, to get rid of the bugs I've created, I also had to read a lot ofă'format specs for JPEG found in www.wotsit.com...ăă'Why I send a recoding of the same program? Well, here are the features:ă'ă'- No libraries, only interrupt calls. Not a line of assembler!.ă'  It can be run in QBasic, if previously source is processedă'  with the interrupt translator by Mark Andryk (in INTERRUPT.ABC).ă'ă'- Auto detects suitable SVGA modes.ă'  As most SVGA cards achieve their higher resolutions using 8 bits/pixel andă'  a palette (as Mode 13), these modes are available.ă'  In these modes, the user has two options, display black/ and white oră'  approximative color.ă'ă'- Displays color in  all 15,16,24 and 32 bits direct color VESA modes.ă'ă'- Uses 8bits modes to display fast the monochrome images or aproximative color.ă'ă'- Displays the JPEG file parameters.ă'ă'- "User friendly" file selection. The same old routine...ă'ă'- Auto-centers the image, even if thatďs bigger than the chosen screen.ă'ă'- The parts of the image not displayed are skipped fast.ă'ă'- Is 10 times faster than the original program!ă' I achieved a x3 increase of speed using the usual optimization techniques..ă' I saw the program spent a 80% of his time calculating the DCT, so Iă' implemented the Loeffler-Ligtenbert-Moschytz algorythm I found in the Netă' (I simply translated from Pascal, I was unable to find the theory behind it.)ă' There's another algorythm still faster, the Arai-Agui-Nakajima that couldă' improve the speed a further 20%...ă' After it I've substituted the ASM VESA library of the original proogramă' with BAsic routines, so I lost a 20%-30% in speed.ă' The program, when compiled, is still 5 times slower than Paint Shop Pro 4.ă' I think one of the main reasons is the lack of bit shift instructionsă' in QB.ă'............................................................................ă' If you want to make it faster:ă' Time spent in each phase:ă'  -44%  getting data from file and doing Huffman decodingă'  -30%  calculating IDCT'să'  -20%  putting pixels on SVGA screenă'  - 6%  in the main JPEGPut (generation of color components, interlacing)ă'ă'  -Implement the Arai-Agui-Nakajima inverse DCTă'  -Translate it to PowerBasic or to Turbo Pascal ;)ă'ă'............................................................................ă'Enjoy,and tell me about!ă'ă'Antoni agual@eic.ictnet.esă'ă'.............................................................................ăăă'$INCLUDE: 'qb.bi'ăăDEFINT A-ZăCONST TOTALBUF = 2000ăCONST dc = 0, AC = 1ăăCONST VESAOK = &H4FăTYPE vesainfoblockă	VESASignature AS STRING * 4ă	VESAVersion AS INTEGERă	OEMStringPtr AS LONGă	Capabilities AS STRING * 4ă	VIDEOMODEPTR AS LONGă	TotalMemory AS INTEGERă	Reserved AS STRING * 236ă'we manage this  partă	modeord AS INTEGERă	modemax AS INTEGERă	bytespixel AS INTEGERă	Xres AS INTEGERă	yres AS INTEGERă	bytesrow AS LONGă	bpp AS INTEGERă	winsize AS LONGă	winseg AS INTEGERă	bw AS INTEGERăEND TYPEăăTYPE vesaModeinfoBlockă	Modeattributes AS INTEGERă	WinAAttributes AS STRING * 1ă	WinBAttributes AS STRING * 1ă	WinGranularity AS INTEGERă	winsize AS INTEGERă	winAsegment AS INTEGERă	WinBSegment AS INTEGERă	WinFuncPtr AS LONGă	Bytesperscanline AS INTEGERă	Xres AS INTEGERă	yres AS INTEGERă	XCharSize AS STRING * 1ă	YCharSize AS STRING * 1ă	NumberOfPlanes AS STRING * 1ă	bpp AS STRING * 1ă	NumberOfBanks AS STRING * 1ă	MemoryModel AS STRING * 1ă	BankSize AS STRING * 1ă	NumPages AS STRING * 1ă	Rsvd AS STRING * 1ă	RedMaskSize AS STRING * 1ă	RedFieldPosition AS STRING * 1ă	GreenMaskSize AS STRING * 1ă	GreenFieldPosition AS STRING * 1ă	BlueMaskSize AS STRING * 1ă	BlueFieldPosition AS STRING * 1ă	RsvdMaskSize AS STRING * 1ă	DirectColorModeInfo AS STRING * 1ă	Reserved AS STRING * 216ă	'we manage this partă	MODENUM AS INTEGERă	order AS INTEGERăEND TYPEăăăăăTYPE JpegType             'some type definitions (for coherence)ă  jfifmajor AS STRING * 1ă  jfifMinor AS STRING * 1ă  densunits AS STRING * 1ă  Xdens AS INTEGERă  ydens AS INTEGERă  ThWidth AS STRING * 1ă  Theigth AS STRING * 1ă  rows AS INTEGER 'image heightă  cols AS INTEGER 'image widthă  samplesy AS INTEGER 'sampling ratiosă  samplescbcr AS INTEGERă  qty AS INTEGER  'quantization table numbersă  qtcbr AS INTEGERă  HDCTY AS INTEGER 'huffman table numbersă  HDCTCBR AS INTEGERă  HaCTY AS INTEGERă  HaCTCBR AS INTEGERă  numcomp AS INTEGER  'number of componentsă  restart AS INTEGERăEND TYPEăăTYPE HuffmanEntry 'a type for huffman tablesă  Index AS INTEGERă  Code AS INTEGERă  Length AS INTEGERăEND TYPEăăTYPE zigzagtypeă xp AS INTEGERă yp AS INTEGERăEND TYPEăă'a few global variablesăăDIM SHARED curByte, curbits, jfileăDIM buf$, ptr, endptr, find$: find$ = CHR$(255) + CHR$(0)ăăREDIM SHARED display(0) AS vesaModeinfoBlockăDIM SHARED vesainfo AS vesainfoblockăDIM SHARED regs AS RegTypeXăDIM SHARED image AS JpegTypeăDIM SHARED imgcomment$ăDIM SHARED HuffTbl(0 TO 1, 0 TO 1, 0 TO 255) AS HuffmanEntryăDIM SHARED quant(0 TO 1, 0 TO 7, 0 TO 7) '2 quantization tables (Y, CbCr)ăDIM SHARED errata, sg, ofăă'-------------------init tablesăă'*** typical 2^ table...ăDIM SHARED pwrsof2(-1 TO 15), bit1(-1 TO 15)' AS LONG:ăRESTORE BITSăFOR i = -1 TO 15: READ pwrsof2(i)ăIF i = 15 THEN EXIT FORăbit1(i) = (NOT (pwrsof2(i) - 1) - 1): NEXTăbit1(15) = &H8001ăă'*** program gets zigzag values from an array, faster than read it each timeăDIM SHARED zz(0 TO 63) AS zigzagtypeăRESTORE zig2: FOR i = 0 TO 63: READ zz(i).xp, zz(i).yp: NEXTăă'locate charmap in bios (SVGAPrint)ă  regs.AX = &H1130ă  regs.bx = 6 * 256ă  CALL INTERRUPTX(&H10, regs, regs)ă  sg = regs.ESă  of = regs.bpăăă'--------- A demonstration ----------ăăSCREEN 0: CLSăSVGAGetDataăăDOă  ă  SCREEN 7: WIDTH 80, 50: CLSă  f$ = filesel("Select a JPEG file to view", 1, "jpg")ă  jfile = 1ă  OPEN f$ FOR BINARY AS #jfileă  endptr = TOTALBUF: buf$ = SPACE$(endptr): ptr = endptr + 1ă  JPEGGetParms jfileă  JPEGViewParmsă  a$ = UCASE$(INKEY$)ă  IF a$ = "Y" THENă	  SCREEN 0: WIDTH , 50: CLSă	  fail = SVGASelectModeă	  ă	  y0 = ((display(vesainfo.modeord).yres - image.rows) \ 16) * 8ă	  x0 = ((display(vesainfo.modeord).Xres - image.cols) \ 16) * 8ă	  IF y0 < 0 THENă		  SVGAPrint "The centered image is bigger than the screen", 16, 0, 255, 255, 255ă		  SVGAPrint "JPEG images must be decoded from the beggining", 32, 0, 255, 255, 255ă		  SVGAPrint "Be patient until image starts to show.", 48, 0, 255, 255, 255ă		  SVGAPrint "Please wait....or press Escape to exit.", 64, 0, 255, 255, 255ă	  END IFă	  time! = TIMERă	  JPEGPut jfile, x0, y0ă	  CLOSE #jfileă	  time! = TIMER - time!ă	  BEEP: r$ = INPUT$(1)ă	  SVGAPrint "Time: " + STR$(time!) + " sec.", 90, 0, 255, 255, 255ă	  DO: r$ = INKEY$: LOOP UNTIL LEN(r$)ă	  a = SVGASetMode(3)ă	  ă  ELSEă	  CLOSE #jfileă  END IFă  SCREEN 0, , 0, 0: WIDTH , 50ă  CLS : LOCATE 25, 1: PRINT "Another File? [Y/N].."ă  r$ = UCASE$(INPUT$(1))ă  ăLOOP UNTIL r$ = "N"ăENDă'--------- End of Demo ----------ăă'error handlersăăFileSelError: errata = ERR: RESUME NEXTăăăANYERROR: SCREEN 7: CLS : CLOSE : RESUMEăăJPEGGetErrors:ă  SCREEN 7: CLSă  CLOSEă  SELECT CASE ERRă  CASE 99: PRINT "Not a Valid JPEG/JFIF file"ă  CASE 100: PRINT "Only 8x8 samples supported"ă  CASE 101: PRINT "Arithmetic coding not supported"ă  CASE 102: PRINT "End of Image Found"ă  CASE 103: PRINT "Error Getting SoS marker"ă  CASE 104: PRINT "Unexpected file format"ă  CASE 105: PRINT "16 bits Quantization tables not supported"ă  CASE 106: PRINT "Not a JFIF format"ă  CASE ELSE: PRINT "Error "; ERR; "While getting JPEG parameters"ă  END SELECTăENDăăă'------------data------------------ăăBITS:ăDATA 0,1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,-32768ăăăzig2:  'Zigzag patterns for reordering quantization tables and vectorsăDATA 0,0ăZigzagPositions:ăDATA 0,1,1,0ăDATA 2,0,1,1,0,2ăDATA 0,3,1,2,2,1,3,0ăDATA 4,0,3,1,2,2,1,3,0,4ăDATA 0,5,1,4,2,3,3,2,4,1,5,0ăDATA 6,0,5,1,4,2,3,3,2,4,1,5,0,6ăDATA 0,7,1,6,2,5,3,4,4,3,5,2,6,1,7,0ăDATA 7,1,6,2,5,3,4,4,3,5,2,6,1,7ăDATA 2,7,3,6,4,5,5,4,6,3,7,2ăDATA 7,3,6,4,5,5,4,6,3,7ăDATA 4,7,5,6,6,5,7,4ăDATA 7,5,6,6,5,7ăDATA 6,7,7,6ăDATA 7,7ăăFUNCTION filesel$ (prompt$, match%, ext$) 'User friendly file selectoră'............................................................................ă'SELF-CONTAINED FILE SELECTOR FUNCTION by Antoni Gual (agual@eic.ictnet.es)ă'ă'params: prompt$>> the prompt ttat is displayedă'        match% >> on input: 1=> filename must exist  0=> must not există'                  on output:1=> filename does exist  0=> does not există'        ext$   >> default extensionă'ă'--to use it copy this function to your programă'--add:ă'ă'       '$INCLUDE 'QB.BI'ă'       DIM SHARED errata as INTEGERă'ă'--AT THE START OF YOUR PROGRAM ANDă'ă'       FileSelError:errata=err:resume nextă'ă'--AFTER THE END OF THE  MAIN  PROGRAMă'WARNING: This function changes the default dir to where the file is.ă'............................................................................ă	'error messagesă	CONST pak$ = ". Press a key.."ă	CONST pnf$ = "Path not Found"ă	CONST ddne$ = "Drive does not Exist"ă	CONST dnr$ = "Drive not ready. [Retry/Abort]"ă	CONST fdne$ = "File not found"ă	CONST ifn$ = "Invalid File Name"ă	CONST idn$ = "Invalid Drive Name"ă	CONST pfe$ = "Path-file error"ă	ff$ = ""ă	filnum = FREEFILEă	'screen reset, start error handleră	VIEW PRINT: COLOR 7, 0: CLSă	ON ERROR GOTO FileSelErroră	GOSUB viewfiles: GOTO asknameăă	DOă		GOSUB viewfilesă		'ă		'UNCOMMENT NEXT LINE IF YOU DON'T HAVE interruptx ACCESS!!ă		'GOTO ASKPATHă		'ăaskdrive:ă		COLOR 15, 4: CLSă		GOSUB question: INPUT "Drive [Enter:Current]>", drive$ă		'if no input, go ask pathă		IF LEN(drive$) THENăR3:     IF LEN(drive$) > 2 THEN ERROR 64: GOTO BADDRIVEă			DRIV% = ASC(UCASE$(drive$)) - 65ă			IF DRIV% < 0 OR DRIV% > 23 THEN ERROR 64: GOTO BADDRIVEă			regs.AX = &HE00: regs.dx = DRIV%ă			CALL INTERRUPTX(&H21, regs, regs)ă			'probably the drive we asked for does'nt există			regs.AX = &H1900ă			CALL INTERRUPTX(&H21, regs, regs)ă			IF (regs.AX AND &HFF) <> DRIV% THEN ERROR 68ăBADDRIVE:   SELECT CASE errataă			CASE 64:ă				msgerr$ = idn$ + pak$: GOSUB errmsg: GOTO askdriveă			CASE 68: msgerr$ = ddne$ + pak$: GOSUB errmsg: GOTO askdriveă			CASE 71: msgerr$ = dnr$: GOSUB errmsg: IF a$ = "R" THEN GOTO R3 ELSE GOTO askdriveă			END SELECTă			GOSUB viewfilesă		END IFăăaskpath:ă		'what is in?  Here we trap the no disk erroră		COLOR 14, 4: CLSăR4:     IF errata = 71 THEN msgerr$ = dnr$: GOSUB errmsg: IF a$ = "R" THEN GOTO R4 ELSE GOTO askdriveă		GOSUB question: INPUT "Path [Enter:Current]>", path$ă		'if no input go ask filenameă		IF LEN(path$) THENăr1:         CHDIR path$ă			IF errata = 53 OR errata = 76 THEN msgerr$ = pnf$ + pak$: GOSUB errmsg: GOTO askpathă			IF errata = 71 THEN msgerr$ = dnr$: GOSUB errmsg: IF a$ = "R" THEN GOTO r1 ELSE GOTO askdriveă			GOSUB viewfilesă		END IFăaskname:ă		COLOR 7, 4: CLSă		GOSUB question: INPUT "File [Enter:New path]>", name$ă		IF LEN(name$) = 0 GOTO r6ă		IF LEN(ext$) THENă			temp = INSTR(name$, ".")ă			IF temp THENă				name$ = LEFT$(name$, temp - 1) + "." + ext$ă			ELSEă				name$ = name$ + "." + ext$ă			END IFă		END IFă		'does it exist?ăR2:     OPEN name$ FOR INPUT AS #filnumă		SELECT CASE errataă		CASE 76: msgerr$ = pnf$ + pak$: GOSUB errmsg: GOTO asknameă		CASE 53:ă			IF match = 1 THENă				LOCATE 2, 1: msgerr$ = fdne + pak$: GOSUB errmsg: GOTO asknameă			ELSEă				ff$ = " NOT ": GOTO outofthereă			END IFă		CASE 64: LOCATE 2, 1: msgerr$ = ifn$ + pak$: GOSUB errmsg: GOTO asknameă		CASE 71: msgerr$ = dnr$: GOSUB errmsg: IF a$ = "R" THEN GOTO R2 ELSE GOTO askdriveă		CASE 75: msgerr$ = pfe$ + pak$: GOSUB errmsg: GOTO asknameă		END SELECTăr5:     CLOSE #filnumăr6:ă	LOOP UNTIL LEN(name$)ăăoutofthere:ă	'file exists: returnă	msgerr$ = "File " + UCASE$(name$) + ff$ + " found.." + pak$: GOSUB errmsgă	VIEW PRINT: COLOR 7, 0: CLSă	IF LEN(ff$) THEN match% = 0 ELSE match = 1ă	filesel$ = name$ă	ON ERROR GOTO 0ăEXIT FUNCTIONăăviewfiles:ă	VIEW PRINT 3 TO 25: COLOR 7, 0: CLS :ă	'IF LEN(ext$) THEN a$ = "*." + ext$ ELSE a$ = ""ă	FILES 'a$ă	VIEW PRINT 1 TO 2:ăRETURNăăquestion:ă	LOCATE 1, 1: PRINT SPACE$(80): LOCATE 1, 1: PRINT prompt$ + "? -->Select ";ăRETURNăăerrmsg:ă	LOCATE 2, 1: PRINT msgerr$: a$ = UCASE$(INPUT$(1)): LOCATE 2, 1: PRINT SPACE$(80)ă	errata = 0ăRETURNăăEND FUNCTIONăăSUB ideasă' arreglar bug: a veces no empieza la imagen en su sitioă' arreglar bug: los REDIM de Get8X8 no son aceptados por QBasică' arreglar bug. Texto timer a veces no sale en su sitioă' arreglar bug: por qu‚ color 255,255,255 de letras es amarillo y no blanco?ăă' eliminar array de resoluciones VESA,ocupa espacio inŁtilmenteă' al proponer resoluciones, separar las de true/hicolor de las de paletaă' probar en 8 bits un color de 6*7*6, a ver si es mas reală' decodificar a temporal y presentar imagen en pantalla con zoom y encuadreă' funciona el rat˘n en VESA?ă' a¤adir gif ,tiff, pcx, bmp. de otros autores!ăEND SUBăăSUB JPEGGet8x8 (vector(), HuffDcNum, HuffACNum, quantNum, dcCoef, viw) STATICă'reads file ,decodes, and returns a 8x8 block of a component (Y, Cb or cr)ă'erase arraysăCONST FIX029 = 2446&ăCONST FIX039 = 3196&ăCONST FIX054 = 4433&ăCONST FIX076 = 6270&ăCONST FIX089 = 7373&ăCONST FIX117 = 9633&ăCONST FIX150 = 12299&ăCONST FIX184 = 15137&ăCONST FIX196 = 16069&ăCONST FIX205 = 16819&ăCONST FIX256 = 20995&ăCONST FIX307 = 25172&ăCONST constbits = 13ăCONST PASS1BITS = 1ăREDIM vector(0 TO 7, 0 TO 7)ăDIM z1 AS LONG, z2 AS LONG, z3 AS LONG, z4 AS LONG, z5 AS LONGăDIM tmp0 AS LONG, tmp1 AS LONG, tmp2 AS LONG, tmp3 AS LONG, tmp4 AS LONGăDIM tmp5 AS LONG, tmp6 AS LONG, tmp7 AS LONG, tmp8 AS LONG, tmp9 AS LONGăDIM tmp10 AS LONG, tmp11 AS LONG, tmp12 AS LONG, tmp13 AS LONGă'GOTO dct 'test onlyă'Get the DC coefficientăhnum = HuffDcNum: tk = 0: GOSUB dekode1ăcat = dekode: GOSUB getnbits1: dcCoef = dcCoef + getnbitsăvector(0, 0) = dcCoefăă'Get AC CoefficientsăK = 1: hnum = HuffACNum: tk = 1ăDOă  GOSUB dekode1ă  SELECT CASE dekodeă  CASE 0 'EOB Encounteredă  EXIT DOă  CASE 3270 'ZRL encountered  15*256+0ă  K = K + 16ă  CASE ELSEă  K = K + dekode \ 16ă  cat = dekode AND 15: GOSUB getnbits1ă  'zigzag!ă  vector(zz(K).xp, zz(K).yp) = getnbitsă  K = K + 1ă  END SELECTăLOOP UNTIL K > 63ăă'end of file reading, the next section can be skipped if this block is not toă'be displayed!ă'EXIT SUB  'test onlyădct:ăIF NOT viw THEN EXIT SUBăăăx1& = 8& * pwrsof2(constbits + PASS1BITS)ăx2& = pwrsof2(constbits)ăx = pwrsof2(constbits - PASS1BITS)ăFOR u = 7 TO 0 STEP -1ă  ă	ă	IF (vector(1, u) OR vector(2, u) OR vector(3, u) OR vector(4, u) OR vector(5, u) OR vector(6, u) OR vector(7, u)) = 0 THENă	  dcval& = vector(0, u) * quant(quantNum, 0, u) * pwrsof2(PASS1BITS)ă	  vector(0, u) = dcval&ă	  vector(1, u) = dcval&ă	  vector(2, u) = dcval&ă	  vector(3, u) = dcval&ă	  vector(4, u) = dcval&ă	  vector(5, u) = dcval&ă	  vector(6, u) = dcval&ă	  vector(7, u) = dcval&ă	ă	ELSEă   ' { Even part: reverse the even part of the forward DCT. }ă	'{ The rotator is sqrt(2)*c(-6). }ăă	z2 = vector(2, u) * quant(quantNum, 2, u)ă	z3 = vector(6, u) * quant(quantNum, 6, u)ăă	z1 = (z2 + z3) * FIX054ă	tmp2 = z1 + (z3 * -FIX184)ă	tmp3 = z1 + (z2 * FIX076)ă	z2 = vector(0, u) * quant(quantNum, 0, u)ă	z3 = vector(4, u) * quant(quantNum, 4, u)ăă	tmp0 = x2& * (z2 + z3)ă	tmp1 = x2& * (z2 - z3)ăă	tmp10 = tmp0 + tmp3ă	tmp13 = tmp0 - tmp3ă	tmp11 = tmp1 + tmp2ă	tmp12 = tmp1 - tmp2ăă'    { Odd part per figure 8; the matrix is unitary and hence itsă'      transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively. }ăă	tmp0 = vector(7, u) * quant(quantNum, 7, u)ă	tmp1 = vector(5, u) * quant(quantNum, 5, u)ă	tmp2 = vector(3, u) * quant(quantNum, 3, u)ă	tmp3 = vector(1, u) * quant(quantNum, 1, u)ăă	z1 = tmp0 + tmp3ă	z2 = tmp1 + tmp2ă	z3 = tmp0 + tmp2ă	z4 = tmp1 + tmp3ă	z5 = (z3 + z4) * FIX117ă	tmp0 = tmp0 * FIX029                  ' { sqrt(2) * (-c1+c3+c5-c7) }ă	tmp1 = tmp1 * FIX205                  ' { sqrt(2) * ( c1+c3-c5+c7) }ă	tmp2 = tmp2 * FIX307                  '; { sqrt(2) * ( c1+c3+c5-c7) }ă	tmp3 = tmp3 * FIX150                  '; { sqrt(2) * ( c1+c3-c5-c7) }ă	z1 = z1 * -FIX089  ' ; { sqrt(2) * (c7-c3) }ă	z2 = z2 * -FIX256  ' { sqrt(2) * (-c1-c3) }ă	z3 = z3 * -FIX196  ' { sqrt(2) * (-c3-c5) }ă	z4 = z4 * -FIX039  ' { sqrt(2) * (c5-c3) }ă	z3 = z3 + z5ă	z4 = z4 + z5ăă	tmp0 = tmp0 + z1 + z3ă	tmp1 = tmp1 + z2 + z4ă	tmp2 = tmp2 + z2 + z3ă	tmp3 = tmp3 + z1 + z4ăă   ' { Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 }ăă	ă	vector(0, u) = (tmp10 + tmp3) \ xă	vector(7, u) = (tmp10 - tmp3) \ xă	vector(1, u) = (tmp11 + tmp2) \ xă	vector(6, u) = (tmp11 - tmp2) \ xă	vector(2, u) = (tmp12 + tmp1) \ xă	vector(5, u) = (tmp12 - tmp1) \ xă	vector(3, u) = (tmp13 + tmp0) \ xă	vector(4, u) = (tmp13 - tmp0) \ xăă END IFăNEXTă'  { Pass 2: process rows from work array, store into output array. }ă'  { Note that we must descale the results by a factor of 8 == 2**3, }ă'  { and also undo the PASS1ăăFOR v = 0 TO 7ăă'    { Even part: reverse the even part of the forward DCT. }ă'   { The rotator is sqrt(2)*c(-6). }ăă	z2 = vector(v, 2)ă	z3 = vector(v, 6)ăă	z1 = (z2 + z3) * FIX054ă	tmp2 = z1 + (z3 * -FIX184)ă	tmp3 = z1 + (z2 * FIX076)ă	tmp0 = x2& * (vector(v, 0) + vector(v, 4))ă	tmp1 = x2& * (vector(v, 0) - vector(v, 4))ăă	tmp10 = tmp0 + tmp3ă	tmp13 = tmp0 - tmp3ă	tmp11 = tmp1 + tmp2ă	tmp12 = tmp1 - tmp2ăă	'{ Odd part per figure 8; the matrix is unitary and hence itsă	'  transpose is its inverse.  i0..i3 are y7,y5,y3,y1 respectively. }ăă	tmp0 = vector(v, 7)ă	tmp1 = vector(v, 5)ă	tmp2 = vector(v, 3)ă	tmp3 = vector(v, 1)ăă	z1 = tmp0 + tmp3ă	z2 = tmp1 + tmp2ă	z3 = tmp0 + tmp2ă	z4 = tmp1 + tmp3ă	z5 = (z3 + z4) * FIX117ă	tmp0 = tmp0 * FIX029ă	tmp1 = tmp1 * FIX205' { sqrt(2) * ( c1+c3-c5+c7) }ă	tmp2 = tmp2 * FIX307ă	tmp3 = tmp3 * FIX150' { sqrt(2) * ( c1+c3-c5-c7) }ă	z1 = z1 * -FIX089ă	z2 = z2 * -FIX256 '; { sqrt(2) * (-c1-c3) }ă	z3 = z3 * -FIX196ă	z4 = z4 * -FIX039 ' ; { sqrt(2) * (c5-c3) }ă	z3 = z3 + z5ă	z4 = z4 + z5ăă	tmp0 = tmp0 + z1 + z3ă	tmp1 = tmp1 + z2 + z4ă	tmp2 = tmp2 + z2 + z3ă	tmp3 = tmp3 + z1 + z4ăă	'{ Final output stage: inputs are tmp10..tmp13, tmp0..tmp3 }ă	ă	vector(v, 0) = (tmp10 + tmp3) \ x1&ă	vector(v, 7) = (tmp10 - tmp3) \ x1&ă	vector(v, 1) = (tmp11 + tmp2) \ x1&ă	vector(v, 6) = (tmp11 - tmp2) \ x1&ă	vector(v, 2) = (tmp12 + tmp1) \ x1&ă	vector(v, 5) = (tmp12 - tmp1) \ x1&ă	vector(v, 3) = (tmp13 + tmp0) \ x1&ă	vector(v, 4) = (tmp13 - tmp0) \ x1&ăNEXTăăEXIT SUBăăă'--------------subroutines-------------------------ăădekode1:ăcurVal = 0ămf = -1: i = 0ăFOR l = 1 TO 16  'cycle through 16 possible Huffman lengthsă  GOSUB nextbit1: IF nextbit THEN curVal = curVal OR pwrsof2(16 - l)ă  DO UNTIL i > 255 'look for a match in the Huffman tableă	  IF HuffTbl(tk, hnum, i).Length > l THEN EXIT DOă	  IF HuffTbl(tk, hnum, i).Index = curVal THEN mf = i: EXIT DOă	  i = i + 1ă  LOOPă  IF mf > -1 THEN EXIT FORăNEXT lăIF i = 256 THEN ERROR 110ădekode = HuffTbl(tk, hnum, mf).Code 'return the appropriate codeăRETURNăăgetnbits1:ătemp0 = 0: c1 = cat - 1ăFOR i = c1 TO 0 STEP -1: GOSUB nextbit1: IF nextbit THEN temp0 = temp0 OR pwrsof2(i)ăNEXTăIF temp0 AND pwrsof2(c1) THEN getnbits = temp0 ELSE getnbits = bit1(cat) + temp0ăRETURNăănextbit1:ăIF curbits < 0 THEN curbits = 7: curByte = JPEGGetByteănextbit = curByte AND pwrsof2(curbits)ăcurbits = curbits - 1ăRETURNăăEND SUBăăFUNCTION JPEGGetByte STATICă'***buffered, all file access goes thru ită'gets a single byte from file. At reading, it converts the pairs FF 00 to 00'săăSHARED buf$, ptr, endptr, find$ăIF ptr > endptr THENă  GET #jfile, , buf$: ptr = SADD(buf$): endptr = TOTALBUF + ptr - 1ă  i0 = INSTR(buf$, find$)ă  IF PEEK(endptr) = 255 THEN endptr = endptr - 1: SEEK #jfile, SEEK(jfile) - 1ă  DO WHILE i0 > 0 AND i0 < endptră	  MID$(buf$, i0 + 1) = MID$(buf$, i0 + 2): endptr = endptr - 1ă	  i0 = INSTR(i0 + 1, buf$, find$)ă  LOOPăEND IFăJPEGGetByte = PEEK(ptr): ptr = ptr + 1ăEND FUNCTIONăăSUB JPEGGetParms (jfile)ăDIM HuffAmount(1 TO 16)ăDIM GETword AS LONGă'ON ERROR GOTO JPEGGetErrorsăQTables = 0 'Initialize some checkpoint variablesăACTables = 0ădctables = 0ăimage.restart = GETwordăSEEK jfile, 1ăGOSUB getword1ăIF GETword <> 65496 THEN ERROR 99ăDO  'Primary control loop for markersă  IF JPEGGetByte = 255 THEN 'Marker Foundă	  d = JPEGGetByteă	  SELECT CASE d 'which one is it?ă	  CASE &HC0, &HC1  'SOF0ă		  'get image attributesă		  GOSUB getword1:ă		  temp4& = GETword              'Length of segmentă		  temp0 = JPEGGetByte           'Data precisionă		  IF temp0 <> 8 THEN ERROR 100  'we do not support 12 or 16-bit samplesă		  GOSUB getword1: image.rows = GETword:ă		  GOSUB getword1: image.cols = GETword:ă		  temp0 = JPEGGetByte           'Number of componentsă		  FOR i = 1 TO temp0ă			  id = JPEGGetByteă			  SELECT CASE idă			  CASE 1ă				  temp1 = JPEGGetByteă				  image.samplesy = (temp1 AND 15) * (temp1 \ 16)ă				  image.qty = JPEGGetByteă			  CASE 2, 3ă				  temp1 = JPEGGetByteă				  image.samplescbcr = (temp1 AND 15) * (temp1 \ 16)ă				  image.qtcbr = JPEGGetByteă			  END SELECTă		  NEXT iă	  CASE &HC9 'SOF9ă		ERROR 101ă	  CASE &HC4 'DHTă		  IF ACTables < 2 OR dctables < 2 THENă			  'get huffman tablesă			  GOSUB getword1ă			  l0 = GETwordă			  c0 = 2ă			  DOă				  temp0 = JPEGGetByte: c0 = c0 + 1ă				  t0 = (temp0 AND 16) \ 16ă				  temp0 = temp0 AND 15ă				  total = 0ă				  FOR i = 1 TO 16ă					  temp1 = JPEGGetByte: c0 = c0 + 1ă					  total = total + temp1ă					  HuffAmount(i) = temp1ă				  NEXT iă				  FOR i = 0 TO total - 1ă					HuffTbl(t0, temp0, i).Code = JPEGGetByte: c0 = c0 + 1ă				  NEXT iă				  curnum& = 0ă				  curIndex = -1ă				  FOR i = 1 TO 16ă					  FOR j = 1 TO HuffAmount(i)ă						  curIndex = curIndex + 1ă						  tmp& = curnum& * pwrsof2(16 - i)ă						  IF tmp& < 32768 THENă							HuffTbl(t0, temp0, curIndex).Index = tmp&ă						  ELSEă							HuffTbl(t0, temp0, curIndex).Index = tmp& - 65536ă						  END IFă						  HuffTbl(t0, temp0, curIndex).Length = iă						  curnum& = curnum& + 1ă					  NEXT jă					  curnum& = curnum& * 2ă				  NEXT iă				  IF t0 THEN ACTables = ACTables + 1 ELSE dctables = dctables + 1ă			  LOOP UNTIL c0 >= l0ă		  END IFă	  CASE &HCC 'DACă		ERROR 101ă	  CASE &HD8 'SOIă	  CASE &HD9 'EOIă		ERROR 102ă	  CASE &HDA 'SOSă		  'get SOSă		  GOSUB getword1ă		  temp4& = GETwordă		  temp0 = JPEGGetByteă		  IF temp0 <> 1 AND temp0 <> 3 THEN GetSOS = 0: EXIT SUBă		  image.numcomp = temp0ă		  FOR i = 1 TO temp0ă			  temp1 = JPEGGetByteă			  SELECT CASE temp1ă			  CASE 1ă				  temp2 = JPEGGetByteă				  image.HaCTY = temp2 AND 15ă				  image.HDCTY = temp2 \ 16ă			  CASE 2, 3ă				  temp2 = JPEGGetByteă				  image.HaCTCBR = temp2 AND 15ă				  image.HDCTCBR = temp2 \ 16ă			  CASE ELSEă				ERROR 103ă			  END SELECTă		  NEXT iă		  num = 3: GOSUB getstringă		  IF (dctables = 2 AND ACTables = 2 AND QTables = 2) OR image.numcomp = 1 THENă			ON ERROR GOTO 0: EXIT SUB   'Go on to secondary control loopă		  ELSEă			ERROR 104ă		  END IFă	  CASE &HDD 'DRIă		  GOSUB getword1:ă		  temp0 = GETwordă		  GOSUB getword1ă		  image.restart = GETwordă	  CASE &HDB 'DQTă		  IF QTables < 2 THENă			  GOSUB getword1: l0 = GETwordă			  c0 = 2ă			  DOă				  temp0 = JPEGGetByte: c0 = c0 + 1ă				  IF temp0 AND &HF0 THEN ERROR 105ă				  temp0 = temp0 AND 15ă				  xp = 0: yp = 0ă				  FOR i = 0 TO 63ă					  quant(temp0, zz(i).xp, zz(i).yp) = JPEGGetByte: c0 = c0 + 1ă				  NEXT iă				  QTables = QTables + 1ă			  LOOP UNTIL c0 >= l0ă		  END IFă	  CASE &HE0 'APP0ă		  GOSUB getword1ă		  l& = GETwordă		  num = 5: GOSUB getstringă		  IF getstr$ <> ("JFIF" + CHR$(0)) THEN ERROR 106ă		  image.jfifmajor = CHR$(JPEGGetByte)ă		  image.jfifMinor = CHR$(JPEGGetByte)ă		  image.densunits = CHR$(JPEGGetByte)ă		  image.Xdens = GETwordă		  image.ydens = GETwordă		  image.ThWidth = CHR$(JPEGGetByte)ă		  image.Theigth = CHR$(JPEGGetByte)ă	  CASE &HFE 'COMă		  GOSUB getword1: num = GETword - 2:ă		  GOSUB getstring: imgcomment$ = getstr$ă	  END SELECTă  END IFă  IF LEN(INKEY$) THEN EXIT SUBăLOOPăON ERROR GOTO 0ăEXIT SUBăăă'------subroutines-------------------ăă'not intel byte order!!ăgetword1:ătemp9 = JPEGGetByteăGETword = 256& * temp9 OR JPEGGetByteăRETURNăăgetstring:ăgetstr$ = SPACE$(num)ăFOR i = 1 TO numă MID$(getstr$, i, 1) = CHR$(JPEGGetByte)ăNEXTăRETURNăăăEND SUBăăSUB JPEGPut (jfile, x0, y0)ă'Routine that decodes the file and puts it into the screenăăDIM YVector1(0 TO 7, 0 TO 7)              '4 vectors for Y attributeăDIM YVector2(0 TO 7, 0 TO 7)ăDIM YVector3(0 TO 7, 0 TO 7)ăDIM YVector4(0 TO 7, 0 TO 7)ăDIM CbVector(0 TO 7, 0 TO 7)              '1 vector for Cb attributeăDIM CrVector(0 TO 7, 0 TO 7)              '1 vector for Cr attributeăDIM mcu AS LONGălastj = -1ăă'We initialize the dc coefficients as they are accumulativeădcY = 0: dcCb = 0: dcCr = 0ăăxindex = 0: yindex = 0ăcurbits = 7: curByte = JPEGGetByteămcu = 0: lastj = -1ăăSELECT CASE image.numcompăă'Y-Cb-Cr color imageăCASE 3ă	SELECT CASE image.samplesyă	CASE 4ă		DOă			viw = -1ă			xi0 = xindex + x0ă			IF xi0 >= vesainfo.Xres THENă				viw = 0ă			ELSEIF xi0 < 0 THENă				viw = 0ă			ELSEIF (yindex + y0) < 0 THENă				viw = 0ă			END IFă			JPEGGet8x8 YVector1(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 YVector2(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 YVector3(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 YVector4(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 CbVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCb, viwă			JPEGGet8x8 CrVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCr, viwă			IF viw THENă				FOR i = 0 TO 7ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					I2 = i \ 2ă					FOR j = 0 TO 7ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector1(i, j) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă					NEXT jă				NEXT iă				FOR i = 0 TO 7ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					I2 = i \ 2ă					FOR j = 8 TO 15ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector2(i, j - 8) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă					NEXT jă				NEXT iă				FOR i = 8 TO 15ă					I2 = i \ 2ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					FOR j = 0 TO 7ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector3(i - 8, j) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă						   ă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă					NEXT jă				NEXT iă				FOR i = 8 TO 15ă					I2 = i \ 2ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					FOR j = 8 TO 15ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector4(i - 8, j - 8) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă						   ă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă					NEXT jă				NEXT iă			END IFă			mcu = mcu + 1: IF image.restart THEN IF image.restart = mcu THEN GOSUB rstrtă			xindex = xindex + 16ă			IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 16ă			IF LEN(INKEY$) THEN EXIT DOă		LOOP UNTIL yindex >= image.rows OR yindex + y0 >= vesainfo.yresăă	'next case not tested (never found an image with this structure)ă	CASE 2ă		DOă			viw = -1ă			xi0 = xindex + x0ă			IF xi0 >= vesainfo.Xres THENă				viw = 0ă			ELSEIF xi0 < 0 THENă				viw = 0ă			ELSEIF (yindex + y0) < 0 THENă				viw = 0ă			END IFă			JPEGGet8x8 YVector1(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 YVector2(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 CbVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCb, viwă			JPEGGet8x8 CrVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCr, viwă			IF viw THENă				FOR i = 0 TO 7ă				yi = yindex + i: IF yi >= image.rows THEN EXIT FORă				I2 = i \ 2ă				FOR j = 0 TO 7ă					xj = xindex + j: IF xj >= image.cols THEN EXIT FORă					y = YVector1(i, j) + 128ă					IF vesainfo.bw THENă						IF y < 0 THENă							y = 0ă						ELSEIF y > 255 THENă							y = 255ă						END IFă					   ă						svgappgrey xj + x0, yi + y0, yă					ELSEă						j2 = j \ 2ă						GOSUB ToRGBă						SVGAPPixel xj + x0, yi + y0, r, g, bă					END IFă				NEXT jă				NEXT iă				FOR i = 0 TO 7ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					I2 = i \ 2ă					FOR j = 8 TO 15ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector2(i, j - 8) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă						   ă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă					NEXT jă				NEXT iă			END IFă			mcu = mcu + 1: IF image.restart THEN IF image.restart = mcu THEN GOSUB rstrtă			xindex = xindex + 16ă			IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8ă			IF LEN(INKEY$) THEN EXIT DOă		LOOP UNTIL yindex >= image.rows OR yindex + y0 >= vesainfo.yresă ă	CASE 1ă		DOă			viw = -1ă			xi0 = xindex + x0ă			IF xi0 >= vesainfo.Xres THENă				viw = 0ă			ELSEIF xi0 < 0 THENă				viw = 0ă			ELSEIF (yindex + y0) < 0 THENă				viw = 0ă			END IFă			JPEGGet8x8 YVector1(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă			JPEGGet8x8 CbVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCb, viwă			JPEGGet8x8 CrVector(), image.HDCTCBR, image.HaCTCBR, image.qtcbr, dcCr, viwă			IF viw THENă				FOR i = 0 TO 7ă					yi = yindex + i: IF yi >= image.rows THEN EXIT FORă					I2 = i \ 2ă					FOR j = 0 TO 7ă						xj = xindex + j: IF xj >= image.cols THEN EXIT FORă						y = YVector1(i, j) + 128ă						IF vesainfo.bw THENă							IF y < 0 THENă								y = 0ă							ELSEIF y > 255 THENă								y = 255ă							END IFă							svgappgrey xj + x0, yi + y0, yă						ELSEă							j2 = j \ 2ă							GOSUB ToRGBă							SVGAPPixel xj + x0, yi + y0, r, g, bă						END IFă						NEXT jă				NEXT iă			END IFă			mcu = mcu + 1: IF image.restart THEN IF image.restart = mcu THEN GOSUB rstrtă			xindex = xindex + 8ă			IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8ă			IF LEN(INKEY$) THEN EXIT DOă		LOOP UNTIL yindex >= image.rows OR (yindex + y0) >= vesainfo.yresă	END SELECTăă'monochrome imageăCASE 1ă	DOă		viw = -1ă		xi0 = xindex + x0ă		IF xi0 >= vesainfo.Xres THENă			viw = 0ă		ELSEIF xi0 < 0 THENă			viw = 0ă		ELSEIF (yindex + y0) < 0 THENă			viw = 0ă		END IFă		JPEGGet8x8 YVector1(), image.HDCTY, image.HaCTY, image.qty, dcY, viwă		IF viw THENă		FOR i = 0 TO 7ă			yi = yindex + i: IF yi >= image.rows THEN EXIT FORă			FOR j = 0 TO 7ă				xj = xindex + j: IF xj >= image.cols THEN EXIT FORă				y = YVector1(i, j) + 128ă				IF y < 0 THENă					y = 0ă				ELSEIF y > 255 THENă					y = 255ă				END IFă				svgappgrey xj + x0, yi + y0, yă			NEXT jă		NEXT iă		END IFă		mcu = mcu + 1: IF image.restart THEN IF image.restart = mcu THEN GOSUB rstrtă		xindex = xindex + 8ă		IF xindex >= image.cols THEN xindex = 0: yindex = yindex + 8ă		IF LEN(INKEY$) THEN EXIT DOă	LOOP UNTIL yindex >= image.rows OR yindex + y0 >= vesainfo.yresăEND SELECTăON ERROR GOTO 0ăEXIT SUBăărstrt:ăcurByte = JPEGGetByte: curByte = JPEGGetByte: curByte = JPEGGetByte: curbits = 7ădcY = 0: dcCb = 0: dcCr = 0: mcu = 0ăRETURNăăăToRGB:ăIF j2 <> lastj THENă	cb128 = CbVector(I2, j2)ă	cr128 = CrVector(I2, j2)ă	r1 = 140& * cr128 \ 100ă	g1 = (34 * cb128 + 71 * cr128) \ 100ă	b1 = 177& * cb128 \ 100ă	lastj = j2ăEND IFăr = y + r1ăg = y - g1ăb = y + b1ăIF r > 255 THENă	r = 255ăELSEIF r < 0 THENă	r = 0ăEND IFăIF g > 255 THENă	g = 255ăELSEIF g < 0 THENă	g = 0ăEND IFăIF b > 255 THENă	b = 255ăELSEIF b < 0 THENă	b = 0ăEND IFăRETURNăăEND SUBăăSUB JPEGViewParmsă SHARED f$ă CLSă PRINT "Parameters of this JPEG File"ă PRINTă PRINT "File Name            :  "; f$ă PRINT "File Size            : "; LOF(jfile); " bytes"ă PRINT "Comment              : "; imgcomment$ă PRINT "JFIF Version         : "; ASC(image.jfifmajor); "."; ASC(image.jfifMinor)ă PRINT "Rows X Cols          : "; image.rows; " x "; image.cols; " pixel"ă SELECT CASE ASC(image.densunits)ă CASE 0: unit$ = " ratio"ă CASE 1: unit$ = " dots/inch"ă CASE 2:  unit$ = " dots/cm"ă END SELECTă PRINT "Density           X/Y: "; image.Xdens; "/"; image.ydens; unit$ă IF image.restart THENă	PRINT "Restart each         : "; image.restart; " blocks"ă ELSEă	PRINT "No Restart marks in this file"ă END IFă PRINT "Thumbnail w x h      : "; ASC(image.ThWidth); " x "; ASC(image.Theigth)ă ă IF image.numcomp = 3 THEN a$ = " Color Y + Cb + Cr" ELSE a$ = " Black & White"ă PRINT "Color components     : "; a$ă PRINT "Num of samples      Y: "; image.samplesy; : LOCATE , 50: PRINT "CbCr: "; image.samplescbcră PRINTă PRINT "Quantization tables Y: "; image.qty + 1; : LOCATE , 50: PRINT "Cbcr: "; image.qtcbr - image.qtyă PRINT "Huffman tables DC   Y: "; image.HDCTY + 1; : LOCATE , 50: PRINT "CbCr: "; image.HDCTCBR - image.HDCTYă PRINT "Huffman tables aC   Y: "; image.HaCTY + 1; : LOCATE , 50: PRINT "CbCr: "; image.HaCTCBR - image.HaCTYă PRINTă LOCATE 25, 1: PRINT "View It? [Y/N]...";ă SLEEPăEND SUBăăSUB SVGAGetDataăREDIM modenums(70)ăregs.AX = &H4F00ăregs.ES = VARSEG(vesainfo)ăregs.DI = VARPTR(vesainfo)ăCALL INTERRUPTX(&H10, regs, regs)ăIF regs.AX <> VESAOK THEN PRINT "SORRY...VESA CARD NOT DETECTED": ENDăă'get mode numbers stringăa$ = MKL$(vesainfo.VIDEOMODEPTR)ăDEF SEG = CVI(RIGHT$(a$, 2))ăptr1 = CVI(LEFT$(a$, 2))ăi = 0ăDO UNTIL md& = 65535ă	modenums(i) = md&ă	i = i + 1ă	temp = PEEK(ptr1)ă	ptr1 = ptr1 + 1ă	md& = PEEK(ptr1) * 256& + tempă	ptr1 = ptr1 + 1ăLOOPăDEF SEGăvesainfo.modemax = i - 1ăă'get info about all modesăREDIM display(1 TO vesainfo.modemax) AS vesaModeinfoBlockăFOR i = 1 TO vesainfo.modemaxă	regs.AX = &H4F01ă	regs.cx = modenums(i)ă	regs.ES = VARSEG(display(i))ă	regs.DI = VARPTR(display(i))ă	CALL INTERRUPTX(&H10, regs, regs)ă	display(i).MODENUM = modenums(i)ăNEXTăERASE modenumsăăEND SUBăăSUB svgappgrey (x, y, lum) STATICăIF y <> lasty THEN lasty = y: off1& = vesainfo.bytesrow * yăoffset& = off1& + xăbank = offset& \ vesainfo.winsizeăoffset& = offset& MOD vesainfo.winsizeăIF bank <> curbank THENă  curbank = bankă  regs.AX = &H4F05ă  regs.bx = 0ă  regs.dx = curbankă  CALL INTERRUPTX(&H10, regs, regs)ăEND IFăăDEF SEG = vesainfo.winsegăPOKE offset&, lumăDEF SEGăEND SUBăăSUB SVGAPPixel (x, y, r, g, b) STATICă'sets a pixel in SVGA screenăIF y <> lasty THEN lasty = y: off1& = vesainfo.bytesrow * yăoffset& = off1& + x * vesainfo.bytespixelăbank = offset& \ vesainfo.winsizeăoffset& = offset& MOD vesainfo.winsizeăIF bank <> curbank THENă  SWAP curbank, bankă  GOSUB switchbankăEND IFăăSELECT CASE vesainfo.bppăCASE 32:ă	DEF SEG = vesainfo.winsegă	POKE offset& + 2, ră	POKE offset& + 1, gă	POKE offset&, bă	DEF SEGăCASE 16:ă	temp& = (b \ 8) OR ((g * 8) AND &H7E0) OR (256& * r AND &HF800)ă	b1 = VARPTR(temp&): a = PEEK(b1): a1 = PEEK(b1 + 1)ă	DEF SEG = vesainfo.winseg: POKE offset&, a: POKE offset& + 1, a1: DEF SEGăCASE 24:ă	'need to test for window boundary because 65536 (window size)is not divisibleă	' by 3ă	DEF SEG = vesainfo.winsegă	POKE offset&, bă	IF offset& = 65535 THEN curbank = curbank + 1: GOSUB switchbank: offset& = -1ă	POKE offset& + 1, gă	IF offset& = 65534 THEN curbank = curbank + 1: GOSUB switchbank: offset& = -2ă	POKE offset& + 2, ră	DEF SEGăăCASE 8:ă	tp1 = (r AND &HE0) OR ((g \ 8) AND &H1C) OR (b \ 64)ă	DEF SEG = vesainfo.winseg: POKE offset&, tp1: DEF SEGăCASE 15:ă	temp& = (b \ 8) OR ((g * 4) AND &H7E0) OR (128& * r AND &H7C00)ă	b1 = VARPTR(temp&): a = PEEK(b1): a1 = PEEK(b1 + 1)ă	DEF SEG = vesainfo.winseg: POKE offset&, a: POKE offset& + 1, a1: DEF SEGăEND SELECTăEXIT SUBăswitchbank:ă  regs.AX = &H4F05ă  regs.bx = 0ă  regs.dx = curbankă  CALL INTERRUPTX(&H10, regs, regs)ăRETURNăăEND SUBăăSUB SVGAPrint (cad$, y, x, r, g, b)ă'printing in SVGAă  x0 = x: grey = (r + g + b) \ 3ă  FOR i = 1 TO LEN(cad$)  'for each char in stringă	  a = ASC(MID$(cad$, i)) * 16 + ofă	  x0 = x0 + 8ă	  FOR j = 0 TO 15 'for each scan line in character mapă		  DEF SEG = sg: b = PEEK(a + j): DEF SEGă		  IF b THENă			  yj = y + jă			  FOR K = 0 TO 7 'for each bit  in scan lineă				IF pwrsof2(K) AND b THENă					IF vesainfo.bw = 1 THENă						svgappgrey x0 - K, yj, greyă					ELSEă						SVGAPPixel x0 - K, yj, r, g, bă					END IFă				END IFă			  NEXTă		  END IFă	  NEXTă  NEXTă  ăEND SUBăăFUNCTION SVGASelectMode%ăSHARED f$, jfileăCLSăFOR i = 1 TO vesainfo.modemax: display(i).order = 0: NEXTăPRINT "The file "; jfile; " is "; image.cols; " X "; image.rowsăPRINTăPRINT "Suitable SVGA VESA modes:"ăj = 1ăFOR i = 1 TO vesainfo.modemaxă   IF display(i).Modeattributes AND 1 THENă	SELECT CASE ASC(display(i).MemoryModel)ă	CASE 4ă		display(i).order = jă		PRINT USING "##.- MODE \ \H  #### x #### x ## "; j; HEX$(display(i).MODENUM); display(i).Xres; display(i).yres; ASC(display(i).bpp)ă		j = j + 1ă	CASE 6ă		IF image.numcomp > 1 THEN   'not color modes for monochrome imagesă			display(i).order = jă			PRINT USING "##.- MODE \ \H  #### x #### x ## "; j; HEX$(display(i).MODENUM); display(i).Xres; display(i).yres; ASC(display(i).bpp)ă			j = j + 1ă		END IFăă	END SELECTă   END IFăNEXTăj = j - 1ăDOăINPUT "Select a mode"; KăLOOP UNTIL K > 0 AND K <= jăj = 0ăDOăj = j + 1ăLOOP UNTIL display(j).order = Kăvesainfo.modeord = jăvesainfo.Xres = display(j).Xresăvesainfo.yres = display(j).yresăvesainfo.bytesrow = display(j).Bytesperscanlineăvesainfo.bpp = ASC(display(j).bpp)ăSELECT CASE vesainfo.bppăCASE 8: temp = 1ăCASE 15, 16: temp = 2ăCASE 24: temp = 3ăCASE 32: temp = 4ăăEND SELECTăvesainfo.bytespixel = tempăvesainfo.winsize = 1024& * display(j).winsizeăvesainfo.winseg = display(j).winAsegmentăvesainfo.bw = 0ăăăIF (ASC(display(j).bpp) = 8) AND (image.numcomp > 1) THENă  INPUT "(B)lack & white /Approximative (C)olor: ", b$ă  a = SVGASetMode(display(j).MODENUM)ă   IF UCASE$(b$) = "B" THENă	GOSUB setgreypal: vesainfo.bw = -1ă   ELSEă	 GOSUB setaproxpală   END IFăELSEIF image.numcomp = 1 THENă  a = SVGASetMode(display(j).MODENUM)ă  GOSUB setgreypal: vesainfo.bw = -1ăăELSEă	a = SVGASetMode(display(j).MODENUM)ăEND IFăEXIT FUNCTIONăăsetgreypal:ăOUT &H3C8, 0            'create the grayscale paletteăFOR I1 = 0 TO 255: OUT &H3C9, I1 \ 4: OUT &H3C9, I1 \ 4: OUT &H3C9, I1 \ 4: NEXTăRETURNăăăsetaproxpal:ă'create approximative color paletteăOUT &H3C8, 0ăFOR I1 = 0 TO 7ă	FOR J1 = 0 TO 7ă		FOR K1 = 0 TO 4ă			OUT &H3C9, I1 * 8ă			OUT &H3C9, J1 * 8ă			OUT &H3C9, K1 * 16ă		NEXTă	NEXTăNEXTăRETURNăăEND FUNCTIONăă' Sets an SVGA mode.ăFUNCTION SVGASetMode (MODE)ăăregs.AX = &H4F02  'Set the mode.ăregs.bx = MODEăCALL INTERRUPTX(&H10, regs, regs)ăIF regs.AX <> &H4F THEN SVGASetMode = 0: EXIT FUNCTIONăregs.AX = &H4F07  'Set the top of the screen.ăregs.bx = 0ăregs.dx = 0ăregs.cx = 0ăCALL INTERRUPTX(&H10, regs, regs)ăăăăSVGASetMode = 1ăEND FUNCTIONăGerald Wykoff                  Control Limits Graphic                                        06-10-01 (  :  )       QB, Qbasic             454  14122    Xlimitx.bas ' Subject: Control Limits Graphic                 Date: 6-10-1  (18:22)   ă'           Author: Gerald L. Wykoff                       Code: QB, QBasică'           Origin:  wykoff@mbawiz.comă'ăREM  Evaluating a series of data and imposing an Upper Control Limit andăREM  a Lower Control Limit is very useful for evaluating the acceptableăREM  consistency of production or sales performance.  This utilityăREM  calculates and the plots on a graph the data for up to 20 entries.ăCLSăSCREEN 9ăCOLOR 14, 8ăDEFLNG A-ZăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "            The graphic display ranges are optimized to"ăPRINT "         accommodate numbers consisting of 1-digit or 3-digits"ăPRINT "         (both types BEFORE any decimal."ăPRINT "            This utility is an auxiliary graphic device to"ăPRINT "         give you a grasp or quick impression of your data. For"ăPRINT "         that reason - ease and quick results - data can only be"ăPRINT "         entered from the keyboard. "ăPRINT "            The graphic will trace a single list (sales volume,"ăPRINT "         profits, dividends, etc. If this is a control limit,"ăPRINT "         sampling or quality control type problem i.e., X number"ăPRINT "         of defects per N hours of processing, or X number of de-"ăPRINT "         fective boards per N cord deliveries, etc., then you'll be"ăPRINT "         prompted for the total sample taken so the program, based"ăPRINT "         on the range and volatilty of your entries, can also calcu-"ăPRINT "         late and draw on the screen an Upper Control Limit and a"ăPRINT "         Lower Control Limit (LCL) to warn of problems."ăPRINTăCOLOR 7ăPRINTăPRINT "          Type in a title name for the graphics display"ăINPUT "               that you'll be creating "; namer$ăPRINTăCOLOR 15ăPRINT "               To Continue, Tap Any Key"ăDO WHILE INKEY$ = ""ăLOOPă105ăCLSăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "                 DATA ENTRY FOR GRAPHIC"ăINPUT "         What's total for Item 1"; de1ăINPUT "         What's total for Item 2"; de2ăINPUT "         What's total for Item 3"; de3ăINPUT "         What's total for Item 4"; de4ăINPUT "         What's total for Item 5"; de5ăINPUT "         What's total for Item 6"; de6ăINPUT "         What's total for Item 7"; de7ăINPUT "         What's total for Item 8"; de8ăINPUT "         What's total for Item 9"; de9ăINPUT "         What's total for Item 10"; de10ăINPUT "         What's total for Item 11"; de11ăINPUT "         What's total for Item 12"; de12ăPRINTăCOLOR 10ăINPUT "      What is the biggest Item number you entered above "; biggestăPRINTăINPUT "      What is the smallest Item number you entered above "; smallestăPRINTăPRINTăsum = de1 + de2 + de3 + de4 + de5 + de6 + de7 + de8 + de9 + de10 + de11 + de12ămean = sum / 12ăsd = (biggest - smallest) / 4ăPRINT "MEAN is "; meanăPRINT "STANDARD DEVIATION is "; sdăUCL! = mean + (3 * sd)ăLCL! = mean - (3 * sd)ăPRINT "  The upper control limit is "; UCL!ăPRINT "  The lower control limit is "; LCL!ăPRINTăCOLOR 10ăPRINT "                Tap Any Key to Continue"ăDO WHILE INKEY$ = ""ăLOOPăCLSăCOLOR 14, 8ă'LNG A-ZăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "         What size and range of data do you want displayed?"ăPRINTăCOLOR 15ăPRINT "      (1) Display data 0 - 10 Range (1-digit entries)"ăPRINT "      (2) Display data 0 - 1000 Range (2-digit entries)"ăINPUT "                  Make a Selection (1 or 2) "; range$ăIF range$ = "2" THEN GOTO 600 ELSE GOTO 400ă       'specs for the vertical  lines  (lines are X,Y)ă400ăCLSăSCREEN 12ă'DEFSNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 11ăPRINT "UCL & LCL!"ăLOCATE , 60ăCOLOR 15ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White LineS"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 7  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 7 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 7  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 7  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 7  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 7  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 7  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 7  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 7  ' this is an add-on init.lineăLOCATE 2, 3ăCOLOR 14ăPRINT "INCIDENTS"ăLOCATE 3, 28: PRINT "CONTROL LIMIT ANALYSIS FOR  "; namer$ăLOCATE 3, 3: PRINT "RANGE 0 - 10"ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ăLOCATE 26, 25ăCOLOR 5ăPRINT "NUMBER OF ENTRIES SUBMITTED FOR THIS ANALYSIS"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "1"ăLOCATE 20, 8ăPRINT "2"ăLOCATE 18, 8ăPRINT "3"ăLOCATE 16, 8ăPRINT "4"ăLOCATE 14, 10ăPRINT "5"ăLOCATE 13, 8ăPRINT "6"ăLOCATE 11, 8ăPRINT "7"ăLOCATE 9, 8ăPRINT "8"ăLOCATE 7, 8ăPRINT "9"ăLOCATE 5, 8ăPRINT "10"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 7      '1ăLINE (160, 75)-(160, 375), 7       '2ăLINE (190, 75)-(190, 375), 7        '3ăLINE (220, 75)-(220, 375), 7        '4ăLINE (250, 75)-(250, 375), 7          '5ăLINE (280, 75)-(280, 375), 7   '6ăLINE (310, 75)-(310, 375), 7  '7ăLINE (340, 75)-(340, 375), 7   '8      30 separation factorăLINE (370, 75)-(370, 375), 7   '9ăLINE (400, 75)-(400, 375), 7   '10ăLINE (430, 75)-(430, 375), 7   '11ăLINE (460, 75)-(460, 375), 7   '12ă'           this section computes the traceline pointsă'ă'ă'ăUCL! = UCL! * .08         'these are set in arbitraily now and mustăLCL! = UCL! * .15        'be accommodated before finalizationă'ă'ă188                   ăDEFLNG A-Zăhora = 375ă' sets up the horizontal tracesăhor1! = 375 - (de1 * 30)ăup1! = hor1! - (UCL! * 30)ălow1! = hor1! + (LCL! * 30)ăhor2! = 375 - (de2 * 30)ăup2! = hor2! - (UCL! * 30)ălow2! = hor2! + (LCL! * 30)ăhor3! = 375 - (de3 * 30)ăup3! = hor3! - (UCL! * 30)ălow3! = hor3! + (LCL! * 30)ăhor4! = 375 - (de4 * 30)ăup4! = hor4! - (UCL! * 30)ălow4! = hor4! + (LCL! * 30)ăhor5! = 375 - (de5 * 30)ăup5! = hor5! - (UCL! * 30)ălow5! = hor5! + (LCL! * 30)ăhor6! = 375 - (de6 * 30)ăup6! = hor6! - (UCL! * 30)ălow6! = hor6! + (LCL! * 30)ăhor7! = 375 - (de7 * 30)ăup7! = hor7! - (UCL! * 30)ălow7! = hor7! + (LCL! * 30)ăhor8! = 375 - (de8 * 30)ăup8! = hor8! - (UCL! * 30)ălow8! = hor8! + (LCL! * 30)ăhor9! = 375 - (de9 * 30)ăup9! = hor9! - (UCL! * 30)ălow9! = hor9! + (LCL! * 30)ăhor10! = 375 - (de10 * 30)ăup10! = hor10! - (UCL! * 30)ălow10! = hor10! + (LCL! * 30)ăhor11! = 375 - (de11 * 30)ăup11! = hor11! - (UCL! * 30)ălow11! = hor11! + (LCL! * 30)ăhor12! = 375 - (de12 * 30)ăup12! = hor12! - (UCL! * 30)ălow12! = hor12! + (LCL! * 30)ăă'ăă'                    this section sets up the raw entry number  traceă177ăLINE (100, 375)-(130, hor1!), 13ăLINE (130, hor1!)-(160, hor2!), 13ăLINE (160, hor2!)-(190, hor3!), 13ăLINE (190, hor3!)-(220, hor4!), 13ăLINE (220, hor4!)-(250, hor5!), 13ăLINE (250, hor5!)-(280, hor6!), 13ăLINE (280, hor6!)-(310, hor7!), 13ăLINE (310, hor7!)-(340, hor8!), 13ăLINE (340, hor8!)-(370, hor9!), 13ăLINE (370, hor9!)-(400, hor10!), 13ăLINE (400, hor10!)-(430, hor11!), 13ăLINE (430, hor11!)-(460, hor12!), 13ă166 '                 this section draws the UCL! trace lineăLINE (100, 375)-(130, up1!), 15ăLINE (130, up1!)-(160, up2!), 15ăLINE (160, up2!)-(190, up3!), 15ăLINE (190, up3!)-(220, up4!), 15ăLINE (220, up4!)-(250, up5!), 15ăLINE (250, up5!)-(280, up6!), 15ăLINE (280, up6!)-(310, up7!), 15ăLINE (310, up7!)-(340, up8!), 15ăLINE (340, up8!)-(370, up9!), 15ăLINE (370, up9!)-(400, up10!), 15ăLINE (400, up10!)-(430, up11!), 15ăLINE (430, up11!)-(460, up12!), 15ă155 '       '         this section draws the LCL trace lineăLINE (100, 375)-(130, low1!), 15ăLINE (130, low1!)-(160, low2!), 15ăLINE (160, low2!)-(190, low3!), 15ăLINE (190, low3!)-(220, low4!), 15ăLINE (220, low4!)-(250, low5!), 15ăLINE (250, low5!)-(280, low6!), 15ăLINE (280, low6!)-(310, low7!), 15ăLINE (310, low7!)-(340, low8!), 15ăLINE (340, low8!)-(370, low9!), 15ăLINE (370, low9!)-(400, low10!), 15ăLINE (400, low10!)-(430, low11!), 15ăLINE (430, low11!)-(460, low12!), 15ăăENDăă'      THIS IS FOR GRAPH SHOWING 0 TO 100(100, 200 . . .800,900, ETC)ă600ăCLSăSCREEN 12ă'DEFLNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 11ăPRINT "UCL! & LCL"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White LineS"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 11  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 11 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 11  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 11  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 11  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 11  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 11  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 11  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 11  ' this is an add-on init.lineă    '          this section shows graph for 3-digit entries to 1000ăLOCATE 3, 3ăCOLOR 14ăPRINT "INCIDENTS"ăLOCATE 3, 28: PRINT "CONTROL LIMIT ANALYSIS FOR  "; namer$ăLOCATE 4, 3: PRINT "RANGE 0-1000"ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ăLOCATE 26, 15ăCOLOR 5ăPRINT "NUMBER OF ENTRIES SUBMITTED FOR ANALYSIS"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "100"ăLOCATE 20, 8ăPRINT "200"ăLOCATE 18, 8ăPRINT "300"ăLOCATE 16, 8ăPRINT "400"ăLOCATE 15, 8ăPRINT "500"ăLOCATE 13, 8ăPRINT "600"ăLOCATE 11, 8ăPRINT "700"ăLOCATE 9, 8ăPRINT "800"ăLOCATE 7, 8ăPRINT "900"ăLOCATE 5, 8ăPRINT "1000"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 11      '1ăLINE (160, 75)-(160, 375), 11       '2ăLINE (190, 75)-(190, 375), 11        '3ăLINE (220, 75)-(220, 375), 11        '4ăLINE (250, 75)-(250, 375), 11          '5ăLINE (280, 75)-(280, 375), 11   '6ăLINE (310, 75)-(310, 375), 11  '7ăLINE (340, 75)-(340, 375), 11   '8      30 separation factorăLINE (370, 75)-(370, 375), 11   '9ăLINE (400, 75)-(400, 375), 11   '10ăLINE (430, 75)-(430, 375), 11   '11ăLINE (460, 75)-(460, 375), 11   '12ă'           this section draws the tracelineă'ă'ă'ă'UCL = UCL * .1   'these are set in arbitraily now and mustă'LCL = LCL * .15         'be accommodated before finalizationă'ă888ăDEFLNG A-Ză'ăhora = 375ăhor1! = 375 - (de1 * .3)ăup1! = hor1! - (UCL! * .3)ălow1! = hor1! + (LCL! * .3)ăhor2! = 375 - (de2 * .3)ăup2! = hor2! - (UCL! * .3)ălow2! = hor2! + (LCL! * .3)ăhor3! = 375 - (de3 * .3)ăup3! = hor3! - (UCL! * .3)ălow3! = hor3! + (LCL! * .3)ăhor4! = 375 - (de4 * .3)ăup4! = hor4! - (UCL! * .3)ălow4! = hor4! + (LCL! * .3)ăhor5! = 375 - (de5 * .3)ăup5! = hor5! - (UCL! * .3)ălow5! = hor5! + (LCL! * .3)ăhor6! = 375 - (de6 * .3)ăup6! = hor6! - (UCL! * .3)ălow6! = hor6! + (LCL! * .3)ăhor7! = 375 - (de7 * .3)ăup7! = hor7! - (UCL! * .3)ălow7! = hor7! + (LCL! * .3)ăhor8! = 375 - (de8 * .3)ăup8! = hor8! - (UCL! * .3)ălow8! = hor8! + (LCL! * .3)ăhor9! = 375 - (de9 * .3)ăup9! = hor9! - (UCL! * .3)ălow9! = hor9! + (LCL! * .3)ăhor10! = 375 - (de10 * .3)ăup10! = hor10! - (UCL! * .3)ălow10! = hor10! + (LCL! * .3)ăhor11! = 375 - (de11 * .3)ăup11! = hor11! - (UCL! * .3)ălow11! = hor11! + (LCL! * .3)ăhor12! = 375 - (de12 * .3)ăup12! = hor12! - (UCL! * .3)ălow12! = hor12! + (LCL! * .3)ă777      'this section draws the white LCL trace linesăLINE (100, 375)-(130, low1!), 15ăLINE (130, low1!)-(160, low2!), 15ăLINE (160, low2!)-(190, low3!), 15ăLINE (190, low3!)-(220, low4!), 15ăLINE (220, low4!)-(250, low5!), 15ăLINE (250, low5!)-(280, low6!), 15ăLINE (280, low6!)-(310, low7!), 15ăLINE (310, low7!)-(340, low8!), 15ăLINE (340, low8!)-(370, low9!), 15ăLINE (370, low9!)-(400, low10!), 15ăLINE (400, low10!)-(430, low11!), 15ăLINE (430, low11!)-(460, low12!), 15ă666      'this section draws the yellow UCL trace linesăLINE (100, 375)-(130, up1!), 14ăLINE (130, up1!)-(160, up2!), 14ăLINE (160, up2!)-(190, up3!), 14ăLINE (190, up3!)-(220, up4!), 14ăLINE (220, up4!)-(250, up5!), 14ăLINE (250, up5!)-(280, up6!), 14ăLINE (280, up6!)-(310, up7!), 14ăLINE (310, up7!)-(340, up8!), 14ăLINE (340, up8!)-(370, up9!), 14ăLINE (370, up9!)-(400, up10!), 14ăLINE (400, up10!)-(430, up11!), 14ăLINE (430, up11!)-(460, up12!), 14ă555             '   this section sets up the red RAW DTAT trace lineăLINE (100, 375)-(130, hor1!), 5ăLINE (130, hor1!)-(160, hor2!), 5ăLINE (160, hor2!)-(190, hor3!), 5ăLINE (190, hor3!)-(220, hor4!), 5ăLINE (220, hor4!)-(250, hor5!), 5ăLINE (250, hor5!)-(280, hor6!), 5ăLINE (280, hor6!)-(310, hor7!), 5ăLINE (310, hor7!)-(340, hor8!), 5ăLINE (340, hor8!)-(370, hor9!), 5ăLINE (370, hor9!)-(400, hor10!), 5ăLINE (400, hor10!)-(430, hor11!), 5ăLINE (430, hor11!)-(460, hor12!), 5ăăăENDăăăGerald Wykoff                  Statistical Sampling                                          07-01-01 (  :  )       QB, Qbasic             429  13319    Xsamplx.bas ' Subject: Statistics: Sampling                              Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comCLSăSCREEN 9ăCOLOR 10, 1ăPRINTăPRINTăPRINTăPRINT "                 SAMPLING DISPLAY (WITH CONTROL LIMITS)"ăPRINTăCOLOR 15ăPRINT "              This graphic display is optimized to display the number"ăPRINT "         of Incidents (plus Upper and Lower Control Limits) per Sample."ăPRINT "              It accommodate numbers with 1- OR 3-digits (BEFORE any"ăPRINT "         decimal) whether manually entered OR called up from an"ăPRINT "         existing data file.  No setup exists for 2-digit numbers."ăPRINT "              The program will accept entries for 12 Samplings"ăPRINT "         with Incident totals (up to 10 incidents per Sample for"ăPRINT "         1-digit numbers and up to 1000 incidents per Sample for"ăPRINT "         3-digit numbers samples taken. If you have less than 12"ăPRINT "         samples, simply enter zeroes (0) to complete the data"ăPRINT "         entry routine."ăCOLOR 14ăPRINTăPRINT "          Type in a title name for the graphics display"ăINPUT "               that you'll be creating "; namer$ăPRINTăPRINTăCOLOR 15ăPRINT "   Do you wish to call up an (1) existing file or (2) type in the data?"ăINPUT "             Please Make Your Selection (1 or 2) "; what$ăIF what$ = "1" THEN GOTO 95 ELSE GOTO 105   'call up an existing statements fileă95ăPRINTăPRINTăPRINTăINPUT "    Type in the path/name of the data file "; file$ăOPEN file$ FOR INPUT AS #1ăINPUT #1, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12ăd1 = item1: PRINT TAB(30); d1ăd2 = item2: PRINT TAB(30); d2ăd3 = item3: PRINT TAB(30); d3ăd4 = item4: PRINT TAB(30); d4ăd5 = item5: PRINT TAB(30); d5ăd6 = item6: PRINT TAB(30); d6ăd7 = item7: PRINT TAB(30); d7ăd8 = item8: PRINT TAB(30); d8ăd9 = item9: PRINT TAB(30); d9ăd10 = item10: PRINT TAB(30); d10ăd11 = item11: PRINT TAB(30); d11ăd12 = item12: PRINT TAB(30); d12ăGOTO 200ăPRINTăPRINTăPRINTăPRINTăCOLOR 15ăPRINT "               To Continue, Tap Any Key"ăDO: LOOP UNTIL INKEY$ <> ""ă'ă105ăCLSăSCREEN 9ăCOLOR 10, 9ăDEFLNG A-ZăPRINTăPRINTăPRINTăPRINT "                 DATA ENTRY FOR GRAPHIC"ăINPUT "         How many Incidents in Item 1"; de1ăINPUT "         How many Incidents in Item 2"; de2ăINPUT "         How many Incidents in Item 3"; de3ăINPUT "         How many Incidents in Item 4"; de4ăINPUT "         How many Incidents in Item 5"; de5ăINPUT "         How many Incidents in Item 6"; de6ăINPUT "         How many Incidents in Item 7"; de7ăINPUT "         How many Incidents in Item 8"; de8ăINPUT "         How many Incidents in Item 9"; de9ăINPUT "         How many Incidents in Item 10"; de10ăINPUT "         How many Incidents in Item 11"; de11ăINPUT "         How many Incidents in Item 12"; de12ă200ăPRINTăPRINTăPRINT "What size and range of data do you want displayed?"ăPRINTăPRINT "      (1) Display data 0 - 10 Range (1-digit entries)"ăPRINT "      (2) Display data 0 - 1000 Range (2-digit entries)"ăINPUT "                  Make a Selection (1 or 2) "; Range$ăIF Range$ = "2" THEN GOTO 600 ELSE GOTO 400ă       'specs for the vertical  lines  (lines are X,Y)ă400ăCLSăSCREEN 12ăDEFLNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 9ăPRINT "UCL & LCL"ăLOCATE , 60ăPRINT "OF SAMPLE"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White LineS"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 11  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 11 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 11  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 11  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 11  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 11  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 11  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 11  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 11  ' this is an add-on init.lineăLOCATE 2, 3ăCOLOR 14ăPRINT "INCIDENTS"ăLOCATE 3, 28: PRINT "SAMPLING ANALYSIS FOR  "; namer$ăLOCATE 3, 3: PRINT "RANGE 0 - 10"ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ăLOCATE 26, 25ăCOLOR 5ăPRINT "NUMBER OF SAMPLES TAKEN FOR THIS ANALYSIS"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "1"ăLOCATE 20, 8ăPRINT "2"ăLOCATE 18, 8ăPRINT "3"ăLOCATE 16, 8ăPRINT "4"ăLOCATE 14, 8ăPRINT "5"ăLOCATE 13, 8ăPRINT "6"ăLOCATE 11, 8ăPRINT "7"ăLOCATE 9, 8ăPRINT "8"ăLOCATE 7, 8ăPRINT "9"ăLOCATE 5, 8ăPRINT "10"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 11      '1ăLINE (160, 75)-(160, 375), 11       '2ăLINE (190, 75)-(190, 375), 11        '3ăLINE (220, 75)-(220, 375), 11        '4ăLINE (250, 75)-(250, 375), 11          '5ăLINE (280, 75)-(280, 375), 11   '6ăLINE (310, 75)-(310, 375), 11  '7ăLINE (340, 75)-(340, 375), 11   '8      30 separation factorăLINE (370, 75)-(370, 375), 11   '9ăLINE (400, 75)-(400, 375), 11   '10ăLINE (430, 75)-(430, 375), 11   '11ăLINE (460, 75)-(460, 375), 11   '12ă'           this section computes the traceline pointsăhora = 375ă'ă'ă'ăUCL = 2.1   'these are set in arbitraily now and mustăLCL = 1.5          'be accommodated before finalizationă'ă'ă                           ' sets up the horizontal tracesăhor1! = 375 - (de1 * 30)ăup1! = (hor1! - (UCL * 30))ălow1! = hor1! + (LCL * 30)ăhor2! = 375 - (de2 * 30)ăup2! = (hor2! - (UCL * 30))ălow2! = hor2! + (LCL * 30)ăhor3! = 375 - (de3 * 30)ăup3! = (hor3! - (UCL * 30))ălow3! = hor3! + (LCL * 30)ăhor4! = 375 - (de4 * 30)ăup4! = hor4! - (UCL * 30)ălow4! = hor4! + (LCL * 30)ăhor5! = 375 - (de5 * 30)ăup5! = hor5! - (UCL * 30)ălow5! = hor5! + (LCL * 30)ăhor6! = 375 - (de6 * 30)ăup6! = hor6! - (UCL * 30)ălow6! = hor6! + (LCL * 30)ăhor7! = 375 - (de7 * 30)ăup7! = hor7! - (UCL * 30)ălow7! = hor7! + (LCL * 30)ăhor8! = 375 - (de8 * 30)ăup8! = hor8! - (UCL * 30)ălow8! = hor8! + (LCL * 30)ăhor9! = 375 - (de9 * 30)ăup9! = hor9! - (UCL * 30)ălow9! = hor9! + (LCL * 30)ăhor10! = 375 - (de10 * 30)ăup10! = hor10! - (UCL * 30)ălow10! = hor10! + (LCL * 30)ăhor11! = 375 - (de11 * 30)ăup11! = hor11! - (UCL * 30)ălow11! = hor11! + (LCL * 30)ăhor12! = 375 - (de12 * 30)ăup12! = hor12! - (UCL * 30)ălow12! = hor12! + (LCL * 30)ăă'    ăă'                    this section sets up the y-position traceăăLINE (100, 375)-(130, hor1!), 14ăLINE (130, hor1!)-(160, hor2!), 14ăLINE (160, hor2!)-(190, hor3!), 14ăLINE (190, hor3!)-(220, hor4!), 14ăLINE (220, hor4!)-(250, hor5!), 14ăLINE (250, hor5!)-(280, hor6!), 14ăLINE (280, hor6!)-(310, hor7!), 14ăLINE (310, hor7!)-(340, hor8!), 14ăLINE (340, hor8!)-(370, hor9!), 14ăLINE (370, hor9!)-(400, hor10!), 14ăLINE (400, hor10!)-(430, hor11!), 14ăLINE (430, hor11!)-(460, hor12!), 14ă'                 this section draws the UCL trace lineăLINE (100, 375)-(130, up1!), 15ăLINE (130, up1!)-(160, up2!), 15ăLINE (160, up2!)-(190, up3!), 15ăLINE (190, up3!)-(220, up4!), 15ăLINE (220, up4!)-(250, up5!), 15ăLINE (250, up5!)-(280, up6!), 15ăLINE (280, up6!)-(310, up7!), 15ăLINE (310, up7!)-(340, up8!), 15ăLINE (340, up8!)-(370, up9!), 15ăLINE (370, up9!)-(400, up10!), 15ăLINE (400, up10!)-(430, up11!), 15ăLINE (430, up11!)-(460, up12!), 15ă'       '         this section draws the LCL trace lineăLINE (100, 375)-(130, low1!), 15ăLINE (130, low1!)-(160, low2!), 15ăLINE (160, low2!)-(190, low3!), 15ăLINE (190, low3!)-(220, low4!), 15ăLINE (220, low4!)-(250, low5!), 15ăLINE (250, low5!)-(280, low6!), 15ăLINE (280, low6!)-(310, low7!), 15ăLINE (310, low7!)-(340, low8!), 15ăLINE (340, low8!)-(370, low9!), 15ăLINE (370, low9!)-(400, low10!), 15ăLINE (400, low10!)-(430, low11!), 15ăLINE (430, low11!)-(460, low12!), 15ăăENDăă'      THIS IS FOR GRAPH SHOWING 0 TO 100(100, 200 . . .800,900, ETC)ă600ăCLSăSCREEN 12ăDEFLNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 9ăPRINT "UCL & LCL"ăLOCATE , 60ăPRINT "OF SAMPLE"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White LineS"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 11  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 11 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 11  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 11  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 11  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 11  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 11  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 11  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 11  ' this is an add-on init.lineă    '          this section shows graph for 3-digit entries to 1000ăLOCATE 3, 3ăCOLOR 14ăPRINT "INCIDENTS"ăLOCATE 3, 28: PRINT "SAMPLING ANALYSIS FOR  "; namer$ăLOCATE 4, 3: PRINT "RANGE 0-1000"ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ăLOCATE 26, 15ăCOLOR 5ăPRINT "NUMBER OF SAMPLES TAKEN FOR ANALYSIS"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "100"ăLOCATE 20, 8ăPRINT "200"ăLOCATE 18, 8ăPRINT "300"ăLOCATE 16, 8ăPRINT "400"ăLOCATE 15, 8ăPRINT "500"ăLOCATE 13, 8ăPRINT "600"ăLOCATE 11, 8ăPRINT "700"ăLOCATE 9, 8ăPRINT "800"ăLOCATE 7, 8ăPRINT "900"ăLOCATE 5, 8ăPRINT "1000"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 11      '1ăLINE (160, 75)-(160, 375), 11       '2ăLINE (190, 75)-(190, 375), 11        '3ăLINE (220, 75)-(220, 375), 11        '4ăLINE (250, 75)-(250, 375), 11          '5ăLINE (280, 75)-(280, 375), 11   '6ăLINE (310, 75)-(310, 375), 11  '7ăLINE (340, 75)-(340, 375), 11   '8      30 separation factorăLINE (370, 75)-(370, 375), 11   '9ăLINE (400, 75)-(400, 375), 11   '10ăLINE (430, 75)-(430, 375), 11   '11ăLINE (460, 75)-(460, 375), 11   '12ă'           this section draws the tracelineă'ă'ă'ăUCL = 50.1   'these are set in arbitraily now and mustăLCL = 18.5          'be accommodated before finalizationă'ă'ă'ăhora = 375ăhor1! = 375 - (de1 * .3)ăup1! = hor1! - (UCL * .3)ălow1! = hor1! + (LCL * .3)ăhor2! = 375 - (it2 * .3)ăup2! = hor2! - (UCL * .3)ălow2! = hor2! + (LCL * .3)ăhor3! = 375 - (de3 * .3)ăup3! = hor3! - (UCL * .3)ălow3! = hor3! + (LCL * .3)ăhor4! = 375 - (de4 * .3)ăup4! = hor4! - (UCL * .3)ălow4! = hor4! + (LCL * .3)ăhor5! = 375 - (de5 * .3)ăup5! = hor5! - (UCL * .3)ălow5! = hor5! + (LCL * .3)ăhor6! = 375 - (de6 * .3)ăup6! = hor6! - (UCL * .3)ălow6! = hor6! + (LCL * .3)ăhor7! = 375 - (de7 * .3)ăup7! = hor7! - (UCL * .3)ălow7! = hor7! + (LCL * .3)ăhor8! = 375 - (de8 * .3)ăup8! = hor8! - (UCL * .3)ălow8! = hor8! + (LCL * .3)ăhor9! = 375 - (de9 * .3)ăup9! = hor9! - (UCL * .3)ălow9! = hor9! + (LCL * .3)ăhor10! = 375 - (de10 * .3)ăup10! = hor10! - (UCL * .3)ălow10! = hor10! + (LCL * .3)ăhor11! = 375 - (de11 * .3)ăup11! = hor11! - (UCL * .3)ălow11! = hor11! + (LCL * .3)ăhor12! = 375 - (de12 * .3)ăup12! = hor12! - (UCL * .3)ălow12! = hor12! + (LCL * .3)ă      'this section draws the LCL trace linesăLINE (100, 375)-(130, low1!), 11ăLINE (130, low1!)-(160, low2!), 14ăLINE (160, low2!)-(190, low3!), 14ăLINE (190, low3!)-(220, low4!), 14ăLINE (220, low4!)-(250, low5!), 14ăLINE (250, low5!)-(280, low6!), 14ăLINE (280, low6!)-(310, low7!), 14ăLINE (310, low7!)-(340, low8!), 14ăLINE (340, low8!)-(370, low9!), 14ăLINE (370, low9!)-(400, low10!), 14ăLINE (400, low10!)-(430, low11!), 14ăLINE (430, low11!)-(460, low12!), 14ă      'this section draws the UCL trace linesăLINE (100, 375)-(130, up1!), 15ăLINE (130, up1!)-(160, up2!), 15ăLINE (160, up2!)-(190, up3!), 15ăLINE (190, up3!)-(220, up4!), 15ăLINE (220, up4!)-(250, up5!), 15ăLINE (250, up5!)-(280, up6!), 15ăLINE (280, up6!)-(310, up7!), 15ăLINE (310, up7!)-(340, up8!), 15ăLINE (340, up8!)-(370, up9!), 15ăLINE (370, up9!)-(400, up10!), 15ăLINE (400, up10!)-(430, up11!), 15ăLINE (430, up11!)-(460, up12!), 15ă             '                    this section sets up the x-position traceăLINE (100, 375)-(130, hor1!), 13ăLINE (130, hor1!)-(160, hor2!), 13ăLINE (160, hor2!)-(190, hor3!), 13ăLINE (190, hor3!)-(220, hor4!), 13ăLINE (220, hor4!)-(250, hor5!), 13ăLINE (250, hor5!)-(280, hor6!), 13ăLINE (280, hor6!)-(310, hor7!), 13ăLINE (310, hor7!)-(340, hor8!), 13ăLINE (340, hor8!)-(370, hor9!), 13ăLINE (370, hor9!)-(400, hor10!), 13ăLINE (400, hor10!)-(430, hor11!), 13ăLINE (430, hor11!)-(460, hor12!), 13ăăăENDăăăGerald Wykoff                  Paired Variable Graphic                                       07-01-01 (  :  )       QB, Qbasic             243  8006     Xpairs.bas  ' Subject: Paired Variables Graphic                              Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comă25ăDECLARE SUB GRAPH (GOODS(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%)ăREM PROGRAM 8.4ăREM GraphăCOMMON SHARED XVAR$, YVAR$ăCLSăSCREEN 9ăCOLOR 10, 1ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "                   GRAPH COMPARING PAIRED VARIABLES."ăCOLOR 11ăPRINT "        (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ăPRINTăPRINTăCOLOR 15ăPRINT "         This visual presents a relative display of the data"ăPRINT "      in paired variables.  For that reason, try to keep the"ăPRINT "      entries disciplined i.e., NUMBERS WITH SAME DIGIT TOTALS"ăPRINT "      IN BOTH LISTS. The graphic does not accept keyboard"ăPRINT "      data entries .. . you can only call up data from a perma-"ăPRINT "      nent Paired Sequential file."ăPRINT "         Because the display is relative, there is no limit on the"ăPRINT "      size of the number - although smaller numbers mean less typing."ăPRINTăPRINTăCOLOR 14ăINPUT "       What is the name/title for the X Variable "; XVAR$ăPRINTăINPUT "       What is the name/title for the Y Variable "; YVAR$ăPRINTă     '   call up an existing statements fileăPRINTăPRINTă200ăINPUT "         What's the name/path of the file you want "; file$ăOPEN file$ FOR INPUT AS #1ă'                               start getting the data converteăcounter = 1ăDO UNTIL EOF(1)ăINPUT #1, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12ăFOR i = 1 TO 1000ă NEXTă counter = counter + 1ăLOOPăCLSăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT TAB(30); "X", "Y"ăPRINT TAB(30); d1, e1ăPRINT TAB(30); d2, e2ăPRINT TAB(30); d3, e3ăPRINT TAB(30); d4, e4ăPRINT TAB(30); d5, e5ăPRINT TAB(30); d6, e6ăPRINT TAB(30); d7, e7ăPRINT TAB(30); d8, e8ăPRINT TAB(30); d9, e9ăPRINT TAB(30); d10, e10ăPRINT TAB(30); d11, e11ăPRINT TAB(30); d12, e12ăPRINTăPRINTăPRINT "     View the X Variable data above.  Since the graph shows relative"ăINPUT "     data, to maintain consistency, type in the highest value "; nuvalăDIM QUANTITY1(12)ăQUANTITY1(1) = d1ăQUANTITY1(2) = d2ăQUANTITY1(3) = d3ăQUANTITY1(4) = d4ăQUANTITY1(5) = d5ăQUANTITY1(6) = d6ăQUANTITY1(7) = d7ăQUANTITY1(8) = d8ăQUANTITY1(9) = d9ăQUANTITY1(10) = d10ăQUANTITY1(11) = d11ăQUANTITY1(12) = d12ă 'ăDIM QUANTITY2(12)ăQUANTITY2(1) = e1ăQUANTITY2(1) = nuvalăQUANTITY2(2) = e2ăQUANTITY2(3) = e3ăQUANTITY2(4) = e4ăQUANTITY2(5) = e5ăQUANTITY2(6) = e6ăQUANTITY2(7) = e7ăQUANTITY2(8) = e8ăQUANTITY2(9) = e9ăQUANTITY2(10) = e10ăQUANTITY2(11) = e11ăQUANTITY2(12) = e12ă'ă       SCREEN 12ă          CLSă       'ă       ' declare two different arraysă       'ă        ă       'ăă       '   Note:  bottom of top two charts is 145 and disance from 0-10ă               '    is 100 counts....bottom of bottom chart is 310 and distanceă              'is again 100 counts  ....vertical speacing note vipă              ' two different set of dataă              '  this line controls the dark blue bars on #1 & #3ă       DATA quantity1(1), quantity1(2), quantity1(3), quantity1(4), quantity1(5), quantity1(6), quantity1(7), quantity1(8), quantity1(9), quantity1(10), quantity1(11), quantity1(12)ă              ' this data line controls silver bars on the #2 and #3ă       DATA quantity2(1), quantity2(2), quantity2(3), quantity2(4), quantity2(5), quantity2(6), quantity2(7), quantity2(8), quantity2(9), quantity2(10), quantity2(11), quantity2(12)ăă       TIMES% = 12     'was 15ă       LABEL% = 80ă    '  to set color on bars, use last digit in CALL GRAPH commandsă' line sets bottomfor graf #1&bar color last digită          CALL GRAPH(QUANTITY1(), TIMES%, 45, 145, LABEL%, 1)  'was 1, 80, LABEL%, 1ă                      ' this adjusts the graf bars on the 3 chartsă       'ă       ' call subprogram with different parametersă       ' three different graphs will be displayedă       '                'this line sets bottom on graf #2ă          CALL GRAPH(QUANTITY2(), TIMES%, 330, 145, LABEL%, 8)  'was 430, 135 280, 170, LABEL%, 2ă              ' this line sets bar on bottom most graph(bar color last digit)ă          CALL GRAPH(QUANTITY1(), TIMES%, 200, 310, 80, 1)  'was 200, 300, 80, 1ă'  this line sets bars on bottom most graph(bar color is last digit)ă          CALL GRAPH(QUANTITY2(), TIMES%, 200, 310, 80, 8)  'was 200, 300, 80, 2ăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăINPUT "   Would you like to (1) Repeat, or (2) Quit (1 or 2) "; ask17$ăIF ask17$ = "1" THEN GOTO 750 ELSE GOTO 1200ă750ăCLOSE #1ăGOTO 25ă1200ăCLOSE #1ăENDăă       SUB GRAPH (GOODS(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%)ăă          DIM NORM(DAYS%)ă          PMAX = GOODS(1)ă          FOR NUMBER.OF.ELEMENT = 2 TO DAYS%ă             IF GOODS(NUMBER.OF.ELEMENT) > PMAX THENă                PMAX = GOODS(NUMBER.OF.ELEMENT)ă             END IFă          NEXT NUMBER.OF.ELEMENTă          LINE (XPOS%, YPOS%)-(XPOS% + 150, YPOS%), COL.GRAPH%  'was 187ă          FOR NUMBER.OF.ELEMENT = 1 TO DAYS%ă             NORM(NUMBER.OF.ELEMENT) = GOODS(NUMBER.OF.ELEMENT) / PMAX * NORMA%ă             ZPOS% = XPOS% + 20 * (NUMBER.OF.ELEMENT - 1)ă             LINE (ZPOS%, YPOS%)-(ZPOS% + 10, YPOS% - NORM(NUMBER.OF.ELEMENT)), COL.GRAPH%, BF  'was 7, not 10ă          NEXT NUMBER.OF.ELEMENTă          LOCATE 3, 12ă          COLOR 14ă          PRINT TAB(15); XVAR$; TAB(45); YVAR$ă          LOCATE 14, 15ă          PRINT "COMPARISON BETWEEN X AND Y VARIABLES"ă          COLOR 5ă          LOCATE 11, 6ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12       1 2  3 4 5  6 7  8 9 10 11 12"ă          LOCATE 21, 26ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12"ă          COLOR 14ă          LOCATE 23, 5ă          PRINT "These three charts offer a relative presentation of the"ă          LOCATE 24, 5ă          PRINT "relationship between the Paired Variables - a view that is"ă          LOCATE 25, 5ă          PRINT "often not evident when looking at strict numbers.  Ignore"ă          LOCATE 26, 5ă          PRINT "column 1 in Charts 2 & 3 (it's the height limiter which assures"ă          LOCATE , 5ă          PRINT "the relative bar height consistency for all three charts."ă         'COLOR 15ă         LINE (42, 50)-(42, 145), 11   'left vertical lineă         LINE (41, 50)-(41, 145), 11                      'line doublesă                  '    bottom most vertical lineă         LINE (42, 145)-(600, 145), 11ă         LINE (42, 146)-(600, 146), 11ă                       'ă         LINE (200, 210)-(200, 310), 11  '  bottom vertical for bottom graphă         LINE (199, 210)-(199, 311), 11    ' doubles bot-bot vertical lineă         'ă         LINE (199, 310)-(450, 310), 11      'bottom horizontal lineă         LINE (199, 311)-(449, 311), 11ă         'ă                        ' places index numbers for top two chartsă         LOCATE 5, 3ă         PRINT "10"ă         LOCATE 6, 4ă         PRINT "|"ă         LOCATE 7, 4ă         PRINT "|"ă         LOCATE 8, 4ă         PRINT "|"ă         LOCATE 9, 4ă         PRINT "|"ă         LOCATE 10, 4ă         PRINT "0"ă         '                  this places index numbers on bottom chartă         LOCATE 15, 23ă         PRINT "10"ă         LOCATE 16, 24ă         PRINT "|"ă         LOCATE 17, 24ă         PRINT "|"ă         LOCATE 18, 24ă         PRINT "|"ă         LOCATE 19, 24ă         PRINT "|"ă         LOCATE 20, 24ă         PRINT "0"ăă       END SUBăăGerald Wykoff                  Ogive Chart Graphic                                           07-01-01 (  :  )       QB, Qbasic             188  5908     Xolgivx.bas ' Subject: Ogive Chart Graphic                              Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comDECLARE SUB greenbox ()ăCOMMON SHARED il!, sum, namer$ăCOMMON SHARED vera, ver1, ver2, ver3, ver4, ver5, ver6ăCOMMON SHARED hor1, hor2, hor3, hor4, hor5, hor6ăCLSăSCREEN 12ăCALL greenboxăCOLOR 14ăLOCATE 5, 20: PRINT "THE OGIVE CHART (CUMULATIVE TOTAL DATA)"ăLOCATE 8, 10ăPRINT "This display displays a cumulative or running total for the"ăLOCATE , 10: PRINT "observations that you enter for each event. It best accom-"ăLOCATE , 10: PRINT "modates 2 digit numbers (BEFORE any decimal)."ăPRINTăPRINTăLOCATE 20, 15: PRINT "Type in a name/title that will identify"ăLOCATE , 20ăINPUT "this particular chart project "; namer$ă105ăLOCATE 25, 30ăCOLOR 15ăPRINT "To Continue, Tap Any Key"ăDO: LOOP UNTIL INKEY$ <> ""ă'ăCLSăSCREEN 9ăCOLOR 10, 9ăDEFLNG A-ZăLOCATE 3, 15: PRINT "DATA ENTRY FOR GRAPHIC"ăINPUT "         What's the Total Incidents in Item 1"; it1ăINPUT "         What's the Total Incidents in Item 2"; it2ăINPUT "         What's the Total Incidents in Item 3"; it3ăINPUT "         What's the Total Incidents in Item 4"; it4ăINPUT "         What's the Total Incidents in Item 5"; it5ăINPUT "         What's the Total Incidents in Item 6"; it6ăINPUT "         What's the Total Incidents in Item 7"; it7ăINPUT "         What's the Total Incidents in Item 8"; it8ăINPUT "         What's the Total Incidents in Item 9"; it9ăINPUT "         What's the Total Incidents in Item 10"; it10ăINPUT "         What's the Total Incidents in Item 11"; it11ăINPUT "         What's the Total Incidents in Item 12"; it12ă'ă       'specs for the vertical  lines  (lines are X,Y)ăCLSăSCREEN 12ăDEFLNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 9ăPRINT "CUMULATIVE"ăLOCATE , 60ăPRINT "TRACKING"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White Line"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 10  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 10 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 10  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 10  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 10  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 10  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 10  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 10  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 10  ' this is an add-on init.lineăăăLOCATE 3, 20ăCOLOR 14ăPRINT "CUMULATIVE RUNNING TOTAL "; namer$ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ă'LOCATE 26, 15ăCOLOR 5ăPRINT "            Cumulative Running Totals"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "100"ăLOCATE 20, 8ăPRINT "200"ăLOCATE 18, 8ăPRINT "300"ăLOCATE 16, 8ăPRINT "400"ăLOCATE 14, 8ăPRINT "500"ăLOCATE 13, 8ăPRINT "600"ăLOCATE 11, 8ăPRINT "700"ăLOCATE 9, 8ăPRINT "800"ăLOCATE 7, 8ăPRINT "900"ăLOCATE 5, 8ăPRINT "1000"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 10      '1ăLINE (160, 75)-(160, 375), 10       '2ăLINE (190, 75)-(190, 375), 10        '3ăLINE (220, 75)-(220, 375), 10        '4ăLINE (250, 75)-(250, 375), 10          '5ăLINE (280, 75)-(280, 375), 10   '6ăLINE (310, 75)-(310, 375), 10  '7ăLINE (340, 75)-(340, 375), 10   '8      30 separation factorăLINE (370, 75)-(370, 375), 10   '9ăLINE (400, 75)-(400, 375), 10   '10ăLINE (430, 75)-(430, 375), 10   '11ăLINE (460, 75)-(460, 375), 10 '12ă'           this section draws the tracelineăhora = 375ăhor1! = 375 - (it1 * .4)ăhor2! = hor1! - (it2 * .4)ăhor3! = hor2! - (it3 * .4)ăhor4! = hor3! - (it4 * .4)ăhor5! = hor4! - (it5 * .4)ăhor6! = hor5! - (it6 * .4)ăhor7! = hor6! - (it7 * .4)ăhor8! = hor7! - (it8 * .4)ăhor9! = hor8! - (it9 * .4)ăhor10! = hor9! - (it10 * .4)ăhor11! = hor10! - (it11 * .4)ăhor12! = hor11! - (it12 * .4)ă'                    this section sets up the x-position traceăăLINE (100, 375)-(130, hor1!), 15ăLINE (130, hor1!)-(160, hor2!), 15ăLINE (160, hor2!)-(190, hor3!), 15ăLINE (190, hor3!)-(220, hor4!), 15ăLINE (220, hor4!)-(250, hor5!), 15ăLINE (250, hor5!)-(280, hor6!), 15ăLINE (280, hor6!)-(310, hor7!), 15ăLINE (310, hor7!)-(340, hor8!), 15ăLINE (340, hor8!)-(370, hor9!), 15ăLINE (370, hor9!)-(400, hor10!), 15ăLINE (400, hor10!)-(430, hor11!), 15ăLINE (430, hor11!)-(460, hor12!), 15ăăENDăăDEFSNG A-ZăSUB greenboxăSOUND 150, 5ăLINE (10, 15)-(630, 470), 2, BFăLINE (8, 13)-(633, 470), 6, BăLINE (10, 15)-(630, 467), 6, BăLINE (12, 17)-(627, 465), 7, BăăEND SUBăăSUB initialăSCREEN 12ăLOCATE 11, 60ăCOLOR 9ăPRINT "CUMULATIVE"ăLOCATE , 60ăPRINT "TRACKING"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White Line"ă'     horizontal line separation is 30ăLINE (100, 345)-(450, 345), 10  ' this is an add-on init.lineăLINE (100, 315)-(450, 315), 10 ' this is an add-on init.lineăLINE (100, 285)-(450, 285), 10  ' this is an add-on init.lineăLINE (100, 255)-(450, 255), 10  ' this is an add-on init.lineăLINE (100, 225)-(450, 225), 10  ' this is an add-on init.lineăLINE (100, 195)-(450, 195), 10  ' this is an add-on init.lineăLINE (100, 165)-(450, 165), 10  ' this is an add-on init.lineăLINE (100, 135)-(450, 135), 10  ' this is an add-on init.lineăLINE (100, 105)-(450, 105), 10  ' this is an add-on init.lineă' in line above, it's important to use only first three digitsăăEND SUBăăGerald Wykoff                  Moving Average Graphic                                        06-10-01 (  :  )       QB, Qbasic             386  9726     Xmovavx.bas ' Subject: MOVING AVERAGE GRAPHIC DISPLAY     Date: 6-10-1  (18:22)ă'           Author: Gerald L. Wykoff                       Code: QB, QBasică'           Origin:  wykoff@mbawiz.comă'ăREM   this is a moving average utility that translates data entriesăREM                 into a graphics presentationăăDECLARE SUB index ()ăCLSăSCREEN 9ăCOLOR 15, 5ăDEFDBL A-ZăPRINTăPRINTăPRINT "             MOVING AVERAGE COMPUTATION AND GRAPHIC DISPLAY"ăCOLOR 11ăPRINT "        (c) 2000 Gerald Wykoff......Written for www.mbawiz.com"ăPRINTăPRINTăCOLOR 14ăPRINT "          The graphics are set up to deal only with 3-digit"ăPRINT "        numbers BEFORE the decimal, and any number of digits"ăPRINT "        AFTER the decimal."ăPRINT "          If you don't need all 12 data entries, tap the ENTER"ăPRINT "        key to finish out the routine. Also, when you call up"ăPRINT "        various averages, you'll often see 0's at the end of the"ăPRINT "        column: this is normal because of the run-out-of-data,"ăPRINT "        depicted by the line's drop-and-up spike at the end."ăPRINTăPRINTăCOLOR 15ăINPUT "             Enter project name for data series  "; title$ăPRINTăPRINTăPRINT "   Do you wish to call up an (1) existing file or (2) type in the data?"ăINPUT "             Please Make Your Selection (1 or 2) "; what$ăIF what$ = "1" THEN GOTO 95 ELSE GOTO 100ă     '   call up an existing statements fileă95ăPRINTăPRINTăPRINTăINPUT "    Type in the path/name of the data file "; file$ăOPEN file$ FOR INPUT AS #1ăINPUT #1, item1, item2, item3, item4, item5, item6, item7, item8, item9, item10, item11, item12ăd1 = item1ăd2 = item2ăd3 = item3ăd4 = item4ăd5 = item5ăd6 = item6ăd7 = item7ăd8 = item8ăd9 = item9ăd10 = item10ăd11 = item11ăd12 = item12ă'ăGOTO 200ă100ăPRINTăPRINTăPRINTăPRINTăINPUT "         Enter data 1"; d1ăINPUT "         Enter data 2"; d2ăINPUT "         Enter data 3"; d3ăINPUT "         Enter data 4"; d4ăINPUT "         Enter data 5"; d5ăINPUT "         Enter data 6"; d6ăINPUT "         Enter data 7"; d7ăINPUT "         Enter data 8"; d8ăINPUT "         Enter data 9"; d9ăINPUT "         Enter data 10"; d10ăINPUT "         Enter data 11"; d11ăINPUT "         Enter data 12"; d12ăPRINTă200ăCLSăCOLOR 14, 1ăPRINTăPRINTăPRINTăPRINT TAB(30); d1ăPRINT TAB(30); d2ăPRINT TAB(30); d3ăPRINT TAB(30); d4ăPRINT TAB(30); d5ăPRINT TAB(30); d6ăPRINT TAB(30); d7ăPRINT TAB(30); d8ăPRINT TAB(30); d9ăPRINT TAB(30); d10ăPRINT TAB(30); d11ăPRINT TAB(30); d12ăPRINTăPRINTă'   Ask for the highest and lowest entries in the data seriesăINPUT "        What is the lowest data total in the series"; lo1: PRINTăPRINTăINPUT "        What is the highest data total in the series"; hi1: PRINTă'ăCLSăSCREEN 9ăCOLOR 10, 9'ăINPUT "      Which moving average do you want to calculate: 2,3,4 or 5 years"; avăPRINTăPRINT "      Keep your data entries to 3 or less digits BEFORE any necessary"ăPRINT "      decimals - if you require decimals for more accurate analysis."ăCLSăPRINT "            Below are listed the sequential averages based on"ăPRINT "              the data entries (first to last) that you made."ăSELECT CASE avă  CASE 2ăPRINT "                TWO-YEAR MOVING AVERAGES FOR: "; title$ăY2$ = "                      TWO-YEAR MOVING AVERAGE"ăg1 = (d1 + d2) / 2ăPRINT g1ăPRINTăg2 = (d2 + d3) / 2ăPRINT g2ăPRINTăg3 = (d3 + d4) / 2ăPRINT g3ăPRINTăg4 = (d4 + d5) / 2ăPRINT g4ăPRINTăg5 = (d5 + d6) / 2ăPRINT g5ăPRINTăg6 = (d6 + d7) / 2ăPRINT g6ăPRINTăg7 = (d7 + d8) / 2ăPRINT g7ăPRINTăg8 = (d8 + d9) / 2ăPRINT g8ăPRINTăg9 = (d9 + d10) / 2ăPRINT g9ăPRINTăg10 = (d10 + d11) / 2ăPRINT g10ăg11 = (d11 + d12) / 2ăPRINT g11ăPRINTăPRINTăPRINT "         Press any key to continue"ăDO WHILE INKEY$ = ""ăLOOPăCLSăCASE 3ăPRINT "              THREE-YEAR MOVING AVERAGES FOR: "; title$ăY3$ = "                      THREE-YEAR MOVING AVERAGE"ăPRINTăg1 = (d1 + d2 + d3) / 3ăPRINT USING "#####.#"; g1ăPRINTăg2 = (d2 + d3 + d4) / 3ăPRINT USING "#####.#"; g2ăPRINTăg3 = (d3 + d4 + d5) / 3ăPRINT USING "#####.#"; g3ăPRINTăg4 = (d4 + d5 + d6) / 3ăPRINT USING "#####.#"; g4ăPRINTăg5 = (d5 + d6 + d7) / 3ăPRINT USING "#####.#"; g5ăPRINTăg6 = (d6 + d7 + d8) / 3ăPRINT USING "#####.#"; g6ăPRINTăg7 = (d7 + d8 + d9) / 3ăPRINT USING "#####.#"; g7ăPRINTăg8 = (d8 + d9 + d10) / 3ăPRINT USING "#####.#"; g8ăPRINTăg9 = (d9 + d10 + d11) / 3ăPRINT USING "#####.#"; g9ăPRINTăg10 = (d10 + d11 + d12) / 3ăPRINT USING "#####.#"; g11ăPRINTăPRINT "         Press any key to continue"ăDO WHILE INKEY$ = ""ăLOOPăCLSăCASE 4ăPRINT "               FOUR-YEAR MOVING AVERAGES FOR: "; title$ăY4$ = "                      FOUR-YEAR MOVING AVERAGE"ăPRINTăg1 = (d1 + d2 + d3 + d4) / 4ăPRINT USING "#####.#"; g1ăPRINTăg2 = (d2 + d3 + d4 + d5) / 4ăPRINT USING "#####.#"; g2ăPRINTăg3 = (d3 + d4 + d5 + d6) / 4ăPRINT USING "#####.#"; g3ăPRINTăg4 = (d4 + d5 + d6 + d7) / 4ăPRINT USING "#####.#"; g4ăPRINTăg5 = (d5 + d6 + d7 + d8) / 4ăPRINT USING "#####.#"; g5ăPRINTăg6 = (d6 + d7 + d8 + d9) / 4ăPRINT USING "#####.#"; g6ăPRINTăg7 = (d7 + d8 + d9 + d10) / 4ăPRINT USING "#####.#"; g7ăPRINTăg8 = (d8 + d9 + d10 + d11) / 4ăPRINT USING "#####.#"; g8ăPRINTăg9 = (d9 + d10 + d11 + d12) / 4ăPRINT USING "#####.#"; g9ăPRINTăPRINT "         Press any key to continue"ăDO WHILE INKEY$ = ""ăLOOPăCLSă'ă  CASE 5ăPRINT "               FIVE-YEAR MOVING AVERAGES FOR: "; title$ăY5$ = "                      FIVE-YEAR MOVING AVERAGE"ăPRINTăg1 = (d1 + d2 + d3 + d4 + d5) / 5ăPRINT USING "#####.#"; g1ăPRINTăg2 = (d2 + d3 + d4 + d5 + d6) / 5ăPRINT USING "#####.#"; g2ăPRINTăg3 = (d3 + d4 + d5 + d6 + d7) / 5ăPRINT USING "#####.#"; g3ăPRINTăg4 = (d4 + d5 + d6 + d7 + d8) / 5ăPRINT USING "#####.#"; g4ăPRINTăg5 = (d5 + d6 + d7 + d8 + d9) / 5ăPRINT USING "#####.#"; g5ăPRINTăg6 = (d6 + d7 + d8 + d9 + d10) / 5ăPRINT USING "#####.#"; g6ăPRINTăg7 = (d7 + d8 + d9 + d10 + d11) / 5ăPRINT USING "#####.#"; g7ăPRINTăg8 = (d8 + d9 + d10 + d11 + d12) / 5ăPRINT USING "#####.#"; g7ăăEND SELECTăPRINTăCLSă'                       this section calculates the trace line set pointsăset1! = 365 - (g1 * .32)ăset2! = 365 - (g2 * .32)ăset3! = 365 - (g3 * .32)ăset4! = 365 - (g4 * .32)ăset5! = 365 - (g5 * .32)ăset6! = 365 - (g6 * .32)ăset7! = 365 - (g7 * .32)ăset8! = 365 - (g8 * .32)ăset9! = 365 - (g9 * .32)ăset10! = 365 - (g10 * .32)ăset11! = 365 - (g11 * .32)ă'ăCLSăSCREEN 12ă'                    this section draws the ordinal lines V and HăLINE (100, 365)-(550, 365), 10   'horizontal line at base of graphăLINE (100, 364)-(550, 364), 10ăLINE (100, 25)-(100, 365), 10    'ordinal VERTICAL LINE ON GRAPHăLINE (99, 25)-(99, 365), 10ă      ă       '                       THESE ARE THE VERTICAL LINESsăLINE (140, 25)-(140, 365), 8        ' vert 2ăLINE (180, 25)-(180, 365), 8                'vert3ăLINE (220, 25)-(220, 365), 8                      'vert4ăLINE (260, 25)-(260, 365), 8                          'vert5ăLINE (300, 25)-(300, 365), 8        'vert6 ... 40  separation on linesăLINE (340, 25)-(340, 365), 8             'vert7ăLINE (380, 25)-(380, 365), 8        ' vert 8ăLINE (420, 25)-(420, 365), 8                'vert9ăLINE (460, 25)-(460, 365), 8                      'vert10ăLINE (500, 25)-(500, 365), 8ăLINE (540, 25)-(540, 365), 15ă    ' now starting from the bottom up FOR HORIZONTAL LINESă LINE (100, 333)-(550, 333), 8ă LINE (100, 301)-(550, 301), 8ă LINE (100, 269)-(550, 269), 8ă LINE (100, 236)-(550, 236), 8         '   32 separation between linesă LINE (100, 204)-(550, 204), 8      '   on horizontal basesă LINE (100, 172)-(550, 172), 8          '   bottom starts at 332ă LINE (100, 140)-(550, 140), 8          '   10 is the total entryă LINE (100, 108)-(550, 108), 8ă LINE (100, 76)-(550, 76), 8ă LINE (100, 44)-(550, 44), 8ă 'ăPRINT "DATA             2,3,4 AND 5 YEAR MOVING AVERAGES "ăPRINTăPRINT USING "###.#"; hi1ăPRINTăPRINT USING "###.#"; hi1 * .9ăPRINTăPRINT USING "###.#"; hi1 * .8ăPRINTăPRINT USING "###.#"; hi1 * .7ăPRINTăPRINT USING "###.#"; hi1 * .6ăPRINTăPRINT USING "###.#"; hi1 * .5ăPRINTăPRINT USING "###.#"; hi1 * .4ăPRINTăPRINT USING "###.#"; hi1 * .3ăPRINTăPRINT USING "###.#"; hi1 * .2ăPRINTăPRINT USING "###.#"; hi1 * .1ăPRINTăPRINT "  0"ăCOLOR 10ăPRINT TAB(13); "0"; TAB(19); "1"; TAB(24); "2"; TAB(28); "3"; TAB(33); "4"; TAB(38); "5"; TAB(43); "6"; TAB(48); "7"; TAB(53); "8"; TAB(58); "9"; TAB(63); "10"; TAB(68); "11"ăPRINTăPRINT "                      DATA INTERVALS"ăăă'                    this section draws the traceline 2,3,4,5 yearsăLINE (100, 365)-(140, set1!), 5ăDELAY 1ăLINE (140, set1!)-(180, set2!), 5ăDELAY 1ăLINE (180, set2!)-(220, set3!), 5ăDELAY 1ăLINE (220, set3!)-(260, set4!), 5ăDELAY 1ăLINE (260, set4!)-(300, set5!), 5ăDELAY 1ăLINE (300, set5!)-(340, set6!), 5ăDELAY 1ăLINE (340, set6!)-(380, set7!), 5ăDELAY 1ăLINE (380, set7!)-(420, set8!), 5ăDELAY 1ăLINE (420, set8!)-(460, set9!), 5ăDELAY 1ăLINE (460, set9!)-(500, set10!), 5ăDELAY 1ăLINE (500, set10!)-(540, set11!), 5ăDELAY 1ăLINE (500, set11!)-(580, set12!), 5ăăENDăDEFSNG A-ZăăSUB indexăPRINT "DATA              "ăPRINTăPRINT USING "###.#"; hi1ăPRINTăPRINT USING "###.#"; hi1 * .9ăPRINTăPRINT USING "###.#"; hi1 * .8ăPRINTăPRINT USING "###.#"; hi1 * .7ăPRINTăPRINT USING "###.#"; hi1 * .6ăPRINTăPRINT USING "###.#"; hi1 * .5ăPRINTăPRINT USING "###.#"; hi1 * .4ăPRINTăPRINT USING "###.#"; hi1 * .3ăPRINTăPRINT USING "###.#"; hi1 * .2ăPRINTăPRINT USING "###.#"; hi1 * .1ăPRINTăPRINT USING "###.#"; lo1ăEND SUBăăGerald Wykoff                  Base Line Comparison                                          07-01-01 (  :  )       QB, Qbasic             137  5075     Xbasis.bas  ' Subject: Base Line Comparison                          Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comCLSăSCREEN 9ăCOLOR 14, 9ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăLOCATE 10, 15ă'GOTO 50ăPRINT "This utility will draw your intended baseline and then trace a"ăPRINT "line of subsequent results."ălocate 15, 15ăPRINT "Use only first 3 digits on next two queries."ăLOCATE 17, 16ăINPUT "        What was the initial investment "; initădot1 = 290 - (init * .28)ăLOCATE , 15ăINPUT "         2. What is the portfolio value for Period 2"; now2ănu2 = 290 - (now2 * .28)ăLOCATE , 15ăINPUT "         3. What is the portfolio value for Period 3"; now3ănu3 = 290 - (now3 * .28)ăLOCATE , 15ăINPUT "         4. What is the portfolio value for Period 4"; now4ănu4 = 290 - (now4 * .28)ăLOCATE , 15ăINPUT "         5. What is the portfolio value for Period 5"; now5ănu5 = 290 - (now5 * .28)ăLOCATE , 15ăINPUT "         6. What is the portfolio value for Period 6"; now6ănu6 = 290 - (now6 * .28)ăLOCATE , 15ăINPUT "         7. What is the portfolio value for Period 7"; now7ănu7 = 290 - (now7 * .28)ăLOCATE , 15ăINPUT "         8. What is the portfolio value for Period 8"; now8ănu8 = 290 - (now8 * .28)ăLOCATE , 15ăINPUT "         9. What is the portfolio value for Period 9"; now9ănu9 = 290 - (now9 * .28)ăLOCATE , 15ăINPUT "        10. What is the portfolio value for Period 10"; now10ănu10 = 290 - (now10 * .28)ăLOCATE , 15ăINPUT "        11. What is the portfolio value for Period 11"; now11ănu11 = 290 - (now11 * .28)ăLOCATE , 15ăINPUT "        12. What is the portfolio value for Period 12"; now12ănu12 = 290 - (now12 * .28)ăLOCATE , 15ă50ăCLSăPRINTăSCREEN 9ăCOLOR 10, 1ăă'      LINES ARE X,Y    X-LEFT TO RIGHT  Y-TOP TO BOTTOMăLINE (180, dot1)-(510, dot1)ăCOLOR 14ăLINE (180, dot1)-(210, nu2)                     'to Period 2ăLINE (210, nu2)-(240, nu3)              'to Period 3ăLINE (240, nu3)-(270, nu4)  'to Period 4ăLINE (270, nu4)-(300, nu5)      'to period 4ăLINE (300, nu5)-(330, nu6)          'to period 5ăLINE (330, nu6)-(360, nu7)             'to period 6ăLINE (360, nu7)-(390, nu8)                  'to period 7ăLINE (390, nu8)-(420, nu9)             'to period 8ăLINE (420, nu9)-(450, nu10)          'to period 9ăLINE (450, nu10)-(480, nu11)      'to period 10ăLINE (480, nu11)-(510, nu12)   ' to period 11ă'LINE (510, nu12)-(540, nu12)      ' to period 12ăCOLOR 15ăLINE (180, 290)-(510, 290), 10ăLINE (180, 290)-(180, 25), 10ă   '                  these are vertical time period linesăCOLOR 15ăLINE (210, 290)-(210, 25), 15    '2ăLINE (240, 290)-(240, 25), 15     '3     vertical lines are 30 separated, tooăLINE (270, 290)-(270, 25), 15       '4ăLINE (300, 290)-(300, 25), 15         '5ăLINE (330, 290)-(330, 25), 15'....................6 (DIFF IS 40)ăLINE (360, 290)-(360, 25), 15             '7ăLINE (390, 290)-(390, 25), 15               '8ăLINE (420, 290)-(420, 25), 15                 '9ăLINE (450, 290)-(450, 25), 15                   '10ăLINE (480, 290)-(480, 25), 15                     '11ăLINE (510, 289)-(510, 25), 15                      '12ăCOLOR 15ăLOCATE 22, 10ăPRINT TAB(23); "1"; TAB(27); "2"; TAB(31); "3"; TAB(34); "4"; TAB(38); "5"; TAB(42); "6"; TAB(46); "7"; TAB(49); "8"; TAB(53); "9"; TAB(56); "10"; TAB(60); "11"; TAB(64); "12"ăLOCATE 21, 17: PRINT "0"ăLOCATE 19, 17: PRINT "100"ăLOCATE 17, 17: PRINT "200"ăLOCATE 15, 17: PRINT "300"ăLOCATE 13, 17: PRINT "400"ăLOCATE 11, 17: PRINT "500"ăLOCATE 9, 17: PRINT "600"ăLOCATE 7, 17: PRINT "700"ăLOCATE 5, 17: PRINT "800"ăLOCATE 3, 17: PRINT "900"ăLOCATE 24, 30: PRINT "TIME INTERVALS"ăLOCATE 11, 4: PRINT "VALUE"ăLOCATE , 4: PRINT "CHANGE"ăLOCATE 12, 4: PRINT "IN 000's"ă   '                            these are test lines on horizontală'      LINES ARE X,Y    X-LEFT TO RIGHT  Y-TOP TO BOTTOMă'                           y axisăLINE (180, 249)-(510, 249), 3ăLINE (180, 219)-(510, 219), 3ăLINE (180, 191)-(510, 191), 3   'HORIZONTAL LINES HAVE 30 SEPARATIONSăLINE (180, 162)-(510, 162), 3   ' THUS ALL NUMBERS ARE TIMES .28ăLINE (180, 134)-(510, 134), 3  ' AND ARE 251 + (X * .28)ăLINE (180, 110)-(510, 110), 3  ' 600      BECAUSE 251 = ZERO (0) BASE LINEăLINE (180, 80)-(510, 80), 3  '700ăLINE (180, 51)-(510, 51), 3    '800ăLINE (180, 25)-(510, 25), 3         '900ăă'init will be : input (251 +  )ă'inititial value line isăLINE (180, init)-(500, init), 10ă' current (NOW) value line is (180,init)-(ăăă'  this bar chart is set up this wayă  '     vertical lines are 24 apart at .24,starting at 180ă  '     horizotal lines are 28 separates at .28, starting at 251ă  '  thus the 100 vallue for vertical lines is .24+ 180ă  '  and the 100 value for horizontal lines is .28 - 251(btoom line)ă  'to position '328" on a horizontal line would be 328*.24 -251ă  COLOR 14ăăGerald Wykoff                  6 value relative Graphic                                      07-01-01 (  :  )       QB, Qbasic             152  3413     X6val.bas   DECLARE SUB GRAPH ()ă' Subject:6-Value Relative Graphic                     Date: 7-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comDECLARE SUB GRAPH ()ă'******** bar chart ********ăCLSăSCREEN 9ăCOLOR 14, 9ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ă25ă     REM PROGRAM 8.1ă     REM Graphă     CLSă     DIM dd(6)ă     DEFLNG A-Ză     'LOCATE 13, 35ă     SCREEN 9ă     PRINTă     PRINTă     PRINTă     PRINTă     COLOR 14, 1ă     PRINT "                   6-VALUE HISTOGRAM"ă     COLOR 11ă     PRINT "     (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ă     PRINTă     COLOR 14ă     PRINTă     PRINT "           This short utility will accommodate 6 entries"ă     PRINT "           for a quick display of relative values.  Since"ă     PRINT "           the display is relative, it will accept pretty"ă     PRINT "                 much any numbers from high to low."ă     PRINTă     PRINTă     COLOR 15ă     PRINT "                 Tap Any Key to Continue"ă     DO WHILE INKEY$ = ""ă     LOOPă     CLSă     SCREEN 1ă     ' call subprogramă     'ă        CALL GRAPHăLOCATE 21, 3ăINPUT "(1) Repeat, or (2) Quit (1 or 2) "; ask3$ăIF ask3$ = "1" THEN GOTO 25 ELSE GOTO 1200ă1200ăENDăăDEFSNG A-Ză     SUB GRAPHă     'ă     ' declare arraysă     'ă        DIM GOODS(6), NORM(6)ă     'ă     ' assign values to the GOODS arrayă     SCREEN 9ă     PRINTă     PRINTă     PRINTă     PRINTă        i = 1ă        FOR NUMBER.OF.ELEMENT = 1 TO 6                 '15ă           INPUT "                Enter a Value"; GOODS(NUMBER.OF.ELEMENT)   '"TYPE VALUE"ă           i = i + 1ă        NEXT NUMBER.OF.ELEMENTă        SCREEN 1ă        CLSă     'ă     ' define the horizontal position of the graphă     'ă        XPOS% = 100                '50ă     'ă     ' define the vertical position of the graphă     'ă        YPOS% = 120ă     'ă     ' define the color of the graphă     'ă        COL.GRAPH% = 2ă     'ă     ' declare NORMA% - the maximum height of the graphă     'ă        NORMA% = 100ă     'ă     ' select max valueă     'ă        PMAX = GOODS(1)ă        FOR DAY% = 2 TO 6ă           IF GOODS(DAY%) > PMAX THENă              PMAX = GOODS(DAY%)ă           END IFă      NEXT DAY%ă     'ă     ' draw horizontal lineă     LINE (XPOS%, YPOS%)-(XPOS% + 75, YPOS%), COL.GRAPH%     '150ă        'ă                             ' this is the average line, on Y row 120ă        LINE (100, 122)-(175, 122), 11ă        LINE (98, 35)-(98, 122), 11ă     'ă     ' normalise values to 100ă     ' draw graphăă     'ă        FOR DAY% = 1 TO 6ă           NORM(DAY%) = GOODS(DAY%) / PMAX * NORMA%ă           ZPOS% = XPOS% + 10 * (DAY% - 1)ă           LINE (ZPOS%, YPOS%)-(ZPOS% + 7, YPOS% - NORM(DAY%)), COL.GRAPH%, BFă        NEXT DAY%ăLOCATE 3, 10ăPRINT "HI"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "lO"ăLOCATE 17, 13ăCOLOR 1ăPRINT "1......6"ăă     END SUBăăGerald Wykoff                  Graphic. 15 components                                        07-01-01 (  :  )       QB, Qbasic             138  3342     X15val.bas  DECLARE SUB graph ()ă' Subject:  Graphic, 15 Components                              Date: 7-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comDECLARE SUB graph ()ă'*********bar chart********ăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ă25ă     REM PROGRAM 8.1ă     REM Graphă     CLSă        SCREEN 9ă        COLOR 14, 1ă        PRINTă        PRINTă        PRINTă        PRINT "                       HISTOGRAM CHART"ă        COLOR 11ă        PRINT "    (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ă        PRINTă        PRINTă        COLOR 15ă        PRINT "                 This Program Draws a Relative Value Histrogram"ă        PRINTă        COLOR 14ă        PRINT "                It will accept data up to 15 values"ă        PRINT "       If you have fewer values, finish the routine with zeroes"ă        PRINTă        PRINT "       Note:  The chart features a relative display of the data"ă        PRINT "       between the lowest and highest value."ă        PRINTă        PRINTă        PRINTă        PRINTă        COLOR 11ă        PRINT "               Tap Any Key to Continue"ă        DO WHILE INKEY$ = ""ă        LOOPă     'ă     ' call subprogramă     'ă     SCREEN 1ă        CALL graphă        LOCATE 22, 10ă        INPUT " (1) Repeat, or (2) Quit "; ask7$ă        IF ask7$ = "1" THEN GOTO 25 ELSE GOTO 1200ă1200ăă        ENDăă     SUB graphă     SCREEN 9ă     ' declare arraysă     'ă        DIM GOODS(15), NORM(15)ă     'ă     ' assign values to the GOODS arrayă     'ă     PRINTă     PRINTă     PRINTă     PRINTă     PRINTă     COLOR 14ă     i = 1ă     FOR NUMBER.OF.ELEMENT = 1 TO 15ă           PRINT iă           INPUT "     Type in the Value "; GOODS(NUMBER.OF.ELEMENT)ă           i = i + 1ă        NEXT NUMBER.OF.ELEMENTă        CLSă        SCREEN 1ă     'ă     ' define the horizontal position of the graphă     'ă        XPOS% = 50ă     LINE (40, 120)-(230, 120), 14ă     ' define the vertical position of the graphă     'ă        YPOS% = 120ă     LINE (40, 25)-(40, 120), 14ă     ' define the color of the graphă     'ă        COL.GRAPH% = 2ă     'ă     ' declare NORMA% - the maximum height of the graphă     'ă        NORMA% = 100ă     'ă     ' select max valueă     'ă        PMAX = GOODS(1)ă        FOR DAY% = 2 TO 15ă           IF GOODS(DAY%) > PMAX THENă              PMAX = GOODS(DAY%)ă           END IFă        NEXT DAY%ă     'ă     ' draw horizontal lineă     'ă        LINE (XPOS%, YPOS%)-(XPOS% + 150, YPOS%), COL.GRAPH%ă     'ă     ' normalise values to 100ă     ' draw graphă     'ă        FOR DAY% = 1 TO 15ă           NORM(DAY%) = GOODS(DAY%) / PMAX * NORMA%ă           ZPOS% = XPOS% + 10 * (DAY% - 1)ă           LINE (ZPOS%, YPOS%)-(ZPOS% + 7, YPOS% - NORM(DAY%)), COL.GRAPH%, BFă        NEXT DAY%ă        LOCATE 17, 7ăPRINT "0.................15"ăLOCATE 3, 3ăPRINT "HI"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăLOCATE 15, 4ăPRINT "LO"ăă     END SUBăăGerald Wykoff                  Trace Light Rays thru Crystal  wykoff@mbawiz.com              07-01-01 (  :  )       QB, Qbasic             347  10097    Raytrace.bas' Subject:   Optical Ray Tracing Utility                           Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comăREM ----------------------------------------------------------------ăCLSă145 REM  THIS PROGRAM MATHEMATICALLY TRACES THE PATH OFă150 REM  LIGHT RAYS INTO AND OUT OF VARIOUS GEMSTONE CRYSTALSă151 PRINTă152 PRINTă153 PRINT "        THE LIGHT RAY TRACING PROGRAM"ă161 PRINTă162 PRINTă168 PRINT "      This program, using your input, will mathematically"ă169 PRINT "      trace the path of light rays entering and exiting"ă170 PRINT "      various gem profiles, using your angle and RI inputs."ă171 PRINTă172 PRINTă173 PRINTă175 PRINT "      TIP:  Sreen pauses are programmed in to allow"ă176 PRINT "    you sufficient reading, thinking and response time."ă177 PRINT "    When ready to proceed, just tap the spacebar."ă178 SLEEPă179 PRINTă190 PRINTă191 DATA iolite, 40.4, variable, 1.71ă192 DATA kornerupine, 36.5, variable, 1.66ă193 DATA actinolite, 38.2, variable, 1.61ă194 DATA amblygonite, 38.1, variable, 1.61ă195 DATA andalusite, 37.5, variable, 1.63ă196 DATA cassiterite, 30.1, variable, 1.99ă197 DATA apatite, 37.4, variable, 1.63ă198 DATA apophylite, 40.3, variable, 1.53ă199 DATA augelite, 39.3, variable, 1.57ă200 DATA celestite, 38.1, variable, 1.62ă201 DATA axinite, 36.3, variable, 1.67ă202 DATA barite, 37.4, nonvariable, 1.63ă203 DATA benitoite, 34.4, variable, 1.75ă204 DATA beryl, 39.1, variable, 1.57ă205 DATA berylonite, 40.1, variable, 1.55ă206 DATA brazilianite, 38.4, variable, 1.59ă207 DATA calcite, 42.1, variable, 1.48ă208 DATA chrysoberyl, 34.5, variable, 1.74ă209 DATA corundum, 34.3, variable, 1.76ă210 DATA crocoite, 29.3, variable, 2.31ă211 DATA danburite, 37.5, variable, 1.63ă212 DATA datolite, 37.5, variable, 1.62ă213 DATA diamond, 24.2, nonvariable, 2.42ă214 DATA diopside, 36.6, nonvariable, 1.68ă215 DATA dioptase, 37.2, variable, 1.64ă216 DATA enstatite, 37.1, variable, 1.65ă217 DATA epidote, 35.2, nonvariable, 1.75ă218 DATA euclase, 37.2, variable, 1.65ă219 DATA feldspar, 41.1, variable, 1.51ă220 DATA fluorite, 44.1, nonvariable, 1.43ă221 DATA almandite, 33.4, nonvariable, 1.81ă222 DATA andradite, 31.5, nonvariable, 1.89ă223 DATA grossularite, 35.1, nonvariable, 1.73ă224 DATA pyrope, 34.5, nonvariable, 1.74ă225 DATA rhodolite, 34.3, nonvariable, 1.74ă226 DATA spessartite, 34.4, nonvariable, 1.89ă227 DATA uvarovite, 32.3, nonvariable, 1.87ă228 DATA kyanite, 35.4, variable, 1.71ă229 DATA opal, 43.3, nonvariable, 1.45ă230 DATA peridot, 40.1, variable, 1.55ă231 DATA phenakite, 37.1, variable, 1.65ă232 DATA pollucite, 38.1, nonvariable, 1.52ă233 DATA prehnite, 38.1, variable, 1.61ă234 DATA proustite, 21.1, variable, 2.79ă235 DATA quartz, 40.2, variable, 1.54ă236 DATA rhodochrosite, 38.4, variable, 1.59ă237 DATA rutile, 22.3, variable, 2.61ă238 DATA scapolite, 39.5, variable, 1.56ă239 DATA scheelite, 38.1, nonvariable, 1.91ă240 DATA sphalerite, 24.9, variable, 2.36ă241 DATA sphene, 32.1, variable, 1.88ă242 DATA spinel, 35.5, nonvariable, 1.72ă243 DATA spodumene, 37.3, variable, 1.65ă244 DATA topaz, 38.2, variable, 1.65ă245 DATA tourmaline, 38.3, variable, 1.61ă246 DATA zircon, 30.1, variable, 1.99ă247 DATA zoisite, 35.1, variable, 1.74ă248 DATA tanzanite, 35.1, variable, 1.74ă249 DATA demantoid, 32.1, nonvariable, 1.88ă250 DATA yag, 33.1, nonvariable, 1.83ă251 DATA cz, 27.7, variable, 2.15ă252 DATA ggg, 30.5, nonvariable, 1.97ă253 DATA strontium titanate, 24.5, nonvariable, 2.41ă254 DATA lithium niobate, 26.9, variable, 2.21ă255 DATA bowenite, 39.8, nonvariable, 1.56ă256 DATA amazonite, 41.1, variable, 1.51ă257 DATA idocrase, 36.1, variable, 1.71ă258 DATA end$, end, end$, endă259 PRINTă260 PRINTă261 PRINT "Please use LOWER CASE TYPE (NO CAPS) to answer ALL questions"ă262 PRINT "Wrong name, spelling or a capital letter terminates program."ăPRINTăPRINTăRepeatGem:ăINPUT "      Which gemstone type do you wish to analyze"; stone$ăDOă       READ gems$, z, v$, Nă       IF gems$ = stone$ THEN EXIT DOăLOOPăCLSăPRINTăPRINTăPRINTăPRINT "      The gemstone that you selected, "; gems$; ", has"ăPRINT "      a "; v$; " refractive index. For DR stones the"ăPRINT "      lowest index"; N; "is cited here.  The critical angle"ăPRINT "      angle"; z; "is obviously computed from the R.I. figure."ăPRINTăPRINTăPRINTăPRINT "           To continue, tap the spacebar."ăDOă  z$ = INKEY$ăLOOP UNTIL z$ = " "ăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăINPUT "  What is the culet or main pavilion angle we are dealing with"; qăPRINTăCLSăD = q + zăE = q - zăPRINTăPRINTăPRINTăPRINTăINPUT "   What is the crown main angle"; răPRINTăPRINTăCLSăF = r + zăg = r - zăPRINTăPRINTăPRINTăPRINTăPRINTăCLSăPRINTăPRINTăPRINT "  Summarizing this project, the traced ray is for a "; gems$;ăPRINT "  whose critical angle is "; z; " degrees, with a"ăPRINT "  pavilion main angle of "; q; " degrees, and a crown main"ăPRINT "  angle of "; r; " degrees."ăPRINTăPRINTăPRINT "   The pavilion ray exit range for a CA of "; z; " degrees"ăPRINT "                runs from "; INT(D); "to "; INT(E);ăPRINTăPRINTăPRINTăPRINT "   The crown's ray exit range for a CA of "; z; " degrees "ăPRINT "          runs from "; INT(F); "to "; INT(g);ăPRINTăDOă z$ = INKEY$ăLOOP UNTIL z$ = " "ăCLSăPRINTăPRINTăPRINTăPRINTăPRINT "     Enter a 2-digit number for light ray entry angle,"ăINPUT "     90 or 01-89"; aaă  IF aa < 90 THEN GOTO EnterRayăPRINTăCLSăPRINTăEnterRay:ăREM           THIS SECTION DEALS WITH ENTERING RAY'S DEFLECTIONăPRINTădegrees = ATN(1) / 45ăi = SIN(aa * degrees)ăPRINTăPRINTăPRINT "   For a gem crystal with a refractive index of"; N; "and"ăPRINT "   with a light ray entering at an angle of"; aa; " degrees,"ăPRINT "   refraction, according to Snell's Law, will bend or deflect"ăPRINT "   the light ray to a new path direction of ";ăx = i / NăPRINT USING "##.#"; INT(ATN(x / SQR(1 - x * x)) / degrees);ăPRINT "   degrees as it approaches the first pavilion facet."ă'PRINT "     Therefore the path of the light ray as it approaches the 1st"ă'PRINT "   facet will be"; a - INT(ATN(x / SQR(1 - x * x)) / degrees); "degrees."ăPRINTăPRINTăENDăăPRINTăINPUT "  Does the design have an odd or even number of pavilion mains (o or e)"; j$ăIF j$ = "o" THEN GOTO rotatedăPRINTăNotRotated:ăCLSăPRINTăPRINTăB = 2 * qăPRINT "    The path of the light ray after it bounces off the first"ăPRINT "              facet is"; B; "degrees."ăPRINTăPRINTăPRINTăC = 180 - (4 * q)ăPRINTăPRINTăPRINT "    The path of the light ray as it traces from the pavilion"ăPRINT "    to the crown, after bouncing off the 2nd facet is"; C; "degrees."ăPRINTăPRINTăGOTO emergingăăăPRINTărotated:ăCLSăPRINTăPRINTăINPUT "  How much is third facet rotated relative to second facet"; T2ăB = 2 * qăPRINTăCLSăPRINTăPRINTăPRINTăPRINT "    The path of the light ray after it bounces off the first"ăPRINT "              facet is"; B; "degrees."ăPRINTăC = 180 - (4 * q)ăPRINTăPRINTăPRINT "    The path of the light ray after it bounces off the second"ăPRINT "            facet is"; C; "degrees."ăPRINTăPRINTăIf2Rotated:ăPRINTăCLSăPRINTăPRINT "   What is the degree of rotation of the second facet"ăINPUT "   relative to the first facet"; Tă'    when the second facet is rotated relative to the first facetăm = (B - C) * 90ăD = (B - T) / măPRINTăCLSăPRINTăPRINTăPRINT "The path of the light ray after it strikes a rotated 2nd facet"ăPRINT "               is"; DăPRINTăCLSăRotat3Same:ăPRINTăPRINTăREM      WHEN 3RD FACET AT SAME ANGLE (A) AND DIRECTLY OPPOSITE 2ND FACETăE = 180 - D - 2 * aăPRINTăPRINTăPRINT "   The path of the light ray after boucing off the 3rd facet"ăPRINT "           is"; E; " degrees."ăPRINTăREM     3RD FACET AT SAME ANGLEL (A) BUT ROTATED (T2) RELATIVE TO 2ND FACETăRotat3Diff:ăCLSăPRINTăPRINTăINPUT "       How many degrees rotation between 2nd and 3rd facet"; T2ăm = (D - E) * 90ăF = (D - T2) / măPRINTăPRINTăPRINT "     The path of the light ray as it emerges from the pavilion"ăPRINT "         and encounters crown main facet is"; F; " degrees."ăPRINTăPRINTăDOă  z$ = INKEY$ăLOOP UNTIL z$ = " "ăPRINTăPRINTăemerging:ăREM                THIS SECTION DEALS WITH EXITING RAYSăPRINTădegrees = ATN(1) / 45ăPRINTăPRINTăPRINTă j = SIN(C * degrees)ă r = (1 / N)ă x = j / răPRINT "      The path of the light ray as it emerges from the gem"ăPRINT "       is"; INT(ATN(x / SQR(1 - x * x)) / degrees); "degrees."ăending:ăENDă ăăăăăă                                       ă        ă' IF A < e OR A > d THEN GOTO 1515ă'PRINT "The light ray angle beng tested, "; LR; "degrees,  fell"ă'PRINT "inside this gem type's critical angle at Pavilion Facet #2"ă'PRINT "so it exited the gemstone AND was lost."ă'PRINTă'PRINTă'INPUT "Care to enter another light ray angle (y OR n)"; B$ă' IF B$ = "y" THEN GOTO XXXăăăă  REM          THIS SECTION CHECKS RAY AGAINST CA ON FACET #1ă'B = p$ * 2ă' IF B < (270 + p$) - (90 - CA) GOTO 1525ă'PRINT "The original light ray you specified, "; LR; "degrees,  fell"ă'PRINT "     within this gem type's critical angle range at Pavilion"ă'PRINT "     Facet #1 so it exited the gemstone AND was lost. "ă'PRINTă'PRINTă'INPUT "Care to enter another light ray angle (y OR n)"; B$ă' IF B$ = "y" THEN GOTO XXXăăă    REM    THIS SECTION DEALS WITH LIGHT RAY AT FACET #2ă'PRINT "The light ray enters the gem crystal without refraction, reflects"ă'PRINT " off Pavilion Angle #1, whose angle is "; p$; " and follows"ă'PRINT " a path of "; B; "degrees" toward Pavilion Angle #2 which is"ă'PRINT " directly opposite and possesses the same culet angle."ă'PRINTă'PRINTă'C = 180 - 2 * Bă'PRINT " The light ray reflects off Pavilion Facet #2 and follows a"ă'PRINT " path of "; C; "degrees"ă'ă        REM THIS SECTION DEALS WITH LIGHT RAY AT FACET #3 (CROWNă'PRINTăăGerakd Wykoff                  Color Text Box                 wykoff@mbawiz.com              07-01-01 (  :  )       QB, Qbasic             23   631      Lines.bas   ' Subject: Color Text Box                             Date: 7-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comăCOLOR 14, 8ăREM       This short utility will draw a textbox on the screen as a backgroundăREM       for text display.  Obviously, the color mixture can be changed byăREM       typing in different color code numbers.ă'ă'ă'ăCLSăSCREEN 9ăCOLOR 14, 9ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăWHILE INKEY$ = "": WENDăăGerakd Wykoff                  Greek's Golden Rect, proport.  wykoff@mbawiz.com              07-01-01 (  :  )       QB, Qbasic             131  2834     golden.bas  ' Subject:  Greek Golden Rectangle                              Date: 7-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comCLSăPRINTăPRINTăREM           THIS PROGRAM WILL CALCULATE THE GREEK'S GOLDENăREM                    RECTANGLE PROPORTION.ăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINT "      THIS SHORT PROGRAM WILL PROVIDE THE DIMENSIONS"ăPRINT "      FOR THE FAMOUS 'GOLDEN RECTANGLE' DEVELOPED BY"ăPRINT "       THE ANCIENT GREEKS.. THE PROPORTION IS STILL"ăPRINT "        REGARDED AS THE WORLD'S MOST ESTHETIC AND"ăPRINT "            SATISFACTORY RECTANGULAR SHAPE."ăPRINTăPRINTăPRINT "                 To continue,  tap the spacebar."ăDOă c$ = INKEY$ăLOOP UNTIL c$ = " "ăPRINTăPRINTăCLSăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăRESTART:ăPRINTăPRINTăPRINT "         You already have one of the dimensions, so which"ăPRINT "         other dimension do you now seek: length (l) or width (w)?"ăINPUT "                 Please answer with 'l' or 'w' key"; A$ă  IF A$ = "l" THEN GOTO lengthă  IF A$ = "w" THEN GOTO 193ă116 PRINTălength:ăPRINTăPRINTăPRINTăCLSăPRINTăPRINTăPRINTăPRINTăPRINTă120 INPUT "    What is the millimeter width of the proposed gemcut design"; Aă125 G = A * 1.618ă126 PRINTă127 PRINTăCLSăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTă130 PRINT " If the width of the design is "; A; " millimeters, the"ă135 PRINT " length would need to be ";ăPRINT USING " ##.#"; G;ăPRINT " millimeters.  This measurement"; A; "X";ăPRINT USING " ##.#"; G;ăPRINT " would conform to the dimensions of the Golden Rectangle."ăPRINTăPRINTăPRINT "            To continue, tap the space bar."ăDOă  w$ = INKEY$ăLOOP UNTIL w$ = " "ăGOTO queryăPRINTăPRINTă193 PRINTăPRINTăCLSăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăINPUT "      What is the millimeter length of the proposed gemcut design"; GăA = G / 1.618ăPRINTăPRINTăPRINT " If the length of the design is"; G; "millimeters, the"ăPRINT " width would need to be";ăPRINT USING " ##.#"; A;ăPRINT " millimeters.  This";ăPRINT " measurement"; G; " X";ăPRINT USING "##.#"; A;ăPRINT " would conform to the dimensions of the Golden Rectangle."ăPRINTăPRINTăPRINT "            To continue, tap the space bar."ăDOă  w$ = INKEY$ăLOOP UNTIL w$ = " "ăGOTO queryăquery:ăPRINTăINPUT "Would you like to see this proportion drawn on screen (y or n)"; c$ă  IF c$ = "y" THEN GOTO Rectangle ELSE ENDăRectangle:ăCLSăSCREEN 12ăLINE (50, 190)-(250, 324), 15, BFăPRINTăPRINTăPRINT "            To continue, tap the space bar."ăDOă  w$ = INKEY$ăLOOP UNTIL w$ = " "ăPRINTăPRINTăCLSăPRINTăINPUT "   Would you like to work out another Golden Rectangle problem (y or n)"; c$ă  IF c$ = "y" THEN GOTO RESTART ELSE ENDăENDăăAntoni Gual                    Dithered Spheres               agual@eic.ictnet.es            07-01-01 (  :  )       QB Qbasic              143  4509     BALLZ2.bas  '********************************************************************ăDECLARE SUB drawsphere3 (x%, y%, r%, clr%)ăDECLARE SUB drawsphere (x%, y%, r%, clr%, scrang!, vertang!)ăă'Here's a little QBASIC sub to draw spheres, randomly dithered for aă'random direction lighting effect.ă'by Antoni Gual  agual@eic.ictnet.es 5/2001ăăăCONST pi = 3.141592ăRANDOMIZE TIMERăă'using screen 12 for this demo, should also work in screen 13ăSCREEN 12: mx = 640: my = 480: ml = 30: mr = 80: numclr% = 4ă'SCREEN 13: mx = 320: my = 200: ml = 24: mr = 50:numclr% = 4   ăă'let's define a color range of 4 shades, so in screen 12 we can haveă'4 different ball colorsăclrng% = 4ă'define color ranges, darkest color must have the lowest palette nrăă'range of colors used by red ballsăPALETTE 0, &H5ăPALETTE 1, &H10ăPALETTE 2, &H20ăPALETTE 3, &H30ăă'range of colors used by green ballsăPALETTE 4, &H500ăPALETTE 5, &H1000ăPALETTE 6, &H2000ăPALETTE 7, &H3000ăă'range of colors used by blue ballsăPALETTE 8, &H50000ăPALETTE 9, &H100000ăPALETTE 10, &H200000ăPALETTE 11, &H300000ăă'range of colors used by white ballsăPALETTE 12, &H50505ăPALETTE 13, &H101010ăPALETTE 14, &H202020ăPALETTE 15, &H303030ăă'demo startăCLSăp$ = SPACE$(79)ăLOCATE ml, 1: PRINT p$;ăLOCATE ml, 1: PRINT "Press a key to draw some randomly lit balls..Another key to stop";ăa$ = INPUT$(1)ăDOă  x% = RND * mxă  y% = RND * myă  r% = RND * mr + (mr \ 8)ă  c% = INT(RND * numclr%) * clrng%  'we must pass the lowest PALETTE nr of rangeă  a = RND * pi * 2ă  b = RND * piă  drawsphere x%, y%, r%, c%, a, băLOOP UNTIL LEN(INKEY$)ăLOCATE ml, 1: PRINT p$;ăLOCATE ml, 1: PRINT "If light source is at the top we can do it faster.. Press a key!";ăa$ = INPUT$(1)ăDOă  x% = RND * mxă  y% = RND * myă  r% = RND * mr + (mr / 8)ă  c% = INT(RND * numclr%) * clrng%ă  drawsphere3 x%, y%, r%, c%ăLOOP UNTIL LEN(INKEY$)ăLOCATE ml - 1, 1: PRINT "End of Balls demo, by Antoni Gual agual@eic.ictnet.es";ăăSUB drawsphere (x%, y%, r%, clr%, scrang, vertang)ă'3d shadowed sphere  drawing using dithering and a range of color paletteă'by Antoni Gual  agual@eic.ictnet.es 5/2001ă'inputs;ă'x%, y%  position on screenă'r%      radiusă'clr%    base color (the darkest one in range, it must be the lower palette nr)ă'scrang  in radians direction of the light sourceă'vertang in radians angle of the light source to a line perpendicular to screenă'Also the shared clrng% must be set to the width of a color rangeă'----------------------------------------------------------------------------ăSHARED clrng%ăclr1% = clr% + 1ăr2% = r% * r%ăclrng1 = (clrng% - 1) / 10000!ăr1! = 100 / CSNG(r%)ătemp! = SIN(vertang) * 100ăx1% = CINT(COS(scrang) * temp!)ăy1% = CINT(SIN(scrang) * temp!)ăz1% = CINT(COS(vertang) * 100)ăFOR i% = -r% TO r%ă  i2% = i% * i%ă  i1% = i% * r1!ă  'constant 10900 should be 10000, but because of rounding errors, 900 mustă  'be added to avoid breaking the program by trying SQR of a negative numberă  'the added 900 causes the black dots in the brightest part of the ballă  'if someone knows how to avoid this correction, please email me.ă  i12% = 11000 - i1% * i1%ă  a% = SQR(r2% - i2%)ă  FOR j% = -a% TO a%ă    j1% = j% * r1!ă    k1% = SQR(i12% - j1% * j1%)ă    c! = clrng1 * (x1% * i1% + j1% * y1% + k1% * z1%)ă    ccc% = clr1% + INT(c!) + (RND > (c! - INT(c!)))ă    'comment out next line for backlight effectă    IF ccc% < clr% THEN ccc% = clr%ă    PSET (x% + i%, y% + j%), ccc%ăNEXT j%, i%ăEND SUBăăSUB drawsphere3 (x%, y%, r%, clr%)ă'3d shadowed sphere  drawing using dithering and a range of color paletteă'Special case: Light source is supposed to be in front of the screenă'by Antoni Gual  agual@eic.ictnet.es  5/2001ă'inputs;ă'x%, y% position on screenă'r%     radiusă'clr%   base color (the darkest one in range, it must be the lower palette nr)ă'Also the shared clrng% must be set to the width of a color rangeă'----------------------------------------------------------------------------ă'it puts some white spots at the border of some balls, I can't avoid them!ăăSHARED clrng%ăclr1% = clrng% + clr% - 1ăr2% = r% * r%: r3 = (clrng% - 1) / r%ăFOR i% = 0 TO r%ă  i2% = i% * i%ă  a% = CINT(SQR(r2% - i2%))ă  tmp% = x% + i%: tmp1% = x% - i%ă  FOR j% = -a% TO a%ă    c = r3 * SQR(j% * j% + i2%)ă    cc% = clr1% - INT(c) + (RND < c - INT(c))ă    PSET (tmp%, y% + j%), cc%ă    ă    PSET (tmp1%, y% + j%), cc%ă    ă  NEXTăNEXTăăEND SUBăăGerald Wykoff                  Gemstone Graphic               wykoff@mbawiz.com              07-01-01 (  :  )       QB Qbasic              404  7400     animate.bas ' Subject: Animated Gemstone Graphic          Date: 7-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comăCLSăSCREEN 9ăăPRINTăPRINTăPRINTăPRINT "                   EXPLANATION OF THE PROGRAM"ăPRINT "                  FOR RAYTRACING ILLUSTRATIONS"ăPRINTăPRINTăPRINTăPRINT "        This short program draws various angled gem design"ăPRINT "     profiles in animated sequence."ăPRINTăPRINT "        To activate the program, tap the spacebar when asked"ăPRINT "     or when there is an obvious pause.  The program will"ăPRINT "     proceed on its own after each tap of the spacebar."ăPRINTăPRINTăPRINTăPRINT "         To continue, tap the spacebar."ăDOă  t$ = INKEY$ăLOOP UNTIL t$ = " "ăPRINTăCLSăSCREEN 12ăPRINTăREM     SECTION ONE SETS UP QUADRANT IDENFICATIONă' next 4 lines position quadrant lettersăLOCATE 19, 65ă  PRINT "D"ăLOCATE 25, 65ă  PRINT "C"ăLOCATE 19, 25ă  PRINT "A"ăLOCATE 25, 25ă  PRINT "B"ăSLEEP 1ăăREM     SECTION TWO DRAW BASIC REFERENCE LINESă' BASE-bottom line for baseăLINE (150, 450)-(600, 450), 4ă' TABLE-top line for table lineăLINE (300, 300)-(400, 300)ă' GIRDLE-middle line is girdle lineăLINE (150, 350)-(600, 350), 4ă' VERTICAL-establishes 90-degreeăLINE (350, 450)-(350, 260), 4ăSLEEP 1ăăă'REM      SECTION THREE DRAW ACTUAL ANGLE LINESă' PAVILION-next line draws left sideăLINE (350, 450)-(250, 350)ă' PAVILION- next line draws right sideăLINE (350, 450)-(450, 350)ă' CROWN-next line draws left sideăLINE (250, 350)-(300, 300)ă' CROWN-next line draws right sideăLINE (450, 350)-(400, 300)ăSLEEP 1ăăLOCATE 1, 1ăPRINT "To continue,"ăPRINT "tap the spacebar."ăDOă a$ = INKEY$ăLOOP UNTIL a$ = " "ăGOTO PavLinesăPRINTăSLEEP 1ăăPavLines:ă'PAVILIONăLINE (350, 450)-(245, 350)ăLINE (350, 450)-(455, 350)ă'CROWNăLINE (245, 350)-(300, 300)ăLINE (455, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(240, 350)ăLINE (350, 450)-(460, 350)ă'CROWNăLINE (240, 350)-(300, 300)ăLINE (460, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(235, 350)ăLINE (350, 450)-(465, 350)ă'CROWNăLINE (235, 350)-(300, 300)ăLINE (465, 350)-(400, 300)ăSLEEP 1ăă'PAVILINăLINE (350, 450)-(230, 350)ăLINE (350, 450)-(470, 350)ă'CROWNăLINE (230, 350)-(300, 300)ăLINE (470, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(225, 350)ăLINE (350, 450)-(475, 350)ă'CROWNăLINE (225, 350)-(300, 300)ăLINE (475, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(220, 350)ăLINE (350, 450)-(480, 350)ă'CROWNăLINE (220, 350)-(300, 300)ăLINE (480, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(215, 350)ăLINE (350, 450)-(485, 350)ă'CROWNăLINE (215, 350)-(300, 300)ăLINE (485, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(210, 350)ăLINE (350, 450)-(490, 350)ă'CROWNăLINE (210, 350)-(300, 300)ăLINE (490, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(205, 350)ăLINE (350, 450)-(495, 350)ă'CROWNăLINE (205, 350)-(300, 300)ăLINE (495, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(200, 350)ăLINE (350, 450)-(500, 350)ă'CROWNăLINE (200, 350)-(300, 300)ăLINE (500, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(195, 350)ăLINE (350, 450)-(505, 350)ă'CROWNăLINE (195, 350)-(300, 300)ăLINE (505, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(190, 350)ăLINE (350, 450)-(510, 350)ă'CROWNăLINE (190, 350)-(300, 300)ăLINE (510, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(185, 350)ăLINE (350, 450)-(515, 350)ă'CROWNăLINE (185, 350)-(300, 300)ăLINE (515, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(180, 350)ăLINE (350, 450)-(520, 350)ă'CROWNăLINE (180, 350)-(300, 300)ăLINE (520, 350)-(400, 300)ăSLEEP 1ăă'PAVILIONăLINE (350, 450)-(175, 350)ăLINE (350, 450)-(525, 350)ă'CROWNăLINE (175, 350)-(300, 300)ăLINE (525, 350)-(400, 300)ăSLEEP 1ăă  'PAVILIONăLINE (350, 450)-(170, 350)ăLINE (350, 450)-(530, 350)ă'CROWNăLINE (170, 350)-(300, 300)ăLINE (530, 350)-(400, 300)ăSLEEP 1ăăCLSăSCREEN 12ăREM     SECTION ONE SETS UP QUADRANT IDENFICATIONă' next 4 lines position quadrant lettersăLOCATE 19, 65ă  PRINT "D"ăLOCATE 25, 65ă  PRINT "C"ăLOCATE 19, 25ă  PRINT "A"ăLOCATE 25, 25ă  PRINT "B"ăăREM     SECTION TWO DRAW BASIC REFERENCE LINESă' BASE-bottom line for baseăLINE (150, 450)-(600, 450), 4ă' TABLE-top line for table lineăLINE (300, 300)-(400, 300)ă' GIRDLE-middle line is girdle lineăLINE (150, 350)-(600, 350), 4ă' VERTICAL-establishes 90-degreeăLINE (350, 450)-(350, 260), 4ăăă'REM      SECTION THREE DRAW ACTUAL ANGLE LINESă' PAVILION-next line draws left sideăLINE (350, 450)-(250, 350)ă' PAVILION- next line draws right sideăLINE (350, 450)-(450, 350)ă' CROWN-next line draws left sideăLINE (250, 350)-(300, 300)ă' CROWN-next line draws right sideăLINE (450, 350)-(400, 300)ăăLOCATE 1, 1ăSLEEP 1ăăă' SHORTENS CULET DEPTHă' PAVILIONăLINE (350, 445)-(250, 350)ăLINE (350, 445)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 440)-(250, 350)ăLINE (350, 440)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 435)-(250, 350)ăLINE (350, 435)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 430)-(250, 350)ăLINE (350, 430)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 425)-(250, 350)ăLINE (350, 425)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 420)-(250, 350)ăLINE (350, 420)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 415)-(250, 350)ăLINE (350, 415)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 455)-(250, 350)ăLINE (350, 455)-(450, 350)ăSLEEP 1ăă'PAVILIONăLINE (350, 460)-(250, 350)ăLINE (350, 460)-(450, 350)ăSLEEP 3ăăăăTheCrown:ăăREM              CROWN ANGLE CHANGESăăfixit:ăăă'#1ă'crownă'table top lineăLINE (295, 290)-(405, 290), 3ăăLINE (250, 350)-(295, 290), 3ăLINE (450, 350)-(405, 290), 3ăSLEEP 1ăă'   #2ă'CROWNă' TABLE-top line for table lineăLINE (298, 295)-(402, 295), 4ăăLINE (250, 350)-(298, 295), 4ăLINE (450, 350)-(402, 295), 4ăSLEEP 1ăăă' #3ă'table top lineăLINE (300, 300)-(400, 300)ăăLINE (250, 350)-(300, 300)ăLINE (450, 350)-(400, 300)ăSLEEP 1ăă' #4ă'CROWNă' TABLE-top line for table lineăLINE (305, 305)-(395, 305), 3ăăLINE (250, 350)-(305, 305), 3ăLINE (450, 350)-(395, 305), 3ăSLEEP 1ăă' #5ă'CROWNă' TABLE-top line for table lineăLINE (305, 310)-(395, 310), 4ăăLINE (250, 350)-(305, 310), 4ăLINE (450, 350)-(395, 310), 4ăSLEEP 1ăă'    #6ăă'CROWN -- okă' TABLE-top line for table lineăLINE (307, 315)-(393, 315)ăăLINE (250, 350)-(307, 315)ăLINE (450, 350)-(393, 315)ăSLEEP 1ăă'#7ă'CROWNă' TABLE-top line for table lineăLINE (310, 320)-(390, 320), 3ăăLINE (250, 350)-(310, 320), 3ăLINE (450, 350)-(390, 320), 3ăSLEEP 1ăă' #8ă'CROWNă' TABLE-top line for table lineăLINE (315, 323)-(385, 323)ăăLINE (250, 350)-(315, 323)ăăLINE (450, 350)-(385, 323)ăSLEEP 1ăă' #9ă'CROWNă' TABLE-top line for table lineăLINE (319, 328)-(381, 328), 3ăăLINE (250, 350)-(319, 328), 3ăLINE (450, 350)-(381, 328), 3ăSLEEP 1ăăă' #10ă'CROWNă' TABLE-top line for table lineăLINE (320, 332)-(380, 332), 4ăăLINE (250, 350)-(320, 332), 4ăLINE (450, 350)-(380, 332), 4ăSLEEP 1ăă'   #11ă'CROWNă' TABLE-top line for table lineăLINE (319, 336)-(381, 336)ăăLINE (250, 350)-(319, 336)ăLINE (450, 350)-(381, 336)ăDOă r$ = INKEY$ăLOOP UNTIL r$ = " "ăăENDăăGerald Wykoff                  Comparative Graphics           wykoff@mbawiz.com              07-01-01 (  :  )       QB Qbasic              264  8240     3grafsx.bas ' Subject: Comparitive Graphics          Date: 7-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comă'ăREM   Author's Note: This quick graphic is useful for comparingăREM   paired variables.  I've set it up for manual input althoughăREM   it is equally as simple to drop in an OPEN code with a pairedăREM   data file.ăDECLARE SUB GRAPH (goods(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%) 'goods() deleted after quantityăREM PROGRAM 8.4ăREM GraphăCOMMON SHARED XVAR$, YVAR$, goods()ăDIM goods(100)ăCLSăSCREEN 9ăCOLOR 10, 1ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "              GRAPH COMPARING PAIRED VARIABLES."ăCOLOR 11ăPRINT "       (c) 2000 Gerald L. Wykoff . . . written for www.mbawiz.com"ăCOLOR 10ăPRINTăCOLOR 15ăPRINT "      This visual display presents a relative display of the"ăPRINT "      data in paired variables.  For that reason, try to keep"ăPRINT "      your entries disciplined i.e., the same number of digits"ăPRINT "      BEFORE any decimals. The graphic does not accept keyboard"ăPRINT "      data entries .. . you can only call up data from a perma-"ăPRINT "      nent Paired Sequential file."ăPRINTăPRINTăCOLOR 14ăINPUT "       What is the name/title for the X Variable "; XVAR$ăPRINTăINPUT "       What is the name/title for the Y Variable "; YVAR$ăPRINTă     '   call up an existing statements fileăPRINTăPRINTăPRINTăPRINTăPRINTă200ăINPUT "         What's the name/path of the file you want "; file$ăOPEN file$ FOR INPUT AS #1ă'                               start getting the data converteăcounter = 1ăDO UNTIL EOF(1)ă INPUT #1, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12ăFOR I = 1 TO 1000ă NEXTă counter = counter + 1ăLOOPăCLSăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT TAB(30); "X", "Y"ăPRINT TAB(30); d1, e1ăPRINT TAB(30); d2, e2ăPRINT TAB(30); d3, e3ăPRINT TAB(30); d4, e4ăPRINT TAB(30); d5, e5ăPRINT TAB(30); d6, e6ăPRINT TAB(30); d7, e7ăPRINT TAB(30); d8, e8ăPRINT TAB(30); d9, e9ăPRINT TAB(30); d10, e10ăPRINT TAB(30); d11, e11ăPRINT TAB(30); d12, e12ăPRINTăPRINTăPRINT "     View the X Variable data above.  Since the graphs show relative"ăINPUT "     data, to maintain consistency type in the highest value "; nuvalăDIM QUANTITY1(12)ăQUANTITY1(1) = d1ăQUANTITY1(2) = d2ăQUANTITY1(3) = d3ăQUANTITY1(4) = d4ăQUANTITY1(5) = d5ăQUANTITY1(6) = d6ăQUANTITY1(7) = d7ăQUANTITY1(8) = d8ăQUANTITY1(9) = d9ăQUANTITY1(10) = d10ăQUANTITY1(11) = d11ăQUANTITY1(12) = d12ă 'ăDIM QUANTITY2(12)ăQUANTITY2(1) = e1ăQUANTITY2(1) = nuvalăQUANTITY2(2) = e2ăQUANTITY2(3) = e3ăQUANTITY2(4) = e4ăQUANTITY2(5) = e5ăQUANTITY2(6) = e6ăQUANTITY2(7) = e7ăQUANTITY2(8) = e8ăQUANTITY2(9) = e9ăQUANTITY2(10) = e10ăQUANTITY2(11) = e11ăQUANTITY2(12) = e12ă'ă       SCREEN 12ă          CLSă       'ă       ' declare two different arraysă       'ăă       'ăă       '   Note:  bottom of top two charts is 145 and disance from 0-10ă               '    is 100 counts....bottom of bottom chart is 310 and distanceă              'is again 100 counts  ....vertical speacing note vipă              ' two different set of dataă              '  this line controls the dark blue bars on #1 & #3ăă       TIMES% = 12     'was 15ă       LABEL% = 80ă    '  to set color on bars, use last digit in CALL GRAPH commandsă' line sets bottomfor graf #1&bar color last digită          CALL GRAPH(QUANTITY1(), TIMES%, 45, 145, LABEL%, 1)   'was 1, 80, LABEL%, 1ă                      ' this adjusts the graf bars on the 3 chartsă       'ă       ' call subprogram with different parametersă       ' three different graphs will be displayedă       '                'this line sets bottom on graf #2ă          CALL GRAPH(QUANTITY2(), TIMES%, 330, 145, LABEL%, 8)  'was 430, 135 280, 170, LABEL%, 2ă              ' this line sets bar on bottom most graph(bar color last digit)ă          CALL GRAPH(QUANTITY1(), TIMES%, 200, 310, 80, 1)  'was 200, 300, 80, 1ă'  this line sets bars on bottom most graph(bar color is last digit)ă          CALL GRAPH(QUANTITY2(), TIMES%, 200, 310, 80, 8)  'was 200, 300, 80, 2ă1200ăENDăăSUB Draw.3DBox (X%, Y%, XX%, YY%, C%, C2%, BC%, Solid%, Indent)ăChar1$ = "Ú"ăCharHoz$ = "Ä"ăChar2$ = "ż"ăCharVert$ = "ł"ăChar3$ = "Ŕ"ăChar4$ = "Ů"ăăCOLOR C%, BC%ăA = (XX% - X%) - 1ăIF Indent THENă  COLOR C2%ă  LOCATE Y%, X%: PRINT Char1$; STRING$(A, CharHoz$);ă  COLOR C%: PRINT Char2$ăELSEă  LOCATE Y%, X%: PRINT Char1$; STRING$(A, CharHoz$);ă  COLOR C2%: PRINT Char2$ăEND IFăFOR I = Y% + 1 TO YY% - 1ă  IF Indent THEN COLOR C2% ELSE COLOR C%ă  LOCATE I, X%: PRINT CharVert$;ă  IF Solid% THEN PRINT SPACE$(A);ă  IF Indent THEN COLOR C% ELSE COLOR C2%ă  LOCATE I, XX%: PRINT CharVert$;ăNEXT IăLOCATE YY%, X%ăIF Indent THEN COLOR C2% ELSE COLOR C%ăPRINT Char3$;ăIF Indent THEN COLOR C% ELSE COLOR C2%ăPRINT STRING$(A, CharHoz$); Char4$;ăăăEND SUBăă       SUB GRAPH (QUANTITY1(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%)ă          DIM NORM(DAYS%)ă          PMAX = goods(1)ă          FOR NUMBER.OF.ELEMENT = 2 TO DAYS%ă             IF goods(NUMBER.OF.ELEMENT) > PMAX THENă                PMAX = goods(NUMBER.OF.ELEMENT)ă             END IFă          NEXT NUMBER.OF.ELEMENTă          LINE (XPOS%, YPOS%)-(XPOS% + 150, YPOS%), COL.GRAPH%  'was 187ă          FOR NUMBER.OF.ELEMENT = 1 TO DAYS%ă             NORM(NUMBER.OF.ELEMENT) = goods(NUMBER.OF.ELEMENT) / PMAX * NORMA%ă             ZPOS% = XPOS% + 20 * (NUMBER.OF.ELEMENT - 1)ă             LINE (ZPOS%, YPOS%)-(ZPOS% + 10, YPOS% - NORM(NUMBER.OF.ELEMENT)), COL.GRAPH%, BF  'was 7, not 10ă          NEXT NUMBER.OF.ELEMENTă          LOCATE 3, 12ă          COLOR 14ă          PRINT TAB(15); XVAR$; TAB(45); YVAR$ă          LOCATE 14, 15ă          PRINT "COMPARISON BETWEEN X AND Y VARIABLES"ă          COLOR 5ă          LOCATE 11, 6ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12       1 2  3 4 5  6 7  8 9 10 11 12"ă          LOCATE 21, 26ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12"ă          COLOR 14ă          LOCATE 23, 5ă          PRINT "These three charts offer a relative presentation of the"ă          LOCATE 24, 5ă          PRINT "relationship between the Paired Variables - a view that is"ă          LOCATE 25, 5ă          PRINT "often not evident when looking at strict numbers.  Ignore"ă          LOCATE 26, 5ă          PRINT "Chart 2's column 1 (it's a height limiter to assure the"ă          LOCATE , 5ă          PRINT "relative bar height consistency for all three charts."ă         'COLOR 15ă         LINE (42, 50)-(42, 145), 11   'left vertical lineă         LINE (41, 50)-(41, 145), 11                      'line doublesă                  '    bottom most vertical lineă         LINE (42, 145)-(600, 145), 11ă         LINE (42, 146)-(600, 146), 11ă                       'ă         LINE (200, 210)-(200, 310), 11  '  bottom vertical for bottom graphă         LINE (199, 210)-(199, 311), 11    ' doubles bot-bot vertical lineă         'ă         LINE (199, 310)-(450, 310), 11      'bottom horizontal lineă         LINE (199, 311)-(449, 311), 11ă         'ă                        ' places index numbers for top two chartsă         LOCATE 5, 3ă         PRINT "10"ă         LOCATE 6, 4ă         PRINT "|"ă         LOCATE 7, 4ă         PRINT "|"ă         LOCATE 8, 4ă         PRINT "|"ă         LOCATE 9, 4ă         PRINT "|"ă         LOCATE 10, 4ă         PRINT "0"ă         '                  this places index numbers on bottom chartă         LOCATE 15, 23ă         PRINT "10"ă         LOCATE 16, 24ă         PRINT "|"ă         LOCATE 17, 24ă         PRINT "|"ă         LOCATE 18, 24ă         PRINT "|"ă         LOCATE 19, 24ă         PRINT "|"ă         LOCATE 20, 24ă         PRINT "0"ăă       END SUBăăKrisjan Allikas                GrayScale                      Krisjan.Allikas@mail.ee        07-14-01 (  :  )       PB, QB                 71   2064     Gryscale.bas'       ************************************************************ă'       * Graphics Program, Using GrayScale, 2001, Est             *ă'       * Programmed By Kristjan Allikas, Kristjan.Allikas@mail.ee *ă'       ************************************************************ă'-----------------------------------------------------------------------------ăDECLARE SUB ShmText (Text$, Row%, Clm%, Speed!, Mode%)ăDECLARE SUB Dors (Speed!, Stp%)ăDECLARE SUB Delay (Sec!)ă'*****************************************************************************ăRANDOMIZE TIMERăSCREEN 13                                       '320x200x256ăăDors .01, 1                                     'Sub for making BordersăăShmText "GrayScale", 5, 5, .01, 1ăShmText "By", 7, 4, .01, 1ăShmText "Kristjan Allikas", 7, 7, .01, 1ăShmText "Kristjan.Allikas@mail.ee", 9, 4, .01, 1ăShmText "Press Any Key", 21, 4, .01, 1ăăDO: LOOP UNTIL INKEY$ <> ""                     'Press Any KeyăăShmText "Press Any Key", 21, 4, .01, 2ăăDelay .5ăăShmText "GrayScale", 5, 5, .01, 2ăShmText "By Kristjan Allikas", 7, 4, .01, 2ăShmText "Kristjan.Allikas@mail.ee", 9, 4, .01, 2ă'-----------------------------------------------------------------------------ăSCREEN 0: CLS : WIDTH 80, 25ăPRINT "GrayScale"ăPRINT "By Kristjan Allikas / Kristjan.Allikas@mail.ee"ăSYSTEMăăSUB Delay (Sec!)ăsss! = TIMER + Sec!ăDO UNTIL TIMER >= sss!ăLOOPăEND SUBăăSUB Dors (Speed!, Stp%)ăFOR i = 0 TO 15 STEP Stp%ăLINE (i, i)-(319 - i, i), 31 - i '16 + IăLINE (i, 199 - i)-(319 - i, 199 - i), 31 - i ' 16 + IăLINE (i, i)-(i, 199 - i), 31 - i ' 16 + IăLINE (319 - i, i)-(319 - i, 199 - i), 31 - i ' 16 + IăDelay Speed!ăNEXT iăăEND SUBăăSUB ShmText (Text$, Row%, Clm%, Speed!, Mode%)ăIF Mode% = 1 THEN GOSUB Up:ăIF Mode% = 2 THEN GOSUB Down:ăGOSUB E:ăUp:ă  FOR i = 16 TO 31ă   LOCATE Row%, Clm%: COLOR i: PRINT Text$ă   Delay Speed!ă  NEXT iăRETURNăDown:ă  FOR i = 1 TO 16ă   LOCATE Row%, Clm%: COLOR 32 - i: PRINT Text$ă   Delay Speed!ă  NEXT iăRETURNă ăE: END SUBăăAntoni Gual                    calculate mileage              agual@eic.ictnet.es            07-15-01 (  :  )       QB                     330  10231    ballz31.bas DECLARE FUNCTION timecalc% (res AS ANY, t1 AS ANY, t2 AS ANY, sb%)ăDECLARE SUB timeget (t AS ANY)ăDECLARE SUB drawsphere (X%, Y%, r%, clr%, lightdir!, lightazi!, northdir!, northazi!, dir!)ăă'Here's a little QBASIC sub to draw spheres, randomly dithered for aă'random direction lighting effect.ă'by Antoni Gual  agual@eic.ictnet.es 5/2001ă'4/6/01  poked to screen 13,form factor corr,8clrs range, 9 colors,avoidedă'black dots on topă'8/7/01  added screen buffer,pole orientation,removed INT aprox, stripped ballă'9/7/01 removed link error (was static buffer),overflow at very close ballsă'removed negative SQR correction (a% must be INT , not CINT)ă'12/7/01 added CPU speed compensation using laptimeră'next: add spin, texture (earth)ăă'from laptimer library by Antoni Gual---------------ăă'this variable type keeps time readings (In PowerBasic we could use a QuadWord)TYPE timetypeăTYPE timetypeă   tick AS LONG       'clock ticks (54.9254 msec) elapsed from midnightă   pit  AS LONG       'PIT counts  (0,8381 ćsec)  from last tickăEND TYPEăă'some constants you can't touch!ăCONST clockfreq# = 1193181.666#           'PIT clock frequency ticks/secăCONST pitdivisor# = 65536#                'PIT divisorăCONST tick4sec# = clockfreq# / pitdivisor 'HzăCONST mili# = clockfreq# / 1000ăă'end of  laptimer library header---------------ăDIM tim AS timetype, oldtim AS timetype, diftim AS timetypeăăCONST pi = 3.141592ă ăRANDOMIZE TIMERă ăREDIM buffer(-8 TO 31999) AS INTEGERăbuffseg& = VARSEG(buffer(-8)) + 1ăbuffoff% = 0ă'buffseg& = &HA000ă'buffoff% = 0 ăăDIM SHARED RAND(0 TO 63): FOR I = 1 TO 63: RAND(I) = RND: NEXTăăSCREEN 13   'QUICKBASICămx = 320: my = 200: ml = 24: mr = 50: numclr% = 8ăscrrel! = 1.6666666# * 200 / 300ă'let's define a color range of 8 shades, so in screen 13 we can haveă'32 different ball colorsăclrng% = 8ă'define color ranges, darkest color must have the lowest palette nră'GOTO endpală'range of colors used by red ballsăPALETTE 1, &H4ăPALETTE 2, &H10ăPALETTE 3, &H18ăPALETTE 4, &H20ăPALETTE 5, &H28ăPALETTE 6, &H30ăPALETTE 7, &H38ăPALETTE 8, &H3Fă'range of colors used by green ballsăPALETTE 9, &H400ăPALETTE 10, &H1000ăPALETTE 11, &H1800ăPALETTE 12, &H2000ăPALETTE 13, &H2800ăPALETTE 14, &H3000ăPALETTE 15, &H3800ăPALETTE 16, &H3F00ă'range of colors used by blue ballsăPALETTE 17, &H40000ăPALETTE 18, &H100000ăPALETTE 19, &H180000ăPALETTE 20, &H200000ăPALETTE 21, &H280000ăPALETTE 22, &H300000ăPALETTE 23, &H380000ăPALETTE 24, &H3F0000ă'range of colors used by white ballsăPALETTE 25, &H40404ăPALETTE 26, &H101010ăPALETTE 27, &H181818ăPALETTE 28, &H202020ăPALETTE 29, &H282828ăPALETTE 30, &H303030ăPALETTE 31, &H383838ăPALETTE 32, &H3F3F3Făă'range of colors used by ?ăPALETTE 33, &H80800ăPALETTE 34, &H101000ăPALETTE 35, &H181800ăPALETTE 36, &H202000ăPALETTE 37, &H282800ăPALETTE 38, &H303000ăPALETTE 39, &H383800ăPALETTE 40, &H3F3F00ăă'range of colors used by ?ăPALETTE 41, &H80008ăPALETTE 42, &H100010ăPALETTE 43, &H180018ăPALETTE 44, &H200020ăPALETTE 45, &H280028ăPALETTE 46, &H300030ăPALETTE 47, &H380038ăPALETTE 48, &H3F003Făă'range of colors used by ?ăPALETTE 49, &H808ăPALETTE 50, &H1010ăPALETTE 51, &H1818ăPALETTE 52, &H2020ăPALETTE 53, &H2828ăPALETTE 54, &H3030ăPALETTE 55, &H3838ăPALETTE 56, &H3F3Făă'range of colors used by ?ăPALETTE 57, &H80804ăPALETTE 58, &H101008ăPALETTE 59, &H18180CăPALETTE 60, &H202010ăPALETTE 61, &H282814ăPALETTE 62, &H303018ăPALETTE 63, &H38381CăPALETTE 64, &H3F3F20ăăăPALETTE 65, &H40808ăPALETTE 66, &H81010ăPALETTE 67, &HC1818ăPALETTE 68, &H102020ăPALETTE 69, &H142828ăPALETTE 70, &H183030ăPALETTE 71, &H1C3838ăPALETTE 72, &H203F3Făăendpal:ă'demo startăCLSăr% = 1ăc = .1ăd = .2ăt! = TIMERăfrm% = 0ătimeget timăDOă    REDIM buffer(-8 TO 31999) AS INTEGERă    buffer(-2) = 2560 '320*8ă    buffer(-1) = 200ăă  X% = 160ă  Y% = 100ă  r% = 100ă  c% = 1ă  a = a - t& * .0001: IF a < 0 THEN a = a + 2 * piă  b = b - t& * .0002: IF b < 0 THEN b = b + 2 * piăă  c = c + t& * .00004: IF c > 2 * pi THEN c = c - 2 * piă  d = d + t& * .00005: IF d > 2 * pi THEN d = d - 2 * piăă  drawsphere X%, Y%, r%, c%, a, b, c, d, eă  'WAIT &H3DA, 8ă  PUT (0, 0), buffer(-2), PSETă  LSET oldtim = tim: timeget timă  dummy = timecalc(diftim, tim, oldtim, 1)ă  t& = (pitdivisor# * diftim.tick + diftim.pit) / mili#ă  LOCATE 1, 1: PRINT t&ăfrm% = frm% + 1ăLOOP UNTIL LEN(INKEY$)ăăPRINT frm% / (TIMER - t!)ăa$ = INPUT$(1)ăăSUB drawsphere (X%, Y%, r%, clr%, lightdir, lightazi, northdir, northazi, dir)ă'3d shadowed sphere drawing using dithering and a range of color paletteă'by Antoni Gual  agual@eic.ictnet.es 5/2001ă'ă'INPUTS:ă'x%, y%  position on screenă'r%      radiusă'clr%    base color (the darkest one in range, it must be the lower palette nr)ă'scrang  in radians direction of the light sourceă'vertang in radians angle of the light source to a line perpendicular to screenă'ă'FOLLOWING SHARED VARIABLES THAT MUST BE INITIALIZED BEFORE CALLING THIS ROUTINE:ă'clrng%   must be set to the width of a color rangeă'scrrel!  IS the screen shape factor(1.6666*200/320 for SCR 13)ă'buffseg& SEGMENT of screen buffer. If drawing directly to screen set to &HA000ă'buffoff% OFFSET from start of buffer, set to 0 for screen and 4 for PUT arrayă'----------------------------------------------------------------------------ăSHARED clrng%, buffseg&, buffoff%, scrrel!ă    r2& = CLNG(r%) * r%ă    temp! = SIN(northazi)ă    xn! = COS(northdir) * temp!ă    yn! = SIN(northdir) * temp!ă    zn! = COS(northazi)ăă    temp! = SIN(lightazi)ă    xl! = COS(lightdir) * temp!ă    yl! = SIN(lightdir) * temp!ă    zl! = COS(lightazi)ă    tp! = 1! / CSNG(r%) / scrrel!ă    FOR J% = -r% TO r%ă        YJ% = Y% + J%ă        IF YJ% >= 0 AND YJ% < 200 THENă            DEF SEG = buffseg& + 20 * YJ%ă            j1! = J% / CSNG(r%)ă            J12! = 1 - j1! * j1!ă            tp1! = j1! * yl!ă            tp2! = j1! * yn!ă            a% = INT(SQR(r2& - J% * J%) * scrrel!)ă            FOR I% = -a% TO a%ă                XI% = X% + I%ă                IF XI% >= 0 AND XI% < 320 THENă                    I1! = I% * tp!ă                    k1! = SQR(J12! - I1! * I1!)ă                    c! = clrng% * (xl! * I1! + tp1! + k1! * zl!)ă                    clr% = INT(16 * (1 - (xn! * I1! + tp2! + k1! * zn!))) AND &HFFF8ă                    ccc% = clr% OR INT(c!)ă                    IF RND < (c! - INT(c!)) THEN ccc% = ccc% + 1ă                    IF ccc% <= clr% THEN ccc% = clr% + 1ă                    POKE XI%, ccc%ă                END IFă           NEXTă        END IFă    NEXTăEND SUBăăFUNCTION timecalc% (res AS timetype, t1 AS timetype, t2 AS timetype, sb%)ă'adds or substracts two times in timetype formată'---------------------------------------------------------------------------ă'INPUT:        a,b = times in TimeType. For subst, a must be later than bă'              sb%   operation to perform   0 add | 1 substract | 2 comparationă'OUTPUT:       res=  for add      result MOD 1 dayă'                    for subst:   if a>b res= a-b |if b>a res=(a+1day)-bă'                    for compare: nothingă'              Timecalc%ă'                 add          1 if if res>1dayă'                 substraction 1 if b>aă'                 compare      1 if b>aă'DEPENDENCIES: Noneă'---------------------------------------------------------------------------ă'By Antoni Gual agual@eic.ictnet.es  13/1/2001ă'---------------------------------------------------------------------------ăă'if sb%=0 res =a + b    if res>1day  Timecalc%=1, res =res MOD 1 dayă'if sb%=1 res =a - b    if b>a       Timecalc%>1, res= (a+1day)-bă'if sb%=2               if b>a       Timecalc =1ăCONST ticks4day& = tick4sec# * 3600 * 24  'ticksăDIM t3 AS timetype, t4 AS timetypeăSELECT CASE sb%ăCASE 2ă    IF t2.tick > t1.tick THENă        timecalc% = 1: EXIT FUNCTIONă    ELSEIF t2.tick = t1.tick THENă        IF t2.pit >= t1.pit THEN timecalc% = 1: EXIT FUNCTIONă    END IFă    timecalc% = 0ăCASE 1ă    sb% = 0ă    LSET t3 = t1: LSET t4 = t2ă    IF t4.tick > t3.tick THENă        t3.tick = t3.tick + ticks4day&ă        sb% = 1ă    ELSEIF t4.tick = t3.tick THENă        IF t4.pit > t3.pit THEN timecalc% = 1: t3.tick = t3.tick + ticks4day&ă    END IFă    res.pit = t3.pit - t4.pită    IF res.pit < 0 THEN pastmidnight% = 1: res.pit = 65536 - res.pită    res.tick = t3.tick - t4.tickăCASE 0ă    a& = CLNG(t1.pit) + t2.pită    carry% = c& \ 65536ă    IF carry THEN a& = a& MOD 65536ă    res.pit = a&ă    res.tick = t1.tick + t2.tick + carryă    IF res.tick \ ticks4day& THEN timecalc% = 1: res.tick = res.tick \ ticks4day&ăăEND SELECTăăEND FUNCTIONăăSUB timeget (t AS timetype) STATICă'Reads hardware time. Should be a function, but QB can't return a UDTă'---------------------------------------------------------------------------ă'INPUT:        nothingă'OUTPUT:       t= current time in TimeType formată'DEPENDENCIES: Noneă'---------------------------------------------------------------------------ă'By Antoni Gual agual@eic.ictnet.es  13/1/2001ă'---------------------------------------------------------------------------ă    'reinit timer so we can assume we read lo byte first and then hi byteă    IF NOT tinit% THENă        OUT &H43, &H34ă        OUT &H40, 0ă        OUT &H40, 0ă        tinit% = -1ă    END IFă   ă    DEF SEG = &H40ă    'read bios tick counteră    GOSUB TimeGetRdTick1ă    SWAP b2&, b&ă  ă    'get PIT counter for channel 0 and negate it as it counts bacwards)ă    OUT &H43, &H0: t0% = INP(&H40): t1% = INP(&H40)ă    a& = 65536 - (256& * t1% + t0%)ăă    'get bios tick counter againă    GOSUB TimeGetRdTick1ă  ă    'if lobite of bios tick changed, decide which value to displayă    IF (b2& <> b&) THEN IF (a& AND &H8000&) THEN SWAP b2&, b&ăă    'fill structureă    t.tick = b&ă    t.pit = a&ăEXIT SUBăă'read BIOS tick counterăăTimeGetRdTick1:ă    t5% = PEEK(&H6F): t4% = PEEK(&H6E): t3% = PEEK(&H6D): t2% = PEEK(&H6C)ă    b& = 256& * (t3% + 256& * (t4% + 256& * t5%)) + t2%ă    RETURNăEND SUBăăAntoni Gual                    String Simulation              agual@eic.ictnet.es            10-00-01 (  :  )       Qbasic, QB, PDS        63   2043     String.bas  'string simulation by Antoni Gual (agual@eic.ictnet.es) October 2001ă'a QBasic-QB4.5-PDS programăTYPE ptypeă    x AS SINGLEă    y AS SINGLEă    vx AS SINGLEă    vy AS SINGLEăEND TYPEăSCREEN 13ăCONST slen = 31ăCONST gravity = .1ăCONST scryscale = 2ăCONST scrxscale = 5ăCONST damping = .999ăCONST k = 2 * gravityăDIM a(slen + 1) AS ptype, b(slen + 1) AS ptypeăFOR i = 0 TO slen: a(i).y = i: a(i).x = i / 5: NEXTăDOăă  'draw new pos of stringă  PSET (a(0).x * scrxscale + 160, a(0).y * scryscale)ă  FOR i = 1 TO slen: LINE -(a(i).x * scrxscale + 160, a(i).y * scryscale): NEXTă  'ăFOR i = 1 TO slen - 1ă    'calculate elongations ath both sides of pointă    XVector1 = a(i - 1).x - a(i).xă    YVector1 = a(i - 1).y - a(i).yă    Mag1 = SQR(XVector1 * XVector1 + YVector1 * YVector1)ă    Ext1 = Mag1 - 1ă    XVector2 = a(i + 1).x - a(i).xă    YVector2 = a(i + 1).y - a(i).yă    Mag2 = SQR(XVector2 * XVector2 + YVector2 * YVector2)ă    Ext2 = Mag2 - 1ă   ă    'calculate dynamics of pointă    xv = (XVector1 / Mag1 * Ext1) + (XVector2 / Mag2 * Ext2)ă    yv = (YVector1 / Mag1 * Ext1) + (YVector2 / Mag2 * Ext2) + gravityă    b(i).vx = a(i).vx * damping + (xv * k)ă    b(i).vy = a(i).vy * damping + (yv * k)ăă    b(i).x = a(i).x + b(i).vxă    b(i).y = a(i).y + b(i).vyăNEXTă    'point at the tip of the string has only one neighbor..ă    XVector1 = a(i - 1).x - a(i).xă    YVector1 = a(i - 1).y - a(i).yă    Mag1 = SQR(XVector1 * XVector1 + YVector1 * YVector1)ă    Ext1 = Mag1 - 1ă    xv = (XVector1 / Mag1 * Ext1)ă    yv = (YVector1 / Mag1 * Ext1) + gravityă    b(i).vx = a(i).vx * damping + (xv * k)ă    b(i).vy = a(i).vy * damping + (yv * k)ă    b(i).x = a(i).x + b(i).vxă    b(i).y = a(i).y + b(i).vyă  'erase former stringă  WAIT &H3DA, 8ă  PSET (a(0).x * scrscale + 160, a(0).y * scrscale), 0ă  FOR i = 1 TO slen: LINE -(a(i).x * scrxscale + 160, a(i).y * scryscale), 0: NEXTă  'copy work array to normal arrayă  FOR i = 0 TO slen: SWAP a(i), b(i): NEXTăăLOOP UNTIL LEN(INKEY$)ăăBernt Figaro                   Value out a JPEG file          u19604345@telia.com            10-06-01 (  :  )       qb,qbasic,pds          1    4621     Jpgsize.bas REM $DYNAMIC
DECLARE SUB ReadImageInfo (sFileName AS STRING)

REM ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄż
REM ł    Â ÚÄÄÄż ÚÄÄÄż    ÚÄÄÄż   ÂÂ  Â     ÚÄÄÄż    ÚÄÄÄż  ÂÂ  ÚÄÄÄż ÚÄÄÄż                                   ł
REM łÂ   ł ĂÄÄÄŮ ł ĂÄż    ĂÄ´     łł  ł   Â ĂÄ´      ŔÄÄÄż  łł  ÚÄĹÄŮ ĂÄ´                                     ł
REM łŔÄÄÄŮ Á     ŔÄÄÄŮ    Á       ÁÁ  ŔÄÄÄŮ ŔÄÄÄŮ    ŔÄÄÄŮ  ÁÁ  ŔÄÄÄŮ ŔÄÄÄŮ                                   ł
REM łÚÄÄż  ż   Ú                                                                                              ł
REM łĂÄÄÁż ŔÄÂÄŮ                                                                                              ł
REM łŔÄÄÄŮ   Á                                                                                                ł
REM łż   Ú   ÂÂ  ÚÄÄÄż ÚÄÄÄż ÚÄÄÄż ÚÄÄż  ÚÄÄÄż Â   Â                                                          ł
REM łłÚÄżł   łł  ÚÄĹÄŮ ĂÄÄÄ´ ĂÄÄÂŮ ł  Ŕż   ÄÄ´ ŔÄÄÄ´                                                          ł
REM łŔŮ ŔŮ   ÁÁ  ŔÄÄÄŮ Á   Á Á  ŔŮ ŔÄÄÄŮ ŔÄÄÄŮ     Á                                                          ł
REM łÚÄÄż  ÚÄÄÄż ÚÄÄÄż Úż  Â ÚÄÂÄż       ÚÄÄÄż   ÂÂ  ÚÄÄÄż ÚÄÄÄż ÚÄÄÄż ÚÄÄÄż                                  ł
REM łĂÄÄÁż ĂÄ´   ĂÄÄÂŮ łŔÄżł   ł         ĂÄ´     łł  ł ĂÄż ĂÄÄÄ´ ĂÄÄÂŮ ł   ł                                  ł
REM łŔÄÄÄŮ ŔÄÄÄŮ Á  ŔŮ Á  ŔŮ   Á         Á       ÁÁ  ŔÄÄÄŮ Á   Á Á  ŔŮ ŔÄÄÄŮ                                  ł
REM łÚÄÄÄż ÚÄÄÂż ÚÄÄÂż   Í»          Í»  ÚÄÄÂż       ÚÄÄÂż ÚÄÄÄ»                                              ł
REM łÚÄÄÄŮ ł / ł ł / ł    ş   ÄÄÄ     ş  ł / ł  ÄÄÄ  ł / ł ŔÄÄÄż                                              ł
REM łŔÄÄÄŮ ŔÁÄÄŮ ŔÁÄÄŮ   ÍĘÍ         ÍĘÍ ŔÁÄÄŮ       ŔÁÄÄŮ ČÄÄÄŮ                                              ł
REM łÚÄÄÄż ż   Ú ÚÄÄÄż ÚÄÄż  ÚÄÄÄż Úż  Â                                                                      ł
REM łŔÄÄÄż łÚÄżł ĂÄ´   ł  Ŕż ĂÄ´   łŔÄżł                                                                      ł
REM łŔÄÄÄŮ ŔŮ ŔŮ ŔÄÄÄŮ ŔÄÄÄŮ ŔÄÄÄŮ Á  ŔŮ                                                                      ł
REM łÂ   Â   Í»  ÚÄÄÄż ÚÄÄÄż ÚÄÄÂż Â   Â ÚÄÄÄż Â   Â ÚÄÄÄ» ÚÄÄżÚÄÂÄż ÚÄÄÄż Â     ÂÂ  ÚÄÄÄż  ÚÄÄÄż ÚÄÄÄż Úż Úż ł
REM łł   ł    ş  ŔÄÄÄ´ ĂÄÄÄż ł / ł ŔÄÄÄ´   ÄÄ´ ŔÄÄÄ´ ŔÄÄÄż łŔÄŮ  ł   ĂÄ´   ł   Â łł  ĂÄÄÄ´  ł     ł   ł łŔÂŮł ł
REM łŔÄÄÄŮ   ÍĘÍ     Á ŔÄÄÄŮ ŔÁÄÄŮ     Á ŔÄÄÄŮ     Á ČÄÄÄŮ ŔÄ    Á   ŔÄÄÄŮ ŔÄÄÄŮ ÁÁ  Á   Á oŔÄÄÄŮ ŔÄÄÄŮ Á   Á ł
REM ŔÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄŮ

REM This module will return height, width, color depth from JPEG
DIM SHARED mWidth AS LONG
DIM SHARED mHeight AS LONG
DIM SHARED mDepth AS LONG


REM Example
COLOR 14
CLS
LINE INPUT "Input Path and JPG filename "; MyFile$
ReadImageInfo MyFile$
PRINT "Info about "; MyFile$
PRINT USING "Depth ## colors : Width=#### pixels : Height =#### pixels"; mDepth; mWidth; mHeight
SLEEP
END

SUB ReadImageInfo (sFileName AS STRING)
REM This is the sub to call to retrieve information on a file.
DIM iFN AS INTEGER
DIM Ln&
Buf$ = " "
A$ = SPACE$(3)


mWidth = 0
mHeight = 0
mDepth = 0

iFN = FREEFILE
OPEN sFileName FOR BINARY AS iFN
Ln& = LOF(1)
FOR I& = 1 TO Ln&
GET #iFN, I&, Buf$
GET #iFN, I&, A$
REM loop through looking for the byte sequence FF,D8,FF

REM which marks the begining of a JPEG file
IF A$ = CHR$(&HFF) + CHR$(&HD8) + CHR$(&HFF) THEN LinePos& = I&: EXIT FOR
LinePos& = LinePos& = I&
NEXT I&

LinePos& = LinePos& + 2
FOR I& = LinePos& TO Ln&
REM loop through the markers until we find the one
REM starting with FF,C0 which is the block containing the
REM image information
GET #iFN, I&, Buf$
GET #iFN, I&, A$
REM loop until we find the beginning of the next marker
IF ASC(Buf$) = &HFF AND ASC(MID$(A$, 2, 1)) <> &HFF THEN EXIT FOR
LinePos& = LinePos& = I&
NEXT I&


REM move pointer up
LinePos& = LinePos& + 1
FOR I& = LinePos& TO Ln&
GET #iFN, I&, Buf$
GET #iFN, I&, A$
SELECT CASE ASC(Buf$)
CASE &HC0 TO &HC3, &HC5 TO &HC7, &HC9 TO &HCB, &HCD TO &HCF
REM we found the right block
PRINT "Ok for this file"
GOTO ValueIt
CASE ELSE
END SELECT
LinePos& = I&
NEXT I&
CLOSE #iFN
EXIT SUB
ValueIt:
REM If we've gotten this far it is a JPEG and we are ready
REM to grab the information.
REM get the height

GET #iFN, LinePos& + 5, A$
mHeight = 256 * ASC(MID$(A$, 1, 1)) + ASC(MID$(A$, 2, 1))

GET #iFN, LinePos& + 7, A$
REM get the width
mWidth = 256 * ASC(MID$(A$, 1, 1)) + ASC(MID$(A$, 2, 1))
REM get the color depth
GET #iFN, LinePos& + 9, Buf$

mDepth = ASC(Buf$) * 8



END SUB

ăKari Korkeila                  PB Mandelbrot                  kkorkeila@tosikiva.net         10-01-01 (  :  )       PB                     371  24491    FRACTALU.BAS'>>> Page 1 of FRACTALU.ZIP begins here. TYPE:BINAA TLEN:17610ă'-------------------------------------------------------------ă'                  INSTRUCTIONS FOR DECODINGă'If there are multiple parts to this file, merge them into oneă'file using  COPY PART1.EXT+PART2.EXT FILENAME.EXT  Remove allă'message header and footer information (everything outside theă'">>> Page x of..." lines),  load the result into your versionă'of Basic (QBASIC, QuickBASIC, etc.) then RUN it. The originală'file will be decoded into the current directory on your disk.ă'-------------------------------------------------------------ăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"FRACTALU.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%%%R-%TY%[P&9;oJb%7%%w'%%%.%%%%kw%fhyS[nht>P$*ARIU1UNea3ăU"[]*1:>>%$KxWZ_&e;Wg4)gd_7u51/^b\BAmJjg=h-$Ro[[b)CeR&U*:T%L5H;OkăU"F/n55*W6mouR=U1+NW0+0GjH9Cd\]9+:H9(;uN?Uv#j6b'][%tsD*pd^xBBiq:văU"r51'\v2Vbz4K.tmmWh#QfRDT/AIr9xS\Z4$7*K6Shu'n06)5;R9bBgn*/DproD2ăU"[gKm8v?k:SEMXO\EF5lK$B*E%mJIG9_s59p:2kOshjz+KgPCsXa1m2ZYyIPj[lFăU"suvuND>hlfW*,F:FbHU>?u,u%%up()%9%%%7-%CrITPY?%K/h%%%%s%%%%-%%%%ăU"kw%fhyS[whxG9EpGN%rnzu5A/Y.q?Ajj.VXW.6pmB1Ei[.A+2o42qAENl=u[^w#ăU"uuUw%UZ%wYmGwMaeCRA'J^i4'Ave%%%up(%)9%%%%-%A&H^PXF(eD9%g%%D%p&%ăU"1%%%%k%wfhy(fMVS[gfxekLrBTs]+ihYxCxO.vK]9BLCvVt^5Je9LfTo[IvpB:^ăU"u7O7:JJ[^:,pJtX6nwNq^\Z#%-watBeG75fV3iYoJV71Y#C\,i(S'nF73l't2OBăU"PfI5DRDq5r<B9cbGNo/\+DJ$\?iJ4zuiRl$n=youuRD0vQDS$X9IPx+Zr,2(pbmăU"G$cAXEpAZ#&\f$Ci&_>^[gd<eQ:8Z6mKDCfxFi7)IaSzDWpWj1F/o7%fjK6dnqOăU"wnwG&MyO;rFwuPteN17pie\Qj3+JHenbNohz2,/7,hDfjb46ZqauVf]0$;+mckHăU"86/S,yNhCq.Wf-,BcV+ug4h4&SuNtf\AwIL%IiR*lNDAX%W5?%PGLfYr\i#5D>#ăU"8Zif>RzR\x$;3H1gZV5<4VSc6)V86pk\t-hdB9EU]l.cUa>Ng,w2pRS0irKV#)făU"Mer>Lp>GWkHbFB>r3.\:8D(.'lpd4Y1sL>>6KOFD8exWunUCU&Q7/KFH73B,TQsăU"pk?.a4fHMweOG=O$l=k6rS'_5\=K._fLN#=9IUU#$b+*Ct'WHl8GS0quT>Jt[jhăU"P#aOu;6V4<F;x;%$V+75A5\<&]etwsu&69n.rph:M80DTd\gA<kWk'<AZo*qQ&hăU"rW,&f4?aFjPs^p#j(#zf8QN.fM8W_f+<C#9A;yFS6o[A&G^Fy2,fB_'&#\$O=cMăU"sGi951]uWvC]]B$sX_ChD?AL($1NLZK+J:'tfyId)MgEKvAzIsHZa2CH&x#+_gHăU"EbTBN-uW0[iw9hJ&0.SL#Nl/)dP-%:mE1u^/<[-&b_p2O2[,IUP?8G>rtfrF8TdăU"#2icR54-v$;n=\3v7W-)VVX\-V/-a-JwOT%-zAL&pQEuu[&?d#7d+.h(T4TFHmGăU"hmKFZW]l7Ql1'Gb0iMPXRw2)pRqw_uZ8[up,d,%^ogKO9ga89sP=bU)-Jp5Lk:MăU"j4lBh>s:[Wc^6Om8R>fXnceNC3iO-=5aEUn/H)uY%44oL]Epf';rdRf-+1-3#]WăU"RapNfE>'lh0pA7GE%mXiB2>C+m#IZ<YW:Q'_zo3*'RITk-w\:C1G2kCP9?CTKUPăU"<X]NAeqQ<v4+ZGp0Q/ly<?M13$5X4(ep1#*m/;_aE;x\VYnsO7?YF6n)g&)leO_ăU"E6p:$7/L+h/RisJzXe=Wg4c-JEI?O#oUj8Vn/cVF)10+_LX7*gUg?qlI0-Kp5O=ăU"]YW0H3u(#/6eBZYhWE&h=g.KCz)zVf]CxRH19#zNkwH4OZXhJW9eoOFRh'J1W9+ăU"4DVEt/81,aqj[a;M^4%8Vi3b;Io14<N8AHcu=7Aj[Jp#SO:ZbqOh'catdtbo2sPăU"YB';Ov4')%F*QBh'=^RaBF;V(yYt5;iljl>iitr*0cQQI5[6AJBioB:cqn6J0#\ăU"8mNm;TBNI4K-<G4XdicMTYLtPbng17QPQn\H_wK;BQDX67f=Eo:agidn'ZJTE7DăU"^9ES]ZY4OseXh;*RJZt?l61-,>aqw\Dr8U(*du(IM4>#h$F_ypGYhSq%4JP[:>?ăU"[Xq8?MwFkIx\C(JX<;]#&Q'9gaU-58htw6>$p'$.Byp2sdqLi5=#UjJCk*,YHwfăU",GgWq=h4e7,T7$F31y8EgnjZhUl^Kjh6M%[oFjO1Ee0$E&Hv/X9/+_wyo:zWk8MăU"f*1Hg##F<*m<n^iVp>+'/EyU_Z*_qPSJXgca>tGfeQaB;YkTGPw0dspiuT>>CQwăU"1iJzi<rS/Auqxm+>)D<yjNK5t/xwtg5jfvpSdXS;LTt/<6oMWtTFkL$d9's,&vgăU"yq,bO-mVUFpZV#U9cKBE=b7FRf)kQn=+M)MpVSC]nJ4faJifZK#N=MiwV]NE;J1ăU"3l:0YiV(hO-K)8YjFw#uhGvi,##F]B&CH3g;Z/I\,ak%/J\-5nGx=IG;5U[AG]KăU"lZf4LK.62<yu?t5?hvpd=DMEYM[1b9.$8,S5>4qDTW8/GW:ZS-\*HrdAR,E0I[RăU")x5sUR(V'2<gxMSQG*p.^0k3\'M1mcPIC3l'H3m;/5kIa;m2d[VZ,-t24e^4bz)ăU"fmUfO0#FcamKo99E0?DSL7.MCkTX2ZopKmOA/:yY[%DTK5WhU=9t.1#\S7a5.OxăU"tI)Pc[y&7l2Z'UmjGm\TT&EgWCM3:?.h*N1vSMu61+1zdy+Sp#sjNIn;orKcT>3ăU"#3+Nf0IvIe):e1n&grn5A3Yo^t4W].I27ogW\PNT($npNf[ytjO'fBE9x?YEDAXăU"zfNCAOUscwEZV^MjB\/>(Z8W*UUh_<XfKz:cPV1'=I%LAG\Z:'q;o]D.SGpWsdlăU"Z5NQMMc?:rXa50(R^_WnUNx8[o.//4pxM9Pu>9jnJicC-2Q9#?zl4n+J+:2y?T+ăU"A,*OC(A/O_1+?&phAZpnn#mC^I+u]H^OlKD#nlo6AX?wM1Gd.2;i]VFc=Dn[91#ăU"^IY#UhYI1T[g\uA8(WAgAhhu5%]=+]i7g:fa><^w1QL9&W[A9:nA,s-yh.:n?:+ăU"k*GnGp;M%LI#%')^9:nFW%aQ+,B-Zh6g;Fma8t<q]=KCRxh_hhWblQ[7eGt*uoKăU"&Mh61.HqbqPR6$?^J3/[w+VeA;g:Zr9$G*v*R]/u+5t)NSrp$BFCaf*SBndgHpSăU"d+,#<&<yfGl]Nm?1&7aq&Q664$rp6#+I_dUvu$Sr+EKmnMbV/t9<61-/3qDco)TăU"H:=&1C)buv]BsG^[t)Kb1^tx((pEW.^IxZbAr+z(7AQOp1BkwME-j?wH+Kr'X>tăU"n]7'KFR?$)aN[U=mZZEcbOk3/inIsXQy8dP[P_#]<#H?nu<UQ9rH:a*Ced:B_q.ăU"S(_a#E9mK\f&mOR9WvzUByCq.FXJ'#m;2([U7e+P7ASn(%ajeG5x)_%Q'%_7n'BăU"G:%oLI#uw)6dnEHe+%aa.&Ck[,,Q<^3X/Z'6=Yp#)Bg:A[[E;IUCEF^T9,v1/l:ăU"vH,m/ihmVzMYNA#h4(-Dt*A9cQ#F1-UF%pan(7$;#U$AP\WV8?A=+6rDxd;P5g7ăU"6^eF^7E\nhGN.aUZW5f[reF]%nUD9^oa]Pv#FN[8<*20n:fX5lpv$n*>8n:91Z9ăU"(hSz^-)jvn$BZj5(FlS&$Nb:SRD_Py7&c3g2'WtLTX_)[+Pn\f6TQh-JfR%wOO6ăU"9j6UWc*GwQXw7Da%%g:W3%PE(c\maIqy-tN^\I:MCDL#?J&pkE<I(>Dx^sSlC8.ăU"PtJ<1c^y0?TBI)X(U)A?IKf]Gb?WeQ(QUo+8U0d6Ij<Ph>W1df[FQt'f%W>j9#SăU"lbJj][l>0NJP9?M[LX1ycT/X-k:T1:p?ed.yT+e%4ZEUa$)QVG?jxe+1Q:N^1NrăU"Kk0VDib+waM-FU#mznaf\wzDO)#pNHV9Fdf1)iD8#);40AxQO1H(W6y+O;-_PRZăU"w*bFWvNA1bC-_,F#6GI4X9K.#rp_<^+VAI,pohCqTr-YQbU)gEM67K5#?5'GJWsăU"I$$qCjRXjOjF8XQ0*<b0\A=aW)UP3&G3GuW)]Z7I1aa:C\?<-Ba*#cWp^62O(V0ăU"BVYP7Q+N?e8A9yWo(N1[3p(HZ]N1O=Q9N'2)cNQ4J7+s&0ooS8>EKCQ'NUkIFi9ăU"ut[I&(7+2.+7%1-rSrAYBKzp%g2n?).R2fZ]MdgJ8L1'+$;>D(gGai-3O+%e0x/ăU"T:X5$E3%D^j(hZh5UWc6?HcfzQmPA'&6On3h3Oy9a&g8kJf\z>>09c2XB4xX'[dăU"nW.E(k7R+m-[94iWW'm(4j]qSwB;K?Sh1p_32PlB3aF%$7h06$U61/aRx2vUs1)ăU"0YY*NZUzv/AEW3)]a?3J3-y.DRX$^sM-5BA9/0rE6Uz>$lU4v\UVi1TU5qW=tl0ăU"7uSqxMt73V,6'cl0NO&\qIN5QuM4_zsYbttD<VPis(euvP4*[CLqA6b]u%o^N*iăU"YC(H.]iW;BXU7;HZ*\&l'>UI8T,N6GXxQTF+EK5%?gpAi.pP%%bxLk4marjuQjGăU"7<2e7NZt6K4#\+[-[V#iKjgFuClf5aeI)0&GW%2j9.$ZG&ZN%W]S-qQsvPbmq\%ăU":M3<p2<G]Vjc%9h5#?n*4-:5Cg<6wK,sW5r_,<)q8jE[/$knI\wKJj7z:3K=\hqăU"cjF/F8*X(RR;WAWcQKr;bqBm70+h?GyYkfkPtWnXhPPWZdsaqEx$qkj=w1gt=gsăU"w7('ZzDG^j-'<$\qu$kGVSOJv7\#d4vZnUpu\7:Zl'<lneDS=2l'AydZ?#FY,*JăU"\BJn+BW4hBNYegCJn7WwUCK>$_fo#JzHE2:6i:IIPQu\,jl(qq[[/PEiMG<Dw#\ăU"B[.i[s75eQ_\I,&SL-.lRcCia0BhB3kPK#5uQar,3Br+MS/-vTF\vJ=dCAOdSjdăU"X0jHePue+wmDlClXke+vmHE=6]odBml3Mre4>DH.y)/awdD1wyAj7o*W'+;pA<=ăU"Ru^iDGADS#LDa,50u[b(]p4WGsGA)o*.Vi\M8('rMQjcSM^>A<^k1T5-=S;0K8[ăU"].DL)]qT2_Xn1/k\]]c%x8W=8j>:)T)ZC2xS;%O(,i47WLGVZrTG.b#[q,N73X4ăU"2(Sl*dHddiD=u//H7Ee2i.53Kq/&N'XYTQtYVmiY'Z#q&*7oL*XV.G&KXDY??k,ăU"=iUuO.1C-ckwGyxKT\_mS./ZM7a(3SckEfUa-<]s$tOV:md&)V**jEVMw,\p/OrăU">)7v2w8I<k/w4krXp_rEZC)++-Y&97kE>'<S?qf,Q9.aq<h_jaiQD-):6Kp:uZ/ăU"+6*yO_?t2%>Hg4R1=6U^oCMv,mqW;M&OUNA^UAVR3yeg%M&,gXAt<]]QDiaj)onăU"9PJE>a<iR'o&pgyZi'=.Yo3hUq44w%4l(%m+UgN'L7cY^WoeZ5)#B>J;QoA1t-\ăU"[MzAI6Po1OGG-MLTRg\+[V'&(6>v]mVqHBs]in)4(5;2&ai7%qPjn5hSNc%79dhăU".4WVhN#Eqd#ao>RJS5(0e9/=k[,T\k>:FtisL(S$/3B$$F*I..4dGqC;6\k3cEdăU">$da<t[H&eKTQw9Tz*7uqx7W]MVaL+k[1-1UY8zj__,$/1)SCRQ87Jn%9-4%:m$ăU"0'e*GE2me<;a:v6u^f2q8xqglD?NYtyjfDf<SBs>N9%cuW+og%ZP/xr2M6wds8HăU"S*Eh^C5h,v)$2<+NEW>8uXgx9g#B=gW^Aj(h&u8cp+s7/\]q1\qo+_9x3;Pae]HăU"41mg>=aXM>q.CnYXQ=e7Q%L?trv+tMV8YC#ACv(+oYe:2MkUUY)GMc+9Xo^$mWTăU"O<uo^EnQ10NMFK.c)Vj\.*ce[lS<=6lXg,Q:+\lH%J+G\X\tnwMbRpBTVAk:,3WăU"IIs]g3W4g55+-Hm??^N'\udU3nf%4B(ZG&W2]=q0(#:BZY.:KBEq'9VtD#31YLPăU"[wH'lVU;5=UsnmbNZfm$;ZzY0V+?qHwYTvkz(QV':0n6P?CYP_J+jE(?9:A%u>NăU"yJZ/]f.33Rbr;dmb-r,l>bu*/<ENQ($u#$HOVj21N\&h2hWO.o,8N>_^-*n+ShwăU"tAkou>0#)wKAT+$WrM*Q57qIATVzQnl6Cq/9m;V/B.'E4pdm5J&5C+v_GC9?0x]ăU"rsJ^2%xT]C0t5dBmZ?-x6-eZahayDiXI31U[K48Edt7Q?g72&,k)Pn4gp>r(P:qăU"0B2D^J-.FE9Z8CMi[X]U1US-[S/9#IV+Wv2vU3QI>'aKKaNdzuAX7eT:\#=ZFmNăU":PPYQ]xG/<_z*$Hh%Kn8hc8f6]GnbYmZ*q)g7RC(opOO#W)6qj'I3ljxtQSmYEIăU"UkEID<u7g.k3QUUqdyMoXB*:hkZCbm-PzIQ&EeaRq3T&#7cw^+E=<epKDkKjb6(ăU"m#:Fi82CM?Tri4-=KoCFOXk:+QHf0.GylAgnNlV[q+g%Z*CaMqwC+Xj(?oZnaZ7ăU"]c,iudGaZ4B&F8/3:5h'7>,X'n5X?u2gYhgGBE7sRMLvL3NG$'9ds&cue^F;ZdCăU"l6HMW8pQ?xH\Io)'g*)r_j:E[Ky(&oJ'd+WVDL=o[2.u%7.H<9;P&wcTe7DnA0BăU"a\YH/3TyMS4?5+R8U>gO^hHp[Llw#+V_,bn5_M[0[i-(25fbYa/*J,LK#9D^+%?ăU"9'xHHF\[RZYsBMEK2($9_FZoB_7r&YF:k;1^lIg)Gg[tod&Fr5MVxOFn;NO6.^hăU"jV#_GlDMU5fr$tN9CB$+'h\6>jG&u82_J'ffr5(Tz(o#XsNeL\z>.jE5jrNv^a5ăU"XLq2Uh^ZXL(GR7j6%/qKInr*#9HSf)0fC0+b,S6,O0L'cS[jR'^y[jND'k=ZLx2ăU"#5OQG\T;([wkEn5)/.k55)h1%2\LM/*g5>MR)<.^H341xou=xog-fvW*%<J1esCăU"cBAtD,?-LCtqeZAA',eHt$9ZAYqEn<#jQh*5#RAnMSYbfNQj>UxD4l%A1>:Aa2<ăU"ik<1evKC#dHm*RC$:VF(VAv.CTBO?&&PF9mV^NdExP\GxVu#N;d*5(QCeMk,4s*ăU"Zk>8Qm05IH:x1AiL.i8*.8CN-JsfSTLjob2\yDMUUZu(bo7+^SWE7.#<6?4S+G]ăU"]]aAkQ+;F2R,RGFnbo,L$4s1N^#RaVHg5+eDwO/V,HQ:BVLeA>pzF,1MfEWifxBăU"39/uSBL^K13a6uiiP0eF0.9Q]EX1f/=sWCT;pehc^i%.oKkM%+dTpQH+7qcmi3BăU"*&bq9DlZZ$b/Q[px_*M$*LZXTMqEhPrEhq]+zlvO$)cgM;FjcR=4X(Cq[Pg>s,OăU"MUSqXgKOVYgb/bQva:UlL^9j2Zpw0f8Kj[xU'Hk7'$2fe.TJC_x+,V]NNa&2'VvăU"dF5?cQY1M2HT]l=M$K=k\um6'BXWS0D%2(QuU,B'w-yFm*ZyAe'q[7yZ/ld;kOfăU"Yi4f-/-Y7NP\01u($<&XiTJFdRDzEqWFneKEbN4dU8R):+Kxbi]eaqEATXs$ZfNăU"bN+4Nx2dg6Q?1asU5tKkp:mkl0Mi]XlkqX4Y^$98[ffwL0,/lW?n$UB.peKP=R$ăU"G\$$7DaPC,*I64T?FN_dn'(D>xO])d%R>g2T-zn)HGh0b3t*>C:67ZV<:];IqHWăU"W]f+Dq/wvRcGY?kAcg?44AvPq#Y,FY0g[Myd1oA'N8]O>f1*c9]YO^Q\Ym?u86uăU"(Cl?F+V,JYt6uLi,;ZP1Q],\ClJ*ox)W8oVD.NL<thW)F\DmMIr5x^slh&q'1H#ăU")NcDOuT4mmiYR>k=pb#kompb#e5\^M?LurY+Bc4-fw7uG[DZTw<^6?yOlvFhg>2ăU"Ex[wXHCtG,NIl'%XkeJsbR]*e$GWPNb'dSI\DVFCvNsl#x7=8ep1fjoZjcS6lt+ăU"qp$ruoSU25iYQ-_A'D/bj3Y*>r$H7Mh18852no,/^OCRn=?lNQ],_1VYc[J[+v8ăU"fJ-a-BD?c)HAFm,G]%hGMh0M/YcTC,S:]Xh:9ke)ZIdmhdMFWR'o\ekniC.UnZ.ăU"xP^P\A[[R%JFWq]oNbI67G-'TFo'NYEZcrYVOoKk07m(#Ie]%DxKN^U.gwj]cp#ăU"A6urSO*KkFaX;Q)N&/*w7*+S;&=&e$MU+_KP)tT,-aSIhCTCu1WqT'-s1:IN(P0ăU"=_)_cu11Ka>3l#9R1&Fm+B?sV;W9S<mo)X7CIi4)iP3%E3CSn.>^is1iZf%Kfs]ăU"5-<;1sp%J_za9Sa6huKYlZk=kTY6,A/RT#S#Ino<ij%N1w:gtD(:d=6sAj/'m8făU"4g7h3AYR=LB4rARi7P>i5kBn\Jg3AF856-Ra71o-hdGQ6(8wABW+P=Xm%&2t3t6ăU"9%g=;I)Z;C0;j90le'17EM>0:0#M4gk3Q&mcYV(11)h5E\sbIl31gYh?%3uEC?%ăU"k1Ey?Qe=glF?,X2qE=EEG1m\y%\H%X&QUH5mx_dGBE\IGe:.&[Q$RmAe48]vR]XăU"J^[Xp_[-o>%C',YL5?oAg?r%o:&l37Cac,[1KBJx'*<5'X5)8_sAF<Es3]Cd]ILăU"e0/EmOvx:fj*9hh66*t*wRg0jY\?'P79^X%Om7k[XAzi(xq.Y?V?J)ddXWY+ztgăU"J9,pqeGQn>]4Bqx&L(*4(Mevxn75U)rgkd<h'p4-=BQOK8H+V$+^%CcfNnIQ=HFăU"MeP),q)wG,x$U:37<(LuEKOB[JtFiPvdvYtuq*XamTlltUVxpbKmK1N8*]YOO:-ăU"?<TaHW_+x8-'n+=bv%FD^40UFf$SFw+SI8PYJU_#ZxIgDcdfCx8wxlc+-S]X6Z=ăU"b1_OWfm+(hp/W=KV+7q$ww*qq>VS/.ffd6-KG4iwC9[pOs%qDw424j;n-LEC>r'ăU";=IaVWNHl7I/bG%;Chw'7AqEi#^cxCCZoynexV#t'h3p,ppE=ih)B:FqS4=bJggăU"eru:m+b*x]cNPV&gL-RwpXAx]7a3PuEKEIQnZkE=D1dn2rGuF0>8Webq*>j;*[păU"KDYJ&-NvF3rpSWZ?<wENt<ETU2rW.B=7m6+;I,JASLQg1tRZtOY\-W3RDUov6^căU")B1\2EgfpN)HjX1Jp\>C2eCKZm*RUi.3W,s-5FKGX?'IlVNJ$<(gsAh,tDOm[^<ăU"HF':=nLM28[:uIL:\FKm;,mT1uBjKxAI%BZd3Ji]l<pf;;fG1s[nCmj'jFl)rg$ăU"EeGFjhL_iUBavj/C$VJL+xdYCjm]CH/7:C^VKPaGN?,-jex:ehzdHmZ7gmVIscKăU"*A/8uSm_'rvF4=7NECZ>3;X0_'Nrw[:Y]E]<aGo:D2g%kw8W+v5n[XwtE(HZWh,ăU"66bNSDB#16p&0kk3mFB3%&h:ITr_YQ:_oU2b-AMJZ.J.6uW-FoEg_gsrQrN1,I0ăU"FrYyUgNr&=c_ZtK8PsIPE5bnz4d>CoG8Nz+h,%1;O=2hoIB$-wr;ocp6aAFkbawăU"Yf60dSt[;CE3]dGTRLEKkJ7,++CZA(1uC<d[V$1Oy:4Qr0UucTvdXcUJJfR?[3;ăU"EzWF02upIVy=O#qI+oQt<pSV*on;qkk-7iY8I.IfPAqw1vQ76R-eEm/j;sjJ42UăU"&-f_$q18*VDXIg%^VruVRsI>i*[(WnNa$oJc/(D/.6BZ^oTM$PRFATDdGZJdt+wăU"Nm-g([A;.[)B2/G?DLu'[B.%)%GH7>i9vG>.-WaF\%oQu2fb_Y0Xn$+JV+qI_10ăU"Q>_-];WNQwq=ad%lUb>iBRom$5Eh<G6%;vE3[>3MWQF9[S$C)L;),:q<8hj)6-uăU"jCd/g-7+dGH*YdqN]6v*(4AMMHS3.-^L[r2o48x&Rt$AiuS&.8o'UWSl:Xh/f8lăU"Y[sRj#IA24hejP&J.,xo*(xOe.k3An6q?:(o$:N0XD#D^LZxq_sniRRD#w11on6ăU"HD%UXy]UDJres1i9FL'9SAsOV;h*Cs5Mb]+H?l.%E\4zf+Sh,i+qJH,Cmna<=)8ăU"uE?=3dFPJd80YqsbfYHCw%U1:z224+*F>[D:nTt%$+hoQrU?U;)/;Zd6NRQ&0\eăU"C,C\7QpJD>-QgiJ&#-.b9M&Gkc6rSW]jP)wcV;kA*cYHdj[8A_-?p#F.:DRG]:8ăU"I=MPdW0L4s[V=$)I'%(gFEU71gL'jC\,dkAS[E'Nr^chq/$psW,qS/$&GaLi:8[ăU"S-.T5#r']%t(%5P[-Ui,\g%\bp9uKYPR1ZtPO5i.(Pc(LWi\z)-z8l(MwF1\#b0ăU"ABQbI2NPo[P6N*ih-M%4Q9ODKl>+kkhkFMC%3s_nE)c'P3eT(3q.V(=,Z:aDv>aăU"1f#T^eB04yPk53LBoXBcR\-O5+4jBAP6qbT=$-$SgURgKV.b\P<[hbRFOAi<uRwăU"_s$Nm41X=ZmlDcfn0f)r**s4ZPkkPVC?wvJ'SU=[HUsMg-h;KZ5#W>CJ2hz1R=RăU"CU6JBl\0ra1l>h]6:QGUOx6oIJ5qq>[F[N_g&p:)');8/,ftZNv?j#XVZG92f.uăU"hu2#O;j.AL1zwlLa<ywO%1u9qkkD>$QUn\*h_K)pBve%i^S4v:UV3v7FO_Yd)s[ăU"L7G$fFH_Nz#ZG/LJ70-+nJl#v4GEo)S$aWAgjWs&SMvNu])w(Ys[F.Vbn0[RR5EăU"+A\Bn9t\=XAHq_JY;gK&s;[2%HnSbe-)Hb[,7hn1/6RhEIAX$mso$MUH-eJ)0v:ăU"\<,PtYC)%t&)SkygZG5Tk8AlKJqTf\9lxO8)lG=:IN91*.tO)w=:\uQ8rDb9N]MăU"7$AfsqrP+KoWMJ?qx-Eciz^tv9JNJpi46JJEiLpo9ma?NXVUR?W$^x,lK3t#qLeăU"B;$JVw=U^.QWAl9-9EGo5T>lQ+cncU$rJWlEWkc58:*wHM6K#kN-c-?vJKML:z4ăU"r_3i_*liW7OYz%Gk/t5y%mFB8,mQgS7\7nyE_q8yE=8VtGaQ)oUZv/Wk)v_O&=NăU"vT\iDstfV_eChMHM9k\dsWXI#xj*aF6dnm9o)];k37_n)oSW.%2lgqncHG42lswăU"3Fibr%B8>BV97Xl5bkH6PbC)3<-s-bBK7Nf7stDki2C%G)KLqrb>,_MuMJ;=gOgăU"'OMArttif$eC4n.)V;\bcnaVr7>-vJrmO>v8t.vO0oPhD]eGe/d)mO]/\WMWw2>ăU"%+XGivs$SdLPdS1>puz*[(K^t<0%q+z;k<,K?5#/RjpkN8i?ga$CBK+1xwUXnO*ăU"Cbf,ug+5AiaYpuI.MG>AVVRpl:)mSF9(3B*j=Ae,6+Zf^-4Dbc9EPiebsf#+s&XăU"^y^7nGZMhXa6B?3\QD^upE#Pv#V<s&2g)]FR+nPwmLLY7NtL8UM/^lQV=6fPGt+ăU"_Xq^e0=L/%.t?I:<Gs36]2qEX^TsGv9v4sH2h)-cAzPlDR-m2w9D6B.^Lhci2'FăU"Dr_:qut^?J5q<>Umxsa.ENEaN4BgE+zLY?eZjrU0lCKrZ>e3*HOgno?[)s3=ltBăU"D\^C_Wu\l8d#_:Df>FyJ0mqnVsTt_e;fl7gOKJZ*Wux%>6'/j%/*2atM,9$&Z#HăU"-5<;.x)qP?qsa5H%<b0'ft+3efSsCWQ7%V97\6%yw]MGI2fW8Riuo3L'mdnwkqDăU"^fKhf>5e:EMrwrAEZ#R\\oa.a<Kw$kWqSe?<Bw^KFMJ8#jr8.U=C:A;QoC,^:j$ăU"b[']6'K=?[tC+)Y0;<e9jk91SG?Nh+Bu=<Zt\B;9YoaKO7*^iKPz^CbRXIp>aa,ăU"I$Mdl5d*QTOsXw+6_*FwVQ/nxdKr;k/lgavhNH*8n(3#S7%<[x[3;j>1?Mkg2XrăU"Tf0=&l_o-)QQvN?]BSECi(c(.;.Mi;&>UxI:1?xdagh+rmxFAeeq<q2v<FZ?\t]ăU"c.uLv].?En(=n'k%o<L9]KInp(dv?#f>?h=<'1nJ:3J#tkDpcZ;lb/1tDKSi4a1ăU"4SNOv:TXQ&EMR[g;L.,\1HsG;D_\udZIg-.e4bgCUemNl?c5bePjUem/x+Or:>1ăU"LoG0RHc'Z]+Ce)bVU7B]lv:8^8X\'E\&dkNh&<<.r.k[Og9^+j'APCJB#pP?08[ăU"%4$oL]pMf-m<.-VwfQS?mj9v[Qr'#C1ule'XVT)ZmANa+*;Y+]f3QKVt#Q+jpSZăU"d*%tN-&LmeIt*dbn;1*2m=4fM/o:.s4%'vHWSjbOWvFJA:7%#Dh9ABdtCxveCH=ăU">eDuz9&qOOOouY;BWlpqJ.dbqxW;DxH>uhp#LlAnp0u;hieNA>g02#^saZkMJ%%ăU"/_H(Mf45DZrmn&Y)==ZEmJs.f3S7ghIsGsuuO1=)qA&:D29]F*txD7bcoH*n[PGăU"cFoKdh1IdMZm(rSDLwt$<(ZmzK*CqK:QjP/^.p0BEQ4Jlrv:73=mU=^$vD6FUO%ăU"YU;\wA17c0D_dI,:DI>-c*Ef+uV;i:nm#snE2GYq6SCHr:S(Hvjuk=7B:1A9a'/ăU"oii)F>RFaIIGr%^Jqn7o#(1j&N3vzcRVxT&,RL>3FtDy?*P=f1rK\:UYi##-9^[ăU"v96rVRUWIsK;q9#=KULyr>9qTbfQi)Ec8P/J]++h#Qwmcu*F]R10KS:mrUCQ:m>ăU"kAZ<U_C?N<m+/T.E]d)-Y6P.mIj1(a7_[H=$^A)#vb=1kcaKBDpT;NF>j0pU>0kăU"[agqU=AkF]1o\+wj2NAsexB_I.%hYG2hk_h]<Z>p\Z,fTO6T1gW6K6Z:).?&5BLăU"pDfGb,FF24fdtwa4]N?%q1U-06iMYef)sZ>jf(gwDy1vu9MGVfrS\/2Z(ql%T:1ăU";LQTQ75ToK\#cN_LK81PTxHLtKZMxd,\5-Y:Q[Q8ZMF?hI8.m=kO#c]a7.cMVQZăU"E6#c-4>Uq_:jT690OQ1$4Kp_no^5zB'l*X*G^,vb-rs]Vf]#RmAWcov6\j*E/ITăU"uJObv)a[VrTHt&Hayk3M0R-9WE6[[mt2OC2RV.UM7'g.6OQ+\0yn6X6.?-tJDxLăEND SUBăSUB V2ăU"/iDtZTR_946xVDE;qa$w-c.-Xh+L84VU4nFmz>1E)b1eI-0%T$&E(kxr5WBg6_jăU":T]*tR7^8Ah#b1FHZ+vGU1:yQDUP6YsXG>ce/-^IKifa19pqU]V:>P^]q22_9(-ăU";\-BY9\F$nqwmpOIs:m7>I_T:0TBSDh?9vNtqW>S:e%fES%8yEGtmQuMB4Rg4%băU"fHj_V;>-1EpNWhDG14Jnrfq\<q)?i#T6n.5zNMO=ou9TUHE<f+)RC=k\9WR7e'lăU"28&Nm]<#XidRE10h[ukO4pPPKNx])W'sfQI*IH9SeRF-WNSA3DQFaq=/p&4C3''ăU"CY3t9i-JD$=8mts]U;7*9P_oj'wsol4ECS%tX.1qN-9k&a2LY:8bShZFT&FIh#6ăU"_ZI9P1N?lX]B1^b\>A0QP-hFU\V/TrrjG,Q.sbX5se2QA>:pGf6[3pjr#YNgvQfăU"(N:5#D_huY+4fgCOApwXO;Jk2vD&F[:qIfkA+Q3,mM5(LagNkJ%Xg*$\ji7S+^)ăU"UWq)+;'6s+)OI,7#asj6]ETJFCQ\uVDOhE__7cqR]BivH1CjY(pT#m3aLnlqL<văU",*lIVDOKI8]d#_<ceCD$<peFqkLJospn2)xYe;omY?p&mj*;)S(y_G5e\Z5uFs$ăU"rGtvd3M(YzM8q;EehX'li]kpB5'#O8rhiG_K:Vz>sD(I5bM%slkIfri*BcIyUCeăU"\w(go8[$o'lNkAOp]FP)r0]>mPf34eH*#MnwJmNM\>[uqE[7&_fU4Bh?:HHiBXRăU"AE4l$?12Cf($cqNDjciNNLg%jJWz\qvjt>$[$R,[wG?%'Q60=C#N#rY9jmE+eWlăU"mBVif:*2k])&#K?v:wcB?q<RpmMA9-m)d&Cau;NL';.XB[)qnI&,UAPn];W1gK6ăU"K+9k4[vE(?kNFA=,s'u6:IBb.<Yo;:m;;h[+rTuHB(xZ'a>H&O1tRgg%IT?8]a&ăU"eW0bv8IfSvZhUGLeXXGi\l9$+<'xM\Kg<>Y9U2CFGCAuWNb.gTWbxWQKo*QBMBmăU"zKj&v]w+e+Ob$Z,tsNWb1bTG^jZ^NSh]btU6m'a&*33rX9yMAHc:u&I\cLCLDfpăU"Fs3rc#6Dw#2S?FR#Ht,Q,W:)#BNCV]8d&#^JEP**s*3Q8fYvqE:Oa6+QZya4rkLăU"%SlLtzXrqpWtb'0RH10ChrO'x.06<1_aMwi$tD6h32_?W,ZggIBYpdKGcwNw?HuăU"$J\n$73u6t$cvmw3f7(bea?BSnfK=V=)?HbF=buahj('.AIncsc+UHU-3%W0?HJăU"ruWW2VP^WPk6Fn4)A+LYUBZ*V-0W7gjF6\i+kZi;^Im6$E.o97ScO:On19WJZ;năU"$>X=Q;.Xsxt=m:gZjY3.ApS;3Wb'FTOBu<6AuNr>t1$Jsv$eGZLTQ#TZ&qXe,n9ăU"f6V_px?3CtWdEqZP=Z+/a_$$1rodLR#yhOX$xa[hC/oTcah+k1&MPzffXc97d#qăU"Lb'9HuE,(-HqMQFvKvWCpt]xS)V.jBPE*gA?'lKHRA=<EBs%E7qKsfXy%4990XZăU"$+$mT?Jxb7*xhr.;AoMR]SS]U6:kJUks9'qSp%P-sE>\gls(&dlKOIeOs9Vd7$<ăU"b5fK,Yegg^nR?BZNAm>:u0Kl1$?;S:S6B;WRz)ZtJj.=E\j+I9h;EOZ<eL'j&CJăU"+dWP=^auj$S_LX2Api<<eG1Ub5.4pnE<,oFSe,kFjR5'A;Sk90AB/Gvr/7LCNieăU"4_YP7$aiAI$D;]\l4U#%C4vQE4Gi1-b>H5KDtc,3Ut'yh#v1Bl=Vqtk.ZIxQ&0[ăU"ylXY,5F2(Q-%<.AN>g%_c%23:4X)1q\.O<##;OB&lCZz$.[cfq7HihradqO[MG&ăU"pvKtkU2D/*TM$b#<gMs9WJFMP#J/s)]En5Z8keCRhHGfk:Ox)R+WOQJj\g]:q$OăU"ZiS:[.ki(\['%,RN?l/B[2$u?o6Ei8+Hj=G^ej.a5*9MPt08F;2Mz1<;obQ\DOLăU"H0iX30XGwQ*7(*JQPf%Aa-TYRD_#;d2<2f[[NIF>]80493q..N?ql4mgaFEhW:CăU"FC>6A/^eV5WGMg;n8N6E(a_lE=TL]P*9Dz*[1zlT5ocEI7<mAL[O:r*[1zlf5ogăU"^b'PZ4>w-(uEIkc^]xy81Sq<uJ7xb4lcH06U[pW;n1ffu/STWk;+$9Fa4#aov$=ăU"Nq,+mxuE/a$cYIoAQcSWegt0?C/hAfxN$#u..UOAbB-[u1*Q/s'n(c;A0ks6S*tăU"/taO>*atx?cneF:Xld\^]VuE)iGSzBh6%WpN/rUB4b1qlb;U7/Z:gkE6gJ5YUyWăU"vGLY'kx]:(o>T?]e$W*;Y-d97rE3F6I8.iCJ3Zb0(G&ISF/)ONa01a%iY0:\1GPăU"-^b)Hj,EKfnx*kH#47.'p77a'&nN=Y_(%IiDA1AZ1EY?NI)TZuDaA\'(gnHTxKtăU":+vmxv<IGxt1jtLMsO(v9,d72tV^jPM9ioXm$wey?)fso:RBecFYs7L&VsaX_];ăU">d0JKj9vS>mj3E^AcA*uXAQPMsjWm:P*:4l9/w/d8gHA\SC^b(QmlJL$^AA\SZxăU"J7fxy2/NXk3(0bP9N.31&DHWm0%0\l:]e7;^$aoRQ72pXKYn%OLIT'b+P>y-,u2ăU"V8Mxo+0OxQbOS4jNQaI-Z.p0?hJ0<bTjVBz5=RGu_p8Ihvw_CA)H)cLb)KhqLOGăU"-U%GWX8pU*J>h\hQiP<tRO0%>F8_.&4=,vI8Z;pW;N60D]n#qMIa:V8gbbgQ9OPăU"%0l29j\TFS<k9xU7t1PD2*iaVU9rRSJ9Quj$lunq?aWuX41)c4$(TG%>UXKl/6,ăU"j12N:5\=.d6;+7C/^/JA_mWjCYHT<8sQU/9:4y>lL1I$7XfJ>Am8cAi7[v_QfS(ăU"05.G6^HxZhL?ZDB?g(>2s6Q%]Ibxz87/tK[tXg;5dnm9eTry=tZRAI1CXJHbk?năU"0jU66Xlu1-#&U#MQDQPrGx>CAKN\;l/%4^)(xZ0A&X4n4&5O<aW&f/a:*6K>heuăU"=d*34v97Mh<wTQRT5vGB^+xe7%'8;qZDqAh:w-j5PsRCDtd^a8%8+F5>VAhO<6;ăU"-b[Qko?'J>&X>Fr9B\ni38K60q2%g;2fxqhP[8LHB*8uxdQI*'D$m)Lbn(yNn=;ăU"CrM4j2u8%%rvT&A?FW:JOjn.[Obk2T0da8WytS7:N$*=V#ZLK+//I1+f3WsvdVPăU"t'D*,DRyEkH;+Z_&qsOF)EBI+A*3mW2&4[k2kjF#,>n_XV.Pt==5nfeXa_wZZ,căU"lcKroQKHucnpp2XEFg]-go[mmB7I;85b.&MjzC(hLv:>8ln(C:VqK0x>OrlbO[HăU"-LRKb86a;+zNvNPqS5hXTI;L&W-'FT,q[aTF76KkQ>AN6g-g)cW0,fLkVW;'9IEăU"%*<v&_J<M<,XwdBM]%jA)#Y=5&\+Rw/5yXfR_<]?,,OaS,Akq0m;M/(C%=aD.j6ăU"cH^4$DCd\MO+H8vgq^j^rfk((yl8f;5MCH$xwMFq?4b;^Hsh0r>)DYVqwfJ]Hw[ăU"C=1nA3MwS'PSrjSjj,1g*CrZ=lN(Voa:2L?pEUn?V/7pFVNF0AA-w^6Kj6[>j=căU"n:QpWk&9-W#6L=[FG_<MahkJk,N:m+[?LKnnr^N1YbQ7l4kXVbX53C[Bblv)(lTăU"BOCa+nvZYqb4As]r?N1tWo[6M;_/0:7.>L5,QTy2E%PLDZHt-&0TLJ[0XuBh3juăU"kEH-HiV&%ll?E)AV<']qfl2oA\7tbk^X<3gQ8;tZlJX]OiJ\0xhmm0;/2?x%Uq[ăU"[10#$NaToPWicAG#T[)',*x&N.6w46<6$V?+WbT\W77N_Trj]9bmCteV7Lf.LD)ăU"tf*X:Z/r=s9ezD-0:[I<(B71kORdqNab1GaR9RQnXDQd$OuEWvRw^_8^4]WR+nxăU"73Zi<8S(x]dyl<HjsFtS-_XQGGWmdH,LK#n'UMONRZoxd^cBx8xsUOiDyV&G2w#ăU"n<u%DG>xbXS)%/>='B\gtgA;.:Sg#Hrv2DeV26$**_c\s>vt7-WBlEQ[nn,r*fmăU"QW\'Z>E9,v#<hnUkgh,f[_4+(9Hj(Gg5i>2lMuz*gCssQp%$+2,)AU9Jpw)P,OLăU"++%h(u$O.'.x$=uv4n.r,'XtzKv75lb]7lS<q*a8;5'*u$5[I3O+&pwrmDO,u9EăU".kOeB^GfxhC/a%J$3WJL.;xYAD3a['$sHgAZ16.:DhFXcAXsXt>$CeApJA)/kaJăU"hV&cEfYW+0l[^jV</nheHk9+*-ES-uPh[eZkI)vjfx]88o>)ugb6e)fkqEX'o?DăU"ko&NYF_N9=c^r5U%UW/k_9^C6KVa9[XNYZ.+wap:&.vs1\$mvpN3ewrGsVXO>R_ăU"hl)tb7$-'JxRTLpK?%BLM'ZbVnR/t/c'RyoycHLs.k6[=eM[k9\P+DxN#=1dD[QăU"i8A=8tT>OnX/e71]03r'Jh%MmKY4GrKjBAN8k,dVllaslW%ISON%ZOgsS%)L'l^ăU"YkT7gFXA4b9vM*Dk4or;SMyR^=8o\Y>Va(XV%CGM6MR^+6tJ3db)e,D'Z4&3N6RăU"iXk&I1=Q%Nf=/#\V,Z.ahpmuIp.JFuwPY*pPKd)k.;7Cq^b;\AJB5'CWXE=UgqgăU"eUl_g+xkj8LER0P5ebji)DFeac]ff^U6Y9F-#^OcbR]OiJxF'u%o^NFuRwzZ3?QăU"Z+2_>Lj%.fu=m;GIT>ObgZ-vXp2B(V%Vd27j)chz3>.Cdf3XD4HonO/x3hTwI[FăU"W0m\IzQ:omhDR%&7sR>6[$Z_dwlvKbj8$*UV0,1;#dr%I[p$35o,sXT;1qihFYJăU"0^;$s+XeUH84DAo-]*bJ<0a[Q*vR5_$_sxHD%-w8cbpMc/%Ix4NsDxL=fqc3(S:ăU"T#=b)^YEX(R8\n+<\YUo^4'#7T74Gf,gF*GI?f]1&uW_FijoXbWb'%hwGphYs%KăU"2YhCVLZp*AF#>5bv;Glg*Jg8l5V4-5_9mWR3L1%'Hw_h#:_/c/pT-5^7U[tT)(ZăU"1u1&o?(Yz78)DwT(,>'b#pa(I^DLI6n&0=#WejgLj_X;z]rjN317(4gc1O&h],năU"-SpfYVQ6sI7L==xS6XB3.JrW'gg=4G#:Idr5?7p+J]U)nKkSY)(u4kWu4msx1h3ăU"ToLazFDWjttZNv?VZ,;5_$3]\s7sPHJ:d15I8qK;&5xXpuf(b;i7;6>eUYNKON+ăU"OM3xRkSYX.\dMGisfMmuq)fdW.bRq;43?JR<q+G_dwTetCrcS>w.Cy_xSq7=ThPăU"Yes)CRfe5dxv5Lc9v/r&U\][#yHYl;Sao_MeDg[nVO+=cukYbAt-tneM']qh8YXăU"wbFv>b7QnwarmQx)k73T8SkAMqPNvw>I,YmZ%9wxQtL99g7(%44LA'>4r;f#I^2ăU"e<0(W0H8A-&w<:qdEU$5YSEU%VZDcv^#3TC98J>cT71jfi,P)Lo1z]7dhRN7GXxăU"g/ZU;EW<aag*i.-]q8AjOtYdH6[*yvA-PdRM&c8?K%mUhVY/S;DZjs93VsNz*<2ăU"jaakgp%Xi5aGbbBSWWLK,g*WHObcBb4];A\tUJ+fwm&=99\u1GYmmbbY4mUHr9$ăU"HYtY$aXCibYa&(hWepeai4WmWxH:NSQ<5qkI:Fjp=%m7&;avclND+JYJ)jSku#xăU"g'<O,wQ3=>#XT[/37FCZNFO'o's6mkEBi;OK3w?.Fue#=7UEa^\7L#i4P[RPPcXăU"*(ooOnpq'bbPrpSOJl26XC%3-cMCLm*p:L6N_S3XfPw]wN7ZZOEl6KY4)VpuUHKăU"cn.tCp7&UN=$id21K+^-U4UGDnBMWwmG]]TTnkk%fv?.kh4&Psah#eF_dVTd?0eăU"d+Ds/J&YR_7gPTkXVY$n_g0U69e?K/7#2D&78<nV;N)f?=%E4VXHOE._2ChBDm%ăU"'boe6cvF'McHTneApHSfx;NssbwB<O)luV0[<prkL6KpO^liM*2s,nr6wxV?'cdăU"SZd8RIpzN$D-sM:^-<?_##rCjPpGyO.HqwY*h(p$HF?jvWel^3_GwJq\/G[0x)xăU"/FqE=2iD,s^Dj>xg8>pH#G*%H'=tfI](Kd2rd=asvoldH[rbp?7%$AY&^5qY&^lăU"qc0sj=Hkm$7^D9+2X%brr11CZAK.kpa9']:ZfkZQBRz51J>XSq<*sx#7.gI_Cm=ăU"zyh%^=6OUiuH#fK*RGeX+mZ0MO[Jrlxq)oWSjeTyz5Vmfu$2mb3^]_HSGf[gv2*ăU"]N\I/(<,Zn7xkX#hi79E[o&nZ?p+Zqh3C?-lI1WF0K\k4aBhb]=iBHf\USRJP5<ăU"3URvbZIyGDQ%cn'wIXYZjSqiw<cNHEeWI7o/,I[eI^ri\rLa1U4A+1^lZL+)QbIăU"dW'u?^Bu&yw#F;fyi?EDhrhsKB_gjiS)m?8qHmCod&X[.Epm_U42(p4ifoAn*NtăU"7;pVnABnUjk1qeZq[OXoc&DvLbE%vX6*teXh;*RJEtU-^]hoXq-q\PY&#wd1BKPăU"BPMa)HB\fv.t)'-NLD;YfSEo2d+<1:*_ng-Nj^;cy'0v,>cc78fst>HU.Z5F$?0ăU".s02Zh[mK60XEkQ)>xF<Sf6QbOd4f-OiO8mj'[4jI>q2a?,[D3kdK?OPrNx_zMoăU"cPypDvpdCkl\D=9wW+(%?^)n8nrWnFTmpdE,2=T>0#M31X:eMx(f6)T00XnjIu:ăU"[lki?l>q0$LSad+q687bJJs/.EM*mN^Iv1?TFCb9.#A,.WiAWY*u>m-mqo^]yECăU"O#vPbdi$xP#GQz)AObwP-\Uv1ki]?;$IoD-\9+zFp$F2mZ_]qaYq>8pIXOI8hayăU"p+J+qvuqiQs.'wZzu6+/H*ETpqdT1Vl_BeUT&a9=CpTVNbCLrt?sZ)Do2oKU:[eăU"u>voIjw944nx7ZR[;NW&U[SBkpo<xpwyvMS;YNI4&2+Xf1D>U*>Isd7c0fPNj&#ăU"33TvU8-$+vD,,mdoge)Ume/V.;:,X+]SzIXUfiRO\'F,vmisQ>Q#\P][fm_scC4ăU"P:-s,vmGqP6x1kF$Mqdm5j>7G1vP+Yx$N>53iFBih4za'eg6X\kMSt:ljM_3_C8ăU",TUwHnkQc<tdV*S6VstJ$F)ZfSsJF)&_0x<T4I;+f=Xj]G>xFbdA8X.lU9X[qzVăU"gAA67b>SY;W1[:awjHq,^sT.<_;XwG+BcB_zWkpx.WQ.ou\XiJhd0kD5p4CI_YRăU"5-iPp4U1-B4SfUMC&yyR-7CqEiWAwqaN87ZliUHWQPYS1kjy/Q*hkJ'?X[XVmBhăU"7U#fA$%zsBN%Nhw[mi.xS?F\vK0Yel(f:&M'WGV6Si#4SqT95%BcS_?n96j)APqăU"oXSSulC[gh&oCqC5/C*Cw8D=,JQzpQqB2&C8Ys8qD=r]/3+i)]baA*V[([D-/J;ăU"j8)RiBH]pB4o?$D;2$JYJ\Gze3aTSbeQQyeJn]I_DVbb+<HRRUAwD:]*R&5$*u7ăU"dAB)1JD6na'C(g3yNpEmcwgt6WaYUuRn/,daQWCzD6sktrJPMwMN9$BF]klFE8'ăU"-n[=]oX>k)PcF,A7F<M%O9P^$'\Oh]5#FTojYRoFCRo:6ot_-jtmFg&2V+I93TBăU"6$5&7%_B1:NhE&1NrFTx.;eMu;ZOF5?1]f,H$L#a0EPBfgPER$p;'v>WMS1d1/4ăU"W?^,;JWgSfgH2ovefCGFHF%AV.-=L-Lw?02qsA/'bcINKwWbN$-Z-c%nm.5KP<0ăU"J)RGnhWXd/Xl%Z,N3Q&2K+A1)tdfJkWVBRO'<$?17yr6*&FQ6oFt/G=jfB;D1rWăU"ittAS1vt[D.gSLMT?j3%Y8Ip#E#dHo9T'74vPmowb0J1w'mqT)LjSiB#rkfE<46ăU"7LB.)Nm0>21hv\#nNk>^rQR0?Frrs?tu[PJ1lx<SjD5r..2OE)Ks2P\7bH-LV(>ăU"5&AhOi#0^ShA3_iu]-#D<b*5/8)&Z]HBI/1&%vIo=JZ%D,fojlvbW,T6s[tn2>năU"cU,qkJ^nc(5u4K%zPa3JD=FlvNjbga4rl=iuXe]p^X34t=M0aBa>VMv1CnCNsHJăU"OXVv9hCnWx+#acZbrtie>.6tIc=2xoCvk$4V>5$YfJKzOJ7bC&J,_<iYz3ec/FlăU"D6oe9vQ\,)p/OUD&u*b9ITLQAY*Q\a\_2?y799#26E_L^/fB?^Et)z4J971<Kb/ăU"tU+Y)=8w0u3s.PillE0Z\q'C(OCDihF5(ML_X(C#7W7-+NP4djZw9BpuFQ&Sy:măU">/wm$$-+Y<7cjXokbPX^l<9)2,gyTCflC4?GL$]vria5,$KT/%;<E=O6q-[Wn1LăU"'4KnM_/]av3w6UPccqFddh,kaPV3]H,Pc_/r29psD):C+/JrGi0#oMd\I=2QE5yăU"SC8-Y=vLb+J7zruVjoN[>iSIuNApEQ%+E;0JtoxIMI%yg+;q08Smz'Kk[hDxSu#ăU"DgkT3mdqE/nJ6oiX2&oup<1RtnE=(#TsfkxPH)c2P?p*2Mo$J[*v0=i4=JUB,\jăU"=#W8QuI[mL1Zxxep[9j;wvC9YL?\A[j4kY+2?D.bK2aj#ADk9Ohe2_&]4HrMtAlăU"=IHLjH+VkoO&&PRT;6XPPdRTd=[P[rBRpZjYdFTj2/xJ-W)*4yxpV99r$R1D&EBăU"^z:>YC&ch:<tP>KO7q7/N*6T&=S6uF6h1o1wG+b[r:%*ON?t(K1lzBn14;sWGveăU"LSU;RTOTfeB$GD\q/Hx(3b5KV,:m>Tk4l-%7?*[^kzKcf7%;j&O0?o]8]CH+Xq7ăU"r$&Lbkf4]UDB?/H3E2T)\tC5V1,8+&3I(O[dUs,Qdj[Q%ZJ\0Ft+lUe_'%expC6ăU"K=yT:9kV^>SZJhCY/goa06?1O2qu*eHiS:k/jN-*Rf]&mF)*4^R9V<0JA^L3qn4ăU"WNSmWG.C-^*Gv00%GHkcb+^G=dNhB5>]=#W;RG/h\3:7?j.HVqSqxxFx=ELrT+'ăU"d,E0SHo15^CKT*w/K4ElO]nQlZN(Ri]uM]kHaj>^Ba%&wuB<2*91YB_dnnP+HvFăU"h?(XXe95Mp9\/I'PxMo_.s2/:S>2wp8HOetL[0ncA-mKyMc>PiQXsbLSp]lV)Z4ăU"UH*F4%?4+'(+6BmGK41nsqGptM\^9lt$rBmP1t926_PtXTtE8baL%)Elon5H(JTăU"7/fihnlED%jOUaXv8wT)KB^xP,DJsW5a:.XCj2PsuWa;YXq;p<^d(y4BYC*4%>XăU"35O=k7)oSoPsCmKCtF0&-^'>9P%kP[%BNi,wIc2?e.-uJ?deBnaI%*<;A/hu(R?ăU"-SgiBUoJ.YEcK9/haiI21tpI:1IQ2P7+r=9.:Z%K1hHD:1IEL0Up$RZVM53017yăU"I2-</D9P5#krC?Q-1#.^MgPeKV1]aalL,tlt^5MH&Nup&%'9%9%%%%-4%TY[#P&ăU"9o,Jb%%+%w'%%%.%%%%%%%%%%%E%%%%%%%%%k%wfhy%Snht%up&'%9%9%%%%-%'ăU"CrTP)Y?K/%h%%%%s%%%%-%%%%%%%%%&%E%%%%5&%%%kw%fhyS%whup%&'9%%9%%ăU"%#-%AH%^PX(0eD9g%%%Dp%&%1%%%%%%%%%&%%E%%%&H&%%%kwfh.yfMV%Sgfx%uăU"p*+%%%%%%(%(%&v%%%%2i%%%%%ăEND SUBăV2ăCLOSE:IF S=42AND B&=17610THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\17610,219);:END SUBă'>>> Page 1 of FRACTALU.ZIP ends here. Last page. TCHK:42ăRichard Kelly                  Graphics Tutor                 newson@37.com                  11-01-01 (  :  )       QB, Qbasic, PDS        439  23614    Texture.bas 'Tested to run in QB and FirstBASIC.  It *should* run in PowerBASIC, too.ă'Written by Richard Kelly - Newson@37.comă'This is Public Domain.ă'Pre-release V0.89.  Released on 12/13/2001ă'Category: Graphicsăă'This is basically an unfinished tutorial of how to make your graphics lookă'more professional.  There are probably going to be five chapters in all *if*ă'I ever finish the thing.ăă'I have no idea whether this tutorial is any good, so please let me know.ăă'Please also let me know if there are any bugs in the code.  There are no bugsă'I know of in this program, aside from *very* sloppy, redundant coding on myă'part.  :-)ăă'I've only sent it to three people so far (the second person by accident).ăă'This was originally intended for a programmer who makes games for an 8-bită'computer nicknamed the "CoCo 3".  He wanted to see graphics for this 8-bită'machine that were better than his.  Who is this person?  Well, his identityă'is for *him* to reveal to the public, not me.  :-)ăă'Note to users:  You can jump from one chapter to the next by pressing itsă'number.  For example, press [2] to jump to Chapter Two.  There are onlyă'three chapters right now.ăăStart:ăRANDOMIZE TIMER: DIM L$(91): SCREEN 9, 0, 0, 0: COLOR 7, 0: T = 0: L$(0) = "BR0"ăăLoop1:ăT = T + 1: READ L$(T): IF L$(T) <> "END" THEN GOTO Loop1ăGOTO Chap1ăăMessage:ăHON = 0: FOR T = 1 TO LEN(A$): A = ASC(MID$(A$, T, 1)): A = A - 32: IF CSCR = 1 THEN CSCR = 0: CLS : Y = 0: X = 3ăIF MID$(A$, T, 1) = "[" THEN HON = 1ăIF HON THEN LINE (X - 1, Y - 1)-(X + 10, Y + 14), 7, BF: DRAW "BM" + STR$(X) + "," + STR$(Y) + ";C0;" + L$(A) ELSE DRAW "BM" + STR$(X) + "," + STR$(Y) + ";C7;" + L$(A)ăX = X + 12: IF X > 628 THEN X = 3: Y = Y + 18ăIF MID$(A$, T, 1) = "]" THEN HON = 0ăNEXT: RETURNăăKRout:ăA$ = "Press [Esc] to end or any other key to continue.": Y = 335: GOSUB CenterăKLOOP:ăA$ = INKEY$: IF A$ = "" THEN GOTO KLOOP ELSE CSCR = 1: KA$ = A$: RETURNăăCenter:ăX = 322: A = LEN(A$): A = A / 2: A = A * 12: X = X - A: IF CSCR = 1 THEN Y = 0: CLSăFOR T = 1 TO LEN(A$): A = ASC(MID$(A$, T, 1)): A = A - 32ăIF MID$(A$, T, 1) = "[" THEN HON = 1ăIF HON THEN LINE (X - 1, Y - 1)-(X + 10, Y + 14), 7, BF: DRAW "BM" + STR$(X) + "," + STR$(Y) + ";C0;" + L$(A) ELSE DRAW "BM" + STR$(X) + "," + STR$(Y) + ";C7;" + L$(A)ăX = X + 12: IF X > 628 THEN X = 3: Y = Y + 18ăIF MID$(A$, T, 1) = "]" THEN HON = 0ăNEXT: CSCR = 0: RETURNăăChap1:ăA$ = "Welcome to Texture Tutor!": DRAW "C7": GOSUB CenterăX = 3: Y = 36: A$ = "     This program will teach you how to improve the  texture of the graphics you design.  ": GOSUB MessageăA$ = "I took several  sets of professionally designed graphics to examine  carefully and ... through ": GOSUB MessageăA$ = "trial and error, eventuallyfigured out some of the ways of how the professionalsmade their graphics ": GOSUB MessageăA$ = "look as good as they did.": GOSUB Message: X = 3ăY = Y + 36: A$ = "The tutorial will be separated into three ^chapters^.References will be made to a number of PC ": GOSUB MessageăA$ = "games.  Allgames are property of their respected publishers.    Also, this ^tutorial^ has no warranty of any kind,   ": GOSUB MessageăA$ = "and is hereby released to the Public Domain.  This isversion 0.89.": GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "Chapter 1": GOSUB CenterăX = 3: Y = 36: A$ = "     Let's say you have this friend named ^Juan      Delson^ who's a graphics professional.  He knows all the little tricks we'll discuss in this tutorial.": GOSUB MessageăY = Y + 36: X = 3: A$ = "     Your first problem is smoothing the ^jagged     edges^ of diagonal lines.  Observe:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLS : COLOR 7: X = 320: FOR Y = 160 TO 190 STEP 2: LINE (X, Y)-(330, Y + 1), 7, B: X = X - 1: NEXTăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     Juan Delson claims, ^Hey, I can fix that.  No   problem.^": GOSUB MessageăX = 3: Y = Y + 18: A$ = "     You walk out of the room saying something like, ^Yeah, right.  Whatever.^": GOSUB MessageăX = 3: Y = Y + 36: A$ = "     Less than a minute later, you come back in the  room.  Juan's gone, but he left you with something onthe screen that caught your attention.": GOSUB MessageăSCREEN 9, 0, 1, 0: X = 319: FOR Y = 161 TO 191 STEP 2: PSET (X, Y), 8: X = X - 1: NEXTăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     How'd he do that?  You tell a graphics utility  to zoom in on the pixels.  Here's what you           discovered:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLS : X = 300: FOR T = 75 TO 275 STEP 20: LINE (X, T)-(X + 8, T + 8), 8, BF: FOR XT = X TO 320 STEP 10ăLINE (XT + 10, T - 10)-(XT + 18, T - 2), 7, BF: LINE (XT + 10, T)-(XT + 18, T + 8), 7, BFăNEXT: X = X - 10: NEXT: SCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     Well ... YOU didn't add those little dark gray  dots!  You add these dots to another line which bendsevery FOUR pixels, like so:": GOSUB MessageăSCREEN 9, 0, 1, 0: X = 320: CLS : FOR Y = 111 TO 241 STEP 4: LINE (X, Y)-(330, Y + 3), 7, BF: X = X - 1: PSET (X, Y + 3), 8: NEXTăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     Oops.  That doesn't quite work.  Juan!!!": GOSUB MessageăSCREEN 9, 0, 1, 0: X = 320: FOR Y = 110 TO 240 STEP 4: X = X - 1: PSET (X, Y + 3), 8: NEXTăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     He says you needed TWO dark gray pixels added,  not one.  Like this:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLS : X = 300: FOR T = 75 TO 275 STEP 40: LINE (X, T + 20)-(X + 8, T + 28), 8, BF: LINE (X, T + 10)-(X + 8, T + 18), 8, BF: FOR XT = X TO 320 STEP 10ăLINE (XT + 10, T - 10)-(XT + 18, T - 2), 7, BF: LINE (XT + 10, T)-(XT + 18, T + 8), 7, BF: LINE (XT + 10, T + 10)-(XT + 18, T + 18), 7, BF: LINE (XT + 10, T + 20)-(XT + 18, T + 28), 7, BFăNEXT: X = X - 10: NEXT: SCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     The ^dot amount^ will vary depending on how manypixels are drawn straight before the next ^bend^, he says.": GOSUB MessageăY = Y + 36: X = 3: A$ = "     Now you ask him, ^Okay, how do you figure out   the number of dark gray pixels, then?^  He jots down this equation:": GOSUB MessageăY = Y + 36: X = 3: A$ = "^X^ is number of pixels before the next bend.": GOSUB Message: X = 3ăY = Y + 36: A$ = "Divide X by two                                      Add 0.5 to X": GOSUB MessageăY = Y + 18: X = 3: A$ = "Make X an integer (example is 6.5 equals 6).": GOSUB Message: GOSUB KRoutăA$ = "     Juan continues by saying, ^Of course, when you  make graphics, you'll deal with more than just black and white images.  Since the background is black and ": GOSUB MessageăA$ = "the image light gray, I colored the dots dark gray   because that was the shade of color in between the   two.  So, if it was a red object on a white          ": GOSUB MessageăA$ = "background, you'd use a light red for the dot color. If your graphics mode doesn't support the color      you're wanting, a shade of gray might do the trick.  ": GOSUB MessageăA$ = "Adrian Carmack used this little 'gray dot trick' withsome images in Wolfenstein 3-D.^": GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăChap2:ăA$ = "Chapter 2": GOSUB CenterăX = 3: Y = 36: A$ = "     You've drawn this box, but you need to color it now.  Right now, it looks like this:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLSăLINE (310, 165)-(329, 179), 7, B: LINE (307, 162)-(332, 182), 7, BăLINE (308, 163)-(309, 164), 7: LINE (330, 164)-(331, 163), 7: LINE (309, 180)-(308, 181), 7: LINE (330, 180)-(331, 181), 7ăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     You first try filling it in with a lighter      color, but it doesn't quite look right:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLSăLINE (310, 165)-(329, 179), 8, B: LINE (307, 162)-(332, 182), 8, B: PAINT (308, 163), 7, 8: LINE (311, 166)-(328, 178), 7, BFăLINE (308, 163)-(309, 164), 8: LINE (330, 164)-(331, 163), 8: LINE (309, 180)-(308, 181), 8: LINE (330, 180)-(331, 181), 8ăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     Filling it in with a darker color doesn't seem  to work either:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLSăLINE (310, 165)-(329, 179), 15, B: LINE (307, 162)-(332, 182), 15, B: PAINT (308, 163), 8, 15: LINE (311, 166)-(328, 178), 8, BFăLINE (310, 165)-(329, 179), 7, B: LINE (307, 162)-(332, 182), 7, BăLINE (308, 163)-(309, 164), 7: LINE (330, 164)-(331, 163), 7: LINE (309, 180)-(308, 181), 7: LINE (330, 180)-(331, 181), 7ăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     You say to Juan, ^This is driving me nuts, man. Take a look at that.  I can't even make a simple box": GOSUB Message: X = 3: Y = Y + 18ăA$ = "look professional.  Instead, it looks like something out of a coloring book.  It's ticking me off.^": GOSUB Message: X = 3: Y = Y + 16ăA$ = "     ^Okay,^ he says. ^I can handle it.  Do you mind if I erase the lines in the process?^": GOSUB Message: X = 3: Y = Y + 16ăA$ = "     ^Yes, fine!  I just need a break from it, okay? I need half an hour of rest and half a bag of        chocolate chips.^": GOSUB Message: X = 3: Y = Y + 16ăA$ = "     After you've ... ahem ... simmered down, you    come back in the room and see the fix:": GOSUB MessageăSCREEN 9, 0, 1, 0: CLSăA = 307: B = 162: C = 332: D = 182ăFOR T = 1 TO 3: LINE (A, B)-(C, D), 15, B: LINE (A + 1, B + 1)-(C, D), 8, B: A = A + 1: B = B + 1: C = C - 1: D = D - 1: NEXTăLINE (A, B)-(C, D), 7, BFăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "     Juan then says, ^I shade the areas according to the area of the picture that the source of light is": GOSUB Message: X = 3: Y = Y + 16ăA$ = "coming from.  I prefer having the source of light    come from the Top Left of the picture.  The part of": GOSUB Message: X = 3: Y = Y + 16ăA$ = "the object that's pointed directly at the source of  light is shaded the brightest, which is the box's top": GOSUB MessageăA$ = "left areas.  The part of the object shaded the       darkest is always pointed directly AWAY from the": GOSUB Message: X = 3: Y = Y + 16ăA$ = "light source.  In this case, it was the bottom right areas of the box that were pointed most indirectly": GOSUB Message: X = 3: Y = Y + 16ăA$ = "from the source of light.  Take a look at it again:^": GOSUB Message: GOSUB KRout: CLSăSCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăChap3:ăA$ = "Chapter 3": GOSUB CenterăX = 3: Y = 36: A$ = "     You've enlarged the box, and given it a little  more color.  Now you want to give the box a ^rough^  texture.  Here's what it looks like now:": GOSUB MessageăăSCREEN 9, 0, 1, 0: CLSăA = 287: B = 152: C = 352: D = 212ăFOR T = 0 TO 4: LINE (A, B)-(C, D), 11, B: LINE (A + 1, B + 1)-(C, D), 9, B: A = A + 1: B = B + 1: C = C - 1: D = D - 1: NEXTăLINE (A, B)-(C, D), 7, BFăSCREEN 9, 0, 0, 0: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăCLS : SCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "You try adding dots to it.": A = 287 + 5: B = 152 + 5: C = 352 - 5: D = 212 - 5: E = C - A: F = D - B: X = 3: Y = 0ăSCREEN 9, 0, 1, 0: FOR G = A + 2 TO C - 1 STEP 3: FOR H = B + 2 TO D - 1 STEP 3: PSET (G, H), 15: NEXT H, GăSCREEN 9, 0, 0, 0: GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăCLS : SCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "That doesn't quite do the trick.  What about changingthe color?": A = 287 + 5: B = 152 + 5: C = 352 - 5: D = 212 - 5: E = C - A: F = D - B: X = 3: Y = 0ăSCREEN 9, 0, 1, 0: FOR G = A + 2 TO C - 1 STEP 3: FOR H = B + 2 TO D - 1 STEP 3: PSET (G, H), 8: NEXT H, GăSCREEN 9, 0, 0, 0: GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăCLS : SCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "Suppose we had both colors of dots and put them      closer together ...": A = 287 + 5: B = 152 + 5: C = 352 - 5: D = 212 - 5: E = C - A: F = D - B: X = 3: Y = 0ăSCREEN 9, 0, 1, 0: LINE (A, B)-(C, D), 7, BF: FOR G = A TO C STEP 2: FOR H = B TO D STEP 2: PSET (G, H), 8: PSET (G + 1, H + 1), 15: NEXT H, GăSCREEN 9, 0, 0, 0: GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăCLS : SCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "Dang it, the pros always make it look so easy.  I'd  like to see Juan solve THIS problem.": A = 287 + 5: B = 152 + 5: C = 352 - 5: D = 212 - 5: E = C - A: F = D - B: X = 3: Y = 0ăSCREEN 9, 0, 1, 0: LINE (A, B)-(C, D), 7, BF: FOR T = 1 TO 50: G = INT(RND * (E - 6)) + A: H = INT(RND * (F - 6)) + B: I = 8: IF RND < .5 THEN I = 15ăLINE (G, H)-(G + 1, H + 1), I, B: NEXT TăFOR G = A + 1 TO C - 1: FOR H = B + 1 TO D - 1: I = INT(RND * 5): IF I > 1 THEN I = 7ăIF I = 0 THEN I = 8 ELSE IF I = 1 THEN I = 15ăIF I = 8 OR I = 15 THEN PSET (G, H), IăNEXT H, GăSCREEN 9, 0, 0, 0: GOSUB Message: GOSUB KRoutăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăCLS : SCREEN 9, 0, 1, 1: CSCR = 0: GOSUB KRout: SCREEN 9, 0, 0, 0: COLOR 7: X = 3: Y = 0ăIF KA$ = "1" THEN GOTO Chap1ăIF KA$ = "2" THEN GOTO Chap2ăIF KA$ = "3" THEN GOTO Chap3ăIF KA$ = CHR$(27) THEN SCREEN 0, 0, 0, 0: COLOR 7, 0: END: RUNăăA$ = "Juan says, ^Let's say that the color of the middle ofthe box is called the ^Base Color^.  Now let's say": Y = 0: X = 3: GOSUB Message: Y = Y + 18: X = 3ăA$ = "^Dot 1^ is a little bit lighter than the Base Color, and ^Dot 2^ is a little bit darker.  Remember, DON'T": GOSUB Message: Y = Y + 18: X = 3ăA$ = "follow a pattern when placing the dots, just put the dots in random places, using the colors Dot 1 and 2.": GOSUB Message: Y = Y + 18: X = 3ăA$ = "Also, precede the dots with randomly placed 2x2 boxesin the ^Dot 1^ or ^Dot 2^ colors.": GOSUB Message: CSCR = 0: GOSUB KRoutăăă300 DATA"BR2R5F1L7G1R9D1L9D1R9G1L7D1R7G1L5D1R5G1L3;BD3;R3D1L3"ă310 DATA"BR0"ă320 DATA"BD4;R9D1L9;BD3;R9D1L9R2D2U9R1D9;BR3;U9R1D9"ă330 DATA"BR0"ă340 DATA"BR0"ă350 DATA"BR0"ă360 DATA"BR4;R3D1L3D1R3D1L3D1R2L1D1L2D1L1"ă370 DATA"BR6;G2D9F2R3U1L3U1L1U9R1U1R3U1L3"ă380 DATA"D1R3D1R1D9L1D1L3D1R3E2U9H2L2"ă390 DATA"BR0"ă400 DATA"BD6;R4U4R1D4R4D1L4D4L1U4L4"ă410 DATA"BD13BR5;U1L1D2L2"ă420 DATA"BD6BR1;R7D1L7"ă430 DATA"BD12BR4;D1R1U1"ă440 DATA"BR0"ă450 DATA"BR2;G2D9F2R5E2U9H2L5D1L1D1D9R1D1R5U1R1U9L1U1L5D1"ă460 DATA"BR5;D12R4D1L9U1R4U12G2R1D1L2"ă470 DATA"BD2;D1R1U2F1U2R5F2D3G7R7D1L9U1R1U1R1U1R1U1R1U1R1U1R1U1R1U1R1U3L1U1L4"ă480 DATA"BD2;D1R1U2F1U2R5F2D3G1D1F1D3G2L5H2U1R1D1R1D1R1R4U1R1U3L1U1L4U1R4U1R1U3L1U1L4"ă490 DATA"BR1;D2G1D4R6D6R1U6R2U1L2U6L1D6L5U3E1U2"ă500 DATA"R9D1L8D5R6F2D3G2L5H2U1R1D1R1D1R5U1R1U3L1U1L7U6"ă510 DATA"BR2;G2D9F2R5E2U3H2L5D1R5D1R1D3L1D1L5U1L1U9R1U1R4F2R1U1L1U1L1U1L4"ă520 DATA"R9D4G8D1L1U2R1U1R1U1R1U1R1U1R1U1R1U1R1U1R1U3L8"ă530 DATA"BD2;D3F1D1G1D3F2R5E2U3H1U1E1U3H2L5G1D4R1D3L1D3R1D1R5U1R1U3L1U1L4U1R4U1R1U3L1U1L5D1"ă540 DATA"BR2;R5F2D9G2L5H2U1R1D1R1D1R5U1R1U4L6H2U3E1R6D1R1D4L6U1L1U3R1"ă550 DATA"BD3BR4;R1D1L1;BD5;R1D1L1"ă560 DATA"BD3BR4;R1D1L1;BD5;R1D1L1D1L2"ă570 DATA"BD6;D1F1U3E1D5F1U7D3R6D1L5"ă580 DATA"BD4BR1;R7D1L7;BD3;R7D1L7"ă590 DATA"BD7;NR5;U1R6U3D7E1U5F1D3E1U1"ă600 DATA"BD2D1R1U1R1U1R5D1R1D3L1D1L3D3;BD3;D1R1U1;BU3;U2R2E2U3H2L5G1"ă610 DATA"BD7;D1F1R1G1R2G1D1E2D1G1R1G1E1U1R1U3F1D1U2D1L2R2U1L1R2U1G1U1D1R1U1R1U1L1U1R1U2D1R1U4"ă620 DATA"BD2;ND11;E2R5F2D11L1U6L7D6U11R1U1R5D1R1D4L6"ă630 DATA"D13R7E2U3H1U1E1U3H2L6D12R6U1R1U3L1U1L5U1R5U1R1U3L1U1L5"ă640 DATA"BR2;NR5;G2D9F2R5E2U1L1D1L1D1L5U1L1U9R1U1R5D1R1D1R1U1L1U1"ă650 DATA"D13R7E2U9H2L6D12R6U1R1U9L1U1L5"ă660 DATA"D13R9U1L8U5R4U1L4U5R8U1L8"ă670 DATA"D13R1U6R4U1L4U5R8U1L8"ă680 DATA"BR2;NR5;G2D9F2R5E2U1L1D1L1D1L5U1L1U9R1U1R5D1R1D1R1U1L1U1;BD11;U5L3U1R4D5"ă690 DATA"D13R1U6R7D6R1U13L1D6L7U6"ă700 DATA"R9D1L4D11R4D1L9U1R4U11L4"ă710 DATA"BD10;D1F2R5E2U11L1D11L1D1L5U1L1U2L1"ă720 DATA"D13R1U7F7R1U1L1U1L1U1L1U1L1U1L1U1L1U1R1U1R1U1R1U1R1U1R1U1R1U1L1G7U7"ă730 DATA"D13R9U1L8U12"ă740 DATA"ND13;R1F3R1E3R1D13L1U12D1L1D1L1D1L1D1L1U1L1U1L1U1L1U1D12"ă750 DATA"D13R1U13D2F6D1H5D1F6D2U13R1D13"ă760 DATA"BR2;G2D9F2R5E2U9H2L5D1L1D1D9R1D1R5U1R1U9L1U1L5D1"ă770 DATA"D13R1U6R6E2U3H2L6D6R6U1R1U3L1U1L5"ă780 DATA"BR2;G2D9F2R5E2U9H2L5D1L1D10R1D1R5U1R1U9L1U1L5D1;BD6BR2;R1G1R2G1R2G1R2G1R2G1R1"ă790 DATA"D13R1U6R6E2U3H2L6D6R6U1R1U3L1U1L5;BD6;R2G1R2G1R2G1R2G1R2G1R2D1L1"ă800 DATA"BR2;NR5;G2D3F2R4F2D1G2L3H2L1D1R1D1R1D1R5U1R1U1R1U3L1U1L1U1L5U1L1U3R1U1R4F2R1U1L1U1L1"ă810 DATA"R9D1L4D12L1U12L4"ă820 DATA"D11F2R5E2U11L1D11L1D1L5U1L1U11"ă830 DATA"D9F4R1E4U9L1D9L1D1L1D1L1D1L1U1L1U1L1U1L1U9"ă840 DATA"D13R1E3R1F3R1U13L1D12U1L1U1L1U1L1U1L1D1L1D1L1D1L1D1U12"ă850 DATA"NR1;D1R1D1L1D1R2G1R2G1R2G1R2G1R2G1R2G1R2G1R2G1R1D2L1U1;BL7;D1L1U2R1E1L2E1R2H1R2H1R2H1R2H1R2H1R2H1R2H1R1U2L1D1"ă860 DATA"D5F2R2D6R1U6R2E2U5L1D5L1D1L5U1L1U5"ă870 DATA"R9D1;NL9;L1D1G8D3R9U1L8U1E8U1G8"ă880 DATA"BR0"ă890 DATA"BR0"ă900 DATA"BR0"ă910 DATA"BR1;D3F1U4R1D5;BR3U5R1D4E1U3"ă920 DATA"BR0"ă930 DATA"BR0"ă940 DATA"BD6;ND7;E2R5F2D7L1U4L7D4U7R1U1R5D1R1D4L6"ă950 DATA"BD4;D9R7E2U1H1U1E1U1H2L6D8R6U1R1U1L1U1L5U1R5U1R1U1L1U1L5"ă960 DATA"BD4BR2;NR5;G2D5F2R5E2U1L1D1L1D1L5U1L1U5R1U1R5D1R1D1R1U1L1U1"ă970 DATA"BD4;D9R7E2U5H2L6D8R6U1R1U5L1U1L5"ă980 DATA"BD4;D9R9U1L8U3R4U1L4U3R8U1L8"ă990 DATA"BD4;D9R1U4R4U1L4U3R8U1L8"ă1000 DATA"BD4;BR2;NR5;G2D5F2R5E2U1L1D1L1D1L5U1L1U5R1U1R7L1U1;BD6;U1L3U1R4D2"ă1010 DATA"BD4;D9R1U4R7D4R1U9L1D4L7U4"ă1020 DATA"BD4;R9D1L4D7R4D1L9U1R4U7L4"ă1030 DATA"BD10;D1F2R5E2U7L1D7L1D1L5U1L1U1"ă1040 DATA"BD4;D9R1U5R2F5R1U1L1U1L1U1L1U1L1U1R1U1R1U1R1U1R1U1L1G5L2U5"ă1050 DATA"BD4;D9R9U1L8U8"ă1060 DATA"BD4;ND9;R1F3R1E3R1D9L1U8D1L1D1L1D1L1D1L1U1L1U1L1U1L1U1D8"ă1070 DATA"BD4;D9R1U9F6D1H5D1F6U9R1D9"ă1080 DATA"BD4BR2;G2D5F2R5E2U5H2L5D1L1D1D5R1D1R5U1R1U5L1U1L5D1"ă1090 DATA"BD4;D9R1U4R6E2U1H2L6D4R6U1R1U1L1U1L5"ă1100 DATA"BD4BR2;G2D5F2R5E2U5H2L5D1L1D6R1D1R5U1R1U5L1U1L5D1;BD2BR2;R1G1R2G1R2G1R2G1R2G1R1"ă1110 DATA"BD4;D9R1U4R6E2U1H2L6D4R6U1R1U1L1U1L5;BD4BR2;R2G1R2G1R2G1R2D1L1"ă1120 DATA"BD4BR2;NR6;D1L1D1L1D1R1D1R1D1R5D1R1D1L1D1L7F1R6E2U1H2L5U3R7"ă1130 DATA"BD4;R9D1L4D8L1U8L4"ă1140 DATA"BD4;D7F2R5E2U7L1D7L1D1L5U1L1U7"ă1150 DATA"BD4;D5F4R1E4U5L1D5L1D1L1D1L1D1L1U1L1U1L1U1L1U5"ă1160 DATA"BD4;D9R1E3R1F3R1U9L1D8U1L1U1L1U1L1U1L1D1L1D1L1D1L1D1U8"ă1170 DATA"BD4;NR1;D1R2G1R2G1R2G1R2G1R2G1R2G1R2G1R2G1R1L1U1;BL7;D1L1R1E1L2E1R2H1R2H1R2H1R2H1R2H1R2H1R2H1R1L1D1"ă1180 DATA"BD4;D3F2R2D4R1U4R2E2U3L1D3L1D1L5U1L1U3"ă1190 DATA"BD4;R9D1G7R7D1L9U1E7;NL7;R1G7"ă1200 DATA"END"ăă8999 END: RUNăăGerald L. Wykoff               Relative Value Histogram       wykoff@mbawiz.com              10-01-01 (  :  )       QB, Qbasic, PDS        137  3295     X15val.bas  ' Subject:  Graphic, 15 Components                              Date: 10-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comăDECLARE SUB graph ()ăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ă25ă     REM PROGRAM 8.1ă     REM Graphă     CLSă        SCREEN 9ă        COLOR 14, 1ă        PRINTă        PRINTă        PRINTă        PRINT "                       HISTOGRAM CHART"ă        COLOR 11ă        PRINT "    (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ă        PRINTă        PRINTă        COLOR 15ă        PRINT "                 This Program Draws a Relative Value Histrogram"ă        PRINTă        COLOR 14ă        PRINT "                It will accept data up to 15 values"ă        PRINT "       If you have fewer values, finish the routine with zeroes"ă        PRINTă        PRINT "       Note:  The chart features a relative display of the data"ă        PRINT "       between the lowest and highest value."ă        PRINTă        PRINTă        PRINTă        PRINTă        COLOR 11ă        PRINT "               Tap Any Key to Continue"ă        DO WHILE INKEY$ = ""ă        LOOPă     'ă     ' call subprogramă     'ă     SCREEN 1ă        CALL graphă        LOCATE 22, 10ă        INPUT " (1) Repeat, or (2) Quit "; ask7$ă        IF ask7$ = "1" THEN GOTO 25 ELSE GOTO 1200ă1200ăă        ENDăă     SUB graphă     SCREEN 9ă     ' declare arraysă     'ă        DIM GOODS(15), NORM(15)ă     'ă     ' assign values to the GOODS arrayă     'ă     PRINTă     PRINTă     PRINTă     PRINTă     PRINTă     COLOR 14ă     i = 1ă     FOR NUMBER.OF.ELEMENT = 1 TO 15ă           PRINT iă           INPUT "     Type in the Value "; GOODS(NUMBER.OF.ELEMENT)ă           i = i + 1ă        NEXT NUMBER.OF.ELEMENTă        CLSă        SCREEN 1ă     'ă     ' define the horizontal position of the graphă     'ă        XPOS% = 50ă     LINE (40, 120)-(230, 120), 14ă     ' define the vertical position of the graphă     'ă        YPOS% = 120ă     LINE (40, 25)-(40, 120), 14ă     ' define the color of the graphă     'ă        COL.GRAPH% = 2ă     'ă     ' declare NORMA% - the maximum height of the graphă     'ă        NORMA% = 100ă     'ă     ' select max valueă     'ă        PMAX = GOODS(1)ă        FOR DAY% = 2 TO 15ă           IF GOODS(DAY%) > PMAX THENă              PMAX = GOODS(DAY%)ă           END IFă        NEXT DAY%ă     'ă     ' draw horizontal lineă     'ă        LINE (XPOS%, YPOS%)-(XPOS% + 150, YPOS%), COL.GRAPH%ă     'ă     ' normalise values to 100ă     ' draw graphă     'ă        FOR DAY% = 1 TO 15ă           NORM(DAY%) = GOODS(DAY%) / PMAX * NORMA%ă           ZPOS% = XPOS% + 10 * (DAY% - 1)ă           LINE (ZPOS%, YPOS%)-(ZPOS% + 7, YPOS% - NORM(DAY%)), COL.GRAPH%, BFă        NEXT DAY%ă        LOCATE 17, 7ăPRINT "0.................15"ăLOCATE 3, 3ăPRINT "HI"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăPRINT "   |"ăLOCATE 15, 4ăPRINT "LO"ăă     END SUBăăGerald L. Wykoff               6-Value Relative Graph         wykoff@mbawiz.com              10-01-01 (  :  )       QB, Qbasic, PDS        150  3363     X6val.bas   ' Subject:6-Value Relative Graphic                     Date: 10-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comDECLARE SUB GRAPH ()ăCLSăSCREEN 9ăCOLOR 14, 9ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ă25ă     REM PROGRAM 8.1ă     REM Graphă     CLSă     DIM dd(6)ă     DEFLNG A-Ză     'LOCATE 13, 35ă     SCREEN 9ă     PRINTă     PRINTă     PRINTă     PRINTă     COLOR 14, 1ă     PRINT "                   6-VALUE HISTOGRAM"ă     COLOR 11ă     PRINT "     (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ă     PRINTă     COLOR 14ă     PRINTă     PRINT "           This short utility will accommodate 6 entries"ă     PRINT "           for a quick display of relative values.  Since"ă     PRINT "           the display is relative, it will accept pretty"ă     PRINT "                 much any numbers from high to low."ă     PRINTă     PRINTă     COLOR 15ă     PRINT "                 Tap Any Key to Continue"ă     DO WHILE INKEY$ = ""ă     LOOPă     CLSă     SCREEN 1ă     ' call subprogramă     'ă        CALL GRAPHăLOCATE 21, 3ăINPUT "(1) Repeat, or (2) Quit (1 or 2) "; ask3$ăIF ask3$ = "1" THEN GOTO 25 ELSE GOTO 1200ă1200ăENDăăDEFSNG A-Ză     SUB GRAPHă     'ă     ' declare arraysă     'ă        DIM GOODS(6), NORM(6)ă     'ă     ' assign values to the GOODS arrayă     SCREEN 9ă     PRINTă     PRINTă     PRINTă     PRINTă        i = 1ă        FOR NUMBER.OF.ELEMENT = 1 TO 6                 '15ă           INPUT "                Enter a Value"; GOODS(NUMBER.OF.ELEMENT)   '"TYPE VALUE"ă           i = i + 1ă        NEXT NUMBER.OF.ELEMENTă        SCREEN 1ă        CLSă     'ă     ' define the horizontal position of the graphă     'ă        XPOS% = 100                '50ă     'ă     ' define the vertical position of the graphă     'ă        YPOS% = 120ă     'ă     ' define the color of the graphă     'ă        COL.GRAPH% = 2ă     'ă     ' declare NORMA% - the maximum height of the graphă     'ă        NORMA% = 100ă     'ă     ' select max valueă     'ă        PMAX = GOODS(1)ă        FOR DAY% = 2 TO 6ă           IF GOODS(DAY%) > PMAX THENă              PMAX = GOODS(DAY%)ă           END IFă      NEXT DAY%ă     'ă     ' draw horizontal lineă     LINE (XPOS%, YPOS%)-(XPOS% + 75, YPOS%), COL.GRAPH%     '150ă        'ă                             ' this is the average line, on Y row 120ă        LINE (100, 122)-(175, 122), 11ă        LINE (98, 35)-(98, 122), 11ă     'ă     ' normalise values to 100ă     ' draw graphăă     'ă        FOR DAY% = 1 TO 6ă           NORM(DAY%) = GOODS(DAY%) / PMAX * NORMA%ă           ZPOS% = XPOS% + 10 * (DAY% - 1)ă           LINE (ZPOS%, YPOS%)-(ZPOS% + 7, YPOS% - NORM(DAY%)), COL.GRAPH%, BFă        NEXT DAY%ăLOCATE 3, 10ăPRINT "HI"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "|"ăLOCATE , 10ăPRINT "lO"ăLOCATE 17, 13ăCOLOR 1ăPRINT "1......6"ăă     END SUBăăGerald L. Wykoff               Normal Chart                   wykoff@mbawiz.com              10-01-01 (  :  )       QB, Qbasic, PDS        85   3009     Xcogart.bas ' Subject:                          Date: 10-1-01  ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comCLSăREM            This program draws a normal chart graphic that willăREM         accommodate various numerical entries for display.ăSCREEN 9ăCOLOR 10, 9ăSCREEN 9ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăCLSăPRINTăSCREEN 9ăCOLOR 10, 8ă'ăLINE (175, 290)-(515, 290), 11   ' main horizontal line        color 10ăLINE (175, 290)-(175, 38), 11      ' main vertical line color 10ă   '  x = left to right   y = up and downăCOLOR 15ă'  spaceăLINE (210, 290)-(210, 38), 15    '1ăLINE (245, 290)-(245, 38), 15     '2     vertical lines are 35 separated, tooăLINE (280, 290)-(280, 38), 15       '3ăLINE (315, 290)-(315, 38), 15         '4ăLINE (345, 290)-(345, 38), 15           '5ăLINE (380, 290)-(380, 38), 15             '6ăLINE (415, 290)-(415, 38), 15               '7ăLINE (450, 290)-(450, 38), 15                 '9ăLINE (485, 290)-(485, 38), 15                   '9ăLINE (515, 290)-(515, 38), 15                     '10ă'ăCOLOR 15ăLOCATE 22, 10ăPRINT TAB(23); "0"; TAB(27); "1"; TAB(31); "2"; TAB(35); "3"; TAB(40); "4"; TAB(44); "5"; TAB(49); "6"; TAB(53); "7"; TAB(57); "8"; TAB(61); "9"; TAB(64); "10"ă'LOCATE 21, 19: PRINT "0"ăLOCATE 20, 19: PRINT "1"ăLOCATE 18, 19: PRINT "2"ăLOCATE 16, 19: PRINT "3"ăLOCATE 14, 19: PRINT "4"ăLOCATE 12, 19: PRINT "5"ăLOCATE 10, 19: PRINT "6"ăLOCATE 9, 19: PRINT "7"ăLOCATE 7, 19: PRINT "8"ăLOCATE 5, 19: PRINT "9"ăLOCATE 3, 19: PRINT "10"ăCOLOR 14ăLOCATE 24, 37: PRINT "EAST-WEST (in 00's)"ăLOCATE 11, 4: PRINT "NORTH-"ăLOCATE 12, 4: PRINT "SOUTH"ăLOCATE 13, 4: PRINT "(in 00's)"ă   '                            these are test lines on horizontală'      LINES ARE X,Y    X-LEFT TO RIGHT  Y-TOP TO BOTTOMă'                           y axisăLINE (175, 250)-(515, 250), 15ăLINE (175, 225)-(515, 225), 15ăLINE (175, 200)-(515, 200), 15  'HORIZONTAL LINES HAVE 30 SEPARATIONSăLINE (175, 175)-(515, 175), 15ăLINE (175, 150)-(515, 150), 15  ' THUS ALL NUMBERS ARE TIMES .28ăLINE (175, 125)-(515, 125), 15 ' AND ARE 251 + (X * .28)ăLINE (175, 100)-(515, 100), 15 ' 600      BECAUSE 251 = ZERO (0) BASE LINEăLINE (175, 75)-(515, 75), 15 '700ăLINE (175, 50)-(515, 50), 15   '800ăLINE (175, 25)-(515, 25), 15        '900ăă'init will be : input (251 +  )ă'inititial value line isă'LINE (180, 25)-(500, 25), 10ă' current (NOW) value line is (180,init)-(ăăă'  this bar chart is set up this wayă  '     vertical lines are 24 apart at .24,starting at 180ă  '     horizotal lines are 28 separates at .28, starting at 251ă  '  thus the 100 vallue for vertical lines is .24+ 180ă  '  and the 100 value for horizontal lines is .28 - 251(btoom line)ă  'to position '328" on a horizontal line would be 328*.24 -251ă  COLOR 14ăăGerald L. Wykoff               Ogive Chart                    wykoff@mbawiz.com              10-01-01 (  :  )       QB, Qbasic, PDS        188  5909     Xolgivx.bas ' Subject: Ogive Chart Graphic                              Date: 10-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comDECLARE SUB greenbox ()ăCOMMON SHARED il!, sum, namer$ăCOMMON SHARED vera, ver1, ver2, ver3, ver4, ver5, ver6ăCOMMON SHARED hor1, hor2, hor3, hor4, hor5, hor6ăCLSăSCREEN 12ăCALL greenboxăCOLOR 14ăLOCATE 5, 20: PRINT "THE OGIVE CHART (CUMULATIVE TOTAL DATA)"ăLOCATE 8, 10ăPRINT "This display displays a cumulative or running total for the"ăLOCATE , 10: PRINT "observations that you enter for each event. It best accom-"ăLOCATE , 10: PRINT "modates 2 digit numbers (BEFORE any decimal)."ăPRINTăPRINTăLOCATE 20, 15: PRINT "Type in a name/title that will identify"ăLOCATE , 20ăINPUT "this particular chart project "; namer$ă105ăLOCATE 25, 30ăCOLOR 15ăPRINT "To Continue, Tap Any Key"ăDO: LOOP UNTIL INKEY$ <> ""ă'ăCLSăSCREEN 9ăCOLOR 10, 9ăDEFLNG A-ZăLOCATE 3, 15: PRINT "DATA ENTRY FOR GRAPHIC"ăINPUT "         What's the Total Incidents in Item 1"; it1ăINPUT "         What's the Total Incidents in Item 2"; it2ăINPUT "         What's the Total Incidents in Item 3"; it3ăINPUT "         What's the Total Incidents in Item 4"; it4ăINPUT "         What's the Total Incidents in Item 5"; it5ăINPUT "         What's the Total Incidents in Item 6"; it6ăINPUT "         What's the Total Incidents in Item 7"; it7ăINPUT "         What's the Total Incidents in Item 8"; it8ăINPUT "         What's the Total Incidents in Item 9"; it9ăINPUT "         What's the Total Incidents in Item 10"; it10ăINPUT "         What's the Total Incidents in Item 11"; it11ăINPUT "         What's the Total Incidents in Item 12"; it12ă'ă       'specs for the vertical  lines  (lines are X,Y)ăCLSăSCREEN 12ăDEFLNG A-ZăLINE (100, 375)-(475, 375), 5    ' bottom line of graphăLINE (100, 376)-(475, 376), 5ăLINE (100, 75)-(100, 376), 5     'this is vertical line of graphăLINE (101, 75)-(101, 376), 5ă'ăLOCATE 11, 60ăCOLOR 9ăPRINT "CUMULATIVE"ăLOCATE , 60ăPRINT "TRACKING"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White Line"ă'     horizontal line separation is 30ăLINE (100, 345)-(475, 345), 10  ' this is an add-on init.lineăLINE (100, 315)-(475, 315), 10 ' this is an add-on init.lineăLINE (100, 285)-(475, 285), 10  ' this is an add-on init.lineăLINE (100, 255)-(475, 255), 10  ' this is an add-on init.lineăLINE (100, 225)-(475, 225), 10  ' this is an add-on init.lineăLINE (100, 195)-(465, 195), 10  ' this is an add-on init.lineăLINE (100, 165)-(465, 165), 10  ' this is an add-on init.lineăLINE (100, 135)-(475, 135), 10  ' this is an add-on init.lineăLINE (100, 105)-(475, 105), 10  ' this is an add-on init.lineăăăLOCATE 3, 20ăCOLOR 14ăPRINT "CUMULATIVE RUNNING TOTAL "; namer$ăLOCATE 25, 13ăCOLOR 15ăPRINT TAB(13); "0"; TAB(17); "1"; TAB(21); "2"; TAB(24); "3"; TAB(28); "4"; TAB(32); "5"; TAB(36); "6"; TAB(39); "7"; TAB(43); "8"; TAB(46); "9"; TAB(50); "10"; TAB(54); "11"; TAB(58); "12"ă'LOCATE 26, 15ăCOLOR 5ăPRINT "            Cumulative Running Totals"ăLOCATE 24, 8ăCOLOR 14ăPRINT "0"ăLOCATE 22, 8ăPRINT "100"ăLOCATE 20, 8ăPRINT "200"ăLOCATE 18, 8ăPRINT "300"ăLOCATE 16, 8ăPRINT "400"ăLOCATE 14, 8ăPRINT "500"ăLOCATE 13, 8ăPRINT "600"ăLOCATE 11, 8ăPRINT "700"ăLOCATE 9, 8ăPRINT "800"ăLOCATE 7, 8ăPRINT "900"ăLOCATE 5, 8ăPRINT "1000"ăă'                       THIS SETS UP THE VERTICAL LINESăLINE (130, 75)-(130, 375), 10      '1ăLINE (160, 75)-(160, 375), 10       '2ăLINE (190, 75)-(190, 375), 10        '3ăLINE (220, 75)-(220, 375), 10        '4ăLINE (250, 75)-(250, 375), 10          '5ăLINE (280, 75)-(280, 375), 10   '6ăLINE (310, 75)-(310, 375), 10  '7ăLINE (340, 75)-(340, 375), 10   '8      30 separation factorăLINE (370, 75)-(370, 375), 10   '9ăLINE (400, 75)-(400, 375), 10   '10ăLINE (430, 75)-(430, 375), 10   '11ăLINE (460, 75)-(460, 375), 10 '12ă'           this section draws the tracelineăhora = 375ăhor1! = 375 - (it1 * .4)ăhor2! = hor1! - (it2 * .4)ăhor3! = hor2! - (it3 * .4)ăhor4! = hor3! - (it4 * .4)ăhor5! = hor4! - (it5 * .4)ăhor6! = hor5! - (it6 * .4)ăhor7! = hor6! - (it7 * .4)ăhor8! = hor7! - (it8 * .4)ăhor9! = hor8! - (it9 * .4)ăhor10! = hor9! - (it10 * .4)ăhor11! = hor10! - (it11 * .4)ăhor12! = hor11! - (it12 * .4)ă'                    this section sets up the x-position traceăăLINE (100, 375)-(130, hor1!), 15ăLINE (130, hor1!)-(160, hor2!), 15ăLINE (160, hor2!)-(190, hor3!), 15ăLINE (190, hor3!)-(220, hor4!), 15ăLINE (220, hor4!)-(250, hor5!), 15ăLINE (250, hor5!)-(280, hor6!), 15ăLINE (280, hor6!)-(310, hor7!), 15ăLINE (310, hor7!)-(340, hor8!), 15ăLINE (340, hor8!)-(370, hor9!), 15ăLINE (370, hor9!)-(400, hor10!), 15ăLINE (400, hor10!)-(430, hor11!), 15ăLINE (430, hor11!)-(460, hor12!), 15ăăENDăăDEFSNG A-ZăSUB greenboxăSOUND 150, 5ăLINE (10, 15)-(630, 470), 2, BFăLINE (8, 13)-(633, 470), 6, BăLINE (10, 15)-(630, 467), 6, BăLINE (12, 17)-(627, 465), 7, BăăEND SUBăăSUB initialăSCREEN 12ăLOCATE 11, 60ăCOLOR 9ăPRINT "CUMULATIVE"ăLOCATE , 60ăPRINT "TRACKING"ăCOLOR 15ăLOCATE , 60ăPRINT "Shown by"ăLOCATE , 60ăPRINT "White Line"ă'     horizontal line separation is 30ăLINE (100, 345)-(450, 345), 10  ' this is an add-on init.lineăLINE (100, 315)-(450, 315), 10 ' this is an add-on init.lineăLINE (100, 285)-(450, 285), 10  ' this is an add-on init.lineăLINE (100, 255)-(450, 255), 10  ' this is an add-on init.lineăLINE (100, 225)-(450, 225), 10  ' this is an add-on init.lineăLINE (100, 195)-(450, 195), 10  ' this is an add-on init.lineăLINE (100, 165)-(450, 165), 10  ' this is an add-on init.lineăLINE (100, 135)-(450, 135), 10  ' this is an add-on init.lineăLINE (100, 105)-(450, 105), 10  ' this is an add-on init.lineă' in line above, it's important to use only first three digitsăăEND SUBăăGerald L. Wykoff               Paired Variables               wykoff@mbawiz.com              10-01-01 (  :  )       QB, Qbasic, PDS        243  8007     Xpairs.bas  ' Subject: Paired Variables Graphic                              Date: 10-1-01   ă'           Author: Gerald L. Wykoff              Code: QB, QBasică'           Origin:  wykoff@mbawiz.comă25ăDECLARE SUB GRAPH (GOODS(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%)ăREM PROGRAM 8.4ăREM GraphăCOMMON SHARED XVAR$, YVAR$ăCLSăSCREEN 9ăCOLOR 10, 1ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT "                   GRAPH COMPARING PAIRED VARIABLES."ăCOLOR 11ăPRINT "        (c) 2000 Gerald L. Wykoff . . .written for www.mbawiz.com"ăPRINTăPRINTăCOLOR 15ăPRINT "         This visual presents a relative display of the data"ăPRINT "      in paired variables.  For that reason, try to keep the"ăPRINT "      entries disciplined i.e., NUMBERS WITH SAME DIGIT TOTALS"ăPRINT "      IN BOTH LISTS. The graphic does not accept keyboard"ăPRINT "      data entries .. . you can only call up data from a perma-"ăPRINT "      nent Paired Sequential file."ăPRINT "         Because the display is relative, there is no limit on the"ăPRINT "      size of the number - although smaller numbers mean less typing."ăPRINTăPRINTăCOLOR 14ăINPUT "       What is the name/title for the X Variable "; XVAR$ăPRINTăINPUT "       What is the name/title for the Y Variable "; YVAR$ăPRINTă     '   call up an existing statements fileăPRINTăPRINTă200ăINPUT "         What's the name/path of the file you want "; file$ăOPEN file$ FOR INPUT AS #1ă'                               start getting the data converteăcounter = 1ăDO UNTIL EOF(1)ăINPUT #1, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12ăFOR i = 1 TO 1000ă NEXTă counter = counter + 1ăLOOPăCLSăSCREEN 9ăCOLOR 14, 8ăLINE (5, 5)-(630, 5), 12ăLINE -(630, 338), 12ăLINE -(5, 338), 12ăLINE -(5, 5), 12ăLINE (4, 4)-(631, 4), 3ăLINE -(631, 339), 3ăLINE -(4, 339), 3ăLINE -(4, 4), 3ăPRINTăPRINTăPRINT TAB(30); "X", "Y"ăPRINT TAB(30); d1, e1ăPRINT TAB(30); d2, e2ăPRINT TAB(30); d3, e3ăPRINT TAB(30); d4, e4ăPRINT TAB(30); d5, e5ăPRINT TAB(30); d6, e6ăPRINT TAB(30); d7, e7ăPRINT TAB(30); d8, e8ăPRINT TAB(30); d9, e9ăPRINT TAB(30); d10, e10ăPRINT TAB(30); d11, e11ăPRINT TAB(30); d12, e12ăPRINTăPRINTăPRINT "     View the X Variable data above.  Since the graph shows relative"ăINPUT "     data, to maintain consistency, type in the highest value "; nuvalăDIM QUANTITY1(12)ăQUANTITY1(1) = d1ăQUANTITY1(2) = d2ăQUANTITY1(3) = d3ăQUANTITY1(4) = d4ăQUANTITY1(5) = d5ăQUANTITY1(6) = d6ăQUANTITY1(7) = d7ăQUANTITY1(8) = d8ăQUANTITY1(9) = d9ăQUANTITY1(10) = d10ăQUANTITY1(11) = d11ăQUANTITY1(12) = d12ă 'ăDIM QUANTITY2(12)ăQUANTITY2(1) = e1ăQUANTITY2(1) = nuvalăQUANTITY2(2) = e2ăQUANTITY2(3) = e3ăQUANTITY2(4) = e4ăQUANTITY2(5) = e5ăQUANTITY2(6) = e6ăQUANTITY2(7) = e7ăQUANTITY2(8) = e8ăQUANTITY2(9) = e9ăQUANTITY2(10) = e10ăQUANTITY2(11) = e11ăQUANTITY2(12) = e12ă'ă       SCREEN 12ă          CLSă       'ă       ' declare two different arraysă       'ă        ă       'ăă       '   Note:  bottom of top two charts is 145 and disance from 0-10ă               '    is 100 counts....bottom of bottom chart is 310 and distanceă              'is again 100 counts  ....vertical speacing note vipă              ' two different set of dataă              '  this line controls the dark blue bars on #1 & #3ă       DATA quantity1(1), quantity1(2), quantity1(3), quantity1(4), quantity1(5), quantity1(6), quantity1(7), quantity1(8), quantity1(9), quantity1(10), quantity1(11), quantity1(12)ă              ' this data line controls silver bars on the #2 and #3ă       DATA quantity2(1), quantity2(2), quantity2(3), quantity2(4), quantity2(5), quantity2(6), quantity2(7), quantity2(8), quantity2(9), quantity2(10), quantity2(11), quantity2(12)ăă       TIMES% = 12     'was 15ă       LABEL% = 80ă    '  to set color on bars, use last digit in CALL GRAPH commandsă' line sets bottomfor graf #1&bar color last digită          CALL GRAPH(QUANTITY1(), TIMES%, 45, 145, LABEL%, 1)  'was 1, 80, LABEL%, 1ă                      ' this adjusts the graf bars on the 3 chartsă       'ă       ' call subprogram with different parametersă       ' three different graphs will be displayedă       '                'this line sets bottom on graf #2ă          CALL GRAPH(QUANTITY2(), TIMES%, 330, 145, LABEL%, 8)  'was 430, 135 280, 170, LABEL%, 2ă              ' this line sets bar on bottom most graph(bar color last digit)ă          CALL GRAPH(QUANTITY1(), TIMES%, 200, 310, 80, 1)  'was 200, 300, 80, 1ă'  this line sets bars on bottom most graph(bar color is last digit)ă          CALL GRAPH(QUANTITY2(), TIMES%, 200, 310, 80, 8)  'was 200, 300, 80, 2ăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăPRINTăINPUT "   Would you like to (1) Repeat, or (2) Quit (1 or 2) "; ask17$ăIF ask17$ = "1" THEN GOTO 750 ELSE GOTO 1200ă750ăCLOSE #1ăGOTO 25ă1200ăCLOSE #1ăENDăă       SUB GRAPH (GOODS(), DAYS%, XPOS%, YPOS%, NORMA%, COL.GRAPH%)ăă          DIM NORM(DAYS%)ă          PMAX = GOODS(1)ă          FOR NUMBER.OF.ELEMENT = 2 TO DAYS%ă             IF GOODS(NUMBER.OF.ELEMENT) > PMAX THENă                PMAX = GOODS(NUMBER.OF.ELEMENT)ă             END IFă          NEXT NUMBER.OF.ELEMENTă          LINE (XPOS%, YPOS%)-(XPOS% + 150, YPOS%), COL.GRAPH%  'was 187ă          FOR NUMBER.OF.ELEMENT = 1 TO DAYS%ă             NORM(NUMBER.OF.ELEMENT) = GOODS(NUMBER.OF.ELEMENT) / PMAX * NORMA%ă             ZPOS% = XPOS% + 20 * (NUMBER.OF.ELEMENT - 1)ă             LINE (ZPOS%, YPOS%)-(ZPOS% + 10, YPOS% - NORM(NUMBER.OF.ELEMENT)), COL.GRAPH%, BF  'was 7, not 10ă          NEXT NUMBER.OF.ELEMENTă          LOCATE 3, 12ă          COLOR 14ă          PRINT TAB(15); XVAR$; TAB(45); YVAR$ă          LOCATE 14, 15ă          PRINT "COMPARISON BETWEEN X AND Y VARIABLES"ă          COLOR 5ă          LOCATE 11, 6ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12       1 2  3 4 5  6 7  8 9 10 11 12"ă          LOCATE 21, 26ă          PRINT "1  2 3  4 5  6 7  8 9 10 11 12"ă          COLOR 14ă          LOCATE 23, 5ă          PRINT "These three charts offer a relative presentation of the"ă          LOCATE 24, 5ă          PRINT "relationship between the Paired Variables - a view that is"ă          LOCATE 25, 5ă          PRINT "often not evident when looking at strict numbers.  Ignore"ă          LOCATE 26, 5ă          PRINT "column 1 in Charts 2 & 3 (it's the height limiter which assures"ă          LOCATE , 5ă          PRINT "the relative bar height consistency for all three charts."ă         'COLOR 15ă         LINE (42, 50)-(42, 145), 11   'left vertical lineă         LINE (41, 50)-(41, 145), 11                      'line doublesă                  '    bottom most vertical lineă         LINE (42, 145)-(600, 145), 11ă         LINE (42, 146)-(600, 146), 11ă                       'ă         LINE (200, 210)-(200, 310), 11  '  bottom vertical for bottom graphă         LINE (199, 210)-(199, 311), 11    ' doubles bot-bot vertical lineă         'ă         LINE (199, 310)-(450, 310), 11      'bottom horizontal lineă         LINE (199, 311)-(449, 311), 11ă         'ă                        ' places index numbers for top two chartsă         LOCATE 5, 3ă         PRINT "10"ă         LOCATE 6, 4ă         PRINT "|"ă         LOCATE 7, 4ă         PRINT "|"ă         LOCATE 8, 4ă         PRINT "|"ă         LOCATE 9, 4ă         PRINT "|"ă         LOCATE 10, 4ă         PRINT "0"ă         '                  this places index numbers on bottom chartă         LOCATE 15, 23ă         PRINT "10"ă         LOCATE 16, 24ă         PRINT "|"ă         LOCATE 17, 24ă         PRINT "|"ă         LOCATE 18, 24ă         PRINT "|"ă         LOCATE 19, 24ă         PRINT "|"ă         LOCATE 20, 24ă         PRINT "0"ăă       END SUBăăMario LaRosa                   Tile display for Mode 13       CMLAROSA73@aol.com             03-15-02 (  :  )       QB,Qbasic,PDS          431  9123     qput.bas    '''ă' Qput v1.5, a pure QB, (SCREEN 13) graphics routine that replaces PUTă'ă'ă' Brought to you by... MARIO SOFT.ă'ă' (C)opyright 2000ă'ă' Contact me at CMLAROSA73@aol.comă' If you have any questions or comments concerning these routines.ă'ă' THIS PROGRAM MAY BE DISTRIBUTED FREELY AS PUBLIC DOMAIN SOFTWAREă' AS LONG AS ANY PART OF THIS FILE IS NOT ALTERED IN ANY WAY.ă' IF YOU DO WISH TO USE THESE ROUTINES IN YOUR OWN PROGRAMSă' THEN PLEASE GIVE CREDIT TO THE AUTHOR... Mario LaRosa.ă'ă'''ă'$DYNAMICăDEFINT A-Ză'''ăCONST FALSE = 0ăCONST TRUE = NOT FALSEă'''ăCOMMON SHARED minXXwin, minYYwin, maxXXwin, maxYYwină'''ăDECLARE SUB QPUT (TILES(), MASKS(), xx, yy, frame, mode$)ăDECLARE SUB QWIN (minXX, minYY, maxXX, maxYY)ă'ăDECLARE SUB Demo ()ă'ă''' Dimension TIL() array to hold -3- 20*20 tiles...ă'ăDIM SHARED TIL(0 TO 605) AS INTEGERă'ă''' Dimension MSK() array... (only needed if using "MASK-ON" & ă"MASK-OFF")ă'ăDIM SHARED MSK(0 TO UBOUND(TIL)) AS INTEGERă 'ă ''' Set default QWIN (window view) ...ă 'ă QWIN 0, 0, 319, 199ă 'ă ''' Draw and capture -3- 20*20, tiles...ă 'ă SCREEN 13ă 'ă FOR x = 0 TO 40 STEP 20ă  col = col + 1ă  LINE (x, 0)-(x + 19, 19), col, BFă  LINE (x, 0)-(x + 19, 19), 15, Bă  LINE (x + 5, 5)-(x + 14, 14), 0, BFă  GET (x, 0)-(x + 19, 19), TIL(stp)ă  stp = stp + 202ă NEXTă 'ă ''' Execute Demo sub for -3- 20*20 tiles...ă 'ă Demoă '''ă SYSTEMă '''ăăSUB Demoă '''ă ''' DEMO 0ă '''ă DOă  xx = INT(RND(1) * 341 + -20)ă  yy = INT(RND(1) * 221 + -20)ă  frame = INT(RND(1) * 3 + 1)ă  QPUT TIL(), TIL(), xx, yy, frame, "SOLID"ă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 1ă '''ă CLSă DOă  xx = INT(RND(1) * 341 + -20)ă  yy = INT(RND(1) * 221 + -20)ă  frame = INT(RND(1) * 3 + 1)ă  QPUT TIL(), TIL(), xx, yy, frame, "TRANSPARENT"ă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 2ă '''ă DOă  FOR z = 0 TO 19 STEP 1ă   FOR yy = 0 TO 180 STEP 20ă    FOR xx = -20 TO 300 STEP 20ă     QPUT TIL(), TIL(), (xx + z), yy, 3, "SOLID"ă    NEXTă   NEXTă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 3ă '''ă DOă  FOR z = 0 TO 19 STEP 1ă   FOR yy = 0 TO 180 STEP 20ă    FOR xx = -20 TO 300 STEP 20ă     QPUT TIL(), TIL(), (xx + z), yy, 1, "SOLID"ă    NEXTă    IF yy > 89 AND yy < 111 THENă     QPUT TIL(), TIL(), 150, 90, 2, "TRANSPARENT"ă    END IFă   NEXTă   WAIT &H3DA, 8ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 4ă '''ă DOă  FOR z = 0 TO 19 STEP 2ă   FOR yy = 0 TO 180 STEP 20ă    FOR xx = -20 TO 300 STEP 20ă     QPUT TIL(), TIL(), (xx + z), yy, 2, "SOLID"ă    NEXTă    IF yy > 89 AND yy < 111 THENă     QPUT TIL(), TIL(), 150, 90, 1, "TRANSPARENT"ă    END IFă   NEXTă   WAIT &H3DA, 8ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 5ă '''ă QWIN 80, 50, 239, 149ă 'ă DOă  FOR z = 0 TO 19 STEP 1ă   FOR yy = 30 TO 170 STEP 20ă    FOR xx = 60 TO 260 STEP 20ă     QPUT TIL(), TIL(), (xx + z), yy, 1, "SOLID"ă    NEXTă    IF yy > 89 AND yy < 111 THENă     QPUT TIL(), TIL(), 150, 90, 2, "TRANSPARENT"ă    END IFă   NEXTă   WAIT &H3DA, 8ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 6ă '''ă DOă  FOR xx = 60 TO 260ă   QPUT TIL(), MSK(), xx, 90, 3, "MASK-ON"ă   WAIT &H3DA, 8ă   QPUT TIL(), MSK(), xx, 90, 3, "MASK-OFF"ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă 'ă QWIN 0, 0, 319, 199ă '''ă ''' DEMO 7ă '''ă LINE (0, 0)-(319, 200), 2, BFă DOă  FOR xx = -20 TO 320ă   QPUT TIL(), MSK(), xx, 90, 1, "MASK-ON"ă   WAIT &H3DA, 8ă   QPUT TIL(), MSK(), xx, 90, 1, "MASK-OFF"ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 8ă '''ă LINE (0, 0)-(319, 200), 3, BFă DOă  FOR xx = -20 TO 320 STEP 2ă   QPUT TIL(), MSK(), xx, 90, 2, "MASK-ON"ă   WAIT &H3DA, 8ă   QPUT TIL(), MSK(), xx, 90, 2, "MASK-OFF"ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ă ''' DEMO 9ă '''ă LINE (0, 0)-(319, 200), 1, BFă DOă  FOR xx = -20 TO 320 STEP 3ă   QPUT TIL(), MSK(), xx, 90, 3, "MASK-ON"ă   WAIT &H3DA, 8ă   QPUT TIL(), MSK(), xx, 90, 3, "MASK-OFF"ă   IF LEN(INKEY$) THEN EXIT DOă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''''' DEMO Aă '''ă FOR y = 0 TO 199ă  IF y > 99 THENă   C = C + -1ă  ELSEă   C = C + 1ă  END IFă  LINE (0, y)-(319, y), Că NEXTă '''ă DIM xx(1 TO 3)ă DIM yy(1 TO 3)ă DIM XXstp(1 TO 3)ă DIM YYstp(1 TO 3)ă '''ă FOR x = 1 TO 3ă  xx(x) = INT(RND * 320)ă  yy(x) = INT(RND * 200)ă  XXstp(x) = xă  YYstp(x) = xă NEXTă '''ă DOă  '''ă  FOR x = 1 TO 3 STEP 1ă   xx(x) = xx(x) + XXstp(x)ă   yy(x) = yy(x) + YYstp(x)ă   IF xx(x) > 319 OR xx(x) < -19 THEN XXstp(x) = -XXstp(x)ă   IF yy(x) > 199 OR yy(x) < -19 THEN YYstp(x) = -YYstp(x)ă   QPUT TIL(), MSK(), xx(x), yy(x), x, "MASK-ON"ă  NEXTă  '''ă  WAIT &H3DA, 8ă  '''ă  FOR x = 3 TO 1 STEP -1ă   QPUT TIL(), MSK(), xx(x), yy(x), x, "MASK-OFF"ă  NEXTă LOOP UNTIL LEN(INKEY$)ă '''ăEND SUBăăSUB QPUT (TILES(), MASKS(), xx, yy, frame, mode$)ă 'ă ''' Set original TILES() header data to QPUT format...ă 'ă IF frame THENă  'ă  TILEwidth = TILES(0) \ 8ă  TILEheight = TILES(1)ă  TILEpixels = TILEwidth * TILEheightă  TH = TILEheight - 1ă  TW = TILEwidth - 1ă  TF = frame - 1ă  'ă  ''' Calculate TILES() integer & byte offsets.ă  'ă  IF TILEpixels AND &H1 THENă   ToffsBYT = ((4 * frame) + TF) + (TILEpixels * TF)ă   ToffsINT = ((TILEpixels \ 2) + 3) * TFă  ELSEă   ToffsBYT = (4 * frame) + (TILEpixels * TF)ă   ToffsINT = ((TILEpixels \ 2) + 2) * TFă  END IFă  '''ă  'ă  ''' Exit routine if frame is out of range...ă  ''' This is extremely important,ă  ''' to prevent poking into undesired territory!ă  'ă  IF ToffsINT < 0 OR ToffsINT > UBOUND(TILES) THEN EXIT SUBă  'ă  ''' Set initial TILES() coordinates...ă  'ă  xLEFT = xxă  xRIGHT = xx + TWă  yTOP = yyă  yBOTTOM = yy + THă  'ă  ''' Compare TILES() coordinates with QWIN coordinates...ă  ''' If clipping is necessary, then clip accordingly.ă  'ă  IF xLEFT < minXXwin THENă   '''ă   CLIP = TRUEă   sum = minXXwin - xLEFTă   IF sum < 0 THEN sum = -sumă   IF sum > TW THEN EXIT SUBă   '''ă   xLEFT = minXXwină   CLIPoffsL = sumă   CLIPadd = sumă   '''ă  END IFă  '''ă  IF xRIGHT > maxXXwin THENă   '''ă   CLIP = TRUEă   sum = xRIGHT - maxXXwină   IF sum > TW THEN EXIT SUBă   '''ă   xRIGHT = maxXXwină   CLIPadd = sumă   '''ă  END IFă  '''ă  IF yTOP < minYYwin THENă   '''ă   CLIP = TRUEă   sum = minYYwin - yTOPă   IF sum < 0 THEN sum = -sumă   IF sum > TH THEN EXIT SUBă   '''ă   yTOP = minYYwină   CLIPoffsT = sum * TILEwidthă   '''ă  END IFă  '''ă  IF yBOTTOM > maxYYwin THENă   '''ă   CLIP = TRUEă   sum = yBOTTOM - maxYYwină   IF sum > TH THEN EXIT SUBă   '''ă   yBOTTOM = maxYYwină   '''ă  END IFă  'ă  ''' Pre-record TILES() segment...ă  'ă  segTILES = VARSEG(TILES(0))ă  'ă  ''' Assign TILES() PEEK/POKE offset...ă  'ă  t = ToffsBYT + CLIPoffsL + CLIPoffsTă  'ă  ''' Assign (video) PEEK/POKE offset...ă  'ă  segADD = &HA000 + (yTOP * 20)ă  'ă  ''' Blit TILE() as mode$...ă  'ă  SELECT CASE mode$ă  '''ă   CASE "TRANSPARENT"ă   '''ă    FOR y = yTOP TO yBOTTOMă     FOR x = xLEFT TO xRIGHTă      DEF SEG = segTILESă      colour = PEEK(t)ă      IF colour THENă       DEF SEG = segADDă       POKE x, coloură      END IFă      t = t + 1ă     NEXTă     t = t + CLIPaddă     segADD = segADD + 20ă    NEXTă   '''ă   CASE "SOLID"ă   'ă   ''' This routine will use QB's own PUT routine,ă   ''' if no clipping was peformed...ă   ''' (Increases routine speed!)ă   'ă    IF CLIP THENă     FOR y = yTOP TO yBOTTOMă      FOR x = xLEFT TO xRIGHTă       DEF SEG = segTILESă       colour = PEEK(t)ă       DEF SEG = segADDă       POKE x, coloură       t = t + 1ă      NEXTă      t = t + CLIPaddă      segADD = segADD + 20ă     NEXTă    ELSEă     PUT (xx, yy), TILES(ToffsINT), PSETă    END IFă   '''ă   CASE "MASK-ON"ă   '''ă    'ă    ''' This routine will use QB's own GET routine,ă    ''' for capturing the MASK()...ă    ''' (Increases routine speed!)ă    'ă    GET (xLEFT, yTOP)-(xRIGHT, yBOTTOM), MASKS(ToffsINT)ă    'ă    FOR y = yTOP TO yBOTTOMă     FOR x = xLEFT TO xRIGHTă      DEF SEG = segTILESă      colour = PEEK(t)     IF colour THENă       DEF SEG = segADDă       POKE x, coloură      END IFă      t = t + 1ă     NEXTă     t = t + CLIPaddă     segADD = segADD + 20ă    NEXTă   '''ă   CASE "MASK-OFF"ă   '''ă    'ă    ''' This routine will use QB's own PUT routine,ă    ''' to display a captured MASK()...ă    ''' (Increases routine speed!)ă    'ă    PUT (xLEFT, yTOP), MASKS(ToffsINT), PSETă   '''ă  END SELECTă  'ă END IFă '''ăEND SUBăăREM $STATICăSUB QWIN (minXX, minYY, maxXX, maxYY)ă '''ă minXXwin = minXXă minYYwin = minYYă maxXXwin = maxXXă maxYYwin = maxYYă '''ă IF minXXwin < 0 THEN minXXwin = 0ă IF maxXXwin > 319 THEN maxXXwin = 319ă IF minYYwin < 0 THEN minYYwin = 0ă IF maxYYwin > 199 THEN maxYYwin = 199ă '''ăEND SUBăMario LaRosa                   Pixel Plotting for Mode 13     CMLAROSA73@aol.com             03-15-02 (  :  )       QB,Qbasic,PDS          52   1142     qplot.bas   QPLOT is 4 to 6 times faster than PSET, and twice as fast as poke, ăsince itădoesn't use longs&, but uses integers% instead!ăăMarioăă'''ă' Qplot v1.1, a pure QB pixel plotter, (SCREEN 13) that replaces PSETă'ă' Brought to you by... MARIO SOFT.ă'ă' (C)opyright 2000ă'ă' Contact me at CMLAROSA73@aol.comă' If you have any questions or comments concerning these routines.ă'ă' THIS PROGRAM MAY BE DISTRIBUTED FREELY AS PUBLIC DOMAIN SOFTWAREă' AS LONG AS ANY PART OF THIS FILE IS NOT ALTERED IN ANY WAY.ă' IF YOU DO WISH TO USE THESE ROUTINES IN YOUR OWN PROGRAMSă' THEN PLEASE GIVE CREDIT TO THE AUTHOR... Mario LaRosa.ă'ă'''ă'$DYNAMICăDEFINT A-Ză'ăSCREEN 13ă'                         Plot a blue pixel at center of screen.ăx = 159: y = 99: c = 1ă'ăDEF SEG = &HA000 + (y * 20)ăPOKE x, că'ăSLEEPă'ăzzz! = TIMERă'                         Fill the screen with pixels.ăFOR c = 0 TO 255ă FOR y = 0 TO 199ă  DEF SEG = &HA000 + (y * 20)ă  FOR x = 0 TO 319ă   POKE x, că  NEXTă NEXTăNEXTă'ăzzz! = TIMER - zzz!ăLOCATE 1, 1: PRINT zzz!; " Seconds"ăLOCATE 3, 1: PRINT 256 / zzz!; " FPS"ă'ăSLEEPă'ăSYSTEMăMario LaRosa                   Alpha-Blend for Mode 13        CMLAROSA73@aol.com             03-15-02 (  :  )       QB,Qbasic,PDS          263  5029     qblend.bas  '''ă' Qblend v1.1, a pure QB, (SCREEN 13) alpha-blending routine.ă'ă' Brought to you by... MARIO SOFT.ă'ă' (C)opyright 2001ă'ă' Contact me at CMLAROSA73@aol.comă' If you have any questions or comments concerning these routines.ă'ă' THIS PROGRAM MAY BE DISTRIBUTED FREELY AS PUBLIC DOMAIN SOFTWAREă' AS LONG AS ANY PART OF THIS FILE IS NOT ALTERED IN ANY WAY.ă' IF YOU DO WISH TO USE THESE ROUTINES IN YOUR OWN PROGRAMSă' THEN PLEASE GIVE CREDIT TO THE AUTHOR... Mario LaRosa.ă'ă' NOTE: The first time you run this program the QPALETTE subroutine ăwillă'      create a look-up table for the alpha-blending. This may takeă'      a while but, don't interrupt the program while it's in this ăprocess.ă'      After that is completed the subroutine will capture theă'      current palette and BSAVE it as default.pal, and also BSAVE theă'      look-up table as default.lut, (this ensures a much faster ăstartupă'      when the program is ran thereafter).ă'ă'$DYNAMICăDEFINT A-Ză'ăTYPE PALdataă Red AS INTEGERă Grn AS INTEGERă Blu AS INTEGERăEND TYPEă'ăDECLARE SUB QBOX (xx1, yy1, xx2, yy2, colour, mode$)ăDECLARE SUB QPALETTE (file$)ă'ăDIM SHARED QPAL(0 TO 255) AS PALdataă'ăDIM SHARED QLUTsegm(0 TO 255) AS LONGăDIM SHARED QLUTblend(0 TO 16447) AS INTEGERă'ă RANDOMIZE TIMERă 'ă SCREEN 13ă 'ă QPALETTE "default.pal"ă 'ă FOR t = 1 TO 5000ă  x = INT(RND * 320)ă  y = INT(RND * 200)ă  DEF SEG = &HA000 + (y * 20)ă  IF t AND &H1 THENă   POKE x, INT(RND * 6) + 26ă  ELSEă   POKE x, INT(RND * 6) + 20ă  END IFă NEXTă 'ă QBOX 89, 49, 229, 149, 1, "BLEND"ă 'ă SLEEPă 'ă SYSTEMăăREM $STATICăSUB QBOX (xx1, yy1, xx2, yy2, colour, mode$)ă '''ă IF xx2 < xx1 THENă  rec = xx2ă  xx2 = xx1ă  xx1 = recă END IFă 'ă IF yy2 < yy1 THENă  rec = yy2ă  yy2 = yy1ă  yy1 = recă END IFă 'ă IF xx2 < 0 OR xx1 > 319 THEN EXIT SUBă IF yy2 < 0 OR yy1 > 199 THEN EXIT SUBă 'ă xLEFT = xx1ă xRIGHT = xx2ă yTOP = yy1ă yBOTTOM = yy2ă 'ă IF xLEFT < 0 THENă  cLEFT = TRUEă  xLEFT = 0ă END IFă 'ă IF xRIGHT > 319 THENă  cRIGHT = TRUEă  xRIGHT = 319ă END IFă 'ă IF yTOP < 0 THENă  cTOP = TRUEă  yTOP = 0ă END IFă 'ă IF yBOTTOM > 199 THENă  cBOTTOM = TRUEă  yBOTTOM = 199ă END IFă 'ă SELECT CASE mode$ă  '''ă  CASE "SOLID"ă  '''ă   FOR y = yTOP TO yBOTTOMă    DEF SEG = &HA000 + (y * 20)ă    FOR x = xLEFT TO xRIGHTă     POKE x, coloură    NEXTă   NEXTă  '''ă  CASE "BLEND"ă  '''ă   'ă   qlb = VARSEG(QLUTblend(0))ă   'ă   FOR y = yTOP TO yBOTTOMă    DS = &HA000 + (y * 20)ă    DEF SEG = DSă    FOR x = xLEFT TO xRIGHTă     'ă     c = PEEK(x)ă     'ă     DEF SEG = qlbă     'ă     IF c > colour THENă      b = PEEK(QLUTsegm(colour) + (c - colour))ă     ELSEă      b = PEEK(QLUTsegm(c) + (colour - c))ă      IF c = colour THEN b = coloură     END IFă     'ă     DEF SEG = DSă     POKE x, bă     'ă    NEXTă   NEXTă  '''ă  CASE "TRANSPARENT"ă  '''ă   IF NOT cTOP THENă    DEF SEG = &HA000 + (yTOP * 20)ă    FOR x = xLEFT TO xRIGHTă     POKE x, coloură    NEXTă   END IFă   'ă   IF NOT cBOTTOM THENă    DEF SEG = &HA000 + (yBOTTOM * 20)ă    FOR x = xLEFT TO xRIGHTă     POKE x, coloură    NEXTă   END IFă   'ă   FOR y = yTOP TO yBOTTOMă    DEF SEG = &HA000 + (y * 20)ă    IF NOT cLEFT THEN POKE xLEFT, coloură    IF NOT cRIGHT THEN POKE xRIGHT, coloură   NEXTă   'ă END SELECTă '''ăEND SUBăăSUB QPALETTE (file$)ă '''ă lut$ = MID$(file$, 1, LEN(file$) - 4) + ".lut"ă pal$ = MID$(file$, 1, LEN(file$) - 4) + ".pal"ă 'ă FileNum = FREEFILEă '''ă OPEN pal$ FOR BINARY AS FileNumă  length& = LOF(1)ă CLOSE FileNumă 'ă DEF SEG = VARSEG(QPAL(0))ă 'ă IF length& THENă  'ă  BLOAD pal$, 0ă  'ă  OUT &H3C8, 0ă  'ă  FOR x = 0 TO 255ă   OUT &H3C9, QPAL(x).Redă   OUT &H3C9, QPAL(x).Grnă   OUT &H3C9, QPAL(x).Bluă  NEXTă  'ă ELSEă  'ă  OUT &H3C7, 0ă  'ă  FOR x = 0 TO 255ă   QPAL(x).Red = INP(&H3C9)ă   QPAL(x).Grn = INP(&H3C9)ă   QPAL(x).Blu = INP(&H3C9)ă  NEXTă  'ă  BSAVE pal$, 0, 1536ă  'ă END IFă 'ă FileNum = FREEFILEă '''ă OPEN lut$ FOR BINARY AS FileNumă  length& = LOF(1)ă CLOSE FileNumă 'ă DEF SEG = VARSEG(QLUTblend(0))ă 'ă IF length& THENă  'ă  BLOAD lut$, 0ă  'ă  FOR p = 0 TO 255ă   FOR b = incp TO 255ă    incb& = incb& + 1ă   NEXTă   incp = incp + 1ă   IF incp < 256 THEN QLUTsegm(incp) = incb&ă  NEXTă  'ă ELSEă  'ă  FOR p = 0 TO 255ă   FOR b = incp TO 255ă    max = 11907ă    rt = (QPAL(p).Red + QPAL(b).Red) \ 2ă    gt = (QPAL(p).Grn + QPAL(b).Grn) \ 2ă    bt = (QPAL(p).Blu + QPAL(b).Blu) \ 2ă    FOR c = 0 TO 255ă     rd = rt - QPAL(c).Redă     gd = gt - QPAL(c).Grnă     bd = bt - QPAL(c).Bluă     v = (rd * rd) + (gd * gd) + (bd * bd)ă     IF v < max THENă      max = vă      tc = că      IF v = 0 THEN EXIT FORă     END IFă    NEXTă    POKE incb&, tcă    incb& = incb& + 1ă   NEXTă   incp = incp + 1ă   IF incp < 256 THEN QLUTsegm(incp) = incb&ă  NEXTă  'ă  BSAVE lut$, 0, 32896ă  'ă END IFă '''ăEND SUBăAntoni Gual                    DISPLAY PARAMETERS OF SVGA MODEagual@eic.ictnet.es            03-15-02 (  :  )       QB, Qbasic, PDS, PB    220  8002     viewsvga.bas'===========================================================================ă' Subject: DISPLAY PARAMETERS OF SVGA MODE   Date: 11-10-99 (22:23)      ă' Author:  Antoni Gual                       Code: QB, PDS               ă' Origin:  agual@eic.ictnet.es             Packet: GRAPHICS.ABCă'===========================================================================ă'This program will allow you to know the capabilities of your SVGA Vesa Cardă'Simply run it, it will check for available modes, after it will checkă'and display the parameters of each modeă'Based on Vesa standard 1.2,ă'I Hope it helps somebody..ă'NOTE: If your card  have some memory sockets free, some modes will appeară'in the modes list and will not be available.It's normală'Tell me about...ă'Antoni Gual    agual@eic.ictnet.esăăăDECLARE FUNCTION Binary$ (a$)ăDECLARE SUB Viewmodeinfo (i%)ăDECLARE FUNCTION GetVideoMode% ()ăDECLARE SUB ViewVESAParameters ()ăDEFINT A-ZăăCONST VESAOK = &H4Făă' CPU registers used for BIOS calls.  These are also defined in QB.BI.ăTYPE RegTypeă    AX AS INTEGERă    BX AS INTEGERă    cx AS INTEGERă    DX AS INTEGERă    BP AS INTEGERă    SI AS INTEGERă    DI AS INTEGERă    FLAGS AS INTEGERă    DS AS INTEGERă    ES AS INTEGERăEND TYPEă         ă' Type used by VESA function 00h, filled with info on the VESA.ăTYPE VGAInfoBlockă    VESASignature AS STRING * 4ă    VESAVersion AS INTEGERă    OEMSTRINGPTR AS LONGă    Capabilities AS LONGă    VIDEOMODEPTR AS LONGă    TotalMemory AS INTEGERă    Reserved AS STRING * 236ăEND TYPEăă' Type used by VESA function 02h, filled with info on a screen mode.ăTYPE ModeinfoBlockă    ModeAttributes AS INTEGERă    WinaAttributes AS STRING * 1ă    WinBAttributes AS STRING * 1ă    Wingranularity AS INTEGERă    Winsize AS INTEGERă    WinASegment AS INTEGERă    WinbSegment AS INTEGERă    WinFuncPtr AS LONGă    bytesperscanline AS INTEGERă    Xresolution AS INTEGERă    Yresolution AS INTEGERă    Xcharsize AS STRING * 1ă    Ycharsize AS STRING * 1ă    NumberofPlanes AS STRING * 1ă    bitsperpixel AS STRING * 1ă    Numberofbanks AS STRING * 1ă    MemoryModel AS STRING * 1ă    Banksize AS STRING * 1ă    numberofimagepages AS STRING * 1ă    Rsvd AS STRING * 1ă    Redmasksize AS STRING * 1ă    redfieldposition AS STRING * 1ă    greenmasksize AS STRING * 1ă    greenfieldposition AS STRING * 1ă    bluemasksize AS STRING * 1ă    bluefieldposition AS STRING * 1ă    Rsvdmasksize AS STRING * 1ă    DirectColorModeInfo AS STRING * 1ă    Reserved AS STRING * 216ăEND TYPEăăăDIM SHARED Vgainfo AS VGAInfoBlockăDIM SHARED regs AS RegTypeăDIM SHARED modenums(130)  AS INTEGERăREDIM SHARED modeinfo(0) AS ModeinfoBlockăăă'-=-=-=-=-=-=-=-=-=-=-=-=-=-DEMO CODE STARTS HERE-=-=-=-=-=-=-=-=-=-=-=-=-=-ăăSCREEN 0: CLSăăregs.AX = &H4F00ăregs.ES = VARSEG(Vgainfo)ăregs.DI = VARPTR(Vgainfo)ăCALL INTERRUPTX(&H10, regs, regs)ăIF regs.AX <> VESAOK THEN PRINT "VESA CARD NOT DETECTED": ENDăăa$ = MKL$(Vgainfo.VIDEOMODEPTR)ăDEF SEG = CVI(RIGHT$(a$, 2))ăptr = CVI(LEFT$(a$, 2))ăi = 0ăDO UNTIL md& = 65535ă    modenums(i) = md&ă    i = i + 1ă    temp = PEEK(ptr)ă    ptr = ptr + 1ă    md& = PEEK(ptr) * 256& + tempă    ptr = ptr + 1ă   ăLOOPămodenums(0) = i - 1ăăViewVESAParametersăLOCATE 25, 1: PRINT "Press any Key to see each mode's values";ăr$ = INPUT$(1)ăREDIM modeinfo(modenums(0)) AS ModeinfoBlockăFOR i = 1 TO modenums(0)ă    regs.AX = &H4F01ă    regs.cx = modenums(i)ă    regs.ES = VARSEG(modeinfo(i))ă    regs.DI = VARPTR(modeinfo(i))ă    CALL INTERRUPTX(&H10, regs, regs)ăNEXTăăi = 1ăDOăă    Viewmodeinfo iă    LOCATE 25, 1: PRINT "Press left - right cursor keys to view new mode. ESC to exit";ă    DO: r$ = INKEY$: LOOP UNTIL LEN(r$)ă    IF ASC(r$) THEN ky = ASC(r$) ELSE ky = -ASC(RIGHT$(r$, 1))ă    IF ky = -75 THEN IF i > 1 THEN i = i - 1ă    IF ky = -77 THEN IF i < modenums(0) THEN i = i + 1ăLOOP UNTIL ky = 27ăăEND                                        'Shut downăăSUB Viewmodeinfo (i)ăCLSăPRINT "VESA Mode :"; HEX$(modenums(i));ăIF modeinfo(i).ModeAttributes AND 1 THEN PRINT " Available" ELSE PRINT " Not Available"ămode = ASC(modeinfo(i).MemoryModel)ăSELECT CASE modeăCASE 0: PRINT "Text ",ăCASE 1: PRINT "CGA ",ăCASE 2: PRINT "Hercules ",ăCASE 3: PRINT "4 plane ",ăCASE 4: PRINT "Packed Pixel ",ăCASE 5: PRINT "Nonchain 4",ăCASE 6: PRINT "Direct Color ",ăCASE 7: PRINT "YUV ",ăCASE 8 TO 15: PRINT "VESA reserved ",ăCASE ELSE: PRINT "OEM Mode ",ăEND SELECTăPRINT modeinfo(i).Xresolution; " X "; modeinfo(i).Yresolution; " "; : IF mode = 0 THEN PRINT "Chars";  ELSE PRINT "pixels";ăPRINT ASC(modeinfo(i).bitsperpixel); "bits/pixel"; modeinfo(i).bytesperscanline; " bytes/line"ăPRINT "Bios Function 10H "; : IF modeinfo(i).ModeAttributes AND 4 THEN PRINT "supported" ELSE PRINT " not supported"ăPRINT "Mode"; : IF modeinfo(i).ModeAttributes AND 8 THEN PRINT "Color ";  ELSE PRINT " Monochrome";ăIF modeinfo(i).ModeAttributes AND 16 THEN PRINT "Graphics" ELSE PRINT " Text"ăPRINT "Color Planes: "; ASC(modeinfo(i).NumberofPlanes)ăIF mode = 1 OR mode = 2 THEN PRINT "Banks: "; ASC(modeinfo(i).Numberofbanks); " of size "; ASC(modeinfo(i).Banksize)ăPRINT "Windows: Smallest size"; modeinfo(i).Wingranularity; "Kbytes Actual Size:"; modeinfo(i).WinsizeăPRINT "A: "; :ăLOCATE , 6: IF ASC(modeinfo(i).WinaAttributes) AND 1 THEN PRINT "Supported";  ELSE PRINT "Not supported";ăLOCATE , 20: IF ASC(modeinfo(i).WinaAttributes) AND 2 THEN PRINT "Readable";  ELSE PRINT "Not readable";ăLOCATE , 34: IF ASC(modeinfo(i).WinaAttributes) AND 4 THEN PRINT "Writeable";  ELSE PRINT "Not writeable";ăLOCATE , 50: PRINT " at Segment "; HEX$(modeinfo(i).WinASegment)ăPRINT "B: ";ăLOCATE , 6: IF ASC(modeinfo(i).WinBAttributes) AND 1 THEN PRINT "Supported";  ELSE PRINT "Not supported";ăLOCATE , 20: IF ASC(modeinfo(i).WinBAttributes) AND 2 THEN PRINT "Readable";  ELSE PRINT "Not readable";ăLOCATE , 34: IF ASC(modeinfo(i).WinBAttributes) AND 4 THEN PRINT "Writeable";  ELSE PRINT "Not writeable";ăLOCATE , 50: PRINT " at Segment "; HEX$(modeinfo(i).WinbSegment)ăăPRINT "Pages "; ASC(modeinfo(i).numberofimagepages) + 1ăPRINT "Char size "; ASC(modeinfo(i).Xcharsize); " X "; ASC(modeinfo(i).Ycharsize)ăăIF mode = 6 OR mode = 7 THENă    color$ = STRING$(8 * (-INT(-(ASC(modeinfo(i).bitsperpixel) / 8))), "r")ă    red$ = STRING$(ASC(modeinfo(i).Redmasksize), "R")ă    MID$(color$, 1 + LEN(color$) - LEN(red$) - ASC(modeinfo(i).redfieldposition)) = red$ă    green$ = STRING$(ASC(modeinfo(i).greenmasksize), "G")ă    MID$(color$, 1 + LEN(color$) - LEN(green$) - ASC(modeinfo(i).greenfieldposition)) = green$ă    blue$ = STRING$(ASC(modeinfo(i).bluemasksize), "B")ă    MID$(color$, 1 + LEN(color$) - LEN(blue$) - ASC(modeinfo(i).bluefieldposition)) = blue$ă    PRINT "Color: "; color$, "R=red G=green B=blue r=reserved"ă    PRINT "Color Ramp "; : IF ASC(modeinfo(i).DirectColorModeInfo) AND 1 THEN PRINT "Programmable";  ELSE PRINT "Fixed";ă    LOCATE , 40: PRINT "Reserved field "; : IF ASC(modeinfo(i).DirectColorModeInfo) AND 1 THEN PRINT "Writeable" ELSE PRINT "Not Writeable"ăEND IFăEND SUBăă' Detect to see if a VESA compatible graphics card is present.ăSUB ViewVESAParametersăăPRINT Vgainfo.VESASignature;ăPRINT RTRIM$(STR$(Vgainfo.VESAVersion \ 256)); "."; LTRIM$(STR$(Vgainfo.VESAVersion AND 255))ăăa$ = MKL$(Vgainfo.OEMSTRINGPTR)ăDEF SEG = CVI(RIGHT$(a$, 2))ăptr = CVI(LEFT$(a$, 2))ăB$ = ""ăDO UNTIL PEEK(ptr) = 0ăB$ = B$ + CHR$(PEEK(ptr))ăptr = ptr + 1ăLOOPăPRINT "OEM Signature: "; B$ăăPRINT "Video modes supported by card (Memory installed may not be enough):"ăăFOR j = 1 TO modenums(0): PRINT HEX$(modenums(j)), : NEXT: PRINTăădacsw% = Vgainfo.Capabilities AND 1ăIF dacsw% THEN PRINT "DAC is switchable" ELSE PRINT "DAC is fixed 6 bits/color"ămem& = &H10000 * Vgainfo.TotalMemoryăPRINT "Total Memory"; mem&; " Bytes "; mem& / 1024 / 1024; "Megs"ăăăEND SUBăăAntoni Gual                    Mode 13 Text scaler & Clipper  agual@eic.ictnet.es            06-16-02 (  :  )       QB, PDS                147  4037     Scaltxt.bas DECLARE SUB TEXTZOOM (T$)ăDECLARE SUB fPRINT (T$, Xstartpos%, ystartpos%, colour%, scrxsize%, ScrYsize%, ChSpacing%, font%)ă'---------------------------------------------------------------------------ă'SCALTXT.BAS By Antoni Gual agual@eic.ictnet.es  june-2002ă'Scales and clips text in screen 13ă'---------------------------------------------------------------------------ă'FEATURES:ă'Fast:ă' Proceeds line by line, not char by chară' All integer scaling routineă'It clips at borders: don't need to worry about text fitting or notă'Can draw to screen or to a buffer.ă'ă'The demo does a zoom by simply calling the routine many timesă'---------------------------------------------------------------------------ăă'$INCLUDE: 'QB.BI'ăDIM regs AS regtypexăDEFINT A-ZăREDIM BUFFER(-8 TO 31999) AS INTEGERăDIM ylut(199) AS INTEGERăă'init the buffer arrayăbseg = VARSEG(BUFFER(-8)) + 1ăBUFFER(-2) = 2560: BUFFER(-1) = 200ăă'make screen offset lutăătemp = bseg 'change to temp=&ah000 if you don't want to use screen buffersăFOR I = 0 TO 199ă ylut(I) = tempă temp = temp + 20ăNEXTăăSCREEN 13ăCLSăDIM pwrsof2(15) AS INTEGERăFOR I = 0 TO 14: pwrsof2(I) = 2& ^ I: NEXT: pwrsof2(15) = -1ăăăTEXTZOOM "what's up?"ăSLEEP 1ăTEXTZOOM "This is my text scaler- clipper routine "ăSLEEP 1ăTEXTZOOM "Use as you Want!"ăSLEEP 1ăTEXTZOOM "Have a good day"ăăENDăăSUB fPRINT (T$, Xstartpos, ystartpos, scrxsize, ScrYsize, ChSpacing, font, colour)ă'scales ROM font to a buffer or screenă'uses line lookup tableă'positions and sizes in pixels!ă'font numbers valid:ă' font 2: 14 pixel highă' font 3: 8  pixel highă' font 6: 16 pixel highăIF LEN(T$) = 0 THEN EXIT SUBăSHARED ylut() AS INTEGER, regs AS regtypex, pwrsof2() AS INTEGERăREDIM t1a&(LEN(T$)), ta(LEN(T$)), OA(LEN(T$)), EA(LEN(T$))ă'size of charsetăCONST chxsize = 8ăăă' All integer routines, as fast  as possibleăSTATIC Fontseg, fontoffset&, lf, chysizeă'locate charmap in biosă	IF lf <> font THENă		SELECT CASE font:ă		CASE 2: chysize = 14ă		CASE 3: chysize = 8ă		CASE 6: chysize = 16ă		CASE ELSE:     EXIT SUBă		END SELECTă		regs.ax = &H1130ă		regs.bx = font * 256ă		CALL INTERRUPTX(&H10, regs, regs)ă		Fontseg = regs.es '+ regs.bp \ 16ă		fontoffset& = regs.bp'MOD 16ă		lf = fontă	END IFă	OA(0) = Xstartpos - scrxsize - ChSpacingă	'arrays of pointers to byte chars byte patterns, and start and end colsă	'for each char in textăă	FOR STRPTR = 1 TO LEN(T$)ă	   t1a&(STRPTR) = fontoffset& + ASC(MID$(T$, STRPTR)) * chysizeă	   OA(STRPTR) = OA(STRPTR - 1) + scrxsize + ChSpacingă	   EA(STRPTR) = OA(STRPTR) + scrxsize - 1ă	   IF (OA(STRPTR) > 320) OR (EA(STRPTR) < 0) THEN EA(STRPTR) = -32768ă	NEXTă	YEndPos = ystartpos + ScrYsize - 1ă	YStep = chysize - 1: Xstep = chxsize - 1ă   ă	'bresenham*2ă	chbyteptr = -1ă	Ycounter = 0ă	FOR PIXELY = ystartpos TO YEndPosă		ă		WHILE Ycounter >= 0ă			Ycounter = Ycounter - ScrYsize: chbyteptr = chbyteptr + 1ă			DEF SEG = Fontsegă			FOR STRPTR = 1 TO LEN(T$)ă			IF EA(STRPTR) > -32768 THENă			   ta(STRPTR) = PEEK(t1a&(STRPTR) + chbyteptr)ă			END IFă			NEXTă		WENDă		ă		Ycounter = Ycounter + chysizeă		IF PIXELY < 200 AND PIXELY > 0 THENă			DEF SEG = ylut(PIXELY)ă			FOR STRPTR = 1 TO LEN(T$)ă				IF EA(STRPTR) > -32768 THENă					chbitptr = 8: XCounter = 0ă					FOR PIXELX = OA(STRPTR) TO EA(STRPTR)ă						WHILE XCounter >= 0ă							XCounter = XCounter - scrxsize: chbitptr = chbitptr - 1ă						WENDă						XCounter = XCounter + chxsizeă						IF PIXELX > 0 AND PIXELX < 320 THENă							IF (ta(STRPTR) AND pwrsof2(chbitptr)) THEN POKE PIXELX, coloură						END IFă					NEXTă			   END IFă			NEXTă	   END IFă	NEXTă	ERASE t1a&, ta, OA, EAăEND SUBăăSUB TEXTZOOM (T$)ăSHARED BUFFER() AS INTEGERăFOR J! = 1 TO 500ă	I = INT(EXP(J! / 100))ă	CNT = CNT + 1ă	fPRINT T$, 160& - I * LEN(T$) \ 2, 100 - I \ 2, I, I, -1, 6, 15ăăPUT (0, 0), BUFFER(-2), PSETăăREDIM BUFFER(-8 TO 31999) AS INTEGERăBUFFER(-2) = 2560: BUFFER(-1) = 200ăNEXTăăEND SUBăăDieter Folger                  Mode 12 Graphics Print         folger@bnv-bamberg.de          06-15-02 (  :  )       PB                     38   2258     Pprint.bas  '****************************************************************ă'due to some problems in the ABC Reader, the original code wasă'deleted from the 2002 2nd Quarter packet and was placed in aă'ZIP file then encoded in POSTITă'****************************************************************ăăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"PPRINT.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%%%%-%Zt0^Q[k+f2-)7%%W.%%%/%%%%uu%wnsy%SgfxJdz<>]Sm5wP]=ăU"Ng\%JZFFgfKp28ty,9:Ya]I7*IFcNbc%$F1T*Q6A:Q?B(8>N8O,a_-:NkcgEXHaăU"al7lg?=>hQ?LHF<In:wi>?z/^GU&PEK<[-B<M;1ED2&UoT+d<tVpYeA/MjQ)o$/ăU"anK>De*vj8b&CAC_=Go30WJuakX#O*[[72aSM<LP+7O'fG&#)W'OT_:.K35yT+%ăU"dB=*6B8w+]8YX./i/A/wJ'bX7a>9m8RI/pER<VZt;[y+e>?h+McTD0B\)kRCI7OăU"h+Uz;>_[/WBjp&4<OlSerAFYl#,f)$(osP;F=F8_d.QcI&3)tc\W1r5H'HH&:eqăU"k7F&*Mec[PoD1i1p)cVkMb];\a2Xa;cR),PLJ\'Ev>,9t;pEQS6T9#ak)g:L579ăU"6Y4UEptkL]pM'>oA5b.DCQaD'9v(,/lEvlTJG^=SQnk=&f/M7WZ]a%Lk2K)]Dy)ăU"25mopqoc(c;H%*E1qfYRP[e)_Z;#a#vYjlKpe/Pz(L;'eSflr#3_(f-&W,0gY?găU"17w5)M6SR_>]7lQV;SChJidliG2,sV43,'fN39[bh6K_+c<l<i2,V.>t<U:Q5.$ăU"3-1[;q[l*:bwR=VWUPu3UvF%-9,&q9cf*SEXxr_Q8(K6Rtb65&j1sGCpThNd#mKăU"$%o,V.x&m\#M>slx4aOx_9Ss>2$o/=ein>SK]L:RtVk6#:.DNe05HPv$JR-XZ(lăU"6HnR9FwL#LBbjzKw)3Zr&)e7f>C*E<nHUg$HGy;0Z8gUH8?[M+6Bmj(nN6H+%T1ăU"X0t0I0k+Ww%VF7-/&M(86U>haEWgs$Y.7Eod94Ww=(4.>jgzaPN-'YUp,e4508văU"Yu\,Hq&jib%43rDR6mWVf7A>_N$6tl0/v<4$$_(jC,j7A(*>YRjUGM3?XWdz$:#ăU"UV[oS([GK7Lm$=T/2H%?TRVSmlEe.ZV?m[gd3v+V^sJ+pL,*E.sBg\bfNBs%We%ăU"_e)VP[#7i_t_?q2f_cSRw5XVqo6nN'-4<r80df2OW,$fT6Pa.=Gt)3TGoNknkhsăU"bxn]]i'gnm%0%eT=\H+o*\jUumG5A1q9b5_YvZ9?'.8_^Zv#)V-EJM#em\w$_y(ăU"H_zcss.i=.QemmmwjEr(:R7dDa\L0(ojc4sQQ9vtoJ?3aHH9%L39&\Sl$?6y]=băU"&.YV/f.5B_YWAJzQKnK33*zpZ7rVPKsu8]grgPA)9Upjdwr^]8zx71kd_1sv_qZăU"ISQf52,M<Apl:kEmdi7irN^[pcw$d5OjDlDsZjB.h4lhNLFk+j$6qRmLpOORB4IăU":IS>Oq(IfpLuW\-xN%up&'%9%9%%%%-%7Zt^Q\[kf2%-)%%'W.%%%/%%%%%%%%%ăU"&%E%%%%%%%%%uu%wnsy%Sgfx%up*+%%%%%%&%&%%]%%%%U)%%%%%ăEND SUBăCLOSE:IF S=40AND B&=1150THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\1150,219);:END SUBă'>>> Page 1 of PPRINT.ZIP ends here. Last page. TCHK:40ăăNa Than Ashhanti               Screen Mode 1 Colors           na_th_an@hotmail.com           09-15-02 (  :  )       QB, Qbasic, PDS, PB    27   511      1staat.bas  ' CGA Testă' Ąe.ăă' Set up the correct GFX modeăSCREEN 1ăă' Set up the colour in their proper slots (to easily access them with OUTs)ăPALETTE 1, 1ăPALETTE 2, 2ăPALETTE 3, 3ăPALETTE 0, 0ăă' Now the OUTs...ăFOR i% = 0 TO 3ă   OUT &H3C8, i%ă   OUT &H3C9, i% * 16ă   OUT &H3C9, i% * 16ă   OUT &H3C9, 15 + i% * 16ăă   ' Let's see ită   LINE (0, i% * 32)-(319, i% * 32 + 31), i%, BFăNEXT i%ăă' Print any sillyness :)ăt$ = "* ANY PALETTE ON SCREEN 1 *"ăLOCATE 2, 20 - LEN(t$) \ 2: PRINT t$ăăTom Nally                      3D Wire Modeling               steelweaver52@aol.com          12-15-02 (  :  )       liberty                2343 154800   HUMBLCAD.BAS'>>> Page 1 of HUMBLCAD.ZIP begins here. TYPE:BINAA TLEN:115471ă'-------------------------------------------------------------ă'                  INSTRUCTIONS FOR DECODINGă'If there are multiple parts to this file, merge them into oneă'file using  COPY PART1.EXT+PART2.EXT FILENAME.EXT  Remove allă'message header and footer information (everything outside theă'">>> Page x of..." lines),  load the result into your versionă'of Basic (QBASIC, QuickBASIC, etc.) then RUN it. The originală'file will be decoded into the current directory on your disk.ă'-------------------------------------------------------------ăDEFINT A-Z:DIM SHARED K,S,B&:V1 'Created by PostIt! 7.4ăSUB V1:OPEN "O",1,"HUMBLCAD.ZIP",4^6:?STRING$(50,177);ăU"%up()%9%%%%-%P*daR(N=>),%%%%[1%%%/%I%%%8)4FVZLS1<?*fcV3&OE1%3d=ăU"kB1BLP4,?ptc5\:NF3*a_wjp=eBdp_'AX:))=%p4<pSW^=C%l,H3kSj29eW]29jăU"7mJh\F(w8-5#/?ut2<4^NWCAHP(MFj4$2fDFIJSTxpEDsz]wB2l>z9rtb.>AlVhăU"Sk^v.%VqA8SufaWXr5Y>tV_%*JbN)o.7DG]8QmGVwZQuhfhbYM1gEBCvirk^voBăU"KL5HVvgMf8q28U_xX]'Yd&u%p()9%%%%-7%U8o7RP<R,lJ(%+%Oi%%%0%%#%mx?ăU"M74A4LS1<?WfhD\%#V1e/d+As^.xE0h+Q+L%hovNCN44x,0Tv+d;Q?r7LjR^Bq&ăU"+5CIYGnj,\hVXD8WNo/#X'uHPdlltsK8UcnSfQTqn:uwh$r?2logPt6_h,M?039ăU"BtA=]-rtRmU[?,+uHHBU$p:\9l8C^CfdmT;h0_gPIYht..J7b'AtM#VS%4]1vM4ăU"$4YD]\1%it,d.uHI7t_$)>d&=i,6b]AY(#a/mf8c9HEDtZMr3%_oO32(\Do4QCzăU"mUb<j[d,skc\sLVJyS)TOn/]hdU&.9hRvd%#bgRY&+#6[p:-OnEen3gVEv-wu(lăU"&cm?H=rJAhoIRSdir(4rSHFjnJ+d;<?o+<a'V4yff^a,Mj8vo?\x5Yt]%GDheV[ăU"Z]W)YQT2vHsD'Q]?lI&U[\hNgw#TqvSPl\%n:pNQje7y:Lt?hv=kB-x?OG]Z7^>ăU"qZQJ<FdlWPB;^ve/9otMpvcA7pLu]MZcIVDMcUTIgpTM(u._Y6EbVB80.NHFv[LăU")bUWWfjP&7+S2.sX4OCLfV;KM^LYw_wbECnq1n7hmJz7Mce#BNjdvdX(O%[;biVăU"t%Juin[pN,r4qXQXjrCtHu)MrMwq\LXHQOBdV\Bmq^0W8$^S3s$Yq\oLNjG2G_PăU"/*PMoNoigx5yuG'HuE'_enZ'.av'HB&^9D/b?+a-b^HddF7+x'hGact5#?gY,?jăU"ud3tYE?Ovu[VdMgACTv]Pm9lXo95Hus:lfP>sg^yWC3bQnC5&]^t]t>j4Q))AIhăU"$nyY%gdHCiEI_uHmA#z(BCl44[v[XAYI^,HnLBY(7fVB]JVXaGgjre?LpuykdcfăU",6[R#.T,0>OigvzhZne1QH+=T6qc=&DBb3dlLxcw?$1>c3nkv04pNvtu3m^YsEAăU"(Vuek:8?#uu<5ZPVfvkR8MA*t:]<EOUv%:<588r8n7p&>3$MBAsV5qvZInTL48IăU"eSm&+tIjY8lx924+39.^AbiJ;ml/GXIT_1&5B#Np>(QJ\Mq4gL7vaHdlK1,L8\uăU"].olh7$qgYE$q6LO%4US>MnM]kH_kI<C6%wMO7rfm/tnd#XeQYtuDLRB6,$soYCăU"#,WS>,ED+RF*,M^gh<-ZGU>b])olE89NeOKcLfKeQSO#$thnER_Ja)$]6LrGqVvăU"i4geWBuYR9%BF)JP8MokT*ue?%)mi0l_xh*El/ukT='.84sqAg1ZHCoE?xx+A\jăU"foQpc141DP%nh-RjYXt0av6tk_<EqB]DH%dup(%)9%%%%-%9#%pRdTMlkl%%%%[ăU"%1%%1%%%%n2=2;W(W?ZSh1<?fAcb3O#E1k#O\G]]_mO(1eJL^?QY6_'%m-dJP/DăU"/Ggnvap..g^xHG[jifSr</aK*g<cmh*CDpg6kMO.:LsVYtjmb[IR&n_ap^fcFwnăU"Mg2CSk40.]JjExR\U0tHYpLE$Ou9hY6K_EDe7*K?5x>9PapT;tVov?mNAl:4tZjăU"dt_k,rh()-F-i\1dZGi\Crob\t9rUw,%up()%9%%%d-%I8doRw4=I(C%%%%[1%%ăU"%1%#%%n=)2;YZA?US1q<?.J7V3;Up1TZ)(H5kkasI()eBL]oF+gzq/Uy881$]2dăU"[N7wBoppfdr6+</1Jm6aY^x2SDJI5nqN>b]W:H:BrB.Pn?\)K4oOTc]aH8MwheKăU"c8Y^8W,rfRqOa1;qa#X'dXrH+h'Qb\googo?t?th?roR=8u\j_fr$nC.2d4z1AiăU"#G1M$#/gZe2IplIFswL'A7Xc()XnD?6=54U[0[R:s'rEC7Uc)(.*Dz?;U#V6ZZrăU"m=]rA.IdDjHlkF&s;MZw4%up()%9%%%d-%48.oR]]4po$%%%%[1%%%1%#%%n=)2ăU";[\A?ZS1V<?^_.V/OU71%dSiG]]7eo4?p#tcRRWxy:y=9*NK8\RmERu-U$js,=NăU"G]?>#_U2?NoT*gP-GG.-SrI*MG2EGOld8=jfW>XH\nO6idLnSvQu=znthq[$mIcăU"sBVX+xNhJ_Hm]4U8RHv9pcBY,kq%7du8Q^qPcbwC4j>XKu58hMI4gVXnvWB#vA)ăU"oN(u%p()9%%%%-.%-ofpR9-#+Lu&%%%[U%%%/%%I%t191g>GSh1<?f'Nfs([V1eăU"J8?&OAePJz'p6Jg=rJ5:6];-HD<.2#nhkh]A8f+.nhiHxSQkjHJsp8VordD8WlxăU"'vmm'8tuKpX+znVN$uPD:wNW4)DN,=DtpQpB#KUov/PZ;vk8dvPvs+_DT<up.u-ăU"sIS'xcrRSw<vlSVW8nl)Zx8G<QrH<asDp%'7AQUtPFTjLA_ed2-$tKBaI=t^)inăU"s*;m4ITN^WcRQ+jRC]tZ^;i-x1Vs,biT>AmQ0$-)4KZ]pAp8=d_aYWLhfjh\MEUăU"cTXn$BJw4_6[Dh4:^6$+#AfdoTaUHn=IHK9fT7R?lueSf1tV8+M#N2=[qrN]Wy#ăU"P&ySs8?WxcB6,h:g;6\#?Y;]l2-<Qxn4ZocTrP/#qHb1Kv5:]W+X#xv8j?0v-X*ăU"ZwCe.;Dt3LPnDArcdl_1^ZQXhr.eTxDs#%t^J,<f]mXo/aA<<sh,]Y:(JiEf>wDăU"gA3m8nX&JnrGREia$^qDjkac*>0%XNhVkM3akgD^_>ah&2M[ygQu&AWZ7)B^]:3ăU"?E<bVaoM675vWi3Dp7Kd_dVW+\K[zz3ncr*iK+IN6[EdchR2MiL5XOM?j0]uoD]ăU",4G#?t]I1(d%a-AL_GVGusVI+0u$MVV]j2>G(con6,t<P*wB2cwDjv,fg,u%p()ăU"9%%%%-4%jyb(RLZm+P/&%%%[U%%%0%%I%t19Lh>=4LS1<?*ffps'=U1eK<*'BU)ăU"e%55\QBLb]_*p./:4QG:unk+tLGdSx#T#AmPZ<Idc>>WbfTEr6=PtQXnc-lo=exăU"tMW(YjY]k8RS-nVSz6w:^.N)tM7$Vc?/C>M>NgO;TjW=.uUSdX3?AN/oq^Hv(djăU"dmHHhhSiPGhpouC<Mcll%[lv.ein.pq(aJuNB4t*vrnvdpBuNi.>of]FwYq&Pn+ăU"l5xY<qZ_MFE?j[FKnxGivZUnOHQddsHQw5LnjNL)_5fdj5IvF2.=ItS0&(s,I+\ăU"NFMCebZ86.gQ^:1b+vwhkP?rZjsg#v$+2b7v(e[<0B)RmWWjmln*gWB11bS%cmQăU"ts*gHuIW-8UX^uZDfftG)xtIFp7#UH4D:WmN8X:c-x[5H1WdV5HR_<h6P-pa-5răU"H,vfH/eXrf+CA&c9HDQ-aZwZkPo8U/Q;xfuiCRdk2okk$>2v:A\prC;KX.I9KwSăU"HjF>wE\'ITTSbk]4]p(^splUrRvWZM[pDN^aS/N8XujQ/([44CJX3nPL3$inoqoăU"(JuP47w:.lx.Sxk)whxW^owf'_,up%()9%%%%-%)6lfRLA3Js'o&%%%[U%%%/%%ăU"%1t19hDH;S1V<?fg:fA<E71jb*c3g639eOdsHp6x^W?qpqMm_wygIS_*R.BW[dXăU"iKI0,LEWurq55eTPffkGV]pHTj9-ck=[xivk^>$<_ws8i5eDV62r>M;:zhkRaDvăU"gllQ<4DksmQ?qd3e/^xYH0JkzH8aH]SXF(Oi)axKW].SekZjq*,Qd;C'=DhW=_tăU"vjXDkC6W\,4c16J#s0i,?1h6?[htrLdwgR4CeTB76mAnI5<8=huDGY^def^de7iăU"wp$ceUzEsMBt3Uu(&/\c1vjTM%N-8mb0ppqf3-PjDct,rYD#ha,*N-_%5.NW&1răU"Ug'nBu3>IDPf*$xa]waDCJO7x_d1[c=DN6HRR<BwILxJLcUdS>uco37G#ik<NWUăU"T0up[4=^YGxA?EqbJs)8/IXusSIhQs$(w19C=rYjI0YI+3IM%OVpK:VNu;D^fd8ăU"7o+7q,)w*+0sh4w]xMbHY6uu//ed8oF+7q1owJ_ku$>gwOra*XKVn4vGNBl#IHVăU"#HO_WnF4IVLx;GN*$Sx]uDYBagg\Qeke.sOLdcx9Cx-Ek<^'Rd9%>n2'dbvNdWoăU"(n.4&2/'kurQtxY*eYji+j6U<whi<ArIC2,yf]$Kv.p$$cUzsrsnHk=DDkDcDkDăU"D4dln3'edZd%up()%9%%%7-%L/IaRM,:u,0&%%%[U%%%/%#%%t1J9i0CLS1<?*făU"epsB=U1UKF*'BU)e%55\QBLb]_*p#O:f$i#NkP^Iszv(ndwd,a(vLrL^HTj#vATăU"Z(PvIlx4mamJIouWpB1kl<)<TfP.$wSK[UN=Rg8hL'[VP-5>y\Pru#k+v>y\?<văU"\R7c9sXcm/WH>nZ6wTSWN\fhd&eT8?\<j\lM8-r+vq7bd*Qtbf<xf8Q5eL[A4N%ăU"Wsj>74XD;+>:9\+WNDHb%(?PUXJx*XH&1NEa4FoW[;T1drPro&n)OpQpS%\Yy%]ăU"#oxvmF;E4xHQYw:#Zx.1NbSS498];>j3u2\/25=b*29ai'_+&w\P>&ghI;0Y\S'ăU"u,%udtLf_.[DXSn)r1j?c>&5:FhQ=MCYOK>;=NWx4=iCX(ucr*%*+>Psl,.H>NQăU"P7kvp]h4#(/_ZvzAOXMajp]*u$t0Rgo8;xw8[AUdT2;Vn)DAQn7k=_y*R3iVlI8ăU"gCC9zQ\uwx[Kfo;*%dm7ihG^:ILS^UTn.xp'Y#bgU$\2>fcT8db.$u4fFT]rX>4ăU"Z:gw)2[M_q)Gkr+8AiCY>jhVZ.1x)$UNRC$xCmx+xl(u%p()9%%%%-1%;og+Rk#ăU"5+w7&%%%[U%%%0%%I%t19Lq8=4LS1<?Efe$=B<U1UfV0CGd6_ECV+CHl\IY26MfăU":cTc9afJI7DAp14?/xZ-nv]Yrql#kNXM2sDTT*5Lu<TBT2+]ljh&Qs;L)hctP*:ăU"6wZ9QMN.eN)3J+O9jXoI-FbzsjGd.%?]w>i>L1t46[^^.=(%$Lagqli7uwbhHNXăU"%Rut(CsQxk45tNG\0uun)pgL5;Co]2?wLBUCRJtdmZE2^nIKiL\U_Nw-I\VnVB7ăU"zhBd*(?7Jm:fxQRhYId(3N3o*wXRCetH7t6P'.X?U+TCjP>:Or'.\eWlnHW>Vk[ăU"Ns_'Ip6t&t=kXIFg-Asxpt0BqsEbjg?3vFXEQtw2nsguvRp]TKt*8(/JGN9ET/yăU"do?H:9d7\M6[w&Ok/pANe[TB6dEd-;DD==tZd4e[ig:.d1K6,bq(B:Nuk,Lst?.ăU"hN9yEp9]p8Kb;m2m;#UPIts^o.dV2x>uQ9^spC8H?)RIaVZOh^V60g28Yb./SncăU"xG8'QO3_#$s=bvTd(8?7Zo\k\1YfaTQM$lRlbm-Xq$Ht>/ubGg]+Ed68(orEsx0ăU"Ni+cXqrwHVYN_NX^)xt'r&up%()9%%%%-%'%rbREorrW&?&%%%[U%%%0%%%1t19ăU"u2>;HSh1<?fJgf=S[U1%L=4m5t6a*vb?(oWd$n8cmS.9&*o]+T%Kfi8SClYi;(LăU"[&Fu=v\se-C+Plj/]T*HGN<sq%r(n&AB8h0(eH:.pwUs#b()*g(r\Kq*EI_.Nn.ăU"Iz0%N?o5NzetZT4m*Ywuq)e1x3w[ahQ^E5tf.7,v0RNjw[G_3x\\Rg,aY;sRSc7ăU"JX;+NVftx=Lb=ZN*i9UDAr2p#twD.*jC,iqPZ$6XdxM;\c9CsMd[XJv#a$w2nxEăU"*sdt9Q^Ux_vpdg8/JQgBsHcH+IKg8$xWa[n=Fv\WkW(TYbt0a%lARi?uTCH]O;săU"d'XhCVu.Yl09C$c4^B_8sS>W^W_L\KvtfK$xC#1W(i_HM%q#XWwjE-/n23H-Ct)ăU"8x\0wKH]T0de)ZQoj0qdVOX;nT5X#jp&Vsa]px)RG0cSHmx.mGR1^=Fxx5k5pVBăU"*xN3Flv#awn2nx*5sx'Olxbow+xl2u%p()9%%%%-:%d7f.Rz'4%%W'%%%[U%%%/ăU"%%I%t191uHASh1<?f\grs=[U1k<1*'B)5e%'HQoUXr8L0g:\y.i'Jl]EM9aymngăU"Bt]\La&l8aZhD(sTZ?deEa>#?THj5>mK=[Qxng]bZ4F?EqHgwsdG?^f8R;_r%2CăU"nFd)*fkNFb?J(syk3\He2faNZajQn&%oQeGOio1[tQP=Y2nhk\.f./-x.12qI_%ăU"+GLM7+e<WKLv:($uwo(c*mt;8_'zG'Z40Igt8_H>l9\oa1s(22$Nk-HmG0?'i8hăU"4Sx2>oj4,8*G0tX=D<Pd;GMdQnGpVZlt,zYadp4/]tL5mWES6TkDX.cB5zsnD8_ăU"veHARGBnNdbgh#^[aK6=hAQxPkhAyW#J>Jbl\R_xehlJLZ[rHYILMuOs>pz;nK6ăU"5wCzZQLUil[F6MV)?rvpx(L[cOZtdgpbSPFDt;YYJBR7Zo(N$C?X3NLy)oJ.n,4ăU"n(VnJmGV=/N=oF&;&f9*WtLwi-e_-JSp0=akj=iV,)TkavUC2w?fWm;I23YN8qrăU"^PXpG^OlK0]e';c+wkkHUt8e,Cbu)07FJiEdVZfvR^^V)Ug5ujpC<5?v8<Rr96uăU"_NVaENp^litpgX0R<;qr*wQ<PHwV#06FxVS0x6H11dN:9Ubtxo:aerho-Ev#?^*ăU"KD9t;k;FLk,8GPrt$i#INuT/ev6cB\-x>Xkq8bNuc=48F3<6FpnfS'ZE5?>ldTlăU"2u^^fkdeD$x'SxV20wvPRsni&>up(%)9%%%%-%][)aRuZCbOY%%%%[%1%%/#%%%ăU"%284FUIUS1<>?fKb(/OU1YOJ1Z3,rrLoa&U6nbldY3698:ggN1.8\E]f1eWMy6aăU"+yCgA46/pXlL:fa<E8C4MSiU>?kL>2E?%QpbNKafsYb*LstPNbRb+WVqtOl=XeAăU"0nFaPNIQMku&mjrPRfrMlkF%pO,8Onk*VNbuLwWPX:p,U$m8f8X^U$2*HN%u%p(ăU")9%%%%-%%j)aCRcUX*ar%%%%[1%%%/%%L%%84&FUVSh1<?fBMb3UdE1OZf3#6#,ăU">m)CH9V$HRY+hT3=y8M6mlvB(mG8;_X^eMe8C*Qa#<=;KqBrPmCL;uHSZ]Bi?P4ăU"aGJh<RnwThjjjNfLHnb0Rkx(n[u's%ca0:C6XwgpZtJ*ibdN:#w5??vcos^ocW(ăU"n5,h'?ceGB]KJ=JqJGknC'GC,%s_jps)1FprA&WmbqfUlctN0<G.bccT:O'8&upăU"%()9%%%%-%%t)aRVAfo3'G%%%%[1%%%/%%%M%84F#UWS1q<?.K7V3<E#1evFf(_ăU"Fe9Q8]%3VJvCTFhhdGq1f]d&h[v%J;E4X7^n-Z').sojq\jmD<1Lpg)xWP7e0?măU"5>rd$3M'[Q7w]61p5kt_;_4t748Z(Tt#VL;]r0T;?Cnp=AvuO/]sM0dl4.:>#SHăU"]FAD#5MK#BM_%mYt^'>rSKuO-,FWq/-S=]dF;#ki,:dZFDBrQ9nP;r1*g<>tqoRăU"Y\QclrN/&ycAxaCh[[]HAVaDj^MLm<[Pk<nv?8*7rq.oXbg#>dgx(%up()%9%%%ăU".-%P)RaRl;5Eiy%%%%[1%%%/%I%%%8)4FUXLS1<?-^Kf3#eU5TlZSZ._tt8ms%oăU"g]k7,?(29cu6/LBu2T[t3oNbVX0lM.)LPEnED$Tyyds[ewUH1.lTdxJB7(V5OulăU"a\>mFNoa.<aJuUHZLIMfkK,pb2GLu3Q31]Z^ije]=4T^#c=se]r%)=umhZm+4x[ăU"s+TiJ]4b]JxnWxUpPP,ka-7ifq#D-]]C4]LJ>EwYE4XYRx?uixT6hY6TlmD4X&NăU"&up%()9%%%%-%&^)aR7$D&]&\%%%%[1%%%/%%%M%84F#UYS1h<?Bk4Z\0%[(XEOăU"(%1*MM53_ORm%^^'ifU1CAoV/JoJOguxxxx#+?%3?ljt6.3=W33Hp1c[S#,20r1ăU"w%mxJ^_8rVI%c^Z(Pn]z^Y+\x%Q4;)yA+Ob8<%=ZDd%=ZDd7=y_Xn/(q.71Ol4)ăU"/'fu$v/Xx(%a:)#zC=c]_D=:<rZc%<RKS&,ot&u%p()9%%%%-(%l)aCRmGu,(/%ăU"%%%[1%%%/%%L%%84&FUZSh1<?f\bV/<[U1jNr6CgQ9*LA&-3psbqiUWD%ZvRi_3ăU"voj8V=keq/3l7UHk#BX_LEcrdmdoK&8,4=Hh8T%w*+h4m=nwnI&)w*n>yMaaHbqăU"U<bM5lniQ&$p&RSQH*W,Zr6i6+iItXQN7>)H[wrL%JcDOWqM^CuZ8xDYQol9H=ZăU"<)p6rq2I6V_n^rSS3ot:bm_InCRQcqMo_ME6K:A1w;E-npSK%6M=Z8xg'gd]Kx%ăU"4up(%)9%%[%-%I%)aR#$u$jE%%%%[%1%%/#%%%%284FUI[S1<5?6bf+3;E5Lj#>ăU"+<4Cb.nI%pWWBrvTTpg['5QIM+,hjJIO[AJs5TTL^&U\p?BPYSnJ#-6hXmlHb&[ăU":]8Ia6N[cjZebF4OTyckD47;3WO46L=uD)EXbd8[7=4SZ)p2X_Jn2USpj2sG:8(ăU"n_Dd>R/Y$BmKV]#qGQqpf/bcY'tTPJus=HpV&hambnFzrg43%IrU.[bUKcpZT98ăU"lMfI(5[c#pBm$i2ZxE#n8Uuh#HXWC<vhp[0dHkGtT]Z%u_cnMdKw&.up(%)9%%[ăU"%-%S[)aRdm:;c+%%%%[%1%%/#%%%%284FUI\S1<5?fcV(3RU1OjF]g.>$A'=39WăU"$\#Y4U.PiD8E2_i8e;<x[^n-U5nni=DtBgZ>re:kn)G&,H1ZKN#/w'71e'gM$$UăU"9%ptfpQ9KfTBp[DYS>VTMMWEq>dYgHaMgu-i\$O]FL*-<:T<OCAl^S%orMfBx9wăU"[Dnuv_K:pr_EM;/;bKQabnHNBt+Zu$cG)XY7T-v))kWR:ad_He*usZ_qnWOstBuăU"Q(s3pTZ-P8(u%p()9%%%%-+%b)amRd>,)Y\%%%%[1%%%/%%L%%84&FU]Sh1<?fAăU"_V3O#E1j#O\G]]_mO(1eJL^O*:JF&7r-OtaG&S5SsxD:QrD9JX8)75P.L(lp>2<ăU"p9pFO*CN2YXYM$UuXec#NSKfl2niDLu7=68.')RfdT4jUnt<Bup]Boc7)nLjJq'ăU"B]BAns;&\OXiu^%k4NBBnMNW9.r7'tn^DCNiDbcr>nv>Iqt4%up()%9%%%%-%')ăU".aRX>7$?+%%%%[1%%%/%I%%%8)4FU^LS1<?*Vcf/&SU1%Ed,aJ$UrTiX&WvbjtDăU"0x0NR5R6>='\+.+3)(IPV.M<vH;Q<Cg1=mjskC8IQsus4<Q1%6QL*a^VSL3cMH9ăU"?Dq0=d,j25zw(^QQfVdPRTMAFnbT<%y3/dFzJ1+cp,r_m7rOtG^-Wv;MpZ?F)8kăU"jG0vK5,3$\YUHF6>q%RAvHdxwBUc8+m6LlxAafQdthLdvs=fvkE,FVTPFC_\vlmăU"t$s'x%up%()9%%%%-%%/)aRmqoO('D%%%%[1%%%/%%%M%84F#VUS1q<?.M7V3;UăU"g1T0,(H5kkasI()eBL]oF+g:qJUk8ahuE;xRwI]cB(&f.Hh^o:pp+H1OCxDpkJSăU"WtNX*)*)?]apnM-Z\4ub^d5r-7_lrr:*En8D[kKcd/c%GTkVz:3bO[SfUsl$(i6ăU"gdy;hVln$^CMZ-ln4FE+NvV3MlNY2-qtQT5r&A':kBxTCK]NnS^hgZ/?-LNC3XdăU"PtRfHZ?YrL]a=7+#>h(=VHmn]G'HDrlWHn:*=i.7Ft]?0>ZJq_dr7.ju%dup(%)ăU"9%%%%-%5[)aR'W<90y%%%%[%1%%/#%%%%284FVIVS1<>?fKf(/RU5PTZ#.W3ER4ăU"atY&U]psbS;*G(Y/Cqg?%X+_H+othejkrWJfjV+a9V5Pb?'T5_ccrk5Ld,HtfYAăU"H?nM-ZbY_mnFV;^KP>Jqrq?YYDX,V.tGnm=smR>4&KXO[2XY.[/MJ=,N#k0tLD<ăU"Z(uzRALj:X]w7Y,rgxobh]^cONt>pnCA8fb>[])iXQ2d*xctSUK.sIe\]EpWFb7ăU".,#xTu%p()9%%%%-%%**agRH[/)_a%%%%[1%%%/%%L%%84&FVWSh1<?fAbr/O#EăU"5kvkL-=RK+8GOQoVxr6.a-[Y3CqRd+_/^nR&rM>V8DOGI15'OXOC&p,rc9Ew2utăU"*Rh&s_c.o2mVevjmb?Yj>HwItA>Rn<GM)n]-(C4Ff[xyk1#a)hll#8w7]Ztf/2găU"Y/aXP4osku5%fXtYt;l_<tTl<rRufupbo]sq*$x*AcT$(PN%'up(%)9%%%%-%6%ăU"*aR\a4oa(%%%%[%1%%/#%%%%284FVIXS1<5?^_V(3OE1Ojd=k#BBbP:,?psjC&RăU"pIg'99#*j/9K[pi/jpWfoLh&QpZLNc9eeOo/.(bnO/*Pg><AXnP,t?1ucxo;hp$ăU">[l_vY]j^LX]p]DHSv$;W587IGIDsBjOwBRF?vJnG[GWV^+W+Tqv5]j8d?mkmu)ăU"o;cbF/?dIGaApmx)&Ma-VlX-hZUHsFQv1F-emJM,^./HOP[irN[RlCopLVsl5pxăU"N+%up()%9%%%%-%B*maRsP=h_Y%%%%[1%%%/%I%%%8)4FVYLS1<?*.cb3';U1k3ăU"<]g>%>^f469Gl]fS\?(+7NRoN[n'\BlIp8F88TAtt7WD^Z<Q2Gm2CJ5,Kl[?kwpăU"kVDOBsMh_N,-PH)o)NYCy-\#VMl4D^_Wx20F$ZMMX*S_=]rvU:?o\\S4;WMM6M)ăU">H[i8vTfJ>3ZWT4C8GJmx=tO?aM]X;JqjkTX^WXMC#B\Mm6*&M]cr<Son.Fdc^BăU"=d?gtVW)G8(dK6H&M]G+Hvaj[Et0kS*qpli*rpi)]sFj=cs:G;EvwH5Tq6jNTagăU"SHqM;G?RDsbn=l7x4%up()%9%%%R-%p5e8RVU(ybr;d%%M[%'%1%%%%mhLx?;0DăU"B7S1V<?flcd'IPOz#&G7%cl-,KY#7a49L79i?$V4u6U8%LIvE+/ZGP1'(+iI9*0ăU"(Dmg]hU=R*1SR.<_/0+.WZ\jE?oar(%5)0)z36zzTrxt8^Yy.P4uhVnLtkLNNl$ăU"0Np9pcq:osdt&lTxMvuo8Xqj'J*0cxx'v?SGx$u0\XxszSv0B0<T-AK<+R2<6/5ăU"=+TO-L+R<3?EYl\_-QEa0A'R5?-&9E()<PU7-fT/m1gI/^'R5--&9E)D<zVRD.SăU"E7(*Pf-3S%/5GQ/zdN:6>K1.QoS^'R5--&9E)2<zT1EWH>QDoT'Rs5-&9.E)<P[ăU"U-fTJy,RnEXH>Q;oq9E()<PUR-fT9d:+Ni/4-QW\Pf-S;%fGE1.ZU3^QJ/DtSOLăU"c=TmC1Xcv:&?/NfAVUle32ap1rIsdTddgPX??(nZ*r:okH3V*(UIO3,aC;.O$o9ăU"EtR;5<%Q'1EB_7$R7ydGBh:ZHWu9:l$*I8Ob<=^>djtHJ5-n>a*:#gw(=R_3,OEăU"tDS=5U?h7BsL_?43#=?WB]sQY7n7fu$g$hg:V\t3J2t,fQ=Y/MaUYFkeUmkSIQ:ăU"_J);%XC(wXYzL[(fj>7LVFE0ioCr4zC/)]yTt8bFoisheE0_T2MGT+hC2):yF:4ăU"kbtw$P4UA[$EjWY%4#dc=UhtV&V?D6]I/sKN5JY(pbZN)m6YIpjuh]O3)nQ3\7hăU"[24AW/'TgVE$g)MAM4BVqX;',wL02_<CUjk5g(Z(OrBv>[R[VBiJ+?Vxtp:M-V0ăU"H:KM2dVlIYS7V)Y0aio;t\g*gm1fDxKRKnya].6/#KOUld8wd2>Kk?_P3ml'VIMăU"27#WtBl=>5&ZlhnHO]'4U1\,;EFwcH0NK*Ph^*n5SpaE5r./Ph)=WbJqb1P;bvCăU"HFX3^txWu$'P9:L[j:yrkYC>IWM(jq=>;u]VFs\KO%f(vIqRy*T+<0)*TtJUs]OăU"220KI_)(AJc1R;un^I1HYYRSB?s^sG]ry]cKQDb/I=Cl$^8Wm4IQ':4H<a/r,UcăU"D,sYyjQ3n,6E68yn]5F#?,tQ+x1fIa>^S*0fU4;[M,KWg+&$jx8%cB+Dux<P4+măU"gncHC4YGH#BuCuEn^*e\qUeHb]WVJL=\&1rqW2hb$=.l[Wy=>5kMCf4h;g6_QgiăU"FW6=5L4)O;^l54B6EOlaX4*'ku:#:_Fp89t.#pu38XQ0KYt6AG]cPJ(H.%n5=R,ăU"oR;Y0$5]poi\dQctjJqy'Le*O0U7gKCxkFAU^G(%P3,?8Dca<Ot\#v/GHoAb)6KăU"]5\l&KQt^KQS_ZD_xn5Yag*YM[U;:=#IK,G>SW-G]S_yR'4B/8d7B;HH<]'IJo^ăU"[iZ+HE&rhUID*nURcXaG.=LC<V*K+L4d:HdB-rQF?mtwsB0Ed)BSnk#b4hFqQAFăU".OfsH#7c8eK4i,8^i9'%G/#*=YyG:>b29E8cY-CK,>R29Jj26\6,tb1HL;nqN^,ăU"2tC,IIq3$PP=i]8Mk4j)6Js*_G&JOq(U]QK7c;t^4LdI>gAy*M<,DjjnCHlP1Y.ăU"iB5tjDw1th;?C*>Sy<F\EO)YXA^+Xd1=QumVN9Iv4R$J&pXj;'wOkZK(JQWk+FnăU"89tV5p5)9/b)>SYyFFU[:8^+JTj(/ZiLv-c*&vX>yQ'WE*KMxJ_yEVEk9[/1WM*ăU":r$5<c2Za0vI;=So&<*+F27*lHqRn5n#r-_.\Pf-SD%/5Q-/N*Ulqj^77*f$J[UăU"-fT[/1gI-/3U+=dsJD4fIX0m1gI/^'R5-f&Sj:Rldw2#-_fPRf-S%e/5Q/cNnUqăEND SUBăSUB V2ăU"6igng'IN-1=gI/'nR5-&B9E)<hzz4iK:t-P&or)+?:Y/G22:Fa(ZPfUu1&AtZ/-ăU".jVmc9/Y2i$>8N,Sike:UZ<SL0:I=)Rv%HU-+?:Y/GV0/iiX>5x^/N3<Sm71'VHăU"dA'Rgl2_?8EmiFMt+B:*3$a_WR:gk*Bg?B9C1Sw'OKLDW>b*sdmcz_TH>-(V/?*ăU"7'u(zVWK\(fqAz2>n<r^*1&yZ1WYcsk5<sIpJ%jE6cG]z)L2bryXZ>l&_Xb1SOQăU"S$GRb1WJH$NSqfj[%;JUEt'.OTwOrQiC\n5r/Y4Ukkn;Ts7r5n43zN#\v)\'9h^ăU"]vn=EX8:Y+*JG(Lk2U<(nfOO]O//5mjm:dRfEkaj3]bcVG=:hesQdQ[EFaU8[v=ăU":A0^mff(W0YcL*RBt^[?W?QVoIx_wu:N1=;%q#y[^6jZC(Jl/E)+%W$It?VrAjCăU"rUJt4+stnfHIR-utUkf<HnC.^+6nfJ-bU1#twOyibi*L,IkUoP6[%jO$3ofL/EVăU"3P(o_f]GhO?[R:RF*wI0+eB+No<HNRj>9pc&KOd(9P%X(,kcLm3I[^\3%y2j:VqăU"cBQigqsL$o9V<D'=;\d(?duoos,a]pf><'pKyf#U]p9cpc&OLd(9%NX(,c(xmkoăU"AyzKx)Uq/v*C3f#6Xu=TWb&jy(]t1oQ^hZy3tRyE^=kJ.YJ'BOsMJnMutO<UOi^ăU"cvM$a9dgna&#M%WyxrYwJg:Qj8R>j#1CjU1[:s4XvdUSa46oN?Jq0MKyU7:^R\.ăU".SEnE;cj0*exqWhx2Z1/(Rar3r<17,uuaoEWSN4t_=V<(/RIqf/+R,UIFHYp;,oăU"K+xb$P]Erq;b3jo.gaM%4J3R$;._.6$_e$YG24Z)xiibRvhL_Qpe39R<_'CrpCKăU"q<IH'e[yaR.VF)Y09q/dqIVHEfWsD0$LnJB$WUhs.Ia7%+2cr#z+'/6=J]G[?C]ăU"DXMU=W?v>Ng,<Tdk0i.x<^>4m)=r:\=o;k=C/uoTm=\Ef$[ew2]/yc$<[_ku/<RăU"$M)gN#G:Ta?&O[?4?ok<B2X1/%zls%)mFgH:\upIS]in22A=#Ft;;vfHi_dYGV#ăU"=W&=g_H$/lM])1U9j&x$[dK<C]/SRXyq5w$sLu_>Q:2w1#'[A3af5(5i^4L^(qUăU"^?BdAvL\US.Yd+2=Mg*9AdRv=[2^ArUD]X=[CUsWRnaiG6RC+XN3hJ,i6\Fn1G5ăU"DldjRg:d&wi#U_(p]$S5hUzDh*O)TD5%i^'NY<NB4aOOyvUwO=-%Hb.-jS&J8)+ăU"r$Z?(W7:6ILJL^_K1eLJEB9(8cdQmv9tPX<8a%WoYMS&GSNuGe<E6N-O1GfKin,ăU"DeF:nr)ZIQcXY,M0fr%eai(kef7/EER4]=lkRu]]:YG+B2ClN*&Mg\80<hYX,M<ăU"0f%;PxDY+4+2MlX+Vr.p4RhvQmt,cTeLh9$(-vX)sT2PsKoK'Lnn-AN_$eDd^WRăU"glVr%u,ygrQhGt+2_jx[/P&(w>6K;U:O8tYIEmaXF-.1*=(aF+LW&&(sS>b%giQăU",VpJqN*+H2;E*R<+NVgjj,TnF_6tcwXhPE%(1EqK.MWsD5Sh:[+tJJUs+/[51gTăU"d/1=GfYdLi(_Cz'_R/5S)%/51sgTcUX>Mhqj7n4IiO.j:?0xf26a+Dn.1w?dK*0ăU"R\+]0c=nS3J>FUa'qdUa_:Asc=S+;d?=831:E;CQ3mj+Rs$m5+V[HC27R/FdK80ăU"3a,UYRFSjhqY$<g>3:h5WKHWFm?;s3MBrGQ>r'NR7aRzXW036/=$Yr.VMV9AROVăU"1^uTZstcl7p^JV4?$XAttGVaD]Rd]s79pa(Y\MlyW/jE^fYhNarH*V'wUa\:*axăU"pKaI1>cBMeb._?>2>n'K]POi'y$jglDaR<30>S2X6%$RWVkg:&sjuC#tbX*hjlBăU".8+4=dXMlpo6dwk69t:Tc4x$,qavJf7.><1E+V>c_0\fb+vp,nJg1*Xu:0wv,V6ăU"IL*%c\od7LBVdGWTK;93uv2lKy[)A=<#gx>6<^yL+Il&O1/)4?UG_#o%-=Vf10)ăU"R9mCJn<R;BKxnC,d]kj27K0lYtAqxO5UUijj:B4f]V%+3V3s*W)hk;$;ob.ssrHăU"XdUCa#[,Wm\YQ<qc(smfZlT=h$OkCv9RPu9o7Oj?nCx$O'uS]mA2jdAw1Ub5hj?ăU"?$Cer=sVt6nBQmNUQWS_vG(BpKmGBc1o^gP)\:s\x\#_,s;^^_,p;tU*8Qk,?*8ăU"7Oj?nUx$C.,$cGpJ(Lhhe'tB3>w38#o313h;Zy)HBxQoQOfbkD&>gKSJ2uiCem]ăU"Rfg/0B(:>HCs[#K03YM0n3-^5**_B]K\?S]mM8gz,M)UQ.la1WZhaQRxPssZp:qăU"5^?XDBw=s6mWS1>*EYV'X<rSQe<teREtR8W<qm1hrwAW)Qlvx'0yy[/iCl%;R$aăU"YC=3dXk2t^YdJVG$?WTdndRfm+$LUjb]>kv^B5*$rMu=xw&;Yb7f,w\UX=b2/=+ăU"VT8[W+1G.:.bpV_veCo(\'\6sV]AN_%m;-:GMwI*pBRAric49$5MvAmh=cB84ObăU"\0#Wqb?xbT3FU#1(=+E^MH-Q:>F[Dc9kLfy:oCeK7krfuJ-Fn-Z^Q&;\Nebu7b>ăU"^ap'RKL5kcBW6np3StU:PxEllZs(Kn\w<:bwaPLk'%YrQ<MrS^_:1yg0XO3/M(AăU"VbAoUaVXjq_m7heZ[N>)rM5J]jfZoMCK.ckB^x6L\p1iE$K>;]lT+DQAAnveb]eăU"2/=ZYb2RX&:MixgK;Uk[;:yDMdBCw9NbG92/2nb8KFt4X'p6HhB1YbvBTh43XbbăU"HS.Q),2_Z?lHR6VA1*R:k['?_3NMinwGb:vqS'h8.e[8Ea-OeROohTvf0$2DaGhăU"u??D)&Sf7,8b1S/B-(U1t_?#$Z>YdBUUC<s;B%3oE]+WmHP#-'/^r$CM*<AU/3wăU"aF6tt8#>tV&/WBotp(?HOd0,b[jQ[JX](1yky3q4?UM9eKf[jXc'(U7PU&R;h?săU"D(=Yt:pXfGwvOXFt^7a#Q#Kl-,KzGr$ajAF.4C4%veYV7$hkKD/VIR>F?hX$l\găU">rY,le]KE/CD6fy'uXHB)'24SNM^IM_J[rMvLxJ*UZ&kea)I?ncIlDLv48TXX'QăU"K^)g<gC3B2Wqeq)eg_,ajAr4Isy.f1hY:pKDXX[W=bCsi_r:K]>-dU]Z:JidNvLăU"r#fqVJUP,8?F]Dy(n[yt2&L4_j>H:W38R:M&iwY)I+40_DSl*RtNplp8In7S1oHăU"rIe#Wl5sUPbs9B0dSrR&n+%=7=aegfmQ0.V7T4[WY*k(>CkgG,vdmLT%4;3.N0:ăU"1Q:zRT[WYC*(R#/%SPf1UGU1>Mh:t3tY[R[mNKSuU=bs?V)gGD2Yf4/,=c[/Zf8ăU".tRKit'YnV-9^wxihyF>],,>h=?5Ah[?5Mpj?P7]E%JU-+p:RXvfh4o.7*+:EO=ăU"U%/d51Q:\<*+:RE=U%&/51Ks1wF<:4pg')R/51&=PU-s+:Y/g'R/)6GY.b9s>MjăU"A/51Q*:<*+]:E=U)%/51pS2iN-x2,R#8=)RM/?*P%fU-+'0:=)_R,=u;Z^gh(jPăU"fU7-+0:I=)R/2?*Pf[U-+0#:=)RS:Uql,^x0o7)+:EO=U%/d51Q:\<*+:cYS17-ăU"kB(m./1QfsU1&9#E=)RBT/1Q]:HXq_6nc5)APfUd-+,J6WO=YGZ:[tS-1/9\:UmăU";69YdU(mmR0k:GjX2Kxx*UI(,UGGMB9:1)xRPOfOvsi_JDP*m;1r=o&OJZf(($OăU"&1SkxW)=Jo#KZ5md&+[+L>u_b.acmG?8g3ft.585(qO>Y+chaaS=-jhE/W5lvefăU"(:/>qtyJqh6SH4U>yEn:AR[E0'I+\+MrE9,A/51y]JS1W8[V%U4=N$NfD=k%YK,ăU"#?:SRJPgw3_\6:Y(XlQ;q%fs5^Gk4IlKBFq+Zn&QFxrT6nC-kpf$0TGR2$9(1WBăU"eV)ROLG/M9.<,stb:s^p_f:2:EO:xY2iT^adcGp)di#[fdg\+*kQ0=VkkB1g+86ăU"'cxq1W7=1tW9Q7:EL=sb0M_EN\up.VX-Z.hj#+<u_4Xai2^(R<B5otQK&ffyXF>ăU"3^OE:3Kbj13(k#Cb>*5X:jN^1Z:9\/l+8?n]\SSAT,(k0DUeIM4D3;_E0-QT&HFăU"'me+<3XrFNpE0ganI1_&G>?=Qf:X1I2]%Us8efS(eGERgVDMdcJnzB6eJ-R0+NuăU"^>00]Ng(KiC=g)Rv9rYs&#rY\9IFBFj4(+,1.[1?+86r]bSMAFJ%D'-f\]_hLGiăU"Ysw9e/yb?=1_x9rGlQF9:1W-+1:E=o-h$GaEf%%+X1%hg'R/)%U)+H1+861cYS1ăU"_gd]Q:H?YDM$o8<2&*bPQ$(/Th\*L=-eX6R-XXteabl,Y0%*=aHU+,,0lP?oWM$ăU"lxOK71aHJEN0_IdL2*'I3eU&GS1;:j6GE4Rsk1VhJm9K-HRb?HiCwd)+^G]Y\ctăU"Rj<2f%ija,lp>YcsxEYF[ChU15O:jb/UvLU.-+HMk6)hTb]o4_ETpx/;_9HrCizăU"(RV/?'7d*+>oB%Jr,0$on<9F>-hA/51-U%RD5>Au$K;76C4j+(Y:f(dLU^jZfYaăU"^1TO6&xc>Ps<mr>^'lH=Xa7RQ\G%L'(?=)YRJtq4n(KK:l5IR>'uE[I=)RvNE/CăU"L1K.ffct(A8Ra+TUPO:b4Ei:tnqC$4NZ'R)s*;XU=(:3%P.1s1m>B7TUtiKUHEBăU"'+brnQ:,M2?%g4$-[fipPuuqZm]pb;4&'clm>-:x)?ER.%jhff05IDi3uhJ3uh1ăU"f)^bhh0J4u>,p]r*K5n%nZ13XZjDLmTn1(l1I&zd'<0+tYP:(M$w(<2%TlbqhAyăU"ML[y\f]s,]qJnXKt55?,>dEwW&3F1RIOKrbIh?^w6.UW&+4UuMPLK,2nrn6+f(/ăU"S[:S>RJmCTY>WzJ0uMf_c1uwDHZ_RMbNFxlGYIX>4Js;C&[=CA:;>35ZcOf(UGVăU"19_=3h&:X]N^U7>uQvHnE;$JV;Q<9/F#+HR2riEAv$T6031XO/5C1-+Rf,Usq'WăU")=)qR/i[m>Iu6I.UGp#1;VscjXD-#1K=Q]:z>uQC,v,<]-0Om+1'=n/*<>%1[%4ăU"q3_ipX,:YD#Xmxn1<,df?;XZbU;RO+4+&lE5ROY1#O$?RVFR8TiVkbHdrUR'.J1ăU"%1DN^c6?iDHc/.tefPe3>G[w1oVPq#i3Y_NI2:BV:KGDv<nh,9Ax7+MDWuA3pGSăU"zQnh&<.E=p)RP9?Y+$,':E=)VR/i9p>KrRE,]'RA/51Q%fU-+':E=)qR/)G3YfmăU"d.$u/5(1QfU7-+:EI=)R/.51Qf[U-+H,$:TcJN[&/.51Qf[U-+:#E=)RA/51E51ăU"iHfA/51Q%fU-+':E=))R/51Wo6itQ$H,P%fU-+':E=))R/51\QfU1C_RT-?u89EăU"I=)R/d51Q:*d25+MR<1\-:x*u%p()9%%%%-%%^*aFRf2f*2m*%.%[;%%%0%%L%%ăU"84JFhCALS1<?rfkV&#H\1TRL2]H#pm**XeW0VC9_GuE-Lm.2Y04)&)G44LJ9;3oăU"h,U>'n1jBSMCx-t/xujuvh\B?p#HDq^n8wutrfq\%taGlxlJv?2qr*Z]u;u3sH+ăU"j^s,5+>0Zi#J<#p,sd2v&,=70'l.luuZkj.8p0FW<39,'SM&janr(MGM,\A&P8lăU"5WtmJ\/5[^cd(KhJ2R&p_kj)o'GPNv?_#YEnn:\)6mgVA+qt$([puno?cMZOdtSăU"%GK^K0DtXPc+_*hDNGj265?=jl1Q^wd)qYX.DWYeT5gt8542M/np-Ha$7N+D,#)ăU"+X?(M;P0[r)H]1<%lfrg<[t63YveCUzUGi?]QsP$]u&khPd&\EY*0Hi*Un$*xrTăU"-ZmB+1euYlP,j>XJmrLtIEHjgxQ>/UhMC)aO8M4_;sSmsl6Yv)C*iF)n>Pq)t*XăU"G,&r(dOFvO\kGiy\^:+.Gh)[zu]*^d]eES/Bep&Y&7x;O7VFEP^cS/7FP8NzAVOăU"q%L:PGu:%dJHO/_x#$5/UIa4coR$J&gP#Q*^sz^&6$A_1/%qQjt-3q4Eve8_x*IăU"GsqN$=Upq.0BN#d,M#&WQK-nL/AOy,rN^XDA/vvYAn^^dRvj'nu;>T$\6jsZ6uqăU",aAu,&M)=_xvHvMy(&M/6ZKVtYk+G7%^t-x7U+3sR]mKK+uKUKv+X>3dv4ve_8KăU"YK(Mr+q/&;t_Jtu0=a#d'_sq7nnQZl*u_DYriLx>MoB&5rjMOBObp1pR+j,47?lăU"JEcvV</X>Bq/mPV4jdfv;BU*H9NvSnX2Lr8lFdw?\Qa72#fMtC4GwEkY&noM+s=ăU"2l,:G6>qFJJt4H5pft8I8tFO$(jx5st8Us.NR^ACv^(n)?tu=yU4wPm;M?)bCX:ăU"Zb#(-=%]hIamM?BIKRaJ9uy%$]3BvvGwn85o_qWbAvVsFT5c1)*:'[\Y5*P]O$CăU"j>9jxb'YFjCz5k'G'ER(btNWKrn%oLiw]Yuv3QG\((rO]8V=t\1<#5eC;bMesx\ăU"*yjVY$(d6#1E4MsbxA,lfpEuQdnz7?FTFtkJxrwR0;k/s^k%5Wr8hn<4N^TW+-făU"RkXO&gTj(?$]#zd>:C<;wPc_6VOGp]%1Jw&3,=+nycNkvXWxw8w7\lKRHfihUj)ăU",RDPUek4XNJHDn\x:?OWK^IdiJc#+G>tYSU$+JTFi0j?/Mr.UNi4R6MswD0dE/GăU"_<B7nLXL^'SzKuOB\=cK?MHU*ZLY#3>]Y\STEQ5n[:R:),K>4c'>%kxivCYOWFcăU"qC9ufp90B]u9sWs2'Q7NLZR<c>^)Jeist<rBKLw#*4Er0/GVySG^=aa0EDgmMIAăU"kTE$,fC^a97wuUXvLv_IZSl\QJHqq9>f_sDT9%rDY+d3i5LMCDiqvT6c$kwhcaNăU"^D;2s$Zc:kBR+:j$b=ix[&YQ.NeMg0gfjxQ>ne)Y$nsd*sdj<=j2IPSQR++)n]LăU"x96;[>ox_WIawVYnmwAXZ7+k^#FvYko$ITn]Y,qMY6=VlljBU3Y_-XeXavq7zu*ăU"/8dvu]-tsBOSd_ziuPnitMGdTg4JN=aLqNPUgNMZV_nVAWCmC]>2HxD/DQK&fk^ăU"M3)(+mdA,hdVmEYA7u[ks)#G:VMNM%Mi8Z4jXG]9MAEvOKMeuLnY9#?:zGSvUU>ăU"#)ahsE6WFD^6)M'qLV5lh6MuTat9s/eD-s)2[<Bc/]Rjl\71FPzsh_Lx0a2:weqăU"f4ZMxl4dLA?sE2D[#7dA3tk6l,(SvVVh8hLPef#*WDcM7FU^6X>OlvCJ8tE4ZXdăU"t/_H1lWMlMGjkux5w7>;PGeI[A6&lvq\/n\5suow0ki'lTup%()9%%%%-%0-11RăU"M.ym=&_-%%&9N%%%1%%%Lx0<?);4UVLS723Vd)T=##\5Lg<oNIs,Q;kmsc_KIERăU"QsI4j>>(sq9S/;0?AsYrtks12d^*gpQ0SeQj?JUX6UuMe%WYM4vGYBQ6IrjIpslăU"cZ9pu_s_)ZVYfju\vfNl<hVtu(P#4VZlS=WWN4LkNuKq&id=RjDX,XlB#7^i\V^ăU"x[Ccb]YP1V+YmrQ=n-Cw2H7T:(aV[^;6h(=4\_:p+6np.DriEpgYy7Bg^=,U5d:ăU"1>/nj<X>iu_n^YnOk%56p-Co84<p'u6hVV^te&Ew6SEP5Q=MEv#T?u=#uEo;SxDăU"6;?<\W(MU+EXLccpN(I]k8O.e<knBttjRufuqXZ7+-TQAuk)?tr5kHi\Vt4#UfXăU"w_rZ7^&p,iCcg*[HNVs4j_f>h]=(D&\\IeVk[8SL\uW]9amb5/a?fY-<HO2FnNZăU"vv^Gj4J;DXuw_rCUi16kR&bZ[p\D0ELGXk/VAj3Q+RGgT_\<#GiW1v=W--v5XS9ăU"ud(MX=)I+<j_z#H\5M.ORO0qdOnb*O\tM]Q.*\pMg/5ZmFPtbGi^)K#'/0'+HPpăU"Nw8pFo#jN>KssOR?i%%'ns&.\&f0B=dO*CgpgMB&T;Ld)n^AdgDEcMs>XxE+bVtăU":2OJW8hg_6.oR1L/D0/IF?$wZ3Y7x.*(<0FR,yQ^<a_oc(KtyXjN/b;K)\9W.VZăU"bw/(Iaz'9qz5ltD'.ngjP:1FwzJmR&OYkgU:fQ%/4F8-+0\ARXcU;55_UEeRq[MăU"4F+IJnJ\Z>p.Bf$BHx6qGEOs>/6\iUI)M/Kpc(>]S*8*7rN,4i:*4_Cx#ol7^x&ăU"n?]D4?U-tP-]1jMCIAsU*p)rE^4A44].ss-+E]s:2^mw$D)ocnBM-e0xSbNVMk/ăU"GF_%OkO\F'>eUC+AsGRHP]L^;[p^dpKNlZh&oEn7]jqJuvM/R,974dWJrQ%NR7+ăU"#rr.:^JEY%9nLGqP8H&n6Ow?Jh0g$+L]tRisR)=m1A:,-P5'BPp.NkV=uK-j2$;ăU"xAR'_/TDWn/i#J7C$KIG#u/=&t/Gt.gkH-/(xO>M9[PI'#PVhhj\*#wZrKSPzdbăU"#^9KrBeH75hauX9W1&/3e$0Dq,WAG*7UU;[=p#[goPFn&2XTrFKa[=;?Hb*Cz$OăU"N&aB0XUuNHd8c^M:bs-CNaQam/6j_c;CLSu*7av;b#/Xxe9-i_6J&(=:X2,)tXmăU"bJRd86%1P[J9/M(qUaSnt$XI?u#ue]RE&/T_s+Wp7DQm<Zq.#lBRpQk;qcg0p%HăU"2X/zFgzJ'KIM&5MPlKSzj;ZVSnsYL=u6<nEArrpen?z,or'rBnp\e;N*Gh$p_xHăU"c(D'9tYDbIwFYBBBNcWgw15)c<TktbXJ%vYC>/e>3tn4>=GKFW+/cn,q'?*GEWIăU"Bt4h4s$6>OAd6h4v$6>Q'GYuPX>v*a#^VopksDmuUWAHVFHn.EiaRPX+e9;I%f/ăU"0(KmEk%5p5P\x?.[&s,:-6[>Qi&_ERQ%Z5M;#m6mYQPu3e=0\K+M/oyoh2/8I+NăU"HU-9:2_C'GC&>mPoC-7qLl6Cw)W]JP],9$#?2OMMpu=/1b;xW_u%VY,CucEn/9răU"#;l-EMt5MYXVKD3CE[ntik-R'\CIY\9/=L(4hnb?g9znMSoyus7+nL:A,<kKO&kăU"b=R#&kb(jt%u0FeJVVDGPo_z:wI'PZN=*ci9ifB*8?6&m2EZF1>X)%s>-X\+-4<ăU"Uqv',8Dme(,umX3I%:NWaY.Kpr.%^;:UK=f0Qma_uWvmgIS^/.Y^&E[_KUC:WUIăU"I/Pve65^7W=4jH'=((r=.<aS9M]#med%(k^k%'/'VDY4a)7#UCVYUISOCv]VSJ%ăU"+[A/[F+4/Zv[F9mO=MEsD'2//92-Bf.VYLVS>N+=^>h87n9M'H=g<1g[11*rihAăU"]%^ib0lZVM;Lp_58tTMAPqmTi:hc7u;BWK<f?AqX0OZVM;Lp_5/t4L,?2:=mFedăU"&0Elc)S?D[/)L&tl]])V7I;N_)V47IPe'QaH&dR-SFRX7IT+eQa0#[_4AN([$O9ăU"_(;;ewI=MD4r'2C-,,S+RIgNObWn*MP8w:7wuNZUNwdiR9Y^eV./=r2zO;-)[GYăU"7/_2P6D^%g_E4X1SIygBn>Pn/pGsnGsQ+($%UwwZ$C3Pj*9S)[NLlD#d9SIF&c2ăU"<oDa$-,Y,;#OyKR+F6XNcdLV*)AqC6Oq[*-cjHC%x=8CRZpNi]1s>1Qy:IM2s;oăU"'5k[KTC+c:Ms2s4d$O;]M2q;oT=SpksNcCVQa=:M%4IdNV&w+t78n2g2h\sqncPăU"MRcACi2ggp\-RqYswW-rbql3=f,MPQ'=]Gx[]q%vh*+Fp$hn^2M==VoQeT6Rjt;ăU";oYs^hf2A-B.CrM]xp_R\A>dLeGpcAoaS<N4PaQa/2YdI+oZ$<7O5u;1[mz3]T.ăU"D[o\%%iLlPSjy/4WJL9f5P$5?HS0s'VCNLMxLp.]-[UPyN/t<vM2Lw-o1\].y2răU"O$R5yqDZS9=Rsk9Y&AD=[cVE#-oVdC#ua1xI;A5rXpLt\J$m310[c5v#xVEskCvăU"b:m$mg]()]G8o](,)]Nd%sifgGv#Eq#EfvM_kWoTPSkRQE2C?H4L;XMXmYFW$krăU"&ZbngC(Okx82^fHbsuX:FaSN,0r9xBUr<wBUt*wBaqEwBa]NwF?(R?kKen[/+-9ăU"ihlH6AK1I*F^Ep)Z$Yd4u#dKONfUw:Eu:m]S5v^EP,Ua%[T9o_oAilAMy-rQx-văU"ql]_rquX:La=d#\UusX:N$aN,P,bxA\bbxA0trxHtF.UtF;nF#TZ40mf&atPMY^ăU"f_N%up()%9%%%.-%v(\2RU,4MxU9I%%S+%%%3%#%%xC2>=4mM4=64LS723VdkT]ăU"IAn=U9h*aB9m%cgE?X6#]2,TON?1K0?9issZ4T4_%VH&?=RY#\'rXW$=HcHAUt2ăU"3uhd[Yu0A]$qY%vjnsdv^#oP48tcFhdu?wLptsDwiru#PphHeHdKZvoLvuhxrsZăU"f$H.<8Ku5uW8tZnndvi<n>(dGNu5:o?dxm<rZvXi.]Nwrt.w$un(XnpgWhXH6udăU"NuW8tfBddcN6rY>+l>(HlL4nMI-.p'juj8vuuVwui8vt\4VdPS4foL3ol#tF8<răU".\4UzNvNXV[Hws/uolpdMprNT.NKpZLm0Zb^gNE#sozs.w\tTPT(jTadeFHtqfYăU"s/,w&0xT<Y3)F'(?JX)*S>v-zF;pSif0-jVdMz>Kha,$6.rD<wXXM]<W;5e8oT#ăU"NJ_wyQSG*IMh)E4,3ej\Yo+lE(^qc1hT,p0a?M4J8RR_ydAX$1L79Mq>UN1r,]]ăU"j%Dc4L,/O#(ak:8,3iWg?d[r.Y?dU+KTTtX*xR6s8?rPrGtxsrlNxvKd\JzrWElăU"xEG&z$.gSzkn5i6uswGPlV#L3;(xRZ<\nctPldJM3rU]_LQ^gf%3?O=,'IIuz?băU"naB^b,t1[St\AJM(HIFh:2ml(D=\pW.(WEJ5ubhopr$QdvGR?E<.B8QW6HkU6v^ăU"p2#87c-0^40*.PJ/$C#P,*l^8c/2j:%J<BRJv;5VplW3IKk;..qUP\K;^(^<p_9ăU"O]Gm?qD57kW^fp=1.Ajs8IYJgb4ZbC/c4(aT8sJ.$D'omwxD^*bC2J(cpHbFm&eăU",b*sPXa<0]>]p=DF3Gxh>at0?oOTGfbS$$ugk_V#Vv]X0_3BakD1WMIWT82Ba>0ăU"]bZCn-/CMv3%<vBGFkXk^sqOH+o2t4u-O$G007P_S/Zrk0a#T&k)A0S$+a]gYEoăU"okIGcJHblN,;bW+l3+Oiv<b8.i+B+xgn91sqhh<[x<jkcWuHUx^r<oObBC>(/mNăU"]$c<RIct'nfta0+VMeFLuOfU$.G0v^i-E)\,8kb.fLI+3TFx0ZH)5rsqv-pb1gTăU"D7XS6/Br(Z%8:ru.xe+P&;RU.$-0FTbPe(g63,v/2sbt/.v+6Mv1_DEZE:yp0lrăU"QACWjW.VwQ6ngvte/l=#uD^uORs=noLh/WJi^Svee'qqmMOSH65uWbTanJvVeDZăU"cY:I/OKCZ8.am^7.J>0y+N+EkYdRM:SdwA6)owXmS?cMKKM=wqwUZ5P.i4JcMQ+ăU"=x4&QwjnIp42kV1HMo^<uh+D6nCy(iw;/?YgkmE6c_z[y;s2(+d*y9'ndgOOPw<ăU"Lfd:%VF)Cr=nTK%Na^+3KL.#=#.Dg(0lhVNF?q3_Fi(Q<%VybdOyIFOqs9^M1hnăU"jk:qOk-(ry*zD7jDqpF\;Hb<LgT<'8lgiT=7DOqT=724p<\T-=*)uNe&ocV(/TmăU"h#CSg;ZzbgWwtQ=y,/bdaY)LrNh$/pc5ZJYIc6^-/kMGoTK,tG]IIw$)U/V\kfRăU"Q;Am&5*;QP\]5FS5\A(AKd'QF=/HFe#A3D]la&T;0Y0.QCuWdA>ht.[UVed1=e*ăU"#%L^Zy#HF_C-b\1q/%HTYcA$rpp+<oHx/(&ZRYr^<+pkjKr/hozDbT0T5A^([-dăU"[1Q\=^;Dr=_ARA\\QQ\E%6$I;rKeo*B,ROXjS;t&*h$_y4Z=LRN83*o,x.Yt;pWăU"\1CpxpWMVMaCI:G&Ah=[\Kqe7MBJ(3[1AZygka#P>29VF0*c2VFp=*2VE2JoFgSăU"=\AW3q)Myrv8RP/81q#P,h<8MYtvzONa#irpO/Q$+d](F4TG.tikb%A7HLo*a^răU"thF(iSEI81ga[BVoLbUH3<V9\'du;%2DPd*%;=7dgRP\1<E:d#-Q%3q2'3nAP:YăU"WsVIf9G9&iVizT0aVy83Akj(CapoQli5;DftdCZ$X/0lT%#8Jyzf-(V1^cH3srHăU"BhZa9:o4WN16amv*^UZTE%A(*U;'2phdT%'q#<=MAJN_e*T*m>nDdL&eLCTU9ojăU"Ro%M$gnL[\A.J?V1a^C(L>*Z9I$)iAoXgSq/JgJxFA]4,#NfRv]+'F1;:Xt5filăU"0=T0G,lG;=cl/#uW5i/O#WAi<^(?^e3coF?kr1eYo6(mX]G;o0D9zLWF<dHsz7>ăU"DB7O<UVE)fD)kTV)Y.flKl)AK[ed#/A6G9AhCQ0Feg#3Z$UL320heCmgW4\,/93ăU"TDm$kH>fR[s>f3JK%mR^TH0D2*k'_mZN)l]o48DJ8_nu)e$<.#>QXc(U&0U*'gWăU"'tgQ\NAD*_E^U>(VULGfhM[-i.nd2EEd?QuACUl.RrpHVhF1zmY/GFfobaMAsoeăU"D82t2-yP.xZQM40=FcE+U0=$_3Uo0$_/aU0$_e=,5M[VvdGqvvth*_OqRT*f.yrăU"7tm_bp-^hcVW]hD&G_t<Tb'w[NcZZr2f7Qc93VltwPW?F>$sJk8l)?Gr08t<U/_ăU">^x=]DTENPo:WPC2k8.eRrogQUM#?6,>F0RDUVx3^p/i0cMeVv-)BjxHp&^X-L<ăU"\b96g<<uC\,4$r^s)M>W2mzV&u1n.,D,htV^ubP0_c:0IC6uT2K.H/KKd#fMarCăEND SUBăSUB V3ăU"L2z]bdsyZD+tr3iu^,jf(A\_R+QODhO40Kz2:s3vP1MG,pl%oQAoHIf-5E7pD\'ăU"%Ujmxc<0)uNc#iQsLN\;fkkG[B[2;fk6D^vtk$faX[k(nX,q,#sl?Y&b5??\RrlăU"/ulG3ttt2$Ku#mXK4<91fnHM5LGWiNDWg.GsLL>OH<_C#g*zy=RcTU4jT]Y4-V^ăU"iAlvbu4c4Z]IKswAQ#S5%<2RfXu%UI[PxuX%D=?R[$OpvUqOV_O(yF92bkT;cQUăU"MUzI*p\eDeU6CItNxyQR$u8[)O?/c-VRI8hzNB,nn/=jTfspZ0mJ5i4.(K+VJ7FăU"S6y22_dhzg,/d1PO\-<u8d$Ucqe[?UYJGpW<24STDqtfKUB=b<uOe:u-59Q0/QzăU"r6AF$kFP^16-UpQq1KMuMn/0Hct$,69jt[s=TrgGlElTgGDZETgGP4_<Ff5_;cIăU"WP>=trOY>C7i_cmJT1/UFyl'tCmdW1YvV_%<FS)'/H;pq-xd24$Ctb3m\03WH2;ăU"oex,mMa-tIHqyfGMI[(oK-_=O\<)es]-<C2RMmJn7]^3\HW1A#*$Y&yRuM.T&boăU":k,XLjl5G2B4,P734vawo*UtDlJFD5h.eutaoMjHd0T'oEp:-LLKTpr<=mj)P21ăU"&^9*'pF\cM:MBLcc,C2%ntcG)eAh:2n^X&UrY)k\\[P\5,ewu4^gFGnsUWO3u>UăU"*CrK%#%oSkW0k-[xXK7ngLL3c0DHV>IZ9MHu-U;BPg>e/QCWF#Pmk^2_ssh$Jk8ăU"_F__cl/$W=[l/$oWcl/U#-DN;kHT23(\zb\<7B\r3v%k2rwfV4ddZkqwp/?;\*WăU"DqZdkI?Y2E^<J7242Z,i'V[VaE/Fb/xJ,m<dJ8it*&>A4J,D\x<k6TQE=RDENC\ăU"oWRKC28lan^+.iFwA<Y94[%^Dj9]5E%4tp?.Dk7%T;R9VCcfooSWK5koy\k^l)-ăU");VCFtI]Aw^m'4kIlOHX3qqt_93B3?>E?Jw42P)oKDv==Erhx=+el1O1\s4KAd#ăU"yhjv^UN:kyFf'6_[Igc]eZA7Hae#H4aqN\txY9dCIDm;=juCaw:;UHkXncY?6F<ăU"H9NUQ,/:%s$+G%rfiNkU?6OEi<i6OZ/)wAq#uxe$NlMeZv.Nl-xsjv6wF-9EDIUăU"zDwEi1DMfkV^iaEB(iav$WQW=52ViYm.))lmue%.>7eiFjqPWe33fY[aP/I<JG0ăU";US&T.HUJ<xHeoZ]-JG4;aS0EOW,6EB5_a+]dE_r4glrq<]QuI:#0gvq9SKvQ30ăU"59[M;#yWb#LdR1I';t\M/uL/1AY2X/63N]Xk0jqk3=[/U)EmL_)Nz.Ql8:SF[)DăU"v9'wQY=MRqbNrlY*=#Q)=RA1;'[%fV0&W?oQwU=[rWVh(A/oENEEIg+2-)/5;W:ăU"=Bt7d#:V2U7EPb^'p%-/-%p)*-,%>P[rehBgR5G?Zl,UPJrE5br['dAi.r/E-;yăU"+>o8E-sSiKf;60p'6mE5'+)bo=2UmC#&\ht+J3SmxUhPeC-+'0Xf5BWO)D0;W?PăU"F3SS;yE(ll'h)JH*40;rQku*diC/\j.c[9lHHgLxrHP-s,U3(bxU2db>_24uIb'ăU")dpL*mWZYMFUZ-uqS(AU[GxlQ,w9tWD)I])tf_k+=v:<Y2Blg6U5$TH3E[/3D\xăU"H;(Kg0(1bx?]AOAmUem9w38mAAQe32gZ.6I)(e5FB)'Ypw,N;+F:99+TC)0g.PmăU"#:D>&h.PXhQ4VY#8WH'HC;q'TRq)v(BuL<5%Pb(*.pL*-c'L*'+L<[_;d>WDaR[ăU";;d(AAn'#/C+k>Cm-Q)z[cQo-;)24KAM]Hr]+BKYDWjX*6J0ZPDiFS<apnTVnJsăU"ewu%YjN6'cLrx2YSanIa/s=fQ+XwLwFBR-=[5OPT=Iv(wb=X&D^\m*mf>(C*]28ăU"d2OT=_I6wlE'pTfDUpTtggd%2AqgW&r'wE>u/RSbLMg^<HL.x*hhb<l6.lW%TbcăU"dl[oR/*-Wb=*XInmfG)<A<Pj,l)T<af]*WxY3,L2Y2/LNd^6TIfxDdpTvCW<5$*ăU"J0e[cTOpQkw2_;'/:8[R_uA*WTibCd3E&6[F$g#I/.9*L[0rE7fwS;%3csoQ]a)ăU"?m8OH43o++30f^mA<SB5_Z-8;R6nIW3%s'??Ovl4oLF7urD6]^%5?QG=D:7-$[(ăU"Bb]\S6JlQAT+)Z%\9Rk>l9*ea(\csvg_st.Ad'0x*.$Qm$KL<PnlFMNZGlf$%_,ăU"pjoHLs%AM[FhO<h^%g+u)CMEPU#_Uo3\V+QXC;jKR&7)G-i?x+ZA3[bWXPGnoK3ăU"v2Z5hs.RIX/,GNGL0WPnlh;RW6Rli%U1iA-wv9=jogK#t+S&ju^i<Yv\LFS+<9:ăU"D#JlExo_$B4-\0DAs_,ANS4Vrwc(?UhNC&cL'd$Fhs7JXQF/oX3Dp'_i?fb>dh*ăU"Y3$Q9PQe*PueIu/^njQF5JGrdNm\%.H=Mn-<_9n+N'uKyC=4v2a+Bsxcncm2wbkăU"(AsJBcw54oKs0M9oKb)vH<y+crKtIxTwFKkrm5nKu^]njaFG>o/B\2Hiofgfb>kăU".YlROXKX]8/i+tp(hNST5VwktF3v^.uVn8YYRvIW/]4+(%AWY\,RkHd237I+djlăU"MAQI%_&O?Z_p7>AM<BrFhb^]wOkUhU_#Ruo]VR1r^otMAn8k_P,xj07EauHrs'săU"d$<J/[h]K,>5/-nVAFX,Gb43U^i;X,mr,d:r[<Z]:Fl,Ua-SRCh]KIE5k,VXAFnăU"o,S#4^bigfVlGInDct'd$_R:%v.^D+(_NmorTY?Y_\t.CM-WqFpJBa->JRheu>HăU"5?+8VQFS>p'?4)(i.?T.YYv$oXSK^<i4k\y>A+RYJ]tFW'dfeVhNw[)ICs%xcA2ăU"WInlHWfZVS^KPuh$[VaF7(jxk+A4.rp*p+>L4HiP*kA;AKkY*S[?;d]G8;-DpPMăU"AL/k69zNu_v8FH(t#-v2aB'sxcAar'd$UPVwkL4yha7Yv]Z:K-'r<fV&6%s+r;VăU"pe=l11it?9nH?t0Ln-Xr[DQM[c]?YP3IcarPV9B\onJ(p/#v2T5AsBmc^m$qKDPăU"x8Q4oh[H_cQtiZ]IR9wmYC,:ibUmw^?gLVu(=u:Zs#3rXH0V+kA_i7g*&U$^Y*NăU"S/2hFA7+^.4>'rxT5grs.i.phNGP,Fv^DB/k](sY*]nU:?+7&9.j:rg3J]%7ONkăU"0R\lDV'i_3LjiLYK/ZH\+\FcjrTi5+Mj5nq/<rJ^:\d0h8NShh]x0c(L1xfKe'?ăU"uxL*nN;+HR0BGn_GJ5po:SB+<_M$\B>1(.dh)eM_Mw7>1ixEt[t-GK-',COF6=ZăU";]qctTdH^lZInk]r,OC%JDcj+&v^D.c_0sV5srt&7x(sV5srtfaDb)>jIuwH=M-ăU"M[8O\tO*US](De+o:k7wNHr#D?L8)NO8t6uK[yC4v]2aBs-LC-1t\dHr$Cpd$2RăU"9uI'FTJqprc(Iouw;MEmY>)#0Vcl_OjU2nNG:qb8wN:OYwtM'McU2go:7wFN:YwăU"6'Z4L2=iMRUTVwk7t3v^t.Vn8rYRvIMW]^rSp6.nDr(Hi&.oepP7=Z6.1Rp6%BdăU"1r.gH9D%1rgHA9D1\t&vIr]\hx(r^DPxbQ(BstB77d6Hr+)#m_c=p?R]>^l=?iHăU"lsHgO+uCME181a\&F&F>kuA05$uJY:2aPG0r<M'PaGnPnERh4Ewk478M8C,jYUSăU"lO&FQ[Fmlp8PWeTfY?2A--aq268=g^5hPn]Xa5R0.fH5LmBh#JA+<ZKq3gqCRU4ăU"VwcH(=hNZC$XX1OfK;PNq&pcKuw+'q(fs5srtyZI.VSi_fa>UD#USQCFMM.8_M*ăU"Ho<rwnLuie:\po6Gw_\prkGaHZ^bIn]kncmr$K^I,nlfZUxa_f-iF;-9+GFT(JZăU"d5J3ji.poQ':+t$ljcP?tlLtxq:W\vrvG3j,Q9%mlt(..K1:J8wNQZDS,ANSTV*ăU"wkt3fv^.VZn8YRQvIW]j47cQS\qfVCGE=h<_fi>H1aku9l(j,8[qltF.j,[+qltăU".0j,[q9ltqa:<Q5m]lt.jX,m8_<P,x0r7EaHurs'xl(ty^tNrk0p4.xw<Z^m$<=ăU"N2(rxHxg'x%up%()9%%%%-%4h02R+S#EG&c&%%'<+%%%/%%%Lg;36#UVS7M2>tcăU"9Vs;e:5ThnMGVHOqaC0x&fG7ZO+h[I5&eQZf-ro5r8BS^K(qR\TFe;M3RB5t;6HăU"U<iD\pt94>6S5NE&rilK2?tro#5fS;8vt5/45[OBw'kz?rBgDnRA.GR[hoLr/?uăU"g>7)KDz5Ef%>n&c6]JOSCa=459OHnM_r()kv-y/:yN$$8y?FFFwhDn]5#wCOFXDăU"Wsp4$d3SpX-K58g+a7xMN[&f0-cXN/&fOZXG%mlRc_xDmKE/JJuEU-Dt3s\ccicăU"DXPmQ^]:WkQqLA6zf.;F0(r*MJy:sh_Q9<fFWcnVF;uNvJWm:o=]>M.KLoNA(A8ăU"MP?a+&me]n(S.Em\a**;1nAT'9ZM2GMP?c+'*e]n''eEnJBCX/>q-U'OKCbJT9eăU"rA^8gMQ'27h12;wsQ:U%)y+we=RAgK7ZS)lbt,/3?l76KOv)Qgn]TC54?#=Nw\/ăU",][9byo%qjH>YdGPLM82YC/bPtMD7#bj=(mt6?ObBIdq^hhv.3+&\WE7NhE'x'uăU"p%()9%%%%-%0R)7RuYXQL&''%%%L0%%%.%%%Lg;36IfS72)>tzp,=TU99U#iB8GăU"%.5FdsRb/uk*9lb'7,)B9Jze0pOf6U8kl8zVbF2aoQk&O^t9a^<\wum-4Xuoc<NăU"k\sEx5vxDy;z0TTX<Z#9uShO#?hvwULq2pCt(c^[TVP(HtaTn'XTMnEWlG.+9UcăU"fs5rLudj9Ci,Z*(<WsVP7^sHPv\#UOqvt=O#.qIgocEqJ]wjn_KDdydMWHr0VdmăU"Syr7MKMkB*_kX.G8vudq4,=3>S&;ubU&H/ssQ?,1ze<Ho/rQ'durmN/4ivxe:B-ăU"BfJKqLUr8(&_f&i4nWs^Me-V<kb5a__Fx3^\FdPiCa#L<,PF,jh%'xK*Qbo[mFbăU"F:gesEdPZQRR+&Pp/w\JrZTJjPwb)QZtYZ,>2Qm[N1QS5\Tk4N)4wk?JEs1DdzUăU"_8T95RA0Zi\B+6nTX^lHTm0sQW#9S2=k%WTehUMNlw/SjlG<K;-9kgzkSj-t04KăU"[\[>c8?040R.:(*6ThSPnqN4/*T1&O5I&S5P>.N3IU%Z5I'.K-1i09Y$5C&gQamăU"E%\5.Q'u2o;h9]7.)GM_B+3(+,tK77heH/7309)#gw-g%em.&%8-.F&/'FB=)eaăU"E%>)qF2sQON&Si%Q.x-8E&//F.#)qFSAO)&*Z&.KTVkBKV3M9*nILwv<FR6m\3/ăU"\CHunR/Kk^M5T#nlwf&,NbngrE)3;aIeqoaoc*E,pPxl#GT'8sC4OnCJnQENpPxăU"H#'.,InbE<faoGuPAWU:H2q]=QMm?Y>:.j>uws0x%'up(%)9%%#%-%i(u8RH;wRăU"UL%'%%]%/%%.%%%%g2;36gLS72>Jtz,>#8V5Kq^cxYdD5_fEnLba&e/5O/>-GpHăU"B.bc]UnnsZxjQ];+=Pr#Psvq,G?$$Wd,XvtvvV'_&&D'?N04dlvhb3U>EvA=6xUăU"qtVv_mB6dAVD8+Nr$.(SW-6k^,u2Vetqd)h/s4d^[No8n%Mv<N+CN*b*Kt_[',BăU"gRG6dw0=j:;xdiF8rg)vR_b#3lZT_g>.nc\$T81#p[\Y*bp)T(ywM4s)Bg1b6_\ăU"h6-31C^2sw'+mJX59?/O(r%Nv/)khXc3%x#.D\v=N87iNR]qAoH'V*]cFR9._W#ăU"Q\:]u>M.:phv59_kPLZh2whcAj.oGIg6'D^<n;%6ljC^:]XCJ=RfS2A[H:X]\*EăU"Y1ME&jmNEsjK^Rk[HHQn#tupE)NCLpw.i^AREGI-L$REfamn%tOq[qA^85.%7yjăU"e)yox.ImBC91&8QsdHE<In8*=p8a4QnLsDO[/eUn#<s(CAAr.qy%6k7R#Sz.r.-ăU"qy8S5UUB(7%lqey-U'LPHOgINJY,ayA+,J4oagLN;e](F[7[#pL651M+L7AW[fVăU"mns;I,SDs'M#UGX8WbTi(L%_5eZ'pT0=?C%%/cNqb>:L:;2*incZ+Nq:IGM*Jn9ăU"-cC*n)^l/YbYA$/cxqX%%M,IMkP+WQJPj7aC+CGQK(d6fj%&WEJPXGa[$j&5KprăU">62qU]=NCbn's.unpbd,Fx*u%p()9%%%%-C%hx8gRu$-,Rt&%+%\-%%%.%%I%g;ăU"3A6hS7M2>tc9To<e:5Uh0MLVLOC/JobV+).wam68nQ'Sw$^[PCW*XhrghFfN*HNăU")2CddWhrSEK0V?FT37q&fP[Zjf4IiXZH6l'?rgZH5V=Petv9W4zT5LGcc9aa3]jăU"C?QQeDj9G5udN$NGG-];6sVEzBfKg*P>hp=YGHCB/-Wzc0dk?]>#6UT9>l4:6t(ăU"ILS)<lkauHT(0mYVwQ'QXo8tWb8*f$aE)UE1I9om-1=m_[H.WbaM&)s$*^ITl;BăU"%pT)Umcm_:3$kO;Y_ouX9ImUE3*)<=%<mz0O,DU*kp+F#53s/0QGOv(gtD[&ywpăU"dAp=3E<3*MJ1_O0g9S1hi]I+Ut9<Qi=$vJ;gR?o_mb>m6YDW+SXL,S9t/4%pgD8ăU"(ew(o)>ETM)-u\Ou,IfC&p\&vz%g/6tz)eS3mH_-qwV,$LtFTAGqVsy12Y9,hE]ăU"mt/bYE2/1255GdgE+GOG)9_SCa/;?_.w]2/QB]$?LHR])^_:?NfY+Q&4FT=EN1NăU"_>7\5Uj-A0#-kbiu2DGj5v32IlUYv2ucp_,)0SSDF<\bL)2ApR7U710).(hUXR(ăU"8U1\&Vq=WRQEND+KdEY_3Ih)7lqWnE9t9,dN]p+7$t=Qs0cTkHphuF\\l\Fao-DăU"vn6q%arTEsL%dup(%)9%%#%-%[Cz8RGT3NlJ%&%%L%+%%.%%%%g2;36iLS72>;tăU"cVsB;e5TKhnGVMHOiCZ0f/+8YmM=T5Xc,o*0OIp[PkwNG;Z='Z=F[p8aG#tkRrRăU"lWfz^u?KFnM[menQo6tH?2*\vfpW>/azWcTlf';cAOy=yujacEo$E+ARP#ICjx%ăU"6\iJ1.n<Wu)$eeYmhZ*%>v0\paq?f3%ni]7e04^&iRT.D^]L?vHX?MDd#1lZc/LăU"MCuCuatn0Rd>qr\OW-[%DUyo1_6KoJ[lU1/8LUui_rpWOiw[$(/L[yayU(l+#LcăU"$QK]-7n0+)Qe6liegtM2?q6qrps]4$)jD+)xWW^ti-HkEdAKVi$5*=u&9Z+*jhOăU"?JQ81e1^e;/_='^n%V(S^&I)DHwe(WfL(_S&J:G9+Nk1pTWn=#UkF8w*Aip6[svăU"7hj4MJTp_oa9PE45aBeE\e/-U,&$9oPcMWubu];je8L7OG+t)^IlPV/?T-gIk0TăU"CMdD+y?AL><LV\>dQniz8o4yi,]+ds0u%p()9%%%%-L%k(8FRsR.%:6+%(%U?%%ăU"%3%%I%h;>D2:y>2F4ASM72>t5'T=A.\1L\3YNg4BiQkFHb*r9f-j$779jT\XLR-ăU"=8<TY]QahfVQKG[5cHS33T)7QV,sAho=GptTuphhoi<j>Wm3d8xYJxZ8u176TV.ăU"-M.f'4^pm\t8g7DdXC+C'+XXr_k1YK^$7u]VFvNw9GBtFqiHgTVNp_^f<hc7U\aăU"ri#xre9M=n30n=Doi\RdY:/sEux$f<p%J<ThjvjZQLZ#GusdolJ?ur.t2c0XKx5ăU"<gUW?\9TA8w.4(o9=j^[%AfQhM*'/fgjsI]&2-QE6Mi&p\:T5W1PDYGE[MngRKfăU"U:jfH]%i$IHIEb_sK///b9)I5eeEx:Wx=a:05T0m/rLGE$ahk*CMY7G6/l8CPE$ăU"8aup_4mGZ7Kk&RA]Qj?\$pG%D'2caZt]*8rN0,WZD[Jro'qbc&?286KQ(F5LF[hăU"R\jncpa>nZWr+b,4nG;H.&f'?*Zr&qI<pgL0:s3GAU2:uv^MXURQJK\zos8,]3FăU"+G28&ohnp#/vK/y3R_AT'3r)a;zqBtE7frv7ZW/UIrWl7gpTh+DF5du))JHT[cPăU"S3kr4H,Ifz#t=H:&x;1iPzNKvxBf>.K;Rj8.u*09t8DLC^cXSLGlj9HGE5&g\GGăU".Cig\1wOCdqAY+m8k_OCyC#wpokKMl4KtIjY0:/J<N,Ds^R6Nl$e=m/li=nGmdeăU"yFao#eMi+frTnNe#9=v(H(T'dN(&ag#Fg%)7ij]BnYE_6(l*\)?93gmX=>>SAbyăU",p[m_v0qJdw.)P,UMdS:NH)-(LS)*h1YwH;6,0G$GN=CoEs/PFmL+$dskj3eEfLăU"YnOWs>%.60JHBh<88d<gJ(-Bb$Tcz#Uhg(Y>Sd&:Az76r-16FGaQBWO\<s)$4FQăU"d/\]cA$UYS\RS-0/RT_G#v^:;DBJaHc36&J8<AZRFcf5DJ(qeI(KB&kJA.0(GguăU"tALs(R4>/]l#Or=3H_$qc\aDK^9vMQx2-v?a6X]X#Fuk2s3m^=+jq/ZCBKz?qeBăU"wP]_VdPkKGKRKJFwQvl8]S0Jryg?Y#RB5Pwf/qn##hL)QCZb2c.$SmN>6kehwV'ăU"\sS[p8JS:z7SK1M=Fp:p%s'p2H;6iSTk_Nw3*n2ug??hCA6tuS](GO\/0\><SP9ăU"uH0/1fJ%pb<dP%r?(VOl<;t=%cfJ#IW#cF;/9('*EkXN&Crl'Md&[u;_;9(-]YtăU"MD<#0Y99B0+BO7C;<%$Hq:o*L_S],rF4bQ/+VJ1upf?$)s^(3E=/lxp/pr<R1k=ăU"Hw2cja;qJ,%=7i>1:BLnWi[m]?_f53o2UESatrX=):VK'FFfI\rnP_:)x>A%-wYăU"CnUMrUL*[B]Wt/Swf9EkxJ)'v'_jC2\C'V8*#?k$U1W;9=ol=<)W&0]2QkKL8cmăU"i9tZ+q.a0*T2%uF%gDF]9It]t;+;NLQa6Po(6PgOYrQ?OK39:l0RW#3UBx[[280ăU"O;-8g8?9SQ#qq_yZF5>;,r<80^x.tJ,E%5Uo8eT*X]J#x.[bQ&&OQk'S56N5;TOăU"ZhB.>hGLgp<x1K1S[82-l*%)aH&*<SS;FL_-,%Qsq3Q3a<RKd+ZH,ZZe<JZ8l_CăU"S%.7;4CJ]iJz0*IoeV^[:=.arbDJd(6f;;82-6_hevi;8]S?5isBCYMP$oOK=>'ăU"k?a=J_I,;v9gnk$?Sh&Aq]Wgp[\[QsN9;:FOaf.IG-A[yR>C/%7.y0^4MLLoTCLăU"WzQS9n%$LVs)/)W9gp/1r[F;7pdqec)7ZLV1#qSjjXg2'k9w%asQs4Y'7Aj8\%păU"r<q())>JwU'-bN=$Tm9=Bd3G'\Pz%v#D(p:1J(PzC%u>73cSe>d.:_>5W(OQCkKăU"*/hiPp?uB:Q[/s3t;^LDMP+]2hU,Xhh=]j_G;^Y2-FN&i5(1fJ*rFX)rn_T4j8QăU"%>&-h[SQ:(8B:H;p/?yfL1;X$X?UPF]2ht]?nBKf:/P;qrf4cus25qZgZ\?lqMiăU"kiZrCc;.rvD%up()%9%%%[-%)2A7RQo'2mA'7%%]-%%%,%#%%r0J=S72h>tdJ,]ăU"LU5ajXPnFDu&8-]*BL/M)e/I5Q>W]^Rp,F5-rsu/txELB>oqYbe'WoKonjP[$-JăU"$UF4tuTtG52HD4cuXwc7tnE/8lhOzu\2$CoHfbpF=]o\uj=+eOGzFXnjNBD4Th/ăU"lxjBOzdtVv\QQ1d]Tljw;ee2d/E$>fQj?3tJ4=+bEzqJ9FVJGUvnQvJ[aflJx7WăU"WK\7Vsq;;e;>i;uQKSukLGlis=2Q+nyS2HLaPv?WBRiiilVau4J$c#CO<Zf.d/FăU";ojvZ.Z]p;j5CBjd]5OnJ>f+w%&-PAV=a:*t.vZW-S20U0);0&V,47e/+8P*75jăU"+35OjiHRtx?QuC+$A\Br2Kx58wO]lJ-?9$akMU4r=dfc\r);\UuK&I%NIPM&HV4ăU"&VgyKgih/LTe)*?VPZqTa*KI*dwJIt2fbA)2K=1]0:8c*B5$pomREtw>>uL<LnMăU"ujU.fSN9Xqh,c'$(7-/\&>8(#8fdFQYX[oF5;$vw5W4(O&P/S(G#1#T?%)>/w-7ăU",Iuz:Mw:]JNm0WePQvB7j5DG](fi*X]Ke_FMOliIH7Tj#gXjq/?r7?1JYT_drJqăU"I*Yio.3[QlO,bvfnkiX/u+_F&QqUBcMp(PN;;[F1lHIcsBIewq-0&Csi;ZIF&SsăU"ixH.rJ=3omCwtnncur>((W37$XWbWo]R#[hbds%\up(%)9%%%%-%n_N1RZd5\=_ăU"%&%%w%-%%/%%%%xMC>=4IVS72h>tdV+s;e9GShnGMVLOahCN)S4pxW?&r<KkB6hăU"N)^(<'^ovbL&Ou02c]QYIeu#GGekm,+g0OTzgMllkzi4f^[T.v,A^z[lwuD%W%căU"$Fh*3ReD:RNB#IpaiujTr72l$(ZmV^\DzAueTV3a#'<>m[w?n<?=C/A2[b5tdL[ăU"&o%9]MQr5hzb46vFGJ2zDhzH[Mu\L,E2Uc]y&miOkZaw1XiMc\T?vq]$2?Jp%.IăU"Cs(,xMp2-:m%'6&eo:\_AG=H(od4%iDmE5uF-ROIObp,8f_^)QaC/O*LR/DWueCăU"MVCU.;BcpuVo7[mk1AC#E+0Rg^saETghpqdsN/epZKmH&$&rrwP,d&dYG2?V&C^ăU"964ys$59BN(Jpi1Cdg-$_A^nWI#A%8G6,][L)&tT#kqWk15I.FHjAV69e]Z;uv_ăU"eJen^$='^,nt?=FW$P(H,6eXn/nF/H6f&((Y61rMOu2JJ^[7f5tZ09ZD+q<LL/(ăU"EiQ7Tu4LO,2TM43psrBu-if/Mkg(rWC>EV9M,q+2W/gJ=2.$8b&^eifE7gL)X]*ăU"MBma(f+EH+wd<7-VDfSifdB5AaKsS=MbAdwhxHm.h8XF.w>^LSyTyPfVdq:;AHAăU"+Xt8u%p()9%%%%-L%^38XRcM8(sc)%+%5:%%%.%%#%xz%#UVS7M2>tg<V]T[:5TăU"h(9]Bm%f/e$<:D,/rC<<vsd<jR/qFj%Lu3AS9?g_v$263Jj?rA+6+HWj]<]77XLăU"9Hanf7cMui+8Mqrg,lTH#x[nq-i4f>fFT\r<.go:t^pT[D[tHlTv=NPCGD>uX%(ăU"upAb58YNU%iZXxqO?>h8c7Ckp4Gj$zbn4YodVEV*AoLh7X?u,VZsmP545N2>cNhăU"niftN0HFWWAWaucH8wcONmNf&?v5t<IX\V#>\pNFb#lSvpK3Uyc^K7YgAzLHb0lăU"TO.Dl5V9HV?^.AaOCh.Zu%?jMkpCI11$e(4ftxlnAG=:)Cl3y8:BX#Z2o=2:gprăU"g(CGH9x*PcvI=rknhuE0jeP(W\16N,K\kYM:uIMWHet&IKckSQel,VB]]q,xBsFăU"[dt8[bNYN?Zbc1hEW9J1o:.5s0:#I_4jwi+P0sd),a_vd4UjYgl:UBK7yBR'<IDăU"4Iw1BQ6h497hC;b8IOFc<*4cJ:08y8=&-V'ASss\Ur#v/P#t.vyHBjyn+#&>KQ$ăU"'M3R_'4%%g-S;uR%t\Nec,.+rHLRAfxtikC25eS7dL=&#;Aw&d*6*g/E&oG*5r-ăU"571oTQgC]Z6Q]R]sp>?ZU%1Ix*GBvc-B(:S7[kC.3syupWxya1ok]bNQ>+2&>F6ăU"7h+af_Oe_M-k)5,L0u5j'najscoiVCPM<FF&[QWb+hps[5x$lhL6A*Qb^$0P[>AăU"HzP=QO7%s9IR*CTkKbv;8J7P]OMa3FE2q%7I\0Z$Ous$0tWTrnr<gC\vq_4E=$găU"D4:Meg'azUP;DYm[2g<4_gB_fp#mg0>TQGBE?mR>Ue.\I2T1h+zB,SNjt.(+dq)ăU"fvE8LV8dhAoF?_T6-6[]K5D;5FqAfVX[pX\4$n;F)XTWq#0Nsg?G3'[n)gIN,X/ăU":\zbF%6VP?mnirnItG$C6-.66DG&R^piY2ZSmi-b)E7UyJF]s'-?G3&H5OQ7Qh4ăU"Mhs?_.Ft>,Y:A=<;Z&ub2J^8n&;_?V^;k1sB9]W_er>/2L1ICqFmSpXT\ts%(i?ăU"V?:OGTh[r9H5f]7f<RkYQd/NnCUV5#*YZtN-OMhpa5+JbN/6FFz\9/+G9r#[38&ăU"oI>:JUj'4;$URLB_L7=d#';F#3bbHQ*'[)Ka.1U?'a8:A('[)KD.AS?'&z;3<1]ăU"Pm/CmXX$&X%,0Yk9]RA#*s/),PvZCAu5[CN?a,2XcYH.qF'v'Y-x-]O8];:9QH)ăU"e]UTY(PPHqaFqmY#-b_$1w#SN+)L-AD0kUWGU<9Q[NYA/DV/%PC8hg?GJ9.C)tuăU")sn3/:I#&LWT6YVO8AhgU8*9XqF9qVYiGI8Et0[iu5<UfZU;T/.1VV#;&#&LVTMăU"/uObKQCQB.'s1/':K>3/*.F)Gk=9Q#:'s1=/:o%ILVT/h?ObagJ[c9n0/:V%=3xăU"MUHt[3nuu?^K']hAm;)mDF9CmxU]hfpVQcqn(RuufOoYS*jQL^4qV5xr6Y.i,pZăU"/0%'wDup%()9%%%%-%3Pl4R9v7t:%=&%%'l(%%%1%%%Ly4BCLhD14LS72>2ta.tăU"\RU9><Xfe$'U4u77/#)lWV+Mgir1[l^2sxES78wKANt0Bg]=q=o_);v2tVJtkJTăU"eRXvJs9Uh^RvMI:7*jANKO)L;rzYuF,y6c;7fZKp^KQ_v#lLqE8xd)bx3b(0>%;ăU"F<R(2bz)u%WMb93Se3Uo^\Pcl6I3V)7b[N[BqjFIlvb#Smx%-Zo(Q<i&soIs<]TăU"P])C-kJ'5mP$pbQ7o&S9+=(JAP?c6?I^C_00u]e_AlhlEdp9oFwTX&W82CA>D91ăU"$O6%^g&h&_I9W%)vg0&UEom.W)(g%6h5K#9X)0Z?gw\O-+SeU1(2H.]GL\O5PQcăEND SUBăSUB V4ăU"8=G',O>1$amNFXa5kEpdOBC#31xEN&%up()%9%%%.-%_-A1R&4?G4t(%%%%9%%%ăU"/%I%%&0);;UVLS72>VtgD='TU5j9p&k4'u%^5JnGf<ELoRYtCPPGV8cOTpDO\u)ăU"NHN_E/sp*7k2LetC>ZEehFVAqVfN<o+:hW*UYT45NT.$k#0'/<P&VDVFjf9Z7tSăU"=Jn<jDgJ3,DrdzR=uHWAvkKN%[rTK2=6etfzPM5H;enP0vZJ,HZCZm*DfBO>TWXăU"Z.O^^#$XZF>L51PEN;NH1b;q-1ct2^n#[+qBoYK/7DCZiq*y$=[bPYV$,mq/-fmăU"YnTgHd=?ARKIm7]GS7NNaUN<;<:x3<s#WmnP\0\FE?s<s*2$knq<,hF)W0;_18yăU">(^I3B35(gc2$)$Wt2#r[.LoyuljnLJF8[2G/X;f:z-R9R\O3&34dtY%nC5_D'aăU"n(9EGSeqIPvh\yd,Vl),r]CxB$t6c^?ath^<Qys-Q4&Q24'gJdpUQCa>;wB:*B7ăU"5ayL:bd=xyY4.^wG*ducxFm3C(gPSs^&zh(W2)\1OcRI>Dr1Y-bI#^$KGlpTx+FăU"Ea3N$cduN<BuO'-L;p$ZTH#(+_qr9[PQVZ+1R[>i7Rq$(k,g.14_xtEe=FG5U*jăU"'FYL[2jp6oZBKdpV1U1;&,Q]P.L<kzW>Q,IPA:(B_+?b>as(VdKCZ5jKbZ5LN/băU"hlY>qV6qNR9^6\8>5XDPJbstq2T);06^2XWX7Rx58i[MV(j):W7v&QKvG6iqDiPăU"XQ?U75*$j%JavG(onSEIHJsG2gQqy9U*UH+Yp&<j.<l9oF&DN#qpjTu&9=Mkz[/ăU"QS#j9qVa$#t+%Do+jDPQ-CS\Cm)1,;d.S''\IU2]1_(U%F#cRp6u;JIf6X*7EH=ăU":%p2h2,jHdKfW&R&g86#3Y&mgH#3\aJ?F#$9Y,*$;W+G7LNjn[fcM,y9EZM6,/_ăU"-S,NU%ehk[1NRC5'2'(YiZSfNg&)>;#pFEdbgFEY.qpG>g)C&Y]N1's4Pq9+#&2ăU":KLZRORC#K:zbF-uiQNmgA45[oX.#-#Ugg7bY\z>F-XjiN[[5?Hq\9k-&(6K2H_ăU"S5-7\iJ#fOuRa7*3Kw-3aPyN7eeLxB7%&,4T^bf^ejpr\s5gGpLRYcCSn9Q,Z,uăU"leUzQ<[Q1+:2p&0U%-3B0/Rf?;RgA-<.^-#U4-'P5:,RYap)S<=P_\3SD?hn#7wăU"v_]MxwAk+yM^s(OiALL:<]b8YS#nB>]0*';W-28i$S](pE8El=:afJ0WU2,(+bqăU"*??Qp$/VnU:w'+b4q??Qjp/VB#938<M]b-2M+]bYLr]bYac#n>P_\316sH\R8XWăU"#npjd\mbfU]Xo(D>_^N.z>Y258-+WtDu%p()9%%%%-#%ve8mRLdH&oe'%%%_/%%ăU"%.%%L%&><D0=S7M2>td<T=TU:1Uh(9]Bm%N'pb4NrA*&t;<IV<fC$Slg_p/ePILăU"xA$ysgDNH25Jg+q^5q=.9QlgHGYGcMjt&0cLu<hg#>-VntNVIdMTUrTprVNg/*4ăU"M?0b4-[dHNF0nV2_tETa/n4j?S#6*3NC3krLuT+:CZ<82Dtvl?')]>Dp,D^:Vx0ăU"Hf7z^WL%fN'n$ZnEE:gLQvol5&BMxMh,9Lr?6=/u4\3CS3#l?tq=uMNVkJZ\HDjăU"oGXj4)4^*GmdO\E2kil)GfkBlriOmjL8$<k\;H&i/?Drbh/MV/PRI^N_#d]mwRAăU"p+7iE,Uz8Ce]KX\7Z$q[+]m[C0+7*_'ock#q/W6.F((X3($d^;H$&9k0w_%c=EDăU"+>dkE<GXnae#TWP29rG.LfvW+m*D.7#\^IXx(uTZD5_oB,qfyIQ$%RM1T9j:Td*ăU"sJpe4(Ea$uhlML+yZJ^yr*;%^ee0HM$7PclLj_(ov?g^$_?u>jx4<Yu$Q+T2TxFăU"_BLdKSMciV)Q?iSLaI:O'%E,-Al-<K(*_<9p%pmbdj0$wCI#)SAU(Ks+^62EII[ăU"nWf*M*'JB[Ro/0eUwZ_s^=/7aQ'*A_G.&_Fv77Eh3I:eUK9j5LNp+A?I'5UU[m(ăU")Zim/O1XEeO28D&lu1N*=<u1FN=b_9t='g)%W=OC'm9AeJJL1/H^\E&:hvBgqS6ăU"JA-BoS0TBF9&VsxgNKU+L3FlK$Y=MmG61E9hs\u^,'x%up%()9%%%%-%1-J8RskăU"Y%5%G'%%%>)%%%/%%%%mhmU#UVSC2GCdw<D=TUa558YddQA*O2AUjeKe0#R,#ApăU";<Y_q.vPZRIj/K'QjXFf)A1Lb[zLwUMllhlPLg:Zui1R:+Cf%$3(B^S<:IvjPY^ăU"NN4w5COVPX)NFlwOT+9PPd.O,9=-%JO><hon&tIn#14HU\K=Em7feJLTb]N6Hq.ăU";Ce$lin>M+N'%3#.k:0#1KJCA/Aah[?h_<PElKG$%su'ePAxp8808UmiCl)8)(xăU"d%+y.(uZU)KKC^ns&w6gSh_><phz&5iS0'Mw4:ZRnD4[9xphGww527O[=$F+O6iăU"Gmn2+uh*)>1v]>C_Q6m*N_XX'?Uz*SmP=JQdhU2Lgomqr1u),;)Z32jF?Ngkn<<ăU"?/Z&1Cd/uKn0t/pez*j8*r/P9J&T:gfGI^G>b8U^JEkFb(K;S#6YDtgU6%9PAWxăU"yW(yL+pWe1>\U;v?x\E;F_'IOrE*UuROYEw^llHT)r8(/S&+f4+(O[57qOlA4G%ăU"#ydv2Tg_?J2/(v*E<Zw8U5Gc*<_xNr#&S*;p3FG^J:kD$1q5kXtCb[Ko;L^;x2DăU"8aL0HD<2[[nUidLf;X&xKrD%edQ:V'.'vx8^(yc9mR)9&1>z_6d80hr1(AZj*K:ăU"LMw1Sx7?ECB#KI4LR2:VYR:Iss$'q4tIWM$E4+:OjrYkf-?m])qTr5WQjJPTWigăU"M[eQpjp$jnRH22$=g[w'%up()%9%%%%-%VWA4R0<9MHk&7%%R(%%%/%%%%mh%mUăU"UWLSCGCSdx4]]TU5e+.iD;P='$S4hKt.:3#Z0C'vmOIa_i+An=usdewvq'hXI:2ăU"nB,1rQoERthRRND0hs]Zb<<mj3e5Sa,6qesXVX8q$qxh8^9XkAdnju/2Uk_*s3băU"LswWI$9LTO^E6fgYif+P?%KB^X'&;t8TCA:QfF;T2WI8^tI]V(>qG5uq'eSecH,ăU"bMU0%WjO1V)RpX5^JqW]?f=:MqNv3><uEtf#k.9wNJ^qUXOJ$c$g,.LjPqWC?&NăU"Ao$4YO$+Xa2l5GudY,Z1*%vYP9F(J<BdZxbDeqI:,'2yrlJTMX&OBo0G(ZWKAUDăU"hvF0RGi-#Aq_;S7%lG>bBLHhalDiwBB[4ujy[*(pw'k-3ye.-46N(w%Vx4]PjwTăU"Tz/&4]==[A_9*TDE-Ws3A6]=1n7xf$'yH5AuP*94z,uwa*fCDcFgO/Nt'n:U8^wăU"UZ5qR1Dv8ngYHiBu9c>_Aqzc:hqjJqs94fQ2ODwP&mT954hC4:-J)7>N>]c2AhXăU"N6emu'Fj4/'fwfEF0lDQN>8cjs:W-dA>?L\$;]IV-TJHx][Nc04lC?2)/a//Je%ăU"H*i=;<>u7lA'P$VGD<;)8'19khirlYSta05KtC2-&Ys#vED/=U4H(*EPS0FP'uDăU"up%()9%%%%-%3Qb5RA<y?6%-(%%'d+%%%/%%%%mhmU#UXSC2GCdz:r>TUa16#i>ăU"NYF#e_+,4HtIZVcm+:aDOl:jXs1CqaPBnu9hlCDsnLe)BUQv^h^^^E*3:[;6Zj0ăU"*b:-R%H1e?Cg6=>hule_8qNH/_%(y1t3Ig&)[(349ejd'?M>He6=d_H%*?riz(-ăU"jC'\)^H0>T1<aEthge<Dt?4mDE53;t1%tAsR/]E5OSo7Dx3C*1Uel&7bZ9J8TO2ăU"9GJ9(=9lrm&t%7[,=u7aF8lq]59L_JT\Fkk/3FP:\o.bM6eZ[pf]az)gKVX^UTHăU"i]r=+0[nnd]37kDkqinG5Tb>RRY[$D<iNQ*AdLKL3Vp0Gg61uycg,mR^8JN9JpgăU"<.sUAfIQ+s8-oUks3a+;q[iL;2HTnFpq-uY<Jq_tAUBvH,#UwQ6b13\f)=^/]DyăU"bZPuLYi:#cTL.pG9G)o6%gKi1=#8*yK#6cwRlDHip^cDqd8Ilfe<O]u7hZp4&rjăU"$CGlCZtc^'r2r[%G^<XPmU\+U,J's]LYID<2(vut6j=/,ulio,ee-H3X$Clbb4KăU"V3z2tYac%psOVQN2G\'o.O?y\%7d(J%\#s&\P,8b8HN?:[qOr=M0Gk'.pCtFSwUăU"uz5CB?UT69LIKWpo3j5tiG0?yIOS'7qBM&8vOc-)aTM/[aU9ci\)KK^IbdY.Rd(ăU"&Q4SlRaz/*,]hn\T-j'#:iH;Iy*^>:BH%i57T05]Bop^QdYgV-+=[sG52wdLkB_ăU"6qx8s_$=KW,#Iq\v?jD,bBZf\^*EnnQ[xh(gKJ#J4_MDsN#\&:r77mR4WST?;N#ăU"EuD)slN*jxs1k:qqbk'7Q*V0b9KEaVueB\9C8NLyq*m7BmpH_&7x)XU5UMNBfp:ăU";Da;q[tY\),rfsblY>;c#GZt:Tjm*&-d1P(F$6DE\gQ=,'Zb3_>VpN\nAVNvFsCăU"ydlglQK_K^061NU4XDTi/YR&TH90+=Yy9S0[jSBSxd*g=<uEENVR91gMr[Pr/VJăU"uhN%ci0g:'x'up%()9%%%%-%4$13Re\,HV'K&%%&O(%%%/%%%%mhmU#UYSC2GCdăU"w<D=UUa54#i#dUL.[[f/m%C)2'Z$UwO;;^PO[IrEB;El(Tk4hEt1]DP*[+UZ]h_ăU";6Xj^:f$s<-[Wrjqve(J3ackM'zt?xwNzaPTBi5UWSKUHX9>a-+g4uhK$4Pv3yzăU"D>biPTZd(Y.MK8m)'v2+DBa->]HxkI)[]]or%z%t#[8SjjCCq076[<Kf7HVT$gJăU"SD(W+ULK]n]\'hv$S6Sc9Wg.&'rJKe$da)W]#,x)kn0c;1qdK^#vpA2*_shN<BFăU"Gg&G'N-#w1[pf8$eWr$Z3c];[h>HS,j<nwT+?I<F,826?cgml<R>oXFY12ndU,-ăU"N]v$Bp0eT%pqtcr0);I9s.)$a:1*V+#PE4=1^?)[$kXcrmWchr_E)zM(a:#7c;YăU"F>1GllDia4<SifBQQ:8Af2RNNd]C5[wgy*[.I?E0:tCGZ2xk[>X(2CKB)Am[[IdăU"rJGd%JX[>'q<m'ZsAUmGqSp'C.n9Ag1nTT]QKutz#M-#arv_vcP6oWTZ4mewcR.ăU"jin5P/RQ)Q3Zd^[dueIh<0Qoelh%YnM[F\&BsHr&as6rC=[H&'=c$fn-1&$aZ=ZăU"b-P'nW]sv==7s.%up()%9%%%.-%HW&4Riq&gSh'7%%I)%%%/%%%%mh%mUUZLSCGăU"CSdyD=]Te15a0IdiK_;X\$mDSK()w29pmP_IQ_/a726*8Nue<*xQ7<d3[NeTn'>ăU"%r3nVX,WPu'9hWg=h8$D<tpLwv],2sjjtt4*whgt(;^/T?pBLj>+71r3IH\m_^kăU"J*W]slsFDue+;4jXM-3CH&_Dx&29No\mG#b6>?6n9*Q5iF8&$oK1FIK/5oPbiNgăU"lpj>S-G^OZ6,F_LfCF7)6Bs425RA;CTB(hxQEaeSM:%>klAin-]/EZO2\+Z&A7.ăU"xJvqX4.+7_<WIt$j]e.&6%\9YSo?b4*D6#LkI4p$9Ph)?[k7,_&BKp[/B(KZ,4OăU"]>F1s,<0IIQ9PCsslPdTN'2Q?nY'*'*Y*xB&L(D7.g*Au\AP1mKF($TAF')SG>^ăU"h(W8X9r9#f&<&lU;'&28N(yqH1$sR)KlEP#MhR],VZ3.Fo(Q_?w;hX^m[irBX>YăU"sia$3'*CiLdzc/JGlWfaL$7Dth087.J-vd1:9S^::Wew0;ieA)046lH%4ph;L:%ăU"\iFSnAvDfp/?C;PUP3Ga_0hggJ'=W*niXPlxWt,XR<8tSp)[zdig-<YAol8OHgsăU".h$;RUM32>=1BUi4L=F;H.3#gK(=N;vPwZ96/(21F89B?*ps=+fPA=*5e\Z\QCLăU"ir,l5GNDotX,$4cSsB\:R?>Kjfki2qJmj-QZ++KQyos]po8st[1.._LQYmpe(>răU"(h-P1Hs_GHN*N.(xUX63jauT/03r(mN&u%p()9%%%%-C%7W4:RXr)+]A'%%%\+%ăU"%%/%%%%mhm%UU[SMCGCd.yp>8RV57*NkNg*#eIvH\WPO&CEduZ(ot'\-hgIV\GbăU"PTgpaNH5[6jrS)S]af%XmhXVXeyJ>PV?)DH2P/CB+x?V0a8q++5P>9jXDW&%-R,ăU"UY+'CJb5[L,yM0Jlc7t-N\;b9%KIw19vy^*QCarP*Myk2Rxwt\AW9GsGIG<fEv<ăU"Ua1EC\UAQZQSozSALhxl<mAzLx,A]qo^=ogd7\5)0(=(U[J)zV+5?Bt(]Aw]XX7ăU"DY]q81BY7>\0*<\E_5i2&:%2^)DK==$IfYqU)?aM.2?<GA8RcTM?H>W/>Me[l0)ăU"FZKWoS83Eaovo:q?A-*&(/R^rPuoXnq#>SGRF#0UX(nHKUDk,R)2)B;)5>,Xq]AăU"or8_L#Ab>hC?dS$j/STATctOO$0IaZHG72]dVmS&glO)_vQ)]52=X$dU/7;a*o5ăU"z:zw\iZcIIXnBWTaiS,PhKAHn.OC,G%de<k5C(gbhN(#psI6_uXXCNfBDU'G?-:ăU"y_R%2naAIjf5;v*wtA'R-a-O<3).;qDP8H<tov#ww=q\Q8'g8yIsx(Ij-5^uSY?ăU"KkdX#Xj/pqP/]#^5#>axXmx+i>hS_Ti'T3X$>W%#_Kg=S^jcZjtt3$X*+3[7Fe<ăU"jo5i^,XF;XkwscA$#B%gIj8vN?eVIBlQgWZb^)Rq^LZBdD_rP:LHNdPgnQZb/eXăU".U5'JHgYVw9:1EHe*e\HB&8muH?fXVf(a=O9C3Mr[MaKeGin(cs*3AqNSgk'$F7ăU"-C*>PebuSE46r?)iO]__6u<<Pk$LqZO?Qff0=U9tW5KJ2;_8r#j7PckdZ$4#V3>ăU"[3feFwHT^Qe:E9nghg^jx6kRjNPVscab%e>$%+b0?Lg</<-pu94]ekPd1#?\&bLăU"F%+ZTom<+aH;B2vAcQo,_KG,5v*u%p()9%%%%-X%M33jRN]V(_?'%+%v)%%%/%%ăU"%%mhm%UU\SMCGCddyr^L7U56liCNgTn-o.9ePH)QUh$IQS/JG]:X8E_PE]^uQthăU"H2sLf+[FgNhbuG5p_Er\4HocQL$$4J_)tlbWdFa*pCPJtp<ZWupvJ<3MpcWL<KDăU"rAlu%YW^ZOVrPcXHXv58lc/2sO(UC>)8=w&jH,oWw.f<8B&Q069\7G]Z$gre_RDăU"%a:SNkVXR+3S+qC8G]K1oE/X*xCE_+'i#3uRGV=byK:OC&2,<2KR*6S*nZ;\VtmăU"aPAfg_XiJ.Eu;DbhRW_ah]gBAI/k19S+,-:4jjg_ibYPskVc>R%w8fN.'qDp-mpăU"2>d=USeF[v-X.2E&[$/%AU[b]NF7[,nTjcFgU?_<=9WQ[GBiLc%:R8R^K\=3d,măU"n>K&'_[Ea-krQ#/([N.s[G%hNM<f&o/UjvixuAQ4b\2u.4qEn'aULSr-+cSZq=iăU":DYvPMxr%?M$/>2QnY8:-.Wq>e$WMNd^hx$l6wlTEO=l-)5:<LOwW'#t(lW=X&măU"bPDHW1VURAt]/kd&X_PcjE1mmtis91sZ]H9LPc%+9&C3<<.\.*ti[BQ+-/b=.FSăU"(Q/pi<j[_lobHoaH#DFk0+<e<SThFvqb?o%f22<Li$i44aHe0H2D^8t78,)n3P9ăU"OqtJaj2wd;2<y&#/V=gu_qO-'3_dgE9eSC-tM97R1>:W#LFc30ULRKXPPglL]'săU"z0<>(]0oD;PU1ExwI5nZUzrgX[%S3<*pIJuT<dL^.QD)?jipaG$ebCCo/ff*0J2ăU".5&[osOt>p]TJrgy>aD.j'^SM0cFFb621/+#]4u%p()9%%%%-C%,)44RjS-+eQ&ăU"%+%-(%%%/%%%%mhm%UU]SMCGCdjx:=T7U160TIdiuU)?6=PvVU;c>Y'<JImOlq4ăU"j*-iB10BYBtpr[=LpT,,_pAubjj6jl3h#d[EKRfVfRZO6gwjCl[>=J>d9DQlX^%ăU"72RI8<URlb_Q\ef=tekLu&-sZOU;kK:Ao2YQ'96b%Ew+#O;tkoH#]L*K'X8dD_8ăU"g'VHa56i#FM=+?YPr<Y2C[VE'BTkL;sNC.-fZDll8A48a;Q_,))eYL?7Q'J4s3iăU"%%#o;x_MjibP%v8&gZqnhUi(n%4k8Z'd6r$^,xi&vH]s^YY;GhA5$XON,/6*l(<ăU"ig$11Z>Qs_x]wqt)tGo_en>;artK[q-pWjvOd9Ibk,/aMJ,t7'OI5Uj5t:1D:=FăU"<p+(_iKqn^9t=^6Qn%(Ti/;K$pw+)=i<Mc&+=gpVYvpHE/<fJNL'g(]x8/O[U)7ăU"H0Ic:?NLENWVC:F68CGtgH4\(7Q/t,V5NYs$^1JpV8\.[:j7CR9T^IUc)ap=F+SăU"^6PYE#NtK>IFoeM_9JQi*(f&xw5d*Ym>ExryzFpf/IIxP[qSN<+rqH?P4KJ8mF+ăU"]i<uWAF5VS:,BfQ<Db\CN'[([k\v/*[f$nuvDSD$'+,H+'w%u%p()9%%%%-C%F)ăU"4=RO5m+Z<&%+%U(%%%/%%%%mhm%UU^SMCGCtdxr:U7U560ouD_Osp+]S4xRE4m#ăU"-]I\.UPDS:Z+5n$kngl8hbe#]r.T^wRf+i_L7_3r'uxP?m<N)or0<C_WRb&Zo44ăU"en$BxKHt6mC,il%+OR6Lr5$]mW<(vcdNPzHrc<wK>hGed#aGDJD>(B\sWL=jIkvăU"If6:MFKNqWt]D=T7*IPJ9udf7ofhw64C^sFz^2#oj9A;hRNV=wV=o0QatPjg_3YăU"yiGoX(^'pA5D'oT1+nmhRkZ<Z0Q<hVdwer>^$GU:bP]IiP9a+W8a3:?V4UagAsoăU"Ffp[Gt7g7XZXJk]-G\(QFrD,.o*jr3Z;&K2]-W'1r^%-jb]]'QO\R%1ZY2l*ngIăU"mfsP\f^Z6O<WyB1iWC;5861c8.Ag,/:z09DII42F,:_B,>CKDQCJ7n,.5gVib(zăU"sfO8d=Tlw4Tvoiu_.FrxB1*DdD+CiIM;AW,%4?4YoO*rFEK+wtFkK']182YR;2kăU",(EH\y_BM<y&gmz6qnz<Qk(]BB0Z[+qT4sDYo-;Koo/?B=U3pW?%hd7eMn2aheDăU"[/.-a:WTieP&Aa'Et3-G5v(y:AM6))m.up%()9%%%%-%5Z73RP-FZ:%Q'%%&[)%ăU"%%/%%%%mhmU#VUSCMGCdb<:]SUU5Uhe'u3HSdm:ofR8y-wl[/V'3-6b1?=>*HnJăU"'V0Bhd30P84fAgn;5_knxjBGMe4P6bTEl\J3(f7wXoA)Tmcdt(,whSnZ(l(898<ăU"]kgb4gma7bKtF4(p7]biSb#r18\ZTgY]?;h0'Nn05,6CIjBL_L4N4MjZtpw?,FjăU"R<J:Yq#nR$qYW^\K$YY4qGDyxxHA9w-GTs9Bx8YZ&8#llDG/t\LOCg==Q)>kk:căU"m5FsRV:kI_[;rfM7P*-=uCL#fK\jF='J(BLlyD$SOC1T<G'-gR2i?J('3hE(D*4ăU"#8r00s9ZL,]OD.JntxiY+I8KG\6[>Bfh5;z2EE41Q6sOw88dbr08i%PtPj'8X8NăU".#'[h#*uDDclSgScC$F]J?CCS2y]hgbI1Bjr6T/sM,bQtWlGQ67E[RxK9h1nv;răU"uh[Tet66'9JdggR69cthT,\'DQIOKVL*OxWAEo6XZHqpHlGrO(RIqKfdXz/1qUCăU"]5kI9r:^2'HSXb105[^:KNV,quE8-ks5UKcwsNr&KR31Rav8S5l67)P4V56vUKDăU"<:9LoZwdURq.7af^)2SSZ#_H3]9>?K=,Ya&,Q&$-K'ML2h-CjO_X186%rF%j-]băU"D\<e#,lOJp'C[qLG_ltVs*[Z_g6Y\3.\p_bj(b&ET;'TCR-WOoRKK6:.3i0XSocăU"bpYJiX\RRZ:LL$D6zM't2up%()9%%%%-%4[83R8]$h.%%&%%'J&%%%/%%%%mhmUăU"#VVSCMGCd$%bt(V:1Upm9r4w&kt[O&R(gf?J;1WPWFfl,hRA#Br#lshc*Tw=f9eăU"uQtHk7w>7dM*>QfL3\)/,Q$*z8>F'0r2ZFF8^[ZRTIdXaRT\2A.Cqm/o-.%4O6*ăU"uSHbS)HY^onFjeGJCU?XrIt0&oIZQbGEuqP*Bi.,)Y])kA>BM,g44.ok?Ynpg(\ăU"=r)rDxjC3rs1[Q;Zl\\G&4sha/o-v]g+T=l<8KinabPp'77Xt$\=va(FZP+JSe1ăU"4Q6M/[a.A:Q:5%_\$5_eiM(:%6m&\DIh[Wb3tuc6C_c'C?qItbB'_OQ&W(i',uHăU">yD;y050cj'u0up%()9%%%%-%.W&4RUo/k^%+'%%%y*%%%/%%%%mhmU#VWSC2GCăU"dx:f=TUa558YFDo&x-Im(j7uDUp0Ih_$Fj&Q%19fomQDwLFI>$%1L#7CatwRZG?ăU"ee/qo&lqn$-PRsR-#+4r;_Zto\4&7YLrJ9-\sC8U+ZI1\-5(e[BSSeDoB.<SE99ăU"Sp3+)W7*HXdZ.KcF5OfJ\^4_,]&QPS^?7[LoX-P8%$]/rYbA9hmK?*cj(*zzt0WăU"xTt%K)qr)<2W$4k:$oc[K)JYsj&wpCDBf8#V#+9Y1fp517sz%Cq;9^QUREC)EU0ăU"kF[aOGOs0#2J3kD<rMgd#v6t9AdL?P5hqztXY6T_Y0H5UR.H2_Q$_U8M=UTY9hiăU"j=q70($B0[ivV'sNd8NzqXaCk(E'_-<>>dB46WhWJ9E&URn&)FS6+1E>HPGLDgpăU"cYsUTo<4-t\/o6gGYXoH'<>5GFA\b^\&l.J)+6V)D*z,*.N>+MeB#Qilc.G<C47ăU"\Q;#mpl9ZdxRYrlI^';SbK%xc1Y-&;cmt5Q7]G>t46;Ru(4QGJUCVqnA$$Of-XbăU"ktn>SlE#;Bci-NB(+*AA;je#7hGTE'ijkhuD3'tUF:v=aL33<P:CXV\A4kVq0<=ăU"MFod;dyn;>/]):^fE>bnt3#>F1-vGpl&\t:j_1fncn0[pG],7nrDEx(N0$q%UJmăU"ET?4g_FpFMJT;^$u,%up()%9%%%%-%Z(e4Rw41pq='7%%v)%%%/%%%%mh%mUVXLăU"SCGCSdxD=]TU55F8Id;^t=&#5xTqMeINQ]'Y%j6,s(XR'&Q[9&fENP-wt3N$DX(ăU"m#uD11i.^hRZRFI>sRLnNU2<QIi3$IafRJI4MM.xZHxwz9%HHZg?0].HJ,,X$OwăU"#3IH6\TdGyMR-0?Vq_]Jf+K5PBYaF=0HSCY(BE(q$8nM*x-aC66>\k3tVdC98YxăU"Uh-&J^3IjmLh7PHAZobjm]Lp%#BGg#t3o^LLy'x/ME,)aT^;xR7L.9c[_W3HSUhăU"'9[F.K4FoF2ljIkPp1kU74Q9B=dSX&>e#fRxFJh1mj,b9pI>)MLTl<\9.u3L2c&ăU"YAhU>r&e+Gu&aa%<D&+W-ALz%y5L&H3/an.LTB)*k4.x:<g:n7\k/hRo'O2Y6c'ăU"W)+2BhW]q<SC(d5&*hknhN<BF/iHQE#nMySJcU(w.YS9JZh:AznH^sH%5#%\ZaOăU"U7JLtv/t$_wkBusk<D*m(_1>-_$?Z\(&x:Dor.0N>x;>:Cg_\0TRW,pgS9nfaN.ăU"CWS8G1D3>?G=_+d/9qO7k?P6s/)a?dj>[6*9;2%u5)8nQGU_nY0IqJQT*Uk%'PxăU"md,AEPT)s:A6-ulg=t.i^A;S83&]\?xdH=*wZ5J7gp+L0R/VQ>1PEsGW2?#'%Y)ăU":OB9nLKUH_;^xiVmD*?1TJmXZ,PDQ+29k=?/OR;nBx%di>do;=jwpEn+q7JTl.LăU"TD5r9v.rDmYE:ouxE%0cb6O)</6Fhu\L]MJ'bm,AucrA8.l\]5W?MdX54x?g:L<ăU":8z^(]e;*<#V9E:XkL5Gnuw&N&up%()9%%%%-%1\h4R5^4DR%\'%%&w)%%%/%%%ăU"%mhmU#VYSC2GCdy<D]Lej55*kadm*ra7;+1CH/Jaa8KO[E9<a=Q#<]vr&H]nunMăU"QGqRf-]Y/>gmtycc+<Px(RQL$^^$-5$ItraM,YZm)In.;(xEt&;:[^uH-,p,mtNăU"?$GaI9n)YpBbbN/]dcjn(yXJ5/U][N'qmdI09TI?nE0kT+GH3,dXVuq+(]CEsu^ăU"7HHe;CKa1m+O68uGeRQZ8\/'SmrC)oDr%4\gIu<2>r(?>>Wa_.n,6ak]K1OeTV#ăU"J*JaKVN0iDdKAGY?.#Vf8pU44eze)K15bn4q81)QheoG:b,:+g#2IGJ/LyUt&M8ăU"E[o:s$Fgwx//B#W-]T8NKHY'X76%)#ZHC[Ze&h6mdL^]\;<T+Z/?_>(]gQM)I*/ăU"LR69^A^5&Xoi?&#x6%*fmp\qRmhd#?r%'e7xR#l_=:h8_PKaU._C2[zKXN,]KRBăU"$U/uF_>M(_vY9M.Nq:#nF+*TL3u[o$8<rNI^jzVV&f>4#)l+zO]9Yi,*jasQto]ăU"JE\-e\O%7[HX3[8WTXr=mG2kSV^^2YUVy3\[j:EhhU:d>nDim]?,k](hB5f5cf&ăU"kY4Ke4%8j3]S%BbrAB_Vw_coi+/Cb^qN)[T026'8+%o<jqkcSvVpx[9$yqp][RCăU">9C[?Ixld#*&#KGYmN5B7TrK].n3.1&>5vq-<W(KA^Gb1IN+na^Nw5SAoJLd3-WăU">U:ySwBDR8[%?2_[V(]0==pxbFv%.up(%)9%%[%-%S_h4R=Ep?r=[&%%w%'%%/%ăU"%%%m%hmUVIZSCG_CdwF,9\U5970m3mDb4Rq<p$K%[,,;ZoI5Oe;t1.B+KmA5l5LăU"lB+#gI#MZ=jHJpPx:CV?6V-mOwoBB)_8EAALlu6JIZcoP^k%Tmi)Cs-84-?Jc5(ăU"8.&7Zta==#m/H2smUlZ&-SG-M$1zPmH;=$Wwr).6N_nfMfzG*gE9I/l$0<2GO#3ăEND SUBăSUB V5ăU"pQc)9krq3x=VCAk0&av1T[nqXsjCqaai&gYLI.?O1-ipIZKc;IGdLn7$soU$&)yăU"T*l83cE_),U0M&ZZ9&TmS<Btdh&PzPmvad.e.hi6B.3EbR=/fk69^_:Ah7lg<lBăU"&KP*&/3,WS0ks;SMLx:LC4&>V*6TFf)TQrLR4HF%BqP$Y2wRgkmr'MDs;V'(W.văU"o$HJ&7p9^5Se[NXP?MT/lLYvWjsRhpgGq9rpb<7*9A3G3P.cQ^v[3]/:P&iA<\;ăU"OV-J9M>9Cl-qN2%gpz07*62&WivS%Nc&u%p()9%%%%-O%Yi44R&uD(]_&%+%l'%ăU"%%/%%%%mhm%UV[SMCGCddwb>U7U1V*fad?lJAVat+M3)f1X+v3ONSheBbXxL[=WăU"z<lx7cU04hPS#Z1mq9qCrCeDS0iL)n.-KZqMPHP]oosMiqmi:iVx?w%r_0:[re&ăU"(.U89Aq9&%T)H/];OM5s/4nRp?:7bt<pHdL3+YzEg&-cQBh_u1o5\Pa^P;L'issăU"Y]&i^.I_V\Cnk&\QLgm2T3M'NRYGM4f('V6+n\5b3Qdcdgl\>ihpq*Xpn.?[f2]ăU"gA/;\.FOP\qKBE+*&Z9EN<mQ8AvT89P%E.gN9.e9'',fZ3aY#g'AvVcR+vO-s&1ăU"n+;H'nTOZ9;m40k1&zso\q'(?DjBSxmPsuW*3HpL)/PR:^d%O;H%%_eo8?J&bicăU"^)*I7rBthkPcc3Fb9hZbQWfhLgLqu1kZol:(7n(X-e]*GbB#22d2ESOLgM*lpSdăU"jBT+_'R<]01Cxh&0T4ATxqlCQE)Yz,bL/003K+#N6*K7Yss;CIA?JKcsq.3mDzZăU"n0JZ(roYBpU,(l#u%p()9%%%%-L%fk4RRlZ[(N%'%+%h)%%%/%%%%mhm%UV\SMCăU"GCdkc:=TdU1Uha'm35R>=+o7b2Q3jjJ1AG<9[oP6S19+2+=mtAUebIlo=j+Q4QeăU"[%hWrHxumI.\tLEPG1NS(BT(a'kUt9X0UUMZ+_\N6x%H?<*OHUd6oiw+)V4aHsqăU"141I?'5%U(l'<gNJuf3$:%'r^wGOerfTG0:xU<;_jmKYLK-g(LSVPjX<\8Q^H=%ăU"YgZJ,5Gy:\x(sfmn)0Tn<,DaPVJimRk^EfZRMMX26'G3=3a^E<Oo#q4s5)H2&xmăU"KCt#E'JK>Pt&q)tc^_-WYTZ5uOW>BE*Q&b8s7-=P'$=,Z\._:%;t$LM%\>%hICXăU":?cHussZ7ry)B]qI\GXD6Ly$6bsrB[n*jq+4_W.Z(rHKP)G.GB7p'px9,ciDR'făU"R.KOG&[syH(siP_[_uy&M?ydLonfq&7o<>q(=rU>+Pn-Du/\Y%)pfgV^0g?6N\TăU"]cO[K^N4's:cg[:f%KJ[#IQ?aNZcuT]&43o1/0ka[uGZ3Gy'<j^PaV2$:T9xh29ăU"&e?k69B[onUom-O3PH;]]*o;&g(;Jti1a<d^O:=EsDK:<gj4FIv2$t*A<LS1odxăU"7-LCs7CZG1foeC.Y\KrnbmjSI*eCo6%7?vJT9OIMf$VkZ8TRv[MC_?O<%O:h9LfăU"nZGSbk6>dl;A(dC9[9;b%41qJ(+.tedV');igrbW$0pisYofD4b%^9a(cRW0UccăU"$B&IGazn$fG4)U3]ORlBs]AnFlfF6aocL#*igCxXgBLtbV%aXyiM,6F%Dup(%)9ăU"%%#%-%k_=8RS]#b0=%%%%w%&%%/%%%%m%hmUVI]SCGhCd]*,=<U1^iF&skVtO-/ăU"?WDP;Q5i,X)A%'+q=e;g2XUJ98Tf%4rPAGkX4JP-H\Z8$7]LmJcLk3AglOYt=xZăU"VuT8#4.p/YuC.i-halO+2Gpx*LYI$V#VJ9[Ukt+A29h[<pA5>ZKo0RC4lAOy*:9ăU"Y1n<>pd_U9XME0HbBFU8f1m?WBnfYR/pd>D/UU/:W*/EF+/tVuemvAq/?$eFnefăU"^BuNlO5M_'(]6qy72a;7n-[hO;Iu&7SUiJG%dup(%)9%%#%-%I)c5RTTm<pb%.%ăU"%g%#%%/%%%%m%hmUVI^SCGkC&(T,=Tm7SLL9N)wLwWJo1,KEVff5&afa-pA/[V=ăU"nkOG0Tw>ME/er)ZJXhxZc_Fc/k='h\?Q;4u3cMbr3CWPoTz'bfp\>bl6GFmWOunăU"%m<:F_C\#YL]jtA6<0JCQKVw)9(z8w*QRNNCM)$Lo'.aPNl.T,'r8jcin:A>JovăU"ktPn\Rq.EplzbV,8/uCW^_w8#8SPm<lstgS&uIU>h[x6f,4gkbO_&]s+X[YwItoăU"?\PB>L6>[F*mrS8-SSw\2%TfK\]w=8L/u0r0NF]OMgihacvJ>ejOO;)$cjAU8LUăU"2cVZrTQ.Cy)JB=PD;02zQ)tNd&r6Q&XHKqlhEY5FW0:.t2OnP:)EBA>=8^wKrA,ăU"(avzFANsfXUPOHcOYCI,QJy$X[lG%;Iv+)is<hJQ'-xE*GeSFP;ZE'ke2\OJd$2ăU"7BW]3l-w'=8&'TEwG=f\QI,'RyU9RHNZtV[WCBoZqZ>9^EL4k>ZkvG5?gzt(N4AăU"gSF%ZsaL<<_$^u57P'ls6-bf,r9>hk.mtqPg=8YN/TXS#&$-Fe5zXaQIOV[u3/ZăU"HZS9]rouS)P^uwOl23SrN88H(]f:=;t7p^97-thc<W2RsJdA(HSJ=db9eEs%k,+ăU"q(TH;rP6\l7W/5B*q4o;pqQ_n*Qr%wE<nPhDTJXz(,-she7gMvW5jRG3BN6<Rv8ăU"wOd&:Qo93RFx>PVM0A4GTYJg+)cUtFQoOxHKXPICYI4W/M=j]>iF_lQAwV_JL[*ăU"SC,N-/]x+/E10i2:qZfm\l-\Nqlfloe:s<ZzIhHe+<I,62UgZ\d]IZd70eCBUriăU"G7Y$$&TS'o?a&_VWZLG*_CnD*XhBUY5,jhfwkHlalf(cI;O$..R6.HFqDe<FJ+jăU"OgLP?'J8S$HZMpfObbHzR[-HJ];0T5k;n-mDSff>=L6enW(IKo$ryL7]gY,binZăU"_2g./B5UsP6gT6i^1b]5&Dlw].Y^F:+_'qU<;GZ*9wl\,3b\AQ*erqk,m\KQ*e9ăU"qU2<C<2N?Q#$atDf2NOQ#$YtD&2NOZ8k5-h+^t9CBn0e3W[t\B[Tpff,H7EE=0[ăU":nH1%25GEERD^oZ.kWD;QTkj$H8Hshu*m_ihu/[5GKHT-ogJ]MLp4+Yp^_3jPcDăU"I.^W3q&uKIvSa*CHsp(_%F^],:8'_l7fiJiG&p(Ez7NirGMpi^1rI049eK(waCzăU"G-d.a1K_P;)%$GvgZxh,*1b=K4wf>u+HIB^tnXJo)orNQVcA<R:O_b,Ic),dElLăU"k*=c\aTr>mA\>R1,l[PvFR)&EyA>tA=6\yqH^9?GZTZ+Z?;AxSW3k7okoa#X.9LăU"OE<zOzZJV;NDha<Mt(=ouS+gTGyW+V=Y3I4/HIsN0gD_^J3Ogj4WLsumggw6oFVăU"S#q2]W5VBBwi4l%^])V6p-w:ugmjAZP^ov/GAHxEktAt<.?,-apj/XZQ-3Y3T5]ăU"Ie_f&hx>%OVNl0t9E+&?Ut_>w/t%17n;'8_=Rv)+*<#)-BE2/Fi#9gAeWB\:'YAăU"94Zdr[JR7sN[+tI)2BEb[.p)tN8ho+5xveBg*L&J-&ks5oSU-?1hw>vTY0ZO3X:ăU"Zh5rl+:-SO1Xm\>'b>phIta2qplcl,%.qKDcYQq>bD]#4%a'<4-*SGhKoIo%R]năU"3u-[mM\Xm0W]X7;WF=ab'I[p/U6?&&suPaW.P%tnlSj0V:xI?.(ax]s\1gne>*)ăU"*FOICiPA-5mp:tO7W*Emy-lfZ]tP?Sj+y;PcaLmj[0xZ]wGZ0rP5-VXrfe#lt3WăU"J\a)ck]SmbI=vR]__N;B-9v]g8zg[<#)t0]&84I*7lxO%QO3&mAcD#BbWA*'iXhăU"*V$v7cHbyl(yo=m[c^C&BbYI+oHqjw'H?9uIPMdUaY.u1T'$Pi?*ENPkkqy?;7UăU":(4-s\?]g\B+7f4&k1YXrV1tI(AU(mV1>gE;.O_Q)uUQPEVbh<=kZG?gZ++HUV(ăU"bh'Va,kAiup#8WJAyIuV#hZ9>AK;iRu5H/jjH:S[WuPXJrX)=7,-*3=%ecGE&9>ăU"wnH)\6sdUW6YJ+0;0s1N=G7BB-u,1UP$e^SY&#M>wIlL='_0hz7uECDK<*p(Di]ăU"V6HE)SI]ss==,s+,wJ0Z'H66A_0tkI>2'3V93:e_-B-r:'v3^>qjV#C*I]$]cpGăU"uVN^Gos(J3:85%zG8pa&lpv)-VvrB1..r]1U\b]h/b#C]GGDZ%,ciQIq:sS/d61ăU"4nPeMeVb=BioXNi:G:Ik3Q.^6lA^k>l\$+kPO_$=y*.+(OLm8ux0e5r^WmB\5,+ăU"nuRnrXS7>ZiPn<U5ovJ_a#x2>EQ*.2?UBq4D[4htlL%b36LM_#EaEU:]kE1;>?iăU"g0G>mV[?CV/:^]O'#b_QOtSmb22h?PbMm(_.hJu[<EGw[MkSQb[7RfJ5Ar'PVB0ăU"AbGKK2w*'i*ux]85>2=gSAjKJo)*cOI]PSFngSHQPcmR<liKd_zjLOn^W^u:(/<ăU"*_-I07:vCdh.zg-0?v<aleRBrnkbuGHx:Cn<\N;Cp,RIZrF5PutzdU29bcSfin&ăU"1Udl80dKn+N.=24wLjr=AsbEUbAh4%/;MDBSVsu?JQkERveIo.y&_)pt->TXT<năU"%vGC<]Y-YQ'2C9-.m-cA9(1Uqau,QTd.CXQCr'RGfaQIsptbsr;v/6PVH.URnXJăU"-sLDFMYDYDWC,[jF?:peN9hM9b60:)>&+QtStpO8[d[]+J-6?FOSLHiHhYM=cs$ăU"s(LB$hG54K[1zbf>Eo^qg^_lhR1o>2Oi*cg?e.dN]:/qVjS7Ly+eMPmd(7sxHS/ăU"+wsUcliY)NY2RjpXp;rsPZ%3ejA-$+ZAb:8,'E$s%T<t]FBg\4c*U<qlU=.^E_/ăU")p#4$?[6r;z]>b2Z>HkoyGuCi<,H:-cqY9DM]_Yf=[V/l9BPQ2+x;ii>%8P$Fa7ăU"3H<UPmq?W5mOV6;>N/VEi/V*mbj\alNCQ).2pxF_xOp#]*jFjHYoU<Q<0+Qk$DBăU"wbDjxB*ebNw8UMh=(vqxUktG]Wjzqx%2PCtfuDoO4.tPNh#bmVh6N'gytmD5750ăU"+AA.'q2Rr7.-8+9:sZq'.k'qwC;[b<,t8k(j&fd%zfrbPx\_:Eb)RHK53SZf*vNăU"%up()%9%%%[-%h5J6R4/7,uS*%%%n3%%%/%%%%mh%mUVfLSCGCVd&T=BTk5LjL9ăU"NQ&fgNO)xE8(4fWk=T2%&,[EfAqe<j]=N&f+1_Fxp8<76ogFv+Bo$oZig3Ekh^VăU"B5nHh7&i=bVd#jDhCT=mqZ-MMH##He,;ZxEv&;nWAJN<$=&T&;v)UPWXWH2Gg+MăU"ZM>\Aq3Z?D300x)0e2:NoU2X:$g:zRQJwRkd1jr)FhT:[>JJX'0uOZUJN*o=zu%ăU"bQV)a2ILQ:l)D].U([4YKn>>e>=wD72CllIc$_&qV$)p8db5IZ_g<X:f_OPbW'aăU"VmSeSG(vhdPn\2lQF5dl3LG.;W(),tV.^$eD+TT:J#UR_ne)UMn+Xx-LU::)D]+ăU";bRyr0'U>8dGKOBkvkEGv3QY+$*hkfiVCCSp\t/q+hN.ys&Du*/#JVlEv[AFHn(ăU"'ixEpwGSt_?QQ%FgA5/jwI_VW.^HVVMMWw1BiP7u:rNT4PJzb)8&;$dz8FuHcFjăU"IRK?.8L%b*HXdSMuIzBy)\f*s,fdt%oV\yWjCb+(CJVSzy4.h-TI]Ca9IrrIU:aăU"*2FE#TE85blX(^+D)9/ggg\RteVBf_wC-dpb4LiAViD'bx-LCyVgC8-DiN)/yusăU".?>K1aCdKuJplZC+oR.yqN/$6UZ*Yx:j1)\+bt-rVG)WcJ)U=sC(4%/Y\B:HBLTăU"Y<7nLPE)^JLcmO2CX.JCN,KH(h(I:G,N13MMAKTU#]oa.+dOb2SZ7d++N-1d]POăU"qEY(qZ(V\\:IZ#-*-Kpn,j24md>X]4b9wUe=2bChvGB*=?uBA'N+M_hR-8FChjrăU"PATL;QRy;OG>mjeIcM[b&=2)hu5.rGWrxiuEGlB2:[k5VLulY>5*^%ORd&)_8DaăU"5'#rFfD^ipG+U,O/:#Acj;P'IU=qRwm%O#xvPx<F5998hbH8kCPx6mL5.GH71)măU"7Vi&jSp:Lg6XC=XM7X[t2TA<MXq6-5IeS_--kU1>>*q0J3$]-VXH:&Gm8:I%mujăU"M(7nj^/CUT$K2f)<_G5*[+p8Mv)V_J>=>>j749'XEPTQ(;uL6f&0JM+Z74T?/SgăU"^=.c4?siwhGm[UIq)lZF2QLzW#oTH/;]Y$58FRfjD7C8]X2QZ*P/3)Wmsgb.f2CăU"r,X]B'el(B=E8Uj;.X;ahWGal(4[Z0:Y-.]1N;WuyP270Qkam;A_26n4(&i]E%LăU"YD:WZ'X24i]ah+W1AXCraa^aG*#6VV2Pqi1WVr8bQ/UbQFhES[vi7Q1IP7enj&AăU"bdZ^5H5qJ0km,/<A4Opg;kf%v#0[<;8lE]S,uZpp/hX(PrdKW2ggKISr]'SMf^MăU"MaKlRwCPf&m:(X^<xLP>$27#xlK;fR)Hgcg]K3&3Eh]I,70ZbjecLe8<?,//Q0LăU"uVqu1+tYZJKGRHJz3l&(_abm%>Su9e$V[Yspr9Jkm%&%hY+P9p/5Se33yw,.JwSăU"Nc/bCYSJ%<4F_#wXP*R1R_/LF#]83F.W^GwRV8&_LaW1*eo1i7+5EFB(aSxeS1DăU"(D(guZJAQY[lYi)Ep(e^iL=Cj:^7;WzM(1xC,;u((;Jf0<X4UL4&d1pd\.KDn#^ăU"Yjsrq5U5nF*H+alqm>rW,VJ=nI9?NKp8n8IQr*5NXO$<9i^j(W5y*fMc.DpQ]h1ăU"g^XVj5A^s(7,)GFS#5$tX?f1BsTZD1D1m4&w?R1MAq?;Nj6YP3mUgp$a#VDVtiZăU"(5jIurcTjV:(-S4T\5B)&5unjCaoQmf_ukTPaJ_S4EhAoJ^L5a>[B(;a/rY4S'-ăU"VKbDZ#pblceV>r;1E.?b(6g_vpAT4+91%;aXGMM#vda+93NrI8(qTC?qh2+5U&PăU"E.+uJSU&<UAeq;=<xAsU'^<;1aN94Oq#TpbA#&.SZQp)YhchgWq\tCZ,.Q5)#w.ăU"7v13A_NhFjIo4Da>\RR4r3(qv[:stx'x(up%()9%%%%-%4Y74R'6$ie%q&%%&['ăU"%%%/%%%%mhmU#WUSCMGCd$7rs=UU1Tpd8I,h%)xo6<UeWJ7oQH*o+IgIGUryQlYăU"nT\sV4wQ$q4;8$*pHd2nVeioE3TbT=6/Bqd(jPF3lu<CuxvS_NLpO6.5l/.:(k6ăU"]Za63[gM].S_u<c-VWb1c0h=gGKLaqrltX\mmP5PxKQ[[vTL:G]CGG&bF+KoQ#&ăU"HCLUa%nW-styA/%WC>fBm<g5L-OFJOP0T#Sw\2*i9u[/5:Oc#*p>?j3:8CGUYc4ăU"%zGX.Gyihlpxvp77[r%(E3po(.9Q-=_SAirZJ\'')7uVLCx12G\Tqq+6)c#/K+YăU"F)HvKy<qr(&hVJ>_1A-(wf8_q*MI/Jb)'Ugz3g$lw'_h_xeQO\hc;q-TS]ap-')ăU"oxgopZjH0^mN.rtwpi?lFe%C=0,+k%,,T(,]lsBMo-o<aOx>6XGi/o'u+up%()9ăU"%%%%-%1XF8R1$VR0%w*%%'I.%%%/%%%%mhmf#fxSCMGCd%7px\k457zo3xpZpLqăU"doE:nASp238[L1Var,OQ2\t#&tG8[Ab%x$tKb;404jAK;**i6gw-RnHb.4[kx9?ăU"Z-OFP_1*r&]gk/<cUpSwWpnhTl\QjV7Y?Tv[]1x(o3oL?+y3#YLR=;<pC['HtLHăU"pO5>L>d3s-K6<LlbZ3Z_=mZ/cJCP^m/J6MhCd1C8x+Lx#83=4#Wa0gl)yr$CnZTăU"<:f]4yQ%2-mdJJhy8]72f^)\$H)bbQw$z.)c<SPiTAHQgYc#rCehCCNxs:F]2MWăU"2.Q0hKO9_HhATnI7dHH$]JQ;y%nVvPmlITe?'6K0-eux\hORlgiGh]^)NO5Gb(făU"DZr(E>_?-eMh3H7+h0g4[oP#3&bjh#^MgE8lk9elud[#3&NwPAIL:gkmNa3fbx>ăU"Qk1&rmhwR'L[KEoql=e,Vz7nG6B-Yba]7dK-d8L;,)j=bq[sW2^[)gB\&o'W?WKăU"WCKme=s_P?eJ,)'u2gbx5;1aDsbP1]JN4s<7C\]3?l4>9GETte.<a?N4%tT>FwoăU"R%RGBYGL0=Y&ob'Lb&8YG[IBa4A-:K1\Rb9Fz:&^=JIn2s[z1X-Q3Z;(-X#?e<qăU"1R*At^bfX=[,O5_v;PNY+Wf<<UTKfnrbj=sq3WN'g10uE;>pueaJo;KlpEu<o7%ăU">_BL?D3VO%uIJeLVg#^3kkv+WkaiF7FA:CsOhIHn(mHX5HZyR^Y'1Pm2RX.:gLuăU"blZeeb],y(b(]?NX&Gd-&zxE(<KyS$i:HOh3nIg?jL.MJBNY_3Y/mQzDe4v.-7MăU"?wQPu_/RPYsh-:p?ZPDN-rjV\L00R^C=ioc&)i%j2G+LM)v]tD+c19JMGXXefBnăU"Fn%?/^-n[$G=SY,BMV70i>JzWd%nNAl)/,C$feCH:/f8EdJ%9rt0oNQ>N#ynv/răU"&uZ9LT7[h-x/;s]Hdm,,*E$wWk_Sm<)2j&#=qotlf\vpOjm5>UK7f=%;%G%j4Z)ăU"I1GD1x=uMMxiXud7?f&JA]Ka[##v^,c+g?R#g[B?bklhIZ^$-av]ZV9]Ao/pAa+ăU"'Z=(P.yHVAmHZSWJ4mrT(bQQT3wPb5uI[cudZK=:[e.[[Ke#[bUCPTVE>^]>pP;ăU"ttubq%s\i$em)Of<13dH4RVcN4><SRfVt&8ExCt^jUoPzvjo928REV1RB))4gukăU"m'Y4.U8S0TTQ6dN*W8H4t>)u8';dYbr,U#BVX/bp=^k]Ym=$<OKkk?4tW;\I7:7ăU"P)VIFjCC_qqmr>D][_Eal[Nn0XHTA#(3Y+$+Z'npD>c'akG3J?.r<tUAi[Mm1naăU"j;L\%=<K+[E/>DdjUr2<h<xB5d=L4Ql78BC#6.e1c5s,m1:nafr_Ut;W,ZFSY5tăU"cBus;TpJ8Zc;^ki2[h1Q[X6:E-^fx)2<O<8Fu7:$o]4[,^%$U4^4WPJRY<8f:]TăU"498V\ZZ8WR7<>SWb&)sz:kR]*C3nUNx97re4.Njec8AhxGYT4Yt\0;MQ?DnK4=CăU"j4K=\gJOl_Ah<+[M0fPA8?$FqA$V[LJjNqpriHvMBPP#M'S[gpBV51fHOc2SCgDăU"sL5(%=3rDLs-dm3oV5G_o]O*%9(7vFyOr,J=cDk^D4'3*0>+HQ*qv#A[H^I_A4VăU"qA3g8pLj[sBu5lWA::982QMD=BLBGPXY0(KBcF6$:FF2ue][d$0/lUl3qc_6G(xăU"8Lt'M;[>JJCclk5,Ar?UVv*-Mu.C&?r>TYPlZ<fX;%KjD%up()%9%%%R-%2K88RăU"dE&R]qym%%CP%&%2%#%%mDM<1;4%hfiSh10Bf66vF#c0JUstJHbx3)4L31J*1maăU"oMlK--(QLo*x#oE.cy3t=X$%<Ad-.NB4FfhegBx]q$DqU+E2cQ^=L;Gu.m/)5O>ăU"14+9/%curtf6#NndUh=mK4^4kKuJbB,*avIT$K;CnjGq?gKLzCmcF[GsT786YbvăU"Lz=4DGLbLSF.43hEnJr\wXf]oHP0Zc<26D4aq>Pbq,a=4sxLNGul#g[:WtC[hK#ăU"A$qGwb'/m_^v$RlY#;2Dlu[Nf=<l-qW\8s*a7v9$881e<PNwb&fMG\7G]oDntclăU"&WSE9.n:J&baMP3SLp;fj0/(cZpXN-((5;m8#RgjAWLfr&_kk]NwZLdD.qa#bZ,ăU"F4bD2n0,/A%rf?-,q6u,7fiR7ffM[?_EaO<DrkKJX/_F;c6D7#WrO65_w<_UrWCăU"^BlWRv3BsBXbm-92AG^RrgPOX_BjQFYA#yI4)c,j>jz+WC=Q3]g^Ki_Ke5SWs9lăU"xw&lM,Ic&Bf\icoeK4hLddbg]HiVcR;d8UnZa9^?.lbhKa]\gWPYV,Oiu%FR%rCăU"Rw-2EL_l%oEfltJ#sJjf7u9Is2(PoX05pZ9O?Cv?0s;HBlX]^/2IJwb=uX5qMA3ăU";UX7<3kf?^wXSD's+=Sl2ulHPwINxQy6u0J09hTxj(2a*w\CfKBD4V\vYi2Le_BăU"9/M$bh:/ipKj''$f[m_ql5l=NG/hk2d#(].=74Z(26eHnSXW%<k/ZTsx,il(am<ăU"xS7N'P,Tj[P]<>vm(alIdWG>Y.%#HfBC/1irUQj6g38-I>6JBC?E]kd>/1lWT6_ăU"\8_V^,*ZuHlL$3BCpXfE[+G;-Zg'29:d'>((+nnQ>v7)jR7HAchwbJba^&1jCjsăU"GvM^o[HS<MG>97F8r^JF/t,\R]L>Mb*,C;F*vZR)Xf&5WPuRgGJ__XGboYv*bW#ăU"+CCup1j_q[9CAw./M:oTkH))F%e0Yjkh2BeH_;]axQ8h3k^^jPm]hZCp2KSB6(=ăU"c:On-)=ICNX?$Z7ahB(*f;3k1*xvXNePZ8(a&:>j?-Uhgn:3IO?Vje<JE>]gtaHăU"H/7gRM)YT&%mXP:CP.hOEdeW'vQmsu[VYjmYF1c]hJrbQ9pUQJOS=6<u[jQ<4.qăU"dmtK9'vZO*]ID$h>upnbP%]Suzh>CuDSptq_uXKH]UFS/)gkoUJ>8kpll_d.7s*ăU"1Bx1_sIhK$bQwB[.dHw?B;ivFULaxElZx<%ORoM$+bYA$u4(+pI,OJF=E,pgfR(ăU"T6i(XV)7,OtE_cL5;-O=4hoQ_tA<_JYUSEQ,FC.(y.2Ztz0=4_pAik=MXfGd?>NăU"76fNuY[hT<^Jr(5j73wo^DQmg^N.Bi/F7L6pk^gfq,iwJ#MNo?itV5qL\XhbTk2ăU"u^c9baqJcKE4/3kAb]WKjYStkrjBg#[-ha6(juW%3^2Wd>]LR+V'ww1GG%suut^ăU"emJbrfdxKbzA&Lk8b$h]UP94mp13H-Q5?l;p5;4_39ood8_J0t:[nq^_S/qj)e\ăU"u]MEtj[FZkJdM,s<6[6Ij'<0W1&BaiLnO*G\xYniFw*cBD$9\:<Pmr6[AZkHJ;'ăU"sCK:Ev3DJ\7U4:brep_XvuIKN/0O'<TiF.=j$5-H6%2)wdo]hu3iq<i5HN[.#ObăU"p5=ES<lR*Y9aV,h9-tQRbweW2fs<9hZ0<tPk263ZoVELIHx*)TgTJ$h$x\>(&6CăU"?8h(0gf#ku/l*#cRKd?hVq=5HAdy+q#l.fh%sMdIT0\qb:h<*4g?9Ef^HnfBg'2ăU"ombk5.6+ky&yELZts<q9^rbPjE9ZiS6ZSs\2Nou-H.ck*FIa&(PqgO%+%s1C/tmăU"mdCBBF$oa4\D=)%,$)6ODR#QBg9X^gQL6<6=G(3[E^gXH6V<RmjkGpE:WJ4hZHeăU"k0FQ+vc-N;No+p3CqXX>R*t6T&a_XRlv3n8A2a8jVG_G[>ua)Thm.z%I,0DugVqăU"xX7-a?1a6>W$PxrY:)&BLkki,=5SZ]WEOCJ3FT2pu/<MI>AE^Dq,eG=1+a1oYt0ăU"L9fBg4ooY?AH9a'.J*&7Jtc2Qvq5dIm8>iXILL;$7JyS'VRcFRtaw=?](G(>qG]ăU"MTV+^'H&axfs,e1PLuOQ2UHh8#m6e\L/8qpqTT#1^w_>6b57iK/31>us^2'YP3wăU"E6[:K+1*e9^3LFfd]dH.I:Sf/is0gvLfvz/-o;U,JVqV9YM3EB.=(w&r*=C(Hj$ăU"dX+QE&_DJ%'It)GCu3Je$kRIvA_sl+/l^kkXk8BQCug.2hHUBEAw7h,N+EVeH,răU"MaEi7e=VI'Lj6J.j>.sHL[kCDn#[*_3B?xhs>W9PFD[)0lL_hee0a+-b=W-o_KMăU"QBa3Rri8DFYc88(l*\Wa44hjFI?wwrtP6\Gi&K#Hj'ctY,Oe8Wb2EPZI(v<U$8VăU"mEsic:f#'>Gk&QfbcpgsPY8kHvAqlVd&Jlbd&$;>.8a\RIu/83s7t4?LH[]/Y;wăU"_2'1$0R9v%/cQv+euR))MRzom($-f(Lqa+7mW_8GIwWkA2%qaCD#ib;5WC:a$cFăU"NQk^7bl(mCnyX$CXUDN)vP/HRz$&qDM_D*PnjiJI$dDPxLHhH]MOUl*t'#:$.,iăU"G7e4>,qoT&k%f$>:0idA)Sg.aGms/Grh7)oVgv[RA:\.M8H2/PJAJy--7M2$$6YăU"aTeieGagr/8qd.q7];,oHQ,T7adjTGCd;lBaf,ajo%6,/6#mat%;NP*^=?#l[=QăU"p:o$F%+o8.ae(ATbUY(RtXVWSQOlP4ha<Tfpoz2?wWAd=iAk=_OZB+N5h(D>K(2ăU"VQgSq[H#y-YU?*q;#3IeDV5B%W(zIOl9dza1;*;Nb5N/*,,9e/^BtMLV#oFI>1YăU"hG:^9lnj+fk;%y$&?9IDSNV't5;6POtT>xm;wCe:Js7eS&%&Xbn'\7bp(B'7Uy$ăU"a<tC>*mNmeJ\$<4&bqV\?*mg1pauceqfY#_H%9S9<;9B4mUL(Tp\)^D7fer$+4NăU"&/C:X(In'7pZB?Bfh7kH/C'5_$HLUe<.;ECM7.Bq26&6SYg>z<d7Hn$ue*8;_4WăU"3+j?f,qBp/'FdD?*250Og\'$]]J24H<+EKsYltpaWNS>y'=dL[dUl;9IT,Dw+x)ăU"P]4'ZM8AfeAz%ZxZAv'5_]Gn[mNQh:umJ?K.GS>'c+bpDhHAA/M<=VmMc4m-7SnăU"\sDY1.5X*-k4O/\=$<-GGGb<rN'48Q]XSLsYiJP2>hkxU49Lu*xJO'/>t<gZMb(ăU"PDEw?p&M(8$_)wR4jcP)dIIwX4&M2M$I3tco3Gr]Qs;Uln3E+P3H5)rmAa]kE+/ăU")&6XM_+Fmf$t()Q,8(9V)2IXlQ>geRqa/f*^E.*j??R,29TS*C4ILXfo^Xs.f(PăU"BG&+Pi[s.<YGOgIW:%AQK2oXNf2gLK7;)OIeFzZi<a+9(XUp3B8Z:h#p)1Ss93măEND SUBăSUB V6ăU";]vB0Sg?Z%sN4pSf.D-m/lRuVoEvHAh6-^I[Kl^'dM$[>4mxepE_H[ZTL^Q#ZwBăU"tj]xoLIg^0]1I\UbnsL]h#^^vmxb#*mkGfBzH*jD_TQ0/mt7*9+Giu,ROTo<v<LăU",270jUb,,jA?0%tvjqPfda*G:LvRY220Q*=M,r:=-0>e(U6qaeoN//pIhDRkQ*qăU"8B+U_fr^k8f9Y+1q/kR)$uJH[PBbYPa,NhidQ7UP4W[]i:#E^/#27hP?B6;rU^LăU"8aFQ'x6M/T;*90>MZA*1enuB_:qt;r(jdd*q\wnvmkm1Oq=#qQTrLM1[d#AyKqmăU"Rqq$Zb4rWDg;y\JFjCs(nfPG8Y\LKsb/_V'hgOBbhYpDC's2q,#[zzwgj$cDK>4ăU"odK%2Y\)&hm1>xcYMi%yRv3'vyT:[%N<l84y+p4d4t8Fd7u5=h#[RnIEF\o5\b^ăU"=rDwtY61luVLe'i#)I1>R%hiWtaxvagj.iix(u^nja4G'\>M;fwgT#u8Iqbiq&păU"gBtle88N%-3/PyN5Gom[h-]jR5BZTmUN8(SI,aGv:Dlbpg]7&>s,ZJDeC-<I66AăU"sCz\L+q#R<;%,MfecM'9)O)*A2Qrg0Ld&&&.z;78_iBXoqxEGqxvz6]9vjn0(]iăU"7IQ'IPL>kN0(hNfZ,oAZ%FW.VCqVXiTM.<5R9[w'A*26722eYn[LjXE_61GsI?KăU"qM*vhw,pWj,iNFlvMQ:/2Y[=p*fD4fRMQio>b.Wz/pV_]C,#P73Qm.7Z%'n9MMdăU"KqP+'O\01ig./ACr_-5IYw=miTnxN/YrUgY?;fQ8mYgx_mRuI69m]o5+D_I82]găU"q#gkW_b)H>3<IOO<3(d0FUWgUo)DszH=Aw2;0dr;zC=M[8SP<-5tsw^..'X]%dZăU"2Pona#;)CV3iT(btym?=-.q0u5RkoZOF-3?gWsSzKu_T^[Elk>NH9>f553:rvI6ăU":MQgsO/_cpuXieA4Ap)%=Zxc/Np\>>9KWrOE3iSZ2jeVECL-=4+_N8SO#;g=C>eăU"nO2MflRLT#wJnUhVBACOqEHJr[has\#:-SHybeBkUA9x7lRYQ)%mCfiK0mq>]K\ăU"0>9x1;0cypVCw&eG;IDmGog?BBgoTWBlkk#r035M4q7:Mo%bYUKkR+9afMFFw>(ăU"[<Q+&=PiCwN:6,Zk5k>UI(^U.ytiH9U5phc[nHUeKdAsTW*:)q*JGc#DH->#33aăU"Fo%/RI^jgbipDMH'P**k%5gev.I-H_,+lSGLPz]:[ox7D'YPJERR/OUn3-?U;KxăU"&Y5;<MP+kJHG,;I55_yvF6U3WDC:/nEoZP[P_<(sKU8W=h/9_\E/%W0]JQWa.y$ăU"a4(PaWe/$OPcMq4Pj#WeQh.K9O,Wd>J%$ldff;tY71mupgI2WQy-o#:/v(3HN0măU"7It9#v>_aP8D.O]jKCJB0.kst__+,;$T=Vs?TJ4,G3qMZ[30rk*HSZKfwbsMWV5ăU".Jn-Wm5WQ:5]eIz*AdJ+8:U(oWbGnXALo,T%q7$7/S+St:W1cgA]kA7D&QI,hu3ăU"ujw+Yti1Cz>8hCJo<44s:LR%=-iL;&JNcFN28=L5;2WDXwjv\xAIP;:QbRr'tq^ăU"85&*Ehct=M.Xc<5Da,q2d##0=O<%yAl+Iu]rn?bSh.)RAZEd%w[BiMY\0lQan,PăU"%-=)A+Pjh%L5T\85i\9bKgSEM'R#)QNOGPQwXrMWT78lFK?)YC8lgqAmmRI9>crăU"5om8*;'dp,Z*/?f*7Fu#hEm+R%,lok5I<0<;GTKpX0m89vbcVD2)ZS-(=-J$Z26ăU"o%1lAWBrFRO?]q??+Dck'lq-UR%7QIQ?B[+q/500I/xF2(NEpR8G71vp926r),ZăU"%/=s0ZUpjpM2$I1LVf.PM7o9t%h)ME4X/cP_=40=V2.Z%(q:k$F3Igow6.'%B0=ăU";18oHUpREwQ3Ahk]9gR(,e^Wt[qirN4TM7Fj5>s):)t:g5T[3ED.$Jv0<VWt)QiăU"lnSktL_t'Nr'J;c,DDqYt7-gI3WII12QN4#&j>7(NR$6=J#Kglq;4+QY0P0OZ<3ăU"/aC91/:SfP)1Oxeulr0/s,_[<wc\1hz_TFJKI$#,+0.-bjRV_U0AoP$v,V-BF:EăU"b+0\R-Q.]$%q?5YDWrU96I+)MQo/c>6&)aQ%0NmA=NOv[<$Fu)/o]%jTga#_KL<ăU"mM;[EyK*+_$e*fE4h<QAqW?3Gz;Np33AYp2v(&htBiFC0gjp1]>oWa=QW8#GBG:ăU"^V>m_FO#*fm=m6bU=i*UbS_>o8xNlf.WxB\CP7iZ)&F]rrPm(A6XUi$[_A57?DqăU"8lC/Xy5%l,?/jEsyD7WMk)=+TUQ_5*U=SdW_bDUCq*)p29:U^,H<7JDVBG(-wnmăU"j&Q8[ZrBVDw7OMI:nknGisQuK1Bf&M]TCGR:BE2GS[U<dkmOT5-n;m(J8&]B0'eăU"lM-ROjNmhb:k)sBPW$G5?KXfxYP-J_CH)hi%r(oSW\ztmiMwuB+1^lR?FKMZs5PăU"Fy4j8YVkbD4U1l&L7x<^IAuppj?I&uVyYaq^jj^UIIFJsn23'L=N?MDY*zm^Ik_ăU"niHFf,RcqH\tFGpUvit8'FpbI?\#L?($w$/kh0x%o*n?co\GeTN';T(iLipBhL>ăU"bt#ces7;4Bv]XzLrOt/wPt^.k6.)U'IA,c[Q$]>?gL%RN3.)yKPAsaWYZH&p($BăU"hNrc<mM#9$3b]tpB^DmmB+Tg_'M/m'jZ9h6YL]<p0g.DW'[>Xj*>+MlHa]OZ9.JăU"vq<[saP>iInCV&)XiY3,a,+t,1u^MKNf%lZ%mm^IugW(4l7nmYF).\v9I>,w*GiăU",#SeKHU\P665(IsD/u<Ny-Q3W3<HK6-D(QLV2GmKUdWUs=S0&LuL0l'D;H5cm$yăU"*4z=XOjE8U+cUR*IpG)ii9Qi.FdTXGO%j*HGL.R2&<3dM0L:dVmBs-RZ5GZs0Q[ăU"t>p9u2+j2)ZBtb%u_Z']IFK=:qLAZ6CUMSFqL&H+)p6,*/RfVWs'Z.R%c-wwI7BăU"Y1M&leql5S1?kY^(+b0tgQ,;lV(o)7aMH,HIso+jykdhsAl)^c=Je+*$a[QIr<;ăU"'e2+0</YC7hV*%:OrX<qjQr$Hm<*mofWOb^^G^ro;6^,fe=RHMW=0lQ(Dp%a9D\ăU"rhR6cfqSKG[P)P=:<(8Jb3+iQ+:'I&Z%_D\9E&/Xr9EDeM29[EE^T%C+Cuk:MIkăU"i6D5FG9EEK%VA&U(NW3W[2oi'BAOXV)DhHtYKh#pRLa.s;I?Z^/Z7RUf&I7w[4]ăU"-/:sUsHfPI:9W])\R&8C+v>)WV_?\77%$ww.7l4%$<\3M?f^f6%_(u.:=7LlsqJăU";R#9q?RBAny?nN^[b.tEwjrQ5)>Ex=j'^G>*,^ymj'VonC/&U,KXn1_N1l<NRLIăU"n;Lv2+kzRF+qZ>+l#I;Z:Nom9E\meww$_bcK0kV>c6RKyPHm6[nrie4C^2w,QhKăU"9s#V%^&YFT2'r5aEHNROtRy*By3Fm6rDV/jZ6.U0G2y(*a^k[I/YB41XH&h:vJQăU"+'7+sQGByOP/-&?+]e\&']R(+]m-mPevlGTOlYhx8^EoIPcax87o6mERInw+6f2ăU"z;iELA5U>$>YlOT_Ik8_r8j3n&XA2RL*rI8-Lq'aQ/hpVDI.h<Iyd,byQ?))]Q=ăU"*f1m\NLf(Hlf'oYCh;&-lS3+N#X_kA\n.g7G6K5EW,hG]X\jvTWg&FZI/b;6.,năU"kC;#L)ISKCqjvt5b*5ueICxpt<mOhIwY$JM-)\U6cP&5RaK_WG0kk2=LSz>Pb&VăU"lA2sk>)&\eYc1:2.Jve[)^=BPFIndhwo,I_3hO':ER(.P=cr/:U'&5=<&MVw$)UăU"(fPI=kCutUim%Z.L0EEu>T^oz'J)A4qvdPo8v+c7I=8CQVC<sGuKHb[p\/].e3iăU"JCG80&HR7cU%N(4%T7\Auo0mgiv_54an8rQ=S%k$)g,)?#\WCJUEqPuM]b1pG;qăU"/YUcngkn7>]e3O+%g<rr3WK*GDcK9+p:Fa8p(,vWW'Vn+2Ci*oev/17(6*\Ko\&ăU"khu$/dG1=\]H'?.iLJ.>,^F&6o=b6J\qHm^n4vD$bSxB\(YJW()2](B>e5R$/D,ăU"E#h3DH*9=bWLk4iEJTo)hib$oX^dtD5*nO7+2uuIveU5OUd30q\H+VztG^UjaLtăU"JdqyRZv3Z#WUR'hc%G]gGDvX]0blMA2f0w0\\pAA?xC[eW66bDhC5>#9NE7UHT)ăU"8q=f#R9u\>J&mRtdg1iJLaXRQVw'Ac9.(p\]O+w5poEI68E8lgRN7RDJ$[&BoqfăU"x$qI$6J;3,6lNSV$'_KNSp'-O;BNeAG8x$L95HV0pQ>DcCT_8WZZt[UcPvbP=neăU"TZL9(ISj9fL&40=RO5dgS;WJ0xqke&iCg0?7,2L:IM'd4I8qBXI<\.b-r%&[,O1ăU"7/FPSkq6+>,*d8hBocsRroi.=HN]rV_fHf3TFGR7aE7buI+xT8j6]i*-G:8maVOăU"g4iJ.K[d3p;p-m<eZWa&kr,L5sj.8P3P6-\G_m6cS?7I1/_$EGf+pf?<EP[Fn1FăU"d::bjp=j/6+Br9SG/e;_sPidDhW2R^2mS]4]Z8*x=%\TzQEt2r]b_BzT_O)mlZgăU"<FSpFM-l+>*HLL%P/HRc]RPc+\0y,nuKGhT4jfS(4nzhR#,JKpJx#/f3e]s[OT0ăU"iFEBr1mAw4N+$XsTNYK>gZ,Ju]R7kdH,traon<6'FE?<l9rO7Q.+LR]wljH=p#săU".=xdiRook]'PKThF)#FIqT*\.zqQ*LzeF/ph&SHIbYXZ$B][AQMC<lRr7Q>)TajăU"u9d-q-So'HUw5:D?#?=$p+#)w/8[HmBc$+D3S3HmN[.hA^n5NEs1aO>7,PYptzoăU"N=-P/d(/7Bu2A$Al*G8<5p-bm]3Ur^J:MIXFE46Y)oG25v8:O=oph44'>d^gX94ăU"=JmKO\JBU_Cy#6I:62f31*'im\n''A?U\ZB5p-9E0\5i+x656A$Az;#<bd,[81GăU"i)l?50IriR3E:75,-7rpi_S3fZ)yg5.E6(yWg5CGd/_XzG7h'2CYTnT]EuxOj*-ăU"+<>Netp_:6)M#kWS#1=#n^g(LSm0/K,$BX&4)=oi6P,r?n.Zs(g)jm%#2KtzTX4ăU"8&i:Sa-C-5-BUm'<oU4NYME9RWD[U_gD'56&r2'.*7D(.&Efz1mBw*E_sKk?<p%ăU"?,18jW<j5?IkH7j;[8:_P^mjtQMe3w-8DquWDTpZ:9o9q'n>4e2n5N=TqCt60H&ăU"06#Knkm[6r,;8i,j5]q6w-=eQ;4g9OM:;gF.:<Rj3wABmAAPIC^,rh^3KVa0YTfăU"s>>('gKq/do+)XqwQqLsT-dK_oV>%2_'JO\j4)8+Wl.%00n2gqFAoid,XwnUP^jăU"0wi#jw/S95=;_Sez,80jDNZW(b&iRBB\1mC;;tGV_*%F453uSH'Va]-LlvGQ(wHăU"c?,M51oTzMK3OLNoxJ()IVq=v*oe:*/2S>bYxB^y>_/4m4zgADKLV,dEUEB=5>LăU"aT?(AMXJDFmx9?84;e;.\'l(F4&aRe4;tMVw9W85j2W,TOB8EBu0,h7n9+>727găU"Am5,WD[5G#cf=g<b=hB3li>fax_N;gbC'n$sLIXVtN1OOX<F4U<04.;.xfM07X+ăU"y\b.?7o)KmoQNMe&S?qdG+EcKnJl(7O?nk'I[3&x)PDUdg5R_d]eOoOvcF\n3ayăU"e1s4q&(:TW7'crfohM)q):sJ8BXE,$7mjGod,tg7_:iGW'P;Ogk3[]?3mkI<naNăU"QRcDw4Mpju5M7sp^ef\x4unSDbu'G&cv:hR$flo<+RW-j]tROag>>zsJ[#I'R7qăU"rhZ1I=K5G,xBT0mOjnB<M)Zc3B*YeMmJ9(BR35v[4&hHLeVUodO.Sf5Jt>rA(-FăU"A,+PSUwd=%IZC.d_sdORVl&<AJn)koo^c7j<J7YJu7%N8/e858&.d2&#qJ0p.xcăU"tqeQV/U%\VBp**VC2]#=:&Czxo^zOz.LOrUQ,4\''5w:$knX*9iQs6%6r9X]*OiăU"U<YXKDR;p:,[6]Z\9kOMj<Tu;W(#t>oEJ%7,:fWMu9D3Y8dX?&n[O_)4p3GTv<[ăU"mbQ=VV4C?+6Q]Wb,ANiWgGaZR$WQ0?Y\%^C,Q4\((a(LT)3.lP2^a8fC#>Xih4+ăU"1)%k;:XqY9YpSK8)0=6rp'D1#k+O.,PQV3BK$DN728pbs3SnD;./]?,.LTwsmA%ăU"1SZDSH6n^M73T#c*/<Q+_u<nfdD5p0Win2R/_v$8>7qJ%Q(i,V>m[msM/_E&W7oăU"imIQ>:dfdGv#t&RQ*+T[gEG>nmApsrb#'Oyop4A297B4g)dE50f9SLLGKTfn>h8ăU"n/^hM5lw%iW'P:q[[2uJLlsPnSQpspNYr&>9s&OzTA;V6ZWB7Ua%[XZvs\ZcB+\ăU"92l<<a:BwRtJiL;9>'*M8Cjol8YR?Bo_p7d)[IuH89giFJIez(0#K193b]\L\ITăU"K[>?q;/_1#I<MQZ9UD)xK)VJ3V-ixbQ[Mbknh\lIuJ.>s,oO:]tn\HzAGh0-R7păU"UHIwG35Qbj8SnwX_ScLq0E$f?#v#0S#;b*CL?zh[%R.jEibGe?go/D5:su;hS1PăU".nub?$K8q9:D2L2+8K5%+*P^O;Ec8d50pF2ksBJ6O5Mm?Y\t&TSd:#RXUnUOk_aăU"6+SM:-u&jU+5)?%>$k'A<oF+X[6ml[D;?XR,*FhJUs;lj=u]CY;]OWQSN1W+TedăU"81NX_r2H^O;/z6>Erx3hR2*Eypt4]%4##71nX?t.QWqw='b/QW'/&QHfPwv11nGăU":2,88+#_Tx?ZhhM_0Uf2<'#wl*c<E:=TBck6s'57V2+b(K]H+%GK>C<^0Y6V\]LăU"(E/8kn,mvQW#JD5s;KcF[xzbf#:KXj/C4&&Bl^l+Ovi[a>m^V]fk8r-_W+3^Lj5ăU"s)HM05_A,bdQam?R]aKea>wH7PjB64t^w_1u=dYlv5x/N+Rbdv-c&$lI.1]LyYyăU"hl0;iLLtB\^Q$uidi'0DX+BS-+o,_ILnG)#fFW?E[Zt>l,'7rb1#n,)'j>7z_\OăU"Cvmpc#H8jA'mf[E%1d;y5o;V*C^uNRknKF>QBOiX<T:&#,Y:1<iMN964t5>nS5TăU"aN$;koXELI_sGO%#C.(<gH<qx6Aew'$q8KBB=V>;^/*cBd:SU#A_T\u(>buCve%ăU"MQLpD#4R:[fT-g/q;5iLUr)gT$)l+soAiVUaDeTj)*U:Oo6$r)$E%a2D;T?p+yOăU"xnOu8o/F*6S*St5P[9xpJOf3'R+VkUkJ:UmJa=HDbsViM4=fF746F384Td,+\^TăU"ZRmI_uD4oQ8O=KG#hHuHf5$Y^/.r#gkx1XBa?F2#1)]a,KP7pD'GX\7*O[HL\*UăU")tP6Mr>c'K8Ne.zS](%mur\2rH<iL;Beuet2H.6'?K18H7f2Ro&$TJbPoNOWBmZăU"aOOHZx2dXjRP'6=5>fh*/f]$C0('xNBt0Hq&h(9?WAcJ;9^6rC?ZPGDM)Lc_Qw7ăU"HVW7$66SJ?V.8GIUWux8-VmM'Z;_HrOcN(UPzXwQ%6u4QfNd4CxxR?$8P1pZdCSăU">5-OofS()lcMUe/#/Yk<n3qq487NC%NEfov8&V2p$S+xS0&BvCZX5^JiE[]OZ<tăU"/WPLV^xFA(BNR8BgP^69I$.atMTmG\(VS)xaW8k5en$I:wvY9fot3%E<uRL>KiLăU"[DYqLO*UzuQ2$RUk83OtTNYpL'IUr<E)&rBEYO3y573O,BNY4K'IUr<li)i_Ap4ăU"?u'b'Cz9Lakff<Y,9mfZF\>usb'uOI]PDTjMw:,(Lo4b0VyDyw,(]Lsb0A^yOx^ăU",xr>u8E<VDk\+R=VjEL7rmKaa7$Fq)ug>sZ'^RFsm7CkVhg1398KB'C\ZXLO:-găU"WWi6L*s8qLq9g)25o]t6dd\)*^3iL9Rm8\joNSg5(2NS:\+a+M&C+sNyN[GA#ZqăU"QMZrtCFk]nc\M^_mP%Ax4J/h.*P52gS*_CXHAmp<1A:IrW,o,c8*kjm0p<Q;;H]ăU"plZiKM[HCe^Qqc?W.E4LnK6&Xct+dq2A>^ppG$WT;N[bD5bp'55AVXWLiixpH,IăU"2kYU/2K1OAzBPZ7Bee7aOPWRplM_p]3*IkFU:Vx_\h4#FC^0hBjS>6#6n=IC47ZăU"xOr-HViw%JLiyWmRZlO<?eOyS9ra3s2_ld6+;2p4?azDfw8?7ld]\6ihY;96x'băU"#j^YH#C*L-dh^(NaRuo%#\T4?,gq:[8Y:5IveKY1&:#)9>;M7(V;yLKgloS\uH,ăU"JMdlWaOW8%yEv&NT]0<,lYQjqkR,=9Y/*rArcP([m^+e2O^&Tq3Z2m0U9N2I^?răU"[P_cZ[_f8R,[F.>PNuplcnqp#b3g2U7ygR#4=IMqK_,drRTkux#kz^wfciyj^vtăU"'TB_zn54X&aV;pY#ZSTn,8*AD2+/hpRNJxFI*FfavGRLeU(&JR[)H=\ACem#NP8ăU"=+qw=W6go,1d)A[/%Yq).Vs'2?#TUkcL.LOhfd-_Hr9bl00C?\S89RJVTSF/m9tăU"#8<MhIUHf6K%(MtyrM0.0NWwrA<F*NVZKW#.t^qhf])LGhFBsL.6'40;<xgId:wăU"u_S9t]Hx'5Fmc2P+D0\z3\^6>J<gt&Hi[M(0XMTNs$KJX*ybS#b\k)[o6d=]?CWăU".sEK5)((#c2wOqZFDtfj&#aBTYv-NOtd2QVqXU43+fOiEM%cOQj>fiTC=G[(s09ăU"MWjuYqgUXMY1di0%kh5?n5N=&cT.Qv][n#d+J+Egj[pG#n;&rI6-2?[9dDiSBlKăU"$V:]JXc,=&wWtXMLl/$2cypY-JJ+itV4%1PMtwU3jgEn+?o0n'?0=3S\;awoGKUăU"Nkgj1'n+uXl)&p8'kcrb0\%>B;X0)Mi97PUigKNP$MiQ#jEq(DcbxA?WdVlhFnFăU"bjLLQIbXeUZ'FNxDZ_%Cj2dof;GHQLrDZ3cuiHI9By<_Z,nT,q)y<V#9U;-B+zrăU"YZk^11g0szu>Qh)6086osoOcsjq:_F^tt.%h806WY(RY+DnOW(+14/z3DIo]*,2ăU"zMGhKUmhT+6pWJWIvN&uRwkB%SDbTUo;Xc&t#2bzQtYdfv_GpWo+V[)8>t5<t5&ăU"/P*Tg*EGRr9v6Bjr9'C^p<acabS[5KYJ?<.SZuaH-kE&$wa-h'$E\urd:ur,EXOăU"2A&OxrLbq]]%DD&[kE]:Fc(k_UrLdh1tZ27m]GF+qDWlK#7l<nfAEc,Wo6[hx?IăU"d/,-lClD$$t)A<l:dG(8LJ/2<doWkkMSr:++OelZ:ka=;&t$]oRWp5D>*i6g^X,ăU"O/aX'mr\k<)r)'oJd<-6P<eS&?nRI*H(i[A'9XDFcp4qV?UtGYOh7FhuSAnwTZBăU"dzmN_qkXO$s9t9R#N?-G.soP<&pf%8'l^%>v<PYq=c?-hq-C_Z(Sjm((fER.Q/:ăU"1n*mj.q\&jA#F5ei++#Vz89B7QE0rdU^%o.D#7K\OAIpSK%MM$H0QLZcu>]L6_1ăU"x#%bZJ-7$O;FqN;r?u=/A;:#Qxl%1$FJ<$Yle-PPeb$8o*E4m/lDIUqQdY8YW&dăU"6wV1[4M<\\U^R1Qe-[]F?D3/r^eH_*7v6o?*V$</)M89iBaosl-xU?dBC\e=<tuăU"'aktWdeh-mf9i.t(srpc\1b;p.t-kw]3hjbVk+\*Z0d(LBbkZDiKJHPt4,80_V,ăU"7s5.[44n]ZfXrl?6eZR.G#tzp\$pb^OT8i<ow_.S'r,n7cdbNvhM)QD)sdVEdQ+ăU"xgdpZl<^Z3^n3#1<UP_h%cNwTsr)?P,),Ci9N=,OCmp^ki*-F$jw&#G=NOYnD]oăU"DGCgN'Jz_'3/7tob6%ZiOZI)2Vq:gP_CR+IAEUsajY#b%FMkjK,C9_5]l:97S_eăU"fKAt-c4e<^w7#)<EN'l<..e2ATER;=+JwF:]A.>fKMFWXeWkh8+c[U7WTjMCKr;ăU"'Q)bO4j+WVn'uX,C95JoW-d&)W#tNiM\(+*kIHx:Xb1#a-PXdvIv,ZJcSJ0r0vzăU"4i'IV<8PC,VZ]*[=SZ'?QL)qQ,>BF8S/QDDM>G=c0Cm#3r+PC=3y>I(=XS:CX*lăU"OEI4*3J?'8E]PCIww+iO/O7<eb7,FrBfq_LpHjWF2sW*muT3EfCWj*gyY_'s[SMăU")a2_,TNQ?)k?*dp[.a9nPL9:?JaH9:;)MWR3'*1X^2qSYB[3*S1^.<<AX>m<=hAăU"':t,\o]9H_s_NlW_wJDFt^ea7fza?24RF<.1\28^?0,mK\Sgn/upej'+?[R];ebăU"s0o>Zj7_NH]r'G\uV'5C,zgvLH*2\x?(T>eTq,2Pf?KCh.R1jqJr07iX53x\4]păU"w5)bA[8e_3-h?1Cd[.jO$?/.1rvC?.1rCvySUmFzmma5wD3NN(u=H5DF7PU'De2ăU"x:F^=Q4l&ih1-^0jQlyuV>5C+r,-db:/^1=P(8sYh9Ez&cB^P2j#l:0:p<iDlzSăU"%4+Z&BIJ-,<^8sk.e52fPcT9t\^7.u]UmKmdgZwz:?Min[e_FV3%HXv3Pdk=3glăU"I%h;bd%*o6E1I0f[%LN<N:0\m8qYeE#a%$T]7E?7a&o>r5v*>u1ZBQ0Ue:6g1DiăU")7,sPi=(p1V)mi#li;&VS''o$Z;0V'O7p$[U0>W_(C9\aoNhsbEX__)\hHXli2băU"8VG1lcmGJJ1kY)f1v9CPXauNOun?Usnc2MJx;Zhd/ftCgh.nnKldok+XUGmYDkJăU"m_mJj&5eSLh+:2Ic2F^D*;Q#h;EbFH9M8-YSMX5YR3k-Q0RoIXZ5Fuc7%+0HR%PăU":3(8(rP>,(&*YM(>X[6F5D,((Vh]N\F##?hQK^m3pFln<lCA(o3JG=i-YDKuuDbăU"u<lXY8$s]bZLFJ>^8I9Bnl$OsO-#mwJ#9%zM:9EVJpy?]a;z1xC>R2xar0n&rJ6ăU"E,so]2dFjYJAW)R9_,lVeY^46J&V'#9]WalfmP-Z(<KT\)qDj7[J+O''hb.qM.săU"pG:u^Z#Y:w6Xf#u2'Q&k6V;pt5o(P+*6N.#kQc+V\7Pb35xtQBp7lF]\$3dB>WDăU"0nEA*/$xuSIHw:qlQ=j3dy&6:nG((mtH'ld27Q\4AehS<:M&,]Gf44a)jB&/I,kăU"hI+bHztmb8Tnw;]9lt&63of[<h8r9sR9LB0>7&9\o48Qk(O9]>iGOB'bP?UJSj4ăU"d1ugPK^aoC21q%O5Te,5tMRbA.zt76JuuH;h\RmDnq<G5i<'Ql:/RI/NSu#Zw-5ăU"ndihl94Cw8WiSc3bzTB(EpSOy1&.wso/$lYL4BU1A\Oap2g4]+?q4?<RO1Q)26wăU"OXi5pm%mz%1d%1ZIAEoSw%nD11fO1&qUX=+<$a.#DSg6IFP*fp1iqv.&%Yn8v59ăU"v)YcouaO9*qBt(c\H(N]vbnRVl.Ny7;Cta368\Z-V'&ARoe]p(3?I&,$4_eueW+ăU"aVM<JL_,CRYkw(ZO2r#=k;HJsH>p%2r/\_FbFRj_yUI(bVLj[7Qncxk0lNs2vSeăU"Zvlhydz32^;38=.T3;G0aE/GjPG[dA);tosOn6XOndz6MpyyS^UcJszcXpUOCJ\ăU"pFXsB2r<z$A2Wn7ZTcOgpqAQ/c30EK:\WmZG$7fsW(Xm\>fW7r#juXJ(ptwrkdGăU"Q&mkF5]le(r[+dr;:+>f7L?Tx04%0'O2CwwdB:/d2pNnVc<eZ?,qe1^wVt13TeHăU"t-6c]2g9DXw/QH*fOX6Ukp[Tbbs^%DmunCkIk[4THXVL$A,r9$1?A(fpWvkZm(băU"x#k>owN.3[6]g_v==t[RrNKW[;[\TUV)C*0Jo#LrK_zJnlSLbR;E(keDIf2L_fmăU"myn9OE3E/>XAeuKc-ODJ\_x<lLHZq9wGpklPw(AI*=AV+rk&,cI<J]mPoa8Z7mrăU"VoCXPV?VIj/VMON[\IYPGFb$I&:X;vB;'0f6N*[;qu&LCqd_C<Et2#HcMmEp9ZgăU"o=67Wl;K%Zx+rAl_M^?Nc-jT&6O/i7:Bmk&#M1p40CiC$us93JJk\mY(.l7?nvqăU"7eO7=/sJYDR]D\*SKxLYiO_yPX_JSZOR7o^miSqODE?aob/eJJ1?^b)j;_n0kBKăU"JL>;&]TZsqrN1Xhf-asKP]Cu^eVWRSCQGlG-0Y:(r7T#aB5S6#(obEra%S#Ubg[ăU"Y,:Z7Z/X>0SrQP*;342F[Q<'SSbvZqx6rK)DwU'cJu*ChQksHLb-1SJS*f/_r=3ăU"Vfa-4OjRT8N*89E;qnFqtL_7DpCUWWe/ln1M>%*CeLbHk4I3WI71sLERj/ZO]uSăU":g<993(1fF'f90d1DBVHfFdyfFh6YIpP'V]Sr]s28m--1nK.ezMjMV]d6$rCU7DăU"<N%4#A?SzMUYPMTKD[:&g/TLrBfCXO.=][TsOxfjpbq=#)EEQ49J*mUCuF9/P7KăU"+<OfGRrD)mJ;XIQen9<$,ACs,H&Fvu<9$dYt$ThKb<n\CzEL*qX]U8Kpb5cud9năU"h]?-kS4n<5Namo5F*6Y_YoI>V/YOMj>G=pZ.xI,87O.[2R.jUT6H/POotp39VE(ăU"[3(2A=)pgLlk<_AopUE1M$a^;jNf0hJ7Gt$rFeqbcb^cO3(Xgk,eMl&bxph]ei.ăU"xXp0xK7AzozDYJ75Hhjd3rVE?.L9l4%HBuZqq*0zikq:.10GhwDD?d0[lM[=mrNăU"S0'wD[l=C\($Un_M:D1uMGdIX-I+Sh1GkFd6jYXWj24<uQ]:CDD3rxae_0tm_7?ăU"g%dzJtaEH*((8WX8)#>%.kb3_vs\KGk/0E<9LmzwUOVglp$#':*h,Z5Q&*g#[#hăU"#^7.H(\62l/0xjoCz59*yN:jG''&ttUSOk3YnXH]B$'_2DsC^WhRCUshb(>N$]SăEND SUBăSUB V7ăU"S$<\o\:Om20$kuoBXCGZKC%R(g.N0Cj9&ZjLY+Qb%Q6tipsvR&6B<IWe/Ks^>b7ăU"M=FOM&0mt85iV$oOa;0hLGcccO:trw;s\DqM?B,Hu\;D*AgRmU*?qCi7G)]D(JEăU"QbP4c.XKj4I1&veYfdEG>LS4csVzHkaWI,g\27.a+Icg_b:Uhs$Of[KUOCp#][YăU"ZP*WTvQTtNf(3%kQ]PV<N[31w;5BbXgH$hJmC1eG40pj;o^:)gEK75+_REIo4h-ăU"to'qKOS4B;$SYq;k??I0hxsD_XfA2a/wa7$wKac3T:0W#.'Wb]ijFc.cU7sa(&văU"kf7'/3JHtA2ePKxj:IFEqvx^Pb,0q$5K-IeXq)%yM=XONd-9t2Ogwty<D]m>76făU"C:,a3tUtd.grHUJdFNm^orkvl^.nrdrhufaOk]vF$3+VTZ$03oeBNVkZ2FlP%nXăU"$s$]J]BL'QNJdy5K)]cfMBLAFBVNB[rlDw\PBbIoNdMeivB.xHUPD5cow6nZnVxăU"q37]Okjt0lF=4RL2q6cRLsz+ebAu\2Jo3+qUTLdpCQebrybm'y^YRnm$cgbHgKbăU"sh:YIsa2HcbD7Zsw2r>Nga4UXLxWj_sbx$K]CW(oduwrbT7(XzNOH+;.zb0T=;OăU":OnKJZ-,e,4w*6f+f#'=Jjd*e.vsycr8]K+X8.UyjxnT[Cwvm[>Ix(2*j1s*'TkăU"QgV<GP01rC&:]:]9S'N\NVRR:U4F6[dg6po<rt3PT0.#iEzKMyVDsNLa?JCzl?3ăU"%ow('3'9^;iz0>7jBC:PoA#+2JP7-SZ?uwF-ZWAR[0YyG9t2r'0QW<NI:N7+91zăU"zEs5v*kEZ>f>_&0#_U;^=r%G&0WpWPyV1#l/'&Oo#Lk9(3)U5xz:+8RMneqqP.+ăU"6)3%R$aPrI'd<r,y]+20;ejV53Ct7WQDk**H6d5j#3^l=%O%;O_P+J3zW4E<7QZăU"Co4Mesqv\\o)O<)2g$y=^Qbr?%7p<XnrG9CR).?8%^YoBPF^j<=fL8gUvZQX6.+ăU")matXvKB0UtYHiJ3)-siNM:/dZgdgv'Z815s'<+m:YRJnq<sM>x)^O29CuI=W?7ăU"8a;EaEGXu<6T#/rFa].GF<_S/0%0y/VUA5:=4Z\nfCDE.ozRP/J_;)u'EEAC'>uăU"lNO.Ysu5C?DagByap1m;e&kgHL8HL4We&%U$jc(Yc+wLV.O>I06G9$*D%nB/jACăU"VB+_Q)u+dYTed[a8Xt&yeSrHi8SY$d[(,C-9Rh-3YR23>GdvY+76$deGUDb;_odăU"U;[WIX#SxxD<w+\oFyg\;AycZdkyWJ3^3+mklF?&>a_Ieg0l:6,ymb-)$SB4dWxăU"z;;?kF;fRAD90Wo/9cglZq.H<._mM#[xO)b(=>lWOz;qRSHE\v7$19bTCuvfhwqăU"$9u502n.t[vpsGpt-n0FY>BR*x<4,T(&r)OGhyec-Z10mrbH9nYzT#;oH>;s<,făU"La94$n?fYLQcK2tL[crb0nKm;;J>;;4^S)cpuDHvk44eftjc^Mbfnq:b<u$nq:ZăU"^.gjSum2QJ-+Bh7oLIqmHZo[Q>_tZ#nEZ+4VXTD[m^9KWX4b-q6m)XIOD;i<mHHăU"uWw4n3E^GWlt2:KW$bbiW4n4ug>b/2mzd+'GxU^%:yRXZ6hZjgR32-^r3:7hhKGăU"LPpAMI'Q2:K%s[BhLRZd_DH_aHmWFMgflmr3sZ^g$Mkxst8I$LPk'IC.z(6kHoqăU"Y=LbPc<Aa=M7==_laG*c+T^:kT*T#j#3L-hkvCVn'SC<$9o.p)zwHbuQo>caO?LăU":?DBWTW?6hrY\jZ\WJvBD=_(U?0.[Gn#?gY%7Aufb=tv3mJo/afN1<hXf)d[>>aăU"4bS#VB/3Fw[dg6pe4rXMI,f8%MIf\LMu12yJG^9r\Q&Eb]lS+vJP9k3,>gNvNB#ăU"ZwmnT=h%5PSppCZ9CjM0Xz=8R9Tg]DD6A\;1l-ir/FyZPN$NEOT5BlMN8>c%)&%ăU"zM>_Gjg5Ps5M45xvZZhpXa^LUO00]2E>BDq.>'-#%:5jn0m8BpW8&.p=F=pwNTUăU":)Tx1ottEa(^$V-<XsJ6QY5OQ^I5yDU$JTl'>/)-C&yj?gpTo:R4-[?:&Xq<^q:ăU";\,KvGZnNp0C9AhDpbpsT#UYA2A%lzJOW,uMJZe:jH_>YT[3jZ3_'i:/CCyDN$DăU"&6F*u:Yn0?gIN(ZOeN>DI&:mMt;>h*Sji<5-Pi_8CZ^Q.1L+=?aaO3H59c5^p\\ăU"Dbm^ju$e0c$C#vW7NM?AnuA0j[A>#X*=H1Q*_TS8AX#<M9Gj*Ujn2SJP(7(%n/băU"fc/(jQUPw%3A^kfTD9o9RuWRw.\#P>/O%S;UVp5D)YTgj22:uUrpAirC[*m]f?tăU"5X,qK:MN4JYHht_2g:FUD[sfG%6Dafk<56/vV[8m4ksxdZmrgrN$X=]7]mf(<&$ăU"vDKTxs^V%-cW+rsr7U*MRoRsUaAFgTH0/D0<h.X*?W><UZgaJV0rl1o+a%KV[*;ăU"gFvK,$#8.SE6^>[CLz>Sp4k'D*q5kajaehh:;-ceiCj%W]KV\s='j3%OMJlmfr)ăU"Zn0#ZQQ^kVp'0tvQdFzyQ_V5=*W1Ct?WZd3[8[Mo>,_7Ntek8GmWAXGT+B-,*l:ăU";U%(.Q'gjZ\)WkQX8#KaK1+gWV:Yacf\+\9me\Th??PNMKTCp:ZUMF=%BWcp]VmăU"36BnW=/4,s-bIfKN''.R4r0(c#LGl)'e<w7,=#J5nEw(3VX7cO6e%5Dgd\V\ceWăU"E>yBU[L55tfl;AzZ4F(./UDEF3]69cw_>,/0CHJVWQKq#M=(x30/062L03:(wa_ăU"HGPkSViNii)y?9ZK7oNVs)D3T>gOH')nD(T&UjNOZFktPB>o9_y#$Hm))iE$sMwăU">Y$RZ]7.5BB33[vAYPs=.yY5*fm9KZ^&p9Nl<FxKJJoyf6T,#flnQsS,_gCCb^QăU"_TJUKis9\=XWT??H4sxfZ[-7cQt\gGCV3QI=wC)Wnqdm3c8B9dG4juM5jQrllO5ăU"l+KHiHn*7#6_zrelHql..lPv++0[KeoK?LgP*XWI'2/JsG)o#Czm-rj%u)Z8WU,ăU"Q9[l]^&Aa6mWx^3q(z^CQG?H<p^>5Y*>YPB:BW+2/otP]16;Kni9cwv5,0<^6:5ăU"xms^=<w$8jU?5Op&sOB6/]9*cHLu\E-B5T7x*6[f*kEU%2G_0b[PL]Suy+,vV7KăU"[Z4kdLkwi1K3/qvtgnHaH5CO^IslzstchHPd86bNYX^Kl(#Rt8UGup%XrR^g:E/ăU"O7I6+S<5NI.78mYPoETjZVTW%3QpSlEPiEl8VYPI>As1Dd[/9^Tj8U71;ngatXcăU"76nje8FoCtkZAiU*86.hDM'=M02jlsE/O%YPh3_/p>v&)^2rpoF_fB'4)8w\n;năU"\b9m['W?(L9V'\8'\6vgdtV.o#/,bW?LU$J+hEp6OX]wDrdW1D(E#Jhbq:>db&^ăU"coS#y)^-_NaakrGQLjc<'VDFxLAbW)=9=Q(gX^nmZ<Rd4q?OA&BLJc(+3gjTG0SăU"Xua6ntMn:S(Ux&rM6AIVc&_-mJIgGg7><,;%B_XQfbUtl-]G<C;IB=(%eI/^r6căU"h_KOFyOg(X8631*VNAR6IG9PQ+N<XV3R]abI>rs/\/toLKUd=myJ,#b/o,J+ZqgăU"gC)2V#:IZ[pwEtF#.+q=oq<r,)<ia$o*hG6E&Ml;N-x8:=Mvt;k_D))6ud5l,jLăU".i<8(JL,m:Bj22tad*Z>+,<iE5eDg?TZHA(gAV,&\,H.H>bP^D;^ZV-haE'Nt%2ăU"Ca-#5h1L<hMAk.oMnVl#UIlnD2C[>floo)Ie*7KO#N;d*N<PBJV1a7#1..L><lkăU"DoxrW*aMQ*+[8dtoU$NP>Jk=y3M:Oz1i;\gZv).&1gWTxbRg9o4YwcKE0lve9F?ăU"t>G^;xpcW*mx>w(NfUs.E.FTV$DHWIWX,XL:k'8&E2.A(m&s*XXK-Mq#5T;TJZ:ăU"^,ae>8WV5amaUYk>*X:\.n27goAgd$?a56u6.mkfm_l#rqCuT%)DzI6K97KCW36ăU"c0d:AY15RWd=?R^y<1XEQ#tGbCf/B)==dE)IF?$0c&w$EN[[=fv%13kO*0MMWi:ăU"[Pa=dD-y[SBR7C_^sjiYMW(jzp>,>RuO--G.9iG8x]m=KX?=DbWko5BU\ChjXe5ăU"Bd;xE;d;f3s<Odm+C'QxgTzYdNWzO_SA__Dh\AS5gw3'XQKv<Y*SLg$PXGjG<WKăU"*/JuO7p9p+'Z$w'QmNTGa5t1,Z(T9PkJ5eWdnIWT>ouhm7aIB%:6Em]NiR8X8BqăU"ecx_CYr0X#Ndrq44-#1GdmrI#Ro^Ap0p%3U'?>H_K+txNT;hZ='oV'=](')2+YiăU"J_gr>;Ed#1R[GFjXiFwe,]-+>qi\fwYn^09ue#Fymc\;WIrt3rtXaG12J[EOI\RăU"PSqUHWY&P>(P>^.zKl+;N0,+MuP-NJF>2J0Bt6lRfkua#0wIZqN\Z6O$aq'1o.,ăU"tIL)2U$uhA9HgOU$Z3dAqbEVsed094$n]jdOrU*j;IL.7d1\.>V_:]'%z$eoLlPăU"\h74X_g=Z5*;]K=)74)#&m0(D(>B9=xLD=*;&$?a1>Y5&=k5M$[3MDgE\,+,*(qăU"ew=>#GkKt9*BSdYlPPK;%kJM.Ec>)Kkr3bqigQS3o(g,+[_f%0LU9;k9(>\byXKăU"+\0^Ik7Y8#Rs%#uneS-*FWUGENM2jeDXjf7.4vCuoQwFAUm;p<t,e<J>ME=,(-4ăU"pTP,/pg70eDEhYdaDE*XghbCHI&rn+gDT8u0PO1DM.COaqwu.j123#<ECEFIQP&ăU"ff_oq3)'.:B%+5FQr3U9_dJB#6U\Y=/Y%hOrH?(0.>BA0R0g(<'G++JVut5zJYuăU"H&3;FPMo_fNg\+,r2o]&b):NakAcL7k.g#&pBCTU<&XLRLY^()Sxh=M+ct4J,1kăU"[dK2Q++[x\yC?Qq45va&=e>hB5L8JeS<,,2BMbmGFdriS+.loQ)hFJIG5wrUDw4ăU"z5G(eXHj63+pMkm>*OP/ZAbSs(^26WZI.2hMtb]9fLQY8qrB&_X0ARN/E5ki<k\ăU"Re-l>ur/K6h:0Ic>AI6keHWS,=oIqmp;V>UfneWS4#-]h\aTtfwgDV'<,q'8cdjăU"G-FP(,F%8Weg#l]e_^4LnW\5K=:<_q;NkFS#X3N2>I\Dq+Gf52NqDme4xW6ZqAdăU"Raa4q)Xpc<,C9b?OM;hsa]h$s4K=C\Y^=_;bD+ODJ<]/'(x^Fd%OBaT*STBiD?EăU"fp(#Y>I0,&n3bae.'sw?/44#HZpY*]kG07Y*Msa*Q#ZV*5gD,(3;2EEqFISgd;JăU"cLvIN:.?Uu)Q]/MZlsVSFV7+AYdX+N0Lrw[i,o%/(Qc;g084s<yigN$qhg&>tRpăU"-P,dQ>-A3nSWd_%,yNa<o#Xm;,/7*40FSg6<'SH23q/>hLjTQ0dLj#s8J9aq:)căU"-Li#HJ/m+/eRD<2<>/Uyp0\)c?qM7[IFbi/cLoI]9f2]kpnE.n*Pm6K&S8I&HwPăU"CFM;k,oM0N3\g&M.>iX6GKCMNI9<f/WKeB:>Hhyoz,qwqSs+0h0ii6wvV>C?I7KăU")Z0q':;y#5d';z8(4IOOZE\vOjdb8j_(Z3Ge9NqKK3DRoM1d%s?HhVt-K'e<iGQăU"KPOYT81+/?<'N\'-^A]s4Avr6Q6q%^4e6o=f+J6VU)>qhtZOaI%#mf5:i4PAnUcăU":KNJjK$4-du5t17KVnbxK(GN_go[O=PbYhyRW_AsTRq[>yr7)ITPsdaBnG-(8Y5ăU"&y-j#&MO.bo:-GDdIT&)TgNK#I,dfzTaYGvrJF)51nu\.)LjL.9&Ip_*Vrbn587ăU"kJ')uOe5HC3_Xr(b1VnIOeGBac&_8#86eKOR<26GS$Wi8E)cm(Qx?.1B;$+5LLsăU":-T8k/.iF]P57cO66PE7TJw4Tb]HYNeyC:%IZh^%mn8t6ick4*(Uyq$-hWws)+>ăU"./NTAdkdQ*\2<'_S\%^R='HXaLEwLLI(:2%cpQ*t.0QvbtXJoTS]GlqIk?J;]pQăU"*_\B=^e%hTL]#X.[>1nYL2]&<iNCD<Uj2\KnL^>y**pZ][_Q;Ku'J%$N>dN&&tbăU"Vq'_G#M=yBkkE#*m1aE+I.baVmL&d)N*oG(*W3^bgJ_GdVg)e69R=3GX=L&bSbXăU"3OOq&Zghd);:i$czVijC+QV+A#zN05iI<\J#,,5+3w:-G\dVYWsvi,TCUjG#YZ+ăU"3w_RM#V'KWd+G7UT,wC_Fl4p%#uiTUuZ8glmYf^Z8Qhp5Jro.$:mIQ9,-o'O)p]ăU"iF5epQ2LZ/d7eug(TN8UbF)pQQtJGGsh#2Qt>aY7j,?XGmkMv5mp+aW98q\i(:KăU"iJ$,_m3Q\I,[<;J\bB1oIV;K6hn-B,;caEm]QIRlc65^OGQbUB*m]gbI\3ImtE$ăU"GmNjIV,^UM]8.^R1fI%,ubn5OA<ksE;^mNb_ILtrMi$blMr6D]2-oBY8rLtk-HcăU"#b$4>uh\<kto;\mN\JI(nmb9UU*D6mp(jIrmTXcWlUhjHpYpMj%*/nm$[j9hZpcăU"aE7U,c_&f?3Z>kh*7R+eYOUr?irDWAI,UG^jX/^ob-;vr_cN0:<Kwa9<&_y7]X*ăU"%1Ap_5Fwf?3GhiDDcAsL:r3y70q(7*Bhw%am8HlfXq#RMNsY7?2[pOs[Xl[7zo-ăU"5.[L$;=x&qqvQ7qR;$3.*]SbwZ]0cN(+&V(rZC_Zb5re$VZKJSOR$ue3A/49tA2ăU"sjT>tDVYrTjp;gQoN6nO8bAMaVi;\KC$iQ6W,dUf?B_L:UQq5T[77u,4?:];G^oăU"kgpWRM,UWN-4Ds<dGT,E2Z)3deK'w.9[-[Uv]>FliB77j(k+96tp+9v?v'mdRvQăU"eNW1chL7>_M\Mo%dRv1\9iVq0-i#u1HYRt.p9VZnq]u-(i#yH)YrtpF9#Zq4]wsăU"iNJzj<ooc&bk5(E3<r8F\Dd:Ky1.$kR'eMnkn;,>pG8FvJqDBMW\vZnfBNrwJbnăU"OQ.\&\pf8LGLynai$>\Kar$K-*xKp\:G%2S2oN7K<Ld-cD;1DElPf6=NyM+9m;?ăU"AOkIC)tvYq[<\x/l[rYpG6lIXl'l'3VnYfeU3TW_jUgym*tl&c)/R,t_7R,6iGjăU"$:<Fcvfhv:$b\=q+6KP,Vy([GL(sCE*Vi8UzWYsku;APlBOGQqK,lnkv62fOjLbăU"V.)jtJ8891Kd.JXnnTqrRcaw,/J:iEjzncbMti40wSTpcmYuN498iicb0nm/?E7ăU"//y&adE6w]HJzXklUMAO2e2BK9;/BT6_>ERP::>]V)y$5ar62]P5JL<eWLfgYdkăU"iwwn;//S6tf1p#6/,G:(U33Un*lrG_x?rL\=q8)Khq$57(8sBqSR&Rv>xi[96=PăU"6*S%v8SBv<?nM\-(Y]v$+RcF4d$h6Q?*:h^R-^V6qLls8gtl[WH07sJaD5su>.tăU"WD3[zq$Rpb:W<N&BR9MhoYBpZCpKL1sbdRIpF-k^?n$QiE&qp>:cKU5XYEKmJ&KăU"baHbUr&P:Op,/DD=Wi<;8vRa&8y9'c3^=A7sF3=8%5dE&2j^+tsGlJ6dR(rVj#,ăU"ibIEMM^o-=iV8EPwq[vkb1#,UkS,x?j+zWq&t%2Pq4/.%wR=hUwd-)CD(U_P/I^ăU",2.OqNrqJ:oAo2DMgqYtiEFFqP98>QcE%tPC;uHdCPYnAT\?atagg^/m'ho1zj]ăU"(bcfa7*DD-s<_VOIzvaB/^8M'eF^TDY?G2%1:#1BY]>HXAFe[+)O#>og*<Djp,MăU"%D+d;9(cl2/C6WEXmjyFmuAa]9hI,^,cPL?1;BSpa_6iCG$%-d&GpkPol=aO:IfăU"(Mx:]?nKuN1vh;WKa5D6Ef<W;]v\3dbO*I9Fr6sganCsS9Ix%u5uT<mU/tYJEI-ăU"rU:WuOi%Knoij8%I^mL6HW(v/^7&Dej*1$.\j/9(^j1&A/VEJT^gz06b05v07dSăU"y'mdibSDu^KZS*-hEqXnm2U?v<'E88mAka=S-vr'wdIOj)z1NUzyuqK7u6h*J?RăU"cMr3?7\1w$;LHo:LQz/pMDJbeYUH<1YZaa)QWn3jrCy79J*Xo1%+PP.aY%&3ld4ăU"c7m4uc4&c'eFN_uGibvn:MNpzwTq.%kDh,.umrd4RwOsW.&'VLIqFeeAbcOYhViăU"'Iy7R&B_o0vrPvWwG1S8])D,&uzMdTXq,*t54X9DqQD?P5MZ#b.3-jC3oVvd3^DăU"A/xh$_H[M6v&]iOu=atHW-GbZ)mILWI^;.kmFjN9dgRX02/XTKJ3haKj>F)eu_tăU"fJ8F1OO*lJ4G3'=,1-cdUq=-.d]tr:c;;Mk]g2,S\qS\oWVT,p#9;,Ho0t$jtM)ăU"]--;o0uE1o<pN9'SFSD)-LBT;9vVSCD8Fm7DU53\bKrU2\hdWk(lkdWflp0TQA1ăU"<pI]D2$4-0TWeLac8Ou)^$=AQ&TD[%-xPGt.CLI::*TBo5^C>9/P2Q,/^e\jbIJăU"*:GF7cbs-0o(>94FeHK0$t<F]fGMXgMm5lKdMu2\F7FGH\bYh-CpNheIODY9#gMăU")D?5nh,v\M&5]*<0$FZfudWN>jo&7Ncrm?X6d?b,Q7h#aZdZr8R*lp.[53)p47[ăU"W:km1[+:5kOJb>Fd681J%fthFq.qQN5.4$lHkY2,ifp]aW<4$j,O1<tXLSswJ(făU"<M.mQ7gKvO+,W0*9FT:p(%s2Ut6xB0(9#W)qYwnd6Pxzbrm<7KCGJu=nVc0<rM3ăU"[jlI^JqPZ)W;69aZ2hosO1/^l0v(1Lv1%Rv1R%v1RvHYa%L0^BD&-vEP0:j+L-?ăU"3coe^13:6g5IGIWEP/vTU6e-Mz;3+$C1:79&_SO:(NCIsHUV'n9-DWf[Sd-Fqf9ăU"^Vv4UT4$1IMK+BgdYWGb();PjtWP%NZd#>WbsOB;1V1zSY1j%d?/h)6wYVs9%?[ăU"*gw(tSju4n8o_TRn8qQjoJ_t,I)'hop.IfIT7a7<YM*F^o+f5[a*l+Lj=*.\JnYăU">m^<hhUzce2GPf81l&K$D#h.+a9f)hZL[0(J,^0vd2sWT%\Vc=JZ+*^4vMq.:B4ăU"=8&UuB=MDw+;H,T]f^_To*.QVPtaD$n*OmqX<E%_]%^R)Cr_erA8\liFYAo3bv-ăU"jtr#TXobpRj\'=>M5^Gce3-ZCzPfKe'tKad6DI=Jlke%%en\W=,Edah-O7i5laEăU"F]]L5^pUiJ54z^1Lc3Eeo=\it\<aqIT%69K;.azjmh>z_]Lj#b-WZ5(L(4tH>\UăU"BoQ&p,$Y&0j:t?&2D:,-xCFCGj+LA$E[I(&9R^\jqmfZ$\baB7F[f$EWaan+rL>ăU"(g30qr>jM*KZS2;89qs&>L[r+0NHwKR'lAwuJs*BfcU)xKZF/$9^KdI9aA3HOSAăU"=$XCh]xb=Fz1DA3GeOfdYC4dfcplNHuBYfK-]e1.fuLSiKkd>dx52>$.<7HFo5MăU"<-&oln:fW,?qGIXQI[jRIfti'?mKd'AdsY*mJ#N2l/%TY69Hidt#63ST?*h(vkaăU"J)7uXZ'.Zdzjpr./;:Z;tiTv%.$_>gfkTL7kkCGS2<J^U:a\UtD[%\:g8SK^ph<ăU"w92Q[PC0R/[9L2TnqnQbuQGK:,cG<ZT6X>rRR^.DrQoe+KM*6poKi;G6QG[F>plăU"Sf.HRn,1N^(<lKT/WvH&WHXw^mrg*5Yck=hmBt;]6f[&Y\<*uJu?Qqh'K.qnQwuăU"vnq#'c)PPh3&_uRi2B/OQVZ'j>FI^W)c59BuD?c*um[<T8a5<q<26YIp]0%)CM/ăU"%']A)YroeDVq,w^ftn*^EqL]=cGmX4h_19Ud:oIIruEThroMR>]w'*lfsv^N#>XăU".bk;rfJaDzcN8X%ypQQ^,O.v)U%P]CW6#<DA<ti+.T#h_Gt'DjIc]1>vEt?a18]ăU"ld]0oZH8n]lEjVwe\$$B#Xsdr^eOBGU/;atQ+j<%oT>gi^0Z/t]LGtdKar)d7h(ăU"P<aq\+OJk+fSmqB5YSU]oPSep]v56W^rUZWrNA'\Z<#RkjKlGk4$2Ufe^CaC]\năU"?\5kw*.$t[XHZ,0js3QQ.L61NqQ_dd2emo%Y2?Tbo30p,J-PYt%a6]<#k;rb[OQăU"?txG5?K&WWJBi4f/%7rMW>Af,[rGAqik%-F$-q6F.&/?L]*eG\f=2cK]:P$USU(ăU"HUo&is$K:V$M:\/8KNVsE#3R2qeTVLd^LPghbZgik]$tmmV$kHZ34$ma&HGvH<9ăU"\Y\.*(&bbPUw]#GID#-e)zG$u=jn#i92yebhSd'By=r0l;$l9j(/R4*/x+Q_^L:ăU"%arej>*a-M/0'D2]9Un?Qh5_rlBIG59E8kWse4VV.bg^''/Otz80k<8mwGI:R'zăU"LlOGr3Agk(^/V_*jL[,.NFcxrRFT9_H/sJ=*V7L]Rfe;%%lYj44>%V'^wiG&:;KăU"lWhj.J=u)FrcQl#]:mF=G3m3[P7*enzS&$t55E?[WMR.Hl)[=:jqo\eFNzx+YD;ăU"U6BDvPkg=]\LJUFq&Re]?VSKN:3[&'&S,enS#8^YspHmWwS(o)b%;B>eHrhU]N0ăU"b]#u]H\boNH[ahyCs0/4m0\]+AZ9Xd6)PoQ]bkQ]*:W-I9xmS'Iv?'CY.#JG+[wăU"IP8H1gu37t4o#o%kic16;;<>,'ckB6aKrEv6uj5D8Mog)sy(X2Lid*X4PVmiCLZăU"al6KN=%V0-:e&0-jfG&).Cn<x?1/4ZXsfGt-nu0/JY]9U&dR<m<,0*9,1;<hD66ăU"-^<;?>rnWZ:DCY(TPi3#($1jKJBHc_%OVGN+KQj\g._+2.c1u=T)$uc%;s-W1PGăU"[>M1/=JC$qAGq)nI2DT&/rKE:B9rP%BLS=pY_HAB$AbT&gXT<]+?5,;PFls&#LHăU"I$M*Jv?cE:>$Y28)nW1G]V%$CwN(ttjFsV7k_/\Fj:HE^9De?VDb)B#e7s.%<qrăU"6(AT-'igSYd#7:[M#er*:\r^I]Ax1;mV?bKPBk9#4k>yMSb>h(:/''RiAb[I1aZăU"5guD2/dYdCs'eR&ZaJ=L)XH74e2u2Pbfop+#vO(r]).wQvJSlTr#9'BWRYrD+TdăU"hV;&S/CWD1HjwER%'s.KAe5VfmXf).#37<?k0cgio/EonM*vVsMadcYQ3ptlx05ăU"m4<b5*nwG;97yomX:eb0'F0bmDlw0m'md*<;YbU(r;bA7:J.;*zofTiHAlAxKCVăU"xk&N.&CyF]pvorNEP\fvRSppI[ppY)5w2B0iVaXyDAm=3wxu%p()9%%%%-O%IL8ăU"jRvfv.:kV%4%Nt&%%2%%I%mD<21;4h#fiSCq:==6<pFU]T+UsVlYP:F)I5bCS*răU"+hd_M)/k4^k,s_$=GRnRBAki*6ougg6XX^hvr\.:e+hh)a6$$l\4D=$ep#%9/TAăU"yg&+dRi2tN8afSlprKe/6:a3fUnVots[H/cPViw6h/Sb>6;7Xh0veBtm.KFb;/?ăU"Y8+^$HbBmW:)$4A^g0H76l6jZg2sl3V2b9<LUOhXKP_:\^$LNlrM)x?Dhg:esgXăU"6)tDUfQhkZ2)6E*(nu_-)7P>q.skg^$KZU)+Hdh,O:RAa2u>IjZl8Ws+Bja*FPrăU"UE.f9uO]l6eC^fbOQ^9lV+Z03q+[C1LAd#c^tFs[)d;Nb:3x\'owDLGgA8JJjkmăU"hrhE/JTlPXKic8fo*E4fpuKcmW#csxB&ZMTHvrK\$\55SIs8:Q-_N#t]eqJXfZ6ăU"bxfx^j<CA-vdpXs.x\BeAZn'r$B#VPE2-SLOfBT8%SPcf'Du+V<mE=ZH'sN7J,băU"kpX.BG5:V#w?E^Cub_wFB<l9$[kKW<_r(y$>>M2UsFhhJaQWKy\u'/r*sbRaoM>ăU">]I36MeMpc$5Bef)]i95eW;<CQYL(avMI)-WRK^i$m5V^3p)lVSC-Wup/Hp$LW(ăU";l&SZ3fLm-f+e1R.oQoeI>DJesJ;rvCaXB54?#dwK2<'x:zAN)EZ3fs(5Q%*RJ7ăU"FcArusapnKn/i7i<_YZnY9Y,DPa(iPoH2vt+dCUrQ8&tqJk.]zcnV9rTx=AX-TZăU"c^C/)1rzT[ZXi_SKI.H3L=N][N[3dhlY$:n#O#sNZ&X.:=v.,/psm8.mYAy4PPJăU"BkD2)G29#7Y'-)&93aOw\BNT5X8bnmEM,.8+fNr'RrH$A>n0hd/ZForH[6%#NidăU"t)LI%9H]Mc1\zYEll#Hx3BLZx2X;u8gXWkLrKrQwv,T3qP9e\NJ%^\PS<4A\ql)ăU"#M<wta-Z9W'(xFU_sQth8a7=K>z]eUqf9t0b2^0;XnIX1ochf_W\ooxX:&p*e\tăU"B65jpndt,UW7dT8]$U:A*lQb.UDWqL-v/y)q(kUtD'7M6X]Zmr[3]PkDWW(_Q9%ăU"LX-QiN9PV:orIr-9)0/+BB%6m]=mNPM6MbD<-#RISNMa=_f/c#],rSo7vO:nIzJăU"?QH9YME6b'CGa\Ms+)H'-r07]=^c?a-r6CU8G<6c7NXM=NtKv7ltIhssUZrtv#/ăU"Ywdb$CU9DY.KXi.Ez-.wMc_;&p.k'.ut65(Y0aq^<\BKDa278;((x2,ep6>kG#făU")QKgl#M=A],_%Uk;Rmjc,%*g9R6IL=_ycr06^.1K##*Kbp^aXduUVm.$X68fW?;ăU"uRQoZ=E60V8YkZ92+,^NN*'*VOG:'M]:ZYofInzW*PrgD(':LObP,td16K?:l*1ăU"KV<6^IUhn#hLygCyf3u2Th]21ypPA>lx5/3ma(4Oj%(00VvP1[71*/.'iSGka=0ăU"b1+ecuH.N>+Zf0Tla9jh\s7#f?/J$HjY/4atDbn92/_:c=R/-g3-n1STV%YbA+9ăU">*yu5NAN2uu*F2RnGD%yC^dQW0\c3]rl-%eLeiYvK2G+-?n6MHU/50/Z<f-9s8%ăEND SUBăSUB V8ăU"+ws9_ctuGm%lL9E15p1O(.P7M^:0oq%f1EI&APUF>_JGP2Q^av*Z_#>[s.+=\_căU"WjYBIRrlT',EtPE]mCVj?])hnG%t]lj3NAQuAE5:JOH/bAq,y9rE/B8f$kjN%.3ăU"(dY+$bHD)j%/+?Yel-d7a[Qt&*NhPVHA7cpTt>v/G$LnqG$_iFaj&,[=('lA?78ăU"Rt92WeDDF?\CKYf]]'Cyui<cteeR91=OwaSt.5eB&euoA\f3z'4[C1_fYxBn5-&ăU"Qm82(pR,HVlf:*G#f;THY&KF.eKyay/E$Bbq=O=3:-nig+&HU_RuoNO8VD:ikaxăU"-RY,h+UqA8i%Mk(8c')+m-eSae(^N.NU<jK5ws7(='ApemP_kQU.d/k*#XH?bz$ăU"khVRDnch/S2r]agAY20D17jg=-LTC(I)psf(m&hrD*%F]O='uE[j/i-Z,2WBl>KăU";h5O;#WNXedkoKk7nJ4EF5PP5tnPvk$r4]pumqR]k:1YNsuQ3A8Y$Rsk]3x5JdIăU"UTT>UKNu?EL&LxIGm8o1Gd.Ob&fIh+K/?7#ij;RWYdg3I9sod?GT.7m]1r+S%\măU"oU>pWCWDl.s\U.zNTpdTtqtPhCAr&m\mR1Ncs/TEr8^%z1P33#ZcRIJC951Yf#UăU"1nex>uJp^pu0L&wuYgvB-NNE4KE%S1',AoP1U'cZ/O.L7NL0GkLUq*deQ>rc3kIăU"1m_1gbBPrGo%+Q(\$M&4Rn0uc,.&a(mM#o8OyM/lZ-OARTh+%EC$[N\,tEF-J&CăU"-k9Is.99O(]X3]Eds%lGs],$?A<Mpml+>gfnsrTQ1':dQBFErZUC[1O0kDLrI;7ăU"XQ(;14$E5*_(S<x%E$St1TU,Hq#g7P\c?RzgVyN-6bO<?[XLB,AqJzO'S,zDt3ZăU"+P.>T<,x[C34$(xDF-8d0C]EBv_\iHJlpP\SV])lT]j)tBovq#<]R/sfqP#Y>)UăU"$E3%'OK9=fFP>o%dcqE,Eh)vQ0k_NaWaKa7HvGD\ERW[gHV6CKqGNV8N<T^2IH?ăU"c$tbRm:#^HW(4'McJ.KG#sYPK.%u'_N\nCd8Q.vh#eWH$Db,1/LDS3XF3:TY[(căU"?qIh2uR;MeifBJ#)0oqW96^1]2bMpPV9M,T?**vD[Pz3[f5P^Qlp&.B'?\&;NDWăU"Irg=weQV6NBtGpwDkv4jH.?6DB(+G7IRN:)a+)C-MNfX%r:[7Ejq=j&UQ#?V%ZdăU"_f+*fu^\e.kpHq%LIG\0cURj+Ew9]]nu7?)&+A%/OKe;5VU2W.4ojS)ZO:c9hy,ăU"tFnwou1X8C#&fzL#*+VSfl]IbWY98n&\ieiFJFuP:)+]]XU9ST\pC.>ud*HhrxKăU"XvZqwXRT>qh=lIxB*ri6pHM>Z6.scxrn6D#>rbk3qg-:c*1[;^d-FR]]0^S%X^eăU"iYn%N/*wmf;7?/egPuuDjx[7r1Q%piIq>rHQSE/+Lm:p8P:9T-d6(&%.WkIN$7lăU"Xl4&Kl^73EiVNsJwZfp35/FJ(<JpGYNg[F#*0m#i/0chwdl=0Ynro96N^PiP2O'ăU"dDS;(mCvjLN8#Lu,1bC1\'rO7=42]QUW%tn;^,k,nwJ:rFlMLv/)PM+fX^O#PtlăU"GOD?dKoACd]*GS6dUG$<k+/dc%4:7h[T22b^)Bm4ru?v#tDdvnYNp_^Q8m)N$m]ăU"cwpZNuj0<D.c?7x6+%0?tw^qpa%O4'vu#rxoQn=L/PK/p\]XzZ\3R5)2lQWYLLVăU"5zPjZ21'.WFsS&l.:vpF*-MCEROkf/^Nd7BS_cL+z]va&w]03OcMMn]TB1_YgRkăU"#*gwZ=-M3]0.uTo?ECEZ,B2izV0BbTwLS#k:elz>(UotOd#;_P,M0zGLtX;bb/VăU"Dy,msqQm[euzJp0AQ7Ay;opBLwDZWs0k&uL8pxreNusugadPWwVH.cX^d6rDMsSăU"QwSNF<m^wDDD3hXVsaV=YJ4Wxg49dk/_sYSi5G+hOz?hoZxj37At78clE=4.SC8ăU"S8R:?N%0g/gB%zZYpt&KV-Q3O7z2ZRK,)GR6/Cmo-CucA1_tRiJv%%ao$oC.A-făU")13/kz.5(SI1x;&bB9*RKYOAK&gx0m6?EE16#eU*JS0Cb^d\aMJ:\-E4*w^rl,MăU"p;GLr1Uq*EAo3W;uuk<1]qqR4Cb,vgd3MzFX<fzd4hFvR:&D&^w:F6aW]jT\,^<ăU"/7i9E5,\[,ZoY&>6qujdb5w?ukhTp\.8u7dDOpQ08NGuxhnSpd>wuQPPjNtNrdHăU"QnQ.NQwtnN5Lv&DNf)dsOx6-6N8JIJS2zJ/=wds&T'i3X&^7f%mXR3Jhz4yrQ^>ăU"d\_KdO-[E&M8%w.e<1>_CE4,brM766N^]]b6PXNc2'lG$ZfQwIBph_;sOjTp9JSăU")<MfKOzNI?4TK_MH3+lTfvPSA4VC:].?L>,-JQ3BuH14jf7m'ApQ5h3[wqQG1c^ăU"[/e-zvsZkj_odrtgW_nvFPvvzjb^v]uqJFkb?\PXdKVFvQ<^wDSXUjuC\weylL'ăU"*^Qb7[Un+=f$d(#N=N+6Ez9\6p(FL=8(p5\94C+]JOJ85qglrvYF4+Ec='Xn&.)ăU"j<PTdo:i6Lc42ce)EJ%KCpU?5q#;AseQOrQ\/8,s1/i_S$b?grAx+e\)(hc'Ao-ăU"/CsHw^gZ(4WvZ4x2-j_xEVctd_prh>6HhFRtluX8unHfptNf/eAll%t/6Ts2pa%ăU"j2);sofOD4:Pc;jzV1=&e&#v=+:OU3d$Y=5uRY&(urJwpsK34?vi^rroB$L;jb4ăU"t>>[Ff>vn^rr%#TJT99M(.-lbh_=&f?MZs?AuVvQ&;-D8[Y.fV+NLn^F(\&DoIUăU"PwH)X+.JpQsXV-.-wIl.avT5>0l4Z0x3)hW+Lqo+u7vZMxu^YTLHnu7vjrc<P+CăU"5:3O->SREOYyii26)UA$(tfDd*DUVv5g3YK^6[ieiYsfb/D4Eq*(mI?QC1Sip5_ăU"c5#w=)%^Plg')&8[%gi$wgSzw.-;qK.dJ7>c&19,%,6u13w,iCav_g],%0?#9<qăU"yJ+G3G7.(^h%SgF+84iN0RNC$XudulWuLiuZgfJ>V4Xd>N1vw:jx<](.(kV/u'[ăU"LAVkc%[IejEI*/zXn.\xIJSg/gqg&fvu%O5M;iTOZIqtgWt7?T$pagj):1l0PedăU"k84e)Qh+=zK&A9a>h(i,v$ttEvXP5.w)_uvd(drHNu.?mPhp;t>6TDNM']n,_vPăU"+Z+N3aV^4)L2Lc?#Ws($9Gwmn$qhJ7&bT1zg<C/bs[cR#\Pr%sBmzMW)],x?TA)ăU".(kuIp++)\7b;*('[._hJeD0=Xh3S7[0eOWq'J])RwMXYo,$7>i(4p6jsub/RhLăU"r<Di)dE3::=Lbw(v87nZo)(DG*vWdJW;B]0p.C%<I#Ep/Cy/k[0uFlRKCWC(q5hăU"tXFNCQLm+_csM0NVJCSN-rge)B:GboGW'aa3KW]=e<k<,tdu>j9Fash3l<t1JDaăU"/K)thca(QT:,v?tR;yF/IO#rO8]s\ir:krRs[r'2^Z*JhRzC,TN*IKEJPH[tejkăU"-d/$m.ruVi<?SQeZYMAM,y/wO;CYCv9'8<Zn'WOqQ&7L\AffxsAk(jt2#Loh)7#ăU"U[dwuBI/,k7u$rP-2k7vyK<p))jf:ladkFFrd<OH&y97WEEMT6Zp4euUPa2fFVUăU"NYcXS.W5?4]dOXNJV/n(WaS,4;d&+]bjnP$fR;pqVyT42W%O[o#T-[VD?4$[R<tăU"tERMTX8%>\>7df6OJ(QC%<t/E\&VR+[*Nve5%L[tG[l2RN[SgZn/E3y&*3PqyReăU"1Ts?d_Zu-3c0K_y>GAgkfYqm:y=w-#o,xIj90p1qmD+CSbxO#FmCdD>^0Dc48fJăU"I:^kvl9?$D>I63v(X8FfR^'l1_k=afW?a25blqEjO*R9d?$.gk*7a+.Hh<9Bj\hăU"&[1(rYA;3znk3-?c(\hGfwaw*z(sI(O+3>Kpr7e'7E9I=)KGjvkMMt(:E/KiMnoăU"Ak+.#wOLaEHW4gd-PIPaPb::-97%BXSr/OBgb>-BQG7-C_89Z3NK]?TsTA=BwQpăU"/27-_bQs]Vvo<g&0^x:<LNRT)nt/njNE=jayD,')y<><#H8w;9n-,B.tG$n.(cGăU"^p.TUw6eKT(\m2[B'fi-h+A1;o$'pF>Sr]nmFjMFk:S;;n:w#+E$6]aD(IRXG7SăU"E8>$TDt3[lCf,C*55e.gJTEBpYH)/%Y)6.z3dIxz6RdcPMFSE5;z+aQ8f7B[S_CăU"t.Az&ai]mul/T0z%5Z0+NK*4OG>'K3YRCz*tt##Lia'Qm&&]b;F3R.F^shotzVBăU"NqFf&>6.vmk.i\j06vTLJrva(n<y(%5Uk)X&t8fu'=Db]NoOVpJ7a7UEov6hITRăU"%:+:i&TQ==VVlm(cRx_X?YcEh)rnI3K(inP=+cA;(o&yD_M)Vx;,xTk6p/XBn$MăU"KvkixlosCq%<%0Jg.S8cX8vZtD3pot#:fG6kszqs&Kr>;'rAD9QfP1?A[^-ImBLăU"Ic5Ns2-vs8WFM:aJ]Tv/JtQ5A8\1[h]h6^,JvMS;ZO,NA+bVR\?ctFaBE(AO&B#ăU"=5WJ/t2q/JSZfLot-%=pYOmZG[tEjMR%<'>=W38q_Er]3qG8^hrx'd$yp8h9OedăU"&,7,Cu:RDhId+&?)NA<E'P?C-A(?,Z>d<+r.ghh58F142GGk2ovs(75tJp<e#Y6ăU"lNnRvwRb5+'Y7OCX]wnFV0C8Y+T<9oN^+0oA$TANB;G]lF5PiLH/))5joBj_DN^ăU"R%qQNUx4aY[h?)'7\?O>&D+3ACN(hLb_vP35c-JYLj)YlI?g)KHqMchc8g.=LkmăU"rEXE5.6^+OC&7bh,)Dk.+t2'?Ld^\V-oJE0A7O9;OYag19h/RQ4f'*T_4BL.+GuăU"wc$o\#\FRwgK4W-N$#vmLjt*9;H\0wf;KkZ[<+SXcou$C6G4]')i&66YcCil_V[ăU"uJqj3r=#^5dD3#LUUoVo*V;>]Lt1BSw8VVDb4J,kyg&\<BCv^2$_IU1N'HYSe%YăU"?EI3#*7=PJS>es18X'neR=E1KS5z6zfo'6DVk%tCDol*2al$T&F*uo17*6+AA5FăU"D<WCsTrsICFCuHgJL;0qcL7\WF/mkuJH5'OMFdkOr4CTdaA:si.3)3M:4e40&9UăU"3#3/zboxCK/nn4kQ<?B9R\8O_T&s8dmDiCvDz),'^,zQWL9FIRFsjKua2'#64S%ăU"u:IMgT7Z'HU&i4x9g.Jf&_NR=&E>z^wf1Fl870UQra0)?z80UmMV71*:z>U,)2LăU"Z+P<pMjPd+Ax92M#Y?phy4w%GO/H]0VaNfKpS._iE%E*W+)R8#BedOFtmV&SXDrăU"WY\AMyl2DO',1=DN*]A<d78E=CB>j^;XRTH=Q-3\;rxqQf/8R7d^wn&YT\f&le;ăU"<:N$n9KT'#bPm%$syoa?ih2%fri5*Ge)C34N9rIe+J,>9bD2U-7+#_('T>j0=V)ăU"Z1?Z%3(-Ri;xK:l,o0c[KS]OoE$abenY%teg6h56,]A7zIg^/rFv=*yI+XC+4E?ăU"Sb0:.Z::\Yqo)BP5y)3ZF9BRUN6PA.L7gDagbkHtRTGM^S(<8LXCS+jddC?wc/UăU"2_.17.)OvMzM*=UZPpj>S/M7EAR'-no=X;0qFp#m2[39Q-$RKeN%iFP%&(-V<.VăU"e9t':.H7RQ<6>lxiF(]Ya.^x:TZpTR9=0Ax'n7*U5V)x/iO0j5K&JB=2IL/C?HRăU"IaOT.[Ti(s6U3p=2A8.uZfA]$PN&)BktZDBS7h6f:+yX?r_O$&My?P8\Cjfp*x[ăU"O(KcYL/CP/ky*%9Gc\5ZuGu-ToIK=)S)Tgr;5V%wq73c/(:evOMi/iWg4f^v-^QăU"jj^HQDj;<uSeU*gh4\[/WOCah-'(^7]m^js;I&E<kp7C[bM[p)OqI41Kc$6[<E>ăU"(C_eKn%,9%<;kW_]\bS\zkp.KnM=+jE+2Dj$+Q7jmE:2RWM1c0rsUE^/]R'<\JjăU"y67NGsLr.a\)$#k?,k?qS)?CqfX4[IKjlkRSg>VUjiqA/5(1dj5ctAR#o9xN?n5ăU"kD:ta#l<5-e,Z/(TwWgu99^kjDj[Xr\susv7Wh,%-4U$gWslC6[sOX&n:c%>\+9ăU"1\>H8HT[zTq0B'F:U91[4x.?P0Vft;SRuIoUUjcv[3<_i#UKG1TVSVetEtPVWK<ăU"5I\L(+hP4.s00A1?V1q8+8/$N^;5zB7b;(z<%mvr<k2]7?SWd:1SDYVJjeyWCdYăU"BhcuM&MnwlVUQFLAxdz&CtCJ[OJ[[U^PSj0heXp6<C]r+b.KE$=ji,_$IxGm9x9ăU">7]y4D6X8>1XcY_-,6I_CQMslPJU$KSn%b,od8&X+Ye&M^H+v[yK-T7g+;:%&-/ăU"IaLmMRmY4eMhr,lZ=9\U3zBew1rj/YEjF/NvN)3UvlqVr*Do2JW8sU=?kQakH>eăU"K_(:W1Q6AzejnQ&X%*1igNQ']e?;P308y[L5))Swf6kn=(U2]0bv+nE%vf/O[/7ăU"4RiZq%LWOz4lF[^5y4C)#4.5dek_2BrdO',7U7aY217qn:t<#QRKpUWDlF=Ml6:ăU"]l'QcU$E4PbM_SsMb&CR*_\x)Ap='C$['*OG3ywDj(ypk.auo5yF'R\d)s#YuT-ăU"$aMLka&Io$E)P7iZT[5EVTfm5Y9o^]B12.x14#7i;+=gLNt[\XK\l;OZ&84^?,oăU"a-g'rTm?CL>8xE21On8o/XwX[XE5S*l.R_3uj^O*u6\Bh?#R%)D^n:[ZBy%jL4=ăU"PjtxIp(SJT^oVSO2vx%NPdOAv+N&0?fB]zW$*t41B[^R]$:Basch-qhsx(n#TunăU"h^k-$^d8^D_4UdC$^6Xp)Df'd+NF5A,Ygkv)cUZJnxZ_FM=Z,P58+y.A/7Fj#KfăU"[0B=$Y-Js*Uwx+#B-=7(x[TJXj8EY<a>-1-SaEpkzNn)Q:4w&jS#YbJ.V$C4_ddăU"ii%$zaOp9aejpNAR/rszy(P/uNo%(l>\)Fk.XZI-$hrP?toF_Iga^K-]K^ciYMzăU"XAel&G:BCyLN)[mbh_Z=xml&pLtmPE0.lE7yt>o?[H_PudFLf3BPKY%^m%o<-l1ăU"4=cL-3\jw8R&\f?VbR7oIty%\4wQ&j6N,_1DaPgcL=IeTSZPE<(BJ-p?ja>E+:CăU"O?_4^QduhEOE\YelwOr-eKA,o<O6RZ<Pl'NANS.u:RWx1$h)AcmTZJKR)ZA5SYWăU"h3o=p$t//H27ZHZLc[ep>^j%a)<eu(MJUMR.;SfLUF/ehO7OnDW/=y#DRs'hO#VăU"gOJGH/R35qM#?r(1+AOXu)o/ogQp]fw-E9a,,aAa&'lC;/(>R6-u%(1Wf\?OCLYăU"y/wDs0=t?H#Uo%cUlU8m0nQV+BI?N[7W\nn+wY[KL+65oo^[%VOya9Ygt<%r>ydăU"OVWZvj3j#3[SFLkDC\7x&&=HY/$(Hn\s'#6nxa%nZam<74$MMu9pin7,,DMGWJSăU":g,.MN)LMZM&<m&[3&vDyk%du5\gT#QZc-i(.#UQ%LMNMC,GqX2/+j9L/1a\W9;ăU"pL1$aJs:3[$Hg6O7$vp9-Wm#aHtUU=m?)H\wx;v#YOkU&d5h$49It9S78gG.O%VăU"fYj1,O^FY=M_V*71MvOmJ[3.0=3]hb>.q]]^1a8k*2V3rCkD3^=gFD75#62-oD-ăU"<3D=.3lnLhxwVke\xDMlIs\Ev%3xClrF8fm(\l/RDT*5tK_TX?f?phvPUt'Iev?ăU"Hb>.qf9[\b0/H\K\QDdT:-v:uFYE:MMw*e2[vZY1eYhYL;W932dn\^ZLl5=%*34ăU"lhFBY,RnbUYFu(a4Wrir+1=>3j':/[=A8bY9>J%;TH:XPby$/*f69cY+-8My/D:ăU"(S=1*YH3hu&:akB\c7V#S8DZ(kp#&hkQl?B9$?u]9N=LDUjSk:G?E6:qr.]%Ax?ăU"Yu<ZAK[rH?%'BNOWIa+r20Y%\lZ_J5p:#Q5t-k*5TjCnH35hDrK[nH'ZVV6GB3qăU"$'y:&^WvX?]BrTws0/]Y,pIAYyQp-KQ;?JTqF4:vGqUYcB$6bj-aSJxYE^[l,&năU"GC<49JhAeoE[Ukk-js30k\TpJAealr)q7aFoCgU9Q]JQpCC-C\[d?RB,rwe((^GăU"ydBb[<^mCN3B.-d'q]:7/V+;9Y:9Zy3vA\'=j&ZF;Y*_glLd>2m[5#^v&'ha8HiăU"Q?C$BIEfm6#Orpnkk3K&,TC\6LZ\+5gKg^1qrZ&fCAm&hVWT&hNWO'R,G.sKi:VăU"V#/EOP8?2ZV)iiS*[asP35cI4'_Np7+s[,22-43VlYMSC6HHDt%fGXh?RtEvN%wăU"iVU,ruie#N*h4SiM)AuEf'xsk6?)+e5_P>n6G:pX6^fjm*cAA4n=e#8uu&NGb$ZăU"K+PZIIOiA$rD3Gwd+.28-vP=G9X]LG9(8b-XrTCej8^C]rk4u[L7A4ioD5Ku?0,ăU"e*ikB_(h_\G'*3kPLdSG/8]*;)BZU_H3taE6TQur&+D7m8wAlQly(uEJDZ:O9aXăU"4\,l/Wy.J_YO4St7BZBAzmY$t\%_K*ngRlNIB5B$RWJRcamkrW%++s/Z+Gbe<ndăU"m:y7*J[z[O&I<RxYkm3g)gzwaFW[(/cmcPdMF>_&6Z&$C-R>AaZVf$&;^AMRBLaăU"(^3KHW=GYPe$A>hreo<>icLZLb-rJrE#%0HQC'eH\n6RmL+6GEC'j38lL#+n$RnăU"U/('3,'VJ[&OU4E/8^F>0:)7DIO4_QCYoEoQI<;g,J0q%:tCh>\I3]k#Pf,n5$3ăU">n3njx,Jey$u&%QN7+rRp;(Q8Wr6T0tNXYf9e8u3TxB7Qjr4^Wa>R=[Dd7.wBvjăU"w)3k3Gaeqj1>G.ol/_[H1w4dLGis'3L3e+'d9phmlc5Q[8VrN+0T%(7Qv.JI+B_ăU"g(;A%g.?k9=4RMj)[?*pl1Fk-bsvm'QBKIp0#HrCu\x+g>&QuZ%'NFgXLR/vf)QăU"8fp;0PNstcI)))$u/3#emEy3X$wE)s7Tr.&JJ?qTbBuBs;nb.N5i$'d)\%Mox*>ăU"G.6F:r>'uYR<%=Vsh\Zam<gW6OH$R)#bBG</g/:IE2D?17N/5T6L#[PmXXEET3WăU",gF.SG(>I.,fl[IN?kahA9/EhEx%=TS]OwRc*'6mjTmPP$R0axill,u]%l+1hABăU"PQ%;F/7ne*Cd:(4PF/XY#bUh%S40Q1JBe10>Q/t,&&r%Oy^0%N9aTTDU(O6cB;KăU"$lE%oX:V7)yhbOn%2,u26J<P(w*$NJN_'AKbHM\riYy%(JO1bz7''7R2pP3vVQpăU"G3lXciGS)]R&l:r%]Xkd6qvr_VP99i:1Pl9*&mpkxiCr,&mG#%d+S^Fy%f^9L29ăU"%PQBI:E)Wf%K,IBUA$<yRe'+mbOG0m#a*9:\Q).c0)+'/.me>CuVQ;F.KyiQdNOăU"uaY\]*-(&&,sn>LV4^&D.N.$bTwjf9D9+V0e',r?l[>-HEVE7M/oO0ePSIhX3zcăU"JE<uJ/DZ3_mkTf3s(Y4NW.b<Y&_/$Fn&r2\_Vivh<y+JY%bR/H:Y([q**7):Lr\ăU"DbRpNuJAO>VKpxG*T+oa0OC?8W)x1lJNb('w&1TJ#etSA*qn\%8KF[1d?8Zs5LGăU";n/^X%oN:(JRo$t&U3XfaEa?88U#]x$QC#h%bZ$Y%9kB^sW)oT$H>RXUd/M_NtyăU"MthB/3D$s.?+)2h*+3+mH00nsX%RVJ30T]tF:Q*F[st8a4>p$''M_,X.Haxq^&?ăU"&1.K5_eRD%boMwbp?1552MdmUC^#WzP7L^mco2:>OhOfVT6.d.T9Ao3U1%E]bVRăU">kKq+x9=S9mIKn[nt<d8\<Qijb)sr[f[?e.IuEg0jBgEqvh7R3KTl(gD<t7g:M'ăU"V1tsjc$O73n%?ZUj'GRJ3-O/DM_Pm0,u*3C<S]gtxm'%,x+INr>YR.x5KlJHfHCăU"Mwx3sM4\>e%8)-Ba4g'_]g,2C74I&CE-o\_3BKkpN$I5p)P#V^rG%bY>m/A[oZpăU"&s;iuW>z^AXQ(fuq1DMB-0/vLK0IqA[SmaRJ^Z2__^Nakp*AAk=46kVGcSwH7G#ăU",M/nqt9(I$AU%9,s92xK1&cMJyw[gp:kg1pne8-=3b:UyrQ;$Ll>h[bZ,tC]nRdăU"j^&=V9-s7T3gN5G&+oEQlb+H^;)>:2C-u;qQ^eRhbHiE6*ilU5y7C,V3>qYeECAăU";n)cLQFqKZ\)vZ&_)o;>tA\Aa>/9<WU[cGU=n5NXWcB=8N'Xm+IT[Yu]HLR=maIăU"_Cm8>K#C6gL6&]_=,8Z8w6X]ru&sBOqsd-QK_D0F95o5d&3J2R)Pm/*GO?0jSeRăU"rGe.fVce.Wqr.:SSLc/f?5I?wkd*FN*U4[[R[\tI3s>'o;?ek#qtSR$,2lVr_R#ăU"ATTKSC)RQ_/f*Ka;9U9RXXmfYdnQdn-c_22y+07Arw,CeGDgB2q,*;iF_&$mK7uăU"jrQ4CgLQ)^=*=DM,312U<2r'GL%eZl,Ka,N-;eeqoC%rBL=9]P+]n8M2d';XQP-ăU"oNqXq_&lM98MT;8OY%7A&K+<);HePgHgQ&w>Jmh6;J\vkgIy8b1B:yS7GW?v'ADăU";3g\TzpZFmkGnhW\8B$Q'CObm*gU8XMYi%9Y6*LQWax)wz2fR<Hj5uRYl*6.q'BăU"O,.)X*JPZp1dz[zJotxYVeY)0FzVa8pWt9d'E6R%phs-*A+1U8PT*6xb+*uOJm^ăU"it'3]z=<+yYr)j)/lGhKKd94m==7G<</aK#/9c*(xjJG1S'.I[E>ZLc*'Ym[:8IăU"5rdp7^EFMg(vUK/\FEVi*/A*>/^[G--$Gw[SyO-hdeu2(=(U^)(_Q=))Tg3'cD(ăU"C[QyZeJq($ZJl*bnX*Y$<&OkZjOD9KpX.Vl\F^q'?'_=_<%t0Kx10YjJ6E?[j+TăU"-0<P&1g+4U2+u)Vq/>Rg#4;n]bT38wFr6.RjGvR>P]2F+TVs(SU<q&]<';^^Sm+ăU"Dx+ozaERA[puDj76X]LFV74+A0E[J6M&QudK#GT+IV#:s9-K>>\?r'8m^.uuZ)4ăU"-FW*Ze'1BT;aF*FO-\7nk,)O*s#]Ud$4ZnUK^**(rPJvSzcCr6Pd#OmQ/-^^yItăU"e(=w_U=E:J+k-p)q=SFX&?9B61*<SjD)II7+mOa36='Hh7m;FL8\AMhiv'l#IHtăU"s)HyZtF[kIi=<)_N^kmqlbQOaN'AxUT<A*l'^kmolg):-I9A0Iau8&h5J$>shGEăU";=cL6Gi8Mr[/aDUaR7CH\F7=eGIqC#<10O&+Q5iSW2A%&5(YBLkB2Y=<Mu8h[k=ăU"[X:KcZXI86_r^Vj>/WJq1#P[.O)lV5fSM3E(0g;YBLkFRW:P88MulFC7/&XGF\săU"iQkmD\u0Rjsm>lJx*Nx\0]7i;Ho54ElS\e8<b<AKoWOwLLfE7fG(M+)gKZ,1n5băU"$IUS8lioWG&Vn+ke\wK4&.##.itM#Xn=[4/yEq2R2Gfw/%(LSMb<lQX///L_WfEăU"R('&jbVih6#N9pwmLf(D'HoEz%_^L;fPpI58l-56GRSw*1W'a6kiFtB%QP$dA1^ăU"f\'4:?gVKw_&[<1OKuO7kRPpU(QW&*]c_cSVF8aBOPB\%fs.bze.$QYSq$5yNnhăU"r;tw3q'x.+[vm]W\QDU/iY6YIZFFn\r0:]b[gRDBi>NIvHcFtJ$wvy6D\tTB6>]ăU"HFLf-<bbn0p2#pR*[r?Rv4Nj=4ZWu<,_#^TL?eJHeHgzm3D>v^lA]uipBfQ8mt(ăU".P:\M?tC-u1E]D0JLVQb#u:7IBxGdP;6*MH6:a1CTWBQ9r,/K-X%8?XZ5jEcjN?ăU".Ag]DhM('-NXj?OBPxL1[0I==Pev%fT#^jy_:xO8B;kQ$#$:91xC]v%H'x(s&9săU"cEN=ePt]djzvAZkWTlkdNFloTL]P/Aa.6tf$.'.''-.c:H)u10Pk7dm5MBf]yg%ăU"2knlB.C5.HezZR#V&)xwfTOF,j2-(j\DAC[Nq/kN=vBrCouqHF?YhEPEqL:U,nBăU">iC]0lGdwQC,3PWZbpv;eJMP>1WM==W=3K]=^?P3cH+[s51%+NcaZKG+UK&0*)găU"\rrTcSWKrDGpk-tN6wuk\%_2c=$dgQ_ip?up8q0eR.:iiKRfxI<XYNNVLj\Y,xdăU"Iqe5&&+2:U0ZZ_K.uxsl8fxZjs6pPjdNg5rfu*R[FYf4TN$Ro>Ia?DVJY:PxBp\ăU"S:0Dm$aJ'rt#'sq4u$^Uj[crsn,>h>F-naViZA\Dy>x:dnxju:Cxwuu(.aLDn>NăU"oh6++f3ka$exGhs?Q2vil_B33ltwyp&<7Dxb&x-,3PTT*Uqxb>MvN+D*7,ZE$^NăU"5'oil$LfP4_[L2<52tPBU$A>HF(mC(4s-Mr]/b[_v)ZuF$NdQk=t[HEV#&;Kp0iăU"$p]TQ(X=JS.B9g6j.PYV(FIsVCJn^sn\ZorLDqeBo4M#QtrbP['X;E*MU:[rsxpăU"Z9ox#*A<n\jt'vur.H9'q?xrF+GZb_(isNCwjVE/hmYPL*3\VF8k>m2$fsOKOurăU"Oja(c:2gI=9gmJh(0KSCnq%-7O+Z,YTN\f4AL1e=:i^ZjnN\A#q0VN<gk3NB_YXăU"\8)aEtfC\09.fN)Cf?q\IgGQK=g)Ng*$IUcN=9Ruhh8'2Ys9adJ:d,Wd:#CR3C.ăU"u0?)'qzS2BCmULB\>P6lDCb>x9BNPAp'1WbHw[pIPJ3Ib'k.PL?J9k,%JoEjg5năU"caHa\Z#MIm35DK'/3oapQ*BDIYS;Gsqcnkcs_YR5.4kRDk9Tu^wx<Dq6XDlswj>ăU"U/4OD?#$i<t<H'Wea>N0E>s+>pp+n4EQ5Q]6jS+)jG_Ix.3syfcq\6)1Ce5<6a-ăU"6_\OvNX5kDkRNRRQ&br<Ge][a:J:Wmf?vUT&hJJ9h\Di7y680X[>_ZcZw$HCw0aăEND SUBăSUB V9ăU">&]iQ^:mKha;B154)T\T42.J*Uu.(=e=y/>9HB.&[tHpUTJ8$nuNHv4u(hN?a<năU"pxuc,s^Zc/l5Ri.nPHxUJ7sdMpo(SkePDF\7j,S;eTpVHxv6$(lt)CVtEkZl34hăU"I(x'o>#lb,+uzfb:=P8n_Nk-CuKoE^;Obpn.RgYnechW\g<*$KGa-*6_Qi<bl7kăU"31lU0wiWj3aIzZ+V\q7YD;Ye+f't++Pot\MR4:Waz8$5227%b%hK#IN>T1.s(ODăU"<R/+xaa-36NW,sjI;$p<&W7q(K.+$w]a>AROd(jI9jD-c^t]%;tfR5KsQppj2q-ăU"O:8[0ocT1T7CGD0W=IE0>Uuk0SHnoeiW<_<QPDJ'CrWnf\0fI]-[S+MfWM%uC=săU"%2Z3)sUsQ%'h2;bv'5oAtO2$np]-QM1;+%#ncf&j#P#>#\.H%]TzPJjYe[S;5t(ăU"TW.KiXTEjT/uG,Y74*As*%qFBQj9wo7$4uqzF_H%UOi';j?bBTr2%x5)],ndPi9ăU"t4.&iNF:08$L]hipR&k4Z0lm.nFW=*7K1Pj*(IdSiXtHB3l]H^Vp4&ZLl\,?brcăU"^()iuSb0e.dE7$n=KB_*A?BjrH$^Fzk?-XK.HNDU>_N_,T$Xi7,Lu6kfyDcwo^uăU"ZrDNve?L;wo$SP#2t5?0rnKe9?[UvL_Or/ialqT6OshAnj,Z0ts;;Z;lFf&,L-3ăU"]ycHKNIjrs.Rq)FjrX4aPL]fYM)ZurLV/NSSlBu\n7PCdzt5(kE3'1OQWi'i^OSăU"r0^9(V)dmV%:RA4.R[qoH7B:&0ft;;(z^V7[ft*(Fc654PbQ3[6A&*XCB=r:zSjăU",j*+)Fmvd5:as?$^UENI^F.Mh>:&oh__OW.3H\W'qbvaeKYwBYV;M[E/_[kgucAăU"RJ:E[58X'<38Ws(cvg?JB^*EZve8D/V-^-k&WQJ?ZqgRn,.E0r/[DT+zd.0J\K^ăU"fA4nn2qla*+3X1]0oq3vRG#J;1G%r,L_[lnuv2NXl%bN#.]d[4VMfJyFYB+85ucăU"?/M(\GOC>X_c,yPet<QHMq<LDQ%ez(bU1Z2y3g<sd1*9[i/kTJh_%GH)l2]p.=/ăU"lJ]A/-v#2^Tl8aeR.bN'&BU'\Njh/Dk>InE<.aMDI1akd?46H/#\-IHQch*_.7/ăU"do'QJ0UH&w$nmTL0;2&wV#H)M+IKF/?+ln;k;93Omokn+X[j-_n[V7,cuSQSX1HăU"NfeJfM5:Wj6i&:d:A6-v3(G+P)a9)l2nx,'xeh;'E^T,jr=[X$UX&FQD,-?j]OpăU"Ci(=pqf/Q&8P.(<.#^Pz&_.C&=92J&%9^?elZpjqC(pU(HSWHH=ui?R^,ZVStPqăU"A:.[v4yN&3Dc4G=*[A/JJC^t:hKX4.Oq%l.3bJ9bAEiBmxSBq-:Y[XzMw%6OyE1ăU"1b7._)PLZoik3$geu6HA_UPZt*oM<7oXXQ/tx1S2hIUjUL(J\uf\>6*$%9cp)>RăU"9VDS<J,HX[ir^aIl6'(f\qePR[bxD<dVvdDxT[0g_*Iz[Cb97)3\dz(U?7%#DApăU"&Gg''&OFtT&N<7P\U?Ao?+Zl,K'aRYw^I9'ww:i?BLdD70<UM?F48nHDwg$>)N5ăU"QOj&[,uJ(bC1LQ-YyF09JXGy1\NlbeA6cBZEx;O2PwA=,3M1>xfR=\^LUn._Q8răU"a$7M38I/j/U9TIZK0^l_NP2FF;O2x8$widE-D2-3qt>-FEbSh$(kgdHbE+i:=z?ăU";9-$oD#3mlq>t,&o.8TU<ZJ6?iYCjF)+2PV#?T%BGmi?'>.stSP$:81GQzs6iF'ăU"S=>(4/ZaBQ#ZBOjf>^uhLMuK*ZoGk\B'U8;CCmxk0\cDl(iSY1]1K1vVnatEQ]DăU"Lk)sJ_JI0CL5EB$8HA(8^4)]h6ktJv$s)iH&i]9VSRENSV>njdwnC'VdcTW%_(3ăU"Mdkb^?xu#dTg;YPr^d7wZp$xDr^47w?HxKQS&sb=giU-N.dd\ghV(maSU>mS\fFăU"9v4&ZVNe]&s'1&tSY\U8iA.4GfgLHdbFIE>2X0LmY)<WQ)ubBrgtKo(-X2zQKn8ăU"u7:niKR1dMs#JL8,0;(96TPXOZhh);/xm1$U_wc\^xOYRfNCTp_tiG'?DiSR0H.ăU"fd^UVG+SotGK=dR*YEtV-Rj$9nh9>?M*a9'.>$DA*&7r25i%ZsUNdCY/[T6/b#oăU"b=uNK2Pusk?viL]Zk,>o5Gj5m]2t#k-y$;bN-GP0U9cBlTJL=J#DiCC)/4?I(&păU"<Z17yT%y&Z[F82_Co'YKIFQ,.%4zn?/IigmaB.O[N>_u.r=Y=^LB$S$U+pe&66EăU"%B2lVNid71^NRm4BW2;9jOqan&BoEMko>aqvh^lXUUCrSV(V*(jA5ca*,o3dZ#făU"UJngJ#hK5KqD?g<uNaSN*F?3j^L,+---AC0bWhIWm_'prFw+C/'s6\CtV.m6;/#ăU"DG-XaYJvi>&sm5:Q,9fWt;lN9/+H5SKPsgM$4frI%uMi<YRLCIvg7z*;?B&G;n*ăU"+lTePb=Fk#3.eg>I$J_eqYKNIes$GU/QJ*%4[W#571It*UbGlIa5H2ve6YB6(fhăU"lYVL#=TjcA2KyRWf#1r<a\dTjdO>ixXPcFP/ogpt^COcJApz/L9s%mNbT?xZAuVăU"L^FYKJH_s$SB#HnTzrg4GGUE7KIt)d<D8P]D:2T31/5CT)bYj\B=i0Y&$3.Xw,QăU"\Ls,lA<sLDT<C><5q9TpF.9;WL3lJ1/>)/l\*HLmO:&O&M%Q+?D0NQJFF#I6-54ăU"A'iQ/=s-d*#bP\H6Iz-<3Jikcok3p;&oP0e6^/tjcPx9Zt%7r093Oy)d6e_,R<_ăU"h&1*I%c+HUSoea+&yfGm8,)KBSKPJ1&rBJG<cFjV,6mf3M9,,J1>a;i;qA\UIj0ăU"a(O?KG:VnfSijH)4jYCZV7Fo)5-ahMjN9*v?B_\0[4.-9GQbp5?9eJ36EKWEMB^ăU"#EfY:33&YI04&ymomV4:8t64Leb>$2r\c]]Y+H82rSQD[J\t*8_Qn<rUoG/I#oXăU"K32V>iaEP%uThiP/PC?Pjd*+u2Qfok=1A(5*2T'L\D\r-x20NbEU/Pid:R[prrPăU"^G=4\\3/6pGuPNg1^C:r\\iP4-N[\%hr]UxZhsdtZ0+/;gJfzZ<Xa\UHmuLm&bYăU"Vq2T.v'6c\B\^#[bhs3<l=zHD>o,HQ(Jz='%F'9<JYzOt$SmH.)i%Krz632dOffăU"Krz&3+:WVf+gLdCe(:iwdtGzI$KNU+m/rvt:Gz;XsX]iauVJs[?JkR6Nr\,^MS.ăU"U0=\:CR$5$TV?GoT&p?_PJpwde,$>FpHuKBc,P%+jLKOS3nV4zf1=Xt%k\ZdpPRăU"O:q*K%zn*-;li7a/[HAI>WpyG^&\WfnK*HkaH)>5971y#Gcp%=XHkj87e*2?HH]ăU"gH3oQ:EU0Lj1ZVkZI,C*BZAJ\qPeE6nA4_r7I,[vb)94#BZas,%W/4(CiC(8ii*ăU"dU*Fwg-7Pie6*d+jZ&P6N)jfK$2-2o,Oy5'hinL$t,sR3b/=FQkAw)kuY*-eBoXăU"5jE+bezLjfG6.AC]Sg366L<YB)cm.ttR+.7634A=dFcE:3TU%TXC-s)K7=+:Q:<ăU"8tUjRa-6%.-Y,*v<bqGNJ(,76<*LR*>dE(YTA$&j<RhA%:+Wm-*V8&l+%R^Q'r7ăU"$RKE^^:7v8YhK-N:jG\(VBx8r,IIUUqG?[E:BZ]Nvpnb?:_J,_)rJ<+6$\^Xh<jăU"uOK&$HX8c]2hX^Au'r$4cqVp92s+L%s#Q*Hr<N:F[o)f*SB'bpi3]n?3QtM2::kăU"(raGDnQbBFJ$dH/E4V&cG2)IyBxN?uZ1?jjI,4-aDs<>a3Ns5lQiZp9fSO1hzJ2ăU"]qSoVRAc;=Wf/k%'83'IYm=lU).Q^YWJ.*aB(ITr0=Honr[Tt9+R:rQ8$+^3_2kăU"IWpdyqq\+CCi'i\GOsjDJCjtE&<qeAmM[]TDj:FOX)5_6=L+fh.(f94lb'sOx>2ăU"?>0NM*Yn.<[5+LMTKSMWTcV4+72MT2n4'Ip0JnrM9GvYJOi(,,-TGdr&dkNn3IsăU"]]un3Vl1*Kb.nJ$QsdBLg1+NQzeJJ),>kW#x0r7U.7^1JN-kM;D/soyxE$jK>*kăU"XmVO6Xx8_h1/nIi$O^cuu\UpRO;:mDNEd,T<dwcQ#/DE[^9m9M0Dd1wGQ;W?lmTăU"N03w?][3CTl5TMph5dOQeiKJtULjDz-]>Kq]xkXXPMG=FkK7f'N^.O)6-5#Y:39ăU"P)C==7Hu:\0%)mv$_F9xAZZID2nAfEZblHPn\kNgaReCbj(<_BH0t\ol+1v(RzDăU"Uf-z'%Ab850a9/Y[S<[PpAQJN0Z=#_,9d&+<[4^Kt5mtrxQT$WK?\Z3bC-s]7EmăU"(H^r,FN7gH0-Rtw:YTbSZP>U*.>tZO<hI%?4hZ\k*rr45*-f('kSr.[_h)A/1ivăU"4CAK6&UmAg6#/is]]g0*2w8'/bK4gdc<,BBHDL7PdeB#4)I^osv:/Eh#J*9<Am2ăU"mq)BW-:s3Qmty4UNb7;hr;^&0G?D[,?L-]0GGY-33K3/vEu5)eg3HfW:O%6o*L3ăU"M29s6HaRnd3:sGR6bA]R>vCEtJM<Qr'MVP0MrP3Xr(D--HX*MHQhXgh9KI-;YtlăU"gVvQP,4R$,pb1khU-$P_30&_f>K8VcVW[;*iO5*3EAt;%bxpQ)d-U]8CbvU]0mWăU"hIfdBri?ZMkj4hnZA&Vr^Y%I7B?,3/g:whDiA]qQad\IKr<Z20<W:n,^;.1PDDIăU"0E-L[fhk=JP]RD(+,yq=bG#?44OIFaE7).%X.f6oKaXX$[CueFX)6&Fdqgot;'7ăU"bp<-osI;/4TI*qrDJ8[N8hE7Ynk9[1EN';0=If?W]6$B\P55[4%v+*M)n^9<sHJăU"k'DM2fGFWuD'*:qQbe;*Z+GK(:[8=kDn3-l;4^)X1x3o9dPR9RsrSH1FGQP8Z<&ăU"khhZU^[a5u5J*h/ya6tq%3qc2PZ)5$Ly\+N>zY]p1m%A-iN(>\U6&/f9-;.,9OeăU",e^[Kq&=l]Z5ppC_L]Q?&LrR=&mr#RY]N(<d,8A#>(/=B#pc)JJJF4KI>6<W-2făU"a<BdDahalap?P_xDJ,bT=f9a>-?$_U%H4o/aAwkGRY<:1V&]NpiiY_7_s8]KrjuăU"kIWR/+zI]K:'YOt_apIbP5Njp>(>mUg;>>49U5FMHNUL6lc6vj=9YUe2%bXK%_qăU"Kf7C\e<nTX]#*Kt+K(1U-.*'J;*5h0GdE&Q*sr/,)I):kjzhElS>YzJiB;O=:W+ăU"bvD-[;.)O_RQ*(b66t)pqy/r5pXt4JaH.z6CqF&Xdw[egTIe$CYmE3s?%u^lvVtăU"vbtv0k/AJ.M?PlqfiT1r'Z[X6-lf1kD_FoTq^onf:W#>M(qA\h(BBI9mkq80uj*ăU"^Yv=gd<[p<Q6r%3d>M2'x;88li&GjzW[op+RmJ]ipq;NL2_UkD3op(0>H\s6GIrăU"B&?SX')AK,\ZL,m,/ag_kb(sjZGs%%:6jVKOc[&;NikwYd,jvi_[wG\FT5h:SuCăU"Ni(n;rxGKOq5\YBp$4K)BX-</qcKI;Edc7R?m3$*jX1#M<o4<TVdPQqfL<klC=0ăU"siT1t5I\&f<(vEKVZVQM45)faS,8Z8JU,4f:F5oV31/NjFGwY2dtQnN,QXJjOQQăU">X/)<ni>0zZD<WX;Dqk[kM6q^J.uGyk=-#L\Kj)7Dgdp/UjM_)B,1:J:1>WmpZaăU"vP-tf2;eo#Tsb*[>S?a(F9(:rY$bs4GB<FH]S'tZ==MA#akVSa7(M?O4o[78T>tăU"sxjs^MZd;yO;F5-EE3Xtdg[Tv*ljSFG#a7i<6[=XAf_YI2yKrS>tnt1;X[GXDV.ăU"mV]OBh5deU0vBeWvpaL1i_[(#KKFg5mPgji=UG496I4>q9Z<0-A[00w;\WFKwdRăU"cS]ro*+VsC,QR&:WW9]USu8=OIidwM1_;;=R'f]qU[<8Po7>v-Ju>L4t.G35e8CăU"Fp;>wm\cq5E,.=\1KQ/G]NCGt-K:lC7oZ-bBUA&#p<mBp;0S]^I'.W;8jIMa2b#ăU"+_4l7*Ytgkk#OQjFz&9_KUK_=AZ3sZg%PWw'dDZ(Vt1Ttzg2*heP3OY'HJkL<,XăU".9,'I:qFY+o>o\o$SBh&[l031_92%>cs%'gZ3W4<k&1a?66_I(f'kFR:+m^,tkOăU"7Oc1?2P>8Mc\k'_uPc\'$>eE#mirv)L3hb;6G0H>:Z/UrHwbXKzDZKd>_4m^7+3ăU"E$3cGfEjqEnxLg]x3DJ[S8DHaT;(uc[$I,_8^#nf*pg=3J+taun=[X%i35D'D&;ăU"9B<1iPt.B>o)>-ix#zX/5Yg;;.fuahHf_P45LOJ4PEFpN_JQ#zSOLtD<qoNhh4ZăU"W(M,_6hm$/M1e=2rf\Imd-.KRj;Md,[gt8>eDY0qu6d,]jHaG[Q3]O%DDZ^B\(_ăU"agoX1MyRkX?4<98QVTEJ*KbHH:hUnOU44h0i#jI*<DLK+:blXiGZ8QwEcvAf(pdăU"kBFh1\&q<*5l1no%7.d)hS)fSQgW&dDd&BU'g$L3cN;=4Ql5d_OW[OM]/iHw#MQăU"d#b)O&VMQIP'UYjB_A:RpK_ji.)yUY/Xhh->Y>GEIG*ncn<c)As*-MZ]_MVu.*HăU"VO-s4H,'pcmE/E8ybt0hSOdvSttR-mr:htbrY$GKG1Z[M7lAu3R$1MM?4tafE%1ăU"TiMX=s'/\guUuab:Uq&0yb31KoUCd8,RP+3cFUQZIcHTmj:b=Smu0ROweB2lMI'ăU")USg7\(N#fLV1+AuGO]IM6waDC2WnxQC7H6FuNk5cI#-v(uUnKXuNUDoaBUDS02ăU"pE#c9/_HNhO^]-3*8%P)M9(/Lt-6I)97%-)D83v2-.&XJg4X+wQqMMuu57R7%bnăU"#y%p,.KMSDeY[Hh_UEv]?D.qdR&Z5<lO<0%nD8)qsw;vdfeYc#DB)ShA*^xIvy#ăU"C6uH?FCHqI[QKM3#)cuKot^3\9.T?FAEq#P=e7Vr,lH<1?%T9$RM5TuBM=ZH1OOăU"in''EE^D$/g:xov;l-hfHWwQ*#gU1fj8]7^brEpS94oMt6hq'?'lkX#'L-)uqB#ăU"#Z8,mlQee[Z]mmRKA'C&PrYX<Di1Xi7[$$Y1#&)\Xfq$8:VibsW,]S\eb8E4Zj.ăU"L=KMvJiP['>Y'TQkB*.0VsoG)UG76I:m+tbwlcL'wWK7w_..Iat_lfhH&GZ/\M,ăU"?oC\#e==NP3:bpQ2'y]t1:J>fGk)rrZxIaS1P<1Pbo1Gl<PR_8?MY[kV$YF^6uUăU"]Aodu#)LC)rEYOhdtmFP6iE.T\FaZQuS>v0IMt#nV]N$x1.aR,sh6z%4M&K8gaxăU"+t9Nh>i%#PaXZ.:d*jadE>?WHO<zQA7y9T5oebbw?P.mFE>5;]S#y%jtZ1=0u;(ăU"H$g]y-xil\FDmL[YVYVl<P0p=]YC'j)rO3='I&'.;rO_>BIau4&kX2sKuOc<&d&ăU"/gn^]Jd.0Wq>_Iq1h9)#J$hz42mO9#h&Qhdyr'MCPW_aa,gRG,-WgUaolTgGl'CăU"IWP6DxD-zZvUdlQXQp>aq9XXdTU.;iP26w$*hT\EdqXNOvHfH_v#*,>2^V7%^$+ăU"#q0Ye8ExiL*K]Rc^jJRJJWjMcGP^O>/Z^R;^mAq<x*Kvlv3_BA>h#>6X8ikUk6hăU"<F#q?'_ji?*tJ?J3q659LOPj>^p%RlF<meB?>qS(^<GF0B8^XVWWcTT[<<^7%[0ăU"*rswz9VlWzhJvU[I6A-J//VEi6<Qh1)I(w;Fi$+qBRn=lk57?bjLtLu2WLp0t(1ăU"CG[(G:n#3.CePjPfo_P1_M<&IMRj2dmiSw$Y(cp%lV>bpPB3kw*[Ncmlk/r=r4)ăU"1[?=.LhY,0Fh-Ye&i^3X:,gxU.^3vcg($apvFQ,S=T\%VtDLX=11;CJ34J$VL9?ăU"RTeXpa/,.Iy+D)zdT^vvS56nBCZNHW*^b'PgicRec;6v<C-=pg_jI7v(k1CZqGyăU"evLWA%vcsln(g&zcA1)Mf4G[A1bSI,VP<R3caG+e61KtzT=pr'NK<)gFfOZa:iAăU"IrMm_'+,s<^I=X::QD\y%bFz48kSA%#g+a?#+aFRIC],_^mtuA:(6I._XY$E&&\ăU"s<^I]vAD:[gmh_-2]AQ1(3iQ:[;Mm_-23]QkeFm(Vi<iSm?%H<Iw+NeZk2b-c42ăU"J\$0>a[m?UH(k1?I)PEf2f$ok0Hh]SiEAqk0Hx]7'jcthG\beSiGAs^8-(^7+jsăU"tXMX^2^0r0j\$c[uC]+550dhmZ[vg]n(fN?-5'Vh;>miuUJblB[1HC>P=BviA8MăU">b6&MXZ5Q1X>u^+QHu&5&aJNC^?eU.M_e0kU-yQWDG$8clV#:Ii:I1=N5a-r&sWăU"$R[D*X^Bi*(n-sWU>>.#4_Bu9K^d?a3ZfHD)CaNc$w-LRK-?AJps[)&pyvV'^zxăU"t=s:F.MBJw0I]w-DC<-6I,?>kvCW18H/m4,+hI/Dh%36KI3h[^ZOkgo[v2?o1s6ăU"1.;V_.7$U)>p>B$Js$e3\l%n\rh,xQW$Gi427Aj]kQ\c/H:NkPVj'B7D3\vl]tiăU"p7emCIH)tbtY&+F$U3z2XUnVh?-.NQ+?j#LVO^EG[M6A=1/99EtcX]U\aVGnmR_ăU"b];10in#T)]T-7<0j69W[EgWpaj\P.DVQ.fWwsQ#EzKQGl+b<cC==/O;^#aK6_HăU"\,kX<KaaCEqHGX+ehpz\ark>*r7y94Td>#n?toqV?XQ\4uqb?C\+FDlZQ\#3_B^ăU"dY[<2uD&IWQnL<kO.IWw\Df>tM,R(w8g9g^]iKtGRLjj(ceIC%+5;KabHRx._hIăU"clK0#sl*e^%KX<,3i(B-a-?K0K7QmMPHi=C.b.W*[rnGCo^EX%Mdq7cu;$/W<+VăU"?\#x)R\am#&Hq?UqrCR6I#*llmf2-\#,vab0NR2D_oD^u2[Tu,l]neBNg>#0&9HăU"10=97a>G2-kx<Mh^&C6qr7WDmwa4d&wUT7y:v4YEHc44Y4YX[t9DJUy6b0)3WOoăU"X4.T(,'h(9F3ZLY=p>=[V?A69DB%3b2Df4-Cd,1X)ZXqOq,B:+&3B;(r0+gFbF(ăU"<A0:SwQs&+Nh[zTf5-78FPJ3+;UB,pbD?8S%\M=lxv_t=:m,Cuisa5w<VTX^>7păU"DnT0O^xI5m=MNdt9XfU;sT7$pYtQ&QIKD\7kbveJ7/UXX>WF?LeH[FWl<2cH-2\ăU"vV/ho]Lp(w91>F+oIuv,#dN]ZQ[9H8:<i2\w,u;xHo\w)gHt\wuc;LH\1w;tb'\ăU"wg&4T$d>/fG*S%72*I6\+*0%MaG,<,&6yLM/-:KtEsfH$I*8/h_37113F-^/yc/ăU"(5c.t2.V&-0C97jA^4f$:RfQq8SK6hau_P^EMw5c/0Ch-+pWFMXHDDG5KKLHV_TăU"hudK(3F'N##<)JE3/m+bAi#ufbn067(?h-TSj=wX\g\k-dWMTwbWf6wts(60qh;ăU"eQ3K?7D>UU6mum.UC;#JJJp_Kxf6RoW[vwAmumKcIfe4-;u38j8CFsRBM^gB\F9ăU"ajD\G9<Lsp_#C'&H>C9GuA.']4>C9GuJ4GG>N/fqw1MmYG9WYo-)NSI#Gi-IjsvăU"Q+fT+>>D9R1nlXMgD5&wd'(Y_UwW-xa;>o^V0A7M4UG[XbX\WZ^1yI]4e(<GxJuăU"A]R%JI\Og2$?#jEa5d43(35A\E8GFKi%22?2#pZ<6'#HFn5AP,MG0I[C81oEr>qăU"5dhdwhWXPV$QJG:kAT4E'zsOu4#R&VEK-IxUJ94sa1k*oOp/0om=b,ocXZ<dikKăU"L$?*F4;d>iHR$wX=#<:'PFBBu.0T:gmN[P4fj\dEaD-P>1fo_N-A7+.zkHCM)oGăU"wPkZ,lN&vVM8V%hY&W?>TK0hOF[?d1GaHGlj-r6a2f.9C[<+/n[NA5+YECP^)[tăU"4rgAI?I/YsAE=JdxW$81X6z1sD31$F>:EXcA,''Xfd2L*l:5W6[h5ZO-6RQ3$qhăU"[Z;></y[Y')WwL=<dZa)pvP-Ip%jR&m'>F-,pNB5J3<Dx>4QA=.[\J'&B[I+.AKăU"FPZ#:8J42g%sH00(QHL7\:U?)T\413BoGu>B?)mu>;QKf<GOUE<hhJ8iTj/h?m[ăU"(<UPDab:#k0^[DciIB]Ay4N?Pn$x$%VAtfoVPki+],xM$p]X4X3n7#>eFlL=&$răU"89PUS1DKLm#>E25E0gv#9$.]5>3YCY]GUAvK*a(-Pp7HLGV6YjSl_^,)P4b-RK)ăU"G2U;fR:m]NFzPKR9gWX0(XgEwTtlJ5tz-,Jq=c/Da+1/n_mC[+a-aTkU5j##kt<ăU"_M;\3m:Ui86TD/9uux:L\Os_<0LUpcUO]c<2v/BY:qVNvh]UMR*f6-NHgH6P?iIăU"FbO1CIs)j0?1N%$=UnM>-JOq\M&?<e]If:0-HV<&6e9YD5S42-r75uYP&#TM&j0ăU"Y:LZeq.mwYYRB8>Yukv^r?gZj%sVotJA\LRPhKU3hF\q;U3HP_Th*QRR3fF_G(săU"^aWR+3EVU,',u;&TRlk(3El2qIi?PGr^VuL;ZXZ#g^B#2)[,FlLthEFE,afkX2.ăU"opj*4d+2:Ry9dVG,2x\lyUQ.-(\Q/$lgBDEO%4,U\W^6K(1JGz<D/V3$B$D-d6tăU"Q:9njC2bR&IdKWC8.duC1%3E_E]#hAU-OhpG:In&lm.\_?E2RN5^OIZU,Xfq(cHăU"X\gpE*fA1nGVkR_M.#zgJ(,Q39q;'JX]&z;FrbUMOuUS/c0T4m:y-iH/i#9nA]aăU"AQ?XQ\mhmJkGjXV5:T/3Tl3V_b92\Cf<fi'5rmgh4bUdI(VI%qVBAGRB8KF*2MKăU"Ll]hAvqCZ3$7,(FCl\r8$bD#tQtC?U\Wq8$DZ8H]Sr$F%gQltCZH3TL;sk/UdBoăU".W><F704LkmhqG#SC>Ttwhk&M]2hKHEPDVDIqW-Z*3u:j%5YXyN$tSpOCr^cKPDăU"H_b*hLXnGz'dlzjOTP^9M-K1Fivwye,Evqtatv,'%DzzDkEv?qZZrtK[d&znj]?ăU"RP<u[5+kWsMUI<&hmqnOcb,,:7d_A?0IkH2'eoaCdq8PLHp:v;AC_NA0IMH-V1=ăU"hpax;4OFP+__l#kvA=h9Ds(sohWbNchlN:,btK9?,]a(+ziYZ?3Ua8IzUV,RVS<ăU"A)r^yrYSV0eiUERi?Ht':FHvV==G9f1PNJ#JQX/1sad?t]a#pbu:b<8%W3vt=;căU"%^Whn]\3^#tz:(^>CGG)&<VJmGmB<VCKM5H2Y%auj)-;-VKM#^(yok&+fXDWm4*ăU"\x:sLfj0zlt7u^12;K;>#dZ3\4BW<wBPbl_N<0]#Rq1WHbKXD7X0qwETqs8)72năU"?nLVTuY2Iy#w4q=M_96[IPAIxirqsjts]Lx/e^KY359#EpM\c_/c&OfBu+M$b<FăU"KMaRSils'RAV7#/vL5*TFbG6N31U2Nfr4\VTZ$k0G=&Th<f0agbuKYo3N=O84l*ăU"bH6EmiI_4\02a-5Ih8lv?RU.DW\M>Y$*/5d[nU.3Xm'%;q,Me)]%[&9d'7T_&M[ăU"R2kZHH2,4Dl><]X>l#c[XcSV]]:JlJjMc,Gpa_#+Z.=uh#Em?UUi+M_^R1Svvr=ăU"$hVvgljG^/uO&VMQ<U,r;QNI.N[?O[Zs'=wWL37#T:duC_sw+hrnRaXATug-\03ăU"qFWp$VM9<aK'm(>7hL%hY.;KCt6pQwElOaZ_M6o_PH)3V\BKle^WMnJC&gT(ypaăU"_9;i?'Wd)YjdEf;rI(H,;_VWT9^lghB3OL+aH(r>m5$EVhlqy]PN[>=w6PV+[PvăU"WP:nq.WptQ2#ly(vDWnqCuPBkb\[k5B:Hw=idFpmpDPG>lj%cDnAV0yp,o:lCm<ăU"'II+HH0&57q$,eU%C[/$LU%lMD<[DD3meCaLI-)6U%y5MEpF^+ya_KMu_QhI\edăU"IU5t:WQ:-+eo1zP572](jv3U6akD*CN)I\eBde5rPzP7H\lB'IQBhAdlAKSm0a%ăU"hE1sg0E?BA)=:oXha&>(*CPNY5Q=[]Z([\F/p*iP#5++3()>ij6L>=/4ZBV('DXăU"bcA\f9dC_%+EkBE3$VF3]xj%:SrGxF\3/w2IyO%3wwB\T\TFR+\iM1CD<l>no;PăU"R4#515cK64XpeU#bR#zv^k]X?U>2GX%HMv,?7'&(81]*G>9jbp:jx8Vpbt>hXslăU"9L8CeZ]ldD&VD?<uop=EYbz\?E>brkg?>,Day-&G_:AiAw^[=OYiqV'*]DQQ?PSăU"'2K+&SVh;Y?>dSAmL;s>MwM_1qp4V])hH)?+o]PP1?6n'&-6os:YcE(IP?Jvj9>ăU"L;85HHslQY.<0HGr(Z<Z8OGq'#>b[+LqbTDEnBDM8w_K(/2,=4V/&l30*hlT+jdăU"jkp,D0p.6+FPr\55l7tmgFHof2'UE$o(o2O?aA%Sh2-cQ+0?1,1;>LT-,xQ?q\băU"'^?5]uXY(6+[e88G[uF84Jv87gcZm'FMGHPK?U<ZgYMu[O0D0SD7e=Z'B;Q9PH5ăU"*Mo=#=[)][*l5p5M1:9L0=0eq\s>(2SnSgd_^l/YD1pTOgUMh-8KUD6S5#ran;OăU"Di-EKcJVeaVayNK2wB#cQs'aIHVk3zLpr0LK$5mVqFd6ls-Hdd+550-6Hd=H)mFăU"_nW)6aRZ983jN=GKY]<GNo.ECs$2&<%4uit5T:$*8aOLFuO]ZM-%&I(D3)P*R8FăU"]Y2KdY)=0XrYYWV5WO5JW_?7#iXi:1XC/u4*5jFD)jfPu##rZFr3cn?9RN9^ABIăU"2V.?,s)^e[9#5uNsp,V:cI3WVSFW%MJ=<W\BQ>cD]$PZMW4joljR?2,Wrc,]9;(ăU"sRY&Z)kY(q?\qA/jI=4i<kj)o0k6SMi<kgjo0-JWEOarP7i)OU**=WjhW>%0^GUăEND SUBăSUB VAăU"BGU,n\\A.1h3gRH1k][=Ku;;M%Hlf1&M0[X#lj1M.0[eX=d8-o,qfdSut0fDWo<ăU"pB2^;$ygGXM0r(.X[p,BYH7aMW?eH,)tX9ro\Gu;D:icnNKOyq2s[sHT;#ESlyNăU"AWj$:whBkk'13+o3)e6tdgY[W,$'38j^k/'MtD^;'(UWRW3K\[KrK:KYyW,isZjăU"pl/4Lbtl842^c5A$oSB;'g'5&w?GE5>e-X<rGYdvrMz#*)6.J<1$VKHuP<M*VZiăU"MZ66nihDGNnOUogdgst5IaOdK^=6PLV2F7zX#D#_3bZ9V=.^r\o%gscmorLi0GHăU":9I-[<PoT$*^ICd\D[sWAa<TW,neDFP\k&gV#ahC[Fb-BIL#zJi]K#l4)h>27)băU"uelEU9.]uG*jAAdV_)E*,.5J1Q=:mv<e)Q-3LEBwmq(E-cLNBwWP5GrkI&rG.\&ăU"$bB>nm+5eZbAiCX$BXH&G+/a6wm[gYJoihs>O6h%$N(*(CNyk$?Ua[\O1BI.lAZăU"f11UFe6wgBV9QO<bREcg/A[EaC%W+EkpB\jLBUv,16a5BCSRVO,KlA[LEVT'^%_ăU"-XcM=mSPZ#jZr]fQ1#T23<?SamL,;v0i0VggZ#[AkzxGrlUOBm6,1=%cw8gVPO\ăU"c<ClF,3.znu/,EY0/?WnIY5f9&lyJPGtJPoPNrD7j*LnI3-0F+dBL2g$:lgU?>căU",oQ*Ne4]Ri>+Sr1ZTe)$j#aLm1Adn$,h=yLVaitCsC6wec$KVE\r,r(y9cL,EO5ăU";D05+axVj_^QqI/2FG9.I5Ci2E[=_Z.7vMZx,,6R+u*%&L+Nho3qKQ8[.LxC6C)ăU"IG[?c0A/dDXmb]Z;^CMIon8(t>jmepBRN#oXXnD$WZH3R5<(mf<NRFXREmLh:b9ăU"6o*eOKrjCq\k*Q'<=s9:(LX87[7/Ed5HCt3k*uahV_TrBK.Qrg3+,+;#1[kNS76ăU")q)Hj=3cjoJr9>uK08TC0+NmYCV0Xm.Jko-DD2uJLA\?76Im2#7in4yY;+HZ#4#ăU"9s)-nN01^.^IY6]%p4Z(ImKA%t/*];D8&k;bJNQS=<Td;vsB^$_=-5f_hPza7^oăU"cS%I7W\Se.U5GQC*QHU.I]4#\a%w]&$MhHJW?qnC7n?]l+N#]=A^L(0#Mz8]/v+ăU"KCr^I,]Mf_o0gI,=BbZ:EY]AaXL8D]CNMBsD9=xGVGHmYh%?VKFI?b5haKCbLc]ăU"En9Q9]SRDOBHJ:?Boysti[b3bX&31/]mPsV#9=da,5K((<E=,KeW:g1[/9*)l&LăU"%KLLkW/CdyYAKc63t)znN%niQ[,(98F#hAHY1A#8<<:$(ld^00&iM?DPmSx+X;-ăU"U4gZ=M+6QZ&XC&'cwR4aQz<xf2LD<=#&rkVatVI6_8KnAXsCm_9D-Q+ALPb=#3aăU"$7RTO_%*q=iVk6jLRlBtz&v:(0O<m\Q7B2BcJz$%nA25Ba+?LV0.69fn?&v)aMPăU"8:F0\]gpU#IW4=pjiP)(8DtUO5*\;HI^o#gOhUB.PlS.M.S+G=<R1h4[po6\O-lăU"Vgxf&<I0NGJxqr*gbla)8k+W7uS=46wE1^0(WvctQrd_RZULRxCV6%5\*kf'62măU"jd4\:8_h;HM^Fj(37pE27T\QWRa$\%*W.zqApCAz-I*\6JmJ,XK)Xq./6sVMWZ2ăU"*5,X*sdnjNx=RzJ8y;6nVzEH+z4W8y$mky$3NA71sqINfR.4Itoisyxl7-OP=QiăU"N#JJPh^0Yobr#)?j9,-r#\P(?FOHTZ;oJoAs3$t+vn;Dk1E:,s\,2%sJ8qm-PYPăU"x]ar,vt>ENLT<\qF)oHJ-DSghJeOZ_):glHD*wVNbkxp.$ZQ)B*lfZX2PHqu*.băU">%r^O;UFUU&lP<sDYHH_q_gPrww[%[>3,UtRt>TE(g1Yi*xp&B872PjkY7$Eaj;ăU"Qm1HmLWxww%x:CxE:6.W80M_ZIDQ6ZO0VBH3%pS4cP0SjQUjP$2]4Cmi=JAQl8băU"74%\zxqJ5J/(R>iRG_o(xI9V*_j6mhm_Z_nk$?Lr]Cuwf-6?pB$D4kF0LZkZV=/ăU"sbPZ<?btmJ2]kKDXg,\rw3e&^[hlGXLps\inb=]67PXY;/RK_(?(G%8^%E-sasVăU"[uYnj)fU#DD$\)Z-DX,(CBp]P(OT$?a78J>3?lk7X&mq4+0n+sYB5Zp>Z%63]L)ăU"HVp?uf;77FE;(I:7O+K5WlvBe<SCe#Wym-#ro8hNZ/rl,=_jD2_8DA[(;M^%5juăU"s52^q[F0&jU(m7N+&uEIeW'OeZ>cq$Fq6QMu9Hi<44?XDT5mYV.52UD>KM;4Y$lăU"<^Ab(_M8k]jhc[ZL2Zi\MT%D.VEMM;5MF*u5G['d9^F*iHd;H(umU.u4v/\DfKhăU"M+aqC&1)M#%K=M1-eD\aLjP[eV1e\\VG,=t^e_(&OD%5$q$q6g%M3=kf>^-EaZDăU"k#8die094$0eUDO,9iho$A-itLZi\MXaDaAa*?^X<DMoM:PPi2:9d<94m[?.j^hăU"SL:,djh+WkZ[V%)t7-#J/IM79quM=5q:kcf4EZgpo*aGqEPZ^d\X7$u8Uu?YR=wăU"0u%Keow9>Z9t*iHOkivqTi'uxFQ7QN7O&><#d=LMT=-wc8\*\t+>DXppfPrE#>VăU"K26Z1-sXGe6x)P/H2j]3I&Ww,]M%7>rC.$6>RaYuk2=TvtCaacj_VGE?9_sNT:aăU"?)xOt4QiJVxJ['Q3gX2)LCtA+pLbJ3]dCt[A#ipH=*pCRto;x\J_BFnxwDIa768ăU"O4uQ9L/C(953)'njBJ^JkEicyY0I^0wfkOkGBH<Ok6GHfNGkI2y#&_r7)j?.DgzăU"b<t2X=)2:%fIX+vZ?oLKhOjd1'fI7UvZ?TcJ>a_k5W//cAZnFr*NK-jNQ68HfmoăU"DYa3S.EfdoD7'Q86rj/oV7c?RKb'La_q;)c.mu4w+K,rDQ5Kt*DbC>';bcRmKs&ăU"DxA$S(z2$csAla<Rc2_c3E9c.%ena8+H/[;kXHcOB4R[[aRCzE2eBwCm#>cRiFPăU"X+J%QDM(tM:\c3#UG-y.Wg:3YLA'k=h_O;e4[Am<Hz1dBHm-qjOC;q7ug>Z74:căU"a+unio=OI77e'ncRsqJt1Ieh3u%,v4fV]F2IL-ALU,IaeBaSI2bN2u1WS\0O0=aăU"XJ;EcL=]*$$66(rR9<&OD=g7D),MBSEIgio9Ro8)b(3,WZQB(5awD6:W;f$/syKăU"&RUWVcE'-*-I*t3d8_p^]ie;Y(.o\_jQVqimR$Ns)o)BCunI4ZV6\+\,CLD#:.QăU"H<fP_vNAah<ZM:,G9$*#EJdk]IUWd7sPf$=u$ZC06A#>*uSL:39TU8z;X;zQAu1ăU"Pk):asV:QgJ,)tM^M(z2CYRcqm7:;]\AiUlnF1,t&e'0#oIt^Vvh0>;lT&u:VcIăU"Pc^lY6%7SqOhd_P)nxyKJg=8ci(8psgr;*#:I4sT&tf-.,<l>PJ1:DD62,fsR#uăU"F^C4n%/pYmY9j)vw=0)quS.;bq&mf[iU/%1ER7LHg0Ws)];gg]SMg\^bLIMR0<)ăU"rd\2fQj1u9t2g1Hub>1fMH<C\D5.7eK[=p6#E59Te+%YuPK+U,4tc,dVVlr+r']ăU"5G$wq10T9*#2>LXmbs#TRiD/k+p<DyO#P7vINo[6%bNOk>/q%LmCH)q9FG]-n4IăU"wly(%)e1:fU%;B'Dw%w\1H6357O6h_GYA-J6BG[#abcX>T'ch&<YAY+,,u>1#Q.ăU"$(8_Xbdm?Aq[8mQ6Q:#y)#DZg_ip^*=];H8[]vkXX.fic$$CL7YU/&bDTtb.yG]ăU"YEk9TTdmdc(FNst.s#0C]ck:4J&WZe$BM5F)Nx#k&w$HEO-N_W1C7.3:^#rvElgăU"hLJCPbm*Fv1rHF[r7zX.X6<;V./U4ag$;^3nFOeU6t\B[VCqo]*S^U#PPE1_R\KăU"Aj_6RaHCD$E2RAF,RUTSIkAZ+8iH,(qp]2EFlZxNBXV6wtC^eA7\)XnEL&XtRJpăU"LC<g3D_b1?=NAn8U#foE]se=<q6BnYSL5[Jki-M#;^.kKeFvDDakwX0epbx7/S5ăU"T#rsq[.ELUF$AX._X[G?'hZkOu4G]3lt'kZ*(A)Q\m^.ClBRlfQou5gsK>'AQ*$ăU"c<G#Ln/,<1x:[%P-es,a5G^CJayA%O)FL%ETLLk_i_L%>ns<:SA[8(9A_JBANJjăU"ijPDUN8-lk(wXzN'MhsA(h_8l,we]SPgC]4g^ZkE#-nPa[8td\%)ILV9rX]I=0DăU"BnD(wPJm3^:LW>9]c+m%msZBMHbU8k_tf])F8)6$8a1iIhbDakWXI<Lv[uk[]=]ăU",)^j#AfsK[a=^>'\;^J&c<FL7D.9N_dksV3]cWd&.qFmX/I4Mi2OkYb9og]8cq%ăU"m.sn4J\=vwKWb/]CIjFvSi+kkYQg0_klUEmE1vEvXDQk[dd<LvFE]ZXJ8OHA.%5ăU"+(mJY8Wk+)WGL9la8Gs^BD]820BN-Bx1^tt=^]Mc(wxAN3^t8d:BNMl+$k%[WdtăU"Ls?if8$83#9]^])KQ]4F+GANRLL.ikWKAct]BNC.<<(;<C$mbK.6'$8lpCc5UPhăU"=euT7;-4pjin9a*gGY.s<pS=EJXUYiA)u[7Pb0HHbTo\-u$E&Wr*UG$D-aLkUgKăU"XHZfr28vK<8Z-$uc5L25ZaU;t+Mkp[jw<KNIQVV1hip*3H?=h#03#)Kiqk1M7$căU"aez=)in[59I.'n6;L?)s3;fm2Zf%2M;TI'd2I.pZc'5>-SQogl^6;,e+YB;ckP?ăU"iDQIyW?:*/\R_Z\?A:Y;*tHtp*>gq6f*>>UTQGhd_Rmb*:F*mc1$&V8GQIC-rgSăU"g:O=3G_-YonYi=1g_=70&Lx(_*6nCYHg%%('a,PfXjRKQV=uf*T[TN8;:1Rb3YfăU"Q_/UTUgpu^5-MMyM,gdTH3:.S,=.rdgs.H2?O&2Nn\TL#7<lsT)QJHY*Z?-LOG+ăU";0hIBrPF$-qCug3WEZB\NJIGZ.5LGC;Scd_)&r(S1v)rsx$DfcdOG84Y:]v'fSpăU"OjFD<(77WCV9_/;/D#e+Umu]^W)V7/L,+Qw\Hjiq<qxji#D0D8M(Wdr7.%S4xdzăU"RDVrCuf&HUDNjIq*a^9WmP;+VXCu35cv&kYLqR/Mp.rqdb0[G1(JV9CNG7i:d4JăU"dR_wn3Cyb^fL>l127V]GI6-TGlS4le9:)1\rd8a^q^Wj;?$m[:?e0?VDu]p_gJMăU"8T4C??1d>h+EA11*m/rG[[<OEDH%o1MbUd>>P9[JJ13##7)cqQ-6Bgyp9Znol7oăU"Iydx*qvPd=;svd&NlQ/]%Pb8:S:Orja8=EN%jKMHV-v&3[n.\Y4OvXu*[E3.dV%ăU"*)+f:),#rQ$\5;\aRUX0*QvvFZH7\M7lZWvH6h/Fgc8b=4JuH;rq**TJ7Yzt2t1ăU"\o:sDip0>Kt/]<1,LBOwPY:ZVTBi)y&gzngZmh.\i4a&0WSLRAK\nh:HW9V0W$NăU"-uZIW.3ED$t]ikjqu,rvi8[fq3OMt(48Cp-r]Sn-Bv/SQT?+iPkeE-2cR2S&2p>ăU"eiRORT]60(Fh49#*\.jhE^JbV'1O9D9mU_&#^](-S2:bQBR]EmDgtM5)+)ec;5KăU"$,&0=b$E-Jc*f^W1H'S%H1Q:PH*(7fQOA]n$pRIh_Yk\M<%dFr*y9<Sy'E$.'TzăU"OBb>y%FZ6?zR/'*yJ/>ziP#+yJ59,DV6e;.\2rIuXkb.p:VtUN0PGW<Tk,Z7ef1ăU"MWl\(3?l,yAI]G+x7==7E)_ue1\KF5)\s+%)#-<oH0Zg1^v&fR1FpYKMb7r&?QgăU"GFC(*R3%4Xt/Ph_'l6A+3A9Fl=4ZJY_[Y6)RXCQXO%)#cP/M(Lesfgut6:Wmi9%ăU"e<,%)nKtB?;bh:y\ST5Z<L7LStvLUn<jCCv[aj&Y1LLv5^SC0ZY*$]ti3Hf*.'$ăU"B3XoTRHX>8F/\C'uJsCur5\]q#f7asr71HsDr5dNup3,U,_M5gS:#WU,R'IXbNYăU">r[9OhJ^zcOWQ=v<r6oF7%OMr4_q2:j(i-jQlp/j><H<J?:g^7AUchb9pIVqssqăU"S>[d(5O>#tM+Z2N'&LNen\YgTf^kk]3DqGZ/-*PIou%ROD/zrif??XX5=SqEy>KăU"afd;wES6&gq0BMtKfotP+^c=+(Cv(L3qMcfY2u&'9[Qk^]oeFoK)\>7k;xM.RXgăU"><*?.7MuVEX;K^#M^H:sl$=ALUlCi:DH_LJxU;>%YT.+IH,a'fFjb&_C;MrJZlSăU"Mo6I*6Rt5l/Q:$Hvd\p4w2-][^0n.uthx4GLrUlYPkq#a[r&Guwsdt2._$42l+%ăU"8ubIGT7u+7mtthY4k-YMmR\=H5uX9X,FLqcjkQxjv]A&%5\dOt,-JXXUuvw(jiLăU";:k9mUr'E7N(rA>KQ)8tDX2?AYZlX;u1VXRvp.?,8xkn^ex$T&yxM,FpY(r\NvqăU"6jv*3ZIw:tFE?l<N6[_?a#JApU#_#y2ITyep6cIgE4_NtsiJns?/Akie:g5*5UvăU"g%o+rsiT$c]lCi%W'MrR)FQU*Hvr<=.S(WGL;RhtJQupJ9x-\N,A-6HSs1RW_'kăU"S+>p*+wDA-05DA0c,o+p6sp\#]ud1GKEC#j;QF1#TENj:Rc[;;*7(Cm)xq$hnZgăU";rH9&O[kqFe%iUR&_aT?UL=aSa<Ug9m-Md()m[k$?L)e#A/2mkM2t3H:e=q/24%ăU"Ug%atM02<*C;>Dn.<$Pl:,E.;e==Ju]&0O#qSDUrp+$ZU)p+nL461Y>UX$Q:ucTăU"l[7S[WS=L=D#._$F.i:g+6ra''Zv$a+A:vLCjL3.=,q36R%EoxKSzv_SdiiK$vVăU"E1oF%Y)a8IfF.(rF'B+BVaUW#>oCSOahBWsL'7/^dHFZGI3a+$lZdBAPsYb+a*căU"TK7RlNV#wYb+]*]VyGRUZO,#O^fA%Ar4iU&gMrBea8t4\x6Hdokwl:*XSbxU-o8ăU"n(v).i(4YZzgs?Y]Vmy]q5xCFYM1ysSD6ywZnv/N0)zsax)d-]zHGS>6$\xQZD9ăU"up\p0^&#bV=>whBES1cC,HE^tinMJz'C5PA<3'\2a<YAy%.gA&*=AP^<0#:-frkăU">HYZKfn7w9O%&G#nb<Ep-(sbg_1[a0\\RlXb6oZ1\'w*?PO$LY:7K\l>kqjBZZ*ăU";BH-d'[Nq4nIX*1>_\-PmWD8=W?+0*a#;O<gi[Yt+ED181vA,;;xa:tK\[>lSO-ăU"?_n1I;;^]^_JO3P)Ta^&q\xc8943C'D1*+8biG,3OjU[-9nFUEdHVwf14wVSq*BăU"Ke+1Wp]xc9ecXwcuf/=e)ZatilX9?ppl$>o9,QhXE)h^0%Oj\k87u<\F)*>A.YCăU"-;'5Tim,X95#V+'D\/%c'LPXH=UQ7J6,WO'\54LuW2c':w)p0A/#:/%kW,D04)MăU"I.PbETs$W[^kRt</r$^'Km=Z58CnC1JXwm/^nL2#u0[1[rZ5,oF.4WjIr3v6\.CăU"8s^8))J?LsZySF[=x=Yx>r6m,4BZT,Rkm4uqP/Q/nRK)MnqZlLZ5Y;1TMb?h,vlăU":-T(,$2yDlM#DUQ=\;L55]'rNZ;)2K2r:(<P*To?s-_PAJEX8W\c;-W%*oEFF='ăU";+<a;jN5,kzV96f,bfvYk\YBuW94SEfoQ)1IXn4VK?LSNmT.G)lBCs$luOTo#1&ăU",v-LiP)_9QEMf4r<q)5Cj\sSPA36isoCLYyeUc++Vc_-o>7Q)sAW6qLD)a:;#DTăU"eZ84OL*hZ#b-9EIu.jJ1?^)>-t7>82q9c/(5=s<:42Mz=7+:EAR]SQzj<)%(i\%ăU"z*uLuIhKZ;O6=WiCJU-EF/X&W\EGOp]?aoJ*BmHj$j9jqkoEJ\1i%9B.LV&(es.ăU"EwCf&)QjtP40BpTD4)8YbuG*TL)u.1=KJyQNbrUI-TtsW+^SIDpB4bZm46Xg7XQăU"s&'X78tRbuDc\j1'ScK&6c/ixOYqnf<29Zn+YL,.kevVk2)spQGSG-U7J6PhsN/ăU"bnL]2\#SfiYs$^S8N0Fj/I6pIvQv]1[I/(/;?',b;(oeK-;LLGhA4WQ6tQqDr4PăU"tBMNdu2R:dr2:.TcIPwmNjjusm:'C1.&Bzbf5Fo87KUmqJb3vAD=?#=h?fR7>UZăU"Z,I8EMp;XQ65a\V5p;5.jckWwiiTIXfJ'nU6IQ1%vRKclWlTcbgrpOFiD0s1neXăU"C%wy8I_N/^+R\;XwalkS(UHj]_a\6=3v+CFN?75u9w_UuvnVb/Wa&\6,1:^Mv_,ăU"W,YD\_+^G>#t,7Qn);?U2K'BO0RgD()$=uK+neB;WVDj3l;X;UzYSQA/F/>b.hWăU"#c<rG=:bbhHl&*q<G0eW[qiixM<%kdD<&eyD6-4ZUL5j_c+.b[n;7hZp2t[B')oăU"C*,'2R^H<Ugv8euDG+c5Ef3%]\R(Yu87,a=\6<:E2qQ-9\gj*6Dw/<d*Eq1[[9)ăU"5Q^V$5^7>XU8dLf%Y1i<D,02o6uaf4YrT/3X=s_a4Qh/m:A5WJQ1d;e]S)_R.e;ăU"HU0F*Dpx,B]xlnmtrA:N/7mLe4fU%SPd]w^*h0_X;D,[7ZNj]_kck4nnR.ssJ=-ăU")_'43YZrbQh)]u-[g6?'%t?AiJ#N<+#$3+=i+C2U#<<LZ>1/N$s''I<+8K52U)aăU"TQa(q4ws4^Q*r/r/Tv/q_RN3,?JYa2PYFd52b;4z$P/B;sTRB6eyZ9hQVqcR9WDăU"&OR5LcC+#S??KHsj5Y]UiXiA9[8xo?s;:fm;Ieu2+cd7^k,uV%siVK8my7qOW.4ăU"5w,5CxxQm&8ZFAjJsIS&<91P:BWOD?2,*]6c]MSMEqnJ8Gcf$]vQ=tYR%KT#3JZăU"nff,Vv'4,)J,A;p<Xw/$S<xg.,)W?h\U*anVcFQ/B[jr2NXn-Ci)^1.8YbB#'dIăU"DFV7OJYz/dT<JI7wIYjLd*T1.T(?#Pk</7#w%V&Gh=Vq%pfhuz4VRerQ+O)c:NYăU"&e\-[sHO-Er9k#<M?T9nlQP(GgoqnOP**5$;XVATo%GR+:h6*OH;c-kGj5GW'j_ăU"-PP_Eo2<:137(YVKSGg$_%))Z/o*')Rv-ST;ZoT36^V-pL#b$oTIw)Fg\w:&ui4ăU"0h]<M$utEsx%h,8&T=m,wFivH=GhlHbBMOE(a5<E9-0t30pQ9?eF95#T=7-895BăU"YsWhtb^<urI*V+P%D'H:(B?vi0ync6'c=z0(*>phl-u\Tn>Re'=kkht7gn?3e:<ăU"DlCUA'^wfWbN\h5z;gx]s&oA]/VQJ>%Gt,C5DH>SVF*i?'.5TV2k8D0I7$gtDEKăU"%B5nu</Oj[JZr5&lxgPT(v)BnyW&tf.?Geq%=u,Y/jbUm)8DXXB;9c7OyiTHg&#ăU"Ro[%_C,<0XjCf7u%FWj9a?*r[=%g18MFvdNJVFv3,(w(,WC\l]&H4&,*c_._J0&ăU"l?qQ=^x^I2#u'hD%aIr%#w-dwT<RioiHh'i_vZsK=CmZ<F?Jnr[Tnnr#,O*&FY>ăU"(/2qiY7+J#I+r]%skx^k:H3RAiW[DegcAhVf37j6C3H*Yq?iro.xk20&gSH3B;văU"A/E(,Yf5;ZI6v[+3<$ZcfLO9#n^'t[/V':>qp4rr*X7mC(sW4W.3m]8_0h$]u?=ăU"9I5Mijij=p_DX<RKk*BWa%0$5H%#Crd7G0d%M1V&^,9.c^.q[It57a+odUZjBjNăU"[ED/T%>%fS1UZxy+[w#6uuE[k0?_$$sla9GMmmhn(ibpxZ8\1f7M)nA]*W=vGBLăU"00sY6)-W7Uwf7j(azLQb.Z:Bf*4E;.n99JvSoi5-X#[w:&+8RHO/5$<G.Wh$>p2ăU"DGZLEjN(H#/(UWp=l:n#nAYuE4ox2jIS6P<^/b59?dJiX.hAH9od2gpGmAw?;u;ăU"a%H];\%O7R$Aak3A(HTwGSaKVIEP)5uZb5Pf5P=oM?u%u>)X0CRIhI\>Hm[9]*păU"uKsEatK%-a(KsZshNSg\GCM(iX[Z.Vs(d&yKoD'FuGr=>T.k2?BRK*^2ArenG8măU"A#/PR:%?*k5Z^3Y:8jGB3?]0=KM:T^7nGWTMC=PhpvB>j\AZBDtx,r1uS)fcL'uăU"Q*L$mH*^MEj\n;0?7RAsZNE7l,L=dVG>_XrbNUXPl%cH9_ejvHG7ANbX,4UvGb*ăU"<v+$En[6;Nn[bMqsmJ?+q8QUbmc1jetOTu$953cTVg3'/l_=ApJZb>/AOL/J%:TăU"%iMIrdC*g(o.0?<TuE'Zc'=VbcL0c7#F]=Nq?,PuT9c3Qo1d,Fql$b^ORBvo%JFăU"it&fV6cwkD#+]?wj3(Q/)-Fme,O3+HidwYFEn2saxJHN=h(-/'g9GO#RLR#',4&ăU"HFDx4DFJTOOKI=IC-MR$QC>lA3N7lOqN,U8XxgXlpO6fD6Do.<QP$zYEj6ny6uYăU"nJibSq=1SivD'gdN$P\4ZbsNuPu,se[c8+Ot4uP&LDpla7vh?IIOiw?tE[rrTH<ăU"b8(D]'sd-ODgcZudtLDrDZlLQdt?&nUD'h7sTHScgWN*=B^_hctuh\s/KVvM/UdăU"Kut<t4GFf#lZto^v\bxJXQ18:.SFJF.Y+0SN9VNB+']rt6o8]rIi7:nVVF#>9[;ăU"qZpnnqWQET(lt/Abfmqpxqnu$hX;lRhn'4dWU8Hj]9):gXSYKush$ZZ_fff(4nxăU"L3>SlnN;sroog1virnN8XaUVNF0PdN-3s?ce)2f':cMu\u5277rboh;tAt,I$P=ăU"dWq-L66d.(=rtnT8<W#n8Nt8X'o>q(XdeK2.vZlH#VHoN\k8J-WatKvo^uZst0(ăU"P+Y$Zvp8>k=8S8lVXU8rVMrm=Zur(X.=88INUQ\scwndKpT&NW0><TtVofXM.>făU"#fGcL7>Hqi%u25wPqP^:'r7N4xTu*+KMKJ:$eI]JtfjD6wqbnTXsdVwv#RaD^dDăU"TS8eL3N2Z63*3oIfXB'hlRXSzx15;?U8&>P,t#fi.,wd+IP=GFr#/9BmWLTiS4(ăU"<jKZtO1QLQ^<N(Q5N>r($o0=?4r(<s?hgee4,wAT\n^Z'J8;#7;u(#hQoGrg=QPăU"iELbqV6?iWOhPWR,T\n%C4&V'=\.Ib]pZ?o8:%t[y-TSf^OFq_/V=-%U,J%[/4=ăU"$%e3]dDK)doD'>nOze)/Y$;m=G)wc$)M(O;>Vn$)0t60D;o4;$9O2QA0(3'*+fxăU"l+2of2(?wf$>9I&?EawhL^uV1MRF$c_.x)M0D9w49]Ae2RRvh'w_l)UU:,DQe4BăU"/r3N4qEy);n;kLYzp]]QvlU=u._ZiUvHBjklafTFpg9A-=YoF5Ic\#p[?fh;>++ăU"3,#$?oI&fLN-3r86BouJC$j;x9%BIc%2p[?Me;>'r+J<cPoo8&Z+J'3PJ4al9foăU"d*g_wLS;d;-PZRW'3>64KuA#*-]8*sDBGcl<ZW^%$eDZRjfHB#ssrdkWIaU2N8băU"B*dGi)LLAqm2D+G]/4OS;2%46crA+J./q<#7YLAcjxh?sgOiiK)L;T1y.Ab4olHăU"0PWkdk-2VeY$YdSuS$li\nvJfuh2dKSn5scndqj2lhKQkV+y-h)/a2k706qEOW?ăU"3$5LOM[^)lVxJUaUDF9hc99r?*u.Se=-uIkP29LcIO>Fw0qMso_]$>I[)_emM7,ăU"P&'Bo\a^,S1j;h//,DFqSSgg\G#4RBc-j)<QGM0snaTZZ9bi.yAYDzmWNOo(Ba>ăU"^*o(jZMe3e5EedwGx_.6e/1?^clK\l$L3eeO9QU$)?aWnHcc<qfJ+]%lp(9\kp*ăU"rKYxB=.Z))%0]YA-N;2-2kkWb%t:?3qz:P?87)kM1n3ken:m-5k9(e<(2n=]Wi%ăU"x)C#)'16<:)ET=)c<Hrt[<J?X+Fgi^S#e8sYdlF?e%80&kEF^0PH^s-P6k/Zh(AăU"31F-I5h-s1Z]lRO)rx8TEp8,QKl-]-\l*GqZ8\W?bEE=FYR;:avers-5q==gY=căU"UgOZEdDFG4[rrY0d:n[].5'V^*j[lFSgcendm-G$$KrgYBrcg/*5<=;D82#eI)băU"j,7-aZIeH:Qk]Mgusd-f/sp-Pn/L&*3[_<:7m);EF-;SbYvX-[LM(*(aB'Wl-wdăU"dFGTiW]FV9bgYN\V5iE(n3b/]:aGm[ig5r#cg5TmcgY5cVxP+\kN)J[F)DZCIJ:ăU"QixXTYb2s-:-#o6'Nh<:nfA>*tsIaRe(g_-L*Jr5I3bxTEfn8QURt-WEUsY58CVăU"YsZA$KKrQ]N3cPnS3c3sh[w^dbviS7WkuKBMEhP[=5cl5S[COxT[A^djvg/6XYCăU"n<k:-C>LsjA$Kkr6eN7yPmS7cKt>\ApdrJ$*J79r/rvA?8\Y*?O:(%r<xx&kVtnăU"NwHm,?LaC&kJB-?Jv9Nm\ZUqUj5a[kQtE-5H?kMU;]oiKb#&se43AIW#xSP&\s[ăU"&j^FIk=%0>%Wekt_;LSY\9r#i4$2QH#fkI5_k3\dw(R3fV-^-MDxVp&73^\AwxIăU"m6hSo30O2MFYChFc>LKItFQn%w-(xw4.un^SBne<>N8^<x8aO^P=.#E#qh[eUXHăU"0PhbG,uSMF7ibD2OSJdeLbvMCqA]E0Q\^rchEle+b#'.DR51_GN<5f[&mE'shT7ăU"qKmG]KA3B<INGO.>':uCQ9A3N%EMo3+UB.;]i%k_CoVg5EGQ=Z?eE0giRuY&pmZăU"T.Jrql+4_PHYquYn)_B-#xBqh)EAw<QM)%c?v63w;%##633:#CaV9ae)KubIqR#ăU"+rG+bp:=:6I<^fU4TE+*\6#Y)X?QCU)D]p<9_22PE&mzkddixWQR.mXLLE&TGNmăU"_6bDHy+drn4OWv6YhH%?G+9HAB&5xl6iU*EFp:*WZf?3lXFy_Ett5WS$2X(iX3_ăU"X.&f<iE8BPQV_]kbm&YB=(+F3+2gKl2R[3*2BWN6n[viX7B38_jJJAZ9n<-e3=UăEND SUBăSUB VBăU"*o7V9S6#'y_hgJ.e%]]:;vn-ctNDR$:LBcY9im_3QCBrkTo*iE(/Y?U%sffSf1lăU"B:2_+WdAe0t%4_]Q\5BZJYR<QBTokh2YjaRVMU%zTV('E=oBosSxun^<EnAvFT,ăU"=L+qV2ZN;/s1']fdaV_qqdrv2Sx#E$-+xFan3L*3-)nq5fN'ZY,A4p*p)T%7KbPăU"0pEhH;#0+4S3Psim6$Ndgi'hC^'>##vRlHJG._WnnA%4Z-CU;=ZgCyha#g[zZNRăU"H(+#:&TnVd&1_G&V=#AEkHh2CS?6^_+k,Mhw\Th/404:(H6?W&%UG3q+>aJ0M$AăU"68jSC%9M0<Fj):s;hBZF1U]AyDbS(vg<re+EZ*POfg<'<\nMYU]i*$w_?ugiSLBăU"u$P;NU>sz3X'<m5R*_.CO5Fosznkpe)W/YT):Hf0NIOFfy7rJpabN1u7nc'a>NWăU"'7Jy_7NlJF#^M'P/JyyP8U\^Ype^rj\bKKN[.gpmI/&]*X5/Nm<<<mkoHymRelbăU"ikb_meqKUWf37[P<6P<fV4I+9d?IJwqj_'=_sxid?o?u8ndCt/[>B6#8(7'O%EHăU"DOOK_(o&D(wfrF3QTlh57Yb,#bYI51%[_:Z00u:]iFT<P+2=O::ARa,)5UG=i%AăU"W:YXxX+\2+,^?s2F?s\^&pVYrB2AhrONCq#Pmh7K=JcKHLwcp7&AsAEF^t^#XEZăU"%7sB.G_522CclcWv\h0uz.ae<=#3N)OI,%F/BBFS:yWbg3dHG#0Dm<[_2d'rv\3ăU"j33[pxWh\moi<I/MS*y:4qS=lGC[/V9&a7/FK[t=41*VCyzD.g%?pdBq'r([31eăU"&gX^xiFAhLe/-/T5J[Zf_G#8=iI=4^pWvFN)uc+k7\%$Dp8rKYR29#)EGWO41hMăU"c7Oe=wtlWs8F^uO(X8i(l.Z%ME-eJ]VLuSZcLRsCFFGrHq=Frb(b7hDFEOAmBhNăU"3;gD8M\px()GgET;Z)e)BCk82sMx$Rr#1,v6gc;1ufvXV<V(t&7l&:]niGm^4SsăU"A4Zs)?+8r,RV2uN)C<X>Lh\+c6eO/[4zhu%bBSqtldgZYKI?,JO\Gqo+vRuY0)oăU"G9ItH)O\Ij/A[>HZLE<9We#Wl_RSE&MG$]L^iz$X$$?5t&u8==7bmT%zZv_\KkoăU"Jr&CfKgZwCIJ&[/3[-Za'M=&14azF017zfiJRoHFh=>h\vpxvSbIrJoU$ITZ$&săU"7vx?a;+xL2V/CQ,pE2B$%V\G+.>'8*a21mF*Jn,9,]mDr&-Q$(oH?q^&_\-^)>$ăU"S[JA)+aI2WAkFf]7:Im_-CbXc=EhPv.7RrRCRIpZ6WKq:H-&j>>:JT5Nf&U3aYxăU"S4(x>J#e/OVJ5MSn*_-GdQbPr=J%Df>E*imzorjpV+(tT_VZYiYu\9Z-?3fJ%'0ăU"LhjsCEr\%='L:MLFghm/nlFH]aB5%8r6qTIa2^2ii_>Gc-YFX)m8gqC=1/)4q:[ăU"N&9VjRn59SSlW#%sl_7MTs_:;_nGpTj-B6//\1#ft;T2Vr,i>2#0(n_h^L)=L)]ăU"q($EfPsJ$Ys2BLM1v\-a-6$RRrju2.FU;Ni%wKc*m[.npg(mL_)Za57OWsh7lz9ăU">RVv_Y,'Oq-2fQyi\fGc]k45p6/SS6%nUUWJ[[]]p0v>vZKBb(B3?n.2c)'ya$4ăU"AK'\oM&N6r7SND]?T;SH%weKH:/hI+^^cp+i(FUKBSH%eK*?QrXC0w,b*F1+A_băU"$06]YR7a\NwWxQ4+N$:&;t(Hbs11\BoWi,KC5Dc+FcMh]MM(HrB;(3.U>m2krAnăU"#lnEDf;y-8-%,v0?fRWsEQ-W:Pm5o.'fS\dl#q0)mEf]cTia+Fmp>S?JkMvqR=căU"J\OkF&:;hDa?FPIYiDi$iD$ViDZiZN1KG)?6[5e(YS;*TTWW[ACl4$&1Nw3'?-OăU"8l1t5f7;?O#6\1#I/Y]rUk8fw,?J_l:W72$G,9JlFi1q_(\y0<]N(<NqTZc]Xg\ăU"*uh-7P#2Bpdyd_vTpQT>+p:?%lzo.1NMZkNY.F74,b4,I]sc7Lj782L$^_t6blnăU"XfJnYJVvtGuJSCLAx2auA$sBHWL-I,K.jx]DQHjoWdMIox$,(&,_ociNM1kYE?[ăU"xRgb(LOS*\w_(W7oD8VBY+Cb3jEj4GR(MV1<)q5)+omdkfZHaX:Na'IN0t2y%upăU"A0Xbs[DrWo6m>ux]iL5KtLBCbwI/NstTO'NO5^qZPeh3w9(y:5OS$h,%0=V)xcTăU"MLX-tWDdca-VC.e5F5ok*t_.U5CU#%lgmo]$J]:)L<hOE:BO4bRMj-:(*CJ0^)căU"F-EqI,d]IIypW>1lsi.HkF$*wm5YLsZF0hZ)t;(r*j)z7s=(_%q3a??=SGl&K2-ăU"#B?cFR&^-]Y]+7nux>Q.f^%OXh#2?eC=Jv4'=^Lp68DYI9ER,J_H7FmN>,\+Ni=ăU"$/?&r+LR/q7tQfbr<TBBDNQ^*]Nu<h_\[:wgAQAfJuGu:p5EDid.0=>*L0g/>ZmăU"u6#iDn[/=BrT[(FL;mQ)Gl_4Ha\XeNAZ/c&rX:57S;e(Y<[Rq(evaEFIGnds[uLăU"T^ksgJQ3WU_>ot94XQ/zfEDvNsk3W9GEao)?&\^kekSOWpceg&OJV*:T3ESN=QVăU"7J6V7$3LW<MW+MCWQM5(_1MG<M;?nN;aQcqM-9FRhlPZH#?%I#tD/q<'aCaZK1AăU"9V;R/>F#IUaS<rI^ZRL[9W9<4oQt?CU2Y#Y\(E]mQtGFsgX;\uJ]?[u=sEKLG)^ăU"fgPxr=>G7w$3S[cw)$7[s/KDQS6mi5IM*TWf1-\^tpqq0t?*f.20=,RfL[%LNBRăU"]$5P&H>'j-l/1*%<jj(*\reJj)zZ1zZN[MYt%d_L*a&'+0QKQJ\?c:mw38X?bM1ăU"QdCh_-=bN6H<)')/X;Yuis$;.OXtOvaI3o'egJnA]?Hlj3Q)t)Z^xfF(GXs%WC-ăU"(b%'X1l2p9D'dTS:1AqM.7)I4Bcs8QB\K_/)Kc.u,S.qy:#K.ou_/I3D#-rvfdMăU")-O9-)7a\W9oV;Wl3$s(vwC2^eq'ui(_p:-rr%CS%RF>U5-%T.<r1];WhBC'apEăU"OG%7Eq.IMKSc5i'&1fJ*R^<b^nk&&H)i5tH)J5rRK2Fkg\tjL>\kQF6FkjBr=\0ăU"&WHV5yeCMu_xua8ccgqltGEUxrjysuDTvtYCQ^UR-U.LuZhfOuj&56$/.we7#yuăU"Y%\qw_kL.6XUnxLh,*BK7u5wF-tgql(ll3V/PE4)C1A0u.Feoj(is67%Ee-5eo<ăU")h3w5F4]0y>We'K68W)6(kYl,))hd5,l;IS*P+-d#(KI4/aqpDVcDo>Tc6/L2z/ăU"OKfs]Z7bDc>;#1Zv$%3?56NKD5JVgfIrNmmoGav>=HD#(hZKFZch^KHnRpw;1wRăU"1\0iuN)CEtv%)6)V0mm)MXeEAAFR4hbd9p,L'S5M\6X:\MXkGwdWTM/6N>i'.W_ăU"KOiq*l2ft]rMQu]0;u%q$=1GRMXiE/#zC[ByucdsE,V^wS;wdtv.lAJjr%;aTY0ăU"t'[(8G-dIu'hhO4BrxsoDp%F5C)'I9W?GKB\((iRf7W+<ibjWu\S9Ww55&_4hwEăU"C,Db+z_<sYjYB+xfP[Knn3&s/MC)vZ#J+UGFd3$snTH#rs9X5]f0)_c4Id9gVDpăU"kv\_\XMo0%4YS6>P=964EX0rLYiW=JPW^O]KcE]K#hqc:u-&r:<8Z=>N:Hd67^năU"_r?.UjUDieZKiVOL[=1+*OiA6pNUhIRoRxEkOsKl(S6WepIp_PYnkN9#<EwF^XKăU"#onFX66:FMsiE^<^eG>+o,xmY7s(EjRCOG;';ObJOe<Xc'OUU;Z6Z_R-iD't3WuăU"+p1wP4En2h4ZD)2DcuwZP07I=f(A4bBGBqN+8bIy?DAfL7c><wsp&LEN4.'gO6NăU"ycrco/MSI'k?<$pLSd1D+nk53CRu[MZ>?k:>6$x1nCZ_Y+QGm[\k)rYieh:c$s,ăU"RAi>C<I(t'%ZIuiI:k:'v'HfcJr[N6g5jNgnIB=l,0w8%up()%9%%%I-%1T88R%ăU"H;>+6B#%%Im%%%2%#%%x8JGy>F24ABSM723db,T3]L]=L>5oxpd2oy0vj\d#+GbăU":K'2;-QEcBTq/1\g/SN9+_KbMEhDP4DVEmrHff#NoWDmmp]*txurpsD8tZEDvdLăU"lnnv(u8vfTjtXKx3<f^DrmnXuluD^XQwo>.tMrntMnNIK[/DducnpDxuslX7ZusăU"qcjo:Nwl^tnmpd:%qrHNrgtN7uPt>s<#a4H\x>Kui4t.wttJnc(.+Mjl_?xnTDNăU"87.7r+7xD?(8bdsdv^T0nDZ1^ojqxp.hw\r\V(wFtN4D<r:xHMQNYK?ui(dQxhfăU".OKv,uB^WTNQ\Kqu#jADnG)brs(\Xp#NB:ju5ROx\_Y:HBgpr'PpkpcFswc&KTSăU"OOtUz9vE#NTdTZ20C:PzMe%XJ%&1P7Dt<;if.zOvN:&Xb/1ifhC,t]L2)aiwwHwăU"ovdwlThdxq2,fXsWoNt.a<eWrq(DEqrrhp8tvfp<HHDth(Z.EMuep3.Fdua>'F4ăU"d\<t8MVG/Qzp2R/hONv,;ocLh68GfL2a3Vok_t3UYubJb=$?\hN+^wf^EdqbRwcăU"W/3^57'88']h4.MLspRlmXVoBsaMQS0_2S[c)xw6U_x;M(*S2Wh4AeV&$mulZI3ăU":t1g\#K\2y0PFN*PgnnvIXIO?D,7_8[tPH*M^]V;7#ah_GBkikILCVY0PvIb:C9ăU"4\n*$#gVugYis%XylbJA\Y[gkX4a#SLeCMT8L8hAcgP=nABMc*&=qc6L-^D(V9%ăU"5rAtv2a_$+7UwUNi]OiK/=cRvswW:ZNn6w]8IyPM,87Zo,90kvf5Ar]h?:cESoaăU"c_$\*kB-bWM^'X#J<oXM2W%#JXyRlbSI8^]Si,&j[bIs$)(qok$H/tqq8)lUbk8ăU">YTg'R#r,8Co-$0cr^(pTrNDVmZ)UTHV/is/2lk_*,:w#Aiwh.o?<xoc]?)6JGjăU"7dtlZ/-bxasCe>c.co&Le5Uf+1Kl[Q-3\p2#H$'&$uW32YWbs_DTaff1Xx7aJj)ăU"fKpNR_>f6IdrUh[Ak6GyP:#U%k<:m;(s,T5EiI&nvAYUm^v5ow^/M>a=^.M^V5HăU"kG)ub'lYr_W:4Gn2*:4_V]*/LD<8=qtIRsIpSZAZqpld/Ub9L[2e\\^q>JffYgfăU"-D,.d00pD0A20O&U;G]<[w.N&xkfO$7##h4Vl*JAS-3mpA-]2C?')ZSZqDq(lkWăU"a_Bo06DAUoS#S'ld(it/8MSAK$6T<n*x)_SRt/#a*OKfg-DJ5ggm&ThLbDYuW_aăU"o?I8U2OUg<6Fb;9FL[nVJe[$i/mNhx5uL\Nq$Q5DD:3pvyeFeGv1>mrC-f*0XMUăU"XS87=eGeY7O,<K&3op+,*gQF7o&f.\%Z67kjkS'U=LwFmx&X1uFI]2WULE^$'IeăU"dhSvx2#Y+4Lrx+ZqOv1*PW=JZXm3)W3]JZ-ChCysBs;^4J)1XE_>$]rp;XZW(G$ăU"&_oa6P^>D6Rv6/g[iYa#a4CCUR*=%-.$(['\\^jE=tC:F^,9T=12O\PsyFw6Zf:ăU"_E&hk&R=7B.$[G6>%D=C$<xE*3me#>>7?g/\M-tcjC]blrjYt1M=82b&T>l+af'ăU"dBS^D$dH/7O9Mh8fPJFeUZG<MBnIN9JKLYx:ddEnDb:cs$1XKr'Zl\)F],ME][[ăU"au(Wax%#E<#y3Ish35L4:XAsA4%joeSSD[8BxGEJm\5)CrblrXCQrV8beV)I\+tăU"hpcB%J6U]$n(Md+<)^o;],uj_o#NUlmkBeotUGAYjKlzSPRg?;I7Y8GDpD9Y(/>ăU"'RQF^mFC6jKCmt\_L5V_H<gZ9-pE5XcR)uEtTeK2iQ)lV=[C8s6F_$js^LZn0*ZăU"L%gT\W\'>,EIjX<5v0hEH8APb;j-o$h1*Fi$m=-npNUl1S-htfIW4SA5BWnmZ.7ăU"WBcZnJHW>1i>f6_X;'v>b+GW-9KTvfKn0BF/k=&rB6O&DYudk&L?S\O_IWv7^*CăU"WSIE'DiBT'$d/Yt4,]XqbZ)gluR8AIHu;gl,98'F^O96F5mY]57r1Mm&ph9Y*LzăU"JCLiB1b83Mj&7HR8(f5/#q*ToA7uPi83b('RY.^t%%2YIWMfoD1=MMrQVbKUA>uăU"euO:tB_1Ji*b[ThYJ41dH>W$X=D+'$MvsI&L8fac/A/cMz*oQAc2ot-:5UxQ\wHăU"2N[Vf:/#S=f94l4']oi'=3YbE'qjXV#KM=T;TJS5zhM\r*l=UPnJjO#vG%N&By)ăU"&SNE=d>WVd9d^4\S4UeL):Ki>b9X0iI9nj\c\=9rjPmhTr\ak87MrF.r-vI6DsdăU"5u$rapb-7gH+#XK*fMgOC-qqu<pLak<0\VCWNkR6y>BoM\71MM<Mg,\t[q$k8H-ăU"*VD=TfgZBWM70HG1r=GL:KHT04T#ouknmxV)'AW;XmrLE7_3ICW4\RJo0dnrlARăU"'^453HHfIU2IRjx;,2sA0QoF*H<t\Ya-2-iHe/fhca(?zAg(^F1/fnnn_[#p\GqăU"*2Ni01\%bXiB\v^=VmG1#Pq$<caXZTO^<2-YMh_0[&,4jfl7%MI?5>)[hgbTcXpăU"4ZtuG(Y_]nff1lX[YJjo&k_V,7pde2hVmIl0iq,_$TnC;c],+/Zp?4s([f*nV3NăU"*/f;1FvKG(SS14CWSo9d6XzKxXmr=;bj/^$V#]0#N'?:_f#S$aCya_0B$T,rf(căU"c(x%]LnZWTf6ll7[nGW2TD\<#)alg3qw#S#$JRz[TMBmAU)Qews.o(br*<5u(JDăU"icf$iquE.>iecp_p^O]nOJU<Zk&]N6.Y8jT9H&AfL?GDmk]=]71L,>%Hw[jTI^2ăU">PrJ8^hamn.V#Ip<gtpfO68^S*T<2R=Rr]$OLb8hMJ<XWSEY]_X(agM3:j2S/BjăU"JF42]j#7Z(,Gm7^ei>AGs>ItZ6.fCI$V)IeF#ElRlo.$(;7kM<-,D(0Ln%GkKWbăU"BG0ni<4fMueV*]/BqG;/$:b27t8OMuD5kPq_vV<wA?juLLIp/#,/r7mt_7J1S3răU"i0rl9V59N=RS[(h\\U'L-o3]-FH4ah=pG_o<Vz(+D2?4)5tajpFx?$+:Y45(==4ăU"p$9_on2\BJ/o;w%4U=<K#$e/QL5df=h\X$_CJH(o+2M?^)(]Ei-IMw(r=[Uiwp=ăU"6C\q7dk)YU4f9[AiOsngp_4>a2k*1sMa#t:E&5?s+r[.pK:/ADuPA#ia,VWP8LOăU"aY7*Q-YBm>85s\qKVUf<k#6BZh0F?6[sV[tE,,$X>d>Zwf&pJjw?L:JE_69YSZdăU"7DP.kuh[G8..hp1A:*$xO*+B9z0]mLW9J1Q6i99._P(C6;,<sY]Qf]4Y[Jp1?QaăU"XSb?wY8Z3J3W?hvBli7:2+at6?2\4\uA$YZOktA[1j7j_;[IH^LkJTgLD>?im6năU"$1YcWluU6xRJ307Rz3XgPKGyL:68YG(2r3r0/\#fd,tc*nvELv$2Y2t$h:$\f5LăU"5IRl0/tuz9T$=jGD#e2o'B?38YNe:'lOYK*3h7?.ZrL\K6A]pbNKQh<;nZKVT;#ăU"2QpsG<$dmC,O8v[bj_=VG5/ZS\oJ/rbq:%7n2_dmk##V/#*(g,\&au?/b\O0VK^ăU"TV2EanYzc'nY465>xb5=&6-*W*t3*Zq\=<>JI/aN_$O1$vh1jH]h0S?HZKWDI+FăU"DHF]Uown,ohY4^pW)d$#3['bKSfhUD[AxXEdZ'tm1zY$kr+01HpP]m?j>\m,4O?ăU"LdZ'BOSE=A=7Gw=jIb8S]%V+Y/JYm[SP][pMeB4ANl7FCMnckQgTP0mG]r7U7baăU":Q_p9Ha+B4L+ZNE6$k3nX_l\4:R-==.b]]]M%0+'CzH4/+IdQTGBfc>4<BBDZObăU"yYco*X-#<KrLOlG$$Lh.2,5gRTlRKsRo$j5DO.RcJ?aqOR3S2'.M>6O+kD9UiB*ăU".NzI<YA5CX(3jXDp=8.gsJ:3nA=[q8qt_mB+\7Yr86<t05evRf)ovMn3OB=FwanăU"s+xmLbq>dd,4JmlIuzf(C5XW+%0mi7#Fni1+pIqIuDHDMCP$97iIW3jig5zL.nYăU"jMp5$w'9DMLA\>.Y;P4C:;1,05g2PipUVhEK8Z)bZh%yFh*:tps<njH[-gj00,BăU"=VD9(^5_i)79J_+r6D'hG5C6Gn3Zj4Lgvo3*H9%eu&[)&Hg>z_Yh>CmY0tGW;;dăU";/3EwWjE>xx/9)zCBEAfd*JGJW2So[OLjl.d(vt=gIukd1%-f>zAYF)4IyNU_1OăU"r0m/1-xWC?JIUJ_Or0Cl1-x.W?#I4_H(*3D.U5ecnEYB?n-4.yNU5JcvS7mtV8^ăU"3;7Mp\P\cVd&c4l/*/KOc_09q4yF>N$i8[8Pt9v5eMpPH,brR*Rc,l*^/K;lJ*/ăU"K]H_09G12'C_YX'G9(SlL(#fH7lCs5E7p-qLBI1)_=*DCW*UfVM'2[PoVI)s+/UăU"E7YO&B;=-R?FaC[W(&^[VoeLe\mVM0bUSu^)r-Jtm>)F+17w2J*Sk&q;x)&ZQKFăU"#k)*t;E)1pTE+1pT5#>e/*LYR:0_:*O7QP/y/'2*S8+)c2AT^=GWP4'Tp^g+J1MăU"l13SuY-ICh03u5c,Ih/03uIE,Ih013u3WMYngjk7MvW1ugRN=v%Wu7=-C5&z\y?ăU"F0F4cKZzU_>A8c2GTn)T?8E.W;ScKz)>w1F:J>N##OhmHk*nUC75w_;AvsUSYc+ăU">P[81F^;9#S)Ih-v[LZJVA+;G4PWfqjqZoKEkdkw/f>fBGa5kMM_k*W&E/DB8YWăU"XtYrQc7WRSMe6LGCYlt#b3ypE:y7z%J$+e&db3x5pZy7Ax]jTnh%XY>cR*&XodjăU"M;]U,?D.r'^)1t6[KGtp';8W&4oWqJIg=*n52hqpf0/cIXIjhr;aACfJsev5wW^ăU"7a+9T(h2]Hw2-Nj%$q_P;wx[wYYM9O,)v[YuU(VNx$7U)4#5pux_6SY:h*F1$k$ăU"]ME/XWA#b;R]$K5^]BNW?AH'YK%]BxK%]B8q+#_KZ-[Et5H>hpEDYXfY%<R$<c+ăU".*fn_\6eDf:MTdYq=iAixTcZT;tE7Y_m16_7iJ,tR?r%:DkOj^/o<IW35<78:&eăU"$8D9]nQV6Lu7?]I=3Tk,G+bhAs</-R'Y9f>XfDo%U09c=21ex#hobo[GC0VE+mvăU"H&SmT9pc\5)9Q*Guk7iT^1S?a'']Fm*.sy7-AUJT?l';9[<JWL:JO+\w'p:e((+ăU"UX?ZZ*7g2hGNVuHp=JY+X*]WgHiLh=k&R#Z\sP8**P]L*YX:+AtSJZ3?*iHm]?văU":'fe?>v[*Q*'#OCHDc?vQ[*k,H\YM&_JtijWJ_G];;p=-t9G*tF)G$8;/VvL+ucăU".*6$QP'24nQ:+:YK9dDP/9%rMcX2uUju5Kip.67Nsqs9cD*%<*okbp=A41voK9YăU"yDfSs;GaF,t\tN1Pce#iw]Kgoq$kOlj$A5R/'w]:aCuB<2CuB>Heq$uk-ZHW^H<ăU"n6DDUdkfP]8gHV99GVsLe(;kSoRNMM\G2X4c8TgB]GEweXIM9\2Kh4cZK+TDCKpăU"4c]^gx]o'xe>N1yZ*%%enN9)Y*%eSHNMWA*%exLNcX*7%eRN3MY*%i9(&e&z-%MăU"EBQ_##0%MV2T1#0.%M\J4kuz7GcBgpB1j%coE7t1LgdoK:;9>R1'oc;+O>R'bo%ăU";CB>R'o<=eQ\d:uQs;nLi%%J]f4$NPDha4xp7OAwf,?tQKwt+tQKpw,tQoKW4oiăU"*tt2?o:K'ux$o:EK1DFOxt/8kPxBth/8PxPBt/8kPxBtlYlJt;wj[,0a6PvmG1năU"X(;PvW7,zX;8Pv'1GdW;PFv31D<VW9'b4EuK&\5QuoK1^TbW:'^TFu+<df=tG1uăU"u<f:=4Hu)i<f=FJIuU\<f=^KIuQ<If=4GgvU<q(xi2:<QU8HSn$w]r5Du2[Ap4iăU"kF]p\lhAt\lhA2#NX$v]98HHB/Nl-_Ww]5E]uB^3R'DcnR+bip<w8I(4Dcn+jbiăU"pw,8I(D*cn+bWipw8]I(Dc&.+bKXnvLo'Pnw'72jL;']w/2c^K;]#w72T9K;]wnăU"u=>Ka;]ws:,DK;0]wq2aJK;](wy2z9K;]w]+2*Ka;]w3=2.J;9]w;2a:J;]awC2ăU".9I;]w]K2zIa;]wS:2DI;9]w[2a:I;]awc2.9H;]wd?x%LWqAqnQ1oP81139DGgăU"?eu3oP81D39Dgf?euo)P8%WB04q2mExt9[Y+W..4q2E=xt9Y7+W>4nu&AU#cU2aăU"m1oDBaOK0>S6:bTl[,Ym4gj(jcsJ,#K#iIpQ(s&$t-aTwCzs<UCt+jIYphu&M$-ăU"gN0>zs<2U.+jp%hCDGY8u=m4ZF9<XbHPrwm5&fq$A]#D+Wf/V2NS/f2NSS^#w+năU"m[u2Ua>qBtHRi$uk3[h'B&2S9Edfh%]*vM$v5:<R&<cn*qK-EFww2dT;m[S*k>MăU"5#k7Lc/Nh<Uea]puO#CQ$o=.^X.u>[IRsMxUqq/*h-'a<a-q9.EFww24$91Ek(TăU"O9_8OmrFPcxYL9ljjh[.Ue]dDS8w&PIsMUdVK.^I#gr7^yuGnX8CH,pQ<n/kuM3ăU"bD7m[5SkBM'nj7LDcnhdCTa]pBuA/Kb$=.^9$uPPR+Gh^plBo^JGYj:1DKR)ux$ăU"o:S6miNJ=DKXs)x$oc:#miDN=DKn^)x$ooni8ceSL\TJR'LmWCVcoSL\JVl,t3săU"a3F.g4YCZ3=cnhJPSa7Gpu6ytC>7Tkrq7wePI)qE0J>y/25]4+y#E9nn'P<.E9năU"'cxLfqMFKiN^EX;$Fx7-$M-wN8EwPI)fq,Lq&+>sq$r8y_X?wuj]8w$wq]Kgqs$ăU"kOjH$k_DfuBHafq$Aboq$k1ZZH^8r<nDlJUdff^2NS((BNl3$N#8cen:y\FKMd6ăU"2w]ju9xi^Rm;.C8,pI;I8Tuw2-N.EN5Sk>M&s*nF_cNhj#Qm/pBu#o4[fw-^'XuăU"KPG%Btnb>Fd=#/SMM^Xu+uP7xUx'ZK9d;z#>r(MM2xELjuM=3^%EUNSkB5%LYjPăU"QkBw&6*nF)cnhR#Pm/pKuA9'[fw-^9$u7/&agMdGVCz_79gr^O9%QsX5CHp#y:IăU"T+uw8jYy_x]^A^sjEe2zx3iN9Dg9six4xt'zjOunSd,:x_HxMcwRkZxvBof:y9răU"d.4m/uFxDxLuJb9wtf_RaxlDN=DSO3iN=CDS3'AsNdV0[w_iFgrHz+P>GrKr$ccăU"\QI7C3X(,Np;8CX)pu9I8$uw3EnsEXPSkFw%H*nIGc8p%':%JNdc-l*7mxw3CjrăU"EX5SkFM%<*nIDcnkpbwZtr1bcV?iw]Kgoq$kOQj$ASZG9X$;V]8H;f]8H/^BNlSăU"m_w]:aFuBtHRi$ZkSjF]]=?qauxiaeOr_k&>M%*I.LcN+hrLm:]pu#\Ydf;=.^XăU"u%'/7s4MxU'1u_?gKr\cN_QS8C<8pg8^Ikuw.2jnEWZSk>HBcFC17cNh&tLm]GpăU"uYy7af;.$^VuZ%.7sM:dV;s__?grI^yDQnS8CH)ps8IekuMG/9^D82[cnhr^5-,ăU".HMM?M)OSZDcnh,7Km1mKr^c1IkP+siw&?dJs<Y.-:&V.9WDwLK7AuZE'L5)Z9xăU"2Lp5)9xE2L5)Z9x2Lp5)9xE2L5)6E,:DM*)j:RDQ&<PAfRt9.*Pch')j1Zo:K9_ăU"6iuuZixQIAQ8vK)C8*.I?NNcjO31wg9nY'p_NCX1J,)fnQkCX;tY'_>NCXJ5kwrăU"fUmsu,biJz$=tr4Y2rzQeHr4Yr_zQerK4YrznQer4(YrPecYvp#PnkJ80'BNl:căU"FuBYHTivkA1mZlH^0<knD4<YnD\U1dfv28NSH#3w+-[Zu25EBuB^o^xKMxheiXmăU"-;uXtaKK0l0HahmaTEdl83G6UQxEbX?m;uX7tKK0Hl(ah7mTEd$l3G6UUKk3sG6ăU")$#$tK)gScND)bX%W>b<nuT:orp.Aqs<DY.U$e-MM:giIpqR*8bTB[<qs1<Y.UDăU"$-MMf:iIZTl\JA5pu+3aKK0nIdV$-1MM1GSOq^GDCjTVTxr'LKEZR:CDBr#<f2'ăU">P,tg:aKPc_>iR.4\+8\ZioP:[FKUc%obb4ohP:)fX[>H+;BAf(QP=plc5m;'khăU"IW[F(Pq7OijP:kqohkSF>'hWIW\R_xp6>*#+x#fjo,1IKo^H0*S+8ZN#5-4<Io%ăU"5hkF>EIo+h$kF>Ie3(hCjp#nk5JRonr7Kgqs$kOjE$AeRnj]kIrjF]+ZZH^#r<năU"DLeUdf$(2NSTO#w+-4$w]Aax<EMgd$NQFEMd$bNQEMLd$N/X5C849Fdi77JwwRPăU":wPfUM$k>P(l^7nRuxK9uHSE]MdZx\W[->Oll^7YRI$*Nl^7RFuu/uj3u7x2Yx2ăU"5qY.>MnD5CHb4Fdi#7JwMUS:wPefM$kSB>rV72gjh3w0Ruiu_NQ[E9d]#D[-nKxăU"1$-:MMAdS;5cN0Ad;58YDk4m1grHb[u(wZhAj7azPcAsdYxUacAdYcxUcAsdYxUăU"acAdYcxUcAsdYxUacAdYcxUcAsdYxUacAdYcxUcAsdYxUacAdYcxUcA^d/iC<H4ăU"]DRUG^^+Wk4=5$kF>0r,[mlr4[ud(ksu8,kw&mHww'4ExO6LNN&_PN9Wc98PAdnăU"/iCX+:]DU=G^h/Bk4=$$kF*r^,[mr<bQu(fqxM(aEx%wq]Kgqs$kOj<$A]DQ9X$ăU"VG]8HfG]8H^CBNlm4_w]aP>qBHuRi$klSjF]T1Zi03w(_?fYFpuJ*f9OVVSk>(]ăU"q1Tm.H^X%/w(a1IcNPRm2i_=uw&E4ZIVIXvw&7M9OfS5Xk>j7x(5I1qcNP8i?YJăEND SUBăSUB VCăU"V0qu*N*RIq/-MM],z#C7oSD#ndqua[/V8JKmMnj<Apb8ctsqZU&m.owNu?C^dcIăU"Xk&B*,b0bhaMpd&e%dLzak8B*#b0bhaMgd&?[AbcIXEkB*VFcbhadMd&e%5OMn?ăU"j<Jts&qjw?+s8L;^zx$fon8n,N#cNu(whQpLdNxjBts3Qs82npYFx$Tono7u1oBăU"ot71oBro71olBo71ZoBo7?1o:.%v&sg-j:Fvj&lvqEYkM,ns7^hDYUsGCnjMNV&ăU"?5adSwXkJFJ27nlI^h=o:I_XnCXdMQpDa,c8P*+hdINDN&/U]OnwwB'91\7nwu/ăU"eU+M5>NbqxkM(cSrjF]leUdf0^2NO(ELUdf/V2NS/f2NSS^#w+nm[u2Ua>qBtHRăU"i$ZkSjF9]O;KXer0qSxh+2iTwNG*ayEuuw&Ea\yEuwZ&EaymEuw&6EayEsuw&E*ăU"ayEuuw&Ea\yEuw?&Ea/%5McXB3O-c&NP?_KZJGqiu*hJm:EIw(2,:)'C4:2)laBăU"njmj:aAyEuMi'/::N:ScnOPQ)CR8mu_(\;R]Ug^kB(**0sWJru+6:OQr5OkB*&*ăU"0[&HCH:;+RQ)Mpd&*.e/8ouY+>OQUrOknC:*pk8K^uTkGoxQ>)e]gh5nYI7OkHcăU"(:pzq)mLOg_zgbtgyS%*5Gox-r&1nedx6)>-R,tjJ7:j6qnYICj38sqaF-o:'.4ăU"gPP;;cnnz-&)R.xww=G-;KXqr4Y0&*jUc^hO/p;;;GhhQg3J-MN&6*./8W_6n0,ăU"::Kqlr4Y&^*jU^9hO/;k;;c8kzQ))m.xw';1::KXqrbY9&*qxPM(1:O&w]Kcgq$ăU"kZOj$ApaI9XD$V2NCSf2N^S^#w_+m[uf2a>qqBHRiu$kSjY&rv8uNo$\qVNubh>ăU"nMw$tvdx6w\FdYKrmvZ(7?xrPn7rEwVTN;3gx,%up&'%9%9%%%%-%%P*aRb(N>)ăU"',%%%%[1%%%/%%%%%%%%%%%E%*/P%%I%%%8)4FVZLS1<?%up&'%9%9%%%%-%+U8ăU"oRFP<Rl'J(%%'Oi%%%0%%%%%%%%%%%E%</PT%%%%mxM?74AJ4S1<&?up&%'9%9%ăU"%%%-%%9%p:RdMl*kl%%%%[1%%%1%%%%%%%%%%%Ej%/PN%)%%n2=2;W(W?ZS21<?ăU"u%p&'9%%9%%#%-%IB8oRwo4I(C%%%%[%1%%1%%%%%%%%%%[%E%/)Pk*%I%n=2A;ăU"YZ?IUS1<&?up&%'9%9%%%%-:%48o(R]]p*o$%%%%[1%%%1%%%%%%%%%%%EO%/P_ăU"%+%%n2=2;[(\?ZS21<?u%p&'9%%9%%%%-%-AofR9c-#Lu%&%%[%U%%/%%%%%%%%ăU"%%[%E%/&Pp,%I%t191g>GS21<?u%p&'9%%9%%[%-%jAybRL[ZmP/%&%%[%U%%0%ăU"%%%%%%%%%[%E%/)P>.%I%t19Lh>=4LS1<?%up&'%9%9%%%%-%)6lfRLA3Js'o&%ăU"%%[U%%%/%%%%%%%%%%%E%*/Ps0#%%t1J9hH;LS1<?%up&'%9%9%%%%-%'L/aRDMăU",u,'0&%%%[U%%%/%%%%%%%%%%%E%3/P;2#%%t1J9i0CLS1<?%up&'%9%9%%%%-%ăU");ogR'k#5w'7&%%%[U%%%0%%%%%%%%%%%E%*/Pp4#%%t1J9q8=J4S1<&?up&%'9ăU"%9%%%%-+%%rb4Rorr)W?&%%%[U%%%0%%%%%%%%%%%E4%/PW%6%%tD19u>D;HS1)ăU"<?up%&'9%%9%%%d-%d7#fRz'%4%W'%%%[U%%%/%%%%%%%%%%%RE%/P'D7%%1t19ăU"uDHAS1)<?up%&'9%%9%%%%-%])maRuC6bOY%%%%[1%%%/%%%%%%%%%%%RE%/P%JăU":%%M%84F#UUS1)<?up%&'9%%9%%%%-%j).aRcU5Xar%%%%[1%%%/%%%%%%%%%%%ăU"RE%/P'P:%%M%84F#UVS1)<?up%&'9%%9%%%%-%t)IaRAf<o3G%%%%[1%%%/%%%%ăU"%%%%%%%RE%/P&q;%%M%84F#UWS1)<?up%&'9%%9%%%.-%P)RaRl;5Eiy%%%%[1%ăU"%%/%%%%%%%%%%%RE%/P&g<%%M%84F#UXS1)<?up%&'9%%9%%%.-%^)%aR$D0&]\ăU"%%%%[1%%%/%%%%%%%%%%%RE%/P&9=%%M%84F#UYS1)<?up%&'9%%9%%%.-%l).aăU"RmG;u(/%%%%[1%%%/%%%%%%%%%%%RE%/P%D>%%M%84F#UZS1)<?up%&'9%%9%%%ăU"7-%I)[aR#u8$jE%%%%[1%%%/%%%%%%%%%%%RE%/P'v>%%M%84F#U[S1)<?up%&'ăU"9%%9%%%7-%S)7aRd:=;c+%%%%[1%%%/%%%%%%%%%%%RE%/P'j?%%M%84F#U\S1)ăU"<?up%&'9%%9%%%7-%b)[aRd>3,Y\%%%%[1%%%/%%%%%%%%%%%RE%/P'D#%%M%84ăU"F#U]S1)<?up%&'9%%9%%%%-%').aRX>7$?+%%%%[1%%%/%%%%%%%%%%%RE%/P&OăU"A%%M%84F#U^S1)<?up%&'9%%9%%%%-%/)%aRqo?O(D%%%%[1%%%/%%%%%%%%%%%ăU"RE%/P&)B%%M%84F#VUS1)<?up%&'9%%9%%%%-%5)maR'<590y%%%%[1%%%/%%%%ăU"%%%%%%%RE%/P%rC%%M%84F#VVS1)<?up%&'9%%9%%%%-%**IaRH[3/_a%%%%[1%ăU"%%/%%%%%%%%%%%RE%/P%DD%%M%84F#VWS1)<?up%&'9%%9%%%%-%6*%aR\49oa(ăU"%%%%[1%%%/%%%%%%%%%%%RE%/P'RD%%M%84F#VXS1)<?up%&'9%%9%%%%-%B*maăU"RsP=h_Y%%%%[1%%%/%%%%%%%%%%%RE%/P')E%%M%84F#VYS1)<?up%&'9%%9%%%ăU"R-%p5e8RVU(ybr;d%%M[%'%1%%%%%%%%%%%RE%/P'1F%%#mhx?M;0B7LS1<?%upăU"&'%9%9%%%%-%%^*aRff2f2&m*%%([;%%%0%%%%%%%%%%%E%*/PT]I%%%8D4FhCJăU"AS1<&?up&%'9%9%%%%-F%-11LR.ym)=_-%(%9N%%%1%%%%%%%%%&%Ej%/Po%b%%ăU"xM0<?;&4UVS2723u%p&'9%%9%%#%-%v((2RUT,MxU#9%%S&+%%3%%%%%%%%%&[%ăU"E%/,P)k%I%xC>D=4m42=64S2723u%p&'9%%9%%%%-%h*02RSB#EGc[&%%<%+%%/ăU"%%%%%%%%%&[%E%/2P1*%I%g;3&6UVS272>u%p&'9%%9%%[%-%R^)7RYZXQL'%'%ăU"%L%0%%.%%%%%%%%%&[%E%//PC,%I%g;3A6fS7)2>up%&'9%%9%%%.-%iuA8RHw,ăU"RUL'%%%]/%%%.%%%%%%%%%&%RE%/P)l.%%Lg;36IgS72&>up&%'9%9%%%%-C%hxăU"8gRu$-,Rt&%+%\-%%%.%%%%%%%%%&%Ej%/Pd&0%%g2;36hLS72>%up&'%9%9%%%ăU"%-%/[z8RbG3Nl&J&%%%L+%%%.%%%%%%%%%&%E%E/P23#%%g;)36iS272>u%p&'9ăU"%%9%%#%-%k_(8Rs(R.:6#+%%U%?%%3%%%%%%%%%&[%E%/5P(4%I%h;>D2:y>2F4ăU"AS272>u%p&'9%%9%%%%-%)*27RQ,o2mA['%%]%-%%,%%%%%%%%%&[%E%/5Pe:%IăU"%r0=LS72>%up&'%9%9%%%%-%1nN1RBZ5\='_&%%%w-%%%/%%%%%%%%%&%E%E/PRăU"=#%%xC2>=4VLS72>%up&'%9%9%%%%-%2^38R6cM8s&c)%%'5:%%%.%%%%%%%%%&ăU"%E%E/P$?%%%xz&%UVS272>u%p&'9%%9%%[%-%P_l4Rv+7t:=[&%%l%(%%1%%%%%ăU"%%%%&[%E%/5PoC%I%y4BJChD1J4S72&>up&%'9%9%%%%-C%_-1dR&4G-4t(%%%%ăU"9%%%/%%%%%%%%%&%E4%/P]AE%%&20;;UIVS72&>up&%'9%9%%%%-#%ve8mRLdH&ăU"oe'%%%_/%%%.%%%%%%%%%&%EO%/P*AI%%&M><0=LS72>%up&'%9%9%%%%-%1-J8ăU"RskY%5%G'%%%>)%%%/%%%%%%%%%&%E%W/P;K%%%mh%mUUVLSCGC%up&'%9%9%%%ăU"%-%.VW4R:0<MH'k&%%'R(%%%/%%%%%%%%%&%E%E/P1N%%%mh%mUUWLSCGC%up&'ăU"%9%9%%%%-%3Qb5RA<y?6%-(%%'d+%%%/%%%%%%%%%&%E%E/PKP%%%mh%mUUXLSCăU"GC%up&'%9%9%%%%-%4$13Re\,HV'K&%%&O(%%%/%%%%%%%%%&%E%N/P%S%%%mh%ăU"mUUYLSCGC%up&'%9%9%%%%-%/HW4R.iqgS%h'%%'I)%%%/%%%%%%%%%&%E%E/PuăU"U%%%mh%mUUZLSCGC%up&'%9%9%%%%-%/7W4R,Xr)]'A'%%%\+%%%/%%%%%%%%%&ăU"%E%W/P4W%%%mh%mUU[LSCGC%up&'%9%9%%%%-%6M33R<N]V_&?'%%'v)%%%/%%%ăU"%%%%%%&%E%N/PzZ%%%mh%mUU\LSCGC%up&'%9%9%%%%-%/,)4R*jS-e'Q&%%'-(ăU"%%%/%%%%%%%%%&%E%E/Ph]%%%mh%mUU]LSCGC%up&'%9%9%%%%-%/F)4R-O5mZ'ăU"<&%%'U(%%%/%%%%%%%%%&%E%E/Ph_%%%mh%mUU^LSCGC%up&'%9%9%%%%-%5Z73ăU"RP-FZ:%Q'%%&[)%%%/%%%%%%%%%&%E%E/PSa%%%mh%mUVULSCGC%up&'%9%9%%%ăU"%-%4[83R8]$h.%%&%%'J&%%%/%%%%%%%%%&%E%N/PQc%%%mh%mUVVLSCGC%up&'ăU"%9%9%%%%-%.W&4RUo/k^%+'%%%y*%%%/%%%%%%%%%&%E%N/Pyd%%%mh%mUVWLSCăU"GC%up&'%9%9%%%%-%.Z(4RGw4pq&='%%'v)%%%/%%%%%%%%%&%E%W/PQf%%%mh%ăU"mUVXLSCGC%up&'%9%9%%%%-%1\h4R5^4DR%\'%%&w)%%%/%%%%%%%%%&%E%N/P=ăU"i%%%mh%mUVYLSCGC%up&'%9%9%%%%-%3Sh4R6=p?r&=&%%'w'%%%/%%%%%%%%%&ăU"%E%W/PFk%%%mh%mUVZLSCGC%up&'%9%9%%%%-%3Yi4R*&uD]&_&%%'l'%%%/%%%ăU"%%%%%%&%E%N/P2m%%%mh%mUV[LSCGC%up&'%9%9%%%%-%2fk4R4lZ[N&%'%%'h)ăU"%%%/%%%%%%%%%&%E%E/P#o%%%mh%mUV\LSCGC%up&'%9%9%%%%-%2k=8R-S#b0'ăU"=%%%%w&%%%/%%%%%%%%%&%E%N/Phq%%%mh%mUV]LSCGC%up&'%9%9%%%%-%2Ic5ăU"RaTm<p&b.%%%g#%%%/%%%%%%%%%&%E%N/PTr%%%mh%mUV^LSCGC%up&'%9%9%%%ăU"%-%4h56R)4/,u'S*%%%n3%%%/%%%%%%%%%&%E%$/Pe&%%%mh%mUVfLSCGC%up&'ăU"%9%9%%%%-%4Y74R'6$ie%q&%%&['%%%/%%%%%%%%%&%E%$/Pg,%%%mh%mUWULSCăU"GC%up&'%9%9%%%%-%1XF8R1$VR0%w*%%'I.%%%/%%%%%%%%%&%E%r/P/-%%%mh%ăU"mffxLSCGC%up&'%9%9%%%%-%32K8R0dER]%qy%%-CP&%%2%%%%%%%%%&%E%$/PUăU"3#%%mDM<1;4%hfiS210Bu%p&'9%%9%%[%-%I_L8Rv,fv:k\V%%N&t&%2%%%%%%%ăU"%%&[%E%/)Pv3&I%mD<21;4h#fiSC):=up%&'9%%9%%%I-%1T88R%H;>+6B#%%ImăU"%%%2%%%%%%%%%&%RE%/P(=e&%1x8GyM>F4AJBS72&3up*%+%%%%%i%i+%r3%7%%ăU"-&%%%%ăEND SUBăV2ăV3ăV4ăV5ăV6ăV7ăV8ăV9ăVAăVBăVCăCLOSE:IF S=163AND B&=115471THEN?" :) Ok!"ELSE?" :( Bad!ăSUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32ăIF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1ăS=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\115471,219);:END SUBă'>>> Page 1 of HUMBLCAD.ZIP ends here. Last page. TCHK:163ăMario LaRosa                   Mode 13 Page Flipping          ESmemberNEMESIS@aol.com        12-15-02 (  :  )       Qbasic,QB,PDS          75   2304     pageflip.bas' Qpage v1.1, two pure QB, (SCREEN 13) page flipping routines.ă'ă' Brought to you by... MARIO SOFT.ă'ă' (C)opyright 2000ă'ă' Contact me at ESmemberNEMESIS@aol.com </ym/Compose?To=ESmemberNEMESIS@aol.com&YY=20738&order=down&sort=date&pos=0&view=a&head=b>ă' If you have any questions or comments concerning these routines.ă'ă' THIS PROGRAM MAY BE DISTRIBUTED FREELY AS PUBLIC DOMAIN SOFTWAREă' AS LONG AS ANY PART OF THIS FILE IS NOT ALTERED IN ANY WAY.ă' IF YOU DO WISH TO USE THESE ROUTINES IN YOUR OWN PROGRAMSă' THEN PLEASE GIVE CREDIT TO THE AUTHOR... Mario LaRosa.ă'ă'''ă'$DYNAMIC                     'Make all arrays dynamic.ă'ăDEFINT A-Z                    'Default all variables as integers.ă'ăCONST VIDEO = &HA000          'Address to the VIDEO screen.ă'ăDIM SHARED PAGE(0)            'Create the PAGE array.ă'ăSCREEN 13                     'Activate the VIDEO screen.ă'ăREDIM PAGE(0 TO 31999)        'Resize the PAGE array to 64K.ă'ăcolour = 1                    'Fill the PAGE array with blue pixels.ăFOR y = 0 TO 199ă DEF SEG = VARSEG(PAGE(0)) + (y * 20)ă FOR x = 0 TO 319ă  POKE x, coloură NEXTăNEXTă'ă'                             '*** Flipping method 1 using BLOAD/BSAVE ă***ă'ăDEF SEG = VARSEG(PAGE(0))     'Copy the PAGE array to the VIDEO ăaddress.ăBSAVE "page.tmp", 0, 64000    '(Works best if a disk-cache is active.)ăDEF SEG = VIDEOăBLOAD "page.tmp", 0ă'ă'ă'ăSLEEP                         'Wait for a user keypress.ă'ăREDIM PAGE(0 TO 32001)        'Resize the PAGE array to 64K + 4bytes.ă'ăPAGE(0) = 320 * 8             'Set the 4byte GET/PUT header for ă320X200.ăPAGE(1) = 200ă'ăcolour = 2                    'Fill the PAGE array with green pixels.ăFOR y = 0 TO 199ă DEF SEG = VARSEG(PAGE(0)) + (y * 20)ă FOR x = (0 + 4) TO (319 + 4) 'Add 4bytes to point above the GET/PUT ăheader.ă  POKE x, coloură NEXTăNEXTă'ă'                             '*** Flipping method 2 using PUT ***ă'ăPUT (0, 0), PAGE, PSET        'Copy the PAGE array to the VIDEO ăaddress.ă'                             '(This is the more commonly used method.)ă'ă'ăSLEEP                         'Wait for a user keypress.ă'ăKILL "page.tmp"               'Erase the temporary PAGE array file.ă'ăSYSTEM                        'End the program.ă