summaryrefslogtreecommitdiff
path: root/graphics/psfig
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/psfig
Initial commit
Diffstat (limited to 'graphics/psfig')
-rw-r--r--graphics/psfig/README88
-rw-r--r--graphics/psfig/doc/figs/box.ps11
-rw-r--r--graphics/psfig/doc/figs/cm.ps26
-rw-r--r--graphics/psfig/doc/figs/piechart.ps154
-rw-r--r--graphics/psfig/doc/figs/pretzel.ps14
-rw-r--r--graphics/psfig/doc/figs/rosette.ps76
-rw-r--r--graphics/psfig/doc/figs/starlines.ps40
-rw-r--r--graphics/psfig/doc/figs/trevor.ps583
-rw-r--r--graphics/psfig/doc/figs/zip.ps21
-rw-r--r--graphics/psfig/doc/psfig-doc.tex292
-rw-r--r--graphics/psfig/doc/psfig.man261
-rw-r--r--graphics/psfig/pscompress12
-rw-r--r--graphics/psfig/psfig.sty995
-rw-r--r--graphics/psfig/unsupported/arbortext.pro100
-rw-r--r--graphics/psfig/unsupported/dospecial.frag43
-rw-r--r--graphics/psfig/unsupported/dospecial.patch37
-rw-r--r--graphics/psfig/unsupported/graphpaper.ps78
-rw-r--r--graphics/psfig/unsupported/macdemo/README76
-rw-r--r--graphics/psfig/unsupported/macdemo/cleanfig3
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/box.ps11
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/cm.ps26
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/piechart.ps154
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/pretzel.ps14
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/rosette.ps76
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/starlines.ps40
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/trevor.ps583
-rw-r--r--graphics/psfig/unsupported/macdemo/figs/zip.ps21
-rw-r--r--graphics/psfig/unsupported/macdemo/lprep68.pro446
-rw-r--r--graphics/psfig/unsupported/macdemo/lprep68.procs439
-rw-r--r--graphics/psfig/unsupported/macdemo/lprep70.pro451
-rw-r--r--graphics/psfig/unsupported/macdemo/lprep70.procs450
-rw-r--r--graphics/psfig/unsupported/macdemo/macdemo.tex19
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb2
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gzbin0 -> 6829 bytes
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb2
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gzbin0 -> 2228 bytes
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb2
-rw-r--r--graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gzbin0 -> 597 bytes
-rw-r--r--graphics/psfig/unsupported/macdemo/stripfonts.awk5
-rw-r--r--graphics/psfig/unsupported/psfig-li.pro100
-rw-r--r--graphics/psfig/unsupported/psfig-li.tex391
41 files changed, 6142 insertions, 0 deletions
diff --git a/graphics/psfig/README b/graphics/psfig/README
new file mode 100644
index 0000000000..a847dad6e8
--- /dev/null
+++ b/graphics/psfig/README
@@ -0,0 +1,88 @@
+psfig/tex -- TeX macros for the inclusion of postscript figures
+
+==================================================================
+
+COPYRIGHT NOTICE
+
+All software, documentation, and related files in this distribution of
+psfig/tex are Copyright 1993 Trevor J. Darrell
+
+Permission is granted for use and non-profit distribution of psfig/tex
+providing that this notice be clearly maintained, but the right to
+distribute any portion of psfig/tex for profit or as part of any commercial
+product is specifically reserved for the author.
+
+Thanks to Ned Batchelder, Greg Hager, J. Daniel Smith, Tom Rokicki,
+Robert Russell, George V. Reilly, Ken McGlothlen, Dr. Baron Grey,
+Gerhard Tobermann and all others who have contributed code and
+comments to this project!
+
+==================================================================
+
+NEW IN VERSION 1.10
+
+- Support for OzTeX (derived from Baron Grey's OzTeX version of psfig)
+
+- New searching path algorithm (from Gerhard Tobermann); looks in
+ multiple directories; looks for file.ps before file.ps.bb...
+
+- Many small bug fixes (underscore in draft mode, angle/clip interaction)
+
+- Improved documentation and man page
+
+==================================================================
+
+SYSTEM REQUIREMENTS
+
+Psfig/tex uses \special calls to manipulate the PostScript environment
+within a document, and include figure files. To use psfig, you must
+therefore be using a postscript device for your output. This version
+of psfig/tex works with the unix "dvips" PostScript driver, which is
+available from labrea.stanford.edu, and with OzTeX.
+
+It may also work with the ArborText "dvips" driver, and with the
+"dvi2ps" written by Tony Li <tli@sargar.usc.edy>; see the
+"unsupported" directory.
+
+==================================================================
+
+INSTALLATION
+
+To install psfig, simply copy psfig.sty into a directory on your TeX
+include path (e.g. /usr/lib/tex/macros).
+
+If you are using OzTeX, change the driver line at the top of
+the psfig.sty file to read
+ \def\setDriver{\OzTeXDriver}
+instead of
+ \def\setDriver{\DvipsDriver}
+
+
+A users guide and manual page can be found in the "doc" directory.
+
+For tips on dealing with Macintosh postscript, see the directory
+"unsupported/macdemo/README".
+
+==================================================================
+
+BUGS
+
+If you use the letter style, make sure you include the psfig style
+first.
+
+If you have an old version of dvips, you may need to make a patch to
+use the compressed figure option, and to handle magnification
+correctly. The files "unsupported/dospecial.[patch,frag]" contain a
+patch and a corresponding code fragment for dvips' dospecial.c file.
+To apply the patch copy dospecial.patch into your dvips directory and
+run "patch < dospecial.patch", and then recompile. "dospcial.frag"
+contains the modified portion of the code as it should appear in the
+patched file. To use magnification with psfig and dvips, you need to
+change the line
+ /magscale false def
+in special.pro to
+ /magscale true def
+in order to have the figures scaled correctly.
+
+
+
diff --git a/graphics/psfig/doc/figs/box.ps b/graphics/psfig/doc/figs/box.ps
new file mode 100644
index 0000000000..ca6807a138
--- /dev/null
+++ b/graphics/psfig/doc/figs/box.ps
@@ -0,0 +1,11 @@
+%!
+%%BoundingBox: 0 0 1 1
+newpath
+0 0 moveto
+1 0 lineto
+1 1 lineto
+0 1 lineto
+closepath
+.8 setgray
+fill
+
diff --git a/graphics/psfig/doc/figs/cm.ps b/graphics/psfig/doc/figs/cm.ps
new file mode 100644
index 0000000000..93b94b0a3b
--- /dev/null
+++ b/graphics/psfig/doc/figs/cm.ps
@@ -0,0 +1,26 @@
+%!
+%%BoundingBox: 27.47 27.47 172.52 172.52
+
+100 100 translate
+newpath
+ 0 0 moveto
+ 0 0 72 0 90 arc
+ closepath
+ fill
+
+ 0 0 moveto
+ 0 0 72 90 180 arc
+ closepath
+ stroke
+
+ 0 0 moveto
+ 0 0 72 180 270 arc
+ closepath
+ fill
+
+ 0 0 moveto
+ 0 0 72 270 360 arc
+ closepath
+ stroke
+
+showpage
diff --git a/graphics/psfig/doc/figs/piechart.ps b/graphics/psfig/doc/figs/piechart.ps
new file mode 100644
index 0000000000..164583e8d8
--- /dev/null
+++ b/graphics/psfig/doc/figs/piechart.ps
@@ -0,0 +1,154 @@
+%!
+%%BoundingBox: 126 246 486 546
+% Cookbook Example Program from First Printing, Revised 7 Jan 1985
+% Program: Drawing a Pie Chart Number: 18
+%-----------------------------------------------------------------------------
+%
+/PieDict 24 dict def % Local storage for
+ % ``DrawPieChart'' and its related
+ % procedures.
+PieDict begin
+ /DrawSlice % DrawSlice draws an outlined and
+ { /grayshade exch def % filled-in pie slice. It takes
+ /endangle exch def % four operands: the label for
+ /startangle exch def % this particular pie slice, the
+ /thelabel exch def % starting angle for the slice,
+ % the ending angle for the slice
+ % and the shade of gray the slice
+ % should be.
+
+ newpath % Create a path which will draw a
+ % pie slice.
+ 0 0 moveto
+ 0 0 radius startangle endangle arc
+ closepath
+
+ 1.415 setmiterlimit % This guarantees that when we
+ % outline the pie slices with a
+ % stroke that we will not get a
+ % spike on the interior angles.
+ gsave grayshade setgray fill grestore % Fill the pie slice path with the
+ stroke % appropriate gray color. By using
+ % gsave and grestore we don't lose
+ % the current path. Since
+ % PostScript paints color onto the
+ % page, it is very important that
+ % we fill the pie slice first and
+ % then outline it with a stroke.
+ gsave % Draw the tick mark and place the
+ % label:
+ startangle endangle add 2 div % Find the center of the pie slice
+ rotate % and rotate so that the x-axis
+ % coincides with this center.
+ radius 0 translate % Translate the origin out to the
+ % circumference.
+ newpath
+ 0 0 moveto labelps .8 mul 0 lineto% Draw the tick-mark.
+ stroke
+ labelps 0 translate % Move the origin out a little
+ % beyond the circumference.
+ 0 0 transform % Next we wish to place the label
+ grestore % at the current origin. If we
+ itransform % simply draw the text on the page
+ /y exch def /x exch def % now, it would come out rotated.
+ x y moveto % Since this is not desired we
+ % avoid it by returning to the
+ % previous unrotated coordinate
+ % system. Before returning,
+ % though, we would like to
+ x 0 lt % remember the position of the
+ { thelabel stringwidth pop neg % current origin on the printed
+ 0 rmoveto % page. We will accomplish this by
+ } if % using the transform and
+ % itransform operators. Performing
+ % a transform on the origin pushes
+ % the coordinates of the origin in
+ % device space onto the operand
+ % stack. Performing a grestore
+ % returns us to the previous
+ % unrotated coordinate system.
+ % Next we perform an itransform on
+ % the two device coordinates left
+ % on the stack to determine where
+ % we are in the current coordinate
+ % system.
+ y 0 lt { 0 labelps neg rmoveto } if % Make some adjustments so that
+ thelabel show % the label text won't collide
+ } def % with the pie slice.
+ /findgray % Procedure findgray calculates
+ { /i exch def /n exch def % the gray value for a slice. It
+ i 2 mod 0 eq % takes two arguments: the total
+ { i 2 div n 2 div round add n div } % number of slices and the current
+ { i 1 add 2 div n div } % slice number (Given that there
+ ifelse % are n pie slices, the slices are
+ } def % ``numbered'' from 1 to n). The
+end % gray values for the pie slices
+ % range evenly from white to black
+ % (i.e. - the values provided to
+ % setgray range from (n/n, n-1/n,
+ % ..., 1/n)). Since we don't want
+ % similar values of gray next to
+ % each other, findgray
+ % ``shuffles'' the possible
+ % combinations of gray.
+
+/DrawPieChart % DrawPieChart takes seven
+ { PieDict begin % arguments: the title of the pie
+ /radius exch def % chart, the point size to print
+ /ycenter exch def /xcenter exch def % the title in, the point size to
+ /PieArray exch def % print the labels for each slice
+ /labelps exch def /titleps exch def % in, a special array (described
+ /title exch def % below where DrawPieChart is
+ % called), the (x,y) center of the
+ % pie chart and the radius of the
+ % pie chart.
+
+ gsave
+ xcenter ycenter translate % Translate the coordinate system
+ % origin to center of pie chart.
+ /Helvetica findfont titleps % Print the title of the pie chart
+ scalefont setfont % in Helvetica.
+ title stringwidth pop 2 div neg % Center the title below the pie
+ % chart.
+ radius neg titleps 3 mul sub
+ moveto title show
+ /Helvetica findfont labelps % Print the individual pie slice
+ scalefont setfont % labels in Helvetica
+ /numslices PieArray length def
+ /slicecnt 0 def
+ /curangle 0 def % A ``loop'' variable that keeps
+ % track of the angle of arc to
+ % begin each pie slice at.
+ PieArray % Repeat the following for each
+ % element in the PieArray.
+ { /slicearray exch def
+ slicearray aload pop % Push the label and percentage
+ % onto the stack.
+ /percent exch def
+ /label exch def
+ /perangle percent 360 mul def % Convert the percentage into
+ % degrees of angle.
+ /slicecnt slicecnt 1 add def
+ label curangle
+ curangle perangle add
+ numslices slicecnt findgray
+ DrawSlice
+ /curangle curangle perangle add % Update the current starting
+ % angle.
+ def
+ } forall
+ grestore
+ end
+ } def
+
+() 18 9
+ [ [(Blueberry) .12 ] % The pie array is an array of
+ [(Cherry) .30 ] % arrays. Each array in the pie
+ [(Apple) .26 ] % array contains a string denoting
+ [(Boston Cream) .16 ] % the label to be printed next to
+ [(Other) .04 ] % the pie slice followed by a real
+ [(Vanilla Cream) .12 ] % number indicating the percentage
+ ] 306 396 100 DrawPieChart % of the pie represented by this
+ % particular slice.
+showpage
+
diff --git a/graphics/psfig/doc/figs/pretzel.ps b/graphics/psfig/doc/figs/pretzel.ps
new file mode 100644
index 0000000000..e6bbf413b3
--- /dev/null
+++ b/graphics/psfig/doc/figs/pretzel.ps
@@ -0,0 +1,14 @@
+%! pretzel.ps -- an example for the psfig paper.
+%%BoundingBox: 95 100 185 200
+
+5 setlinewidth
+1 setlinecap
+110 100 moveto
+120 120 140 160 160 160 curveto
+170 160 180 150 180 140 curveto
+180 120 160 100 140 100 curveto
+120 100 100 120 100 140 curveto
+100 150 110 160 120 160 curveto
+140 160 160 120 170 100 curveto
+stroke
+showpage
diff --git a/graphics/psfig/doc/figs/rosette.ps b/graphics/psfig/doc/figs/rosette.ps
new file mode 100644
index 0000000000..2ab4424b55
--- /dev/null
+++ b/graphics/psfig/doc/figs/rosette.ps
@@ -0,0 +1,76 @@
+%!
+%%BoundingBox: 124.38 124.38 487.61 487.61
+% Cookbook Example Program from First Printing, Revised 7 Jan 1985
+% Program: Repeated Shapes Number: 6
+%-----------------------------------------------------------------------------
+%
+ % This program prints a rosette
+ % design by defining a section of
+ % that design and printing that
+ % section repeatedly. This program
+ % illustrates the ``for'' and
+ % "arc" operators, and it shows
+ % how coordinate transformations
+ % can be nested so as to use the
+ % most convenient coordinate
+ % system for each part of a
+ % design.
+/inch {72 mul} def
+
+/wedge % Define an ``ice cream cone''
+ { newpath % shape by means of the ``arc''
+ 0 0 moveto % operator. This shape will have a
+ 1 0 translate % 30 degree angle topped off with
+ 15 rotate % a semicircle. Set the path's
+ 0 15 sin translate % first point at the current
+ 0 0 15 sin -90 90 arc % origin. Next, move the origin to
+ closepath % the center of the semicircle by
+ } def % translating to the right 1 unit,
+ % rotating counter-clockwise by 15
+ % degrees, and translating ``up''
+ % in the rotated system by the
+ % radius of the semicircle. The
+ % ``arc'' operator includes a
+ % straight line to the initial
+ % point of the arc and a curved
+ % section to the end of the arc.
+ % Note that the semicircle goes
+ % from -90 degrees to 90 degrees
+ % in the rotated coordinate
+ % system.
+
+gsave
+ 4.25 inch 4.25 inch translate % Move into position for the
+ % rosette.
+ 1.75 inch 1.75 inch scale % Make the edges of the rosette 1
+ % 3/4 inches long.
+ 0.02 setlinewidth % Use a 7/200 inch thick line.
+ 2 1 13 % Set up the ``for'' operator to
+ % iterate 12 times, pushing 2 onto
+ % the stack the first time, 3 the
+ % next time, ... , and 13 the last
+ % time.
+ { % The last argument for ``for'' is
+ % the sequence of operations to be
+ % repeated. This sequence must be
+ % enclosed by braces.
+ 13 div setgray % Divide the loop index by 13 to
+ % set a gray value.
+ gsave % Enclose the ``wedge'' operation
+ wedge % in a ``gsave''-``grestore''
+ % pair, as it will mess up the
+ % coordinate system.
+ gsave % Save the wedge path for use
+ % after the ``fill''.
+ fill
+ grestore
+ 0 setgray stroke % Draw a black border around the
+ % wedge.
+ grestore % Get out of the coordinate system
+ % left by wedge.
+ 30 rotate % Set up for the next section.
+ } for % Close the last argument and
+ % execute the ``for'' operator.
+grestore
+showpage
+
diff --git a/graphics/psfig/doc/figs/starlines.ps b/graphics/psfig/doc/figs/starlines.ps
new file mode 100644
index 0000000000..a7cf877ea6
--- /dev/null
+++ b/graphics/psfig/doc/figs/starlines.ps
@@ -0,0 +1,40 @@
+%!
+%%BoundingBox: 300 400 410 420
+/Times-Roman findfont
+30 scalefont setfont
+newpath
+300 400 translate
+.25 setlinewidth
+0 0 moveto
+(StarLines) true charpath clip
+
+/rays {
+ 0 1.5 179
+ { gsave
+ rotate
+ 0 0 moveto
+ 108 0 lineto
+ stroke
+ grestore
+ } for
+} def
+
+
+newpath
+54 -15 translate
+rays
+showpage
+
+
+
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
diff --git a/graphics/psfig/doc/figs/trevor.ps b/graphics/psfig/doc/figs/trevor.ps
new file mode 100644
index 0000000000..b46453479a
--- /dev/null
+++ b/graphics/psfig/doc/figs/trevor.ps
@@ -0,0 +1,583 @@
+%!PS-Adobe-1.0
+%%Title: trevor
+%%Creator: Ned Batchelder
+%%CreationDate: Wed Mar 26 11:05:04 1986
+%%BoundingBox: 72 72 432 525
+
+%%Pages: 1
+%%EndComments
+/doimage {
+ /b exch def /m exch def /n exch def
+ /pix n string def
+ n m b [n 0 0 m neg 0 m]
+ { currentfile pix readhexstring pop }
+ image
+} def
+/spotsize {
+ /perinch exch def
+ currentscreen 3 -1 roll
+ pop perinch
+ 3 1 roll setscreen
+} def
+/invert {
+ /curtran currenttransfer cvlit def
+ /newtran curtran length 3 add array def
+ newtran 0 {1 exch sub} putinterval
+ newtran 3 curtran putinterval
+ newtran cvx settransfer
+} def
+72 72 translate
+%%EndProlog
+%%Page: ? 1
+360.000 453.600 scale
+60 spotsize
+112 176 8 doimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefbffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffdeaffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffdf2ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac8ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffacb
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefefdfcfcfdfefffffefbf8fafdfeffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff8b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefefcf7eddbc9c1c1cbd9e5eff1d9b5b3c8
+e0f3f7fafeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffbd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffef9f0ddc3a88e725d56565e6e82949e
+8c65545d759bb6d0f5fefefefdfeffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffad3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffefef9e4bf99785f4f443d38363539
+3f484b4e4c423d3b3b485a77bbf0fdfaf2f4fdffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffff6a2ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffefdf6dfb98b644b3f39383735
+32302f31343738393a383c3f3735394576c6eefbf7f0f5fdffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffef5d8ae805b453a3734
+32333333302e2d2e30313336393a393a3a3536384e8ad0f7fefaeff8feffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefce8b98159463b
+363535363536353434322f3031303234383c3e3835343536405da3e8fcfef2f2feffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffff9c7ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef5d59b64
+49403b3735343433333333333231303335322f30333a4040373233383f486ec3f0fcf8ec
+fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff59bffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbe9
+ba7d503d383634323233312f2f2e2b2b2b2c2c2f3235312d2c3038403c3533383d404d8b
+d0f1faebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff599
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fef5d199654437343433302e2f312e2b2a2726272a2c2c2c2d3135332d2b2f3a3e383432
+3a3d405c9cd4eeeefaffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff8c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffdecbe7d4f3a353333312e2b2829282624252627282929292b2b2b3038352e2b30
+393b3730323a38416eaedbedfcffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff7b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffce5a96944353132302e2b2928272928272727292926232325272c2f2e31
+332e2b29303837302d3436375583bed8f2feffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffff8bcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffde5a6643f343333312e2b2a2a2c2d2f2f2e2d2e2f2d2a27262729
+2d30303030312f2a293137332b2e32333f5e83a0c3e9f8fdfeffffffffffffffffffffff
+fffffffffffffffffffffffffffff9c7ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffef0af6a4436333333302f2d2d2e2f2e2d2d2f2e2f302e2d
+2c2d2f31322f2c2e3234332c272c33342c2a2d30323f53667ca7cadff2fdffffffffffff
+fffffffffffffffffffffffffffffffffffffad3ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffff8c8774b3b35322f2e2d2c2b2c2d2f2d2b2c2e2d
+2d302f2e2d2d2f3132322d292d333933282b2e32312c2c2c2e333e4b597498b9d2ecfdff
+fffffffffffffffffffffffffffffffffffffffffffff8bfffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffee18e523d35312b272525252424272a2b
+2a2a2a28292a2b2c2b2b2c2e3032332f2b2c34382e292c2d2f2d2c2a2d2f333b4655688b
+bfdef3fdfffffffffffffffffffffffffffffffffffffffffffffacfffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffef8b7633f332e2a252424252524
+222323252526242121222426282727282a2d35372f282a35382c29282a2d2e2c2b2e2f31
+383c455784bfe1f5fefffffffffffffffffffffffffffffffffffffffffffdf1ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcda7f45322a27252628
+28282928262423262726252422222020232527292b2e31333129252831312a2525292c2e
+2c2b2e2b3032353c4d77b3d9fafffffffffffffffffffffffffffffffffffffffffffbdd
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeefa253352b26
+2527282625262828272827262626282a26242122262a2b29292c2f3235302623262d2d26
+2426292e2d292b2a2b2e2f333b4a70a8ebfeffffffffffffffffffffffffffffffffffff
+fffffad5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbca70
+3f2f2926242425222021222324272b2a2927282a292928282a2c2d2c2c333633312f2a26
+222327282625262b2f2b282a2a2b2c30363b486bc8fbffffffffffffffffffffffffffff
+fffffffffffff9d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fee7934c352e29272727272522222223222124272726282b2a2a2a2a2b2b29292c343936
+2e29262623202124282624272b2b27292a292a2f33363d4c90eafeffffffffffffffffff
+fffffffffffffffffffff9d3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff7ba6038312d28292b2c2c2a26242426231e1d1f212225282828282928242223
+293136342f2a26232122212124242426282b2b2a2928282c31353a4260bbf9ffffffffff
+fffffffffffffffffffffffffffff8bbffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffedf844434312d2b2c2c2c2c292725242625221f1e1d1e212426262425
+24212022262b2f2d2a292724202021202223232525282a2d292526292e353c414b81e1fe
+fffffffffffffffffffffffffffffffffffff7b2ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffff9b75c3934312e2e2e2b28272524222426262525211e1f2225
+292926252323262c2e2f2e2b2825242423211e1f212223222325282c2a2625272a313940
+475baff6fffffffffffffffffffffffffffffffffffff7bdffffffffffffffffffffffff
+fffffffffffffffffffffffffffffee88b453735302e2b2a282625222223242626272724
+22232425282b28252324282f32312e2a2827242221201e1d1f2023222224282b2b272628
+2a2d333c434e81dffefffffffffffffffffffffffffffffffffff6abffffffffffffffff
+fffffffffffffffffffffffffffffffffffff9be623b36312b2824222223242323252728
+262625242424222022262624232123282c2a272423232220201f1d1c1d2022232322262a
+2c2a2626282b2f373b4660b6f8fffffffffffffffffffffffffffffffffff7b6ffffffff
+fffffffffffffffffffffffffffffffffffffffffffee9924a37322b2523212021232624
+24252b2b2726252425262322222122232322232426292c2e2a26221f1f1e1d1c1e202324
+24232426292a2725272b2e32373f4e86e4fefffffffffffffffffffffffffffffffff9c8
+fffffffffffffffffffffffffffffffffffffffffffffffffffdd46f3d312a2422222220
+20212322222124262626262526252322211e212221201f2022252c32332e2925221f1d1e
+2024282a292927252627282526292f3233394463bef9ffffffffffffffffffffffffffff
+fffffbddfffffffffffffffffffffffffffffffffffffffffffffffffef7b155332a2422
+21211f1e1f202223221f1d202324252526231f1d1d1e2528272220202226272a2e2d2a27
+23212020242a3136363430282422242626262a3134363e4f8fe8feffffffffffffffffff
+fffffffffffffad0fffffffffffffffffffffffffffffffffffffffffffffffffee3853f
+2d27232222222221212326262320212121202121232422202123282c302f2b2b2c2c2b2c
+2d2c2927252524262e3a444e504b4435292321232827292d32363a4264c3f9ffffffffff
+fffffffffffffffffffff8bdffffffffffffffffffffffffffffffffffffffffffffffff
+f6b65930282523242425242123262622212123222020212123262827272426292f343131
+32302d2b29272524252529314057646e74695b48322621222728292c30363b3f4b8be8fe
+fffffffffffffffffffffffffffffce9ffffffffffffffffffffffffffffffffffffffff
+fffffffee1843c2824252525252524232526242020212322222122212225282927242323
+272a2a2c2f2c28262625242324293547627f8b91958a755e412b23212529292b2e33373e
+4461c4fcfffffffffffffffffffffffffffffce8ffffffffffffffffffffffffffffffff
+fffffffffffffffac05e2f2524242525242221232525242322212221201f202123252422
+201f1f1f2121242626272728272625272a374c6683a5acaba9a090745436252123292b2b
+2d3033383d4c99f1fffffffffffffffffffffffffffffad7ffffffffffffffffffffffff
+fffffffffffffffffffffef19843292524222223221f1e202122232623202021211f1e1f
+242625211d1d1e1f2121232627272a2e2e2c2b2d364e6d89a0bec4bfb6aca18c6c472c22
+21262a2e2f303336384171d4fcfffffffffffffffffffffffffff9c9ffffffffffffffff
+fffffffffffffffffffffffffffffee075332826232120201f1e1c1c1d1e222524201e21
+22201c1a1e222423201f21242425282b2f302f302f2f30384b6b8eacbfcbcec9c0b4aa9b
+82613d262124272d30313637373e5fa9ecfefffffffffffffffffffffffffce5ffffffff
+fffffffffffffffffffffffffffffffffffffbc3592e28241f1e1e1d1e1d1c1c1d1e2123
+23201f1f1f1d1b191a1c1e20212021232425282a3035363333343b4e698eb4c9d1cfcecb
+c6baac9f917f5931242425282d32373a383e609fe0fcfffffffffffffffffffffffffad6
+ffffffffffffffffffffffffffffffffffffffffffffef9d452b27221e1d1b1c1c1c1d1e
+1e1e21222221201e1c1b1b1b1b1d1c1c1e1d1c1e1f212224272e3539414f647f9dc0d7db
+d8d3d0cecabfb0a49c9378472924252429303538353c5b96dcf8feffffffffffffffffff
+fffff8b9fffffffffffffffffffffffffffffffffffffffffffdd977382924201e1c1b1b
+1b1c1e1e1d1f2221201f1d1c1b1b1c1c1e1f1e1f211f1d1e1f202023252b3549657f96ae
+c9d8dfded9d6d1cfcdc2b4aaa39e8e6333252623242b313231374d83d2f1fdffffffffff
+fffffffffffffad1fffffffffffffffffffffffffffffffffffffffffff9b85c3126231e
+1d1c1d1d1c1c1c1c1b1c1e1f1e1d1c1c1d1e1e1f20202024272222222224262a2f364568
+8aa3b9cfe0e0dcdbd8d8d3d0cdc2bab1a7a29c7f492a282524282d2f2f354c78beeffdff
+fffffffffffffffffffff8c1fffffffffffffffffffffffffffffffffffffffffef09c4a
+2c25211e1d1d1d1d1e1c1a191a1d201f1e1e202122222222222223252421232526292c34
+3c455d85a9c0d4e4eae6dedadadad5d0ccc6c0b8ada5a3926334292928292d302f365d95
+d0f6fefffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffffffffffff
+fdda7b3e2a24201e1e1c1c1d1e1c1a191a1c1e1d1d1f2225262624222121202121212327
+2a2b303a455778a2c3d6e2e8eaeae4dcdadad6d1cdcbc5bcb0a9a59b77402a2a2b2c3034
+313b7bcaf5fefffffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffff
+fffffffffac061362924201e1d1b1b1d1e1d1b1a1a1b1c1c1e202224252424212020201f
+1e2124272a2e36455a779dbfd5dfe2e5e7e9e7dfdcdad7d3cfcdc8bfb2aba9a0844f2e2a
+2a2e323734429bf1fefffffffffffffffffffffffffffad2ffffffffffffffffffffffff
+fffffffffffffffff4a9513227231f1e1c1b1b1d1e1d1b1a1a1b1c1d1e1f201f1e1e2121
+201f1f1f20232529303c4f647e9dbbd0d9dcdde2e6e8e6e3dfd8d5d4d1cfc8bdb2adaca2
+8c5e332b2c2e32383745a8f8fffffffffffffffffffffffffffff9c5ffffffffffffffff
+ffffffffffffffffffffffffeb94492f25211e1d1c1b1c1c1d1c1b1a1a1c1d1d1c1d1f1f
+1e1e1f1e1f20212224262a34465d758ba0b4c7d1d4d8dce0e4e5e6e5e1d9d6d6d4cfc7bb
+b3afada59167382d2c292e3437439af3fffffffffffffffffffffffffffffad3ffffffff
+fffffffffffffffffffffffffffffffee17f412e24201e1c1b1c1e1e1f1e1d1b1c1c1c1b
+1b1c1e202021211e20232325282b364e6a8095a3b0becad1d6e0e5e9eaeaecece5dddad8
+d7d2c7bbb4afaba7956f3d2e2c25292f333d81e8fffffffffffffffffffffffffffffbdc
+fffffffffffffffffffffffffffffffffffffffccf693a2b23201e1b1b20262827262220
+1e1c1c1b1a1b1d202324211f2125282a2f3953728b9aa7aeb5c1cbd3dde8eef4f5f7f8f4
+ece5e0dbd7d3cabdb6b0aaa4967443312e24252a2f3770e0feffffffffffffffffffffff
+fffff8bafffffffffffffffffffffffffffffffffffffff8b256352a25221e1b1d2a3b3f
+37312f2c261f1d1b1b1d1e202525212024292f373f547691a0a9aeb3b9c1cbd6e3eef3f9
+fcfdfdf9f1e9e2ddd7d2ccc4bab2aaa495774833302524262c3363d8feffffffffffffff
+fffffffffffff9c9fffffffffffffffffffffffffffffffffffffff399442f2925231f1b
+20354b534d4647463a2b25201e211f1f2222202329303c49537495a8aeb0b3b8bfc8d5e2
+eef7fafcfefefdfbf4e9e2ded5d0ccc7bfb6ada393794a332f2421242b315dd3feffffff
+fffffffffffffffffffffad3fffffffffffffffffffffffffffffffffffffee681382b26
+2525201c233a535e5e5a5c5c54463d342a23232222222429303d4f596f95acb8bab9bdc2
+cbdae5edf3fbfefefefffefbf5eae1dcd4d0cdc8c1b9afa2937c4d332d2320242a305ad1
+fdfffffffffffffffffffffffffff9cbfffffffffffffffffffffffffffffffffffffdd3
+6a2f26242426201c253d556063646666635f584f4034302d2c2e30343d4c5c7499afbac2
+c7ccd3d6dce8edf0f6fdfefffffffefbf5ece5dfd7d3d0cbc3bbb1a4967e4d332c241f24
+292f5ed6fefffffffffffffffffffffffffff7b1ffffffffffffffffffffffffffffffff
+fffffccc602c23212226211d243b535f636669696a6c69665b514e4d4a4a4c4d54627a9d
+b6c1cad4dde3e7e6e7eceff4fbfefffffefefefcf7efeae3d9d8d7d2cabeb4a79a824f34
+2e241f24282d5cd3fefffffffffffffffffffffffffff7b7ffffffffffffffffffffffff
+fffffffffffffbc65929211f2024221e243a515f63676a6b6d6f70726f6b6c6e6e707375
+7f92aac0ccd5e0e9eeeff0eeedeff1f6fcfefffffefcfcfcf8f1ebe2dbdadad5cfc5b7a9
+9a824d302e242023272b59cffdfffffffffffffffffffffffffffad0ffffffffffffffff
+fffffffffffffffffffffab94d26201e1f23221f2338505f64696b6c6e70737577787a7f
+858c9299acc1cdd7dee6eef1f3f3f2f2f1f4f5f8fcfefffffdf4f5faf8f2ece2d9d8d9d5
+d0c8bbab9b834c2d2a242223262955ccfdfffffffffffffffffffffffffff8bbffffffff
+fffffffffffffffffffffffffffff9b34825211e1e22232022324a5d666a6c6c6f727578
+7a7c8189929aa2aec1d3dce4e9eef2f4f5f4f2f5f6f8f8fbfcfcfefefdf7f5f8f3ece9df
+d3cecdcbcac6beaf9f88522e2a252223252748bafbfffffffffffffffffffffffffff8ba
+fffffffffffffffffffffffffffffffffffff6ab4325211e1d212521202c465a656a6c6d
+6f72767a7f8289919aa2acb7c7d5e1e9edf0f3f3f3f2f4f5f7f8f8f8f8f8fdfcf9f4f3f0
+e5dad4c6b8afa9a9b3bdbbb0a28c582e2925222223263ea9f9ffffffffffffffffffffff
+fffff7adfefefefffffffffffffefefefffffffefefef09b3d231e1d1d21251f1c284257
+63696c6f6f73787e848990969ea5aeb8c5d1dce0e7e9edefefeef0f1f1f4f4f3f3f3f6f2
+eae4dfd2bfafa190837c75768297a8aaa18d5a2d2724201f21243ba3f8ffffffffffffff
+fffffffffffff7b9fdfefefefefefefefefefdfdfefefdfdfdfdec973d231e1e1f232620
+1c243c54636a6d6f71777c838a8f949aa1a6adb5bdc6cfd4dadee1e6e9e9ebeae7e9ecef
+eeebe5ddd7cdb79c7f6c635a53514c4e5362788e978e612f2723201f2124399ff8ffffff
+fffffffffffffffffffff8bafbfcfbfcfbfcfcfcfbfcfbfbfbfaf9f9f9faeb993f231e1e
+202528201b21375160696e70727981898e92969da2a6aaafb6bcc3c5cbd1d5dbe1e1e4e1
+dddce1e5e2dbd3c6bba37f62493f3d3b3b3b3a3b3f4751607583673226221e1e20233698
+f6fffffffffffffffffffffffffff8b6f7f7f8f7f7f8f8f6f6f8f6f6f6f4f3f3f4f5e595
+40241f1f222526201c1f324d5d666c707379848c9093979c9fa1a5aaaeb0b3b4b9c2c9cd
+d5d8dcd9d2d0d4d8d2c7bdae9775544135302f30353a3c3d4144484e5a706a3625221e1e
+2022328cf3fffffffffffffffffffffffffff5a5f3f3f5f4f3f2f2f2f2f2f1f1f0f0eff0
+f0eedb9041261f1f212323201c1d2a465a646b6f747a838b90919294969a9d9d9d9fa0a4
+a9afb7bfc8cdd0cfc9c6c9cbc4b9ab92735642362e2b2e3a4a545a5c5b58585755636b3e
+2521201f20212c7aebfffffffffffffffffffffffffff7b4f0f1f1f1f0efefeeefeeedee
+ededececebe9d08a4328211f2021211f1c1d253f57636a6e757c8288898482807c7d7f7b
+797a818d9498a3b0b9bdc2c6c0bebfc1bbaf9a77584337322f34445b6b757b7a77746f66
+6168704a2822232422232a68defefffffffffffffffffffffffff9c5eceeeeeeedececec
+ececebebeaeae9e8e8e5cc8b4528211f1f1f1e1d1c1b20365261696d737c817f7669605c
+5756554f4d5159687178889ba8adb6bcbcbcbdbcb3a38b694d3f38353a475869737a8282
+7f7c79737078805d2c24262825252b58cefdfffffffffffffffffffffffff8beeaebeaea
+eaeae9e9e8e8e9e8e6e7e6e4e5e2cd8d4527211f1d1d1d1c1a191c2f4d5f686d72787467
+5b4d413d3b39363233383b434b556880939daab5bec4c3beb19c81654f47423d41495562
+65646f7476787a797a858c6c3123272a29292e52c3fcfffffffffffffffffffffffff7af
+eaeae8e8eae8e6e7e6e6e6e7e5e4e3e2e2dfcc8e442722201e1c1c1b1b1a1b2a4a5f696e
+706b5b4b4037312d2b2a2726282c2c2e343d4f677e8fa2b3c1cecec4b29b806a584b4342
+464a4d5251525b5e5e6975797d89927a3a23262b2d2c2e50bffbffffffffffffffffffff
+fffff8bbe9eae8e7e8e6e5e6e4e5e4e4e3e2e1e0e0dbc487422924211f1d1c1b1a191925
+475f686c69574136312c2927272623222528292b2d3443566c8099b3c9d5d6ccb59c856e
+584a4848433d3b473c464b514f5468757f8b9584462627292b2b2c52c2fbffffffffffff
+fffffffffffffacee8e8e6e6e5e5e6e5e3e4e4e4e2e1e0e0e0dac2833f272323201e1c1a
+1a1a1a22435f68675b44332d2c2c2e3033322f2d2d2d2e2e2f36424d5e7390b1cfe0e4d7
+b99d866e58504f4942413c6746555043464e5b6f7f8c968e542a29292a292b5ccdfcffff
+fffffffffffffffffffff8bee7e7e5e5e4e5e5e4e4e3e3e3e2e1e1e1e0d9bf7d3e272223
+221f1c1a1a1a1820415f665c49393332373e444a4c48413b34302f2e30374149566a89b1
+d6e9f3dfbb9d8770605a585d5047374d4e6c69544c555f6d808e989364302929292b2f71
+ddfdfffffffffffffffffffffffffacae7e6e5e4e3e4e3e4e3e3e3e3e2e1e1e0e0dbc07f
+4027212022201b181919191f3d5e61503f38373d4952585b574f463e3a383b3834363d48
+546580a9d2e9f4dfbca18b7b71696d7f664f444b5d82826f66676d7583939c9873382b2b
+2a2d3889ecfefffffffffffffffffffffffffbdae6e6e5e5e3e4e3e3e2e3e2e3e2e1e1e0
+dfdac1834328211f1f1f1c191919191f3d5d5b483e40454c555a5a54483f3b34393d4647
+443e3f485464789cc9e3ecdabaa5938f888083907d635d66798d8e83838788888f9ea39d
+7d403636313049abf8fefffffffffffffffffffffffff8bbe5e4e5e5e3e3e4e2e2e3e1e2
+e2e1e1dfded9c28b4b2a201e1e1c1a181918191f3e5d5a4d494b505558544b43382d2b28
+444d59574c4e4b4e56647495c2dfe7d6b9a79a9e98908e8d857a788191999b9a9ca1a3a2
+a3abaca38449454c423d6ed6fdfffffffffffffffffffffffffff8bae6e5e5e4e3e2e2e2
+e2e1e0e1e0e0e0dededccca35f2f201e1e1b1a1818191a1f3e5e5e585654545450443936
+312d2d273d55828b6153595b5b627190b9d8e1d4bca99da1a39f968e86838891a0a9acaa
+a9aeb1b2b3b7b3aa8f5a515e5759a1f0fffffffffffffffffffffffffffff7ade6e6e6e5
+e4e2e2e3e3e2e0e0dfe0e1dededed6bd7a39211d1c1b1b1817191a1f3f6165605c57534f
+453630333b3b3b36405d95a68068676962626e8aaeccd8cebaa99c9ba09d928d8a8b929f
+acb2b1acaab2bbc0bfbeb6ad9a7566666680d5fbfffffffffffffffffffffffffffff7b9
+e6e7e6e5e6e3e3e3e3e1e0dfe0e1e1dedfe0ddce9546241e1c1b1b1918191a2042636864
+5f56524a3c33323f50514e505870909f93857d7367636d84a4c3d1cbb6a99d969a9b9189
+86888e97a0a5a5a5acbbc6cac6c1b8ada091857576a5effeffffffffffffffffffffffff
+fffff8bae7e7e6e5e4e4e3e3e4e3e2e0e1e2e1dfe0e0dfd8ac5a2a1f1d1c1d1b1a1a1a21
+44646a68625751473e3e44526267666a6e7c8b95918b807064636d7f9cbfd0ccbbaea49d
+9da0a098908b8b8e949ba3aebcc8d0cecac4baaea29c9b9294c1f7ffffffffffffffffff
+fffffffffffff8b6e7e8e7e6e6e4e5e4e4e3e2e2e2e3e2e1e1e1e0dcbf7434221f1f201e
+1c1b1b2244656b69625a50494c545c646d747a7f80848a8a8581766862646c7b97bfd8d3
+c0b2aaa5a5a6a9abaaa7a5aaadb3bac4ccd2d5d1ccc7bfb3a49ca1a8b0d2f9ffffffffff
+fffffffffffffffffffff5a5e8e9e8e8e6e6e6e5e4e4e3e4e3e2e1e2e2e1e0ddcc8a3d25
+2121201e1d1d1c2445646b6b655e57565e646a727b848a8c898582807e7e736865676d78
+94bbd8d9c3b4adaaabafb1b2b6bdc1c6c7c7cacdd0d5d7d2cdc9c1b3a59ea2abbcd8f7fe
+fffffffffffffffffffffffffffff7b4e8e9e8e8e7e6e6e6e5e5e4e3e3e3e2e2e2e1e0dd
+d095462823221f1e1f1e1e2442626c6e6c6866696d6b6a6f777f83827c797a7e8384766d
+6b6b707a93b3d1decdbbb1acadb3b8bdbec2c9cecccbcccdced4d7d4cecac1b3a7a6aaa7
+b9d3effefffffffffffffffffffffffffffff9c5e8e8e8e8e6e6e5e5e5e4e4e3e2e2e3e3
+e1e0dfddcf9c522c2321201e1e1f1e2442636d6f7173777877736d6b6d71747575798189
+8c877a72706e727c92b6d9e4d4c0b6b0adaeb6c3c9cacdd0cfd0d1d4d5d9dad6d0ccc2b4
+a7abb4a4b0caeafdfffffffffffffffffffffffffffff8bee9e9e9e8e6e5e5e6e6e5e5e3
+e2e2e3e3e2e1e0dbd2b46f3924201e1e1e1f1f2341636e71767b8183817f7c77787c8083
+868b9193918a7e77726f737c90b5dce8d7beb6b1b1b1b5c1ced5d6d8d9dadee2e2e0dcd5
+d0cbc1b3a6adc0a8a3bee7fdfffffffffffffffffffffffffffff7afe9e9eae9e7e6e6e6
+e7e6e6e4e3e3e3e2e2e2e1ddd8cc95502b201d1e1f21222541646d71777f86898a8c8d8c
+8e929696989a9b999591877b7371747a8cb2dcebdcc4b6b3b7bbbdc5d1dbdde1e3e5ecef
+ece8e3d9d0c6beb2a6afc8ab9ebae2fdfffffffffffffffffffffffffffff8bbe9eaebea
+eae8e7e7e7e7e7e5e4e4e3e3e3e2e1dfddd7b57036221d1e2024272d48666e717881888b
+8d909496999ea19fa0a2a19d9d9d8f7c737374788db5dce8ddcab8b2b8bec2cad5e0e5e8
+edeff4f8f5f1e9dfd3c5bbb0a6afc3a4a1badefcffffffffffffffffffffffffffffface
+ebebecebeae9e8e8e8eae7e6e6e4e4e4e5e4e3e1dfdccb974d271e1e232d343a4e686e71
+777e888e9093999da0a5a5a2a4a7a6a6abaa947d767575778db2d7e1dbcebdb2b1b5bacd
+e0eaeff3f6f7f9fbfbf7ece2d6c9bcafa6acb59aa8badafbffffffffffffffffffffffff
+fffff8beececececeae9e9e9e9eae8e7e7e6e5e5e6e5e4e3e1ded6b87033201f293c494a
+54696e70747d8a9092979ea3a7aaa8a7a9adadafb6b0977f787675788eb1d3dcdcd7c6b4
+aeabadc4e0eef7fcfdfdfefefefaf0e4d6cbbcaea4a7aba3b8bddafbffffffffffffffff
+fffffffffffffacaebebebeae9e9e9e9e8e8e8e7e7e7e6e5e5e4e3e3e2e0dbcc984a2623
+344f5953586a6d6f747d898f9298a0a4abaeaeb1b3b5b4b6b9b198807773737b92b5d5dd
+dfdfd2beafa7a6b0c8e1f3fcfefefefefefbf2e5d7ccbcada2a2aab6c9c7dffcffffffff
+fffffffffffffffffffffbdaeae9eae9e7e8e7e7e8e8e8e8e7e6e5e5e4e3e2e2e0dfdcd4
+b86d3229445d5f575b6a6c6e747d878e91979da5adb2b7bcbfbfbbb9beb5967c726f707c
+98bdd7e0e4e6dac7b4a8a5a2b0c7dcf3fcfefefefefcf4e6d7cabbaca1a0afc2d1cee6fd
+fffffffffffffffffffffffffffff8bbe9e8eae9e7e8e6e7e7e7e8e7e6e5e4e5e4e3e2e1
+dfdedcd7cb92463150625f59606c6c6e757f858b91989ea6b0b8c1c7c8c5c3bebfae8c74
+6e6e717e9bc4dde7eff3e4cbb7adaaa1a1adc0dceffafdfdfcfbf5e7d7c9b8aaa1a1b9d1
+d2ccecfefffffffffffffffffffffffffffff8bae7e8e9e8e8e8e6e6e6e7e6e5e5e4e3e4
+e3e2e1e0dedddad7d3b1633d5660595a666e6e6e747d82888f969ea8b5bfc8cdcdcdccc5
+b99d7d6c6a6e737e98c2dce3eef8e2c1b0acaea89d9da8c0d5e7f2f4f6f7f0e2d4c4b7ab
+a1a1b7c8c2c8f0fefffffffffffffffffffffffffffff7ade8e8eae9e8e6e6e6e6e7e5e5
+e6e5e3e3e3e2e0dedddddbdad7c588535c5e575c6b6e6f70757b80858b939fabb9c5ced2
+d2d3d1c7b18a6e666971767c8eabc2ccd9e3ccaea1a5acaa9e979aa6bacedbe4eaede6d9
+cebfb3aba19fadb8b8d0f6fffffffffffffffffffffffffffffff7b9e8e8e8e7e6e6e6e6
+e6e6e5e6e5e4e3e2e1e1e0dedddcdbdad9d0ab73635d565d6f707071767a7d8288909ead
+bcc8d0d5d7d5cebda07966656a7275737a899cadbcc1af968d95a0a19b9a9899a4b5c1cf
+dce2ddd2c8baaea9a19eaebdbedafbfffffffffffffffffffffffffffffff8bae7e7e6e6
+e5e5e4e5e5e5e4e4e3e2e1e0e0e0dfdddcdbdad9d8d5c1906e61565b6e72717175797a7e
+858e9badbccbd2d5d5d0c5af8d6d64656b706f68666e7f909da196827679848a94a1a097
+949dadbecfd7d4cbc2b5a9a6a29fb3c3c3e4fdfffffffffffffffffffffffffffffff8b6
+e6e6e5e4e3e4e3e3e3e2e2e2e2e2dfdededededbdbd9d8d8d7d4c9a47a695c5666707172
+7376777a828c9aacbacbd5d6d1c7b89d79635e616668635a575e6e7a7f827c674e4b5c75
+96a8a89a9193a0b2c2cbcbc4bbb0a5a2a09eaebbccf2feffffffffffffffffffffffffff
+fffff5a5e4e5e4e4e2e2e1e1e2e1e0dfe0dfdfdddcdddddadad8d7d7d5d4cfb48772685d
+626c7072737474777e8997a8b7c7d1d5cfc1ad8b695d5c5c5c5a50413c485c696c6b6857
+4d4f587a9fa9aba39a969dadbbc2c4beb6ada3a09e9ca4b6defbffffffffffffffffffff
+fffffffffffff7b4e4e3e3e3e2e1e0e0e0e0dfdddddddcdbdadadadad8d6d6d5d4d3d0bb
+9076716b65686f71727372737a8593a2b0bdc7cbc6b79f785e5a5f5d544c3c2d2a374b59
+5c5f69717d7c7b91a3a7a9a8a29ea1afbbc1bfbab3a9a0a19f9aa2c5f2feffffffffffff
+fffffffffffffffffffff9c5e3e1e2e2e0dfdfdfdfdedddbdbdad9dadad9d8d8d7d7d5d4
+d3d2cfc39e7d76756a676e71707071717581909ca6b0babeb8ab8f6a585963645746393b
+40434a504e546d828c8c8e979aa0a3a7a9a5a7b2bdc1bdb5afa69fa19f9aabe2fdffffff
+fffffffffffffffffffffffffffff8bee2e1e2e1dfdedfdededddbd9dad9dad9d8d8d8d8
+d6d5d4d2d2d1cfc8ae897c7d766f6f716f6f706f727d8a959da7b1b4ad9f7f5f565c686a
+6251444b53504b49444b657880868d9192999da5a7a5aab6bfc1bbb2aba4a0a19f9bb2ed
+fefffffffffffffffffffffffffffffffffff7afe3e1e2e0dedddedddcdcdad9d8d7d8d7
+d6d7d8d6d5d4d3d3d1d0cecab9938082807b73716e6e6e6d70788490979fa7aaa695735a
+58616967635b5251534e4742434d5e6e7a83888c9197999e9fa0a7b1bac0bbb3a9a4a2a3
+a099b0ecfefffffffffffffffffffffffffffffffffff8bbe1e1e1dfdddcdcdddddbd9d8
+d7d6d6d6d5d6d8d6d5d3d2d2d1cfcecabc957e7d7b7b72716e6c6b6b6e737d8991989ea1
+9e8d6e5c5d656764605d56514f4d4c4f545b6575858b8a8c929395989a9b9ca6b1bbbab1
+a9a5a4a5a097adeafdfffffffffffffffffffffffffffffffffffacee0e1e1dfdcdbdada
+dadad8d7d6d6d7d5d5d5d6d5d4d2d0d0d0cfcec9bb8d71777878716f6e6c6a696b707983
+8c90969a9a896e60646867635d59565351565d61676b74838f8f8d90929293959590919c
+aab5b7b0aaa6a6a69d95adebfefffffffffffffffffffffffffffffffffff8bedededede
+dcdad8dadadad8d6d5d5d6d5d4d4d4d4d3d1d0d0cfcececbbe8f636b777973706e6d6b69
+6a6d747d878b9094948873696a6a68635e5b5f5e5c626e71788087909795919697969290
+90888893a2abb1b1aba8a7a59b92acecfefefffffffffffffffffffffffffffffffffaca
+dddedddcdbdad8d8d8d8d6d6d4d5d6d4d4d3d3d3d2d1d0d0cecdcdcbc3a0675d7176726f
+6e6c6a6a6a6a6e7680878c8f90887a726e6b696664646969686f7f87939da0a2a6a29da1
+9f988d88877e7d8a97a3adb0aba9a8a39790aaeafefeffffffffffffffffffffffffffff
+fffffbdadcdddcdbdad9d7d8d6d6d6d5d5d5d5d4d3d3d3d2d1d0cfcfcecdcdccc8b68965
+656e6d6c6d6b696a69686b717c83888a8b867c76726f6d6c6b6c7071737e94a5b2b8b6b5
+b9b5b0aea59a8e857e767482909fadb1aca6a7a1948fadecfefeffffffffffffffffffff
+fffffffffffff8bbdbdcdbd9d9d8d7d7d5d5d5d5d5d5d4d3d3d3d3d2d1d0cfcecdcdcbcb
+c9c3ae86605e61646b6a696967676a707982878b8b857f7b7671706e6c6e7379818fa4b5
+c0c2beb9b4b0b0ada49c90817362657c8f9fadb1aca4a59d918eafeefeffffffffffffff
+fffffffffffffffffffff8badbdad9d9d7d7d6d6d4d5d4d4d5d5d4d4d2d2d3d3d1cfcfce
+cdcccbcacac8bfa0654645506669686867696a6f7882888f8c807b78726d6a696b6f7983
+8d959ea8aaa8a49b9390908d8b8880725f4d60879aa3afb1aca7a59c918eb5f1feffffff
+fffffffffffffffffffffffffffff7add9d9d9d9d6d5d4d3d4d4d3d3d3d3d3d3d3d2d2d2
+cfcececdcdcccbcac9c7c4ae78422c385d6967686667696d767f86908b7c757069635e61
+69707b86878582837f7f7f7d7d7e7a716c66615b575e7899a7adb2b1aaa6a39a908ebff7
+fffffffffffffffffffffffffffffffffffff7b9d9d8d8d6d5d4d3d3d4d3d2d3d3d2d2d2
+d2d2d2d1cfcececdcdcdcacac8c7c5b894592f31566968666667696f767d828e8b7c7269
+5d5a5b606a6d6e6e6b696a6b686e6f7072726c64615d5f62708798a8adb3b6b0a8a6a196
+8d91cdfbfefffffffffffffffffffffffffffffffffff8bad8d7d5d4d3d2d3d2d3d2d0d1
+d0d1d2d1d0d1d2cfcdcccccccbcbcac9c7c5c5bdad7d42324e6668666565686f777d7e87
+8a827761494a53595c59555354585b5e5f636464696e6e727879797b8ea5b0b2aeb1b3ac
+a7a59e918995d6fbfefffffffffffffffffffffffffffffffffff8b6d6d6d5d3d2d2d2d1
+d2d1d0d0d0d0d1d0cfd0d0cecdcccbcbcccccac8c6c5c4c0bca265404b6467656464696f
+797f7c828a89826944394146474546494f545b636a6c717d88909191908c878da2b5bbb3
+aaabada7a4a29c8f889ce0fbfefffffffffffffffffffffffffffffffffff5a5d6d5d3d2
+d1d1d2d1d0cfd0d0d1d0d0d0cfd0cfcdcccbcbcbcbc9c8c7c5c5c3c2c2b9946753616665
+6362686d7883817f888f918663464042464a4e5965707c8a94989ca4aeb4a99a938d8f9d
+b0babdafa1a1a4a2a3a1978b85a8edfcfefffffffffffffffffffffffffffffffffff7b4
+d4d3d2d1d1d0d1d0d0cfcfcfd0d0d0cfced0cecccdcacacacac7c6c5c4c3c2c3c4c3b899
+6a5f65646362666c7683867f87939a9b8a705e565a6166707d8b98a2a8aeafb0c0c5ad99
+8f8f9dadb7bdbba998979ea1a19c908685b7f7fdfefeffffffffffffffffffffffffffff
+fffff9c5d3d3d2d1d1d0d0cfcfcfcfcfd0d0cfcfcfcfcdcccbcacacac9c6c6c4c3c3c3c4
+c5c6c7b77f6063636363676a737f87828592999e9f9384726a6a6b717b8c99a0a2abb0b1
+b8b5a298959daeb5b6bbb7a89590989c9c978c8187c6fafefefeffffffffffffffffffff
+fffffffffffff8bed2d1d0d0cfcfcfcfcfcecfcfcfcfcecdcececdcbcac8c8c9c8c7c6c4
+c2c3c3c3c5c7cac08760616261646669717b8484828b939ba29f9784736d6b6d717d8a92
+959da7abacaaa4a5a8aeb4b3b3b4b0a38e8a94979a95887a8edafbfefefefeffffffffff
+fffffffffffffffffffff7afd0cfcfcfcfcfcfcfcfcfcececfcfcecdcdcdcdccc9c7c7c8
+c7c6c5c3c2c3c4c4c5c8cac28b6162626262666a6e767e8483858a929a9e9a8c7f797775
+747a848d9298a3aaacadafafaeaeafb1b3b1a89c898690959994847aa0e9fcfefefefeff
+fffffffffffffffffffffffffffff8bbcfcfcfcecdcecfcfcfcececececececccccbcbcb
+c9c7c6c6c6c6c4c4c3c2c3c4c4bfb9b0845e6262626264676a70777e818383868d93938b
+8481828283888e94999ca1a4a5a7a6a4a2a5aaacafada29587868f9396918380b7f4fdfe
+fffffffffffffffffffffffffffffffffffffacececfcfcecececed0cfcfcecdcecdcdcb
+cbcbcbcac7c6c5c5c7c6c4c3c3c3c4c4bfa48370594f5f6261626263686b71777c7f7d80
+868a8984828382848585898e908a827e848c8c8e94a0aaa9aaa69b8f84879194948d818d
+d2f8fdfefffffffffffffffffffffffffffffffffffff8becececfcecececfcfcecdcdcd
+cdcdcccbcccccccac7c5c5c5c6c5c3c3c2c3c4c5b588533831435e625f60616366696e72
+787a757982847e7c7d817e7e7a757575746d605e6a767a8392a3aca8a6a0988f88889297
+938981a8ecfcfdfefffffffffffffffffffffffffffffffffffffacacececfcecececfce
+cdcccccdcdcdcbcacbcbcac9c6c5c4c4c5c5c3c3c2c3c5c4b3916335283e5d6560606163
+6467696d73757071777b78767678797a746c6866686864636a757c8797a6aba6a0999994
+8d8c9599908588caf9fefefefefffffffffffffffffffffffffffffffffffbdacecfcfce
+cdcdcecececccccdcdcccbcacacac9c8c6c4c4c4c6c5c4c2c2c3c5c4b7a2884e2c3c5c68
+635f6061626566686c6f6b696d73727273757678766f6b6b6c6d6e6d737d85929fa8aaa4
+9f979b98919297998f8499e2fbfdfefefefefefffffffffffffffffffffffffffffff8bb
+ced0cececdcccdcdcdcccccccccbcac9c9c9c8c8c6c4c4c4c5c5c3c2c2c3c5c4baa79c6d
+393b5968665f5f6062646466676b6864666b6c6e707577797b767372706e72747c87909c
+a9adaaa6a4a09e9a989a9a988d83a6ecfcfdfefffefefeffffffffffffffffffffffffff
+fffff8bacdcecdcdcccbcccccccbcbcacacac9c8c8c7c8c8c5c4c3c3c3c3c3c2c3c3c5c4
+baaaa4895340556668615d5e60626365666865616062646a6e72777c7e78757675777c85
+9197a0abb3b2b0b0aea8a09e9d9d9a938780aceefdfefefefefefefffffffffffffffffe
+fefffffffffff7adcccdcdcdcccbcccccccbcac9c8c9c8c7c7c7c8c8c4c3c3c3c2c3c3c3
+c4c4c5c3baaba59d7751526369625c5c5d5f6265676865605b5a61696d70757e827e7c80
+7e87929ba5a8b3b9bab8b8bab6aba4a39f98928c8382aeeefdfefefefefefeffffffffff
+fffffffefefffffffffff7b9cdcecececccccccccccccbc9c7c8c8c8c8c7c8c7c5c3c3c3
+c3c5c3c4c5c4c4c2b8aea6a79370575d66645d5b5d5d6165686967625c5b626a6f71757e
+8588888c888e9ba1a7afbbc0b8b7bcbeb8b0ada99e938c867f84adeefdfefefeffffffff
+fffffffffffffffffffffffffffff8bacdcdcecdcccccbcacbcbcbc9c7c8c8c8c8c7c8c8
+c5c3c3c4c4c4c4c5c5c5c5c2b6afa8a9a3916f5b61645c5a5e5f6064676869655f5d6369
+6c6f767d83898c9191959ca0a9b1b9bcb8b6bcbeb8b1aca4998e86807e83a8ecfdfeffff
+fefefefefffffffffffffffffffffffffffff8b6cccdcdcccbcbcacacac9c9cac8c8c7c6
+c5c5c7c7c5c3c2c3c4c3c2c3c4c5c5bfb3aea9a7a9a19066595f5b585a5d606365656867
+62616668696d777e8588898f969ea3a6a9afb4b7b5b4b7bbb5aca79e92877e7e8386a5e3
+fafefffffefefefefffffffffffffffffffffffffefef5a5cccdcccbcacac9c9cac9c8c9
+c8c7c7c7c5c5c6c6c5c3c1c3c4c3c2c3c5c5c3bbb2adaba9aaa5a3845b575957565b5f61
+646568676565696a6b7079818986868d97a3a8aaa7abb2b5b1afb0b2a9a2a49c8d7f7b80
+848496c5eafbfefefefefefefefffffffffffffffffffefefefef7b4cbcbcbcbc9c9c8c9
+c9c8c8c8c6c6c6c6c5c6c6c6c4c4c1c3c3c3c2c4c4c3c1b6afadabadabaaa6a275535456
+54555b60656869676464686d6d7177808683838a939fa2a4a1a3a8aca6a3a3a59b9a9c93
+8378798082818391b7e3fafefefefefefefffffffffffffffffffefefefdf9c5cacbcaca
+c9c8c8c8c8c8c8c7c6c5c5c5c5c5c4c5c4c2c1c3c3c3c2c1bdb7b5afabacabafb0aaa7a9
+98644e515350555c636666656362676d6f72777d7f8182828592999b9c9fa0a09b9b9b98
+9093908579757c81817f797586b0e1fafdfdfdfdfefffffffffffffffffefefefefef8be
+c9c9c8c9c7c5c5c5c6c6c6c5c4c4c3c3c3c4c4c4c3c1c1c2c2c2bbb1aaa39da0a7aaaaab
+b2aca9a6aa8b5a4c4f4f4d525c6263626162656a6d7074797a7a7a7c7f898c8d8c929395
+9391918c8687827971767f81807c71626d85abd8f4fcfdfdfefefefffefefefefefefefd
+fdfdf7afc8c8c7c6c6c5c5c6c5c5c5c5c4c4c2c2c3c5c5c4c1c1c1c2c2c0b29f9a9a9491
+a3aaaaadb0b1a9a8a8a67c534a4e4a4a525c6062626264686c6e6f71726f6f767e848686
+7e82868b8a857e7a7a79766e70797e8180796b555b6c83a3cdebf7fcfdfefefffefdfefe
+fefffefdfdfdf8bbc8c7c6c5c5c4c5c5c5c5c4c4c4c3c2c2c5c6c5c4c0bfc0c1c1bcac9a
+9b9f978e9ca7a9adafb3b0aba7a79e76544c4b4949525b62636264686a6b6b6c6e6c6a6e
+767c7f807977797c7a7772706e6b6869737b7f807e786a524f57667c97b4def9fdfefefe
+fefdfefefefffefdfdfdf9cec7c6c5c5c4c3c4c4c4c4c4c4c3c2c2c3c4c4c4c3c0c0c0c1
+c1baa99c9d9d9a919099a2a8b0b0b6adaba5a79a74584c4a47474f595f60626364636568
+67666766676a7175726f6f6e6d6d6a676360616d787c807d7b796c534d4f5461738fc9f5
+fdfdfefefdfdfefefefefefcfcfdf8bec7c6c5c4c4c4c5c5c4c3c4c5c4c2c2c3c3c3c3c3
+bfc1c2c1bfb5a69b9c9e9a90898b96a6adb0b4b6adaea5a7977a63514844444b545c5e5b
+5b5c60625f5d6063605d666b6a6764636463605e595a68757d7f7f7b7a797465564f4f56
+6294d3f2fcfdfefefdfcfdfdfefefefcfcfdf9cac6c6c5c4c4c4c4c3c4c3c4c5c4c4c2c3
+c2c1c2c3c1c1c0c0bcaea19a9f9f9b90888687a2aab0afb8b4afaca3a997806d53454242
+4651585858595a5b59585b5f5c585d5e5d5c5b5859585754546171797e807f7c7a7a7874
+705d515364a2dfeefafcfdfdfcfcfdfdfefefdfcfcfdfad9c4c4c4c3c2c2c3c3c4c3c3c4
+c3c4c2c1c3c2c2c1c1c1bfbbb5a8a09c99979d8a81868392a7a9afb1baaeafa9a5a89386
+7351403e40434a5155565454535253555455585755545453504d4c505d6d74787c7d7d7b
+7b79726b7d715a5165a2e5eef8fbfdfdfcfcfcfcfdfcfcfcfdfdf7bbc4c4c3c3c3c3c3c3
+c3c3c4c4c2c2c2c2c3c3c3c1c0bfbab4afa39e9a8c909583868c898299a5aaafb3b6aab0
+a8a8a89189754f3d3f4041454d51514e4e4e4f4f4c5053524d4b494744454d5e6e757676
+797b7f7d7b7a7165716c5c546599e2f2f8fbfcfcfcfcfcfcfcfcfcfcfdfcf7bac3c2c1c1
+c1c1c2c1c2c2c2c3c1c0c0c0c0c0bfb8b4b8b7b1a59ea2968a928d8b938b7e76809da0aa
+abb2aeaab1a4aba28e8d744a393c3e3d4045484948494a4745454644413f3c3b4150606b
+72757675797b7e7c7d7b7166685b54596590d9f5f7fbfafafbfbfbfbfbfcfbfbfcfbf4ad
+c2c2c1c1c1c1c2c1c2c2c3c3c1c0bebfbab7b2968da5b2b0a6a7a89496988d9899847c7c
+778a9ca1a9a7afa7acaca3ab9e918f6f4534373b3c3b3e404141423f3d3b3b3938373740
+52646c7172747576797a7b7c7d7b6f5e5c55535d678ecff3f6fbfafafaf9fafbfbfafafa
+fcfbf4b8c2c1c1c2c1c0c3c2c1c2c4c3c1c1c0bdb0ac9e737096b5c1b4ababa19f9b989e
+988d93907c7691a0a2a5a5a9a2aba7a3ac9c938c643e32373d3c3c3b3b3a393634353434
+33353d4e626e7173737475797a7b7e7e7d7a6d514b4f57626b93c9eff8fafafaf9f8f8fa
+fafafafafbfaf5b9c1c1c0c2c1c0c1c2c2c2c3c2c1c0c2bfbabba27f91b2c4c7b3a8b1ac
+a09ca39c9a9f9f937f7a809b9ea0a09fa29ea7a3a5a89694865c3d2f323a3f3f3f3c3934
+31303030343d4b5c697172727174767c7e81817b7a7b6b45404d5a646b94cfebf8fafaf9
+f8f7f8fafafaf8f9fafaf4b4c0c0c1c1c1c0c0c2c2c2c2c2c2c4bbafbdccbda9a8a9b8bf
+bcbab9b1a5a1a0959da69c9490938585949698979b9d9ba39fa3a293947f593c2e323b3f
+40403f3d383433353e4c5b656b706e6e6f71777e8286837c7a7c693d3b4f5f666d9ddeeb
+f5f9faf9f8f8f8f9f9f9f8f8f9faf1a3c1bebfbfc0c1c1c1c0c0c1bfc5c49e8bacc2bbae
+8f698cc2cbc8bab3b1ac99919c98929fa49d85757c8f8d93949798999f9aa09b94987b5a
+402d313b404141413f3d3c434d5b676a6b6c696b6d6f798286827c7b7c7d693b38506266
+75a4e7eff3f8f8f9f7f7f8f7f9f8f8f8f7f8f1b2c0bfc1c0c0c1c1c0bebab8b5c5c09095
+b6bcbbad824b70c1d7ccbcbcbeab9399a19898a6a59588847a7f87898f8f9497969a999e
+989d99755634282f393e4242434549535d666d6d6d6b6a6d6e707e878a817b7c7f7f6b3c
+3752666b84ace6f3edf5f7f8f7f6f6f7f8f7f7f8f7f6f2c3bfbec0bfc0c1bfbfb9a79eae
+cdcfb6a8a0b3c2bd85547fbed7d4c9b9b09f929b9c96a0a59d9796908775748284878992
+94979c9b9f9ba388553325252d374144464b515b646b6f6c6b68676e7174808a8c87817f
+81816d3e3653677392bae1f0dde8f5f6f6f5f5f5f7f7f6f5f6f5f1bcbebebec0c2c1c0c3
+b5958aadd2ded19971a1d6daa46f98bbc2c7c1a8a2a5a1a0968d9698949a9a8f80706972
+7f7d808691969b9d9fa19d89482e2a29292e3b464e52555c656b6d6868666770757d868a
+8a89878184836d3d33536f829abed1e9d2c9e5f3f4f3f3f4f6f6f5f5f5f6f0adbdbebebf
+bfc4cccdc0a69fb6cedac9895e95d6e5d5acb9ccc0a8a2a6adb7bbaf9a95908a8a979685
+7a7575696d797f808794989d9fa397713a2e3645413a3e47525757596066686565656a73
+7b858989888b888487846a3a365d8294919195c5ba98c0e2edf0f1f2f4f3f3f4f4f4f0b9
+bfc0bfb1a8bed6cec3aa848bc0d2b0776a9cc4d7e4c9cdddbd786296b8c0c5b5a6a79482
+8b9794878a877a69666b7e80848e96999d9f98633936466a76746b5856595654555a5e5f
+62666e7a848b8c8b8b8d8a8889856a3b3f6c8d9a764c4d778a77a6cbddeaf0f2f4f3f4f2
+f2f4f2ccc3c8c6ab9fb3c8d0ceaa717bc3d7bc978eabb3bbbebed5dcac655491c1c6c2b9
+aca38e838d8f919da3917872766e6e747e8b9097989a93633b3f5e94b1baac8e715d5552
+4f52585c636d79848b8f9192918f8b8a8b83633f5175949b643538578490b3c0c4d4e5eb
+f3f4f5f2f2f4f0bcc9d2cfb79780a2d5e1c3909fcad6c8c2bdbcad967897d1e2a35d73ae
+c4cec7bba993888785828fa0a28b7e7b736b635e7181898d91938b65424c72a5c1d9ddc9
+a96f565251545b646d7780889095979795928d8b8c805a4a637ca49c5c373e5d8aa2beb6
+9eaecad2e9f3f5f4f3f4f2c8ced7ceb58271a4d3dadacac9d0c5aaabc6c8b181567cbddc
+c7899ecdd1d6d2c09e8e9994877f8e9a97898b85726463636e787b838a918f73475282ac
+b5b7cdd0c394685a5a606770767c858d959b9d9a96918e8d8c765665819ac1a35f475c82
+949fb4a48c9fc1c5d5ecf3f3f4f4f3d8c0d8d2c099a0ccc8b3b6c9d1cbad7870adc8b677
+649abfd0d9cbccc6c6dcdbd1afa0afa592888e948e8b8f8f7d767b7a7a716e77848d937f
+515085adafa9c3dee7c98e6964676d72777f8891989ea09d97908e8e8b787ca5becdd99e
+656886a7ada4997f82adc5b9b2d4e7e7eaf0efb89cd6e0d0d0dce3c3866898cace975e5d
+9ecacb9182c0cec6d3e7d19c97cbdedec19f9e979286878b878c908f838c918e8d8c8581
+808a928b5f4a79a59f93acc7d7d2a77468676c6f75828e969da1a4a2988e8d9093a2c3e0
+efe8c8887591aab5beae896378afbea58baccfced4e3eab6accbcbafbee3e4be73558dc7
+cda07384b3d6dac8c4cdc1c2dee8b4696dbfe4d7a7777387978a83858d8f8e8788988e86
+91a8a8a5918692946c4459889389909aadc8bf836c6a6d6e7482929da5a8aaa4978c8f9d
+a9ceeaf2e9cc967e91a3b0b7bdb4a2889cbeb79c919fbabdb5bad0a5c7c39d7092cdd9c6
+887fafccd0c6b5b8c9d3d3d7d9aa98bedfdc9c5158a9ded19961658da6a49689908b877f
+8894868796a5abb8b6a19a9e764452829b9c9b9ba6c2bb846f6e6e707783919fa9adada5
+9c9aabc0c8e6e7d6a57e7b869eabadb4b4acaca8bbc7a47b90a7b2b19a8dada8ccb48073
+a8cacfceb8b6c7cfcdcec7b6afbfd1e0d27e64a7dacf804b6bb1e0d2ac8c98b5b5a99892
+948881848a8c7e8ea0a1a3bdcdc4b7a37d4e4e789eaba59791979d7d7170717478818e9d
+aab0b2afb6c5d3d5c8caa276576785899aa9acadaa9d998d9eb8a07d9bafa99b9ca6b9a9
+dabe908db8c5c6d5c5b3a8b4cbc6b0816a98cfd9b76f5a9ed9c4845485cbe3d6bac1d9e0
+c7a8a1a4a090888487887c889da4a2b0c7cbc0b8a881625d666665686e76847a76747374
+78818a99a7ab9f88878d89877d7b5f3e55778192a1a7a2a7a5917b6676abb2a2b3b89574
+8eb6c6a5e9d5c2b3adb4c3d6cba57087c7cbb46f5992cfc89c6880b8dbcd9e829ecbd3cc
+bacae9e1cab4a6bab49e96888c8a81868f9da6b0c2c4b0b0c3b5968678665557595b6066
+737674767b81858ea191684c4543424650635140698992a3a9a49ca6a59785788fb4b8a0
+aabea1899cbab98edfd9c7a06f77aeccbc855f8acfd2c99081b4d8cbb99aa5c9d8d4b0a3
+acb2b0a07991d2dcc3af8a8fa5aeac989a8988898c9295a1adac9a9dbdbfb7b9ab9e8d83
+766a696674807a77797a75849f9b7a54423c3f4e697159657f94a1a3a49d9eaba6a7afa8
+b0bbaf8084b2b0a5aabcb69bccccb37b4e68acc6c1907db4d7d3c8c0b4c2c9b7b9bfcdcf
+c8bea4a8b9b4a3834e62bcdac9995d5488b3b9a79991918e898c8d8d8f96979ba8b6b8b2
+b8bcc4bbaca19f9ca5a4897e79706b8ea1b4a77c544b5875878187a3afaaada49d9ba2ab
+9790afbdbdb6a87e86b2b29289aeb9afb1bdad786a95bdbfb7bcc3dad0c2bac2cdcec39b
+8da8d3e4cc986b87bbb8a375485eaed5daaf756ea3bbb7a7a2a2948c8b8c8b89878a9a98
+96adb3a5abb3bec7bfb4b1b9b9b4a49f96898ea8afbeb298807c83989ea0abb2b7ac9e9c
+9797a39f6e5f9ec9c2a19ba3acc4bb7c70a7bca9bbb9b8acafc8c9b8a4abcee8c6a99095
+c0cbb2835678c6dec8854c6bb0b8b679507eb0c7ddc5b6b4cbd4cdbcb7b8a29494878a95
+89829594909ea5919299a9b5b5aeacbcb9b7b6c1bec0c3c2bdc3beb0b2b6abb1aba5a7a1
+a29a90989a98a48f5a68a8d0b97b75acb4c3c19296b8c39cc3bbb8bbc9d6cda97772ace3
+ce9c6861a4cdb8794868bad2c88a5b80afb4c5b38a9db6c4d8cdd1d8bebccfcbc8bca399
+9f8f93a0918688898989978a818c9fa9a4a5a3b0b6b7acb8bcc2c8c3bec2c9c2c7cbb6b1
+ac9c96928e8d90999e9fa3836587b4d1b37979afb1adb9c1c5c4c6aacab99291bad2d2a1
+5c4f98dbde995b6aadd9d8986084c1d5cdb7909fbfc4c1c3bdbac1d7e2dadbd29c88afc9
+ceb6a3a9b0a7a9af9d88818488868985839096a19c979aa1adada0a2a8b1bbb6a8bbc3b5
+c1c8b0a49f94958e858c9495a0a5a3897f91aacebba1a3baaf868ac1c7b0a6b3d2af665b
+a4ccd195596ba7d3e4b57b96d1eae2c09ba9cdd5cccbb7afbfd9cdb8b8aba5c3dfdbd5bf
+734979c4dcc2a0a1b1b9baafa08d909aa0968a88858a8c8f8b8d909a9e919ea9aeb4bdb2
+a1b5b7a1b4bba49895949889868e9598a3a9a28f776c90c2b6a8b0c0b07982bbbc95708d
+c5965d60a2d0dab485a5d2dbded4bfc8e0e9e4d1bcb1c5d0cac6bba49ec9c5bcb3885e71
+b5d6cc97583d69c5e4c98f738babbbb3a99d9ea5aba09c918c8d8e8c7f89939a9596aaab
+a5adb0a6a4a8a59aa3a89e979791928991959ba2acb19f7f5c578cb8a57f88bac1a0b0d5
+cb966a97dbac7b8cbdd9e2cec3cce1e3dad2c7b5b8cde1d1b68886b4d1c0ad85659ac3ce
+b77b484f9acfcb91585f84c4d9ccb39091afc6bfb0a8a5a6a8a4aea396909b9c929a9b9e
+959fada8929ea29ca0a39e999d9aa0a0968b8687969aa4a9adafa0755f89afbd996372b7
+c8b2bee0dbbba4bbeeddb3a2b7cfe9dfd0baaaafc6cfc188668dc9bea5734d81c0b89567
+5081c4ddbc6c5477a2c9cfb892919db6c6c6d6c9bbd0dbc8b3afb0b3b0b2b7ac97939fa7
+a5a7a397919db3a99fa19a93a2a6999aa19aa1a08f8882929e9da2a4a8acb0a4a1c8c8bf
+a98592bdbe9097c9d0cdc3a8d8dbc7987b99d6dec6915f76aabab27a4d6fb6ba96614d74
+b1be996371aad2e2d99d7ea0b3c3d3cbb8afb0bbc5bcc6d1d4e5e0c6aba7adb3aebabcac
+9ba1a2a29fa2a69a959db5afb4aaa3a1aaa597999e999b9b908f8ea1a9a9a6a8aaa6b2be
+ccd0b7afbeaea1ada3686eafbfb59393a1a8a48c7983a1b1b1a18b94a9ada88d808da5a9
+9b847b80919b93858fb0cadde3d7c4bfcad4d5d0c8c2c6c9c4bcbeb6b8c1b8aa9d9f9fa8
+aaaeb2aba9ababa89fa19b88888d97928e888a8987878a88868185837b7b86989ba19fa1
+9d9ca4a4afac999695836e6463575e777e7e7982
+showpage
diff --git a/graphics/psfig/doc/figs/zip.ps b/graphics/psfig/doc/figs/zip.ps
new file mode 100644
index 0000000000..783ec71b24
--- /dev/null
+++ b/graphics/psfig/doc/figs/zip.ps
@@ -0,0 +1,21 @@
+%!
+%%BoundingBox: 301.0 392.44 360.02 437.4
+/Times-Italic findfont 30 scalefont setfont
+
+/printZip {
+ 0 0 moveto
+ (Zip) show
+} def
+320 400 translate
+
+.95 -.05 0 {
+ setgray
+ printZip
+ -1 .5 translate
+} for
+
+1 setgray printZip
+
+
+showpage
+
diff --git a/graphics/psfig/doc/psfig-doc.tex b/graphics/psfig/doc/psfig-doc.tex
new file mode 100644
index 0000000000..0aec9e8121
--- /dev/null
+++ b/graphics/psfig/doc/psfig-doc.tex
@@ -0,0 +1,292 @@
+%\documentstyle[psfig]{article}
+\documentstyle{article}
+\input ../psfig.sty
+\begin{document}
+\pssilent
+\psfigurepath{figs}
+\def\Ps{Post\-Script}
+%
+\title{Psfig/\TeX\ 1.10 Users Guide}
+\author{Trevor Darrell \\ {\it trevor@media.mit.edu}}
+\date{\ }
+\maketitle
+
+\section{Introduction}
+Psfig/\TeX\ is a macro package for \TeX\ that facilitates the
+inclusion of \Ps\ figures into \TeX\ documents. With the
+help of a compatible postprocessor,
+\footnote{The {\tt dvips} program developed by T. Rokicki
+has full psfig support; it is available via anonymous FTP from {\tt labrea.stanford.edu}. OzTeX also supports psfig and is available from various ftp sites. Psfig is available from {\tt whitechapel.media.mit.edu}.}
+\Ps\ figures are automatically
+scaled and positioned on the page, and the proper amount of space is
+reserved.
+Custom characters such as
+`\psfig{figure=pretzel.ps,height=8pt,silent=}' and
+`\psfig{figure=cm.ps,height=8pt,silent=}'
+may be created and used freely throughout a document, or figures can
+be presented as traditional broken-out displays:
+\par
+\hbox{
+\hspace{.3in}
+\vbox{\psfig{figure=zip.ps}\vspace{.5in}}
+\psfig{figure=piechart.ps,height=1.5in}
+\vbox{\psfig{figure=starlines.ps}\vspace{.6in}}
+}
+
+\section{Simple figures}
+To include a \Ps\ figure with psfig, include the psfig style at the top
+of your document:
+\begin{quote}
+{\tt\verb+\documentstyle[psfig,...]{article}+}
+\end{quote}
+and then, when you wish to include a figure, invoke the macro
+\begin{quote}
+{\tt\verb+\+psfig\{figure={\it input}\}}
+\end{quote}
+where {\it input} is the name of a \Ps\ file. Psfig will
+automatically position the figure at the current point on the page,
+and reserve the proper amount of space in \TeX\ so that it doesn't
+block any other objects on the page. For example, if we have a file
+called `piechart.ps' which contains the \Ps\ code to draw the chart in
+the introduction, we could use the commands
+\begin{quote}
+\tt
+\verb+\+par \\
+\verb+\+centerline\{\verb+\+psfig\{figure=piechart.ps\}\} \\
+\verb+\+par
+\end{quote}
+to include it as a centered paragraph.
+Since no mention of size was made in the above example, psfig draws the figure
+at its natural size (as if it was printed directly on
+a \Ps\ printer.) The pie's natural size is several inches across, which
+is a little large; the pie in the introduction was produced with:
+\begin{quote}
+\tt\verb+\+centerline\{\verb+\+psfig\{figure=piechart.ps,height=1.5in\}\}
+\end{quote}
+The {\tt height} option specifies how tall the figure should be on the
+page. Since no {\tt width} was specified, the figure was scaled
+equally in both dimensions. (This will also happen with a {\tt width}
+but no {\tt height} option.) By listing both a {\tt height} and {\tt
+width}, figures can be scaled disproportionately, with interesting
+results:
+\par
+\centerline{\hbox{
+\psfig{figure=rosette.ps,height=.8in,width=.15in}
+\psfig{figure=rosette.ps,height=.8in,width=.35in}
+\psfig{figure=rosette.ps,height=.8in}
+\psfig{figure=rosette.ps,height=.8in,width=1.2in}
+\psfig{figure=rosette.ps,height=.8in,width=1.5in}
+}}
+\par
+\noindent This figure was produced with:
+\begin{quote}
+\tt\verb+\+centerline\{\verb+\+hbox\{ \\
+\verb+\+psfig\{figure=rosette.ps,height=.8in,width=.15in\}\\
+\verb+\+psfig\{figure=rosette.ps,height=.8in,width=.35in\}\\
+\verb+\+psfig\{figure=rosette.ps,height=.8in\} \\
+\verb+\+psfig\{figure=rosette.ps,height=.8in,width=1.2in\}\\
+\verb+\+psfig\{figure=rosette.ps,height=.8in,width=1.5in\}\\
+\}\}
+\end{quote}
+The \verb+\psfig+ macro is (unfortunately) sensitive to whitespace, and will be
+confused by any extra spaces or newlines in its argument.
+\section{Sources of figures}
+\hbox{
+\vbox{\psfig{figure=trevor.ps,height=1in}}
+\hspace{.15in}
+\vbox{\parbox{3.5in} {Any program that produces \Ps\ as output
+can be used for psfig figures
+as long as it adheres to the bounding box comment convention (see below).
+For instance, the bitmap image
+of the author was included as a figure at left.}\vspace{.2in}}}
+
+Since the Macintosh drawing applications produce \Ps, they can be used
+to create figures. However, the \Ps produced by most Macintosh
+applications is often not well suited to be included directly as
+aBpsfig figure, unless it is saved as an ``EPSF compliant'' file. If
+the file is not EPSF compliant then the postscript may have to be
+edited before being used as an included figure.
+
+\section{Draft figures and Silent mode}
+\begin{figure}
+\centerline{
+\psfig{figure=rosette.ps,height=2in}
+\psdraft
+\psfig{figure=rosette.ps,height=2in}
+\psfull
+}
+\vspace{.25in}
+\centerline{Figure 2: The rosette.ps figure, in non-draft and draft mode}
+\end{figure}
+Normally, psfig will print advisory messages to remind you that it is
+including figures as TeX processes a document. This behavior can
+be disabled with {\tt \verb+\+pssilent}, and re-enabled with
+{\tt \verb+\+psnoisy}.
+\par
+Some \Ps\ figures can take quite a long time to transmit and print;
+for these figures a draft mode is available to speed printing of draft
+versions of the document. A figure printed in draft mode will appear
+as an outlined box (Figure 2). The macro {\tt
+\verb+\+psdraft} will switch into draft mode, and all subsequent psfig
+macros will produce draft figures until reaching the macro {\tt
+\verb+\+psfull}, which switches out of draft mode.
+
+No {\tt
+\verb+\+special} commands are used in draft mode, so a draft document
+can be previewed using any Dvi viewer. Psfig uses the \LaTeX\ {\tt
+\verb+\+fbox} command to produce the draft box; thus draft boxes will
+not work in plain \TeX. The printing of boxes in draft mode can be
+disabled/enabled with {\tt
+\verb+\+psnodraftbox} and {\tt
+\verb+\+psdraftbox}.
+
+\section{Bounding boxes}
+To properly translate and scale a figure psfig must know its `natural'
+position on the page; this information is present
+in what is called the {\it bounding box} of a \Ps\ program. The
+bounding box is an outer limit to the marks created by a program,
+and is specified as four coordinates of a rectangle: the lower-left $x$ coordinate
+(bbllx), the lower-left $y$ coordinate (bblly), the upper-right
+$x$ coordinate (bburx), and the upper-right $y$ coordinate (bbury).
+Adobe has defined a convention whereby the bounding box of a program
+is contained in a `bounding box comment'.
+\footnote{See `Appendix J: \Ps\ File Structuring Conventions' in
+{\it The \Ps\ Language Reference Manual}}
+This comment, which must be present in any file to be used as a psfig figure,
+is a line of the form
+\begin{quote}
+\tt \verb+%%+BoundingBox: \it bbllx bblly bburx bbury
+\end{quote}
+All values are in \Ps\ points, relative to the {\it default}
+transformation matrix. The only mandatory \Ps\ convention is
+that the first line of the file should begin with the characters
+`\verb+%+!' (a `\verb+%+' begins a comment in \Ps.) A good place for the
+bounding box comment is as the second line of the file.
+\par
+If a bounding box comment is present in the figure file, psfig will
+extract its values. The bounding box values may instead be specified
+directly in the {\tt \verb+\+psfig} argument, using clauses of the
+form {\tt bbllx=\it bbllx},{\tt bblly=\it bblly},..., in which case
+the figure file is not searched for the bounding box.
+
+\section{Reserved size}
+\par
+\psfig{figure=box.ps,rheight=0bp,rwidth=0bp,height=1.25in,width=\textwidth,silent=}
+\par
+There are two sizes associated with each psfig figure: the size
+at which it is to be printed on the page
+and the size it reserves in \TeX. This latter size is appropriately
+termed the {\it reserved size}, and is expressed as clauses of the form
+``{\tt rheight={\it dimen}}''
+and ``{\tt rwidth={\it dimen}}''. If omitted, the reserved size defaults
+to the real size. Some special effects need to be transparent
+to \TeX\ and thus have a zero reserved size, such as the grey
+box enclosing
+this paragraph.
+
+\section{Clipping}
+Normally a \Ps\ program can be expected to not mark the page
+outside its bounding box. If this is not the case, or if you
+want to specify a bounding box so as to isolate part of a larger figure,
+there is an option that sets the \Ps\ clip path so that
+no marks will show up outside the declared bounding box. Currently
+this is invoked by adding a clause of the form ``{\tt clip=}''.
+Here a slice has been taken out of the pie chart in the example by
+specifying a smaller bounding box and adding the clip option.
+\par
+\centerline{\protect\fbox{\psfig{figure=piechart.ps,height=2in,bbllx=306bp,bblly=396bp,bburx=486bp,bbury=546bp,clip=}}}
+\centerline{A piece of the pie.}
+\vspace{.2in}
+\par
+Some \Ps\ programs use the clipping path to position their output on
+the page; if a figure is being drawn at its natural size and position
+despite psfig commands to the contrary, it may need the clip option.
+
+\newpage
+\section{Rotating figures}
+Figures can be rotated by psfig using the {\tt angle={\it degrees}}
+clause. For example, here is the rosette and its 90 degree rotation:
+
+\centerline{\hbox{
+\psfig{figure=rosette.ps,height=1.0in}
+\psfig{figure=rosette.ps,height=1.0in,angle=90}
+}}
+
+By default psfig scales the figure so that its rotated bounding box
+fits within the desired size. This can lead to counterintuitive results
+when rotating to angles which are not multiples of 90 degrees. Here
+is the rosette rotated to 0,20,40, and 60 degrees.
+
+\centerline{\hbox{
+\psfig{figure=rosette.ps,height=1.0in}
+\psfig{figure=rosette.ps,height=1.0in,angle=20}
+\psfig{figure=rosette.ps,height=1.0in,angle=40}
+\psfig{figure=rosette.ps,height=1.0in,angle=60}
+}}
+
+With autoscaling, some rotated figures come out smaller because the
+diagonal of their bounding box is of course longer than their height
+or width alone. This behavior can be disabled with {\tt
+\verb+\+psscalefirst}, and re-enabled with {\tt
+\verb+\+psrotatefirst}. With {\tt \verb+\+psscalefirst} a new
+height and width is computed after the bounding box;
+the previous figure would now look like:
+
+\psscalefirst
+\centerline{\hbox{
+\psfig{figure=rosette.ps,height=1.0in}
+\psfig{figure=rosette.ps,height=1.0in,angle=20}
+\psfig{figure=rosette.ps,height=1.0in,angle=40}
+\psfig{figure=rosette.ps,height=1.0in,angle=60}
+}}
+
+While the rotated figures will all come out at the same
+size their reserved sizes will be different, thus
+they may not be aligned correctly.
+
+\section{Compressed Figures}
+Psfig allows the inclusion of compressed \Ps files when using
+the {\tt dvips} dvi processor.
+The shell script {\tt pscompress} is used to compress figures, and
+produces two files: {\it filename}{\tt .bb} and {\it filename}{\tt .Z}.
+The first file contains the bounding box comment only, while the second
+file contains the actual compressed PostScript file. Usage:
+\begin{quote}
+\tt \verb+%+ pscompress \it filename
+\end{quote}
+When psfig searches for a figure, if it fails to find
+{\it filename}, it then searches for {\it filename}{\tt .bb}.
+If that file exists, it is used for bounding box processing,
+and a command to decompress and include the file {\it filename}{\tt .Z}
+is issued to dvips.
+
+\section{Figure search path}
+
+Psfig first searches in the current directory for a figure (or
+in the specified directory if given an absolute path). If it fails
+to find the figure in the current directory, it optionally searches
+a search path of figure directories to see if the figure is
+present. To specify the figure search path, use
+\begin{quote}
+\tt \verb+\+psfigurepath\verb+{+\it dir1 \tt :\it dir2\tt :\it ...\tt :\it dirn\tt\verb+}+
+\end{quote}
+where {\it dir1...dirn} are the directories figures are to be found in.
+\newpage
+\section{Acknowledgements}
+\par
+This work was done while the author was with the Department of
+Computer and Information Science, University of Pennsylvania. Ned
+Batchelder co-developed the original {\it troff} version of this
+program with the author, and was responsible for much of the overall
+design. For more detailed information on the original version of \Ps\
+see {\it Psfig -- A Ditroff Preprocessor for PostScript Figures} in
+the USENIX 87 proceedings, or {\it Bringing troff up to speed} in the
+July 1987 issue of Unix Review.
+
+Greg Hager provided the initial pure-\TeX\ implementation of psfig.
+J. Daniel Smith of Schlumberger CAD/CAM implemented the rotation
+feature and improved the file scanning routines, using certain code
+fragments from Tom Rokicki's dvips program.
+\par
+\end{document}
+
diff --git a/graphics/psfig/doc/psfig.man b/graphics/psfig/doc/psfig.man
new file mode 100644
index 0000000000..b638852867
--- /dev/null
+++ b/graphics/psfig/doc/psfig.man
@@ -0,0 +1,261 @@
+.TH Psfig/TeX 1
+.SH NAME
+Psfig/TeX (1.10) \- PostScript figures in TeX
+.SH SYNTAX
+\\\fBinput psfig\fP
+.SH DESCRIPTION
+.B Psfig/TeX
+is a macro package for TeX, as well as LaTeX, that facilitates the
+inclusion of PostScript figures into (La)TeX documents.
+With the help of a compatible postprocessor, PostScript figures are
+automatically scaled and positioned on the page, and the proper amount
+of space is reserved.
+Figures can be presented as traditional broken-out displays,
+and Custom characters may be created and used freely throughout a document.
+.PP
+The \fBdvips\fP program developed by Tomas Rokicki has full
+\fBpsfig\fP support. The \fBOzTeX\fP package has support for
+all \fBpsfig\fp functions except compressed figures.
+.PP
+.SH USAGE
+To include a figure with \fBpsfig\fP, include the \fBpsfig\fP style at
+the top of your document.
+In LaTeX: ``\\\fBdocumentstyle\fP[psfig,...]{article}''; in TeX:
+``\\\fBinput\fP psfig''.
+Then invoke the macro ``\\\fBpsfig\fP{figure=\fIfilename\fP}'', where
+\fIfilename\fP is the name of a PostScript file.
+.B Psfig
+will automatically position the figure at the current
+point on the page, and reserve the proper amount of space.
+.PP
+.SH OPTIONS
+Options may be specified in the form
+``\\\fBpsfig\fP{figure=\fIfilename\fP,\fIoption\fP=\fIvalue\fP,\fIoption\fP=\fIvalue\fP,...}'';
+recognized options include \fBheight\fP, \fBwidth\fP, \fBrheight\fP,
+\fBrwidth\fP, \fBclip\fP, and \fBangle\fP.
+.IP height 9
+The ``\fBheight\fP=\fIdimen\fP'' option specifies how tall the
+figure should be on the page.
+When no \fBwidth\fP is specified, the figure is scaled equally
+in both dimensions.
+.IP width
+The ``\fBwidth\fP=\fIdimen\fP'' option specifies how wide the
+figure should be on the page.
+When no \fBheigth\fP is specified, the figure is scaled equally
+in both dimensions.
+.IP
+If no \fBheight\fP or \fBwidth\fP option is given, the figure's
+`natural' size will be used.
+By listing both a \fBheight\fP and \fBwidth\fP, figures can be scaled
+disproportionately.
+.IP rheight
+There are two sizes associated with each \fBpsfig\fP figure: the size
+at which it is to be printed on the page and the size it reserves
+in TeX.
+This latter size is appropriately termed the reserved size, and is
+expressed as an option of the form ``\fBrheight\fP=\fIdimen\fP'',
+to reserve a vertical size of \fIdimen\fP.
+If omitted, the reserved size defaults to the real size.
+Some special effects need to be transparent to TeX and thus have a
+zero reserved size, such as a grey box enclosing a paragraph.
+.IP rwidth
+To reserve a width in TeX, the ``\fBrwidth\fP=\fIdimen\fP''
+option is used.
+.IP clip
+The ``\fBclip\fP=t'' option sets the PostScript clipping path
+so that no marks will show up outside the declared bounding box.
+This option allows the user to isolate part of a larger figure,
+by specifying a new bounding box:
+``\\\fBpsfig\fP{figure=figs/piechart.ps,height=2in,bbllx=306bp,%
+bblly=396bp,bburx=486bp,bbury=546bp,clip=}''
+.IP angle
+Figures can be rotated by \fBpsfig\fP using the ``\fBangle\fP=\fIdegrees\fP''
+option.
+Example:
+``\\\fBpsfig\fP{figure=figs/rosette.ps,height=1.0in,angle=90}''.
+.PP
+.SH AUTOSCALING
+With autoscaling, some rotated figures come out smaller because the
+diagonal of their bounding box is longer than their \fBheight\fP
+or \fBwidth\fP alone.
+This behavior can be disabled with \\\fBpsscalefirst\fP, and re-enabled
+with \\\fBpsrotatefirst\fP.
+With \\\fBpsscalefirst\fP a new \fBheight\fP and \fBwidth\fP are
+computed after the bounding box.
+While the rotated figures will all come out at the same size, their
+reserved sizes will be different, thus they may not be aligned
+correctly.
+.PP
+.SH SOURCES OF FIGURES
+Any PostScript program can be used as a
+\fBpsfig\fP figure, as long as it adheres to the
+Encapsulated PostScript Format (EPSF), which
+dictates a set of forbidden operators and a comment
+structuring convention. \fBPsfig\fP
+is actually less restrictive than the EPSF requirements; it can handle
+some of the "non-compliant" postscript operators, and the only
+required comment is the Bounding Box comment (see below).
+.PP
+.SH BOUNDING BOXES
+To properly translate and scale a figure \fBpsfig\fP must know
+its `natural' position on the page; this information is present
+in the `bounding box comment' of a PostScript program.
+This is a line of the form
+``%%BoundingBox: \fIbbllx bblly bburx bbury\fP'' in the header of
+the file.
+.PP
+The bounding box specifies four coordinates of a rectangle that
+defines the outermost edges of the PostScript figure: the lower-left
+\fIx\fP coordinate (\fIbbllx\fP), the lower-left \fIy\fP coordinate
+(\fIbblly\fP), the upper-right \fIx\fP coordinate (\fIbburx\fP), and
+the upper-right \fIy\fP coordinate (\fIbbury\fP).
+This rectangle must be present in any file to be used as a
+\fBpsfig\fP figure.
+Most modern graphics packages produce (encapsulated) PostScript
+files which contain a ``%%BoundingBox:'' comment line in the header.
+All \fIbb...\fP values are in points, relative to the default
+transformation matrix.
+.PP
+.SH MISSING BOUNDING BOX
+When no bounding box comment line is present in your PostScript file,
+you can edit one in.
+The only mandatory PostScript convention is that the first line of
+the file should begin with the characters `%!'.
+A good place for the bounding box comment is the second line of
+the file.
+.PP
+The bounding box values may also be specified directly in the
+\\\fBpsfig\fP argument, using clauses of the form
+``bbllx=\fIbbllx\fP,bblly=\fIbblly\fP,...'', in which case
+the figure file is not searched for the bounding box.
+.PP
+To control the amount of white space around a figure in a (La)TeX
+document, it may be necessary to experiment with the bounding box
+parameters \fIbb...\fP, also in cases where the bounding box is
+provided by the plot or graphics package.
+.PP
+.SH DRAFT FIGURES
+Some PostScript figures take quite a long time to transmit and print;
+for these figures a draft mode is available to speed printing of draft
+versions of the document.
+A figure printed in draft mode will appear as an empty box.
+The macro \\\fBpsdraft\fP will switch into draft mode, and all
+subsequent \fBpsfig\fP macros will produce draft figures until reaching
+the macro \\\fBpsfull\fP, which switches out of draft mode.
+.PP
+No \\\fBspecial\fP commands are used in draft mode, so a draft document
+can be previewed using \fIany\fP DVI viewer.
+The printing of boxes in draft mode can be disabled/enabled with
+\\\fBpsnodraftbox\fP and \\\fBpsdraftbox\fP.
+.PP
+.SH SILENT MODE
+Normally, \fBpsfig\fP will print advisory messages to remind you that it is
+including figures as (La)TeX processes a document. This behavior can
+be disabled with \\\fBpssilent\fP, and re-enabled with \\\fBpsnoisy\fP.
+.PP
+.SH COMPRESSED POSTSCRIPT FILES
+As off version 1.9, \fBpsfig\fP allows the inclusion of compressed
+PostScript files (when using \fBdvips\fP).
+.PP
+To compress PostScript files, the shell script \fBpscompress\fP is used.
+\fBPscompress\fP produces two files: \fIfilename\fP.bb and \fIfilename\fP.Z.
+The first file contains the bounding box comment only, while the second
+file contains the actual compressed PostScript file.
+Usage: ``% \fBpscompress\fP \fIfilename\fP''.
+.PP
+When (La)TeX is run on \fIyour_document\fP.tex, the file \fIfilename\fP.bb
+is scanned for the bounding box comment, to allow (La)TeX to properly
+reserve the right size for the figure.
+Only when the file \fIyour_document\fP.dvi is printed by means of \fBdvips\fP,
+the actual PostScript file \fIfilename\fP.Z is decompressed (\fBzcat\fP-ed)
+and included in \fIyour_document\fP.ps.
+.PP
+.SH MACINTOSH FIGURES
+Since the Macintosh drawing applications produce PostScript, they can
+be used to create figures.
+However, the PostScript produced by most Macintosh applications is often
+not well
+suited to be included directly as a \fBpsfig\fP figure, unless it is
+saved as an "EPSF compliant" file. If the file is not "EPSF compliant"
+then the postscript may have to be edited before being used
+as an included figure. See the \fBpsfig\fP tool \fBcleanfig\fP
+and the sample document \fBmacdemo.tex\fP for guidance.
+.PP
+Non-EPSF Macintosh PostScript files often
+require a ``Laserprep'' prolog in order to
+be properly printed.
+A laserprep prolog can be included with the \fBdvips\fP special
+header command at the top of your (La)TeX file:
+``\\\fBspecial\fP{header=lprep70.procs}''.
+\fBPsfig\fP provides `lprep68.procs', as well as `lprep70.procs',
+to suit various versions of the Macintosh applications.
+.PP
+.SH FIGURE SEARCH PATH
+Psfig first searches in the current directory for a figure (or
+in the specified directory if given an absolute path). If it fails
+to find the figure in the current directory, it optionally searches
+a search path of figure directories to see if the figure is
+present. To specify the figure search path, use
+"\\psfigurepath{dir1:dir2:...:dirn}",
+where dir1...dirn are the directories figures are to be found in.
+.PP
+.SH PROBLEMS
+.IP Problem: 10
+The page with graphics is not printed.
+.IP Solution: 10
+Remove lines containing `\fBshowpage\fP' and/or `\fBstop\fP'
+from the PostScript graphics file.
+Lines of this kind are usually found near the end of the file.
+.IP Problem: 10
+The figure is positioned in weird places.
+.IP
+Generally, this is an indication that the PostScript ``%%BoundingBox:''
+comment is missing.
+It may also be that a translation takes places \fIafter\fP the
+bounding box was determined.
+.RE
+.IP Solution: 10
+Edit a bounding box comment into the PostScript file
+and/or experiment with the \fIbb...\fP values (see: MISSING BOUNDING
+BOX above).
+.PP
+.SH BUGS
+The \\\fBpsfig\fP macro is (unfortunately) sensitive to whitespace,
+and will be confused by any extra spaces or newlines in its argument.
+.PP
+The LaTeX \fBletter\fP style must be loaded after the
+\\\fBpsfig\fP macros due to naming conflicts. This can be
+forced by including psfig with an explicit \\\fBinput\fP
+command before the \\\fBdocumentstyle\fP command.
+.PP
+.SH ACKNOWLEDGEMENTS
+This work was done while the author was with the Department of
+Computer and Information Science, University of Pennsylvania. Ned
+Batchelder co-developed the original troff version of this
+program with the author, and was responsible for much of the overall
+design. For more detailed information on the original version of
+see \fIPsfig \- A Ditroff Preprocessor for PostScript Figures\fP in
+the USENIX 87 proceedings, or \fIBringing troff up to speed\fP in the
+July 1987 issue of Unix Review.
+.PP
+Greg Hager provided the initial pure-TeX implementation of \fBpsfig\fP.
+J. Daniel Smith of Schlumberger CAD/CAM implemented the rotation
+feature and improved the file scanning routines, using certain code
+fragments from Tom Rokicki's \fBdvips\fP program.
+.PP
+Thanks to Sake Hogeveen (hogeveen.fys.ruu.nl) for editing this man page.
+.SH AUTHOR
+Trevor Darrell
+.PP
+.SH SEE ALSO
+tex(1), latex(1), dvips(1), psfig-troff(1)
+.PP
+A printed version of the psfig-tex manual may be obtained by typing
+.br
+``% \fBlatex\fP psfig-doc'', then ``% \fBdvips\fP psfig-doc'',
+.br
+and finally printing the resulting psfig-doc.ps file on your nearest
+PostScript printer.
+The manual provides many examples with real-life PostScript graphics,
+see the text of psfig-doc.tex for more usage examples.
+
diff --git a/graphics/psfig/pscompress b/graphics/psfig/pscompress
new file mode 100644
index 0000000000..c0f1346818
--- /dev/null
+++ b/graphics/psfig/pscompress
@@ -0,0 +1,12 @@
+#!/bin/csh -f
+while ($1 != "")
+ if (-e $1.bb || -e $1.Z) then
+ echo will not overwrite $1.bb or $1.Z, skipping
+ shift
+ else
+ echo "%\!" > $1.bb
+ grep \%\%BoundingBox $1 >> $1.bb
+ compress $1
+ shift
+ endif
+end
diff --git a/graphics/psfig/psfig.sty b/graphics/psfig/psfig.sty
new file mode 100644
index 0000000000..606c18ce8e
--- /dev/null
+++ b/graphics/psfig/psfig.sty
@@ -0,0 +1,995 @@
+% Psfig/TeX
+\def\PsfigVersion{1.10}
+\def\setDriver{\DvipsDriver} % \DvipsDriver or \OzTeXDriver
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright 1993 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice is clearly maintained. The right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author(s) of that portion.
+%
+% To use with LaTeX, use \documentstyle[psfig,...]{...}
+% To use with TeX, use \input psfig.sty
+%
+% Bugs and improvements to trevor@media.mit.edu.
+%
+% Thanks to Ned Batchelder, Greg Hager (GDH), J. Daniel Smith (JDS),
+% Tom Rokicki (TR), Robert Russell (RR), George V. Reilly (GVR),
+% Ken McGlothlen (KHC), Baron Grey (BG), Gerhard Tobermann (GT).
+% and all others who have contributed code and comments to this project!
+%
+% ======================================================================
+% Modification History:
+%
+% 9 Oct 1990 JDS used more robust bbox reading code from Tom Rokicki
+% 29 Mar 1991 JDS implemented rotation= option
+% 25 Jun 1991 RR if bb specified on cmd line don't check
+% for .ps file.
+% 3 Jul 1991 JDS check if file already read in once
+% 4 Sep 1991 JDS fixed incorrect computation of rotated
+% bounding box
+% 25 Sep 1991 GVR expanded synopsis of \psfig
+% 14 Oct 1991 JDS \fbox code from LaTeX so \psdraft works with TeX
+% changed \typeout to \ps@typeout
+% 17 Oct 1991 JDS added \psscalefirst and \psrotatefirst
+% 23 Jun 1993 KHC ``doclip'' must appear before ``rotate''
+% 27 Oct 1993 TJD removed printing of filename to avoid
+% underscore problems. changed \frame to \fbox.
+% Added OzTeX support from BG. Added new
+% figure search path code from GT.
+%
+% ======================================================================
+%
+% Command synopsis:
+%
+% \psdraft draws an outline box, but doesn't include the figure
+% in the DVI file. Useful for previewing.
+%
+% \psfull includes the figure in the DVI file (default).
+%
+% \psscalefirst width= or height= specifies the size of the figure
+% before rotation.
+% \psrotatefirst (default) width= or height= specifies the size of the
+% figure after rotation. Asymetric figures will
+% appear to shrink.
+%
+% \psfigurepath{dir:dir:...} sets the path to search for the figure
+%
+% \psfig
+% usage: \psfig{file=, figure=, height=, width=,
+% bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=, angle=, silent=}
+%
+% "file" is the filename. If no path name is specified and the
+% file is not found in the current directory,
+% it will be looked for in directory \psfigurepath.
+% "figure" is a synonym for "file".
+% By default, the width and height of the figure are taken from
+% the BoundingBox of the figure.
+% If "width" is specified, the figure is scaled so that it has
+% the specified width. Its height changes proportionately.
+% If "height" is specified, the figure is scaled so that it has
+% the specified height. Its width changes proportionately.
+% If both "width" and "height" are specified, the figure is scaled
+% anamorphically.
+% "bbllx", "bblly", "bburx", and "bbury" control the PostScript
+% BoundingBox. If these four values are specified
+% *before* the "file" option, the PSFIG will not try to
+% open the PostScript file.
+% "rheight" and "rwidth" are the reserved height and width
+% of the figure, i.e., how big TeX actually thinks
+% the figure is. They default to "width" and "height".
+% The "clip" option ensures that no portion of the figure will
+% appear outside its BoundingBox. "clip=" is a switch and
+% takes no value, but the `=' must be present.
+% The "angle" option specifies the angle of rotation (degrees, ccw).
+% The "silent" option makes \psfig work silently.
+%
+% ======================================================================
+% check to see if macros already loaded in (maybe some other file says
+% "\input psfig") ...
+\ifx\undefined\psfig\else\endinput\fi
+%
+% from a suggestion by eijkhout@csrd.uiuc.edu to allow
+% loading as a style file. Changed to avoid problems
+% with amstex per suggestion by jbence@math.ucla.edu
+
+\let\LaTeXAtSign=\@
+\let\@=\relax
+\edef\psfigRestoreAt{\catcode`\@=\number\catcode`@\relax}
+%\edef\psfigRestoreAt{\catcode`@=\number\catcode`@\relax}
+\catcode`\@=11\relax
+\newwrite\@unused
+\def\ps@typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+
+\def\DvipsDriver{
+ \ps@typeout{psfig/tex \PsfigVersion -dvips}
+\def\PsfigSpecials{\DvipsSpecials} \def\ps@dir{/}
+\def\ps@predir{} }
+\def\OzTeXDriver{
+ \ps@typeout{psfig/tex \PsfigVersion -oztex}
+ \def\PsfigSpecials{\OzTeXSpecials}
+ \def\ps@dir{:}
+ \def\ps@predir{:}
+ \catcode`\^^J=5
+}
+
+%% Here's how you define your figure path. Should be set up with null
+%% default and a user useable definition.
+
+\def\figurepath{./:}
+\def\psfigurepath#1{\edef\figurepath{#1:}}
+
+%%% inserted for Searching Unixpaths
+%%% (the path must end with :)
+%%% (call: \DoPaths\figurepath )
+%%%------------------------------------------------------
+\def\DoPaths#1{\expandafter\EachPath#1\stoplist}
+%
+\def\leer{}
+\def\EachPath#1:#2\stoplist{% #1 part of the list (delimiter :)
+ \ExistsFile{#1}{\SearchedFile}
+ \ifx#2\leer
+ \else
+ \expandafter\EachPath#2\stoplist
+ \fi}
+%
+% exists the file (does not work for directories!)
+%
+\def\ps@dir{/}
+\def\ExistsFile#1#2{%
+ \openin1=\ps@predir#1\ps@dir#2
+ \ifeof1
+ \closein1
+ %\ps@typeout{...not: \ps@predir#1\ps@dir#2}
+ \else
+ \closein1
+ %\ps@typeout{...in: \ps@predir#1\ps@dir#2}
+ \ifx\ps@founddir\leer
+ %\ps@typeout{set founddir #1}
+ \edef\ps@founddir{#1}
+ \fi
+ \fi}
+%------------------------------------------------------
+%
+% Get dir in path or error
+%
+\def\get@dir#1{%
+ \def\ps@founddir{}
+ \def\SearchedFile{#1}
+ \DoPaths\figurepath
+% \fi
+}
+%------------------------------------------------------
+%%% END of Searching Unixpaths
+
+
+%
+% @psdo control structure -- similar to Latex @for.
+% I redefined these with different names so that psfig can
+% be used with TeX as well as LaTeX, and so that it will not
+% be vunerable to future changes in LaTeX's internal
+% control structure,
+%
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@psdonoop#1\@@#2#3{}
+\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}
+\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}
+\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}
+\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}
+%
+% \fbox is defined in latex.tex; so if \fbox is undefined, assume that
+% we are not in LaTeX.
+% Perhaps this could be done better???
+\ifx\undefined\fbox
+% \fbox code from modified slightly from LaTeX
+\newdimen\fboxrule
+\newdimen\fboxsep
+\newdimen\ps@tempdima
+\newbox\ps@tempboxa
+\fboxsep = 3pt
+\fboxrule = .4pt
+\long\def\fbox#1{\leavevmode\setbox\ps@tempboxa\hbox{#1}\ps@tempdima\fboxrule
+ \advance\ps@tempdima \fboxsep \advance\ps@tempdima \dp\ps@tempboxa
+ \hbox{\lower \ps@tempdima\hbox
+ {\vbox{\hrule height \fboxrule
+ \hbox{\vrule width \fboxrule \hskip\fboxsep
+ \vbox{\vskip\fboxsep \box\ps@tempboxa\vskip\fboxsep}\hskip
+ \fboxsep\vrule width \fboxrule}
+ \hrule height \fboxrule}}}}
+\fi
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% file reading stuff from epsf.tex
+% EPSF.TEX macro file:
+% Written by Tomas Rokicki of Radical Eye Software, 29 Mar 1989.
+% Revised by Don Knuth, 3 Jan 1990.
+% Revised by Tomas Rokicki to accept bounding boxes with no
+% space after the colon, 18 Jul 1990.
+% Portions modified/removed for use in PSFIG package by
+% J. Daniel Smith, 9 October 1990.
+%
+\newread\ps@stream
+\newif\ifnot@eof % continue looking for the bounding box?
+\newif\if@noisy % report what you're making?
+\newif\if@atend % %%BoundingBox: has (at end) specification
+\newif\if@psfile % does this look like a PostScript file?
+%
+% PostScript files should start with `%!'
+%
+{\catcode`\%=12\global\gdef\epsf@start{%!}}
+\def\epsf@PS{PS}
+%
+\def\epsf@getbb#1{%
+%
+% The first thing we need to do is to open the
+% PostScript file, if possible.
+%
+\openin\ps@stream=\ps@predir#1
+\ifeof\ps@stream\ps@typeout{Error, File #1 not found}\else
+%
+% Okay, we got it. Now we'll scan lines until we find one that doesn't
+% start with %. We're looking for the bounding box comment.
+%
+ {\not@eoftrue \chardef\other=12
+ \def\do##1{\catcode`##1=\other}\dospecials \catcode`\ =10
+ \loop
+ \if@psfile
+ \read\ps@stream to \epsf@fileline
+ \else{
+ \obeyspaces
+ \read\ps@stream to \epsf@tmp\global\let\epsf@fileline\epsf@tmp}
+ \fi
+ \ifeof\ps@stream\not@eoffalse\else
+%
+% Check the first line for `%!'. Issue a warning message if its not
+% there, since the file might not be a PostScript file.
+%
+ \if@psfile\else
+ \expandafter\epsf@test\epsf@fileline:. \\%
+ \fi
+%
+% We check to see if the first character is a % sign;
+% if so, we look further and stop only if the line begins with
+% `%%BoundingBox:' and the `(atend)' specification was not found.
+% That is, the only way to stop is when the end of file is reached,
+% or a `%%BoundingBox: llx lly urx ury' line is found.
+%
+ \expandafter\epsf@aux\epsf@fileline:. \\%
+ \fi
+ \ifnot@eof\repeat
+ }\closein\ps@stream\fi}%
+%
+% This tests if the file we are reading looks like a PostScript file.
+%
+\long\def\epsf@test#1#2#3:#4\\{\def\epsf@testit{#1#2}
+ \ifx\epsf@testit\epsf@start\else
+\ps@typeout{Warning! File does not start with `\epsf@start'. It may not be a PostScript file.}
+ \fi
+ \@psfiletrue} % don't test after 1st line
+%
+% We still need to define the tricky \epsf@aux macro. This requires
+% a couple of magic constants for comparison purposes.
+%
+{\catcode`\%=12\global\let\epsf@percent=%\global\def\epsf@bblit{%BoundingBox}}
+%
+%
+% So we're ready to check for `%BoundingBox:' and to grab the
+% values if they are found. We continue searching if `(at end)'
+% was found after the `%BoundingBox:'.
+%
+\long\def\epsf@aux#1#2:#3\\{\ifx#1\epsf@percent
+ \def\epsf@testit{#2}\ifx\epsf@testit\epsf@bblit
+ \@atendfalse
+ \epsf@atend #3 . \\%
+ \if@atend
+ \if@verbose{
+ \ps@typeout{psfig: found `(atend)'; continuing search}
+ }\fi
+ \else
+ \epsf@grab #3 . . . \\%
+ \not@eoffalse
+ \global\no@bbfalse
+ \fi
+ \fi\fi}%
+%
+% Here we grab the values and stuff them in the appropriate definitions.
+%
+\def\epsf@grab #1 #2 #3 #4 #5\\{%
+ \global\def\epsf@llx{#1}\ifx\epsf@llx\empty
+ \epsf@grab #2 #3 #4 #5 .\\\else
+ \global\def\epsf@lly{#2}%
+ \global\def\epsf@urx{#3}\global\def\epsf@ury{#4}\fi}%
+%
+% Determine if the stuff following the %%BoundingBox is `(atend)'
+% J. Daniel Smith. Copied from \epsf@grab above.
+%
+\def\epsf@atendlit{(atend)}
+\def\epsf@atend #1 #2 #3\\{%
+ \def\epsf@tmp{#1}\ifx\epsf@tmp\empty
+ \epsf@atend #2 #3 .\\\else
+ \ifx\epsf@tmp\epsf@atendlit\@atendtrue\fi\fi}
+
+
+% End of file reading stuff from epsf.tex
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% trigonometry stuff from "trig.tex"
+\chardef\psletter = 11 % won't conflict with \begin{letter} now...
+\chardef\other = 12
+
+\newif \ifdebug %%% turn me on to see TeX hard at work ...
+\newif\ifc@mpute %%% don't need to compute some values
+\c@mputetrue % but assume that we do
+
+\let\then = \relax
+\def\r@dian{pt }
+\let\r@dians = \r@dian
+\let\dimensionless@nit = \r@dian
+\let\dimensionless@nits = \dimensionless@nit
+\def\internal@nit{sp }
+\let\internal@nits = \internal@nit
+\newif\ifstillc@nverging
+\def \Mess@ge #1{\ifdebug \then \message {#1} \fi}
+
+{ %%% Things that need abnormal catcodes %%%
+ \catcode `\@ = \psletter
+ \gdef \nodimen {\expandafter \n@dimen \the \dimen}
+ \gdef \term #1 #2 #3%
+ {\edef \t@ {\the #1}%%% freeze parameter 1 (count, by value)
+ \edef \t@@ {\expandafter \n@dimen \the #2\r@dian}%
+ %%% freeze parameter 2 (dimen, by value)
+ \t@rm {\t@} {\t@@} {#3}%
+ }
+ \gdef \t@rm #1 #2 #3%
+ {{%
+ \count 0 = 0
+ \dimen 0 = 1 \dimensionless@nit
+ \dimen 2 = #2\relax
+ \Mess@ge {Calculating term #1 of \nodimen 2}%
+ \loop
+ \ifnum \count 0 < #1
+ \then \advance \count 0 by 1
+ \Mess@ge {Iteration \the \count 0 \space}%
+ \Multiply \dimen 0 by {\dimen 2}%
+ \Mess@ge {After multiplication, term = \nodimen 0}%
+ \Divide \dimen 0 by {\count 0}%
+ \Mess@ge {After division, term = \nodimen 0}%
+ \repeat
+ \Mess@ge {Final value for term #1 of
+ \nodimen 2 \space is \nodimen 0}%
+ \xdef \Term {#3 = \nodimen 0 \r@dians}%
+ \aftergroup \Term
+ }}
+ \catcode `\p = \other
+ \catcode `\t = \other
+ \gdef \n@dimen #1pt{#1} %%% throw away the ``pt''
+}
+
+\def \Divide #1by #2{\divide #1 by #2} %%% just a synonym
+
+\def \Multiply #1by #2%%% allows division of a dimen by a dimen
+ {{%%% should really freeze parameter 2 (dimen, passed by value)
+ \count 0 = #1\relax
+ \count 2 = #2\relax
+ \count 4 = 65536
+ \Mess@ge {Before scaling, count 0 = \the \count 0 \space and
+ count 2 = \the \count 2}%
+ \ifnum \count 0 > 32767 %%% do our best to avoid overflow
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 0 < -32767
+ \then \divide \count 0 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \ifnum \count 2 > 32767 %%% while retaining reasonable accuracy
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else \ifnum \count 2 < -32767
+ \then \divide \count 2 by 4
+ \divide \count 4 by 4
+ \else
+ \fi
+ \fi
+ \multiply \count 0 by \count 2
+ \divide \count 0 by \count 4
+ \xdef \product {#1 = \the \count 0 \internal@nits}%
+ \aftergroup \product
+ }}
+
+\def\r@duce{\ifdim\dimen0 > 90\r@dian \then % sin(x+90) = sin(180-x)
+ \multiply\dimen0 by -1
+ \advance\dimen0 by 180\r@dian
+ \r@duce
+ \else \ifdim\dimen0 < -90\r@dian \then % sin(-x) = sin(360+x)
+ \advance\dimen0 by 360\r@dian
+ \r@duce
+ \fi
+ \fi}
+
+\def\Sine#1%
+ {{%
+ \dimen 0 = #1 \r@dian
+ \r@duce
+ \ifdim\dimen0 = -90\r@dian \then
+ \dimen4 = -1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 90\r@dian \then
+ \dimen4 = 1\r@dian
+ \c@mputefalse
+ \fi
+ \ifdim\dimen0 = 0\r@dian \then
+ \dimen4 = 0\r@dian
+ \c@mputefalse
+ \fi
+%
+ \ifc@mpute \then
+ % convert degrees to radians
+ \divide\dimen0 by 180
+ \dimen0=3.141592654\dimen0
+%
+ \dimen 2 = 3.1415926535897963\r@dian %%% a well-known constant
+ \divide\dimen 2 by 2 %%% we only deal with -pi/2 : pi/2
+ \Mess@ge {Sin: calculating Sin of \nodimen 0}%
+ \count 0 = 1 %%% see power-series expansion for sine
+ \dimen 2 = 1 \r@dian %%% ditto
+ \dimen 4 = 0 \r@dian %%% ditto
+ \loop
+ \ifnum \dimen 2 = 0 %%% then we've done
+ \then \stillc@nvergingfalse
+ \else \stillc@nvergingtrue
+ \fi
+ \ifstillc@nverging %%% then calculate next term
+ \then \term {\count 0} {\dimen 0} {\dimen 2}%
+ \advance \count 0 by 2
+ \count 2 = \count 0
+ \divide \count 2 by 2
+ \ifodd \count 2 %%% signs alternate
+ \then \advance \dimen 4 by \dimen 2
+ \else \advance \dimen 4 by -\dimen 2
+ \fi
+ \repeat
+ \fi
+ \xdef \sine {\nodimen 4}%
+ }}
+
+% Now the Cosine can be calculated easily by calling \Sine
+\def\Cosine#1{\ifx\sine\UnDefined\edef\Savesine{\relax}\else
+ \edef\Savesine{\sine}\fi
+ {\dimen0=#1\r@dian\advance\dimen0 by 90\r@dian
+ \Sine{\nodimen 0}
+ \xdef\cosine{\sine}
+ \xdef\sine{\Savesine}}}
+% end of trig stuff
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\psdraft{
+ \def\@psdraft{0}
+ %\ps@typeout{draft level now is \@psdraft \space . }
+}
+\def\psfull{
+ \def\@psdraft{100}
+ %\ps@typeout{draft level now is \@psdraft \space . }
+}
+
+\psfull
+
+\newif\if@scalefirst
+\def\psscalefirst{\@scalefirsttrue}
+\def\psrotatefirst{\@scalefirstfalse}
+\psrotatefirst
+
+\newif\if@draftbox
+\def\psnodraftbox{
+ \@draftboxfalse
+}
+\def\psdraftbox{
+ \@draftboxtrue
+}
+\@draftboxtrue
+
+\newif\if@prologfile
+\newif\if@postlogfile
+\def\pssilent{
+ \@noisyfalse
+}
+\def\psnoisy{
+ \@noisytrue
+}
+\psnoisy
+%%% These are for the option list.
+%%% A specification of the form a = b maps to calling \@p@@sa{b}
+\newif\if@bbllx
+\newif\if@bblly
+\newif\if@bburx
+\newif\if@bbury
+\newif\if@height
+\newif\if@width
+\newif\if@rheight
+\newif\if@rwidth
+\newif\if@angle
+\newif\if@clip
+\newif\if@verbose
+\def\@p@@sclip#1{\@cliptrue}
+%
+%
+\newif\if@decmpr
+%
+\def\@p@@sfigure#1{\def\@p@sfile{null}\def\@p@sbbfile{null}\@decmprfalse
+ % look directly for file (e.g. absolute path)
+ \openin1=\ps@predir#1
+ \ifeof1
+ \closein1
+ % failed, search directories for file
+ \get@dir{#1}
+ \ifx\ps@founddir\leer
+ % failed, search directly for file.bb
+ \openin1=\ps@predir#1.bb
+ \ifeof1
+ \closein1
+ % failed, search directories for file.bb
+ \get@dir{#1.bb}
+ \ifx\ps@founddir\leer
+ % failed, lose.
+ \ps@typeout{Can't find #1 in \figurepath}
+ \else
+ % found file.bb in search dir
+ \@decmprtrue
+ \def\@p@sfile{\ps@founddir\ps@dir#1}
+ \def\@p@sbbfile{\ps@founddir\ps@dir#1.bb}
+ \fi
+ \else
+ \closein1
+ %found file.bb directly
+ \@decmprtrue
+ \def\@p@sfile{#1}
+ \def\@p@sbbfile{#1.bb}
+ \fi
+ \else
+ % found file in search dir
+ \def\@p@sfile{\ps@founddir\ps@dir#1}
+ \def\@p@sbbfile{\ps@founddir\ps@dir#1}
+ \fi
+ \else
+ % found file directly
+ \closein1
+ \def\@p@sfile{#1}
+ \def\@p@sbbfile{#1}
+ \fi
+}
+%
+%
+%
+\def\@p@@sfile#1{\@p@@sfigure{#1}}
+%
+\def\@p@@sbbllx#1{
+ %\ps@typeout{bbllx is #1}
+ \@bbllxtrue
+ \dimen100=#1
+ \edef\@p@sbbllx{\number\dimen100}
+}
+\def\@p@@sbblly#1{
+ %\ps@typeout{bblly is #1}
+ \@bbllytrue
+ \dimen100=#1
+ \edef\@p@sbblly{\number\dimen100}
+}
+\def\@p@@sbburx#1{
+ %\ps@typeout{bburx is #1}
+ \@bburxtrue
+ \dimen100=#1
+ \edef\@p@sbburx{\number\dimen100}
+}
+\def\@p@@sbbury#1{
+ %\ps@typeout{bbury is #1}
+ \@bburytrue
+ \dimen100=#1
+ \edef\@p@sbbury{\number\dimen100}
+}
+\def\@p@@sheight#1{
+ \@heighttrue
+ \dimen100=#1
+ \edef\@p@sheight{\number\dimen100}
+ %\ps@typeout{Height is \@p@sheight}
+}
+\def\@p@@swidth#1{
+ %\ps@typeout{Width is #1}
+ \@widthtrue
+ \dimen100=#1
+ \edef\@p@swidth{\number\dimen100}
+}
+\def\@p@@srheight#1{
+ %\ps@typeout{Reserved height is #1}
+ \@rheighttrue
+ \dimen100=#1
+ \edef\@p@srheight{\number\dimen100}
+}
+\def\@p@@srwidth#1{
+ %\ps@typeout{Reserved width is #1}
+ \@rwidthtrue
+ \dimen100=#1
+ \edef\@p@srwidth{\number\dimen100}
+}
+\def\@p@@sangle#1{
+ %\ps@typeout{Rotation is #1}
+ \@angletrue
+% \dimen100=#1
+ \edef\@p@sangle{#1} %\number\dimen100}
+}
+\def\@p@@ssilent#1{
+ \@verbosefalse
+}
+\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}
+\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}}
+\def\@cs@name#1{\csname #1\endcsname}
+\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}
+%
+% initialize the defaults (size the size of the figure)
+%
+\def\ps@init@parms{
+ \@bbllxfalse \@bbllyfalse
+ \@bburxfalse \@bburyfalse
+ \@heightfalse \@widthfalse
+ \@rheightfalse \@rwidthfalse
+ \def\@p@sbbllx{}\def\@p@sbblly{}
+ \def\@p@sbburx{}\def\@p@sbbury{}
+ \def\@p@sheight{}\def\@p@swidth{}
+ \def\@p@srheight{}\def\@p@srwidth{}
+ \def\@p@sangle{0}
+ \def\@p@sfile{} \def\@p@sbbfile{}
+ \def\@p@scost{10}
+ \def\@sc{}
+ \@prologfilefalse
+ \@postlogfilefalse
+ \@clipfalse
+ \if@noisy
+ \@verbosetrue
+ \else
+ \@verbosefalse
+ \fi
+}
+%
+% Go through the options setting things up.
+%
+\def\parse@ps@parms#1{
+ \@psdo\@psfiga:=#1\do
+ {\expandafter\@setparms\@psfiga,}}
+%
+% Compute bb height and width
+%
+\newif\ifno@bb
+\def\bb@missing{
+ \if@verbose{
+ \ps@typeout{psfig: searching \@p@sbbfile \space for bounding box}
+ }\fi
+ \no@bbtrue
+ \epsf@getbb{\@p@sbbfile}
+ \ifno@bb \else \bb@cull\epsf@llx\epsf@lly\epsf@urx\epsf@ury\fi
+}
+\def\bb@cull#1#2#3#4{
+ \dimen100=#1 bp\edef\@p@sbbllx{\number\dimen100}
+ \dimen100=#2 bp\edef\@p@sbblly{\number\dimen100}
+ \dimen100=#3 bp\edef\@p@sbburx{\number\dimen100}
+ \dimen100=#4 bp\edef\@p@sbbury{\number\dimen100}
+ \no@bbfalse
+}
+% rotate point (#1,#2) about (0,0).
+% The sine and cosine of the angle are already stored in \sine and
+% \cosine. The result is placed in (\p@intvaluex, \p@intvaluey).
+\newdimen\p@intvaluex
+\newdimen\p@intvaluey
+\def\rotate@#1#2{{\dimen0=#1 sp\dimen1=#2 sp
+% calculate x' = x \cos\theta - y \sin\theta
+ \global\p@intvaluex=\cosine\dimen0
+ \dimen3=\sine\dimen1
+ \global\advance\p@intvaluex by -\dimen3
+% calculate y' = x \sin\theta + y \cos\theta
+ \global\p@intvaluey=\sine\dimen0
+ \dimen3=\cosine\dimen1
+ \global\advance\p@intvaluey by \dimen3
+ }}
+\def\compute@bb{
+ \no@bbfalse
+ \if@bbllx \else \no@bbtrue \fi
+ \if@bblly \else \no@bbtrue \fi
+ \if@bburx \else \no@bbtrue \fi
+ \if@bbury \else \no@bbtrue \fi
+ \ifno@bb \bb@missing \fi
+ \ifno@bb \ps@typeout{FATAL ERROR: no bb supplied or found}
+ \no-bb-error
+ \fi
+ %
+%\ps@typeout{BB: \@p@sbbllx, \@p@sbblly, \@p@sbburx, \@p@sbbury}
+%
+% store height/width of original (unrotated) bounding box
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\ps@bbw{\number\count203}
+ \edef\ps@bbh{\number\count204}
+ %\ps@typeout{ psbbh = \ps@bbh, psbbw = \ps@bbw }
+ \if@angle
+ \Sine{\@p@sangle}\Cosine{\@p@sangle}
+ {\dimen100=\maxdimen\xdef\r@p@sbbllx{\number\dimen100}
+ \xdef\r@p@sbblly{\number\dimen100}
+ \xdef\r@p@sbburx{-\number\dimen100}
+ \xdef\r@p@sbbury{-\number\dimen100}}
+%
+% Need to rotate all four points and take the X-Y extremes of the new
+% points as the new bounding box.
+ \def\minmaxtest{
+ \ifnum\number\p@intvaluex<\r@p@sbbllx
+ \xdef\r@p@sbbllx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluex>\r@p@sbburx
+ \xdef\r@p@sbburx{\number\p@intvaluex}\fi
+ \ifnum\number\p@intvaluey<\r@p@sbblly
+ \xdef\r@p@sbblly{\number\p@intvaluey}\fi
+ \ifnum\number\p@intvaluey>\r@p@sbbury
+ \xdef\r@p@sbbury{\number\p@intvaluey}\fi
+ }
+% lower left
+ \rotate@{\@p@sbbllx}{\@p@sbblly}
+ \minmaxtest
+% upper left
+ \rotate@{\@p@sbbllx}{\@p@sbbury}
+ \minmaxtest
+% lower right
+ \rotate@{\@p@sbburx}{\@p@sbblly}
+ \minmaxtest
+% upper right
+ \rotate@{\@p@sbburx}{\@p@sbbury}
+ \minmaxtest
+ \edef\@p@sbbllx{\r@p@sbbllx}\edef\@p@sbblly{\r@p@sbblly}
+ \edef\@p@sbburx{\r@p@sbburx}\edef\@p@sbbury{\r@p@sbbury}
+%\ps@typeout{rotated BB: \r@p@sbbllx, \r@p@sbblly, \r@p@sbburx, \r@p@sbbury}
+ \fi
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}
+ \edef\@bbh{\number\count204}
+ %\ps@typeout{ bbh = \@bbh, bbw = \@bbw }
+}
+%
+% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
+% then leaves the result in @result
+%
+\def\in@hundreds#1#2#3{\count240=#2 \count241=#3
+ \count100=\count240 % 100 is first digit #2/#3
+ \divide\count100 by \count241
+ \count101=\count100
+ \multiply\count101 by \count241
+ \advance\count240 by -\count101
+ \multiply\count240 by 10
+ \count101=\count240 %101 is second digit of #2/#3
+ \divide\count101 by \count241
+ \count102=\count101
+ \multiply\count102 by \count241
+ \advance\count240 by -\count102
+ \multiply\count240 by 10
+ \count102=\count240 % 102 is the third digit
+ \divide\count102 by \count241
+ \count200=#1\count205=0
+ \count201=\count200
+ \multiply\count201 by \count100
+ \advance\count205 by \count201
+ \count201=\count200
+ \divide\count201 by 10
+ \multiply\count201 by \count101
+ \advance\count205 by \count201
+ %
+ \count201=\count200
+ \divide\count201 by 100
+ \multiply\count201 by \count102
+ \advance\count205 by \count201
+ %
+ \edef\@result{\number\count205}
+}
+\def\compute@wfromh{
+ % computing : width = height * (bbw / bbh)
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}
+ %\ps@typeout{ \@p@sheight * \@bbw / \@bbh, = \@result }
+ \edef\@p@swidth{\@result}
+ %\ps@typeout{w from h: width is \@p@swidth}
+}
+\def\compute@hfromw{
+ % computing : height = width * (bbh / bbw)
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}
+ %\ps@typeout{ \@p@swidth * \@bbh / \@bbw = \@result }
+ \edef\@p@sheight{\@result}
+ %\ps@typeout{h from w : height is \@p@sheight}
+}
+\def\compute@handw{
+ \if@height
+ \if@width
+ \else
+ \compute@wfromh
+ \fi
+ \else
+ \if@width
+ \compute@hfromw
+ \else
+ \edef\@p@sheight{\@bbh}
+ \edef\@p@swidth{\@bbw}
+ \fi
+ \fi
+}
+\def\compute@resv{
+ \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
+ \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
+ %\ps@typeout{rheight = \@p@srheight, rwidth = \@p@srwidth}
+}
+%
+% Compute any missing values
+\def\compute@sizes{
+ \compute@bb
+ \if@scalefirst\if@angle
+% at this point the bounding box has been adjsuted correctly for
+% rotation. PSFIG does all of its scaling using \@bbh and \@bbw. If
+% a width= or height= was specified along with \psscalefirst, then the
+% width=/height= value needs to be adjusted to match the new (rotated)
+% bounding box size (specifed in \@bbw and \@bbh).
+% \ps@bbw width=
+% ------- = ----------
+% \@bbw new width=
+% so `new width=' = (width= * \@bbw) / \ps@bbw; where \ps@bbw is the
+% width of the original (unrotated) bounding box.
+ \if@width
+ \in@hundreds{\@p@swidth}{\@bbw}{\ps@bbw}
+ \edef\@p@swidth{\@result}
+ \fi
+ \if@height
+ \in@hundreds{\@p@sheight}{\@bbh}{\ps@bbh}
+ \edef\@p@sheight{\@result}
+ \fi
+ \fi\fi
+ \compute@handw
+ \compute@resv}
+%
+%
+%
+\def\OzTeXSpecials{
+ \special{empty.ps /@isp {true} def}
+ \special{empty.ps \@p@swidth \space \@p@sheight \space
+ \@p@sbbllx \space \@p@sbblly \space
+ \@p@sbburx \space \@p@sbbury \space
+ startTexFig \space }
+ \if@clip{
+ \if@verbose{
+ \ps@typeout{(clip)}
+ }\fi
+ \special{empty.ps doclip \space }
+ }\fi
+ \if@angle{
+ \if@verbose{
+ \ps@typeout{(rotate)}
+ }\fi
+ \special {empty.ps \@p@sangle \space rotate \space}
+ }\fi
+ \if@prologfile
+ \special{\@prologfileval \space } \fi
+ \if@decmpr{
+ \if@verbose{
+ \ps@typeout{psfig: Compression not available
+ in OzTeX version \space }
+ }\fi
+ }\else{
+ \if@verbose{
+ \ps@typeout{psfig: including \@p@sfile \space }
+ }\fi
+ \special{epsf=\@p@sfile \space }
+ }\fi
+ \if@postlogfile
+ \special{\@postlogfileval \space } \fi
+ \special{empty.ps /@isp {false} def}
+}
+\def\DvipsSpecials{
+ %
+ \special{ps::[begin] \@p@swidth \space \@p@sheight \space
+ \@p@sbbllx \space \@p@sbblly \space
+ \@p@sbburx \space \@p@sbbury \space
+ startTexFig \space }
+ \if@clip{
+ \if@verbose{
+ \ps@typeout{(clip)}
+ }\fi
+ \special{ps:: doclip \space }
+ }\fi
+ \if@angle
+ \if@verbose{
+ \ps@typeout{(clip)}
+ }\fi
+ \special {ps:: \@p@sangle \space rotate \space}
+ \fi
+ \if@prologfile
+ \special{ps: plotfile \@prologfileval \space } \fi
+ \if@decmpr{
+ \if@verbose{
+ \ps@typeout{psfig: including \@p@sfile.Z \space }
+ }\fi
+ \special{ps: plotfile "`zcat \@p@sfile.Z" \space }
+ }\else{
+ \if@verbose{
+ \ps@typeout{psfig: including \@p@sfile \space }
+ }\fi
+ \special{ps: plotfile \@p@sfile \space }
+ }\fi
+ \if@postlogfile
+ \special{ps: plotfile \@postlogfileval \space } \fi
+ \special{ps::[end] endTexFig \space }
+}
+%
+% \psfig
+% usage : \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=}
+%
+% "clip=" is a switch and takes no value, but the `=' must be present.
+\def\psfig#1{\vbox {
+ % do a zero width hard space so that a single
+ % \psfig in a centering enviornment will behave nicely
+ %{\setbox0=\hbox{\ }\ \hskip-\wd0}
+ %
+ \ps@init@parms
+ \parse@ps@parms{#1}
+ \compute@sizes
+ %
+ \ifnum\@p@scost<\@psdraft{
+ \PsfigSpecials
+ % Create the vbox to reserve the space for the figure.
+ \vbox to \@p@srheight sp{
+ % 1/92 TJD Changed from "true sp" to "sp" for magnification.
+ \hbox to \@p@srwidth sp{
+ \hss
+ }
+ \vss
+ }
+ }\else{
+ % draft figure, just reserve the space and print the
+ % path name.
+ \if@draftbox{
+ % Verbose draft: print file name in box
+ % 10/93 TJD changed to fbox from frame
+ \hbox{\fbox{\vbox to \@p@srheight sp{
+ \vss
+ \hbox to \@p@srwidth sp{ \hss
+ % 10/93 TJD deleted to avoid ``_'' problems
+ % \@p@sfile
+ \hss }
+ \vss
+ }}}
+ }\else{
+ % Non-verbose draft
+ \vbox to \@p@srheight sp{
+ \vss
+ \hbox to \@p@srwidth sp{\hss}
+ \vss
+ }
+ }\fi
+
+
+
+ }\fi
+}}
+\psfigRestoreAt
+\setDriver
+\let\@=\LaTeXAtSign
+
+
+
diff --git a/graphics/psfig/unsupported/arbortext.pro b/graphics/psfig/unsupported/arbortext.pro
new file mode 100644
index 0000000000..d06480d112
--- /dev/null
+++ b/graphics/psfig/unsupported/arbortext.pro
@@ -0,0 +1,100 @@
+%!
+% Psfig/TeX Release 1.2
+% arbortext (dvips) version
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+%
+% $Header: figtex.pro,v 1.5 87/07/24 20:14:50 trevor Exp $
+% $Source: $
+%
+%/TeXscale { 65536 div } def
+%/psfts { S 65781.76 div N } N
+/TeXscale { 65781.76 div } def
+
+%/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+%currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+%
+% Since dvi2ps has an initgraphics at the beginning of texpre.ps, we can
+% assume:
+gsave initgraphics
+/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+grestore
+
+/startTexFig {
+% usage : x y bb-llx bb-lly bb-urx bb-ury startFig
+ /SavedState save def
+ userdict maxlength dict begin
+ currentpoint transform
+
+ DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
+ setlinewidth setmatrix
+
+ itransform moveto
+
+ /ury exch TeXscale def
+ /urx exch TeXscale def
+ /lly exch TeXscale def
+ /llx exch TeXscale def
+ /y exch TeXscale def
+ /x exch TeXscale def
+
+ currentpoint /cy exch def /cx exch def
+
+ /sx x urx llx sub div def % scaling for x
+ /sy y ury lly sub div def % scaling for y
+
+ sx sy scale % scale by (sx,sy)
+
+ cx sx div llx sub
+ cy sy div ury sub translate
+
+ /DefFigCTM matrix currentmatrix def
+
+ /initmatrix {
+ DefFigCTM setmatrix
+ } def
+ /defaultmatrix {
+ DefFigCTM exch copy
+ } def
+
+ /initgraphics {
+ DocumentInitState setmiterlimit setgray setdash
+ setlinejoin setlinecap setlinewidth setmatrix
+ DefFigCTM setmatrix
+ } def
+
+ /showpage {
+ initgraphics
+ } def
+% /erasepage and /copypage added for MatLab support (tli)
+ /erasepage {
+ initgraphics
+ } def
+ /copypage {} def
+
+} def
+% Args are llx lly urx ury (in figure coordinates)
+/clipFig {
+ currentpoint 6 2 roll
+ newpath 4 copy
+ 4 2 roll moveto
+ 6 -1 roll exch lineto
+ exch lineto
+ exch lineto
+ closepath clip
+ newpath
+ moveto
+} def
+% doclip, if called, will always be just after a `startfig'
+/doclip { llx lly urx ury clipFig } def
+/endTexFig {
+ end SavedState restore
+} def
diff --git a/graphics/psfig/unsupported/dospecial.frag b/graphics/psfig/unsupported/dospecial.frag
new file mode 100644
index 0000000000..90aa1cd5cb
--- /dev/null
+++ b/graphics/psfig/unsupported/dospecial.frag
@@ -0,0 +1,43 @@
+/*
+ * This is a code fragment from a patched version of dospecial.c
+ * dvips version 5.47
+ *
+ * The changed lines are between the TJD comments.
+ * The patch allows for zcat input to plotfile commands.
+ *
+ */
+
+
+ if (strncmp(p, "ps:", 3)==0) {
+ hvpos() ;
+ psflush() ; /* now anything can happen. */
+ if (p[3]==':') {
+ if (strncmp(p+4, "[begin]", 7) == 0)
+ nlcmdout(&p[11]);
+ else if (strncmp(p+4, "[end]", 5) == 0)
+ nlcmdout(&p[9]);
+ else nlcmdout(&p[4]);
+ } else if (strncmp(p+3, " plotfile ", 10) == 0) {
+ char *sfp ;
+ p += 13;
+ /*
+ * Fixed to allow popen input for plotfile
+ * TJD 10/20/91
+ */
+ while (*p == ' ') p++;
+ if (*p == '"') {
+ p++;
+ for (sfp = p; *sfp && *sfp != '"'; sfp++) ;
+ } else {
+ for (sfp = p; *sfp && *sfp != ' '; sfp++) ;
+ }
+ *sfp = '\0';
+ if (*p == '`')
+ figcopyfile(p+1, 1);
+ else
+ figcopyfile (p, 0);
+ /* End TJD changes */
+ } else
+ nlcmdout(&p[3]);
+ return;
+ }
diff --git a/graphics/psfig/unsupported/dospecial.patch b/graphics/psfig/unsupported/dospecial.patch
new file mode 100644
index 0000000000..690fbfaa19
--- /dev/null
+++ b/graphics/psfig/unsupported/dospecial.patch
@@ -0,0 +1,37 @@
+*** dospecial.c Tue Jan 15 16:17:59 1991
+--- dospecial.c.new Sun Oct 20 13:14:10 1991
+***************
+*** 620,628 ****
+ } else if (strncmp(p+3, " plotfile ", 10) == 0) {
+ char *sfp ;
+ p += 13;
+! for (sfp = p; *sfp && *sfp != ' '; sfp++) ;
+ *sfp = '\0';
+! figcopyfile (p, 0);
+ } else
+ nlcmdout(&p[3]);
+ return;
+--- 620,642 ----
+ } else if (strncmp(p+3, " plotfile ", 10) == 0) {
+ char *sfp ;
+ p += 13;
+! /*
+! * Fixed to allow popen input for plotfile
+! * TJD 10/20/91
+! */
+! while (*p == ' ') p++;
+! if (*p == '"') {
+! p++;
+! for (sfp = p; *sfp && *sfp != '"'; sfp++) ;
+! } else {
+! for (sfp = p; *sfp && *sfp != ' '; sfp++) ;
+! }
+ *sfp = '\0';
+! if (*p == '`')
+! figcopyfile(p+1, 1);
+! else
+! figcopyfile (p, 0);
+! /* End TJD changes */
+ } else
+ nlcmdout(&p[3]);
+ return;
diff --git a/graphics/psfig/unsupported/graphpaper.ps b/graphics/psfig/unsupported/graphpaper.ps
new file mode 100644
index 0000000000..031061afb2
--- /dev/null
+++ b/graphics/psfig/unsupported/graphpaper.ps
@@ -0,0 +1,78 @@
+%!
+
+/emptystr { ( ) } def
+/graph {
+ /labels exch def % show labels ? (boolean)
+ /divs exch def % divsion spacing
+ /height exch def
+ /width exch def
+
+ .25 setlinewidth
+ 2 setlinecap
+ gsave
+% currentlinewidth currentdash
+% initgraphics
+% setdash setlinewidth
+
+ width divs div cvi
+ /index divs def
+ divs 0 translate
+
+ { newpath
+ 0 0 moveto
+ labels {
+ gsave
+ 90 rotate 20 0 moveto
+ index emptystr cvs show
+ grestore
+ } if
+ 0 height lineto
+ stroke
+ divs 0 translate
+ /index index divs add def
+
+ } repeat
+
+ grestore
+ gsave
+% currentlinewidth currentdash
+% initgraphics
+% setdash setlinewidth
+
+ height divs div cvi
+ /index divs def
+ 0 divs translate
+
+ { newpath
+ 0 0 moveto
+ labels {
+ gsave
+ 20 0 moveto
+ index emptystr cvs show
+ grestore
+ } if
+ width 0 lineto
+ stroke
+ 0 divs translate
+ /index index divs add def
+
+ } repeat
+
+ grestore
+
+} def
+
+save
+
+/Helvetica findfont 10 scalefont setfont
+/inch {72 mul} def
+
+1 setlinewidth
+8.5 inch 11 inch 100 true graph
+[3] 0 setdash
+.25 setlinewidth
+8.5 inch 11 inch 20 false graph
+
+restore
+
+showpage
diff --git a/graphics/psfig/unsupported/macdemo/README b/graphics/psfig/unsupported/macdemo/README
new file mode 100644
index 0000000000..bc0bc81e8a
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/README
@@ -0,0 +1,76 @@
+NOTE: Much of this information and code is now obselete, since
+robust EPSF postscript can be obtained from many Mac applications
+(such as canvas and photoshop.) With system 7, Postscript can often
+be routed to a file using a dialog box option rather than cmd-F/K.
+
+=====================================================================
+=====================================================================
+Tips on redirecting Mac postscript (when there is no "Save as...EPSF")
+
+1) How to capture a figure and the LaserPrep prolog into a disk file:
+
+Many different methods exist to appempt to do this, some of which As
+of this writing, it is possible to convince MacDraw to place a Postscript
+description of a figure in a file rather than sending it directly to a
+LaserWriter by hitting clover-F immediately after clicking
+`OK' on the print dialog box. The file is always called `PostScript'
+and is left in the folder MacDraw was started in. Use a communications
+program to move the file over to the host on which TeX is running.
+
+MacDraw creates a output file in the form of `QuickDraw' calls, which
+are interpreted as a set of PostScript procedures. These procedures
+are defined in what we call the Macintosh LaserPrep prolog, which must
+be downloaded before Macintosh figures are sent to the printer. By
+using clover-K rather than clover-F in the key sequence above both the
+prolog and figure will be captured in the PostScript file. The prolog
+can be extracted by hand-editing out the portion of the clover-K file
+not also present in the clover-F file.
+
+You need to always make sure that you keep a version of the prolog
+that was resident in the Mac when the figures was generated,
+since the prolog is usually not backward compatible. E.g. figures
+which rely on laseprep version 68 will not print using laserprep
+verion 70. (Thanks Apple!)
+
+2) Make the postscript suitible for including as an encapsulated
+postscript figure.
+
+Unfortunately, the postscript produced by most versions of the
+LaserWriter driver is not well suited to be included directly as a
+psfig figure. Most versions of the LaserPrep do not include an
+accurate bounding box comment in the PostScript files they produce;
+figures created by these systems will have to have their bounding box
+added by hand. "graphpaper.ps" is often useful for determining the
+bounding box of a figure. The "cleanfig" shell script adds a default
+bounding box, removes nasty "%%EOF" lines, converts CF-LF (useful for
+files that have been moved across appletalk), and strips away
+downloaded fonts.
+
+NOTE: fonts are stripped by the cleanfig program because I found that
+my documents were crashing on figures that were downloading fonts that
+were already printer-resident. Cleanfig will remove all fonts, so if
+you are using non-resident fonts in your figures you will have to
+modify cleanfig to not stip out the downloading of those fonts.
+
+3) Make sure the Laserprep prolog is loaded in the printer
+before printing your document.
+
+Other Macintoshes will often automatically download the Laserprep
+code into the printer whenever access the printer and find it
+does not have the code already downloaded.
+
+The laserprep prolog can be manually sent down by either
+by prepending it using /bin/cat:
+ cat lprep70.pro doc.ps | lpr
+or with the dvips special header command at the top of your latex file:
+ \special{header=lprep70.procs}
+The only difference between the ".pro" and ".procs" version is what
+structuring comments are included. The ".procs" version works well
+as the argument to a \special{header=..} within dvips (e.g. it
+will preview correctly under NeWS).
+
+4) Good luck! (you may need it.)
+"macdemo.tex" containts a test document that including four version 68
+mac figures.
+
+======================================================================
diff --git a/graphics/psfig/unsupported/macdemo/cleanfig b/graphics/psfig/unsupported/macdemo/cleanfig
new file mode 100644
index 0000000000..c4eced5b1b
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/cleanfig
@@ -0,0 +1,3 @@
+#!/bin/csh -f
+tr \\15 \\12 | grep -v %%EOF | sed -e 's/^%%BoundingBox: ? ? ? ?/%%BoundingBox: 0 0 600 800/g' | awk -f stripfonts.awk
+
diff --git a/graphics/psfig/unsupported/macdemo/figs/box.ps b/graphics/psfig/unsupported/macdemo/figs/box.ps
new file mode 100644
index 0000000000..ca6807a138
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/box.ps
@@ -0,0 +1,11 @@
+%!
+%%BoundingBox: 0 0 1 1
+newpath
+0 0 moveto
+1 0 lineto
+1 1 lineto
+0 1 lineto
+closepath
+.8 setgray
+fill
+
diff --git a/graphics/psfig/unsupported/macdemo/figs/cm.ps b/graphics/psfig/unsupported/macdemo/figs/cm.ps
new file mode 100644
index 0000000000..93b94b0a3b
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/cm.ps
@@ -0,0 +1,26 @@
+%!
+%%BoundingBox: 27.47 27.47 172.52 172.52
+
+100 100 translate
+newpath
+ 0 0 moveto
+ 0 0 72 0 90 arc
+ closepath
+ fill
+
+ 0 0 moveto
+ 0 0 72 90 180 arc
+ closepath
+ stroke
+
+ 0 0 moveto
+ 0 0 72 180 270 arc
+ closepath
+ fill
+
+ 0 0 moveto
+ 0 0 72 270 360 arc
+ closepath
+ stroke
+
+showpage
diff --git a/graphics/psfig/unsupported/macdemo/figs/piechart.ps b/graphics/psfig/unsupported/macdemo/figs/piechart.ps
new file mode 100644
index 0000000000..164583e8d8
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/piechart.ps
@@ -0,0 +1,154 @@
+%!
+%%BoundingBox: 126 246 486 546
+% Cookbook Example Program from First Printing, Revised 7 Jan 1985
+% Program: Drawing a Pie Chart Number: 18
+%-----------------------------------------------------------------------------
+%
+/PieDict 24 dict def % Local storage for
+ % ``DrawPieChart'' and its related
+ % procedures.
+PieDict begin
+ /DrawSlice % DrawSlice draws an outlined and
+ { /grayshade exch def % filled-in pie slice. It takes
+ /endangle exch def % four operands: the label for
+ /startangle exch def % this particular pie slice, the
+ /thelabel exch def % starting angle for the slice,
+ % the ending angle for the slice
+ % and the shade of gray the slice
+ % should be.
+
+ newpath % Create a path which will draw a
+ % pie slice.
+ 0 0 moveto
+ 0 0 radius startangle endangle arc
+ closepath
+
+ 1.415 setmiterlimit % This guarantees that when we
+ % outline the pie slices with a
+ % stroke that we will not get a
+ % spike on the interior angles.
+ gsave grayshade setgray fill grestore % Fill the pie slice path with the
+ stroke % appropriate gray color. By using
+ % gsave and grestore we don't lose
+ % the current path. Since
+ % PostScript paints color onto the
+ % page, it is very important that
+ % we fill the pie slice first and
+ % then outline it with a stroke.
+ gsave % Draw the tick mark and place the
+ % label:
+ startangle endangle add 2 div % Find the center of the pie slice
+ rotate % and rotate so that the x-axis
+ % coincides with this center.
+ radius 0 translate % Translate the origin out to the
+ % circumference.
+ newpath
+ 0 0 moveto labelps .8 mul 0 lineto% Draw the tick-mark.
+ stroke
+ labelps 0 translate % Move the origin out a little
+ % beyond the circumference.
+ 0 0 transform % Next we wish to place the label
+ grestore % at the current origin. If we
+ itransform % simply draw the text on the page
+ /y exch def /x exch def % now, it would come out rotated.
+ x y moveto % Since this is not desired we
+ % avoid it by returning to the
+ % previous unrotated coordinate
+ % system. Before returning,
+ % though, we would like to
+ x 0 lt % remember the position of the
+ { thelabel stringwidth pop neg % current origin on the printed
+ 0 rmoveto % page. We will accomplish this by
+ } if % using the transform and
+ % itransform operators. Performing
+ % a transform on the origin pushes
+ % the coordinates of the origin in
+ % device space onto the operand
+ % stack. Performing a grestore
+ % returns us to the previous
+ % unrotated coordinate system.
+ % Next we perform an itransform on
+ % the two device coordinates left
+ % on the stack to determine where
+ % we are in the current coordinate
+ % system.
+ y 0 lt { 0 labelps neg rmoveto } if % Make some adjustments so that
+ thelabel show % the label text won't collide
+ } def % with the pie slice.
+ /findgray % Procedure findgray calculates
+ { /i exch def /n exch def % the gray value for a slice. It
+ i 2 mod 0 eq % takes two arguments: the total
+ { i 2 div n 2 div round add n div } % number of slices and the current
+ { i 1 add 2 div n div } % slice number (Given that there
+ ifelse % are n pie slices, the slices are
+ } def % ``numbered'' from 1 to n). The
+end % gray values for the pie slices
+ % range evenly from white to black
+ % (i.e. - the values provided to
+ % setgray range from (n/n, n-1/n,
+ % ..., 1/n)). Since we don't want
+ % similar values of gray next to
+ % each other, findgray
+ % ``shuffles'' the possible
+ % combinations of gray.
+
+/DrawPieChart % DrawPieChart takes seven
+ { PieDict begin % arguments: the title of the pie
+ /radius exch def % chart, the point size to print
+ /ycenter exch def /xcenter exch def % the title in, the point size to
+ /PieArray exch def % print the labels for each slice
+ /labelps exch def /titleps exch def % in, a special array (described
+ /title exch def % below where DrawPieChart is
+ % called), the (x,y) center of the
+ % pie chart and the radius of the
+ % pie chart.
+
+ gsave
+ xcenter ycenter translate % Translate the coordinate system
+ % origin to center of pie chart.
+ /Helvetica findfont titleps % Print the title of the pie chart
+ scalefont setfont % in Helvetica.
+ title stringwidth pop 2 div neg % Center the title below the pie
+ % chart.
+ radius neg titleps 3 mul sub
+ moveto title show
+ /Helvetica findfont labelps % Print the individual pie slice
+ scalefont setfont % labels in Helvetica
+ /numslices PieArray length def
+ /slicecnt 0 def
+ /curangle 0 def % A ``loop'' variable that keeps
+ % track of the angle of arc to
+ % begin each pie slice at.
+ PieArray % Repeat the following for each
+ % element in the PieArray.
+ { /slicearray exch def
+ slicearray aload pop % Push the label and percentage
+ % onto the stack.
+ /percent exch def
+ /label exch def
+ /perangle percent 360 mul def % Convert the percentage into
+ % degrees of angle.
+ /slicecnt slicecnt 1 add def
+ label curangle
+ curangle perangle add
+ numslices slicecnt findgray
+ DrawSlice
+ /curangle curangle perangle add % Update the current starting
+ % angle.
+ def
+ } forall
+ grestore
+ end
+ } def
+
+() 18 9
+ [ [(Blueberry) .12 ] % The pie array is an array of
+ [(Cherry) .30 ] % arrays. Each array in the pie
+ [(Apple) .26 ] % array contains a string denoting
+ [(Boston Cream) .16 ] % the label to be printed next to
+ [(Other) .04 ] % the pie slice followed by a real
+ [(Vanilla Cream) .12 ] % number indicating the percentage
+ ] 306 396 100 DrawPieChart % of the pie represented by this
+ % particular slice.
+showpage
+
diff --git a/graphics/psfig/unsupported/macdemo/figs/pretzel.ps b/graphics/psfig/unsupported/macdemo/figs/pretzel.ps
new file mode 100644
index 0000000000..e6bbf413b3
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/pretzel.ps
@@ -0,0 +1,14 @@
+%! pretzel.ps -- an example for the psfig paper.
+%%BoundingBox: 95 100 185 200
+
+5 setlinewidth
+1 setlinecap
+110 100 moveto
+120 120 140 160 160 160 curveto
+170 160 180 150 180 140 curveto
+180 120 160 100 140 100 curveto
+120 100 100 120 100 140 curveto
+100 150 110 160 120 160 curveto
+140 160 160 120 170 100 curveto
+stroke
+showpage
diff --git a/graphics/psfig/unsupported/macdemo/figs/rosette.ps b/graphics/psfig/unsupported/macdemo/figs/rosette.ps
new file mode 100644
index 0000000000..2ab4424b55
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/rosette.ps
@@ -0,0 +1,76 @@
+%!
+%%BoundingBox: 124.38 124.38 487.61 487.61
+% Cookbook Example Program from First Printing, Revised 7 Jan 1985
+% Program: Repeated Shapes Number: 6
+%-----------------------------------------------------------------------------
+%
+ % This program prints a rosette
+ % design by defining a section of
+ % that design and printing that
+ % section repeatedly. This program
+ % illustrates the ``for'' and
+ % "arc" operators, and it shows
+ % how coordinate transformations
+ % can be nested so as to use the
+ % most convenient coordinate
+ % system for each part of a
+ % design.
+/inch {72 mul} def
+
+/wedge % Define an ``ice cream cone''
+ { newpath % shape by means of the ``arc''
+ 0 0 moveto % operator. This shape will have a
+ 1 0 translate % 30 degree angle topped off with
+ 15 rotate % a semicircle. Set the path's
+ 0 15 sin translate % first point at the current
+ 0 0 15 sin -90 90 arc % origin. Next, move the origin to
+ closepath % the center of the semicircle by
+ } def % translating to the right 1 unit,
+ % rotating counter-clockwise by 15
+ % degrees, and translating ``up''
+ % in the rotated system by the
+ % radius of the semicircle. The
+ % ``arc'' operator includes a
+ % straight line to the initial
+ % point of the arc and a curved
+ % section to the end of the arc.
+ % Note that the semicircle goes
+ % from -90 degrees to 90 degrees
+ % in the rotated coordinate
+ % system.
+
+gsave
+ 4.25 inch 4.25 inch translate % Move into position for the
+ % rosette.
+ 1.75 inch 1.75 inch scale % Make the edges of the rosette 1
+ % 3/4 inches long.
+ 0.02 setlinewidth % Use a 7/200 inch thick line.
+ 2 1 13 % Set up the ``for'' operator to
+ % iterate 12 times, pushing 2 onto
+ % the stack the first time, 3 the
+ % next time, ... , and 13 the last
+ % time.
+ { % The last argument for ``for'' is
+ % the sequence of operations to be
+ % repeated. This sequence must be
+ % enclosed by braces.
+ 13 div setgray % Divide the loop index by 13 to
+ % set a gray value.
+ gsave % Enclose the ``wedge'' operation
+ wedge % in a ``gsave''-``grestore''
+ % pair, as it will mess up the
+ % coordinate system.
+ gsave % Save the wedge path for use
+ % after the ``fill''.
+ fill
+ grestore
+ 0 setgray stroke % Draw a black border around the
+ % wedge.
+ grestore % Get out of the coordinate system
+ % left by wedge.
+ 30 rotate % Set up for the next section.
+ } for % Close the last argument and
+ % execute the ``for'' operator.
+grestore
+showpage
+
diff --git a/graphics/psfig/unsupported/macdemo/figs/starlines.ps b/graphics/psfig/unsupported/macdemo/figs/starlines.ps
new file mode 100644
index 0000000000..a7cf877ea6
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/starlines.ps
@@ -0,0 +1,40 @@
+%!
+%%BoundingBox: 300 400 410 420
+/Times-Roman findfont
+30 scalefont setfont
+newpath
+300 400 translate
+.25 setlinewidth
+0 0 moveto
+(StarLines) true charpath clip
+
+/rays {
+ 0 1.5 179
+ { gsave
+ rotate
+ 0 0 moveto
+ 108 0 lineto
+ stroke
+ grestore
+ } for
+} def
+
+
+newpath
+54 -15 translate
+rays
+showpage
+
+
+
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
+%
diff --git a/graphics/psfig/unsupported/macdemo/figs/trevor.ps b/graphics/psfig/unsupported/macdemo/figs/trevor.ps
new file mode 100644
index 0000000000..b46453479a
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/trevor.ps
@@ -0,0 +1,583 @@
+%!PS-Adobe-1.0
+%%Title: trevor
+%%Creator: Ned Batchelder
+%%CreationDate: Wed Mar 26 11:05:04 1986
+%%BoundingBox: 72 72 432 525
+
+%%Pages: 1
+%%EndComments
+/doimage {
+ /b exch def /m exch def /n exch def
+ /pix n string def
+ n m b [n 0 0 m neg 0 m]
+ { currentfile pix readhexstring pop }
+ image
+} def
+/spotsize {
+ /perinch exch def
+ currentscreen 3 -1 roll
+ pop perinch
+ 3 1 roll setscreen
+} def
+/invert {
+ /curtran currenttransfer cvlit def
+ /newtran curtran length 3 add array def
+ newtran 0 {1 exch sub} putinterval
+ newtran 3 curtran putinterval
+ newtran cvx settransfer
+} def
+72 72 translate
+%%EndProlog
+%%Page: ? 1
+360.000 453.600 scale
+60 spotsize
+112 176 8 doimage
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffeffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefbffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffdeaffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffdf2ffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffac8ffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffacb
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefefdfcfcfdfefffffefbf8fafdfeffffff
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff8b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffefefcf7eddbc9c1c1cbd9e5eff1d9b5b3c8
+e0f3f7fafeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffbd5ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffef9f0ddc3a88e725d56565e6e82949e
+8c65545d759bb6d0f5fefefefdfeffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffad3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffefef9e4bf99785f4f443d38363539
+3f484b4e4c423d3b3b485a77bbf0fdfaf2f4fdffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffff6a2ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffefdf6dfb98b644b3f39383735
+32302f31343738393a383c3f3735394576c6eefbf7f0f5fdffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffef5d8ae805b453a3734
+32333333302e2d2e30313336393a393a3a3536384e8ad0f7fefaeff8feffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffff6a4ffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffefce8b98159463b
+363535363536353434322f3031303234383c3e3835343536405da3e8fcfef2f2feffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffff9c7ffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffef5d59b64
+49403b3735343433333333333231303335322f30333a4040373233383f486ec3f0fcf8ec
+fbfffffffffffffffffffffffffffffffffffffffffffffffffffffffffff59bffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffefbe9
+ba7d503d383634323233312f2f2e2b2b2b2c2c2f3235312d2c3038403c3533383d404d8b
+d0f1faebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff599
+ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fef5d199654437343433302e2f312e2b2a2726272a2c2c2c2d3135332d2b2f3a3e383432
+3a3d405c9cd4eeeefaffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffff8c0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffdecbe7d4f3a353333312e2b2829282624252627282929292b2b2b3038352e2b30
+393b3730323a38416eaedbedfcffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffff7b4ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffce5a96944353132302e2b2928272928272727292926232325272c2f2e31
+332e2b29303837302d3436375583bed8f2feffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffff8bcffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffde5a6643f343333312e2b2a2a2c2d2f2f2e2d2e2f2d2a27262729
+2d30303030312f2a293137332b2e32333f5e83a0c3e9f8fdfeffffffffffffffffffffff
+fffffffffffffffffffffffffffff9c7ffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffef0af6a4436333333302f2d2d2e2f2e2d2d2f2e2f302e2d
+2c2d2f31322f2c2e3234332c272c33342c2a2d30323f53667ca7cadff2fdffffffffffff
+fffffffffffffffffffffffffffffffffffffad3ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffff8c8774b3b35322f2e2d2c2b2c2d2f2d2b2c2e2d
+2d302f2e2d2d2f3132322d292d333933282b2e32312c2c2c2e333e4b597498b9d2ecfdff
+fffffffffffffffffffffffffffffffffffffffffffff8bfffffffffffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffee18e523d35312b272525252424272a2b
+2a2a2a28292a2b2c2b2b2c2e3032332f2b2c34382e292c2d2f2d2c2a2d2f333b4655688b
+bfdef3fdfffffffffffffffffffffffffffffffffffffffffffffacfffffffffffffffff
+fffffffffffffffffffffffffffffffffffffffffffffef8b7633f332e2a252424252524
+222323252526242121222426282727282a2d35372f282a35382c29282a2d2e2c2b2e2f31
+383c455784bfe1f5fefffffffffffffffffffffffffffffffffffffffffffdf1ffffffff
+fffffffffffffffffffffffffffffffffffffffffffffffffffffcda7f45322a27252628
+28282928262423262726252422222020232527292b2e31333129252831312a2525292c2e
+2c2b2e2b3032353c4d77b3d9fafffffffffffffffffffffffffffffffffffffffffffbdd
+fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeefa253352b26
+2527282625262828272827262626282a26242122262a2b29292c2f3235302623262d2d26
+2426292e2d292b2a2b2e2f333b4a70a8ebfeffffffffffffffffffffffffffffffffffff
+fffffad5fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbca70
+3f2f2926242425222021222324272b2a2927282a292928282a2c2d2c2c333633312f2a26
+222327282625262b2f2b282a2a2b2c30363b486bc8fbffffffffffffffffffffffffffff
+fffffffffffff9d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
+fee7934c352e29272727272522222223222124272726282b2a2a2a2a2b2b29292c343936
+2e29262623202124282624272b2b27292a292a2f33363d4c90eafeffffffffffffffffff
+fffffffffffffffffffff9d3ffffffffffffffffffffffffffffffffffffffffffffffff
+fffffffff7ba6038312d28292b2c2c2a26242426231e1d1f212225282828282928242223
+293136342f2a26232122212124242426282b2b2a2928282c31353a4260bbf9ffffffffff
+fffffffffffffffffffffffffffff8bbffffffffffffffffffffffffffffffffffffffff
+fffffffffffffffedf844434312d2b2c2c2c2c292725242625221f1e1d1e212426262425
+24212022262b2f2d2a292724202021202223232525282a2d292526292e353c414b81e1fe
+fffffffffffffffffffffffffffffffffffff7b2ffffffffffffffffffffffffffffffff
+fffffffffffffffffffffff9b75c3934312e2e2e2b28272524222426262525211e1f2225
+292926252323262c2e2f2e2b2825242423211e1f212223222325282c2a2625272a313940
+475baff6fffffffffffffffffffffffffffffffffffff7bdffffffffffffffffffffffff
+fffffffffffffffffffffffffffffee88b453735302e2b2a282625222223242626272724
+22232425282b28252324282f32312e2a2827242221201e1d1f2023222224282b2b272628
+2a2d333c434e81dffefffffffffffffffffffffffffffffffffff6abffffffffffffffff
+fffffffffffffffffffffffffffffffffffff9be623b36312b2824222223242323252728
+262625242424222022262624232123282c2a272423232220201f1d1c1d2022232322262a
+2c2a2626282b2f373b4660b6f8fffffffffffffffffffffffffffffffffff7b6ffffffff
+fffffffffffffffffffffffffffffffffffffffffffee9924a37322b2523212021232624
+24252b2b2726252425262322222122232322232426292c2e2a26221f1f1e1d1c1e202324
+24232426292a2725272b2e32373f4e86e4fefffffffffffffffffffffffffffffffff9c8
+fffffffffffffffffffffffffffffffffffffffffffffffffffdd46f3d312a2422222220
+20212322222124262626262526252322211e212221201f2022252c32332e2925221f1d1e
+2024282a292927252627282526292f3233394463bef9ffffffffffffffffffffffffffff
+fffffbddfffffffffffffffffffffffffffffffffffffffffffffffffef7b155332a2422
+21211f1e1f202223221f1d202324252526231f1d1d1e2528272220202226272a2e2d2a27
+23212020242a3136363430282422242626262a3134363e4f8fe8feffffffffffffffffff
+fffffffffffffad0fffffffffffffffffffffffffffffffffffffffffffffffffee3853f
+2d27232222222221212326262320212121202121232422202123282c302f2b2b2c2c2b2c
+2d2c2927252524262e3a444e504b4435292321232827292d32363a4264c3f9ffffffffff
+fffffffffffffffffffff8bdffffffffffffffffffffffffffffffffffffffffffffffff
+f6b65930282523242425242123262622212123222020212123262827272426292f343131
+32302d2b29272524252529314057646e74695b48322621222728292c30363b3f4b8be8fe
+fffffffffffffffffffffffffffffce9ffffffffffffffffffffffffffffffffffffffff
+fffffffee1843c2824252525252524232526242020212322222122212225282927242323
+272a2a2c2f2c28262625242324293547627f8b91958a755e412b23212529292b2e33373e
+4461c4fcfffffffffffffffffffffffffffffce8ffffffffffffffffffffffffffffffff
+fffffffffffffffac05e2f2524242525242221232525242322212221201f202123252422
+201f1f1f2121242626272728272625272a374c6683a5acaba9a090745436252123292b2b
+2d3033383d4c99f1fffffffffffffffffffffffffffffad7ffffffffffffffffffffffff
+fffffffffffffffffffffef19843292524222223221f1e202122232623202021211f1e1f
+242625211d1d1e1f2121232627272a2e2e2c2b2d364e6d89a0bec4bfb6aca18c6c472c22
+21262a2e2f303336384171d4fcfffffffffffffffffffffffffff9c9ffffffffffffffff
+fffffffffffffffffffffffffffffee075332826232120201f1e1c1c1d1e222524201e21
+22201c1a1e222423201f21242425282b2f302f302f2f30384b6b8eacbfcbcec9c0b4aa9b
+82613d262124272d30313637373e5fa9ecfefffffffffffffffffffffffffce5ffffffff
+fffffffffffffffffffffffffffffffffffffbc3592e28241f1e1e1d1e1d1c1c1d1e2123
+23201f1f1f1d1b191a1c1e20212021232425282a3035363333343b4e698eb4c9d1cfcecb
+c6baac9f917f5931242425282d32373a383e609fe0fcfffffffffffffffffffffffffad6
+ffffffffffffffffffffffffffffffffffffffffffffef9d452b27221e1d1b1c1c1c1d1e
+1e1e21222221201e1c1b1b1b1b1d1c1c1e1d1c1e1f212224272e3539414f647f9dc0d7db
+d8d3d0cecabfb0a49c9378472924252429303538353c5b96dcf8feffffffffffffffffff
+fffff8b9fffffffffffffffffffffffffffffffffffffffffffdd977382924201e1c1b1b
+1b1c1e1e1d1f2221201f1d1c1b1b1c1c1e1f1e1f211f1d1e1f202023252b3549657f96ae
+c9d8dfded9d6d1cfcdc2b4aaa39e8e6333252623242b313231374d83d2f1fdffffffffff
+fffffffffffffad1fffffffffffffffffffffffffffffffffffffffffff9b85c3126231e
+1d1c1d1d1c1c1c1c1b1c1e1f1e1d1c1c1d1e1e1f20202024272222222224262a2f364568
+8aa3b9cfe0e0dcdbd8d8d3d0cdc2bab1a7a29c7f492a282524282d2f2f354c78beeffdff
+fffffffffffffffffffff8c1fffffffffffffffffffffffffffffffffffffffffef09c4a
+2c25211e1d1d1d1d1e1c1a191a1d201f1e1e202122222222222223252421232526292c34
+3c455d85a9c0d4e4eae6dedadadad5d0ccc6c0b8ada5a3926334292928292d302f365d95
+d0f6fefffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffffffffffff
+fdda7b3e2a24201e1e1c1c1d1e1c1a191a1c1e1d1d1f2225262624222121202121212327
+2a2b303a455778a2c3d6e2e8eaeae4dcdadad6d1cdcbc5bcb0a9a59b77402a2a2b2c3034
+313b7bcaf5fefffffffffffffffffffffffff9c4ffffffffffffffffffffffffffffffff
+fffffffffac061362924201e1d1b1b1d1e1d1b1a1a1b1c1c1e202224252424212020201f
+1e2124272a2e36455a779dbfd5dfe2e5e7e9e7dfdcdad7d3cfcdc8bfb2aba9a0844f2e2a
+2a2e323734429bf1fefffffffffffffffffffffffffffad2ffffffffffffffffffffffff
+fffffffffffffffff4a9513227231f1e1c1b1b1d1e1d1b1a1a1b1c1d1e1f201f1e1e2121
+201f1f1f20232529303c4f647e9dbbd0d9dcdde2e6e8e6e3dfd8d5d4d1cfc8bdb2adaca2
+8c5e332b2c2e32383745a8f8fffffffffffffffffffffffffffff9c5ffffffffffffffff
+ffffffffffffffffffffffffeb94492f25211e1d1c1b1c1c1d1c1b1a1a1c1d1d1c1d1f1f
+1e1e1f1e1f20212224262a34465d758ba0b4c7d1d4d8dce0e4e5e6e5e1d9d6d6d4cfc7bb
+b3afada59167382d2c292e3437439af3fffffffffffffffffffffffffffffad3ffffffff
+fffffffffffffffffffffffffffffffee17f412e24201e1c1b1c1e1e1f1e1d1b1c1c1c1b
+1b1c1e202021211e20232325282b364e6a8095a3b0becad1d6e0e5e9eaeaecece5dddad8
+d7d2c7bbb4afaba7956f3d2e2c25292f333d81e8fffffffffffffffffffffffffffffbdc
+fffffffffffffffffffffffffffffffffffffffccf693a2b23201e1b1b20262827262220
+1e1c1c1b1a1b1d202324211f2125282a2f3953728b9aa7aeb5c1cbd3dde8eef4f5f7f8f4
+ece5e0dbd7d3cabdb6b0aaa4967443312e24252a2f3770e0feffffffffffffffffffffff
+fffff8bafffffffffffffffffffffffffffffffffffffff8b256352a25221e1b1d2a3b3f
+37312f2c261f1d1b1b1d1e202525212024292f373f547691a0a9aeb3b9c1cbd6e3eef3f9
+fcfdfdf9f1e9e2ddd7d2ccc4bab2aaa495774833302524262c3363d8feffffffffffffff
+fffffffffffff9c9fffffffffffffffffffffffffffffffffffffff399442f2925231f1b
+20354b534d4647463a2b25201e211f1f2222202329303c49537495a8aeb0b3b8bfc8d5e2
+eef7fafcfefefdfbf4e9e2ded5d0ccc7bfb6ada393794a332f2421242b315dd3feffffff
+fffffffffffffffffffffad3fffffffffffffffffffffffffffffffffffffee681382b26
+2525201c233a535e5e5a5c5c54463d342a23232222222429303d4f596f95acb8bab9bdc2
+cbdae5edf3fbfefefefffefbf5eae1dcd4d0cdc8c1b9afa2937c4d332d2320242a305ad1
+fdfffffffffffffffffffffffffff9cbfffffffffffffffffffffffffffffffffffffdd3
+6a2f26242426201c253d556063646666635f584f4034302d2c2e30343d4c5c7499afbac2
+c7ccd3d6dce8edf0f6fdfefffffffefbf5ece5dfd7d3d0cbc3bbb1a4967e4d332c241f24
+292f5ed6fefffffffffffffffffffffffffff7b1ffffffffffffffffffffffffffffffff
+fffffccc602c23212226211d243b535f636669696a6c69665b514e4d4a4a4c4d54627a9d
+b6c1cad4dde3e7e6e7eceff4fbfefffffefefefcf7efeae3d9d8d7d2cabeb4a79a824f34
+2e241f24282d5cd3fefffffffffffffffffffffffffff7b7ffffffffffffffffffffffff
+fffffffffffffbc65929211f2024221e243a515f63676a6b6d6f70726f6b6c6e6e707375
+7f92aac0ccd5e0e9eeeff0eeedeff1f6fcfefffffefcfcfcf8f1ebe2dbdadad5cfc5b7a9
+9a824d302e242023272b59cffdfffffffffffffffffffffffffffad0ffffffffffffffff
+fffffffffffffffffffffab94d26201e1f23221f2338505f64696b6c6e70737577787a7f
+858c9299acc1cdd7dee6eef1f3f3f2f2f1f4f5f8fcfefffffdf4f5faf8f2ece2d9d8d9d5
+d0c8bbab9b834c2d2a242223262955ccfdfffffffffffffffffffffffffff8bbffffffff
+fffffffffffffffffffffffffffff9b34825211e1e22232022324a5d666a6c6c6f727578
+7a7c8189929aa2aec1d3dce4e9eef2f4f5f4f2f5f6f8f8fbfcfcfefefdf7f5f8f3ece9df
+d3cecdcbcac6beaf9f88522e2a252223252748bafbfffffffffffffffffffffffffff8ba
+fffffffffffffffffffffffffffffffffffff6ab4325211e1d212521202c465a656a6c6d
+6f72767a7f8289919aa2acb7c7d5e1e9edf0f3f3f3f2f4f5f7f8f8f8f8f8fdfcf9f4f3f0
+e5dad4c6b8afa9a9b3bdbbb0a28c582e2925222223263ea9f9ffffffffffffffffffffff
+fffff7adfefefefffffffffffffefefefffffffefefef09b3d231e1d1d21251f1c284257
+63696c6f6f73787e848990969ea5aeb8c5d1dce0e7e9edefefeef0f1f1f4f4f3f3f3f6f2
+eae4dfd2bfafa190837c75768297a8aaa18d5a2d2724201f21243ba3f8ffffffffffffff
+fffffffffffff7b9fdfefefefefefefefefefdfdfefefdfdfdfdec973d231e1e1f232620
+1c243c54636a6d6f71777c838a8f949aa1a6adb5bdc6cfd4dadee1e6e9e9ebeae7e9ecef
+eeebe5ddd7cdb79c7f6c635a53514c4e5362788e978e612f2723201f2124399ff8ffffff
+fffffffffffffffffffff8bafbfcfbfcfbfcfcfcfbfcfbfbfbfaf9f9f9faeb993f231e1e
+202528201b21375160696e70727981898e92969da2a6aaafb6bcc3c5cbd1d5dbe1e1e4e1
+dddce1e5e2dbd3c6bba37f62493f3d3b3b3b3a3b3f4751607583673226221e1e20233698
+f6fffffffffffffffffffffffffff8b6f7f7f8f7f7f8f8f6f6f8f6f6f6f4f3f3f4f5e595
+40241f1f222526201c1f324d5d666c707379848c9093979c9fa1a5aaaeb0b3b4b9c2c9cd
+d5d8dcd9d2d0d4d8d2c7bdae9775544135302f30353a3c3d4144484e5a706a3625221e1e
+2022328cf3fffffffffffffffffffffffffff5a5f3f3f5f4f3f2f2f2f2f2f1f1f0f0eff0
+f0eedb9041261f1f212323201c1d2a465a646b6f747a838b90919294969a9d9d9d9fa0a4
+a9afb7bfc8cdd0cfc9c6c9cbc4b9ab92735642362e2b2e3a4a545a5c5b58585755636b3e
+2521201f20212c7aebfffffffffffffffffffffffffff7b4f0f1f1f1f0efefeeefeeedee
+ededececebe9d08a4328211f2021211f1c1d253f57636a6e757c8288898482807c7d7f7b
+797a818d9498a3b0b9bdc2c6c0bebfc1bbaf9a77584337322f34445b6b757b7a77746f66
+6168704a2822232422232a68defefffffffffffffffffffffffff9c5eceeeeeeedececec
+ececebebeaeae9e8e8e5cc8b4528211f1f1f1e1d1c1b20365261696d737c817f7669605c
+5756554f4d5159687178889ba8adb6bcbcbcbdbcb3a38b694d3f38353a475869737a8282
+7f7c79737078805d2c24262825252b58cefdfffffffffffffffffffffffff8beeaebeaea
+eaeae9e9e8e8e9e8e6e7e6e4e5e2cd8d4527211f1d1d1d1c1a191c2f4d5f686d72787467
+5b4d413d3b39363233383b434b556880939daab5bec4c3beb19c81654f47423d41495562
+65646f7476787a797a858c6c3123272a29292e52c3fcfffffffffffffffffffffffff7af
+eaeae8e8eae8e6e7e6e6e6e7e5e4e3e2e2dfcc8e442722201e1c1c1b1b1a1b2a4a5f696e
+706b5b4b4037312d2b2a2726282c2c2e343d4f677e8fa2b3c1cecec4b29b806a584b4342
+464a4d5251525b5e5e6975797d89927a3a23262b2d2c2e50bffbffffffffffffffffffff
+fffff8bbe9eae8e7e8e6e5e6e4e5e4e4e3e2e1e0e0dbc487422924211f1d1c1b1a191925
+475f686c69574136312c2927272623222528292b2d3443566c8099b3c9d5d6ccb59c856e
+584a4848433d3b473c464b514f5468757f8b9584462627292b2b2c52c2fbffffffffffff
+fffffffffffffacee8e8e6e6e5e5e6e5e3e4e4e4e2e1e0e0e0dac2833f272323201e1c1a
+1a1a1a22435f68675b44332d2c2c2e3033322f2d2d2d2e2e2f36424d5e7390b1cfe0e4d7
+b99d866e58504f4942413c6746555043464e5b6f7f8c968e542a29292a292b5ccdfcffff
+fffffffffffffffffffff8bee7e7e5e5e4e5e5e4e4e3e3e3e2e1e1e1e0d9bf7d3e272223
+221f1c1a1a1a1820415f665c49393332373e444a4c48413b34302f2e30374149566a89b1
+d6e9f3dfbb9d8770605a585d5047374d4e6c69544c555f6d808e989364302929292b2f71
+ddfdfffffffffffffffffffffffffacae7e6e5e4e3e4e3e4e3e3e3e3e2e1e1e0e0dbc07f
+4027212022201b181919191f3d5e61503f38373d4952585b574f463e3a383b3834363d48
+546580a9d2e9f4dfbca18b7b71696d7f664f444b5d82826f66676d7583939c9873382b2b
+2a2d3889ecfefffffffffffffffffffffffffbdae6e6e5e5e3e4e3e3e2e3e2e3e2e1e1e0
+dfdac1834328211f1f1f1c191919191f3d5d5b483e40454c555a5a54483f3b34393d4647
+443e3f485464789cc9e3ecdabaa5938f888083907d635d66798d8e83838788888f9ea39d
+7d403636313049abf8fefffffffffffffffffffffffff8bbe5e4e5e5e3e3e4e2e2e3e1e2
+e2e1e1dfded9c28b4b2a201e1e1c1a181918191f3e5d5a4d494b505558544b43382d2b28
+444d59574c4e4b4e56647495c2dfe7d6b9a79a9e98908e8d857a788191999b9a9ca1a3a2
+a3abaca38449454c423d6ed6fdfffffffffffffffffffffffffff8bae6e5e5e4e3e2e2e2
+e2e1e0e1e0e0e0dededccca35f2f201e1e1b1a1818191a1f3e5e5e585654545450443936
+312d2d273d55828b6153595b5b627190b9d8e1d4bca99da1a39f968e86838891a0a9acaa
+a9aeb1b2b3b7b3aa8f5a515e5759a1f0fffffffffffffffffffffffffffff7ade6e6e6e5
+e4e2e2e3e3e2e0e0dfe0e1dededed6bd7a39211d1c1b1b1817191a1f3f6165605c57534f
+453630333b3b3b36405d95a68068676962626e8aaeccd8cebaa99c9ba09d928d8a8b929f
+acb2b1acaab2bbc0bfbeb6ad9a7566666680d5fbfffffffffffffffffffffffffffff7b9
+e6e7e6e5e6e3e3e3e3e1e0dfe0e1e1dedfe0ddce9546241e1c1b1b1918191a2042636864
+5f56524a3c33323f50514e505870909f93857d7367636d84a4c3d1cbb6a99d969a9b9189
+86888e97a0a5a5a5acbbc6cac6c1b8ada091857576a5effeffffffffffffffffffffffff
+fffff8bae7e7e6e5e4e4e3e3e4e3e2e0e1e2e1dfe0e0dfd8ac5a2a1f1d1c1d1b1a1a1a21
+44646a68625751473e3e44526267666a6e7c8b95918b807064636d7f9cbfd0ccbbaea49d
+9da0a098908b8b8e949ba3aebcc8d0cecac4baaea29c9b9294c1f7ffffffffffffffffff
+fffffffffffff8b6e7e8e7e6e6e4e5e4e4e3e2e2e2e3e2e1e1e1e0dcbf7434221f1f201e
+1c1b1b2244656b69625a50494c545c646d747a7f80848a8a8581766862646c7b97bfd8d3
+c0b2aaa5a5a6a9abaaa7a5aaadb3bac4ccd2d5d1ccc7bfb3a49ca1a8b0d2f9ffffffffff
+fffffffffffffffffffff5a5e8e9e8e8e6e6e6e5e4e4e3e4e3e2e1e2e2e1e0ddcc8a3d25
+2121201e1d1d1c2445646b6b655e57565e646a727b848a8c898582807e7e736865676d78
+94bbd8d9c3b4adaaabafb1b2b6bdc1c6c7c7cacdd0d5d7d2cdc9c1b3a59ea2abbcd8f7fe
+fffffffffffffffffffffffffffff7b4e8e9e8e8e7e6e6e6e5e5e4e3e3e3e2e2e2e1e0dd
+d095462823221f1e1f1e1e2442626c6e6c6866696d6b6a6f777f83827c797a7e8384766d
+6b6b707a93b3d1decdbbb1acadb3b8bdbec2c9cecccbcccdced4d7d4cecac1b3a7a6aaa7
+b9d3effefffffffffffffffffffffffffffff9c5e8e8e8e8e6e6e5e5e5e4e4e3e2e2e3e3
+e1e0dfddcf9c522c2321201e1e1f1e2442636d6f7173777877736d6b6d71747575798189
+8c877a72706e727c92b6d9e4d4c0b6b0adaeb6c3c9cacdd0cfd0d1d4d5d9dad6d0ccc2b4
+a7abb4a4b0caeafdfffffffffffffffffffffffffffff8bee9e9e9e8e6e5e5e6e6e5e5e3
+e2e2e3e3e2e1e0dbd2b46f3924201e1e1e1f1f2341636e71767b8183817f7c77787c8083
+868b9193918a7e77726f737c90b5dce8d7beb6b1b1b1b5c1ced5d6d8d9dadee2e2e0dcd5
+d0cbc1b3a6adc0a8a3bee7fdfffffffffffffffffffffffffffff7afe9e9eae9e7e6e6e6
+e7e6e6e4e3e3e3e2e2e2e1ddd8cc95502b201d1e1f21222541646d71777f86898a8c8d8c
+8e929696989a9b999591877b7371747a8cb2dcebdcc4b6b3b7bbbdc5d1dbdde1e3e5ecef
+ece8e3d9d0c6beb2a6afc8ab9ebae2fdfffffffffffffffffffffffffffff8bbe9eaebea
+eae8e7e7e7e7e7e5e4e4e3e3e3e2e1dfddd7b57036221d1e2024272d48666e717881888b
+8d909496999ea19fa0a2a19d9d9d8f7c737374788db5dce8ddcab8b2b8bec2cad5e0e5e8
+edeff4f8f5f1e9dfd3c5bbb0a6afc3a4a1badefcffffffffffffffffffffffffffffface
+ebebecebeae9e8e8e8eae7e6e6e4e4e4e5e4e3e1dfdccb974d271e1e232d343a4e686e71
+777e888e9093999da0a5a5a2a4a7a6a6abaa947d767575778db2d7e1dbcebdb2b1b5bacd
+e0eaeff3f6f7f9fbfbf7ece2d6c9bcafa6acb59aa8badafbffffffffffffffffffffffff
+fffff8beececececeae9e9e9e9eae8e7e7e6e5e5e6e5e4e3e1ded6b87033201f293c494a
+54696e70747d8a9092979ea3a7aaa8a7a9adadafb6b0977f787675788eb1d3dcdcd7c6b4
+aeabadc4e0eef7fcfdfdfefefefaf0e4d6cbbcaea4a7aba3b8bddafbffffffffffffffff
+fffffffffffffacaebebebeae9e9e9e9e8e8e8e7e7e7e6e5e5e4e3e3e2e0dbcc984a2623
+344f5953586a6d6f747d898f9298a0a4abaeaeb1b3b5b4b6b9b198807773737b92b5d5dd
+dfdfd2beafa7a6b0c8e1f3fcfefefefefefbf2e5d7ccbcada2a2aab6c9c7dffcffffffff
+fffffffffffffffffffffbdaeae9eae9e7e8e7e7e8e8e8e8e7e6e5e5e4e3e2e2e0dfdcd4
+b86d3229445d5f575b6a6c6e747d878e91979da5adb2b7bcbfbfbbb9beb5967c726f707c
+98bdd7e0e4e6dac7b4a8a5a2b0c7dcf3fcfefefefefcf4e6d7cabbaca1a0afc2d1cee6fd
+fffffffffffffffffffffffffffff8bbe9e8eae9e7e8e6e7e7e7e8e7e6e5e4e5e4e3e2e1
+dfdedcd7cb92463150625f59606c6c6e757f858b91989ea6b0b8c1c7c8c5c3bebfae8c74
+6e6e717e9bc4dde7eff3e4cbb7adaaa1a1adc0dceffafdfdfcfbf5e7d7c9b8aaa1a1b9d1
+d2ccecfefffffffffffffffffffffffffffff8bae7e8e9e8e8e8e6e6e6e7e6e5e5e4e3e4
+e3e2e1e0dedddad7d3b1633d5660595a666e6e6e747d82888f969ea8b5bfc8cdcdcdccc5
+b99d7d6c6a6e737e98c2dce3eef8e2c1b0acaea89d9da8c0d5e7f2f4f6f7f0e2d4c4b7ab
+a1a1b7c8c2c8f0fefffffffffffffffffffffffffffff7ade8e8eae9e8e6e6e6e6e7e5e5
+e6e5e3e3e3e2e0dedddddbdad7c588535c5e575c6b6e6f70757b80858b939fabb9c5ced2
+d2d3d1c7b18a6e666971767c8eabc2ccd9e3ccaea1a5acaa9e979aa6bacedbe4eaede6d9
+cebfb3aba19fadb8b8d0f6fffffffffffffffffffffffffffffff7b9e8e8e8e7e6e6e6e6
+e6e6e5e6e5e4e3e2e1e1e0dedddcdbdad9d0ab73635d565d6f707071767a7d8288909ead
+bcc8d0d5d7d5cebda07966656a7275737a899cadbcc1af968d95a0a19b9a9899a4b5c1cf
+dce2ddd2c8baaea9a19eaebdbedafbfffffffffffffffffffffffffffffff8bae7e7e6e6
+e5e5e4e5e5e5e4e4e3e2e1e0e0e0dfdddcdbdad9d8d5c1906e61565b6e72717175797a7e
+858e9badbccbd2d5d5d0c5af8d6d64656b706f68666e7f909da196827679848a94a1a097
+949dadbecfd7d4cbc2b5a9a6a29fb3c3c3e4fdfffffffffffffffffffffffffffffff8b6
+e6e6e5e4e3e4e3e3e3e2e2e2e2e2dfdededededbdbd9d8d8d7d4c9a47a695c5666707172
+7376777a828c9aacbacbd5d6d1c7b89d79635e616668635a575e6e7a7f827c674e4b5c75
+96a8a89a9193a0b2c2cbcbc4bbb0a5a2a09eaebbccf2feffffffffffffffffffffffffff
+fffff5a5e4e5e4e4e2e2e1e1e2e1e0dfe0dfdfdddcdddddadad8d7d7d5d4cfb48772685d
+626c7072737474777e8997a8b7c7d1d5cfc1ad8b695d5c5c5c5a50413c485c696c6b6857
+4d4f587a9fa9aba39a969dadbbc2c4beb6ada3a09e9ca4b6defbffffffffffffffffffff
+fffffffffffff7b4e4e3e3e3e2e1e0e0e0e0dfdddddddcdbdadadadad8d6d6d5d4d3d0bb
+9076716b65686f71727372737a8593a2b0bdc7cbc6b79f785e5a5f5d544c3c2d2a374b59
+5c5f69717d7c7b91a3a7a9a8a29ea1afbbc1bfbab3a9a0a19f9aa2c5f2feffffffffffff
+fffffffffffffffffffff9c5e3e1e2e2e0dfdfdfdfdedddbdbdad9dadad9d8d8d7d7d5d4
+d3d2cfc39e7d76756a676e71707071717581909ca6b0babeb8ab8f6a585963645746393b
+40434a504e546d828c8c8e979aa0a3a7a9a5a7b2bdc1bdb5afa69fa19f9aabe2fdffffff
+fffffffffffffffffffffffffffff8bee2e1e2e1dfdedfdededddbd9dad9dad9d8d8d8d8
+d6d5d4d2d2d1cfc8ae897c7d766f6f716f6f706f727d8a959da7b1b4ad9f7f5f565c686a
+6251444b53504b49444b657880868d9192999da5a7a5aab6bfc1bbb2aba4a0a19f9bb2ed
+fefffffffffffffffffffffffffffffffffff7afe3e1e2e0dedddedddcdcdad9d8d7d8d7
+d6d7d8d6d5d4d3d3d1d0cecab9938082807b73716e6e6e6d70788490979fa7aaa695735a
+58616967635b5251534e4742434d5e6e7a83888c9197999e9fa0a7b1bac0bbb3a9a4a2a3
+a099b0ecfefffffffffffffffffffffffffffffffffff8bbe1e1e1dfdddcdcdddddbd9d8
+d7d6d6d6d5d6d8d6d5d3d2d2d1cfcecabc957e7d7b7b72716e6c6b6b6e737d8991989ea1
+9e8d6e5c5d656764605d56514f4d4c4f545b6575858b8a8c929395989a9b9ca6b1bbbab1
+a9a5a4a5a097adeafdfffffffffffffffffffffffffffffffffffacee0e1e1dfdcdbdada
+dadad8d7d6d6d7d5d5d5d6d5d4d2d0d0d0cfcec9bb8d71777878716f6e6c6a696b707983
+8c90969a9a896e60646867635d59565351565d61676b74838f8f8d90929293959590919c
+aab5b7b0aaa6a6a69d95adebfefffffffffffffffffffffffffffffffffff8bedededede
+dcdad8dadadad8d6d5d5d6d5d4d4d4d4d3d1d0d0cfcececbbe8f636b777973706e6d6b69
+6a6d747d878b9094948873696a6a68635e5b5f5e5c626e71788087909795919697969290
+90888893a2abb1b1aba8a7a59b92acecfefefffffffffffffffffffffffffffffffffaca
+dddedddcdbdad8d8d8d8d6d6d4d5d6d4d4d3d3d3d2d1d0d0cecdcdcbc3a0675d7176726f
+6e6c6a6a6a6a6e7680878c8f90887a726e6b696664646969686f7f87939da0a2a6a29da1
+9f988d88877e7d8a97a3adb0aba9a8a39790aaeafefeffffffffffffffffffffffffffff
+fffffbdadcdddcdbdad9d7d8d6d6d6d5d5d5d5d4d3d3d3d2d1d0cfcfcecdcdccc8b68965
+656e6d6c6d6b696a69686b717c83888a8b867c76726f6d6c6b6c7071737e94a5b2b8b6b5
+b9b5b0aea59a8e857e767482909fadb1aca6a7a1948fadecfefeffffffffffffffffffff
+fffffffffffff8bbdbdcdbd9d9d8d7d7d5d5d5d5d5d5d4d3d3d3d3d2d1d0cfcecdcdcbcb
+c9c3ae86605e61646b6a696967676a707982878b8b857f7b7671706e6c6e7379818fa4b5
+c0c2beb9b4b0b0ada49c90817362657c8f9fadb1aca4a59d918eafeefeffffffffffffff
+fffffffffffffffffffff8badbdad9d9d7d7d6d6d4d5d4d4d5d5d4d4d2d2d3d3d1cfcfce
+cdcccbcacac8bfa0654645506669686867696a6f7882888f8c807b78726d6a696b6f7983
+8d959ea8aaa8a49b9390908d8b8880725f4d60879aa3afb1aca7a59c918eb5f1feffffff
+fffffffffffffffffffffffffffff7add9d9d9d9d6d5d4d3d4d4d3d3d3d3d3d3d3d2d2d2
+cfcececdcdcccbcac9c7c4ae78422c385d6967686667696d767f86908b7c757069635e61
+69707b86878582837f7f7f7d7d7e7a716c66615b575e7899a7adb2b1aaa6a39a908ebff7
+fffffffffffffffffffffffffffffffffffff7b9d9d8d8d6d5d4d3d3d4d3d2d3d3d2d2d2
+d2d2d2d1cfcececdcdcdcacac8c7c5b894592f31566968666667696f767d828e8b7c7269
+5d5a5b606a6d6e6e6b696a6b686e6f7072726c64615d5f62708798a8adb3b6b0a8a6a196
+8d91cdfbfefffffffffffffffffffffffffffffffffff8bad8d7d5d4d3d2d3d2d3d2d0d1
+d0d1d2d1d0d1d2cfcdcccccccbcbcac9c7c5c5bdad7d42324e6668666565686f777d7e87
+8a827761494a53595c59555354585b5e5f636464696e6e727879797b8ea5b0b2aeb1b3ac
+a7a59e918995d6fbfefffffffffffffffffffffffffffffffffff8b6d6d6d5d3d2d2d2d1
+d2d1d0d0d0d0d1d0cfd0d0cecdcccbcbcccccac8c6c5c4c0bca265404b6467656464696f
+797f7c828a89826944394146474546494f545b636a6c717d88909191908c878da2b5bbb3
+aaabada7a4a29c8f889ce0fbfefffffffffffffffffffffffffffffffffff5a5d6d5d3d2
+d1d1d2d1d0cfd0d0d1d0d0d0cfd0cfcdcccbcbcbcbc9c8c7c5c5c3c2c2b9946753616665
+6362686d7883817f888f918663464042464a4e5965707c8a94989ca4aeb4a99a938d8f9d
+b0babdafa1a1a4a2a3a1978b85a8edfcfefffffffffffffffffffffffffffffffffff7b4
+d4d3d2d1d1d0d1d0d0cfcfcfd0d0d0cfced0cecccdcacacacac7c6c5c4c3c2c3c4c3b899
+6a5f65646362666c7683867f87939a9b8a705e565a6166707d8b98a2a8aeafb0c0c5ad99
+8f8f9dadb7bdbba998979ea1a19c908685b7f7fdfefeffffffffffffffffffffffffffff
+fffff9c5d3d3d2d1d1d0d0cfcfcfcfcfd0d0cfcfcfcfcdcccbcacacac9c6c6c4c3c3c3c4
+c5c6c7b77f6063636363676a737f87828592999e9f9384726a6a6b717b8c99a0a2abb0b1
+b8b5a298959daeb5b6bbb7a89590989c9c978c8187c6fafefefeffffffffffffffffffff
+fffffffffffff8bed2d1d0d0cfcfcfcfcfcecfcfcfcfcecdcececdcbcac8c8c9c8c7c6c4
+c2c3c3c3c5c7cac08760616261646669717b8484828b939ba29f9784736d6b6d717d8a92
+959da7abacaaa4a5a8aeb4b3b3b4b0a38e8a94979a95887a8edafbfefefefeffffffffff
+fffffffffffffffffffff7afd0cfcfcfcfcfcfcfcfcfcececfcfcecdcdcdcdccc9c7c7c8
+c7c6c5c3c2c3c4c4c5c8cac28b6162626262666a6e767e8483858a929a9e9a8c7f797775
+747a848d9298a3aaacadafafaeaeafb1b3b1a89c898690959994847aa0e9fcfefefefeff
+fffffffffffffffffffffffffffff8bbcfcfcfcecdcecfcfcfcececececececccccbcbcb
+c9c7c6c6c6c6c4c4c3c2c3c4c4bfb9b0845e6262626264676a70777e818383868d93938b
+8481828283888e94999ca1a4a5a7a6a4a2a5aaacafada29587868f9396918380b7f4fdfe
+fffffffffffffffffffffffffffffffffffffacececfcfcecececed0cfcfcecdcecdcdcb
+cbcbcbcac7c6c5c5c7c6c4c3c3c3c4c4bfa48370594f5f6261626263686b71777c7f7d80
+868a8984828382848585898e908a827e848c8c8e94a0aaa9aaa69b8f84879194948d818d
+d2f8fdfefffffffffffffffffffffffffffffffffffff8becececfcecececfcfcecdcdcd
+cdcdcccbcccccccac7c5c5c5c6c5c3c3c2c3c4c5b588533831435e625f60616366696e72
+787a757982847e7c7d817e7e7a757575746d605e6a767a8392a3aca8a6a0988f88889297
+938981a8ecfcfdfefffffffffffffffffffffffffffffffffffffacacececfcecececfce
+cdcccccdcdcdcbcacbcbcac9c6c5c4c4c5c5c3c3c2c3c5c4b3916335283e5d6560606163
+6467696d73757071777b78767678797a746c6866686864636a757c8797a6aba6a0999994
+8d8c9599908588caf9fefefefefffffffffffffffffffffffffffffffffffbdacecfcfce
+cdcdcecececccccdcdcccbcacacac9c8c6c4c4c4c6c5c4c2c2c3c5c4b7a2884e2c3c5c68
+635f6061626566686c6f6b696d73727273757678766f6b6b6c6d6e6d737d85929fa8aaa4
+9f979b98919297998f8499e2fbfdfefefefefefffffffffffffffffffffffffffffff8bb
+ced0cececdcccdcdcdcccccccccbcac9c9c9c8c8c6c4c4c4c5c5c3c2c2c3c5c4baa79c6d
+393b5968665f5f6062646466676b6864666b6c6e707577797b767372706e72747c87909c
+a9adaaa6a4a09e9a989a9a988d83a6ecfcfdfefffefefeffffffffffffffffffffffffff
+fffff8bacdcecdcdcccbcccccccbcbcacacac9c8c8c7c8c8c5c4c3c3c3c3c3c2c3c3c5c4
+baaaa4895340556668615d5e60626365666865616062646a6e72777c7e78757675777c85
+9197a0abb3b2b0b0aea8a09e9d9d9a938780aceefdfefefefefefefffffffffffffffffe
+fefffffffffff7adcccdcdcdcccbcccccccbcac9c8c9c8c7c7c7c8c8c4c3c3c3c2c3c3c3
+c4c4c5c3baaba59d7751526369625c5c5d5f6265676865605b5a61696d70757e827e7c80
+7e87929ba5a8b3b9bab8b8bab6aba4a39f98928c8382aeeefdfefefefefefeffffffffff
+fffffffefefffffffffff7b9cdcecececccccccccccccbc9c7c8c8c8c8c7c8c7c5c3c3c3
+c3c5c3c4c5c4c4c2b8aea6a79370575d66645d5b5d5d6165686967625c5b626a6f71757e
+8588888c888e9ba1a7afbbc0b8b7bcbeb8b0ada99e938c867f84adeefdfefefeffffffff
+fffffffffffffffffffffffffffff8bacdcdcecdcccccbcacbcbcbc9c7c8c8c8c8c7c8c8
+c5c3c3c4c4c4c4c5c5c5c5c2b6afa8a9a3916f5b61645c5a5e5f6064676869655f5d6369
+6c6f767d83898c9191959ca0a9b1b9bcb8b6bcbeb8b1aca4998e86807e83a8ecfdfeffff
+fefefefefffffffffffffffffffffffffffff8b6cccdcdcccbcbcacacac9c9cac8c8c7c6
+c5c5c7c7c5c3c2c3c4c3c2c3c4c5c5bfb3aea9a7a9a19066595f5b585a5d606365656867
+62616668696d777e8588898f969ea3a6a9afb4b7b5b4b7bbb5aca79e92877e7e8386a5e3
+fafefffffefefefefffffffffffffffffffffffffefef5a5cccdcccbcacac9c9cac9c8c9
+c8c7c7c7c5c5c6c6c5c3c1c3c4c3c2c3c5c5c3bbb2adaba9aaa5a3845b575957565b5f61
+646568676565696a6b7079818986868d97a3a8aaa7abb2b5b1afb0b2a9a2a49c8d7f7b80
+848496c5eafbfefefefefefefefffffffffffffffffffefefefef7b4cbcbcbcbc9c9c8c9
+c9c8c8c8c6c6c6c6c5c6c6c6c4c4c1c3c3c3c2c4c4c3c1b6afadabadabaaa6a275535456
+54555b60656869676464686d6d7177808683838a939fa2a4a1a3a8aca6a3a3a59b9a9c93
+8378798082818391b7e3fafefefefefefefffffffffffffffffffefefefdf9c5cacbcaca
+c9c8c8c8c8c8c8c7c6c5c5c5c5c5c4c5c4c2c1c3c3c3c2c1bdb7b5afabacabafb0aaa7a9
+98644e515350555c636666656362676d6f72777d7f8182828592999b9c9fa0a09b9b9b98
+9093908579757c81817f797586b0e1fafdfdfdfdfefffffffffffffffffefefefefef8be
+c9c9c8c9c7c5c5c5c6c6c6c5c4c4c3c3c3c4c4c4c3c1c1c2c2c2bbb1aaa39da0a7aaaaab
+b2aca9a6aa8b5a4c4f4f4d525c6263626162656a6d7074797a7a7a7c7f898c8d8c929395
+9391918c8687827971767f81807c71626d85abd8f4fcfdfdfefefefffefefefefefefefd
+fdfdf7afc8c8c7c6c6c5c5c6c5c5c5c5c4c4c2c2c3c5c5c4c1c1c1c2c2c0b29f9a9a9491
+a3aaaaadb0b1a9a8a8a67c534a4e4a4a525c6062626264686c6e6f71726f6f767e848686
+7e82868b8a857e7a7a79766e70797e8180796b555b6c83a3cdebf7fcfdfefefffefdfefe
+fefffefdfdfdf8bbc8c7c6c5c5c4c5c5c5c5c4c4c4c3c2c2c5c6c5c4c0bfc0c1c1bcac9a
+9b9f978e9ca7a9adafb3b0aba7a79e76544c4b4949525b62636264686a6b6b6c6e6c6a6e
+767c7f807977797c7a7772706e6b6869737b7f807e786a524f57667c97b4def9fdfefefe
+fefdfefefefffefdfdfdf9cec7c6c5c5c4c3c4c4c4c4c4c4c3c2c2c3c4c4c4c3c0c0c0c1
+c1baa99c9d9d9a919099a2a8b0b0b6adaba5a79a74584c4a47474f595f60626364636568
+67666766676a7175726f6f6e6d6d6a676360616d787c807d7b796c534d4f5461738fc9f5
+fdfdfefefdfdfefefefefefcfcfdf8bec7c6c5c4c4c4c5c5c4c3c4c5c4c2c2c3c3c3c3c3
+bfc1c2c1bfb5a69b9c9e9a90898b96a6adb0b4b6adaea5a7977a63514844444b545c5e5b
+5b5c60625f5d6063605d666b6a6764636463605e595a68757d7f7f7b7a797465564f4f56
+6294d3f2fcfdfefefdfcfdfdfefefefcfcfdf9cac6c6c5c4c4c4c4c3c4c3c4c5c4c4c2c3
+c2c1c2c3c1c1c0c0bcaea19a9f9f9b90888687a2aab0afb8b4afaca3a997806d53454242
+4651585858595a5b59585b5f5c585d5e5d5c5b5859585754546171797e807f7c7a7a7874
+705d515364a2dfeefafcfdfdfcfcfdfdfefefdfcfcfdfad9c4c4c4c3c2c2c3c3c4c3c3c4
+c3c4c2c1c3c2c2c1c1c1bfbbb5a8a09c99979d8a81868392a7a9afb1baaeafa9a5a89386
+7351403e40434a5155565454535253555455585755545453504d4c505d6d74787c7d7d7b
+7b79726b7d715a5165a2e5eef8fbfdfdfcfcfcfcfdfcfcfcfdfdf7bbc4c4c3c3c3c3c3c3
+c3c3c4c4c2c2c2c2c3c3c3c1c0bfbab4afa39e9a8c909583868c898299a5aaafb3b6aab0
+a8a8a89189754f3d3f4041454d51514e4e4e4f4f4c5053524d4b494744454d5e6e757676
+797b7f7d7b7a7165716c5c546599e2f2f8fbfcfcfcfcfcfcfcfcfcfcfdfcf7bac3c2c1c1
+c1c1c2c1c2c2c2c3c1c0c0c0c0c0bfb8b4b8b7b1a59ea2968a928d8b938b7e76809da0aa
+abb2aeaab1a4aba28e8d744a393c3e3d4045484948494a4745454644413f3c3b4150606b
+72757675797b7e7c7d7b7166685b54596590d9f5f7fbfafafbfbfbfbfbfcfbfbfcfbf4ad
+c2c2c1c1c1c1c2c1c2c2c3c3c1c0bebfbab7b2968da5b2b0a6a7a89496988d9899847c7c
+778a9ca1a9a7afa7acaca3ab9e918f6f4534373b3c3b3e404141423f3d3b3b3938373740
+52646c7172747576797a7b7c7d7b6f5e5c55535d678ecff3f6fbfafafaf9fafbfbfafafa
+fcfbf4b8c2c1c1c2c1c0c3c2c1c2c4c3c1c1c0bdb0ac9e737096b5c1b4ababa19f9b989e
+988d93907c7691a0a2a5a5a9a2aba7a3ac9c938c643e32373d3c3c3b3b3a393634353434
+33353d4e626e7173737475797a7b7e7e7d7a6d514b4f57626b93c9eff8fafafaf9f8f8fa
+fafafafafbfaf5b9c1c1c0c2c1c0c1c2c2c2c3c2c1c0c2bfbabba27f91b2c4c7b3a8b1ac
+a09ca39c9a9f9f937f7a809b9ea0a09fa29ea7a3a5a89694865c3d2f323a3f3f3f3c3934
+31303030343d4b5c697172727174767c7e81817b7a7b6b45404d5a646b94cfebf8fafaf9
+f8f7f8fafafaf8f9fafaf4b4c0c0c1c1c1c0c0c2c2c2c2c2c2c4bbafbdccbda9a8a9b8bf
+bcbab9b1a5a1a0959da69c9490938585949698979b9d9ba39fa3a293947f593c2e323b3f
+40403f3d383433353e4c5b656b706e6e6f71777e8286837c7a7c693d3b4f5f666d9ddeeb
+f5f9faf9f8f8f8f9f9f9f8f8f9faf1a3c1bebfbfc0c1c1c1c0c0c1bfc5c49e8bacc2bbae
+8f698cc2cbc8bab3b1ac99919c98929fa49d85757c8f8d93949798999f9aa09b94987b5a
+402d313b404141413f3d3c434d5b676a6b6c696b6d6f798286827c7b7c7d693b38506266
+75a4e7eff3f8f8f9f7f7f8f7f9f8f8f8f7f8f1b2c0bfc1c0c0c1c1c0bebab8b5c5c09095
+b6bcbbad824b70c1d7ccbcbcbeab9399a19898a6a59588847a7f87898f8f9497969a999e
+989d99755634282f393e4242434549535d666d6d6d6b6a6d6e707e878a817b7c7f7f6b3c
+3752666b84ace6f3edf5f7f8f7f6f6f7f8f7f7f8f7f6f2c3bfbec0bfc0c1bfbfb9a79eae
+cdcfb6a8a0b3c2bd85547fbed7d4c9b9b09f929b9c96a0a59d9796908775748284878992
+94979c9b9f9ba388553325252d374144464b515b646b6f6c6b68676e7174808a8c87817f
+81816d3e3653677392bae1f0dde8f5f6f6f5f5f5f7f7f6f5f6f5f1bcbebebec0c2c1c0c3
+b5958aadd2ded19971a1d6daa46f98bbc2c7c1a8a2a5a1a0968d9698949a9a8f80706972
+7f7d808691969b9d9fa19d89482e2a29292e3b464e52555c656b6d6868666770757d868a
+8a89878184836d3d33536f829abed1e9d2c9e5f3f4f3f3f4f6f6f5f5f5f6f0adbdbebebf
+bfc4cccdc0a69fb6cedac9895e95d6e5d5acb9ccc0a8a2a6adb7bbaf9a95908a8a979685
+7a7575696d797f808794989d9fa397713a2e3645413a3e47525757596066686565656a73
+7b858989888b888487846a3a365d8294919195c5ba98c0e2edf0f1f2f4f3f3f4f4f4f0b9
+bfc0bfb1a8bed6cec3aa848bc0d2b0776a9cc4d7e4c9cdddbd786296b8c0c5b5a6a79482
+8b9794878a877a69666b7e80848e96999d9f98633936466a76746b5856595654555a5e5f
+62666e7a848b8c8b8b8d8a8889856a3b3f6c8d9a764c4d778a77a6cbddeaf0f2f4f3f4f2
+f2f4f2ccc3c8c6ab9fb3c8d0ceaa717bc3d7bc978eabb3bbbebed5dcac655491c1c6c2b9
+aca38e838d8f919da3917872766e6e747e8b9097989a93633b3f5e94b1baac8e715d5552
+4f52585c636d79848b8f9192918f8b8a8b83633f5175949b643538578490b3c0c4d4e5eb
+f3f4f5f2f2f4f0bcc9d2cfb79780a2d5e1c3909fcad6c8c2bdbcad967897d1e2a35d73ae
+c4cec7bba993888785828fa0a28b7e7b736b635e7181898d91938b65424c72a5c1d9ddc9
+a96f565251545b646d7780889095979795928d8b8c805a4a637ca49c5c373e5d8aa2beb6
+9eaecad2e9f3f5f4f3f4f2c8ced7ceb58271a4d3dadacac9d0c5aaabc6c8b181567cbddc
+c7899ecdd1d6d2c09e8e9994877f8e9a97898b85726463636e787b838a918f73475282ac
+b5b7cdd0c394685a5a606770767c858d959b9d9a96918e8d8c765665819ac1a35f475c82
+949fb4a48c9fc1c5d5ecf3f3f4f4f3d8c0d8d2c099a0ccc8b3b6c9d1cbad7870adc8b677
+649abfd0d9cbccc6c6dcdbd1afa0afa592888e948e8b8f8f7d767b7a7a716e77848d937f
+515085adafa9c3dee7c98e6964676d72777f8891989ea09d97908e8e8b787ca5becdd99e
+656886a7ada4997f82adc5b9b2d4e7e7eaf0efb89cd6e0d0d0dce3c3866898cace975e5d
+9ecacb9182c0cec6d3e7d19c97cbdedec19f9e979286878b878c908f838c918e8d8c8581
+808a928b5f4a79a59f93acc7d7d2a77468676c6f75828e969da1a4a2988e8d9093a2c3e0
+efe8c8887591aab5beae896378afbea58baccfced4e3eab6accbcbafbee3e4be73558dc7
+cda07384b3d6dac8c4cdc1c2dee8b4696dbfe4d7a7777387978a83858d8f8e8788988e86
+91a8a8a5918692946c4459889389909aadc8bf836c6a6d6e7482929da5a8aaa4978c8f9d
+a9ceeaf2e9cc967e91a3b0b7bdb4a2889cbeb79c919fbabdb5bad0a5c7c39d7092cdd9c6
+887fafccd0c6b5b8c9d3d3d7d9aa98bedfdc9c5158a9ded19961658da6a49689908b877f
+8894868796a5abb8b6a19a9e764452829b9c9b9ba6c2bb846f6e6e707783919fa9adada5
+9c9aabc0c8e6e7d6a57e7b869eabadb4b4acaca8bbc7a47b90a7b2b19a8dada8ccb48073
+a8cacfceb8b6c7cfcdcec7b6afbfd1e0d27e64a7dacf804b6bb1e0d2ac8c98b5b5a99892
+948881848a8c7e8ea0a1a3bdcdc4b7a37d4e4e789eaba59791979d7d7170717478818e9d
+aab0b2afb6c5d3d5c8caa276576785899aa9acadaa9d998d9eb8a07d9bafa99b9ca6b9a9
+dabe908db8c5c6d5c5b3a8b4cbc6b0816a98cfd9b76f5a9ed9c4845485cbe3d6bac1d9e0
+c7a8a1a4a090888487887c889da4a2b0c7cbc0b8a881625d666665686e76847a76747374
+78818a99a7ab9f88878d89877d7b5f3e55778192a1a7a2a7a5917b6676abb2a2b3b89574
+8eb6c6a5e9d5c2b3adb4c3d6cba57087c7cbb46f5992cfc89c6880b8dbcd9e829ecbd3cc
+bacae9e1cab4a6bab49e96888c8a81868f9da6b0c2c4b0b0c3b5968678665557595b6066
+737674767b81858ea191684c4543424650635140698992a3a9a49ca6a59785788fb4b8a0
+aabea1899cbab98edfd9c7a06f77aeccbc855f8acfd2c99081b4d8cbb99aa5c9d8d4b0a3
+acb2b0a07991d2dcc3af8a8fa5aeac989a8988898c9295a1adac9a9dbdbfb7b9ab9e8d83
+766a696674807a77797a75849f9b7a54423c3f4e697159657f94a1a3a49d9eaba6a7afa8
+b0bbaf8084b2b0a5aabcb69bccccb37b4e68acc6c1907db4d7d3c8c0b4c2c9b7b9bfcdcf
+c8bea4a8b9b4a3834e62bcdac9995d5488b3b9a79991918e898c8d8d8f96979ba8b6b8b2
+b8bcc4bbaca19f9ca5a4897e79706b8ea1b4a77c544b5875878187a3afaaada49d9ba2ab
+9790afbdbdb6a87e86b2b29289aeb9afb1bdad786a95bdbfb7bcc3dad0c2bac2cdcec39b
+8da8d3e4cc986b87bbb8a375485eaed5daaf756ea3bbb7a7a2a2948c8b8c8b89878a9a98
+96adb3a5abb3bec7bfb4b1b9b9b4a49f96898ea8afbeb298807c83989ea0abb2b7ac9e9c
+9797a39f6e5f9ec9c2a19ba3acc4bb7c70a7bca9bbb9b8acafc8c9b8a4abcee8c6a99095
+c0cbb2835678c6dec8854c6bb0b8b679507eb0c7ddc5b6b4cbd4cdbcb7b8a29494878a95
+89829594909ea5919299a9b5b5aeacbcb9b7b6c1bec0c3c2bdc3beb0b2b6abb1aba5a7a1
+a29a90989a98a48f5a68a8d0b97b75acb4c3c19296b8c39cc3bbb8bbc9d6cda97772ace3
+ce9c6861a4cdb8794868bad2c88a5b80afb4c5b38a9db6c4d8cdd1d8bebccfcbc8bca399
+9f8f93a0918688898989978a818c9fa9a4a5a3b0b6b7acb8bcc2c8c3bec2c9c2c7cbb6b1
+ac9c96928e8d90999e9fa3836587b4d1b37979afb1adb9c1c5c4c6aacab99291bad2d2a1
+5c4f98dbde995b6aadd9d8986084c1d5cdb7909fbfc4c1c3bdbac1d7e2dadbd29c88afc9
+ceb6a3a9b0a7a9af9d88818488868985839096a19c979aa1adada0a2a8b1bbb6a8bbc3b5
+c1c8b0a49f94958e858c9495a0a5a3897f91aacebba1a3baaf868ac1c7b0a6b3d2af665b
+a4ccd195596ba7d3e4b57b96d1eae2c09ba9cdd5cccbb7afbfd9cdb8b8aba5c3dfdbd5bf
+734979c4dcc2a0a1b1b9baafa08d909aa0968a88858a8c8f8b8d909a9e919ea9aeb4bdb2
+a1b5b7a1b4bba49895949889868e9598a3a9a28f776c90c2b6a8b0c0b07982bbbc95708d
+c5965d60a2d0dab485a5d2dbded4bfc8e0e9e4d1bcb1c5d0cac6bba49ec9c5bcb3885e71
+b5d6cc97583d69c5e4c98f738babbbb3a99d9ea5aba09c918c8d8e8c7f89939a9596aaab
+a5adb0a6a4a8a59aa3a89e979791928991959ba2acb19f7f5c578cb8a57f88bac1a0b0d5
+cb966a97dbac7b8cbdd9e2cec3cce1e3dad2c7b5b8cde1d1b68886b4d1c0ad85659ac3ce
+b77b484f9acfcb91585f84c4d9ccb39091afc6bfb0a8a5a6a8a4aea396909b9c929a9b9e
+959fada8929ea29ca0a39e999d9aa0a0968b8687969aa4a9adafa0755f89afbd996372b7
+c8b2bee0dbbba4bbeeddb3a2b7cfe9dfd0baaaafc6cfc188668dc9bea5734d81c0b89567
+5081c4ddbc6c5477a2c9cfb892919db6c6c6d6c9bbd0dbc8b3afb0b3b0b2b7ac97939fa7
+a5a7a397919db3a99fa19a93a2a6999aa19aa1a08f8882929e9da2a4a8acb0a4a1c8c8bf
+a98592bdbe9097c9d0cdc3a8d8dbc7987b99d6dec6915f76aabab27a4d6fb6ba96614d74
+b1be996371aad2e2d99d7ea0b3c3d3cbb8afb0bbc5bcc6d1d4e5e0c6aba7adb3aebabcac
+9ba1a2a29fa2a69a959db5afb4aaa3a1aaa597999e999b9b908f8ea1a9a9a6a8aaa6b2be
+ccd0b7afbeaea1ada3686eafbfb59393a1a8a48c7983a1b1b1a18b94a9ada88d808da5a9
+9b847b80919b93858fb0cadde3d7c4bfcad4d5d0c8c2c6c9c4bcbeb6b8c1b8aa9d9f9fa8
+aaaeb2aba9ababa89fa19b88888d97928e888a8987878a88868185837b7b86989ba19fa1
+9d9ca4a4afac999695836e6463575e777e7e7982
+showpage
diff --git a/graphics/psfig/unsupported/macdemo/figs/zip.ps b/graphics/psfig/unsupported/macdemo/figs/zip.ps
new file mode 100644
index 0000000000..783ec71b24
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/figs/zip.ps
@@ -0,0 +1,21 @@
+%!
+%%BoundingBox: 301.0 392.44 360.02 437.4
+/Times-Italic findfont 30 scalefont setfont
+
+/printZip {
+ 0 0 moveto
+ (Zip) show
+} def
+320 400 translate
+
+.95 -.05 0 {
+ setgray
+ printZip
+ -1 .5 translate
+} for
+
+1 setgray printZip
+
+
+showpage
+
diff --git a/graphics/psfig/unsupported/macdemo/lprep68.pro b/graphics/psfig/unsupported/macdemo/lprep68.pro
new file mode 100644
index 0000000000..0d6510011b
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/lprep68.pro
@@ -0,0 +1,446 @@
+%!Title: "Laser Prep -- The Apple PostScript Dictionary (md)"
+%%Creator: Apple Software Engineering
+%%CreationDate: Thursday, March 19, 1987
+%{appledict version #68 0
+% Modified by T. Darrell 1/89 [TJD]
+% © CopyRight Apple Computer, Inc. 1984,1985,1986,1987,1988 All Rights Reserved.
+%%EndComments
+%%BeginProcSet: "(AppleDict md)" 68 0
+%%[TJD]%statusdict begin waittimeout 300 lt{0 60 300 setdefaulttimeouts}if end
+%%[TJD]%currentfile statusdict begin serverdict begin product (LaserWriter II NT) eq revision 1 eq and {/setrealdevice {//setrealdevice exec 31 sendpcmd 4 eq tonerlight} bind def
+%%[TJD]%/execjob {31 sendpcmd 4 eq tonerlight //execjob exec} bind def end end eexec}{end end 722{currentfile read pop pop}repeat}ifelse
+%%[TJD]% HEX CODE DELETED
+%%[TJD]%/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub}
+%%[TJD]%ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end
+%%[TJD]%{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def
+%%[TJD]%/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse
+systemdict/currentpacking known{currentpacking true setpacking}if
+%%[TJD]%/LW{save statusdict/product get(LaserWriter)anchorsearch
+%%[TJD]%exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def
+/LW{0}def
+/LW+{LW 2 eq}bind def
+/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def
+%%[TJD]%ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if
+/md 250 dict def md begin
+/av 0 def
+/T true def/F false def/mtx matrix def/s75 75 string def/s8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def
+/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def
+/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def
+/fg (Rvd\001\001\000\000\177) def
+/bdf{bind def}bind def
+/xdf{exch def}bdf
+/xl{neg exch neg translate}bdf
+/fp{pnsh 0 ne pnsv 0 ne and}bdf
+/nop{}bdf/lnop[/nop load]cvx bdf
+/vrb[
+{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind
+/eofill load
+dup
+/newpath load
+2 index
+dup
+{clip newpath}bind
+{}bind
+dup
+2 copy
+]def
+currentscreen/spf xdf/rot xdf/freq xdf
+/doop{vrb exch get exec}bdf
+/psu{/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf
+/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def
+xflip yflip or{/noflips false def}if
+/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop/por xdf sn and/so xdf}bdf
+/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf
+/txpose{
+%[TJD] fNote{smalls}{bigs}ifelse pgs get exec
+ pxs pys scale
+ ppr aload pop por{
+ noflips{
+ pop exch neg exch translate pop 1 -1 scale
+ }if
+ xflip yflip and{
+ pop exch neg exch translate 180 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg translate
+ }if
+ xflip yflip not and{
+ pop exch neg exch translate pop 180 rotate
+ ppr 3 get ppr 1 get neg sub neg 0 translate
+ }if
+ yflip xflip not and{
+ ppr 1 get neg ppr 0 get neg translate
+ }if
+ }{
+ noflips{
+ translate pop pop 270 rotate 1 -1 scale
+ }if
+ xflip yflip and{
+ translate pop pop 90 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg translate
+ }if
+ xflip yflip not and{
+ translate pop pop 90 rotate ppr 3 get ppr 1 get
+ neg sub neg 0 translate
+ }if
+ yflip xflip not and{
+ translate pop pop 270 rotate ppr 2 get ppr 0 get
+ neg sub neg 0 exch translate
+ }if
+ }ifelse
+ statusdict begin waittimeout 300 lt{
+ /waittimeout 300 def
+ }if end
+ scaleby96{
+ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div
+ 2 copy translate .96 dup scale neg exch neg exch translate
+ }if
+}bdf
+/fr{4 copy ppr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll
+sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf
+/obl{{0.212557 mul}{pop 0}ifelse}bdf
+/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf
+/fnt{findfont sfd}bdf
+/bt{sa 3 1 roll 3 index and put}bdf
+/sa(\000\000\000\000\000\000\000\000\000\000)def
+/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf
+/mx1 matrix def
+/mx2 matrix def
+/mx3 matrix def
+/bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length
+fg 5 sfl{1}{0}ifelse put pnsv pnsh
+2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop
+mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf
+/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec
+mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop
+2t astore pop/pnsh xdf/pnsv xdf gw
+/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap
+setlinewidth setgray moveto}bdf
+/fc{save vmstatus exch sub 50000 lt
+{(%%[|0|]%%)=print flush}if pop restore}bdf
+/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf
+/3a [0 0 0] def
+/2t 2 array def
+/tp{3a astore pop}bdf
+/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq
+{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf
+/te{mx2 setmatrix}bdf
+/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf
+/tu{1 1 mx1 itransform scale/sfl false def}bdf
+/ts{1 1 mx1 transform scale/sfl true def}bdf
+/fz{/ps xdf}bdf
+/dv{dup 0 ne{div}{pop}ifelse}bdf
+/pop4{pop pop pop pop}bdf
+/it{sfl{mx1 itransform}if}bdf
+/gm{exch it moveto}bdf/rm{it rmoveto}bdf
+/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf
+/fm{statusdict/manualfeed known}bdf
+/se{statusdict exch/manualfeed exch put}bdf
+/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st
+statusdict/manualfeedtimeout 3600 put
+}if}if}bdf
+/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf
+/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf
+/min{2 copy gt{exch}if pop}bdf
+/max{2 copy lt{exch}if pop}bdf
+/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf
+/ih[currentdash]def
+/rh{fg 6 0 put ih aload pop setdash}bdf
+/dl{gsave nlw pys div setlinewidth 0 setgray}bdf
+/dlin{exch currentpoint currentlinewidth 2 div dup
+translate newpath moveto lineto currentpoint stroke grestore moveto}bdf
+/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto}
+{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge
+{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto
+0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto}
+{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto
+pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt
+{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto
+pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto
+0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto
+0 pnsv neg rlineto}ifelse}ifelse
+closepath fill}if @2 @1 grestore moveto}ifelse}bdf
+/gw{/pnm fg 3 get fg 4 get div def}bdf
+/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf
+/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+/@6 xdf/@7 xdf/@8 xdf gsave
+@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto
+@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if
+0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if
+mtx setmatrix @2 doop grestore}bdf
+/ar{dup 0 eq barc}bdf
+/ov{0 exch 360 exch true barc}bdf
+/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto
+6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf
+/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf
+/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf
+/@4 xdf/@5 xdf/@6 xdf/@7 xdf
+@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc}
+{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if
+currentpoint newpath
+@4 @6 add 2. div @7 moveto
+@4 @7 @4 @5 @2 arcto pop4
+@4 @5 @6 @5 @2 arcto pop4
+@6 @5 @6 @7 @2 arcto pop4
+@6 @7 @4 @7 @2 arcto pop4
+closepath @1 doop moveto}ifelse}bdf
+/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf
+/pl{exch lineto}bdf
+/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall
+pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf
+/gr{64. div setgray}bdf
+/pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf
+/sg{freq rot/spf load setscreen gr}bdf
+/dc{transform round .5 sub exch round .5 sub exch itransform}bdf
+/sn{userdict/smooth4 known}bdf
+/x8{3 bitshift}bdf
+/x4{2 bitshift}bdf
+/d4{-2 bitshift}bdf
+/d8{-3 bitshift}bdf
+/rb{15 add -4 bitshift 1 bitshift}bdf
+/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def
+dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if
+@1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if
+@1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def
+@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def
+abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if
+sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4
+@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse
+@7 restore}bdf
+/multibit{/mbdeep exch def/mbY exch def/mbX exch def
+save mbX mbY mbdeep[mbX 0 0 mbY 0 0]{currentfile picstr readhexstring pop}image
+restore}bdf
+/wd 16 dict def
+/mfont 14 dict def
+/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf
+/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def
+FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin
+cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def
+counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse
+pop
+exec currentdict end end @2 exch definefont pop}ifelse}bdf
+/bmbc{exch begin wd begin
+/cr xdf
+save
+CharTable cr 6 mul 6 getinterval{}forall
+/bitheight xdf/bitwidth xdf
+.96 div/width xdf
+Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf
+rowbytes 255 eq{0 0 0 0 0 0 setcachedevice}
+{Gnormsize dup scale
+width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add
+setcachedevice
+rowbytes 0 ne{
+XOffset YOffset translate newpath 0 0 moveto
+bitwidth bitheight scale
+sn{
+/xSmt bitwidth x4 def
+/ySmt bitheight x4 def
+/rSmt xSmt rb def
+rSmt x8 ySmt true
+[xSmt 0 0 ySmt neg 0 ySmt]
+{rSmt ySmt mul string CharData cr get
+1 index bitwidth bitheight rowbytes rSmt tso smooth4}
+}{rowbytes 3 bitshift bitheight 4 add true
+[bitwidth 0 0 bitheight neg 0 bitheight 2 add]
+{CharData cr get}
+}ifelse
+imagemask
+}if
+}ifelse
+restore
+end end
+}bdf
+/bb{.96 exch div/Gnormsize mdf 2 index
+/Gkernmax mdf 1 index/Gdescent mdf
+3 index div 4 1 roll
+2 index div 1. 5 2 roll
+exch div 4 1 roll
+4 array astore/FontBBox mdf
+}bdf
+/cdf{mfont/CharData get 3 1 roll put}bdf
+/bf{
+mfont begin
+/FontType 3 def
+/FontMatrix [1 0 0 1 0 0] def
+/Encoding macvec def
+/BuildChar/bmbc load def
+end
+mfont definefont pop
+}bdf
+/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def
+/aps{0 get 124 eq}bdf
+/xc{s75 cvs dup}bdf
+/xp{put cvn}bdf
+/scs{xc 3 67 put dup 0 95 xp}bdf
+/sos{xc 3 79 xp}bdf
+/sbs{xc 1 66 xp}bdf
+/sis{xc 2 73 xp}bdf
+/sob{xc 2 79 xp}bdf
+/sss{xc 4 83 xp}bdf
+/dd{exch 1 index add 3 1 roll add exch}bdf
+/smc{moveto dup show}bdf
+/kwn{FontDirectory 1 index known{findfont exch pop}}bdf
+/gl{1 currentgray sub setgray}bdf
+/mm{/mfont 10 dict def mfont begin
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 3 def
+/Encoding macvec def
+/df 4 index findfont def
+/FontBBox [0 0 1 1] def
+/xda xdf/mbc xdf
+/BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def
+exec end mfont definefont}bdf
+/ac{dup scs kwn{exch findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall
+fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def
+/PaintType 2 def currentdict end definefont}ifelse}bdf
+/mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf
+/mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf
+/ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf
+/ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf
+/su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf
+/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf
+/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf
+/bbc{/da .03 def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da moveto show}bdf
+/boc{/da 1 ps div def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf
+/bsc{/da 1 ps div def
+/ds .05 def/da2 da 2. div def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth
+cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc
+da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf
+/aoc{fd/df get setfont
+gsave cs wi grestore setcharwidth
+gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto show}bdf
+/asc{/da .05 def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto show}bdf
+/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf
+/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf
+/6a 6 array def
+/2a 2 array def
+/3q 3 array def
+/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf
+/qa{3 -1 roll add exch 3 -1 roll add exch}bdf
+/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf
+/qn{6a exch get mul}bdf
+/qA .166667 def/qB .833333 def/qC .5 def
+/qx{6a astore pop
+qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add
+qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add
+qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf
+/qp{6 copy 12 -2 roll pop pop}bdf
+/qc{exch qp qx curveto}bdf
+/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf
+/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf
+/pt{currentpoint newpath moveto}bdf
+/qf{/fillflag true def}bdf
+/ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf
+/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf
+/bp{currentpoint newpath 2 copy moveto}bdf
+/ef{gsave fillflag{gsave eofill grestore}if}bdf
+/sm{0 exch{@1 eq{1 add}if}forall}bdf
+/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub
+1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf
+/setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf
+/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse
+sa 1 get 0 ne/|______Symbol
+sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf
+/mc{0 3 1 roll transform neg exch pop}bdf
+/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0
+/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse
+abs setlinewidth neg rmoveto
+sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto
+2 copy rlineto stroke grestore}if
+sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse
+stroke grestore}{pop}ifelse}bdf
+/sgt{2 copy known{get true}{pop pop false}ifelse}bdf
+/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt
+{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false}
+ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf
+/blank/Times-Roman findfont/CharStrings get/space get def
+/macvec 256 array def
+/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
+/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
+macvec 0 32 getinterval astore pop
+macvec 32/Times-Roman findfont/Encoding get
+32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
+/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
+/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
+/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
+/guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
+/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
+/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+macvec 128 128 getinterval astore pop
+{}mark true/Courier/|______Courier 0 rf
+{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def
+/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def
+currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf
+/oldsettransfer/settransfer load def
+/concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def
+/settransfer{currenttransfer concatprocs oldsettransfer}def
+/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def
+/od{(Rvd\001\001\000\000\177) fg copy pop txpose
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def
+newpath clippath mark
+{transform{itransform moveto}}{transform{itransform lineto}}
+{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform
+{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}
+{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put
+10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf
+/cd{}bdf
+/op{/sfl false def/pm save def}bdf
+%%[TJD]%/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf
+/cp{ pop pop pm restore } bdf
+/px{0 3 1 roll tp tt}bdf
+/psb{/us save def}bdf
+/pse{us restore}bdf
+/ct 40 string def
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall clip newpath moveto}def
+/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf
+/av 68 def
+end
+LW 1 eq userdict/a4small known not and{/a4small
+[[300 72 div 0 0 -300 72 div -120 3381]
+280 3255
+{statusdict/jobstate (printing) put 0 setblink
+margins
+exch 196 add exch 304 add 8 div round cvi frametoroket
+statusdict/jobstate (busy) put
+1 setblink}
+/framedevice load
+60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load
+{}/settransfer load/initgraphics load/erasepage load]cvx
+statusdict begin bind end readonly def}if
+md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse
+lnop lnop lnop /tab load]def
+/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse
+userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse
+userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load]def end
+systemdict/currentpacking known{setpacking}if
+%%[TJD]%currentfile ok userdict/stretch known not and{eexec}{flushfile}ifelse
+%%[TJD]%
+%%[TJD]%currentfile ok userdict/smooth4 known not and{eexec}{flushfile}ifelse
+%%[TJD]%
+%%EndProcSet
+
diff --git a/graphics/psfig/unsupported/macdemo/lprep68.procs b/graphics/psfig/unsupported/macdemo/lprep68.procs
new file mode 100644
index 0000000000..5b3631c6a5
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/lprep68.procs
@@ -0,0 +1,439 @@
+%%BeginProcSet: "(AppleDict md)" 68 0
+%%[TJD]%statusdict begin waittimeout 300 lt{0 60 300 setdefaulttimeouts}if end
+%%[TJD]%currentfile statusdict begin serverdict begin product (LaserWriter II NT) eq revision 1 eq and {/setrealdevice {//setrealdevice exec 31 sendpcmd 4 eq tonerlight} bind def
+%%[TJD]%/execjob {31 sendpcmd 4 eq tonerlight //execjob exec} bind def end end eexec}{end end 722{currentfile read pop pop}repeat}ifelse
+%%[TJD]% HEX CODE DELETED
+%%[TJD]%/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub}
+%%[TJD]%ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end
+%%[TJD]%{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def
+%%[TJD]%/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse
+systemdict/currentpacking known{currentpacking true setpacking}if
+%%[TJD]%/LW{save statusdict/product get(LaserWriter)anchorsearch
+%%[TJD]%exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def
+/LW{0}def
+/LW+{LW 2 eq}bind def
+/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def
+%%[TJD]%ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if
+/md 250 dict def md begin
+/av 0 def
+/T true def/F false def/mtx matrix def/s75 75 string def/s8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def
+/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def
+/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def
+/fg (Rvd\001\001\000\000\177) def
+/bdf{bind def}bind def
+/xdf{exch def}bdf
+/xl{neg exch neg translate}bdf
+/fp{pnsh 0 ne pnsv 0 ne and}bdf
+/nop{}bdf/lnop[/nop load]cvx bdf
+/vrb[
+{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind
+/eofill load
+dup
+/newpath load
+2 index
+dup
+{clip newpath}bind
+{}bind
+dup
+2 copy
+]def
+currentscreen/spf xdf/rot xdf/freq xdf
+/doop{vrb exch get exec}bdf
+/psu{/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf
+/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def
+xflip yflip or{/noflips false def}if
+/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop/por xdf sn and/so xdf}bdf
+/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf
+/txpose{
+%[TJD] fNote{smalls}{bigs}ifelse pgs get exec
+ pxs pys scale
+ ppr aload pop por{
+ noflips{
+ pop exch neg exch translate pop 1 -1 scale
+ }if
+ xflip yflip and{
+ pop exch neg exch translate 180 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg translate
+ }if
+ xflip yflip not and{
+ pop exch neg exch translate pop 180 rotate
+ ppr 3 get ppr 1 get neg sub neg 0 translate
+ }if
+ yflip xflip not and{
+ ppr 1 get neg ppr 0 get neg translate
+ }if
+ }{
+ noflips{
+ translate pop pop 270 rotate 1 -1 scale
+ }if
+ xflip yflip and{
+ translate pop pop 90 rotate 1 -1 scale
+ ppr 3 get ppr 1 get neg sub neg ppr 2 get
+ ppr 0 get neg sub neg translate
+ }if
+ xflip yflip not and{
+ translate pop pop 90 rotate ppr 3 get ppr 1 get
+ neg sub neg 0 translate
+ }if
+ yflip xflip not and{
+ translate pop pop 270 rotate ppr 2 get ppr 0 get
+ neg sub neg 0 exch translate
+ }if
+ }ifelse
+ statusdict begin waittimeout 300 lt{
+ /waittimeout 300 def
+ }if end
+ scaleby96{
+ ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div
+ 2 copy translate .96 dup scale neg exch neg exch translate
+ }if
+}bdf
+/fr{4 copy ppr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll
+sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf
+/obl{{0.212557 mul}{pop 0}ifelse}bdf
+/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf
+/fnt{findfont sfd}bdf
+/bt{sa 3 1 roll 3 index and put}bdf
+/sa(\000\000\000\000\000\000\000\000\000\000)def
+/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf
+/mx1 matrix def
+/mx2 matrix def
+/mx3 matrix def
+/bu{currentpoint currentgray currentlinewidth currentlinecap currentlinejoin currentdash exch aload length
+fg 5 sfl{1}{0}ifelse put pnsv pnsh
+2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop
+mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf
+/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec
+mtx astore setmatrix mx1 astore pop mx2 astore pop 3a astore pop
+2t astore pop/pnsh xdf/pnsv xdf gw
+/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap
+setlinewidth setgray moveto}bdf
+/fc{save vmstatus exch sub 50000 lt
+{(%%[|0|]%%)=print flush}if pop restore}bdf
+/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf
+/3a [0 0 0] def
+/2t 2 array def
+/tp{3a astore pop}bdf
+/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq
+{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf
+/te{mx2 setmatrix}bdf
+/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf
+/tu{1 1 mx1 itransform scale/sfl false def}bdf
+/ts{1 1 mx1 transform scale/sfl true def}bdf
+/fz{/ps xdf}bdf
+/dv{dup 0 ne{div}{pop}ifelse}bdf
+/pop4{pop pop pop pop}bdf
+/it{sfl{mx1 itransform}if}bdf
+/gm{exch it moveto}bdf/rm{it rmoveto}bdf
+/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf
+/fm{statusdict/manualfeed known}bdf
+/se{statusdict exch/manualfeed exch put}bdf
+/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st
+statusdict/manualfeedtimeout 3600 put
+}if}if}bdf
+/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf
+/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf
+/min{2 copy gt{exch}if pop}bdf
+/max{2 copy lt{exch}if pop}bdf
+/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf
+/ih[currentdash]def
+/rh{fg 6 0 put ih aload pop setdash}bdf
+/dl{gsave nlw pys div setlinewidth 0 setgray}bdf
+/dlin{exch currentpoint currentlinewidth 2 div dup
+translate newpath moveto lineto currentpoint stroke grestore moveto}bdf
+/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto}
+{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge
+{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto
+0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto}
+{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto
+pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt
+{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto
+pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto
+0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto
+0 pnsv neg rlineto}ifelse}ifelse
+closepath fill}if @2 @1 grestore moveto}ifelse}bdf
+/gw{/pnm fg 3 get fg 4 get div def}bdf
+/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf
+/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+/@6 xdf/@7 xdf/@8 xdf gsave
+@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto
+@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if
+0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if
+mtx setmatrix @2 doop grestore}bdf
+/ar{dup 0 eq barc}bdf
+/ov{0 exch 360 exch true barc}bdf
+/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto
+6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf
+/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf
+/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf
+/@4 xdf/@5 xdf/@6 xdf/@7 xdf
+@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc}
+{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if
+currentpoint newpath
+@4 @6 add 2. div @7 moveto
+@4 @7 @4 @5 @2 arcto pop4
+@4 @5 @6 @5 @2 arcto pop4
+@6 @5 @6 @7 @2 arcto pop4
+@6 @7 @4 @7 @2 arcto pop4
+closepath @1 doop moveto}ifelse}bdf
+/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf
+/pl{exch lineto}bdf
+/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall
+pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf
+/gr{64. div setgray}bdf
+/pat{s8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi s8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen gr}bdf
+/sg{freq rot/spf load setscreen gr}bdf
+/dc{transform round .5 sub exch round .5 sub exch itransform}bdf
+/sn{userdict/smooth4 known}bdf
+/x8{3 bitshift}bdf
+/x4{2 bitshift}bdf
+/d4{-2 bitshift}bdf
+/d8{-3 bitshift}bdf
+/rb{15 add -4 bitshift 1 bitshift}bdf
+/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def
+dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if
+@1 0 eq @1 4 eq or{1 setgray ydbit 0 1 ydbit add 1 2 rc}if
+@1 3 eq @1 7 eq or{1}{0}ifelse setgray/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def
+@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def
+abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if
+sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4
+@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse
+@7 restore}bdf
+/multibit{/mbdeep exch def/mbY exch def/mbX exch def
+save mbX mbY mbdeep[mbX 0 0 mbY 0 0]{currentfile picstr readhexstring pop}image
+restore}bdf
+/wd 16 dict def
+/mfont 14 dict def
+/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf
+/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def
+FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin
+cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def
+counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse
+pop
+exec currentdict end end @2 exch definefont pop}ifelse}bdf
+/bmbc{exch begin wd begin
+/cr xdf
+save
+CharTable cr 6 mul 6 getinterval{}forall
+/bitheight xdf/bitwidth xdf
+.96 div/width xdf
+Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf
+rowbytes 255 eq{0 0 0 0 0 0 setcachedevice}
+{Gnormsize dup scale
+width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add
+setcachedevice
+rowbytes 0 ne{
+XOffset YOffset translate newpath 0 0 moveto
+bitwidth bitheight scale
+sn{
+/xSmt bitwidth x4 def
+/ySmt bitheight x4 def
+/rSmt xSmt rb def
+rSmt x8 ySmt true
+[xSmt 0 0 ySmt neg 0 ySmt]
+{rSmt ySmt mul string CharData cr get
+1 index bitwidth bitheight rowbytes rSmt tso smooth4}
+}{rowbytes 3 bitshift bitheight 4 add true
+[bitwidth 0 0 bitheight neg 0 bitheight 2 add]
+{CharData cr get}
+}ifelse
+imagemask
+}if
+}ifelse
+restore
+end end
+}bdf
+/bb{.96 exch div/Gnormsize mdf 2 index
+/Gkernmax mdf 1 index/Gdescent mdf
+3 index div 4 1 roll
+2 index div 1. 5 2 roll
+exch div 4 1 roll
+4 array astore/FontBBox mdf
+}bdf
+/cdf{mfont/CharData get 3 1 roll put}bdf
+/bf{
+mfont begin
+/FontType 3 def
+/FontMatrix [1 0 0 1 0 0] def
+/Encoding macvec def
+/BuildChar/bmbc load def
+end
+mfont definefont pop
+}bdf
+/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def
+/aps{0 get 124 eq}bdf
+/xc{s75 cvs dup}bdf
+/xp{put cvn}bdf
+/scs{xc 3 67 put dup 0 95 xp}bdf
+/sos{xc 3 79 xp}bdf
+/sbs{xc 1 66 xp}bdf
+/sis{xc 2 73 xp}bdf
+/sob{xc 2 79 xp}bdf
+/sss{xc 4 83 xp}bdf
+/dd{exch 1 index add 3 1 roll add exch}bdf
+/smc{moveto dup show}bdf
+/kwn{FontDirectory 1 index known{findfont exch pop}}bdf
+/gl{1 currentgray sub setgray}bdf
+/mm{/mfont 10 dict def mfont begin
+/FontMatrix [1 0 0 1 0 0] def
+/FontType 3 def
+/Encoding macvec def
+/df 4 index findfont def
+/FontBBox [0 0 1 1] def
+/xda xdf/mbc xdf
+/BuildChar{wd begin/cr xdf/fd xdf/cs s1 dup 0 cr put def fd/mbc get exec end}def
+exec end mfont definefont}bdf
+/ac{dup scs kwn{exch findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall
+fmv{/Encoding macvec def}if/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def
+/PaintType 2 def currentdict end definefont}ifelse}bdf
+/mb{dup sbs kwn{exch{pop}{bbc}{}mm}ifelse sfd}bdf
+/mo{dup sos kwn{exch{pop}{boc}{}mm}ifelse sfd}bdf
+/ms{dup sss kwn{exch{pop}{bsc}{}mm}ifelse sfd}bdf
+/ou{dup sos kwn{exch dup ac pop{scs findfont /df2 xdf}{aoc}{}mm}ifelse sfd}bdf
+/su{dup sss kwn{exch dup ac pop{scs findfont /df2 xdf}{asc}{}mm}ifelse sfd}bdf
+/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf
+/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf
+/bbc{/da .03 def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da moveto show}bdf
+/boc{/da 1 ps div def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf
+/bsc{/da 1 ps div def
+/ds .05 def/da2 da 2. div def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth
+cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc
+da 0 smc da da smc 0 da smc gl da 2. div dup moveto show}bdf
+/aoc{fd/df get setfont
+gsave cs wi grestore setcharwidth
+gl cs 0 0 smc fd/df2 get setfont gl 0 0 moveto show}bdf
+/asc{/da .05 def fd/df get setfont
+gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs da .01 add 0 smc 0 da translate gl 0 0 smc gl fd/df2 get setfont 0 0 moveto show}bdf
+/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf
+/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf
+/6a 6 array def
+/2a 2 array def
+/3q 3 array def
+/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf
+/qa{3 -1 roll add exch 3 -1 roll add exch}bdf
+/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf
+/qn{6a exch get mul}bdf
+/qA .166667 def/qB .833333 def/qC .5 def
+/qx{6a astore pop
+qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add
+qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add
+qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf
+/qp{6 copy 12 -2 roll pop pop}bdf
+/qc{exch qp qx curveto}bdf
+/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf
+/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf
+/pt{currentpoint newpath moveto}bdf
+/qf{/fillflag true def}bdf
+/ec{1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf
+/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf
+/bp{currentpoint newpath 2 copy moveto}bdf
+/ef{gsave fillflag{gsave eofill grestore}if}bdf
+/sm{0 exch{@1 eq{1 add}if}forall}bdf
+/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub
+1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf
+/setTxMode{sa 9 2 index put 3 eq{1}{0}ifelse setgray}bdf
+/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse
+sa 1 get 0 ne/|______Symbol
+sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf
+/mc{0 3 1 roll transform neg exch pop}bdf
+/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0
+/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse
+abs setlinewidth neg rmoveto
+sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto
+2 copy rlineto stroke grestore}if
+sa 3 get sa 4 get or 0 ne{gsave gl 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse
+stroke grestore}{pop}ifelse}bdf
+/sgt{2 copy known{get true}{pop pop false}ifelse}bdf
+/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt
+{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false}
+ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf
+/blank/Times-Roman findfont/CharStrings get/space get def
+/macvec 256 array def
+/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
+/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
+macvec 0 32 getinterval astore pop
+macvec 32/Times-Roman findfont/Encoding get
+32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
+/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
+/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
+/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
+/guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
+/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
+/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+macvec 128 128 getinterval astore pop
+{}mark true/Courier/|______Courier 0 rf
+{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def
+/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def
+currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf
+/oldsettransfer/settransfer load def
+/concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def
+/settransfer{currenttransfer concatprocs oldsettransfer}def
+/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def
+/od{(Rvd\001\001\000\000\177) fg copy pop txpose
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def
+newpath clippath mark
+{transform{itransform moveto}}{transform{itransform lineto}}
+{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform
+{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}
+{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put
+10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if}bdf
+/cd{}bdf
+/op{/sfl false def/pm save def}bdf
+%%[TJD]%/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf
+/cp{ pop pop pm restore } bdf
+/px{0 3 1 roll tp tt}bdf
+/psb{/us save def}bdf
+/pse{us restore}bdf
+/ct 40 string def
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall clip newpath moveto}def
+/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf
+/av 68 def
+end
+LW 1 eq userdict/a4small known not and{/a4small
+[[300 72 div 0 0 -300 72 div -120 3381]
+280 3255
+{statusdict/jobstate (printing) put 0 setblink
+margins
+exch 196 add exch 304 add 8 div round cvi frametoroket
+statusdict/jobstate (busy) put
+1 setblink}
+/framedevice load
+60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load
+{}/settransfer load/initgraphics load/erasepage load]cvx
+statusdict begin bind end readonly def}if
+md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse
+lnop lnop lnop /tab load]def
+/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse
+userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse
+userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load]def end
+systemdict/currentpacking known{setpacking}if
+%%[TJD]%currentfile ok userdict/stretch known not and{eexec}{flushfile}ifelse
+%%[TJD]%
+%%[TJD]%currentfile ok userdict/smooth4 known not and{eexec}{flushfile}ifelse
+%%[TJD]%
+%%EndProcSet
+
diff --git a/graphics/psfig/unsupported/macdemo/lprep70.pro b/graphics/psfig/unsupported/macdemo/lprep70.pro
new file mode 100644
index 0000000000..cd0ad2a279
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/lprep70.pro
@@ -0,0 +1,451 @@
+%!PS-Adobe-2.0
+%%BeginProcSet: "(AppleDict md)" 70 0
+statusdict begin product(LaserWriter II NT)eq revision 1 eq and
+{userdict begin/oldcds/cleardictstack load def/cleardictstack{31 sendpcmd 4 eq tonerlight/oldcds load exec}bind def
+end
+currentfile eexec
+}{save currentfile 359 string readhexstring pop pop restore}ifelse
+35de8eabfc7fa5eac0431edc501ad43f5fcbdf9fdd321cce93b525f4439dd94696bf56ac13a0a2aad1e6bcf444711e941d7217138d20ae0500145f815439cc14e697ad201df728ea4ccad4ac
+331aa03a7aacde10760bf4ee12bbf73c77cdcbf1796f26f0dd255d2407e1ac41
+d27489a69d6b69c6a841468b46720b75ad65650700e0c528e7af61e7e3e821b59445c44b69831ebc9deaf0e3aecc14b7a1c2e18bc1fa42a59219f1e36f236e3d6c89114b1f231999c3dbce6b43f3e2918fcb85575941a9d1e65c86aa08e6eea86cc66ce90e5e4add57f2585e
+7b1c0b5203cfc46868d6e3c0d66db79174e7091e32e307679732da062e440e41dabd36a161b611a7e4523a49694026206803dbfd5be5c5fe433f0f18a40057db6f1302848c8da4a10a7f14c6
+3d512806362b1be092ad5dbd36d75fe63e4cae2ba9b72390f580cac344a08bdf6eb9e36ec45bad2a0b82829a72e0efa2d87332c482196e690361168271c55053341ab3
+end
+/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub}
+ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end
+{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def
+/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse
+systemdict/currentpacking known{currentpacking true setpacking}if
+/LW{save statusdict/product get(LaserWriter)anchorsearch
+exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def
+/LW+{LW 2 eq}bind def
+/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def
+ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if
+/md 270 dict def md begin
+/av 0 def
+/T true def/F false def/mtx matrix def/s75 75 string def/sa8 8 string def/sb8 8 string def
+/sc8 8 string def/sd8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def
+/ns false def
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def
+/pgr [0 0 0 0] def
+/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def
+/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def
+/4colors false def/3colors false def/2colors false def
+/wtkey false def
+statusdict begin/waittimeout where{pop waittimeout 300 lt{md /wtkey true put}if}if end
+wtkey{statusdict begin/setdefaulttimeouts where{pop 0 60 300 setdefaulttimeouts}if end}if
+/fg (Rvd\001\001\000\000\177) def
+/bdf{bind def}bind def
+/xdf{exch def}bdf
+/xl{neg exch neg translate}bdf
+/fp{pnsh 0 ne pnsv 0 ne and}bdf
+/nop{}bdf/lnop[/nop load]cvx bdf
+/vrb[
+{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind
+/eofill load
+dup
+/newpath load
+2 index
+dup
+{clip newpath}bind
+{}bind
+dup
+2 copy
+]def
+systemdict/currentcolorscreen known{currentcolorscreen/dkspf xdf/dkrot xdf/dkfreq xdf/dyspf xdf/dyrot xdf/dyfreq xdf/dmspf xdf/dmrot xdf/dmfreq xdf
+/dcspf xdf/dcrot xdf/dcfreq xdf}{currentscreen/spf xdf/rot xdf/freq xdf}ifelse
+/doop{vrb exch get exec}bdf
+/psu{/udf xdf/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf
+/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def
+xflip yflip or{/noflips false def}if
+/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop pgr astore pop/por xdf sn and/so xdf}bdf
+/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf
+/a3Size{statusdict /a3 known{statusdict begin /a3 load end}{statusdict /setpageparams known{statusdict begin 842 1191 0 1 setpageparams end}if}ifelse}bdf
+/txpose{fNote{smalls}{bigs}ifelse pgs get exec pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if
+xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if
+xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if}
+{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if
+xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse
+wtkey{statusdict/waittimeout 300 put}if
+scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}bdf
+/fr{4 copy pgr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll
+sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf
+/obl{{0.212557 mul}{pop 0}ifelse}bdf
+/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf
+/fnt{findfont sfd}bdf
+/bt{sa 3 1 roll 3 index and put}bdf
+/sa(\000\000\000\000\000\000\000\000\000\000)def
+/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf
+/mx1 matrix def
+/mx2 matrix def
+/mx3 matrix def
+/bu{currentpoint 4colors{currentcmykcolor}{currentrgbcolor}ifelse currentlinewidth currentlinecap currentlinejoin
+currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh
+2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop
+mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf
+/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a
+astore pop 2t astore pop/pnsh xdf/pnsv xdf gw
+/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap
+setlinewidth 4colors{setcmykcolor}{setrgbcolor}ifelse moveto}bdf
+/fc{save vmstatus exch sub 50000 lt
+{(%%[|0|]%%)=print flush}if pop restore}bdf
+/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf
+/3a [0 0 0] def
+/2t 2 array def
+/tp{3a astore pop}bdf
+/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq
+{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf
+/te{mx2 setmatrix}bdf
+/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf
+/tu{1 1 mx1 itransform scale/sfl false def}bdf
+/ts{1 1 mx1 transform scale/sfl true def}bdf
+/fz{/ps xdf}bdf
+/dv{dup 0 ne{div}{pop}ifelse}bdf
+/pop4{pop pop pop pop}bdf
+/it{sfl{mx1 itransform}if}bdf
+/gm{exch it moveto}bdf/rm{it rmoveto}bdf
+/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf
+/fm{statusdict/manualfeed known}bdf
+/se{statusdict exch/manualfeed exch put}bdf
+/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st
+statusdict/manualfeedtimeout 3600 put
+}if}if}bdf
+/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf
+/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf
+/min{2 copy gt{exch}if pop}bdf
+/max{2 copy lt{exch}if pop}bdf
+/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf
+/ih[currentdash]def
+/rh{fg 6 0 put ih aload pop setdash}bdf
+/dl{gsave nlw pys div setlinewidth 0 setgray}bdf
+/dlin{exch currentpoint currentlinewidth 2 div dup
+translate newpath moveto lineto currentpoint stroke grestore moveto}bdf
+/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto}
+{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge
+{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto
+0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto}
+{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto
+pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt
+{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto
+pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto
+0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto
+0 pnsv neg rlineto}ifelse}ifelse
+closepath fill}if @2 @1 grestore moveto}ifelse}bdf
+/gw{/pnm fg 3 get fg 4 get div def}bdf
+/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf
+/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+/@6 xdf/@7 xdf/@8 xdf gsave
+@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto
+@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if
+0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if
+mtx setmatrix @2 doop grestore}bdf
+/ar{dup 0 eq barc}bdf
+/ov{0 exch 360 exch true barc}bdf
+/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto
+6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf
+/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf
+/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf
+/@4 xdf/@5 xdf/@6 xdf/@7 xdf
+@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc}
+{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if
+currentpoint newpath
+@4 @6 add 2. div @7 moveto
+@4 @7 @4 @5 @2 arcto pop4
+@4 @5 @6 @5 @2 arcto pop4
+@6 @5 @6 @7 @2 arcto pop4
+@6 @7 @4 @7 @2 arcto pop4
+closepath @1 doop moveto}ifelse}bdf
+/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf
+/pl{exch lineto}bdf
+/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall
+pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf
+/gr{64. div setgray}bdf
+/savescreen{ns not{/ns true def systemdict/currentcolorscreen known{currentcolorscreen/pkspf xdf/pkrot xdf/pkfreq xdf/pyspf xdf/pyrot xdf/pyfreq xdf/pmspf xdf/pmrot xdf/pmfreq xdf
+/pcspf xdf/pcrot xdf/pcfreq xdf}{currentscreen/sspf xdf/srot xdf/sfreq xdf}ifelse}if}bdf
+/restorescreen{/ns false def systemdict/setcolorscreen known{pcfreq pcrot/pcspf load pmfreq pmrot/pmspf load pyfreq pyrot/pyspf load
+pkfreq pkrot/pkspf load setcolorscreen}{sfreq srot/sspf load setscreen}ifelse}bdf
+/pat{savescreen sa8
+copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen exch not{gr}{pop}ifelse}bdf
+/sg{restorescreen gr}bdf
+/cpat{savescreen 10 2 roll 7 -1 roll sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}8 -1 roll sb8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sb8
+exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}9 -1 roll sc8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sc8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}10 -1 roll sd8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sd8
+exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}psuedo1 dsc 4{4 -1 roll 1 exch 64 div sub}repeat setcmykcolor pop pop}bdf
+systemdict/setcolorscreen known{/psuedo1 lnop bdf/dsc/setcolorscreen load def}{/psuedo1{16{pop}repeat sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}}bdf
+/bwsc{setscreen dup gr 0 exch 0 exch 64 exch 64 exch 64 exch}bdf/dsc/bwsc load def
+}ifelse
+systemdict/setcmykcolor known not{/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf}if
+/dc{transform round .5 sub exch round .5 sub exch itransform}bdf
+/sn{userdict/smooth4 known}bdf
+/x8{3 bitshift}bdf
+/x4{2 bitshift}bdf
+/d4{-2 bitshift}bdf
+/d8{-3 bitshift}bdf
+/rb{15 add -4 bitshift 1 bitshift}bdf
+/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def
+dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if
+@1 0 eq @1 4 eq or{currentrgbcolor 1 setgray ydbit 0 1 ydbit add 1 2 rc setrgbcolor}if
+@1 3 eq @1 7 eq or{1 setgray}{currentrgbcolor 2 index eq exch 2 index eq and exch pop{0 setgray}if}ifelse/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def
+@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def
+abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if
+sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4
+@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse
+@7 restore}bdf
+systemdict/setcmykcolor known{/psuedo lnop bdf/di/colorimage load def}{/routines[{.3 mul add 1}bind{.59 mul add 2}bind{.11 mul add round cvi str exch i exch put/i i 1 add def 0 0}bind]def
+/psuedo{/i 0 def 0 exch 0 exch{exch routines exch get exec}forall pop pop str}bdf/bwi{pop pop image}bdf/di/bwi load def}ifelse
+/cdb{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+systemdict/setcmykcolor known not{dc}if translate scale /@6 xdf
+/@18 @5 dup 60000 ge{pop 60000}if string def @6 not{/str @18 0 @18 length 3 idiv getinterval def}if @4 @3 8 [@4 0 0 @3 0 0]@6{{currentfile @18 readhexstring pop}image}{{currentfile @18 readhexstring pop psuedo}false 3 di}ifelse @7 restore}bdf
+/wd 16 dict def
+/mfont 14 dict def
+/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf
+/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def
+FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin
+cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def
+counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse
+pop
+exec currentdict end end @2 exch definefont pop}ifelse}bdf
+/bmbc{exch begin wd begin
+/cr xdf
+save
+CharTable cr 6 mul 6 getinterval{}forall
+/bitheight xdf/bitwidth xdf
+.96 div/width xdf
+Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf
+rowbytes 255 eq{0 0 0 0 0 0 setcachedevice}
+{Gnormsize dup scale
+width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add
+setcachedevice
+rowbytes 0 ne{
+XOffset YOffset translate newpath 0 0 moveto
+bitwidth bitheight scale
+sn{
+/xSmt bitwidth x4 def
+/ySmt bitheight x4 def
+/rSmt xSmt rb def
+rSmt x8 ySmt true
+[xSmt 0 0 ySmt neg 0 ySmt]
+{rSmt ySmt mul string CharData cr get
+1 index bitwidth bitheight rowbytes rSmt tso smooth4}
+}{rowbytes 3 bitshift bitheight 4 add true
+[bitwidth 0 0 bitheight neg 0 bitheight 2 add]
+{CharData cr get}
+}ifelse
+imagemask
+}if
+}ifelse
+restore
+end end
+}bdf
+/bb{.96 exch div/Gnormsize mdf 2 index
+/Gkernmax mdf 1 index/Gdescent mdf
+3 index div 4 1 roll
+2 index div 1. 5 2 roll
+exch div 4 1 roll
+4 array astore/FontBBox mdf
+}bdf
+/cdf{mfont/CharData get 3 1 roll put}bdf
+/bf{
+mfont begin
+/FontType 3 def
+/FontMatrix [1 0 0 1 0 0] def
+/Encoding macvec def
+/MFontType 0 def
+/BuildChar/bmbc load def
+end
+mfont definefont pop
+}bdf
+/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def
+/aps{0 get 124 eq}bdf
+/xc{s75 cvs dup}bdf
+/xp{put cvn}bdf
+/scs{xc 3 67 put dup 0 95 xp}bdf
+/sos{xc 3 79 xp}bdf
+/sbs{xc 1 66 xp}bdf
+/sis{xc 2 73 xp}bdf
+/sob{xc 2 79 xp}bdf
+/sss{xc 4 83 xp}bdf
+/dd{exch 1 index add 3 1 roll add exch}bdf
+/smc{moveto dup show}bdf
+/ndf2{udf{dup /FontType get 0 eq{/FDepVector get{dup /FontType get 0 eq{ndf2}{dup /df2 known{begin df2 0 null put end
+}{pop}ifelse}ifelse}forall}{/df2 known{dup begin df2 0 null put end}if}ifelse}{pop}ifelse}bdf
+/kwn{FontDirectory 1 index known{findfont dup ndf2 exch pop}}bdf
+/gl{1 currentgray sub setgray}bdf
+/newmm{dup /FontType get 0 eq{dup maxlength dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall currentdict end
+dup /FDepVector 2 copy get[exch 6 index exch 6 index exch{newmm 3 1 roll}forall pop pop] put dup
+}{/mfont 10 dict def mfont begin/FontMatrix [1 0 0 1 0 0] def
+/FontType 3 def/Encoding macvec def/df 1 index def/df2 1 array def/FontBBox [0 0 1 1] def/StyleCode 2 index def
+/mbc{bcarray StyleCode get}def/BuildChar{exch begin wd begin/cr exch def/cs s1 dup 0 cr put def df /MFontType known not{
+df2 0 get null eq{df dup length 2 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall
+/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def/PaintType 2 def currentdict end
+/q exch definefont df2 exch 0 exch put}if}if mbc exec end end}def end mfont}ifelse
+3 index exch definefont exch pop}bdf
+/mb{dup sbs kwn{0 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/mo{dup sos kwn{2 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ms{dup sss kwn{4 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ou{dup sos kwn{mfont/df2 known{mfont begin df2 0 null put end}if 3 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/su{dup sss kwn{mfont/df2 known{mfont begin df2 0 null put end}if 5 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf
+/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf
+/c{currentrgbcolor dup 4 1 roll eq 3 1 roll eq and/gray xdf}bdf
+/bcarray[{/da .03 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da moveto show}bind dup{/da 1 ps div def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind
+{df setfont gsave cs wi grestore setcharwidth c gray{gl}{currentrgbcolor 1 setgray}ifelse cs 0 0 smc df2 0 get setfont
+gray{gl}{4 1 roll setrgbcolor}ifelse 0 0 moveto show}bind
+{/da 1 ps div def/ds .05 def/da2 da 2. div def df setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth
+cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind
+{/da .05 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth c cs da .01 add 0 smc 0 da translate
+gray{gl}{currentrgbcolor 1 setgray 4 -1 roll}ifelse 0 0 smc gray{gl}{4 1 roll setrgbcolor}ifelse df2 0 get setfont 0 0 moveto show}bind]def
+/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf
+/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf
+/6a 6 array def
+/2a 2 array def
+/3q 3 array def
+/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf
+/qa{3 -1 roll add exch 3 -1 roll add exch}bdf
+/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf
+/qn{6a exch get mul}bdf
+/qA .166667 def/qB .833333 def/qC .5 def
+/qx{6a astore pop
+qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add
+qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add
+qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf
+/qp{6 copy 12 -2 roll pop pop}bdf
+/qc{exch qp qx curveto}bdf
+/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf
+/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf
+/pt{currentpoint newpath moveto}bdf
+/qf{/fillflag true def}bdf
+/ec{dup 4 and 0 ne{closepath}if 1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf
+/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf
+/bp{currentpoint newpath 2 copy moveto}bdf
+/ef{gsave fillflag{gsave eofill grestore}if}bdf
+/sm{0 exch{@1 eq{1 add}if}forall}bdf
+/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub
+1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf
+/setTxMode{sa 9 2 index put exch not{3 eq{1}{0}ifelse setgray}{pop}ifelse}bdf
+/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse
+sa 1 get 0 ne/|______Symbol
+sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf
+/mc{0 3 1 roll transform neg exch pop}bdf
+/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0
+/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse
+abs setlinewidth neg rmoveto
+sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto
+2 copy rlineto stroke grestore}if
+sa 3 get sa 4 get or 0 ne{gsave currentrgbcolor dup 4 1 roll eq 3 1 roll eq and{gl}{1 setgray}ifelse 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse
+stroke grestore}{pop}ifelse}bdf
+/sgt{2 copy known{get true}{pop pop false}ifelse}bdf
+/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt
+{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false}
+ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf
+/blank/Times-Roman findfont/CharStrings get/space get def
+/macvec 256 array def
+/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
+/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
+macvec 0 32 getinterval astore pop
+macvec 32/Times-Roman findfont/Encoding get
+32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
+/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
+/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
+/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
+/guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
+/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
+/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+macvec 128 128 getinterval astore pop
+{}mark true/Courier/|______Courier 0 rf
+{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def
+/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def
+currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf
+/oldsettransfer/settransfer load def
+/concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def
+/settransfer{currenttransfer concatprocs oldsettransfer}def
+/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def
+/od{(Rvd\001\001\000\000\177) fg copy pop txpose
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def
+newpath clippath mark
+{transform{itransform moveto}}{transform{itransform lineto}}
+{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform
+{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}
+{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put
+10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if
+statusdict/processcolors known{statusdict begin processcolors end dup 4 eq{/4colors true def pop}{3 eq{/3colors true def}{/2color true def}ifelse}ifelse}{/2colors true def}ifelse}bdf
+/cd{}bdf
+/op{/sfl false def systemdict/currentcolorscreen known{dcfreq dcrot/dcspf load dmfreq dmrot/dmspf load dyfreq dyrot/dyspf load
+dkfreq dkrot/dkspf load setcolorscreen}{freq rot/spf load setscreen}ifelse savescreen
+/ns false def/pm save def}bdf
+/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf
+/px{0 3 1 roll tp tt}bdf
+/psb{/us save def}bdf
+/pse{us restore}bdf
+/ct 40 string def
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall clip newpath moveto}def
+/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf
+/av 70 def
+end
+LW 1 eq userdict/a4small known not and{/a4small
+[[300 72 div 0 0 -300 72 div -120 3381]
+280 3255
+{statusdict/jobstate (printing) put 0 setblink
+margins
+exch 196 add exch 304 add 8 div round cvi frametoroket
+statusdict/jobstate (busy) put
+1 setblink}
+/framedevice load
+60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load
+{}/settransfer load/initgraphics load/erasepage load]cvx
+statusdict begin bind end readonly def}if
+md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse
+lnop lnop lnop /tab load/a3Size load]def
+/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse
+userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse
+userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load/a3Size load]def end
+systemdict/currentpacking known{setpacking}if
+/checkload{{currentfile eexec} {/junk save def/mystring 65000 string def
+/endexec (e%endeexec) def{currentfile mystring readline not{stop}if endexec eq{exit}if}loop junk restore}ifelse}bind def
+ok userdict/stretch known not and checkload
+373A767D4B7FD94FE5903B7014B1B8D3BED02632C855D56F458B118ACF3AF73FC4EF5E81F5749042B5F9CF1016D093B75F250B7D8280B2EACE05A37037F7BDF6E12226D7D4E2DF2C52FAFD5FD40FE72A0D3AC4BD485D8369D4C87636E920D1DAF222D92155A9CB1667E715F0B82799B37CC8F5B32B74B39CF494536DC39C7EF04A7BCB29E2CEC79073CADCCFB23B4AA1363F876F5121B618071B7B4EB1E5DE75FAA2368A3E5DB2B198623AFE92AE9484270FE7F57A850E88C0D3EEA156611C91D8E480D4370B025CCA6929A2BF40AD3D01B2CB7EE6DFB46E12A830542337F7819B67F9765210F76DB06F34DA5B13A11759305C582E16D2B854939F6D9121F2A4F285282F5DCD3D15896D121E3D6F5BE79E087451BB0ED233CDBEF090D3B4AC2DC34B97E70C61D95FB072B8C12D2ABD843520949A39DCF99E2C1AA8FBCD025E47E0A82A8D96E75BAF40F52AD402495BBD4DE0F356C8B14E764874E639C9F045A0D1908EC6456EB6C5B8A6F826192F767EF2C55A21C58F5F9CC1F59247B55F2387828C7FE89D5E7D8484D1BC86CB6673BDBE4FE17DD9BDE95224FE645136F41330BF155A4DDE1B0A32233BF471CE58FBC660DC7E641B0A0D30018454E2191C414A3011FF3FED1C0D88FE1FF9F75DCC456D097947226FBEC92509146D3A4CFFC0471B31C53222ED9DD88566F60F6C0D705AD79DACF53B070026F083ED28B5CF757AAA0A169F6F320A75E9D2ED50ABD939AF85B6346C2ADB25D168F10508E1516D194C635E6B187FADEA0829DBF0390C0F003F0265E215BC96CA3CC13D4A8E01570BE193CA75A620728CD275ACF1986EFFB3A13419FE55EA7C4467B7E7EEDC1FC29C9F8C46A557D2CCDB914EF7B93E7530D555DFC2398AFC68CAD991F062EF85BAA1884EC166C7C5DF8543666D8C41BE267D706BD1588F1F662F705CAE4D29DC38EF66BFAA89470D8A099B6F1B4587F7B024412276106FCD3EB5AE17A5D1DF1781992DC40EA0A992F706F701304CEA9D9073E7A74F1E687D81C3E5841D31CF86855BAAAD9B5D30317C75150A857C6B114735315CDD1AEF36C26BBB0645499406DEE2F24B3B1C72FEC97C7BA31AA2CDAB25418BB1DC4C7E4757F1D625087B0FD0300C03A65F2A72CE734925735277E034CDCF599129679F70CC8B66E03878851DB75041F275E1E5761F3EC753BE1359CA364A22047AE4886217F9259FE19FF5B116E8019B98B143114B313E8BEF87EC949D85C82E0812E6F50525E73890AF362CC8EE8A85F4197E6AC18638EF12E56A808D439AF1BFD363F140314BF4E534485C42F1856688CC35288E8D770120A420FB9F1FCF8AE8BD6D6156CC23E6C51119FE4DE1B68C9DF3487E9974BF9ED31F8D3CE93FF101867319F2FF492D5D398B4F09A66F2F55BCAB34B99173B7EE89039D00DD21A7B3A52E9F028F8301B5FC12D409412E064513BC579AAC498F577EA8ECD1FE3E42DC3CC320786C7B00194FEDF344402C33FC492D4BA86992B01683F440220FFE756BC88A94223D316078D69D33560E8EAB76B24CB7AA4320CF435593D76F624324ABE00B5587A4F283C725EA24567133F25F472B5E2E4474DDB5A16AC5F2DF32350395D3E3892FE361F4D5C9A610C654C9227614FBBAFF3356A90A2266E00F66234061075491571A65616211257F160000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+e%endeexec
+
+ok userdict/smooth4 known not and checkload
+F94E00EE41A71C59E5CAEED1EDBCF23D1DBA1EE99B9BB356492923BD8B1BA83A87CEB0E07377A31FD6241E814681118E17DC7CACE570399506E6E441B871B6043831BD03EFC11DBBD8001EE2FF8CFBD485065D455A2E15AC36F1A84AD8789FA6461199C7CD14CB9FD64D4B06452B7FC0A8FC263F70F1CCB893295D4DE70ADAB771C0F84396FA98C60B11DA02ABA157298DF0A23621853BEF167443A985ADC09BEFFD51CB4D29179E2B34609EF38A49DA61F4BFC256A3DE0732D7D29754A194857B9C9E9971227AA1DD0611FBB10E44E5FF66C062D9C24ED3290529330BC317825E876929582DB0E39B9FC5EFD20CC1D4F94920EB9C534D0DA90DE70D25BC7287319CF28602B3F46633C242CAFC8905E960317E3C2FA20AB8DB06ADBAF292FC7BA2CA14EE65DF28B99CC11666B70AD33E8E1D57D63D4B89ECC615AE5747C1CA752C833D8D6DE54CD4A0350B44310555CE3BD2C615ADD27B634CDB350AF3A432CE78AACD2909A5B586F666CD87919A36DB1CBE86B3CE281DFD01CD7E1B8A18A4B415CECBFF79A5C4390A15EA77D14D6BE12BAB5A8268C3F286D0590060647CABED674443CD258F11415E866AB330A251691B61F2422A61AFE59B6B4FBDCF85ED9BA0F8E483C034089E6877FF5923698D3A0DC0EED6B9CFD32DF0839BC4EA5F6D1FCB6DD0920391E57E84745131D02D100179F4E0A68EC0A5FF6680A6F463D038B04AF63FFA13D743B995A26A743C26D387209023C91DE43DF047A16F328AC9DDC08573B38BE9EA341EA16C78EC32F3A1B36B90D95A50610F4D050EC1C33497F3F3A81A1B4C8BEF0BA84EE2FAA32DC112DAC490AF53E1749C4A0D866CAF7B893E52383B0D38065C333FB122B700D7246F7EE87D942AE3DB5C1DD77E9E76C80CC5AD63D28DFED0E229CE604673F78CD47F258FDF5BF3A3EAEC5C9BC8E482D8DBA9D268A35DA8C095A690679ED2123E8B8F5E4826FA3B199EAA5D482D4B6AA86572E387CECEB7149C8947F41D6339328A748A17F8C4AD3B0555F1E409450BA0C564F1F488BB5096EB003568D4D5EF6489897E27409547D0EE4487D30184793B0F27BD265A64BDB3EA6761569DA955620C612E718677B77D6D81B999C6298877AFE0D1D6F6F358377A8BD2402F669C64B972B3A065EF7DD4BDEFFFE17E63DB8898FA6E69166B710AAD6BA2EA9AF61E4B8C8701638D4D6E4DFFFC192AEF6BC027095C4C72D748979675BA29FAF61E75343E14E61034602E5A79CD2519796ED6A9CC4EDEA46A9B59D4A807E786B5EE46F25B0360BC8E7C12D723122CDEEF247C9776F4C99C8EBED6828AA19744B5ADF0D07D95D98B3072372388D41B0FAB1CCE2775170679575ECDCA13B22A17FE9C6605C3445F58F1A829512DAB6C528F83580C8AA53C35D605F626F5AD0B7FC1EA87D69A835E3F53A1F450FB0AF42A5772F89D92A50D10F15BDBDA409F50C0B8AB93FE8A16D029DD8BB5C480D1466735ED4D9CAF637E5ECD6C2ECB6BF3B3EFBEE7AB936D2C568E3009D156B87CACB1FB3A48A70BC91B2EC35CC9147FFB1A524E2B2F2E4E2C1B12F1C1C63768BB95CD62FEC01CBA79B9FA282DD4DF49990F27FF8EE4E2DDE2F0ACD83BC9D4BE0090192C7A799967EC4DC2D63C0835E22D4C4B366D7FDCF3A05A4B53DF780F986EF25C79B665D5C00EFF7F17C0BB6D544F9D83A7FDAC47D9C5683A656011374253C918FF6EA64749DD971B2300DD5320033E01EC591F6318CCE94CE2B81C04322EC52B624E50643B52391CCD2AB56396A2AD8E2D3CA61B80D9D4CC363B2DF7863526958CDF3497E36648406C317E58EC563E7C26149A2A3C643ADFB39A8DD92974C6D2A2A9D7B71CDF3FEBBF32BB02E7B45CF53AAEAD5E963A4AA4AF9A149A08A4EC303D5F2369977E93F54897EEAD31B06C5845D63F49D65F8E5573962241A57CCD717CE6CA8C784A11192943616EA059B51BC38429E18D0121FCBB6FBD5D909B0D89E616C66DEF6A0F165A7030BD911A1B120468329CBB006C8D37720E531CF31E878CB4AAAC137633675C3D546F5162487AB35F470C042BDEB945E0F2532BF92AA6FD53434440221ECD3533A7AA89900CB19EFE2CD872DF8B7969AF0D3B72BF31DC5DD69CA6460966F61AB17CB507964098DBA3AF122EEC3128A9BAFE1034493F372B36BD1351205E9043A67C544402D8BCE24358C8A5CE33867A00794CF7097D59C88279A11EE9C854E7E7AAE881F9828C569D208F5F33375F59E9A3818CFA38AAD0CBFBA32F9F44A8BB79DE4C40E3886457C16DA4A27953AA1E99472E35F2323F0BAA5E37DC28CBA46FEFB73B190016055ADD4D27615D748499A0E1C4B8C7EC339C1C4D95A813A85918A8D01EEB485DDCDCEA6EA3F2C2A9D85C139CD90CCB352634F9AFE836BCAC0C274E352BA2071B5269D5DE4CCDE3FF990CBA974980C7332AE1545A9C60D5D1459D3AE95C1AC065733AF14FADB440A110DD539563B8D850CD0704C52F3F7CCCB53630D776560CBD22D8FF08F5B354487A171AEC15F5F54DE9CAB668BCAC573E788D92762EF63E76087005F4AC2D02E0CAC173C11BE62ACE5DC4D3374F2F9746C9981E125FF9AB8CAE76D13039E2C54DFD708E028A619EA1ED78E6B46F06DF0D0B74BBEDD8C190C7C0CEBDE8F7A4888CC36575313478DD2CFE392E9BB7B2416955D44B7024A3BA43FBF37293B386D64746D7748895411D243FAEC50638F2AA33337D7FA018ADDAC5835A0DDFAE99AD6299DFB4CA6872C59853E3AC12FC9E3D26629C5B49CF844C87B3C4BFBE3074E3A1CE6984758C20C661084381CD6B4582D84F19C0000B5FC0DCB42B567E396031601C095D7016283EBE5F13CD8A3A374A74DDBBABD36081149F8BC242085F2F7297CC97FD3B8BAD206D8AC9707A39ECCC7963B522E08DA391A1EF12DD4D746DBDDDCC0834F88160CF189A9645567CEC2F023A571AF0DFD15DB85B744C28C000DF53B05F8F210841F6E87A04F20C777B7C0BE6182BE2E90226E5301A12532A745F2FAAA81637CF11B78CD2B99A4D18B862D6C5DBD31793FB16A2D9AAD376D4484D75AA833D0068B1D34DB74E3302480854E3B5484D8A47E39A89A2FA927BC3641EA7F8E004FDE4C2F08D40D99F1ACB47CAF6887629BF6DFE12968D297596D28CE0CF148B12E7DCB49FB94F5ADBD214C3A6CE1E249831BA9EB8A189F2CE1ABE39A7B537253E369A508A2AF2ADB9463F9B56BBBFF31D535FF997F537C6675C196E7ECBD493F652FA7CC6D9C1CA3379BFDB5AF7513C6E834054494296B91A6EE800114363D5D5D0759F41B4DECB653B9DE3E94583579EF549ED5F3FAFB12661ABC0C57A332406517ED3454EDED34B386C60F78DC976266E0EAF54FC245FB0E3EFC8016236436B599C1C97A8C5E0AC8F7836161873C71F01ED9CC25C236420F41FD8277993D3959205912FA0927B59E3DAE7377D82079447D6E41EE5AEC0DFFF79AF8F4ED47F17EE708FEA45877860D56F8CBCE65A061E8E1CA4A5FBAF0E13429A7F0ADB6F178FA449F46CC539BBC0107E3A53B1C362A04B20E6D721E7E6E1E4976A11DDC98C7614D22B53DFBB6DAE533AC9BE882021A735C30DAA4A44AED09F49A390E8CFF59BD9C30667AF21B03EC5CEBD5C2C3AA2769E8D714191A48E7DDF50B13D1560E82EFB65FCE601AE9E8C351FBA1DED80B7351314E7F9F9A784BFE3759B7E322A84E7B51F9DC5F5D9C8050CD79B27C0A4B0DD68A3C27A948AD6858E35B960D2DEA838C479CAEA83B1A912174ACB2100E55E7A14892D7A9B3711FF0B20065C1995B49E1F23464A92DD140642E3A7B1973849E64D1A3CF60000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+e%endeexec
+%% TJD hacks 6/91 to get lprep 70 and psfig to work with pageview:
+md begin
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall % clip
+newpath moveto}def
+end
+%%EndProcSet
diff --git a/graphics/psfig/unsupported/macdemo/lprep70.procs b/graphics/psfig/unsupported/macdemo/lprep70.procs
new file mode 100644
index 0000000000..4ecbfc62ec
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/lprep70.procs
@@ -0,0 +1,450 @@
+%%BeginProcSet: "(AppleDict md)" 70 0
+statusdict begin product(LaserWriter II NT)eq revision 1 eq and
+{userdict begin/oldcds/cleardictstack load def/cleardictstack{31 sendpcmd 4 eq tonerlight/oldcds load exec}bind def
+end
+currentfile eexec
+}{save currentfile 359 string readhexstring pop pop restore}ifelse
+35de8eabfc7fa5eac0431edc501ad43f5fcbdf9fdd321cce93b525f4439dd94696bf56ac13a0a2aad1e6bcf444711e941d7217138d20ae0500145f815439cc14e697ad201df728ea4ccad4ac
+331aa03a7aacde10760bf4ee12bbf73c77cdcbf1796f26f0dd255d2407e1ac41
+d27489a69d6b69c6a841468b46720b75ad65650700e0c528e7af61e7e3e821b59445c44b69831ebc9deaf0e3aecc14b7a1c2e18bc1fa42a59219f1e36f236e3d6c89114b1f231999c3dbce6b43f3e2918fcb85575941a9d1e65c86aa08e6eea86cc66ce90e5e4add57f2585e
+7b1c0b5203cfc46868d6e3c0d66db79174e7091e32e307679732da062e440e41dabd36a161b611a7e4523a49694026206803dbfd5be5c5fe433f0f18a40057db6f1302848c8da4a10a7f14c6
+3d512806362b1be092ad5dbd36d75fe63e4cae2ba9b72390f580cac344a08bdf6eb9e36ec45bad2a0b82829a72e0efa2d87332c482196e690361168271c55053341ab3
+end
+/sc {60 45 {abs exch abs 2 copy add 1 gt{1.0 sub dup mul exch 1.0 sub dup mul add 1.0 sub}{dup mul exch dup mul add 1.0 exch sub}
+ifelse}setscreen} bind def statusdict begin product(LaserWriter II)anchorsearch end
+{pop pop/letter [/letter load /exec load /sc load /exec load]cvx def/legal [/legal load /exec load /sc load /exec load]cvx def/a4 [/a4 load /exec load /sc load /exec load]cvx def/b5 [/b5 load /exec load /sc load /exec load]cvx def
+/lettersmall [/lettersmall load /exec load /sc load /exec load]cvx def/a4small [/a4small load /exec load /sc load /exec load]cvx def/note [/note load /exec load /sc load /exec load]cvx def}{pop}ifelse
+systemdict/currentpacking known{currentpacking true setpacking}if
+/LW{save statusdict/product get(LaserWriter)anchorsearch
+exch pop{length 0 eq{1}{2}ifelse}{0}ifelse exch restore}bind def
+/LW+{LW 2 eq}bind def
+/ok{systemdict/statusdict known dup{LW 0 gt and}if}bind def
+ok{statusdict begin 9 sccinteractive 3 ne exch 0 ne or{9 0 3 setsccinteractive}if end}if
+/md 270 dict def md begin
+/av 0 def
+/T true def/F false def/mtx matrix def/s75 75 string def/sa8 8 string def/sb8 8 string def
+/sc8 8 string def/sd8 8 string def/s1 ( ) def/pxs 1 def/pys 1 def
+/ns false def
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def/nlw .24 def/ppr [-32 -29.52 762 582.48] def
+/pgr [0 0 0 0] def
+/pgs 1 def/por true def/xb 500 array def/so true def/tso true def/fillflag false def/pnm 1 def/fmv true def
+/sfl false def/ma 0 def/invertflag false def/dbinvertflag false def/xflip false def/yflip false def/noflips true def/scaleby96 false def/fNote true def/fBitStretch true def
+/4colors false def/3colors false def/2colors false def
+/wtkey false def
+statusdict begin/waittimeout where{pop waittimeout 300 lt{md /wtkey true put}if}if end
+wtkey{statusdict begin/setdefaulttimeouts where{pop 0 60 300 setdefaulttimeouts}if end}if
+/fg (Rvd\001\001\000\000\177) def
+/bdf{bind def}bind def
+/xdf{exch def}bdf
+/xl{neg exch neg translate}bdf
+/fp{pnsh 0 ne pnsv 0 ne and}bdf
+/nop{}bdf/lnop[/nop load]cvx bdf
+/vrb[
+{fp{fg 6 get 0 ne{gsave stroke grestore}{gsave 1 setlinewidth pnsh pnsv scale stroke grestore}ifelse}if newpath}bind
+/eofill load
+dup
+/newpath load
+2 index
+dup
+{clip newpath}bind
+{}bind
+dup
+2 copy
+]def
+systemdict/currentcolorscreen known{currentcolorscreen/dkspf xdf/dkrot xdf/dkfreq xdf/dyspf xdf/dyrot xdf/dyfreq xdf/dmspf xdf/dmrot xdf/dmfreq xdf
+/dcspf xdf/dcrot xdf/dcfreq xdf}{currentscreen/spf xdf/rot xdf/freq xdf}ifelse
+/doop{vrb exch get exec}bdf
+/psu{/udf xdf/tso xdf /fNote xdf/fBitStretch xdf/scaleby96 xdf/yflip xdf/xflip xdf
+/invertflag xdf/dbinvertflag invertflag statusdict begin version cvr 47.0 ge product (LaserWriter) eq not and end invertflag and {not}if def
+xflip yflip or{/noflips false def}if
+/pgs xdf 2 index .72 mul exch div/pys xdf div .72 mul/pxs xdf ppr astore pop pgr astore pop/por xdf sn and/so xdf}bdf
+/tab{statusdict /11x17 known{statusdict begin /11x17 load end}{statusdict /setpage known{statusdict begin 792 1224 1 setpage end}{statusdict /setpageparams known{statusdict begin 792 1224 0 1 setpageparams end}if}ifelse}ifelse}bdf
+/a3Size{statusdict /a3 known{statusdict begin /a3 load end}{statusdict /setpageparams known{statusdict begin 842 1191 0 1 setpageparams end}if}ifelse}bdf
+/txpose{fNote{smalls}{bigs}ifelse pgs get exec pxs pys scale ppr aload pop por{noflips{pop exch neg exch translate pop 1 -1 scale}if
+xflip yflip and{pop exch neg exch translate 180 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if
+xflip yflip not and{pop exch neg exch translate pop 180 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{ppr 1 get neg ppr 0 get neg translate}if}
+{noflips{translate pop pop 270 rotate 1 -1 scale}if xflip yflip and{translate pop pop 90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg translate}if
+xflip yflip not and{translate pop pop 90 rotate ppr 3 get ppr 1 get neg sub neg 0 translate}if yflip xflip not and{translate pop pop 270 rotate ppr 2 get ppr 0 get neg sub neg 0 exch translate}if}ifelse
+wtkey{statusdict/waittimeout 300 put}if
+scaleby96{ppr aload pop 4 -1 roll add 2 div 3 1 roll add 2 div 2 copy translate .96 dup scale neg exch neg exch translate}if}bdf
+/fr{4 copy pgr aload pop 3 -1 roll add 3 1 roll exch add 6 2 roll 3 -1 roll
+sub 3 1 roll exch sub 3 -1 roll exch div 3 1 roll div exch scale pop pop xl}bdf
+/obl{{0.212557 mul}{pop 0}ifelse}bdf
+/sfd{ps fg 5 -1 roll get mul 100 div 0 ps 5 -1 roll obl ps neg 0 0 6a astore makefont setfont}bdf
+/fnt{findfont sfd}bdf
+/bt{sa 3 1 roll 3 index and put}bdf
+/sa(\000\000\000\000\000\000\000\000\000\000)def
+/fs{0 1 bt 1 2 bt 2 4 bt 3 8 bt 4 16 bt 5 32 bt 6 64 bt 7 128 bt sa exch 8 exch put}bdf
+/mx1 matrix def
+/mx2 matrix def
+/mx3 matrix def
+/bu{currentpoint 4colors{currentcmykcolor}{currentrgbcolor}ifelse currentlinewidth currentlinecap currentlinejoin
+currentdash exch aload length fg 5 sfl{1}{0}ifelse put pnsv pnsh
+2t aload pop 3a aload pop mx2 aload pop mx1 aload pop mtx currentmatrix aload pop
+mx3 aload pop ps pm restore/ps xdf mx3 astore pop}bdf
+/bn{/pm save def mx3 setmatrix newpath 0 0 moveto ct dup 39 get 0 exch getinterval cvx exec mtx astore setmatrix mx1 astore pop mx2 astore pop 3a
+astore pop 2t astore pop/pnsh xdf/pnsv xdf gw
+/sfl fg 5 get 0 ne def array astore exch setdash setlinejoin setlinecap
+setlinewidth 4colors{setcmykcolor}{setrgbcolor}ifelse moveto}bdf
+/fc{save vmstatus exch sub 50000 lt
+{(%%[|0|]%%)=print flush}if pop restore}bdf
+/tc{32768 div add 3 1 roll 32768 div add 2t astore pop}bdf
+/3a [0 0 0] def
+/2t 2 array def
+/tp{3a astore pop}bdf
+/tt{mx2 currentmatrix pop currentpoint 2 copy 2t aload pop qa 2 copy translate 3a aload pop exch dup 0 eq
+{pop}{1 eq{-1 1}{1 -1}ifelse scale}ifelse rotate pop neg exch neg exch translate moveto}bdf
+/te{mx2 setmatrix}bdf
+/th{3 -1 roll div 3 1 roll exch div 2 copy mx1 scale pop scale/sfl true def}bdf
+/tu{1 1 mx1 itransform scale/sfl false def}bdf
+/ts{1 1 mx1 transform scale/sfl true def}bdf
+/fz{/ps xdf}bdf
+/dv{dup 0 ne{div}{pop}ifelse}bdf
+/pop4{pop pop pop pop}bdf
+/it{sfl{mx1 itransform}if}bdf
+/gm{exch it moveto}bdf/rm{it rmoveto}bdf
+/lm{currentpoint sfl{mx1 transform}if exch pop sub 0 exch it rmoveto}bdf
+/fm{statusdict/manualfeed known}bdf
+/se{statusdict exch/manualfeed exch put}bdf
+/mf{dup/ma exch def 0 gt{fm se/t1 5 st ok ma 1 gt and{/t2 0 st/t3 0 st
+statusdict/manualfeedtimeout 3600 put
+}if}if}bdf
+/jn{/statusdict where exch pop{statusdict exch /jobname exch put}if}bdf
+/pen{pnm mul/pnsh xdf pnm mul/pnsv xdf pnsh setlinewidth}bdf
+/min{2 copy gt{exch}if pop}bdf
+/max{2 copy lt{exch}if pop}bdf
+/dh{fg 6 1 put array astore dup {1 pxs div mul exch}forall astore exch pop exch pop exch setdash}bdf
+/ih[currentdash]def
+/rh{fg 6 0 put ih aload pop setdash}bdf
+/dl{gsave nlw pys div setlinewidth 0 setgray}bdf
+/dlin{exch currentpoint currentlinewidth 2 div dup
+translate newpath moveto lineto currentpoint stroke grestore moveto}bdf
+/lin{fg 6 get 0 ne{exch lineto currentpoint 0 doop moveto}
+{exch currentpoint/pnlv xdf/pnlh xdf gsave newpath/@1 xdf/@2 xdf fp{pnlh @2 lt{pnlv @1 ge
+{pnlh pnlv moveto @2 @1 lineto pnsh 0 rlineto
+0 pnsv rlineto pnlh pnsh add pnlv pnsv add lineto pnsh neg 0 rlineto}
+{pnlh pnlv moveto pnsh 0 rlineto @2 pnsh add @1 lineto 0 pnsv rlineto
+pnsh neg 0 rlineto pnlh pnlv pnsv add lineto}ifelse}{pnlv @1 gt
+{@2 @1 moveto pnsh 0 rlineto pnlh pnsh add pnlv lineto 0 pnsv rlineto
+pnsh neg 0 rlineto @2 @1 pnsv add lineto}{pnlh pnlv moveto pnsh 0 rlineto
+0 pnsv rlineto @2 pnsh add @1 pnsv add lineto pnsh neg 0 rlineto
+0 pnsv neg rlineto}ifelse}ifelse
+closepath fill}if @2 @1 grestore moveto}ifelse}bdf
+/gw{/pnm fg 3 get fg 4 get div def}bdf
+/lw{fg exch 4 exch put fg exch 3 exch put gw pnsv pnsh pen}bdf
+/barc{/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+/@6 xdf/@7 xdf/@8 xdf gsave
+@5 @7 add 2 div @6 @8 add 2 div translate newpath 0 0 moveto
+@5 @7 sub @6 @8 sub mtx currentmatrix pop scale @1{newpath}if
+0 0 0.5 @4 @3 arc @4 @3 sub abs 360 ge{closepath}if
+mtx setmatrix @2 doop grestore}bdf
+/ar{dup 0 eq barc}bdf
+/ov{0 exch 360 exch true barc}bdf
+/rc{/@t xdf currentpoint 6 2 roll newpath 4 copy 4 2 roll exch moveto
+6 -1 roll lineto lineto lineto closepath @t doop moveto}bdf
+/mup{dup pnsh 2 div le exch pnsv 2 div le or}bdf
+/rr{/@1 xdf 2. div/@2 xdf 2. div/@3 xdf
+/@4 xdf/@5 xdf/@6 xdf/@7 xdf
+@7 @5 eq @6 @4 eq @2 mup or or{@7 @6 @5 @4 @1 rc}
+{@4 @6 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@5 @7 sub 2. div dup @2 lt{/@2 xdf}{pop}ifelse
+@1 0 eq{/@2 @2 pnsh 2 div 2 copy gt{sub def}{0 pop4}ifelse}if
+currentpoint newpath
+@4 @6 add 2. div @7 moveto
+@4 @7 @4 @5 @2 arcto pop4
+@4 @5 @6 @5 @2 arcto pop4
+@6 @5 @6 @7 @2 arcto pop4
+@6 @7 @4 @7 @2 arcto pop4
+closepath @1 doop moveto}ifelse}bdf
+/pr{gsave newpath/pl{exch moveto/pl{exch lineto}def}def}bdf
+/pl{exch lineto}bdf
+/ep{dup 0 eq{{moveto}{exch lin}{}{(%%[|1|]%%)= flush}pathforall
+pop grestore}{doop grestore}ifelse currentpoint newpath moveto}bdf
+/gr{64. div setgray}bdf
+/savescreen{ns not{/ns true def systemdict/currentcolorscreen known{currentcolorscreen/pkspf xdf/pkrot xdf/pkfreq xdf/pyspf xdf/pyrot xdf/pyfreq xdf/pmspf xdf/pmrot xdf/pmfreq xdf
+/pcspf xdf/pcrot xdf/pcfreq xdf}{currentscreen/sspf xdf/srot xdf/sfreq xdf}ifelse}if}bdf
+/restorescreen{/ns false def systemdict/setcolorscreen known{pcfreq pcrot/pcspf load pmfreq pmrot/pmspf load pyfreq pyrot/pyspf load
+pkfreq pkrot/pkspf load setcolorscreen}{sfreq srot/sspf load setscreen}ifelse}bdf
+/pat{savescreen sa8
+copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}setscreen exch not{gr}{pop}ifelse}bdf
+/sg{restorescreen gr}bdf
+/cpat{savescreen 10 2 roll 7 -1 roll sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}8 -1 roll sb8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sb8
+exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}9 -1 roll sc8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sc8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}10 -1 roll sd8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sd8
+exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}psuedo1 dsc 4{4 -1 roll 1 exch 64 div sub}repeat setcmykcolor pop pop}bdf
+systemdict/setcolorscreen known{/psuedo1 lnop bdf/dsc/setcolorscreen load def}{/psuedo1{16{pop}repeat sa8 copy pop 9.375 pa por not{90 add}if{1 add 4 mul cvi sa8 exch get exch 1 add 4 mul cvi 7 sub bitshift 1 and}}bdf
+/bwsc{setscreen dup gr 0 exch 0 exch 64 exch 64 exch 64 exch}bdf/dsc/bwsc load def
+}ifelse
+systemdict/setcmykcolor known not{/setcmykcolor{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll}repeat setrgbcolor pop}bdf}if
+/dc{transform round .5 sub exch round .5 sub exch itransform}bdf
+/sn{userdict/smooth4 known}bdf
+/x8{3 bitshift}bdf
+/x4{2 bitshift}bdf
+/d4{-2 bitshift}bdf
+/d8{-3 bitshift}bdf
+/rb{15 add -4 bitshift 1 bitshift}bdf
+/db{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf/@6 @5 @3 4 add mul def
+dc translate scale/xdbit 1 1 idtransform abs/ydbit exch def abs def{0 0 1 ydbit add 1 10 rc clip}if
+@1 0 eq @1 4 eq or{currentrgbcolor 1 setgray ydbit 0 1 ydbit add 1 2 rc setrgbcolor}if
+@1 3 eq @1 7 eq or{1 setgray}{currentrgbcolor 2 index eq exch 2 index eq and exch pop{0 setgray}if}ifelse/@9 @1 0 eq @1 1 eq @1 3 eq or or dbinvertflag xor def/@13 @6 def
+@2 fBitStretch or{/@10 @4 x4 def/@11 @3 x4 def/@12 @10 rb def/@13 @12 @11 mul def/@15 1 1 dtransform abs/calcY 1 index def round cvi/@14 exch def
+abs/calcX 1 index def round cvi scaleby96 not{1 add}if def/@16 @15 rb def/@17 @16 @14 mul def}if
+sn @13 60000 lt and @2 fBitStretch or and{mtx currentmatrix dup 1 get exch 2 get 0. eq exch 0. eq and @17 60000 lt and fBitStretch and{@16 3 bitshift @14 @9 [calcX 0 0 calcY 0 0]{@17 string @13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4
+@10 @11 @12 dup string 5 index @15 @14 @16 dup string stretch}imagemask}{@12 x8 @11 @9 [@10 0 0 @11 0 0]{@13 string
+currentfile @6 string readhexstring pop 1 index @4 @3 @5 @12 @2 smooth4}imagemask}ifelse}{@5 3 bitshift @3 4 add @9 [@4 0 0 @3 0 2]{currentfile @6 string readhexstring pop}imagemask}ifelse
+@7 restore}bdf
+systemdict/setcmykcolor known{/psuedo lnop bdf/di/colorimage load def}{/routines[{.3 mul add 1}bind{.59 mul add 2}bind{.11 mul add round cvi str exch i exch put/i i 1 add def 0 0}bind]def
+/psuedo{/i 0 def 0 exch 0 exch{exch routines exch get exec}forall pop pop str}bdf/bwi{pop pop image}bdf/di/bwi load def}ifelse
+/cdb{/@7 save def/@1 xdf/@2 xdf/@3 xdf/@4 xdf/@5 xdf
+systemdict/setcmykcolor known not{dc}if translate scale /@6 xdf
+/@18 @5 dup 60000 ge{pop 60000}if string def @6 not{/str @18 0 @18 length 3 idiv getinterval def}if @4 @3 8 [@4 0 0 @3 0 0]@6{{currentfile @18 readhexstring pop}image}{{currentfile @18 readhexstring pop psuedo}false 3 di}ifelse @7 restore}bdf
+/wd 16 dict def
+/mfont 14 dict def
+/mdf{mfont wcheck not{/mfont 14 dict def}if mfont begin xdf end}bdf
+/cf{{1 index/FID ne{def}{pop pop}ifelse}forall}bdf/rf{/@1 exch def/@2 exch def
+FontDirectory @2 known{cleartomark pop}{findfont dup begin dup length @1 add dict begin
+cf{/Encoding macvec def}{Encoding dup length array copy/Encoding exch def
+counttomark 2 idiv{Encoding 3 1 roll put}repeat}ifelse
+pop
+exec currentdict end end @2 exch definefont pop}ifelse}bdf
+/bmbc{exch begin wd begin
+/cr xdf
+save
+CharTable cr 6 mul 6 getinterval{}forall
+/bitheight xdf/bitwidth xdf
+.96 div/width xdf
+Gkernmax add/XOffset xdf Gdescent add/YOffset xdf/rowbytes xdf
+rowbytes 255 eq{0 0 0 0 0 0 setcachedevice}
+{Gnormsize dup scale
+width 0 XOffset YOffset bitwidth XOffset add bitheight YOffset add
+setcachedevice
+rowbytes 0 ne{
+XOffset YOffset translate newpath 0 0 moveto
+bitwidth bitheight scale
+sn{
+/xSmt bitwidth x4 def
+/ySmt bitheight x4 def
+/rSmt xSmt rb def
+rSmt x8 ySmt true
+[xSmt 0 0 ySmt neg 0 ySmt]
+{rSmt ySmt mul string CharData cr get
+1 index bitwidth bitheight rowbytes rSmt tso smooth4}
+}{rowbytes 3 bitshift bitheight 4 add true
+[bitwidth 0 0 bitheight neg 0 bitheight 2 add]
+{CharData cr get}
+}ifelse
+imagemask
+}if
+}ifelse
+restore
+end end
+}bdf
+/bb{.96 exch div/Gnormsize mdf 2 index
+/Gkernmax mdf 1 index/Gdescent mdf
+3 index div 4 1 roll
+2 index div 1. 5 2 roll
+exch div 4 1 roll
+4 array astore/FontBBox mdf
+}bdf
+/cdf{mfont/CharData get 3 1 roll put}bdf
+/bf{
+mfont begin
+/FontType 3 def
+/FontMatrix [1 0 0 1 0 0] def
+/Encoding macvec def
+/MFontType 0 def
+/BuildChar/bmbc load def
+end
+mfont definefont pop
+}bdf
+/wi LW 1 eq{{gsave 0 0 0 0 0 0 0 0 moveto lineto lineto lineto closepath clip stringwidth grestore}bind}{/stringwidth load}ifelse def
+/aps{0 get 124 eq}bdf
+/xc{s75 cvs dup}bdf
+/xp{put cvn}bdf
+/scs{xc 3 67 put dup 0 95 xp}bdf
+/sos{xc 3 79 xp}bdf
+/sbs{xc 1 66 xp}bdf
+/sis{xc 2 73 xp}bdf
+/sob{xc 2 79 xp}bdf
+/sss{xc 4 83 xp}bdf
+/dd{exch 1 index add 3 1 roll add exch}bdf
+/smc{moveto dup show}bdf
+/ndf2{udf{dup /FontType get 0 eq{/FDepVector get{dup /FontType get 0 eq{ndf2}{dup /df2 known{begin df2 0 null put end
+}{pop}ifelse}ifelse}forall}{/df2 known{dup begin df2 0 null put end}if}ifelse}{pop}ifelse}bdf
+/kwn{FontDirectory 1 index known{findfont dup ndf2 exch pop}}bdf
+/gl{1 currentgray sub setgray}bdf
+/newmm{dup /FontType get 0 eq{dup maxlength dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall currentdict end
+dup /FDepVector 2 copy get[exch 6 index exch 6 index exch{newmm 3 1 roll}forall pop pop] put dup
+}{/mfont 10 dict def mfont begin/FontMatrix [1 0 0 1 0 0] def
+/FontType 3 def/Encoding macvec def/df 1 index def/df2 1 array def/FontBBox [0 0 1 1] def/StyleCode 2 index def
+/mbc{bcarray StyleCode get}def/BuildChar{exch begin wd begin/cr exch def/cs s1 dup 0 cr put def df /MFontType known not{
+df2 0 get null eq{df dup length 2 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall
+/StrokeWidth nlw 1000 mul pys div ps div dup 12 lt{pop 12}if def/PaintType 2 def currentdict end
+/q exch definefont df2 exch 0 exch put}if}if mbc exec end end}def end mfont}ifelse
+3 index exch definefont exch pop}bdf
+/mb{dup sbs kwn{0 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/mo{dup sos kwn{2 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ms{dup sss kwn{4 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ou{dup sos kwn{mfont/df2 known{mfont begin df2 0 null put end}if 3 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/su{dup sss kwn{mfont/df2 known{mfont begin df2 0 null put end}if 5 2 index findfont newmm exch pop exch pop exch pop}ifelse sfd}bdf
+/ao{/fmv true def ou}bdf/as{/fmv true def su}bdf
+/vo{/fmv false def ou}bdf/vs{/fmv false def su}bdf
+/c{currentrgbcolor dup 4 1 roll eq 3 1 roll eq and/gray xdf}bdf
+/bcarray[{/da .03 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da moveto show}bind dup{/da 1 ps div def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth
+cs 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind
+{df setfont gsave cs wi grestore setcharwidth c gray{gl}{currentrgbcolor 1 setgray}ifelse cs 0 0 smc df2 0 get setfont
+gray{gl}{4 1 roll setrgbcolor}ifelse 0 0 moveto show}bind
+{/da 1 ps div def/ds .05 def/da2 da 2. div def df setfont gsave cs wi 1 index 0 ne{exch ds add da2 add exch}if grestore setcharwidth
+cs ds da2 add .01 add 0 smc 0 ds da2 sub translate 0 0 smc da 0 smc da da smc 0 da smc c gray{gl}{1 setgray}ifelse da 2. div dup moveto show}bind
+{/da .05 def df setfont gsave cs wi 1 index 0 ne{exch da add exch}if grestore setcharwidth c cs da .01 add 0 smc 0 da translate
+gray{gl}{currentrgbcolor 1 setgray 4 -1 roll}ifelse 0 0 smc gray{gl}{4 1 roll setrgbcolor}ifelse df2 0 get setfont 0 0 moveto show}bind]def
+/st{1000 mul usertime add dup 2147483647 gt{2147483647 sub}if def}bdf
+/the{usertime sub dup 0 lt exch -2147483648 gt and}bdf
+/6a 6 array def
+/2a 2 array def
+/3q 3 array def
+/qs{3 -1 roll sub exch 3 -1 roll sub exch}bdf
+/qa{3 -1 roll add exch 3 -1 roll add exch}bdf
+/qm{3 -1 roll 1 index mul 3 1 roll mul}bdf
+/qn{6a exch get mul}bdf
+/qA .166667 def/qB .833333 def/qC .5 def
+/qx{6a astore pop
+qA 0 qn qB 2 qn add qA 1 qn qB 3 qn add
+qB 2 qn qA 4 qn add qB 3 qn qA 5 qn add
+qC 2 qn qC 4 qn add qC 3 qn qC 5 qn add}bdf
+/qp{6 copy 12 -2 roll pop pop}bdf
+/qc{exch qp qx curveto}bdf
+/qi{{exch 4 copy 2a astore aload pop qa .5 qm newpath moveto}{exch 2 copy 6 -2 roll 2 qm qs 4 2 roll}ifelse}bdf
+/qq{{qc 2a aload pop qx curveto}{exch 4 copy qs qa qx curveto}ifelse}bdf
+/pt{currentpoint newpath moveto}bdf
+/qf{/fillflag true def}bdf
+/ec{dup 4 and 0 ne{closepath}if 1 and 0 ne{0 doop}if grestore currentpoint newpath moveto/fillflag false def}bdf
+/eu{currentpoint fp{0 ep}{grestore newpath}ifelse moveto/fillflag false def}bdf
+/bp{currentpoint newpath 2 copy moveto}bdf
+/ef{gsave fillflag{gsave eofill grestore}if}bdf
+/sm{0 exch{@1 eq{1 add}if}forall}bdf
+/lshow{4 1 roll exch/@1 exch def{1 index wi pop sub 1 index sm dv 0 @1 4 -1 roll widthshow}{1 index wi pop sub
+1 index dup sm 10 mul exch length 1 sub add dv dup 10. mul 0 @1 4 -1 roll 0 6 -1 roll awidthshow}ifelse}bdf
+/setTxMode{sa 9 2 index put exch not{3 eq{1}{0}ifelse setgray}{pop}ifelse}bdf
+/SwToSym{{}mark false/Symbol/|______Symbol 0 rf 0 sa 6 get 0 ne{pop 1}{sa 7 get 0 eq{pop 2}if}ifelse
+sa 1 get 0 ne/|______Symbol
+sa 4 get 0 ne{vs}{sa 3 get 0 ne{vo}{fnt}ifelse}ifelse}bdf
+/mc{0 3 1 roll transform neg exch pop}bdf
+/ul{dup 0 ne sa 2 get 0 ne and{gsave 0 0
+/UnderlinePosition kif{mc}{ps -10 div}ifelse/UnderlineThickness kif{mc}{ps 15 div}ifelse
+abs setlinewidth neg rmoveto
+sa 4 get 0 ne{gsave currentlinewidth 2. div dup rmoveto currentpoint newpath moveto
+2 copy rlineto stroke grestore}if
+sa 3 get sa 4 get or 0 ne{gsave currentrgbcolor dup 4 1 roll eq 3 1 roll eq and{gl}{1 setgray}ifelse 2 copy rlineto stroke grestore rlineto strokepath nlw pys div setlinewidth}{rlineto}ifelse
+stroke grestore}{pop}ifelse}bdf
+/sgt{2 copy known{get true}{pop pop false}ifelse}bdf
+/kif{currentfont dup/FontMatrix get exch/FontInfo sgt{true}{currentfont/df sgt
+{dup/FontInfo sgt{3 1 roll/FontMatrix get mtx concatmatrix exch true}{pop pop pop false}
+ifelse}{pop pop false}ifelse}ifelse{3 -1 roll sgt{exch true}{pop false}ifelse}{false}ifelse}bdf
+/blank/Times-Roman findfont/CharStrings get/space get def
+/macvec 256 array def
+/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
+/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
+macvec 0 32 getinterval astore pop
+macvec 32/Times-Roman findfont/Encoding get
+32 96 getinterval putinterval macvec dup 39/quotesingle put 96/grave put
+/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
+/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
+/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
+/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
+/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
+/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
+/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
+/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft
+/guillemotright/ellipsis/blank/Agrave/Atilde/Otilde/OE/oe
+/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge
+/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
+/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand/Acircumflex/Ecircumflex/Aacute
+/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
+/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
+/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron
+macvec 128 128 getinterval astore pop
+{}mark true/Courier/|______Courier 0 rf
+{/Metrics 21 dict begin/zero 600 def/one 600 def/two 600 def/three 600 def/four 600 def/five 600 def/six 600 def/seven 600 def/eight 600 def
+/nine 600 def/comma 600 def/period 600 def/dollar 600 def/numbersign 600 def/percent 600 def/plus 600 def/hyphen 600 def/E 600 def/parenleft 600 def/parenright 600 def/space 600 def
+currentdict end def currentdict/UniqueID known{/UniqueID 16#800000 def}if/FontBBox FontBBox 4 array astore def}mark true/Helvetica/|______Seattle 1 rf
+/oldsettransfer/settransfer load def
+/concatprocs{/proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def
+newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx}def
+/settransfer{currenttransfer concatprocs oldsettransfer}def
+/PaintBlack{{1 exch sub}settransfer gsave newpath clippath 1 setgray fill grestore}def
+/od{(Rvd\001\001\000\000\177) fg copy pop txpose
+1 0 mtx defaultmatrix dtransform exch atan/pa exch def
+newpath clippath mark
+{transform{itransform moveto}}{transform{itransform lineto}}
+{6 -2 roll transform 6 -2 roll transform 6 -2 roll transform
+{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll curveto}}
+{{closepath}}pathforall newpath counttomark array astore/gc xdf pop ct 39 0 put
+10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack}if
+statusdict/processcolors known{statusdict begin processcolors end dup 4 eq{/4colors true def pop}{3 eq{/3colors true def}{/2color true def}ifelse}ifelse}{/2colors true def}ifelse}bdf
+/cd{}bdf
+/op{/sfl false def systemdict/currentcolorscreen known{dcfreq dcrot/dcspf load dmfreq dmrot/dmspf load dyfreq dyrot/dyspf load
+dkfreq dkrot/dkspf load setcolorscreen}{freq rot/spf load setscreen}ifelse savescreen
+/ns false def/pm save def}bdf
+/cp{not{userdict/#copies 0 put}if ma 0 gt{{t1 the{exit}if}loop}if{copypage}{showpage}ifelse pm restore}bdf
+/px{0 3 1 roll tp tt}bdf
+/psb{/us save def}bdf
+/pse{us restore}bdf
+/ct 40 string def
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall clip newpath moveto}def
+/kp{ct 0 2 index length 2 index 39 2 index put getinterval copy cvx exec mx3 currentmatrix pop}bdf
+/av 70 def
+end
+LW 1 eq userdict/a4small known not and{/a4small
+[[300 72 div 0 0 -300 72 div -120 3381]
+280 3255
+{statusdict/jobstate (printing) put 0 setblink
+margins
+exch 196 add exch 304 add 8 div round cvi frametoroket
+statusdict/jobstate (busy) put
+1 setblink}
+/framedevice load
+60 45{dup mul exch dup mul add 1.0 exch sub}/setscreen load
+{}/settransfer load/initgraphics load/erasepage load]cvx
+statusdict begin bind end readonly def}if
+md begin/bigs[lnop userdict/letter known{/letter load}{lnop}ifelse userdict/legal known{/legal load}{lnop}ifelse userdict/a4 known{/a4 load}{lnop}ifelse userdict/b5 known{/b5 load}{lnop}ifelse
+lnop lnop lnop /tab load/a3Size load]def
+/smalls[lnop userdict/lettersmall known{/lettersmall load}{userdict/note known{/note load}{lnop}ifelse}ifelse
+userdict/legal known{/legal load}{lnop}ifelse userdict/a4small known{/a4small load}{lnop}ifelse
+userdict/b5 known{/b5 load}{userdict/note known{/note load}{lnop}ifelse}ifelse lnop lnop lnop /tab load/a3Size load]def end
+systemdict/currentpacking known{setpacking}if
+/checkload{{currentfile eexec} {/junk save def/mystring 65000 string def
+/endexec (e%endeexec) def{currentfile mystring readline not{stop}if endexec eq{exit}if}loop junk restore}ifelse}bind def
+ok userdict/stretch known not and checkload
+373A767D4B7FD94FE5903B7014B1B8D3BED02632C855D56F458B118ACF3AF73FC4EF5E81F5749042B5F9CF1016D093B75F250B7D8280B2EACE05A37037F7BDF6E12226D7D4E2DF2C52FAFD5FD40FE72A0D3AC4BD485D8369D4C87636E920D1DAF222D92155A9CB1667E715F0B82799B37CC8F5B32B74B39CF494536DC39C7EF04A7BCB29E2CEC79073CADCCFB23B4AA1363F876F5121B618071B7B4EB1E5DE75FAA2368A3E5DB2B198623AFE92AE9484270FE7F57A850E88C0D3EEA156611C91D8E480D4370B025CCA6929A2BF40AD3D01B2CB7EE6DFB46E12A830542337F7819B67F9765210F76DB06F34DA5B13A11759305C582E16D2B854939F6D9121F2A4F285282F5DCD3D15896D121E3D6F5BE79E087451BB0ED233CDBEF090D3B4AC2DC34B97E70C61D95FB072B8C12D2ABD843520949A39DCF99E2C1AA8FBCD025E47E0A82A8D96E75BAF40F52AD402495BBD4DE0F356C8B14E764874E639C9F045A0D1908EC6456EB6C5B8A6F826192F767EF2C55A21C58F5F9CC1F59247B55F2387828C7FE89D5E7D8484D1BC86CB6673BDBE4FE17DD9BDE95224FE645136F41330BF155A4DDE1B0A32233BF471CE58FBC660DC7E641B0A0D30018454E2191C414A3011FF3FED1C0D88FE1FF9F75DCC456D097947226FBEC92509146D3A4CFFC0471B31C53222ED9DD88566F60F6C0D705AD79DACF53B070026F083ED28B5CF757AAA0A169F6F320A75E9D2ED50ABD939AF85B6346C2ADB25D168F10508E1516D194C635E6B187FADEA0829DBF0390C0F003F0265E215BC96CA3CC13D4A8E01570BE193CA75A620728CD275ACF1986EFFB3A13419FE55EA7C4467B7E7EEDC1FC29C9F8C46A557D2CCDB914EF7B93E7530D555DFC2398AFC68CAD991F062EF85BAA1884EC166C7C5DF8543666D8C41BE267D706BD1588F1F662F705CAE4D29DC38EF66BFAA89470D8A099B6F1B4587F7B024412276106FCD3EB5AE17A5D1DF1781992DC40EA0A992F706F701304CEA9D9073E7A74F1E687D81C3E5841D31CF86855BAAAD9B5D30317C75150A857C6B114735315CDD1AEF36C26BBB0645499406DEE2F24B3B1C72FEC97C7BA31AA2CDAB25418BB1DC4C7E4757F1D625087B0FD0300C03A65F2A72CE734925735277E034CDCF599129679F70CC8B66E03878851DB75041F275E1E5761F3EC753BE1359CA364A22047AE4886217F9259FE19FF5B116E8019B98B143114B313E8BEF87EC949D85C82E0812E6F50525E73890AF362CC8EE8A85F4197E6AC18638EF12E56A808D439AF1BFD363F140314BF4E534485C42F1856688CC35288E8D770120A420FB9F1FCF8AE8BD6D6156CC23E6C51119FE4DE1B68C9DF3487E9974BF9ED31F8D3CE93FF101867319F2FF492D5D398B4F09A66F2F55BCAB34B99173B7EE89039D00DD21A7B3A52E9F028F8301B5FC12D409412E064513BC579AAC498F577EA8ECD1FE3E42DC3CC320786C7B00194FEDF344402C33FC492D4BA86992B01683F440220FFE756BC88A94223D316078D69D33560E8EAB76B24CB7AA4320CF435593D76F624324ABE00B5587A4F283C725EA24567133F25F472B5E2E4474DDB5A16AC5F2DF32350395D3E3892FE361F4D5C9A610C654C9227614FBBAFF3356A90A2266E00F66234061075491571A65616211257F160000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+e%endeexec
+
+ok userdict/smooth4 known not and checkload
+F94E00EE41A71C59E5CAEED1EDBCF23D1DBA1EE99B9BB356492923BD8B1BA83A87CEB0E07377A31FD6241E814681118E17DC7CACE570399506E6E441B871B6043831BD03EFC11DBBD8001EE2FF8CFBD485065D455A2E15AC36F1A84AD8789FA6461199C7CD14CB9FD64D4B06452B7FC0A8FC263F70F1CCB893295D4DE70ADAB771C0F84396FA98C60B11DA02ABA157298DF0A23621853BEF167443A985ADC09BEFFD51CB4D29179E2B34609EF38A49DA61F4BFC256A3DE0732D7D29754A194857B9C9E9971227AA1DD0611FBB10E44E5FF66C062D9C24ED3290529330BC317825E876929582DB0E39B9FC5EFD20CC1D4F94920EB9C534D0DA90DE70D25BC7287319CF28602B3F46633C242CAFC8905E960317E3C2FA20AB8DB06ADBAF292FC7BA2CA14EE65DF28B99CC11666B70AD33E8E1D57D63D4B89ECC615AE5747C1CA752C833D8D6DE54CD4A0350B44310555CE3BD2C615ADD27B634CDB350AF3A432CE78AACD2909A5B586F666CD87919A36DB1CBE86B3CE281DFD01CD7E1B8A18A4B415CECBFF79A5C4390A15EA77D14D6BE12BAB5A8268C3F286D0590060647CABED674443CD258F11415E866AB330A251691B61F2422A61AFE59B6B4FBDCF85ED9BA0F8E483C034089E6877FF5923698D3A0DC0EED6B9CFD32DF0839BC4EA5F6D1FCB6DD0920391E57E84745131D02D100179F4E0A68EC0A5FF6680A6F463D038B04AF63FFA13D743B995A26A743C26D387209023C91DE43DF047A16F328AC9DDC08573B38BE9EA341EA16C78EC32F3A1B36B90D95A50610F4D050EC1C33497F3F3A81A1B4C8BEF0BA84EE2FAA32DC112DAC490AF53E1749C4A0D866CAF7B893E52383B0D38065C333FB122B700D7246F7EE87D942AE3DB5C1DD77E9E76C80CC5AD63D28DFED0E229CE604673F78CD47F258FDF5BF3A3EAEC5C9BC8E482D8DBA9D268A35DA8C095A690679ED2123E8B8F5E4826FA3B199EAA5D482D4B6AA86572E387CECEB7149C8947F41D6339328A748A17F8C4AD3B0555F1E409450BA0C564F1F488BB5096EB003568D4D5EF6489897E27409547D0EE4487D30184793B0F27BD265A64BDB3EA6761569DA955620C612E718677B77D6D81B999C6298877AFE0D1D6F6F358377A8BD2402F669C64B972B3A065EF7DD4BDEFFFE17E63DB8898FA6E69166B710AAD6BA2EA9AF61E4B8C8701638D4D6E4DFFFC192AEF6BC027095C4C72D748979675BA29FAF61E75343E14E61034602E5A79CD2519796ED6A9CC4EDEA46A9B59D4A807E786B5EE46F25B0360BC8E7C12D723122CDEEF247C9776F4C99C8EBED6828AA19744B5ADF0D07D95D98B3072372388D41B0FAB1CCE2775170679575ECDCA13B22A17FE9C6605C3445F58F1A829512DAB6C528F83580C8AA53C35D605F626F5AD0B7FC1EA87D69A835E3F53A1F450FB0AF42A5772F89D92A50D10F15BDBDA409F50C0B8AB93FE8A16D029DD8BB5C480D1466735ED4D9CAF637E5ECD6C2ECB6BF3B3EFBEE7AB936D2C568E3009D156B87CACB1FB3A48A70BC91B2EC35CC9147FFB1A524E2B2F2E4E2C1B12F1C1C63768BB95CD62FEC01CBA79B9FA282DD4DF49990F27FF8EE4E2DDE2F0ACD83BC9D4BE0090192C7A799967EC4DC2D63C0835E22D4C4B366D7FDCF3A05A4B53DF780F986EF25C79B665D5C00EFF7F17C0BB6D544F9D83A7FDAC47D9C5683A656011374253C918FF6EA64749DD971B2300DD5320033E01EC591F6318CCE94CE2B81C04322EC52B624E50643B52391CCD2AB56396A2AD8E2D3CA61B80D9D4CC363B2DF7863526958CDF3497E36648406C317E58EC563E7C26149A2A3C643ADFB39A8DD92974C6D2A2A9D7B71CDF3FEBBF32BB02E7B45CF53AAEAD5E963A4AA4AF9A149A08A4EC303D5F2369977E93F54897EEAD31B06C5845D63F49D65F8E5573962241A57CCD717CE6CA8C784A11192943616EA059B51BC38429E18D0121FCBB6FBD5D909B0D89E616C66DEF6A0F165A7030BD911A1B120468329CBB006C8D37720E531CF31E878CB4AAAC137633675C3D546F5162487AB35F470C042BDEB945E0F2532BF92AA6FD53434440221ECD3533A7AA89900CB19EFE2CD872DF8B7969AF0D3B72BF31DC5DD69CA6460966F61AB17CB507964098DBA3AF122EEC3128A9BAFE1034493F372B36BD1351205E9043A67C544402D8BCE24358C8A5CE33867A00794CF7097D59C88279A11EE9C854E7E7AAE881F9828C569D208F5F33375F59E9A3818CFA38AAD0CBFBA32F9F44A8BB79DE4C40E3886457C16DA4A27953AA1E99472E35F2323F0BAA5E37DC28CBA46FEFB73B190016055ADD4D27615D748499A0E1C4B8C7EC339C1C4D95A813A85918A8D01EEB485DDCDCEA6EA3F2C2A9D85C139CD90CCB352634F9AFE836BCAC0C274E352BA2071B5269D5DE4CCDE3FF990CBA974980C7332AE1545A9C60D5D1459D3AE95C1AC065733AF14FADB440A110DD539563B8D850CD0704C52F3F7CCCB53630D776560CBD22D8FF08F5B354487A171AEC15F5F54DE9CAB668BCAC573E788D92762EF63E76087005F4AC2D02E0CAC173C11BE62ACE5DC4D3374F2F9746C9981E125FF9AB8CAE76D13039E2C54DFD708E028A619EA1ED78E6B46F06DF0D0B74BBEDD8C190C7C0CEBDE8F7A4888CC36575313478DD2CFE392E9BB7B2416955D44B7024A3BA43FBF37293B386D64746D7748895411D243FAEC50638F2AA33337D7FA018ADDAC5835A0DDFAE99AD6299DFB4CA6872C59853E3AC12FC9E3D26629C5B49CF844C87B3C4BFBE3074E3A1CE6984758C20C661084381CD6B4582D84F19C0000B5FC0DCB42B567E396031601C095D7016283EBE5F13CD8A3A374A74DDBBABD36081149F8BC242085F2F7297CC97FD3B8BAD206D8AC9707A39ECCC7963B522E08DA391A1EF12DD4D746DBDDDCC0834F88160CF189A9645567CEC2F023A571AF0DFD15DB85B744C28C000DF53B05F8F210841F6E87A04F20C777B7C0BE6182BE2E90226E5301A12532A745F2FAAA81637CF11B78CD2B99A4D18B862D6C5DBD31793FB16A2D9AAD376D4484D75AA833D0068B1D34DB74E3302480854E3B5484D8A47E39A89A2FA927BC3641EA7F8E004FDE4C2F08D40D99F1ACB47CAF6887629BF6DFE12968D297596D28CE0CF148B12E7DCB49FB94F5ADBD214C3A6CE1E249831BA9EB8A189F2CE1ABE39A7B537253E369A508A2AF2ADB9463F9B56BBBFF31D535FF997F537C6675C196E7ECBD493F652FA7CC6D9C1CA3379BFDB5AF7513C6E834054494296B91A6EE800114363D5D5D0759F41B4DECB653B9DE3E94583579EF549ED5F3FAFB12661ABC0C57A332406517ED3454EDED34B386C60F78DC976266E0EAF54FC245FB0E3EFC8016236436B599C1C97A8C5E0AC8F7836161873C71F01ED9CC25C236420F41FD8277993D3959205912FA0927B59E3DAE7377D82079447D6E41EE5AEC0DFFF79AF8F4ED47F17EE708FEA45877860D56F8CBCE65A061E8E1CA4A5FBAF0E13429A7F0ADB6F178FA449F46CC539BBC0107E3A53B1C362A04B20E6D721E7E6E1E4976A11DDC98C7614D22B53DFBB6DAE533AC9BE882021A735C30DAA4A44AED09F49A390E8CFF59BD9C30667AF21B03EC5CEBD5C2C3AA2769E8D714191A48E7DDF50B13D1560E82EFB65FCE601AE9E8C351FBA1DED80B7351314E7F9F9A784BFE3759B7E322A84E7B51F9DC5F5D9C8050CD79B27C0A4B0DD68A3C27A948AD6858E35B960D2DEA838C479CAEA83B1A912174ACB2100E55E7A14892D7A9B3711FF0B20065C1995B49E1F23464A92DD140642E3A7B1973849E64D1A3CF60000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+0000000000000000000000000000000000000000000000000000000000000000
+cleartomark
+e%endeexec
+%% TJD hacks 6/91 to get lprep 70 and psfig to work with pageview:
+md begin
+/nc{currentpoint initclip newpath gc{dup type dup/arraytype eq exch/packedarraytype eq or{exec}if}
+forall % clip
+newpath moveto}def
+end
+%%EndProcSet
diff --git a/graphics/psfig/unsupported/macdemo/macdemo.tex b/graphics/psfig/unsupported/macdemo/macdemo.tex
new file mode 100644
index 0000000000..70fd42c7d3
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macdemo.tex
@@ -0,0 +1,19 @@
+\documentstyle[psfig]{article}
+\psfigurepath{macfigs:figs}
+\special{header=lprep68.pro}
+\begin{document}
+This is a rosette and some MacDraw output:
+
+\centerline{\psfig{figure=rosette.ps,height=2in}\hspace{.25in}
+ \psfig{figure=macdraw.fig68,height=2in}}
+
+This is what hacking Mac Postscript is like:
+
+\centerline{\psfig{figure=bullet.fig68,height=2in}}
+
+And now a graph:
+
+\centerline{\psfig{figure=dave.fig68,height=2in,clip=}}
+
+Thats all folks.
+\end{document}
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb
new file mode 100644
index 0000000000..e58060028b
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.bb
@@ -0,0 +1,2 @@
+%!
+%%BoundingBox: 0 500 500 800
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz
new file mode 100644
index 0000000000..a6212406f8
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/bullet.fig68.gz
Binary files differ
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb
new file mode 100644
index 0000000000..c4708324c1
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.bb
@@ -0,0 +1,2 @@
+%!
+%%BoundingBox: 80 280 460 600
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz
new file mode 100644
index 0000000000..343ee798ce
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/dave.fig68.gz
Binary files differ
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb
new file mode 100644
index 0000000000..e58060028b
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.bb
@@ -0,0 +1,2 @@
+%!
+%%BoundingBox: 0 500 500 800
diff --git a/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz
new file mode 100644
index 0000000000..bb04bed03a
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/macfigs/macdraw.fig68.gz
Binary files differ
diff --git a/graphics/psfig/unsupported/macdemo/stripfonts.awk b/graphics/psfig/unsupported/macdemo/stripfonts.awk
new file mode 100644
index 0000000000..b3ddd748af
--- /dev/null
+++ b/graphics/psfig/unsupported/macdemo/stripfonts.awk
@@ -0,0 +1,5 @@
+BEGIN {p = 1}
+$1 == "%%BeginFont:" { p = 0 }
+{ if (p==1) print $0 }
+$1 == "%%EndFont" { print "bn"; p = 1 }
+$1 == "%%EndFont:" { print "bn"; p = 1 }
diff --git a/graphics/psfig/unsupported/psfig-li.pro b/graphics/psfig/unsupported/psfig-li.pro
new file mode 100644
index 0000000000..167e31a02a
--- /dev/null
+++ b/graphics/psfig/unsupported/psfig-li.pro
@@ -0,0 +1,100 @@
+%!
+% Psfig/TeX Release 1.2
+% dvi2ps-li version
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+%
+% $Header: figtex.pro,v 1.5 87/07/24 20:14:50 trevor Exp $
+% $Source: $
+%
+%/TeXscale { 65536 div } def
+%/psfts { S 65781.76 div N } N
+/TeXscale { 65781.76 div } def
+
+%/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+%currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+%
+% Since dvi2ps has an initgraphics at the beginning of texpre.ps, we can
+% assume:
+gsave initgraphics
+/DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap
+currentlinejoin currentdash currentgray currentmiterlimit ] cvx def
+grestore
+
+/startTexFig {
+% usage : x y bb-llx bb-lly bb-urx bb-ury startFig
+ /SavedState save def
+ userdict maxlength dict begin
+ currentpoint transform
+
+ DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap
+ setlinewidth setmatrix
+
+ itransform moveto
+
+ /ury exch TeXscale def
+ /urx exch TeXscale def
+ /lly exch TeXscale def
+ /llx exch TeXscale def
+ /y exch TeXscale def
+ /x exch TeXscale def
+
+ currentpoint /cy exch def /cx exch def
+
+ /sx x urx llx sub div def % scaling for x
+ /sy y ury lly sub div def % scaling for y
+
+ sx sy scale % scale by (sx,sy)
+
+ cx sx div llx sub
+ cy sy div ury sub translate
+
+ /DefFigCTM matrix currentmatrix def
+
+ /initmatrix {
+ DefFigCTM setmatrix
+ } def
+ /defaultmatrix {
+ DefFigCTM exch copy
+ } def
+
+ /initgraphics {
+ DocumentInitState setmiterlimit setgray setdash
+ setlinejoin setlinecap setlinewidth setmatrix
+ DefFigCTM setmatrix
+ } def
+
+ /showpage {
+ initgraphics
+ } def
+% /erasepage and /copypage added for MatLab support (tli)
+ /erasepage {
+ initgraphics
+ } def
+ /copypage {} def
+
+} def
+% Args are llx lly urx ury (in figure coordinates)
+/clipFig {
+ currentpoint 6 2 roll
+ newpath 4 copy
+ 4 2 roll moveto
+ 6 -1 roll exch lineto
+ exch lineto
+ exch lineto
+ closepath clip
+ newpath
+ moveto
+} def
+% doclip, if called, will always be just after a `startfig'
+/doclip { llx lly urx ury clipFig } def
+/endTexFig {
+ end SavedState restore
+} def
diff --git a/graphics/psfig/unsupported/psfig-li.tex b/graphics/psfig/unsupported/psfig-li.tex
new file mode 100644
index 0000000000..4255bc3199
--- /dev/null
+++ b/graphics/psfig/unsupported/psfig-li.tex
@@ -0,0 +1,391 @@
+% Psfig/TeX Release 1.2
+% dvi2ps-li version
+%
+% All software, documentation, and related files in this distribution of
+% psfig/tex are Copyright 1987, 1988 Trevor J. Darrell
+%
+% Permission is granted for use and non-profit distribution of psfig/tex
+% providing that this notice be clearly maintained, but the right to
+% distribute any portion of psfig/tex for profit or as part of any commercial
+% product is specifically reserved for the author.
+%
+% $Header: psfig.tex,v 1.9 88/01/08 17:42:01 trevor Exp $
+% $Source: $
+%
+% Thanks to Greg Hager (GDH) and Ned Batchelder for their contributions
+% to this project.
+%
+\catcode`\@=11\relax
+\newwrite\@unused
+\def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}
+\typeout{psfig/tex 1.2-dvi2ps-li}
+
+%% Here's how you define your figure path. Should be set up with null
+%% default and a user useable definition.
+
+\def\figurepath{./}
+\def\psfigurepath#1{\edef\figurepath{#1}}
+
+%
+% @psdo control structure -- similar to Latex @for.
+% I redefined these with different names so that psfig can
+% be used with TeX as well as LaTeX, and so that it will not
+% be vunerable to future changes in LaTeX's internal
+% control structure,
+%
+\def\@nnil{\@nil}
+\def\@empty{}
+\def\@psdonoop#1\@@#2#3{}
+\def\@psdo#1:=#2\do#3{\edef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \expandafter\@psdoloop#2,\@nil,\@nil\@@#1{#3}\fi}
+\def\@psdoloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@ipsdoloop #3\@@#4{#5}\fi\fi}
+\def\@ipsdoloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@ipsdoloop\fi\@nextwhile#2\@@#3{#4}}
+\def\@tpsdo#1:=#2\do#3{\xdef\@psdotmp{#2}\ifx\@psdotmp\@empty \else
+ \@tpsdoloop#2\@nil\@nil\@@#1{#3}\fi}
+\def\@tpsdoloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \let\@nextwhile=\@psdonoop \else
+ #4\relax\let\@nextwhile=\@tpsdoloop\fi\@nextwhile#2\@@#3{#4}}
+%
+%
+\def\psdraft{
+ \def\@psdraft{0}
+ %\typeout{draft level now is \@psdraft \space . }
+}
+\def\psfull{
+ \def\@psdraft{100}
+ %\typeout{draft level now is \@psdraft \space . }
+}
+\psfull
+\newif\if@prologfile
+\newif\if@postlogfile
+\newif\if@noisy
+\def\pssilent{
+ \@noisyfalse
+}
+\def\psnoisy{
+ \@noisytrue
+}
+\psnoisy
+%%% These are for the option list.
+%%% A specification of the form a = b maps to calling \@p@@sa{b}
+\newif\if@bbllx
+\newif\if@bblly
+\newif\if@bburx
+\newif\if@bbury
+\newif\if@height
+\newif\if@width
+\newif\if@rheight
+\newif\if@rwidth
+\newif\if@clip
+\newif\if@verbose
+\def\@p@@sclip#1{\@cliptrue}
+
+%%% GDH 7/26/87 -- changed so that it first looks in the local directory,
+%%% then in a specified global directory for the ps file.
+
+\def\@p@@sfile#1{\def\@p@sfile{null}%
+ \openin1=#1
+ \ifeof1\closein1%
+ \openin1=\figurepath#1
+ \ifeof1\typeout{Error, File #1 not found}
+ \else\closein1
+ \edef\@p@sfile{\figurepath#1}%
+ \fi%
+ \else\closein1%
+ \def\@p@sfile{#1}%
+ \fi}
+\def\@p@@sfigure#1{\def\@p@sfile{null}%
+ \openin1=#1
+ \ifeof1\closein1%
+ \openin1=\figurepath#1
+ \ifeof1\typeout{Error, File #1 not found}
+ \else\closein1
+ \def\@p@sfile{\figurepath#1}%
+ \fi%
+ \else\closein1%
+ \def\@p@sfile{#1}%
+ \fi}
+
+\def\@p@@sbbllx#1{
+ %\typeout{bbllx is #1}
+ \@bbllxtrue
+ \dimen100=#1
+ \edef\@p@sbbllx{\number\dimen100}
+}
+\def\@p@@sbblly#1{
+ %\typeout{bblly is #1}
+ \@bbllytrue
+ \dimen100=#1
+ \edef\@p@sbblly{\number\dimen100}
+}
+\def\@p@@sbburx#1{
+ %\typeout{bburx is #1}
+ \@bburxtrue
+ \dimen100=#1
+ \edef\@p@sbburx{\number\dimen100}
+}
+\def\@p@@sbbury#1{
+ %\typeout{bbury is #1}
+ \@bburytrue
+ \dimen100=#1
+ \edef\@p@sbbury{\number\dimen100}
+}
+\def\@p@@sheight#1{
+ \@heighttrue
+ \dimen100=#1
+ \edef\@p@sheight{\number\dimen100}
+ %\typeout{Height is \@p@sheight}
+}
+\def\@p@@swidth#1{
+ %\typeout{Width is #1}
+ \@widthtrue
+ \dimen100=#1
+ \edef\@p@swidth{\number\dimen100}
+}
+\def\@p@@srheight#1{
+ %\typeout{Reserved height is #1}
+ \@rheighttrue
+ \dimen100=#1
+ \edef\@p@srheight{\number\dimen100}
+}
+\def\@p@@srwidth#1{
+ %\typeout{Reserved width is #1}
+ \@rwidthtrue
+ \dimen100=#1
+ \edef\@p@srwidth{\number\dimen100}
+}
+\def\@p@@ssilent#1{
+ \@verbosefalse
+}
+\def\@p@@sprolog#1{\@prologfiletrue\def\@prologfileval{#1}}
+\def\@p@@spostlog#1{\@postlogfiletrue\def\@postlogfileval{#1}}
+\def\@cs@name#1{\csname #1\endcsname}
+\def\@setparms#1=#2,{\@cs@name{@p@@s#1}{#2}}
+%
+% initialize the defaults (size the size of the figure)
+%
+\def\ps@init@parms{
+ \@bbllxfalse \@bbllyfalse
+ \@bburxfalse \@bburyfalse
+ \@heightfalse \@widthfalse
+ \@rheightfalse \@rwidthfalse
+ \def\@p@sbbllx{}\def\@p@sbblly{}
+ \def\@p@sbburx{}\def\@p@sbbury{}
+ \def\@p@sheight{}\def\@p@swidth{}
+ \def\@p@srheight{}\def\@p@srwidth{}
+ \def\@p@sfile{}
+ \def\@p@scost{10}
+ \def\@sc{}
+ \@prologfilefalse
+ \@postlogfilefalse
+ \@clipfalse
+ \if@noisy
+ \@verbosetrue
+ \else
+ \@verbosefalse
+ \fi
+
+}
+%
+% Go through the options setting things up.
+%
+\def\parse@ps@parms#1{
+ \@psdo\@psfiga:=#1\do
+ {\expandafter\@setparms\@psfiga,}}
+%
+% Compute bb height and width
+%
+\newif\ifno@bb
+\newif\ifnot@eof
+\newread\ps@stream
+\def\bb@missing{
+ \if@verbose{
+ \typeout{psfig: searching \@p@sfile \space for bounding box}
+ }\fi
+ \openin\ps@stream=\@p@sfile
+ \no@bbtrue
+ \not@eoftrue
+ \catcode`\%=12
+ \loop
+ \read\ps@stream to \line@in
+ \global\toks200=\expandafter{\line@in}
+ \ifeof\ps@stream \not@eoffalse \fi
+ %\typeout{ looking at :: \the\toks200 }
+ \@bbtest{\toks200}
+ \if@bbmatch\not@eoffalse\expandafter\bb@cull\the\toks200\fi
+ \ifnot@eof \repeat
+ \catcode`\%=14
+}
+\catcode`\%=12
+\newif\if@bbmatch
+\def\@bbtest#1{\expandafter\@a@\the#1%%BoundingBox:\@bbtest\@a@}
+\long\def\@a@#1%%BoundingBox:#2#3\@a@{\ifx\@bbtest#2\@bbmatchfalse\else\@bbmatchtrue\fi}
+\long\def\bb@cull#1 #2 #3 #4 #5 {
+ \dimen100=#2 bp\edef\@p@sbbllx{\number\dimen100}
+ \dimen100=#3 bp\edef\@p@sbblly{\number\dimen100}
+ \dimen100=#4 bp\edef\@p@sbburx{\number\dimen100}
+ \dimen100=#5 bp\edef\@p@sbbury{\number\dimen100}
+ \no@bbfalse
+}
+\catcode`\%=14
+%
+\def\compute@bb{
+ \no@bbfalse
+ \if@bbllx \else \no@bbtrue \fi
+ \if@bblly \else \no@bbtrue \fi
+ \if@bburx \else \no@bbtrue \fi
+ \if@bbury \else \no@bbtrue \fi
+ \ifno@bb \bb@missing \fi
+ \ifno@bb \typeout{FATAL ERROR: no bb supplied or found}
+ \no-bb-error
+ \fi
+ %
+ \count203=\@p@sbburx
+ \count204=\@p@sbbury
+ \advance\count203 by -\@p@sbbllx
+ \advance\count204 by -\@p@sbblly
+ \edef\@bbw{\number\count203}
+ \edef\@bbh{\number\count204}
+ %\typeout{ bbh = \@bbh, bbw = \@bbw }
+}
+%
+% \in@hundreds performs #1 * (#2 / #3) correct to the hundreds,
+% then leaves the result in @result
+%
+\def\in@hundreds#1#2#3{\count240=#2 \count241=#3
+ \count100=\count240 % 100 is first digit #2/#3
+ \divide\count100 by \count241
+ \count101=\count100
+ \multiply\count101 by \count241
+ \advance\count240 by -\count101
+ \multiply\count240 by 10
+ \count101=\count240 %101 is second digit of #2/#3
+ \divide\count101 by \count241
+ \count102=\count101
+ \multiply\count102 by \count241
+ \advance\count240 by -\count102
+ \multiply\count240 by 10
+ \count102=\count240 % 102 is the third digit
+ \divide\count102 by \count241
+ \count200=#1\count205=0
+ \count201=\count200
+ \multiply\count201 by \count100
+ \advance\count205 by \count201
+ \count201=\count200
+ \divide\count201 by 10
+ \multiply\count201 by \count101
+ \advance\count205 by \count201
+ %
+ \count201=\count200
+ \divide\count201 by 100
+ \multiply\count201 by \count102
+ \advance\count205 by \count201
+ %
+ \edef\@result{\number\count205}
+}
+\def\compute@wfromh{
+ % computing : width = height * (bbw / bbh)
+ \in@hundreds{\@p@sheight}{\@bbw}{\@bbh}
+ %\typeout{ \@p@sheight * \@bbw / \@bbh, = \@result }
+ \edef\@p@swidth{\@result}
+ %\typeout{w from h: width is \@p@swidth}
+}
+\def\compute@hfromw{
+ % computing : height = width * (bbh / bbw)
+ \in@hundreds{\@p@swidth}{\@bbh}{\@bbw}
+ %\typeout{ \@p@swidth * \@bbh / \@bbw = \@result }
+ \edef\@p@sheight{\@result}
+ %\typeout{h from w : height is \@p@sheight}
+}
+\def\compute@handw{
+ \if@height
+ \if@width
+ \else
+ \compute@wfromh
+ \fi
+ \else
+ \if@width
+ \compute@hfromw
+ \else
+ \edef\@p@sheight{\@bbh}
+ \edef\@p@swidth{\@bbw}
+ \fi
+ \fi
+}
+\def\compute@resv{
+ \if@rheight \else \edef\@p@srheight{\@p@sheight} \fi
+ \if@rwidth \else \edef\@p@srwidth{\@p@swidth} \fi
+}
+%
+% Compute any missing values
+\def\compute@sizes{
+ \compute@bb
+ \compute@handw
+ \compute@resv
+}
+%
+% \psfig
+% usage : \psfig{file=, height=, width=, bbllx=, bblly=, bburx=, bbury=,
+% rheight=, rwidth=, clip=}
+%
+% "clip=" is a switch and takes no value, but the `=' must be present.
+\def\psfig#1{\vbox {
+ % do a zero width hard space so that a single
+ % \psfig in a centering enviornment will behave nicely
+ %{\setbox0=\hbox{\ }\ \hskip-\wd0}
+ %
+ \ps@init@parms
+ \parse@ps@parms{#1}
+ \compute@sizes
+ %
+ \ifnum\@p@scost<\@psdraft{
+ \if@verbose{
+ \typeout{psfig: including \@p@sfile \space }
+ }\fi
+ %
+ \special{ pstext="\@p@swidth \space
+ \@p@sheight \space
+ \@p@sbbllx \space \@p@sbblly \space
+ \@p@sbburx \space
+ \@p@sbbury \space startTexFig" \space}
+ \if@clip{
+ \if@verbose{
+ \typeout{(clip)}
+ }\fi
+ \special{ pstext="doclip \space"}
+ }\fi
+ \if@prologfile
+ \special{psfile=\@prologfileval \space } \fi
+ \special{psfile=\@p@sfile \space }
+ \if@postlogfile
+ \special{psfile=\@postlogfileval \space } \fi
+ \special{pstext=endTexFig \space }
+ % Create the vbox to reserve the space for the figure
+ \vbox to \@p@srheight true sp{
+ \hbox to \@p@srwidth true sp{
+ \hss
+ }
+ \vss
+ }
+ }\else{
+ % draft figure, just reserve the space and print the
+ % path name.
+ \vbox to \@p@srheight true sp{
+ \vss
+ \hbox to \@p@srwidth true sp{
+ \hss
+ \if@verbose{
+ \@p@sfile
+ }\fi
+ \hss
+ }
+ \vss
+ }
+ }\fi
+}}
+\def\psglobal{\typeout{psfig: PSGLOBAL is OBSOLETE; use psprint -m instead}}
+\catcode`\@=12\relax
+