page@swan.ulowell.edu (Bob Page) (12/29/88)
Submitted-by: elbaum%REED.BITNET@CUNYVM.CUNY.EDU (Daniel Elbaum) Posting-number: Volume 2, Issue 99 Archive-name: kernel/dirk.1 This is dirk, a program which presents system resource information intuitively and windowlessly. The color of your screen background and foreground are periodically adjusted according to the proportion of free memory in the system and the number of ready tasks which are waiting. Detach it using run or arun, and relax. [uuencode executable here; it's small. ..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: # dirk.c # dirk.doc # dirk.uu # This archive created: Wed Dec 28 12:07:50 1988 cat << \SHAR_EOF > dirk.c /* 9/88 DIRK v0.01 -- Tune workbench colors to system performance Copyright (C) 1988 by Daniel Elbaum This software is freely redistributable provided: the three files which comprise it (dirk, dirk.c, dirk.doc) remain intact; that all copyright notices contained in any of the aforementioned files remain intact; and that no fee beyond reasonable remuneration for collation and distribution be charged for use and/or distribution. */ #include <exec/types.h> #include <exec/exec.h> #include <exec/execbase.h> #include <intuition/intuition.h> #define IREV (1) #define GREV (1) #define CMAX (15) /* max val for color component (hardware) */ /* seems odd, but really makes sense, since background has 2 color components, and detail has 3. These limits are to ensure enough contrast for readability. */ struct g_flags { int gran; /* granularity of mapping from #tasks to pen brightness */ int bsmax; /* constant total saturation of background (red+blue) */ int dsmax; /* maximum detail brightness (if high, text glares) */ int dsmin; /* darkest gray for detail pen */ int dstog; /* set to activate task watch */ int bstog; /* set to activate memory watch */ int intvl; /* number of ticks between updates */ int bd_r; /* base detail pen red component */ int bd_g; /* base detail pen green component */ int bd_b; /* base detail pen blue component */ } g_f; /* initialized in getargs() */ typedef struct IntuitionBase * t_ib; typedef struct GfxBase * t_gb; t_ib IntuitionBase; t_gb GfxBase; extern struct ExecBase *SysBase; struct IntuiMessage *GetMsg(); void *OpenLibrary(); ULONG AvailMem(); main(c, v) char **v; { register i, active=1; register ULONG tm; ULONG fu1, fu2; register struct Screen *sp; register struct Window *wp; register struct IntuiMessage *msg=NULL; struct Window *getwin(); ULONG totmem(); if (getargs(++v, &g_f)<0) exit(10); if (!(IntuitionBase=(t_ib)OpenLibrary("intuition.library", IREV))) exit(99); if (!(GfxBase=(t_gb)OpenLibrary("graphics.library", GREV))){ CloseLibrary(IntuitionBase); exit(98); } if (!(sp=IntuitionBase->FirstScreen)){ CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); exit(20); } for (; sp; sp=sp->NextScreen) if (!strcmp(sp->Title, "Workbench Screen")) break; if (!sp) { CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); exit(22); } if (!(wp=getwin())) exit(FALSE); if (g_f.bstog) tm=totmem(); for (;;) { if (!msg) msg=GetMsg(wp->UserPort); if (msg){ ReplyMsg(msg); if (msg->Class==ACTIVEWINDOW) active=1; if (msg->Class==INACTIVEWINDOW) active=0; if (msg->Class==CLOSEWINDOW){ CloseWindow(wp); CloseLibrary(IntuitionBase); CloseLibrary(GfxBase); exit(0); } msg=NULL; } if (active) WaitTOF(); else{ for (i=0; i<g_f.intvl; ++i) if (msg=GetMsg(wp->UserPort)) break; else WaitTOF(); } setcolor(sp, tm); } /* NOTREACHED */ } setcolor(sp, tm) register struct Screen *sp; ULONG tm; { register f, db, t; int tr, tw; int r, g, b; ULONG mu, fm; ULONG amtfree(); if (g_f.dstog){ tqlen(&tr, &tw); f=CMAX-(tr+tw)/g_f.gran; if (f<g_f.dsmin) f=g_f.dsmin; if (f>g_f.dsmax) f=g_f.dsmax; if ((t=tr/g_f.gran+f)>CMAX) t=CMAX; } if (g_f.bstog){ fm=amtfree(); mu=tm-fm; db=(mu*g_f.bsmax)/tm; } /* Detail and Block pens seem to be reversed */ if ((r=t+g_f.bd_r)>CMAX) r=CMAX; if ((g=t+g_f.bd_g)>CMAX) g=CMAX; if ((b=t+g_f.bd_b)>CMAX) b=CMAX; Forbid(); if (g_f.dstog) SetRGB4(sp->ViewPort, sp->BlockPen, r, g, b); if (g_f.bstog) SetRGB4(sp->ViewPort, sp->DetailPen, db, 0, g_f.bsmax-db); Permit(); } /* Find the total amount of system memory by cruising the master list. */ ULONG totmem() { register ULONG tu, tl, tm=0; register struct Node *n; register struct MemHeader *m; Disable(); for (n=SysBase->MemList.lh_Head; n->ln_Succ; n=n->ln_Succ){ m=(struct MemHeader *)n; tu=(ULONG)m->mh_Upper; tl=(ULONG)m->mh_Lower; tm+=tu-tl; } Enable(); return(tm); } /* Hunt up all ready tasks and waiting tasks; put their respective counts in r and w. */ tqlen(r, w) int *r, *w; { register tr=0, tw=0; register struct Task *t; Disable(); t=SysBase->TaskReady.lh_Head; for (tr=0; t->tc_Node.ln_Succ; t=t->tc_Node.ln_Succ) tr++; t=SysBase->TaskWait.lh_Head; for (tw=0; t->tc_Node.ln_Succ; t=t->tc_Node.ln_Succ) tw++; Enable(); *r=tr; *w=tw; return(tr+tw); } /* Place amt of free chip mem into cm; place amt of free fast mem into fm. */ ULONG amtfree() { ULONG c, f; Forbid(); c=AvailMem(MEMF_CHIP); f=AvailMem(MEMF_FAST); Permit(); return(c+f); } /* Just give me a window and don't make me put endless initializations into main() or global space, okay? */ #define MINWD (120) #define MINHT (10) #define MAXWD MINWD #define MAXHT MINHT struct Window * getwin() { struct NewWindow nw; struct Window *Window; nw.LeftEdge = 640/2-MAXWD/2; nw.TopEdge = 0; nw.Width = MAXWD; nw.Height = MAXHT; nw.DetailPen = 0; nw.BlockPen = 1; nw.Flags = WINDOWCLOSE|WINDOWDRAG|WINDOWDEPTH|BORDERLESS; nw.IDCMPFlags = CLOSEWINDOW|ACTIVEWINDOW|INACTIVEWINDOW; nw.FirstGadget = NULL; nw.CheckMark = NULL; nw.Title="Dirk"; nw.Type=WBENCHSCREEN; nw.Screen = NULL; nw.BitMap = NULL; nw.MinWidth = MINWD; nw.MinHeight = MINHT; nw.MaxWidth = MAXWD; nw.MaxHeight = MAXHT; if (!(Window = OpenWindow(&nw))) { printf("can't open window"); return((struct Window *)NULL); } else return(Window); } getargs(v, f) char **v; struct g_flags *f; { register out=0; f->gran = 4; /* good when 4-5 processes are in background */ f->bsmax = 14; /* good background--nor too bright nor dark */ f->dsmax = 12; /* takes some glare out of text */ f->dsmin = 8; /* readable even at near-red */ f->dstog = 1; /* task watcher on by default */ f->bstog = 1; /* memory watcher on by default */ f->intvl = 180; /* default delay is 3 seconds */ f->bd_r = 0; /* increment for detail pen red */ f->bd_g = 0; /* increment for detail pen green */ f->bd_b = 0; /* increment for detail pen blue */ while (*v){ if (**v=='-') { if (!(*v)[1]) return(usage()); while (*++*v){ switch(**v){ case 'g': f->gran=atoi(++*v); ++out; break; case 'b': f->bsmax=atoi(++*v); ++out; break; case 'h': f->dsmax=atoi(++*v); ++out; break; case 'l': f->dsmin=atoi(++*v); ++out; break; case 'i': f->intvl=atoi(++*v); ++out; break; case 't': f->bstog=0; break; case 'm': f->dstog=0; break; default: return(usage()); } /* switch (**v) */ if (out) {++v; break;} } /* while (*(++*v)) */ if (!out) ++v; else out=0; } /* if (**v=='-') */ else if (**v=='+') { if (!(*v)[1]) return(usage()); while (*++*v){ switch(**v){ case 'r': f->bd_r=atoi(++*v); ++out; break; case 'g': f->bd_g=atoi(++*v); ++out; break; case 'b': f->bd_b=atoi(++*v); ++out; break; default: return(usage()); } /* switch (**v) */ if (out) {++v; break;} } /* while (*++*v) */ if (!out) ++v; else out=0; } /* else if (**v=='+') */ else { return(usage()); } } /* while (*v) */ limit(f); if (f->gran==0) f->gran=1; /* special case for x/gran */ return(0); } #define LFIX(x, l) if (x<l) x=l #define HFIX(x, h) if (x>h) x=h /* Make sure all members of *f are in bounds. */ limit(f) struct g_flags *f; { int maxint=(1<<sizeof(maxint))-1; LFIX(f->gran, 0); HFIX(f->gran, maxint); LFIX(f->bsmax, 0); HFIX(f->bsmax, CMAX); LFIX(f->dsmax, 0); HFIX(f->dsmax, CMAX); LFIX(f->dsmin, 0); HFIX(f->dsmin, CMAX); LFIX(f->intvl, 0); HFIX(f->intvl, maxint); LFIX(f->bd_r, 0); HFIX(f->bd_r, CMAX); LFIX(f->bd_g, 0); HFIX(f->bd_g, CMAX); LFIX(f->bd_b, 0); HFIX(f->bd_b, CMAX); } usage() { printf("dirk v0.01 copyright (c) 1988 Daniel Elbaum/Amaranth Software\n"); printf("\nUsage: dirk [-t|m] [-gN] [-bN] [-hN] [-lN] [-iN]]\n"); printf("t\ttrack tasks only\n"); printf("m\ttrack memory only\n"); printf("g (4)\tgranularity of task mapping (small for few tasks)\n"); printf("b (14)\tbackground saturation\n"); printf("h (12)\tmaximum detail saturation\n"); printf("l (8)\tminimum detail saturation\n"); printf("i (180)\tinterval in ticks (60 or 50 per second)\n"); printf("\n\t[+rN] [+gN] [+bN]\n"); printf("r (0)\tamount by which to redden the pen\n"); printf("g (0)\tamount by which to greeen the pen\n"); printf("b (0)\tamount by which to bluen the pen\n"); printf("\n"); return(-1); } SHAR_EOF cat << \SHAR_EOF > dirk.doc 9/88 DIRK v0.01 -- Tune workbench colors to system performance ----------------- Copyright (C) 1988 by Daniel Elbaum This software is freely redistributable provided that: the three files which comprise it (dirk, dirk.c, dirk.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: run dirk [-t|m] [-gN] [-bN] [-hN] [-lN] [-iN]] [+rN] [+gN] [+bN] Parameters: Option Default Effect --------------------------------------------------------------------- - t track tasks only m track memory only g 4 granularity of task mapping (small for few tasks) b 14 background saturation h 12 maximum detail saturation l 8 minimum detail saturation i 180 interval in ticks (60 or 50 per second) + r 8 base value for red component of detail pen g 8 base value for green component of detail pen b 8 base value for blue component of detail pen If you like the program, you may eventually want to start it from your startup-sequence, so you might want to dirk around with the options before deciding on a command line to use. Here they are. The -t option enables task tracking only. The background color is not affected. The -m option complements the -t option; only memory tracking is turned on. The detail pen color is not affected. The following command line options require counts. The valid range of the count varies from option to option. All color counts should be between 0 and 15; other counts must be between 0 and 65535. Granularity, set with -gN, is the sensitivity with which detail pen color responds to the instantaneous number of ready tasks. Workable values lie between 1 and 8. The background saturation argument, -bN, determines the brightness of the screen, which remains constant as hue varies. N is best set between 4 and 14. Maximum detail saturation (-hN) is a limit on the brightness of the detail pen. A value of 8 to 14 (14 brighter) can keep detail from glaring. The valid range is 0-15. Minimum detail saturation, -lN (ell not one) is a floor on the brightness of the pen, to maintain good contrast to the background. For a light background, l should be at least 8. The interval (-iN) is the number of ticks to wait between data retrieval expeditions. A tick is 1/60th of a second in the US, and 1/50 in Europe. If N is given as 0, the research and reporting are done constantly, and system performance slows slightly but noticeably. 180 corresponds to ~3 seconds, and is probably a good functional maximum. The + arguments specify the detail pen's basic color. As the number of tasks increases, the pen becomes dimmer, and as the proportion of active tasks increases, the pen becomes yellower. -rN sets the red component (0-15), -gN sets the green, and -bN sets the blue. It's worth experimenting to find a combination which provides good contrast. It all sounds confusing but once you run the program and see what it does, the meaning of the command line options will hopefully fall into place. ----------------- Description: The purpose of this program is to present key system information to the user without cluttering up the display. The workbench background color changes from blue through purple to red as the amount of free memory decreases. The workbench detail color (the color of text and Workbench window borders) changes from bright white to gray as the number of system tasks increases. Further, the yellow content of this color is increased according to the number of active tasks. On a newly-booted vanilla system, borders are white and the background is close to the standard Workbench blue. As you use the system, calling up programs and creating files on the RAMdisk, the screen takes on an increasingly reddish hue. When memory is nearly full, the background is completely red. Similarly, as tasks are added, the borders dim slightly. In other words, after you set up dmouse, conman, snipit, or whatever to run in the background, the detail color fades, eventually to grey. If many background tasks are active rather than just waiting around for an interrupt or message, the grey will be tinted yellow. With dirk running in the background, you always have a rough idea of how much memory is available and how busy the system is, without hunting around for the window of your favorite resource-tracking gizmo. ----------------- Signature and self-promo: If you want to send me money for dirk, 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 UUCP: ...!tektronix!reed!elbaum ARPA: elbaum@reed.EDU SHAR_EOF cat << \SHAR_EOF > dirk.uu begin 644 dirk M```#\P`````````'``````````8````"```"10``"54````6````-@````P`" M```*```#Z0````).^0```````````^P````!`````@````(````````#\@``H M`^H```)%`"$``0``````````````````````````____________________' M____________````````````````````````````````````````````````W M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````'-X`````````````````````````````````````````````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``````````````````````````````````````````````````!M871H:65E= M961O=6)B87,N;&EB<F%R>0``````````````````````````````````````H M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M````````````````````````````````````````````````````````````` M``````````````````````````````````````````````````/L`````0``P M``(```'P`````````_(```/I```)52//````,"/`````."/(````/"QY````[ M!"/.````!)/)3J[^VBA`2JP`K&<``0AA``(RD<@@+`"LY8@@,`@0Y8A(YP`PJ M1?D```#`1_D```!`($!P`!`80C`(`";((#D````X('D````\0_`(``PA`"!2> MR/_Z0BD``1(89UP,`0`@9_8,`0`)9_`FR@P!`")G%!3!$AAG0@P!`"!G!!3!` M8/)"&F#4$AAG,`P!`")G\@P!`"IF(!(8#`$`3F<&#`$`;F8$<@I@#@P!`$5GB M!@P!`&5F`G(;%,%@S$(20I,@/````#R0BT:`Y(A,WPP`2'D```!`+P!.N0``J M`!PCP````!@CP````"1.N0```"PCP````!PCP````"`CP````"@CP````"Q.[ MN0``']QP`"YY````,$YU80`!+&$``18CP````#0O`$*G)$`@*@`D9Q`L>0``A M``@@0"(H``!.KO^"0?D```:,#!```&=0(@@D/````^TL>0````A.KO_B#(``> M````9T0CP````!@CP````!PCP````"`CP````"0CP````"@CP````"PI0`"<. M*4``H.6(($`I:``(`*1.N0``']QP`&`$("\`!$JY````-&<2(CD````8:PHL` M>0````A.KO_<+GD````P+P`L>0````0@.0````AG!B)`3J[^8B`Y````#&<&E M(D!.KOYB(#D````09P8B0$ZN_F)*N0```#1G#DZN_WPB>0```#1.KOZ&(!].1 M=4CG`08N/``#@`<L>``$3J[_E$S?8(!P9&``_WI![`!<3J[^@$'L`%Q.KOZ,@ M3G5#^@`2<`!.KOW8(\`````(9\!.=61O<RYL:6)R87)Y`$YQ3E;_X$CG'SQ%B M^0```*Q'^0``(%I)^0```>@Z?``4?`%V`$AY```!P%BN``PO+@`,3KD```?0B M4$]*@&P```I(>``*3I-83TAX``%(>0``#KY.N0```,!03RB`(!1F```*2'@`Q M8TZ36$](>``!2'D```ZL3KD```#`4$\CP````>P@.0```>QF```0+Q1.DEA/C M2'@`8DZ36$\@5"@H`#QF```8+Q1.DEA/+SD```'L3I)83R\-3I-83TJ$9P``' M)DAY```.FB!$+R@`%DZY```A6%!/2H!F```&8```""!$*!!@UDJ$9@``&B\4` M3I)83R\Y```@!*@V<`1 M`%PO`TZY````F%A/(#4X``R```0``&8```1\`2`U.``,@``(``!F```$?``@_ M-3@`#(````(`9@``(B\%3KD`````6$\O%$Z26$\O.0```>Q.DEA/0J=.DUA/\ M=@!*AF<```Q.N0````!@```T?@!!^0```<"^J``8;```)"!%+R@`5DZY````T MA%A/)@!G```&8```#$ZY`````%*'8-`O+O_T+P1.N0``!(!03V``_SA,WSSX= M3EY.=4Y6_]A(YQ\\1?D```'`*BX`""`J`!!G``!F2&[_[$AN__!.N0``!DQ0I M3W`/(B[_\-*N_^PO$B\!3KD``"->(A]83Y"!)@"VJ@`,;```!B8J``RVJ@`(R M;P``!B8J``@O$B\N__!.N0``(UX@'UA/T(,H``R$````#V\```1X#R`J`!1GA M``!$3KD```:T*D!P`"`N``QR`"(-D($M0/_<0?D```'`+R@`!"\N_]Q.N0``( M(NP@'UA/+RX`#"\`3KD``"->(!]83RA`(`30J@`<)D`@"PR`````#V\```8VS M?``/(`30J@`@+@`,AP````]O```$?@\@!-"J`"0L``R&````#V\```1\#TZYM M````("`J`!!G```H+P8O!R\+($40*`%+<@`2`"\`(`4&@````"PO`$ZY````7 M$-[\`!0@*@`49P``,"`J``0B#)"!+P!"IR\,($40*`%*<@`2`"\`(`4&@```9 M`"PO`$ZY````$-[\`!1.N0```#!,WSSX3EY.=4Y6_^Q(YQ\`>@!.N0`````@C M>0````0F*`%"($,@$&<``!PH`R!$+B@`&"!$+"@`%"`'D(;:@"!#)A!@WDZYB M````$"`%3-\`^$Y>3G5.5O_T2.<<`'H`>`!.N0`````@>0````0F*`&6>@`@^ M0R`09P``"E*%($,F$&#P('D````$)B@!I'@`($,@$&<```I2A"!#)A!@\$ZYV M````$"!N``@@A2!N``P@A"`%T(1,WP`X3EY.=4Y6__A(YQ@`3KD````@2'@`= M`DZY````<%A/*`!(>``$3KD```!P6$\F`$ZY````,"`$T(-,WP`83EY.=4Y64 M_\PO`SU\`03_T$'N_]!":``"0>[_T#%\`'@`!$'N_]`Q?``*``9![O_00B@`^ M"$'N_]`1?``!``E![O_0(7P```@.``Y![O_0(7P`#`(```I![O_00J@`$D'NX M_]!"J``60?D```Z40^[_T"-(`!I![O_0,7P``0`N0>[_T$*H`!Y![O_00J@`X M(D'N_]`Q?`!X`"9![O_0,7P`"@`H0>[_T#%\`'@`*D'N_]`Q?``*`"Q(;O_0[ M3KD````46$\F`&8``!A(>0``#H).N0``&\!83W``)A].7DYU(`-@]F#T3E;_4 M_$CG'#`F+@`,*"X`"$7Y```.T$?Y```+U'H`($,@O`````0@0R%\````#@`$_ M($,A?`````P`""!#(7P````(``P@0R%\`````0`0($,A?`````$`%"!#(7P`. M``"T`!@@0T*H`!P@0T*H`"`@0T*H`"0@1"`09P`"+"!$(%`0$`P``"UF``%.> M($0@4!`H``%F```,3I-,WPPX3EY.=2!$4I`@4!`09P`!&B!$(%`0$$B`2,`,F M@````&)M``#P!(````!B#(`````2;@``X.6`0?D```BN(G`(`$[1```)$@``Z M"7X```E^```)?@``"7X```C^```)*```"50```E^```)?@``"3X```ET```)+ M?@``"7X```E^```)?@``"7X```E^```):@`````@1%*0+Q!.DEA/($,@@%*%Z M8```="!$4I`O$$Z26$\@0R%```12A6```%X@1%*0+Q!.DEA/($,A0``(4H5@, M``!(($12D"\03I)83R!#(4``#%*%8```,B!$4I`O$$Z26$\@0R%``!A2A6``L M`!P@0T*H`!1@```2($-"J``08```"$Z38`#^YDJ%9P``"%B$8```!F``_MY*? MA68```A8A&````1Z`&```,X@1"!0$!`,```K9@``NB!$(%`0*``!9@``"$Z3" M8`#^I"!$4I`@4!`09P``BB!$(%`0$$B`2,!.N0``))0```H"````<@``"A@`L M``!G```*+@```&(````````*1"!$4I`O$$Z26$\@0R%``!Q2A6```#0@1%*0L M+Q!.DEA/($,A0``@4H5@```>($12D"\03I)83R!#(4``)%*%8```"$Z38`#^Q M($J%9P``"%B$8```!F``_VY*A68```A8A&````1Z`&````A.DV``_?A@`/W0O M+P-.N0``"I983R!#(!!F```*($,@O`````%P`&``_=1.5O_\2.<8/"8N``@T6 M?``D-GP`(#A\`!PZ?``8>`\@0R`0;```!B!#0I`@0R`0L(1O```&($,@A"!#W M("@`!&P```@@0T*H``0@0R`H``0,@`````]O```,($,A?`````\`!"!#("@`4 M"&P```@@0T*H``@@0R`H``@,@`````]O```,($,A?`````\`""!#("@`#&P`4 M``@@0T*H``P@0R`H``P,@`````]O```,($,A?`````\`#"`U.`!L```&0K4XW M`"`U.`"PA&\```8KA#@`(#0X`&P```9"M#@`(#0X``R`````#V\```HIO```. M``\X`"`S.`!L```&0K,X`"`S.``,@`````]O```*)[P````/.``@,C@`;```P M!D*R.``@,C@`#(`````/;P``"B6\````#S@`3-\\&$Y>3G5.5@``+PI%^0``! M&\!(>0``#D).DEA/2'D```X.3I)83TAY```-^DZ26$](>0``#>1.DEA/2'D`@ M``VH3I)83TAY```-B$Z26$](>0``#61.DEA/2'D```U`3I)83TAY```-#DZ2C M6$](>0``#/A.DEA/2'D```S,3I)83TAY```,H$Z26$](>0``#'9.DEA/2'D`2 M``QT3I)83W#_)%].7DYU"@!B("`@*#`I"6%M;W5N="!B>2!W:&EC:"!T;R!B% M;'5E;B!T:&4@<&5N"@!G("`@*#`I"6%M;W5N="!B>2!W:&EC:"!T;R!G<F5E; M96X@=&AE('!E;@H``'(@("`H,"D)86UO=6YT(&)Y('=H:6-H('1O(')E9&1EF M;B!T:&4@<&5N"@``"@E;*W).72!;*V=.72!;*V).70H``&D@*#$X,"D):6YTN M97)V86P@:6X@=&EC:W,@*#8P(&]R(#4P('!E<B!S96-O;F0I"@``;"`@("@XE M*0EM:6YI;75M(&1E=&%I;"!S871U<F%T:6]N"@``:"`@*#$R*0EM87AI;75M8 M(&1E=&%I;"!S871U<F%T:6]N"@``8B`@*#$T*0EB86-K9W)O=6YD('-A='5R7 M871I;VX*``!G("`@*#0I"6=R86YU;&%R:71Y(&]F('1A<VL@;6%P<&EN9R`H( M<VUA;&P@9F]R(&9E=R!T87-K<RD*``!M"71R86-K(&UE;6]R>2!O;FQY"@``+ M=`ET<F%C:R!T87-K<R!O;FQY"@`*57-A9V4Z(&1I<FL@6RUT?&U=(%LM9TY=C M(%LM8DY=(%LM:$Y=(%LM;$Y=(%LM:4Y=70H`9&ER:R!V,"XP,2!C;W!Y<FEGN M:'0@*&,I(#$Y.#@@1&%N:65L($5L8F%U;2]!;6%R86YT:"!3;V9T=V%R90H`= M`&-A;B=T(&]P96X@=VEN9&]W`$1I<FL``%=O<FMB96YC:"!38W)E96X``&=R= M87!H:6-S+FQI8G)A<GD``&EN='5I=&EO;BYL:6)R87)Y`$Y6__A(YQP`)BX`; M"'H`*`4@0Q`0#```(&8```92@V#P($,0$`P``"UF```&4H-Z`2!#$!`,```PF M;0``+"!#$!`,```Y;@``('#0(@32@20!Y8+2@B!#4H,4$$B"2,+2@M"!*`!@E MRDJ%9P``"B`$1(!@```$(`1,WP`X3EY.=4YQ3E;_]$CG'P`F+@`(*BX`#$'YJ M```%]"`(!H````!_*``@1$(0#(.`````9@``6"`%3KD``"24```/I@````@`R M``^V````"@``#\`````0````````#\I!^0``'-(@"$S?`/A.7DYU0?D``!S&% M(`A@[D'Y```<O"`(8.1!^0``'+0@"&#:2H-L```(<`%@```$0H`N`&<```@@U M`T2`)@`O!2\#3KD``"/^(!]83RP`+P4O`TZY```C7B`?6$\F`"!Y```!\-'&H M4X0B1!*02H-NSDJ'9P``"E.$($00O``M(`1@`/]\3E;_R$CG'P`J+@`0#(4`/ M```@;P``!'H&0?D``!RL0^X`""`I```B*0`$3KD``!^*2H!L```(<`%@```$I M0H`N`&<``"!![@`(("@``"(H``1.N0``'WI![@`((4```"%!``1![@`(+R@`P M!"\H``!.N0``'0103T'N_]@A0```(4$`!$'N_]A#[@`(("D``"(I``1.N0``- M'V)![O_@(4```"%!``1!^0``!?0F"'P`O(5L``".0?D``!RD0^[_X"`I```BC M*0`$3KD``!\:0>[_X"%````A00`$0>[_X"\H``0O*```3KD``!T$4$\O`2``9 M(A].N0``'\(H``8``#`@0U*#$(`@!$ZY```?LD'N_^`O`2\`("@``"(H``0M[ M7__(+5__S$'N_\A.N0``'V)![O_@(4```"%!``12AF``_W`@0U*#0A!P/T'YJ M```%]"(()`5$@M*"T($F`$AY```%]"\#3KD``"&`4$]3@R!#$+P`+D'Y```<9 MG$/N_]@@*0``(BD`!$ZY```?,B\!+P!.N0``'0103T'N_]`A0```(4$`!$'YY M```<E$/N_]`@*0``(BD`!$ZY```?&D'N_]@O`2\`("@``"(H``0M7__(+5__A MS$'N_\A.N0``'V(O`2``(A].N0``'\(H``8``#!3@R!#$(!![O_00^[_V"-H[ M`````"-H``0`!$'Y```<C$/N_]@@*0``(BD`!$ZY```?BDJ`;@#_3DJ'9P``" M"E.#($,0O``M(`-,WP#X3EY.=4Y6_\A(YQ\@+BX`$`R'````(&\```1^!D'Y: M```<A$/N``@@*0``(BD`!$ZY```?BDJ`;```"'`!8```!$*`)$`@"F<``"!!, M[@`(("@``"(H``1.N0``'WI![@`((4```"%!``1X`$'Y```<?$/N``@@*0``V M(BD`!$ZY```?BDJ`9P``CD'Y```<=$/N``@@*0``(BD`!$ZY```?BDJ`;0``` M*D'Y```<;$/N``@@*0``(BD`!$ZY```?,D'N``@A0```(4$`!%*$8+I!^0``] M'&1#[@`(("D``"(I``1.N0``'XI*@&P``"I!^0``'%Q#[@`(("D``"(I``1.R MN0``'QI![@`((4```"%!``13A&"Z0>X`""\H``0O*```3KD``!T$4$]![O_87 M(4```"%!``1![O_80^X`""`I```B*0`$3KD``!]B0>[_X"%````A00`$0?D`U M``7T)@AZ`+J';```CD'Y```<5$/N_^`@*0``(BD`!$ZY```?&D'N_^`A0```= M(4$`!$'N_^`O*``$+R@``$ZY```=!%!/+P$@`"(?3KD``!_"+``&```P($-2] M@Q"`(`9.N0``'[)![O_@+P$O`"`H```B*``$+5__R"U?_\Q![O_(3KD``!]B\ M0>[_X"%````A00`$4H5@`/]P($-2@Q"\`$5*A&T```X@0U*#$+P`*V```!`@, M0U*#$+P`+2`$1(`H`'H"2H5M```R2'@`"B\$3KD``"/^(!]83RP`!@``,"!#; MT<40@$AX``HO!$ZY```C7B@?6$]3A6#*($-"*``#<#E!^0``!?0B""0'1(+2T M@M"!)@!(>0``!?0O`TZY```A@%!/4X,@0Q"\`"Y!^0``'$Q#[O_8("D``"(I= M``1.N0``'S(O`2\`3KD``!T$4$]![O_0(4```"%!``1!^0``'$1#[O_0("D`J M`"(I``1.N0``'QI![O_8+P$O`"`H```B*``$+5__R"U?_\Q![O_(3KD``!]BR M+P$@`"(?3KD``!_"+``&```P4X,@0Q"`0>[_T$/N_]@C:``````C:``$``1!) M^0``'#Q#[O_8("D``"(I``1.N0``'XI*@&X`_TX@"F<```I3@R!#$+P`+2`#6 M3-\$^$Y>3G5.5O_T2.<8`"@N`!!!^0``'#1#[@`(("D``"(I``1.N0``'XI*O M@&P``!A![@`(("@``"(H``1.N0``'WI@```.0>X`""`H```B*``$0>[_]"%`O M```A00`$0?D``!PL0^[_]"`I```B*0`$3KD``!^*2H!N```@0?D``!PD0^[_6 M]"`I```B*0`$3KD``!^*2H!L```B+P1![@`(+R@`!"\H``!.N0``$G+>_``,A M3-\`&$Y>3G4O!$'N``@O*``$+R@``$ZY```0--[\``PF`"\#2'D```7T3KD`8 M`"&`4$]*A&\``"Q!^0``!?0F""!#$!!G```&4H-@]%.#($,0$`P``#!F```*H M($-3@T(08.Q!^0``!?0@"&"43E;_^$CG'``J+@`(>`!!^0``!?0F"$'Y```%$ M]"8(($40$&<``!`@15*%(D-2@Q*04H1@ZKBN``QL```0("X`$"!#4H,0@%*$` M8.H@0T(00?D```7T(`A,WP`X3EY.=4Y6__A(YQP`*"X`""\$3KD``"&46$\JP M`$'Y```%]"8((`52A;"N``QL```.("X`$"!#4H,0@&#H+P0O`TZY```A@%!/; M0?D```7T(`A,WP`X3EY.=4Y6``!(YQP`)BX`""@N``PJ+@`02H1O```8+P4OZ M!"\#3KD``!<TWOP`#"8`8```'DJ$;```&"\%(`1$@"\`+P-.N0``%M;>_``,Z M)@`@`TS?`#A.7DYU3E;_UDCG'SPF;@`02_D```]0*"X`#"8N``@@0Q`09P`#0 M2B!#$!!(@$C`3KD``"24```8'@```"4````````;.E*#-'P``"P\```$`"!#@ M$!`,```M9@``"'`!8```!$*`+4#_]"`N__1G```$4H,@0Q`02(!(P"A`(`P,R M@````#!G```&.'P`("!#$!`,```J9@``#E*#($0D4%B$8```.B!#$!`,```P` M;0``+B!#$!`,```Y;@``(B`*T(`B`.6!T($@0Q(02(%(P="!!(`````P)$!28 M@V#(("[_]&<```@@"D2`)$`@0Q`0#```+F8``%92@R!#$!`,```J9@``#E*#] M($0L$%B$8```/'P`($,0$`P``#!M```N($,0$`P``#EN```B(`;0@"(`Y8'04 M@2!#$A!(@4C!T($$@````#`L`%*#8,@@0Q`02(!(P$ZY```DE```&9H````EP M```9L@```&,``!G.````9```&>(```!E```:!@```&8``!HJ````9P``&DX`R M``!L```:5````&\``!IH````<P``&H````!U```:E````'@``!K>````6```# M`````!KR'7P`)?_60>[_UD(H``%![O_6*@A@``%*($0@$!U`_]9![O_60B@`C M`4'N_]8J"%B$8``!+DAX``H@1"\03I503RH`6(1@``$:+P8@1"\H``0O*```= M3KD``!)RWOP`#"H`4(0L/```!`!@``#V+P8@1"\H``0O*```3KD``!`TWOP`A M#"H`4(0L/```!`!@``#2+P8@1"\H``0O*```3KD``!6^WOP`#"H`4(0L/```9 M!`!@``"N4H-@`/[22'@`""!$+Q!.E5!/*@!8A&```)0@1"H06(1*A68```I!X M^0``'!PJ"&```'Q(>``*($0O$$Z54$\J`%B$8```:$AX`!`@1"\03I503RH`; M+@4@1Q`09P``+B!'$!`,``!!;0``'B!'$!`,``!:;@``$B!'$!!(@$C`!@``X M("!'$(!2AV#,6(1@```>2'@`$"!$+Q!.E5!/*@!8A&````I!^0``'!0J""\%K M3KD``"&46$^PAF\```@@1='&0A`O#"\*+P5.N0``%XC>_``,*@`@11`09P``H M#B!%4H4B2U)+$I!@[&````H@0R)+4DL2D%*#8`#\LD(33-\\^$Y>3G5.5@``E M+P,F+@`(+P-(;@`0+RX`#$ZY```7WM[\``P@`R8?3EY.=4Y6__PO`T'Y```!T M]"8(+P-(;@`0+RX`#$ZY```7WM[\``PO+@`(+P-.N0``(9183R\`2'@``2\#! M3KD``!W<WOP`$"8?3EY.=4Y6__PO`T'Y```!]"8(+P-(;@`,+RX`"$ZY```7# MWM[\``Q!^0``!I`@"`:`````("\`+P-.N0``(9183R\`2'@``2\#3KD``!W<( MWOP`$"8?3EY.=2U/3U!3+0``*&YU;&PI```[QYRA#))"*T05KQUXM8Q`````M M`````````````````$`D````````0"0```````!`)````````$`D````````0 M/_````````!`)````````$`D````````````````````````````````````W M````0"0```````!`)````````$`D```````````````````M3T]04RT``#@PO M,#`P,#`P```M,C$T-S0X,S8T.``R,#`P,#`P,#`P,``P,3(S-#4V-S@Y04)#! M1$5&1TA)2DM,34Y/4%%24U155E=865H``$Y6__Q![@`(("@``"(H``1.N0``, M'\(M0/_\("[__$ZY```?LDY>3G5.5O_X0>X`""\H``0O*```3KD``!T$4$]!E M[O_X(4```"%!``1![O_X0^X`""`I```B*0`$3KD``!^*2H!L```>0?D``!W20 M0^[_^"`I```B*0`$3KD``!]*3EY.=4'N__@@*```(B@`!&#N8.Q.5@``0?D`3 M`!W*0^X`""`I```B*0`$3KD``!]*+P$O`$ZY```=!%!/3KD``!^R3EY.=3_@T M````````/_````````!.<4Y6__1(YQ\@)BX`%"XN``@D;@`,?``O"B\N`!!.- MN0``(NP@'UA/*@`@0R`H``P@0Y"H``2PA6P``!(@0R`H``P@0Y"H``1@```$: M(`4H`"\$($,@*``:($/0J``$+P`O!TZY```A.-[\``S<A)J$WH0@0]FH`!0@' M0]FH``0@0R`H``@@0["H``1L```,($,B0R-H``0`""!#`"@``0`82H5G```F1 M+P-.N0``(D!83R@`#(3_____9@``#"`$3-\$^$Y>3G5@```&8```!F``_UHO6 M`TZY```B0%A/+PHO!DZY```C7B`?6$]@TDYQ2.?`P"`Y````#&8``#Y#^0``4 M!G1P`"QY````!$ZN_=@CP`````QF```B2.<!!BX\``.`!2QX``1.KO^43-]@% M@$AX`&1.N0``(%HL0$S?`P-.=4CG,`).N0``'LA,V``,3J[_LDS?0`Q.=4CG9 M,`).N0``'LA,V``,3J[_K$S?0`Q.=4CG,`).N0``'LA,V``,3J[_ODS?0`Q.L M=4CG,`).N0``'LA,V``,3J[_N$S?0`Q.=2\.3KD``![(3J[_Q"Q?3G5(YS`"X M3KD``![(3-@`#$ZN_]9,WT`,2H!F!'``8`AK!'`!8`)P_TYU+PY.N0``'LA.= MKO_<+%].=2\.3KD``![(3J[_XBQ?3G5"@4YU0H%.=4YQ3E8``"\*1?D``"&H; M0KD```D02'@"@$AY```&D$ZY```B)%!/2'@!`"\Y````&$*G3I+>_``,2'@!* M`"\Y````'$AX``%.DM[\``Q(>`$`+SD````@2'@``DZ2WOP`#"\N``PO+@`(J M3KD```*$4$]"ITZY```@6EA/)%].7DYU3E;__$CG$#!%^0``"1!'^0``(-1(0 M>0``!I!.DUA/0?D```:0(`@&@````"`O`$Z36$]!^0``!I`@"`:`````0"\`9 M3I-83R`29P``&B!2)A`@4B\H``@O$DZY````6%!/)(-@XB\N``A.N0```<18E M3TS?#`A.7DYU3G%.5O_\2.<8`"8N``@O`TZY```B0%A/0J<@0R`H`!0@0Y"H# M`!`O`"!#*!`O!$ZY````/-[\``P@0R\H``P@0R\H`!I.N0```%A03TAX`"`O= M`TZY```B)%!/(`1,WP`83EY.=4YQ3E8``"\N`!`O+@`(+RX`#$ZY```DV-[\` M``Q.7DYU3G$@;P`$(F\`"!`1L!AF```*2AEF]$*`3G42$4B!2,$0($B`2,"0& M@4YU(&\`!")O``@0V6;\("\`!$YU3G$@;P`$2AAF_)'O``13B"`(3G5.<4Y64 M__Q(YQ@`*"X`$&8```1X`4'Y```&D"`((BX`".N!T($F`&<``%)"IR!#(40`H M#"\H``Q.N0```$!03R!#(4``&B`H`!IG```P0J="IR!#(*X`#"\03KD````\] MWOP`#"!#(4``%")#(V@`%``0(`-,WP`83EY.=7``8/1.5@``+RX`#$*G+RX`^ M"$ZY```DJ-[\``Q.7DYU3E;_]$CG'B`F+@`(-'P`$'P`($,0*``82(!(P`*`1 M`````6<``'(@0R`H`!0@0Y"H``0J`"`R.`"PA6<``!I"IR`%D+(X`"\`($,OK M$$ZY````/-[\``P@0R\H``0@0R\H`!H@0R\03KD`````WOP`#"@`($.XJ``$) M9P``#'S_2H1L```$>``@!="$)8`X`"!#`BC__@`8($-"J``(($-"J``$(`9,T MWP1X3EY.=4Y6``!(Y_@`2FX`"&8``!Y*;@`,9@``%C`N``K`[@`.+4``"$S?= M`!].7DYU>`$D+@`(;```!D2"1(0F+@`,;```!D2#1(1"@#`"P,,R`DA"Q,-(& M0\+#TH)(04)!T(%*A&P```1$@"U```A,WP`?3EY.=4Y6```O`$IN``QF'"`N0 M``AK%H#N``YI$`*```#__RU```@@'TY>3G5(YWP`>@$@+@`(;`1$@$2%)@`BB M+@`,;`1$@42%*`$,@0`!``!L%$)`2$"`P30`,`.`P4A`,`)(0&`JXHCBB0R!0 M``$``&ST@,$"@```__\D`"\`+P1A`/\0(!]83[:`;`)3@B`"2H5L`D2`+4``' M"$S?`#X@'TY>3G5.5@``2.?X`$IN``QF'"`N``AK%H#N``YI$$)`2$`M0``([ M3-\`'TY>3G5X`2`N``AL!$2`1(0D`"(N``QL`D2!#($``0``;!!"0$A`@,$P\ M`H#!0D!(0&`L)@'BB.*)#($``0``;/2`P0*```#__R\`+P-A`/YZ(!]83[2`8 M9`*0@Y""1(!*A&P"1(`M0``(3-\`'TY>3G4@7R)8(@EG!K"89O9.T2!03M!.M M<4Y6__1(YQX`*BX`""P%*"X`#"8N`!!*@V\```P@1E*&$(13@V#P(`5,WP!XT M3EY.=4Y6__1(YQ\`+"X`$"XN``A*AFX```P@!TS?`/A.7DYU*BX`#"@'NH1ND M```X(`93@"(%TH`@`;"$;0``*"`&4X#:@"`&4X#8@"8&2H-O```0($53A2)$3 M4X02D%.#8.Q@```8)@9*@V\``!`@15*%(D12A!*04X-@["`'8)P```/L````9 M4P````$``"&\```@+```(!@``"`&```?]```('```"!Z```@C@``'^H``"!D3 M```>S@``'NH``![8```;Y```#V(``!`0```0V@``$7X``!&0```3Q@``%,H`+ M`!3<```6D```%J0``!;.```6Y@``%NX``!<F```73@``%WH``!N````;R```E M!A(```9@```&?````IH```*H```#`````P8```,N```#=````Y@```04```$Q M.```!(H```4@```!8`````(````(````#@```!H```!&````3````%X```!D2 M````W@```.X```#\```!`@```0X```$4```!&@```2````$N```!/@```5``J M``%T```!A@```8P```&2```!F````9X```&D```!R@```=(```':```!Y```7 M`?(```(````"#@```AP```(H```";@```-`````"```B-```(4H``"$F```@W MY```(,0``"!J```@1```'_H``!_D```@3@``'PX``!\@```?.```'U```!]HY M```??@``'Y```!^V```?Q@``'KP``!Z$```>L```'CX``!WZ```=@```';``M M`!UB```=)```'<(``!T6```=/@``'6X``!V>```=N@``&[(``!P&```71```4 M&OX``!NB```;]@``$;H``!,H```5!@``$9@``!3D```6E@``%W(``!$\```4^ M*```$2@``!(8```4%```%60``!#\```1Z@``$VX``!/H```5-@``$,@``!%>! M```2#```$[0``!1*```56```$*0``!$:```1Q```$Y```!0&```5$```$(8`< M`!+&```5]@``$&```!)0```2G@``$NP``!,*```34```%9P``!7>```6*@``' M%D@``!`$```4M```#_0``!28```/@@``&`H``!DN```/A@``#XX```^6```/) MH@``#Z@```^X```/P@``#\P``!!.```0Z@``$:@``!'8```2/@``$HP``!+:@ M```2^```$Q8``!,^```37```$]8``!3T```5)```%8H``!7,```6&```%C8`7 M`!9B```6@@``%ZH``!?*```7[```&`X``!@:```9,@``&3H``!E"```92@``I M&5(``!E:```98@``&6H``!ER```9>@``&8(``!F*```9E@``&?```!H4```:X M.```&G8``!KT```;&```&V@``!N2```;V@``"=X```?B```'O```"]P```4N; M```$N@``!.8```4^```#4````I0```*V```"T````O(```-$```#A@```Z8`+ M``1N```$I```!0@```=4```'M@``!^@```BD```(K@``"+(```BV```(N@``* M"+X```C"```(Q@``",H```C.```(T@``"-8```C:```(W@``".(```CF```(F MZ@``".X```CR```(]@``">(```GJ```)\@``"?X```IZ```+X@``"^P```OVA M```,````#`H```P4```,'@``#"@```PR```,/```#$8```Q0```,6@``#&0`J M``$F```!O`````8````#```BJ```(HX``"(````A`@```0@```#V````$P``^ M``0``"'>```A&```(+0```;(```&U@``!CX```:8```&#```!EH```7T```&- MX```!8H```:^```#S@```[P```1,```"U@```O@```*.````!`````4```6TW M```%Z@``!"P```1>`````@````8```>H```$!@````````/R```#Z0```!9(! MYS`"3.\`#@`0+'D````(3J[_T$S?0`Q.=0``+PXL>0````A.KO_*+%].=2\.> M+'D````(3J[_Q"Q?3G5(YS`"3.\`#@`0+'D````(3J[_ODS?0`Q.=0`````#7 M[`````0````!````2````#`````@````#`````````/P`````E]3965K````Q M````/`````)?3W5T<'5T`````"P````"7TEN<'5T```````<`````E]7<FETN M90````````````````/R```#Z0```#8O#BQY````!$ZN_X@L7TYU+PXL>0``5 M``1.KO^"+%].=2\.+'D````$3J[_?"Q?3G4O#BQY````!$ZN_W8L7TYU+PXL( M>0````1,[P`#``A.KO\Z+%].=0``+PXL>0````0B;P`(("\`#$ZN_RXL7TYU7 M+PXL>0````0B+P`(3J[_*"Q?3G4O#BQY````!"!O``A.KOZ,+%].=2\.+'D`C M```$(F\`"$ZN_H8L7TYU+PXL>0````0B;P`(3J[^8BQ?3G4O#BQY````!")O+ M``@@+P`,3J[]V"Q?3G4```/L````"P````$```#$````L````)P```"(````5 M=````%P```!$````-````"0````4````!`````````/P`````U]/<&5N3&EB" M<F%R>0```,`````$7T-L;W-E3&EB<F%R>0```````*P````#7U)E<&QY37-GM M````````F`````)?1V5T37-G`````(0````#7T%V86EL365M````````<```B M``)?1G)E94UE;0```%@````#7T%L;&]C365M````````0`````)?4&5R;6ET8 M`````#`````"7T9O<F)I9``````@`````E]%;F%B;&4`````$`````)?1&ES` M86)L90`````````````#\@```^D````,+PXL>0```>Q.KO[R+%].=4CG,`(@+ M;P`03.\`#P`4+'D```'L3J[^X$S?0`Q.=0`````#[`````(````!````(```5 M``0````````#\`````)?4V5T4D="-````!`````"7U=A:7143T8`````````" M`````_(```/I````"B\.+'D```'H(&\`"$ZN_[@L7TYU+PXL>0```>@@;P`(P M3J[_-"Q?3G4```/L`````@````$````8````!`````````/P`````U]/<&5NR G5VEN9&]W`````!0````#7T-L;W-E5VEN9&]W``````````````/R1 `` end size 14304 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.