5CRUNCH20COM,CRUNCH20DOC&LZDEF20 DZCNOTE DOCB 1TYPELZ20COMN$TYPELZ20DZC~3TYPELZ20ZZ0fZUNCR20 COMr UNCREL DZC]4UNCREL REL ?USAGE20 DZCu YUSQREL REL| gCopyright (c) Steven Greenberg 8/31/86 201-670-8724. May be reproduced for non-profit use only.>s s 1:֜0Ý :] (#:~o&~ *,~/ $,~Q(V(C(Ý 2 222 :  >/02 t :l2\! " (888!" \* # " >2 \O < rÝ Ý !\ͥ !!] ~#* > (>Z  * t s!  ! >Zw#w#ws>v>!\L!$~# > > <bv ~8t 2 : 1 t !o!c8Ͱ0͜! >!0k͜!͜: (: : ͓[ * R80t  (O ͅ à $t ͅ O à 2 !͜!" " 2 > 2 2 >2 >2 !: G4ѯ2 2 L~.(ߺ 9|g{ 1|gx ): (: : : (|gV|g^axa: ( n : " [ |%0þ: C: w|gs|gp[ |gr|gsS : '2 : < (2 7x>2 * |(* #" S x2 r|gs|gp))): OD G): A)0>2 : 2 G!$F#x(>[(#~#](>]> 2 !Ͱ< !ͰͰͰͰ2 !%%>w6P]))))o{%g#u"  #~(x >.Oi: W8((2 z!!z!z8((!o>!Z8((л(!8(!o>!8(7GEL Cruncher v2.0 $Invalid extension; Rename file.$File Empty.$---> Crunched file not smaller than original. Save anyway? : $Input file not found $Output error$Too many files$Not enough memory$Prog req's Z-80$ ----> $ --->$% $ $ ($Usage: CRUNCH [d:] [d:] [/Q | /V | /C]$ Warning: Probably squeezed or crunched already. $}'S~#: =2 d: .: –Ͷ ,Ͷ ,}2 (!7O ,O \O >: O \O ѷ{' & 8>% Hw !ͥ :(  t  ($: #O O <( t  (ͅ 7O O < Ý x: è̀O X,O O Ý O O {/<(G>B%DHr Y O : ͅ * +" |* O "  > Ƀ! C#8RG:Cȸ Ý O   Ý Yyx/Gy/O>j 8B= !" ͅ  O  > ͐ > ͐ _O t { ~#( @͐ >:͐   >.͐  > ͐ ~# ( ͐ " !" O  O ( * * ƀO w# " * #" * #" ! I O ѷ(   Ý : =o:̂ * #" ! I : ͂  w [ * "  > ͐ ͣ w : [* ͣ > ͐ ͐ * ͣ : (A* [ R" * [ R : 8}2 < >2 * " * " !DM)jJ)j)j)jJ)j)j)jK + <#~ ͐ * ̓ >)͐ ͅ <<<͜ >k͐ >2  >2 F }F }F }F }: G(0͐ 0͐ !o  &Do it? (Y/N):$^C detected.$Destination file exists. Overwrite it? (Y/N):$ in out rat ca cr ==== ==== ==== ==== ==== $   0 / 0$ CRUNCH v2.0 CRUNCH v2.0 is a state of the art file compression utility. It embodies all of the concepts employed in the UNIX COMPRESS / ARC512 algorithm, but is additionally enhanced by a "metastatic code reassignment" facility. This is one of several concepts I am developing as part of an effort to advance data compression techniques beyond current performance limits. I believe this is the first time this principle has been proposed or implemented. The code reassignment is augmented with a refined incremental compression ratio analysis for adaptive reset. This provides additional improvement, especially on files with certain struc- tural variations. (It is ironic to note that if the file ARC512.EXE is CRUNCHed, the resulting file is nearly 14% smaller than the file produced when that program is used to compress itself). Although short files will generally produce the same results as the above mentioned utilities, CRUNCH saves a few extra bytes by eliminating zero fill between code length changes. Please note that the above discussion relates to file compres- sion, not to the relative merits of ARC's vs. LBR's as structures for collections of files. Also note that the quoted ratio is not claimed to be typical. Other improvements include: 1. Use of multi-sector I/O when running in a CP/M 3.0+ environ- ment (automatically selected when appropriate). May be permanently deactivated if desired. 2. Relaxed restrictions on filenames (eg. files with a "Z" as the middle extension character, such as .AZM files, are not a problem). 3. Improved wildcard operation- non critical errors will abort only the current file, not the entire operation. 4. "Verbose" and "Quiet" modes of operation. The former gives full running progress reports while compressing, including number of input and output records, compression ratio, "codes assigned" and "codes reassigned". Although some of this information has limited usefulness, it is amusing to watch. "Quiet" may be pre- ferred when using slow (or printing) terminals, and will allow the results of up to 24 wildcard operations to remain on the console. 5. Optional prompt before erasure of pre-existing files. A warning will be issued if an existing file is about to be over- written. This feature can be deactivated if desired. 6. Full compatibility with all crunched files. UNCR 2.0 will uncrunch all "crunched" files, regardless of which version of CRUNCH was used to create them. CRUNCH v2.0 will always use the improved algorithm to create new files. 7. "Confirm" mode of operation. Used in conjunction with a wild- card filespec, this option allows selectively crunching or un- crunching a subset of all files matching the spec. The user will be prompted (Y/N) for each file matching file; a response of "N" will simply move on to the next file. 8. Continuous checking for ^C abort. 9. Inclusion of a "NOP" code. In addition to the normal special EOF and RESET codes, the new structure sets aside two additional codes as reserved (one "NOP", one "SPARE"). The "NOP" code can be inserted into the data stream at any point and will always be ignored by the uncruncher. One possible use of this would be a "Telenet Trap"- where the CRUNCH program would monitor its output and insert a NOP code if it saw that the output would otherwise produce an undesired sequence (ref: R. Freed's PCP-WARN.MQG / PCP-FIX.MQG), thus producing files guaranteed to be transmittable while using PC-PURSUIT. Although the current CRUNCH program does not yet monitor for this, the structure is already set up so this (or any other sequence) could be inhibited at any time, yet all files would remain upward/downward compatible. Other data comp- ression schemes do not have this flexibility. NOTES: If crunching a file ever causes the result to be larger or equal to the original, the program will prompt for whether you really want to keep the result or not. CRUNCH does not attempt to de- termine whether conventional squeezing would produce a smaller file (this is quite unlikely in other than object [.COM /.REL] or certain numeric data files). If you want to know, squeeze it and find out.   ------------------------------- Last minute notes; 2 Sept. 1986 ------------------------------- Analysis of the performance of CRUNCH is left to the user. When CRUNCH v1.0 was first released, however, ROYALOAK.DIR, the full directory of that RCP/M system, was used as an example. Since that directory happened to become available as an .ARC file last week, I did a few quick tests. Here are the results: File Crunch rev Recs ============ ========== ==== ROYALOAK.DZR ... v1.2 ...... 538 _________ (Arc 4.x equiv) \ \ > -5.0% \ / \ ROYALOAK.ARC ... ["8"] ..... 511 > -9.9% \ / > -5.1% / / / ROYALOAK.DZR ... v2.0 ...... 485 ________/ ---------------------------------------------------- 8080 RELEASE: There have been a number of inquiries concerning an 8080 / 8085 compatible version of CRUNCH / UNCRunch. I am working on this and it should be available in a few weeks. DOCS: The .DOC files contained in this library are straight ASCII, pre- formatted. They should just be "PIP"'ed to be printed. Ô[MAXDRV+1>[MAXUSR+1>[MAXLINES>P[CRTLINES>[COLUMNS>P[NEXTLN>Ll [EJECTPG><[WHLTEST>[NOTYPE>COMOBJLBROV?ARCBADSYS??#LOGINTREL?RLEXEs1!."|g"i:0u:X >2L  :>(>2L !~(B#~ +++~ 4#~/ .#~N(L $:L (>2:N2>w+w+w2.:2:L (>2#͚ 2!Ny ,:L  }n }   ! 6 Aͯ("ͷ ͯ(N *+">:##(:#(# "++>1q# +"+~0q q"+~@yy! y2*#~.( (/#~ (".  #~ (#Áaʌ?{„#aÐ#a]„]2 ~#_˜A Æ> #> #6# 6 #6#a{ !q_ :.2:O S:L !(W< }:L :! }:)}>(! ͱ:)QZ1*6M6 6(M.(*6(0[ H >[6(] >]  }2 }T*:Z <2Z *#"*F ҆(î*6M666 6(  }T*:Z <2Z :<2*͸ ҆T*6M6چ }:L !W W!LB"(>R2*< }*?M-1( }. , ,F. ( ((((?8- } ^#V#N#FCS@2B!2\ <2M 2Z >(!O ͱ:X QZQ1O 対  #   ?Æ}'J~#:M (*+"} 7:Z =2Z j:W.͔ ,͔ ,}2Z *7ѷ:\ †<2\  ~ (x >.#  > > ʆ:· (n͑ œ:#(=2#  Â:.+!5+ (ʂʂ!A(#( #(:.=>2 +> ͑:[ (:[ <2[ _:8G![ 6~ ':( =2(:#(=2#  Â+ :N2+![ 6+> :[  +_:[ <2[ ʂʂH(:( :2 U ͚{͚:_ {:8=G>-TYPELZ v2.0 $Input file not found.$Not enough memory.$Program requires Z-80.$ ---> $[more]$ $Invalid Crunched File.$File needs newer program revision.$) [^X = abort = next line = next page] $) - [Sending file to printer] $Invalid Squeezed File.$Invalid Library File.$File empty.$Member not found in Library.$Usage: TYPELZ [d [u]:] [ ] [/o] [/o] is optional /N for no page breaks.$ or optional /L for printer output.$Invalid user code.$Invalid drive specification.$Invalid filename.$File is restricted - sorry.$Line count limit exceeded. Please download the file.$Can't type a .$ file.$ $ Copyright (c) Steven Greenberg 6/28/86 201-670-8724; may be copied for non-profit use only."s1 ! [*ͼ v ͼ ( >7{ɧ ͼ (8p 8>>ͼ Oͼ G * 6 6  x Bͼ Oͼ _ !!!!G:G6,q,p,(y/,w,, ͼ G7*͍ ͔ 33 88 (O ɷ( =Gy > 6Copyright (c) Steven Greenberg 8/31/86 201-670-8724. May be reproduced for non-profit use only..">0g">(gR"|gs!u[R"v (> >>>7{ɯ  e͸S͆ڡ !>8 *:?:(͆ڡ *9ҍ :gk~ >2*:?~ʑ V|g^z |g~;|g~29g:gOD~(|0g~( G|gn`M`r|gs|gqK Cx>2!8W2::::_ _:Wz?!"!?< *T]>w6@>*w}eo0 $: :g:G}/< OT]>(*:GzGK>• +|0gr|gsBO ,L}Z8 90)))))l ڙ S͌ڹ!>8 *:J:( <2S͌ڹ*:|{('• !"2> 2>2>2pá :g*9ҍ :gk~ >2*> 2:J2~ʑ V|g^z ˪|g~;|g~2F*:g:w|gs|gw*#"#:'2:< (2>2:G:O!̷y2z={((7OK88( OCCɷ(=G2y2y>C> 2!J< !J2*T]66 *T](6*6GL~(j[r|gs:gyg"[:W|0G>2xL~( : V|gn:gn "j*|[:Gr|gs|gp]))))o{g:g#["6!  UgCopyright (c) Steven Greenberg 8/31/86 201-670-8724. May be reproduced for non-profit use only.>so s 1:֓0Í :] (#:~o&~ *,~/ $,~Q(V(C(Í 2 222 :  >/02 d :l2 \ͨ! " (;8;!" 1\* # " >2 \? < Í Í  !\͕ ! ٯ27v 7(Qd ͳÐ d  ?   7(..( 78([ 78 77 ھ(p72 7Ͳp: ! d S >D͗! >8 * : : ( <2 S >D͗* : R{(*!" " 2 > 2 >2 >2 7_7W* : R(7d ̓Ð |(g!9z(gk~ >2 * > 2 : 2 ~(#V|g^z ˪͠|g~u|g~2 g|"* |(g: w|gs|gw* #" #: '2 : < (2 >2 : G: 'g2 z={((787(|88 (O͡ɷ(=Gy͡>͡ͷ!f>?6Zg !(~̀ ]#1|> 2 !< !2 !((66 !XX(6>2XGͦL~(C[ r|gsyXg" [ |X0G>2 xͦL~(: V|gnz(gn " C* |([ : G* #" r|gs|gp]))))o{Xg#u" >2 72 7Ͳpu !! 4!( sGEL Uncruncher v2.0 $Usage: UNCR [d:] [d:] [/Q | /V | /C]$ Checksum error detected $Not a Crunched File $Invalid Crunched File $File requires newer program revision $Stack Overflow $Input file not found $Output error$Too many files$Not enough memory$Prog req's Z-80$ ----> $ --->$% $ $ ($Unexpected EOF$}'C~#: =2 T* .: †ͦ ,ͦ ,}2 (!7? ,? \? >: ? \? ѷ{'  8>( 8  g ! ͕ :(  d  ($: #?  ? <( d  (u 7 ? ? < Í x : Upp? X,?  ? Í ?  ? {/<(G>ͷ B%D8b I  ? : u * +" |* O "  > ɘ!C#8RG:Cȸ Í ?   Í Yyx/Gy/O>j 8B= !" u  ?  > ̀ > ̀ _? d { ~#( @̀ >:̀   ; >.̀ ; > ̀ ~# ( ̀ " !" ? ? ( * * ƀO w# " * #" * #" ! 9 ? ѷ(   Í : =o:r * #" ! 9 : r  g [ * " > ̀ ͓ g : [* ͓ > ̀ ̀ * ͓ : (A* [ R" * [ R : 8}2 < >2 * " * " !DM)jJ)j)j)jJ)j)j)jK  <#~ ̀ * s >)̀ u <<<͌ >k̀ >2  >2 6 }6 }6 }6 }: G(0̀ 0̀ !_  &Do it? (Y/N):$^C detected.$Destination file exists. Overwrite it? (Y/N):$ in out rat ca cr ==== ==== ==== ==== ==== $   0 / 0$.">PgR"|gs2|>2!"}Cv C(>> >>>7{ɯC CCG>8CC͖S}=\ ͱ !>8 *}: :|(=\ ͱ *9H :gk~ >2*}: ~L V|g^z ͱ |g~l|g~2g:gOD~(|0g~( G|gn` `r|gs|gq x2|?0CWC2::::_ C_:Wz?88 (O`ɷ(=Gy`>`!ͪ! < *T]>w6@>*w}eo0 $: :g:G}/< OT]>(*:GzGK>(P +|0gr|gsBO ,L}Z8 90)))))l7D ͡SԑS DTEXU9 I2PB5*!h:1Ht2e2FS@8"@  "Ѱ`- CApa< FQp9̇S 3Bq-8cI@u9Dq.pE!E„!jwiHE'0 9ȄvRamfG@fGP 0!n=J0fEͿfFmx *ͺ@!S @ڷ` Vm0Xp `fՐ- mm[6C7(ZVuFsYr3j @2XX̳Ѐ͡'0@~f݀7 $,x\ڦgap!',|c 帠G>1sqYL r>1s3]8 vb?XX8 o!]Xx:AX>S6Xx+lg!XpzUQ ͫ /a`t&>@@`6@j|a`%rXSx$ap0Ax u/ ByP>@;V" #jŅkn 03`hY!Oیc,:L>KCx7Xe)=]b.) B0=66_iO3m0j5Y Cc$U@X8Y#6x2@ t* ͲØ  ׀@W6#,> @EFX b;vuw4\>9iZpAg3}r@2`ͬjpU+9yzjm >1s6Y'0@~`fF:` #3ό`w`@X xeX uh2 e!u OeYD eSvh?B(k2Yn']o䀠OvH6@ d^2@ ͇e@,H 6@JP -msl-H f0Kl[-+4n[,˅dXW+enYu`\- œȩȊj1}iꪑհ 8vLZDEF20.DOC A@ -ptDr:f)@F4 ya: #)\ !c1u3# CBx(DF$RauD!NS`a7FF" ( &z*=0@ݠTuŕDvmi@p\C,i1Yx%Y hl^YAD "!"E2!<X@Q`T*VvA$79-CB1WݸO6;gpp_Â%bo D6V #\Ji|d5gЫ 8p+"J26*Giyb,1zZ4 `U("yFum$QfETd;p֢Ě#'dv1V5(r*G#f8KmB EfV`BA[@ qwM';\B^LI-&BPDa(XNTӓV5& 4 W#vTYPELZ20.DOC 2@o j]4AT^Nf3e䍆\@T 0f3f2-@4N ~5ao6u9YA5L:o;d'Y2fm!_sx\RO 5#g7#Φ*U`< AFWYv!yYhW0wbtJelj[iIrb6iɆQX\SQLAZO_ G@ luCu!l -NEmuF*Mogp`*4_IuLJL$pڶdR&hG1'NdsFQ3Ay 0/RZU:'Y13iYхSč^]ٮ5W$6n@vd6*?Iz'gZЀ(^Fau@O;m/;%rF^?zn{bFGT` a\$F B,R:ư xN䈺Sw^ѻ3yEj߃k/ɔ`y/8)? 1Sg<GyE3"+ˈC|TY&$_;'`׉%BY&m4@ JW(G&B&ZZ7%JpIe RB0HɛO  " d“ЕbR0T Lv0t[M@(;$%tS˙v&db%NVJbiHO]!80xkh,X_M4hR]be0nW"N$:BTN *8ǍV@\!%HĐ ΍hj&{LG5f#6KZ$5ywGj뾉 y:@IhvIڸJ,J= !Fw+Ca@-⥎Skw-UtX <"w[x'ap+w̥U5k,|O.@fBfd_r5fWgKgfh1zi$cPpi#sw r'$Ww6s/,fB2,D"4H#kLq$oA6DZ;n|6B;H$VgIT-'B_g0r$!Bыr60#ׁck?[k#=1twVg3į9e@Un-vO]Ovɉ9<$PxҁmʋȌ(T؞$Q^CB1[qf-G^PGPI~` e 31+,2BE+s2,2$--yq.mKJ5B`؄=#WkzR(/1@pH;?&Piz:cbH&QFmS,0Lp:!deuABD!64#VچJ@!vql fv6 C"ҕPy(fu43RM*O# "0a !.#FFL$iIgij)tm.R{1\R0/HV7C.C'}.V!f@g3,PUVWA/bVP#8ގ$@R`+Ga1D#BA;Q6a>*0+,=!d =97%=H$2pR p18p qQ9=P @1!r0N@]M=qU&:=a_s?C CEz#apU@S +0oY8=N 4hM9pAD b֐EMd9C~~6ÕpLli)PJWGMơ1",c P”DNLZ,kYQLW25 W ' `F#J6.1df-Sժ0(G A9VFꢩZK6QaTk?u%s%nZ&Q5#@M2s.]z7c!7rVp?AJ^z*cl2tTa(.J"9dr@sFwUasIʰeB&JG C;xFZ0h$/rBz8wX*6y)0)BLtK2y4!vKR#-Os'QhҋoCh+P1,B~6Ӊ95"5b:Xtê$< jvTYPELZ20.Z80 h* HEPR@ %)0; , q(b Lr8H(|#A@#Il&(e1ͧs4@ynO4e< #u 9ΧCI/Χt`NX|r:f)N 7"S2By5k3bDs)@h4Θ ZS#p8u7w^3hfQ`X! 2IX 7Ҕce4m,f1zv=b}5}`7%lrFq{хuf[QjYY_V^w!Fvxw/D\MuUxGV#vE)J2 >Z 4 1%!8 wL Q8CNYlPD!0IE!dT TTC-$QmrF n~Y`tePsFTDzbed\rz@(b pTKyUYW\R^j +I'p|'0iyFFhBamTsfȘn PC-YQ2RpkBy(g Wva\i0#c; SPF /BgƹS\XTFQaS05, DLƋ[FtF%W i RButZec)e0WC5ַDw]F09a x|h zipQ@A:nMD!TFŮ $;{vqUsTHA G'\<CE@3EABoADaE> H򻟠_PDu/t)!&Iy!^Ld =g]^8]E.s.h`+/4@B JPބ@u 28eH@B5!``DA= ACɈ0 bZ%z@L 8$At9` k *;eš-fY2rk/=#A T78;1B I A6;m i+ȉTH/ L/vjҕ&RBR M/;s [*; #(N&9BЎLšEByHZ)^)>L 6zAG0Xh+Z&O0Ge<髈C2BI9 h mREv80g? @)܈m e:#p:!((fT#>NXnX| ERT 8PBB2p03VK<*(5VLAʅSA x)UjV59Mk+'W\:-T*uNEP)J9垐"SqL2Ȱxh Jgi ՙʘBКmݴ. #XWi*wA<٧iʵU~H\Gvz񅰜B`N0 zLN0#<`w%W= +A1]DSx&ygh&(L *ZiHn |a#E3j/Ȓe% D6(*zC jzZ`yl̖&F!*H1 _T[4@b&{ q ,Ex"NbS@][`'XE-CyJn>)A/g*r .N$疋Bed-JrY;R2CAcgA/uwKO+W!*77Ta[2rH&'GVW5;"W-#(hp.$vsǪA5Ka|% A8 YHX-$lH(cM/'4!d0uzy%>4s"gzI\,c#7BfdbYIׄ`c'C"0O!xd1{'%UYFRC~y80nKx(c%,s1Ksod0 yYTgTEY AGOXixqn/‰宛CzM5Z琝RȌNIyG,Ct9sH4[DhE 15~,-!TeޛRl;G0W5Fv-"}(i4sM %ZZC1gu\rNZW-+1 ZlT\^Q$!_Z9+ (yhAPEisu%`{0NR[DT`' ȊNzC'N1Qc/JRGO@NW3B/1AbH/9FOS0A^\a1nE'<`ǺȦy6xZYYdl z:A3`(wEiʀJ $j(*aWSu;PO;8 Fҭ@NZ"b#'Z# n~CXWjs j+WAL\рAc3b봁>\4B[c1gJ^ːETR3ZɲyHAQ+cVcoPpbқ#g*V3ˇ J䳹HOJ隟 Mju*,ZN [a*0npm50AuFEsB [~sL)d{Vh-1r&k%[ȏqHCGp4MB*2%)ic4o!p%%.6} /җ+ἙJ0A:9űWG˷:J),1)d$`E~g-L0b2r"kY{%PL,#>ŌP;L+PgnL"N)B{资spF"fG*A轏T9'lHG936ʼnK-A, 'w>h!x1H;fKN[{1Jpu1ppl!} z "'s~AL3IݜhȐ6sTiuɷ/XNHeDd Ǣx!7¬" #NT?ǻw[aUČZ5[NÓxq0Id?3d4h'~3Ϫ^y MŜmg)apF_A1/:XIg؏]q=s]TиUcd ׋cM )SB,ZQk.+2HCEE܆@F֧ݡ!ܲG0IQʤB;i0ZC#ޔgE^}B317lkU}\zfMpoXmjVѓd^)%VY ezpBre81+@+5^ktZM0*]6\@2b,L.p:no/9RtTҘ㔘hX}feF .""Ɋ8$lYGlWQP]P]S c$;pdziepb & Oa^3')!Lu@u.=mJ)GNڈ(Jo4u>JzZF-PlO~I|UevWzR$xJUC7g\.1S!PN >M⽖Evרq/lP(]銌K D׳c5.cs~VGVzg#13ceG-0 1.1%N`G0M ˿". ڲU&{}Xl'OA'0q`ay*x=G8=h%pTXTMOkp E V-Yx8AD^vxIAv%VS#h.`v*0 [$~*N<>_>4\{/yրCyoJ'pm/TyTeThFlWnQKHWOoQ"+cvpNFg˜_S{<黚T0jCa|)1oŕ_QA4{+%-t4#PK%MtdoG_8]~7z7~!NJ?4:CX>u'.J  i#=h[Om/N!44rNs'doIK#3'"(WEE|F{#CmP/13[svH` s( $0pPnT1fœ:hiyoWJF!:wtX _Ë2v¢)08kL S4~p;PC?eE0!B>"w~+T:i1Mzk}6`dro$u+llLHaTR)s#puH{`fk~nՠ麈wSIFXig!rB;6̐#"G)cr"zB+*ԅl]=;OK1hgԵ{WTbvlj??δ#(u6<@J;`G2o >p8be?[B&fcOb.R"/D}D͚7~柫wϰ m;IqU$Jfzdlɢ nJJ)gR[mwqh-BR_9HCkE+eReXB` !~DCף'C"9L3v[p,h>sߠZ!,`2 e).nMCzQ7&`MPsB_T0=| K>ktn ]<EgRD\ #.'lY2;q7S y1~b[Ki&6EC?DTl7B~v4ާ2,6шrOP7CKa&;Ҍ!NsL|>'e4 N\Wv!vycxZa9zb0KWq%Q(v 6BP{-FcuH'o,zgibKf0v1F'7%cyW*YpmQ꼚I@'ltsm&oshxfYz0޷~O7o'| 2qH|n` k /(xKRhؠN:WiTpvx|a3beF3 )HI"m7e*wxF[OU`,xc >EµX`J[8F A6H6kڼgmqgE;qnTk[zbE!|N='z;L̞c;443_ {$Ac!me֌'0LV+XzYkz'pBLOI'N{mrwNӽc%+eL4 'v[zc/hMv8S lLٳքqL}/-jV-Cjīݤ0tz/ARMmj/@B[*|o:Di'5%LVM e}ᄠb.:=zTMfmc5!2/ISC㉗;|t:|lcy*=0@MDNe+aHLh!,8$Ŝ8xc)ҥn=Lz dC~Vv^X*Qp!}r۱]BM*:ڠ,.7¦!qF:ZQ˭LuZ}E%H=)XὢBz<yf7z'Z UkONԵhr[-/p''(w$:y4U]XnƜu5ҫ i!BN˾h(Ȗ3Dt&? "s羛4X:RS|#h#RTGM$-.T?tJ@L%#op5ŗ7\vz[1Y_*bqpiKpk{[h֌.>YbB2pv[ D[Տ;E'*&qO'hVqHns+g)DYpfD4{cDsea#< N\vF!ɀI+Q^窽F!+` \}"x ԭ/k)2 FmWA& C1s+9!y8 "2 4-1S@.Yu z=xso ,{7nbJ4~NژHa!pyo" FKp,vl;&YEքFYRH$$O)2-H-PQn©S1RbH;Yr8rP`e @'=e TjG !6U!!rA0z#o+*)= (PN((oՈmeqz/A5am c!/w=JXRjcRRw"4BO"XB9BJ=62ycRFi/'uLkE+},4v [YT(̸..4 !S|E&LrhI%pCbMq!'2" l4|dNM(a/Xی]ex8h- 4DT%0O^@L':@x(hA'5So1覐E&Mh4RdG0UQo1~"TSLHBPb]|VXDcEMZi^uA2@!nAiF3hqh\(y }QTjvXmw&E݌)Mr-iv:h#v1ՒA=0&Je"}z$TPc"_@M&'EZ VacNHb"O°!52:X ih ~DIg.#"B#b\TqT C,jg#+aXр^cjN}B(4R6׶XQpU~Y1Kyj#A/T+J]W걵Wkt qHS^(>x2!ohdE$mh+Pgw%N`X-£D3UWgYQ^POVsFTCWsq wKC]zJpCI 8M9^WuAA[0Ĝ:&-5* \WNK_rh\M:$4'uT@"+)%RkKK^c6cqE:nR-Nn 4'uG0}k R~¢\cdUا`MP\sA1KE/QOlBK$^z؂bSSg3D4L(PNak$x j\qL++-|%aЭeǼ+4-4H\|c 3֌( fXB̐ NPL.RersjQP .Ʊ.=Q]5(ҫ<pRN F{-sŸ)g&ΝD |p,FHg,cYx=Fea)aћY߮GKΪ6X8A"u րG]10c؈록e!nA6qrke2,aA \sƒr.glav$)=tqm<Lk!G8wnZ$@LЅ@kFW?%^>~=$Lk!eEI/glkSsPs6%X3 @Lk=~ɟF@Lk(dM)9g*&Y ݭ(D̀유UGyJ/ԭ^}hDخ4%SJC|EAn+ 4Iz'm|JOX^nrƟP@٠k'Ƙ *;'h*Ô>3,awao\'|%h=7QPP#"ݶnz@DBnWm1fq`?`r0r$@&t;aƱձ &pD؛tsѼ1/1mRcD2w' i4AH, ?t xu?@NH{:4.ƾV?fղ2I._${L%'m.ޜDjY=#2$I{w@x .x/Sr")40X<\$3YhOps|P"S1`O:cp(P-57y#Qy_Gp(710[[aA t#oh17Ʊ"SyiX04Z|kT#@E 1g`e@/RPn[UQ%r0'lsr 1gVf"LHP0w!Ǽ+Ud-sŸNJS$AfDTJn E=JPgwLhbtT~+*S wr3PZx%y4SqucrOIJ˞9V qgVm,wF=&L k/qpl64d l]ѧl 'և,vvb?.bqw )a.FƆ c ] ,MD{"јqPDNG拺G0#nHyv1@Pq.nOo:B7)7O@9v1&$+g\ImOwWiBHsMEX/6@MA"-R v%$Fc]sy QP˜[9M>EeRezA |O. tcnB-ASsBر;Nh$Ϧc'=;(6}e<2q3Ab`BIKD8xakYF0N<鉘$xw"B<]EXi0:P7!%-A/g- VA#NYW-/xgP"hW:xgUbZ+U&/ܒƢ1|hHmGhUFHBژ1d"MA&1<E;Nc.0R*=ECpv$ĥG0Cgu%ӖABM\P1sc_}(}XZi{&@OBzH|FeUX2+M[m  D34a+\y˨U6ő2&)[Cz*(~12Ofac!IHahBz5H(ڠ,BL8!߿)~Z$-OB)T*{5I{J$+׺7*ɤtE=h']YP_qm5(/m)& txR;8L'n=u0,Շ|~ZbٔYAg*+bev7Y K"l3K"%J:+b=ɖ#YJ+gt6xD-P ކy_js,ʶi2y$F`S VocpEEo56!1LԵ5HEv~4cvV^uQk DEDxTdL:{5}oE .X.4w) ကzwQdEubrx#<;zGMGǻb09xFMmyE˥;D-Gr8m4g2$&>ys~ÁFII}FlA[ Ѷˢ"%TOǦ\T.0"-КKRAM |,Et)wNӠ}!XclƙsN6KAÚ$wzf]aQ8H"q!uafpTE)e6a)?0_u,R_TkYB"%.e.1'6+=#0 svHc=YYkb?`ږc[%_Dpv[X%I!#Y_^1 : z%Tnz $XP/U.cMbxYٳM c/@`FCS)ٳ FrgkՐ(޻dj /K'?kL TLUi~#ȨFA>j !ò.Pz!nY@sL;desM/1?(mI IdiLe9˒ M5/a`2-@S-bl p/g/"e8.L"H3YT`A>J8 RBK]ک>}kQO,;MCʀRIlyCK8D-TMIx\&ar"c)vAj'Fdޞs$,ti}2a|U-@k[C)'P:u4ڟat[sE2A y> ّvP.J0E7[, |ks Baܟܢ)02Y ejSn" wUDLom1-z ~s,G@{`2sciJz/]엛Tb!z~#ހ FYH.KI|iJ^ FM dҮ%3i<׻{;"LP]zKqH1gvK5StA!DJ4^u8K| ,0HGu3RdY@PLՓV ^h罣HA6"z@BkY9{1ڷ @A?Q3}+A n|mwT P]=PLSAD]EF@x/k (e rUҺF36̙~8p6S]r;^Wl$ׂV&3:WL!dRu@Y{07G0WŻ~|"֋ZTgCK8MCn)ŖTas+ .&al"ԼMIxBb2*JS%eGb+.ו0tSJO[O$PeV ;>pNtÊQNJ(JS%ٓOgjAKJұőW~,[JS%t9`S"s\^7N(mJC'Rs:L=alؐ`vj#YL悢OeI,^a|YAc/EhJS%-O9$/ cA>c 3r>!,BiSY2d+]QXÛPN` x'k{Lzi8Rwp,"œq<]rEOM}pep\_e1v*xduj}NLz()1}O>-'\32.Rd^.^A^hԌS&Ԑ^>Hb/EsvT݋c%f4%ylB}PL\t(`ct9c⎢F9Q1ARI6M@>Y2NL` x^Zt1vA/[E9ÛT|>i XyI|iL][0BgGRg3  iΝP-![)FꚞlC<'XEgNEE=s|gu.ڸwo#,E5&]?/C KmiJ습JcUqh0^+ aJǻI)FCZ G8Edȁe6{aejRݧ[b \` e;%Qˉ47)F\ҋ{E*,nm}zXtT.wl6LT5JReJS%-O9$/ a,n8Ǫޮ0AQsQaѵ7@ KL :?kDFSȞLSLncٹM EQxhuLo4?5"oWl)as+m&|o"ƩP:&-5*YpV #&Jn͚M!%w_L\}èd:%i=0$LqJ|!3c%">L;='[ȢBRq薼WwgLJFðʹȾJ.օL5 F;wFk^ʼT-R#Qc!̬eJTpP5~T} 4q|uI>0Fz8!Hѵ=0 sJ'peDI.*̖wl O(1yٳFPẋM01ڷ斅cM)7#PK4mWiFvA}Y7GJM--2$U@cѲ!A!1Gˉ4 ʹm[h-K n[MҨ;xFp9{LWB֢oo !8 ,նpc {wYr\~U5w$գa_r\.kF~\C"'!d6܇L0E6$0k{wc;KCLkv;z&2q1ɻlMP; 8$0 v svH` s|-z*)CYcƑh,a Ao4=^c9tOPp |{cD)A!55"wFiYNS/oC4$A1/)*y31P0fac7gK12RqF%]@F0c 9c6h>E@}@WwdRq5pR.PhG?6CNI!h]AVI|j!QII,GYJݡ#TAf9+~k)T+GISk8 ;8&.̝⭔[:tsB}Kˣ'.\P%pRGGڐYCkHձi:z;C'7"'8LZH:xhc27b2H3O7*$"p8Lo(623Q+=4PR$vmaJy:\;$m[JS%t9owS"s\ 'x*!9T2u*H:bvUNCREL.DOC  TC)I\0",& C!Ɠ &Lg#yf:!H 1ͧ b6Dhi)@ 6MfSX iOCe6DS κf7& l &9Ng9M@":EA J:' uYMS)@s:kyg9coQDa粬ry4 \aΆ[,Cw4ֳ|dDA+xQ0< nCLf3)Yp E9 Dq5^UqW\y,u0d^]UOdQtwpiսEXeY=tG"o5W,RFȂc%metUie$iNՕwpDvIFPvq1)!G4SgdOSAsv"Բc&Ua5Q^BuSԐ*UvS1N2jJ1f5QoWipyc&u.6jfѸuf{Ge z.ysxmAQqMy+-Qu[&&vDWU$bnalp U0$^rqVogV+(Y!KTpoYĹ8Qu(bFaj|eud8O_1*Id)5R*F1[RFljzgH5ZTogV}MY],GkcESYXp CJnL}DۖXFfSa 坷ݱgXؑwäSE -E6kE,UolpPPD!0I+Q s=R,EQPBEO=Jo-͘Z RBkT4<0! GvsPfXAjX\S@N m%j)B~A ײU*!7fKo4%s31 Y[Qf:GLsPYbl1! TRAma$R#I%i<7X"yJ и2x*iL< $ JZ![\1 Ĝ9zf)@?vA,0AHUNNpF`vdz;))Bm| CRMsjDCJaGH0=DJPA6 DǮ @ĥ _=sZ@i%|$Y2ӊCxԠTiTšQ-4 T9GS4&zb T.K7NH2B~R4fCb kyW!v m 48Wcr+1R$oJ#.?1Aq:R* (QTFE Q!ɔ:YPo<ܨGmɵc@"NvKEҿxaɋ V0r9>rd'ht)Cc7ZƊDz*йFz`XĂe8ox Cp-G7vqݛ؈I66i -I[\lM' z"Ta +Kˈs8ҦtTCq}5mT`$`d*4䕹zi tB0O!+RܽO!iSJJ\5NU xat$"NU=DNہ6P k4)Mj(jS=6&P:1�OiY| Kč^ڥSdtnU"^n ̕45PLbN8q72K:YhACP$F S9NdYXaJ@a9mOpLje^k\9֍£TrdgTމU*W:/$ºPo(r˄g 9e~0b(~[Q=Sof|/_n" bVb\3FS[UZe>qTͺ7D*_!NGBpD ˲hCE~&NQb:m|yy|FP(GMD̿y.ϯB*%7fbf "64G(/cn`V cA@a=ʱ0M—v7 ~%*!9Fy3RIHCm)4hjui2!,4WEeO?cR& Դs^&/TT2pW*?3ipb-q bs(fkWd.64AE`l&uIC`nsba^ xT- ?fPSLIOy,s@_ƛ 5q/uLQsgx!>ős.{A]kCZOF; wkiF3~@sOPZ%O`WI&jw"<3i7.=b͏RC%-B4RP3`|.4f'@n%yiBz@4Nl vUSAGE20.DOC  )@o3&C)I2@@v A~U9LQLn:ON+̃f7bxi2 >R њ`]@sA'MfsMǑl2qAt4 m6 #INs8LbtdX%r~ Y [}D<)YU2{u:5qU1Ĭьe2b0r)'c7Ι!Bi݋a:9A-Ɍ'_67y rfo8Mu:eXaquQZJ5U.U _OaY5, j8YƈZn%" Ff/1l٢d \rYg0n F5xYB7%Ftd"U}!qgL!n$oqgWfZw\ XFG) CoUFѽ^i1QZVU jUeY)uZ(q8eUXZn騡]$RuY7^W')* Z^]ږT1zZHup*jalٖj{Un`eU&AjrꥤDRnMܨr]H bKa:3nFh,344@REmŤ3s p"]Jid807ʜ!,UU`rD AԜ8ӶwI͡x(/Âe Ӈ@4T[h~X*zTʪESW 'at] Ŧ͠KLnFzoRgVKF'4jr2miYtˉslHBt$l2-\QKAxN95A掋U1Vkt:L* =(\Y u"P5\jEdu5qM數el,dT9h9 TbW GKMSdRd;yZ 谵HuKy]`!U* 'B8UP$b ɚgvg7)XpI-Qظ-AX5{Vp@gLX"Py=a:X̓C8n:HPzY1d H A3#+mN;s0t]PbJɀ8v*̴TƛЉ(> 323uB ]"/& 7/IbNS 2!1MiFV.D3evp0tùflo|D RXrvޛBtho(]4Ui4ܧp ~]$Uf&Rg Vs ?쭙[~7=O%~TExPu P"8e9Ħ\n@A97?7nԜfӼ b2[_ӔrdQt#DpFDI 1(t$|W2$܃0RJYMEF 6} sF 9Rrfj* o0 ʴ9pB{I& E*BsSD\ExvT2Wk^.fh-a! ~#5V/\),Srm!j FV*Len+ Ի]1@[{+ m>ƚUbo*ş1a_)Fk 50*{>VVK] ŮEp? H:rg`|sC&1[O+1x5 pJG,7ybD^Xt[vwiyA{bp7o'/X)6GhB1B%yr