[comp.sources.amiga] v89i075: a2ps - ascii to postscript converter

page@swan.ulowell.edu (Bob Page) (03/17/89)

Submitted-by: paolucci%snll-arpagw.llnl.gov@lll-lcc.llnl.gov (Sam Paolucci)
Posting-number: Volume 89, Issue 75
Archive-name: util/a2ps.1

Below you will find a utility program that I ported from the Unix
world to the Amiga.  It allows to print text files to PostScript
printers.  It is very useful for printing listings and AutoDocs as it
prints two logical pages per page, lines can be numbered, it will
print the file names with date and time.

[uuencoded executable included.  VERY nice for printing AutoDocs. ..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:
#	Makefile
#	Makefile.unix
#	README
#	a2ps.1
#	a2ps.1.cat
#	a2ps.1.ps
#	a2ps.c
#	a2ps.ps
#	a2ps.uu
# This archive created: Thu Mar 16 14:24:54 1989
cat << \SHAR_EOF > Makefile
CFLAGS	= +L -DHEADER_PS="S:a2ps.ps" -DANSIC

OBJS	= a2ps.o

a2ps:	$(OBJS)
	ln -o a2ps $(OBJS) -lc32



SHAR_EOF
cat << \SHAR_EOF > Makefile.unix
#
# Description: Makefile to construct and install a2ps. Don't forget
# to give your own values to define variables HEADER_PS and name of
# compiler (see OPTIONS).
#
# File: imag:/users/local/a2ps/Makefile
# Created: Mon Nov 29 14:05:39 1988 by miguel@imag (Miguel Santana)
# Version: 2.0
#

# Copyright (c) 1988, Miguel Santana, miguel@imag.imag.fr
#
# Permission is granted to copy and distribute this file in modified
# or unmodified form, whether for noncommercial or commercial use,
# provided (a) this copyright notice is preserved, (b) no attempt is
# made to restrict redistribution of this file, and (c) this file is
# not distributed as part of any collection whose redistribution is
# restricted by a compilation copyright.
#

D	=.

O	=.

I	=/users/local/a2ps

OPTIONS	=-DHEADER_PS="\"$I/a2ps.ps\"" -DUNIX -O

OBJS	      = a2ps.o

all:		a2ps install

a2ps:		a2ps.o
		@echo -n "Compiling and linking a2ps ... "
		@cc -o $D/xa2ps a2ps.o
		@echo "done"

install:;	@echo -n "Installing a2ps ... "
		@cp xa2ps $I/a2ps
		@cp a2ps.ps $I/a2ps.ps
		@echo "done"

clean:;		@rm -f $(OBJS)

a2ps.o:;
		cc -c $(OPTIONS) a2ps.c

SHAR_EOF
cat << \SHAR_EOF > README
This is a new version of a2ps, a program to format an ascii file for
printing in a postcript printer. As the copyright indicates, this
distribution can be freely redistributed.

Initial version was a shell program written by evan@csli (Evan
Kirshenbaum). It was very slow and contained many bugs. The new
version was written in C by Miguel Santana for improve speed 
execution and portability. New features and improvements have
been added.  I just did a simple port to the Amiga.


Some notes on the distribution:

    Installation is done by modifying and executing Makefile included
    in this distribution. You must give your own values to two variables:
    - HEADER_PS   with the included Makefile, a2ps will search S: for
		  the file a2ps.ps at execution time.
    - compiler	  compiler name, actually one of UNIX, SYSV, ANSIC. Turbo
		  C and Microsoft C are considered ANSIC compilers.  On the
		  Amiga compile with the ANSIC flag for either Manx C or
		  Lattice C compilers.
    a2ps has been successfully ported to Unix 4.3BSD, Unix SystemV, MSDOS,
    and AmigaDOS.


The a2ps distribution consists of the following files:

	README		This message
	Makefile
	a2ps.c		a2ps source
	a2ps.1		a troff manual (man file)
	a2ps.ps		postcript header used by a2ps

Decide where you want to keep these files and move it there.
Edit "Makefile" and change the definition of HEADER_PS (to
reflect the full pathname of a2ps.ps) and of compiler name.
To make a2ps do:

    make a2ps

To install it, do:

    make install

Format the manual entry using

    nroff -man a2ps.1


Please send problems and feedback to:

    miguel@imag.fr or miguel@imag.UUCP (uunet.uu.net!imag!miguel)

    Miguel SANTANA
    LGI
    IMAG-Campus
    BP 53X
    38041 Grenoble Cedex

For the Amiga version contact:

    paolucci@snll-arpagw.llnl.gov

    Dr. Samuel Paolucci
    1351 Roselli Dr.
    Livermore, CA 94550
SHAR_EOF
cat << \SHAR_EOF > a2ps.1
.\" @(#)a2ps.man.1 2.0 11/29/88
.\"
.TH A2PS 1L "November 29 1988"
.UC 4
.SH NAME
a2ps \- formats an ascii file for printing in a postscript printer;
very nice and compact format for program listings.
.SH SYNOPSIS
.B a2ps
[ -b ] [ -f ] [ -i ] [ -n ] [ -n{bfinrv} ] [ -r ] [ -v ] [
.B file1
] [
.B file2
] [...]
.SH DESCRIPTION
.B a2ps
formats files "file1", "file2", ... for printing in a postscript printer;
if no file is given,
.B a2ps
reads from the standard input.
Format used is very nice and compact: two pages on each physical page,
borders surrounding pages, headers with useful information (page number,
printing date, file name), line numbering, etc. Very useful to
archive listings of programs.
.PP
Options offered by
.B a2ps
are the following:
.TP 0.6i
.B -b
Force printing binary files. By default, binary files printing is
stopped before second page (see -nb option).
.TP 0.6i
.B -f
Fold lines too large to be printed inside the borders (default option).
Max size is actually 86 characters.
.TP 0.6i
.B -i
Interpret TAB, BS and FF characters (default option). TAB is replaced by
enough spaces to reach next tab stop while BS and FF have their meanings.
.TP 0.6i
.B -n
Output lines are preceded by line numbers, numbered sequentially from 1
(default option).
.TP 0.6i
.B -nb
Don't print binary files. To detect such a file we make use of a
very simple heuristic: if the first page of the file contains at
less 75% of non-printing characters, it's a binary file. First page
is always printed.
.TP 0.6i
.B -nf
Cut lines too large (don't fold).
.TP 0.6i
.B -ni
Don't interpret TAB, BS and FF characters. They will be printed
according to -v option.
.TP 0.6i
.B -nn
Don't number output lines.
.TP 0.6i
.B -nr
Sheet numbering (see -r option) must be continue for all files (don't
reset on new file).
.TP 0.6i
.B -nv
Replace non-printing characters by a space.
.TP 0.6i
.B -r
Reset sheet numbering for each new file (default option). Sheet numbering
is used to number physical pages (sheets printed) and is placed
in the bottom of each physical page. It differs from page numbering: logical
pages of file been printed.
.TP 0.6i
.B -v
Replace non-printing characters so that they are lisible and easy to identify
(default option). Control characters (ascii codes lower than 0x20) are
printed like ^X for ctrl-x; the delete character (hex 0x3f) is printed
as ^?. Non ascii characters (with the high bit set) are printed as M-
(for meta) followed by the character of the low 7 bits. TAB, BS and FF are
handled like non-printing characters if -ni option was taked.
.SH USAGE
.PP
.B a2ps
sends formatted file to standard output. User could redirect this output
to a file or pipe it directly to a print command, like lpr in UNIX:

.ti +0.5i
a2ps file1 > file2

.ti +0.5i
a2ps file1 | lpr -l
.PP
Don't forget
.B -l
option in last line, if you want that 
.B lpr
interprets your postscript program.
.PP
This filter must be used only with text files. Avoid specially output from
TeX, troff or any other text formatter.
.SH "SEE ALSO"
pprps(1L) tgrind(1) lpr(1)
.SH AUTHORS
Evan Kirshenbaum (evan@csli) for the initial version.
.br
Miguel Santana (miguel@imag.imag.fr) for 2.0 version.
SHAR_EOF
cat << \SHAR_EOF > a2ps.1.cat



                                                         A2PS(1L)



NAME
     a2ps - formats an ascii file for printing in a postscript
     printer; very nice and compact format for program listings.

SYNOPSIS
     a2ps [ -b ] [ -f ] [ -i ] [ -n ] [ -n{bfinrv} ] [ -r ] [ -v
     ] [ file1 ] [ file2 ] [...]

DESCRIPTION
     a2ps formats files "file1", "file2", ... for printing in a
     postscript printer; if no file is given, a2ps reads from the
     standard input.  Format used is very nice and compact: two
     pages on each physical page, borders surrounding pages,
     headers with useful information (page number, printing date,
     file name), line numbering, etc. Very useful to archive
     listings of programs.

     Options offered by a2ps are the following:

     -b    Force printing binary files. By default, binary files
           printing is stopped before second page (see -nb
           option).

     -f    Fold lines too large to be printed inside the borders
           (default option).  Max size is actually 86 characters.

     -i    Interpret TAB, BS and FF characters (default option).
           TAB is replaced by enough spaces to reach next tab
           stop while BS and FF have their meanings.

     -n    Output lines are preceded by line numbers, numbered
           sequentially from 1 (default option).

     -nb   Don't print binary files. To detect such a file we
           make use of a very simple heuristic: if the first page
           of the file contains at less 75% of non-printing char-
           acters, it's a binary file. First page is always
           printed.

     -nf   Cut lines too large (don't fold).

     -ni   Don't interpret TAB, BS and FF characters. They will
           be printed according to -v option.

     -nn   Don't number output lines.

     -nr   Sheet numbering (see -r option) must be continue for
           all files (don't reset on new file).

     -nv   Replace non-printing characters by a space.

     -r    Reset sheet numbering for each new file (default



                                                                1






A2PS(1L)



           option). Sheet numbering is used to number physical
           pages (sheets printed) and is placed in the bottom of
           each physical page. It differs from page numbering:
           logical pages of file been printed.

     -v    Replace non-printing characters so that they are lisi-
           ble and easy to identify (default option). Control
           characters (ascii codes lower than 0x20) are printed
           like ^X for ctrl-x; the delete character (hex 0x3f) is
           printed as ^?. Non ascii characters (with the high bit
           set) are printed as M- (for meta) followed by the
           character of the low 7 bits. TAB, BS and FF are han-
           dled like non-printing characters if -ni option was
           taked.

USAGE
     a2ps sends formatted file to standard output. User could
     redirect this output to a file or pipe it directly to a
     print command, like lpr in UNIX:

          a2ps file1 > file2

          a2ps file1 | lpr -l

     Don't forget -l option in last line, if you want that lpr
     interprets your postscript program.

     This filter must be used only with text files. Avoid spe-
     cially output from TeX, troff or any other text formatter.

SEE ALSO
     pprps(1L) tgrind(1) lpr(1)

AUTHORS
     Evan Kirshenbaum (evan@csli) for the initial version.
     Miguel Santana (miguel@imag.imag.fr) for 2.0 version.



















2



SHAR_EOF
cat << \SHAR_EOF > a2ps.1.ps
%!PS-Adobe-1.0
%%Creator: waterworks:paolucci (Sam Paolucci)
%%Title: stdin
%%CreationDate: Thu Jan 19 07:42:19 1989
%%DocumentFonts: Times-Roman Times-Italic Times-Bold Symbol Times-Roman
%%Pages: (atend)
%%EndComments
% lib/pscat.pro -- prolog for pscat (troff) files
% Copyright (C) 1985 Adobe Systems, Inc.
% Added defs for Manual Feed 
save /pscatsave exch def
/$pscat 50 dict def
$pscat begin
/fm [1 0 0 1 0 0] def
/xo 0 def /yo 0 def
/M /moveto load def
/R /show load def
/S {exch currentpoint exch pop moveto show}def
/T {exch currentpoint pop exch moveto show}def
/U {3 1 roll moveto show}def
/siz 0 def
/font 0 def
/Z {/siz exch def SF}def
/F {/font exch def SF}def
/SF{font 0 ne
    {catfonts font 1 sub get fm 0 siz put fm 3 siz neg put 
     fm makefont setfont}if}def
/BP{save/catsv exch def 0 792 translate 72 432 div dup neg scale 
  xo yo translate 0 0 moveto}def
/BPL{save/catsv exch def 72 8.25 mul 792 translate -90 rotate
  72 432 div dup neg scale xo yo translate 0 0 moveto}def
/EP{catsv restore showpage}def
/SetStTime{statusdict /manualfeedtimeout 120 put} def
/SetStatus{statusdict /manualfeed true put
   statusdict /product get (LaserWriter) eq 
   {version (23.0) eq  % Don't redefine EP if printer is not "Classic LW"
     {/EP {catsv restore
	 {statusdict /printerstatus get exec 16#22000000 and 0 eq{exit}if}loop
	 showpage}def}if }if}def
% definitions for PPROC callback functions
% each PPROC is called with the following number on the stack:
% pointsize charcode railmag pswidth pschar x y wid
/$pprocs 50 dict def
/fractm [.65 0 0 .6 0 0] def
% fractions
/PS1{gsave $pprocs begin
    /wid exch def pop pop pop pop pop /ch exch def /size exch def
    /pair $pprocs ch get def /cf currentfont def
    cf fractm makefont setfont
    0 .3 size mul 6 mul 2 copy neg rmoveto pair 0 get show rmoveto
    currentfont cf setfont (\244) show setfont
    pair 1 get show grestore wid .06 div 0 rmoveto end}def
$pprocs begin
8#34 [(1)(4)] def
8#36 [(1)(2)] def
8#46 [(3)(4)] def
end
% boxes
/PS2{gsave /wid exch def pop pop /char exch def pop pop pop /size exch def
    /len size 3.5 mul def % length of a side
    len 0 rlineto 0 len neg rlineto len neg 0 rlineto closepath
    char 3 eq {fill}{size 5 mul .07 mul setlinewidth stroke}ifelse
    grestore wid .06 div 0 rmoveto}def
/PS3/PS2 load def		% boxes are the same...
% circle
/PS4{gsave /wid exch def pop pop pop pop pop pop /size exch def
    wid .8333 mul size 2.5 mul neg rmoveto currentpoint	% center
    newpath size 1.8 mul 0 360 arc size .2 mul setlinewidth stroke
    grestore wid .06 div 0 rmoveto}def
/bb{$pprocs begin /wid exch def pop pop pop pop pop pop /size exch 6 mul def
    /s2 size 2 div def /s4 size 4 div def gsave 
    currentpoint newpath transform round exch round exch itransform translate
    size 16 div setlinewidth 2 setlinejoin 0 setgray}def
$pprocs begin
/mrr{moveto rlineto rlineto}def
/be{stroke grestore wid .06 div 0 rmoveto end}def
end
% leftfloor
/PS6 {bb s4 0 0 size s4 size -.8 mul mrr be}def
% rightfloor
/PS7 {bb s4 neg 0 0 size s4 size -.8 mul mrr be}def
% leftceil
/PS8 {bb s4 0 0 size neg s4 size .2 mul mrr be}def
% rightceil
/PS9 {bb s4 neg 0 0 size neg s4 size .2 mul mrr be}def
% boldvert
/PS5 {bb 0 0 0 size neg s4 size .2 mul mrr be}def
% box rule
/PS32 {bb /sw size 24 div def sw 2 div size 4.5 div moveto
       0 size neg rlineto sw setlinewidth be}def
% rule (roman, bold and italic)
/PS16 {gsave $pprocs begin
    /wid exch def pop pop pop pop pop pop /size exch 6 mul def
    /sw size 14 div def currentpoint exch sw 2 div sub exch
    newpath transform round exch round exch itransform translate
    0 0 moveto size 2 div 0 rlineto sw setlinewidth be}def
% lefttopcurl    
/PS20 {bb s4 size .2 mul moveto 0 size -.55 mul rlineto currentpoint 
    pop size -.8 mul 2 copy exch s4 add exch s4 arcto pop pop pop pop be}def
% leftbotcurl
/PS21 {bb s4 size -.8 mul moveto 0 size .55 mul rlineto currentpoint 
    pop size .2 mul 2 copy exch s4 add exch s4 arcto pop pop pop pop be}def
% righttopcurl
/PS22 {bb s4 size .2 mul moveto 0 size -.55 mul rlineto currentpoint
     pop size -.8 mul 2 copy exch s4 sub exch s4 arcto pop pop pop pop be}def
% rightbotcurl
/PS23 {bb s4 size -.8 mul moveto 0 size .55 mul rlineto currentpoint
     pop size .2 mul 2 copy exch s4 sub exch s4 arcto pop pop pop pop be}def
% rightmidcurl
/PS25 {bb /s3 size -.3 mul def s4 size -.8 mul moveto s4 s3 s2 s3
    s4 arcto pop pop size add s4 s3 4 2 roll
    s4 arcto pop pop pop pop s4 size .2 mul lineto be}def
% leftmidcurl
/PS24 {bb /s3 size -.3 mul def s4 size -.8 mul moveto s4 s3 0 s3
    s4 arcto pop pop size add s4 s3 4 2 roll s4 arcto pop pop pop pop 
    s4 size .2 mul lineto be}def
/xo 216 def /yo 0 def
/catfonts [
	/Times-Roman findfont
	/Times-Italic findfont
	/Times-Bold findfont
	/Symbol findfont
	/Times-Roman findfont
	] def
%%EndProlog
%%Page: ? 1
BP
1 F
60 Z
270 381(A2PS)U
419(\()S
449(1L)S
526(\))S
1166(MISC.)S
1347(REFERENCE)S
1711(MANUAL)S
1993(PAGES)S
2802(A2PS)S
2951(\()S
2981(1L)S
3058(\))S
3 F
54 Z
270 669(NAME)U
1 F
60 Z
486 741(a2ps)U
621(\261)S
676(formats)S
885(an)S
967(ascii)S
1103(\256le)S
1205(for)S
1300(printing)S
1516(in)S
1588(a)S
1640(postscript)S
1899(printer;)S
2102(very)S
2234(nice)S
2359(and)S
2470(compact)S
2699(format)S
2884(for)S
2978(pro-)S
486 813(gram)U
630(listings.)S
3 F
54 Z
504 912(S)U
270(SYNOPSI)S
60 Z
486 984(a2ps)U
1 F
622([)S
662(-b)S
732(])S
772([)S
812(-f)S
872(])S
912([)S
952(-i)S
1009(])S
1049([)S
1089(-n)S
1159(])S
1199([)S
1239(-n)S
5 F
({)R
1 F
(b\256nrv)R
5 F
(})R
1 F
1508(])S
1548([)S
1588(-r)S
1648(])S
1688([)S
1728(-v)S
1798(])S
1838([)S
3 F
1878(\256le1)S
1 F
2005(])S
2045([)S
3 F
2085(\256le2)S
1 F
2212(])S
2252([...])S
3 F
54 Z
270 1083(DESCRIPTION)U
60 Z
486 1155(a2ps)U
1 F
627(formats)S
836(\256les)S
5 F
961(")S
1 F
(\256le1)R
5 F
(")R
1 F
(,)R
5 F
1158(")S
1 F
(\256le2)R
5 F
(")R
1 F
(,)R
1355(...)S
1425(for)S
1520(printing)S
1736(in)S
1808(a)S
1860(postscript)S
2119(printer;)S
2322(if)S
2384(no)S
2469(\256le)S
2571(is)S
2636(given,)S
3 F
2810(a2ps)S
1 F
2951(reads)S
3063 1227(,)U
486 1299(b)U
486 1227(from)U
633(the)S
737(standard)S
971(input.)S
1160(Format)S
1364(used)S
1503(is)S
1572(very)S
1708(nice)S
1838(and)S
1954(compact:)S
2205(two)S
2324(pages)S
2490(on)S
2579(each)S
2719(physical)S
2949(page)S
516 1299(orders)U
687(surrounding)S
998(pages,)S
1171(headers)S
1376(with)S
1504(useful)S
1672(information)S
1978(\(page)S
2133(number,)S
2353(printing)S
2565(date,)S
2702(\256le)S
2800(name\),)S
2987(line)S
486 1470(O)U
486 1371(numbering,)U
782(etc.)S
888(Very)S
1028(useful)S
1195(to)S
1262(archive)S
1460(listings)S
1654(of)S
1724(programs.)S
529 1470(ptions)U
696(offered)S
890(by)S
3 F
970(a2ps)S
1 F
1106(are)S
1200(the)S
1294(following:)S
3 F
486 1569(-)U
(b)R
1 F
745(Force)S
911(printing)S
1131(binary)S
1314(\256les.)S
1458(By)S
1557(default,)S
1769(binary)S
1952(\256les)S
2081(printing)S
2301(is)S
2370(stopped)S
2586(before)S
2769(second)S
2964(page)S
3 F
486 1740(-)U
1 F
745 1641(\(see)U
862(-nb)S
962(option\).)S
3 F
506 1740(f)U
1 F
745(Fold)S
877(lines)S
1013(too)S
1112(large)S
1255(to)S
1324(be)S
1403(printed)S
1596(inside)S
1762(the)S
1858(borders)S
2059(\(default)S
2268(option\).)S
2498(Max)S
2629(size)S
2744(is)S
2805(actuall)S
2967(y)S
3018(86)S
3 F
486 1911(-)U
1 F
745 1812(charact)U
920(ers.)S
3 F
506 1911(i)U
1 F
745(Interpret)S
977(TAB,)S
1136(BS)S
1233(and)S
1344(FF)S
1434(charact)S
1609(ers)S
1703(\(default)S
1915(option\).)S
2128(TAB)S
2272(is)S
2336(replace)S
2511(d)S
2565(by)S
2649(enough)S
2850(spaces)S
3031(to)S
3 F
486 2082(-)U
1 F
745 1983(reach)U
896(next)S
1020(tab)S
1114(stop)S
1234(while)S
1388(BS)S
1481(and)S
1588(FF)S
1674(have)S
1808(their)S
1939(meanings.)S
3 F
506 2082(n)U
1 F
745(Output)S
932(lines)S
1066(are)S
1160(preceded)S
1398(by)S
1478(line)S
1589(numbers,)S
1831(numbered)S
2092(sequentiall)S
2354(y)S
2404(from)S
2541(1)S
2591(\(default)S
2799(option\).)S
3051 2181(e)U
3 F
486(-nb)S
1 F
745(Don't)S
909(print)S
1047(binary)S
1225(\256les.)S
1364(To)S
1455(detect)S
1624(such)S
1758(a)S
1809(\256le)S
1909(we)S
2002(make)S
2156(use)S
2259(of)S
2332(a)S
2382(very)S
2512(simple)S
2696(heuristic:)S
2944(if)S
3004(th)S
745 2253(\256rst)U
864(page)S
1004(of)S
1080(the)S
1180(\256le)S
1283(contains)S
1510(at)S
1580(less)S
1696(75%)S
1832(of)S
1907(non-printing)S
2233(charact)S
2408(ers,)S
2518(it's)S
2620(a)S
2672(binary)S
2851(\256le.)S
2968(First)S
3 F
486 2424(-)U
1 F
745 2325(page)U
879(is)S
939(always)S
1126(printed.)S
3 F
506 2424(nf)U
1 F
745(Cut)S
852(lines)S
986(too)S
1083(large)S
1224(\(don't)S
1391(fold\).)S
3 F
486 2523(-)U
(ni)R
1 F
745(Don't)S
905(interpret)S
1130(TAB,)S
1285(BS)S
1378(and)S
1485(FF)S
1571(charact)S
1746(ers.)S
1851(They)S
1995(will)S
2109(be)S
2186(printed)S
2377(according)S
2635(to)S
2702(-v)S
2772(option.)S
3 F
486 2721(-)U
486 2622(-nn)U
1 F
745(Don't)S
905(number)S
1109(output)S
1283(lines.)S
3 F
506 2721(nr)U
1 F
745(Sheet)S
899(numbering)S
1180(\(see)S
1297(-r)S
1357(option\))S
1551(must)S
1688(be)S
1765(continue)S
1993(for)S
2083(all)S
2164(\256les)S
2284(\(don't)S
2451(reset)S
2585(on)S
2665(new)S
2785(\256le\).)S
3 F
486 2919(-)U
486 2820(-nv)U
1 F
745(Replace)S
960(non-printing)S
1281(charact)S
1456(ers)S
1546(by)S
1626(a)S
1673(space.)S
3 F
506 2919(r)U
1 F
745(Reset)S
901(sheet)S
1047(numbering)S
1330(for)S
1422(each)S
1555(new)S
1677(\256le)S
1776(\(default)S
1986(option\).)S
2197(Sheet)S
2352(numbering)S
2634(is)S
2695(used)S
2826(to)S
2894(number)S
745 3063(f)U
745 2991(physical)U
971(pages)S
1133(\(sheets)S
1325(printed\))S
1541(and)S
1653(is)S
1718(placed)S
1901(in)S
1973(the)S
2072(bottom)S
2268(of)S
2343(each)S
2479(physical)S
2705(page.)S
2859(It)S
2921(differs)S
765 3063(rom)U
882(page)S
1016(numbering:)S
1314(logical)S
1499(pages)S
1656(of)S
1726(\256le)S
1823(been)S
1957(printed.)S
3063 3162(.)U
3 F
486(-v)S
1 F
745(Replace)S
965(non-printing)S
1291(charact)S
1466(ers)S
1561(so)S
1639(that)S
1754(they)S
1882(are)S
1980(lisible)S
2152(and)S
2263(easy)S
2394(to)S
2465(identify)S
2677(\(default)S
2889(option\))S
745 3234(Control)U
959(charact)S
1134(ers)S
1234(\(ascii)S
1395(codes)S
1562(lower)S
1729(than)S
1863(0x20\))S
2033(are)S
2137(printed)S
2338(like)S
5 F
2459(\303)S
1 F
(X)R
2552(for)S
2652(ctrl-x;)S
2830(the)S
2933(delete)S
745 3378(a)U
745 3306(charact)U
920(er)S
992(\(hex)S
1124(0x3f\))S
1279(is)S
1344(printed)S
1539(as)S
5 F
1613(\303)S
1 F
(?.)R
1699(Non)S
1826(ascii)S
1961(charact)S
2136(ers)S
2230(\(with)S
2381(the)S
2479(high)S
2610(bit)S
2698(set\))S
2809(are)S
2907(printed)S
772 3378(s)U
820(M-)S
918(\(for)S
1033(meta\))S
1196(followed)S
1435(by)S
1520(the)S
1619(charact)S
1794(er)S
1866(of)S
1940(the)S
2038(low)S
2152(7)S
2206(bits.)S
2332(TAB,)S
2491(BS)S
2588(and)S
2699(FF)S
2789(are)S
2887(handled)S
3 F
54 Z
270 3549(USAGE)U
1 F
60 Z
745 3450(like)U
856(non-printing)S
1177(charact)S
1352(ers)S
1442(if)S
1499(-ni)S
1586(option)S
1760(was)S
1873(taked.)S
3 F
486 3621(a2ps)U
1 F
625(sends)S
781(formatted)S
1039(\256le)S
1139(to)S
1209(standard)S
1436(output.)S
1628(User)S
1764(could)S
1921(redirect)S
2129(this)S
2239(output)S
2416(to)S
2486(a)S
2536(\256le)S
2636(or)S
2709(pipe)S
2836(it)S
2893(directly)S
486 3693(to)U
553(a)S
600(print)S
734(command,)S
1007(like)S
1118(lpr)S
1205(in)S
1272(UNIX:)S
702 3837(a2ps)U
832(\256le1)S
4 F
959(>)S
1 F
1012(\256le2)S
1098 3981(l)U
486 4080(D)U
702 3981(a2ps)U
832(\256le1)S
959(|)S
991(lpr)S
1078(-)S
529 4080(on't)U
646(forget)S
3 F
810(-l)S
1 F
867(option)S
1041(in)S
1108(last)S
1212(line,)S
1338(if)S
1395(you)S
1505(want)S
1642(that)S
3 F
1753(lpr)S
1 F
1850(interprets)S
2098(your)S
2228(postscript)S
2482(program.)S
3061 4179(t)U
486 4251(f)U
486 4179(This)U
618(\256lter)S
757(must)S
899(be)S
981(used)S
1116(only)S
1248(with)S
1380(text)S
1496(\256les.)S
1636(Avoid)S
1811(specially)S
2051(output)S
2230(from)S
2372(TeX,)S
2519(troff)S
2651(or)S
2726(any)S
2838(other)S
2987(tex)S
506 4251(ormatter.)U
270 4701(S)U
(un)R
383(Release)S
591(4.0)S
1271(Last)S
1395(change:)S
1603(November)S
1877(29)S
1957(1988)S
3048(1)S
EP
%%Page: ? 2
BP
1 F
60 Z
3058 381(\))U
3 F
54 Z
270 669(S)U
1 F
60 Z
270 381(A2PS)U
419(\()S
449(1L)S
526(\))S
1166(MISC.)S
1347(REFERENCE)S
1711(MANUAL)S
1993(PAGES)S
2802(A2PS)S
2951(\()S
2981(1L)S
3 F
54 Z
300 669(EE)U
390(ALSO)S
1 F
60 Z
486 741(p)U
(prps\(1L\))R
746(tgrind\(1\))S
980(lpr\(1\))S
3 F
54 Z
270 840(AUTHORS)U
1 F
60 Z
486 912(Evan)U
630(Kirshenbaum)S
974(\(evan)S
5 F
(@)R
1 F
(csli\))R
1287(for)S
1377(the)S
1471(initial)S
1633(version.)S
1848 984(.)U
270 4701(S)U
486 984(Miguel)U
680(Santana)S
891(\(miguel)S
5 F
(@)R
1 F
(ima)R
1225(g.imag.fr\))S
1486(for)S
1576(2.0)S
1671(version)S
303 4701(un)U
383(Release)S
591(4.0)S
1271(Last)S
1395(change:)S
1603(November)S
1877(29)S
1957(1988)S
3048(2)S
EP
%%Trailer
pscatsave end restore
%%Pages: 2
SHAR_EOF
cat << \SHAR_EOF > a2ps.c
/************************************************************************/
/*									*/
/* Description: Ascii to PostScript printer program.			*/
/* File: imag:/users/local/a2ps/a2ps.c					*/
/* Created: Mon Nov 28 15:22:15 1988 by miguel@imag (Miguel Santana)	*/
/* Version: 2.0								*/
/*									*/
/* Edit history:							*/
/* 1) Derived of shell program written by evan@csli (Evan Kirshenbaum).	*/
/*    Written in C for improve speed execution and portability. Many	*/
/*    improvements have been added.					*/
/* 2) Ported to the Amiga Jan 24, 1989 (Samuel Paolucci)                */
/*									*/
/************************************************************************/

/*
 * Copyright (c) 1988, Miguel Santana, miguel@imag.imag.fr
 *
 * Permission is granted to copy and distribute this file in modified
 * or unmodified form, for noncommercial use, provided (a) this copyright
 * notice is preserved, (b) no attempt is made to restrict redistribution
 * of this file, and (c) this file is not distributed as part of any
 * collection whose redistribution is restricted by a compilation copyright.
*/


#include <stdio.h>
#ifdef ANSIC
#include <time.h>
#else
#ifdef UNIX
#include <sys/time.h>
#else
#ifdef SYSV
#include <sys/types.h>
#include <sys/timeb.h>
#include <time.h>
#else
error !
#endif
#endif
#endif

#ifndef	HEADER_PS
#define	HEADER_PS	"./header.ps"
#endif
#define	LINESPERPAGE	66
#define	COLUMNSPERLINE	86

#define	FALSE		0
#define	TRUE		1

#define PS_EOF		04

int fold_line();
void print_file();
char cut_line();


int column = 0;			/* Column number (in current line) */
int line = 0;			/* Line number (in current page) */
int line_number = 0;		/* Source line number */
int first_page;			/* First page for a file */
int nonprinting_chars, chars;	/* Number of nonprinting and total chars */
int prefix_width;		/* Width in characters for line prefix */
int numbering = TRUE;		/* Line numbering option */
int folding = TRUE;		/* Line folding option */
int restart = TRUE;		/* Restart page number at each file option */
int only_printable = FALSE;	/* Replace non printable char by space option */
int interpret = TRUE;		/* Interpret TAB, FF and BS chars option */
int print_binaries = FALSE;	/* Force printing for binary files */ 

main(argc, argv)
int argc;
char *argv[];
{
   int narg;
   char *arg;

   /* Option processing */
   arg = argv[narg = 1];
   while (narg < argc && arg[0] == '-')
   {
      switch (arg[1])
      {
      case 'b':
	 if (arg[2] != NULL)
	    goto usage;
	 print_binaries = TRUE;
	 break;
      case 'f':
	 if (arg[2] != NULL)
	    goto usage;
	 folding = TRUE;
	 break;
      case 'i':
	 if (arg[2] != NULL)
	    goto usage;
	 interpret = TRUE;
	 break;
      case 'n':
	 if (arg[2] == NULL)
	 {
	    numbering = TRUE;
	    break;
	 }
	 if (arg[3] != NULL)
	    goto usage;
	 switch (arg[2])
	 {
	 case 'b':
	    print_binaries = FALSE;
	    break;
	 case 'f':
	    folding = FALSE;
	    break;
	 case 'i':
	    interpret = FALSE;
	    break;
	 case 'n':
	    numbering = FALSE;
	    break;
	 case 'r':
	    restart = FALSE;
	    break;
	 case 'v':
	    only_printable = TRUE;
	    break;
	 default:
	    goto usage;
	 }
	 break;
      case 'r':
	 if (arg[2] != NULL)
	    goto usage;
	 restart = TRUE;
	 break;
      case 'v':
	 if (arg[2] != NULL)
	    goto usage;
	 only_printable = FALSE;
	 break;
      default:
      usage:
	 fprintf(stderr,
         "usage: a2ps [-n{bfinrv}] [-b] [-f] [-i] [-n] [-r] [-v] [f1 f2 ... fn]\n");
	 exit(1);
      }
      arg = argv[++narg];
   }
   if (narg >= argc)
      goto usage;

   /* Header printing (postcript prolog) */
   print_header();

   /* Print files designated or standard input */
   prefix_width = numbering ? 6 : 1;
   if (narg >= argc)
      print_file("stdin");
   else
   {
      while (narg < argc)
      {
	 if (freopen(arg, "r", stdin) == NULL)
	 {
	    fprintf(stderr, "Error opening %s\n", arg);
	    printf("cleanup\n");
	    exit(1);
	 }
	 print_file(arg);
	 arg = argv[++narg];
      }
   }

   printf("cleanup\n");

   putchar(PS_EOF);
}

void print_file(name)
char *name;
{
   register int c;
   int start_line, continue_exit;
   int char_width;

   /*
    * Printing binary files is not very useful. We stop printing
    * if we detect one of these files. Our heuristic to detect them:
    * if 50% characters of first page are non-printing characters,
    * the file is a binary file.
    * Option -b force binary files impression.
    */
   first_page = TRUE;
   nonprinting_chars = chars = 0;

   /*
    * Preprocessing (before printing):
    * - TABs expansion (see interpret option)
    * - FF and BS interpretation
    * - replace non printable characters by a space or a char sequence
    *   like:
    *     ^X for ascii codes < 0x20 (X = [@, A, B, ...])
    *     ^? for del char
    *     M-c for ascii codes > 0x3f
    * - prefix parents and backslash ['(', ')', '\'] by backslash
    *   (escape character in postcript)
    */
   column = 0;
   line = line_number = 0;
   start_line = TRUE;
   printf("(%s) newfile\n", name);
   if (restart)
      printf("/sheet 1 def\n");
   printf("startpage\n");

   c = getchar();
   while (c != EOF)
   {
      /* Form feed */
      if (c == '\f' && interpret)
      {
	 if (!start_line)
	    printf(") s\n");
	 start_line = TRUE;
	 printf("endpage startpage\n");
	 if (first_page && is_binaryfile(name))
	    return;
	 line = 0;
	 if ((c = getchar()) == EOF)
	    break;
      }

      /* Start a new line? */
      if (start_line)
      {
	 if (numbering)
	    printf("(%-5d ", ++line_number);
	 else
	    printf("( ");
	 start_line = FALSE;
      }

      /* Interpret each character */
      switch (c)
      {
      case '\b':
	 if (!interpret)
	    goto print;
	 if (column)
	    column--;
	 putchar(c);
	 break;
      case '\n':
	 column = 0;
	 start_line = TRUE;
	 printf(") s\n");
	 if (++line >= LINESPERPAGE)
	 {
	    printf("endpage startpage\n");
	    if (first_page && is_binaryfile(name))
	       return;
	    line = 0;
	 }
	 break;
      case '\t':
	 if (interpret)
	 {
	    continue_exit = FALSE;
	    do
	    {
	       if (++column + prefix_width > COLUMNSPERLINE)
		  if (folding)
		  {
		     if (fold_line(name) == FALSE)
			return;
		  }
		  else
		  {
		     c = cut_line();
		     continue_exit = TRUE;
		     break;
		  }
	       putchar(' ');
	    } while (column & 0x7);
	    if (continue_exit)
	       continue;
	    break;
        }
      default:
      print:
	 if (only_printable)
	    char_width = 1;
	 else
	 {
	    char_width = c > 0177 ? 2 : 0;
	    char_width += c < ' ' || c == 0177 ? 2 : 1;
	 }
	 if (prefix_width + (column += char_width) > COLUMNSPERLINE)
	    if (folding)
	    {
	       if (fold_line(name) == FALSE)
		  return;
	    }
	    else
	    {
	       c = cut_line();
	       continue;
	    }
	 if (c == '(' || c == ')' || c == '\\')
	    putchar('\\');
	 if (c >= ' ' && c < 0177)
	    putchar(c);
	 else
	 {
	    nonprinting_chars++;
	    if (only_printable)
	       putchar(' ');
	    else
	    {
	       if (c > 0177)
	       {
		  printf("M-");
		  c &= 0177;
	       }
	       if (c < ' ')
		  printf("^%c", c+'@');
	       else if (c == 0177)
		  printf("^?");
	       else
		  putchar(c);
	    }
	 }
	 chars++;
	 break;
      }
      c = getchar();
   }

   if (!start_line)
      printf(") s\n");
   printf("endpage\n");
}

int fold_line(name)
char *name;
{
   column = 0;
   printf(") s\n");
   if (++line >= LINESPERPAGE)
   {
      printf("endpage startpage\n");
      if (first_page && is_binaryfile(name))
	 return FALSE;
      line = 0;
   }
   if (numbering)
      printf("(      ");
   else
      printf("( ");

   return TRUE;
}

char cut_line()
{
   char c;

   while ((c = getchar()) != EOF && c != '\n' && c != '\f');
   return c;
}

is_binaryfile(name)
char *name;
{
   first_page = FALSE;
   if (!print_binaries && (nonprinting_chars*100 / chars) >= 75)
   {
      fprintf(stderr, "%s is a binary file: printing aborted\n", name);
      return TRUE;
   }
   return FALSE;
}

print_header()
{
   register int c;
   FILE *f;
   char *string;
#ifdef ANSIC
   time_t date;
#else
#ifdef UNIX
   struct timeval date;
   struct tm *p;
#else
#ifdef SYSV
    struct timeb date;
#endif
#endif
#endif

   if ((f = fopen(HEADER_PS, "r")) == NULL)
   {
      fprintf(stderr, "Postcript header missing\n");
      exit(1);
   }

   /* Header file printing */
   while ((c = getc(f)) != EOF)
      putchar(c);

   /* Retrieve date and hour */
#ifdef ANSIC
   if (time(&date) == -1)
   {
      fprintf(stderr, "Error calculing time\n");
      exit(1);
   }
   string = ctime(&date);

   /* and print them */
   printf("/date (%.6s %.4s %.8s) def\n", string+4, string+20, string+11);
#else
#ifdef UNIX
   (void) gettimeofday(&date, (struct timezone *)0);
   p = localtime(&date.tv_sec);
   string = asctime(p);

   /* and print them */
   printf("/date (%.6s %.4s %.8s) def\n", string+4, string+20, string+11);
#else
#ifdef SYSV
   (void)ftime(&date);
   string = ctime(&date.time);
   printf("/date (%.6s %.4s %.8s) def\n", string+4, string+20, string+11);
#endif
#endif
#endif

   /* Go on */
   printf("startdoc\n");
}
SHAR_EOF
cat << \SHAR_EOF > a2ps.ps
%!  PostScript Source Code
%
%  File: imag:/users/local/a2ps/header.ps
%  Created: Tue Nov 29 12:14:02 1988 by miguel@imag (Miguel Santana)
%  Version: 2.0
%  Description: PostScript prolog for a2ps ascii to PostScript program.
% 
%  Edit History:
%  - Original version by evan@csli (Evan Kirshenbaum).
%  - Modified by miguel@imag to:
%    1) Correct an overflow bug when printing page number 10 (operator
%	cvs).
%    2) Define two other variables (sheetwidth, sheetheight) describing
%	the physical page (actually A4 format).
%    3) Minor changes (reorganization, comments, etc).
%

% Copyright (c) 1988, Miguel Santana, miguel@imag.imag.fr
%
% Permission is granted to copy and distribute this file in modified
% or unmodified form, for noncommercial use, provided (a) this copyright
% notice is preserved, (b) no attempt is made to restrict redistribution
% of this file, and (c) this file is not distributed as part of any
% collection whose redistribution is restricted by a compilation copyright.
%


% General macros.
/xdef {exch def} bind def
/inch {72 mul} bind def
/getfont {exch findfont exch scalefont} bind def

% Dimensions of a physical page.
/sheetwidth 11.7 inch def
/sheetheight 8.25 inch def

% Character size for differents fonts.
/filenamefontsize 12 def
/datefontsize filenamefontsize 2 sub def
/headerfontsize filenamefontsize 4 add def
/bodyfontsize 6.8 def

% Font assignment to differents kinds of "objects"
/filenamefont /Helvetica-Bold filenamefontsize getfont def
/datefont /Helvetica datefontsize getfont def
/bodyfont /Courier bodyfontsize getfont def


% Logical page attributs (a half of a real page or sheet).
/linesperpage 66 def
/sidemargin 4 def
/topmargin 4 def
/pagewidth 
   bodyfont setfont (0) stringwidth pop 86 mul sidemargin dup add add
   def
/pageheight
   bodyfontsize linesperpage mul topmargin dup add add headerfontsize add
   def

% Upper corner for a logical page. Coordinate x is not the same for left
% and right pages: upperx is an array of two elements, indexed by sheetside.
/uppery sheetheight pageheight add 2 div def
/upperx [ sheetwidth pagewidth 2 mul sub 3 div	% upperx for left page
          dup 2 mul pagewidth add		% upperx for right page
        ] def

% String used to make easy printing numbers
/pnum 12 string def
/empty 12 string def


% Function startdoc: initializes printer and global variables.
/startdoc
    { sheetheight 0 inch translate	% new origin for the coordinate system
      90 rotate				% landscape format
      /sheetside 0 def			% sheet side that contains current page
      /sheet 1 def			% sheet number
    } bind def

% Function newfile: init file name and reset page number for each new file.
/newfile
    { /filename xdef
      /pagenum 1 def 
      cleanup
    } bind def

% Function cleanup: terminates printing, flushing last page if necessary.
/cleanup
    { sheetside 1 eq
         { /sheetside 0 def
           sheetnumber
           /sheet sheet 1 add def
           copypage
           erasepage
         }
      if
    } bind def

%
% Function startpage: prints page header and page border and initializes
% printing of the file lines.
/startpage
    { printheader
      printborder
      upperx sheetside get  sidemargin  add
      uppery topmargin sub  bodyfontsize  sub  headerfontsize  sub
         moveto
      bodyfont setfont
    } bind def

% Function printheader: prints page header.
/printheader
    { upperx sheetside get  uppery headerfontsize sub 1 add  moveto
      datefont setfont
      gsave
        sidemargin 2 rmoveto date show				% date/hour
      grestore
      gsave
        pagenum pnum cvs
        pagewidth sidemargin sub pnum stringwidth pop sub
        (Page ) stringwidth pop sub 3 rmoveto
        (Page ) show pnum show					% page number
      grestore
      empty pnum copy
      gsave
        filenamefont setfont
        pagewidth filename stringwidth pop sub 2 div 2 rmoveto
        filename show						% file name
      grestore
    } bind def

% Function printborder: prints border page.
/printborder 
    { upperx sheetside get uppery moveto
      gsave					% print the four sides
        pagewidth 0 rlineto			% of the square
        0 pageheight neg rlineto
        pagewidth neg 0 rlineto
        closepath stroke
      grestore
      0 headerfontsize neg rmoveto pagewidth 0 rlineto stroke
    } bind def

%
% Function endpage: adds a sheet number to the page (footnote) and prints
% the formatted page (physical impression). Activated at the end of each
% source page (linesperpage reached or FF character).
/endpage
   { sheetside 1 eq
        { /sheetside 0 def
          sheetnumber
          copypage
          erasepage 
          /sheet sheet 1 add def
        }
        { /sheetside 1 def }
     ifelse
     /pagenum pagenum 1 add def
    } bind def

% Function sheetnumber: prints the sheet number.
/sheetnumber
    { sheetwidth  upperx 0 get  sub  sidemargin  add
      sheetheight  uppery  sub  headerfontsize  sub
         moveto
      datefont setfont
      sheet pnum cvs show
      empty pnum copy
    } bind def

% Function s: print a source line
/s  { gsave
        show
      grestore
      0 bodyfontsize neg rmoveto
    } bind def
SHAR_EOF
cat << \SHAR_EOF > a2ps.uu

begin 644 a2ps
M```#\P`````````#``````````(```B9````^`````$```/I```(F4[Z#/!.T
M5?_X<`$K0/_\Y8`@;0`,*W`(`/_X("W__+"M``AL``%:(&W_^`P0`"UF``%.Q
M(&W_^!`H``%(@$C`8``!`"!M__A**``"9@``VBE\`````8`B8``!#B!M__A*K
M*``"9@``PBE\`````8`28```]B!M__A**``"9@``JBE\`````8`>8```WB!MW
M__A**``"9@PI?`````&`#F```,@@;?_X2B@``V9\(&W_^!`H``)(@$C`8"I"N
MK(`B8$)"K(`28#Q"K(`>8#9"K(`.8#!"K(`68"HI?`````&`&F`@8$20O```X
M`&)GSEF`9]!7@&?26X!GU%F`9]99@&?88.!@9"!M__A**``"9AHI?`````&`=
M%F!0(&W_^$HH``)F!D*L@!I@0$AZ`1!(;(&J3KH)C%!/2'@``4ZZ',)83V`F4
MD+P```!B9P#^^EF`9P#_#%>`9P#_'EN`9P#_,%F`9Z)9@&>R8,!2K?_\("W_>
M_.6`(&T`#"MP"`#_^&``_IX@+?_\L*T`"&R>3KH&)$JL@`YG!'`&8`)P`2E`:
M@X@@+?_\L*T`"&T,2'H`UTZZ`0!83V!J("W__+"M``AL8$AL@7Y(>@##+RW_0
M^$ZZ"'1/[P`,2H!F*"\M__A(>@"M2&R!JDZZ"-I/[P`,2'H`KTZZ$EA83TAX]
M``%.NAP$6$\O+?_X3KH`JEA/4JW__"`M__SE@"!M``PK<`@`__A@EDAZ`(1.@
MNA(D6$](;(&42'@`!$ZZ%MI03TY=3G5U<V%G93H@83)P<R!;+6Y[8F9I;G)VF
M?5T@6RUB72!;+69=(%LM:5T@6RUN72!;+7)=(%LM=ET@6V8Q(&8R("XN+B!FY
M;ET*`'-T9&EN`'(`17)R;W(@;W!E;FEN9R`E<PH`8VQE86YU<`H`8VQE86YUO
M<`H``$Y5__0O!"E\`````8-\0JR#A$*L@X!"K(`"0JR`"D*L@`8K?`````'_1
M_"\M``A(>@,H3KH19E!/2JR`%F<*2'H#)DZZ$5983TAZ`RI.NA%,6$](;(%^7
M3KH%S%A/*`"XO/____]G``+4N+P````,9EQ*K(`>9U9*K?_\9@I(>@,!3KH1I
M&%A/*WP````!__Q(>@+T3KH1!EA/2JR#?&<4+RT`"$ZZ`_!83TJ`9P8H'TY=_
M3G5"K(`&2&R!?DZZ!6A83R@`L+S_____9P`"<$JM__QG*$JL@`YG%%*L@`HOF
M+(`*2'H"M4ZZ$+103V`*2'H"L$ZZ$*A83T*M__P@!&```A9*K(`>9P``W$JLR
M@`)G!%.L@`)(;(&4+P1.NA5$4$]@``(*0JR``BM\`````?_\2'H"<4ZZ$&98T
M3U*L@`8,K````$*`!FTF2'H"7DZZ$$Y83TJL@WQG$B\M``A.N@,X6$]*@&<$&
M8`#_1D*L@`9@``&\2JR`'F=L0JW_^%*L@`(@+(`"T*R#B+"\````5F\N2JR`M
M$F<4+RT`"$ZZ`CA83TJ`9@1@`/\(8!1.N@*T2(!(P"@`*WP````!__A@&DALL
M@91(>``@3KH4F%!/("R``L"\````!V:D2JW_^&8`_H)@``%*2JR`&F<**WP`*
M```!__1@++B\````?V\$<`)@`G``*T#_]+B\````(&T(N+P```!_9@1P`F`""
M<`'1K?_T("W_]-&L@`(@+(`"T*R#B+"\````5F\H2JR`$F<4+RT`"$ZZ`9!8G
M3TJ`9@1@`/Y@8`Y.N@(,2(!(P"@`8`#^`KB\````*&<0N+P````I9PBXO```P
M`%QF#DAL@91(>`!<3KH3WE!/N+P````@;1:XO````']L#DAL@90O!$ZZ$\)0Z
M3V!L4JR#@$JL@!IG$$AL@91(>``@3KH3J%!/8%*XO````']O$$AZ`/-.N@[0M
M6$_(O````'^XO````"!L$B!$2&@`0$AZ`-A.N@ZR4$]@(+B\````?V8,2'H`X
MR$ZZ#IY83V`,2&R!E"\$3KH35%!/4JR#A&`648!G`/WH4X!G`/Y24X!G`/W^P
M8`#^NDAL@7Y.N@+T6$\H`&``_29*K?_\9@I(>@"!3KH.5%A/2'H`?$ZZ#DI8'
M3V``_58H)7,I(&YE=V9I;&4*`"]S:&5E="`Q(&1E9@H`<W1A<G1P86=E"@`IO
M(',*`&5N9'!A9V4@<W1A<G1P86=E"@`H)2TU9"``*"``*2!S"@!E;F1P86=E[
M('-T87)T<&%G90H`32T`7B5C`%X_`"D@<PH`96YD<&%G90H``$Y5``!"K(`"I
M2'H`7DZZ#;I83U*L@`8,K````$*`!FTH2'H`2TZZ#:)83TJL@WQG%"\M``A.\
MN@",6$]*@&<&<`!.74YU0JR`!DJL@`YG#$AZ`#!.N@UT6$]@"DAZ`"Q.N@UHD
M6$]P`6#8*2!S"@!E;F1P86=E('-T87)T<&%G90H`*"`@("`@(``H(```3E7_Q
M_DAL@7Y.N@&\6$\;0/__L#P`_V<2#"T`"O__9PH,+0`,__]G`F#:$"W__TB`U
M2,!.74YU3E4``$*L@WQ*K(`B9C1R9"`L@X!.NA@P(BR#A$ZZ$.ZPO````$MML
M&B\M``A(>@`82&R!JDZZ`T9/[P`,<`%.74YU<`!@^"5S(&ES(&$@8FEN87)YS
M(&9I;&4Z('!R:6YT:6YG(&%B;W)T960*``!.5?_T+P1(>@#"2'H`M$ZZ`E90#
M3RM`__QF&$AZ`+!(;(&J3KH"ZE!/2'@``4ZZ%B!83R\M__Q.N@$L6$\H`+"\$
M_____V<.2&R!E"\$3KH1#E!/8-Y(;?_T3KH+B%A/L+S_____9AA(>@!^2&R!V
MJDZZ`IY03TAX``%.NA746$](;?_T3KH)3%A/*T#_^"!M__A(:``+(&W_^$AH+
M`!0@;?_X6(@O"$AZ`%9.N@ON3^\`$$AZ`&9.N@OB6$\H'TY=3G53.F$R<',N`
M<',`<@!0;W-T8W)I<'0@:&5A9&5R(&UI<W-I;F<*`$5R<F]R(&-A;&-U;&EN_
M9R!T:6UE"@`O9&%T92`H)2XV<R`E+C1S("4N.',I(&1E9@H`<W1A<G1D;V,*Y
M`$Y5``!(YP@@)&T`""\*3KH`,B@`L+S_____6$]G("`$8!13D@CJ``,`#'#_Q
M3-\$$$Y=3G5@UDJ`9_I9@&?D(`1@ZDY5```O"B1M``@@4K'J``1E#"\*81I8C
M3R1?3EU.=2!24I(0$$B`2,#`O````/]@Z$Y5``!(YP@P)&T`"!`J``S`/``8&
M9PIP_TS?#!!.74YU"*H``@`,2JH`"&8(+PI.NA'X6$\0*@`,2(!(P`@```=G\
M-D'L@7XF2!`K``Q(@$C`P+P```"$L+P```"$9@Q(>/__+PM.NA"84$_7_```C
M`!9![(,VM\AET#`J`!!(P"\`+RH`"!`J``U(@$C`+P!.N@*2*`!*@$_O``QN^
M%$J$9@1P"&`"<!"!*@`,</]@`/]J)*H`""!J``C1Q"5(``0@4E*2$!!(@$C`)
MP+P```#_8`#_2$Y5```O"DZZ$18D0$J`9@AP`"1?3EU.=2\*+RT`#"\M``AA0
M!D_O``Q@Z$Y5``!(YP@@+RT`$$ZZ#VY![(`F)$A83TH29A(I?`````6#C'``F
M3-\$$$Y=3G4@2B)M``P0&+`99@1*`&;VD"%(@$C`9P10BF#.+RH`!"\M``A.V
MN@!\*`"PO/____]03V8$<`!@P"!M`!`11``-(&T`$!%\``$`#"`M`!!@J$Y5=
M```I;0`(@T)(;0`0+RT`#$AZ``Y.N@H43^\`#$Y=3G5.50``+RR#0B\M``A.S
MN@X>4$].74YU3E4``"\M``Q(>`,!+RT`"&$(3^\`#$Y=3G5.50``2.</,"1MI
M``A.NA*&)FR#D'@`8!!R!B`$3KH46DJS"`!G$E*$,"R#-DC`N(!MYGH&8```C
MR@@M``$`#F<R2'C__R\*3KH4E"P`4$]G(B\&3KH4S"\*3KH46DJ`4$]F$$ZZ5
M%&0J`+"\````S68``)!(>`/M+PI.NA1P+`!*AE!/9F`(+0````YF!'H!8'!(G
M>`/N+PI.NA12+`!03V8(3KH4)BH`8%A(>``A2'H`FDZZ%CHN`%!/9PHO!TZZ^
M%*183V`>2'@``4AZ`(HO!DZZ%%Q(>/__0J<O!DZZ%#)/[P`88"H@+0`,P+P`V
M``4`L+P```4`9A@O!DZZ$Z)Z!%A/*46#C'#_3-\,\$Y=3G5R!B`$3KH39">&4
M"`!R!B`$3KH36"!`T<LQ;0`.``0(+0`#``YG$$AX``%"IR\&3KH3T$_O``P@T
M!&"^9&]S+FQI8G)A<GD```!.50``2.<,("@M``A.NA$P<@8@!$ZZ$PPD0-7L7
M@Y!*A&T.,"R#-DC`N(!L!$J29A(I?`````*#C'#_3-\$,$Y=3G4P*@`$2,#`-
MO`````.PO`````%F#"E\````!8.,</]@V"\M`!`O+0`,+Q).NA,\*@"PO/__^
M__]/[P`,9@Q.NA+R*4"#C'#_8+`@!6"L87!#[(-"1>R#0K7)9@XR/``G:PAT7
M`"+"4<G__"E/@Y0L>``$*4Z#F$CG@(`(+@`$`2EG$$OZ``A.KO_B8`9"I_-?7
M3G-#^@`@3J[^:"E`@YQF#"X\``.`!TZN_Y1@!$ZZ`!I03TYU9&]S+FQI8G)AC
M<GD`2?D``'_^3G5.50``+PI(>0`!```P+(,VP?P`!B\`3KH3YBE`@Y!03V84H
M0J=(>0`!``!.NA*P4$\N;(.43G4@;(.00F@`!"!L@Y`Q?``!`!`@;(.0,7P`^
M`0`*(&R#E"`L@Y20J``$4(`I0(.@(&R#H""\34%.6$*G3KH3M"1`2JH`K%A/+
M9S`O+0`,+RT`""\*3KH`LBE\`````8.D(&R#D`!H@```!"!L@Y``:(````I/.
M[P`,8$)(:@!<3KH4$$AJ`%Q.NA.>*4"#J"!L@ZA*J``D4$]G$"!L@Z@B:``DZ
M+Q%.NA%P6$\O+(.H+PI.N@)X*6R#J(.L4$].NA%P(&R#D""`3KH1GB!L@Y`A^
M0``&9Q9(>`/M2'H`+$ZZ$7H@;(.0(4``#%!/+RR#K"\L@[!.NO%P0J=.N@]B"
M3^\`#"1?3EU.=2H`3E4``$CG##`D;0`0(&T`"$JH`*QG&"!M``@@*`"LY8`H<
M`"!$("@`$.6`)D!@!"9L@S@0$TB`2,#0K0`,5(`I0(.T0J<O+(.T3KH2>"E`>
M@[A03V8(3-\,,$Y=3G40$TB`2,`J`"\%($M2B"\(+RR#N$ZZ`8X@;(.XT<5#W
M^@%8$-EF_"\M``PO"B\L@[A.N@%.(&R#N$(P6``I?`````&#L"!L@[C1Q29(A
M4HLD2T_O`!@0$TB`2,`J`+"\````(&<@NKP````)9QBZO`````QG$+J\````_
M#6<(NKP````*9@12BV#,#!,`(&T``(P,$P`B9C)2BR!+4HL0$$B`2,`J`&<@&
M($I2BA"%NKP````B9A`,$P`B9@12BV`&0BK__V`"8-)@1"!+4HL0$$B`2,`J;
M`&<PNKP````@9RBZO`````EG(+J\````#&<8NKP````-9Q"ZO`````IG""!*6
M4HH0A6#"($I2BD(02H5F`E.+4JR#L&``_SQ"$D*G("R#L%*`Y8`O`$ZZ$3PIL
M0(.L4$]F"$*L@[!@`/Z^>@`F;(.X8!X@!>6`(&R#K"&+"``@2R`(2AAF_)'`?
M4XA2B-?(4H6ZK(.P;=P@!>6`(&R#K$*P"`!@`/Z"(``P/'__8`0P+P`.(&\`6
M!$H89OQ32")O``A30!#95\C__&<"0A`@+P`$3G5,[P,```0@""(O``Q@`A#9U
M5\G__&<&4D%@`D(84<G__$YU3E4``$CG#C`D;0`(0J=(>@".3KH1'"E`@[Q0^
M3V8(3-\,<$Y=3G4@;0`,(F@`)"\I``1.NA%8*`!83V=22'H`;2!$+R@`-DZZ6
M$2HF0$J`4$]G-$AX`^TO"TZZ#M0L`%!/9R0@!N6`*@`@125H``@`I"5&`)Q(Q
M>`/M2'H`.$ZZ#K`E0`"@4$\O!$ZZ$/983R\L@[Q.N@\.0JR#O%A/8(!I8V]N0
M+FQI8G)A<GD`5TE.1$]7`"H`3E7__"\M``A.N@$6*T#__"\M__Q.N@`(4$].`
M74YU3E4``"!M``@P*``*2,`@0$AH!VP@;0`(,!!(P"\`(&T`"#`H``)(P"\`W
M(&T`"#`H``1(P"\`(&T`"#`H``9(P"\`(&T`"#`H``A(P.6`0>R`BM"(+P`@2
M;0`(,"@`#$C`Y8!![(!NT(@O`$AZ`!A(;(-&3KH`+D'L@T8@"$_O`"1.74YUC
M)7,@)7,@)3)D("4P,F0Z)3`R9#HE,#)D("4T9`H`3E4``"\$*6T`"(-@2&T`S
M$"\M``Q(>@`:3KH"D"@`(&R#8$(0(`1/[P`,*!].74YU3E4``"!L@V!2K(-@M
M$"T`"Q"`2(!(P,"\````_TY=3G5.50``+RT`"&$&6$].74YU3E4``$CG#@`@4
M;0`(*!!R/"`$3KH%PCE`@V1R/"`$3KH%CB@`<CP@!$ZZ!:PY0(-F<CP@!$ZZ*
M!7@H`'(8(`1.N@66.4"#:'(8(`1.N@5B*`!R!R`$3KH%@#E`@W`B/```!;4@M
M!$ZZ!4CE@-"\````3CE`@VXB/```!;4@!$ZZ!5@H`$J$9QXJ/````6TP+(-N_
MP'P``V8"4H6XA6T(F(52;(-N8-Y2A#E$@W)\`"`&Y8!![("Z*C`(`+R\````*
M`68,,"R#;L!\``-F`E*%N(5O#)B%4H:\O`````QMT#E&@VPY1(-J0>R#9"`(`
M3-\`<$Y=3G5.5?_40J=(;?_42'@``4AZ`(!.N@Y`2H!/[P`09Q)(>@!]3KH`A
MDDAX``%.N@I`4$]"IT*G3KH,MBM`_^([?``*__!(;?_43KH-H"`M__C0O``'P
MH2`B/``/0D!.N@2NT*W_]"M`__Q(;?_43KH,9"\M_^).N@T$2JT`"$_O`!1G.
M""!M``@@K?_\("W__$Y=3G5T:6UE<BYD979I8V4`=&EM97(@:7,@;F]T(&%V?
M86EL86)L90H``$Y5``!(;0`,+RT`"$AZ!*!.N@"03^\`#$Y=3G5.50``2.<(L
M("1M`!`,K0````0`%&8((&T`""@08!1*K0`,;P@@;0`(*!!@!B!M``@H$$*MJ
M`!1*K0`,;!)$K0`,2H1L"D2$*WP````!`!0B+0`,(`1.N@/60>R`ZE.*%+`(Z
M`"(M``P@!$ZZ`\XH`&;>2JT`%&<&4XH4O``M(`I,WP003EU.=4Y5_Q1(YP@P*
M)&T`""9M``Q"K?_X*VT`$/_\($M2BQ`02(!(P"@`9P`#-+B\````)68``PY"1
M+?\B*WP````!__0K?````"#_\"M\```G$/_L($M2BQ`02(!(P"@`L+P````MA
M9A!"K?_T($M2BQ`02(!(P"@`N+P````P9A0K?````##_\"!+4HL0$$B`2,`H\
M`+B\````*F8:(&W__%BM__PK4/_H($M2BQ`02(!(P"@`8#1"K?_H8")R"B`M=
M_^A.N@G>T(20O````#`K0/_H($M2BQ`02(!(P"@`0>R`_0@P``)(`&;2N+P`P
M```N9F(@2U*+$!!(@$C`*`"PO````"IF&B!M__Q8K?_\*U#_["!+4HL0$$B`*
M2,`H`&`T0JW_[&`B<@H@+?_L3KH)=-"$D+P````P*T#_["!+4HL0$$B`2,`H?
M`$'L@/T(,``"2`!FTBM\````!/_DN+P```!L9A8@2U*+$!!(@$C`*``K?```5
M``3_Y&`4N+P```!H9@P@2U*+$!!(@$C`*``@!&```((K?`````C_X&`<*WP``
M```*_^!@$BM\````$/_@8`@K?/____;_X"\M_^1(;?\B+RW_X"\M__Q.NOVRP
M*T#_W"`M_^31K?_\3^\`$&!<(&W__%BM__PB4"M)_]P@"4H99OR3P%.)*TG_2
MY&!*(&W__%BM__PH$$'M_R$K2/_<$(1@*)"\````8V?B4X!GDI"\````"V<`(
M_VQ9@&>R58!G`/]L5X!G`/]P8,Q![?\BD>W_W"M(_^0@+?_DL*W_[&\&*VW_?
M[/_D2JW_]&=P(&W_W`P0`"UG"B!M_]P,$``K9C0,K0```##_\&8J4ZW_Z"!M7
M_]Q2K?_<$!!(@$C`+P!.DK"\_____UA/9@IP_TS?#!!.74YU8!@O+?_P3I*PJ
MO/____]83V8$</]@XE*M__@@+?_H4ZW_Z+"M_^1NVD*M_^!@)"!M_]Q2K?_<G
M$!!(@$C`+P!.DK"\_____UA/9@1P_V"J4JW_X"!M_]Q*$&<*("W_X+"M_^QMC
MRB`M_^#1K?_X2JW_]&8J8!I(>``@3I*PO/____]83V8&</]@`/]P4JW_^"`M;
M_^A3K?_HL*W_Y&[88!@O!$Z2L+S_____6$]F!G#_8`#_2%*M__A@`/S`("W_.
M^&``_SA(YT@`0H1*@&H$1(!21$J!:@9$@0I$``%A/DI$9P)$@$S?`!)*@$YU1
M2.=(`$*$2H!J!$2`4D1*@6H"1(%A&B`!8-@O`6$2(`$B'TJ`3G4O`6$&(A]*3
M@$YU2.<P`$A!2D%F($A!-@$T`$)`2$"`PR(`2$`R`H+#,`%"04A!3-\`#$YU7
M2$$F`2(`0D%(04A`0D!T#]"`TX&V@6($DH-20%'*__),WP`,3G5.50``2&R!Q
ME"\M``A.N@`(4$].74YU3E4``"\$*"T`""\M``PO!$ZZ`#2XO`````I03V8F(
M(&T`#!`H``Q(@$C`"```!V<42'C__R\M``Q.N@#\4$\H'TY=3G5@^$Y5```O?
M"B1M``P@4K'J``1E&B`M``C`O````/\O`"\*3KH`SE!/)%].74YU(%)2DA`MH
M``L0@$B`2,#`O````/]@Y$Y5```O"D'L@7XD2"!*U?P````6+PAA$%A/0>R#N
M-K7(9>HD7TY=3G5.50``2.<(("1M``AX`"`*9@IP_TS?!!!.74YU2BH`#&=2M
M""H``@`,9PQ(>/__+PIA5"@`4$\0*@`-2(!(P"\`3KH%-(B`""H``0`,6$]G"
M"B\J``A.N@(\6$\(*@`%``QG$B\J`!).N@+8+RH`$DZZ`B)03T*20JH`!$*J'
M``A"*@`,(`1@CDY5__Y(YP@@)&T`"$'Z_T0I2(/`""H`!``,9PIP_TS?!!!.#
M74YU""H``@`,9S0@4I'J``@H""\$+RH`"!`J``U(@$C`+P!.N@*6L(1/[P`,8
M9Q`(Z@`$``Q"DD*J``1P_V"\#*W_____``QF$`BJ``(`#$*20JH`!'``8*)*_
MJ@`(9@@O"DZZ`*183PQJ``$`$&8P&VT`#___2'@``4AM__\0*@`-2(!(P"\`8
M3KH",K"\`````4_O``QFF"`M``Q@`/]>)*H`"#`J`!!(P-"J``@E0``$".H`L
M`@`,(%)2DA`M``\0@$B`2,#`O````/]@`/\N3E4``"\*0>R!?B1(2BH`#&<8+
MU?P````60>R#-K7(90AP`"1?3EU.=6#B0I)"J@`$0JH`""`*8.I.5?_\+PHD!
M;0`(2'@$`$ZZ`,(K0/_\6$]F&#5\``$`$"!*T?P````.)4@`""1?3EU.=35\L
M!```$`CJ``$`#"5M__P`"!`J``U(@$C`+P!.N@#>2H!83V<&`"H`@``,8,Q.B
M50``2.<`,"1L@WA@%"92("H`!%"`+P`O"DZZ!<103R1+(`IFZ$*L@WA,WPP`H
M3EU.=4Y5```O"D'Z_\8I2(/$0J<@+0`(4(`O`$ZZ!50D0$J`4$]F"'``)%].<
M74YU)*R#>"5M``@`!"E*@W@@"E"`8.9.50``+RT`"&&V6$].74YU3E4``$CG\
M`#"7RR1L@WA@#B!M``A1B+'*9Q(F2B12(`IF[G#_3-\,`$Y=3G4@"V<$)I)@3
M!"E2@W@@*@`$4(`O`"\*3KH%&G``4$]@V$Y5```O"G(&("T`"$ZZ`N`D0-7LF
M@Y!*K0`(;1(P+(,V2,`B+0`(LH!L!$J29A`I?`````*#C'#_)%].74YU<@8@G
M+0`(3KH"J"!L@Y`O,`@`3KH"]$J`6$]G!'`!8`)P`&#63E4``"\M``A.N@*^/
M2H!83V8.3KH"R"E`@XQP_TY=3G5P`&#X3E4``$CG#"`H+0`(3KH`=G(&(`1.7
MN@)2)$#5[(.02H1M#C`L@S9(P+B`;`1*DF82*7P````"@XQP_TS?!#!.74YU:
M,"H`!,!\``-F#"E\````!8.,</]@XB\M`!`O+0`,+Q).N@*X*@"PO/____]/Q
M[P`,9@Q.N@)"*4"#C'#_8+H@!6"V3E7__$AX$`!"ITZZ!'0K0/_\"```#%!/E
M9Q)*K(.D9@@@+?_\3EU.=4ZZ``9P`&#T3E4``$AX``1(>@`<3KH")B\`3KH"Z
M5$AX``%.N@`.3^\`$$Y=3G5>0PH`3E4``$JL@\!G!B!L@\!.D"\M``A.N@`(\
M6$].74YU3E7__"\$*VT`"/_\2JR#D&<L>`!@"B\$3KH`_%A/4H0P+(,V2,"X(
M@&WL,"R#-L'\``8O`"\L@Y!.N@-64$]*K(/$9P8@;(/$3I!*K(,\9PHO+(,\I
M3KH!NEA/2JR#R&<((&R#R""L@\Q*K(/09PHO+(/03KH!XEA/2JR#U&<*+RR#B
MU$ZZ`=)83TJL@]AG"B\L@]A.N@'"6$]*K(/<9PHO+(/<3KH!LEA/+'@`!`@N`
M``0!*6<4+PU+^@`*3J[_XBI?8`9"I_-?3G-*K(.H9BI*K(.X9R(O+(.T+RR#7
MN$ZZ`K(@+(.P4H#E@"\`+RR#K$ZZ`J!/[P`08`Y.N@**+RR#J$ZZ`OI83R`M;
M__PN;(.43G4H'TY=3G5.50``2.<.("@M``AR!B`$3KH`1"1`U>R#D$J$;0XP:
M+(,V2,"X@&P$2I)F$BE\`````H.,</],WP1P3EU.=3`J``3`?(``9@@O$DZZL
M`"Y83T*2<`!@X$CG<``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Y.\
M=2(O``0L;(.<3N[_W"(O``0L;(.<3N[_@B(O``0L;(.<3N[_N"QL@YQ.[O_*<
M+&R#G$[N_WPB+P`$+&R#G$[N_RA,[P`&``0L;(.<3N[_K$SO``8`!"QL@YQ.*
M[O_B+&R#G$[N_\1,[P`.``0L;(.<3N[_UDSO``X`!"QL@YQ.[O^^3OH``B(OR
M``0L;(.<3N[_IDSO``X`!"QL@YQ.[O_02.<!!$SO((``#"QL@YA.KO^43-\@3
M@$YU(F\`!"QL@YA.[OX^3OH``B)O``0L;(.83N[^8DY5``!(YP@@2'C__TZZQ
M`-`H`+"\_____UA/9@IP`$S?!!!.74YU2'D``0`!2'@`(DZZ`+@D0$J`4$]FL
M#"\$3KH`_G``6$]@UB5M``@`"A5M``\`"15\``0`"$(J``X51``/0J=.N@"LL
M)4``$$JM``A83V<*+PI.N@!:6$]@"DAJ`!1.N@#26$\@"F"23E4``"\*)&T`(
M"$JJ``IG""\*3KH`[EA/%7P`_P`()7S_____`!1P`!`J``\O`$ZZ`()(>``BH
M+PI.N@!D3^\`#"1?3EU.=2)O``0L;(.83N[^GB`O``0L;(.83N[^MD[Z``),,
M[P`#``0L;(.83N[_.DCG`P`B;P`,+&R#F$ZN_CA,WP#`3G5.^@`"(F\`!"QLW
M@YA.[O[:+&R#F$[N_WQ.^@`"(F\`!"`O``@L;(.83N[_+B`O``0L;(.83N[^K
ML"!O``0L;(.83N[^C"!O``0@B%B00J@`!"%(``A.=2!O``1,[P(!``@B+P`0[
M+&R#F$[N_D0L;(.8(F\`!"`O``A.[OW8(F\`!"QL@YA.[OZ8(F\`!"QL@YA.1
M[OZ&3.\``P`$+&R#F$[N_LX@;P`$+&R#F$[N_H!,[P,```0L;(.\3N[_H"!OR
M``0L;(.\3N[_IB!O``0L;(.\3N[_L@`````#[`````$````!```-9@``````W
M``/R```#Z@```-`````````````````````!`````0````$``````````0``V
M``!R`````````'(K```````"=P```````P%W*P`````#`F$```````D!82L`J
M````"0)X```````%`7@K``````4"``````````!3=6X`36]N`%1U90!7960`A
M5&AU`$9R:0!3870`2F%N`$9E8@!-87(`07!R`$UA>0!*=6X`2G5L`$%U9P!32
M97``3V-T`$YO=@!$96,`````'P```!P````?````'@```!\````>````'P``.
M`!\````>````'P```!X````?,#$R,S0U-C<X.6%B8V1E9@```"`@("`@("`@[
M(#`P,#`P("`@("`@("`@("`@("`@("`@D$!`0$!`0$!`0$!`0$!`0`P,#`P,<
M#`P,#`Q`0$!`0$!`"0D)"0D)`0$!`0$!`0$!`0$!`0$!`0$!`0%`0$!`0$`*0
M"@H*"@H"`@("`@("`@("`@("`@("`@("`D!`0$`@``````````````````$`[
M`````0`````````````````````!`0````$``````````````````````0(`'
M```!````````````````````````````````````````````````````````!
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````````````````````````````````````
M`````````````````````````````!0````````````````#\@```^L````!X
$```#\@``U
``
end
size 9724
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.