From f00bd7658938104367111087ebd658bb16f28a32 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Thu, 12 Oct 2023 23:00:42 -0400 Subject: [PATCH] improve statusbar --- dialer.com | Bin 7321 -> 7664 bytes dialer.jrt | 43 ++++++++++++++++++++++++++++++++++--------- keys.jrt | 10 ++++++++++ text.jrt | 5 +++-- zipoff.com | Bin 20215 -> 20247 bytes zipstub.seg | Bin 4416 -> 4443 bytes 6 files changed, 47 insertions(+), 11 deletions(-) diff --git a/dialer.com b/dialer.com index 1eb57b186c59469059e08bf0f1e7b374009d53b1..1fff78eb81592abbfa9318a26fa6178166a01997 100755 GIT binary patch delta 3483 zcmZ8jYj6|S72b2#vZd9oq}2<8C0P!In1_k2My3$+5a6VVF^?F=Mv8~Q!C~CtVJsY% zX+cey;;3%z&TJjUWfCi75+z}ny5N!)h7ukd!w~AYophR^9*0MP{s;sZOev-6Id?5c z`(y7t_dCyf?zv}g@0_on?k^QB8`PcfdSEBCAFL1?^2B)%)U<+%*_ydBztc1#w!mM_ z1I}~a75kGXvrk+$mw%k2zcvrRId7XKTQR~oGh1<m%*tue^c^|EmpBY#bLm3W~00<6gU_mUp=3H?yUzRxfxHPcvf022RErFoW z2n`UHY|JKwr9+}5rNx`<0IZeUX#2WD}fbW`Y^#ep2BHqG} ze5T<6dMeUHY4Ymp7|{+1*h%q9L7>=sJS7kwy`7?*j8%j}R| zl@?g9NPg>=QX`bHSFI`S2hx*?W~m0Prho}aHUzY~B}VWgyA9Sbt6@D>#L%jWHt%zK zM4XrxXIr`Kc0Sgye&1nY@(B)8ra6ch>?n zTDjHr^g6kI_{)mUKmg!mF0XAe0x~RKT#>|yr|>m`0tOT?pgmf`>YaE%uIHTUY7`DY z?l{h9`>m7UvUb`UNL0&lnf4Ziwes$9s+!LYV9dlRV`D&4LvR2h%5J#_b3+voRt7m< ztYCE@-2ghQQA(94MZge4f2K_d+FFb)7X zhV555-H+zK?P!GO>=09)bkHeGcHFjOf~Ps!6&;+89xNoMgNm+<+sHsImltBnN{6a^ zI7@uTF6gkxkrU{)%|?2iqx^i=$=L9v;Y(Aq?QH6JkNUp$qJ3Fiuj3UIX#~35y^ghx z8a5)y|kEgm&eYBHOHKsJFX-S8eO3`?%DaaNT zs<$0yd30$!(rlL22XUR$HaR9F-d2A%`qW{k5W9QZ_%R$%FR%O7zpt$0ZGmPR&W)!6*&R1tq2wJE{DyqCLF= zR419Ba8FpmSgM6Qb=V6~CQgxEZ85kIqH-|%$ddn>~hxeVkk+^EPmb{Qd;FZb8AZ05_RC#uQ8!=zjj) zxz%~hS%bDF^YtC)He;QDGT|9?H^D{BIRc%AL6>3UKQlK8Bf7V zB?T#L>8H`DfdtSog-Ch6ijrbe5~f9fdqv8h*$Hml#f${ zK}5be1~^hGTtGY|+{Dq&=}Jyl3JGG&1aP;&lILm{FJHE-YVoS7B|->(?k?dU{V2LD zd)>wZAPPCE+mvMV5Hs>$hH(eRX$cEu47V*|5y^`!Ulp(`?gRQxxlT$kYIb-EX0>o2C@Z77n{_xl<6q zIRhI!KMYpYE)KrDr8T&zX>*%EA}f$Zkz_#gG(x8-E#~7leWoWLUy}5iq-($3(*hpZ z@OIryf7cH@gzxcOG;1v`cVfgt_wUc12Hep^;dQePCp|QGru}HN5d!(fO!e&Ys>)roQHSR&dX1=p-pHyYtAwm)2(q3Vo_6N~SE;LzSCPlt zj(6)cmhiO6d=J#izUSq=YzXGy8!g0NVC%hc>eI`;gYcC$)9tsA+)a|xUT{x+<^ulT zKl8?vPrXBs#vaYvs}8^S>Tn6+(HyL!6m{M&fNo?jTFZ6F66o_C{Db>_)8juzg(E%{ z@1a@PiJ2S`X-7J|@(^0F&7E|8zV=CdakLVu%V~VQizCLWChfvlm&|!4@sn7jLScbvw z@>~2mbof*Feh%dSG$HD+$v=oWsq>GT_Td>-`zbz#0wTI3^`ri2xT5|r0af>LzJi5T zgoUP=TTL@??(^TkBcZ#q&ol*jvk=R`fBdUAw>E8Pj&EyfZCW3ErKvUEyk#?(_0M2e-T&+`gr)HMp^PQ}Z@d-`3i^ZeuZO8?NZIDFg~v z8n63aNq-z5U+ze(Za@d-sp8|M2m?`J!W`+6CVz?ShRTREez?{a{hm%nXEuYFm$WOxz8Z z?ET)6lBS=f2PYr-qkZ9rDC?qqB`naJ?BO-*9X+-+j`ZM1S0lgg{_Onq$iE^(X+%u^ ziw@+^Sj}ydka9fZAdfwc{_2Hi5+k!r(vKYdOZ(Wp=}+}R`#kM}qkmb;$SiJo1HCLf z)4#k0IUFbh5dP`tf1)L^VPsa?cGJPpBB?+6zsORUEW?!~p%rFGE_TZ?LmCkO?#PNa z*>PAR4Z}2PHzXmC+RsFjV@0F_gi0J3J{Ejz_}KB0V4KuZHMxifOGz#9s&o;THOa-_ z-_?KOcw*VG6#w&YCr6|bj+H@E2|Y_8+yy0a63$Aakd(eDUBmY$(wKM&A4(z%;~3ha zhopzsej;VXqy%hGJS$a+$06#xDy5hK^PI%IuLX7qnaji=ayCzKp5mOOv{jnzJS#D$ zAtfQgwmQG9ACwksXp~~;H3LjYvr(Yg=VA>$h;1yZF0?VKL?SM>nc^LNdT$p?LLESm*&P zA#>7-6;)~E^4h&XPzX2_GNHY4oYNW_IIYlu42Sgrr>gzjG-_yw#d_)mWQCx>I%BG; zdWxo8rt5{eIvy$s35dvXnd*>$T6xEm6yfhy)D<)lmIsnY;W*4ycF4V0N7_y^lwra( zuqn8=aMB6}EK|Hng41i*Jj7QkR7wMym8@8a#VG>;cV`avDzr!A%9yxACi_k$E+_ar zfxB}z^z!fkWk}FfONX?X6g?ySV;GUBj4=p+SU`iO`G1Ay-eMt5)#3 zXxkO?MIE}VmD8ND8yTdnm5C+ZXL0S@JQWRt9mP%g7WZ$!As(<$fp=Yr*U!K4;iNvO zOoN1eRe6l%UApR8qP>q9MBU^+3t3koeh!)+z-}X+1j@CYqj5RwqRnt0-**omzlV?G z8px&(bvZbKV_g0#BKxpBWKZ&L4V`G%>LjdZIXKPT>{BQa)A@QiN?x$MTRMy$+wJuK!B1xd*-{qgazwW6) zoH%8$$5IB>0$A+A7ft0owu_!tY ziRjcJyWq)+DMpK0tnx+Gx?xlUf|p@y=cxDB;Z>u`)9QC51EMM=_XXZFlQRYNvZs$H zo5hAsPSX4k&UdPP0~BmI23!7Vn=DSW@sO{nzqtO`39ry{=a%`g$*7;U&Hi#qOG^f( zwX3xEs?|KiSPGAK;Yc4**Rx?5hF+dP9@^Dv)s)vd+SOLT+0@~`f{B}&Q%Y2^dFfc3 zLw^S3QNu3=$T=#J9pJUa8v;2Q5FpKBUUtnf-9o{wQVsjqf!BuKtj^J*-YnK+n|D3$ zD}_pc4UzrcbBqqjNj_4L174aRV*yL8H^s7I9s-t?T%yW7k6OR*IWDpY7g=a@2IdKL zZhzxl=RNF=p|6Me{EByjImeSM)ML0Wx$<#=8f3~5{CFImN~_uvRXo1DJm59J;v?r7 zct*)U2HSNSgPKSP15=7r=W{5z`Ml`fT;hpUz+zSbzqVAsEwKXhm%T3S9Cy&@%VRl{ z-2GYyIXQ`$??;rbS(8Ki<*2XGNAuObb-q`81{~xTq#5#=Si-l7Yx<^Ay@~0Li!N43 zbf_o;X?J1n)zH-9r;wd4Dz{%qv3+X0YQSH7X1_BK5_bABFrSYNd^C}e@B_pf_&A@B zbA#WhS9 zbh`oFev*D=HQ=y+7>I8dI>a}v3Gt$Z8gbp);iq@VX1=L;m;HJ9m*}G!7j>FzbMPmB zO>=FtFyyZrg&}{xf1`J{&+8L-7FTdat*ut=oK1&$K`}qfqY%QMnrZx(<*UVUx~2TZ z!|<{GTyd#`cmu@KzgIlB{uF-XdW)mV_lrj%i#HU%Z4BrtHsC#k4;NqqS#%No4ru#r zLT`l|q6{_%KKOU>d)Bf9o{LfIlW6u@ATQIJyF?rQy3)D~*cqS|pD5lO&<6ugY3Bo3 z@nj&y2KX-z%``R=ILXcj%-^sKGzofuoV>%*tQUWkL}Ao=FmNz%0Ie!qQDs{Y3krIG zLC45hiv;b(SXIlVXVwU!Ryvz z*r}2r=A9ke+uCQLwHb< Qu3S_ViSUTsfe4!Y7i@=|n*aa+ diff --git a/dialer.jrt b/dialer.jrt index d63cbd8..1912a6c 100755 --- a/dialer.jrt +++ b/dialer.jrt @@ -54,10 +54,34 @@ array dtmf-row 697 freq>div , 770 freq>div , 852 freq>div , 941 freq>div , 300 fullduplex ; ( statusbar words ) -var connected-time -var connected-site +s" DISCONNECTED" const DISCONNECTED +DISCONNECTED var, status +var status-timer +: start-status-timer ticks status-timer ! ; +: stop-status-timer 0 status-timer ! ; + +: space-to ( x -- ) textx - sp draw-hrepeat ; +: .digit ( v -- ) [ key 0 lit ] + draw-char ; +: .2digit ( v -- ) 10 /mod swap 10 % .digit .digit ; +: .: [ key : lit ] draw-char ; +: draw-status-timer + status-timer @ dup if ticks swap - 18 / 60 /mod swap 60 /mod swap + .2digit .: .2digit .: .2digit else drop then ; + +: draw-status + magenta bg! white fg! 0 0 textxy! + 1 space-to status @ draw-text + 55 space-to draw-status-timer + 65 space-to s" | ESC for menu" draw-text + 80 space-to ; + +: init-statusbar + :| begin textpos @ textpen @ draw-status textpen ! textpos ! suspend again |; + spawn-task drop ; ( terminal words ) +: sleep-key begin key-waiting? not while suspend repeat wait-key ; + : fixcursor texty 24 - dup 0 > if times each 1 24 scrollup next 24 texty! else drop then texty 8 << textx | movecursor ; @@ -74,9 +98,7 @@ array rick-welcome-rle { : lines-of pagew 2* * take ; s" rickclub.bin" open filebytes 18 lines-of encode-rle } -: xmit-screen ( rle -- ) 0 0 textxy! rle-decode each - i 8 >> textpen ! i emit - next ; +: xmit-screen ( rle -- ) rle-decode each i 8 >> textpen ! i emit next ; : rick-welcome rick-welcome-rle xmit-screen ; @@ -155,17 +177,20 @@ var curr-logobit logobit-count 3 * times each draw-logo 10 sleep-csec nextlogo next ; : splash - blue bg! lgray fg! 32 fill-page lcyan fg! animate-logo + blue bg! lgray fg! sp fill-page lcyan fg! animate-logo nl nl 15 textx! lblue bg! lred fg! s" Unregistered version" xmit blue bg! lcyan fg! s" - you have used 13246 / 30" xmit nl 15 textx! s" days of your limited trial!" xmit nl nl 200 sleep-csec lgray fg! ; : login black bg! white fg! - begin wait-key nl key>scan %esc != while s" LOGON PLEASE: " xmit repeat ; + begin sleep-key nl key>scan %esc != while s" LOGON PLEASE: " xmit repeat ; -: go splash 0 15 textxy! - s" 5551212" connect s" CONNECT 57600" xmit nl rick-welcome login ; +: go init-statusbar splash 0 15 textxy! + s" 5551212" connect + s" CONNECTED AT 57600 BAUD" status ! start-status-timer + s" CONNECT 57600" xmit nl + rick-welcome login ; ' go ' main redefine diff --git a/keys.jrt b/keys.jrt index 615b01b..1c40fcf 100755 --- a/keys.jrt +++ b/keys.jrt @@ -10,6 +10,16 @@ PUSH AX NEXT +:asm key-waiting? ( -- f ) + MOV AH 1 # + INT 0x16 # + JNZ 0 @> + PUSH FALSE + NEXT +0 <: + PUSH TRUE + NEXT + : key>scan 8 >> ; : key>ch 0xff & ; : scanup 0x80 | ; diff --git a/text.jrt b/text.jrt index 722f675..3159b53 100755 --- a/text.jrt +++ b/text.jrt @@ -196,9 +196,10 @@ var boxstyle MOV DS BX NEXT +32 const sp + : scrollup ( y ybottom -- ) >r r@ over - pagew * swap pagew 2* * textpage @ + dup pagew 2* + X_Drp*tPZWu2wQ>8AC%ytXC_0>y=jC zUDOYX=W0b>0^{m7?`1yq{E-mz$67i3r%TAhhWZK zNsaq&zwbQnIrpBkSLg8KPvTX7z0#`n&273W{y;pM{G#~y_H(Je^?%tuEv=BGo?a;@ zZr(WkvsF(pu8yIF7nwJLc+bLY`!?*tLks6V8DH+t~eu;Dv?q z@^X78m%g4kmw7cKW!f{xGOwgAr@Axy(i@~~>J917nR4d(f`8+C#N{7aSlsb0Q*j}y zgtpyW^O#hfuky?&WINfp(it(pLP$WI4604)W;CUT0( zbj3DxfVYrW2fP5C!vNk+&Qn}5n?#gcqMmhGr!o7;RcdXOWJLuyK$sXoU5Z??bVC^j zCPCU_kW_vHd<$fC3{3OoA`L8&9*V|{0<|0_y%d#3o%HV@=@`whm;=$BRUNktfY-=jXkuP5%0*f-mR%EPP@Y~HKmm3$=;oVoR|D%+ddu)R z!#)#rp-%ew5W5nd2AnmbSn6m6n1k#@ly{gh!>ZHhzC>XDdoM4p`4nVrl`UuwE$R{W zY%DfyQLeF z*5w=2d+f{L$*GAtYH9b-zJI{}CqW!8q7^mT>uc5P@s4%Z+1uiNR4(dTalGkrxj&ZR z;C`x;4g*I7^Hj-K z{D`N`YUdv6`xrHkzm;fnolO2OS;H%m9;Dd@y%n9@`a$A=W-Yq7Y|`sAzOJ#B%M5Z& z+*FEiZ{EsOhm%`Y?i^&0R)RMK&O|Od=yOyXM3%Fw&m}jme2yyROednnoo*;KhzGde zRPkV6B`CO1lwQq4+=#%SD7|}tPH@NJUYbpKhARjyPK+phYZtg*C0%F-HM`Co0<#?r zGcS(?j3^)GJ9l7o7ku5s?}0l{?`lJ-lmEWJqM`#UjdUXX&jl}3L^bR4D8_G2GAP#9 zpUi@bJ^X9%n(JsDf6e`YFyvY#?)Ef2RT&n;JZ^KfidFB~7EL&S ztKJ%JAM|0xD8gPTtB$zfs(McfyS=}4Z=iB>lLtGw!IKuxwj2@Y5cp77;%^TxcHG~g z2{jz6P6%z4y0O?%!>*6}o)c^MJXki|&51{ZL!fnBBnWnxqUyRz-=M|6BzjS_P63|c z7k4sv1jgRDli(G|e>b?=D=cNFAPXAc4;8Vc;SOw{;xB=(qG6B0-UR#;{_`mqumE)W z?oRQKLM3gjpwa>J7Jn4lMQ=VuI4}&8xjS!|bl*k-zfZUk0Qi;yds80z-3>qsyq;`9 zC1p%Dsn!0#&DUTfWa}dYh*N>5Q$CcvF=B$jnm|w@mcH%wzTLOe4h{zO>I>rMDuY3> zHqN^oDQ1?M%L{&~=-*MeVxs@w87Z5$KgQ^fgs8kx48=4}bxnu0~z zXv1*mjO0TwsU}s$?gfKv=|y?GM|-VRPCf=v9`5|0~u1Dd<9@3p^6eW?+=+ zs#6i$RsW*BgwIVbpKcx&2& xMhs^dUJB2GsA$yJ#Fg++7u(xn0si$ z&R?xLZnxY@&;8E6=)-+;KU=XGTP~&NK3EyBlYjY7wz9sHt<|}Ie)VZ=_4wxJO0A_8 zZCCjZ(`VDC)4}v-sb|wCljoD}bS@R(dy~K6-$-vye>msfaGhBGk)B)Xxn?iBkS=Pf zqLhkg^Me)FYXd%{NkS&5kH}dgs|YzA_zSL)J{Ou0WFwfDCV{x*I`fDN!8xRhLIH?R zUH63@CLxXhyydz&-~i7;!Ssts|9~B}D^k_~p_^<6-F8jRjTmLXULuCAsNK{I5G@Rv z8FhksZ6^Durc^K_4PXm76t)4>MF6YFaVk?pLsI~@lG9-)Kr?T^tI6vWYYqH$GEW^V zfu& zprTgD>4sp?2;U@@@}7>bRs$XtHVi z9QiE-Qi~EzVVazexJ;l+N*0KhNjVBt5fxRZk=`YrM4)Suls8m>7s(7XF)OO207{!mNopQFgeL&6;gn#q?6coMh1Q-OZ#aDwa%C z?qQnRT&Sc=+K8k{s2x9w^HE|Ff}*Gfn#Fsf2kfs}_e4LoSMm27GEEaE>$0YYejKgh zX^2VPj0+m@L(Wsc&A@dGLC@=SxKm6OGNy2t!Xf4Yz_KZp0e^?N5_OqkQO(lge3!XV z*B5E6pI{yvAgCbiF@n?vm|_MO7j=N7V<1zPg0Vw~T zvBjLV>zQ%hX1*6?P*&C;NIk>%m`=!95$-Sx%+JA*d1)!9%Tq11?|)_%W5gtbazUoO zzF29EwXD6&Y>2v1si4S(e8Z*1-5z6MKBaM!savW~{9;KGbpkR}>Yr`-3)y{K5yM<7E(ZP2IO z*_apUMPZ^qsd7H32@{b1o9?$E;ukz^*5~d+{a>PH@e{FT%XIu=yoztfY)Cd#Iu;Jr zKS)f_s0G9J#+_#4YZ_kmfkC!`8%j;=U$@#T6Y+;vw+`BoT!e23oOQ9igDz9GPK4QQ zm3QJBRzFXbGMX822Rl<&suOv3w$e7(U%obIK_NPt``E1sI||X+19X%<9CIM80e`{r z35OXYM0eyo`(oUJdZ^iDb`s2b>SkBjOM@6u{@-j{4@OVH={CD1R-4tjlEd>Ri6BXw<$6(?Jt~jgsv$zY3YQc~TCCLv}5J zHrlY6+br(p&N=oc=o0wTa({guuH~7Q!9*3eSALRcF4v5?mMXsdW#4+be) z`x8F}t-~Ba@J@-6qDb@`+~IkNbD~g<0{pmV=@B~~hP9VB6MT=WIJ?2suEcWoama!O zc&*Gi>h8eypl2R@6;xwHF3?r*yvLe^1q(o--`xq%7*x`bMJ$C{~dC$Zhs3?vI8nrUK5B?E0%I?|<0pf)BnWPKt zzO!O(dQT+?ibYc2-qt^~jdpOIFIidO?k%tLaV>8p57;+BQO+eSxT6E^o7miJ>9TMw zNAO!oTKd#CZKzYwav(YmRI<5>`J@fkDJNgW`#~dE(`dFVE!A`udTqE)c7RS3n1mWS zM_H}~3@sQ{rjo15Q~XVEdcb}snU9hVJSj^`rVDoA6d(5ekhj+e6YuaHV=56ixIaUnS{5yNiOZ2k(^Otgp(ObuvmCeHzdE49E$T%DQQ_=*vOWtgO&K4;uBN zZ#`7q5c0HfpZGq7sezHm3{M(n^S5cH+q zIsB-8w%+~y7iR6f8qAgFypBFW{|8y>TEqYV diff --git a/zipstub.seg b/zipstub.seg index d79996f9b2517e173652e4733949eea62ada03a0..96e97ffb1d8436ce4ee22c745bf2becbb262204a 100755 GIT binary patch delta 1897 zcmZ8iVQf=X6z;iiY<>6L+rC%ABp{^&!J*mMkd{Q*pcrCw)(i>h=(AZ?LyUh`us5{xO|`H3bu~LYKGF2k;i(_4 zHvQRjF^ht^Y+@pdzR#NJ5zUh>wQpR|=&$ z0X+5&bxG)bYDOxXr1lYNc0{r@(*B70f=N0C2j~ZM2IpI}tlY&RV&-5DBdxR*x_Z|w%;*3G zGOSF}h%yAGHcd061lu*ieBcFg7n!Zf!^pAbIWJ4j0eXmT(I)8%?HWx%6FH;}*zeKx z)~hszsslhgSuzGWt(TpD6_v$puDF4i%AEz%bZ0t~x#-OmtU z@buG>EKah7hXoXLpr8XCw=J!9=@9FXp0+k52f@9LOZI7P8QieH*Me3X%P?`a1az{V zd8j&rQ21sPsedYBM6$}=n>*9mN}G!$eS-F*9ekUX5lEeQYMoDrt@a68P7%bFh`6*8Jns9P3+^1t;MtQ{ zlUY3fGrkc_s03}2EBpnljZoTyN=az&iB59UEwBPAcCxHw^dV!Q72Tao(3Az5BXCxx zVqvgT*l1tK03|ph1G*LX);`IDu-`t3PUW>^g$WGApLV!yD{7K&JS$tj4FJY1JD zC%8z&5s#B7v507c6pYI>h5+<&|CF=~DF1|>f@l3;^7Xp7h1L2!KNfhM-pxx8(EG8G z0=j6rCaIB!os#b{`3~LSry7+{{GJkQ(_O+*-zK!X^yY~p!{+$)@#||V-DK_jH|ibx zCI1WYLH%u{q(D6GLA_Itk+KpaqG`*@F?`N>J&L&C)WafD51Tzu<@Nm4-q=@tN8j3* z#oskGp0{cWp~+Ck>{!QaW2N!FzQP85@$TDtPRS5)uAPQFSEnBzkw9DVR<{}tPSRkQ ze2s$yBuC=r6Sg6aGkaH>JM2bjjyk6{3hTr|G4M;F$@_u zx*qv^vP*sz#EF3P8lnZ`#x%r82A{F}bT1fjG6Ew|kkO{0*N7XAomP8|B*YDuc^|WM zJU?@j*9AoTPoZ9^1&n}@5b1uWhOt$b%hKVu07(Pjfh?AEMqOGZf`@37{HEgfAs_;$ F;U5$dK$8Ff delta 1954 zcmZ8iZ){Ul6o2Qw()HcG_xfIA224^0f{;Z=F{~0YMmxr07$uWGuC&xhV~EM7ndyv) zkv=}4(vnACG_TZVqP_nrGY zzxzAqo_Fqh)2qi;7oL}uU1kb$kb;9>2jsZJKGhIdISkEGyEC(7MjnJ4uA+CcvG>dL zcxBx$u8m`8+p=pHY_NM>&3pTljB~G&9=|&6|M~dcE4TfB`!A#ssq)`Zkl(aN>`g#Y zd08RFj8bghcriM;s!IAqDQ+#W$IH*{aaW6VT`6|NCRd4_bEvZMVzD!Z909BcN%~7E zZi__^Os+~h?@B#%V`=>}n2To=!e>`#?#9TPnA>yMR5-YBs3 z(A!93D>SE|QBA-lJ_QN>HlM}kH9jNXz(GmmU>-v|Y#)DS|23YI6CBvMe2E9-5eT}c zd6Jc&#ZAmbFR&ZP?2uO==k*%rCBaGX!+eeV5@+rbPk^5tcE4|*;u{X^=3!JF1}3H1 z6wvAqIfR3BJKb$8%-(Z{g{p~~bHbjHmpPK`6~TQ~%wcxc9b&Vhct`j!47o4ZKKF8q zt4@^^y{ayrA%?|NBUk4F8J`L;UN2sE4f8#LMO8uCzCDmeuBhFc1o=QfzAAK7jR;y# zkD%4xz_5VrQMYM*Ro&Fn6Aov(C1m-a&bnB21u_ja$#l20V}}TpfGGIYh)Q*cLYLZK zv;5*2M_=9JXJsIJ3P#{rtzXSz9jTp~vXk!9@mya)SlKhv9fNP`WEX8%pm9?{T$@djk6t z@dQw=0|JexIh~qe5kK}ApMQ+c;~8jA0eyKmi*rQ%4UuD59@O7Osw z#ddn&q2BWgjXZ1?d?}~}jIw%eseIfcm0+DwCk*K;(C)Th^E5)-e%G_xN*OUk50xhc#`%*GY)#|5wm}+dC^RoLM;=W@ z9<^3lZyC%i1QxbO7J|p;7J{`)cHPLyNk)g-Y>Gp5d0@%{f;;flt~D3W;WdNWPV)m^ zf}lysJ;d)!Wu;`^Gzucw9KO&>h1REW{gzo6rC^;HtnWyuM~T5 zzxuNoHt!r-^H0r7M+RmMnACgiW*NdPiPyV+rO%puYyu`AD-tNffZ1+V?fuGt83$a| zF8?h|yz2Q*3u;a;U5m@8SAsHn#D@X$N*l7D7PZAM1agK!f;0;+XS2#O2L)fkL+l3y LKO0^OJP7{+g!xEb