From 3ebca5bfa703b1a30b1e7f822b916cdee54be066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Mon, 4 Nov 2019 08:21:40 +0100 Subject: [PATCH] Kernel 0.93+ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/EDIT.S.BUF.txt | 133 ++++- BIN/EDIT.S.CTRL.txt | 180 +++--- BIN/EDIT.S.SCRN.txt | 276 +++++---- BIN/EDIT.S.txt | 98 +++- BIN/SH.S.CL.txt | 39 +- BIN/SH.S.CMD.txt | 2 + ProDOS.FX/ProDOS.S.GP.txt | 2 +- ProDOS.FX/ProDOS.S.ILDR.txt | 32 +- ProDOS.FX/ProDOS.S.IRQ.txt | 74 ++- ProDOS.FX/ProDOS.S.LDR.B.txt | 71 --- .../{ProDOS.S.LDR.A.txt => ProDOS.S.LDR.txt} | 544 +++++++++--------- ProDOS.FX/ProDOS.S.NCLK.txt | 91 +++ ProDOS.FX/ProDOS.S.RAM.txt | 2 +- ProDOS.FX/ProDOS.S.RAMX.txt | 8 - ProDOS.FX/ProDOS.S.SEL0.txt | 298 ---------- ProDOS.FX/ProDOS.S.SEL1.txt | 6 +- ProDOS.FX/ProDOS.S.SEL2.txt | 2 +- ProDOS.FX/ProDOS.S.XDOS.A.txt | 85 +-- ProDOS.FX/ProDOS.S.XDOS.B.txt | 8 +- ProDOS.FX/ProDOS.S.XDOS.F.txt | 29 +- ProDOS.FX/ProDOS.S.XRW.txt | 11 +- ProDOS.FX/ProDOS.S.txt | 13 +- SBIN/KCONFIG.S.txt | 4 +- SYS/KERNEL.S.INIT.txt | 1 + 25 files changed, 923 insertions(+), 1086 deletions(-) delete mode 100644 ProDOS.FX/ProDOS.S.LDR.B.txt rename ProDOS.FX/{ProDOS.S.LDR.A.txt => ProDOS.S.LDR.txt} (76%) create mode 100644 ProDOS.FX/ProDOS.S.NCLK.txt delete mode 100644 ProDOS.FX/ProDOS.S.SEL0.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index ff117614cbcd2d3c5ad0b52ade578c0f2144c595..548a31a08f3f7508a02d2a5d153c3409740e827b 100644 GIT binary patch delta 102288 zcmZ^M2|!fU_y2uwn3)H|GCRZSW8a5iQE|y+Q$|q`aLoz?6kGrSQ`?3qG1D-$@@n7e zJ6V|HR|>7P`exZKw*08RZM0k2Uf61C`agG>1?=AfGxwf*?z!ild+xcPd)}k#{Kc>? z_`g3XK(O4A9PoTVeM+49jvoS^g%2w29giqy1T>`Rq&xmrrox9{>5ep20#um{cT}n# zF}7P|)G!%cosw@(KwltvNlKpf4uiUG3ARL|;e1q=q6^~{SvnCJDyJ<#e*XmQum~s& zp(QB^L4=Hc5RnncD*eeG2Qm|>jiKD=hezL4XDD|%gqN^zqwV4y+Tb~6jbj)gt*@a# zKDON<1SjAn7dE5=O+c7%@!uCoad;Q`DPUbe^kt6@gspldU`dJ~-7)dKM(r0mbVGa| z@PPplZ9MwOdjo;mw^e9Myd1(yRoX{4eg1@~jlL3HnGzgI$4K<_XyupZ1*)h=D^I;6 z2pNwifAifVj=;2g526#=KYOHOuDR|s`MazG%WZutY#Ww!H@Rxv#tqHg%jJ35J<4MT zR@(Yjv2x_rdddTi9cZ!jwR*~*_LK)6%efBcO3}gB7%(J1@e)f zb_+I1v*lm+^d(t^dF_t>;kby(4|bjw1F_}-!7M2Plq&c~z4Hp)dpjQ#v_&EAOxktV z1=oM*ux0e@@hw^X34PnLdR$pO`?8?m#J{toGWh-4Ls?C!{gP{dQr5cOAir_dgF;*R zi&;G{WyuK%Ta`(Df{__nKuw8;8a4c*sr zH5B0`y+YI2`Fv=e;uZY6{8?hpsb|u{g7!asUFOm2Gxwx}h`i~2M=tgX1uv?UeQn3w z2v1rrMhPF{`OC%P$&Za<_mYQQKvI89&$rKz(d>73-FxO4w?Iesfv17%7yRyWF!|M8 zp7*o5g$9)BM$JOcyQK1DR&od*8aURkls`%8%G@J9 z{bklc^zqkOgYpUOuP*gLG#D)Zl;nOsqAN%~mDHtyAMWQKekThAexoSKrYJAO10Y_- zds%xV*GYHyZ69Ry3}qedODBUldVv1ov->G2atF{+c5{>WuX4T3C%)G86)s*W&YbyD ziYvhVh5U80>#RGyYs!E)94`Ns+^=`P&@=RmOUtSzx-+^GUsx&5jm}7eG1}4wl`zJxpi=_q<@n&&1+~3G&x^Qql^B)#c#2E! z4wN5HVP3&yIEZ=@zHk}gSHTy+^^Mn`Nww6b7SxtO$qOk>55I_?UL}qZmg0|~xv&EDbjNz?tbO`pJy%-$HXrM|_<#4z&c3H2TfW9RJbfT(FpGScGGH52w#?4% z`emDDU}C>IEv%;^yX&hx0UvL$4uh`Fbe-57wEy~Btpke(HP8U(+@{QSthEj*ep+X( zZ769ftG>g!(;AZm2MwNW>ak~UosoUd%XS3G z*U!w}Ju_Q6eoQeqoO)vLi}&{+m-6V$?6S15!2aEp*_)ccx@XXj-)z#J>Z`~eR=HIL zKUQS#d$KZnpnq6Z&@v9>4LPP94s^RRXJ>2G?*2vckAGi#{FrL+qw*kYlRWe{`Ja63 z$2|-q}t$F{ED{cD+4RV~#g$^z|J}91Qk{9BpHDX*qoK3F8 zJ!{19MU!p)>OGQdvvsA(^s|C|jwGK0_mIzl64)Jl)9nc$-?aM0a6&=t-WDjZ zUo2>B?iPDnhgH&k_?~LN*ton~vA0d$dyS}?WwS*_M(&6HMbb!lV(@iK?ePx>8u0toQzx)aSi)6 z(`s*DU1ptERBoMBJ&RPV^;Y1`H;Q4g>lC}|S{k5B+frm$&noRzb7&J=3x4)SF(OO4 z0f;(QB7wygoPH$Op|U(57f zdQE3>>zbBM6!Ih+NJ3)aSY&<*JNJnOEeiRsr*uLQvOG;n!yV7CvTSH;t*KkGvJvT? zWfHZOUenmpN%VY-jmrF-0;oJQUsY4Rkt{svc`oA%ikglUyms@H@{)yxcIT|>>DHR+ znaJ?sC6Z^n3`ONQ+$|>SUtxAN(>lGeb5`Rj6n-36xJ9#LfV8SvSjhbWia0@}g*8-d zt*o||&Yo9UIK8xZb`3JV%7-zNlv=Cpi%OC9H8zgaw#p7-^wJxO-JR>|kn#T%>AQSf znxFxa1{J%TTh=4(oBnOW)+5bZTxT|v@HYO{EyfG)VDo-a7T;CiIrl6vINpP`Sl{8a zPC(N8tOLUb{!%s-&o4pRA%DK>QT&H6vdX#DW%KRM#N1-r%`k9hQAI_Kb7_0)D(9SH zWd4Y#hbqxd$3$w8>0_c1j|EgWc9v>eu0fhlyfVaphKKfxagNVNwXUMAPmXR)8h_z! zZ2oFgtIEQfGGsdC->Py=XDMm*wYQb&+fl8`?L`h``tF}veeY}a6?`IhgE#BiV<)kB>bpnqxl@y~YmfqOoxm zxCUuRr2D<)Lwr<>4|jY7Y9k)=V^%DE!Ui7m>4#y3N!_34*Z(-a1)ZgVO?DQEp&l5KO#=b`3_ohAMm}nyR&W` z3i(0gK?EpU`=eLc#f7l%YkoTN$0K5pWpby#pR5EwVfe*=0Z8zbcRiKX6jv5jR|C6Q3&+Nv8nI+|Ns zP{c*Xx0-Dt)+SGdgaRNMT92ZH0Q}lZZI)WC7%*aW!Fe900Nir`5W;S*RgSFJr~>FJ zNXS73HTmdq|4r3)aIDfu>gYh+GayDq1O-@gX*9?jg_Za}a0Mm}er`ZCnu1xMnvj6q zOWIaC!E{Zb0eH@1X2bX})}3eZo3*S1@4%)t!yYN=0;m;A`T)Alk_G0KPhOdQ-obg1M_zklQXO*JJaJ=P&7!hsZRf*S;${Wa!?D(5X z>{Tc>0v|ge#t4!4lM`Z6U=-^xBN_+4DyBPP0@9tuWmVHlYi_lc&T%FdcfrD67X|;EhG%tggZ~_WX3h;g3Oylip``TWNy+u8Q<5u^7bGuF-kZEH`Ge%p6ged)B`@Ww6r8d( zr8ni(ly6efQpcxWmD-W|0JQS_i}0<#h_Pk1IM>w&hlYpU!k$Aidb;1R=X&_H*)?zb zkoqJu;Go35WMyGq??`;cqe!68fY zw0#GM9{wQb;}3F%15XT|8K@do7t|j8B*#+QaLzUT;LyONVRKqoS?{@^AWP%9pzd=` z@T>dW@vbiy^`3LpZXcRB(NzaOT}!qPUE6T(IJBsW{QouSJ%_*lRqPZN>Vy}UAcOwtoQWs)kD|HVM+b54}RDC zy*xKjj!u*viLNVQ5RJp#!_aZ#>F(2(+U|4E?AXQOwBBJ$v$(JKbTcB&qIk33b2~me z^%)#$KZn+*hT($)8p*dN^lR%_+lLNJ zl=~*h8_sn9bUz0+X@ z`9TM?IXDzKD11ZcV}bt7p?;CIiQEp&pbh-?wDES5=Idl+qkrf~b|?00s3aaX?hvB! zKv$Dn1%rWMW8GhHR5iMmZy(wO61x$Rn^8BFzna3jJvij5v#cK4CVW#iM5Hyc(Jcp3 z(uk8cm3O4NRa|4Rgo|M?Wa34bK8X~&=D{}uTP84vu8YSHo`I46waeiu<%1lD`Bbj(Qx4wDOjq0K66A;T!!@#xoyVBu7srUQR z(}OT_d1FHVg99PMp~T4lMK~5wnU-esn?U^oiorluQf^wBF%U9{EVWP;?4`m-&Wc4r zSI2LgAg{_SKb3(M=fr$9tRylBJms7?!vS9;d0%F~0)(ywDh5UKpKLXZll#W=)lfrc zK}~0&OLZV$?i(wUb+gO2c=}RkNnbMk_28M_zxFI53n_w3=b)C(+u%9({_SUu!&n?= z%C(ubu7-m{-G6}1cK_){-RE3&@ab&tAAA2K_G0cmCm&7k&p&nU)F0qi{(SlD;Fsl& z%suGAbFhN@qZtr?AYSfE;8F&jItN6b08y>0kt{E8m#$^h1PR0M7P*#zcWd~2!*6>M z(LTcDeHb}N_GB%9o$@uAUB9~!*|7Gz>JJXR^c%kFyeQYNN-F(ZtB_}B9Qtfv@o)ej zr|L5IVxVq<|Cx6^^&JTK{fWU>6B(r&K^2ql!Bf3oQ;$;XLcMO1=LH2pbD)vhK#yOQnVaA@y`w0ww` z)7k3^rJv~q!=9inCEX8?rqRhcnmTfh*pSh|Gs7yt9nW+HyJeWA6N6`AqR#ZHzoxuT z;kr77NdglB^~&4v(BEQ|j*O0Y*4iCsPMrZA{DoIv5XW5R8%eGEV)uFC_FVPgsWe2d z;L{q;cYSXmpIuk4hTW7nFCby1AM6EhVWeB(t?9|W_kb}czLRDKlSeNoJj;Jea|;M?05#bu6s+oZhl zs}?t2F@9B22mG?FLi7vyIU#RSem<$2i71{Vmo_waPE6`Rsg>;zeapq2?JKhiIy}h-4Vp0+R}LxodMBrX(bwy=?hk^)muqGo1WzjUy+o>V%ka8fJFti;?@Sd zBwmpxWaFLjiZRhP;89lX%*(Zv*lZiiOPs0G$_uBbWfr3J9Q>f5(3AvKBC9rg$atN6fVbiCo6JIMU+s8ze!fi zfq-pdiXuC(n6*eR!R;w9yi$BmiXtg~8c0D78H?K&x1^`1JLx<->C{#^m$tS$s}83s z!~o6X$^9DlMcI)qC*qJy#l(cf6j$i>x3P#%31KbNJ5jcfbNF__@`2sX$! zTpz;E%n_ zI~yCU@o+`J6cyhQP*OV2T3j)^x?*REBHYv&0O0w$ZB$*^ z4q}^qhc=YE7GG5Y6S59(D^bJ?>+z%H*R}Xv^6NVMSBWA~xE{xrDpDOcuwIQf2FxnA zS5%hHw%NAO!(krMIAD_CoM_EKVO{KFVv)^eyBP&J;cHQ~GY3WA6aXN_l*;OwDrYL^pHZ8whWL-g|iGqo8iaAr{Vg8yW8rt&!#yQhIor;&F3WO$?fzoW;^S z>QfSqytr5~IW2Ur04?nv!?PzsJk)4T7CNwtoh} zj_X61gO6Yy=O^LXWg9CUZ>9E^Z2Y_Xf?JXoruR>H5JGi%Mf!tZ_I?GwTw!2Gj&zrn z{R->70J#Ufe{X-Q_dFD{Sn6c=7v$JcD?gLoe_`OcVQJuP*xW7-2Fba3@_XrSR8Z?4 zfdAJO)WTOwf5CFsXWNHJ2OCaxe~r^_Q5YSu>HUWw{7}k;>0Ro91h`&qfy-x0?SUzB z-{rD=UFtTa9G=#tlq=FVo(4njpSr*Iv`v+E`GBc^>}IVZ$d)Ywj}QoT0^#gM`TQiO zrUQpAxz9;B^anv>`I)r-MO_NuMaaYC(DeRK_RFc$(?7d@P%PMHS?>BA)bkmbs8YU| z-fwe#4j(h*!i@eTcb9S49S|@q8&V}WSlQuDdt(MARme#hkffj}Ps55$ii!wzmaKic zfGoj50Yb3U^nNvr?N7N7uh^uB*1nk9ua^x8bN&b#G;BL9zliZBMUohlj-T12SWp6D zbqvH026Uh8G7O{+s`jL9Jlmxjs2vo$&&v0tfr9#@UpmV)Wq9!HF&RFFrf-v2-L@|w zVz>t{x>XUUxhJjbk6pvCYeB)rTfzO`mv-of!M|kktCrlw-XxPTL3ms!52y8?DK})e zPjrdym&v#9%G>w)Ah)xjbAMOf0kX@mapGhvk(=aj6kK%SkVcLCQN*VnL zETw|5BY8bfgJpu*69lA(xN2|{yYZ^q6^$Us+qWyMLN6A#DRLIQJg&cZpn6aOI-u#g ze4uhLiu7&Zp(0)!KacA_K-hOlexn%tPw&se|C3#~XPcr= ziq8ivK@(iGU2%`F1An?*VT%Co1>^}x24Smd8j^sAhTGj}M`g9_6JzwSM+ zeHNBl?GDA(t6>W6bH5E!0PK|Vsd4?5?(@W)h{Z*K#hJk3RPvI%ZQs>`vx3pwvK?#+ zDE6Ep+a7p5`T+`D+U;+VUt#d;5pW~v0A@UcXWgNQcifieX+W*<(9pyagXeb;K0DI; z&HKSenFqr*YlDCaOgPO!x&Y~+)(!Xc>HSe;vdnun67`2|2DjS#+prke6=(vvDUV{p z!!)c1J_Vb#Dnf1}LUx@bAMsCjC=%y7(%r{kB|wjVQerg_|Hykh78nk!NZp6DPBUNz z2OU26I;p4s(NU7tpr<3gS;5QhRKz$y@3*nd!N_-oLq80p4rhQ*3Ml_FpV}gmK3T3$ zmpjt?W5MTuKomS|-vTXVhlcjSsh_$7EsV!97zD?&SbO=x3 zzPl9RA^o;~(T!M*4!?PqVp+jcw*DY@SFOyeVC=U}1smBgzW>+W(*qHMp>744oKxgr z0vloPZ_3j|iO=A+oeHz`NV@w)Q1=PEb*Caycm}(7D)PmE@%Yo73d?v{qAKDfVVT0u zJ)LA?uR5?t?t4I%Z%FN*vGEtO7>cPzXk~$X{dh2TD^?Uc+!M`FBD8SA>LAeKc_8;QQ2NyhXkyA9zsi>!p-<7%NPZplpBnZR2}?9aQ!Ho&=4+ zn4wJF`wMIvJ7wC#6$Sm%TrUG~88$ejt3ZaY6fp_m%F-7_Wm-U>YqyY69{2I1NZMz6oHTVa+e}mxc7)=x8iGY?>&lu z7>MeeBt^jq5i$vs<59x&0CHIk0pgCGE=7b;h9g}NmfCTROOa@q!2&5lQB*#YM3E(S zI|`qPx49H%YxyO$K!nV*E-9|AMDern|6CC0R^UHeiZQX3v{%k^Zgtg08f(t&Xl##1 z$#Zbt{fZ=^3NO50Aq&;`TJo(1yY5%yhs~u8d4|JQ>)t(zfMgQ(-$c(V&f>cE1}EgW zIDx`hSl`)vO&tq{bLZi}y%508$CLI#thxZ#?p4IaFQnYyrhW(QzoxEZg>zP2OWm@@ zcB>Ua=%hvX0YZKSKE78m4uIo}dld!3mAK#`MYeDiZh8pnuEsqNDbj^n{KP|wjKljB z(E;OcO?WQhuY`ugy@}r@YLXI?3X__Wu1;E=v^sfB^4-asl6EAylAcL=BkA*`i%G`h zl;nxYbCMS)FFR6wK%rEq*r6CNc|>ual72p->Q|gqKq|0u?_+SLTG`myXl1h})v2Zc&J z67ZAatgv@jA%~X1o$kuUPE`5f1AErcMc)5r)c=$7vwF`EWyhN<6Np z3`m6R?VE6OcY$pQ6-a z!;{JcnihRz;*-kBqF#?4h(oKBQYB!0WmSF3IQ@}L|5g5QuR|M!YF4!Y{IHcAVL*-1 zs>Zgu=9W&{ z4sHSy(30xLmGp$S1?Xtx@#I~HC(7=F)q^<)GcmAzv-knv=OM4aMhT;dNDg)qBYr)IG-JIV zqsHOq76n8K63ObM^5DuvXvt)4pi4JDM~+N)IY!ZdvIRjRmgQPVkXacM=lmks%XBFcDGQDGH5 z29plpGa6&Z*KS)8iw#$+5*sWtnRvv}f>LYdRs)H(3|Y$mseBr;%=)MDDrA}cPvzCf zQh|0K8NOO|P@xFF8DZNKW+OgYuQKSuHp0A-M1-a~NNhuw-GaZbS4}S4gy`iaoYOU% zk>?s(zXkd75(?Xw%|l~u13HobklQ`G)mhiREYsQ2xYoH8u8NNZSdqC0pH81;v`JeL z%|J5UP8ie_TBkdk$aV7Ux>b;NwT($o-dfi{@0g3W{}Qh91H|^hxUA(B6_r~(c}Y&lWg==sF%OPzaTRjDaKcQ8ZPaqXUUqcBbw1Fy}@iH>i@`u z)B{EZHr?rLZgG}Y7duyxyiT~*;Slc?DM<4sm!bfYVc+JG15>UT{r^Z2NyhSsExm(C zUIEg-3p$7NT)&$4fG?!l7~Tg_Abm2y$42@9q^g4~ks&6X{=?CYgFiyMQ)#NfxO~Wn zwMw{eFyW!CgOWG5kWs9$Veg9Y5s{Tf6R0MXFWR+l71#5T!*A#W|F4U zShrkd4E%*nVC=8hx?C0QF#LY0ivPGo#eZ@|p1D+!e=$Ys&yH@SJ4Z^^Ibjq;R~^Xo zw?{pmqRe%1NOOVDcP^4HB9=Xc1g17f@)EIPg(};jfD&Swc}P+UEJI5rP>VE40#D5W zu7w@-&CQuG=s&fppa5kFOBu>d!*8rqx(jGQAY@nj6#3AJpX`!Dy zB9u?r(pV;xa-6Um8OICOaid&MNCAwF>bMGYJb~+YJPMfvqxIy@OOv^dFB>@uX$sSw z!VKd%#COS%iOk245+$P|{*&(J`Tm7tOT16Wf((ND>x0`Kjt?9P|70nhUN+RPn z?0^y$O?fTp4rY;#;5#|>!a^k7#TV61#z~2VJCSjhf2Z@?n>!nkW;f}T1P1Wf23RZE zv+m(-?gKaCGw+DzFCwiU9Md60y} z0(es9Awor?XCAFa?h|P6PNUViZ4Cf*)U>u0K?oY;CNn}aqW7~&kpCm>hEqVc_#f`J#QRd^61Wq`Bx>UoB zZQ~Uq@&Mv*${-!guBe)YEQcvA`Fxv)m2Fi#3O_>2?X%}GPlV={pqniIx3hxo^7Ag}< zNMLu(`Gro%NO01O1SihWYgBQi&(Q|cD{3khEM(Gq^$wbOp4OI? zmRFYBXP0{Cg()Yg8c0C{lV8BwuTf3Xy$GhpZeWiEXT_tGm+;5esFLCGB48~XxL(2I z$gktLX)P2E;M>=#GK3TOziU;g!mId8Qui7*uTy0Uuj6U!00wviH?32}2>*vSu2YSP z9`rK5iC)joaZYs3S<~DZkH)@+bCha zt-w}jE6N#*q)%7_&8NVlWbUk43n5P)K2}u087la5p@hR6NIr>=0!POe0*hXmbKb^fgeGEQj1})s_oKjFAr~n8Cr<&}J8$8G z`B`Z4p3wMU%)wvugx{Bw4zA{2=h57~t) z>Qg4_KNd4M8QG&K*?kHfO7L>~m~uN(*Qa`<3}+nEz5@_u)XpnZS{!>uUZS_ZVhWq&SGWiTT}Do$_+q`;e7SBa zqNE%z-h?DT1nFZ$MI$OGvLqFA6rqG4LQC-{f2m>|)4WGszXPmkIz89Yi6z?yaj{5O zMoFQN;l3!uP7dzZLi7Oh7czsKFe#7%LFi0&{)AaD0^CQ?IJ%)vZ|!Vdun_40>Z3ry zqRKpiAg3YCY7;khJ`)6pU_HP!i;VXzTRlJ;J6#+8ypeUOnd%%pu-KRp+|Zq zn{KYRKh~Wzk6}b%^Vy-AcNDgOArbtmW+7otqa)oS#*Wp%a5YyzUAu;ckz=l;bCUhH zDl+gYrro%!ao0K6_-gU}=Trtq9qFGu?7|l;(k~f}d6?^&j3nGFu2{Mh0#4{gY9RfB z?Kh65w=89LLG{W4rCETgBWW3zpo!T)@z&+5aNc>9Ik1^mEXOvpT^3g0IcB@TvC=0R zcn+jrHM%2n%RdU%$^~m1O>bHK{}HU68(s$!Y}!_00$BOCN*CTqEsLOpenuFx25ZCZ z(N|u>+L_j}cGIC9sFHd{q+iE`^EofgdaosEu49#8h5GA9i>bT;!Qtpeyfs!Gp;kKJ zOLP~$|8G@P@l9U5=VrcSHZTdy-Asa_YItbIC&I?jBBb7eFaE7caokEE6#&NoZl-4p zFKnjSLW~D&Cl48Vyvv4+hru=uw?&%{(JN|^Z+DJDJd7-@w=PpGk8DKXH8)dlK#V7mvn&B^f4OC z!}xTBJv`(Qf1TV_7iP@U1I|mw=~b)rC|#sT^B5m4te?ZAXdSXVLDY<&v)B#6PkIMx z`7iE@w1+PMz}J7A0Q!<6uAlw@@1?rQMapNvQuF}uj+{~B^F*Cf?6duJ5%nT9E;0IL zst3m_UOgP=V;taPJi+uZk35XU?TQ-0tCx)MHEsw1@KQr~;}S#oKM<9mb>K(=&Gl1I zJb{_t@@eLO+z{R+nxTg99yNquKy0}oScaH>J{+kZKxaqk=VPya^nlimRE_de(3tTv zs-F?I5_OX6=S!-esb6{Z0}w5>ldqY6BEMn!Dc?#q65=4?T7pD^Nb{{v*6*pT@jr}| z^~cfTME%TrJxzO6{z`hqpI;qfbeR5N{S;TxhvFDEVg&rv)2+P)F7rDJkp{3>zGv$I zdxaD1BEA9^Aj|oGc7H(^2%b-eb&(A#2nlrCnvEoZfDT3gr$i1;DOdm>9)KT?1>{D_ z&dffGlmLOHr*$=f1HmImqbUpk!%}PVMyf~xM3z8cdJX(uQtxNrQZNGwq!0#KX#k-m z6yP~EVZv?)-38&Q1n}6A77CE;$k~<*OdtsmT7m=U0h}F4p)oU2fp-`nv|fG-kO6?& z5wuPe1z7F!4!k2)ZIYCL)1v5T0SgLsq$8F8KKF+k#pnre_FbJfK$?N<7>3%aJ_ zS?_+TOyH_a>O<|zWEi6nwRZdM|IFUY;;gvpqnlvA#l0iVIbtou{!XkiC6Zn>( zDk<5xR;5l30TkD>)^Y{xjI^5<0eOXMZmYmsx6Z8a-z?vOrPmR9(_uH&{DmY_~~^a0ca^+8aEC9ORbhI)4j-z z|CU__Z*mK_M>*__*f4`l!W_ESCnQdrh72>k4VM%b&Mq!3NBUV%#4icion;t+wZx0j z^-)bRTY3{#$(P3*#y+-+v9D(AeS+XnNv#SeNG=1Hd^H{@H&ip1bpiK7;qw_9>sUY= z_yxFt+|s!qH>*L5$t03s%mAn@b*wBJB=05A18zG~_nNDLKiP9(g6hD+U_XsqLeSF@ zBC!KEifJIa#>Q~FC9sj(?@}xTs?B4TQJEI`wpdM*a3^fKMRTX4sAe{mislMm9jy{@59E7AjU zJ8G;1yyfu>V72@h;EiVht@Yc7KwA=kw$yuF&zIZ{mr&dYtD4*_Y8+gRa7E>0tI2XR zQ6t^U^EP8Eb${zJ;d&*aRDex-Sh2Ch4I_) zGL1UU1}H4|^%j6%y+;|pkXv(ymn7y+x&R`hgLZn+O3e6W?qbF|e=Cu|>~Jo;Y$fbr z&XoY{N`S+XOClqHutZg4k1J<~0Hg;%mKve&@Bq;4$O$k5NIR+>aSZ<^3IpRLFztxj z*~mRYKDjO0NZwVl1TM9mK2aWEj?M5OpA%-H#K<8D??|wEi~|r{*hV%sK+;YpJY!yk zf*vB1PE6eBX712`0NVY&0nj4`z_ugBF(3FR@il#n7i<*L!+a!F7k3r*KH9I^6W%OWMR7@ttiy$)_O4@mN_*yuumAND3%i#B=SJ+}w9)~ZM0WyEE z&%R)>>q=f_@_}R2zdm|Rg}nil9&Il~=0UO)J>iijDzm&rU5&}8dz-F6a;{^?wWxPI z4(mPUu=LXVd|p0aLtaEzN4U-Sq0c1vaTtYtB4SDFMN_2w)6#C=doYmWm-Jt}IfA zn+-o)LLT!Yo4vrF_)vbvQ*~-tIF0Lc>I~r*+@n*6FZ`8w_%;TE`1ua$H`d7fI|o~> z1Oweluh`(>qCdRio6mT?ncr>}^B40s4((Yoh5TlY+`gUTEpw6TJWLXj{$|5hUm%VN zgU9^GXNI8QzKaf)+f}F}=@lGU#uotxig?X_%Eq@t|&LbF!6u6$c$>e20 z&WGM7oKc+YmCh$zun8#0P6d}w+VD}LSiGWGB5=P^9qx#P5_Xu7_|;jtnO^-N=EOR@;Om^TWRIp-XBX;7RWt7(u5Kwg`rNdVzi zOy0wJ0v3)m3%k%uf+rW?R(xo#u?YAMhGKYjwA{m2b}nv7yzuz^K{HFmjh6S3+^;EmwRQ^7mn^;Dk3O1$XM)?vE&k>Qs@WvH_J5dRFEF#w2>D- zk&FA_>Apb(*+oxGF@srsOgWU~_%uJ_VpB7V43Hwg@@$-LR*%tCdd+?gfvmB3@#5ie zuyPMu)LCMJSp{cKehthnFlg498V;q*Si=KxrQL28g0L+~Z4#q2^vLT73t@l&_n%TI zoQ(+p6vmIt-c68rSG|@&qrSjU(m^&8XkVxIXG7u)1IGf5mozbv1Soh{j~NcdOMHj- z*^O)AnpzX?Jw}@&=#U`v_QOAsDbjcLt|k{9xzH*y+E-ZI+P2;+H8REE?KA8K(J}_R zYV77KC7EGLVR1|@KJKu1h6#AokjSM^V#D$cSeNYI4hE`A@wMC=trm?m<3O2;wjfO! zM=zXM_feBUjLO7U&9p}fSw!`b4l77P%rbZESft7JP83Norg0nF(WG1^uqKan4Dare z@>!0TZmd5g+1bW%8p!h)4+x8?z^4}2h`EL*FbzAb6Oeh*KdN}LubEfHBmoQDQ8HEJPThTLtr|ajTQpHFt{@CSL_^S>S0yz8*mMX z-H44#aC<=9ldi^}noKlY82IR*fLs_*Co!Lk2t^C1h$ws!0no_k>>Qfny1#-;GXW_V zqdSr5O0Iv{2)v=Z>8gKFzv*f`Cr)jgTg%NCZVyPl8W-BcuMXHu@C2c7&+P&AMy!yG z1FjEzO`#yX5kDITF2S^vE)_>ulmEz()Xep?+<*KiYz2IUsGF}C9lbN~d?nqGO9QW3 zNkNN$11K=THG#(fyvZ~{s~bI#Ur@VuPCM9~Ms%WdXK8y~N29YIQW%|eolc0R;qpjY z!wAB!K}6pWi5EkCVJC~Vk#4Qm%-N!fTZdn-u*(z4y#VvF=Igv9z`zq-ny&YW=v@gB zHxfJ>vZo9Rl<2^hRoW8-C$6is8-s7+mXMFaZ^q6_yJFuisjcFPDIYc}zQ zW08*C5OBSMn&7Gc(gk5JC6mcmbk0E+Sp}EG=nUMK@f_3BDb3&f< zZ~qh# zEoP9Wx3MclZG^lR*qOr}@Awb$U9P0}m=OB+nUef;@_|435F3vYE+vrWBcEbEAqGbk z0~ZcdFR*)l&h>JV3eS?l8&`*tI97tJa1zc$eT}c2Yman%!>7Wh9SLq1sMG(BGXyQb z^#W1LC@tuIWW}s4QOi$UEjcJ?m?)l@r*xXFSJN-dEBiA+4%4qpfDxsp-+&KvCZP7z#Jc%}&M zDM;i_E+;79r-3TsZD58%82_j+eARq=WQvyKMt(B{7ZP-a;2whVgBdcCEKgIb4lW)> z7%;hapq2_#Vj(~v)lURF6`SCmfoznFHQ!WCQLMv}h0(y~k{OAiosKcZvOfIh0ZC)n z5kFkUbqnm~fOw(>*iyoC6D}E$CJ`90AYMx5V}qLp&)CvvH_f{A(PPVC{ep`ocMSz> zx~#0*%6JoxGqy|2+jlM zZ0C#^i@P%6T&#mD2Yv!!z>WlW57hBaxD@|0!Yu@KyndUlW-^0!z$(m_UD5;=ka@}_ zji6MTN{nUwm58L1lm3E=y)bJD8%k^`9SX;yw)#m)?@Fd|zznW08pyp_*=WEleg@u^ zrH-@AB>k_W3lD-|qBN4_Vw{EF%u*XN;C_N+z7VBxoE9n#a6REUmx0aDooWudT1cs) z=nXmFu=Ap+#>av4hl_~0xYnvRFPSH7K_T;rnQ*UfT1ap<643fNZw=f|P+J*~LKlNN z0A1qg+*k4nSVC|wK^Mr?P(;q}&`BLJ{y8?a!Lfw3BBSuipsDAS5Z5&NFgQOQgfG3c z8I0a9yF93wBy7|5wH$^CXUwn_{_6{cL4tWl=SmtvlFgW=m=lx&VxpE&wjI<)9-*Mj z;I4u&Gqzu1G050KI08f8j35nMVNkC&4w={BpR?7b(zWFI2kI6^jCma&Gq{iSynDZT zGB~)y;LaobdOX_(`27u+Y5{3(6&w)ET z;lajhTALf-P0V%6R>7O$>pIDcf2G@)9}n&UVQ9by$op2J4~RClfjN@5`L9C}a1Ao0 zT&558@!U)9FzH1Ij}-61tA~|_91|vHJZe=$?4qlI26}9va0cObLpHnJZYuuQ$mPPT z4foPwa@o#1_NJn1TtwY;n^E2mkhXCTp0nO;a6AA*VZKWT7a9ibmW>YT#mnJLbs$_#ylwksP?k;JxV|rc50~R-W3fdW2j}1ojIoMh$|S3Z4*f zh)rI^qjd5-Vg4qHn9+wiALE0A=(C#OAV`0hnY%AYl8&&Iu7AS6#zF3Fv`^8hjU@ey zT)>3=m)iJ7${!H9r~O-y2GUW^>zPYxp5^v-jEQV|j*48|)L6d)xYLKYk@0!2>1TV7 zSNaz&83SBRkfq=ogZU)_e7)=d}GxAL#{l4PjiA;UY$xaLBv;l>@MJACeGW=~^ zn6EbL{>OFn4%1Q0ySOP|9qo8;bZ>C?LH(KjgG*F1GKtbP-xPz!%`j)$??}%=wm--$`l;jrf2aO5^*Zq4Qc(8ZxL;KwO|8oHA7O8&57Z$1XG=mmrZm=(On6i*x z>LY(fB*My0xU|L}-c|zUhC*#{XycD|!Ak}Jd-MAS(3|HQ?2!P#!TJYZLH@GLbSrxR z0U7h5m>qv{)|-aFZ1U(oU+~It1cVz;+fm0x0wek~xTXMzs8__R-&9#bG?Vz*AQwem zhJTu(j&NK~v!jS;0C0u^wB{4VQpmr}=d#q$M>!CI*_entTh#=|LGRhT!;^Gf;uEkG z1k_KXt%!i!D`^09bMR?ZmH`RL>ZP8PV3o=lP(lE=JlHiM^P!xd&3u^;npw~TyBSc< zCe14tNkV*jJVZqNQ01dn0u+ZNz~N|E0stJ?>1=X3Fw|U1I~QnU=8F62B1lblc+`ix@iyTQ@@yx!MipLfXtC)EQk zToVBd$7{)}ERdi#e*d2K- zl`kpude9MHX*OiKfohDdCh`;%eO}3UBNlF$Z4ex^g;neH%1F8EZX)T4bUa+Vo4I&n zQDip}FG9El&)H-*>Htq;ArPDY$j!Kd)NaAspmr(XXB2|z;Te-#nPUBRird){S-TCS zWS9|sE<&@N%m#QqICktH!a)}49UiEc2U)}z3m2fsJLw?OCBV<ioT82;gUQsgoc>2_PEMxM760oph}OhDOYn%ous# z0pfySfY6vHgFyKJKDgCxas>B583BOc4__%C1{R@@0E?WRJQ#z&Z|6}3d)5P<#685O z#PH~-ss$(v&@&PefQ`{{K2D~fgYGy0oza&DJi%tm2sjxzusg_1cv5AIfR~Y_>c81* z{>z3zPMS}15X9F6mV)`{C5@m|dKUU4km4~8DTX~a51qJ_)_cGRoLf-LIBtZp$anzfS%|S{4l>=a9yCqqt?Hy8~D z5Rd*{5V-LV2Oy8Y^E5p0X)E*xXlDb9B^T8A;jMOyHuPt(O`iiB#-I1tjo5H`l)N}GBk5PRawC4jF;ZNIfF7AMKUW@30(-Ct3+DpsIFc0A zqmXEUoI}Z!79uHzhp(}GAdvAehW1wL>23i@B&IDjab6;2Je(}U6ZrS}Bm9g$(O1ka zo z9AYKt4IhV`?c*6nd2&228r~p8<~E0Bb7*ooKZq>>%kxcWa6aJ+Zvg<`oiNtND+qW& zOB6MZu^CHv!@DDxf%>H%=?gBI0ssKXB*ji-O&y$7%p~uaSV#?bC+w9_nd^`a(7=(g z>}62kxo7gkvH%JC$MwLNM1Y3NX5+!P>;%S|)7HwlKw_CkFf}@Na1wyHgKs>c z^SNT_!*Rw19!;_rBo!&)wOq!9`1EnLA!HGB%CL|~c>jbB(%G_tuJnQsS21%mUCp%2 zu2XsHVoWX38O@w^XzBIZ2atZV{;+YOzJ(T!A4xwq}Dg&RrjGPc@sMf^#GB%Hx zQJRQk0>qFXy?lezt)Ohd$1IAV@0>%@O76{8F;-(*1pL!hdyJ!%u3FC{iuCOi?98eI z^pI>yY|_ad((aX~gE298GI>Ze3*%ovg14Jd=o)T7q=;rekMcTenYo3o13Cx6ph!EU z2PAP6;kASiPEptUx>>MrE5V?o8>ny;K=e2%IIvUHvx`-+^k>M3z6o@}{8;GC{3D(F z@D1>7`ahgnyNUAnyGpnxhSyurwZ!6fU-}<^y@h2HcFh5t|5k36BtA55W`^na20x^` zjjbgZGrI@S19UiY&^iDR>AuERCn)gt(XfxajT>fecPm^|v@V65=%uiSw>sJz8rz+h zBNHHw{yc78-`IilcZ}{zx|6Ifc)sN>zJ$CdJmXGM0uiBZhr* zVdet3Jz`t2?vWAlg0c6H9+`BI$O~tlL%mIYIReZZ^BAA@{BB%Rqc)1x!??9Z zon<&Os%sSf1b(CjAonLn4_$hSb)pAEbA+_;5;xWzcvSt-(ans2Ymz^@JHi~Eg)$O~ z<)I1B`GrFr_3f=ISC+KgWVK@ZTzD?R@;noJ)cQfD7m0)Rn??G#(MzKRlV0YEeuXJo ze|$8BX@Hc#lJdd}t00a!!SGCd%B!P|E%-Ge5IE#~AfwRcI+Q$!Bj>4;qTak@THa#Q z5%)G;G*2xX{x^D7lHb8S^VEq({d)|j-bnw7X;E=Cvb|5HCkB5#Ppx-Q$kIRd(hM=V z;BWisKOC)a34lvt4Em2p4^{)%B{|2DdHQs8GvjCfFi)S8d6HnF^3nJ&1iX2^daUD1 zHYEU327d(~$#FCv62-nIH%IjP=^L(6z77GQ9BD4P?>K?iOMO3DF`++j61ENe=qIeB zj&AZlK@qv@`q{5DSQ^8Zbar|~XF&4HC7u21>kR6D^XrWEW&GV=Gvn#|R9Uw8s%EDZ z-f?@z&xHNb%{6~{H6@=DaL7V+Y{+?UQRD>{7C3?~dcy*q5FRCn)Zp22nA-+_gp+M_ z;2|L;e55ud1%Gh_$q?sT6=a2bn!tb{F?>`LHESYC@Y?}?P7~;B3pwJH4c+DRmzLre0B8z5yz$6q=DDdnRiHL%=tlacfD zU#5D_y z2;L{Sj$HgA_@c1)VMyp6{PXYyQhqAfvU6Wp{*l~$VXp~~g>0?W?uthIeZx)j$t#JE z+*cd2A~0kDk($1>%(76#_kS8-gvfmnD2HGn3qli>K(q0Yi@^-RzH$b~uPdliqqiO5jcA6znN0!fcq^TFJaXI-E2MccS zG=UfEG_o0tUIuK(;)C02Oz=XTCJzBTG1Dya7wmcd(ywMY)RKK=0?Jq+0%(CNduk$a z+KP~1$0{&3*cy$kd}0joRHKh&Sbdh8fHK8HT2Kyl0Qgpojbdv zbQ-%KEVWLf-;lHxlH$qj`#K*TJT}7qM)CS17gvP*=bGrUrSz3d?2f|w!Y2Oq?-M8C zzlAin(pk5Rya7WAJ2}!F^F}@S-Kn{0DD-)< zJws@-k$ls>08WqC52;K~Ls76#lfwb~^Ey?9vr8&w<&3*2bsUhwhD}MwGSZmi0-o|~ zSd;^HWNK#Px>NJgkP`M~6#5$3aavm2XeYt13%k9aVPp1u4jUZV5;ke1hl|84EriMw%RMKc6%|r6Tcb+frL2_3(&un z|Bt;l4{Pf90){6W1VTt4EBjS;6%4q6RSU8R8UaD8wXH_Q7VBEAt+v*H6|`y;wR)u$ zOKG))AEBYG3$_T>4X8`Bi=e2uA=0X$E>-lxcjn%k5N*Hb{p#h_lXsRwQaa8QG0#SQ_l zKj~bV9_&vss8U>DATA&RP0Fq(RiHU>(9QFsfV@D1V$_~b1~@8Eq`jkNM@aii#}YqI02%&R659eqX|;T0bY8@$ zyiBH7>QDxHP*QyU5`1gk2aEFHJMsx5J045CrQzIuI~eHr?SsgEr2L5_g43TI{X{aT z{{VX?ZrTTqbiwtwxOzT#h334OmkCeUy+3>2JmeEemOPPo>+umU#$lwOk9c8h;8E&P z7)OBM8ij`w`zXY4H5a~+CJ@F1;X_~a&<$n?>pH|Xbe=<5@&mWzWzAa%PS9aYnSdCs zor%}e2$dg>%_ z9t;aBMlK>T91CLxGXY||;WQYY7)&0B5m_8Q?S_-E(+zYjXp4BJLJ&x(L~tPjU~Cz{ z!IT8X*sxdjNaX5i*!C1LoE4)Dj-UkC-GKvRv<(xR4@)TF7?zJxY zqTt9FExcgmJ`SHFqq|O{g(asJDl(VyCL6ZcYd~f_)Z~^|D z=U%3V_fC*(!oQ}QB#Y@UWGAFeMB<4IO7zWMey@;Mo=SZ6lkG*cSrdW!*k)sJNrpjx zmF6bo3pU%LoJ9rnm5zyv=KzaF4UEQDjwfIvt_ZG+FG$SF%Btf-9WdhNErC#cFyQD< zFx>E`2N-D}mkQt&JzNyF;K5Rx=e1;U0o1}N$PG+2rs-iQU>4bjl6ZT92_y#djA6q; z8sz&XS^G@lBLnLUlMs3a?pQ3xh&i}|p9;yrG;_%6k6EhkT%6fwIGARRJn}J;FTg1_ zj#{0t0P8j|+^}jCfw4xjmj?O0L$07CzMRDvjEXc<66YMS!FsWJmjRrd7&#ihJ%eA4 z?>}f&*0Myn)^{lb#?DE7!Q^5%DLHvHe$_B<&XT+t^WLAad`TYMrGb^_GM43GALaux zpj)E!`Hjye-x!JK*NcBz9uJdq=bGqGn_1?0DZ|fc+%p~1$y$hl|i$#=zzg0 z2Xe#iHs0;~AC%H;r^BTxSaE4$rmk0|!_~^$qJQ;DTwsVkHIPQ$ zdnWM>5!GUnL$8M-ue$%2CVdXmSc{PGXQol_Bjhxm)XVqizj#ApsGdlBr=urUY(z;ah{7E)g{j=auc0P3(`?KN1@faJe979T$jNR7PzAn)>} zULNOJo@ru`>)%YO1=4<;3uJ;o8tHP8N%dW1uR>VlaTK<@{B<0Gvc}(vvHBBi{D9sd#<%0%x_?*IGmO#Eo-wE8v}0$ zLpkJii%SxpOXPgGDfBiu%1NqztpjEQV^OI7WQJ*6Bs_Z>nGp|+o`rSsU(AHUuVJO8 zO-!3K9trO6XIE)MVyd%H)a57tKaKon)1h)LZ{IG(h_Wkl;S_QT%`@8`u|~ zTJ?C?3!8o?L+}U}`G+kMq=BvT$Dn$a%w$$UWAO7k6O+=A;0cuT>0*Q>bdA-kkttK7 zC(fBQ7YUw1zUmneK+agi4545lH3r_Pp~z{@Qq|OMD5LJN6AAML-AP@fZ4RYqSPZ9xeGd9=yu8q5QW7OQk&2*APt_MuFU zFpNh>7xoV)zjlF{){i^`kVE>jxdWJ7MFh_QN#;>#G$4|ch^0PcsH;?}AIRbxgbh&* zgRfoR`$pkmr-h{bL1|b@E&yv6DF*RuM?jeJ*yXGk4EW=CDY%!NetvokB#MRr?eH9c z;~ztL^lpx57$jjWDv3s-7?!kyaU9DPv9u4Vn>|G|!ecmtnjIVQOAPQpY{$BdV1Y*E zA>l}tHlvu{`^1qEBA9#eJk}_C6G=z&XcO)&xL+tp14j!IAP>LAk;r}~v7gDzr*sT1 zzr27hzW`RiDVQ|N@soFvzz>m-q)25+XR}HYKn;72Wk`tA)Kem{c_$pl!xktKYB82` zQ22QAvPc>>HH|45Gz+fD1}eFy+eTurCJ%XJFu4iZ%#8RkNzq6$fh|6GSPa(cne5MD zZ{nYB6WPk}K8+dUxU72ZhW2P(>GXto5t{)e7YmQ(a!~<{yNNV{Q_p#`iD7f zCeyZkZ2Qb2r--HSTs*^6%i#sZrSLR*dNQV<>`kVsgRv%mi{S??UVS~iUO44ZP*T-OA$#p$b43^#-m}0&LK4{CdNm}g|{Fqr_RwVqK7@2^zt!yLn z@L!-NKLz}G+N4b6vB{n^dQuiF7(8Anw5LEFoU)lo(Bwl2STG=uEldJ7xo|_sW2>!1 zV!~*;#HY3dh&#jy#5VFkwlu(HJANSm^3}5)NRYMc{J^KNY+!EqL2w&)c5g>3ex-w~bDiLomneu_v%& z_D$~qFk@C`OMp?MImXCT(b&hV+?K$Ona}?)W7}7VYsWM1Bt#`f!He+~?7*4$b~6>v z+%@zo08yGjnjy%i(jgDlRdil7ET2Iqe9PY-HHtf!v(I0a`MOq~JOrY@djIghS94G| z2h9xi_k>3w5ttWX6!;7Au!$ky!o0RNNk-}QkaXF?yC zD6~_B3B!O_N%)Mi-Oi_#ZQmVa=t)JNNkx3nL-cSb!2=nSQ&P1_NC*>wR=>div@dBV z+vj3_!uZ6D8FVK0T;Mcj(|B6|Cv9|m0*6f!t_@T8%WhK3DUG4!*cdxwr5oH_hxcw_i) z3&Weje}jM5!rQ`U4u5m_(3qqcZA^a5mY8>jZyHVxFN>{>JrG+t{I}r<9tS1@0*Q}9 zN+eb1tQzM1ZFoC6DT01_`vyFmOkC|}zHq_*vkSkf-e^1w4@BpVCaNNc1;OMyAFNW4 zqNfU(49ZF?_7J9T2wY5ni;+=J74P%U_k)+kE1oJwa<>JOGd^6U*!N6P;qQv?;9(>g zx!+qkJ6ZvE;xHyTyk>!K99e=@;LB_w&|LA%eafQIY`k$4Il)Is_{-sz8@Tk7*_g{r ziU)Ot@R=LNLL)c(D2F+@YVmOn@{Er%(#K;0KAFM3%|t(B2WMsI!b3=JU*!-d`Kvg# zn|#GrnZ}n)M@3}0uQESU1_wsiMrP8jz@p-9sEAz;L*YRuHgcO0sPoCqrCIU;3vuW* zj^FE*>5@edAq@s42wHsYm+&1Xz}aUp`H`Q}TLwo&Sb5L(B=B9b+)vqe_LZfluNcF1wh~@cjY-+=P_) z%+$2Vgo&Bjg5IaR+~8;k&9+f+2@;$Mu`yD5GIIN>H_H=_gwR=oY)qhVD}q(`5exH;20@+BLmvr zZM>xW1pqTkI^`*{vyW2o`e}w#vNM=ebQd?UE@)3U6Y?BzGfOs5ns6orIGmi|qLoF;;4H`s zV?&<@!Gb9kxnH%@5gUisXgbPWuiH7|2FnpQ$%sIuN)LxUUKp)gz0J0>qXj2Edhy1i zCF}S%4u3*D7Kgv=IKWsc@8H^Ov~0#w`uW>c$n`Fbkr?kx-eXYmvyz>=vwQJkQyiaQOWXVH3AK0<5F&~^4dA>W!M|4@e@E-=M`(q3hSY{&@qOMQu z@)J&r(9H7m-^?O>#t2L~oEUkI4}g(`-Aq0F+$Swe5$w)`Fcok(Yaoyd3}V`x*W-CZ zPX->C<%~ZKpC7>%yQct3*_8$^By)lk_Ov{!d*seg4;&7-qpZP>ghD2S5kC-0+jOps z$?hlOI25CA>`3nwyK*-Up0&@fGQ{jE1E#1uv&s-kaF_wi9w}?&+k^&mTH!%2Ao>YC z*)@lZU319UH3wYpq_ju!hvtPMvZ^gjwOp|kKxiPe&-x#XGQN~L}tw1?&5U?g6^1ZDTn_nMWpMy_$w3a7Q*N8^rpTP#e4DAZC`10H^muSY_w+HF^1ErCPOzgDGzZJ}C`eyhf^TNb`*> z#TaFo!+=d%kTv_=qy_IGp^=$k^77~F;+nGmK@B|eIIxUv3LoVJV9HS@2Usj5B|Mnu z*m`UMJ#*m>i@J~qL{!naS=ywejP+zy6i{379r*Wk{~m;vr8(9diI zi1?!MVsEAJJ4_bF!yx_4;Bu6~C0GVQUUu$={ggS2kr0Br=$a>(ro8LPXYooe&xYq+ z1*%5omCYc0(S#iY<1#qOLO8`rv(x1C(a`o8+_sFXw2+%eD;3~(T>r?`$UZM5lL<{L0(fc zaPT4$KztYy|B2}hTf1272_QNQx!%EIAFDXoU3M&b-QFUI6Jt#@F~o*3GH@V>8HfjC zwUq#3z~H?*2&1OY&_Dn+Ui6C|LIEryz;Jv7tw{c1#6H`y>k}-saHB$q?ZTnDUQcm{ zReBK)l4cAr0RH97xpk}M}*i-B#5}RSn7kf@V;P{Jqz{9NjnVo7Bu|LGvg3lu zg497=%)tu1JlLW2%-IV-)x%vR5Lkl`KZ9@z!@H&M+)TJ*Gf2_Tp_UC5VSl`138Wmr z?p#8s6+I^-nH|i)fpiEh1lA@@OifRtFZv-jj8RGhHSF+#5{zQD8y!4c3Gc$W%4o87 zjM7g(7@B3&Nsc|(7r%YTvcGbu16p+4FI-BC+=f8`R@5kBa0yzP_CoNcgRSfYau_Vd z@aGzIVZw{OMsUf1oC&aH2=P`n$i5I?W#er+KADaM8b=2y4~i$hPEkfjjb{4^u17IM zR53Fc;<`nNY!_mY2qLFwnGl7%#&F5pn^~%tQf$>=KMXF}{+HR|1`$(?{DZ^UT87x( z;~{`dvz_#qqm%`U(rkFbMJ0~yX4u>HnLut%ReHN++Disxk^57X{@h92?Ms#Ls=+J0 z{R0+)V2;V$Z*(ig+ybp~pH}5mG3x_+gtTob&`V+!j?V#G0;|>DSZk#I2!PtuvLoFg zTIXK_?WO0E6CxB!t}2(zd#qBbSM_4#5D~6gO@0fxujSi7r{)FK@!$M-288&jAb^Ky zZ)$%0JlH*ihn6EFk$R0SnUzGg;PSPQ{vyA5f5IiBnmtu#o_C8?~F=7K3D=HZ| z^NC8$F_0fVQ3Z_I_#Xx3o0u5|`;40Y@E$n?pd&>g6Dnil{tSrCMZ(R@hz4vSuRc-v zbGIJc%5m%2_f+M@dwCl>TY#$I3r=0|ZVV8S4jE$D5(!8={deGCLM)$b;rW6h2>luU z8Ch4!m6P+jRl#l$JH%EAD<+G(RiXWN^^RE56nG#s8GESZU$E@sfVHxOyw|N#yz%Ap zS=yv2NeOU6#|vPxQjp@SUbJb@8R-zI^fkr+;)fu@a*sW*?;ED?eagrgJu1Sz+(t7{ zn9Bc=n|f3VF9;-}%_kEpZ7P{6eZM7ZdQ^QNO6UsI^r)H}5xph{>{J|jhI|L`$uB+C zs-dfpB7)y94`?%M?v`YDDR^S~I0$_ZMl!x?#X#Eeo|ZI)=|9~iKh3r`)V}&C@JusS zta1>aF&khQ=%V;tX1M*|?%?(vVk?_J8^RdjsOOt-P13+cb0CC6I+RZv-|X2Lhz(_& z*rFKt#Np(yrxc5w_sfyzOAbYy=@U`P5!-sy3ZIdD+OOz2%Ao+AuYQ>v$Wg2Gajfq= zp7ouN<^xAyo8R7S0@H>tk!?PSZ5~dcB*Ry%+-y4IP+QNCBY%w55i3gJFMz=6@#$4~RwH(L6lQ zn1$9lcHe|vbO{H+E-#K*fT#dk-3(!NiQ^%xjjN8Eg@XV<`uEmG;#k;zr^88M6T}k& z0BAuBXW1vGPE1HaB8UK>t%)ckh5dgvlSWVmF#uTCH~}$UL5U#H$c6@M0$*R-m^N z5GC+JCm=+C?gZ>CLTCVF-UF)zY&Ve=<{9SO7!=qE4@zLv^+*m8ME^n@LW$ULQy>!? zMFdO`KQSJgRj!Y4$R9oRAeIPIUh(8Vl#{TFnUC_P5D!hyvxunmz#!U5N$_eQlSY2e zS9`cn>|F0APw~}+9)g4DVTSlU2o7>YE&<=WheTY4Ccqq02oAyplBU3>EUflK5Fx}$ zGr0gFZEQvpSXbFg7r_H9_G}>p4PmMTL%fh<6B$d%c>=YZBO>zzYLyqn2C*C=h6o`h ztQAfR$lb{*fm#+O`HvBFmExcpnjt-yu^i<|{v}Y4)I)#}i=2ysju**8Vx{9?LWIx@ zg9+h6Hjac4AxDlBc|#U9(P0_oL-(a%(PD^BgusTpS@;_H_h&50dw22D+4zKvFO-Et zq^t0)MT8$|c2WnpLG%!djeh`n(Mj#+L;x3qYE+-TKG-x!MpjtHV< zXu?9+`FJ~FZ8K8_!85km?#jA&qSJZg;Yu!CT_yxEmO(BMszW#v$ZbM(Kqy4Z*jbG= zioqbuV#U%#h70^Bkr$yV4`O6!-+@vF5i%GD2brRp%A;4iJk@K^+5xqkt9k?c%4+4C z)BaUfJ)NaD_G~zqP!b)a^h~=h%8S-Ijdz zzuM~m7Wt2hx?doKz&K78c0NKh49f%Rw|UrR}>`VFk@zj7uibapu{^+f)%>Bgf=w`q~;QK&Vf?EiL_>Reb+wcmNL{1e2-Qe zwrXoJMMz(fS{nYo13g%|AX~=tz=j6Qss78^9^{DBO3nwQUZf5Q{_tPL>sBoPbSK>i7^ zlQ!8wWq?f*i7&p975=N2zFSyUgJ|EZ$PDn(z@{0*Dy64QL8`3`dSS9p9SA#n+3Z^}e@TN14#G8Sn6---pv&n>oJvdn^adaE(D16IAr?L4U@m#8S%q6+P?^qW2o*Aal zAIL=>>Ja^21|i@}@qU}20~1Daz%IHl0-|at#;640K_(K?^T+3KfwqJ{@#w7-VGXT< zkn#{zVxhN4+4Y9Ozy61;kOYCPB{UZ$e@}oSP>L0p3 zVSY9&ACcmiJ#FxMd_or|%8uI;2d&Sc=ehEPJt^9)*MRq_Crdol-u?}?Tu0-*k!iNy zFJzOaI^69f^o%joeNW+e=QHWFosOb2_DreeIT|71S*AClbMT1`aX2*hD>Hb4iK`Ix3Hxl*oHx(eGFc2wLZ^W@Nj z4weU9|Fp}}zZiO|?vPbbz*a4WM4aGVi60aR9pgse%UZELE(S>oM)u0H0) z2N+*?Y4ahE{PKX>pZkc>daxgeaRYnd3EdH<35G9(T}v$DXY{Bjq z3wrc876jLs2;qecctv4vhyx2Gy@r0f3|7|I;lb=CabYC~(*&Z7J$Uv&CFT+=H$IyO z)|Fhqu9+M*(uhGV58tKysx@?JEzmqbUkzi)%>Yu*g>_54SDzBL>@KkXJvlRi##Q`tJu{jdMwC z8Z1^pFe}pey{3}Qx#^O@XD=|HfWyvcyFQa~68L42u?N(?<0j(HIL?Df4hatPU^2U! zpTc0+EB}SB;?*+DgQ;Z60d)Z9HL~u2S~>U)K!^5`rQ#dyk!+gnHyC`(R+ex&#vCS+ zj$LKXz^iQEnX;LVJpqUO61d}mB@qmF_VdHtJKD4DWE8*UKy{ZKmIlH(EZN_t$^PnG zdwJ138`+V|e73aH0-zY!dA+U_>>r^wRE3KeK*DzzQo1ju3(?V#tB~K4HB_~FKUMAJ z+n2MH^ltI;^Lr1PV&~s72K^*h^i52{%4#`zxW!97N%^6T^=V@tykekpkjD!9bY+4q zMIQkutR`dN{xKHoK}e}*iNd-d7~9r67lZcV=J82QF&MT3R`KnItrID}EY#2la6;GE zA&L&+>L3Wg30+Gb_V-r1)j=kvdo1!jOfK;E_KEo!Qn0@+7D zI@}xKaYjUWouJ{pQg3fe*ubDKZ)C_cap9yzi)Pac6y*8~o@`jW$WPLok-8-7{W z%3-+Y6w5uQ8CnLPAqNI{2k9-njDfuYUS}~r%o69h`to0Cn7y7;Sh9Nl<}hXGom;ox znd;zTN22re+|z2~k)#=SXja~$EbKc(k_+~q{psHq?Z5F)mloU9xy0ZsxXcF|_sSY7 zz#IPg?56^Jd2x|}eFlzBO&ge%BF6HUh{z%$GKh@$tgOlDnTf;cZ{j3~Mj(Q4;(m{- z-sdvO@~8 zLkqIQ3bMlsvilWe_b>x_kR4f&J#b&PCT`krq(&1$qa-*q{q>ole770uh>Xni z#PqDltVoFc8;4NWr)oYb=0l)6&kc&rT8O{QP$Tk#pEU&BhNKdbyMETF^v=!zDH=n1 zGH+(6MB)eu4lParNR4Vw^kW}ev82qIq5YpLmX)N1Q2DM)Y7g|t-&V|Z(#%lz7mGzf zvAb#&dbK|k8-yE;_$K8)%0)vtftL@u5^XEjCmt6gXB^Rt@Z_U80!SZ>>yrzhUsCeh zBN~--vxhBp;mnz#UT*vUIHFN{al_1{p5IqVPQRjY6KWGPQQs=Go`g5fln@s!7COU) z-Pi?7&bXv8hhpN<2XbgCs(wNl@#DtBi6>h!{(@9BWS`3#rTP$?3j~OwE8#ClRZFHr zZscK<3au5=CwE{=9D*nDSDY59g{=qi5lF~L$pbS-gTjyY;uwRA&=1>1CS@S;2{a~y zWPwQP86a>36@$QcYttY`D72QozdPTz@0#TJ1g8L~nC3Et27KHRP0|Js5 z7-v`*iEtkQ3bWYp@EClSsW15zO##lbcLXli#;|Z20|5dlX)F@qFcW#^il!ew9`!$O z2P7tmRt=v&8uf2_KFyiTY}JJE6H)&Q&u8%YNvQwD7t&(jq(KXVk^5x?N673wy22oY z57W_9flIh)e3Fx6N29Q-b~tWiPpd{S;j zJcdFXCMK(-1J|EoCksSeVzS^g8iE+&E@=qSczo~J0Z4|!<;!S&%nqZIfq~N) zEdFL;Bn}%Kjl%Euc4Z{ZpF)Vaq;YwKFk{-`z)jp37o5hxdHfulCk}9Eh89A+B@O2p zN^pb&A(j{pPGjIed?ho~G(J7Oa7N)WNC@$kG#oAmPX#+Z5N3(t;4}sf1Y6Q@;7$-A zj(|hv^7|@i)*VI9AtA(E(tv~*P_!M8iycrj1IYC`Kq3b~{c%MkbYlR)V|(;IiyQ(f zBjdC3`qJ~d@9K&1V~|opPQR{EctdO@#xgJ}IzJ(2>4Ld=%+m}$9-Qs(X}nxK83+fK zkeoJ+9~sm4<9s+q_WJf)ngCMzW7Ji_{xCuxNG^IjY>04}sq09?04uCX-WCKWyBfKs z9ksqYYI6lfuG@}UVrL*B4XvyQt1yKX$X6?jC|_yp$yX5@Lk)tu%F3{cZ+p|ZOgg`A zd(SY1n<=lZqPwTErw0I#hrX1k`kNL98kPqdG_}P3KokAN_{hMoH9j>6YE7;12?P)-1t!-l*nBcXjYf-s^sNsJ>*tV zmAq`X!rQw+Uf2X@B@Cs8xlT!meu7kh!{+y-p zHr_QLi&h${qti!2KlSIC46VVb*2n>B=(6S6ifn0V&&H@)qr1TpV*EMZgQyK&a5ltv zg8pWnS|zmxH}se@4W~m&oU6ctqa6`k(p@DD=QZ$REH4p11gnK(cY9bw`JORCBZ6W^ zi{VTN;T9ZL=-b!`kWX7e;BSQ`B)Gk1P;F6kZB2A-(V*H!HSt~0agW^|;m(%r#I4{; zj6=*F3#nNs@E2G@{<4ISXGcWEigf}{$ZIc-u65NFlD~xe1aVGpy*$L{O@6SrsMb(a zs}mAoXbNx92*l+Jr9@n=5Ce5Bb9Hqkz6lC@Tgu0k0TWl#>5w96Ex28YTGN@3A`kqv zPpu9*vD*WXhHS&UVD%iH;bt)88`^>m^MkjpAL>8-*I?pCFgh2!)Aq%5Jj5E*z=dw^ z_Gma}@fvV8L@I~G2411Kflt%XE!cQ0-$Oen2$O3p{K@y!nR?EY2&$yb&w^qsg0*X< z57asyIvzr98Wp9UaUjH;UeZ$~We@<2+JXTy$0h-Kgf}KJud*$;^_ayOH_J5&PMr=h z%MA{=X(Xm!gS~TaVfr@IS-#ely8U!MnA}JWBl;W&`JgK&-=pv*F!GME30qt-c|*4x@TD1xkbIVz63GIXnS z_;>}eHmuwtBVG+FK~?g43%5-{Yz~7*Xrc(gt6`8yX7mhG_I)?Z>|81&a>8=M3Hmz^ zfA_}UT}ttHmpy-JxO!o(8&2{l<>Mr2S(OxkSz=>!dwd`vwI^n_GT(EzuhmId4!t;5B9clVuZ=w&V_U+uUP()d#~q?ML?iELxB`Ka-QiowRC_;FX21EPR!m z9UnDXpcU3=h5IYwqkK8;x!ooH)eBvUOwKS>b4g;pU=I0mLX?<4;EHw-nUN56gZp{U z{-KFcQfF>Xz?M;c$+yQv$$h?lW|?1K6_*14^5b*z<7$pRv-+Hiv%FUGHCZ$+Dx8~h zWvhNv1lc(*if}SNH4BMm^6D~yob0cSN}X$v)OK~n=*kUlb*2e*rl@W!Z)bR&X<}W8 z%t#bP3yPwhswYxK-+}nJw=P`bVs1EC$erV4I4a2Pu5qJW4Zl(0FPGQccxEWRQgic} zVb>KSVfdXY6cD?wm{sn-;ctJon#J&q>@z;fe_RW-5uL9}u}*1-H%~OwQFrU8`l=L{ z+=g#0d_xOWZ|o^X=M7EN#tYQRI?6nxDkWUsUf(d#8rLwRkQ+W7a_=@#76JT6t{Wfa zr*ER9d??@84ms98H`Y<*rY5REYHqzyd4YnoF3UExsRe47$Xe?!I>4(?T!GG8GB=R5 z8$PRrK`psa$Zv?V#GCS{a7(JiGPDAU^PqTH%$+)_p{{USxq+-Td{%4vkTM*mOj{_! z&y;B^WjI1rBa%pq@^S5=jB$o16tVRw`Q?X#mjZvF%5s`flO?`d)I?-Ft)wVxXu-Jl z_JY)EP7_Fe(=%#oXMEto?i+g?Ld8$U* zyg6;>ACz%&jIIVX1BELtQ1E4QT6_Izp!oy%2?%(kZBBz`zQ1AS8^^@x8j>wtFyG@E z_&`#zMG7T|%=>1MsfMyTYfoM?j*HRhO*xc!4rSpRQ)6_ylT&t&Ng)p1?kX75Rgi4H zX5hAL;I$B)9p>|;oW04#sHKM6vMsq$dcS>LF}I}{U23=dgR>6+n94a6?%3Ouu_Zs% z$X7R7UFOfF3jb+KHQ&!qDUnsBEEiLoQ|fo5sx9|%C7w3mny0Q5?LsZPXh#Q8>NL@qXpQ<4_FbHLQYOZ(Od*t^m@b4MqlyVg?kweQB&nK}RB0oG3nM=`RSVG26h*IcFai2_IP~zVyKo~PHFyBh5QjZB|{++12 zUa^E)Tb&0~S}T1F_#R8PI0M4R##p7emG2>`@*}!%SqZ0lDOD8Q0^-TEm@@RGM`@yo z-x6+3wOVJG!dncvl&N2fVF}Qnr82CAxarej9t>@m3Tv(6QeH_=O<^rG1SkP)(mEkZ z&3)KGx@JcC=z)X8fJ#*gkQgvAA{`OiW}a?|Wx55U8NlS#sVtAG{V80mPGWfoRzn_T z;EYz6}Qg^DULKlnl)Q^-k*y3{fM-Usv2{Agu zL7I8=0Ky_T#cQ$tSqbcSv!n2s4w%;BV^8-mtfWl57K0u)kV_eADB^>*7%R`1s52(( zh$U^-w?K2Ggj*Xdmi7{ls+9cXdcz9nQ2rPL5b$A#IlvU$0?nC1S`0r@CV5LKis@I# zX?L}BwF*dmuE1IUznj|oH%eV=d|Qg=(F4cQR#eKX32iCP!D%|vyHw1bpQt$qu-Kgp zSnVDINU3qU;U{(`^dS7?>`Y(S{Ex;(s?wI3PUQYdo8a zmQyv}%|-81)yb%61%-L!Aj}f!4WQ443zQB7MKwAf12d@1;)JUo#=o)LtN5&TKno@1 zlx?_(`7%WhQ>@t{s<=qysOJ!cR`YnkwHffc(_RlbSnPCmZTud~CMcdg#>mZ2HeIC3 zK;T)WG0V~U!Uv|GVS<>BQ2App#RbIwZWRUro;4oL8ZRgcB|%^U5*7*Ah9EaBu8qKK zNijP3c}ahpvI^k0<{p6Gb(_M{lfbo6vsHjWoHT+3jwj9$;_NN+A%JeK#x=n*4YwBG zhT(Y#zo2I&J>`JpDQHIk_^Po4weaiV>pJL|<@ye(ml2f%M5&NYcwlvfyj`!N=3UZe zwQ&+iC@fz2Ee)-O&fyZEf<*vgnBRhl@rV(?ooby8H4x#2lS%@1q2~6r(kF!BhItGz zrQIBlr>3MVMGS&pKR0SL@f~Fmm5INj%B%S;mryg9k|50Pt1G{w0OfLGFnM(@DAYfw zjpr#K2=rUg>?d!wq!SUh4Tq?mWzn(Q%)KF4Ss3kU1R#!kH=FTBJ^K`C-!nM#X0&kD z?!Y#)ZsQ>;1!E{{K6Qx7DV$p#?p#(q6jxrCc8Gf0_RnyXg0GRsDPnquImz@3bxMDT zvMO;0V@!uAfPj&&r--jQ%%K%f_&DxTq0kFmEJ7E}PG0Cj5xQW^bvr@by^0aKhBf+B zQ04$Humo*54$OYR;$3ffeD^qY_Za-TXmP{8j!{H%N8u&ihNG0}7-cY0J6t1;lxyTr z{GX93k1-twZiM1y9zf`4=Cxb8#uic=%c#oZzz)zVZ04eibkh|u!d3G@g_ThiMwoHm zQ`NF&OonFPW@~JX8>E)Q&xA}Lx1MCp`NNZL1_fIk0PAp+w5vMhWi2I zqBfnNqz{QZ9cC-6(oRr1T$(Op_=Qq0_ii>cP}M%oAdMO+V+1FEG)%4(Q$4L`8t`0f zgt=(?<~H%PqdW(uRUv1cEdPfv2uf+!!wuh@*pPav8vn|WbsT^MlQ4-{FlAWEtK zfogA$0qxod1iz$cD&$$(8rSYf;cSU4z&vFpec$YGG211$6;bJavjHbT5G|{=dvY zcYgxQPE%IG#lMuG4al==1pY+!9Z=46SERTr9!)wUjC5%V&Txl}t(-Ik7e=iSuBsJ7 zYqX6ElHylt`;sX6ge@Jp-;|CuN+GKZOwqA-%zcctxpH8^(iEe6Z>q?s2Vk*ur|o9B zGx5K>g+gOSj1C)*kZ;;ck%!j`6u=&3H6KtgtZN&=_R6C$!@BOJytAq>x%(>I4k=1LZdgs&B#78>M&ilQH0*@GpY%)Eq6bpB zEK=y;1JK;nbZ@vZx*g%I>N$GCf>$s6PU5yTg-~|pgmb{APO}6R2IKY=O?OUGuy`<> zp{kWlcTQ1;F3Mn`#IT%@8nxPvd!{FpxC`3XcHYBli#vp*6Xps}`<)fKXTD4btwgkS z(N%M&$wG~_{s}8RqVqv`oaHJE>+ZDtvHIQV`QvcWIc?+G#+|lM@b~U1{MX`g_cR4; zoyr+|`ZvlVCcd_s&QM|tWgTnz+I-T1;q#MemUn4D76E{@@~TqQ$5YKl7$NvosunKW zJuW|qkqw1A!cqWIP72X^56E0H&M5}EaOVuQIj-K+McuK$7p)eHhM3)H(D(c_GxvCU zbwHEa>KbD>M^(Ev8O~A_Cn-ETD$h{5brvCX%{l?_CJ!$K=?R$g0Q0u-N#m?n4`f8* zT(5eI({4zx@Sxb*++VA-5$CA!XDQ3^dW&mYI_@p5GvF)hhLhAHPW#3)lu*56c3OT~ zA-63(Ob3mnK_AiqEv?`xCf7iQvKg=-xmQRuXk#qC#HPPsit9@dh`t(W)8?^8R4i?3 zudm};tZE&MRS6%K8uVD=H3vPAc#K_|)VdNbEd0~(>L0fO{ECf-A1E~z3MVO$3m-k9 zip!{Vsaz|+zTMJZQ${s|EOoN*K~(&$BbIj7R8U2VrkZc{SbjiJNWTNg#NbZ&ANZ)a zf+}=^YETHW?&^%(ay(~sEZ-5+f%UjF>%|dC_suUkG8P|r%6t=dI|y@+vo*T})sMA2 z+pv!^?5BvlcC#B!=UXKNssFoBnL>2jBN96CG=gN9y2P)4n>&c$`v9c#flDqe#q12! zmI`)7`R0`4sUXfa@9p5RDNp15^QJ8g-00Mp^<$yEn}wHi62}zV;Wc#{sc2>P}&U4p)2`kE~l$3a(n@ z)&x2z1v*|NZenY;rRHn_Q1BlH;Q{sMa6k}N3!7Yo7&{$aKY9bQWYw}LFD`tZToyG{ ze+guk0YsMs2-RjF*e}W znD*2h2u3{MkD3^f4+b*`zRUj279ohfa6O1Vway%gL0S46?9D+l0%%5WRHqP^7)~VCN+YyNw<)67OoYZ;GWI0_)xiJ#}gYSWhQE0)K>_UP?dgfCVbC`v&fmy2S=7%)MR#v>R0iGMIsetRL@a)%1 z|Ay33R6`pM_0Utx17brvu(IJMHmeLbz=ANeVM#vLaGhFkgEHNu#BG$t&vb)|xy^xm zBiAfGeVvkG5B_yr0g7WvxHTCrQ^2N%E7Z=b)Xr-Zp?e}siD8<%Oko~YH%+FlQbp>f z`u268xjIa(v;v1Bz`58?YJCjfZRX8MDm9m}ZaP7j6grpZgsqDarVt4ap`Z4jIbpQ% zsL6AegLP0G&;(+!*cJ0X`1s-);$ke5jaC@3o%^Vr`>}Bk-G%>QB?7_-mL&#QmB^Y6 zUs5TslrWTlEeK-jQz{46DZmn}i2?OXJgP@i;jmlomJVJF zop-SkeIA?VfKmW+8+@D2#i$tsIJo|aQI8=3Tw@w6(H~$qqnWfzs6`lVwK#2P#tzgl zi%UBVyj`uUXr`+5cp2Ud^Bvlgf)Ahuwcuqrth!sQd}AC;KLltVQAqHI=^E%I*%KGKC@<7xV7Ai_M^4xEfzI+ zPb;_5{-n(qCFo`=?&fOk`Rk<+{m{Z7{7Bo`ft_si`7n3#Q?=$RB?w#v8eRoiTMDir zz$+2(!gk$oW-vjOfXgw(5`po|wFr!9*vMtvk6zeidzmuL2cPW~dgfXIbEn+7nAV0? zs#E~_wiRssE^r{VQFpsByPoc*%qd4g${|?UNV;ULbHrhqQnpj&TGZ zAa=C*f}^Q{1HLBvYS z+UQ2O)xz8qU#BeZYA1J@uInkwJgtA1G1qVllx>%Jdc`g34o%#+P zj311m7Tm;FsC6muD+Q>Vlb@WEKgR55LM@mv&?VptSOWdo6$2!_Ed`zcRA3r1?&%G+ zz^E`fhtMS$9T6TK*NR%uP+j$w>*{iV1n}1BOx?g3ddVmvlr#Em5zpw0~Oi!q-@4PM>$TYh3Mmjinz(#}( z2W%!&@IUiY@iqz1VoaU6?3u;2q-S+v3AH*YJGp^p;g)hX7C+ma zKrgLoxZQ?b&uToo4evdx>C@GQPWaqqtdRusJNrM-SW5;ZM@!7lUED&! zYfbyl_cLs+4b#2;)$n8ZpKU{whjP)Dk-22!ny8^$zaKe-OL6xPTM*sA*?MxGaKG^K zum}#fo%`K_cDUQ%+AwFXTPc~>lcE1!>gLaJADuZVjbJ0mlBewN^C`Sq2|*6B?R_~y zu9{CqotCHq1S5U$ri1K*Z zb$kDXBe^~z^7TOry#&5ueA!pt35miD;+fqM9T2USklzkksEibQFxSh`4?_q&;Sw-- zH$^0aJI!z)DqQj^$M<|KLqnAG&63W87i#n>=2|e38cN}4Ux@wi2B`A@x(}P>3t7wo z5s^Q>SPZ}qgLrd%BPAV+7=!%!;@c;2v>rx!@M?UKQQqj~`0{{ABn)B@Q3b;laqyH` zVpddi)X*e|8JQSAKn9_&p=>*07=^9dwgZb$dj>^u<^noHkg6YU6P{{utOm9E;%P-lt zoZ{hNIfI$oaFzl?KSrt%aJlA;vl4m0NSq0`$Bbe#;UbimVHeRq4jKl0$z5k9Dm~o) ziBF_VOdX%3O^4uL|ItjYV{iHoSp^}GdGqHZNrGc>okk>DQ z4%VXQ01{5#|K&M&VH{?RE2oQmM;qb|EO3+KLw>n7)Q8mE(pVr%{(l37{%@er{|yxS z|4*Qh{{I{(^#5s$Q275jNXQ{ZNPjSFa=$zMKGdum_h8%xZ9>|~v{~s*>11ZZc@E)X zK_$`#p~;#HZa1yr>H`js@8nTf^!-g&B7bdJ<)2%qwQubo7M#)~x~8eF{QaH8tZOCN z{_{QDQ>h(=X_~9o(CmR%{ih3gQJaK6w}&{te(+(!YqhTpT>9Pn2izOiUvakT=ak>Q zbo8&=U+@ksII;3>s(I?R_lGYFX?yp_;U8>z^y%(_eCLlhW?t(g1To8pwZ8j=h<18! z@y!#yzy09mlc+o0IDmV|-CehZ{B+w%aYf)UqpR0Dk0zY@Wq5W^*tv+6Hw~IOuJKQ2 z70*94?WU^l@%*ME<^AveF)1cAWc2Z!k8imx*WYq_GxmhrH>bZ`r8_6P_|<)G{nXJx zJwjg6QsL&ihgOdxr~Pbvm^b-p-qIUGdpxf;WbWe&KY6(&@0Y?EYbM>OD_=0;wF!Bx zmOrL>xC}hGch&c$UM?rxFR%49)JV@R-n3@jiG7>qP5)IAIo^8fK)}9DE2dwV6Z^xJ zfur2XdDi7Gwdn6fTsriIWMIL)(3iEh_Uww2Bwe3Xd(!3lmw!udM-EtW|G-;E+AY_w zK1R#pVrHM{xPNcXzNzz*`wwnH90F-;>r4aI8!VT3#Q2QQORuzAA9DBtp(rpcd{9hW z{3nqU8k4!QX+v5!y~Q7PV#NxnzuQ2!G5Ow-$D^gzxMeX{-P210rmsABbp5Usx7M0& zUc33l*6)9IX}EU(@8-v0@2-)khFG$Wlm-gJ*owDfC?bf=VpDo_~ z&A2qpiF2K=r5#EU*9vzYa`i9VzmyxZNubXOAYjYiY(++cN!Qd|SgX$Grtmn@l9u9{ zhW7fHv8C1ZXW!jdcC@?f#-lxkdLQpNGHqE3iXZ&Pv#!?d=T}eIvMAu&f!;^+F2bLx zqq*Ud^6f!R9h;xX7EV2ycceAf=|(^d8m`{d=yV}bxV=lh>GakJPDy3lr$^o>-K7tY z{k$GE3|jvxXKx(;!|@|NEd07^A%Unv8&HbnN?P#JS9lL~@9g0?uUfot@*lok*4CZp z^MBYeIdtzUq0a`R58l?^{Nv|OxJ&n|zpG0f@_D_}6r!_HFr`oy)UUMf<1CMiqurIe z!##I?l==Bx-6wBe{zCfIycPAF%)(=XTh=@((R0h5G*sS*Y+m>Dz(L7{qY=Lxts*i8 zonHC7w2D~r#nPnrNjXs|eGJAo?`8j33y?yYU>&MAU8-x6<(=x;KqkgyK^V?@m zpPZ@Qdga8nG|e;H%Q%XFHno4zX7PjTkhD#6ZCxv2cj z>M3iQH{@=TUvCQ-g+9#ThJRCS6#lV-IESAQ~m;E(&h%snz? z&DT?w>^tbE`P;&Mn{}^}6ZPkLnF;f$Z&rM$Y zlIivHYi=PI&&BVUM2e?T_v?6%xq?}5`+K6G)Jt#7yZ5)yf0sX6aR7OQE-y(4{#?IB zH_qc})a}5ehmFot3WvviQ7YxlYPb={UzZ-c%G#cfZXBPrzI~OiSnBlIjJsDkq2DXQ zee%bSxw_@axvm6{D=9Mvw@hwrOMYib>a~u~r~hbpJNeeP!^SvAPu$RWWBJ3r)sJJV zJ1%vszjC5ZapJ37*X!Ds4{(NzZn?N+9=~~8oIdr3^J4$IGqsmLwEn&Nj}f7T^E^k4 zoU$dERmx)xw`ly~ zT&MLHIfL~B&$#ie2R~3=KbWZw=(BXNX4KCe%k(j;T1(C!7-`8{6C?ZlLLE2d=hn0Z ztuM!I_r037Aa8K&&1-eM6F=tpl566-e6Q()(4yF%uT?G_APgCHaIEm?&S8Olggq5# zo!^P+vC=flR=*RP=BS_!tJUy&?wU{dV`6e1cM_X?2mhh};wblhy_C0VCHkXc)HC!j zZ_VGUc@GpPda{IX{=TL9ctz}CkIQ)vP@YHqSB>9zXzLSMQHYbfoaH{vf| z5p$w$yjgiQen9+yn^(G|%CJYXmYzSfcG_x`=z8i}+gGMH{`r}=?f0)#0r#bSeL8d1 zflD4}uC-P7G$A>E;8_>{otHknRweWCsM>t$RKm*4hqnYe+*x~a+5Ei*P3DiEcuxHk)*fX0x!7`Q zdUo$w$h$eGBw6PKDW|@O0i-HCWIC^fx zmtNxd$yE(SEdDJ~gm#ZVR|VN#mh;mhXB2KhZ>s1mTI_PWpyw@f>I@@8d8a>sOWw_j z61nd62s^d*b`;n4zM1fQR?^6mzHQRDr!`cTwAXiYr=>Qlzmebdd;8JAy7Pg2#iG?q zv-eNU6i)t>Nqj{bj-8jz8fNU0qgYRI-AIC#`zeNaVWTrLbxz>9O`F~e>6P3ELj6nf z?dC}T>bYL0R$g=X@tJrV#?)W7uA$02irpSKO&EK`4lTcD$T@VleNFzWigT#$TV%=* z*(3JnPsEkd*22@T`_65RdA>yB{4vhtHN~d8rfoi``TCK%>_*^HKOyRDr(cO+UpDqR zGW^HlhV%O8`h`EyPF`pAcKX}z7mJpAtfb9J&%8HvwQ#aA?e4aeM++>q2h)d+UO?o_ ziJKhP^>TKvg=g$!nP}4|AuX;`#0*|JqjJhb+4O-ok(vwp7}I>}(n^o2IpdGsn8vO~ zw0$MPOOCA)jbH!bsjUHLzz9Rxm&haYawC?t3Yp`3HQpr-{`h8Pae76>qj&14L}Kdl zQDT8!yb;ph78Aw$jxK3Q$)29wFzD5B^(jQeSBuRVqtU3%`Kb*rf;HI5etX)sdw8$4 z$oVL{dY}avjU2W5d}$Wr;1#5Pi>Fp7CT_fno!aMUsbgTszCrC_x>cH6MhC>8?X-d) z%?iGIaKf>n=7Y{W&HT=!>7QGASg|H##6M9QgY#w|d`E=o<0g-MA<-;n=nfkb(oj!i zo9emlUmw*G`c@d)F9OHk4`K(v(N;Z)y*uHz4hxAvcT6K88Z;w#T0e(Wb&tgQiS+#>iT&_1H_c zy_EkPMVB?p*^|-2GVi?UZaE$6gO{9T-!nLyvqbAj?b2ecGgIRl9?H?c06k_lYi!Vk z{A}^1M4wgd@T@KBT&%dRMX%dSu=C{_Q};R=w;L0(dP42fVw(9`gGsK>Q9vkXLJ{A* zVz}?9=yjVX`AOb1Yn(!kJ6m?NdaRIriN9xd;d7({)T#hMZF$o)0ng8;mZ`Hki|z=(U3BeS4ZyCj)u=-63kl!j65s#?bE{=(ic_t3Frx zR(@BT@mWEnvPQGyi~8zm4EqzFIo^I=&bS}IK`X^5H+NG0WOVuqN3q}F%mBN6vL$_r z8*Jye>=|>pVVcf#*B6^aMP3iJ)I$C2P?O+tL+dkoPm}4=3a*6zvW@;IFksDEbRr|TaN)ZQk#$83xW{JKM7_iD+8%YmE?>*eKb{n2jrf3FJK3e}&OgM4E`paTu!bn`gNV_ItgrJKELR=U48r!xh8`pBX4D<`0uS8tMw9voxce=7E83X^xm zSNSg5Ir)H%b)IWL-#}vrpL{=WLR&U9Nb&p;Ej8ixKC=xKTN7?`yxQy-=g;O@eOg>} z_qLT)?d?jokh#xKE@D2aD3_1)m!hJBtqvUoT|PYB-;7QiuB`u<`8v35`w0eraDAx$ zyGS=u`~F9#AA_7{&nf0=0AoR`Af5wh#-2v;EzkN7tENbt*( zdjsC38U5)v_idbX^Tm38(G|Z?6e_Lj8yI->^$dfkL^fXb4{fC_^7NyvbZ@j34OByW z^Nu(?(fG23?}Qu<$nVvNorM+xS-~eX?`^xexbK~bZ}>++&S)_VN)B4<6jjTbL3q0)vIN8;giLv zv!jwGYOS}{`R6q~zaHJ~73{aF9`y>CfZDz_X&3F{)vs%KF_wL9udsLd3ip=E;SW-H z9iQz22b9haa;=q%My}Y>IAwm&q(a{#H+_d!A9!w5PSlk)WyLIx$n|Y6tT+Agu^lb$ z$oo+i{Hn6o!_N;jxRRuScahCKS*7JXlgQ?lWha?OYv$B_$hYp8tks8`*||7yoo&Xg zb+)hncvHo=^ti{qnQ2cORv7y(sm^nY=lrp6#rHLuwiSDpUnvgS85ONwNbH#IJ7(=N zxBKC<8}CO*z6KUOuUGS4l%X%{nNEoOJR?AT8dljmbZ5@B2fpd+Ks?g8tW|pC<$kOS%==rj|6R z+@QR%(D=xg9JNK^*+$+rTo$M zCZ2`)66?RFTtuyBUY}+$FQ-ktA$&xe`bW^02BT;00qeQ4%wWxLbBl1%wYUs@Bn$lf z*NEWVGw$mI?hJ=LJWN1jB*D}QKgYs{n*Kb$Tn@>1RWrWU^wJ=!hVos@^ z<-y0kA4JxgFIF?|)ICQtdzlB(Wlg8fj6Qs$j$4*8DnnB^dA&}DoS_+5IIqo_c1N1) z+ZvMpCG+TmdX46Cz0`y2pI0t?@>EVg{!}xtU}M;`V7JBdAKTM5TD2!>tm0`3u(7OJ z9wysIyd;=2TO&gYIm8dbHscc`v~{M$An@bJ(RH`wFcKe9wmwJu)N9$SN zciwJ9x;xu+T2nVAy0s$qo?>3v{ST*mHOk&1**BCZGGU$=_|4AWIKJ}@8nkoM@+mWB zH=dZ?_;h=Dd7VslN#$Qh3*4fXJ~jB7MQ<66{<@TS%6X+MUM9+%GOwXyjK)$Y z-9oeKsxu~P_vRZ-CVD?P&Nw!8bW=VjXyl=H^v~DmP5so{|MH&JOQ(vr>bp+WZIiM? z2WbXh^Vu((k^UeVKDu)k%3i43ZbRlzw$qF)KYX?>xzwB#JA1D{7df)qlUMah4NMjk z-V6MZulfA>n@_ZU!)%|)eUsh|)Yx2X)bHs2!Y-^=^4=vbfj2z!mrU1?EpAK4-G?G(PF* zUK@M;3io!qHJdlcuMlaqo(>gz+q}2YUllNbvthx#WkL1_BJb@M|2U%g1TkaJmj)Oh z-_76t5yZYj+{t}SuC`dI$?hDUT6Oo-_eQll_k?jD?w+J)&olOk)6EVR-7&9xnbYwZ z5$T#m!_RwX(E?(G6F-;IA2n;dFU`vc`CP1B+q^up!TUk+j>2i)fAu;@&j_hMVX?Dl zhM-iK``)tdQ+;k+bGy6trDBf%Xkpb}fq=KbP1rZEuwQt`*SE#2P3~GU?kM>j6VAQ5 zvnW4bCxutAy3ycm*qUpn1%}Ay=;z6wgU)NcX()NYp=tD`@9gncbXzdv!7a_>bqe{{F@P7s5|u%=UaZm9kp*(iiYpy^cQW(8txVs+D>qWUw9f}F5C8|oj9b)zU%hj zhoq>aGnAoYayUA2*PN!Y7V#gaY0Ttkt?B)3w}qd~y}7wX(Q3cy_FiM}ssgPiA6{$h z{f9W)adE<%Yz_9`2d!Ppkl(ZVk4uYg#EDilo)v7AYwkOgD*wvSXy3#>TotnFnK-B8 zQ!j$AYdrM_n)WReb&TW6PE{NckF>A29a*%57AepRG&N8!pOO;yY?1tad?RhuVKm{v z7Nh2Jblu!C$Hw4(Onx9rv(Z>JG;q{~M-BAnN$(R@>YOyUi+N4|9zi_0gvLH=Mgy+} znztECXAsuC=OAu&?x!1p&q`(@zlxk-$puz(Pv1>~3}JdW>tKAC>}1HvH-Ui*aK*-= zsqF;AasR>H=xp5b<1r6QM&b(_4;>syf`i`ZJwX?oVFrW>ZDhIi_oq3Q9F?;Ke=_}+KU|!5ERAi&8F%-M zg#K=X#-A^CU7=|Vw5=!=@K9lX!^<0{Zn3*K{%OM4AqU>ZBiF}AI8nP|8^nT96DPjh z^sb721u=$t2OO*n91^M9+N^=)0wJd9!D#ip3$(bf|7v*fX@xOx~98~|l!}NV_ zZmx7~@sv4#m>!F4?Q#6c1EF2wj!lU>w$DU@!pP2exmLuqH$&|E7C!Ebj&mB?agSbg zckBJir(Q4eLj*&c40vqY*$?l5ozI<{V*vl$=0%b?fdAW;cvhFqccBC|NEx65456ZIqcIh@y+!b zC35qq2UE_EHb?0LzrJFuu!?S5bm&fOX60XH^`Ac)qE&6`8Z8k_Pj#lJ+CDGAtpgQX zF5a1($S(+_mBv))S+yREWyQZ(JoR+hNyeXa#-D`uva8;29(_LS_o~iGOPwPI8F4;5WV*QW(1)rPrWFudGd&;TX zmNzwzFkI`O^R{E5(Xq`V-qzU&hD|mG!*9s9Ee~aJozraRzpUXQVN|H~w~ayZvB`d; zBT+#Ny4)U!63_<{2L$LPVf^ zsz35}EUKs|D`hesK5TB5wP$8(+zG9%w|{;4FZ0pIK59zpH)Tpjt^2s^(VZ#zEAFL_ zU3}=8Np2m#`1&rNkDJ>ThTK^bOa#{F1ljIhY`%KKTxe<|y>qr-aNO!9c#%ZgJ7QY#+!gD#R_{1e|Eir(V{_8t zH(fhe=$4dsSp4$ob1cv(<9}Q9!a$n+m^CkPdhO_0!TuuuVDZuY;thjkYZh8ux;b(0 zpc1aXPw22(_ciE5akwX8ffZFW4|&@w*Q$; z)-wkH1{f9xy9}mneBKZL@}Jz<|Woq2=G+zdF>@ zx~RNzB3?)nTRZNHce!!H#O}yt?BrLiHN7HMpm(yaTycoM^VuxlMd}rNBwOQub5i)I zxeZe;luhRA=no56PG5HR=;8q*PM+tf&75{(xNm&A&giC7f6<1<-_KC%lPi35Myq46 z;$8DUAJ%*wa45GeU;SH-Kc8*EE~TFgc@)>tR1j%?^rM8)AU|O&{@&{Uct~$StYGT9 z!o}{_mfm0wu<)IyyN-8d?F0x+>nL0M_v|?DoOe&TeR6sRyObSz{7Up>_=+ZhvxDa%IBf88>=gyS#WHvD?QNJK0Tq-X%lO9z*Z-A+4f z@%iDwv9)GvYI^=T^XcT80bAc+5PVwlrM*`F=3n`F1G1M^UA%nm!nM?eJEv^OP#@ZV z|F)LUl?J1OXF56TEna8;2cE{et#!|0aG#bYS)7aASMS228ItnCX~J4La5qiEdv=|g z7O!XOxYFwDOo7nex1e&}Kl>V~rcJ$Sr z{W|Hyw-pmt4c$00=W=*t(7E&dF8ICl+u)q{pt*I(t25>YY_B@UF6n#bMC``VSW4k(LZW<;^M9K*B^YPGmK4zmNxb-kB-hVpV-p+dh7}FDSl_245SO~``PVl zyJ_!TF!|Hof`DMotbWzA22>}u|M~ajdU;`(RZMR9J=q|i^Vx?szq05YM4XgN8~$ip zqQ$$D6KY>wcb4q?P7?w-^foq4Z?EFWt7o4|+&XrBU0lkE(~k-EgvxbK>5R1WX>qpv zQCCj(UX?2@ju|K1pTFbyxw2<>G9Ii62tH}hBi$qOBUJMqUy=0|M4i1mxs_;>2F z?j=fa?*%Pw>11n%HK|E1atde6GC z#$PWnKHl=t!~jOg`1f;%ZRg+ZQx&=FAD+$g_A$?Q>{J9c;7xa9!p5ZS*f3{a(+9Pd z<}jA|265B)OD*GajOp`Bs$Jt6=gK!RWJ}(}B(dP|r|`z)ErsAxJpHeyOBk&YpJ|T^ z2hLu5e4NJ!xL~2{<+$VY!^v^q8vbdBcd3s5u&;f*@7OJj^}0*7HW% z4C3PJ(}P&OS4$rTo>^m`_b!~f|0zv~gfu;(Ptxip@072cxUAXjbOt*$N4|0EsdvV* z_=NPzr(xAS-@1foFhtD2IfEvK*A}l1U_P1?w>XoYp!U^xgMYhI^p|YExACb>3f!j- zd3-)t>HXwkbE3h)!b58NUXNP&*#7mnRppA+BRl3BZ8)@{DR$-K3=?g~T_^r%sY=eu zPc2iJ6B3hwb!E%T&iNO^g=6OX$489AZmyOcEir%JUOy|gefwb1l^v^w@m#dI%)d3* zr86}H)U}EliqE&lJCB__u#x^b@Pj<&x(7p)KkLQSn8V{tr%U}d+idr+lo8qTIQgk8N7V^?Y=+iDoyW2eQp?f__=V{i&=+V z(7>{p@2b5$H(#~Ojndt8PZ4XNRljw_oQC+-w^q&6W@pjv&(!XLOttgl9HNeHujDeE zd|MySTPZlA!5dx`)803J_1_tcMpOI6eYtC{uVjkH%d{*H?tI?zUj8+uS6tqrl`MaO z2FvG>e8MQr?6TX{7#S=qdbrs5bnpD-el{c9Kjl2jbeDbK(tpD}oiCH}4otjYk*b;b zwja^>$CZc2nZ1wD2Wqj4iw#%-nu3yw24p7skf-@MVaN6Ty{`FXovd!o^vs&{A?uCV z*Xa$xGfun__43=G=W^TZL+J<0J|`sdkyUB6@#inLzV^AD9`oi=$`T(|@{T6=qT9C< zO6;DC4og#fw-~)ZuXa@D>e*k|y^GM{5dIL{x;ORmHyP22yhF`|h*spUA%w3|KGAAr zEf$A|7h4U;7#NMnSXRn_QxW7-zL>bi>V)gNM`fYWgTe!aQ-9GVvmjp=swgwyf4`OiFrljQ|LgZ>aoJD6;az`zuK+EnQ2XyM**1v_ z^}pYX4*I|SLv{k%C%a66R$=h};8)rE|J#=SQ=p4*y5X|uK_npof&W*3x(DF@v00d}-_^B>o z@QZ5WgSA$X7sDmI-+e4x;33Me&~8r)-3_0{OBnhQiNc6@VZ`VzUkqV*Oivtt$CB@L z_59_lO-&arT{(WNst)QzDl6Ha~B7Xl`y|dkY0Wsx@Cvwc5CAx{lm>y3T6n zLziq8%Hi!Ap&V7KZ*A2*5_I;%UGDfzQC>*o-}Y-W8QyV+Xx ztJ#N;?TU6fxO#0Q%v0*OuC|-b+q%YXI`zaQQ~C1a*0p5fIvZ7LoiY`k0o=Nt%-Enx zZ&IdXo%dd5vVX{&jjEh`%AD1wSB@pU?6z(qGdGi&%evpu+}c?;+vfW^o!N`wfhwzZ zzvW*U!udb8?Y7&p$4ex&0cOzSd+(J{i=MN?tN~X8p+*V99q#=TWWz@U>ykJ9naHo`g%oLw9Gp!+;-v z2ST~z1EFm-izJH#T1-#s9Z?G}tf-O1)znCCS{ho|knfy|NmyNO1>|Qf0OJxhwmS6zA zt%fN*;%;bBqkLoa_X1L~Z9AgIUwTDH*I85f0IlTn3ob0Bo034jC7AE=g?k)DKjW|Yg$uYj1~+(WtqF@a9x zuMT+lBxHhz4+QDZ7WBZ}9J4kU4bJ*hDS9@>L6r5HE>nb?t!5W9p&g@sAV$nl5Z&I#Vm z4v1ynT`D{rse#uI(gPnKQZ{r~Kx*LagPfc(r-y|j;fh5sNBYr>CAejv)Tlo=_K*%i zdTw3VWF=)M0|Fhk4i7@`n!AfcIX+nQ zP0&LOem|u54mDUz->y*t4L?K=3&C=)4ii&qspr#HsdOb171O3P(8V<6R&e3IPOY>cf0 zDm(qG95oEVi{>t-5_Dm-s+h!JjI9SN{+EZ_mG6F|FOSW%&?7F2wPhLtG&6Y0+zsAQ z{|SwJ9UP!Z&0SI82zcL}$An@U^(JF%?K$z7kcn5;WJv`y%-CeyvM5(7z>Wg9tHAoY zwZtUpN)Fxr6v9pAQd_Olz)fiobNLLy#B8a#-dSK0GQQ?H$`Q)y0>ZAdr6QsU3rCHz zRdYeYiwIAdE#=cLAsn}bZ$-O|7FG(Sv?~bj+rqb@T}7BbN9xGFMlvoLbX?+wY;PcJ zww2!_;3ma_lhRVtlOz&HiP)(C8Ql6c(Tz&fzfJLdVp4og%7pB(P|o2F!m_P=JL9{Q z9~(RXuJq*V<0h4aBa3E)zs-@F(OM9`vz2dd4ljIDp&NsNCm(_wfVpC29UO#2tq2dQ z0OCACIFKeZr#%J+uaLUXo*-ObAvM-|N->e(8NxdtUz_=yO7MGuux6#Sr^ZXAOWF*~ z+0O5w_lm+kVM1a~5`@@udyTN7QYz7EBR%!J_p|QCZ`{u>*Wr6*5FQmOkn8gs6l`?@9X%?NkH#zaqT8 zn(wOrt-DxOQdUwja{qzw(`vp{uanHkRwQMCyJB`hHtI=WryYDB4h_P+gFIE@qkuav zc*i`cF`(?pc3Yg5pi6!afh1Fnb5)U^QBe> zx@5@vc*W$*9Ps2MBg+>cD>fdtlW(a9Z)$gCLBE~g32g=5zLRfDv*+Ot^QCqm_XP{2 z_Jkqsy8yn7Fg(m5A&jwX7vICl1Q3BxB!GQ(K|0bkCAtRE9fF^mkw_|gM&>!0~6k`nUMGy$WvFO0umIC>@D%Rh0v-MzPOt&C9JXiBB%Zd0IMwRc3 z=U}OYrb`z&TyaGW-_l>))ur@AG5~vVK~gp{mZ(tjloY3B$scS#6Ajm#Vn8YSdvNfJXDS6(-i=vqhJA%s&Hp$r=95RL=) z@$HG;xMHc)HLMTd4ZgU5cR09i_NCYaYA2)v6ZIpM9;v#25X$@o)~;OWlbPc-wNR zB?NA|2tO7h0sJqFIts9Mle#S+XNqww=B$t!5%Jh=h18!Ig9jbt8xRS2$_il6L_Fsp z-;`mOL@dFTHWoc-$pl{hYNUx7cPwC^mM|kdgPOaDnL-iKCl!BRA@wH4Vc{Vdi1B#P zN~tN4hSOF`J&1H1#})bz8Tighz%3JZu7rjsV&X8A%);$lp)EUG#Vu~`5OyI4r>v4X zuyRR!-9s0U-o-s8;i^?qYi=G88-je1#3o0?C?D4y<{J_P_~k08iQ``st@R4KhAk;C zGdVvqCkt_=bPW=Sp|tq1$b2fcsFIqoWnIa!ptvGCIhNG%ZKVoT;+V9I@rXN(Vw%L* z@k{S=3(UsoK2+R^{mN84o-+aWGNp*8V#-z-wm*5hw$Kzwb$E^DO@#6NiWTHxr7Sbh}d<0iagElA)k`1V?m zep?qEUl=Y4_#F%JQ4 zz~!HL7+__9`L;$klzfbIZ^BBG2$3qSrD9}%i@@qOEcKyv5ctt%siW`>NuS9I zio=0$x^KyjlUkx!g1p}mSiD8*NqbM=lr2(6+6MwJ+yaW)M*`Puky_C{5%~5Nsfp8P zippK{#Ow<-pncrj-NK9G)AHgAAP9E+_@s1X{guGNtx`+cHv-Q+%Xg=JC-CI0QW3n; zfmdvm+W5oP4B31aBwa)UAnra3$S66{KDKU8pLx_uCq`GxzaJQ4YUJ@61NRR zts0Kr25YT4F4-paAv7RvwA4wDNkx4E(Uz8-1B2?Si95+UTG(Yf2y1P;{XE~HhYl6W zOIMeQ+65{zELSY5c~}ienQF<#yS7V3h8!{kRsM|hr2HHOa9L_Xk_(b>@$>BpMu8W(WueL$|@%ppecdU5D~`sShduNWzrRv%32IIjVb<7EtSGc z1(F@GFqz|+9Z=8$%Xh#!$;S(Kfb(!fTXRcVR!&wr%&vJ5 zaB>Fx!Xp`z;?r^gQAaDXZ4*3Ur<4ntmTafg)2IiK6qZe(yH8j##Pv?k$Zhix_Yu>FDW#iQPbXSM0T0>TChdU6gv|9x5(|V4CR(DP(Z*jPWi=1P_z! zmI?_eCa&;Z2sh9VrTUWeeo|9F8co30|+-LZec=`~UjntHX;W^u0xPA|ehChC?2PAX==GI7!G$9@vIi^m* zSW+W(2!@irg;Eiv?lV zD7DNz)CYO?$BbH_*Z|zK77!SS6Kka|Hj)1Uss~ZkepOepk!2L#TMMRRG=_ao5k9vA zs%KD)lSx(oweRK=|1TIP>len!rWhv&ko+&>7-u%cICCh*spw*yxfJ8fqpEccyzP97aTZdHv*cImI|DD8^Z-WE|gB{{gC3^&iIhTZ!e2r1V5ZMzR7l!-VmQ zr&ELvR|%~#vr~H4*e{bT5-$07k=iev(hRz}UnyNhoU)vuMJ?h?J=5R?p9;&UTshF4#jczL|#M~o)YdZgekU? z{OOJB!rd+P`qCT}i4dO=R-Z9xpuu_nfm!!OUPchUklY<}7rRU98Dej-x5QhDO#0)X z-tNZE5Xg|s4Dkx_4)F;I3JDGg2?-4eL;4WYP?-T?-9p8ol28!Pk$6ULcc~G~G%`ml z6$89*u^ap&MkZ0Xv?-RrKT@O*aSf?j;o(pd{z3Xf0pYH-n!*_w z#n8x|3=;oxa{nzM3pQY2^L02>hR;MWjIuI7Vn8@U@;fUDSO>Bpq#^kUTa>cY^yCc0 z8A&CKP0CSzvqw?i)QW_-qr1zKns`3q#&(yd5?FCv6(B}@GVH=pU+GDCq<(=|W2kRH zE-@Lg6R5Aetkj$&8GI*F-wA0M*`VLClc>++Gzi)bu#%}yz;!}=)_BAjOML^X%5Qc` zcYaa^)K2ZrR(_7_&IPRwvB!7klAjI}Xn018$PUEZ_7;&*7>GHNh|~myv<%RrbH=1mt%d+w zdP{sH9uiN97ZOgv7yG#jh^e@vpSvMXMpNzGDWQRq%9rC_4@DM2MOUBUFrbL0+*2hV z&nj~X9n!!5a1=2e7d{mILCnC74@KVi-XHFo-lepRy!6;HY2&F~W(M?brZNeZQWXL8 zW+_wBlG0Tvj%7ILvB-fa$7zp6R>W*v`B>yi%)#}KMPi}?caUF|SoB2XP0Yn3o`^ib z#G4C0%=xsG*fA60GjS&0l7}BY5t%R+K++<$=2D%kgl5We;KnmI*99 zh?RJcz|s-yx)w6A3Tp^0`NZGYMhJPU@kpViD}46nBFiAK?oNv=EqR-18EJ_mk5g0xj&R4>wBmK_h6cO@Xb{V;Eo+ZQUJoCCB>atETj#6cM(kh>2`pdg?T=MX^s z1qk;rZA^SND6y($*>$v(__SnIca0lBj>5D7mQj%6P9^{Kjsl!`P`xg86&&sgc`O?29;kmoxhTN)whAG)CcMbnQfhmV zrqaDBi2^4=mq=!UG0Q4YCGoG|Hfu|Zq-!)v&rmhTxlYSU|CP))$O6Bx9p@%((ys;d zZqdlC9Ngk-QWRD)@A7f1Hmy78*HMa|*gU zrT+j#mQva19tzGwT4E0Hn+iU=m6iznr5bqdBlt{8N>pZ(oTK*`_&hVw0+z{c6rTWy z37PpS5MEC)XQ;cU?=w<9ropO_rlb=o7>{%=AQr7c>LPY=Q}j|;i$m-YORXCa95OQ1>B_@F3k`a$UyOSY zv3`X6Qg!Dj@+h(9o%lC%jf-&kEupy=7hbp|bto$UIWQ6e`?BHY8JQ3d90hwBJb3O> zX&^}5!lcDYyBawgAbk6l(9zG3Iz!4zgyj#mRakI@PVTcPzmYS%hDjc%1K<);V^Y}0 zgI4zF$WKBSPGlVm4!-1MP!n1D+Ev)q57+zH&Bw}E67-GYLJeiV^rmVpe z;JN3$^yxx4f^RXB8qmajhle_;K}?0orBns9;b^~0N8`CEtB`y_O?a4zI&i+P(iC*yj9>Y8nD$&x zL~#NoKHZSM*KeTJNj1a78&7TWGKLc$+~nm7Cq5^eysY8G=Vg(gsQU;}V zp-4IhJ6-g$;=r*#+5gnU{4`)7+W;JU(aXjNUjL-J?(XK^wY3J@IKg=NMK1?<-m{Ms z(if0#jyi-Q%)KwPW5F|?DmchG9BW_lvI6tS^^%tj(FYHOA0K$glO%svONMat54*g- z*?Iv;51#Q<+SgKd4>#pDiXZ}keIvBc@86A*J9#4Jg6s$2N0+?ph)B%3?B&CP7d*QW zu!+J$E_?NW9f-d!ds)I+&&tbQHcms(k|fxavLi7d_pD8ac7t@2cI`nafWKUj;V|5O z*~>sLhC;c!hF~~0y5hx$6ClqkUII7)8hXV`M2y7wR{)Pu_-`_AG_Jqm<=_`fRwXZF zh&_>E97!?H5GDI{1LMR~_<-?}l}Ym580y7S+XQTL)yrmhB6Zx&OzL9CWWbg*vPnot zcPt5Cxq%AD+$kh{uOQg6hkfqUe<95tM^PpdmJR5&WISGX)k_?i){ zbQN+TL5Mwr`sk9C&Lz0>x|b7Cik)tFSr9XEzZ<|avvBGSn6G7c&J8bHetCEG5X7EM zeRK)V9&-?8KNebn{qpgKmp|Aqo;SUEg8ee_rk62$0fkY5^7PGVAzpmb%aOJSE_gf< zS~+9YRS2KplBDc}_)IuvHe5_m1GpzNyn7c`v;;0nJP`_*OG&l@VNA(r>*aXpEtu6S z@#I^8dKF%L%S$ZyTZOEr2jZ@#J|^a-<|v24Wi5Vk%gb4|jzSEMEW8kNJ3N@^xHP#>uo5$1{|-K3Hkg1%7L>n-g5~pFpM-AjfnD zHti>}7iIvYqS;MfVbm@!VnV26$GCH`k0?2WCrfv?3;InDS;R zV%AfZi&+D{Hr(3*cw9)--c9kgQUjXZqgzj5;CK&-rR`LP^8I&?j6tospmd1E!AMsQ zE)1aC^^OLA2BCtnC_=>7oAxtJ3hSXu5gcPih@7~^Khq)Eb~*!3h!FJ<%m9j{jVV=K zj0p{nf~W9HDAx!a&zK6LKkM;AVg+o5N5N9klUyg#?C1r-Ew4 zi~M^fHE2@u?{leiZ*utNk-&ff=6C%rpneS({!cHBMHDJbOg5bcS0jJi2v7=Xt5fp4Cs11jQ>z+axn914x^dgWxi>@;WYQg^ULs2XS?%giMJiSwfbB)O4Y?fQ8`hrc3|m z-Y()YSQMsNQa3~uaJzq{B@(fJW|M|(*G2H|D#(@7U0}$7=pm7jGpLn?`WP5BI4o4r zCnzd(SWr}$izRa8b`_WPcA<(W&1K3MS3#vRkegmN=%|4M2ZO;hy$g0ac^;q`oB{j& zU_O$Wip10`0Pn2-?zp{EnE6O7wSi@4sF zn8WqfChx^wmQ6s0U=WiNLfLKHL!p1fIp;&G-Ju) zArVpD;?Ta)kw_oR*zT0*!2_eh5Jx~6+0YHRRx*K%D4{gENwW{JMctW`WT}aWZQ1=j zeoP|LwW2;#K%YS-JxC=9EC$u+C>;Xe;clkVs%)xP>FOT^HB7 zD=*|T?I|Tl+kxV17wDuDurjH3**N3=VI!?w1TK&V>aB}(y7JBhdHfA$@QQeatLxZo zq$^gbY~EsICBZ>Y#g=duzG|Vl0ZtDX$&AqQAft3-CqXYfRYiS#5EG13(k|5XR#^a` ziI5Q}ND3SFgf=InD*MsJlzoOFOFw+>saO=*3ucKB%u$jE*5SdyZZi^6lHdRkb}AF| z;^9^v5YRXPAdwgQ!K^BY&&&kwbae$qR*y7T!8&)5Oox7uH!B6f*#DWBZv?R@$PAKn zKbv$9!`aWoZnnLti}K3$Ld3Oqz=hY)q8IQqpUxmmoMb9xqDNDLXr$niWt9ZRD8KetL1+&b5PX#I)baUQB zsuz?g;O;0T^>w(x30pY@NE^&fWoINvD+m4xJm`S*Cc*AeUJ~#Ztl7%$*yZEm*J4{f z7?;1|tP2JuWy`~EBEJxyJ1Dg90Xq_wsZv<$;}a5GkP+CC5dEeUE^R8Wj%MX%k~dPg zU{I0*BRXtwP{iO7kw_%Rf;O>GPeG-FXz5Cyh6h1*_r)bU9SDoQ<0on2X><>~ovgMpj8p zUvNe1ALgQTL(rc~!5IN)jG8NQrH1(JN zUWP<+#lK5IqV7tn9J%R=c&k(;RM>H|kZu)K!j&vx__q=*(!Tu_EiiBIe-bVZj1 z%4dp%puQpf4Jwe`sPX>!S0NI&jkvl)%yR=Hm#lAP9ZISryv?f0Dty2!-qM8*Rm5;B zMJKRwe?>?e%v&Xwh$;J4Zznll$Q@zpP|!7jML4@i*yJ}H{gU6iRo_0;x6GTi&)_vHsNBW1z zs_}|n+3fJYOOaHnqo@QXaTk@sNGgF*Ox6B{N?;n3MO>{z$s&eFDJp?c{414=PLQQw z5&7*X0U0+^9%_>n-RaH}vPY-7rV$vz${x8P(p%=|fP-TfY5o4YFFde*m4$SvnH4pN z?8^nJFJJ*veF+cu2}V4yg8$Q(OH>h8Yh@9`%gVl3UirN*+-p>+@o*&|I~5+QmR!f8 zkddxZ&P^&qC3xAls3!Uch4kqginw>E?CzDs>Mo9XC${9=gRyeEuawB7*;S5zOdV-Q zG~>-RLTj1+1F}|r7o&%SMErpa9+F7~za){pY^AUyg?MyQPHrYyQvdOyWD<~w2hKiZPrC<##F$PjLA@CS?x+`r8tAJNq#j49xzt)C)WC6s z1YTsrazY{`H1Xer#D?df1=nps-GQN0AytI$HVBQt5$F{m=}prmu>TR^0J;gAz!gV? z26SY}!K-Kz5sOP*#RgT?8(Hb$^E8R&2z~12GZ|?O!m#mFB_!TR&w#qun*w(_^K#%~ zCSn=>EDUC?k*YAc17`etVdP%vsw(V8n+fney2R8H{D??3GBE=-vlB~51(OBdL?rh?4`5?aYKcu55(&@h zKjln%;8=#l7@Udn84@3vJ#~i}6asHCWkHZ0MI`+pDKe;cm=x(cQjo2z!@>~hSVZRL z-h*Yf%v zgmRHk8afmP`kqvyO3R1B($)))QHo&@fzT`Gx=H zs8~BBZG33br09hBbi@p%Jgm(_h~H<>46<-qf+RH^=_y^5RALN@As+ZC{gh&mLdv1u zBoVshkb_bU0?#E7ME{aQ;J~C3=A<0zhg-gg^|^mgsigcS*P;jlH@_A0Wc{fbsZwot z;JVZ``op674h{<%5`*-?f9dD!25e%G0eCU}hF}bd;o#peR3bR!e<3(jg`ilfMq)UO z!Z1dKA$cDR84jl~>@nhB7>=Yc1ZL>Q&~7x2_%61k#S*y8(bC#0t_u=Ha%2!sRY}YO zFWxM;jv;mQLe67ISBivRo!D{Q&XJ}D`Uzz1U%lHAKM{ZaF18SZa}-G&xHv-|ufk$% zK9&-HQG-YaXQiz^3>sD1>--b~#~y}r=u`qvIV?1zjU({V!$L=WZW;xqTMOq;z=fS+ z3r;$f9-o_^or#1Q1fEzY8 zst|%iN(5A@NC;IRL6RUr6a!=^(nNG@sMrO?uGmm4qlhBd8_ljLV%Jy2_cuFxY52$Y zbJ^Y5-I;l&?acF=_}s3A>T>%aJ*ROC^~W^Hvn^5{zDVoQY`a10y$BL6{~v)sycA9$ zy0W#!uyM>_bAG|Q7|;D9;EAJ4IvV4_?Im_OpSsJN*e7(0)NGs$^U)!dl(J8JN-wtn7F}u#Z{}=SR6P*Sw(B zTORXO5P=O`ejgwEWT6yeZ4VZj;9td18EiJDRh|JJ9rQHcPmvdP}?W^a9j- z`4G&6wIbfF!>TpoE*YYwOA#wxj@Px0YM$SU|9olOEdwm>5}?EiFl@ejMEE_Ol6`MS zvZZUs;1M;I!?oz`U6L)!u@<(YJ^!=r=R5ad8_u07z1c{-Tu!$?pfqXr2c?j!Me{*4 zCY9LM^_77D)`42{2egiWYh3GK>D;Y_J#3k+9A6^c9tSCzoX2-QuFm5vFr57fvk}qK zciDQ#)`aoz!)P*;Wuf7;BrN?Y8A<$?SlY%%hST_-1<%+D$~W`+aGJf$z1vn$VUBd# zXZRe?sjM(3;F6w~FM_emVuyKJYcdq`4xSfqE4@}0`feAI?&uel(bUXCQEsu!3#iXz z9)!P)2+3KL3hK~8U%`Pn^$@$4M>uKBve&HK_mx8U1ErZPfmR81y>3<)l+9qNgYwKQ zq4;{;-w{-ccrzGK*$LV+Ggxme?x6K&V3nL4l>*;s5Vd;VQl|rL{B|dew!O`FIjM(0 zcJ{uL_D;0Fr#jHm_s!>;!}rmZ8!$7<558k$jQjwJFlR{zjcjju-5;q!*ZE8CV^vT) zPQiK+pD0`6Ll;AKE&7n^hYqW=_-d19VQ0@!*@b@dUoro-J?3S_ zMOyT66?16dWT8OJ<=NQpRm@!{y2iZsNq${VT4ei?@9Rl3OQTKk8@^kDLmqq_Mf}ov zz@yoJRpL7PZz{?IAcfl%N&87D+;5R|0Qu9#OI@^_{LjW0xM=K|_P8!wNd8DRyQRB4z!F+ZA{W`q=I@O54rMT;UJfiv5w zBHW>!6TD>0@*4L zti^{XI*BmgxDOhvntLug4^@KuxB#y?D03ID;loLvLX%A#e5uXx|FSTNRc|0wQ zf;!FIR;N@xOj)t^U$3ESIc5B4JoTrPE7{I;(}>Or`G%HObrk4Bcur5`d|$#R_B3)x zKS&yS8YL6@t9Y~z!B%K71FXoZQCTiLhgN9DK=b8nS}msR;Xl}+&}prmRf|D)#2`|? zxM_Oh+@j5LfuMgScP64h4?*tqGE!Vs>NQr;$Q?@f<-H7l^jX22M>#RQzJ^s3{&X*6 zsO@b2Zz9chLt`V04-_Kv8=4`48#s#a{&u53sUdu+-6(PAK{eBLbh(1>u^WjQW7HdA z=qk+)^^7!*6Ji7O&9U5W<)h&Kmk6i|tUu z$fZ#?R4|<{A+#M*7*p8?35@J_lA(Q(!vr%OE1MfV@YZU?+K#zZi4#f~xkjN9nLCT{ z+EByqn8h0|rTB_%^tDz!eB zoF0SiVbIwu<_A(}Y6PS%@~a%Tmz8NHOZcf2TAX}ox7^X}OI5w_Uq<-oa3hOcPWX~= z!ywBD-x_Wtkt+y)D%{9ThCroDzH0X6>Q1_XaGS#@tZtK0Ei2n7%@76UUbo<@RB-3& z_Cz3FJs{-M9Ba)xtIT~N^4Af5)M4brMX&Fkz7<;52EtREMn*IwdtDzN*hKg^r%@1k zl@jy$uSP59G%}YZUIQHhwhm}A7g5UtSRb0#Dkmy52ZVd7sSCh83+g>t%G#Sr$MwOs z4ihs@DdJN`sw&nTH@4ph`O;0@Z`>NZ5%V?988>&i6G}hpmC!le+U-u)Hkn0r5b-0n z{adl%ep~08?YFBk;ku*SeQ9^{8Xq;VnZd+!XBLw`J0N+Y9_aCiO(V z2&*^F!`AFLbx}VMpqrODnxKn0TY}UYKI+0PRlVr2E0eQ zg}`(&LWCY81-&=R5n$GiG@jWunbbiGM!gWGDqH%%T&J6cQ|IqDz zoO7M*5~xV?LbPGahttqcutz>kDE(R4$Nr1;3yp?sSd*d8kZpwWeVETW5A(BrN6zNc zjAZCG+mj7Hc1LI^q^XWDxIrmtm@izv)`N!HaPr-S zsDBasNFg=C;d@*sJ9~)rBYF6_)SKqQE%+dP8+pIw~SJ){NzEOTBP}+`KWVg zI*HNw#~yT0u{!_DW0a=EsbJQq!x67rW53E0&6A+>niTX7NjjgGVo;K-^IKAkeB#mh zetAAs=f_hFFY)T!k!mEl(z?Df4LeIg4&(CaX7QAJ7h=A~m#Oo)sYV*f()q?zBWqx` zZdx!nB=+m(aAuC0^+((>8?2s-(RGOyk=G@7PCj3MK1SKtlEUjX{B9RjVcT2y>>~cl z`7{fj8_DCSC#x8jF&%6#QNPYo^)$Q&V{dzzZf-6xq=HW!hYg+Vj;^XDauc%BK{C>%nq#!O2Zb5E!IuC z7fs=*6DhS#<)bH3BW{`=9LTPdHBy!eEvruF7x+-krgyP@$xOa`A}uDfbpEOjIW4+o#%f|LD5RpFwx>gKmgaQIQF#oi+8nXGp0GTlZ`}+n?6&rb7k9ggMEmT!>L{b`Q1=ve+;b=H!9WRJXXstB>d6s! z*xfiOr>wAL-#umo8TLnMZD?+idon2H$4vCuh8r^DZBuDX&UPK$t88tpOtA0Jl@ITI z@)rx}_sicF&9jpqor=l22lzizY5c$k+xv&IRrL**w9@=CE#V>E8mv_Y%#*%Kn(wPD z(;^=3QuqUp=)6y^QQ&_RkDiAQsmJ6mUiG;At<@r)=o);N&Ue(JygiBbzm{f`r*wWI z*N9Jl8aX8!#AkFhB70WlTzere*sb$3r_ns}9J;D$G%fr2&b4D+gXtjP+GE`nEUqyx z=zLqA;U+KY{EcbUH`M)-S%5l!Ai7_cH+3EuX?B5Fw7~WC6%{MTtL-(WT=VSJIjy5f zgI_}o@P&$|4Nb|uV0Pia`MPdew&-d(G_b#c?3KU!t=~7*Z}tJ5Z>Xc0X@)m;=n=i3!t5^!j_G`ji{@o~YV`mZn8_YsIYix`>E?&- z7PDy%Xo1gl{*jC3>wzzIo;m}C;%jvDGia>;8!jS6!SgFh?M#|Pen%5OllsQ|p)wRRSaQw$Pc%QJfl^b3m++T)P_{*m z20Jg*MgOf5fOA#?Fj?@AYIidJ)%k!~G~H(7r@k%oW$7VuavQ#5n`Kr_TR5Y3?jkKB zB*g60u!R7G)mmbY5PsQlZ+vpk5OZcton~2?S*^0I#&&II&0*3%@qR=^4ZgrZ$2E@HG8Z) zfqE9Fem(J~1|W%GFVqtO>LrOGJd)xIBq@ZisWu8TldbR`^&6cM6b5wCB&1rJ1h1t@ zFuG_G(kx9vx}{0*;Yl;Fn4mNX8S=Sk#4_bCGznRqH3``&C|vp}X3YJ;S7W9+s7c7N zGzqzuCLzz#B;=o_Nhq*135Av>Az*0|sHsUXNRcHd=xqrKin|F4N|c|z5)_mwK|xu^ zIa5$jZV3u1I?hW$K_5#{&=<)$O;FGeVKMub+TRis43L2!C>Ur73I-`bLBGoGf`TFH zC8nUDs*|8#s5%cp0Um2dsE&W(@OxgY|k;C$WMrDX)&D{;L zNWH`~#3h{!0bPuIxvA`Ekq<+)TVnlQs(xdas_^OP(mMVBjmuP2>=3v7r?TTdo0Yy! zDi@i)Rx5oFx}2WA6;}FITIp+(fsj6Cr4Nc0Q@OIXd-|^Il)iPH(zm`-`ZieUg385A zCloI7Hx}v^IXdc=KImM`!U>(rf2QvaCd!$pV4@EbeVORTM1Lj*FfovcGnp8~1pYNj zB@;uKsA6I$6K63ojEQO{&Sqjb6C;=y$;2ooYM3~OiP21qVPY&3=Q42~6X!EAj*0P1 zOkiRn6O)*j%)|vuOkv_eCZ;k`%fvJ$>X?|$#0(~8GBJyZ*-Xq~;vy#IGBJ;d`ApO^ z(ZIw4CN5@TArp;EG%?Z4#3CjxVPY{8Elez7;!-A-GI1Fbmou@9i7S|BWnwuKE0|cx zL>m)~iB(LjW?~H!Ynix`iFHh@XJP{r8=2U|#8pgeX5wllwlHxG6W21qnYfOL>zTNL zi5r=?iHWUD+|0x+Ox()EHYRRk;&vvGjdwC}7ZZ0gaSs#sGO?YB9ZcNE#QjX{Wa0rP z9%SMnCLU(u5hfmG;xQ&3XW|Jab}{iJ6HhVmG!xG-@hlU&nRt$g=b6~U#0yNk$iz!b zyv&4P;uR)dWnwQAuQ9QYiPxEUgNgl2yvf7?CJr+3787qX@eUL3GVvZ0?=$fM6CX11 z5fdLX@d*=$m^jSD5hji@ag2#infQ!}&zbmwi7%P>iixk8_=bsZnK;hGcT9ZG#0e&T zVB#bbKjQ!7F!3`JzcBGD6TdO>I}?8}@h21iW8yC+{$}DICQdQ&?^*KfWDv~=nn>ff#6Iq2n+_5 zU3<6a38oI>;w;h2f;(&Vekle6g&nV2Ty=q z;7RZlcp5wdo&~$XbKrTf2fP4Y1TTS?fdH?7SHWKJ8rTP32XBD=;7xD<90YHHx4}E$ zUGN@wAAA5l1RsHq!6)DlI1G+}qu?0$6nq9g2Va0M!B^mG@D2DD90%Wl@4*T112_qO j1V4eF!7t!f@EiCY`~m(1{{w%4zrjD?lx?T@*H-?2I|Rm; delta 98424 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 z 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Π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

