page@swan.ulowell.edu (Bob Page) (12/29/88)
Submitted-by: elbaum%REED.BITNET@CUNYVM.CUNY.EDU (Daniel Elbaum) Posting-number: Volume 2, Issue 100 Archive-name: dos/qcat.1 Qcat prints out the full pathname of each file in a series of disks or a list of directories. It's small and speedy, just perfect for 90% of what one wants from a disk catalogger, but with none of the bells and whistles which, I find, sometimes get in the way. [uuencoded executable included. ..Bob] # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # qcat.c # qcat.doc # qcat.uu # This archive created: Wed Dec 28 12:15:22 1988 cat << \SHAR_EOF > qcat.c /*********************************************************************** 11/88 QCAT v0.01 -- List files on disks or in directories ----------------- Copyright (C) 1988 by Daniel Elbaum This software is freely redistributable provided that: the three files which comprise it (qcat, qcat.c, qcat.doc) remain intact; all copyright notices contained in any of the aforementioned files remain intact; and no fee beyond reasonable remuneration for collation and distribution be charged for use and/or purveyance. ***********************************************************************/ #include <stdio.h> #include <exec/types.h> #include <exec/memory.h> #include <libraries/dos.h> #include <libraries/dosextens.h> #include <intuition/intuition.h> /* Error descriptor codes */ #define E_NOLOCK (-1) #define E_NOMEM (-2) #define E_NOEXAM (-3) #define E_USAGE (-4) #define E_OUTPUT (-5) #define E_LIBRARY (-6) #define E_NONODE (-100) #define E_NOSTRING (-101) /* Manifest constants */ #define NAMSIZ (108) #define MEMFLOOR (64000L) /* least amt of mem to leave */ #define IREV (1) #define INAM ("intuition.library") /* Global data, type and function declarations */ typedef struct IntuitionBase* ib_t; ib_t IntuitionBase=NULL; void *OpenLibrary(); FILE *ofp; struct { char filenam[NAMSIZ*10]; } fs; struct namlist { char *nam; struct namlist *next; } nlist; /* Acts like a state machine, the state of which is determined by the combination of arguments supplied. The while loop sets the state, while the if switches select action taken according thereto. */ main(c, v) char **v; { register active; register err; char *cdrive=NULL; char *onam=NULL; char bu[NAMSIZ*10]; char *getcd(); char *realnam(); void getrspinit(), freelist(); ++v; while (**v == '-'){ switch(*++*v){ case 'o': /* specify output file */ if (!*++v) {prerr(NULL, E_USAGE); exit(10);} else {onam=*v; ++v;} break; case 'c': /* continuous listing of 1 drive */ if (!*++v) {prerr(NULL, E_USAGE); exit(10);} else {cdrive=*v; ++v;} if (!(IntuitionBase=(ib_t)OpenLibrary(INAM, IREV))){ prerr(NULL, E_LIBRARY); exit(10); } break; default: prerr(NULL, E_USAGE); exit(10); } } if (onam){ if (!(ofp=fopen(onam, "w"))){ prerr(onam, E_OUTPUT); exit(10); } } else ofp=stdout; if (cdrive){ getrspinit(); if (getresponse()!=FALSE){ for (active=1; active; ){ realnam(cdrive, fs.filenam); /* seed pathname */ if (err=getnams(cdrive)) prerr(cdrive, err); if (getresponse()==FALSE) active=0; } } } else if (!*v){ getcd(bu); strcpy(fs.filenam, bu); if (err=getnams(bu)) prerr(bu, err); } else{ for (; *v; ++v){ realnam(*v, fs.filenam); /* seed pathname */ if (err=getnams(*v)) prerr(*v, err); } } prlist(ofp, &nlist); freelist(&nlist); if (ofp!=stdout) fclose(ofp); if (IntuitionBase) CloseLibrary(IntuitionBase); exit(0); } /* If nam is the name of a file, add its size to the global counter. If nam is the name of a directory, saunter down a level and grab info for its files. Return a coded description of any error which occurs, or zero if success was the order of the day. */ getnams(nam) char *nam; { register struct FileLock *l=NULL; register struct FileInfoBlock *f=NULL; register err=0; struct FileLock *Lock(); void addtonam(), truncnam(); if (!nam) return(E_NOEXAM); if (!(l=Lock(nam, ACCESS_READ))){ return(E_NOLOCK); } if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) { UnLock(l); return(E_NOMEM); } if (!Examine(l, f)) { UnLock(l); FreeMem(f, (ULONG)sizeof(*f)); return(E_NOEXAM); } if (f->fib_DirEntryType<0){ /* file */ addnam(nam, &nlist); } else { while (ExNext(l, f)){ /* directory */ addtonam(fs.filenam, f->fib_FileName); if (err=getnams(fs.filenam)) break; truncnam(fs.filenam); /* delete filename from path */ } } UnLock(l); FreeMem(f, (ULONG)sizeof(*f)); return(err); } /* Assuming p points to a valid pathname and s to a valid filename, append the filename to the pathname. */ void addtonam(p, s) register char *p, *s; { register char *op=p; while (*p) p++; if (p!=op){ if (*--p!=':') *++p='/'; p++; } while (*s) *p++=*s++; *p='\0'; } /* Assuming p points to a valid pathname, clip the filename from it. */ void truncnam(p) register char *p; { register char *pp; if (!p) return; for (pp=p; *pp; pp++) ; while (*pp!='/'&&*pp!=':'&&pp>p) --pp; if (*pp==':') ++pp; *pp='\0'; } /* Build a real pathname from the filename, dirname, or drivename specifiecd in nam into bu. Return a pointer to bu on success, or NULL if the chore is beyond doing. */ char * realnam(nam, bu) char *nam, *bu; { register addcol; register struct FileLock *l=NULL; struct FileLock *Lock(); if (!nam||!bu) return(NULL); if (nam[strlen(nam)-1]==':') addcol=1; else addcol=0; if (!(l=Lock(nam, ACCESS_READ))){ return(NULL); } fullnam(l, bu); UnLock(l); return(bu); } /* Put the full name of the current directory into the supplied buffer and return a pointer to it. */ char * getcd(bu) char *bu; { struct FileLock *ol; if (!bu) return(NULL); fullnam(ol=CurrentDir(0L), bu); CurrentDir(ol); return(bu); } /* Put the full pathname of a locked file in the given buffer and return a pointer to it. */ char * fullnam(l, bu) register struct FileLock *l; char *bu; { register len; struct FileLock *nl, *ParentDir(); char bu2[NAMSIZ]; char ebu[NAMSIZ*10]; if (!l||!bu) return(NULL); bu2[0]=0; locknam(l, bu); while (l=ParentDir(l)){ if (locknam(l, bu2)){ sprintf(ebu, "%s/%s", bu2, bu); strcpy(bu, ebu); } else break; } if (bu2[0]) bu[strlen(bu2)]=':'; else {bu[len=strlen(bu)]=':'; bu[len+1]='\0';} return(bu); } /* Put the name of the file or directory associated with the given lock into the given buffer and return a pointer to it or NULL if it couldn't be done. */ char * locknam(l, bu) register struct FileLock *l; char *bu; { register struct FileInfoBlock *f=NULL; if (!l||!bu) return(NULL); if (!(f=(struct FileInfoBlock *)AllocMem((ULONG)sizeof(*f), MEMF_PUBLIC))) { return(NULL); } if (!Examine(l, f)) { FreeMem(f, (ULONG)sizeof(*f)); return(NULL); } strcpy(bu, f->fib_FileName); FreeMem(f, (ULONG)sizeof(*f)); return(bu); } /* Add a name to the end of the filename list. Could be more efficient, but the bottleneck is disk speed. Return a descriptive error value on failure. */ addnam(s, lp) char *s; struct namlist *lp; { struct namlist *newnode(); char *strsave(); void freelist(), prlist(); if (!s||!lp) return(-1); if (amtfree()<MEMFLOOR){ /* dump if mem full */ prlist(ofp, lp); freelist(lp); } while (lp->next) lp=lp->next; if (!(lp->next=newnode())) return(E_NONODE); /* won't happen. Better not. */ if (!(lp->next->nam=strsave(s))) return(E_NOSTRING); return(0); } /* Allocate a new node for the filename list. Return a pointer to it or NULL if there's not enough memory. */ struct namlist * newnode() { register struct namlist *mp; if (mp=(struct namlist *)malloc(sizeof(struct namlist))){ mp->nam=NULL; mp->next=NULL; } return(mp); } /* Free the filename list. */ void freelist(lp) struct namlist *lp; { struct namlist *p; if (!lp) return; lp=lp->next; /* don't free 1st item */ while (lp){ p=lp->next; free(lp->nam); free(lp); lp=p; } } /* Print out the filename list. */ void prlist(fp, lp) FILE *fp; struct namlist *lp; { if (!lp||!fp) return; lp=lp->next; /* don't print 1st item */ while (lp){ fprintf(fp, "%s\n", lp->nam); lp=lp->next; } } /* An old favorite. */ char * strsave(s) char *s; { register len; register char *mp; if (!s) return(NULL); if (mp=malloc(len=strlen(s)+1)) memcpy(mp, s, len); return(mp); } /* Report amount of free memory in the system. Errors not allowed here. */ ULONG amtfree() { ULONG c, f; Forbid(); c=AvailMem(MEMF_CHIP); f=AvailMem(MEMF_FAST); Permit(); return(c+f); } /* Print a message corresponding to the error given, prompting with s, if nonnull. Return the error given. */ prerr(s, err) char *s; { register char *errp; switch (err){ case E_NOMEM: errp="Out of memory"; break; case E_NOEXAM: errp="Couldn't examine"; break; case E_NOLOCK: errp="File not found"; break; case E_OUTPUT: errp="Can't open output file"; break; case E_USAGE: errp="Usage: qcat [-o outputfile] [-c drivename] or \n\ qcat [-o outputfile] dirname"; break; case E_LIBRARY: errp="Couldn't open intuition.library"; break; default: /* NOTREACHED */ errp="grievous error"; break; } if (s) printf("%s: %s\n", s, errp); else printf("%s\n", errp); return(err); } /* Set up the AutoRequest stuff, and use the automatic requestor to tell the user when to change disks, let them quit, and return when they do so. */ char *rsp_bod0="Insert a disk"; char *rsp_bod1="Next disk"; char *rsp_no="Quit"; char *rsp_yes="Redo"; struct response { struct IntuiText bod; struct IntuiText no; ULONG yflg; struct Window *w; } rsp; /* Initialize the autorequestor's data and find a window to put it in. Return nonzero on failure, zero on success. */ getrspinit() { rsp.bod.FrontPen=0; rsp.bod.BackPen=1; rsp.bod.DrawMode=JAM1; rsp.bod.LeftEdge=6; rsp.bod.TopEdge=3; rsp.bod.ITextFont=NULL; rsp.bod.IText=rsp_bod0; rsp.bod.NextText=NULL; rsp.no=rsp.bod; rsp.no.IText=rsp_no; rsp.yflg=DISKINSERTED; return(!(rsp.w=getCLIwin())); } /* Return a pointer to a window for the requestor. If there be none, return NULL. */ struct Window * getCLIwin() { register struct Screen *sp; register struct Window *wp; return(IntuitionBase->ActiveWindow); } /* Post a requestor asking for a new disk. The first time called, just ask for the first disk; after that, ask for the next. Return the boolean value of the user's response. */ getresponse() { register rv=0; rv=AutoRequest(rsp.w, &rsp.bod, NULL, &rsp.no, rsp.yflg, 0L, 200, 50); rsp.bod.IText=rsp_bod1; return(rv); } SHAR_EOF cat << \SHAR_EOF > qcat.doc 11/88 QCAT v0.01 -- List files on disks or in directories ----------------- Copyright (C) 1988 by Daniel Elbaum This software is freely redistributable provided that: the three files which comprise it (qcat, qcat.c, qcat.doc) remain intact; all copyright notices contained in any of the aforementioned files remain intact; and no fee beyond reasonable remuneration for collation and distribution be charged for use and/or purveyance. ----------------- Syntax: qcat [-o filename] [dirname ...] or qcat [-o filename] -c drive Qcat simply produces a listing of the full pathname of all files in a list of directories or in a series of disks. With no arguments, a list is produced of the files in the current directory and all its sub directories. -o redirects the list to a file of the specified name, wiping out any file of that name which may already exist. -c causes a continuous listing of a single drive. A requestor comes up prompting for a disk to be inserted; the names of the files on that disk are read, and the requestor comes back asking for the next disk. When all the disks you want to catalog have been fed in, click on the 'Quit' gadget, and the complete file list will be output. Instead of -c and a drive name, a bunch of directory names can be given on the command line. A single list will be output of all the files in all the specified directories and their sub- directories. Nota Bene: The list won't be sorted. There are plenty of utilities out there which sort files by line, so I didn't want to bloat this program with the extra functionality. If enough people want a sorting option, I'll add one. If the directory trees to be listed are deep (lots of sub- directories), the be sure to set the stack size to something like 10000 or so, since the recursive routine that does the spelunking is pretty stack-hungry. The purpose of qcat is to list disks or directories, given a simple command line, without involving the user in an interactive experience. One good use for it is to make a listing for a set of disks, then use the list to find out where particular files are located. Should come in handy for those Fish disks, eh? The way it works is to keep a linked list of filenames in memory until all disks or directories have been read, and then to dump the list. If memory gets low, the list will be dumped several times during the reading, so even if you have lots of disks to look at or not much memory or both, qcat should function smoothly. If you want to send me money for qcat, then by all means do so--many projects are in progress and I need financing. $5.00 is recommended. Make checks payable to: Daniel Elbaum Amaranth Software 4816 SE Bybee Blvd. Portland, Ore. 97206 Send comments, suggestions, and flames to: Daniel Elbaum Portland bbs: Amigaboard!, NAG, HABIT UUCP: ...!tektronix!reed!elbaum ARPA: elbaum@reed.EDU SHAR_EOF cat << \SHAR_EOF > qcat.uu begin 644 qcat M```#\P`````````&``````````4````"```#8P``"CP```!&````)`````T`F M``/I`````D[Y```````````#[`````$````"`````@````````/R```#Z@``+ M`V,`(0`!``````````````````````````#_________________________U M______\`````````````````````````````````````````````````````[ M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````#(8```Q\```,=@``#'``````````````````8 M`````````````````````````````````````````````````!Z"````````@ M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````;6%T:&EE965D;W5B8F%S+FQI8G)A<GD`% M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M``````````/L````!0````(```9(```&"```!@P```80```&%`````````/R) M```#Z0``"CPCSP```#`CP````#@CR````#PL>0````0CS@````23R4ZN_MHH, M0$JL`*QG``$(80`",I'(("P`K.6((#`($.6(2.<`,$7Y````P$?Y````0"!`W M<``0&$(P"``FR"`Y````."!Y````/$/P"``,(0`@4LC_^D(I``$2&&=<#`$`G M(&?V#`$`"6?P)LH,`0`B9Q04P1(89T(,`0`@9P04P6#R0AI@U!(89S`,`0`BK M9_(,`0`J9B`2&`P!`$YG!@P!`&YF!'(*8`X,`0!%9P8,`0!E9@)R&Q3!8,Q"` M$D*3(#P````\D(M&@.2(3-\,`$AY````0"\`3KD```!,(\`````8(\`````D( M3KD```!<(\`````<(\`````@(\`````H(\`````L3KD``"&`<``N>0```#!.\ M=6$``2QA``$6(\`````T+P!"IR1`("H`)&<0+'D````(($`B*```3J[_@D'Y! M```*]`P0``!G4"(()#P```/M+'D````(3J[_X@R``````&=$(\`````8(\``J M```<(\`````@(\`````D(\`````H(\`````L*4``G"E``*#EB"!`*6@`"`"D8 M3KD``"&`<`!@!"`O``1*N0```#1G$B(Y````&&L*+'D````(3J[_W"YY````2 M,"\`+'D````$(#D````(9P8B0$ZN_F(@.0````QG!B)`3J[^8B`Y````$&<&Z M(D!.KOYB2KD````T9PY.KO]\(GD````T3J[^AB`?3G5(YP$&+CP``X`'+'@`` M!$ZN_Y1,WV"`<&1@`/]Z0>P`7$ZN_H!![`!<3J[^C$YU0_H`$G``3J[]V"/`3 M````"&?`3G5D;W,N;&EB<F%R>0!.<4Y6^[A(YQ\\)BX`#$7Y```*P$?Y```A$ M_DGY```!Q$OY```$_'H`?`!8@R!#(%`0$`P``"UF``#*($-2D"!0$!!(@$C`; M3KD``"><```"Y@```&\```,0````8P````````-N6(,@0R`09@``&$AX__Q"Q MITZ24$](>``*3I-83V````@@0RP06(-@``!R6(,@0R`09@``&$AX__Q"ITZ2< M4$](>``*3I-83V````@@0RH06(-(>``!2'D```UP3KD```!X4$\CP````<`@R M.0```<!F```42'C_^D*G3I)03TAX``I.DUA/8```%$AX__Q"ITZ24$](>``*( M3I-83V``_RQ*AF<``#!(>0``#6XO!DZY```.!%!/*(`@%&8``!1(>/_[+P9.V MDE!/2'@`"DZ36$]@```20?D```L((`@&@````"`H@$J%9P``5$ZY```+G$ZYW M```,(DJ`9P``/GX!2H=G```V2'D```'(+P5.N0``!L103R\%3I583R@`9P``% M"B\$+P5.DE!/3KD```PB2H!F```$?@!@QF```'H@0R`09@``/$AN^[A.N0``\ M!T183TAN^[A(>0```<A.N0``)(A03TAN^[A.E5A/*`!G```,+P1(;ONX3I)01 M3V```#@@0R`09P``,$AY```!R"!#+Q!.N0``!L103R!#+Q!.E5A/*`!G```,T M+P0@0R\03I)03UB#8,I(>0``!@`O%$ZY```)Z%!/2'D```8`3KD```FB6$\@Z M%$'Y```+""((!H$````@L(%G```,+Q1.N0``#8183R`Y```!P&<``!`O.0``1 M`<!.N0```&183T*G3I-83TS?//A.7DYU3E;_]$CG'B`J+@`(1?D```"D>`!V& M`'P`2H5F```,</U,WP1X3EY.=4AX__XO!4ZY````B%!/*`!F```&</]@X$AXB M``%(>`$$3KD````@4$\F`&8```PO!$Z26$]P_F#`+P,O!$ZY````N%!/2H!F? M```:+P1.DEA/2'@!!"\#3KD````X4$]P_6"6($,@*``$;```%DAY```&`"\%X M3KD```C@4$]@``!0+P,O!$ZY````U%!/2H!G```^(`-0@"\`2'D```'(3KD`_ M``8,4$](>0```<A.N0``!/Q83RP`9P``!F```!)(>0```<A.N0``!FA83V"RL M+P1.DEA/2'@!!"\#3KD````X4$\@!F``_Q).5O_\2.<<`"8N``@H+@`,*@,@; M0Q`09P``!E*#8/2VA6<``!I3@R!#$!`,```Z9P``"E*#($,0O``O4H,@1!`01 M9P``#B!$4H0B0U*#$I!@["!#0A!,WP`X3EY.=4Y6__Q(YQ@`*"X`"&8```I,> MWP`83EY.=28$($,0$&<```92@V#T($,0$`P``"]G```8($,0$`P``#IG```,B MMH1O```&4X-@WB!#$!`,```Z9@``!%*#($-"$&"T3E;_^$CG'@`F+@`(*BX`P M#'@`2H-G```(2H5F```,<`!,WP!X3EY.=2!#+P@O`TZY```DG%A/4X`@7]'`@ M$!`,```Z9@``"'P!8```!'P`2'C__B\#3KD```"(4$\H`&8```9P`&"Z+P4O/ M!$ZY```'A%!/+P1.N0```*183R`%8*!.5O_\2.<8`"8N``AF```,<`!,WP`8& M3EY.=2\#0J=.N0```/!83R@`+P1.N0``!X103R\$3KD```#P6$\@`V#23E;[Y M5$CG'``F+@`,*"X`"&<```A*@V8```QP`$S?`#A.7DYU0B[_C"\#+P1.N0``T M"%A03R\$3KD```$$6$\H`&<``$A(;O^,+P1.N0``"%A03TJ`9P``+B\#2&[_\ MC$AY```-:$AN^U1.N0``'/;>_``02&[[5"\#3KD``"2(4$]@```&8```!&"JG M$"[_C&<``!X@0R\(2&[_C$ZY```DG%A/(%_1P!"\`#I@```B($,O""\#3KD`" M`"2<6$\J`"!?T<40O``Z($/1Q4(H``$@`V``_TI.5O_\2.<<`"@N``PJ+@`(( M=@!*A6<```A*A&8```QP`$S?`#A.7DYU2'@``4AX`01.N0```"!03R8`9@``. M!G``8-XO`R\%3KD```"X4$]*@&8``!1(>`$$+P-.N0```#A03W``8+H@`U"`. M+P`O!$ZY```DB%!/2'@!!"\#3KD````X4$\@!&"83E8``$CG&``F+@`,*"X`& M"&<```A*@V8```QP_TS?`!A.7DYU3KD```J$#(```/H`;```'"\#+SD```'$9 M3KD```GH4$\O`TZY```)HEA/($,@*``$9P``"B!#)B@`!&#N3KD```EX($,A1 M0``$("@`!&8```9PG&"D+P1.N0``"CA83R!#(&@`!""`(!!F```&<)M@B'``] M8(1.5O_\+P-(>``(3KD```_\6$\F`&<```P@0T*0($-"J``$(`,F'TY>3G5.Z M5O_\2.<8`"8N``AF```*3-\`&$Y>3G4@0R8H``1*@V<``"(@0R@H``0@0R\0Z M3KD``">P6$\O`TZY```GL%A/)@1@VF#*3E8``$CG&``F+@`,*"X`"$J#9P``G M"$J$9@``"DS?`!A.7DYU($,F*``$2H-G```@($,O$$AY```-9"\$3KD``!T<( MWOP`#"!#)B@`!&#<8,Q.5O_X2.<<`"@N``AF```,<`!,WP`X3EY.=2\$3KD`U M`"2<6$]2@"H`+P5.N0``#_Q83R8`9P``$B\%+P0O`TZY```H=-[\``P@`V#&: M3E;_^$CG&`!.N0````!(>``"3KD```!06$\H`$AX``1.N0```%!83R8`3KD`` M```0(`30@TS?`!A.7DYU3E;__$CG'``H+@`(*BX`#"`%#(#____Z;0``@%R`6 M#(`````%;@``=.6`0?D```KV(G`(`$[1```+3@``"S8```M"```+'@``"Q(`X M``LJ`````$'Y```-5B8(8```1D'Y```-1"8(8```.D'Y```--"8(8```+D'YJ M```-'"8(8```(D'Y```,T"8(8```%D'Y```,L"8(8```"D'Y```,H"8(2H1GJ M```:+P,O!$AY```,F$ZY```=9-[\``Q@```2+P-(>0``#)1.N0``'6103R`%C M3-\`.$Y>3G5.<4Y6```O"D7Y```&&$(2%7P``0`!0BH``C5\``8`!#5\``,`. M!D*J``@E>0``!@@`#$*J`!!(4D/J`!0@7W`%(MA1R/_\)7D```80`"`E?```` M@```*$ZY```,$"5``"P@*@`L9@``"'`!8```!$*`)%].7DYU3E;_^"!Y```!^ MP"`H`#1.7DYU3E;__$CG$"!%^0``!AAV`$AX`#)(>`#(0J<O*@`H(`H&@```/ M`!0O`$*G+PHO*@`L3KD`````WOP`("8`)7D```8,``P@`TS?!`A.7DYU4F5DQ M;P``475I=```3F5X="!D:7-K`$EN<V5R="!A(&1I<VL`)7,*`"5S.B`E<PH`S M9W)I979O=7,@97)R;W(``$-O=6QD;B=T(&]P96X@:6YT=6ET:6]N+FQI8G)A+ M<GD`57-A9V4Z('%C870@6RUO(&]U='!U=&9I;&5=(%LM8R!D<FEV96YA;65=+ M(&]R(`IQ8V%T(%LM;R!O=71P=71F:6QE72!D:7)N86UE`$-A;B=T(&]P96X@8 M;W5T<'5T(&9I;&4``$9I;&4@;F]T(&9O=6YD``!#;W5L9&XG="!E>&%M:6YEE M``!/=70@;V8@;65M;W)Y`"5S"@`E<R\E<P!W`&EN='5I=&EO;BYL:6)R87)YD M`$YQ3E8``"\#)BX`"&<``'(,@P``"PAG```J0?D```L((`@&@````""V@&<`U M`!9!^0``"P@@"`:`````0+:`9@``""8?3EY.=2\#3KD``"5(6$\@0R\03KD`? M```<6$\@0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/8,!.5O_LS M2.<?,"1N``PF;@`(+#P```$`>``,A@````%L```$?`%V`'H`#(4````4;```: M,D'Y```+""`((@7K@="!($`@*``:9@``%D'Y```+""`((@7K@="!)@!@```&N M4H5@QDJ#9P`!`A`2#```<F8``!HN/````^T0*@`!#```*V8```@N/````^T0X M$@P``'=F```Z+CP```/N$"H``0P``"MF```H2'@#[2\+3KD`````4$\H`&<`O M`!1(>``!0J<O!$ZY````;-[\``Q*A&8``!`O!R\+3KD`````4$\H`$J$9P``! M;"!#((0@0R%&``P@0T)H`!X@0T*H``@@0T*H``1"IR\&3KD````@4$\@0R%`" M`!H@*``:9P``)$*G0J<O!$ZY````;-[\``P@0R%``!0B0R-H`!0`$&```!`OP M!$ZY````'%A/8```!F```!I(>``@+P-.N0``)2Q03W``3-\,^$Y>3G4@`V#T\ M3E;_\$CG'@!X_W8`#(,````4;```)"`N`!!!^0``"P@B""0#ZX+2@K"!9@``4 M""@#8```!E*#8-0,A/____]G``!(+RX`#"\N``A.N0``#@103RP`+P9.N0``+ M(W!83RH`2'@`@"\%+P1.N0``)+#>_``,0?D```L((`@B!.N!T(%,WP!X3EY.! M=7``8/1.5O_\2.<8($7Y```-B"@N``A"IR`$!H`````0+P!.N0```"!03R8`N M(!)G```((%(A0P`$($,@DB!#(4H`!"`$!H`````0($,A0``()(,@`P:`````X M#$S?!!A.7DYU3E;_^$CG&``O+@`,+RX`"$ZY```E]"`?6$\H`"\$3KD``")XT M6$\F`"\$+P-.N0``)2Q03R`#3-\`&$Y>3G5.5O_T2.<>`"@N``@O+@`,3KD`P M`")X6$\F`&<``#0@!`2`````$"P`($8@*``(!(`````0*@`O!2\#+P1.N0``Z M)&C>_``,+P1.N0``(]183R`#3-\`>$Y>3G5.<4Y6__1(YQ\`)BX`""HN``Q!D M^0``"DP@"`:`````?R@`($1"$`R#@````&8``%@@!4ZY```GG```$4H````(Y M```16@````H``!%D````$````````!%N0?D``!YV(`A,WP#X3EY.=4'Y```>9 M:B`(8.Y!^0``'F`@"&#D0?D``!Y8(`A@VDJ#;```"'`!8```!$*`+@!G```(+ M(`-$@"8`+P4O`TZY```G!B`?6$\L`"\%+P-.N0``)F8@'UA/)@`@>0``!DC1V MQE.$(D02D$J#;LY*AV<```I3A"!$$+P`+2`$8`#_?$Y6_\A(YQ\`*BX`$`R%5 M````(&\```1Z!D'Y```>4$/N``@@*0``(BD`!$ZY```A+DJ`;```"'`!8```Q M!$*`+@!G```@0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$0>X`""\H: M``0O*```3KD``!ZH4$]![O_8(4```"%!``1![O_80^X`""`I```B*0`$3KD`R M`"$&0>[_X"%````A00`$0?D```I,)@A\`+R%;```CD'Y```>2$/N_^`@*0``J M(BD`!$ZY```@OD'N_^`A0```(4$`!$'N_^`O*``$+R@``$ZY```>J%!/+P$@% M`"(?3KD``"%F*``&```P($-2@Q"`(`1.N0``(59![O_@+P$O`"`H```B*``$: M+5__R"U?_\Q![O_(3KD``"$&0>[_X"%````A00`$4H9@`/]P($-2@T(0<#]!$ M^0``"DPB""0%1(+2@M"!)@!(>0``"DPO`TZY```DB%!/4X,@0Q"\`"Y!^0``[ M'D!#[O_8("D``"(I``1.N0``(-8O`2\`3KD``!ZH4$]![O_0(4```"%!``1!, M^0``'CA#[O_0("D``"(I``1.N0``(+Y![O_8+P$O`"`H```B*``$+5__R"U?F M_\Q![O_(3KD``"$&+P$@`"(?3KD``"%F*``&```P4X,@0Q"`0>[_T$/N_]@C> M:``````C:``$``1!^0``'C!#[O_8("D``"(I``1.N0``(2Y*@&X`_TY*AV<`V M``I3@R!#$+P`+2`#3-\`^$Y>3G5.5O_(2.<?("XN`!`,AP```"!O```$?@9!A M^0``'BA#[@`(("D``"(I``1.N0``(2Y*@&P```AP`6````1"@"1`(`IG```@0 M0>X`""`H```B*``$3KD``"$>0>X`""%````A00`$>`!!^0``'B!#[@`(("D`# M`"(I``1.N0``(2Y*@&<``(Y!^0``'AA#[@`(("D``"(I``1.N0``(2Y*@&T`R M`"I!^0``'A!#[@`(("D``"(I``1.N0``(-9![@`((4```"%!``12A&"Z0?D`( M`!X(0^X`""`I```B*0`$3KD``"$N2H!L```J0?D``!X`0^X`""`I```B*0`$6 M3KD``""^0>X`""%````A00`$4X1@ND'N``@O*``$+R@``$ZY```>J%!/0>[_7 MV"%````A00`$0>[_V$/N``@@*0``(BD`!$ZY```A!D'N_^`A0```(4$`!$'YS M```*3"8(>@"ZAVP``(Y!^0``'?A#[O_@("D``"(I``1.N0``(+Y![O_@(4``$ M`"%!``1![O_@+R@`!"\H``!.N0``'JA03R\!(``B'TZY```A9BP`!@``,"!#V M4H,0@"`&3KD``"%60>[_X"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```A4 M!D'N_^`A0```(4$`!%*%8`#_<"!#4H,0O`!%2H1M```.($-2@Q"\`"M@```0R M($-2@Q"\`"T@!$2`*`!Z`DJ%;0``,DAX``HO!$ZY```G!B`?6$\L``8``#`@$ M0]'%$(!(>``*+P1.N0``)F8H'UA/4X5@RB!#0B@``W`Y0?D```I,(@@D!T2"- MTH+0@28`2'D```I,+P-.N0``)(A03U.#($,0O``N0?D``!WP0^[_V"`I```B3 M*0`$3KD``"#6+P$O`$ZY```>J%!/0>[_T"%````A00`$0?D``!WH0^[_T"`I" M```B*0`$3KD``""^0>[_V"\!+P`@*```(B@`!"U?_\@M7__,0>[_R$ZY```AW M!B\!(``B'TZY```A9BP`!@``,%.#($,0@$'N_]!#[O_8(V@`````(V@`!``$T M0?D``!W@0^[_V"`I```B*0`$3KD``"$N2H!N`/].(`IG```*4X,@0Q"\`"T@? M`TS?!/A.7DYU3E;_]$CG&``H+@`00?D``!W80^X`""`I```B*0`$3KD``"$NS M2H!L```80>X`""`H```B*``$3KD``"$>8```#D'N``@@*```(B@`!$'N__0A? M0```(4$`!$'Y```=T$/N__0@*0``(BD`!$ZY```A+DJ`;@``($'Y```=R$/N' M__0@*0``(BD`!$ZY```A+DJ`;```(B\$0>X`""\H``0O*```3KD``!06WOP`@ M#$S?`!A.7DYU+P1![@`(+R@`!"\H``!.N0``$=C>_``,)@`O`TAY```*3$ZYF M```DB%!/2H1O```L0?D```I,)@@@0Q`09P``!E*#8/13@R!#$!`,```P9@``& M"B!#4X-"$&#L0?D```I,(`A@E$Y6__A(YQP`*BX`"'@`0?D```I,)@A!^0``# M"DPF""!%$!!G```0($52A2)#4H,2D%*$8.JXK@`,;```$"`N`!`@0U*#$(!2> MA&#J($-"$$'Y```*3"`(3-\`.$Y>3G5.5O_X2.<<`"@N``@O!$ZY```DG%A/R M*@!!^0``"DPF""`%4H6PK@`,;```#B`N`!`@0U*#$(!@Z"\$+P-.N0``)(A0> M3T'Y```*3"`(3-\`.$Y>3G5.5@``2.<<`"8N``@H+@`,*BX`$$J$;P``&"\%W M+P0O`TZY```8V-[\``PF`&```!Y*A&P``!@O!2`$1(`O`"\#3KD``!AZWOP`H M#"8`(`-,WP`X3EY.=4Y6_]9(YQ\\)FX`$$OY```0]"@N``PF+@`(($,0$&<`^ M`TH@0Q`02(!(P$ZY```GG```&<(````E````````'-Y2@S1\```L/```!``@U M0Q`0#```+68```AP`6````1"@"U`__0@+O_T9P``!%*#($,0$$B`2,`H0"`,I M#(`````P9P``!CA\`"`@0Q`0#```*F8```Y2@R!$)%!8A&```#H@0Q`0#```< M,&T``"X@0Q`0#```.6X``"(@"M"`(@#E@="!($,2$$B!2,'0@02`````,"1`V M4H-@R"`N__1G```((`I$@"1`($,0$`P``"YF``!64H,@0Q`0#```*F8```Y2, M@R!$+!!8A&```#Q\`"!#$!`,```P;0``+B!#$!`,```Y;@``(B`&T(`B`.6!' MT($@0Q(02(%(P="!!(`````P+`!2@V#(($,0$$B`2,!.N0``)YP``!L^````, M)0``&U8```!C```;<@```&0``!N&````90``&ZH```!F```;S@```&<``!ORX M````;```&_@```!O```<#````',``!PD````=0``'#@```!X```<@@```%@`` M```````<EAU\`"7_UD'N_]9"*``!0>[_UBH(8``!2B!$(!`=0/_60>[_UD(H) M``%![O_6*@A8A&```2Y(>``*($0O$$Z54$\J`%B$8``!&B\&($0O*``$+R@`= M`$ZY```4%M[\``PJ`%"$+#P```0`8```]B\&($0O*``$+R@``$ZY```1V-[\L M``PJ`%"$+#P```0`8```TB\&($0O*``$+R@``$ZY```78M[\``PJ`%"$+#P`_ M``0`8```KE*#8`#^TDAX``@@1"\03I503RH`6(1@``"4($0J$%B$2H5F```*W M0?D``!W`*@A@``!\2'@`"B!$+Q!.E5!/*@!8A&```&A(>``0($0O$$Z54$\J! M`"X%($<0$&<``"X@1Q`0#```06T``!X@1Q`0#```6FX``!(@1Q`02(!(P`8`X M`"`@1Q"`4H=@S%B$8```'DAX`!`@1"\03I503RH`6(1@```*0?D``!VX*@@O+ M!4ZY```DG%A/L(9O```(($71QD(0+PPO"B\%3KD``!DLWOP`#"H`($40$&<`> M``X@15*%(DM22Q*08.Q@```*($,B2U)+$I!2@V``_+)"$TS?//A.7DYU3E8`E M`"\#)BX`""\#2&X`$"\N``Q.N0``&8+>_``,(`,F'TY>3G5.5O_\+P-!^0``9 M!DPF""\#2&X`$"\N``Q.N0``&8+>_``,+RX`""\#3KD``"2<6$\O`$AX``$O- M`TZY```?@-[\`!`F'TY>3G5.5O_\+P-!^0``!DPF""\#2&X`#"\N``A.N0``R M&8+>_``,0?D```L((`@&@````"`O`"\#3KD``"2<6$\O`$AX``$O`TZY```?S M@-[\`!`F'TY>3G4M3T]04RT``"AN=6QL*0``.\><H0R20BM$%:\=>+6,0```M M``````````````````!`)````````$`D````````0"0```````!`)```````0 M`#_P````````0"0```````!`)```````````````````````````````````W M`````$`D````````0"0```````!`)```````````````````+4]/4%,M```X_ M,#`P,#`P,```+3(Q-#<T.#,V-#@`,C`P,#`P,#`P,#``,#$R,S0U-C<X.4%"N M0T1%1D=(24I+3$U.3U!14E-455976%E:``!.5O_\0>X`""`H```B*``$3KD`/ M`"%F+4#__"`N__Q.N0``(59.7DYU3E;_^$'N``@O*``$+R@``$ZY```>J%!/5 M0>[_^"%````A00`$0>[_^$/N``@@*0``(BD`!$ZY```A+DJ`;```'D'Y```?G M=D/N__@@*0``(BD`!$ZY```@[DY>3G5![O_X("@``"(H``1@[F#L3E8``$'YN M```?;D/N``@@*0``(BD`!$ZY```@[B\!+P!.N0``'JA03TZY```A5DY>3G4_J MX````````#_P````````3G%.5O_T2.<?("8N`!0N+@`()&X`#'P`+PHO+@`0? M3KD``"7T(!]83RH`($,@*``,($.0J``$L(5L```2($,@*``,($.0J``$8```O M!"`%*``O!"!#("@`&B!#T*@`!"\`+P=.N0``)&C>_``,W(2:A-Z$($/9J``4> M($/9J``$($,@*``(($.PJ``$;```#"!#(D,C:``$``@@0P`H``$`&$J%9P``+ M)B\#3KD``"5(6$\H``R$_____V8```P@!$S?!/A.7DYU8```!F````9@`/]:8 M+P-.N0``)4A83R\*+P9.N0``)F8@'UA/8-).<4CGP,`@.0````QF```^0_D`9 M``K,<``L>0````1.KOW8(\`````,9@``(DCG`08N/``#@`4L>``$3J[_E$S?! M8(!(>`!D3KD``"'^+$!,WP,#3G5(YS`"3KD``"!L3-@`#$ZN_[),WT`,3G5(= MYS`"3KD``"!L3-@`#$ZN_ZQ,WT`,3G5(YS`"3KD``"!L3-@`#$ZN_[Y,WT`,1 M3G5(YS`"3KD``"!L3-@`#$ZN_[A,WT`,3G4O#DZY```@;$ZN_\0L7TYU2.<P0 M`DZY```@;$S8``Q.KO_63-]`#$J`9@1P`&`(:P1P`6`"</].=2\.3KD``"!L= M3J[_W"Q?3G4O#DZY```@;$ZN_^(L7TYU0H%.=4*!3G5.<4Y6```O"D7Y```DJ ML$*Y```-B$AX`H!(>0``"PA.N0``)2Q03TAX`0`O.0```!A"ITZ2WOP`#$AX] M`0`O.0```!Q(>``!3I+>_``,2'@!`"\Y````($AX``).DM[\``PO+@`,+RX`C M"$ZY```"A%!/0J=.N0``(?Y83R1?3EY.=4Y6__Q(YQ`P1?D```V(1_D``"-P0 M2'D```L(3I-83T'Y```+""`(!H`````@+P!.DUA/0?D```L((`@&@````$`O8 M`$Z36$\@$F<``!H@4B80(%(O*``(+Q).N0```#A03R2#8.(O+@`(3KD```'$M M6$],WPP(3EY.=4YQ3E;__$CG&"!%^0``#8@H+@`(0J<@!`:`````$"\`3KD`D M```@4$\F`"`29P``""!2(4,`!"!#()(@0R%*``0@!`:`````$"!#(4``""2#T M(`,&@`````Q,WP083EY.=4Y6__A(YQ@`+RX`#"\N``A.N0``)?0@'UA/*``OX M!$ZY```B>%A/)@`O!"\#3KD``"4L4$\@`TS?`!A.7DYU3E;_]$CG'@`H+@`(E M+RX`#$ZY```B>%A/)@!G```T(`0$@````!`L`"!&("@`"`2`````$"H`+P4OM M`R\$3KD``"1HWOP`#"\$3KD``"/46$\@`TS?`'A.7DYU3G%.5O_\2.<8`"8NU M``@O`TZY```E2%A/0J<@0R`H`!0@0Y"H`!`O`"!#*!`O!$ZY````;-[\``P@> M0R\H``P@0R\H`!I.N0```#A03TAX`"`O`TZY```E+%!/(`1,WP`83EY.=4YQV M3E;__$CG&``H+@`(9P``2G#T0?D```KD(@@$@0``"N0D!)2!(@+0@28`($,B[ M0R)I``0BD"!#(!!G```.($,B0R)1(V@`!``$($,O*``(+P-.N0```#A03TS?7 M`!A.7DYU3E;__$CG$"!%^0``#8@@$F<``!H@4B80(%(O*``(+Q).N0```#A04 M3R2#8.),WP0(3EY.=4Y6```O+@`0+RX`""\N``Q.N0``*'3>_``,3EY.=4YQT M(&\`!")O``@0V6;\("\`!$YU3G$@;P`$2AAF_)'O``13B"`(3G5.<4Y6__Q(3 MYQ@`*"X`$&8```1X`4'Y```+""`((BX`".N!T($F`&<``%)"IR!#(40`#"\H% M``Q.N0```"!03R!#(4``&B`H`!IG```P0J="IR!#(*X`#"\03KD```!LWOP`$ M#"!#(4``%")#(V@`%``0(`-,WP`83EY.=7``8/1.5@``+RX`#$*G+RX`"$ZYS M```H1-[\``Q.7DYU3E;_]$CG'B`F+@`(-'P`$'P`($,0*``82(!(P`*`````B M`6<``'(@0R`H`!0@0Y"H``0J`"`R.`"PA6<``!I"IR`%D+(X`"\`($,O$$ZY" M````;-[\``P@0R\H``0@0R\H`!H@0R\03KD````PWOP`#"@`($.XJ``$9P``Y M#'S_2H1L```$>``@!="$)8`X`"!#`BC__@`8($-"J``(($-"J``$(`9,WP1XH M3EY.=4Y6``!(Y_@`2FX`"&8``!Y*;@`,9@``%C`N``K`[@`.+4``"$S?`!].O M7DYU>`$D+@`(;```!D2"1(0F+@`,;```!D2#1(1"@#`"P,,R`DA"Q,-(0\+#A MTH)(04)!T(%*A&P```1$@"U```A,WP`?3EY.=4Y6```O`$IN``QF'"`N``AK[ M%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`B+@`,I M;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!``$`7 M`&ST@,$"@```__\D`"\`+P1A`/\0(!]83[:`;`)3@B`"2H5L`D2`+4``"$S?Y M`#X@'TY>3G5.5@``2.?X`$IN``QF'"`N``AK%H#N``YI$$)`2$`M0``(3-\`S M'TY>3G5X`2`N``AL!$2`1(0D`"(N``QL`D2!#($``0``;!!"0$A`@,$P`H#!4 M0D!(0&`L)@'BB.*)#($``0``;/2`P0*```#__R\`+P-A`/YZ(!]83[2`9`*0+ M@Y""1(!*A&P"1(`M0``(3-\`'TY>3G4@7R)8(@EG!K"89O9.T2!03M!.<4Y6, M__Q(YQ@`*"X`"&<``$IP]$'Y```*^"((!($```KX)`24@2("T($F`"!#(D,BD M:0`$(I`@0R`09P``#B!#(D,B42-H``0`!"!#+R@`""\#3KD````X4$],WP`8* M3EY.=4Y6__Q(YQ`@1?D```V((!)G```:(%(F$"!2+R@`""\23KD````X4$\DO M@V#B3-\$"$Y>3G5.5O_T2.<>`"HN``@L!2@N``PF+@`02H-O```,($92AA"$` M4X-@\"`%3-\`>$Y>3G5.5O_T2.<?`"PN`!`N+@`(2H9N```,(`=,WP#X3EY.> M=2HN``PH![J$;@``."`&4X`B!=*`(`&PA&T``"@@!E.`VH`@!E.`V(`F!DJ#E M;P``$"!%4X4B1%.$$I!3@V#L8```&"8&2H-O```0($52A2)$4H02D%.#8.P@) M!V"<```#[````&L````!```H&@``)\0``"?,```DQ```)#X``"/H```C\```F M(H(``"'0```AO```(:H``"&8```B%```(AX``"(R```AC@``(@@``"!R```@+ MC@``('P``!V(```1!@``$;0``!)^```3(@``$S0``!5J```6;@``%H```!@T< M```82```&'(``!B*```8D@``&,H``!CR```9'@``'20``!UL```0!@``#C@`_ M``Y0```/C```#^0```V4```-G@``#;(```ND```+Q@``"^(```P6```,+```^ M#&````.Z```$N@```IX```-*```#4````^H```0Z```$;```!)H```2J```$2 MV```!.(```62```%O@``!<P```7D```)&````6`````"````"`````X````:& M````1@```$P```!>````9````-X```#N````_````0(```$.```!%````1H`> M``$@```!+@```3X```%0```!=````88```&,```!D@```9@```&>```!I```9 M`<H```'2```!V@```>0```'R```"`````@X```(<```"*````FX```#H````# M`@``)3P``"1Z```CP@``(X```"->```C4@``(P0``"+H```B]@``(R8``")H; M```B#@``(>@``"&>```AB```(?(``""R```@Q```(-P``"#T```A#```(2(`J M`"$T```A6@``(6H``"!@```@*```(%0``!_B```?G@``'R0``!]4```?!@``P M'L@``!]F```>N@``'N(``!\2```?0@``'UX``!U6```=J@``&.@``!RB```=G M1@``'9H``!->```4S```%JH``!,\```6B```&#H``!D6```2X```%<P``!+,M M```3O```%;@``!<(```2H```$XX``!42```5C```%MH``!)L```3`@``$[``< M`!58```5[@``%OP``!)(```2O@``$V@``!4T```5J@``%K0``!(J```4:@``S M%YH``!($```3]```%$(``!20```4K@``%/0``!=````7@@``%\X``!?L```1[ MJ```%E@``!&8```6/```$28``!FN```:T@``$2H``!$R```1.@``$48``!%,X M```17```$68``!%P```1\@``$HX``!-,```3?```$^(``!0P```4?@``%)P`Q M`!2Z```4X@``%0```!5Z```6F```%L@``!<N```7<```%[P``!?:```8!@``B M&"8``!E.```9;@``&9```!FR```9O@``&M8``!K>```:Y@``&NX``!KV```:1 M_@``&P8``!L.```;%@``&QX``!LF```;+@``&SH``!N4```;N```&]P``!P:` M```<F```'+P``!T,```=-@``'7X``!#B```0U@``$(@``!!Z```0J@``$&P`3 M``_:```/R```#UP```^\```-_```#<X```OR```+=```"XH```IX```*)@``= M"=(```G<```)A```"F0```?N```&]```""````@Z```*5@``!-````1````'3 M_@``",@```.4```"R@```I@```*2```"I````LX```+6```"X@```SP```.,? M```#T````]8```/R```$#@``!"X```1V```$H@``!+````6:```%Q```!=(`X M``7J```',```!W````>R```'T```!^0```D&```)'@``"2@```E"```)7```O M"AX```KL```*]@``"OH```K^```+`@``"P8```L*```+%```"R````LL```+I M.```"T0```M0```+7```"VX```N$```!)@```;P````6`````P``);```"66> M```E"```(YX```]&```.R```#R@```ZR```.W```#=H```>\```'9```!WH`0 M``6J```%8@``"*````4L```'&@``!0H```<Z```!"````/8````7````!```Z M*`(``"@R```DY@``)"8``"16```CM```(I@``")8```0'```#PP```WN```*I ML```"I@```JF```*C@``!7P```8````(M```"-8```5&```(B@``!.@```-") M`````0````4```Q4`````````_(```/I````1DCG(`),[P`&``PL>0````A.F MKO_B3-]`!$YU```O#B(O``@L>0````A.KO_<+%].=4CG,`),[P`.`!`L>0``( M``A.KO_03-]`#$YU```O#BQY````"$ZN_\HL7TYU+PXL>0````A.KO_$+%]., M=4CG,`),[P`.`!`L>0````A.KO^^3-]`#$YU``!(YR`"3.\`!@`,+'D````(: M3J[_K$S?0`1.=0``+PXB+P`(+'D````(3J[_IBQ?3G5(YR`"3.\`!@`,+'D`. M```(3J[_FDS?0`1.=0``2.<@`DSO``8`#"QY````"$ZN_Y1,WT`$3G4``"\.8 M(B\`""QY````"$ZN_X(L7TYU+PXB+P`(+'D````(3J[_+BQ?3G4```/L````Z M#`````$```$,````^````.````#$````K````)0```!X````8````%`````\: M````)`````P````````#\`````-?4&%R96YT1&ER`"4```$$`````U]#=7)RV M96YT1&ER`````/`````"7T5X3F5X=`````#4`````E]%>&%M:6YE````N```' M``)?56Y,;V-K`````*0````"7TQO8VL`)>D```"(`````E]3965K`"7I````( M;`````)?3W5T<'5T`````%P````"7TEN<'5T`"4```!,`````E]7<FET90`EM M````,`````)?0VQO<V4`)0```!P````"7T]P96X`)>D``````````````_(`^ M``/I````)"\.+'D````$3J[_?"Q?3G4O#BQY````!$ZN_W8L7TYU+PXL>0``" M``1,[P`#``A.KO\Z+%].=0``+PXL>0````0B;P`(("\`#$ZN_RXL7TYU+PXL' M>0````0B+P`(3J[_*"Q?3G4O#BQY````!")O``A.KOYB+%].=2\.+'D````$6 M(F\`""`O``Q.KOW8+%].=0```^P````'`````0```'P```!H````5````#P`^ M```D````%`````0````````#\`````-?3W!E;DQI8G)A<GD```!X````!%]#6 M;&]S94QI8G)A<GD`)>D```!D`````U]!=F%I;$UE;0`EZ0```%`````"7T9R? M965-96T````X`````U]!;&QO8TUE;0`EZ0```"`````"7U!E<FUI=``````0= M`````E]&;W)B:60```````````````/R```#Z0````U(YS`R+'D```'`(&\`K M&")O`!PD;P`@)F\`)"`O`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU```#[```$ M``$````!````!@````````/P`````U]!=71O4F5Q=65S=``````````````#B !\@$`S `` end size 16696 SHAR_EOF # End of shell archive exit 0 -- Bob Page, U of Lowell CS Dept. page@swan.ulowell.edu ulowell!page Have five nice days.