summaryrefslogtreecommitdiff
path: root/web/funnelAC/hackman
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 /web/funnelAC/hackman
Initial commit
Diffstat (limited to 'web/funnelAC/hackman')
-rw-r--r--web/funnelAC/hackman/h_ch0.tex180
-rw-r--r--web/funnelAC/hackman/h_ch1.tex1107
-rw-r--r--web/funnelAC/hackman/h_ch2.tex443
-rw-r--r--web/funnelAC/hackman/h_ch3.tex549
-rw-r--r--web/funnelAC/hackman/h_ch4.tex401
-rw-r--r--web/funnelAC/hackman/h_cha.tex441
-rw-r--r--web/funnelAC/hackman/h_manual.aux80
-rw-r--r--web/funnelAC/hackman/h_manual.dvibin0 -> 181544 bytes
-rw-r--r--web/funnelAC/hackman/h_manual.idx326
-rw-r--r--web/funnelAC/hackman/h_manual.log213
-rw-r--r--web/funnelAC/hackman/h_manual.ps5210
-rw-r--r--web/funnelAC/hackman/h_manual.sin326
-rw-r--r--web/funnelAC/hackman/h_manual.tex283
-rw-r--r--web/funnelAC/hackman/h_manual.toc62
14 files changed, 9621 insertions, 0 deletions
diff --git a/web/funnelAC/hackman/h_ch0.tex b/web/funnelAC/hackman/h_ch0.tex
new file mode 100644
index 0000000000..597479506e
--- /dev/null
+++ b/web/funnelAC/hackman/h_ch0.tex
@@ -0,0 +1,180 @@
+%==============================================================================%
+% Start of Ch0.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\vbox{\relax}
+\vfill
+
+\hrule
+
+\medskip
+
+Copyright \copyright{} 1992 Ross~N.~Williams.
+\xn{Ross}{Williams}\xx{copyright}{notice}
+
+Permission is granted to make and distribute verbatim copies of this manual
+provided that the copyright notice and this permission notice are preserved
+on all copies.\note{This paragraph was copied from the GNU Emacs manual to
+avoid my having to get a legal opinion on something I could cook up.}
+
+\medskip
+
+\hrule
+
+\newpage
+
+%==============================================================================
+
+\tableofcontents
+
+\newpage
+
+%==============================================================================
+
+%I am not using LaTeX's figures and tables numbering so these are commented out.
+%\pseudochapter{List of Figures}
+%\pseudochapter{List of Tables}
+
+%==============================================================================
+
+% No forward.
+%\pseudochapter{Foreword}
+%\x{foreword}
+
+%==============================================================================
+
+\pseudochapter{Preface}
+\x{preface}
+
+This manual is for hackers! Anyone who wants to
+bash,
+diddle,
+frob,
+grind,
+mangle,
+patch,
+poke,
+toggle,
+twiddle,
+zap,
+or generally hack FunnelWeb should at least take a look at this manual.
+
+This document has been created to serve two purposes:
+
+\begin{enumerate}
+
+\item To act as a repository for specific design and implementation
+information not appropriate to be included in program comments.
+
+\item To guide those interested in modifying the program.
+
+\end{enumerate}
+
+As a result, this document has grown in fits and starts.
+This manual is not a particularly polished or well-balanced document
+but it should be of assistance to those (including myself) involved with
+modifying FunnelWeb.
+
+\bigskip
+
+\leftline{\b{Ross~N.~Williams}}
+\leftline{\b{Adelaide, Australia}}
+\leftline{\b{May~1992}}
+
+%==============================================================================
+
+\pseudochapter{Acknowledgements}
+\x{acknowledgements}
+
+Many thanks to \b{David Hulse}\xn{David}{Hulse}
+(\p{dave@cs.adelaide.edu.au}) for
+translating the original version of FunnelWeb
+(FunnelWeb~V1) from Ada\x{Ada} into~C
+and getting it to work on Unix and a PC.
+The C code written by David (FunnelWeb~V2) formed
+the basis of FunnelWeb~V3, but was
+entirely rewritten during the intensive refinement and feature-injection
+period leading up to this release (FunnelWeb~V3 is about three times
+the size of FunnelWeb~V2).
+Nevertheless, without this important first translation step,
+I would probably not have found the motivation to develop FunnelWeb to its
+present state.
+
+Thanks go to \b{Simon Hackett}\xn{Simon}{Hackett}
+(\p{simon@internode.com.au}) of Internode Systems
+Pty Ltd for the use of his Sun, Mac, and PC, for assistance in porting
+FunnelWeb to the Sun and PC, and for helpful discussions.
+
+Thanks go to \b{Jeremy Begg}\xn{Jeremy}{Begg}
+(\p{jeremy@vsm.com.au}) of VSM Software Services
+for the use of his VAX, and for assistance with the VMS-specific code.
+
+Thanks to \b{Barry Dwyer}\xn{Barry}{Dwyer} (\p{dwyer@cs.adelaide.edu.au})
+and \b{Roger Brissenden}\xn{Roger}{Brissenden} (\p{rjb@koala.harvard.edu})
+for trying out FunnelWeb Version~1 in 1987 and providing valuable feedback.
+
+Thanks to Donald Knuth\xn{Donald}{Knuth}
+for establishing the idea of literate programming in the first place.
+
+\bigskip
+
+\leftline{\b{Ross~N.~Williams}}
+\leftline{\b{Adelaide, Australia}}
+\leftline{\b{May~1992}}
+
+%==============================================================================
+
+\pseudochapter{Presentation Notes}
+\x{presentation notes}
+
+\thing{References:} All references are set in bold and are
+cited in square brackets in the form
+\b{[}$<$\i{firstauthor}$><$\i{year}$>$\b{]}.
+All references cited in the text appear in the reference list and the index.
+
+\thing{Special terms:} New or important terminology has been set in bold
+face and appears in the index.
+
+\thing{Typesetting:} This\x{typesetting}
+document was prepared by the author using Andrew
+Trevorrow's\xn{Andrew}{Trevorrow} (\p{akt150@cscgpo.anu.edu.au})\checked{}
+implementation (OzTeX\x{OzTeX}) of the
+\TeX{}/\LaTeX{}\paper{Knuth84}\paper{Lamport86}\x{TeX}\x{LaTeX}
+typesetting system running on a Macintosh-SE.\x{Macintosh}
+
+\thing{Graphics:} All diagrams have been constructed out of text using
+the \LaTeX{}\x{LaTeX} \p{verbatim} environment so as to allow this document to
+be disseminated electronically and printed using \LaTeX{} without access
+to the author's drawing tools.
+
+% I think I've got rid of all the fix-it-up footnotes.
+%\thing{Correction footnotes:} Footnotes\x{footnotes}
+%commencing with dots ($\bullet$) are
+%notes to remind the author about something in the document that must be
+%attended to.\fix{This is an example of such a footnote.} These footnotes
+%will be attended to and eliminated in later versions.
+
+\thing{Known typesetting problems:} While every attempt has been made
+to give a good presentation within the
+time available, some shortcuts have had to be taken. In particular, the author
+has
+been unable to work out how to get \LaTeX{} to suppress blank pages at the
+start of chapters.
+
+%==============================================================================
+
+% No abstract.
+%\pseudochapter{Abstract}
+%\x{abstract}
+
+%==============================================================================%
+% End of Ch0.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_ch1.tex b/web/funnelAC/hackman/h_ch1.tex
new file mode 100644
index 0000000000..75b59696f8
--- /dev/null
+++ b/web/funnelAC/hackman/h_ch1.tex
@@ -0,0 +1,1107 @@
+%==============================================================================%
+% Start of Ch1.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Design}
+\label{chapdesign}\xx{FunnelWeb}{design}
+
+This chapter contains notes on the design of FunnelWeb. These notes were
+not created \dq{from scratch}, as the original
+version of FunnelWeb (\newterm{FunnelWeb V1}) was designed
+and constructed in a hurry late in 1986, and no design notes were ever
+recorded.
+These notes are in fact the result of a complete review of the
+FunnelWeb design that took place in late 1991 as part
+of the process of upgrading it for public release.
+
+Throughout the design process I tried to stick to the principles of
+simplicity and clarity. As a rule, it was considered more important
+that a feature be simple and not allow the user to outsmart himself than it
+was for the feature to be particularly crisp. For example, the FunnelWeb
+macro calling syntax is not as crisp as the C syntax, but is
+more visible.
+
+To some extent the design review was influenced by the requirements of
+backward compatibility.\xx{backwards}{compatibility}
+During the review it was hard not to think about
+all the source files in FunnelWeb~V1 format that I have written over the
+years that would have to be
+converted were I to significantly deviate from the old input language.
+Luckily it turned out that there was little clash between these
+interests, and the resulting design is both clean and does not require
+much conversion of old source files.
+The main revision is in the document structuring facility.
+FunnelWeb~V1 had just two levels of heading indicated by \p{@*@*}
+(for major headings) and
+\p{@*} (for minor headings). This scheme (which was copied from Knuth's
+Web) has been replaced by a hierarchical scheme of five heading levels
+levels (\p{@A}$\ldots$\p{@E}).
+
+This chapter is rather unstructured, acting as it has, mainly as a
+dumping ground for random ideas about FunnelWeb.
+
+\section{Motivation for FunnelWeb}
+\xx{FunnelWeb}{motivation}
+
+During 1986, I was exposed to Donald Knuth's\xn{Donald}{Knuth}
+\p{WEB} literate
+programming system in the
+form of Jon Bentley's\xn{Jon}{Bentley}
+\i{Programming Pearls}\x{programming pearls}
+column in \i{Communications\x{Communications of the ACM} of
+the ACM}\/\paper{Bentley86}.\footnote{As it happens, this was somewhat of a
+lucky encounter. I had only just joined the ACM and
+the May 1986 issue of CACM in which the column appeared was the first
+issue I received.} This prompted me to obtain a copy of the
+report on the Web system\paper{Knuth83}
+and to try out the program which had been installed on the local Vaxen.
+
+Web was the best system that I had seen for producing printed and
+online, inline documentation. To me
+the most extraordinary aspect of the system was
+its success despite the fact that it had been built into the horribly antiquated
+file/batch processing systems that we all know and love (and use). I had
+imagined sophisticated documentation systems before this time, but had always
+assumed that they would be parts of complex programming environments.
+Knuth showed that, to some extent, it can be done using 1960s
+software technology (excluding the 1980s typesetting technology).
+This was exciting.
+
+The Web system was enticing and promising but to me suffered from many
+drawbacks, many of which Knuth had promoted as advantages. The following highly
+subjective list of disadvantages formed a springboard for the construction of
+FunnelWeb.
+
+\begin{itemize}
+
+\item Web can only process Pascal\x{Pascal} programs.
+
+\item Web can produce only one output file. In many instances it is
+desirable to generate more than one output file. For example, when programming
+in Ada, it is desirable to write a package specification and a package body
+together in the same file.\xx{number}{output files}
+
+\item Web enforces Knuth's individual style of indentation. Web supplies
+commands to over-ride the automatic indentation but it is an uphill battle and
+the code becomes clogged up with format directives.\x{indentation}
+
+\item Web does not cater for non-standard Pascal programs. In particular, all
+identifiers are truncated to about eight characters.
+
+\item Web formats the program output file into a form that is unreadable to
+humans.
+
+\item Web does not provide an include facility.
+This was considered a feature essential for supporting macro libraries.
+
+\item Web provides macros with at most one parameter. Knuth
+describes a hack that can
+extract a multiple parameter macro facility from a single parameter one,
+but it is hardly satisfactory.
+
+\item Web does not provide conditionals.
+
+\end{itemize}
+
+Most of these objections boiled down to two points:
+that Web is far too
+specialized, and that Knuth's \dq{Occam's Razor}\x{Occam's razor}
+had cut too far.
+What I wanted was
+a documentation system that employed all the same principles as Web
+but was far
+more general. The result was FunnelWeb~V1, which can
+process programs in any
+language or any combination of languages at the cost of typesetting the text in
+\p{tt font}.
+
+Originally, it was intended that FunnelWeb would be typesetter independent as
+well as language independent. It was intended that a format file consisting of a
+set of productions describing how the document file was to be formatted would be
+handed to FunnelWeb along with the input file. In the end, time pressures forced
+me to take the back door and hack up a \TeX{} document file generator. This
+compromise has found its way into FunnelWeb~V3.0 which is still reliant
+on \TeX{}, although V3.0 at least encourages input files to be typesetter
+independent. It is hoped that future versions of FunnelWeb will include
+more sophisticated typesetting facilities.
+
+\section{Indentation}
+\x{indentation}\xx{indentation}{no}%
+\xx{indentation}{blank}\xx{indentation}{text}
+
+A macro call that does not appear at the left margin is called an
+\newterm{indented macro call} and seems to lead to three different
+alternatives for its expansion: \newterm{no indentation}, \newterm{blank
+indentation}, and \newterm{text indentation}. Here are examples of each kind
+of indentation. First the example problem.
+
+\begin{verbatim}
+@$@<Sloth@>==@{@-
+Aardvark
+Walrus@}
+
+@O@<Output@>==@{@-
+Zebra@<Sloth@>
+Giraffe
+@}
+\end{verbatim}
+
+There are three ways that the second line of the \p{Sloth} macro
+can be indented.
+
+\thing{No indentation:}
+\begin{verbatim}
+ ZebraAardvark
+ Walrus
+ Giraffe
+\end{verbatim}
+
+\thing{Blank indentation:}
+\begin{verbatim}
+ ZebraAardvark
+ Walrus
+ Giraffe
+\end{verbatim}
+
+\thing{Text indentation:}
+\begin{verbatim}
+ ZebraAardvark
+ ZebraWalrus
+ Giraffe
+\end{verbatim}
+
+No indentation is useful where the user wishes to deal with the output
+stream as a pure output stream. Blank indentation is useful when the user
+wishes to generate indented computer programs.
+Text indentation is useful where the user wishes to prefix each line of an
+entire macro invocation with a string. This can be useful for
+commenting out code (\eg{}in Ada using \p{--}), and for prepending things
+like a dollar sign at the start of each line an a VAX VMS DCL script
+command file.\x{DCL}
+
+FunnelWeb~V1 provided a choice of no indentation or blank indentation.
+The choice was made in the command line and could not be overridden.
+
+The design questions are as follows:
+
+\begin{enumerate}
+\item Which of the three kinds of indentation should FunnelWeb support?
+\item What should be the granularity of swapping between indentation modes?
+\item Are particular indentation modes dangerous?
+\item Is the presence of particular combinations of indentation modes
+ confusing to the user?
+\item How and when should the choice of indentation be specified?
+\end{enumerate}
+
+All sorts of schemes were considered, including a finely grained system in
+which the user could specify at the point of call which indentation mode
+should be used for the called macro expansion.
+
+After a lot of thought, the dominant factor that should affect the design
+was decided to be the \i{clarity} in the user's mind of the indentation facility
+and the \i{danger} associated with misunderstanding it. Here are two
+examples that show how easily a confusion or
+misunderstanding of the indenting being used can cause danger.
+The first example shows how blank or no indentation might be
+misused.
+
+\begin{verbatim}
+--Misuse of blank (and no) indentation.
+--@<Sloth@>
+\end{verbatim}
+
+Here the user has assumed that text indentation is in action and has
+placed an Ada comment symbol \dqp{--} before the invocation of the macro
+\p{@<Sloth@>} in the hope that the entire text of the macro would be prefixed by
+\dqp{--}. The result could be passed by the compiler which would activate all
+but the first statement in the expansion of macro \p{@<Sloth@>}.
+
+The next example demonstrates how text indentation could be
+misused.\xx{indentation}{dangers}
+
+\begin{verbatim}
+--Misuse of text indentation:
+a++; @<Sloth@>
+\end{verbatim}
+
+Here the user has placed the call to \p{@<Sloth@>} after the incrementing of
+variable
+\p{a}. The result is that there is a good chance that the \dqp{a++;}
+prepended to
+each line of the expansion of \p{@<Sloth@>} will be passed by the compiler and
+will cause \p{a} to be overincremented.
+
+These examples are not to be laughed at. It is possible that FunnelWeb will
+be used widely, and the problems above may cause problems in critical systems.
+The examples above are particularly scary because they are reflexive. One cannot
+simply pin the blame on one particular indentation form. A little thought
+reveals that the greatest danger lies in \i{confusion} in the user's mind.
+If the
+user is confused between text or blank indenting, problems will arise.
+
+There seem to be two ways to solve the problem. The first is to ban all
+macro calls that are preceded by non-blank text. This is not a good option
+because there are so many cases where it is desirable to expand more than one
+single line macros on the same line. A second option is to eliminate one of
+the two forms so as to reduce the potential for ambiguity in the user's
+mind. I choose the latter option. Of the two forms, the clear choice for
+elimination is text indenting for the following reasons:
+
+\begin{enumerate}
+\item It actually introduces extra text which gives it an a priori
+ potential for problems.
+\item It is harder to implement and would slow down Tangle.
+\item It would not be compatible with FunnelWeb~V1 which uses blank
+ indentation.
+\end{enumerate}
+
+The only other decision is the level of granularity of choice between the
+remaining options: no indentation and blank indentation. FunnelWeb~V1
+allowed this choice to be made in the command line. In retrospect, this
+was bad design because the user might unwittingly code certain macro calls
+relying on one or the other mode. A better system is to allow the user
+to specify which mode in the input file itself. This has been done in
+FunnelWeb~V3.
+
+Again, to avoid confusion, it seems sensible to allow the user only
+one indentation mode per FunnelWeb input file. In most cases, the user
+will be happy with blank indentation (the default) and there will be
+no need for change anyway.
+
+\thing{Decision:} Implement only \dq{no indentation} and \dq{blank indentation}.
+Make the
+choice of indentation a static attribute of a particular FunnelWeb run
+that is specified in the input file. This solution is the same as FunnelWeb~V1
+except that the choice has been moved from the command line to the
+input file.
+
+\section{Review of FunnelWeb Syntax}
+\xx{FunnelWeb}{syntax}
+
+One of the distressing aspects of FunnelWeb~V1 was its clumsy macro
+definition and calling syntax.
+Compared to (say) the C preprocessor, FunnelWeb's macro call syntax is
+like a freight train in a china show.
+During the FunnelWeb redesign, a complete review of this syntax took place to
+try to neaten it up. Surprisingly, the V1 syntax survived unscathed
+with the exception that \dqp{==}\x{==} in macro definitions was made optional.
+The survival of this clumsy syntax was a product of the design goal of
+making everything simple, explicit, and not subject to subtle errors.
+
+\subsection{Review of Macro Definition Syntax}
+\xx{macro definition}{syntax}
+
+FunnelWeb~V1 used a macro definition syntax that resulted in macro
+definitions such as the following.
+
+\begin{verbatim}
+@$@<Put out the cat@>==@{@-
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+This is messy, but I couldn't think of anything better at the time.
+The \p{@\$} is necessary to cue a definition. Without it, the definition
+might somehow be mistaken for an invocation.
+The \p{@<} and \p{@>} delimit the name.
+The \p{@$\{$} and \p{@$\}$} delimit the text.
+The \p{@-} is a product of the rule
+\dq{exactly the text between the \p{@$\{$} and \p{@$\}$}}.
+
+The only real target is the \dqp{+=} and \dqp{==} which really break all
+the rules
+and should be changed. Unfortunately I couldn't
+think of anything to change them
+to. If there was no \p{+=} mechanism, we could use:
+
+\begin{verbatim}
+@$@<Put out the cat@>@{
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+In fact, eliminating \p{+=} is thinkable because it does not appear in
+many of my existing FunnelWeb source files. This indicates at least that
+it was not needed much by myself.
+
+A minimalist construct could be
+
+\begin{verbatim}
+@<Put out the cat@>
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+but this is too dangerous for my tastes.
+
+\thing{Decision:} For compatibility reasons,
+retain the old \p{+=} and \p{==} constructs, but make them optional.
+The new syntax for defining macros is:
+
+\begin{verbatim}
+@$@<Put out the cat@>@{
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+Next we turn to parameterized macro
+definitions.\xx{parameterized macro definitions}{syntax}
+A conventional FunnelWeb parameterized macro definition looks like this:
+
+\begin{verbatim}
+@$@<Put out the cat@>@(@3@)==@{@-
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+which is a bit messy. The natural alternative is even worse:
+
+\begin{verbatim}
+@$@<Put out the cat@>@(@1@,@2@,@3@)==@{@-
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+Thus, just specifying the number of parameters seems sensible. However,
+perhaps the syntax could be trimmed to
+
+\begin{verbatim}
+@$@<Put out the cat@>@3==@{@-
+Open the door
+Say out
+Close the door@}
+\end{verbatim}
+
+I decided to reject this in favour of the old syntax.
+
+\thing{Decision:} Retain the old syntax of $\ldots$\p{@(@3@)}$\ldots$
+
+\subsection{Review of Macro Call Syntax}
+\xx{macro call}{syntax}
+
+Here are some ideas for alternatives to the FunnelWeb~V1 macro call syntax.
+
+\begin{verbatim}
+Open the door
+@<Say Out@> @! FunnelWeb~V1 style.
+Close the door
+
+Open the door
+@<Say out>@
+Close the door
+
+Open the door
+@"Say out@"
+Close the door
+
+Open the door
+@(Say out@)
+Close the door
+
+Open the door
+@<Say out>
+Close the door
+\end{verbatim}
+
+\thing{Decision:} Continue with the old notation. It may not be neat, but at
+least it is clear and consistent. The main temptation is the format
+\p{@<say out>@}
+which looks rather good. However, it breaks the special sequence
+rational and hence is too confusing.
+
+\subsection{Review of Parameterized Macro Call Syntax}
+\xx{parameterized macro call}{syntax}
+
+FunnelWeb~V1 provided a messy parameterized macro call syntax:
+
+\begin{verbatim}
+@<Say Out@>@(@"firstparam@" @, @"Secondparam@" @, @"thirdparam@" @)
+\end{verbatim}
+
+This syntax can be cleaned up considerably by making the \p{@"} symbols
+optional. This results in calls such as the following:
+
+\begin{verbatim}
+@<Say Out@>@(firstparam@,Secondparam@,thirdparam@)
+\end{verbatim}
+
+As the first form allows the alignment of complicated parameters by
+allowing white space to be inserted outside the \p{@"}, and the second
+form is cleaner, both are retained simply by making the quotes optional.
+
+\thing{Decision:} Make the double quotes optional.
+
+\section{Document Structuring}
+\xx{document}{structure}\x{headings}\x{sections}
+
+Experience with FunnelWeb~V1, which provided only two levels of
+headings (major and minor)
+proved that there was a strong need for fully hierarchical
+multiple-level headings.
+The only question was how it should be done.
+
+Here are some ideas that were considered.
+
+\begin{verbatim}
+@*@<Main Program@>
+@**@<Read the Message@>
+@***@<Encrypt the Buffer@>
+
+@*@<Main Program@>
+@*@*@<Read the Message@>
+@*@*@*@<Encrypt the Buffer@>
+
+@s@<Main Program@>
+@ss@<Read the Message@>
+@sss@<Encrypt the Buffer@>
+
+@s@<Main Program@>
+@s@s@<Read the Message@>
+@s@s@s@<Encrypt the Buffer@>
+
+@S@<Main Program@>
+@SS@<Read the Message@>
+@SSS@<Encrypt the Buffer@>
+
+@S@<Main Program@>
+@S@S@<Read the Message@>
+@S@S@S@<Encrypt the Buffer@>
+
+@A@<Main Program@> -- The syntax finally chosen.
+@B@<Read the Message@>
+@C@<Encrypt the Buffer@>
+
+@A Main Program
+@B Read the Message
+@C Encrypt the Buffer
+
+@*A Main Program
+@*B Read the Message
+@*C Encrypt the Buffer
+
+@1@<Main Program@>
+@2@<Read the Message@>
+@3@<Encrypt the Buffer@>
+(using @A..@I@ as macro parameters or overload @1..@9)
+
+@*@1@<Main Program@>
+@*@2@<Read the Message@>
+@*@3@<Encrypt the Buffer@>
+(using @A..@I@ as macro parameters or overload @1..@9)
+\end{verbatim}
+
+Choosing between these alternatives was not easy. The following thoughts
+contributed to the decision.
+
+\begin{itemize}
+
+\item Syntaxes that require visual counting are probably not a good idea.
+
+\item Syntaxes that do not delimit the heading name somehow are likely
+to cause problems where heading names are omitted. Users will be
+tempted to start paragraphs after the start of heading symbol and the
+result is that the first line of the paragraph will be sucked into the
+heading.
+
+\item Overloading the \p{@1}, $\ldots$, \p{@9} sequences is undesirable.
+
+
+\end{itemize}
+
+\thing{Decision:} Use \p{@A}$\ldots$\p{@E} with optional following
+macro name syntax for the section name.
+Note: We stop at \p{@E} because five levels is probably sufficient, and we
+may wish later to use \p{@F} for \b{F}ile (to augment or replace \p{@O}).
+
+
+\section{Discussion of Some Miscellaneous Issues}
+\xx{miscellaneous}{issues}
+
+\thing{Comment duplication:} If\xx{comment}{duplication}
+the FunnelWeb user inserts
+comments into the target code (in the \p{.fw} file) as well as into the
+documentation (free text)
+part of the \p{.fw} file, then it is possible for the
+situation to get a bit silly. \b{Decision:} This is a problem for the
+programmer, not for FunnelWeb.
+
+\thing{Out-of-date documentation:} Sometimes\xx{out of date}{documentation}
+it is all too easy for the
+programmer to modify the code without updating the surrounding documentation.
+\b{Decision:} This is a serious and major problem. In an automated environment,
+it may be possible to create a system of dependencies between scraps of
+code and scraps of documentation. However, it is hard to see how a tool
+such as FunnelWeb could provide support for prevention of this sort of error.
+
+\thing{Meta-macro-level parameterization:} Sometimes, when using FunnelWeb,
+the facility to use one macro to construct the name of another has been
+needed. \b{Decision:} Allowing macro names
+to be constructed would lose the simple
+nature of the preprocessor and so this suggestion is rejected.
+
+\thing{Clumsy notation:} The \p{@} notation can be clumsy.
+\b{Decision:} This is necessary to maintain the simplicity of the translation.
+
+\section{Automated Regression Testing}
+\xx{regression}{testing}
+
+Automated regression testing is extremely important for two reasons:
+
+\begin{enumerate}
+
+\item It provides confidence that changes made to the program have
+not introduced bugs.
+
+\item It allows portability problems to be pinpointed when the program is
+moved to a new machine.
+
+\end{enumerate}
+
+The simplest way to set up automated regression testing is to construct
+a suite of test cases (and their solutions) and then write a
+script in the target machine's command language to run through the suite.
+Unfortunately, there is no command language that is shared among the
+machines to which FunnelWeb must be ported. These machines are at least:
+Macintosh, IBM-PC, Sun, VMS Vax.
+
+One option is simply to rewrite the script in each machine's particular
+command language. This would be a feasible option were it not for the fact
+that the Macintosh (the machine upon which FunnelWeb was developed) does
+not have a command language!
+
+After some thought, I decided that the best solution to the problem was
+to create a command language \i{within FunnelWeb}. FunnelWeb could then
+be invoked in two modes, one-shot command line or interactive/script. This
+approach had the benefit of providing total control over the command
+language and its complete portability.
+
+The result is described in the \i{FunnelWeb User's Manual}.
+
+\section{Command Line Interface}
+\xx{command line}{interface}
+
+FunnelWeb~V1 was implemented in Ada\x{Ada} and runs on a VMS VAX.\xx{vms}{vax}
+As such it
+has a full VMS DCL command line interface. Here is the \dqp{.CLD}
+file\xx{.cld}{file} for the
+DCL command line interface.
+
+\beginsmall
+\begin{verbatim}
+! FUNNELWEB Command Definition
+! ============================
+! Ross Williams. 28 April 1987.
+
+module command_table
+ define verb dummy_command
+ parameter p1 , label=input_file ,value(required,type=$file)
+ qualifier include_files, label=include_files,value(type=$file) ,default
+ qualifier output_files , label=output_files ,value(type=$file) ,default
+ qualifier delete , label=delete ,default
+ qualifier tex_file , label=tex_file ,value(type=$file) ,default
+ qualifier listing_file , label=listing_file ,value(type=$file) ,default
+ qualifier brief , label=brief,value(type=$number,default=5),default
+ qualifier screen , label=screen ,value(type=$number,default=0)
+ qualifier trace , label=trace
+ qualifier file_spec , label=file_spec
+ qualifier compare
+\end{verbatim}
+\endsmall
+
+As portability was a key goal of FunnelWeb~V3, it was obvious that the
+command line interface would have to be redesigned. The design goals for the
+new command line interface were:\xx{design goals}{command line interface}
+
+\begin{enumerate}
+
+\item The interface should not \i{depend} on case. However, it must allow
+ case-sensitive filenames to be transmitted on systems that have
+ case-sensitive filenames.
+
+\item Each option must have a symmetric positive and negative form. For
+ example, it is confusing for \p{-X} to turn on a feature and \p{-Q}
+ to turn it off.
+
+\item The interface must be extensible to allow inclusion of more features
+ at a later date.
+
+\item Options should be consistent and memorable.
+
+\end{enumerate}
+
+The result is described in the \i{FunnelWeb User's Manual}.
+
+\section{File Name Management}
+\xx{file}{names}
+
+File names present a host of problems for a program like FunnelWeb.
+First, FunnelWeb can generate so many different kinds of files that
+conventions must be adopted to prevent them from becoming unmanageable.
+Second, the constraints on file names, and even the structure of file
+names themselves varies considerably from machine to machine. These two
+problems have combined to result in the sophisticated and
+rather complicated way in which FunnelWeb~V3 handles filenames.
+
+To summarize, the three problems are:
+
+\begin{enumerate}
+\item What filename extensions should be chosen for various kinds of file?
+\item What filename inheritance should take place?
+\item How should FunnelWeb cope with the variations in filename structure
+between machines?
+\end{enumerate}
+
+The following three sections address these questions.
+
+\subsection{Filename Extensions}
+\xx{filename}{extensions}
+
+FunnelWeb is capable of reading and writing a variety of different kinds
+of files. In particular, FunnelWeb must often operates in an environment where
+the same information is stored in many forms (\eg{}prog.fw, prog.c, proc.exe).
+File extensions are an essential tool in managing this situation.
+The filename extensions chosen for FunnelWeb are:
+
+\begin{verbatim}
+FunnelWeb : .fw
+Product : None.
+Documentation : .tex
+Listing : .lis
+Journal : .jrn
+\end{verbatim}
+
+Lowercase will be used in systems that are case sensitive.
+
+Readers who are wondering how FunnelWeb copes in environments such as UNIX
+where there are no file extensions should refer to
+Section~\ref{portablefilenames}.
+
+\subsection{Filename Inheritance}
+\xx{filename}{inheritance}
+
+Inheritance in filenames refers to how input and output files inherit parts
+of their name from other filenames and their environment. For example if
+the command
+
+\begin{verbatim}
+ fw sloth +J +L +T
+\end{verbatim}
+
+was issued,
+you would expect to see output files \p{sloth.jrn}, \p{sloth.lis}, and
+\p{sloth.tex}.
+The output file names have inherited the \dqp{sloth}. The following table
+gives the hierarchy devised for FunnelWeb.
+
+\begin{center}
+\begin{tabular}{|l|l|l|l|l|l|l|l|} \hline
+ & Script & Input & Include & Journal & List & Document & Product \\ \hline
+1 & & & \p{@i} & & & & \p{@o} \\
+2 & \p{+x} & \p{+f} & \p{+i} & \p{+j} & \p{+l} & \p{+t} & \p{+o} \\
+3 & \dqp{.fws} & \dqp{.fw} & \dqp{.fwi} & \dqp{.jrn} & \dqp{.lis} & \dqp{.tex} & \\
+4 & & & \p{+f} & \p{+f} & \p{+f} & \p{+f} & \\
+5 & DefDir & Defdir & Defdir & Defdir & Defdir & Defdir & Defdir \\ \hline
+\end{tabular}
+\end{center}
+
+The following notes explain the table.
+
+\begin{enumerate}
+
+\item This scheme is similar to that used in FunnelWeb~V1.
+
+\item The journal, list, and documentation
+files all fall in the same pattern and
+can be considered as a single case.
+
+\item Level~1 has the highest priority because it is a direct specification
+by the user in the input file.
+
+\item Level~2 comes next because this is also a direct specification
+from the user on the command line.
+
+\item Level~3 provides the default file extensions.
+Product files do not inherit an
+extension as they could be of any type.
+
+\item Level~5 is built into most operating systems' file specification systems.
+If I specify file \dqp{x.y}, it is taken to mean on the default disk in the
+default directory.
+
+\item Level~4 looks straightforward, but secretly conceals a difficult design
+decision. By the time we get down to this level of inheritance, we know for
+sure that the filename has already picked up a file extension. So all that
+is left to inherit is the path and the filename proper. Obviously we
+have to inherit the filename proper (e.g. \p{sloth} in \p{sloth.tex}), but
+should we inherit the input file path? If we do inherit the input file
+path, files will be placed in the same directory as the input file. If we
+don't inherit the input file path, files will be placed in the current
+directory. The choice I have made is to send all the logging type files
+into the same directory as the input file. This means, for example,
+that \p{sloth.lis} and \p{sloth.tex} will generally land in the same directory
+as \p{sloth.fw}. However, I have decided that output files should be sent to
+the default directory (if not earlier specified) as this is where the
+action is. In normal use, the main product of FunnelWeb will be product files
+and so the user will expect them to appear in the current directory by
+default.
+
+\end{enumerate}
+
+\subsection{Portable Structure of File Names}
+\label{portablefilenames}\xx{file}{names}\xx{portable}{filenames}
+
+Another problem with file names is the variation of their structure
+between environments. Here are examples of some of the formats that prevail:
+
+\begin{verbatim}
+ UNIX /device/dir1/dir2/name
+ VMS node::device:[dir1.dir2]name.ext;vn
+ MSDOS device:\dir1\dir2\name.ext
+ MAC device:dir1:dir2:name
+\end{verbatim}
+
+Isn't it amazing that none of these popular systems use the same format?
+
+The solution to dealing with these different formats is to classify them
+as non-portable and hide the functions that manipulate them
+in the machine-specific module of FunnelWeb.
+Luckily there are not many such functions.
+
+The main problem is coping with
+file systems that do not
+explicitly support file extensions.
+With so many possible input and output files, FunnelWeb all but
+needs such extensions. Machines that do not support them pose difficult
+design decisions.
+If the user specifies \dqp{sloth} as an input file on such
+a non-extension-supporting system,
+should FunnelWeb look for \p{sloth}
+or \p{sloth.fw}? If the user specifies \p{walrus} as a listing file, should
+it generate \p{walrus} or \p{walrus.lis}?
+
+Some possible solutions are:
+
+\begin{enumerate}
+
+\item Regard the filename \p{sloth} as having an empty extension. It will then
+default to \p{sloth.fw}.
+
+\item Regard the filename \p{sloth} as having a blank but full extension.
+That is, it cannot be overwritten by inheritance, but it remains blank.
+
+\item Provide an extra syntactic mechanism to allow the user to specify one or
+other of the two options above.
+
+\end{enumerate}
+
+My solution was to choose the first option. Use of FunnelWeb
+results in lots of files lying around (\eg{}\p{sloth.lis}) and it is hard
+to see how
+the user will cope with them all
+without some kind of naming discipline. If a naming discipline
+has to be used, it might as well be the FunnelWeb one.
+
+Thus the names of all files read and written by FunnelWeb will have a file
+extension of from zero to three letters separated from the rest of the filename
+by a \dqp{.}.
+
+The only exception is product files whose extension is left
+undefined. Product files need not
+contain a \dqp{.} and a file extension,
+although they can inherit one if the user wishes.
+
+\section{Specifying Constraints on the Number of Instantiations}
+\xx{invocations}{number}
+
+Experience with FunnelWeb~V1 demonstrated
+the need to be able to specify in
+macro definitions how many times it was expected that the macro would
+be used. FunnelWeb~V1 generates an error if a macro is not used, but
+permits macros to be called more than once. This caused problems for macro
+libraries, which would be included, but whose macros were often not called.
+
+By default, FunnelWeb~V3 requires that each macro (except for the ones
+attached to output files) be called exactly once.
+However, it also provides
+syntax that allows the user to specify that a macro be allowed
+to be called zero times or many times.
+This allows a macro to be specified with the following permissible ranges
+of numbers of calls depending on the presence or absence of \dqp{@Z} and
+\dqp{@M}:
+
+\begin{verbatim}
+ 0..1 @$@<Sloth@>@Z==...
+ 1 @$@<Sloth@>==...
+ 1..n @$@<Sloth@>@M==...
+ 0.....n @$@<Sloth@>@Z@M==...
+\end{verbatim}
+
+The only two problems with this scheme are:
+
+\begin{enumerate}
+
+\item It is incompatible with
+FunnelWeb~V1 files, as the default in FunnelWeb~V1 is $1 \ldots n$
+whereas the default in new FunnelWeb is $1$. This is not a big problem because
+most macros in the old files were used exactly once. Only a few macros will
+have to be changed.
+
+\item What should the syntax be? (above is a sneak preview only!)
+
+\end{enumerate}
+
+The initial proposal for syntax was to allow the user to insert zero, one,
+or both of \p{@?} and \p{@M} just after the \p{@\$} of a macro definition.
+However, this has the following drawbacks:
+
+\begin{enumerate}
+
+\item It uses two sequences that are desirable to reserve
+ (\p{@?} for conditionals and \p{@M} for macro).
+
+\item It stops the user from searching for the string \p{@\$@<name} to find
+ the definition of a macro.
+
+\end{enumerate}
+
+These are significant problems.
+Here are some alternative
+ideas for where to position the modifiers in the macro definition:
+
+\begin{verbatim}
+@?@M@$@<Slothy dogs@>@(@5@)==@{@-
+This is a short macro.
+With only a line or two@}
+
+@$@<Slothy dogs@>@?@M@(@5@)==@{@-
+This is a short macro.
+With only a line or two@}
+
+@$@<Slothy dogs@>@(@5@)@?@M==@{@-
+This is a short macro.
+With only a line or two@
+\end{verbatim}
+
+The first form puts me off because I think that it is a good visual rule
+to start all the macros with \p{@\$}. The second form puts me off because it
+detaches the macro name from the parameter list, thus making it look
+less like a call, which is desirable syntactic resonance. The third form
+is messy but probably workable. Because we are right next to the tested
+constant string (either \p{==} or \p{+=}) we could augment it further. For
+example, \p{01==} could allow a macro to be called from 0 to 1 times.
+The main problem with this is that we are trying to phase out \p{==} anyway!
+
+Nevertheless, all the logic points to after the parameter list as the best
+place to locate this information.
+
+After some thought, it was decided that the \dqp{@?} sequence be reserved
+for a possible future conditional facility, and so \p{@Z} was used
+instead.
+
+\thing{Decision:} The position is after the parameter list. The notation
+is \p{@Z} for zero, and \p{@M} for many.\x{@Z}\x{@M}
+
+Example of final syntax:
+
+\begin{verbatim}
+@$@<Slothy dogs@>@(@5@)@Z@M+=@{@-
+This is a short macro.
+With only a line or two@}
+\end{verbatim}
+
+\section{The Relationship Between Document Structure and Macro Structure}
+\xx{document structure}{macro structure}%
+\xx{document}{structure}\xx{macro}{structure}\note{01-Dec-1991}%
+\xx{hierarchical}{structure}
+
+Having already decided upon a fully hierarchical document
+structure, I determined to refine the details.
+The issues to be addressed were as follows:
+
+\begin{itemize}
+
+\item How should the hierarchical structure connect to the macro structure?
+\item How can backwards compatibility be achieved? Should it?
+\item Should the macros be cross referenced by section or by definition?
+\item Should nameless sections inherit macro names as headings?
+\item Should we simply use \TeX{} macros to structure the document?
+
+\end{itemize}
+
+After some thought, I arrived at the following thoughts:
+
+\thing{Basically a \TeX{} file:} One option is simply
+to treat each \p{.fw} file as a \TeX{}\x{TeX} file
+laced with macros. That is, a \p{.fw} file could be
+structured as a real \TeX{} file from which FunnelWeb could
+extract macro definitions. This approach is feasible because
+\TeX{} could be programmed to
+respond to the \p{@} sequences in the same way that
+FunnelWeb responds to them. Thus, there would be no need for Weave.
+
+I rejected this approach, first because it is too typesetter-dependent,
+and second because it complicates the inclusion of any sort of
+complicated post-processing in the documentation file. This would have to
+be implemented in \TeX{}.
+
+A better approach is
+to use an invented section notation (e.g. \p{@A @B @C}). This maintains
+FunnelWeb's typesetter independence and can easily be
+converted into \TeX{} sectioning macros by Weave.
+
+In the same spirit, it might be worth introducing a few \p{@} sequences for
+certain general typesetting operations such as italics and program code.
+
+\thing{Confusion in FunnelWeb~V1 Heading Numbering:} FunnelWeb~V1
+uses two levels of section headings, but numbers all
+the headings sequentially. In this, it is a little confused. Clearly
+with a fully hierarchical document structure, the headings cannot be
+numbered sequentially --- the numbering must reflect the structure
+(\eg{}3.2.1).
+
+\thing{Hierarchical numbering is messy for macros:} Unfortunately,
+hierarchical numbering\xx{section}{numbering} is messy
+and confusing when applied to macro names.
+In FunnelWeb~V1's typeset output, each macro
+call has appended in square brackets the number of the section in which the
+macro is defined. Use of hierarchical numbering would be somewhat messy.
+For example, a macro call might look like.
+
+\begin{verbatim}
+ Write out the output[6.7.4.3]
+\end{verbatim}
+
+Similarly, cross reference lists would be messy:
+
+\begin{verbatim}
+ This macro is used in 3.4.5, 1.2, 7.8.9, 7.4, 2.2.1.1.
+\end{verbatim}
+
+\thing{Separate numbering for macros and headings:} One
+idea is to use hierarchical numbering for the sections, but to
+number the macros sequentially. This could be a little confusing in
+documents without much structure, but would be very much less messy than
+cross referencing using hierarchical numbering.
+Also, it will be easier to find macros
+indexed by a sequential number than by section,
+which has a less direct relationship
+with page bulk and number. By macro numbering is meant the sequential
+numbering of each macro body part through the whole document.
+
+\thing{Input format matters more than output format:} At this point we
+realize that a distinction should be made between
+the \i{input format} and the \i{typeset output}.
+The critical issue here is not how the
+program should be formatted for printing, but rather the format of its
+\p{.fw} file. The typeset output can always be changed simply by fiddling
+with Weave. However, as soon as the document structuring features of FunnelWeb
+are fixed, they will be used in dozens or hundreds of documents and it will
+be very difficult indeed to change them. Therefore, the important thing is to
+provide as sensible and expressive a \p{.fw} format as possible.
+
+It is therefore a separate decision as to whether we should number macros
+by section or by sequence number. The important thing is to address the
+format and rules for the expression of structure.
+
+\thing{Naming sections:} The naming
+of sections requires some thought. In many cases (especially
+in the case of high-level sections) the writer will provide an explicit
+name for a section. In other cases, provision of such a name will merely
+duplicate the name of the macro contained within the section. It therefore
+makes sense to allow the user to omit the name from a section, with Weave
+naming the section after the first macro definition in the section. If a
+macro is unnamed and there
+is no macro in the section, an error can be generated.
+
+All these thoughts lead to the following scheme:
+
+\begin{itemize}
+\item Documents will be hierarchically structured using \p{@A}, \p{@B} etc.
+\item Each section can be given a name delimited by \p{@<@>}.
+\item Sections that do not have names inherit the name of their first macro.
+\item If a section does not have a name or a macro, it is erroneous.
+\item Sections will be numbered hierarchically either by FunnelWeb or by \TeX{}.
+\item Macro body parts will be numbered sequentially by FunnelWeb and cross
+ referenced by these numbers.
+\end{itemize}
+
+All this results in a system which:
+
+\begin{itemize}
+
+\item Provides a hierarchical document structuring capability.
+\item Is typesetter independent.
+\item Does not require duplication between heading and macro names.
+\item Separates the heading and macro systems so that Weave can be configured
+ at a later date to cross reference in different ways without requiring
+ input files to be reworked.
+\end{itemize}
+
+\section{Diagnostic Messages}
+\xx{diagnostic}{messages}
+
+In FunnelWeb, all error messages commence with an indicator indicating
+the severity of the error message. Here are some of the formats that
+I investigated before settling on the final format:
+
+\begin{verbatim}
+W--Error creating sloth.
+E--Error opening output file.
+S--I'm a teapot.
+F--Can't open output file.
+
+W-Error creating sloth.
+E-Error opening output file.
+S-I'm a teapot.
+F-Can't open output file.
+
+W:Error creating sloth.
+E:Error opening output file.
+S:I'm a teapot.
+F:Can't open output file.
+
+W: Error creating sloth. -- Format chosen.
+E: Error opening output file.
+S: I'm a teapot.
+F: Can't open output file.
+
+War-Error creating sloth.
+Err-Error opening output file.
+Sev-I'm a teapot.
+Fat-Can't open output file.
+
+W-Old fashioned feature.
+
+W-Old fashioned feature.
+
+W--Old fashioned feature.
+
+W: Old fashioned feature.
+
+W:Old fashioned feature.
+\end{verbatim}
+
+\section{Summary}
+
+This rather unstructured chapter has addressed some of the key design
+decisions of FunnelWeb. In many cases, the alternatives have been
+unpleasant, but I am confident that in all cases, a fully workable solution
+has been found.
+
+%==============================================================================%
+% Start of Ch1.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_ch2.tex b/web/funnelAC/hackman/h_ch2.tex
new file mode 100644
index 0000000000..89cdf6fc86
--- /dev/null
+++ b/web/funnelAC/hackman/h_ch2.tex
@@ -0,0 +1,443 @@
+%==============================================================================%
+% Start of Ch2.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Implementation}
+\label{chapimplementation}\xx{FunnelWeb}{implementation}
+
+\section{Introduction}
+
+This chapter contains notes on the actual C code that implements
+FunnelWeb~V3. This chapter is rather patchy. It has acted mainly as
+a dumping ground for ideas that I bothered to write about during
+development.
+
+\section{History of FunnelWeb Implementations}
+\xx{FunnelWeb}{history}\x{FunnelWeb version 1}\x{FunnelWeb version 2}%
+\x{FunnelWeb version 3}
+
+The first implementation of FunnelWeb (FunnelWeb~V1) was written in
+Ada\x{Ada}
+in December 1986. The project was initially canned as requiring too
+much time, but was resurrected when I decided to commit to
+Ada\paper{USDOD83} and
+realized that I needed a program to write to help me to learn Ada.
+FunnelWeb~V1 was, in fact, my first Ada program. It took about one
+month to write.
+
+FunnelWeb~V1 was used intensively by myself to write Ada programs
+from January~1986 to July~1989 at which time
+I finished my Ph.D.\x{Ph.D.} and lost access to
+the VAX. During this time at least twenty thousand lines of code were generated
+using FunnelWeb. Hardly anyone but myself used
+FunnelWeb.\xx{FunnelWeb}{past use}
+
+After losing access to Ada and the Vax (and hence to FunnelWeb), I was forced
+back to programming the non-literate way. From time to time I found that I
+needed to use some of my old programs that I had written using Ada and
+FunnelWeb. I knew that Ada would become available on more machines, but
+certainly FunnelWeb wouldn't. I recognised a strong need for a portable
+version of FunnelWeb written in~C but didn't have the time or energy
+to create one.
+
+About this time (late 1989), David Hulse,\xn{David}{Hulse}
+at the time a student in
+Computer Science at the University of Adelaide,\xx{University}{Adelaide}
+volunteered to translate the 4000 line Ada version of FunnelWeb into~C.
+To my knowledge this translation process took about three weeks
+(in December 1989). The result was called FunnelWeb~V2 and was
+formally signed into the public domain on 5~May 1992.
+
+In general, David Hulse did a good job. However, the resultant code
+suffered from one or few serious defects, the most serious of which was
+a lack of portability.
+
+Lack of portability of the C~code, combined with the need for a rather
+solid design review, combined with the need to
+strengthen the program to bring it up to production standard, resulted
+in my performing a complete reworking of the code. The C code was
+entirely, but incrementally, replaced or reformatted.
+The code was also strengthened and new features were added.
+This process took about two months (November and December 1991).
+A further two months (approx) were spent writing documentation, constructing
+a regression test suite, porting the program to different machines,
+and sorting out the legal issues involved in its release.
+
+I would like to take this opportunity to record a debt of gratitude to
+David Hulse who translated FunnelWeb from Ada to~C. Although my
+reworking of his C~code obliterated most of his code,
+his translation was pivotal to the development process.
+Without his effort in moving from Ada to~C, I'm not sure that I
+would have mustered the energy and time to complete the process and
+bring FunnelWeb up to its current standard.
+
+\section{Why FunnelWeb Wasn't Used to Write Itself}
+\xx{FunnelWeb}{writing itself}
+
+After Knuth created the Web literate preprocessing system, he
+re-wrote it using Web and distributed the source code in Web source form.
+To allow the Web source code to be tangled by users not yet having a
+copy of Web, he also included the tangled Pascal code for the Tangler.
+
+While this approach is heroic and serves to convey a commitment and
+a confidence in literate programming, it seemed to me that writing FunnelWeb
+in FunnelWeb would simply be asking for trouble.\xx{trouble}{asking for}
+For a start, it would be
+very hard to modify any feature of FunnelWeb that had been used to write
+FunnelWeb, and the thought of what would happen if the working executable
+became inoperative for some reason does not bear thinking upon.
+
+One million billion computer programs were written in the non-literate
+style before FunnelWeb was created. Why not one more?
+
+\section{Coding Style}
+\xx{coding}{style}
+
+Although FunnelWeb wasn't coded under any particular coding standard,
+it was coded in accordance with a fairly strict personal style of C
+which developed during the development of FunnelWeb. This style was
+subsequently embodied in a real C coding standard prepared for the
+South\x{South Australian Government Department of Lands}
+Australian Government
+Department of Lands.\footnote{The standard
+is currently unavailable, but is likely to be released or
+published eventually.} Unfortunately, FunnelWeb was not
+formally developed under the standard and so some holes remain in
+FunnelWeb's coding style. This section aims to describe some of the more
+important aspects of the coding style.
+
+\thing{Portability:} This\x{portability}
+was a major goal of the FunnelWeb implementation.
+Two excellent books guided this move to portability.
+They were \paper{Rabinowitz90} (which deals with C code itself)
+and \paper{Horton90} (which deals with the portability of various library
+calls). Other works such as \paper{Kernighan88} and
+\paper{ANSI} were also helpful.
+
+\thing{Identifiers:} \paper{Rabinowitz90}\x{identifier}{length}
+specifies that for
+wide portability, identifiers of block and file scope should be unique to
+eight characters, and identifiers of program scope should be unique to
+six characters. I have gone further in FunnelWeb and actually made these
+restrictions actual limits on identifier length.
+
+Because names must be so short, a system of abbreviations was developed to
+organize the identifiers used within FunnelWeb. Each abbreviation consists
+of a letter pair. Here are \i{some} of the abbreviations
+used:\xx{identifier}{abbreviations}
+
+\begin{verbatim}
+bp - Body Part.
+cm - Compare. Used to prefix comparison routines that return [-1,0,1].
+dc - Document component.
+dm - Dump package.
+el - Element.
+eq - Equal. Used to prefix comparison routines that return a boolean.
+ex - Expression.
+f - Global files.
+ll - List of lists.
+ln - Line record.
+ls - List Package.
+lr - Lister package.
+ma - Macro.
+mc - Macro Call.
+mn - Macro Name.
+op - Options package.
+pr - Parser.
+ps - Position record.
+sc - Scrap record.
+sn - Section.
+tb - Table package.
+ty - Typesetter directive.
+wf - Write file package.
+wl - Write with EOL (misc.c).
+wr - Write (misc.c).
+\end{verbatim}
+
+\thing{Pointers:} Variables or types denoting
+pointers\xx{pointers}{naming} start with \dqp{p\_}.
+
+\thing{Types:} Names denoting types end in \dqp{\_t}.
+Thus, a type for a pointer to a table would be named
+\p{p\_tb\_t}.\xx{types}{naming}
+
+\thing{File names:} All files\xx{filenames}{length}
+used in FunnelWeb have file names that are
+from one to eight characters long and file extensions that are from one to
+three characters long. This ensures that the files can be portably moved
+to all kinds of machines, even MSDOS!\x{MSDOS}
+
+\section{Use of Memory}
+\xx{use of}{memory}
+
+FunnelWeb is not a memory-stressed program. However, during its development,
+problems with the management of memory seemed to crop up again and again.
+This section documents some of these problems and the solutions adopted.
+
+There are three places where memory can be obtained: the heap, the stack,
+and from static variables. The following three sections deal with each
+of these areas.
+
+\section{The Heap}
+\xx{heap}{memory}
+
+One of the great frustrations of being a user is to find that a computer
+program is complaining about lack of memory when one knows full well that
+one has allocated at least ten times as much memory to the program as it
+would ever need to do its job. The reason for such error messages usually
+has to do with the programmer setting a fixed \dq{reasonable} limit to
+a particular data structure and then locking it up into an array whose
+bound is specified by a constant. While the use of arrays can increase the
+speed of a program, it also means that the user cannot increase the capacity
+of the program without obtaining the source code and recompiling it,
+which is usually a daunting option.
+
+The alternative is to use the heap for all data structures that can
+grow in proportion to the size of the user's input. This rule has been
+followed rigorously in FunnelWeb. This means that as memory spaces
+increase, users will be able to hand their version of FunnelWeb more
+memory without having to recompile it.
+
+\topicbreak
+
+Some problems arose early on the Macintosh\x{Macintosh}
+in the use of the heap. It seems
+that some of the allocations I was attempting to make were failing for some
+obscure reason, possibly my fault. Whatever it was, it went away when I
+replaced direct calls to \p{malloc}\x{malloc}
+with calls to a mini package I wrote
+(called \p{memory}) that allocated large chunks of memory and then doled out
+small pieces as required by the rest of the
+program.\xx{memory}{package}
+
+Having a package to manage all the memory allocation had two other benefits.
+
+First, only one check was required in the entire program to see if memory
+had run out (in the memory package), and if that failed, the program could
+be brought to a screaming halt. This organization was far preferable to
+having each piece of code that needed to allocate memory having to check
+to see if \p{malloc} had failed.
+
+Second, the decision to construct a mini-shell within FunnelWeb to
+support regression testing meant that FunnelWeb proper could be run
+many times in any given invocation of FunnelWeb. As a consequence it was
+necessary to make sure that there was no memory
+leakage\xx{memory}{leakage} between invocations
+of FunnelWeb proper. This was accomplished by reworking the memory package
+to operate a watermark system. The user of the package, when requesting
+memory, could request \dq{temporary} or \dq{permanent}. If permanent, the
+memory package forgot that it had allocated the memory. If temporary, the
+memory package places the allocated block on a list. There was then a
+function in the memory package that could be called to deallocate all the
+temporary memory. Thus, so long as all requests for memory within FunnelWeb
+proper were for temporary memory, and that memory was freed at the end of
+every run, one could be sure that there was no memory leakage.
+
+\section{The Stack}
+\xx{stack}{memory}\xx{stack}{size}
+
+For a while during the development of FunnelWeb a particularly nasty bug
+proved extremely hard to find. The symptom was that FunnelWeb would crash,
+sometimes at random, but more often upon entering a particular function.
+In the end about a day of specific debugging was required before the problem
+was tracked down to a stack problem. It turned out that somehow
+(either the fault of the Macintosh or the THINK~C language system), only
+6K was being allocated for stack space!!!!!!!
+
+This experience led me immediately to go through the entire program and
+eliminate (or remove to the heap) any automatic variable declarations that
+used more than one hundred or so bytes.
+
+The lesson is clearly that C~programs that use more than a few thousand bytes of
+stack space are risking their portability. All large data structures should be
+placed in the heap.
+
+\section{Static Variables}
+\xx{memory}{static}\xx{static}{variables}
+
+Static variables also proved a problem on the Macintosh.
+It turns out that
+the Macintosh\x{Macintosh} THINK~C compiler\xx{ThinkC}{compiler}
+does not allow more than 32K of statics
+\i{in the entire program}. For a while this restriction was
+a serious threat to the program as it was discovered that constant strings
+were included in this total! However, some searching revealed a compiler
+option that removed the strings from the static category.
+
+Nevertheless, the 32K limit is rather severe. Again, it seems that for
+portability reasons, C~programs that use a lot of static variables are risking
+their portability. As a result, the FunnelWeb code avoids static variables
+where possible in favour of the heap.
+
+\section{Implementing Text Indentation}
+\xx{text}{indentation}
+
+At one point during the development of FunnelWeb, text indentation was
+fully implemented. However, it was subsequently removed because it was
+considered a dangerous feature. This section records the way in which
+text indentation was implemented so that if the feature ever has to be put
+back, this technique can be used again.
+
+
+1. Create a new field in the \p{sc\_t} record call \p{sc\_postn}.
+
+\begin{verbatim}
+ char *sc_postn; /* Pointer in the range [sc_first,sc_last+1]. */
+ /* It is the minimum possible value of sc_postn for */
+ /* which EOL does not appear in *sc_postn..*sc_last. */
+ /* i.e. Points to the byte following the first EOL in */
+ /* the scrap or sc_first if EOL does not appear. */
+\end{verbatim}
+
+2. Modify the scanner so that it generates this field.
+Sendtext should be modified so that
+it accepts an argument for the \p{p\_postn} value.
+
+\begin{verbatim}
+LOCAL void sendtext P_((p_ps_t,char *,char *,char *,bool));
+LOCAL void sendtext(p_tkps,p_first,p_last,p_postn,is_white)
+/* Appends a text token to the end of the token list. */
+/* IN: p_ps is a pointer to a position structure giving the position of the */
+/* first character of the token. */
+/* IN: p_first and p_last point to the first and last byte of the text scrap. */
+/* IN: p_postn has the same definition as sc_postn (see fwdata.h). */
+/* IN: is_white should be set to TRUE iff scrap is entirely whitespace. */
+p_ps_t p_tkps;
+char *p_first;
+char *p_last;
+char *p_postn;
+bool is_white;
+{
+ tk_t token;
+
+ /* Empty text scraps should never be generated. */
+ assert(p_first<=p_last,"sendtext: Text scrap bounds are bad.");
+
+ /* If ch=EOL then we should be scanning more text, not shipping it! */
+ assert(ch!=EOL,"senttext: Shipping text while still more to scan.");
+
+ /* Check that p_postn is in range. See definition in fwdata.h. */
+ assert(p_first<=p_postn && p_postn<=p_last+1,
+ "sendtext: p_postn is out of range.");
+
+ /* Debug: Check the p_postn field using a brute force check. */
+ {
+ char *i,*j;
+ j=p_first;
+ for (i=p_first;i<=p_last;i++)
+ if (*i==EOL)
+ j=i+1;
+ assert(j==p_postn,"sendtext: sc_postn field is incorrect.");
+ }
+
+ /* Load the text token. */
+ token.tk_kind = TK_TEXT;
+ ASSIGN(token.tk_ps,*p_tkps);
+ token.tk_sc.sc_first = p_first;
+ token.tk_sc.sc_last = p_last;
+ token.tk_sc.sc_postn = p_postn;
+ token.tk_white = is_white;
+ token.tk_parno = 0;
+ ls_add(token_list,PV &token);
+}
+\end{verbatim}
+
+Then all the calls to sendtext have to be changed:
+
+\begin{verbatim}
+/* @ instructs FunnelWeb to replace the special construct with the */
+/* special character. Luckily one appears just before the @ !! */
+/* Note: FALSE is OK because space is not a legal specialch. */
+/* Note: Setting parameter p_postn to p_ch-1 is OK as EOL is not a */
+/* legal specialch. */
+sendtext(&ps_spec,p_ch-1,p_ch-1,p_ch-1,FALSE);
+break;
+
+/* + instructs FunnelWeb to insert an EOL. We can't look to the end of */
+/* the previous line to find an EOL as this might be the first line. */
+/* Running ahead to the end of the line is expensive, and having the */
+/* liner mini-package maintain a variable for it would be extra */
+/* housekeeping. Instead of all this, we just point to a static. */
+{CONST static char stateol = EOL;
+ sendtext(&ps_spec,&stateol,&stateol,(&stateol)+1,TRUE);}
+break;
+
+/* If we hit something that ends a text token */
+/* then we can transmit a white text token. */
+if (ch==specialch || ch==EOFCH)
+ {sendtext(&ps_start,p_first,p_ch-1,MAX(p_sol,p_first),TRUE); return;}
+
+/* Otherwise we have some more (non-white) text to scan. */
+/* We can then send a non-white text token. */
+while (ch!=specialch && ch!=EOFCH)
+ NEXTCH;
+sendtext(&ps_start,p_first,p_ch-1,MAX(p_sol,p_first),FALSE);
+\end{verbatim}
+
+The dump code needs to be changed too!
+
+\begin{verbatim}
+ wf_str(p_wf,"\"");
+assert(token->tk_sc.sc_first !=NULL,"dm_tkls: NULL ptr1.");
+assert(token->tk_sc.sc_last !=NULL,"dm_tkls: NULL ptr2.");
+for (i=token->tk_sc.sc_first; i<=token->tk_sc.sc_last; i++)
+ {
+ if (i==token->tk_sc.sc_postn)
+ wf_str(p_wf,"<postn>");
+ if (*i=='\n')
+ wf_wl(p_wf,"");
+ else
+ dm_byte(p_wf,*((ubyte_ *) i));
+ }
+if (i==token->tk_sc.sc_postn)
+ wf_str(p_wf,"<postn>");
+wf_str(p_wf,"\"");
+}
+\end{verbatim}
+
+3. Over in the Tangle module, create a massive array of pointers to scraps
+to be used as a stack. Maintain pointers into the stack called \p{current} and
+\i{base} (similar to the blank indentation variables). Implement the following:
+
+\begin{itemize}
+
+\item To write out a scrap, scan it byte by byte. Output each byte. When
+you hit an EOL, pop the stack back to \p{base}. Then write out an EOL
+followed by the stack contents but writing each scrap only from \p{postn} to
+end end of each scrap.
+When you have finished the new scrap, push it on the stack.
+
+\item When you hit a new macro to expand, save \p{base}. Restore it later.
+
+\end{itemize}
+
+The \p{postn} field solves the big problem of
+how to cope with something like this:
+
+\begin{verbatim}
+The rain in Spain
+falls mainly @<on the plain@>
+\end{verbatim}
+
+The trouble is that we want to text indent the lines in
+\p{@<on the plain@>} with
+just \dqp{falls mainly~}. However, this string is only part of a scrap. The
+solution is to get the scanner to record, in the \p{postn} field of each scrap,
+the position of the first byte with a EOL-free run to the end of the scrap.
+
+This scheme is very efficient because all we are doing is pushing and popping
+pointers to scraps on a stack array. The main disadvantage is that the
+array must necessarily be finite and would impose a limit on the depth
+of indentation nesting (not a big problem).
+
+%==============================================================================%
+% Start of Ch2.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_ch3.tex b/web/funnelAC/hackman/h_ch3.tex
new file mode 100644
index 0000000000..5d4a5dd226
--- /dev/null
+++ b/web/funnelAC/hackman/h_ch3.tex
@@ -0,0 +1,549 @@
+%==============================================================================%
+% Start of Ch3.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Modification}
+\label{chapmod}\xx{FunnelWeb}{modification}
+
+\section{Introduction}
+
+This chapter deals with modifications to FunnelWeb. Although the
+GNU license\xx{GNU}{license}
+under which FunnelWeb is distributed allows anyone to
+modify FunnelWeb and distribute the modified versions, there are a number of
+dangers in doing this. This chapter explains the dangers and presents
+some issues that you should think about if you intend to
+distribute modified versions of FunnelWeb.
+
+\section{The Danger of Modifying Languages}
+\xx{changes}{dangers}\xx{languages}{dangers}
+
+Whenever someone modifies a computer program they should always ask
+themselves \dq{what is the impact of these changes going to be on
+users}. For mature products, the degree of impact is largely determined
+by the investment that users have made in particular file formats
+supported by the product.
+
+At the two extremes, there are the video game\x{video game} and the
+compiler.\x{compiler}
+If one changes a video game, the change affects only the future games
+played. However, if one changes a compiler in particular ways,
+it is likely that thousands of users will be forced to change millions
+of source files to accommodate the new version. Thus the impact of changes
+to a program depends largely on the investment made by users, in
+source files, training, and even muscle memory!
+
+FunnelWeb lies very much at the compiler end of this spectrum. In fact
+it lies even further. Not only does it implement a language, but it is
+currently the \i{only} implementation of that language! This means that,
+although they shouldn't, people will be tempted to treat the FunnelWeb
+program as the definition of its input language instead of
+the definition chapter in the \i{FunnelWeb User's Manual},
+which takes precedence.
+
+Because FunnelWeb defines an input language, and people will write programs
+using that language, particular kinds of changes in the language will
+impact severely on users. Three different kinds of change are discussed
+below.
+
+\narrowthing{Removing features:}{Removal\xx{removing}{features}
+of features (featurectomy) is extremely
+difficult once the user base has started using them. If a feature is
+removed, users of the program will have to go through all their
+programs and find a way to simulate the effect of the removed feature
+with other features. Often this is so unthinkable, that bad language
+constructs are tolerated far beyond their useful lifetime.}
+
+\narrowthing{Modifying features:}{Modification\xx{features}{modification}
+of features has less
+direct impact than the removal of features, but can cause more subtle errors.
+For example, consider the sorts of subtle errors that might arise if the
+semantics of the FunnelWeb comment \p{@!} were changed so that it no
+longer includes the end of line marker. Anyone modifying features should
+be sure that they are not inadvertently laying traps.}
+
+\narrowthing{Adding features:}{Although\xx{features}{adding}
+the addition of features is
+generally the most painless for the user community, as Hoare points
+out, it is also the most dangerous in the long run.}
+
+\begin{quotation}
+\dq{When any new language design project is nearing completion, there is
+always a mad rush to get new features added before standardization.
+The rush is mad indeed, because it leads into a trap from which there is
+no escape. A feature which is omitted can always be added later, when its
+design and its implications are well understood. A feature which is
+included before it is fully understood can never be removed
+later.}\paper{Hoare80}
+\end{quotation}
+
+These problems exist even when there is a central authority.
+If we consider the case where there is no central authority, and
+users modify a language and its implementations and distribute the
+modified versions, the result is even worse. For a start, the
+structure of the genealogy of the program\xx{genealogy}{program}
+changes from a list to a tree.
+This makes it impossible to impose an ordering on the different versions
+and makes it difficult to merge them once they diverge. Second, it
+reduces the portability of files created under different versions.
+Third, it makes adding features hazardous. If a feature is added in
+one version, files will be created that use it. These files will
+immediately become non-portable. Furthermore, two programmers may
+introduce different features that use the same syntactical constructs,
+thus preventing the two versions from ever being merged. Worse, two
+programmers could introduce \i{similar} features that use the
+same syntactical constructs, producing even more subtle problems.
+
+The only way to avoid all these problems is to create some sort of
+central design authority,\xx{design}{authority}
+(or, at the very least, some sort of design
+synchronization) that controls the language and its implementation.
+
+The benefits of tight control over the language are enormous.
+
+\narrowthing{Universal portability:}{Source files can be treated as portable.
+If all the language
+implementations in the world are singing the same tune, then someone
+in Sydney could send a file to someone in New York and be
+sure that it will be successfully processed.}
+
+\narrowthing{Clear semantics:}{Doubt about the semantics of the
+language will be greatly minimized.
+So long as more than one slightly differing version of a language exists,
+there will be confusion over the semantics of its constructs. A good
+example is the confusion between the AT\&T Unix\x{Unix}
+and Berkeley Unix shell languages.}
+
+While changes to the language supported by a piece of software is the
+most serious problem associated with multiple versions of software,
+the lesser problem of keeping track of changes that don't affect the
+language that the software implements can also cause trouble. Merging
+different versions of software is extremely tedious as anyone who
+has tried it will verify. However, changes not affecting the
+language are far less serious because they impact only on the program
+itself, not on the far more numerous source files that depend on it.
+
+\section{Authority vs User Security}
+\xx{security}{authority}
+
+There are a number of ways of providing the
+strong central design authority required to produce
+the portability and semantic security desired by users,
+
+\begin{itemize}
+
+\item Trade mark\x{trademark}
+the name of the language. Publish a specification of the
+language under the trade name. Warn all users not to trust any
+implementation that does not guarantee that it implements the language.
+Then control implementations by only licensing the trade mark to conforming
+implementations.
+
+\item Create a single implementation of the language. Do not release
+the source code to the implementation. Release only binary executables.
+
+\item Release the source code to the implementation, but under a license
+that prohibits the distribution of modified versions.
+
+\end{itemize}
+
+Many other variations on these themes are possible, but they are all
+based on the idea of regulating either the \dq{official}
+definition of the language
+or all of its existing implementations.
+
+At about this stage, a conflict arises. While users want the language
+they are using to be tightly controlled, they also want to feel secure
+about the availability of its implementations. If hundreds of source
+files are to be created in the language, there had better be one or
+more translators available when the time comes to use them.
+
+In the case of widely-used programming languages such as~C, the problem of
+securing implementations does not arise. If you don't get your
+compiler from Borland, you can get it from Microsoft. However, in the
+case of a newly introduced language such as FunnelWeb, there may be
+very few implementations, or even just one implementation,
+and this poses a danger to the
+user who is committing to that format. Despite the best intentions of the
+copyright owner, there are a variety of ways in which a computer
+program can suddenly become
+unavailable.\xx{program}{availability} Here are some examples:
+
+\begin{itemize}
+
+\item If the program is owned by a company and the company goes broke,
+the liquidators may not bother to place the software in the public domain.
+
+\item If the program is owned by a kindly individual who issues licenses
+for free, and that individual suddenly dies, users might suddenly find
+themselves negotiating with hard-nosed estate executors for the rights
+to continue using the program.
+
+\item If whoever owns the program does not upgrade the program every so
+often, it is actually possible for the released
+executables to \dq{expire} when new operating system upgrades appear.
+
+\end{itemize}
+
+These possibilities mean that users about to invest in a newly
+introduced programming
+tool such as FunnelWeb have legitimate concerns when they worry
+about the tool's availability. For non-commercially
+distributed tools such as FunnelWeb, the simplest solution to this
+problem is to make the source code available, either by placing it
+into the public domain, or by releasing it under some kind of
+public license, such as a GNU license.
+The trouble with releasing the source code
+is that it removes control from the design
+authority. Once the code is \dq{out} there is no stopping anyone
+from modifying the program and distributing modified versions.
+All chaos can ensue.
+
+One solution to this conflict is to take the trade mark approach. This
+separates the right of the design authority to control the language and
+its implementations, and the right of the users to use the source
+code in any way they like (but they may have to change its name!).
+However, the trade mark approach is expensive.
+
+The solution that I (Ross Williams (\p{ross@spam.adelaide.edu.au}))
+have adopted is to release the FunnelWeb source code under a GNU license
+and then to write this chapter in the \i{FunnelWeb
+Hacker's Manual} to dissuade possible hackers from
+releasing modified versions under the FunnelWeb name.
+This is about as close to the GNU/trademark approach
+I can get without forking out about \$1200 for a US trademark
+or paying even more to get a lawyer to attempt to draft a contract
+stating \dq{thou shalt not modify the FunnelWeb language}.
+
+\section{What I Want to Protect}
+\xx{protection}{FunnelWeb}\xx{protection}{file extension}
+
+The concerns expressed in the previous section about modifications to the
+FunnelWeb program do not preclude modifications. They merely imply that
+some conditions be observed when modifications are made.
+In fact,
+having formally released the sources under GNU, there is nothing that
+I can do to stop people distributing modified versions and the conditions
+to be described must be imposed voluntarily.
+
+In the end there are two things that I want to protect/maintain:
+
+\begin{enumerate}
+
+\item Restriction of the name \dq{FunnelWeb} only to computer programs
+that exactly implement my \dq{official} definition of the language.
+
+\item Restriction of the FunnelWeb source file extensions \dqp{.fw}
+(input files) and \dqp{.fwi} (include files) only
+to source files that conform to my \dq{official} definition of the
+language.
+
+\end{enumerate}
+
+So long as these conditions hold, source files created under \dq{FunnelWeb}
+will be portable, and the language will have the potential to
+be stable and well-defined. Here are my suggestions for how to
+obey these rules. These suggestions are in addition to the GNU license
+rules about documenting any changes that you make in the source files.
+
+\narrowthing{Modifications that do not affect functionality:}{If you
+change the FunnelWeb program in a manner that does not
+affect the functionality of the program in any way (\eg{}port
+it to a new machine, or just speed it up),
+then you should modify the program to write out a message when it
+starts up saying that
+it is a modified version of FunnelWeb. No other actions need be taken.}
+
+\narrowthing{Modifications that affect functionality:}{If you make changes
+to FunnelWeb that affect its functionality (\eg{}changes to command line
+options, the command language, or the input language)
+you should change the name of the program so that the name
+no longer contains the word
+\dq{FunnelWeb}, and should choose alternative input and include-file
+file extensions (the current ones are \dqp{.fw} and \dqp{.fwi}). For example,
+you might call your program \dq{BananaWeb} and use the file extensions
+\dqp{.bw} and \dqp{.bwi}.}
+
+These rules are not very restrictive. Basically you can do what you like
+so long as you change the name of the resulting program. I do not wish to
+restrict anyone who might want to use FunnelWeb as a foundation for a more
+sophisticated literate programming system. My sole aim here is to
+protect the integrity of what already exists.
+
+\section{Modifying the Manuals}
+\xx{modifying}{manuals}
+
+While it is permitted to modify the FunnelWeb program, no license has been
+granted
+to modify its documentation (\i{The FunnelWeb User's Manual} and
+\i{The FunnelWeb Hacker's Manual}). The only operation that can be
+performed on the FunnelWeb documentation is a verbatim copy in any medium.
+
+If you have created a modified version of FunnelWeb and wish to document it,
+either write your own manual from scratch, or write a manual that can be
+used in conjunction with the existing manuals.
+
+\section{How Copyright Law Works}
+\xx{copyright}{law}
+
+In order to understand the next section, some understanding of copyright
+law is required. The assertions made in this section are not legal opinions;
+they are merely approximations of the law, based on my understanding of it.
+
+By default, whoever creates a \newterm{work} owns \newterm{copyright}
+over it. This means that by default, that person is the only person in the
+world who has the legal right to make copies of the work.
+
+Copyright over a work usually covers all direct derivations of this work.
+For example, if someone owns the source code to a computer program
+then they also own any direct derivations such as the binary executable.
+
+More than one person may own copyright over a work. If this is the case,
+then the work cannot be copied without the permission of all of the people
+owning the copyright.
+
+A person (or group) owning copyright over a work
+can \newterm{license} the right to make copies
+of the work to anyone he likes under any conditions he likes.
+
+If a work is modified, the result is called a \newterm{derived work}.
+
+If copyright on a work is owned by $A$ is the work is modified by $B$,
+copyright on the derived work is owned by both $A$ and $B$.
+
+Copyright is not ownership over particular configurations of information,
+but rather is the right to restrict the copying of information derived
+from particular sources. For example, if two people point their cameras
+out a window and take identical photographs, each person has the right
+to restrict the copying of \i{their} photograph regardless of the
+fact that the other person has copyright over an identical photograph.
+In the unlikely event that two people wrote
+novels that were letter for letter identical and it could be proven that
+there was no contact between the two people when they wrote the novels,
+then copyright law would each protect the right of each person to
+restrict the copying of the novel originating from \i{them}. In practice,
+the probability of such an event occurring is so low that the law
+assumes that if two works are close or identical, that there has been
+some information interchange at some point.
+
+Thus, if I own copyright on computer program $X$, and I create
+an identical copy of $X$
+called $Y$ and distribute it under the terms of a license agreement,
+then that license agreement does not cover the copy $X$. Once the
+license agreement is signed, there is nothing I can do to undo the
+license; $Y$ has gone. However, I still have total control over $X$.
+
+Version~2 of the GNU General Public License\xx{GNU}{license}
+(under which FunnelWeb is
+released) specifies (in a nutshell) that software can be copied freely
+so long as it is not sold, and that it can be modified and copied
+freely so long as the modifications are logged and it is not sold.
+In both cases, it requires that the
+result of the copy or modification operation
+be copied only under the conditions of the license.
+
+Once a declaration is issued licensing a copy of a program under GNU
+license, that license cannot be retracted.
+
+\section{Management of the Official FunnelWeb}
+\xx{FunnelWeb}{management}\xx{FunnelWeb}{official}
+
+I intend to maintain an official copy of FunnelWeb and release it under
+GNU license from time to time so that everyone can use it. Unfortunately
+its going to be a little messy.
+
+For a variety of reasons, I want to maintain
+total control over \i{my} copy of the official version of FunnelWeb.
+Some of the reasons are:
+
+\begin{itemize}
+
+\item If it turns out that there is an enormous demand for
+FunnelWeb (unlikely) then
+I want to be able to create a business based on it, or at least
+be able to bundle it with other products.
+This would be difficult if the only up-to-date copy available was a GNU copy.
+Note: If this happens, all the GNU releases of FunnelWeb will remain
+valid.
+
+\item I want to be able to copy code from my version of FunnelWeb
+into commercial products without having to worry about the GNU license.
+
+\end{itemize}
+
+The trouble is that (in my understanding of copyright law),
+once a copy of FunnelWeb has been released under GNU license, then it
+and any works derived from it fall under GNU license too. This means that
+if you modify a GNU release of
+FunnelWeb and send me your modifications, and I incorporate
+them into my version, then I no longer own copyright on the version I
+modified. Basically, if GNU touches a work, then that copy is gone forever.
+
+My solution to the problem is to keep a copy of FunnelWeb that is
+GNU-clean and only make modifications to it that are GNU-clean. So
+long as my official copy is GNU clean, any modifications that I make
+myself will be GNU clean. The problem comes when someone else modifies
+the GNU version and then wants me to incorporate the modifications into
+my official version. As I understand the law, by default, the programmer
+owns the modifications (because he made them), but the result of making
+the modifications falls under GNU license. What I propose is that those
+who want their modifications included in the official copy of FunnelWeb
+sign an agreement transferring copyright of the modifications over to
+me on condition that the result be released under GNU license within
+a certain time period. \figlicense{} demonstrates the process.
+
+\begin{figure}[htbp]
+\begin{verbatim}
+
+ +---------->----------+--------------<-------------+
+ |(modifications by | |
+ | me) V |
+ | +----------------------------------+ |
+ +--<--| My Official Copy of FunnelWeb | |
+ | Copyright (C) Ross Williams | |
+ +----------------------------------+ |
+ | (Periodic releases) / \
+ V / \ Programmers
+ +------------------+ /Legal\ sign away
+ | GNU Release Copy | \Filte/ copyright on
+ +------------------+ \ r / modifications
+ | \ /
+ | (Modifications made by |
+ V random programmers) --->--+
+ +-----------------------+
+ | Modified GNU Version |
+ +-----------------------+
+
+\end{verbatim}
+\mylabel{\figlicense{}: How I am going to maintain copyright over FunnelWeb.}{%
+%
+Once a work is released under GNU license, all derived works fall under
+GNU license. However, this diagram shows how copyright can be maintained
+over a work, while still making it available under GNU license.
+Unfortunately, this scheme requires that copyright on
+modifications to FunnelWeb be signed off by the people who make the
+modifications.
+%
+}
+\end{figure}
+
+There are two main disadvantages to this scheme:
+
+\begin{enumerate}
+
+\item Getting each person who contributes modifications to FunnelWeb
+to sign and send a piece of paper signing away copyright will be tedious.
+
+\item Programmers may be reluctant to sign away copyright on modifications
+because the result could be used by me for commercial purposes
+by me at a later date (Note: But it must be released under GNU as well).
+
+\end{enumerate}
+
+These disadvantages are regrettable consequences of my decision to retain
+total control over the \dq{official} version of FunnelWeb.
+
+The upshot of all this is that:
+
+\begin{itemize}
+
+\item I will never allow any code from a GNU release of FunnelWeb to
+touch my official copy. Only modifications will be acceptable.
+
+\item If you make a modification to FunnelWeb and send it to me for
+inclusion in the official version, I will not incorporate your
+modification until I have received a signed declaration transferring copyright.
+I will prepare such a contract when the first person sends me a worthy
+modification!
+
+\item If you intend to make changes to FunnelWeb that are so massive that they
+will involve wide-scale modification of the source files, and you want
+the modification to be part of the official version,
+it might be a good idea to contact me before doing so. There are two
+reasons for doing this. First, it allows me a chance to comment on your
+proposed modifications and give my opinion on whether they are likely to be
+incorporated into the official version. Second, I can send you a copy
+(under special license) of the GNU-clean official version to work on. This will
+allow you to ship back your changes as files rather than as change sections.
+
+\end{itemize}
+
+As a separate point from the legal issues, I am likely to turn out to be
+pretty picky about what modifications I will incorporate into the
+official copy. Whether a modification will be accepted will depend,
+amongst other things, on the following criteria.
+
+\begin{itemize}
+
+\item Does the modification fit in with the design goals of FunnelWeb, or
+is it just a case of creeping featurism?
+
+\item How well coded is the modification? Would it reduce the quality of the
+code?
+
+\item If the modification changes FunnelWeb's functionality, is this a
+desirable change? How will it impact on existing users?
+
+\item Would it be quicker for me to make the modification myself than
+to work out how to incorporate the submitted modification?
+
+\end{itemize}
+
+It is my goal to guard the integrity of the design and code of the
+official version of FunnelWeb and so I will probably be rather
+fussy about what I regard as a worthwhile modification. I do not wish to
+lose control of the code, either technically or legally.
+
+\section{A GNU Version?}
+\xx{GNU}{version}
+
+The controls on the official version of FunnelWeb described in the previous
+section will have at most a minor impact on FunnelWeb development if
+FunnelWeb already serves the needs of most of its users. However, if it
+turns out that FunnelWeb is both popular, \i{and} needs
+widespread modifications and enhancements, then the official feedback loop
+described in the previous section will become unworkable, and there will be
+a GNU breakout.
+
+A \newterm{GNU breakout}\xs{breakout}{GNU}
+will occur if FunnelWeb users become
+organized enough and annoyed enough (at the official development cycle)
+to start maintaining a coherent version of FunnelWeb that
+diverges from the official version.
+If a GNU breakout occurs, I would appreciate, as requested earlier, that
+a different name and file extensions be chosen for the diverging version.
+
+\section{Summary}
+
+Decentralized modifications to a programming language and its implementations
+can seriously damage the language's portability and semantic clarity.
+Unfortunately, there is a tension between centralizing control of a
+programming language and providing source code security to nervous users.
+In FunnelWeb, this trade-off has been resolved to some extent by
+releasing the source code along with a request
+that if the functionality of the program is modified,
+that the program's name be changed and a different file
+extension be chosen for input files created under the modified program.
+The author of FunnelWeb has decided to maintain an official version of
+FunnelWeb over which he will own copyright, but which he will release
+under GNU license from time to time. This means that copyright
+on all changes to FunnelWeb must be signed over to the author before they
+have a chance of being incorporated in the official version. Finally, it is
+possible that this reluctance of the author to remove his copyrighted
+version from the development cycle of the official version
+will result in a GNU breakout in which a diverging GNU
+version of FunnelWeb will be maintained by the GNU community. The author
+hopes this won't be necessary and requests,
+if this happens, that the diverging GNU version be renamed.
+
+%==============================================================================%
+% Start of Ch3.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_ch4.tex b/web/funnelAC/hackman/h_ch4.tex
new file mode 100644
index 0000000000..b4df3706a8
--- /dev/null
+++ b/web/funnelAC/hackman/h_ch4.tex
@@ -0,0 +1,401 @@
+%==============================================================================%
+% Start of Ch4.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\chapter{FunnelWeb Future}
+\label{chapfuture}\xx{FunnelWeb}{future}
+
+Previous chapters have explained the design of FunnelWeb and given reasons
+for why it is the way it is. This chapter goes through each of the
+aspects of FunnelWeb, and explores their problems, how they can be solved,
+and lists opportunities for improvement.
+
+\section{Documentation}
+\x{documentation}
+
+\thing{An official example:} A official example program written using
+FunnelWeb should be constructed and made available.\xx{official}{example}
+
+\thing{Index program:} In order to typeset the documentation, a portable
+index sorting program is required. One should be written and added to the
+distribution kit.\xx{index}{program} Perhaps this could be the official
+example!
+
+\section{Command Line Interface}
+\xx{command}{interface}
+
+\thing{Buffer length:} Currently the FunnelWeb shell uses the
+\p{COMLINE\_MAX} constant to size its internal command line buffers.
+This is untenable. The maximum length of a shell command line should
+not be machine dependent.
+
+\thing{Antiquated Features:} As the FunnelWeb language develops, it is likely
+that some changes will have to be made that will render one or more
+language constructs obsolete. When this happens, it may be necessary to
+add a command line option that has the power to turn on and off warnings or
+errors flagging antiquated features.\xx{antiquated}{features}
+
+\section{Shell Interpreter}
+\xx{shell}{interpreter}\xx{command}{interpreter}
+
+\thing{SETALL command:} When writing FunnelWeb scripts, it is sometimes
+desirable to set \i{all} of FunnelWeb's options\x{options}
+to some particular value
+so that the script is not vulnerable to changes in FunnelWeb's default
+values which might occur from time to time. To this end, it may be worth
+creating a \dqp{SETALL} command that is identical to the \dqp{SET} command
+except that it will generate an error if the value of an option is not
+specified explicitly.\xx{setall}{command}
+
+\thing{Recursion test:} A test should be added to test for recursive
+invocation in a shellscript.\xx{recursion}{test}
+
+\thing{Diagnostic counting:} The code for counting diagnostics in the
+script interpreter is rather messy and perhaps even buggy. It should be
+cleaned up and commented.\xx{diagnostic}{counting}
+
+\thing{Argument counting:} In the \p{command.c} module, there is a variable
+that counts the arguments to a command. Currently it takes the value of
+the number of parameters including the command verb. This has turned out
+to make the code less readable. It should be changed to be the number of
+arguments to the command verb.
+
+\thing{Make facility:} It may be worth building some sort of make facility
+into the script language so as to support machines such as the Macintosh
+that do not already have this facility.\x{make}
+
+\thing{Signature file:} One problem with using FunnelWeb in conjunction with
+an external \p{Make} facility is that a user might change a FunnelWeb source
+file without making changes that will affect the files that it generates.
+If FunnelWeb is then run and the \dqp{+D} option is on, then the output
+files will be deleted (to avoid further \p{Make} propagations).
+If \p{Make} then has a production linking the \p{.fw} file to its output
+files, then it may conclude that the output files are still out of date.
+To solve the problem, FunnelWeb could be changed to write a \p{.sig} file
+whenever it processes a \p{.fw} file. The \p{Make} production could then
+be wired up to link
+the \p{.fw} file to the \p{.sig} file instead of to the output
+files.\xx{signature}{file}
+
+\section{Language Design}
+\xx{language}{design}
+
+Some proposed changes to FunnelWeb do not correspond to
+any particular component of FunnelWeb
+and are really to do with the design of the input language.
+
+\thing{Output or file?:} The \dqp{@O} special sequence for defining an output
+file is somewhat non-mnemonic and can be confused with zero (\dqp{0}). Perhaps
+it should be replaced by the \dqp{@F} sequence.
+
+\thing{Syntax of section names:} Currently section names use
+the same syntax as macro names. For example \dqp{@<Sloth@>}. It can be
+argued that angle brackets should be reserved only for macro names and that
+some other syntax should be found for delimiting section names. This is not
+a clear issue. It could also be argued that they are both names, and that
+because sections can inherit their names from the macros they contain, that
+the names are of the same \dq{type}.\xx{section}{syntax}
+
+\thing{One macro per section:} One particular style of using FunnelWeb is
+to have at most one macro definition per section. It may be worth adding
+a pragma that instructs FunnelWeb to enforce this.
+
+\thing{Should @\{ suppress EOL?:} When defining a macro in FunnelWeb, it
+seems to be rule rather than the exception that the
+\dqp{@\{} be followed by \dqp{@-}. This suppresses the EOL on the definition
+line, allowing the first line of the macro to be placed immediately
+above and in line with the other
+lines without introducing an EOL at the start of the macro text.
+One option is to introduce a pragma to determine whether to suppress EOLs
+following \dqp{@\{}.
+
+\thing{Pragma syntax:} It is not clear how \dq{loose} the syntax of pragmas
+should be. Perhaps they should be case insensitive.\xx{pragma}{syntax}
+
+\thing{Conditionals:} Depending on demand, it may be worth reintroducing
+some sort of conditional feature into FunnelWeb. However, it would have to
+be very simple to compete with the various ways in which conditionals
+can already be fudged within FunnelWeb as it stands.\x{conditionals}
+
+\thing{File markers:} It might be worth modifying the language so that
+a special syntactical marker is required at the start and end of files.
+This will assist in detecting truncations and other
+corruptions.\xx{file}{markers}
+
+\thing{Formal parameter lists:} It might be worth changing over to a
+syntax for formal parameter lists that does not require the \p{@(} and
+\p{@)}. However, they could be retained as optional for backward
+compatibility.\xx{parameter list}{formal}
+
+\section{Scanner/Mapper}
+\x{scanner}\x{mapper}
+
+\thing{All non-contiguous mappings:} Currently FunnelWeb requires that all
+input files be mapped into a contiguous lump of memory. This caused problems
+for two reasons. First, to do this, one has to allocate the memory first,
+and to do that, you have to know how long the file is, and it turns out that
+finding out the length of a file in a portable manner is very inefficient.
+Second, although IBM PC compatibles may have megabytes of memory, it is
+segmented into blocks of at most 64K. This means that FunnelWeb currently
+cannot read a file longer than 64K on a PC.\xx{contiguous}{memory}
+
+These problems could be avoided if the mapper and scanner were reorganized to
+allow input files to be read in and stored as a linked list of chunks of text
+rather than a contiguous block.
+
+\thing{EOL is unspecifiable:} FunnelWeb uses ASCII character decimal ten (10)
+internally to represent logical end-of-line and is currently organized so that
+if one of these is inserted into the text by the user using a
+\dqp{@\circumflex{}D(10)}, it will be written out as a logical end of line,
+rather than as a single ASCII character 10. This should be
+fixed.\xx{representation}{EOL}
+
+\thing{Allow mnemonics for unprintables:} FunnelWeb allows users to insert
+unprintable characters into the output using the \dqp{@\circumflex{}D(ddd)}
+special sequence. Perhaps it would be changed so that it understands ASCII
+standard mnemonics such as \dqp{LF} as well as ASCII
+numbers.\xx{ASCII}{mnemonics}
+
+\thing{Version pragma:} A \dqp{version} pragma should be added that allows
+the user to specify in the input file the version of FunnelWeb that was
+around when the input file was created. At a later date, such a construct
+would be very useful for determining how an input file should be updated
+if the FunnelWeb language has changed between
+versions.\xx{version}{pragma}
+
+\section{Parser}
+\x{parser}
+
+There are no proposals to change the parser except as a consequence of
+other proposals.
+
+\section{Analyser}
+\x{analyser}
+
+\thing{Recursion detection:} Currently the FunnelWeb analyser flags, with
+an error, all macros with an infinite expansion. This would be best
+changed to flagging all macros that are directly or indirectly recursive.
+To do this, Tarjan's algorithm\paper{Tarjan72}\xn{Robert Endre}{Tarjan}
+for the detection of strong components should
+be installed.\xx{recursion}{detection}
+
+\thing{Once only macros:} By default FunnelWeb prevents a macro from being
+called more than once unless it has a \dqp{@M} associated with it. However,
+FunnelWeb does allow a macro that calls such a macro to be called more
+than once. Perhaps this \dq{loophole} should be plugged somehow.
+
+
+\section{Tangle}
+\x{tangle}
+
+The Tangler is one of the cleanest components of FunnelWeb, as basically all it
+has to do is expand some very well-defined macros.
+
+\thing{Text indentation:} Currently FunnelWeb supports \i{no indentation}
+and \i{blank indentation}. A third form could be added if it was considered
+necessary. \i{Text indentation} is the same as \i{blank indentation} except
+that instead of indenting with blanks, FunnelWeb would indent with the
+text to the left of the called macro. This facility could be useful for
+commenting out large bodies of text in languages that do not have
+multi-line comments (e.g. Ada). A discussion of the pros and cons of this
+form of indentation appears earlier.\xx{text}{indentation}
+
+\section{Weave}
+\x{weave}
+
+Perhaps FunnelWeb's weakest aspect is its typesetting facility.
+
+
+\thing{Align table of contents:} When FunnelWeb generates a table of contents,
+the section numbers are not quite aligned with the start of the controlling
+heading above them.\x{table of contents}
+
+\thing{Typesetting strength:} It should be possible to specify the
+level of typesetting strength for headings so that short documents do not
+look overdone when typeset. A new pragma would be good for
+this.\xx{strength}{typesetting}
+
+\thing{Typeset a portion:} Sometimes it is desirable to typeset just a
+portion of a program. A command line option could be added to do
+this. The option could accept as its argument, a string containing a list
+of section numbers or heading names.
+
+\thing{Generic typesetter option:} In addition to building in a number
+of different versions of Weave, one for each popular typesetter, it would be
+possible to add a special generic format where the typeset output is
+expressed in terms of \i{FunnelWeb macros}. The user could then specify
+macro definitions for a non-supported typesetter and run the output
+through FunnelWeb Tangle to get a typeset file in a format suitable for the
+unsupported typesetter.\xx{typesetter}{generic}
+
+\thing{Suppression of include files:} It should be possible to specify
+in the input file that particular included files not appear in the
+typeset output. Currently, the fact that an inclusion has occurred is
+not even represented in the typeset output. Suppression of inclusions
+is particularly necessary where a library of macros has been included
+at the top of each of a group of source files.\xx{include file}{suppression}
+
+\thing{Cross reference of identifiers:} WEB provides a list of identifiers
+and a list of all the definitions in which they are used. A similar
+feature could be added to FunnelWeb.\xx{cross}{references}
+
+\thing{Support for non-printables:} Currently FunnelWeb does not provide
+support for typesetting the special \dqp{@\circumflex(num)} sequences.
+This should be added.
+
+\thing{Support for @+ sequences:} Currently Weave does not see \dqp{@+}
+sequences as such. Instead it perceives them as ordinary EOLs. However,
+there are arguments for typesetting them specially.
+
+\thing{Typeset text in macro bodies:} One of the much-loved features
+of WEB is the way that it allows the user to switch recursively between
+document and program formats. FunnelWeb does not allow this, but
+should. In FunnelWeb, the delimiters \dqp{@\{} and \dqp{@\}} are already
+used consistently to delimit macro text. The \dqp{@[} and \dqp{@]} sequences
+have been reserved for the delimitation of documentation text.
+
+\thing{Non-tt typesetting:} The current version of FunnelWeb sets all its
+macro text in \p{tt font}. This is both a blessing and a curse. It is a
+blessing because it connects the reader directly to the code, with no
+complicated intermediary. It is a curse because it looks ugly compared to
+the beautifully typeset programs produced by other literate programming
+tools.
+
+The difficulty with adding such beautiful typesetting is that it is
+necessarily language-specific. Keywords and syntax differ from language
+to language and it would not be easy to come up with a set of language
+independent rules.
+
+One approach is to write a set of Weave back-ends, one for each language.
+Another approach is to \i{generate} back ends. This is the approach
+taken in the \i{Spider} system\paper{Ramsey89}.\x{spider}
+In the \i{Spider} system,
+the programmer writes production rules for converting lexical components
+of the program text into typesetter instructions. The \i{Spider} program
+reads these rules and generates a new version of WEB suited for the target
+language.
+
+For FunnelWeb a slightly different system is proposed in which Spider-like
+rules appear in the input file and are used directly by Weave to perform the
+typesetting. An intermediate abstract typesetting language could be used
+so that the productions can be made language specific, but not typesetter
+specific.
+
+\section{Lister}
+\x{lister}
+
+\thing{Glue factor:} A glue factor could be added that determines how many
+lines can be in between two diagnostics in the listing before the two
+groups of lines are joined together in the listing with no intervening
+ellipsis.\xx{glue}{factor}
+
+\section{Diagnostics}
+\x{diagnostics}
+
+\thing{Advisory information:} Some of FunnelWeb's diagnostics provide
+a detailed explanatory paragraph. While this information might be useful the
+first time, it has the capacity to clog up a listing file if the user has
+made the same error many times. To solve this problem, FunnelWeb could be
+modified so that such explanations are only displayed the first time the
+error occurs.
+
+\thing{Abort after n errors:} A facility could be added to prevent
+FunnelWeb's scanning, parsing, and analysing phases from continuing if
+a certain number of errors have already been issued.
+
+
+\section{Speed}
+\x{speed}\x{efficiency}
+
+\thing{Measurement of speed:} Although FunnelWeb can generate a breakdown
+of where it is spending its time, it does not give a final rating in
+lines per minute. This should be added.
+
+\thing{Find the hot spots:} Although FunnelWeb has been designed to allow
+high speed, not much effort has so far been made to make it fast. This should
+be done.
+
+\thing{Change some declarations:} FunnelWeb is full of variable declarations
+where the variables are wider than they need be. Replacing these might speed
+it up.
+
+\section{Correctness}
+\x{correctness}
+
+\thing{Bounds analysis:} Not much effort has gone into the design of
+FunnelWeb's input boundaries. An analysis should be made of FunnelWeb's
+behaviour when the following quantities are stretched:
+
+\begin{itemize}
+\item Input line length.
+\item Input file size.
+\item Number of macros.
+\item Length of macro.
+\end{itemize}
+
+In particular, FunnelWeb's behaviour at 32K and 64K boundaries should be
+observed.
+
+\thing{Stack detection:} Macintosh THINK-C provides just 6K of memory for
+the stack. It might be worth adding checks to make sure that the stack is
+not being blown.
+
+\section{Test Suite}
+\xx{test}{suite}
+
+The following tests should be added to the test suite:
+
+\begin{verbatim}
+Lister
+------
+ LR01: Test with a full listing with no diagnostics.
+ LR02: Test with a full listing with diagnostics.
+ LR03: Test with an abbreviated listing with no diagnostics.
+ LR04: Test with an abbreviated listing with diagnostics.
+ LR05: Test error context system with nearby diagnostics.
+
+Boundary Cases
+--------------
+Static analysis might preclude the need for most of these tests.
+ BC01: Test what happens when memory runs out.
+ BC02: Test on a file with a single line of a megabyte.
+ BC03: Test on a file of a megabyte of EOLs.
+ BC04: Generate an output file with an extremely long line.
+ BC05: Generate an output file with one million lines.
+ BC06: Test on a file with very many macros.
+
+General
+-------
+ GN01: A large legal input file exercising as many features as possible.
+ 1. Test listing file.
+ 2. Test output files.
+ 3. Test typeset file.
+ GN... A selection of ten real-life FunnelWeb files.
+\end{verbatim}
+
+\section{Machine-Specific Changes}
+
+\thing{Icon for the Macintosh:} Currently no icon is supplied for the
+Macintosh version of FunnelWeb. An icon depicting a spider or a funnelled
+web of some kind would seem appropriate.
+
+\section{Summary}
+
+This chapter has describes some of the problems with FunnelWeb and some of the
+opportunities that exist for improving it. The direction and speed in which
+FunnelWeb will develop will depend largely on user feedback. If you have any
+strong feelings on where FunnelWeb should go, please email them to
+Ross Williams (\p{ross@spam.adelaide.edu.au}).
+
+
+%==============================================================================%
+% Start of Ch4.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_cha.tex b/web/funnelAC/hackman/h_cha.tex
new file mode 100644
index 0000000000..9098358be5
--- /dev/null
+++ b/web/funnelAC/hackman/h_cha.tex
@@ -0,0 +1,441 @@
+%==============================================================================%
+% Start of Cha.tex %
+%==============================================================================%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+% This file contains a chapter of the FunnelWeb Hacker's Manual.
+% See the main TeX file for this manual for further information.
+%
+%==============================================================================%
+
+\appendix
+
+%==============================================================================
+
+\chapter{GNU General Public License Version 2}
+\xx{GNU}{License}
+
+This appendix contains a verbatim copy of Version~2 of the GNU
+General Public License under which the FunnelWeb computer program is
+released. Note that the \i{FunnelWeb User's Manual} and
+\i{FunnelWeb Hacker's
+Manual} are released under a much simpler license that does not allow
+modifications.
+
+\bigskip
+
+\hrule
+
+\bigskip
+
+\begin{verbatim}
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
+ type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+\end{verbatim}
+
+\bigskip
+
+\hrule
+
+%==============================================================================
+
+\chapter{References}
+\x{references}
+
+\paper{ANSI} Australian Standard AS~3955-1991, \dq{Programming Languages --- C},
+(ISBN: 0-7262-6970-0), 12~July~1991. Identical to:
+International Standard ISO/IEC 9899:
+1990 Programming Languages --- C.\checked{}
+
+\paper{Bentley86} Bentley~J., \dq{Programming Pearls: Literate Programming},
+\i{Communications of the ACM}, Vol.~29, No.~5, pp.~364--369, 1986.\checked{}
+
+\paper{Hoare80} Hoare~C.A.R., \dq{The Emperor's Old Clothes},
+Turing Award Lecture, 1980, from \dq{ACM Turing Award Lectures: The
+First Twenty Years 1966--1985},
+ACM Press, New York, (ISBN: 0-201-07794-9), 1987 (see p.~155).\checked{}
+
+\paper{Horton90} Horton~M.R., \dq{Portable C Software},
+Prentice Hall, (ISBN: 0-13-868050-7), 1990.\checked{}
+
+\paper{Kernighan88} Kernighan~B.W., Ritchie~D.M., \dq{The~C Programming
+Language}, (second edition,\dq{ANSI~C}), Prentice Hall,
+(ISBN: 0-13-110362-8), 1988.\checked{}
+
+\paper{Knuth83} Knuth~D.E., \dq{The WEB System of Structured
+Documentation}, (Web User Manual, Version~2.5, November, 1983),
+Stanford University, 1983.\checked{}
+
+\paper{Knuth84} Knuth~D.E., \dq{The \TeX{}book}, Addison-Wesley,
+(ISBN: 0-201-13448-9), 1984.
+
+\paper{Lamport86} Lamport~L., \dq{\LaTeX{}: A Document Preparation System},
+Addison-Wesley, (ISBN: 0-201-15790-X),
+1986.\checked{}
+
+\paper{Rabinowitz90} Rabinowitz~H., Schaap~C., \dq{Portable~C}, Prentice Hall,
+(ISBN:0-13-685967-4) 1990.\checked{}
+
+\paper{Ramsey89} Ramsey~N., \dq{Weaving a Language-Independent WEB},
+\i{Communications of the ACM}, Vol.~32, No.~9, pp.~1051--1055, 1989.\checked{}
+
+\paper{Tarjan72} Tarjan~R.E.,
+\dq{Depth-First Search and Linear Graph Algorithms},
+\i{SIAM Journal of Computing}, Vol.~1, No.~2, pp.~146--160,
+June 1972.\checked{}
+
+\paper{USDOD83} \dq{The Programming Language Ada Reference Manual},
+American National Standards Institute Inc,
+ANSI/MIL-STD-1815A-1983, 1983.\checked{}
+
+%==============================================================================
+
+\addcontentsline{toc}{chapter}{Index}
+\def\indexentry#1#2{\item #1~#2}
+\begin{theindex}
+\input h_manual.sin
+\end{theindex}
+
+%==============================================================================%
+% End of Cha.tex %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_manual.aux b/web/funnelAC/hackman/h_manual.aux
new file mode 100644
index 0000000000..fc25ea43c0
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.aux
@@ -0,0 +1,80 @@
+\relax
+\@writefile{toc}{\string\contentsline\space {chapter}{Preface}{5}}
+\@writefile{toc}{\string\contentsline\space {chapter}{Acknowledgements}{7}}
+\@writefile{toc}{\string\contentsline\space {chapter}{Presentation Notes}{9}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {1}FunnelWeb Design}{11}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\newlabel{chapdesign}{{1}{11}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.1}Motivation for FunnelWeb}{11}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.2}Indentation}{12}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.3}Review of FunnelWeb Syntax}{14}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.1}Review of Macro Definition Syntax}{14}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.2}Review of Macro Call Syntax}{16}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.3.3}Review of Parameterized Macro Call Syntax}{16}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.4}Document Structuring}{16}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.5}Discussion of Some Miscellaneous Issues}{18}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.6}Automated Regression Testing}{18}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.7}Command Line Interface}{18}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.8}File Name Management}{19}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.8.1}Filename Extensions}{20}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.8.2}Filename Inheritance}{20}}
+\@writefile{toc}{\string\contentsline\space {subsection}{\string\numberline\space {1.8.3}Portable Structure of File Names}{21}}
+\newlabel{portablefilenames}{{1.8.3}{21}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.9}Specifying Constraints on the Number of Instantiations}{22}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.10}The Relationship Between Document Structure and Macro Structure}{23}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.11}Diagnostic Messages}{25}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {1.12}Summary}{25}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {2}FunnelWeb Implementation}{27}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\newlabel{chapimplementation}{{2}{27}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.1}Introduction}{27}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.2}History of FunnelWeb Implementations}{27}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.3}Why FunnelWeb Wasn't Used to Write Itself}{28}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.4}Coding Style}{28}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.5}Use of Memory}{29}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.6}The Heap}{29}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.7}The Stack}{30}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.8}Static Variables}{30}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {2.9}Implementing Text Indentation}{30}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {3}FunnelWeb Modification}{35}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\newlabel{chapmod}{{3}{35}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.1}Introduction}{35}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.2}The Danger of Modifying Languages}{35}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.3}Authority vs User Security}{36}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.4}What I Want to Protect}{37}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.5}Modifying the Manuals}{38}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.6}How Copyright Law Works}{38}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.7}Management of the Official FunnelWeb}{39}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.8}A GNU Version?}{41}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {3.9}Summary}{41}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {4}FunnelWeb Future}{43}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\newlabel{chapfuture}{{4}{43}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.1}Documentation}{43}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.2}Command Line Interface}{43}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.3}Shell Interpreter}{43}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.4}Language Design}{44}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.5}Scanner/Mapper}{44}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.6}Parser}{45}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.7}Analyser}{45}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.8}Tangle}{45}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.9}Weave}{45}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.10}Lister}{46}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.11}Diagnostics}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.12}Speed}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.13}Correctness}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.14}Test Suite}{47}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.15}Machine-Specific Changes}{48}}
+\@writefile{toc}{\string\contentsline\space {section}{\string\numberline\space {4.16}Summary}{48}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {A}GNU General Public License Version 2}{49}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\@writefile{toc}{\string\contentsline\space {chapter}{\string\numberline\space {B}References}{57}}
+\@writefile{lof}{\string\addvspace\space {10pt}}
+\@writefile{lot}{\string\addvspace\space {10pt}}
+\@writefile{toc}{\string\contentsline\space {chapter}{Index}{57}}
diff --git a/web/funnelAC/hackman/h_manual.dvi b/web/funnelAC/hackman/h_manual.dvi
new file mode 100644
index 0000000000..956cf6322e
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.dvi
Binary files differ
diff --git a/web/funnelAC/hackman/h_manual.idx b/web/funnelAC/hackman/h_manual.idx
new file mode 100644
index 0000000000..3ba19d0562
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.idx
@@ -0,0 +1,326 @@
+\indexentry{Ross Williams}{1}
+\indexentry{Williams Ross}{1}
+\indexentry{copyright notice}{1}
+\indexentry{notice copyright}{1}
+\indexentry{preface}{5}
+\indexentry{acknowledgements}{7}
+\indexentry{David Hulse}{7}
+\indexentry{Hulse David}{7}
+\indexentry{Ada}{7}
+\indexentry{Simon Hackett}{7}
+\indexentry{Hackett Simon}{7}
+\indexentry{Jeremy Begg}{7}
+\indexentry{Begg Jeremy}{7}
+\indexentry{Barry Dwyer}{7}
+\indexentry{Dwyer Barry}{7}
+\indexentry{Roger Brissenden}{7}
+\indexentry{Brissenden Roger}{7}
+\indexentry{Donald Knuth}{7}
+\indexentry{Knuth Donald}{7}
+\indexentry{presentation notes}{9}
+\indexentry{typesetting}{9}
+\indexentry{Andrew Trevorrow}{9}
+\indexentry{Trevorrow Andrew}{9}
+\indexentry{OzTeX}{9}
+\indexentry{Knuth84}{9}
+\indexentry{Lamport86}{9}
+\indexentry{TeX}{9}
+\indexentry{LaTeX}{9}
+\indexentry{Macintosh}{9}
+\indexentry{LaTeX}{9}
+\indexentry{FunnelWeb design}{11}
+\indexentry{design FunnelWeb}{11}
+\indexentry{FunnelWeb V1}{11}
+\indexentry{backwards compatibility}{11}
+\indexentry{compatibility backwards}{11}
+\indexentry{FunnelWeb motivation}{11}
+\indexentry{motivation FunnelWeb}{11}
+\indexentry{Donald Knuth}{11}
+\indexentry{Knuth Donald}{11}
+\indexentry{Jon Bentley}{11}
+\indexentry{Bentley Jon}{11}
+\indexentry{programming pearls}{11}
+\indexentry{Communications of the ACM}{11}
+\indexentry{Bentley86}{11}
+\indexentry{Knuth83}{11}
+\indexentry{Pascal}{12}
+\indexentry{number output files}{12}
+\indexentry{output files number}{12}
+\indexentry{indentation}{12}
+\indexentry{Occam's razor}{12}
+\indexentry{indentation}{12}
+\indexentry{indentation no}{12}
+\indexentry{no indentation}{12}
+\indexentry{indentation blank}{12}
+\indexentry{blank indentation}{12}
+\indexentry{indentation text}{12}
+\indexentry{text indentation}{12}
+\indexentry{indented macro call}{12}
+\indexentry{no indentation}{12}
+\indexentry{blank indentation}{12}
+\indexentry{text indentation}{12}
+\indexentry{DCL}{13}
+\indexentry{indentation dangers}{13}
+\indexentry{dangers indentation}{13}
+\indexentry{FunnelWeb syntax}{14}
+\indexentry{syntax FunnelWeb}{14}
+\indexentry{==}{14}
+\indexentry{macro definition syntax}{14}
+\indexentry{syntax macro definition}{14}
+\indexentry{parameterized macro definitions syntax}{15}
+\indexentry{syntax parameterized macro definitions}{15}
+\indexentry{macro call syntax}{16}
+\indexentry{syntax macro call}{16}
+\indexentry{parameterized macro call syntax}{16}
+\indexentry{syntax parameterized macro call}{16}
+\indexentry{document structure}{16}
+\indexentry{structure document}{16}
+\indexentry{headings}{16}
+\indexentry{sections}{16}
+\indexentry{miscellaneous issues}{18}
+\indexentry{issues miscellaneous}{18}
+\indexentry{comment duplication}{18}
+\indexentry{duplication comment}{18}
+\indexentry{out of date documentation}{18}
+\indexentry{documentation out of date}{18}
+\indexentry{regression testing}{18}
+\indexentry{testing regression}{18}
+\indexentry{command line interface}{18}
+\indexentry{interface command line}{18}
+\indexentry{Ada}{18}
+\indexentry{vms vax}{18}
+\indexentry{vax vms}{18}
+\indexentry{.cld file}{18}
+\indexentry{file .cld}{18}
+\indexentry{design goals command line interface}{19}
+\indexentry{command line interface design goals}{19}
+\indexentry{file names}{19}
+\indexentry{names file}{19}
+\indexentry{filename extensions}{20}
+\indexentry{extensions filename}{20}
+\indexentry{filename inheritance}{20}
+\indexentry{inheritance filename}{20}
+\indexentry{file names}{21}
+\indexentry{names file}{21}
+\indexentry{portable filenames}{21}
+\indexentry{filenames portable}{21}
+\indexentry{invocations number}{22}
+\indexentry{number invocations}{22}
+\indexentry{@Z}{23}
+\indexentry{@M}{23}
+\indexentry{document structure macro structure}{23}
+\indexentry{macro structure document structure}{23}
+\indexentry{document structure}{23}
+\indexentry{structure document}{23}
+\indexentry{macro structure}{23}
+\indexentry{structure macro}{23}
+\indexentry{hierarchical structure}{23}
+\indexentry{structure hierarchical}{23}
+\indexentry{TeX}{23}
+\indexentry{section numbering}{23}
+\indexentry{numbering section}{23}
+\indexentry{diagnostic messages}{25}
+\indexentry{messages diagnostic}{25}
+\indexentry{FunnelWeb implementation}{27}
+\indexentry{implementation FunnelWeb}{27}
+\indexentry{FunnelWeb history}{27}
+\indexentry{history FunnelWeb}{27}
+\indexentry{FunnelWeb version 1}{27}
+\indexentry{FunnelWeb version 2}{27}
+\indexentry{FunnelWeb version 3}{27}
+\indexentry{Ada}{27}
+\indexentry{USDOD83}{27}
+\indexentry{Ph.D.}{27}
+\indexentry{FunnelWeb past use}{27}
+\indexentry{past use FunnelWeb}{27}
+\indexentry{David Hulse}{27}
+\indexentry{Hulse David}{27}
+\indexentry{University Adelaide}{27}
+\indexentry{Adelaide University}{27}
+\indexentry{FunnelWeb writing itself}{28}
+\indexentry{writing itself FunnelWeb}{28}
+\indexentry{trouble asking for}{28}
+\indexentry{asking for trouble}{28}
+\indexentry{coding style}{28}
+\indexentry{style coding}{28}
+\indexentry{South Australian Government Department of Lands}{28}
+\indexentry{portability}{28}
+\indexentry{Rabinowitz90}{28}
+\indexentry{Horton90}{28}
+\indexentry{Kernighan88}{28}
+\indexentry{ANSI}{28}
+\indexentry{Rabinowitz90}{28}
+\indexentry{identifier}{28}
+\indexentry{identifier abbreviations}{28}
+\indexentry{abbreviations identifier}{28}
+\indexentry{pointers naming}{29}
+\indexentry{naming pointers}{29}
+\indexentry{types naming}{29}
+\indexentry{naming types}{29}
+\indexentry{filenames length}{29}
+\indexentry{length filenames}{29}
+\indexentry{MSDOS}{29}
+\indexentry{use of memory}{29}
+\indexentry{memory use of}{29}
+\indexentry{heap memory}{29}
+\indexentry{memory heap}{29}
+\indexentry{Macintosh}{29}
+\indexentry{malloc}{29}
+\indexentry{memory package}{29}
+\indexentry{package memory}{29}
+\indexentry{memory leakage}{30}
+\indexentry{leakage memory}{30}
+\indexentry{stack memory}{30}
+\indexentry{memory stack}{30}
+\indexentry{stack size}{30}
+\indexentry{size stack}{30}
+\indexentry{memory static}{30}
+\indexentry{static memory}{30}
+\indexentry{static variables}{30}
+\indexentry{variables static}{30}
+\indexentry{Macintosh}{30}
+\indexentry{ThinkC compiler}{30}
+\indexentry{compiler ThinkC}{30}
+\indexentry{text indentation}{30}
+\indexentry{indentation text}{30}
+\indexentry{FunnelWeb modification}{35}
+\indexentry{modification FunnelWeb}{35}
+\indexentry{GNU license}{35}
+\indexentry{license GNU}{35}
+\indexentry{changes dangers}{35}
+\indexentry{dangers changes}{35}
+\indexentry{languages dangers}{35}
+\indexentry{dangers languages}{35}
+\indexentry{video game}{35}
+\indexentry{compiler}{35}
+\indexentry{removing features}{35}
+\indexentry{features removing}{35}
+\indexentry{features modification}{35}
+\indexentry{modification features}{35}
+\indexentry{features adding}{36}
+\indexentry{adding features}{36}
+\indexentry{Hoare80}{36}
+\indexentry{genealogy program}{36}
+\indexentry{program genealogy}{36}
+\indexentry{design authority}{36}
+\indexentry{authority design}{36}
+\indexentry{Unix}{36}
+\indexentry{security authority}{36}
+\indexentry{authority security}{36}
+\indexentry{trademark}{36}
+\indexentry{program availability}{37}
+\indexentry{availability program}{37}
+\indexentry{protection FunnelWeb}{37}
+\indexentry{FunnelWeb protection}{37}
+\indexentry{protection file extension}{37}
+\indexentry{file extension protection}{37}
+\indexentry{modifying manuals}{38}
+\indexentry{manuals modifying}{38}
+\indexentry{copyright law}{38}
+\indexentry{law copyright}{38}
+\indexentry{work}{38}
+\indexentry{copyright}{38}
+\indexentry{license}{38}
+\indexentry{derived work}{38}
+\indexentry{GNU license}{39}
+\indexentry{license GNU}{39}
+\indexentry{FunnelWeb management}{39}
+\indexentry{management FunnelWeb}{39}
+\indexentry{FunnelWeb official}{39}
+\indexentry{official FunnelWeb}{39}
+\indexentry{GNU version}{41}
+\indexentry{version GNU}{41}
+\indexentry{GNU breakout}{41}
+\indexentry{breakout, GNU}{41}
+\indexentry{FunnelWeb future}{43}
+\indexentry{future FunnelWeb}{43}
+\indexentry{documentation}{43}
+\indexentry{official example}{43}
+\indexentry{example official}{43}
+\indexentry{index program}{43}
+\indexentry{program index}{43}
+\indexentry{command interface}{43}
+\indexentry{interface command}{43}
+\indexentry{antiquated features}{43}
+\indexentry{features antiquated}{43}
+\indexentry{shell interpreter}{43}
+\indexentry{interpreter shell}{43}
+\indexentry{command interpreter}{43}
+\indexentry{interpreter command}{43}
+\indexentry{options}{43}
+\indexentry{setall command}{43}
+\indexentry{command setall}{43}
+\indexentry{recursion test}{43}
+\indexentry{test recursion}{43}
+\indexentry{diagnostic counting}{43}
+\indexentry{counting diagnostic}{43}
+\indexentry{make}{44}
+\indexentry{signature file}{44}
+\indexentry{file signature}{44}
+\indexentry{language design}{44}
+\indexentry{design language}{44}
+\indexentry{section syntax}{44}
+\indexentry{syntax section}{44}
+\indexentry{pragma syntax}{44}
+\indexentry{syntax pragma}{44}
+\indexentry{conditionals}{44}
+\indexentry{file markers}{44}
+\indexentry{markers file}{44}
+\indexentry{parameter list formal}{44}
+\indexentry{formal parameter list}{44}
+\indexentry{scanner}{44}
+\indexentry{mapper}{44}
+\indexentry{contiguous memory}{45}
+\indexentry{memory contiguous}{45}
+\indexentry{representation EOL}{45}
+\indexentry{EOL representation}{45}
+\indexentry{ASCII mnemonics}{45}
+\indexentry{mnemonics ASCII}{45}
+\indexentry{version pragma}{45}
+\indexentry{pragma version}{45}
+\indexentry{parser}{45}
+\indexentry{analyser}{45}
+\indexentry{Tarjan72}{45}
+\indexentry{Robert Endre Tarjan}{45}
+\indexentry{Tarjan Robert Endre}{45}
+\indexentry{recursion detection}{45}
+\indexentry{detection recursion}{45}
+\indexentry{tangle}{45}
+\indexentry{text indentation}{45}
+\indexentry{indentation text}{45}
+\indexentry{weave}{45}
+\indexentry{table of contents}{45}
+\indexentry{strength typesetting}{46}
+\indexentry{typesetting strength}{46}
+\indexentry{typesetter generic}{46}
+\indexentry{generic typesetter}{46}
+\indexentry{include file suppression}{46}
+\indexentry{suppression include file}{46}
+\indexentry{cross references}{46}
+\indexentry{references cross}{46}
+\indexentry{Ramsey89}{46}
+\indexentry{spider}{46}
+\indexentry{lister}{46}
+\indexentry{glue factor}{46}
+\indexentry{factor glue}{46}
+\indexentry{diagnostics}{47}
+\indexentry{speed}{47}
+\indexentry{efficiency}{47}
+\indexentry{correctness}{47}
+\indexentry{test suite}{47}
+\indexentry{suite test}{47}
+\indexentry{GNU License}{49}
+\indexentry{License GNU}{49}
+\indexentry{references}{57}
+\indexentry{ANSI}{57}
+\indexentry{Bentley86}{57}
+\indexentry{Hoare80}{57}
+\indexentry{Horton90}{57}
+\indexentry{Kernighan88}{57}
+\indexentry{Knuth83}{57}
+\indexentry{Knuth84}{57}
+\indexentry{Lamport86}{57}
+\indexentry{Rabinowitz90}{57}
+\indexentry{Ramsey89}{57}
+\indexentry{Tarjan72}{57}
+\indexentry{USDOD83}{57}
diff --git a/web/funnelAC/hackman/h_manual.log b/web/funnelAC/hackman/h_manual.log
new file mode 100644
index 0000000000..c536c1cd23
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.log
@@ -0,0 +1,213 @@
+This is TeX, Version 3.0 (preloaded format=lplain 90.9.16) 27 MAY 1992 12:56
+**&LaTeX h_manual.tex
+(h_manual.tex
+LaTeX Version 2.09 <13 Jun 1989>
+(:TeX-inputs:book.sty
+Document Style `book' <24 May 89>.
+(:TeX-inputs:bk10.sty)
+\descriptionmargin=\dimen99
+\c@part=\count78
+\c@chapter=\count79
+\c@section=\count80
+\c@subsection=\count81
+\c@subsubsection=\count82
+\c@paragraph=\count83
+\c@subparagraph=\count84
+\c@figure=\count85
+\c@table=\count86
+) (:TeX-inputs:titlepage.sty) [0
+
+
+]
+\@indexfile=\write3
+
+Writing index file h_manual.idx
+(h_manual.aux)
+(h_ch0.tex [1] [2
+
+] (h_manual.toc [3])
+\tf@toc=\write4
+ [4] [5
+
+] [6
+
+]
+Underfull \hbox (badness 10000) in paragraph at lines 120--123
+[]\tenrm Thanks to \tenbf Barry Dwyer[][] \tenrm (\tentt dwyer@cs.adelaide.edu.
+au\tenrm ) and \tenbf Roger Bris-senden[][]
+
+\hbox(7.5+2.5)x426.79134, glue set 5.25278
+.\hbox(0.0+0.0)x0.0
+.\tenrm T
+.\tenrm h
+.\tenrm a
+.\tenrm n
+.etc.
+
+[7] [8
+
+]
+Underfull \hbox (badness 5652) in paragraph at lines 146--152
+[]\tenbf Typesetting: \tenrm This[] doc-u-ment was pre-pared by the au-thor us-
+ing An-drew Trevor-
+
+\hbox(6.94444+1.94444)x426.79134, glue set 3.83969
+.\hbox(0.0+0.0)x0.0
+.\tenbf T
+.\kern-0.31944
+.\tenbf y
+.\tenbf p
+.etc.
+
+
+Underfull \hbox (badness 1117) in paragraph at lines 146--152
+\tenrm row's[][] (\tentt akt150@cscgpo.anu.edu.au\tenrm ) im-ple-men-ta-tion (O
+z-TeX[]) of the T[]X/L[]T[]X\tenbf [Knuth84][]
+
+\hbox(7.5+3.01385)x426.79134, glue set 2.23746
+.\tenrm r
+.\tenrm o
+.\kern-0.27779
+.\tenrm w
+.\tenrm '
+.etc.
+
+) (h_ch1.tex [9] [10
+
+]
+Chapter 1.
+[11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24])
+(h_ch2.tex [25] [26
+
+]
+Chapter 2.
+[27] [28] [29] [30] [31] [32]) (h_ch3.tex [33] [34
+
+]
+Chapter 3.
+[35] [36] [37] [38] [39] [40]) (h_ch4.tex [41] [42
+
+]
+Chapter 4.
+[43] [44] [45] [46] [47]) (h_cha.tex [48]
+Appendix A.
+[49
+
+]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 10.0
+.\hbox(0.0+0.0)x0.0
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 5.88889
+.\hbox(6.11111+2.22223)x426.79134, glue set 80.29436fil
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..\glue 5.24995
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.etc.
+
+ [50]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 10.0
+.\hbox(0.0+0.0)x0.0
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 5.88889
+.\hbox(6.11111+2.22223)x426.79134, glue set 64.5445fil
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..\glue 5.24995
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.etc.
+
+ [51]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 3.88889
+.\hbox(6.11111+0.0)x426.79134, glue set 64.5445fil
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..\glue 5.24995
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 5.88889
+.\hbox(6.11111+2.22223)x426.79134, glue set 164.29362fil
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..\glue 5.24995
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.etc.
+
+ [52]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 3.88889
+.\hbox(6.11111+2.22223)x426.79134, glue set 59.29454fil
+..\hbox(0.0+0.0)x0.0
+..\tentt L
+..\tentt i
+..\tentt c
+..\tentt e
+..etc.
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 3.66666
+.\hbox(6.11111+2.22223)x426.79134, glue set 90.79427fil
+..\hbox(0.0+0.0)x0.0
+..\tentt m
+..\tentt a
+..\tentt y
+..\penalty 10000
+..etc.
+.etc.
+
+ [53]
+Underfull \vbox (badness 10000) has occurred while \output is active
+\vbox(682.86613+0.0)x426.79134
+.\glue(\topskip) 3.88889
+.\hbox(6.11111+1.38887)x426.79134, glue set 38.29472fil
+..\hbox(0.0+0.0)x0.0
+..\penalty 10000
+..\glue 5.24995
+..\penalty 10000
+..\glue 5.24995
+..etc.
+.\glue(\parskip) 0.0
+.\glue(\baselineskip) 4.50002
+.\hbox(6.11111+1.38887)x426.79134, glue set 48.79463fil
+..\hbox(0.0+0.0)x0.0
+..\tentt F
+..\tentt O
+..\tentt R
+..\penalty 10000
+..etc.
+.etc.
+
+ [54]
+[55] [56
+
+]
+Appendix B.
+[57] (h_manual.sin [58
+
+] [59] [60]) [61
+
+]) (h_manual.aux) )
+Here is how much of TeX's memory you used:
+ 220 strings out of 1960
+ 1908 string characters out of 13235
+ 54264 words of memory out of 60001
+ 2151 multiletter control sequences out of 2500
+ 19914 words of font info for 75 fonts, out of 27000 for 100
+ 14 hyphenation exceptions out of 307
+ 15i,6n,15p,200b,226s stack positions out of 200i,40n,60p,500b,600s
+
+Output written on h_manual.dvi (62 pages, 181584 bytes).
diff --git a/web/funnelAC/hackman/h_manual.ps b/web/funnelAC/hackman/h_manual.ps
new file mode 100644
index 0000000000..3fa3273717
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.ps
@@ -0,0 +1,5210 @@
+%!PS-Adobe-2.0
+%%Creator: dvips 5.493 Copyright 1986, 1992 Radical Eye Software
+%%Title: h_manual.dvi
+%%CreationDate: Sat Aug 14 17:07:29 1993
+%%Pages: 62
+%%PageOrder: Ascend
+%%BoundingBox: 0 0 612 792
+%%EndComments
+%DVIPSCommandLine: dvips h_manual
+%DVIPSSource: TeX output 1993.08.14:1707
+%%BeginProcSet: tex.pro
+/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N /X{S N}
+B /TR{translate}N /isls false N /vsize 11 72 mul N /@rigin{isls{[0 -1 1 0 0 0]
+concat}if 72 Resolution div 72 VResolution div neg scale isls{Resolution hsize
+-72 div mul 0 TR}if Resolution VResolution vsize -72 div 1 add mul TR matrix
+currentmatrix dup dup 4 get round 4 exch put dup dup 5 get round 5 exch put
+setmatrix}N /@landscape{/isls true N}B /@manualfeed{statusdict /manualfeed
+true put}B /@copies{/#copies X}B /FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N
+/IE 0 N /ctr 0 N /df-tail{/nn 8 dict N nn begin /FontType 3 N /FontMatrix
+fntrx N /FontBBox FBB N string /base X array /BitMaps X /BuildChar{
+CharBuilder}N /Encoding IE N end dup{/foo setfont}2 array copy cvx N load 0 nn
+put /ctr 0 N[}B /df{/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0
+0 sf neg 0 0]N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data
+dup length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{128
+ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub get 127
+sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data dup type
+/stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N /rc 0 N /gp 0 N
+/cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup /base get 2 index get
+S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx 0 ch-xoff ch-yoff ch-height
+sub ch-xoff ch-width add ch-yoff setcachedevice ch-width ch-height true[1 0 0
+-1 -.1 ch-xoff sub ch-yoff .1 add]{ch-image}imagemask restore}B /D{/cc X dup
+type /stringtype ne{]}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1
+ne{dup dup length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}
+B /I{cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin
+0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul add
+.99 lt{/FV}{/RV}ifelse load def pop pop}N /eop{SI restore showpage userdict
+/eop-hook known{eop-hook}if}N /@start{userdict /start-hook known{start-hook}
+if pop /VResolution X /Resolution X 1000 div /DVImag X /IE 256 array N 0 1 255
+{IE S 1 string dup 0 3 index put cvn put}for 65781.76 div /vsize X 65781.76
+div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 0]N /BDot 260 string N /rulex 0 N
+/ruley 0 N /v{/ruley X /rulex X V}B /V{}B /RV statusdict begin /product where{
+pop product dup length 7 ge{0 7 getinterval dup(Display)eq exch 0 4
+getinterval(NeXT)eq or}{pop false}ifelse}{false}ifelse end{{gsave TR -.1 -.1
+TR 1 1 scale rulex ruley false RMat{BDot}imagemask grestore}}{{gsave TR -.1
+-.1 TR rulex ruley scale 1 1 false RMat{BDot}imagemask grestore}}ifelse B /FV{
+gsave transform round exch round exch itransform moveto rulex 0 rlineto 0
+ruley neg rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N
+/tail{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M}
+B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{4 M}B
+/w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{p 1 w}B /r{
+p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p a}B /bos{/SS save
+N}B /eos{SS restore}B end
+%%EndProcSet
+TeXDict begin 40258437 52099154 1000 300 300
+(/users/onl2/coates/startup/tmp/funnelweb/hackman/h_manual.dvi)
+@start /Fa 37 123 df<000FF000007FFC0001F80E0003E01F0007C03F000F803F000F803F00
+0F801E000F800C000F8000000F8000000F8000000F800000FFFFFF00FFFFFF000F801F000F801F
+000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F801F000F80
+1F000F801F000F801F000F801F000F801F000F801F000F801F007FF0FFE07FF0FFE01B237FA21F
+>12 D<387CFEFEFE7C3807077C8610>46 D<00180000780001F800FFF800FFF80001F80001F800
+01F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F800
+01F80001F80001F80001F80001F80001F80001F80001F80001F80001F8007FFFE07FFFE013207C
+9F1C>49 D<03FC000FFF003C1FC07007E07C07F0FE03F0FE03F8FE03F8FE01F87C01F83803F800
+03F80003F00003F00007E00007C0000F80001F00003E0000380000700000E01801C01803801807
+00180E00380FFFF01FFFF03FFFF07FFFF0FFFFF0FFFFF015207D9F1C>I<00FE0007FFC00F07E0
+1E03F03F03F03F81F83F81F83F81F81F03F81F03F00003F00003E00007C0001F8001FE0001FF00
+0007C00001F00001F80000FC0000FC3C00FE7E00FEFF00FEFF00FEFF00FEFF00FC7E01FC7801F8
+1E07F00FFFC001FE0017207E9F1C>I<00FE0003FFC00703E00E00F01C00F01C00783C00783E00
+783F00783F80783FE0F01FF9E01FFFC00FFF8007FFC003FFE007FFF01E7FF83C1FFC7807FC7801
+FEF000FEF0003EF0001EF0001EF0001CF8001C7800383C00381F01F00FFFC001FF0017207E9F1C
+>56 D<0003FE0080001FFF818000FF01E38001F8003F8003E0001F8007C0000F800F800007801F
+800007803F000003803F000003807F000001807E000001807E00000180FE00000000FE00000000
+FE00000000FE00000000FE00000000FE00000000FE00000000FE000000007E000000007E000001
+807F000001803F000001803F000003801F800003000F8000030007C000060003F0000C0001F800
+380000FF00F000001FFFC0000003FE000021227DA128>67 D<FFFFFF8000FFFFFFF00007F003FC
+0007F0007E0007F0003F0007F0001F8007F0000FC007F00007E007F00007E007F00007F007F000
+03F007F00003F007F00003F007F00003F807F00003F807F00003F807F00003F807F00003F807F0
+0003F807F00003F807F00003F807F00003F807F00003F007F00003F007F00003F007F00007E007
+F00007E007F0000FC007F0001F8007F0003F0007F0007E0007F003FC00FFFFFFF000FFFFFF8000
+25227EA12B>I<FFFFFFFCFFFFFFFC07F000FC07F0003C07F0001C07F0000C07F0000E07F0000E
+07F0000607F0180607F0180607F0180607F0180007F0380007F0780007FFF80007FFF80007F078
+0007F0380007F0180007F0180007F0180307F0180307F0000307F0000607F0000607F0000607F0
+000E07F0000E07F0001E07F0003E07F001FCFFFFFFFCFFFFFFFC20227EA125>I<FFFFFFF8FFFF
+FFF807F001F807F0007807F0003807F0001807F0001C07F0001C07F0000C07F0000C07F0180C07
+F0180C07F0180007F0180007F0380007F0780007FFF80007FFF80007F0780007F0380007F01800
+07F0180007F0180007F0180007F0000007F0000007F0000007F0000007F0000007F0000007F000
+0007F00000FFFFE000FFFFE0001E227EA123>I<FFFFE0FFFFE003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003
+F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F80003F800FF
+FFE0FFFFE013227FA115>73 D<FFF000000FFFFFF800001FFF07F800001FE006FC000037E006FC
+000037E006FC000037E0067E000067E0067E000067E0063F0000C7E0063F0000C7E0061F800187
+E0061F800187E0060FC00307E0060FC00307E0060FC00307E00607E00607E00607E00607E00603
+F00C07E00603F00C07E00601F81807E00601F81807E00601F81807E00600FC3007E00600FC3007
+E006007E6007E006007E6007E006003FC007E006003FC007E006001F8007E006001F8007E00600
+1F8007E006000F0007E0FFF00F00FFFFFFF00600FFFF30227EA135>77 D<FFF8001FFEFFFC001F
+FE07FC0000C007FE0000C006FF0000C0067F8000C0063FC000C0061FE000C0060FE000C0060FF0
+00C00607F800C00603FC00C00601FE00C00600FE00C00600FF00C006007F80C006003FC0C00600
+1FE0C006000FF0C0060007F0C0060007F8C0060003FCC0060001FEC0060000FFC00600007FC006
+00007FC00600003FC00600001FC00600000FC006000007C006000003C006000003C0FFF00001C0
+FFF00000C027227EA12C>I<FFFFFF00FFFFFFE007F007F007F001FC07F000FC07F0007E07F000
+7E07F0007F07F0007F07F0007F07F0007F07F0007F07F0007E07F0007E07F000FC07F001FC07F0
+07F007FFFFE007FFFF0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007
+F0000007F0000007F0000007F0000007F0000007F00000FFFF8000FFFF800020227EA126>80
+D<FFFFFE0000FFFFFFC00007F007F00007F001F80007F000FC0007F0007E0007F0007F0007F000
+7F0007F0007F0007F0007F0007F0007F0007F0007F0007F0007E0007F000FC0007F001F80007F0
+07F00007FFFFC00007FFFF800007F00FE00007F007F00007F003F80007F001FC0007F001FC0007
+F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0607F000FE06
+07F000FF0CFFFF803FF8FFFF800FF027227EA12A>82 D<01FC0407FF8C1F03FC3C007C7C003C78
+001C78001CF8000CF8000CFC000CFC0000FF0000FFE0007FFF007FFFC03FFFF01FFFF80FFFFC03
+FFFE003FFE0003FF00007F00003F00003FC0001FC0001FC0001FE0001EE0001EF0003CFC003CFF
+00F8C7FFE080FF8018227DA11F>I<07FC001FFF803F07C03F03E03F01E03F01F01E01F00001F0
+0001F0003FF003FDF01FC1F03F01F07E01F0FC01F0FC01F0FC01F0FC01F07E02F07E0CF81FF87F
+07E03F18167E951B>97 D<FF000000FF0000001F0000001F0000001F0000001F0000001F000000
+1F0000001F0000001F0000001F0000001F0000001F0000001F0FE0001F3FF8001FF07C001F801E
+001F001F001F000F801F000F801F000FC01F000FC01F000FC01F000FC01F000FC01F000FC01F00
+0FC01F000FC01F000F801F001F801F801F001FC03E001EE07C001C3FF800180FC0001A237EA21F
+>I<00FF8007FFE00F83F01F03F03E03F07E03F07C01E07C0000FC0000FC0000FC0000FC0000FC
+0000FC00007C00007E00007E00003E00301F00600FC0E007FF8000FE0014167E9519>I<0001FE
+000001FE0000003E0000003E0000003E0000003E0000003E0000003E0000003E0000003E000000
+3E0000003E0000003E0001FC3E0007FFBE000F81FE001F007E003E003E007E003E007C003E00FC
+003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E00FC003E007C003E007C003E00
+3E007E001E00FE000F83BE0007FF3FC001FC3FC01A237EA21F>I<00FE0007FF800F87C01E01E0
+3E01F07C00F07C00F8FC00F8FC00F8FFFFF8FFFFF8FC0000FC0000FC00007C00007C00007E0000
+3E00181F00300FC07003FFC000FF0015167E951A>I<003F8000FFC001E3E003C7E007C7E00F87
+E00F83C00F80000F80000F80000F80000F80000F8000FFFC00FFFC000F80000F80000F80000F80
+000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F80
+000F80007FF8007FF80013237FA211>I<FF000000FF0000001F0000001F0000001F0000001F00
+00001F0000001F0000001F0000001F0000001F0000001F0000001F0000001F07E0001F1FF8001F
+307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E001F003E00
+1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FFC0FFE1FF
+C01A237EA21F>104 D<1C003E007F007F007F003E001C000000000000000000000000000000FF
+00FF001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+FFE0FFE00B247EA310>I<FF00FF001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00FF
+E0FFE00B237EA210>108 D<FF07F007F000FF1FFC1FFC001F303E303E001F403E403E001F801F
+801F001F801F801F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F001F001F00FFE0FFE0FFE0FFE0FFE0FFE02B167E9530>I<FF07E000FF
+1FF8001F307C001F403C001F803E001F803E001F003E001F003E001F003E001F003E001F003E00
+1F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E00FFE1FF
+C0FFE1FFC01A167E951F>I<00FE0007FFC00F83E01E00F03E00F87C007C7C007C7C007CFC007E
+FC007EFC007EFC007EFC007EFC007EFC007E7C007C7C007C3E00F81F01F00F83E007FFC000FE00
+17167E951C>I<FE1F00FE3FC01E67E01EC7E01E87E01E87E01F83C01F00001F00001F00001F00
+001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00013167E9517
+>114 D<0FF3003FFF00781F00600700E00300E00300F00300FC00007FE0007FF8003FFE000FFF
+0001FF00000F80C00780C00380E00380E00380F00700FC0E00EFFC00C7F00011167E9516>I<01
+80000180000180000180000380000380000780000780000F80003F8000FFFF00FFFF000F80000F
+80000F80000F80000F80000F80000F80000F80000F80000F80000F80000F81800F81800F81800F
+81800F81800F830007C30003FE0000F80011207F9F16>I<FF01FE00FF01FE001F003E001F003E
+001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F003E001F00
+3E001F003E001F003E001F003E001F007E001F00FE000F81BE0007FF3FC001FC3FC01A167E951F
+>I<FFE01FE0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001
+F0300001F0300000F8600000F86000007CC000007CC000007FC000003F8000003F8000001F0000
+001F0000000E0000000E00001B167F951E>I<FFE7FF07F8FFE7FF07F81F007800C00F80780180
+0F807C01800F807C018007C07E030007C0DE030007E0DE070003E0DF060003E18F060001F18F0C
+0001F38F8C0001FB079C0000FB07D80000FE03D800007E03F000007E03F000007C01F000003C01
+E000003800E000001800C00025167F9528>I<FFE07FC0FFE07FC00F801C0007C0380003E07000
+03F0600001F8C00000F98000007F8000003F0000001F0000001F8000003FC0000037C0000063E0
+0000C1F00001C0F8000380FC0007007E000E003E00FF80FFE0FF80FFE01B167F951E>I<FFE01F
+E0FFE01FE00F8006000F8006000FC00E0007C00C0007E01C0003E0180003E0180001F0300001F0
+300000F8600000F86000007CC000007CC000007FC000003F8000003F8000001F0000001F000000
+0E0000000E0000000C0000000C00000018000078180000FC380000FC300000FC60000069C00000
+7F8000001F0000001B207F951E>I<7FFFF07FFFF07C03E07007C0600FC0E01F80C01F00C03E00
+C07E0000FC0000F80001F00003F03007E03007C0300F80701F80703F00603E00E07C03E0FFFFE0
+FFFFE014167E9519>I E /Fb 44 122 df<00FCF807839C0E079C1C07081C07001C07001C0700
+1C07001C0700FFFFE01C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700
+1C07001C0700FF1FE01617809615>11 D<00FC000782000E07001C07001C02001C00001C00001C
+00001C0000FFFF001C07001C07001C07001C07001C07001C07001C07001C07001C07001C07001C
+07001C0700FF1FE01317809614>I<60F0F070101020204040040A7D830A>44
+D<60F0F06004047D830A>46 D<03000700FF000700070007000700070007000700070007000700
+07000700070007000700070007007FF00C157E9412>49 D<01F00608080C181C301C70006000E0
+00E3E0EC30F018F00CE00EE00EE00E600E600E300C3018183007C00F157F9412>54
+D<07E018302018600C600C700C78183E101F600FC00FF018F8607C601EC00EC006C006C004600C
+38300FE00F157F9412>56 D<07C0183030186018E00CE00CE00EE00EE00E601E301E186E0F8E00
+0E000C001C70187018603020C01F800F157F9412>I<001000003800003800003800005C00005C
+00005C00008E00008E00008E0001070001070003078002038002038007FFC00401C00401C00800
+E00800E01800E03800F0FE03FE17177F961A>65 D<00FC100383300E00B01C0070380030300030
+700010600010E00010E00000E00000E00000E00000E00000E00010600010700010300020380020
+1C00400E008003830000FC0014177E9619>67 D<FFFFE01C00E01C00601C00201C00101C00101C
+00101C04001C04001C04001C0C001FFC001C0C001C04001C04001C04001C00001C00001C00001C
+00001C00001C0000FFC00014177F9617>70 D<007E080381980600580C00381800183000187000
+08700008E00008E00000E00000E00000E00000E003FEE000387000387000383000381800380C00
+380600380380D8007F0817177E961C>I<FF83FE1C00701C00701C00701C00701C00701C00701C
+00701C00701C00701C00701FFFF01C00701C00701C00701C00701C00701C00701C00701C00701C
+00701C0070FF83FE17177F961A>I<FFE00E000E000E000E000E000E000E000E000E000E000E00
+0E000E000E000E000E000E000E000E000E000E00FFE00B177F960D>I<FE0003F81E0003C01700
+05C0170005C0170005C0138009C0138009C011C011C011C011C011C011C010E021C010E021C010
+7041C0107041C0107041C0103881C0103881C0101D01C0101D01C0100E01C0100E01C0380E01C0
+FE040FF81D177F9620>77 D<FC00FE1E00381F001017001013801011C01011C01010E010107010
+103810103810101C10100E10100F101007101003901001D01001D01000F0100070100030380030
+FE001017177F961A>I<00FC000303000E01C01C00E0380070300030700038600018E0001CE000
+1CE0001CE0001CE0001CE0001CE0001C7000387000383000303800701C00E00E01C003030000FC
+0016177E961B>I<7FFFF860381840380840380880380480380480380400380000380000380000
+380000380000380000380000380000380000380000380000380000380000380000380007FFC016
+177F9619>84 D<FF80FE1C00381C00101C00101C00101C00101C00101C00101C00101C00101C00
+101C00101C00101C00101C00101C00101C00101C00100E0020060020030040018180007E001717
+7F961A>I<FF07FC3F803C01E00E001C00E004001C00E004001C017004000E017008000E017008
+000E023808000702381000070238100007041C100003841C200003841C200003880E200001C80E
+400001C80E400001D80F400000F007800000F007800000F0078000006003000000600300000060
+03000021177F9624>87 D<1FC0386038301038003803F81E3830387038E039E039E07970FF1F1E
+100E7F8D12>97 D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001CF8001F
+06001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C03001B0E0010F80012
+17809614>I<07F01838303870106000E000E000E000E000600070083008183007C00D0E7F8D10>
+I<007E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C3E00300E00700E
+00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007CFC012177F9614>I<0F
+C0186030307038E018FFF8E000E000E000600070083010183007C00D0E7F8D10>I<03E006700E
+701C201C001C001C001C001C00FF801C001C001C001C001C001C001C001C001C001C001C001C00
+FF800C1780960B>I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600E
+C006C006C006600C38380FE010157F8D12>I<FC00001C00001C00001C00001C00001C00001C00
+001C00001C00001C7C001D8E001E07001C07001C07001C07001C07001C07001C07001C07001C07
+001C07001C0700FF9FE01317809614>I<183C3C1800000000007C1C1C1C1C1C1C1C1C1C1C1C1C
+FF081780960A>I<0300078007800300000000000000000000001F800380038003800380038003
+800380038003800380038003800380038003804380E300E7007C00091D82960B>I<FC00001C00
+001C00001C00001C00001C00001C00001C00001C00001C3F801C1C001C18001C20001C40001CC0
+001FE0001CF0001C70001C78001C3C001C1E001C1E00FF3FC01217809613>I<FC001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80
+091780960A>I<FC7C1F001D8E63801E0781C01C0701C01C0701C01C0701C01C0701C01C0701C0
+1C0701C01C0701C01C0701C01C0701C01C0701C0FF9FE7F81D0E808D1E>I<FC7C001D8E001E07
+001C07001C07001C07001C07001C07001C07001C07001C07001C07001C0700FF9FE0130E808D14
+>I<07C018303018600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12>I<FCF800
+1F0E001C03001C03801C01801C01C01C01C01C01C01C01C01C01801C03801C07001F0E001CF800
+1C00001C00001C00001C00001C0000FF80001214808D14>I<07C2001C2600381E00700E00600E
+00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007CE00000E00000E00000E00000E
+00000E00007FC012147F8D13>I<FCF01D381E381C101C001C001C001C001C001C001C001C001C
+00FF800D0E808D0E>I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B
+0E7F8D0E>I<080008000800180018003800FF8038003800380038003800380038003840384038
+4038401C800F000A147F930E>I<FC3F001C07001C07001C07001C07001C07001C07001C07001C
+07001C07001C07001C0F000E170003E7E0130E808D14>I<FE1F3C0E3C0C1C081C080E100E1007
+20072003C003C003C001800180100E7F8D13>I<FCFE7C3838383838101C3C201C3C201C4C200E
+4E400E4E400E8640078780078780070380030300030300160E7F8D19>I<FE1F3C0E3C0C1C081C
+080E100E100720072003C003C003C00180018001000100E200E200A400780010147F8D13>121
+D E /Fc 1 50 df<0C003C00CC000C000C000C000C000C000C000C000C000C000C000C000C00FF
+8009107E8F0F>49 D E /Fd 1 50 df<0C001C00EC000C000C000C000C000C000C000C000C000C
+000C000C000C000C000C000C00FFC00A137D9211>49 D E /Fe 59 122
+df<0001FF0000001FFFC000007F80F00000FC00F80001F801F80003F803FC0007F003FC0007F0
+03FC0007F003FC0007F001F80007F000F00007F000000007F000000007F000000007F0000000FF
+FFFFFC00FFFFFFFC00FFFFFFFC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC00
+07F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC
+0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001FC0007F001
+FC007FFF1FFFC07FFF1FFFC07FFF1FFFC0222A7FA926>12 D<0001FF803FE000001FFFE3FFF800
+007F80FFF01E0000FE007F801F0001F800FF003F0003F801FF007F8007F001FE007F8007F001FE
+007F8007F001FE007F8007F000FE003F0007F000FE001E0007F000FE00000007F000FE00000007
+F000FE00000007F000FE000000FFFFFFFFFFFF80FFFFFFFFFFFF80FFFFFFFFFFFF8007F000FE00
+3F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F0
+00FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F
+8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000FE003F8007F000
+FE003F8007F000FE003F8007F000FE003F8007F000FE003F807FFF0FFFE3FFF87FFF0FFFE3FFF8
+7FFF0FFFE3FFF8352A7FA939>14 D<1C007F007F00FF80FFC0FFC07FC07FC01CC000C000C00180
+018001800300030006000C001800300020000A157BA913>39 D<FFFF80FFFF80FFFF80FFFF80FF
+FF80FFFF8011067F9017>45 D<1C003E007F00FF80FF80FF807F003E001C0009097B8813>I<00
+000300000007800000078000000F8000000F0000000F0000001F0000001E0000003E0000003C00
+00003C0000007C0000007800000078000000F8000000F0000001F0000001E0000001E0000003E0
+000003C0000003C0000007C00000078000000F8000000F0000000F0000001F0000001E0000003E
+0000003C0000003C0000007C0000007800000078000000F8000000F0000001F0000001E0000001
+E0000003E0000003C0000003C0000007C00000078000000F8000000F0000000F0000001F000000
+1E0000001E0000003E0000003C0000007C0000007800000078000000F8000000F0000000F00000
+0060000000193C7CAC22>I<003F800001FFF00007E0FC000FC07E001F803F001F803F003F001F
+803F001F807F001FC07F001FC07F001FC07F001FC0FF001FE0FF001FE0FF001FE0FF001FE0FF00
+1FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF001FE0FF
+001FE07F001FC07F001FC07F001FC07F001FC03F001F803F001F801F803F001F803F000FC07E00
+07E0FC0001FFF000003F80001B277DA622>I<000E00001E00007E0007FE00FFFE00FFFE00F8FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE007FFFFE7FFFFE7FFFFE17277BA622>I<00FF800003FFF0000FFFFC001F
+03FE003800FF007C007F80FE003FC0FF003FC0FF003FE0FF001FE0FF001FE07E001FE03C003FE0
+00003FE000003FC000003FC000007F8000007F000000FE000000FC000001F8000003F0000003E0
+0000078000000F0000001E0000003C00E0007000E000E000E001C001C0038001C0070001C00FFF
+FFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FF
+F00007FFFC000F81FE001F00FF003F80FF003F807F803F807F803F807F801F807F800F007F8000
+00FF000000FF000000FE000001FC000001F8000007F00000FFC00000FFF0000001FC0000007E00
+00007F0000007F8000003FC000003FC000003FE000003FE03C003FE07E003FE0FF003FE0FF003F
+E0FF003FC0FF007FC07E007F807C007F003F01FE001FFFFC0007FFF00000FF80001B277DA622>
+I<00000E0000001E0000003E0000007E000000FE000000FE000001FE000003FE0000077E00000E
+7E00000E7E00001C7E0000387E0000707E0000E07E0000E07E0001C07E0003807E0007007E000E
+007E000E007E001C007E0038007E0070007E00E0007E00FFFFFFF8FFFFFFF8FFFFFFF80000FE00
+0000FE000000FE000000FE000000FE000000FE000000FE000000FE00007FFFF8007FFFF8007FFF
+F81D277EA622>I<0C0003000F803F000FFFFE000FFFFC000FFFF8000FFFF0000FFFE0000FFFC0
+000FFE00000E0000000E0000000E0000000E0000000E0000000E0000000E7FC0000FFFF8000F80
+FC000E003E000C003F0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE
+001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFF800
+03FFF00000FF80001B277DA622>I<0007F000003FFC0000FFFE0001FC0F0003F01F8007E03F80
+0FC03F801FC03F801F803F803F801F003F8000007F0000007F0000007F000000FF000000FF0FC0
+00FF3FF800FF707C00FFC03E00FFC03F00FF801F80FF801FC0FF001FC0FF001FE0FF001FE0FF00
+1FE07F001FE07F001FE07F001FE07F001FE03F001FE03F001FC01F801FC01F803F800FC03F0007
+E07E0003FFFC0000FFF000003FC0001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03F
+FFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000
+E000E0000000E0000001C000000380000007800000078000000F0000000F0000001F0000001F00
+00003F0000003E0000003E0000007E0000007E0000007E0000007E000000FE000000FE000000FE
+000000FE000000FE000000FE000000FE000000FE0000007C0000003800001C297CA822>I<003F
+C00001FFF00003FFFC0007C07E000F003F001E001F001E000F803E000F803E000F803F000F803F
+000F803FC00F003FF01F001FFC1E001FFE3C000FFFF80007FFE00003FFF80001FFFC0001FFFE00
+07FFFF000F0FFF801E03FFC03C01FFC07C007FE078001FE0F80007E0F80007E0F80003E0F80003
+E0F80003E0F80003C07C0003C07C0007803F000F001FC03E000FFFFC0003FFF800007FC0001B27
+7DA622>I<007F800001FFF00007FFF8000FE0FC001F807E003F803F007F003F007F001F80FF00
+1F80FF001FC0FF001FC0FF001FC0FF001FE0FF001FE0FF001FE0FF001FE07F001FE07F003FE03F
+003FE01F807FE00F807FE007C1DFE003FF9FE0007E1FE000001FE000001FC000001FC000001FC0
+00003F801F003F803F803F003F803F003F807E003F807C001F01F8001E03F0000FFFE00007FF80
+0001FE00001B277DA622>I<01FF000FFFE01E03F03801F87801FCFC01FEFE01FEFE01FEFE01FE
+7C01FE3801FC0003F80007F00007C0000F80001F00001E00003C00003800003800007800007000
+00700000700000700000700000700000000000000000000000000000000000000000700000F800
+01FC0003FE0003FE0003FE0001FC0000F800007000172A7CA920>63 D<000003800000000007C0
+0000000007C0000000000FE0000000000FE0000000000FE0000000001FF0000000001FF0000000
+003FF8000000003FF8000000003FF80000000073FC0000000073FC00000000F3FE00000000E1FE
+00000000E1FE00000001C0FF00000001C0FF00000003C0FF80000003807F80000007807FC00000
+07003FC0000007003FC000000E003FE000000E001FE000001E001FF000001C000FF000001FFFFF
+F000003FFFFFF800003FFFFFF80000780007FC0000700003FC0000700003FC0000E00001FE0000
+E00001FE0001E00001FF0001C00000FF0001C00000FF00FFFE001FFFFEFFFE001FFFFEFFFE001F
+FFFE2F297EA834>65 D<FFFFFFF80000FFFFFFFF8000FFFFFFFFC00003F8001FF00003F8000FF8
+0003F80007FC0003F80003FC0003F80003FC0003F80003FE0003F80001FE0003F80001FE0003F8
+0001FE0003F80003FE0003F80003FC0003F80003FC0003F80007F80003F8000FF00003F8001FE0
+0003F800FFC00003FFFFFE000003FFFFFFE00003F80007F00003F80003FC0003F80001FE0003F8
+0001FE0003F80000FF0003F80000FF0003F80000FF8003F80000FF8003F80000FF8003F80000FF
+8003F80000FF8003F80000FF8003F80000FF0003F80001FF0003F80003FE0003F80007FC0003F8
+001FF800FFFFFFFFF000FFFFFFFFC000FFFFFFFE000029297DA831>I<00003FF001800003FFFE
+0380000FFFFF8780003FF007DF8000FF8001FF8001FE00007F8003FC00003F8007F000001F800F
+F000000F801FE0000007801FE0000007803FC0000007803FC0000003807FC0000003807F800000
+03807F8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF
+8000000000FF8000000000FF8000000000FF80000000007F80000000007F80000000007FC00000
+03803FC0000003803FC0000003801FE0000003801FE0000007000FF00000070007F000000E0003
+FC00001E0001FE00003C0000FF8000F800003FF007E000000FFFFFC0000003FFFF000000003FF8
+000029297CA832>I<FFFFFFF80000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0007FC00
+03FC0001FE0003FC0000FF0003FC00007F8003FC00003FC003FC00001FC003FC00001FE003FC00
+001FE003FC00000FF003FC00000FF003FC00000FF003FC00000FF003FC00000FF803FC00000FF8
+03FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00000FF803FC00
+000FF803FC00000FF803FC00000FF003FC00000FF003FC00000FF003FC00001FE003FC00001FE0
+03FC00001FC003FC00003FC003FC00007F8003FC00007F0003FC0001FE0003FC0003FC0003FC00
+1FF800FFFFFFFFE000FFFFFFFF8000FFFFFFFC00002D297DA835>I<FFFFFFFFC0FFFFFFFFC0FF
+FFFFFFC003FC003FC003FC000FE003FC0003E003FC0001E003FC0001E003FC0000E003FC0000E0
+03FC0000E003FC0000F003FC03807003FC03807003FC03807003FC03800003FC07800003FC0780
+0003FC1F800003FFFF800003FFFF800003FFFF800003FC1F800003FC07800003FC07800003FC03
+800003FC03800003FC03800003FC03800003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC00000003FC000000FFFFFC0000FFFFFC0000FFFFFC000024
+297DA82B>70 D<00007FE003000003FFFC0700001FFFFF0F00003FF00FFF0000FF8001FF0001FE
+0000FF0003F800003F0007F000003F000FF000001F001FE000000F001FE000000F003FC000000F
+003FC0000007007FC0000007007F80000007007F8000000000FF8000000000FF8000000000FF80
+00000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8001FFFF
+F87F8001FFFFF87F8001FFFFF87FC00000FF003FC00000FF003FC00000FF001FE00000FF001FE0
+0000FF000FF00000FF0007F00000FF0003F80000FF0001FE0000FF0000FF8001FF00003FF007BF
+00001FFFFF1F000003FFFE0F0000007FF003002D297CA836>I<FFFFF01FFFFEFFFFF01FFFFEFF
+FFF01FFFFE03FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FFFFFFFF8003FFFFFFFF8003FFFFFFFF8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003
+FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC00007F8003FC0000
+7F8003FC00007F8003FC00007F8003FC00007F80FFFFF01FFFFEFFFFF01FFFFEFFFFF01FFFFE2F
+297DA836>I<FFFFFCFFFFFCFFFFFC01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE0001FE00
+01FE00FFFFFCFFFFFCFFFFFC16297EA81A>I<FFFFFC0000FFFFFC0000FFFFFC000003FC000000
+03FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC0000
+0003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC0001C003FC0001C003FC0001C003FC
+0001C003FC0003C003FC00038003FC00038003FC00078003FC00078003FC000F8003FC000F8003
+FC001F8003FC007F8003FC01FF00FFFFFFFF00FFFFFFFF00FFFFFFFF0022297DA829>76
+D<FFFE0000001FFFC0FFFE0000001FFFC0FFFF0000003FFFC003FF0000003FF00003FF0000003F
+F00003BF80000077F00003BF80000077F000039FC00000E7F000039FC00000E7F000038FE00001
+C7F000038FE00001C7F0000387F0000387F0000387F0000387F0000387F0000387F0000383F800
+0707F0000383F8000707F0000381FC000E07F0000381FC000E07F0000380FE001C07F0000380FE
+001C07F0000380FF003807F00003807F003807F00003807F003807F00003803F807007F0000380
+3F807007F00003801FC0E007F00003801FC0E007F00003800FE1C007F00003800FE1C007F00003
+800FE1C007F000038007F38007F000038007F38007F000038003FF0007F000038003FF0007F000
+038001FE0007F000038001FE0007F000038000FC0007F000038000FC0007F000FFFE00FC01FFFF
+C0FFFE007801FFFFC0FFFE007801FFFFC03A297DA841>I<FFFC0000FFFEFFFE0000FFFEFFFF00
+00FFFE03FF8000038003FF8000038003BFC0000380039FE0000380039FF0000380038FF8000380
+0387F80003800383FC0003800381FE0003800381FF0003800380FF80038003807FC0038003803F
+C0038003801FE0038003800FF0038003800FF80380038007FC0380038003FC0380038001FE0380
+038000FF0380038000FF83800380007FC3800380003FE3800380001FE3800380000FF380038000
+07FB8003800007FF8003800003FF8003800001FF8003800000FF80038000007F80038000007F80
+038000003F80038000001F80038000000F80FFFE00000780FFFE00000380FFFE000003802F297D
+A836>I<0000FFE000000007FFFC0000003FC07F8000007F001FC00001FC0007F00003F80003F8
+0007F00001FC000FF00001FE001FE00000FF001FE00000FF003FC000007F803FC000007F807FC0
+00007FC07F8000003FC07F8000003FC07F8000003FC0FF8000003FE0FF8000003FE0FF8000003F
+E0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF8000003FE0FF80
+00003FE07F8000003FC07FC000007FC07FC000007FC03FC000007F803FC000007F801FE00000FF
+001FE00000FF000FF00001FE0007F00001FC0003F80003F80001FC0007F00000FF001FE000003F
+C07F8000000FFFFE00000000FFE000002B297CA834>I<FFFFFFF800FFFFFFFF00FFFFFFFFC003
+FC003FE003FC000FF003FC0007F803FC0007FC03FC0003FC03FC0003FE03FC0003FE03FC0003FE
+03FC0003FE03FC0003FE03FC0003FE03FC0003FE03FC0003FC03FC0007FC03FC0007F803FC000F
+F003FC003FE003FFFFFF8003FFFFFE0003FC00000003FC00000003FC00000003FC00000003FC00
+000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC00000003FC
+00000003FC00000003FC00000003FC000000FFFFF00000FFFFF00000FFFFF0000027297DA82F>
+I<FFFFFFE00000FFFFFFFE0000FFFFFFFF800003FC007FE00003FC000FF00003FC0007F80003FC
+0007FC0003FC0003FC0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE0003FC0003FE
+0003FC0003FE0003FC0003FC0003FC0007F80003FC0007F80003FC001FE00003FC007FC00003FF
+FFFE000003FFFFF0000003FC00FC000003FC007F000003FC003F800003FC003F800003FC001FC0
+0003FC001FE00003FC001FE00003FC001FE00003FC001FE00003FC001FE00003FC001FF00003FC
+001FF00003FC001FF00003FC001FF00703FC001FF80703FC000FF80703FC0007F80EFFFFF003FE
+1CFFFFF001FFF8FFFFF0003FF030297DA834>82 D<007F806003FFF0E007FFF9E00F807FE01F00
+1FE03E0007E07C0003E07C0001E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FF
+C000007FFE00007FFFE0003FFFFC001FFFFE000FFFFF8007FFFFC003FFFFE000FFFFE00007FFF0
+00007FF000000FF8000007F8000003F8600001F8E00001F8E00001F8E00001F8F00001F0F00001
+F0F80003F0FC0003E0FF0007C0FFE01F80F3FFFF00E0FFFE00C01FF0001D297CA826>I<7FFFFF
+FFFFC07FFFFFFFFFC07FFFFFFFFFC07F803FC03FC07E003FC007C078003FC003C078003FC003C0
+70003FC001C0F0003FC001E0F0003FC001E0E0003FC000E0E0003FC000E0E0003FC000E0E0003F
+C000E0E0003FC000E000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003F
+C0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC0000000003FC00000
+00003FC0000000003FC0000000003FC0000000003FC00000007FFFFFE000007FFFFFE000007FFF
+FFE0002B287EA730>I<FFFFF001FFFCFFFFF001FFFCFFFFF001FFFC03FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC
+0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC
+0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC0000070003FC000007
+0001FC00000E0001FE00000E0000FE00001C00007E00001C00007F00003800003FC000F000000F
+F007E0000007FFFFC0000001FFFF000000001FF800002E297DA835>I<FFFFF0003FFF80FFFFF0
+003FFF80FFFFF0003FFF8003FE000001E00001FE000001C00001FF000003C00000FF0000038000
+00FF0000038000007F8000070000007F8000070000007FC0000F0000003FC0000E0000003FE000
+1E0000001FE0001C0000001FF0001C0000000FF000380000000FF0003800000007F80070000000
+07F8007000000007FC00F000000003FC00E000000003FE01E000000001FE01C000000001FF01C0
+00000000FF038000000000FF038000000000FF8780000000007F8700000000007FCF0000000000
+3FCE00000000003FFE00000000001FFC00000000001FFC00000000000FF800000000000FF80000
+0000000FF8000000000007F0000000000007F0000000000003E0000000000003E0000000000001
+C000000031297FA834>I<FFFFE07FFFF007FFF0FFFFE07FFFF007FFF0FFFFE07FFFF007FFF003
+FC0001FE00001C0003FC0001FE00001C0001FE0001FF0000380001FE0000FF0000380001FF0000
+FF0000780000FF0000FF8000700000FF0000FF8000700000FF8000FF8000F000007F8001FFC000
+E000007F8001FFC000E000003FC003FFE001C000003FC0039FE001C000003FE0039FE003C00000
+1FE0070FF0038000001FE0070FF0038000001FF00F0FF0078000000FF00E07F8070000000FF00E
+07F80700000007F81E07FC0E00000007F81C03FC0E00000007FC1C03FC1E00000003FC3801FE1C
+00000003FC3801FE1C00000001FE7801FF3800000001FE7000FF3800000001FE7000FF38000000
+00FFF000FFF000000000FFE0007FF000000000FFE0007FF0000000007FC0003FE0000000007FC0
+003FE0000000003FC0003FC0000000003F80001FC0000000003F80001FC0000000001F80001F80
+000000001F00000F80000000001F00000F80000000000E00000700000044297FA847>I<01FF80
+0007FFF0000F81F8001FC07E001FC07E001FC03F000F803F8007003F8000003F8000003F800000
+3F80000FFF8000FFFF8007FC3F800FE03F803F803F803F003F807F003F80FE003F80FE003F80FE
+003F80FE003F807E007F807F00DF803F839FFC0FFF0FFC01FC03FC1E1B7E9A21>97
+D<FFE0000000FFE0000000FFE00000000FE00000000FE00000000FE00000000FE00000000FE000
+00000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE1
+FE00000FE7FF80000FFE07E0000FF801F0000FF000F8000FE000FC000FE000FE000FE0007F000F
+E0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800FE0007F800FE0007F80
+0FE0007F800FE0007F000FE0007F000FE0007F000FE000FE000FE000FC000FF001F8000FF803F0
+000F9E07E0000F07FF80000E01FC0000212A7EA926>I<001FF80000FFFE0003F01F0007E03F80
+0FC03F801F803F803F801F007F800E007F0000007F000000FF000000FF000000FF000000FF0000
+00FF000000FF000000FF0000007F0000007F0000007F8000003F8001C01F8001C00FC0038007E0
+070003F01E0000FFFC00001FE0001A1B7E9A1F>I<00003FF80000003FF80000003FF800000003
+F800000003F800000003F800000003F800000003F800000003F800000003F800000003F8000000
+03F800000003F800000003F800000003F800001FE3F80000FFFBF80003F03FF80007E00FF8000F
+C007F8001F8003F8003F8003F8007F0003F8007F0003F8007F0003F800FF0003F800FF0003F800
+FF0003F800FF0003F800FF0003F800FF0003F800FF0003F8007F0003F8007F0003F8007F0003F8
+003F8003F8001F8003F8000F8007F80007C00FF80003F03BFF8000FFF3FF80003FC3FF80212A7E
+A926>I<003FE00001FFF80003F07E0007C01F000F801F801F800F803F800FC07F000FC07F0007
+C07F0007E0FF0007E0FF0007E0FFFFFFE0FFFFFFE0FF000000FF000000FF0000007F0000007F00
+00007F0000003F8000E01F8000E00FC001C007E0038003F81F0000FFFE00001FF0001B1B7E9A20
+>I<0007F0003FFC00FE3E01F87F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007
+F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007
+F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007
+F0007FFF807FFF807FFF80182A7EA915>I<00FF81F003FFE7F80FC1FE7C1F80FC7C1F007C383F
+007E107F007F007F007F007F007F007F007F007F007F007F007F003F007E001F007C001F80FC00
+0FC1F8001FFFE00018FF800038000000380000003C0000003E0000003FFFF8001FFFFF001FFFFF
+800FFFFFC007FFFFE01FFFFFF03E0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C00
+01F03C0001E01F0007C00FC01F8003FFFE00007FF0001E287E9A22>I<FFE0000000FFE0000000
+FFE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000
+000FE00000000FE00000000FE00000000FE00000000FE00000000FE07F00000FE1FFC0000FE787
+E0000FEE03F0000FF803F0000FF803F8000FF003F8000FF003F8000FE003F8000FE003F8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000F
+E003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80
+FFFE3FFF80212A7DA926>I<07000F801FC03FE03FE03FE01FC00F800700000000000000000000
+0000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7DAA14>I<FFE00000FFE00000FFE00000
+0FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000FE000
+000FE000000FE000000FE01FFC0FE01FFC0FE01FFC0FE007800FE00F000FE01E000FE03C000FE0
+78000FE0E0000FE3C0000FE7C0000FEFE0000FFFE0000FFFF0000FF3F8000FE3F8000FC1FC000F
+C0FE000FC07F000FC07F000FC03F800FC01FC00FC00FC00FC00FE0FFFC3FFEFFFC3FFEFFFC3FFE
+1F2A7EA924>107 D<FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0
+0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F
+E00FE00FE00FE00FE0FFFEFFFEFFFE0F2A7DA914>I<FFC07F800FF000FFC1FFE03FFC00FFC383
+F0707E000FC603F8C07F000FCC01F9803F000FD801FF003F800FF001FE003F800FF001FE003F80
+0FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC
+003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800F
+E001FC003F800FE001FC003F800FE001FC003F800FE001FC003F800FE001FC003F80FFFE1FFFC3
+FFF8FFFE1FFFC3FFF8FFFE1FFFC3FFF8351B7D9A3A>I<FFC07F0000FFC1FFC000FFC787E0000F
+CE03F0000FD803F0000FD803F8000FF003F8000FF003F8000FE003F8000FE003F8000FE003F800
+0FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8
+000FE003F8000FE003F8000FE003F8000FE003F8000FE003F800FFFE3FFF80FFFE3FFF80FFFE3F
+FF80211B7D9A26>I<003FE00001FFFC0003F07E000FC01F801F800FC03F800FE03F0007E07F00
+07F07F0007F07F0007F0FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF0007F8FF
+0007F87F0007F07F0007F03F800FE03F800FE01F800FC00FC01F8007F07F0001FFFC00003FE000
+1D1B7E9A22>I<FFE1FE0000FFE7FF8000FFFE07E0000FF803F0000FF001F8000FE000FC000FE0
+00FE000FE000FF000FE0007F000FE0007F000FE0007F800FE0007F800FE0007F800FE0007F800F
+E0007F800FE0007F800FE0007F800FE0007F000FE000FF000FE000FF000FE000FE000FE001FC00
+0FF001F8000FF803F0000FFE0FE0000FE7FF80000FE1FC00000FE00000000FE00000000FE00000
+000FE00000000FE00000000FE00000000FE00000000FE00000000FE0000000FFFE000000FFFE00
+0000FFFE00000021277E9A26>I<FFC1F0FFC7FCFFCE3E0FD87F0FD87F0FF07F0FF03E0FF01C0F
+E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000F
+E0000FE0000FE000FFFF00FFFF00FFFF00181B7E9A1C>114 D<03FE300FFFF01E03F03800F070
+0070F00070F00070F80070FC0000FFE0007FFE007FFF803FFFE01FFFF007FFF800FFF80003FC00
+00FC60007CE0003CF0003CF00038F80038FC0070FF01E0F7FFC0C1FF00161B7E9A1B>I<007000
+00700000700000700000F00000F00000F00001F00003F00003F00007F0001FFFF0FFFFF0FFFFF0
+07F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F000
+07F03807F03807F03807F03807F03807F03803F03803F87001F86000FFC0001F8015267FA51B>
+I<FFE03FF800FFE03FF800FFE03FF8000FE003F8000FE003F8000FE003F8000FE003F8000FE003
+F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE0
+03F8000FE003F8000FE003F8000FE003F8000FE003F8000FE003F8000FE007F80007E007F80007
+E00FF80003F03BFF8001FFF3FF80003FC3FF80211B7D9A26>I<FFFE03FF80FFFE03FF80FFFE03
+FF8007F000700007F000700007F800F00003F800E00003FC01E00001FC01C00001FC01C00000FE
+03800000FE038000007F070000007F070000007F8F0000003F8E0000003FDE0000001FDC000000
+1FDC0000000FF80000000FF80000000FF800000007F000000007F000000003E000000003E00000
+0001C00000211B7F9A24>I<FFFE7FFC0FFEFFFE7FFC0FFEFFFE7FFC0FFE0FE007E000E007F003
+F001C007F003F001C007F807F803C003F807F8038003F807F8038001FC0EFC070001FC0EFC0700
+01FE1EFC0F0000FE1C7E0E0000FE1C7E0E0000FF383F1E00007F383F1C00007F783F3C00003FF0
+1FB800003FF01FB800003FF01FF800001FE00FF000001FE00FF000000FC007E000000FC007E000
+000FC007E00000078003C00000078003C0002F1B7F9A32>I<FFFC0FFF00FFFC0FFF00FFFC0FFF
+0007F003C00003F807800001FC07800000FE0F000000FF1E0000007F3C0000003FF80000001FF0
+0000000FF00000000FF000000007F000000007F80000000FFC0000001FFE0000001EFE0000003C
+7F000000783F800000F01FC00001E01FE00001C00FE00003C007F000FFF01FFF80FFF01FFF80FF
+F01FFF80211B7F9A24>I<FFFE03FF80FFFE03FF80FFFE03FF8007F000700007F000700007F800
+F00003F800E00003FC01E00001FC01C00001FC01C00000FE03800000FE038000007F070000007F
+070000007F8F0000003F8E0000003FDE0000001FDC0000001FDC0000000FF80000000FF8000000
+0FF800000007F000000007F000000003E000000003E000000001C000000001C000000003800000
+000380000038078000007C07000000FE0F000000FE0E000000FE1E000000FE3C0000007C780000
+003FE00000000FC000000021277F9A24>I E /Ff 17 121 df<00001E000000003E00000000FE
+00000003FE0000003FFE0000FFFFFE0000FFFFFE0000FFFFFE0000FFCFFE0000000FFE0000000F
+FE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE000000
+0FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000
+000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE00
+00000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE
+0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000FFE0000000F
+FE0000000FFE0000000FFE00007FFFFFFFC07FFFFFFFC07FFFFFFFC07FFFFFFFC0223879B731>
+49 D<0007FE0000007FFFE00001FFFFF80003FFFFFE0007F01FFF000F8007FF801F0001FFC03E
+0000FFE07F8000FFF07FC0007FF0FFE0007FF8FFF0003FF8FFF0003FFCFFF0003FFCFFF0003FFC
+FFF0003FFC7FE0003FFC3FC0003FFC1F80003FFC0000003FFC0000003FF80000007FF80000007F
+F00000007FF0000000FFE0000000FFC0000001FF80000001FF00000003FE00000007FC00000007
+F80000000FF00000001FC00000003F800000007F00000000FC00000001F800000001F0003C0003
+E0003C0007C0003C000F000078001E000078003C00007800780000F800F00000F801FFFFFFF803
+FFFFFFF007FFFFFFF00FFFFFFFF01FFFFFFFF03FFFFFFFF07FFFFFFFF0FFFFFFFFF0FFFFFFFFE0
+FFFFFFFFE0FFFFFFFFE026387BB731>I<0003FF8000001FFFF000007FFFFE0000FE03FF0001F0
+00FF8003C000FFC00780007FE00FF0007FF00FF8007FF01FFC007FF81FFE007FF81FFE007FF81F
+FE007FF81FFE007FF81FFE007FF80FFC007FF007F8007FF003F0007FF0000000FFE0000000FFC0
+000001FF80000001FF00000003FE00000007FC0000001FF000000FFFC000000FFF8000000FFFF8
+00000003FE00000000FF800000007FE00000003FF00000003FF80000003FFC0000001FFC000000
+1FFE0000001FFE0200001FFF1FC0001FFF3FE0001FFF7FF0001FFF7FF0001FFFFFF8001FFFFFF8
+001FFFFFF8001FFEFFF8001FFEFFF0001FFE7FF0003FFC7FE0003FFC3FC0003FF81F80007FF01F
+E000FFE007FC03FFC003FFFFFF0001FFFFFE00003FFFF0000007FF800028397CB731>I<000000
+07C0000000000FC0000000000FC0000000001FC0000000003FC0000000007FC000000000FFC000
+000000FFC000000001FFC000000003FFC000000007FFC00000000FFFC00000000FFFC00000001E
+FFC00000003CFFC00000007CFFC0000000F8FFC0000000F0FFC0000001E0FFC0000003C0FFC000
+0007C0FFC000000F80FFC000000F00FFC000001E00FFC000003C00FFC000007C00FFC00000F800
+FFC00000F000FFC00001E000FFC00003C000FFC00007C000FFC0000F8000FFC0000F0000FFC000
+1E0000FFC0003C0000FFC0007C0000FFC000F80000FFC000FFFFFFFFFFC0FFFFFFFFFFC0FFFFFF
+FFFFC0FFFFFFFFFFC0000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000
+000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000007FFFFFFC00007FF
+FFFFC00007FFFFFFC00007FFFFFFC02A377DB631>I<00000001F80000000000000001F8000000
+0000000003FC0000000000000003FC0000000000000007FE0000000000000007FE000000000000
+0007FE000000000000000FFF000000000000000FFF000000000000001FFF800000000000001FFF
+800000000000001FFF800000000000003FFFC00000000000003FFFC00000000000007FFFE00000
+000000007DFFE00000000000007DFFE0000000000000FDFFF0000000000000F8FFF00000000000
+01F8FFF8000000000001F07FF8000000000001F07FF8000000000003F07FFC000000000003E03F
+FC000000000007E03FFE000000000007C01FFE00000000000FC01FFF00000000000F801FFF0000
+0000000F800FFF00000000001F800FFF80000000001F0007FF80000000003F0007FFC000000000
+3E0003FFC0000000003E0003FFC0000000007E0003FFE0000000007C0001FFE000000000FC0001
+FFF000000000F80000FFF000000000F80000FFF000000001FFFFFFFFF800000001FFFFFFFFF800
+000003FFFFFFFFFC00000003FFFFFFFFFC00000003E000003FFC00000007E000003FFE00000007
+C000001FFE0000000FC000001FFF0000000F8000000FFF0000001F8000000FFF8000001F000000
+0FFF8000001F00000007FF8000003F00000007FFC000003E00000003FFC000007E00000003FFE0
+0000FF00000001FFE000FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0FFFFFC0001FFFFFFF0FFFF
+FC0001FFFFFFF0443B7DBA4B>65 D<FFFFFFFFFFC00000FFFFFFFFFFFC0000FFFFFFFFFFFF0000
+FFFFFFFFFFFFC000007FF00001FFF000007FF000007FF800007FF000003FFC00007FF000001FFE
+00007FF000001FFE00007FF000000FFF00007FF000000FFF00007FF0000007FF80007FF0000007
+FF80007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF0000007FF80007FF00000
+07FF80007FF0000007FF00007FF000000FFF00007FF000000FFF00007FF000001FFE00007FF000
+001FFC00007FF000003FF800007FF000007FF000007FF00001FFE000007FF0000FFF8000007FFF
+FFFFFE0000007FFFFFFFFE0000007FFFFFFFFFC000007FF000007FF000007FF000001FFC00007F
+F000000FFE00007FF0000007FF00007FF0000007FF80007FF0000003FFC0007FF0000003FFC000
+7FF0000001FFE0007FF0000001FFE0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0
+007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FFF0007FF0000001FF
+F0007FF0000001FFE0007FF0000003FFE0007FF0000003FFC0007FF0000007FFC0007FF000000F
+FF80007FF000001FFF00007FF000003FFE00007FF00001FFFC00FFFFFFFFFFFFF800FFFFFFFFFF
+FFE000FFFFFFFFFFFF8000FFFFFFFFFFF800003C3B7CBA46>I<0000001FFF000030000001FFFF
+E000F000000FFFFFFC01F000007FFFFFFE03F00001FFFE007F87F00003FFE0000FCFF0000FFF00
+0003FFF0001FFC000001FFF0003FF80000007FF0007FF00000003FF000FFC00000003FF001FFC0
+0000001FF003FF800000000FF007FF000000000FF00FFF0000000007F00FFE0000000007F01FFE
+0000000003F01FFE0000000003F03FFC0000000003F03FFC0000000001F03FFC0000000001F07F
+FC0000000001F07FF80000000001F07FF80000000000007FF8000000000000FFF8000000000000
+FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF80000000000
+00FFF8000000000000FFF8000000000000FFF8000000000000FFF8000000000000FFF800000000
+00007FF80000000000007FF80000000000007FF80000000000007FFC0000000000F03FFC000000
+0000F03FFC0000000000F03FFC0000000000F01FFE0000000000F01FFE0000000001E00FFE0000
+000001E00FFF0000000001E007FF0000000003C003FF8000000003C001FFC0000000078000FFE0
+0000000F00007FF00000001F00003FF80000003E00001FFC0000007C00000FFF000001F8000003
+FFE00007F0000001FFFE003FC00000007FFFFFFF000000000FFFFFFC0000000001FFFFF0000000
+00001FFF0000003C3D7BBB47>I<001FFF00000001FFFFF0000003FFFFFC000007F007FE00000F
+F801FF00001FFC00FF80001FFC007FC0001FFC007FE0001FFC003FE0000FF8003FF0000FF8003F
+F00007F0003FF00001C0003FF0000000003FF0000000003FF0000000003FF0000000FFFFF00000
+0FFFFFF000007FF83FF00001FF803FF00007FE003FF0000FF8003FF0001FF0003FF0003FE0003F
+F0007FE0003FF0007FE0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FFC0003FF000FF
+C0007FF0007FE0007FF0007FE000DFF0003FF0039FF8001FFC0F0FFFF007FFFE0FFFF001FFFC07
+FFF0003FE000FFF02C267DA530>97 D<000000003FC00000003FFFC00000003FFFC00000003FFF
+C00000003FFFC000000001FFC000000000FFC000000000FFC000000000FFC000000000FFC00000
+0000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC000000000FF
+C000000000FFC000000000FFC000000000FFC000000000FFC000000000FFC00000FFC0FFC0000F
+FFF8FFC0003FFFFEFFC000FFE03FFFC001FF000FFFC003FE0003FFC007FC0001FFC00FF80000FF
+C01FF00000FFC01FF00000FFC03FF00000FFC03FE00000FFC07FE00000FFC07FE00000FFC07FE0
+0000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FFC0FFE00000FF
+C0FFE00000FFC0FFE00000FFC0FFE00000FFC07FE00000FFC07FE00000FFC07FE00000FFC03FF0
+0000FFC03FF00000FFC01FF00000FFC00FF80001FFC007F80003FFC003FC0007FFC001FE000FFF
+E000FFC07EFFFF003FFFFCFFFF000FFFF0FFFF0001FF80FFFF303C7DBB37>100
+D<0001FFC000000FFFF800003FFFFE0000FF80FF0001FE003F8007FC001FC00FF8000FE00FF800
+0FF01FF00007F03FF00007F83FF00007F87FE00007F87FE00003FC7FE00003FC7FE00003FCFFE0
+0003FCFFFFFFFFFCFFFFFFFFFCFFFFFFFFFCFFE0000000FFE0000000FFE0000000FFE00000007F
+E00000007FE00000007FE00000003FE00000003FF000003C1FF000003C1FF000003C0FF8000078
+07FC0000F803FE0001F001FF0007E000FFC03FC0003FFFFF000007FFFC000000FFE00026267DA5
+2D>I<00FF00000000FFFF00000000FFFF00000000FFFF00000000FFFF0000000007FF00000000
+03FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00
+00000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF00000000
+03FF0000000003FF0000000003FF0000000003FF007FC00003FF01FFF80003FF07FFFC0003FF0F
+03FE0003FF1C01FF0003FF3001FF8003FF6000FF8003FFE000FFC003FFC000FFC003FF8000FFC0
+03FF8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
+00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0
+03FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF00
+00FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFF
+FFFFFC3FFFFFFFFFFC3FFFFF303C7CBB37>104 D<01F00007FC000FFE000FFE001FFF001FFF00
+1FFF001FFF001FFF000FFE000FFE0007FC0001F000000000000000000000000000000000000000
+00000000000000000000000000FF00FFFF00FFFF00FFFF00FFFF0007FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00
+03FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF0003FF00FFFFF8
+FFFFF8FFFFF8FFFFF8153D7DBC1B>I<00FE007FC000FFFE01FFF800FFFE07FFFC00FFFE0F03FE
+00FFFE1C01FF0007FE3001FF8003FE6000FF8003FEE000FFC003FEC000FFC003FF8000FFC003FF
+8000FFC003FF8000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF
+0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FF
+C003FF0000FFC003FF0000FFC003FF0000FFC003FF0000FFC0FFFFFC3FFFFFFFFFFC3FFFFFFFFF
+FC3FFFFFFFFFFC3FFFFF30267CA537>110 D<00FF01FF8000FFFF0FFFF000FFFF3FFFFC00FFFF
+FE03FF00FFFFF000FF8003FFC0007FC003FF80003FE003FF00003FF003FF00001FF803FF00001F
+FC03FF00000FFC03FF00000FFE03FF00000FFE03FF000007FE03FF000007FF03FF000007FF03FF
+000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007FF03FF000007
+FF03FF000007FE03FF000007FE03FF00000FFE03FF00000FFC03FF00000FFC03FF00001FF803FF
+00001FF803FF00003FF003FF80003FE003FFC0007FC003FFF001FF8003FFFC07FF0003FF3FFFFC
+0003FF0FFFF00003FF01FF000003FF0000000003FF0000000003FF0000000003FF0000000003FF
+0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF0000000003FF000000
+0003FF0000000003FF00000000FFFFFC000000FFFFFC000000FFFFFC000000FFFFFC0000003037
+7DA537>112 D<00FE03F000FFFE0FFE00FFFE1FFF00FFFE3C3F80FFFE707FC007FE60FFE003FE
+E0FFE003FEC0FFE003FFC0FFE003FF807FC003FF807FC003FF803F8003FF800E0003FF00000003
+FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF000000
+03FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF00000003FF0000
+0003FF00000003FF00000003FF00000003FF000000FFFFFE0000FFFFFE0000FFFFFE0000FFFFFE
+000023267DA529>114 D<0007800000078000000780000007800000078000000F8000000F8000
+000F8000000F8000001F8000001F8000003F8000003F8000007F800000FF800001FF800007FF80
+001FFFFFF0FFFFFFF0FFFFFFF0FFFFFFF001FF800001FF800001FF800001FF800001FF800001FF
+800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001FF800001
+FF800001FF800001FF800001FF800001FF803C01FF803C01FF803C01FF803C01FF803C01FF803C
+01FF803C01FF803C00FF807800FFC078007FC070003FE0E0001FFFC00007FF800001FF001E377E
+B626>116 D<FFFFF007FFFCFFFFF007FFFCFFFFF007FFFCFFFFF007FFFC01FF8000FC0000FFC0
+00F80000FFE001F000007FF003E000003FF007C000001FF80FC000000FFC1F8000000FFE1F0000
+0007FF3E00000003FFFC00000001FFF800000000FFF0000000007FE0000000007FF0000000003F
+F8000000001FF8000000001FFC000000003FFE000000007FFF00000000FBFF80000001F9FF8000
+0003F0FFC0000003E07FE0000007C07FF000000F803FF800001F001FFC00003E000FFC00007C00
+07FE0000FC0003FF0001FC0003FF80FFFF801FFFFEFFFF801FFFFEFFFF801FFFFEFFFF801FFFFE
+2F267EA534>120 D E /Fg 1 98 df<00200000700000700000700000B80000B80000B800011C
+00011C00011C00020E00020E0004070004070007FF000803800803800803801801C03803C0FE0F
+F815157F9419>97 D E /Fh 36 122 df<0001FC000703000C03001C07001C0300180000380000
+380000380000380000700007FFFC00701C00701C00701C00E03800E03800E03800E03800E07001
+C07001C07001C07001C0E201C0E201C0E20380E4038064038038038000030000070000060000C6
+0000E40000CC00007000001825819C17>12 D<183C3C3C0404080810204080060C779C0D>39
+D<0000180000001800000038000000380000007800000078000000B8000001B800000138000002
+380000023C0000041C0000041C0000081C0000181C0000101C0000201C0000201C00007FFC0000
+401C0000801C0001801C0001001C0002001C0002001C0004000E000C000E001C001E00FF00FFC0
+1A1D7E9C1F>65 D<0003F020001E0C60003002E000E003C001C001C0038001C0070000C00E0000
+801E0000801C0000803C0000803C000000780000007800000078000000F0000000F0000000F000
+0000F0000000F0000400F0000400F0000400F0000800700008007000100038002000180040000C
+0180000706000001F800001B1E7A9C1E>67 D<01FFFFC0003C01C0003800C00038008000380080
+003800800070008000700080007020800070200000E0400000E0400000E0C00000FFC00001C080
+0001C0800001C0800001C080000381000003800000038000000380000007000000070000000700
+0000070000000F000000FFF000001A1C7D9B1B>70 D<01FFCFFE003C01E0003801C0003801C000
+3801C0003801C00070038000700380007003800070038000E0070000E0070000E0070000FFFF00
+01C00E0001C00E0001C00E0001C00E0003801C0003801C0003801C0003801C0007003800070038
+0007003800070038000F007800FFE7FF001F1C7D9B1F>72 D<01FFC0003C000038000038000038
+0000380000700000700000700000700000E00000E00000E00000E00001C00001C00001C00001C0
+000380000380000380000380000700000700000700000700000F0000FFE000121C7E9B10>I<00
+7FF0000780000700000700000700000700000E00000E00000E00000E00001C00001C00001C0000
+1C0000380000380000380000380000700000700000700000700060E000E0E000C0C00081C00083
+80004700003C0000141D7B9B16>I<01FE0007F8003E000780002E000F00002E001700002E0017
+00002E002700004E002E00004E004E00004E004E00004E008E00008E011C00008E011C00008E02
+1C00008E021C000107043800010704380001070838000107103800020710700002072070000207
+2070000207407000040740E000040780E000040700E0000C0700E0001C0601E000FF861FFC0025
+1C7D9B25>77 D<01FFFC00003C070000380380003801C0003801C0003801C0007003C0007003C0
+007003C00070038000E0078000E0070000E00E0000E0380001FFE00001C0000001C0000001C000
+0003800000038000000380000003800000070000000700000007000000070000000F000000FFE0
+00001A1C7D9B1C>80 D<000F8400304C00403C0080180100180300180300180600100600100600
+0007000007000003E00003FC0001FF00007F800007C00001C00001C00000C00000C02000C02000
+C0600180600180600300600200F00400CC180083E000161E7D9C17>83 D<1FFFFFC01C0701C030
+0E00C0200E0080600E0080400E0080401C0080801C0080801C0080001C00000038000000380000
+00380000003800000070000000700000007000000070000000E0000000E0000000E0000000E000
+0001C0000001C0000001C0000001C0000003C000007FFE00001A1C799B1E>I<7FF0FF800F001C
+000E0018000E0010000E0010000E0010001C0020001C0020001C0020001C002000380040003800
+4000380040003800400070008000700080007000800070008000E0010000E0010000E0010000E0
+020000E0020000E0040000E00400006008000030300000104000000F800000191D779B1F>I<FF
+83FF0FF03C007001C038007001803800F001003800F00200380170020038017004003802700400
+38027008001C047008001C047010001C087010001C087020001C107020001C107040001C207040
+001C207080001C407180001C407100001C807200001D807200001D007400001E007400001E0078
+00001C007800001C00700000180070000018006000001000600000241D779B29>87
+D<03CC063C0C3C181C3838303870387038E070E070E070E070E0E2C0E2C0E261E462643C380F12
+7B9115>97 D<3F00070007000E000E000E000E001C001C001C001C0039C03E6038303830703870
+3870387038E070E070E070E060E0E0C0C0C1C0618063003C000D1D7B9C13>I<01F007080C0818
+1C3838300070007000E000E000E000E000E000E008E010602030C01F000E127B9113>I<001F80
+000380000380000700000700000700000700000E00000E00000E00000E0003DC00063C000C3C00
+181C00383800303800703800703800E07000E07000E07000E07000E0E200C0E200C0E20061E400
+6264003C3800111D7B9C15>I<01E007100C1018083810701070607F80E000E000E000E000E000
+E0086010602030C01F000D127B9113>I<0003C0000670000C70001C60001C00001C0000380000
+380000380000380000380003FF8000700000700000700000700000700000E00000E00000E00000
+E00000E00001C00001C00001C00001C00001C000038000038000038000030000030000070000C6
+0000E60000CC00007800001425819C0D>I<00F3018F030F06070E0E0C0E1C0E1C0E381C381C38
+1C381C383830383038187818F00F700070007000E000E0C0C0E1C0C3007E00101A7D9113>I<0F
+C00001C00001C0000380000380000380000380000700000700000700000700000E78000E8C000F
+0E000E0E001C0E001C0E001C0E001C0E00381C00381C00381C0038380070388070388070708070
+7100E03200601C00111D7D9C15>I<01800380010000000000000000000000000000001C002600
+470047008E008E000E001C001C001C0038003800710071007100720072003C00091C7C9B0D>I<
+0FC00001C00001C0000380000380000380000380000700000700000700000700000E0F000E1100
+0E23800E43801C83001C80001D00001E00003F800039C00038E00038E00070E20070E20070E200
+70E400E06400603800111D7D9C13>107 D<1F800380038007000700070007000E000E000E000E
+001C001C001C001C0038003800380038007000700070007000E400E400E400E40068003800091D
+7C9C0B>I<3C1E0780266318C04683A0E04703C0E08E0380E08E0380E00E0380E00E0380E01C07
+01C01C0701C01C0701C01C070380380E0388380E0388380E0708380E0710701C0320300C01C01D
+127C9122>I<3C3C002646004687004707008E07008E07000E07000E07001C0E001C0E001C0E00
+1C1C00381C40381C40383840383880701900300E0012127C9117>I<01E007180C0C180C380C30
+0E700E700EE01CE01CE01CE018E038E030E06060C031801E000F127B9115>I<07870004D98008
+E0C008E0C011C0E011C0E001C0E001C0E00381C00381C00381C003818007038007030007070007
+06000E8C000E70000E00000E00001C00001C00001C00001C00003C0000FF8000131A7F9115>I<
+3C3C26C2468747078E068E000E000E001C001C001C001C0038003800380038007000300010127C
+9112>114 D<01F006080C080C1C18181C001F001FC00FF007F0007800386030E030C030806060
+C01F000E127D9111>I<00C001C001C001C00380038003800380FFE00700070007000E000E000E
+000E001C001C001C001C00384038403840388019000E000B1A7D990E>I<1E0300270700470700
+470700870E00870E000E0E000E0E001C1C001C1C001C1C001C1C00383880383880183880183900
+1C5900078E0011127C9116>I<1E01832703874703874703838707018707010E07010E07011C0E
+021C0E021C0E021C0E04180C04181C04181C081C1C100C263007C3C018127C911C>119
+D<070E0019910010E38020E38041C30041C00001C00001C0000380000380000380000380000702
+00670200E70400CB04008B080070F00011127D9113>I<1E03270747074707870E870E0E0E0E0E
+1C1C1C1C1C1C1C1C38383838183818381C7007F00070007000E0E0C0E1C0818047003C00101A7C
+9114>I E /Fi 91 127 df<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600000000060F0F0600419
+779816>33 D<E038F078F078F078F078F078F078F078E038E03860300D0B7C9816>I<00C00001
+C00001C00001C00007F0001FFC003FFE007DCF0071C780E1C380E1C780E1C780F1C30079C0003F
+C0001FF00007FC0001FE0001CF0001C70061C380F1C380F1C380E1C38071C70079DF003FFE001F
+F80007E00001C00001C00000C00011207E9C16>36 D<03800007E0000FE0001E70001C70001C70
+001C70001C77E01CE7E01DE7E00FC7000F8E000F0E001E0E003F1C007F1C00739C00E3F800E1F8
+00E0F1C0E0F1C071F9C07FFFC03F9F801E070013197F9816>38 D<30787C3C1C1C1C1C3878F0E0
+40060D789816>I<00E001E0038007000E001C001C0038003800700070007000E000E000E000E0
+00E000E000E000E000E000700070007000380038001C001C000E000700038001E000E00B217A9C
+16>I<C000E000700038001C000E000E000700070003800380038001C001C001C001C001C001C0
+01C001C001C0038003800380070007000E000E001C0038007000E000C0000A217B9C16>I<01C0
+0001C00001C00001C00071C700F9CF807FFF001FFC0007F00007F0001FFC007FFF00F9CF8071C7
+0001C00001C00001C00001C00011127E9516>I<01C00001C00001C00001C00001C00001C00001
+C00001C000FFFF80FFFF80FFFF8001C00001C00001C00001C00001C00001C00001C00001C00011
+137E9516>I<387C7E7E3E0E1E1C78F060070B798416>I<FFFF80FFFF80FFFF8011037E8D16>I<
+70F8F8F8700505788416>I<000180000380000380000700000700000E00000E00001C00001C00
+00380000380000700000700000E00000E00001C00001C0000380000380000700000700000E0000
+0E00001C00001C0000380000380000700000700000E00000E00000C0000011207E9C16>I<03E0
+000FF8001FFC001E3C00380E00780F00700700700700E00380E00380E00380E00380E00380E003
+80E00380E00380F00780700700700700780F003C1E001E3C001FFC000FF80003E00011197E9816
+>I<01800380038007800F807F80FF807380038003800380038003800380038003800380038003
+800380038003807FF87FFC7FF80E197C9816>I<07E0001FF8003FFC00783E00E00700F00780F0
+0380600380000380000380000700000700000E00001C0000380000700000E00001C0000380000F
+00001E03803803807FFF80FFFF807FFF8011197E9816>I<07E0001FF8003FFC00781E00780700
+300700000700000700000E00003E0007FC0007F00007FC00001E00000700000300000380000380
+600380F00380E00700781E003FFC001FF80007E00011197E9816>I<007C0000FC0000DC0001DC
+00039C00039C00071C000F1C000E1C001E1C003C1C00381C00781C00F01C00FFFFE0FFFFE0FFFF
+E0001C00001C00001C00001C00001C0001FFC001FFC001FFC013197F9816>I<3FFE003FFE003F
+FE003800003800003800003800003800003800003800003BF0003FFC003FFE003C0F0030070000
+0380000380600380F00380F00380E00700781E003FFC001FF80007E00011197E9816>I<00F800
+03FC0007FE000F07001C0F00380F00780600700000700000E3F800EFFC00FFFE00F80F00F00700
+F00380E00380E003807003807003807007803807003C1E001FFC000FF80003E00011197E9816>
+I<E00000FFFF80FFFF80FFFF80E00F00E01E00001C0000380000780000700000E00000E00001C0
+0001C00001C0000380000380000380000380000700000700000700000700000700000700000700
+00111A7E9916>I<07F0001FFC003FFE007C1F00F00780E00380E00380E003807007007C1F001F
+FC0007F0001FFC003C1E00700700F00780E00380E00380E00380F007807007007C1F003FFE001F
+FC0007F00011197E9816>I<03E0000FF8001FFC003C1E00700E00700700E00700E00780E00380
+E00380E00780700780780F803FFF801FFB800FE380000700000700300700780E00781C00707800
+3FF0001FE0000F800011197E9816>I<70F8F8F870000000000000000070F8F8F8700512789116>
+I<387C7C7C38000000000000000038787C7C3C1C1C3870E0400618799116>I<00018000078000
+1F80003E0000F80001F00007C0000F80003E0000FC0000F00000FC00003E00000F800007C00001
+F00000F800003E00001F8000078000018011157E9616>I<7FFF00FFFF80FFFF80000000000000
+000000000000000000FFFF80FFFF807FFF00110B7E9116>I<C00000F00000FC00003E00000F80
+0007C00001F00000F800003E00001F80000780001F80003E0000F80001F00007C0000F80003E00
+00FC0000F00000C0000011157E9616>I<0FE03FF87FFCF01EF00EF00E601E003C007800F001C0
+038003800380038003800300000000000000000003000780078003000F197D9816>I<00F80003
+FC0007FE000F07001C3F80387F8078FF8071C3C071C3C0E381C0E381C0E381C0E381C0E381C0E3
+81C0E381C071C38071C38078FF00387E001C3C000F03C007FFC003FF0000FC0012197E9816>I<
+00E00001F00001F00001B00001B00003B80003B80003B800031800071C00071C00071C00071C00
+071C000E0E000E0E000FFE000FFE001FFF001C07001C07001C07007F1FC0FF1FE07F1FC013197F
+9816>I<7FF800FFFE007FFF001C0F001C07801C03801C03801C03801C07801C07001FFF001FFE
+001FFE001C1F001C03801C03C01C01C01C01C01C01C01C01C01C03C01C07807FFF80FFFF007FFC
+0012197F9816>I<01F18007FB800FFF801F0F803C0780380380700380700380F00000E00000E0
+0000E00000E00000E00000E00000E00000F000007003807003803803803C07001F0F000FFE0007
+FC0001F00011197E9816>I<7FF800FFFE007FFF001C0F001C07801C03C01C01C01C01C01C01E0
+1C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C03C01C07801C0F80
+7FFF00FFFE007FF8001319809816>I<7FFFC0FFFFC07FFFC01C01C01C01C01C01C01C01C01C00
+001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00E01C00E01C00E01C00
+E01C00E07FFFE0FFFFE07FFFE013197F9816>I<FFFFE0FFFFE0FFFFE01C00E01C00E01C00E01C
+00E01C00001C00001C1C001C1C001FFC001FFC001FFC001C1C001C1C001C00001C00001C00001C
+00001C00001C0000FF8000FFC000FF800013197F9816>I<03E30007FF000FFF001E1F003C0F00
+380700700700700700F00000E00000E00000E00000E00000E03F80E07FC0E03F80F00700700700
+700700380F003C0F001E1F000FFF0007F70003E70012197E9816>I<7F1FC0FFBFE07F1FC01C07
+001C07001C07001C07001C07001C07001C07001FFF001FFF001FFF001C07001C07001C07001C07
+001C07001C07001C07001C07001C07007F1FC0FFBFE07F1FC013197F9816>I<FFFEFFFEFFFE03
+80038003800380038003800380038003800380038003800380038003800380038003800380FFFE
+FFFEFFFE0F197D9816>I<07FE07FF07FE00380038003800380038003800380038003800380038
+003800380038003800386038F038F0707FF07FE01F8010197D9816>I<7F0FE0FF8FF07F0FE01C
+07801C0F001C0E001C1C001C3C001C78001CF0001CE0001DF0001FF0001FF8001F38001E1C001C
+1C001C0E001C0E001C07001C07001C03807F07E0FF8FF07F07E01419809816>I<FFC000FFC000
+FFC0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0000
+1C00001C00001C00401C00E01C00E01C00E01C00E0FFFFE0FFFFE0FFFFE013197F9816>I<FC07
+E0FE0FE0FE0FE03A0B803B1B803B1B803B1B803B1B803B1B803BBB8039B38039B38039B38039B3
+8039F38038E38038E380380380380380380380380380380380FE0FE0FE0FE0FE0FE013197F9816
+>I<7E1FC0FF3FE07F1FC01D07001D87001D87001D87001DC7001DC7001CC7001CC7001CE7001C
+E7001CE7001C67001C67001C77001C77001C37001C37001C37001C17007F1F00FF9F007F0F0013
+197F9816>I<1FFC003FFE007FFF00780F00F00780E00380E00380E00380E00380E00380E00380
+E00380E00380E00380E00380E00380E00380E00380E00380F00780F00780780F007FFF003FFE00
+1FFC0011197E9816>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03
+C01C03801C0F801FFF001FFE001FF8001C00001C00001C00001C00001C00001C00001C00007F00
+00FF80007F000012197F9816>I<1FFC003FFE007FFF00780F00F00780E00380E00380E00380E0
+0380E00380E00380E00380E00380E00380E00380E00380E00380E00380E0E380E1E380F0F78078
+7F007FFF003FFE001FFC00001C00001E00000E00000F00000700000700111F7E9816>I<7FE000
+FFF8007FFC001C1E001C0F001C07001C07001C07001C07001C0F001C1E001FFC001FF8001FFC00
+1C1C001C0E001C0E001C0E001C0E001C0E201C0E701C0E707F07E0FF87E07F03C014197F9816>
+I<07E3001FFF003FFF00781F00F00700E00700E00700E00000F000007800003F80001FF00007FC
+0000FE00000F00000700000380000380600380E00380E00700F80F00FFFE00FFFC00C7F0001119
+7E9816>I<7FFFE0FFFFE0FFFFE0E0E0E0E0E0E0E0E0E0E0E0E000E00000E00000E00000E00000
+E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007
+FC0013197F9816>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01C01C01C01C01C0
+1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C00E03800E038007070007FF00
+03FE0000F8001519809816>I<FE0FE0FF1FE0FE0FE03803801C07001C07001C07001C07000E0E
+000E0E000E0E000E0E00060C00071C00071C00071C00071C0003180003B80003B80003B80001B0
+0001F00001F00000E00013197F9816>I<FC07E0FE0FE0FC07E07001C07001C07001C030018038
+038038038038038038E38039F38039F38039B38019B30019B30019B30019B30019B30019B30019
+13001B1B000F1E000F1E000E0E0013197F9816>I<7F1F807F3F807F1F800E1E000E1C00073C00
+07380003B80003F00001F00001E00000E00001E00001F00003F00003B80007B800071C00071C00
+0E0E000E0E001C07007F1FC0FF1FE07F1FC013197F9816>I<FE0FE0FF1FE0FE0FE01C07001C07
+000E0E000E0E00071C00071C00071C0003B80003B80001F00001F00000E00000E00000E00000E0
+0000E00000E00000E00000E00003F80007FC0003F80013197F9816>I<7FFF80FFFF80FFFF80E0
+0700E00F00E01E00E01C00003C0000780000700000F00001E00001C00003C0000780000700000F
+00001E03801C03803C0380780380700380FFFF80FFFF80FFFF8011197E9816>I<FFF0FFF0FFF0
+E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E0
+00E000E000E000E000E000E000FFF0FFF0FFF00C20789C16>I<C00000E00000E0000070000070
+00003800003800001C00001C00000E00000E000007000007000003800003800001C00001C00000
+E00000E000007000007000003800003800001C00001C00000E00000E0000070000070000038000
+038000018011207E9C16>I<FFF0FFF0FFF0007000700070007000700070007000700070007000
+70007000700070007000700070007000700070007000700070007000700070FFF0FFF0FFF00C20
+7F9C16>I<03000F803FE0FDF8F07840100D067C9816>I<FFFF80FFFF80FFFF8011037E7E16>I<
+081C3C7870E0E0E0E0F0F87830060D789B16>I<1FE0003FF0007FF800783C00300E00000E0000
+0E0003FE001FFE003E0E00700E00E00E00E00E00E00E00783E007FFFE03FE7E00F83E013127E91
+16>I<7E0000FE00007E00000E00000E00000E00000E00000E3E000EFF000FFF800F83C00F00E0
+0E00E00E00700E00700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF00063C00
+1419809816>I<03F80FFC1FFE3C1E780C7000E000E000E000E000E000F000700778073E0E1FFC
+0FF803F010127D9116>I<003F00007F00003F0000070000070000070000070003C7000FF7001F
+FF003C1F00780F00700700E00700E00700E00700E00700E00700E00700700F00700F003C1F001F
+FFE00FE7F007C7E014197F9816>I<03E00FF81FFC3C1E780E7007E007FFFFFFFFFFFFE000E000
+700778073C0F1FFE0FFC03F010127D9116>I<001F00007F8000FF8001E78001C30001C00001C0
+007FFF00FFFF00FFFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0
+0001C00001C0003FFE007FFF003FFE0011197F9816>I<03E3C007F7E00FFFE01C1CC0380E0038
+0E00380E00380E00380E001C1C000FF8001FF0001BE0003800001800001FFC001FFF003FFF8078
+03C0E000E0E000E0E000E0E000E07001C07C07C03FFF800FFE0003F800131C7F9116>I<7E0000
+FE00007E00000E00000E00000E00000E00000E3C000EFE000FFF000F87800F03800E03800E0380
+0E03800E03800E03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01519809816>
+I<018003C003C0018000000000000000007FC07FC07FC001C001C001C001C001C001C001C001C0
+01C001C001C001C07FFFFFFF7FFF101A7D9916>I<003000780078003000000000000000001FF8
+1FF81FF80038003800380038003800380038003800380038003800380038003800380038003800
+3800386070F0F0FFE07FC03F800D237E9916>I<7E0000FE00007E00000E00000E00000E00000E
+00000E7FE00E7FE00E7FE00E0F000E1E000E3C000E78000EF0000FF0000FF8000FBC000F1E000E
+0E000E07000E07807F87F0FFCFF07F87F01419809816>I<FFC000FFC000FFC00001C00001C000
+01C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000
+01C00001C00001C00001C000FFFF80FFFF80FFFF8011197E9816>I<F9C380FFEFC0FFFFE03C78
+E03C78E03870E03870E03870E03870E03870E03870E03870E03870E03870E03870E0FE7CF8FE7C
+F8FE3C781512809116>I<7E3C00FEFE007FFF000F87800F03800E03800E03800E03800E03800E
+03800E03800E03800E03800E03800E03807FC7F0FFE7F87FC7F01512809116>I<03E0000FF800
+1FFC003C1E00780F00700700E00380E00380E00380E00380E00380F00780700700780F003C1E00
+1FFC000FF80003E00011127E9116>I<7E3E00FEFF007FFF800F83C00F00E00E00E00E00700E00
+700E00700E00700E00700E00700E00E00F01E00F83C00FFF800EFF000E3C000E00000E00000E00
+000E00000E00000E00007FC000FFE0007FC000141B809116>I<07C7000FE7001FF7003C1F0070
+0F00700F00E00700E00700E00700E00700E00700E00700700F00700F003C3F003FF7001FE70007
+C700000700000700000700000700000700000700003FE0007FF0003FE0141B7E9116>I<FF0FC0
+FF3FE0FF7FE007F04007C000078000078000070000070000070000070000070000070000070000
+070000FFFC00FFFC00FFFC0013127F9116>I<0FEC3FFC7FFCF03CE01CE01C70007F801FF007F8
+003C600EE00EF00EF81EFFFCFFF8C7E00F127D9116>I<0300000700000700000700000700007F
+FF00FFFF00FFFF0007000007000007000007000007000007000007000007010007038007038007
+038007870003FE0001FC0000F80011177F9616>I<7E1F80FE3F807E1F800E03800E03800E0380
+0E03800E03800E03800E03800E03800E03800E03800E03800E0F800FFFF007FBF803E3F0151280
+9116>I<7F1FC0FF1FE07F1FC01C07001E0F000E0E000E0E000E0E00071C00071C00071C00071C
+0003B80003B80003B80001F00001F00000E00013127F9116>I<FF1FE0FFBFE0FF1FE038038038
+038038038038038038E38019F30019F30019B3001DB7001DB7001DB7001DB7000F1E000F1E000F
+1E0013127F9116>I<7F1FC07F3FC07F1FC00F1C00073C0003B80003F00001F00000E00001E000
+01F00003B800073C00071C000E0E007F1FC0FF3FE07F1FC013127F9116>I<7F1FC0FF9FE07F1F
+C01C07000E07000E0E000E0E00070E00071C00071C00039C00039C0003980001B80001B80000F0
+0000F00000F00000E00000E00000E00001C00079C0007BC0007F80003F00003C0000131B7F9116
+>I<001F80007F8000FF8001E00001C00001C00001C00001C00001C00001C00001C00001C00001
+C00003C0007F8000FF0000FF00007F800003C00001C00001C00001C00001C00001C00001C00001
+C00001C00001C00001E00000FF80007F80001F8011207E9C16>123 D<E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E00320779C16>I<7C0000FF0000FF800003
+C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001E00000FF00007F8000
+7F8000FF0001E00001C00001C00001C00001C00001C00001C00001C00001C00001C00003C000FF
+8000FF00007C000011207E9C16>I<1C303F78FFF8F7E061C00D057C9816>I
+E /Fj 8 111 df<60F0F06004047C830C>58 D<0000038000000F0000003C000000F0000003C0
+00000F0000003C000000F0000003C000000F0000003C000000F0000000F00000003C0000000F00
+000003C0000000F00000003C0000000F00000003C0000000F00000003C0000000F000000038019
+187D9520>60 D<E0000000780000001E0000000780000001E0000000780000001E000000078000
+0001E0000000780000001E00000007800000078000001E00000078000001E00000078000001E00
+000078000001E00000078000001E00000078000000E000000019187D9520>62
+D<00000C0000000C0000001C0000001C0000003C0000007C0000005C0000009C0000008E000001
+0E0000010E0000020E0000040E0000040E0000080E0000080E0000100E0000200E00003FFE0000
+400700004007000080070001000700010007000200070002000700060007001E000700FF807FF0
+1C1D7F9C1F>65 D<01FFFF00003C01C0003800E0003800F0003800700038007000700070007000
+F0007000F0007001E000E003C000E0078000E01F0000FFFC0001C00F0001C0078001C003C001C0
+03C0038003C0038003C0038003C0038003C0070007800700070007000E0007001C000E007800FF
+FFC0001C1C7E9B1F>I<01FFC0FF80001E003C00001E003000000E002000000F00400000070080
+000007010000000782000000038400000003C800000001D000000001F000000000E000000000E0
+00000000F00000000170000000027000000004380000000838000000103C000000201C00000040
+1E000000800E000001800E000003000F000006000700001E000F8000FF803FF000211C7F9B22>
+88 D<FFE007F80F0001E00F0001800700010007000200078004000380080003C0100001C03000
+01C0200001E0400000E0800000F100000072000000760000007C00000038000000380000007000
+0000700000007000000070000000E0000000E0000000E0000000E0000001C000001FFC00001D1C
+7F9B18>I<381F004E61804681C04701C08F01C08E01C00E01C00E01C01C03801C03801C03801C
+0700380710380710380E10380E2070064030038014127E9119>110 D E
+/Fk 71 123 df<003FE3F801F03F1C03C03E3E07C07C3E0F807C3E0F807C1C0F807C000F807C00
+0F807C000F807C000F807C00FFFFFFC0FFFFFFC00F807C000F807C000F807C000F807C000F807C
+000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C007FE1
+FFC07FE1FFC01F1D809C1C>11 D<003FC00001F0300003C0380007C07C000F807C000F807C000F
+8038000F8000000F8000000F8000000F800000FFFFFC00FFFFFC000F807C000F807C000F807C00
+0F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C000F807C
+000F807C007FE1FF807FE1FF80191D809C1B>I<003FC1FE0001F03F818003C03E01C007C07E03
+E00F807C03E00F807C03E00F807C01C00F807C00000F807C00000F807C00000F807C0000FFFFFF
+FFE0FFFFFFFFE00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F80
+7C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E00F807C03E07F
+E1FF0FFC7FE1FF0FFC261D809C28>14 D<00038000000380000003800000038000000380000003
+80000003800000038000000380000003800000038000000380000003800000038000FFFFFFFCFF
+FFFFFCFFFFFFFC0003800000038000000380000003800000038000000380000003800000038000
+0003800000038000000380000003800000038000000380001E1F7D9925>43
+D<78FCFCFEFE7A0202040408083040070E7D850D>I<FFE0FFE0FFE0FFE00B047F8A10>I<78FCFC
+FCFC7806067D850D>I<03F8000F1E001C07003C07803803807803C07803C07803C0F803E0F803
+E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E0F803E07803C07803C03803
+803C07801C07000F1E0003F800131B7E9A18>48 D<00600001E0000FE000FFE000F3E00003E000
+03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00003E00003E00003E00003E00003E0007FFF807FFF80111B7D9A18>I<07F8001FFE00383F
+80780FC0FC07C0FC07E0FC03E0FC03E07803E00007E00007C00007C0000F80001F00001E000038
+0000700000E0000180600300600600600800E01FFFC03FFFC07FFFC0FFFFC0FFFFC0131B7E9A18
+>I<03F8001FFE003C1F003C0F807C07C07E07C07C07C03807C0000F80000F80001E00003C0003
+F800001E00000F800007C00007C00007E03007E07807E0FC07E0FC07E0FC07C0780F80781F001F
+FE0007F800131B7E9A18>I<000180000380000780000F80001F80003F80006F8000CF80008F80
+018F80030F80060F800C0F80180F80300F80600F80C00F80FFFFF8FFFFF8000F80000F80000F80
+000F80000F80000F8001FFF801FFF8151B7F9A18>I<1801801FFF001FFE001FFC001FF8001FC0
+0018000018000018000018000019F8001E0E00180F801007800007C00007E00007E00007E07807
+E0F807E0F807E0F807C0F007C0600F80381F001FFE0007F000131B7E9A18>I<007E0003FF0007
+81800F03C01E07C03C07C03C0380780000780000F80000F8F800FB0E00FA0780FC0380FC03C0F8
+03E0F803E0F803E0F803E07803E07803E07803C03C03C03C07801E0F0007FE0003F800131B7E9A
+18>I<6000007FFFE07FFFE07FFFC07FFF807FFF80E00300C00600C00C00C01800003000003000
+00600000E00000E00001E00001C00003C00003C00003C00003C00007C00007C00007C00007C000
+07C00007C000038000131C7D9B18>I<03F8000FFE001E0F803807803803C07803C07803C07E03
+C07F83807FC7003FFE001FFC000FFE0007FF801DFF80387FC0781FE0F007E0F003E0F001E0F001
+E0F001E07801C07803803E07801FFE0003F800131B7E9A18>I<03F8000FFE001E0F003C078078
+07807803C0F803C0F803C0F803E0F803E0F803E0F803E07807E03807E03C0BE00E1BE003E3E000
+03E00003C00003C03807C07C07807C0700780F00383C001FF8000FE000131B7E9A18>I<78FCFC
+FCFC7800000000000078FCFCFCFC7806127D910D>I<0FF0303C601EF01FF81FF81F701F003E00
+3C007000E001C00180018003000300030003000300000000000000000007800FC00FC00FC00FC0
+0780101D7D9C17>63 D<001FE00000E01C0003000300060001800C0000C018000060300FC03020
+38601060F0101860F01F18C1E01F0CC1E01F0CC3E01F0CC3E01F0CC3E01F0CC3E01F0CC3E01F0C
+C1E01F0CC1E01F0C60F01F0860F01F1820386F10300FC7E0180000000C00000006000000030000
+3C00E007F0001FFC001E1D7D9C25>I<00038000000380000007C0000007C0000007C000000FE0
+00000FE000001FF000001BF000001BF0000031F8000031F8000061FC000060FC0000E0FE0000C0
+7E0000C07E0001803F0001FFFF0003FFFF8003001F8003001F8006000FC006000FC00E000FE00C
+0007E0FFC07FFEFFC07FFE1F1C7E9B24>I<FFFFF800FFFFFF000FC01F800FC00FC00FC007C00F
+C007E00FC007E00FC007E00FC007E00FC007E00FC007C00FC00F800FC03F000FFFFE000FC00F80
+0FC007C00FC007E00FC003E00FC003F00FC003F00FC003F00FC003F00FC003F00FC007E00FC007
+E00FC01FC0FFFFFF00FFFFFC001C1C7E9B22>I<001FE02000FFF8E003F80FE007C003E00F8001
+E01F0000E03E0000E03E0000607E0000607C000060FC000000FC000000FC000000FC000000FC00
+0000FC000000FC000000FC0000007C0000607E0000603E0000603E0000C01F0000C00F80018007
+C0030003F80E0000FFFC00001FE0001B1C7D9B22>I<FFFFF800FFFFFF000FC01FC00FC007E00F
+C001F00FC001F80FC000F80FC000FC0FC0007C0FC0007C0FC0007E0FC0007E0FC0007E0FC0007E
+0FC0007E0FC0007E0FC0007E0FC0007E0FC0007C0FC0007C0FC0007C0FC000F80FC000F80FC001
+F00FC007E00FC01FC0FFFFFF00FFFFF8001F1C7E9B25>I<FFFFFF00FFFFFF000FC01F000FC007
+000FC003000FC003800FC003800FC181800FC181800FC181800FC180000FC380000FFF80000FFF
+80000FC380000FC180000FC180000FC180600FC180600FC000E00FC000C00FC000C00FC001C00F
+C001C00FC003C00FC00F80FFFFFF80FFFFFF801B1C7E9B1F>I<FFFFFF00FFFFFF000FC01F000F
+C007000FC003000FC003800FC003800FC001800FC181800FC181800FC180000FC180000FC38000
+0FFF80000FFF80000FC380000FC180000FC180000FC180000FC180000FC000000FC000000FC000
+000FC000000FC000000FC00000FFFF0000FFFF0000191C7E9B1E>I<000FF008007FFE3801FC07
+F807E001F80F8000781F0000783F0000383E0000387E0000187C000018FC000000FC000000FC00
+0000FC000000FC000000FC000000FC007FFFFC007FFF7C0001F87E0001F83E0001F83F0001F81F
+0001F80F8001F807E001F801FC07F8007FFE78000FF818201C7D9B26>I<FFFC3FFFFFFC3FFF0F
+C003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F0
+0FFFFFF00FFFFFF00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003F00FC003
+F00FC003F00FC003F00FC003F00FC003F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFFFFFF07E007
+E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E007E0
+07E007E007E0FFFFFFFF101C7F9B12>I<07FFF007FFF0001F80001F80001F80001F80001F8000
+1F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F80001F8030
+1F80781F80FC1F80FC1F80FC1F00783E00387C000FF000141C7F9B19>I<FFFC07FFFFFC07FF0F
+C000E00FC001C00FC003800FC006000FC00C000FC038000FC070000FC0E0000FC1C0000FC3C000
+0FC7E0000FCFE0000FFBF0000FF3F8000FE1F8000FC0FC000FC0FE000FC07E000FC03F000FC01F
+800FC01FC00FC00FC00FC007E00FC007F0FFFC3FFFFFFC3FFF201C7E9B25>I<FFFF00FFFF000F
+C0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000FC0000F
+C0000FC0000FC0030FC0030FC0030FC0070FC0070FC0060FC00E0FC01E0FC07EFFFFFEFFFFFE18
+1C7E9B1D>I<FFC00003FFFFE00007FF0FE00007F00DF0000DF00DF0000DF00DF0000DF00CF800
+19F00CF80019F00C7C0031F00C7C0031F00C3E0061F00C3E0061F00C1F00C1F00C1F00C1F00C1F
+00C1F00C0F8181F00C0F8181F00C07C301F00C07C301F00C03E601F00C03E601F00C01FC01F00C
+01FC01F00C01FC01F00C00F801F00C00F801F0FFC0701FFFFFC0701FFF281C7E9B2D>I<FFE003
+FFFFE003FF0FF000300FF800300DFC00300CFE00300C7E00300C3F00300C1F80300C1FC0300C0F
+E0300C07F0300C03F0300C01F8300C01FC300C00FE300C007F300C003F300C001FB00C001FF00C
+000FF00C0007F00C0003F00C0001F00C0000F00C0000F0FFC00070FFC00030201C7E9B25>I<00
+3FE00001F07C0003C01E000F800F801F0007C01E0003C03E0003E07E0003F07C0001F07C0001F0
+FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F8FC0001F87C0001F07E0003
+F07E0003F03E0003E03F0007E01F0007C00F800F8003C01E0001F07C00003FE0001D1C7D9B24>
+I<FFFFF800FFFFFE000FC03F800FC00F800FC007C00FC007E00FC007E00FC007E00FC007E00FC0
+07E00FC007C00FC007C00FC00F800FC03F000FFFFC000FC000000FC000000FC000000FC000000F
+C000000FC000000FC000000FC000000FC000000FC000000FC00000FFFC0000FFFC00001B1C7E9B
+21>I<FFFFF00000FFFFFE00000FC03F00000FC00F80000FC007C0000FC007E0000FC007E0000F
+C007E0000FC007E0000FC007E0000FC007C0000FC00F80000FC03E00000FFFF000000FC07C0000
+0FC03E00000FC03F00000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80000FC01F80
+000FC01F81800FC01F81800FC00FC180FFFC07C300FFFC01FE00211C7E9B24>82
+D<07F8201FFEE03C07E07801E07000E0F000E0F00060F00060F80000FE0000FFE0007FFE003FFF
+003FFF800FFFC007FFE0007FE00003F00001F00000F0C000F0C000F0C000E0E000E0F001C0FC03
+C0EFFF0083FC00141C7D9B1B>I<7FFFFFE07FFFFFE0781F81E0701F80E0601F8060E01F8070C0
+1F8030C01F8030C01F8030C01F8030001F8000001F8000001F8000001F8000001F8000001F8000
+001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F8000001F80
+0007FFFE0007FFFE001C1C7E9B21>I<FFFC03FFFFFC03FF0FC000300FC000300FC000300FC000
+300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC000300FC0
+00300FC000300FC000300FC000300FC000300FC0003007C0003007C0006003E000E001F001C000
+FC0780007FFE00000FF800201C7E9B25>I<FFFC01FF80FFFC01FF800FC000180007E000300007
+E000300007F000700003F000600003F800E00001F800C00001FC00C00000FC01800000FC018000
+007E030000007E030000007F070000003F060000003F8E0000001F8C0000001FCC0000000FD800
+00000FD800000007F000000007F000000007F000000003E000000003E000000001C000000001C0
+0000211C7F9B24>I<FFFC7FFE0FFCFFFC7FFE0FFC0FC007E000C00FC007F000C00FE003F001C0
+07E003F0018007E007F8018003F007F8030003F007F8030003F80CFC070001F80CFC060001F81C
+FE060001FC187E0E0000FC187E0C0000FC387F0C00007E303F1800007E303F1800007F601FB800
+003F601FB000003FE01FF000003FC00FF000001FC00FE000001FC00FE000000F8007C000000F80
+07C000000F0003C0000007000380000007000380002E1C7F9B31>I<7FFE1FFE007FFE1FFE0007
+F001800003F803800001FC07000000FC06000000FE0C0000007F1C0000003F380000003FB00000
+001FE00000000FE00000000FE000000007F000000003F800000007F80000000FFC0000000CFE00
+0000187E000000387F000000703F800000601F800000C01FC00001C00FE000018007F000030007
+F000FFF03FFF80FFF03FFF80211C7F9B24>I<FEFEFEE0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0
+E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0FEFEFE07297C9E0D>91 D<FEFEFE0E0E0E0E0E0E0E
+0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0EFEFEFE07297F9E0D>93
+D<0FF8001C1E003E0F803E07803E07C01C07C00007C0007FC007E7C01F07C03C07C07C07C0F807
+C0F807C0F807C0780BC03E13F80FE1F815127F9117>97 D<FF0000FF00001F00001F00001F0000
+1F00001F00001F00001F00001F00001F00001F3F801FE1E01F80701F00781F003C1F003C1F003E
+1F003E1F003E1F003E1F003E1F003E1F003C1F003C1F00781F80701EC1E01C3F00171D7F9C1B>
+I<03FC000E0E001C1F003C1F00781F00780E00F80000F80000F80000F80000F80000F800007800
+007801803C01801C03000E0E0003F80011127E9115>I<000FF0000FF00001F00001F00001F000
+01F00001F00001F00001F00001F00001F001F9F00F07F01C03F03C01F07801F07801F0F801F0F8
+01F0F801F0F801F0F801F0F801F07801F07801F03C01F01C03F00F0FFE03F9FE171D7E9C1B>I<
+01FC000F07001C03803C01C07801C07801E0F801E0F801E0FFFFE0F80000F80000F80000780000
+7C00603C00601E00C00F038001FC0013127F9116>I<007F0001E38003C7C00787C00F87C00F83
+800F80000F80000F80000F80000F8000FFF800FFF8000F80000F80000F80000F80000F80000F80
+000F80000F80000F80000F80000F80000F80000F80000F80007FF8007FF800121D809C0F>I<03
+F8F00E0F381E0F381C07303C07803C07803C07803C07801C07001E0F000E0E001BF80010000018
+00001800001FFF001FFFC00FFFE01FFFF07801F8F00078F00078F000787000707800F01E03C007
+FF00151B7F9118>I<FF0000FF00001F00001F00001F00001F00001F00001F00001F00001F0000
+1F00001F0FC01F31E01F40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F8
+1F00F81F00F81F00F81F00F8FFE7FFFFE7FF181D7F9C1B>I<1E003F003F003F003F001E000000
+00000000000000000000FF00FF001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F00FFE0FFE00B1E7F9D0E>I<007800FC00FC00FC00FC007800000000000000000000000003
+FC03FC007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C007C
+707CF87CF878F8F070E01F800E26839D0F>I<FF0000FF00001F00001F00001F00001F00001F00
+001F00001F00001F00001F00001F0FF81F0FF81F03801F07001F0C001F18001F70001FF8001FFC
+001FBC001F3E001F1F001F0F001F0F801F07C01F03E0FFC7FCFFC7FC161D7F9C19>I<FF00FF00
+1F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F001F
+001F001F001F001F001F00FFE0FFE00B1D7F9C0E>I<FF0FC07E00FF31E18F001F40F207801F80
+FC07C01F80FC07C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F00F807C01F
+00F807C01F00F807C01F00F807C01F00F807C01F00F807C0FFE7FF3FF8FFE7FF3FF825127F9128
+>I<FF0FC0FF31E01F40F01F80F81F80F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F
+00F81F00F81F00F81F00F8FFE7FFFFE7FF18127F911B>I<01FC000F07801C01C03C01E07800F0
+7800F0F800F8F800F8F800F8F800F8F800F8F800F87800F07800F03C01E01E03C00F078001FC00
+15127F9118>I<FF3F80FFE1E01F80F01F00781F007C1F003C1F003E1F003E1F003E1F003E1F00
+3E1F003E1F003C1F007C1F00781F80F01FC1E01F3F001F00001F00001F00001F00001F00001F00
+00FFE000FFE000171A7F911B>I<03F0600F0CE01E07E03C03E07C03E07803E0F803E0F803E0F8
+03E0F803E0F803E0F803E07803E07C03E03C03E01C07E00E0FE003F3E00003E00003E00003E000
+03E00003E00003E0001FFC001FFC161A7E9119>I<FE3E00FE47001E8F801E8F801E8F801F0700
+1F00001F00001F00001F00001F00001F00001F00001F00001F00001F0000FFF000FFF00011127F
+9114>I<1FD830786018E018E018F000FF807FE07FF01FF807FC007CC01CC01CE01CE018F830CF
+C00E127E9113>I<0300030003000300070007000F000F003FFCFFFC1F001F001F001F001F001F
+001F001F001F001F0C1F0C1F0C1F0C0F08079803F00E1A7F9913>I<FF07F8FF07F81F00F81F00
+F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F00F81F01F80F01F80786
+FF01F8FF18127F911B>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007C18003E30003
+E30001F60001F60001FE0000FC0000FC0000780000780000300016127F9119>I<FF8FF8FEFF8F
+F8FE1F03E0301F03E0301F83E0700F83F0600F86F06007C6F0C007CEF8C007EC79C003EC7D8003
+F83D8001F83F0001F83F0001F01F0000F01E0000E00E0000E00E001F127F9122>I<FFC7FCFFC7
+FC1F81800F838007C70003EE0001FC0001F80000F800007C0000FE0001DF00039F00070F800607
+C00C03E0FF07FCFF07FC16127F9119>I<FFC1FCFFC1FC1F00601F80E00F80C00FC0C007C18007
+C18003E30003E30001F70001F60000FE0000FC0000FC0000780000780000300000300000700070
+6000F86000F8C000F980007300003E0000161A7F9119>I<3FFF803C1F00303F00303E00607C00
+60FC0060F80001F00003F00007E00007C1800F81801F81801F03803E03007E07007C0F00FFFF00
+11127F9115>I E /Fl 36 121 df<00000007FF800000000001FFFFF0000000000FFFFFFC0000
+00003FFFFFFE00000000FFFC00FF00000001FFC0003F80000007FF00007FC000000FFE0001FFC0
+00001FFC0001FFE000001FF80003FFE000003FF00003FFE000003FF00003FFE000007FE00003FF
+E000007FE00003FFE000007FE00003FFE000007FE00003FFE000007FE00001FFC000007FE00000
+FF8000007FE000003E0000007FE00000000000007FE00000000000007FE00000000000007FE000
+00000000007FE00000000000007FE00000000000007FE0003FFFF000FFFFFFFFFFFFF000FFFFFF
+FFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000FFFFFFFFFFFFF000007FF00000FFF000007F
+F000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00000
+7FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000
+007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
+00007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007F
+F000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF00000
+7FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000
+007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF000007FF0
+00007FF0003FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFFFFE03FFF
+FFE03FFFFFE03B487EC742>12 D<0000FFE00000000FFFFE0000003FFFFFC00000FFFFFFF00003
+FFFFFFFC0007FC01FFFE000FE0007FFF001FC0001FFF803F80000FFFC03FE00007FFE07FF80007
+FFE07FFC0003FFF0FFFC0003FFF0FFFE0001FFF8FFFE0001FFF8FFFE0001FFF8FFFE0000FFFCFF
+FE0000FFFC7FFC0000FFFC7FFC0000FFFC3FF80000FFFC1FF00000FFFC0FE00000FFFC00000001
+FFFC00000001FFF800000001FFF800000001FFF000000003FFF000000003FFE000000003FFE000
+000007FFC000000007FF800000000FFF800000001FFF000000001FFE000000003FFC000000007F
+F8000000007FE000000000FFC000000001FF8000000003FF0000000007FC000000000FF8000000
+001FF0000000003FC0000000007F80007C0000FF00007C0000FE00007C0001FC00007C0003F000
+00F80007E00000F8000FC00000F8001F800000F8003F000001F8007C000003F800FFFFFFFFF801
+FFFFFFFFF003FFFFFFFFF007FFFFFFFFF00FFFFFFFFFF01FFFFFFFFFF03FFFFFFFFFF07FFFFFFF
+FFF07FFFFFFFFFF0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE0FFFFFFFFFFE02E447AC33B>50
+D<0000000003E000000000000000000007F000000000000000000007F00000000000000000000F
+F80000000000000000000FF80000000000000000000FF80000000000000000001FFC0000000000
+000000001FFC0000000000000000003FFE0000000000000000003FFE0000000000000000007FFF
+0000000000000000007FFF0000000000000000007FFF000000000000000000FFFF800000000000
+000000FFFF800000000000000001FFFFC00000000000000001FFFFC00000000000000001FFFFC0
+0000000000000003FFFFE00000000000000003EFFFE00000000000000007EFFFF0000000000000
+0007CFFFF00000000000000007C7FFF0000000000000000FC7FFF8000000000000000F83FFF800
+0000000000001F83FFFC000000000000001F03FFFC000000000000001F01FFFC00000000000000
+3F01FFFE000000000000003E00FFFE000000000000007E00FFFF000000000000007C007FFF0000
+0000000000FC007FFF80000000000000F8007FFF80000000000000F8003FFF80000000000001F8
+003FFFC0000000000001F0001FFFC0000000000003F0001FFFE0000000000003E0001FFFE00000
+00000003E0000FFFE0000000000007E0000FFFF0000000000007C00007FFF000000000000FC000
+07FFF800000000000F800007FFF800000000000F800003FFF800000000001F800003FFFC000000
+00001F000001FFFC00000000003FFFFFFFFFFE00000000003FFFFFFFFFFE00000000007FFFFFFF
+FFFF00000000007FFFFFFFFFFF00000000007FFFFFFFFFFF0000000000FC0000007FFF80000000
+00F80000003FFF8000000001F80000003FFFC000000001F00000003FFFC000000001F00000001F
+FFC000000003F00000001FFFE000000003E00000000FFFE000000007E00000000FFFF000000007
+C00000000FFFF000000007C000000007FFF00000000FC000000007FFF80000000F8000000003FF
+F80000001F8000000003FFFC0000001F0000000003FFFC0000007FC000000001FFFC0000FFFFFF
+C00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFFFF80FFFFFFC00007FFFFFF
+FF80FFFFFFC00007FFFFFFFF8051487CC75A>65 D<000000003FFE00000E0000000FFFFFC0001E
+0000007FFFFFF8003E000003FFFFFFFE00FE00000FFFFFFFFF81FE00003FFFF800FFC3FE0000FF
+FF80000FF7FE0001FFFC000003FFFE0007FFF0000001FFFE000FFFC00000007FFE001FFF800000
+003FFE003FFF000000001FFE007FFE000000000FFE00FFFC0000000007FE01FFF80000000007FE
+03FFF00000000003FE03FFF00000000001FE07FFE00000000001FE07FFE00000000000FE0FFFC0
+0000000000FE0FFFC000000000007E1FFFC000000000007E1FFF8000000000007E3FFF80000000
+00007E3FFF8000000000003E3FFF8000000000003E7FFF8000000000003E7FFF0000000000003E
+7FFF000000000000007FFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00
+000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000
+000000FFFF00000000000000FFFF00000000000000FFFF00000000000000FFFF00000000000000
+FFFF00000000000000FFFF000000000000007FFF000000000000007FFF000000000000007FFF00
+0000000000007FFF8000000000003E3FFF8000000000003E3FFF8000000000003E3FFF80000000
+00003E1FFF8000000000003E1FFFC000000000003E0FFFC000000000007C0FFFC000000000007C
+07FFE000000000007C07FFE00000000000F803FFF00000000000F803FFF00000000001F801FFF8
+0000000001F000FFFC0000000003E0007FFE0000000007E0003FFF000000000FC0001FFF800000
+001F80000FFFC00000003F000007FFF0000000FE000001FFFC000001FC000000FFFF80000FF800
+00003FFFF8007FF00000000FFFFFFFFFC000000003FFFFFFFF00000000007FFFFFFC0000000000
+0FFFFFE00000000000003FFE000000474979C756>67 D<FFFFFFFFFFFFC0000000FFFFFFFFFFFF
+FE000000FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFFF00000FFFFFFFFFFFFFFFC0000001FFF8000
+07FFFF0000001FFF8000007FFF8000001FFF8000000FFFE000001FFF80000007FFF000001FFF80
+000001FFF800001FFF80000000FFFC00001FFF800000007FFE00001FFF800000003FFF00001FFF
+800000001FFF00001FFF800000000FFF80001FFF800000000FFFC0001FFF8000000007FFC0001F
+FF8000000007FFE0001FFF8000000003FFE0001FFF8000000003FFF0001FFF8000000003FFF000
+1FFF8000000003FFF8001FFF8000000001FFF8001FFF8000000001FFF8001FFF8000000001FFFC
+001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FF
+FC001FFF8000000001FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000
+FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF80000000
+00FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF8000000000FFFE001FFF800000
+0000FFFE001FFF8000000000FFFE001FFF8000000001FFFE001FFF8000000001FFFC001FFF8000
+000001FFFC001FFF8000000001FFFC001FFF8000000001FFFC001FFF8000000001FFF8001FFF80
+00000001FFF8001FFF8000000001FFF8001FFF8000000003FFF0001FFF8000000003FFF0001FFF
+8000000003FFF0001FFF8000000007FFE0001FFF8000000007FFE0001FFF800000000FFFC0001F
+FF800000000FFF80001FFF800000001FFF80001FFF800000003FFF00001FFF800000003FFE0000
+1FFF800000007FFC00001FFF80000001FFF800001FFF80000003FFF000001FFF8000000FFFE000
+001FFF8000007FFFC000001FFF800003FFFF0000FFFFFFFFFFFFFFFE0000FFFFFFFFFFFFFFF800
+00FFFFFFFFFFFFFFC00000FFFFFFFFFFFFFE000000FFFFFFFFFFFFC00000004F477CC65B>I<FF
+FFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFFFFFFFFFC00FFFFFFFF
+FFFFFFFE00001FFFC00003FFFE00001FFFC000003FFE00001FFFC000000FFE00001FFFC0000003
+FE00001FFFC0000001FE00001FFFC0000000FE00001FFFC0000000FE00001FFFC00000007E0000
+1FFFC00000007F00001FFFC00000003F00001FFFC00000003F00001FFFC00000001F00001FFFC0
+0000001F00001FFFC00000001F00001FFFC00000001F00001FFFC0007C001F00001FFFC0007C00
+0F80001FFFC0007C000F80001FFFC0007C000F80001FFFC0007C000F80001FFFC0007C00000000
+1FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC001FC000000001FFFC0
+03FC000000001FFFC01FFC000000001FFFFFFFFC000000001FFFFFFFFC000000001FFFFFFFFC00
+0000001FFFFFFFFC000000001FFFFFFFFC000000001FFFC01FFC000000001FFFC003FC00000000
+1FFFC001FC000000001FFFC000FC000000001FFFC000FC000000001FFFC000FC000000001FFFC0
+007C000000001FFFC0007C000000001FFFC0007C000000001FFFC0007C000000001FFFC0007C00
+0000001FFFC0007C000000001FFFC00000000000001FFFC00000000000001FFFC0000000000000
+1FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0
+0000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000
+0000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000FF
+FFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFFFF00000000FFFFFFFF
+FF0000000041467CC54B>70 D<000000003FFE00000E000000000FFFFFC0001E000000007FFFFF
+F8003E00000003FFFFFFFE00FE0000000FFFFFFFFF81FE0000003FFFF800FFC3FE000000FFFF80
+000FF7FE000001FFFC000003FFFE000007FFF0000001FFFE00000FFFC00000007FFE00001FFF80
+0000003FFE00003FFF000000001FFE00007FFE000000000FFE0000FFFC0000000007FE0001FFF8
+0000000007FE0003FFF00000000003FE0003FFF00000000001FE0007FFE00000000001FE0007FF
+E00000000000FE000FFFC00000000000FE000FFFC000000000007E001FFFC000000000007E001F
+FF8000000000007E003FFF8000000000007E003FFF8000000000003E003FFF8000000000003E00
+7FFF8000000000003E007FFF0000000000003E007FFF00000000000000007FFF00000000000000
+00FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF000000000000
+0000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000
+000000FFFF0000000000000000FFFF0000000000000000FFFF0000000000000000FFFF00000000
+00000000FFFF0000007FFFFFFFFE7FFF0000007FFFFFFFFE7FFF0000007FFFFFFFFE7FFF800000
+7FFFFFFFFE7FFF8000007FFFFFFFFE3FFF8000000000FFFE003FFF8000000000FFFE003FFF8000
+000000FFFE001FFF8000000000FFFE001FFFC000000000FFFE000FFFC000000000FFFE000FFFC0
+00000000FFFE0007FFE000000000FFFE0007FFE000000000FFFE0003FFF000000000FFFE0003FF
+F800000000FFFE0001FFF800000000FFFE0000FFFC00000000FFFE00007FFE00000000FFFE0000
+3FFF00000000FFFE00001FFF80000000FFFE00000FFFE0000001FFFE000007FFF0000003FFFE00
+0001FFFC000007FFFE000000FFFF80001FFFFE0000003FFFFC00FFC7FE0000000FFFFFFFFF83FE
+00000003FFFFFFFE00FE000000007FFFFFF8003E000000000FFFFFE0000E00000000003FFE0000
+00004F4979C75D>I<FFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFEFFFFFFFFFE000FFFE000
+000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000F
+FFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE00000
+0FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000
+000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE0
+00000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000000FFF
+E000000FFFE000000FFFE000000FFFE000000FFFE000000FFFE000FFFFFFFFFEFFFFFFFFFEFFFF
+FFFFFEFFFFFFFFFEFFFFFFFFFE27477DC62D>73 D<FFFFFFFFFF000000FFFFFFFFFF000000FFFF
+FFFFFF000000FFFFFFFFFF000000FFFFFFFFFF000000001FFFC000000000001FFFC00000000000
+1FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000
+001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0000000
+00001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC00000
+0000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000
+000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC0
+00000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFF
+C000000000001FFFC000000000001FFFC000000000001FFFC000000000001FFFC000000000001F
+FFC000000000001FFFC000000000001FFFC0000000F8001FFFC0000000F8001FFFC0000000F800
+1FFFC0000000F8001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0001FFFC0000001F0
+001FFFC0000001F0001FFFC0000003F0001FFFC0000003F0001FFFC0000003F0001FFFC0000007
+F0001FFFC0000007F0001FFFC000000FE0001FFFC000001FE0001FFFC000001FE0001FFFC00000
+3FE0001FFFC000007FE0001FFFC00000FFE0001FFFC00003FFE0001FFFC0000FFFE0001FFFC000
+7FFFE0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFFFFFFFFC0FFFFFFFF
+FFFFFFC03D477CC647>76 D<FFFFFFE0000000000003FFFFFFFFFFFFF0000000000007FFFFFFFF
+FFFFF0000000000007FFFFFFFFFFFFF800000000000FFFFFFFFFFFFFF800000000000FFFFFFF00
+1FFFF800000000000FFFF800001FFFFC00000000001EFFF800001FFFFC00000000001EFFF80000
+1FBFFE00000000003CFFF800001FBFFE00000000003CFFF800001F9FFF000000000078FFF80000
+1F9FFF000000000078FFF800001F8FFF8000000000F0FFF800001F8FFF8000000000F0FFF80000
+1F87FFC000000001E0FFF800001F87FFC000000001E0FFF800001F87FFC000000001E0FFF80000
+1F83FFE000000003C0FFF800001F83FFE000000003C0FFF800001F81FFF00000000780FFF80000
+1F81FFF00000000780FFF800001F80FFF80000000F00FFF800001F80FFF80000000F00FFF80000
+1F807FFC0000001E00FFF800001F807FFC0000001E00FFF800001F807FFC0000001E00FFF80000
+1F803FFE0000003C00FFF800001F803FFE0000003C00FFF800001F801FFF0000007800FFF80000
+1F801FFF0000007800FFF800001F800FFF800000F000FFF800001F800FFF800000F000FFF80000
+1F8007FFC00001E000FFF800001F8007FFC00001E000FFF800001F8003FFE00003C000FFF80000
+1F8003FFE00003C000FFF800001F8003FFE00003C000FFF800001F8001FFF000078000FFF80000
+1F8001FFF000078000FFF800001F8000FFF8000F0000FFF800001F8000FFF8000F0000FFF80000
+1F80007FFC001E0000FFF800001F80007FFC001E0000FFF800001F80003FFE003C0000FFF80000
+1F80003FFE003C0000FFF800001F80001FFF00780000FFF800001F80001FFF00780000FFF80000
+1F80001FFF00780000FFF800001F80000FFF80F00000FFF800001F80000FFF80F00000FFF80000
+1F800007FFC1E00000FFF800001F800007FFC1E00000FFF800001F800003FFE3C00000FFF80000
+1F800003FFE3C00000FFF800001F800001FFF7800000FFF800001F800001FFF7800000FFF80000
+1F800001FFF7800000FFF800001F800000FFFF000000FFF800001F800000FFFF000000FFF80000
+1F8000007FFE000000FFF800001F8000007FFE000000FFF800001F8000003FFC000000FFF80000
+1F8000003FFC000000FFF800001F8000001FF8000000FFF800001F8000001FF8000000FFF80000
+7FE000000FF0000000FFF800FFFFFFF0000FF00007FFFFFFFFFFFFFFF0000FF00007FFFFFFFFFF
+FFFFF00007E00007FFFFFFFFFFFFFFF00007E00007FFFFFFFFFFFFFFF00003C00007FFFFFFFF68
+477CC671>I<FFFFFFC0000000FFFFFFF0FFFFFFE0000000FFFFFFF0FFFFFFF0000000FFFFFFF0
+FFFFFFF8000000FFFFFFF0FFFFFFFC000000FFFFFFF0001FFFFC000000007FE000001FFFFE0000
+00001F8000001FFFFF000000001F8000001FFFFF800000001F8000001FFFFFC00000001F800000
+1FBFFFE00000001F8000001F9FFFE00000001F8000001F9FFFF00000001F8000001F8FFFF80000
+001F8000001F87FFFC0000001F8000001F83FFFE0000001F8000001F81FFFF0000001F8000001F
+80FFFF0000001F8000001F80FFFF8000001F8000001F807FFFC000001F8000001F803FFFE00000
+1F8000001F801FFFF000001F8000001F800FFFF800001F8000001F8007FFF800001F8000001F80
+07FFFC00001F8000001F8003FFFE00001F8000001F8001FFFF00001F8000001F8000FFFF80001F
+8000001F80007FFFC0001F8000001F80003FFFC0001F8000001F80003FFFE0001F8000001F8000
+1FFFF0001F8000001F80000FFFF8001F8000001F800007FFFC001F8000001F800003FFFE001F80
+00001F800001FFFF001F8000001F800001FFFF001F8000001F800000FFFF801F8000001F800000
+7FFFC01F8000001F8000003FFFE01F8000001F8000001FFFF01F8000001F8000000FFFF81F8000
+001F8000000FFFF81F8000001F80000007FFFC1F8000001F80000003FFFE1F8000001F80000001
+FFFF1F8000001F80000000FFFF9F8000001F800000007FFFDF8000001F800000007FFFDF800000
+1F800000003FFFFF8000001F800000001FFFFF8000001F800000000FFFFF8000001F8000000007
+FFFF8000001F8000000003FFFF8000001F8000000003FFFF8000001F8000000001FFFF8000001F
+8000000000FFFF8000001F80000000007FFF8000001F80000000003FFF8000001F80000000001F
+FF8000001F80000000001FFF8000001F80000000000FFF8000001F800000000007FF8000001F80
+0000000003FF8000001F800000000001FF8000007FE00000000000FF8000FFFFFFF000000000FF
+8000FFFFFFF0000000007F8000FFFFFFF0000000003F8000FFFFFFF0000000001F8000FFFFFFF0
+000000000F000054477CC65D>I<FFFFFFFFFFFF800000FFFFFFFFFFFFFC0000FFFFFFFFFFFFFF
+0000FFFFFFFFFFFFFFC000FFFFFFFFFFFFFFF000001FFF80000FFFFC00001FFF800001FFFE0000
+1FFF8000007FFF00001FFF8000003FFF80001FFF8000001FFFC0001FFF8000000FFFC0001FFF80
+00000FFFE0001FFF8000000FFFE0001FFF80000007FFF0001FFF80000007FFF0001FFF80000007
+FFF0001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF800
+1FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80000007FFF8001FFF80
+000007FFF0001FFF80000007FFF0001FFF80000007FFF0001FFF8000000FFFE0001FFF8000000F
+FFE0001FFF8000000FFFC0001FFF8000001FFF80001FFF8000003FFF80001FFF8000007FFF0000
+1FFF800001FFFE00001FFF80000FFFF800001FFFFFFFFFFFF000001FFFFFFFFFFFC000001FFFFF
+FFFFFE0000001FFFFFFFFFF00000001FFFC00000000000001FFFC00000000000001FFFC0000000
+0000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000000000
+1FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0
+0000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000
+0000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0000000000000
+1FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC00000000000001FFFC0
+0000000000001FFFC00000000000001FFFC00000000000FFFFFFFFF800000000FFFFFFFFF80000
+0000FFFFFFFFF800000000FFFFFFFFF800000000FFFFFFFFF80000000045477CC651>80
+D<FFFFFFFFFFFC0000000000FFFFFFFFFFFFF000000000FFFFFFFFFFFFFE00000000FFFFFFFFFF
+FFFF80000000FFFFFFFFFFFFFFE0000000001FFF80001FFFF8000000001FFF800001FFFC000000
+001FFF8000007FFF000000001FFF8000003FFF800000001FFF8000001FFF800000001FFF800000
+0FFFC00000001FFF8000000FFFE00000001FFF8000000FFFE00000001FFF80000007FFF0000000
+1FFF80000007FFF00000001FFF80000007FFF80000001FFF80000007FFF80000001FFF80000007
+FFF80000001FFF80000007FFF80000001FFF80000007FFF80000001FFF80000007FFF80000001F
+FF80000007FFF80000001FFF80000007FFF80000001FFF80000007FFF00000001FFF80000007FF
+F00000001FFF8000000FFFE00000001FFF8000000FFFE00000001FFF8000000FFFC00000001FFF
+8000001FFF800000001FFF8000003FFF000000001FFF800000FFFE000000001FFF800003FFF800
+0000001FFF80001FFFF0000000001FFFFFFFFFFFC0000000001FFFFFFFFFFE00000000001FFFFF
+FFFFF800000000001FFFFFFFFFFE00000000001FFF80007FFF80000000001FFF80001FFFC00000
+00001FFF800007FFE0000000001FFF800003FFF0000000001FFF800001FFF8000000001FFF8000
+01FFFC000000001FFF800000FFFE000000001FFF800000FFFE000000001FFF8000007FFE000000
+001FFF8000007FFF000000001FFF8000007FFF000000001FFF8000007FFF000000001FFF800000
+7FFF000000001FFF8000007FFF000000001FFF8000007FFF000000001FFF8000007FFF00000000
+1FFF8000007FFF800000001FFF8000007FFF800000001FFF8000007FFF800000001FFF8000007F
+FF800000001FFF8000007FFF800000001FFF8000007FFF8000E0001FFF8000007FFF8001F0001F
+FF8000007FFFC001F0001FFF8000007FFFC001F0001FFF8000003FFFC001F0001FFF8000003FFF
+C003F0001FFF8000001FFFE003E0001FFF8000000FFFE007E0FFFFFFFFF00007FFF007C0FFFFFF
+FFF00003FFFC1F80FFFFFFFFF00001FFFFFF00FFFFFFFFF000007FFFFE00FFFFFFFFF000001FFF
+FC000000000000000000FFF00054487CC659>82 D<FFFFFFFFF80001FFFFFFC0FFFFFFFFF80001
+FFFFFFC0FFFFFFFFF80001FFFFFFC0FFFFFFFFF80001FFFFFFC0FFFFFFFFF80001FFFFFFC0001F
+FFC000000000FF8000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC000000000
+3E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFF
+C0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E
+0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0
+000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E00
+00001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC000
+0000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000
+001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC00000
+00003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E000000
+1FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000
+003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001F
+FFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC000000000
+3E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFFC0000000003E0000001FFF
+C0000000003E0000000FFFC0000000007E0000000FFFC0000000007C0000000FFFE0000000007C
+0000000FFFE000000000FC00000007FFE000000000F800000007FFE000000001F800000003FFF0
+00000001F800000001FFF000000003F000000001FFF800000007E000000000FFF800000007E000
+0000007FFC0000001FC0000000003FFE0000003F80000000001FFF800000FF00000000000FFFE0
+0007FE000000000003FFFE007FFC000000000001FFFFFFFFF00000000000007FFFFFFFE0000000
+0000000FFFFFFF8000000000000001FFFFFC00000000000000000FFFC00000000052487CC65B>
+85 D<FFFFFFFFE000001FFFFFE0FFFFFFFFE000001FFFFFE0FFFFFFFFE000001FFFFFE0FFFFFF
+FFE000001FFFFFE0FFFFFFFFE000001FFFFFE0007FFF80000000003FE000003FFFC0000000000F
+8000003FFFC0000000001F8000001FFFE0000000001F0000001FFFE0000000003F0000000FFFE0
+000000003E0000000FFFF0000000007E00000007FFF0000000007C00000007FFF8000000007C00
+000007FFF800000000FC00000003FFFC00000000F800000003FFFC00000001F800000001FFFE00
+000001F000000001FFFE00000003F000000000FFFE00000003E000000000FFFF00000007E00000
+00007FFF00000007C0000000007FFF80000007C0000000007FFF8000000FC0000000003FFFC000
+000F80000000003FFFC000001F80000000001FFFC000001F00000000001FFFE000003F00000000
+000FFFE000003E00000000000FFFF000007E00000000000FFFF000007E000000000007FFF80000
+7C000000000007FFF80000FC000000000003FFFC0000F8000000000003FFFC0001F80000000000
+01FFFC0001F0000000000001FFFE0003F0000000000000FFFE0003E0000000000000FFFF0003E0
+000000000000FFFF0007E00000000000007FFF8007C00000000000007FFF800FC0000000000000
+3FFFC00F800000000000003FFFC01F800000000000001FFFC01F000000000000001FFFE03F0000
+00000000000FFFE03E000000000000000FFFF03E000000000000000FFFF07E0000000000000007
+FFF87C0000000000000007FFF8FC0000000000000003FFF8F80000000000000003FFFDF8000000
+0000000001FFFDF00000000000000001FFFFF00000000000000001FFFFF00000000000000000FF
+FFE00000000000000000FFFFE000000000000000007FFFC000000000000000007FFFC000000000
+000000003FFF8000000000000000003FFF8000000000000000001FFF0000000000000000001FFF
+0000000000000000001FFF0000000000000000000FFE0000000000000000000FFE000000000000
+00000007FC00000000000000000007FC00000000000000000003F800000000000000000003F800
+000000000000000001F0000000000053487DC65A>I<FFFFFFFFC03FFFFFFFF0001FFFFFF0FFFF
+FFFFC03FFFFFFFF0001FFFFFF0FFFFFFFFC03FFFFFFFF0001FFFFFF0FFFFFFFFC03FFFFFFFF000
+1FFFFFF0FFFFFFFFC03FFFFFFFF0001FFFFFF0007FFF0000001FFFE00000000FF800007FFF0000
+000FFFE000000003E000007FFF8000000FFFE000000007E000003FFF8000000FFFF000000007C0
+00003FFFC0000007FFF000000007C000003FFFC0000007FFF80000000FC000001FFFC0000003FF
+F80000000F8000001FFFE0000003FFF80000001F8000000FFFE0000003FFFC0000001F0000000F
+FFE0000001FFFC0000001F0000000FFFF0000001FFFE0000003F00000007FFF0000001FFFE0000
+003E00000007FFF8000001FFFE0000007E00000003FFF8000003FFFF0000007C00000003FFF800
+0003FFFF0000007C00000003FFFC000003FFFF000000FC00000001FFFC000007FFFF800000F800
+000001FFFE000007FFFF800000F800000001FFFE000007FFFFC00001F800000000FFFE00000F9F
+FFC00001F000000000FFFF00000F9FFFC00003F0000000007FFF00001F9FFFE00003E000000000
+7FFF00001F0FFFE00003E0000000007FFF80001F0FFFE00007E0000000003FFF80003F0FFFF000
+07C0000000003FFFC0003E07FFF00007C0000000001FFFC0007E07FFF8000F80000000001FFFC0
+007C03FFF8000F80000000001FFFE0007C03FFF8001F80000000000FFFE000FC03FFFC001F0000
+0000000FFFE000F801FFFC001F00000000000FFFF000F801FFFE003F000000000007FFF001F801
+FFFE003E000000000007FFF801F000FFFE007E000000000003FFF803F000FFFF007C0000000000
+03FFF803E0007FFF007C000000000003FFFC03E0007FFF00FC000000000001FFFC07E0007FFF80
+F8000000000001FFFE07C0003FFF80F8000000000001FFFE0FC0003FFFC1F8000000000000FFFE
+0F80001FFFC1F0000000000000FFFF0F80001FFFC3F00000000000007FFF1F80001FFFE3E00000
+000000007FFF1F00000FFFE3E00000000000007FFF9F00000FFFF7E00000000000003FFFBF0000
+0FFFF7C00000000000003FFFFE000007FFFFC00000000000001FFFFE000007FFFF800000000000
+001FFFFC000003FFFF800000000000001FFFFC000003FFFF800000000000000FFFFC000003FFFF
+000000000000000FFFF8000001FFFF000000000000000FFFF8000001FFFF0000000000000007FF
+F0000000FFFE0000000000000007FFF0000000FFFE0000000000000003FFF0000000FFFC000000
+0000000003FFE00000007FFC0000000000000003FFE00000007FFC0000000000000001FFE00000
+007FF80000000000000001FFC00000003FF80000000000000001FFC00000003FF8000000000000
+0000FF800000001FF00000000000000000FF800000001FF000000000000000007F800000001FE0
+00000000000000007F000000000FE000000000000000007F000000000FE000000000000000003E
+0000000007C00000000074487DC67B>I<0007FFFC000000007FFFFFC0000001FFFFFFF8000003
+FFFFFFFE000007FE001FFF000007FF0003FFC0000FFF8001FFE0000FFF8000FFF0000FFF80007F
+F0000FFF80007FF8000FFF80007FF80007FF00003FFC0007FF00003FFC0003FE00003FFC0000F8
+00003FFC00000000003FFC00000000003FFC00000000003FFC00000000003FFC00000007FFFFFC
+000000FFFFFFFC000007FFFFFFFC00003FFFE03FFC0000FFFE003FFC0003FFF0003FFC0007FFC0
+003FFC000FFF00003FFC001FFE00003FFC003FFC00003FFC007FF800003FFC007FF800003FFC00
+FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF000003FFC00FFF00000
+7FFC007FF80000FFFC007FF80001EFFC003FFC0003EFFC003FFF0007CFFF000FFFC03F8FFFF807
+FFFFFF07FFFC01FFFFFC03FFFC007FFFF001FFFC0003FF80007FF8362E7DAD3A>97
+D<007FC00000000000FFFFC00000000000FFFFC00000000000FFFFC00000000000FFFFC0000000
+0000FFFFC0000000000003FFC0000000000001FFC0000000000001FFC0000000000001FFC00000
+00000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000
+0000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0
+000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FF
+C0000000000001FFC0000000000001FFC00FFC00000001FFC07FFFC0000001FFC3FFFFF0000001
+FFCFFFFFFC000001FFDFF00FFF000001FFFF8003FF800001FFFE0001FFC00001FFF800007FE000
+01FFF000007FF00001FFE000003FF80001FFE000001FFC0001FFE000001FFC0001FFE000001FFE
+0001FFE000001FFE0001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000000F
+FF0001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE00000
+0FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000
+000FFF8001FFE000000FFF0001FFE000000FFF0001FFE000000FFF0001FFE000001FFE0001FFE0
+00001FFE0001FFE000001FFC0001FFE000001FFC0001FFE000003FF80001FFF000003FF80001FF
+F800007FF00001FFFC0000FFE00001FFFE0001FFC00001FFBF0007FF800001FF1FE01FFE000001
+FE0FFFFFFC000001FC03FFFFF0000001F800FFFF80000001F0001FF800000039487CC742>I<00
+001FFFC0000000FFFFF8000007FFFFFE00001FFFFFFF80007FFC00FFC000FFE001FFC001FFC003
+FFE003FF8003FFE007FF0003FFE00FFE0003FFE00FFE0003FFE01FFC0001FFC01FFC0001FFC03F
+FC0000FF803FFC00003E007FF8000000007FF8000000007FF800000000FFF800000000FFF80000
+0000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FFF800000000FF
+F800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC000000003FFC0000
+00001FFC000000F81FFE000000F80FFE000000F80FFF000001F007FF800003F003FFC00007E001
+FFE0000FC000FFF0001F80007FFE00FF00001FFFFFFE000007FFFFF8000000FFFFE00000001FFE
+00002D2E7CAD35>I<00000000007FC00000000000FFFFC00000000000FFFFC00000000000FFFF
+C00000000000FFFFC00000000000FFFFC0000000000003FFC0000000000001FFC0000000000001
+FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC00000000000
+01FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC000000000
+0001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000000001FFC0000000
+000001FFC0000000000001FFC0000000000001FFC00000000FFC01FFC0000000FFFF81FFC00000
+07FFFFE1FFC000001FFFFFF9FFC000007FFC03FFFFC00000FFF0007FFFC00001FFC0001FFFC000
+03FF80000FFFC00007FF000007FFC0000FFE000003FFC0000FFE000003FFC0001FFC000003FFC0
+001FFC000003FFC0003FFC000003FFC0003FFC000003FFC0007FF8000003FFC0007FF8000003FF
+C0007FF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003
+FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF8000003FFC000FFF80000
+03FFC000FFF8000003FFC0007FF8000003FFC0007FF8000003FFC0007FF8000003FFC0003FF800
+0003FFC0003FFC000003FFC0003FFC000003FFC0001FFC000003FFC0001FFC000003FFC0000FFE
+000007FFC00007FF00000FFFC00003FF00001FFFC00001FFC0003FFFC00000FFE000FFFFE00000
+7FF807FBFFFF80001FFFFFF3FFFF800007FFFFC3FFFF800001FFFF03FFFF8000001FF803FFFF80
+39487CC742>I<00001FFE00000001FFFFE0000007FFFFF800001FFFFFFE00007FFC07FF0000FF
+E001FF8001FFC0007FC003FF80003FE007FF00003FF00FFE00001FF01FFE00000FF81FFC00000F
+F83FFC00000FFC3FFC000007FC7FFC000007FC7FF8000007FC7FF8000007FE7FF8000007FEFFF8
+000007FEFFF8000007FEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFEFFFFFFFFFFFCFFF8000000
+00FFF800000000FFF800000000FFF8000000007FF8000000007FF8000000007FFC000000003FFC
+000000003FFC000000003FFC0000001C1FFE0000003E0FFE0000003E07FF0000007E07FF000000
+FC03FF800001F801FFC00003F0007FF0001FE0003FFE00FFC0001FFFFFFF800007FFFFFE000000
+FFFFF80000000FFF80002F2E7DAD36>I<000000FFC000000007FFF80000003FFFFC000000FFFF
+FF000001FFC1FF000007FF03FF80000FFC03FF80000FF807FFC0001FF807FFC0003FF007FFC000
+3FF007FFC0003FE003FF80007FE003FF80007FE001FF00007FE000FE00007FE0003800007FE000
+0000007FE0000000007FE0000000007FE0000000007FE0000000007FE0000000007FE000000000
+7FE0000000007FE0000000007FE0000000FFFFFFFE0000FFFFFFFE0000FFFFFFFE0000FFFFFFFE
+0000FFFFFFFE0000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000
+0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000
+0000007FF0000000007FF0000000007FF0000000007FF0000000007FF0000000007FF000000000
+7FF0000000007FF0000000007FF0000000007FF0000000007FF00000003FFFFFF800003FFFFFF8
+00003FFFFFF800003FFFFFF800003FFFFFF800002A487DC724>I<00000000001F8000007FF000
+FFE00007FFFF03FFF0001FFFFFC7FFF0007FFFFFFFC7F800FFE03FFE0FF801FF800FFC0FF803FF
+0007FE0FF807FE0003FF07F007FE0003FF07F00FFC0001FF81C00FFC0001FF80000FFC0001FF80
+001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC0001FFC00
+01FFC0000FFC0001FF80000FFC0001FF80000FFC0001FF800007FE0003FF000007FE0003FF0000
+03FF0007FE000001FF800FFC000000FFE03FF8000001FFFFFFF0000001DFFFFFC0000003C7FFFF
+00000003C07FF000000007C0000000000007C0000000000007C0000000000007C0000000000007
+E0000000000007F0000000000007F8000000000007FFFFFFF0000007FFFFFFFF000003FFFFFFFF
+E00003FFFFFFFFF80001FFFFFFFFFE0001FFFFFFFFFF0000FFFFFFFFFF80007FFFFFFFFF8003FF
+FFFFFFFFC00FFFFFFFFFFFC01FF800001FFFE03FE0000001FFE07FC00000007FF07FC00000003F
+F0FF800000001FF0FF800000001FF0FF800000001FF0FF800000001FF0FF800000001FF07FC000
+00003FE07FC00000003FE03FE00000007FC03FF0000000FFC01FFC000003FF800FFF00000FFF00
+03FFF000FFFC0000FFFFFFFFF000003FFFFFFFC0000007FFFFFE000000003FFFC0000035447DAE
+3B>I<00FC0001FE0003FF0007FF800FFFC01FFFE01FFFE01FFFE01FFFE01FFFE01FFFE00FFFC0
+07FF8003FF0001FE0000FC00000000000000000000000000000000000000000000000000000000
+000000000000007FC0FFFFC0FFFFC0FFFFC0FFFFC0FFFFC003FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC001FFC0
+01FFC001FFC001FFC001FFC0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF18497CC820>105
+D<007FC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC000000000FFFFC0
+0000000003FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000000000
+01FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC000
+00000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC00000000001
+FFC00000000001FFC00000000001FFC00000000001FFC00000000001FFC0007FFFF801FFC0007F
+FFF801FFC0007FFFF801FFC0007FFFF801FFC0007FFFF801FFC0000FFE0001FFC00007F00001FF
+C0000FE00001FFC0003FC00001FFC0007F800001FFC000FE000001FFC001FC000001FFC007F800
+0001FFC00FF0000001FFC01FC0000001FFC03F80000001FFC0FF00000001FFC1FE00000001FFC3
+FF00000001FFCFFF80000001FFDFFFC0000001FFFFFFC0000001FFFFFFE0000001FFFFFFF00000
+01FFFCFFF8000001FFF87FFC000001FFE03FFC000001FFC01FFE000001FFC01FFF000001FFC00F
+FF800001FFC007FFC00001FFC003FFC00001FFC001FFE00001FFC001FFF00001FFC000FFF80001
+FFC0007FFC0001FFC0003FFC0001FFC0001FFE0001FFC0000FFF0001FFC0000FFF8001FFC0000F
+FFC0FFFFFF807FFFFFFFFFFF807FFFFFFFFFFF807FFFFFFFFFFF807FFFFFFFFFFF807FFFFF3848
+7CC73F>107 D<007FC000FFFFC000FFFFC000FFFFC000FFFFC000FFFFC00003FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
+C00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001
+FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC000
+01FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC0
+0001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FFC00001FF
+C000FFFFFF80FFFFFF80FFFFFF80FFFFFF80FFFFFF8019487CC720>I<007FC001FFC00000FFE0
+0000FFFFC00FFFF80007FFFC0000FFFFC03FFFFE001FFFFF0000FFFFC0FFFFFF007FFFFF8000FF
+FFC1FC07FF80FE03FFC000FFFFC3E003FFC1F001FFE00003FFC7C001FFC3E000FFE00001FFCF00
+01FFE78000FFF00001FFDE0000FFEF00007FF00001FFDC0000FFEE00007FF00001FFFC0000FFFE
+00007FF80001FFF80000FFFC00007FF80001FFF00000FFF800007FF80001FFF00000FFF800007F
+F80001FFF00000FFF800007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001
+FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000
+00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0
+00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F
+F80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001
+FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE000
+00FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF0
+00007FF80001FFE00000FFF000007FF80001FFE00000FFF000007FF80001FFE00000FFF000007F
+F80001FFE00000FFF000007FF800FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FF
+FFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF0FFFFFFC07FFFFFE03FFFFFF05C2E7CAD
+63>I<007FC001FFC00000FFFFC00FFFF80000FFFFC03FFFFE0000FFFFC0FFFFFF0000FFFFC1FC
+07FF8000FFFFC3E003FFC00003FFC7C001FFC00001FFCF0001FFE00001FFDE0000FFE00001FFDC
+0000FFE00001FFFC0000FFF00001FFF80000FFF00001FFF00000FFF00001FFF00000FFF00001FF
+F00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
+FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000
+01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0
+0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FF
+F00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000
+FFF00001FFE00000FFF00001FFE00000FFF000FFFFFFC07FFFFFE0FFFFFFC07FFFFFE0FFFFFFC0
+7FFFFFE0FFFFFFC07FFFFFE0FFFFFFC07FFFFFE03B2E7CAD42>I<00000FFF0000000000FFFFF0
+00000007FFFFFE0000001FFFFFFF8000003FFC03FFC00000FFE0007FF00001FF80001FF80003FF
+00000FFC0007FE000007FE000FFE000007FF000FFC000003FF001FFC000003FF803FFC000003FF
+C03FF8000001FFC03FF8000001FFC07FF8000001FFE07FF8000001FFE07FF8000001FFE0FFF800
+0001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0
+FFF8000001FFF0FFF8000001FFF0FFF8000001FFF0FFF8000001FFF07FF8000001FFE07FF80000
+01FFE07FF8000001FFE07FF8000001FFE03FFC000003FFC03FFC000003FFC01FFC000003FF801F
+FE000007FF800FFE000007FF0007FF00000FFE0003FF80001FFC0001FFC0003FF80000FFE0007F
+F000007FFC03FFE000001FFFFFFF80000007FFFFFE00000000FFFFF0000000000FFF000000342E
+7DAD3B>I<007FC00FFC000000FFFFC07FFFC00000FFFFC3FFFFF00000FFFFCFFFFFFC0000FFFF
+DFF01FFF0000FFFFFF8007FF800003FFFE0001FFC00001FFF80000FFE00001FFF00000FFF00001
+FFE000007FF80001FFE000003FFC0001FFE000003FFC0001FFE000003FFE0001FFE000001FFE00
+01FFE000001FFF0001FFE000001FFF0001FFE000001FFF0001FFE000000FFF0001FFE000000FFF
+8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000F
+FF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE000000FFF8001FFE00000
+0FFF0001FFE000001FFF0001FFE000001FFF0001FFE000001FFE0001FFE000001FFE0001FFE000
+003FFC0001FFE000003FFC0001FFE000007FF80001FFF000007FF80001FFF80000FFF00001FFFC
+0001FFE00001FFFE0003FFC00001FFFF0007FF800001FFFFE03FFE000001FFEFFFFFFC000001FF
+E3FFFFF0000001FFE0FFFF80000001FFE01FF800000001FFE0000000000001FFE0000000000001
+FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE00000000000
+01FFE0000000000001FFE0000000000001FFE0000000000001FFE0000000000001FFE000000000
+0001FFE0000000000001FFE0000000000001FFE00000000000FFFFFFC000000000FFFFFFC00000
+0000FFFFFFC000000000FFFFFFC000000000FFFFFFC00000000039427CAD42>I<00FF803F8000
+FFFF80FFF000FFFF83FFFC00FFFF87FFFE00FFFF8FC3FF00FFFF8F07FF0003FF9E0FFF8001FFBC
+0FFF8001FFB80FFF8001FFF80FFF8001FFF00FFF8001FFF007FF0001FFF007FF0001FFE003FE00
+01FFE000F80001FFE000000001FFE000000001FFC000000001FFC000000001FFC000000001FFC0
+00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000
+01FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0
+00000001FFC000000001FFC000000001FFC000000001FFC000000001FFC000000001FFC0000000
+01FFC0000000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000FFFFFFE00000292E7C
+AD31>114 D<000FFF00E0007FFFF3E001FFFFFFE007FFFFFFE00FF800FFE01FC0001FE03F8000
+0FE03F000007E07F000003E07F000003E0FF000003E0FF000003E0FF800003E0FFC0000000FFF0
+000000FFFE000000FFFFF800007FFFFFC0007FFFFFF0003FFFFFFC001FFFFFFF000FFFFFFF8007
+FFFFFFC003FFFFFFE000FFFFFFF0003FFFFFF00003FFFFF800001FFFF8000000FFFC0000001FFC
+7800000FFCF8000007FCF8000003FCFC000003FCFC000003FCFE000003F8FE000003F8FF000003
+F8FF800007F0FFC0000FF0FFF0001FE0FFFC00FFC0FFFFFFFF80FC7FFFFE00F81FFFF800E003FF
+8000262E7CAD2F>I<0001F000000001F000000001F000000001F000000001F000000001F00000
+0003F000000003F000000003F000000007F000000007F000000007F00000000FF00000000FF000
+00001FF00000003FF00000003FF00000007FF0000001FFF0000003FFF000000FFFFFFFC0FFFFFF
+FFC0FFFFFFFFC0FFFFFFFFC0FFFFFFFFC000FFF0000000FFF0000000FFF0000000FFF0000000FF
+F0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000
+FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF0000000FFF00000
+00FFF0000000FFF0000000FFF0000000FFF001F000FFF001F000FFF001F000FFF001F000FFF001
+F000FFF001F000FFF001F000FFF001F000FFF001F0007FF001E0007FF803E0003FF803E0003FFC
+07C0001FFE0F80000FFFFF800007FFFE000001FFFC0000001FF00024427EC12E>I<007FE00000
+3FF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE0007FFFF000FFFFE000
+7FFFF00003FFE00001FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE0
+0000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FF
+E00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001
+FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF000
+01FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00000FFF0
+0001FFE00000FFF00001FFE00000FFF00001FFE00000FFF00001FFE00001FFF00001FFE00001FF
+F00001FFE00001FFF00001FFE00003FFF00000FFE00007FFF00000FFE0000F7FF000007FE0001F
+7FF000007FF0003E7FF800003FFC00FC7FFFE0001FFFFFF87FFFE00007FFFFE07FFFE00001FFFF
+807FFFE000003FFE007FFFE03B2E7CAD42>I<FFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFE
+FFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFEFFFFFF07FFFFE007FFFE03FFC0001FFC00003F
+C003FFE0000FFC00001F8001FFE0000FFC00001F0001FFE0000FFE00001F0001FFF00007FE0000
+3F0000FFF0000FFF00003E0000FFF8000FFF00007E00007FF8000FFF00007C00007FF8001FFF80
+007C00003FFC001FFF8000F800003FFC003FFFC000F800003FFE003EFFC001F800001FFE003EFF
+C001F000001FFE007EFFE003F000000FFF007C7FE003E000000FFF00FC7FF003E000000FFF80F8
+3FF007E0000007FF80F83FF007C0000007FF81F83FF80FC0000003FFC1F01FF80F80000003FFC3
+F01FFC0F80000003FFE3E00FFC1F80000001FFE3E00FFC1F00000001FFE7E00FFE3F00000000FF
+F7C007FE3E00000000FFFFC007FF3E00000000FFFF8003FF7E000000007FFF8003FF7C00000000
+7FFF8003FFFC000000003FFF0001FFF8000000003FFF0001FFF8000000003FFE0000FFF8000000
+001FFE0000FFF0000000001FFE0000FFF0000000000FFC00007FE0000000000FFC00007FE00000
+00000FF800003FE00000000007F800003FC00000000007F800003FC00000000003F000001F8000
+00000001E000000F0000004F2E7DAD56>119 D<7FFFFF801FFFFF007FFFFF801FFFFF007FFFFF
+801FFFFF007FFFFF801FFFFF007FFFFF801FFFFF00007FF80001FF0000007FFC0001FC0000003F
+FE0003F80000001FFF0007F00000000FFF0007E000000007FF800FC000000003FFC01F80000000
+03FFE03F8000000001FFF07F0000000000FFF8FE00000000007FF9FC00000000003FFFF8000000
+00003FFFF000000000001FFFE000000000000FFFC0000000000007FFC0000000000003FFC00000
+00000001FFE0000000000001FFF0000000000001FFF8000000000003FFFC000000000003FFFE00
+0000000007FFFE00000000000FEFFF00000000001FCFFF80000000003F87FFC0000000007F03FF
+E000000000FE01FFE000000001FC00FFF000000001F8007FF800000003F0007FFC00000007F000
+3FFE0000000FE0001FFF0000001FC0000FFF0000003F800007FF800000FF800007FFC000FFFFF8
+003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC0FFFFF8003FFFFFC03A2E
+7EAD3F>I E /Fm 5 121 df<0003FE0000000FFF8000003C01E00000F000780001C0001C000300
+00060006000003000C0000018018000000C018000000C030000000603000000060600000003060
+000000306000000030C000000018C000000018C000000018C000000018C000000018C000000018
+C000000018C000000018C000000018600000003060000000306000000030300000006030000000
+6018000000C018000000C00C000001800600000300030000060001C0001C0000F0007800003C01
+E000000FFF80000003FE000025277E9D2A>13 D<03C00FF01FF83FFC7FFE7FFEFFFFFFFFFFFFFF
+FF7FFE7FFE3FFC1FF80FF003C010107E9115>15 D<003C00E001C0018003800380038003800380
+03800380038003800380038003800380030007001C00F0001C0007000300038003800380038003
+8003800380038003800380038003800380018001C000E0003C0E297D9E15>102
+D<F0001C00070003000380038003800380038003800380038003800380038003800380018001C0
+00E0003C00E001C001800380038003800380038003800380038003800380038003800380030007
+001C00F0000E297D9E15>I<1F00308070406060E0E0E0E0E040E00060007000300018001C0033
+00718061C0E0C0E0E0E0E0E0E060E070C031C0198007000300018001C000C000E040E0E0E0E0E0
+C0C041C021801F000B257D9C12>120 D E /Fn 84 125 df<007E1F0001C1B1800303E3C00703
+C3C00E03C1800E01C0000E01C0000E01C0000E01C0000E01C0000E01C000FFFFFC000E01C0000E
+01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C0000E01C000
+0E01C0000E01C0000E01C0000E01C0000E01C0007F87FC001A1D809C18>11
+D<007E0001C1800301800703C00E03C00E01800E00000E00000E00000E00000E0000FFFFC00E01
+C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01
+C00E01C00E01C07F87F8151D809C17>I<007FC001C1C00303C00703C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C0FFFFC00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C00E
+01C00E01C00E01C00E01C00E01C00E01C00E01C00E01C07FCFF8151D809C17>I<003F07E00001
+C09C18000380F018000701F03C000E01E03C000E00E018000E00E000000E00E000000E00E00000
+0E00E000000E00E00000FFFFFFFC000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C
+000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E01C000E00E0
+1C000E00E01C000E00E01C000E00E01C007FC7FCFF80211D809C23>I<60F0F0F0F0F0F0F06060
+6060606060606060606060000000000060F0F060041E7C9D0C>33 D<6060F0F0F8F86868080808
+080808101010102020404080800D0C7F9C15>I<0080008007E01898308460824081C087C08FC0
+8FC086E080F0807E803FC01FF00FF803FC00BE008E00876087F083F083E0838082408240842088
+189007E00080008010217E9E15>36 D<00E0000001900000030800000308000007080000070800
+0007080000070800000710000007100000072000000740000003C03FE003800F00038006000380
+040005C0040009C0080010E0100030E010006070200060702000E0384000E03C4000E01C8000E0
+0F0020E0070020700780403009C0401830E18007C03E001B1F7E9D20>38
+D<60F0F8680808081010204080050C7C9C0C>I<004000800100020006000C000C001800180030
+0030007000600060006000E000E000E000E000E000E000E000E000E000E000E000E00060006000
+6000700030003000180018000C000C00060002000100008000400A2A7D9E10>I<800040002000
+100018000C000C000600060003000300038001800180018001C001C001C001C001C001C001C001
+C001C001C001C001C0018001800180038003000300060006000C000C0018001000200040008000
+0A2A7E9E10>I<60F0F0701010101020204080040C7C830C>44 D<FFE0FFE00B0280890E>I<60F0
+F06004047C830C>I<00010003000600060006000C000C000C0018001800180030003000300060
+006000C000C000C0018001800180030003000300060006000C000C000C00180018001800300030
+003000600060006000C000C00010297E9E15>I<03C00C301818300C300C700E60066006E007E0
+07E007E007E007E007E007E007E007E007E007E007E00760066006700E300C300C18180C3007E0
+101D7E9B15>I<030007003F00C700070007000700070007000700070007000700070007000700
+07000700070007000700070007000700070007000F80FFF80D1C7C9B15>I<07C01830201C400C
+400EF00FF80FF807F8077007000F000E000E001C001C00380070006000C00180030006010C0118
+0110023FFE7FFEFFFE101C7E9B15>I<07E01830201C201C781E780E781E381E001C001C001800
+30006007E00030001C001C000E000F000F700FF80FF80FF80FF00E401C201C183007E0101D7E9B
+15>I<000C00000C00001C00003C00003C00005C0000DC00009C00011C00031C00021C00041C00
+0C1C00081C00101C00301C00201C00401C00C01C00FFFFC0001C00001C00001C00001C00001C00
+001C00001C0001FFC0121C7F9B15>I<300C3FF83FF03FC020002000200020002000200023E024
+302818301C200E000E000F000F000F600FF00FF00FF00F800E401E401C2038187007C0101D7E9B
+15>I<00F0030C06040C0E181E301E300C700070006000E3E0E430E818F00CF00EE006E007E007
+E007E007E007600760077006300E300C18180C3003E0101D7E9B15>I<4000007FFF807FFF007F
+FF0040020080040080040080080000100000100000200000600000400000C00000C00001C00001
+800001800003800003800003800003800007800007800007800007800007800007800003000011
+1D7E9B15>I<03E00C301008200C20066006600660067006780C3E083FB01FE007F007F818FC30
+7E601E600FC007C003C003C003C00360026004300C1C1007E0101D7E9B15>I<03C00C30181830
+0C700C600EE006E006E007E007E007E007E0076007700F300F18170C2707C700060006000E300C
+780C78187010203030C00F80101D7E9B15>I<60F0F0600000000000000000000060F0F0600412
+7C910C>I<60F0F0600000000000000000000060F0F0701010101020204080041A7C910C>I<7FFF
+FFC0FFFFFFE00000000000000000000000000000000000000000000000000000000000000000FF
+FFFFE07FFFFFC01B0C7E8F20>61 D<0FE03038401CE00EF00EF00EF00E000C001C0030006000C0
+008001800100010001000100010001000000000000000000000003000780078003000F1D7E9C14
+>63 D<003F800000C0600003001800040004000800020010000100201F00802070808040E04040
+40C0384041C038408180382083803820838038208380382083803820838038208180382041C038
+2040C0384040E0784020709880201F0F00100000000800000004000000030001E000C01F80003F
+F0001B1D7E9C20>I<000600000006000000060000000F0000000F0000000F0000001780000017
+8000001780000023C0000023C0000023C0000041E0000041E0000041E0000080F0000080F00001
+80F8000100780001FFF80003007C0002003C0002003C0006003E0004001E0004001E000C001F00
+1E001F00FF80FFF01C1D7F9C1F>I<FFFFC00F00F00F00380F003C0F001C0F001E0F001E0F001E
+0F001E0F001C0F003C0F00780F01F00FFFE00F00780F003C0F001E0F000E0F000F0F000F0F000F
+0F000F0F000F0F001E0F001E0F003C0F0078FFFFE0181C7E9B1D>I<001F808000E06180018019
+80070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F000
+0000F0000000F0000000F0000000F0000000F0000000F000000070000080780000807800008038
+0000801C0001001C0001000E000200070004000180080000E03000001FC000191E7E9C1E>I<FF
+FFC0000F00F0000F003C000F000E000F0007000F0007000F0003800F0003C00F0001C00F0001C0
+0F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001E00F0001C00F0001
+C00F0003C00F0003800F0007800F0007000F000E000F001C000F007000FFFFC0001B1C7E9B20>
+I<FFFFFC0F003C0F000C0F00040F00040F00060F00020F00020F02020F02000F02000F02000F06
+000FFE000F06000F02000F02000F02000F02010F00010F00020F00020F00020F00060F00060F00
+0C0F003CFFFFFC181C7E9B1C>I<FFFFF80F00780F00180F00080F00080F000C0F00040F00040F
+02040F02000F02000F02000F06000FFE000F06000F02000F02000F02000F02000F00000F00000F
+00000F00000F00000F00000F00000F8000FFF800161C7E9B1B>I<001F808000E0618001801980
+070007800E0003801C0003801C00018038000180780000807800008070000080F0000000F00000
+00F0000000F0000000F0000000F0000000F000FFF0F0000F807000078078000780780007803800
+07801C0007801C0007800E00078007000B800180118000E06080001F80001C1E7E9C21>I<FFF3
+FFC00F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F003C000F
+003C000F003C000F003C000FFFFC000F003C000F003C000F003C000F003C000F003C000F003C00
+0F003C000F003C000F003C000F003C000F003C000F003C000F003C00FFF3FFC01A1C7E9B1F>I<
+FFF00F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F000F
+000F000F000F000F000F000F000F00FFF00C1C7F9B0F>I<1FFF00F80078007800780078007800
+7800780078007800780078007800780078007800780078007800787078F878F878F878F0F040E0
+21C01F00101D7F9B15>I<FFF03FE00F000F000F000C000F0008000F0010000F0020000F004000
+0F0080000F0100000F0200000F0400000F0E00000F1F00000F2F00000F2780000F4780000F83C0
+000F01E0000F01E0000F00F0000F00F8000F0078000F003C000F003C000F001E000F001F000F00
+1F80FFF07FF01C1C7E9B20>I<FFF8000F80000F00000F00000F00000F00000F00000F00000F00
+000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00080F00080F00080F00
+180F00180F00100F00300F00700F01F0FFFFF0151C7E9B1A>I<FF8000FF800F8000F8000F8000
+F8000BC00178000BC00178000BC001780009E002780009E002780008F004780008F004780008F0
+047800087808780008780878000878087800083C107800083C107800083C107800081E20780008
+1E207800081E207800080F407800080F4078000807807800080780780008078078000803007800
+1C03007800FF8307FF80211C7E9B26>I<FF007FC00F800E000F8004000BC0040009E0040009E0
+040008F0040008F8040008780400083C0400083C0400081E0400080F0400080F04000807840008
+07C4000803C4000801E4000801E4000800F40008007C0008007C0008003C0008003C0008001C00
+08000C001C000C00FF8004001A1C7E9B1F>I<003F800000E0E0000380380007001C000E000E00
+1C0007003C00078038000380780003C0780003C0700001C0F00001E0F00001E0F00001E0F00001
+E0F00001E0F00001E0F00001E0F00001E0700001C0780003C0780003C0380003803C0007801C00
+07000E000E0007001C000380380000E0E000003F80001B1E7E9C20>I<FFFF800F00E00F00780F
+003C0F001C0F001E0F001E0F001E0F001E0F001E0F001C0F003C0F00780F00E00FFF800F00000F
+00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F0000FFF000171C7E9B
+1C>I<FFFF00000F01E0000F0078000F003C000F001C000F001E000F001E000F001E000F001E00
+0F001C000F003C000F0078000F01E0000FFF00000F03C0000F00E0000F00F0000F0078000F0078
+000F0078000F0078000F0078000F0078000F0078100F0078100F0038100F003C20FFF01C200000
+07C01C1D7E9B1F>82 D<07E0801C1980300580700380600180E00180E00080E00080E00080F000
+00F800007C00007FC0003FF8001FFE0007FF0000FF80000F800007C00003C00001C08001C08001
+C08001C0C00180C00180E00300D00200CC0C0083F800121E7E9C17>I<7FFFFFC0700F01C0600F
+00C0400F0040400F0040C00F0020800F0020800F0020800F0020000F0000000F0000000F000000
+0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000
+000F0000000F0000000F0000000F0000001F800003FFFC001B1C7F9B1E>I<FFF07FC00F000E00
+0F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004
+000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F0004000F00
+04000700080007800800038010000180100000C020000070C000001F00001A1D7E9B1F>I<FFE0
+0FF01F0003C00F0001800F0001000F800300078002000780020003C0040003C0040003C0040001
+E0080001E0080001F0080000F0100000F0100000F830000078200000782000003C4000003C4000
+003C4000001E8000001E8000001F8000000F0000000F00000006000000060000000600001C1D7F
+9B1F>I<FFE0FFE0FF1F001F003C1E001E00180F001F00100F001F00100F001F001007801F0020
+0780278020078027802003C027804003C043C04003C043C04003E043C04001E081E08001E081E0
+8001E081E08000F100F10000F100F10000F100F100007900FA00007A007A00007A007A00003E00
+7C00003C003C00003C003C00003C003C00001800180000180018000018001800281D7F9B2B>I<
+7FF0FFC00FC03E000780180003C0180003E0100001E0200001F0600000F0400000788000007D80
+00003D0000001E0000001F0000000F0000000F8000000F80000013C0000023E0000021E0000041
+F00000C0F8000080780001007C0003003C0002001E0006001F001F003F80FFC0FFF01C1C7F9B1F
+>I<FFF007FC0F8001E00780008007C0018003C0010003E0020001F0020000F0040000F8040000
+780800007C1800003C1000001E2000001F2000000F4000000FC000000780000007800000078000
+0007800000078000000780000007800000078000000780000007800000078000007FF8001E1C80
+9B1F>I<7FFFF07C01F07001E06003C06003C0400780400F80400F00401E00001E00003C00007C
+0000780000F00000F00001E00003E00003C0100780100780100F00101F00301E00203C00203C00
+607800E0F803E0FFFFE0141C7E9B19>I<08081010202040404040808080808080B0B0F8F87878
+30300D0C7A9C15>92 D<1FC000307000783800781C00301C00001C00001C0001FC000F1C00381C
+00701C00601C00E01C40E01C40E01C40603C40304E801F870012127E9115>97
+D<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001D86
+001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C00C01C01C01C01
+801E030019060010F800131D7F9C17>I<07E00C301878307870306000E000E000E000E000E000
+E00060007004300418080C3007C00E127E9112>I<003F00000700000700000700000700000700
+00070000070000070000070000070003E7000C1700180F00300700700700600700E00700E00700
+E00700E00700E00700E00700600700700700300700180F000C370007C7E0131D7E9C17>I<03E0
+0C301818300C700E6006E006FFFEE000E000E000E00060007002300218040C1803E00F127F9112
+>I<00F8018C071E061E0E0C0E000E000E000E000E000E00FFE00E000E000E000E000E000E000E
+000E000E000E000E000E000E000E000E000E007FE00F1D809C0D>I<00038003C4C00C38C01C38
+80181800381C00381C00381C00381C001818001C38000C300013C0001000003000001800001FF8
+001FFF001FFF803003806001C0C000C0C000C0C000C06001803003001C0E0007F800121C7F9215
+>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C001C
+87001D03001E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C03801C0380FF9FF0141D7F9C17>I<18003C003C00180000000000000000000000000000
+00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF80091D
+7F9C0C>I<00C001E001E000C000000000000000000000000000000FE000E000E000E000E000E0
+00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E060E0F0C0F1C061803E
+000B25839C0D>I<FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C
+00001C3FC01C0F001C0C001C08001C10001C20001C40001CE0001DE0001E70001C78001C38001C
+3C001C1C001C0E001C0F001C0F80FF9FE0131D7F9C16>I<FC001C001C001C001C001C001C001C
+001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00
+1C00FF80091D7F9C0C>I<FC7E07E0001C838838001D019018001E01E01C001C01C01C001C01C0
+1C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01
+C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF8021127F9124>I<FC7C001C87001D0300
+1E03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380
+1C0380FF9FF014127F9117>I<03F0000E1C00180600300300700380600180E001C0E001C0E001
+C0E001C0E001C0E001C06001807003803003001806000E1C0003F00012127F9115>I<FC7C001D
+86001E03001C01801C01C01C00C01C00E01C00E01C00E01C00E01C00E01C00E01C01C01C01C01C
+01801E03001D06001CF8001C00001C00001C00001C00001C00001C00001C0000FF8000131A7F91
+17>I<03C1000C3300180B00300F00700700700700E00700E00700E00700E00700E00700E00700
+600700700700300F00180F000C370007C700000700000700000700000700000700000700000700
+003FE0131A7E9116>I<FCE01D301E781E781C301C001C001C001C001C001C001C001C001C001C
+001C001C00FFC00D127F9110>I<1F9030704030C010C010E010F8007F803FE00FF000F8803880
+18C018C018E010D0608FC00D127F9110>I<04000400040004000C000C001C003C00FFE01C001C
+001C001C001C001C001C001C001C001C101C101C101C101C100C100E2003C00C1A7F9910>I<FC
+1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C
+03801C07800C07800E1B8003E3F014127F9117>I<FF07E03C03801C01001C01000E02000E0200
+07040007040007040003880003880003D80001D00001D00000E00000E00000E00000400013127F
+9116>I<FF3FCFE03C0F03801C0701801C0701001C0B01000E0B82000E0B82000E1182000711C4
+000711C4000720C40003A0E80003A0E80003C0680001C0700001C0700001803000008020001B12
+7F911E>I<7F8FF00F03800F030007020003840001C80001D80000F00000700000780000F80000
+9C00010E00020E000607000403801E07C0FF0FF81512809116>I<FF07E03C03801C01001C0100
+0E02000E020007040007040007040003880003880003D80001D00001D00000E00000E00000E000
+004000004000008000008000F08000F10000F300006600003C0000131A7F9116>I<7FFC703860
+38407040F040E041C003C0038007000F040E041C043C0C380870087038FFF80E127F9112>I<FF
+FFF01401808B15>I<FFFFFFFFFF802901808B2A>I E /Fo 20 122 df<78FCFCFCFC7806067B85
+11>46 D<007F000001C1C0000780F0000F0078000E0038001C001C003C001E003C001E003C001E
+0078000F0078000F0078000F0078000F00F8000F80F8000F80F8000F80F8000F80F8000F80F800
+0F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078
+000F0078000F0078000F0078000F003C001E003C001E003C001E001C001C000E0038000F007800
+0780F00001C1C000007F000019297EA71E>48 D<00100000700001F0000FF000FEF000F0F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000F00000
+F00000F00000F00000F00000F00001F8007FFFE07FFFE013287BA71E>I<00FE0007FF800E07E0
+1803F02001F82000F840007C40007CF8007EFC007EFC003EFC003EFC003E78007E00007E00007C
+00007C0000F80000F80001F00001E00003C0000780000700000E00001C00003800007000006000
+00C0000180020300020600040C000418000410000C3FFFFC7FFFF8FFFFF8FFFFF817287DA71E>
+I<007F000003FFC0000701F0000C00F80010007C001C007C003E007E003E003E003E003E001E00
+3E000C007E0000007C0000007C00000078000000F0000000E0000001C0000007000000FF000000
+01E0000000F0000000780000003C0000003E0000001F0000001F0000001F8000001F8030001F80
+78001F80FC001F80FC001F80FC001F00F8001F0040003F0040003E0030007C001800F8000F01F0
+0003FFC000007F000019297EA71E>I<007F000001FFC00007C1E0000F0070001E0038001C003C
+003C001C0078001E0078001E00F8000F00F8000F00F8000F00F8000F00F8000F80F8000F80F800
+0F80F8000F8078000F8078001F803C001F803C001F801C002F800E004F800700CF8003810F8000
+7E0F8000000F0000000F0000000F0000001E0000001E0000001E0000003C001C003C003E007800
+3E0070003C00E0001801C0001C0780000FFE000003F8000019297EA71E>57
+D<FFFFFFFF00FFFFFFFF0007E0003F0003E000070003E000038003E000018003E000018003E000
+008003E000008003E000008003E000008003E000004003E002004003E002004003E002000003E0
+02000003E002000003E006000003E00E000003FFFE000003FFFE000003E00E000003E006000003
+E002000003E002000003E002000003E002000003E002000003E000000003E000000003E0000000
+03E000000003E000000003E000000003E000000003E000000003E000000003E000000007F00000
+00FFFFE00000FFFFE0000022297EA827>70 D<FFE0000003FFC0FFE0000003FFC007E0000003F8
+0002F0000005F00002F0000005F0000278000009F0000278000009F0000278000009F000023C00
+0011F000023C000011F000021E000021F000021E000021F000021E000021F000020F000041F000
+020F000041F0000207800081F0000207800081F0000207800081F0000203C00101F0000203C001
+01F0000203E00201F0000201E00201F0000201E00201F0000200F00401F0000200F00401F00002
+00F00401F0000200780801F0000200780801F00002003C1001F00002003C1001F00002003C1001
+F00002001E2001F00002001E2001F00002000F4001F00002000F4001F00002000F4001F0000200
+078001F0000700078001F0000F80030003F800FFF803007FFFC0FFF803007FFFC032297EA837>
+77 D<FFFF0003FFC0FFFF0003FFC007F000007E0003E00000380003E00000100001F000002000
+01F00000200001F00000200000F80000400000F80000400000FC0000C000007C00008000007C00
+008000003E00010000003E00010000003F00010000001F00020000001F00020000001F80060000
+000F80040000000F800400000007C00800000007C00800000007E00800000003E01000000003E0
+1000000001F02000000001F02000000001F02000000000F84000000000F84000000000FCC00000
+00007C80000000007C80000000003F00000000003F00000000003F00000000001E00000000001E
+00000000000C00000000000C00000000000C0000002A2A7FA82D>86 D<FFFE03FFF803FFC0FFFE
+03FFF803FFC00FE0003F80007E0007C0001F0000180003E0001F0000180003E0000F8000100003
+E0000F8000100001F0000F8000200001F0000FC000200001F0000FC000200000F8000FC0004000
+00F80013E000400000F80013E000400000FC0013E000C000007C0033F0008000007C0021F00080
+00007E0021F0008000003E0021F8010000003E0040F8010000003E0040F8010000001F0040F802
+0000001F00807C020000001F00807C020000000F80807C040000000F81003E040000000F81003E
+0400000007C1003E0800000007C2001F0800000007C2001F0800000003E2001F1000000003E400
+0F9000000003E4000F9000000001F4000FA000000001F80007E000000001F80007E000000000F8
+0007C000000000F00003C000000000F00003C00000000070000380000000006000018000000000
+60000180000000006000018000003A2A7FA83D>I<01FC00000E0780001001C0003C00E0003E00
+F0003E0078001C00780008007800000078000000780000007800007FF80003E078000F8078001F
+0078003E0078007C00780078007820F8007820F8007820F8007820F800F8207C00F8203C013C40
+1F063FC007F80F001B1A7E991E>97 D<07800000FF800000FF8000000F80000007800000078000
+000780000007800000078000000780000007800000078000000780000007800000078000000780
+00000783F000078C1C0007B0070007A0038007C003C0078001E0078001E0078000F0078000F007
+8000F8078000F8078000F8078000F8078000F8078000F8078000F8078000F0078000F0078001F0
+078001E0078001C007C003C00740078007200E0006181C000407E0001D2A7FA921>I<007E0003
+C3800700E00E00F01C00703C00783C003878003C78003CF8003CF8003CFFFFFCF80000F80000F8
+0000F80000F800007800007C00003C00043C00041E00080E001007002001C0C0007F00161A7E99
+1B>101 D<001F000070C000E1E001C3E003C3E00381C007808007800007800007800007800007
+8000078000078000078000078000FFFE00FFFE0007800007800007800007800007800007800007
+800007800007800007800007800007800007800007800007800007800007800007800007800007
+800007800007C000FFFE00FFFE00132A7FA912>I<0780FF80FF800F8007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+8007800780078007800780078007800780078007800780FFFCFFFC0E2A7FA911>108
+D<0783F800FF8C1C00FF900E000FA0070007A0078007C0078007C0078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780FFFCFFFCFFFCFFFC1E1A7F9921>110
+D<007F000001C1C000070070000E0038001C001C003C001E003C001E0078000F0078000F00F800
+0F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F80F8000F8078000F0078000F003C
+001E003C001E001E003C000E0038000700700001C1C000007F0000191A7E991E>I<0787C0FF98
+E0FF91F00FA1F007C1F007C0E007C0000780000780000780000780000780000780000780000780
+0007800007800007800007800007800007800007800007800007C000FFFE00FFFE00141A7F9917
+>114 D<07800780FF80FF80FF80FF800F800F8007800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800780078007800780
+07800780078007800F8007800F800380178001C027C000E047FC003F87FC1E1A7F9921>117
+D<FFF00FF8FFF00FF80F8003C0078003800780010003C0020003C0020003E0020001E0040001E0
+040000F0080000F0080000F818000078100000781000003C2000003C2000003E6000001E400000
+1E4000000F8000000F800000070000000700000007000000020000000200000004000000040000
+000400000008000070080000F8100000F8100000F8200000F0400000608000001F0000001D267F
+9920>121 D E /Fp 10 116 df<78FCFCFCFC7806067A8512>46 D<FFE00007FFC0FFF00007FF
+C003F000007C0002F80000380002FC00001000027C00001000023E00001000023E00001000021F
+00001000021F80001000020F800010000207C00010000207E00010000203E00010000203F00010
+000201F00010000200F80010000200FC00100002007C00100002007E00100002003E0010000200
+1F00100002001F80100002000F80100002000FC01000020007C01000020003E01000020003F010
+00020001F01000020000F81000020000F810000200007C10000200007E10000200003E10000200
+001F10000200001F10000200000F90000200000FD00002000007D00002000003F00002000003F0
+0002000001F00002000001F00002000000F0000200000070000700000070000F8000003000FFF8
+00003000FFF8000010002A317CB032>78 D<FFFFFF000000FFFFFFF0000007E001FC000003E000
+3E000003E0000F800003E00007C00003E00003E00003E00001E00003E00001F00003E00000F000
+03E00000F80003E00000F80003E00000F80003E00000F80003E00000F80003E00000F80003E000
+00F00003E00001F00003E00001E00003E00003C00003E00007800003E0000F000003E0003C0000
+03E001F0000003FFFF00000003E001F0000003E0007C000003E0001E000003E0000F800003E000
+07800003E00007C00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E00003E000
+03E00803E00003E00803E00001E00803E00001E00807F00000F010FFFF80007010FFFF80003860
+000000000F802D327CB031>82 D<FFFE003FFF8001FFC0FFFE003FFF8001FFC00FE00003F80000
+7E0007C00001F000003C0007C00001F00000180003E00000F80000100003E00000F80000100003
+E00000F80000100001F00000FC0000200001F00000FC0000200001F00000FC0000200000F80001
+3E0000400000F800013E0000400000F800013E0000400000FC00033F0000C000007C00021F0000
+8000007C00021F00008000007E00021F80008000003E00040F80010000003E00040F8001000000
+3E00040F80010000001F000807C0020000001F000807C0020000001F000807C0020000000F8010
+03E0040000000F801003E0040000000F801003E0040000000FC02001F00C00000007C02001F008
+00000007C02001F00800000007E02001F80800000003E04000F81000000003E04000F810000000
+03E04000F81000000001F080007C2000000001F080007C2000000001F080007C2000000000F900
+003E4000000000F900003E4000000000F900003E40000000007E00001F80000000007E00001F80
+000000007E00001F80000000007E00001F80000000003C00000F00000000003C00000F00000000
+003C00000F00000000001800000600000000001800000600000000001800000600000042327FB0
+44>87 D<00FE00000303C0000C00E00010007000100038003C003C003E001C003E001E003E001E
+0008001E0000001E0000001E0000001E00000FFE0000FC1E0003E01E000F801E001F001E003E00
+1E003C001E007C001E00F8001E04F8001E04F8001E04F8003E04F8003E0478003E047C005E043E
+008F080F0307F003FC03E01E1F7D9E21>97 D<0F001F801F801F801F800F000000000000000000
+00000000000000000000000000000780FF80FF800F800780078007800780078007800780078007
+800780078007800780078007800780078007800780078007800780078007800FC0FFF8FFF80D30
+7EAF12>105 D<0780FF80FF800F80078007800780078007800780078007800780078007800780
+078007800780078007800780078007800780078007800780078007800780078007800780078007
+80078007800780078007800780078007800780078007800FC0FFFCFFFC0E327EB112>108
+D<0780FE001FC000FF83078060F000FF8C03C18078000F9001E2003C0007A001E4003C0007A000
+F4001E0007C000F8001E0007C000F8001E00078000F0001E00078000F0001E00078000F0001E00
+078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0
+001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E0007
+8000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F0001E00078000F000
+1E000FC001F8003F00FFFC1FFF83FFF0FFFC1FFF83FFF0341F7E9E38>I<001FC00000F0780001
+C01C00070007000F0007801E0003C01C0001C03C0001E03C0001E0780000F0780000F0780000F0
+F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8F80000F8780000F07C0001
+F03C0001E03C0001E01E0003C01E0003C00F00078007800F0001C01C0000F07800001FC0001D1F
+7E9E21>111 D<01FC100E03301800F0300070600030E00030E00010E00010E00010F00010F800
+007E00003FF0001FFF000FFFC003FFE0003FF00001F80000F880003C80003C80001CC0001CC000
+1CE0001CE00018F00038F00030CC0060C301C080FE00161F7E9E1A>115
+D E /Fq 15 118 df<1F003F807FC0FFC0FFE0FFE0FFF0FFF07FF03FB01F300030003000300030
+003000600060006000C000C000C0018001800300060006000C001800300020000C1F77C71D>39
+D<FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00FFFFFFFFFFFFFF00007FF800001FFF00003FF0000001
+FF80001FF00000007F80001FF00000003F80001FF00000001F80001FF00000000F80001FF00000
+000780001FF00000000780001FF00000000380001FF000000003C0001FF000000003C0001FF000
+000001C0001FF000000001C0001FF000000001C0001FF000000001C0001FF000000001C0001FF0
+00000000E0001FF000000000E0001FF000000000E0001FF00001C000E0001FF00001C00000001F
+F00001C00000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001C0000000
+1FF00003C00000001FF00003C00000001FF00007C00000001FF0000FC00000001FF0003FC00000
+001FFFFFFFC00000001FFFFFFFC00000001FFFFFFFC00000001FF0003FC00000001FF0000FC000
+00001FF00007C00000001FF00003C00000001FF00003C00000001FF00001C00000001FF00001C0
+0000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001C00000001FF00001
+C00000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001FF000
+00000000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001FF0
+0000000000001FF00000000000001FF00000000000001FF00000000000001FF00000000000001F
+F00000000000001FF00000000000001FF00000000000003FF80000000000007FFE0000000000FF
+FFFFFF80000000FFFFFFFF80000000FFFFFFFF800000003B477DC643>70
+D<FFFFFFFE01FFFFFFFCFFFFFFFE01FFFFFFFCFFFFFFFE01FFFFFFFC007FFC000000FFF800003F
+F80000007FF000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000
+003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE0
+00001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001F
+F00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000
+003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE0
+00001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001F
+F00000003FE000001FF00000003FE000001FF00000003FE000001FFFFFFFFFFFE000001FFFFFFF
+FFFFE000001FFFFFFFFFFFE000001FF00000003FE000001FF00000003FE000001FF00000003FE0
+00001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001F
+F00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000
+003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE0
+00001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001F
+F00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000
+003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE000001FF00000003FE0
+00001FF00000003FE000003FF80000007FF000007FFC000000FFF800FFFFFFFE01FFFFFFFCFFFF
+FFFE01FFFFFFFCFFFFFFFE01FFFFFFFC46477DC64D>72 D<FFFFF800000000001FFFFFFFFFF800
+000000001FFFFFFFFFF800000000001FFFFF007FFC00000000003FFE00003FFC00000000003FFC
+00001DFE000000000077F800001DFE000000000077F800001DFE000000000077F800001CFF0000
+000000E7F800001CFF0000000000E7F800001C7F8000000001C7F800001C7F8000000001C7F800
+001C7F8000000001C7F800001C3FC00000000387F800001C3FC00000000387F800001C1FE00000
+000707F800001C1FE00000000707F800001C1FE00000000707F800001C0FF00000000E07F80000
+1C0FF00000000E07F800001C0FF00000000E07F800001C07F80000001C07F800001C07F8000000
+1C07F800001C03FC0000003807F800001C03FC0000003807F800001C03FC0000003807F800001C
+01FE0000007007F800001C01FE0000007007F800001C00FF000000E007F800001C00FF000000E0
+07F800001C00FF000000E007F800001C007F800001C007F800001C007F800001C007F800001C00
+7F800001C007F800001C003FC000038007F800001C003FC000038007F800001C001FE000070007
+F800001C001FE000070007F800001C001FE000070007F800001C000FF0000E0007F800001C000F
+F0000E0007F800001C0007F8001C0007F800001C0007F8001C0007F800001C0007F8001C0007F8
+00001C0003FC00380007F800001C0003FC00380007F800001C0001FE00700007F800001C0001FE
+00700007F800001C0001FE00700007F800001C0000FF00E00007F800001C0000FF00E00007F800
+001C0000FF00E00007F800001C00007F81C00007F800001C00007F81C00007F800001C00003FC3
+800007F800001C00003FC3800007F800001C00003FC3800007F800001C00001FE7000007F80000
+1C00001FE7000007F800001C00000FFE000007F800001C00000FFE000007F800001C00000FFE00
+0007F800001C000007FC000007F800001C000007FC000007F800003E000007FC000007F800007F
+000003F8000007F80000FF800003F800000FFC0003FFE00001F000001FFE00FFFFFF8001F0003F
+FFFFFFFFFFFF8001F0003FFFFFFFFFFFFF8000E0003FFFFFFF58477DC65F>77
+D<FFFFFFE003FFFFFF8001FFFFF8FFFFFFE003FFFFFF8001FFFFF8FFFFFFE003FFFFFF8001FFFF
+F803FFF800000FFFE000001FFF8000FFE0000003FF80000007FE00007FC0000001FF00000001FC
+00007FC0000001FF00000000F800007FC0000001FF80000000F000003FE0000000FF80000000E0
+00003FE0000000FF80000000E000003FE0000000FF80000000E000001FF00000007FC0000001C0
+00001FF00000007FC0000001C000001FF00000007FC0000001C000001FF8000000FFE0000003C0
+00000FF8000000FFE00000038000000FF8000000FFE00000038000000FFC000001DFF000000780
+000007FC000001DFF000000700000007FC000001DFF000000700000007FE0000038FF800000F00
+000003FE0000038FF800000E00000003FE0000038FF800000E00000003FF0000078FFC00001E00
+000001FF00000707FC00001C00000001FF00000707FC00001C00000001FF00000F07FE00001C00
+000000FF80000E03FE00003800000000FF80000E03FE00003800000000FF80001E03FF00003800
+0000007FC0001C01FF000070000000007FC0001C01FF000070000000007FC0003C01FF80007000
+0000003FE0003800FF8000E0000000003FE0003800FF8000E0000000003FE0003800FF8000E000
+0000001FF00070007FC001C0000000001FF00070007FC001C0000000001FF00070007FC001C000
+0000001FF800E0003FE003C0000000000FF800E0003FE00380000000000FF800E0003FE0038000
+0000000FFC01C0001FF007800000000007FC01C0001FF007000000000007FC01C0001FF0070000
+00000007FE0380000FF80F000000000003FE0380000FF80E000000000003FE0380000FF80E0000
+00000003FF0780000FFC1E000000000001FF07000007FC1C000000000001FF07000007FC1C0000
+00000001FF0F000007FE1C000000000000FF8E000003FE38000000000000FF8E000003FE380000
+00000000FF9E000003FF380000000000007FDC000001FF700000000000007FDC000001FF700000
+000000007FFC000001FFF00000000000003FF8000000FFE00000000000003FF8000000FFE00000
+000000003FF8000000FFE00000000000001FF00000007FC00000000000001FF00000007FC00000
+000000001FF00000007FC00000000000001FE00000003FC00000000000000FE00000003F800000
+000000000FE00000003F800000000000000FC00000001F8000000000000007C00000001F000000
+0000000007C00000001F0000000000000007800000000F0000000000000003800000000E000000
+0065487EC66A>87 D<0003FE000000001FFFC00000007E03F0000000F000FC000001C0007E0000
+0380003F000007C0001F800007F0001FC0000FF0000FC0000FF8000FE0000FF8000FE0000FF800
+07F00007F00007F00007F00007F00001C00007F00000000007F00000000007F00000000007F000
+00000007F000000001FFF00000007FFFF0000003FF87F000001FF007F000007F8007F00001FE00
+07F00003F80007F00007F00007F0000FE00007F0001FC00007F0003FC00007F0003F800007F000
+7F800007F01C7F800007F01CFF000007F01CFF000007F01CFF000007F01CFF00000FF01CFF0000
+0FF01CFF00000FF01C7F80001BF01C7F800033F01C3FC00031F8381FC00061F8380FF001C0FC70
+03FC0780FFE000FFFE003FC0001FF8001F802E2F7CAD34>97 D<01FE0000000000FFFE00000000
+00FFFE0000000000FFFE000000000003FE000000000001FE000000000000FE000000000000FE00
+0000000000FE000000000000FE000000000000FE000000000000FE000000000000FE0000000000
+00FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE0000
+00000000FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000
+FE000000000000FE000000000000FE000000000000FE00FF00000000FE07FFF0000000FE1F01FC
+000000FE38003E000000FE70001F800000FEC0000FC00000FF800007E00000FF800003F00000FF
+000003F80000FE000001FC0000FE000001FC0000FE000000FE0000FE000000FE0000FE000000FF
+0000FE000000FF0000FE0000007F8000FE0000007F8000FE0000007F8000FE0000007FC000FE00
+00007FC000FE0000007FC000FE0000007FC000FE0000007FC000FE0000007FC000FE0000007FC0
+00FE0000007FC000FE0000007FC000FE0000007FC000FE0000007F8000FE0000007F8000FE0000
+00FF8000FE000000FF0000FE000000FF0000FE000000FE0000FE000001FE0000FE000001FC0000
+FE000001F80000FF000003F00000FF800007F00000FD800007E00000F9C0000F800000F8E0003F
+000000F078007E000000F01E03F8000000E00FFFE00000000001FE00000032497DC739>I<0000
+3FE0000001FFFE000007E01F80001F8003C0003E0000E0007C00007001F80000F803F80003F803
+F00003FC07F00007FC0FE00007FC1FE00007FC1FC00003F83FC00003F83FC00000E03FC0000000
+7FC00000007F800000007F80000000FF80000000FF80000000FF80000000FF80000000FF800000
+00FF80000000FF80000000FF80000000FF80000000FF800000007F800000007F800000007FC000
+00003FC00000003FC000000E1FC000000E1FE000000E0FE000001C0FF000001C07F000003803F8
+00003801F800007000FC0000E0007E0001C0001F800780000FE03E000001FFFC0000003FE00027
+2F7DAD2E>I<00007F80000003FFF000000FC0FC00003F003F00007C001F8000F8000FC001F800
+07E003F00007E007E00003F00FE00003F80FE00003F81FC00001FC1FC00001FC3FC00001FC3FC0
+0001FC7F800001FE7F800000FE7F800000FEFF800000FEFF800000FEFFFFFFFFFEFFFFFFFFFEFF
+80000000FF80000000FF80000000FF80000000FF80000000FF800000007F800000007F80000000
+7F800000007FC00000003FC00000003FC000000E1FC000000E1FE000000E0FE000001C07E00000
+1C07F000003803F000007001F800007000FC0000E0003E0003C0001F8007000007E03E000001FF
+F80000003FC000272F7DAD2E>101 D<01FE0000000000FFFE0000000000FFFE0000000000FFFE
+000000000003FE000000000001FE000000000000FE000000000000FE000000000000FE00000000
+0000FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE00
+0000000000FE000000000000FE000000000000FE000000000000FE000000000000FE0000000000
+00FE000000000000FE000000000000FE000000000000FE000000000000FE000000000000FE0000
+00000000FE000000000000FE000000000000FE001FFFFE0000FE001FFFFE0000FE001FFFFE0000
+FE0007FFE00000FE0003FF000000FE0001FC000000FE0001F0000000FE0003E0000000FE0003C0
+000000FE000780000000FE000E00000000FE001C00000000FE007800000000FE00F000000000FE
+01E000000000FE03C000000000FE07C000000000FE0FC000000000FE1FE000000000FE3FF00000
+0000FEF3F000000000FFE3F800000000FFC1FC00000000FF80FE00000000FF00FE00000000FE00
+7F00000000FC003F80000000FC003F80000000FC001FC0000000FC000FE0000000FC000FE00000
+00FC0007F0000000FC0003F8000000FC0001F8000000FC0001FC000000FC0000FE000000FC0000
+FF000000FC00007F000000FC00007F800000FC00007FC00003FF0000FFF000FFFFFC07FFFF80FF
+FFFC07FFFF80FFFFFC07FFFF8031487DC737>107 D<01FE00FFFE00FFFE00FFFE0003FE0001FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE
+0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0003FF80FFFFFEFFFF
+FEFFFFFE17487DC71C>I<01FC007F800000FFFC03FFF00000FFFC0781F80000FFFC0C007C0000
+03FC18007E000001FC30003F000000FC60003F800000FCC0001F800000FD80001F800000FD8000
+1FC00000FF00001FC00000FF00001FC00000FF00001FC00000FE00001FC00000FE00001FC00000
+FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001F
+C00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE
+00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC0
+0000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00
+001FC00000FE00001FC00000FE00001FC00000FE00001FC00003FF80007FF000FFFFFE1FFFFFC0
+FFFFFE1FFFFFC0FFFFFE1FFFFFC0322D7CAC39>110 D<01FC01F800FFFC07FE00FFFC1E1F00FF
+FC383F8003FC607FC001FC607FC000FCC07FC000FCC07FC000FD803F8000FD801F0000FF000E00
+00FF00000000FF00000000FF00000000FE00000000FE00000000FE00000000FE00000000FE0000
+0000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00
+000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE00000000FE
+00000000FE00000000FE00000000FE00000000FE00000000FE00000000FF00000003FF800000FF
+FFFF8000FFFFFF8000FFFFFF8000222D7DAC28>114 D<001FF8060000FFFF0E0003F0079E0007
+8001FE000E00007E001C00003E003C00003E007800001E007800001E00F800001E00F800000E00
+F800000E00FC00000E00FC00000E00FE00000E00FF000000007FC00000007FF80000003FFFE000
+001FFFFE00000FFFFF800007FFFFE00003FFFFF00000FFFFFC00001FFFFE000001FFFE0000000F
+FF00000001FF800000007F806000001FC0E000001FC0E000000FC0F000000FC0F0000007C0F000
+0007C0F0000007C0F8000007C0F800000780FC00000780FC00000F00FE00000F00FF00001E00FF
+80003C00F9E0007800F0F803E000E03FFFC000C007FC0000222F7DAD29>I<01FE00003FC000FF
+FE001FFFC000FFFE001FFFC000FFFE001FFFC00003FE00007FC00001FE00003FC00000FE00001F
+C00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE
+00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC0
+0000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00
+001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC000
+00FE00001FC00000FE00001FC00000FE00001FC00000FE00001FC00000FE00003FC00000FE0000
+3FC00000FE00003FC00000FE00007FC000007E00007FC000007E00007FC000003F0000DFC00000
+3F00019FE000001F00031FF000000F80061FFFC00007F01C1FFFC00001FFF81FFFC000003FE01F
+E000322E7CAC39>117 D E end
+%%EndProlog
+%%BeginSetup
+%%Feature: *Resolution 300dpi
+TeXDict begin
+
+%%EndSetup
+%%Page: 0 1
+0 0 bop 206 823 a Fq(F)-9 b(unnelW)g(eb)37 b(Hac)m(k)m(er's)d(Man)m(ual)603
+1151 y Fp(Ross)21 b(N.)g(Williams)519 1343 y Fo(V1.0)e(for)h(F)-5
+b(unnelW)g(eb)20 b(V3.0)725 1536 y(Ma)n(y)g(1992)p eop
+%%Page: 1 2
+1 1 bop 177 2597 1772 2 v 177 2675 a Fn(Cop)o(yrigh)o(t)384
+2674 y(c)372 2675 y Fm(\015)14 b Fn(1992)e(Ross)i(N.)g(William)o(s.)177
+2750 y(P)o(ermission)j(is)g(gran)o(ted)g(to)h(mak)o(e)d(and)j(distribute)g(v)
+o(erbatim)d(copies)j(of)f(this)h(man)o(ual)c(pro)o(vided)k(that)f(the)177
+2800 y(cop)o(yrigh)o(t)d(notice)g(and)g(this)g(p)q(ermission)e(notice)j(are)f
+(preserv)o(ed)i(on)e(all)e(copies.)p 177 2835 V 1053 2940 a(1)p
+eop
+%%Page: 2 3
+2 2 bop 1053 2940 a Fn(2)p eop
+%%Page: 3 4
+3 3 bop 177 397 a Fl(Con)m(ten)m(ts)177 679 y Fk(Preface)1592
+b(5)177 794 y(Ac)o(kno)o(wledgemen)o(ts)1348 b(7)177 909 y(Presen)o(tation)12
+b(Notes)1347 b(9)177 1024 y(1)38 b(F)l(unnelW)l(eb)14 b(Design)1268
+b(11)239 1098 y Fn(1.1)42 b(Motiv)n(ation)12 b(for)i(F)m(unnelW)m(eb)k
+Fj(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(11)239
+1172 y(1.2)42 b(Inden)o(tation)30 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(12)239
+1245 y(1.3)42 b(Review)14 b(of)f(F)m(unnelW)m(eb)g(Syn)o(tax)28
+b Fj(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(14)335
+1319 y(1.3.1)46 b(Review)13 b(of)h(Macro)g(De\014nition)f(Syn)o(tax)k
+Fj(:)j(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)
+g(:)h(:)f(:)g(:)61 b Fn(14)335 1393 y(1.3.2)46 b(Review)13
+b(of)h(Macro)g(Call)e(Syn)o(tax)26 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)
+h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(16)335 1467 y(1.3.3)46 b(Review)13 b(of)h(P)o(arameterized)g(Macro)g
+(Call)f(Syn)o(tax)42 b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fn(16)239 1540 y(1.4)42 b(Do)q(cumen)o(t)13
+b(Structuring)27 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fn(16)239 1614 y(1.5)42 b(Discussion)14 b(of)f(Some)g
+(Miscellaneous)h(Issues)30 b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)
+h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(18)239
+1688 y(1.6)42 b(Automated)13 b(Regression)h(T)m(esting)38 b
+Fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(18)239 1761
+y(1.7)42 b(Command)11 b(Line)i(In)o(terface)j Fj(:)k(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(18)239 1835 y(1.8)42 b(File)13
+b(Name)g(Managemen)o(t)31 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)61 b Fn(19)335 1909 y(1.8.1)46 b(Filename)12 b(Extensions)24
+b Fj(:)c(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(20)335
+1982 y(1.8.2)46 b(Filename)12 b(Inheritance)k Fj(:)k(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)61 b Fn(20)335 2056 y(1.8.3)46 b(P)o(ortable)14
+b(Structure)h(of)f(File)f(Names)20 b Fj(:)g(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(21)239 2130 y(1.9)42 b(Sp)q(ecifying)13 b(Constrain)o(ts)i(on)e(the)i
+(Num)o(b)q(er)e(of)g(Instan)o(tiations)38 b Fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(22)239 2204 y(1.10)21
+b(The)14 b(Relationship)f(Bet)o(w)o(een)i(Do)q(cumen)o(t)e(Structure)j(and)e
+(Macro)g(Structure)19 b Fj(:)h(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(23)239 2277 y(1.11)21 b(Diagnostic)13 b(Messages)32 b
+Fj(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(25)239 2351 y(1.12)21 b(Summary)31 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(25)177 2466 y Fk(2)38 b(F)l(unnelW)l(eb)14 b(Implemen)o(tati)o(on)1077
+b(27)239 2540 y Fn(2.1)42 b(In)o(tro)q(duction)13 b Fj(:)20
+b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fn(27)239 2614 y(2.2)42 b(History)14 b(of)f(F)m(unnelW)m(eb)g
+(Implemen)o(tations)40 b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)
+f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(27)239
+2687 y(2.3)42 b(Wh)o(y)13 b(F)m(unnelW)m(eb)h(W)m(asn't)e(Used)j(to)f(W)m
+(rite)g(Itself)35 b Fj(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(28)239 2761 y(2.4)42
+b(Co)q(ding)13 b(St)o(yle)38 b Fj(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(28)239 2835
+y(2.5)42 b(Use)15 b(of)e(Memory)27 b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(29)1053 2940
+y(3)p eop
+%%Page: 4 5
+4 4 bop 239 42 a Fn(2.6)42 b(The)14 b(Heap)30 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(29)239 116 y(2.7)42 b(The)14 b(Stac)o(k)24 b Fj(:)c(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(30)239 191 y(2.8)42 b(Static)14 b(V)m(ariables)k Fj(:)i(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fn(30)239 266 y(2.9)42 b(Implemen)o(ting)11 b(T)m(ext)j(Inden)o(tation)25
+b Fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(30)177
+382 y Fk(3)38 b(F)l(unnelW)l(eb)14 b(Mo)q(di\014cation)1145
+b(35)239 457 y Fn(3.1)42 b(In)o(tro)q(duction)13 b Fj(:)20
+b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fn(35)239 531 y(3.2)42 b(The)14 b(Danger)g(of)f(Mo)q(difying)g
+(Languages)26 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(35)239
+606 y(3.3)42 b(Authorit)o(y)14 b(vs)g(User)h(Securit)o(y)43
+b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fn(36)239 681 y(3.4)42 b(What)13 b(I)h(W)m(an)o(t)f(to)h(Protect)25
+b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(37)239 756 y(3.5)42 b(Mo)q(difying)12 b(the)j(Man)o(uals)c
+Fj(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(38)239 830 y(3.6)42 b(Ho)o(w)13 b(Cop)o(yrigh)o(t)g(La)o(w)h(W)m(orks)37
+b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b
+Fn(38)239 905 y(3.7)42 b(Managemen)o(t)13 b(of)g(the)h(O\016cial)f(F)m
+(unnelW)m(eb)f Fj(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(39)239 980
+y(3.8)42 b(A)14 b(GNU)g(V)m(ersion?)29 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)
+g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(41)239 1054
+y(3.9)42 b(Summary)31 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(41)177 1171
+y Fk(4)38 b(F)l(unnelW)l(eb)14 b(F)l(uture)1270 b(43)239 1245
+y Fn(4.1)42 b(Do)q(cumen)o(tation)25 b Fj(:)20 b(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(43)239 1320
+y(4.2)42 b(Command)11 b(Line)i(In)o(terface)j Fj(:)k(:)h(:)f(:)g(:)g(:)h(:)f
+(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(43)239 1395 y(4.3)42 b(Shell)13
+b(In)o(terpreter)42 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)61 b Fn(43)239 1469 y(4.4)42 b(Language)13
+b(Design)28 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)61 b Fn(44)239 1544 y(4.5)42 b(Scanner/Mapp)q(er)34
+b Fj(:)20 b(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)61 b Fn(44)239 1619 y(4.6)42 b(P)o(arser)29 b Fj(:)20 b(:)h(:)f(:)g(:)h(:)
+f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(45)239 1694 y(4.7)42 b(Analyser)16 b Fj(:)21 b(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(45)239 1768 y(4.8)42 b(T)m(angle)21 b Fj(:)f(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(45)239 1843 y(4.9)42 b(W)m(ea)o(v)o(e)26 b Fj(:)20 b(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(45)239 1918 y(4.10)21 b(Lister)39 b Fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g(:)
+g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(46)239 1993 y(4.11)21 b(Diagnostics)32 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(47)239 2067 y(4.12)21 b(Sp)q(eed)37 b Fj(:)20 b(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h
+(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(47)239 2142 y(4.13)21 b(Correctness)32 b Fj(:)20 b(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(47)239 2217 y(4.14)21 b(T)m(est)14 b(Suite)25 b Fj(:)20
+b(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g
+(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f
+(:)g(:)61 b Fn(47)239 2291 y(4.15)21 b(Mac)o(hine-Sp)q(eci\014c)15
+b(Changes)29 b Fj(:)21 b(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g
+(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(48)239 2366 y(4.16)21 b(Summary)31 b Fj(:)20 b(:)g(:)h(:)f(:)g(:)g(:)h
+(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g
+(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)g(:)h(:)f(:)g(:)h(:)f(:)g(:)61
+b Fn(48)177 2482 y Fk(A)26 b(GNU)16 b(General)e(Public)f(License)h(V)l
+(ersion)g(2)841 b(49)177 2599 y(B)28 b(References)1436 b(57)177
+2715 y(Index)1605 b(57)1053 2940 y Fn(4)p eop
+%%Page: 5 6
+5 5 bop 177 399 a Fl(Preface)177 639 y Fn(This)15 b(man)o(ual)d(is)j(for)f
+(hac)o(k)o(ers!)22 b(An)o(y)o(one)15 b(who)g(w)o(an)o(ts)f(to)h(bash,)g
+(diddle,)f(frob,)g(grind,)h(mangle,)d(patc)o(h,)j(p)q(ok)o(e,)177
+689 y(toggle,)e(t)o(widdle,)g(zap,)h(or)f(generally)h(hac)o(k)g(F)m(unnelW)m
+(eb)f(should)h(at)g(least)g(tak)o(e)g(a)f(lo)q(ok)g(at)h(this)g(man)o(ual.)
+177 764 y(This)g(do)q(cumen)o(t)f(has)h(b)q(een)h(created)h(to)e(serv)o(e)h
+(t)o(w)o(o)e(purp)q(oses:)228 880 y(1.)20 b(T)m(o)12 b(act)h(as)f(a)h(rep)q
+(ository)g(for)f(sp)q(eci\014c)j(design)d(and)h(implemen)o(tatio)o(n)d
+(information)g(not)i(appropriate)h(to)281 930 y(b)q(e)h(included)g(in)g
+(program)e(commen)o(ts.)228 1013 y(2.)20 b(T)m(o)13 b(guide)h(those)g(in)o
+(terested)i(in)d(mo)q(difying)e(the)k(program.)177 1129 y(As)e(a)g(result,)g
+(this)g(do)q(cumen)o(t)f(has)h(gro)o(wn)g(in)f(\014ts)i(and)e(starts.)19
+b(This)13 b(man)o(ual)d(is)j(not)f(a)h(particularly)f(p)q(olished)177
+1179 y(or)h(w)o(ell-balanced)e(do)q(cumen)o(t)h(but)h(it)f(should)h(b)q(e)g
+(of)f(assistance)h(to)g(those)g(\(including)f(m)o(yself)s(\))f(in)o(v)o(olv)o
+(ed)g(with)177 1229 y(mo)q(difying)g(F)m(unnelW)m(eb.)177 1328
+y Fk(Ross)k(N.)i(Williams)177 1378 y(Adelaide,)d(Australia)177
+1428 y(Ma)o(y)i(1992)1053 2940 y Fn(5)p eop
+%%Page: 6 7
+6 6 bop 1053 2940 a Fn(6)p eop
+%%Page: 7 8
+7 7 bop 177 399 a Fl(Ac)m(kno)m(wledgemen)m(ts)177 645 y Fn(Man)o(y)16
+b(thanks)h(to)g Fk(Da)o(vid)h(Hulse)d Fn(\()p Fi(dave@cs.adelaide.e)o(du.au)o
+Fn(\))f(for)j(translating)f(the)h(original)e(v)o(ersion)177
+695 y(of)g(F)m(unnelW)m(eb)g(\(F)m(unnelW)m(eb)h(V1\))f(from)f(Ada)i(in)o(to)
+f(C)g(and)h(getting)f(it)h(to)f(w)o(ork)g(on)h(Unix)f(and)h(a)f(PC.)g(The)177
+744 y(C)i(co)q(de)h(written)f(b)o(y)g(Da)o(vid)e(\(F)m(unnelW)m(eb)i(V2\))f
+(formed)g(the)h(basis)g(of)g(F)m(unnelW)m(eb)f(V3,)h(but)g(w)o(as)g(en)o
+(tirely)177 794 y(rewritten)h(during)f(the)h(in)o(tensiv)o(e)f(re\014nemen)o
+(t)h(and)e(feature-injection)i(p)q(erio)q(d)f(leading)f(up)h(to)g(this)h
+(release)177 844 y(\(F)m(unnelW)m(eb)12 b(V3)g(is)f(ab)q(out)h(three)h(times)
+e(the)i(size)g(of)e(F)m(unnelW)m(eb)g(V2\).)18 b(Nev)o(ertheless,)c(without)e
+(this)g(imp)q(or-)177 894 y(tan)o(t)h(\014rst)i(translation)d(step,)i(I)g(w)o
+(ould)e(probably)h(not)g(ha)o(v)o(e)g(found)g(the)h(motiv)n(ation)d(to)i(dev)
+o(elop)g(F)m(unnelW)m(eb)177 944 y(to)h(its)g(presen)o(t)h(state.)177
+1018 y(Thanks)f(go)e(to)h Fk(Simon)h(Hac)o(k)o(ett)e Fn(\()p
+Fi(simon@internode.com)o(.au)p Fn(\))e(of)j(In)o(terno)q(de)h(Systems)f(Pt)o
+(y)h(Ltd)f(for)g(the)177 1068 y(use)18 b(of)e(his)h(Sun,)h(Mac,)g(and)e(PC,)h
+(for)g(assistance)h(in)f(p)q(orting)f(F)m(unnelW)m(eb)h(to)g(the)g(Sun)h(and)
+e(PC,)h(and)g(for)177 1118 y(helpful)c(discussions.)177 1193
+y(Thanks)j(go)g(to)f Fk(Jerem)o(y)i(Begg)f Fn(\()p Fi(jeremy@vsm.com.au)o
+Fn(\))d(of)j(VSM)g(Soft)o(w)o(are)f(Services)j(for)d(the)i(use)g(of)e(his)177
+1243 y(V)-5 b(AX,)14 b(and)g(for)g(assistance)h(with)e(the)i(VMS-sp)q
+(eci\014c)g(co)q(de.)177 1317 y(Thanks)50 b(to)h Fk(Barry)57
+b(Dwy)o(er)50 b Fn(\()p Fi(dwyer@cs.adelaid)o(e.edu)o(.au)p
+Fn(\))d(and)j Fk(Roger)57 b(Brissenden)177 1367 y Fn(\()p Fi
+(rjb@koala.harvard.e)o(du)p Fn(\))15 b(for)j(trying)g(out)g(F)m(unnelW)m(eb)g
+(V)m(ersion)g(1)g(in)g(1987)f(and)h(pro)o(viding)f(v)n(aluable)177
+1417 y(feedbac)o(k.)177 1492 y(Thanks)d(to)g(Donald)f(Kn)o(uth)h(for)f
+(establishing)h(the)g(idea)g(of)f(literate)h(programming)d(in)i(the)i
+(\014rst)f(place.)177 1591 y Fk(Ross)h(N.)i(Williams)177 1641
+y(Adelaide,)d(Australia)177 1691 y(Ma)o(y)i(1992)1053 2940
+y Fn(7)p eop
+%%Page: 8 9
+8 8 bop 1053 2940 a Fn(8)p eop
+%%Page: 9 10
+9 9 bop 177 399 a Fl(Presen)m(tation)42 b(Notes)177 639 y Fk(References:)e
+Fn(All)24 b(references)29 b(are)c(set)i(in)e(b)q(old)f(and)i(are)f(cited)h
+(in)f(square)h(brac)o(k)o(ets)h(in)e(the)h(form)177 689 y Fk([)p
+Fj(<)p Fh(\014rstauthor)p Fj(><)p Fh(ye)n(ar)p Fj(>)p Fk(])p
+Fn(.)19 b(All)13 b(references)j(cited)e(in)f(the)g(text)h(app)q(ear)g(in)f
+(the)h(reference)h(list)e(and)g(the)h(index.)177 764 y Fk(Sp)q(ecial)d
+(terms:)17 b Fn(New)12 b(or)f(imp)q(ortan)o(t)f(terminology)f(has)i(b)q(een)i
+(set)f(in)f(b)q(old)g(face)h(and)f(app)q(ears)h(in)f(the)h(index.)177
+839 y Fk(T)o(yp)q(esetting:)69 b Fn(This)41 b(do)q(cumen)o(t)f(w)o(as)g
+(prepared)i(b)o(y)e(the)h(author)f(using)h(Andrew)g(T)m(rev)o(or-)177
+888 y(ro)o(w's)29 b(\()p Fi(akt150@cscgpo.anu.e)o(du.au)o Fn(\))e(implemen)o
+(tatio)o(n)g(\(OzT)m(eX\))j(of)f(the)h(T)1558 897 y(E)1581
+888 y(X/L)1644 883 y Fg(a)1663 888 y Fn(T)1686 901 y(E)1709
+888 y(X)p Fk([Kn)o(uth84])177 938 y([Lamp)q(ort86])13 b Fn(t)o(yp)q(esetting)
+i(system)e(running)h(on)g(a)f(Macin)o(tosh-SE.)177 1013 y Fk(Graphics:)i
+Fn(All)c(diagrams)e(ha)o(v)o(e)i(b)q(een)i(constructed)g(out)e(of)g(text)h
+(using)f(the)h(L)1431 1008 y Fg(a)1450 1013 y Fn(T)1473 1025
+y(E)1496 1013 y(X)f Fi(verbatim)f Fn(en)o(vironmen)o(t)177
+1063 y(so)17 b(as)f(to)h(allo)o(w)e(this)h(do)q(cumen)o(t)g(to)h(b)q(e)g
+(disseminated)e(electronically)i(and)f(prin)o(ted)h(using)f(L)1695
+1058 y Fg(a)1714 1063 y Fn(T)1737 1075 y(E)1761 1063 y(X)g(without)177
+1112 y(access)g(to)e(the)g(author's)g(dra)o(wing)f(to)q(ols.)177
+1187 y Fk(Kno)o(wn)g(t)o(yp)q(esetting)d(problems:)k Fn(While)d(ev)o(ery)h
+(attempt)f(has)h(b)q(een)g(made)e(to)i(giv)o(e)f(a)g(go)q(o)q(d)g(presen)o
+(tation)177 1237 y(within)h(the)h(time)e(a)o(v)n(ailable,)f(some)i(shortcuts)
+i(ha)o(v)o(e)e(had)g(to)g(b)q(e)h(tak)o(en.)18 b(In)13 b(particular,)f(the)h
+(author)f(has)h(b)q(een)177 1287 y(unable)h(to)g(w)o(ork)f(out)h(ho)o(w)g(to)
+f(get)h(L)754 1282 y Fg(a)773 1287 y Fn(T)796 1299 y(E)820
+1287 y(X)g(to)g(suppress)h(blank)f(pages)g(at)f(the)i(start)f(of)g(c)o
+(hapters.)1053 2940 y(9)p eop
+%%Page: 10 11
+10 10 bop 1042 2940 a Fn(10)p eop
+%%Page: 11 12
+11 11 bop 177 381 a Ff(Chapter)34 b(1)177 617 y Fl(F)-10 b(unnelW)g(eb)41
+b(Design)177 861 y Fn(This)18 b(c)o(hapter)i(con)o(tains)e(notes)h(on)f(the)h
+(design)f(of)g(F)m(unnelW)m(eb.)31 b(These)19 b(notes)g(w)o(ere)h(not)e
+(created)i(\\from)177 911 y(scratc)o(h",)d(as)f(the)g(original)e(v)o(ersion)i
+(of)f(F)m(unnelW)m(eb)g(\()p Fk(F)l(unnelW)l(eb)h(V1)p Fn(\))g(w)o(as)g
+(designed)g(and)g(constructed)177 961 y(in)d(a)h(h)o(urry)f(late)h(in)f
+(1986,)f(and)h(no)h(design)f(notes)i(w)o(ere)f(ev)o(er)h(recorded.)k(These)c
+(notes)f(are)g(in)f(fact)h(the)g(result)177 1011 y(of)g(a)h(complete)f
+(review)h(of)f(the)h(F)m(unnelW)m(eb)f(design)h(that)g(to)q(ok)f(place)h(in)f
+(late)h(1991)e(as)i(part)g(of)f(the)h(pro)q(cess)177 1061 y(of)e(upgrading)h
+(it)f(for)h(public)f(release.)177 1139 y(Throughout)f(the)h(design)g(pro)q
+(cess)h(I)f(tried)g(to)f(stic)o(k)g(to)h(the)g(principles)g(of)e(simplicit)o
+(y)f(and)i(clarit)o(y)m(.)17 b(As)c(a)f(rule,)177 1188 y(it)17
+b(w)o(as)h(considered)h(more)e(imp)q(ortan)o(t)f(that)i(a)f(feature)h(b)q(e)h
+(simple)d(and)h(not)h(allo)o(w)e(the)i(user)h(to)f(outsmart)177
+1238 y(himself)d(than)h(it)g(w)o(as)g(for)g(the)h(feature)f(to)h(b)q(e)f
+(particularly)g(crisp.)26 b(F)m(or)15 b(example,)g(the)i(F)m(unnelW)m(eb)f
+(macro)177 1288 y(calling)d(syn)o(tax)g(is)h(not)g(as)g(crisp)g(as)g(the)h(C)
+f(syn)o(tax,)f(but)h(is)g(more)f(visible.)177 1366 y(T)m(o)i(some)f(exten)o
+(t)i(the)g(design)f(review)h(w)o(as)f(in\015uenced)i(b)o(y)e(the)h
+(requiremen)o(ts)f(of)g(bac)o(kw)o(ard)g(compatibilit)o(y)l(.)177
+1416 y(During)d(the)h(review)g(it)g(w)o(as)f(hard)h(not)f(to)h(think)f(ab)q
+(out)g(all)g(the)h(source)h(\014les)e(in)h(F)m(unnelW)m(eb)f(V1)g(format)f
+(that)177 1466 y(I)j(ha)o(v)o(e)f(written)i(o)o(v)o(er)f(the)g(y)o(ears)g
+(that)g(w)o(ould)f(ha)o(v)o(e)h(to)f(b)q(e)i(con)o(v)o(erted)g(w)o(ere)f(I)g
+(to)g(signi\014can)o(tly)e(deviate)j(from)177 1516 y(the)h(old)f(input)g
+(language.)22 b(Luc)o(kily)14 b(it)h(turned)i(out)e(that)h(there)g(w)o(as)g
+(little)e(clash)i(b)q(et)o(w)o(een)h(these)g(in)o(terests,)177
+1565 y(and)g(the)h(resulting)f(design)g(is)g(b)q(oth)g(clean)g(and)g(do)q(es)
+h(not)f(require)h(m)o(uc)o(h)e(con)o(v)o(ersion)h(of)f(old)h(source)h
+(\014les.)177 1615 y(The)f(main)d(revision)i(is)h(in)f(the)h(do)q(cumen)o(t)e
+(structuring)j(facilit)o(y)m(.)23 b(F)m(unnelW)m(eb)16 b(V1)g(had)g(just)h(t)
+o(w)o(o)f(lev)o(els)g(of)177 1665 y(heading)d(indicated)g(b)o(y)g
+Fi(@*@*)g Fn(\(for)g(ma)r(jor)e(headings\))j(and)f Fi(@*)g
+Fn(\(for)g(minor)e(headings\).)18 b(This)13 b(sc)o(heme)h(\(whic)o(h)177
+1715 y(w)o(as)i(copied)g(from)e(Kn)o(uth's)i(W)m(eb\))f(has)h(b)q(een)h
+(replaced)g(b)o(y)e(a)h(hierarc)o(hical)f(sc)o(heme)h(of)f(\014v)o(e)h
+(heading)g(lev)o(els)177 1765 y(lev)o(els)e(\()p Fi(@A)p Fj(:)7
+b(:)g(:)n Fi(@E)p Fn(\).)177 1843 y(This)18 b(c)o(hapter)h(is)e(rather)i
+(unstructured,)i(acting)c(as)h(it)g(has,)g(mainly)e(as)i(a)f(dumping)f
+(ground)i(for)f(random)177 1893 y(ideas)d(ab)q(out)g(F)m(unnelW)m(eb.)177
+2066 y Fe(1.1)70 b(Motiv)l(ation)22 b(for)i(F)-6 b(unnelW)g(eb)177
+2186 y Fn(During)16 b(1986,)f(I)h(w)o(as)g(exp)q(osed)i(to)e(Donald)f(Kn)o
+(uth's)i Fi(WEB)e Fn(literate)i(programmi)o(ng)c(system)j(in)g(the)h(form)d
+(of)177 2236 y(Jon)j(Ben)o(tley's)h Fh(Pr)n(o)n(gr)n(amming)f(Pe)n(arls)f
+Fn(column)f(in)h Fh(Communic)n(ations)i(of)g(the)g(A)o(CM)7
+b Fk([Ben)o(tley86])p Fn(.)1825 2221 y Fd(1)1868 2236 y Fn(This)177
+2286 y(prompted)17 b(me)f(to)h(obtain)g(a)g(cop)o(y)g(of)g(the)h(rep)q(ort)g
+(on)f(the)h(W)m(eb)f(system)p Fk([Kn)o(uth83])f Fn(and)h(to)g(try)h(out)f
+(the)177 2336 y(program)12 b(whic)o(h)i(had)g(b)q(een)h(installed)e(on)h(the)
+g(lo)q(cal)f(V)m(axen.)177 2414 y(W)m(eb)h(w)o(as)f(the)i(b)q(est)f(system)g
+(that)g(I)f(had)h(seen)h(for)e(pro)q(ducing)h(prin)o(ted)g(and)g(online,)f
+(inline)f(do)q(cumen)o(tation.)177 2464 y(T)m(o)k(me)g(the)i(most)e
+(extraordinary)h(asp)q(ect)h(of)f(the)g(system)g(w)o(as)g(its)g(success)j
+(despite)e(the)f(fact)g(that)g(it)g(had)177 2514 y(b)q(een)h(built)e(in)o(to)
+h(the)g(horribly)g(an)o(tiquated)f(\014le/batc)o(h)h(pro)q(cessing)h(systems)
+f(that)g(w)o(e)h(all)d(kno)o(w)i(and)f(lo)o(v)o(e)177 2563
+y(\(and)f(use\).)20 b(I)15 b(had)f(imagined)e(sophisticated)j(do)q(cumen)o
+(tation)f(systems)g(b)q(efore)h(this)g(time,)e(but)i(had)f(alw)o(a)o(ys)177
+2613 y(assumed)i(that)h(they)g(w)o(ould)f(b)q(e)i(parts)f(of)f(complex)f
+(programming)e(en)o(vironmen)o(ts.)26 b(Kn)o(uth)17 b(sho)o(w)o(ed)g(that,)
+177 2663 y(to)f(some)e(exten)o(t,)j(it)e(can)h(b)q(e)g(done)g(using)f(1960s)g
+(soft)o(w)o(are)h(tec)o(hnology)f(\(excluding)h(the)g(1980s)f(t)o(yp)q
+(esetting)177 2713 y(tec)o(hnology\).)j(This)c(w)o(as)g(exciting.)p
+177 2757 709 2 v 223 2783 a Fc(1)241 2795 y Fb(As)g(it)g(happ)q(ens,)e(this)h
+(w)o(as)h(somewhat)f(of)g(a)h(luc)o(ky)e(encoun)o(ter.)20 b(I)14
+b(had)f(only)g(just)g(joined)f(the)h(A)o(CM)i(and)e(the)h(Ma)o(y)f(1986)177
+2835 y(issue)e(of)g(CA)o(CM)j(in)d(whic)o(h)g(the)f(column)g(app)q(eared)f(w)
+o(as)j(the)e(\014rst)h(issue)g(I)g(receiv)o(ed.)1042 2940 y
+Fn(11)p eop
+%%Page: 12 13
+12 12 bop 177 42 a Fn(The)16 b(W)m(eb)g(system)f(w)o(as)h(en)o(ticing)f(and)h
+(promising)d(but)j(to)g(me)e(su\013ered)k(from)c(man)o(y)g(dra)o(wbac)o(ks,)i
+(man)o(y)d(of)177 91 y(whic)o(h)j(Kn)o(uth)g(had)g(promoted)f(as)h(adv)n(an)o
+(tages.)23 b(The)17 b(follo)o(wing)c(highly)i(sub)r(jectiv)o(e)i(list)e(of)g
+(disadv)n(an)o(tages)177 141 y(formed)e(a)g(springb)q(oard)h(for)g(the)g
+(construction)h(of)f(F)m(unnelW)m(eb.)239 247 y Fm(\017)21
+b Fn(W)m(eb)13 b(can)i(only)e(pro)q(cess)i(P)o(ascal)f(programs.)239
+327 y Fm(\017)21 b Fn(W)m(eb)16 b(can)h(pro)q(duce)h(only)e(one)h(output)f
+(\014le.)27 b(In)16 b(man)o(y)f(instances)j(it)e(is)g(desirable)h(to)g
+(generate)h(more)281 377 y(than)g(one)h(output)g(\014le.)31
+b(F)m(or)18 b(example,)g(when)h(programming)c(in)j(Ada,)h(it)f(is)g
+(desirable)h(to)f(write)h(a)281 427 y(pac)o(k)n(age)13 b(sp)q(eci\014cation)i
+(and)f(a)f(pac)o(k)n(age)h(b)q(o)q(dy)g(together)h(in)e(the)i(same)e(\014le.)
+239 507 y Fm(\017)21 b Fn(W)m(eb)15 b(enforces)h(Kn)o(uth's)f(individual)e
+(st)o(yle)j(of)e(inden)o(tation.)21 b(W)m(eb)15 b(supplies)g(commands)e(to)i
+(o)o(v)o(er-ride)281 557 y(the)h(automatic)e(inden)o(tation)h(but)g(it)g(is)h
+(an)f(uphill)f(battle)i(and)f(the)h(co)q(de)h(b)q(ecomes)e(clogged)h(up)f
+(with)281 606 y(format)d(directiv)o(es.)239 686 y Fm(\017)21
+b Fn(W)m(eb)f(do)q(es)i(not)f(cater)g(for)g(non-standard)g(P)o(ascal)f
+(programs.)38 b(In)21 b(particular,)g(all)f(iden)o(ti\014ers)h(are)281
+736 y(truncated)15 b(to)f(ab)q(out)g(eigh)o(t)f(c)o(haracters.)239
+816 y Fm(\017)21 b Fn(W)m(eb)13 b(formats)g(the)h(program)f(output)h(\014le)g
+(in)o(to)f(a)g(form)g(that)g(is)h(unreadable)g(to)g(h)o(umans.)239
+896 y Fm(\017)21 b Fn(W)m(eb)11 b(do)q(es)i(not)f(pro)o(vide)g(an)f(include)h
+(facilit)o(y)m(.)j(This)d(w)o(as)g(considered)h(a)f(feature)g(essen)o(tial)h
+(for)e(supp)q(ort-)281 946 y(ing)i(macro)g(libraries.)239 1026
+y Fm(\017)21 b Fn(W)m(eb)13 b(pro)o(vides)h(macros)f(with)g(at)h(most)e(one)i
+(parameter.)k(Kn)o(uth)c(describ)q(es)i(a)d(hac)o(k)h(that)g(can)g(extract)
+281 1076 y(a)d(m)o(ultiple)f(parameter)h(macro)g(facilit)o(y)f(from)g(a)h
+(single)g(parameter)h(one,)g(but)g(it)f(is)g(hardly)h(satisfactory)m(.)239
+1156 y Fm(\017)21 b Fn(W)m(eb)13 b(do)q(es)i(not)f(pro)o(vide)g
+(conditionals.)177 1262 y(Most)19 b(of)e(these)j(ob)r(jections)f(b)q(oiled)e
+(do)o(wn)h(to)g(t)o(w)o(o)g(p)q(oin)o(ts:)27 b(that)18 b(W)m(eb)g(is)g(far)g
+(to)q(o)g(sp)q(ecialized,)i(and)e(that)177 1312 y(Kn)o(uth's)h(\\Occam's)f
+(Razor")h(had)g(cut)g(to)q(o)g(far.)33 b(What)18 b(I)h(w)o(an)o(ted)g(w)o(as)
+g(a)f(do)q(cumen)o(tation)g(system)h(that)177 1362 y(emplo)o(y)o(ed)11
+b(all)g(the)i(same)f(principles)h(as)f(W)m(eb)g(but)h(w)o(as)g(far)f(more)f
+(general.)18 b(The)13 b(result)g(w)o(as)f(F)m(unnelW)m(eb)g(V1,)177
+1412 y(whic)o(h)i(can)g(pro)q(cess)i(programs)c(in)h(an)o(y)h(language)f(or)h
+(an)o(y)f(com)o(bination)e(of)i(languages)h(at)f(the)i(cost)f(of)f(t)o(yp)q
+(e-)177 1461 y(setting)h(the)h(text)f(in)g Fi(tt)21 b(font)p
+Fn(.)177 1533 y(Originally)m(,)13 b(it)i(w)o(as)g(in)o(tended)h(that)f(F)m
+(unnelW)m(eb)f(w)o(ould)h(b)q(e)h(t)o(yp)q(esetter)h(indep)q(enden)o(t)g(as)e
+(w)o(ell)f(as)i(language)177 1583 y(indep)q(enden)o(t.)23 b(It)15
+b(w)o(as)f(in)o(tended)i(that)f(a)f(format)f(\014le)i(consisting)g(of)g(a)f
+(set)i(of)e(pro)q(ductions)i(describing)f(ho)o(w)177 1633 y(the)h(do)q(cumen)
+o(t)e(\014le)i(w)o(as)f(to)f(b)q(e)i(formatted)e(w)o(ould)g(b)q(e)i(handed)g
+(to)e(F)m(unnelW)m(eb)h(along)f(with)h(the)g(input)g(\014le.)177
+1683 y(In)k(the)g(end,)g(time)e(pressures)k(forced)e(me)f(to)g(tak)o(e)g(the)
+h(bac)o(k)g(do)q(or)f(and)g(hac)o(k)h(up)f(a)g(T)1627 1691
+y(E)1650 1683 y(X)h(do)q(cumen)o(t)f(\014le)177 1732 y(generator.)h(This)14
+b(compromise)d(has)j(found)f(its)h(w)o(a)o(y)f(in)o(to)g(F)m(unnelW)m(eb)g
+(V3.0)g(whic)o(h)g(is)h(still)e(relian)o(t)i(on)f(T)1883 1741
+y(E)1906 1732 y(X,)177 1782 y(although)f(V3.0)g(at)h(least)g(encourages)h
+(input)f(\014les)g(to)g(b)q(e)g(t)o(yp)q(esetter)i(indep)q(enden)o(t.)k(It)13
+b(is)g(hop)q(ed)g(that)g(future)177 1832 y(v)o(ersions)i(of)e(F)m(unnelW)m
+(eb)g(will)g(include)h(more)e(sophisticated)j(t)o(yp)q(esetting)g
+(facilities.)177 1990 y Fe(1.2)70 b(Inden)n(tation)177 2103
+y Fn(A)12 b(macro)f(call)h(that)g(do)q(es)h(not)f(app)q(ear)h(at)f(the)h
+(left)e(margin)g(is)h(called)g(an)f Fk(inden)o(ted)g(macro)i(call)f
+Fn(and)g(seems)177 2153 y(to)f(lead)h(to)f(three)h(di\013eren)o(t)h
+(alternativ)o(es)e(for)g(its)h(expansion:)k Fk(no)d(inden)o(tat)o(ion)o
+Fn(,)8 b Fk(blank)k(inden)o(tati)o(on)p Fn(,)c(and)177 2202
+y Fk(text)15 b(inden)o(tati)o(on)p Fn(.)g(Here)g(are)f(examples)f(of)g(eac)o
+(h)i(kind)e(of)g(inden)o(tation.)18 b(First)c(the)g(example)f(problem.)177
+2308 y Fi(@$@<Sloth@>==@{@-)177 2358 y(Aardvark)177 2408 y(Walrus@})177
+2508 y(@O@<Output@>==@{@-)177 2557 y(Zebra@<Sloth@>)177 2607
+y(Giraffe)177 2657 y(@})177 2763 y Fn(There)i(are)g(three)g(w)o(a)o(ys)e
+(that)h(the)h(second)g(line)e(of)g(the)i Fi(Sloth)e Fn(macro)f(can)i(b)q(e)h
+(inden)o(ted.)177 2835 y Fk(No)h(inden)o(tati)o(on:)1042 2940
+y Fn(12)p eop
+%%Page: 13 14
+13 13 bop 286 42 a Fi(ZebraAardvark)286 91 y(Walrus)286 141
+y(Giraffe)177 252 y Fk(Blank)15 b(inden)o(tati)o(on:)286 362
+y Fi(ZebraAardvark)395 412 y(Walrus)286 462 y(Giraffe)177 572
+y Fk(T)l(ext)h(inden)o(tati)o(on)o(:)286 683 y Fi(ZebraAardvark)286
+733 y(ZebraWalrus)286 783 y(Giraffe)177 893 y Fn(No)g(inden)o(tation)f(is)h
+(useful)g(where)i(the)e(user)h(wishes)g(to)f(deal)g(with)g(the)g(output)g
+(stream)g(as)g(a)g(pure)h(output)177 943 y(stream.)g(Blank)11
+b(inden)o(tation)g(is)g(useful)g(when)h(the)g(user)h(wishes)f(to)f(generate)h
+(inden)o(ted)g(computer)f(programs.)177 993 y(T)m(ext)k(inden)o(tation)f(is)g
+(useful)h(where)h(the)f(user)h(wishes)f(to)g(pre\014x)g(eac)o(h)h(line)e(of)g
+(an)g(en)o(tire)i(macro)d(in)o(v)o(o)q(cation)177 1043 y(with)c(a)h(string.)
+16 b(This)10 b(can)f(b)q(e)i(useful)e(for)g(commen)o(ting)e(out)j(co)q(de)g
+(\(e.g.)f(in)g(Ada)g(using)h Fi(--)p Fn(\),)f(and)h(for)f(prep)q(ending)177
+1092 y(things)14 b(lik)o(e)f(a)h(dollar)e(sign)i(at)g(the)g(start)h(of)e(eac)
+o(h)h(line)g(an)f(a)h(V)-5 b(AX)15 b(VMS)f(DCL)f(script)i(command)c(\014le.)
+177 1168 y(F)m(unnelW)m(eb)i(V1)h(pro)o(vided)g(a)f(c)o(hoice)i(of)e(no)h
+(inden)o(tation)f(or)h(blank)f(inden)o(tation.)k(The)d(c)o(hoice)h(w)o(as)f
+(made)e(in)177 1218 y(the)j(command)c(line)i(and)h(could)g(not)f(b)q(e)i(o)o
+(v)o(erridden.)177 1294 y(The)f(design)h(questions)f(are)g(as)g(follo)o(ws:)
+228 1414 y(1.)20 b(Whic)o(h)13 b(of)h(the)g(three)h(kinds)f(of)f(inden)o
+(tation)h(should)f(F)m(unnelW)m(eb)h(supp)q(ort?)228 1499 y(2.)20
+b(What)13 b(should)h(b)q(e)h(the)f(gran)o(ularit)o(y)f(of)g(sw)o(apping)g(b)q
+(et)o(w)o(een)i(inden)o(tation)f(mo)q(des?)228 1585 y(3.)20
+b(Are)15 b(particular)e(inden)o(tation)h(mo)q(des)f(dangerous?)228
+1671 y(4.)20 b(Is)14 b(the)h(presence)h(of)d(particular)h(com)o(binations)e
+(of)h(inden)o(tation)g(mo)q(des)g(confusing)h(to)g(the)g(user?)228
+1756 y(5.)20 b(Ho)o(w)13 b(and)h(when)h(should)e(the)i(c)o(hoice)f(of)f
+(inden)o(tation)h(b)q(e)g(sp)q(eci\014ed?)177 1876 y(All)j(sorts)h(of)f(sc)o
+(hemes)g(w)o(ere)i(considered,)g(including)d(a)h(\014nely)g(grained)g(system)
+h(in)e(whic)o(h)i(the)g(user)g(could)177 1926 y(sp)q(ecify)13
+b(at)g(the)g(p)q(oin)o(t)f(of)g(call)g(whic)o(h)g(inden)o(tation)g(mo)q(de)f
+(should)i(b)q(e)g(used)g(for)g(the)g(called)f(macro)f(expansion.)177
+2002 y(After)f(a)f(lot)g(of)g(though)o(t,)g(the)i(dominan)o(t)c(factor)i
+(that)h(should)f(a\013ect)h(the)g(design)g(w)o(as)f(decided)h(to)g(b)q(e)g
+(the)g Fh(clarity)177 2051 y Fn(in)k(the)g(user's)h(mind)d(of)h(the)i(inden)o
+(tation)e(facilit)o(y)f(and)i(the)g Fh(danger)h Fn(asso)q(ciated)f(with)g
+(misunderstanding)f(it.)177 2101 y(Here)f(are)f(t)o(w)o(o)f(examples)f(that)i
+(sho)o(w)f(ho)o(w)g(easily)g(a)h(confusion)f(or)g(misunderstanding)g(of)g
+(the)h(inden)o(ting)f(b)q(eing)177 2151 y(used)15 b(can)f(cause)h(danger.)j
+(The)d(\014rst)f(example)f(sho)o(ws)h(ho)o(w)g(blank)f(or)h(no)f(inden)o
+(tation)g(migh)o(t)f(b)q(e)j(misused.)177 2271 y Fi(--Misuse)20
+b(of)i(blank)e(\(and)h(no\))h(indentation.)177 2320 y(--@<Sloth@>)177
+2440 y Fn(Here)d(the)g(user)g(has)g(assumed)e(that)h(text)h(inden)o(tation)e
+(is)h(in)g(action)g(and)g(has)g(placed)g(an)g(Ada)g(commen)o(t)177
+2490 y(sym)o(b)q(ol)12 b(\\)p Fi(--)p Fn(")g(b)q(efore)i(the)g(in)o(v)o(o)q
+(cation)e(of)h(the)h(macro)e Fi(@<Sloth@>)f Fn(in)i(the)h(hop)q(e)g(that)f
+(the)h(en)o(tire)g(text)g(of)f(the)177 2539 y(macro)d(w)o(ould)h(b)q(e)g
+(pre\014xed)i(b)o(y)e(\\)p Fi(--)p Fn(".)16 b(The)c(result)g(could)f(b)q(e)h
+(passed)g(b)o(y)f(the)h(compiler)d(whic)o(h)j(w)o(ould)e(activ)n(ate)177
+2589 y(all)j(but)h(the)g(\014rst)h(statemen)o(t)f(in)f(the)i(expansion)f(of)f
+(macro)g Fi(@<Sloth@>)p Fn(.)177 2665 y(The)h(next)h(example)d(demonstrates)j
+(ho)o(w)e(text)i(inden)o(tation)e(could)h(b)q(e)g(misused.)177
+2785 y Fi(--Misuse)20 b(of)i(text)f(indentation:)177 2835 y(a++;)g(@<Sloth@>)
+1042 2940 y Fn(13)p eop
+%%Page: 14 15
+14 14 bop 177 42 a Fn(Here)15 b(the)g(user)g(has)f(placed)g(the)h(call)e(to)h
+Fi(@<Sloth@>)e Fn(after)i(the)h(incremen)o(ting)e(of)g(v)n(ariable)g
+Fi(a)p Fn(.)18 b(The)c(result)h(is)177 91 y(that)e(there)h(is)e(a)h(go)q(o)q
+(d)f(c)o(hance)i(that)e(the)i(\\)p Fi(a++;)p Fn(")d(prep)q(ended)k(to)d(eac)o
+(h)i(line)e(of)g(the)h(expansion)g(of)f Fi(@<Sloth@>)177 141
+y Fn(will)h(b)q(e)h(passed)h(b)o(y)f(the)g(compiler)f(and)g(will)g(cause)i
+Fi(a)e Fn(to)h(b)q(e)h(o)o(v)o(erincremen)o(ted.)177 216 y(These)h(examples)e
+(are)h(not)g(to)f(b)q(e)i(laughed)e(at.)20 b(It)15 b(is)g(p)q(ossible)f(that)
+h(F)m(unnelW)m(eb)f(will)g(b)q(e)h(used)h(widely)m(,)d(and)177
+266 y(the)i(problems)e(ab)q(o)o(v)o(e)h(ma)o(y)f(cause)i(problems)e(in)h
+(critical)g(systems.)20 b(The)14 b(examples)g(ab)q(o)o(v)o(e)g(are)h
+(particularly)177 316 y(scary)h(b)q(ecause)g(they)g(are)f(re\015exiv)o(e.)22
+b(One)15 b(cannot)g(simply)e(pin)h(the)i(blame)d(on)i(one)g(particular)f
+(inden)o(tation)177 366 y(form.)j(A)d(little)g(though)o(t)f(rev)o(eals)i
+(that)f(the)h(greatest)g(danger)g(lies)f(in)f Fh(c)n(onfusion)i
+Fn(in)f(the)g(user's)i(mind.)g(If)e(the)177 416 y(user)h(is)f(confused)h(b)q
+(et)o(w)o(een)g(text)f(or)g(blank)f(inden)o(ting,)g(problems)g(will)g(arise.)
+177 491 y(There)20 b(seem)e(to)h(b)q(e)g(t)o(w)o(o)f(w)o(a)o(ys)g(to)g(solv)o
+(e)h(the)g(problem.)31 b(The)19 b(\014rst)g(is)f(to)h(ban)f(all)f(macro)h
+(calls)g(that)g(are)177 541 y(preceded)f(b)o(y)e(non-blank)f(text.)23
+b(This)15 b(is)g(not)g(a)f(go)q(o)q(d)h(option)f(b)q(ecause)j(there)g(are)e
+(so)g(man)o(y)e(cases)k(where)f(it)177 591 y(is)g(desirable)g(to)f(expand)h
+(more)f(than)g(one)h(single)g(line)f(macros)g(on)g(the)h(same)f(line.)23
+b(A)16 b(second)g(option)f(is)h(to)177 640 y(eliminate)e(one)i(of)g(the)g(t)o
+(w)o(o)g(forms)e(so)i(as)g(to)g(reduce)i(the)e(p)q(oten)o(tial)g(for)f(am)o
+(biguit)o(y)e(in)j(the)g(user's)h(mind.)23 b(I)177 690 y(c)o(ho)q(ose)17
+b(the)g(latter)f(option.)24 b(Of)16 b(the)g(t)o(w)o(o)g(forms,)f(the)h(clear)
+h(c)o(hoice)f(for)g(elimination)d(is)j(text)h(inden)o(ting)e(for)177
+740 y(the)g(follo)o(wing)c(reasons:)228 858 y(1.)20 b(It)14
+b(actually)f(in)o(tro)q(duces)i(extra)f(text)h(whic)o(h)e(giv)o(es)h(it)g(an)
+f(a)h(priori)f(p)q(oten)o(tial)g(for)h(problems.)228 942 y(2.)20
+b(It)14 b(is)g(harder)g(to)g(implemen)o(t)d(and)j(w)o(ould)f(slo)o(w)g(do)o
+(wn)h(T)m(angle.)228 1026 y(3.)20 b(It)14 b(w)o(ould)f(not)h(b)q(e)g
+(compatible)e(with)i(F)m(unnelW)m(eb)f(V1)h(whic)o(h)g(uses)h(blank)e(inden)o
+(tation.)177 1144 y(The)18 b(only)f(other)h(decision)g(is)f(the)i(lev)o(el)e
+(of)g(gran)o(ularit)o(y)f(of)h(c)o(hoice)h(b)q(et)o(w)o(een)h(the)f
+(remaining)e(options:)25 b(no)177 1194 y(inden)o(tation)11
+b(and)h(blank)f(inden)o(tation.)17 b(F)m(unnelW)m(eb)11 b(V1)h(allo)o(w)o(ed)
+e(this)i(c)o(hoice)g(to)g(b)q(e)g(made)f(in)g(the)i(command)177
+1243 y(line.)27 b(In)17 b(retrosp)q(ect,)j(this)d(w)o(as)g(bad)g(design)g(b)q
+(ecause)i(the)f(user)g(migh)o(t)d(un)o(wittingly)g(co)q(de)j(certain)g(macro)
+177 1293 y(calls)12 b(relying)h(on)f(one)h(or)g(the)g(other)h(mo)q(de.)i(A)d
+(b)q(etter)h(system)f(is)f(to)h(allo)o(w)e(the)i(user)h(to)f(sp)q(ecify)g
+(whic)o(h)g(mo)q(de)177 1343 y(in)h(the)g(input)g(\014le)g(itself.)j(This)d
+(has)g(b)q(een)h(done)f(in)g(F)m(unnelW)m(eb)f(V3.)177 1418
+y(Again,)20 b(to)g(a)o(v)o(oid)f(confusion,)i(it)f(seems)g(sensible)h(to)f
+(allo)o(w)e(the)j(user)g(only)e(one)h(inden)o(tation)g(mo)q(de)f(p)q(er)177
+1468 y(F)m(unnelW)m(eb)14 b(input)h(\014le.)20 b(In)15 b(most)e(cases,)j(the)
+g(user)f(will)f(b)q(e)h(happ)o(y)f(with)h(blank)f(inden)o(tation)g(\(the)h
+(default\))177 1518 y(and)f(there)h(will)d(b)q(e)j(no)f(need)h(for)e(c)o
+(hange)h(an)o(yw)o(a)o(y)m(.)177 1593 y Fk(Decision:)j Fn(Implemen)o(t)12
+b(only)i(\\no)g(inden)o(tation")f(and)h(\\blank)g(inden)o(tation".)k(Mak)o(e)
+c(the)h(c)o(hoice)g(of)f(inden-)177 1643 y(tation)j(a)g(static)h(attribute)g
+(of)f(a)g(particular)h(F)m(unnelW)m(eb)f(run)g(that)h(is)f(sp)q(eci\014ed)i
+(in)e(the)i(input)e(\014le.)29 b(This)177 1693 y(solution)13
+b(is)h(the)h(same)e(as)h(F)m(unnelW)m(eb)f(V1)h(except)h(that)f(the)h(c)o
+(hoice)f(has)g(b)q(een)h(mo)o(v)o(ed)e(from)f(the)j(command)177
+1743 y(line)f(to)f(the)i(input)e(\014le.)177 1907 y Fe(1.3)70
+b(Review)20 b(of)k(F)-6 b(unnelW)g(eb)22 b(Syn)n(tax)177 2023
+y Fn(One)12 b(of)e(the)i(distressing)g(asp)q(ects)h(of)d(F)m(unnelW)m(eb)h
+(V1)f(w)o(as)h(its)g(clumsy)f(macro)g(de\014nition)h(and)g(calling)e(syn)o
+(tax.)177 2073 y(Compared)14 b(to)h(\(sa)o(y\))g(the)g(C)g(prepro)q(cessor,)i
+(F)m(unnelW)m(eb's)d(macro)g(call)g(syn)o(tax)h(is)g(lik)o(e)f(a)g(freigh)o
+(t)h(train)g(in)f(a)177 2123 y(c)o(hina)i(sho)o(w.)24 b(During)15
+b(the)h(F)m(unnelW)m(eb)f(redesign,)i(a)f(complete)f(review)h(of)g(this)f
+(syn)o(tax)h(to)q(ok)g(place)g(to)g(try)177 2173 y(to)f(neaten)h(it)f(up.)22
+b(Surprisingly)m(,)14 b(the)i(V1)f(syn)o(tax)g(surviv)o(ed)h(unscathed)g
+(with)f(the)h(exception)g(that)f(\\)p Fi(==)p Fn(")f(in)177
+2223 y(macro)i(de\014nitions)i(w)o(as)f(made)g(optional.)27
+b(The)18 b(surviv)n(al)f(of)g(this)g(clumsy)g(syn)o(tax)g(w)o(as)h(a)f(pro)q
+(duct)h(of)f(the)177 2272 y(design)d(goal)f(of)g(making)f(ev)o(erything)i
+(simple,)e(explicit,)h(and)g(not)h(sub)r(ject)i(to)d(subtle)i(errors.)177
+2415 y Fa(1.3.1)55 b(Review)18 b(of)g(Macro)h(De\014nition)f(Syn)n(tax)177
+2518 y Fn(F)m(unnelW)m(eb)i(V1)h(used)g(a)f(macro)g(de\014nition)g(syn)o(tax)
+h(that)f(resulted)i(in)e(macro)g(de\014nitions)g(suc)o(h)h(as)g(the)177
+2568 y(follo)o(wing.)177 2685 y Fi(@$@<Put)g(out)g(the)g(cat@>==@{@-)177
+2735 y(Open)g(the)g(door)177 2785 y(Say)g(out)177 2835 y(Close)g(the)g
+(door@})1042 2940 y Fn(14)p eop
+%%Page: 15 16
+15 15 bop 177 42 a Fn(This)16 b(is)f(messy)m(,)g(but)h(I)g(couldn't)f(think)h
+(of)f(an)o(ything)g(b)q(etter)i(at)e(the)i(time.)22 b(The)16
+b Fi(@$)f Fn(is)h(necessary)i(to)d(cue)i(a)177 91 y(de\014nition.)k(Without)
+14 b(it,)h(the)g(de\014nition)g(migh)o(t)e(someho)o(w)g(b)q(e)j(mistak)o(en)e
+(for)g(an)h(in)o(v)o(o)q(cation.)20 b(The)15 b Fi(@<)g Fn(and)177
+141 y Fi(@>)e Fn(delimit)d(the)k(name.)j(The)c Fi(@)p Fm(f)g
+Fn(and)f Fi(@)p Fm(g)h Fn(delimit)e(the)i(text.)19 b(The)13
+b Fi(@-)g Fn(is)f(a)h(pro)q(duct)h(of)e(the)i(rule)f(\\exactly)g(the)177
+191 y(text)i(b)q(et)o(w)o(een)g(the)f Fi(@)p Fm(f)g Fn(and)g
+Fi(@)p Fm(g)p Fn(".)177 260 y(The)g(only)f(real)h(target)g(is)g(the)g(\\)p
+Fi(+=)p Fn(")f(and)g(\\)p Fi(==)p Fn(")g(whic)o(h)h(really)f(break)h(all)f
+(the)h(rules)g(and)g(should)f(b)q(e)i(c)o(hanged.)177 310 y(Unfortunately)f
+(I)h(couldn't)e(think)h(of)g(an)o(ything)f(to)h(c)o(hange)h(them)e(to.)19
+b(If)14 b(there)i(w)o(as)e(no)g Fi(+=)g Fn(mec)o(hanism,)e(w)o(e)177
+360 y(could)i(use:)177 458 y Fi(@$@<Put)21 b(out)g(the)g(cat@>@{)177
+507 y(Open)g(the)g(door)177 557 y(Say)g(out)177 607 y(Close)g(the)g(door@})
+177 705 y Fn(In)14 b(fact,)f(eliminating)d Fi(+=)j Fn(is)h(think)n(able)e(b)q
+(ecause)k(it)d(do)q(es)h(not)g(app)q(ear)g(in)f(man)o(y)e(of)i(m)o(y)f
+(existing)h(F)m(unnelW)m(eb)177 754 y(source)i(\014les.)k(This)14
+b(indicates)g(at)f(least)i(that)e(it)h(w)o(as)g(not)g(needed)h(m)o(uc)o(h)e
+(b)o(y)g(m)o(yself.)177 824 y(A)h(minim)o(ali)o(st)e(construct)j(could)f(b)q
+(e)177 921 y Fi(@<Put)21 b(out)g(the)g(cat@>)177 971 y(Open)g(the)g(door)177
+1021 y(Say)g(out)177 1071 y(Close)g(the)g(door@})177 1168 y
+Fn(but)14 b(this)g(is)g(to)q(o)g(dangerous)g(for)g(m)o(y)e(tastes.)177
+1238 y Fk(Decision:)j Fn(F)m(or)c(compatibili)o(t)o(y)d(reasons,)k(retain)g
+(the)f(old)g Fi(+=)f Fn(and)h Fi(==)g Fn(constructs,)i(but)e(mak)o(e)e(them)i
+(optional.)177 1287 y(The)j(new)h(syn)o(tax)f(for)f(de\014ning)h(macros)f
+(is:)177 1385 y Fi(@$@<Put)21 b(out)g(the)g(cat@>@{)177 1435
+y(Open)g(the)g(door)177 1485 y(Say)g(out)177 1534 y(Close)g(the)g(door@})177
+1632 y Fn(Next)12 b(w)o(e)f(turn)h(to)f(parameterized)g(macro)f
+(de\014nitions.)17 b(A)11 b(con)o(v)o(en)o(tional)f(F)m(unnelW)m(eb)h
+(parameterized)g(macro)177 1682 y(de\014nition)j(lo)q(oks)f(lik)o(e)g(this:)
+177 1779 y Fi(@$@<Put)21 b(out)g(the)g(cat@>@\(@3@\)==@{@-)177
+1829 y(Open)g(the)g(door)177 1879 y(Say)g(out)177 1929 y(Close)g(the)g
+(door@})177 2026 y Fn(whic)o(h)14 b(is)g(a)f(bit)h(messy)m(.)j(The)d(natural)
+g(alternativ)o(e)f(is)h(ev)o(en)h(w)o(orse:)177 2124 y Fi(@$@<Put)21
+b(out)g(the)g(cat@>@\(@1@,@2@,@3)o(@\)==@)o({@-)177 2174 y(Open)g(the)g(door)
+177 2224 y(Say)g(out)177 2273 y(Close)g(the)g(door@})177 2371
+y Fn(Th)o(us,)12 b(just)g(sp)q(ecifying)f(the)h(n)o(um)o(b)q(er)f(of)g
+(parameters)h(seems)g(sensible.)18 b(Ho)o(w)o(ev)o(er,)12 b(p)q(erhaps)g(the)
+g(syn)o(tax)g(could)177 2421 y(b)q(e)j(trimmed)c(to)177 2518
+y Fi(@$@<Put)21 b(out)g(the)g(cat@>@3==@{@-)177 2568 y(Open)g(the)g(door)177
+2618 y(Say)g(out)177 2668 y(Close)g(the)g(door@})177 2765 y
+Fn(I)14 b(decided)h(to)f(reject)h(this)f(in)f(fa)o(v)o(our)g(of)h(the)g(old)f
+(syn)o(tax.)177 2835 y Fk(Decision:)j Fn(Retain)e(the)g(old)f(syn)o(tax)h(of)
+f Fj(:)7 b(:)g(:)o Fi(@\(@3@\))p Fj(:)g(:)g(:)1042 2940 y Fn(15)p
+eop
+%%Page: 16 17
+16 16 bop 177 42 a Fa(1.3.2)55 b(Review)18 b(of)g(Macro)h(Call)g(Syn)n(tax)
+177 147 y Fn(Here)c(are)g(some)e(ideas)h(for)f(alternativ)o(es)h(to)g(the)g
+(F)m(unnelW)m(eb)g(V1)f(macro)g(call)g(syn)o(tax.)177 270 y
+Fi(Open)21 b(the)g(door)177 320 y(@<Say)g(Out@>)195 b(@!)21
+b(FunnelWeb~V1)f(style.)177 370 y(Close)h(the)g(door)177 470
+y(Open)g(the)g(door)177 520 y(@<Say)g(out>@)177 569 y(Close)g(the)g(door)177
+669 y(Open)g(the)g(door)177 719 y(@"Say)g(out@")177 769 y(Close)g(the)g(door)
+177 868 y(Open)g(the)g(door)177 918 y(@\(Say)g(out@\))177 968
+y(Close)g(the)g(door)177 1068 y(Open)g(the)g(door)177 1117
+y(@<Say)g(out>)177 1167 y(Close)g(the)g(door)177 1291 y Fk(Decision:)29
+b Fn(Con)o(tin)o(ue)20 b(with)g(the)g(old)g(notation.)36 b(It)20
+b(ma)o(y)e(not)i(b)q(e)h(neat,)h(but)e(at)g(least)h(it)e(is)h(clear)h(and)177
+1340 y(consisten)o(t.)j(The)16 b(main)d(temptation)h(is)h(the)h(format)e
+Fi(@<say)21 b(out>@)14 b Fn(whic)o(h)h(lo)q(oks)g(rather)i(go)q(o)q(d.)22
+b(Ho)o(w)o(ev)o(er,)177 1390 y(it)14 b(breaks)g(the)h(sp)q(ecial)f(sequence)i
+(rational)d(and)g(hence)j(is)d(to)q(o)h(confusing.)177 1540
+y Fa(1.3.3)55 b(Review)18 b(of)g(P)n(arameterized)f(Macro)i(Call)f(Syn)n(tax)
+177 1646 y Fn(F)m(unnelW)m(eb)c(V1)f(pro)o(vided)h(a)g(messy)f(parameterized)
+h(macro)f(call)g(syn)o(tax:)177 1769 y Fi(@<Say)21 b(Out@>@\(@"firstpar)o
+(am@")d(@,)k(@"Secondparam@")c(@,)k(@"thirdparam@")d(@\))177
+1893 y Fn(This)d(syn)o(tax)g(can)g(b)q(e)g(cleaned)h(up)f(considerably)g(b)o
+(y)g(making)d(the)k Fi(@")e Fn(sym)o(b)q(ols)g(optional.)22
+b(This)16 b(results)h(in)177 1942 y(calls)d(suc)o(h)g(as)g(the)h(follo)o
+(wing:)177 2066 y Fi(@<Say)21 b(Out@>@\(firstparam)o(@,Sec)o(ondpa)o(ram@,)o
+(thir)o(dpara)o(m@\))177 2189 y Fn(As)c(the)g(\014rst)g(form)e(allo)o(ws)g
+(the)i(alignmen)o(t)d(of)h(complicated)h(parameters)g(b)o(y)g(allo)o(wing)e
+(white)j(space)g(to)f(b)q(e)177 2239 y(inserted)h(outside)f(the)g
+Fi(@")p Fn(,)f(and)h(the)g(second)h(form)d(is)h(cleaner,)i(b)q(oth)f(are)g
+(retained)g(simply)e(b)o(y)h(making)e(the)177 2289 y(quotes)i(optional.)177
+2366 y Fk(Decision:)h Fn(Mak)o(e)e(the)h(double)e(quotes)i(optional.)177
+2538 y Fe(1.4)70 b(Do)r(cumen)n(t)21 b(Structuring)177 2657
+y Fn(Exp)q(erience)e(with)e(F)m(unnelW)m(eb)f(V1,)h(whic)o(h)g(pro)o(vided)g
+(only)f(t)o(w)o(o)h(lev)o(els)g(of)f(headings)h(\(ma)r(jor)f(and)g(minor\))
+177 2707 y(pro)o(v)o(ed)10 b(that)h(there)g(w)o(as)f(a)g(strong)g(need)h(for)
+f(fully)f(hierarc)o(hical)h(m)o(ultiple-lev)o(el)d(headings.)17
+b(The)10 b(only)g(question)177 2757 y(w)o(as)k(ho)o(w)f(it)h(should)g(b)q(e)g
+(done.)177 2835 y(Here)h(are)g(some)e(ideas)h(that)g(w)o(ere)g(considered.)
+1042 2940 y(16)p eop
+%%Page: 17 18
+17 17 bop 177 42 a Fi(@*@<Main)20 b(Program@>)177 91 y(@**@<Read)g(the)h
+(Message@>)177 141 y(@***@<Encrypt)e(the)i(Buffer@>)177 241
+y(@*@<Main)f(Program@>)177 291 y(@*@*@<Read)g(the)h(Message@>)177
+340 y(@*@*@*@<Encrypt)e(the)i(Buffer@>)177 440 y(@s@<Main)f(Program@>)177
+490 y(@ss@<Read)g(the)h(Message@>)177 540 y(@sss@<Encrypt)e(the)i(Buffer@>)
+177 639 y(@s@<Main)f(Program@>)177 689 y(@s@s@<Read)g(the)h(Message@>)177
+739 y(@s@s@s@<Encrypt)e(the)i(Buffer@>)177 839 y(@S@<Main)f(Program@>)177
+888 y(@SS@<Read)g(the)h(Message@>)177 938 y(@SSS@<Encrypt)e(the)i(Buffer@>)
+177 1038 y(@S@<Main)f(Program@>)177 1088 y(@S@S@<Read)g(the)h(Message@>)177
+1137 y(@S@S@S@<Encrypt)e(the)i(Buffer@>)177 1237 y(@A@<Main)f(Program@>)238
+b(--)22 b(The)f(syntax)f(finally)h(chosen.)177 1287 y(@B@<Read)f(the)h
+(Message@>)177 1337 y(@C@<Encrypt)f(the)h(Buffer@>)177 1436
+y(@A)h(Main)f(Program)177 1486 y(@B)h(Read)f(the)g(Message)177
+1536 y(@C)h(Encrypt)e(the)h(Buffer)177 1636 y(@*A)g(Main)g(Program)177
+1685 y(@*B)g(Read)g(the)g(Message)177 1735 y(@*C)g(Encrypt)g(the)g(Buffer)177
+1835 y(@1@<Main)f(Program@>)177 1885 y(@2@<Read)g(the)h(Message@>)177
+1934 y(@3@<Encrypt)f(the)h(Buffer@>)177 1984 y(\(using)g(@A..@I@)f(as)h
+(macro)g(parameters)f(or)h(overload)f(@1..@9\))177 2084 y(@*@1@<Main)g
+(Program@>)177 2134 y(@*@2@<Read)g(the)h(Message@>)177 2183
+y(@*@3@<Encrypt)e(the)i(Buffer@>)177 2233 y(\(using)g(@A..@I@)f(as)h(macro)g
+(parameters)f(or)h(overload)f(@1..@9\))177 2351 y Fn(Cho)q(osing)f(b)q(et)o
+(w)o(een)i(these)g(alternativ)o(es)e(w)o(as)h(not)f(easy)m(.)35
+b(The)20 b(follo)o(wing)d(though)o(ts)j(con)o(tributed)g(to)f(the)177
+2400 y(decision.)239 2518 y Fm(\017)i Fn(Syn)o(taxes)14 b(that)g(require)h
+(visual)e(coun)o(ting)g(are)i(probably)e(not)h(a)f(go)q(o)q(d)h(idea.)239
+2601 y Fm(\017)21 b Fn(Syn)o(taxes)14 b(that)f(do)g(not)h(delimit)d(the)j
+(heading)f(name)f(someho)o(w)h(are)g(lik)o(ely)f(to)i(cause)g(problems)f
+(where)281 2651 y(heading)18 b(names)f(are)h(omitted.)30 b(Users)19
+b(will)e(b)q(e)i(tempted)f(to)g(start)g(paragraphs)h(after)f(the)h(start)f
+(of)281 2701 y(heading)c(sym)o(b)q(ol)f(and)h(the)h(result)g(is)f(that)h(the)
+g(\014rst)g(line)f(of)g(the)h(paragraph)f(will)f(b)q(e)i(suc)o(k)o(ed)g(in)o
+(to)f(the)281 2751 y(heading.)239 2835 y Fm(\017)21 b Fn(Ov)o(erloading)13
+b(the)h Fi(@1)p Fn(,)f Fj(:)7 b(:)g(:)o Fn(,)13 b Fi(@9)h Fn(sequences)i(is)e
+(undesirable.)1042 2940 y(17)p eop
+%%Page: 18 19
+18 18 bop 177 42 a Fk(Decision:)21 b Fn(Use)c Fi(@A)p Fj(:)7
+b(:)g(:)n Fi(@E)16 b Fn(with)g(optional)f(follo)o(wing)e(macro)i(name)g(syn)o
+(tax)h(for)g(the)h(section)g(name.)24 b(Note:)177 91 y(W)m(e)15
+b(stop)g(at)g Fi(@E)f Fn(b)q(ecause)j(\014v)o(e)e(lev)o(els)g(is)g(probably)f
+(su\016cien)o(t,)i(and)e(w)o(e)i(ma)o(y)d(wish)h(later)i(to)e(use)i
+Fi(@F)f Fn(for)f Fk(F)p Fn(ile)177 141 y(\(to)g(augmen)o(t)f(or)g(replace)i
+Fi(@O)p Fn(\).)177 321 y Fe(1.5)70 b(Discussion)21 b(of)j(Some)e(Miscell)o
+(aneous)f(Issues)177 445 y Fk(Commen)o(t)d(duplication)o(:)k
+Fn(If)17 b(the)h(F)m(unnelW)m(eb)f(user)h(inserts)g(commen)o(ts)d(in)o(to)i
+(the)h(target)f(co)q(de)h(\(in)f(the)177 495 y Fi(.fw)12 b
+Fn(\014le\))g(as)g(w)o(ell)f(as)h(in)o(to)g(the)g(do)q(cumen)o(tation)f
+(\(free)i(text\))g(part)f(of)g(the)g Fi(.fw)g Fn(\014le,)g(then)h(it)e(is)h
+(p)q(ossible)g(for)g(the)177 544 y(situation)h(to)h(get)g(a)g(bit)f(silly)m
+(.)k Fk(Decision:)f Fn(This)e(is)g(a)f(problem)g(for)g(the)i(programmer,)c
+(not)j(for)f(F)m(unnelW)m(eb.)177 625 y Fk(Out-of-date)k(do)q(cumen)o(tation)
+o(:)22 b Fn(Sometimes)14 b(it)j(is)f(all)g(to)q(o)h(easy)g(for)f(the)i
+(programmer)c(to)j(mo)q(dify)d(the)177 674 y(co)q(de)k(without)e(up)q(dating)
+g(the)h(surrounding)g(do)q(cumen)o(tation.)24 b Fk(Decision:)e
+Fn(This)16 b(is)h(a)f(serious)h(and)f(ma)r(jor)177 724 y(problem.)27
+b(In)17 b(an)g(automated)f(en)o(vironmen)o(t,)g(it)h(ma)o(y)e(b)q(e)j(p)q
+(ossible)f(to)g(create)i(a)e(system)g(of)f(dep)q(endencies)177
+774 y(b)q(et)o(w)o(een)h(scraps)g(of)d(co)q(de)i(and)g(scraps)g(of)f(do)q
+(cumen)o(tation.)21 b(Ho)o(w)o(ev)o(er,)16 b(it)f(is)g(hard)h(to)f(see)h(ho)o
+(w)f(a)g(to)q(ol)g(suc)o(h)177 824 y(as)f(F)m(unnelW)m(eb)f(could)h(pro)o
+(vide)g(supp)q(ort)h(for)e(prev)o(en)o(tion)h(of)g(this)g(sort)g(of)f(error.)
+177 904 y Fk(Meta-macro-lev)o(el)j(parameterization:)k Fn(Sometimes,)14
+b(when)j(using)f(F)m(unnelW)m(eb,)g(the)g(facilit)o(y)f(to)h(use)177
+954 y(one)11 b(macro)f(to)h(construct)i(the)e(name)f(of)h(another)g(has)g(b)q
+(een)h(needed.)19 b Fk(Decision:)c Fn(Allo)o(wing)9 b(macro)h(names)g(to)177
+1004 y(b)q(e)k(constructed)h(w)o(ould)e(lose)g(the)h(simple)d(nature)j(of)f
+(the)h(prepro)q(cessor)h(and)e(so)h(this)f(suggestion)g(is)g(rejected.)177
+1084 y Fk(Clumsy)j(notation:)h Fn(The)e Fi(@)f Fn(notation)f(can)i(b)q(e)g
+(clumsy)m(.)j Fk(Decision:)f Fn(This)e(is)f(necessary)i(to)f(main)o(tain)c
+(the)177 1134 y(simplicit)o(y)h(of)h(the)h(translation.)177
+1314 y Fe(1.6)70 b(Automated)22 b(Regression)g(T)-6 b(esting)177
+1438 y Fn(Automated)13 b(regression)i(testing)f(is)g(extremely)g(imp)q(ortan)
+o(t)e(for)h(t)o(w)o(o)h(reasons:)228 1568 y(1.)20 b(It)14 b(pro)o(vides)g
+(con\014dence)i(that)e(c)o(hanges)g(made)f(to)h(the)g(program)e(ha)o(v)o(e)i
+(not)g(in)o(tro)q(duced)h(bugs.)228 1662 y(2.)20 b(It)11 b(allo)o(ws)e(p)q
+(ortabilit)o(y)g(problems)h(to)g(b)q(e)i(pinp)q(oin)o(ted)e(when)h(the)g
+(program)e(is)i(mo)o(v)o(ed)e(to)h(a)g(new)i(mac)o(hine.)177
+1792 y(The)j(simplest)e(w)o(a)o(y)g(to)h(set)h(up)g(automated)d(regression)k
+(testing)e(is)g(to)g(construct)i(a)e(suite)h(of)e(test)i(cases)h(\(and)177
+1842 y(their)e(solutions\))e(and)h(then)h(write)f(a)g(script)g(in)g(the)g
+(target)h(mac)o(hine's)d(command)g(language)h(to)g(run)i(through)177
+1892 y(the)k(suite.)29 b(Unfortunately)m(,)17 b(there)i(is)e(no)g(command)d
+(language)j(that)g(is)g(shared)h(among)e(the)i(mac)o(hines)e(to)177
+1941 y(whic)o(h)f(F)m(unnelW)m(eb)f(m)o(ust)g(b)q(e)h(p)q(orted.)22
+b(These)16 b(mac)o(hines)e(are)i(at)e(least:)20 b(Macin)o(tosh,)15
+b(IBM-PC,)g(Sun,)g(VMS)177 1991 y(V)m(ax.)177 2072 y(One)h(option)e(is)h
+(simply)e(to)i(rewrite)h(the)g(script)g(in)e(eac)o(h)i(mac)o(hine's)d
+(particular)i(command)d(language.)21 b(This)177 2121 y(w)o(ould)15
+b(b)q(e)i(a)e(feasible)h(option)f(w)o(ere)i(it)e(not)h(for)f(the)i(fact)f
+(that)g(the)g(Macin)o(tosh)g(\(the)g(mac)o(hine)f(up)q(on)h(whic)o(h)177
+2171 y(F)m(unnelW)m(eb)e(w)o(as)f(dev)o(elop)q(ed\))i(do)q(es)g(not)e(ha)o(v)
+o(e)h(a)g(command)d(language!)177 2252 y(After)i(some)f(though)o(t,)g(I)g
+(decided)i(that)e(the)h(b)q(est)h(solution)e(to)g(the)h(problem)e(w)o(as)i
+(to)f(create)i(a)e(command)e(lan-)177 2301 y(guage)i Fh(within)h(F)m
+(unnelWeb)p Fn(.)18 b(F)m(unnelW)m(eb)12 b(could)g(then)h(b)q(e)f(in)o(v)o
+(ok)o(ed)g(in)f(t)o(w)o(o)h(mo)q(des,)f(one-shot)i(command)c(line)177
+2351 y(or)15 b(in)o(teractiv)o(e/script.)20 b(This)15 b(approac)o(h)f(had)g
+(the)h(b)q(ene\014t)h(of)e(pro)o(viding)f(total)h(con)o(trol)g(o)o(v)o(er)g
+(the)i(command)177 2401 y(language)d(and)h(its)g(complete)f(p)q(ortabilit)o
+(y)m(.)177 2481 y(The)h(result)h(is)f(describ)q(ed)i(in)d(the)h
+Fh(F)m(unnelWeb)j(User's)d(Manual)p Fn(.)177 2661 y Fe(1.7)70
+b(Command)22 b(Line)g(In)n(terface)177 2785 y Fn(F)m(unnelW)m(eb)12
+b(V1)g(w)o(as)g(implemen)o(ted)e(in)i(Ada)g(and)g(runs)h(on)f(a)g(VMS)g(V)-5
+b(AX.)13 b(As)g(suc)o(h)g(it)e(has)i(a)f(full)f(VMS)h(DCL)177
+2835 y(command)f(line)j(in)o(terface.)k(Here)d(is)f(the)h(\\)p
+Fi(.CLD)p Fn(")d(\014le)i(for)g(the)g(DCL)g(command)d(line)i(in)o(terface.)
+1042 2940 y(18)p eop
+%%Page: 19 20
+19 19 bop 177 42 a Fi(!)22 b(FUNNELWEB)e(Command)g(Definition)177
+91 y(!)i(================)o(=====)o(=====)o(==)177 141 y(!)g(Ross)f
+(Williams.)f(28)h(April)g(1987.)177 241 y(module)g(command_table)243
+291 y(define)f(verb)h(dummy_command)243 340 y(parameter)e(p1)240
+b(,)21 b(label=input_file)62 b(,value\(required,type)o(=$fi)o(le\))243
+390 y(qualifier)19 b(include_files,)g(label=include_files)o(,valu)o(e\(typ)o
+(e=$fi)o(le\))g(,default)243 440 y(qualifier)g(output_files)h(,)h
+(label=output_files)d(,value\(type=$file\))h(,default)243 490
+y(qualifier)g(delete)152 b(,)21 b(label=delete)565 b(,default)243
+540 y(qualifier)19 b(tex_file)108 b(,)21 b(label=tex_file)106
+b(,value\(type=$file\))19 b(,default)243 589 y(qualifier)g(listing_file)h(,)h
+(label=listing_file)d(,value\(type=$file\))h(,default)243 639
+y(qualifier)g(brief)174 b(,)21 b(label=brief,value\(t)o(ype=$)o(numbe)o
+(r,def)o(ault=)o(5\),d)o(efaul)o(t)243 689 y(qualifier)e(screen)152
+b(,)21 b(label=screen)150 b(,value\(type=$number,)o(defa)o(ult=0)o(\))243
+739 y(qualifier)19 b(trace)174 b(,)21 b(label=trace)243 789
+y(qualifier)e(file_spec)86 b(,)21 b(label=file_spec)243 839
+y(qualifier)e(compare)177 981 y Fn(As)d(p)q(ortabilit)o(y)f(w)o(as)g(a)h(k)o
+(ey)g(goal)e(of)h(F)m(unnelW)m(eb)g(V3,)h(it)f(w)o(as)h(ob)o(vious)f(that)h
+(the)g(command)d(line)i(in)o(terface)177 1031 y(w)o(ould)e(ha)o(v)o(e)h(to)g
+(b)q(e)g(redesigned.)20 b(The)14 b(design)g(goals)f(for)h(the)g(new)g
+(command)d(line)j(in)o(terface)g(w)o(ere:)228 1174 y(1.)20
+b(The)15 b(in)o(terface)g(should)f(not)g Fh(dep)n(end)i Fn(on)e(case.)21
+b(Ho)o(w)o(ev)o(er,)14 b(it)g(m)o(ust)g(allo)o(w)e(case-sensitiv)o(e)k
+(\014lenames)e(to)281 1224 y(b)q(e)g(transmitted)g(on)f(systems)i(that)e(ha)o
+(v)o(e)h(case-sensitiv)o(e)i(\014lenames.)228 1328 y(2.)k(Eac)o(h)13
+b(option)f(m)o(ust)g(ha)o(v)o(e)h(a)f(symmetric)f(p)q(ositiv)o(e)i(and)g
+(negativ)o(e)f(form.)k(F)m(or)d(example,)e(it)h(is)h(confusing)281
+1378 y(for)g Fi(-X)h Fn(to)g(turn)g(on)g(a)f(feature)i(and)f
+Fi(-Q)f Fn(to)h(turn)g(it)g(o\013.)228 1482 y(3.)20 b(The)14
+b(in)o(terface)h(m)o(ust)e(b)q(e)h(extensible)h(to)f(allo)o(w)e(inclusion)h
+(of)g(more)g(features)i(at)f(a)g(later)g(date.)228 1586 y(4.)20
+b(Options)14 b(should)g(b)q(e)g(consisten)o(t)h(and)f(memorable.)177
+1729 y(The)g(result)h(is)f(describ)q(ed)i(in)d(the)h Fh(F)m(unnelWeb)j
+(User's)d(Manual)p Fn(.)177 1925 y Fe(1.8)70 b(File)21 b(Name)h(Managemen)n
+(t)177 2056 y Fn(File)e(names)f(presen)o(t)j(a)e(host)g(of)g(problems)f(for)h
+(a)f(program)g(lik)o(e)g(F)m(unnelW)m(eb.)36 b(First,)22 b(F)m(unnelW)m(eb)e
+(can)177 2106 y(generate)c(so)f(man)o(y)e(di\013eren)o(t)j(kinds)f(of)f
+(\014les)h(that)g(con)o(v)o(en)o(tions)g(m)o(ust)f(b)q(e)i(adopted)f(to)g
+(prev)o(en)o(t)g(them)g(from)177 2156 y(b)q(ecoming)9 b(unmanageable.)15
+b(Second,)c(the)f(constrain)o(ts)g(on)g(\014le)g(names,)f(and)h(ev)o(en)g
+(the)h(structure)h(of)d(\014le)h(names)177 2205 y(themselv)o(es)16
+b(v)n(aries)f(considerably)h(from)e(mac)o(hine)g(to)h(mac)o(hine.)22
+b(These)17 b(t)o(w)o(o)e(problems)f(ha)o(v)o(e)i(com)o(bined)e(to)177
+2255 y(result)g(in)e(the)i(sophisticated)g(and)e(rather)i(complicated)e(w)o
+(a)o(y)g(in)h(whic)o(h)g(F)m(unnelW)m(eb)f(V3)h(handles)g(\014lenames.)177
+2340 y(T)m(o)g(summarize,)f(the)i(three)h(problems)e(are:)228
+2483 y(1.)20 b(What)13 b(\014lename)g(extensions)i(should)f(b)q(e)g(c)o
+(hosen)h(for)f(v)n(arious)f(kinds)h(of)f(\014le?)228 2588 y(2.)20
+b(What)13 b(\014lename)g(inheritance)i(should)e(tak)o(e)h(place?)228
+2692 y(3.)20 b(Ho)o(w)13 b(should)h(F)m(unnelW)m(eb)g(cop)q(e)g(with)g(the)g
+(v)n(ariations)f(in)g(\014lename)g(structure)j(b)q(et)o(w)o(een)f(mac)o
+(hines?)177 2835 y(The)f(follo)o(wing)e(three)j(sections)g(address)g(these)g
+(questions.)1042 2940 y(19)p eop
+%%Page: 20 21
+20 20 bop 177 42 a Fa(1.8.1)55 b(Filename)17 b(Extensions)177
+147 y Fn(F)m(unnelW)m(eb)11 b(is)h(capable)f(of)g(reading)h(and)f(writing)g
+(a)g(v)n(ariet)o(y)g(of)g(di\013eren)o(t)i(kinds)f(of)f(\014les.)17
+b(In)12 b(particular,)f(F)m(un-)177 197 y(nelW)m(eb)g(m)o(ust)f(often)h(op)q
+(erates)h(in)f(an)g(en)o(vironmen)o(t)f(where)i(the)f(same)f(information)f
+(is)h(stored)i(in)f(man)o(y)e(forms)177 247 y(\(e.g.)16 b(prog.fw,)f(prog.c,)
+i(pro)q(c.exe\).)26 b(File)16 b(extensions)i(are)e(an)h(essen)o(tial)f(to)q
+(ol)g(in)g(managing)e(this)i(situation.)177 297 y(The)e(\014lename)f
+(extensions)i(c)o(hosen)g(for)f(F)m(unnelW)m(eb)f(are:)177
+421 y Fi(FunnelWeb)107 b(:)22 b(.fw)177 471 y(Product)151 b(:)22
+b(None.)177 521 y(Documentation)d(:)j(.tex)177 570 y(Listing)151
+b(:)22 b(.lis)177 620 y(Journal)151 b(:)22 b(.jrn)177 744 y
+Fn(Lo)o(w)o(ercase)15 b(will)e(b)q(e)h(used)h(in)e(systems)h(that)g(are)h
+(case)f(sensitiv)o(e.)177 822 y(Readers)g(who)f(are)h(w)o(ondering)e(ho)o(w)h
+(F)m(unnelW)m(eb)g(cop)q(es)h(in)f(en)o(vironmen)o(ts)f(suc)o(h)i(as)f(UNIX)h
+(where)g(there)g(are)177 872 y(no)g(\014le)g(extensions)h(should)e(refer)i
+(to)f(Section)g(1.8.3.)177 1023 y Fa(1.8.2)55 b(Filename)17
+b(Inheritance)177 1129 y Fn(Inheritance)d(in)d(\014lenames)h(refers)i(to)e
+(ho)o(w)g(input)g(and)g(output)g(\014les)h(inherit)f(parts)h(of)f(their)h
+(name)e(from)f(other)177 1178 y(\014lenames)j(and)h(their)g(en)o(vironmen)o
+(t.)j(F)m(or)d(example)e(if)h(the)i(command)243 1302 y Fi(fw)21
+b(sloth)g(+J)g(+L)g(+T)177 1426 y Fn(w)o(as)d(issued,)i(y)o(ou)e(w)o(ould)f
+(exp)q(ect)j(to)e(see)h(output)g(\014les)f Fi(sloth.jrn)p Fn(,)f
+Fi(sloth.lis)p Fn(,)g(and)h Fi(sloth.tex)p Fn(.)29 b(The)177
+1476 y(output)14 b(\014le)h(names)e(ha)o(v)o(e)h(inherited)g(the)h(\\)p
+Fi(sloth)p Fn(".)i(The)e(follo)o(wing)c(table)j(giv)o(es)g(the)h(hierarc)o(h)
+o(y)f(devised)h(for)177 1526 y(F)m(unnelW)m(eb.)p 366 1606
+1394 2 v 365 1656 2 50 v 436 1656 V 462 1641 a(Script)p 615
+1656 V 70 w(Input)p 778 1656 V 64 w(Include)p 961 1656 V 50
+w(Journal)p 1147 1656 V 50 w(List)p 1326 1656 V 108 w(Do)q(cumen)o(t)p
+1562 1656 V 49 w(Pro)q(duct)p 1759 1656 V 366 1658 1394 2 v
+365 1707 2 50 v 391 1692 a(1)p 436 1707 V 615 1707 V 778 1707
+V 392 w Fi(@i)p 961 1707 V 1147 1707 V 1326 1707 V 1562 1707
+V 739 w(@o)p 1759 1707 V 365 1757 V 391 1742 a Fn(2)p 436 1757
+V 50 w Fi(+x)p 615 1757 V 134 w(+f)p 778 1757 V 120 w(+i)p
+961 1757 V 138 w(+j)p 1147 1757 V 143 w(+l)p 1326 1757 V 134
+w(+t)p 1562 1757 V 192 w(+o)p 1759 1757 V 365 1807 V 391 1792
+a Fn(3)p 436 1807 V 50 w(\\)p Fi(.fws)p Fn(")p 615 1807 V 48
+w(\\)p Fi(.fw)p Fn(")p 778 1807 V 56 w(\\)p Fi(.fwi)p Fn(")p
+961 1807 V 52 w(\\)p Fi(.jrn)p Fn(")p 1147 1807 V 57 w(\\)p
+Fi(.lis)p Fn(")p 1326 1807 V 48 w(\\)p Fi(.tex)p Fn(")p 1562
+1807 V 1759 1807 V 365 1857 V 391 1842 a(4)p 436 1857 V 615
+1857 V 778 1857 V 392 w Fi(+f)p 961 1857 V 138 w(+f)p 1147
+1857 V 143 w(+f)p 1326 1857 V 134 w(+f)p 1562 1857 V 1759 1857
+V 365 1907 V 391 1892 a Fn(5)p 436 1907 V 50 w(DefDir)p 615
+1907 V 55 w(Defdir)p 778 1907 V 50 w(Defdir)p 961 1907 V 68
+w(Defdir)p 1147 1907 V 73 w(Defdir)p 1326 1907 V 64 w(Defdir)p
+1562 1907 V 122 w(Defdir)p 1759 1907 V 366 1908 1394 2 v 177
+2015 a(The)f(follo)o(wing)e(notes)i(explain)g(the)g(table.)228
+2139 y(1.)20 b(This)14 b(sc)o(heme)g(is)g(similar)d(to)j(that)g(used)g(in)g
+(F)m(unnelW)m(eb)f(V1.)228 2229 y(2.)20 b(The)14 b(journal,)f(list,)f(and)i
+(do)q(cumen)o(tation)e(\014les)j(all)d(fall)g(in)i(the)g(same)f(pattern)h
+(and)g(can)g(b)q(e)g(considered)281 2278 y(as)g(a)g(single)f(case.)228
+2368 y(3.)20 b(Lev)o(el)15 b(1)h(has)f(the)h(highest)g(priorit)o(y)e(b)q
+(ecause)k(it)d(is)g(a)g(direct)h(sp)q(eci\014cation)g(b)o(y)g(the)g(user)g
+(in)f(the)h(input)281 2418 y(\014le.)228 2507 y(4.)k(Lev)o(el)14
+b(2)f(comes)h(next)g(b)q(ecause)h(this)f(is)g(also)f(a)g(direct)i(sp)q
+(eci\014cation)f(from)e(the)j(user)g(on)e(the)i(command)281
+2557 y(line.)228 2646 y(5.)20 b(Lev)o(el)13 b(3)f(pro)o(vides)h(the)h
+(default)e(\014le)h(extensions.)19 b(Pro)q(duct)14 b(\014les)f(do)g(not)f
+(inherit)h(an)g(extension)g(as)g(they)281 2696 y(could)h(b)q(e)g(of)f(an)o(y)
+h(t)o(yp)q(e.)228 2785 y(6.)20 b(Lev)o(el)12 b(5)h(is)f(built)g(in)o(to)f
+(most)h(op)q(erating)g(systems')g(\014le)h(sp)q(eci\014cation)g(systems.)k
+(If)c(I)f(sp)q(ecify)h(\014le)f(\\)p Fi(x.y)p Fn(",)281 2835
+y(it)h(is)h(tak)o(en)g(to)g(mean)f(on)g(the)i(default)e(disk)h(in)f(the)i
+(default)e(directory)m(.)1042 2940 y(20)p eop
+%%Page: 21 22
+21 21 bop 228 42 a Fn(7.)20 b(Lev)o(el)15 b(4)g(lo)q(oks)g(straigh)o(tforw)o
+(ard,)f(but)i(secretly)h(conceals)f(a)f(di\016cult)f(design)i(decision.)22
+b(By)15 b(the)h(time)281 91 y(w)o(e)j(get)g(do)o(wn)f(to)g(this)h(lev)o(el)f
+(of)g(inheritance,)i(w)o(e)e(kno)o(w)h(for)f(sure)h(that)g(the)g(\014lename)e
+(has)i(already)281 141 y(pic)o(k)o(ed)c(up)g(a)f(\014le)h(extension.)21
+b(So)15 b(all)e(that)i(is)g(left)f(to)h(inherit)g(is)g(the)g(path)g(and)f
+(the)i(\014lename)d(prop)q(er.)281 191 y(Ob)o(viously)g(w)o(e)h(ha)o(v)o(e)g
+(to)g(inherit)g(the)h(\014lename)e(prop)q(er)i(\(e.g.)j Fi(sloth)13
+b Fn(in)h Fi(sloth.tex)p Fn(\),)d(but)k(should)f(w)o(e)281
+241 y(inherit)j(the)g(input)g(\014le)g(path?)26 b(If)17 b(w)o(e)g(do)f
+(inherit)h(the)g(input)g(\014le)g(path,)g(\014les)g(will)e(b)q(e)j(placed)f
+(in)f(the)281 291 y(same)f(directory)h(as)g(the)g(input)g(\014le.)23
+b(If)16 b(w)o(e)g(don't)f(inherit)h(the)g(input)f(\014le)h(path,)g(\014les)g
+(will)e(b)q(e)j(placed)281 340 y(in)c(the)h(curren)o(t)h(directory)m(.)j(The)
+c(c)o(hoice)g(I)f(ha)o(v)o(e)h(made)e(is)h(to)g(send)i(all)d(the)i(logging)e
+(t)o(yp)q(e)i(\014les)f(in)o(to)g(the)281 390 y(same)h(directory)j(as)e(the)h
+(input)f(\014le.)23 b(This)15 b(means,)g(for)g(example,)f(that)h
+Fi(sloth.lis)e Fn(and)j Fi(sloth.tex)281 440 y Fn(will)c(generally)i(land)f
+(in)g(the)i(same)e(directory)h(as)g Fi(sloth.fw)p Fn(.)j(Ho)o(w)o(ev)o(er,)c
+(I)h(ha)o(v)o(e)g(decided)h(that)f(output)281 490 y(\014les)e(should)f(b)q(e)
+h(sen)o(t)g(to)f(the)h(default)f(directory)h(\(if)f(not)g(earlier)h(sp)q
+(eci\014ed\))h(as)e(this)g(is)h(where)g(the)g(action)281 540
+y(is.)19 b(In)c(normal)d(use,)j(the)g(main)d(pro)q(duct)j(of)f(F)m(unnelW)m
+(eb)g(will)e(b)q(e)j(pro)q(duct)h(\014les)e(and)g(so)h(the)g(user)g(will)281
+589 y(exp)q(ect)g(them)e(to)h(app)q(ear)h(in)e(the)h(curren)o(t)i(directory)e
+(b)o(y)g(default.)177 757 y Fa(1.8.3)55 b(P)n(ortable)19 b(Structure)f(of)h
+(File)e(Names)177 871 y Fn(Another)g(problem)e(with)g(\014le)h(names)f(is)h
+(the)h(v)n(ariation)d(of)h(their)i(structure)h(b)q(et)o(w)o(een)f(en)o
+(vironmen)o(ts.)24 b(Here)177 921 y(are)14 b(examples)f(of)h(some)f(of)g(the)
+h(formats)f(that)h(prev)n(ail:)243 1059 y Fi(UNIX)64 b(/device/dir1/dir2/)o
+(name)243 1108 y(VMS)86 b(node::device:[dir1)o(.dir2)o(]name)o(.ext)o(;vn)243
+1158 y(MSDOS)42 b(device:\\dir1\\dir2\\)o(name.)o(ext)243 1208
+y(MAC)86 b(device:dir1:dir2:n)o(ame)177 1345 y Fn(Isn't)14
+b(it)g(amazing)d(that)j(none)g(of)g(these)h(p)q(opular)f(systems)g(use)g(the)
+h(same)e(format?)177 1429 y(The)j(solution)f(to)g(dealing)g(with)g(these)i
+(di\013eren)o(t)f(formats)e(is)h(to)h(classify)f(them)g(as)g(non-p)q(ortable)
+g(and)h(hide)177 1479 y(the)g(functions)f(that)g(manipulate)e(them)h(in)g
+(the)i(mac)o(hine-sp)q(eci\014c)f(mo)q(dule)e(of)i(F)m(unnelW)m(eb.)20
+b(Luc)o(kily)14 b(there)177 1528 y(are)g(not)g(man)o(y)e(suc)o(h)j
+(functions.)177 1612 y(The)g(main)c(problem)i(is)h(coping)f(with)h(\014le)g
+(systems)g(that)g(do)g(not)g(explicitly)e(supp)q(ort)j(\014le)f(extensions.)
+19 b(With)177 1661 y(so)14 b(man)o(y)e(p)q(ossible)i(input)f(and)g(output)h
+(\014les,)g(F)m(unnelW)m(eb)f(all)f(but)i(needs)h(suc)o(h)g(extensions.)k
+(Mac)o(hines)14 b(that)177 1711 y(do)h(not)g(supp)q(ort)h(them)e(p)q(ose)h
+(di\016cult)g(design)g(decisions.)22 b(If)14 b(the)i(user)g(sp)q(eci\014es)h
+(\\)p Fi(sloth)p Fn(")c(as)i(an)g(input)g(\014le)177 1761 y(on)d(suc)o(h)g(a)
+g(non-extension-supp)q(orting)g(system,)g(should)g(F)m(unnelW)m(eb)f(lo)q(ok)
+g(for)g Fi(sloth)g Fn(or)h Fi(sloth.fw)p Fn(?)k(If)11 b(the)177
+1811 y(user)k(sp)q(eci\014es)h Fi(walrus)c Fn(as)i(a)g(listing)f(\014le,)g
+(should)h(it)f(generate)j Fi(walrus)c Fn(or)i Fi(walrus.lis)p
+Fn(?)177 1894 y(Some)f(p)q(ossible)h(solutions)f(are:)228 2032
+y(1.)20 b(Regard)14 b(the)g(\014lename)f Fi(sloth)g Fn(as)h(ha)o(ving)e(an)i
+(empt)o(y)f(extension.)19 b(It)14 b(will)e(then)j(default)e(to)h
+Fi(sloth.fw)p Fn(.)228 2132 y(2.)20 b(Regard)g(the)h(\014lename)d
+Fi(sloth)h Fn(as)i(ha)o(ving)e(a)g(blank)h(but)g(full)f(extension.)37
+b(That)20 b(is,)h(it)f(cannot)g(b)q(e)281 2181 y(o)o(v)o(erwritten)14
+b(b)o(y)g(inheritance,)g(but)g(it)g(remains)f(blank.)228 2282
+y(3.)20 b(Pro)o(vide)c(an)g(extra)h(syn)o(tactic)f(mec)o(hanism)e(to)i(allo)o
+(w)f(the)i(user)g(to)f(sp)q(ecify)h(one)f(or)g(other)h(of)e(the)i(t)o(w)o(o)
+281 2331 y(options)c(ab)q(o)o(v)o(e.)177 2469 y(My)i(solution)e(w)o(as)i(to)f
+(c)o(ho)q(ose)i(the)f(\014rst)g(option.)k(Use)d(of)e(F)m(unnelW)m(eb)g
+(results)h(in)f(lots)h(of)f(\014les)h(lying)e(around)177 2519
+y(\(e.g.)h Fi(sloth.lis)p Fn(\))f(and)h(it)g(is)g(hard)h(to)f(see)i(ho)o(w)e
+(the)h(user)h(will)c(cop)q(e)k(with)e(them)g(all)f(without)h(some)f(kind)h
+(of)177 2569 y(naming)e(discipline.)17 b(If)d(a)f(naming)f(discipline)h(has)h
+(to)g(b)q(e)h(used,)f(it)g(migh)o(t)d(as)j(w)o(ell)f(b)q(e)i(the)f(F)m
+(unnelW)m(eb)g(one.)177 2652 y(Th)o(us)h(the)g(names)e(of)h(all)f(\014les)i
+(read)f(and)h(written)f(b)o(y)h(F)m(unnelW)m(eb)e(will)g(ha)o(v)o(e)h(a)g
+(\014le)h(extension)g(of)e(from)g(zero)177 2702 y(to)h(three)h(letters)g
+(separated)g(from)e(the)h(rest)h(of)e(the)i(\014lename)e(b)o(y)g(a)h(\\)p
+Fi(.)p Fn(".)177 2785 y(The)d(only)f(exception)i(is)f(pro)q(duct)g(\014les)g
+(whose)h(extension)f(is)g(left)f(unde\014ned.)19 b(Pro)q(duct)12
+b(\014les)f(need)h(not)e(con)o(tain)177 2835 y(a)k(\\)p Fi(.)p
+Fn(")k(and)13 b(a)h(\014le)g(extension,)g(although)f(they)h(can)g(inherit)g
+(one)g(if)f(the)i(user)g(wishes.)1042 2940 y(21)p eop
+%%Page: 22 23
+22 22 bop 177 42 a Fe(1.9)70 b(Sp)r(ecifying)31 b(Constrain)n(ts)i(on)h(the)e
+(Num)n(b)r(er)g(of)i(Instan)n(tia-)334 116 y(tions)177 232
+y Fn(Exp)q(erience)17 b(with)d(F)m(unnelW)m(eb)g(V1)g(demonstrated)h(the)g
+(need)g(to)g(b)q(e)g(able)f(to)g(sp)q(ecify)h(in)g(macro)e(de\014nitions)177
+281 y(ho)o(w)f(man)o(y)f(times)h(it)g(w)o(as)h(exp)q(ected)h(that)f(the)g
+(macro)f(w)o(ould)g(b)q(e)h(used.)18 b(F)m(unnelW)m(eb)13 b(V1)f(generates)i
+(an)f(error)177 331 y(if)g(a)g(macro)f(is)h(not)g(used,)h(but)g(p)q(ermits)f
+(macros)f(to)i(b)q(e)g(called)f(more)f(than)h(once.)19 b(This)13
+b(caused)i(problems)d(for)177 381 y(macro)h(libraries,)g(whic)o(h)h(w)o(ould)
+f(b)q(e)h(included,)g(but)g(whose)g(macros)f(w)o(ere)i(often)f(not)g(called.)
+177 455 y(By)g(default,)e(F)m(unnelW)m(eb)h(V3)h(requires)g(that)g(eac)o(h)f
+(macro)g(\(except)i(for)e(the)h(ones)f(attac)o(hed)h(to)g(output)f(\014les\))
+177 505 y(b)q(e)19 b(called)e(exactly)h(once.)30 b(Ho)o(w)o(ev)o(er,)19
+b(it)f(also)f(pro)o(vides)h(syn)o(tax)g(that)f(allo)o(ws)g(the)h(user)h(to)f
+(sp)q(ecify)g(that)g(a)177 555 y(macro)13 b(b)q(e)h(allo)o(w)o(ed)e(to)i(b)q
+(e)g(called)f(zero)i(times)d(or)i(man)o(y)e(times.)17 b(This)c(allo)o(ws)g(a)
+g(macro)f(to)i(b)q(e)g(sp)q(eci\014ed)h(with)177 605 y(the)f(follo)o(wing)d
+(p)q(ermissible)i(ranges)h(of)f(n)o(um)o(b)q(ers)g(of)g(calls)g(dep)q(ending)
+h(on)f(the)h(presence)i(or)e(absence)h(of)e(\\)p Fi(@Z)p Fn(")177
+655 y(and)h(\\)p Fi(@M)p Fn(":)243 770 y Fi(0..1)217 b(@$@<Sloth@>@Z==.)o(..)
+308 819 y(1)h(@$@<Sloth@>==...)308 869 y(1..n)152 b(@$@<Sloth@>@M==.)o(..)243
+919 y(0.....n)f(@$@<Sloth@>@Z@M=)o(=...)177 1034 y Fn(The)14
+b(only)g(t)o(w)o(o)f(problems)g(with)g(this)h(sc)o(heme)g(are:)228
+1149 y(1.)20 b(It)11 b(is)g(incompatible)f(with)h(F)m(unnelW)m(eb)f(V1)i
+(\014les,)f(as)h(the)f(default)g(in)g(F)m(unnelW)m(eb)g(V1)g(is)g(1)c
+Fj(:)g(:)g(:)e(n)11 b Fn(whereas)281 1198 y(the)16 b(default)g(in)f(new)h(F)m
+(unnelW)m(eb)f(is)h(1.)23 b(This)16 b(is)f(not)h(a)g(big)f(problem)f(b)q
+(ecause)j(most)e(macros)g(in)g(the)281 1248 y(old)e(\014les)h(w)o(ere)h(used)
+g(exactly)f(once.)19 b(Only)13 b(a)h(few)g(macros)f(will)f(ha)o(v)o(e)i(to)g
+(b)q(e)g(c)o(hanged.)228 1331 y(2.)20 b(What)13 b(should)h(the)h(syn)o(tax)e
+(b)q(e?)19 b(\(ab)q(o)o(v)o(e)14 b(is)g(a)f(sneak)i(preview)f(only!\))177
+1446 y(The)g(initial)d(prop)q(osal)i(for)g(syn)o(tax)g(w)o(as)g(to)g(allo)o
+(w)f(the)i(user)g(to)f(insert)h(zero,)g(one,)f(or)g(b)q(oth)g(of)g
+Fi(@?)18 b Fn(and)13 b Fi(@M)g Fn(just)177 1496 y(after)h(the)h
+Fi(@$)e Fn(of)g(a)h(macro)f(de\014nition.)k(Ho)o(w)o(ev)o(er,)d(this)g(has)g
+(the)h(follo)o(wing)c(dra)o(wbac)o(ks:)228 1610 y(1.)20 b(It)14
+b(uses)h(t)o(w)o(o)e(sequences)k(that)d(are)g(desirable)g(to)g(reserv)o(e)i
+(\()p Fi(@?)i Fn(for)c(conditionals)f(and)g Fi(@M)h Fn(for)f(macro\).)228
+1693 y(2.)20 b(It)14 b(stops)g(the)h(user)g(from)d(searc)o(hing)i(for)g(the)g
+(string)g Fi(@$@<name)f Fn(to)g(\014nd)h(the)h(de\014nition)e(of)h(a)f
+(macro.)177 1808 y(These)h(are)e(signi\014can)o(t)g(problems.)17
+b(Here)c(are)g(some)e(alternativ)o(e)h(ideas)h(for)f(where)h(to)f(p)q
+(osition)g(the)h(mo)q(di\014ers)177 1858 y(in)h(the)g(macro)f(de\014nition:)
+177 1973 y Fi(@?@M@$@<Slothy)19 b(dogs@>@\(@5@\)==@{@-)177
+2022 y(This)i(is)h(a)f(short)g(macro.)177 2072 y(With)g(only)g(a)h(line)f(or)
+g(two@})177 2172 y(@$@<Slothy)f(dogs@>@?@M@\(@5@\)=)o(=@{@-)177
+2222 y(This)h(is)h(a)f(short)g(macro.)177 2271 y(With)g(only)g(a)h(line)f(or)
+g(two@})177 2371 y(@$@<Slothy)f(dogs@>@\(@5@\)@?@M=)o(=@{@-)177
+2421 y(This)h(is)h(a)f(short)g(macro.)177 2471 y(With)g(only)g(a)h(line)f(or)
+g(two@)177 2586 y Fn(The)14 b(\014rst)f(form)e(puts)j(me)e(o\013)h(b)q
+(ecause)h(I)f(think)g(that)g(it)f(is)h(a)g(go)q(o)q(d)f(visual)g(rule)h(to)g
+(start)h(all)e(the)h(macros)f(with)177 2635 y Fi(@$)p Fn(.)17
+b(The)12 b(second)h(form)d(puts)j(me)d(o\013)i(b)q(ecause)i(it)d(detac)o(hes)
+i(the)g(macro)d(name)h(from)f(the)j(parameter)e(list,)g(th)o(us)177
+2685 y(making)g(it)i(lo)q(ok)f(less)i(lik)o(e)f(a)g(call,)f(whic)o(h)h(is)h
+(desirable)f(syn)o(tactic)h(resonance.)20 b(The)13 b(third)h(form)d(is)j
+(messy)f(but)177 2735 y(probably)i(w)o(ork)n(able.)23 b(Because)17
+b(w)o(e)f(are)g(righ)o(t)g(next)g(to)f(the)h(tested)i(constan)o(t)e(string)g
+(\(either)g Fi(==)g Fn(or)f Fi(+=)p Fn(\))h(w)o(e)177 2785
+y(could)f(augmen)o(t)e(it)h(further.)21 b(F)m(or)15 b(example,)e
+Fi(01==)h Fn(could)g(allo)o(w)f(a)h(macro)g(to)g(b)q(e)i(called)e(from)f(0)h
+(to)h(1)f(times.)177 2835 y(The)g(main)e(problem)h(with)g(this)h(is)g(that)g
+(w)o(e)g(are)g(trying)g(to)g(phase)g(out)g Fi(==)f Fn(an)o(yw)o(a)o(y!)1042
+2940 y(22)p eop
+%%Page: 23 24
+23 23 bop 177 42 a Fn(Nev)o(ertheless,)17 b(all)c(the)j(logic)d(p)q(oin)o(ts)
+i(to)f(after)h(the)g(parameter)g(list)f(as)h(the)g(b)q(est)h(place)f(to)f(lo)
+q(cate)h(this)g(infor-)177 91 y(mation.)177 167 y(After)21
+b(some)d(though)o(t,)j(it)e(w)o(as)h(decided)h(that)f(the)g(\\)p
+Fi(@?)p Fn(")35 b(sequence)22 b(b)q(e)e(reserv)o(ed)i(for)e(a)f(p)q(ossible)h
+(future)177 217 y(conditional)13 b(facilit)o(y)m(,)e(and)j(so)g
+Fi(@Z)f Fn(w)o(as)h(used)h(instead.)177 292 y Fk(Decision:)h
+Fn(The)f(p)q(osition)e(is)h(after)g(the)g(parameter)g(list.)j(The)e(notation)
+e(is)g Fi(@Z)h Fn(for)f(zero,)i(and)e Fi(@M)h Fn(for)f(man)o(y)m(.)177
+368 y(Example)g(of)g(\014nal)g(syn)o(tax:)177 486 y Fi(@$@<Slothy)20
+b(dogs@>@\(@5@\)@Z@M+)o(=@{@-)177 536 y(This)h(is)h(a)f(short)g(macro.)177
+585 y(With)g(only)g(a)h(line)f(or)g(two@})177 750 y Fe(1.10)70
+b(The)25 b(Relationship)e(Bet)n(w)n(een)g(Do)r(cumen)n(t)h(Structure)h(and)
+368 825 y(Macro)f(Structure)177 942 y Fn(Ha)o(ving)15 b(already)h(decided)h
+(up)q(on)f(a)g(fully)e(hierarc)o(hical)i(do)q(cumen)o(t)g(structure,)i(I)e
+(determined)g(to)g(re\014ne)h(the)177 992 y(details.)h(The)c(issues)h(to)f(b)
+q(e)h(addressed)g(w)o(ere)g(as)f(follo)o(ws:)239 1110 y Fm(\017)21
+b Fn(Ho)o(w)13 b(should)h(the)h(hierarc)o(hical)e(structure)j(connect)g(to)d
+(the)i(macro)e(structure?)239 1194 y Fm(\017)21 b Fn(Ho)o(w)13
+b(can)i(bac)o(kw)o(ards)f(compatibilit)o(y)c(b)q(e)15 b(ac)o(hiev)o(ed?)j
+(Should)c(it?)239 1279 y Fm(\017)21 b Fn(Should)13 b(the)i(macros)e(b)q(e)h
+(cross)h(referenced)i(b)o(y)c(section)i(or)f(b)o(y)g(de\014nition?)239
+1363 y Fm(\017)21 b Fn(Should)13 b(nameless)h(sections)h(inherit)f(macro)e
+(names)h(as)h(headings?)239 1448 y Fm(\017)21 b Fn(Should)13
+b(w)o(e)h(simply)e(use)j(T)708 1457 y(E)731 1448 y(X)f(macros)f(to)h
+(structure)i(the)e(do)q(cumen)o(t?)177 1566 y(After)h(some)e(though)o(t,)g(I)
+h(arriv)o(ed)g(at)f(the)i(follo)o(wing)c(though)o(ts:)177 1642
+y Fk(Basically)i(a)h(T)439 1651 y(E)464 1642 y(X)h(\014le:)h
+Fn(One)d(option)f(is)g(simply)e(to)i(treat)h(eac)o(h)g Fi(.fw)e
+Fn(\014le)i(as)f(a)g(T)1481 1651 y(E)1504 1642 y(X)g(\014le)h(laced)f(with)g
+(macros.)177 1691 y(That)18 b(is,)g(a)g Fi(.fw)f Fn(\014le)h(could)f(b)q(e)i
+(structured)h(as)e(a)f(real)h(T)1117 1700 y(E)1140 1691 y(X)g(\014le)g(from)e
+(whic)o(h)i(F)m(unnelW)m(eb)f(could)h(extract)177 1741 y(macro)13
+b(de\014nitions.)18 b(This)13 b(approac)o(h)h(is)g(feasible)f(b)q(ecause)j(T)
+1157 1750 y(E)1180 1741 y(X)e(could)f(b)q(e)i(programmed)c(to)j(resp)q(ond)h
+(to)e(the)177 1791 y Fi(@)g Fn(sequences)i(in)d(the)i(same)e(w)o(a)o(y)g
+(that)h(F)m(unnelW)m(eb)f(resp)q(onds)i(to)f(them.)k(Th)o(us,)12
+b(there)i(w)o(ould)e(b)q(e)i(no)e(need)i(for)177 1841 y(W)m(ea)o(v)o(e.)177
+1916 y(I)h(rejected)i(this)e(approac)o(h,)g(\014rst)g(b)q(ecause)i(it)e(is)g
+(to)q(o)f(t)o(yp)q(esetter-dep)q(e)q(nden)o(t,)k(and)d(second)h(b)q(ecause)h
+(it)d(com-)177 1966 y(plicates)i(the)h(inclusion)e(of)h(an)o(y)f(sort)h(of)g
+(complicated)e(p)q(ost-pro)q(cessing)k(in)d(the)i(do)q(cumen)o(tation)e
+(\014le.)24 b(This)177 2016 y(w)o(ould)13 b(ha)o(v)o(e)h(to)g(b)q(e)g
+(implemen)o(ted)e(in)h(T)818 2025 y(E)841 2016 y(X.)177 2091
+y(A)h(b)q(etter)h(approac)o(h)f(is)f(to)h(use)g(an)g(in)o(v)o(en)o(ted)g
+(section)g(notation)f(\(e.g.)18 b Fi(@A)j(@B)g(@C)p Fn(\).)13
+b(This)h(main)o(tains)d(F)m(unnel-)177 2141 y(W)m(eb's)h(t)o(yp)q(esetter)k
+(indep)q(endence)f(and)d(can)h(easily)f(b)q(e)i(con)o(v)o(erted)g(in)o(to)e
+(T)1365 2150 y(E)1388 2141 y(X)h(sectioning)f(macros)g(b)o(y)h(W)m(ea)o(v)o
+(e.)177 2217 y(In)g(the)h(same)e(spirit,)g(it)h(migh)o(t)e(b)q(e)j(w)o(orth)f
+(in)o(tro)q(ducing)f(a)h(few)g Fi(@)g Fn(sequences)i(for)e(certain)h(general)
+f(t)o(yp)q(esetting)177 2267 y(op)q(erations)h(suc)o(h)h(as)f(italics)f(and)h
+(program)e(co)q(de.)177 2342 y Fk(Confusion)f(in)i(F)l(unnelW)l(eb)e(V1)j
+(Heading)e(Num)o(b)q(ering:)j Fn(F)m(unnelW)m(eb)d(V1)g(uses)h(t)o(w)o(o)f
+(lev)o(els)g(of)f(section)177 2392 y(headings,)16 b(but)g(n)o(um)o(b)q(ers)f
+(all)f(the)i(headings)g(sequen)o(tially)m(.)22 b(In)16 b(this,)f(it)h(is)f(a)
+g(little)g(confused.)24 b(Clearly)15 b(with)177 2442 y(a)20
+b(fully)e(hierarc)o(hical)h(do)q(cumen)o(t)h(structure,)i(the)f(headings)e
+(cannot)h(b)q(e)g(n)o(um)o(b)q(ered)g(sequen)o(tially)f(|)g(the)177
+2492 y(n)o(um)o(b)q(ering)13 b(m)o(ust)g(re\015ect)i(the)g(structure)h
+(\(e.g.)d(3.2.1\).)177 2567 y Fk(Hierarc)o(hical)d(n)o(um)o(b)q(erin)o(g)f
+(is)j(messy)f(for)h(macros:)k Fn(Unfortunately)m(,)11 b(hierarc)o(hical)f(n)o
+(um)o(b)q(ering)g(is)g(messy)177 2617 y(and)k(confusing)f(when)i(applied)e
+(to)h(macro)e(names.)18 b(In)c(F)m(unnelW)m(eb)f(V1's)h(t)o(yp)q(eset)h
+(output,)f(eac)o(h)g(macro)f(call)177 2667 y(has)i(app)q(ended)g(in)f(square)
+h(brac)o(k)o(ets)h(the)f(n)o(um)o(b)q(er)f(of)f(the)i(section)h(in)e(whic)o
+(h)g(the)h(macro)e(is)h(de\014ned.)21 b(Use)15 b(of)177 2716
+y(hierarc)o(hical)f(n)o(um)o(b)q(ering)e(w)o(ould)i(b)q(e)g(somewhat)f(messy)
+m(.)k(F)m(or)d(example,)e(a)h(macro)g(call)g(migh)o(t)f(lo)q(ok)h(lik)o(e.)
+243 2835 y Fi(Write)20 b(out)h(the)h(output[6.7.4.3])1042 2940
+y Fn(23)p eop
+%%Page: 24 25
+24 24 bop 177 42 a Fn(Similarly)l(,)11 b(cross)k(reference)h(lists)e(w)o
+(ould)f(b)q(e)i(messy:)243 180 y Fi(This)21 b(macro)f(is)i(used)f(in)g
+(3.4.5,)g(1.2,)g(7.8.9,)f(7.4,)h(2.2.1.1.)177 319 y Fk(Separate)12
+b(n)o(um)o(b)q(ering)e(for)j(macros)h(and)f(headings:)i Fn(One)e(idea)f(is)g
+(to)g(use)g(hierarc)o(hical)g(n)o(um)o(b)q(ering)f(for)177
+369 y(the)i(sections,)h(but)f(to)f(n)o(um)o(b)q(er)g(the)h(macros)f(sequen)o
+(tially)m(.)k(This)d(could)f(b)q(e)h(a)g(little)f(confusing)g(in)g(do)q
+(cumen)o(ts)177 419 y(without)j(m)o(uc)o(h)g(structure,)i(but)f(w)o(ould)f(b)
+q(e)h(v)o(ery)g(m)o(uc)o(h)f(less)h(messy)f(than)h(cross)g(referencing)h
+(using)f(hierar-)177 469 y(c)o(hical)f(n)o(um)o(b)q(ering.)22
+b(Also,)15 b(it)g(will)f(b)q(e)i(easier)g(to)g(\014nd)f(macros)g(indexed)h(b)
+o(y)f(a)g(sequen)o(tial)h(n)o(um)o(b)q(er)f(than)g(b)o(y)177
+519 y(section,)g(whic)o(h)g(has)g(a)g(less)g(direct)h(relationship)e(with)h
+(page)g(bulk)f(and)h(n)o(um)o(b)q(er.)20 b(By)15 b(macro)e(n)o(um)o(b)q
+(ering)h(is)177 568 y(mean)o(t)f(the)h(sequen)o(tial)g(n)o(um)o(b)q(ering)f
+(of)g(eac)o(h)h(macro)f(b)q(o)q(dy)h(part)g(through)g(the)h(whole)e(do)q
+(cumen)o(t.)177 652 y Fk(Input)h(format)g(matters)f(more)i(than)f(output)f
+(format:)k Fn(A)o(t)c(this)h(p)q(oin)o(t)e(w)o(e)i(realize)g(that)f(a)g
+(distinction)177 702 y(should)f(b)q(e)g(made)e(b)q(et)o(w)o(een)j(the)f
+Fh(input)i(format)d Fn(and)g(the)h Fh(typ)n(eset)h(output)p
+Fn(.)18 b(The)12 b(critical)f(issue)h(here)h(is)f(not)f(ho)o(w)177
+752 y(the)16 b(program)e(should)h(b)q(e)i(formatted)d(for)h(prin)o(ting,)g
+(but)g(rather)i(the)f(format)d(of)i(its)h Fi(.fw)f Fn(\014le.)22
+b(The)16 b(t)o(yp)q(eset)177 802 y(output)e(can)h(alw)o(a)o(ys)e(b)q(e)h(c)o
+(hanged)h(simply)d(b)o(y)i(\014ddling)f(with)g(W)m(ea)o(v)o(e.)18
+b(Ho)o(w)o(ev)o(er,)c(as)g(so)q(on)g(as)h(the)f(do)q(cumen)o(t)177
+851 y(structuring)g(features)f(of)f(F)m(unnelW)m(eb)g(are)h(\014xed,)f(they)h
+(will)e(b)q(e)i(used)h(in)e(dozens)h(or)f(h)o(undreds)i(of)e(do)q(cumen)o(ts)
+177 901 y(and)j(it)g(will)f(b)q(e)i(v)o(ery)g(di\016cult)f(indeed)h(to)f(c)o
+(hange)h(them.)21 b(Therefore,)c(the)f(imp)q(ortan)o(t)e(thing)g(is)i(to)f
+(pro)o(vide)177 951 y(as)f(sensible)h(and)f(expressiv)o(e)h(a)f
+Fi(.fw)f Fn(format)f(as)i(p)q(ossible.)177 1035 y(It)d(is)g(therefore)h(a)e
+(separate)i(decision)f(as)g(to)f(whether)i(w)o(e)f(should)g(n)o(um)o(b)q(er)f
+(macros)g(b)o(y)g(section)h(or)g(b)o(y)g(sequence)177 1085
+y(n)o(um)o(b)q(er.)17 b(The)e(imp)q(ortan)o(t)d(thing)h(is)h(to)g(address)h
+(the)f(format)f(and)g(rules)i(for)e(the)i(expression)g(of)e(structure.)177
+1168 y Fk(Naming)k(sections:)i Fn(The)d(naming)d(of)i(sections)h(requires)h
+(some)d(though)o(t.)22 b(In)16 b(man)o(y)d(cases)k(\(esp)q(ecially)e(in)177
+1218 y(the)k(case)g(of)e(high-lev)o(el)g(sections\))i(the)f(writer)h(will)d
+(pro)o(vide)i(an)g(explicit)f(name)g(for)h(a)f(section.)31
+b(In)18 b(other)177 1268 y(cases,)d(pro)o(vision)e(of)g(suc)o(h)h(a)g(name)e
+(will)h(merely)g(duplicate)g(the)i(name)d(of)h(the)i(macro)d(con)o(tained)i
+(within)f(the)177 1318 y(section.)23 b(It)15 b(therefore)i(mak)o(es)d(sense)j
+(to)e(allo)o(w)e(the)j(user)g(to)f(omit)f(the)h(name)f(from)g(a)h(section,)g
+(with)g(W)m(ea)o(v)o(e)177 1368 y(naming)10 b(the)k(section)f(after)g(the)g
+(\014rst)h(macro)d(de\014nition)h(in)g(the)i(section.)k(If)12
+b(a)h(macro)e(is)h(unnamed)g(and)g(there)177 1417 y(is)i(no)g(macro)e(in)i
+(the)g(section,)g(an)g(error)h(can)f(b)q(e)g(generated.)177
+1501 y(All)f(these)j(though)o(ts)e(lead)f(to)h(the)g(follo)o(wing)e(sc)o
+(heme:)239 1640 y Fm(\017)21 b Fn(Do)q(cumen)o(ts)13 b(will)g(b)q(e)h
+(hierarc)o(hically)g(structured)i(using)d Fi(@A)p Fn(,)g Fi(@B)h
+Fn(etc.)239 1741 y Fm(\017)21 b Fn(Eac)o(h)14 b(section)h(can)f(b)q(e)g(giv)o
+(en)g(a)f(name)g(delimited)f(b)o(y)i Fi(@<@>)p Fn(.)239 1842
+y Fm(\017)21 b Fn(Sections)15 b(that)f(do)f(not)h(ha)o(v)o(e)g(names)f
+(inherit)h(the)g(name)f(of)g(their)h(\014rst)h(macro.)239 1943
+y Fm(\017)21 b Fn(If)13 b(a)h(section)h(do)q(es)f(not)g(ha)o(v)o(e)g(a)f
+(name)g(or)h(a)g(macro,)e(it)h(is)h(erroneous.)239 2045 y Fm(\017)21
+b Fn(Sections)15 b(will)d(b)q(e)j(n)o(um)o(b)q(ered)e(hierarc)o(hically)g
+(either)i(b)o(y)f(F)m(unnelW)m(eb)f(or)h(b)o(y)g(T)1551 2054
+y(E)1574 2045 y(X.)239 2146 y Fm(\017)21 b Fn(Macro)12 b(b)q(o)q(dy)f(parts)h
+(will)e(b)q(e)i(n)o(um)o(b)q(ered)f(sequen)o(tially)g(b)o(y)g(F)m(unnelW)m
+(eb)g(and)h(cross)g(referenced)i(b)o(y)d(these)281 2196 y(n)o(um)o(b)q(ers.)
+177 2334 y(All)i(this)h(results)h(in)f(a)f(system)h(whic)o(h:)239
+2473 y Fm(\017)21 b Fn(Pro)o(vides)14 b(a)g(hierarc)o(hical)g(do)q(cumen)o(t)
+f(structuring)i(capabilit)o(y)m(.)239 2574 y Fm(\017)21 b Fn(Is)14
+b(t)o(yp)q(esetter)i(indep)q(enden)o(t.)239 2676 y Fm(\017)21
+b Fn(Do)q(es)14 b(not)g(require)h(duplication)e(b)q(et)o(w)o(een)i(heading)e
+(and)h(macro)f(names.)239 2777 y Fm(\017)21 b Fn(Separates)14
+b(the)f(heading)f(and)h(macro)e(systems)i(so)f(that)h(W)m(ea)o(v)o(e)f(can)h
+(b)q(e)g(con\014gured)h(at)e(a)g(later)h(date)g(to)281 2827
+y(cross)i(reference)h(in)e(di\013eren)o(t)h(w)o(a)o(ys)e(without)h(requiring)
+f(input)h(\014les)g(to)g(b)q(e)h(rew)o(ork)o(ed.)1042 2940
+y(24)p eop
+%%Page: 25 26
+25 25 bop 177 42 a Fe(1.11)70 b(Diagnostic)22 b(Messages)177
+157 y Fn(In)14 b(F)m(unnelW)m(eb,)f(all)g(error)i(messages)f(commence)f(with)
+h(an)g(indicator)f(indicating)g(the)i(sev)o(erit)o(y)g(of)e(the)i(error)177
+207 y(message.)j(Here)d(are)f(some)f(of)h(the)g(formats)e(that)i(I)g(in)o(v)o
+(estigated)g(b)q(efore)h(settling)e(on)h(the)h(\014nal)e(format:)177
+323 y Fi(W--Error)20 b(creating)g(sloth.)177 373 y(E--Error)g(opening)h
+(output)f(file.)177 423 y(S--I'm)h(a)g(teapot.)177 473 y(F--Can't)f(open)h
+(output)g(file.)177 572 y(W-Error)g(creating)f(sloth.)177 622
+y(E-Error)h(opening)f(output)g(file.)177 672 y(S-I'm)h(a)h(teapot.)177
+722 y(F-Can't)f(open)f(output)h(file.)177 822 y(W:Error)g(creating)f(sloth.)
+177 871 y(E:Error)h(opening)f(output)g(file.)177 921 y(S:I'm)h(a)h(teapot.)
+177 971 y(F:Can't)f(open)f(output)h(file.)177 1071 y(W:)h(Error)e(creating)g
+(sloth.)152 b(--)21 b(Format)g(chosen.)177 1120 y(E:)h(Error)e(opening)h
+(output)f(file.)177 1170 y(S:)i(I'm)f(a)g(teapot.)177 1220
+y(F:)h(Can't)e(open)h(output)g(file.)177 1320 y(War-Error)f(creating)g
+(sloth.)177 1369 y(Err-Error)g(opening)g(output)h(file.)177
+1419 y(Sev-I'm)g(a)g(teapot.)177 1469 y(Fat-Can't)f(open)h(output)g(file.)177
+1569 y(W-Old)g(fashioned)f(feature.)177 1668 y(W-Old)h(fashioned)f(feature.)
+177 1768 y(W--Old)h(fashioned)f(feature.)177 1868 y(W:)i(Old)f(fashioned)f
+(feature.)177 1967 y(W:Old)h(fashioned)f(feature.)177 2129
+y Fe(1.12)70 b(Summary)177 2245 y Fn(This)16 b(rather)i(unstructured)g(c)o
+(hapter)g(has)e(addressed)i(some)e(of)f(the)i(k)o(ey)g(design)f(decisions)h
+(of)f(F)m(unnelW)m(eb.)177 2295 y(In)e(man)o(y)e(cases,)j(the)g(alternativ)o
+(es)f(ha)o(v)o(e)g(b)q(een)h(unpleasan)o(t,)e(but)h(I)g(am)f(con\014den)o(t)h
+(that)g(in)g(all)f(cases,)h(a)g(fully)177 2345 y(w)o(ork)n(able)f(solution)g
+(has)h(b)q(een)h(found.)1042 2940 y(25)p eop
+%%Page: 26 27
+26 26 bop 1042 2940 a Fn(26)p eop
+%%Page: 27 28
+27 27 bop 177 375 a Ff(Chapter)34 b(2)177 606 y Fl(F)-10 b(unnelW)g(eb)41
+b(Implemen)m(tation)177 869 y Fe(2.1)70 b(In)n(tro)r(duction)177
+982 y Fn(This)13 b(c)o(hapter)g(con)o(tains)g(notes)g(on)g(the)g(actual)f(C)h
+(co)q(de)g(that)g(implemen)o(ts)d(F)m(unnelW)m(eb)i(V3.)18
+b(This)12 b(c)o(hapter)i(is)177 1032 y(rather)h(patc)o(h)o(y)m(.)20
+b(It)14 b(has)h(acted)g(mainly)d(as)i(a)h(dumping)d(ground)i(for)h(ideas)f
+(that)h(I)f(b)q(othered)i(to)e(write)h(ab)q(out)177 1082 y(during)f(dev)o
+(elopmen)o(t.)177 1241 y Fe(2.2)70 b(History)22 b(of)i(F)-6
+b(unnelW)g(eb)22 b(Implemen)n(tati)o(ons)177 1354 y Fn(The)16
+b(\014rst)h(implemen)o(tation)12 b(of)k(F)m(unnelW)m(eb)f(\(F)m(unnelW)m(eb)g
+(V1\))h(w)o(as)g(written)g(in)g(Ada)g(in)f(Decem)o(b)q(er)h(1986.)177
+1404 y(The)f(pro)r(ject)h(w)o(as)e(initially)e(canned)j(as)g(requiring)f(to)q
+(o)g(m)o(uc)o(h)g(time,)f(but)h(w)o(as)h(resurrected)i(when)e(I)g(decided)177
+1454 y(to)e(commit)d(to)k(Ada)p Fk([USDOD83])d Fn(and)i(realized)h(that)f(I)g
+(needed)i(a)e(program)f(to)h(write)g(to)g(help)g(me)g(to)g(learn)177
+1504 y(Ada.)18 b(F)m(unnelW)m(eb)13 b(V1)h(w)o(as,)g(in)f(fact,)g(m)o(y)g
+(\014rst)h(Ada)g(program.)i(It)e(to)q(ok)g(ab)q(out)g(one)g(mon)o(th)e(to)i
+(write.)177 1576 y(F)m(unnelW)m(eb)21 b(V1)g(w)o(as)g(used)h(in)o(tensiv)o
+(ely)f(b)o(y)g(m)o(yself)e(to)j(write)f(Ada)g(programs)f(from)g(Jan)o(uary)h
+(1986)f(to)177 1626 y(July)e(1989)f(at)h(whic)o(h)g(time)f(I)h(\014nished)h
+(m)o(y)e(Ph.D.)g(and)h(lost)g(access)i(to)e(the)h(V)-5 b(AX.)18
+b(During)g(this)g(time)f(at)177 1676 y(least)f(t)o(w)o(en)o(t)o(y)g(thousand)
+g(lines)f(of)g(co)q(de)h(w)o(ere)h(generated)g(using)e(F)m(unnelW)m(eb.)23
+b(Hardly)15 b(an)o(y)o(one)h(but)f(m)o(yself)177 1726 y(used)g(F)m(unnelW)m
+(eb.)177 1798 y(After)f(losing)f(access)i(to)e(Ada)h(and)f(the)h(V)m(ax)f
+(\(and)g(hence)i(to)e(F)m(unnelW)m(eb\),)g(I)g(w)o(as)h(forced)g(bac)o(k)f
+(to)h(program-)177 1848 y(ming)9 b(the)i(non-literate)g(w)o(a)o(y)m(.)16
+b(F)m(rom)9 b(time)g(to)i(time)e(I)i(found)g(that)f(I)h(needed)h(to)f(use)h
+(some)e(of)g(m)o(y)f(old)h(programs)177 1898 y(that)15 b(I)f(had)h(written)g
+(using)f(Ada)h(and)f(F)m(unnelW)m(eb.)19 b(I)c(knew)g(that)f(Ada)h(w)o(ould)f
+(b)q(ecome)g(a)o(v)n(ailable)e(on)j(more)177 1947 y(mac)o(hines,)e(but)h
+(certainly)g(F)m(unnelW)m(eb)g(w)o(ouldn't.)j(I)d(recognised)h(a)f(strong)g
+(need)h(for)e(a)h(p)q(ortable)g(v)o(ersion)g(of)177 1997 y(F)m(unnelW)m(eb)g
+(written)g(in)f(C)h(but)g(didn't)g(ha)o(v)o(e)f(the)i(time)d(or)i(energy)h
+(to)f(create)h(one.)177 2070 y(Ab)q(out)20 b(this)g(time)f(\(late)h(1989\),)g
+(Da)o(vid)f(Hulse,)i(at)f(the)g(time)f(a)g(studen)o(t)i(in)f(Computer)f
+(Science)i(at)f(the)177 2119 y(Univ)o(ersit)o(y)c(of)f(Adelaide,)h(v)o(olun)o
+(teered)h(to)e(translate)h(the)h(4000)e(line)g(Ada)h(v)o(ersion)g(of)f(F)m
+(unnelW)m(eb)g(in)o(to)g(C.)177 2169 y(T)m(o)e(m)o(y)e(kno)o(wledge)j(this)f
+(translation)g(pro)q(cess)i(to)q(ok)e(ab)q(out)g(three)i(w)o(eeks)f(\(in)f
+(Decem)o(b)q(er)h(1989\).)j(The)d(result)177 2219 y(w)o(as)g(called)g(F)m
+(unnelW)m(eb)f(V2)h(and)f(w)o(as)h(formally)d(signed)j(in)o(to)f(the)i
+(public)e(domain)f(on)i(5)f(Ma)o(y)h(1992.)177 2291 y(In)k(general,)h(Da)o
+(vid)d(Hulse)j(did)e(a)h(go)q(o)q(d)g(job.)29 b(Ho)o(w)o(ev)o(er,)19
+b(the)g(resultan)o(t)f(co)q(de)h(su\013ered)h(from)c(one)i(or)g(few)177
+2341 y(serious)d(defects,)g(the)f(most)f(serious)i(of)e(whic)o(h)h(w)o(as)f
+(a)h(lac)o(k)f(of)h(p)q(ortabilit)o(y)m(.)177 2414 y(Lac)o(k)c(of)g(p)q
+(ortabilit)o(y)f(of)g(the)i(C)f(co)q(de,)i(com)o(bined)c(with)i(the)h(need)g
+(for)f(a)g(rather)h(solid)f(design)g(review,)h(com)o(bined)177
+2463 y(with)17 b(the)g(need)h(to)e(strengthen)j(the)e(program)e(to)i(bring)f
+(it)g(up)h(to)g(pro)q(duction)g(standard,)g(resulted)h(in)e(m)o(y)177
+2513 y(p)q(erforming)10 b(a)i(complete)f(rew)o(orking)g(of)g(the)i(co)q(de.)
+18 b(The)12 b(C)g(co)q(de)g(w)o(as)g(en)o(tirely)m(,)f(but)h(incremen)o
+(tally)m(,)e(replaced)177 2563 y(or)20 b(reformatted.)36 b(The)21
+b(co)q(de)f(w)o(as)g(also)g(strengthened)i(and)e(new)g(features)h(w)o(ere)g
+(added.)37 b(This)20 b(pro)q(cess)177 2613 y(to)q(ok)d(ab)q(out)h(t)o(w)o(o)f
+(mon)o(ths)f(\(No)o(v)o(em)o(b)q(er)h(and)h(Decem)o(b)q(er)g(1991\).)28
+b(A)17 b(further)i(t)o(w)o(o)e(mon)o(ths)f(\(appro)o(x\))i(w)o(ere)177
+2663 y(sp)q(en)o(t)13 b(writing)f(do)q(cumen)o(tation,)f(constructing)i(a)f
+(regression)h(test)h(suite,)e(p)q(orting)g(the)h(program)e(to)h(di\013eren)o
+(t)177 2712 y(mac)o(hines,)h(and)g(sorting)h(out)g(the)g(legal)f(issues)i(in)
+o(v)o(olv)o(ed)e(in)g(its)h(release.)177 2785 y(I)g(w)o(ould)f(lik)o(e)h(to)g
+(tak)o(e)g(this)g(opp)q(ortunit)o(y)g(to)g(record)h(a)f(debt)g(of)g
+(gratitude)g(to)g(Da)o(vid)f(Hulse)h(who)g(translated)177 2835
+y(F)m(unnelW)m(eb)f(from)e(Ada)i(to)f(C.)h(Although)f(m)o(y)f(rew)o(orking)i
+(of)f(his)h(C)g(co)q(de)h(obliterated)f(most)e(of)i(his)f(co)q(de,)i(his)1042
+2940 y(27)p eop
+%%Page: 28 29
+28 28 bop 177 42 a Fn(translation)14 b(w)o(as)g(piv)o(otal)e(to)i(the)h(dev)o
+(elopmen)o(t)e(pro)q(cess.)21 b(Without)14 b(his)g(e\013ort)h(in)e(mo)o(ving)
+f(from)g(Ada)i(to)g(C,)177 91 y(I'm)f(not)j(sure)g(that)f(I)g(w)o(ould)g(ha)o
+(v)o(e)g(m)o(ustered)g(the)h(energy)g(and)f(time)f(to)h(complete)g(the)h(pro)
+q(cess)h(and)e(bring)177 141 y(F)m(unnelW)m(eb)f(up)f(to)h(its)g(curren)o(t)h
+(standard.)177 308 y Fe(2.3)70 b(Wh)n(y)23 b(F)-6 b(unnelW)g(eb)23
+b(W)-6 b(asn't)24 b(Used)e(to)h(W)-6 b(rite)22 b(Itself)177
+426 y Fn(After)d(Kn)o(uth)g(created)g(the)g(W)m(eb)f(literate)h(prepro)q
+(cessing)h(system,)e(he)h(re-wrote)g(it)f(using)g(W)m(eb)g(and)g(dis-)177
+476 y(tributed)13 b(the)g(source)g(co)q(de)g(in)f(W)m(eb)g(source)i(form.)h
+(T)m(o)d(allo)o(w)e(the)j(W)m(eb)f(source)h(co)q(de)h(to)e(b)q(e)g(tangled)g
+(b)o(y)g(users)177 526 y(not)i(y)o(et)g(ha)o(ving)f(a)g(cop)o(y)h(of)g(W)m
+(eb,)f(he)h(also)f(included)h(the)h(tangled)e(P)o(ascal)h(co)q(de)h(for)e
+(the)i(T)m(angler.)177 602 y(While)j(this)g(approac)o(h)h(is)f(heroic)h(and)g
+(serv)o(es)h(to)e(con)o(v)o(ey)h(a)f(commitm)o(en)o(t)e(and)i(a)g
+(con\014dence)i(in)f(literate)177 652 y(programming,)10 b(it)j(seemed)h(to)g
+(me)e(that)i(writing)f(F)m(unnelW)m(eb)g(in)g(F)m(unnelW)m(eb)g(w)o(ould)g
+(simply)f(b)q(e)i(asking)f(for)177 702 y(trouble.)18 b(F)m(or)11
+b(a)g(start,)i(it)e(w)o(ould)g(b)q(e)h(v)o(ery)g(hard)g(to)g(mo)q(dify)d(an)o
+(y)i(feature)i(of)e(F)m(unnelW)m(eb)g(that)h(had)f(b)q(een)i(used)177
+752 y(to)18 b(write)g(F)m(unnelW)m(eb,)f(and)h(the)g(though)o(t)g(of)f(what)g
+(w)o(ould)g(happ)q(en)h(if)f(the)h(w)o(orking)f(executable)i(b)q(ecame)177
+801 y(inop)q(erativ)o(e)14 b(for)f(some)g(reason)i(do)q(es)g(not)e(b)q(ear)i
+(thinking)e(up)q(on.)177 878 y(One)18 b(million)c(billion)h(computer)i
+(programs)f(w)o(ere)j(written)f(in)e(the)i(non-literate)g(st)o(yle)f(b)q
+(efore)h(F)m(unnelW)m(eb)177 928 y(w)o(as)c(created.)20 b(Wh)o(y)13
+b(not)h(one)g(more?)177 1095 y Fe(2.4)70 b(Co)r(ding)22 b(St)n(yle)177
+1213 y Fn(Although)15 b(F)m(unnelW)m(eb)g(w)o(asn't)g(co)q(ded)h(under)g(an)o
+(y)f(particular)g(co)q(ding)g(standard,)h(it)f(w)o(as)g(co)q(ded)h(in)f
+(accor-)177 1263 y(dance)c(with)e(a)g(fairly)g(strict)h(p)q(ersonal)g(st)o
+(yle)g(of)f(C)g(whic)o(h)h(dev)o(elop)q(ed)g(during)g(the)g(dev)o(elopmen)o
+(t)f(of)g(F)m(unnelW)m(eb.)177 1312 y(This)17 b(st)o(yle)f(w)o(as)h
+(subsequen)o(tly)h(em)o(b)q(o)q(died)d(in)h(a)g(real)h(C)f(co)q(ding)h
+(standard)g(prepared)g(for)g(the)g(South)f(Aus-)177 1362 y(tralian)10
+b(Go)o(v)o(ernmen)o(t)g(Departmen)o(t)h(of)f(Lands.)935 1347
+y Fd(1)971 1362 y Fn(Unfortunately)m(,)h(F)m(unnelW)m(eb)g(w)o(as)g(not)g
+(formally)d(dev)o(elop)q(ed)177 1412 y(under)16 b(the)g(standard)g(and)f(so)g
+(some)g(holes)g(remain)f(in)h(F)m(unnelW)m(eb's)g(co)q(ding)g(st)o(yle.)22
+b(This)15 b(section)h(aims)e(to)177 1462 y(describ)q(e)i(some)d(of)g(the)i
+(more)d(imp)q(ortan)o(t)h(asp)q(ects)i(of)e(the)i(co)q(ding)f(st)o(yle.)177
+1538 y Fk(P)o(ortabili)o(t)n(y:)27 b Fn(This)19 b(w)o(as)g(a)g(ma)r(jor)e
+(goal)h(of)h(the)g(F)m(unnelW)m(eb)g(implemen)o(tatio)o(n.)31
+b(Tw)o(o)19 b(excellen)o(t)h(b)q(o)q(oks)177 1588 y(guided)f(this)g(mo)o(v)o
+(e)e(to)i(p)q(ortabilit)o(y)m(.)31 b(They)19 b(w)o(ere)h Fk([Rabino)o
+(witz90])c Fn(\(whic)o(h)j(deals)g(with)f(C)h(co)q(de)h(itself)s(\))177
+1638 y(and)15 b Fk([Horton90])g Fn(\(whic)o(h)g(deals)h(with)f(the)h(p)q
+(ortabilit)o(y)e(of)g(v)n(arious)h(library)g(calls\).)22 b(Other)16
+b(w)o(orks)g(suc)o(h)g(as)177 1687 y Fk([Kernighan88])c Fn(and)i
+Fk([ANSI])g Fn(w)o(ere)h(also)e(helpful.)177 1764 y Fk(Iden)o(ti\014ers:)i
+([Rabino)o(witz90])p Fn(length)10 b(sp)q(eci\014es)k(that)f(for)f(wide)g(p)q
+(ortabilit)o(y)m(,)f(iden)o(ti\014ers)i(of)f(blo)q(c)o(k)g(and)h(\014le)177
+1814 y(scop)q(e)j(should)f(b)q(e)h(unique)f(to)g(eigh)o(t)f(c)o(haracters,)j
+(and)e(iden)o(ti\014ers)h(of)e(program)f(scop)q(e)j(should)f(b)q(e)h(unique)f
+(to)177 1863 y(six)d(c)o(haracters.)19 b(I)11 b(ha)o(v)o(e)h(gone)f(further)i
+(in)e(F)m(unnelW)m(eb)g(and)h(actually)e(made)h(these)i(restrictions)g
+(actual)e(limits)177 1913 y(on)j(iden)o(ti\014er)g(length.)177
+1989 y(Because)k(names)d(m)o(ust)g(b)q(e)i(so)f(short,)g(a)g(system)g(of)f
+(abbreviations)h(w)o(as)g(dev)o(elop)q(ed)g(to)g(organize)g(the)h(iden-)177
+2039 y(ti\014ers)f(used)h(within)d(F)m(unnelW)m(eb.)23 b(Eac)o(h)15
+b(abbreviation)g(consists)i(of)d(a)i(letter)g(pair.)22 b(Here)17
+b(are)f Fh(some)f Fn(of)g(the)177 2089 y(abbreviations)f(used:)177
+2209 y Fi(bp)22 b(-)f(Body)g(Part.)177 2259 y(cm)h(-)f(Compare.)f(Used)h(to)h
+(prefix)e(comparison)g(routines)g(that)h(return)g([-1,0,1].)177
+2309 y(dc)h(-)f(Document)f(component.)177 2359 y(dm)i(-)f(Dump)g(package.)177
+2408 y(el)h(-)f(Element.)177 2458 y(eq)h(-)f(Equal.)g(Used)g(to)g(prefix)g
+(comparison)e(routines)h(that)h(return)g(a)h(boolean.)177 2508
+y(ex)g(-)f(Expression.)177 2558 y(f)44 b(-)21 b(Global)g(files.)177
+2608 y(ll)h(-)f(List)g(of)g(lists.)177 2658 y(ln)h(-)f(Line)g(record.)177
+2707 y(ls)h(-)f(List)g(Package.)177 2757 y(lr)h(-)f(Lister)g(package.)p
+177 2796 709 2 v 223 2823 a Fc(1)241 2835 y Fb(The)11 b(standard)e(is)j
+(curren)o(tly)d(una)o(v)n(ailable)o(,)g(but)i(is)g(lik)o(ely)f(to)h(b)q(e)g
+(released)f(or)h(published)e(ev)o(en)o(tually)m(.)1042 2940
+y Fn(28)p eop
+%%Page: 29 30
+29 29 bop 177 42 a Fi(ma)22 b(-)f(Macro.)177 91 y(mc)h(-)f(Macro)g(Call.)177
+141 y(mn)h(-)f(Macro)g(Name.)177 191 y(op)h(-)f(Options)f(package.)177
+241 y(pr)i(-)f(Parser.)177 291 y(ps)h(-)f(Position)f(record.)177
+340 y(sc)i(-)f(Scrap)g(record.)177 390 y(sn)h(-)f(Section.)177
+440 y(tb)h(-)f(Table)g(package.)177 490 y(ty)h(-)f(Typesetter)f(directive.)
+177 540 y(wf)i(-)f(Write)g(file)g(package.)177 589 y(wl)h(-)f(Write)g(with)g
+(EOL)g(\(misc.c\).)177 639 y(wr)h(-)f(Write)217 b(\(misc.c\).)177
+756 y Fk(P)o(oin)o(ters:)15 b Fn(V)m(ariables)f(or)g(t)o(yp)q(es)g(denoting)g
+(p)q(oin)o(ters)g(start)h(with)e(\\)p Fi(p)p 1292 756 14 2
+v 16 w Fn(".)177 831 y Fk(T)o(yp)q(es:)18 b Fn(Names)13 b(denoting)g(t)o(yp)q
+(es)h(end)g(in)f(\\)p 898 831 V 15 w Fi(t)p Fn(".)18 b(Th)o(us,)13
+b(a)g(t)o(yp)q(e)h(for)f(a)g(p)q(oin)o(ter)g(to)g(a)g(table)g(w)o(ould)g(b)q
+(e)h(named)177 881 y Fi(p)p 202 881 V 16 w(tb)p 262 881 V 15
+w(t)p Fn(.)177 956 y Fk(File)j(names:)23 b Fn(All)16 b(\014les)h(used)g(in)f
+(F)m(unnelW)m(eb)g(ha)o(v)o(e)g(\014le)g(names)g(that)h(are)f(from)f(one)i
+(to)f(eigh)o(t)g(c)o(haracters)177 1005 y(long)d(and)g(\014le)g(extensions)i
+(that)e(are)h(from)e(one)h(to)h(three)g(c)o(haracters)i(long.)h(This)c
+(ensures)i(that)f(the)g(\014les)g(can)177 1055 y(b)q(e)h(p)q(ortably)e(mo)o
+(v)o(ed)f(to)i(all)f(kinds)h(of)f(mac)o(hines,)f(ev)o(en)j(MSDOS!)177
+1218 y Fe(2.5)70 b(Use)22 b(of)h(Memory)177 1334 y Fn(F)m(unnelW)m(eb)15
+b(is)h(not)g(a)g(memory-stressed)f(program.)23 b(Ho)o(w)o(ev)o(er,)16
+b(during)f(its)h(dev)o(elopmen)o(t,)f(problems)g(with)177 1384
+y(the)g(managemen)o(t)d(of)h(memory)f(seemed)j(to)f(crop)g(up)h(again)e(and)h
+(again.)k(This)c(section)h(do)q(cumen)o(ts)f(some)f(of)177
+1434 y(these)i(problems)e(and)h(the)h(solutions)e(adopted.)177
+1509 y(There)22 b(are)e(three)i(places)e(where)i(memory)17
+b(can)k(b)q(e)g(obtained:)30 b(the)21 b(heap,)g(the)g(stac)o(k,)h(and)e(from)
+e(static)177 1558 y(v)n(ariables.)f(The)e(follo)o(wing)c(three)k(sections)g
+(deal)f(with)f(eac)o(h)i(of)e(these)i(areas.)177 1721 y Fe(2.6)70
+b(The)22 b(Heap)177 1837 y Fn(One)17 b(of)f(the)h(great)g(frustrations)f(of)g
+(b)q(eing)h(a)f(user)h(is)f(to)h(\014nd)f(that)h(a)f(computer)g(program)e(is)
+j(complaining)177 1887 y(ab)q(out)d(lac)o(k)f(of)g(memory)f(when)i(one)g(kno)
+o(ws)g(full)e(w)o(ell)i(that)g(one)g(has)g(allo)q(cated)f(at)h(least)g(ten)g
+(times)f(as)h(m)o(uc)o(h)177 1937 y(memory)f(to)j(the)g(program)e(as)i(it)f
+(w)o(ould)g(ev)o(er)i(need)f(to)g(do)f(its)h(job.)23 b(The)16
+b(reason)g(for)g(suc)o(h)g(error)h(messages)177 1987 y(usually)h(has)h(to)g
+(do)f(with)g(the)i(programmer)c(setting)j(a)g(\014xed)g(\\reasonable")g
+(limit)d(to)i(a)h(particular)f(data)177 2037 y(structure)f(and)d(then)h(lo)q
+(c)o(king)e(it)i(up)f(in)o(to)g(an)g(arra)o(y)g(whose)h(b)q(ound)g(is)f(sp)q
+(eci\014ed)i(b)o(y)e(a)g(constan)o(t.)21 b(While)13 b(the)177
+2086 y(use)i(of)e(arra)o(ys)h(can)g(increase)h(the)f(sp)q(eed)h(of)e(a)h
+(program,)d(it)i(also)h(means)e(that)i(the)h(user)f(cannot)g(increase)h(the)
+177 2136 y(capacit)o(y)f(of)g(the)h(program)e(without)h(obtaining)f(the)i
+(source)h(co)q(de)f(and)g(recompiling)d(it,)i(whic)o(h)g(is)g(usually)g(a)177
+2186 y(daun)o(ting)f(option.)177 2261 y(The)g(alternativ)o(e)g(is)f(to)h(use)
+h(the)f(heap)g(for)f(all)g(data)g(structures)j(that)e(can)g(gro)o(w)f(in)h
+(prop)q(ortion)f(to)h(the)g(size)g(of)177 2311 y(the)f(user's)g(input.)17
+b(This)11 b(rule)h(has)f(b)q(een)h(follo)o(w)o(ed)e(rigorously)g(in)h(F)m
+(unnelW)m(eb.)16 b(This)11 b(means)g(that)g(as)g(memory)177
+2360 y(spaces)h(increase,)g(users)g(will)d(b)q(e)i(able)g(to)f(hand)h(their)f
+(v)o(ersion)h(of)f(F)m(unnelW)m(eb)g(more)g(memory)e(without)i(ha)o(ving)177
+2410 y(to)k(recompile)f(it.)998 2510 y(|)h Fm(x)g Fn(|)177
+2635 y(Some)i(problems)f(arose)j(early)e(on)h(the)g(Macin)o(tosh)g(in)f(the)h
+(use)h(of)e(the)h(heap.)27 b(It)17 b(seems)g(that)f(some)g(of)g(the)177
+2685 y(allo)q(cations)i(I)i(w)o(as)f(attempting)f(to)h(mak)o(e)f(w)o(ere)i
+(failing)d(for)i(some)g(obscure)i(reason,)f(p)q(ossibly)f(m)o(y)f(fault.)177
+2735 y(Whatev)o(er)c(it)f(w)o(as,)g(it)g(w)o(en)o(t)g(a)o(w)o(a)o(y)g(when)g
+(I)h(replaced)g(direct)g(calls)f(to)g Fi(malloc)f Fn(with)h(calls)g(to)g(a)g
+(mini)e(pac)o(k)n(age)177 2785 y(I)j(wrote)g(\(called)f Fi(memory)p
+Fn(\))f(that)i(allo)q(cated)f(large)g(c)o(h)o(unks)h(of)f(memory)e(and)j
+(then)g(doled)f(out)h(small)d(pieces)k(as)177 2835 y(required)g(b)o(y)f(the)g
+(rest)h(of)e(the)i(program.)1042 2940 y(29)p eop
+%%Page: 30 31
+30 30 bop 177 42 a Fn(Ha)o(ving)13 b(a)h(pac)o(k)n(age)f(to)h(manage)e(all)h
+(the)h(memory)e(allo)q(cation)g(had)i(t)o(w)o(o)f(other)h(b)q(ene\014ts.)177
+122 y(First,)k(only)f(one)h(c)o(hec)o(k)g(w)o(as)g(required)g(in)f(the)h(en)o
+(tire)g(program)e(to)h(see)i(if)e(memory)e(had)i(run)h(out)f(\(in)g(the)177
+172 y(memory)f(pac)o(k)n(age\),)i(and)g(if)g(that)g(failed,)f(the)i(program)e
+(could)h(b)q(e)g(brough)o(t)g(to)g(a)g(screaming)g(halt.)30
+b(This)177 222 y(organization)20 b(w)o(as)g(far)g(preferable)i(to)e(ha)o
+(ving)g(eac)o(h)h(piece)g(of)f(co)q(de)i(that)f(needed)h(to)e(allo)q(cate)g
+(memory)177 272 y(ha)o(ving)13 b(to)h(c)o(hec)o(k)h(to)e(see)i(if)e
+Fi(malloc)g Fn(had)h(failed.)177 352 y(Second,)21 b(the)f(decision)g(to)f
+(construct)i(a)f(mini-shell)c(within)j(F)m(unnelW)m(eb)g(to)g(supp)q(ort)i
+(regression)f(testing)177 402 y(mean)o(t)11 b(that)h(F)m(unnelW)m(eb)g(prop)q
+(er)h(could)f(b)q(e)g(run)h(man)o(y)d(times)h(in)h(an)o(y)f(giv)o(en)h(in)o
+(v)o(o)q(cation)f(of)g(F)m(unnelW)m(eb.)17 b(As)177 452 y(a)10
+b(consequence)j(it)d(w)o(as)h(necessary)h(to)f(mak)o(e)e(sure)i(that)g(there)
+g(w)o(as)g(no)f(memory)e(leak)n(age)i(b)q(et)o(w)o(een)i(in)o(v)o(o)q
+(cations)177 502 y(of)18 b(F)m(unnelW)m(eb)h(prop)q(er.)33
+b(This)19 b(w)o(as)g(accomplished)e(b)o(y)i(rew)o(orking)g(the)g(memory)d
+(pac)o(k)n(age)j(to)f(op)q(erate)i(a)177 551 y(w)o(atermark)12
+b(system.)17 b(The)d(user)g(of)e(the)i(pac)o(k)n(age,)e(when)h(requesting)h
+(memory)m(,)c(could)i(request)j(\\temp)q(orary")177 601 y(or)g(\\p)q(ermanen)
+o(t".)22 b(If)15 b(p)q(ermanen)o(t,)g(the)h(memory)d(pac)o(k)n(age)i(forgot)f
+(that)i(it)f(had)g(allo)q(cated)g(the)h(memory)m(.)j(If)177
+651 y(temp)q(orary)m(,)12 b(the)i(memory)c(pac)o(k)n(age)j(places)h(the)g
+(allo)q(cated)f(blo)q(c)o(k)g(on)g(a)g(list.)k(There)d(w)o(as)f(then)h(a)f
+(function)g(in)177 701 y(the)f(memory)d(pac)o(k)n(age)j(that)f(could)h(b)q(e)
+g(called)f(to)g(deallo)q(cate)h(all)e(the)i(temp)q(orary)f(memory)m(.)k(Th)o
+(us,)c(so)h(long)f(as)177 751 y(all)i(requests)j(for)e(memory)d(within)i(F)m
+(unnelW)m(eb)h(prop)q(er)h(w)o(ere)g(for)e(temp)q(orary)h(memory)m(,)c(and)k
+(that)g(memory)177 800 y(w)o(as)g(freed)h(at)e(the)i(end)f(of)g(ev)o(ery)g
+(run,)g(one)g(could)g(b)q(e)g(sure)h(that)f(there)h(w)o(as)f(no)g(memory)d
+(leak)n(age.)177 981 y Fe(2.7)70 b(The)22 b(Stac)n(k)177 1105
+y Fn(F)m(or)13 b(a)f(while)g(during)h(the)g(dev)o(elopmen)o(t)f(of)g(F)m
+(unnelW)m(eb)g(a)h(particularly)f(nast)o(y)h(bug)f(pro)o(v)o(ed)h(extremely)g
+(hard)177 1155 y(to)j(\014nd.)26 b(The)17 b(symptom)c(w)o(as)j(that)h(F)m
+(unnelW)m(eb)f(w)o(ould)f(crash,)i(sometimes)e(at)h(random,)f(but)h(more)g
+(often)177 1205 y(up)q(on)h(en)o(tering)g(a)g(particular)f(function.)27
+b(In)16 b(the)i(end)f(ab)q(out)g(a)f(da)o(y)h(of)f(sp)q(eci\014c)i(debugging)
+e(w)o(as)h(required)177 1255 y(b)q(efore)e(the)f(problem)e(w)o(as)i(trac)o(k)
+o(ed)h(do)o(wn)e(to)h(a)f(stac)o(k)h(problem.)j(It)d(turned)g(out)g(that)g
+(someho)o(w)e(\(either)j(the)177 1305 y(fault)f(of)g(the)i(Macin)o(tosh)e(or)
+h(the)g(THINK)h(C)e(language)g(system\),)h(only)f(6K)g(w)o(as)h(b)q(eing)g
+(allo)q(cated)f(for)g(stac)o(k)177 1354 y(space!!!!!!!)177
+1435 y(This)f(exp)q(erience)h(led)f(me)e(immediately)e(to)k(go)f(through)g
+(the)i(en)o(tire)f(program)e(and)h(eliminate)f(\(or)h(remo)o(v)o(e)g(to)177
+1485 y(the)j(heap\))f(an)o(y)f(automatic)f(v)n(ariable)h(declarations)h(that)
+g(used)h(more)e(than)h(one)g(h)o(undred)g(or)g(so)g(b)o(ytes.)177
+1565 y(The)g(lesson)g(is)g(clearly)f(that)h(C)f(programs)g(that)g(use)i(more)
+d(than)i(a)f(few)h(thousand)f(b)o(ytes)i(of)e(stac)o(k)h(space)g(are)177
+1615 y(risking)f(their)i(p)q(ortabilit)o(y)m(.)h(All)d(large)h(data)f
+(structures)j(should)e(b)q(e)h(placed)f(in)f(the)i(heap.)177
+1796 y Fe(2.8)70 b(Static)21 b(V)-6 b(ariables)177 1920 y Fn(Static)11
+b(v)n(ariables)e(also)h(pro)o(v)o(ed)g(a)g(problem)f(on)i(the)g(Macin)o
+(tosh.)16 b(It)11 b(turns)g(out)f(that)h(the)g(Macin)o(tosh)f(THINK)h(C)177
+1970 y(compiler)g(do)q(es)h(not)g(allo)o(w)e(more)h(than)h(32K)f(of)g
+(statics)i Fh(in)g(the)g(entir)n(e)f(pr)n(o)n(gr)n(am)p Fn(.)17
+b(F)m(or)11 b(a)h(while)f(this)h(restriction)177 2020 y(w)o(as)17
+b(a)f(serious)i(threat)g(to)e(the)i(program)d(as)i(it)f(w)o(as)h(disco)o(v)o
+(ered)h(that)f(constan)o(t)g(strings)g(w)o(ere)h(included)f(in)177
+2070 y(this)d(total!)k(Ho)o(w)o(ev)o(er,)c(some)f(searc)o(hing)h(rev)o(ealed)
+h(a)e(compiler)g(option)g(that)h(remo)o(v)o(ed)f(the)i(strings)f(from)e(the)
+177 2119 y(static)i(category)m(.)177 2200 y(Nev)o(ertheless,)k(the)e(32K)g
+(limit)c(is)k(rather)g(sev)o(ere.)25 b(Again,)15 b(it)g(seems)h(that)f(for)h
+(p)q(ortabilit)o(y)e(reasons,)i(C)g(pro-)177 2250 y(grams)f(that)h(use)g(a)g
+(lot)f(of)h(static)g(v)n(ariables)f(are)h(risking)g(their)g(p)q(ortabilit)o
+(y)m(.)22 b(As)16 b(a)g(result,)h(the)f(F)m(unnelW)m(eb)177
+2300 y(co)q(de)f(a)o(v)o(oids)e(static)h(v)n(ariables)f(where)i(p)q(ossible)f
+(in)g(fa)o(v)o(our)f(of)g(the)h(heap.)177 2480 y Fe(2.9)70
+b(Implemen)n(ti)o(ng)20 b(T)-6 b(ext)23 b(Inden)n(tation)177
+2605 y Fn(A)o(t)e(one)g(p)q(oin)o(t)f(during)g(the)h(dev)o(elopmen)o(t)f(of)g
+(F)m(unnelW)m(eb,)h(text)h(inden)o(tation)e(w)o(as)g(fully)g(implem)o(en)o
+(ted.)177 2654 y(Ho)o(w)o(ev)o(er,)12 b(it)g(w)o(as)g(subsequen)o(tly)h(remo)
+o(v)o(ed)e(b)q(ecause)i(it)f(w)o(as)g(considered)h(a)f(dangerous)g(feature.)
+18 b(This)12 b(section)177 2704 y(records)17 b(the)f(w)o(a)o(y)f(in)g(whic)o
+(h)h(text)g(inden)o(tation)f(w)o(as)g(implemen)o(ted)e(so)j(that)g(if)e(the)i
+(feature)h(ev)o(er)f(has)g(to)f(b)q(e)177 2754 y(put)f(bac)o(k,)g(this)g(tec)
+o(hnique)g(can)h(b)q(e)f(used)h(again.)177 2835 y(1.)j(Create)d(a)e(new)i
+(\014eld)f(in)f(the)i Fi(sc)p 739 2835 14 2 v 15 w(t)e Fn(record)j(call)d
+Fi(sc)p 1037 2835 V 15 w(postn)p Fn(.)1042 2940 y(30)p eop
+%%Page: 31 32
+31 31 bop 308 42 a Fi(char)21 b(*sc_postn;)f(/*)h(Pointer)f(in)i(the)f(range)
+g([sc_first,sc_las)o(t+1].)236 b(*/)657 91 y(/*)21 b(It)g(is)h(the)f(minimum)
+f(possible)g(value)h(of)h(sc_postn)e(for)108 b(*/)657 141 y(/*)21
+b(which)g(EOL)g(does)g(not)g(appear)g(in)g(*sc_postn..*sc_la)o(st.)84
+b(*/)657 191 y(/*)21 b(i.e.)g(Points)g(to)g(the)g(byte)g(following)f(the)h
+(first)g(EOL)g(in)65 b(*/)657 241 y(/*)21 b(the)g(scrap)g(or)g(sc_first)f(if)
+i(EOL)f(does)g(not)g(appear.)173 b(*/)177 342 y Fn(2.)17 b(Mo)q(dify)10
+b(the)i(scanner)h(so)e(that)g(it)g(generates)i(this)e(\014eld.)18
+b(Sendtext)12 b(should)f(b)q(e)h(mo)q(di\014ed)e(so)h(that)g(it)g(accepts)177
+391 y(an)j(argumen)o(t)f(for)g(the)i Fi(p)p 581 391 14 2 v
+15 w(postn)e Fn(v)n(alue.)177 492 y Fi(LOCAL)21 b(void)g(sendtext)f
+(P_\(\(p_ps_t,char)f(*,char)h(*,char)h(*,bool\)\);)177 542
+y(LOCAL)g(void)g(sendtext\(p_tkps,p)o(_firs)o(t,p_l)o(ast,)o(p_pos)o(tn,is)o
+(_whit)o(e\))177 592 y(/*)h(Appends)e(a)h(text)g(token)g(to)h(the)f(end)g(of)
+g(the)g(token)g(list.)544 b(*/)177 642 y(/*)22 b(IN:)f(p_ps)g(is)g(a)h
+(pointer)e(to)h(a)h(position)e(structure)g(giving)h(the)g(position)f(of)h
+(the)65 b(*/)177 691 y(/*)109 b(first)20 b(character)g(of)i(the)f(token.)914
+b(*/)177 741 y(/*)22 b(IN:)f(p_first)f(and)h(p_last)g(point)g(to)g(the)g
+(first)g(and)g(last)g(byte)g(of)g(the)h(text)e(scrap.)h(*/)177
+791 y(/*)h(IN:)f(p_postn)f(has)h(the)g(same)g(definition)f(as)h(sc_postn)g
+(\(see)g(fwdata.h\).)259 b(*/)177 841 y(/*)22 b(IN:)f(is_white)f(should)g(be)
+i(set)f(to)g(TRUE)g(iff)g(scrap)g(is)h(entirely)e(whitespace.)150
+b(*/)177 891 y(p_ps_t)21 b(p_tkps;)177 941 y(char)43 b(*p_first;)177
+990 y(char)g(*p_last;)177 1040 y(char)g(*p_postn;)177 1090
+y(bool)65 b(is_white;)177 1140 y({)199 1190 y(tk_t)21 b(token;)199
+1289 y(/*)g(Empty)g(text)g(scraps)g(should)f(never)h(be)g(generated.)f(*/)199
+1339 y(assert\(p_first<=p)o(_last)o(,"sen)o(dtext)o(:)f(Text)i(scrap)g
+(bounds)f(are)h(bad."\);)199 1439 y(/*)g(If)h(ch=EOL)e(then)h(we)h(should)e
+(be)i(scanning)e(more)h(text,)f(not)i(shipping)e(it!)h(*/)199
+1488 y(assert\(ch!=EOL,"s)o(entte)o(xt:)e(Shipping)h(text)h(while)f(still)h
+(more)g(to)h(scan."\);)199 1588 y(/*)f(Check)g(that)g(p_postn)f(is)i(in)f
+(range.)g(See)g(definition)f(in)h(fwdata.h.)f(*/)199 1638 y
+(assert\(p_first<=p)o(_post)o(n)f(&&)i(p_postn<=p_last+1,)352
+1688 y("sendtext:)e(p_postn)i(is)g(out)g(of)h(range."\);)199
+1787 y(/*)f(Debug:)g(Check)g(the)g(p_postn)f(field)h(using)g(a)g(brute)g
+(force)g(check.)f(*/)199 1837 y({)221 1887 y(char)h(*i,*j;)221
+1937 y(j=p_first;)221 1987 y(for)g(\(i=p_first;i<=p_l)o(ast;i)o(++\))286
+2036 y(if)h(\(*i==EOL\))352 2086 y(j=i+1;)221 2136 y(assert\(j==p_post)o
+(n,"se)o(ndtex)o(t:)d(sc_postn)h(field)h(is)g(incorrect."\);)199
+2186 y(})199 2286 y(/*)g(Load)g(the)g(text)g(token.)g(*/)199
+2335 y(token.tk_kind)172 b(=)21 b(TK_TEXT;)199 2385 y(ASSIGN\(token.tk_p)o
+(s,*p_)o(tkps\))o(;)199 2435 y(token.tk_sc.sc_fi)o(rst)e(=)i(p_first;)199
+2485 y(token.tk_sc.sc_la)o(st)41 b(=)21 b(p_last;)199 2535
+y(token.tk_sc.sc_po)o(stn)e(=)i(p_postn;)199 2584 y(token.tk_white)150
+b(=)21 b(is_white;)199 2634 y(token.tk_parno)150 b(=)21 b(0;)199
+2684 y(ls_add\(token_list)o(,PV)e(&token\);)177 2734 y(})177
+2835 y Fn(Then)c(all)d(the)j(calls)e(to)h(sendtext)h(ha)o(v)o(e)f(to)g(b)q(e)
+g(c)o(hanged:)1042 2940 y(31)p eop
+%%Page: 32 33
+32 32 bop 177 42 a Fi(/*)22 b(@)f(instructs)f(FunnelWeb)g(to)h(replace)g(the)
+g(special)f(construct)g(with)h(the)g(*/)177 91 y(/*)h(special)e(character.)g
+(Luckily)g(one)h(appears)f(just)h(before)g(the)g(@)h(!!)108
+b(*/)177 141 y(/*)22 b(Note:)e(FALSE)h(is)g(OK)h(because)e(space)h(is)g(not)g
+(a)h(legal)f(specialch.)150 b(*/)177 191 y(/*)22 b(Note:)e(Setting)h
+(parameter)f(p_postn)g(to)h(p_ch-1)g(is)g(OK)h(as)f(EOL)g(is)h(not)f(a)g(*/)
+177 241 y(/*)152 b(legal)21 b(specialch.)913 b(*/)177 291 y
+(sendtext\(&ps_spec,)o(p_ch-)o(1,p_c)o(h-1,p)o(_ch-1)o(,FAL)o(SE\);)177
+340 y(break;)177 440 y(/*)22 b(+)f(instructs)f(FunnelWeb)g(to)h(insert)g(an)g
+(EOL.)g(We)h(can't)e(look)h(to)h(the)f(end)g(of)g(*/)177 490
+y(/*)h(the)f(previous)f(line)h(to)g(find)g(an)h(EOL)f(as)g(this)g(might)g(be)
+g(the)g(first)g(line.)64 b(*/)177 540 y(/*)22 b(Running)e(ahead)h(to)g(the)g
+(end)g(of)h(the)f(line)g(is)g(expensive,)f(and)h(having)g(the)64
+b(*/)177 589 y(/*)22 b(liner)e(mini-package)g(maintain)g(a)h(variable)f(for)i
+(it)f(would)g(be)g(extra)173 b(*/)177 639 y(/*)22 b(housekeeping.)d(Instead)h
+(of)h(all)h(this,)e(we)i(just)f(point)f(to)i(a)f(static.)151
+b(*/)177 689 y({CONST)21 b(static)f(char)h(stateol)g(=)g(EOL;)199
+739 y(sendtext\(&ps_spec)o(,&sta)o(teol,)o(&stat)o(eol,\()o(&sta)o(teol\))o
+(+1,TR)o(UE\);})177 789 y(break;)177 888 y(/*)h(If)f(we)g(hit)g(something)f
+(that)h(ends)g(a)h(text)f(token)g(*/)177 938 y(/*)h(then)f(we)g(can)g
+(transmit)f(a)i(white)f(text)g(token.)64 b(*/)177 988 y(if)22
+b(\(ch==specialch)c(||)k(ch==EOFCH\))243 1038 y({sendtext\(&ps_s)o(tart,)o
+(p_fir)o(st,p_)o(ch-1,)o(MAX\()o(p_sol)o(,p_fi)o(rst\),)o(TRUE\))o(;)d
+(return;})177 1137 y(/*)j(Otherwise)d(we)j(have)f(some)g(more)g
+(\(non-white\))e(text)i(to)h(scan.)e(*/)177 1187 y(/*)i(We)f(can)g(then)g
+(send)g(a)h(non-white)e(text)h(token.)303 b(*/)177 1237 y(while)21
+b(\(ch!=specialch)e(&&)i(ch!=EOFCH\))243 1287 y(NEXTCH;)177
+1337 y(sendtext\(&ps_start)o(,p_fi)o(rst,p)o(_ch-1)o(,MAX\()o(p_so)o(l,p_f)o
+(irst\))o(,FALS)o(E\);)177 1442 y Fn(The)14 b(dump)f(co)q(de)i(needs)g(to)f
+(b)q(e)g(c)o(hanged)h(to)q(o!)352 1548 y Fi(wf_str\(p_wf,"\\")o("\);)177
+1597 y(assert\(token->tk_s)o(c.sc_)o(first)j(!=NULL,"dm_tkls:)h(NULL)i
+(ptr1."\);)177 1647 y(assert\(token->tk_s)o(c.sc_)o(last)40
+b(!=NULL,"dm_tkls:)19 b(NULL)i(ptr2."\);)177 1697 y(for)g
+(\(i=token->tk_sc.sc_)o(first)o(;)e(i<=token->tk_sc.s)o(c_las)o(t;)g(i++\))
+221 1747 y({)243 1797 y(if)i(\(i==token->tk_sc.)o(sc_po)o(stn\))308
+1846 y(wf_str\(p_wf,"<pos)o(tn>"\))o(;)243 1896 y(if)g(\(*i=='\\n'\))308
+1946 y(wf_wl\(p_wf,""\);)243 1996 y(else)308 2046 y(dm_byte\(p_wf,*\(\(u)o
+(byte_)d(*\))k(i\)\);)221 2095 y(})177 2145 y(if)g(\(i==token->tk_s)o(c.sc_)o
+(postn)o(\))243 2195 y(wf_str\(p_wf,"<p)o(ostn>)o("\);)177
+2245 y(wf_str\(p_wf,"\\""\);)177 2295 y(})177 2400 y Fn(3.)37
+b(Ov)o(er)22 b(in)e(the)h(T)m(angle)e(mo)q(dule,)h(create)i(a)e(massiv)o(e)f
+(arra)o(y)h(of)g(p)q(oin)o(ters)h(to)f(scraps)i(to)e(b)q(e)h(used)h(as)e(a)
+177 2450 y(stac)o(k.)f(Main)o(tain)13 b(p)q(oin)o(ters)h(in)o(to)g(the)g
+(stac)o(k)h(called)e Fi(current)g Fn(and)h Fh(b)n(ase)g Fn(\(similar)e(to)i
+(the)g(blank)f(inden)o(tation)177 2500 y(v)n(ariables\).)18
+b(Implemen)o(t)11 b(the)k(follo)o(wing:)239 2605 y Fm(\017)21
+b Fn(T)m(o)14 b(write)i(out)f(a)g(scrap,)h(scan)f(it)g(b)o(yte)h(b)o(y)f(b)o
+(yte.)22 b(Output)16 b(eac)o(h)g(b)o(yte.)22 b(When)15 b(y)o(ou)g(hit)g(an)g
+(EOL,)g(p)q(op)281 2655 y(the)g(stac)o(k)g(bac)o(k)g(to)f Fi(base)p
+Fn(.)20 b(Then)15 b(write)g(out)g(an)f(EOL)h(follo)o(w)o(ed)e(b)o(y)i(the)g
+(stac)o(k)g(con)o(ten)o(ts)h(but)f(writing)281 2705 y(eac)o(h)d(scrap)h(only)
+f(from)e Fi(postn)h Fn(to)h(end)g(end)h(of)e(eac)o(h)i(scrap.)18
+b(When)12 b(y)o(ou)g(ha)o(v)o(e)g(\014nished)g(the)h(new)f(scrap,)281
+2755 y(push)i(it)g(on)g(the)g(stac)o(k.)239 2835 y Fm(\017)21
+b Fn(When)14 b(y)o(ou)f(hit)h(a)g(new)g(macro)f(to)g(expand,)h(sa)o(v)o(e)g
+Fi(base)p Fn(.)j(Restore)e(it)e(later.)1042 2940 y(32)p eop
+%%Page: 33 34
+33 33 bop 177 42 a Fn(The)14 b Fi(postn)f Fn(\014eld)h(solv)o(es)g(the)h(big)
+e(problem)g(of)g(ho)o(w)g(to)h(cop)q(e)h(with)e(something)g(lik)o(e)g(this:)
+177 158 y Fi(The)21 b(rain)g(in)h(Spain)177 208 y(falls)f(mainly)f(@<on)h
+(the)h(plain@>)177 324 y Fn(The)f(trouble)g(is)f(that)h(w)o(e)g(w)o(an)o(t)f
+(to)g(text)h(inden)o(t)g(the)g(lines)g(in)f Fi(@<on)h(the)g(plain@>)e
+Fn(with)h(just)h(\\)p Fi(falls)177 374 y(mainly)g Fn(".)31
+b(Ho)o(w)o(ev)o(er,)20 b(this)f(string)f(is)g(only)g(part)h(of)f(a)g(scrap.)
+33 b(The)19 b(solution)e(is)i(to)f(get)h(the)g(scanner)h(to)177
+423 y(record,)c(in)e(the)i Fi(postn)e Fn(\014eld)h(of)f(eac)o(h)h(scrap,)h
+(the)f(p)q(osition)f(of)h(the)g(\014rst)h(b)o(yte)f(with)g(a)f(EOL-free)i
+(run)f(to)g(the)177 473 y(end)g(of)e(the)h(scrap.)177 548 y(This)i(sc)o(heme)
+g(is)g(v)o(ery)h(e\016cien)o(t)f(b)q(ecause)i(all)d(w)o(e)h(are)h(doing)e(is)
+h(pushing)g(and)g(p)q(opping)f(p)q(oin)o(ters)i(to)f(scraps)177
+598 y(on)g(a)g(stac)o(k)h(arra)o(y)m(.)25 b(The)16 b(main)e(disadv)n(an)o
+(tage)i(is)g(that)g(the)h(arra)o(y)f(m)o(ust)g(necessarily)h(b)q(e)g
+(\014nite)f(and)h(w)o(ould)177 648 y(imp)q(ose)c(a)h(limit)d(on)i(the)i
+(depth)f(of)g(inden)o(tation)f(nesting)h(\(not)g(a)g(big)f(problem\).)1042
+2940 y(33)p eop
+%%Page: 34 35
+34 34 bop 1042 2940 a Fn(34)p eop
+%%Page: 35 36
+35 35 bop 177 377 a Ff(Chapter)34 b(3)177 609 y Fl(F)-10 b(unnelW)g(eb)41
+b(Mo)s(di\014cation)177 875 y Fe(3.1)70 b(In)n(tro)r(duction)177
+990 y Fn(This)19 b(c)o(hapter)h(deals)f(with)g(mo)q(di\014cations)e(to)i(F)m
+(unnelW)m(eb.)33 b(Although)19 b(the)g(GNU)g(license)h(under)g(whic)o(h)177
+1040 y(F)m(unnelW)m(eb)10 b(is)h(distributed)h(allo)o(ws)d(an)o(y)o(one)i(to)
+f(mo)q(dify)f(F)m(unnelW)m(eb)h(and)h(distribute)g(the)g(mo)q(di\014ed)f(v)o
+(ersions,)177 1090 y(there)15 b(are)f(a)f(n)o(um)o(b)q(er)f(of)h(dangers)h
+(in)f(doing)g(this.)k(This)d(c)o(hapter)g(explains)f(the)h(dangers)g(and)f
+(presen)o(ts)j(some)177 1140 y(issues)f(that)f(y)o(ou)g(should)f(think)h(ab)q
+(out)g(if)f(y)o(ou)g(in)o(tend)h(to)g(distribute)g(mo)q(di\014ed)f(v)o
+(ersions)h(of)f(F)m(unnelW)m(eb.)177 1301 y Fe(3.2)70 b(The)22
+b(Danger)i(of)f(Mo)r(difying)g(Languages)177 1417 y Fn(Whenev)o(er)15
+b(someone)e(mo)q(di\014es)g(a)h(computer)f(program)f(they)j(should)e(alw)o(a)
+o(ys)g(ask)h(themselv)o(es)g(\\what)f(is)h(the)177 1467 y(impact)c(of)h
+(these)h(c)o(hanges)g(going)f(to)g(b)q(e)h(on)f(users".)18
+b(F)m(or)11 b(mature)g(pro)q(ducts,)h(the)g(degree)h(of)e(impact)e(is)j
+(largely)177 1516 y(determined)17 b(b)o(y)g(the)h(in)o(v)o(estmen)o(t)e(that)
+i(users)g(ha)o(v)o(e)f(made)f(in)h(particular)g(\014le)g(formats)f(supp)q
+(orted)i(b)o(y)f(the)177 1566 y(pro)q(duct.)177 1641 y(A)o(t)c(the)g(t)o(w)o
+(o)g(extremes,)g(there)h(are)f(the)g(video)g(game)e(and)i(the)g(compiler.)j
+(If)d(one)g(c)o(hanges)g(a)g(video)f(game,)f(the)177 1690 y(c)o(hange)h
+(a\013ects)g(only)e(the)i(future)g(games)e(pla)o(y)o(ed.)16
+b(Ho)o(w)o(ev)o(er,)c(if)e(one)i(c)o(hanges)f(a)g(compiler)f(in)h(particular)
+g(w)o(a)o(ys,)177 1740 y(it)i(is)f(lik)o(ely)g(that)h(thousands)g(of)g(users)
+h(will)e(b)q(e)h(forced)h(to)e(c)o(hange)i(milli)o(ons)c(of)j(source)h
+(\014les)f(to)g(accommo)q(date)177 1790 y(the)f(new)g(v)o(ersion.)17
+b(Th)o(us)11 b(the)h(impact)e(of)g(c)o(hanges)i(to)f(a)g(program)f(dep)q
+(ends)j(largely)d(on)h(the)h(in)o(v)o(estmen)o(t)e(made)177
+1840 y(b)o(y)k(users,)h(in)e(source)i(\014les,)f(training,)f(and)g(ev)o(en)i
+(m)o(uscle)e(memory!)177 1914 y(F)m(unnelW)m(eb)h(lies)h(v)o(ery)g(m)o(uc)o
+(h)f(at)h(the)g(compiler)f(end)h(of)f(this)h(sp)q(ectrum.)22
+b(In)14 b(fact)h(it)g(lies)f(ev)o(en)i(further.)22 b(Not)177
+1964 y(only)15 b(do)q(es)h(it)e(implemen)o(t)f(a)i(language,)f(but)h(it)g(is)
+g(curren)o(tly)h(the)g Fh(only)g Fn(implem)o(en)o(tation)c(of)j(that)g
+(language!)177 2014 y(This)c(means)g(that,)g(although)g(they)h(shouldn't,)f
+(p)q(eople)g(will)f(b)q(e)i(tempted)f(to)h(treat)g(the)g(F)m(unnelW)m(eb)e
+(program)177 2064 y(as)16 b(the)h(de\014nition)e(of)g(its)h(input)g(language)
+f(instead)h(of)f(the)i(de\014nition)e(c)o(hapter)i(in)e(the)i
+Fh(F)m(unnelWeb)h(User's)177 2113 y(Manual)p Fn(,)c(whic)o(h)g(tak)o(es)g
+(precedence)q(.)177 2188 y(Because)f(F)m(unnelW)m(eb)d(de\014nes)i(an)e
+(input)h(language,)f(and)g(p)q(eople)h(will)f(write)h(programs)e(using)h
+(that)h(language,)177 2238 y(particular)j(kinds)f(of)h(c)o(hanges)g(in)f(the)
+i(language)e(will)f(impact)g(sev)o(erely)j(on)f(users.)19 b(Three)c
+(di\013eren)o(t)g(kinds)e(of)177 2287 y(c)o(hange)h(are)h(discussed)g(b)q
+(elo)o(w.)295 2362 y Fk(Remo)o(ving)e(features:)k Fn(Remo)o(v)n(al)10
+b(of)i(features)i(\(featurectom)o(y\))f(is)g(extremely)g(di\016cult)f(once)
+295 2412 y(the)k(user)h(base)f(has)g(started)g(using)g(them.)22
+b(If)15 b(a)g(feature)h(is)g(remo)o(v)o(ed,)e(users)j(of)e(the)h(program)295
+2461 y(will)11 b(ha)o(v)o(e)h(to)h(go)e(through)i(all)e(their)i(programs)e
+(and)h(\014nd)h(a)f(w)o(a)o(y)f(to)i(sim)o(ulate)d(the)j(e\013ect)h(of)e(the)
+295 2511 y(remo)o(v)o(ed)h(feature)i(with)e(other)h(features.)19
+b(Often)c(this)e(is)h(so)g(un)o(think)n(able,)e(that)i(bad)g(language)295
+2561 y(constructs)i(are)e(tolerated)h(far)e(b)q(ey)o(ond)i(their)f(useful)g
+(lifetime.)295 2635 y Fk(Mo)q(difying)k(features:)23 b Fn(Mo)q(di\014cation)
+17 b(of)f(features)i(has)g(less)g(direct)g(impact)d(than)i(the)h(re-)295
+2685 y(mo)o(v)n(al)12 b(of)i(features,)h(but)g(can)f(cause)i(more)d(subtle)i
+(errors.)21 b(F)m(or)15 b(example,)d(consider)k(the)f(sorts)295
+2735 y(of)d(subtle)i(errors)g(that)f(migh)o(t)d(arise)j(if)f(the)i(seman)o
+(tics)e(of)g(the)h(F)m(unnelW)m(eb)f(commen)o(t)f Fi(@!)18
+b Fn(w)o(ere)295 2785 y(c)o(hanged)i(so)g(that)g(it)f(no)h(longer)f(includes)
+h(the)h(end)f(of)f(line)g(mark)o(er.)35 b(An)o(y)o(one)20 b(mo)q(difying)295
+2835 y(features)15 b(should)f(b)q(e)g(sure)h(that)f(they)h(are)f(not)g(inadv)
+o(erten)o(tly)g(la)o(ying)e(traps.)1042 2940 y(35)p eop
+%%Page: 36 37
+36 36 bop 295 42 a Fk(Adding)15 b(features:)20 b Fn(Although)14
+b(the)i(addition)e(of)h(features)h(is)f(generally)g(the)h(most)e(painless)295
+91 y(for)e(the)h(user)g(comm)o(unit)o(y)m(,)c(as)j(Hoare)h(p)q(oin)o(ts)f
+(out,)g(it)g(is)g(also)f(the)i(most)e(dangerous)i(in)f(the)h(long)295
+141 y(run.)343 246 y(\\When)d(an)o(y)f(new)h(language)f(design)h(pro)r(ject)h
+(is)f(nearing)f(completion,)g(there)i(is)e(alw)o(a)o(ys)g(a)h(mad)281
+295 y(rush)h(to)f(get)h(new)g(features)g(added)g(b)q(efore)g
+(standardization.)16 b(The)11 b(rush)g(is)f(mad)f(indeed,)i(b)q(ecause)281
+345 y(it)f(leads)h(in)o(to)f(a)g(trap)h(from)e(whic)o(h)h(there)i(is)e(no)h
+(escap)q(e.)18 b(A)11 b(feature)g(whic)o(h)g(is)f(omitted)f(can)i(alw)o(a)o
+(ys)281 395 y(b)q(e)18 b(added)g(later,)g(when)g(its)f(design)h(and)f(its)g
+(implications)e(are)j(w)o(ell)f(understo)q(o)q(d.)30 b(A)17
+b(feature)281 445 y(whic)o(h)c(is)g(included)h(b)q(efore)g(it)f(is)g(fully)f
+(understo)q(o)q(d)j(can)f(nev)o(er)g(b)q(e)g(remo)o(v)o(ed)e(later.")p
+Fk([Hoare80])177 549 y Fn(These)17 b(problems)d(exist)h(ev)o(en)h(when)f
+(there)i(is)e(a)f(cen)o(tral)i(authorit)o(y)m(.)21 b(If)14
+b(w)o(e)i(consider)g(the)f(case)h(where)g(there)177 599 y(is)g(no)g(cen)o
+(tral)h(authorit)o(y)m(,)e(and)h(users)i(mo)q(dify)c(a)i(language)f(and)h
+(its)g(implemen)o(tations)d(and)j(distribute)h(the)177 649
+y(mo)q(di\014ed)h(v)o(ersions,)i(the)g(result)g(is)f(ev)o(en)g(w)o(orse.)34
+b(F)m(or)19 b(a)g(start,)h(the)g(structure)h(of)e(the)g(genealogy)g(of)f(the)
+177 699 y(program)e(c)o(hanges)j(from)d(a)h(list)h(to)f(a)h(tree.)31
+b(This)18 b(mak)o(es)e(it)i(imp)q(ossible)e(to)h(imp)q(ose)g(an)h(ordering)g
+(on)f(the)177 749 y(di\013eren)o(t)f(v)o(ersions)g(and)g(mak)o(es)e(it)h
+(di\016cult)f(to)i(merge)f(them)f(once)i(they)g(div)o(erge.)23
+b(Second,)16 b(it)f(reduces)i(the)177 798 y(p)q(ortabilit)o(y)f(of)h(\014les)
+h(created)h(under)g(di\013eren)o(t)f(v)o(ersions.)30 b(Third,)18
+b(it)f(mak)o(es)f(adding)h(features)i(hazardous.)177 848 y(If)c(a)g(feature)h
+(is)f(added)h(in)e(one)i(v)o(ersion,)f(\014les)h(will)e(b)q(e)h(created)i
+(that)f(use)g(it.)21 b(These)c(\014les)f(will)d(immediately)177
+898 y(b)q(ecome)d(non-p)q(ortable.)17 b(F)m(urthermore,)11
+b(t)o(w)o(o)f(programmers)e(ma)o(y)g(in)o(tro)q(duce)k(di\013eren)o(t)f
+(features)g(that)g(use)g(the)177 948 y(same)h(syn)o(tactical)h(constructs,)h
+(th)o(us)f(prev)o(en)o(ting)g(the)h(t)o(w)o(o)e(v)o(ersions)h(from)e(ev)o(er)
+j(b)q(eing)f(merged.)k(W)m(orse,)12 b(t)o(w)o(o)177 998 y(programmers)f
+(could)i(in)o(tro)q(duce)h Fh(similar)e Fn(features)i(that)g(use)g(the)f
+(same)g(syn)o(tactical)g(constructs,)i(pro)q(ducing)177 1048
+y(ev)o(en)g(more)e(subtle)h(problems.)177 1119 y(The)c(only)f(w)o(a)o(y)f(to)
+i(a)o(v)o(oid)e(all)g(these)j(problems)e(is)g(to)g(create)i(some)e(sort)h(of)
+e(cen)o(tral)i(design)g(authorit)o(y)m(,)f(\(or,)h(at)f(the)177
+1169 y(v)o(ery)j(least,)g(some)f(sort)h(of)g(design)g(sync)o(hronization\))f
+(that)h(con)o(trols)g(the)h(language)d(and)i(its)g(implemen)o(tati)o(on.)177
+1240 y(The)i(b)q(ene\014ts)i(of)d(tigh)o(t)h(con)o(trol)f(o)o(v)o(er)h(the)h
+(language)e(are)h(enormous.)295 1311 y Fk(Univ)o(ersal)g(p)q(ortabilit)n(y:)k
+Fn(Source)e(\014les)f(can)g(b)q(e)g(treated)h(as)f(p)q(ortable.)21
+b(If)15 b(all)e(the)j(language)295 1361 y(implemen)o(tations)g(in)i(the)h(w)o
+(orld)e(are)i(singing)f(the)h(same)e(tune,)j(then)f(someone)f(in)g(Sydney)295
+1411 y(could)g(send)h(a)f(\014le)h(to)f(someone)f(in)h(New)h(Y)m(ork)f(and)g
+(b)q(e)g(sure)i(that)e(it)g(will)f(b)q(e)h(successfully)295
+1461 y(pro)q(cessed.)295 1532 y Fk(Clear)e(seman)o(tics:)i
+Fn(Doubt)c(ab)q(out)g(the)h(seman)o(tics)f(of)g(the)h(language)e(will)g(b)q
+(e)i(greatly)f(mini-)295 1582 y(mized.)k(So)13 b(long)g(as)h(more)f(than)h
+(one)h(sligh)o(tly)d(di\013ering)i(v)o(ersion)g(of)f(a)h(language)f(exists,)h
+(there)295 1632 y(will)9 b(b)q(e)j(confusion)e(o)o(v)o(er)g(the)i(seman)o
+(tics)e(of)g(its)g(constructs.)19 b(A)11 b(go)q(o)q(d)f(example)f(is)i(the)g
+(confusion)295 1682 y(b)q(et)o(w)o(een)16 b(the)e(A)m(T&T)g(Unix)f(and)h
+(Berk)o(eley)h(Unix)f(shell)f(languages.)177 1753 y(While)20
+b(c)o(hanges)h(to)g(the)g(language)f(supp)q(orted)i(b)o(y)e(a)g(piece)i(of)e
+(soft)o(w)o(are)h(is)f(the)h(most)f(serious)h(problem)177 1803
+y(asso)q(ciated)16 b(with)e(m)o(ultiple)f(v)o(ersions)i(of)f(soft)o(w)o(are,)
+h(the)g(lesser)h(problem)e(of)g(k)o(eeping)h(trac)o(k)g(of)f(c)o(hanges)i
+(that)177 1853 y(don't)f(a\013ect)h(the)g(language)e(that)h(the)h(soft)o(w)o
+(are)g(implem)o(en)o(ts)d(can)j(also)e(cause)j(trouble.)22
+b(Merging)15 b(di\013eren)o(t)177 1902 y(v)o(ersions)g(of)f(soft)o(w)o(are)g
+(is)h(extremely)f(tedious)h(as)f(an)o(y)o(one)g(who)g(has)h(tried)g(it)f
+(will)f(v)o(erify)m(.)19 b(Ho)o(w)o(ev)o(er,)14 b(c)o(hanges)177
+1952 y(not)g(a\013ecting)g(the)g(language)f(are)h(far)f(less)h(serious)h(b)q
+(ecause)g(they)f(impact)e(only)h(on)h(the)g(program)e(itself,)h(not)177
+2002 y(on)h(the)g(far)g(more)f(n)o(umerous)g(source)i(\014les)f(that)g(dep)q
+(end)i(on)d(it.)177 2159 y Fe(3.3)70 b(Authorit)n(y)23 b(vs)g(User)g(Securit)
+n(y)177 2272 y Fn(There)16 b(are)f(a)g(n)o(um)o(b)q(er)f(of)g(w)o(a)o(ys)h
+(of)f(pro)o(viding)f(the)j(strong)f(cen)o(tral)g(design)g(authorit)o(y)f
+(required)i(to)f(pro)q(duce)177 2322 y(the)g(p)q(ortabilit)o(y)d(and)i(seman)
+o(tic)f(securit)o(y)i(desired)g(b)o(y)e(users,)239 2426 y Fm(\017)21
+b Fn(T)m(rade)d(mark)e(the)i(name)f(of)g(the)i(language.)28
+b(Publish)18 b(a)g(sp)q(eci\014cation)g(of)f(the)i(language)e(under)h(the)281
+2476 y(trade)c(name.)i(W)m(arn)d(all)f(users)j(not)e(to)g(trust)h(an)o(y)f
+(implemen)o(tatio)o(n)e(that)i(do)q(es)h(not)f(guaran)o(tee)h(that)f(it)281
+2526 y(implemen)o(ts)d(the)j(language.)k(Then)c(con)o(trol)f(implemen)o
+(tations)d(b)o(y)k(only)e(licensing)i(the)g(trade)g(mark)e(to)281
+2576 y(conforming)h(implem)o(en)o(tations.)239 2655 y Fm(\017)21
+b Fn(Create)g(a)f(single)g(implemen)o(tation)d(of)j(the)h(language.)36
+b(Do)20 b(not)g(release)h(the)g(source)h(co)q(de)f(to)f(the)281
+2705 y(implemen)o(tatio)o(n.)15 b(Release)g(only)e(binary)g(executables.)239
+2785 y Fm(\017)21 b Fn(Release)14 b(the)f(source)i(co)q(de)f(to)f(the)g
+(implemen)o(tation,)c(but)14 b(under)g(a)f(license)g(that)h(prohibits)e(the)i
+(distri-)281 2835 y(bution)f(of)h(mo)q(di\014ed)e(v)o(ersions.)1042
+2940 y(36)p eop
+%%Page: 37 38
+37 37 bop 177 42 a Fn(Man)o(y)11 b(other)h(v)n(ariations)e(on)h(these)i
+(themes)e(are)h(p)q(ossible,)f(but)h(they)f(are)h(all)e(based)i(on)f(the)h
+(idea)f(of)g(regulating)177 91 y(either)k(the)f(\\o\016cial")e(de\014nition)i
+(of)f(the)i(language)e(or)g(all)g(of)g(its)h(existing)g(implemen)o(tatio)o
+(ns.)177 168 y(A)o(t)h(ab)q(out)f(this)h(stage,)g(a)f(con\015ict)h(arises.)21
+b(While)14 b(users)i(w)o(an)o(t)f(the)g(language)f(they)h(are)g(using)f(to)h
+(b)q(e)g(tigh)o(tly)177 217 y(con)o(trolled,)e(they)h(also)f(w)o(an)o(t)g(to)
+h(feel)f(secure)j(ab)q(out)d(the)h(a)o(v)n(ailabilit)o(y)c(of)j(its)h(implem)
+o(en)o(tations.)h(If)f(h)o(undreds)177 267 y(of)19 b(source)i(\014les)e(are)h
+(to)g(b)q(e)g(created)h(in)e(the)h(language,)f(there)i(had)e(b)q(etter)i(b)q
+(e)f(one)g(or)f(more)f(translators)177 317 y(a)o(v)n(ailable)12
+b(when)i(the)h(time)d(comes)i(to)f(use)i(them.)177 393 y(In)g(the)g(case)h
+(of)e(widely-used)h(programmi)o(ng)d(languages)i(suc)o(h)h(as)g(C,)f(the)i
+(problem)d(of)h(securing)i(implem)o(en-)177 443 y(tations)c(do)q(es)i(not)e
+(arise.)18 b(If)12 b(y)o(ou)g(don't)g(get)h(y)o(our)f(compiler)f(from)g
+(Borland,)h(y)o(ou)g(can)h(get)f(it)h(from)d(Microsoft.)177
+493 y(Ho)o(w)o(ev)o(er,)16 b(in)f(the)h(case)g(of)f(a)g(newly)h(in)o(tro)q
+(duced)g(language)e(suc)o(h)i(as)g(F)m(unnelW)m(eb,)f(there)h(ma)o(y)e(b)q(e)
+i(v)o(ery)g(few)177 543 y(implemen)o(tations,)g(or)i(ev)o(en)h(just)f(one)h
+(implemen)o(tatio)o(n,)d(and)i(this)h(p)q(oses)g(a)f(danger)h(to)f(the)h
+(user)g(who)f(is)177 593 y(committing)10 b(to)j(that)g(format.)j(Despite)d
+(the)h(b)q(est)g(in)o(ten)o(tions)f(of)f(the)i(cop)o(yrigh)o(t)f(o)o(wner,)g
+(there)h(are)g(a)e(v)n(ariet)o(y)177 642 y(of)h(w)o(a)o(ys)g(in)f(whic)o(h)h
+(a)g(computer)g(program)f(can)h(suddenly)h(b)q(ecome)f(una)o(v)n(ailable.)j
+(Here)e(are)g(some)e(examples:)239 762 y Fm(\017)21 b Fn(If)12
+b(the)h(program)e(is)i(o)o(wned)g(b)o(y)f(a)g(compan)o(y)f(and)i(the)g
+(compan)o(y)e(go)q(es)i(brok)o(e,)g(the)g(liquidators)e(ma)o(y)g(not)281
+812 y(b)q(other)k(to)e(place)h(the)h(soft)o(w)o(are)f(in)f(the)i(public)e
+(domain.)239 898 y Fm(\017)21 b Fn(If)13 b(the)g(program)f(is)h(o)o(wned)g(b)
+o(y)g(a)g(kindly)f(individual)f(who)i(issues)h(licenses)h(for)e(free,)g(and)g
+(that)g(individ-)281 948 y(ual)h(suddenly)h(dies,)g(users)i(migh)o(t)12
+b(suddenly)k(\014nd)f(themselv)o(es)g(negotiating)f(with)g(hard-nosed)i
+(estate)281 998 y(executors)g(for)d(the)i(righ)o(ts)e(to)h(con)o(tin)o(ue)g
+(using)g(the)g(program.)239 1084 y Fm(\017)21 b Fn(If)c(who)q(ev)o(er)h(o)o
+(wns)g(the)g(program)e(do)q(es)i(not)f(upgrade)h(the)g(program)e(ev)o(ery)i
+(so)f(often,)h(it)f(is)h(actually)281 1134 y(p)q(ossible)10
+b(for)g(the)h(released)g(executables)h(to)e(\\expire")h(when)f(new)h(op)q
+(erating)f(system)g(upgrades)h(app)q(ear.)177 1254 y(These)16
+b(p)q(ossibilities)d(mean)g(that)i(users)g(ab)q(out)g(to)f(in)o(v)o(est)g(in)
+g(a)g(newly)g(in)o(tro)q(duced)h(programmi)o(ng)c(to)q(ol)j(suc)o(h)177
+1304 y(as)j(F)m(unnelW)m(eb)f(ha)o(v)o(e)h(legitimate)d(concerns)19
+b(when)e(they)h(w)o(orry)e(ab)q(out)h(the)g(to)q(ol's)f(a)o(v)n(ailabilit)o
+(y)l(.)24 b(F)m(or)16 b(non-)177 1354 y(commercially)8 b(distributed)k(to)q
+(ols)f(suc)o(h)g(as)h(F)m(unnelW)m(eb,)e(the)i(simplest)e(solution)g(to)h
+(this)h(problem)d(is)i(to)g(mak)o(e)177 1404 y(the)i(source)g(co)q(de)g(a)o
+(v)n(ailable,)c(either)k(b)o(y)f(placing)f(it)g(in)o(to)g(the)i(public)e
+(domain,)f(or)i(b)o(y)f(releasing)h(it)g(under)h(some)177 1453
+y(kind)i(of)f(public)h(license,)g(suc)o(h)h(as)f(a)g(GNU)g(license.)22
+b(The)15 b(trouble)g(with)g(releasing)g(the)h(source)g(co)q(de)g(is)f(that)
+177 1503 y(it)f(remo)o(v)o(es)g(con)o(trol)g(from)f(the)i(design)g(authorit)o
+(y)m(.)j(Once)e(the)f(co)q(de)g(is)g(\\out")f(there)h(is)g(no)f(stopping)g
+(an)o(y)o(one)177 1553 y(from)e(mo)q(difying)f(the)k(program)d(and)i
+(distributing)f(mo)q(di\014ed)g(v)o(ersions.)18 b(All)13 b(c)o(haos)h(can)g
+(ensue.)177 1629 y(One)j(solution)d(to)i(this)g(con\015ict)g(is)f(to)h(tak)o
+(e)f(the)h(trade)h(mark)d(approac)o(h.)23 b(This)16 b(separates)h(the)f(righ)
+o(t)f(of)g(the)177 1679 y(design)e(authorit)o(y)f(to)h(con)o(trol)f(the)h
+(language)f(and)g(its)h(implemen)o(tatio)o(ns,)d(and)j(the)g(righ)o(t)f(of)g
+(the)h(users)h(to)f(use)177 1729 y(the)g(source)i(co)q(de)e(in)f(an)o(y)h(w)o
+(a)o(y)f(they)h(lik)o(e)f(\(but)h(they)g(ma)o(y)e(ha)o(v)o(e)h(to)h(c)o
+(hange)g(its)g(name!\).)j(Ho)o(w)o(ev)o(er,)d(the)g(trade)177
+1779 y(mark)g(approac)o(h)g(is)h(exp)q(ensiv)o(e.)177 1855
+y(The)e(solution)g(that)f(I)h(\(Ross)g(William)o(s)e(\()p Fi
+(ross@spam.adelaid)o(e.ed)o(u.au)p Fn(\)\))f(ha)o(v)o(e)i(adopted)i(is)e(to)h
+(release)h(the)177 1905 y(F)m(unnelW)m(eb)k(source)i(co)q(de)f(under)h(a)e
+(GNU)g(license)i(and)e(then)h(to)f(write)h(this)g(c)o(hapter)g(in)f(the)i
+Fh(F)m(unnelWeb)177 1955 y(Hacker's)c(Manual)h Fn(to)e(dissuade)h(p)q
+(ossible)g(hac)o(k)o(ers)h(from)d(releasing)h(mo)q(di\014ed)f(v)o(ersions)j
+(under)f(the)g(F)m(unnel-)177 2004 y(W)m(eb)e(name.)k(This)d(is)f(ab)q(out)h
+(as)g(close)g(to)f(the)i(GNU/trademark)d(approac)o(h)i(I)f(can)h(get)g
+(without)f(forking)g(out)177 2054 y(ab)q(out)e($1200)g(for)g(a)g(US)g
+(trademark)g(or)g(pa)o(ying)f(ev)o(en)i(more)f(to)g(get)h(a)f(la)o(wy)o(er)g
+(to)g(attempt)f(to)i(draft)f(a)g(con)o(tract)177 2104 y(stating)j(\\thou)f
+(shalt)h(not)g(mo)q(dify)d(the)k(F)m(unnelW)m(eb)e(language".)177
+2271 y Fe(3.4)70 b(What)23 b(I)g(W)-6 b(an)n(t)24 b(to)f(Protect)177
+2389 y Fn(The)13 b(concerns)i(expressed)g(in)d(the)h(previous)g(section)h(ab)
+q(out)e(mo)q(di\014cations)f(to)i(the)g(F)m(unnelW)m(eb)f(program)f(do)177
+2439 y(not)j(preclude)i(mo)q(di\014cations.)i(They)c(merely)g(imply)e(that)i
+(some)f(conditions)h(b)q(e)h(observ)o(ed)h(when)f(mo)q(di\014ca-)177
+2489 y(tions)g(are)g(made.)k(In)c(fact,)g(ha)o(ving)e(formally)f(released)k
+(the)f(sources)i(under)e(GNU,)f(there)i(is)f(nothing)f(that)h(I)177
+2539 y(can)h(do)f(to)h(stop)g(p)q(eople)g(distributing)f(mo)q(di\014ed)f(v)o
+(ersions)i(and)g(the)g(conditions)f(to)h(b)q(e)g(describ)q(ed)i(m)o(ust)c(b)q
+(e)177 2588 y(imp)q(osed)f(v)o(olun)o(tarily)m(.)177 2665 y(In)h(the)h(end)f
+(there)h(are)f(t)o(w)o(o)g(things)g(that)g(I)f(w)o(an)o(t)h(to)g
+(protect/main)o(tain:)228 2785 y(1.)20 b(Restriction)d(of)g(the)g(name)f(\\F)
+m(unnelW)m(eb")g(only)g(to)h(computer)g(programs)e(that)i(exactly)h(implem)o
+(en)o(t)281 2835 y(m)o(y)12 b(\\o\016cial")g(de\014nition)i(of)f(the)h
+(language.)1042 2940 y(37)p eop
+%%Page: 38 39
+38 38 bop 228 42 a Fn(2.)20 b(Restriction)15 b(of)f(the)h(F)m(unnelW)m(eb)f
+(source)i(\014le)f(extensions)h(\\)p Fi(.fw)p Fn(")d(\(input)i(\014les\))g
+(and)f(\\)p Fi(.fwi)p Fn(")g(\(include)281 91 y(\014les\))g(only)f(to)h
+(source)h(\014les)g(that)f(conform)e(to)i(m)o(y)e(\\o\016cial")g
+(de\014nition)h(of)h(the)g(language.)177 214 y(So)f(long)e(as)i(these)h
+(conditions)e(hold,)g(source)i(\014les)f(created)h(under)g(\\F)m(unnelW)m
+(eb")e(will)f(b)q(e)i(p)q(ortable,)g(and)f(the)177 264 y(language)g(will)g
+(ha)o(v)o(e)g(the)i(p)q(oten)o(tial)e(to)h(b)q(e)h(stable)f(and)g(w)o
+(ell-de\014ned.)18 b(Here)c(are)f(m)o(y)e(suggestions)j(for)e(ho)o(w)h(to)177
+314 y(ob)q(ey)i(these)i(rules.)22 b(These)16 b(suggestions)g(are)f(in)g
+(addition)e(to)i(the)h(GNU)f(license)g(rules)h(ab)q(out)f(do)q(cumen)o(ting)
+177 363 y(an)o(y)f(c)o(hanges)g(that)g(y)o(ou)g(mak)o(e)e(in)h(the)i(source)g
+(\014les.)295 441 y Fk(Mo)q(di\014cations)h(that)i(do)g(not)f(a\013ect)i
+(functional)o(i)o(t)o(y:)h Fn(If)c(y)o(ou)g(c)o(hange)g(the)h(F)m(unnelW)m
+(eb)295 491 y(program)f(in)i(a)f(manner)g(that)h(do)q(es)g(not)g(a\013ect)h
+(the)f(functionalit)o(y)e(of)h(the)i(program)d(in)h(an)o(y)295
+540 y(w)o(a)o(y)d(\(e.g.)f(p)q(ort)h(it)g(to)g(a)g(new)g(mac)o(hine,)f(or)h
+(just)g(sp)q(eed)i(it)d(up\),)h(then)h(y)o(ou)e(should)h(mo)q(dify)e(the)295
+590 y(program)g(to)h(write)g(out)g(a)g(message)g(when)g(it)g(starts)h(up)f
+(sa)o(ying)f(that)h(it)g(is)g(a)g(mo)q(di\014ed)f(v)o(ersion)295
+640 y(of)i(F)m(unnelW)m(eb.)j(No)d(other)g(actions)g(need)h(b)q(e)g(tak)o
+(en.)295 717 y Fk(Mo)q(di\014cations)d(that)h(a\013ect)h(functional)o(i)o(t)o
+(y:)h Fn(If)d(y)o(ou)g(mak)o(e)e(c)o(hanges)k(to)e(F)m(unnelW)m(eb)g(that)295
+767 y(a\013ect)g(its)f(functionalit)o(y)f(\(e.g.)g(c)o(hanges)i(to)f(command)
+e(line)h(options,)h(the)h(command)c(language,)295 817 y(or)13
+b(the)h(input)f(language\))g(y)o(ou)f(should)h(c)o(hange)h(the)g(name)e(of)g
+(the)i(program)e(so)h(that)g(the)h(name)295 867 y(no)h(longer)g(con)o(tains)h
+(the)g(w)o(ord)f(\\F)m(unnelW)m(eb",)f(and)h(should)g(c)o(ho)q(ose)i
+(alternativ)o(e)e(input)g(and)295 917 y(include-\014le)d(\014le)g(extensions)
+g(\(the)h(curren)o(t)g(ones)f(are)g(\\)p Fi(.fw)p Fn(")f(and)g(\\)p
+Fi(.fwi)p Fn("\).)16 b(F)m(or)c(example,)e(y)o(ou)295 966 y(migh)o(t)g(call)h
+(y)o(our)g(program)f(\\BananaW)m(eb")h(and)g(use)i(the)f(\014le)g(extensions)
+g(\\)p Fi(.bw)p Fn(")f(and)g(\\)p Fi(.bwi)p Fn(".)177 1044
+y(These)k(rules)f(are)g(not)g(v)o(ery)g(restrictiv)o(e.)19
+b(Basically)13 b(y)o(ou)g(can)h(do)f(what)h(y)o(ou)f(lik)o(e)g(so)h(long)e
+(as)i(y)o(ou)f(c)o(hange)h(the)177 1094 y(name)d(of)g(the)h(resulting)g
+(program.)k(I)c(do)f(not)h(wish)g(to)g(restrict)h(an)o(y)o(one)e(who)h(migh)o
+(t)e(w)o(an)o(t)h(to)h(use)g(F)m(unnelW)m(eb)177 1143 y(as)18
+b(a)g(foundation)f(for)g(a)h(more)f(sophisticated)h(literate)g(programming)d
+(system.)30 b(My)17 b(sole)h(aim)e(here)j(is)f(to)177 1193
+y(protect)d(the)g(in)o(tegrit)o(y)e(of)g(what)h(already)g(exists.)177
+1364 y Fe(3.5)70 b(Mo)r(difying)22 b(the)h(Man)n(uals)177 1483
+y Fn(While)15 b(it)h(is)f(p)q(ermitted)h(to)f(mo)q(dify)f(the)i(F)m(unnelW)m
+(eb)f(program,)g(no)g(license)i(has)f(b)q(een)g(gran)o(ted)h(to)e(mo)q(dify)
+177 1533 y(its)h(do)q(cumen)o(tation)f(\()p Fh(The)i(F)m(unnelWeb)h(User's)e
+(Manual)g Fn(and)g Fh(The)h(F)m(unnelWeb)h(Hacker's)e(Manual)p
+Fn(\).)25 b(The)177 1583 y(only)12 b(op)q(eration)h(that)f(can)h(b)q(e)h(p)q
+(erformed)e(on)g(the)i(F)m(unnelW)m(eb)e(do)q(cumen)o(tation)f(is)i(a)f(v)o
+(erbatim)f(cop)o(y)i(in)f(an)o(y)177 1633 y(medium.)177 1710
+y(If)j(y)o(ou)g(ha)o(v)o(e)g(created)i(a)f(mo)q(di\014ed)e(v)o(ersion)h(of)g
+(F)m(unnelW)m(eb)g(and)g(wish)h(to)f(do)q(cumen)o(t)g(it,)g(either)h(write)g
+(y)o(our)177 1760 y(o)o(wn)h(man)o(ual)e(from)g(scratc)o(h,)k(or)e(write)g(a)
+g(man)o(ual)e(that)i(can)g(b)q(e)h(used)g(in)e(conjunction)i(with)e(the)i
+(existing)177 1809 y(man)o(uals.)177 1980 y Fe(3.6)70 b(Ho)n(w)23
+b(Cop)n(yrigh)n(t)g(La)n(w)g(W)-6 b(orks)177 2099 y Fn(In)17
+b(order)h(to)f(understand)i(the)f(next)f(section,)i(some)d(understanding)i
+(of)e(cop)o(yrigh)o(t)h(la)o(w)f(is)h(required.)29 b(The)177
+2149 y(assertions)15 b(made)e(in)h(this)h(section)f(are)h(not)f(legal)f
+(opinions;)g(they)i(are)g(merely)e(appro)o(ximations)f(of)h(the)i(la)o(w,)177
+2199 y(based)g(on)e(m)o(y)g(understanding)h(of)f(it.)177 2276
+y(By)k(default,)g(who)q(ev)o(er)g(creates)h(a)f Fk(w)o(ork)f
+Fn(o)o(wns)h Fk(cop)o(yrigh)o(t)c Fn(o)o(v)o(er)k(it.)26 b(This)16
+b(means)g(that)h(b)o(y)f(default,)h(that)177 2326 y(p)q(erson)e(is)f(the)g
+(only)f(p)q(erson)i(in)f(the)g(w)o(orld)g(who)f(has)h(the)h(legal)e(righ)o(t)
+g(to)h(mak)o(e)e(copies)j(of)e(the)h(w)o(ork.)177 2403 y(Cop)o(yrigh)o(t)g(o)
+o(v)o(er)h(a)f(w)o(ork)g(usually)g(co)o(v)o(ers)i(all)d(direct)j(deriv)n
+(ations)e(of)g(this)h(w)o(ork.)20 b(F)m(or)14 b(example,)g(if)f(someone)177
+2453 y(o)o(wns)f(the)h(source)h(co)q(de)f(to)f(a)f(computer)h(program)f(then)
+i(they)f(also)g(o)o(wn)g(an)o(y)f(direct)i(deriv)n(ations)f(suc)o(h)h(as)f
+(the)177 2503 y(binary)i(executable.)177 2580 y(More)i(than)g(one)f(p)q
+(erson)i(ma)o(y)c(o)o(wn)i(cop)o(yrigh)o(t)g(o)o(v)o(er)h(a)f(w)o(ork.)23
+b(If)15 b(this)g(is)h(the)g(case,)g(then)g(the)g(w)o(ork)g(cannot)177
+2630 y(b)q(e)f(copied)f(without)f(the)i(p)q(ermission)e(of)g(all)g(of)g(the)h
+(p)q(eople)h(o)o(wning)e(the)h(cop)o(yrigh)o(t.)177 2708 y(A)k(p)q(erson)g
+(\(or)f(group\))g(o)o(wning)g(cop)o(yrigh)o(t)f(o)o(v)o(er)i(a)f(w)o(ork)g
+(can)g Fk(license)e Fn(the)j(righ)o(t)f(to)g(mak)o(e)f(copies)i(of)e(the)177
+2757 y(w)o(ork)e(to)f(an)o(y)o(one)h(he)g(lik)o(es)g(under)h(an)o(y)e
+(conditions)h(he)g(lik)o(es.)177 2835 y(If)g(a)f(w)o(ork)h(is)g(mo)q
+(di\014ed,)e(the)i(result)h(is)f(called)f(a)h Fk(deriv)o(ed)f(w)o(ork)p
+Fn(.)1042 2940 y(38)p eop
+%%Page: 39 40
+39 39 bop 177 42 a Fn(If)13 b(cop)o(yrigh)o(t)g(on)h(a)f(w)o(ork)g(is)g(o)o
+(wned)h(b)o(y)f Fj(A)h Fn(is)f(the)h(w)o(ork)f(is)h(mo)q(di\014ed)e(b)o(y)h
+Fj(B)r Fn(,)h(cop)o(yrigh)o(t)f(on)g(the)h(deriv)o(ed)g(w)o(ork)177
+91 y(is)g(o)o(wned)g(b)o(y)g(b)q(oth)g Fj(A)g Fn(and)f Fj(B)r
+Fn(.)177 159 y(Cop)o(yrigh)o(t)j(is)g(not)g(o)o(wnership)h(o)o(v)o(er)f
+(particular)g(con\014gurations)h(of)f(information,)d(but)k(rather)g(is)f(the)
+h(righ)o(t)177 209 y(to)d(restrict)i(the)f(cop)o(ying)e(of)h(information)d
+(deriv)o(ed)k(from)d(particular)i(sources.)21 b(F)m(or)14 b(example,)e(if)i
+(t)o(w)o(o)f(p)q(eople)177 259 y(p)q(oin)o(t)k(their)g(cameras)g(out)g(a)g
+(windo)o(w)f(and)h(tak)o(e)g(iden)o(tical)f(photographs,)i(eac)o(h)f(p)q
+(erson)h(has)g(the)f(righ)o(t)g(to)177 309 y(restrict)e(the)g(cop)o(ying)e
+(of)g Fh(their)g Fn(photograph)h(regardless)h(of)e(the)h(fact)g(that)g(the)g
+(other)g(p)q(erson)h(has)f(cop)o(yrigh)o(t)177 359 y(o)o(v)o(er)h(an)f(iden)o
+(tical)g(photograph.)20 b(In)14 b(the)h(unlik)o(ely)f(ev)o(en)o(t)h(that)f(t)
+o(w)o(o)g(p)q(eople)h(wrote)g(no)o(v)o(els)g(that)f(w)o(ere)i(letter)177
+408 y(for)d(letter)h(iden)o(tical)f(and)g(it)g(could)g(b)q(e)h(pro)o(v)o(en)g
+(that)f(there)i(w)o(as)e(no)g(con)o(tact)h(b)q(et)o(w)o(een)h(the)f(t)o(w)o
+(o)f(p)q(eople)g(when)177 458 y(they)e(wrote)h(the)f(no)o(v)o(els,)g(then)g
+(cop)o(yrigh)o(t)g(la)o(w)f(w)o(ould)g(eac)o(h)h(protect)h(the)f(righ)o(t)g
+(of)f(eac)o(h)h(p)q(erson)h(to)f(restrict)h(the)177 508 y(cop)o(ying)g(of)h
+(the)g(no)o(v)o(el)f(originating)f(from)g Fh(them)p Fn(.)18
+b(In)13 b(practice,)g(the)h(probabilit)o(y)d(of)h(suc)o(h)i(an)f(ev)o(en)o(t)
+g(o)q(ccurring)177 558 y(is)i(so)h(lo)o(w)e(that)h(the)h(la)o(w)f(assumes)g
+(that)g(if)g(t)o(w)o(o)f(w)o(orks)i(are)f(close)h(or)f(iden)o(tical,)g(that)g
+(there)i(has)e(b)q(een)i(some)177 608 y(information)11 b(in)o(terc)o(hange)k
+(at)e(some)g(p)q(oin)o(t.)177 676 y(Th)o(us,)f(if)f(I)h(o)o(wn)g(cop)o(yrigh)
+o(t)f(on)h(computer)f(program)g Fj(X)s Fn(,)h(and)g(I)f(create)j(an)d(iden)o
+(tical)h(cop)o(y)f(of)h Fj(X)j Fn(called)d Fj(Y)21 b Fn(and)177
+726 y(distribute)c(it)f(under)h(the)f(terms)g(of)g(a)g(license)h(agreemen)o
+(t,)f(then)g(that)h(license)g(agreemen)o(t)e(do)q(es)i(not)f(co)o(v)o(er)177
+775 y(the)e(cop)o(y)e Fj(X)s Fn(.)19 b(Once)14 b(the)f(license)h(agreemen)o
+(t)e(is)h(signed,)g(there)h(is)f(nothing)f(I)h(can)g(do)f(to)h(undo)g(the)g
+(license;)g Fj(Y)177 825 y Fn(has)h(gone.)k(Ho)o(w)o(ev)o(er,)c(I)g(still)f
+(ha)o(v)o(e)h(total)f(con)o(trol)g(o)o(v)o(er)h Fj(X)s Fn(.)177
+893 y(V)m(ersion)g(2)g(of)f(the)h(GNU)g(General)g(Public)g(License)h(\(under)
+g(whic)o(h)e(F)m(unnelW)m(eb)h(is)f(released\))j(sp)q(eci\014es)g(\(in)d(a)
+177 943 y(n)o(utshell\))e(that)h(soft)o(w)o(are)f(can)g(b)q(e)h(copied)f
+(freely)g(so)h(long)e(as)h(it)g(is)g(not)g(sold,)f(and)h(that)g(it)g(can)h(b)
+q(e)f(mo)q(di\014ed)f(and)177 993 y(copied)15 b(freely)h(so)f(long)f(as)h
+(the)h(mo)q(di\014cations)d(are)i(logged)g(and)g(it)f(is)h(not)g(sold.)21
+b(In)15 b(b)q(oth)h(cases,)g(it)f(requires)177 1043 y(that)h(the)h(result)g
+(of)e(the)i(cop)o(y)f(or)g(mo)q(di\014cation)e(op)q(eration)h(b)q(e)i(copied)
+f(only)g(under)g(the)h(conditions)f(of)f(the)177 1092 y(license.)177
+1160 y(Once)g(a)e(declaration)g(is)g(issued)h(licensing)f(a)g(cop)o(y)g(of)g
+(a)g(program)e(under)j(GNU)f(license,)h(that)g(license)g(cannot)177
+1210 y(b)q(e)h(retracted.)177 1363 y Fe(3.7)70 b(Managemen)n(t)23
+b(of)g(the)f(O\016cial)f(F)-6 b(unnelW)g(eb)177 1472 y Fn(I)14
+b(in)o(tend)f(to)h(main)o(tain)d(an)i(o\016cial)f(cop)o(y)i(of)f(F)m(unnelW)m
+(eb)g(and)g(release)i(it)f(under)g(GNU)f(license)i(from)d(time)g(to)177
+1522 y(time)h(so)h(that)g(ev)o(ery)o(one)g(can)h(use)f(it.)k(Unfortunately)c
+(its)g(going)e(to)i(b)q(e)g(a)g(little)f(messy)m(.)177 1590
+y(F)m(or)j(a)h(v)n(ariet)o(y)f(of)f(reasons,)j(I)f(w)o(an)o(t)f(to)g(main)o
+(tain)e(total)i(con)o(trol)g(o)o(v)o(er)g Fh(my)h Fn(cop)o(y)g(of)e(the)j
+(o\016cial)d(v)o(ersion)h(of)177 1640 y(F)m(unnelW)m(eb.)i(Some)12
+b(of)i(the)g(reasons)h(are:)239 1732 y Fm(\017)21 b Fn(If)15
+b(it)h(turns)h(out)f(that)g(there)h(is)e(an)h(enormous)f(demand)g(for)h(F)m
+(unnelW)m(eb)f(\(unlik)o(ely\))g(then)i(I)e(w)o(an)o(t)h(to)281
+1782 y(b)q(e)e(able)e(to)h(create)i(a)d(business)j(based)e(on)g(it,)f(or)h
+(at)g(least)h(b)q(e)f(able)g(to)g(bundle)g(it)g(with)f(other)i(pro)q(ducts.)
+281 1832 y(This)g(w)o(ould)g(b)q(e)i(di\016cult)e(if)f(the)j(only)d
+(up-to-date)i(cop)o(y)g(a)o(v)n(ailable)d(w)o(as)j(a)f(GNU)h(cop)o(y)m(.)k
+(Note:)h(If)15 b(this)281 1882 y(happ)q(ens,)f(all)f(the)h(GNU)g(releases)i
+(of)d(F)m(unnelW)m(eb)g(will)g(remain)f(v)n(alid.)239 1958
+y Fm(\017)21 b Fn(I)d(w)o(an)o(t)g(to)g(b)q(e)h(able)f(to)g(cop)o(y)g(co)q
+(de)h(from)d(m)o(y)h(v)o(ersion)h(of)g(F)m(unnelW)m(eb)f(in)o(to)h
+(commercial)d(pro)q(ducts)281 2008 y(without)e(ha)o(ving)g(to)h(w)o(orry)g
+(ab)q(out)g(the)g(GNU)g(license.)177 2101 y(The)i(trouble)f(is)h(that)f(\(in)
+g(m)o(y)f(understanding)h(of)g(cop)o(yrigh)o(t)g(la)o(w\),)f(once)i(a)f(cop)o
+(y)h(of)e(F)m(unnelW)m(eb)h(has)h(b)q(een)177 2151 y(released)i(under)g(GNU)f
+(license,)g(then)h(it)e(and)h(an)o(y)f(w)o(orks)h(deriv)o(ed)h(from)d(it)h
+(fall)g(under)h(GNU)g(license)g(to)q(o.)177 2200 y(This)c(means)g(that)g(if)g
+(y)o(ou)g(mo)q(dify)e(a)i(GNU)g(release)h(of)f(F)m(unnelW)m(eb)g(and)g(send)h
+(me)f(y)o(our)g(mo)q(di\014cations,)e(and)177 2250 y(I)18 b(incorp)q(orate)h
+(them)e(in)o(to)h(m)o(y)e(v)o(ersion,)j(then)g(I)f(no)g(longer)f(o)o(wn)h
+(cop)o(yrigh)o(t)g(on)g(the)g(v)o(ersion)h(I)f(mo)q(di\014ed.)177
+2300 y(Basically)m(,)12 b(if)h(GNU)h(touc)o(hes)h(a)f(w)o(ork,)f(then)h(that)
+g(cop)o(y)g(is)g(gone)g(forev)o(er.)177 2368 y(My)k(solution)e(to)i(the)g
+(problem)e(is)h(to)g(k)o(eep)i(a)e(cop)o(y)g(of)g(F)m(unnelW)m(eb)g(that)h
+(is)f(GNU-clean)g(and)h(only)e(mak)o(e)177 2418 y(mo)q(di\014cations)9
+b(to)h(it)h(that)f(are)h(GNU-clean.)17 b(So)11 b(long)e(as)i(m)o(y)e
+(o\016cial)g(cop)o(y)i(is)f(GNU)g(clean,)h(an)o(y)g(mo)q(di\014cations)177
+2468 y(that)j(I)g(mak)o(e)e(m)o(yself)g(will)h(b)q(e)h(GNU)g(clean.)k(The)c
+(problem)e(comes)i(when)g(someone)f(else)i(mo)q(di\014es)e(the)h(GNU)177
+2518 y(v)o(ersion)c(and)f(then)h(w)o(an)o(ts)g(me)e(to)i(incorp)q(orate)g
+(the)g(mo)q(di\014cations)e(in)o(to)g(m)o(y)g(o\016cial)g(v)o(ersion.)17
+b(As)10 b(I)g(understand)177 2567 y(the)h(la)o(w,)f(b)o(y)g(default,)g(the)h
+(programmer)d(o)o(wns)j(the)g(mo)q(di\014cations)d(\(b)q(ecause)k(he)f(made)e
+(them\),)h(but)h(the)g(result)177 2617 y(of)h(making)e(the)j(mo)q
+(di\014cations)d(falls)i(under)h(GNU)f(license.)18 b(What)12
+b(I)g(prop)q(ose)i(is)e(that)g(those)h(who)f(w)o(an)o(t)g(their)177
+2667 y(mo)q(di\014cations)g(included)i(in)g(the)g(o\016cial)f(cop)o(y)g(of)h
+(F)m(unnelW)m(eb)f(sign)h(an)f(agreemen)o(t)h(transferring)g(cop)o(yrigh)o(t)
+177 2717 y(of)f(the)g(mo)q(di\014cations)f(o)o(v)o(er)h(to)g(me)f(on)h
+(condition)f(that)h(the)h(result)g(b)q(e)f(released)i(under)f(GNU)f(license)h
+(within)177 2767 y(a)g(certain)g(time)f(p)q(erio)q(d.)18 b
+Fk(Figure)c(1)g Fn(demonstrates)g(the)h(pro)q(cess.)177 2835
+y(There)g(are)g(t)o(w)o(o)e(main)f(disadv)n(an)o(tages)h(to)h(this)g(sc)o
+(heme:)1042 2940 y(39)p eop
+%%Page: 40 41
+40 40 bop 221 91 a Fi(+---------->----)o(-----)o(-+---)o(-----)o(-----)o
+(-<--)o(-----)o(-----)o(-+)221 141 y(|\(modifications)18 b(by)87
+b(|)610 b(|)221 191 y(|)21 b(me\))370 b(V)610 b(|)221 241 y(|)109
+b(+--------------)o(-----)o(-----)o(-----)o(----)o(-+)193 b(|)221
+291 y(+--<--|)42 b(My)21 b(Official)f(Copy)h(of)h(FunnelWeb)63
+b(|)196 b(|)352 340 y(|)65 b(Copyright)20 b(\(C\))h(Ross)g(Williams)85
+b(|)196 b(|)352 390 y(+--------------)o(-----)o(-----)o(-----)o(----)o(-+)d
+(|)700 440 y(|)22 b(\(Periodic)e(releases\))150 b(/)22 b(\\)700
+490 y(V)567 b(/)65 b(\\)43 b(Programmers)482 540 y(+------------------)o(+)
+346 b(/Legal\\)20 b(sign)h(away)482 589 y(|)h(GNU)f(Release)f(Copy)h(|)349
+b(\\Filte/)20 b(copyright)g(on)482 639 y(+------------------)o(+)368
+b(\\)21 b(r)h(/)43 b(modifications)700 689 y(|)588 b(\\)22
+b(/)700 739 y(|)g(\(Modifications)d(made)i(by)108 b(|)700 789
+y(V)44 b(random)20 b(programmers\))f(--->--+)460 839 y(+-------------------)o
+(----+)460 888 y(|)j(Modified)e(GNU)h(Version)43 b(|)460 938
+y(+-------------------)o(----+)343 1079 y Fb(Once)13 b(a)f(w)o(ork)h(is)g
+(released)e(under)g(GNU)i(license,)f(all)g(deriv)o(ed)f(w)o(orks)h(fall)g
+(under)g(GNU)h(license.)18 b(Ho)o(w)o(ev)o(er,)281 1129 y(this)9
+b(diagram)f(sho)o(ws)i(ho)o(w)g(cop)o(yrigh)o(t)d(can)i(b)q(e)h(main)o
+(tained)d(o)o(v)o(er)i(a)h(w)o(ork,)g(while)f(still)g(making)f(it)i(a)o(v)n
+(ailable)e(under)281 1179 y(GNU)14 b(license.)19 b(Unfortunately)m(,)11
+b(this)i(sc)o(heme)e(requires)h(that)g(cop)o(yrigh)o(t)f(on)i(mo)q
+(di\014cati)o(ons)d(to)j(F)m(unnelW)m(eb)f(b)q(e)281 1229 y(signed)e(o\013)h
+(b)o(y)g(the)g(p)q(eople)e(who)j(mak)o(e)e(the)h(mo)q(di\014catio)o(ns.)453
+1320 y Fk(Figure)j(1)p Fn(:)k(Ho)o(w)13 b(I)h(am)e(going)h(to)h(main)o(tain)d
+(cop)o(yrigh)o(t)i(o)o(v)o(er)h(F)m(unnelW)m(eb.)228 1453 y(1.)20
+b(Getting)15 b(eac)o(h)i(p)q(erson)g(who)e(con)o(tributes)i(mo)q
+(di\014cations)d(to)i(F)m(unnelW)m(eb)g(to)f(sign)h(and)g(send)g(a)g(piece)
+281 1503 y(of)d(pap)q(er)i(signing)e(a)o(w)o(a)o(y)f(cop)o(yrigh)o(t)i(will)e
+(b)q(e)j(tedious.)228 1580 y(2.)20 b(Programmers)14 b(ma)o(y)g(b)q(e)j
+(reluctan)o(t)f(to)g(sign)g(a)o(w)o(a)o(y)e(cop)o(yrigh)o(t)i(on)g(mo)q
+(di\014cations)e(b)q(ecause)j(the)g(result)281 1630 y(could)e(b)q(e)h(used)g
+(b)o(y)f(me)f(for)h(commercial)d(purp)q(oses)17 b(b)o(y)e(me)f(at)h(a)g
+(later)h(date)f(\(Note:)21 b(But)16 b(it)f(m)o(ust)f(b)q(e)281
+1679 y(released)h(under)g(GNU)f(as)f(w)o(ell\).)177 1774 y(These)18
+b(disadv)n(an)o(tages)d(are)i(regrettable)g(consequences)i(of)c(m)o(y)g
+(decision)h(to)g(retain)g(total)f(con)o(trol)h(o)o(v)o(er)g(the)177
+1824 y(\\o\016cial")c(v)o(ersion)i(of)f(F)m(unnelW)m(eb.)177
+1893 y(The)h(upshot)h(of)e(all)g(this)h(is)f(that:)239 1988
+y Fm(\017)21 b Fn(I)12 b(will)e(nev)o(er)i(allo)o(w)f(an)o(y)g(co)q(de)h
+(from)e(a)i(GNU)f(release)i(of)e(F)m(unnelW)m(eb)g(to)h(touc)o(h)g(m)o(y)e
+(o\016cial)g(cop)o(y)m(.)17 b(Only)281 2038 y(mo)q(di\014cations)12
+b(will)g(b)q(e)j(acceptable.)239 2115 y Fm(\017)21 b Fn(If)e(y)o(ou)g(mak)o
+(e)f(a)h(mo)q(di\014cation)e(to)j(F)m(unnelW)m(eb)f(and)g(send)h(it)f(to)h
+(me)e(for)h(inclusion)g(in)g(the)h(o\016cial)281 2165 y(v)o(ersion,)d(I)f
+(will)g(not)g(incorp)q(orate)h(y)o(our)g(mo)q(di\014cation)d(un)o(til)i(I)h
+(ha)o(v)o(e)f(receiv)o(ed)i(a)e(signed)h(declaration)281 2214
+y(transferring)11 b(cop)o(yrigh)o(t.)17 b(I)11 b(will)e(prepare)k(suc)o(h)e
+(a)g(con)o(tract)h(when)f(the)h(\014rst)f(p)q(erson)h(sends)g(me)e(a)h(w)o
+(orth)o(y)281 2264 y(mo)q(di\014cation!)239 2341 y Fm(\017)21
+b Fn(If)12 b(y)o(ou)g(in)o(tend)h(to)f(mak)o(e)f(c)o(hanges)i(to)g(F)m
+(unnelW)m(eb)f(that)g(are)h(so)g(massiv)o(e)e(that)i(they)g(will)e(in)o(v)o
+(olv)o(e)g(wide-)281 2391 y(scale)i(mo)q(di\014cation)e(of)h(the)i(source)g
+(\014les,)f(and)g(y)o(ou)f(w)o(an)o(t)h(the)g(mo)q(di\014cation)e(to)i(b)q(e)
+g(part)g(of)g(the)g(o\016cial)281 2441 y(v)o(ersion,)j(it)g(migh)o(t)e(b)q(e)
+j(a)f(go)q(o)q(d)f(idea)h(to)g(con)o(tact)h(me)e(b)q(efore)i(doing)e(so.)25
+b(There)17 b(are)f(t)o(w)o(o)g(reasons)h(for)281 2491 y(doing)11
+b(this.)18 b(First,)12 b(it)g(allo)o(ws)f(me)h(a)g(c)o(hance)h(to)f(commen)o
+(t)e(on)i(y)o(our)h(prop)q(osed)g(mo)q(di\014cations)d(and)i(giv)o(e)281
+2540 y(m)o(y)i(opinion)g(on)i(whether)h(they)f(are)g(lik)o(ely)e(to)i(b)q(e)g
+(incorp)q(orated)g(in)o(to)f(the)i(o\016cial)d(v)o(ersion.)23
+b(Second,)281 2590 y(I)16 b(can)f(send)i(y)o(ou)e(a)g(cop)o(y)h(\(under)h(sp)
+q(ecial)e(license\))i(of)e(the)h(GNU-clean)g(o\016cial)e(v)o(ersion)i(to)f(w)
+o(ork)g(on.)281 2640 y(This)f(will)e(allo)o(w)g(y)o(ou)i(to)g(ship)f(bac)o(k)
+h(y)o(our)g(c)o(hanges)h(as)e(\014les)i(rather)f(than)g(as)g(c)o(hange)h
+(sections.)177 2735 y(As)h(a)g(separate)h(p)q(oin)o(t)e(from)f(the)i(legal)f
+(issues,)h(I)g(am)e(lik)o(ely)g(to)i(turn)g(out)g(to)f(b)q(e)i(prett)o(y)f
+(pic)o(ky)f(ab)q(out)h(what)177 2785 y(mo)q(di\014cations)10
+b(I)j(will)d(incorp)q(orate)j(in)o(to)e(the)i(o\016cial)e(cop)o(y)m(.)17
+b(Whether)c(a)f(mo)q(di\014cation)e(will)h(b)q(e)h(accepted)i(will)177
+2835 y(dep)q(end,)h(amongst)d(other)j(things,)e(on)h(the)g(follo)o(wing)d
+(criteria.)1042 2940 y(40)p eop
+%%Page: 41 42
+41 41 bop 239 42 a Fm(\017)21 b Fn(Do)q(es)11 b(the)g(mo)q(di\014cation)e
+(\014t)i(in)f(with)h(the)g(design)g(goals)f(of)g(F)m(unnelW)m(eb,)h(or)f(is)h
+(it)f(just)h(a)g(case)h(of)e(creeping)281 91 y(featurism?)239
+174 y Fm(\017)21 b Fn(Ho)o(w)13 b(w)o(ell)h(co)q(ded)g(is)g(the)h(mo)q
+(di\014cation?)h(W)m(ould)c(it)i(reduce)h(the)g(qualit)o(y)d(of)h(the)i(co)q
+(de?)239 257 y Fm(\017)21 b Fn(If)14 b(the)i(mo)q(di\014cation)d(c)o(hanges)i
+(F)m(unnelW)m(eb's)g(functionalit)o(y)m(,)d(is)j(this)g(a)g(desirable)g(c)o
+(hange?)22 b(Ho)o(w)14 b(will)281 307 y(it)f(impact)g(on)g(existing)h(users?)
+239 390 y Fm(\017)21 b Fn(W)m(ould)13 b(it)g(b)q(e)i(quic)o(k)o(er)f(for)g
+(me)f(to)h(mak)o(e)f(the)h(mo)q(di\014cation)e(m)o(yself)h(than)h(to)g(w)o
+(ork)f(out)h(ho)o(w)g(to)g(incor-)281 440 y(p)q(orate)g(the)h(submitted)e(mo)
+q(di\014cation?)177 556 y(It)g(is)f(m)o(y)f(goal)h(to)g(guard)h(the)g(in)o
+(tegrit)o(y)f(of)g(the)h(design)g(and)f(co)q(de)i(of)e(the)h(o\016cial)e(v)o
+(ersion)i(of)f(F)m(unnelW)m(eb)g(and)177 606 y(so)h(I)g(will)e(probably)h(b)q
+(e)h(rather)h(fussy)f(ab)q(out)f(what)h(I)f(regard)i(as)e(a)h(w)o(orth)o
+(while)f(mo)q(di\014cation.)j(I)e(do)f(not)h(wish)177 656 y(to)h(lose)g(con)o
+(trol)f(of)h(the)g(co)q(de,)g(either)h(tec)o(hnically)f(or)g(legally)m(.)177
+818 y Fe(3.8)70 b(A)23 b(GNU)f(V)-6 b(ersion?)177 934 y Fn(The)18
+b(con)o(trols)f(on)f(the)i(o\016cial)d(v)o(ersion)i(of)g(F)m(unnelW)m(eb)f
+(describ)q(ed)j(in)d(the)i(previous)f(section)h(will)d(ha)o(v)o(e)i(at)177
+984 y(most)d(a)h(minor)e(impact)h(on)h(F)m(unnelW)m(eb)g(dev)o(elopmen)o(t)f
+(if)h(F)m(unnelW)m(eb)f(already)h(serv)o(es)i(the)f(needs)g(of)f(most)177
+1034 y(of)k(its)h(users.)36 b(Ho)o(w)o(ev)o(er,)21 b(if)e(it)g(turns)h(out)g
+(that)f(F)m(unnelW)m(eb)g(is)h(b)q(oth)g(p)q(opular,)g Fh(and)g
+Fn(needs)h(widespread)177 1083 y(mo)q(di\014cations)13 b(and)h(enhancemen)o
+(ts,)h(then)g(the)g(o\016cial)e(feedbac)o(k)i(lo)q(op)e(describ)q(ed)j(in)e
+(the)h(previous)g(section)177 1133 y(will)e(b)q(ecome)g(un)o(w)o(ork)n(able,)
+g(and)h(there)h(will)d(b)q(e)j(a)e(GNU)h(break)o(out.)177 1208
+y(A)g Fk(GNU)i(break)o(out)c Fn(will)g(o)q(ccur)j(if)e(F)m(unnelW)m(eb)g
+(users)j(b)q(ecome)d(organized)h(enough)g(and)g(anno)o(y)o(ed)g(enough)177
+1258 y(\(at)20 b(the)h(o\016cial)d(dev)o(elopmen)o(t)h(cycle\))i(to)f(start)g
+(main)o(taining)d(a)j(coheren)o(t)h(v)o(ersion)f(of)f(F)m(unnelW)m(eb)h(that)
+177 1307 y(div)o(erges)f(from)d(the)j(o\016cial)e(v)o(ersion.)31
+b(If)18 b(a)g(GNU)g(break)o(out)g(o)q(ccurs,)i(I)e(w)o(ould)g(appreciate,)h
+(as)g(requested)177 1357 y(earlier,)14 b(that)g(a)f(di\013eren)o(t)i(name)e
+(and)h(\014le)f(extensions)i(b)q(e)g(c)o(hosen)g(for)e(the)i(div)o(erging)e
+(v)o(ersion.)177 1519 y Fe(3.9)70 b(Summary)177 1635 y Fn(Decen)o(tralized)21
+b(mo)q(di\014cations)d(to)i(a)f(programming)d(language)j(and)h(its)g
+(implemen)o(tatio)o(ns)e(can)i(seriously)177 1685 y(damage)12
+b(the)i(language's)f(p)q(ortabilit)o(y)f(and)i(seman)o(tic)e(clarit)o(y)m(.)
+17 b(Unfortunately)m(,)c(there)i(is)e(a)g(tension)h(b)q(et)o(w)o(een)177
+1735 y(cen)o(tralizing)c(con)o(trol)g(of)f(a)h(programmi)o(ng)d(language)i
+(and)h(pro)o(viding)f(source)i(co)q(de)g(securit)o(y)g(to)f(nerv)o(ous)h
+(users.)177 1785 y(In)k(F)m(unnelW)m(eb,)e(this)i(trade-o\013)g(has)g(b)q
+(een)g(resolv)o(ed)g(to)g(some)e(exten)o(t)j(b)o(y)e(releasing)h(the)g
+(source)h(co)q(de)f(along)177 1835 y(with)h(a)g(request)i(that)e(if)g(the)g
+(functionalit)o(y)f(of)h(the)h(program)d(is)i(mo)q(di\014ed,)f(that)i(the)g
+(program's)d(name)h(b)q(e)177 1884 y(c)o(hanged)d(and)g(a)f(di\013eren)o(t)i
+(\014le)e(extension)i(b)q(e)f(c)o(hosen)h(for)e(input)h(\014les)g(created)h
+(under)f(the)h(mo)q(di\014ed)d(program.)177 1934 y(The)k(author)g(of)f(F)m
+(unnelW)m(eb)g(has)g(decided)i(to)e(main)o(tain)e(an)i(o\016cial)g(v)o
+(ersion)g(of)g(F)m(unnelW)m(eb)g(o)o(v)o(er)h(whic)o(h)f(he)177
+1984 y(will)h(o)o(wn)h(cop)o(yrigh)o(t,)g(but)h(whic)o(h)f(he)h(will)e
+(release)j(under)f(GNU)f(license)i(from)c(time)h(to)i(time.)21
+b(This)16 b(means)177 2034 y(that)g(cop)o(yrigh)o(t)f(on)h(all)e(c)o(hanges)j
+(to)e(F)m(unnelW)m(eb)h(m)o(ust)e(b)q(e)j(signed)f(o)o(v)o(er)f(to)h(the)g
+(author)g(b)q(efore)h(they)f(ha)o(v)o(e)177 2084 y(a)g(c)o(hance)i(of)e(b)q
+(eing)h(incorp)q(orated)g(in)f(the)h(o\016cial)e(v)o(ersion.)27
+b(Finally)m(,)14 b(it)j(is)f(p)q(ossible)h(that)g(this)f(reluctance)177
+2133 y(of)e(the)h(author)f(to)g(remo)o(v)o(e)f(his)h(cop)o(yrigh)o(ted)h(v)o
+(ersion)f(from)e(the)j(dev)o(elopmen)o(t)e(cycle)i(of)f(the)h(o\016cial)e(v)o
+(ersion)177 2183 y(will)e(result)j(in)e(a)g(GNU)h(break)o(out)g(in)f(whic)o
+(h)g(a)h(div)o(erging)e(GNU)i(v)o(ersion)f(of)h(F)m(unnelW)m(eb)f(will)f(b)q
+(e)i(main)o(tained)177 2233 y(b)o(y)h(the)g(GNU)g(comm)o(unit)o(y)m(.)h(The)f
+(author)g(hop)q(es)h(this)f(w)o(on't)f(b)q(e)i(necessary)h(and)e(requests,)h
+(if)e(this)h(happ)q(ens,)177 2283 y(that)g(the)h(div)o(erging)e(GNU)g(v)o
+(ersion)h(b)q(e)h(renamed.)1042 2940 y(41)p eop
+%%Page: 42 43
+42 42 bop 1042 2940 a Fn(42)p eop
+%%Page: 43 44
+43 43 bop 177 376 a Ff(Chapter)34 b(4)177 607 y Fl(F)-10 b(unnelW)g(eb)41
+b(F)-10 b(uture)177 847 y Fn(Previous)13 b(c)o(hapters)h(ha)o(v)o(e)f
+(explained)f(the)h(design)g(of)f(F)m(unnelW)m(eb)g(and)h(giv)o(en)f(reasons)i
+(for)e(wh)o(y)g(it)h(is)f(the)h(w)o(a)o(y)177 897 y(it)i(is.)24
+b(This)15 b(c)o(hapter)i(go)q(es)f(through)g(eac)o(h)g(of)f(the)i(asp)q(ects)
+g(of)e(F)m(unnelW)m(eb,)g(and)h(explores)g(their)g(problems,)177
+946 y(ho)o(w)e(they)g(can)g(b)q(e)h(solv)o(ed,)e(and)h(lists)f(opp)q
+(ortunities)i(for)e(impro)o(v)o(emen)o(t.)177 1107 y Fe(4.1)70
+b(Do)r(cumen)n(tation)177 1221 y Fk(An)12 b(o\016cial)f(example:)16
+b Fn(A)11 b(o\016cial)e(example)h(program)f(written)j(using)e(F)m(unnelW)m
+(eb)h(should)f(b)q(e)i(constructed)177 1271 y(and)i(made)f(a)o(v)n(ailable.)
+177 1344 y Fk(Index)20 b(program:)26 b Fn(In)19 b(order)f(to)h(t)o(yp)q(eset)
+g(the)g(do)q(cumen)o(tation,)f(a)g(p)q(ortable)g(index)g(sorting)g(program)f
+(is)177 1394 y(required.)31 b(One)19 b(should)e(b)q(e)i(written)f(and)g
+(added)g(to)g(the)g(distribution)g(kit.)29 b(P)o(erhaps)19
+b(this)f(could)g(b)q(e)g(the)177 1444 y(o\016cial)13 b(example!)177
+1604 y Fe(4.2)70 b(Command)22 b(Line)g(In)n(terface)177 1719
+y Fk(Bu\013er)14 b(length:)i Fn(Curren)o(tly)d(the)h(F)m(unnelW)m(eb)e(shell)
+h(uses)i(the)e Fi(COMLINE)p 1368 1719 14 2 v 15 w(MAX)f Fn(constan)o(t)h(to)g
+(size)h(its)f(in)o(ternal)177 1768 y(command)h(line)h(bu\013ers.)27
+b(This)16 b(is)g(un)o(tenable.)25 b(The)17 b(maxim)n(um)12
+b(length)k(of)g(a)g(shell)g(command)d(line)j(should)177 1818
+y(not)e(b)q(e)g(mac)o(hine)f(dep)q(enden)o(t.)177 1892 y Fk(An)o(tiquated)h
+(F)l(eatures:)k Fn(As)d(the)g(F)m(unnelW)m(eb)e(language)h(dev)o(elops,)g(it)
+g(is)g(lik)o(ely)f(that)i(some)e(c)o(hanges)i(will)177 1941
+y(ha)o(v)o(e)g(to)g(b)q(e)h(made)d(that)i(will)f(render)j(one)e(or)g(more)f
+(language)g(constructs)j(obsolete.)22 b(When)15 b(this)g(happ)q(ens,)177
+1991 y(it)e(ma)o(y)d(b)q(e)k(necessary)h(to)d(add)h(a)g(command)d(line)i
+(option)g(that)h(has)g(the)g(p)q(o)o(w)o(er)g(to)g(turn)g(on)g(and)f(o\013)h
+(w)o(arnings)177 2041 y(or)h(errors)h(\015agging)e(an)o(tiquated)g(features.)
+177 2201 y Fe(4.3)70 b(Shell)21 b(In)n(terpreter)177 2316 y
+Fk(SET)l(ALL)f(command:)25 b Fn(When)17 b(writing)g(F)m(unnelW)m(eb)g
+(scripts,)i(it)e(is)h(sometimes)e(desirable)i(to)f(set)h Fh(al)r(l)f
+Fn(of)177 2366 y(F)m(unnelW)m(eb's)f(options)h(to)f(some)g(particular)h(v)n
+(alue)f(so)h(that)f(the)i(script)f(is)g(not)f(vulnerable)h(to)g(c)o(hanges)g
+(in)177 2415 y(F)m(unnelW)m(eb's)e(default)h(v)n(alues)f(whic)o(h)h(migh)o(t)
+e(o)q(ccur)i(from)e(time)h(to)h(time.)22 b(T)m(o)15 b(this)h(end,)g(it)g(ma)o
+(y)d(b)q(e)k(w)o(orth)177 2465 y(creating)c(a)f(\\)p Fi(SETALL)p
+Fn(")f(command)f(that)i(is)h(iden)o(tical)e(to)i(the)g(\\)p
+Fi(SET)p Fn(")e(command)f(except)k(that)e(it)g(will)f(generate)177
+2515 y(an)j(error)h(if)e(the)h(v)n(alue)f(of)h(an)f(option)g(is)h(not)g(sp)q
+(eci\014ed)h(explicitly)m(.)177 2588 y Fk(Recursion)f(test:)j
+Fn(A)d(test)h(should)f(b)q(e)g(added)h(to)e(test)i(for)f(recursiv)o(e)h(in)o
+(v)o(o)q(cation)e(in)g(a)h(shellscript.)177 2662 y Fk(Diagnostic)e(coun)o
+(ting:)j Fn(The)e(co)q(de)g(for)f(coun)o(ting)g(diagnostics)h(in)f(the)h
+(script)g(in)o(terpreter)h(is)f(rather)g(messy)177 2711 y(and)h(p)q(erhaps)h
+(ev)o(en)f(buggy)m(.)k(It)13 b(should)h(b)q(e)h(cleaned)f(up)g(and)g(commen)o
+(ted.)177 2785 y Fk(Argumen)o(t)i(coun)o(ting:)j Fn(In)c(the)h
+Fi(command.c)e Fn(mo)q(dule,)g(there)j(is)e(a)g(v)n(ariable)g(that)g(coun)o
+(ts)h(the)h(argumen)o(ts)177 2835 y(to)d(a)g(command.)j(Curren)o(tly)d(it)g
+(tak)o(es)h(the)g(v)n(alue)e(of)h(the)h(n)o(um)o(b)q(er)e(of)h(parameters)g
+(including)g(the)h(command)1042 2940 y(43)p eop
+%%Page: 44 45
+44 44 bop 177 42 a Fn(v)o(erb.)19 b(This)13 b(has)g(turned)i(out)e(to)g(mak)o
+(e)f(the)i(co)q(de)g(less)h(readable.)j(It)13 b(should)g(b)q(e)h(c)o(hanged)g
+(to)f(b)q(e)h(the)g(n)o(um)o(b)q(er)177 91 y(of)f(argumen)o(ts)h(to)f(the)i
+(command)c(v)o(erb.)177 168 y Fk(Mak)o(e)k(facilit)o(y:)h Fn(It)d(ma)o(y)e(b)
+q(e)i(w)o(orth)g(building)f(some)g(sort)h(of)f(mak)o(e)g(facilit)o(y)f(in)o
+(to)h(the)i(script)g(language)e(so)h(as)177 218 y(to)h(supp)q(ort)h(mac)o
+(hines)e(suc)o(h)h(as)g(the)h(Macin)o(tosh)f(that)f(do)h(not)g(already)f(ha)o
+(v)o(e)h(this)g(facilit)o(y)m(.)177 295 y Fk(Signature)d(\014le:)17
+b Fn(One)c(problem)f(with)g(using)g(F)m(unnelW)m(eb)g(in)g(conjunction)g
+(with)h(an)f(external)h Fi(Make)e Fn(facilit)o(y)177 345 y(is)k(that)h(a)f
+(user)h(migh)o(t)d(c)o(hange)j(a)f(F)m(unnelW)m(eb)g(source)h(\014le)g
+(without)f(making)e(c)o(hanges)j(that)f(will)f(a\013ect)i(the)177
+395 y(\014les)g(that)f(it)f(generates.)24 b(If)14 b(F)m(unnelW)m(eb)h(is)g
+(then)h(run)f(and)g(the)h(\\)p Fi(+D)p Fn(")e(option)g(is)h(on,)g(then)g(the)
+h(output)f(\014les)177 445 y(will)g(b)q(e)i(deleted)h(\(to)f(a)o(v)o(oid)e
+(further)i Fi(Make)f Fn(propagations\).)25 b(If)17 b Fi(Make)e
+Fn(then)i(has)g(a)f(pro)q(duction)h(linking)e(the)177 495 y
+Fi(.fw)d Fn(\014le)h(to)g(its)g(output)g(\014les,)g(then)g(it)g(ma)o(y)e
+(conclude)i(that)g(the)g(output)g(\014les)h(are)f(still)f(out)h(of)f(date.)18
+b(T)m(o)12 b(solv)o(e)177 544 y(the)17 b(problem,)e(F)m(unnelW)m(eb)h(could)h
+(b)q(e)g(c)o(hanged)f(to)h(write)f(a)g Fi(.sig)g Fn(\014le)g(whenev)o(er)i
+(it)e(pro)q(cesses)j(a)e Fi(.fw)e Fn(\014le.)177 594 y(The)g
+Fi(Make)e Fn(pro)q(duction)h(could)f(then)i(b)q(e)f(wired)h(up)f(to)f(link)g
+(the)i Fi(.fw)e Fn(\014le)h(to)g(the)g Fi(.sig)f Fn(\014le)h(instead)g(of)f
+(to)h(the)177 644 y(output)g(\014les.)177 814 y Fe(4.4)70 b(Language)24
+b(Design)177 933 y Fn(Some)13 b(prop)q(osed)i(c)o(hanges)g(to)f(F)m(unnelW)m
+(eb)f(do)h(not)g(corresp)q(ond)i(to)e(an)o(y)f(particular)h(comp)q(onen)o(t)g
+(of)f(F)m(unnel-)177 983 y(W)m(eb)h(and)f(are)i(really)e(to)h(do)f(with)h
+(the)g(design)h(of)e(the)h(input)g(language.)177 1060 y Fk(Output)c(or)h
+(\014le?:)16 b Fn(The)11 b(\\)p Fi(@O)p Fn(")e(sp)q(ecial)i(sequence)i(for)d
+(de\014ning)h(an)f(output)h(\014le)g(is)f(somewhat)g(non-mnemoni)o(c)177
+1110 y(and)k(can)g(b)q(e)g(confused)h(with)f(zero)h(\(\\)p
+Fi(0)p Fn("\).)i(P)o(erhaps)e(it)e(should)h(b)q(e)h(replaced)g(b)o(y)e(the)i
+(\\)p Fi(@F)p Fn(")e(sequence.)177 1187 y Fk(Syn)o(tax)j(of)h(section)f
+(names:)k Fn(Curren)o(tly)15 b(section)h(names)e(use)i(the)g(same)e(syn)o
+(tax)h(as)g(macro)f(names.)21 b(F)m(or)177 1236 y(example)16
+b(\\)p Fi(@<Sloth@>)p Fn(".)25 b(It)17 b(can)h(b)q(e)f(argued)h(that)f(angle)
+f(brac)o(k)o(ets)i(should)f(b)q(e)h(reserv)o(ed)h(only)d(for)h(macro)177
+1286 y(names)f(and)h(that)f(some)g(other)i(syn)o(tax)e(should)h(b)q(e)g
+(found)g(for)f(delimiting)e(section)j(names.)26 b(This)17 b(is)f(not)h(a)177
+1336 y(clear)12 b(issue.)18 b(It)11 b(could)h(also)e(b)q(e)j(argued)e(that)h
+(they)g(are)g(b)q(oth)f(names,)g(and)g(that)g(b)q(ecause)j(sections)e(can)g
+(inherit)177 1386 y(their)i(names)g(from)e(the)i(macros)f(they)i(con)o(tain,)
+e(that)g(the)i(names)e(are)h(of)g(the)g(same)f(\\t)o(yp)q(e".)177
+1463 y Fk(One)i(macro)f(p)q(er)h(section:)i Fn(One)d(particular)f(st)o(yle)g
+(of)g(using)g(F)m(unnelW)m(eb)f(is)h(to)g(ha)o(v)o(e)g(at)h(most)e(one)h
+(macro)177 1513 y(de\014nition)f(p)q(er)h(section.)19 b(It)12
+b(ma)o(y)f(b)q(e)i(w)o(orth)f(adding)g(a)g(pragma)e(that)j(instructs)h(F)m
+(unnelW)m(eb)d(to)i(enforce)g(this.)177 1590 y Fk(Should)i(@)p
+Fm(f)i Fk(suppress)e(EOL?:)20 b Fn(When)15 b(de\014ning)g(a)g(macro)f(in)h(F)
+m(unnelW)m(eb,)f(it)h(seems)g(to)g(b)q(e)h(rule)f(rather)177
+1640 y(than)f(the)h(exception)f(that)g(the)h(\\)p Fi(@)p Fm(f)p
+Fn(")e(b)q(e)h(follo)o(w)o(ed)f(b)o(y)g(\\)p Fi(@-)p Fn(".)18
+b(This)13 b(suppresses)k(the)e(EOL)f(on)g(the)g(de\014nition)177
+1690 y(line,)e(allo)o(wing)f(the)i(\014rst)h(line)e(of)h(the)g(macro)f(to)g
+(b)q(e)i(placed)f(immedia)o(tely)d(ab)q(o)o(v)o(e)j(and)f(in)h(line)f(with)h
+(the)g(other)177 1739 y(lines)k(without)g(in)o(tro)q(ducing)g(an)f(EOL)i(at)f
+(the)g(start)h(of)f(the)g(macro)f(text.)28 b(One)18 b(option)e(is)h(to)g(in)o
+(tro)q(duce)h(a)177 1789 y(pragma)12 b(to)i(determine)g(whether)h(to)f
+(suppress)i(EOLs)e(follo)o(wing)e(\\)p Fi(@)p Fm(f)p Fn(".)177
+1866 y Fk(Pragma)20 b(syn)o(tax:)26 b Fn(It)18 b(is)g(not)g(clear)g(ho)o(w)g
+(\\lo)q(ose")f(the)i(syn)o(tax)f(of)f(pragmas)g(should)g(b)q(e.)31
+b(P)o(erhaps)19 b(they)177 1916 y(should)14 b(b)q(e)g(case)h(insensitiv)o(e.)
+177 1993 y Fk(Conditional)o(s:)23 b Fn(Dep)q(ending)17 b(on)g(demand,)g(it)g
+(ma)o(y)e(b)q(e)j(w)o(orth)g(rein)o(tro)q(ducing)f(some)g(sort)g(of)g
+(conditional)177 2043 y(feature)g(in)o(to)f(F)m(unnelW)m(eb.)24
+b(Ho)o(w)o(ev)o(er,)17 b(it)e(w)o(ould)h(ha)o(v)o(e)g(to)g(b)q(e)h(v)o(ery)f
+(simple)f(to)h(comp)q(ete)g(with)g(the)g(v)n(arious)177 2093
+y(w)o(a)o(ys)e(in)f(whic)o(h)h(conditionals)f(can)h(already)f(b)q(e)i(fudged)
+f(within)f(F)m(unnelW)m(eb)g(as)h(it)g(stands.)177 2170 y Fk(File)h(mark)o
+(ers:)20 b Fn(It)14 b(migh)o(t)f(b)q(e)i(w)o(orth)g(mo)q(difying)d(the)j
+(language)f(so)h(that)f(a)h(sp)q(ecial)g(syn)o(tactical)f(mark)o(er)g(is)177
+2220 y(required)d(at)f(the)h(start)g(and)f(end)g(of)g(\014les.)17
+b(This)10 b(will)f(assist)h(in)g(detecting)h(truncations)g(and)f(other)h
+(corruptions.)177 2297 y Fk(F)l(ormal)i(parameter)g(lists:)j
+Fn(It)d(migh)o(t)d(b)q(e)j(w)o(orth)g(c)o(hanging)f(o)o(v)o(er)g(to)h(a)f
+(syn)o(tax)g(for)h(formal)d(parameter)i(lists)177 2347 y(that)k(do)q(es)h
+(not)g(require)g(the)f Fi(@\()g Fn(and)g Fi(@\))p Fn(.)25 b(Ho)o(w)o(ev)o
+(er,)17 b(they)f(could)g(b)q(e)h(retained)g(as)f(optional)f(for)h(bac)o(kw)o
+(ard)177 2396 y(compatibilit)o(y)m(.)177 2566 y Fe(4.5)70 b(Scanner/Mapp)r
+(er)177 2685 y Fk(All)17 b(non-con)o(tiguo)o(us)e(mappings:)21
+b Fn(Curren)o(tly)c(F)m(unnelW)m(eb)e(requires)i(that)g(all)e(input)g
+(\014les)i(b)q(e)g(mapp)q(ed)177 2735 y(in)o(to)e(a)g(con)o(tiguous)g(lump)f
+(of)h(memory)m(.)20 b(This)15 b(caused)i(problems)e(for)g(t)o(w)o(o)g
+(reasons.)24 b(First,)15 b(to)h(do)f(this,)h(one)177 2785 y(has)c(to)g(allo)q
+(cate)f(the)h(memory)d(\014rst,)k(and)e(to)h(do)f(that,)h(y)o(ou)f(ha)o(v)o
+(e)h(to)f(kno)o(w)g(ho)o(w)h(long)f(the)h(\014le)g(is,)f(and)h(it)f(turns)177
+2835 y(out)j(that)g(\014nding)g(out)g(the)g(length)g(of)f(a)h(\014le)g(in)g
+(a)f(p)q(ortable)i(manner)e(is)h(v)o(ery)g(ine\016cien)o(t.)k(Second,)d
+(although)1042 2940 y(44)p eop
+%%Page: 45 46
+45 45 bop 177 42 a Fn(IBM)14 b(PC)f(compatibles)f(ma)o(y)f(ha)o(v)o(e)i
+(megab)o(ytes)g(of)g(memory)m(,)d(it)i(is)i(segmen)o(ted)f(in)o(to)f(blo)q(c)
+o(ks)i(of)e(at)h(most)f(64K.)177 91 y(This)i(means)f(that)h(F)m(unnelW)m(eb)f
+(curren)o(tly)i(cannot)f(read)h(a)e(\014le)h(longer)g(than)g(64K)f(on)h(a)f
+(PC.)177 168 y(These)j(problems)d(could)i(b)q(e)g(a)o(v)o(oided)e(if)h(the)h
+(mapp)q(er)f(and)g(scanner)i(w)o(ere)f(reorganized)g(to)f(allo)o(w)f(input)h
+(\014les)177 218 y(to)g(b)q(e)g(read)h(in)e(and)h(stored)h(as)f(a)f(link)o
+(ed)h(list)f(of)g(c)o(h)o(unks)i(of)e(text)h(rather)h(than)f(a)g(con)o
+(tiguous)f(blo)q(c)o(k.)177 295 y Fk(EOL)h(is)g(unsp)q(eci\014abl)o(e:)h
+Fn(F)m(unnelW)m(eb)d(uses)h(ASCI)q(I)g(c)o(haracter)h(decimal)d(ten)i(\(10\))
+f(in)o(ternally)f(to)h(represen)o(t)177 345 y(logical)g(end-of-line)g(and)h
+(is)g(curren)o(tly)h(organized)f(so)g(that)g(if)g(one)g(of)g(these)h(is)f
+(inserted)h(in)o(to)f(the)h(text)f(b)o(y)g(the)177 395 y(user)g(using)e(a)h
+(\\)p Fi(@^D\(10\))p Fn(",)d(it)j(will)e(b)q(e)i(written)h(out)e(as)h(a)f
+(logical)f(end)i(of)g(line,)f(rather)h(than)g(as)g(a)f(single)h(ASCI)q(I)177
+445 y(c)o(haracter)j(10.)j(This)c(should)f(b)q(e)i(\014xed.)177
+522 y Fk(Allo)o(w)g(mnemonics)f(for)i(unprin)n(tabl)o(es:)g
+Fn(F)m(unnelW)m(eb)e(allo)o(ws)f(users)j(to)e(insert)h(unprin)o(table)f(c)o
+(haracters)177 572 y(in)o(to)i(the)h(output)f(using)g(the)h(\\)p
+Fi(@^D\(ddd\))p Fn(")d(sp)q(ecial)i(sequence.)28 b(P)o(erhaps)17
+b(it)f(w)o(ould)f(b)q(e)i(c)o(hanged)g(so)f(that)g(it)177 622
+y(understands)g(ASCI)q(I)e(standard)g(mnemonics)e(suc)o(h)i(as)g(\\)p
+Fi(LF)p Fn(")f(as)h(w)o(ell)f(as)h(ASCI)q(I)h(n)o(um)o(b)q(ers.)177
+699 y Fk(V)l(ersion)h(pragma:)22 b Fn(A)16 b(\\)p Fi(version)p
+Fn(")e(pragma)g(should)h(b)q(e)i(added)f(that)g(allo)o(ws)e(the)j(user)g(to)e
+(sp)q(ecify)i(in)e(the)177 749 y(input)g(\014le)h(the)g(v)o(ersion)g(of)e(F)m
+(unnelW)m(eb)h(that)h(w)o(as)f(around)h(when)g(the)g(input)f(\014le)g(w)o(as)
+h(created.)24 b(A)o(t)16 b(a)f(later)177 799 y(date,)g(suc)o(h)h(a)e
+(construct)j(w)o(ould)d(b)q(e)i(v)o(ery)f(useful)g(for)f(determining)g(ho)o
+(w)h(an)f(input)h(\014le)g(should)g(b)q(e)g(up)q(dated)177
+848 y(if)e(the)i(F)m(unnelW)m(eb)e(language)g(has)h(c)o(hanged)g(b)q(et)o(w)o
+(een)i(v)o(ersions.)177 1018 y Fe(4.6)70 b(P)n(arser)177 1138
+y Fn(There)15 b(are)g(no)e(prop)q(osals)h(to)g(c)o(hange)g(the)h(parser)g
+(except)g(as)f(a)f(consequence)k(of)c(other)h(prop)q(osals.)177
+1308 y Fe(4.7)70 b(Analyser)177 1427 y Fk(Recursion)11 b(detection:)k
+Fn(Curren)o(tly)d(the)h(F)m(unnelW)m(eb)e(analyser)h(\015ags,)f(with)h(an)f
+(error,)i(all)e(macros)g(with)g(an)177 1477 y(in\014nite)g(expansion.)17
+b(This)12 b(w)o(ould)e(b)q(e)i(b)q(est)g(c)o(hanged)g(to)f(\015agging)f(all)g
+(macros)h(that)g(are)h(directly)g(or)f(indirectly)177 1526
+y(recursiv)o(e.)19 b(T)m(o)11 b(do)g(this,)g(T)m(arjan's)g(algorithm)p
+Fk([T)l(arjan72])d Fn(for)k(the)g(detection)g(of)f(strong)h(comp)q(onen)o(ts)
+f(should)177 1576 y(b)q(e)k(installed.)177 1653 y Fk(Once)h(only)g(macros:)k
+Fn(By)15 b(default)f(F)m(unnelW)m(eb)g(prev)o(en)o(ts)i(a)f(macro)e(from)g(b)
+q(eing)h(called)h(more)e(than)i(once)177 1703 y(unless)g(it)e(has)h(a)f(\\)p
+Fi(@M)p Fn(")g(asso)q(ciated)h(with)g(it.)j(Ho)o(w)o(ev)o(er,)d(F)m(unnelW)m
+(eb)f(do)q(es)i(allo)o(w)d(a)h(macro)g(that)g(calls)h(suc)o(h)g(a)177
+1753 y(macro)f(to)h(b)q(e)g(called)g(more)f(than)g(once.)19
+b(P)o(erhaps)c(this)f(\\lo)q(ophole")e(should)i(b)q(e)h(plugged)e(someho)o
+(w.)177 1923 y Fe(4.8)70 b(T)-6 b(angle)177 2042 y Fn(The)12
+b(T)m(angler)f(is)h(one)g(of)f(the)i(cleanest)g(comp)q(onen)o(ts)e(of)g(F)m
+(unnelW)m(eb,)g(as)h(basically)f(all)f(it)i(has)g(to)f(do)h(is)g(expand)177
+2092 y(some)h(v)o(ery)h(w)o(ell-de\014ned)h(macros.)177 2169
+y Fk(T)l(ext)23 b(inden)o(tati)o(on)o(:)28 b Fn(Curren)o(tly)21
+b(F)m(unnelW)m(eb)e(supp)q(orts)j Fh(no)f(indentation)g Fn(and)f
+Fh(blank)g(indentation)p Fn(.)38 b(A)177 2219 y(third)17 b(form)d(could)j(b)q
+(e)g(added)g(if)e(it)h(w)o(as)h(considered)g(necessary)m(.)28
+b Fh(T)m(ext)17 b(indentation)g Fn(is)f(the)h(same)f(as)g Fh(blank)177
+2269 y(indentation)g Fn(except)h(that)e(instead)g(of)g(inden)o(ting)f(with)h
+(blanks,)g(F)m(unnelW)m(eb)f(w)o(ould)g(inden)o(t)i(with)e(the)i(text)177
+2319 y(to)g(the)h(left)f(of)g(the)h(called)f(macro.)24 b(This)16
+b(facilit)o(y)f(could)h(b)q(e)h(useful)f(for)g(commen)o(ting)d(out)k(large)f
+(b)q(o)q(dies)g(of)177 2369 y(text)f(in)f(languages)h(that)f(do)h(not)f(ha)o
+(v)o(e)g(m)o(ulti-line)e(commen)o(ts)h(\(e.g.)20 b(Ada\).)g(A)15
+b(discussion)g(of)f(the)h(pros)g(and)177 2418 y(cons)g(of)e(this)h(form)e(of)
+h(inden)o(tation)h(app)q(ears)g(earlier.)177 2588 y Fe(4.9)70
+b(W)-6 b(ea)n(v)n(e)177 2708 y Fn(P)o(erhaps)15 b(F)m(unnelW)m(eb's)e(w)o
+(eak)o(est)i(asp)q(ect)g(is)f(its)g(t)o(yp)q(esetting)h(facilit)o(y)m(.)177
+2785 y Fk(Align)g(table)h(of)h(con)o(ten)o(ts:)i Fn(When)c(F)m(unnelW)m(eb)f
+(generates)j(a)e(table)g(of)g(con)o(ten)o(ts,)h(the)f(section)h(n)o(um)o(b)q
+(ers)177 2835 y(are)e(not)g(quite)g(aligned)f(with)h(the)g(start)h(of)e(the)h
+(con)o(trolling)f(heading)h(ab)q(o)o(v)o(e)f(them.)1042 2940
+y(45)p eop
+%%Page: 46 47
+46 46 bop 177 42 a Fk(T)o(yp)q(esetting)20 b(strength:)27 b
+Fn(It)20 b(should)g(b)q(e)g(p)q(ossible)g(to)f(sp)q(ecify)h(the)g(lev)o(el)g
+(of)f(t)o(yp)q(esetting)h(strength)h(for)177 91 y(headings)16
+b(so)g(that)h(short)f(do)q(cumen)o(ts)g(do)g(not)g(lo)q(ok)f(o)o(v)o(erdone)h
+(when)h(t)o(yp)q(eset.)26 b(A)16 b(new)h(pragma)d(w)o(ould)h(b)q(e)177
+141 y(go)q(o)q(d)f(for)f(this.)177 222 y Fk(T)o(yp)q(eset)f(a)h(p)q(ortion:)i
+Fn(Sometimes)9 b(it)i(is)g(desirable)g(to)g(t)o(yp)q(eset)i(just)e(a)g(p)q
+(ortion)g(of)f(a)h(program.)k(A)d(command)177 272 y(line)g(option)f(could)h
+(b)q(e)g(added)g(to)g(do)g(this.)17 b(The)c(option)e(could)g(accept)j(as)e
+(its)g(argumen)o(t,)e(a)i(string)g(con)o(taining)177 322 y(a)i(list)f(of)g
+(section)i(n)o(um)o(b)q(ers)f(or)f(heading)h(names.)177 403
+y Fk(Generic)g(t)o(yp)q(esetter)f(option:)j Fn(In)e(addition)e(to)i(building)
+e(in)h(a)g(n)o(um)o(b)q(er)g(of)g(di\013eren)o(t)i(v)o(ersions)f(of)f(W)m(ea)
+o(v)o(e,)177 453 y(one)k(for)g(eac)o(h)g(p)q(opular)g(t)o(yp)q(esetter,)i(it)
+e(w)o(ould)f(b)q(e)h(p)q(ossible)g(to)g(add)g(a)f(sp)q(ecial)h(generic)h
+(format)d(where)j(the)177 503 y(t)o(yp)q(eset)h(output)e(is)g(expressed)i(in)
+e(terms)g(of)f Fh(F)m(unnelWeb)j(macr)n(os)p Fn(.)27 b(The)18
+b(user)g(could)f(then)g(sp)q(ecify)h(macro)177 552 y(de\014nitions)13
+b(for)g(a)f(non-supp)q(orted)i(t)o(yp)q(esetter)i(and)d(run)g(the)g(output)h
+(through)f(F)m(unnelW)m(eb)f(T)m(angle)g(to)h(get)g(a)177 602
+y(t)o(yp)q(eset)j(\014le)d(in)h(a)f(format)f(suitable)i(for)g(the)g(unsupp)q
+(orted)i(t)o(yp)q(esetter.)177 683 y Fk(Suppression)e(of)k(include)d
+(\014les:)21 b Fn(It)16 b(should)g(b)q(e)g(p)q(ossible)h(to)e(sp)q(ecify)i
+(in)e(the)i(input)e(\014le)h(that)g(particular)177 733 y(included)e(\014les)g
+(not)f(app)q(ear)h(in)f(the)h(t)o(yp)q(eset)h(output.)j(Curren)o(tly)m(,)13
+b(the)h(fact)f(that)g(an)h(inclusion)e(has)i(o)q(ccurred)177
+783 y(is)h(not)h(ev)o(en)g(represen)o(ted)i(in)d(the)h(t)o(yp)q(eset)g
+(output.)23 b(Suppression)16 b(of)f(inclusions)g(is)g(particularly)g
+(necessary)177 833 y(where)g(a)f(library)f(of)g(macros)g(has)h(b)q(een)h
+(included)f(at)g(the)h(top)e(of)h(eac)o(h)g(of)f(a)h(group)g(of)f(source)i
+(\014les.)177 914 y Fk(Cross)f(reference)e(of)i(iden)o(ti)o(\014ers)o(:)h
+Fn(WEB)e(pro)o(vides)f(a)g(list)g(of)g(iden)o(ti\014ers)h(and)f(a)g(list)g
+(of)g(all)f(the)i(de\014nitions)177 964 y(in)h(whic)o(h)f(they)i(are)f(used.)
+19 b(A)14 b(similar)d(feature)k(could)f(b)q(e)g(added)g(to)g(F)m(unnelW)m
+(eb.)177 1045 y Fk(Supp)q(ort)k(for)h(non-prin)n(tab)o(les)o(:)k
+Fn(Curren)o(tly)18 b(F)m(unnelW)m(eb)f(do)q(es)h(not)f(pro)o(vide)h(supp)q
+(ort)g(for)f(t)o(yp)q(esetting)177 1095 y(the)e(sp)q(ecial)f(\\)p
+Fi(@^\(num\))p Fn(")e(sequences.)20 b(This)14 b(should)g(b)q(e)g(added.)177
+1176 y Fk(Supp)q(ort)g(for)i(@+)h(sequences:)i Fn(Curren)o(tly)c(W)m(ea)o(v)o
+(e)f(do)q(es)h(not)f(see)i(\\)p Fi(@+)p Fn(")e(sequences)j(as)d(suc)o(h.)21
+b(Instead)15 b(it)177 1225 y(p)q(erceiv)o(es)h(them)d(as)h(ordinary)f(EOLs.)
+19 b(Ho)o(w)o(ev)o(er,)14 b(there)h(are)g(argumen)o(ts)e(for)g(t)o(yp)q
+(esetting)i(them)e(sp)q(ecially)m(.)177 1306 y Fk(T)o(yp)q(eset)e(text)h(in)f
+(macro)h(b)q(o)q(dies:)j Fn(One)d(of)e(the)h(m)o(uc)o(h-lo)o(v)o(ed)e
+(features)i(of)f(WEB)h(is)g(the)g(w)o(a)o(y)f(that)h(it)f(allo)o(ws)177
+1356 y(the)j(user)h(to)e(switc)o(h)h(recursiv)o(ely)g(b)q(et)o(w)o(een)h(do)q
+(cumen)o(t)e(and)g(program)f(formats.)16 b(F)m(unnelW)m(eb)c(do)q(es)h(not)f
+(allo)o(w)177 1406 y(this,)18 b(but)g(should.)29 b(In)17 b(F)m(unnelW)m(eb,)h
+(the)g(delimiters)f(\\)p Fi(@)p Fm(f)p Fn(")f(and)i(\\)p Fi(@)p
+Fm(g)p Fn(")e(are)i(already)f(used)i(consisten)o(tly)f(to)177
+1456 y(delimit)g(macro)g(text.)37 b(The)20 b(\\)p Fi(@[)p Fn(")f(and)g(\\)p
+Fi(@])p Fn(")g(sequences)j(ha)o(v)o(e)e(b)q(een)h(reserv)o(ed)h(for)d(the)i
+(delimitation)16 b(of)177 1506 y(do)q(cumen)o(tation)d(text.)177
+1587 y Fk(Non-tt)h(t)o(yp)q(esetting:)i Fn(The)d(curren)o(t)i(v)o(ersion)f
+(of)f(F)m(unnelW)m(eb)g(sets)i(all)d(its)h(macro)f(text)i(in)f
+Fi(tt)22 b(font)p Fn(.)17 b(This)177 1637 y(is)d(b)q(oth)g(a)f(blessing)h
+(and)g(a)g(curse.)19 b(It)14 b(is)g(a)f(blessing)h(b)q(ecause)i(it)d
+(connects)j(the)e(reader)h(directly)f(to)g(the)g(co)q(de,)177
+1686 y(with)g(no)g(complicated)f(in)o(termediary)m(.)k(It)d(is)g(a)g(curse)i
+(b)q(ecause)g(it)e(lo)q(oks)f(ugly)h(compared)f(to)h(the)h(b)q(eautifully)177
+1736 y(t)o(yp)q(eset)h(programs)c(pro)q(duced)j(b)o(y)f(other)g(literate)h
+(programmi)o(ng)c(to)q(ols.)177 1817 y(The)20 b(di\016cult)o(y)e(with)g
+(adding)g(suc)o(h)i(b)q(eautiful)e(t)o(yp)q(esetting)i(is)f(that)g(it)g(is)g
+(necessarily)h(language-sp)q(eci\014c.)177 1867 y(Keyw)o(ords)15
+b(and)f(syn)o(tax)g(di\013er)g(from)e(language)i(to)f(language)g(and)h(it)g
+(w)o(ould)f(not)h(b)q(e)h(easy)f(to)g(come)f(up)h(with)177
+1917 y(a)g(set)h(of)e(language)g(indep)q(enden)o(t)i(rules.)177
+1998 y(One)k(approac)o(h)g(is)f(to)g(write)g(a)h(set)g(of)e(W)m(ea)o(v)o(e)h
+(bac)o(k-ends,)i(one)e(for)g(eac)o(h)h(language.)31 b(Another)19
+b(approac)o(h)177 2048 y(is)e(to)g Fh(gener)n(ate)f Fn(bac)o(k)h(ends.)28
+b(This)17 b(is)g(the)g(approac)o(h)g(tak)o(en)g(in)f(the)i
+Fh(Spider)f Fn(system)p Fk([Ramsey89])p Fn(.)26 b(In)17 b(the)177
+2098 y Fh(Spider)f Fn(system,)g(the)h(programmer)d(writes)i(pro)q(duction)h
+(rules)f(for)g(con)o(v)o(erting)g(lexical)f(comp)q(onen)o(ts)h(of)f(the)177
+2148 y(program)f(text)h(in)o(to)g(t)o(yp)q(esetter)i(instructions.)22
+b(The)16 b Fh(Spider)f Fn(program)e(reads)j(these)h(rules)e(and)g(generates)i
+(a)177 2197 y(new)d(v)o(ersion)h(of)e(WEB)h(suited)g(for)g(the)g(target)h
+(language.)177 2278 y(F)m(or)j(F)m(unnelW)m(eb)g(a)g(sligh)o(tly)f
+(di\013eren)o(t)j(system)e(is)g(prop)q(osed)i(in)e(whic)o(h)g(Spider-lik)o(e)
+g(rules)h(app)q(ear)g(in)f(the)177 2328 y(input)e(\014le)h(and)f(are)h(used)h
+(directly)e(b)o(y)h(W)m(ea)o(v)o(e)f(to)g(p)q(erform)g(the)h(t)o(yp)q
+(esetting.)27 b(An)16 b(in)o(termediate)g(abstract)177 2378
+y(t)o(yp)q(esetting)d(language)e(could)h(b)q(e)h(used)g(so)f(that)g(the)h
+(pro)q(ductions)f(can)h(b)q(e)f(made)f(language)g(sp)q(eci\014c,)j(but)e(not)
+177 2428 y(t)o(yp)q(esetter)k(sp)q(eci\014c.)177 2610 y Fe(4.10)70
+b(Lister)177 2735 y Fk(Glue)17 b(factor:)23 b Fn(A)16 b(glue)g(factor)g
+(could)g(b)q(e)h(added)g(that)f(determines)h(ho)o(w)f(man)o(y)e(lines)i(can)h
+(b)q(e)g(in)e(b)q(et)o(w)o(een)177 2785 y(t)o(w)o(o)f(diagnostics)g(in)f(the)
+i(listing)e(b)q(efore)i(the)f(t)o(w)o(o)g(groups)g(of)g(lines)g(are)g(joined)
+g(together)h(in)e(the)i(listing)e(with)177 2835 y(no)h(in)o(terv)o(ening)g
+(ellipsis.)1042 2940 y(46)p eop
+%%Page: 47 48
+47 47 bop 177 42 a Fe(4.11)70 b(Diagnostics)177 157 y Fk(Advisory)16
+b(information)o(:)j Fn(Some)13 b(of)i(F)m(unnelW)m(eb's)g(diagnostics)f(pro)o
+(vide)h(a)g(detailed)g(explanatory)g(para-)177 207 y(graph.)i(While)11
+b(this)h(information)c(migh)o(t)i(b)q(e)i(useful)g(the)g(\014rst)g(time,)f
+(it)g(has)h(the)g(capacit)o(y)f(to)h(clog)f(up)h(a)f(listing)177
+257 y(\014le)k(if)f(the)h(user)h(has)f(made)f(the)h(same)f(error)i(man)o(y)d
+(times.)20 b(T)m(o)14 b(solv)o(e)g(this)h(problem,)e(F)m(unnelW)m(eb)i(could)
+f(b)q(e)177 307 y(mo)q(di\014ed)f(so)h(that)g(suc)o(h)g(explanations)f(are)i
+(only)e(displa)o(y)o(ed)g(the)i(\014rst)f(time)f(the)h(error)h(o)q(ccurs.)177
+382 y Fk(Ab)q(ort)g(after)f(n)h(errors:)i Fn(A)d(facilit)o(y)e(could)h(b)q(e)
+h(added)g(to)f(prev)o(en)o(t)i(F)m(unnelW)m(eb's)e(scanning,)g(parsing,)g
+(and)177 431 y(analysing)g(phases)i(from)d(con)o(tin)o(uing)h(if)g(a)g
+(certain)i(n)o(um)o(b)q(er)e(of)g(errors)i(ha)o(v)o(e)f(already)g(b)q(een)h
+(issued.)177 594 y Fe(4.12)70 b(Sp)r(eed)177 709 y Fk(Measuremen)o(t)11
+b(of)i(sp)q(eed:)k Fn(Although)11 b(F)m(unnelW)m(eb)g(can)h(generate)h(a)e
+(breakdo)o(wn)h(of)f(where)i(it)e(is)g(sp)q(ending)177 759
+y(its)j(time,)e(it)i(do)q(es)g(not)g(giv)o(e)f(a)h(\014nal)f(rating)h(in)f
+(lines)h(p)q(er)h(min)o(ute.)h(This)e(should)g(b)q(e)g(added.)177
+834 y Fk(Find)19 b(the)h(hot)f(sp)q(ots:)26 b Fn(Although)17
+b(F)m(unnelW)m(eb)h(has)g(b)q(een)h(designed)g(to)e(allo)o(w)g(high)g(sp)q
+(eed,)j(not)e(m)o(uc)o(h)177 884 y(e\013ort)d(has)f(so)g(far)f(b)q(een)i
+(made)e(to)h(mak)o(e)e(it)i(fast.)k(This)13 b(should)h(b)q(e)h(done.)177
+958 y Fk(Change)i(some)f(declarations:)i Fn(F)m(unnelW)m(eb)c(is)g(full)g(of)
+g(v)n(ariable)g(declarations)h(where)h(the)f(v)n(ariables)f(are)177
+1008 y(wider)g(than)g(they)h(need)f(b)q(e.)19 b(Replacing)13
+b(these)i(migh)o(t)d(sp)q(eed)k(it)d(up.)177 1170 y Fe(4.13)70
+b(Correctness)177 1286 y Fk(Bounds)17 b(analysis:)23 b Fn(Not)16
+b(m)o(uc)o(h)f(e\013ort)j(has)e(gone)h(in)o(to)f(the)h(design)g(of)f(F)m
+(unnelW)m(eb's)f(input)i(b)q(oundaries.)177 1336 y(An)12 b(analysis)f(should)
+g(b)q(e)h(made)f(of)g(F)m(unnelW)m(eb's)g(b)q(eha)o(viour)g(when)h(the)h
+(follo)o(wing)c(quan)o(tities)i(are)h(stretc)o(hed:)239 1452
+y Fm(\017)21 b Fn(Input)14 b(line)g(length.)239 1535 y Fm(\017)21
+b Fn(Input)14 b(\014le)g(size.)239 1618 y Fm(\017)21 b Fn(Num)o(b)q(er)13
+b(of)h(macros.)239 1701 y Fm(\017)21 b Fn(Length)14 b(of)f(macro.)177
+1818 y(In)h(particular,)f(F)m(unnelW)m(eb's)g(b)q(eha)o(viour)h(at)g(32K)g
+(and)f(64K)h(b)q(oundaries)g(should)g(b)q(e)g(observ)o(ed.)177
+1892 y Fk(Stac)o(k)k(detection:)i Fn(Macin)o(tosh)c(THINK-C)g(pro)o(vides)g
+(just)h(6K)f(of)f(memory)e(for)j(the)h(stac)o(k.)24 b(It)16
+b(migh)o(t)e(b)q(e)177 1942 y(w)o(orth)g(adding)f(c)o(hec)o(ks)i(to)f(mak)o
+(e)e(sure)j(that)f(the)h(stac)o(k)f(is)g(not)g(b)q(eing)g(blo)o(wn.)177
+2104 y Fe(4.14)70 b(T)-6 b(est)22 b(Suite)177 2220 y Fn(The)14
+b(follo)o(wing)e(tests)j(should)f(b)q(e)g(added)g(to)g(the)h(test)g(suite:)
+177 2337 y Fi(Lister)177 2386 y(------)243 2436 y(LR01:)20
+b(Test)h(with)g(a)h(full)f(listing)f(with)h(no)g(diagnostics.)243
+2486 y(LR02:)f(Test)h(with)g(a)h(full)f(listing)f(with)h(diagnostics.)243
+2536 y(LR03:)f(Test)h(with)g(an)h(abbreviated)d(listing)h(with)h(no)h
+(diagnostics.)243 2586 y(LR04:)e(Test)h(with)g(an)h(abbreviated)d(listing)h
+(with)h(diagnostics.)243 2635 y(LR05:)f(Test)h(error)g(context)f(system)h
+(with)g(nearby)f(diagnostics.)177 2735 y(Boundary)g(Cases)177
+2785 y(--------------)177 2835 y(Static)h(analysis)f(might)h(preclude)f(the)h
+(need)g(for)g(most)g(of)g(these)g(tests.)1042 2940 y Fn(47)p
+eop
+%%Page: 48 49
+48 48 bop 243 42 a Fi(BC01:)20 b(Test)h(what)g(happens)g(when)g(memory)f
+(runs)h(out.)243 91 y(BC02:)f(Test)h(on)h(a)f(file)g(with)g(a)h(single)e
+(line)h(of)h(a)f(megabyte.)243 141 y(BC03:)f(Test)h(on)h(a)f(file)g(of)h(a)f
+(megabyte)f(of)i(EOLs.)243 191 y(BC04:)e(Generate)g(an)i(output)e(file)h
+(with)g(an)h(extremely)e(long)h(line.)243 241 y(BC05:)f(Generate)g(an)i
+(output)e(file)h(with)g(one)g(million)g(lines.)243 291 y(BC06:)f(Test)h(on)h
+(a)f(file)g(with)g(very)g(many)g(macros.)177 390 y(General)177
+440 y(-------)243 490 y(GN01:)f(A)i(large)f(legal)f(input)h(file)g
+(exercising)f(as)h(many)g(features)f(as)i(possible.)373 540
+y(1.)g(Test)f(listing)f(file.)373 589 y(2.)i(Test)f(output)f(files.)373
+639 y(3.)i(Test)f(typeset)f(file.)243 689 y(GN...)g(A)i(selection)e(of)h(ten)
+g(real-life)f(FunnelWeb)g(files.)177 851 y Fe(4.15)70 b(Mac)n(hine-Sp)r
+(eci\014c)20 b(Changes)177 967 y Fk(Icon)14 b(for)g(the)f(Macin)o(tosh:)j
+Fn(Curren)o(tly)d(no)g(icon)f(is)g(supplied)h(for)f(the)i(Macin)o(tosh)e(v)o
+(ersion)h(of)f(F)m(unnelW)m(eb.)177 1017 y(An)i(icon)g(depicting)g(a)f
+(spider)i(or)f(a)f(funnelled)h(w)o(eb)g(of)g(some)f(kind)g(w)o(ould)g(seem)h
+(appropriate.)177 1179 y Fe(4.16)70 b(Summary)177 1295 y Fn(This)15
+b(c)o(hapter)i(has)e(describ)q(es)i(some)e(of)f(the)i(problems)f(with)g(F)m
+(unnelW)m(eb)f(and)i(some)e(of)h(the)g(opp)q(ortunities)177
+1345 y(that)e(exist)h(for)f(impro)o(ving)e(it.)17 b(The)d(direction)f(and)g
+(sp)q(eed)i(in)e(whic)o(h)g(F)m(unnelW)m(eb)g(will)e(dev)o(elop)j(will)e(dep)
+q(end)177 1395 y(largely)j(on)h(user)h(feedbac)o(k.)25 b(If)15
+b(y)o(ou)h(ha)o(v)o(e)f(an)o(y)h(strong)g(feelings)g(on)g(where)h(F)m(unnelW)
+m(eb)e(should)h(go,)f(please)177 1444 y(email)d(them)h(to)h(Ross)g(William)o
+(s)d(\()p Fi(ross@spam.adelaide)o(.edu.)o(au)p Fn(\).)1042
+2940 y(48)p eop
+%%Page: 49 50
+49 49 bop 177 380 a Ff(App)s(endix)34 b(A)177 615 y Fl(GNU)40
+b(General)i(Public)f(License)177 739 y(V)-10 b(ersion)41 b(2)177
+983 y Fn(This)16 b(app)q(endix)h(con)o(tains)f(a)g(v)o(erbatim)e(cop)o(y)j
+(of)e(V)m(ersion)i(2)f(of)f(the)i(GNU)f(General)g(Public)g(License)i(under)
+177 1032 y(whic)o(h)g(the)g(F)m(unnelW)m(eb)g(computer)f(program)f(is)i
+(released.)31 b(Note)18 b(that)g(the)h Fh(F)m(unnelWeb)g(User's)f(Manual)177
+1082 y Fn(and)e Fh(F)m(unnelWeb)j(Hacker's)e(Manual)g Fn(are)g(released)g
+(under)h(a)e(m)o(uc)o(h)f(simpler)g(license)i(that)g(do)q(es)g(not)f(allo)o
+(w)177 1132 y(mo)q(di\014cations.)p 177 1188 1772 2 v 264 1340
+a Fi(GNU)22 b(GENERAL)e(PUBLIC)g(LICENSE)330 1390 y(Version)g(2,)h(June)g
+(1991)199 1490 y(Copyright)f(\(C\))h(1989,)g(1991)g(Free)g(Software)f
+(Foundation,)f(Inc.)744 1540 y(675)i(Mass)g(Ave,)g(Cambridge,)f(MA)h(02139,)g
+(USA)199 1589 y(Everyone)f(is)h(permitted)f(to)i(copy)f(and)g(distribute)f
+(verbatim)g(copies)199 1639 y(of)h(this)g(license)g(document,)f(but)h
+(changing)f(it)h(is)h(not)f(allowed.)264 1739 y(Preamble)221
+1838 y(The)g(licenses)f(for)h(most)g(software)f(are)i(designed)e(to)h(take)g
+(away)g(your)177 1888 y(freedom)g(to)g(share)g(and)g(change)f(it.)43
+b(By)22 b(contrast,)e(the)h(GNU)g(General)f(Public)177 1938
+y(License)h(is)g(intended)f(to)h(guarantee)f(your)h(freedom)g(to)g(share)g
+(and)g(change)g(free)177 1988 y(software--to)e(make)i(sure)g(the)h(software)e
+(is)h(free)g(for)g(all)g(its)h(users.)42 b(This)177 2038 y(General)21
+b(Public)f(License)g(applies)h(to)g(most)g(of)g(the)h(Free)f(Software)177
+2087 y(Foundation's)e(software)i(and)g(to)g(any)g(other)g(program)f(whose)h
+(authors)g(commit)f(to)177 2137 y(using)h(it.)43 b(\(Some)21
+b(other)f(Free)h(Software)g(Foundation)e(software)h(is)i(covered)e(by)177
+2187 y(the)h(GNU)h(Library)e(General)g(Public)h(License)f(instead.\))42
+b(You)21 b(can)g(apply)g(it)g(to)177 2237 y(your)g(programs,)f(too.)221
+2337 y(When)h(we)g(speak)g(of)g(free)g(software,)f(we)i(are)f(referring)f(to)
+h(freedom,)f(not)177 2386 y(price.)43 b(Our)21 b(General)f(Public)h(Licenses)
+f(are)h(designed)f(to)h(make)g(sure)g(that)g(you)177 2436 y(have)g(the)g
+(freedom)g(to)g(distribute)f(copies)g(of)i(free)f(software)f(\(and)h(charge)f
+(for)177 2486 y(this)h(service)f(if)i(you)f(wish\),)g(that)g(you)g(receive)f
+(source)h(code)g(or)g(can)g(get)g(it)177 2536 y(if)h(you)f(want)g(it,)g(that)
+g(you)g(can)g(change)g(the)g(software)f(or)h(use)h(pieces)e(of)i(it)177
+2586 y(in)g(new)f(free)g(programs;)f(and)h(that)g(you)g(know)g(you)g(can)g
+(do)h(these)e(things.)221 2685 y(To)h(protect)f(your)h(rights,)g(we)g(need)g
+(to)h(make)e(restrictions)g(that)h(forbid)177 2735 y(anyone)g(to)g(deny)g
+(you)g(these)g(rights)g(or)g(to)g(ask)g(you)h(to)f(surrender)f(the)h(rights.)
+177 2785 y(These)g(restrictions)e(translate)h(to)i(certain)e
+(responsibilities)e(for)k(you)f(if)g(you)177 2835 y(distribute)f(copies)g(of)
+i(the)f(software,)f(or)h(if)h(you)f(modify)f(it.)1042 2940
+y Fn(49)p eop
+%%Page: 50 51
+50 50 bop 221 91 a Fi(For)21 b(example,)f(if)h(you)h(distribute)d(copies)i
+(of)g(such)g(a)h(program,)e(whether)177 141 y(gratis)h(or)g(for)g(a)h(fee,)f
+(you)g(must)g(give)g(the)g(recipients)f(all)h(the)g(rights)g(that)177
+191 y(you)g(have.)43 b(You)21 b(must)g(make)g(sure)g(that)g(they,)g(too,)g
+(receive)f(or)h(can)h(get)f(the)177 241 y(source)g(code.)42
+b(And)21 b(you)h(must)f(show)g(them)g(these)f(terms)h(so)g(they)g(know)g
+(their)177 291 y(rights.)221 390 y(We)g(protect)f(your)h(rights)g(with)g(two)
+g(steps:)g(\(1\))g(copyright)f(the)h(software,)f(and)177 440
+y(\(2\))h(offer)g(you)g(this)g(license)g(which)f(gives)h(you)g(legal)g
+(permission)f(to)h(copy,)177 490 y(distribute)f(and/or)g(modify)h(the)g
+(software.)221 589 y(Also,)g(for)g(each)g(author's)f(protection)g(and)h
+(ours,)f(we)i(want)f(to)g(make)g(certain)177 639 y(that)g(everyone)f
+(understands)g(that)h(there)g(is)g(no)g(warranty)f(for)i(this)f(free)177
+689 y(software.)42 b(If)21 b(the)g(software)g(is)g(modified)f(by)h(someone)g
+(else)g(and)g(passed)g(on,)g(we)177 739 y(want)g(its)g(recipients)f(to)h
+(know)g(that)g(what)g(they)g(have)g(is)h(not)f(the)g(original,)f(so)177
+789 y(that)h(any)g(problems)f(introduced)g(by)i(others)e(will)h(not)g
+(reflect)g(on)g(the)g(original)177 839 y(authors')f(reputations.)221
+938 y(Finally,)g(any)h(free)g(program)f(is)i(threatened)d(constantly)h(by)i
+(software)177 988 y(patents.)42 b(We)21 b(wish)g(to)h(avoid)f(the)g(danger)f
+(that)h(redistributors)e(of)j(a)f(free)177 1038 y(program)g(will)f
+(individually)g(obtain)g(patent)h(licenses,)f(in)h(effect)g(making)f(the)177
+1088 y(program)h(proprietary.)41 b(To)21 b(prevent)f(this,)h(we)g(have)g
+(made)g(it)h(clear)f(that)g(any)177 1137 y(patent)g(must)g(be)g(licensed)f
+(for)h(everyone's)f(free)h(use)g(or)h(not)f(licensed)f(at)h(all.)221
+1237 y(The)g(precise)f(terms)h(and)g(conditions)f(for)h(copying,)f
+(distribution)g(and)177 1287 y(modification)f(follow.)264 1386
+y(GNU)j(GENERAL)e(PUBLIC)g(LICENSE)243 1436 y(TERMS)g(AND)h(CONDITIONS)f(FOR)
+h(COPYING,)g(DISTRIBUTION)e(AND)i(MODIFICATION)221 1536 y(0.)g(This)g
+(License)f(applies)h(to)g(any)g(program)g(or)g(other)g(work)g(which)g
+(contains)177 1586 y(a)h(notice)e(placed)h(by)g(the)g(copyright)f(holder)h
+(saying)f(it)i(may)f(be)g(distributed)177 1636 y(under)g(the)g(terms)g(of)g
+(this)g(General)g(Public)f(License.)42 b(The)21 b("Program",)f(below,)177
+1685 y(refers)h(to)g(any)g(such)g(program)g(or)g(work,)g(and)g(a)g("work)g
+(based)g(on)g(the)h(Program")177 1735 y(means)f(either)f(the)i(Program)e(or)h
+(any)h(derivative)d(work)i(under)g(copyright)f(law:)177 1785
+y(that)h(is)h(to)f(say,)g(a)g(work)g(containing)f(the)h(Program)g(or)g(a)h
+(portion)e(of)h(it,)177 1835 y(either)g(verbatim)f(or)h(with)g(modifications)
+e(and/or)i(translated)f(into)h(another)177 1885 y(language.)42
+b(\(Hereinafter,)19 b(translation)h(is)h(included)f(without)g(limitation)g
+(in)177 1934 y(the)h(term)g("modification".\))41 b(Each)21
+b(licensee)f(is)h(addressed)f(as)h("you".)177 2034 y(Activities)f(other)h
+(than)g(copying,)f(distribution)f(and)i(modification)f(are)h(not)177
+2084 y(covered)g(by)g(this)g(License;)f(they)h(are)g(outside)f(its)i(scope.)
+42 b(The)21 b(act)g(of)177 2134 y(running)g(the)g(Program)f(is)h(not)h
+(restricted,)d(and)i(the)g(output)g(from)g(the)g(Program)177
+2183 y(is)h(covered)e(only)h(if)g(its)g(contents)g(constitute)e(a)j(work)f
+(based)g(on)g(the)177 2233 y(Program)g(\(independent)e(of)i(having)g(been)g
+(made)g(by)g(running)f(the)i(Program\).)177 2283 y(Whether)f(that)f(is)i
+(true)f(depends)f(on)i(what)f(the)g(Program)f(does.)221 2383
+y(1.)h(You)g(may)g(copy)g(and)h(distribute)d(verbatim)h(copies)h(of)g(the)h
+(Program's)177 2433 y(source)f(code)g(as)g(you)g(receive)g(it,)g(in)g(any)g
+(medium,)g(provided)f(that)h(you)177 2482 y(conspicuously)e(and)i
+(appropriately)f(publish)g(on)h(each)g(copy)g(an)h(appropriate)177
+2532 y(copyright)e(notice)h(and)g(disclaimer)f(of)h(warranty;)f(keep)h
+(intact)f(all)i(the)177 2582 y(notices)f(that)f(refer)h(to)h(this)f(License)f
+(and)h(to)g(the)h(absence)e(of)h(any)h(warranty;)177 2632 y(and)f(give)g(any)
+g(other)g(recipients)f(of)h(the)h(Program)e(a)h(copy)g(of)h(this)f(License)
+177 2682 y(along)g(with)g(the)g(Program.)177 2781 y(You)g(may)h(charge)e(a)i
+(fee)f(for)g(the)g(physical)f(act)h(of)h(transferring)d(a)j(copy,)f(and)177
+2831 y(you)g(may)h(at)f(your)g(option)f(offer)h(warranty)f(protection)g(in)h
+(exchange)g(for)g(a)g(fee.)1042 2940 y Fn(50)p eop
+%%Page: 51 52
+51 51 bop 221 91 a Fi(2.)21 b(You)g(may)g(modify)g(your)g(copy)g(or)g(copies)
+g(of)g(the)g(Program)g(or)g(any)g(portion)177 141 y(of)h(it,)f(thus)g
+(forming)f(a)i(work)f(based)f(on)i(the)f(Program,)f(and)h(copy)g(and)177
+191 y(distribute)f(such)h(modifications)e(or)i(work)g(under)g(the)g(terms)g
+(of)g(Section)g(1)177 241 y(above,)g(provided)f(that)h(you)g(also)g(meet)g
+(all)g(of)g(these)g(conditions:)264 340 y(a\))h(You)f(must)g(cause)g(the)g
+(modified)f(files)h(to)g(carry)g(prominent)f(notices)264 390
+y(stating)h(that)g(you)g(changed)f(the)h(files)g(and)g(the)g(date)g(of)h(any)
+f(change.)264 490 y(b\))h(You)f(must)g(cause)g(any)g(work)g(that)g(you)g
+(distribute)f(or)h(publish,)f(that)h(in)264 540 y(whole)g(or)g(in)h(part)f
+(contains)f(or)h(is)h(derived)e(from)h(the)g(Program)g(or)g(any)264
+589 y(part)g(thereof,)f(to)i(be)f(licensed)f(as)i(a)f(whole)g(at)g(no)h
+(charge)e(to)i(all)f(third)264 639 y(parties)g(under)f(the)i(terms)e(of)i
+(this)f(License.)264 739 y(c\))h(If)f(the)g(modified)f(program)h(normally)f
+(reads)h(commands)f(interactively)264 789 y(when)h(run,)g(you)g(must)g(cause)
+g(it,)g(when)g(started)g(running)f(for)h(such)264 839 y(interactive)f(use)h
+(in)g(the)h(most)f(ordinary)f(way,)h(to)g(print)g(or)g(display)g(an)264
+888 y(announcement)f(including)g(an)h(appropriate)e(copyright)h(notice)h(and)
+g(a)264 938 y(notice)g(that)g(there)g(is)g(no)g(warranty)g(\(or)g(else,)f
+(saying)h(that)g(you)g(provide)264 988 y(a)h(warranty\))e(and)h(that)g(users)
+g(may)g(redistribute)e(the)i(program)g(under)264 1038 y(these)g(conditions,)f
+(and)h(telling)f(the)h(user)g(how)g(to)h(view)f(a)g(copy)g(of)h(this)264
+1088 y(License.)42 b(\(Exception:)20 b(if)h(the)g(Program)g(itself)f(is)i
+(interactive)d(but)264 1137 y(does)i(not)g(normally)g(print)f(such)h(an)h
+(announcement,)d(your)i(work)g(based)g(on)264 1187 y(the)h(Program)e(is)h
+(not)g(required)g(to)g(print)g(an)g(announcement.\))177 1287
+y(These)g(requirements)e(apply)i(to)g(the)h(modified)e(work)h(as)g(a)h
+(whole.)42 b(If)177 1337 y(identifiable)19 b(sections)i(of)g(that)g(work)g
+(are)g(not)g(derived)g(from)g(the)g(Program,)177 1386 y(and)g(can)h(be)f
+(reasonably)f(considered)f(independent)h(and)h(separate)f(works)h(in)177
+1436 y(themselves,)f(then)h(this)g(License,)f(and)h(its)g(terms,)g(do)g(not)g
+(apply)g(to)g(those)177 1486 y(sections)f(when)h(you)g(distribute)f(them)h
+(as)h(separate)e(works.)42 b(But)21 b(when)g(you)177 1536 y(distribute)f(the)
+h(same)g(sections)f(as)i(part)f(of)g(a)g(whole)g(which)g(is)g(a)h(work)f
+(based)177 1586 y(on)h(the)f(Program,)f(the)h(distribution)e(of)j(the)f
+(whole)g(must)g(be)g(on)g(the)h(terms)e(of)177 1636 y(this)h(License,)f
+(whose)h(permissions)f(for)h(other)f(licensees)g(extend)h(to)g(the)177
+1685 y(entire)g(whole,)f(and)h(thus)g(to)h(each)f(and)g(every)g(part)g
+(regardless)e(of)j(who)f(wrote)g(it.)177 1785 y(Thus,)g(it)g(is)h(not)f(the)g
+(intent)g(of)g(this)g(section)f(to)i(claim)e(rights)h(or)g(contest)177
+1835 y(your)g(rights)g(to)g(work)g(written)f(entirely)h(by)g(you;)g(rather,)f
+(the)h(intent)g(is)g(to)177 1885 y(exercise)f(the)h(right)g(to)h(control)e
+(the)h(distribution)e(of)j(derivative)e(or)177 1934 y(collective)g(works)h
+(based)f(on)i(the)f(Program.)177 2034 y(In)h(addition,)d(mere)i(aggregation)f
+(of)h(another)g(work)g(not)g(based)g(on)g(the)g(Program)177
+2084 y(with)g(the)g(Program)g(\(or)g(with)g(a)g(work)g(based)g(on)g(the)h
+(Program\))e(on)h(a)h(volume)e(of)177 2134 y(a)i(storage)e(or)h(distribution)
+f(medium)g(does)h(not)g(bring)g(the)g(other)g(work)g(under)177
+2183 y(the)g(scope)g(of)g(this)g(License.)221 2283 y(3.)g(You)g(may)g(copy)g
+(and)h(distribute)d(the)j(Program)e(\(or)h(a)h(work)f(based)f(on)i(it,)177
+2333 y(under)f(Section)f(2\))i(in)f(object)g(code)g(or)g(executable)f(form)h
+(under)f(the)i(terms)e(of)177 2383 y(Sections)g(1)i(and)f(2)h(above)e
+(provided)h(that)g(you)g(also)g(do)g(one)g(of)h(the)f(following:)264
+2482 y(a\))h(Accompany)e(it)h(with)g(the)g(complete)f(corresponding)f
+(machine-readable)264 2532 y(source)i(code,)g(which)f(must)h(be)h
+(distributed)d(under)i(the)g(terms)g(of)g(Sections)264 2582
+y(1)h(and)f(2)h(above)e(on)i(a)f(medium)g(customarily)e(used)i(for)h
+(software)e(interchange;)f(or,)264 2682 y(b\))j(Accompany)e(it)h(with)g(a)h
+(written)e(offer,)g(valid)h(for)g(at)h(least)f(three)264 2731
+y(years,)g(to)g(give)g(any)g(third)g(party,)g(for)g(a)g(charge)g(no)g(more)g
+(than)g(your)264 2781 y(cost)g(of)h(physically)d(performing)h(source)h
+(distribution,)e(a)i(complete)264 2831 y(machine-readable)e(copy)i(of)g(the)g
+(corresponding)e(source)i(code,)g(to)g(be)1042 2940 y Fn(51)p
+eop
+%%Page: 52 53
+52 52 bop 264 42 a Fi(distributed)20 b(under)h(the)g(terms)g(of)g(Sections)f
+(1)i(and)f(2)g(above)g(on)h(a)f(medium)264 91 y(customarily)f(used)h(for)g
+(software)f(interchange;)f(or,)264 191 y(c\))j(Accompany)e(it)h(with)g(the)g
+(information)f(you)h(received)f(as)h(to)h(the)f(offer)264 241
+y(to)h(distribute)d(corresponding)h(source)g(code.)43 b(\(This)20
+b(alternative)g(is)264 291 y(allowed)h(only)g(for)g(noncommercial)e
+(distribution)g(and)i(only)g(if)h(you)264 340 y(received)e(the)i(program)e
+(in)h(object)g(code)g(or)g(executable)f(form)h(with)g(such)264
+390 y(an)h(offer,)e(in)i(accord)e(with)h(Subsection)f(b)h(above.\))177
+490 y(The)g(source)g(code)g(for)g(a)h(work)f(means)f(the)i(preferred)d(form)i
+(of)h(the)f(work)g(for)177 540 y(making)g(modifications)e(to)i(it.)43
+b(For)21 b(an)h(executable)d(work,)i(complete)f(source)177
+589 y(code)h(means)g(all)g(the)g(source)g(code)g(for)g(all)g(modules)f(it)i
+(contains,)e(plus)h(any)177 639 y(associated)f(interface)g(definition)g
+(files,)g(plus)h(the)g(scripts)g(used)g(to)177 689 y(control)g(compilation)e
+(and)i(installation)f(of)h(the)g(executable.)41 b(However,)21
+b(as)g(a)177 739 y(special)g(exception,)e(the)i(source)g(code)g(distributed)e
+(need)i(not)h(include)177 789 y(anything)e(that)h(is)h(normally)e
+(distributed)f(\(in)i(either)g(source)g(or)g(binary)177 839
+y(form\))g(with)g(the)g(major)g(components)f(\(compiler,)f(kernel,)i(and)g
+(so)g(on\))g(of)h(the)177 888 y(operating)e(system)h(on)g(which)g(the)g
+(executable)f(runs,)g(unless)h(that)g(component)177 938 y(itself)g
+(accompanies)e(the)i(executable.)177 1038 y(If)h(distribution)d(of)i
+(executable)f(or)h(object)g(code)g(is)g(made)g(by)h(offering)177
+1088 y(access)f(to)g(copy)g(from)g(a)h(designated)d(place,)i(then)g(offering)
+f(equivalent)177 1137 y(access)h(to)g(copy)g(the)g(source)g(code)g(from)g
+(the)g(same)g(place)g(counts)f(as)177 1187 y(distribution)f(of)j(the)f
+(source)g(code,)f(even)h(though)g(third)g(parties)f(are)h(not)177
+1237 y(compelled)f(to)h(copy)g(the)h(source)e(along)h(with)g(the)g(object)g
+(code.)221 1337 y(4.)g(You)g(may)g(not)h(copy,)e(modify,)h(sublicense,)e(or)j
+(distribute)d(the)j(Program)177 1386 y(except)f(as)g(expressly)f(provided)g
+(under)h(this)g(License.)42 b(Any)21 b(attempt)177 1436 y(otherwise)f(to)h
+(copy,)g(modify,)g(sublicense)e(or)j(distribute)d(the)j(Program)e(is)177
+1486 y(void,)h(and)g(will)g(automatically)e(terminate)h(your)h(rights)g
+(under)f(this)h(License.)177 1536 y(However,)f(parties)h(who)g(have)g
+(received)f(copies,)g(or)i(rights,)e(from)h(you)g(under)177
+1586 y(this)g(License)f(will)h(not)h(have)f(their)f(licenses)g(terminated)g
+(so)i(long)f(as)g(such)177 1636 y(parties)g(remain)f(in)h(full)g(compliance.)
+221 1735 y(5.)g(You)g(are)g(not)h(required)e(to)h(accept)g(this)g(License,)f
+(since)h(you)g(have)g(not)177 1785 y(signed)g(it.)43 b(However,)20
+b(nothing)g(else)h(grants)g(you)g(permission)f(to)h(modify)g(or)177
+1835 y(distribute)f(the)h(Program)f(or)i(its)f(derivative)f(works.)42
+b(These)21 b(actions)f(are)177 1885 y(prohibited)g(by)h(law)g(if)h(you)f(do)g
+(not)h(accept)e(this)h(License.)42 b(Therefore,)20 b(by)177
+1934 y(modifying)g(or)h(distributing)f(the)h(Program)f(\(or)h(any)h(work)f
+(based)f(on)i(the)177 1984 y(Program\),)e(you)h(indicate)f(your)h(acceptance)
+f(of)h(this)g(License)g(to)g(do)h(so,)f(and)177 2034 y(all)g(its)h(terms)e
+(and)h(conditions)f(for)h(copying,)f(distributing)g(or)h(modifying)177
+2084 y(the)g(Program)g(or)g(works)g(based)g(on)g(it.)221 2183
+y(6.)g(Each)g(time)g(you)g(redistribute)f(the)h(Program)f(\(or)h(any)g(work)g
+(based)g(on)h(the)177 2233 y(Program\),)e(the)h(recipient)f(automatically)f
+(receives)h(a)i(license)e(from)h(the)177 2283 y(original)f(licensor)g(to)i
+(copy,)f(distribute)e(or)j(modify)e(the)h(Program)g(subject)f(to)177
+2333 y(these)h(terms)g(and)g(conditions.)41 b(You)21 b(may)h(not)f(impose)f
+(any)h(further)177 2383 y(restrictions)e(on)j(the)f(recipients')f(exercise)g
+(of)h(the)g(rights)g(granted)f(herein.)177 2433 y(You)h(are)h(not)f
+(responsible)e(for)i(enforcing)f(compliance)g(by)h(third)g(parties)g(to)177
+2482 y(this)g(License.)221 2582 y(7.)g(If,)g(as)h(a)f(consequence)f(of)h(a)h
+(court)f(judgment)f(or)h(allegation)f(of)h(patent)177 2632
+y(infringement)e(or)j(for)f(any)g(other)g(reason)g(\(not)f(limited)h(to)g
+(patent)g(issues\),)177 2682 y(conditions)f(are)h(imposed)f(on)i(you)f
+(\(whether)f(by)h(court)g(order,)g(agreement)f(or)177 2731
+y(otherwise\))g(that)h(contradict)f(the)h(conditions)e(of)j(this)f(License,)f
+(they)h(do)g(not)177 2781 y(excuse)g(you)g(from)g(the)g(conditions)f(of)h
+(this)g(License.)42 b(If)21 b(you)h(cannot)177 2831 y(distribute)e(so)h(as)h
+(to)f(satisfy)f(simultaneously)f(your)i(obligations)f(under)h(this)1042
+2940 y Fn(52)p eop
+%%Page: 53 54
+53 53 bop 177 42 a Fi(License)21 b(and)g(any)g(other)g(pertinent)f
+(obligations,)f(then)i(as)g(a)h(consequence)d(you)177 91 y(may)i(not)h
+(distribute)d(the)i(Program)g(at)g(all.)43 b(For)21 b(example,)f(if)i(a)f
+(patent)177 141 y(license)g(would)f(not)h(permit)g(royalty-free)e
+(redistribution)g(of)j(the)f(Program)f(by)177 191 y(all)h(those)g(who)g
+(receive)g(copies)f(directly)g(or)i(indirectly)d(through)i(you,)g(then)177
+241 y(the)g(only)g(way)g(you)h(could)e(satisfy)h(both)g(it)g(and)g(this)g
+(License)g(would)f(be)i(to)177 291 y(refrain)f(entirely)f(from)h
+(distribution)e(of)i(the)g(Program.)177 390 y(If)h(any)f(portion)f(of)h(this)
+g(section)g(is)g(held)g(invalid)f(or)i(unenforceable)d(under)177
+440 y(any)i(particular)f(circumstance,)f(the)i(balance)g(of)g(the)g(section)g
+(is)g(intended)f(to)177 490 y(apply)h(and)g(the)g(section)g(as)g(a)h(whole)e
+(is)i(intended)e(to)h(apply)g(in)g(other)177 540 y(circumstances.)177
+639 y(It)h(is)f(not)g(the)g(purpose)g(of)g(this)g(section)f(to)i(induce)e
+(you)h(to)h(infringe)e(any)177 689 y(patents)h(or)g(other)g(property)f(right)
+h(claims)f(or)h(to)h(contest)e(validity)g(of)i(any)177 739
+y(such)f(claims;)f(this)h(section)g(has)g(the)g(sole)g(purpose)f(of)i
+(protecting)e(the)177 789 y(integrity)g(of)h(the)h(free)f(software)f
+(distribution)f(system,)h(which)h(is)177 839 y(implemented)f(by)h(public)g
+(license)f(practices.)41 b(Many)21 b(people)g(have)g(made)177
+888 y(generous)f(contributions)f(to)j(the)f(wide)g(range)g(of)g(software)f
+(distributed)177 938 y(through)h(that)f(system)h(in)g(reliance)g(on)g
+(consistent)f(application)f(of)j(that)177 988 y(system;)f(it)g(is)g(up)h(to)f
+(the)g(author/donor)f(to)h(decide)f(if)i(he)f(or)h(she)f(is)g(willing)177
+1038 y(to)h(distribute)d(software)h(through)h(any)g(other)g(system)f(and)h(a)
+h(licensee)e(cannot)177 1088 y(impose)h(that)g(choice.)177
+1187 y(This)g(section)f(is)i(intended)e(to)h(make)g(thoroughly)f(clear)h
+(what)g(is)g(believed)f(to)177 1237 y(be)i(a)f(consequence)f(of)h(the)g(rest)
+g(of)h(this)f(License.)221 1337 y(8.)g(If)h(the)f(distribution)e(and/or)i
+(use)g(of)g(the)g(Program)g(is)g(restricted)f(in)177 1386 y(certain)h
+(countries)e(either)i(by)g(patents)g(or)g(by)g(copyrighted)f(interfaces,)g
+(the)177 1436 y(original)g(copyright)g(holder)h(who)g(places)g(the)g(Program)
+f(under)h(this)g(License)177 1486 y(may)g(add)h(an)f(explicit)f(geographical)
+f(distribution)h(limitation)f(excluding)177 1536 y(those)i(countries,)f(so)h
+(that)g(distribution)e(is)j(permitted)e(only)h(in)g(or)g(among)177
+1586 y(countries)f(not)h(thus)g(excluded.)42 b(In)21 b(such)g(case,)g(this)g
+(License)f(incorporates)177 1636 y(the)h(limitation)f(as)h(if)h(written)e(in)
+i(the)f(body)g(of)g(this)g(License.)221 1735 y(9.)g(The)g(Free)g(Software)f
+(Foundation)g(may)h(publish)g(revised)f(and/or)h(new)g(versions)177
+1785 y(of)h(the)f(General)f(Public)h(License)f(from)h(time)g(to)g(time.)43
+b(Such)21 b(new)g(versions)f(will)177 1835 y(be)i(similar)e(in)h(spirit)g(to)
+g(the)g(present)g(version,)f(but)h(may)g(differ)g(in)g(detail)g(to)177
+1885 y(address)g(new)g(problems)f(or)h(concerns.)177 1984 y(Each)g(version)f
+(is)i(given)f(a)g(distinguishing)e(version)h(number.)43 b(If)21
+b(the)g(Program)177 2034 y(specifies)f(a)i(version)e(number)h(of)g(this)g
+(License)f(which)h(applies)f(to)i(it)f(and)g("any)177 2084
+y(later)g(version",)f(you)h(have)g(the)g(option)g(of)g(following)f(the)h
+(terms)g(and)g(conditions)177 2134 y(either)g(of)g(that)g(version)f(or)i(of)f
+(any)g(later)g(version)f(published)g(by)i(the)f(Free)177 2183
+y(Software)f(Foundation.)42 b(If)21 b(the)g(Program)g(does)f(not)i(specify)e
+(a)i(version)e(number)g(of)177 2233 y(this)h(License,)f(you)h(may)h(choose)e
+(any)h(version)g(ever)g(published)f(by)h(the)g(Free)g(Software)177
+2283 y(Foundation.)221 2383 y(10.)g(If)g(you)g(wish)g(to)h(incorporate)d
+(parts)i(of)g(the)h(Program)e(into)h(other)g(free)177 2433
+y(programs)f(whose)h(distribution)e(conditions)h(are)h(different,)f(write)h
+(to)g(the)g(author)177 2482 y(to)h(ask)f(for)g(permission.)41
+b(For)21 b(software)g(which)f(is)i(copyrighted)d(by)j(the)f(Free)177
+2532 y(Software)f(Foundation,)g(write)h(to)g(the)g(Free)g(Software)f
+(Foundation;)g(we)h(sometimes)177 2582 y(make)g(exceptions)f(for)h(this.)43
+b(Our)21 b(decision)f(will)h(be)g(guided)g(by)g(the)g(two)h(goals)177
+2632 y(of)g(preserving)d(the)i(free)g(status)g(of)g(all)h(derivatives)d(of)i
+(our)h(free)f(software)f(and)177 2682 y(of)i(promoting)d(the)j(sharing)e(and)
+h(reuse)g(of)g(software)f(generally.)264 2781 y(NO)i(WARRANTY)1042
+2940 y Fn(53)p eop
+%%Page: 54 55
+54 54 bop 221 42 a Fi(11.)21 b(BECAUSE)f(THE)h(PROGRAM)g(IS)g(LICENSED)f
+(FREE)h(OF)h(CHARGE,)e(THERE)h(IS)g(NO)h(WARRANTY)177 91 y(FOR)f(THE)h
+(PROGRAM,)e(TO)h(THE)g(EXTENT)g(PERMITTED)f(BY)h(APPLICABLE)f(LAW.)43
+b(EXCEPT)20 b(WHEN)177 141 y(OTHERWISE)g(STATED)h(IN)g(WRITING)f(THE)i
+(COPYRIGHT)d(HOLDERS)i(AND/OR)f(OTHER)h(PARTIES)177 191 y(PROVIDE)g(THE)g
+(PROGRAM)f("AS)h(IS")g(WITHOUT)g(WARRANTY)f(OF)h(ANY)g(KIND,)g(EITHER)g
+(EXPRESSED)177 241 y(OR)h(IMPLIED,)e(INCLUDING,)f(BUT)j(NOT)f(LIMITED)f(TO,)h
+(THE)g(IMPLIED)g(WARRANTIES)f(OF)177 291 y(MERCHANTABILITY)f(AND)i(FITNESS)f
+(FOR)i(A)f(PARTICULAR)f(PURPOSE.)42 b(THE)21 b(ENTIRE)g(RISK)f(AS)177
+340 y(TO)i(THE)f(QUALITY)f(AND)h(PERFORMANCE)f(OF)h(THE)g(PROGRAM)g(IS)g
+(WITH)g(YOU.)43 b(SHOULD)20 b(THE)177 390 y(PROGRAM)h(PROVE)f(DEFECTIVE,)g
+(YOU)h(ASSUME)g(THE)g(COST)g(OF)g(ALL)g(NECESSARY)f(SERVICING,)177
+440 y(REPAIR)h(OR)g(CORRECTION.)221 540 y(12.)g(IN)g(NO)h(EVENT)e(UNLESS)h
+(REQUIRED)f(BY)i(APPLICABLE)d(LAW)i(OR)h(AGREED)e(TO)i(IN)f(WRITING)177
+589 y(WILL)g(ANY)g(COPYRIGHT)f(HOLDER,)h(OR)g(ANY)g(OTHER)g(PARTY)g(WHO)g
+(MAY)g(MODIFY)g(AND/OR)177 639 y(REDISTRIBUTE)e(THE)j(PROGRAM)e(AS)h
+(PERMITTED)f(ABOVE,)h(BE)g(LIABLE)g(TO)g(YOU)g(FOR)h(DAMAGES,)177
+689 y(INCLUDING)e(ANY)h(GENERAL,)f(SPECIAL,)h(INCIDENTAL)e(OR)j
+(CONSEQUENTIAL)d(DAMAGES)h(ARISING)177 739 y(OUT)h(OF)h(THE)f(USE)g(OR)g
+(INABILITY)f(TO)i(USE)f(THE)g(PROGRAM)f(\(INCLUDING)g(BUT)h(NOT)h(LIMITED)177
+789 y(TO)g(LOSS)f(OF)g(DATA)g(OR)g(DATA)g(BEING)g(RENDERED)f(INACCURATE)g(OR)
+h(LOSSES)g(SUSTAINED)f(BY)177 839 y(YOU)h(OR)h(THIRD)e(PARTIES)h(OR)g(A)h
+(FAILURE)e(OF)i(THE)f(PROGRAM)f(TO)h(OPERATE)g(WITH)g(ANY)g(OTHER)177
+888 y(PROGRAMS\),)f(EVEN)h(IF)g(SUCH)g(HOLDER)g(OR)g(OTHER)g(PARTY)g(HAS)g
+(BEEN)g(ADVISED)f(OF)i(THE)177 938 y(POSSIBILITY)e(OF)h(SUCH)g(DAMAGES.)286
+1038 y(END)g(OF)h(TERMS)e(AND)i(CONDITIONS)177 1137 y(Appendix:)e(How)h(to)h
+(Apply)e(These)h(Terms)g(to)g(Your)g(New)g(Programs)221 1237
+y(If)g(you)g(develop)g(a)g(new)g(program,)g(and)g(you)g(want)g(it)g(to)h(be)f
+(of)g(the)h(greatest)177 1287 y(possible)e(use)h(to)h(the)f(public,)f(the)i
+(best)f(way)g(to)g(achieve)f(this)h(is)h(to)f(make)g(it)177
+1337 y(free)g(software)f(which)h(everyone)f(can)h(redistribute)f(and)h
+(change)f(under)h(these)g(terms.)221 1436 y(To)g(do)h(so,)f(attach)f(the)h
+(following)f(notices)h(to)g(the)g(program.)42 b(It)22 b(is)f(safest)177
+1486 y(to)h(attach)e(them)h(to)g(the)h(start)e(of)i(each)f(source)f(file)h
+(to)h(most)f(effectively)177 1536 y(convey)g(the)g(exclusion)f(of)h
+(warranty;)f(and)h(each)g(file)g(should)g(have)g(at)g(least)177
+1586 y(the)g("copyright")f(line)h(and)g(a)h(pointer)e(to)h(where)g(the)g
+(full)g(notice)g(is)g(found.)264 1685 y(<one)g(line)g(to)h(give)f(the)g
+(program's)f(name)h(and)g(a)g(brief)g(idea)g(of)h(what)f(it)g(does.>)264
+1735 y(Copyright)f(\(C\))h(19yy)43 b(<name)21 b(of)g(author>)264
+1835 y(This)g(program)g(is)g(free)g(software;)f(you)h(can)g(redistribute)f
+(it)h(and/or)g(modify)264 1885 y(it)h(under)e(the)i(terms)e(of)i(the)f(GNU)g
+(General)f(Public)h(License)f(as)i(published)e(by)264 1934
+y(the)i(Free)e(Software)h(Foundation;)e(either)i(version)f(2)i(of)f(the)g
+(License,)f(or)264 1984 y(\(at)i(your)e(option\))h(any)g(later)g(version.)264
+2084 y(This)g(program)g(is)g(distributed)f(in)h(the)g(hope)g(that)g(it)g
+(will)g(be)h(useful,)264 2134 y(but)g(WITHOUT)e(ANY)h(WARRANTY;)f(without)g
+(even)h(the)g(implied)g(warranty)f(of)264 2183 y(MERCHANTABILITY)f(or)i
+(FITNESS)g(FOR)g(A)h(PARTICULAR)d(PURPOSE.)42 b(See)21 b(the)264
+2233 y(GNU)h(General)e(Public)g(License)h(for)g(more)g(details.)264
+2333 y(You)h(should)e(have)h(received)f(a)i(copy)f(of)g(the)g(GNU)g(General)g
+(Public)f(License)264 2383 y(along)h(with)g(this)g(program;)f(if)i(not,)f
+(write)f(to)i(the)f(Free)g(Software)264 2433 y(Foundation,)f(Inc.,)h(675)g
+(Mass)g(Ave,)g(Cambridge,)e(MA)j(02139,)e(USA.)177 2532 y(Also)h(add)g
+(information)f(on)h(how)g(to)h(contact)e(you)h(by)h(electronic)d(and)j(paper)
+e(mail.)177 2632 y(If)i(the)f(program)f(is)h(interactive,)f(make)h(it)g
+(output)g(a)g(short)g(notice)g(like)g(this)177 2682 y(when)g(it)h(starts)e
+(in)h(an)h(interactive)d(mode:)264 2781 y(Gnomovision)h(version)g(69,)h
+(Copyright)f(\(C\))h(19yy)g(name)g(of)h(author)264 2831 y(Gnomovision)e
+(comes)h(with)g(ABSOLUTELY)e(NO)j(WARRANTY;)e(for)h(details)1042
+2940 y Fn(54)p eop
+%%Page: 55 56
+55 55 bop 264 42 a Fi(type)21 b(`show)g(w'.)264 91 y(This)g(is)h(free)f
+(software,)f(and)h(you)g(are)g(welcome)f(to)i(redistribute)d(it)264
+141 y(under)i(certain)f(conditions;)g(type)h(`show)g(c')g(for)g(details.)177
+241 y(The)g(hypothetical)f(commands)g(`show)h(w')g(and)g(`show)g(c')g(should)
+g(show)g(the)g(appropriate)177 291 y(parts)g(of)g(the)g(General)g(Public)f
+(License.)42 b(Of)22 b(course,)e(the)h(commands)f(you)i(use)f(may)177
+340 y(be)h(called)e(something)g(other)h(than)g(`show)g(w')g(and)g(`show)g
+(c';)g(they)g(could)g(even)g(be)177 390 y(mouse-clicks)e(or)j(menu)f
+(items--whatever)e(suits)h(your)h(program.)177 490 y(You)g(should)g(also)g
+(get)g(your)g(employer)f(\(if)h(you)g(work)g(as)h(a)f(programmer\))f(or)h
+(your)177 540 y(school,)g(if)g(any,)g(to)g(sign)g(a)h("copyright)e
+(disclaimer")f(for)i(the)g(program,)g(if)177 589 y(necessary.)42
+b(Here)21 b(is)g(a)h(sample;)e(alter)h(the)g(names:)221 689
+y(Yoyodyne,)f(Inc.,)g(hereby)h(disclaims)f(all)h(copyright)f(interest)g(in)i
+(the)f(program)221 739 y(`Gnomovision')e(\(which)h(makes)h(passes)g(at)g
+(compilers\))f(written)g(by)i(James)e(Hacker.)221 839 y(<signature)f(of)j(Ty)
+f(Coon>,)g(1)g(April)g(1989)221 888 y(Ty)g(Coon,)g(President)f(of)h(Vice)177
+988 y(This)g(General)f(Public)h(License)f(does)h(not)h(permit)e
+(incorporating)f(your)i(program)f(into)177 1038 y(proprietary)g(programs.)41
+b(If)22 b(your)f(program)f(is)h(a)h(subroutine)e(library,)g(you)h(may)177
+1088 y(consider)f(it)i(more)f(useful)f(to)i(permit)e(linking)g(proprietary)g
+(applications)f(with)i(the)177 1137 y(library.)42 b(If)21 b(this)g(is)h(what)
+f(you)g(want)g(to)g(do,)g(use)h(the)f(GNU)g(Library)f(General)177
+1187 y(Public)h(License)f(instead)g(of)i(this)f(License.)p
+177 1280 1772 2 v 1042 2940 a Fn(55)p eop
+%%Page: 56 57
+56 56 bop 1042 2940 a Fn(56)p eop
+%%Page: 57 58
+57 57 bop 177 378 a Ff(App)s(endix)34 b(B)177 610 y Fl(References)177
+851 y Fk([ANSI])21 b Fn(Australian)f(Standard)h(AS)f(3955-1991,)f
+(\\Programming)e(Languages)j(|)g(C",)g(\(ISBN:)g(0-7262-)177
+901 y(6970-0\),)c(12)h(July)g(1991.)27 b(Iden)o(tical)17 b(to:)24
+b(In)o(ternational)17 b(Standard)g(ISO/IEC)h(9899:)23 b(1990)16
+b(Programming)177 951 y(Languages)e(|)f(C.)177 1025 y Fk([Ben)o(tley86])h
+Fn(Ben)o(tley)i(J.,)g(\\Programmi)o(ng)d(P)o(earls:)22 b(Literate)16
+b(Programming",)c Fh(Communic)n(ations)17 b(of)g(the)177 1075
+y(A)o(CM)p Fn(,)c(V)m(ol.)g(29,)f(No.)i(5,)f(pp.)g(364{369,)f(1986.)177
+1150 y Fk([Hoare80])f Fn(Hoare)f(C.A.R.,)f(\\The)h(Emp)q(eror's)g(Old)g
+(Clothes",)g(T)m(uring)g(Aw)o(ard)g(Lecture,)i(1980,)e(from)e(\\A)o(CM)177
+1200 y(T)m(uring)15 b(Aw)o(ard)g(Lectures:)24 b(The)16 b(First)f(Tw)o(en)o(t)
+o(y)h(Y)m(ears)g(1966{1985",)d(A)o(CM)i(Press,)i(New)g(Y)m(ork,)e(\(ISBN:)g
+(0-)177 1249 y(201-07794-9\),)c(1987)i(\(see)i(p.)f(155\).)177
+1324 y Fk([Horton90])f Fn(Horton)h(M.R.,)e(\\P)o(ortable)i(C)g(Soft)o(w)o
+(are",)e(Pren)o(tice)k(Hall,)c(\(ISBN:)i(0-13-868050-7\),)d(1990.)177
+1399 y Fk([Kernighan88])k Fn(Kernighan)i(B.W.,)g(Ritc)o(hie)f(D.M.,)g(\\The)h
+(C)g(Programming)c(Language",)k(\(second)h(edi-)177 1449 y(tion,\\ANSI)13
+b(C"\),)g(Pren)o(tice)j(Hall,)c(\(ISBN:)i(0-13-110362-8\),)d(1988.)177
+1523 y Fk([Kn)o(uth83])j Fn(Kn)o(uth)h(D.E.,)f(\\The)h(WEB)g(System)f(of)h
+(Structured)h(Do)q(cumen)o(tation",)d(\(W)m(eb)i(User)h(Man)o(ual,)177
+1573 y(V)m(ersion)e(2.5,)f(No)o(v)o(em)o(b)q(er,)f(1983\),)h(Stanford)g(Univ)
+o(ersit)o(y)m(,)g(1983.)177 1648 y Fk([Kn)o(uth84])f Fn(Kn)o(uth)j(D.E.,)d
+(\\The)i(T)767 1657 y(E)790 1648 y(Xb)q(o)q(ok",)f(Addison-W)m(esley)m(,)g
+(\(ISBN:)h(0-201-13448-9\),)d(1984.)177 1723 y Fk([Lamp)q(ort86])k
+Fn(Lamp)q(ort)h(L.,)g(\\L)723 1718 y Fg(a)742 1723 y Fn(T)765
+1735 y(E)788 1723 y(X:)g(A)g(Do)q(cumen)o(t)g(Preparation)h(System",)f
+(Addison-W)m(esley)m(,)g(\(ISBN:)177 1773 y(0-201-15790-X\),)11
+b(1986.)177 1847 y Fk([Rabino)o(witz90])k Fn(Rabino)o(witz)h(H.,)h(Sc)o(haap)
+g(C.,)h(\\P)o(ortable)f(C",)f(Pren)o(tice)j(Hall,)d(\(ISBN:0-13-685967-4\))
+177 1897 y(1990.)177 1972 y Fk([Ramsey89])22 b Fn(Ramsey)f(N.,)j(\\W)m(ea)o
+(ving)d(a)h(Language-Indep)q(enden)o(t)h(WEB",)f Fh(Communic)n(ations)h(of)g
+(the)177 2022 y(A)o(CM)p Fn(,)13 b(V)m(ol.)g(32,)f(No.)i(9,)f(pp.)g
+(1051{1055,)e(1989.)177 2096 y Fk([T)l(arjan72])16 b Fn(T)m(arjan)f(R.E.,)h
+(\\Depth-First)g(Searc)o(h)i(and)e(Linear)g(Graph)g(Algorithms",)e
+Fh(SIAM)k(Journal)f(of)177 2146 y(Computing)p Fn(,)d(V)m(ol.)e(1,)h(No.)h(2,)
+f(pp.)g(146{160,)f(June)j(1972.)177 2221 y Fk([USDOD83])i Fn(\\The)i
+(Programming)c(Language)j(Ada)g(Reference)i(Man)o(ual",)e(American)g
+(National)f(Stan-)177 2271 y(dards)e(Institute)f(Inc,)g
+(ANSI/MIL-STD-1815A-1983,)d(1983.)1042 2940 y(57)p eop
+%%Page: 58 59
+58 58 bop 177 279 a Fl(Index)177 487 y Fn(.cld)14 b(\014le)f(18)177
+537 y(==)i(14)177 587 y(@M)f(23)177 637 y(@Z)h(23)177 687 y(abbreviations)f
+(iden)o(ti\014er)g(28)177 737 y(ac)o(kno)o(wledgemen)o(ts)f(7)177
+787 y(Ada)h(18)177 837 y(Ada)g(27)177 886 y(Ada)g(7)177 936
+y(adding)f(features)i(36)177 986 y(Adelaide)f(Univ)o(ersit)o(y)g(27)177
+1036 y(analyser)g(45)177 1086 y(Andrew)h(T)m(rev)o(orro)o(w)f(9)177
+1136 y(ANSI)g(28)177 1186 y(ANSI)g(57)177 1236 y(an)o(tiquated)g(features)h
+(43)177 1286 y(ASCI)q(I)f(mnemonics)e(45)177 1336 y(asking)h(for)h(trouble)g
+(28)177 1386 y(authorit)o(y)f(design)i(36)177 1436 y(authorit)o(y)e(securit)o
+(y)i(36)177 1486 y(a)o(v)n(ailabilit)o(y)10 b(program)j(37)177
+1536 y(bac)o(kw)o(ards)h(compatibilit)o(y)d(11)177 1586 y(Barry)k(Dwy)o(er)f
+(7)177 1636 y(Begg)g(Jerem)o(y)g(7)177 1686 y(Ben)o(tley)h(Jon)f(11)177
+1736 y(Ben)o(tley86)g(11)177 1786 y(Ben)o(tley86)g(57)177 1836
+y(blank)f(inden)o(tation)h(12)177 1886 y(blank)f(inden)o(tation)h(12)177
+1935 y(break)o(out,)g(GNU)f(41)177 1985 y(Brissenden)j(Roger)e(7)177
+2035 y(c)o(hanges)h(dangers)f(35)177 2085 y(co)q(ding)g(st)o(yle)g(28)177
+2135 y(command)d(in)o(terface)k(43)177 2185 y(command)c(in)o(terpreter)16
+b(43)177 2235 y(command)11 b(line)j(in)o(terface)g(design)g(goals)f(19)177
+2285 y(command)e(line)j(in)o(terface)g(18)177 2335 y(command)d(setall)j(43)
+177 2385 y(commen)o(t)e(duplication)h(18)177 2435 y(Comm)o(unicati)o(ons)e
+(of)j(the)g(A)o(CM)g(11)177 2485 y(compatibilit)o(y)d(bac)o(kw)o(ards)j(11)
+177 2535 y(compiler)f(ThinkC)g(30)177 2585 y(compiler)g(35)177
+2635 y(conditionals)g(44)177 2685 y(con)o(tiguous)h(memory)d(45)177
+2735 y(cop)o(yrigh)o(t)j(la)o(w)f(38)177 2785 y(cop)o(yrigh)o(t)h(notice)g(1)
+177 2835 y(cop)o(yrigh)o(t)g(38)1136 487 y(correctness)i(47)1136
+537 y(coun)o(ting)d(diagnostic)g(43)1136 587 y(cross)i(references)h(46)1136
+637 y(dangers)e(c)o(hanges)h(35)1136 687 y(dangers)f(inden)o(tation)f(13)1136
+737 y(dangers)h(languages)g(35)1136 787 y(Da)o(vid)e(Hulse)j(27)1136
+837 y(Da)o(vid)d(Hulse)j(7)1136 886 y(DCL)e(13)1136 936 y(deriv)o(ed)h(w)o
+(ork)g(38)1136 986 y(design)g(authorit)o(y)f(36)1136 1036 y(design)h(F)m
+(unnelW)m(eb)f(11)1136 1086 y(design)h(goals)f(command)e(line)i(in)o(terface)
+i(19)1136 1136 y(design)f(language)f(44)1136 1186 y(detection)i(recursion)g
+(45)1136 1236 y(diagnostic)e(coun)o(ting)g(43)1136 1286 y(diagnostic)g
+(messages)h(25)1136 1336 y(diagnostics)f(47)1136 1386 y(do)q(cumen)o(t)g
+(structure)j(macro)d(structure)j(23)1136 1436 y(do)q(cumen)o(t)d(structure)j
+(16)1136 1486 y(do)q(cumen)o(t)d(structure)j(23)1136 1536 y(do)q(cumen)o
+(tation)c(out)i(of)f(date)i(18)1136 1586 y(do)q(cumen)o(tation)d(43)1136
+1636 y(Donald)g(Kn)o(uth)j(11)1136 1686 y(Donald)d(Kn)o(uth)j(7)1136
+1736 y(duplication)d(commen)o(t)g(18)1136 1786 y(Dwy)o(er)i(Barry)g(7)1136
+1836 y(e\016ciency)g(47)1136 1886 y(EOL)g(represen)o(tation)h(45)1136
+1935 y(example)d(o\016cial)h(43)1136 1985 y(extensions)i(\014lename)d(20)1136
+2035 y(factor)i(glue)f(46)1136 2085 y(features)i(adding)e(36)1136
+2135 y(features)i(an)o(tiquated)e(43)1136 2185 y(features)i(mo)q
+(di\014cation)c(35)1136 2235 y(features)k(remo)o(ving)d(35)1136
+2285 y(\014le)i(.cld)f(18)1136 2335 y(\014le)h(extension)g(protection)h(37)
+1136 2385 y(\014le)f(mark)o(ers)f(44)1136 2435 y(\014le)h(names)f(19)1136
+2485 y(\014le)h(names)f(21)1136 2535 y(\014le)h(signature)g(44)1136
+2585 y(\014lename)e(extensions)j(20)1136 2635 y(\014lename)d(inheritance)j
+(20)1136 2685 y(\014lenames)e(length)h(29)1136 2735 y(\014lenames)f(p)q
+(ortable)h(21)1136 2785 y(formal)d(parameter)j(list)f(44)1136
+2835 y(F)m(unnelW)m(eb)g(design)h(11)1042 2940 y(58)p eop
+%%Page: 59 60
+59 59 bop 177 42 a Fn(F)m(unnelW)m(eb)14 b(future)g(43)177
+91 y(F)m(unnelW)m(eb)g(history)f(27)177 141 y(F)m(unnelW)m(eb)h(implem)o(en)o
+(tation)d(27)177 191 y(F)m(unnelW)m(eb)j(managem)o(en)o(t)e(39)177
+241 y(F)m(unnelW)m(eb)i(mo)q(di\014cation)d(35)177 291 y(F)m(unnelW)m(eb)j
+(motiv)n(atio)o(n)d(11)177 341 y(F)m(unnelW)m(eb)j(o\016cial)e(39)177
+391 y(F)m(unnelW)m(eb)i(past)g(use)g(27)177 441 y(F)m(unnelW)m(eb)g
+(protection)g(37)177 490 y(F)m(unnelW)m(eb)g(syn)o(tax)f(14)177
+540 y(F)m(unnelW)m(eb)h(V1)f(11)177 590 y(F)m(unnelW)m(eb)h(v)o(ersion)g(1)f
+(27)177 640 y(F)m(unnelW)m(eb)h(v)o(ersion)g(2)f(27)177 690
+y(F)m(unnelW)m(eb)h(v)o(ersion)g(3)f(27)177 740 y(F)m(unnelW)m(eb)h(writing)f
+(itself)g(28)177 790 y(future)i(F)m(unnelW)m(eb)e(43)177 840
+y(genealogy)g(program)g(36)177 889 y(generic)i(t)o(yp)q(esetter)h(46)177
+939 y(glue)e(factor)g(46)177 989 y(GNU)g(break)o(out)g(41)177
+1039 y(GNU)g(license)h(35)177 1089 y(GNU)f(license)h(39)177
+1139 y(GNU)f(License)h(49)177 1189 y(GNU)f(v)o(ersion)g(41)177
+1239 y(Hac)o(k)o(ett)h(Simon)d(7)177 1288 y(headings)i(16)177
+1338 y(heap)g(memory)e(29)177 1388 y(hierarc)o(hical)i(structure)i(23)177
+1438 y(history)e(F)m(unnelW)m(eb)f(27)177 1488 y(Hoare80)h(36)177
+1538 y(Hoare80)g(57)177 1588 y(Horton90)g(28)177 1638 y(Horton90)g(57)177
+1687 y(Hulse)h(Da)o(vid)d(27)177 1737 y(Hulse)j(Da)o(vid)d(7)177
+1787 y(iden)o(ti\014er)i(abbreviations)g(28)177 1837 y(iden)o(ti\014er)g(28)
+177 1887 y(implemen)o(tation)d(F)m(unnelW)m(eb)i(27)177 1937
+y(include)h(\014le)g(suppression)h(46)177 1987 y(inden)o(tation)e(blank)h(12)
+177 2037 y(inden)o(tation)f(dangers)i(13)177 2086 y(inden)o(tation)e(no)h(12)
+177 2136 y(inden)o(tation)f(text)i(12)177 2186 y(inden)o(tation)e(text)i(30)
+177 2236 y(inden)o(tation)e(text)i(45)177 2286 y(inden)o(tation)e(12)177
+2336 y(inden)o(tation)g(12)177 2386 y(inden)o(ted)i(macro)d(call)h(12)177
+2436 y(index)h(program)e(43)177 2486 y(inheritance)j(\014lename)d(20)177
+2535 y(in)o(terface)j(command)c(line)i(18)177 2585 y(in)o(terface)i(command)c
+(43)177 2635 y(in)o(terpreter)16 b(command)11 b(43)177 2685
+y(in)o(terpreter)16 b(shell)e(43)177 2735 y(in)o(v)o(o)q(cations)f(n)o(um)o
+(b)q(er)g(22)177 2785 y(issues)i(miscellaneous)e(18)177 2835
+y(Jerem)o(y)h(Begg)g(7)1136 42 y(Jon)g(Ben)o(tley)g(11)1136
+91 y(Kernighan88)f(28)1136 141 y(Kernighan88)g(57)1136 191
+y(Kn)o(uth)h(Donald)f(11)1136 241 y(Kn)o(uth)h(Donald)f(7)1136
+291 y(Kn)o(uth83)g(11)1136 341 y(Kn)o(uth83)g(57)1136 391 y(Kn)o(uth84)g(57)
+1136 441 y(Kn)o(uth84)g(9)1136 490 y(Lamp)q(ort86)f(57)1136
+540 y(Lamp)q(ort86)g(9)1136 590 y(language)h(design)h(44)1136
+640 y(languages)f(dangers)i(35)1136 690 y(LaT)m(eX)e(9)1136
+740 y(LaT)m(eX)g(9)1136 790 y(la)o(w)g(cop)o(yrigh)o(t)g(38)1136
+840 y(leak)n(age)g(memory)e(30)1136 889 y(length)i(\014lenames)h(29)1136
+939 y(license)g(GNU)g(35)1136 989 y(license)g(GNU)g(39)1136
+1039 y(License)h(GNU)e(49)1136 1089 y(license)h(38)1136 1139
+y(lister)g(46)1136 1189 y(Macin)o(tosh)g(29)1136 1239 y(Macin)o(tosh)g(30)
+1136 1288 y(Macin)o(tosh)g(9)1136 1338 y(macro)e(call)h(syn)o(tax)h(16)1136
+1388 y(macro)e(de\014nition)i(syn)o(tax)g(14)1136 1438 y(macro)e(structure)k
+(do)q(cumen)o(t)e(structure)i(23)1136 1488 y(macro)c(structure)k(23)1136
+1538 y(mak)o(e)c(44)1136 1588 y(mallo)q(c)f(29)1136 1638 y(managemen)o(t)g(F)
+m(unnelW)m(eb)i(39)1136 1687 y(man)o(uals)e(mo)q(difying)g(38)1136
+1737 y(mapp)q(er)i(44)1136 1787 y(mark)o(ers)g(\014le)h(44)1136
+1837 y(memory)d(con)o(tiguous)j(45)1136 1887 y(memory)d(heap)j(29)1136
+1937 y(memory)d(leak)n(age)i(30)1136 1987 y(memory)e(pac)o(k)n(age)j(29)1136
+2037 y(memory)d(stac)o(k)j(30)1136 2086 y(memory)d(static)j(30)1136
+2136 y(memory)d(use)k(of)e(29)1136 2186 y(messages)h(diagnostic)f(25)1136
+2236 y(miscellaneous)f(issues)j(18)1136 2286 y(mnemonics)c(ASCI)q(I)j(45)1136
+2336 y(mo)q(di\014cation)d(features)k(35)1136 2386 y(mo)q(di\014cation)c(F)m
+(unnelW)m(eb)j(35)1136 2436 y(mo)q(difying)d(man)o(uals)g(38)1136
+2486 y(motiv)n(atio)o(n)g(F)m(unnelW)m(eb)j(11)1136 2535 y(MSDOS)g(29)1136
+2585 y(names)f(\014le)h(19)1136 2635 y(names)f(\014le)h(21)1136
+2685 y(naming)d(p)q(oin)o(ters)k(29)1136 2735 y(naming)c(t)o(yp)q(es)k(29)
+1136 2785 y(no)e(inden)o(tation)h(12)1136 2835 y(no)f(inden)o(tation)h(12)
+1042 2940 y(59)p eop
+%%Page: 60 61
+60 60 bop 177 42 a Fn(notice)14 b(cop)o(yrigh)o(t)g(1)177 91
+y(n)o(um)o(b)q(er)f(in)o(v)o(o)q(cations)g(22)177 141 y(n)o(um)o(b)q(er)g
+(output)h(\014les)h(12)177 191 y(n)o(um)o(b)q(ering)e(section)h(23)177
+241 y(Occam's)f(razor)i(12)177 291 y(o\016cial)e(example)f(43)177
+341 y(o\016cial)h(F)m(unnelW)m(eb)g(39)177 391 y(options)h(43)177
+441 y(out)g(of)f(date)h(do)q(cumen)o(tation)f(18)177 490 y(output)h(\014les)g
+(n)o(um)o(b)q(er)g(12)177 540 y(OzT)m(eX)h(9)177 590 y(pac)o(k)n(age)f
+(memory)d(29)177 640 y(parameter)j(list)f(formal)f(44)177 690
+y(parameterized)i(macro)f(call)g(syn)o(tax)h(16)177 740 y(parameterized)g
+(macro)f(de\014nitions)h(syn)o(tax)g(15)177 790 y(parser)h(45)177
+840 y(P)o(ascal)f(12)177 889 y(past)g(use)h(F)m(unnelW)m(eb)e(27)177
+939 y(Ph.D.)g(27)177 989 y(p)q(oin)o(ters)i(naming)c(29)177
+1039 y(p)q(ortabilit)o(y)i(28)177 1089 y(p)q(ortable)h(\014lenames)f(21)177
+1139 y(pragma)f(syn)o(tax)i(44)177 1189 y(pragma)e(v)o(ersion)i(45)177
+1239 y(preface)h(5)177 1288 y(presen)o(tation)g(notes)g(9)177
+1338 y(program)d(a)o(v)n(ailabilit)o(y)f(37)177 1388 y(program)h(genealogy)i
+(36)177 1438 y(program)e(index)i(43)177 1488 y(programming)c(p)q(earls)15
+b(11)177 1538 y(protection)g(\014le)e(extension)i(37)177 1588
+y(protection)g(F)m(unnelW)m(eb)e(37)177 1638 y(Rabino)o(witz90)f(28)177
+1687 y(Rabino)o(witz90)g(28)177 1737 y(Rabino)o(witz90)g(57)177
+1787 y(Ramsey89)g(46)177 1837 y(Ramsey89)g(57)177 1887 y(recursion)j
+(detection)g(45)177 1937 y(recursion)g(test)g(43)177 1987 y(references)i
+(cross)e(46)177 2037 y(references)i(57)177 2086 y(regression)e(testing)g(18)
+177 2136 y(remo)o(ving)d(features)j(35)177 2186 y(represen)o(tation)h(EOL)e
+(45)177 2236 y(Rob)q(ert)g(Endre)h(T)m(arjan)e(45)177 2286
+y(Roger)h(Brissenden)i(7)177 2336 y(Ross)e(William)o(s)d(1)177
+2386 y(scanner)k(44)177 2436 y(section)g(n)o(um)o(b)q(ering)d(23)177
+2486 y(section)j(syn)o(tax)f(44)177 2535 y(sections)h(16)177
+2585 y(securit)o(y)g(authorit)o(y)e(36)177 2635 y(setall)h(command)d(43)177
+2685 y(shell)j(in)o(terpreter)i(43)177 2735 y(signature)e(\014le)g(44)177
+2785 y(Simon)e(Hac)o(k)o(ett)j(7)177 2835 y(size)g(stac)o(k)f(30)1136
+42 y(South)d(Australian)f(Go)o(v)o(ernmen)o(t)g(Departmen)o(t)g(of)1302
+91 y(Lands)k(28)1136 141 y(sp)q(eed)h(47)1136 191 y(spider)f(46)1136
+241 y(stac)o(k)g(memory)d(30)1136 291 y(stac)o(k)j(size)h(30)1136
+341 y(static)f(memory)d(30)1136 391 y(static)j(v)n(ariables)f(30)1136
+440 y(strength)i(t)o(yp)q(esetting)g(46)1136 490 y(structure)h(do)q(cumen)o
+(t)d(16)1136 540 y(structure)j(do)q(cumen)o(t)d(23)1136 590
+y(structure)j(hierarc)o(hical)d(23)1136 640 y(structure)j(macro)c(23)1136
+690 y(st)o(yle)i(co)q(ding)f(28)1136 740 y(suite)h(test)h(47)1136
+790 y(suppression)g(include)f(\014le)g(46)1136 840 y(syn)o(tax)f(F)m(unnelW)m
+(eb)h(14)1136 889 y(syn)o(tax)f(macro)g(call)g(16)1136 939
+y(syn)o(tax)g(macro)g(de\014nition)h(14)1136 989 y(syn)o(tax)f(parameterized)
+i(macro)d(call)h(16)1136 1039 y(syn)o(tax)g(parameterized)i(macro)d
+(de\014nitions)i(15)1136 1089 y(syn)o(tax)f(pragma)f(44)1136
+1139 y(syn)o(tax)h(section)i(44)1136 1189 y(table)e(of)h(con)o(ten)o(ts)h(45)
+1136 1239 y(tangle)e(45)1136 1288 y(T)m(arjan)g(Rob)q(ert)h(Endre)h(45)1136
+1338 y(T)m(arjan72)d(45)1136 1388 y(T)m(arjan72)g(57)1136 1438
+y(test)j(recursion)g(43)1136 1488 y(test)g(suite)f(47)1136
+1538 y(testing)g(regression)h(18)1136 1588 y(text)f(inden)o(tation)f(12)1136
+1638 y(text)h(inden)o(tation)f(12)1136 1687 y(text)h(inden)o(tation)f(30)1136
+1737 y(text)h(inden)o(tation)f(45)1136 1787 y(T)m(eX)h(23)1136
+1837 y(T)m(eX)g(9)1136 1887 y(ThinkC)f(compiler)f(30)1136 1937
+y(trademark)h(36)1136 1987 y(T)m(rev)o(orro)o(w)g(Andrew)i(9)1136
+2037 y(trouble)f(asking)f(for)g(28)1136 2086 y(t)o(yp)q(es)h(naming)e(29)1136
+2136 y(t)o(yp)q(esetter)k(generic)f(46)1136 2186 y(t)o(yp)q(esetting)f
+(strength)i(46)1136 2236 y(t)o(yp)q(esetting)e(9)1136 2286
+y(Univ)o(ersit)o(y)f(Adelaide)h(27)1136 2336 y(Unix)f(36)1136
+2386 y(USDOD83)g(27)1136 2436 y(USDOD83)g(57)1136 2485 y(use)h(of)g(memory)d
+(29)1136 2535 y(v)n(ariables)i(static)h(30)1136 2585 y(v)n(ax)f(vms)f(18)1136
+2635 y(v)o(ersion)i(GNU)f(41)1136 2685 y(v)o(ersion)h(pragma)e(45)1136
+2735 y(video)h(game)g(35)1136 2785 y(vms)f(v)n(ax)h(18)1136
+2835 y(w)o(ea)o(v)o(e)h(45)1042 2940 y(60)p eop
+%%Page: 61 62
+61 61 bop 177 42 a Fn(William)o(s)12 b(Ross)h(1)177 91 y(w)o(ork)h(38)177
+141 y(writing)f(itself)h(F)m(unnelW)m(eb)f(28)1042 2940 y(61)p
+eop
+%%Trailer
+end
+userdict /end-hook known{end-hook}if
+%%EOF
diff --git a/web/funnelAC/hackman/h_manual.sin b/web/funnelAC/hackman/h_manual.sin
new file mode 100644
index 0000000000..72e1b4fa20
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.sin
@@ -0,0 +1,326 @@
+\indexentry{.cld file}{18}
+\indexentry{==}{14}
+\indexentry{@M}{23}
+\indexentry{@Z}{23}
+\indexentry{abbreviations identifier}{28}
+\indexentry{acknowledgements}{7}
+\indexentry{Ada}{18}
+\indexentry{Ada}{27}
+\indexentry{Ada}{7}
+\indexentry{adding features}{36}
+\indexentry{Adelaide University}{27}
+\indexentry{analyser}{45}
+\indexentry{Andrew Trevorrow}{9}
+\indexentry{ANSI}{28}
+\indexentry{ANSI}{57}
+\indexentry{antiquated features}{43}
+\indexentry{ASCII mnemonics}{45}
+\indexentry{asking for trouble}{28}
+\indexentry{authority design}{36}
+\indexentry{authority security}{36}
+\indexentry{availability program}{37}
+\indexentry{backwards compatibility}{11}
+\indexentry{Barry Dwyer}{7}
+\indexentry{Begg Jeremy}{7}
+\indexentry{Bentley Jon}{11}
+\indexentry{Bentley86}{11}
+\indexentry{Bentley86}{57}
+\indexentry{blank indentation}{12}
+\indexentry{blank indentation}{12}
+\indexentry{breakout, GNU}{41}
+\indexentry{Brissenden Roger}{7}
+\indexentry{changes dangers}{35}
+\indexentry{coding style}{28}
+\indexentry{command interface}{43}
+\indexentry{command interpreter}{43}
+\indexentry{command line interface design goals}{19}
+\indexentry{command line interface}{18}
+\indexentry{command setall}{43}
+\indexentry{comment duplication}{18}
+\indexentry{Communications of the ACM}{11}
+\indexentry{compatibility backwards}{11}
+\indexentry{compiler ThinkC}{30}
+\indexentry{compiler}{35}
+\indexentry{conditionals}{44}
+\indexentry{contiguous memory}{45}
+\indexentry{copyright law}{38}
+\indexentry{copyright notice}{1}
+\indexentry{copyright}{38}
+\indexentry{correctness}{47}
+\indexentry{counting diagnostic}{43}
+\indexentry{cross references}{46}
+\indexentry{dangers changes}{35}
+\indexentry{dangers indentation}{13}
+\indexentry{dangers languages}{35}
+\indexentry{David Hulse}{27}
+\indexentry{David Hulse}{7}
+\indexentry{DCL}{13}
+\indexentry{derived work}{38}
+\indexentry{design authority}{36}
+\indexentry{design FunnelWeb}{11}
+\indexentry{design goals command line interface}{19}
+\indexentry{design language}{44}
+\indexentry{detection recursion}{45}
+\indexentry{diagnostic counting}{43}
+\indexentry{diagnostic messages}{25}
+\indexentry{diagnostics}{47}
+\indexentry{document structure macro structure}{23}
+\indexentry{document structure}{16}
+\indexentry{document structure}{23}
+\indexentry{documentation out of date}{18}
+\indexentry{documentation}{43}
+\indexentry{Donald Knuth}{11}
+\indexentry{Donald Knuth}{7}
+\indexentry{duplication comment}{18}
+\indexentry{Dwyer Barry}{7}
+\indexentry{efficiency}{47}
+\indexentry{EOL representation}{45}
+\indexentry{example official}{43}
+\indexentry{extensions filename}{20}
+\indexentry{factor glue}{46}
+\indexentry{features adding}{36}
+\indexentry{features antiquated}{43}
+\indexentry{features modification}{35}
+\indexentry{features removing}{35}
+\indexentry{file .cld}{18}
+\indexentry{file extension protection}{37}
+\indexentry{file markers}{44}
+\indexentry{file names}{19}
+\indexentry{file names}{21}
+\indexentry{file signature}{44}
+\indexentry{filename extensions}{20}
+\indexentry{filename inheritance}{20}
+\indexentry{filenames length}{29}
+\indexentry{filenames portable}{21}
+\indexentry{formal parameter list}{44}
+\indexentry{FunnelWeb design}{11}
+\indexentry{FunnelWeb future}{43}
+\indexentry{FunnelWeb history}{27}
+\indexentry{FunnelWeb implementation}{27}
+\indexentry{FunnelWeb management}{39}
+\indexentry{FunnelWeb modification}{35}
+\indexentry{FunnelWeb motivation}{11}
+\indexentry{FunnelWeb official}{39}
+\indexentry{FunnelWeb past use}{27}
+\indexentry{FunnelWeb protection}{37}
+\indexentry{FunnelWeb syntax}{14}
+\indexentry{FunnelWeb V1}{11}
+\indexentry{FunnelWeb version 1}{27}
+\indexentry{FunnelWeb version 2}{27}
+\indexentry{FunnelWeb version 3}{27}
+\indexentry{FunnelWeb writing itself}{28}
+\indexentry{future FunnelWeb}{43}
+\indexentry{genealogy program}{36}
+\indexentry{generic typesetter}{46}
+\indexentry{glue factor}{46}
+\indexentry{GNU breakout}{41}
+\indexentry{GNU license}{35}
+\indexentry{GNU license}{39}
+\indexentry{GNU License}{49}
+\indexentry{GNU version}{41}
+\indexentry{Hackett Simon}{7}
+\indexentry{headings}{16}
+\indexentry{heap memory}{29}
+\indexentry{hierarchical structure}{23}
+\indexentry{history FunnelWeb}{27}
+\indexentry{Hoare80}{36}
+\indexentry{Hoare80}{57}
+\indexentry{Horton90}{28}
+\indexentry{Horton90}{57}
+\indexentry{Hulse David}{27}
+\indexentry{Hulse David}{7}
+\indexentry{identifier abbreviations}{28}
+\indexentry{identifier}{28}
+\indexentry{implementation FunnelWeb}{27}
+\indexentry{include file suppression}{46}
+\indexentry{indentation blank}{12}
+\indexentry{indentation dangers}{13}
+\indexentry{indentation no}{12}
+\indexentry{indentation text}{12}
+\indexentry{indentation text}{30}
+\indexentry{indentation text}{45}
+\indexentry{indentation}{12}
+\indexentry{indentation}{12}
+\indexentry{indented macro call}{12}
+\indexentry{index program}{43}
+\indexentry{inheritance filename}{20}
+\indexentry{interface command line}{18}
+\indexentry{interface command}{43}
+\indexentry{interpreter command}{43}
+\indexentry{interpreter shell}{43}
+\indexentry{invocations number}{22}
+\indexentry{issues miscellaneous}{18}
+\indexentry{Jeremy Begg}{7}
+\indexentry{Jon Bentley}{11}
+\indexentry{Kernighan88}{28}
+\indexentry{Kernighan88}{57}
+\indexentry{Knuth Donald}{11}
+\indexentry{Knuth Donald}{7}
+\indexentry{Knuth83}{11}
+\indexentry{Knuth83}{57}
+\indexentry{Knuth84}{57}
+\indexentry{Knuth84}{9}
+\indexentry{Lamport86}{57}
+\indexentry{Lamport86}{9}
+\indexentry{language design}{44}
+\indexentry{languages dangers}{35}
+\indexentry{LaTeX}{9}
+\indexentry{LaTeX}{9}
+\indexentry{law copyright}{38}
+\indexentry{leakage memory}{30}
+\indexentry{length filenames}{29}
+\indexentry{license GNU}{35}
+\indexentry{license GNU}{39}
+\indexentry{License GNU}{49}
+\indexentry{license}{38}
+\indexentry{lister}{46}
+\indexentry{Macintosh}{29}
+\indexentry{Macintosh}{30}
+\indexentry{Macintosh}{9}
+\indexentry{macro call syntax}{16}
+\indexentry{macro definition syntax}{14}
+\indexentry{macro structure document structure}{23}
+\indexentry{macro structure}{23}
+\indexentry{make}{44}
+\indexentry{malloc}{29}
+\indexentry{management FunnelWeb}{39}
+\indexentry{manuals modifying}{38}
+\indexentry{mapper}{44}
+\indexentry{markers file}{44}
+\indexentry{memory contiguous}{45}
+\indexentry{memory heap}{29}
+\indexentry{memory leakage}{30}
+\indexentry{memory package}{29}
+\indexentry{memory stack}{30}
+\indexentry{memory static}{30}
+\indexentry{memory use of}{29}
+\indexentry{messages diagnostic}{25}
+\indexentry{miscellaneous issues}{18}
+\indexentry{mnemonics ASCII}{45}
+\indexentry{modification features}{35}
+\indexentry{modification FunnelWeb}{35}
+\indexentry{modifying manuals}{38}
+\indexentry{motivation FunnelWeb}{11}
+\indexentry{MSDOS}{29}
+\indexentry{names file}{19}
+\indexentry{names file}{21}
+\indexentry{naming pointers}{29}
+\indexentry{naming types}{29}
+\indexentry{no indentation}{12}
+\indexentry{no indentation}{12}
+\indexentry{notice copyright}{1}
+\indexentry{number invocations}{22}
+\indexentry{number output files}{12}
+\indexentry{numbering section}{23}
+\indexentry{Occam's razor}{12}
+\indexentry{official example}{43}
+\indexentry{official FunnelWeb}{39}
+\indexentry{options}{43}
+\indexentry{out of date documentation}{18}
+\indexentry{output files number}{12}
+\indexentry{OzTeX}{9}
+\indexentry{package memory}{29}
+\indexentry{parameter list formal}{44}
+\indexentry{parameterized macro call syntax}{16}
+\indexentry{parameterized macro definitions syntax}{15}
+\indexentry{parser}{45}
+\indexentry{Pascal}{12}
+\indexentry{past use FunnelWeb}{27}
+\indexentry{Ph.D.}{27}
+\indexentry{pointers naming}{29}
+\indexentry{portability}{28}
+\indexentry{portable filenames}{21}
+\indexentry{pragma syntax}{44}
+\indexentry{pragma version}{45}
+\indexentry{preface}{5}
+\indexentry{presentation notes}{9}
+\indexentry{program availability}{37}
+\indexentry{program genealogy}{36}
+\indexentry{program index}{43}
+\indexentry{programming pearls}{11}
+\indexentry{protection file extension}{37}
+\indexentry{protection FunnelWeb}{37}
+\indexentry{Rabinowitz90}{28}
+\indexentry{Rabinowitz90}{28}
+\indexentry{Rabinowitz90}{57}
+\indexentry{Ramsey89}{46}
+\indexentry{Ramsey89}{57}
+\indexentry{recursion detection}{45}
+\indexentry{recursion test}{43}
+\indexentry{references cross}{46}
+\indexentry{references}{57}
+\indexentry{regression testing}{18}
+\indexentry{removing features}{35}
+\indexentry{representation EOL}{45}
+\indexentry{Robert Endre Tarjan}{45}
+\indexentry{Roger Brissenden}{7}
+\indexentry{Ross Williams}{1}
+\indexentry{scanner}{44}
+\indexentry{section numbering}{23}
+\indexentry{section syntax}{44}
+\indexentry{sections}{16}
+\indexentry{security authority}{36}
+\indexentry{setall command}{43}
+\indexentry{shell interpreter}{43}
+\indexentry{signature file}{44}
+\indexentry{Simon Hackett}{7}
+\indexentry{size stack}{30}
+\indexentry{South Australian Government Department of Lands}{28}
+\indexentry{speed}{47}
+\indexentry{spider}{46}
+\indexentry{stack memory}{30}
+\indexentry{stack size}{30}
+\indexentry{static memory}{30}
+\indexentry{static variables}{30}
+\indexentry{strength typesetting}{46}
+\indexentry{structure document}{16}
+\indexentry{structure document}{23}
+\indexentry{structure hierarchical}{23}
+\indexentry{structure macro}{23}
+\indexentry{style coding}{28}
+\indexentry{suite test}{47}
+\indexentry{suppression include file}{46}
+\indexentry{syntax FunnelWeb}{14}
+\indexentry{syntax macro call}{16}
+\indexentry{syntax macro definition}{14}
+\indexentry{syntax parameterized macro call}{16}
+\indexentry{syntax parameterized macro definitions}{15}
+\indexentry{syntax pragma}{44}
+\indexentry{syntax section}{44}
+\indexentry{table of contents}{45}
+\indexentry{tangle}{45}
+\indexentry{Tarjan Robert Endre}{45}
+\indexentry{Tarjan72}{45}
+\indexentry{Tarjan72}{57}
+\indexentry{test recursion}{43}
+\indexentry{test suite}{47}
+\indexentry{testing regression}{18}
+\indexentry{text indentation}{12}
+\indexentry{text indentation}{12}
+\indexentry{text indentation}{30}
+\indexentry{text indentation}{45}
+\indexentry{TeX}{23}
+\indexentry{TeX}{9}
+\indexentry{ThinkC compiler}{30}
+\indexentry{trademark}{36}
+\indexentry{Trevorrow Andrew}{9}
+\indexentry{trouble asking for}{28}
+\indexentry{types naming}{29}
+\indexentry{typesetter generic}{46}
+\indexentry{typesetting strength}{46}
+\indexentry{typesetting}{9}
+\indexentry{University Adelaide}{27}
+\indexentry{Unix}{36}
+\indexentry{USDOD83}{27}
+\indexentry{USDOD83}{57}
+\indexentry{use of memory}{29}
+\indexentry{variables static}{30}
+\indexentry{vax vms}{18}
+\indexentry{version GNU}{41}
+\indexentry{version pragma}{45}
+\indexentry{video game}{35}
+\indexentry{vms vax}{18}
+\indexentry{weave}{45}
+\indexentry{Williams Ross}{1}
+\indexentry{work}{38}
+\indexentry{writing itself FunnelWeb}{28}
diff --git a/web/funnelAC/hackman/h_manual.tex b/web/funnelAC/hackman/h_manual.tex
new file mode 100644
index 0000000000..716a28277c
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.tex
@@ -0,0 +1,283 @@
+%==============================================================================%
+% FUNNELWEB USER'S MANUAL %
+%==============================================================================%
+%
+% Summary
+% -------
+% This is the main .tex file of the FunnelWeb Hacker's Manual.
+%
+% For a list of the other files that contribute to this document,
+% see the list of files given in \input lines at the end of this file.
+%
+% See the TeX comments below to find out how to typeset this document.
+%
+%
+% Copyright
+% ---------
+% Copyright (C) 1992 Ross N. Williams.
+%
+% Permission is granted to make and distribute verbatim copies of this manual
+% provided that the copyright notice and this permission notice are preserved
+% on all copies.
+%
+%
+% Version
+% -------
+% Date : May 1992.
+% Version : 1.0.
+%
+%
+% Author
+% ------
+% Name : Ross Williams.
+% Email : ross@spam.adelaide.edu.au
+% Snail : 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+%
+%
+% How to Typeset This Document
+% ----------------------------
+% This document is written in a format suitable for processing by the LaTeX
+% typesetting system which can be found on many machines around the world.
+% The document is an entirely self contained LaTeX document. To assist in
+% the electronic distribution of this document, all diagrams have been
+% constructing using ASCII text from within LaTeX. This means that all you
+% need to print this document is a LaTeX typesetting system.
+%
+% To print this document using LaTeX, give a command sequence that looks
+% something like this:
+%
+% latex manual
+% latex manual
+% sort -f <manual.idx >manual.sin
+% % Start here if manual.aux, manual.toc, and manual.sin already exist.
+% latex manual
+% print manual
+%
+% The commands must be given three times so as to allow the cross
+% referencing information to be correctly assembled.
+% The "sort" command should perform a case insensitive sort of the lines of
+% its input, but should not alter the lines it is sorting. In the example
+% about, the "-f" option specifies that the sort should be case insensitive.
+% The "print" command should print the .dvi file generated by LaTeX.
+% The details of the typesetting sequence above may vary on your computer
+% system.
+%
+%=============================================================================%
+
+
+% Basic Document Style
+% --------------------
+% The default font size is 10pt which is what I want.
+% titlepage - Instructs LaTeX to produce a title page at the front.
+% book - Use the "book" built in format.
+\documentstyle[titlepage]{book}
+
+% The following pagestyle command instructs LaTeX to set each page with just
+% a page number at the middle of the bottom of each page.
+\pagestyle{plain}
+
+% By default, the "book" style sets even and odd pages differently on the
+% assumption that the result is to be used in a two-sided printing process.
+% However, most people printing this will print it single sided.
+% To suppress double sided mode, we need to give the \onecolumn command.
+\onecolumn
+
+
+% Page Size and Position
+% ----------------------
+% The following sets the size of the text box and its position on the page.
+% It works OK on A4 paper. I suppose I should test it on American paper too.
+\textwidth 15cm
+\textheight 24cm
+\topmargin 0cm
+\oddsidemargin 1.5cm
+\evensidemargin 1.5cm
+\headheight 0cm
+\headsep 0cm
+
+
+% Table of Contents
+% -----------------
+% Specify that all headings be numbered and appear in the Table of Contents.
+\setcounter{secnumdepth}{100}
+\setcounter{tocdepth}{100}
+
+% LaTeX lets you create an unnumbered chapter, but it doesn't put it in
+% the table of contents. So we have to do it manually.
+\def\pseudochapter#1{%
+\chapter*{#1}
+\addcontentsline{toc}{chapter}{#1}
+}
+
+% Paragraph Separation and Indentation
+% ------------------------------------
+% The default LaTeX format is to have paragraphs jammed up against each other
+% with indentation of text on the first line of each paragraph used to
+% highlight the start of each paragraph. I prefer to identify paragraphs
+% by separating them with space and eliminating the indentation.
+\parskip \medskipamount
+\parindent 0pt
+
+
+% Quick Style Macros
+% ------------------
+% Use of the following macros is much neater and safer than opening a group
+% and setting a mode (e.g. {\bf sloth}) as these macros will cause TeX to
+% scream if they span more than one paragraph whereas the group method
+% can cause half the document to be set in a funny mode.
+% Other little macros here serve the same neatening normalizing purposes.
+\def\i#1{{\it #1}} % Italics.
+\def\b#1{{\bf #1}} % Bold.
+\def\p#1{{\tt #1}} % Program text.
+\def\sq#1{`#1'} % Single quotes.
+\def\dq#1{``#1''} % Double quotes.
+\def\dqp#1{\dq{\p{#1}}} % Double quoted program text.
+\def\fix#1{\footnote{$\bullet$ #1}} % Fix it up footnote.
+\def\softfix#1{} % Marks opportunity for improvement.
+\def\eg{e.g.~} % Spacing regulated "e.g.".
+\def\ie{i.e.~} % Spacing regulated "i.e.".
+\def\til{\char`\~} % For tilde ("~") character.
+\def\circumflex{\char`\^} % Circumflex.
+\def\bs{{\tt\char`\\}} % Backslash.
+
+% Point Making
+% ------------
+% LaTeX provides some useful environment for listing points. However, it does
+% not seem to provide what I want which is a paragraph of text led in by
+% a label set in bold.
+\def\thing#1{{\bf #1}}
+\def\firstthing#1{\thing{#1}}
+\def\narrowthing#1#2{{%From defintion of \narrower
+\advance\leftskip1cm%
+\advance\rightskip1cm%
+{\bf #1} #2\vskip0pt}}
+\def\narrowtext#1{{%From defintion of \narrower
+\advance\leftskip1cm%
+\advance\rightskip1cm%
+#1\vskip0pt}}
+\def\summary{\b{Summary:}\ }
+
+% Invisible Annotations
+% ---------------------
+% Sometimes it is convenient to be able to annotate the LaTeX code without
+% causing text to appear in the document.
+% Here, the \checked{} macro can be placed next to any quotation or
+% fact, or other externally dependent material that has to be checked
+% before publication. The \note{} macro can be used to add a note.
+% Both macros are safer than "%" in a paragraph where the text may be
+% continually being rearranged across lines.
+\def\checked#1{}
+\def\note#1{}
+
+
+% Wide Verbatim Text
+% ------------------
+% This document was originally set in 12pt and the result was that many of
+% the verbatim examples wouldn't fit. To solve this, I created two macros
+% to reduce and increase the size of the text, and wrapped the longer
+% verbatim texts in calls to the macros. Later, the document was reset in
+% 10pt eliminating the original problem, so I redefined the macros to empty.
+%\def\beginsmall{\scriptsize}
+%\def\endsmall{\normalsize}
+\def\beginsmall{}
+\def\endsmall{}
+
+
+% The Index
+% ---------
+% LaTeX provides a single command (\index) for adding index entries to the
+% index. We shorten it and refine it a little with a few definitions.
+\def\newterm#1{{\bf #1}\x{#1}} % Special terminology.
+\def\x#1{\index{#1}} % Normal index entry.
+\def\xx#1#2{\index{#1 #2}\index{#2 #1}} % Symmetric index entry.
+\def\xn#1#2{\xx{#1}{#2}} % For a person's name.
+\def\xs#1#2{\index{#1, #2}} % For an entry with a subclause.
+
+
+% References
+% ----------
+\def\paper#1{{\bf [#1]}\x{#1}\linebreak[1]{}}
+
+
+% Figures and Tables
+% ------------------
+% LaTeX numbers figures by chapter and doesn't position captions where I
+% want them and so I have decided to do it all manually. I haven't got
+% time for fancy stuff so I am using manual macros.
+\def\mylabel#1#2{%
+\begin{quotation}
+\footnotesize\baselineskip=12pt #2
+\end{quotation}
+\centerline{#1}
+\smallskip}
+
+\def\figfor#1{{\bf Figure~#1}}
+\def\tabfor#1{{\bf Table~#1}}
+
+\def\figlicense{\figfor{1}}
+%\def\figtwo{\figfor{2}}
+
+%\def\tabone{\tabfor{1}}
+%\def\tabtwo{\tabfor{2}}
+
+
+% Glossary
+% --------
+\def\gloss#1{\thing{#1:}\x{#1}}
+
+
+% Random Leftover Stuff
+% ---------------------
+\def\topicbreak{\bigskip\centerline{--- $\S$ ---}\bigskip}
+
+
+
+%------------------------------------------------------------------------------
+
+% Title Page
+% ----------
+% Although the title should really be in the ch0.tex file, LaTeX forces us to
+% put it here.
+\begin{titlepage}
+\vspace*{3cm}
+\begin{center}
+\Huge
+\vspace{2cm}
+FunnelWeb Hacker's Manual\\
+\vspace{2cm}
+\LARGE
+Ross~N.~Williams\\
+\vspace{1cm}
+\Large
+V1.0 for FunnelWeb V3.0\\
+\vspace{1cm}
+May 1992\\
+\normalsize
+\end{center}
+\end{titlepage}
+
+% Note: LaTeX sometimes puts a blank page before chapters so as to
+% start each chapter on an odd-numbered page. There is nothing that I
+% can do about this. This is part of the cost of using LaTeX instead
+% of TeX.
+
+\makeindex
+
+%-------------------------------------------------------------------------------
+
+\begin{document}
+\sloppy
+\nonstopmode
+
+\input h_ch0 % Table of contents etc.
+\input h_ch1 % FunnelWeb Design
+\input h_ch2 % FunnelWeb Implementation
+\input h_ch3 % FunnelWeb Modification
+\input h_ch4 % FunnelWeb Future
+\input h_cha % Appendices
+
+\end{document}
+
+%==============================================================================%
+% End of Main .TeX File of FunnelWeb Hacker's Manual %
+%==============================================================================%
diff --git a/web/funnelAC/hackman/h_manual.toc b/web/funnelAC/hackman/h_manual.toc
new file mode 100644
index 0000000000..41e1e43e82
--- /dev/null
+++ b/web/funnelAC/hackman/h_manual.toc
@@ -0,0 +1,62 @@
+\contentsline {chapter}{Preface}{5}
+\contentsline {chapter}{Acknowledgements}{7}
+\contentsline {chapter}{Presentation Notes}{9}
+\contentsline {chapter}{\numberline {1}FunnelWeb Design}{11}
+\contentsline {section}{\numberline {1.1}Motivation for FunnelWeb}{11}
+\contentsline {section}{\numberline {1.2}Indentation}{12}
+\contentsline {section}{\numberline {1.3}Review of FunnelWeb Syntax}{14}
+\contentsline {subsection}{\numberline {1.3.1}Review of Macro Definition Syntax}{14}
+\contentsline {subsection}{\numberline {1.3.2}Review of Macro Call Syntax}{16}
+\contentsline {subsection}{\numberline {1.3.3}Review of Parameterized Macro Call Syntax}{16}
+\contentsline {section}{\numberline {1.4}Document Structuring}{16}
+\contentsline {section}{\numberline {1.5}Discussion of Some Miscellaneous Issues}{18}
+\contentsline {section}{\numberline {1.6}Automated Regression Testing}{18}
+\contentsline {section}{\numberline {1.7}Command Line Interface}{18}
+\contentsline {section}{\numberline {1.8}File Name Management}{19}
+\contentsline {subsection}{\numberline {1.8.1}Filename Extensions}{20}
+\contentsline {subsection}{\numberline {1.8.2}Filename Inheritance}{20}
+\contentsline {subsection}{\numberline {1.8.3}Portable Structure of File Names}{21}
+\contentsline {section}{\numberline {1.9}Specifying Constraints on the Number of Instantiations}{22}
+\contentsline {section}{\numberline {1.10}The Relationship Between Document Structure and Macro Structure}{23}
+\contentsline {section}{\numberline {1.11}Diagnostic Messages}{25}
+\contentsline {section}{\numberline {1.12}Summary}{25}
+\contentsline {chapter}{\numberline {2}FunnelWeb Implementation}{27}
+\contentsline {section}{\numberline {2.1}Introduction}{27}
+\contentsline {section}{\numberline {2.2}History of FunnelWeb Implementations}{27}
+\contentsline {section}{\numberline {2.3}Why FunnelWeb Wasn't Used to Write Itself}{28}
+\contentsline {section}{\numberline {2.4}Coding Style}{28}
+\contentsline {section}{\numberline {2.5}Use of Memory}{29}
+\contentsline {section}{\numberline {2.6}The Heap}{29}
+\contentsline {section}{\numberline {2.7}The Stack}{30}
+\contentsline {section}{\numberline {2.8}Static Variables}{30}
+\contentsline {section}{\numberline {2.9}Implementing Text Indentation}{30}
+\contentsline {chapter}{\numberline {3}FunnelWeb Modification}{35}
+\contentsline {section}{\numberline {3.1}Introduction}{35}
+\contentsline {section}{\numberline {3.2}The Danger of Modifying Languages}{35}
+\contentsline {section}{\numberline {3.3}Authority vs User Security}{36}
+\contentsline {section}{\numberline {3.4}What I Want to Protect}{37}
+\contentsline {section}{\numberline {3.5}Modifying the Manuals}{38}
+\contentsline {section}{\numberline {3.6}How Copyright Law Works}{38}
+\contentsline {section}{\numberline {3.7}Management of the Official FunnelWeb}{39}
+\contentsline {section}{\numberline {3.8}A GNU Version?}{41}
+\contentsline {section}{\numberline {3.9}Summary}{41}
+\contentsline {chapter}{\numberline {4}FunnelWeb Future}{43}
+\contentsline {section}{\numberline {4.1}Documentation}{43}
+\contentsline {section}{\numberline {4.2}Command Line Interface}{43}
+\contentsline {section}{\numberline {4.3}Shell Interpreter}{43}
+\contentsline {section}{\numberline {4.4}Language Design}{44}
+\contentsline {section}{\numberline {4.5}Scanner/Mapper}{44}
+\contentsline {section}{\numberline {4.6}Parser}{45}
+\contentsline {section}{\numberline {4.7}Analyser}{45}
+\contentsline {section}{\numberline {4.8}Tangle}{45}
+\contentsline {section}{\numberline {4.9}Weave}{45}
+\contentsline {section}{\numberline {4.10}Lister}{46}
+\contentsline {section}{\numberline {4.11}Diagnostics}{47}
+\contentsline {section}{\numberline {4.12}Speed}{47}
+\contentsline {section}{\numberline {4.13}Correctness}{47}
+\contentsline {section}{\numberline {4.14}Test Suite}{47}
+\contentsline {section}{\numberline {4.15}Machine-Specific Changes}{48}
+\contentsline {section}{\numberline {4.16}Summary}{48}
+\contentsline {chapter}{\numberline {A}GNU General Public License Version 2}{49}
+\contentsline {chapter}{\numberline {B}References}{57}
+\contentsline {chapter}{Index}{57}