i}jGzrpp}^5{L1U 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.G hClipBoard beq .8 + >SYSCALL GetMemPtr >STYA ClipboardPtr jsr BUF.ComputeCOffset @@ -21,16 +21,18 @@ BUF.InsertClipboard ply jsr BUF.GetNewYA bcs .9 + >LDYA BUF.COffset jsr BUF.Start2YA jsr BUF.CopyClipboard jsr BUF.CopyTail -.4 ldy #ClipboardLen - lda (pData),y + + >LDA.G ClipboardLen clc adc BufLen sta BufLen + iny lda (pData),y adc BufLen+1 @@ -42,18 +44,18 @@ BUF.InsertClipboard BUF.InsertA sta TmpByte jsr BUF.ComputeCOffset cpy #255 - bne .10 - clc - rts -.10 lda BufLen + beq .8 + + lda BufLen clc adc #2 - pha + tay lda BufLen+1 adc #0 - ply + jsr BUF.GetNewYA bcs .9 + >LDYA BUF.COffset jsr BUF.Start2YA @@ -62,14 +64,14 @@ BUF.InsertA sta TmpByte inc BufPtr bne .3 inc BufPtr+1 + .3 jsr BUF.CopyTail -.4 lda BufLen - clc - adc #1 - sta BufLen - bcc .9 + +.4 inc BufLen + bne .8 inc BufLen+1 - clc + +.8 clc .9 rts *-------------------------------------- BUF.DelSel jsr BUF.GetSelLen @@ -84,6 +86,7 @@ BUF.DelSel jsr BUF.GetSelLen iny bne .1 inc + .1 jsr BUF.GetNewYA bcs .9 @@ -97,6 +100,7 @@ BUF.DelSel jsr BUF.GetSelLen adc SelLen+1 sta BufPtrBackup+1 jsr BUF.CopyTail + lda BufLen sec sbc SelLen @@ -125,11 +129,14 @@ BUF.DelCharAtCursor inc BufPtrBackup bne .4 inc BufPtrBackup+1 + .4 jsr BUF.CopyTail + lda BufLen bne .5 dec BufLen+1 .5 dec BufLen + jsr BUF.ResetSel pla Get back deleted char @@ -139,19 +146,24 @@ BUF.DelCharAtCursor BUF.SelToClipboard jsr BUF.GetSelLen bcs .8 + >LDA.G hClipBoard beq .1 + >SYSCALL FreeMem >STZ.G hClipBoard + .1 >LDYA SelLen >SYSCALL GetMem bcs .9 + >STYA ClipboardPtr txa >STA.G hClipBoard - ldy #hBuffer - lda (pData),y + + >LDA.G hBuffer >SYSCALL GetMemPtr + pha tya * clc @@ -161,9 +173,10 @@ BUF.SelToClipboard pla >ADC.G SelStart+1 sta BufPtr+1 + lda SelLen - ldy #ClipBoardLen - sta (pData),y + >STA.G ClipBoardLen + eor #$ff tax iny @@ -171,17 +184,23 @@ BUF.SelToClipboard sta (pData),y eor #$ff pha + ldy #0 + .2 inx bne .3 + pla inc beq .8 + pha + .3 lda (BufPtr),y sta (ClipboardPtr),y iny bne .2 + inc BufPtr+1 inc ClipboardPtr+1 bra .2 @@ -197,26 +216,34 @@ BUF.CopyClipboard lda (pData),y eor #$ff pha + ldy #0 + .1 inx bne .2 + pla inc beq .3 + pha + .2 lda (ClipboardPtr),y sta (BufPtr),y iny bne .1 + inc ClipboardPtr+1 inc BufPtr+1 bra .1 + .3 tya clc adc ClipboardPtr sta ClipboardPtr bcc BUF.CopyAddY inc ClipboardPtr+1 + BUF.CopyAddY tya clc adc BufPtr @@ -230,13 +257,17 @@ BUF.Start2YA eor #$ff tya eor #$ff tax + ldy #0 + .1 inx bne .2 pla inc beq .3 + pha + .2 lda (BufPtrBackup),y sta (BufPtr),y iny @@ -245,6 +276,7 @@ BUF.Start2YA eor #$ff inc BufPtrBackup+1 inc BufPtr+1 bra .1 + .3 tya clc adc BufPtrBackup @@ -258,8 +290,10 @@ BUF.CopyTail ldy #0 .1 lda (BufPtrBackup),y sta (BufPtr),y beq .8 + iny bne .1 + inc BufPtrBackup+1 inc BufPtr+1 bra .1 @@ -274,8 +308,7 @@ BUF.ComputeCOffset phy save line length - ldy #FileX - lda (pData),y + >LDA.G FileX clc adc BUF.LOffset sta BUF.COffset @@ -289,27 +322,37 @@ BUF.ComputeCOffset clc .9 rts *-------------------------------------- -BUF.GetLine ldy #FileY+1 +BUF.GetNextLine sec + .HS 90 BCC + +BUF.GetLine clc + >LDA.G FileY + adc #0 + pha + iny lda (pData),y + adc #0 tax - dey - lda (pData),y + pla + BUF.GetLineAX sta BUF.TmpLine1 stx BUF.TmpLine1+1 stz BUF.LOffset stz BUF.LOffset+1 - ldy #hBuffer - lda (pData),y + >LDA.G hBuffer >SYSCALL GetMemPtr >STYA BufPtr + stz BUF.TmpLine2 stz BUF.TmpLine2+1 .1 ldy #0 + .2 lda (BufPtr),y beq .7 + cmp #C.CR beq .3 iny @@ -318,15 +361,18 @@ BUF.GetLineAX sta BUF.TmpLine1 .3 lda BUF.TmpLine1 cmp BUF.TmpLine2 bne .4 + lda BUF.TmpLine1+1 cmp BUF.TmpLine2+1 beq .8 + .4 tya sec adc BufPtr sta BufPtr bcc .5 inc BufPtr+1 + .5 tya sec adc BUF.LOffset @@ -338,36 +384,60 @@ BUF.GetLineAX sta BUF.TmpLine1 bne .1 inc BUF.TmpLine2+1 bra .1 + .7 lda BUF.TmpLine1 cmp BUF.TmpLine2 bne .9 + lda BUF.TmpLine1+1 cmp BUF.TmpLine2+1 bne .9 + .8 clc Y = Line length rts + .9 sec rts *-------------------------------------- -BUF.GetNewYA phy - pha +BUF.GetNewYA tax In 256 bytes page to avoid fragmentation + + tya + beq .10 + inx + +.10 phx + >LDA.G hBufferBackup beq .1 >SYSCALL FreeMem + .1 >LDA.G hBuffer >STA.G hBufferBackup + >SYSCALL GetMemPtr >STYA BufPtrBackup + >STZ.G hBuffer + pla - ply + ldy #0 + >SYSCALL GetMem bcs .9 >STYA BufPtr txa >STA.G hBuffer + >LDA.G bSaved + beq .8 + + jsr SCRN.UpdateTopBar + bcs .9 + + >STZ.G bSaved +.8 +* clc .9 rts *-------------------------------------- BUF.ResetSel lda #$ff @@ -378,7 +448,7 @@ BUF.ResetSel lda #$ff sta (pData),y iny #SelEnd - inc + inc lda #0 sta (pData),y iny sta (pData),y @@ -392,6 +462,7 @@ BUF.CheckSelected iny sbc (pData),y bcc .9 CC:COffset < SelStart + iny #SelEnd lda (pData),y clc diff --git a/BIN/EDIT.S.CTRL.txt b/BIN/EDIT.S.CTRL.txt index a7a832c2..c34140e8 100644 --- a/BIN/EDIT.S.CTRL.txt +++ b/BIN/EDIT.S.CTRL.txt @@ -30,17 +30,18 @@ NEW *-------------------------------------- Prompt.Editor cmp #C.DEL beq Ctrl.DEL + cmp #C.SPACE bcc .3 jsr BUF.InsertA bcs .9 + jsr SCRN.UpdateCurrentLine bcs .9 - jsr Ctrl.FS - bcs .9 -.8 clc + jmp Ctrl.FS + .9 rts .3 asl @@ -72,7 +73,7 @@ Ctrl.A lda #PromptModeHelp stz .1+1 .1 ldy #0 ldx #0 - jsr GotoXY + jsr SCRN.GotoXY lda (ZPPTR1) beq .8 >PUSHW ZPPTR1 @@ -118,8 +119,12 @@ Ctrl.F lda #PromptModeFind Ctrl.G ldy #FileX lda (pData),y beq .8 + lda #0 sta (pData),y + + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort .8 clc @@ -132,31 +137,33 @@ Ctrl.BS ldy #FileX dec sta (pData),y bra .3 + .1 ldy #FileY+1 lda (pData),y tax dey ora (pData),y beq .8 + lda (pData),y bne .2 + dex + .2 dec jsr BUF.GetLineAX bcs .8 + tya ldy #FileX sta (pData),y - sec - ldy #FileY - lda (pData),y - sbc #1 - sta (pData),y - iny - lda (pData),y - sbc #0 - sta (pData),y -.3 jmp SCRN.UpdateViewPort + + >DECW.G FileY + +.3 jsr BUF.ComputeCOffset + + jmp SCRN.UpdateViewPort + .8 clc rts *-------------------------------------- @@ -164,31 +171,21 @@ Ctrl.TAB clc rts *-------------------------------------- -Ctrl.LF ldy #FileY+1 - lda (pData),y - tax - dey - lda (pData),y - inc - bne .1 - inx -.1 jsr BUF.GetLineAX +Ctrl.LF jsr BUF.GetNextLine bcs .8 + tya Y = line length ldy #FileX cmp (pData),y bcs .2 + sta (pData),y -.2 ldy #FileY - lda (pData),y - inc - sta (pData),y - bne .3 - iny - lda (pData),y - inc - sta (pData),y -.3 jmp SCRN.UpdateViewPort + +.2 >INCW.G FileY + + jsr BUF.ComputeCOffset + + jmp SCRN.UpdateViewPort .8 clc rts *-------------------------------------- @@ -198,35 +195,39 @@ Ctrl.VT ldy #FileY+1 dey ora (pData),y beq .8 + lda (pData),y bne .1 + dex + .1 dec jsr BUF.GetLineAX bcs .8 + tya Y = line length ldy #FileX cmp (pData),y bcs .2 sta (pData),y -.2 sec - ldy #FileY - lda (pData),y - sbc #1 - sta (pData),y - iny - lda (pData),y - sbc #0 - sta (pData),y + +.2 >DECW.G FileY + + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort .8 clc rts *-------------------------------------- Ctrl.L jsr BUF.GetLine bcs .8 + tya Y = line length ldy #FileX sta (pData),y + + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort .8 clc @@ -236,9 +237,8 @@ Ctrl.CR lda #C.CR jsr BUF.InsertA bcs .9 - ldy #FileX - lda #0 - sta (pData),y + >STZ.G FileX + jmp SCRN.UpdateMain .9 rts @@ -259,6 +259,7 @@ Ctrl.O ldy #FileY+1 txa sbc #0 bcc .8 + ldy #FileY+1 sta (pData),y dey @@ -268,7 +269,10 @@ Ctrl.O ldy #FileY+1 ldy #FileX sta (pData),y + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort + .8 pla jmp Ctrl.T *-------------------------------------- @@ -280,9 +284,10 @@ Ctrl.P ldy #FileY+1 ldy #ViewPortH clc adc (pData),y - bcc .1 + inx + .1 pha phx jsr BUF.GetLineAX A,X = FileY+PAGE @@ -299,32 +304,42 @@ Ctrl.P ldy #FileY+1 dey pla sta (pData),y + + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort .8 pla pla jmp Ctrl.Y *-------------------------------------- -Ctrl.Q lda #$FF - >STA.G bCANCEL - clc - rts -*-------------------------------------- Ctrl.R lda #PromptModeReplace >STA.G PromptMode jmp SCRN.UpdateStatusBar *-------------------------------------- +Ctrl.Q lda #$FF + >STA.G bCANCEL + + >LDA.G bSaved + beq Ctrl.S + clc + rts +*-------------------------------------- Ctrl.S lda #PromptModeSave >STA.G PromptMode >LDA.G hFileName beq .2 + >SYSCALL GetMemPtr >STYA ZPPTR1 + ldy #$ff + .1 iny lda (ZPPTR1),y sta (pData),y bne .1 + tya .2 >STA.G PromptBufPtr @@ -332,10 +347,13 @@ Ctrl.S lda #PromptModeSave *-------------------------------------- Ctrl.T >STZ.G FileX >STZW.G FileY + >DEBUG + jsr BUF.ComputeCOffset jmp SCRN.UpdateViewPort *-------------------------------------- Ctrl.FS jsr BUF.GetLine bcs .8 + tya Y = line length ldy #FileX cmp (pData),y @@ -345,28 +363,17 @@ Ctrl.FS jsr BUF.GetLine inc sta (pData),y bra .3 -.1 ldy #FileY+1 - lda (pData),y - tax - dey - lda (pData),y - inc - bne .2 - inx -.2 jsr BUF.GetLineAX + +.1 jsr BUF.GetNextLine bcs .8 - ldy #FileY CC - lda (pData),y - adc #1 - sta (pData),y - iny - lda (pData),y - adc #0 - sta (pData),y - ldy #FileX - lda #0 - sta (pData),y -.3 jmp SCRN.UpdateViewPort + + >INCW.G FileY + + >STZ.G FileX + +.3 jsr BUF.ComputeCOffset + + jmp SCRN.UpdateViewPort .8 clc rts *-------------------------------------- @@ -424,26 +431,23 @@ Ctrl.Y ldy #FileY+1 lda (pData),y inc bne .1 + inx + .1 jsr BUF.GetLineAX bcs .2 - ldy #FileY - lda (pData),y - inc - sta (pData),y - bne Ctrl.Y - iny - lda (pData),y - inc - sta (pData),y + >INCW.G FileY bra Ctrl.Y + .2 jsr BUF.GetLine tya Y = line length >STA.G FileX + jsr BUF.ComputeCOffset + jmp SCRN.UpdateViewPort *-------------------------------------- Ctrl.Z jsr BUF.ComputeCOffset @@ -454,6 +458,7 @@ Ctrl.Z jsr BUF.ComputeCOffset lda BUF.COffset+1 eor BufLen+1 bne .1 + clc rts @@ -492,6 +497,7 @@ Prompt.Replace cmp #3 jsr SCRN.UpdateStatusBar bcs .9 rts + .1 cmp #C.CR bne .2 .2 @@ -505,6 +511,7 @@ Prompt.Save cmp #3 Ctrl-C >STZ.G PromptMode bra .80 + .1 cmp #C.CR bne .2 >LDA.G PromptBufPtr @@ -522,9 +529,10 @@ Prompt.Save cmp #3 Ctrl-C >STZ.G PromptMode jsr SaveFile bcc .81 -.12 jsr SCRN.UpdateStatusBarErrA - bcs .9 - rts + +.12 jsr SCRN.LineBufInit + jmp SCRN.UpdateStatusBarErrA + .2 cmp #C.DEL bne .3 >LDA.G PromptBufPtr @@ -538,12 +546,14 @@ Prompt.Save cmp #3 Ctrl-C bra .80 .3 cmp #C.SPACE bcc .8 + pha >LDA.G PromptBufPtr tay pla cpy #PromptBufMax beq .8 + sta (pData),y iny lda #0 @@ -551,8 +561,10 @@ Prompt.Save cmp #3 Ctrl-C tya >STA.G PromptBufPtr bra .80 + .8 clc rts + .81 jsr SCRN.UpdateTopBar bcs .9 .80 jmp SCRN.UpdateStatusBar diff --git a/BIN/EDIT.S.SCRN.txt b/BIN/EDIT.S.SCRN.txt index 92d3215a..5f52a7d1 100644 --- a/BIN/EDIT.S.SCRN.txt +++ b/BIN/EDIT.S.SCRN.txt @@ -16,6 +16,7 @@ SCRN.Init >LDYAI 510+5+5+4+1 potentially 255*\\ NORM,INV,CEOL & \0 >LDYA L.SEQ.INIT >SYSCALL printf bcs .9 + lda #0 ldy #FileX @@ -41,21 +42,49 @@ SCRN.Init >LDYAI 510+5+5+4+1 potentially 255*\\ NORM,INV,CEOL & \0 jsr SCRN.UpdateMain .9 rts *-------------------------------------- -SCRN.UpdateTopBar - lda #1 - jsr SCRN.InvLineA +SCRN.UpdateTopBar + jsr SCRN.LineBufInit + + >PUSHBI 1 + >PUSHBI 1 + >PUSHBI 2 + >LDYA L.MSG.GOTOXY + >SYSCALL printf bcs .9 + >LDA.G hFileName beq .1 + >SYSCALL GetMemPtr bra .2 + .1 >LDYA L.MSG.NEWFILE .2 >PUSHYA >PUSHBI 2 - >LDYA L.MSG.TOPBAR - >SYSCALL printf -.9 rts + >PUSHW L.MSG.TOPBAR + >LDYA ZPPTR1 + >SYSCALL sprintf + bcs .9 + + >LDA.G bSaved + bne .8 + + ldy #255 + +.3 iny + lda (ZPPTR1),y + bne .3 + + lda #"*" + sta (ZPPTR1),y + + iny + lda #0 + sta (ZPPTR1),y + +.8 jmp SCRN.LineBufOutBar +.9 rts *-------------------------------------- SCRN.UpdateMain >LDA.G ScreenY sta TmpIndex @@ -67,6 +96,7 @@ SCRN.UpdateMain >LDA.G ScreenY sta TmpByte >LDA.G ViewPortH sta TmpCount + .1 lda TmpIndex ldx TmpIndex+1 jsr BUF.GetLineAX Y = line length @@ -75,24 +105,31 @@ SCRN.UpdateMain >LDA.G ScreenY lda TmpByte jsr SCRN.UpdateLineAtALenY bcs SCRN.UpdateMain.9 + .3 inc TmpByte inc TmpIndex bne .4 + inc TmpIndex+1 .4 dec TmpCount bne .1 + jmp SCRN.GotoCurXCurY + .5 ldx #0 ldy TmpByte - jsr GotoXY + jsr SCRN.GotoXY bcs SCRN.UpdateMain.9 + >PUSHBI 0 >LDYA L.SEQ.CEOL >SYSCALL printf bcs SCRN.UpdateMain.9 + inc TmpByte dec TmpCount bne .5 + jmp SCRN.GotoCurXCurY SCRN.UpdateMain.9 @@ -122,15 +159,27 @@ SCRN.UpdateLineAtALenY sty TmpLen ldx #0 tay - jsr GotoXY + jsr SCRN.GotoXY bcs SCRN.UpdateMain.9 - >LDYA LineBufPtr - >STYA ZPPTR1 + + jsr SCRN.LineBufInit + + ldy #$ff + +.10 iny + lda SEQ.EDIT,y + beq .11 + jsr SCRN.ToLineBuf + bra .10 + +.11 ldy #0 + >LDA.G ScreenW tax >LDA.G ScreenX cmp TmpLen bcs .8 + tay clc adc BUF.LOffset @@ -138,6 +187,7 @@ SCRN.UpdateLineAtALenY lda #0 adc BUF.LOffset+1 sta BUF.COffset+1 + tya * clc adc BufPtr @@ -147,43 +197,45 @@ SCRN.UpdateLineAtALenY .1 lda (BufPtr) beq .8 + cmp #C.CR beq .8 jsr BUF.CheckSelected eor bSelected bpl .5 + jsr SCRN.ToggleSel + .5 lda (BufPtr) cmp #'\' beq .50 cmp #'%' bne .51 + .50 pha lda #'\' jsr SCRN.ToLineBuf pla + .51 jsr SCRN.ToLineBuf inc BufPtr bne .6 inc BufPtr+1 + .6 inc BUF.COffset bne .7 inc BUF.COffset+1 .7 dex bne .1 + .8 bit bSelected bpl .80 jsr SCRN.ToggleSel -.80 ldy #0 - -.81 lda SEQ.CEOL,y - beq .82 +.80 lda #0 jsr SCRN.ToLineBuf - iny - bra .81 -.82 sta (ZPPTR1) + >PUSHBI 0 >LDYA LineBufPtr >SYSCALL printf @@ -194,6 +246,7 @@ SCRN.ToggleSel ldy #0 eor #$ff sta bSelected bpl .1 + ldy #6 .1 lda SEQ.NORM,y @@ -202,88 +255,99 @@ SCRN.ToggleSel ldy #0 iny bra .1 -.8 rts -*-------------------------------------- -SCRN.ToLineBuf sta (ZPPTR1) - inc ZPPTR1 - bne .8 - inc ZPPTR1+1 -.8 rts +.8 +SCRN.ToggleSel.RTS + rts *-------------------------------------- SCRN.UpdateStatusBar + jsr SCRN.LineBufInit + >PUSHBI 1 >PUSHB.G ScreenH >PUSHBI 2 >LDYA L.MSG.GOTOXY >SYSCALL printf - bcs .9 - >PUSHBI 0 - >LDYA L.SEQ.INV - >SYSCALL printf - bcs .9 + bcs SCRN.ToggleSel.RTS >LDA.G PromptMode bne .2 + >LDA.G FileY tax iny lda (pData),y inx bne .1 + inc + .1 >PUSHA txa >PUSHA >LDA.G FileX inc >PUSHA + + >PUSHW BUF.COffset >PUSHW BufLen - >PUSHBI 5 - >LDYA L.MSG.STATUSBAR - >SYSCALL printf - bcs .9 - lda #58 - jsr SCRN.ClearEOLA - bcs .9 - >PUSHBI 0 - >LDYA L.SEQ.NORM + >PUSHBI 7 + bra SCRN.UpdateStatusBarOut +*-------------------------------------- +.2 eor #PromptModeHelp + beq .3 + + >PUSHW pData + lda #2 +.3 >PUSHA + bra SCRN.UpdateStatusBarOut +*-------------------------------------- +SCRN.UpdateStatusBarErrA + >PUSHA + >PUSHBI 1 + ldx #10 + bra SCRN.UpdateStatusBarOutErr +SCRN.UpdateStatusBarOut + ldy #PromptMode + lda (pData),y + tax +SCRN.UpdateStatusBarOutErr + >PUSHW L.MSG.STATUSBAR,x + >LDYA ZPPTR1 + >SYSCALL sprintf +SCRN.LineBufOutBar + >LDA.G ScreenW + tax + + ldy #0 + +.1 lda (ZPPTR1),y + beq .2 + iny + dex + bne .1 + + bra .4 + +.2 lda #C.SPACE + +.3 sta (ZPPTR1),y + iny + dex + bne .3 + + lda #0 + sta (ZPPTR1),y + +.4 >PUSHW LineBufPtr + >PUSHBI 2 + >LDYA L.SEQ.BAR >SYSCALL printf bcs .9 jmp SCRN.GotoCurXCurY .9 rts *-------------------------------------- -.2 eor #PromptModeHelp - beq .3 - >PUSHW pData - lda #2 -.3 >PUSHA - - >LDA.G ScreenH - jsr SCRN.InvLineA - bcs .9 - ldy #PromptMode - lda (pData),y - tax - >LDYA L.MSG.STATUSBAR,x - >SYSCALL printf - bcs .9 - rts -*-------------------------------------- -SCRN.UpdateStatusBarErrA - pha - ldy #ScreenH - lda (pData),y - dec - jsr SCRN.InvLineA - pla - >PUSHA - >PUSHBI 1 - >LDYA L.MSG.STATUSBAR.E - >SYSCALL printf - rts -*-------------------------------------- SCRN.CursorAdjust .1 jsr BUF.ComputeCOffset bcc .8 @@ -294,53 +358,16 @@ SCRN.CursorAdjust .8 rts *-------------------------------------- -SCRN.ClearEOLA pha - -.1 pla - ldy #ScreenW - cmp (pData),y - bcs .8 - inc - pha - lda #' ' - >SYSCALL PutChar - bcc .1 - plx +SCRN.LineBufInit + >LDYA LineBufPtr + >STYA ZPPTR1 rts -.8 clc -.9 rts *-------------------------------------- -SCRN.InvLineA sta .2+1 - lda #1 - >PUSHA - lda .2+1 - >PUSHA - >PUSHBI 2 - >LDYA L.MSG.GOTOXY - >SYSCALL printf - bcs .9 - >PUSHBI 0 - >LDYA L.SEQ.INV - >SYSCALL printf - bcs .9 - ldy #ScreenW - lda (pData),y - -.1 pha - lda #' ' - >SYSCALL PutChar - pla - bcs .9 - dec - bne .1 - lda #1 - >PUSHA -.2 lda #$ff - >PUSHA - >PUSHBI 2 - >LDYA L.MSG.GOTOXY - >SYSCALL printf -.9 rts +SCRN.ToLineBuf sta (ZPPTR1) + inc ZPPTR1 + bne .8 + inc ZPPTR1+1 +.8 rts *-------------------------------------- SCRN.GotoCurXCurY ldy #CurX @@ -349,7 +376,8 @@ SCRN.GotoCurXCurY ldy #CurY lda (pData),y tay -GotoXY txa + +SCRN.GotoXY txa inc >PUSHA tya @@ -359,22 +387,25 @@ GotoXY txa >PUSHBI 2 >LDYA L.MSG.GOTOXY >SYSCALL printf -GotoXY.RTS rts +SCRN.GotoXY.RTS rts *-------------------------------------- SCRN.UpdateViewPort lda #$ff sta bNotRepaint + .1 ldy #FileX lda (pData),y ldy #ScreenX cmp (pData),y bcs .2 out of left border ? + ldy #ScreenX yes lda (pData),y dec sta (pData),y stz bNotRepaint bra .1 + .2 clc ldy #ScreenX lda (pData),y @@ -384,12 +415,14 @@ SCRN.UpdateViewPort ldy #FileX cmp (pData),y bcs .3 out of right border ? + ldy #ScreenX lda (pData),y inc sta (pData),y stz bNotRepaint bra .2 + .3 ldy #FileY+1 lda (pData),y tax @@ -401,6 +434,7 @@ SCRN.UpdateViewPort txa sbc (pData),y bcs .4 out of top border ? + ldy #ScreenY move viewport up one line.... lda (pData),y sbc #0 CC from BCS @@ -411,8 +445,10 @@ SCRN.UpdateViewPort sta (pData),y bit bNotRepaint bpl .3 + jsr SCRN.scrollDn ...and move content one line down - bcs GotoXY.RTS + bcs SCRN.GotoXY.RTS + .4 ldy #ScreenY+1 lda (pData),y tax @@ -422,13 +458,16 @@ SCRN.UpdateViewPort clc adc (pData),y bcc .41 + inx + .41 ldy #FileY A,X = screen bottom cmp (pData),y txa iny FileY > screen bottom ? sbc (pData),y bcs .5 CS : fileY>= screen bottom + * clc from BCS ldy #ScreenY move viewport down one line.... lda (pData),y @@ -440,9 +479,11 @@ SCRN.UpdateViewPort sta (pData),y bit bNotRepaint bpl .4 + jsr SCRN.scrollUp ...and move content one line up bcs .9 bra .4 + .5 sec ldy #FileX lda (pData),y @@ -459,10 +500,13 @@ SCRN.UpdateViewPort sta (pData),y bit bNotRepaint bmi .6 + jsr SCRN.UpdateMain bcs .9 + .6 jsr SCRN.UpdateStatusBar bcs .9 + jmp SCRN.GotoCurXCurY .9 rts *-------------------------------------- diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 13d02192..c5fe5cca 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -24,19 +24,20 @@ BUF.TmpLine2 .BS 2 BufLen .BS 2 SelLen .BS 2 -bNotRepaint .BS 1 -bSelected .BS 1 - - -ZPPTR1 .BS 2 TmpLen .BS 2 TmpIndex .BS 2 + +ZPPTR1 .BS 2 + TmpCount .BS 1 TmpByte .BS 1 +bNotRepaint .BS 1 +bSelected .BS 1 ZS.END .ED *-------------------------------------- PromptBufMax .EQ 64 +*-------------------------------------- PromptModeHelp .EQ 2 PromptModeFind .EQ 4 PromptModeReplace .EQ 6 @@ -67,16 +68,15 @@ L.SEQ.INIT .DA SEQ.INIT L.SEQ.RESET .DA SEQ.RESET L.SEQ.SCROLLUP .DA SEQ.SCROLLUP L.SEQ.SCROLLDN .DA SEQ.SCROLLDN -L.SEQ.INV .DA SEQ.INV -L.SEQ.NORM .DA SEQ.NORM L.SEQ.CEOL .DA SEQ.CEOL +L.SEQ.BAR .DA SEQ.BAR L.MSG.TOPBAR .DA MSG.TOPBAR L.MSG.STATUSBAR .DA MSG.STATUSBAR -L.MSG.STATUSBAR.H .DA MSG.STATUSBAR.H -L.MSG.STATUSBAR.F .DA MSG.STATUSBAR.F -L.MSG.STATUSBAR.R .DA MSG.STATUSBAR.R -L.MSG.STATUSBAR.S .DA MSG.STATUSBAR.S -L.MSG.STATUSBAR.E .DA MSG.STATUSBAR.E + .DA MSG.STATUSBAR.H + .DA MSG.STATUSBAR.F + .DA MSG.STATUSBAR.R + .DA MSG.STATUSBAR.S + .DA MSG.STATUSBAR.E L.MSG.NEWFILE .DA MSG.NEWFILE L.MSG.GOTOXY .DA MSG.GOTOXY L.MSG.HELPLINE .DA MSG.HELPLINE @@ -127,11 +127,14 @@ CS.RUN >PUSHBI 0 >LDYA L.SEQ.DETECT >SYSCALL printf Send Query for term W & H bcs CS.RUN.RTS + .1 >SYSCALL GetChar bcs CS.RUN.RTS + jsr CharIn >LDA.G ScreenW Wait for Response from terminal for W & H beq .1 + lda #1 >SYSCALL ArgV bcs .2 No arg, new file.... @@ -143,23 +146,30 @@ CS.RUN >PUSHBI 0 cmp #E.OOM beq CS.RUN.RTS + .2 >LDYAI 1 buffer size = 0 (+ 1 for ending 0) >SYSCALL GetMem0 bcs CS.RUN.RTS + txa >STA.G hBuffer BufLen already set to 0 + .3 lda #$ff >STA.G bSaved + jsr SCRN.Init bcs CS.RUN.RTS + CS.RUN.LOOP >SYSCALL GetChar bcs CS.RUN.RTS I/O error jsr CharIn bcs .9 + >LDA.G bCancel bpl CS.RUN.LOOP lda #0 + .9 pha >PUSHBI 0 >LDYA L.SEQ.RESET @@ -212,6 +222,7 @@ CharIn tax bcc .8 jsr CharIn.Esc bcs .8 Not translated, exit + .1 cmp #C.ESC bne .2 @@ -222,6 +233,7 @@ CharIn tax .8 clc rts + .2 pha >LDA.G PromptMode tax @@ -229,6 +241,7 @@ CharIn tax jmp (J.PROMPT,x) *-------------------------------------- CharIn.Esc >STZ.G bEscMode + ldy #EscBuffer lda (pData),y clc @@ -236,23 +249,30 @@ CharIn.Esc >STZ.G bEscMode tay lda (pData),y ldx EscChars -.1 cmp EscChars,x +.1 cmp EscChars,x beq .2 dex bne .1 + cmp #'R' Response to cursor position query? beq .3 + sec rts + .2 lda EscAscii,x clc rts + .3 stz TmpByte + ldy #EscBuffer+1 + .4 lda (pData),y cmp #';' beq .5 + and #$0f pha lda TmpByte @@ -268,24 +288,30 @@ CharIn.Esc >STZ.G bEscMode sta TmpByte iny bra .4 + .5 phy lda TmpByte - ldy #ScreenH - sta (pData),y + >STA.G ScreenH + dec Remove 2 (top & status bar) for viewportH dec - ldy #ViewPortH - sta (pData),y + + >STA.G ViewPortH + dec - ldy #ViewPortHm1 Remove 1 more to store offsert to last line of viewport - sta (pData),y + + >STA.G ViewPortHm1 Remove 1 more to store offsert to last line of viewport + ply stz TmpByte + iny + .6 lda (pData),y cmp #'R' beq .7 + and #$0f pha lda TmpByte @@ -301,9 +327,10 @@ CharIn.Esc >STZ.G bEscMode sta TmpByte iny bra .6 + .7 lda TmpByte - ldy #ScreenW - sta (pData),y + >STA.G ScreenW + sec rts *-------------------------------------- @@ -327,17 +354,22 @@ LoadFile >PUSHWZ Aux type ldy #0 ldx #0 + .1 lda (BufPtrBackup),y beq .8 cpx #C.CR bne .2 + cmp #C.LF beq .5 + .2 cmp #C.SPACE bcs .3 + cmp #C.CR bne .5 + .3 sta (BufPtr) inc BufPtr bne .4 @@ -345,16 +377,19 @@ LoadFile >PUSHWZ Aux type .4 inc BufLen bne .5 inc BufLen+1 + .5 tax set previous char iny bne .1 + inc BufPtrBackup+1 bra .1 + .8 sta (BufPtr) clc .9 jmp BUF.ResetSel *-------------------------------------- -SaveFile >PUSHWZ Aux type +SaveFile >PUSHWZ Aux type >PUSHBI S.FI.T.TXT >PUSHBI O.CREATE+O.WRONLY >LDA.G hFileName @@ -380,9 +415,14 @@ SaveFile >PUSHWZ Aux type pla sec rts + .1 pla - >SYSCALL FClose.9 - rts + >SYSCALL FClose + + lda #$80 + >STA.G bSaved + jsr SCRN.UpdateTopBar +.9 rts *-------------------------------------- .INB USR/SRC/BIN/EDIT.S.BUF .INB USR/SRC/BIN/EDIT.S.CTRL @@ -394,18 +434,20 @@ SEQ.INIT .AZ "\ec\e[?7l\e[2;%dr" SEQ.RESET .AZ "\ec" SEQ.SCROLLUP .AZ "\e[%d;%dH\eD" SEQ.SCROLLDN .AZ "\e[%d;%dH\eM" +SEQ.BAR .AS "\e[40;37m\e[7m%s" +SEQ.NORM SEQ.NORM .AZ "\e[0m" SEQ.INV .AZ "\e[7m" +SEQ.EDIT .AS "\e[93;44m" +SEQ.CEOL SEQ.CEOL .AZ "\e[K" -MSG.TOPBAR .AZ "\e[1;1HA2osX Edit:%s\e[0m" -MSG.STATUSBAR .AZ "Press Ctrl-A For Help Length:%5D,Col:%3d,Line:%5D" +MSG.TOPBAR .AZ "A2osX Edit:%s" +MSG.STATUSBAR .AZ "(Press Ctrl-A For Help) Len: %5D Pos: %5D Col: %3d Line: %5D" MSG.STATUSBAR.H .AZ "Press any key to exit this screen:" MSG.STATUSBAR.F .AZ "Find:%s" MSG.STATUSBAR.R .AZ "Replace:%s" -MSG.STATUSBAR.S .AZ "Save:%s" +MSG.STATUSBAR.S .AZ "Save (Ctrl-C):%s" MSG.STATUSBAR.E .AZ "Error:%h" MSG.GOTOXY .AZ "\e[%d;%dH" -MSG.HELPLINE .AZ "%S\e[K" +MSG.HELPLINE .AZ "\e[93;44m%S\e[K" MSG.HELP >PSTR "All commands: (* = Not yet implemented)" >PSTR "------------" >PSTR " Ctrl-A : This help screen" diff --git a/BIN/SH.S.CL.txt b/BIN/SH.S.CL.txt index 434f15c4..1ac2945f 100644 --- a/BIN/SH.S.CL.txt +++ b/BIN/SH.S.CL.txt @@ -48,7 +48,7 @@ CL.READN0A >PUSHA CL.CHARIN tax >LDA.G CL.bEscMode \e ? - beq .13 + beq .4 cpx #'[' beq .8 \e[ @@ -59,40 +59,40 @@ CL.CHARIN tax ldx #EscChars.Cnt-1 -.17 cmp EscChars,x - beq .18 +.1 cmp EscChars,x + beq .2 dex - bpl .17 + bpl .1 .8 rts invalid \e[ sequence -.18 >LDA.G READ.N - bne .19 +.2 >LDA.G READ.N + bne .3 lda EscChars.Remap,x bra CL.READN0A -.19 txa +.3 txa asl tax jmp (J.ESC,x) *-------------------------------------- -.13 cpx #C.ESC - bne .11 +.4 cpx #C.ESC + bne .5 lda #$ff >STA.G CL.bEscMode clc rts -.11 >LDA.G READ.N +.5 >LDA.G READ.N beq CL.READN0X cpx #C.SPACE bcc CL.CHARIN.CTRL -.1 cpx #C.DEL + cpx #C.DEL bne CL.Insert *-------------------------------------- * Erase char BEFORE cursor @@ -102,10 +102,13 @@ CL.CHARIN tax >LDA.G CL.Ptr beq .8 + >LDA.G bREAD.S + bmi .6 + lda #C.BS >SYSCALL PutChar - >DEC.G CL.Ptr +.6 >DEC.G CL.Ptr jmp CL.DEL *-------------------------------------- CL.Insert >LDA.G CL.Len @@ -116,6 +119,7 @@ CL.Insert >LDA.G CL.Len >STA.G CL.Len pha + .1 ply dey lda (ZPCLBuf),y Move from Ptr To end of buffer forward... @@ -128,6 +132,7 @@ CL.Insert >LDA.G CL.Len bne .1 ply Y=CL.Ptr + * >LDA.G CL.Ptr txa @@ -136,6 +141,7 @@ CL.Insert >LDA.G CL.Len >LDA.G bREAD.S bmi .7 + txa >SYSCALL PutChar jsr CL.PrintEOL @@ -143,8 +149,10 @@ CL.Insert >LDA.G CL.Len .7 >LDA.G READ.N READ N = 1, don't wait for CR dec bne .8 + lda #$ff >STA.G CL.bReady + .8 clc rts *-------------------------------------- @@ -207,10 +215,13 @@ CL.RESET.1 >STA.G CL.Ptr *-------------------------------------- CL.BS >LDA.G CL.Ptr beq .9 + dec sta (pData),y + >LDA.G bREAD.S bmi .9 + lda #C.BS >SYSCALL PutChar .9 rts @@ -248,6 +259,10 @@ CL.DEL pha bne .1 pla >DEC.G CL.Len + >LDA.G bREAD.S + bpl CL.PrintEOL + clc + rts *-------------------------------------- CL.PrintEOL >LDA.G CL.Ptr .1 >CMP.G CL.Len diff --git a/BIN/SH.S.CMD.txt b/BIN/SH.S.CMD.txt index 9c677baa..535fd9a4 100644 --- a/BIN/SH.S.CMD.txt +++ b/BIN/SH.S.CMD.txt @@ -354,6 +354,7 @@ CMD.ECHO.RTS rts *-------------------------------------- CMD.READ lda (ZPArgVBufPtr) beq .9 + stz ZPVarNamePtr+1 >STZ.G bREAD.S dec @@ -406,6 +407,7 @@ CMD.READ lda (ZPArgVBufPtr) beq .9 CMD.READ.VAR jsr CL.Reset + .1 >SYSCALL GetChar bcs CMD.READ.VAR.9 diff --git a/ProDOS.FX/ProDOS.S.GP.txt b/ProDOS.FX/ProDOS.S.GP.txt index 5506350b..46a65fe0 100644 --- a/ProDOS.FX/ProDOS.S.GP.txt +++ b/ProDOS.FX/ProDOS.S.GP.txt @@ -25,7 +25,7 @@ drivertbl2 .DA nodevice .DA nodevice .DA nodevice .DA #0 devnum -numdevs .DA #$ff count (-1) active devices +GP.numdevs .DA #$ff count (-1) active devices devlist .HS 00000000000000 up to 14 units may be active .HS 00000000000000 .DA #0 diff --git a/ProDOS.FX/ProDOS.S.ILDR.txt b/ProDOS.FX/ProDOS.S.ILDR.txt index fa587ed1..e0c01696 100644 --- a/ProDOS.FX/ProDOS.S.ILDR.txt +++ b/ProDOS.FX/ProDOS.S.ILDR.txt @@ -6,35 +6,38 @@ ILDR.START jsr MLI check for file 'atinit' .DA gfi_list bcc gfi_ok branch if 'atinit' file found - cmp #$46 file not found? + cmp #MLI.E.FNOTFND beq H23DF if so, continue loading interpreter bne H23E2 + gfi_ok lda gfi_type cmp #$E2 is 'atinit' correct file type? bne H23E2 error - wrong file type + jsr MLI open 'atinit' file - .DA #$C8 + .DA #MLIOPEN .DA atopen bne H23E2 error lda #$9F max size = 39.75k ($2000-$BF00) sta rdlen+1 stz rdlen jsr MLI read 'atinit' file to 'sysentry' - .DA #$CA + .DA #MLIREAD .DA rdparm bne H23E2 error - too big jsr MLI close 'atinit' file - .DA #$CC + .DA #MLICLOSE .DA clparm bne H23E2 error lda RROMBNK2 enable ROM jsr sysentry execute ATinit -H23DF jmp goloadint execute .system file + +H23DF jmp ILDR.SYSTEM execute .system file * fatal error -H23E2 ldx $23F0 BUG: should be ATINIT.ERR -H23E5 lda $23F0,x BUG: should be ATINIT.ERR +H23E2 ldx ATINIT.ERR +H23E5 lda ATINIT.ERR,x sta vline16,x dex bne H23E5 @@ -54,11 +57,12 @@ atopen .HS 03 .HS 01 ref# hard coded since no other files atinitname .DA #06 length of name .AS -"atinit" name of appletalk config file -goloadint - lda /dbuf search directory buffer +*-------------------------------------- +ILDR.SYSTEM lda /dbuf search directory buffer sta idxl+1 lda #$04 start 1 entry past header bne H2434 always. + H2432 lda idxl calc next entry position H2434 clc adc dbuf+35 inc to next entry address @@ -72,6 +76,7 @@ H2434 clc cmp #$09 end of directory? bne H244D no. jmp nointrp no interpreter, go quit. + H244D lda #$04 reset index to 1st entry in next block. sta idxl H2451 inc idxl+1 inc to next page. @@ -147,6 +152,7 @@ H24C8 jsr MLI close interpreter file bne H24DF if not. sta KBDSTROBE clear keyboard H24DF lda RROMBNK2 enable ROM + jmp sysentry go run interpreter cflag .HS 00 set if a //c. @@ -167,13 +173,17 @@ H24FA lda iomess,y dex dey bpl H24FA - bmi H2511 + bra * + toolong ldy #$1E + H2508 lda lgmess,y sta vline16+5,y dey bpl H2508 -H2511 bmi H2511 + + bra * + lgmess .AS -"** System program too large **" iomess .AS -"** Unable to load" .AS -" X.System *********" diff --git a/ProDOS.FX/ProDOS.S.IRQ.txt b/ProDOS.FX/ProDOS.S.IRQ.txt index d650cf26..ada16b9e 100644 --- a/ProDOS.FX/ProDOS.S.IRQ.txt +++ b/ProDOS.FX/ProDOS.S.IRQ.txt @@ -6,36 +6,35 @@ NEW * $2D9B-2DFF moved to $FF9B-FFFF *-------------------------------------- IRQ.START -* pha -* lda accsav -* sta oldacc -* pla -* sta accsav +XDOS.IRQV ldx #$FA save 6 bytes of page 0 -* pla get status register from stack -* pha and put it back. -* and #$10 is it a break or interrupt? -* bne H2DC2 branch if break. +.2 lda $00,x + sta svzerop-$FA,x + inx + bne .2 -* lda $D000 get ram bankid (LC1 = $D8, LC2=$EE) -* eor #$D8 is the system active? ($D8) -* beq sysactv branch if it is + ldx #0 -* lda #$FF +.3 stx irqXindex -*sysactv sta bankid -* sta afbank -* lda /aftirq setup return address -* pha -* lda #aftirq -* pha -* lda #$04 status reg with interrupt flag set -* pha + lda inttbl+1,x test for a valid routine. + beq .4 branch if no routine. -*H2DC2 lda /romirq setup ROM re-entry -* pha -* lda #romirq -* pha + jsr gointX execute + + bcc irqdone + +.4 ldx irqXindex + inx + inx + cpx #10 + bne .3 + + inc irqcount allow 255 unclaimed interrupts + bne irqdone before system death. + + lda #$01 bad irq so + jsr sysdeath kill the system. .LIST ON IRQ.FREE1 .EQ $ffc8-* @@ -53,23 +52,20 @@ lreset lda /resetv-1 pha jmp gorom -*rreset .DA resetv-1 rts to resetv +irqdone ldx #$FA -*fix45 sta p8areg A register savearea -* lda oldacc -* sta accsav -* lda RRAMWRAMBNK1 read/write RAM bank 1 -* lda RRAMWRAMBNK1 -* lda afbank -* jmp irqxit0 +.1 lda svzerop-$FA,x restore the zero page + sta $00,x + inx + bne .1 + + rti -stypfx sty newpfxptr fix appletalk PFI bug - sty preflag prefix flag - rts +gointX jmp (inttbl,x) interrupt routine x -stapfx sta newpfxptr - sta preflag - rts +irqcount .HS 00 # of unclaimed interrupts. +irqXindex .HS 00 +svzerop .HS 000000000000 .LIST ON IRQ.FREE2 .EQ $fffa-* diff --git a/ProDOS.FX/ProDOS.S.LDR.B.txt b/ProDOS.FX/ProDOS.S.LDR.B.txt deleted file mode 100644 index 88dab6a3..00000000 --- a/ProDOS.FX/ProDOS.S.LDR.B.txt +++ /dev/null @@ -1,71 +0,0 @@ -NEW - AUTO 3,1 -*-------------------------------------- -* patch to gsos vectors so error is returned for os calls - rev note #101 - -patch101 php - sei disable interrupts - clc - xce full native mode - >LONGMX - phb save DBR - pha - pha - pea $0000 length of patch - pea $0010 0000/0010 = 16 bytes - pea $3101 user id for prodos 8 - pea $8018 attributes (locked/nospec/nocross) - pha - pha - >IIGS NewHandle - lda $01,s retrieve handle - tax - lda $03,s - tay - pea $0000 copy the code into the handle - pea L2C4D - phy - phx - pea $0000 length of patch = 0000/0010 - pea $0010 - >IIGS PtrToHand - plx low word of handle - plb set DBR to handle's bank - lda >1,x get upper 16 bits of 24 bit address - tay save in y - lda >0,x get low 8 bits of address - and ##$00FF clear high byte - xba put address in high byte - ora ##$005C include JML opcode - sta GSOS2 store in gsos vectors - clc - adc ##$000B - sta GSOS - tya store upper 16 bits too - sta GSOS2+2 - adc ##$0000 adj for possible page crossing - sta GSOS+2 - plb remove garbage byte from stack - plb restore DBR. - sec - xce back to emulation mode - plp - rts - -* copy of the code that goes in the handle - -L2C4D lda 1,s - sta 7,s - lda 2,s - sta 8,s - pla - pla - pla - lda ##$00FF #NoOS - sec - rtl - -MAN -SAVE USR/SRC/PRODOS.FX/PRODOS.S.LDR.B -LOAD USR/SRC/PRODOS.FX/PRODOS.S -ASM diff --git a/ProDOS.FX/ProDOS.S.LDR.A.txt b/ProDOS.FX/ProDOS.S.LDR.txt similarity index 76% rename from ProDOS.FX/ProDOS.S.LDR.A.txt rename to ProDOS.FX/ProDOS.S.LDR.txt index 2d5171f6..bdb194de 100644 --- a/ProDOS.FX/ProDOS.S.LDR.A.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -1,14 +1,25 @@ NEW AUTO 3,1 + + .MA DEBUG +:1 bit $C000 + bpl :1 + sta $C010 + .EM + H2000 jmp prostart jmp atalkset jmp p16start -LDR.MSG.0 .AS -"PRODOS FX: " -LDR.MSG.0.LEN .EQ *-LDR.MSG.0 +LDR.MSG.0 .AS "PRODOS FX: " +LDR.MSG.0.LEN .EQ *-LDR.MSG.0 +LDR.MSG.UNSUPP .AS -"UNSUPPORTED HARDWARE." +LDR.MSG.UNSUPP.LEN .EQ *-LDR.MSG.UNSUPP +LDR.MSG.ROOTERR .AS -"Unable To read ROOT dir." +LDR.MSG.ROOTERR.LEN .EQ *-LDR.MSG.ROOTERR -p16start inc setuprts set = 2 for GQuit rts -atalkset inc setuprts set = 1 for appletalk rts +p16start inc LDR.BootFlag set = 2 for GQuit rts +atalkset inc LDR.BootFlag set = 1 for appletalk rts prostart lda unitnum sta LDR.MLIOL.P+1 @@ -25,6 +36,7 @@ prostart lda unitnum ldx #LDR.MSG.0.LEN-1 .1 lda LDR.MSG.0,x + and #$3F sta $400,x dex bpl .1 @@ -96,7 +108,12 @@ m64k sta idapple save machine id bra m128k -LDR.UNSUPP.HW jmp H22EB need enhanced IIe +LDR.UNSUPP.HW ldy #LDR.MSG.UNSUPP.LEN-1 +.1 lda LDR.MSG.UNSUPP,y + sta vline14+2,y + dey + bpl .1 + bmi * * we have 128k @@ -144,6 +161,8 @@ m128k lda #$30 set id = 128k present sta ZPOutBufPtr+1 jsr X.Unpak + jsr lc1in switch in language card bank 1. + lda PAKME.XRW sta ZPInBufPtr lda PAKME.XRW+1 @@ -176,6 +195,12 @@ m128k lda #$30 set id = 128k present sta ZPOutBufPtr+1 jsr X.Unpak + ldx #XDOS.DATA.LEN + +.3 stz XDOS.DATA-1,x + dex + bne .3 + lda PAKME.IRQ sta ZPInBufPtr lda PAKME.IRQ+1 @@ -189,13 +214,19 @@ m128k lda #$30 set id = 128k present lda kversion sta xdosver save current version for dir use + lda idapple + sta MACHID + lda cortland beq LDR.II branch if // family -LDR.IIGS inc cortland it's a Cortland, set loader flag - stz vmode force setvid to reset cursor +LDR.IIGS stz vmode force setvid to reset cursor jsr setvid reset output to screen + ldx PAKME.CCLK + ldy PAKME.CCLK+1 + jsr LDR.SetupCLK + ldx PAKME.SEL2 ldy PAKME.SEL2+1 @@ -209,26 +240,9 @@ LDR.IIGS inc cortland it's a Cortland, set loader flag ldx PAKME.SEL2 ldy PAKME.SEL2+1 - - stx ZPInBufPtr - sty ZPInBufPtr+1 - lda #$D100 - sta ZPOutBufPtr - lda /$D100 - sta ZPOutBufPtr+1 - jsr X.Unpak - - lda PAKME.CCLK - sta ZPInBufPtr - lda PAKME.CCLK+1 - sta ZPInBufPtr+1 - lda #$D742 - sta ZPOutBufPtr - lda /$D742 - sta ZPOutBufPtr+1 - jsr X.Unpak - - lda setuprts + jsr LDR.SetupQC + + lda LDR.BootFlag bne .1 branch if prodos 8 alone * running from gs/os shell so zero out os_boot for appletalk @@ -239,118 +253,17 @@ LDR.IIGS inc cortland it's a Cortland, set loader flag .1 jmp RAMDRV.Install * put dispatcher in bank 2 of language card -LDR.II lda LDR.MLIOL.P+1 place boot devnum in globals - sta LDR.MLIRB.P+1 - sta devnum last device used - - jsr devsrch finish setting up globals - - lda LDR.MLIRB.P+1 - sta devnum - - jsr lc1in switch in language card bank 1. - - lda PAKME.TCLK - sta ZPInBufPtr - lda PAKME.TCLK+1 - sta ZPInBufPtr+1 - lda #$D742 - sta ZPOutBufPtr - lda /$D742 - sta ZPOutBufPtr+1 - jsr X.Unpak - - lda #calldisp - sta jspare+1 P8 system death vector - lda /calldisp - sta jspare+2 - - lda RRAMWRAMBNK2 read/write RAM bank 2 - lda RRAMWRAMBNK2 - - ldx PAKME.SEL1 else, use Bird's Better Bye - ldy PAKME.SEL1+1 if correct machine. - - stx ZPInBufPtr - sty ZPInBufPtr+1 - lda #$D100 - sta ZPOutBufPtr - lda /$D100 - sta ZPOutBufPtr+1 - jsr X.Unpak - - lda #$EE byte to distinguish LC bank 2 - sta $D000 - jsr lc1in switch in LC bank 1 - -RAMDRV.Install ldy #$99 move $9A bytesfrom lcsrc to lcdest. - -.1 lda RAM,y transfer main bank portion of driver - sta RAMDRV,y - dey - cpy #$FF - bne .1 - - ldx #RAMX set up to move aux portion of driver - stx A1L - dex - stx A2L - ldx /RAMX - stx A1L+1 - inx - stx A2L+1 - lda #RAMXDRV - sta A4L - lda /RAMXDRV RAMX to RAMXDRV - sta A4L+1 - sec irection = to aux bank. - jsr auxmove move aux bank portion of driver. - lda #RAMDRV put driver address into - sta drivertbl2+6 slot 3, drive 2. - lda /RAMDRV - sta drivertbl2+7 - inc numdevs count (-1) active devices - ldx numdevs - lda #$BF unit num of /RAM - sta devlist,x - -* check interrupt vector to determine ROM version - -noramdsk lda RROMWRAMBNK2 - ldy irqv interrupt vector - ldx irqv+1 x = high byte - jsr lc1in set language card bank 1 to r/w - cpx #$D0 is it > $D000 (old roms) - -* lda #$00 was for setting removed IRQFLAG - bcc .1 +LDR.II ldx PAKME.SEL1 + ldy PAKME.SEL1+1 + jsr LDR.SetupQC - jmp H22EB need enhanced Roms - -.1 sta SETALTZP - lda #$FF set aux sp = $FF - sta auxsp - stx irqv+1 interrupt vector - sty irqv save irq vector in aux lc - sta CLRALTZP - stx irqv+1 save irq vector in main lc - sty irqv -* lda #$01 was for setting removed IRQFLAG - - stz cortflag assume not Cortland system - - lda cortland running on a Cortland ? - beq .2 branch if not. - inc cortflag yes it's Cortland - bra docard - * check for a rom in slot 3. if no rom, use internal $C300 firmware .2 sta CLRC3ROM lda rommap slot ROM bit map and #$08 mask all but slot 3 bne isromin3 taken if rom in slot 3 - bra H2247 else continue booting + bra CLK.Install else continue booting * found a rom in slot 3. is it an external, identifiable 80 col card * with interrupt routines? if so, enable it else use internal $C300 firmware. @@ -396,47 +309,99 @@ hitswtch sta CLRC3ROM .1 sta CLRPAGE2 sta CLR80STORE beq docard branch if card is there - lda machid machine ID byte - and #$FD clear 80-col bit 2 (no card) - bne H2244 always -docard lda machid - ora #$02 turn bit 2 on (80-col card is present) + lda #MACHID.COL80 + lda machid machine ID byte + trb MACHID clear 80-col bit 2 (no card) + bra CLK.Install -H2244 sta machid -H2247 lda cortland are we running on a //gs ? - beq H225D if not. - lda #$4C enable clock routine by putting a jmp - sta clockv in front of clock vector +docard lda #MACHID.COL80 + tsb MACHID turn bit 2 on (80-col card is present) + +CLK.Install jsr LDR.ClkDevScan +*-------------------------------------- +RAMDRV.Install jsr lc1in + ldx PAKME.RAM + ldy PAKME.RAM+1 - lda PAKME.CCLK - sta ZPInBufPtr - lda PAKME.CCLK+1 - sta ZPInBufPtr+1 - lda #$D742 + stx ZPInBufPtr + sty ZPInBufPtr+1 + lda #$FF00 sta ZPOutBufPtr - lda /$D742 + lda /$FF00 sta ZPOutBufPtr+1 jsr X.Unpak - lda #$01 set bit 0 = clock present - tsb machid -H225D lda setuprts get setup entry point flag - beq H2267 taken if normal boot. + sta SETWRITEAUX + + ldx PAKME.RAMX + ldy PAKME.RAMX+1 + + stx ZPInBufPtr + sty ZPInBufPtr+1 + lda #$0200 + sta ZPOutBufPtr + lda /$0200 + sta ZPOutBufPtr+1 + jsr X.Unpak + + sta CLRWRITEAUX + + lda #RAMDRV put driver address into + sta drivertbl2+6 slot 3, drive 2. + lda /RAMDRV + sta drivertbl2+7 + inc GP.numdevs count (-1) active devices + ldx GP.numdevs + lda #$BF unit num of /RAM + sta devlist,x + +LDR.IRQ lda RROMWRAMBNK2 + ldy irqv interrupt vector + ldx irqv+1 x = high byte + jsr lc1in set language card bank 1 to r/w + + sta SETALTZP + lda #$FF set aux sp = $FF + sta auxsp + stx irqv+1 interrupt vector + sty irqv save irq vector in aux lc + + sta CLRALTZP + stx irqv+1 save irq vector in main lc + sty irqv + + lda LDR.MLIOL.P+1 place boot devnum in globals + sta LDR.MLIRB.P+1 + sta devnum last device used + + jsr LDR.BlkDevScan finish setting up globals + + lda LDR.MLIRB.P+1 + sta devnum + + lda #calldisp + sta jspare+1 P8 system death vector + lda /calldisp + sta jspare+2 + + lda LDR.BootFlag get setup entry point flag + beq LDR.ReadRoot taken if normal boot. lda RROMBNK2 rts return to caller at setup entry point. -setuprts .DA #$00 0 = normal boot, <>0 = return + +LDR.BootFlag .DA #$00 0 = normal boot, <>0 = return * set prefix to boot device -H2267 jsr MLI +LDR.ReadRoot jsr MLI .DA #MLIONLINE .DA LDR.MLIOL.P - bcs relocerr + bcs .9 lda pbuf+1 get volume name length. and #$0F strip devnum - beq relocerr + beq .9 inc add 1 for leading '/' sta pbuf save prefix length. lda #'/' place leading '/' in prefix buffer @@ -445,59 +410,50 @@ H2267 jsr MLI jsr MLI .DA #MLISETPREFIX .DA LDR.MLISETP.P - bcs relocerr - tax =0 - stx dst - ldy #$02 read directory into buffer + bcs .9 + + stz dst lda /DirBlkBuf -H228E sta dst+1 - sta LDR.MLIRB.P+3 - sty LDR.MLIRB.P+4 - stx LDR.MLIRB.P+5 + ldy #$02 read directory into buffer + ldx #0 + +.1 sta dst+1 + sta LDR.MLIRB.P+3 Data buf HI + sty LDR.MLIRB.P+4 Blk Num LO + stx LDR.MLIRB.P+5 Blk Num HI jsr MLI .DA #MLIREADBLOCK .DA LDR.MLIRB.P - bcs relocerr + bcs .9 + ldy #$03 get next block# from link lda (dst),y tax dey - ora (dst),y if both bytes are the same - beq H22B7 then no more blocks of directory. + ora (dst),y 00 00 -> Last Block + beq .8 + lda (dst),y tay lda dst+1 - clc - adc #$02 add $200 to buffer pointer + inc + inc add $200 to buffer pointer cmp /dbuf+$800 until it points past end of buffer. - bcc H228E if ok, read next block. + bcc .1 if ok, read next block. -H22B7 jmp $800 jmp to "load interpreter" code +.8 jmp $800 jmp to "load interpreter" code -* relocation/configuration error - -relocerr sta RROMBNK2 +.9 sta RROMBNK2 jsr home - ldy #$1D + ldy #LDR.MSG.ROOTERR-1 -.1 lda LDR.MSG.LdrErr,y +.91 lda LDR.MSG.ROOTERR,y sta vline12+4,y dey - bpl .1 + bpl .91 bmi * -LDR.MSG.LdrErr .AS -"Relocation/Configuration Error" - -H22EB ldy #$23 -.1 lda LDR.MSG.EnhErr,y - sta vline14+2,y - dey - bpl .1 - bmi * - -LDR.MSG.EnhErr .AS -"REQUIRES ENHANCED APPLE IIE OR LATER" - LDR.MLIOL.P .DA #2 .DA #$60 .DA pbuf+1 @@ -511,40 +467,49 @@ LDR.MLIRB.P .DA 0 2 byte block number cortland .BS 1 cortland loader flag (1 = Cortland) -newquitflag .BS 1 1 = old quit code +*-------------------------------------- +LDR.SetupQC bit RRAMWRAMBNK2 read/write RAM bank 2 + bit RRAMWRAMBNK2 -* move thunderclock + stx ZPInBufPtr + sty ZPInBufPtr+1 + lda #$D100 + sta ZPOutBufPtr + lda /$D100 + sta ZPOutBufPtr+1 + jsr X.Unpak -rlclk64 .DA #$01 relocation table. 1=move src to dst - .DA $D742 destination - .DA TCLK.END-TCLK.START - .DA TCLK source + lda #$EE byte to distinguish LC bank 2 + sta $D000 + jmp lc1in switch in LC bank 1 +*-------------------------------------- +LDR.ClkDevScan rts +*-------------------------------------- +LDR.SetupCLK stx ZPInBufPtr + sty ZPInBufPtr+1 + lda #$D742 + sta ZPOutBufPtr + lda /$D742 + sta ZPOutBufPtr+1 + jsr X.Unpak - .DA #$04 4=relocate and move program - .DA TCLK.START - .DA TCLK.CEND-TCLK.START - .DA TCLK.START - .HS 00 - .HS C1C1 -clock64 .DA #$00 - .HS FF done - -* determine which system model and save in machine id (idapple) + lda #$4C enable clock routine by putting a jmp + sta clockv in front of clock vector + lda #MACHID.CLK + tsb MACHID + rts +*-------------------------------------- * find all disk devices in system slots and set up address * and device table in prodos global page. if there is a disk * card in slot 2 then limit the # of devices in slot 5 * smartport to only 2 -numdev2 .HS 0000000000000000 8 bytes for smartport call -driveradr .DA 0 -d2idx .DA #0 -diskins2 .DA #0 msb clear if drive in slot 2 - -devsrch stz dst +*-------------------------------------- +LDR.BlkDevScan stz dst stz dst+1 stz idxl ldx #$FF init to no active devices. - stx numdevs count (-1) active devices. + stx GP.numdevs count (-1) active devices. lda #$0E start disk // area at end of devlist. sta d2idx @@ -555,8 +520,10 @@ devsrch stz dst sta idxl+1 check slot 2 jsr cmpid is there a disk in slot 2 ? ror diskins2 if so, clear msb else set it. + lda #$C7 search slots from high to low sta idxl+1 + H26AB jsr cmpid bcs H270C if no ProDOS device in this slot. lda (idxl),y check last byte of $Cn rom (y = $ff) @@ -593,9 +560,10 @@ H26E6 sta driveradr+1 jsr installdev install 1 or 2 devices from this slot. plp get back if it's a disk // (carry). bcc nxtdsk2 if not disk //. + dex move the list pointer back by 2 devices dex - stx numdevs count (-1) active devices + stx GP.numdevs count (-1) active devices dec d2idx increase the disk two index dec d2idx ldy d2idx @@ -604,8 +572,10 @@ H26E6 sta driveradr+1 sta devlist,y move then toward the end of the list lda devlist,x sta devlist+1,y - dex back to numdevs again + dex back to GP.numdevs again + nxtdsk2 clc + H270C jsr sltrom test for ROM in given slot and set flags dec idxl+1 next lower slot. lda idxl+1 @@ -620,16 +590,18 @@ H270C jsr sltrom test for ROM in given slot and set flags * now copy the disk // list to the end of the regular list. * start by making the device count include disk //'s - ldx numdevs current device count - 1 + ldx GP.numdevs current device count - 1 lda #$0E sec sbc d2idx beq H2747 if there were no disk //'s then done. + clc - adc numdevs sum of disk //'s and others. - sta numdevs + adc GP.numdevs sum of disk //'s and others. + sta GP.numdevs inx move to open space in regular list. ldy #$0D first disk // entry. + H272F lda devlist,y pha lda devlist,x @@ -641,8 +613,9 @@ H272F lda devlist,y sty d2idx use as a temp cpx d2idx bcc H272F continue until indexes cross + H2747 ldy #$00 - ldx numdevs now change the device order so that + ldx GP.numdevs now change the device order so that H274C lda devlist,x the boot device will have highest pha priority. @@ -655,7 +628,7 @@ H274C lda devlist,x the boot device will have highest H275A dex bpl H274C - ldx numdevs now reverse order of search, hi to lo. + ldx GP.numdevs now reverse order of search, hi to lo. tya was boot device found ? beq H2777 lda devnum make boot device 1st in search order. @@ -668,48 +641,26 @@ H275A dex sta devlist,x dex bmi H277E branch if only 1 device, 2 drives. + H2777 pla sta devlist,x dex bpl H2777 -H277E jsr fndtrd save accumulated machine id. - beq .1 - sta machid machine ID byte -.1 rts +H277E rts stadrv ora devid combine with attributes. - ldx numdevs + ldx GP.numdevs inx put device # into device list. sta devlist,x asl now form drive 2 device number, if any. rts + sltrom bcc H27F3 branch if disk drive -* test for clock card - ldy #$06 - -.1 lda (idxl),y - cmp dskid,y - bne .2 no clock - dey - dey - bpl .1 - - lda idxl+1 transfer hi slot address - sbc #$C1 minus $C1 (default) to relocate - sta clock64 references to clock rom. - lda #$4C enable jump vector in globals. - sta clockv P8 clock vector. - lda idapple mark clock as present. - beq H277E - - ora #$01 - sta idapple xxxxxxx1 = clock present. - bne H27F3 always taken. * test for 80 col card -.2 ldy #$05 + ldy #$05 lda (idxl),y cmp #$38 bne H27E4 @@ -742,6 +693,7 @@ H27EC cmp (idxl) look for floating bus bne H2801 no rom inx bne H27EC + H27F3 lda idxl+1 mark a bit in slot byte and #$07 to indicate rom present. tax @@ -755,31 +707,6 @@ dskid .HS 082028005803703C * slot bits sltbit .HS 0002040810204080 -fndtrd clc - ldy sltbit -.1 lda (lookptr),y - and #$DF - adc sltbit - sta sltbit - rol sltbit - iny - cpy sltbit+3 - bne .1 - tya - asl - asl - asl - asl - tay - eor sltbit - adc #$0B - bne .2 - lda idapple - rts - -.2 lda #$00 - rts - installdev php how many drives (carry). lda idxl+1 get index to global device table and #$07 for this slot... @@ -795,7 +722,7 @@ installdev php how many drives (carry). inx else presume that 2nd drive is present. sta devlist,x active device list. -.1 stx numdevs save updated device count. +.1 stx GP.numdevs save updated device count. asl shift # of drives back into carry. lda driveradr get high address of device driver. sta drivertbl1,y device driver table 1. @@ -1034,8 +961,8 @@ mount ldx #$0C lda spvect+2 sta spvecthi-1,x lda RROMBNK2 write protect lc ram. - inc numdevs - ldx numdevs + inc GP.numdevs + ldx GP.numdevs tya lsr cmp #$08 @@ -1063,6 +990,11 @@ H29EB jsr cmpid is it a disk controller? clc smartport found .9 rts +numdev2 .HS 0000000000000000 8 bytes for smartport call +driveradr .DA 0 +d2idx .DA #0 +diskins2 .DA #0 msb clear if drive in slot 2 + * test for 128k. use page 0 for this routine LDR.Test128 lda #$EE @@ -1103,7 +1035,71 @@ lc1in lda RRAMWRAMBNK1 lda RRAMWRAMBNK1 rts +* patch to gsos vectors so error is returned for os calls - rev note #101 + +patch101 php + sei disable interrupts + clc + xce full native mode + >LONGMX + phb save DBR + pha + pha + pea $0000 length of patch + pea $0010 0000/0010 = 16 bytes + pea $3101 user id for prodos 8 + pea $8018 attributes (locked/nospec/nocross) + pha + pha + >IIGS NewHandle + lda $01,s retrieve handle + tax + lda $03,s + tay + pea $0000 copy the code into the handle + pea L2C4D + phy + phx + pea $0000 length of patch = 0000/0010 + pea $0010 + >IIGS PtrToHand + plx low word of handle + plb set DBR to handle's bank + lda >1,x get upper 16 bits of 24 bit address + tay save in y + lda >0,x get low 8 bits of address + and ##$00FF clear high byte + xba put address in high byte + ora ##$005C include JML opcode + sta GSOS2 store in gsos vectors + clc + adc ##$000B + sta GSOS + tya store upper 16 bits too + sta GSOS2+2 + adc ##$0000 adj for possible page crossing + sta GSOS+2 + plb remove garbage byte from stack + plb restore DBR. + sec + xce back to emulation mode + plp + rts + +* copy of the code that goes in the handle + +L2C4D lda 1,s + sta 7,s + lda 2,s + sta 8,s + pla + pla + pla + lda ##$00FF #NoOS + sec + rtl + MAN -SAVE USR/SRC/PRODOS.FX/PRODOS.S.LDR.A +SAVE USR/SRC/PRODOS.FX/PRODOS.S.LDR LOAD USR/SRC/PRODOS.FX/PRODOS.S ASM diff --git a/ProDOS.FX/ProDOS.S.NCLK.txt b/ProDOS.FX/ProDOS.S.NCLK.txt new file mode 100644 index 00000000..619f4fe3 --- /dev/null +++ b/ProDOS.FX/ProDOS.S.NCLK.txt @@ -0,0 +1,91 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* Driver For DS1216E +*-------------------------------------- +NCLK.START php + sei + sta $CFFF Make cards release $C8xx space + sta $C300 + lda $C304 Reset DS1216E comparison register with READ A2=1 + ldy #7 Read 8 bytes... + +.1 lda DS1216E.PATTERN,y + phy + ldy #8 ....of 8 bits + +.2 ldx #0 + lsr + bcc .3 + inx + +.3 bit $C300,x Write Pattern bit in A0, with A2=0 + dey + bne .2 + + ply + dey + bpl .1 + + ldx #7 + +.4 ldy #8 + +.5 lda $C304 Read Byte... + + lsr + ror DS1216E.DATA,x + + dey + bne .5 + + lda DS1216E.DATA,x + pha + lsr + lsr + lsr + lsr + tay + pla + and #$0F + + clc + + .HS 2C Bit Absolute to skip adc #$0A + +.6 adc #$0A + dey + bpl .6 + + sta DS1216E.DATA,x + dex + bpl .4 + + lda DS1216E.DATA+4 Get HH + sta TIMELO+1 + lda DS1216E.DATA+5 Get mm + sta TIMELO + lda DS1216E.DATA+1 Get MM + asl + asl + asl + asl + asl + ora DS1216E.DATA+2 Get DD + sta DATELO + lda DS1216E.DATA Get YY + rol + sta DATELO+1 + + plp + rts +*-------------------------------------- +DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0 +DS1216E.DATA .BS 8 Reverted YY MM DD Day HH mm SS CS +*-------------------------------------- +NCLK.LEN .EQ *-NCLK.START +*-------------------------------------- +MAN +SAVE USR/SRC/PRODOS.FX/PRODOS.S.NCLK +LOAD USR/SRC/PRODOS.FX/PRODOS.S +ASM diff --git a/ProDOS.FX/ProDOS.S.RAM.txt b/ProDOS.FX/ProDOS.S.RAM.txt index 0ac3f8cb..fc0cd41f 100644 --- a/ProDOS.FX/ProDOS.S.RAM.txt +++ b/ProDOS.FX/ProDOS.S.RAM.txt @@ -74,7 +74,7 @@ H2D6A lda (A1L),y pointers set in card by 'setptr' sp1 .HS 0000 a1l1 .BS 13 13 bytes of storage *-------------------------------------- -RAM.LEN .EQ RAM.START +RAM.LEN .EQ *-RAM.START MAN SAVE USR/SRC/PRODOS.FX/PRODOS.S.RAM LOAD USR/SRC/PRODOS.FX/PRODOS.S diff --git a/ProDOS.FX/ProDOS.S.RAMX.txt b/ProDOS.FX/ProDOS.S.RAMX.txt index 2987fee7..5953f599 100644 --- a/ProDOS.FX/ProDOS.S.RAMX.txt +++ b/ProDOS.FX/ProDOS.S.RAMX.txt @@ -307,14 +307,6 @@ ex1 sta passit+1 also used by blockwrite clc transfer card to main clv use standard zeropage/stack jmp xfer jmp back from language card. - -* NOTE: the previous section of code MUST NOT use $3FE or $3FF -* since the interrupt vector must go there if aux interrupts -* are to be used. no room for expansion here !! - - .HS 0000 $3FE-$3FF - -* end of obj ram_0 *-------------------------------------- RAMX.LEN .EQ *-RAMX.START MAN diff --git a/ProDOS.FX/ProDOS.S.SEL0.txt b/ProDOS.FX/ProDOS.S.SEL0.txt deleted file mode 100644 index a363f021..00000000 --- a/ProDOS.FX/ProDOS.S.SEL0.txt +++ /dev/null @@ -1,298 +0,0 @@ -NEW - AUTO 3,1 -* object code = sel_0 -* -* dispatcher 1 - this code org's and operates at 'dispadr' (=$1000) but -* is resident in memory at 'displc2' (=$D100) in the alternate 4k bank -* of the language card. the quit call vectors to a routine high in the -* mli that moves dispatcher 1 down and jumps to it. the move routine -* must remain somewhere between $E000-$F7FF. this routine must be less -* than 3 pages in length. - -SEL0.START lda RROMBNK2 read ROM - sta CLR80DISP disable 80 col hardware - sta CLRALTCHAR normal LC, flashing UC - sta CLR80STORE disable 80 column store - jsr setnorm set normal text mode - jsr init init text screen - jsr setvid reset output to screen - jsr setkbd reset input to keyboard - ldx #$17 clear the memory bitmap - lda #$01 but protect page $BF00. - sta memmap,x P8 memory bitmap - dex - lda #$00 -L5A22 sta memmap,x - dex - bpl L5A22 - lda #$CF protect zero page, stack and - sta memmap $400-$7FF (text screen display) -L5A2D jsr home clear screen - jsr crout position top/left - ldx #dsp1msg0-dsp1msgs - jsr prntmsg 'enter prefix...' - lda #$03 line 3 - sta cv - jsr crout - jsr MLI get prefix - .DA #$C7 - .DA dsp1pfx - ldx pbuf get prefix length - lda #$00 put 0 at end of prefix - sta pbuf+1,x - ldx pbuf get length. - beq L5A5D if no prefix to display. -L5A52 lda pbuf,x display prefix directly to screen - ora #$80 normal text - sta vline5-1,x line 5 - dex - bne L5A52 -L5A5D ldx #$00 - dec cv - jsr crout -getkey jsr rdkey input char with cursor - cmp #$8D cr ? - beq L5ABD yes, accept what is entered. - pha no, save the char. - jsr clreol clear rest of line. - pla get char back - cmp #$9B esc ? - beq L5A2D yes, start over - cmp #$98 ctrl-x ? -L5A76 beq L5A2D then start over - cmp #$89 tab ? - beq badkey - cmp #$FF delete ? - beq L5A84 if yes - cmp #$88 backspace ? - bne L5A91 if not -L5A84 cpx #$00 at column 0 ? - beq L5A8B if so, do nothing - dec ch else move left - dex dec char count -L5A8B jsr clreol clear rest of line - jmp getkey get another char -L5A91 bcs L5A99 -badkey jsr bell output bell for bad key - jmp getkey and get another. -L5A99 cmp #$DB below 'Z' ? - bcc L5A9F if yes - and #$DF else shift to uppercase. -L5A9F cmp #$AE below '.' ? - bcc badkey - cmp #$DB above 'Z' ? - bcs badkey - cmp #$BA below ':' ? - bcc goodkey - cmp #$C1 at or above 'A' ? - bcc badkey -goodkey inx - cpx #$27 more than 39 chars ? - bcs L5A76 then too many, go restart. - sta pbuf,x save it - jsr cout - jmp getkey get another. -L5ABD cpx #$00 prefix length = 0 ? - beq L5AD3 if yes, don't set length. - stx pbuf set prefix length. - jsr MLI call mli to set prefix. - .DA #$C6 - .DA dsp1pfx - bcc L5AD3 if ok, go get filename. - jsr bell if not, ring bell - lda #$00 and try again for prefix. -L5AD1 beq L5A76 -L5AD3 jsr home clear screen for application name. - jsr crout - ldx #disp1msg-dsp1msgs - jsr prntmsg 'enter pathname...' -retryrich lda #$03 line 3 - sta cv - jsr crout - ldx #$00 -loop1 jsr rdkey input char with cursor. - cmp #$9B esc ? - bne L5AF4 if not esc. - lda ch esc pressed in column 0 ? - bne L5AD3 if not, get pathname again. - beq L5AD1 if so, get prefix again. -L5AF4 cmp #$98 ctrl-x ? -L5AF6 beq L5AD3 then cancel and get pathname again. - cmp #$89 tab ? - beq L5B09 not good. - cmp #$FF delete ? - beq L5B04 delete char. - cmp #$88 backspace ? - bne L5B07 -L5B04 jmp delchar delete char. -L5B07 bcs L5B0F if > $88 then char may be acceptable. -L5B09 jsr bell output bell (ctl-G) - jmp loop1 not good. -L5B0F cmp #$8D cr ? - beq L5B3C then done. - cmp #$DB less than 'Z' ? - bcc L5B19 no. - and #$DF make sure it's uppercase. -L5B19 cmp #$AE '.' ? - bcc L5B09 not good if less. - cmp #$DB less than '[' ? - bcs L5B09 not good. - cmp #$BA <= '9' ? - bcc L5B29 then ok. - cmp #$C1 greater than 'A' ? - bcc L5B09 if not, then no good. -L5B29 pha it's good, save it. - jsr clreol clear to end of line - pla - jsr cout print it - inx - cpx #$27 more than 39 chars ? - bcs L5AF6 too long, get pathname again. - sta pbuf,x store it. - jmp loop1 get another char -L5B3C lda #$A0 - jsr cout after cr, blank out the cursor. - stx pbuf put length in front of the name. - jsr MLI get file info for pathname in pbuf - .DA #$C4 - .DA dsp1info - bcc L5B4F if no errors. - jmp dsp1error -L5B4F lda dsp1type - cmp #$FF is it a SYS file ? - beq L5B5B yes. - lda #$01 not SYS file error. - jmp dsp1error -L5B5B lda #$00 it's a system file - sta dsp1cln - jsr MLI close all open files - .DA #$CC - .DA dsp1cls - bcc L5B6B - jmp dsp1error -L5B6B lda dsp1acess check for proper access. - and #$01 is read disabled ? - bne L5B77 no, access ok. - lda #$27 i/o error - jmp dsp1error -L5B77 jsr MLI open the file - .DA #$C8 - .DA dsp1open - bcc L5B82 - jmp dsp1error -L5B82 lda dsp1refn copy the reference number - sta dsp1rdn - sta dsp1eofn - jsr MLI get eof - .DA #$D1 - .DA dsp1eof - bcs dsp1error - lda dsp1eofb+2 3rd of 3 bytes. - beq L5B9C if 0 then ok - lda #$27 else i/o error because - bne dsp1error file is too large. -L5B9C lda dsp1eofb move eof to # of bytes to read. - sta dsp1cnt - lda dsp1eofb+1 - sta dsp1cnt+1 - jsr MLI read the file - .DA #$CA - .DA dsp1read - php save the status. - jsr MLI close the file. - .DA #$CC - .DA dsp1cls - bcc L5BBB -L5BB7 plp get status (it is irrelevant now) - bne dsp1error if close generated an error - plp here if close was ok. -L5BBB bcs L5BB7 error. - jmp sysentry execute system file -delchar lda ch is cursor in column 0 ? - beq L5BD3 yes, ignore it. - dex - lda #$A0 blank out the cursor - jsr cout - dec ch - dec ch point to last char entered - jsr cout and blank it too. - dec ch point to that location. -L5BD3 jmp loop1 get next char. -prntmsg lda dsp1msgs,x - beq L5BE1 - jsr cout - inx - bne prntmsg -L5BE1 rts - -* dispatcher 1 error handler - -dsp1error sta errnum - lda #$0C display error message on line 13 - sta cv - jsr crout - lda errnum - cmp #$01 - bne L5BF5 - ldx #dsp1err1-dsp1msgs not a type 'sys' file - bne L5C0B handled separately. -L5BF5 cmp #$40 syntax error in pathname ? - beq L5C09 - cmp #$44 bad subdirectory path ? - beq L5C09 - cmp #$45 volume not found ? - beq L5C09 - cmp #$46 file not found ? - beq L5C09 - ldx #dsp1err2-dsp1msgs if not the errors above then 'i/o error' - bne L5C0B -L5C09 ldx #dsp1err3-dsp1msgs otherwise display 'file/path not found' -L5C0B jsr prntmsg - jmp retryrich retry for application pathname - -dsp1msgs .EQ * -dsp1msg0 .EQ * - .AS -'ENTER PREFIX (PRESS "RETURN" TO ACCEPT)' - .HS 00 -disp1msg .AS -"ENTER PATHNAME OF NEXT APPLICATION" - .HS 00 -dsp1err1 .DA #$87 - .AS -'NOT A TYPE "SYS" FILE' - .HS 00 -dsp1err2 .DA #$87 - .AS -"I/O ERROR " - .HS 00 -dsp1err3 .DA #$87 - .AS -"FILE/PATH NOT FOUND " - .HS 00 -dsp1info .DA #$0A 10 parameters - .DA pbuf pathname buffer -dsp1acess .HS 00 access -dsp1type .HS 00 file type - .BS 13 the rest are unimportant -dsp1open .HS 03 3 parameters for open - .DA pbuf pathname buffer - .DA fbuf fcb buffer -dsp1refn .HS 00 reference # -dsp1cls .DA #01 1 parameter for close -dsp1cln .HS 00 reference # -dsp1read .HS 04 4 parameters for read -dsp1rdn .HS 00 reference # - .DA sysentry .SYS load address -dsp1cnt .HS 0000 byte count - .HS 0000 -dsp1eof .HS 02 2 parameters -dsp1eofn .HS 00 reference # -dsp1eofb .HS 000000 3 byte eof -dsp1pfx .DA #01 1 parameter - .DA pbuf prefix buffer - - .BS $1300-* fill to page boundary - -* end of obj sel_0 -*-------------------------------------- -SEL0.LEN .EQ SEL0.START -MAN -SAVE USR/SRC/PRODOS.FX/PRODOS.S.SEL0 -LOAD USR/SRC/PRODOS.FX/PRODOS.S -ASM diff --git a/ProDOS.FX/ProDOS.S.SEL1.txt b/ProDOS.FX/ProDOS.S.SEL1.txt index c75f3161..4e1c5016 100644 --- a/ProDOS.FX/ProDOS.S.SEL1.txt +++ b/ProDOS.FX/ProDOS.S.SEL1.txt @@ -26,7 +26,7 @@ L5D16 stz memmap,x P8 memory bitmap * drive selector - ldx numdevs get device count and + ldx GP.numdevs get device count and stx lstpntr store in zero page. lda devnum get last slot/drive bne volname @@ -35,7 +35,7 @@ ds2 ldx lstpntr get device list pointer. lda devlist,x get unit number from list. cpx #$01 make sure it's real. bcs L5D3F if so, change list pointer. - ldx numdevs get device count. + ldx GP.numdevs get device count. inx L5D3F dex decrement list pointer and restore. stx lstpntr @@ -399,7 +399,7 @@ rd_refn .HS 01 reference number dhdr_len .HS 00 directory header length (actually uses 2 bytes) *-------------------------------------- -SEL1.LEN .EQ SEL1.START +SEL1.LEN .EQ *-SEL1.START MAN SAVE USR/SRC/PRODOS.FX/PRODOS.S.SEL1 LOAD USR/SRC/PRODOS.FX/PRODOS.S diff --git a/ProDOS.FX/ProDOS.S.SEL2.txt b/ProDOS.FX/ProDOS.S.SEL2.txt index bfc1bba1..e4372231 100644 --- a/ProDOS.FX/ProDOS.S.SEL2.txt +++ b/ProDOS.FX/ProDOS.S.SEL2.txt @@ -435,7 +435,7 @@ button1 .DA #$0D button2 .DA #$0B .AS "Cancel: Esc" *-------------------------------------- -SEL2.LEN .EQ SEL2.START +SEL2.LEN .EQ *-SEL2.START MAN SAVE USR/SRC/PRODOS.FX/PRODOS.S.SEL2 LOAD USR/SRC/PRODOS.FX/PRODOS.S diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index 2c678055..05b0d7ec 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -198,85 +198,6 @@ dealcint ldy #$01 zero out interrupt vector clc rts *-------------------------------------- -XDOS.IRQV -* lda accsav get acc from where old ROM put it. -* sta p8areg -* stx p8xreg entry point on ram card interrupt -* sty p8yreg -* tsx -* stx p8sreg - -* lda irqflag irq flag = 0 if old roms -* bne .1 and 1 if new roms. - -* pla restore return address and p-reg. -* sta p8preg -* pla -* sta intadr interrupt return address -* pla -* sta intadr+1 -*.1 -* txs -* lda mslot set up to re-enable $Cn00 rom -* sta irqdev+2 - - ldx #$FA save 6 bytes of page 0 - -.2 lda $00,x - sta svzerop-$FA,x - inx - bne .2 - -* poll interrupt routines for a claimer - - ldx #0 -.3 stx irqXindex - - lda inttbl+1,x test for a valid routine. - beq .4 branch if no routine. - - jsr gointX execute - - bcc irqdone - -.4 ldx irqXindex - inx - inx - cpx #10 - bne .3 - - inc irqcount allow 255 unclaimed interrupts - bne irqdone before system death. - - lda #$01 bad irq so - jsr sysdeath kill the system. - -irqdone ldx #$FA - -H31AE lda svzerop-$FA,x restore the zero page - sta $00,x - inx - bne H31AE - -* lda irqflag check for old roms. -* bne H31DD branch if new roms. - -* ldy p8yreg restore registers. -* ldx p8xreg -* lda CLRC8ROM re-enable i/o card. -*irqdev lda $C100 Cn is self modifying. -* lda irqdev+2 restore device id. -* sta mslot slot being accessed. - -*H31DD jmp GP.IrqExit do necessary bank switches and return. - rti -*irqflag .HS 00 0 = old roms. 1 = new roms. -irqcount .HS 00 # of unclaimed interrupts. -irqXindex .HS 00 -svzerop .HS 000000000000 - -gointX jmp (inttbl,x) interrupt routine x - XDOS.syserr sta p8error P8 error code plx plx pop 1 level of return @@ -433,7 +354,8 @@ setprefx jsr setpath call is made to detect if a null path. bcc H3333 path ok. ldy pathbuf is it a null pathname? bne pfxerr error if not - jsr stypfx indicate null prefix + sty newpfxptr fix appletalk PFI bug + sty preflag prefix flag clc no error rts H3333 jsr findfile go find specified prefix directory. @@ -455,7 +377,8 @@ H334D tay bcc errsyn then error tax - jsr stapfx + sta newpfxptr + sta preflag lda d_dev save device # sta p_dev lda d_frst and address of 1st block diff --git a/ProDOS.FX/ProDOS.S.XDOS.B.txt b/ProDOS.FX/ProDOS.S.XDOS.B.txt index 5ee5d2a4..b4241e0b 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.B.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.B.txt @@ -612,7 +612,7 @@ L39D4 lda vnptr make path ptr same as volume ptr jsr mvdevnums copy all device #'s to be examined. lda devnum log current device 1st before searching bne L39F1 others. -L39E2 ldx numdevs scan look list for devices we need +L39E2 ldx GP.numdevs scan look list for devices we need L39E5 lda loklst,x to search for the requested volume. bne L39F4 branch if we've a device to look at. dex @@ -621,7 +621,7 @@ L39ED lda #MLI.E.VNOTFND no mounted volume sec error L39F0 rts -L39F1 ldx numdevs now remove the device from the list +L39F1 ldx GP.numdevs now remove the device from the list L39F4 cmp loklst,x of prospective devices. beq L39FE branch if match. dex look until found. @@ -645,13 +645,13 @@ L3A16 lda #$02 go read root dir into gbuf jsr cmppnam is this the volume ? bcs L39E2 if not L3A29 rts -mvdevnums ldx numdevs copy all dev #'s to be checked. +mvdevnums ldx GP.numdevs copy all dev #'s to be checked. L3A2D lda devlist,x active device list. and #$F0 strip device type info. sta loklst,x copy them to a temp workspace dex bpl L3A2D - ldx numdevs + ldx GP.numdevs rts fnddvcb lda #$00 look for vcb with this device# ldy #$FF diff --git a/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index 200d6896..499477e4 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -576,10 +576,7 @@ L4F65 and #$44 mask all but write allowed and write lda #$2B else return write protected error. L4F6D sec L4F6E rts -spvectlo .HS 0000000000000000 storage for low byte of smartport entry. - .HS 00000000000000 -spvecthi .HS 0000000000000000 storage for high byte of smartport entry. - .HS 00000000000000 + statparms .HS 03 # of parms (always 3 except format) sp_unitnum .HS 00 unit number sp_bufptr .HS 0000 data buffer @@ -643,7 +640,7 @@ deathmsg .HS 20 .AS -"RESTART SYSTEM-$01" .HS 20 -*** work space *** +XDOS.DATA .DUMMY * note: this area is accessed by code that depends on the order of these * variables in the file control block and temporary directory. @@ -753,13 +750,27 @@ bufaddrl .HS 00 bufaddrh .HS 00 delflag .HS 00 used by 'detree' to know if called from delete (destroy). +* variables used by mli for smartport interface + +spstatlist .HS 00000000 +spunit .HS 0000000000000000 + .HS 0000000000000000 + +spvectlo .HS 0000000000000000 storage for low byte of smartport entry. + .HS 00000000000000 +spvecthi .HS 0000000000000000 storage for high byte of smartport entry. + .HS 00000000000000 + +cortflag .HS 00 cortland flag. 1 = Cortland system (must stay within page boundary) + +XDOS.DATA.LEN .EQ *-XDOS.DATA + + .ED + * zero fill to page boundary - 3 ($FEFD). so that cortland flag stays within page boundary. .LIST ON -XDOS.FREE .EQ $FEFD-* (ProDOS 2.0.3 = $0C) +XDOS.FREE .EQ $FF00-*-XDOS.DATA.LEN (ProDOS 2.0.3 = $0C) .LIST OFF - .BS XDOS.FREE - .DA calldisp -cortflag .HS 00 cortland flag. 1 = Cortland system (must stay within page boundary) *-------------------------------------- XDOS.LEN .EQ *-XDOS.START MAN diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 6178f74f..7e26bd78 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -954,16 +954,9 @@ docheck lda A4L command #. rts end of obj xrw_0 .LIST ON -XRW.FREE .EQ $D6EC-* (ProDOS 2.0.3 = $02) +XRW.FREE .EQ $D700-* (ProDOS 2.0.3 = $02) .LIST OFF - .BS XRW.FREE pad bytes to $D6EC (pathbuf-$14) -* variables used by mli for smartport interface - -spstatlist .HS 00000000 ref pathbuf-$14 smartport status list buffer -spunit .HS 0000000000000000 ref pathbuf-$10 smartport unit numbers - .HS 0000000000000000 - -* pathname buffer starts at this page boundary (pathbuf = $D700) + .BS XRW.FREE *-------------------------------------- XRW.LEN .EQ *-XRW.START MAN diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index fbd2b3d2..79717d7d 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -173,9 +173,9 @@ ZPBLOfsHBits .BS 1 ZPBLLenBits .BS 1 .ED *-------------------------------------- - .INB USR/SRC/PRODOS.FX/PRODOS.S.LDR.A - .INB USR/SRC/PRODOS.FX/PRODOS.S.LDR.B + .INB USR/SRC/PRODOS.FX/PRODOS.S.LDR .INB USR/SRC/SHARED/X.UNPAK.S +*-------------------------------------- PAKME.Table PAKME.ILDR .DA ILDR PAKME.GP .DA GP @@ -184,6 +184,7 @@ PAKME.XDOS .DA XDOS PAKME.IRQ .DA IRQ PAKME.RAM .DA RAM PAKME.RAMX .DA RAMX +PAKME.NCLK .DA NCLK PAKME.TCLK .DA TCLK PAKME.CCLK .DA CCLK PAKME.SEL1 .DA SEL1 @@ -236,6 +237,12 @@ RAMX .DA #0 .INB USR/SRC/PRODOS.FX/PRODOS.S.RAMX .EP +NCLK .DA #0 + .DA NCLK.LEN + .PH $D742 + .INB USR/SRC/PRODOS.FX/PRODOS.S.NCLK + .EP + TCLK .DA #0 .DA TCLK.LEN .PH $D742 @@ -262,7 +269,7 @@ SEL2 .DA #0 *-------------------------------------- .AS "PAKME" TAG .DA $2000 BIN ORG - .DA #11 Chunk Count + .DA #12 Chunk Count .DA PAKME.Table Chunks *-------------------------------------- MAN diff --git a/SBIN/KCONFIG.S.txt b/SBIN/KCONFIG.S.txt index 00d16ecf..bd6d79ad 100644 --- a/SBIN/KCONFIG.S.txt +++ b/SBIN/KCONFIG.S.txt @@ -355,10 +355,10 @@ SLOTS .DA #0 SLOTS.MAX .EQ *-SLOTS *-------------------------------------- FILENAME .AZ "${ROOT}A2osX.KCONFIG" -MSG.TOPBAR .AZ "\e[37;100m\ec\e[7m\e[1;1HA2osX Kernel Config Utility : " +MSG.TOPBAR .AZ "\e[40;37m\e[7m\e[1;1HA2osX Kernel Config Utility : " MSG.TOPBAR.OK .AZ "KCONFIG File Successfully Loaded. \e[0m" MSG.TOPBAR.KO .AZ "Invalid/missing KCONFIG File. \e[0m" -MSG.STATUSBAR .AZ "\e[37;100m\e[7m\e[24;1HSlot 1-7:En/Dis Ctrl:(Q)uit,(S)ave,(T)iming,(C)HRoot,(P)reemptive,TT(Y)s \e[0m" +MSG.STATUSBAR .AZ "\e[40;37m\e[7m\e[24;1HSlot 1-7:En/Dis Ctrl:(Q)uit,(S)ave,(T)iming,(C)HRoot,(P)reemptive,TT(Y)s \e[0m" MSG.KCONF .AZ "\e[93;44m\e[2;1H------ Actual Kernel Configuration ------\e[K\r\n" MSG.FCONF .AZ "\e[93;44m\e[13;1H------ KCONFIG File Configuration -------\e[K\r\n" MSG.HZ .AZ " Machine Timing : %d0 Hz\e[K\r\n" diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index af57c2bd..d43852e1 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -443,6 +443,7 @@ CPU.Init.6502 >PUSHBI 0 bpl .3 lda IO.IIC.CLRVBLIRQ yes, clear IRQ + lda #0 wait for UP again .3 ldy #4 (2)